@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.
Files changed (60) hide show
  1. package/README.md +16 -14
  2. package/dist/clis/dazi-app.js +95 -14
  3. package/dist/clis/dazi-flow.js +602 -172
  4. package/dist/clis/dazi-onto.js +5 -3
  5. package/dist/clis/dazi.js +139 -38
  6. package/dist/docs/app/app-init.md +15 -15
  7. package/dist/docs/app/build-upload.md +13 -13
  8. package/dist/docs/app/release-guide.md +9 -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
  10. package/dist/docs/auth/auth-login.md +4 -4
  11. package/dist/docs/auth/token-management.md +5 -5
  12. package/dist/docs/data/cube-guide.md +2 -2
  13. package/dist/docs/data/data-spaces.md +4 -3
  14. package/dist/docs/data/table-preview.md +6 -6
  15. package/dist/docs/flow/ai-workflow-playbook.md +69 -0
  16. package/dist/docs/flow/flow-project-guide.md +92 -87
  17. package/dist/docs/flow/flows-guide.md +98 -94
  18. package/dist/docs/flow/local-files-spec.md +194 -0
  19. package/dist/docs/flow/node-code-guide.md +57 -55
  20. package/dist/docs/flow/run-guide.md +18 -18
  21. package/dist/docs/flow/variables-guide.md +61 -61
  22. 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
  23. package/dist/docs/guides/cli-invocation.md +30 -29
  24. package/dist/docs/guides/cli-reference.md +72 -71
  25. package/dist/docs/guides/flow-consistency-checklist.md +42 -0
  26. package/dist/docs/guides/mcp-setup.md +34 -34
  27. package/dist/docs/guides/migrate-v2-v3.md +6 -5
  28. package/dist/docs/guides/quickstart.md +8 -8
  29. package/dist/docs/guides/troubleshooting.md +40 -22
  30. package/dist/docs/guides/workspace-v3.md +17 -17
  31. package/dist/docs/index.json +19 -7
  32. package/dist/docs/onto/action-guide.md +4 -3
  33. package/dist/docs/onto/dazi_script_sdk_reference.md +20 -14
  34. package/dist/docs/onto/dazi_script_seed_data_guide.md +14 -14
  35. package/dist/docs/onto/function-guide.md +5 -5
  36. package/dist/docs/onto/rule-guide.md +7 -6
  37. package/dist/docs/onto/space-management.md +5 -3
  38. 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
  39. 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
  40. 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
  41. package/dist/examples/flow/minimal-excel-python/README.md +5 -0
  42. package/dist/examples/flow/minimal-excel-python/flow.json +48 -0
  43. package/dist/examples/flow/minimal-excel-python/flow.meta.json +23 -0
  44. package/dist/examples/flow/minimal-excel-python//350/212/202/347/202/271/Excel/347/244/272/344/276/213/code.py +7 -0
  45. 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
  46. package/dist/examples/index.json +7 -1
  47. package/dist/prompts/data/data-analysis.md +2 -2
  48. package/dist/prompts/flow/ai-workflow-playbook.md +69 -0
  49. package/dist/prompts/flow/flow-design.md +33 -19
  50. package/dist/prompts/flow/plan-generate.md +7 -7
  51. package/dist/prompts/flow/run-debug.md +15 -15
  52. package/dist/prompts/flow/run-fix-loop.md +20 -17
  53. package/dist/prompts/general/ask-dazi.md +6 -6
  54. package/dist/prompts/general/troubleshoot.md +4 -3
  55. package/dist/prompts/index.json +94 -15
  56. package/dist/prompts/onto/action-design.md +7 -5
  57. package/dist/prompts/onto/function-design.md +6 -4
  58. package/dist/prompts/onto/rule-seed.md +4 -2
  59. package/dist/prompts/onto/script-publish-run.md +19 -19
  60. package/package.json +1 -1
@@ -3895,7 +3895,9 @@ function makeObjectCommand() {
3895
3895
  function makeMcpCommand() {
3896
3896
  const cmd = new Command("mcp").description("MCP \u670D\u52A1\uFF08\u672C\u4F53\u4FA7\uFF09");
3897
3897
  cmd.command("serve").description("\u4EE5 stdio JSON-RPC \u6A21\u5F0F\u542F\u52A8\u672C\u4F53 MCP \u670D\u52A1").option("--space <spaceId>", "\u9ED8\u8BA4\u7A7A\u95F4 ID").action((opts) => {
3898
- process.stderr.write("[dazi-onto mcp serve] MCP stdio \u670D\u52A1 \u2014 Phase 5 \u5B8C\u6574\u5B9E\u73B0\n");
3898
+ process.stderr.write(
3899
+ "[dazi-onto mcp serve] MCP stdio \u670D\u52A1 \u2014 Phase 5 \u5B8C\u6574\u5B9E\u73B0\n"
3900
+ );
3899
3901
  process.stderr.write("\u5F53\u524D\u7248\u672C\u4EC5\u8F93\u51FA\u5360\u4F4D\u54CD\u5E94\n");
3900
3902
  process.stdin.setEncoding("utf-8");
3901
3903
  process.stdin.on("data", (data) => {
@@ -3911,7 +3913,7 @@ function makeMcpCommand() {
3911
3913
  result: {
3912
3914
  protocolVersion: "2024-11-05",
3913
3915
  capabilities: { tools: {} },
3914
- serverInfo: { name: "dazi-onto", version: "3.0.0-beta.1" }
3916
+ serverInfo: { name: "dazi-onto", version: "3.0.2" }
3915
3917
  }
3916
3918
  };
3917
3919
  process.stdout.write(JSON.stringify(response) + "\n");
@@ -3934,7 +3936,7 @@ function makeMcpCommand() {
3934
3936
 
3935
3937
  // cli/dazi-onto/src/index.ts
3936
3938
  var program2 = new Command();
3937
- program2.name("dazi-onto").description("\u642D\u5B50 Onto CLI \u2014 \u672C\u4F53\uFF08Ontology\uFF09\u7BA1\u7406").version("3.0.0", "-v, --version");
3939
+ program2.name("dazi-onto").description("\u642D\u5B50 Onto CLI \u2014 \u672C\u4F53\uFF08Ontology\uFF09\u7BA1\u7406").version("3.0.2", "-v, --version");
3938
3940
  program2.addCommand(makeSpaceCommand());
3939
3941
  program2.addCommand(makeFunctionCommand());
3940
3942
  program2.addCommand(makeActionCommand());
package/dist/clis/dazi.js CHANGED
@@ -3959,7 +3959,7 @@ function makeEnvCommand() {
3959
3959
  return new Command("env").description("\u663E\u793A\u73AF\u5883\u4FE1\u606F").action(() => {
3960
3960
  const auth = tryLoadAuth();
3961
3961
  const env = {
3962
- version: "3.0.0-alpha.0",
3962
+ version: "3.0.2",
3963
3963
  node: process.version,
3964
3964
  platform: `${import_os5.default.type()} ${import_os5.default.arch()}`,
3965
3965
  serverUrl: getServerUrl(),
@@ -5001,7 +5001,8 @@ function resolveCli(name) {
5001
5001
  }
5002
5002
  function callCli(cliName, args) {
5003
5003
  const cliPath = resolveCli(cliName);
5004
- if (!cliPath) return { error: `CLI ${cliName} \u672A\u627E\u5230\uFF0C\u8BF7\u786E\u8BA4 DAZI_BUNDLED_DIR \u5DF2\u8BBE\u7F6E` };
5004
+ if (!cliPath)
5005
+ return { error: `CLI ${cliName} \u672A\u627E\u5230\uFF0C\u8BF7\u786E\u8BA4 DAZI_BUNDLED_DIR \u5DF2\u8BBE\u7F6E` };
5005
5006
  const result = (0, import_child_process.spawnSync)(process.execPath, [cliPath, ...args], {
5006
5007
  encoding: "utf-8",
5007
5008
  timeout: 3e4,
@@ -5077,7 +5078,10 @@ var MCP_TOOLS = [
5077
5078
  inputSchema: {
5078
5079
  type: "object",
5079
5080
  properties: {
5080
- id: { type: "string", description: "\u6587\u6863 ID\uFF0C\u5982 guides/quickstart\u3001onto/function-guide" }
5081
+ id: {
5082
+ type: "string",
5083
+ description: "\u6587\u6863 ID\uFF0C\u5982 guides/quickstart\u3001onto/function-guide"
5084
+ }
5081
5085
  },
5082
5086
  required: ["id"]
5083
5087
  }
@@ -5103,7 +5107,10 @@ var MCP_TOOLS = [
5103
5107
  inputSchema: {
5104
5108
  type: "object",
5105
5109
  properties: {
5106
- id: { type: "string", description: "\u63D0\u793A\u8BCD ID\uFF0C\u5982 onto/function-design" }
5110
+ id: {
5111
+ type: "string",
5112
+ description: "\u63D0\u793A\u8BCD ID\uFF0C\u5982 onto/function-design"
5113
+ }
5107
5114
  },
5108
5115
  required: ["id"]
5109
5116
  }
@@ -5186,7 +5193,10 @@ var MCP_TOOLS = [
5186
5193
  type: "object",
5187
5194
  properties: {
5188
5195
  space_id: { type: "string" },
5189
- script_type: { type: "string", description: "\u811A\u672C\u7C7B\u578B\uFF08\u5982 ontology_function\uFF09" }
5196
+ script_type: {
5197
+ type: "string",
5198
+ description: "\u811A\u672C\u7C7B\u578B\uFF08\u5982 ontology_function\uFF09"
5199
+ }
5190
5200
  },
5191
5201
  required: ["space_id"]
5192
5202
  }
@@ -5210,7 +5220,10 @@ var MCP_TOOLS = [
5210
5220
  type: "object",
5211
5221
  properties: {
5212
5222
  space_id: { type: "string", description: "\u6309\u7A7A\u95F4\u8FC7\u6EE4\uFF08\u53EF\u9009\uFF09" },
5213
- status: { type: "string", description: "\u6309\u72B6\u6001\u8FC7\u6EE4\uFF08active/draft/archived\uFF09" }
5223
+ status: {
5224
+ type: "string",
5225
+ description: "\u6309\u72B6\u6001\u8FC7\u6EE4\uFF08active/draft/archived\uFF09"
5226
+ }
5214
5227
  }
5215
5228
  }
5216
5229
  },
@@ -5233,7 +5246,10 @@ var MCP_TOOLS = [
5233
5246
  properties: {
5234
5247
  flow_id: { type: "string" },
5235
5248
  limit: { type: "number", description: "\u6700\u591A\u8FD4\u56DE\u6761\u6570\uFF08\u9ED8\u8BA4 10\uFF09" },
5236
- status: { type: "string", description: "\u6309\u72B6\u6001\u8FC7\u6EE4\uFF08running/success/failed\uFF09" }
5249
+ status: {
5250
+ type: "string",
5251
+ description: "\u6309\u72B6\u6001\u8FC7\u6EE4\uFF08running/success/failed\uFF09"
5252
+ }
5237
5253
  },
5238
5254
  required: ["flow_id"]
5239
5255
  }
@@ -5257,7 +5273,10 @@ var MCP_TOOLS = [
5257
5273
  type: "object",
5258
5274
  properties: {
5259
5275
  flow_id: { type: "string" },
5260
- run_id: { type: "string", description: "\u6307\u5B9A Run ID\uFF08\u53EF\u9009\uFF0C\u9ED8\u8BA4\u6700\u8FD1\u4E00\u6B21\uFF09" }
5276
+ run_id: {
5277
+ type: "string",
5278
+ description: "\u6307\u5B9A Run ID\uFF08\u53EF\u9009\uFF0C\u9ED8\u8BA4\u6700\u8FD1\u4E00\u6B21\uFF09"
5279
+ }
5261
5280
  },
5262
5281
  required: ["flow_id"]
5263
5282
  }
@@ -5366,27 +5385,33 @@ function handleToolCall(name, args) {
5366
5385
  switch (name) {
5367
5386
  case "list_docs": {
5368
5387
  let docs = loadDocs();
5369
- if (args.category) docs = docs.filter((d) => d.category === args.category);
5388
+ if (args.category)
5389
+ docs = docs.filter((d) => d.category === args.category);
5370
5390
  return json(docs);
5371
5391
  }
5372
5392
  case "get_doc": {
5373
5393
  const root = resolveBundledRoot();
5374
5394
  if (!root) return err("DAZI_BUNDLED_DIR \u672A\u8BBE\u7F6E");
5375
5395
  const entry = loadDocs().find((d) => d.id === String(args.id));
5376
- if (!entry) return err(`\u6587\u6863\u672A\u627E\u5230: ${args.id}\uFF08\u4F7F\u7528 list_docs \u67E5\u770B\u53EF\u7528\u6587\u6863\uFF09`);
5396
+ if (!entry)
5397
+ return err(`\u6587\u6863\u672A\u627E\u5230: ${args.id}\uFF08\u4F7F\u7528 list_docs \u67E5\u770B\u53EF\u7528\u6587\u6863\uFF09`);
5377
5398
  const content = readFile(import_path10.default.join(root, "docs", entry.file));
5378
5399
  return content ? text(content) : err(`\u6587\u6863\u6587\u4EF6\u4E0D\u5B58\u5728: ${entry.file}`);
5379
5400
  }
5380
5401
  case "list_prompts": {
5381
5402
  let prompts = loadPrompts();
5382
- if (args.category) prompts = prompts.filter((p) => p.category === args.category);
5403
+ if (args.category)
5404
+ prompts = prompts.filter((p) => p.category === args.category);
5383
5405
  return json(prompts);
5384
5406
  }
5385
5407
  case "get_prompt": {
5386
5408
  const root = resolveBundledRoot();
5387
5409
  if (!root) return err("DAZI_BUNDLED_DIR \u672A\u8BBE\u7F6E");
5388
5410
  const entry = loadPrompts().find((p) => p.id === String(args.id));
5389
- if (!entry) return err(`\u63D0\u793A\u8BCD\u672A\u627E\u5230: ${args.id}\uFF08\u4F7F\u7528 list_prompts \u67E5\u770B\u53EF\u7528\u63D0\u793A\u8BCD\uFF09`);
5411
+ if (!entry)
5412
+ return err(
5413
+ `\u63D0\u793A\u8BCD\u672A\u627E\u5230: ${args.id}\uFF08\u4F7F\u7528 list_prompts \u67E5\u770B\u53EF\u7528\u63D0\u793A\u8BCD\uFF09`
5414
+ );
5390
5415
  const content = readFile(import_path10.default.join(root, "prompts", entry.file));
5391
5416
  return content ? text(content) : err(`\u63D0\u793A\u8BCD\u6587\u4EF6\u4E0D\u5B58\u5728: ${entry.file}`);
5392
5417
  }
@@ -5399,11 +5424,22 @@ function handleToolCall(name, args) {
5399
5424
  return "error" in data ? err(String(data.error)) : json(data);
5400
5425
  }
5401
5426
  case "onto_list_functions": {
5402
- const data = callCli("dazi-onto", ["function", "list", "--space", String(args.space_id)]);
5427
+ const data = callCli("dazi-onto", [
5428
+ "function",
5429
+ "list",
5430
+ "--space",
5431
+ String(args.space_id)
5432
+ ]);
5403
5433
  return "error" in data ? err(String(data.error)) : json(data);
5404
5434
  }
5405
5435
  case "onto_get_function": {
5406
- const data = callCli("dazi-onto", ["function", "get", String(args.function_id), "--space", String(args.space_id)]);
5436
+ const data = callCli("dazi-onto", [
5437
+ "function",
5438
+ "get",
5439
+ String(args.function_id),
5440
+ "--space",
5441
+ String(args.space_id)
5442
+ ]);
5407
5443
  return "error" in data ? err(String(data.error)) : json(data);
5408
5444
  }
5409
5445
  case "onto_run_function": {
@@ -5420,23 +5456,43 @@ function handleToolCall(name, args) {
5420
5456
  return "error" in data ? err(String(data.error)) : json(data);
5421
5457
  }
5422
5458
  case "onto_list_actions": {
5423
- const data = callCli("dazi-onto", ["action", "list", "--space", String(args.space_id)]);
5459
+ const data = callCli("dazi-onto", [
5460
+ "action",
5461
+ "list",
5462
+ "--space",
5463
+ String(args.space_id)
5464
+ ]);
5424
5465
  return "error" in data ? err(String(data.error)) : json(data);
5425
5466
  }
5426
5467
  case "onto_list_rules": {
5427
- const ruleArgs = ["rule", "list", "--space", String(args.space_id)];
5468
+ const ruleArgs = [
5469
+ "rule",
5470
+ "list",
5471
+ "--space",
5472
+ String(args.space_id)
5473
+ ];
5428
5474
  if (args.rule_set) ruleArgs.push("--rule-set", String(args.rule_set));
5429
5475
  const data = callCli("dazi-onto", ruleArgs);
5430
5476
  return "error" in data ? err(String(data.error)) : json(data);
5431
5477
  }
5432
5478
  case "onto_list_scripts": {
5433
- const scriptArgs = ["script", "list", "--space", String(args.space_id)];
5479
+ const scriptArgs = [
5480
+ "script",
5481
+ "list",
5482
+ "--space",
5483
+ String(args.space_id)
5484
+ ];
5434
5485
  if (args.script_type) scriptArgs.push("--type", String(args.script_type));
5435
5486
  const data = callCli("dazi-onto", scriptArgs);
5436
5487
  return "error" in data ? err(String(data.error)) : json(data);
5437
5488
  }
5438
5489
  case "onto_space_snapshot": {
5439
- const data = callCli("dazi-onto", ["space", "snapshot", "--space-id", String(args.space_id)]);
5490
+ const data = callCli("dazi-onto", [
5491
+ "space",
5492
+ "snapshot",
5493
+ "--space-id",
5494
+ String(args.space_id)
5495
+ ]);
5440
5496
  return "error" in data ? err(String(data.error)) : json(data);
5441
5497
  }
5442
5498
  case "flow_list_flows": {
@@ -5464,7 +5520,13 @@ function handleToolCall(name, args) {
5464
5520
  }
5465
5521
  case "flow_start_run": {
5466
5522
  const input = args.input ? JSON.stringify(args.input) : "{}";
5467
- const data = callCli("dazi-flow", ["run", "start", String(args.flow_id), "--input", input]);
5523
+ const data = callCli("dazi-flow", [
5524
+ "run",
5525
+ "start",
5526
+ String(args.flow_id),
5527
+ "--input",
5528
+ input
5529
+ ]);
5468
5530
  return "error" in data ? err(String(data.error)) : json(data);
5469
5531
  }
5470
5532
  case "flow_debug_run": {
@@ -5486,17 +5548,31 @@ function handleToolCall(name, args) {
5486
5548
  return "error" in data ? err(String(data.error)) : json(data);
5487
5549
  }
5488
5550
  case "flow_table_structure": {
5489
- const strArgs = ["source", "table-structure", String(args.source_id), String(args.table_name)];
5551
+ const strArgs = [
5552
+ "source",
5553
+ "table-structure",
5554
+ String(args.source_id),
5555
+ String(args.table_name)
5556
+ ];
5490
5557
  if (args.schema) strArgs.push("--schema", String(args.schema));
5491
5558
  const data = callCli("dazi-flow", strArgs);
5492
5559
  return "error" in data ? err(String(data.error)) : json(data);
5493
5560
  }
5494
5561
  case "flow_snapshot_pull": {
5495
- const data = callCli("dazi-flow", ["snapshot", "pull", "--flow", String(args.flow_id)]);
5562
+ const data = callCli("dazi-flow", [
5563
+ "snapshot",
5564
+ "pull",
5565
+ "--flow",
5566
+ String(args.flow_id)
5567
+ ]);
5496
5568
  return "error" in data ? err(String(data.error)) : json(data);
5497
5569
  }
5498
5570
  case "flow_plan_llm_guide": {
5499
- const data = callCli("dazi-flow", ["plan", "llm-guide", String(args.flow_id)]);
5571
+ const data = callCli("dazi-flow", [
5572
+ "plan",
5573
+ "llm-guide",
5574
+ String(args.flow_id)
5575
+ ]);
5500
5576
  return "error" in data ? err(String(data.error)) : json(data);
5501
5577
  }
5502
5578
  case "data_list_spaces": {
@@ -5504,7 +5580,13 @@ function handleToolCall(name, args) {
5504
5580
  return "error" in data ? err(String(data.error)) : json(data);
5505
5581
  }
5506
5582
  case "data_list_tables": {
5507
- const data = callCli("dazi", ["data", "table", "list", "--space", String(args.space_id)]);
5583
+ const data = callCli("dazi", [
5584
+ "data",
5585
+ "table",
5586
+ "list",
5587
+ "--space",
5588
+ String(args.space_id)
5589
+ ]);
5508
5590
  return "error" in data ? err(String(data.error)) : json(data);
5509
5591
  }
5510
5592
  case "data_table_schema": {
@@ -5547,7 +5629,7 @@ function dispatch(msg) {
5547
5629
  result: {
5548
5630
  protocolVersion: "2024-11-05",
5549
5631
  capabilities: { tools: {} },
5550
- serverInfo: { name: "dazi", version: "3.0.0" }
5632
+ serverInfo: { name: "dazi", version: "3.0.2" }
5551
5633
  }
5552
5634
  };
5553
5635
  case "initialized":
@@ -5561,7 +5643,11 @@ function dispatch(msg) {
5561
5643
  const result = handleToolCall(toolName, toolArgs);
5562
5644
  return { jsonrpc: "2.0", id, result };
5563
5645
  } catch (e) {
5564
- return { jsonrpc: "2.0", id, result: err(e instanceof Error ? e.message : String(e)) };
5646
+ return {
5647
+ jsonrpc: "2.0",
5648
+ id,
5649
+ result: err(e instanceof Error ? e.message : String(e))
5650
+ };
5565
5651
  }
5566
5652
  }
5567
5653
  case "ping":
@@ -5575,20 +5661,32 @@ function dispatch(msg) {
5575
5661
  }
5576
5662
  }
5577
5663
  function makeMcpCommand() {
5578
- const cmd = new Command("mcp").description("MCP \u670D\u52A1\uFF08\u805A\u5408\uFF1Aonto + flow + data + docs + prompts\uFF09");
5579
- cmd.command("stdio").description("\u4EE5 stdio JSON-RPC \u6A21\u5F0F\u542F\u52A8\u642D\u5B50\u805A\u5408 MCP\uFF08\u4F9B Cursor/Claude \u8C03\u7528\uFF09").action(() => {
5664
+ const cmd = new Command("mcp").description(
5665
+ "MCP \u670D\u52A1\uFF08\u805A\u5408\uFF1Aonto + flow + data + docs + prompts\uFF09"
5666
+ );
5667
+ cmd.command("stdio").description(
5668
+ "\u4EE5 stdio JSON-RPC \u6A21\u5F0F\u542F\u52A8\u642D\u5B50\u805A\u5408 MCP\uFF08\u4F9B Cursor/Claude \u8C03\u7528\uFF09"
5669
+ ).action(() => {
5580
5670
  const docs = loadDocs().length;
5581
5671
  const prompts = loadPrompts().length;
5582
- process.stderr.write(`[dazi mcp stdio] \u642D\u5B50\u805A\u5408 MCP \u5DF2\u542F\u52A8 \u2014 ${MCP_TOOLS.length} \u4E2A\u5DE5\u5177
5583
- `);
5672
+ process.stderr.write(
5673
+ `[dazi mcp stdio] \u642D\u5B50\u805A\u5408 MCP \u5DF2\u542F\u52A8 \u2014 ${MCP_TOOLS.length} \u4E2A\u5DE5\u5177
5674
+ `
5675
+ );
5584
5676
  process.stderr.write(` \u6587\u6863: ${docs} \u7BC7 \u63D0\u793A\u8BCD: ${prompts} \u7BC7
5585
5677
  `);
5586
- process.stderr.write(` onto: ${MCP_TOOLS.filter((t) => t.name.startsWith("onto_")).length} \u4E2A\u5DE5\u5177
5587
- `);
5588
- process.stderr.write(` flow: ${MCP_TOOLS.filter((t) => t.name.startsWith("flow_")).length} \u4E2A\u5DE5\u5177
5589
- `);
5590
- process.stderr.write(` data: ${MCP_TOOLS.filter((t) => t.name.startsWith("data_")).length} \u4E2A\u5DE5\u5177
5591
- `);
5678
+ process.stderr.write(
5679
+ ` onto: ${MCP_TOOLS.filter((t) => t.name.startsWith("onto_")).length} \u4E2A\u5DE5\u5177
5680
+ `
5681
+ );
5682
+ process.stderr.write(
5683
+ ` flow: ${MCP_TOOLS.filter((t) => t.name.startsWith("flow_")).length} \u4E2A\u5DE5\u5177
5684
+ `
5685
+ );
5686
+ process.stderr.write(
5687
+ ` data: ${MCP_TOOLS.filter((t) => t.name.startsWith("data_")).length} \u4E2A\u5DE5\u5177
5688
+ `
5689
+ );
5592
5690
  let buffer = "";
5593
5691
  process.stdin.setEncoding("utf-8");
5594
5692
  process.stdin.on("data", (chunk) => {
@@ -5615,7 +5713,8 @@ function makeMcpCommand() {
5615
5713
  let tools = MCP_TOOLS;
5616
5714
  if (opts.category) {
5617
5715
  tools = tools.filter((t) => {
5618
- if (opts.category === "docs") return t.name.startsWith("list_docs") || t.name.startsWith("get_doc") || t.name.startsWith("list_prompts") || t.name.startsWith("get_prompt");
5716
+ if (opts.category === "docs")
5717
+ return t.name.startsWith("list_docs") || t.name.startsWith("get_doc") || t.name.startsWith("list_prompts") || t.name.startsWith("get_prompt");
5619
5718
  return t.name.startsWith(`${opts.category}_`);
5620
5719
  });
5621
5720
  }
@@ -5644,14 +5743,16 @@ function forwardToCli(cliName, extraArgs) {
5644
5743
  const bundled = resolveBundledCli(cliName);
5645
5744
  let result;
5646
5745
  if (bundled) {
5647
- result = (0, import_child_process2.spawnSync)(process.execPath, [bundled, ...extraArgs], { stdio: "inherit" });
5746
+ result = (0, import_child_process2.spawnSync)(process.execPath, [bundled, ...extraArgs], {
5747
+ stdio: "inherit"
5748
+ });
5648
5749
  } else {
5649
5750
  result = (0, import_child_process2.spawnSync)(cliName, extraArgs, { stdio: "inherit", shell: true });
5650
5751
  }
5651
5752
  process.exit(result.status ?? 1);
5652
5753
  }
5653
5754
  var program2 = new Command();
5654
- program2.name("dazi").description("\u642D\u5B50 v3 \u2014 Onto / Flow / App \u7EDF\u4E00 CLI").version("3.0.0", "-v, --version");
5755
+ program2.name("dazi").description("\u642D\u5B50 v3 \u2014 Onto / Flow / App \u7EDF\u4E00 CLI").version("3.0.2", "-v, --version");
5655
5756
  program2.addCommand(makeAuthCommand());
5656
5757
  program2.addCommand(makeDoctorCommand());
5657
5758
  program2.addCommand(makeEnvCommand());
@@ -5,28 +5,28 @@
5
5
 
6
6
  ## 推荐:扩展创建
7
7
 
8
- | 场景 | 操作 |
9
- |------|------|
10
- | 新建 monorepo + 首个组件 | 侧栏 **新建项目** → **应用项目** → **新建应用项目** |
11
- | 已有项目加组件 | **新建项目** → **在已有项目下新建组件**,或 `dazi.app.component.new` |
8
+ | 场景 | 操作 |
9
+ | ------------------------ | -------------------------------------------------------------------- |
10
+ | 新建 monorepo + 首个组件 | 侧栏 **新建项目** → **应用项目** → **新建应用项目** |
11
+ | 已有项目加组件 | **新建项目** → **在已有项目下新建组件**,或 `dazi.app.component.new` |
12
12
 
13
13
  生成目录:`项目/app_<名称>/apps/<app_id>/`(含 `manifest.json`、`src/`、`drap-assets/` 等)。
14
14
 
15
15
  ## CLI:从模板创建
16
16
 
17
- **推荐**:在 **`dazi-work` 根目录**执行 `.\scripts\dazi.ps1 app …`(脚本会自动设置 `DAZI_BUNDLED_DIR`,避免「未找到 bundled CLI」):
17
+ **推荐**:在 **`dazi-work` 根目录**执行 `dazi app …`(脚本会自动设置 `DAZI_BUNDLED_DIR`,避免「未找到 bundled CLI」):
18
18
 
19
19
  ```powershell
20
20
  cd D:\path\to\dazi-work
21
21
 
22
22
  # 从模板创建(--dir 相对 dazi-work 根)
23
- .\scripts\dazi.ps1 app init <template-id> --space <space-id> --dir 项目/app_<名>/apps/<app-id>
23
+ dazi app init <template-id> --space <space-id> --dir 项目/app_<名>/apps/<app-id>
24
24
 
25
25
  # 查看可用模板(含平台「转为应用模板」的动态模板)
26
- .\scripts\dazi.ps1 app templates list --remote
26
+ dazi app templates list --remote
27
27
  ```
28
28
 
29
- **可选**:在**应用项目根**(`项目/app_<名称>/`,含 `sdk/`、`templates/`)使用 `pnpm run dazi-app -- …`。若报「未找到 bundled CLI」,需将 `DAZI_BUNDLED_DIR` 指向扩展或 `tools/dazi-clis` 下的 `bundled/clis`,或改用上方 `.\scripts\dazi.ps1 app`。
29
+ **可选**:在**应用项目根**(`项目/app_<名称>/`,含 `sdk/`、`templates/`)使用 `pnpm run dazi-app -- …`。若报「未找到 bundled CLI」,需将 `DAZI_BUNDLED_DIR` 指向扩展或 `tools/dazi-clis` 下的 `bundled/clis`,或改用上方 `dazi app`。
30
30
 
31
31
  `template-id` 对应 `templates/app-template-*` 目录短名(如 `alarm-center` → `app-template-alarm-center`)。
32
32
 
@@ -47,12 +47,12 @@ cd D:\path\to\dazi-work
47
47
 
48
48
  `manifest.json` 定义应用与平台的绑定关系,常用字段:
49
49
 
50
- | 字段 | 说明 |
51
- |------|------|
52
- | `appId` | Registry 全局唯一 ID |
53
- | `permissions` | 至少 `dataspace:<spaceId>` |
54
- | `data_sources[]` | 数据集 key + kind |
55
- | `mount` | `page` 或 `chat_result` |
50
+ | 字段 | 说明 |
51
+ | ---------------- | -------------------------- |
52
+ | `appId` | Registry 全局唯一 ID |
53
+ | `permissions` | 至少 `dataspace:<spaceId>` |
54
+ | `data_sources[]` | 数据集 key + kind |
55
+ | `mount` | `page` 或 `chat_result` |
56
56
 
57
57
  扩展 **配置 manifest 数据源**(`dazi.app.editDataSources`)可图形化编辑 `data_sources`。
58
58
 
@@ -60,7 +60,7 @@ cd D:\path\to\dazi-work
60
60
 
61
61
  ```powershell
62
62
  # 在 dazi-work 根
63
- .\scripts\dazi.ps1 app manifest validate --cwd 项目/app_<名>/apps/<app-id> --scan-src
63
+ dazi app manifest validate --cwd 项目/app_<名>/apps/<app-id> --scan-src
64
64
  ```
65
65
 
66
66
  ## 相关文档
@@ -5,12 +5,12 @@
5
5
 
6
6
  ## 工作目录
7
7
 
8
- | 操作 | 目录 |
9
- |------|------|
10
- | `.\scripts\dazi.ps1 app …`(init、upload、release 等) | **`dazi-work` 根**;路径用 `--cwd 项目/app_<名>/apps/<app_id>`(相对工作区根) |
11
- | `pnpm run dazi-app`(可选) | **应用项目根**(含 `sdk/`、`templates/`);需正确设置 `DAZI_BUNDLED_DIR`,否则易报「未找到 bundled CLI」 |
12
- | `pnpm run dev` / `build` | **应用组件目录** `apps/<app_id>/` |
13
- | 扩展「构建并发布」 | 在侧栏选中**应用组件**节点,无需手填路径 |
8
+ | 操作 | 目录 |
9
+ | ---------------------------------------- | -------------------------------------------------------------------------------------------------------- |
10
+ | `dazi app …`(init、upload、release 等) | **`dazi-work` 根**;路径用 `--cwd 项目/app_<名>/apps/<app_id>`(相对工作区根) |
11
+ | `pnpm run dazi-app`(可选) | **应用项目根**(含 `sdk/`、`templates/`);需正确设置 `DAZI_BUNDLED_DIR`,否则易报「未找到 bundled CLI」 |
12
+ | `pnpm run dev` / `build` | **应用组件目录** `apps/<app_id>/` |
13
+ | 扩展「构建并发布」 | 在侧栏选中**应用组件**节点,无需手填路径 |
14
14
 
15
15
  发布前确认扩展登录与 **发布目标 API**(`dazi.serverUrl` / `~/.dazi/auth.json`)一致。
16
16
 
@@ -20,7 +20,7 @@
20
20
 
21
21
  ```bash
22
22
  pnpm run dev
23
- # 或(在 dazi-work 根):.\scripts\dazi.ps1 app dev --cwd 项目/app_<名>/apps/<app_id>
23
+ # 或(在 dazi-work 根):dazi app dev --cwd 项目/app_<名>/apps/<app_id>
24
24
  ```
25
25
 
26
26
  ## 构建
@@ -39,13 +39,13 @@ pnpm run build
39
39
  cd D:\path\to\dazi-work
40
40
 
41
41
  # 上传到指定空间
42
- .\scripts\dazi.ps1 app upload --cwd 项目/app_<名>/apps/<app_id> --space <space-id>
42
+ dazi app upload --cwd 项目/app_<名>/apps/<app_id> --space <space-id>
43
43
 
44
44
  # 上传并立即激活
45
- .\scripts\dazi.ps1 app upload --cwd 项目/app_<名>/apps/<app_id> --space <space-id> --activate
45
+ dazi app upload --cwd 项目/app_<名>/apps/<app_id> --space <space-id> --activate
46
46
 
47
47
  # 带更新日志
48
- .\scripts\dazi.ps1 app upload --cwd 项目/app_<名>/apps/<app_id> --space <space-id> --changelog "修复了 #123 问题"
48
+ dazi app upload --cwd 项目/app_<名>/apps/<app_id> --space <space-id> --changelog "修复了 #123 问题"
49
49
  ```
50
50
 
51
51
  等价写法(须在应用项目根且已配置 `DAZI_BUNDLED_DIR`):`pnpm run dazi-app -- upload --cwd apps/<app_id> --space <space-id>`。
@@ -55,9 +55,9 @@ cd D:\path\to\dazi-work
55
55
  ## 本地预览(上传前)
56
56
 
57
57
  ```powershell
58
- .\scripts\dazi.ps1 app preview all --cwd 项目/app_<名>/apps/<app_id>
59
- .\scripts\dazi.ps1 app preview sql --cwd 项目/app_<名>/apps/<app_id>
60
- .\scripts\dazi.ps1 app preview script --cwd 项目/app_<名>/apps/<app_id>
58
+ dazi app preview all --cwd 项目/app_<名>/apps/<app_id>
59
+ dazi app preview sql --cwd 项目/app_<名>/apps/<app_id>
60
+ dazi app preview script --cwd 项目/app_<名>/apps/<app_id>
61
61
  ```
62
62
 
63
63
  ## 相关文档
@@ -1,7 +1,7 @@
1
1
  # 应用发布管理
2
2
 
3
3
  **文档 ID**: `app/release-guide`
4
- **适用**:在 **`dazi-work` 根**通过 `.\scripts\dazi.ps1 app …` 管理发布;`--cwd` 指向 `项目/app_<名>/apps/<app_id>/`。
4
+ **适用**:在 **`dazi-work` 根**通过 `dazi app …` 管理发布;`--cwd` 指向 `项目/app_<名>/apps/<app_id>/`。
5
5
 
6
6
  场景实践:[主要财务指标复杂报表开发实践](./主要财务指标复杂报表开发实践.md)(模板 `financial-indicators-complex-report`)。
7
7
 
@@ -9,7 +9,7 @@
9
9
  cd D:\path\to\dazi-work
10
10
 
11
11
  # 查看某应用的发布版本
12
- .\scripts\dazi.ps1 app release list <app-id> --cwd 项目/app_<名>/apps/<app-id>
12
+ dazi app release list <app-id> --cwd 项目/app_<名>/apps/<app-id>
13
13
  ```
14
14
 
15
15
  扩展 **构建并发布** 会调用同一套 API;发布目标由 `dazi.serverUrl` / `~/.dazi/auth.json` 决定(见 §333)。
@@ -17,19 +17,19 @@ cd D:\path\to\dazi-work
17
17
  ## 查看发布版本
18
18
 
19
19
  ```powershell
20
- .\scripts\dazi.ps1 app release list <app-id> --cwd 项目/app_<名>/apps/<app-id>
20
+ dazi app release list <app-id> --cwd 项目/app_<名>/apps/<app-id>
21
21
  ```
22
22
 
23
23
  ## 激活指定版本
24
24
 
25
25
  ```powershell
26
- .\scripts\dazi.ps1 app release activate <app-id> --semver 1.2.0 --cwd 项目/app_<名>/apps/<app-id>
26
+ dazi app release activate <app-id> --semver 1.2.0 --cwd 项目/app_<名>/apps/<app-id>
27
27
  ```
28
28
 
29
29
  ## 撤回版本
30
30
 
31
31
  ```powershell
32
- .\scripts\dazi.ps1 app release revoke <app-id> --semver 1.2.0 --cwd 项目/app_<名>/apps/<app-id>
32
+ dazi app release revoke <app-id> --semver 1.2.0 --cwd 项目/app_<名>/apps/<app-id>
33
33
  ```
34
34
 
35
35
  ## 版本号规范
@@ -43,9 +43,9 @@ cd D:\path\to\dazi-work
43
43
  ## 资源管理
44
44
 
45
45
  ```powershell
46
- .\scripts\dazi.ps1 app asset list --cwd 项目/app_<名>/apps/<app-id>
47
- .\scripts\dazi.ps1 app asset new-sql --cwd 项目/app_<名>/apps/<app-id>
48
- .\scripts\dazi.ps1 app asset new-script --cwd 项目/app_<名>/apps/<app-id>
46
+ dazi app asset list --cwd 项目/app_<名>/apps/<app-id>
47
+ dazi app asset new-sql --cwd 项目/app_<名>/apps/<app-id>
48
+ dazi app asset new-script --cwd 项目/app_<名>/apps/<app-id>
49
49
  ```
50
50
 
51
- > **说明**:亦可在应用项目根使用 `pnpm run dazi-app -- release list …` 等等价命令,但需先配置 `DAZI_BUNDLED_DIR`;推荐统一使用 `.\scripts\dazi.ps1 app`。
51
+ > **说明**:亦可在应用项目根使用 `pnpm run dazi-app -- release list …` 等等价命令,但需先配置 `DAZI_BUNDLED_DIR`;推荐统一使用 `dazi app`。