diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml
index 45936ce..5dae377 100644
--- a/.github/workflows/ci.yml
+++ b/.github/workflows/ci.yml
@@ -41,7 +41,9 @@ jobs:
echo "::remove-matcher owner=tsc::"
npm run verify
- name: Consume candidate package through all documentation examples
- run: npm run docs:examples -- --evidence .tmp/docs/candidate.json
+ env:
+ FLOWKIT_DOCS_EVIDENCE: .tmp/docs/candidate.json
+ run: npm run docs:examples
- name: Keep documentation consumer evidence
if: always()
uses: actions/upload-artifact@b7c566a772e6b6bfb58ed0dc250532a479d7789f # v6
diff --git a/.github/workflows/docs.yml b/.github/workflows/docs.yml
index c839992..1a8c29d 100644
--- a/.github/workflows/docs.yml
+++ b/.github/workflows/docs.yml
@@ -12,7 +12,7 @@ on:
inputs:
packageReleaseCommit: { description: 'Original v1.0.0 package commit (40 hex)', required: true, type: string }
docsCommit: { description: 'Reviewed documentation commit (40 hex)', required: true, type: string }
- version: { description: 'Exact public version', default: '1.0.0', required: true, type: string }
+ version: { description: 'Exact private package version', default: '1.0.0', required: true, type: string }
releaseRunId: { description: 'Original publish workflow run ID', required: true, type: string }
releaseRunAttempt: { description: 'Original pack/publish attempt', required: true, type: string }
@@ -39,6 +39,7 @@ jobs:
permissions:
contents: read
actions: read
+ packages: read
steps:
- name: Checkout original package source
uses: actions/checkout@d23441a48e516b6c34aea4fa41551a30e30af803 # v6
@@ -57,6 +58,8 @@ jobs:
with:
node-version: '24.22.1'
package-manager-cache: false
+ registry-url: 'https://npm.pkg.github.com'
+ scope: '@devcodex-labs'
- name: Check exact original checkout
working-directory: package-source
run: node --input-type=module -e 'import{execFileSync}from"node:child_process";import assert from"node:assert/strict";assert.match(process.env.PACKAGE_COMMIT,/^[a-f0-9]{40}$/);assert.equal(execFileSync("git",["rev-parse","HEAD"],{encoding:"utf8"}).trim(),process.env.PACKAGE_COMMIT);'
@@ -85,21 +88,25 @@ jobs:
repository: devcodex-labs/flowkit
run-id: ${{ inputs.releaseRunId }}
- name: Verify immutable candidate and allowed docs repair
+ env:
+ NODE_AUTH_TOKEN: ${{ secrets.GITHUB_TOKEN }}
working-directory: package-source
run: |
node scripts/docs/release-identity.mjs verify --metadata .tmp/source-metadata.json --record .tmp/identity/release-record.json --release-dir .tmp/release --docs-root ../docs-source --out .tmp/docs/deployment-identity.json
- node scripts/release.mjs verify --tag v1.0.0
- npm run docs:public-package -- --version 1.0.0 --manifest .tmp/release/release.json --evidence .tmp/docs/public-package.json
+ node scripts/release.mjs verify --tag "v${RELEASE_VERSION}"
+ npm run docs:private-package -- --version "$RELEASE_VERSION" --manifest .tmp/release/release.json --evidence .tmp/docs/public-package.json
- run: npm ci --ignore-scripts --no-audit --no-fund
working-directory: docs-source
- run: npm --prefix website ci --ignore-scripts --no-audit --no-fund
working-directory: docs-source
- - name: Verify repaired tutorials against original public package and build site
+ - name: Verify repaired tutorials against original private package and build site
+ env:
+ NODE_AUTH_TOKEN: ${{ secrets.GITHUB_TOKEN }}
working-directory: docs-source
run: |
npm run build
npm run docs:check
- npm run docs:examples -- --registry-version 1.0.0 --manifest ../package-source/.tmp/release/release.json --evidence .tmp/docs/public-consumer.json
+ npm run docs:examples -- --registry-version "$RELEASE_VERSION" --manifest ../package-source/.tmp/release/release.json --evidence .tmp/docs/public-consumer.json
npm run docs:build
node --input-type=module -e 'import{readFileSync,writeFileSync}from"node:fs";import{createHash}from"node:crypto";const i=JSON.parse(readFileSync("../package-source/.tmp/docs/deployment-identity.json"));i.websiteLockSha256=createHash("sha256").update(readFileSync("website/package-lock.json")).digest("hex");writeFileSync(".tmp/docs/site-build.json",JSON.stringify(i,null,2));'
- uses: actions/upload-artifact@b7c566a772e6b6bfb58ed0dc250532a479d7789f # v6
@@ -121,6 +128,8 @@ jobs:
path: docs-source/website/doc_build
deploy:
+ # The site may be public; keep deployment gated by explicit release authorization.
+ if: ${{ vars.FLOWKIT_ENABLE_PAGES_DEPLOY == 'true' }}
needs: build
runs-on: ubuntu-24.04
permissions:
diff --git a/.github/workflows/publish.yml b/.github/workflows/publish.yml
index a063b26..fafb3e0 100644
--- a/.github/workflows/publish.yml
+++ b/.github/workflows/publish.yml
@@ -1,4 +1,4 @@
-name: Publish npm
+name: Publish GitHub Packages
on:
push:
@@ -8,7 +8,7 @@ permissions:
contents: read
concurrency:
- group: npm-${{ github.ref }}
+ group: github-packages-${{ github.ref }}
cancel-in-progress: false
jobs:
@@ -35,6 +35,8 @@ jobs:
pack:
needs: checks
+ outputs:
+ version: ${{ steps.release_meta.outputs.version }}
runs-on: ubuntu-24.04
timeout-minutes: 10
steps:
@@ -52,7 +54,9 @@ jobs:
RELEASE_TAG: ${{ github.ref_name }}
run: npm run release:pack -- --tag "$RELEASE_TAG"
- name: Consume the exact candidate bytes
- run: npm run docs:examples -- --package .tmp/release/devcodex-flowkit-1.0.0.tgz --evidence .tmp/docs/release-candidate.json
+ run: |
+ TARBALL="$(node --input-type=module -e 'import{readFileSync}from"node:fs";console.log(".tmp/release/"+JSON.parse(readFileSync(".tmp/release/release.json","utf8")).filename)')"
+ npm run docs:examples -- --package "$TARBALL" --evidence .tmp/docs/release-candidate.json
- uses: actions/upload-artifact@b7c566a772e6b6bfb58ed0dc250532a479d7789f # v6
id: npm-artifact
with:
@@ -64,15 +68,19 @@ jobs:
include-hidden-files: true
retention-days: 90
- name: Record immutable package release identity
+ id: release_meta
env:
+ RELEASE_TAG: ${{ github.ref_name }}
PACKAGE_COMMIT: ${{ github.sha }}
DOCS_COMMIT: ${{ github.sha }}
- RELEASE_VERSION: '1.0.0'
RELEASE_RUN_ID: ${{ github.run_id }}
RELEASE_RUN_ATTEMPT: ${{ github.run_attempt }}
NPM_ARTIFACT_ID: ${{ steps.npm-artifact.outputs.artifact-id }}
NPM_ARTIFACT_DIGEST: ${{ steps.npm-artifact.outputs.artifact-digest }}
- run: node scripts/docs/release-identity.mjs create --release-dir .tmp/release --out .tmp/release-identity/release-record.json
+ run: |
+ export RELEASE_VERSION="${RELEASE_TAG#v}"
+ echo "version=$RELEASE_VERSION" >> "$GITHUB_OUTPUT"
+ node scripts/docs/release-identity.mjs create --release-dir .tmp/release --out .tmp/release-identity/release-record.json
- uses: actions/upload-artifact@b7c566a772e6b6bfb58ed0dc250532a479d7789f # v6
with:
name: release-identity-${{ github.run_attempt }}
@@ -82,12 +90,14 @@ jobs:
retention-days: 90
publish:
+ # Publishing requires explicit owner approval of the proprietary license.
+ if: ${{ vars.FLOWKIT_ENABLE_PACKAGE_PUBLISH == 'true' }}
needs: pack
runs-on: ubuntu-24.04
timeout-minutes: 10
permissions:
contents: read
- id-token: write
+ packages: write
steps:
- uses: actions/checkout@d23441a48e516b6c34aea4fa41551a30e30af803 # v6
with:
@@ -96,9 +106,9 @@ jobs:
with:
node-version: '24.22.1'
package-manager-cache: false
+ registry-url: 'https://npm.pkg.github.com'
+ scope: '@devcodex-labs'
- run: npm ci --ignore-scripts --no-audit --no-fund
- - name: Select the documented OIDC-capable npm CLI
- run: npm install --global npm@11.5.1 --ignore-scripts --no-audit --no-fund
- uses: actions/download-artifact@37930b1c2abaa49bbe596cd826c3c89aef350131 # v7
with:
name: npm-release-${{ github.run_attempt }}
@@ -110,13 +120,19 @@ jobs:
run: |
node scripts/release.mjs verify --tag "$RELEASE_TAG"
node --input-type=module -e 'import {readFileSync,appendFileSync} from "node:fs"; const m=JSON.parse(readFileSync(".tmp/release/release.json","utf8")); appendFileSync(process.env.GITHUB_OUTPUT, `dist_tag=${m.npmTag}\n`);'
- - name: Publish the verified tarball through npm trusted publishing
+ - name: Publish verified tarball to private GitHub Packages
env:
+ NODE_AUTH_TOKEN: ${{ secrets.GITHUB_TOKEN }}
NPM_DIST_TAG: ${{ steps.artifact.outputs.dist_tag }}
- run: npm publish .tmp/release/*.tgz --access public --registry=https://registry.npmjs.org/ --tag "$NPM_DIST_TAG"
+ run: npm publish .tmp/release/*.tgz --registry=https://npm.pkg.github.com/ --tag "$NPM_DIST_TAG"
- public-consumer:
+ private-consumer:
needs: publish
+ permissions:
+ contents: read
+ packages: read
+ env:
+ NODE_AUTH_TOKEN: ${{ secrets.GITHUB_TOKEN }}
runs-on: ubuntu-24.04
timeout-minutes: 15
steps:
@@ -127,34 +143,53 @@ jobs:
with:
node-version: '24.22.1'
package-manager-cache: false
+ registry-url: 'https://npm.pkg.github.com'
+ scope: '@devcodex-labs'
- run: npm ci --ignore-scripts --no-audit --no-fund
- uses: actions/download-artifact@37930b1c2abaa49bbe596cd826c3c89aef350131 # v7
with:
name: npm-release-${{ github.run_attempt }}
path: .tmp/release
- - run: node scripts/release.mjs verify --tag v1.0.0
- - run: npm run docs:public-package -- --version 1.0.0 --manifest .tmp/release/release.json --evidence .tmp/docs/public-package.json
- - run: npm run docs:examples -- --registry-version 1.0.0 --manifest .tmp/release/release.json --evidence .tmp/docs/public-consumer.json
+ - name: Verify published GitHub Package stays private
+ env:
+ GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
+ run: node scripts/docs/check-package-privacy.mjs
+ - name: Verify original package and private registry
+ env:
+ RELEASE_TAG: ${{ github.ref_name }}
+ run: |
+ VERSION="${RELEASE_TAG#v}"
+ node scripts/release.mjs verify --tag "$RELEASE_TAG"
+ npm run docs:private-package -- --version "$VERSION" --manifest .tmp/release/release.json --evidence .tmp/docs/private-package.json
+ - name: Run consumer examples against the exact private version
+ env:
+ RELEASE_TAG: ${{ github.ref_name }}
+ run: |
+ VERSION="${RELEASE_TAG#v}"
+ npm run docs:examples -- --registry-version "$VERSION" --manifest .tmp/release/release.json --evidence .tmp/docs/private-consumer.json
- uses: actions/upload-artifact@b7c566a772e6b6bfb58ed0dc250532a479d7789f # v6
if: always()
with:
- name: public-package-evidence-${{ github.run_attempt }}
+ name: private-package-evidence-${{ github.run_attempt }}
path: .tmp/docs/*.json
include-hidden-files: true
if-no-files-found: ignore
retention-days: 90
docs:
- needs: public-consumer
+ # Public documentation is approved; deploying remains an explicit release action.
+ if: ${{ vars.FLOWKIT_ENABLE_PAGES_DEPLOY == 'true' }}
+ needs: [pack, private-consumer]
permissions:
contents: read
actions: read
+ packages: read
pages: write
id-token: write
uses: ./.github/workflows/docs.yml
with:
packageReleaseCommit: ${{ github.sha }}
docsCommit: ${{ github.sha }}
- version: '1.0.0'
+ version: ${{ needs.pack.outputs.version }}
releaseRunId: ${{ github.run_id }}
releaseRunAttempt: ${{ github.run_attempt }}
diff --git a/.gitignore b/.gitignore
index 6636ab9..af2df8d 100644
--- a/.gitignore
+++ b/.gitignore
@@ -4,3 +4,4 @@ dist/
*.tgz
website/doc_build/
website/.rspress/
+.npmrc
diff --git a/.npmrc.example b/.npmrc.example
new file mode 100644
index 0000000..dfac82f
--- /dev/null
+++ b/.npmrc.example
@@ -0,0 +1,2 @@
+@devcodex-labs:registry=https://npm.pkg.github.com
+//npm.pkg.github.com/:_authToken=${NODE_AUTH_TOKEN}
diff --git a/CHANGELOG.md b/CHANGELOG.md
index 04574ec..0bee9ed 100644
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -2,14 +2,15 @@
## 1.0.0
-FlowKit 的首个正式版本。
+FlowKit v1.0.0 发布候选(实际发布状态以 GitHub Packages 记录和 Git Tag 为准)。
- 用 JavaScript / TypeScript 字面量 DSL 定义工作流,支持 Agent、业务动作、验证、并行、条件、循环、人工审批和终点。
- 静态检查流程结构、数据声明、Skill 引用及受限条件表达式,输出可读 JavaScript 和 Mermaid。
- 提供 run、compile、compileSource、check、evalWhen、isControlSignal,以及 compile/check 命令行。
+- 可选 capability-graph Provider 与宿主动作适配:仅负责能力声明、查询约束及显式动作绑定,不内置第二套 Runtime。
- 通过宿主 Runtime 执行业务;支持本地和受限制的 HTTPS Skill、结果校验与重试、跟踪、取消信号及 AOT 一致性检查。
-- 提供详细中文文档、完整确定性示例和 MIT 许可证。
+- 提供详细中文文档、完整确定性示例和专有授权。
需要 Node.js 22.13.0 或更高版本。FlowKit 不内置模型服务、Schema 校验器或持久化审批服务;这些能力由宿主提供。并行分支共享状态,any 汇合不会取消其他分支;AOT 部署仍需保留原始源码和对应 Skill。
-[文档](https://devcodex-labs.github.io/flowkit/) · [npm](https://www.npmjs.com/package/@devcodex/flowkit) · [许可证](LICENSE)
+[文档](https://devcodex-labs.github.io/flowkit/) · GitHub Packages(私有,需授权) · [许可证](LICENSE)
diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md
index 1932030..afb9fa0 100644
--- a/CONTRIBUTING.md
+++ b/CONTRIBUTING.md
@@ -1,6 +1,6 @@
# 参与贡献
-感谢你为 FlowKit 提供可复现的问题、文档改进和实现修复。完整流程见[中文贡献文档](https://devcodex-labs.github.io/flowkit/community/contributing.html)。
+FlowKit 为私有专有项目,仅允许经过授权的协作者提交问题、文档改进和实现修复。完整流程见[中文贡献文档](https://devcodex-labs.github.io/flowkit/community/contributing.html)。
SDK 使用 Node >=22.13.0;同时开发文档站使用 Node >=24。在仓库根目录执行:
@@ -15,6 +15,6 @@ npm run docs:build
使用 `npm run docs:dev` 编辑站点。示例主源位于 `examples/docs/`;修改后运行 `npm run docs:sync` 同步 README,再验证消费者。页面使用完整可执行文件、准确输出、错误恢复和相关链接;不要复制私有模块或提交临时日志。
-PR 说明具体问题、修复后行为、实际验证及未验证范围。公开接口或能力变化先讨论契约和必要性。生成产物使用 `npm run build` 与 `npm run update:goldens` 更新,不手改 header。发布由维护者按[发布说明](https://devcodex-labs.github.io/flowkit/maintainers/releasing.html)执行。
+PR 说明具体问题、修复后行为、实际验证及未验证范围。对外公开接口或能力变化先讨论契约和必要性。生成产物使用 `npm run build` 与 `npm run update:goldens` 更新,不手改 header。发布由维护者按[发布说明](https://devcodex-labs.github.io/flowkit/maintainers/releasing.html)执行。
-问题报告请附 Node/npm/系统、FlowKit 版本、最小 workflow/host/Skill、配置、命令与退出码、期望和实际结果。删除密钥、用户数据和不必要业务内容。项目使用 [MIT](LICENSE) 许可证。
+问题报告请附 Node/npm/系统、FlowKit 版本、最小 workflow/host/Skill、配置、命令与退出码、期望和实际结果。删除密钥、用户数据和不必要业务内容。项目使用 [专有授权协议](LICENSE),访问私有仓库不自动取得再分发权利。
diff --git a/LICENSE b/LICENSE
index 98ee028..11ebecb 100644
--- a/LICENSE
+++ b/LICENSE
@@ -1,21 +1,48 @@
-MIT License
-
-Copyright (c) 2026 devcodex-labs
-
-Permission is hereby granted, free of charge, to any person obtaining a copy
-of this software and associated documentation files (the "Software"), to deal
-in the Software without restriction, including without limitation the rights
-to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
-copies of the Software, and to permit persons to whom the Software is
-furnished to do so, subject to the following conditions:
-
-The above copyright notice and this permission notice shall be included in all
-copies or substantial portions of the Software.
-
-THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
-IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
-FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
-AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
-LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
-OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
-SOFTWARE.
+FlowKit Proprietary Software License
+Copyright (c) 2026 devcodex-labs. All rights reserved.
+
+1. Ownership. FlowKit's source code, software libraries, executable
+distributions, build artifacts, and associated documentation are proprietary
+to devcodex-labs and its licensors. This document grants no open-source
+license and no right to redistribute FlowKit.
+
+2. Internal authorized use. FlowKit is developed for operation by
+devcodex-labs and its expressly authorized internal contributors,
+contractors, and deployment environments. Any access to the private source
+repository or internal GitHub Packages registry is limited to the scope of
+permission expressly granted by the rights holder. Repository or package
+access alone is not a license to redistribute or offer the software.
+
+3. Restrictions. Unless the rights holder has given prior written
+permission or applicable law requires otherwise, you may not redistribute,
+publish, sublicense, sell, lease, transfer, or provide copies of FlowKit to
+third parties, or remove its proprietary notices. Modification and
+derivative distribution outside the permitted internal work are prohibited
+except to the extent these restrictions are unenforceable by law.
+
+4. Hosted services and generated workflows. The rights holder may operate
+FlowKit as the internal engine of a hosted API, MCP service, or paid workflow
+design service without distributing FlowKit to service users. Using such a
+service, reading its public documentation, or receiving a generated workflow
+does not grant any right to install or copy FlowKit. Customer access,
+service fees, and the ownership and usage rights of customer inputs and
+generated workflow definitions, JavaScript, or other outputs are matters
+for separate service terms. This software license does not itself decide
+those output rights or grant access to any hosted service.
+
+5. Third-party components. Dependencies and third-party content remain
+subject to their respective licenses. This document does not supersede
+those licenses.
+
+6. No warranty. To the fullest extent permitted by applicable law,
+FlowKit is provided "AS IS", without warranties of any kind, express or
+implied. The rights holder is not liable for indirect, incidental,
+special, consequential, or punitive damages arising from use of the
+software, to the extent permitted by law.
+
+7. Separate written agreements. Any duly authorized written agreement
+with devcodex-labs expressly governing a recipient's software rights
+takes precedence over this notice where the terms conflict.
+
+For permission to use, develop, or distribute FlowKit outside the
+authorized internal operation, contact the rights holder.
diff --git a/README.md b/README.md
index 6636cf1..c52a4d3 100644
--- a/README.md
+++ b/README.md
@@ -1,34 +1,45 @@
# FlowKit
-**v1.0.0 · Node.js >=22.13.0 · MIT**
+**v1.0.0 · Node.js >=22.13.0 · 专有授权 · 私有 GitHub Packages**
用 JavaScript / TypeScript DSL 定义工作流,静态检查流程结构,生成可读 JavaScript 与 Mermaid,并通过你提供的宿主 Runtime 执行 Agent、业务动作、验证和人工审批。
-[中文文档](https://devcodex-labs.github.io/flowkit/) · [快速开始](https://devcodex-labs.github.io/flowkit/guide/quick-start.html) · [示例](https://github.com/devcodex-labs/flowkit/tree/main/examples)
+[公开文档](https://devcodex-labs.github.io/flowkit/) · [工作流示例](https://devcodex-labs.github.io/flowkit/examples/index.html) · [内部示例源码](https://github.com/devcodex-labs/flowkit/tree/main/examples)
## 适用场景
适合需要条件分支、并行处理、校验重试、循环修复或人工决策的多步骤任务。模型调用、业务接口、Schema 校验器及人工交互由宿主提供。FlowKit 不内置持久化审批服务或跨进程恢复;并行分支共享状态,any 汇合不会取消其他分支。
-## 安装
+## 运营定位
-在空目录创建项目,逐行执行(PowerShell / Bash 均可):
+FlowKit 是 **私有、内部部署的商业产品基础设施**。未来可通过 MCP 服务、托管 API 或付费工作流设计产品向客户提供能力,**不向客户分发 FlowKit npm 安装包或源码**。目前这些商业服务属于规划方向,尚未作为本仓库的现成服务发布。客户使用服务和取得生成工作流的权利,应由单独的服务条款约定。
+
+## 内部安装(仅维护者)
+
+以下命令仅供拥有仓库或内部部署权限的维护者使用;公开文档读者和未来付费客户**无需安装 FlowKit**。先为 GitHub Packages 配置 `@devcodex-labs` Registry,使用具备 `read:packages` 权限的 GitHub PAT (classic),由环境变量 `NODE_AUTH_TOKEN` 提供,不把真实令牌提交到仓库。创建项目中的 `.npmrc`:
+
+```ini
+@devcodex-labs:registry=https://npm.pkg.github.com
+//npm.pkg.github.com/:_authToken=${NODE_AUTH_TOKEN}
+```
+
+然后逐行执行(PowerShell / Bash 均可):
```sh
npm init -y
npm pkg set type=module
-npm install --save-exact @devcodex/flowkit@1.0.0
+npm install --save-exact @devcodex-labs/flowkit@1.0.0
```
-## 第一个工作流
+## 内部开发示例:第一个工作流
-创建以下两个文件。示例不需要模型密钥,也不依赖源码仓库。
+以下是供内部开发与审查使用的最小示例,公开读者可以阅读其流程,但不获得安装包或源码访问权。示例不需要模型密钥,也不依赖源码仓库。创建以下两个文件。
**sample.workflow.js**
```js
-import { defineWorkflow, action, terminal } from '@devcodex/flowkit/dsl';
+import { defineWorkflow, action, terminal } from '@devcodex-labs/flowkit/dsl';
export default defineWorkflow({
id: 'hello-flowkit', version: '1.0.0', name: '第一个工作流',
@@ -42,7 +53,7 @@ export default defineWorkflow({
**host.mjs**
```js
-import { run, isControlSignal } from '@devcodex/flowkit';
+import { run, isControlSignal } from '@devcodex-labs/flowkit';
import { fileURLToPath } from 'node:url';
const runtime = {
@@ -82,12 +93,14 @@ node host.mjs
## 公开接口
-SDK 根入口提供 `run`、`compile`、`compileSource`、`check`、`evalWhen`、`isControlSignal`。DSL 从 `@devcodex/flowkit/dsl` 导入。CLI 提供 `compile` / `check`;运行流程使用 SDK。避免导入包内私有路径。
+能力图谱可选适配由 `@devcodex-labs/flowkit/capability-graph` 导出 `flowkitProvider` 和 `createCapabilityGraphActionAdapter`,它不内置模型或执行引擎;参见[能力声明](https://devcodex-labs.github.io/flowkit/guide/capability-provider.html)与[宿主消费示例](https://devcodex-labs.github.io/flowkit/examples/capability-graph.html)。
+
+SDK 根入口提供 `run`、`compile`、`compileSource`、`check`、`evalWhen`、`isControlSignal`。DSL 从 `@devcodex-labs/flowkit/dsl` 导入。CLI 提供 `compile` / `check`;运行流程使用 SDK。避免导入包内私有路径。
工作流源文件必须以 `.workflow.js` 或 `.workflow.ts` 结尾。AOT 部署保留原始源码、编译产物及所需 Skill;一致性校验不能替代对宿主代码和产物来源的信任。
-## 贡献与许可
+## 内部开发与许可
从仓库开发:`npm ci`,再运行 `npm run verify`。文档站位于 `website/`,其开发环境为 Node >=24,依赖与 SDK 分开安装。贡献入口见[贡献说明](https://github.com/devcodex-labs/flowkit/blob/main/CONTRIBUTING.md)。
-FlowKit 使用 [MIT 许可证](https://github.com/devcodex-labs/flowkit/blob/main/LICENSE),Copyright (c) 2026 devcodex-labs。首个正式版本为 v1.0.0;[更新记录](https://github.com/devcodex-labs/flowkit/blob/main/CHANGELOG.md)说明能力与限制。
+FlowKit 是仅供内部部署的私有专有软件,公开文档并不授予安装权;当前使用 [专有授权协议](https://github.com/devcodex-labs/flowkit/blob/main/LICENSE),Copyright (c) 2026 devcodex-labs。仓库当前版本为 v1.0.0,实际包发行以 GitHub Packages 记录为准;[更新记录](https://github.com/devcodex-labs/flowkit/blob/main/CHANGELOG.md)说明能力与限制。
diff --git a/docs/releasing.md b/docs/releasing.md
index 04b2862..5bfe7c6 100644
--- a/docs/releasing.md
+++ b/docs/releasing.md
@@ -2,7 +2,7 @@
# CI与发布维护
-FlowKit v1.0.0的详细中文说明已集中到[文档站](https://devcodex-labs.github.io/flowkit/)。此页保留旧链接锚点,避免已有引用失效。
+FlowKit 私有 GitHub Packages 发行的详细中文说明已集中到[文档站](https://devcodex-labs.github.io/flowkit/)。此页保留旧链接锚点,避免已有引用失效。
## 内容入口
@@ -23,7 +23,7 @@ FlowKit v1.0.0的详细中文说明已集中到[文档站](https://devcodex-labs
阅读[准备候选](https://devcodex-labs.github.io/flowkit/maintainers/releasing.html)。
-### 发布与公开消费
+### 发布与私有包消费
阅读[发布与公开消费](https://devcodex-labs.github.io/flowkit/maintainers/releasing.html)。
diff --git a/examples/README.md b/examples/README.md
index 7613260..bd4a09f 100644
--- a/examples/README.md
+++ b/examples/README.md
@@ -1,6 +1,6 @@
# FlowKit 示例
-初次使用请从[中文快速开始](https://devcodex-labs.github.io/flowkit/guide/quick-start.html)进入。用户教程主源位于 [docs/](docs/),使用公开的 `@devcodex/flowkit@1.0.0` 入口;下面保留原有三个仓库回归示例的命令与说明。
+初次使用请从[中文快速开始](https://devcodex-labs.github.io/flowkit/guide/quick-start.html)进入。用户教程主源位于 [docs/](docs/),使用公开的 `@devcodex-labs/flowkit@1.0.0` 入口;下面保留原有三个仓库回归示例的命令与说明。
## 用户教程
@@ -73,7 +73,7 @@ Skill bytes require reviewing and updating their DSL integrity first.
Use the existing SDK in a Node ESM script at the repository root:
```js
-import { compile } from '@devcodex/flowkit';
+import { compile } from '@devcodex-labs/flowkit';
for (const file of ['examples/editorial.workflow.js', 'examples/shared-join.workflow.ts', 'examples/remote.workflow.js']) {
const result = await compile(file, {
projectRoot: 'examples', remoteSkillHosts: ['skills.example.test'],
diff --git a/examples/demo.mjs b/examples/demo.mjs
index 748c2eb..95bc4bc 100644
--- a/examples/demo.mjs
+++ b/examples/demo.mjs
@@ -1,6 +1,6 @@
import { readFile } from 'node:fs/promises';
import { fileURLToPath, pathToFileURL } from 'node:url';
-import { run } from '@devcodex/flowkit';
+import { run } from '@devcodex-labs/flowkit';
import { createRuntime, validateExample } from './host.mjs';
import { exampleAgent } from './agent.mjs';
diff --git a/examples/docs/aot/deploy.mjs b/examples/docs/aot/deploy.mjs
index feabf58..7155f1f 100644
--- a/examples/docs/aot/deploy.mjs
+++ b/examples/docs/aot/deploy.mjs
@@ -1,4 +1,4 @@
-import { compile } from '@devcodex/flowkit';
+import { compile } from '@devcodex-labs/flowkit';
import { mkdir, copyFile } from 'node:fs/promises';
import { fileURLToPath } from 'node:url';
import path from 'node:path';
diff --git a/examples/docs/aot/host.mjs b/examples/docs/aot/host.mjs
index 5194b6b..e063e23 100644
--- a/examples/docs/aot/host.mjs
+++ b/examples/docs/aot/host.mjs
@@ -1,4 +1,4 @@
-import { run, isControlSignal } from '@devcodex/flowkit';
+import { run, isControlSignal } from '@devcodex-labs/flowkit';
import { fileURLToPath } from 'node:url';
const result = await run(fileURLToPath(new URL('./sample.compiled.mjs', import.meta.url)), {
isControlSignal,
diff --git a/examples/docs/aot/package.json b/examples/docs/aot/package.json
index 537bd77..d89df89 100644
--- a/examples/docs/aot/package.json
+++ b/examples/docs/aot/package.json
@@ -2,6 +2,6 @@
"private": true,
"type": "module",
"dependencies": {
- "@devcodex/flowkit": "1.0.0"
+ "@devcodex-labs/flowkit": "1.0.0"
}
}
diff --git a/examples/docs/aot/sample.workflow.js b/examples/docs/aot/sample.workflow.js
index d5e4947..79e1de0 100644
--- a/examples/docs/aot/sample.workflow.js
+++ b/examples/docs/aot/sample.workflow.js
@@ -1,4 +1,4 @@
-import { defineWorkflow, node, terminal } from '@devcodex/flowkit/dsl';
+import { defineWorkflow, node, terminal } from '@devcodex-labs/flowkit/dsl';
export default defineWorkflow({ id: 'aot-demo', version: '1.0.0', name: '完整部署', nodes: [
node('draft', { name: '读取本地指令', skill: 'skills/writer.md', output: { type: 'object', properties: { draft: { type: 'string' } }, required: ['draft'] }, next: 'done' }),
terminal('done', { name: '完成', status: 'succeeded' }),
diff --git a/examples/docs/aot/verify.mjs b/examples/docs/aot/verify.mjs
index 6150d83..c23c414 100644
--- a/examples/docs/aot/verify.mjs
+++ b/examples/docs/aot/verify.mjs
@@ -1,6 +1,6 @@
import assert from 'node:assert/strict';
import { readFile, writeFile, unlink } from 'node:fs/promises';
-import { run, compile, isControlSignal } from '@devcodex/flowkit';
+import { run, compile, isControlSignal } from '@devcodex-labs/flowkit';
await import('./deploy.mjs');
const runtime = { isControlSignal, async runAgent(step) { return { draft: step.instruction.trim() }; }, validateResult(schema, value) { return typeof value?.draft === 'string' ? [] : ['draft']; } };
const file = 'deployment/sample.compiled.mjs', source = 'deployment/sample.workflow.js';
diff --git a/examples/docs/cancellation/host.mjs b/examples/docs/cancellation/host.mjs
index 8a808b9..3134345 100644
--- a/examples/docs/cancellation/host.mjs
+++ b/examples/docs/cancellation/host.mjs
@@ -1,4 +1,4 @@
-import { run, isControlSignal } from '@devcodex/flowkit';
+import { run, isControlSignal } from '@devcodex-labs/flowkit';
import { fileURLToPath } from 'node:url';
export async function scenario(mode = 'cancel') {
const controller = new AbortController(); let cleaned = false;
diff --git a/examples/docs/cancellation/package.json b/examples/docs/cancellation/package.json
index 537bd77..d89df89 100644
--- a/examples/docs/cancellation/package.json
+++ b/examples/docs/cancellation/package.json
@@ -2,6 +2,6 @@
"private": true,
"type": "module",
"dependencies": {
- "@devcodex/flowkit": "1.0.0"
+ "@devcodex-labs/flowkit": "1.0.0"
}
}
diff --git a/examples/docs/cancellation/sample.workflow.js b/examples/docs/cancellation/sample.workflow.js
index f480dd8..12b2631 100644
--- a/examples/docs/cancellation/sample.workflow.js
+++ b/examples/docs/cancellation/sample.workflow.js
@@ -1,4 +1,4 @@
-import { defineWorkflow, action, terminal } from '@devcodex/flowkit/dsl';
+import { defineWorkflow, action, terminal } from '@devcodex-labs/flowkit/dsl';
export default defineWorkflow({ id: 'cancel-demo', version: '1.0.0', name: '取消操作', nodes: [
action('work', { name: '等待业务结果', action: 'wait', next: 'done' }),
terminal('done', { name: '完成', status: 'succeeded' }),
diff --git a/examples/docs/capability-graph/host.mjs b/examples/docs/capability-graph/host.mjs
new file mode 100644
index 0000000..e959c71
--- /dev/null
+++ b/examples/docs/capability-graph/host.mjs
@@ -0,0 +1,38 @@
+import { run, isControlSignal } from '@devcodex-labs/flowkit';
+import { createCapabilityGraphActionAdapter, flowkitProvider } from '@devcodex-labs/flowkit/capability-graph';
+import { CapabilityGraph } from '@devcodex/capability-graph';
+import { fileURLToPath } from 'node:url';
+
+export const demoProvider = {
+ schemaVersion: 1, providerId: 'demo', name: 'Demo actions', version: '1',
+ capabilities: [{
+ id: 'greet', name: 'Greet', description: 'Write a greeting into workflow state.',
+ appliesTo: { all: [{ field: 'runtime', op: 'eq', value: 'node' }] },
+ relations: { requires: ['tooling::ready'] },
+ }],
+};
+export const toolingProvider = {
+ schemaVersion: 1, providerId: 'tooling', name: 'Host prerequisites', version: '1',
+ capabilities: [{ id: 'ready', name: 'Ready', description: 'The host has confirmed the required greeting implementation.' }],
+};
+
+const entry = fileURLToPath(new URL('./sample.workflow.js', import.meta.url));
+export async function executeDemo({ allowedProviders = ['flowkit', 'demo', 'tooling'], context = { facts: { runtime: 'node' } } } = {}) {
+ const graph = await CapabilityGraph.open({ providers: [{ definition: flowkitProvider }, { definition: demoProvider }, { definition: toolingProvider }], allowedProviders });
+ try {
+ const adapter = createCapabilityGraphActionAdapter({
+ graph, getContext: () => context,
+ bindings: {
+ greet: { capabilityId: 'demo::greet', async execute({ ctx, resolution }) {
+ // Graph does not execute requires. This host has explicitly provided the required implementation.
+ if (!resolution.nodes.some(item => item.capability.id === 'tooling::ready')) throw new Error('Missing host prerequisite');
+ ctx.state.message = `你好,${ctx.state.name}!`;
+ } },
+ },
+ });
+ return await run(entry, { isControlSignal, ...adapter }, { name: 'FlowKit' });
+ } finally { await graph.close(); }
+}
+if (process.argv[1] && process.argv[1].endsWith('host.mjs')) {
+ console.log(JSON.stringify(await executeDemo()));
+}
diff --git a/examples/docs/capability-graph/package.json b/examples/docs/capability-graph/package.json
new file mode 100644
index 0000000..f9ec9b6
--- /dev/null
+++ b/examples/docs/capability-graph/package.json
@@ -0,0 +1 @@
+{"type":"module","private":true}
diff --git a/examples/docs/capability-graph/sample.workflow.js b/examples/docs/capability-graph/sample.workflow.js
new file mode 100644
index 0000000..ff4f41d
--- /dev/null
+++ b/examples/docs/capability-graph/sample.workflow.js
@@ -0,0 +1,9 @@
+import { defineWorkflow, action, terminal } from '@devcodex-labs/flowkit/dsl';
+
+export default defineWorkflow({
+ id: 'graph-backed-action', version: '1.0.0', name: '能力图谱约束动作执行',
+ nodes: [
+ action('greet', { name: '执行受控问候', action: 'greet', writes: ['message'], next: 'done' }),
+ terminal('done', { name: '完成', status: 'succeeded' }),
+ ],
+});
diff --git a/examples/docs/capability-graph/verify.mjs b/examples/docs/capability-graph/verify.mjs
new file mode 100644
index 0000000..9032dbe
--- /dev/null
+++ b/examples/docs/capability-graph/verify.mjs
@@ -0,0 +1,30 @@
+import assert from 'node:assert/strict';
+import { CapabilityGraph, GraphError } from '@devcodex/capability-graph';
+import { createCapabilityGraphActionAdapter, flowkitProvider } from '@devcodex-labs/flowkit/capability-graph';
+import { executeDemo, demoProvider, toolingProvider } from './host.mjs';
+
+const graph = await CapabilityGraph.open({
+ providers: [{ definition: flowkitProvider }, { definition: demoProvider }, { definition: toolingProvider }],
+ allowedProviders: ['flowkit', 'demo', 'tooling'],
+});
+try {
+ const catalog = await graph.listCatalog();
+ assert(catalog.items.some(item => item.id === 'flowkit::compile-workflow'));
+ const compile = await graph.resolve({ ids: ['flowkit::render-mermaid'] });
+ assert.deepEqual(compile.selected, ['flowkit::render-mermaid']);
+ assert(compile.nodes.some(item => item.capability.id === 'flowkit::compile-workflow'));
+ const resolved = await graph.resolve({ ids: ['demo::greet'], context: { facts: { runtime: 'node' } } });
+ assert.equal(resolved.meta.completeness, 'complete');
+ assert(resolved.nodes.some(item => item.capability.id === 'tooling::ready'));
+ const unknown = await graph.getCapabilities({ ids: ['demo::greet'] });
+ assert.equal(unknown.items[0].applicability.status, 'unknown');
+ await assert.rejects(graph.match({ input: 'greet' }), error => error instanceof GraphError && error.code === 'CG_MODEL_NOT_CONFIGURED');
+} finally { await graph.close(); }
+
+assert.equal((await executeDemo()).status, 'succeeded');
+await assert.rejects(executeDemo({ context: { facts: { runtime: 'bun' } } }), error => error.code === 'FK_CG_NOT_APPLICABLE');
+await assert.rejects(executeDemo({ context: {} }), error => error.code === 'FK_CG_NOT_APPLICABLE');
+await assert.rejects(executeDemo({ allowedProviders: ['demo'] }), error => error.code === 'FK_CG_DEPENDENCIES_INCOMPLETE');
+await assert.rejects(executeDemo({ allowedProviders: ['tooling'] }), error => error instanceof GraphError && error.code === 'CG_ACCESS_DENIED');
+const adapter = createCapabilityGraphActionAdapter({ graph: { resolve: async () => { throw new Error('Unexpected call'); } }, bindings: {} });
+await assert.rejects(adapter.runAction('greet', 'Greeting', {}), error => error.code === 'FK_CG_BINDING_MISSING');
diff --git a/examples/docs/conditional-routing/host.mjs b/examples/docs/conditional-routing/host.mjs
index b753e55..791d2e4 100644
--- a/examples/docs/conditional-routing/host.mjs
+++ b/examples/docs/conditional-routing/host.mjs
@@ -1,4 +1,4 @@
-import { run, evalWhen, isControlSignal } from '@devcodex/flowkit';
+import { run, evalWhen, isControlSignal } from '@devcodex-labs/flowkit';
import { fileURLToPath } from 'node:url';
export async function scenario(urgent = false, extension = 'js') {
const file = fileURLToPath(new URL(`./sample.workflow.${extension}`, import.meta.url));
diff --git a/examples/docs/conditional-routing/package.json b/examples/docs/conditional-routing/package.json
index 537bd77..d89df89 100644
--- a/examples/docs/conditional-routing/package.json
+++ b/examples/docs/conditional-routing/package.json
@@ -2,6 +2,6 @@
"private": true,
"type": "module",
"dependencies": {
- "@devcodex/flowkit": "1.0.0"
+ "@devcodex-labs/flowkit": "1.0.0"
}
}
diff --git a/examples/docs/conditional-routing/sample.workflow.js b/examples/docs/conditional-routing/sample.workflow.js
index 9c52829..fdb524d 100644
--- a/examples/docs/conditional-routing/sample.workflow.js
+++ b/examples/docs/conditional-routing/sample.workflow.js
@@ -1,4 +1,4 @@
-import { defineWorkflow, condition, action, terminal } from '@devcodex/flowkit/dsl';
+import { defineWorkflow, condition, action, terminal } from '@devcodex-labs/flowkit/dsl';
export default defineWorkflow({
id: 'routing', version: '1.0.0', name: '条件分流',
nodes: [
diff --git a/examples/docs/conditional-routing/sample.workflow.ts b/examples/docs/conditional-routing/sample.workflow.ts
index c66d72a..60b4e21 100644
--- a/examples/docs/conditional-routing/sample.workflow.ts
+++ b/examples/docs/conditional-routing/sample.workflow.ts
@@ -1,4 +1,4 @@
-import { defineWorkflow, condition, action, terminal } from '@devcodex/flowkit/dsl';
+import { defineWorkflow, condition, action, terminal } from '@devcodex-labs/flowkit/dsl';
export default defineWorkflow({
id: 'routing', version: '1.0.0', name: '条件分流',
nodes: [
diff --git a/examples/docs/host-integration/host.mjs b/examples/docs/host-integration/host.mjs
index 2142a0a..2b7188f 100644
--- a/examples/docs/host-integration/host.mjs
+++ b/examples/docs/host-integration/host.mjs
@@ -1,4 +1,4 @@
-import { run, isControlSignal } from '@devcodex/flowkit';
+import { run, isControlSignal } from '@devcodex-labs/flowkit';
import { fileURLToPath } from 'node:url';
const file = fileURLToPath(new URL('./sample.workflow.js', import.meta.url));
export async function scenario() {
diff --git a/examples/docs/host-integration/package.json b/examples/docs/host-integration/package.json
index 537bd77..d89df89 100644
--- a/examples/docs/host-integration/package.json
+++ b/examples/docs/host-integration/package.json
@@ -2,6 +2,6 @@
"private": true,
"type": "module",
"dependencies": {
- "@devcodex/flowkit": "1.0.0"
+ "@devcodex-labs/flowkit": "1.0.0"
}
}
diff --git a/examples/docs/host-integration/sample.workflow.js b/examples/docs/host-integration/sample.workflow.js
index 882bca3..e014ca4 100644
--- a/examples/docs/host-integration/sample.workflow.js
+++ b/examples/docs/host-integration/sample.workflow.js
@@ -1,4 +1,4 @@
-import { defineWorkflow, node, action, human, terminal } from '@devcodex/flowkit/dsl';
+import { defineWorkflow, node, action, human, terminal } from '@devcodex-labs/flowkit/dsl';
export default defineWorkflow({
id: 'host-integration', version: '1.0.0', name: '接入宿主',
nodes: [
diff --git a/examples/docs/human-approval/host.mjs b/examples/docs/human-approval/host.mjs
index 085e3f2..880879d 100644
--- a/examples/docs/human-approval/host.mjs
+++ b/examples/docs/human-approval/host.mjs
@@ -1,4 +1,4 @@
-import { run, isControlSignal } from '@devcodex/flowkit';
+import { run, isControlSignal } from '@devcodex-labs/flowkit';
import { fileURLToPath } from 'node:url';
export async function scenario(decisions = [false, true]) {
const events = []; let cursor = 0;
diff --git a/examples/docs/human-approval/package.json b/examples/docs/human-approval/package.json
index 537bd77..d89df89 100644
--- a/examples/docs/human-approval/package.json
+++ b/examples/docs/human-approval/package.json
@@ -2,6 +2,6 @@
"private": true,
"type": "module",
"dependencies": {
- "@devcodex/flowkit": "1.0.0"
+ "@devcodex-labs/flowkit": "1.0.0"
}
}
diff --git a/examples/docs/human-approval/sample.workflow.js b/examples/docs/human-approval/sample.workflow.js
index 2465d7a..f21b6ad 100644
--- a/examples/docs/human-approval/sample.workflow.js
+++ b/examples/docs/human-approval/sample.workflow.js
@@ -1,4 +1,4 @@
-import { defineWorkflow, action, human, terminal } from '@devcodex/flowkit/dsl';
+import { defineWorkflow, action, human, terminal } from '@devcodex-labs/flowkit/dsl';
export default defineWorkflow({ id: 'approval', version: '1.0.0', name: '审批与修订', nodes: [
action('draft', { name: '准备稿件', action: 'draft', writes: ['draft'], next: 'approval' }),
human('approval', { name: '批准稿件', onApprove: 'done', onReject: 'revise' }),
diff --git a/examples/docs/manifest.json b/examples/docs/manifest.json
index 24bced9..02e7e7f 100644
--- a/examples/docs/manifest.json
+++ b/examples/docs/manifest.json
@@ -264,6 +264,37 @@
"types": [
"consumer.ts"
]
+ },
+ {
+ "id": "E13",
+ "directory": "capability-graph",
+ "files": [
+ "host.mjs",
+ "package.json",
+ "sample.workflow.js",
+ "verify.mjs"
+ ],
+ "workflows": [
+ "sample.workflow.js"
+ ],
+ "scenarios": [
+ {
+ "entry": "host.mjs",
+ "args": [],
+ "expected": {
+ "status": "succeeded",
+ "terminal": "done",
+ "state": {
+ "name": "FlowKit",
+ "message": "你好,FlowKit!"
+ }
+ }
+ }
+ ],
+ "verify": "verify.mjs",
+ "dependencies": [
+ "@devcodex/capability-graph@2.1.1"
+ ]
}
]
}
diff --git a/examples/docs/parallel-review/all.workflow.js b/examples/docs/parallel-review/all.workflow.js
index d15f77d..3a5e162 100644
--- a/examples/docs/parallel-review/all.workflow.js
+++ b/examples/docs/parallel-review/all.workflow.js
@@ -1,4 +1,4 @@
-import { defineWorkflow, parallel, action, verification, terminal } from '@devcodex/flowkit/dsl';
+import { defineWorkflow, parallel, action, verification, terminal } from '@devcodex-labs/flowkit/dsl';
export default defineWorkflow({
id: 'parallel-all', version: '1.0.0', name: '等待所有检查',
nodes: [
diff --git a/examples/docs/parallel-review/any.workflow.js b/examples/docs/parallel-review/any.workflow.js
index ad1cd74..b13ce04 100644
--- a/examples/docs/parallel-review/any.workflow.js
+++ b/examples/docs/parallel-review/any.workflow.js
@@ -1,4 +1,4 @@
-import { defineWorkflow, parallel, action, verification, terminal } from '@devcodex/flowkit/dsl';
+import { defineWorkflow, parallel, action, verification, terminal } from '@devcodex-labs/flowkit/dsl';
export default defineWorkflow({
id: 'parallel-any', version: '1.0.0', name: '等待一个完成',
nodes: [
diff --git a/examples/docs/parallel-review/host.mjs b/examples/docs/parallel-review/host.mjs
index d4934a4..2ba472f 100644
--- a/examples/docs/parallel-review/host.mjs
+++ b/examples/docs/parallel-review/host.mjs
@@ -1,4 +1,4 @@
-import { run, isControlSignal } from '@devcodex/flowkit';
+import { run, isControlSignal } from '@devcodex-labs/flowkit';
import { fileURLToPath } from 'node:url';
export async function scenario(strategy = 'all', reject = false) {
const events = []; let release;
diff --git a/examples/docs/parallel-review/package.json b/examples/docs/parallel-review/package.json
index 537bd77..d89df89 100644
--- a/examples/docs/parallel-review/package.json
+++ b/examples/docs/parallel-review/package.json
@@ -2,6 +2,6 @@
"private": true,
"type": "module",
"dependencies": {
- "@devcodex/flowkit": "1.0.0"
+ "@devcodex-labs/flowkit": "1.0.0"
}
}
diff --git a/examples/docs/quick-start/host.mjs b/examples/docs/quick-start/host.mjs
index aeb53bc..90eaa99 100644
--- a/examples/docs/quick-start/host.mjs
+++ b/examples/docs/quick-start/host.mjs
@@ -1,4 +1,4 @@
-import { run, isControlSignal } from '@devcodex/flowkit';
+import { run, isControlSignal } from '@devcodex-labs/flowkit';
import { fileURLToPath } from 'node:url';
const runtime = {
diff --git a/examples/docs/quick-start/package.json b/examples/docs/quick-start/package.json
index 537bd77..d89df89 100644
--- a/examples/docs/quick-start/package.json
+++ b/examples/docs/quick-start/package.json
@@ -2,6 +2,6 @@
"private": true,
"type": "module",
"dependencies": {
- "@devcodex/flowkit": "1.0.0"
+ "@devcodex-labs/flowkit": "1.0.0"
}
}
diff --git a/examples/docs/quick-start/sample.workflow.js b/examples/docs/quick-start/sample.workflow.js
index 1da1341..217db72 100644
--- a/examples/docs/quick-start/sample.workflow.js
+++ b/examples/docs/quick-start/sample.workflow.js
@@ -1,4 +1,4 @@
-import { defineWorkflow, action, terminal } from '@devcodex/flowkit/dsl';
+import { defineWorkflow, action, terminal } from '@devcodex-labs/flowkit/dsl';
export default defineWorkflow({
id: 'hello-flowkit', version: '1.0.0', name: '第一个工作流',
diff --git a/examples/docs/remote-skills/host.mjs b/examples/docs/remote-skills/host.mjs
index 6e47893..047ee6c 100644
--- a/examples/docs/remote-skills/host.mjs
+++ b/examples/docs/remote-skills/host.mjs
@@ -1,4 +1,4 @@
-import { run, isControlSignal } from '@devcodex/flowkit';
+import { run, isControlSignal } from '@devcodex-labs/flowkit';
import { readFile } from 'node:fs/promises';
import { fileURLToPath } from 'node:url';
export async function scenario(mode = 'ok') {
diff --git a/examples/docs/remote-skills/package.json b/examples/docs/remote-skills/package.json
index 537bd77..d89df89 100644
--- a/examples/docs/remote-skills/package.json
+++ b/examples/docs/remote-skills/package.json
@@ -2,6 +2,6 @@
"private": true,
"type": "module",
"dependencies": {
- "@devcodex/flowkit": "1.0.0"
+ "@devcodex-labs/flowkit": "1.0.0"
}
}
diff --git a/examples/docs/remote-skills/sample.workflow.js b/examples/docs/remote-skills/sample.workflow.js
index fba7f77..f0a7b16 100644
--- a/examples/docs/remote-skills/sample.workflow.js
+++ b/examples/docs/remote-skills/sample.workflow.js
@@ -1,4 +1,4 @@
-import { defineWorkflow, node, terminal } from '@devcodex/flowkit/dsl';
+import { defineWorkflow, node, terminal } from '@devcodex-labs/flowkit/dsl';
export default defineWorkflow({ id: 'remote-skills', version: '1.0.0', name: '远程 Skill', nodes: [
node('first', { name: '第一次建议', skill: 'https://skills.example.test/advice.md', integrity: 'sha256-O0rz52STZdJhvL/QvjjU8DTwd/MoUiHJl8lHGwEHUf4=', output: { type: 'object', properties: { advice: { type: 'string' } }, required: ['advice'] }, next: 'second' }),
node('second', { name: '再次建议', skill: 'https://skills.example.test/advice.md', integrity: 'sha256-O0rz52STZdJhvL/QvjjU8DTwd/MoUiHJl8lHGwEHUf4=', output: { type: 'object', properties: { advice: { type: 'string' } }, required: ['advice'] }, next: 'done' }),
diff --git a/examples/docs/remote-skills/verify.mjs b/examples/docs/remote-skills/verify.mjs
index d3a4fe3..c329998 100644
--- a/examples/docs/remote-skills/verify.mjs
+++ b/examples/docs/remote-skills/verify.mjs
@@ -1,5 +1,5 @@
import assert from 'node:assert/strict';
-import { compile } from '@devcodex/flowkit';
+import { compile } from '@devcodex-labs/flowkit';
import { scenario } from './host.mjs';
assert.equal((await scenario()).requests, 1); // 同一次执行两个节点共享默认 loader 的成功缓存。
assert.equal((await scenario()).requests, 1); // 新运行重新建立 loader。
diff --git a/examples/docs/run-cache/host.mjs b/examples/docs/run-cache/host.mjs
index 88f3d7c..2e649c4 100644
--- a/examples/docs/run-cache/host.mjs
+++ b/examples/docs/run-cache/host.mjs
@@ -1,4 +1,4 @@
-import { run, isControlSignal } from '@devcodex/flowkit';
+import { run, isControlSignal } from '@devcodex-labs/flowkit';
import { fileURLToPath } from 'node:url';
export const file = fileURLToPath(new URL('./sample.workflow.js', import.meta.url));
export const runtime = {
diff --git a/examples/docs/run-cache/package.json b/examples/docs/run-cache/package.json
index 537bd77..d89df89 100644
--- a/examples/docs/run-cache/package.json
+++ b/examples/docs/run-cache/package.json
@@ -2,6 +2,6 @@
"private": true,
"type": "module",
"dependencies": {
- "@devcodex/flowkit": "1.0.0"
+ "@devcodex-labs/flowkit": "1.0.0"
}
}
diff --git a/examples/docs/run-cache/sample.workflow.js b/examples/docs/run-cache/sample.workflow.js
index a3a15a5..b5062bd 100644
--- a/examples/docs/run-cache/sample.workflow.js
+++ b/examples/docs/run-cache/sample.workflow.js
@@ -1,4 +1,4 @@
-import { defineWorkflow, node, terminal } from '@devcodex/flowkit/dsl';
+import { defineWorkflow, node, terminal } from '@devcodex-labs/flowkit/dsl';
export default defineWorkflow({ id: 'cache-demo', version: '1.0.0', name: '重复运行', nodes: [
node('answer', { name: '读取指令', skill: 'skills/instruction.md', inputs: ['count'], output: { type: 'object', properties: { count: { type: 'number' }, instruction: { type: 'string' } }, required: ['count', 'instruction'] }, retries: 0, next: 'done' }),
terminal('done', { name: '完成', status: 'succeeded' }),
diff --git a/examples/docs/run-cache/verify.mjs b/examples/docs/run-cache/verify.mjs
index eb6c83a..5e5e9ac 100644
--- a/examples/docs/run-cache/verify.mjs
+++ b/examples/docs/run-cache/verify.mjs
@@ -1,6 +1,6 @@
import assert from 'node:assert/strict';
import { readFile, writeFile, unlink } from 'node:fs/promises';
-import { run, check } from '@devcodex/flowkit';
+import { run, check } from '@devcodex-labs/flowkit';
import { file, runtime } from './host.mjs';
const skill = new URL('./skills/instruction.md', import.meta.url), original = await readFile(skill), source = await readFile(file);
try {
diff --git a/examples/docs/sdk-options/api.mjs b/examples/docs/sdk-options/api.mjs
index c246d92..a1e399a 100644
--- a/examples/docs/sdk-options/api.mjs
+++ b/examples/docs/sdk-options/api.mjs
@@ -1,4 +1,4 @@
-import { compile, compileSource, check, run, evalWhen, isControlSignal } from '@devcodex/flowkit';
+import { compile, compileSource, check, run, evalWhen, isControlSignal } from '@devcodex-labs/flowkit';
import { readFile } from 'node:fs/promises';
const source = 'sample.workflow.js';
const compiled = await compile(source, { trace: true });
diff --git a/examples/docs/sdk-options/consumer.ts b/examples/docs/sdk-options/consumer.ts
index 36b5b70..717489b 100644
--- a/examples/docs/sdk-options/consumer.ts
+++ b/examples/docs/sdk-options/consumer.ts
@@ -1,5 +1,5 @@
-import type { Runtime, RunResult, FlowkitOptions, AgentStep, Diagnostic, Ctx } from '@devcodex/flowkit';
-import { run, isControlSignal } from '@devcodex/flowkit';
+import type { Runtime, RunResult, FlowkitOptions, AgentStep, Diagnostic, Ctx } from '@devcodex-labs/flowkit';
+import { run, isControlSignal } from '@devcodex-labs/flowkit';
const runtime: Runtime = { isControlSignal, async runAction(action, name, ctx) { ctx.state.saved = true; } };
const options: FlowkitOptions = { trace: true, runId: 'typed-run' };
const result: RunResult = await run('sample.workflow.js', runtime, {}, options);
diff --git a/examples/docs/sdk-options/package.json b/examples/docs/sdk-options/package.json
index 537bd77..d89df89 100644
--- a/examples/docs/sdk-options/package.json
+++ b/examples/docs/sdk-options/package.json
@@ -2,6 +2,6 @@
"private": true,
"type": "module",
"dependencies": {
- "@devcodex/flowkit": "1.0.0"
+ "@devcodex-labs/flowkit": "1.0.0"
}
}
diff --git a/examples/docs/sdk-options/sample.workflow.js b/examples/docs/sdk-options/sample.workflow.js
index c164845..110a033 100644
--- a/examples/docs/sdk-options/sample.workflow.js
+++ b/examples/docs/sdk-options/sample.workflow.js
@@ -1,4 +1,4 @@
-import { defineWorkflow, action, terminal } from '@devcodex/flowkit/dsl';
+import { defineWorkflow, action, terminal } from '@devcodex-labs/flowkit/dsl';
export default defineWorkflow({ id: 'sdk-options', version: '1.0.0', name: 'SDK 与选项', nodes: [
action('save', { name: '保存结果', action: 'save', writes: ['saved'], next: 'done' }),
terminal('done', { name: '完成', status: 'succeeded' }),
diff --git a/examples/docs/sdk-options/verify.mjs b/examples/docs/sdk-options/verify.mjs
index d9999e7..d161f53 100644
--- a/examples/docs/sdk-options/verify.mjs
+++ b/examples/docs/sdk-options/verify.mjs
@@ -3,7 +3,7 @@ import { readFile, writeFile, unlink, readdir, mkdir, stat } from 'node:fs/promi
import { spawnSync } from 'node:child_process';
import { createRequire } from 'node:module';
import path from 'node:path';
-import { compile, compileSource, check, run, evalWhen, isControlSignal } from '@devcodex/flowkit';
+import { compile, compileSource, check, run, evalWhen, isControlSignal } from '@devcodex-labs/flowkit';
const source = await readFile('sample.workflow.js', 'utf8');
await compile('sample.workflow.js'); const before = await stat('sample.compiled.mjs');
assert.deepEqual(await check('sample.workflow.js'), []); assert.equal((await stat('sample.compiled.mjs')).mtimeMs, before.mtimeMs);
@@ -23,7 +23,7 @@ assert.equal(initial.saved, undefined); assert.equal(initial.nested.value, 2); a
assert.equal(evalWhen(observed, 'saved && nested.value === 2'), true); assert.equal(isControlSignal({ control: true }), true);
await assert.rejects(run('sample.workflow.js', runtime, {}, { unknown: true }), TypeError);
const dumps = (await readdir('dump')).filter(file => file.endsWith('.run.mjs')); assert.ok(dumps.length); assert.ok((await readFile(path.join('dump', dumps[0]), 'utf8')).includes('export'));
-const require = createRequire(import.meta.url), packageFile = require.resolve('@devcodex/flowkit/package.json');
+const require = createRequire(import.meta.url), packageFile = require.resolve('@devcodex-labs/flowkit/package.json');
const metadata = JSON.parse(await readFile(packageFile, 'utf8')), bin = path.resolve(path.dirname(packageFile), metadata.bin.flowkit);
function cli(args) { return spawnSync(process.execPath, [bin, ...args], { encoding: 'utf8', timeout: 30000 }); }
assert.equal(cli(['compile', 'sample.workflow.js', '--trace', '--no-mermaid']).status, 0);
diff --git a/examples/docs/validation-retries/host.mjs b/examples/docs/validation-retries/host.mjs
index 8550571..00a12ea 100644
--- a/examples/docs/validation-retries/host.mjs
+++ b/examples/docs/validation-retries/host.mjs
@@ -1,4 +1,4 @@
-import { run, isControlSignal } from '@devcodex/flowkit';
+import { run, isControlSignal } from '@devcodex-labs/flowkit';
import { fileURLToPath } from 'node:url';
export async function scenario(exhaust = false) {
const attempts = [], initial = {};
diff --git a/examples/docs/validation-retries/package.json b/examples/docs/validation-retries/package.json
index 537bd77..d89df89 100644
--- a/examples/docs/validation-retries/package.json
+++ b/examples/docs/validation-retries/package.json
@@ -2,6 +2,6 @@
"private": true,
"type": "module",
"dependencies": {
- "@devcodex/flowkit": "1.0.0"
+ "@devcodex-labs/flowkit": "1.0.0"
}
}
diff --git a/examples/docs/validation-retries/sample.workflow.js b/examples/docs/validation-retries/sample.workflow.js
index a7f0883..bd1bf11 100644
--- a/examples/docs/validation-retries/sample.workflow.js
+++ b/examples/docs/validation-retries/sample.workflow.js
@@ -1,4 +1,4 @@
-import { defineWorkflow, action, node, terminal } from '@devcodex/flowkit/dsl';
+import { defineWorkflow, action, node, terminal } from '@devcodex-labs/flowkit/dsl';
export default defineWorkflow({ id: 'retries', version: '1.0.0', name: '结果纠正', nodes: [
action('observe', { name: '观察运行状态', action: 'observe', next: 'answer' }),
node('answer', { name: '生成结果', skill: 'skills/result.md', output: { type: 'object', properties: { answer: { type: 'string' } }, required: ['answer'] }, next: 'done' }),
diff --git a/examples/docs/verification-repair/host.mjs b/examples/docs/verification-repair/host.mjs
index 22a3069..97ba9a5 100644
--- a/examples/docs/verification-repair/host.mjs
+++ b/examples/docs/verification-repair/host.mjs
@@ -1,4 +1,4 @@
-import { run, isControlSignal } from '@devcodex/flowkit';
+import { run, isControlSignal } from '@devcodex-labs/flowkit';
import { fileURLToPath } from 'node:url';
export async function scenario(target = 1, file = 'sample.workflow.js') {
const events = [];
diff --git a/examples/docs/verification-repair/package.json b/examples/docs/verification-repair/package.json
index 537bd77..d89df89 100644
--- a/examples/docs/verification-repair/package.json
+++ b/examples/docs/verification-repair/package.json
@@ -2,6 +2,6 @@
"private": true,
"type": "module",
"dependencies": {
- "@devcodex/flowkit": "1.0.0"
+ "@devcodex-labs/flowkit": "1.0.0"
}
}
diff --git a/examples/docs/verification-repair/sample.workflow.js b/examples/docs/verification-repair/sample.workflow.js
index af490bb..b30c622 100644
--- a/examples/docs/verification-repair/sample.workflow.js
+++ b/examples/docs/verification-repair/sample.workflow.js
@@ -1,4 +1,4 @@
-import { defineWorkflow, loop, verification, action, terminal } from '@devcodex/flowkit/dsl';
+import { defineWorkflow, loop, verification, action, terminal } from '@devcodex-labs/flowkit/dsl';
export default defineWorkflow({
id: 'repair', version: '1.0.0', name: '校验与修复',
nodes: [
diff --git a/examples/editorial.compiled.mjs b/examples/editorial.compiled.mjs
index be7c453..929304b 100644
--- a/examples/editorial.compiled.mjs
+++ b/examples/editorial.compiled.mjs
@@ -1,7 +1,7 @@
// @generated by flowkit compiler — DO NOT EDIT
// workflow: editorial@1.0.0(Editorial approval)
// source: editorial.workflow.js
-// sourceHash: sha256:bf1015cfd71b940a9dea9bc15743a67d716e7225ed900f9f1b16fdc722b2b74c · bodyHash: sha256:a711bb6c2b0b491bf32ea3692a0bff6d64b2d15740eb37bb62e7f0357471f1e4
+// sourceHash: sha256:d85d218e0363c96af76a3c432c83113224b1bf4aaea292c93451521a91f11e8c · bodyHash: sha256:a711bb6c2b0b491bf32ea3692a0bff6d64b2d15740eb37bb62e7f0357471f1e4
// compiler: flowkit@1.0.0 · options: trace=off
// evalWhen reads own ctx.state paths; strict booleans and short circuit; ! has lower precedence than comparison.
// runAgent receives one step; schema -> checkStep -> verify; own-key commit only after success; retries share reasons and control signals are rethrown.
diff --git a/examples/editorial.workflow.js b/examples/editorial.workflow.js
index 736b834..a6d3877 100644
--- a/examples/editorial.workflow.js
+++ b/examples/editorial.workflow.js
@@ -1,4 +1,4 @@
-import { defineWorkflow, node, action, parallel, condition, loop, verification, human, terminal } from '@devcodex/flowkit/dsl';
+import { defineWorkflow, node, action, parallel, condition, loop, verification, human, terminal } from '@devcodex-labs/flowkit/dsl';
export default defineWorkflow({
id: 'editorial', version: '1.0.0', name: 'Editorial approval',
diff --git a/examples/host.mjs b/examples/host.mjs
index 5839cca..b73b779 100644
--- a/examples/host.mjs
+++ b/examples/host.mjs
@@ -1,4 +1,4 @@
-import { evalWhen, isControlSignal } from '@devcodex/flowkit';
+import { evalWhen, isControlSignal } from '@devcodex-labs/flowkit';
/** Bind real model, JSON Schema, approval and business services at the host boundary. */
export function createRuntime({ agent, validate, approve, verify, act, trace }) {
diff --git a/examples/manifest.json b/examples/manifest.json
index d8cb74a..3fd826b 100644
--- a/examples/manifest.json
+++ b/examples/manifest.json
@@ -40,13 +40,13 @@
"files": [
{
"path": "editorial.workflow.js",
- "bytes": 2318,
- "sha256": "bf1015cfd71b940a9dea9bc15743a67d716e7225ed900f9f1b16fdc722b2b74c"
+ "bytes": 2323,
+ "sha256": "d85d218e0363c96af76a3c432c83113224b1bf4aaea292c93451521a91f11e8c"
},
{
"path": "editorial.compiled.mjs",
"bytes": 8621,
- "sha256": "13dfceb4aa23fcaf9456c2ee0e08b526f9412f57b04046657bcc265330c93a2f"
+ "sha256": "9bcd7649e7b8287d06fc12a8dd5229756d09950778223b557673facbf7d93611"
},
{
"path": "editorial.mmd",
@@ -55,13 +55,13 @@
},
{
"path": "shared-join.workflow.ts",
- "bytes": 637,
- "sha256": "c208b7f933ae599486e4f873fbc55816dd725b4175444966a87cf60c919fcfd6"
+ "bytes": 642,
+ "sha256": "0d0edeba0f6efba74eac863bbeb99068362a66f26c66464e11a3ef2064277547"
},
{
"path": "shared-join.compiled.mjs",
"bytes": 1302,
- "sha256": "af686de6d35e58dee52e368522e33f3ab515059e23ca7fa6b38f17c86a87167a"
+ "sha256": "efe191558ea98c5a5b38c9e4479ab80e942e9fc6739663d8eabbb3307de836b5"
},
{
"path": "shared-join.mmd",
@@ -70,13 +70,13 @@
},
{
"path": "remote.workflow.js",
- "bytes": 1138,
- "sha256": "853eec8cc993addc97832a401c246ee9984ed5b103af4fa53155eed94e5a57bc"
+ "bytes": 1143,
+ "sha256": "a5a5f874342752d1afed9a7c0c3c2584be89210cf38170eb7ed2dfc717431d37"
},
{
"path": "remote.compiled.mjs",
"bytes": 5567,
- "sha256": "a949699d179355995ddc6407bf221f3b18c07a55dabb42530bd8c804ca9def36"
+ "sha256": "9765a4a0b710eced7277618fd153e3f506451808c78c51a108e1795dfbc1ad78"
},
{
"path": "remote.mmd",
@@ -100,13 +100,13 @@
},
{
"path": "host.mjs",
- "bytes": 2068,
- "sha256": "15edb0ff001ce0bfe6e923456b7f3500e7a0a7929f6293d89eefd49363cd4ebc"
+ "bytes": 2073,
+ "sha256": "4c586c45dbb73dcd4a191eaaaade402a66f2f37b22b5c8503241d4f6db978d74"
},
{
"path": "demo.mjs",
- "bytes": 2382,
- "sha256": "68b20b032e0fea0e2c16b5a18c01f93991925fb15fb2510bc8110d803667652f"
+ "bytes": 2387,
+ "sha256": "772152a04456daa760cdfbf35c273c68363ce34dba13b135314747aeb5389772"
},
{
"path": "agent.mjs",
diff --git a/examples/remote.compiled.mjs b/examples/remote.compiled.mjs
index bd0948f..3e6bd02 100644
--- a/examples/remote.compiled.mjs
+++ b/examples/remote.compiled.mjs
@@ -1,7 +1,7 @@
// @generated by flowkit compiler — DO NOT EDIT
// workflow: remote-review@1.0.0(Remote object reviewers)
// source: remote.workflow.js
-// sourceHash: sha256:853eec8cc993addc97832a401c246ee9984ed5b103af4fa53155eed94e5a57bc · bodyHash: sha256:123461a67a8d0a1c27e9848021c9799d2e5c3dbf90a694cd042582c8f67cb70d
+// sourceHash: sha256:a5a5f874342752d1afed9a7c0c3c2584be89210cf38170eb7ed2dfc717431d37 · bodyHash: sha256:123461a67a8d0a1c27e9848021c9799d2e5c3dbf90a694cd042582c8f67cb70d
// compiler: flowkit@1.0.0 · options: trace=off
// runAgent receives one step; schema -> checkStep -> verify; own-key commit only after success; retries share reasons and control signals are rethrown. Remote Skills: https://skills.example.test/style.md (integrity: sha256-GVdESIiHGUAdgUwF8wkh3HmX5deMlNBOUtZXJWVTaW4=); https://skills.example.test/fact.md (integrity: sha256-fV11WZrr2/bGq4tr8OR83tj29m/FKwzao9ga6FHx7wg=).
// all uses Promise.all first rejection; late results are not cancelled.
diff --git a/examples/remote.workflow.js b/examples/remote.workflow.js
index ba0fcbe..c9884a8 100644
--- a/examples/remote.workflow.js
+++ b/examples/remote.workflow.js
@@ -1,4 +1,4 @@
-import { defineWorkflow, parallel, node, terminal } from '@devcodex/flowkit/dsl';
+import { defineWorkflow, parallel, node, terminal } from '@devcodex-labs/flowkit/dsl';
export default defineWorkflow({
id: 'remote-review', version: '1.0.0', name: 'Remote object reviewers',
diff --git a/examples/shared-join.compiled.mjs b/examples/shared-join.compiled.mjs
index 7b1bfb3..5d06adc 100644
--- a/examples/shared-join.compiled.mjs
+++ b/examples/shared-join.compiled.mjs
@@ -1,7 +1,7 @@
// @generated by flowkit compiler — DO NOT EDIT
// workflow: shared-join@1.0.0(Shared join)
// source: shared-join.workflow.ts
-// sourceHash: sha256:c208b7f933ae599486e4f873fbc55816dd725b4175444966a87cf60c919fcfd6 · bodyHash: sha256:06e6a5c5409b2ade96f890af93f2d3346e2f3525ac7d8fbce920d8f8d758d173
+// sourceHash: sha256:0d0edeba0f6efba74eac863bbeb99068362a66f26c66464e11a3ef2064277547 · bodyHash: sha256:06e6a5c5409b2ade96f890af93f2d3346e2f3525ac7d8fbce920d8f8d758d173
// compiler: flowkit@1.0.0 · options: trace=off
// evalWhen reads own ctx.state paths; strict booleans and short circuit; ! has lower precedence than comparison.
// runAction resolve means success; other errors reject; control signals are rethrown.
diff --git a/examples/shared-join.workflow.ts b/examples/shared-join.workflow.ts
index 17b2a38..ee2fa7f 100644
--- a/examples/shared-join.workflow.ts
+++ b/examples/shared-join.workflow.ts
@@ -1,4 +1,4 @@
-import { defineWorkflow, action, condition, terminal } from '@devcodex/flowkit/dsl';
+import { defineWorkflow, action, condition, terminal } from '@devcodex-labs/flowkit/dsl';
export default defineWorkflow({
id: 'shared-join', version: '1.0.0', name: 'Shared join',
diff --git a/package-lock.json b/package-lock.json
index 75e5cf5..93dce14 100644
--- a/package-lock.json
+++ b/package-lock.json
@@ -1,13 +1,13 @@
{
- "name": "@devcodex/flowkit",
+ "name": "@devcodex-labs/flowkit",
"version": "1.0.0",
"lockfileVersion": 3,
"requires": true,
"packages": {
"": {
- "name": "@devcodex/flowkit",
+ "name": "@devcodex-labs/flowkit",
"version": "1.0.0",
- "license": "MIT",
+ "license": "SEE LICENSE IN LICENSE",
"dependencies": {
"acorn": "8.19.0"
},
diff --git a/package.json b/package.json
index dc37591..bb5d6f0 100644
--- a/package.json
+++ b/package.json
@@ -1,24 +1,50 @@
{
- "name": "@devcodex/flowkit",
+ "name": "@devcodex-labs/flowkit",
"version": "1.0.0",
"private": false,
- "license": "MIT",
+ "license": "SEE LICENSE IN LICENSE",
"homepage": "https://devcodex-labs.github.io/flowkit/",
"description": "Compile declarative workflows into readable JavaScript and execute them with a host Runtime",
- "repository": { "type": "git", "url": "git+https://github.com/devcodex-labs/flowkit.git" },
- "publishConfig": { "access": "public", "registry": "https://registry.npmjs.org/" },
+ "repository": {
+ "type": "git",
+ "url": "git+https://github.com/devcodex-labs/flowkit.git"
+ },
+ "publishConfig": {
+ "registry": "https://npm.pkg.github.com/"
+ },
"type": "module",
- "engines": { "node": ">=22.13.0" },
- "bin": { "flowkit": "./dist/cli.mjs" },
+ "engines": {
+ "node": ">=22.13.0"
+ },
+ "bin": {
+ "flowkit": "./dist/cli.mjs"
+ },
"exports": {
- ".": { "types": "./dist/compiler-api.d.ts", "import": "./dist/index.mjs", "default": "./dist/index.mjs" },
- "./dsl": { "types": "./dist/dsl.d.ts", "import": "./dist/dsl.mjs", "default": "./dist/dsl.mjs" },
+ ".": {
+ "types": "./dist/compiler-api.d.ts",
+ "import": "./dist/index.mjs",
+ "default": "./dist/index.mjs"
+ },
+ "./dsl": {
+ "types": "./dist/dsl.d.ts",
+ "import": "./dist/dsl.mjs",
+ "default": "./dist/dsl.mjs"
+ },
+ "./capability-graph": {
+ "types": "./dist/capability-graph.d.ts",
+ "import": "./dist/integrations/capability-graph.mjs",
+ "default": "./dist/integrations/capability-graph.mjs"
+ },
"./package.json": "./package.json"
},
- "files": ["dist", "README.md", "LICENSE"],
+ "files": [
+ "dist",
+ "README.md",
+ "LICENSE"
+ ],
"scripts": {
"build": "node scripts/build.mjs",
- "test": "node --test tests/dsl.test.mjs tests/contracts.test.mjs tests/compiler/*.test.mjs tests/when/*.test.mjs tests/runtime/*.test.mjs tests/cli/*.test.mjs tests/package/*.test.mjs",
+ "test": "node --test tests/dsl.test.mjs tests/contracts.test.mjs tests/compiler/*.test.mjs tests/when/*.test.mjs tests/runtime/*.test.mjs tests/cli/*.test.mjs tests/integrations/*.test.mjs tests/package/*.test.mjs",
"test:types": "node scripts/test-types.mjs",
"check:package": "node scripts/check-package.mjs",
"test:package": "node scripts/test-package.mjs",
@@ -32,8 +58,13 @@
"docs:check": "npm --prefix website run check",
"docs:sync": "node scripts/docs/sync-readme.mjs",
"docs:examples": "node scripts/docs/verify-examples.mjs",
- "docs:public-package": "node scripts/docs/check-public-package.mjs"
+ "docs:private-package": "node scripts/docs/check-public-package.mjs"
+ },
+ "dependencies": {
+ "acorn": "8.19.0"
},
- "dependencies": { "acorn": "8.19.0" },
- "devDependencies": { "typescript": "5.0.4", "tar": "7.5.22" }
+ "devDependencies": {
+ "typescript": "5.0.4",
+ "tar": "7.5.22"
+ }
}
diff --git a/scripts/check-package.mjs b/scripts/check-package.mjs
index 235a1d3..27318e8 100644
--- a/scripts/check-package.mjs
+++ b/scripts/check-package.mjs
@@ -47,7 +47,7 @@ function imports(text, declaration) {
export async function validatePackage(root, packedPaths) {
const pkg = JSON.parse(await readFile(path.join(root, 'package.json'), 'utf8'));
const lock = JSON.parse(await readFile(path.join(root, 'package-lock.json'), 'utf8'));
- assert.equal(pkg.name, '@devcodex/flowkit'); assert.equal(typeof pkg.private, 'boolean'); assert.equal(pkg.type, 'module');
+ assert.equal(pkg.name, '@devcodex-labs/flowkit'); assert.equal(typeof pkg.private, 'boolean'); assert.equal(pkg.type, 'module');
assert.equal(pkg.engines.node, '>=22.13.0'); assert.deepEqual(pkg.dependencies, { acorn: '8.19.0' });
assert.deepEqual(pkg.bin, { flowkit: './dist/cli.mjs' });
assert.deepEqual(Object.keys(lock.packages[''].bin), ['flowkit']);
@@ -55,8 +55,8 @@ export async function validatePackage(root, packedPaths) {
assert.deepEqual(lock.packages[''].dependencies, pkg.dependencies); assert.equal(lock.version, pkg.version);
assert.equal(lock.packages[''].name, pkg.name); assert.equal(lock.packages[''].version, pkg.version);
assert.deepEqual(pkg.files, ['dist', 'README.md', 'LICENSE']);
- assert.deepEqual(Object.keys(pkg.exports), ['.', './dsl', './package.json']);
- for (const [key, types, module] of [['.', './dist/compiler-api.d.ts', './dist/index.mjs'], ['./dsl', './dist/dsl.d.ts', './dist/dsl.mjs']]) {
+ assert.deepEqual(Object.keys(pkg.exports), ['.', './dsl', './capability-graph', './package.json']);
+ for (const [key, types, module] of [['.', './dist/compiler-api.d.ts', './dist/index.mjs'], ['./dsl', './dist/dsl.d.ts', './dist/dsl.mjs'], ['./capability-graph', './dist/capability-graph.d.ts', './dist/integrations/capability-graph.mjs']]) {
assert.deepEqual(Object.keys(pkg.exports[key]), ['types', 'import', 'default']);
assert.deepEqual(pkg.exports[key], { types, import: module, default: module });
}
diff --git a/scripts/docs/check-package-privacy.mjs b/scripts/docs/check-package-privacy.mjs
new file mode 100644
index 0000000..3ed75bb
--- /dev/null
+++ b/scripts/docs/check-package-privacy.mjs
@@ -0,0 +1,28 @@
+import assert from 'node:assert/strict';
+
+/** Verify actual GitHub Packages metadata, not merely the repository visibility. */
+export async function checkPrivatePackage({ token = process.env.GITHUB_TOKEN, fetchImpl = globalThis.fetch } = {}) {
+ if (!token || typeof token !== 'string') throw new Error('GITHUB_TOKEN required to verify package privacy');
+ const base = 'https://api.github.com/orgs/devcodex-labs/packages/npm/';
+ // The Packages API may expose the npm package under its scoped or unscoped name.
+ const candidates = ['%40devcodex-labs%2Fflowkit', 'flowkit'];
+ for (const name of candidates) {
+ const response = await fetchImpl(base + name, {
+ headers: { Authorization: `Bearer ${token}`, Accept: 'application/vnd.github+json', 'X-GitHub-Api-Version': '2026-03-10' },
+ signal: AbortSignal.timeout(30000),
+ });
+ if (response.status === 404) continue;
+ if (!response.ok) throw new Error(`GitHub Package metadata request failed: HTTP ${response.status}`);
+ const pkg = await response.json();
+ assert.equal(pkg.owner?.login?.toLowerCase(), 'devcodex-labs', 'Wrong package owner');
+ assert.equal(pkg.package_type, 'npm', 'Wrong package type');
+ assert.ok(['@devcodex-labs/flowkit', 'flowkit'].includes(pkg.name), 'Wrong npm package identity');
+ assert.equal(pkg.visibility, 'private', 'GitHub Package must be private before documenting a release');
+ return { package: pkg.name, visibility: pkg.visibility, verified: true };
+ }
+ throw new Error('Private GitHub Package metadata is unavailable for the expected package');
+}
+if (process.argv[1] && import.meta.url === new URL('file://' + process.argv[1].replaceAll('\\', '/')).href) {
+ const result = await checkPrivatePackage();
+ console.log(JSON.stringify(result));
+}
diff --git a/scripts/docs/check-package-privacy.test.mjs b/scripts/docs/check-package-privacy.test.mjs
new file mode 100644
index 0000000..e2510e7
--- /dev/null
+++ b/scripts/docs/check-package-privacy.test.mjs
@@ -0,0 +1,19 @@
+import test from 'node:test';
+import assert from 'node:assert/strict';
+import { checkPrivatePackage } from './check-package-privacy.mjs';
+const pkg = { name: '@devcodex-labs/flowkit', package_type: 'npm', owner: { login: 'devcodex-labs' }, visibility: 'private' };
+const response = (status, value) => ({ status, ok: status >= 200 && status < 300, json: async () => value });
+test('package privacy check accepts verified private scoped npm identity', async () => {
+ const urls = [];
+ const result = await checkPrivatePackage({ token: 'fixture', fetchImpl: async url => { urls.push(url); return response(200, pkg); } });
+ assert.equal(result.verified, true); assert.equal(result.visibility, 'private');
+ assert(urls[0].includes('%2Fflowkit'));
+});
+test('privacy check tries both API package-name encodings and fails closed', async () => {
+ let calls = 0;
+ const result = await checkPrivatePackage({ token: 'fixture', fetchImpl: async () => ++calls === 1 ? response(404) : response(200, { ...pkg, name: 'flowkit' }) });
+ assert.equal(result.visibility, 'private'); assert.equal(calls, 2);
+ await assert.rejects(checkPrivatePackage({ token: 'fixture', fetchImpl: async () => response(200, { ...pkg, visibility: 'public' }) }), /private/);
+ await assert.rejects(checkPrivatePackage({ token: 'fixture', fetchImpl: async () => response(404) }), /unavailable/);
+ await assert.rejects(checkPrivatePackage({ token: '', fetchImpl: async () => response(200, pkg) }), /GITHUB_TOKEN/);
+});
diff --git a/scripts/docs/check-public-package.mjs b/scripts/docs/check-public-package.mjs
index 32320aa..c57ad42 100644
--- a/scripts/docs/check-public-package.mjs
+++ b/scripts/docs/check-public-package.mjs
@@ -6,18 +6,19 @@ import { runProcess } from '../validation-process.mjs';
import { verifyRegistryBytes, archiveFiles, sha256 } from './package-proof.mjs';
const args = {};
for (let i = 2; i < process.argv.length; i += 2) { const key = process.argv[i]; assert.ok(['--version', '--manifest', '--evidence'].includes(key) && process.argv[i + 1] && !args[key]); args[key] = process.argv[i + 1]; }
-assert.equal(args['--version'], '1.0.0'); assert.ok(args['--manifest']); assert.ok(process.env.npm_execpath, 'Use npm run docs:public-package');
+assert.ok(/^\d+\.\d+\.\d+(?:-[0-9A-Za-z.-]+)?$/.test(args['--version'] ?? '')); assert.ok(args['--manifest']); assert.ok(process.env.npm_execpath, 'Use npm run docs:private-package');
const manifest = JSON.parse(await readFile(args['--manifest'], 'utf8')); assert.equal(manifest.version, args['--version']);
-const base = await realpath(tmpdir()), temporary = await mkdtemp(path.join(base, 'flowkit-public-'));
+const base = await realpath(tmpdir()), temporary = await mkdtemp(path.join(base, 'flowkit-private-'));
let evidence;
-async function npm(parameters) { const r = await runProcess(process.execPath, [process.env.npm_execpath, ...parameters, '--registry=https://registry.npmjs.org/', '--cache', path.join(temporary, 'cache')], { cwd: temporary, timeout: 120000, maxBuffer: 2 * 1024 * 1024 }); if (r.error) throw r.error; return r; }
+async function npm(parameters) { const r = await runProcess(process.execPath, [process.env.npm_execpath, ...parameters, '--registry=https://npm.pkg.github.com/', '--cache', path.join(temporary, 'cache')], { cwd: temporary, timeout: 120000, maxBuffer: 2 * 1024 * 1024 }); if (r.error) throw r.error; return r; }
try {
- const spec = `@devcodex/flowkit@${args['--version']}`;
+ if (!process.env.NODE_AUTH_TOKEN) throw new Error('Private package verification requires NODE_AUTH_TOKEN');
+ const spec = `@devcodex-labs/flowkit@${args['--version']}`;
let metadata;
for (let attempt = 1; attempt <= 5; attempt++) {
const r = await npm(['view', spec, '--json', '--prefer-online']);
if (r.status === 0) { metadata = JSON.parse(r.stdout); break; }
- if (!/E404/.test(r.stderr + r.stdout) || attempt === 5) throw new Error(`Exact public version unavailable: ${r.stderr || r.stdout}`);
+ if (!/E404/.test(r.stderr + r.stdout) || attempt === 5) throw new Error(`Exact private package version unavailable: ${r.stderr || r.stdout}`);
await new Promise(resolve => setTimeout(resolve, 15000));
}
const packed = await npm(['pack', spec, '--json', '--ignore-scripts', '--pack-destination', temporary]); assert.equal(packed.status, 0, packed.stderr);
@@ -25,10 +26,10 @@ try {
const bytes = await readFile(path.join(temporary, info[0].filename)); verifyRegistryBytes(bytes, metadata, manifest);
const archive = await archiveFiles(bytes), pkg = JSON.parse(archive.get('package.json').toString('utf8'));
assert.equal(pkg.name, metadata.name); assert.equal(pkg.version, metadata.version);
- evidence = { passed: true, node: process.version, platform: process.platform, version: pkg.version, registry: 'https://registry.npmjs.org/', integrity: metadata.dist.integrity, tarballSha256: sha256(bytes), manifestSha256: sha256(await readFile(args['--manifest'])) };
+ evidence = { passed: true, node: process.version, platform: process.platform, version: pkg.version, registry: 'https://npm.pkg.github.com/', integrity: metadata.dist.integrity, tarballSha256: sha256(bytes), manifestSha256: sha256(await readFile(args['--manifest'])) };
} catch (error) { evidence = { passed: false, error: error.message }; process.exitCode = 1; }
finally {
- assert.equal(path.dirname(temporary), base); assert.ok(path.basename(temporary).startsWith('flowkit-public-')); await rm(temporary, { recursive: true, force: true });
+ assert.equal(path.dirname(temporary), base); assert.ok(path.basename(temporary).startsWith('flowkit-private-')); await rm(temporary, { recursive: true, force: true });
if (args['--evidence']) { await mkdir(path.dirname(path.resolve(args['--evidence'])), { recursive: true }); await writeFile(args['--evidence'], JSON.stringify(evidence, null, 2) + '\n'); }
console.log(JSON.stringify(evidence));
}
diff --git a/scripts/docs/package-proof.mjs b/scripts/docs/package-proof.mjs
index 65b067d..1633000 100644
--- a/scripts/docs/package-proof.mjs
+++ b/scripts/docs/package-proof.mjs
@@ -6,7 +6,7 @@ import path from 'node:path';
import { Parser } from 'tar';
export const sha256 = bytes => createHash('sha256').update(bytes).digest('hex');
export function verifyRegistryBytes(bytes, metadata, manifest) {
- assert.equal(metadata.name, '@devcodex/flowkit'); assert.equal(metadata.version, manifest.version);
+ assert.equal(metadata.name, '@devcodex-labs/flowkit'); assert.equal(metadata.version, manifest.version);
assert.equal(manifest.name, metadata.name); assert.equal(sha256(bytes), manifest.sha256, 'Public tarball differs from reviewed candidate');
const match = /^(sha256|sha384|sha512)-([A-Za-z0-9+/]+={0,2})$/.exec(metadata.dist?.integrity ?? '');
assert.ok(match, 'Missing supported registry dist.integrity');
diff --git a/scripts/docs/release-identity.mjs b/scripts/docs/release-identity.mjs
index de16f3f..f7b2aec 100644
--- a/scripts/docs/release-identity.mjs
+++ b/scripts/docs/release-identity.mjs
@@ -7,7 +7,7 @@ import { sha256 } from './package-proof.mjs';
export const repository = 'devcodex-labs/flowkit';
const workflow = '.github/workflows/publish.yml';
export function validateInputs(input) {
- assert.equal(input.repository, repository); assert.equal(input.version, '1.0.0');
+ assert.equal(input.repository, repository); assert.match(String(input.version), /^(0|[1-9]\d*)\.(0|[1-9]\d*)\.(0|[1-9]\d*)(?:-[0-9A-Za-z.-]+)?$/);
for (const key of ['packageReleaseCommit', 'docsCommit']) assert.match(input[key], /^[0-9a-f]{40}$/, key);
for (const key of ['releaseRunId', 'releaseRunAttempt']) assert.match(String(input[key]), /^[1-9]\d*$/, key);
}
@@ -37,7 +37,7 @@ export function validateRecord(input, metadata, record, manifestBytes, tarballBy
assert.equal(record.workflow, workflow); assert.equal(record.tag, `v${input.version}`);
const artifact = selected['npm-release']; assert.equal(String(record.npmArtifactId), String(artifact.id)); assert.equal(record.npmArtifactDigest, artifact.digest);
assert.equal(record.manifestSha256, sha256(manifestBytes)); assert.equal(record.tarballSha256, sha256(tarballBytes));
- assert.equal(manifest.sha256, record.tarballSha256); assert.equal(manifest.version, input.version); assert.equal(manifest.tag, record.tag); assert.equal(manifest.name, '@devcodex/flowkit');
+ assert.equal(manifest.sha256, record.tarballSha256); assert.equal(manifest.version, input.version); assert.equal(manifest.tag, record.tag); assert.equal(manifest.name, '@devcodex-labs/flowkit');
return selected;
}
export function validateRepairPaths(files) {
@@ -82,7 +82,7 @@ export async function main(args) {
} else if (operation === 'verify') {
const metadata = JSON.parse(await readFile(flags['--metadata'], 'utf8')), record = JSON.parse(await readFile(flags['--record'], 'utf8'));
const bytes = await readFile(path.join(flags['--release-dir'], 'release.json')), manifest = JSON.parse(bytes);
- assert.equal(manifest.filename, 'devcodex-flowkit-1.0.0.tgz');
+ assert.equal(manifest.filename, `devcodex-labs-flowkit-${input.version}.tgz`);
validateRecord(input, metadata, record, bytes, await readFile(path.join(flags['--release-dir'], manifest.filename)));
const changed = await validateDocsCommit(flags['--docs-root'], input);
const result = { passed: true, ...input, changed, manifestSha256: sha256(bytes), tarballSha256: manifest.sha256 };
diff --git a/scripts/docs/release-identity.test.mjs b/scripts/docs/release-identity.test.mjs
index d1555f2..8f208b3 100644
--- a/scripts/docs/release-identity.test.mjs
+++ b/scripts/docs/release-identity.test.mjs
@@ -9,7 +9,7 @@ import { validateRecord, validateSourceMetadata, validateRepairPaths, validateDo
import { sha256, verifyRegistryBytes } from './package-proof.mjs';
function fixture() {
const input = { repository: 'devcodex-labs/flowkit', packageReleaseCommit: 'a'.repeat(40), docsCommit: 'a'.repeat(40), version: '1.0.0', releaseRunId: '100', releaseRunAttempt: '2' };
- const tarball = Buffer.from('reviewed bytes'), manifest = Buffer.from(JSON.stringify({ name: '@devcodex/flowkit', version: '1.0.0', tag: 'v1.0.0', sha256: sha256(tarball) }));
+ const tarball = Buffer.from('reviewed bytes'), manifest = Buffer.from(JSON.stringify({ name: '@devcodex-labs/flowkit', version: '1.0.0', tag: 'v1.0.0', sha256: sha256(tarball) }));
const artifact = (name, id) => ({ id, name: `${name}-2`, expired: false, expires_at: new Date(Date.now() + 86400000).toISOString(), digest: `sha256:${'b'.repeat(64)}`, workflow_run: { id: 100, head_sha: input.packageReleaseCommit } });
const metadata = { run: { id: 100, run_attempt: 2, repository: { full_name: input.repository }, head_repository: { full_name: input.repository }, path: '.github/workflows/publish.yml', event: 'push', head_branch: 'v1.0.0', head_sha: input.packageReleaseCommit, conclusion: null }, jobs: ['pack', 'publish'].map(name => ({ name, conclusion: 'success', run_id: 100, head_sha: input.packageReleaseCommit })), artifacts: [artifact('npm-release', 1), artifact('release-identity', 2)] };
const record = { schemaVersion: 'FlowkitReleaseIdentityV1', ...input, workflow: metadata.run.path, tag: 'v1.0.0', npmArtifactId: '1', npmArtifactDigest: metadata.artifacts[0].digest, manifestSha256: sha256(manifest), tarballSha256: sha256(tarball) };
diff --git a/scripts/docs/verify-examples.mjs b/scripts/docs/verify-examples.mjs
index 6ad6a52..06fa736 100644
--- a/scripts/docs/verify-examples.mjs
+++ b/scripts/docs/verify-examples.mjs
@@ -14,6 +14,7 @@ for (let i = 2; i < process.argv.length; i += 2) {
assert.ok(!Object.hasOwn(options, key), `Duplicate: ${key}`); options[key] = process.argv[i + 1];
}
assert.ok(!(options['--package'] && options['--registry-version']), 'Select one package source');
+if (!options['--evidence'] && process.env.FLOWKIT_DOCS_EVIDENCE) options['--evidence'] = process.env.FLOWKIT_DOCS_EVIDENCE;
const npm = process.env.npm_execpath; assert.ok(npm, 'Use npm run docs:examples');
const pkg = JSON.parse(await readFile(path.join(root, 'package.json'), 'utf8'));
const manifest = JSON.parse(await readFile(path.join(root, 'examples/docs/manifest.json'), 'utf8'));
@@ -31,9 +32,9 @@ try {
let source = options['--package'] ? path.resolve(options['--package']) : undefined;
let tarball;
if (options['--registry-version']) {
- assert.equal(options['--registry-version'], pkg.version, 'Public consumer version must match docs');
- source = `@devcodex/flowkit@${pkg.version}`;
- const packed = JSON.parse(await execute('public-pack', [npm, 'pack', source, '--json', '--ignore-scripts', '--registry=https://registry.npmjs.org/', '--cache', path.join(temporary, 'pack-cache'), '--pack-destination', temporary], temporary));
+ assert.equal(options['--registry-version'], pkg.version, 'Private consumer version must match docs');
+ source = `@devcodex-labs/flowkit@${pkg.version}`;
+ const packed = JSON.parse(await execute('private-pack', [npm, 'pack', source, '--json', '--ignore-scripts', '--registry=https://npm.pkg.github.com/', '--cache', path.join(temporary, 'pack-cache'), '--pack-destination', temporary], temporary));
tarball = path.join(temporary, packed[0].filename);
} else if (!source) {
const packed = JSON.parse(await execute('candidate-pack', [npm, 'pack', '--json', '--ignore-scripts', '--pack-destination', temporary], root));
@@ -47,13 +48,15 @@ try {
const consumer = path.join(temporary, 'consumer'); await mkdir(consumer);
await writeFile(path.join(consumer, 'package.json'), JSON.stringify({ private: true, type: 'module' }));
await execute('install', [npm, 'install', '--ignore-scripts', '--no-audit', '--no-fund', '--save-exact', '--registry=https://registry.npmjs.org/', '--cache', path.join(temporary, 'install-cache'), source, 'typescript@5.0.4', '@types/node@22.13.0'], consumer);
- const installed = path.join(consumer, 'node_modules/@devcodex/flowkit');
+ const installed = path.join(consumer, 'node_modules/@devcodex-labs/flowkit');
assert.ok(!(await lstat(installed)).isSymbolicLink()); assert.equal(path.resolve(await realpath(installed)), path.resolve(installed));
const actual = JSON.parse(await readFile(path.join(installed, 'package.json'), 'utf8'));
assert.equal(actual.name, pkg.name); assert.equal(actual.version, pkg.version);
const installedProof = await verifyInstalledArchive(installed, await readFile(tarball));
const selected = manifest.cases.filter(item => !options['--case'] || item.id === options['--case']);
assert.ok(selected.length, 'Unknown or empty case selection');
+ const extra = [...new Set(selected.flatMap(item => item.dependencies ?? []))];
+ if (extra.length) await execute('install-optional-graph', [npm, 'install', '--no-save', '--ignore-scripts', '--no-audit', '--no-fund', '--registry=https://registry.npmjs.org/', ...extra], consumer);
for (const item of selected) {
assert.match(item.directory, /^[a-z][a-z-]*$/);
const directory = path.join(consumer, item.directory); await mkdir(directory);
@@ -82,7 +85,7 @@ try {
const deployment = path.join(temporary, 'deployment'); await mkdir(path.join(deployment, 'skills'), { recursive: true });
for (const file of ['package.json', 'host.mjs', 'sample.workflow.js', 'sample.compiled.mjs', 'sample.mmd', 'skills/writer.md']) await copyFile(path.join(directory, 'deployment', file), path.join(deployment, file));
await execute('E08:independent-install', [npm, 'install', '--ignore-scripts', '--no-audit', '--no-fund', '--save-exact', '--registry=https://registry.npmjs.org/', '--cache', path.join(temporary, 'deployment-cache'), source], deployment);
- const deployedPackage = path.join(deployment, 'node_modules/@devcodex/flowkit');
+ const deployedPackage = path.join(deployment, 'node_modules/@devcodex-labs/flowkit');
assert.ok(!(await lstat(deployedPackage)).isSymbolicLink()); await verifyInstalledArchive(deployedPackage, await readFile(tarball));
await execute('E08:independent-run', ['host.mjs'], deployment);
const deployedSource = path.join(deployment, 'sample.workflow.js');
diff --git a/scripts/package-files.mjs b/scripts/package-files.mjs
index b94eb5c..7aaf66a 100644
--- a/scripts/package-files.mjs
+++ b/scripts/package-files.mjs
@@ -4,6 +4,8 @@ export const packageFiles = [
['src/cli.mjs', 'dist/cli.mjs'],
...['arguments', 'config', 'main'].map(name => [`src/cli/${name}.mjs`, `dist/cli/${name}.mjs`]),
['src/dsl.mjs', 'dist/dsl.mjs'],
+ ['src/integrations/capability-graph.mjs', 'dist/integrations/capability-graph.mjs'],
+ ['types/capability-graph.d.ts', 'dist/capability-graph.d.ts'],
...['contracts', 'control', 'skill-ref'].map(name => [`src/shared/${name}.mjs`, `dist/shared/${name}.mjs`]),
...['source', 'extract', 'validate', 'skill-check', 'analyze', 'graph-algorithms', 'graph', 'dataflow', 'values', 'paths', 'mermaid', 'emit-plan', 'helpers', 'emit', 'compile', 'api', 'output'].map(name => [`src/compiler/${name}.mjs`, `dist/compiler/${name}.mjs`]),
...['parser', 'evaluate'].map(name => [`src/when/${name}.mjs`, `dist/when/${name}.mjs`]),
diff --git a/scripts/release.mjs b/scripts/release.mjs
index a52b7f0..26bf61b 100644
--- a/scripts/release.mjs
+++ b/scripts/release.mjs
@@ -9,7 +9,7 @@ import { packageFiles } from './package-files.mjs';
import { validatePackage } from './check-package.mjs';
import { runProcess } from './validation-process.mjs';
-const registry = 'https://registry.npmjs.org/';
+const registry = 'https://npm.pkg.github.com/';
const repository = 'git+https://github.com/devcodex-labs/flowkit.git';
const digest = bytes => createHash('sha256').update(bytes).digest('hex');
const json = async file => JSON.parse(await readFile(file, 'utf8'));
@@ -21,7 +21,7 @@ export async function assessRelease(root, tag) {
const issues = [];
const require = (condition, field, message) => { if (!condition) issues.push({ field, message }); };
const validVersion = isSemVer(pkg.version) && !pkg.version.includes('+');
- require(pkg.name === '@devcodex/flowkit', 'name', 'Unexpected package name');
+ require(pkg.name === '@devcodex-labs/flowkit', 'name', 'Unexpected package name');
require(validVersion, 'version', 'Use a SemVer release version without build metadata');
require(typeof tag === 'string' && tag === `v${pkg.version}`, 'tag', 'Tag must equal v plus the package version');
require(pkg.private === false, 'private', 'A release candidate must explicitly set private:false');
@@ -35,7 +35,7 @@ export async function assessRelease(root, tag) {
const heading = new RegExp(`^## \\[?${String(pkg.version).replace(/[.*+?^${}()|[\]\\]/g, '\\$&')}\\]?(?:\\s|$)`, 'm');
require(validVersion && heading.test(changelog), 'CHANGELOG', 'Add release notes headed by the exact package version');
require(pkg.repository?.type === 'git' && pkg.repository?.url === repository, 'repository', 'Repository metadata must identify devcodex-labs/flowkit');
- require(pkg.publishConfig?.access === 'public' && pkg.publishConfig?.registry === registry, 'publishConfig', 'Use public access and the npmjs registry explicitly');
+ require(pkg.publishConfig?.registry === registry && !Object.hasOwn(pkg.publishConfig, 'access'), 'publishConfig', 'Publish only to private GitHub Packages; do not set public access');
return { schemaVersion: 1, ready: issues.length === 0, name: pkg.name, version: pkg.version, tag,
npmTag: validVersion && pkg.version.includes('-') ? 'next' : 'latest', issues };
}
@@ -52,7 +52,7 @@ async function outputDirectory(root, create = false) {
return path.join(root, '.tmp/release');
}
-const filenameFor = version => `devcodex-flowkit-${version}.tgz`;
+const filenameFor = version => `devcodex-labs-flowkit-${version}.tgz`;
const members = () => ['package.json', 'README.md', 'LICENSE', ...packageFiles.map(([, output]) => output)].sort();
async function ready(root, tag) {
const assessment = await assessRelease(root, tag);
diff --git a/scripts/test-package.mjs b/scripts/test-package.mjs
index 7be9105..44a5189 100644
--- a/scripts/test-package.mjs
+++ b/scripts/test-package.mjs
@@ -25,7 +25,7 @@ try {
const tarball = path.join(temporary, packed.filename), consumer = path.join(temporary, 'consumer workspace'); await mkdir(consumer);
await writeFile(path.join(consumer, 'package.json'), JSON.stringify({ private: true, type: 'module' }));
await execute('install', [npm, 'install', '--ignore-scripts', '--no-audit', '--no-fund', '--save-exact', tarball, 'typescript@5.7.3', '@types/node@22.13.0'], consumer);
- const installed = path.join(consumer, 'node_modules/@devcodex/flowkit');
+ const installed = path.join(consumer, 'node_modules/@devcodex-labs/flowkit');
assert.ok((await lstat(installed)).isDirectory() && !(await lstat(installed)).isSymbolicLink());
assert.equal(path.resolve(await realpath(installed)), path.resolve(installed), 'Consumer package must be an installed copy');
async function files(directory, prefix = '') {
diff --git a/scripts/test-types.mjs b/scripts/test-types.mjs
index 0d49bdd..572a6d5 100644
--- a/scripts/test-types.mjs
+++ b/scripts/test-types.mjs
@@ -10,7 +10,7 @@ const compilerArgs = ['--noEmit', '--strict', '--target', 'ES2022', '--lib', 'ES
const scratch = path.join(root, '.tmp/types');
await mkdir(scratch, { recursive: true });
const nodes = Array.from({ length: 499 }, (_, i) => `action('step-${i}', { name: '动作${i}', action: 'save', next: '${i === 498 ? 'done' : `step-${i + 1}`}' })`);
-const large = `import {defineWorkflow,action,terminal} from '@devcodex/flowkit/dsl';\ndefineWorkflow({id:'large',version:'1.0.0',name:'规模',nodes:[\n${nodes.join(',\n')},\nterminal('done',{name:'完成',status:'succeeded'})]});\n`;
+const large = `import {defineWorkflow,action,terminal} from '@devcodex-labs/flowkit/dsl';\ndefineWorkflow({id:'large',version:'1.0.0',name:'规模',nodes:[\n${nodes.join(',\n')},\nterminal('done',{name:'完成',status:'succeeded'})]});\n`;
await writeFile(path.join(scratch, '500-valid.ts'), large);
await writeFile(path.join(scratch, '500-invalid.ts'), large.replace("next: 'done'", "next: 'missing-node'"));
const runs = [];
diff --git a/src/compiler/extract.mjs b/src/compiler/extract.mjs
index ff63b92..7bb641e 100644
--- a/src/compiler/extract.mjs
+++ b/src/compiler/extract.mjs
@@ -138,8 +138,8 @@ export function extractWorkflow(snapshot) {
let exported;
for (const statement of program.body) {
if (statement.type === 'ImportDeclaration') {
- if (statement.source.value !== '@devcodex/flowkit/dsl' || statement.specifiers.length === 0 || statement.attributes?.length) {
- fail('Only named imports from @devcodex/flowkit/dsl are supported', statement);
+ if (statement.source.value !== '@devcodex-labs/flowkit/dsl' || statement.specifiers.length === 0 || statement.attributes?.length) {
+ fail('Only named imports from @devcodex-labs/flowkit/dsl are supported', statement);
}
for (const specifier of statement.specifiers) {
const name = specifier.imported?.name;
diff --git a/src/integrations/capability-graph.mjs b/src/integrations/capability-graph.mjs
new file mode 100644
index 0000000..4f8dbcf
--- /dev/null
+++ b/src/integrations/capability-graph.mjs
@@ -0,0 +1,61 @@
+/**
+ * Optional host-side capability-graph bridge. No model, MCP server or second
+ * workflow runtime is created by FlowKit.
+ */
+export const flowkitProvider = Object.freeze({
+ schemaVersion: 1, providerId: 'flowkit', name: 'FlowKit', version: '1.0.0',
+ description: 'Compile declarative JavaScript/TypeScript workflows and run them with an explicit host Runtime.',
+ capabilities: [
+ { id: 'define-workflow', name: 'Define workflow', description: 'Declare eight supported node kinds using the FlowKit DSL.', whenToUse: 'A host needs a statically analyzable workflow definition.', usage: { instructions: 'Import defineWorkflow and DSL constructors from @devcodex-labs/flowkit/dsl. The input must be literal JS/TS DSL.' } },
+ { id: 'compile-workflow', name: 'Compile workflow', description: 'Statically validate a workflow and emit executable JavaScript and optional Mermaid.', whenToUse: 'An application needs a verified compiled workflow.', usage: { instructions: 'Call compile or compileSource from @devcodex-labs/flowkit; inspect diagnostics before using artifacts.' }, relations: { requires: ['define-workflow'] } },
+ { id: 'check-workflow', name: 'Check workflow', description: 'Check source and compare an existing compiled JavaScript artifact without writing.', whenToUse: 'An application needs a read-only definition and artifact check.', usage: { instructions: 'Call check from @devcodex-labs/flowkit; absence of compiled output is not an error and Mermaid is not compared.' }, relations: { requires: ['define-workflow'] } },
+ { id: 'run-workflow', name: 'Run workflow', description: 'Execute a verified workflow using a caller-provided host Runtime.', whenToUse: 'A host has authorized the workflow and supplied its business methods.', usage: { instructions: 'Call run from @devcodex-labs/flowkit with an explicit Runtime. FlowKit does not supply a model or persistent approvals.' }, relations: { requires: ['define-workflow'] } },
+ { id: 'render-mermaid', name: 'Render Mermaid', description: 'Produce a Mermaid diagram from the validated control-flow definition.', whenToUse: 'A caller needs a view of the workflow graph.', usage: { instructions: 'Use compile/compileSource with mermaid enabled; the diagram is visualization, not execution.' }, relations: { requires: ['compile-workflow'] } },
+ ],
+});
+
+function adapterError(code, message) {
+ return Object.assign(new Error(message), { code });
+}
+
+/**
+ * Graph performs discovery, authorization, applicability and dependency resolution.
+ * The explicitly bound host callback is the only component that performs actions.
+ * Resolving a dependency does not execute that dependency.
+ *
+ * @param {{ graph: { resolve: Function }, bindings: Record, getContext?: Function }} options
+ */
+export function createCapabilityGraphActionAdapter({ graph, bindings, getContext = () => ({}) } = {}) {
+ if (!graph || typeof graph.resolve !== 'function') throw new TypeError('graph.resolve must be a function');
+ if (!bindings || typeof bindings !== 'object' || Array.isArray(bindings)) throw new TypeError('bindings must be an object');
+ if (typeof getContext !== 'function') throw new TypeError('getContext must be a function');
+ const table = new Map();
+ for (const key of Object.keys(bindings)) {
+ const descriptor = Object.getOwnPropertyDescriptor(bindings, key);
+ if (!descriptor || !Object.hasOwn(descriptor, 'value')) throw new TypeError('bindings must not contain accessors');
+ const binding = descriptor.value;
+ if (!binding || typeof binding.capabilityId !== 'string' || !/^[a-z][a-z0-9._-]*::[a-z][a-z0-9._-]*$/.test(binding.capabilityId) || typeof binding.execute !== 'function') {
+ throw new TypeError(`Invalid capability binding: ${key}`);
+ }
+ table.set(key, { capabilityId: binding.capabilityId, execute: binding.execute });
+ }
+ return {
+ async runAction(action, name, ctx) {
+ const binding = table.get(action);
+ if (!binding) throw adapterError('FK_CG_BINDING_MISSING', `No Graph binding for action: ${action}`);
+ const context = getContext(ctx);
+ if (!context || typeof context !== 'object' || Array.isArray(context)) throw new TypeError('getContext must return Graph MatchContext');
+ // Let GraphError (including permission and invalid context) propagate unchanged.
+ const result = await graph.resolve({ ids: [binding.capabilityId], context, relations: ['requires'] });
+ if (!result || result.meta?.completeness !== 'complete' || !Array.isArray(result.unresolved) || result.unresolved.length || !Array.isArray(result.nodes)) {
+ throw adapterError('FK_CG_DEPENDENCIES_INCOMPLETE', 'Capability dependencies are incomplete');
+ }
+ const root = result.nodes.find(item => item.capability?.id === binding.capabilityId);
+ if (!root) throw adapterError('FK_CG_DEPENDENCIES_INCOMPLETE', 'Selected capability is missing from the resolved graph');
+ for (const item of result.nodes) if (item.applicability?.status !== 'applicable') {
+ throw adapterError('FK_CG_NOT_APPLICABLE', `Capability is not applicable: ${item.capability?.id ?? 'unknown'}`);
+ }
+ await binding.execute({ action, name, ctx, resolution: result, capability: root.capability });
+ },
+ };
+}
diff --git a/tests/cli/cli.test.mjs b/tests/cli/cli.test.mjs
index 2ce65ac..75923ad 100644
--- a/tests/cli/cli.test.mjs
+++ b/tests/cli/cli.test.mjs
@@ -2,7 +2,7 @@ import test from 'node:test';
import assert from 'node:assert/strict';
import { readFile, writeFile, readdir, mkdir, stat, access, symlink, rmdir } from 'node:fs/promises';
import path from 'node:path';
-import * as api from '@devcodex/flowkit';
+import * as api from '@devcodex-labs/flowkit';
import { workspace, definition, end, entry, diagnostics, configurationError } from './support.mjs';
const remote = (host = 'example.test') => `node('n',{name:'N',skill:'https://${host}/a.md',output:{type:'object'},next:'done'})`;
@@ -178,5 +178,5 @@ test('bin metadata, lockfile and built entry agree, preserve shebang and add no
assert.ok(['./dist/cli.mjs', 'dist/cli.mjs'].includes(lock.packages[''].bin.flowkit));
const source = await readFile(new URL('../../src/cli.mjs', import.meta.url)); const built = await readFile(entry);
assert.deepEqual(built, source); assert.ok(built.toString().startsWith('#!/usr/bin/env node\n'));
- await assert.rejects(import('@devcodex/flowkit/cli'), { code: 'ERR_PACKAGE_PATH_NOT_EXPORTED' });
+ await assert.rejects(import('@devcodex-labs/flowkit/cli'), { code: 'ERR_PACKAGE_PATH_NOT_EXPORTED' });
});
diff --git a/tests/cli/support.mjs b/tests/cli/support.mjs
index 66c1abb..6209613 100644
--- a/tests/cli/support.mjs
+++ b/tests/cli/support.mjs
@@ -7,7 +7,7 @@ import path from 'node:path';
export const entry = fileURLToPath(new URL('../../dist/cli.mjs', import.meta.url));
export const end = "terminal('done',{name:'Done',status:'succeeded'})";
-export const definition = nodes => "import {defineWorkflow,node,action,terminal} from '@devcodex/flowkit/dsl';\nexport default defineWorkflow({id:'cli',version:'1.0.0',name:'CLI',nodes:[" + nodes.join(',') + ']});\n';
+export const definition = nodes => "import {defineWorkflow,node,action,terminal} from '@devcodex-labs/flowkit/dsl';\nexport default defineWorkflow({id:'cli',version:'1.0.0',name:'CLI',nodes:[" + nodes.join(',') + ']});\n';
export async function workspace(t, nodes = [end]) {
const base = path.resolve(tmpdir());
const directory = await mkdtemp(path.join(base, 'flowkit-cli-'));
diff --git a/tests/compiler/acceptance-errors.test.mjs b/tests/compiler/acceptance-errors.test.mjs
index b6b4e65..829e710 100644
--- a/tests/compiler/acceptance-errors.test.mjs
+++ b/tests/compiler/acceptance-errors.test.mjs
@@ -3,13 +3,13 @@ import assert from 'node:assert/strict';
import { mkdtemp, mkdir, writeFile, readFile, rm, symlink, readdir } from 'node:fs/promises';
import { tmpdir } from 'node:os';
import path from 'node:path';
-import { compileSource, check, run, evalWhen, isControlSignal } from '@devcodex/flowkit';
+import { compileSource, check, run, evalWhen, isControlSignal } from '@devcodex-labs/flowkit';
import { validateExample } from '../../examples/host.mjs';
const directory = new URL('../fixtures/errors/', import.meta.url);
const catalog = JSON.parse(await readFile(new URL('../fixtures/contract-codes.json', import.meta.url)));
const files = (await readdir(directory)).filter(file => file.endsWith('.json')).sort();
-const header = "import {defineWorkflow,action,terminal} from '@devcodex/flowkit/dsl';\n";
+const header = "import {defineWorkflow,action,terminal} from '@devcodex-labs/flowkit/dsl';\n";
function materialize(spec) {
if (!spec.chainLength) return spec.source;
const nodes = Array.from({ length: spec.chainLength - 1 }, (_, i) => `action('n-${i}',{name:'N ${i}',action:'save',next:'${i === spec.chainLength - 2 ? 'done' : `n-${i + 1}`}'})`);
diff --git a/tests/compiler/api.test.mjs b/tests/compiler/api.test.mjs
index 8a234e5..3cfc727 100644
--- a/tests/compiler/api.test.mjs
+++ b/tests/compiler/api.test.mjs
@@ -8,9 +8,9 @@ import { tmpdir } from 'node:os';
import path from 'node:path';
import { createHash } from 'node:crypto';
import { spawnSync } from 'node:child_process';
-import * as api from '@devcodex/flowkit';
+import * as api from '@devcodex-labs/flowkit';
-const source = name => `import {defineWorkflow,terminal} from '@devcodex/flowkit/dsl';\nexport default defineWorkflow({id:'demo',version:'1.0.0',name:'${name ?? 'Demo'}',nodes:[terminal('done',{name:'Done',status:'succeeded'})]});\n`;
+const source = name => `import {defineWorkflow,terminal} from '@devcodex-labs/flowkit/dsl';\nexport default defineWorkflow({id:'demo',version:'1.0.0',name:'${name ?? 'Demo'}',nodes:[terminal('done',{name:'Done',status:'succeeded'})]});\n`;
const hash = bytes => createHash('sha256').update(bytes).digest('hex');
async function workspace(t) {
const base = path.resolve(tmpdir());
@@ -38,7 +38,7 @@ async function snapshot(directory) {
test('package root exposes implemented compiler functions and runtime helpers while blocking deep imports', async () => {
assert.deepEqual(Object.keys(api), ['check', 'compile', 'compileSource', 'evalWhen', 'isControlSignal', 'run']);
- await assert.rejects(import('@devcodex/flowkit/compiler/api'), { code: 'ERR_PACKAGE_PATH_NOT_EXPORTED' });
+ await assert.rejects(import('@devcodex-labs/flowkit/compiler/api'), { code: 'ERR_PACKAGE_PATH_NOT_EXPORTED' });
});
test('the README quick-start module compiles unchanged through the public API', async t => {
@@ -59,7 +59,7 @@ import fsSync from 'node:fs';
import {syncBuiltinESMExports} from 'node:module';
import {mkdir,writeFile,readFile,stat} from 'node:fs/promises';
import path from 'node:path';
-const api=await import(${JSON.stringify(import.meta.resolve('@devcodex/flowkit'))});
+const api=await import(${JSON.stringify(import.meta.resolve('@devcodex-labs/flowkit'))});
const base=process.argv[1],project=path.join(base,'project');
await mkdir(path.join(project,'nested'),{recursive:true});
await mkdir(path.join(project,'skills'));await writeFile(path.join(project,'skills/a.md'),'instruction');
@@ -71,7 +71,7 @@ await assert.rejects(stat(path.join(base,'source.compiled.mjs')),{code:'ENOENT'}
await writeFile(artifact,first.code+' ');
process.chdir(project);const checking=api.check('nested/source.workflow.js',{outDir:'.'});process.chdir(base);
const differences=await checking;assert.deepEqual(differences.map(d=>d.code),['FK_R001']);assert.equal(differences[0].file,artifact);
-const agent="import {defineWorkflow,node,terminal} from '@devcodex/flowkit/dsl';export default defineWorkflow({id:'agent',version:'1.0.0',name:'Agent',nodes:[node('n',{name:'N',skill:'skills/a.md',output:{type:'object'},next:'done'}),terminal('done',{name:'Done',status:'succeeded'})]});";
+const agent="import {defineWorkflow,node,terminal} from '@devcodex-labs/flowkit/dsl';export default defineWorkflow({id:'agent',version:'1.0.0',name:'Agent',nodes:[node('n',{name:'N',skill:'skills/a.md',output:{type:'object'},next:'done'}),terminal('done',{name:'Done',status:'succeeded'})]});";
await writeFile(path.join(project,'nested/agent.workflow.js'),agent);
// Simulate no package.json ancestors so the fallback is independent of the test machine.
const originalStat=fsSync.statSync;
@@ -141,7 +141,7 @@ test('warnings permit writing without fetching remote Skills or running source/c
const directory = await workspace(t);
const filename = path.join(directory, 'remote.workflow.js');
await writeFile(path.join(directory, 'flowkit.config.mjs'), "throw new Error('API must not execute configuration');");
- const remote = "import {defineWorkflow,node,terminal} from '@devcodex/flowkit/dsl';export default defineWorkflow({id:'remote',version:'1.0.0',name:'Remote',nodes:[node('n',{name:'N',skill:'https://example.test/skill.md',output:{type:'object'},next:'done'}),terminal('done',{name:'Done',status:'succeeded'})]});";
+ const remote = "import {defineWorkflow,node,terminal} from '@devcodex-labs/flowkit/dsl';export default defineWorkflow({id:'remote',version:'1.0.0',name:'Remote',nodes:[node('n',{name:'N',skill:'https://example.test/skill.md',output:{type:'object'},next:'done'}),terminal('done',{name:'Done',status:'succeeded'})]});";
const result = await api.compileSource(remote, { filename, remoteSkillHosts: ['example.test'], fetch: () => assert.fail('No network') });
assert.deepEqual(result.diagnostics.map(item => item.code), ['FK_C059']);
assert.ok(result.code.length); assert.ok((await stat(path.join(directory, 'remote.compiled.mjs'))).isFile());
@@ -215,7 +215,7 @@ test('check compares the ancestor outDir and carries compile warnings alongside
await api.compile(file, { outDir: directory });
assert.deepEqual(await api.check(file, { outDir: directory }), []);
assert.deepEqual(await api.check(file), []);
- const remote = "import {defineWorkflow,node,terminal} from '@devcodex/flowkit/dsl';export default defineWorkflow({id:'remote',version:'1.0.0',name:'Remote',nodes:[node('n',{name:'N',skill:'https://example.test/skill.md',output:{type:'object'},next:'done'}),terminal('done',{name:'Done',status:'succeeded'})]});";
+ const remote = "import {defineWorkflow,node,terminal} from '@devcodex-labs/flowkit/dsl';export default defineWorkflow({id:'remote',version:'1.0.0',name:'Remote',nodes:[node('n',{name:'N',skill:'https://example.test/skill.md',output:{type:'object'},next:'done'}),terminal('done',{name:'Done',status:'succeeded'})]});";
await writeFile(file, remote);
assert.deepEqual((await api.check(file, { outDir: directory, remoteSkillHosts: ['example.test'] })).map(item => item.code), ['FK_C059', 'FK_R001']);
});
diff --git a/tests/compiler/dataflow.test.mjs b/tests/compiler/dataflow.test.mjs
index be49e73..450b960 100644
--- a/tests/compiler/dataflow.test.mjs
+++ b/tests/compiler/dataflow.test.mjs
@@ -2,7 +2,7 @@ import test from 'node:test';
import assert from 'node:assert/strict';
import { analyzeSource } from '../../src/compiler/analyze.mjs';
-const imports="import {defineWorkflow,node,action,verification,parallel,condition,loop,human,terminal} from '@devcodex/flowkit/dsl';";
+const imports="import {defineWorkflow,node,action,verification,parallel,condition,loop,human,terminal} from '@devcodex-labs/flowkit/dsl';";
const end="terminal('done',{name:'Done',status:'succeeded'})";
const agent=(id,next,inputs=[],properties={})=>`node('${id}',{name:'${id}',agent:'writer',inputs:${JSON.stringify(inputs)},output:{type:'object',properties:${JSON.stringify(properties)}},next:'${next}'})`;
const analyze=nodes=>analyzeSource(`${imports}\nexport default defineWorkflow({id:'demo',version:'1.0.0',name:'Demo',nodes:[${nodes.join(',')}]});`,{filename:'data.workflow.js',skillCheck:false});
diff --git a/tests/compiler/emit.test.mjs b/tests/compiler/emit.test.mjs
index fba3d1a..2335965 100644
--- a/tests/compiler/emit.test.mjs
+++ b/tests/compiler/emit.test.mjs
@@ -5,7 +5,7 @@ import { compileToText } from '../../src/compiler/compile.mjs';
import { createSourceSnapshot } from '../../src/compiler/source.mjs';
import { evalWhen } from '../../src/when/evaluate.mjs';
-const imports="import {defineWorkflow,node,action,parallel,condition,verification,loop,human,terminal} from '@devcodex/flowkit/dsl';";
+const imports="import {defineWorkflow,node,action,parallel,condition,verification,loop,human,terminal} from '@devcodex-labs/flowkit/dsl';";
const end=(id='done')=>`terminal('${id}',{name:'${id}',status:'succeeded'})`;
const action=(id,next)=>`action('${id}',{name:'${id}',action:'${id}',next:'${next}'})`;
async function compile(nodes,options={}) {
diff --git a/tests/compiler/extract.test.mjs b/tests/compiler/extract.test.mjs
index 27837a1..497dc78 100644
--- a/tests/compiler/extract.test.mjs
+++ b/tests/compiler/extract.test.mjs
@@ -4,7 +4,7 @@ import { createHash } from 'node:crypto';
import { createSourceSnapshot, createCompileContext } from '../../src/compiler/source.mjs';
import { extractWorkflow } from '../../src/compiler/extract.mjs';
-const imports = "import {defineWorkflow as wf, node, action, verification, parallel, condition, loop, human, terminal as end} from '@devcodex/flowkit/dsl';\n";
+const imports = "import {defineWorkflow as wf, node, action, verification, parallel, condition, loop, human, terminal as end} from '@devcodex-labs/flowkit/dsl';\n";
const source = (nodes, extras = '') => `${imports}export default wf({id:'demo',version:'1.0.0',name:'示例',nodes:[${nodes}]${extras}});`;
const extract = (text, ext = 'js') => extractWorkflow(createSourceSnapshot(text, `fixtures/demo.workflow.${ext}`));
@@ -48,9 +48,9 @@ test('rejects executable and nonliteral syntax without executing side effects',
source("end('done',{name:'End',status:'succeeded'})").replace('export default', 'const x = 1; export default'),
source("{id:'done',name:'End',type:'terminal',status:'succeeded'}"),
source("end('done',{name:'End',status:'succeeded'})", ',extra:{nested:node(\'x\',{})}'),
- "import * as dsl from '@devcodex/flowkit/dsl'; export default dsl.defineWorkflow({});",
- "import dsl from '@devcodex/flowkit/dsl'; export default dsl({});",
- source("end('done',{name:'End',status:'succeeded'})").replace('@devcodex/flowkit/dsl', 'node:fs'),
+ "import * as dsl from '@devcodex-labs/flowkit/dsl'; export default dsl.defineWorkflow({});",
+ "import dsl from '@devcodex-labs/flowkit/dsl'; export default dsl({});",
+ source("end('done',{name:'End',status:'succeeded'})").replace('@devcodex-labs/flowkit/dsl', 'node:fs'),
source("end('done',{name:'End',status:'succeeded'}),,"),
];
for (const text of bad) {
diff --git a/tests/compiler/format.test.mjs b/tests/compiler/format.test.mjs
index f9bcdea..03cd563 100644
--- a/tests/compiler/format.test.mjs
+++ b/tests/compiler/format.test.mjs
@@ -7,7 +7,7 @@ import { compilationPaths } from '../../src/compiler/paths.mjs';
import { analyzeSource } from '../../src/compiler/analyze.mjs';
import { checkMermaidIds, renderMermaid } from '../../src/compiler/mermaid.mjs';
-const analyze = nodes => analyzeSource(`import {defineWorkflow,node,action,parallel,verification,loop,human,terminal,condition} from '@devcodex/flowkit/dsl';export default defineWorkflow({id:'demo',version:'1.0.0',name:'Demo',nodes:[${nodes.join(',')}]});`,
+const analyze = nodes => analyzeSource(`import {defineWorkflow,node,action,parallel,verification,loop,human,terminal,condition} from '@devcodex-labs/flowkit/dsl';export default defineWorkflow({id:'demo',version:'1.0.0',name:'Demo',nodes:[${nodes.join(',')}]});`,
{ filename:'format.workflow.js', skillCheck:false });
const end="terminal('done',{name:'Done',status:'succeeded'})";
diff --git a/tests/compiler/generated-contract.test.mjs b/tests/compiler/generated-contract.test.mjs
index e7ad3d1..12bbef6 100644
--- a/tests/compiler/generated-contract.test.mjs
+++ b/tests/compiler/generated-contract.test.mjs
@@ -5,7 +5,7 @@ import { compileToText } from '../../src/compiler/compile.mjs';
import { createSourceSnapshot } from '../../src/compiler/source.mjs';
import { evalWhen } from '../../src/when/evaluate.mjs';
-const imports="import {defineWorkflow,node,action,parallel,condition,verification,loop,human,terminal} from '@devcodex/flowkit/dsl';";
+const imports="import {defineWorkflow,node,action,parallel,condition,verification,loop,human,terminal} from '@devcodex-labs/flowkit/dsl';";
const end="terminal('done',{name:'Done',status:'succeeded'})";
const text=nodes=>`${imports}\nexport default defineWorkflow({id:'demo',version:'1.0.0',name:'Demo',nodes:[${nodes.join(',')}]});\n`;
const compile=async(nodes,options={})=>{
diff --git a/tests/compiler/graph.test.mjs b/tests/compiler/graph.test.mjs
index 92517d6..1007258 100644
--- a/tests/compiler/graph.test.mjs
+++ b/tests/compiler/graph.test.mjs
@@ -3,7 +3,7 @@ import assert from 'node:assert/strict';
import { analyzeSource } from '../../src/compiler/analyze.mjs';
import { EXIT } from '../../src/compiler/graph-algorithms.mjs';
-const imports = "import {defineWorkflow,node,action,verification,parallel,condition,loop,human,terminal} from '@devcodex/flowkit/dsl';";
+const imports = "import {defineWorkflow,node,action,verification,parallel,condition,loop,human,terminal} from '@devcodex-labs/flowkit/dsl';";
const end = (id='done') => `terminal('${id}',{name:'${id}',status:'succeeded'})`;
const action = (id,next,extra='') => `action('${id}',{name:'${id}',action:'save',next:'${next}'${extra}})`;
const analyze = nodes => analyzeSource(`${imports}\nexport default defineWorkflow({id:'demo',version:'1.0.0',name:'Demo',nodes:[${nodes.join(',')}]});`,
diff --git a/tests/compiler/skills.test.mjs b/tests/compiler/skills.test.mjs
index 9e9b4f7..e649c31 100644
--- a/tests/compiler/skills.test.mjs
+++ b/tests/compiler/skills.test.mjs
@@ -8,7 +8,7 @@ import { validIntegrity } from '../../src/compiler/skill-check.mjs';
function source(fields) {
const entries = Object.entries(fields).map(([key, value]) => `${JSON.stringify(key)}:${JSON.stringify(value)}`).join(',');
- return `import {defineWorkflow,node,terminal} from '@devcodex/flowkit/dsl';\nexport default defineWorkflow({id:'demo',version:'1.0.0',name:'Demo',nodes:[node('n',{name:'N',output:{type:'object'},next:'done',${entries}}),terminal('done',{name:'Done',status:'succeeded'})]});`;
+ return `import {defineWorkflow,node,terminal} from '@devcodex-labs/flowkit/dsl';\nexport default defineWorkflow({id:'demo',version:'1.0.0',name:'Demo',nodes:[node('n',{name:'N',output:{type:'object'},next:'done',${entries}}),terminal('done',{name:'Done',status:'succeeded'})]});`;
}
const analyze = (fields, options = {}) => analyzeSource(source(fields), {
filename: 'demo.workflow.js', skillCheck: false, ...options,
diff --git a/tests/compiler/validate.test.mjs b/tests/compiler/validate.test.mjs
index c394617..e97e797 100644
--- a/tests/compiler/validate.test.mjs
+++ b/tests/compiler/validate.test.mjs
@@ -5,7 +5,7 @@ import { extractWorkflow } from '../../src/compiler/extract.mjs';
import { isSemVer, validateFields } from '../../src/compiler/validate.mjs';
import { ERROR_CATALOG } from '../../src/shared/contracts.mjs';
-const header = "import {defineWorkflow,node,action,verification,parallel,condition,loop,human,terminal} from '@devcodex/flowkit/dsl';\n";
+const header = "import {defineWorkflow,node,action,verification,parallel,condition,loop,human,terminal} from '@devcodex-labs/flowkit/dsl';\n";
const terminal = "terminal('done',{name:'Done',status:'succeeded'})";
const definition = (nodes = terminal, fields = "id:'demo',version:'1.0.0',name:'Demo'") =>
`${header}export default defineWorkflow({${fields},nodes:[${nodes}]});`;
diff --git a/tests/contracts.test.mjs b/tests/contracts.test.mjs
index 4d5dd8e..830256e 100644
--- a/tests/contracts.test.mjs
+++ b/tests/contracts.test.mjs
@@ -33,6 +33,6 @@ test('字段、类型和目录边界固定且不可改写', async () => {
assert.equal(typeof pkg.private, 'boolean');
assert.equal(pkg.type, 'module');
assert.equal(pkg.engines.node, '>=22.13.0');
- assert.deepEqual(Object.keys(pkg.exports), ['.', './dsl', './package.json']);
+ assert.deepEqual(Object.keys(pkg.exports), ['.', './dsl', './capability-graph', './package.json']);
assert.deepEqual(pkg.dependencies, { acorn: '8.19.0' });
});
diff --git a/tests/dsl.test.mjs b/tests/dsl.test.mjs
index 88a7f99..158240e 100644
--- a/tests/dsl.test.mjs
+++ b/tests/dsl.test.mjs
@@ -109,8 +109,8 @@ test('不执行getter,拒绝循环、函数与非字面数据', () => {
});
test('built DSL and compiler entries are consumable while internal modules stay private', async () => {
- const built = await import('@devcodex/flowkit/dsl');
+ const built = await import('@devcodex-labs/flowkit/dsl');
assert.equal(built.terminal('ok', { name: '完成', status: 'succeeded' }).type, 'terminal');
- await assert.rejects(import('@devcodex/flowkit/src/shared/contracts.mjs'), { code: 'ERR_PACKAGE_PATH_NOT_EXPORTED' });
- assert.deepEqual(Object.keys(await import('@devcodex/flowkit')), ['check', 'compile', 'compileSource', 'evalWhen', 'isControlSignal', 'run']);
+ await assert.rejects(import('@devcodex-labs/flowkit/src/shared/contracts.mjs'), { code: 'ERR_PACKAGE_PATH_NOT_EXPORTED' });
+ assert.deepEqual(Object.keys(await import('@devcodex-labs/flowkit')), ['check', 'compile', 'compileSource', 'evalWhen', 'isControlSignal', 'run']);
});
diff --git a/tests/fixtures/errors/FK_C001.json b/tests/fixtures/errors/FK_C001.json
index c02590c..76aeda9 100644
--- a/tests/fixtures/errors/FK_C001.json
+++ b/tests/fixtures/errors/FK_C001.json
@@ -2,11 +2,11 @@
"code": "FK_C001",
"kind": "compile",
"invalid": {
- "source": "import {defineWorkflow,node,action,verification,parallel,condition,loop,human,terminal} from '@devcodex/flowkit/dsl';\nexport default defineWorkflow({id:'Bad',version:'1.0.0',name:'Demo',nodes:[terminal('done',{name:'done',status:'succeeded'})]});\n",
+ "source": "import {defineWorkflow,node,action,verification,parallel,condition,loop,human,terminal} from '@devcodex-labs/flowkit/dsl';\nexport default defineWorkflow({id:'Bad',version:'1.0.0',name:'Demo',nodes:[terminal('done',{name:'done',status:'succeeded'})]});\n",
"options": {}
},
"valid": {
- "source": "import {defineWorkflow,node,action,verification,parallel,condition,loop,human,terminal} from '@devcodex/flowkit/dsl';\nexport default defineWorkflow({id:'demo',version:'1.0.0',name:'Demo',nodes:[terminal('done',{name:'done',status:'succeeded'})]});\n",
+ "source": "import {defineWorkflow,node,action,verification,parallel,condition,loop,human,terminal} from '@devcodex-labs/flowkit/dsl';\nexport default defineWorkflow({id:'demo',version:'1.0.0',name:'Demo',nodes:[terminal('done',{name:'done',status:'succeeded'})]});\n",
"options": {}
}
}
diff --git a/tests/fixtures/errors/FK_C002.json b/tests/fixtures/errors/FK_C002.json
index 25b2044..2875a78 100644
--- a/tests/fixtures/errors/FK_C002.json
+++ b/tests/fixtures/errors/FK_C002.json
@@ -2,11 +2,11 @@
"code": "FK_C002",
"kind": "compile",
"invalid": {
- "source": "import {defineWorkflow,node,action,verification,parallel,condition,loop,human,terminal} from '@devcodex/flowkit/dsl';\nexport default defineWorkflow({id:'demo',version:'01.0.0',name:'Demo',nodes:[terminal('done',{name:'done',status:'succeeded'})]});\n",
+ "source": "import {defineWorkflow,node,action,verification,parallel,condition,loop,human,terminal} from '@devcodex-labs/flowkit/dsl';\nexport default defineWorkflow({id:'demo',version:'01.0.0',name:'Demo',nodes:[terminal('done',{name:'done',status:'succeeded'})]});\n",
"options": {}
},
"valid": {
- "source": "import {defineWorkflow,node,action,verification,parallel,condition,loop,human,terminal} from '@devcodex/flowkit/dsl';\nexport default defineWorkflow({id:'demo',version:'1.0.0',name:'Demo',nodes:[terminal('done',{name:'done',status:'succeeded'})]});\n",
+ "source": "import {defineWorkflow,node,action,verification,parallel,condition,loop,human,terminal} from '@devcodex-labs/flowkit/dsl';\nexport default defineWorkflow({id:'demo',version:'1.0.0',name:'Demo',nodes:[terminal('done',{name:'done',status:'succeeded'})]});\n",
"options": {}
}
}
diff --git a/tests/fixtures/errors/FK_C003.json b/tests/fixtures/errors/FK_C003.json
index 47af9ee..bca6e9e 100644
--- a/tests/fixtures/errors/FK_C003.json
+++ b/tests/fixtures/errors/FK_C003.json
@@ -2,11 +2,11 @@
"code": "FK_C003",
"kind": "compile",
"invalid": {
- "source": "import {defineWorkflow,node,action,verification,parallel,condition,loop,human,terminal} from '@devcodex/flowkit/dsl';\nexport default defineWorkflow({id:'demo',version:'1.0.0',name:'bad*/',nodes:[terminal('done',{name:'done',status:'succeeded'})]});\n",
+ "source": "import {defineWorkflow,node,action,verification,parallel,condition,loop,human,terminal} from '@devcodex-labs/flowkit/dsl';\nexport default defineWorkflow({id:'demo',version:'1.0.0',name:'bad*/',nodes:[terminal('done',{name:'done',status:'succeeded'})]});\n",
"options": {}
},
"valid": {
- "source": "import {defineWorkflow,node,action,verification,parallel,condition,loop,human,terminal} from '@devcodex/flowkit/dsl';\nexport default defineWorkflow({id:'demo',version:'1.0.0',name:'Demo',nodes:[terminal('done',{name:'done',status:'succeeded'})]});\n",
+ "source": "import {defineWorkflow,node,action,verification,parallel,condition,loop,human,terminal} from '@devcodex-labs/flowkit/dsl';\nexport default defineWorkflow({id:'demo',version:'1.0.0',name:'Demo',nodes:[terminal('done',{name:'done',status:'succeeded'})]});\n",
"options": {}
}
}
diff --git a/tests/fixtures/errors/FK_C004.json b/tests/fixtures/errors/FK_C004.json
index a8c6139..1f65ffc 100644
--- a/tests/fixtures/errors/FK_C004.json
+++ b/tests/fixtures/errors/FK_C004.json
@@ -2,11 +2,11 @@
"code": "FK_C004",
"kind": "compile",
"invalid": {
- "source": "import {defineWorkflow,node,action,verification,parallel,condition,loop,human,terminal} from '@devcodex/flowkit/dsl';\nexport default defineWorkflow({id:'demo',version:'1.0.0',name:'Demo',nodes:[]});\n",
+ "source": "import {defineWorkflow,node,action,verification,parallel,condition,loop,human,terminal} from '@devcodex-labs/flowkit/dsl';\nexport default defineWorkflow({id:'demo',version:'1.0.0',name:'Demo',nodes:[]});\n",
"options": {}
},
"valid": {
- "source": "import {defineWorkflow,node,action,verification,parallel,condition,loop,human,terminal} from '@devcodex/flowkit/dsl';\nexport default defineWorkflow({id:'demo',version:'1.0.0',name:'Demo',nodes:[terminal('done',{name:'done',status:'succeeded'})]});\n",
+ "source": "import {defineWorkflow,node,action,verification,parallel,condition,loop,human,terminal} from '@devcodex-labs/flowkit/dsl';\nexport default defineWorkflow({id:'demo',version:'1.0.0',name:'Demo',nodes:[terminal('done',{name:'done',status:'succeeded'})]});\n",
"options": {}
}
}
diff --git a/tests/fixtures/errors/FK_C006.json b/tests/fixtures/errors/FK_C006.json
index 38637f7..8f2b07f 100644
--- a/tests/fixtures/errors/FK_C006.json
+++ b/tests/fixtures/errors/FK_C006.json
@@ -2,11 +2,11 @@
"code": "FK_C006",
"kind": "compile",
"invalid": {
- "source": "import {defineWorkflow,node,action,verification,parallel,condition,loop,human,terminal} from '@devcodex/flowkit/dsl';\nexport default defineWorkflow({id:'demo',version:'1.0.0',name:'Demo',extra:1,nodes:[terminal('done',{name:'done',status:'succeeded'})]});\n",
+ "source": "import {defineWorkflow,node,action,verification,parallel,condition,loop,human,terminal} from '@devcodex-labs/flowkit/dsl';\nexport default defineWorkflow({id:'demo',version:'1.0.0',name:'Demo',extra:1,nodes:[terminal('done',{name:'done',status:'succeeded'})]});\n",
"options": {}
},
"valid": {
- "source": "import {defineWorkflow,node,action,verification,parallel,condition,loop,human,terminal} from '@devcodex/flowkit/dsl';\nexport default defineWorkflow({id:'demo',version:'1.0.0',name:'Demo',nodes:[terminal('done',{name:'done',status:'succeeded'})]});\n",
+ "source": "import {defineWorkflow,node,action,verification,parallel,condition,loop,human,terminal} from '@devcodex-labs/flowkit/dsl';\nexport default defineWorkflow({id:'demo',version:'1.0.0',name:'Demo',nodes:[terminal('done',{name:'done',status:'succeeded'})]});\n",
"options": {}
}
}
diff --git a/tests/fixtures/errors/FK_C007.json b/tests/fixtures/errors/FK_C007.json
index 207b691..0925cef 100644
--- a/tests/fixtures/errors/FK_C007.json
+++ b/tests/fixtures/errors/FK_C007.json
@@ -2,11 +2,11 @@
"code": "FK_C007",
"kind": "compile",
"invalid": {
- "source": "import {defineWorkflow,node,action,verification,parallel,condition,loop,human,terminal} from '@devcodex/flowkit/dsl';\nexport default defineWorkflow({id:'demo',version:'1.0.0',name:'Demo',nodes:[...[]]});\n",
+ "source": "import {defineWorkflow,node,action,verification,parallel,condition,loop,human,terminal} from '@devcodex-labs/flowkit/dsl';\nexport default defineWorkflow({id:'demo',version:'1.0.0',name:'Demo',nodes:[...[]]});\n",
"options": {}
},
"valid": {
- "source": "import {defineWorkflow,node,action,verification,parallel,condition,loop,human,terminal} from '@devcodex/flowkit/dsl';\nexport default defineWorkflow({id:'demo',version:'1.0.0',name:'Demo',nodes:[terminal('done',{name:'done',status:'succeeded'})]});\n",
+ "source": "import {defineWorkflow,node,action,verification,parallel,condition,loop,human,terminal} from '@devcodex-labs/flowkit/dsl';\nexport default defineWorkflow({id:'demo',version:'1.0.0',name:'Demo',nodes:[terminal('done',{name:'done',status:'succeeded'})]});\n",
"options": {}
}
}
diff --git a/tests/fixtures/errors/FK_C010.json b/tests/fixtures/errors/FK_C010.json
index 7b7f1c7..02bbf6c 100644
--- a/tests/fixtures/errors/FK_C010.json
+++ b/tests/fixtures/errors/FK_C010.json
@@ -2,11 +2,11 @@
"code": "FK_C010",
"kind": "compile",
"invalid": {
- "source": "import {defineWorkflow,node,action,verification,parallel,condition,loop,human,terminal} from '@devcodex/flowkit/dsl';\nexport default defineWorkflow({id:'demo',version:'1.0.0',name:'Demo',nodes:[terminal('Bad',{name:'Done',status:'succeeded'})]});\n",
+ "source": "import {defineWorkflow,node,action,verification,parallel,condition,loop,human,terminal} from '@devcodex-labs/flowkit/dsl';\nexport default defineWorkflow({id:'demo',version:'1.0.0',name:'Demo',nodes:[terminal('Bad',{name:'Done',status:'succeeded'})]});\n",
"options": {}
},
"valid": {
- "source": "import {defineWorkflow,node,action,verification,parallel,condition,loop,human,terminal} from '@devcodex/flowkit/dsl';\nexport default defineWorkflow({id:'demo',version:'1.0.0',name:'Demo',nodes:[terminal('done',{name:'done',status:'succeeded'})]});\n",
+ "source": "import {defineWorkflow,node,action,verification,parallel,condition,loop,human,terminal} from '@devcodex-labs/flowkit/dsl';\nexport default defineWorkflow({id:'demo',version:'1.0.0',name:'Demo',nodes:[terminal('done',{name:'done',status:'succeeded'})]});\n",
"options": {}
}
}
diff --git a/tests/fixtures/errors/FK_C011.json b/tests/fixtures/errors/FK_C011.json
index 72147da..890e05e 100644
--- a/tests/fixtures/errors/FK_C011.json
+++ b/tests/fixtures/errors/FK_C011.json
@@ -2,11 +2,11 @@
"code": "FK_C011",
"kind": "compile",
"invalid": {
- "source": "import {defineWorkflow,node,action,verification,parallel,condition,loop,human,terminal} from '@devcodex/flowkit/dsl';\nexport default defineWorkflow({id:'demo',version:'1.0.0',name:'Demo',nodes:[terminal('done',{name:'done',status:'succeeded'}),terminal('done',{name:'done',status:'succeeded'})]});\n",
+ "source": "import {defineWorkflow,node,action,verification,parallel,condition,loop,human,terminal} from '@devcodex-labs/flowkit/dsl';\nexport default defineWorkflow({id:'demo',version:'1.0.0',name:'Demo',nodes:[terminal('done',{name:'done',status:'succeeded'}),terminal('done',{name:'done',status:'succeeded'})]});\n",
"options": {}
},
"valid": {
- "source": "import {defineWorkflow,node,action,verification,parallel,condition,loop,human,terminal} from '@devcodex/flowkit/dsl';\nexport default defineWorkflow({id:'demo',version:'1.0.0',name:'Demo',nodes:[terminal('done',{name:'done',status:'succeeded'})]});\n",
+ "source": "import {defineWorkflow,node,action,verification,parallel,condition,loop,human,terminal} from '@devcodex-labs/flowkit/dsl';\nexport default defineWorkflow({id:'demo',version:'1.0.0',name:'Demo',nodes:[terminal('done',{name:'done',status:'succeeded'})]});\n",
"options": {}
}
}
diff --git a/tests/fixtures/errors/FK_C012.json b/tests/fixtures/errors/FK_C012.json
index 187efeb..8392e17 100644
--- a/tests/fixtures/errors/FK_C012.json
+++ b/tests/fixtures/errors/FK_C012.json
@@ -2,11 +2,11 @@
"code": "FK_C012",
"kind": "compile",
"invalid": {
- "source": "import {defineWorkflow,node,action,verification,parallel,condition,loop,human,terminal} from '@devcodex/flowkit/dsl';\nexport default defineWorkflow({id:'demo',version:'1.0.0',name:'Demo',nodes:[terminal('done',{name:'bad*/',status:'succeeded'})]});\n",
+ "source": "import {defineWorkflow,node,action,verification,parallel,condition,loop,human,terminal} from '@devcodex-labs/flowkit/dsl';\nexport default defineWorkflow({id:'demo',version:'1.0.0',name:'Demo',nodes:[terminal('done',{name:'bad*/',status:'succeeded'})]});\n",
"options": {}
},
"valid": {
- "source": "import {defineWorkflow,node,action,verification,parallel,condition,loop,human,terminal} from '@devcodex/flowkit/dsl';\nexport default defineWorkflow({id:'demo',version:'1.0.0',name:'Demo',nodes:[terminal('done',{name:'done',status:'succeeded'})]});\n",
+ "source": "import {defineWorkflow,node,action,verification,parallel,condition,loop,human,terminal} from '@devcodex-labs/flowkit/dsl';\nexport default defineWorkflow({id:'demo',version:'1.0.0',name:'Demo',nodes:[terminal('done',{name:'done',status:'succeeded'})]});\n",
"options": {}
}
}
diff --git a/tests/fixtures/errors/FK_C013.json b/tests/fixtures/errors/FK_C013.json
index 2c97fbf..6e929c0 100644
--- a/tests/fixtures/errors/FK_C013.json
+++ b/tests/fixtures/errors/FK_C013.json
@@ -2,11 +2,11 @@
"code": "FK_C013",
"kind": "compile",
"invalid": {
- "source": "import {defineWorkflow,node,action,verification,parallel,condition,loop,human,terminal} from '@devcodex/flowkit/dsl';\nexport default defineWorkflow({id:'demo',version:'1.0.0',name:'Demo',nodes:[terminal('done',{name:'done',status:'succeeded'}),terminal('other',{name:'done',status:'succeeded'})]});\n",
+ "source": "import {defineWorkflow,node,action,verification,parallel,condition,loop,human,terminal} from '@devcodex-labs/flowkit/dsl';\nexport default defineWorkflow({id:'demo',version:'1.0.0',name:'Demo',nodes:[terminal('done',{name:'done',status:'succeeded'}),terminal('other',{name:'done',status:'succeeded'})]});\n",
"options": {}
},
"valid": {
- "source": "import {defineWorkflow,node,action,verification,parallel,condition,loop,human,terminal} from '@devcodex/flowkit/dsl';\nexport default defineWorkflow({id:'demo',version:'1.0.0',name:'Demo',nodes:[terminal('done',{name:'done',status:'succeeded'})]});\n",
+ "source": "import {defineWorkflow,node,action,verification,parallel,condition,loop,human,terminal} from '@devcodex-labs/flowkit/dsl';\nexport default defineWorkflow({id:'demo',version:'1.0.0',name:'Demo',nodes:[terminal('done',{name:'done',status:'succeeded'})]});\n",
"options": {}
}
}
diff --git a/tests/fixtures/errors/FK_C014.json b/tests/fixtures/errors/FK_C014.json
index 2f3adf8..22893c1 100644
--- a/tests/fixtures/errors/FK_C014.json
+++ b/tests/fixtures/errors/FK_C014.json
@@ -2,11 +2,11 @@
"code": "FK_C014",
"kind": "compile",
"invalid": {
- "source": "import {defineWorkflow,node,action,verification,parallel,condition,loop,human,terminal} from '@devcodex/flowkit/dsl';\nexport default defineWorkflow({id:'demo',version:'1.0.0',name:'Demo',nodes:[terminal('done',{name:'Done',type:'agent',status:'succeeded'})]});\n",
+ "source": "import {defineWorkflow,node,action,verification,parallel,condition,loop,human,terminal} from '@devcodex-labs/flowkit/dsl';\nexport default defineWorkflow({id:'demo',version:'1.0.0',name:'Demo',nodes:[terminal('done',{name:'Done',type:'agent',status:'succeeded'})]});\n",
"options": {}
},
"valid": {
- "source": "import {defineWorkflow,node,action,verification,parallel,condition,loop,human,terminal} from '@devcodex/flowkit/dsl';\nexport default defineWorkflow({id:'demo',version:'1.0.0',name:'Demo',nodes:[terminal('done',{name:'done',status:'succeeded'})]});\n",
+ "source": "import {defineWorkflow,node,action,verification,parallel,condition,loop,human,terminal} from '@devcodex-labs/flowkit/dsl';\nexport default defineWorkflow({id:'demo',version:'1.0.0',name:'Demo',nodes:[terminal('done',{name:'done',status:'succeeded'})]});\n",
"options": {}
}
}
diff --git a/tests/fixtures/errors/FK_C015.json b/tests/fixtures/errors/FK_C015.json
index 9244d92..fd0dcdb 100644
--- a/tests/fixtures/errors/FK_C015.json
+++ b/tests/fixtures/errors/FK_C015.json
@@ -2,11 +2,11 @@
"code": "FK_C015",
"kind": "compile",
"invalid": {
- "source": "import {defineWorkflow,node,action,verification,parallel,condition,loop,human,terminal} from '@devcodex/flowkit/dsl';\nexport default defineWorkflow({id:'demo',version:'1.0.0',name:'Demo',nodes:[action('a',{name:'a',action:'save',next:'missing'}),terminal('done',{name:'done',status:'succeeded'})]});\n",
+ "source": "import {defineWorkflow,node,action,verification,parallel,condition,loop,human,terminal} from '@devcodex-labs/flowkit/dsl';\nexport default defineWorkflow({id:'demo',version:'1.0.0',name:'Demo',nodes:[action('a',{name:'a',action:'save',next:'missing'}),terminal('done',{name:'done',status:'succeeded'})]});\n",
"options": {}
},
"valid": {
- "source": "import {defineWorkflow,node,action,verification,parallel,condition,loop,human,terminal} from '@devcodex/flowkit/dsl';\nexport default defineWorkflow({id:'demo',version:'1.0.0',name:'Demo',nodes:[action('a',{name:'a',action:'save',next:'done'}),terminal('done',{name:'done',status:'succeeded'})]});\n",
+ "source": "import {defineWorkflow,node,action,verification,parallel,condition,loop,human,terminal} from '@devcodex-labs/flowkit/dsl';\nexport default defineWorkflow({id:'demo',version:'1.0.0',name:'Demo',nodes:[action('a',{name:'a',action:'save',next:'done'}),terminal('done',{name:'done',status:'succeeded'})]});\n",
"options": {}
}
}
diff --git a/tests/fixtures/errors/FK_C016.json b/tests/fixtures/errors/FK_C016.json
index 75577c2..d940a4f 100644
--- a/tests/fixtures/errors/FK_C016.json
+++ b/tests/fixtures/errors/FK_C016.json
@@ -2,11 +2,11 @@
"code": "FK_C016",
"kind": "compile",
"invalid": {
- "source": "import {defineWorkflow,node,action,verification,parallel,condition,loop,human,terminal} from '@devcodex/flowkit/dsl';\nexport default defineWorkflow({id:'demo',version:'1.0.0',name:'Demo',nodes:[action('a',{name:'a',action:'save'}),terminal('done',{name:'done',status:'succeeded'})]});\n",
+ "source": "import {defineWorkflow,node,action,verification,parallel,condition,loop,human,terminal} from '@devcodex-labs/flowkit/dsl';\nexport default defineWorkflow({id:'demo',version:'1.0.0',name:'Demo',nodes:[action('a',{name:'a',action:'save'}),terminal('done',{name:'done',status:'succeeded'})]});\n",
"options": {}
},
"valid": {
- "source": "import {defineWorkflow,node,action,verification,parallel,condition,loop,human,terminal} from '@devcodex/flowkit/dsl';\nexport default defineWorkflow({id:'demo',version:'1.0.0',name:'Demo',nodes:[action('a',{name:'a',action:'save',next:'done'}),terminal('done',{name:'done',status:'succeeded'})]});\n",
+ "source": "import {defineWorkflow,node,action,verification,parallel,condition,loop,human,terminal} from '@devcodex-labs/flowkit/dsl';\nexport default defineWorkflow({id:'demo',version:'1.0.0',name:'Demo',nodes:[action('a',{name:'a',action:'save',next:'done'}),terminal('done',{name:'done',status:'succeeded'})]});\n",
"options": {}
}
}
diff --git a/tests/fixtures/errors/FK_C017.json b/tests/fixtures/errors/FK_C017.json
index 8ba1cc2..ff1823a 100644
--- a/tests/fixtures/errors/FK_C017.json
+++ b/tests/fixtures/errors/FK_C017.json
@@ -2,11 +2,11 @@
"code": "FK_C017",
"kind": "compile",
"invalid": {
- "source": "import {defineWorkflow,node,action,verification,parallel,condition,loop,human,terminal} from '@devcodex/flowkit/dsl';\nexport default defineWorkflow({id:'demo',version:'1.0.0',name:'Demo',nodes:[terminal('done',{name:'done',status:'succeeded'}),terminal('unused',{name:'unused',status:'succeeded'})]});\n",
+ "source": "import {defineWorkflow,node,action,verification,parallel,condition,loop,human,terminal} from '@devcodex-labs/flowkit/dsl';\nexport default defineWorkflow({id:'demo',version:'1.0.0',name:'Demo',nodes:[terminal('done',{name:'done',status:'succeeded'}),terminal('unused',{name:'unused',status:'succeeded'})]});\n",
"options": {}
},
"valid": {
- "source": "import {defineWorkflow,node,action,verification,parallel,condition,loop,human,terminal} from '@devcodex/flowkit/dsl';\nexport default defineWorkflow({id:'demo',version:'1.0.0',name:'Demo',nodes:[terminal('done',{name:'done',status:'succeeded'})]});\n",
+ "source": "import {defineWorkflow,node,action,verification,parallel,condition,loop,human,terminal} from '@devcodex-labs/flowkit/dsl';\nexport default defineWorkflow({id:'demo',version:'1.0.0',name:'Demo',nodes:[terminal('done',{name:'done',status:'succeeded'})]});\n",
"options": {}
}
}
diff --git a/tests/fixtures/errors/FK_C018.json b/tests/fixtures/errors/FK_C018.json
index 0d9bc49..283946a 100644
--- a/tests/fixtures/errors/FK_C018.json
+++ b/tests/fixtures/errors/FK_C018.json
@@ -2,11 +2,11 @@
"code": "FK_C018",
"kind": "compile",
"invalid": {
- "source": "import {defineWorkflow,node,action,verification,parallel,condition,loop,human,terminal} from '@devcodex/flowkit/dsl';\nexport default defineWorkflow({id:'demo',version:'1.0.0',name:'Demo',nodes:[terminal('done',{name:'Done',status:'succeeded',extra:1})]});\n",
+ "source": "import {defineWorkflow,node,action,verification,parallel,condition,loop,human,terminal} from '@devcodex-labs/flowkit/dsl';\nexport default defineWorkflow({id:'demo',version:'1.0.0',name:'Demo',nodes:[terminal('done',{name:'Done',status:'succeeded',extra:1})]});\n",
"options": {}
},
"valid": {
- "source": "import {defineWorkflow,node,action,verification,parallel,condition,loop,human,terminal} from '@devcodex/flowkit/dsl';\nexport default defineWorkflow({id:'demo',version:'1.0.0',name:'Demo',nodes:[terminal('done',{name:'done',status:'succeeded'})]});\n",
+ "source": "import {defineWorkflow,node,action,verification,parallel,condition,loop,human,terminal} from '@devcodex-labs/flowkit/dsl';\nexport default defineWorkflow({id:'demo',version:'1.0.0',name:'Demo',nodes:[terminal('done',{name:'done',status:'succeeded'})]});\n",
"options": {}
}
}
diff --git a/tests/fixtures/errors/FK_C019.json b/tests/fixtures/errors/FK_C019.json
index 543a9cb..f94c199 100644
--- a/tests/fixtures/errors/FK_C019.json
+++ b/tests/fixtures/errors/FK_C019.json
@@ -2,11 +2,11 @@
"code": "FK_C019",
"kind": "compile",
"invalid": {
- "source": "import {defineWorkflow,node,action,verification,parallel,condition,loop,human,terminal} from '@devcodex/flowkit/dsl';\nexport default defineWorkflow({id:'demo',version:'1.0.0',name:'Demo',nodes:[action('a',{name:'a',action:'save',next:'done',writes:null}),terminal('done',{name:'done',status:'succeeded'})]});\n",
+ "source": "import {defineWorkflow,node,action,verification,parallel,condition,loop,human,terminal} from '@devcodex-labs/flowkit/dsl';\nexport default defineWorkflow({id:'demo',version:'1.0.0',name:'Demo',nodes:[action('a',{name:'a',action:'save',next:'done',writes:null}),terminal('done',{name:'done',status:'succeeded'})]});\n",
"options": {}
},
"valid": {
- "source": "import {defineWorkflow,node,action,verification,parallel,condition,loop,human,terminal} from '@devcodex/flowkit/dsl';\nexport default defineWorkflow({id:'demo',version:'1.0.0',name:'Demo',nodes:[action('a',{name:'a',action:'save',next:'done',writes:[]}),terminal('done',{name:'done',status:'succeeded'})]});\n",
+ "source": "import {defineWorkflow,node,action,verification,parallel,condition,loop,human,terminal} from '@devcodex-labs/flowkit/dsl';\nexport default defineWorkflow({id:'demo',version:'1.0.0',name:'Demo',nodes:[action('a',{name:'a',action:'save',next:'done',writes:[]}),terminal('done',{name:'done',status:'succeeded'})]});\n",
"options": {}
}
}
diff --git a/tests/fixtures/errors/FK_C020.json b/tests/fixtures/errors/FK_C020.json
index e26941c..7087f00 100644
--- a/tests/fixtures/errors/FK_C020.json
+++ b/tests/fixtures/errors/FK_C020.json
@@ -2,11 +2,11 @@
"code": "FK_C020",
"kind": "compile",
"invalid": {
- "source": "import {defineWorkflow,node,action,verification,parallel,condition,loop,human,terminal} from '@devcodex/flowkit/dsl';\nexport default defineWorkflow({id:'demo',version:'1.0.0',name:'Demo',nodes:[parallel('p',{name:'P',branches:['a'],join:{strategy:'any',next:'done'}}),action('a',{name:'a',action:'save'}),action('b',{name:'b',action:'save'}),terminal('done',{name:'done',status:'succeeded'})]});\n",
+ "source": "import {defineWorkflow,node,action,verification,parallel,condition,loop,human,terminal} from '@devcodex-labs/flowkit/dsl';\nexport default defineWorkflow({id:'demo',version:'1.0.0',name:'Demo',nodes:[parallel('p',{name:'P',branches:['a'],join:{strategy:'any',next:'done'}}),action('a',{name:'a',action:'save'}),action('b',{name:'b',action:'save'}),terminal('done',{name:'done',status:'succeeded'})]});\n",
"options": {}
},
"valid": {
- "source": "import {defineWorkflow,node,action,verification,parallel,condition,loop,human,terminal} from '@devcodex/flowkit/dsl';\nexport default defineWorkflow({id:'demo',version:'1.0.0',name:'Demo',nodes:[parallel('p',{name:'P',branches:['a','b'],join:{strategy:'any',next:'done'}}),action('a',{name:'a',action:'save'}),action('b',{name:'b',action:'save'}),terminal('done',{name:'done',status:'succeeded'})]});\n",
+ "source": "import {defineWorkflow,node,action,verification,parallel,condition,loop,human,terminal} from '@devcodex-labs/flowkit/dsl';\nexport default defineWorkflow({id:'demo',version:'1.0.0',name:'Demo',nodes:[parallel('p',{name:'P',branches:['a','b'],join:{strategy:'any',next:'done'}}),action('a',{name:'a',action:'save'}),action('b',{name:'b',action:'save'}),terminal('done',{name:'done',status:'succeeded'})]});\n",
"options": {}
}
}
diff --git a/tests/fixtures/errors/FK_C021.json b/tests/fixtures/errors/FK_C021.json
index efd7793..7549cad 100644
--- a/tests/fixtures/errors/FK_C021.json
+++ b/tests/fixtures/errors/FK_C021.json
@@ -2,11 +2,11 @@
"code": "FK_C021",
"kind": "compile",
"invalid": {
- "source": "import {defineWorkflow,node,action,verification,parallel,condition,loop,human,terminal} from '@devcodex/flowkit/dsl';\nexport default defineWorkflow({id:'demo',version:'1.0.0',name:'Demo',nodes:[parallel('p',{name:'P',branches:['a','b'],join:{strategy:'any',next:'done'}}),action('a',{name:'a',action:'save',next:'done'}),action('b',{name:'b',action:'save'}),terminal('done',{name:'done',status:'succeeded'})]});\n",
+ "source": "import {defineWorkflow,node,action,verification,parallel,condition,loop,human,terminal} from '@devcodex-labs/flowkit/dsl';\nexport default defineWorkflow({id:'demo',version:'1.0.0',name:'Demo',nodes:[parallel('p',{name:'P',branches:['a','b'],join:{strategy:'any',next:'done'}}),action('a',{name:'a',action:'save',next:'done'}),action('b',{name:'b',action:'save'}),terminal('done',{name:'done',status:'succeeded'})]});\n",
"options": {}
},
"valid": {
- "source": "import {defineWorkflow,node,action,verification,parallel,condition,loop,human,terminal} from '@devcodex/flowkit/dsl';\nexport default defineWorkflow({id:'demo',version:'1.0.0',name:'Demo',nodes:[parallel('p',{name:'P',branches:['a','b'],join:{strategy:'any',next:'done'}}),action('a',{name:'a',action:'save'}),action('b',{name:'b',action:'save'}),terminal('done',{name:'done',status:'succeeded'})]});\n",
+ "source": "import {defineWorkflow,node,action,verification,parallel,condition,loop,human,terminal} from '@devcodex-labs/flowkit/dsl';\nexport default defineWorkflow({id:'demo',version:'1.0.0',name:'Demo',nodes:[parallel('p',{name:'P',branches:['a','b'],join:{strategy:'any',next:'done'}}),action('a',{name:'a',action:'save'}),action('b',{name:'b',action:'save'}),terminal('done',{name:'done',status:'succeeded'})]});\n",
"options": {}
}
}
diff --git a/tests/fixtures/errors/FK_C022.json b/tests/fixtures/errors/FK_C022.json
index b50ea5a..4032e98 100644
--- a/tests/fixtures/errors/FK_C022.json
+++ b/tests/fixtures/errors/FK_C022.json
@@ -2,11 +2,11 @@
"code": "FK_C022",
"kind": "compile",
"invalid": {
- "source": "import {defineWorkflow,node,action,verification,parallel,condition,loop,human,terminal} from '@devcodex/flowkit/dsl';\nexport default defineWorkflow({id:'demo',version:'1.0.0',name:'Demo',nodes:[parallel('p',{name:'P',branches:['a','b'],join:{strategy:'any',next:'done'}}),terminal('a',{name:'a',status:'succeeded'}),action('b',{name:'b',action:'save'}),terminal('done',{name:'done',status:'succeeded'})]});\n",
+ "source": "import {defineWorkflow,node,action,verification,parallel,condition,loop,human,terminal} from '@devcodex-labs/flowkit/dsl';\nexport default defineWorkflow({id:'demo',version:'1.0.0',name:'Demo',nodes:[parallel('p',{name:'P',branches:['a','b'],join:{strategy:'any',next:'done'}}),terminal('a',{name:'a',status:'succeeded'}),action('b',{name:'b',action:'save'}),terminal('done',{name:'done',status:'succeeded'})]});\n",
"options": {}
},
"valid": {
- "source": "import {defineWorkflow,node,action,verification,parallel,condition,loop,human,terminal} from '@devcodex/flowkit/dsl';\nexport default defineWorkflow({id:'demo',version:'1.0.0',name:'Demo',nodes:[parallel('p',{name:'P',branches:['a','b'],join:{strategy:'any',next:'done'}}),action('a',{name:'a',action:'save'}),action('b',{name:'b',action:'save'}),terminal('done',{name:'done',status:'succeeded'})]});\n",
+ "source": "import {defineWorkflow,node,action,verification,parallel,condition,loop,human,terminal} from '@devcodex-labs/flowkit/dsl';\nexport default defineWorkflow({id:'demo',version:'1.0.0',name:'Demo',nodes:[parallel('p',{name:'P',branches:['a','b'],join:{strategy:'any',next:'done'}}),action('a',{name:'a',action:'save'}),action('b',{name:'b',action:'save'}),terminal('done',{name:'done',status:'succeeded'})]});\n",
"options": {}
}
}
diff --git a/tests/fixtures/errors/FK_C023.json b/tests/fixtures/errors/FK_C023.json
index 5f3fc7d..efb9934 100644
--- a/tests/fixtures/errors/FK_C023.json
+++ b/tests/fixtures/errors/FK_C023.json
@@ -2,11 +2,11 @@
"code": "FK_C023",
"kind": "compile",
"invalid": {
- "source": "import {defineWorkflow,node,action,verification,parallel,condition,loop,human,terminal} from '@devcodex/flowkit/dsl';\nexport default defineWorkflow({id:'demo',version:'1.0.0',name:'Demo',nodes:[parallel('p',{name:'P',branches:['a','b'],join:{strategy:'all',next:'done'}}),action('a',{name:'a',action:'save'}),action('b',{name:'b',action:'save'}),terminal('done',{name:'done',status:'succeeded'})]});\n",
+ "source": "import {defineWorkflow,node,action,verification,parallel,condition,loop,human,terminal} from '@devcodex-labs/flowkit/dsl';\nexport default defineWorkflow({id:'demo',version:'1.0.0',name:'Demo',nodes:[parallel('p',{name:'P',branches:['a','b'],join:{strategy:'all',next:'done'}}),action('a',{name:'a',action:'save'}),action('b',{name:'b',action:'save'}),terminal('done',{name:'done',status:'succeeded'})]});\n",
"options": {}
},
"valid": {
- "source": "import {defineWorkflow,node,action,verification,parallel,condition,loop,human,terminal} from '@devcodex/flowkit/dsl';\nexport default defineWorkflow({id:'demo',version:'1.0.0',name:'Demo',nodes:[parallel('p',{name:'P',branches:['a','b'],join:{strategy:'any',next:'done'}}),action('a',{name:'a',action:'save'}),action('b',{name:'b',action:'save'}),terminal('done',{name:'done',status:'succeeded'})]});\n",
+ "source": "import {defineWorkflow,node,action,verification,parallel,condition,loop,human,terminal} from '@devcodex-labs/flowkit/dsl';\nexport default defineWorkflow({id:'demo',version:'1.0.0',name:'Demo',nodes:[parallel('p',{name:'P',branches:['a','b'],join:{strategy:'any',next:'done'}}),action('a',{name:'a',action:'save'}),action('b',{name:'b',action:'save'}),terminal('done',{name:'done',status:'succeeded'})]});\n",
"options": {}
}
}
diff --git a/tests/fixtures/errors/FK_C024.json b/tests/fixtures/errors/FK_C024.json
index 7efe78a..9b8591f 100644
--- a/tests/fixtures/errors/FK_C024.json
+++ b/tests/fixtures/errors/FK_C024.json
@@ -2,11 +2,11 @@
"code": "FK_C024",
"kind": "compile",
"invalid": {
- "source": "import {defineWorkflow,node,action,verification,parallel,condition,loop,human,terminal} from '@devcodex/flowkit/dsl';\nexport default defineWorkflow({id:'demo',version:'1.0.0',name:'Demo',nodes:[parallel('p',{name:'P',branches:['a','b'],join:{strategy:'any',next:'a'}}),action('a',{name:'a',action:'save'}),action('b',{name:'b',action:'save'}),terminal('done',{name:'done',status:'succeeded'})]});\n",
+ "source": "import {defineWorkflow,node,action,verification,parallel,condition,loop,human,terminal} from '@devcodex-labs/flowkit/dsl';\nexport default defineWorkflow({id:'demo',version:'1.0.0',name:'Demo',nodes:[parallel('p',{name:'P',branches:['a','b'],join:{strategy:'any',next:'a'}}),action('a',{name:'a',action:'save'}),action('b',{name:'b',action:'save'}),terminal('done',{name:'done',status:'succeeded'})]});\n",
"options": {}
},
"valid": {
- "source": "import {defineWorkflow,node,action,verification,parallel,condition,loop,human,terminal} from '@devcodex/flowkit/dsl';\nexport default defineWorkflow({id:'demo',version:'1.0.0',name:'Demo',nodes:[parallel('p',{name:'P',branches:['a','b'],join:{strategy:'any',next:'done'}}),action('a',{name:'a',action:'save'}),action('b',{name:'b',action:'save'}),terminal('done',{name:'done',status:'succeeded'})]});\n",
+ "source": "import {defineWorkflow,node,action,verification,parallel,condition,loop,human,terminal} from '@devcodex-labs/flowkit/dsl';\nexport default defineWorkflow({id:'demo',version:'1.0.0',name:'Demo',nodes:[parallel('p',{name:'P',branches:['a','b'],join:{strategy:'any',next:'done'}}),action('a',{name:'a',action:'save'}),action('b',{name:'b',action:'save'}),terminal('done',{name:'done',status:'succeeded'})]});\n",
"options": {}
}
}
diff --git a/tests/fixtures/errors/FK_C025.json b/tests/fixtures/errors/FK_C025.json
index 0d38467..bd18740 100644
--- a/tests/fixtures/errors/FK_C025.json
+++ b/tests/fixtures/errors/FK_C025.json
@@ -2,11 +2,11 @@
"code": "FK_C025",
"kind": "compile",
"invalid": {
- "source": "import {defineWorkflow,node,action,verification,parallel,condition,loop,human,terminal} from '@devcodex/flowkit/dsl';\nexport default defineWorkflow({id:'demo',version:'1.0.0',name:'Demo',nodes:[parallel('p',{name:'P',branches:['a','b'],join:{strategy:'any',next:'done'}}),verification('a',{name:'a',verifier:'check',onSuccess:'done',onFailure:'done'}),action('b',{name:'b',action:'save'}),terminal('done',{name:'done',status:'succeeded'})]});\n",
+ "source": "import {defineWorkflow,node,action,verification,parallel,condition,loop,human,terminal} from '@devcodex-labs/flowkit/dsl';\nexport default defineWorkflow({id:'demo',version:'1.0.0',name:'Demo',nodes:[parallel('p',{name:'P',branches:['a','b'],join:{strategy:'any',next:'done'}}),verification('a',{name:'a',verifier:'check',onSuccess:'done',onFailure:'done'}),action('b',{name:'b',action:'save'}),terminal('done',{name:'done',status:'succeeded'})]});\n",
"options": {}
},
"valid": {
- "source": "import {defineWorkflow,node,action,verification,parallel,condition,loop,human,terminal} from '@devcodex/flowkit/dsl';\nexport default defineWorkflow({id:'demo',version:'1.0.0',name:'Demo',nodes:[parallel('p',{name:'P',branches:['a','b'],join:{strategy:'any',next:'done'}}),verification('a',{name:'a',verifier:'check'}),action('b',{name:'b',action:'save'}),terminal('done',{name:'done',status:'succeeded'})]});\n",
+ "source": "import {defineWorkflow,node,action,verification,parallel,condition,loop,human,terminal} from '@devcodex-labs/flowkit/dsl';\nexport default defineWorkflow({id:'demo',version:'1.0.0',name:'Demo',nodes:[parallel('p',{name:'P',branches:['a','b'],join:{strategy:'any',next:'done'}}),verification('a',{name:'a',verifier:'check'}),action('b',{name:'b',action:'save'}),terminal('done',{name:'done',status:'succeeded'})]});\n",
"options": {}
}
}
diff --git a/tests/fixtures/errors/FK_C026.json b/tests/fixtures/errors/FK_C026.json
index b625b2f..cff334f 100644
--- a/tests/fixtures/errors/FK_C026.json
+++ b/tests/fixtures/errors/FK_C026.json
@@ -2,11 +2,11 @@
"code": "FK_C026",
"kind": "compile",
"invalid": {
- "source": "import {defineWorkflow,node,action,verification,parallel,condition,loop,human,terminal} from '@devcodex/flowkit/dsl';\nexport default defineWorkflow({id:'demo',version:'1.0.0',name:'Demo',nodes:[parallel('p',{name:'P',branches:['a','b'],join:{strategy:'any',next:'done'}}),action('a',{name:'a',action:'save',writes:['x']}),action('b',{name:'b',action:'save',writes:['x']}),terminal('done',{name:'done',status:'succeeded'})]});\n",
+ "source": "import {defineWorkflow,node,action,verification,parallel,condition,loop,human,terminal} from '@devcodex-labs/flowkit/dsl';\nexport default defineWorkflow({id:'demo',version:'1.0.0',name:'Demo',nodes:[parallel('p',{name:'P',branches:['a','b'],join:{strategy:'any',next:'done'}}),action('a',{name:'a',action:'save',writes:['x']}),action('b',{name:'b',action:'save',writes:['x']}),terminal('done',{name:'done',status:'succeeded'})]});\n",
"options": {}
},
"valid": {
- "source": "import {defineWorkflow,node,action,verification,parallel,condition,loop,human,terminal} from '@devcodex/flowkit/dsl';\nexport default defineWorkflow({id:'demo',version:'1.0.0',name:'Demo',nodes:[parallel('p',{name:'P',branches:['a','b'],join:{strategy:'any',next:'done'}}),action('a',{name:'a',action:'save',writes:['x']}),action('b',{name:'b',action:'save',writes:['y']}),terminal('done',{name:'done',status:'succeeded'})]});\n",
+ "source": "import {defineWorkflow,node,action,verification,parallel,condition,loop,human,terminal} from '@devcodex-labs/flowkit/dsl';\nexport default defineWorkflow({id:'demo',version:'1.0.0',name:'Demo',nodes:[parallel('p',{name:'P',branches:['a','b'],join:{strategy:'any',next:'done'}}),action('a',{name:'a',action:'save',writes:['x']}),action('b',{name:'b',action:'save',writes:['y']}),terminal('done',{name:'done',status:'succeeded'})]});\n",
"options": {}
}
}
diff --git a/tests/fixtures/errors/FK_C030.json b/tests/fixtures/errors/FK_C030.json
index ced8213..58aa2f8 100644
--- a/tests/fixtures/errors/FK_C030.json
+++ b/tests/fixtures/errors/FK_C030.json
@@ -2,11 +2,11 @@
"code": "FK_C030",
"kind": "compile",
"invalid": {
- "source": "import {defineWorkflow,node,action,verification,parallel,condition,loop,human,terminal} from '@devcodex/flowkit/dsl';\nexport default defineWorkflow({id:'demo',version:'1.0.0',name:'Demo',nodes:[condition('c',{name:'C',branches:[]}),terminal('done',{name:'done',status:'succeeded'})]});\n",
+ "source": "import {defineWorkflow,node,action,verification,parallel,condition,loop,human,terminal} from '@devcodex-labs/flowkit/dsl';\nexport default defineWorkflow({id:'demo',version:'1.0.0',name:'Demo',nodes:[condition('c',{name:'C',branches:[]}),terminal('done',{name:'done',status:'succeeded'})]});\n",
"options": {}
},
"valid": {
- "source": "import {defineWorkflow,node,action,verification,parallel,condition,loop,human,terminal} from '@devcodex/flowkit/dsl';\nexport default defineWorkflow({id:'demo',version:'1.0.0',name:'Demo',nodes:[condition('c',{name:'C',branches:[{when:\"flag\",next:'done'},{when:'true',next:'done'}]}),terminal('done',{name:'done',status:'succeeded'})]});\n",
+ "source": "import {defineWorkflow,node,action,verification,parallel,condition,loop,human,terminal} from '@devcodex-labs/flowkit/dsl';\nexport default defineWorkflow({id:'demo',version:'1.0.0',name:'Demo',nodes:[condition('c',{name:'C',branches:[{when:\"flag\",next:'done'},{when:'true',next:'done'}]}),terminal('done',{name:'done',status:'succeeded'})]});\n",
"options": {}
}
}
diff --git a/tests/fixtures/errors/FK_C031.json b/tests/fixtures/errors/FK_C031.json
index ab9f189..3440392 100644
--- a/tests/fixtures/errors/FK_C031.json
+++ b/tests/fixtures/errors/FK_C031.json
@@ -2,11 +2,11 @@
"code": "FK_C031",
"kind": "compile",
"invalid": {
- "source": "import {defineWorkflow,node,action,verification,parallel,condition,loop,human,terminal} from '@devcodex/flowkit/dsl';\nexport default defineWorkflow({id:'demo',version:'1.0.0',name:'Demo',nodes:[condition('c',{name:'C',branches:[{when:'flag',next:'done'}]}),terminal('done',{name:'done',status:'succeeded'})]});\n",
+ "source": "import {defineWorkflow,node,action,verification,parallel,condition,loop,human,terminal} from '@devcodex-labs/flowkit/dsl';\nexport default defineWorkflow({id:'demo',version:'1.0.0',name:'Demo',nodes:[condition('c',{name:'C',branches:[{when:'flag',next:'done'}]}),terminal('done',{name:'done',status:'succeeded'})]});\n",
"options": {}
},
"valid": {
- "source": "import {defineWorkflow,node,action,verification,parallel,condition,loop,human,terminal} from '@devcodex/flowkit/dsl';\nexport default defineWorkflow({id:'demo',version:'1.0.0',name:'Demo',nodes:[condition('c',{name:'C',branches:[{when:\"flag\",next:'done'},{when:'true',next:'done'}]}),terminal('done',{name:'done',status:'succeeded'})]});\n",
+ "source": "import {defineWorkflow,node,action,verification,parallel,condition,loop,human,terminal} from '@devcodex-labs/flowkit/dsl';\nexport default defineWorkflow({id:'demo',version:'1.0.0',name:'Demo',nodes:[condition('c',{name:'C',branches:[{when:\"flag\",next:'done'},{when:'true',next:'done'}]}),terminal('done',{name:'done',status:'succeeded'})]});\n",
"options": {}
}
}
diff --git a/tests/fixtures/errors/FK_C032.json b/tests/fixtures/errors/FK_C032.json
index b2e3067..a0652eb 100644
--- a/tests/fixtures/errors/FK_C032.json
+++ b/tests/fixtures/errors/FK_C032.json
@@ -2,11 +2,11 @@
"code": "FK_C032",
"kind": "compile",
"invalid": {
- "source": "import {defineWorkflow,node,action,verification,parallel,condition,loop,human,terminal} from '@devcodex/flowkit/dsl';\nexport default defineWorkflow({id:'demo',version:'1.0.0',name:'Demo',nodes:[condition('c',{name:'C',branches:[{when:\"flag &&\",next:'done'},{when:'true',next:'done'}]}),terminal('done',{name:'done',status:'succeeded'})]});\n",
+ "source": "import {defineWorkflow,node,action,verification,parallel,condition,loop,human,terminal} from '@devcodex-labs/flowkit/dsl';\nexport default defineWorkflow({id:'demo',version:'1.0.0',name:'Demo',nodes:[condition('c',{name:'C',branches:[{when:\"flag &&\",next:'done'},{when:'true',next:'done'}]}),terminal('done',{name:'done',status:'succeeded'})]});\n",
"options": {}
},
"valid": {
- "source": "import {defineWorkflow,node,action,verification,parallel,condition,loop,human,terminal} from '@devcodex/flowkit/dsl';\nexport default defineWorkflow({id:'demo',version:'1.0.0',name:'Demo',nodes:[condition('c',{name:'C',branches:[{when:\"flag\",next:'done'},{when:'true',next:'done'}]}),terminal('done',{name:'done',status:'succeeded'})]});\n",
+ "source": "import {defineWorkflow,node,action,verification,parallel,condition,loop,human,terminal} from '@devcodex-labs/flowkit/dsl';\nexport default defineWorkflow({id:'demo',version:'1.0.0',name:'Demo',nodes:[condition('c',{name:'C',branches:[{when:\"flag\",next:'done'},{when:'true',next:'done'}]}),terminal('done',{name:'done',status:'succeeded'})]});\n",
"options": {}
}
}
diff --git a/tests/fixtures/errors/FK_C033.json b/tests/fixtures/errors/FK_C033.json
index 29205a2..284e7eb 100644
--- a/tests/fixtures/errors/FK_C033.json
+++ b/tests/fixtures/errors/FK_C033.json
@@ -2,11 +2,11 @@
"code": "FK_C033",
"kind": "compile",
"invalid": {
- "source": "import {defineWorkflow,node,action,verification,parallel,condition,loop,human,terminal} from '@devcodex/flowkit/dsl';\nexport default defineWorkflow({id:'demo',version:'1.0.0',name:'Demo',nodes:[condition('c',{name:'C',branches:[{when:\"fn()\",next:'done'},{when:'true',next:'done'}]}),terminal('done',{name:'done',status:'succeeded'})]});\n",
+ "source": "import {defineWorkflow,node,action,verification,parallel,condition,loop,human,terminal} from '@devcodex-labs/flowkit/dsl';\nexport default defineWorkflow({id:'demo',version:'1.0.0',name:'Demo',nodes:[condition('c',{name:'C',branches:[{when:\"fn()\",next:'done'},{when:'true',next:'done'}]}),terminal('done',{name:'done',status:'succeeded'})]});\n",
"options": {}
},
"valid": {
- "source": "import {defineWorkflow,node,action,verification,parallel,condition,loop,human,terminal} from '@devcodex/flowkit/dsl';\nexport default defineWorkflow({id:'demo',version:'1.0.0',name:'Demo',nodes:[condition('c',{name:'C',branches:[{when:\"flag\",next:'done'},{when:'true',next:'done'}]}),terminal('done',{name:'done',status:'succeeded'})]});\n",
+ "source": "import {defineWorkflow,node,action,verification,parallel,condition,loop,human,terminal} from '@devcodex-labs/flowkit/dsl';\nexport default defineWorkflow({id:'demo',version:'1.0.0',name:'Demo',nodes:[condition('c',{name:'C',branches:[{when:\"flag\",next:'done'},{when:'true',next:'done'}]}),terminal('done',{name:'done',status:'succeeded'})]});\n",
"options": {}
}
}
diff --git a/tests/fixtures/errors/FK_C034.json b/tests/fixtures/errors/FK_C034.json
index 375a4c9..9f94c7a 100644
--- a/tests/fixtures/errors/FK_C034.json
+++ b/tests/fixtures/errors/FK_C034.json
@@ -2,11 +2,11 @@
"code": "FK_C034",
"kind": "compile",
"invalid": {
- "source": "import {defineWorkflow,node,action,verification,parallel,condition,loop,human,terminal} from '@devcodex/flowkit/dsl';\nexport default defineWorkflow({id:'demo',version:'1.0.0',name:'Demo',nodes:[condition('c',{name:'C',branches:[{when:\"true\\n\",next:'done'},{when:'true',next:'done'}]}),terminal('done',{name:'done',status:'succeeded'})]});\n",
+ "source": "import {defineWorkflow,node,action,verification,parallel,condition,loop,human,terminal} from '@devcodex-labs/flowkit/dsl';\nexport default defineWorkflow({id:'demo',version:'1.0.0',name:'Demo',nodes:[condition('c',{name:'C',branches:[{when:\"true\\n\",next:'done'},{when:'true',next:'done'}]}),terminal('done',{name:'done',status:'succeeded'})]});\n",
"options": {}
},
"valid": {
- "source": "import {defineWorkflow,node,action,verification,parallel,condition,loop,human,terminal} from '@devcodex/flowkit/dsl';\nexport default defineWorkflow({id:'demo',version:'1.0.0',name:'Demo',nodes:[condition('c',{name:'C',branches:[{when:\"flag\",next:'done'},{when:'true',next:'done'}]}),terminal('done',{name:'done',status:'succeeded'})]});\n",
+ "source": "import {defineWorkflow,node,action,verification,parallel,condition,loop,human,terminal} from '@devcodex-labs/flowkit/dsl';\nexport default defineWorkflow({id:'demo',version:'1.0.0',name:'Demo',nodes:[condition('c',{name:'C',branches:[{when:\"flag\",next:'done'},{when:'true',next:'done'}]}),terminal('done',{name:'done',status:'succeeded'})]});\n",
"options": {}
}
}
diff --git a/tests/fixtures/errors/FK_C040.json b/tests/fixtures/errors/FK_C040.json
index 75baf6d..22e8d8c 100644
--- a/tests/fixtures/errors/FK_C040.json
+++ b/tests/fixtures/errors/FK_C040.json
@@ -2,11 +2,11 @@
"code": "FK_C040",
"kind": "compile",
"invalid": {
- "source": "import {defineWorkflow,node,action,verification,parallel,condition,loop,human,terminal} from '@devcodex/flowkit/dsl';\nexport default defineWorkflow({id:'demo',version:'1.0.0',name:'Demo',nodes:[loop('l',{name:'L',maxIterations:0,body:'v',onSuccess:'done',onMaxExceeded:'failed'}),verification('v',{name:'V',verifier:'check',onSuccess:'l',onFailure:'repair'}),action('repair',{name:'repair',action:'save',next:'v'}),terminal('done',{name:'done',status:'succeeded'}),terminal('failed',{name:'failed',status:'succeeded'})]});\n",
+ "source": "import {defineWorkflow,node,action,verification,parallel,condition,loop,human,terminal} from '@devcodex-labs/flowkit/dsl';\nexport default defineWorkflow({id:'demo',version:'1.0.0',name:'Demo',nodes:[loop('l',{name:'L',maxIterations:0,body:'v',onSuccess:'done',onMaxExceeded:'failed'}),verification('v',{name:'V',verifier:'check',onSuccess:'l',onFailure:'repair'}),action('repair',{name:'repair',action:'save',next:'v'}),terminal('done',{name:'done',status:'succeeded'}),terminal('failed',{name:'failed',status:'succeeded'})]});\n",
"options": {}
},
"valid": {
- "source": "import {defineWorkflow,node,action,verification,parallel,condition,loop,human,terminal} from '@devcodex/flowkit/dsl';\nexport default defineWorkflow({id:'demo',version:'1.0.0',name:'Demo',nodes:[loop('l',{name:'L',maxIterations:3,body:'v',onSuccess:'done',onMaxExceeded:'failed'}),verification('v',{name:'V',verifier:'check',onSuccess:'l',onFailure:'repair'}),action('repair',{name:'repair',action:'save',next:'v'}),terminal('done',{name:'done',status:'succeeded'}),terminal('failed',{name:'failed',status:'succeeded'})]});\n",
+ "source": "import {defineWorkflow,node,action,verification,parallel,condition,loop,human,terminal} from '@devcodex-labs/flowkit/dsl';\nexport default defineWorkflow({id:'demo',version:'1.0.0',name:'Demo',nodes:[loop('l',{name:'L',maxIterations:3,body:'v',onSuccess:'done',onMaxExceeded:'failed'}),verification('v',{name:'V',verifier:'check',onSuccess:'l',onFailure:'repair'}),action('repair',{name:'repair',action:'save',next:'v'}),terminal('done',{name:'done',status:'succeeded'}),terminal('failed',{name:'failed',status:'succeeded'})]});\n",
"options": {}
}
}
diff --git a/tests/fixtures/errors/FK_C041.json b/tests/fixtures/errors/FK_C041.json
index 2f72db9..9a1f8df 100644
--- a/tests/fixtures/errors/FK_C041.json
+++ b/tests/fixtures/errors/FK_C041.json
@@ -2,11 +2,11 @@
"code": "FK_C041",
"kind": "compile",
"invalid": {
- "source": "import {defineWorkflow,node,action,verification,parallel,condition,loop,human,terminal} from '@devcodex/flowkit/dsl';\nexport default defineWorkflow({id:'demo',version:'1.0.0',name:'Demo',nodes:[loop('l',{name:'L',maxIterations:3,body:'v',onSuccess:'done',onMaxExceeded:'failed'}),action('v',{name:'v',action:'save',next:'repair'}),action('repair',{name:'repair',action:'save',next:'v'}),terminal('done',{name:'done',status:'succeeded'}),terminal('failed',{name:'failed',status:'succeeded'})]});\n",
+ "source": "import {defineWorkflow,node,action,verification,parallel,condition,loop,human,terminal} from '@devcodex-labs/flowkit/dsl';\nexport default defineWorkflow({id:'demo',version:'1.0.0',name:'Demo',nodes:[loop('l',{name:'L',maxIterations:3,body:'v',onSuccess:'done',onMaxExceeded:'failed'}),action('v',{name:'v',action:'save',next:'repair'}),action('repair',{name:'repair',action:'save',next:'v'}),terminal('done',{name:'done',status:'succeeded'}),terminal('failed',{name:'failed',status:'succeeded'})]});\n",
"options": {}
},
"valid": {
- "source": "import {defineWorkflow,node,action,verification,parallel,condition,loop,human,terminal} from '@devcodex/flowkit/dsl';\nexport default defineWorkflow({id:'demo',version:'1.0.0',name:'Demo',nodes:[loop('l',{name:'L',maxIterations:3,body:'v',onSuccess:'done',onMaxExceeded:'failed'}),verification('v',{name:'V',verifier:'check',onSuccess:'l',onFailure:'repair'}),action('repair',{name:'repair',action:'save',next:'v'}),terminal('done',{name:'done',status:'succeeded'}),terminal('failed',{name:'failed',status:'succeeded'})]});\n",
+ "source": "import {defineWorkflow,node,action,verification,parallel,condition,loop,human,terminal} from '@devcodex-labs/flowkit/dsl';\nexport default defineWorkflow({id:'demo',version:'1.0.0',name:'Demo',nodes:[loop('l',{name:'L',maxIterations:3,body:'v',onSuccess:'done',onMaxExceeded:'failed'}),verification('v',{name:'V',verifier:'check',onSuccess:'l',onFailure:'repair'}),action('repair',{name:'repair',action:'save',next:'v'}),terminal('done',{name:'done',status:'succeeded'}),terminal('failed',{name:'failed',status:'succeeded'})]});\n",
"options": {}
}
}
diff --git a/tests/fixtures/errors/FK_C042.json b/tests/fixtures/errors/FK_C042.json
index 334bb91..dc18df1 100644
--- a/tests/fixtures/errors/FK_C042.json
+++ b/tests/fixtures/errors/FK_C042.json
@@ -2,11 +2,11 @@
"code": "FK_C042",
"kind": "compile",
"invalid": {
- "source": "import {defineWorkflow,node,action,verification,parallel,condition,loop,human,terminal} from '@devcodex/flowkit/dsl';\nexport default defineWorkflow({id:'demo',version:'1.0.0',name:'Demo',nodes:[loop('l',{name:'L',maxIterations:3,body:'v',onSuccess:'done',onMaxExceeded:'failed'}),verification('v',{name:'V',verifier:'check',onSuccess:'l',onFailure:'repair'}),action('repair',{name:'repair',action:'save',next:'done'}),terminal('done',{name:'done',status:'succeeded'}),terminal('failed',{name:'failed',status:'succeeded'})]});\n",
+ "source": "import {defineWorkflow,node,action,verification,parallel,condition,loop,human,terminal} from '@devcodex-labs/flowkit/dsl';\nexport default defineWorkflow({id:'demo',version:'1.0.0',name:'Demo',nodes:[loop('l',{name:'L',maxIterations:3,body:'v',onSuccess:'done',onMaxExceeded:'failed'}),verification('v',{name:'V',verifier:'check',onSuccess:'l',onFailure:'repair'}),action('repair',{name:'repair',action:'save',next:'done'}),terminal('done',{name:'done',status:'succeeded'}),terminal('failed',{name:'failed',status:'succeeded'})]});\n",
"options": {}
},
"valid": {
- "source": "import {defineWorkflow,node,action,verification,parallel,condition,loop,human,terminal} from '@devcodex/flowkit/dsl';\nexport default defineWorkflow({id:'demo',version:'1.0.0',name:'Demo',nodes:[loop('l',{name:'L',maxIterations:3,body:'v',onSuccess:'done',onMaxExceeded:'failed'}),verification('v',{name:'V',verifier:'check',onSuccess:'l',onFailure:'repair'}),action('repair',{name:'repair',action:'save',next:'v'}),terminal('done',{name:'done',status:'succeeded'}),terminal('failed',{name:'failed',status:'succeeded'})]});\n",
+ "source": "import {defineWorkflow,node,action,verification,parallel,condition,loop,human,terminal} from '@devcodex-labs/flowkit/dsl';\nexport default defineWorkflow({id:'demo',version:'1.0.0',name:'Demo',nodes:[loop('l',{name:'L',maxIterations:3,body:'v',onSuccess:'done',onMaxExceeded:'failed'}),verification('v',{name:'V',verifier:'check',onSuccess:'l',onFailure:'repair'}),action('repair',{name:'repair',action:'save',next:'v'}),terminal('done',{name:'done',status:'succeeded'}),terminal('failed',{name:'failed',status:'succeeded'})]});\n",
"options": {}
}
}
diff --git a/tests/fixtures/errors/FK_C043.json b/tests/fixtures/errors/FK_C043.json
index 582a475..4e1a19b 100644
--- a/tests/fixtures/errors/FK_C043.json
+++ b/tests/fixtures/errors/FK_C043.json
@@ -2,11 +2,11 @@
"code": "FK_C043",
"kind": "compile",
"invalid": {
- "source": "import {defineWorkflow,node,action,verification,parallel,condition,loop,human,terminal} from '@devcodex/flowkit/dsl';\nexport default defineWorkflow({id:'demo',version:'1.0.0',name:'Demo',nodes:[loop('l',{name:'L',maxIterations:3,body:'v',onSuccess:'done',onMaxExceeded:'failed'}),verification('v',{name:'V',verifier:'check',onSuccess:'l',onFailure:'repair'}),parallel('repair',{name:'Repair',branches:['a','b'],join:{strategy:'any',next:'v'}}),terminal('done',{name:'done',status:'succeeded'}),terminal('failed',{name:'failed',status:'succeeded'}),action('a',{name:'a',action:'save'}),action('b',{name:'b',action:'save'})]});\n",
+ "source": "import {defineWorkflow,node,action,verification,parallel,condition,loop,human,terminal} from '@devcodex-labs/flowkit/dsl';\nexport default defineWorkflow({id:'demo',version:'1.0.0',name:'Demo',nodes:[loop('l',{name:'L',maxIterations:3,body:'v',onSuccess:'done',onMaxExceeded:'failed'}),verification('v',{name:'V',verifier:'check',onSuccess:'l',onFailure:'repair'}),parallel('repair',{name:'Repair',branches:['a','b'],join:{strategy:'any',next:'v'}}),terminal('done',{name:'done',status:'succeeded'}),terminal('failed',{name:'failed',status:'succeeded'}),action('a',{name:'a',action:'save'}),action('b',{name:'b',action:'save'})]});\n",
"options": {}
},
"valid": {
- "source": "import {defineWorkflow,node,action,verification,parallel,condition,loop,human,terminal} from '@devcodex/flowkit/dsl';\nexport default defineWorkflow({id:'demo',version:'1.0.0',name:'Demo',nodes:[loop('l',{name:'L',maxIterations:3,body:'v',onSuccess:'done',onMaxExceeded:'failed'}),verification('v',{name:'V',verifier:'check',onSuccess:'l',onFailure:'repair'}),action('repair',{name:'repair',action:'save',next:'v'}),terminal('done',{name:'done',status:'succeeded'}),terminal('failed',{name:'failed',status:'succeeded'})]});\n",
+ "source": "import {defineWorkflow,node,action,verification,parallel,condition,loop,human,terminal} from '@devcodex-labs/flowkit/dsl';\nexport default defineWorkflow({id:'demo',version:'1.0.0',name:'Demo',nodes:[loop('l',{name:'L',maxIterations:3,body:'v',onSuccess:'done',onMaxExceeded:'failed'}),verification('v',{name:'V',verifier:'check',onSuccess:'l',onFailure:'repair'}),action('repair',{name:'repair',action:'save',next:'v'}),terminal('done',{name:'done',status:'succeeded'}),terminal('failed',{name:'failed',status:'succeeded'})]});\n",
"options": {}
}
}
diff --git a/tests/fixtures/errors/FK_C044.json b/tests/fixtures/errors/FK_C044.json
index f520adf..4a577d1 100644
--- a/tests/fixtures/errors/FK_C044.json
+++ b/tests/fixtures/errors/FK_C044.json
@@ -2,11 +2,11 @@
"code": "FK_C044",
"kind": "compile",
"invalid": {
- "source": "import {defineWorkflow,node,action,verification,parallel,condition,loop,human,terminal} from '@devcodex/flowkit/dsl';\nexport default defineWorkflow({id:'demo',version:'1.0.0',name:'Demo',nodes:[action('start',{name:'start',action:'save',next:'v'}),loop('l',{name:'L',maxIterations:3,body:'v',onSuccess:'done',onMaxExceeded:'failed'}),verification('v',{name:'V',verifier:'check',onSuccess:'l',onFailure:'repair'}),action('repair',{name:'repair',action:'save',next:'v'}),terminal('done',{name:'done',status:'succeeded'}),terminal('failed',{name:'failed',status:'succeeded'})]});\n",
+ "source": "import {defineWorkflow,node,action,verification,parallel,condition,loop,human,terminal} from '@devcodex-labs/flowkit/dsl';\nexport default defineWorkflow({id:'demo',version:'1.0.0',name:'Demo',nodes:[action('start',{name:'start',action:'save',next:'v'}),loop('l',{name:'L',maxIterations:3,body:'v',onSuccess:'done',onMaxExceeded:'failed'}),verification('v',{name:'V',verifier:'check',onSuccess:'l',onFailure:'repair'}),action('repair',{name:'repair',action:'save',next:'v'}),terminal('done',{name:'done',status:'succeeded'}),terminal('failed',{name:'failed',status:'succeeded'})]});\n",
"options": {}
},
"valid": {
- "source": "import {defineWorkflow,node,action,verification,parallel,condition,loop,human,terminal} from '@devcodex/flowkit/dsl';\nexport default defineWorkflow({id:'demo',version:'1.0.0',name:'Demo',nodes:[action('start',{name:'start',action:'save',next:'l'}),loop('l',{name:'L',maxIterations:3,body:'v',onSuccess:'done',onMaxExceeded:'failed'}),verification('v',{name:'V',verifier:'check',onSuccess:'l',onFailure:'repair'}),action('repair',{name:'repair',action:'save',next:'v'}),terminal('done',{name:'done',status:'succeeded'}),terminal('failed',{name:'failed',status:'succeeded'})]});\n",
+ "source": "import {defineWorkflow,node,action,verification,parallel,condition,loop,human,terminal} from '@devcodex-labs/flowkit/dsl';\nexport default defineWorkflow({id:'demo',version:'1.0.0',name:'Demo',nodes:[action('start',{name:'start',action:'save',next:'l'}),loop('l',{name:'L',maxIterations:3,body:'v',onSuccess:'done',onMaxExceeded:'failed'}),verification('v',{name:'V',verifier:'check',onSuccess:'l',onFailure:'repair'}),action('repair',{name:'repair',action:'save',next:'v'}),terminal('done',{name:'done',status:'succeeded'}),terminal('failed',{name:'failed',status:'succeeded'})]});\n",
"options": {}
}
}
diff --git a/tests/fixtures/errors/FK_C045.json b/tests/fixtures/errors/FK_C045.json
index cfe5b03..d92e0c0 100644
--- a/tests/fixtures/errors/FK_C045.json
+++ b/tests/fixtures/errors/FK_C045.json
@@ -2,11 +2,11 @@
"code": "FK_C045",
"kind": "compile",
"invalid": {
- "source": "import {defineWorkflow,node,action,verification,parallel,condition,loop,human,terminal} from '@devcodex/flowkit/dsl';\nexport default defineWorkflow({id:'demo',version:'1.0.0',name:'Demo',nodes:[loop('l',{name:'L',maxIterations:3,body:'v',onSuccess:'done',onMaxExceeded:'failed'}),verification('v',{name:'V',verifier:'check',onSuccess:'l',onFailure:'repair'}),loop('repair',{name:'Repair',maxIterations:2,body:'v',onSuccess:'done',onMaxExceeded:'failed'}),terminal('done',{name:'done',status:'succeeded'}),terminal('failed',{name:'failed',status:'succeeded'})]});\n",
+ "source": "import {defineWorkflow,node,action,verification,parallel,condition,loop,human,terminal} from '@devcodex-labs/flowkit/dsl';\nexport default defineWorkflow({id:'demo',version:'1.0.0',name:'Demo',nodes:[loop('l',{name:'L',maxIterations:3,body:'v',onSuccess:'done',onMaxExceeded:'failed'}),verification('v',{name:'V',verifier:'check',onSuccess:'l',onFailure:'repair'}),loop('repair',{name:'Repair',maxIterations:2,body:'v',onSuccess:'done',onMaxExceeded:'failed'}),terminal('done',{name:'done',status:'succeeded'}),terminal('failed',{name:'failed',status:'succeeded'})]});\n",
"options": {}
},
"valid": {
- "source": "import {defineWorkflow,node,action,verification,parallel,condition,loop,human,terminal} from '@devcodex/flowkit/dsl';\nexport default defineWorkflow({id:'demo',version:'1.0.0',name:'Demo',nodes:[loop('l',{name:'L',maxIterations:3,body:'v',onSuccess:'done',onMaxExceeded:'failed'}),verification('v',{name:'V',verifier:'check',onSuccess:'l',onFailure:'repair'}),action('repair',{name:'repair',action:'save',next:'v'}),terminal('done',{name:'done',status:'succeeded'}),terminal('failed',{name:'failed',status:'succeeded'})]});\n",
+ "source": "import {defineWorkflow,node,action,verification,parallel,condition,loop,human,terminal} from '@devcodex-labs/flowkit/dsl';\nexport default defineWorkflow({id:'demo',version:'1.0.0',name:'Demo',nodes:[loop('l',{name:'L',maxIterations:3,body:'v',onSuccess:'done',onMaxExceeded:'failed'}),verification('v',{name:'V',verifier:'check',onSuccess:'l',onFailure:'repair'}),action('repair',{name:'repair',action:'save',next:'v'}),terminal('done',{name:'done',status:'succeeded'}),terminal('failed',{name:'failed',status:'succeeded'})]});\n",
"options": {}
}
}
diff --git a/tests/fixtures/errors/FK_C046.json b/tests/fixtures/errors/FK_C046.json
index a392770..7742047 100644
--- a/tests/fixtures/errors/FK_C046.json
+++ b/tests/fixtures/errors/FK_C046.json
@@ -2,11 +2,11 @@
"code": "FK_C046",
"kind": "compile",
"invalid": {
- "source": "import {defineWorkflow,node,action,verification,parallel,condition,loop,human,terminal} from '@devcodex/flowkit/dsl';\nexport default defineWorkflow({id:'demo',version:'1.0.0',name:'Demo',nodes:[loop('l',{name:'L',maxIterations:3,body:'v',onSuccess:'done',onMaxExceeded:'failed'}),verification('v',{name:'V',verifier:'check',onSuccess:'l',onFailure:'repair'}),human('repair',{name:'Repair',onApprove:'v',onReject:'repair'}),terminal('done',{name:'done',status:'succeeded'}),terminal('failed',{name:'failed',status:'succeeded'})]});\n",
+ "source": "import {defineWorkflow,node,action,verification,parallel,condition,loop,human,terminal} from '@devcodex-labs/flowkit/dsl';\nexport default defineWorkflow({id:'demo',version:'1.0.0',name:'Demo',nodes:[loop('l',{name:'L',maxIterations:3,body:'v',onSuccess:'done',onMaxExceeded:'failed'}),verification('v',{name:'V',verifier:'check',onSuccess:'l',onFailure:'repair'}),human('repair',{name:'Repair',onApprove:'v',onReject:'repair'}),terminal('done',{name:'done',status:'succeeded'}),terminal('failed',{name:'failed',status:'succeeded'})]});\n",
"options": {}
},
"valid": {
- "source": "import {defineWorkflow,node,action,verification,parallel,condition,loop,human,terminal} from '@devcodex/flowkit/dsl';\nexport default defineWorkflow({id:'demo',version:'1.0.0',name:'Demo',nodes:[loop('l',{name:'L',maxIterations:3,body:'v',onSuccess:'done',onMaxExceeded:'failed'}),verification('v',{name:'V',verifier:'check',onSuccess:'l',onFailure:'repair'}),action('repair',{name:'repair',action:'save',next:'v'}),terminal('done',{name:'done',status:'succeeded'}),terminal('failed',{name:'failed',status:'succeeded'})]});\n",
+ "source": "import {defineWorkflow,node,action,verification,parallel,condition,loop,human,terminal} from '@devcodex-labs/flowkit/dsl';\nexport default defineWorkflow({id:'demo',version:'1.0.0',name:'Demo',nodes:[loop('l',{name:'L',maxIterations:3,body:'v',onSuccess:'done',onMaxExceeded:'failed'}),verification('v',{name:'V',verifier:'check',onSuccess:'l',onFailure:'repair'}),action('repair',{name:'repair',action:'save',next:'v'}),terminal('done',{name:'done',status:'succeeded'}),terminal('failed',{name:'failed',status:'succeeded'})]});\n",
"options": {}
}
}
diff --git a/tests/fixtures/errors/FK_C047.json b/tests/fixtures/errors/FK_C047.json
index 3a4ccbd..b905743 100644
--- a/tests/fixtures/errors/FK_C047.json
+++ b/tests/fixtures/errors/FK_C047.json
@@ -2,11 +2,11 @@
"code": "FK_C047",
"kind": "compile",
"invalid": {
- "source": "import {defineWorkflow,node,action,verification,parallel,condition,loop,human,terminal} from '@devcodex/flowkit/dsl';\nexport default defineWorkflow({id:'demo',version:'1.0.0',name:'Demo',nodes:[loop('l',{name:'L',maxIterations:3,body:'v',onSuccess:'done',onMaxExceeded:'failed'}),verification('v',{name:'V',verifier:'check',onSuccess:'l',onFailure:'repair'}),action('repair',{name:'repair',action:'save',next:'l'}),terminal('done',{name:'done',status:'succeeded'}),terminal('failed',{name:'failed',status:'succeeded'})]});\n",
+ "source": "import {defineWorkflow,node,action,verification,parallel,condition,loop,human,terminal} from '@devcodex-labs/flowkit/dsl';\nexport default defineWorkflow({id:'demo',version:'1.0.0',name:'Demo',nodes:[loop('l',{name:'L',maxIterations:3,body:'v',onSuccess:'done',onMaxExceeded:'failed'}),verification('v',{name:'V',verifier:'check',onSuccess:'l',onFailure:'repair'}),action('repair',{name:'repair',action:'save',next:'l'}),terminal('done',{name:'done',status:'succeeded'}),terminal('failed',{name:'failed',status:'succeeded'})]});\n",
"options": {}
},
"valid": {
- "source": "import {defineWorkflow,node,action,verification,parallel,condition,loop,human,terminal} from '@devcodex/flowkit/dsl';\nexport default defineWorkflow({id:'demo',version:'1.0.0',name:'Demo',nodes:[loop('l',{name:'L',maxIterations:3,body:'v',onSuccess:'done',onMaxExceeded:'failed'}),verification('v',{name:'V',verifier:'check',onSuccess:'l',onFailure:'repair'}),action('repair',{name:'repair',action:'save',next:'v'}),terminal('done',{name:'done',status:'succeeded'}),terminal('failed',{name:'failed',status:'succeeded'})]});\n",
+ "source": "import {defineWorkflow,node,action,verification,parallel,condition,loop,human,terminal} from '@devcodex-labs/flowkit/dsl';\nexport default defineWorkflow({id:'demo',version:'1.0.0',name:'Demo',nodes:[loop('l',{name:'L',maxIterations:3,body:'v',onSuccess:'done',onMaxExceeded:'failed'}),verification('v',{name:'V',verifier:'check',onSuccess:'l',onFailure:'repair'}),action('repair',{name:'repair',action:'save',next:'v'}),terminal('done',{name:'done',status:'succeeded'}),terminal('failed',{name:'failed',status:'succeeded'})]});\n",
"options": {}
}
}
diff --git a/tests/fixtures/errors/FK_C050.json b/tests/fixtures/errors/FK_C050.json
index a3890d8..1ef1ca4 100644
--- a/tests/fixtures/errors/FK_C050.json
+++ b/tests/fixtures/errors/FK_C050.json
@@ -2,11 +2,11 @@
"code": "FK_C050",
"kind": "compile",
"invalid": {
- "source": "import {defineWorkflow,node,action,verification,parallel,condition,loop,human,terminal} from '@devcodex/flowkit/dsl';\nexport default defineWorkflow({id:'demo',version:'1.0.0',name:'Demo',nodes:[node('n',{name:'N',output:{type:'object'},next:'done'}),terminal('done',{name:'done',status:'succeeded'})]});\n",
+ "source": "import {defineWorkflow,node,action,verification,parallel,condition,loop,human,terminal} from '@devcodex-labs/flowkit/dsl';\nexport default defineWorkflow({id:'demo',version:'1.0.0',name:'Demo',nodes:[node('n',{name:'N',output:{type:'object'},next:'done'}),terminal('done',{name:'done',status:'succeeded'})]});\n",
"options": {}
},
"valid": {
- "source": "import {defineWorkflow,node,action,verification,parallel,condition,loop,human,terminal} from '@devcodex/flowkit/dsl';\nexport default defineWorkflow({id:'demo',version:'1.0.0',name:'Demo',nodes:[node('n',{name:'N',skill:'skills/writer.md',output:{type:'object'},next:'done'}),terminal('done',{name:'done',status:'succeeded'})]});\n",
+ "source": "import {defineWorkflow,node,action,verification,parallel,condition,loop,human,terminal} from '@devcodex-labs/flowkit/dsl';\nexport default defineWorkflow({id:'demo',version:'1.0.0',name:'Demo',nodes:[node('n',{name:'N',skill:'skills/writer.md',output:{type:'object'},next:'done'}),terminal('done',{name:'done',status:'succeeded'})]});\n",
"options": {}
}
}
diff --git a/tests/fixtures/errors/FK_C051.json b/tests/fixtures/errors/FK_C051.json
index 4bfe967..21e3d23 100644
--- a/tests/fixtures/errors/FK_C051.json
+++ b/tests/fixtures/errors/FK_C051.json
@@ -2,11 +2,11 @@
"code": "FK_C051",
"kind": "compile",
"invalid": {
- "source": "import {defineWorkflow,node,action,verification,parallel,condition,loop,human,terminal} from '@devcodex/flowkit/dsl';\nexport default defineWorkflow({id:'demo',version:'1.0.0',name:'Demo',nodes:[node('n',{name:'N',skill:'skills/missing.md',output:{type:'object'},next:'done'}),terminal('done',{name:'done',status:'succeeded'})]});\n",
+ "source": "import {defineWorkflow,node,action,verification,parallel,condition,loop,human,terminal} from '@devcodex-labs/flowkit/dsl';\nexport default defineWorkflow({id:'demo',version:'1.0.0',name:'Demo',nodes:[node('n',{name:'N',skill:'skills/missing.md',output:{type:'object'},next:'done'}),terminal('done',{name:'done',status:'succeeded'})]});\n",
"options": {}
},
"valid": {
- "source": "import {defineWorkflow,node,action,verification,parallel,condition,loop,human,terminal} from '@devcodex/flowkit/dsl';\nexport default defineWorkflow({id:'demo',version:'1.0.0',name:'Demo',nodes:[node('n',{name:'N',skill:'skills/writer.md',output:{type:'object'},next:'done'}),terminal('done',{name:'done',status:'succeeded'})]});\n",
+ "source": "import {defineWorkflow,node,action,verification,parallel,condition,loop,human,terminal} from '@devcodex-labs/flowkit/dsl';\nexport default defineWorkflow({id:'demo',version:'1.0.0',name:'Demo',nodes:[node('n',{name:'N',skill:'skills/writer.md',output:{type:'object'},next:'done'}),terminal('done',{name:'done',status:'succeeded'})]});\n",
"options": {}
}
}
diff --git a/tests/fixtures/errors/FK_C052.json b/tests/fixtures/errors/FK_C052.json
index cea1e47..98c3bde 100644
--- a/tests/fixtures/errors/FK_C052.json
+++ b/tests/fixtures/errors/FK_C052.json
@@ -2,11 +2,11 @@
"code": "FK_C052",
"kind": "compile",
"invalid": {
- "source": "import {defineWorkflow,node,action,verification,parallel,condition,loop,human,terminal} from '@devcodex/flowkit/dsl';\nexport default defineWorkflow({id:'demo',version:'1.0.0',name:'Demo',nodes:[node('n',{name:'N',skill:'skills\\\\writer.md',output:{type:'object'},next:'done'}),terminal('done',{name:'done',status:'succeeded'})]});\n",
+ "source": "import {defineWorkflow,node,action,verification,parallel,condition,loop,human,terminal} from '@devcodex-labs/flowkit/dsl';\nexport default defineWorkflow({id:'demo',version:'1.0.0',name:'Demo',nodes:[node('n',{name:'N',skill:'skills\\\\writer.md',output:{type:'object'},next:'done'}),terminal('done',{name:'done',status:'succeeded'})]});\n",
"options": {}
},
"valid": {
- "source": "import {defineWorkflow,node,action,verification,parallel,condition,loop,human,terminal} from '@devcodex/flowkit/dsl';\nexport default defineWorkflow({id:'demo',version:'1.0.0',name:'Demo',nodes:[node('n',{name:'N',skill:'skills/writer.md',output:{type:'object'},next:'done'}),terminal('done',{name:'done',status:'succeeded'})]});\n",
+ "source": "import {defineWorkflow,node,action,verification,parallel,condition,loop,human,terminal} from '@devcodex-labs/flowkit/dsl';\nexport default defineWorkflow({id:'demo',version:'1.0.0',name:'Demo',nodes:[node('n',{name:'N',skill:'skills/writer.md',output:{type:'object'},next:'done'}),terminal('done',{name:'done',status:'succeeded'})]});\n",
"options": {}
}
}
diff --git a/tests/fixtures/errors/FK_C053.json b/tests/fixtures/errors/FK_C053.json
index bf004aa..dd47718 100644
--- a/tests/fixtures/errors/FK_C053.json
+++ b/tests/fixtures/errors/FK_C053.json
@@ -2,11 +2,11 @@
"code": "FK_C053",
"kind": "compile",
"invalid": {
- "source": "import {defineWorkflow,node,action,verification,parallel,condition,loop,human,terminal} from '@devcodex/flowkit/dsl';\nexport default defineWorkflow({id:'demo',version:'1.0.0',name:'Demo',nodes:[condition('c',{name:'C',branches:[{when:'flag',next:'write'},{when:'true',next:'read'}]}),action('write',{name:'write',action:'save',next:'done',writes:['x']}),node('read',{name:'N',agent:'writer',output:{type:'object'},next:'done',inputs:['x']}),terminal('done',{name:'done',status:'succeeded'})]});\n",
+ "source": "import {defineWorkflow,node,action,verification,parallel,condition,loop,human,terminal} from '@devcodex-labs/flowkit/dsl';\nexport default defineWorkflow({id:'demo',version:'1.0.0',name:'Demo',nodes:[condition('c',{name:'C',branches:[{when:'flag',next:'write'},{when:'true',next:'read'}]}),action('write',{name:'write',action:'save',next:'done',writes:['x']}),node('read',{name:'N',agent:'writer',output:{type:'object'},next:'done',inputs:['x']}),terminal('done',{name:'done',status:'succeeded'})]});\n",
"options": {}
},
"valid": {
- "source": "import {defineWorkflow,node,action,verification,parallel,condition,loop,human,terminal} from '@devcodex/flowkit/dsl';\nexport default defineWorkflow({id:'demo',version:'1.0.0',name:'Demo',nodes:[condition('c',{name:'C',branches:[{when:'flag',next:'write'},{when:'true',next:'write'}]}),action('write',{name:'write',action:'save',next:'read',writes:['x']}),node('read',{name:'N',agent:'writer',output:{type:'object'},next:'done',inputs:['x']}),terminal('done',{name:'done',status:'succeeded'})]});\n",
+ "source": "import {defineWorkflow,node,action,verification,parallel,condition,loop,human,terminal} from '@devcodex-labs/flowkit/dsl';\nexport default defineWorkflow({id:'demo',version:'1.0.0',name:'Demo',nodes:[condition('c',{name:'C',branches:[{when:'flag',next:'write'},{when:'true',next:'write'}]}),action('write',{name:'write',action:'save',next:'read',writes:['x']}),node('read',{name:'N',agent:'writer',output:{type:'object'},next:'done',inputs:['x']}),terminal('done',{name:'done',status:'succeeded'})]});\n",
"options": {}
}
}
diff --git a/tests/fixtures/errors/FK_C054.json b/tests/fixtures/errors/FK_C054.json
index bcd28ec..c9f1ecc 100644
--- a/tests/fixtures/errors/FK_C054.json
+++ b/tests/fixtures/errors/FK_C054.json
@@ -2,11 +2,11 @@
"code": "FK_C054",
"kind": "compile",
"invalid": {
- "source": "import {defineWorkflow,node,action,verification,parallel,condition,loop,human,terminal} from '@devcodex/flowkit/dsl';\nexport default defineWorkflow({id:'demo',version:'1.0.0',name:'Demo',nodes:[node('n',{name:'N',agent:'writer',output:{type:'array'},next:'done'}),terminal('done',{name:'done',status:'succeeded'})]});\n",
+ "source": "import {defineWorkflow,node,action,verification,parallel,condition,loop,human,terminal} from '@devcodex-labs/flowkit/dsl';\nexport default defineWorkflow({id:'demo',version:'1.0.0',name:'Demo',nodes:[node('n',{name:'N',agent:'writer',output:{type:'array'},next:'done'}),terminal('done',{name:'done',status:'succeeded'})]});\n",
"options": {}
},
"valid": {
- "source": "import {defineWorkflow,node,action,verification,parallel,condition,loop,human,terminal} from '@devcodex/flowkit/dsl';\nexport default defineWorkflow({id:'demo',version:'1.0.0',name:'Demo',nodes:[node('n',{name:'N',skill:'skills/writer.md',output:{type:'object'},next:'done'}),terminal('done',{name:'done',status:'succeeded'})]});\n",
+ "source": "import {defineWorkflow,node,action,verification,parallel,condition,loop,human,terminal} from '@devcodex-labs/flowkit/dsl';\nexport default defineWorkflow({id:'demo',version:'1.0.0',name:'Demo',nodes:[node('n',{name:'N',skill:'skills/writer.md',output:{type:'object'},next:'done'}),terminal('done',{name:'done',status:'succeeded'})]});\n",
"options": {}
}
}
diff --git a/tests/fixtures/errors/FK_C055.json b/tests/fixtures/errors/FK_C055.json
index e4f7d89..6819a13 100644
--- a/tests/fixtures/errors/FK_C055.json
+++ b/tests/fixtures/errors/FK_C055.json
@@ -2,11 +2,11 @@
"code": "FK_C055",
"kind": "compile",
"invalid": {
- "source": "import {defineWorkflow,node,action,verification,parallel,condition,loop,human,terminal} from '@devcodex/flowkit/dsl';\nexport default defineWorkflow({id:'demo',version:'1.0.0',name:'Demo',nodes:[node('n',{name:'N',agent:'writer',output:{type:'object'},next:'done',retries:11}),terminal('done',{name:'done',status:'succeeded'})]});\n",
+ "source": "import {defineWorkflow,node,action,verification,parallel,condition,loop,human,terminal} from '@devcodex-labs/flowkit/dsl';\nexport default defineWorkflow({id:'demo',version:'1.0.0',name:'Demo',nodes:[node('n',{name:'N',agent:'writer',output:{type:'object'},next:'done',retries:11}),terminal('done',{name:'done',status:'succeeded'})]});\n",
"options": {}
},
"valid": {
- "source": "import {defineWorkflow,node,action,verification,parallel,condition,loop,human,terminal} from '@devcodex/flowkit/dsl';\nexport default defineWorkflow({id:'demo',version:'1.0.0',name:'Demo',nodes:[node('n',{name:'N',skill:'skills/writer.md',output:{type:'object'},next:'done'}),terminal('done',{name:'done',status:'succeeded'})]});\n",
+ "source": "import {defineWorkflow,node,action,verification,parallel,condition,loop,human,terminal} from '@devcodex-labs/flowkit/dsl';\nexport default defineWorkflow({id:'demo',version:'1.0.0',name:'Demo',nodes:[node('n',{name:'N',skill:'skills/writer.md',output:{type:'object'},next:'done'}),terminal('done',{name:'done',status:'succeeded'})]});\n",
"options": {}
}
}
diff --git a/tests/fixtures/errors/FK_C056.json b/tests/fixtures/errors/FK_C056.json
index 4c3cdac..d294ab6 100644
--- a/tests/fixtures/errors/FK_C056.json
+++ b/tests/fixtures/errors/FK_C056.json
@@ -2,11 +2,11 @@
"code": "FK_C056",
"kind": "compile",
"invalid": {
- "source": "import {defineWorkflow,node,action,verification,parallel,condition,loop,human,terminal} from '@devcodex/flowkit/dsl';\nexport default defineWorkflow({id:'demo',version:'1.0.0',name:'Demo',nodes:[action('a',{name:'a',action:'save',next:'done',writes:['x','x']}),terminal('done',{name:'done',status:'succeeded'})]});\n",
+ "source": "import {defineWorkflow,node,action,verification,parallel,condition,loop,human,terminal} from '@devcodex-labs/flowkit/dsl';\nexport default defineWorkflow({id:'demo',version:'1.0.0',name:'Demo',nodes:[action('a',{name:'a',action:'save',next:'done',writes:['x','x']}),terminal('done',{name:'done',status:'succeeded'})]});\n",
"options": {}
},
"valid": {
- "source": "import {defineWorkflow,node,action,verification,parallel,condition,loop,human,terminal} from '@devcodex/flowkit/dsl';\nexport default defineWorkflow({id:'demo',version:'1.0.0',name:'Demo',nodes:[action('a',{name:'a',action:'save',next:'done',writes:['x']}),terminal('done',{name:'done',status:'succeeded'})]});\n",
+ "source": "import {defineWorkflow,node,action,verification,parallel,condition,loop,human,terminal} from '@devcodex-labs/flowkit/dsl';\nexport default defineWorkflow({id:'demo',version:'1.0.0',name:'Demo',nodes:[action('a',{name:'a',action:'save',next:'done',writes:['x']}),terminal('done',{name:'done',status:'succeeded'})]});\n",
"options": {}
}
}
diff --git a/tests/fixtures/errors/FK_C057.json b/tests/fixtures/errors/FK_C057.json
index e8c6ea3..9e2b4ea 100644
--- a/tests/fixtures/errors/FK_C057.json
+++ b/tests/fixtures/errors/FK_C057.json
@@ -2,11 +2,11 @@
"code": "FK_C057",
"kind": "compile",
"invalid": {
- "source": "import {defineWorkflow,node,action,verification,parallel,condition,loop,human,terminal} from '@devcodex/flowkit/dsl';\nexport default defineWorkflow({id:'demo',version:'1.0.0',name:'Demo',nodes:[node('n',{name:'N',skill:'https://skills.example.test/style.md',integrity:'sha256-GVdESIiHGUAdgUwF8wkh3HmX5deMlNBOUtZXJWVTaW4=',output:{type:'object'},next:'done'}),terminal('done',{name:'done',status:'succeeded'})]});\n",
+ "source": "import {defineWorkflow,node,action,verification,parallel,condition,loop,human,terminal} from '@devcodex-labs/flowkit/dsl';\nexport default defineWorkflow({id:'demo',version:'1.0.0',name:'Demo',nodes:[node('n',{name:'N',skill:'https://skills.example.test/style.md',integrity:'sha256-GVdESIiHGUAdgUwF8wkh3HmX5deMlNBOUtZXJWVTaW4=',output:{type:'object'},next:'done'}),terminal('done',{name:'done',status:'succeeded'})]});\n",
"options": {}
},
"valid": {
- "source": "import {defineWorkflow,node,action,verification,parallel,condition,loop,human,terminal} from '@devcodex/flowkit/dsl';\nexport default defineWorkflow({id:'demo',version:'1.0.0',name:'Demo',nodes:[node('n',{name:'N',skill:'https://skills.example.test/style.md',integrity:'sha256-GVdESIiHGUAdgUwF8wkh3HmX5deMlNBOUtZXJWVTaW4=',output:{type:'object'},next:'done'}),terminal('done',{name:'done',status:'succeeded'})]});\n",
+ "source": "import {defineWorkflow,node,action,verification,parallel,condition,loop,human,terminal} from '@devcodex-labs/flowkit/dsl';\nexport default defineWorkflow({id:'demo',version:'1.0.0',name:'Demo',nodes:[node('n',{name:'N',skill:'https://skills.example.test/style.md',integrity:'sha256-GVdESIiHGUAdgUwF8wkh3HmX5deMlNBOUtZXJWVTaW4=',output:{type:'object'},next:'done'}),terminal('done',{name:'done',status:'succeeded'})]});\n",
"options": {
"remoteSkillHosts": [
"skills.example.test"
diff --git a/tests/fixtures/errors/FK_C058.json b/tests/fixtures/errors/FK_C058.json
index 33e723e..3652629 100644
--- a/tests/fixtures/errors/FK_C058.json
+++ b/tests/fixtures/errors/FK_C058.json
@@ -2,7 +2,7 @@
"code": "FK_C058",
"kind": "compile",
"invalid": {
- "source": "import {defineWorkflow,node,action,verification,parallel,condition,loop,human,terminal} from '@devcodex/flowkit/dsl';\nexport default defineWorkflow({id:'demo',version:'1.0.0',name:'Demo',nodes:[node('n',{name:'N',skill:'https://skills.example.test/style.md',integrity:'',output:{type:'object'},next:'done'}),terminal('done',{name:'done',status:'succeeded'})]});\n",
+ "source": "import {defineWorkflow,node,action,verification,parallel,condition,loop,human,terminal} from '@devcodex-labs/flowkit/dsl';\nexport default defineWorkflow({id:'demo',version:'1.0.0',name:'Demo',nodes:[node('n',{name:'N',skill:'https://skills.example.test/style.md',integrity:'',output:{type:'object'},next:'done'}),terminal('done',{name:'done',status:'succeeded'})]});\n",
"options": {
"remoteSkillHosts": [
"skills.example.test"
@@ -10,7 +10,7 @@
}
},
"valid": {
- "source": "import {defineWorkflow,node,action,verification,parallel,condition,loop,human,terminal} from '@devcodex/flowkit/dsl';\nexport default defineWorkflow({id:'demo',version:'1.0.0',name:'Demo',nodes:[node('n',{name:'N',skill:'https://skills.example.test/style.md',integrity:'sha256-GVdESIiHGUAdgUwF8wkh3HmX5deMlNBOUtZXJWVTaW4=',output:{type:'object'},next:'done'}),terminal('done',{name:'done',status:'succeeded'})]});\n",
+ "source": "import {defineWorkflow,node,action,verification,parallel,condition,loop,human,terminal} from '@devcodex-labs/flowkit/dsl';\nexport default defineWorkflow({id:'demo',version:'1.0.0',name:'Demo',nodes:[node('n',{name:'N',skill:'https://skills.example.test/style.md',integrity:'sha256-GVdESIiHGUAdgUwF8wkh3HmX5deMlNBOUtZXJWVTaW4=',output:{type:'object'},next:'done'}),terminal('done',{name:'done',status:'succeeded'})]});\n",
"options": {
"remoteSkillHosts": [
"skills.example.test"
diff --git a/tests/fixtures/errors/FK_C059.json b/tests/fixtures/errors/FK_C059.json
index f6c55b6..a8b7ec9 100644
--- a/tests/fixtures/errors/FK_C059.json
+++ b/tests/fixtures/errors/FK_C059.json
@@ -2,7 +2,7 @@
"code": "FK_C059",
"kind": "compile",
"invalid": {
- "source": "import {defineWorkflow,node,action,verification,parallel,condition,loop,human,terminal} from '@devcodex/flowkit/dsl';\nexport default defineWorkflow({id:'demo',version:'1.0.0',name:'Demo',nodes:[node('n',{name:'N',skill:'https://skills.example.test/style.md',output:{type:'object'},next:'done'}),terminal('done',{name:'done',status:'succeeded'})]});\n",
+ "source": "import {defineWorkflow,node,action,verification,parallel,condition,loop,human,terminal} from '@devcodex-labs/flowkit/dsl';\nexport default defineWorkflow({id:'demo',version:'1.0.0',name:'Demo',nodes:[node('n',{name:'N',skill:'https://skills.example.test/style.md',output:{type:'object'},next:'done'}),terminal('done',{name:'done',status:'succeeded'})]});\n",
"options": {
"remoteSkillHosts": [
"skills.example.test"
@@ -10,7 +10,7 @@
}
},
"valid": {
- "source": "import {defineWorkflow,node,action,verification,parallel,condition,loop,human,terminal} from '@devcodex/flowkit/dsl';\nexport default defineWorkflow({id:'demo',version:'1.0.0',name:'Demo',nodes:[node('n',{name:'N',skill:'https://skills.example.test/style.md',integrity:'sha256-GVdESIiHGUAdgUwF8wkh3HmX5deMlNBOUtZXJWVTaW4=',output:{type:'object'},next:'done'}),terminal('done',{name:'done',status:'succeeded'})]});\n",
+ "source": "import {defineWorkflow,node,action,verification,parallel,condition,loop,human,terminal} from '@devcodex-labs/flowkit/dsl';\nexport default defineWorkflow({id:'demo',version:'1.0.0',name:'Demo',nodes:[node('n',{name:'N',skill:'https://skills.example.test/style.md',integrity:'sha256-GVdESIiHGUAdgUwF8wkh3HmX5deMlNBOUtZXJWVTaW4=',output:{type:'object'},next:'done'}),terminal('done',{name:'done',status:'succeeded'})]});\n",
"options": {
"remoteSkillHosts": [
"skills.example.test"
diff --git a/tests/fixtures/errors/FK_C060.json b/tests/fixtures/errors/FK_C060.json
index d17c5e1..ddbe982 100644
--- a/tests/fixtures/errors/FK_C060.json
+++ b/tests/fixtures/errors/FK_C060.json
@@ -2,11 +2,11 @@
"code": "FK_C060",
"kind": "compile",
"invalid": {
- "source": "import {defineWorkflow,node,action,verification,parallel,condition,loop,human,terminal} from '@devcodex/flowkit/dsl';\nexport default defineWorkflow({id:'demo',version:'1.0.0',name:'Demo',nodes:[human('h',{name:'H',onApprove:'done',onReject:'repair'}),action('repair',{name:'repair',action:'save',next:'done'}),terminal('done',{name:'done',status:'succeeded'})]});\n",
+ "source": "import {defineWorkflow,node,action,verification,parallel,condition,loop,human,terminal} from '@devcodex-labs/flowkit/dsl';\nexport default defineWorkflow({id:'demo',version:'1.0.0',name:'Demo',nodes:[human('h',{name:'H',onApprove:'done',onReject:'repair'}),action('repair',{name:'repair',action:'save',next:'done'}),terminal('done',{name:'done',status:'succeeded'})]});\n",
"options": {}
},
"valid": {
- "source": "import {defineWorkflow,node,action,verification,parallel,condition,loop,human,terminal} from '@devcodex/flowkit/dsl';\nexport default defineWorkflow({id:'demo',version:'1.0.0',name:'Demo',nodes:[human('h',{name:'H',onApprove:'done',onReject:'repair'}),action('repair',{name:'repair',action:'save',next:'h'}),terminal('done',{name:'done',status:'succeeded'})]});\n",
+ "source": "import {defineWorkflow,node,action,verification,parallel,condition,loop,human,terminal} from '@devcodex-labs/flowkit/dsl';\nexport default defineWorkflow({id:'demo',version:'1.0.0',name:'Demo',nodes:[human('h',{name:'H',onApprove:'done',onReject:'repair'}),action('repair',{name:'repair',action:'save',next:'h'}),terminal('done',{name:'done',status:'succeeded'})]});\n",
"options": {}
}
}
diff --git a/tests/fixtures/errors/FK_C061.json b/tests/fixtures/errors/FK_C061.json
index d31b69e..42d4202 100644
--- a/tests/fixtures/errors/FK_C061.json
+++ b/tests/fixtures/errors/FK_C061.json
@@ -2,11 +2,11 @@
"code": "FK_C061",
"kind": "compile",
"invalid": {
- "source": "import {defineWorkflow,node,action,verification,parallel,condition,loop,human,terminal} from '@devcodex/flowkit/dsl';\nexport default defineWorkflow({id:'demo',version:'1.0.0',name:'Demo',nodes:[human('h',{name:'H',onApprove:'done',onReject:'repair'}),condition('repair',{name:'Repair',branches:[{when:'true',next:'h'}]}),terminal('done',{name:'done',status:'succeeded'})]});\n",
+ "source": "import {defineWorkflow,node,action,verification,parallel,condition,loop,human,terminal} from '@devcodex-labs/flowkit/dsl';\nexport default defineWorkflow({id:'demo',version:'1.0.0',name:'Demo',nodes:[human('h',{name:'H',onApprove:'done',onReject:'repair'}),condition('repair',{name:'Repair',branches:[{when:'true',next:'h'}]}),terminal('done',{name:'done',status:'succeeded'})]});\n",
"options": {}
},
"valid": {
- "source": "import {defineWorkflow,node,action,verification,parallel,condition,loop,human,terminal} from '@devcodex/flowkit/dsl';\nexport default defineWorkflow({id:'demo',version:'1.0.0',name:'Demo',nodes:[human('h',{name:'H',onApprove:'done',onReject:'repair'}),action('repair',{name:'repair',action:'save',next:'h'}),terminal('done',{name:'done',status:'succeeded'})]});\n",
+ "source": "import {defineWorkflow,node,action,verification,parallel,condition,loop,human,terminal} from '@devcodex-labs/flowkit/dsl';\nexport default defineWorkflow({id:'demo',version:'1.0.0',name:'Demo',nodes:[human('h',{name:'H',onApprove:'done',onReject:'repair'}),action('repair',{name:'repair',action:'save',next:'h'}),terminal('done',{name:'done',status:'succeeded'})]});\n",
"options": {}
}
}
diff --git a/tests/fixtures/errors/FK_C070.json b/tests/fixtures/errors/FK_C070.json
index e71e3c9..f209255 100644
--- a/tests/fixtures/errors/FK_C070.json
+++ b/tests/fixtures/errors/FK_C070.json
@@ -2,11 +2,11 @@
"code": "FK_C070",
"kind": "compile",
"invalid": {
- "source": "import {defineWorkflow,node,action,verification,parallel,condition,loop,human,terminal} from '@devcodex/flowkit/dsl';\nexport default defineWorkflow({id:'demo',version:'1.0.0',name:'Demo',nodes:[terminal('done',{name:'Done',status:'ok'})]});\n",
+ "source": "import {defineWorkflow,node,action,verification,parallel,condition,loop,human,terminal} from '@devcodex-labs/flowkit/dsl';\nexport default defineWorkflow({id:'demo',version:'1.0.0',name:'Demo',nodes:[terminal('done',{name:'Done',status:'ok'})]});\n",
"options": {}
},
"valid": {
- "source": "import {defineWorkflow,node,action,verification,parallel,condition,loop,human,terminal} from '@devcodex/flowkit/dsl';\nexport default defineWorkflow({id:'demo',version:'1.0.0',name:'Demo',nodes:[terminal('done',{name:'done',status:'succeeded'})]});\n",
+ "source": "import {defineWorkflow,node,action,verification,parallel,condition,loop,human,terminal} from '@devcodex-labs/flowkit/dsl';\nexport default defineWorkflow({id:'demo',version:'1.0.0',name:'Demo',nodes:[terminal('done',{name:'done',status:'succeeded'})]});\n",
"options": {}
}
}
diff --git a/tests/fixtures/errors/FK_C080.json b/tests/fixtures/errors/FK_C080.json
index 8c51ac4..a6a420b 100644
--- a/tests/fixtures/errors/FK_C080.json
+++ b/tests/fixtures/errors/FK_C080.json
@@ -2,11 +2,11 @@
"code": "FK_C080",
"kind": "compile",
"invalid": {
- "source": "import {defineWorkflow,node,action,verification,parallel,condition,loop,human,terminal} from '@devcodex/flowkit/dsl';\nexport default defineWorkflow({id:'demo',version:'1.0.0',name:'Demo',nodes:[action('a',{name:'a',action:'save',next:'a'})]});\n",
+ "source": "import {defineWorkflow,node,action,verification,parallel,condition,loop,human,terminal} from '@devcodex-labs/flowkit/dsl';\nexport default defineWorkflow({id:'demo',version:'1.0.0',name:'Demo',nodes:[action('a',{name:'a',action:'save',next:'a'})]});\n",
"options": {}
},
"valid": {
- "source": "import {defineWorkflow,node,action,verification,parallel,condition,loop,human,terminal} from '@devcodex/flowkit/dsl';\nexport default defineWorkflow({id:'demo',version:'1.0.0',name:'Demo',nodes:[action('a',{name:'a',action:'save',next:'done'}),terminal('done',{name:'done',status:'succeeded'})]});\n",
+ "source": "import {defineWorkflow,node,action,verification,parallel,condition,loop,human,terminal} from '@devcodex-labs/flowkit/dsl';\nexport default defineWorkflow({id:'demo',version:'1.0.0',name:'Demo',nodes:[action('a',{name:'a',action:'save',next:'done'}),terminal('done',{name:'done',status:'succeeded'})]});\n",
"options": {}
}
}
diff --git a/tests/fixtures/errors/FK_C090.json b/tests/fixtures/errors/FK_C090.json
index b070a1d..9bc9a8e 100644
--- a/tests/fixtures/errors/FK_C090.json
+++ b/tests/fixtures/errors/FK_C090.json
@@ -2,11 +2,11 @@
"code": "FK_C090",
"kind": "compile",
"invalid": {
- "source": "import {defineWorkflow,node,action,verification,parallel,condition,loop,human,terminal} from '@devcodex/flowkit/dsl';\nexport default defineWorkflow({id:'demo',version:'1.0.0',name:'Demo',nodes:[action('a-0',{name:'a-0',action:'save',next:'a0'}),action('a0',{name:'a0',action:'save',next:'done'}),terminal('done',{name:'done',status:'succeeded'})]});\n",
+ "source": "import {defineWorkflow,node,action,verification,parallel,condition,loop,human,terminal} from '@devcodex-labs/flowkit/dsl';\nexport default defineWorkflow({id:'demo',version:'1.0.0',name:'Demo',nodes:[action('a-0',{name:'a-0',action:'save',next:'a0'}),action('a0',{name:'a0',action:'save',next:'done'}),terminal('done',{name:'done',status:'succeeded'})]});\n",
"options": {}
},
"valid": {
- "source": "import {defineWorkflow,node,action,verification,parallel,condition,loop,human,terminal} from '@devcodex/flowkit/dsl';\nexport default defineWorkflow({id:'demo',version:'1.0.0',name:'Demo',nodes:[action('a-0',{name:'a-0',action:'save',next:'b0'}),action('b0',{name:'b0',action:'save',next:'done'}),terminal('done',{name:'done',status:'succeeded'})]});\n",
+ "source": "import {defineWorkflow,node,action,verification,parallel,condition,loop,human,terminal} from '@devcodex-labs/flowkit/dsl';\nexport default defineWorkflow({id:'demo',version:'1.0.0',name:'Demo',nodes:[action('a-0',{name:'a-0',action:'save',next:'b0'}),action('b0',{name:'b0',action:'save',next:'done'}),terminal('done',{name:'done',status:'succeeded'})]});\n",
"options": {}
}
}
diff --git a/tests/fixtures/errors/FK_R001.json b/tests/fixtures/errors/FK_R001.json
index 3fe052b..ffefa57 100644
--- a/tests/fixtures/errors/FK_R001.json
+++ b/tests/fixtures/errors/FK_R001.json
@@ -2,7 +2,7 @@
"code": "FK_R001",
"kind": "runtime",
"invalid": {
- "source": "import {defineWorkflow,node,action,verification,parallel,condition,loop,human,terminal} from '@devcodex/flowkit/dsl';\nexport default defineWorkflow({id:'demo',version:'1.0.0',name:'Demo',nodes:[terminal('done',{name:'done',status:'succeeded'})]});\n",
+ "source": "import {defineWorkflow,node,action,verification,parallel,condition,loop,human,terminal} from '@devcodex-labs/flowkit/dsl';\nexport default defineWorkflow({id:'demo',version:'1.0.0',name:'Demo',nodes:[terminal('done',{name:'done',status:'succeeded'})]});\n",
"mode": "stale-artifact",
"options": {
"skillCheck": false,
@@ -12,7 +12,7 @@
}
},
"valid": {
- "source": "import {defineWorkflow,node,action,verification,parallel,condition,loop,human,terminal} from '@devcodex/flowkit/dsl';\nexport default defineWorkflow({id:'demo',version:'1.0.0',name:'Demo',nodes:[terminal('done',{name:'done',status:'succeeded'})]});\n",
+ "source": "import {defineWorkflow,node,action,verification,parallel,condition,loop,human,terminal} from '@devcodex-labs/flowkit/dsl';\nexport default defineWorkflow({id:'demo',version:'1.0.0',name:'Demo',nodes:[terminal('done',{name:'done',status:'succeeded'})]});\n",
"mode": "stale-artifact",
"options": {
"skillCheck": false,
diff --git a/tests/fixtures/errors/FK_R002.json b/tests/fixtures/errors/FK_R002.json
index acded2e..69f6a68 100644
--- a/tests/fixtures/errors/FK_R002.json
+++ b/tests/fixtures/errors/FK_R002.json
@@ -2,7 +2,7 @@
"code": "FK_R002",
"kind": "runtime",
"invalid": {
- "source": "import {defineWorkflow,node,action,verification,parallel,condition,loop,human,terminal} from '@devcodex/flowkit/dsl';\nexport default defineWorkflow({id:'demo',version:'1.0.0',name:'Demo',nodes:[human('h',{name:'H',onApprove:'done',onReject:'repair'}),action('repair',{name:'repair',action:'save',next:'h'}),terminal('done',{name:'done',status:'succeeded'})]});\n",
+ "source": "import {defineWorkflow,node,action,verification,parallel,condition,loop,human,terminal} from '@devcodex-labs/flowkit/dsl';\nexport default defineWorkflow({id:'demo',version:'1.0.0',name:'Demo',nodes:[human('h',{name:'H',onApprove:'done',onReject:'repair'}),action('repair',{name:'repair',action:'save',next:'h'}),terminal('done',{name:'done',status:'succeeded'})]});\n",
"mode": "human-return",
"options": {
"skillCheck": false,
@@ -12,7 +12,7 @@
}
},
"valid": {
- "source": "import {defineWorkflow,node,action,verification,parallel,condition,loop,human,terminal} from '@devcodex/flowkit/dsl';\nexport default defineWorkflow({id:'demo',version:'1.0.0',name:'Demo',nodes:[human('h',{name:'H',onApprove:'done',onReject:'repair'}),action('repair',{name:'repair',action:'save',next:'h'}),terminal('done',{name:'done',status:'succeeded'})]});\n",
+ "source": "import {defineWorkflow,node,action,verification,parallel,condition,loop,human,terminal} from '@devcodex-labs/flowkit/dsl';\nexport default defineWorkflow({id:'demo',version:'1.0.0',name:'Demo',nodes:[human('h',{name:'H',onApprove:'done',onReject:'repair'}),action('repair',{name:'repair',action:'save',next:'h'}),terminal('done',{name:'done',status:'succeeded'})]});\n",
"mode": "human-return",
"options": {
"skillCheck": false,
diff --git a/tests/fixtures/errors/FK_R003.json b/tests/fixtures/errors/FK_R003.json
index eccfa5a..eacfc5f 100644
--- a/tests/fixtures/errors/FK_R003.json
+++ b/tests/fixtures/errors/FK_R003.json
@@ -3,7 +3,7 @@
"kind": "runtime",
"reservedProbe": "v1 never emits this code; both branches are legal absence probes, not an invented trigger",
"invalid": {
- "source": "import {defineWorkflow,node,action,verification,parallel,condition,loop,human,terminal} from '@devcodex/flowkit/dsl';\nexport default defineWorkflow({id:'demo',version:'1.0.0',name:'Demo',nodes:[terminal('done',{name:'done',status:'succeeded'})]});\n",
+ "source": "import {defineWorkflow,node,action,verification,parallel,condition,loop,human,terminal} from '@devcodex-labs/flowkit/dsl';\nexport default defineWorkflow({id:'demo',version:'1.0.0',name:'Demo',nodes:[terminal('done',{name:'done',status:'succeeded'})]});\n",
"mode": "reserved",
"options": {
"skillCheck": false,
@@ -13,7 +13,7 @@
}
},
"valid": {
- "source": "import {defineWorkflow,node,action,verification,parallel,condition,loop,human,terminal} from '@devcodex/flowkit/dsl';\nexport default defineWorkflow({id:'demo',version:'1.0.0',name:'Demo',nodes:[terminal('done',{name:'done',status:'succeeded'})]});\n",
+ "source": "import {defineWorkflow,node,action,verification,parallel,condition,loop,human,terminal} from '@devcodex-labs/flowkit/dsl';\nexport default defineWorkflow({id:'demo',version:'1.0.0',name:'Demo',nodes:[terminal('done',{name:'done',status:'succeeded'})]});\n",
"mode": "reserved",
"options": {
"skillCheck": false,
diff --git a/tests/fixtures/errors/FK_R004.json b/tests/fixtures/errors/FK_R004.json
index 884797b..9ba9f9a 100644
--- a/tests/fixtures/errors/FK_R004.json
+++ b/tests/fixtures/errors/FK_R004.json
@@ -2,7 +2,7 @@
"code": "FK_R004",
"kind": "runtime",
"invalid": {
- "source": "import {defineWorkflow,node,action,verification,parallel,condition,loop,human,terminal} from '@devcodex/flowkit/dsl';\nexport default defineWorkflow({id:'demo',version:'1.0.0',name:'Demo',nodes:[node('n',{name:'N',agent:'writer',output:{type:'object'},next:'done'}),terminal('done',{name:'done',status:'succeeded'})]});\n",
+ "source": "import {defineWorkflow,node,action,verification,parallel,condition,loop,human,terminal} from '@devcodex-labs/flowkit/dsl';\nexport default defineWorkflow({id:'demo',version:'1.0.0',name:'Demo',nodes:[node('n',{name:'N',agent:'writer',output:{type:'object'},next:'done'}),terminal('done',{name:'done',status:'succeeded'})]});\n",
"mode": "agent-schema",
"options": {
"skillCheck": false,
@@ -12,7 +12,7 @@
}
},
"valid": {
- "source": "import {defineWorkflow,node,action,verification,parallel,condition,loop,human,terminal} from '@devcodex/flowkit/dsl';\nexport default defineWorkflow({id:'demo',version:'1.0.0',name:'Demo',nodes:[node('n',{name:'N',agent:'writer',output:{type:'object'},next:'done'}),terminal('done',{name:'done',status:'succeeded'})]});\n",
+ "source": "import {defineWorkflow,node,action,verification,parallel,condition,loop,human,terminal} from '@devcodex-labs/flowkit/dsl';\nexport default defineWorkflow({id:'demo',version:'1.0.0',name:'Demo',nodes:[node('n',{name:'N',agent:'writer',output:{type:'object'},next:'done'}),terminal('done',{name:'done',status:'succeeded'})]});\n",
"mode": "agent-schema",
"options": {
"skillCheck": false,
diff --git a/tests/fixtures/errors/FK_R010.json b/tests/fixtures/errors/FK_R010.json
index 08d706c..2c691a9 100644
--- a/tests/fixtures/errors/FK_R010.json
+++ b/tests/fixtures/errors/FK_R010.json
@@ -2,7 +2,7 @@
"code": "FK_R010",
"kind": "runtime",
"invalid": {
- "source": "import {defineWorkflow,node,action,verification,parallel,condition,loop,human,terminal} from '@devcodex/flowkit/dsl';\nexport default defineWorkflow({id:'demo',version:'1.0.0',name:'Demo',nodes:[node('n',{name:'N',agent:'writer',output:{type:'object'},next:'done'}),terminal('done',{name:'done',status:'succeeded'})]});\n",
+ "source": "import {defineWorkflow,node,action,verification,parallel,condition,loop,human,terminal} from '@devcodex-labs/flowkit/dsl';\nexport default defineWorkflow({id:'demo',version:'1.0.0',name:'Demo',nodes:[node('n',{name:'N',agent:'writer',output:{type:'object'},next:'done'}),terminal('done',{name:'done',status:'succeeded'})]});\n",
"mode": "missing-skill",
"options": {
"skillCheck": false,
@@ -12,7 +12,7 @@
}
},
"valid": {
- "source": "import {defineWorkflow,node,action,verification,parallel,condition,loop,human,terminal} from '@devcodex/flowkit/dsl';\nexport default defineWorkflow({id:'demo',version:'1.0.0',name:'Demo',nodes:[node('n',{name:'N',agent:'writer',output:{type:'object'},next:'done'}),terminal('done',{name:'done',status:'succeeded'})]});\n",
+ "source": "import {defineWorkflow,node,action,verification,parallel,condition,loop,human,terminal} from '@devcodex-labs/flowkit/dsl';\nexport default defineWorkflow({id:'demo',version:'1.0.0',name:'Demo',nodes:[node('n',{name:'N',agent:'writer',output:{type:'object'},next:'done'}),terminal('done',{name:'done',status:'succeeded'})]});\n",
"mode": "missing-skill",
"options": {
"skillCheck": false,
diff --git a/tests/fixtures/errors/FK_R011.json b/tests/fixtures/errors/FK_R011.json
index 540fca0..984ace0 100644
--- a/tests/fixtures/errors/FK_R011.json
+++ b/tests/fixtures/errors/FK_R011.json
@@ -2,7 +2,7 @@
"code": "FK_R011",
"kind": "runtime",
"invalid": {
- "source": "import {defineWorkflow,node,action,verification,parallel,condition,loop,human,terminal} from '@devcodex/flowkit/dsl';\nexport default defineWorkflow({id:'demo',version:'1.0.0',name:'Demo',nodes:[node('n',{name:'N',agent:'writer',output:{type:'object'},next:'done'}),terminal('done',{name:'done',status:'succeeded'})]});\n",
+ "source": "import {defineWorkflow,node,action,verification,parallel,condition,loop,human,terminal} from '@devcodex-labs/flowkit/dsl';\nexport default defineWorkflow({id:'demo',version:'1.0.0',name:'Demo',nodes:[node('n',{name:'N',agent:'writer',output:{type:'object'},next:'done'}),terminal('done',{name:'done',status:'succeeded'})]});\n",
"mode": "escaping-skill",
"options": {
"skillCheck": false,
@@ -12,7 +12,7 @@
}
},
"valid": {
- "source": "import {defineWorkflow,node,action,verification,parallel,condition,loop,human,terminal} from '@devcodex/flowkit/dsl';\nexport default defineWorkflow({id:'demo',version:'1.0.0',name:'Demo',nodes:[node('n',{name:'N',agent:'writer',output:{type:'object'},next:'done'}),terminal('done',{name:'done',status:'succeeded'})]});\n",
+ "source": "import {defineWorkflow,node,action,verification,parallel,condition,loop,human,terminal} from '@devcodex-labs/flowkit/dsl';\nexport default defineWorkflow({id:'demo',version:'1.0.0',name:'Demo',nodes:[node('n',{name:'N',agent:'writer',output:{type:'object'},next:'done'}),terminal('done',{name:'done',status:'succeeded'})]});\n",
"mode": "escaping-skill",
"options": {
"skillCheck": false,
diff --git a/tests/fixtures/errors/FK_R012.json b/tests/fixtures/errors/FK_R012.json
index 70dd6bf..9654a38 100644
--- a/tests/fixtures/errors/FK_R012.json
+++ b/tests/fixtures/errors/FK_R012.json
@@ -2,7 +2,7 @@
"code": "FK_R012",
"kind": "runtime",
"invalid": {
- "source": "import {defineWorkflow,node,action,verification,parallel,condition,loop,human,terminal} from '@devcodex/flowkit/dsl';\nexport default defineWorkflow({id:'demo',version:'1.0.0',name:'Demo',nodes:[node('n',{name:'N',skill:'https://skills.example.test/style.md',integrity:'sha256-GVdESIiHGUAdgUwF8wkh3HmX5deMlNBOUtZXJWVTaW4=',output:{type:'object'},next:'done'}),terminal('done',{name:'done',status:'succeeded'})]});\n",
+ "source": "import {defineWorkflow,node,action,verification,parallel,condition,loop,human,terminal} from '@devcodex-labs/flowkit/dsl';\nexport default defineWorkflow({id:'demo',version:'1.0.0',name:'Demo',nodes:[node('n',{name:'N',skill:'https://skills.example.test/style.md',integrity:'sha256-GVdESIiHGUAdgUwF8wkh3HmX5deMlNBOUtZXJWVTaW4=',output:{type:'object'},next:'done'}),terminal('done',{name:'done',status:'succeeded'})]});\n",
"mode": "cross-origin",
"options": {
"skillCheck": false,
@@ -12,7 +12,7 @@
}
},
"valid": {
- "source": "import {defineWorkflow,node,action,verification,parallel,condition,loop,human,terminal} from '@devcodex/flowkit/dsl';\nexport default defineWorkflow({id:'demo',version:'1.0.0',name:'Demo',nodes:[node('n',{name:'N',skill:'https://skills.example.test/style.md',integrity:'sha256-GVdESIiHGUAdgUwF8wkh3HmX5deMlNBOUtZXJWVTaW4=',output:{type:'object'},next:'done'}),terminal('done',{name:'done',status:'succeeded'})]});\n",
+ "source": "import {defineWorkflow,node,action,verification,parallel,condition,loop,human,terminal} from '@devcodex-labs/flowkit/dsl';\nexport default defineWorkflow({id:'demo',version:'1.0.0',name:'Demo',nodes:[node('n',{name:'N',skill:'https://skills.example.test/style.md',integrity:'sha256-GVdESIiHGUAdgUwF8wkh3HmX5deMlNBOUtZXJWVTaW4=',output:{type:'object'},next:'done'}),terminal('done',{name:'done',status:'succeeded'})]});\n",
"mode": "cross-origin",
"options": {
"skillCheck": false,
diff --git a/tests/fixtures/errors/FK_R013.json b/tests/fixtures/errors/FK_R013.json
index 829d1a9..1f43f09 100644
--- a/tests/fixtures/errors/FK_R013.json
+++ b/tests/fixtures/errors/FK_R013.json
@@ -2,7 +2,7 @@
"code": "FK_R013",
"kind": "runtime",
"invalid": {
- "source": "import {defineWorkflow,node,action,verification,parallel,condition,loop,human,terminal} from '@devcodex/flowkit/dsl';\nexport default defineWorkflow({id:'demo',version:'1.0.0',name:'Demo',nodes:[node('n',{name:'N',skill:'https://skills.example.test/style.md',integrity:'sha256-GVdESIiHGUAdgUwF8wkh3HmX5deMlNBOUtZXJWVTaW4=',output:{type:'object'},next:'done'}),terminal('done',{name:'done',status:'succeeded'})]});\n",
+ "source": "import {defineWorkflow,node,action,verification,parallel,condition,loop,human,terminal} from '@devcodex-labs/flowkit/dsl';\nexport default defineWorkflow({id:'demo',version:'1.0.0',name:'Demo',nodes:[node('n',{name:'N',skill:'https://skills.example.test/style.md',integrity:'sha256-GVdESIiHGUAdgUwF8wkh3HmX5deMlNBOUtZXJWVTaW4=',output:{type:'object'},next:'done'}),terminal('done',{name:'done',status:'succeeded'})]});\n",
"mode": "digest-mismatch",
"options": {
"skillCheck": false,
@@ -12,7 +12,7 @@
}
},
"valid": {
- "source": "import {defineWorkflow,node,action,verification,parallel,condition,loop,human,terminal} from '@devcodex/flowkit/dsl';\nexport default defineWorkflow({id:'demo',version:'1.0.0',name:'Demo',nodes:[node('n',{name:'N',skill:'https://skills.example.test/style.md',integrity:'sha256-GVdESIiHGUAdgUwF8wkh3HmX5deMlNBOUtZXJWVTaW4=',output:{type:'object'},next:'done'}),terminal('done',{name:'done',status:'succeeded'})]});\n",
+ "source": "import {defineWorkflow,node,action,verification,parallel,condition,loop,human,terminal} from '@devcodex-labs/flowkit/dsl';\nexport default defineWorkflow({id:'demo',version:'1.0.0',name:'Demo',nodes:[node('n',{name:'N',skill:'https://skills.example.test/style.md',integrity:'sha256-GVdESIiHGUAdgUwF8wkh3HmX5deMlNBOUtZXJWVTaW4=',output:{type:'object'},next:'done'}),terminal('done',{name:'done',status:'succeeded'})]});\n",
"mode": "digest-mismatch",
"options": {
"skillCheck": false,
diff --git a/tests/fixtures/errors/FK_R014.json b/tests/fixtures/errors/FK_R014.json
index a5408b0..08fea70 100644
--- a/tests/fixtures/errors/FK_R014.json
+++ b/tests/fixtures/errors/FK_R014.json
@@ -2,7 +2,7 @@
"code": "FK_R014",
"kind": "runtime",
"invalid": {
- "source": "import {defineWorkflow,node,action,verification,parallel,condition,loop,human,terminal} from '@devcodex/flowkit/dsl';\nexport default defineWorkflow({id:'demo',version:'1.0.0',name:'Demo',nodes:[node('n',{name:'N',agent:'writer',output:{type:'object'},next:'done'}),terminal('done',{name:'done',status:'succeeded'})]});\n",
+ "source": "import {defineWorkflow,node,action,verification,parallel,condition,loop,human,terminal} from '@devcodex-labs/flowkit/dsl';\nexport default defineWorkflow({id:'demo',version:'1.0.0',name:'Demo',nodes:[node('n',{name:'N',agent:'writer',output:{type:'object'},next:'done'}),terminal('done',{name:'done',status:'succeeded'})]});\n",
"mode": "invalid-utf8",
"options": {
"skillCheck": false,
@@ -12,7 +12,7 @@
}
},
"valid": {
- "source": "import {defineWorkflow,node,action,verification,parallel,condition,loop,human,terminal} from '@devcodex/flowkit/dsl';\nexport default defineWorkflow({id:'demo',version:'1.0.0',name:'Demo',nodes:[node('n',{name:'N',agent:'writer',output:{type:'object'},next:'done'}),terminal('done',{name:'done',status:'succeeded'})]});\n",
+ "source": "import {defineWorkflow,node,action,verification,parallel,condition,loop,human,terminal} from '@devcodex-labs/flowkit/dsl';\nexport default defineWorkflow({id:'demo',version:'1.0.0',name:'Demo',nodes:[node('n',{name:'N',agent:'writer',output:{type:'object'},next:'done'}),terminal('done',{name:'done',status:'succeeded'})]});\n",
"mode": "invalid-utf8",
"options": {
"skillCheck": false,
diff --git a/tests/integrations/capability-graph.test.mjs b/tests/integrations/capability-graph.test.mjs
new file mode 100644
index 0000000..bef27d1
--- /dev/null
+++ b/tests/integrations/capability-graph.test.mjs
@@ -0,0 +1,46 @@
+import test from 'node:test';
+import assert from 'node:assert/strict';
+import { flowkitProvider, createCapabilityGraphActionAdapter } from '../../src/integrations/capability-graph.mjs';
+
+const resolved = status => ({
+ nodes: [
+ { capability: { id: 'demo::greet' }, applicability: { status } },
+ { capability: { id: 'demo::ready' }, applicability: { status: 'applicable' } },
+ ],
+ unresolved: [], meta: { completeness: 'complete' },
+});
+
+test('Provider declares real public capabilities with stable graph IDs', () => {
+ assert.equal(flowkitProvider.providerId, 'flowkit');
+ assert.equal(flowkitProvider.schemaVersion, 1);
+ assert.equal(new Set(flowkitProvider.capabilities.map(item => item.id)).size, flowkitProvider.capabilities.length);
+ assert(flowkitProvider.capabilities.some(item => item.id === 'run-workflow'));
+});
+test('host binding resolves capability and dependencies before executing', async () => {
+ const calls = [], ctx = { state: {} };
+ const graph = { async resolve(q) { calls.push(q); return resolved('applicable'); } };
+ const adapter = createCapabilityGraphActionAdapter({ graph, getContext: () => ({ facts: { runtime: 'node' } }),
+ bindings: { greet: { capabilityId: 'demo::greet', async execute({ ctx, resolution }) { assert.equal(resolution.nodes.length, 2); ctx.state.message = 'ok'; } } } });
+ await adapter.runAction('greet', 'Greeting', ctx);
+ assert.equal(ctx.state.message, 'ok'); assert.deepEqual(calls[0].relations, ['requires']);
+ assert.deepEqual(calls[0].context.facts, { runtime: 'node' });
+});
+test('missing binding, incomplete dependencies and unknown applicability fail closed', async () => {
+ let executed = false;
+ const binding = { greet: { capabilityId: 'demo::greet', execute() { executed = true; } } };
+ const absent = createCapabilityGraphActionAdapter({ graph: { resolve: async () => resolved('applicable') }, bindings: binding });
+ await assert.rejects(absent.runAction('missing', 'Missing', {}), { code: 'FK_CG_BINDING_MISSING' });
+ const unknown = createCapabilityGraphActionAdapter({ graph: { resolve: async () => resolved('unknown') }, bindings: binding });
+ await assert.rejects(unknown.runAction('greet', 'Greeting', {}), { code: 'FK_CG_NOT_APPLICABLE' });
+ const partial = createCapabilityGraphActionAdapter({ graph: { resolve: async () => ({ ...resolved('applicable'), unresolved: [{ reason: 'target_unavailable' }] }) }, bindings: binding });
+ await assert.rejects(partial.runAction('greet', 'Greeting', {}), { code: 'FK_CG_DEPENDENCIES_INCOMPLETE' });
+ assert.equal(executed, false);
+});
+test('Graph errors remain exact and invalid bindings are rejected', async () => {
+ const failure = Object.assign(new Error('denied'), { code: 'CG_ACCESS_DENIED' });
+ const adapter = createCapabilityGraphActionAdapter({ graph: { resolve: async () => { throw failure; } },
+ bindings: { greet: { capabilityId: 'demo::greet', execute() {} } } });
+ await assert.rejects(adapter.runAction('greet', 'Greeting', {}), e => e === failure);
+ assert.throws(() => createCapabilityGraphActionAdapter({ graph: {}, bindings: {} }), /graph.resolve/);
+ assert.throws(() => createCapabilityGraphActionAdapter({ graph: { resolve() {} }, bindings: { bad: { capabilityId: '../unsafe', execute() {} } } }), /Invalid capability binding/);
+});
diff --git a/tests/package/consumer-dom.ts b/tests/package/consumer-dom.ts
index b42dfe9..eed3ed4 100644
--- a/tests/package/consumer-dom.ts
+++ b/tests/package/consumer-dom.ts
@@ -1,5 +1,5 @@
-import { compile, run, isControlSignal } from '@devcodex/flowkit';
-import type { FlowkitOptions, RunResult } from '@devcodex/flowkit';
+import { compile, run, isControlSignal } from '@devcodex-labs/flowkit';
+import type { FlowkitOptions, RunResult } from '@devcodex-labs/flowkit';
const options: FlowkitOptions = { fetch, signal: new AbortController().signal };
const result: Promise = run('sample.workflow.ts', { isControlSignal }, {}, options);
void [compile('sample.workflow.ts'), result];
diff --git a/tests/package/consumer-invalid.ts b/tests/package/consumer-invalid.ts
index 936c1e9..2da299e 100644
--- a/tests/package/consumer-invalid.ts
+++ b/tests/package/consumer-invalid.ts
@@ -1,4 +1,4 @@
-import { defineWorkflow, action } from '@devcodex/flowkit/dsl';
-import { main } from '@devcodex/flowkit/cli';
+import { defineWorkflow, action } from '@devcodex-labs/flowkit/dsl';
+import { main } from '@devcodex-labs/flowkit/cli';
defineWorkflow({ id: 'invalid', version: '1.0.0', name: 'Invalid', nodes: [action('a', { name: 'A', action: 'save', next: 'missing' })] });
void main;
diff --git a/tests/package/consumer.cjs b/tests/package/consumer.cjs
index 5ea9774..26b82bf 100644
--- a/tests/package/consumer.cjs
+++ b/tests/package/consumer.cjs
@@ -1,7 +1,7 @@
const assert = require('node:assert/strict');
(async () => {
- const api = await import('@devcodex/flowkit');
- const dsl = await import('@devcodex/flowkit/dsl');
+ const api = await import('@devcodex-labs/flowkit');
+ const dsl = await import('@devcodex-labs/flowkit/dsl');
assert.equal(Object.keys(api).length, 6); assert.equal(Object.keys(dsl).length, 9);
assert.deepEqual(await api.check('sample.workflow.ts', { trace: true, mermaid: false }), []);
assert.equal((await api.run('sample.compiled.mjs', { isControlSignal: api.isControlSignal, runAgent: async () => ({}), validateResult: () => [], runAction: async () => {} })).terminal, 'done');
diff --git a/tests/package/consumer.mjs b/tests/package/consumer.mjs
index 3133aee..423b251 100644
--- a/tests/package/consumer.mjs
+++ b/tests/package/consumer.mjs
@@ -2,18 +2,18 @@ import assert from 'node:assert/strict';
import { readFile, writeFile, mkdir, stat } from 'node:fs/promises';
import { fileURLToPath } from 'node:url';
import path from 'node:path';
-import * as api from '@devcodex/flowkit';
-import * as dsl from '@devcodex/flowkit/dsl';
-import pkg from '@devcodex/flowkit/package.json' with { type: 'json' };
+import * as api from '@devcodex-labs/flowkit';
+import * as dsl from '@devcodex-labs/flowkit/dsl';
+import pkg from '@devcodex-labs/flowkit/package.json' with { type: 'json' };
assert.deepEqual(Object.keys(api), ['check', 'compile', 'compileSource', 'evalWhen', 'isControlSignal', 'run']);
-assert.equal(Object.keys(dsl).length, 9); assert.equal(pkg.name, '@devcodex/flowkit');
-const resolved = fileURLToPath(import.meta.resolve('@devcodex/flowkit'));
-assert.ok(resolved.startsWith(path.resolve('node_modules/@devcodex/flowkit') + path.sep));
-for (const name of ['@devcodex/flowkit/dist/index.mjs', '@devcodex/flowkit/cli', '@devcodex/flowkit/runtime/run', '@devcodex/flowkit/testing']) await assert.rejects(import(name), { code: 'ERR_PACKAGE_PATH_NOT_EXPORTED' });
+assert.equal(Object.keys(dsl).length, 9); assert.equal(pkg.name, '@devcodex-labs/flowkit');
+const resolved = fileURLToPath(import.meta.resolve('@devcodex-labs/flowkit'));
+assert.ok(resolved.startsWith(path.resolve('node_modules/@devcodex-labs/flowkit') + path.sep));
+for (const name of ['@devcodex-labs/flowkit/dist/index.mjs', '@devcodex-labs/flowkit/cli', '@devcodex-labs/flowkit/runtime/run', '@devcodex-labs/flowkit/testing']) await assert.rejects(import(name), { code: 'ERR_PACKAGE_PATH_NOT_EXPORTED' });
const definition = dsl.defineWorkflow({ id: 'installed', version: '1.0.0', name: 'Installed', nodes: [dsl.terminal('done', { name: 'Done', status: 'succeeded' })] });
assert.ok(Object.isFrozen(definition.nodes[0]));
await mkdir('skills'); await writeFile('skills/a.md', 'Installed Skill.');
-const source = `import {defineWorkflow,node,action,terminal} from '@devcodex/flowkit/dsl';
+const source = `import {defineWorkflow,node,action,terminal} from '@devcodex-labs/flowkit/dsl';
export default defineWorkflow({id:'installed',version:'1.0.0',name:'Installed',nodes:[node('n',{name:'N',skill:'skills/a.md',output:{type:'object'},next:'save'}),action('save',{name:'Save',action:'save',next:'done'}),terminal('done',{name:'Done',status:'succeeded'})]} as const);\n`;
await writeFile('sample.workflow.ts', source);
const output = await api.compile('sample.workflow.ts', { trace: true, mermaid: false }); assert.deepEqual(output.diagnostics, []);
diff --git a/tests/package/consumer.ts b/tests/package/consumer.ts
index ed48926..3d70a65 100644
--- a/tests/package/consumer.ts
+++ b/tests/package/consumer.ts
@@ -1,7 +1,7 @@
import { readFile } from 'node:fs/promises';
-import { compile, run, isControlSignal } from '@devcodex/flowkit';
-import type { Runtime, RunResult, FlowkitOptions } from '@devcodex/flowkit';
-import { defineWorkflow, action, terminal } from '@devcodex/flowkit/dsl';
+import { compile, run, isControlSignal } from '@devcodex-labs/flowkit';
+import type { Runtime, RunResult, FlowkitOptions } from '@devcodex-labs/flowkit';
+import { defineWorkflow, action, terminal } from '@devcodex-labs/flowkit/dsl';
const definition = defineWorkflow({ id: 'typed', version: '1.0.0', name: 'Typed', nodes: [action('a', { name: 'A', action: 'save', next: 'done' }), terminal('done', { name: 'Done', status: 'succeeded' })] });
const host: Runtime = { isControlSignal };
const options: FlowkitOptions = { fetch, signal: new AbortController().signal };
diff --git a/tests/package/package.test.mjs b/tests/package/package.test.mjs
index 306170d..f1ca3cf 100644
--- a/tests/package/package.test.mjs
+++ b/tests/package/package.test.mjs
@@ -92,7 +92,7 @@ test('validation timeout terminates a waiting shell and its child before tempora
if (!stopped && process.platform === 'linux') {
// A killed child may await reaping by the WSL init process; a zombie cannot run or hold file handles.
try { stopped = /^State:\s+Z\b/m.test(await readFile(`/proc/${pid}/status`, 'utf8')); }
- catch (error) { if (error.code !== 'ENOENT') throw error; stopped = true; }
+ catch (error) { if (!['ENOENT', 'ESRCH'].includes(error.code)) throw error; stopped = true; }
}
assert.equal(stopped, true, 'The validation child is still running');
await rm(directory, { recursive: true }); await assert.rejects(access(directory), { code: 'ENOENT' });
diff --git a/tests/package/release.test.mjs b/tests/package/release.test.mjs
index ca4135e..982702a 100644
--- a/tests/package/release.test.mjs
+++ b/tests/package/release.test.mjs
@@ -23,7 +23,7 @@ async function fixture(t) {
await mkdir(path.dirname(path.join(root, file)), {recursive:true}); await copyFile(path.join(repository, file), path.join(root, file));
}
const pkg = JSON.parse(await readFile(path.join(root,'package.json')));
- Object.assign(pkg, {private:false,version:tag.slice(1),license:'MIT'});
+ Object.assign(pkg, {private:false,version:tag.slice(1),license:'SEE LICENSE IN LICENSE'});
const lock = JSON.parse(await readFile(path.join(root,'package-lock.json'))); lock.version=pkg.version; lock.packages[''].version=pkg.version;
await writeFile(path.join(root,'package.json'),JSON.stringify(pkg,null,2)); await writeFile(path.join(root,'package-lock.json'),JSON.stringify(lock));
await writeFile(path.join(root,'LICENSE'),'Synthetic fixture license, not a project license decision.');
@@ -34,14 +34,14 @@ async function syntheticArtifact(root) {
// This fixture builds a real gzip/tar archive; integration separately uses actual npm pack.
await build(root);
const directory=path.join(root,'.tmp/release');await mkdir(directory,{recursive:true});
- const filename=`devcodex-flowkit-${tag.slice(1)}.tgz`;
+ const filename=`devcodex-labs-flowkit-${tag.slice(1)}.tgz`;
const files=[];for(const member of ['package.json','README.md','LICENSE',...packageFiles.map(([,output])=>output)]){
const source=packageFiles.find(([,output])=>output===member)?.[0]??member;
files.push({path:member,sha256:digest(await readFile(path.join(root,source)))});
}
await createTar({cwd:root,file:path.join(directory,filename),prefix:'package',gzip:true,portable:true},files.map(file=>file.path));
const bytes=await readFile(path.join(directory,filename));
- const manifest={schemaVersion:1,name:'@devcodex/flowkit',version:tag.slice(1),tag,npmTag:'next',filename,sha256:digest(bytes),files};
+ const manifest={schemaVersion:1,name:'@devcodex-labs/flowkit',version:tag.slice(1),tag,npmTag:'next',filename,sha256:digest(bytes),files};
await writeFile(path.join(directory,'release.json'),JSON.stringify(manifest));
return {directory,filename,manifest,bytes};
}
diff --git a/tests/runtime/dump.test.mjs b/tests/runtime/dump.test.mjs
index 282aaa0..6ec16c8 100644
--- a/tests/runtime/dump.test.mjs
+++ b/tests/runtime/dump.test.mjs
@@ -9,7 +9,7 @@ import crypto from 'node:crypto';
import { EventEmitter } from 'node:events';
import { fileURLToPath } from 'node:url';
import path from 'node:path';
-import * as api from '@devcodex/flowkit';
+import * as api from '@devcodex-labs/flowkit';
import { hashPrefixCollision, loadDumpWorkflow } from '../../src/runtime/dump.mjs';
import { fixture, end, host, settled } from './support.mjs';
@@ -21,7 +21,7 @@ function probe(operation, config) {
"import assert from 'node:assert/strict'; import fs from 'node:fs/promises'; import path from 'node:path';",
"import {register,syncBuiltinESMExports} from 'node:module'; import module from 'node:module';",
"import {MessageChannel,MessagePort,Worker} from 'node:worker_threads'; import {pathToFileURL} from 'node:url';",
- "import * as api from '@devcodex/flowkit';",
+ "import * as api from '@devcodex-labs/flowkit';",
'import {dumpChannel} from ' + JSON.stringify(new URL('../../dist/runtime/dump-channel.mjs', import.meta.url).href) + ';',
'const operation = ' + operation.toString() + '; await operation(' + JSON.stringify(config) + ');',
].join('\n');
diff --git a/tests/runtime/golden.test.mjs b/tests/runtime/golden.test.mjs
index 91cac4e..4197fb3 100644
--- a/tests/runtime/golden.test.mjs
+++ b/tests/runtime/golden.test.mjs
@@ -4,7 +4,7 @@ import { readFile, mkdtemp, mkdir, writeFile, rm } from 'node:fs/promises';
import { createHash } from 'node:crypto';
import { tmpdir } from 'node:os';
import path from 'node:path';
-import { compile, run, check, evalWhen, isControlSignal } from '@devcodex/flowkit';
+import { compile, run, check, evalWhen, isControlSignal } from '@devcodex-labs/flowkit';
import { demo } from '../../examples/demo.mjs';
import { createRuntime, validateExample } from '../../examples/host.mjs';
import { exampleAgent } from '../../examples/agent.mjs';
diff --git a/tests/runtime/run.test.mjs b/tests/runtime/run.test.mjs
index 0a7dbe2..a2c2135 100644
--- a/tests/runtime/run.test.mjs
+++ b/tests/runtime/run.test.mjs
@@ -6,7 +6,7 @@ import { syncBuiltinESMExports } from 'node:module';
import { spawnSync } from 'node:child_process';
import { fileURLToPath } from 'node:url';
import path from 'node:path';
-import * as api from '@devcodex/flowkit';
+import * as api from '@devcodex-labs/flowkit';
import { fixture, source, end, host, settled } from './support.mjs';
const codeIs = code => error => error.code === code;
@@ -94,7 +94,7 @@ test('run rejects invalid extensions and options before filesystem work or busin
test('public run fixes source, inferred root and relative dump before an asynchronous cwd change', async t => {
const f = await fixture(t, [act, end()]); const other = path.join(f.directory, 'other'); await mkdir(other);
- const code = "import assert from 'node:assert/strict';import fs from 'node:fs/promises';import path from 'node:path';import {run,isControlSignal} from '@devcodex/flowkit';" +
+ const code = "import assert from 'node:assert/strict';import fs from 'node:fs/promises';import path from 'node:path';import {run,isControlSignal} from '@devcodex-labs/flowkit';" +
"const directory=process.argv[1];process.chdir(directory);const running=run('./source.workflow.js',{isControlSignal,runAction:async()=>{}},{},{dump:'debug'});process.chdir(path.join(directory,'other'));assert.equal((await running).terminal,'done');assert.equal((await fs.readdir(path.join(directory,'debug'))).length,1);assert.deepEqual(await fs.readdir(process.cwd()),[]);";
const child = spawnSync(process.execPath, ['--input-type=module', '-e', code, f.directory], { cwd: fileURLToPath(new URL('../../', import.meta.url)), encoding: 'utf8', timeout: 10000 });
assert.equal(child.error, undefined); assert.equal(child.status, 0, child.stderr);
diff --git a/tests/runtime/source.test.mjs b/tests/runtime/source.test.mjs
index 5aae38b..b6e8b43 100644
--- a/tests/runtime/source.test.mjs
+++ b/tests/runtime/source.test.mjs
@@ -6,7 +6,7 @@ import fsSync from 'node:fs';
import { syncBuiltinESMExports } from 'node:module';
import { spawnSync } from 'node:child_process';
import path from 'node:path';
-import * as api from '@devcodex/flowkit';
+import * as api from '@devcodex-labs/flowkit';
import { executeSource } from '../../src/runtime/source.mjs';
import { loadWorkflowText } from '../../src/runtime/load.mjs';
import { fixture, source, end, host, settled } from './support.mjs';
@@ -19,7 +19,7 @@ test('public helpers expose strict own-state evaluation and the control marker w
assert.equal(api.evalWhen({ state: Object.create({ inherited: true }) }, 'inherited === null'), false);
assert.throws(() => api.evalWhen({ state: { value: 1 } }, 'value'), { code: 'FK_R002' });
assert.throws(() => api.evalWhen({ state: {} }, 'call()'), { code: 'FK_C033' });
- await assert.rejects(import('@devcodex/flowkit/runtime/source'), { code: 'ERR_PACKAGE_PATH_NOT_EXPORTED' });
+ await assert.rejects(import('@devcodex-labs/flowkit/runtime/source'), { code: 'ERR_PACKAGE_PATH_NOT_EXPORTED' });
});
test('compile errors select the first error after warnings and precede state cloning or business calls', async t => {
diff --git a/tests/runtime/support.mjs b/tests/runtime/support.mjs
index fddad7f..e904ba5 100644
--- a/tests/runtime/support.mjs
+++ b/tests/runtime/support.mjs
@@ -2,10 +2,10 @@ import assert from 'node:assert/strict';
import { mkdtemp, writeFile, rm } from 'node:fs/promises';
import { tmpdir } from 'node:os';
import path from 'node:path';
-import { evalWhen, isControlSignal } from '@devcodex/flowkit';
+import { evalWhen, isControlSignal } from '@devcodex-labs/flowkit';
import { executeSource } from '../../src/runtime/source.mjs';
-const imports = "import {defineWorkflow,node,action,condition,verification,loop,human,parallel,terminal} from '@devcodex/flowkit/dsl';";
+const imports = "import {defineWorkflow,node,action,condition,verification,loop,human,parallel,terminal} from '@devcodex-labs/flowkit/dsl';";
export const end = (id = 'done', status = 'succeeded') => `terminal('${id}',{name:'${id}',status:'${status}'})`;
export const source = nodes => `${imports}\nexport default defineWorkflow({id:'runtime',version:'1.0.0',name:'Runtime',nodes:[${nodes.join(',')}]});\n`;
export const host = methods => ({ isControlSignal, evalWhen, ...methods });
diff --git a/tests/types/capability-graph.ts b/tests/types/capability-graph.ts
new file mode 100644
index 0000000..29827dd
--- /dev/null
+++ b/tests/types/capability-graph.ts
@@ -0,0 +1,13 @@
+import { flowkitProvider, createCapabilityGraphActionAdapter } from '../../types/capability-graph.js';
+import type { GraphResolver, GraphContext, GraphActionBinding, GraphResolution } from '../../types/capability-graph.js';
+const provider: { providerId: string; version: string; capabilities: { id: string; name: string; description: string }[] } = flowkitProvider;
+const context: GraphContext = { facts: { runtime: 'node', 'runtime.version': '22.13.0' } };
+const result: GraphResolution = { nodes: [{ capability: { id: 'demo::greet' }, applicability: { status: 'applicable' } }], unresolved: [], meta: { completeness: 'complete' } };
+const graph: GraphResolver = { async resolve(query) { const ids: string[] = query.ids; void ids; return result; } };
+const binding: GraphActionBinding = { capabilityId: 'demo::greet', async execute({ action, resolution }) { const id: string = resolution.nodes[0].capability.id; void [action,id]; } };
+const adapter = createCapabilityGraphActionAdapter({ graph, bindings: { greet: binding }, getContext: () => context });
+const execution: Promise = adapter.runAction('greet', 'Greeting', { state: {} });
+void [provider, execution];
+// @ts-expect-error Graph binding requires a capability ID
+const invalid: GraphActionBinding = { execute() {} };
+void invalid;
diff --git a/tests/types/compiler-api.ts b/tests/types/compiler-api.ts
index e2cdf03..36e1925 100644
--- a/tests/types/compiler-api.ts
+++ b/tests/types/compiler-api.ts
@@ -1,5 +1,5 @@
-import { run, compile, compileSource, check, evalWhen, isControlSignal } from '@devcodex/flowkit';
-import type { CompileResult, Diagnostic, FlowkitOptions, Ctx } from '@devcodex/flowkit';
+import { run, compile, compileSource, check, evalWhen, isControlSignal } from '@devcodex-labs/flowkit';
+import type { CompileResult, Diagnostic, FlowkitOptions, Ctx } from '@devcodex-labs/flowkit';
const options: FlowkitOptions = { trace: false, mermaid: true, skillCheck: false };
const compiled: Promise = compile('sample.workflow.ts', options);
@@ -15,7 +15,7 @@ const boolean: boolean = evalWhen(ctx, 'true');
const control: boolean = isControlSignal(null);
void [boolean, control];
// @ts-expect-error Internal modules are not public subpaths.
-import { writeArtifacts } from '@devcodex/flowkit/compiler/output';
+import { writeArtifacts } from '@devcodex-labs/flowkit/compiler/output';
// @ts-expect-error compileSource requires a filename.
compileSource('', {});
// @ts-expect-error filename is not a compile option.
diff --git a/tests/types/dsl.ts b/tests/types/dsl.ts
index 590052b..9f796a9 100644
--- a/tests/types/dsl.ts
+++ b/tests/types/dsl.ts
@@ -1,5 +1,5 @@
-import { defineWorkflow, node, action, verification, parallel, condition, loop, human, terminal } from '@devcodex/flowkit/dsl';
-import type { DslNode } from '@devcodex/flowkit/dsl';
+import { defineWorkflow, node, action, verification, parallel, condition, loop, human, terminal } from '@devcodex-labs/flowkit/dsl';
+import type { DslNode } from '@devcodex-labs/flowkit/dsl';
const flow = defineWorkflow({ id: 'all-nodes', version: '1.0.0', name: '全节点', nodes: [
node('write', { name: '撰写', agent: 'writer', output: { type: 'object', properties: { text: { type: 'string' } }, $defs: { ok: true } }, next: 'gate' }),
diff --git a/tests/types/tsconfig.json b/tests/types/tsconfig.json
index 9d80f81..d212f4c 100644
--- a/tests/types/tsconfig.json
+++ b/tests/types/tsconfig.json
@@ -3,10 +3,19 @@
"noEmit": true,
"strict": true,
"target": "ES2022",
- "lib": ["ES2022", "DOM"],
+ "lib": [
+ "ES2022",
+ "DOM"
+ ],
"module": "NodeNext",
"moduleResolution": "NodeNext",
"skipLibCheck": false
},
- "files": ["dsl.ts", "public-contract.ts", "compiler-api.ts", "../../src/internal.d.ts"]
+ "files": [
+ "dsl.ts",
+ "public-contract.ts",
+ "compiler-api.ts",
+ "../../src/internal.d.ts",
+ "capability-graph.ts"
+ ]
}
diff --git a/types/capability-graph.d.ts b/types/capability-graph.d.ts
new file mode 100644
index 0000000..c99b752
--- /dev/null
+++ b/types/capability-graph.d.ts
@@ -0,0 +1,39 @@
+/** Optional SDK bridge; the host supplies a Graph instance. */
+export interface GraphContext { facts?: Record; notes?: string }
+export interface GraphResolvedNode {
+ capability: { id: string };
+ applicability: { status: 'applicable' | 'inapplicable' | 'unknown' };
+}
+export interface GraphResolution {
+ nodes: GraphResolvedNode[];
+ unresolved: unknown[];
+ meta: { completeness: 'complete' | 'partial' };
+}
+export interface GraphResolver {
+ resolve(query: { ids: string[]; context?: GraphContext; relations?: 'requires'[] }): Promise;
+}
+export interface GraphActionBinding {
+ capabilityId: string;
+ execute(args: { action: string; name: string; ctx: unknown; resolution: GraphResolution; capability: GraphResolvedNode['capability'] }): void | Promise;
+}
+export interface FlowkitCapabilityDeclaration {
+ id: string;
+ name: string;
+ description: string;
+ whenToUse?: string;
+ usage?: { instructions?: string };
+ relations?: { requires?: string[] };
+}
+export declare const flowkitProvider: {
+ schemaVersion: 1;
+ providerId: 'flowkit';
+ name: 'FlowKit';
+ version: string;
+ description: string;
+ capabilities: FlowkitCapabilityDeclaration[];
+};
+export declare function createCapabilityGraphActionAdapter(options: {
+ graph: GraphResolver;
+ bindings: Record;
+ getContext?: (ctx: unknown) => GraphContext;
+}): { runAction(action: string, name: string, ctx: unknown): Promise };
diff --git a/website/content/community/changelog.mdx b/website/content/community/changelog.mdx
index 6f00692..42c131d 100644
--- a/website/content/community/changelog.mdx
+++ b/website/content/community/changelog.mdx
@@ -2,17 +2,18 @@
## 1.0.0
-FlowKit 的首个正式版本。
+FlowKit v1.0.0 发布候选(实际发布状态以 GitHub Packages 记录和 Git Tag 为准)。
- 用 JavaScript / TypeScript 字面量 DSL 定义工作流,支持 Agent、业务动作、验证、并行、条件、循环、人工审批和终点。
- 静态检查流程结构、数据声明、Skill 引用及受限条件表达式,输出可读 JavaScript 和 Mermaid。
- 提供 run、compile、compileSource、check、evalWhen、isControlSignal,以及 compile/check 命令行。
+- 可选 capability-graph Provider 与宿主动作适配:仅负责能力声明、查询约束及显式动作绑定,不内置第二套 Runtime。
- 通过宿主 Runtime 执行业务;支持本地和受限制的 HTTPS Skill、结果校验与重试、跟踪、取消信号及 AOT 一致性检查。
-- 提供详细中文文档、完整确定性示例和 MIT 许可证。
+- 提供详细中文文档、完整确定性示例和专有授权。
需要 Node.js 22.13.0 或更高版本。FlowKit 不内置模型服务、Schema 校验器或持久化审批服务;这些能力由宿主提供。并行分支共享状态,any 汇合不会取消其他分支;AOT 部署仍需保留原始源码和对应 Skill。
-[文档](https://devcodex-labs.github.io/flowkit/) · [npm](https://www.npmjs.com/package/@devcodex/flowkit) · [许可证](https://github.com/devcodex-labs/flowkit/blob/main/LICENSE)
+[文档](https://devcodex-labs.github.io/flowkit/) · GitHub Packages(私有,需授权) · [许可证](https://github.com/devcodex-labs/flowkit/blob/main/LICENSE)
## 选择下一步
diff --git a/website/content/community/compatibility.mdx b/website/content/community/compatibility.mdx
index 5455e0d..173a4c7 100644
--- a/website/content/community/compatibility.mdx
+++ b/website/content/community/compatibility.mdx
@@ -10,7 +10,7 @@
| TypeScript声明 | TypeScript 5.0+,使用const类型参数 |
| 文档站开发 | Node >=24,website独立依赖与锁文件 |
| 文档语言 | 简体中文;当前没有英文翻译版本 |
-| 许可证 | MIT |
+| 授权 | 专有授权;详见 LICENSE,包由 GitHub Packages 私有分发 |
## 自动检查的环境
@@ -26,6 +26,12 @@ FlowKit提供静态DSL编译、图和数据声明检查、可读生成代码、M
## 版本与升级
-首个正式开源版本为1.0.0。消费者建议精确安装并提交锁文件,先在独立环境运行自己的关键流程,再升级生产。工作流自己的version与包版本独立。升级后重新compile/check,旧产物的版本、生成逻辑或选项可能不同,不应直接继续手工拼接使用。
+仓库当前版本为1.0.0,实际发布状态须核对 Git Tag 与 GitHub Packages。消费者建议精确安装并提交锁文件,先在独立环境运行自己的关键流程,再升级生产。工作流自己的version与包版本独立。升级后重新compile/check,旧产物的版本、生成逻辑或选项可能不同,不应直接继续手工拼接使用。
报告兼容问题时提供实际Node/npm/系统版本、包版本和最小复现,见[问题定位](/troubleshooting/index)。当前能力清单见[发布记录](/community/changelog)。
+
+## capability-graph 兼容性
+
+可选 Provider 与宿主动作适配使用独立的 `@devcodex/capability-graph` v2.1.1 SDK 契约。核心六个 SDK 与八类 DSL 节点不变;Graph 的 Provider schemaVersion、声明版本、结果 revision 不等于 FlowKit 版本。Graph 可能与 Node 20 兼容,但 FlowKit 仍要求 Node >=22.13.0;消费者按两者要求取交集。
+
+文档站已获批准公开展示;FlowKit 源码仓库与 GitHub Packages 安装包仍是私有的。站点公开不代表源码开源或授予包下载权限;GitHub Pages 实际可用性和发布授权需在部署时单独核查。
diff --git a/website/content/community/contributing.mdx b/website/content/community/contributing.mdx
index ba9b310..a0b61a6 100644
--- a/website/content/community/contributing.mdx
+++ b/website/content/community/contributing.mdx
@@ -1,10 +1,10 @@
# 参与贡献
-FlowKit是采用MIT许可证的开源项目。欢迎提交可复现的问题、改进中文说明、补充真实使用例和修复实现。先说明要解决的具体用户问题,避免仅因个人风格重写大量无关代码。
+FlowKit 是 devcodex-labs 的私有专有项目,仅允许经过授权的协作者提交可复现的问题、文档改进与实现修复。先说明要解决的具体用户问题,避免仅因个人风格重写大量无关代码。
## 本地准备
-克隆[仓库](https://github.com/devcodex-labs/flowkit),进入根目录。SDK支持Node >=22.13.0;同时开发文档站时使用Node >=24。根包和website各有独立锁文件,分别安装。
+在获授权后克隆[私有仓库](https://github.com/devcodex-labs/flowkit),进入根目录。SDK支持Node >=22.13.0;同时开发文档站时使用Node >=24。根包和website各有独立锁文件,分别安装。
```sh
npm ci --ignore-scripts --no-audit --no-fund
diff --git a/website/content/community/license.mdx b/website/content/community/license.mdx
index c26aa31..fd30827 100644
--- a/website/content/community/license.mdx
+++ b/website/content/community/license.mdx
@@ -1,10 +1,12 @@
-# 开源许可证
+# 授权与使用
-FlowKit v1.0.0使用MIT许可证,版权声明为Copyright (c) 2026 devcodex-labs。根package.json的license字段、仓库LICENSE与发布包内LICENSE保持一致。下面直接包含仓库许可证全文。
+本文档站可公开阅读,但 FlowKit 源码及内部 npm 包仍为专有软件,并通过 **GitHub Packages 私有仓库** 管理。未来客户通过 MCP、托管 API 或工作流设计服务使用能力,**不安装或获得 FlowKit 软件副本**。客户服务与生成工作流的权益由独立服务条款约定。公开展示文档不意味着授予软件复制、修改、再发布或商业使用许可。源代码和二进制包不再以 MIT 作为当前发行授权。获得包的读取权限不自动赋予复制、再分发、再授权或商业转售的权利;具体使用权限以所有者授予的许可和以下协议为准。
```text file="../../../LICENSE" title="LICENSE"
```
-许可证原文保持标准英文法律文本;站点说明与导航为中文。第三方依赖各自保留其许可证,安装包与锁文件可用于识别具体版本。
+这是 FlowKit 项目的许可,不替换 acorn、TypeScript、Rspress 等第三方依赖各自的许可证。若需要额外权利或公开分发,须与权利人另行取得书面授权。
-提交改动前阅读[参与贡献](/community/contributing);项目源代码及许可证文件可在[GitHub仓库](https://github.com/devcodex-labs/flowkit)查看。
+如果此前某个版本曾依 MIT 对外分发,本次变更**不追溯撤销**此前已合法授予的权利。旧版本的历史事实以可验证的原始发布记录为准。
+
+继续阅读[私有包安装](/guide/installation)、[兼容范围](/community/compatibility)和[发布维护](/maintainers/releasing)。
diff --git a/website/content/dsl/index.mdx b/website/content/dsl/index.mdx
index c8b8196..4283706 100644
--- a/website/content/dsl/index.mdx
+++ b/website/content/dsl/index.mdx
@@ -1,6 +1,6 @@
# DSL 总览
-从 `@devcodex/flowkit/dsl` 导入构造器。v1.0.0 公开9个构造器:defineWorkflow 组织工作流,另外8个创建节点。DSL 描述控制流和数据契约,业务执行位于 Runtime。
+从 `@devcodex-labs/flowkit/dsl` 导入构造器。v1.0.0 公开9个构造器:defineWorkflow 组织工作流,另外8个创建节点。DSL 描述控制流和数据契约,业务执行位于 Runtime。
| 构造器 | 节点 type | 用途 | 参考 |
|---|---|---|---|
diff --git a/website/content/examples/capability-graph.mdx b/website/content/examples/capability-graph.mdx
new file mode 100644
index 0000000..ccf640c
--- /dev/null
+++ b/website/content/examples/capability-graph.mdx
@@ -0,0 +1,38 @@
+# capability-graph 宿主消费示例
+
+本示例使用 **独立的** `@devcodex/capability-graph@2.1.1`。FlowKit 不内置 Graph 服务或模型客户端,不改变 `agent`(Skill 路径映射)语义。只有宿主显式绑定的 `action` 会执行。
+
+## 完整文件
+
+```js file="../../../examples/docs/capability-graph/sample.workflow.js" title="sample.workflow.js"
+```
+
+```js file="../../../examples/docs/capability-graph/host.mjs" title="host.mjs"
+```
+
+```js file="../../../examples/docs/capability-graph/verify.mjs" title="verify.mjs"
+```
+
+## 运行命令
+
+在有权限访问 FlowKit GitHub Packages 的消费者项目中安装包(见[私有包安装](/guide/installation)),并安装公开的 Graph 依赖:
+
+```sh
+npm install --save-exact @devcodex/capability-graph@2.1.1
+npx --no-install flowkit compile sample.workflow.js
+npx --no-install flowkit check sample.workflow.js
+node host.mjs
+node verify.mjs
+```
+
+`host.mjs` 预期返回 `status: succeeded`、`terminal: done`,状态中包含 `message: "你好,FlowKit!"`。
+
+## 何时允许执行?
+
+宿主先对明确的 `demo::greet` 进行 `resolve({ids, context, relations:['requires']})`,要求 `meta.completeness === 'complete'`,`unresolved` 为空且全部节点 `applicability.status === 'applicable'`,随后才调用宿主显式注册的执行函数。
+
+图谱的 `requires` 仅声明前置能力,**不会自动执行依赖**。本示例的 `tooling::ready` 是宿主事先具备的实现,真正的前置工作和业务授权仍由宿主验证。Graph 对访问控制失败会原样抛出 `GraphError`;FlowKit 适配器在绑定缺失、依赖不全、适用性未知/不适用时分别抛出 `FK_CG_BINDING_MISSING`、`FK_CG_DEPENDENCIES_INCOMPLETE`、`FK_CG_NOT_APPLICABLE`。
+
+`verify.mjs` 覆盖成功、依赖解析、未知环境、不适用、跨 Provider 未授权和缺少绑定。Graph 的 `match()` 需要显式的 `ModelExecutor`,本示例不额外调用模型。
+
+继续阅读[FlowKit Provider 能力声明](/guide/capability-provider)、[宿主接入](/guide/host-integration)和[SDK 参考](/reference/sdk)。
diff --git a/website/content/examples/index.mdx b/website/content/examples/index.mdx
index 60ce0ee..9a22e3f 100644
--- a/website/content/examples/index.mdx
+++ b/website/content/examples/index.mdx
@@ -1,6 +1,6 @@
# 选择示例
-这些示例围绕具体任务组织。每个场景页都提供完整文件、依赖安装、命令、预期结果和失败恢复;从最接近你的需求的一项开始。示例使用公开包入口,不要求导入源码仓库内部模块。
+这些示例围绕具体任务组织,供公开阅读和内部测试复现。各场景包含完整文件、命令、预期结果和失败恢复;**运行示例仅限拥有私有包权限的内部维护者**,付费服务用户无需安装 FlowKit。示例使用包的公开导出入口,不通过内部源码路径导入。
## 按任务选择
@@ -19,6 +19,8 @@
| 理解多次运行和缓存 | [run的完整例子](/reference/sdk#run) | state浅复制 |
| 调用全部SDK并观察trace/dump | [跟踪与运行记录](/guide/observability) | SDK与文件产物 |
+[capability-graph 双向集成](/examples/capability-graph) 作为 E13 示例,演示 Provider 声明和宿主明确绑定动作;需要单独安装 Graph SDK。
+
## 示例的依赖和边界
运行环境为Node >=22.13.0,FlowKit精确版本1.0.0,消费者package.json设置type:module。JavaScript例不需要模型密钥;TS类型演练另装TypeScript 5.0+。每个目录独立保留自己的package.json,避免项目根查找受到仓库上层目录影响。
@@ -27,10 +29,10 @@
## 文件从哪里来
-教程代码与仓库[examples/docs](https://github.com/devcodex-labs/flowkit/tree/main/examples/docs)中的主源保持一致。主源的verify.mjs保存成功、失败与恢复断言,manifest列出12组消费者案例。站点构建直接包含主源文件,README最小例从同一来源同步。
+教程代码与仓库私有目录 `examples/docs` 中的主源保持一致。该目录仅向有权限的维护者开放;公开读者可以直接阅读本站嵌入的代码。主源的verify.mjs保存成功、失败与恢复断言,manifest 列出 E01–E13 共 13 组内部验证用例。站点构建直接包含主源文件,README最小例从同一来源同步。
## 推荐运行方式
-先在空目录按页面复制文件并安装确切版本,避免把已有业务项目改坏。执行成功路径后再尝试页面明确给出的失败变体,每次恢复原设置并复验。只看compile成功还不够:检查产物、运行结果、状态字段、事件顺序和退出码。
+内部维护者可以在空目录按页面复制文件并安装精确版本,避免影响已有业务项目。执行成功路径后再尝试页面明确给出的失败变体,每次恢复原设置并复验。只看compile成功还不够:检查产物、运行结果、状态字段、事件顺序和退出码。
-维护仓库时可执行`npm run build`及`npm run docs:examples`:它在临时目录真实安装候选tarball,用独立消费者运行所有案例。这个本地候选验证不等于公开npm包或线上站点已经通过验证。遇到差异从[问题定位](/troubleshooting/index)开始。
+维护仓库时可执行`npm run build`及`npm run docs:examples`:它在临时目录真实安装候选tarball,用独立消费者运行所有案例。这个本地候选验证不等于私有 GitHub Packages 包或线上站点已经通过验证。遇到差异从[问题定位](/troubleshooting/index)开始。
diff --git a/website/content/guide/cancellation.mdx b/website/content/guide/cancellation.mdx
index 7f74405..1782a49 100644
--- a/website/content/guide/cancellation.mdx
+++ b/website/content/guide/cancellation.mdx
@@ -7,7 +7,7 @@
Runtime 必须提供 `isControlSignal(err)`。公开同名函数识别带 `control: true` 的控制标记;宿主也可以按自身约定扩展判定。控制信号与普通失败分开传播,避免把主动取消误当成 Agent 可重试的生成失败。
```js
-import { isControlSignal } from '@devcodex/flowkit';
+import { isControlSignal } from '@devcodex-labs/flowkit';
console.log(isControlSignal({ control: true, kind: 'cancel' })); // true
console.log(isControlSignal(new Error('网络失败'))); // false
```
diff --git a/website/content/guide/capability-provider.mdx b/website/content/guide/capability-provider.mdx
new file mode 100644
index 0000000..e4c80ec
--- /dev/null
+++ b/website/content/guide/capability-provider.mdx
@@ -0,0 +1,38 @@
+# 向 capability-graph 声明 FlowKit 能力
+
+FlowKit 通过 `@devcodex-labs/flowkit/capability-graph` 导出 `flowkitProvider`。它是一份满足 `capability-graph` Provider Schema v1 的**静态能力声明**,不是额外的执行器。
+
+## 已声明的能力
+
+| ID | 含义 |
+|---|---|
+| `flowkit::define-workflow` | 使用静态 JS/TS DSL 定义工作流 |
+| `flowkit::compile-workflow` | 编译生成可执行 JS 与 Mermaid |
+| `flowkit::check-workflow` | 检查定义及已有编译产物 |
+| `flowkit::run-workflow` | 由显式提供的宿主 Runtime 执行 |
+| `flowkit::render-mermaid` | 生成工作流可视化 |
+
+## 用 Graph 查询
+
+```js
+import { CapabilityGraph } from '@devcodex/capability-graph';
+import { flowkitProvider } from '@devcodex-labs/flowkit/capability-graph';
+
+const graph = await CapabilityGraph.open({ providers: [{ definition: flowkitProvider }] });
+try {
+ const catalog = await graph.listCatalog();
+ const details = await graph.getCapabilities({ ids: ['flowkit::run-workflow'] });
+ const result = await graph.resolve({ ids: ['flowkit::render-mermaid'] });
+ console.log(catalog.items.length, details.items.length, result.meta.completeness);
+} finally {
+ await graph.close();
+}
+```
+
+Graph 的 `requires` 表示能力前置关系(例如 `render-mermaid` 需要 `compile-workflow`),**不决定工作流执行顺序**。FlowKit 自己的 `src/compiler/graph.mjs` 负责控制流图检查,与 Capability Graph 能力声明系统不是同一种图。
+
+## 版本、权限与限制
+
+此 Provider 声明版本随 FlowKit 包版本维护,不等于 Graph SDK 版本,也不等于 Graph 的结果 `revision`。`allowedProviders` 限定可见来源;`getCapabilities`、`resolve` 只读声明,不执行业务动作。FlowKit 的 `agent` 参数仍表示 Skill 映射,而非 Graph 能力 ID。
+
+如需将已解析能力绑定到业务操作,参见[宿主消费示例](/examples/capability-graph)。所有模型、动作权限和外部 IO 均由宿主提供。
diff --git a/website/content/guide/compile-artifacts.mdx b/website/content/guide/compile-artifacts.mdx
index cd376ae..6d302e6 100644
--- a/website/content/guide/compile-artifacts.mdx
+++ b/website/content/guide/compile-artifacts.mdx
@@ -46,8 +46,8 @@ check 每次重新编译源码。若 compiled 文件存在,就逐字节比较
## 从文本编译
```js
-import { compileSource } from '@devcodex/flowkit';
-const text = "import { defineWorkflow, terminal } from '@devcodex/flowkit/dsl';\nexport default defineWorkflow({ id: 'demo', version: '1.0.0', name: '演示', nodes: [terminal('done', { name: '完成', status: 'succeeded' })] });";
+import { compileSource } from '@devcodex-labs/flowkit';
+const text = "import { defineWorkflow, terminal } from '@devcodex-labs/flowkit/dsl';\nexport default defineWorkflow({ id: 'demo', version: '1.0.0', name: '演示', nodes: [terminal('done', { name: '完成', status: 'succeeded' })] });";
const result = await compileSource(text, { filename: 'virtual.workflow.js' });
console.log(result.diagnostics);
```
diff --git a/website/content/guide/conditions.mdx b/website/content/guide/conditions.mdx
index ed4cf2c..47ec346 100644
--- a/website/content/guide/conditions.mdx
+++ b/website/content/guide/conditions.mdx
@@ -3,7 +3,7 @@
condition 的 when 是一段受限表达式字符串,用来读取 state 并返回 boolean。它不执行 JavaScript,也不调用宿主函数。Runtime 中显式提供公开的 `evalWhen`,即可采用 FlowKit 的默认语义。
```js
-import { run, evalWhen, isControlSignal } from '@devcodex/flowkit';
+import { run, evalWhen, isControlSignal } from '@devcodex-labs/flowkit';
const runtime = { evalWhen, isControlSignal /* 以及工作流需要的业务方法 */ };
```
@@ -27,7 +27,7 @@ const runtime = { evalWhen, isControlSignal /* 以及工作流需要的业务方
**比较运算先于取反,不能照搬 JavaScript 的 `!` 优先级。** `!a === b` 在这里表示 `!(a === b)`。当 state 为 `{ a: 1, b: 2 }` 时,两者都返回 true;写成 `(!a) === b` 则会因为数字不是 boolean 而抛出 `FK_R002`。建议把需要取反的整个条件放进括号:
```js
-import { evalWhen, isControlSignal } from '@devcodex/flowkit';
+import { evalWhen, isControlSignal } from '@devcodex-labs/flowkit';
const ctx = { runtime: { isControlSignal }, state: { a: 1, b: 2 } };
console.log(evalWhen(ctx, '!(a === b)')); // true
```
@@ -41,7 +41,7 @@ console.log(evalWhen(ctx, '!(a === b)')); // true
`&&` 和 `||` 短路。例如 `false && score > 0` 不求值右侧,`true || score > 0` 同理。推荐使用明确的存在性布尔键,或者由宿主把可选输入归一成可比较类型;表达式没有通用的 typeof/可选链/函数调用机制。
```js
-import { evalWhen, isControlSignal } from '@devcodex/flowkit';
+import { evalWhen, isControlSignal } from '@devcodex-labs/flowkit';
const ctx = { runtime: { isControlSignal }, state: { ready: true, score: 90 } };
console.log(evalWhen(ctx, 'ready && score >= 80')); // true
```
diff --git a/website/content/guide/host-integration.mdx b/website/content/guide/host-integration.mdx
index aaaf76b..b026f5b 100644
--- a/website/content/guide/host-integration.mdx
+++ b/website/content/guide/host-integration.mdx
@@ -50,3 +50,7 @@ isControlSignal 始终必需。Agent 需要 runAgent 和 validateResult;action
同一文件可多次调用 run。每次都有新 state/Ctx/默认 Skill loader;成功编译和加载的 DSL 可能命中进程内缓存,业务结果不会被缓存。Skill 文件改变会在下一次运行重新读取。完整缓存键、失败分类和长期进程边界见 [run](/reference/sdk#run)。
遇到本地 Skill 缺失先核对 projectRoot 和实际文件;输出不合 Schema 看 reasons;审批返回字符串会触发 FK_R002。修复后依次复验 compile、check、run,并确认事件顺序和结果状态。
+
+## 使用 capability-graph 检查并绑定能力
+
+若宿主需要 Provider 目录、适用性或跨 Provider 依赖检查,可使用[capability-graph 宿主消费示例](/examples/capability-graph)中的可选动作适配器。FlowKit 自身只负责执行工作流,不会自动执行 Graph 的 `requires` 依赖;宿主必须显式绑定被授权的动作。普通 `runAgent`/Skill 映射规则保持不变。
diff --git a/website/content/guide/installation.mdx b/website/content/guide/installation.mdx
index 1875af5..d8e2bb1 100644
--- a/website/content/guide/installation.mdx
+++ b/website/content/guide/installation.mdx
@@ -1,11 +1,13 @@
-# 安装与环境
+# 内部安装与环境
-本页从一个空目录安装 FlowKit v1.0.0,确认导入和命令行可用。使用 SDK 不需要克隆 FlowKit 仓库,也不需要安装文档站依赖。
+**本页只针对 FlowKit 项目维护者及内部部署人员,不是面向客户的产品安装教程。** FlowKit 不向未来付费用户分发软件包;他们将通过计划中的 MCP、托管 API 或工作流设计服务使用能力。公开读者无需创建令牌或安装包。
+
+下面从一个空目录安装内部私有 FlowKit v1.0.0,验证 SDK 与 CLI。实际在 GitHub Packages 中是否已经发布该版本,须以 Registry 记录为准。
## 前置条件
- Node.js **22.13.0 或更高版本**,包含 npm。
-- 一个可写的本地目录,以及访问 npm registry 的网络连接。
+- 一个可写的本地目录、可访问 GitHub Packages 的网络连接和项目所有者授予的读取权限。
- 示例宿主使用 `.mjs`,工作流使用 `.workflow.js`;它们遵循 ESM 导入方式。
先检查实际环境:
@@ -19,6 +21,15 @@ Node 版本低于最低要求时,先升级并确认终端正在使用新版本
## 创建项目并精确安装
+FlowKit 只在内部通过 **GitHub Packages 私有 npm Registry** 管理安装包。维护者须具备该包的读取权限,并使用具有 `read:packages` 的 GitHub Personal Access Token(classic)。在消费者目录创建 `.npmrc`(不要提交凭据),内容如下:
+
+```ini
+@devcodex-labs:registry=https://npm.pkg.github.com
+//npm.pkg.github.com/:_authToken=${NODE_AUTH_TOKEN}
+```
+
+在 PowerShell 中执行 `$env:NODE_AUTH_TOKEN = "你的令牌"`,在 Bash 中执行 `export NODE_AUTH_TOKEN="你的令牌"`,令牌只应通过安全的本地环境或密钥管理注入。若组织启用了 SSO,需确认令牌已获授权。**不要将真实令牌写入代码、截图或日志。**
+
以下命令可用于 PowerShell 和常见 POSIX shell;每行分别执行。
```sh
@@ -26,27 +37,27 @@ mkdir flowkit-demo
cd flowkit-demo
npm init -y
npm pkg set type=module
-npm install --save-exact @devcodex/flowkit@1.0.0
+npm install --save-exact @devcodex-labs/flowkit@1.0.0
```
-`--save-exact` 让 package.json 保存明确版本。保留 npm 生成的 package-lock.json,在其他机器上用 `npm ci` 安装一致的依赖。
+`@devcodex-labs/flowkit` 是内部私有包,不对外提供安装。`--save-exact` 让 package.json 保存明确版本。保留 npm 生成的 package-lock.json,在其他机器上用 `npm ci` 安装一致的依赖。
确认包身份:
```sh
-node --input-type=module -e "import p from '@devcodex/flowkit/package.json' with {type:'json'}; console.log(p.name, p.version)"
+node --input-type=module -e "import p from '@devcodex-labs/flowkit/package.json' with {type:'json'}; console.log(p.name, p.version)"
```
-预期为 `@devcodex/flowkit 1.0.0`。如果显示其他版本,检查当前目录的 package.json、lock 文件和 `npm ls @devcodex/flowkit`,不要仅根据全局安装结果判断。
+预期为 `@devcodex-labs/flowkit 1.0.0`。如果显示其他版本,检查当前目录的 package.json、lock 文件和 `npm ls @devcodex-labs/flowkit`,不要仅根据全局安装结果判断。
## 公开导入入口
```js
-import { run, compile, compileSource, check, evalWhen, isControlSignal } from '@devcodex/flowkit';
-import { defineWorkflow, node, action, verification, parallel, condition, loop, human, terminal } from '@devcodex/flowkit/dsl';
+import { run, compile, compileSource, check, evalWhen, isControlSignal } from '@devcodex-labs/flowkit';
+import { defineWorkflow, node, action, verification, parallel, condition, loop, human, terminal } from '@devcodex-labs/flowkit/dsl';
```
-根入口提供 SDK,`/dsl` 提供定义构造器。不要从包的内部 `src` 或 `dist` 子路径导入。安装后的 `flowkit` 可执行命令只有 `compile` 和 `check`;执行工作流由宿主调用 SDK 的 `run`。
+根入口提供 SDK,`/dsl` 提供定义构造器,`/capability-graph` 提供可选 Provider 与宿主绑定适配器(使用时另行安装 `@devcodex/capability-graph`)。不要从包的内部 `src` 或 `dist` 子路径导入。安装后的 `flowkit` 可执行命令只有 `compile` 和 `check`;执行工作流由宿主调用 SDK 的 `run`。
## 准备文件目录
@@ -66,9 +77,9 @@ flowkit-demo/
| 现象 | 检查与处理 |
|---|---|
| 找不到 `node` / `npm` | 在新终端检查 PATH,确认安装的 Node 版本;先让版本命令可执行 |
-| registry 超时或无法访问 | 检查网络和 `npm config get registry`;公共包地址为 registry.npmjs.org |
+| registry 超时或无法访问 | 检查网络和 `npm config get registry`;FlowKit 的 scoped registry 应为 npm.pkg.github.com;检查令牌、SSO、包权限和组织 Scope |
| `ERR_MODULE_NOT_FOUND` | 在有 package.json 的消费者目录安装,确认 host 文件位于该项目内 |
-| `ERR_PACKAGE_PATH_NOT_EXPORTED` | 改用上面的三个公开入口,不访问内部文件 |
+| `ERR_PACKAGE_PATH_NOT_EXPORTED` | 改用上面的三个受支持入口,不访问内部文件 |
| CLI 命令不存在 | 在已安装包的目录使用 `npx --no-install flowkit ...`;此写法不会偷偷下载其他版本 |
| 版本不存在或安装内容不匹配 | 保留错误与registry信息,核查精确版本;不要把未成功的安装当成可运行环境 |
diff --git a/website/content/guide/introduction.mdx b/website/content/guide/introduction.mdx
index 59eedbb..207c64d 100644
--- a/website/content/guide/introduction.mdx
+++ b/website/content/guide/introduction.mdx
@@ -1,6 +1,6 @@
# 项目介绍
-FlowKit 是面向 Node.js 的工作流编排工具。你用 JavaScript / TypeScript DSL 描述节点和连接关系,编译器检查流程结构,再通过宿主 Runtime 执行 Agent、业务动作、验证和人工审批。
+FlowKit 是供项目所有者内部运营的 Node.js 工作流基础设施。内部开发者使用 JavaScript / TypeScript DSL 描述节点和连接关系,编译器检查流程结构,再通过宿主 Runtime 执行 Agent、业务动作、验证和人工审批。代码、安装包和运行环境不作为面向客户的分发产品。
本文帮助你判断适用场景、理解各部分职责,并选择第一条学习路径。
@@ -45,6 +45,16 @@ FlowKit 是面向 Node.js 的工作流编排工具。你用 JavaScript / TypeScr
状态以浅复制开始;嵌套对象仍可能与初始输入共享引用,并行分支使用同一份运行状态。`any` 返回不代表其他分支已停止。审批等待、持久化和重启后的恢复由宿主设计,不能依赖一个未提供的内置服务。
+## capability-graph 的两个接入方向
+
+FlowKit 可通过 `@devcodex-labs/flowkit/capability-graph` 提供静态 Provider 声明,供外部宿主发现能力;也能在宿主层使用 Graph SDK 解析能力、检查适用性与前置依赖,再通过显式绑定的动作执行。Graph 不负责工作流步骤排序、执行或持久化。[Provider 声明](/guide/capability-provider)与[真实宿主示例](/examples/capability-graph)分别验证这两条路径。
+
+目前核心实现以 JS/TS DSL 为输入,不提供自然语言直接生成工作流的公共 API。模型若参与生成 DSL,其生成、审查与授权流程由宿主负责,不能把该组合写成 FlowKit 内置能力。
+
+## 商业服务方向与现阶段边界
+
+计划中的对外形式包括 MCP、托管 API 或专门的付费工作流设计服务。FlowKit 会作为运营方掌控的内部引擎,客户不需要安装 FlowKit。这些服务入口、用户认证、计费、输出授权与产品界面**目前尚未在 FlowKit 核心实现中交付**,不得把规划当作可用功能。
+
## 从哪里开始
-先阅读[安装与环境](/guide/installation),再按[第一个工作流](/guide/quick-start)完成两个文件的例子。你应先观察到实际成功状态、终点和写入值,再把动作替换为自己的业务函数。
+公开读者可从[工作流模型](/guide/workflow-model)和[示例](/examples/index)了解技术能力。获得内部开发权限的维护者可按[内部安装与环境](/guide/installation)和[第一个工作流](/guide/quick-start)复现代码。
diff --git a/website/content/guide/javascript-typescript.mdx b/website/content/guide/javascript-typescript.mdx
index 382925c..1d2d82a 100644
--- a/website/content/guide/javascript-typescript.mdx
+++ b/website/content/guide/javascript-typescript.mdx
@@ -4,7 +4,7 @@ FlowKit v1.0.0 使用同一套 DSL 编译 JavaScript 与 TypeScript。选择你
## 文件名与入口
-工作流必须以 `.workflow.js` 或 `.workflow.ts` 结尾,并从 `@devcodex/flowkit/dsl` 导入构造器,默认导出 `defineWorkflow(...)`。宿主可以是普通 `.mjs`,从 `@devcodex/flowkit` 调用 SDK。这两个入口都属于公开接口,不需要导入 dist 内部文件。
+工作流必须以 `.workflow.js` 或 `.workflow.ts` 结尾,并从 `@devcodex-labs/flowkit/dsl` 导入构造器,默认导出 `defineWorkflow(...)`。宿主可以是普通 `.mjs`,从 `@devcodex-labs/flowkit` 调用 SDK。这两个入口都属于公开接口,不需要导入 dist 内部文件。
下面是同一个条件分流流程的两种写法。分别保存到同一消费者目录时,注意它们生成的 `sample.compiled.mjs` 同名;逐个编译验证,或者使用不同基础文件名保存两个产物。
diff --git a/website/content/guide/quick-start.mdx b/website/content/guide/quick-start.mdx
index ebf5652..2662259 100644
--- a/website/content/guide/quick-start.mdx
+++ b/website/content/guide/quick-start.mdx
@@ -2,11 +2,11 @@ import { Mermaid } from '../../components/Mermaid';
# 第一个工作流
-本教程完成一个不需要模型密钥的流程:宿主生成问候,FlowKit 进入成功终点,返回最终状态。你会依次创建两个文件、编译、检查并运行;所有命令均在消费者项目根目录执行。
+本教程是**内部开发验证用例**,公开读者可以阅读流程但不需要获得安装权限。它完成一个不需要模型密钥的流程:宿主生成问候,FlowKit 进入成功终点,返回最终状态。你会依次创建两个文件、编译、检查并运行;所有命令均在消费者项目根目录执行。
## 1. 准备环境
-先按[安装与环境](/guide/installation)安装 `@devcodex/flowkit@1.0.0`。确认 Node >=22.13.0,package.json 包含 `"type": "module"`。开始时无需 Skill 文件或额外环境变量。
+先配置私有 GitHub Packages 访问令牌,再按[安装与环境](/guide/installation)安装 `@devcodex-labs/flowkit@1.0.0`。确认 Node >=22.13.0,package.json 包含 `"type": "module"`。开始时无需 Skill 文件或额外环境变量。
```text
flowkit-demo/
diff --git a/website/content/index.mdx b/website/content/index.mdx
index 8ff9f3f..ea33377 100644
--- a/website/content/index.mdx
+++ b/website/content/index.mdx
@@ -3,11 +3,11 @@ pageType: home
hero:
name: FlowKit
text: 把业务步骤写成清晰的工作流
- tagline: 用 JavaScript / TypeScript 定义流程,通过宿主 Runtime 连接 Agent、业务操作和人工审批。首个正式版本 v1.0.0 · MIT
+ tagline: 用 JavaScript / TypeScript 定义流程,通过宿主 Runtime 连接 Agent、业务操作和人工审批。v1.0.0 · 专有授权 · 私有分发
actions:
- theme: brand
- text: 快速开始
- link: /guide/quick-start
+ text: 了解 FlowKit
+ link: /guide/introduction
- theme: alt
text: 查看示例
link: /examples/index
@@ -33,7 +33,7 @@ import { Mermaid } from '../components/Mermaid';
```js file="../../examples/docs/quick-start/sample.workflow.js" title="sample.workflow.js"
```
-完整的宿主、安装命令和预期输出见[快速开始](/guide/quick-start)。第一次使用不需要模型密钥。
+完整的宿主实现和预期输出见[内部开发示例](/guide/quick-start)。该示例供技术说明与内部验证使用,公开读者不需要安装包或模型密钥。
## 适合你的任务吗
@@ -41,4 +41,12 @@ import { Mermaid } from '../components/Mermaid';
FlowKit 是进程内编排工具。它不内置工作流数据库、跨进程恢复、审批界面或模型服务。并行分支共享状态;选择 `any` 汇合不会自动取消其他分支。先从小流程验证业务边界,再增加节点。
-[项目介绍](/guide/introduction) · [安装与环境](/guide/installation) · [GitHub](https://github.com/devcodex-labs/flowkit) · [MIT 许可证](https://github.com/devcodex-labs/flowkit/blob/main/LICENSE)
+[项目介绍](/guide/introduction) · [安装与环境](/guide/installation) · [授权与使用](/community/license)
+
+需要能力发现或跨 Provider 依赖判断时,可选用[FlowKit Provider 声明](/guide/capability-provider)与[capability-graph 宿主示例](/examples/capability-graph);它们不改变现有 DSL 的控制流执行契约。
+
+## 对外服务方向
+
+FlowKit 是私有工作流基础设施,拟通过 **MCP 服务、托管 API 或付费工作流设计产品** 对外提供工作流能力,而不是向付费客户交付 npm 包。以上是计划中的商业化方向,**目前未提供可直接购买或调用的正式服务**。
+
+本站文档允许公开阅读;FlowKit 源代码、软件包和内部部署环境仍为私有。公开技术示例不等于开放源码,也不授予安装或分发权利。未来客户取得的生成工作流产物使用权,将由单独的产品服务条款明确。
diff --git a/website/content/maintainers/releasing.mdx b/website/content/maintainers/releasing.mdx
index c310e0f..0547dad 100644
--- a/website/content/maintainers/releasing.mdx
+++ b/website/content/maintainers/releasing.mdx
@@ -1,87 +1,51 @@
# 发布维护
-本页面向维护者,说明v1.0.0候选、npm发布、公开消费与文档站部署的顺序。普通用户只需按[安装](/guide/installation)使用包,不需要运行发布命令。
+此页仅供具有仓库与 GitHub Packages 发布权限的内部维护者使用。FlowKit 是内部运营的专有基础设施,未来客户通过托管 MCP/API 或付费工作流设计服务使用能力,不向客户提供 npm 包。内部软件包只发布至 **GitHub Packages 私有 npm Registry**,不再向 npmjs 发布。包名为 `@devcodex-labs/flowkit`,Registry 为 `https://npm.pkg.github.com/`。
-## 不可跳过的顺序
+## 不可跳过的流程
-候选包与站点检查通过 → 发布同一候选tarball → 验证公开npm精确版本 → 独立安装运行全部教程 → 构建对应提交的站点 → GitHub Pages部署 → 线上复验。构建或dry run成功不等于发布成功。
+冻结 Commit 与版本 → 运行 CI(SDK/类型/12+E13 文档消费者)→ 核查候选 tarball 与 SHA256 → 通过 `publish.yml` 发布到 GitHub Packages → 用有读取权限的身份读取已发布精确版本 → 比对 Registry 下载包与已审阅 tarball → 构建并验证站点 → 依据批准的站点可见性策略部署。
-首个正式版本为1.0.0。package.json、package-lock、LICENSE、CHANGELOG、README和生成示例必须一致。SDK与站点有独立锁文件,发布候选不能依赖移动的main或未记录的本机缓存。
+**本页为操作规范,不表示候选版本已经发布。** 当前 `main` 的源码版本不等同于 Registry 已有版本;不能移动现有 Tag 或以重新打包代替原始发行字节。
-## 准备可审阅的候选
+## 准备候选
-在仓库根目录、Node >=24环境执行:
+在 Node >=24 和获授权的工作区执行:
```sh
npm ci --ignore-scripts --no-audit --no-fund
npm --prefix website ci --ignore-scripts --no-audit --no-fund
npm run verify
npm run docs:check
-npm run docs:examples -- --evidence .tmp/docs/candidate.json
+npm run docs:examples
npm run docs:build
-npm run docs:preview -- --host 127.0.0.1 --port 4173
-```
-
-在/flowkit/实际检查首页、教程、参考、搜索、错误深链、代码复制、移动布局和404。示例主源变化时先docs:sync;版本/生成逻辑变化时才build及update:goldens,审阅生成差异后重跑对应检查。
-
-## 固定最终包字节
-
-```sh
npm run release:check -- --tag v1.0.0
npm run release:pack -- --tag v1.0.0
node scripts/release.mjs verify --tag v1.0.0
-npm run docs:examples -- --package .tmp/release/devcodex-flowkit-1.0.0.tgz --manifest .tmp/release/release.json --evidence .tmp/docs/release-candidate.json
-```
-
-release目录必须恰有tgz和release.json两个文件。脚本将tarball的SHA256、成员列表及每个文件字节与源码绑定。有旧候选时先记录和移出原证据,不覆盖不明文件,也不在下载后重新pack替换字节。最后消费的必须是实际待发布tarball。
-
-## CI和npm发布
-
-ci.yml保留Ubuntu/Windows×Node22.13.0/24.22.1四环境原验证,追加教程消费者;独立网站任务进行类型、内容、检查器测试和生产构建。publish.yml在tag触发后先preflight和CI,再pack一次、消费同一包、下载核对,然后使用npm trusted publishing发布。
-
-GitHub仓库的npm OIDC、Pages来源、github-pages环境保护和所需权限须由维护者在真正发布前核实。workflow文件存在不代表这些远端设置已经生效。发布tag/push、npm写入与Pages部署需要项目维护者明确批准。
-
-## 发布后验证公开包
-
-```sh
-npm run docs:public-package -- --version 1.0.0 --manifest .tmp/release/release.json --evidence .tmp/docs/public-package.json
-npm run docs:examples -- --registry-version 1.0.0 --manifest .tmp/release/release.json --evidence .tmp/docs/public-consumer.json
```
-第一个命令从registry读取精确版本元数据、下载实际tgz,核对name/version/dist.integrity和候选SHA256。只有版本尚不可见的E404会有限重试,最多5次、间隔15秒;完整测试失败不被当作传播延迟掩盖。
-
-第二个命令使用新的临时安装目录/cache,精确安装公开1.0.0,核对安装文件和下载tarball字节,并运行12组教程和TS检查。只看npm view、latest或版本字符串不够。任一失败都阻止文档部署。
-
-## 双提交与原发布身份
-
-docs.yml的自动和手动入口都需要五个输入:packageReleaseCommit、docsCommit、version、releaseRunId、releaseRunAttempt。两个commit必须是40位SHA;version为1.0.0。正常首发两个commit相同,手动重试也不默认取main。
-
-原pack任务上传两份按attempt区分的artifact:`npm-release-`包含原tgz和release.json;`release-identity-`包含release-record.json。记录绑定仓库、publish.yml、run/attempt、tag/version、原包commit、npm artifact ID/digest、manifest/tgz SHA256。attempt后缀避免同一run重跑覆盖原身份。
-
-文档任务通过Actions API核对原run的仓库、工作流、tag、head_sha、attempt和pack/publish已成功的job,再下载具体artifact ID。自动调用时run尚未结束,所以不要求整个run成功;手动可恢复“npm成功而文档失败”的run。缺失、过期、错run/commit或替换manifest均拒绝部署。
-
-两份artifact请求保留90天,实际期限受仓库策略限制。发布交付时同时归档原字节、hash和实际到期时间。过期后不能重新pack冒充原候选;需要项目方提供原归档并确认来源,准备单独的恢复步骤。当前入口会保持失败,不自动猜测来源。
-
-## npm已成功但文档需修复
+版本应与 package、lock、CHANGELOG 与 Tag 一致。此步骤只准备候选,不执行真实发布。检查 `.tmp/release/` 仅包含按白名单生成的 tarball 和 release.json,记录包 SHA256、成员、原 Commit 与构建环境。
-保留packageReleaseCommit、v1.0.0 tag及原tgz不变,指定经过审阅且获准部署的后继docsCommit。差异只允许website/、docs/、examples/docs/、scripts/docs/及.github/workflows/docs.yml;README、包元数据、LICENSE、src/types和其他包构建源不得变化。
+## GitHub Packages 权限和发布
-原包在原提交的隔离checkout核验,文档在docsCommit构建;修复后的教程仍消费原公开包。通过祖先关系/路径白名单/原包字节校验后,重新检查受影响读者任务和站点,再部署。超出白名单需重新评估变更范围,不能移动旧tag或重发不可变1.0.0。
+发布必须先经授权确认 LICENSE 草案和具体发布版本,再将仓库变量 `FLOWKIT_ENABLE_PACKAGE_PUBLISH` 设置为 `true`;默认关闭以防误发布。发布工作流只允许使用 `packages:write` 的 `GITHUB_TOKEN` 与正确的组织 Scope,配置 `actions/setup-node` 的 `registry-url: https://npm.pkg.github.com`。发布命令不得出现 `--access public` 或 `registry.npmjs.org`。首次发布后通过 `scripts/docs/check-package-privacy.mjs` 核实包的 **Private** 可见性及 Actions 访问授权;GitHub 仓库 Private 并不自动证明包权限正确。
-## 部署证据与失败处理
+消费方配置 scoped `.npmrc`,令牌由环境变量注入。仓库外消费者通常需要有 `read:packages` 的 PAT (classic);Actions 从本仓库读取私有包可在适当授权下使用 `GITHUB_TOKEN`。不要在 GitHub Pages、日志或 GitHub Actions Artifact 中保存 Token。完整配置见[安装](/guide/installation)。
-站点产物名称为 `github-pages--`。build作业输出实际名称,deploy沿用该输出选择唯一产物。原包的releaseRunId/releaseRunAttempt保持原发布身份,不跟随站点重跑改变。
+## 不可变发布与文档部署证据
-恢复时区分三条路径:
+`publish.yml` 的 preflight/CI/pack/publish/private-consumer 阶段必须全部成功;`docs.yml` 应核验原发布 Run/Attempt、`packageReleaseCommit`、`docsCommit`、Tag、tarball SHA256 与产物身份。原包与文档源可以是不同 Commit,但文档修订必须满足原白名单和祖先关系,不能借修订文档偷改已发布包。
-- 新建workflow_dispatch:新的docs run生成新名称;仍须通过原包身份、公开消费和文档提交检查。
-- 同一个docs run重新执行build/upload:新build attempt生成不同名称,不覆盖前次产物;deploy使用这次build的输出。
-- 仅重试deploy:沿用已成功build的输出名称,不能按当前deploy attempt重新计算。要求原站点产物仍存在且未过期;当前上传动作默认保留1天。产物过期或被删除时,重新构建,或新建dispatch;原包证据也必须仍满足上文的身份和期限要求。
+从私有 Registry 执行 `docs:private-package`,必须验证确切版本的 `dist.integrity`、tarball 哈希、包名和版本,再运行全部教程消费者用例,不能把无访问权限的 `404` 当作包不存在或发布成功。
-这些配置描述支持的恢复流程;维护者仍须在真实Actions中核对每次选中的artifact名称、来源和部署结果。
+**公开文档站已获项目负责人批准**,目标地址为 GitHub Pages `/flowkit/`;FlowKit 仓库和 GitHub Packages 仍保持私有。自动部署前须核对实际 Pages 权限、环境保护和公开内容边界。网站的搜索索引和 sitemap 公开,但不得包含凭据、私有源码、内部资料或要求未授权访问者打开私有仓库的无说明链接。
-仅deploy job拥有pages:write/id-token:write,使用github-pages环境;构建和PR不部署。site-build.json绑定两个commit、包hash和website锁hash。上传并部署后实查首页、快速开始、SDK、错误锚点、资源、中文lang、canonical/sitemap及搜索,再在新消费者目录跑公开包关键路径。
+## 失败与恢复
-npm失败或公开包不可用:停止站点,先查registry实际状态,避免盲目重复发布。站点失败:保留npm事实,按同提交重试或允许的文档修复通道处理。首发没有上一版本可回退时,准备修复候选;不伪称已经回退成功。线上故障的下线、回退和重新部署按维护者实际授权执行。
+- 候选验证失败:不发布,不改原 Tag,不用跳过失败测试代替修复
+- Registry 发布失败:先查实际版本与权限,避免对不可变版本重复发布
+- Registry 消费失败:核查 token/scope/组织权限与下载字节,不只依赖 `npm view`
+- 文档构建失败:保留原发布身份、tarball 与 Artifact,按允许的文档修复范围重建
+- Artifact 过期:需要找回可验证原始字节,不能重包冒充原已发布产物
-工作流依赖使用固定commit SHA。Pages动作和Actions身份读取方式依据[upload-pages-artifact](https://github.com/actions/upload-pages-artifact)、[deploy-pages](https://github.com/actions/deploy-pages)及[Actions API](https://docs.github.com/en/rest/actions/workflow-runs)维护;升级时重新核对第一方契约并运行身份正反例。
+可通过 `npm run docs:check` 与 `npm run docs:build` 验证站点;站点公开已获确认,但**上线仍是单独的发布动作**:只有通过站点披露审查、权限核对与维护者批准后,才将仓库变量 `FLOWKIT_ENABLE_PAGES_DEPLOY` 设为 `true` 并部署。默认情况下文档发布任务不会部署 Pages。第三方依赖与其许可证不会因 FlowKit 改为专有软件而改变。
diff --git a/website/content/reference/cli.mdx b/website/content/reference/cli.mdx
index d56bd6b..bca0ae0 100644
--- a/website/content/reference/cli.mdx
+++ b/website/content/reference/cli.mdx
@@ -1,6 +1,6 @@
# 命令行
-安装 `@devcodex/flowkit@1.0.0` 后得到flowkit命令。v1.0.0只有compile和check;运行工作流请创建宿主并调用SDK run,没有flowkit run子命令。
+安装 `@devcodex-labs/flowkit@1.0.0` 后得到flowkit命令。v1.0.0只有compile和check;运行工作流请创建宿主并调用SDK run,没有flowkit run子命令。
## 两个命令
diff --git a/website/content/reference/options.mdx b/website/content/reference/options.mdx
index 8d720e4..98dd19d 100644
--- a/website/content/reference/options.mdx
+++ b/website/content/reference/options.mdx
@@ -71,3 +71,7 @@ string,默认关闭。相对路径基于调用时cwd,保存生成的运行
filename仅为compileSource专用必需字段,不属于上面11项。其他调用和flowkit.config.mjs拒绝它。未知键、Symbol键或不符类型会直接拒绝,不静默忽略。
CLI只加载当前调用目录的flowkit.config.mjs,先校验完整配置,再将命令行覆盖项浅合并。配置本身错误时,即使同名参数会覆盖它仍失败。布尔false能覆盖true,remoteSkillHosts按整数组替换。示例配置与命令见[命令行](/reference/cli)。
+
+## capability-graph 不占用核心配置项
+
+Graph 的 Provider、`allowedProviders`、`context` 和模型适配由宿主管理,不属于这 11 个 FlowKit SDK 选项;请勿将图谱配置写入 `flowkit.config.mjs` 试图绕过未知键校验。详见[宿主消费示例](/examples/capability-graph)。
diff --git a/website/content/reference/runtime.mdx b/website/content/reference/runtime.mdx
index 5baeb9e..5153588 100644
--- a/website/content/reference/runtime.mdx
+++ b/website/content/reference/runtime.mdx
@@ -56,3 +56,7 @@ checkStep只得到id/name/attempt这一较小的step对象,而不是完整Agen
方法缺失或返回类型错误,先核对上表与公开类型。checkStep返回false不是“通过”,应改为null;runHuman返回字符串不是批准,应改为boolean或规范对象;verification返回对象应提取真正boolean。validateResult错误形状不保证被包装为统一FK错误,宿主必须遵守契约。
完整声明与所有字段见[TypeScript类型](/reference/types),重试与传播细节见[结果校验与重试](/guide/validation-retries)。
+
+## 可选 Graph 宿主绑定
+
+`createCapabilityGraphActionAdapter({ graph, bindings, getContext })` 返回一个 `runAction`,可由现有 Runtime 显式组合。它在调用业务函数前检查 Graph 的权限(由 Graph SDK 执行)、依赖完整性和所有已解析节点的适用性。其缺少绑定/不完整依赖/不适用错误码分别为 `FK_CG_BINDING_MISSING`、`FK_CG_DEPENDENCIES_INCOMPLETE`、`FK_CG_NOT_APPLICABLE`,不属于内建的 61 个 `FK_C`/`FK_R` 编译运行诊断码。参考[完整示例](/examples/capability-graph)。
diff --git a/website/content/reference/sdk.mdx b/website/content/reference/sdk.mdx
index 9141e42..dbd1e1f 100644
--- a/website/content/reference/sdk.mdx
+++ b/website/content/reference/sdk.mdx
@@ -1,6 +1,6 @@
# SDK API
-FlowKit v1.0.0 根入口 `@devcodex/flowkit` 公开六个函数。构造工作流使用另一个入口 `@devcodex/flowkit/dsl`。直接 SDK 不自动加载 flowkit.config.mjs;请显式传 options。
+FlowKit v1.0.0 根入口 `@devcodex-labs/flowkit` 公开六个函数。构造工作流使用另一个入口 `@devcodex-labs/flowkit/dsl`。直接 SDK 不自动加载 flowkit.config.mjs;请显式传 options。
## run:执行工作流 {#run}
@@ -96,3 +96,7 @@ isControlSignal(err: unknown): boolean
```
所有options的适用性见[配置参考](/reference/options),宿主签名见[Runtime契约](/reference/runtime),返回字段见[类型参考](/reference/types)。
+
+## 可选 capability-graph 子入口
+
+`@devcodex-labs/flowkit/capability-graph` 单独导出 `flowkitProvider` 和 `createCapabilityGraphActionAdapter`。它不是根 SDK 六个公开函数的一部分;不自动安装或启动 capability-graph,也不接管宿主 Runtime。详见[能力声明](/guide/capability-provider)和[宿主集成](/examples/capability-graph)。
diff --git a/website/content/reference/types.mdx b/website/content/reference/types.mdx
index e93a859..0846b04 100644
--- a/website/content/reference/types.mdx
+++ b/website/content/reference/types.mdx
@@ -1,6 +1,6 @@
# TypeScript 类型
-公开类型与运行时函数位于两个入口:根入口提供SDK/Runtime类型,`@devcodex/flowkit/dsl`提供DSL类型和构造器。使用TypeScript 5.0+;不要通过dist内部路径导入声明。
+公开类型与运行时函数位于两个入口:根入口提供SDK/Runtime类型,`@devcodex-labs/flowkit/dsl`提供DSL类型和构造器。使用TypeScript 5.0+;不要通过dist内部路径导入声明。
## SDK 类型索引
@@ -65,3 +65,7 @@ npx tsc --noEmit --strict --skipLibCheck --target ES2022 --module NodeNext --mod
## 遇到类型错误时
先核对入口、TypeScript版本和ESM设置;再查看是否多写字段、后继不存在、并行成员带next或联合类型不满足。避免用any或忽略诊断掩盖真实契约问题。完整JS/TS等价例见[JavaScript与TypeScript](/guide/javascript-typescript)。
+
+## Graph 适配器类型
+
+`@devcodex-labs/flowkit/capability-graph` 另带 `GraphResolver`、`GraphContext`、`GraphResolution`、`GraphActionBinding` 等结构化 TypeScript 类型。Graph 实例由宿主注入,FlowKit 不把 Graph SDK 添加为强制依赖。参见[Provider 说明](/guide/capability-provider)。
diff --git a/website/content/troubleshooting/compiler.mdx b/website/content/troubleshooting/compiler.mdx
index 5e78c47..4ca630f 100644
--- a/website/content/troubleshooting/compiler.mdx
+++ b/website/content/troubleshooting/compiler.mdx
@@ -7,7 +7,7 @@
每条的错误与修复源码来自同版本独立诊断用例。把需要的源码保存为case.workflow.js,在已安装FlowKit的ESM目录运行compile/check。涉及agent映射的用例先创建skills/writer.md,写入任意合法UTF-8说明;涉及远程URL只做静态检查,不会联网。条目给出的options需传给SDK,CLI支持的对应参数见命令行页。
```js
-import { compile } from '@devcodex/flowkit';
+import { compile } from '@devcodex-labs/flowkit';
const result = await compile('case.workflow.js', { /* 使用条目中的options */ });
console.log(result.diagnostics);
```
@@ -25,14 +25,14 @@ console.log(result.diagnostics);
错误源码(保存为case.workflow.js):
```js
-import {defineWorkflow,node,action,verification,parallel,condition,loop,human,terminal} from '@devcodex/flowkit/dsl';
+import {defineWorkflow,node,action,verification,parallel,condition,loop,human,terminal} from '@devcodex-labs/flowkit/dsl';
export default defineWorkflow({id:'Bad',version:'1.0.0',name:'Demo',nodes:[terminal('done',{name:'done',status:'succeeded'})]});
```
修复后的完整源码:
```js
-import {defineWorkflow,node,action,verification,parallel,condition,loop,human,terminal} from '@devcodex/flowkit/dsl';
+import {defineWorkflow,node,action,verification,parallel,condition,loop,human,terminal} from '@devcodex-labs/flowkit/dsl';
export default defineWorkflow({id:'demo',version:'1.0.0',name:'Demo',nodes:[terminal('done',{name:'done',status:'succeeded'})]});
```
@@ -61,14 +61,14 @@ export default defineWorkflow({id:'demo',version:'1.0.0',name:'Demo',nodes:[term
错误源码(保存为case.workflow.js):
```js
-import {defineWorkflow,node,action,verification,parallel,condition,loop,human,terminal} from '@devcodex/flowkit/dsl';
+import {defineWorkflow,node,action,verification,parallel,condition,loop,human,terminal} from '@devcodex-labs/flowkit/dsl';
export default defineWorkflow({id:'demo',version:'01.0.0',name:'Demo',nodes:[terminal('done',{name:'done',status:'succeeded'})]});
```
修复后的完整源码:
```js
-import {defineWorkflow,node,action,verification,parallel,condition,loop,human,terminal} from '@devcodex/flowkit/dsl';
+import {defineWorkflow,node,action,verification,parallel,condition,loop,human,terminal} from '@devcodex-labs/flowkit/dsl';
export default defineWorkflow({id:'demo',version:'1.0.0',name:'Demo',nodes:[terminal('done',{name:'done',status:'succeeded'})]});
```
@@ -97,14 +97,14 @@ export default defineWorkflow({id:'demo',version:'1.0.0',name:'Demo',nodes:[term
错误源码(保存为case.workflow.js):
```js
-import {defineWorkflow,node,action,verification,parallel,condition,loop,human,terminal} from '@devcodex/flowkit/dsl';
+import {defineWorkflow,node,action,verification,parallel,condition,loop,human,terminal} from '@devcodex-labs/flowkit/dsl';
export default defineWorkflow({id:'demo',version:'1.0.0',name:'bad*/',nodes:[terminal('done',{name:'done',status:'succeeded'})]});
```
修复后的完整源码:
```js
-import {defineWorkflow,node,action,verification,parallel,condition,loop,human,terminal} from '@devcodex/flowkit/dsl';
+import {defineWorkflow,node,action,verification,parallel,condition,loop,human,terminal} from '@devcodex-labs/flowkit/dsl';
export default defineWorkflow({id:'demo',version:'1.0.0',name:'Demo',nodes:[terminal('done',{name:'done',status:'succeeded'})]});
```
@@ -133,14 +133,14 @@ export default defineWorkflow({id:'demo',version:'1.0.0',name:'Demo',nodes:[term
错误源码(保存为case.workflow.js):
```js
-import {defineWorkflow,node,action,verification,parallel,condition,loop,human,terminal} from '@devcodex/flowkit/dsl';
+import {defineWorkflow,node,action,verification,parallel,condition,loop,human,terminal} from '@devcodex-labs/flowkit/dsl';
export default defineWorkflow({id:'demo',version:'1.0.0',name:'Demo',nodes:[]});
```
修复后的完整源码:
```js
-import {defineWorkflow,node,action,verification,parallel,condition,loop,human,terminal} from '@devcodex/flowkit/dsl';
+import {defineWorkflow,node,action,verification,parallel,condition,loop,human,terminal} from '@devcodex-labs/flowkit/dsl';
export default defineWorkflow({id:'demo',version:'1.0.0',name:'Demo',nodes:[terminal('done',{name:'done',status:'succeeded'})]});
```
@@ -193,14 +193,14 @@ export default defineWorkflow({id:'demo',version:'1.0.0',name:'Demo',nodes:[term
错误源码(保存为case.workflow.js):
```js
-import {defineWorkflow,node,action,verification,parallel,condition,loop,human,terminal} from '@devcodex/flowkit/dsl';
+import {defineWorkflow,node,action,verification,parallel,condition,loop,human,terminal} from '@devcodex-labs/flowkit/dsl';
export default defineWorkflow({id:'demo',version:'1.0.0',name:'Demo',extra:1,nodes:[terminal('done',{name:'done',status:'succeeded'})]});
```
修复后的完整源码:
```js
-import {defineWorkflow,node,action,verification,parallel,condition,loop,human,terminal} from '@devcodex/flowkit/dsl';
+import {defineWorkflow,node,action,verification,parallel,condition,loop,human,terminal} from '@devcodex-labs/flowkit/dsl';
export default defineWorkflow({id:'demo',version:'1.0.0',name:'Demo',nodes:[terminal('done',{name:'done',status:'succeeded'})]});
```
@@ -229,14 +229,14 @@ export default defineWorkflow({id:'demo',version:'1.0.0',name:'Demo',nodes:[term
错误源码(保存为case.workflow.js):
```js
-import {defineWorkflow,node,action,verification,parallel,condition,loop,human,terminal} from '@devcodex/flowkit/dsl';
+import {defineWorkflow,node,action,verification,parallel,condition,loop,human,terminal} from '@devcodex-labs/flowkit/dsl';
export default defineWorkflow({id:'demo',version:'1.0.0',name:'Demo',nodes:[...[]]});
```
修复后的完整源码:
```js
-import {defineWorkflow,node,action,verification,parallel,condition,loop,human,terminal} from '@devcodex/flowkit/dsl';
+import {defineWorkflow,node,action,verification,parallel,condition,loop,human,terminal} from '@devcodex-labs/flowkit/dsl';
export default defineWorkflow({id:'demo',version:'1.0.0',name:'Demo',nodes:[terminal('done',{name:'done',status:'succeeded'})]});
```
@@ -267,14 +267,14 @@ export default defineWorkflow({id:'demo',version:'1.0.0',name:'Demo',nodes:[term
错误源码(保存为case.workflow.js):
```js
-import {defineWorkflow,node,action,verification,parallel,condition,loop,human,terminal} from '@devcodex/flowkit/dsl';
+import {defineWorkflow,node,action,verification,parallel,condition,loop,human,terminal} from '@devcodex-labs/flowkit/dsl';
export default defineWorkflow({id:'demo',version:'1.0.0',name:'Demo',nodes:[terminal('Bad',{name:'Done',status:'succeeded'})]});
```
修复后的完整源码:
```js
-import {defineWorkflow,node,action,verification,parallel,condition,loop,human,terminal} from '@devcodex/flowkit/dsl';
+import {defineWorkflow,node,action,verification,parallel,condition,loop,human,terminal} from '@devcodex-labs/flowkit/dsl';
export default defineWorkflow({id:'demo',version:'1.0.0',name:'Demo',nodes:[terminal('done',{name:'done',status:'succeeded'})]});
```
@@ -303,14 +303,14 @@ export default defineWorkflow({id:'demo',version:'1.0.0',name:'Demo',nodes:[term
错误源码(保存为case.workflow.js):
```js
-import {defineWorkflow,node,action,verification,parallel,condition,loop,human,terminal} from '@devcodex/flowkit/dsl';
+import {defineWorkflow,node,action,verification,parallel,condition,loop,human,terminal} from '@devcodex-labs/flowkit/dsl';
export default defineWorkflow({id:'demo',version:'1.0.0',name:'Demo',nodes:[terminal('done',{name:'done',status:'succeeded'}),terminal('done',{name:'done',status:'succeeded'})]});
```
修复后的完整源码:
```js
-import {defineWorkflow,node,action,verification,parallel,condition,loop,human,terminal} from '@devcodex/flowkit/dsl';
+import {defineWorkflow,node,action,verification,parallel,condition,loop,human,terminal} from '@devcodex-labs/flowkit/dsl';
export default defineWorkflow({id:'demo',version:'1.0.0',name:'Demo',nodes:[terminal('done',{name:'done',status:'succeeded'})]});
```
@@ -339,14 +339,14 @@ export default defineWorkflow({id:'demo',version:'1.0.0',name:'Demo',nodes:[term
错误源码(保存为case.workflow.js):
```js
-import {defineWorkflow,node,action,verification,parallel,condition,loop,human,terminal} from '@devcodex/flowkit/dsl';
+import {defineWorkflow,node,action,verification,parallel,condition,loop,human,terminal} from '@devcodex-labs/flowkit/dsl';
export default defineWorkflow({id:'demo',version:'1.0.0',name:'Demo',nodes:[terminal('done',{name:'bad*/',status:'succeeded'})]});
```
修复后的完整源码:
```js
-import {defineWorkflow,node,action,verification,parallel,condition,loop,human,terminal} from '@devcodex/flowkit/dsl';
+import {defineWorkflow,node,action,verification,parallel,condition,loop,human,terminal} from '@devcodex-labs/flowkit/dsl';
export default defineWorkflow({id:'demo',version:'1.0.0',name:'Demo',nodes:[terminal('done',{name:'done',status:'succeeded'})]});
```
@@ -375,14 +375,14 @@ export default defineWorkflow({id:'demo',version:'1.0.0',name:'Demo',nodes:[term
错误源码(保存为case.workflow.js):
```js
-import {defineWorkflow,node,action,verification,parallel,condition,loop,human,terminal} from '@devcodex/flowkit/dsl';
+import {defineWorkflow,node,action,verification,parallel,condition,loop,human,terminal} from '@devcodex-labs/flowkit/dsl';
export default defineWorkflow({id:'demo',version:'1.0.0',name:'Demo',nodes:[terminal('done',{name:'done',status:'succeeded'}),terminal('other',{name:'done',status:'succeeded'})]});
```
修复后的完整源码:
```js
-import {defineWorkflow,node,action,verification,parallel,condition,loop,human,terminal} from '@devcodex/flowkit/dsl';
+import {defineWorkflow,node,action,verification,parallel,condition,loop,human,terminal} from '@devcodex-labs/flowkit/dsl';
export default defineWorkflow({id:'demo',version:'1.0.0',name:'Demo',nodes:[terminal('done',{name:'done',status:'succeeded'})]});
```
@@ -411,14 +411,14 @@ export default defineWorkflow({id:'demo',version:'1.0.0',name:'Demo',nodes:[term
错误源码(保存为case.workflow.js):
```js
-import {defineWorkflow,node,action,verification,parallel,condition,loop,human,terminal} from '@devcodex/flowkit/dsl';
+import {defineWorkflow,node,action,verification,parallel,condition,loop,human,terminal} from '@devcodex-labs/flowkit/dsl';
export default defineWorkflow({id:'demo',version:'1.0.0',name:'Demo',nodes:[terminal('done',{name:'Done',type:'agent',status:'succeeded'})]});
```
修复后的完整源码:
```js
-import {defineWorkflow,node,action,verification,parallel,condition,loop,human,terminal} from '@devcodex/flowkit/dsl';
+import {defineWorkflow,node,action,verification,parallel,condition,loop,human,terminal} from '@devcodex-labs/flowkit/dsl';
export default defineWorkflow({id:'demo',version:'1.0.0',name:'Demo',nodes:[terminal('done',{name:'done',status:'succeeded'})]});
```
@@ -447,14 +447,14 @@ export default defineWorkflow({id:'demo',version:'1.0.0',name:'Demo',nodes:[term
错误源码(保存为case.workflow.js):
```js
-import {defineWorkflow,node,action,verification,parallel,condition,loop,human,terminal} from '@devcodex/flowkit/dsl';
+import {defineWorkflow,node,action,verification,parallel,condition,loop,human,terminal} from '@devcodex-labs/flowkit/dsl';
export default defineWorkflow({id:'demo',version:'1.0.0',name:'Demo',nodes:[action('a',{name:'a',action:'save',next:'missing'}),terminal('done',{name:'done',status:'succeeded'})]});
```
修复后的完整源码:
```js
-import {defineWorkflow,node,action,verification,parallel,condition,loop,human,terminal} from '@devcodex/flowkit/dsl';
+import {defineWorkflow,node,action,verification,parallel,condition,loop,human,terminal} from '@devcodex-labs/flowkit/dsl';
export default defineWorkflow({id:'demo',version:'1.0.0',name:'Demo',nodes:[action('a',{name:'a',action:'save',next:'done'}),terminal('done',{name:'done',status:'succeeded'})]});
```
@@ -483,14 +483,14 @@ export default defineWorkflow({id:'demo',version:'1.0.0',name:'Demo',nodes:[acti
错误源码(保存为case.workflow.js):
```js
-import {defineWorkflow,node,action,verification,parallel,condition,loop,human,terminal} from '@devcodex/flowkit/dsl';
+import {defineWorkflow,node,action,verification,parallel,condition,loop,human,terminal} from '@devcodex-labs/flowkit/dsl';
export default defineWorkflow({id:'demo',version:'1.0.0',name:'Demo',nodes:[action('a',{name:'a',action:'save'}),terminal('done',{name:'done',status:'succeeded'})]});
```
修复后的完整源码:
```js
-import {defineWorkflow,node,action,verification,parallel,condition,loop,human,terminal} from '@devcodex/flowkit/dsl';
+import {defineWorkflow,node,action,verification,parallel,condition,loop,human,terminal} from '@devcodex-labs/flowkit/dsl';
export default defineWorkflow({id:'demo',version:'1.0.0',name:'Demo',nodes:[action('a',{name:'a',action:'save',next:'done'}),terminal('done',{name:'done',status:'succeeded'})]});
```
@@ -519,14 +519,14 @@ export default defineWorkflow({id:'demo',version:'1.0.0',name:'Demo',nodes:[acti
错误源码(保存为case.workflow.js):
```js
-import {defineWorkflow,node,action,verification,parallel,condition,loop,human,terminal} from '@devcodex/flowkit/dsl';
+import {defineWorkflow,node,action,verification,parallel,condition,loop,human,terminal} from '@devcodex-labs/flowkit/dsl';
export default defineWorkflow({id:'demo',version:'1.0.0',name:'Demo',nodes:[terminal('done',{name:'done',status:'succeeded'}),terminal('unused',{name:'unused',status:'succeeded'})]});
```
修复后的完整源码:
```js
-import {defineWorkflow,node,action,verification,parallel,condition,loop,human,terminal} from '@devcodex/flowkit/dsl';
+import {defineWorkflow,node,action,verification,parallel,condition,loop,human,terminal} from '@devcodex-labs/flowkit/dsl';
export default defineWorkflow({id:'demo',version:'1.0.0',name:'Demo',nodes:[terminal('done',{name:'done',status:'succeeded'})]});
```
@@ -555,14 +555,14 @@ export default defineWorkflow({id:'demo',version:'1.0.0',name:'Demo',nodes:[term
错误源码(保存为case.workflow.js):
```js
-import {defineWorkflow,node,action,verification,parallel,condition,loop,human,terminal} from '@devcodex/flowkit/dsl';
+import {defineWorkflow,node,action,verification,parallel,condition,loop,human,terminal} from '@devcodex-labs/flowkit/dsl';
export default defineWorkflow({id:'demo',version:'1.0.0',name:'Demo',nodes:[terminal('done',{name:'Done',status:'succeeded',extra:1})]});
```
修复后的完整源码:
```js
-import {defineWorkflow,node,action,verification,parallel,condition,loop,human,terminal} from '@devcodex/flowkit/dsl';
+import {defineWorkflow,node,action,verification,parallel,condition,loop,human,terminal} from '@devcodex-labs/flowkit/dsl';
export default defineWorkflow({id:'demo',version:'1.0.0',name:'Demo',nodes:[terminal('done',{name:'done',status:'succeeded'})]});
```
@@ -591,14 +591,14 @@ export default defineWorkflow({id:'demo',version:'1.0.0',name:'Demo',nodes:[term
错误源码(保存为case.workflow.js):
```js
-import {defineWorkflow,node,action,verification,parallel,condition,loop,human,terminal} from '@devcodex/flowkit/dsl';
+import {defineWorkflow,node,action,verification,parallel,condition,loop,human,terminal} from '@devcodex-labs/flowkit/dsl';
export default defineWorkflow({id:'demo',version:'1.0.0',name:'Demo',nodes:[action('a',{name:'a',action:'save',next:'done',writes:null}),terminal('done',{name:'done',status:'succeeded'})]});
```
修复后的完整源码:
```js
-import {defineWorkflow,node,action,verification,parallel,condition,loop,human,terminal} from '@devcodex/flowkit/dsl';
+import {defineWorkflow,node,action,verification,parallel,condition,loop,human,terminal} from '@devcodex-labs/flowkit/dsl';
export default defineWorkflow({id:'demo',version:'1.0.0',name:'Demo',nodes:[action('a',{name:'a',action:'save',next:'done',writes:[]}),terminal('done',{name:'done',status:'succeeded'})]});
```
@@ -629,14 +629,14 @@ export default defineWorkflow({id:'demo',version:'1.0.0',name:'Demo',nodes:[acti
错误源码(保存为case.workflow.js):
```js
-import {defineWorkflow,node,action,verification,parallel,condition,loop,human,terminal} from '@devcodex/flowkit/dsl';
+import {defineWorkflow,node,action,verification,parallel,condition,loop,human,terminal} from '@devcodex-labs/flowkit/dsl';
export default defineWorkflow({id:'demo',version:'1.0.0',name:'Demo',nodes:[parallel('p',{name:'P',branches:['a'],join:{strategy:'any',next:'done'}}),action('a',{name:'a',action:'save'}),action('b',{name:'b',action:'save'}),terminal('done',{name:'done',status:'succeeded'})]});
```
修复后的完整源码:
```js
-import {defineWorkflow,node,action,verification,parallel,condition,loop,human,terminal} from '@devcodex/flowkit/dsl';
+import {defineWorkflow,node,action,verification,parallel,condition,loop,human,terminal} from '@devcodex-labs/flowkit/dsl';
export default defineWorkflow({id:'demo',version:'1.0.0',name:'Demo',nodes:[parallel('p',{name:'P',branches:['a','b'],join:{strategy:'any',next:'done'}}),action('a',{name:'a',action:'save'}),action('b',{name:'b',action:'save'}),terminal('done',{name:'done',status:'succeeded'})]});
```
@@ -665,14 +665,14 @@ export default defineWorkflow({id:'demo',version:'1.0.0',name:'Demo',nodes:[para
错误源码(保存为case.workflow.js):
```js
-import {defineWorkflow,node,action,verification,parallel,condition,loop,human,terminal} from '@devcodex/flowkit/dsl';
+import {defineWorkflow,node,action,verification,parallel,condition,loop,human,terminal} from '@devcodex-labs/flowkit/dsl';
export default defineWorkflow({id:'demo',version:'1.0.0',name:'Demo',nodes:[parallel('p',{name:'P',branches:['a','b'],join:{strategy:'any',next:'done'}}),action('a',{name:'a',action:'save',next:'done'}),action('b',{name:'b',action:'save'}),terminal('done',{name:'done',status:'succeeded'})]});
```
修复后的完整源码:
```js
-import {defineWorkflow,node,action,verification,parallel,condition,loop,human,terminal} from '@devcodex/flowkit/dsl';
+import {defineWorkflow,node,action,verification,parallel,condition,loop,human,terminal} from '@devcodex-labs/flowkit/dsl';
export default defineWorkflow({id:'demo',version:'1.0.0',name:'Demo',nodes:[parallel('p',{name:'P',branches:['a','b'],join:{strategy:'any',next:'done'}}),action('a',{name:'a',action:'save'}),action('b',{name:'b',action:'save'}),terminal('done',{name:'done',status:'succeeded'})]});
```
@@ -701,14 +701,14 @@ export default defineWorkflow({id:'demo',version:'1.0.0',name:'Demo',nodes:[para
错误源码(保存为case.workflow.js):
```js
-import {defineWorkflow,node,action,verification,parallel,condition,loop,human,terminal} from '@devcodex/flowkit/dsl';
+import {defineWorkflow,node,action,verification,parallel,condition,loop,human,terminal} from '@devcodex-labs/flowkit/dsl';
export default defineWorkflow({id:'demo',version:'1.0.0',name:'Demo',nodes:[parallel('p',{name:'P',branches:['a','b'],join:{strategy:'any',next:'done'}}),terminal('a',{name:'a',status:'succeeded'}),action('b',{name:'b',action:'save'}),terminal('done',{name:'done',status:'succeeded'})]});
```
修复后的完整源码:
```js
-import {defineWorkflow,node,action,verification,parallel,condition,loop,human,terminal} from '@devcodex/flowkit/dsl';
+import {defineWorkflow,node,action,verification,parallel,condition,loop,human,terminal} from '@devcodex-labs/flowkit/dsl';
export default defineWorkflow({id:'demo',version:'1.0.0',name:'Demo',nodes:[parallel('p',{name:'P',branches:['a','b'],join:{strategy:'any',next:'done'}}),action('a',{name:'a',action:'save'}),action('b',{name:'b',action:'save'}),terminal('done',{name:'done',status:'succeeded'})]});
```
@@ -737,14 +737,14 @@ export default defineWorkflow({id:'demo',version:'1.0.0',name:'Demo',nodes:[para
错误源码(保存为case.workflow.js):
```js
-import {defineWorkflow,node,action,verification,parallel,condition,loop,human,terminal} from '@devcodex/flowkit/dsl';
+import {defineWorkflow,node,action,verification,parallel,condition,loop,human,terminal} from '@devcodex-labs/flowkit/dsl';
export default defineWorkflow({id:'demo',version:'1.0.0',name:'Demo',nodes:[parallel('p',{name:'P',branches:['a','b'],join:{strategy:'all',next:'done'}}),action('a',{name:'a',action:'save'}),action('b',{name:'b',action:'save'}),terminal('done',{name:'done',status:'succeeded'})]});
```
修复后的完整源码:
```js
-import {defineWorkflow,node,action,verification,parallel,condition,loop,human,terminal} from '@devcodex/flowkit/dsl';
+import {defineWorkflow,node,action,verification,parallel,condition,loop,human,terminal} from '@devcodex-labs/flowkit/dsl';
export default defineWorkflow({id:'demo',version:'1.0.0',name:'Demo',nodes:[parallel('p',{name:'P',branches:['a','b'],join:{strategy:'any',next:'done'}}),action('a',{name:'a',action:'save'}),action('b',{name:'b',action:'save'}),terminal('done',{name:'done',status:'succeeded'})]});
```
@@ -773,14 +773,14 @@ export default defineWorkflow({id:'demo',version:'1.0.0',name:'Demo',nodes:[para
错误源码(保存为case.workflow.js):
```js
-import {defineWorkflow,node,action,verification,parallel,condition,loop,human,terminal} from '@devcodex/flowkit/dsl';
+import {defineWorkflow,node,action,verification,parallel,condition,loop,human,terminal} from '@devcodex-labs/flowkit/dsl';
export default defineWorkflow({id:'demo',version:'1.0.0',name:'Demo',nodes:[parallel('p',{name:'P',branches:['a','b'],join:{strategy:'any',next:'a'}}),action('a',{name:'a',action:'save'}),action('b',{name:'b',action:'save'}),terminal('done',{name:'done',status:'succeeded'})]});
```
修复后的完整源码:
```js
-import {defineWorkflow,node,action,verification,parallel,condition,loop,human,terminal} from '@devcodex/flowkit/dsl';
+import {defineWorkflow,node,action,verification,parallel,condition,loop,human,terminal} from '@devcodex-labs/flowkit/dsl';
export default defineWorkflow({id:'demo',version:'1.0.0',name:'Demo',nodes:[parallel('p',{name:'P',branches:['a','b'],join:{strategy:'any',next:'done'}}),action('a',{name:'a',action:'save'}),action('b',{name:'b',action:'save'}),terminal('done',{name:'done',status:'succeeded'})]});
```
@@ -809,14 +809,14 @@ export default defineWorkflow({id:'demo',version:'1.0.0',name:'Demo',nodes:[para
错误源码(保存为case.workflow.js):
```js
-import {defineWorkflow,node,action,verification,parallel,condition,loop,human,terminal} from '@devcodex/flowkit/dsl';
+import {defineWorkflow,node,action,verification,parallel,condition,loop,human,terminal} from '@devcodex-labs/flowkit/dsl';
export default defineWorkflow({id:'demo',version:'1.0.0',name:'Demo',nodes:[parallel('p',{name:'P',branches:['a','b'],join:{strategy:'any',next:'done'}}),verification('a',{name:'a',verifier:'check',onSuccess:'done',onFailure:'done'}),action('b',{name:'b',action:'save'}),terminal('done',{name:'done',status:'succeeded'})]});
```
修复后的完整源码:
```js
-import {defineWorkflow,node,action,verification,parallel,condition,loop,human,terminal} from '@devcodex/flowkit/dsl';
+import {defineWorkflow,node,action,verification,parallel,condition,loop,human,terminal} from '@devcodex-labs/flowkit/dsl';
export default defineWorkflow({id:'demo',version:'1.0.0',name:'Demo',nodes:[parallel('p',{name:'P',branches:['a','b'],join:{strategy:'any',next:'done'}}),verification('a',{name:'a',verifier:'check'}),action('b',{name:'b',action:'save'}),terminal('done',{name:'done',status:'succeeded'})]});
```
@@ -845,14 +845,14 @@ export default defineWorkflow({id:'demo',version:'1.0.0',name:'Demo',nodes:[para
错误源码(保存为case.workflow.js):
```js
-import {defineWorkflow,node,action,verification,parallel,condition,loop,human,terminal} from '@devcodex/flowkit/dsl';
+import {defineWorkflow,node,action,verification,parallel,condition,loop,human,terminal} from '@devcodex-labs/flowkit/dsl';
export default defineWorkflow({id:'demo',version:'1.0.0',name:'Demo',nodes:[parallel('p',{name:'P',branches:['a','b'],join:{strategy:'any',next:'done'}}),action('a',{name:'a',action:'save',writes:['x']}),action('b',{name:'b',action:'save',writes:['x']}),terminal('done',{name:'done',status:'succeeded'})]});
```
修复后的完整源码:
```js
-import {defineWorkflow,node,action,verification,parallel,condition,loop,human,terminal} from '@devcodex/flowkit/dsl';
+import {defineWorkflow,node,action,verification,parallel,condition,loop,human,terminal} from '@devcodex-labs/flowkit/dsl';
export default defineWorkflow({id:'demo',version:'1.0.0',name:'Demo',nodes:[parallel('p',{name:'P',branches:['a','b'],join:{strategy:'any',next:'done'}}),action('a',{name:'a',action:'save',writes:['x']}),action('b',{name:'b',action:'save',writes:['y']}),terminal('done',{name:'done',status:'succeeded'})]});
```
@@ -883,14 +883,14 @@ export default defineWorkflow({id:'demo',version:'1.0.0',name:'Demo',nodes:[para
错误源码(保存为case.workflow.js):
```js
-import {defineWorkflow,node,action,verification,parallel,condition,loop,human,terminal} from '@devcodex/flowkit/dsl';
+import {defineWorkflow,node,action,verification,parallel,condition,loop,human,terminal} from '@devcodex-labs/flowkit/dsl';
export default defineWorkflow({id:'demo',version:'1.0.0',name:'Demo',nodes:[condition('c',{name:'C',branches:[]}),terminal('done',{name:'done',status:'succeeded'})]});
```
修复后的完整源码:
```js
-import {defineWorkflow,node,action,verification,parallel,condition,loop,human,terminal} from '@devcodex/flowkit/dsl';
+import {defineWorkflow,node,action,verification,parallel,condition,loop,human,terminal} from '@devcodex-labs/flowkit/dsl';
export default defineWorkflow({id:'demo',version:'1.0.0',name:'Demo',nodes:[condition('c',{name:'C',branches:[{when:"flag",next:'done'},{when:'true',next:'done'}]}),terminal('done',{name:'done',status:'succeeded'})]});
```
@@ -919,14 +919,14 @@ export default defineWorkflow({id:'demo',version:'1.0.0',name:'Demo',nodes:[cond
错误源码(保存为case.workflow.js):
```js
-import {defineWorkflow,node,action,verification,parallel,condition,loop,human,terminal} from '@devcodex/flowkit/dsl';
+import {defineWorkflow,node,action,verification,parallel,condition,loop,human,terminal} from '@devcodex-labs/flowkit/dsl';
export default defineWorkflow({id:'demo',version:'1.0.0',name:'Demo',nodes:[condition('c',{name:'C',branches:[{when:'flag',next:'done'}]}),terminal('done',{name:'done',status:'succeeded'})]});
```
修复后的完整源码:
```js
-import {defineWorkflow,node,action,verification,parallel,condition,loop,human,terminal} from '@devcodex/flowkit/dsl';
+import {defineWorkflow,node,action,verification,parallel,condition,loop,human,terminal} from '@devcodex-labs/flowkit/dsl';
export default defineWorkflow({id:'demo',version:'1.0.0',name:'Demo',nodes:[condition('c',{name:'C',branches:[{when:"flag",next:'done'},{when:'true',next:'done'}]}),terminal('done',{name:'done',status:'succeeded'})]});
```
@@ -955,14 +955,14 @@ export default defineWorkflow({id:'demo',version:'1.0.0',name:'Demo',nodes:[cond
错误源码(保存为case.workflow.js):
```js
-import {defineWorkflow,node,action,verification,parallel,condition,loop,human,terminal} from '@devcodex/flowkit/dsl';
+import {defineWorkflow,node,action,verification,parallel,condition,loop,human,terminal} from '@devcodex-labs/flowkit/dsl';
export default defineWorkflow({id:'demo',version:'1.0.0',name:'Demo',nodes:[condition('c',{name:'C',branches:[{when:"flag &&",next:'done'},{when:'true',next:'done'}]}),terminal('done',{name:'done',status:'succeeded'})]});
```
修复后的完整源码:
```js
-import {defineWorkflow,node,action,verification,parallel,condition,loop,human,terminal} from '@devcodex/flowkit/dsl';
+import {defineWorkflow,node,action,verification,parallel,condition,loop,human,terminal} from '@devcodex-labs/flowkit/dsl';
export default defineWorkflow({id:'demo',version:'1.0.0',name:'Demo',nodes:[condition('c',{name:'C',branches:[{when:"flag",next:'done'},{when:'true',next:'done'}]}),terminal('done',{name:'done',status:'succeeded'})]});
```
@@ -991,14 +991,14 @@ export default defineWorkflow({id:'demo',version:'1.0.0',name:'Demo',nodes:[cond
错误源码(保存为case.workflow.js):
```js
-import {defineWorkflow,node,action,verification,parallel,condition,loop,human,terminal} from '@devcodex/flowkit/dsl';
+import {defineWorkflow,node,action,verification,parallel,condition,loop,human,terminal} from '@devcodex-labs/flowkit/dsl';
export default defineWorkflow({id:'demo',version:'1.0.0',name:'Demo',nodes:[condition('c',{name:'C',branches:[{when:"fn()",next:'done'},{when:'true',next:'done'}]}),terminal('done',{name:'done',status:'succeeded'})]});
```
修复后的完整源码:
```js
-import {defineWorkflow,node,action,verification,parallel,condition,loop,human,terminal} from '@devcodex/flowkit/dsl';
+import {defineWorkflow,node,action,verification,parallel,condition,loop,human,terminal} from '@devcodex-labs/flowkit/dsl';
export default defineWorkflow({id:'demo',version:'1.0.0',name:'Demo',nodes:[condition('c',{name:'C',branches:[{when:"flag",next:'done'},{when:'true',next:'done'}]}),terminal('done',{name:'done',status:'succeeded'})]});
```
@@ -1027,14 +1027,14 @@ export default defineWorkflow({id:'demo',version:'1.0.0',name:'Demo',nodes:[cond
错误源码(保存为case.workflow.js):
```js
-import {defineWorkflow,node,action,verification,parallel,condition,loop,human,terminal} from '@devcodex/flowkit/dsl';
+import {defineWorkflow,node,action,verification,parallel,condition,loop,human,terminal} from '@devcodex-labs/flowkit/dsl';
export default defineWorkflow({id:'demo',version:'1.0.0',name:'Demo',nodes:[condition('c',{name:'C',branches:[{when:"true\n",next:'done'},{when:'true',next:'done'}]}),terminal('done',{name:'done',status:'succeeded'})]});
```
修复后的完整源码:
```js
-import {defineWorkflow,node,action,verification,parallel,condition,loop,human,terminal} from '@devcodex/flowkit/dsl';
+import {defineWorkflow,node,action,verification,parallel,condition,loop,human,terminal} from '@devcodex-labs/flowkit/dsl';
export default defineWorkflow({id:'demo',version:'1.0.0',name:'Demo',nodes:[condition('c',{name:'C',branches:[{when:"flag",next:'done'},{when:'true',next:'done'}]}),terminal('done',{name:'done',status:'succeeded'})]});
```
@@ -1065,14 +1065,14 @@ export default defineWorkflow({id:'demo',version:'1.0.0',name:'Demo',nodes:[cond
错误源码(保存为case.workflow.js):
```js
-import {defineWorkflow,node,action,verification,parallel,condition,loop,human,terminal} from '@devcodex/flowkit/dsl';
+import {defineWorkflow,node,action,verification,parallel,condition,loop,human,terminal} from '@devcodex-labs/flowkit/dsl';
export default defineWorkflow({id:'demo',version:'1.0.0',name:'Demo',nodes:[loop('l',{name:'L',maxIterations:0,body:'v',onSuccess:'done',onMaxExceeded:'failed'}),verification('v',{name:'V',verifier:'check',onSuccess:'l',onFailure:'repair'}),action('repair',{name:'repair',action:'save',next:'v'}),terminal('done',{name:'done',status:'succeeded'}),terminal('failed',{name:'failed',status:'succeeded'})]});
```
修复后的完整源码:
```js
-import {defineWorkflow,node,action,verification,parallel,condition,loop,human,terminal} from '@devcodex/flowkit/dsl';
+import {defineWorkflow,node,action,verification,parallel,condition,loop,human,terminal} from '@devcodex-labs/flowkit/dsl';
export default defineWorkflow({id:'demo',version:'1.0.0',name:'Demo',nodes:[loop('l',{name:'L',maxIterations:3,body:'v',onSuccess:'done',onMaxExceeded:'failed'}),verification('v',{name:'V',verifier:'check',onSuccess:'l',onFailure:'repair'}),action('repair',{name:'repair',action:'save',next:'v'}),terminal('done',{name:'done',status:'succeeded'}),terminal('failed',{name:'failed',status:'succeeded'})]});
```
@@ -1101,14 +1101,14 @@ export default defineWorkflow({id:'demo',version:'1.0.0',name:'Demo',nodes:[loop
错误源码(保存为case.workflow.js):
```js
-import {defineWorkflow,node,action,verification,parallel,condition,loop,human,terminal} from '@devcodex/flowkit/dsl';
+import {defineWorkflow,node,action,verification,parallel,condition,loop,human,terminal} from '@devcodex-labs/flowkit/dsl';
export default defineWorkflow({id:'demo',version:'1.0.0',name:'Demo',nodes:[loop('l',{name:'L',maxIterations:3,body:'v',onSuccess:'done',onMaxExceeded:'failed'}),action('v',{name:'v',action:'save',next:'repair'}),action('repair',{name:'repair',action:'save',next:'v'}),terminal('done',{name:'done',status:'succeeded'}),terminal('failed',{name:'failed',status:'succeeded'})]});
```
修复后的完整源码:
```js
-import {defineWorkflow,node,action,verification,parallel,condition,loop,human,terminal} from '@devcodex/flowkit/dsl';
+import {defineWorkflow,node,action,verification,parallel,condition,loop,human,terminal} from '@devcodex-labs/flowkit/dsl';
export default defineWorkflow({id:'demo',version:'1.0.0',name:'Demo',nodes:[loop('l',{name:'L',maxIterations:3,body:'v',onSuccess:'done',onMaxExceeded:'failed'}),verification('v',{name:'V',verifier:'check',onSuccess:'l',onFailure:'repair'}),action('repair',{name:'repair',action:'save',next:'v'}),terminal('done',{name:'done',status:'succeeded'}),terminal('failed',{name:'failed',status:'succeeded'})]});
```
@@ -1137,14 +1137,14 @@ export default defineWorkflow({id:'demo',version:'1.0.0',name:'Demo',nodes:[loop
错误源码(保存为case.workflow.js):
```js
-import {defineWorkflow,node,action,verification,parallel,condition,loop,human,terminal} from '@devcodex/flowkit/dsl';
+import {defineWorkflow,node,action,verification,parallel,condition,loop,human,terminal} from '@devcodex-labs/flowkit/dsl';
export default defineWorkflow({id:'demo',version:'1.0.0',name:'Demo',nodes:[loop('l',{name:'L',maxIterations:3,body:'v',onSuccess:'done',onMaxExceeded:'failed'}),verification('v',{name:'V',verifier:'check',onSuccess:'l',onFailure:'repair'}),action('repair',{name:'repair',action:'save',next:'done'}),terminal('done',{name:'done',status:'succeeded'}),terminal('failed',{name:'failed',status:'succeeded'})]});
```
修复后的完整源码:
```js
-import {defineWorkflow,node,action,verification,parallel,condition,loop,human,terminal} from '@devcodex/flowkit/dsl';
+import {defineWorkflow,node,action,verification,parallel,condition,loop,human,terminal} from '@devcodex-labs/flowkit/dsl';
export default defineWorkflow({id:'demo',version:'1.0.0',name:'Demo',nodes:[loop('l',{name:'L',maxIterations:3,body:'v',onSuccess:'done',onMaxExceeded:'failed'}),verification('v',{name:'V',verifier:'check',onSuccess:'l',onFailure:'repair'}),action('repair',{name:'repair',action:'save',next:'v'}),terminal('done',{name:'done',status:'succeeded'}),terminal('failed',{name:'failed',status:'succeeded'})]});
```
@@ -1173,14 +1173,14 @@ export default defineWorkflow({id:'demo',version:'1.0.0',name:'Demo',nodes:[loop
错误源码(保存为case.workflow.js):
```js
-import {defineWorkflow,node,action,verification,parallel,condition,loop,human,terminal} from '@devcodex/flowkit/dsl';
+import {defineWorkflow,node,action,verification,parallel,condition,loop,human,terminal} from '@devcodex-labs/flowkit/dsl';
export default defineWorkflow({id:'demo',version:'1.0.0',name:'Demo',nodes:[loop('l',{name:'L',maxIterations:3,body:'v',onSuccess:'done',onMaxExceeded:'failed'}),verification('v',{name:'V',verifier:'check',onSuccess:'l',onFailure:'repair'}),parallel('repair',{name:'Repair',branches:['a','b'],join:{strategy:'any',next:'v'}}),terminal('done',{name:'done',status:'succeeded'}),terminal('failed',{name:'failed',status:'succeeded'}),action('a',{name:'a',action:'save'}),action('b',{name:'b',action:'save'})]});
```
修复后的完整源码:
```js
-import {defineWorkflow,node,action,verification,parallel,condition,loop,human,terminal} from '@devcodex/flowkit/dsl';
+import {defineWorkflow,node,action,verification,parallel,condition,loop,human,terminal} from '@devcodex-labs/flowkit/dsl';
export default defineWorkflow({id:'demo',version:'1.0.0',name:'Demo',nodes:[loop('l',{name:'L',maxIterations:3,body:'v',onSuccess:'done',onMaxExceeded:'failed'}),verification('v',{name:'V',verifier:'check',onSuccess:'l',onFailure:'repair'}),action('repair',{name:'repair',action:'save',next:'v'}),terminal('done',{name:'done',status:'succeeded'}),terminal('failed',{name:'failed',status:'succeeded'})]});
```
@@ -1209,14 +1209,14 @@ export default defineWorkflow({id:'demo',version:'1.0.0',name:'Demo',nodes:[loop
错误源码(保存为case.workflow.js):
```js
-import {defineWorkflow,node,action,verification,parallel,condition,loop,human,terminal} from '@devcodex/flowkit/dsl';
+import {defineWorkflow,node,action,verification,parallel,condition,loop,human,terminal} from '@devcodex-labs/flowkit/dsl';
export default defineWorkflow({id:'demo',version:'1.0.0',name:'Demo',nodes:[action('start',{name:'start',action:'save',next:'v'}),loop('l',{name:'L',maxIterations:3,body:'v',onSuccess:'done',onMaxExceeded:'failed'}),verification('v',{name:'V',verifier:'check',onSuccess:'l',onFailure:'repair'}),action('repair',{name:'repair',action:'save',next:'v'}),terminal('done',{name:'done',status:'succeeded'}),terminal('failed',{name:'failed',status:'succeeded'})]});
```
修复后的完整源码:
```js
-import {defineWorkflow,node,action,verification,parallel,condition,loop,human,terminal} from '@devcodex/flowkit/dsl';
+import {defineWorkflow,node,action,verification,parallel,condition,loop,human,terminal} from '@devcodex-labs/flowkit/dsl';
export default defineWorkflow({id:'demo',version:'1.0.0',name:'Demo',nodes:[action('start',{name:'start',action:'save',next:'l'}),loop('l',{name:'L',maxIterations:3,body:'v',onSuccess:'done',onMaxExceeded:'failed'}),verification('v',{name:'V',verifier:'check',onSuccess:'l',onFailure:'repair'}),action('repair',{name:'repair',action:'save',next:'v'}),terminal('done',{name:'done',status:'succeeded'}),terminal('failed',{name:'failed',status:'succeeded'})]});
```
@@ -1245,14 +1245,14 @@ export default defineWorkflow({id:'demo',version:'1.0.0',name:'Demo',nodes:[acti
错误源码(保存为case.workflow.js):
```js
-import {defineWorkflow,node,action,verification,parallel,condition,loop,human,terminal} from '@devcodex/flowkit/dsl';
+import {defineWorkflow,node,action,verification,parallel,condition,loop,human,terminal} from '@devcodex-labs/flowkit/dsl';
export default defineWorkflow({id:'demo',version:'1.0.0',name:'Demo',nodes:[loop('l',{name:'L',maxIterations:3,body:'v',onSuccess:'done',onMaxExceeded:'failed'}),verification('v',{name:'V',verifier:'check',onSuccess:'l',onFailure:'repair'}),loop('repair',{name:'Repair',maxIterations:2,body:'v',onSuccess:'done',onMaxExceeded:'failed'}),terminal('done',{name:'done',status:'succeeded'}),terminal('failed',{name:'failed',status:'succeeded'})]});
```
修复后的完整源码:
```js
-import {defineWorkflow,node,action,verification,parallel,condition,loop,human,terminal} from '@devcodex/flowkit/dsl';
+import {defineWorkflow,node,action,verification,parallel,condition,loop,human,terminal} from '@devcodex-labs/flowkit/dsl';
export default defineWorkflow({id:'demo',version:'1.0.0',name:'Demo',nodes:[loop('l',{name:'L',maxIterations:3,body:'v',onSuccess:'done',onMaxExceeded:'failed'}),verification('v',{name:'V',verifier:'check',onSuccess:'l',onFailure:'repair'}),action('repair',{name:'repair',action:'save',next:'v'}),terminal('done',{name:'done',status:'succeeded'}),terminal('failed',{name:'failed',status:'succeeded'})]});
```
@@ -1281,14 +1281,14 @@ export default defineWorkflow({id:'demo',version:'1.0.0',name:'Demo',nodes:[loop
错误源码(保存为case.workflow.js):
```js
-import {defineWorkflow,node,action,verification,parallel,condition,loop,human,terminal} from '@devcodex/flowkit/dsl';
+import {defineWorkflow,node,action,verification,parallel,condition,loop,human,terminal} from '@devcodex-labs/flowkit/dsl';
export default defineWorkflow({id:'demo',version:'1.0.0',name:'Demo',nodes:[loop('l',{name:'L',maxIterations:3,body:'v',onSuccess:'done',onMaxExceeded:'failed'}),verification('v',{name:'V',verifier:'check',onSuccess:'l',onFailure:'repair'}),human('repair',{name:'Repair',onApprove:'v',onReject:'repair'}),terminal('done',{name:'done',status:'succeeded'}),terminal('failed',{name:'failed',status:'succeeded'})]});
```
修复后的完整源码:
```js
-import {defineWorkflow,node,action,verification,parallel,condition,loop,human,terminal} from '@devcodex/flowkit/dsl';
+import {defineWorkflow,node,action,verification,parallel,condition,loop,human,terminal} from '@devcodex-labs/flowkit/dsl';
export default defineWorkflow({id:'demo',version:'1.0.0',name:'Demo',nodes:[loop('l',{name:'L',maxIterations:3,body:'v',onSuccess:'done',onMaxExceeded:'failed'}),verification('v',{name:'V',verifier:'check',onSuccess:'l',onFailure:'repair'}),action('repair',{name:'repair',action:'save',next:'v'}),terminal('done',{name:'done',status:'succeeded'}),terminal('failed',{name:'failed',status:'succeeded'})]});
```
@@ -1317,14 +1317,14 @@ export default defineWorkflow({id:'demo',version:'1.0.0',name:'Demo',nodes:[loop
错误源码(保存为case.workflow.js):
```js
-import {defineWorkflow,node,action,verification,parallel,condition,loop,human,terminal} from '@devcodex/flowkit/dsl';
+import {defineWorkflow,node,action,verification,parallel,condition,loop,human,terminal} from '@devcodex-labs/flowkit/dsl';
export default defineWorkflow({id:'demo',version:'1.0.0',name:'Demo',nodes:[loop('l',{name:'L',maxIterations:3,body:'v',onSuccess:'done',onMaxExceeded:'failed'}),verification('v',{name:'V',verifier:'check',onSuccess:'l',onFailure:'repair'}),action('repair',{name:'repair',action:'save',next:'l'}),terminal('done',{name:'done',status:'succeeded'}),terminal('failed',{name:'failed',status:'succeeded'})]});
```
修复后的完整源码:
```js
-import {defineWorkflow,node,action,verification,parallel,condition,loop,human,terminal} from '@devcodex/flowkit/dsl';
+import {defineWorkflow,node,action,verification,parallel,condition,loop,human,terminal} from '@devcodex-labs/flowkit/dsl';
export default defineWorkflow({id:'demo',version:'1.0.0',name:'Demo',nodes:[loop('l',{name:'L',maxIterations:3,body:'v',onSuccess:'done',onMaxExceeded:'failed'}),verification('v',{name:'V',verifier:'check',onSuccess:'l',onFailure:'repair'}),action('repair',{name:'repair',action:'save',next:'v'}),terminal('done',{name:'done',status:'succeeded'}),terminal('failed',{name:'failed',status:'succeeded'})]});
```
@@ -1355,14 +1355,14 @@ export default defineWorkflow({id:'demo',version:'1.0.0',name:'Demo',nodes:[loop
错误源码(保存为case.workflow.js):
```js
-import {defineWorkflow,node,action,verification,parallel,condition,loop,human,terminal} from '@devcodex/flowkit/dsl';
+import {defineWorkflow,node,action,verification,parallel,condition,loop,human,terminal} from '@devcodex-labs/flowkit/dsl';
export default defineWorkflow({id:'demo',version:'1.0.0',name:'Demo',nodes:[node('n',{name:'N',output:{type:'object'},next:'done'}),terminal('done',{name:'done',status:'succeeded'})]});
```
修复后的完整源码:
```js
-import {defineWorkflow,node,action,verification,parallel,condition,loop,human,terminal} from '@devcodex/flowkit/dsl';
+import {defineWorkflow,node,action,verification,parallel,condition,loop,human,terminal} from '@devcodex-labs/flowkit/dsl';
export default defineWorkflow({id:'demo',version:'1.0.0',name:'Demo',nodes:[node('n',{name:'N',skill:'skills/writer.md',output:{type:'object'},next:'done'}),terminal('done',{name:'done',status:'succeeded'})]});
```
@@ -1391,14 +1391,14 @@ export default defineWorkflow({id:'demo',version:'1.0.0',name:'Demo',nodes:[node
错误源码(保存为case.workflow.js):
```js
-import {defineWorkflow,node,action,verification,parallel,condition,loop,human,terminal} from '@devcodex/flowkit/dsl';
+import {defineWorkflow,node,action,verification,parallel,condition,loop,human,terminal} from '@devcodex-labs/flowkit/dsl';
export default defineWorkflow({id:'demo',version:'1.0.0',name:'Demo',nodes:[node('n',{name:'N',skill:'skills/missing.md',output:{type:'object'},next:'done'}),terminal('done',{name:'done',status:'succeeded'})]});
```
修复后的完整源码:
```js
-import {defineWorkflow,node,action,verification,parallel,condition,loop,human,terminal} from '@devcodex/flowkit/dsl';
+import {defineWorkflow,node,action,verification,parallel,condition,loop,human,terminal} from '@devcodex-labs/flowkit/dsl';
export default defineWorkflow({id:'demo',version:'1.0.0',name:'Demo',nodes:[node('n',{name:'N',skill:'skills/writer.md',output:{type:'object'},next:'done'}),terminal('done',{name:'done',status:'succeeded'})]});
```
@@ -1427,14 +1427,14 @@ export default defineWorkflow({id:'demo',version:'1.0.0',name:'Demo',nodes:[node
错误源码(保存为case.workflow.js):
```js
-import {defineWorkflow,node,action,verification,parallel,condition,loop,human,terminal} from '@devcodex/flowkit/dsl';
+import {defineWorkflow,node,action,verification,parallel,condition,loop,human,terminal} from '@devcodex-labs/flowkit/dsl';
export default defineWorkflow({id:'demo',version:'1.0.0',name:'Demo',nodes:[node('n',{name:'N',skill:'skills\\writer.md',output:{type:'object'},next:'done'}),terminal('done',{name:'done',status:'succeeded'})]});
```
修复后的完整源码:
```js
-import {defineWorkflow,node,action,verification,parallel,condition,loop,human,terminal} from '@devcodex/flowkit/dsl';
+import {defineWorkflow,node,action,verification,parallel,condition,loop,human,terminal} from '@devcodex-labs/flowkit/dsl';
export default defineWorkflow({id:'demo',version:'1.0.0',name:'Demo',nodes:[node('n',{name:'N',skill:'skills/writer.md',output:{type:'object'},next:'done'}),terminal('done',{name:'done',status:'succeeded'})]});
```
@@ -1463,14 +1463,14 @@ export default defineWorkflow({id:'demo',version:'1.0.0',name:'Demo',nodes:[node
错误源码(保存为case.workflow.js):
```js
-import {defineWorkflow,node,action,verification,parallel,condition,loop,human,terminal} from '@devcodex/flowkit/dsl';
+import {defineWorkflow,node,action,verification,parallel,condition,loop,human,terminal} from '@devcodex-labs/flowkit/dsl';
export default defineWorkflow({id:'demo',version:'1.0.0',name:'Demo',nodes:[condition('c',{name:'C',branches:[{when:'flag',next:'write'},{when:'true',next:'read'}]}),action('write',{name:'write',action:'save',next:'done',writes:['x']}),node('read',{name:'N',agent:'writer',output:{type:'object'},next:'done',inputs:['x']}),terminal('done',{name:'done',status:'succeeded'})]});
```
修复后的完整源码:
```js
-import {defineWorkflow,node,action,verification,parallel,condition,loop,human,terminal} from '@devcodex/flowkit/dsl';
+import {defineWorkflow,node,action,verification,parallel,condition,loop,human,terminal} from '@devcodex-labs/flowkit/dsl';
export default defineWorkflow({id:'demo',version:'1.0.0',name:'Demo',nodes:[condition('c',{name:'C',branches:[{when:'flag',next:'write'},{when:'true',next:'write'}]}),action('write',{name:'write',action:'save',next:'read',writes:['x']}),node('read',{name:'N',agent:'writer',output:{type:'object'},next:'done',inputs:['x']}),terminal('done',{name:'done',status:'succeeded'})]});
```
@@ -1499,14 +1499,14 @@ export default defineWorkflow({id:'demo',version:'1.0.0',name:'Demo',nodes:[cond
错误源码(保存为case.workflow.js):
```js
-import {defineWorkflow,node,action,verification,parallel,condition,loop,human,terminal} from '@devcodex/flowkit/dsl';
+import {defineWorkflow,node,action,verification,parallel,condition,loop,human,terminal} from '@devcodex-labs/flowkit/dsl';
export default defineWorkflow({id:'demo',version:'1.0.0',name:'Demo',nodes:[node('n',{name:'N',agent:'writer',output:{type:'array'},next:'done'}),terminal('done',{name:'done',status:'succeeded'})]});
```
修复后的完整源码:
```js
-import {defineWorkflow,node,action,verification,parallel,condition,loop,human,terminal} from '@devcodex/flowkit/dsl';
+import {defineWorkflow,node,action,verification,parallel,condition,loop,human,terminal} from '@devcodex-labs/flowkit/dsl';
export default defineWorkflow({id:'demo',version:'1.0.0',name:'Demo',nodes:[node('n',{name:'N',skill:'skills/writer.md',output:{type:'object'},next:'done'}),terminal('done',{name:'done',status:'succeeded'})]});
```
@@ -1535,14 +1535,14 @@ export default defineWorkflow({id:'demo',version:'1.0.0',name:'Demo',nodes:[node
错误源码(保存为case.workflow.js):
```js
-import {defineWorkflow,node,action,verification,parallel,condition,loop,human,terminal} from '@devcodex/flowkit/dsl';
+import {defineWorkflow,node,action,verification,parallel,condition,loop,human,terminal} from '@devcodex-labs/flowkit/dsl';
export default defineWorkflow({id:'demo',version:'1.0.0',name:'Demo',nodes:[node('n',{name:'N',agent:'writer',output:{type:'object'},next:'done',retries:11}),terminal('done',{name:'done',status:'succeeded'})]});
```
修复后的完整源码:
```js
-import {defineWorkflow,node,action,verification,parallel,condition,loop,human,terminal} from '@devcodex/flowkit/dsl';
+import {defineWorkflow,node,action,verification,parallel,condition,loop,human,terminal} from '@devcodex-labs/flowkit/dsl';
export default defineWorkflow({id:'demo',version:'1.0.0',name:'Demo',nodes:[node('n',{name:'N',skill:'skills/writer.md',output:{type:'object'},next:'done'}),terminal('done',{name:'done',status:'succeeded'})]});
```
@@ -1571,14 +1571,14 @@ export default defineWorkflow({id:'demo',version:'1.0.0',name:'Demo',nodes:[node
错误源码(保存为case.workflow.js):
```js
-import {defineWorkflow,node,action,verification,parallel,condition,loop,human,terminal} from '@devcodex/flowkit/dsl';
+import {defineWorkflow,node,action,verification,parallel,condition,loop,human,terminal} from '@devcodex-labs/flowkit/dsl';
export default defineWorkflow({id:'demo',version:'1.0.0',name:'Demo',nodes:[action('a',{name:'a',action:'save',next:'done',writes:['x','x']}),terminal('done',{name:'done',status:'succeeded'})]});
```
修复后的完整源码:
```js
-import {defineWorkflow,node,action,verification,parallel,condition,loop,human,terminal} from '@devcodex/flowkit/dsl';
+import {defineWorkflow,node,action,verification,parallel,condition,loop,human,terminal} from '@devcodex-labs/flowkit/dsl';
export default defineWorkflow({id:'demo',version:'1.0.0',name:'Demo',nodes:[action('a',{name:'a',action:'save',next:'done',writes:['x']}),terminal('done',{name:'done',status:'succeeded'})]});
```
@@ -1607,14 +1607,14 @@ export default defineWorkflow({id:'demo',version:'1.0.0',name:'Demo',nodes:[acti
错误源码(保存为case.workflow.js):
```js
-import {defineWorkflow,node,action,verification,parallel,condition,loop,human,terminal} from '@devcodex/flowkit/dsl';
+import {defineWorkflow,node,action,verification,parallel,condition,loop,human,terminal} from '@devcodex-labs/flowkit/dsl';
export default defineWorkflow({id:'demo',version:'1.0.0',name:'Demo',nodes:[node('n',{name:'N',skill:'https://skills.example.test/style.md',integrity:'sha256-GVdESIiHGUAdgUwF8wkh3HmX5deMlNBOUtZXJWVTaW4=',output:{type:'object'},next:'done'}),terminal('done',{name:'done',status:'succeeded'})]});
```
修复后的完整源码:
```js
-import {defineWorkflow,node,action,verification,parallel,condition,loop,human,terminal} from '@devcodex/flowkit/dsl';
+import {defineWorkflow,node,action,verification,parallel,condition,loop,human,terminal} from '@devcodex-labs/flowkit/dsl';
export default defineWorkflow({id:'demo',version:'1.0.0',name:'Demo',nodes:[node('n',{name:'N',skill:'https://skills.example.test/style.md',integrity:'sha256-GVdESIiHGUAdgUwF8wkh3HmX5deMlNBOUtZXJWVTaW4=',output:{type:'object'},next:'done'}),terminal('done',{name:'done',status:'succeeded'})]});
```
@@ -1647,14 +1647,14 @@ export default defineWorkflow({id:'demo',version:'1.0.0',name:'Demo',nodes:[node
错误源码(保存为case.workflow.js):
```js
-import {defineWorkflow,node,action,verification,parallel,condition,loop,human,terminal} from '@devcodex/flowkit/dsl';
+import {defineWorkflow,node,action,verification,parallel,condition,loop,human,terminal} from '@devcodex-labs/flowkit/dsl';
export default defineWorkflow({id:'demo',version:'1.0.0',name:'Demo',nodes:[node('n',{name:'N',skill:'https://skills.example.test/style.md',integrity:'',output:{type:'object'},next:'done'}),terminal('done',{name:'done',status:'succeeded'})]});
```
修复后的完整源码:
```js
-import {defineWorkflow,node,action,verification,parallel,condition,loop,human,terminal} from '@devcodex/flowkit/dsl';
+import {defineWorkflow,node,action,verification,parallel,condition,loop,human,terminal} from '@devcodex-labs/flowkit/dsl';
export default defineWorkflow({id:'demo',version:'1.0.0',name:'Demo',nodes:[node('n',{name:'N',skill:'https://skills.example.test/style.md',integrity:'sha256-GVdESIiHGUAdgUwF8wkh3HmX5deMlNBOUtZXJWVTaW4=',output:{type:'object'},next:'done'}),terminal('done',{name:'done',status:'succeeded'})]});
```
@@ -1691,14 +1691,14 @@ export default defineWorkflow({id:'demo',version:'1.0.0',name:'Demo',nodes:[node
错误源码(保存为case.workflow.js):
```js
-import {defineWorkflow,node,action,verification,parallel,condition,loop,human,terminal} from '@devcodex/flowkit/dsl';
+import {defineWorkflow,node,action,verification,parallel,condition,loop,human,terminal} from '@devcodex-labs/flowkit/dsl';
export default defineWorkflow({id:'demo',version:'1.0.0',name:'Demo',nodes:[node('n',{name:'N',skill:'https://skills.example.test/style.md',output:{type:'object'},next:'done'}),terminal('done',{name:'done',status:'succeeded'})]});
```
修复后的完整源码:
```js
-import {defineWorkflow,node,action,verification,parallel,condition,loop,human,terminal} from '@devcodex/flowkit/dsl';
+import {defineWorkflow,node,action,verification,parallel,condition,loop,human,terminal} from '@devcodex-labs/flowkit/dsl';
export default defineWorkflow({id:'demo',version:'1.0.0',name:'Demo',nodes:[node('n',{name:'N',skill:'https://skills.example.test/style.md',integrity:'sha256-GVdESIiHGUAdgUwF8wkh3HmX5deMlNBOUtZXJWVTaW4=',output:{type:'object'},next:'done'}),terminal('done',{name:'done',status:'succeeded'})]});
```
@@ -1737,14 +1737,14 @@ export default defineWorkflow({id:'demo',version:'1.0.0',name:'Demo',nodes:[node
错误源码(保存为case.workflow.js):
```js
-import {defineWorkflow,node,action,verification,parallel,condition,loop,human,terminal} from '@devcodex/flowkit/dsl';
+import {defineWorkflow,node,action,verification,parallel,condition,loop,human,terminal} from '@devcodex-labs/flowkit/dsl';
export default defineWorkflow({id:'demo',version:'1.0.0',name:'Demo',nodes:[human('h',{name:'H',onApprove:'done',onReject:'repair'}),action('repair',{name:'repair',action:'save',next:'done'}),terminal('done',{name:'done',status:'succeeded'})]});
```
修复后的完整源码:
```js
-import {defineWorkflow,node,action,verification,parallel,condition,loop,human,terminal} from '@devcodex/flowkit/dsl';
+import {defineWorkflow,node,action,verification,parallel,condition,loop,human,terminal} from '@devcodex-labs/flowkit/dsl';
export default defineWorkflow({id:'demo',version:'1.0.0',name:'Demo',nodes:[human('h',{name:'H',onApprove:'done',onReject:'repair'}),action('repair',{name:'repair',action:'save',next:'h'}),terminal('done',{name:'done',status:'succeeded'})]});
```
@@ -1773,14 +1773,14 @@ export default defineWorkflow({id:'demo',version:'1.0.0',name:'Demo',nodes:[huma
错误源码(保存为case.workflow.js):
```js
-import {defineWorkflow,node,action,verification,parallel,condition,loop,human,terminal} from '@devcodex/flowkit/dsl';
+import {defineWorkflow,node,action,verification,parallel,condition,loop,human,terminal} from '@devcodex-labs/flowkit/dsl';
export default defineWorkflow({id:'demo',version:'1.0.0',name:'Demo',nodes:[human('h',{name:'H',onApprove:'done',onReject:'repair'}),condition('repair',{name:'Repair',branches:[{when:'true',next:'h'}]}),terminal('done',{name:'done',status:'succeeded'})]});
```
修复后的完整源码:
```js
-import {defineWorkflow,node,action,verification,parallel,condition,loop,human,terminal} from '@devcodex/flowkit/dsl';
+import {defineWorkflow,node,action,verification,parallel,condition,loop,human,terminal} from '@devcodex-labs/flowkit/dsl';
export default defineWorkflow({id:'demo',version:'1.0.0',name:'Demo',nodes:[human('h',{name:'H',onApprove:'done',onReject:'repair'}),action('repair',{name:'repair',action:'save',next:'h'}),terminal('done',{name:'done',status:'succeeded'})]});
```
@@ -1809,14 +1809,14 @@ export default defineWorkflow({id:'demo',version:'1.0.0',name:'Demo',nodes:[huma
错误源码(保存为case.workflow.js):
```js
-import {defineWorkflow,node,action,verification,parallel,condition,loop,human,terminal} from '@devcodex/flowkit/dsl';
+import {defineWorkflow,node,action,verification,parallel,condition,loop,human,terminal} from '@devcodex-labs/flowkit/dsl';
export default defineWorkflow({id:'demo',version:'1.0.0',name:'Demo',nodes:[terminal('done',{name:'Done',status:'ok'})]});
```
修复后的完整源码:
```js
-import {defineWorkflow,node,action,verification,parallel,condition,loop,human,terminal} from '@devcodex/flowkit/dsl';
+import {defineWorkflow,node,action,verification,parallel,condition,loop,human,terminal} from '@devcodex-labs/flowkit/dsl';
export default defineWorkflow({id:'demo',version:'1.0.0',name:'Demo',nodes:[terminal('done',{name:'done',status:'succeeded'})]});
```
@@ -1847,14 +1847,14 @@ export default defineWorkflow({id:'demo',version:'1.0.0',name:'Demo',nodes:[term
错误源码(保存为case.workflow.js):
```js
-import {defineWorkflow,node,action,verification,parallel,condition,loop,human,terminal} from '@devcodex/flowkit/dsl';
+import {defineWorkflow,node,action,verification,parallel,condition,loop,human,terminal} from '@devcodex-labs/flowkit/dsl';
export default defineWorkflow({id:'demo',version:'1.0.0',name:'Demo',nodes:[action('a',{name:'a',action:'save',next:'a'})]});
```
修复后的完整源码:
```js
-import {defineWorkflow,node,action,verification,parallel,condition,loop,human,terminal} from '@devcodex/flowkit/dsl';
+import {defineWorkflow,node,action,verification,parallel,condition,loop,human,terminal} from '@devcodex-labs/flowkit/dsl';
export default defineWorkflow({id:'demo',version:'1.0.0',name:'Demo',nodes:[action('a',{name:'a',action:'save',next:'done'}),terminal('done',{name:'done',status:'succeeded'})]});
```
@@ -1883,14 +1883,14 @@ export default defineWorkflow({id:'demo',version:'1.0.0',name:'Demo',nodes:[acti
错误源码(保存为case.workflow.js):
```js
-import {defineWorkflow,node,action,verification,parallel,condition,loop,human,terminal} from '@devcodex/flowkit/dsl';
+import {defineWorkflow,node,action,verification,parallel,condition,loop,human,terminal} from '@devcodex-labs/flowkit/dsl';
export default defineWorkflow({id:'demo',version:'1.0.0',name:'Demo',nodes:[action('a-0',{name:'a-0',action:'save',next:'a0'}),action('a0',{name:'a0',action:'save',next:'done'}),terminal('done',{name:'done',status:'succeeded'})]});
```
修复后的完整源码:
```js
-import {defineWorkflow,node,action,verification,parallel,condition,loop,human,terminal} from '@devcodex/flowkit/dsl';
+import {defineWorkflow,node,action,verification,parallel,condition,loop,human,terminal} from '@devcodex-labs/flowkit/dsl';
export default defineWorkflow({id:'demo',version:'1.0.0',name:'Demo',nodes:[action('a-0',{name:'a-0',action:'save',next:'b0'}),action('b0',{name:'b0',action:'save',next:'done'}),terminal('done',{name:'done',status:'succeeded'})]});
```
diff --git a/website/content/troubleshooting/index.mdx b/website/content/troubleshooting/index.mdx
index c9bd4ca..0ecb263 100644
--- a/website/content/troubleshooting/index.mdx
+++ b/website/content/troubleshooting/index.mdx
@@ -19,7 +19,7 @@
## 最小诊断步骤
-在消费者目录执行`node --version`和`npm ls @devcodex/flowkit`,记录实际版本。运行compile,保留完整诊断和退出码;若无error,确认compiled/mmd存在,再运行check。最后运行宿主,记录result或原始异常的code/reasons/cause是否存在。
+在消费者目录执行`node --version`和`npm ls @devcodex-labs/flowkit`,记录实际版本。运行compile,保留完整诊断和退出码;若无error,确认compiled/mmd存在,再运行check。最后运行宿主,记录result或原始异常的code/reasons/cause是否存在。
直接SDK中compile/check返回诊断,run编译失败会拒绝并附带phase:compile和diagnostics;调用参数、文件I/O与业务异常不保证具有FK代码。先保留原错误类型,避免统一包装丢失定位信息。
@@ -43,3 +43,9 @@ Node/npm版本与操作系统:
```
在[GitHub Issues](https://github.com/devcodex-labs/flowkit/issues)提交可复现信息。删除模型密钥、凭据、真实用户数据和不必要的业务内容;可以用固定响应替代外部服务,保留同样返回形状。不要只贴截图或一行“运行失败”。贡献过程见[参与贡献](/community/contributing)。
+
+## 私有 Registry 与图谱集成排错
+
+安装返回 401/403/404 时,先检查 `@devcodex-labs` Registry、PAT (classic) 的 `read:packages`、SSO 授权与包的读取权限,不要自动改用公共 npm 或换回旧包名。
+
+Graph 适配器的 `FK_CG_BINDING_MISSING` 表示宿主没有注册动作,`FK_CG_NOT_APPLICABLE` 表示环境事实缺失/不匹配,`FK_CG_DEPENDENCIES_INCOMPLETE` 表示解析不完整。原始 `CG_*` GraphError(如权限拒绝)由 SDK 抛出,不属于 FlowKit 已有的 61 个编译/运行错误码。参见[能力图谱示例](/examples/capability-graph)。
diff --git a/website/coverage.json b/website/coverage.json
index ada188a..90970a7 100644
--- a/website/coverage.json
+++ b/website/coverage.json
@@ -6,7 +6,7 @@
"file": "index.mdx",
"group": "开始使用",
"status": "drafted",
- "scope": "定位、版本、开源和三步编排;首页按钮/图",
+ "scope": "私有产品定位、公开文档、未来托管服务方向和工作流介绍",
"validation": "RT01/07,V-SITE"
},
{
@@ -22,11 +22,11 @@
{
"id": "P03",
"route": "/guide/installation",
- "title": "安装与环境",
+ "title": "内部安装与环境",
"file": "guide/installation.mdx",
"group": "开始使用",
"status": "drafted",
- "scope": "精确安装、ESM、CLI、实际包版本",
+ "scope": "仅维护者的私有包安装、ESM、CLI 和内部部署权限",
"validation": "RT01,E01"
},
{
@@ -36,7 +36,7 @@
"file": "guide/quick-start.mdx",
"group": "开始使用",
"status": "drafted",
- "scope": "完整两文件、编译/检查/输出;README 同源",
+ "scope": "内部维护者的完整两文件工作流编译、检查和运行",
"validation": "RT01,E01"
},
{
@@ -414,7 +414,7 @@
"route": "/community/contributing",
"title": "参与贡献",
"file": "community/contributing.mdx",
- "group": "开源项目",
+ "group": "项目维护",
"status": "drafted",
"scope": "实际scripts、本地docs修改和示例更新、PR说明",
"validation": "V-MAINT,V-CONTENT"
@@ -424,7 +424,7 @@
"route": "/community/compatibility",
"title": "兼容与支持范围",
"file": "community/compatibility.mdx",
- "group": "开源项目",
+ "group": "项目维护",
"status": "drafted",
"scope": "SDK与站点环境分别说明,平台证据不扩大",
"validation": "V-TYPES,V-MAINT"
@@ -434,7 +434,7 @@
"route": "/community/changelog",
"title": "v1.0.0 发布记录",
"file": "community/changelog.mdx",
- "group": "开源项目",
+ "group": "项目维护",
"status": "drafted",
"scope": "与根CHANGELOG逐项对齐,仅首个正式发行",
"validation": "V-RELEASE,V-CONTENT"
@@ -442,11 +442,11 @@
{
"id": "P45",
"route": "/community/license",
- "title": "开源许可证",
+ "title": "授权与使用",
"file": "community/license.mdx",
- "group": "开源项目",
+ "group": "项目维护",
"status": "drafted",
- "scope": "MIT、2026 devcodex-labs与根LICENSE/包声明一致",
+ "scope": "专有授权、包内 LICENSE、第三方依赖与访问权限",
"validation": "V-RELEASE"
},
{
@@ -456,7 +456,27 @@
"file": "maintainers/releasing.mdx",
"group": "发布维护",
"status": "drafted",
- "scope": "候选→公开包消费→站点、确切commit、失败与回退",
+ "scope": "候选→GitHub Packages 私有包消费→文档站、确切 Commit 与失败恢复",
"validation": "V-RELEASE,V-MAINT"
+ },
+ {
+ "id": "P47",
+ "route": "/guide/capability-provider",
+ "title": "向 capability-graph 声明 FlowKit 能力",
+ "file": "guide/capability-provider.mdx",
+ "group": "使用指南",
+ "status": "drafted",
+ "scope": "Provider Schema、能力目录、依赖与能力 ID 的声明边界",
+ "validation": "E13,G02-G08"
+ },
+ {
+ "id": "P48",
+ "route": "/examples/capability-graph",
+ "title": "capability-graph 宿主消费示例",
+ "file": "examples/capability-graph.mdx",
+ "group": "场景示例",
+ "status": "drafted",
+ "scope": "Graph 查询、宿主显式绑定、授权/适用性/依赖失败反例",
+ "validation": "E13,G01-G15"
}
]
diff --git a/website/navigation.ts b/website/navigation.ts
index 41c1458..abbc890 100644
--- a/website/navigation.ts
+++ b/website/navigation.ts
@@ -5,7 +5,7 @@ const active = pages.filter(page => existsSync(fileURLToPath(new URL(`./content/
const groups = [...new Set(active.map(page => page.group))];
export const sidebar = { '/': groups.map(group => ({ text: group, items: active.filter(page => page.group === group && page.id !== 'P01').map(page => ({ text: page.title, link: page.route })) })).filter(group => group.items.length) };
export const nav = [
- { text: '开始使用', link: '/guide/quick-start', activeMatch: '^/guide/(introduction|installation|quick-start|javascript-typescript)' },
+ { text: '了解 FlowKit', link: '/guide/introduction', activeMatch: '^/guide/(introduction|installation|quick-start|javascript-typescript)' },
{ text: '使用指南', link: '/guide/workflow-model', activeMatch: '^/guide/(?!introduction|installation|quick-start|javascript-typescript)' },
{ text: '参考', link: '/dsl/index', activeMatch: '^/(dsl|reference)/' },
{ text: '示例', link: '/examples/index', activeMatch: '^/examples/' },
diff --git a/website/rspress.config.ts b/website/rspress.config.ts
index 5df50eb..592e026 100644
--- a/website/rspress.config.ts
+++ b/website/rspress.config.ts
@@ -2,7 +2,7 @@ import { defineConfig } from '@rspress/core';
import { pluginSitemap } from '@rspress/plugin-sitemap';
import { existsSync } from 'node:fs';
import { fileURLToPath } from 'node:url';
-import { base, repository, siteUrl, version, publicUrl } from './site';
+import { base, siteUrl, version, publicUrl } from './site';
import { nav, sidebar } from './navigation';
import pages from './coverage.json';
import { alignSearchHeadingBoundaries } from './search-index.mjs';
@@ -22,8 +22,6 @@ export default defineConfig({
plugins: [sitemap, { name: 'flowkit-search-heading-boundaries', modifySearchIndexData: alignSearchHeadingBoundaries }],
themeConfig: {
nav, sidebar,
- socialLinks: [{ icon: 'github', mode: 'link', content: repository }],
- editLink: { docRepoBaseUrl: `${repository}/edit/main/website/content` },
- footer: { message: `FlowKit v${version} · MIT · Copyright © 2026 devcodex-labs` },
+ footer: { message: `FlowKit v${version} · 专有授权 · Copyright © 2026 devcodex-labs` },
},
});
diff --git a/website/scripts/check-content.mjs b/website/scripts/check-content.mjs
index af30dd7..7393119 100644
--- a/website/scripts/check-content.mjs
+++ b/website/scripts/check-content.mjs
@@ -6,8 +6,9 @@ import { expectedReadme } from '../../scripts/docs/sync-readme.mjs';
const website = fileURLToPath(new URL('../', import.meta.url));
const root = path.dirname(website);
export function checkCoverage(pages) {
- assert.deepEqual(pages.map(page => page.id), Array.from({ length: 46 }, (_, index) => `P${String(index + 1).padStart(2, '0')}`));
- for (const field of ['route', 'file']) assert.equal(new Set(pages.map(page => page[field])).size, 46, `Duplicate ${field}`);
+ assert.ok(pages.length > 0, 'No documented pages');
+ assert.deepEqual(pages.map(page => page.id), Array.from({ length: pages.length }, (_, index) => `P${String(index + 1).padStart(2, '0')}`));
+ for (const field of ['route', 'file']) assert.equal(new Set(pages.map(page => page[field])).size, pages.length, `Duplicate ${field}`);
for (const page of pages) assert.ok(page.title && page.scope && page.validation, `Missing page responsibility: ${page.id}`);
}
export function assertNoPrivateContent(text, name) { assert.ok(!/\.devcodex|\.task-lifecycle|TL-\d{8}-\d+|[\uFFFD]/.test(text), `Private or corrupt content: ${name}`); }
@@ -15,9 +16,9 @@ export function assertAnchors(body, names, label) {
const actual = [...body.matchAll(/<\/a>|\{#([^}]+)\}/g)].map(match => match[1] ?? match[2]);
for (const name of names) assert.equal(actual.filter(value => value === name).length, 1, `Missing/duplicate ${label} ${name}`);
}
-export function assertVersion(pkg) { assert.equal(pkg.version, '1.0.0'); assert.equal(pkg.license, 'MIT'); assert.equal(pkg.private, false); }
+export function assertVersion(pkg) { assert.match(pkg.version, /^\d+\.\d+\.\d+(?:-[0-9A-Za-z.-]+)?$/); assert.equal(pkg.name, '@devcodex-labs/flowkit'); assert.equal(pkg.license, 'SEE LICENSE IN LICENSE'); assert.equal(pkg.private, false); assert.equal(pkg.publishConfig?.registry, 'https://npm.pkg.github.com/'); }
export function phaseLimit(args) {
- if (!args.length) return 46;
+ if (!args.length) return Number.POSITIVE_INFINITY;
assert.equal(args.length, 2); assert.equal(args[0], '--phase');
assert.ok(['B1', 'B2'].includes(args[1]) && !process.env.CI, 'Partial checks are local only');
return args[1] === 'B1' ? 4 : 31;
@@ -37,7 +38,7 @@ export async function checkContent(args = []) {
assert.ok(page.id === 'P01' || text.includes(`# ${page.title}`), `Missing title: ${page.file}`);
for (const match of text.matchAll(/```\w+\s+file="([^"]+)"/g)) await access(path.resolve(path.dirname(filename), match[1]));
}
- if (limit === 46) {
+ if (limit === Number.POSITIVE_INFINITY) {
const changelog = (await readFile(path.join(root, 'CHANGELOG.md'), 'utf8'))
.replace(/^# 更新记录\r?\n/, '# v1.0.0 发布记录\n')
.replace('(LICENSE)', '(https://github.com/devcodex-labs/flowkit/blob/main/LICENSE)');
@@ -65,6 +66,6 @@ export async function checkContent(args = []) {
}
}
}
- return { pages: limit, full: limit === 46, passed: true };
+ return { pages: pages.slice(0, limit).length, full: limit === Number.POSITIVE_INFINITY, passed: true };
}
if (process.argv[1] === fileURLToPath(import.meta.url)) console.log(JSON.stringify(await checkContent(process.argv.slice(2))));
diff --git a/website/scripts/check-rendered.mjs b/website/scripts/check-rendered.mjs
index bcfddd8..f51c9b0 100644
--- a/website/scripts/check-rendered.mjs
+++ b/website/scripts/check-rendered.mjs
@@ -57,6 +57,6 @@ export async function checkRendered(args = []) {
}
for (const [file, info] of inspected) for (const href of [...info.links, ...info.assets]) checkLink(href, file, inventory, idsByFile);
assert.ok(inspected.get('404.html')?.text.includes('页面未找到'), 'Missing Chinese 404');
- return { pages: pages.length, html: inspected.size, full: limit === 46, passed: true };
+ return { pages: pages.length, html: inspected.size, full: limit === Number.POSITIVE_INFINITY, passed: true };
}
if (process.argv[1] === fileURLToPath(import.meta.url)) console.log(JSON.stringify(await checkRendered(process.argv.slice(2))));
diff --git a/website/scripts/checks.test.mjs b/website/scripts/checks.test.mjs
index fc440c2..c0e32ef 100644
--- a/website/scripts/checks.test.mjs
+++ b/website/scripts/checks.test.mjs
@@ -44,8 +44,8 @@ test('missing or duplicate API anchors and incorrect release identity fail', ()
assertAnchors('## run:执行工作流 {#run}', ['run'], 'SDK');
assert.throws(() => assertAnchors('', ['run', 'compile'], 'SDK'), /compile/);
assert.throws(() => assertAnchors('', ['run'], 'SDK'), /duplicate/);
- assertVersion({ version: '1.0.0', license: 'MIT', private: false });
- assert.throws(() => assertVersion({ version: '0.1.0', license: 'MIT', private: false }));
+ assertVersion({ name: '@devcodex-labs/flowkit', version: '1.0.0', license: 'SEE LICENSE IN LICENSE', private: false, publishConfig: { registry: 'https://npm.pkg.github.com/' } });
+ assert.throws(() => assertVersion({ name: '@devcodex-labs/flowkit', version: 'not-semver', license: 'SEE LICENSE IN LICENSE', private: false, publishConfig: { registry: 'https://npm.pkg.github.com/' } }));
});
test('exact heading search hits keep their correct anchor without dropping prose matches', () => {
const header = { type: 'header', title: 'SDK API', header: 'SDK API > compileSource:编译文本', link: '/reference/sdk#compileSource' };