@mickorz/opencode-agentic-workflow 0.4.0 → 0.5.0

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 (127) hide show
  1. package/README.md +306 -5
  2. package/dist/cli/config.d.ts +121 -0
  3. package/dist/cli/config.js +331 -0
  4. package/dist/cli/config.js.map +1 -0
  5. package/dist/cli/doctor.d.ts +5 -0
  6. package/dist/cli/doctor.js +141 -0
  7. package/dist/cli/doctor.js.map +1 -0
  8. package/dist/cli/index.d.ts +18 -0
  9. package/dist/cli/index.js +120 -0
  10. package/dist/cli/index.js.map +1 -0
  11. package/dist/cli/install.d.ts +19 -0
  12. package/dist/cli/install.js +135 -0
  13. package/dist/cli/install.js.map +1 -0
  14. package/dist/cli/uninstall.d.ts +16 -0
  15. package/dist/cli/uninstall.js +110 -0
  16. package/dist/cli/uninstall.js.map +1 -0
  17. package/dist/cli/update.d.ts +15 -0
  18. package/dist/cli/update.js +86 -0
  19. package/dist/cli/update.js.map +1 -0
  20. package/dist/core/index.d.ts +39 -0
  21. package/dist/core/index.js +38 -0
  22. package/dist/core/index.js.map +1 -0
  23. package/dist/observability/events.d.ts +43 -0
  24. package/dist/observability/events.js.map +1 -1
  25. package/dist/plugin/checkpoint-override.d.ts +7 -9
  26. package/dist/plugin/checkpoint-override.js +8 -14
  27. package/dist/plugin/checkpoint-override.js.map +1 -1
  28. package/dist/plugin/define-workflow.d.ts +33 -0
  29. package/dist/plugin/define-workflow.js +103 -0
  30. package/dist/plugin/define-workflow.js.map +1 -0
  31. package/dist/plugin/index.js +406 -26
  32. package/dist/plugin/index.js.map +1 -1
  33. package/dist/plugin/opencode-v2-executor.js +58 -46
  34. package/dist/plugin/opencode-v2-executor.js.map +1 -1
  35. package/dist/plugin/progress-board.d.ts +64 -0
  36. package/dist/plugin/progress-board.js +150 -0
  37. package/dist/plugin/progress-board.js.map +1 -0
  38. package/dist/plugin/progress-rpc.d.ts +390 -0
  39. package/dist/plugin/progress-rpc.js +318 -0
  40. package/dist/plugin/progress-rpc.js.map +1 -0
  41. package/dist/plugin/progress-view.d.ts +82 -0
  42. package/dist/plugin/progress-view.js +244 -0
  43. package/dist/plugin/progress-view.js.map +1 -0
  44. package/dist/plugin/run-sessions.d.ts +28 -0
  45. package/dist/plugin/run-sessions.js +46 -0
  46. package/dist/plugin/run-sessions.js.map +1 -0
  47. package/dist/plugin/tool-args.d.ts +15 -0
  48. package/dist/plugin/tool-args.js +28 -0
  49. package/dist/plugin/tool-args.js.map +1 -0
  50. package/dist/plugin/tui.d.ts +11 -4
  51. package/dist/plugin/tui.js +149 -5
  52. package/dist/plugin/tui.js.map +1 -1
  53. package/dist/plugin/workflow-control.d.ts +16 -0
  54. package/dist/plugin/workflow-control.js +85 -0
  55. package/dist/plugin/workflow-control.js.map +1 -0
  56. package/dist/plugin/workflow-schedule.d.ts +24 -0
  57. package/dist/plugin/workflow-schedule.js +97 -0
  58. package/dist/plugin/workflow-schedule.js.map +1 -0
  59. package/dist/quality/checkpoint.d.ts +5 -2
  60. package/dist/quality/checkpoint.js +11 -6
  61. package/dist/quality/checkpoint.js.map +1 -1
  62. package/dist/quality/verify.d.ts +21 -2
  63. package/dist/quality/verify.js +36 -14
  64. package/dist/quality/verify.js.map +1 -1
  65. package/dist/registry/definition.d.ts +12 -0
  66. package/dist/registry/definition.js.map +1 -1
  67. package/dist/registry/registry.d.ts +4 -0
  68. package/dist/registry/registry.js +20 -1
  69. package/dist/registry/registry.js.map +1 -1
  70. package/dist/registry/run-control.d.ts +27 -0
  71. package/dist/registry/run-control.js +51 -0
  72. package/dist/registry/run-control.js.map +1 -0
  73. package/dist/registry/runner.d.ts +29 -6
  74. package/dist/registry/runner.js +153 -35
  75. package/dist/registry/runner.js.map +1 -1
  76. package/dist/runtime/errors.d.ts +26 -0
  77. package/dist/runtime/errors.js +30 -0
  78. package/dist/runtime/errors.js.map +1 -1
  79. package/dist/runtime/executor.d.ts +22 -0
  80. package/dist/runtime/executor.js.map +1 -1
  81. package/dist/runtime/run-context.d.ts +44 -0
  82. package/dist/runtime/run-context.js +32 -0
  83. package/dist/runtime/run-context.js.map +1 -0
  84. package/dist/scheduler/cron.d.ts +29 -0
  85. package/dist/scheduler/cron.js +171 -0
  86. package/dist/scheduler/cron.js.map +1 -0
  87. package/dist/scheduler/service.d.ts +78 -0
  88. package/dist/scheduler/service.js +210 -0
  89. package/dist/scheduler/service.js.map +1 -0
  90. package/dist/scheduler/store.d.ts +26 -0
  91. package/dist/scheduler/store.js +94 -0
  92. package/dist/scheduler/store.js.map +1 -0
  93. package/dist/scheduler/types.d.ts +53 -0
  94. package/dist/scheduler/types.js +12 -0
  95. package/dist/scheduler/types.js.map +1 -0
  96. package/dist/state/journal.d.ts +23 -0
  97. package/dist/state/journal.js +2 -0
  98. package/dist/state/journal.js.map +1 -1
  99. package/dist/state/recorder.d.ts +67 -0
  100. package/dist/state/recorder.js +148 -2
  101. package/dist/state/recorder.js.map +1 -1
  102. package/dist/workflow/agent.d.ts +42 -1
  103. package/dist/workflow/agent.js +116 -6
  104. package/dist/workflow/agent.js.map +1 -1
  105. package/dist/workflow/judge-panel.d.ts +37 -0
  106. package/dist/workflow/judge-panel.js +66 -0
  107. package/dist/workflow/judge-panel.js.map +1 -0
  108. package/dist/workflow/pipeline.d.ts +21 -0
  109. package/dist/workflow/pipeline.js +71 -0
  110. package/dist/workflow/pipeline.js.map +1 -0
  111. package/dist/workflow/race.d.ts +16 -0
  112. package/dist/workflow/race.js +46 -0
  113. package/dist/workflow/race.js.map +1 -0
  114. package/dist/workflow/sequence.js +6 -0
  115. package/dist/workflow/sequence.js.map +1 -1
  116. package/dist/workflows/loader.d.ts +124 -0
  117. package/dist/workflows/loader.js +500 -0
  118. package/dist/workflows/loader.js.map +1 -0
  119. package/dist/workspace/ambient.d.ts +6 -4
  120. package/dist/workspace/ambient.js +10 -4
  121. package/dist/workspace/ambient.js.map +1 -1
  122. package/package.json +16 -6
  123. package/skills/workflow-authoring/SKILL.md +111 -0
  124. package/skills/workflow-optimize/SKILL.md +70 -0
  125. package/dist/workflows/index.d.ts +0 -19
  126. package/dist/workflows/index.js +0 -40
  127. package/dist/workflows/index.js.map +0 -1
@@ -0,0 +1,111 @@
1
+ ---
2
+ name: workflow-authoring
3
+ description: >
4
+ 编写与自定义 opencode-agentic-workflow 声明式流程时加载。当用户想定义/创建一个
5
+ workflow、把某个重复流程自动化、给现有流程加步骤或参数、或遇到 workflow_define
6
+ 版本冲突与校验报错时使用。覆盖:需求澄清、声明式 JSON 构造、workflow_define
7
+ 落盘注册、workflow 工具试跑验证的完整链路。
8
+ ---
9
+
10
+ # workflow-authoring(声明式流程编写)
11
+
12
+ 把用户的流程需求变成可复用的声明式 workflow:**对话澄清 → 构造 JSON →
13
+ `workflow_define` 落盘注册 → `workflow` 工具试跑**。全程无需人工编辑文件。
14
+
15
+ ## 第一步:澄清需求(缺什么问什么,别猜)
16
+
17
+ 1. **目的**:这个流程产出什么?(文档/代码/评审结论/检查报告)
18
+ 2. **步骤**:大致几步、每步谁做(子 agent / 人工审批 / 语义评审 / 文件断言)
19
+ 3. **参数**:除了主题 topic,还要哪些输入?(受众、语言、深度、评审标准…)
20
+ 4. **完成标准**:最后一步之后怎么判断成功?
21
+
22
+ ## 第二步:构造声明式 JSON
23
+
24
+ ```json
25
+ {
26
+ "id": "kebab-case-短名",
27
+ "version": "1.0.0",
28
+ "description": "一句话说明(进工具清单,给未来的你/agent 看)",
29
+ "args": {
30
+ "type": "object",
31
+ "properties": {
32
+ "topic": { "type": "string", "description": "主题" },
33
+ "audience": { "type": "string", "description": "受众" }
34
+ },
35
+ "required": ["topic"]
36
+ },
37
+ "steps": [
38
+ {
39
+ "name": "draft",
40
+ "agent": "针对 {{topic}} 为 {{args.audience}} 写初稿…。禁止调用 workflow / workflow_metrics 工具。完成后只回复 done。",
41
+ "model": "glm/glm-5.3-flash",
42
+ "timeoutMs": 300000,
43
+ "retries": 1
44
+ },
45
+ { "name": "review", "verify": { "artifact": "{{steps.draft}}", "criteria": "要点完整且有结论" } },
46
+ { "name": "gate", "checkpoint": "「{{topic}}」初稿已生成,批准?" },
47
+ { "name": "file", "fileExists": "out.md" }
48
+ ],
49
+ "output": "定稿:{{steps.draft}}"
50
+ }
51
+ ```
52
+
53
+ **步骤七类**(每步恰好一个步骤键):`agent`(子 agent)、`checkpoint`(人工
54
+ 审批门)、`verify`(语义评审;可加 `threshold` 投票与 `lenses` 多视角)、
55
+ `fileExists`(文件存在断言,相对项目根)、`subflow`(嵌套另一个已注册
56
+ workflow;`"subflow": "flow-id"` + 可选 `args` 对象(原始值或模板);需要
57
+ journalDir;嵌套深度上限 3;子 run 的输出进 `{{steps.<名>}}`,子 run 失败按
58
+ 普通步骤失败处理)、`pipeline`(条目并发 fan-out:`"pipeline": "提示模板"`
59
+ (`{{item}}` 引用条目)+ `items` 非空模板数组 + 可选 `outputAs`/`onFailure`/
60
+ `model`/`timeoutMs`/`retries`;结果数组与 items 对齐,`{{steps.<名>}}` 得
61
+ JSON 串)、`race`(多提示竞速:`"race": ["模板A", "模板B"]` ≥2 并发起跑
62
+ 首个成功者胜出 + 可选 `outputAs`;全败报错)。pipeline/race 各占一个
63
+ resume 单元:中断重跑整步(条目级断点不支持,需要就拆 subflow 步)。
64
+
65
+ **必守纪律(违反 = 事故)**:
66
+
67
+ 1. 每个 `agent` prompt **必须以「禁止调用 workflow / workflow_metrics 工具」
68
+ 收尾**——子 agent 递归调工作流会自饿死并发信号量
69
+ 2. 模板变量只有 `{{topic}}`、`{{args.x}}`、`{{steps.<前步名>}}`(pipeline
70
+ 提示内另有 `{{item}}`);未知变量 = 该步失败(fail-loud,绝不静默空串)
71
+ 3. `args` 里声明过的参数才能在 prompt 里引用;`topic` 恒有(工具自动传)
72
+ 4. `agent` 步可选 `model`("providerID/modelId")/ `timeoutMs`(正数毫秒)/
73
+ `retries`(非负整数)——只在 agent 与 pipeline 步合法(race 仅 outputAs)
74
+ 5. 改动已注册流程的步骤内容 = **必须升 version**(1.0.0 → 1.1.0);旧版本
75
+ journal 的 resume 依赖精确版本解析
76
+ 6. `id` 不得用内置名:smoke / reliable / artifact / feature-development
77
+
78
+ ## 第三步:workflow_define 落盘注册
79
+
80
+ 调用 `workflow_define` 工具,输入刚构造的 `workflow` 对象。结果语义:
81
+
82
+ - 成功:返回 `defined <id>@<version>` 与落盘路径,**立即可用**(无需重启)
83
+ - 「already defined (identical)」:内容相同,幂等成功,直接用
84
+ - 「already registered with DIFFERENT content」:同版本不同内容——升 version
85
+ 再 define
86
+ - 校验报错:逐字段指名,按报错修 JSON 再试
87
+
88
+ ## 第四步:试跑验证
89
+
90
+ 调用 `workflow` 工具:`flow=<id>, topic=<真实小主题>, checkpointMode=auto-approve`
91
+ (headless 必传)。关注:
92
+
93
+ - 步骤是否全 completed;失败步的报错(模板变量/文件路径/评审否决)
94
+ - 产物是否落盘、内容是否符合预期
95
+ - 有 `background: true` 需求时用 `workflow_control status` 轮询
96
+
97
+ 试跑通过后向用户报告:流程 id、参数用法(含 args 清单)、一句话示例。
98
+
99
+ ## 常见报错速查
100
+
101
+ | 报错 | 原因与修法 |
102
+ |------|-----------|
103
+ | `must have exactly one of agent/checkpoint/verify/fileExists/subflow/pipeline/race` | 一步给了两个步骤键,或忘了给 |
104
+ | `items must be a non-empty array of non-empty string templates` | pipeline 步缺 items 或混入非字符串/空串 |
105
+ | `race must be an array of at least 2 non-empty prompt templates` | race 步分支少于 2 或有空提示(单分支无竞速意义) |
106
+ | `subflow step "..." requires the journalDir` | subflow 需要插件配置 journalDir(lineage 落盘);配置后重试 |
107
+ | `subflow nesting too deep` | 嵌套超 3 层;拍平组合方式 |
108
+ | `template variable {{...}} is not provided` | 调用没传该参数,或 args 没声明 |
109
+ | `already registered with DIFFERENT content` | 升 version 再 workflow_define |
110
+ | `id "..." is reserved by a built-in` | 换个 id |
111
+ | verify 步 `fail` | 评审语义否决——改产物质量或放宽 criteria,不是 bug |
@@ -0,0 +1,70 @@
1
+ ---
2
+ name: workflow-optimize
3
+ description: >
4
+ opencode-agentic-workflow 流程的迭代优化闭环。当用户说某个 workflow 跑得慢/
5
+ 贵/老失败、要优化或迭代一个流程、要对比改动前后效果、或想基于 journal 与
6
+ metrics 复盘执行质量时使用。覆盖:metrics/journal 诊断 → 单主题改动 →
7
+ 升版重定义 → 同参重跑 → 前后对比报告。
8
+ ---
9
+
10
+ # workflow-optimize(流程迭代优化)
11
+
12
+ 一次完整迭代 = **诊断 → 单主题改动 → 升版 → 同参重跑 → 对比报告**。
13
+ 每次迭代只验证一个假设;收敛或收益递减即停。
14
+
15
+ ## 第一步:诊断(先看数据,别急着改)
16
+
17
+ 1. `workflow_metrics` 工具(format=json):看累计 token/成本/时长——
18
+ 哪个流程贵、哪个模型贵
19
+ 2. `workflow_control` 工具(action=status):看 run 列表与单 run 详情——
20
+ 失败在哪一步、失败原因(模板变量/评审否决/超时/文件断言)、
21
+ aborted/failed 占比
22
+ 3. 打开流程 JSON(`workflow_define` 返回的落盘路径):定位可疑步骤
23
+ (prompt 模糊、timeout 过小、无 retries、verify criteria 过严/过松)
24
+
25
+ 产出一句诊断结论:「X 流程的 Y 步因为 Z 原因导致 W 症状」。
26
+
27
+ ## 第二步:单主题改动(一次只改一个变量)
28
+
29
+ 常见主题(择一):
30
+
31
+ - **步骤结构**:拆一步为两步 / 合并冗余步 / 加 fileExists 兜底断言
32
+ - **prompt 质量**:明确输出格式、加「只回复 done」收敛输出、消除歧义词
33
+ - **调用级选项**:给易超时步加 `timeoutMs`/`retries`;简单步用小 `model`
34
+ - **评审校准**:verify 的 `criteria` 写实;多维度用 `lenses`;容错用
35
+ `threshold` 投票(全票制太严时)
36
+ - **参数化**:把硬编码值提升为 `args` 参数(提高复用/对比可控性)
37
+
38
+ ## 第三步:升版重定义(版本契约)
39
+
40
+ 改动步骤内容/prompts/args 结构 = **必须升 version**(1.0.0 → 1.1.0)。
41
+ 调用 `workflow_define` 传入完整新 JSON;registry 同 id 多版本共存、
42
+ 新 run 自动取最新。**绝不覆写旧版文件**——对比与回滚都靠旧版还在。
43
+
44
+ 只改 description/output 模板等非结构内容?仍建议升版(版本即审计线)。
45
+
46
+ ## 第四步:同参重跑(控制变量)
47
+
48
+ 用与基线**相同的 topic 与 args** 跑新版:`workflow` 工具
49
+ `flow=<id>, topic=<基线同款>, checkpointMode=auto-approve`。
50
+ 复杂流程可加 `background: true` + `workflow_control status` 轮询。
51
+
52
+ ## 第五步:对比报告(向用户交代)
53
+
54
+ 从两版 run 的 journal(workflow_control status 详情)+ metrics 提取:
55
+
56
+ | 维度 | 旧版 | 新版 | 变化 |
57
+ |------|------|------|------|
58
+ | 状态/失败步 | … | … | |
59
+ | token / 成本 | … | … | |
60
+ | 时长 | … | … | |
61
+ | verify 结论 | … | … | |
62
+
63
+ 结论必须含:**改了什么、为什么有效/无效、下一步建议或「已收敛」**。
64
+ 收益递减(<10% 且无质量提升)就停,别为迭代而迭代。
65
+
66
+ ## 边界
67
+
68
+ - 负责:流程 JSON 的优化迭代与效果对比方法论
69
+ - 不负责:插件引擎开发(src/ 的活)、OpenCode 本身配置问题
70
+ - 回滚 = 用旧版 JSON 再 `workflow_define` 一个更高版本(内容抄旧版)
@@ -1,19 +0,0 @@
1
- /**
2
- * 内置 workflow 定义(P2.5)
3
- *
4
- * workflows/ 目录 = workflow 资产(id/version/description/args/entry),
5
- * 与 workflow/ 目录(组合子引擎)分离。新增 workflow = 新增一个定义文件 +
6
- * 在插件入口注册,插件工具与路由零改动。
7
- */
8
- import type { WorkflowDefinition } from "../registry/registry.js";
9
- /** smoke:3 路并行分析 + 汇总(P0 冒烟链) */
10
- export declare function smokeWorkflow(): WorkflowDefinition<{
11
- topic: string;
12
- }>;
13
- /** reliable:执行 -> check -> verify -> checkpoint 可靠链(P1 验收链) */
14
- export declare function reliableWorkflow(options?: {
15
- checkCommand?: string;
16
- reviewers?: number;
17
- }): WorkflowDefinition<{
18
- topic: string;
19
- }>;
@@ -1,40 +0,0 @@
1
- /**
2
- * 内置 workflow 定义(P2.5)
3
- *
4
- * workflows/ 目录 = workflow 资产(id/version/description/args/entry),
5
- * 与 workflow/ 目录(组合子引擎)分离。新增 workflow = 新增一个定义文件 +
6
- * 在插件入口注册,插件工具与路由零改动。
7
- */
8
- import { runSmokeWorkflow } from "../workflow/smoke.js";
9
- import { runReliableWorkflow } from "../workflow/reliable.js";
10
- const TOPIC_SCHEMA = {
11
- type: "object",
12
- properties: {
13
- topic: { type: "string", description: "分析主题" },
14
- },
15
- required: ["topic"],
16
- };
17
- /** smoke:3 路并行分析 + 汇总(P0 冒烟链) */
18
- export function smokeWorkflow() {
19
- return {
20
- id: "smoke",
21
- version: "1.0.0",
22
- description: "3 路并行分析 agent + 1 个汇总 agent(冒烟演示)",
23
- args: TOPIC_SCHEMA,
24
- entry: async ({ topic }) => runSmokeWorkflow(topic),
25
- };
26
- }
27
- /** reliable:执行 -> check -> verify -> checkpoint 可靠链(P1 验收链) */
28
- export function reliableWorkflow(options) {
29
- return {
30
- id: "reliable",
31
- version: "1.0.0",
32
- description: "agent -> 确定性检查 -> 多 reviewer 语义验证 -> 人工审批 的可靠链",
33
- args: TOPIC_SCHEMA,
34
- entry: async ({ topic }) => runReliableWorkflow(topic, {
35
- checkCommand: options?.checkCommand,
36
- reviewers: options?.reviewers,
37
- }),
38
- };
39
- }
40
- //# sourceMappingURL=index.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/workflows/index.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAGH,OAAO,EAAE,gBAAgB,EAAE,MAAM,sBAAsB,CAAA;AACvD,OAAO,EAAE,mBAAmB,EAAE,MAAM,yBAAyB,CAAA;AAE7D,MAAM,YAAY,GAAe;IAC/B,IAAI,EAAE,QAAQ;IACd,UAAU,EAAE;QACV,KAAK,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,WAAW,EAAE,MAAM,EAAE;KAC/C;IACD,QAAQ,EAAE,CAAC,OAAO,CAAC;CACpB,CAAA;AAED,iCAAiC;AACjC,MAAM,UAAU,aAAa;IAC3B,OAAO;QACL,EAAE,EAAE,OAAO;QACX,OAAO,EAAE,OAAO;QAChB,WAAW,EAAE,mCAAmC;QAChD,IAAI,EAAE,YAAY;QAClB,KAAK,EAAE,KAAK,EAAE,EAAE,KAAK,EAAE,EAAE,EAAE,CAAC,gBAAgB,CAAC,KAAK,CAAC;KACpD,CAAA;AACH,CAAC;AAED,+DAA+D;AAC/D,MAAM,UAAU,gBAAgB,CAAC,OAGhC;IACC,OAAO;QACL,EAAE,EAAE,UAAU;QACd,OAAO,EAAE,OAAO;QAChB,WAAW,EAAE,gDAAgD;QAC7D,IAAI,EAAE,YAAY;QAClB,KAAK,EAAE,KAAK,EAAE,EAAE,KAAK,EAAE,EAAE,EAAE,CACzB,mBAAmB,CAAC,KAAK,EAAE;YACzB,YAAY,EAAE,OAAO,EAAE,YAAY;YACnC,SAAS,EAAE,OAAO,EAAE,SAAS;SAC9B,CAAC;KACL,CAAA;AACH,CAAC"}