wardo 0.1.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 (76) hide show
  1. package/README.md +82 -0
  2. package/dist/agents/claude.d.ts +25 -0
  3. package/dist/agents/claude.d.ts.map +1 -0
  4. package/dist/agents/claude.js +83 -0
  5. package/dist/agents/claude.js.map +1 -0
  6. package/dist/agents/codex.d.ts +26 -0
  7. package/dist/agents/codex.d.ts.map +1 -0
  8. package/dist/agents/codex.js +81 -0
  9. package/dist/agents/codex.js.map +1 -0
  10. package/dist/agents/index.d.ts +3 -0
  11. package/dist/agents/index.d.ts.map +1 -0
  12. package/dist/agents/index.js +3 -0
  13. package/dist/agents/index.js.map +1 -0
  14. package/dist/cli.d.ts +3 -0
  15. package/dist/cli.d.ts.map +1 -0
  16. package/dist/cli.js +80 -0
  17. package/dist/cli.js.map +1 -0
  18. package/dist/config.d.ts +11 -0
  19. package/dist/config.d.ts.map +1 -0
  20. package/dist/config.js +128 -0
  21. package/dist/config.js.map +1 -0
  22. package/dist/environment.d.ts +10 -0
  23. package/dist/environment.d.ts.map +1 -0
  24. package/dist/environment.js +80 -0
  25. package/dist/environment.js.map +1 -0
  26. package/dist/events.d.ts +16 -0
  27. package/dist/events.d.ts.map +1 -0
  28. package/dist/events.js +41 -0
  29. package/dist/events.js.map +1 -0
  30. package/dist/index.d.ts +15 -0
  31. package/dist/index.d.ts.map +1 -0
  32. package/dist/index.js +15 -0
  33. package/dist/index.js.map +1 -0
  34. package/dist/llm.d.ts +42 -0
  35. package/dist/llm.d.ts.map +1 -0
  36. package/dist/llm.js +95 -0
  37. package/dist/llm.js.map +1 -0
  38. package/dist/planner.d.ts +19 -0
  39. package/dist/planner.d.ts.map +1 -0
  40. package/dist/planner.js +39 -0
  41. package/dist/planner.js.map +1 -0
  42. package/dist/renderer.d.ts +8 -0
  43. package/dist/renderer.d.ts.map +1 -0
  44. package/dist/renderer.js +22 -0
  45. package/dist/renderer.js.map +1 -0
  46. package/dist/retry.d.ts +12 -0
  47. package/dist/retry.d.ts.map +1 -0
  48. package/dist/retry.js +35 -0
  49. package/dist/retry.js.map +1 -0
  50. package/dist/review.d.ts +21 -0
  51. package/dist/review.d.ts.map +1 -0
  52. package/dist/review.js +47 -0
  53. package/dist/review.js.map +1 -0
  54. package/dist/skill-install.d.ts +7 -0
  55. package/dist/skill-install.d.ts.map +1 -0
  56. package/dist/skill-install.js +25 -0
  57. package/dist/skill-install.js.map +1 -0
  58. package/dist/store.d.ts +14 -0
  59. package/dist/store.d.ts.map +1 -0
  60. package/dist/store.js +65 -0
  61. package/dist/store.js.map +1 -0
  62. package/dist/task-agent.d.ts +22 -0
  63. package/dist/task-agent.d.ts.map +1 -0
  64. package/dist/task-agent.js +160 -0
  65. package/dist/task-agent.js.map +1 -0
  66. package/dist/types.d.ts +115 -0
  67. package/dist/types.d.ts.map +1 -0
  68. package/dist/types.js +2 -0
  69. package/dist/types.js.map +1 -0
  70. package/dist/workflow.d.ts +33 -0
  71. package/dist/workflow.d.ts.map +1 -0
  72. package/dist/workflow.js +212 -0
  73. package/dist/workflow.js.map +1 -0
  74. package/package.json +40 -0
  75. package/skill/SKILL.md +65 -0
  76. package/templates/workflow.ts +9 -0
@@ -0,0 +1,25 @@
1
+ import { cp, mkdir } from "node:fs/promises";
2
+ import { homedir } from "node:os";
3
+ import { dirname, join } from "node:path";
4
+ import { fileURLToPath } from "node:url";
5
+ import { detectAgentEnvironment } from "./environment.js";
6
+ function packageRoot() {
7
+ return join(dirname(fileURLToPath(import.meta.url)), "..");
8
+ }
9
+ export async function installSkill(agent, source = join(packageRoot(), "skill")) {
10
+ const environment = await detectAgentEnvironment();
11
+ const targets = agent
12
+ ? [agent]
13
+ : ["codex", "claude"].filter((item) => environment.installed[item]);
14
+ if (!targets.length)
15
+ throw new Error("Neither codex nor claude was found; install one agent before installing the wardo skill.");
16
+ const results = [];
17
+ for (const item of targets) {
18
+ const target = join(homedir(), item === "codex" ? ".codex/skills/wardo" : ".claude/skills/wardo");
19
+ await mkdir(dirname(target), { recursive: true });
20
+ await cp(source, target, { recursive: true, force: true });
21
+ results.push({ agent: item, target });
22
+ }
23
+ return results;
24
+ }
25
+ //# sourceMappingURL=skill-install.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"skill-install.js","sourceRoot":"","sources":["../src/skill-install.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,EAAE,EAAE,KAAK,EAAE,MAAM,kBAAkB,CAAC;AAC7C,OAAO,EAAE,OAAO,EAAE,MAAM,SAAS,CAAC;AAClC,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AAC1C,OAAO,EAAE,aAAa,EAAE,MAAM,UAAU,CAAC;AAEzC,OAAO,EAAE,sBAAsB,EAAE,MAAM,kBAAkB,CAAC;AAO1D,SAAS,WAAW;IAClB,OAAO,IAAI,CAAC,OAAO,CAAC,aAAa,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,CAAC;AAC7D,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,YAAY,CAAC,KAAiB,EAAE,MAAM,GAAG,IAAI,CAAC,WAAW,EAAE,EAAE,OAAO,CAAC;IACzF,MAAM,WAAW,GAAG,MAAM,sBAAsB,EAAE,CAAC;IACnD,MAAM,OAAO,GAAgB,KAAK;QAChC,CAAC,CAAC,CAAC,KAAK,CAAC;QACT,CAAC,CAAE,CAAC,OAAO,EAAE,QAAQ,CAAiB,CAAC,MAAM,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,WAAW,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC,CAAC;IACvF,IAAI,CAAC,OAAO,CAAC,MAAM;QAAE,MAAM,IAAI,KAAK,CAAC,0FAA0F,CAAC,CAAC;IACjI,MAAM,OAAO,GAAyB,EAAE,CAAC;IACzC,KAAK,MAAM,IAAI,IAAI,OAAO,EAAE,CAAC;QAC3B,MAAM,MAAM,GAAG,IAAI,CAAC,OAAO,EAAE,EAAE,IAAI,KAAK,OAAO,CAAC,CAAC,CAAC,qBAAqB,CAAC,CAAC,CAAC,sBAAsB,CAAC,CAAC;QAClG,MAAM,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;QAClD,MAAM,EAAE,CAAC,MAAM,EAAE,MAAM,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC,CAAC;QAC3D,OAAO,CAAC,IAAI,CAAC,EAAE,KAAK,EAAE,IAAI,EAAE,MAAM,EAAE,CAAC,CAAC;IACxC,CAAC;IACD,OAAO,OAAO,CAAC;AACjB,CAAC"}
@@ -0,0 +1,14 @@
1
+ import type { WardoEvent } from "./types.js";
2
+ export declare class WardoStore {
3
+ readonly root: string;
4
+ constructor(workspace: string);
5
+ init(prompt?: string): Promise<void>;
6
+ private path;
7
+ atomicWrite(relative: string, value: string | object): Promise<void>;
8
+ readJson<T>(relative: string): Promise<T | undefined>;
9
+ appendEvent(event: WardoEvent): Promise<void>;
10
+ saveTaskState(taskId: string, state: object): Promise<void>;
11
+ saveAttempt(taskId: string, attemptId: string, result: object, output?: string): Promise<void>;
12
+ lock(): Promise<() => Promise<void>>;
13
+ }
14
+ //# sourceMappingURL=store.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"store.d.ts","sourceRoot":"","sources":["../src/store.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,YAAY,CAAC;AAE7C,qBAAa,UAAU;IACrB,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;gBAEV,SAAS,EAAE,MAAM;IAIvB,IAAI,CAAC,MAAM,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAU1C,OAAO,CAAC,IAAI;IAIN,WAAW,CAAC,QAAQ,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IASpE,QAAQ,CAAC,CAAC,EAAE,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,CAAC,GAAG,SAAS,CAAC;IAUrD,WAAW,CAAC,KAAK,EAAE,UAAU,GAAG,OAAO,CAAC,IAAI,CAAC;IAO7C,aAAa,CAAC,MAAM,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAI3D,WAAW,CAAC,MAAM,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAM9F,IAAI,IAAI,OAAO,CAAC,MAAM,OAAO,CAAC,IAAI,CAAC,CAAC;CAS3C"}
package/dist/store.js ADDED
@@ -0,0 +1,65 @@
1
+ import { appendFile, mkdir, readFile, rename, writeFile, open, rm } from "node:fs/promises";
2
+ import { join } from "node:path";
3
+ export class WardoStore {
4
+ root;
5
+ constructor(workspace) {
6
+ this.root = join(workspace, ".wardo");
7
+ }
8
+ async init(prompt) {
9
+ await mkdir(this.root, { recursive: true });
10
+ await mkdir(join(this.root, "tasks"), { recursive: true });
11
+ await mkdir(join(this.root, "sessions"), { recursive: true });
12
+ await mkdir(join(this.root, "artifacts"), { recursive: true });
13
+ await mkdir(join(this.root, "summaries"), { recursive: true });
14
+ await mkdir(join(this.root, "scripts"), { recursive: true });
15
+ if (prompt !== undefined)
16
+ await this.atomicWrite("prompt.md", prompt);
17
+ }
18
+ path(relative) {
19
+ return join(this.root, relative);
20
+ }
21
+ async atomicWrite(relative, value) {
22
+ const target = this.path(relative);
23
+ await mkdir(join(target, ".."), { recursive: true });
24
+ const temp = `${target}.tmp-${process.pid}-${Date.now()}`;
25
+ const content = typeof value === "string" ? value : `${JSON.stringify(value, null, 2)}\n`;
26
+ await writeFile(temp, content, "utf8");
27
+ await rename(temp, target);
28
+ }
29
+ async readJson(relative) {
30
+ try {
31
+ return JSON.parse(await readFile(this.path(relative), "utf8"));
32
+ }
33
+ catch (error) {
34
+ const code = error && typeof error === "object" && "code" in error ? error.code : undefined;
35
+ if (code === "ENOENT")
36
+ return undefined;
37
+ throw error;
38
+ }
39
+ }
40
+ async appendEvent(event) {
41
+ const relative = join("tasks", event.taskId, event.attemptId, "events.jsonl");
42
+ const target = this.path(relative);
43
+ await mkdir(join(target, ".."), { recursive: true });
44
+ await appendFile(target, `${JSON.stringify(event)}\n`, "utf8");
45
+ }
46
+ async saveTaskState(taskId, state) {
47
+ await this.atomicWrite(join("tasks", taskId, "state.json"), state);
48
+ }
49
+ async saveAttempt(taskId, attemptId, result, output) {
50
+ const dir = join("tasks", taskId, attemptId);
51
+ await this.atomicWrite(join(dir, "result.json"), result);
52
+ if (output !== undefined)
53
+ await this.atomicWrite(join(dir, "output.md"), output);
54
+ }
55
+ async lock() {
56
+ await mkdir(this.path("locks"), { recursive: true });
57
+ const handle = await open(this.path("locks/run.lock"), "wx");
58
+ await handle.writeFile(`${process.pid}\n`, "utf8");
59
+ return async () => {
60
+ await handle.close();
61
+ await rm(this.path("locks/run.lock"), { force: true });
62
+ };
63
+ }
64
+ }
65
+ //# sourceMappingURL=store.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"store.js","sourceRoot":"","sources":["../src/store.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,22 @@
1
+ import { EventBus } from "./events.js";
2
+ import type { AgentAdapter, TaskResult, TaskSpec, WardoConfig } from "./types.js";
3
+ import { WardoStore } from "./store.js";
4
+ import { LlmRegistry } from "./llm.js";
5
+ import type { AgentName } from "./environment.js";
6
+ export interface TaskAgentOptions {
7
+ adapters: Partial<Record<"codex" | "claude", AgentAdapter>>;
8
+ registry: LlmRegistry;
9
+ config: WardoConfig;
10
+ store: WardoStore;
11
+ events: EventBus;
12
+ workspace: string;
13
+ activeProvider?: AgentName;
14
+ sleepFn?: (ms: number, signal?: AbortSignal) => Promise<void>;
15
+ }
16
+ export declare class TaskAgent {
17
+ private readonly options;
18
+ constructor(options: TaskAgentOptions);
19
+ execute(task: TaskSpec, runId: string, context: string, signal?: AbortSignal): Promise<TaskResult>;
20
+ private providerCandidates;
21
+ }
22
+ //# sourceMappingURL=task-agent.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"task-agent.d.ts","sourceRoot":"","sources":["../src/task-agent.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,QAAQ,EAAuB,MAAM,aAAa,CAAC;AAE5D,OAAO,KAAK,EAAE,YAAY,EAAc,UAAU,EAAE,QAAQ,EAAE,WAAW,EAAE,MAAM,YAAY,CAAC;AAC9F,OAAO,EAAE,UAAU,EAAE,MAAM,YAAY,CAAC;AACxC,OAAO,EAAE,WAAW,EAAE,MAAM,UAAU,CAAC;AACvC,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,kBAAkB,CAAC;AAUlD,MAAM,WAAW,gBAAgB;IAC/B,QAAQ,EAAE,OAAO,CAAC,MAAM,CAAC,OAAO,GAAG,QAAQ,EAAE,YAAY,CAAC,CAAC,CAAC;IAC5D,QAAQ,EAAE,WAAW,CAAC;IACtB,MAAM,EAAE,WAAW,CAAC;IACpB,KAAK,EAAE,UAAU,CAAC;IAClB,MAAM,EAAE,QAAQ,CAAC;IACjB,SAAS,EAAE,MAAM,CAAC;IAClB,cAAc,CAAC,EAAE,SAAS,CAAC;IAC3B,OAAO,CAAC,EAAE,CAAC,EAAE,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,WAAW,KAAK,OAAO,CAAC,IAAI,CAAC,CAAC;CAC/D;AAED,qBAAa,SAAS;IACR,OAAO,CAAC,QAAQ,CAAC,OAAO;gBAAP,OAAO,EAAE,gBAAgB;IAEhD,OAAO,CAAC,IAAI,EAAE,QAAQ,EAAE,KAAK,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,WAAW,GAAG,OAAO,CAAC,UAAU,CAAC;IAwGxG,OAAO,CAAC,kBAAkB;CA4B3B"}
@@ -0,0 +1,160 @@
1
+ import { z } from "zod";
2
+ import { normalizeAgentEvent } from "./events.js";
3
+ import { classifyError, retryDelay, sleep } from "./retry.js";
4
+ const JudgeDecision = z.object({
5
+ verdict: z.enum(["pass", "continue", "fail"]),
6
+ reason: z.string(),
7
+ nextPrompt: z.string().optional(),
8
+ retryable: z.boolean().default(false),
9
+ missing: z.array(z.string()).default([]),
10
+ });
11
+ export class TaskAgent {
12
+ options;
13
+ constructor(options) {
14
+ this.options = options;
15
+ }
16
+ async execute(task, runId, context, signal) {
17
+ const maxAttempts = task.maxAttempts ?? this.options.config.retry.maxAttempts;
18
+ let followUp = "";
19
+ let last = { status: "unknown", text: "", attempt: 0 };
20
+ const providers = task.provider === "codex" || task.provider === "claude"
21
+ ? [{ provider: task.provider, model: task.model }]
22
+ : this.providerCandidates(task);
23
+ let providerIndex = 0;
24
+ let continuation;
25
+ for (let attempt = 1; attempt <= maxAttempts; attempt += 1) {
26
+ const attemptId = `attempt-${String(attempt).padStart(4, "0")}`;
27
+ const plan = providers[providerIndex] ?? { provider: "codex" };
28
+ const provider = plan.provider;
29
+ const adapter = this.options.adapters[provider];
30
+ if (!adapter)
31
+ return { status: "failed", text: "", error: `No ${provider} adapter configured`, attempt };
32
+ const prompt = [
33
+ `任务目标:${task.goal}`,
34
+ `验收标准:${task.acceptance}`,
35
+ context ? `前置任务结果:\n${context}` : "",
36
+ followUp ? `上一次验收反馈:\n${followUp}` : "",
37
+ "请完成任务,记录实际修改、验证命令和剩余风险。",
38
+ ].filter(Boolean).join("\n\n");
39
+ const model = task.model?.includes(":") ? task.model.split(":").slice(1).join(":") : task.model ?? plan.model;
40
+ let start;
41
+ let text = "";
42
+ let error;
43
+ try {
44
+ const input = { prompt, cwd: this.options.workspace, ...(model ? { model } : {}), ...(signal ? { signal } : {}) };
45
+ start = continuation?.provider === provider
46
+ ? await adapter.resume(continuation.session, input)
47
+ : await adapter.start(input);
48
+ await this.options.events.emit({ runId, taskId: task.id, attemptId, type: "session_started", provider, payload: { sessionId: start.sessionId } });
49
+ for await (const event of adapter.stream(start, { prompt, ...(model ? { model } : {}), ...(signal ? { signal } : {}) })) {
50
+ if (event.text)
51
+ text += event.text;
52
+ await this.options.events.emit(normalizeAgentEvent(event, runId, task.id, attemptId));
53
+ }
54
+ continuation = { provider, session: start };
55
+ }
56
+ catch (caught) {
57
+ error = caught;
58
+ await this.options.events.emit({ runId, taskId: task.id, attemptId, type: "error", provider, payload: { error: String(caught) } });
59
+ }
60
+ if (error) {
61
+ if (signal?.aborted) {
62
+ last = { status: "paused", text, error: "Paused", attempt, ...(start?.sessionId ? { sessionId: start.sessionId } : {}) };
63
+ await this.options.store.saveAttempt(task.id, attemptId, last, text);
64
+ return last;
65
+ }
66
+ const classified = classifyError(error);
67
+ last = { status: classified.retryable ? "retry_wait" : "failed", text, error: classified.message, attempt, ...(start?.sessionId ? { sessionId: start.sessionId } : {}) };
68
+ if (!classified.retryable || attempt >= maxAttempts) {
69
+ await this.options.store.saveAttempt(task.id, attemptId, last, text);
70
+ return last;
71
+ }
72
+ const delay = retryDelay(this.options.config.retry, attempt);
73
+ await this.options.events.emit({ runId, taskId: task.id, attemptId, type: "retry_wait", provider, payload: { delayMs: delay, error: classified } });
74
+ if (delay !== undefined)
75
+ await (this.options.sleepFn ?? sleep)(delay, signal);
76
+ providerIndex = Math.min(providerIndex + 1, providers.length - 1);
77
+ continuation = undefined;
78
+ continue;
79
+ }
80
+ await this.options.events.emit({ runId, taskId: task.id, attemptId, type: "awaiting_judge", provider });
81
+ let decision;
82
+ try {
83
+ const judged = await this.options.registry.generate({
84
+ role: "judge",
85
+ prompt: [
86
+ `总目标:${task.goal}`,
87
+ `验收标准:${task.acceptance}`,
88
+ context ? `前置任务和历史摘要:\n${context}` : "",
89
+ followUp ? `此前验收反馈:\n${followUp}` : "",
90
+ "以下是子 agent 的最终输出:",
91
+ text || "(没有文本输出,请根据事件和工作区判断)",
92
+ "判断是否完成。若未完成,给出下一次执行应采取的明确动作。",
93
+ ].join("\n\n"),
94
+ schema: JudgeDecision,
95
+ signal,
96
+ });
97
+ decision = judged.object;
98
+ }
99
+ catch (caught) {
100
+ if (signal?.aborted) {
101
+ last = { status: "paused", text, error: "Paused during judge", attempt, ...(start?.sessionId ? { sessionId: start.sessionId } : {}) };
102
+ await this.options.store.saveAttempt(task.id, attemptId, last, text);
103
+ return last;
104
+ }
105
+ const classified = classifyError(caught);
106
+ last = { status: classified.retryable ? "retry_wait" : "failed", text, error: `Judge failed: ${classified.message}`, attempt, ...(start?.sessionId ? { sessionId: start.sessionId } : {}) };
107
+ await this.options.store.saveAttempt(task.id, attemptId, last, text);
108
+ if (!classified.retryable || attempt >= maxAttempts)
109
+ return last;
110
+ const delay = retryDelay(this.options.config.retry, attempt);
111
+ if (delay !== undefined)
112
+ await (this.options.sleepFn ?? sleep)(delay, signal);
113
+ providerIndex = Math.min(providerIndex + 1, providers.length - 1);
114
+ continuation = undefined;
115
+ continue;
116
+ }
117
+ await this.options.store.atomicWrite(`tasks/${task.id}/${attemptId}/judge.json`, decision);
118
+ last = { status: decision.verdict === "pass" ? "succeeded" : decision.verdict === "continue" ? "partial" : "failed", text, attempt, ...(start?.sessionId ? { sessionId: start.sessionId } : {}) };
119
+ await this.options.store.saveAttempt(task.id, attemptId, last, text);
120
+ if (decision.verdict === "pass")
121
+ return last;
122
+ if (decision.verdict === "fail" && !decision.retryable)
123
+ return last;
124
+ followUp = decision.nextPrompt ?? decision.reason;
125
+ }
126
+ return last;
127
+ }
128
+ providerCandidates(task) {
129
+ if (task.model?.startsWith("claude:") || task.model?.startsWith("anthropic:"))
130
+ return [{ provider: "claude", model: task.model.split(":").slice(1).join(":") }, { provider: "codex" }];
131
+ if (task.model?.startsWith("codex:") || task.model?.startsWith("openai:"))
132
+ return [{ provider: "codex", model: task.model.split(":").slice(1).join(":") }, { provider: "claude" }];
133
+ const preferred = this.options.config.modelPreferences
134
+ .map((item) => {
135
+ const [providerName, ...modelParts] = item.split(":");
136
+ const provider = providerName === "anthropic" ? "claude" : providerName === "openai" ? "codex" : undefined;
137
+ return provider ? { provider, ...(modelParts.length ? { model: modelParts.join(":") } : {}) } : undefined;
138
+ })
139
+ .filter((item) => item !== undefined);
140
+ const fallback = this.options.activeProvider === "claude"
141
+ ? [{ provider: "claude" }, { provider: "codex" }]
142
+ : [{ provider: "codex" }, { provider: "claude" }];
143
+ const activePreferred = this.options.activeProvider
144
+ ? preferred.find((item) => item.provider === this.options.activeProvider)
145
+ : undefined;
146
+ const initial = activePreferred
147
+ ? [activePreferred]
148
+ : this.options.activeProvider
149
+ ? [{ provider: this.options.activeProvider }]
150
+ : [];
151
+ const seen = new Set();
152
+ return [...initial, ...preferred, ...fallback].filter((item) => {
153
+ if (seen.has(item.provider))
154
+ return false;
155
+ seen.add(item.provider);
156
+ return true;
157
+ });
158
+ }
159
+ }
160
+ //# sourceMappingURL=task-agent.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"task-agent.js","sourceRoot":"","sources":["../src/task-agent.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,115 @@
1
+ export type ProviderName = "codex" | "claude";
2
+ export type LlmProviderName = "openai" | "anthropic" | "openai-compatible";
3
+ export type TaskStatus = "pending" | "ready" | "running" | "awaiting_judge" | "retry_wait" | "paused" | "succeeded" | "partial" | "failed" | "blocked" | "cancelled" | "unknown";
4
+ export interface TaskSpec {
5
+ id: string;
6
+ parentId?: string;
7
+ dependsOn?: string[];
8
+ goal: string;
9
+ acceptance: string;
10
+ provider?: ProviderName | "auto";
11
+ model?: string;
12
+ maxAttempts?: number;
13
+ children?: TaskSpec[];
14
+ contextPolicy?: "summary" | "artifacts" | "full";
15
+ }
16
+ export interface WorkflowSpec {
17
+ id: string;
18
+ objective: string;
19
+ tasks: TaskSpec[];
20
+ maxConcurrency?: number;
21
+ failFast?: boolean;
22
+ }
23
+ export interface WardoEvent {
24
+ schemaVersion: 1;
25
+ runId: string;
26
+ taskId: string;
27
+ attemptId: string;
28
+ seq: number;
29
+ ts: string;
30
+ type: string;
31
+ provider?: ProviderName | "llm";
32
+ payload?: unknown;
33
+ }
34
+ export interface TaskResult {
35
+ status: TaskStatus;
36
+ text: string;
37
+ structured?: unknown;
38
+ sessionId?: string;
39
+ usage?: Record<string, unknown>;
40
+ error?: string;
41
+ attempt: number;
42
+ }
43
+ export interface AgentSession {
44
+ provider: ProviderName;
45
+ sessionId: string;
46
+ model?: string;
47
+ cwd: string;
48
+ }
49
+ export interface AgentInput {
50
+ prompt: string;
51
+ model?: string;
52
+ outputSchema?: Record<string, unknown>;
53
+ signal?: AbortSignal;
54
+ }
55
+ export interface AgentEvent {
56
+ type: "session_started" | "turn_started" | "text_delta" | "reasoning" | "tool_call" | "file_change" | "turn_completed" | "error" | "status";
57
+ provider: ProviderName;
58
+ rawType: string;
59
+ text?: string;
60
+ payload?: unknown;
61
+ }
62
+ export interface AgentAdapter {
63
+ start(input: AgentInput & {
64
+ cwd: string;
65
+ additionalDirectories?: string[];
66
+ }): Promise<AgentSession>;
67
+ resume(session: AgentSession, input: AgentInput): Promise<AgentSession>;
68
+ stream(session: AgentSession, input: AgentInput): AsyncIterable<AgentEvent>;
69
+ cancel(session: AgentSession, reason?: string): Promise<void>;
70
+ fork?(session: AgentSession, at?: string): Promise<AgentSession>;
71
+ }
72
+ export interface RetryPolicy {
73
+ delaysMs: number[];
74
+ maxAttempts: number;
75
+ }
76
+ export interface ProviderConfig {
77
+ type: LlmProviderName;
78
+ apiKey?: string;
79
+ baseUrl?: string;
80
+ models?: string[];
81
+ headers?: Record<string, string>;
82
+ }
83
+ export interface WardoConfig {
84
+ workspace?: string;
85
+ maxConcurrency: number;
86
+ providerConcurrency?: Partial<Record<ProviderName, number>>;
87
+ retry: RetryPolicy;
88
+ providers: Record<string, ProviderConfig>;
89
+ modelPreferences: string[];
90
+ agentDefaults: {
91
+ codex?: {
92
+ model?: string;
93
+ sandboxMode?: string;
94
+ approvalPolicy?: string;
95
+ };
96
+ claude?: {
97
+ model?: string;
98
+ fallbackModel?: string;
99
+ permissionMode?: string;
100
+ };
101
+ };
102
+ judge?: {
103
+ provider?: string;
104
+ model?: string;
105
+ maxRetries?: number;
106
+ };
107
+ }
108
+ export interface RunOptions {
109
+ workspace?: string;
110
+ runId?: string;
111
+ resume?: boolean;
112
+ maxConcurrency?: number;
113
+ signal?: AbortSignal;
114
+ }
115
+ //# sourceMappingURL=types.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"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"}
package/dist/types.js ADDED
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=types.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.js","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":""}
@@ -0,0 +1,33 @@
1
+ import { WardoStore } from "./store.js";
2
+ import type { TaskResult, TaskSpec, WorkflowSpec, RunOptions, WardoConfig } from "./types.js";
3
+ import { TaskAgent } from "./task-agent.js";
4
+ import { type AgentEnvironment } from "./environment.js";
5
+ export declare function defineTask(task: TaskSpec): TaskSpec;
6
+ export declare function defineWorkflow(workflow: WorkflowSpec): WorkflowSpec;
7
+ export declare function forkWorkflow(sourceWorkspace: string, destinationWorkspace: string): Promise<string>;
8
+ export declare class WorkflowRunner {
9
+ private readonly workflow;
10
+ private readonly agent;
11
+ private readonly store;
12
+ private readonly config;
13
+ private readonly environment?;
14
+ private readonly tasks;
15
+ private readonly statuses;
16
+ constructor(workflow: WorkflowSpec, agent: TaskAgent, store: WardoStore, config: WardoConfig, environment?: AgentEnvironment | undefined);
17
+ run(options?: RunOptions): Promise<Map<string, TaskResult>>;
18
+ private runLocked;
19
+ }
20
+ export interface ExecuteOptions extends RunOptions {
21
+ prompt: string;
22
+ workflow?: WorkflowSpec;
23
+ config?: WardoConfig;
24
+ plan?: "single" | "auto";
25
+ stream?: boolean;
26
+ }
27
+ export interface WorkflowRunOptions extends RunOptions {
28
+ config?: WardoConfig;
29
+ stream?: boolean;
30
+ }
31
+ export declare function runWorkflow(workflow: WorkflowSpec, options?: WorkflowRunOptions): Promise<Map<string, TaskResult>>;
32
+ export declare function execute(options: ExecuteOptions): Promise<Map<string, TaskResult>>;
33
+ //# sourceMappingURL=workflow.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"workflow.d.ts","sourceRoot":"","sources":["../src/workflow.ts"],"names":[],"mappings":"AAMA,OAAO,EAAE,UAAU,EAAE,MAAM,YAAY,CAAC;AACxC,OAAO,KAAK,EAAE,UAAU,EAAE,QAAQ,EAAE,YAAY,EAAE,UAAU,EAAE,WAAW,EAAE,MAAM,YAAY,CAAC;AAG9F,OAAO,EAAE,SAAS,EAAE,MAAM,iBAAiB,CAAC;AAG5C,OAAO,EAA0B,KAAK,gBAAgB,EAAE,MAAM,kBAAkB,CAAC;AAEjF,wBAAgB,UAAU,CAAC,IAAI,EAAE,QAAQ,GAAG,QAAQ,CAEnD;AAED,wBAAgB,cAAc,CAAC,QAAQ,EAAE,YAAY,GAAG,YAAY,CAEnE;AAED,wBAAsB,YAAY,CAAC,eAAe,EAAE,MAAM,EAAE,oBAAoB,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,CAUzG;AA8BD,qBAAa,cAAc;IAIb,OAAO,CAAC,QAAQ,CAAC,QAAQ;IAAgB,OAAO,CAAC,QAAQ,CAAC,KAAK;IAAa,OAAO,CAAC,QAAQ,CAAC,KAAK;IAAc,OAAO,CAAC,QAAQ,CAAC,MAAM;IAAe,OAAO,CAAC,QAAQ,CAAC,WAAW,CAAC;IAH/L,OAAO,CAAC,QAAQ,CAAC,KAAK,CAAa;IACnC,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAAiC;gBAE7B,QAAQ,EAAE,YAAY,EAAmB,KAAK,EAAE,SAAS,EAAmB,KAAK,EAAE,UAAU,EAAmB,MAAM,EAAE,WAAW,EAAmB,WAAW,CAAC,EAAE,gBAAgB,YAAA;IAK3M,GAAG,CAAC,OAAO,GAAE,UAAe,GAAG,OAAO,CAAC,GAAG,CAAC,MAAM,EAAE,UAAU,CAAC,CAAC;YASvD,SAAS;CAgExB;AAED,MAAM,WAAW,cAAe,SAAQ,UAAU;IAChD,MAAM,EAAE,MAAM,CAAC;IACf,QAAQ,CAAC,EAAE,YAAY,CAAC;IACxB,MAAM,CAAC,EAAE,WAAW,CAAC;IACrB,IAAI,CAAC,EAAE,QAAQ,GAAG,MAAM,CAAC;IACzB,MAAM,CAAC,EAAE,OAAO,CAAC;CAClB;AAED,MAAM,WAAW,kBAAmB,SAAQ,UAAU;IACpD,MAAM,CAAC,EAAE,WAAW,CAAC;IACrB,MAAM,CAAC,EAAE,OAAO,CAAC;CAClB;AAED,wBAAsB,WAAW,CAAC,QAAQ,EAAE,YAAY,EAAE,OAAO,GAAE,kBAAuB,GAAG,OAAO,CAAC,GAAG,CAAC,MAAM,EAAE,UAAU,CAAC,CAAC,CAgC5H;AAED,wBAAsB,OAAO,CAAC,OAAO,EAAE,cAAc,GAAG,OAAO,CAAC,GAAG,CAAC,MAAM,EAAE,UAAU,CAAC,CAAC,CAavF"}