@duetso/agent 0.2.1 → 0.2.3

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 (244) hide show
  1. package/README.md +19 -11
  2. package/dist/package.json +4 -4
  3. package/dist/src/cli/config.d.ts +10 -0
  4. package/dist/src/cli/config.d.ts.map +1 -0
  5. package/dist/src/cli/config.js +24 -0
  6. package/dist/src/cli/config.js.map +1 -0
  7. package/dist/src/cli/help.d.ts.map +1 -1
  8. package/dist/src/cli/help.js +13 -10
  9. package/dist/src/cli/help.js.map +1 -1
  10. package/dist/src/cli/inline-slash.d.ts +2 -1
  11. package/dist/src/cli/inline-slash.d.ts.map +1 -1
  12. package/dist/src/cli/inline-slash.js +14 -5
  13. package/dist/src/cli/inline-slash.js.map +1 -1
  14. package/dist/src/cli/memory-db.d.ts.map +1 -1
  15. package/dist/src/cli/memory-db.js +9 -5
  16. package/dist/src/cli/memory-db.js.map +1 -1
  17. package/dist/src/cli/memory-query.d.ts +1 -1
  18. package/dist/src/cli/model.d.ts +1 -1
  19. package/dist/src/cli/model.d.ts.map +1 -1
  20. package/dist/src/cli/model.js +1 -1
  21. package/dist/src/cli/model.js.map +1 -1
  22. package/dist/src/cli/route.d.ts +84 -0
  23. package/dist/src/cli/route.d.ts.map +1 -0
  24. package/dist/src/cli/route.js +261 -0
  25. package/dist/src/cli/route.js.map +1 -0
  26. package/dist/src/cli/rpc.d.ts +43 -2
  27. package/dist/src/cli/rpc.d.ts.map +1 -1
  28. package/dist/src/cli/rpc.js +176 -23
  29. package/dist/src/cli/rpc.js.map +1 -1
  30. package/dist/src/cli/run.d.ts +8 -1
  31. package/dist/src/cli/run.d.ts.map +1 -1
  32. package/dist/src/cli/run.js +24 -7
  33. package/dist/src/cli/run.js.map +1 -1
  34. package/dist/src/cli/shared.d.ts +4 -3
  35. package/dist/src/cli/shared.d.ts.map +1 -1
  36. package/dist/src/cli/shared.js +3 -4
  37. package/dist/src/cli/shared.js.map +1 -1
  38. package/dist/src/cli/shutdown.d.ts +4 -2
  39. package/dist/src/cli/shutdown.d.ts.map +1 -1
  40. package/dist/src/cli/shutdown.js +4 -2
  41. package/dist/src/cli/shutdown.js.map +1 -1
  42. package/dist/src/cli.d.ts +2 -0
  43. package/dist/src/cli.d.ts.map +1 -1
  44. package/dist/src/cli.js +12 -0
  45. package/dist/src/cli.js.map +1 -1
  46. package/dist/src/core/structured-output.d.ts +2 -0
  47. package/dist/src/core/structured-output.d.ts.map +1 -1
  48. package/dist/src/core/structured-output.js +1 -0
  49. package/dist/src/core/structured-output.js.map +1 -1
  50. package/dist/src/lib/system-reminder.d.ts +14 -0
  51. package/dist/src/lib/system-reminder.d.ts.map +1 -0
  52. package/dist/src/lib/system-reminder.js +53 -0
  53. package/dist/src/lib/system-reminder.js.map +1 -0
  54. package/dist/src/lib/walk-ancestors.d.ts +9 -0
  55. package/dist/src/lib/walk-ancestors.d.ts.map +1 -0
  56. package/dist/src/lib/walk-ancestors.js +28 -0
  57. package/dist/src/lib/walk-ancestors.js.map +1 -0
  58. package/dist/src/memory/observational-prompts.d.ts.map +1 -1
  59. package/dist/src/memory/observational-prompts.js +2 -1
  60. package/dist/src/memory/observational-prompts.js.map +1 -1
  61. package/dist/src/memory/observational.d.ts +31 -4
  62. package/dist/src/memory/observational.d.ts.map +1 -1
  63. package/dist/src/memory/observational.js +43 -4
  64. package/dist/src/memory/observational.js.map +1 -1
  65. package/dist/src/model-resolution/catalog.d.ts +2 -2
  66. package/dist/src/model-resolution/catalog.d.ts.map +1 -1
  67. package/dist/src/model-resolution/catalog.js +61 -33
  68. package/dist/src/model-resolution/catalog.js.map +1 -1
  69. package/dist/src/model-resolution/duet-gateway.d.ts +3 -3
  70. package/dist/src/model-resolution/duet-gateway.d.ts.map +1 -1
  71. package/dist/src/model-resolution/duet-gateway.js +119 -19
  72. package/dist/src/model-resolution/duet-gateway.js.map +1 -1
  73. package/dist/src/model-resolution/model-gateway.d.ts.map +1 -0
  74. package/dist/src/{cli → model-resolution}/model-gateway.js +10 -6
  75. package/dist/src/model-resolution/model-gateway.js.map +1 -0
  76. package/dist/src/model-resolution/resolver.d.ts +11 -4
  77. package/dist/src/model-resolution/resolver.d.ts.map +1 -1
  78. package/dist/src/model-resolution/resolver.js +39 -8
  79. package/dist/src/model-resolution/resolver.js.map +1 -1
  80. package/dist/src/model-routing/advisor-transcript.d.ts +36 -0
  81. package/dist/src/model-routing/advisor-transcript.d.ts.map +1 -0
  82. package/dist/src/model-routing/advisor-transcript.js +103 -0
  83. package/dist/src/model-routing/advisor-transcript.js.map +1 -0
  84. package/dist/src/model-routing/advisor.d.ts +27 -0
  85. package/dist/src/model-routing/advisor.d.ts.map +1 -0
  86. package/dist/src/model-routing/advisor.js +20 -0
  87. package/dist/src/model-routing/advisor.js.map +1 -0
  88. package/dist/src/model-routing/classifier.d.ts +57 -0
  89. package/dist/src/model-routing/classifier.d.ts.map +1 -0
  90. package/dist/src/model-routing/classifier.js +63 -0
  91. package/dist/src/model-routing/classifier.js.map +1 -0
  92. package/dist/src/model-routing/loader.d.ts +48 -0
  93. package/dist/src/model-routing/loader.d.ts.map +1 -0
  94. package/dist/src/model-routing/loader.js +79 -0
  95. package/dist/src/model-routing/loader.js.map +1 -0
  96. package/dist/src/model-routing/prompts.d.ts +22 -0
  97. package/dist/src/model-routing/prompts.d.ts.map +1 -0
  98. package/dist/src/model-routing/prompts.js +87 -0
  99. package/dist/src/model-routing/prompts.js.map +1 -0
  100. package/dist/src/model-routing/resolve.d.ts +40 -0
  101. package/dist/src/model-routing/resolve.d.ts.map +1 -0
  102. package/dist/src/model-routing/resolve.js +76 -0
  103. package/dist/src/model-routing/resolve.js.map +1 -0
  104. package/dist/src/model-routing/router.d.ts +149 -0
  105. package/dist/src/model-routing/router.d.ts.map +1 -0
  106. package/dist/src/model-routing/router.js +235 -0
  107. package/dist/src/model-routing/router.js.map +1 -0
  108. package/dist/src/model-routing/step-triggers.d.ts +27 -0
  109. package/dist/src/model-routing/step-triggers.d.ts.map +1 -0
  110. package/dist/src/model-routing/step-triggers.js +20 -0
  111. package/dist/src/model-routing/step-triggers.js.map +1 -0
  112. package/dist/src/model-routing/table.d.ts +126 -0
  113. package/dist/src/model-routing/table.d.ts.map +1 -0
  114. package/dist/src/model-routing/table.js +351 -0
  115. package/dist/src/model-routing/table.js.map +1 -0
  116. package/dist/src/session/session.d.ts +40 -23
  117. package/dist/src/session/session.d.ts.map +1 -1
  118. package/dist/src/session/session.js +173 -97
  119. package/dist/src/session/session.js.map +1 -1
  120. package/dist/src/tasks/quiescence.d.ts +13 -0
  121. package/dist/src/tasks/quiescence.d.ts.map +1 -0
  122. package/dist/src/tasks/quiescence.js +11 -0
  123. package/dist/src/tasks/quiescence.js.map +1 -0
  124. package/dist/src/tasks/task-manager.d.ts +101 -0
  125. package/dist/src/tasks/task-manager.d.ts.map +1 -0
  126. package/dist/src/tasks/task-manager.js +311 -0
  127. package/dist/src/tasks/task-manager.js.map +1 -0
  128. package/dist/src/tasks/types.d.ts +85 -0
  129. package/dist/src/tasks/types.d.ts.map +1 -0
  130. package/dist/src/tasks/types.js +2 -0
  131. package/dist/src/tasks/types.js.map +1 -0
  132. package/dist/src/train/archive.d.ts +3 -0
  133. package/dist/src/train/archive.d.ts.map +1 -1
  134. package/dist/src/train/archive.js +7 -3
  135. package/dist/src/train/archive.js.map +1 -1
  136. package/dist/src/train/types.d.ts +7 -2
  137. package/dist/src/train/types.d.ts.map +1 -1
  138. package/dist/src/tui/app.d.ts +1 -1
  139. package/dist/src/tui/app.d.ts.map +1 -1
  140. package/dist/src/tui/app.js +12 -2
  141. package/dist/src/tui/app.js.map +1 -1
  142. package/dist/src/tui/initial-prompt.d.ts.map +1 -1
  143. package/dist/src/tui/initial-prompt.js +0 -3
  144. package/dist/src/tui/initial-prompt.js.map +1 -1
  145. package/dist/src/tui/session-subscription.d.ts +3 -0
  146. package/dist/src/tui/session-subscription.d.ts.map +1 -1
  147. package/dist/src/tui/session-subscription.js +29 -5
  148. package/dist/src/tui/session-subscription.js.map +1 -1
  149. package/dist/src/tui/sidebar.d.ts +3 -0
  150. package/dist/src/tui/sidebar.d.ts.map +1 -1
  151. package/dist/src/tui/sidebar.js +19 -3
  152. package/dist/src/tui/sidebar.js.map +1 -1
  153. package/dist/src/tui/slash-commands.d.ts +12 -9
  154. package/dist/src/tui/slash-commands.d.ts.map +1 -1
  155. package/dist/src/tui/slash-commands.js +48 -10
  156. package/dist/src/tui/slash-commands.js.map +1 -1
  157. package/dist/src/tui/status-controller.d.ts +14 -9
  158. package/dist/src/tui/status-controller.d.ts.map +1 -1
  159. package/dist/src/tui/status-controller.js +26 -7
  160. package/dist/src/tui/status-controller.js.map +1 -1
  161. package/dist/src/tui/task-lane-renderer.d.ts +30 -0
  162. package/dist/src/tui/task-lane-renderer.d.ts.map +1 -0
  163. package/dist/src/tui/task-lane-renderer.js +93 -0
  164. package/dist/src/tui/task-lane-renderer.js.map +1 -0
  165. package/dist/src/tui/task-tree.d.ts +47 -0
  166. package/dist/src/tui/task-tree.d.ts.map +1 -0
  167. package/dist/src/tui/task-tree.js +190 -0
  168. package/dist/src/tui/task-tree.js.map +1 -0
  169. package/dist/src/tui/tool-formatters.js +3 -0
  170. package/dist/src/tui/tool-formatters.js.map +1 -1
  171. package/dist/src/turn-runner/agent-events.d.ts.map +1 -1
  172. package/dist/src/turn-runner/agent-events.js +1 -0
  173. package/dist/src/turn-runner/agent-events.js.map +1 -1
  174. package/dist/src/turn-runner/duration.d.ts +2 -2
  175. package/dist/src/turn-runner/duration.js +3 -3
  176. package/dist/src/turn-runner/duration.js.map +1 -1
  177. package/dist/src/turn-runner/prompts.d.ts +5 -1
  178. package/dist/src/turn-runner/prompts.d.ts.map +1 -1
  179. package/dist/src/turn-runner/prompts.js +30 -6
  180. package/dist/src/turn-runner/prompts.js.map +1 -1
  181. package/dist/src/turn-runner/runtime-clock.d.ts +20 -0
  182. package/dist/src/turn-runner/runtime-clock.d.ts.map +1 -0
  183. package/dist/src/turn-runner/runtime-clock.js +38 -0
  184. package/dist/src/turn-runner/runtime-clock.js.map +1 -0
  185. package/dist/src/turn-runner/shell-state-handle.d.ts +0 -3
  186. package/dist/src/turn-runner/shell-state-handle.d.ts.map +1 -1
  187. package/dist/src/turn-runner/shell-state-handle.js +5 -55
  188. package/dist/src/turn-runner/shell-state-handle.js.map +1 -1
  189. package/dist/src/turn-runner/skill-context.d.ts +6 -7
  190. package/dist/src/turn-runner/skill-context.d.ts.map +1 -1
  191. package/dist/src/turn-runner/skill-context.js +10 -10
  192. package/dist/src/turn-runner/skill-context.js.map +1 -1
  193. package/dist/src/turn-runner/skills.d.ts.map +1 -1
  194. package/dist/src/turn-runner/skills.js +2 -22
  195. package/dist/src/turn-runner/skills.js.map +1 -1
  196. package/dist/src/turn-runner/state-compaction.d.ts +7 -5
  197. package/dist/src/turn-runner/state-compaction.d.ts.map +1 -1
  198. package/dist/src/turn-runner/state-compaction.js +69 -10
  199. package/dist/src/turn-runner/state-compaction.js.map +1 -1
  200. package/dist/src/turn-runner/state-machine-decisions.d.ts +135 -0
  201. package/dist/src/turn-runner/state-machine-decisions.d.ts.map +1 -0
  202. package/dist/src/turn-runner/state-machine-decisions.js +443 -0
  203. package/dist/src/turn-runner/state-machine-decisions.js.map +1 -0
  204. package/dist/src/turn-runner/state-machine-session.d.ts +13 -28
  205. package/dist/src/turn-runner/state-machine-session.d.ts.map +1 -1
  206. package/dist/src/turn-runner/state-machine-session.js +18 -55
  207. package/dist/src/turn-runner/state-machine-session.js.map +1 -1
  208. package/dist/src/turn-runner/subagent.d.ts +156 -0
  209. package/dist/src/turn-runner/subagent.d.ts.map +1 -0
  210. package/dist/src/turn-runner/subagent.js +164 -0
  211. package/dist/src/turn-runner/subagent.js.map +1 -0
  212. package/dist/src/turn-runner/task-tools.d.ts +76 -0
  213. package/dist/src/turn-runner/task-tools.d.ts.map +1 -0
  214. package/dist/src/turn-runner/task-tools.js +370 -0
  215. package/dist/src/turn-runner/task-tools.js.map +1 -0
  216. package/dist/src/turn-runner/tools.d.ts +65 -17
  217. package/dist/src/turn-runner/tools.d.ts.map +1 -1
  218. package/dist/src/turn-runner/tools.js +173 -59
  219. package/dist/src/turn-runner/tools.js.map +1 -1
  220. package/dist/src/turn-runner/turn-runner.d.ts +198 -134
  221. package/dist/src/turn-runner/turn-runner.d.ts.map +1 -1
  222. package/dist/src/turn-runner/turn-runner.js +1302 -713
  223. package/dist/src/turn-runner/turn-runner.js.map +1 -1
  224. package/dist/src/turn-runner/usage-accounting.d.ts +4 -0
  225. package/dist/src/turn-runner/usage-accounting.d.ts.map +1 -1
  226. package/dist/src/turn-runner/usage-accounting.js +19 -0
  227. package/dist/src/turn-runner/usage-accounting.js.map +1 -1
  228. package/dist/src/types/config.d.ts +9 -1
  229. package/dist/src/types/config.d.ts.map +1 -1
  230. package/dist/src/types/config.js +2 -1
  231. package/dist/src/types/config.js.map +1 -1
  232. package/dist/src/types/protocol.d.ts +110 -30
  233. package/dist/src/types/protocol.d.ts.map +1 -1
  234. package/dist/src/types/state-machine.d.ts +10 -12
  235. package/dist/src/types/state-machine.d.ts.map +1 -1
  236. package/dist/src/types/state-machine.js.map +1 -1
  237. package/package.json +4 -4
  238. package/dist/src/cli/model-gateway.d.ts.map +0 -1
  239. package/dist/src/cli/model-gateway.js.map +0 -1
  240. package/dist/src/turn-runner/state-machine-controller.d.ts +0 -140
  241. package/dist/src/turn-runner/state-machine-controller.d.ts.map +0 -1
  242. package/dist/src/turn-runner/state-machine-controller.js +0 -501
  243. package/dist/src/turn-runner/state-machine-controller.js.map +0 -1
  244. /package/dist/src/{cli → model-resolution}/model-gateway.d.ts +0 -0
@@ -0,0 +1,101 @@
1
+ import type { RuntimeClock } from "../turn-runner/runtime-clock.js";
2
+ import { type PendingWork } from "./quiescence.js";
3
+ import type { ScopeId, TaskDescriptor, TaskEvent, TaskId, TaskSettlement, TaskSnapshot, TaskStopReason } from "./types.js";
4
+ /** Runtime hooks available to an in-process task executor. */
5
+ export interface TaskExecutionContext {
6
+ /** Stable identity allocated before this executor starts. */
7
+ taskId: TaskId;
8
+ /** Aborted exactly once by task_stop, interrupt, or scope closure. */
9
+ signal: AbortSignal;
10
+ /** Append an ordered chunk to the task's retained output. */
11
+ onOutput(chunk: string): void;
12
+ /** Read the caller's reason when classifying an abort outcome. */
13
+ stopReason(): TaskStopReason | undefined;
14
+ }
15
+ interface TaskOwnership {
16
+ /** Scope that owns the task and is responsible for closing it. */
17
+ ownerScopeId: ScopeId;
18
+ /** Parent of a newly encountered scope; omitted only for a root scope. */
19
+ parentScopeId?: ScopeId;
20
+ }
21
+ /** Specification for work that begins executing immediately. */
22
+ export interface InProcessTaskSpec<T = unknown> extends TaskOwnership {
23
+ /** Selects the executor family for listings and downstream presentation. */
24
+ kind: "tool" | "subagent";
25
+ /** Stable machine-facing name for the operation. */
26
+ name: string;
27
+ /** Human-facing description of this invocation. */
28
+ label: string;
29
+ /** Run the task; rejection is observed and converted into a failed settlement. */
30
+ execute(context: TaskExecutionContext): Promise<T>;
31
+ }
32
+ /** Specification for durable wall-clock work with no in-process executor. */
33
+ export interface ScheduledTaskSpec extends TaskOwnership {
34
+ /** Marks the task as durable wall-clock work rather than an active process. */
35
+ kind: "scheduled";
36
+ /** Stable machine-facing name for the scheduled operation. */
37
+ name: string;
38
+ /** Human-facing description of what will resume. */
39
+ label: string;
40
+ /** Unix-epoch timestamp used by the quiescence decider. */
41
+ wakeAt: number;
42
+ }
43
+ export type TaskSpec<T = unknown> = InProcessTaskSpec<T> | ScheduledTaskSpec;
44
+ /** Opaque start result used to race only the task selected for foreground delivery. */
45
+ export interface TaskHandle {
46
+ readonly id: TaskId;
47
+ }
48
+ export type ForegroundRaceResult = {
49
+ kind: "settled";
50
+ settlement: TaskSettlement;
51
+ } | {
52
+ kind: "still_running";
53
+ task: TaskSnapshot;
54
+ };
55
+ export type TaskReaper = (reason: TaskStopReason) => void | Promise<void>;
56
+ export interface TaskManagerOptions {
57
+ /** Injected owner of time and timers, allowing lifecycle races without real sleeps. */
58
+ clock: RuntimeClock;
59
+ /** Receives ordered lifecycle changes without owning settlement delivery. */
60
+ onEvent?: (event: TaskEvent) => void;
61
+ }
62
+ export interface RecoverResult {
63
+ /** Previously running tasks that cannot exist in this process and were marked lost. */
64
+ lost: readonly TaskDescriptor[];
65
+ }
66
+ export interface TaskManager {
67
+ /** Register a child scope before work begins so depth is rejected at the executor boundary. */
68
+ openScope(scopeId: ScopeId, parentScopeId?: ScopeId): void;
69
+ /** Allocate an id and either spawn in-process work or record a schedule. */
70
+ start<T>(spec: TaskSpec<T>): TaskHandle;
71
+ /** Wait through a foreground budget without aborting on expiry. */
72
+ raceForeground(handle: TaskHandle, budgetMs: number): Promise<ForegroundRaceResult>;
73
+ /** Return descriptor copies, optionally restricted to their exact owner scope. */
74
+ list(scopeId?: string): readonly TaskDescriptor[];
75
+ /** Inspect retained output and terminal values without consuming settlement delivery. */
76
+ output(id: TaskId): TaskSnapshot | undefined;
77
+ /** Observe a task or the next task settling, optionally bounded by a clock-driven wait. */
78
+ waitForSettlement(id?: TaskId, waitMs?: number): Promise<TaskSnapshot | undefined>;
79
+ /** Pull the oldest undelivered settlement; this is the only consuming operation. */
80
+ nextSettled(): TaskSettlement | undefined;
81
+ /** Abort a task once and resolve only after its executor has fully unwound. */
82
+ stop(id: TaskId, reason: TaskStopReason): Promise<TaskSnapshot | undefined>;
83
+ /** Stop descendant scopes before directly owned tasks and await every unwind. */
84
+ closeScope(scopeId: ScopeId, reason: TaskStopReason): Promise<void>;
85
+ /** Abort all active and scheduled work, reap processes, and await full unwind. */
86
+ interruptAll(reason: TaskStopReason): Promise<void>;
87
+ /** Compute the current quiescence posture from task descriptors. */
88
+ pendingWork(): PendingWork;
89
+ /** Hydrate descriptors, converting process-bound running work to lost settlements. */
90
+ recover(descriptors: readonly TaskDescriptor[], nextTaskId?: number, outputTails?: Readonly<Partial<Record<TaskId, readonly string[]>>>): RecoverResult;
91
+ /** Return the numeric suffix that the next start() call will allocate. */
92
+ nextTaskId(): number;
93
+ /** Register process cleanup to run once at the next reap boundary. */
94
+ registerReaper(reaper: TaskReaper): () => void;
95
+ /** Invoke and drain all currently registered process cleanup callbacks. */
96
+ reapAll(reason: TaskStopReason): Promise<void>;
97
+ }
98
+ /** Create the single owner of task lifecycle and settlement delivery. */
99
+ export declare function createTaskManager(options: TaskManagerOptions): TaskManager;
100
+ export {};
101
+ //# sourceMappingURL=task-manager.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"task-manager.d.ts","sourceRoot":"","sources":["../../../src/tasks/task-manager.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,311 @@
1
+ import { computePendingWork } from "./quiescence.js";
2
+ const MAX_SCOPE_DEPTH = 2;
3
+ /** Create the single owner of task lifecycle and settlement delivery. */
4
+ export function createTaskManager(options) {
5
+ const records = new Map();
6
+ const scopes = new Map();
7
+ const settlements = [];
8
+ const settlementWaiters = new Set();
9
+ const reapers = new Set();
10
+ let nextTaskNumber = 1;
11
+ const copyDescriptor = (descriptor) => ({ ...descriptor });
12
+ const snapshot = (record) => ({
13
+ descriptor: copyDescriptor(record.descriptor),
14
+ output: [...record.output],
15
+ ...(record.settlement ? { settlement: record.settlement } : {}),
16
+ });
17
+ const emit = (event) => options.onEvent?.(event);
18
+ const registerScope = (ownerScopeId, parentScopeId) => {
19
+ const existing = scopes.get(ownerScopeId);
20
+ if (existing) {
21
+ if (existing.parentScopeId !== parentScopeId && parentScopeId !== undefined) {
22
+ throw new Error(`Scope ${ownerScopeId} already has a different parent`);
23
+ }
24
+ if (existing.closed)
25
+ throw new Error(`Scope ${ownerScopeId} is closed`);
26
+ return existing;
27
+ }
28
+ let depth = 0;
29
+ if (parentScopeId !== undefined) {
30
+ const parent = scopes.get(parentScopeId);
31
+ if (!parent)
32
+ throw new Error(`Parent scope ${parentScopeId} must be registered first`);
33
+ if (parent.closed)
34
+ throw new Error(`Parent scope ${parentScopeId} is closed`);
35
+ depth = parent.depth + 1;
36
+ }
37
+ if (depth > MAX_SCOPE_DEPTH) {
38
+ throw new RangeError(`Task scope depth ${depth} exceeds maximum ${MAX_SCOPE_DEPTH}`);
39
+ }
40
+ const scope = {
41
+ id: ownerScopeId,
42
+ ...(parentScopeId === undefined ? {} : { parentScopeId }),
43
+ depth,
44
+ closed: false,
45
+ };
46
+ scopes.set(ownerScopeId, scope);
47
+ return scope;
48
+ };
49
+ const createRecord = (descriptor, abortController) => {
50
+ let resolveFinished;
51
+ const finished = new Promise((resolve) => {
52
+ resolveFinished = resolve;
53
+ });
54
+ return {
55
+ descriptor,
56
+ output: [],
57
+ ...(abortController ? { abortController } : {}),
58
+ finished,
59
+ resolveFinished,
60
+ };
61
+ };
62
+ const settle = (record, settlement) => {
63
+ if (record.settlement)
64
+ return record.settlement;
65
+ record.settlement = settlement;
66
+ record.descriptor = { ...record.descriptor, status: settlement.status };
67
+ settlements.push(settlement);
68
+ record.resolveFinished(settlement);
69
+ emit({ type: "settled", settlement });
70
+ for (const notify of settlementWaiters)
71
+ notify(settlement);
72
+ return settlement;
73
+ };
74
+ const manager = {
75
+ openScope(scopeId, parentScopeId) {
76
+ registerScope(scopeId, parentScopeId);
77
+ },
78
+ start(spec) {
79
+ if (spec.kind === "scheduled" && !Number.isFinite(spec.wakeAt)) {
80
+ throw new RangeError("wakeAt must be a finite Unix-epoch timestamp");
81
+ }
82
+ registerScope(spec.ownerScopeId, spec.parentScopeId);
83
+ const id = `t${nextTaskNumber++}`;
84
+ const descriptor = {
85
+ id,
86
+ kind: spec.kind,
87
+ name: spec.name,
88
+ label: spec.label,
89
+ ownerScopeId: spec.ownerScopeId,
90
+ status: spec.kind === "scheduled" ? "scheduled" : "running",
91
+ startedAt: options.clock.now(),
92
+ ...(spec.kind === "scheduled" ? { wakeAt: spec.wakeAt } : {}),
93
+ };
94
+ if (spec.kind === "scheduled") {
95
+ const record = createRecord(descriptor);
96
+ records.set(id, record);
97
+ emit({ type: "started", descriptor: copyDescriptor(descriptor) });
98
+ return { id };
99
+ }
100
+ const abortController = new AbortController();
101
+ const record = createRecord(descriptor, abortController);
102
+ records.set(id, record);
103
+ emit({ type: "started", descriptor: copyDescriptor(descriptor) });
104
+ const execution = Promise.resolve().then(() => spec.execute({
105
+ taskId: id,
106
+ signal: abortController.signal,
107
+ onOutput(chunk) {
108
+ if (record.settlement)
109
+ return;
110
+ record.output.push(chunk);
111
+ emit({ type: "output", id, chunk });
112
+ },
113
+ stopReason: () => record.stopReason,
114
+ }));
115
+ // Attach both branches synchronously: executor rejection is always observed at spawn.
116
+ void execution.then((result) => {
117
+ if (record.stopReason !== undefined) {
118
+ settle(record, {
119
+ id,
120
+ status: "stopped",
121
+ settledAt: options.clock.now(),
122
+ reason: record.stopReason,
123
+ });
124
+ return;
125
+ }
126
+ settle(record, { id, status: "completed", settledAt: options.clock.now(), result });
127
+ }, (error) => {
128
+ if (record.stopReason !== undefined) {
129
+ settle(record, {
130
+ id,
131
+ status: "stopped",
132
+ settledAt: options.clock.now(),
133
+ reason: record.stopReason,
134
+ });
135
+ return;
136
+ }
137
+ settle(record, { id, status: "failed", settledAt: options.clock.now(), error });
138
+ });
139
+ return { id };
140
+ },
141
+ async raceForeground(handle, budgetMs) {
142
+ if (!Number.isFinite(budgetMs) || budgetMs < 0) {
143
+ throw new RangeError("budgetMs must be a finite non-negative number");
144
+ }
145
+ const record = records.get(handle.id);
146
+ if (!record)
147
+ throw new Error(`Unknown task ${handle.id}`);
148
+ if (record.settlement)
149
+ return { kind: "settled", settlement: record.settlement };
150
+ let cancelBudget = () => undefined;
151
+ const budgetElapsed = new Promise((resolve) => {
152
+ cancelBudget = options.clock.schedule(resolve, budgetMs);
153
+ });
154
+ await Promise.race([record.finished, budgetElapsed]);
155
+ cancelBudget();
156
+ // A completion queued at the exact deadline wins the photo finish.
157
+ await Promise.resolve();
158
+ if (record.settlement)
159
+ return { kind: "settled", settlement: record.settlement };
160
+ return { kind: "still_running", task: snapshot(record) };
161
+ },
162
+ list(scopeId) {
163
+ return [...records.values()]
164
+ .filter((record) => scopeId === undefined || record.descriptor.ownerScopeId === scopeId)
165
+ .map((record) => copyDescriptor(record.descriptor));
166
+ },
167
+ output(id) {
168
+ const record = records.get(id);
169
+ return record ? snapshot(record) : undefined;
170
+ },
171
+ async waitForSettlement(id, waitMs) {
172
+ if (waitMs !== undefined && (!Number.isFinite(waitMs) || waitMs < 0)) {
173
+ throw new RangeError("waitMs must be a finite non-negative number");
174
+ }
175
+ const record = id === undefined ? undefined : records.get(id);
176
+ if (id !== undefined && !record)
177
+ return undefined;
178
+ if (record?.settlement)
179
+ return snapshot(record);
180
+ if (id === undefined && settlements.length > 0) {
181
+ return snapshot(records.get(settlements[0].id));
182
+ }
183
+ const notify = (settlement) => {
184
+ if (id === undefined || settlement.id === id) {
185
+ settlementWaiters.delete(notify);
186
+ resolveObserved(settlement);
187
+ }
188
+ };
189
+ let resolveObserved;
190
+ const observed = new Promise((resolve) => {
191
+ resolveObserved = resolve;
192
+ settlementWaiters.add(notify);
193
+ });
194
+ if (waitMs === undefined) {
195
+ const settlement = await observed;
196
+ return snapshot(records.get(settlement.id));
197
+ }
198
+ let cancelWait = () => undefined;
199
+ const elapsed = new Promise((resolve) => {
200
+ cancelWait = options.clock.schedule(() => resolve(undefined), waitMs);
201
+ });
202
+ const settlement = await Promise.race([observed, elapsed]);
203
+ cancelWait();
204
+ settlementWaiters.delete(notify);
205
+ return settlement ? snapshot(records.get(settlement.id)) : undefined;
206
+ },
207
+ nextSettled() {
208
+ return settlements.shift();
209
+ },
210
+ async stop(id, reason) {
211
+ const record = records.get(id);
212
+ if (!record)
213
+ return undefined;
214
+ if (record.settlement || isTerminal(record.descriptor))
215
+ return snapshot(record);
216
+ record.stopReason ??= reason;
217
+ if (record.abortController) {
218
+ record.abortController.abort(reason);
219
+ await record.finished;
220
+ }
221
+ else {
222
+ settle(record, { id, status: "stopped", settledAt: options.clock.now(), reason });
223
+ }
224
+ return snapshot(record);
225
+ },
226
+ async closeScope(scopeId, reason) {
227
+ const scope = scopes.get(scopeId);
228
+ if (!scope || scope.closed)
229
+ return;
230
+ const descendants = [...scopes.values()]
231
+ .filter((candidate) => isDescendantOf(candidate, scopeId, scopes))
232
+ .sort((left, right) => right.depth - left.depth);
233
+ for (const descendant of descendants) {
234
+ const owned = [...records.values()].filter((record) => record.descriptor.ownerScopeId === descendant.id && !isTerminal(record.descriptor));
235
+ await Promise.all(owned.map((record) => manager.stop(record.descriptor.id, reason)));
236
+ descendant.closed = true;
237
+ }
238
+ const directlyOwned = [...records.values()].filter((record) => record.descriptor.ownerScopeId === scopeId && !isTerminal(record.descriptor));
239
+ await Promise.all(directlyOwned.map((record) => manager.stop(record.descriptor.id, reason)));
240
+ scope.closed = true;
241
+ },
242
+ async interruptAll(reason) {
243
+ const pending = [...records.values()].filter((record) => !isTerminal(record.descriptor));
244
+ const barriers = pending.map((record) => manager.stop(record.descriptor.id, reason));
245
+ await manager.reapAll(reason);
246
+ await Promise.all(barriers);
247
+ },
248
+ pendingWork() {
249
+ return computePendingWork(manager.list());
250
+ },
251
+ recover(descriptors, persistedNextTaskId, outputTails) {
252
+ const lost = [];
253
+ for (const source of descriptors) {
254
+ if (records.has(source.id))
255
+ throw new Error(`Duplicate recovered task ${source.id}`);
256
+ const match = /^t(\d+)$/.exec(source.id);
257
+ if (!match)
258
+ throw new Error(`Invalid task id ${source.id}`);
259
+ nextTaskNumber = Math.max(nextTaskNumber, Number(match[1]) + 1);
260
+ registerScope(source.ownerScopeId);
261
+ const descriptor = copyDescriptor(source);
262
+ const record = createRecord(descriptor);
263
+ record.output.push(...(outputTails?.[descriptor.id] ?? []));
264
+ records.set(descriptor.id, record);
265
+ if (descriptor.status === "running" ||
266
+ (descriptor.status === "scheduled" && !Number.isFinite(descriptor.wakeAt))) {
267
+ descriptor.status = "lost";
268
+ lost.push(copyDescriptor(descriptor));
269
+ settle(record, {
270
+ id: descriptor.id,
271
+ status: "lost",
272
+ settledAt: options.clock.now(),
273
+ });
274
+ }
275
+ }
276
+ if (persistedNextTaskId !== undefined) {
277
+ if (!Number.isInteger(persistedNextTaskId) || persistedNextTaskId < 1) {
278
+ throw new RangeError("nextTaskId must be a positive integer");
279
+ }
280
+ nextTaskNumber = Math.max(nextTaskNumber, persistedNextTaskId);
281
+ }
282
+ return { lost };
283
+ },
284
+ nextTaskId() {
285
+ return nextTaskNumber;
286
+ },
287
+ registerReaper(reaper) {
288
+ reapers.add(reaper);
289
+ return () => reapers.delete(reaper);
290
+ },
291
+ async reapAll(reason) {
292
+ const active = [...reapers];
293
+ reapers.clear();
294
+ await Promise.all(active.map((reaper) => reaper(reason)));
295
+ },
296
+ };
297
+ return manager;
298
+ }
299
+ function isDescendantOf(candidate, ancestorId, scopes) {
300
+ let parentScopeId = candidate.parentScopeId;
301
+ while (parentScopeId !== undefined) {
302
+ if (parentScopeId === ancestorId)
303
+ return true;
304
+ parentScopeId = scopes.get(parentScopeId)?.parentScopeId;
305
+ }
306
+ return false;
307
+ }
308
+ function isTerminal(descriptor) {
309
+ return !["running", "scheduled"].includes(descriptor.status);
310
+ }
311
+ //# sourceMappingURL=task-manager.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"task-manager.js","sourceRoot":"","sources":["../../../src/tasks/task-manager.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,85 @@
1
+ /** Stable task identity allocated monotonically within a TaskManager. */
2
+ export type TaskId = `t${number}`;
3
+ /** The execution surface responsible for a task. */
4
+ export type TaskKind = "tool" | "subagent" | "scheduled";
5
+ /**
6
+ * Structured-concurrency owner: the turn's root scope or a spawned subagent's
7
+ * child scope. Typed so a stray free-form id can't silently opt out of the
8
+ * cascade tree.
9
+ */
10
+ export type ScopeId = `turn-${number}` | `task:${TaskId}`;
11
+ /**
12
+ * Durable lifecycle state.
13
+ *
14
+ * `running` means an in-process executor still holds the turn open and the
15
+ * process must remain awake. `scheduled` is durable wall-clock work: it does
16
+ * not keep the process awake and resumes at `wakeAt`. All other statuses are
17
+ * terminal. `stopped` records an explicit task_stop, interrupt, or scope-close
18
+ * request; `lost` records work that was still running in a previous process
19
+ * and therefore cannot be resumed after hydration.
20
+ */
21
+ export type TaskStatus = "running" | "scheduled" | "completed" | "failed" | "stopped" | "lost";
22
+ /** Caller-supplied explanation used by executors to classify an abort. */
23
+ export type TaskStopReason = string;
24
+ /** The serializable task shape shared by runtime, persistence, protocol, and UI code. */
25
+ export interface TaskDescriptor {
26
+ /** Monotonic identity generated by the manager, including across recovery. */
27
+ id: TaskId;
28
+ /** Selects whether the task is in-process work or a durable scheduled wait. */
29
+ kind: TaskKind;
30
+ /** Stable machine-facing name for logs and task listings. */
31
+ name: string;
32
+ /** Human-facing text describing the concrete work in progress. */
33
+ label: string;
34
+ /** Scope whose closure owns and cascade-stops this task. */
35
+ ownerScopeId: ScopeId;
36
+ /** Current lifecycle state; terminal states never transition again. */
37
+ status: TaskStatus;
38
+ /** Unix-epoch timestamp recorded when the task was created. */
39
+ startedAt: number;
40
+ /** Unix-epoch wake time, present only for scheduled tasks. */
41
+ wakeAt?: number;
42
+ }
43
+ /** A terminal value emitted exactly once and queued by settlement time. */
44
+ export type TaskSettlement = {
45
+ id: TaskId;
46
+ status: "completed";
47
+ settledAt: number;
48
+ result: unknown;
49
+ } | {
50
+ id: TaskId;
51
+ status: "failed";
52
+ settledAt: number;
53
+ error: unknown;
54
+ } | {
55
+ id: TaskId;
56
+ status: "stopped";
57
+ settledAt: number;
58
+ reason: TaskStopReason;
59
+ } | {
60
+ id: TaskId;
61
+ status: "lost";
62
+ settledAt: number;
63
+ };
64
+ /** Observable task state, including buffered values rather than derived counts. */
65
+ export interface TaskSnapshot {
66
+ /** Copy of the durable descriptor at the time of inspection. */
67
+ descriptor: TaskDescriptor;
68
+ /** Ordered output chunks retained for later task_output inspection. */
69
+ output: readonly string[];
70
+ /** Terminal value once the task has settled. */
71
+ settlement?: TaskSettlement;
72
+ }
73
+ /** Events emitted synchronously after each externally observable task change. */
74
+ export type TaskEvent = {
75
+ type: "started";
76
+ descriptor: TaskDescriptor;
77
+ } | {
78
+ type: "output";
79
+ id: TaskId;
80
+ chunk: string;
81
+ } | {
82
+ type: "settled";
83
+ settlement: TaskSettlement;
84
+ };
85
+ //# sourceMappingURL=types.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../src/tasks/types.ts"],"names":[],"mappings":"AAAA,yEAAyE;AACzE,MAAM,MAAM,MAAM,GAAG,IAAI,MAAM,EAAE,CAAC;AAElC,oDAAoD;AACpD,MAAM,MAAM,QAAQ,GAAG,MAAM,GAAG,UAAU,GAAG,WAAW,CAAC;AAEzD;;;;GAIG;AACH,MAAM,MAAM,OAAO,GAAG,QAAQ,MAAM,EAAE,GAAG,QAAQ,MAAM,EAAE,CAAC;AAE1D;;;;;;;;;GASG;AACH,MAAM,MAAM,UAAU,GAAG,SAAS,GAAG,WAAW,GAAG,WAAW,GAAG,QAAQ,GAAG,SAAS,GAAG,MAAM,CAAC;AAE/F,0EAA0E;AAC1E,MAAM,MAAM,cAAc,GAAG,MAAM,CAAC;AAEpC,yFAAyF;AACzF,MAAM,WAAW,cAAc;IAC7B,8EAA8E;IAC9E,EAAE,EAAE,MAAM,CAAC;IACX,+EAA+E;IAC/E,IAAI,EAAE,QAAQ,CAAC;IACf,6DAA6D;IAC7D,IAAI,EAAE,MAAM,CAAC;IACb,kEAAkE;IAClE,KAAK,EAAE,MAAM,CAAC;IACd,4DAA4D;IAC5D,YAAY,EAAE,OAAO,CAAC;IACtB,uEAAuE;IACvE,MAAM,EAAE,UAAU,CAAC;IACnB,+DAA+D;IAC/D,SAAS,EAAE,MAAM,CAAC;IAClB,8DAA8D;IAC9D,MAAM,CAAC,EAAE,MAAM,CAAC;CACjB;AAED,2EAA2E;AAC3E,MAAM,MAAM,cAAc,GACtB;IAAE,EAAE,EAAE,MAAM,CAAC;IAAC,MAAM,EAAE,WAAW,CAAC;IAAC,SAAS,EAAE,MAAM,CAAC;IAAC,MAAM,EAAE,OAAO,CAAA;CAAE,GACvE;IAAE,EAAE,EAAE,MAAM,CAAC;IAAC,MAAM,EAAE,QAAQ,CAAC;IAAC,SAAS,EAAE,MAAM,CAAC;IAAC,KAAK,EAAE,OAAO,CAAA;CAAE,GACnE;IAAE,EAAE,EAAE,MAAM,CAAC;IAAC,MAAM,EAAE,SAAS,CAAC;IAAC,SAAS,EAAE,MAAM,CAAC;IAAC,MAAM,EAAE,cAAc,CAAA;CAAE,GAC5E;IAAE,EAAE,EAAE,MAAM,CAAC;IAAC,MAAM,EAAE,MAAM,CAAC;IAAC,SAAS,EAAE,MAAM,CAAA;CAAE,CAAC;AAEtD,mFAAmF;AACnF,MAAM,WAAW,YAAY;IAC3B,gEAAgE;IAChE,UAAU,EAAE,cAAc,CAAC;IAC3B,uEAAuE;IACvE,MAAM,EAAE,SAAS,MAAM,EAAE,CAAC;IAC1B,gDAAgD;IAChD,UAAU,CAAC,EAAE,cAAc,CAAC;CAC7B;AAED,iFAAiF;AACjF,MAAM,MAAM,SAAS,GACjB;IAAE,IAAI,EAAE,SAAS,CAAC;IAAC,UAAU,EAAE,cAAc,CAAA;CAAE,GAC/C;IAAE,IAAI,EAAE,QAAQ,CAAC;IAAC,EAAE,EAAE,MAAM,CAAC;IAAC,KAAK,EAAE,MAAM,CAAA;CAAE,GAC7C;IAAE,IAAI,EAAE,SAAS,CAAC;IAAC,UAAU,EAAE,cAAc,CAAA;CAAE,CAAC"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=types.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.js","sourceRoot":"","sources":["../../../src/tasks/types.ts"],"names":[],"mappings":""}
@@ -10,6 +10,9 @@ export interface WriteArchiveInput {
10
10
  */
11
11
  export declare function writeArchive(input: WriteArchiveInput): Promise<string>;
12
12
  export declare function removeArchive(memoryId: string): Promise<void>;
13
+ /** Absolute path of one archived copy: `<archive>/files/<relPath>`. Owns the
14
+ * layout `writeArchive` copies into and `TrainRecord.files` reports. */
15
+ export declare function archivedFilePath(memoryId: string, relPath: string): string;
13
16
  /**
14
17
  * Read the manifest for an archived training, or `undefined` when the
15
18
  * archive is absent or unreadable (e.g. it was pruned out of band). Keeps
@@ -1 +1 @@
1
- {"version":3,"file":"archive.d.ts","sourceRoot":"","sources":["../../../src/train/archive.ts"],"names":[],"mappings":"AAKA,OAAO,KAAK,EAAE,YAAY,EAAE,aAAa,EAAE,MAAM,YAAY,CAAC;AAW9D,MAAM,WAAW,iBAAiB;IAChC,QAAQ,EAAE,MAAM,CAAC;IACjB,KAAK,EAAE,YAAY,EAAE,CAAC;IACtB,QAAQ,EAAE,aAAa,CAAC;CACzB;AAED;;;GAGG;AACH,wBAAsB,YAAY,CAAC,KAAK,EAAE,iBAAiB,GAAG,OAAO,CAAC,MAAM,CAAC,CAa5E;AAED,wBAAsB,aAAa,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAEnE;AAED;;;;GAIG;AACH,wBAAsB,mBAAmB,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,aAAa,GAAG,SAAS,CAAC,CAO9F;AA+BD;;;;;GAKG;AACH,wBAAsB,mBAAmB,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,YAAY,EAAE,CAAC,CAgBjF"}
1
+ {"version":3,"file":"archive.d.ts","sourceRoot":"","sources":["../../../src/train/archive.ts"],"names":[],"mappings":"AAKA,OAAO,KAAK,EAAE,YAAY,EAAE,aAAa,EAAE,MAAM,YAAY,CAAC;AAW9D,MAAM,WAAW,iBAAiB;IAChC,QAAQ,EAAE,MAAM,CAAC;IACjB,KAAK,EAAE,YAAY,EAAE,CAAC;IACtB,QAAQ,EAAE,aAAa,CAAC;CACzB;AAED;;;GAGG;AACH,wBAAsB,YAAY,CAAC,KAAK,EAAE,iBAAiB,GAAG,OAAO,CAAC,MAAM,CAAC,CAY5E;AAED,wBAAsB,aAAa,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAEnE;AAED;yEACyE;AACzE,wBAAgB,gBAAgB,CAAC,QAAQ,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,GAAG,MAAM,CAE1E;AAED;;;;GAIG;AACH,wBAAsB,mBAAmB,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,aAAa,GAAG,SAAS,CAAC,CAO9F;AA+BD;;;;;GAKG;AACH,wBAAsB,mBAAmB,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,YAAY,EAAE,CAAC,CAgBjF"}
@@ -16,10 +16,9 @@ function archiveRootForMemoryId(memoryId) {
16
16
  */
17
17
  export async function writeArchive(input) {
18
18
  const root = archiveRootForMemoryId(input.memoryId);
19
- const filesRoot = join(root, "files");
20
- await mkdir(filesRoot, { recursive: true });
19
+ await mkdir(join(root, "files"), { recursive: true });
21
20
  for (const file of input.files) {
22
- const destination = join(filesRoot, file.relPath);
21
+ const destination = archivedFilePath(input.memoryId, file.relPath);
23
22
  await mkdir(dirname(destination), { recursive: true });
24
23
  await copyFile(file.absPath, destination);
25
24
  }
@@ -29,6 +28,11 @@ export async function writeArchive(input) {
29
28
  export async function removeArchive(memoryId) {
30
29
  await rm(archiveRootForMemoryId(memoryId), { recursive: true, force: true });
31
30
  }
31
+ /** Absolute path of one archived copy: `<archive>/files/<relPath>`. Owns the
32
+ * layout `writeArchive` copies into and `TrainRecord.files` reports. */
33
+ export function archivedFilePath(memoryId, relPath) {
34
+ return join(archiveRootForMemoryId(memoryId), "files", relPath);
35
+ }
32
36
  /**
33
37
  * Read the manifest for an archived training, or `undefined` when the
34
38
  * archive is absent or unreadable (e.g. it was pruned out of band). Keeps
@@ -1 +1 @@
1
- {"version":3,"file":"archive.js","sourceRoot":"","sources":["../../../src/train/archive.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"archive.js","sourceRoot":"","sources":["../../../src/train/archive.ts"],"names":[],"mappings":"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"}
@@ -40,11 +40,16 @@ export interface TrainListEntry {
40
40
  /** False when the manifest could not be read (archive deleted/moved). */
41
41
  hasArchive: boolean;
42
42
  }
43
- /** A {@link TrainListEntry} plus the full synthesized observation text, as
44
- * returned by a single-row lookup (`duet train show` / `update`). */
43
+ /** A {@link TrainListEntry} plus the full synthesized observation text and
44
+ * archive contents, as returned by a single-row lookup (`duet train show` /
45
+ * `update`). */
45
46
  export interface TrainRecord extends TrainListEntry {
46
47
  /** The durable memory text stored in the observation row. */
47
48
  content: string;
49
+ /** Absolute paths of the archived copies under the archive's `files/`
50
+ * folder, from the manifest. Preferred over the original source paths,
51
+ * which may have moved or been deleted since training. */
52
+ files?: string[];
48
53
  }
49
54
  export interface TrainManifest {
50
55
  /** Matches the inserted observation row's id; also the archive folder name. */
@@ -1 +1 @@
1
- {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../src/train/types.ts"],"names":[],"mappings":"AAAA,MAAM,WAAW,YAAY;IAC3B,iEAAiE;IACjE,OAAO,EAAE,MAAM,CAAC;IAChB,kEAAkE;IAClE,OAAO,EAAE,MAAM,CAAC;IAChB,sEAAsE;IACtE,KAAK,EAAE,MAAM,CAAC;IACd,8EAA8E;IAC9E,MAAM,EAAE,MAAM,CAAC;CAChB;AAED,MAAM,WAAW,eAAe;IAC9B,uFAAuF;IACvF,QAAQ,EAAE,MAAM,CAAC;IACjB,qEAAqE;IACrE,kBAAkB,EAAE,MAAM,CAAC;CAC5B;AAED;;;;;GAKG;AACH,MAAM,WAAW,cAAc;IAC7B,6EAA6E;IAC7E,IAAI,EAAE,MAAM,CAAC;IACb,6EAA6E;IAC7E,QAAQ,EAAE,MAAM,CAAC;IACjB,0EAA0E;IAC1E,SAAS,EAAE,MAAM,CAAC;IAClB,4CAA4C;IAC5C,YAAY,EAAE,MAAM,CAAC;IACrB,uEAAuE;IACvE,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,0DAA0D;IAC1D,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,wEAAwE;IACxE,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,0DAA0D;IAC1D,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,yEAAyE;IACzE,UAAU,EAAE,OAAO,CAAC;CACrB;AAED;sEACsE;AACtE,MAAM,WAAW,WAAY,SAAQ,cAAc;IACjD,6DAA6D;IAC7D,OAAO,EAAE,MAAM,CAAC;CACjB;AAED,MAAM,WAAW,aAAa;IAC5B,+EAA+E;IAC/E,QAAQ,EAAE,MAAM,CAAC;IACjB,IAAI,EAAE,MAAM,CAAC;IACb,oDAAoD;IACpD,SAAS,EAAE,MAAM,CAAC;IAClB,qDAAqD;IACrD,YAAY,EAAE,MAAM,CAAC;IACrB,4CAA4C;IAC5C,KAAK,EAAE,MAAM,CAAC;IACd,QAAQ,EAAE,MAAM,CAAC;IACjB,KAAK,EAAE,KAAK,CAAC,IAAI,CAAC,YAAY,EAAE,SAAS,GAAG,OAAO,GAAG,QAAQ,CAAC,CAAC,CAAC;CAClE"}
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../src/train/types.ts"],"names":[],"mappings":"AAAA,MAAM,WAAW,YAAY;IAC3B,iEAAiE;IACjE,OAAO,EAAE,MAAM,CAAC;IAChB,kEAAkE;IAClE,OAAO,EAAE,MAAM,CAAC;IAChB,sEAAsE;IACtE,KAAK,EAAE,MAAM,CAAC;IACd,8EAA8E;IAC9E,MAAM,EAAE,MAAM,CAAC;CAChB;AAED,MAAM,WAAW,eAAe;IAC9B,uFAAuF;IACvF,QAAQ,EAAE,MAAM,CAAC;IACjB,qEAAqE;IACrE,kBAAkB,EAAE,MAAM,CAAC;CAC5B;AAED;;;;;GAKG;AACH,MAAM,WAAW,cAAc;IAC7B,6EAA6E;IAC7E,IAAI,EAAE,MAAM,CAAC;IACb,6EAA6E;IAC7E,QAAQ,EAAE,MAAM,CAAC;IACjB,0EAA0E;IAC1E,SAAS,EAAE,MAAM,CAAC;IAClB,4CAA4C;IAC5C,YAAY,EAAE,MAAM,CAAC;IACrB,uEAAuE;IACvE,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,0DAA0D;IAC1D,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,wEAAwE;IACxE,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,0DAA0D;IAC1D,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,yEAAyE;IACzE,UAAU,EAAE,OAAO,CAAC;CACrB;AAED;;iBAEiB;AACjB,MAAM,WAAW,WAAY,SAAQ,cAAc;IACjD,6DAA6D;IAC7D,OAAO,EAAE,MAAM,CAAC;IAChB;;+DAE2D;IAC3D,KAAK,CAAC,EAAE,MAAM,EAAE,CAAC;CAClB;AAED,MAAM,WAAW,aAAa;IAC5B,+EAA+E;IAC/E,QAAQ,EAAE,MAAM,CAAC;IACjB,IAAI,EAAE,MAAM,CAAC;IACb,oDAAoD;IACpD,SAAS,EAAE,MAAM,CAAC;IAClB,qDAAqD;IACrD,YAAY,EAAE,MAAM,CAAC;IACrB,4CAA4C;IAC5C,KAAK,EAAE,MAAM,CAAC;IACd,QAAQ,EAAE,MAAM,CAAC;IACjB,KAAK,EAAE,KAAK,CAAC,IAAI,CAAC,YAAY,EAAE,SAAS,GAAG,OAAO,GAAG,QAAQ,CAAC,CAAC,CAAC;CAClE"}
@@ -21,7 +21,7 @@ export interface RunTuiInput {
21
21
  packageVersion: string;
22
22
  /** User-facing model name for this CLI session. */
23
23
  modelName: string;
24
- /** Provenance for modelName (e.g. "inferred from ANTHROPIC_API_KEY in .env"). */
24
+ /** Provenance for modelName (e.g. "inferred from AI_GATEWAY_API_KEY in .env"). */
25
25
  modelSource?: string;
26
26
  /** User-facing model name used for observational memory work. */
27
27
  memoryModelName: string;