@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 @@
1
+ {"version":3,"file":"progress-view.js","sourceRoot":"","sources":["../../src/plugin/progress-view.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,28 @@
1
+ /**
2
+ * Run 会话登记(并发 run 时代的递归防护)
3
+ *
4
+ * 背景:workflow 工具的递归防护原先用「任一 run 在飞即拒绝一切调用」的
5
+ * 计数器——它同时挡掉了合法的顶层并发(P2-9 已消除 gate/workspace 全局
6
+ * 单例,架构上并发安全)。现在改为**按调用来源判别**:
7
+ * - executor 为每个 agent 任务创建的子会话在此登记(任务结束注销)
8
+ * - workflow 工具凭调用会话自身/祖先链是否命中登记,识别「来自 run
9
+ * 内部的调用」(run 的 agent 或其再派子 agent 再调 workflow =
10
+ * 信号量自饿死,拒绝)
11
+ * - 顶层用户会话不在任何 run 树内 → 允许并发(受 maxConcurrentRuns 上限)
12
+ *
13
+ * 祖先链查询注入(session.get 的 parentID),本模块保持纯逻辑可单测。
14
+ */
15
+ /** executor 子会话开始(任务执行期内)登记 */
16
+ export declare function trackRunSession(sessionID: string): void;
17
+ /** executor 子会话结束注销(execute 的 finally) */
18
+ export declare function untrackRunSession(sessionID: string): void;
19
+ /** 会话是否为某活 run 的直接 agent 会话 */
20
+ export declare function isRunSession(sessionID: string): boolean;
21
+ /** 登记数(测试/诊断用) */
22
+ export declare function trackedRunSessionCount(): number;
23
+ /**
24
+ * 调用会话是否位于任一活 run 的 agent 树内:
25
+ * 自身被登记,或某级祖先被登记(run 的 agent 派生的子 agent 场景)。
26
+ * 祖先查询注入;跳数封顶防御环/脏数据。
27
+ */
28
+ export declare function isInsideRunSession(sessionID: string, getParentID: (id: string) => Promise<string | undefined>, maxHops?: number): Promise<boolean>;
@@ -0,0 +1,46 @@
1
+ /**
2
+ * Run 会话登记(并发 run 时代的递归防护)
3
+ *
4
+ * 背景:workflow 工具的递归防护原先用「任一 run 在飞即拒绝一切调用」的
5
+ * 计数器——它同时挡掉了合法的顶层并发(P2-9 已消除 gate/workspace 全局
6
+ * 单例,架构上并发安全)。现在改为**按调用来源判别**:
7
+ * - executor 为每个 agent 任务创建的子会话在此登记(任务结束注销)
8
+ * - workflow 工具凭调用会话自身/祖先链是否命中登记,识别「来自 run
9
+ * 内部的调用」(run 的 agent 或其再派子 agent 再调 workflow =
10
+ * 信号量自饿死,拒绝)
11
+ * - 顶层用户会话不在任何 run 树内 → 允许并发(受 maxConcurrentRuns 上限)
12
+ *
13
+ * 祖先链查询注入(session.get 的 parentID),本模块保持纯逻辑可单测。
14
+ */
15
+ const runSessions = new Set();
16
+ /** executor 子会话开始(任务执行期内)登记 */
17
+ export function trackRunSession(sessionID) {
18
+ runSessions.add(sessionID);
19
+ }
20
+ /** executor 子会话结束注销(execute 的 finally) */
21
+ export function untrackRunSession(sessionID) {
22
+ runSessions.delete(sessionID);
23
+ }
24
+ /** 会话是否为某活 run 的直接 agent 会话 */
25
+ export function isRunSession(sessionID) {
26
+ return runSessions.has(sessionID);
27
+ }
28
+ /** 登记数(测试/诊断用) */
29
+ export function trackedRunSessionCount() {
30
+ return runSessions.size;
31
+ }
32
+ /**
33
+ * 调用会话是否位于任一活 run 的 agent 树内:
34
+ * 自身被登记,或某级祖先被登记(run 的 agent 派生的子 agent 场景)。
35
+ * 祖先查询注入;跳数封顶防御环/脏数据。
36
+ */
37
+ export async function isInsideRunSession(sessionID, getParentID, maxHops = 8) {
38
+ let current = sessionID;
39
+ for (let hop = 0; hop < maxHops && current !== undefined; hop++) {
40
+ if (isRunSession(current))
41
+ return true;
42
+ current = await getParentID(current);
43
+ }
44
+ return false;
45
+ }
46
+ //# sourceMappingURL=run-sessions.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"run-sessions.js","sourceRoot":"","sources":["../../src/plugin/run-sessions.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;GAaG;AAEH,MAAM,WAAW,GAAG,IAAI,GAAG,EAAU,CAAA;AAErC,+BAA+B;AAC/B,MAAM,UAAU,eAAe,CAAC,SAAiB;IAC/C,WAAW,CAAC,GAAG,CAAC,SAAS,CAAC,CAAA;AAC5B,CAAC;AAED,0CAA0C;AAC1C,MAAM,UAAU,iBAAiB,CAAC,SAAiB;IACjD,WAAW,CAAC,MAAM,CAAC,SAAS,CAAC,CAAA;AAC/B,CAAC;AAED,+BAA+B;AAC/B,MAAM,UAAU,YAAY,CAAC,SAAiB;IAC5C,OAAO,WAAW,CAAC,GAAG,CAAC,SAAS,CAAC,CAAA;AACnC,CAAC;AAED,kBAAkB;AAClB,MAAM,UAAU,sBAAsB;IACpC,OAAO,WAAW,CAAC,IAAI,CAAA;AACzB,CAAC;AAED;;;;GAIG;AACH,MAAM,CAAC,KAAK,UAAU,kBAAkB,CACtC,SAAiB,EACjB,WAAwD,EACxD,OAAO,GAAG,CAAC;IAEX,IAAI,OAAO,GAAuB,SAAS,CAAA;IAC3C,KAAK,IAAI,GAAG,GAAG,CAAC,EAAE,GAAG,GAAG,OAAO,IAAI,OAAO,KAAK,SAAS,EAAE,GAAG,EAAE,EAAE,CAAC;QAChE,IAAI,YAAY,CAAC,OAAO,CAAC;YAAE,OAAO,IAAI,CAAA;QACtC,OAAO,GAAG,MAAM,WAAW,CAAC,OAAO,CAAC,CAAA;IACtC,CAAC;IACD,OAAO,KAAK,CAAA;AACd,CAAC"}
@@ -0,0 +1,15 @@
1
+ /**
2
+ * workflow 工具入参 -> flow args(v1-parity P0-1:args 工具层透传)
3
+ *
4
+ * 背景:引擎 startWorkflow(registry, store, id, args) 早已接受任意 args 并按
5
+ * definition.argsSchema 校验(required/类型/枚举),但工具层此前只硬编码转发
6
+ * topic——P4 自定义流程声明的 args 与 feature-development 的
7
+ * checkCommand/reviewers/keepLockfileChanges 经工具一律不可达。
8
+ *
9
+ * 合并语义:
10
+ * - topic 恒为顶层显式参数(向后兼容所有内置流程)
11
+ * - 顶层 topic 优先于 args.topic(显式字段是 canonical 来源)
12
+ * - args 非对象(数组/字符串等)→ 抛错,由工具层既有 catch 通道转成结果文本
13
+ * ——fail-loud,不静默吞掉(静默降级是本仓库明确淘汰的设计)
14
+ */
15
+ export declare function buildWorkflowArgs(topic: unknown, args: unknown): Record<string, unknown>;
@@ -0,0 +1,28 @@
1
+ /**
2
+ * workflow 工具入参 -> flow args(v1-parity P0-1:args 工具层透传)
3
+ *
4
+ * 背景:引擎 startWorkflow(registry, store, id, args) 早已接受任意 args 并按
5
+ * definition.argsSchema 校验(required/类型/枚举),但工具层此前只硬编码转发
6
+ * topic——P4 自定义流程声明的 args 与 feature-development 的
7
+ * checkCommand/reviewers/keepLockfileChanges 经工具一律不可达。
8
+ *
9
+ * 合并语义:
10
+ * - topic 恒为顶层显式参数(向后兼容所有内置流程)
11
+ * - 顶层 topic 优先于 args.topic(显式字段是 canonical 来源)
12
+ * - args 非对象(数组/字符串等)→ 抛错,由工具层既有 catch 通道转成结果文本
13
+ * ——fail-loud,不静默吞掉(静默降级是本仓库明确淘汰的设计)
14
+ */
15
+ export function buildWorkflowArgs(topic, args) {
16
+ const payload = {};
17
+ if (args !== undefined && args !== null) {
18
+ if (typeof args !== "object" || Array.isArray(args)) {
19
+ throw new Error(`[agentic-workflow] workflow tool "args" must be an object of flow parameters (got ${Array.isArray(args) ? "array" : typeof args})`);
20
+ }
21
+ Object.assign(payload, args);
22
+ }
23
+ if (topic !== undefined && topic !== null) {
24
+ payload.topic = topic;
25
+ }
26
+ return payload;
27
+ }
28
+ //# sourceMappingURL=tool-args.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"tool-args.js","sourceRoot":"","sources":["../../src/plugin/tool-args.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;GAaG;AAEH,MAAM,UAAU,iBAAiB,CAAC,KAAc,EAAE,IAAa;IAC7D,MAAM,OAAO,GAA4B,EAAE,CAAA;IAC3C,IAAI,IAAI,KAAK,SAAS,IAAI,IAAI,KAAK,IAAI,EAAE,CAAC;QACxC,IAAI,OAAO,IAAI,KAAK,QAAQ,IAAI,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,EAAE,CAAC;YACpD,MAAM,IAAI,KAAK,CACb,qFAAqF,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,OAAO,IAAI,GAAG,CACpI,CAAA;QACH,CAAC;QACD,MAAM,CAAC,MAAM,CAAC,OAAO,EAAE,IAA+B,CAAC,CAAA;IACzD,CAAC;IACD,IAAI,KAAK,KAAK,SAAS,IAAI,KAAK,KAAK,IAAI,EAAE,CAAC;QAC1C,OAAO,CAAC,KAAK,GAAG,KAAK,CAAA;IACvB,CAAC;IACD,OAAO,OAAO,CAAA;AAChB,CAAC"}
@@ -1,11 +1,18 @@
1
1
  /**
2
- * OpenCode V2 TUI 插件入口(P2.3 双形态的 TUI 侧)
2
+ * OpenCode V2 TUI 插件入口(P2.3 checkpoint 审批 + P2-8 进度面板)
3
3
  *
4
4
  * 加载约定:package.json exports["./tui"] -> 本文件(default export Plugin.define)。
5
- * 职责单一:订阅 server 侧 checkpoint 审批请求事件,弹出 TUI 确认框,
6
- * 把人工决定经 RPC 应答回 server(InteractiveCheckpointGate 挂起处)。
5
+ * 职责:
6
+ * - 订阅 server 侧 checkpoint 审批请求事件,弹出 TUI 确认框,
7
+ * 把人工决定经 RPC 应答回 server(InteractiveCheckpointGate 挂起处)。
8
+ * - /workflow 命令打开进度面板(session.panel slot):
9
+ * 初始经 snapshot RPC 同步近期 run,之后订阅 progress 事件实时更新;
10
+ * 最新 run 的节点详情经 detail RPC 按需拉取(runId@status 去重)。
7
11
  *
8
- * 注意:本文件只在 TUI 宿主内加载;server 宿主只加载 "." 入口(src/plugin/index.ts)。
12
+ * 注意:
13
+ * - 本文件只在 TUI 宿主内加载;server 宿主只加载 "." 入口(src/plugin/index.ts)。
14
+ * - solid-js 用法全部集中在本文件(v1 实测教训:多文件会解析出不同实例)。
15
+ * - 视图逻辑在 progress-view.ts(纯函数,单测覆盖);本文件只剩摆线。
9
16
  */
10
17
  import { Plugin } from "@opencode/plugin/tui";
11
18
  declare const _default: Plugin.Definition;
@@ -1,21 +1,39 @@
1
+ import { Fragment as _Fragment, jsx as _jsx } from "@opentui/solid/jsx-runtime";
1
2
  /**
2
- * OpenCode V2 TUI 插件入口(P2.3 双形态的 TUI 侧)
3
+ * OpenCode V2 TUI 插件入口(P2.3 checkpoint 审批 + P2-8 进度面板)
3
4
  *
4
5
  * 加载约定:package.json exports["./tui"] -> 本文件(default export Plugin.define)。
5
- * 职责单一:订阅 server 侧 checkpoint 审批请求事件,弹出 TUI 确认框,
6
- * 把人工决定经 RPC 应答回 server(InteractiveCheckpointGate 挂起处)。
6
+ * 职责:
7
+ * - 订阅 server 侧 checkpoint 审批请求事件,弹出 TUI 确认框,
8
+ * 把人工决定经 RPC 应答回 server(InteractiveCheckpointGate 挂起处)。
9
+ * - /workflow 命令打开进度面板(session.panel slot):
10
+ * 初始经 snapshot RPC 同步近期 run,之后订阅 progress 事件实时更新;
11
+ * 最新 run 的节点详情经 detail RPC 按需拉取(runId@status 去重)。
7
12
  *
8
- * 注意:本文件只在 TUI 宿主内加载;server 宿主只加载 "." 入口(src/plugin/index.ts)。
13
+ * 注意:
14
+ * - 本文件只在 TUI 宿主内加载;server 宿主只加载 "." 入口(src/plugin/index.ts)。
15
+ * - solid-js 用法全部集中在本文件(v1 实测教训:多文件会解析出不同实例)。
16
+ * - 视图逻辑在 progress-view.ts(纯函数,单测覆盖);本文件只剩摆线。
9
17
  */
10
18
  import { Plugin } from "@opencode/plugin/tui";
19
+ import { createSignal } from "solid-js";
11
20
  import { CHECKPOINT_REQUESTED_EVENT, CheckpointRpc } from "./checkpoint-rpc.js";
21
+ import { PROGRESS_EVENT, ProgressRpc, parseRunDetail, parseRunSnapshot, parseRunSnapshotList, parseSessionReplay, } from "./progress-rpc.js";
22
+ import { renderDetailLines, renderDetailSection, renderPanelLines, renderSessionLines, renderSessionSection, } from "./progress-view.js";
23
+ /** 面板内容名(ui.panel.open 与 slot claim 的握手键) */
24
+ const PANEL_NAME = "agentic-workflow";
12
25
  export default Plugin.define({
13
26
  id: "agentic-workflow-tui",
14
27
  setup(ctx) {
15
- return ctx.data.on(CHECKPOINT_REQUESTED_EVENT, (event) => {
28
+ const offCheckpoint = ctx.data.on(CHECKPOINT_REQUESTED_EVENT, (event) => {
16
29
  // 事件 data 为 unknown 形状(V2EventRpc.data),手动收窄
17
30
  void handleCheckpointRequest(ctx, event.data);
18
31
  });
32
+ const offProgress = setupProgressPanel(ctx);
33
+ return () => {
34
+ offCheckpoint();
35
+ offProgress();
36
+ };
19
37
  },
20
38
  });
21
39
  async function handleCheckpointRequest(ctx, data) {
@@ -50,4 +68,130 @@ async function handleCheckpointRequest(ctx, data) {
50
68
  `${error instanceof Error ? error.message : String(error)}`);
51
69
  }
52
70
  }
71
+ /**
72
+ * 进度面板装配:状态 signal + snapshot 初始同步 + progress 事件流 +
73
+ * session.panel claim + /workflow 命令。返回清理函数。
74
+ */
75
+ function setupProgressPanel(ctx) {
76
+ const [runs, setRuns] = createSignal([]);
77
+ const [live, setLive] = createSignal(false);
78
+ const [detail, setDetail] = createSignal();
79
+ // 去重键:runId@status——同一状态下只拉一次,终态转换再拉一次收尾
80
+ let detailKey = "";
81
+ const [session, setSession] = createSignal();
82
+ let sessionKey = "";
83
+ /**
84
+ * Open Session 回放按需拉取:取详情里最后一个带会话的步骤(最新 agent
85
+ * 活动)的最后一个会话。key = runId@status@step 去重;慢回包竞态守卫
86
+ * 同 detail。任意步骤可经同一 RPC(index 选多会话步骤的第几个)。
87
+ */
88
+ const refreshSession = (runId, parsed) => {
89
+ if (!parsed)
90
+ return;
91
+ const withSessions = parsed.steps.filter((step) => step.sessionIDs !== undefined && step.sessionIDs.length > 0);
92
+ const target = withSessions[withSessions.length - 1];
93
+ if (target === undefined || target.name === undefined)
94
+ return;
95
+ const key = `${runId}@${parsed.status}@${target.name}`;
96
+ if (key === sessionKey)
97
+ return;
98
+ sessionKey = key;
99
+ void ctx.client
100
+ .rpc(ProgressRpc)
101
+ .session({ runId, step: target.name })
102
+ .then((output) => {
103
+ if (key !== sessionKey)
104
+ return;
105
+ const replay = parseSessionReplay(output);
106
+ setSession(replay
107
+ ? { runId, step: target.name, lines: renderSessionLines(replay) }
108
+ : undefined);
109
+ })
110
+ .catch(() => {
111
+ if (key !== sessionKey)
112
+ return;
113
+ setSession(undefined);
114
+ });
115
+ };
116
+ /** 节点详情按需拉取(journal 单读;无 journal/旧 server -> 空行区,不重试轰炸) */
117
+ const refreshDetail = (snapshot) => {
118
+ const key = `${snapshot.runId}@${snapshot.status}`;
119
+ if (key === detailKey)
120
+ return;
121
+ detailKey = key;
122
+ void ctx.client
123
+ .rpc(ProgressRpc)
124
+ .detail({ runId: snapshot.runId })
125
+ .then((output) => {
126
+ // 竞态守卫:慢回包不属于最新请求时丢弃
127
+ if (key !== detailKey)
128
+ return;
129
+ const parsed = parseRunDetail(output);
130
+ setDetail(parsed
131
+ ? { runId: snapshot.runId, lines: renderDetailLines(parsed) }
132
+ : { runId: snapshot.runId, lines: [] });
133
+ refreshSession(snapshot.runId, parsed);
134
+ })
135
+ .catch(() => {
136
+ if (key !== detailKey)
137
+ return;
138
+ setDetail({ runId: snapshot.runId, lines: [] });
139
+ });
140
+ };
141
+ // 初始同步:server 侧 board 的近期 run(面板未开也拉——首次打开即时有内容)
142
+ void ctx.client
143
+ .rpc(ProgressRpc)
144
+ .snapshot({})
145
+ .then((output) => {
146
+ const parsed = parseRunSnapshotList(output);
147
+ setRuns(parsed);
148
+ if (parsed[0])
149
+ refreshDetail(parsed[0]);
150
+ })
151
+ .catch(() => {
152
+ // server 侧无 progress board(旧版本/注册失败)——面板维持空态
153
+ });
154
+ // 实时流:全量快照,无需对账
155
+ const offEvent = ctx.data.on(PROGRESS_EVENT, (event) => {
156
+ const snapshot = parseRunSnapshot(event.data);
157
+ if (!snapshot)
158
+ return;
159
+ setLive(true);
160
+ setRuns((prev) => {
161
+ const rest = prev.filter((r) => r.runId !== snapshot.runId);
162
+ return [snapshot, ...rest].slice(0, 50);
163
+ });
164
+ refreshDetail(snapshot);
165
+ });
166
+ // 面板 claim:宿主选中我们的内容名时才渲染;其余名字让位(返回空 fragment)
167
+ const offSlot = ctx.ui.slot({
168
+ append: "session.panel",
169
+ render: (input) => input.name === PANEL_NAME ? (_jsx("box", { flexDirection: "column", paddingLeft: 1, paddingRight: 1, children: (live() || runs().length > 0
170
+ ? [
171
+ ...renderPanelLines(runs()),
172
+ ...renderDetailSection(runs(), detail()),
173
+ ...renderSessionSection(runs(), session()),
174
+ ]
175
+ : ["Agentic Workflow", "(no runs yet — start one with workflow_start)"]).map((line) => (_jsx("text", { children: line }))) })) : (_jsx(_Fragment, {})),
176
+ });
177
+ // /workflow 命令 + 命令面板入口
178
+ ctx.keymap.layer(() => ({
179
+ commands: [
180
+ {
181
+ id: "agentic-workflow.panel",
182
+ title: "Workflow progress",
183
+ group: "Agentic Workflow",
184
+ palette: true,
185
+ slash: { name: "workflow" },
186
+ run: () => {
187
+ ctx.ui.panel.open(PANEL_NAME);
188
+ },
189
+ },
190
+ ],
191
+ }));
192
+ return () => {
193
+ offEvent();
194
+ offSlot();
195
+ };
196
+ }
53
197
  //# sourceMappingURL=tui.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"tui.js","sourceRoot":"","sources":["../../src/plugin/tui.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAEH,OAAO,EAAE,MAAM,EAAE,MAAM,sBAAsB,CAAA;AAE7C,OAAO,EAAE,0BAA0B,EAAE,aAAa,EAAE,MAAM,qBAAqB,CAAA;AAI/E,eAAe,MAAM,CAAC,MAAM,CAAC;IAC3B,EAAE,EAAE,sBAAsB;IAC1B,KAAK,CAAC,GAAe;QACnB,OAAO,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC,0BAA0B,EAAE,CAAC,KAAK,EAAE,EAAE;YACvD,6CAA6C;YAC7C,KAAK,uBAAuB,CAAC,GAAG,EAAE,KAAK,CAAC,IAAI,CAAC,CAAA;QAC/C,CAAC,CAAC,CAAA;IACJ,CAAC;CACF,CAAC,CAAA;AAEF,KAAK,UAAU,uBAAuB,CAAC,GAAe,EAAE,IAAa;IACnE,IAAI,OAAO,IAAI,KAAK,QAAQ,IAAI,IAAI,KAAK,IAAI;QAAE,OAAM;IACrD,MAAM,MAAM,GAAG,IAAmE,CAAA;IAClF,IAAI,OAAO,MAAM,CAAC,SAAS,KAAK,QAAQ;QAAE,OAAM;IAChD,MAAM,KAAK,GAAG,OAAO,MAAM,CAAC,KAAK,KAAK,QAAQ,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,YAAY,CAAA;IAC5E,MAAM,OAAO,GAAG,OAAO,MAAM,CAAC,OAAO,KAAK,QAAQ,CAAC,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,CAAA;IAExE,oEAAoE;IACpE,MAAM,QAAQ,GAAG,MAAM,GAAG,CAAC,EAAE,CAAC,MAAM,CAAC,OAAO,CAAC;QAC3C,KAAK,EAAE,qBAAqB,KAAK,EAAE;QACnC,OAAO;QACP,KAAK,EAAE,EAAE,OAAO,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE;KAC3C,CAAC,CAAA;IAEF,MAAM,MAAM,GACV,QAAQ,KAAK,SAAS;QACpB,CAAC,CAAC,4BAA4B;QAC9B,CAAC,CAAC,QAAQ;YACR,CAAC,CAAC,SAAS;YACX,CAAC,CAAC,6BAA6B,CAAA;IAErC,IAAI,CAAC;QACH,MAAM,GAAG,CAAC,MAAM,CAAC,GAAG,CAAC,aAAa,CAAC,CAAC,KAAK,CAAC;YACxC,SAAS,EAAE,MAAM,CAAC,SAAS;YAC3B,QAAQ,EAAE,QAAQ,KAAK,IAAI;YAC3B,MAAM;SACP,CAAC,CAAA;IACJ,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,+BAA+B;QAC/B,OAAO,CAAC,GAAG,CACT,6DAA6D,MAAM,CAAC,SAAS,KAAK;YAChF,GAAG,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,EAAE,CAC9D,CAAA;IACH,CAAC;AACH,CAAC"}
1
+ {"version":3,"file":"tui.js","sourceRoot":"","sources":["../../src/plugin/tui.tsx"],"names":[],"mappings":"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"}
@@ -0,0 +1,16 @@
1
+ /**
2
+ * workflow_control 编排(v1-parity P1-3:后台运行 + run 控制)
3
+ *
4
+ * journal 是唯一事实源:
5
+ * - status:listRuns(全量倒序)/ getRun(单 run 详情:步骤进度、output、failure)
6
+ * - stop:活着的 run 请求协作式取消(下一步骤边界生效);孤儿 run
7
+ * (journal 里 running 但本进程无活体——进程重启后的悬置)直接收口 aborted
8
+ *
9
+ * 纪律:Core 侧逻辑,禁止 import OpenCode API(架构不变量)。
10
+ */
11
+ import type { WorkflowRun } from "../state/journal.js";
12
+ import type { ExecutionStore } from "../state/store.js";
13
+ export declare function formatRunList(runs: WorkflowRun[]): string;
14
+ export declare function formatRunDetail(run: WorkflowRun): string;
15
+ export declare function controlStatus(store: ExecutionStore, runId?: string): Promise<string>;
16
+ export declare function controlStop(store: ExecutionStore, runId: string): Promise<string>;
@@ -0,0 +1,85 @@
1
+ /**
2
+ * workflow_control 编排(v1-parity P1-3:后台运行 + run 控制)
3
+ *
4
+ * journal 是唯一事实源:
5
+ * - status:listRuns(全量倒序)/ getRun(单 run 详情:步骤进度、output、failure)
6
+ * - stop:活着的 run 请求协作式取消(下一步骤边界生效);孤儿 run
7
+ * (journal 里 running 但本进程无活体——进程重启后的悬置)直接收口 aborted
8
+ *
9
+ * 纪律:Core 侧逻辑,禁止 import OpenCode API(架构不变量)。
10
+ */
11
+ import { RunJournal } from "../state/recorder.js";
12
+ import { isLive, requestCancel } from "../registry/run-control.js";
13
+ function stepProgress(run) {
14
+ const done = run.steps.filter((s) => s.status === "completed").length;
15
+ return `${done}/${run.steps.length}`;
16
+ }
17
+ function fmtDuration(run) {
18
+ if (!run.completedAt)
19
+ return "…";
20
+ return `${((run.completedAt - run.startedAt) / 1000).toFixed(1)}s`;
21
+ }
22
+ export function formatRunList(runs) {
23
+ if (runs.length === 0) {
24
+ return "no runs recorded in this journalDir yet";
25
+ }
26
+ const lines = runs.map((run) => `[${run.runId}] ${run.workflow.id}@${run.workflow.version} ${run.status} ` +
27
+ `steps=${stepProgress(run)} started=${new Date(run.startedAt).toISOString()}`);
28
+ return (`${runs.length} run(s), newest first:\n` +
29
+ lines.join("\n") +
30
+ `\ndetail: workflow_control action=status, runId=<one of the above>`);
31
+ }
32
+ export function formatRunDetail(run) {
33
+ const steps = run.steps
34
+ .map((s) => ` - [${s.status}] ${s.name ?? `step#${s.index}`}`)
35
+ .join("\n");
36
+ const parts = [
37
+ `[${run.runId}] ${run.workflow.id}@${run.workflow.version}`,
38
+ `status: ${run.status} steps=${stepProgress(run)} duration=${fmtDuration(run)}`,
39
+ `args: ${JSON.stringify(run.args)}`,
40
+ steps,
41
+ ];
42
+ if (run.status === "completed" && typeof run.steps[run.steps.length - 1]?.output === "string") {
43
+ parts.push(`output:\n${run.steps[run.steps.length - 1]?.output}`);
44
+ }
45
+ else if (run.failure) {
46
+ parts.push(`failure: ${run.failure.message}`);
47
+ }
48
+ if (run.status === "aborted") {
49
+ parts.push(`(aborted run can be resumed: workflow tool resumeRunId="${run.runId}")`);
50
+ }
51
+ return parts.join("\n");
52
+ }
53
+ export async function controlStatus(store, runId) {
54
+ if (runId && runId.length > 0) {
55
+ const run = await store.getRun(runId);
56
+ if (!run) {
57
+ return `[agentic-workflow] run not found: ${runId} (check journalDir; inline runs have no journal)`;
58
+ }
59
+ return formatRunDetail(run);
60
+ }
61
+ return formatRunList(await store.listRuns());
62
+ }
63
+ export async function controlStop(store, runId) {
64
+ const run = await store.getRun(runId);
65
+ if (!run) {
66
+ return `[agentic-workflow] run not found: ${runId} (check journalDir; inline runs have no journal)`;
67
+ }
68
+ if (run.status !== "running") {
69
+ return `[agentic-workflow] ${runId} is already ${run.status} - nothing to stop`;
70
+ }
71
+ if (isLive(runId)) {
72
+ // 活体:协作式取消——正在执行的 LLM 调用不打断,下一步骤边界收口 aborted
73
+ requestCancel(runId);
74
+ return (`[agentic-workflow] stop requested for ${runId} ` +
75
+ `(${run.workflow.id}@${run.workflow.version}, steps=${stepProgress(run)}): ` +
76
+ `takes effect at the next step boundary (cooperative). ` +
77
+ `Poll workflow_control action=status runId=${runId} until it shows aborted`);
78
+ }
79
+ // 孤儿:journal 里 running 但本进程无活体(进程重启后的悬置)→ 直接收口
80
+ const journal = await RunJournal.attach(store, runId);
81
+ await journal?.abort(new Error("aborted via workflow_control (orphaned run: running on disk, not alive in this process)"));
82
+ return (`[agentic-workflow] ${runId} was orphaned (running on disk, not alive in this process) ` +
83
+ `- journal marked aborted. Resume later with resumeRunId="${runId}" if needed`);
84
+ }
85
+ //# sourceMappingURL=workflow-control.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"workflow-control.js","sourceRoot":"","sources":["../../src/plugin/workflow-control.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,24 @@
1
+ /**
2
+ * workflow_schedule 工具编排(P2-7)
3
+ *
4
+ * 定时任务 CRUD + runNow + 视图格式化。工具 execute 只做参数解析与
5
+ * 本模块调用;执行细节(trigger 接线)在插件 index(依赖宿主侧
6
+ * registry / journal store)。
7
+ *
8
+ * 纪律:Core 侧逻辑,禁止 import OpenCode API(架构不变量)。
9
+ */
10
+ import type { SchedulerService } from "../scheduler/service.js";
11
+ import type { ScheduleView } from "../scheduler/types.js";
12
+ export type ScheduleAction = "create" | "list" | "get" | "delete" | "runNow" | "enable" | "disable";
13
+ export interface ScheduleToolInput {
14
+ action?: unknown;
15
+ id?: unknown;
16
+ flow?: unknown;
17
+ cron?: unknown;
18
+ name?: unknown;
19
+ args?: unknown;
20
+ enabled?: unknown;
21
+ }
22
+ export declare function formatView(view: ScheduleView): string;
23
+ /** 工具主入口:永不抛(结果全部以 output 文本返回——22 轮事故纪律) */
24
+ export declare function scheduleToolExecute(service: SchedulerService, input: ScheduleToolInput): Promise<string>;
@@ -0,0 +1,97 @@
1
+ /**
2
+ * workflow_schedule 工具编排(P2-7)
3
+ *
4
+ * 定时任务 CRUD + runNow + 视图格式化。工具 execute 只做参数解析与
5
+ * 本模块调用;执行细节(trigger 接线)在插件 index(依赖宿主侧
6
+ * registry / journal store)。
7
+ *
8
+ * 纪律:Core 侧逻辑,禁止 import OpenCode API(架构不变量)。
9
+ */
10
+ function fmtRun(run) {
11
+ const parts = [
12
+ `[${run.status}] ${run.trigger} slot=${run.slot}`,
13
+ run.workflowRunId ? `run=${run.workflowRunId}` : undefined,
14
+ run.note ? `note=${run.note}` : undefined,
15
+ ].filter((p) => p !== undefined);
16
+ return ` - ${run.startedAt} ${parts.join(" ")}`;
17
+ }
18
+ export function formatView(view) {
19
+ const parts = [
20
+ `${view.enabled ? "[on] " : "[off] "}${view.id} (${view.name ?? view.flow})`,
21
+ `flow=${view.flow} cron="${view.cron}"`,
22
+ `args=${JSON.stringify(view.args ?? {})}`,
23
+ view.nextRunAt ? `next=${view.nextRunAt}` : "next=(disabled)",
24
+ view.lastRunAt ? `last=${view.lastRunAt} (${view.lastRunStatus})` : "last=(never ran)",
25
+ ];
26
+ return parts.join("\n");
27
+ }
28
+ /** 工具主入口:永不抛(结果全部以 output 文本返回——22 轮事故纪律) */
29
+ export async function scheduleToolExecute(service, input) {
30
+ const action = typeof input.action === "string" ? input.action : "";
31
+ const id = typeof input.id === "string" ? input.id : "";
32
+ try {
33
+ switch (action) {
34
+ case "create": {
35
+ if (typeof input.flow !== "string" || input.flow.length === 0) {
36
+ return "[agentic-workflow] create requires: id, flow, cron";
37
+ }
38
+ if (typeof input.cron !== "string" || input.cron.length === 0) {
39
+ return "[agentic-workflow] create requires: id, flow, cron";
40
+ }
41
+ if (id.length === 0) {
42
+ return "[agentic-workflow] create requires: id, flow, cron";
43
+ }
44
+ const args = input.args !== undefined && typeof input.args === "object" && input.args !== null
45
+ ? input.args
46
+ : undefined;
47
+ const view = await service.create({
48
+ id,
49
+ flow: input.flow,
50
+ cron: input.cron,
51
+ ...(typeof input.name === "string" ? { name: input.name } : {}),
52
+ ...(args !== undefined ? { args } : {}),
53
+ ...(typeof input.enabled === "boolean" ? { enabled: input.enabled } : {}),
54
+ });
55
+ return `created schedule:\n${formatView(view)}\n(cursor baselined to now - slots before creation never fire; use action=runNow to fire immediately)`;
56
+ }
57
+ case "list": {
58
+ const views = await service.list();
59
+ if (views.length === 0)
60
+ return "no schedules (create with action=create)";
61
+ return `${views.length} schedule(s):\n\n${views.map(formatView).join("\n\n")}`;
62
+ }
63
+ case "get": {
64
+ if (id.length === 0)
65
+ return "[agentic-workflow] get requires: id";
66
+ const detail = await service.detail(id);
67
+ const runs = detail.runs.length > 0 ? detail.runs.map(fmtRun).join("\n") : " (no runs yet)";
68
+ return `${formatView(detail.view)}\nrecent runs (newest first):\n${runs}`;
69
+ }
70
+ case "delete": {
71
+ if (id.length === 0)
72
+ return "[agentic-workflow] delete requires: id";
73
+ await service.remove(id);
74
+ return `deleted schedule ${id} (config, cursor, run history)`;
75
+ }
76
+ case "runNow": {
77
+ if (id.length === 0)
78
+ return "[agentic-workflow] runNow requires: id";
79
+ const record = await service.runNow(id);
80
+ return `manual trigger recorded:\n${fmtRun(record)}\n(poll the workflow via workflow_control action=status runId=...)`;
81
+ }
82
+ case "enable":
83
+ case "disable": {
84
+ if (id.length === 0)
85
+ return `[agentic-workflow] ${action} requires: id`;
86
+ const view = await service.setEnabled(id, action === "enable");
87
+ return formatView(view);
88
+ }
89
+ default:
90
+ return `[agentic-workflow] unknown action "${action}" (supported: create, list, get, delete, runNow, enable, disable)`;
91
+ }
92
+ }
93
+ catch (error) {
94
+ return `[agentic-workflow] schedule ${action || "(?)"} failed: ${error instanceof Error ? error.message : String(error)}`;
95
+ }
96
+ }
97
+ //# sourceMappingURL=workflow-schedule.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"workflow-schedule.js","sourceRoot":"","sources":["../../src/plugin/workflow-schedule.ts"],"names":[],"mappings":"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"}
@@ -33,9 +33,12 @@ export interface CheckpointOptions {
33
33
  /** 节点标签,默认 "checkpoint" */
34
34
  label?: string;
35
35
  }
36
- /** 注入 CheckpointGate(plugin 初始化时调用;传 undefined 表示解除绑定) */
36
+ /** 注入全局 CheckpointGate(plugin 初始化时调用;传 undefined 表示解除绑定) */
37
37
  export declare function setCheckpointGate(value: CheckpointGate | undefined): void;
38
- /** 读取当前 gate(调用级覆盖需先保存原值以便恢复) */
38
+ /**
39
+ * 当前生效的 gate:run 上下文(subflow/scheduler/调用级覆盖)优先,
40
+ * 回落全局绑定。嵌套 run 未显式覆盖时继承父作用域。
41
+ */
39
42
  export declare function getCheckpointGate(): CheckpointGate | undefined;
40
43
  /** 获取当前 gate;未注入时抛错 */
41
44
  export declare function requireCheckpointGate(): CheckpointGate;