@duetso/agent 0.1.20

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 (148) hide show
  1. package/LICENSE +189 -0
  2. package/README.md +315 -0
  3. package/dist/package.json +84 -0
  4. package/dist/src/cli.d.ts +23 -0
  5. package/dist/src/cli.d.ts.map +1 -0
  6. package/dist/src/cli.js +754 -0
  7. package/dist/src/cli.js.map +1 -0
  8. package/dist/src/core/serializer.d.ts +3 -0
  9. package/dist/src/core/serializer.d.ts.map +1 -0
  10. package/dist/src/core/serializer.js +22 -0
  11. package/dist/src/core/serializer.js.map +1 -0
  12. package/dist/src/core/structured-output.d.ts +13 -0
  13. package/dist/src/core/structured-output.d.ts.map +1 -0
  14. package/dist/src/core/structured-output.js +41 -0
  15. package/dist/src/core/structured-output.js.map +1 -0
  16. package/dist/src/guardrails/firewall.d.ts +7 -0
  17. package/dist/src/guardrails/firewall.d.ts.map +1 -0
  18. package/dist/src/guardrails/firewall.js +31 -0
  19. package/dist/src/guardrails/firewall.js.map +1 -0
  20. package/dist/src/guardrails/pattern.d.ts +13 -0
  21. package/dist/src/guardrails/pattern.d.ts.map +1 -0
  22. package/dist/src/guardrails/pattern.js +70 -0
  23. package/dist/src/guardrails/pattern.js.map +1 -0
  24. package/dist/src/guardrails/semantic.d.ts +14 -0
  25. package/dist/src/guardrails/semantic.d.ts.map +1 -0
  26. package/dist/src/guardrails/semantic.js +47 -0
  27. package/dist/src/guardrails/semantic.js.map +1 -0
  28. package/dist/src/index.d.ts +20 -0
  29. package/dist/src/index.d.ts.map +1 -0
  30. package/dist/src/index.js +20 -0
  31. package/dist/src/index.js.map +1 -0
  32. package/dist/src/lib/compact-json.d.ts +11 -0
  33. package/dist/src/lib/compact-json.d.ts.map +1 -0
  34. package/dist/src/lib/compact-json.js +36 -0
  35. package/dist/src/lib/compact-json.js.map +1 -0
  36. package/dist/src/lib/xml.d.ts +3 -0
  37. package/dist/src/lib/xml.d.ts.map +1 -0
  38. package/dist/src/lib/xml.js +9 -0
  39. package/dist/src/lib/xml.js.map +1 -0
  40. package/dist/src/memory/observation-groups.d.ts +15 -0
  41. package/dist/src/memory/observation-groups.d.ts.map +1 -0
  42. package/dist/src/memory/observation-groups.js +159 -0
  43. package/dist/src/memory/observation-groups.js.map +1 -0
  44. package/dist/src/memory/observational-prompts.d.ts +27 -0
  45. package/dist/src/memory/observational-prompts.d.ts.map +1 -0
  46. package/dist/src/memory/observational-prompts.js +237 -0
  47. package/dist/src/memory/observational-prompts.js.map +1 -0
  48. package/dist/src/memory/observational.d.ts +63 -0
  49. package/dist/src/memory/observational.d.ts.map +1 -0
  50. package/dist/src/memory/observational.js +605 -0
  51. package/dist/src/memory/observational.js.map +1 -0
  52. package/dist/src/memory/storage.d.ts +3 -0
  53. package/dist/src/memory/storage.d.ts.map +1 -0
  54. package/dist/src/memory/storage.js +127 -0
  55. package/dist/src/memory/storage.js.map +1 -0
  56. package/dist/src/memory/store.d.ts +13 -0
  57. package/dist/src/memory/store.d.ts.map +1 -0
  58. package/dist/src/memory/store.js +106 -0
  59. package/dist/src/memory/store.js.map +1 -0
  60. package/dist/src/model-resolution/duet-gateway.d.ts +35 -0
  61. package/dist/src/model-resolution/duet-gateway.d.ts.map +1 -0
  62. package/dist/src/model-resolution/duet-gateway.js +56 -0
  63. package/dist/src/model-resolution/duet-gateway.js.map +1 -0
  64. package/dist/src/model-resolution/index.d.ts +31 -0
  65. package/dist/src/model-resolution/index.d.ts.map +1 -0
  66. package/dist/src/model-resolution/index.js +129 -0
  67. package/dist/src/model-resolution/index.js.map +1 -0
  68. package/dist/src/session/session-manager.d.ts +45 -0
  69. package/dist/src/session/session-manager.d.ts.map +1 -0
  70. package/dist/src/session/session-manager.js +94 -0
  71. package/dist/src/session/session-manager.js.map +1 -0
  72. package/dist/src/session/session.d.ts +113 -0
  73. package/dist/src/session/session.d.ts.map +1 -0
  74. package/dist/src/session/session.js +308 -0
  75. package/dist/src/session/session.js.map +1 -0
  76. package/dist/src/tui/app.d.ts +60 -0
  77. package/dist/src/tui/app.d.ts.map +1 -0
  78. package/dist/src/tui/app.js +742 -0
  79. package/dist/src/tui/app.js.map +1 -0
  80. package/dist/src/turn-runner/agent-events.d.ts +5 -0
  81. package/dist/src/turn-runner/agent-events.d.ts.map +1 -0
  82. package/dist/src/turn-runner/agent-events.js +59 -0
  83. package/dist/src/turn-runner/agent-events.js.map +1 -0
  84. package/dist/src/turn-runner/prompts.d.ts +13 -0
  85. package/dist/src/turn-runner/prompts.d.ts.map +1 -0
  86. package/dist/src/turn-runner/prompts.js +79 -0
  87. package/dist/src/turn-runner/prompts.js.map +1 -0
  88. package/dist/src/turn-runner/shell-state-handle.d.ts +32 -0
  89. package/dist/src/turn-runner/shell-state-handle.d.ts.map +1 -0
  90. package/dist/src/turn-runner/shell-state-handle.js +168 -0
  91. package/dist/src/turn-runner/shell-state-handle.js.map +1 -0
  92. package/dist/src/turn-runner/skill-context.d.ts +26 -0
  93. package/dist/src/turn-runner/skill-context.d.ts.map +1 -0
  94. package/dist/src/turn-runner/skill-context.js +110 -0
  95. package/dist/src/turn-runner/skill-context.js.map +1 -0
  96. package/dist/src/turn-runner/skills.d.ts +35 -0
  97. package/dist/src/turn-runner/skills.d.ts.map +1 -0
  98. package/dist/src/turn-runner/skills.js +130 -0
  99. package/dist/src/turn-runner/skills.js.map +1 -0
  100. package/dist/src/turn-runner/state-machine-controller.d.ts +90 -0
  101. package/dist/src/turn-runner/state-machine-controller.d.ts.map +1 -0
  102. package/dist/src/turn-runner/state-machine-controller.js +289 -0
  103. package/dist/src/turn-runner/state-machine-controller.js.map +1 -0
  104. package/dist/src/turn-runner/state-machine-session.d.ts +27 -0
  105. package/dist/src/turn-runner/state-machine-session.d.ts.map +1 -0
  106. package/dist/src/turn-runner/state-machine-session.js +189 -0
  107. package/dist/src/turn-runner/state-machine-session.js.map +1 -0
  108. package/dist/src/turn-runner/tools.d.ts +193 -0
  109. package/dist/src/turn-runner/tools.d.ts.map +1 -0
  110. package/dist/src/turn-runner/tools.js +509 -0
  111. package/dist/src/turn-runner/tools.js.map +1 -0
  112. package/dist/src/turn-runner/turn-runner.d.ts +160 -0
  113. package/dist/src/turn-runner/turn-runner.d.ts.map +1 -0
  114. package/dist/src/turn-runner/turn-runner.js +907 -0
  115. package/dist/src/turn-runner/turn-runner.js.map +1 -0
  116. package/dist/src/turn-runner/turn-state.d.ts +6 -0
  117. package/dist/src/turn-runner/turn-state.d.ts.map +1 -0
  118. package/dist/src/turn-runner/turn-state.js +32 -0
  119. package/dist/src/turn-runner/turn-state.js.map +1 -0
  120. package/dist/src/turn-runner/usage-accounting.d.ts +7 -0
  121. package/dist/src/turn-runner/usage-accounting.d.ts.map +1 -0
  122. package/dist/src/turn-runner/usage-accounting.js +49 -0
  123. package/dist/src/turn-runner/usage-accounting.js.map +1 -0
  124. package/dist/src/types/agent.d.ts +15 -0
  125. package/dist/src/types/agent.d.ts.map +1 -0
  126. package/dist/src/types/agent.js +2 -0
  127. package/dist/src/types/agent.js.map +1 -0
  128. package/dist/src/types/config.d.ts +37 -0
  129. package/dist/src/types/config.d.ts.map +1 -0
  130. package/dist/src/types/config.js +2 -0
  131. package/dist/src/types/config.js.map +1 -0
  132. package/dist/src/types/guardrails.d.ts +34 -0
  133. package/dist/src/types/guardrails.d.ts.map +1 -0
  134. package/dist/src/types/guardrails.js +2 -0
  135. package/dist/src/types/guardrails.js.map +1 -0
  136. package/dist/src/types/memory.d.ts +151 -0
  137. package/dist/src/types/memory.d.ts.map +1 -0
  138. package/dist/src/types/memory.js +2 -0
  139. package/dist/src/types/memory.js.map +1 -0
  140. package/dist/src/types/protocol.d.ts +426 -0
  141. package/dist/src/types/protocol.d.ts.map +1 -0
  142. package/dist/src/types/protocol.js +2 -0
  143. package/dist/src/types/protocol.js.map +1 -0
  144. package/dist/src/types/state-machine.d.ts +344 -0
  145. package/dist/src/types/state-machine.d.ts.map +1 -0
  146. package/dist/src/types/state-machine.js +2 -0
  147. package/dist/src/types/state-machine.js.map +1 -0
  148. package/package.json +84 -0
@@ -0,0 +1 @@
1
+ {"version":3,"file":"skills.d.ts","sourceRoot":"","sources":["../../../src/turn-runner/skills.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAsB,KAAK,EAAE,MAAM,iCAAiC,CAAC;AAEjF,OAAO,KAAK,EAAE,qBAAqB,EAAE,MAAM,oBAAoB,CAAC;AAEhE,MAAM,WAAW,cAAc;IAC7B,gCAAgC;IAChC,IAAI,EAAE,MAAM,CAAC;IACb,gEAAgE;IAChE,UAAU,EAAE,MAAM,CAAC;IACnB,kDAAkD;IAClD,SAAS,EAAE,MAAM,CAAC;CACnB;AAED,MAAM,WAAW,sBAAsB;IACrC,MAAM,EAAE,KAAK,EAAE,CAAC;IAChB,UAAU,EAAE,cAAc,EAAE,CAAC;CAC9B;AAuDD,wBAAgB,qBAAqB,CAAC,MAAM,EAAE,SAAS,KAAK,EAAE,GAAG,KAAK,EAAE,CAEvE;AAED,wBAAgB,oBAAoB,CAClC,gBAAgB,EAAE,qBAAqB,GAAG,SAAS,EACnD,GAAG,EAAE,MAAM,GACV,sBAAsB,CAMxB;AAED;;;;GAIG;AACH,wBAAgB,uBAAuB,CAAC,GAAG,EAAE,MAAM,GAAG,sBAAsB,CAG3E;AAkBD,wBAAgB,iBAAiB,CAAC,OAAO,EAAE,SAAS,KAAK,EAAE,EAAE,SAAS,EAAE,SAAS,KAAK,EAAE,GAAG,KAAK,EAAE,CASjG;AAED,wBAAgB,qBAAqB,CAAC,KAAK,EAAE,KAAK,GAAG,MAAM,CAG1D;AAED;;;;;;;;GAQG;AACH,wBAAgB,iBAAiB,CAAC,KAAK,EAAE,KAAK,EAAE,GAAG,EAAE,MAAM,GAAG,MAAM,GAAG,SAAS,GAAG,WAAW,CAU7F"}
@@ -0,0 +1,130 @@
1
+ import { execFileSync } from "node:child_process";
2
+ import { readFileSync } from "node:fs";
3
+ import { homedir } from "node:os";
4
+ import { join, resolve, sep } from "node:path";
5
+ import { loadSkills } from "@earendil-works/pi-coding-agent";
6
+ const SKILL_SHELL_EXPANSION_PATTERN = /!`([\s\S]*?)`/g;
7
+ const DEFAULT_SKILL_DIR_NAMES = [".duet", ".agents", ".claude"];
8
+ function buildSkillDiscoveryOptions(options, cwd) {
9
+ const effectiveCwd = options?.cwd ?? cwd;
10
+ const globalSkillRoots = options?.agentDir
11
+ ? [options.agentDir]
12
+ : DEFAULT_SKILL_DIR_NAMES.map((dirName) => join(homedir(), dirName));
13
+ const includeDefaults = options?.includeDefaults ?? true;
14
+ return {
15
+ cwd: effectiveCwd,
16
+ agentDir: globalSkillRoots[0],
17
+ includeDefaults: false,
18
+ skillPaths: uniquePaths([
19
+ ...(includeDefaults ? defaultSkillPaths(globalSkillRoots, effectiveCwd) : []),
20
+ ...(options?.skillPaths ?? []),
21
+ ]),
22
+ };
23
+ }
24
+ function defaultSkillPaths(globalSkillRoots, cwd) {
25
+ // Project before global so a project-local skill can shadow a same-named
26
+ // global one. Within each scope, .duet > .agents > .claude (first scanned
27
+ // wins on name collisions).
28
+ return [
29
+ ...DEFAULT_SKILL_DIR_NAMES.map((dirName) => join(cwd, dirName, "skills")),
30
+ ...globalSkillRoots.map((root) => join(root, "skills")),
31
+ ];
32
+ }
33
+ function uniquePaths(paths) {
34
+ return Array.from(new Set(paths));
35
+ }
36
+ function expandSkillShellCommands(content, cwd) {
37
+ return content.replace(SKILL_SHELL_EXPANSION_PATTERN, (_match, command) => {
38
+ const output = execFileSync("bash", ["-lc", command], {
39
+ cwd,
40
+ encoding: "utf-8",
41
+ maxBuffer: 1024 * 1024,
42
+ timeout: 30_000,
43
+ });
44
+ return output.trimEnd();
45
+ });
46
+ }
47
+ function expandSkillMetadata(skill) {
48
+ return {
49
+ ...skill,
50
+ description: expandSkillShellCommands(skill.description, skill.baseDir),
51
+ };
52
+ }
53
+ export function prepareExplicitSkills(skills) {
54
+ return skills.map(expandSkillMetadata);
55
+ }
56
+ export function loadDiscoveredSkills(discoveryOptions, cwd) {
57
+ const { skills, diagnostics } = loadSkills(buildSkillDiscoveryOptions(discoveryOptions, cwd));
58
+ return {
59
+ skills: skills.map(expandSkillMetadata),
60
+ collisions: extractSkillCollisions(diagnostics),
61
+ };
62
+ }
63
+ /**
64
+ * Discover installed skills without running shell-expansion in their metadata.
65
+ * Intended for read-only listing (e.g. `duet skills`) where executing the
66
+ * skills' shell commands would be a side effect users don't want.
67
+ */
68
+ export function discoverInstalledSkills(cwd) {
69
+ const { skills, diagnostics } = loadSkills(buildSkillDiscoveryOptions(undefined, cwd));
70
+ return { skills, collisions: extractSkillCollisions(diagnostics) };
71
+ }
72
+ function extractSkillCollisions(diagnostics) {
73
+ const collisions = [];
74
+ for (const diagnostic of diagnostics) {
75
+ const collision = diagnostic.collision;
76
+ if (diagnostic.type !== "collision" || !collision || collision.resourceType !== "skill") {
77
+ continue;
78
+ }
79
+ collisions.push({
80
+ name: collision.name,
81
+ winnerPath: collision.winnerPath,
82
+ loserPath: collision.loserPath,
83
+ });
84
+ }
85
+ return collisions;
86
+ }
87
+ export function mergeSkillsByName(primary, secondary) {
88
+ const merged = [...primary];
89
+ const seenNames = new Set(primary.map((skill) => skill.name));
90
+ for (const skill of secondary) {
91
+ if (!seenNames.has(skill.name)) {
92
+ merged.push(skill);
93
+ }
94
+ }
95
+ return merged;
96
+ }
97
+ export function readSkillInstructions(skill) {
98
+ const content = readFileSync(skill.filePath, "utf-8");
99
+ return expandSkillShellCommands(content, skill.baseDir);
100
+ }
101
+ /**
102
+ * Resolve the effective scope of a skill based on which discovery root it
103
+ * actually lives under.
104
+ *
105
+ * pi-coding-agent only labels a single user dir + a single project dir as
106
+ * "user"/"project" — anything else routes to "temporary". duet-agent scans
107
+ * three roots (.duet, .agents, .claude) per scope, so we re-label here so
108
+ * downstream consumers get the truth instead of mostly-"temporary".
109
+ */
110
+ export function resolveSkillScope(skill, cwd) {
111
+ const baseDir = resolve(skill.baseDir);
112
+ const home = homedir();
113
+ for (const dirName of DEFAULT_SKILL_DIR_NAMES) {
114
+ if (isUnderPath(baseDir, join(home, dirName, "skills")))
115
+ return "user";
116
+ }
117
+ for (const dirName of DEFAULT_SKILL_DIR_NAMES) {
118
+ if (isUnderPath(baseDir, join(cwd, dirName, "skills")))
119
+ return "project";
120
+ }
121
+ return "temporary";
122
+ }
123
+ function isUnderPath(target, root) {
124
+ const normalizedRoot = resolve(root);
125
+ if (target === normalizedRoot)
126
+ return true;
127
+ const prefix = normalizedRoot.endsWith(sep) ? normalizedRoot : `${normalizedRoot}${sep}`;
128
+ return target.startsWith(prefix);
129
+ }
130
+ //# sourceMappingURL=skills.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"skills.js","sourceRoot":"","sources":["../../../src/turn-runner/skills.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,90 @@
1
+ import type { TurnQuestion, TurnRunnerTerminalStatus } from "../types/protocol.js";
2
+ import type { StateMachineAgentState, StateMachineDefinition, StateMachineSession } from "../types/state-machine.js";
3
+ import { type ShellPartialOutput } from "./shell-state-handle.js";
4
+ import { type StateMachineRunnerDecision } from "./tools.js";
5
+ export type StateMachineExecutionResult = {
6
+ type: "state_completed";
7
+ stateName: string;
8
+ output?: unknown;
9
+ } | {
10
+ type: "terminal";
11
+ status: TurnRunnerTerminalStatus;
12
+ result?: string;
13
+ error?: string;
14
+ } | {
15
+ type: "ask";
16
+ questions: TurnQuestion[];
17
+ } | {
18
+ type: "sleep";
19
+ wakeAt: number;
20
+ } | {
21
+ type: "interrupted";
22
+ };
23
+ export type StateAgentResult = {
24
+ type: "complete";
25
+ result?: string;
26
+ } | {
27
+ type: "ask";
28
+ questions: TurnQuestion[];
29
+ } | {
30
+ type: "failed";
31
+ error: string;
32
+ } | {
33
+ type: "interrupted";
34
+ };
35
+ export interface StateAgentHandle {
36
+ /** Starts the state agent from a fresh transcript owned by the host. */
37
+ prompt(): Promise<StateAgentResult>;
38
+ /** Aborts the in-process state agent; persisted state-agent messages are discarded. */
39
+ interrupt(): void;
40
+ /** Text-only partial output used for interruption history without persisting messages. */
41
+ partialAssistantText(): string | undefined;
42
+ }
43
+ export type ActiveStateOutput = {
44
+ state?: string;
45
+ kind: "agent";
46
+ output?: {
47
+ assistantText?: string;
48
+ };
49
+ } | {
50
+ state: string;
51
+ kind: "script" | "poll";
52
+ output?: ShellPartialOutput;
53
+ };
54
+ export interface StateMachineControllerConfig {
55
+ /** Default working directory used by script and poll-script states. */
56
+ cwd: string;
57
+ /** Builds a fresh transient state-agent handle for one agent state execution. */
58
+ createStateAgent(input: {
59
+ state: StateMachineAgentState;
60
+ prompt: string;
61
+ }): StateAgentHandle;
62
+ }
63
+ export declare class StateMachineController {
64
+ private readonly config;
65
+ private session?;
66
+ private activeRun?;
67
+ constructor(config: StateMachineControllerConfig);
68
+ hydrate(stateMachine: StateMachineSession | undefined): void;
69
+ getSession(): StateMachineSession | undefined;
70
+ hasActiveWork(): boolean;
71
+ getActiveOutput(): ActiveStateOutput | undefined;
72
+ startSession(input: {
73
+ prompt: string;
74
+ definition: StateMachineDefinition;
75
+ currentState: string;
76
+ }): void;
77
+ interrupt(reason?: string): void;
78
+ runDecision(decision: StateMachineRunnerDecision): Promise<StateMachineExecutionResult>;
79
+ wake(): Promise<StateMachineExecutionResult | undefined>;
80
+ private runAgentState;
81
+ private runScriptState;
82
+ private runPollState;
83
+ private runTimerState;
84
+ private runTerminalState;
85
+ private recordInterruptedState;
86
+ private interruptedOutput;
87
+ private interruptibleStateName;
88
+ private requireSession;
89
+ }
90
+ //# sourceMappingURL=state-machine-controller.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"state-machine-controller.d.ts","sourceRoot":"","sources":["../../../src/turn-runner/state-machine-controller.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,289 @@
1
+ import { INTERRUPTED_STATE_MACHINE_STATE } from "../types/state-machine.js";
2
+ import { currentScheduledState, elapsedSinceStateStarted, findState, recordRunnerDecision, recordStateAskedUser, recordStateCompleted, recordStateFailed, recordStateInterrupted, recordStateMachineCompleted, recordStateStarted, recordStateSleep, createStateMachineSession, } from "./state-machine-session.js";
3
+ import { createShellStateHandle, parseJsonObject, parseStructuredOutput, renderTemplate, ShellCommandError, } from "./shell-state-handle.js";
4
+ import { applyStateOverride } from "./tools.js";
5
+ export class StateMachineController {
6
+ config;
7
+ session;
8
+ activeRun;
9
+ constructor(config) {
10
+ this.config = config;
11
+ }
12
+ hydrate(stateMachine) {
13
+ this.session = stateMachine;
14
+ }
15
+ getSession() {
16
+ return this.session;
17
+ }
18
+ hasActiveWork() {
19
+ return Boolean(this.activeRun);
20
+ }
21
+ getActiveOutput() {
22
+ const run = this.activeRun;
23
+ if (!run)
24
+ return undefined;
25
+ if (run.kind === "agent") {
26
+ const assistantText = run.agent.partialAssistantText();
27
+ return assistantText
28
+ ? { state: run.state, kind: "agent", output: { assistantText } }
29
+ : { state: run.state, kind: "agent" };
30
+ }
31
+ if (run.kind === "script") {
32
+ const output = run.shell.partialOutput();
33
+ return output
34
+ ? { state: run.state, kind: "script", output }
35
+ : { state: run.state, kind: "script" };
36
+ }
37
+ const output = run.shell.partialOutput();
38
+ return output
39
+ ? { state: run.state.name, kind: "poll", output }
40
+ : { state: run.state.name, kind: "poll" };
41
+ }
42
+ startSession(input) {
43
+ this.session = createStateMachineSession(input.prompt, input.definition, input.currentState);
44
+ }
45
+ interrupt(reason = "Interrupted") {
46
+ const run = this.activeRun;
47
+ if (!run)
48
+ return;
49
+ run.interruptedReason = reason;
50
+ const state = this.interruptibleStateName(run);
51
+ if (this.session && state) {
52
+ this.session = recordStateInterrupted(this.session, state, reason, this.interruptedOutput(run));
53
+ }
54
+ if (run.kind === "agent") {
55
+ run.agent.interrupt();
56
+ }
57
+ else {
58
+ run.shell.interrupt();
59
+ }
60
+ }
61
+ async runDecision(decision) {
62
+ if (this.hasActiveWork()) {
63
+ // Selecting a state while work is active is an intentional replacement.
64
+ // The parent can steer state-machine progress by selecting the same state
65
+ // with new input or by selecting a different state; transient work is
66
+ // aborted before the new state starts.
67
+ this.interrupt("Replaced by a newly selected state.");
68
+ }
69
+ const stateMachine = this.requireSession();
70
+ this.session = recordRunnerDecision(stateMachine, decision);
71
+ if (decision.kind === "fail") {
72
+ const state = this.session.currentState ?? "unknown";
73
+ this.session = recordStateFailed(this.session, state, decision.reason);
74
+ return { type: "terminal", status: "failed", error: decision.reason };
75
+ }
76
+ const selectedState = findState(this.session, decision.state);
77
+ if (!selectedState) {
78
+ const validStates = this.session.definition.states.map((state) => state.name);
79
+ const message = `Unknown state: ${decision.state}. Valid states: ${validStates.join(", ")}`;
80
+ this.session = recordStateFailed(this.session, this.session.currentState ?? decision.state, message);
81
+ return { type: "terminal", status: "failed", error: message };
82
+ }
83
+ const effectiveState = decision.kind === "run_state"
84
+ ? applyStateOverride(selectedState, decision.override)
85
+ : selectedState;
86
+ this.session = recordStateStarted(this.session, effectiveState, decision.kind === "run_state" ? decision.input : undefined);
87
+ switch (effectiveState.kind) {
88
+ case "agent":
89
+ return this.runAgentState(effectiveState);
90
+ case "script":
91
+ return this.runScriptState(effectiveState);
92
+ case "poll":
93
+ return this.runPollState(effectiveState);
94
+ case "timer":
95
+ return this.runTimerState(effectiveState);
96
+ case "terminal":
97
+ return this.runTerminalState(effectiveState);
98
+ }
99
+ }
100
+ async wake() {
101
+ const state = currentScheduledState(this.session);
102
+ if (!state)
103
+ return undefined;
104
+ return state.kind === "poll" ? this.runPollState(state) : this.runTimerState(state, true);
105
+ }
106
+ async runAgentState(state) {
107
+ const prompt = renderTemplate(state.prompt, this.session?.currentInput ?? {});
108
+ const agent = this.config.createStateAgent({ state, prompt });
109
+ const run = { kind: "agent", state: state.name, agent };
110
+ this.activeRun = run;
111
+ try {
112
+ const terminal = await agent.prompt();
113
+ if (terminal.type === "ask") {
114
+ this.session = recordStateAskedUser(this.requireSession(), state.name, terminal.questions);
115
+ return { type: "ask", questions: terminal.questions };
116
+ }
117
+ if (terminal.type === "failed") {
118
+ this.session = recordStateFailed(this.requireSession(), state.name, terminal.error);
119
+ return { type: "terminal", status: "failed", error: terminal.error };
120
+ }
121
+ if (terminal.type === "interrupted") {
122
+ if (this.activeRun === run)
123
+ this.recordInterruptedState(run, state.name);
124
+ return { type: "interrupted" };
125
+ }
126
+ const output = { result: terminal.result };
127
+ this.session = recordStateCompleted(this.requireSession(), state.name, output);
128
+ return { type: "state_completed", stateName: state.name, output };
129
+ }
130
+ finally {
131
+ if (this.activeRun === run)
132
+ this.activeRun = undefined;
133
+ }
134
+ }
135
+ async runScriptState(state) {
136
+ const command = renderTemplate(state.command, this.session?.currentInput ?? {});
137
+ const shell = createShellStateHandle({
138
+ command,
139
+ cwd: state.cwd ?? this.config.cwd,
140
+ timeoutMs: state.timeoutMs,
141
+ successCodes: state.successCodes,
142
+ });
143
+ const run = { kind: "script", state: state.name, shell };
144
+ this.activeRun = run;
145
+ try {
146
+ const shellOutput = await shell.run();
147
+ const rawOutput = normalizeStructuredShellOutput(shellOutput);
148
+ this.session = recordStateCompleted(this.requireSession(), state.name, rawOutput);
149
+ return { type: "state_completed", stateName: state.name, output: rawOutput };
150
+ }
151
+ catch (error) {
152
+ if (run.interruptedReason) {
153
+ if (this.activeRun === run)
154
+ this.recordInterruptedState(run, state.name, shellPartialOutput(error));
155
+ return { type: "interrupted" };
156
+ }
157
+ const message = error instanceof Error ? error.message : String(error);
158
+ this.session = recordStateFailed(this.requireSession(), state.name, message);
159
+ return { type: "terminal", status: "failed", error: message };
160
+ }
161
+ finally {
162
+ if (this.activeRun === run)
163
+ this.activeRun = undefined;
164
+ }
165
+ }
166
+ async runPollState(state) {
167
+ const elapsedMs = elapsedSinceStateStarted(this.session, state.name);
168
+ if (state.timeoutMs !== undefined && elapsedMs >= state.timeoutMs) {
169
+ const message = `Poll state "${state.name}" timed out after ${elapsedMs}ms.`;
170
+ this.session = recordStateFailed(this.requireSession(), state.name, message);
171
+ return { type: "terminal", status: "failed", error: message };
172
+ }
173
+ const command = renderTemplate(state.command, this.session?.currentInput ?? {});
174
+ const shell = createShellStateHandle({
175
+ command,
176
+ cwd: state.cwd ?? this.config.cwd,
177
+ successCodes: state.successCodes,
178
+ });
179
+ const run = { kind: "poll", state, shell };
180
+ this.activeRun = run;
181
+ try {
182
+ const shellOutput = await shell.run();
183
+ const output = parseJsonObject(shellOutput.stdout);
184
+ if (Object.keys(output).length === 0) {
185
+ const wakeAt = Date.now() + state.intervalMs;
186
+ this.session = recordStateSleep(this.requireSession(), state, wakeAt);
187
+ return { type: "sleep", wakeAt };
188
+ }
189
+ const rawOutput = normalizePollShellOutput(shellOutput, output);
190
+ this.session = recordStateCompleted(this.requireSession(), state.name, rawOutput);
191
+ return { type: "state_completed", stateName: state.name, output: rawOutput };
192
+ }
193
+ catch (error) {
194
+ if (run.interruptedReason) {
195
+ if (this.activeRun === run)
196
+ this.recordInterruptedState(run, state.name, shellPartialOutput(error));
197
+ return { type: "interrupted" };
198
+ }
199
+ const wakeAt = Date.now() + state.intervalMs;
200
+ this.session = recordStateSleep(this.requireSession(), state, wakeAt);
201
+ return { type: "sleep", wakeAt };
202
+ }
203
+ finally {
204
+ if (this.activeRun === run)
205
+ this.activeRun = undefined;
206
+ }
207
+ }
208
+ runTimerState(state, woke = false) {
209
+ if (!woke && state.wakeAt > Date.now()) {
210
+ this.session = recordStateSleep(this.requireSession(), state, state.wakeAt);
211
+ return { type: "sleep", wakeAt: state.wakeAt };
212
+ }
213
+ const output = {
214
+ elapsedMs: elapsedSinceStateStarted(this.session, state.name),
215
+ timestamp: Date.now(),
216
+ };
217
+ this.session = recordStateCompleted(this.requireSession(), state.name, output);
218
+ return { type: "state_completed", stateName: state.name, output };
219
+ }
220
+ async runTerminalState(state) {
221
+ const terminal = { state: state.name, status: state.status, reason: state.reason };
222
+ this.session = recordStateMachineCompleted(this.requireSession(), terminal);
223
+ return { type: "terminal", status: state.status, result: state.reason };
224
+ }
225
+ recordInterruptedState(run, stateName, output) {
226
+ const session = this.requireSession();
227
+ const last = session.history.at(-1);
228
+ if (session.currentState === INTERRUPTED_STATE_MACHINE_STATE &&
229
+ last?.type === "state_interrupted" &&
230
+ last.state === stateName) {
231
+ this.session = {
232
+ ...session,
233
+ history: [
234
+ ...session.history.slice(0, -1),
235
+ {
236
+ ...last,
237
+ reason: run.interruptedReason ?? last.reason,
238
+ output: output ?? last.output,
239
+ },
240
+ ],
241
+ updatedAt: Date.now(),
242
+ };
243
+ return;
244
+ }
245
+ this.session = recordStateInterrupted(session, stateName, run.interruptedReason ?? "Interrupted", output);
246
+ }
247
+ interruptedOutput(run) {
248
+ if (run.kind === "agent") {
249
+ const assistantText = run.agent.partialAssistantText();
250
+ return assistantText ? { assistantText } : undefined;
251
+ }
252
+ return run.shell.partialOutput();
253
+ }
254
+ interruptibleStateName(run) {
255
+ if (run.kind === "agent")
256
+ return run.state;
257
+ if (run.kind === "script")
258
+ return run.state;
259
+ return run.state.name;
260
+ }
261
+ requireSession() {
262
+ if (!this.session) {
263
+ throw new Error("No state machine is active.");
264
+ }
265
+ return this.session;
266
+ }
267
+ }
268
+ function normalizeStructuredShellOutput(shellOutput) {
269
+ return {
270
+ ...shellOutput,
271
+ stdout: shellOutput.stdout.trim(),
272
+ stderr: shellOutput.stderr.trim(),
273
+ parsed: parseStructuredOutput(shellOutput.stdout),
274
+ };
275
+ }
276
+ function normalizePollShellOutput(shellOutput, parsed) {
277
+ return {
278
+ ...shellOutput,
279
+ stdout: shellOutput.stdout.trim(),
280
+ stderr: shellOutput.stderr.trim(),
281
+ parsed,
282
+ };
283
+ }
284
+ function shellPartialOutput(error) {
285
+ if (!(error instanceof ShellCommandError))
286
+ return undefined;
287
+ return { stdout: error.output.stdout, stderr: error.output.stderr };
288
+ }
289
+ //# sourceMappingURL=state-machine-controller.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"state-machine-controller.js","sourceRoot":"","sources":["../../../src/turn-runner/state-machine-controller.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,27 @@
1
+ import type { StateMachineDefinition, StateMachinePollState, StateMachineSession, StateMachineState, StateMachineTimerState } from "../types/state-machine.js";
2
+ import type { TurnQuestion } from "../types/protocol.js";
3
+ import type { StateMachineRunnerDecision } from "./tools.js";
4
+ export declare function createStateMachineSession(prompt: string, definition: StateMachineDefinition, currentState: string): StateMachineSession;
5
+ export declare function findState(stateMachine: StateMachineSession, name: string): StateMachineState | undefined;
6
+ export type StateMachineScheduledState = StateMachinePollState | StateMachineTimerState;
7
+ export declare function currentScheduledState(stateMachine: StateMachineSession | undefined): StateMachineScheduledState | undefined;
8
+ export declare function isWaitingOnScheduledState(stateMachine: StateMachineSession | undefined): boolean;
9
+ export declare function recordRunnerDecision(stateMachine: StateMachineSession, decision: StateMachineRunnerDecision): StateMachineSession;
10
+ export declare function recordStateStarted(stateMachine: StateMachineSession, state: StateMachineState, input?: Record<string, unknown>): StateMachineSession;
11
+ export declare function recordStateCompleted(stateMachine: StateMachineSession, state: string, output: unknown): StateMachineSession;
12
+ export declare function recordStateSleep(stateMachine: StateMachineSession, state: StateMachineScheduledState, wakeAt: number): StateMachineSession;
13
+ export declare function elapsedSinceStateStarted(stateMachine: StateMachineSession | undefined, state: string): number;
14
+ export declare function recordStateFailed(stateMachine: StateMachineSession, state: string, error: string): StateMachineSession;
15
+ export declare function recordStateInterrupted(stateMachine: StateMachineSession, state: string, reason?: string, output?: {
16
+ assistantText?: string;
17
+ } | {
18
+ stdout: string;
19
+ stderr: string;
20
+ }): StateMachineSession;
21
+ export declare function recordStateAskedUser(stateMachine: StateMachineSession, state: string, questions: TurnQuestion[]): StateMachineSession;
22
+ export declare function recordStateMachineCompleted(stateMachine: StateMachineSession, terminal: {
23
+ state: string;
24
+ status: "completed" | "failed" | "cancelled";
25
+ reason?: string;
26
+ }): StateMachineSession;
27
+ //# sourceMappingURL=state-machine-session.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"state-machine-session.d.ts","sourceRoot":"","sources":["../../../src/turn-runner/state-machine-session.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,sBAAsB,EACtB,qBAAqB,EAErB,mBAAmB,EAEnB,iBAAiB,EACjB,sBAAsB,EACvB,MAAM,2BAA2B,CAAC;AAEnC,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,sBAAsB,CAAC;AACzD,OAAO,KAAK,EAAE,0BAA0B,EAAE,MAAM,YAAY,CAAC;AAE7D,wBAAgB,yBAAyB,CACvC,MAAM,EAAE,MAAM,EACd,UAAU,EAAE,sBAAsB,EAClC,YAAY,EAAE,MAAM,GACnB,mBAAmB,CAUrB;AAED,wBAAgB,SAAS,CACvB,YAAY,EAAE,mBAAmB,EACjC,IAAI,EAAE,MAAM,GACX,iBAAiB,GAAG,SAAS,CAE/B;AAED,MAAM,MAAM,0BAA0B,GAAG,qBAAqB,GAAG,sBAAsB,CAAC;AAExF,wBAAgB,qBAAqB,CACnC,YAAY,EAAE,mBAAmB,GAAG,SAAS,GAC5C,0BAA0B,GAAG,SAAS,CAOxC;AAED,wBAAgB,yBAAyB,CAAC,YAAY,EAAE,mBAAmB,GAAG,SAAS,GAAG,OAAO,CAEhG;AAED,wBAAgB,oBAAoB,CAClC,YAAY,EAAE,mBAAmB,EACjC,QAAQ,EAAE,0BAA0B,GACnC,mBAAmB,CAMrB;AAED,wBAAgB,kBAAkB,CAChC,YAAY,EAAE,mBAAmB,EACjC,KAAK,EAAE,iBAAiB,EACxB,KAAK,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAC9B,mBAAmB,CA8BrB;AAED,wBAAgB,oBAAoB,CAClC,YAAY,EAAE,mBAAmB,EACjC,KAAK,EAAE,MAAM,EACb,MAAM,EAAE,OAAO,GACd,mBAAmB,CAYrB;AAED,wBAAgB,gBAAgB,CAC9B,YAAY,EAAE,mBAAmB,EACjC,KAAK,EAAE,0BAA0B,EACjC,MAAM,EAAE,MAAM,GACb,mBAAmB,CAWrB;AAED,wBAAgB,wBAAwB,CACtC,YAAY,EAAE,mBAAmB,GAAG,SAAS,EAC7C,KAAK,EAAE,MAAM,GACZ,MAAM,CASR;AAED,wBAAgB,iBAAiB,CAC/B,YAAY,EAAE,mBAAmB,EACjC,KAAK,EAAE,MAAM,EACb,KAAK,EAAE,MAAM,GACZ,mBAAmB,CAkBrB;AAED,wBAAgB,sBAAsB,CACpC,YAAY,EAAE,mBAAmB,EACjC,KAAK,EAAE,MAAM,EACb,MAAM,CAAC,EAAE,MAAM,EACf,MAAM,CAAC,EAAE;IAAE,aAAa,CAAC,EAAE,MAAM,CAAA;CAAE,GAAG;IAAE,MAAM,EAAE,MAAM,CAAC;IAAC,MAAM,EAAE,MAAM,CAAA;CAAE,GACvE,mBAAmB,CAuBrB;AAED,wBAAgB,oBAAoB,CAClC,YAAY,EAAE,mBAAmB,EACjC,KAAK,EAAE,MAAM,EACb,SAAS,EAAE,YAAY,EAAE,GACxB,mBAAmB,CAUrB;AAED,wBAAgB,2BAA2B,CACzC,YAAY,EAAE,mBAAmB,EACjC,QAAQ,EAAE;IAAE,KAAK,EAAE,MAAM,CAAC;IAAC,MAAM,EAAE,WAAW,GAAG,QAAQ,GAAG,WAAW,CAAC;IAAC,MAAM,CAAC,EAAE,MAAM,CAAA;CAAE,GACzF,mBAAmB,CAWrB"}