@dazitech/cli 3.0.0 → 3.0.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +16 -14
- package/dist/clis/dazi-app.js +95 -14
- package/dist/clis/dazi-flow.js +602 -172
- package/dist/clis/dazi-onto.js +5 -3
- package/dist/clis/dazi.js +139 -38
- package/dist/docs/app/app-init.md +15 -15
- package/dist/docs/app/build-upload.md +13 -13
- package/dist/docs/app/release-guide.md +9 -9
- package/dist/docs/app//344/270/273/350/246/201/350/264/242/345/212/241/346/214/207/346/240/207/345/244/215/346/235/202/346/212/245/350/241/250/345/274/200/345/217/221/345/256/236/350/267/265.md +45 -41
- package/dist/docs/auth/auth-login.md +4 -4
- package/dist/docs/auth/token-management.md +5 -5
- package/dist/docs/data/cube-guide.md +2 -2
- package/dist/docs/data/data-spaces.md +4 -3
- package/dist/docs/data/table-preview.md +6 -6
- package/dist/docs/flow/ai-workflow-playbook.md +69 -0
- package/dist/docs/flow/flow-project-guide.md +92 -87
- package/dist/docs/flow/flows-guide.md +98 -94
- package/dist/docs/flow/local-files-spec.md +194 -0
- package/dist/docs/flow/node-code-guide.md +57 -55
- package/dist/docs/flow/run-guide.md +18 -18
- package/dist/docs/flow/variables-guide.md +61 -61
- package/dist/docs/flow//346/265/201/347/250/213/345/274/200/345/217/221/346/234/200/344/275/263/345/256/236/350/267/265-VS-flow0/346/241/210/344/276/213.md +31 -31
- package/dist/docs/guides/cli-invocation.md +30 -29
- package/dist/docs/guides/cli-reference.md +72 -71
- package/dist/docs/guides/flow-consistency-checklist.md +42 -0
- package/dist/docs/guides/mcp-setup.md +34 -34
- package/dist/docs/guides/migrate-v2-v3.md +6 -5
- package/dist/docs/guides/quickstart.md +8 -8
- package/dist/docs/guides/troubleshooting.md +40 -22
- package/dist/docs/guides/workspace-v3.md +17 -17
- package/dist/docs/index.json +19 -7
- package/dist/docs/onto/action-guide.md +4 -3
- package/dist/docs/onto/dazi_script_sdk_reference.md +20 -14
- package/dist/docs/onto/dazi_script_seed_data_guide.md +14 -14
- package/dist/docs/onto/function-guide.md +5 -5
- package/dist/docs/onto/rule-guide.md +7 -6
- package/dist/docs/onto/space-management.md +5 -3
- package/dist/docs/onto//346/234/254/344/275/223/350/204/232/346/234/254/347/274/226/345/206/231/346/214/207/345/215/227.md +35 -35
- package/dist/docs/onto//346/234/254/344/275/223/350/247/204/345/210/222/346/214/207/345/215/227.md +21 -21
- package/dist/docs/onto//350/247/204/345/210/222/347/244/272/344/276/213_/345/210/251/346/266/246/345/210/206/346/236/220/346/234/254/344/275/223/346/226/271/346/241/210.md +11 -11
- package/dist/examples/flow/minimal-excel-python/README.md +5 -0
- package/dist/examples/flow/minimal-excel-python/flow.json +48 -0
- package/dist/examples/flow/minimal-excel-python/flow.meta.json +23 -0
- package/dist/examples/flow/minimal-excel-python//350/212/202/347/202/271/Excel/347/244/272/344/276/213/code.py +7 -0
- package/dist/examples/flow/minimal-excel-python//350/212/202/347/202/271/Excel/347/244/272/344/276/213/node.info.json +14 -0
- package/dist/examples/index.json +7 -1
- package/dist/prompts/data/data-analysis.md +2 -2
- package/dist/prompts/flow/ai-workflow-playbook.md +69 -0
- package/dist/prompts/flow/flow-design.md +33 -19
- package/dist/prompts/flow/plan-generate.md +7 -7
- package/dist/prompts/flow/run-debug.md +15 -15
- package/dist/prompts/flow/run-fix-loop.md +20 -17
- package/dist/prompts/general/ask-dazi.md +6 -6
- package/dist/prompts/general/troubleshoot.md +4 -3
- package/dist/prompts/index.json +94 -15
- package/dist/prompts/onto/action-design.md +7 -5
- package/dist/prompts/onto/function-design.md +6 -4
- package/dist/prompts/onto/rule-seed.md +4 -2
- package/dist/prompts/onto/script-publish-run.md +19 -19
- package/package.json +1 -1
package/README.md
CHANGED
|
@@ -2,14 +2,16 @@
|
|
|
2
2
|
|
|
3
3
|
搭子 v3 终端 CLI 的 **pnpm 可发布包**,与 `dazi-vscode` 扩展使用同一套 `bundled/clis` 产物。
|
|
4
4
|
|
|
5
|
+
完整说明见:**`dazi/docs/341-dazi-vscode-cli打包和发布指南.md`**。
|
|
6
|
+
|
|
5
7
|
## 与 `dazi.ps1` 的关系
|
|
6
8
|
|
|
7
|
-
| 方式
|
|
8
|
-
|
|
9
|
-
|
|
|
10
|
-
| **`dazi` / `dazi-flow`(本包)** | 开发机全局短命令
|
|
9
|
+
| 方式 | 适用 |
|
|
10
|
+
| -------------------------------- | -------------------------------- |
|
|
11
|
+
| `dazi` | 仅拷贝 `dazi-work`、未装全局 CLI |
|
|
12
|
+
| **`dazi` / `dazi-flow`(本包)** | 开发机全局短命令 |
|
|
11
13
|
|
|
12
|
-
二者等价:`dazi flow …` ≈
|
|
14
|
+
二者等价:`dazi flow …` ≈ `dazi flow …`。
|
|
13
15
|
|
|
14
16
|
## 研发:准备发布目录
|
|
15
17
|
|
|
@@ -58,15 +60,15 @@ pnpm run publish:cli
|
|
|
58
60
|
|
|
59
61
|
**方式 B — Granular Access Token + `.npmrc`(纯文本文件):**
|
|
60
62
|
|
|
63
|
+
**推荐**把 token 写在 `%USERPROFILE%\.npmrc`(避免 `pnpm run vsix` 把密钥打进扩展包):
|
|
64
|
+
|
|
61
65
|
```powershell
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
# 用编辑器打开 .npmrc,把 YOUR_NPM_TOKEN_HERE 换成 npm_ 开头的 token
|
|
65
|
-
cd ..\..
|
|
66
|
+
copy packages\cli-dist\.npmrc.example %USERPROFILE%\.npmrc
|
|
67
|
+
notepad %USERPROFILE%\.npmrc
|
|
66
68
|
pnpm run publish:cli
|
|
67
69
|
```
|
|
68
70
|
|
|
69
|
-
|
|
71
|
+
勿在 `packages\cli-dist\.npmrc` 长期保存真实 token。若已泄露,请在 npm 上 Revoke 该 token 并重建。
|
|
70
72
|
|
|
71
73
|
内网 registry:把 `registry=` 和 token 行改成你们私服地址。
|
|
72
74
|
|
|
@@ -76,7 +78,7 @@ pnpm run publish:cli
|
|
|
76
78
|
|
|
77
79
|
```powershell
|
|
78
80
|
# 全局
|
|
79
|
-
pnpm add -g @dazitech/cli@3.0.
|
|
81
|
+
pnpm add -g @dazitech/cli@3.0.2
|
|
80
82
|
|
|
81
83
|
# 确认 PATH(pnpm 全局 bin)
|
|
82
84
|
pnpm bin -g
|
|
@@ -98,7 +100,7 @@ dazi flow project status --dir "项目\flow_xxx\流程\MyFlow"
|
|
|
98
100
|
|
|
99
101
|
## 环境变量
|
|
100
102
|
|
|
101
|
-
| 变量
|
|
102
|
-
|
|
103
|
-
| `DAZI_BUNDLED_DIR`
|
|
103
|
+
| 变量 | 说明 |
|
|
104
|
+
| --------------------- | ------------------------------------------------- |
|
|
105
|
+
| `DAZI_BUNDLED_DIR` | 默认:包内 `dist/clis` |
|
|
104
106
|
| `DAZI_WORKSPACE_ROOT` | 默认:从 cwd 向上查找含 `scripts/dazi.ps1` 的目录 |
|
package/dist/clis/dazi-app.js
CHANGED
|
@@ -13775,7 +13775,7 @@ function applyPlaceholdersInTree(targetDir, ph, oldAppId = "${appId}") {
|
|
|
13775
13775
|
walk(targetDir);
|
|
13776
13776
|
}
|
|
13777
13777
|
function replacePlaceholders(text, ph, oldAppId) {
|
|
13778
|
-
return text.split("${appId}").join(ph.appId).split("${spaceId}").join(ph.spaceId).split("${appName}").join(ph.appName).split("space__demo").join(ph.spaceId).split(`/runtime-apps/${oldAppId}`).join(`/runtime-apps/${ph.appId}`).split(oldAppId).join(ph.appId);
|
|
13778
|
+
return text.split('"${spaceId}"').join(JSON.stringify(ph.spaceId)).split("${appId}").join(ph.appId).split("${spaceId}").join(ph.spaceId).split("${appName}").join(ph.appName).split("space__demo").join(ph.spaceId).split(`/runtime-apps/${oldAppId}`).join(`/runtime-apps/${ph.appId}`).split(oldAppId).join(ph.appId);
|
|
13779
13779
|
}
|
|
13780
13780
|
function writeContextMd(targetDir, ph) {
|
|
13781
13781
|
const aiDir = import_node_path9.default.join(targetDir, ".ai");
|
|
@@ -13910,6 +13910,34 @@ function parseDataspaceId(permissions) {
|
|
|
13910
13910
|
}
|
|
13911
13911
|
return void 0;
|
|
13912
13912
|
}
|
|
13913
|
+
function resolveManifestSpaceId(manifest) {
|
|
13914
|
+
const fromField = String(manifest.space_id ?? "").trim();
|
|
13915
|
+
if (fromField) return fromField;
|
|
13916
|
+
return parseDataspaceId(manifest.permissions);
|
|
13917
|
+
}
|
|
13918
|
+
function syncManifestSpace(cwd, spaceId) {
|
|
13919
|
+
const sid = spaceId.trim();
|
|
13920
|
+
if (!sid) throw new Error("spaceId \u4E0D\u80FD\u4E3A\u7A7A");
|
|
13921
|
+
const manifestPath = import_node_path10.default.join(cwd, "manifest.json");
|
|
13922
|
+
const manifest = JSON.parse(
|
|
13923
|
+
import_node_fs11.default.readFileSync(manifestPath, "utf8")
|
|
13924
|
+
);
|
|
13925
|
+
const previous = resolveManifestSpaceId(manifest);
|
|
13926
|
+
const required = `dataspace:${sid}`;
|
|
13927
|
+
const perms = Array.isArray(manifest.permissions) ? manifest.permissions.map((p) => String(p).trim()) : [];
|
|
13928
|
+
const nextPerms = [
|
|
13929
|
+
...perms.filter((p) => !p.startsWith("dataspace:")),
|
|
13930
|
+
required
|
|
13931
|
+
];
|
|
13932
|
+
const changed = manifest.space_id !== sid || JSON.stringify(manifest.permissions) !== JSON.stringify(nextPerms);
|
|
13933
|
+
manifest.space_id = sid;
|
|
13934
|
+
manifest.permissions = nextPerms;
|
|
13935
|
+
if (changed) {
|
|
13936
|
+
import_node_fs11.default.writeFileSync(manifestPath, `${JSON.stringify(manifest, null, 2)}
|
|
13937
|
+
`, "utf8");
|
|
13938
|
+
}
|
|
13939
|
+
return { changed, previous: previous ?? void 0 };
|
|
13940
|
+
}
|
|
13913
13941
|
function validateDataSource(ds, index, projectRoot) {
|
|
13914
13942
|
const base = `data_sources[${index}]`;
|
|
13915
13943
|
const issues = [];
|
|
@@ -14229,23 +14257,55 @@ function validateManifestRecord(manifest, opts) {
|
|
|
14229
14257
|
}
|
|
14230
14258
|
}
|
|
14231
14259
|
}
|
|
14260
|
+
const declaredSpace = String(manifest.space_id ?? "").trim();
|
|
14232
14261
|
const perms = manifest.permissions;
|
|
14233
|
-
|
|
14262
|
+
const permSpace = parseDataspaceId(perms);
|
|
14263
|
+
if (!declaredSpace && !permSpace) {
|
|
14234
14264
|
issues.push(
|
|
14235
14265
|
issue(
|
|
14236
14266
|
"error",
|
|
14237
|
-
"
|
|
14238
|
-
"
|
|
14239
|
-
"\
|
|
14267
|
+
"SPACE_ID_REQUIRED",
|
|
14268
|
+
"space_id",
|
|
14269
|
+
"\u987B\u914D\u7F6E space_id\uFF08\u63A8\u8350\uFF09\u6216 permissions \u4E2D\u7684 dataspace:<\u7A7A\u95F4Id>"
|
|
14240
14270
|
)
|
|
14241
14271
|
);
|
|
14242
|
-
} else if (
|
|
14272
|
+
} else if (declaredSpace && permSpace && declaredSpace !== permSpace) {
|
|
14273
|
+
issues.push(
|
|
14274
|
+
issue(
|
|
14275
|
+
"error",
|
|
14276
|
+
"SPACE_ID_MISMATCH",
|
|
14277
|
+
"space_id",
|
|
14278
|
+
`space_id=${JSON.stringify(declaredSpace)} \u4E0E permissions dataspace:${permSpace} \u4E0D\u4E00\u81F4`
|
|
14279
|
+
)
|
|
14280
|
+
);
|
|
14281
|
+
}
|
|
14282
|
+
if (!Array.isArray(perms) || perms.length === 0) {
|
|
14283
|
+
if (!declaredSpace) {
|
|
14284
|
+
issues.push(
|
|
14285
|
+
issue(
|
|
14286
|
+
"error",
|
|
14287
|
+
"PERMISSIONS_REQUIRED",
|
|
14288
|
+
"permissions",
|
|
14289
|
+
"\u81F3\u5C11\u58F0\u660E permissions\uFF08\u5982 dataspace:<spaceId>\uFF09\u6216\u914D\u7F6E space_id"
|
|
14290
|
+
)
|
|
14291
|
+
);
|
|
14292
|
+
} else {
|
|
14293
|
+
issues.push(
|
|
14294
|
+
issue(
|
|
14295
|
+
"warning",
|
|
14296
|
+
"PERMISSIONS_DATASPACE",
|
|
14297
|
+
"permissions",
|
|
14298
|
+
`upload \u65F6\u5C06\u81EA\u52A8\u8865\u9F50 dataspace:${declaredSpace}`
|
|
14299
|
+
)
|
|
14300
|
+
);
|
|
14301
|
+
}
|
|
14302
|
+
} else if (!permSpace && !declaredSpace) {
|
|
14243
14303
|
issues.push(
|
|
14244
14304
|
issue(
|
|
14245
14305
|
"warning",
|
|
14246
14306
|
"PERMISSIONS_DATASPACE",
|
|
14247
14307
|
"permissions",
|
|
14248
|
-
"\u672A\u627E\u5230 dataspace:<id>\
|
|
14308
|
+
"\u672A\u627E\u5230 dataspace:<id>\uFF1B\u8BF7\u914D\u7F6E manifest.space_id"
|
|
14249
14309
|
)
|
|
14250
14310
|
);
|
|
14251
14311
|
}
|
|
@@ -14409,7 +14469,7 @@ function validateManifest(cwd, opts = {}) {
|
|
|
14409
14469
|
manifestPath,
|
|
14410
14470
|
appId: String(manifest.appId ?? "").trim() || void 0,
|
|
14411
14471
|
version: String(manifest.version ?? "").trim() || void 0,
|
|
14412
|
-
spaceId:
|
|
14472
|
+
spaceId: resolveManifestSpaceId(manifest),
|
|
14413
14473
|
dataSourceKeys,
|
|
14414
14474
|
kinds: [...kindSet],
|
|
14415
14475
|
issues,
|
|
@@ -14564,6 +14624,22 @@ function registerUpload(program3) {
|
|
|
14564
14624
|
program3.command("upload").description("\u6253\u5305\u5E76\u4E0A\u4F20\u5230 Registry\uFF08\u65E0 app \u5219\u5148 create\uFF09").option("--cwd <dir>", "DRAP \u9879\u76EE\u76EE\u5F55\uFF08\u9ED8\u8BA4\u81EA\u52A8\u8BC6\u522B\uFF1Ashell \u76EE\u5F55\u6216\u542B manifest.json \u7684\u7956\u5148\uFF09").option("--space <id>", "\u6570\u636E\u7A7A\u95F4 id\uFF08\u5FC5\u586B\uFF0C\u9996\u6B21 create\uFF09").option("--activate", "\u4E0A\u4F20\u540E\u6FC0\u6D3B", false).option("--changelog <text>", "\u53D8\u66F4\u8BF4\u660E").option("--file <path>", "\u5DF2\u6709 .dazi-app\uFF0C\u8DF3\u8FC7 package").option("--skip-validate", "\u8DF3\u8FC7 manifest \u6821\u9A8C\uFF08\u4E0D\u63A8\u8350\uFF09").option("--no-source", "\u4E0D\u4E0A\u4F20\u6E90\u7801\u5FEB\u7167\uFF08\u9ED8\u8BA4\u4E0A\u4F20\uFF0C\u4F9B release \u8F6C\u6A21\u677F\uFF09").option("--json").action(async (opts) => {
|
|
14565
14625
|
if (!loadAuth()) throw new Error("\u8BF7\u5148 dazi-app auth login");
|
|
14566
14626
|
const cwd = requireProjectCwd(opts.cwd);
|
|
14627
|
+
const manifestEarly = JSON.parse(
|
|
14628
|
+
import_node_fs13.default.readFileSync(import_node_path12.default.join(cwd, "manifest.json"), "utf8")
|
|
14629
|
+
);
|
|
14630
|
+
const uploadSpaceId = String(opts.space || "").trim() || resolveManifestSpaceId(manifestEarly) || "";
|
|
14631
|
+
if (!uploadSpaceId) {
|
|
14632
|
+
throw new Error(
|
|
14633
|
+
"manifest \u987B\u914D\u7F6E space_id\uFF0C\u6216 permissions \u542B dataspace:<\u7A7A\u95F4Id>\uFF1B\u4E5F\u53EF upload --space <id>"
|
|
14634
|
+
);
|
|
14635
|
+
}
|
|
14636
|
+
const sync = syncManifestSpace(cwd, uploadSpaceId);
|
|
14637
|
+
if (sync.changed && !opts.json) {
|
|
14638
|
+
const prev = sync.previous ? `\uFF08\u539F ${sync.previous}\uFF09` : "";
|
|
14639
|
+
console.warn(
|
|
14640
|
+
`\u5DF2\u540C\u6B65 manifest space_id / permissions \u2192 ${uploadSpaceId}${prev}`
|
|
14641
|
+
);
|
|
14642
|
+
}
|
|
14567
14643
|
if (!opts.skipValidate) {
|
|
14568
14644
|
const vr = validateManifest(cwd, { scanSrc: true });
|
|
14569
14645
|
if (!vr.ok) {
|
|
@@ -14907,9 +14983,9 @@ function formatAppCliCommands(opts) {
|
|
|
14907
14983
|
if (work) {
|
|
14908
14984
|
lines.push(
|
|
14909
14985
|
`# \u5728 dazi-work \u6839\u6267\u884C\uFF08\u63A8\u8350\uFF0C\u81EA\u52A8 bundled CLI\uFF09`,
|
|
14910
|
-
|
|
14911
|
-
|
|
14912
|
-
|
|
14986
|
+
`dazi app manifest validate --cwd ${work.cwdRel} --scan-src`,
|
|
14987
|
+
`dazi app doctor --cwd ${work.cwdRel}`,
|
|
14988
|
+
`dazi app upload --cwd ${work.cwdRel} --space ${opts.spaceId} --activate`
|
|
14913
14989
|
);
|
|
14914
14990
|
return lines.join("\n");
|
|
14915
14991
|
}
|
|
@@ -14936,8 +15012,8 @@ function buildInitNextSteps(outDir, spaceId, installOk, workspaceRoot) {
|
|
|
14936
15012
|
"pnpm run dev",
|
|
14937
15013
|
"pnpm run build",
|
|
14938
15014
|
`# \u5728 dazi-work \u6839\uFF1A`,
|
|
14939
|
-
|
|
14940
|
-
|
|
15015
|
+
`dazi app doctor --cwd ${work.cwdRel}`,
|
|
15016
|
+
`dazi app upload --cwd ${work.cwdRel} --space ${spaceId} --activate`
|
|
14941
15017
|
];
|
|
14942
15018
|
}
|
|
14943
15019
|
return [
|
|
@@ -15416,10 +15492,13 @@ function registerInit(program3) {
|
|
|
15416
15492
|
const manifest = JSON.parse(import_node_fs22.default.readFileSync(manifestPath, "utf8"));
|
|
15417
15493
|
manifest.appId = appId;
|
|
15418
15494
|
manifest.name = appName;
|
|
15495
|
+
manifest.space_id = spaceId;
|
|
15419
15496
|
if (Array.isArray(manifest.permissions)) {
|
|
15420
15497
|
manifest.permissions = manifest.permissions.map(
|
|
15421
15498
|
(p) => p.startsWith("dataspace:") ? `dataspace:${spaceId}` : p
|
|
15422
15499
|
);
|
|
15500
|
+
} else {
|
|
15501
|
+
manifest.permissions = [`dataspace:${spaceId}`];
|
|
15423
15502
|
}
|
|
15424
15503
|
import_node_fs22.default.writeFileSync(manifestPath, JSON.stringify(manifest, null, 2) + "\n", "utf8");
|
|
15425
15504
|
patchPackageJsonForApp(outDir, appId, appName);
|
|
@@ -16672,7 +16751,9 @@ function registerLegacyCompatCommands(program3) {
|
|
|
16672
16751
|
|
|
16673
16752
|
// cli/dazi-app/src/index.ts
|
|
16674
16753
|
var program2 = new Command();
|
|
16675
|
-
program2.name("dazi-app").description(
|
|
16754
|
+
program2.name("dazi-app").description(
|
|
16755
|
+
"\u642D\u5B50 App CLI \u2014 DRAP \u524D\u7AEF\u5E94\u7528\uFF08manifest / build / upload / preview\uFF09"
|
|
16756
|
+
).version("3.0.2", "-v, --version");
|
|
16676
16757
|
registerAuth(program2);
|
|
16677
16758
|
registerBuild(program2);
|
|
16678
16759
|
registerDev(program2);
|