@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.
- package/README.md +306 -5
- package/dist/cli/config.d.ts +121 -0
- package/dist/cli/config.js +331 -0
- package/dist/cli/config.js.map +1 -0
- package/dist/cli/doctor.d.ts +5 -0
- package/dist/cli/doctor.js +141 -0
- package/dist/cli/doctor.js.map +1 -0
- package/dist/cli/index.d.ts +18 -0
- package/dist/cli/index.js +120 -0
- package/dist/cli/index.js.map +1 -0
- package/dist/cli/install.d.ts +19 -0
- package/dist/cli/install.js +135 -0
- package/dist/cli/install.js.map +1 -0
- package/dist/cli/uninstall.d.ts +16 -0
- package/dist/cli/uninstall.js +110 -0
- package/dist/cli/uninstall.js.map +1 -0
- package/dist/cli/update.d.ts +15 -0
- package/dist/cli/update.js +86 -0
- package/dist/cli/update.js.map +1 -0
- package/dist/core/index.d.ts +39 -0
- package/dist/core/index.js +38 -0
- package/dist/core/index.js.map +1 -0
- package/dist/observability/events.d.ts +43 -0
- package/dist/observability/events.js.map +1 -1
- package/dist/plugin/checkpoint-override.d.ts +7 -9
- package/dist/plugin/checkpoint-override.js +8 -14
- package/dist/plugin/checkpoint-override.js.map +1 -1
- package/dist/plugin/define-workflow.d.ts +33 -0
- package/dist/plugin/define-workflow.js +103 -0
- package/dist/plugin/define-workflow.js.map +1 -0
- package/dist/plugin/index.js +406 -26
- package/dist/plugin/index.js.map +1 -1
- package/dist/plugin/opencode-v2-executor.js +58 -46
- package/dist/plugin/opencode-v2-executor.js.map +1 -1
- package/dist/plugin/progress-board.d.ts +64 -0
- package/dist/plugin/progress-board.js +150 -0
- package/dist/plugin/progress-board.js.map +1 -0
- package/dist/plugin/progress-rpc.d.ts +390 -0
- package/dist/plugin/progress-rpc.js +318 -0
- package/dist/plugin/progress-rpc.js.map +1 -0
- package/dist/plugin/progress-view.d.ts +82 -0
- package/dist/plugin/progress-view.js +244 -0
- package/dist/plugin/progress-view.js.map +1 -0
- package/dist/plugin/run-sessions.d.ts +28 -0
- package/dist/plugin/run-sessions.js +46 -0
- package/dist/plugin/run-sessions.js.map +1 -0
- package/dist/plugin/tool-args.d.ts +15 -0
- package/dist/plugin/tool-args.js +28 -0
- package/dist/plugin/tool-args.js.map +1 -0
- package/dist/plugin/tui.d.ts +11 -4
- package/dist/plugin/tui.js +149 -5
- package/dist/plugin/tui.js.map +1 -1
- package/dist/plugin/workflow-control.d.ts +16 -0
- package/dist/plugin/workflow-control.js +85 -0
- package/dist/plugin/workflow-control.js.map +1 -0
- package/dist/plugin/workflow-schedule.d.ts +24 -0
- package/dist/plugin/workflow-schedule.js +97 -0
- package/dist/plugin/workflow-schedule.js.map +1 -0
- package/dist/quality/checkpoint.d.ts +5 -2
- package/dist/quality/checkpoint.js +11 -6
- package/dist/quality/checkpoint.js.map +1 -1
- package/dist/quality/verify.d.ts +21 -2
- package/dist/quality/verify.js +36 -14
- package/dist/quality/verify.js.map +1 -1
- package/dist/registry/definition.d.ts +12 -0
- package/dist/registry/definition.js.map +1 -1
- package/dist/registry/registry.d.ts +4 -0
- package/dist/registry/registry.js +20 -1
- package/dist/registry/registry.js.map +1 -1
- package/dist/registry/run-control.d.ts +27 -0
- package/dist/registry/run-control.js +51 -0
- package/dist/registry/run-control.js.map +1 -0
- package/dist/registry/runner.d.ts +29 -6
- package/dist/registry/runner.js +153 -35
- package/dist/registry/runner.js.map +1 -1
- package/dist/runtime/errors.d.ts +26 -0
- package/dist/runtime/errors.js +30 -0
- package/dist/runtime/errors.js.map +1 -1
- package/dist/runtime/executor.d.ts +22 -0
- package/dist/runtime/executor.js.map +1 -1
- package/dist/runtime/run-context.d.ts +44 -0
- package/dist/runtime/run-context.js +32 -0
- package/dist/runtime/run-context.js.map +1 -0
- package/dist/scheduler/cron.d.ts +29 -0
- package/dist/scheduler/cron.js +171 -0
- package/dist/scheduler/cron.js.map +1 -0
- package/dist/scheduler/service.d.ts +78 -0
- package/dist/scheduler/service.js +210 -0
- package/dist/scheduler/service.js.map +1 -0
- package/dist/scheduler/store.d.ts +26 -0
- package/dist/scheduler/store.js +94 -0
- package/dist/scheduler/store.js.map +1 -0
- package/dist/scheduler/types.d.ts +53 -0
- package/dist/scheduler/types.js +12 -0
- package/dist/scheduler/types.js.map +1 -0
- package/dist/state/journal.d.ts +23 -0
- package/dist/state/journal.js +2 -0
- package/dist/state/journal.js.map +1 -1
- package/dist/state/recorder.d.ts +67 -0
- package/dist/state/recorder.js +148 -2
- package/dist/state/recorder.js.map +1 -1
- package/dist/workflow/agent.d.ts +42 -1
- package/dist/workflow/agent.js +116 -6
- package/dist/workflow/agent.js.map +1 -1
- package/dist/workflow/judge-panel.d.ts +37 -0
- package/dist/workflow/judge-panel.js +66 -0
- package/dist/workflow/judge-panel.js.map +1 -0
- package/dist/workflow/pipeline.d.ts +21 -0
- package/dist/workflow/pipeline.js +71 -0
- package/dist/workflow/pipeline.js.map +1 -0
- package/dist/workflow/race.d.ts +16 -0
- package/dist/workflow/race.js +46 -0
- package/dist/workflow/race.js.map +1 -0
- package/dist/workflow/sequence.js +6 -0
- package/dist/workflow/sequence.js.map +1 -1
- package/dist/workflows/loader.d.ts +124 -0
- package/dist/workflows/loader.js +500 -0
- package/dist/workflows/loader.js.map +1 -0
- package/dist/workspace/ambient.d.ts +6 -4
- package/dist/workspace/ambient.js +10 -4
- package/dist/workspace/ambient.js.map +1 -1
- package/package.json +16 -6
- package/skills/workflow-authoring/SKILL.md +111 -0
- package/skills/workflow-optimize/SKILL.md +70 -0
- package/dist/workflows/index.d.ts +0 -19
- package/dist/workflows/index.js +0 -40
- package/dist/workflows/index.js.map +0 -1
|
@@ -7,18 +7,14 @@
|
|
|
7
7
|
* 交互门(5 分钟超时假失败)+ 观测数据写进别的项目。
|
|
8
8
|
*
|
|
9
9
|
* 修复策略:**运行时显式 > 环境隐式**。workflow 工具新增保留参数
|
|
10
|
-
* `checkpointMode
|
|
11
|
-
*
|
|
10
|
+
* `checkpointMode`,调用时为**本次 run** 构建策略门,经 P2-9 的
|
|
11
|
+
* run 级上下文(RunLaunchOptions.gate)注入——不再换装全局门,
|
|
12
|
+
* 无恢复交叠竞态,对守护进程宿主与并发调用天然免疫。
|
|
12
13
|
*
|
|
13
14
|
* 范围收敛(v0.4.0):只支持策略门(auto-approve / auto-reject)——
|
|
14
15
|
* interactive 门需要 RPC 域 + bind() 注册,按调用创建会累积 RPC
|
|
15
16
|
* 注册且无 unbind 通道,保持「仅限插件配置」。
|
|
16
|
-
*
|
|
17
|
-
* 已知限制:全局 gate 仍是单例,两个并发调用携带不同覆盖值时存在
|
|
18
|
-
* 竞态(restore 交叠)。per-run gate 线程化是后续 L 范围工作;
|
|
19
|
-
* 单会话 `opencode run` / TUI 串行场景不受影响。
|
|
20
17
|
*/
|
|
21
|
-
import { getCheckpointGate, setCheckpointGate } from "../quality/checkpoint.js";
|
|
22
18
|
import { PolicyCheckpointGate } from "./policy-checkpoint-gate.js";
|
|
23
19
|
export function parseCheckpointModeOverride(value) {
|
|
24
20
|
if (value === undefined || value === null || value === "")
|
|
@@ -34,16 +30,14 @@ export function parseCheckpointModeOverride(value) {
|
|
|
34
30
|
return undefined;
|
|
35
31
|
}
|
|
36
32
|
/**
|
|
37
|
-
*
|
|
38
|
-
*
|
|
33
|
+
* 为本次调用构建覆盖门(无覆盖返回 undefined——run 走默认 gate 链:
|
|
34
|
+
* run 上下文继承 / 全局绑定)。
|
|
39
35
|
*/
|
|
40
|
-
export function
|
|
36
|
+
export function buildCheckpointGate(mode) {
|
|
41
37
|
if (!mode)
|
|
42
38
|
return undefined;
|
|
43
|
-
|
|
44
|
-
setCheckpointGate(new PolicyCheckpointGate(mode));
|
|
45
|
-
console.log(`[agentic-workflow] checkpoint gate override for this invocation: ${mode} ` +
|
|
39
|
+
console.log(`[agentic-workflow] checkpoint gate for this run: ${mode} ` +
|
|
46
40
|
"(explicit per-call control; init-time config may differ)");
|
|
47
|
-
return
|
|
41
|
+
return new PolicyCheckpointGate(mode);
|
|
48
42
|
}
|
|
49
43
|
//# sourceMappingURL=checkpoint-override.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"checkpoint-override.js","sourceRoot":"","sources":["../../src/plugin/checkpoint-override.ts"],"names":[],"mappings":"AAAA
|
|
1
|
+
{"version":3,"file":"checkpoint-override.js","sourceRoot":"","sources":["../../src/plugin/checkpoint-override.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;GAgBG;AAEH,OAAO,EAAE,oBAAoB,EAAE,MAAM,6BAA6B,CAAA;AAKlE,MAAM,UAAU,2BAA2B,CACzC,KAAc;IAEd,IAAI,KAAK,KAAK,SAAS,IAAI,KAAK,KAAK,IAAI,IAAI,KAAK,KAAK,EAAE;QAAE,OAAO,SAAS,CAAA;IAC3E,IAAI,KAAK,KAAK,cAAc,IAAI,KAAK,KAAK,aAAa;QAAE,OAAO,KAAK,CAAA;IACrE,IAAI,KAAK,KAAK,aAAa,EAAE,CAAC;QAC5B,OAAO,CAAC,GAAG,CACT,uEAAuE;YACrE,4DAA4D,CAC/D,CAAA;QACD,OAAO,SAAS,CAAA;IAClB,CAAC;IACD,OAAO,CAAC,GAAG,CACT,+DAA+D,MAAM,CAAC,KAAK,CAAC,EAAE,CAC/E,CAAA;IACD,OAAO,SAAS,CAAA;AAClB,CAAC;AAED;;;GAGG;AACH,MAAM,UAAU,mBAAmB,CACjC,IAAwC;IAExC,IAAI,CAAC,IAAI;QAAE,OAAO,SAAS,CAAA;IAC3B,OAAO,CAAC,GAAG,CACT,oDAAoD,IAAI,GAAG;QACzD,0DAA0D,CAC7D,CAAA;IACD,OAAO,IAAI,oBAAoB,CAAC,IAAI,CAAC,CAAA;AACvC,CAAC"}
|
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* workflow_define 核心(v1-parity P0-2:自然语言 → 声明式 JSON 生成链路)
|
|
3
|
+
*
|
|
4
|
+
* 主 agent 在对话中把需求整理成声明式 JSON,经本函数「校验 → 注册 → 落盘」,
|
|
5
|
+
* 全程无需人工编辑文件——v1「零代码」体验在 v2 的声明式形态。
|
|
6
|
+
*
|
|
7
|
+
* 语义(与既有纪律对齐):
|
|
8
|
+
* - 校验复用装载器同一套规则(validateWorkflow),错误逐一指名
|
|
9
|
+
* - 内置保留 id 直接拒绝(防遮蔽,同装载器 reservedIds 语义)
|
|
10
|
+
* - 注册先行、落盘其后:同 id@version 重复注册被拦(版本契约);
|
|
11
|
+
* 内容相同的重复 define = 幂等成功(agent 重试友好);
|
|
12
|
+
* 内容不同 = 拒绝并提示升 version(registry 同 id 多版本共存,取最新)
|
|
13
|
+
* - 落盘失败 fail-loud 报告(会话内已注册但未持久化,明确说出后果与修法)
|
|
14
|
+
*
|
|
15
|
+
* 纪律:Core 侧逻辑,禁止 import OpenCode API(架构不变量)。
|
|
16
|
+
*/
|
|
17
|
+
import type { WorkflowRegistry } from "../registry/registry.js";
|
|
18
|
+
export interface DefineOutcome {
|
|
19
|
+
ok: boolean;
|
|
20
|
+
/** 给主 agent 看的结果文案(成功含调用指引,失败含精确修法) */
|
|
21
|
+
message: string;
|
|
22
|
+
}
|
|
23
|
+
export declare function defineWorkflow(params: {
|
|
24
|
+
registry: WorkflowRegistry;
|
|
25
|
+
/** 内置流程 id(防遮蔽);与 init 装载用的 reservedIds 同源 */
|
|
26
|
+
reservedIds: readonly string[];
|
|
27
|
+
/** 待定义的声明式 JSON(未经校验的原始对象) */
|
|
28
|
+
raw: unknown;
|
|
29
|
+
/** 已配置的 flows 候选目录(绝对路径;来自插件 options.workflows 的解析) */
|
|
30
|
+
flowsDirs: readonly string[];
|
|
31
|
+
/** 显式目标目录覆盖(绝对路径) */
|
|
32
|
+
dir?: string;
|
|
33
|
+
}): Promise<DefineOutcome>;
|
|
@@ -0,0 +1,103 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* workflow_define 核心(v1-parity P0-2:自然语言 → 声明式 JSON 生成链路)
|
|
3
|
+
*
|
|
4
|
+
* 主 agent 在对话中把需求整理成声明式 JSON,经本函数「校验 → 注册 → 落盘」,
|
|
5
|
+
* 全程无需人工编辑文件——v1「零代码」体验在 v2 的声明式形态。
|
|
6
|
+
*
|
|
7
|
+
* 语义(与既有纪律对齐):
|
|
8
|
+
* - 校验复用装载器同一套规则(validateWorkflow),错误逐一指名
|
|
9
|
+
* - 内置保留 id 直接拒绝(防遮蔽,同装载器 reservedIds 语义)
|
|
10
|
+
* - 注册先行、落盘其后:同 id@version 重复注册被拦(版本契约);
|
|
11
|
+
* 内容相同的重复 define = 幂等成功(agent 重试友好);
|
|
12
|
+
* 内容不同 = 拒绝并提示升 version(registry 同 id 多版本共存,取最新)
|
|
13
|
+
* - 落盘失败 fail-loud 报告(会话内已注册但未持久化,明确说出后果与修法)
|
|
14
|
+
*
|
|
15
|
+
* 纪律:Core 侧逻辑,禁止 import OpenCode API(架构不变量)。
|
|
16
|
+
*/
|
|
17
|
+
import { mkdir, writeFile } from "node:fs/promises";
|
|
18
|
+
import path from "node:path";
|
|
19
|
+
import { WorkflowRegistrationError } from "../registry/errors.js";
|
|
20
|
+
import { toDefinition, validateWorkflow } from "../workflows/loader.js";
|
|
21
|
+
export async function defineWorkflow(params) {
|
|
22
|
+
const { registry, reservedIds, raw, flowsDirs, dir } = params;
|
|
23
|
+
const checked = validateWorkflow(raw, "workflow_define");
|
|
24
|
+
if (!checked.ok) {
|
|
25
|
+
return { ok: false, message: `[agentic-workflow] invalid workflow definition: ${checked.error}` };
|
|
26
|
+
}
|
|
27
|
+
const dw = checked.value;
|
|
28
|
+
if (reservedIds.includes(dw.id)) {
|
|
29
|
+
return {
|
|
30
|
+
ok: false,
|
|
31
|
+
message: `[agentic-workflow] id "${dw.id}" is reserved by a built-in workflow; pick a different id`,
|
|
32
|
+
};
|
|
33
|
+
}
|
|
34
|
+
const targetDir = dir && dir.length > 0 ? dir : flowsDirs[0] ?? "";
|
|
35
|
+
if (!targetDir) {
|
|
36
|
+
return {
|
|
37
|
+
ok: false,
|
|
38
|
+
message: "[agentic-workflow] no flows directory configured: add " +
|
|
39
|
+
'\\"workflows\\": ["flows"] to the plugin options (opencode.json) and define again',
|
|
40
|
+
};
|
|
41
|
+
}
|
|
42
|
+
const definition = toDefinition(dw);
|
|
43
|
+
try {
|
|
44
|
+
registry.register(definition);
|
|
45
|
+
}
|
|
46
|
+
catch (error) {
|
|
47
|
+
if (error instanceof WorkflowRegistrationError) {
|
|
48
|
+
// 同 id@version 已注册:内容相同 = 幂等成功;不同 = 版本契约拒绝
|
|
49
|
+
if (isSameDefinition(registry, dw.id, dw.version ?? "1.0.0", definition)) {
|
|
50
|
+
return {
|
|
51
|
+
ok: true,
|
|
52
|
+
message: `[agentic-workflow] ${dw.id}@${dw.version} already defined (identical) - ready to call. ` +
|
|
53
|
+
"No changes were needed.",
|
|
54
|
+
};
|
|
55
|
+
}
|
|
56
|
+
return {
|
|
57
|
+
ok: false,
|
|
58
|
+
message: `[agentic-workflow] ${dw.id}@${dw.version} is already registered with DIFFERENT content: ` +
|
|
59
|
+
'bump "version" to publish the change (the registry keeps versions side by side and ' +
|
|
60
|
+
"runs the latest; resume still resolves old journals against their exact version).",
|
|
61
|
+
};
|
|
62
|
+
}
|
|
63
|
+
throw error;
|
|
64
|
+
}
|
|
65
|
+
const filePath = path.join(targetDir, `${dw.id}.json`);
|
|
66
|
+
try {
|
|
67
|
+
await mkdir(targetDir, { recursive: true });
|
|
68
|
+
await writeFile(filePath, JSON.stringify(dw, null, 2) + "\n", "utf8");
|
|
69
|
+
}
|
|
70
|
+
catch (error) {
|
|
71
|
+
return {
|
|
72
|
+
ok: false,
|
|
73
|
+
message: `[agentic-workflow] registered ${dw.id}@${dw.version} for THIS session, but persisting to ` +
|
|
74
|
+
`${filePath} failed: ${error instanceof Error ? error.message : String(error)}. The definition ` +
|
|
75
|
+
"will be lost on restart - fix the directory, then define again with a bumped version " +
|
|
76
|
+
"(the already-registered error for this version is expected; the file on disk wins after restart).",
|
|
77
|
+
};
|
|
78
|
+
}
|
|
79
|
+
return {
|
|
80
|
+
ok: true,
|
|
81
|
+
message: `[agentic-workflow] defined ${dw.id}@${dw.version} ` +
|
|
82
|
+
`(${(definition.stepNames ?? []).join(" -> ")})\n` +
|
|
83
|
+
`persisted: ${filePath} (auto-loads on every start)\n` +
|
|
84
|
+
`call it: workflow tool with flow="${dw.id}", topic=<...>` +
|
|
85
|
+
(dw.args ? " plus the args your schema declares" : ""),
|
|
86
|
+
};
|
|
87
|
+
}
|
|
88
|
+
/** 与已注册的同 id@version 定义比对「声明层」等价性(run 闭包无法深比较) */
|
|
89
|
+
function isSameDefinition(registry, id, version, candidate) {
|
|
90
|
+
let existing;
|
|
91
|
+
try {
|
|
92
|
+
existing = registry.resolve(id, version);
|
|
93
|
+
}
|
|
94
|
+
catch {
|
|
95
|
+
return false;
|
|
96
|
+
}
|
|
97
|
+
if (!existing)
|
|
98
|
+
return false;
|
|
99
|
+
return (existing.description === candidate.description &&
|
|
100
|
+
JSON.stringify(existing.argsSchema) === JSON.stringify(candidate.argsSchema) &&
|
|
101
|
+
JSON.stringify(existing.stepNames) === JSON.stringify(candidate.stepNames));
|
|
102
|
+
}
|
|
103
|
+
//# sourceMappingURL=define-workflow.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"define-workflow.js","sourceRoot":"","sources":["../../src/plugin/define-workflow.ts"],"names":[],"mappings":"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"}
|