@fieldwangai/agentflow 0.1.25

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 (138) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +201 -0
  3. package/README.zh-CN.md +201 -0
  4. package/agents/agentflow-node-executor-code.md +32 -0
  5. package/agents/agentflow-node-executor-planning.md +32 -0
  6. package/agents/agentflow-node-executor-requirement.md +32 -0
  7. package/agents/agentflow-node-executor-test.md +32 -0
  8. package/agents/agentflow-node-executor-ui.md +32 -0
  9. package/agents/agentflow-node-executor.md +32 -0
  10. package/agents/agents.json +8 -0
  11. package/agents/en/agentflow-node-executor.md +32 -0
  12. package/agents/zh/agentflow-node-executor.md +32 -0
  13. package/bin/agentflow.mjs +52 -0
  14. package/bin/ensure-workspace-reference.mjs +35 -0
  15. package/bin/lib/agent-runners.mjs +1199 -0
  16. package/bin/lib/agents-path.mjs +61 -0
  17. package/bin/lib/api-runner.mjs +361 -0
  18. package/bin/lib/apply.mjs +852 -0
  19. package/bin/lib/catalog-agents.mjs +300 -0
  20. package/bin/lib/catalog-flows.mjs +532 -0
  21. package/bin/lib/composer-agent.mjs +884 -0
  22. package/bin/lib/composer-flow-instances.mjs +68 -0
  23. package/bin/lib/composer-flow-skeleton.mjs +334 -0
  24. package/bin/lib/composer-flow-validate.mjs +47 -0
  25. package/bin/lib/composer-log.mjs +197 -0
  26. package/bin/lib/composer-model-router.mjs +160 -0
  27. package/bin/lib/composer-node-schema.mjs +299 -0
  28. package/bin/lib/composer-planner.mjs +749 -0
  29. package/bin/lib/composer-script-ops.mjs +233 -0
  30. package/bin/lib/composer-skill-router.mjs +384 -0
  31. package/bin/lib/flow-import.mjs +305 -0
  32. package/bin/lib/flow-normalize.mjs +71 -0
  33. package/bin/lib/flow-write.mjs +395 -0
  34. package/bin/lib/help.mjs +139 -0
  35. package/bin/lib/hub-login.mjs +54 -0
  36. package/bin/lib/hub-publish.mjs +159 -0
  37. package/bin/lib/hub-remote.mjs +189 -0
  38. package/bin/lib/hub.mjs +299 -0
  39. package/bin/lib/i18n.mjs +233 -0
  40. package/bin/lib/locales/en.json +344 -0
  41. package/bin/lib/locales/zh.json +344 -0
  42. package/bin/lib/log.mjs +37 -0
  43. package/bin/lib/main.mjs +611 -0
  44. package/bin/lib/model-config.mjs +118 -0
  45. package/bin/lib/model-lists.mjs +188 -0
  46. package/bin/lib/node-exec-context.mjs +336 -0
  47. package/bin/lib/node-execute.mjs +513 -0
  48. package/bin/lib/normalize-node-tool-command.mjs +97 -0
  49. package/bin/lib/paths.mjs +216 -0
  50. package/bin/lib/pipeline-scripts.mjs +41 -0
  51. package/bin/lib/recent-runs.mjs +173 -0
  52. package/bin/lib/run-apply-active-lock.mjs +82 -0
  53. package/bin/lib/run-events.mjs +85 -0
  54. package/bin/lib/run-node-statuses-from-disk.mjs +85 -0
  55. package/bin/lib/schedule-config.mjs +227 -0
  56. package/bin/lib/scheduler.mjs +312 -0
  57. package/bin/lib/table.mjs +4 -0
  58. package/bin/lib/terminal.mjs +42 -0
  59. package/bin/lib/ui-print.mjs +94 -0
  60. package/bin/lib/ui-server.mjs +2113 -0
  61. package/bin/lib/workspace-tree.mjs +266 -0
  62. package/bin/lib/workspace.mjs +180 -0
  63. package/bin/pipeline/build-node-prompt.mjs +179 -0
  64. package/bin/pipeline/check-cache.mjs +191 -0
  65. package/bin/pipeline/check-flow.mjs +543 -0
  66. package/bin/pipeline/collect-nodes.mjs +212 -0
  67. package/bin/pipeline/compute-cache-md5.mjs +177 -0
  68. package/bin/pipeline/ensure-run-dir.mjs +71 -0
  69. package/bin/pipeline/extract-thinking.mjs +308 -0
  70. package/bin/pipeline/gc.mjs +129 -0
  71. package/bin/pipeline/get-env.mjs +83 -0
  72. package/bin/pipeline/get-exec-id.mjs +145 -0
  73. package/bin/pipeline/get-ready-nodes.mjs +435 -0
  74. package/bin/pipeline/get-resolved-values.mjs +337 -0
  75. package/bin/pipeline/load-key.mjs +62 -0
  76. package/bin/pipeline/parse-bool.mjs +33 -0
  77. package/bin/pipeline/parse-flow.mjs +698 -0
  78. package/bin/pipeline/post-process-control-if.mjs +23 -0
  79. package/bin/pipeline/post-process-node.mjs +490 -0
  80. package/bin/pipeline/pre-process-node.mjs +449 -0
  81. package/bin/pipeline/resolve-inputs.mjs +201 -0
  82. package/bin/pipeline/run-log.mjs +34 -0
  83. package/bin/pipeline/run-tool-nodejs.mjs +160 -0
  84. package/bin/pipeline/save-key.mjs +93 -0
  85. package/bin/pipeline/snapshot-prior-round.mjs +70 -0
  86. package/bin/pipeline/validate-flow.mjs +825 -0
  87. package/bin/pipeline/validate-for-ui.mjs +226 -0
  88. package/bin/pipeline/validate-script-output.mjs +130 -0
  89. package/bin/pipeline/write-result.mjs +182 -0
  90. package/builtin/nodes/agent_subAgent.md +14 -0
  91. package/builtin/nodes/control_agent_toBool.md +20 -0
  92. package/builtin/nodes/control_anyOne.md +17 -0
  93. package/builtin/nodes/control_end.md +11 -0
  94. package/builtin/nodes/control_if.md +20 -0
  95. package/builtin/nodes/control_start.md +11 -0
  96. package/builtin/nodes/control_toBool.md +21 -0
  97. package/builtin/nodes/provide_file.md +11 -0
  98. package/builtin/nodes/provide_str.md +11 -0
  99. package/builtin/nodes/tool_get_env.md +14 -0
  100. package/builtin/nodes/tool_load_key.md +20 -0
  101. package/builtin/nodes/tool_nodejs.md +40 -0
  102. package/builtin/nodes/tool_print.md +14 -0
  103. package/builtin/nodes/tool_save_key.md +20 -0
  104. package/builtin/nodes/tool_user_ask.md +23 -0
  105. package/builtin/nodes/tool_user_check.md +22 -0
  106. package/builtin/pipelines/module-migrate/flow.yaml +819 -0
  107. package/builtin/pipelines/module-migrate/scripts/check_imports.mjs +700 -0
  108. package/builtin/pipelines/module-migrate/scripts/node_modules/tree-sitter-kotlin/build/Makefile +362 -0
  109. package/builtin/pipelines/module-migrate/scripts/node_modules/tree-sitter-kotlin/build/Release/.deps/Release/obj.target/node_modules/node-addon-api/node_addon_api_except.stamp.d +1 -0
  110. package/builtin/pipelines/module-migrate/scripts/node_modules/tree-sitter-kotlin/build/Release/.deps/Release/obj.target/tree_sitter_kotlin_binding/bindings/node/binding.o.d +17 -0
  111. package/builtin/pipelines/module-migrate/scripts/node_modules/tree-sitter-kotlin/build/Release/.deps/Release/obj.target/tree_sitter_kotlin_binding/src/parser.o.d +5 -0
  112. package/builtin/pipelines/module-migrate/scripts/node_modules/tree-sitter-kotlin/build/Release/.deps/Release/obj.target/tree_sitter_kotlin_binding/src/scanner.o.d +8 -0
  113. package/builtin/pipelines/module-migrate/scripts/node_modules/tree-sitter-kotlin/build/Release/.deps/Release/tree_sitter_kotlin_binding.node.d +1 -0
  114. package/builtin/pipelines/module-migrate/scripts/node_modules/tree-sitter-kotlin/build/Release/obj.target/node_modules/node-addon-api/node_addon_api_except.stamp +0 -0
  115. package/builtin/pipelines/module-migrate/scripts/node_modules/tree-sitter-kotlin/build/Release/obj.target/tree_sitter_kotlin_binding/bindings/node/binding.o +0 -0
  116. package/builtin/pipelines/module-migrate/scripts/node_modules/tree-sitter-kotlin/build/Release/obj.target/tree_sitter_kotlin_binding/src/parser.o +0 -0
  117. package/builtin/pipelines/module-migrate/scripts/node_modules/tree-sitter-kotlin/build/Release/obj.target/tree_sitter_kotlin_binding/src/scanner.o +0 -0
  118. package/builtin/pipelines/module-migrate/scripts/node_modules/tree-sitter-kotlin/build/Release/tree_sitter_kotlin_binding.node +0 -0
  119. package/builtin/pipelines/module-migrate/scripts/node_modules/tree-sitter-kotlin/build/binding.Makefile +6 -0
  120. package/builtin/pipelines/module-migrate/scripts/node_modules/tree-sitter-kotlin/build/gyp-mac-tool +768 -0
  121. package/builtin/pipelines/module-migrate/scripts/node_modules/tree-sitter-kotlin/build/node_modules/node-addon-api/node_addon_api.Makefile +6 -0
  122. package/builtin/pipelines/module-migrate/scripts/node_modules/tree-sitter-kotlin/build/node_modules/node-addon-api/node_addon_api.target.mk +122 -0
  123. package/builtin/pipelines/module-migrate/scripts/node_modules/tree-sitter-kotlin/build/node_modules/node-addon-api/node_addon_api_except.target.mk +126 -0
  124. package/builtin/pipelines/module-migrate/scripts/node_modules/tree-sitter-kotlin/build/node_modules/node-addon-api/node_addon_api_maybe.target.mk +122 -0
  125. package/builtin/pipelines/module-migrate/scripts/node_modules/tree-sitter-kotlin/build/tree_sitter_kotlin_binding.target.mk +203 -0
  126. package/builtin/pipelines/new/flow.yaml +545 -0
  127. package/builtin/pipelines/new/scripts/check-flow.mjs +9 -0
  128. package/builtin/pipelines/new/scripts/collect-nodes.mjs +211 -0
  129. package/builtin/pipelines/scripts/adjust-node-positions.mjs +113 -0
  130. package/builtin/web-ui/dist/agentflow-icon.svg +23 -0
  131. package/builtin/web-ui/dist/assets/index-CZkUPcXE.css +1 -0
  132. package/builtin/web-ui/dist/assets/index-DkkhNESc.js +190 -0
  133. package/builtin/web-ui/dist/index.html +24 -0
  134. package/package.json +67 -0
  135. package/reference/flow-control-capabilities.md +274 -0
  136. package/reference/flow-layout.md +84 -0
  137. package/reference/flow-prompt-handler-check.md +12 -0
  138. package/reference/flow-result-semantics.md +14 -0
@@ -0,0 +1,344 @@
1
+ {
2
+ "meta": {
3
+ "name": "中文",
4
+ "code": "zh"
5
+ },
6
+ "common": {
7
+ "loading": "加载中…",
8
+ "error": "错误",
9
+ "success": "成功",
10
+ "warning": "警告",
11
+ "info": "信息",
12
+ "done": "完成",
13
+ "cancel": "取消",
14
+ "confirm": "确认",
15
+ "yes": "是",
16
+ "no": "否",
17
+ "save": "保存",
18
+ "delete": "删除",
19
+ "edit": "编辑",
20
+ "create": "创建",
21
+ "close": "关闭",
22
+ "back": "返回",
23
+ "next": "下一步",
24
+ "prev": "上一步",
25
+ "search": "搜索",
26
+ "filter": "筛选",
27
+ "refresh": "刷新",
28
+ "copy": "复制",
29
+ "copied": "已复制",
30
+ "not_found": "未找到",
31
+ "required": "必填",
32
+ "optional": "可选",
33
+ "total": "总计",
34
+ "local": "本地",
35
+ "default": "默认"
36
+ },
37
+ "cli": {
38
+ "description": "AgentFlow CLI — 使用 Cursor 或 OpenCode CLI 流式输出驱动 apply/replay",
39
+ "usage": "用法",
40
+ "commands": "命令",
41
+ "options": "选项",
42
+ "requires": "需要",
43
+ "examples": "示例"
44
+ },
45
+ "flow": {
46
+ "name": "流程",
47
+ "list": "列出所有流水线",
48
+ "apply": "应用流程",
49
+ "replay": "重放节点",
50
+ "resume": "恢复流程",
51
+ "validate": "校验流程",
52
+ "not_found": "未找到流程:{{name}}",
53
+ "invalid": "流程无效",
54
+ "running": "流程正在运行",
55
+ "completed": "流程已完成",
56
+ "failed": "流程失败",
57
+ "pending": "流程暂停",
58
+ "ready_nodes": "就绪节点",
59
+ "no_ready_nodes": "没有就绪节点",
60
+ "node_start": "开始执行节点:{{label}} ({{instanceId}})",
61
+ "node_done": "节点完成:{{label}} ({{instanceId}})",
62
+ "node_failed": "节点失败:{{label}} ({{instanceId}}) - {{error}}",
63
+ "extract_thinking": "提取思考内容",
64
+ "dry_run_nodes": "[--dry-run] 将执行节点:{{nodes}}。省略 --dry-run 以实际运行。",
65
+ "stuck_error": "没有就绪节点且未全部完成;流程可能卡住。",
66
+ "paused": "已暂停",
67
+ "resume_hint": "继续执行请运行:"
68
+ },
69
+ "node": {
70
+ "name": "节点",
71
+ "status": {
72
+ "success": "成功",
73
+ "failed": "失败",
74
+ "pending": "等待",
75
+ "running": "运行中",
76
+ "skipped": "跳过"
77
+ },
78
+ "types": {
79
+ "agent": "Agent 节点",
80
+ "control": "控制节点",
81
+ "tool": "工具节点"
82
+ },
83
+ "start": "【开始】节点",
84
+ "end": "【结束】节点",
85
+ "start_parallel": "【开始】并行执行",
86
+ "end_parallel": "【结束】并行节点全部完成",
87
+ "model_label": "模型",
88
+ "done_label": "完成",
89
+ "failed_label": "失败"
90
+ },
91
+ "apply": {
92
+ "done": "Apply 完成",
93
+ "paused": "已暂停",
94
+ "stuck": "流程可能卡住",
95
+ "resume_command": "继续执行请运行:",
96
+ "user_confirmed": "用户确认继续(含重试 failed)"
97
+ },
98
+ "catalog": {
99
+ "builtin_agent_not_found": "内置角色不存在",
100
+ "name_already_exists": "该名称已存在,请换一个",
101
+ "agent_not_found": "角色不存在",
102
+ "invalid_agent_id": "无效的角色 id(需文件名安全)",
103
+ "builtin_flow_not_found": "内置流程不存在",
104
+ "builtin_flow_archive_not_supported": "内置流水线不支持归档视图",
105
+ "builtin_flow_archive_path_not_supported": "内置流水线不支持归档路径",
106
+ "type_text": "文本",
107
+ "pipeline_header": "流水线",
108
+ "source_header": "来源",
109
+ "apply_example_header": "Apply 示例"
110
+ },
111
+ "composer": {
112
+ "edit_context": "## AgentFlow 编辑上下文",
113
+ "tool_nodejs_rules_title": "## tool_nodejs 节点编写规则(必须遵守)",
114
+ "tool_nodejs_rules_body": "`definitionId: tool_nodejs` 的核心是 **`script` 字段**——必须写完整可执行的 shell/node 命令。\n- **类型选择自检**(写 script 前先问自己):这事**确定性**吗?相同输入永远产出相同输出、可用普通代码完整描述?是 → 继续写 script;否(需要语义理解/代码翻译/LLM 推理)→ **该节点选错了类型**,应改 `definitionId: agent_subAgent`,删 `script` 字段,任务描述写到 `body`。反例:『Android→RN 页面转换』『代码 review』『生成测试用例』必须 agent。\n- `script`:流水线直接 spawn 执行,stdout 作为 result,exit code 决定成败\n- `body`:有 `script` 时仅作人类可读注释,**不会被执行**\n- `script` 支持 `${}` 占位符引用 input 槽位和系统变量(workspaceRoot、runDir 等),值自动 shell-quote\n- **不要**再对 `${workspaceRoot}` 等占位符外包双引号(如 `node \"${workspaceRoot}/...\"`);应写 `node ${workspaceRoot}/...`,否则路径会含多余引号导致执行失败\n- **禁止**只在 `body` 中写自然语言描述而不写 `script`——这会导致节点运行时无代码可执行",
115
+ "task_title": "## 任务",
116
+ "task_instruction": "请只完成上述单一任务,不要做额外修改。完成后按上下文中的指引同步 UI。",
117
+ "validation_passed": "flow 校验已通过",
118
+ "validation_passed_detail": "✓ flow.yaml 校验通过(validate-flow)",
119
+ "validation_failed": "flow 校验未通过,尝试自动修复…",
120
+ "fix_task_title": "## 任务:修复 flow.yaml 使 validate-flow 通过",
121
+ "fix_errors_intro": "以下错误必须**全部消除**(与 CLI `agentflow validate` / `validate-flow.mjs` 使用同一套规则):",
122
+ "fix_constraints_title": "### 约束",
123
+ "fix_constraints_body": "- **只**编辑上下文中的「图定义文件」`flow.yaml`,不要改无关文件。\n- 优先最小修改:补边、修正 sourceHandle/targetHandle、role、model、实例结构等。",
124
+ "analyzing_task": "分析任务…",
125
+ "validation_repair": "校验修复:agent 第 {{attempt}}/{{max}} 次…",
126
+ "validation_repair_start": "🔧 启动校验修复({{attempt}}/{{max}})…",
127
+ "validation_repair_auto_success": "(自动修复成功)",
128
+ "skip_validation_for_phase": "当前阶段跳过校验(将在最后阶段统一校验)",
129
+ "all_phases_complete": "所有阶段完成",
130
+ "phase_complete_waiting": "{{label}}完成,等待确认继续…",
131
+ "current_phase": "阶段 {{index}}",
132
+ "all_steps_complete": "所有步骤完成",
133
+ "multi_step_failed": "多步执行失败: {{message}}",
134
+ "multi_step_starting": "多步模式启动…",
135
+ "classify_failed": "[CLASSIFY_FAIL] 任务分类失败: {{message}}"
136
+ },
137
+ "runner": {
138
+ "cursor_account_limit": "[agentflow] Cursor 账户限制:检测到仅支持 Auto,自动重试一次(Auto)…",
139
+ "generating_reply": "生成回复中…",
140
+ "thinking": "思考中…",
141
+ "completed": "完成",
142
+ "execution_failed": "执行失败",
143
+ "event_label": "事件",
144
+ "tool_call": "工具调用 ({{subtype}})",
145
+ "base64_data": "[cursor-stdout] (base64 数据, {{len}} 字符)",
146
+ "non_json_line": "(非 JSON) {{preview}}",
147
+ "unparsed_line": "(未解析行, {{len}} 字符)",
148
+ "opencode_exit_code": "OpenCode 退出码 {{code}}",
149
+ "done": "完成"
150
+ },
151
+ "tool": {
152
+ "nodejs_script_hint": "script 成败以 exit code 为准(0=success),stdout 直接作为 result 槽位内容(纯文本即可,如 console.log)。",
153
+ "nodejs_heal_retry": "[tool_nodejs 自愈] {{instanceId}} 第 {{attempt}}/{{maxRetries}} 次重试:{{detail}}"
154
+ },
155
+ "planner": {
156
+ "heuristic_analysis": "启发式任务分析(配置 OPENAI_API_KEY 或 ANTHROPIC_API_KEY 可启用智能规划)",
157
+ "planning": "任务规划中({{model}})…",
158
+ "planner_format_error": "规划器返回格式异常,回退到单步执行",
159
+ "planner_call_failed": "规划器调用失败({{message}}),回退到启发式分析",
160
+ "phased_planning": "分阶段规划:{{label}}({{index}}/{{total}})…",
161
+ "phased_cli_exec": "分阶段:{{label}}(CLI 执行)",
162
+ "phased_format_error": "分阶段规划器返回格式异常,使用默认 agent 步骤",
163
+ "phased_planning_failed": "分阶段规划失败({{message}}),使用默认 agent 步骤"
164
+ },
165
+ "api": {
166
+ "node_context_marker": "## 节点上下文",
167
+ "task_marker": "## 执行任务"
168
+ },
169
+ "ui": {
170
+ "server_start": "UI 服务器启动",
171
+ "server_listening": "服务器监听端口 {{port}}",
172
+ "open_browser": "打开浏览器",
173
+ "projects": "项目与流水线",
174
+ "flow_editor": "节点画布",
175
+ "settings": "设置"
176
+ },
177
+ "error": {
178
+ "generic": "发生错误:{{message}}",
179
+ "file_not_found": "文件未找到:{{path}}",
180
+ "invalid_args": "无效参数",
181
+ "missing_required": "缺少必填项:{{field}}",
182
+ "exec_failed": "执行失败:{{command}}",
183
+ "network_error": "网络错误",
184
+ "permission_denied": "权限被拒绝",
185
+ "read_flow_failed": "读取 flow 失败",
186
+ "read_node_library_failed": "读取节点库失败",
187
+ "save_failed": "保存失败",
188
+ "move_failed": "移动失败"
189
+ },
190
+ "env": {
191
+ "cursor_not_cached": "未缓存",
192
+ "cursor_cached": "模型清单已缓存",
193
+ "opencode_not_found": "未找到",
194
+ "opencode_ready": "就绪",
195
+ "service_normal": "服务正常",
196
+ "service_abnormal": "部分接口异常"
197
+ },
198
+ "type": {
199
+ "node": "节点",
200
+ "text": "文本",
201
+ "file": "文件",
202
+ "bool": "布尔"
203
+ },
204
+ "role": {
205
+ "normal": "普通",
206
+ "planning": "技术规划",
207
+ "code": "代码执行",
208
+ "test": "测试回归",
209
+ "requirement": "需求拆解"
210
+ },
211
+ "nodeDef": {
212
+ "control_start": {
213
+ "displayName": "开始",
214
+ "description": "AgentFlow 的入口,所有流程应从这个节点开始"
215
+ },
216
+ "control_end": {
217
+ "displayName": "结束",
218
+ "description": "AgentFlow 的结束节点,执行完成后流程结束"
219
+ },
220
+ "agent_subAgent": {
221
+ "displayName": "SubAgent",
222
+ "description": "利用 SubAgent 执行任务"
223
+ },
224
+ "tool_user_ask": {
225
+ "displayName": "用户选择",
226
+ "description": "等待用户从多个选项中选择一个,流程暂停;按用户选择沿对应出边分支继续(人类驱动的 switch)"
227
+ },
228
+ "tool_user_check": {
229
+ "displayName": "用户确认",
230
+ "description": "等待用户确认,流程暂停。需用户回复「继续」才重启流程"
231
+ },
232
+ "control_if": {
233
+ "displayName": "If 分支",
234
+ "description": "约定有且仅有一个 type 为 bool 的 input。true 时沿 next1 继续,false 时沿 next2 继续"
235
+ },
236
+ "control_anyOne": {
237
+ "displayName": "任一触发",
238
+ "description": "当任一上游输入就绪时,沿 next 继续执行"
239
+ },
240
+ "control_toBool": {
241
+ "displayName": "转布尔",
242
+ "description": "执行 script 脚本输出 true/false 到 prediction,类似 tool_nodejs 但强制 bool 输出,可扩展输入"
243
+ },
244
+ "control_agent_toBool": {
245
+ "displayName": "AI 转布尔",
246
+ "description": "由 AI 判断输入内容的布尔含义,适用于不确定性场景"
247
+ },
248
+ "tool_nodejs": {
249
+ "displayName": "Node.js 脚本",
250
+ "description": "执行 Node.js 脚本,以 exit code 判断成败,stdout 作为结果"
251
+ },
252
+ "tool_print": {
253
+ "displayName": "打印输出",
254
+ "description": "以特殊字体样式向用户输出内容"
255
+ },
256
+ "tool_get_env": {
257
+ "displayName": "获取环境变量",
258
+ "description": "获取环境变量值"
259
+ },
260
+ "tool_save_key": {
261
+ "displayName": "保存键值",
262
+ "description": "保存键值对到全局存储"
263
+ },
264
+ "tool_load_key": {
265
+ "displayName": "加载键值",
266
+ "description": "从全局存储加载键值"
267
+ },
268
+ "provide_str": {
269
+ "displayName": "文本",
270
+ "description": "直接提供一段文本,value 会原样供下游引用"
271
+ },
272
+ "provide_file": {
273
+ "displayName": "文件",
274
+ "description": "直接提供文件路径或内容,value 会原样供下游引用"
275
+ }
276
+ },
277
+ "pipeline": {
278
+ "module-migrate": {
279
+ "description": "模块迁移流程(确定范围→确认→迁移→静态环→编译环→输出文档)",
280
+ "start": { "label": "开始", "body": "流程入口" },
281
+ "scope": { "label": "确定迁移范围" },
282
+ "user_confirm_scope": { "label": "用户确认范围" },
283
+ "migrate": { "label": "执行迁移" },
284
+ "anyOne_static": { "label": "任一(静态环入口)" },
285
+ "anyOne_gradle": { "label": "任一(编译环入口)" },
286
+ "ai_check_ref": { "label": "AI检查引用" },
287
+ "agent_sum_error": { "label": "汇总问题" },
288
+ "gradle_build": { "label": "Gradle编译" },
289
+ "fix_dynamic": { "label": "修复构建" },
290
+ "output_doc": { "label": "输出文档" },
291
+ "end": { "label": "结束", "body": "流程出口" },
292
+ "provide_key_ready_file": { "label": "KeyReadyFile" },
293
+ "provide_key_module_name": { "label": "KeyModuleName" },
294
+ "tool_save_ready_file": { "label": "待迁移文件列表" },
295
+ "tool_save_module_name": { "label": "模块名称" },
296
+ "agent_new_module": { "label": "新建模块" },
297
+ "tool_static_analy": { "label": "静态检测" },
298
+ "if_static": { "label": "If静态" },
299
+ "LoadFile": { "label": "待迁移列表" },
300
+ "agent_fix_todo": { "label": "修复Todo" },
301
+ "control_toBool_static_bool": { "label": "静态检查结果转换" },
302
+ "control_if_task_gradle": { "label": "If完成" },
303
+ "control_toBool_gradle_bool": { "label": "列表完成结果" },
304
+ "control_if_fixed": { "label": "If是否修复完" },
305
+ "to_bool_fix_all": { "label": "是否修复完" },
306
+ "control_anyOne_start_fix": { "label": "修复入口" },
307
+ "tool_print_module": { "label": "Print展示" },
308
+ "gradle_tasks": { "label": "获取java/kotlin编译任务" }
309
+ },
310
+ "figma-restore": {
311
+ "description": "Figma 设计稿还原流程",
312
+ "Start": { "label": "开始" },
313
+ "FigmaURL": { "label": "FigmaURL" },
314
+ "FigmaToken": { "label": "FigmaToken" },
315
+ "script_check": { "label": "脚本自检" },
316
+ "get_figma_tree": { "label": "获取Figma节点树与截图" },
317
+ "ai_semantic": { "label": "AI语义识别截图结构" },
318
+ "restore_by_depth": { "label": "按树深度遍历还原" },
319
+ "export_resources": { "label": "导出img/icon资源" },
320
+ "summarize": { "label": "汇总交付JSON" },
321
+ "End": { "label": "结束" }
322
+ },
323
+ "new": {
324
+ "description": "新建流水线",
325
+ "control_start_new": { "label": "开始" },
326
+ "agent_plan": { "label": "规划节点" },
327
+ "agent_create": { "label": "创建Flow" },
328
+ "control_end_new": { "label": "结束" },
329
+ "provide_skills_file": { "label": "LayoutSkills" },
330
+ "provide_requirement": { "label": "需求" },
331
+ "agent_fix": { "label": "修复节点" },
332
+ "agent_implement_script": { "label": "完善代码" },
333
+ "tool_user_check": { "label": "UserCheck" },
334
+ "control_anyOne": { "label": "AnyOne" },
335
+ "provide_flow": { "label": "FlowsSkills" },
336
+ "provide_newFlow_key_save": { "label": "FlowKeyName" },
337
+ "provide_newFlow_key_load": { "label": "FlowKeyName" },
338
+ "agent_ai_check_tool": { "label": "AI检查工具" },
339
+ "AI_CHECK_FILE": { "label": "AI检查文件" },
340
+ "control_if_check": { "label": "If检查" },
341
+ "control_toBool_check": { "label": "检查结果" }
342
+ }
343
+ }
344
+ }
@@ -0,0 +1,37 @@
1
+ import chalk from "chalk";
2
+
3
+ /** 日志等级:debug 最低优先级(仅 --debug 时输出灰色),info / warn / error 依次升高 */
4
+ export const LOG_LEVELS = { debug: 0, info: 1, warn: 2, error: 3 };
5
+
6
+ let currentLogLevel = LOG_LEVELS.info;
7
+
8
+ /** --machine-readable 时向 stdout 输出 JSON 行事件 */
9
+ export let machineReadable = false;
10
+
11
+ export function setLogLevel(level) {
12
+ currentLogLevel = level;
13
+ }
14
+
15
+ export function setMachineReadable(v) {
16
+ machineReadable = Boolean(v);
17
+ }
18
+
19
+ export const log = {
20
+ debug: (msg) => {
21
+ if (currentLogLevel <= LOG_LEVELS.debug) process.stderr.write(chalk.dim(msg) + "\n");
22
+ },
23
+ /** machine-readable 时 stdout 仅用于一行一条 JSON 事件;人类可读信息走 stderr,避免与 UI 解析打架 */
24
+ info: (msg) => {
25
+ if (currentLogLevel <= LOG_LEVELS.info) {
26
+ const line = msg + "\n";
27
+ if (machineReadable) process.stderr.write(line);
28
+ else process.stdout.write(line);
29
+ }
30
+ },
31
+ warn: (msg) => {
32
+ if (currentLogLevel <= LOG_LEVELS.warn) process.stderr.write(chalk.yellow(msg) + "\n");
33
+ },
34
+ error: (msg) => {
35
+ if (currentLogLevel <= LOG_LEVELS.error) process.stderr.write(chalk.red(msg) + "\n");
36
+ },
37
+ };