@wrongstack/sdd 0.295.1 → 0.296.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.
- package/dist/graph-split.d.ts.map +1 -1
- package/dist/index.d.ts +2 -1
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +444 -202
- package/dist/index.js.map +4 -4
- package/dist/project-context.d.ts +6 -0
- package/dist/project-context.d.ts.map +1 -0
- package/dist/sdd-interview-driver.d.ts +15 -0
- package/dist/sdd-interview-driver.d.ts.map +1 -1
- package/dist/sdd-lifecycle.d.ts.map +1 -1
- package/dist/sdd-parallel-run-types.d.ts +200 -0
- package/dist/sdd-parallel-run-types.d.ts.map +1 -0
- package/dist/sdd-parallel-run.d.ts +22 -198
- package/dist/sdd-parallel-run.d.ts.map +1 -1
- package/dist/sdd-task-execution.d.ts +28 -0
- package/dist/sdd-task-execution.d.ts.map +1 -0
- package/dist/spec-builder.d.ts +33 -2
- package/dist/spec-builder.d.ts.map +1 -1
- package/dist/verify-task.d.ts +21 -4
- package/dist/verify-task.d.ts.map +1 -1
- package/package.json +3 -3
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Build a short, model-friendly summary of the project root. Best-effort —
|
|
3
|
+
* missing files simply omit their section; never throws.
|
|
4
|
+
*/
|
|
5
|
+
export declare function gatherProjectContext(projectRoot: string): Promise<string>;
|
|
6
|
+
//# sourceMappingURL=project-context.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"project-context.d.ts","sourceRoot":"","sources":["../src/project-context.ts"],"names":[],"mappings":"AAQA;;;GAGG;AACH,wBAAsB,oBAAoB,CAAC,WAAW,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,CAuD/E"}
|
|
@@ -30,6 +30,12 @@ export interface SddInterviewSnapshot {
|
|
|
30
30
|
question: string;
|
|
31
31
|
answer: string;
|
|
32
32
|
}>;
|
|
33
|
+
/** Last agent utterance (open question / plan prose) — used for resume UI. */
|
|
34
|
+
lastAgentText?: string | undefined;
|
|
35
|
+
/** Most recent run id started from this interview, if any. */
|
|
36
|
+
lastRunId?: string | undefined;
|
|
37
|
+
/** True when this snapshot was rehydrated from disk (not a fresh start). */
|
|
38
|
+
resumed?: boolean | undefined;
|
|
33
39
|
spec?: {
|
|
34
40
|
id: string;
|
|
35
41
|
title: string;
|
|
@@ -66,6 +72,8 @@ export declare class SddInterviewDriver {
|
|
|
66
72
|
private readonly maxQuestions;
|
|
67
73
|
private tracker;
|
|
68
74
|
private graph;
|
|
75
|
+
/** Set when {@link loadExisting} successfully rehydrated a session from disk. */
|
|
76
|
+
private resumedFromDisk;
|
|
69
77
|
constructor(opts: SddInterviewDriverOptions);
|
|
70
78
|
/** Begin a fresh interview. Returns the first AI prompt (a question kickoff). */
|
|
71
79
|
start(title: string, intent?: string): string;
|
|
@@ -74,6 +82,13 @@ export declare class SddInterviewDriver {
|
|
|
74
82
|
* graph too when one was already produced. Returns true if a session loaded.
|
|
75
83
|
*/
|
|
76
84
|
loadExisting(): Promise<boolean>;
|
|
85
|
+
/** Drop the on-disk session (if any) and clear in-memory interview state. */
|
|
86
|
+
discard(): Promise<void>;
|
|
87
|
+
setLastAgentText(text: string): Promise<void>;
|
|
88
|
+
getLastAgentText(): string | undefined;
|
|
89
|
+
setLastRunId(runId: string): Promise<void>;
|
|
90
|
+
getLastRunId(): string | undefined;
|
|
91
|
+
wasResumed(): boolean;
|
|
77
92
|
phase(): AISpecPhase;
|
|
78
93
|
currentPrompt(): string;
|
|
79
94
|
getTracker(): TaskTracker | null;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"sdd-interview-driver.d.ts","sourceRoot":"","sources":["../src/sdd-interview-driver.ts"],"names":[],"mappings":"AAgBA,OAAO,EAAoB,WAAW,EAAE,MAAM,0BAA0B,CAAC;AACzE,OAAO,KAAK,EAAiB,SAAS,EAAY,MAAM,wBAAwB,CAAC;AACjF,OAAO,EAAmB,KAAK,cAAc,EAAE,KAAK,YAAY,EAAE,MAAM,kBAAkB,CAAC;AAC3F,OAAO,EAAE,aAAa,EAAE,KAAK,WAAW,EAAE,MAAM,mBAAmB,CAAC;AACpE,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,iBAAiB,CAAC;AAEjD,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,uBAAuB,CAAC;AAE5D,MAAM,WAAW,yBAAyB;IACxC,sDAAsD;IACtD,SAAS,EAAE,SAAS,CAAC;IACrB,iEAAiE;IACjE,UAAU,EAAE,cAAc,CAAC;IAC3B,uEAAuE;IACvE,WAAW,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IACjC,mEAAmE;IACnE,cAAc,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IACpC,YAAY,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IAClC,YAAY,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;CACnC;AAED,4EAA4E;AAC5E,MAAM,WAAW,oBAAoB;IACnC,SAAS,EAAE,MAAM,CAAC;IAClB,KAAK,EAAE,WAAW,CAAC;IACnB,KAAK,EAAE,MAAM,CAAC;IACd,kFAAkF;IAClF,IAAI,EAAE,MAAM,CAAC;IACb,aAAa,EAAE,MAAM,CAAC;IACtB,YAAY,EAAE,MAAM,CAAC;IACrB,YAAY,EAAE,MAAM,CAAC;IACrB,OAAO,EAAE,KAAK,CAAC;QAAE,QAAQ,EAAE,MAAM,CAAC;QAAC,MAAM,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;IACrD,IAAI,CAAC,EACD;QACE,EAAE,EAAE,MAAM,CAAC;QACX,KAAK,EAAE,MAAM,CAAC;QACd,QAAQ,EAAE,MAAM,CAAC;QACjB,YAAY,EAAE,KAAK,CAAC;YAAE,QAAQ,EAAE,MAAM,CAAC;YAAC,WAAW,EAAE,MAAM,CAAA;SAAE,CAAC,CAAC;KAChE,GACD,SAAS,CAAC;IACd,OAAO,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IAC7B,SAAS,EAAE,MAAM,CAAC;IAClB;;;OAGG;IACH,KAAK,CAAC,EAAE;QAAE,KAAK,EAAE,YAAY,EAAE,CAAC;QAAC,OAAO,EAAE,cAAc,EAAE,CAAA;KAAE,GAAG,SAAS,CAAC;IACzE,0EAA0E;IAC1E,MAAM,EAAE,MAAM,CAAC;CAChB;AAED,sDAAsD;AACtD,MAAM,WAAW,eAAe;IAC9B,YAAY,EAAE,OAAO,CAAC;IACtB,sBAAsB,EAAE,OAAO,CAAC;IAChC,aAAa,EAAE,OAAO,CAAC;IACvB,OAAO,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;CAC9B;AAED,qBAAa,kBAAkB;IAC7B,QAAQ,CAAC,OAAO,EAAE,aAAa,CAAC;IAChC,OAAO,CAAC,QAAQ,CAAC,CAAC,CAA4B;IAC9C,OAAO,CAAC,QAAQ,CAAC,YAAY,CAAS;IACtC,OAAO,CAAC,QAAQ,CAAC,YAAY,CAAS;IACtC,OAAO,CAAC,OAAO,CAA4B;IAC3C,OAAO,CAAC,KAAK,CAA0B;
|
|
1
|
+
{"version":3,"file":"sdd-interview-driver.d.ts","sourceRoot":"","sources":["../src/sdd-interview-driver.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"sdd-lifecycle.d.ts","sourceRoot":"","sources":["../src/sdd-lifecycle.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"sdd-lifecycle.d.ts","sourceRoot":"","sources":["../src/sdd-lifecycle.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,200 @@
|
|
|
1
|
+
import type { Agent } from '@wrongstack/core/agent';
|
|
2
|
+
import type { AgentFactory } from '@wrongstack/core/coordination';
|
|
3
|
+
import type { EventBus } from '@wrongstack/core/kernel';
|
|
4
|
+
import type { TaskTracker } from '@wrongstack/core/tasking';
|
|
5
|
+
import type { TaskGraph, TaskNode, TaskProgress, TaskResult } from '@wrongstack/core/types';
|
|
6
|
+
import type { WorktreeManager } from '@wrongstack/core/worktree';
|
|
7
|
+
import type { TaskBatch } from './sdd-task-decomposer.js';
|
|
8
|
+
/** A sub-task produced by splitting a parent task (see `splitTask`). */
|
|
9
|
+
export interface SddSubtaskSpec {
|
|
10
|
+
title: string;
|
|
11
|
+
description: string;
|
|
12
|
+
type?: TaskNode['type'] | undefined;
|
|
13
|
+
priority?: TaskNode['priority'] | undefined;
|
|
14
|
+
/**
|
|
15
|
+
* One verifiable success criterion for this sub-task (planning decomposer).
|
|
16
|
+
* A runnable-command marker (`$ cmd`, `run:`/`verify:`/`cmd:`) becomes the
|
|
17
|
+
* leaf's `metadata.verificationCommand`; free text is appended to the
|
|
18
|
+
* description as an explicit acceptance criterion.
|
|
19
|
+
*/
|
|
20
|
+
successCriterion?: string | undefined;
|
|
21
|
+
}
|
|
22
|
+
/**
|
|
23
|
+
* Verdict returned by the optional failure supervisor when a task is about to go
|
|
24
|
+
* terminal. `retry` re-queues with a fresh attempt budget; `reassign` swaps the
|
|
25
|
+
* worker model (+ optional provider) then re-queues; `split` breaks the task
|
|
26
|
+
* into sub-tasks; `fail` (or `undefined`) lets it terminal-fail.
|
|
27
|
+
*/
|
|
28
|
+
export type SddSupervisorVerdict = {
|
|
29
|
+
action: 'retry';
|
|
30
|
+
} | {
|
|
31
|
+
action: 'reassign';
|
|
32
|
+
model?: string | undefined;
|
|
33
|
+
provider?: string | undefined;
|
|
34
|
+
} | {
|
|
35
|
+
action: 'split';
|
|
36
|
+
subtasks: SddSubtaskSpec[];
|
|
37
|
+
} | {
|
|
38
|
+
action: 'fail';
|
|
39
|
+
};
|
|
40
|
+
export interface SddParallelRunOptions {
|
|
41
|
+
/** Pre-constructed TaskTracker (must already hold the graph's initial state). */
|
|
42
|
+
tracker: TaskTracker;
|
|
43
|
+
/** The TaskGraph produced by TaskGenerator from an approved spec. */
|
|
44
|
+
graph: TaskGraph;
|
|
45
|
+
/** The main agent — used as the subagent factory. */
|
|
46
|
+
agent: Agent;
|
|
47
|
+
/** Project root (used for coordinator id). */
|
|
48
|
+
projectRoot: string;
|
|
49
|
+
/**
|
|
50
|
+
* Override default parallel slots (1–16). Default: 2 — deliberately low so a
|
|
51
|
+
* run never juggles more git worktrees than a human can review. Independent
|
|
52
|
+
* tasks still run concurrently up to this cap; dependency chains run in order.
|
|
53
|
+
*/
|
|
54
|
+
parallelSlots?: number | undefined;
|
|
55
|
+
/**
|
|
56
|
+
* Hard wall-clock cap per task in ms. OPT-IN — `undefined` by default so a
|
|
57
|
+
* long-but-productive task is never killed merely for running long (the old
|
|
58
|
+
* 5-min default hard-killed real coding tasks with `budget_timeout`). When
|
|
59
|
+
* set, the coordinator watchdog enforces it. Prefer `taskIdleTimeoutMs`.
|
|
60
|
+
*/
|
|
61
|
+
taskTimeoutMs?: number | undefined;
|
|
62
|
+
/**
|
|
63
|
+
* Idle reaper per task in ms: reap a task only after this long with NO
|
|
64
|
+
* activity (iteration / tool call / streamed token / tool progress). Resets
|
|
65
|
+
* on every sign of forward motion, so an actively-working agent runs until
|
|
66
|
+
* its task naturally ends. Default: 600_000 (10 min of silence = genuinely
|
|
67
|
+
* stuck). This is the default guard — wall-clock (`taskTimeoutMs`) is opt-in.
|
|
68
|
+
*/
|
|
69
|
+
taskIdleTimeoutMs?: number | undefined;
|
|
70
|
+
/** Maximum in-run retry attempts for a failed task before it goes terminal. Default: 3. */
|
|
71
|
+
maxRetries?: number | undefined;
|
|
72
|
+
/**
|
|
73
|
+
* After the graph settles with terminal-failed tasks, requeue ALL failed
|
|
74
|
+
* (non-cancelled) tasks to `pending` and run them again — up to this many
|
|
75
|
+
* sweeps. Each sweep gives every failed task a fresh `maxRetries` budget. The
|
|
76
|
+
* loop stops early once a sweep produces no new completions (no progress).
|
|
77
|
+
* 0 = off. Default: 2.
|
|
78
|
+
*/
|
|
79
|
+
maxFailedRetrySweeps?: number | undefined;
|
|
80
|
+
/** Override the default agent factory. */
|
|
81
|
+
subagentFactory?: AgentFactory | undefined;
|
|
82
|
+
/**
|
|
83
|
+
* Run-level default model for worker subagents. A task's own
|
|
84
|
+
* `metadata.model` (set per-task in the WebUI) takes precedence; this is the
|
|
85
|
+
* fallback for every task that has no explicit assignment. Undefined → the
|
|
86
|
+
* factory's own default (the leader's model).
|
|
87
|
+
*/
|
|
88
|
+
defaultModel?: string | undefined;
|
|
89
|
+
/** Run-level default provider id (same precedence rules as defaultModel). */
|
|
90
|
+
defaultProvider?: string | undefined;
|
|
91
|
+
/**
|
|
92
|
+
* Run-level fallback model chain (entries: `model` / `provider/model`). A
|
|
93
|
+
* task's `metadata.fallbackModels` overrides this. The subagent factory wires
|
|
94
|
+
* these into a fallback extension so a 429/stream-hang rotates to the next.
|
|
95
|
+
*/
|
|
96
|
+
fallbackModels?: string[] | undefined;
|
|
97
|
+
/**
|
|
98
|
+
* Post-task verification gate. When set, a task whose worker reported success
|
|
99
|
+
* is NOT marked `completed` (and NOT merged) until this resolves `{ok:true}`.
|
|
100
|
+
* Runs in the task's worktree cwd (or the project root when no worktree). Core
|
|
101
|
+
* stays shell-agnostic — the caller injects a verifier that, e.g., runs the
|
|
102
|
+
* task's `metadata.verificationCommand` (tests / typecheck). A task with no
|
|
103
|
+
* command should return `{ok:true}`. An `{ok:false}` routes the task into the
|
|
104
|
+
* normal failure path (retry while attempts remain, else terminal-fail).
|
|
105
|
+
*/
|
|
106
|
+
verifyTask?: ((info: {
|
|
107
|
+
task: TaskNode;
|
|
108
|
+
result: TaskResult;
|
|
109
|
+
cwd: string;
|
|
110
|
+
}) => Promise<{
|
|
111
|
+
ok: boolean;
|
|
112
|
+
reason?: string;
|
|
113
|
+
}>) | undefined;
|
|
114
|
+
/**
|
|
115
|
+
* Optional merge-conflict resolver, forwarded to `WorktreeManager.merge`. Given
|
|
116
|
+
* the conflicted files + the base checkout cwd, return `true` once resolved (no
|
|
117
|
+
* markers left). When omitted or it returns `false`, the task is requeued (a
|
|
118
|
+
* re-run forks a fresh worktree off the advanced base) and, if retries are
|
|
119
|
+
* exhausted, terminally failed with its worktree kept for review.
|
|
120
|
+
*/
|
|
121
|
+
conflictResolver?: ((info: {
|
|
122
|
+
task: TaskNode;
|
|
123
|
+
conflictFiles: string[];
|
|
124
|
+
cwd: string;
|
|
125
|
+
}) => Promise<boolean>) | undefined;
|
|
126
|
+
/**
|
|
127
|
+
* Failure supervisor: consulted ONLY when a task has exhausted its retries and
|
|
128
|
+
* is about to go terminal-failed. Returning a verdict lets a decision agent
|
|
129
|
+
* keep the run moving — `retry` / `reassign` (swap model) / `split` — instead
|
|
130
|
+
* of dead-ending. Returning `{action:'fail'}` / `undefined` lets it fail. Each
|
|
131
|
+
* task can be rescued at most `maxSupervisorEscalations` times (loop guard).
|
|
132
|
+
*/
|
|
133
|
+
superviseFailure?: ((info: {
|
|
134
|
+
task: TaskNode;
|
|
135
|
+
error: string;
|
|
136
|
+
attempts: number;
|
|
137
|
+
}) => Promise<SddSupervisorVerdict | undefined>) | undefined;
|
|
138
|
+
/** Max times the supervisor may rescue a single task before it must fail. Default 2. */
|
|
139
|
+
maxSupervisorEscalations?: number | undefined;
|
|
140
|
+
/** Called after each wave completes. */
|
|
141
|
+
onWave?: ((wave: WaveResult) => void) | undefined;
|
|
142
|
+
/** Called with progress stats every ~2s during execution. */
|
|
143
|
+
onProgress?: ((progress: SddProgress) => void) | undefined;
|
|
144
|
+
/** Shared EventBus — when set, the run emits `sdd.*` live-board events. */
|
|
145
|
+
events?: EventBus | undefined;
|
|
146
|
+
/** Parent session id for every emitted `sdd.*` event. */
|
|
147
|
+
sessionId?: string | (() => string | undefined) | undefined;
|
|
148
|
+
/** Stable id correlating all events of this run (default: random). */
|
|
149
|
+
runId?: string | undefined;
|
|
150
|
+
/**
|
|
151
|
+
* Optional git-worktree manager. When set (and the project is a git repo),
|
|
152
|
+
* each task runs in its own isolated worktree and merges back into the base
|
|
153
|
+
* branch after success — so parallel agents never collide on the same files.
|
|
154
|
+
*/
|
|
155
|
+
worktrees?: WorktreeManager | undefined;
|
|
156
|
+
/** Run-level backstops (prevent an autonomous run from looping forever). */
|
|
157
|
+
maxTotalWaves?: number | undefined;
|
|
158
|
+
maxWallClockMs?: number | undefined;
|
|
159
|
+
/**
|
|
160
|
+
* Deadlock auto-recovery rounds: when the graph deadlocks on failed blockers,
|
|
161
|
+
* requeue those failed blockers `pending` and try again, up to N times. 0 = off.
|
|
162
|
+
*/
|
|
163
|
+
maxRecoveryRounds?: number | undefined;
|
|
164
|
+
}
|
|
165
|
+
export interface SddProgress {
|
|
166
|
+
wave: number;
|
|
167
|
+
total: number;
|
|
168
|
+
completed: number;
|
|
169
|
+
inProgress: number;
|
|
170
|
+
failed: number;
|
|
171
|
+
blocked: number;
|
|
172
|
+
pending: number;
|
|
173
|
+
percent: number;
|
|
174
|
+
deadlocked: boolean;
|
|
175
|
+
}
|
|
176
|
+
export interface WaveResult {
|
|
177
|
+
wave: number;
|
|
178
|
+
batch: TaskBatch;
|
|
179
|
+
results: TaskResult[];
|
|
180
|
+
successCount: number;
|
|
181
|
+
failCount: number;
|
|
182
|
+
durationMs: number;
|
|
183
|
+
stopRequested: boolean;
|
|
184
|
+
}
|
|
185
|
+
/** Result of a single task's execution in the continuous scheduler. */
|
|
186
|
+
export interface TaskOutcome {
|
|
187
|
+
taskId: string;
|
|
188
|
+
success: boolean;
|
|
189
|
+
result?: TaskResult | undefined;
|
|
190
|
+
}
|
|
191
|
+
export interface RunResult {
|
|
192
|
+
totalWaves: number;
|
|
193
|
+
totalCompleted: number;
|
|
194
|
+
totalFailed: number;
|
|
195
|
+
totalDurationMs: number;
|
|
196
|
+
deadlocked: boolean;
|
|
197
|
+
stopRequested: boolean;
|
|
198
|
+
finalProgress: TaskProgress;
|
|
199
|
+
}
|
|
200
|
+
//# sourceMappingURL=sdd-parallel-run-types.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"sdd-parallel-run-types.d.ts","sourceRoot":"","sources":["../src/sdd-parallel-run-types.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,202 +1,27 @@
|
|
|
1
|
-
import type { Agent } from '@wrongstack/core/agent';
|
|
2
|
-
import type { AgentFactory } from '@wrongstack/core/coordination';
|
|
3
|
-
import type { EventBus } from '@wrongstack/core/kernel';
|
|
4
|
-
import type { TaskTracker } from '@wrongstack/core/tasking';
|
|
5
|
-
import type { TaskGraph, TaskNode, TaskProgress, TaskResult } from '@wrongstack/core/types';
|
|
6
|
-
import type { WorktreeManager } from '@wrongstack/core/worktree';
|
|
7
|
-
import { type TaskBatch } from './sdd-task-decomposer.js';
|
|
8
|
-
/** A sub-task produced by splitting a parent task (see `splitTask`). */
|
|
9
|
-
export interface SddSubtaskSpec {
|
|
10
|
-
title: string;
|
|
11
|
-
description: string;
|
|
12
|
-
type?: TaskNode['type'] | undefined;
|
|
13
|
-
priority?: TaskNode['priority'] | undefined;
|
|
14
|
-
/**
|
|
15
|
-
* One verifiable success criterion for this sub-task (planning decomposer).
|
|
16
|
-
* A runnable-command marker (`$ cmd`, `run:`/`verify:`/`cmd:`) becomes the
|
|
17
|
-
* leaf's `metadata.verificationCommand`; free text is appended to the
|
|
18
|
-
* description as an explicit acceptance criterion.
|
|
19
|
-
*/
|
|
20
|
-
successCriterion?: string | undefined;
|
|
21
|
-
}
|
|
22
1
|
/**
|
|
23
|
-
*
|
|
24
|
-
*
|
|
25
|
-
*
|
|
26
|
-
*
|
|
2
|
+
* SddParallelRun
|
|
3
|
+
*
|
|
4
|
+
* Drives a TaskGraph through ParallelEternalEngine's infrastructure
|
|
5
|
+
* (DefaultMultiAgentCoordinator + AgentSubagentRunner) but powered by
|
|
6
|
+
* SddTaskDecomposer — producing dependency-aware waves instead of
|
|
7
|
+
* goal-driven iterations.
|
|
8
|
+
*
|
|
9
|
+
* One-shot: completes when all tasks are done OR a deadlock is detected.
|
|
10
|
+
* Does NOT loop — each run() call is a discrete execution.
|
|
11
|
+
*
|
|
12
|
+
* Usage:
|
|
13
|
+
* ```
|
|
14
|
+
* const run = new SddParallelRun({ tracker, graph, agent, projectRoot });
|
|
15
|
+
* await run.run({ onWave });
|
|
16
|
+
* // or with progress callback:
|
|
17
|
+
* await run.run({ onProgress: (p) => console.log(renderProgress(p)) });
|
|
18
|
+
* ```
|
|
27
19
|
*/
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
}
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
provider?: string | undefined;
|
|
34
|
-
} | {
|
|
35
|
-
action: 'split';
|
|
36
|
-
subtasks: SddSubtaskSpec[];
|
|
37
|
-
} | {
|
|
38
|
-
action: 'fail';
|
|
39
|
-
};
|
|
40
|
-
export interface SddParallelRunOptions {
|
|
41
|
-
/** Pre-constructed TaskTracker (must already hold the graph's initial state). */
|
|
42
|
-
tracker: TaskTracker;
|
|
43
|
-
/** The TaskGraph produced by TaskGenerator from an approved spec. */
|
|
44
|
-
graph: TaskGraph;
|
|
45
|
-
/** The main agent — used as the subagent factory. */
|
|
46
|
-
agent: Agent;
|
|
47
|
-
/** Project root (used for coordinator id). */
|
|
48
|
-
projectRoot: string;
|
|
49
|
-
/**
|
|
50
|
-
* Override default parallel slots (1–16). Default: 2 — deliberately low so a
|
|
51
|
-
* run never juggles more git worktrees than a human can review. Independent
|
|
52
|
-
* tasks still run concurrently up to this cap; dependency chains run in order.
|
|
53
|
-
*/
|
|
54
|
-
parallelSlots?: number | undefined;
|
|
55
|
-
/**
|
|
56
|
-
* Hard wall-clock cap per task in ms. OPT-IN — `undefined` by default so a
|
|
57
|
-
* long-but-productive task is never killed merely for running long (the old
|
|
58
|
-
* 5-min default hard-killed real coding tasks with `budget_timeout`). When
|
|
59
|
-
* set, the coordinator watchdog enforces it. Prefer `taskIdleTimeoutMs`.
|
|
60
|
-
*/
|
|
61
|
-
taskTimeoutMs?: number | undefined;
|
|
62
|
-
/**
|
|
63
|
-
* Idle reaper per task in ms: reap a task only after this long with NO
|
|
64
|
-
* activity (iteration / tool call / streamed token / tool progress). Resets
|
|
65
|
-
* on every sign of forward motion, so an actively-working agent runs until
|
|
66
|
-
* its task naturally ends. Default: 600_000 (10 min of silence = genuinely
|
|
67
|
-
* stuck). This is the default guard — wall-clock (`taskTimeoutMs`) is opt-in.
|
|
68
|
-
*/
|
|
69
|
-
taskIdleTimeoutMs?: number | undefined;
|
|
70
|
-
/** Maximum in-run retry attempts for a failed task before it goes terminal. Default: 3. */
|
|
71
|
-
maxRetries?: number | undefined;
|
|
72
|
-
/**
|
|
73
|
-
* After the graph settles with terminal-failed tasks, requeue ALL failed
|
|
74
|
-
* (non-cancelled) tasks to `pending` and run them again — up to this many
|
|
75
|
-
* sweeps. Each sweep gives every failed task a fresh `maxRetries` budget. The
|
|
76
|
-
* loop stops early once a sweep produces no new completions (no progress).
|
|
77
|
-
* 0 = off. Default: 2.
|
|
78
|
-
*/
|
|
79
|
-
maxFailedRetrySweeps?: number | undefined;
|
|
80
|
-
/** Override the default agent factory. */
|
|
81
|
-
subagentFactory?: AgentFactory | undefined;
|
|
82
|
-
/**
|
|
83
|
-
* Run-level default model for worker subagents. A task's own
|
|
84
|
-
* `metadata.model` (set per-task in the WebUI) takes precedence; this is the
|
|
85
|
-
* fallback for every task that has no explicit assignment. Undefined → the
|
|
86
|
-
* factory's own default (the leader's model).
|
|
87
|
-
*/
|
|
88
|
-
defaultModel?: string | undefined;
|
|
89
|
-
/** Run-level default provider id (same precedence rules as defaultModel). */
|
|
90
|
-
defaultProvider?: string | undefined;
|
|
91
|
-
/**
|
|
92
|
-
* Run-level fallback model chain (entries: `model` / `provider/model`). A
|
|
93
|
-
* task's `metadata.fallbackModels` overrides this. The subagent factory wires
|
|
94
|
-
* these into a fallback extension so a 429/stream-hang rotates to the next.
|
|
95
|
-
*/
|
|
96
|
-
fallbackModels?: string[] | undefined;
|
|
97
|
-
/**
|
|
98
|
-
* Post-task verification gate. When set, a task whose worker reported success
|
|
99
|
-
* is NOT marked `completed` (and NOT merged) until this resolves `{ok:true}`.
|
|
100
|
-
* Runs in the task's worktree cwd (or the project root when no worktree). Core
|
|
101
|
-
* stays shell-agnostic — the caller injects a verifier that, e.g., runs the
|
|
102
|
-
* task's `metadata.verificationCommand` (tests / typecheck). A task with no
|
|
103
|
-
* command should return `{ok:true}`. An `{ok:false}` routes the task into the
|
|
104
|
-
* normal failure path (retry while attempts remain, else terminal-fail).
|
|
105
|
-
*/
|
|
106
|
-
verifyTask?: ((info: {
|
|
107
|
-
task: TaskNode;
|
|
108
|
-
result: TaskResult;
|
|
109
|
-
cwd: string;
|
|
110
|
-
}) => Promise<{
|
|
111
|
-
ok: boolean;
|
|
112
|
-
reason?: string;
|
|
113
|
-
}>) | undefined;
|
|
114
|
-
/**
|
|
115
|
-
* Optional merge-conflict resolver, forwarded to `WorktreeManager.merge`. Given
|
|
116
|
-
* the conflicted files + the base checkout cwd, return `true` once resolved (no
|
|
117
|
-
* markers left). When omitted or it returns `false`, the task is requeued (a
|
|
118
|
-
* re-run forks a fresh worktree off the advanced base) and, if retries are
|
|
119
|
-
* exhausted, terminally failed with its worktree kept for review.
|
|
120
|
-
*/
|
|
121
|
-
conflictResolver?: ((info: {
|
|
122
|
-
task: TaskNode;
|
|
123
|
-
conflictFiles: string[];
|
|
124
|
-
cwd: string;
|
|
125
|
-
}) => Promise<boolean>) | undefined;
|
|
126
|
-
/**
|
|
127
|
-
* Failure supervisor: consulted ONLY when a task has exhausted its retries and
|
|
128
|
-
* is about to go terminal-failed. Returning a verdict lets a decision agent
|
|
129
|
-
* keep the run moving — `retry` / `reassign` (swap model) / `split` — instead
|
|
130
|
-
* of dead-ending. Returning `{action:'fail'}` / `undefined` lets it fail. Each
|
|
131
|
-
* task can be rescued at most `maxSupervisorEscalations` times (loop guard).
|
|
132
|
-
*/
|
|
133
|
-
superviseFailure?: ((info: {
|
|
134
|
-
task: TaskNode;
|
|
135
|
-
error: string;
|
|
136
|
-
attempts: number;
|
|
137
|
-
}) => Promise<SddSupervisorVerdict | undefined>) | undefined;
|
|
138
|
-
/** Max times the supervisor may rescue a single task before it must fail. Default 2. */
|
|
139
|
-
maxSupervisorEscalations?: number | undefined;
|
|
140
|
-
/** Called after each wave completes. */
|
|
141
|
-
onWave?: ((wave: WaveResult) => void) | undefined;
|
|
142
|
-
/** Called with progress stats every ~2s during execution. */
|
|
143
|
-
onProgress?: ((progress: SddProgress) => void) | undefined;
|
|
144
|
-
/** Shared EventBus — when set, the run emits `sdd.*` live-board events. */
|
|
145
|
-
events?: EventBus | undefined;
|
|
146
|
-
/** Parent session id for every emitted `sdd.*` event. */
|
|
147
|
-
sessionId?: string | (() => string | undefined) | undefined;
|
|
148
|
-
/** Stable id correlating all events of this run (default: random). */
|
|
149
|
-
runId?: string | undefined;
|
|
150
|
-
/**
|
|
151
|
-
* Optional git-worktree manager. When set (and the project is a git repo),
|
|
152
|
-
* each task runs in its own isolated worktree and merges back into the base
|
|
153
|
-
* branch after success — so parallel agents never collide on the same files.
|
|
154
|
-
*/
|
|
155
|
-
worktrees?: WorktreeManager | undefined;
|
|
156
|
-
/** Run-level backstops (prevent an autonomous run from looping forever). */
|
|
157
|
-
maxTotalWaves?: number | undefined;
|
|
158
|
-
maxWallClockMs?: number | undefined;
|
|
159
|
-
/**
|
|
160
|
-
* Deadlock auto-recovery rounds: when the graph deadlocks on failed blockers,
|
|
161
|
-
* requeue those failed blockers `pending` and try again, up to N times. 0 = off.
|
|
162
|
-
*/
|
|
163
|
-
maxRecoveryRounds?: number | undefined;
|
|
164
|
-
}
|
|
165
|
-
export interface SddProgress {
|
|
166
|
-
wave: number;
|
|
167
|
-
total: number;
|
|
168
|
-
completed: number;
|
|
169
|
-
inProgress: number;
|
|
170
|
-
failed: number;
|
|
171
|
-
blocked: number;
|
|
172
|
-
pending: number;
|
|
173
|
-
percent: number;
|
|
174
|
-
deadlocked: boolean;
|
|
175
|
-
}
|
|
176
|
-
export interface WaveResult {
|
|
177
|
-
wave: number;
|
|
178
|
-
batch: TaskBatch;
|
|
179
|
-
results: TaskResult[];
|
|
180
|
-
successCount: number;
|
|
181
|
-
failCount: number;
|
|
182
|
-
durationMs: number;
|
|
183
|
-
stopRequested: boolean;
|
|
184
|
-
}
|
|
185
|
-
/** Result of a single task's execution in the continuous scheduler. */
|
|
186
|
-
interface TaskOutcome {
|
|
187
|
-
taskId: string;
|
|
188
|
-
success: boolean;
|
|
189
|
-
result?: TaskResult | undefined;
|
|
190
|
-
}
|
|
191
|
-
export interface RunResult {
|
|
192
|
-
totalWaves: number;
|
|
193
|
-
totalCompleted: number;
|
|
194
|
-
totalFailed: number;
|
|
195
|
-
totalDurationMs: number;
|
|
196
|
-
deadlocked: boolean;
|
|
197
|
-
stopRequested: boolean;
|
|
198
|
-
finalProgress: TaskProgress;
|
|
199
|
-
}
|
|
20
|
+
import type { TaskTracker } from '@wrongstack/core/tasking';
|
|
21
|
+
import type { TaskNode } from '@wrongstack/core/types';
|
|
22
|
+
import { type TaskBatch } from './sdd-task-decomposer.js';
|
|
23
|
+
import type { RunResult, SddParallelRunOptions, SddSubtaskSpec, TaskOutcome, WaveResult } from './sdd-parallel-run-types.js';
|
|
24
|
+
export type { RunResult, SddParallelRunOptions, SddProgress, SddSubtaskSpec, SddSupervisorVerdict, WaveResult, } from './sdd-parallel-run-types.js';
|
|
200
25
|
export declare class SddParallelRun {
|
|
201
26
|
private readonly opts;
|
|
202
27
|
private readonly slots;
|
|
@@ -429,5 +254,4 @@ export declare class SddParallelRun {
|
|
|
429
254
|
private persistRetries;
|
|
430
255
|
private buildProgress;
|
|
431
256
|
}
|
|
432
|
-
export {};
|
|
433
257
|
//# sourceMappingURL=sdd-parallel-run.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"sdd-parallel-run.d.ts","sourceRoot":"","sources":["../src/sdd-parallel-run.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"sdd-parallel-run.d.ts","sourceRoot":"","sources":["../src/sdd-parallel-run.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;GAkBG;AAUH,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,0BAA0B,CAAC;AAC5D,OAAO,KAAK,EAGV,QAAQ,EAET,MAAM,wBAAwB,CAAC;AAIhC,OAAO,EAAqB,KAAK,SAAS,EAAE,MAAM,0BAA0B,CAAC;AAC7E,OAAO,KAAK,EACV,SAAS,EACT,qBAAqB,EAErB,cAAc,EAEd,WAAW,EACX,UAAU,EACX,MAAM,6BAA6B,CAAC;AACrC,YAAY,EACV,SAAS,EACT,qBAAqB,EACrB,WAAW,EACX,cAAc,EACd,oBAAoB,EACpB,UAAU,GACX,MAAM,6BAA6B,CAAC;AACrC,qBAAa,cAAc;IAuDb,OAAO,CAAC,QAAQ,CAAC,IAAI;IAtDjC,OAAO,CAAC,QAAQ,CAAC,KAAK,CAAS;IAC/B,mFAAmF;IACnF,OAAO,CAAC,QAAQ,CAAC,SAAS,CAAqB;IAC/C,gFAAgF;IAChF,OAAO,CAAC,QAAQ,CAAC,aAAa,CAAS;IACvC,OAAO,CAAC,QAAQ,CAAC,UAAU,CAAS;IACpC,iFAAiF;IACjF,OAAO,CAAC,QAAQ,CAAC,wBAAwB,CAAS;IAClD,oFAAoF;IACpF,OAAO,CAAC,qBAAqB,CAA6B;IAC1D,sEAAsE;IACtE,OAAO,CAAC,QAAQ,CAAC,eAAe,CAAS;IACzC,gEAAgE;IAChE,OAAO,CAAC,YAAY,CAAK;IACzB,iFAAiF;IACjF,OAAO,CAAC,kBAAkB,CAAK;IAC/B,OAAO,CAAC,UAAU,CAAoB;IACtC,OAAO,CAAC,WAAW,CAA6C;IAChE,OAAO,CAAC,aAAa,CAAS;IAC9B,OAAO,CAAC,QAAQ,CAA6B;IAC7C,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;IACvB,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAuB;IAC/C,OAAO,CAAC,QAAQ,CAAC,eAAe,CAAkD;IAClF,OAAO,CAAC,QAAQ,CAAC,aAAa,CAAS;IACvC,OAAO,CAAC,QAAQ,CAAC,cAAc,CAAC,CAAqB;IACrD,OAAO,CAAC,QAAQ,CAAC,iBAAiB,CAAS;IAC3C,OAAO,CAAC,cAAc,CAAK;IAC3B,sEAAsE;IACtE,OAAO,CAAC,aAAa,CAAqB;IAC1C,+EAA+E;IAC/E,OAAO,CAAC,QAAQ,CAA6B;IAC7C,uDAAuD;IACvD,OAAO,CAAC,YAAY,CAA6B;IACjD,yEAAyE;IACzE,OAAO,CAAC,aAAa,CAAqC;IAC1D,+EAA+E;IAC/E,OAAO,CAAC,aAAa,CAA6B;IAClD,iFAAiF;IACjF,OAAO,CAAC,cAAc,CAAqB;IAC3C;;;OAGG;IACH,OAAO,CAAC,UAAU,CAAqB;IACvC;;;;OAIG;IACH,OAAO,CAAC,aAAa,CAA6D;IAClF,iFAAiF;IACjF,OAAO,CAAC,WAAW,CAAK;IACxB,OAAO,CAAC,KAAK,CAAK;IAElB,YAA6B,IAAI,EAAE,qBAAqB,EAqBvD;IAED,oEAAoE;IACpE,OAAO,CAAC,IAAI;IAaZ,OAAO,CAAC,gBAAgB;IAUxB,OAAO,CAAC,MAAM,CAAS;IAEvB,mEAAmE;IACnE,IAAI,IAAI,IAAI,CAIX;IAED,4EAA4E;IAC5E,KAAK,IAAI,IAAI,CAEZ;IACD,MAAM,IAAI,IAAI,CAEb;IACD,QAAQ,IAAI,OAAO,CAElB;IACD,SAAS,IAAI,OAAO,CAEnB;IAED,mFAAmF;IACnF,aAAa,IAAI,MAAM,GAAG,SAAS,CAElC;IAED,2EAA2E;IAC3E,gBAAgB,IAAI,aAAa,CAAC;QAAE,MAAM,EAAE,MAAM,CAAC;QAAC,GAAG,EAAE,MAAM,CAAC;QAAC,KAAK,EAAE,MAAM,CAAA;KAAE,CAAC,CAEhF;IAED;;;;;OAKG;IACG,gBAAgB,IAAI,OAAO,CAAC,MAAM,CAAC,CAWxC;IAED;;;;OAIG;IACG,QAAQ,IAAI,OAAO,CAAC;QAAE,EAAE,EAAE,OAAO,CAAC;QAAC,QAAQ,EAAE,MAAM,CAAC;QAAC,MAAM,CAAC,EAAE,MAAM,CAAA;KAAE,CAAC,CAW5E;IAED,gGAAgG;IAChG,SAAS,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CASjC;IAED,yEAAyE;IACzE,YAAY,CAAC,MAAM,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,GAAG,OAAO,CAIvD;IAED;;;;OAIG;IACH,YAAY,CAAC,MAAM,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,SAAS,EAAE,QAAQ,CAAC,EAAE,MAAM,GAAG,SAAS,GAAG,OAAO,CAO9F;IAED,iFAAiF;IACjF,gBAAgB,CAAC,MAAM,EAAE,MAAM,EAAE,cAAc,EAAE,MAAM,EAAE,GAAG,SAAS,GAAG,OAAO,CAI9E;IAED;;;;OAIG;IACH,mBAAmB,CAAC,MAAM,EAAE,MAAM,EAAE,mBAAmB,EAAE,MAAM,GAAG,SAAS,GAAG,OAAO,CAKpF;IAED;;;;;OAKG;IACG,UAAU,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC,CAmBjD;IAED;;;;OAIG;IACH,UAAU,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAOlC;IAED;;;;;;;;OAQG;IACH,SAAS,CAAC,MAAM,EAAE,MAAM,EAAE,QAAQ,EAAE,cAAc,EAAE,GAAG,MAAM,EAAE,CAS9D;YAEa,eAAe;IAM7B;;;;;;;OAOG;IACG,GAAG,IAAI,OAAO,CAAC,SAAS,CAAC,CAiJ9B;IAED;;;;OAIG;IACH,OAAO,CAAC,qBAAqB;IAa7B,oFAAoF;IACpF,OAAO,CAAC,qBAAqB;IAkB7B;;;;OAIG;IACH,OAAO,CAAC,kBAAkB;IAmB1B;;;;;;OAMG;IACH,cAAc,IAAI,MAAM,CAOvB;IAED,iFAAiF;IACjF,OAAO,CAAC,eAAe;IAQvB;;;;OAIG;IACH,MAAM,CAAC,YAAY,CAAC,OAAO,EAAE,WAAW,GAAG,MAAM,CAOhD;IAED,gFAAgF;YAClE,QAAQ;IAiBtB,OAAO,CAAC,gBAAgB;IAyBxB,OAAO,CAAC,cAAc;IAOtB;;;;;;OAMG;IACG,WAAW,CAAC,KAAK,EAAE,SAAS,GAAG,OAAO,CAAC,UAAU,CAAC,CAevD;IAED;;;;;;OAMG;IACG,UAAU,CAAC,IAAI,EAAE,QAAQ,GAAG,OAAO,CAAC,WAAW,CAAC,CA0BrD;IAED;;;;;;OAMG;YACW,gBAAgB;IA+B9B;;;;;OAKG;YACW,mBAAmB;IAyCjC;;;;;;;;;OASG;YACW,iBAAiB;IA8E/B,qFAAqF;YACvE,iBAAiB;IAuB/B;;;;OAIG;YACW,gBAAgB;IAsC9B,OAAO,CAAC,cAAc;IAMtB,iFAAiF;IACjF,OAAO,CAAC,cAAc;IAKtB,OAAO,CAAC,aAAa;CAetB"}
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
import { type DefaultMultiAgentCoordinator } from '@wrongstack/core/coordination';
|
|
2
|
+
import type { EventMap } from '@wrongstack/core/kernel';
|
|
3
|
+
import type { TaskNode, TaskResult } from '@wrongstack/core/types';
|
|
4
|
+
import type { SddParallelRunOptions, TaskOutcome } from './sdd-parallel-run-types.js';
|
|
5
|
+
export declare function executeSddTask(params: {
|
|
6
|
+
task: TaskNode;
|
|
7
|
+
opts: SddParallelRunOptions;
|
|
8
|
+
coordinator: DefaultMultiAgentCoordinator | null;
|
|
9
|
+
usedNicknames: Set<string>;
|
|
10
|
+
idleTimeoutMs: number;
|
|
11
|
+
timeoutMs: number | undefined;
|
|
12
|
+
runId: string;
|
|
13
|
+
nextSubagentId: () => string;
|
|
14
|
+
emit: <K extends keyof EventMap>(event: K, payload: EventMap[K]) => void;
|
|
15
|
+
taskCwds: ReadonlyMap<string, string>;
|
|
16
|
+
taskBranches: ReadonlyMap<string, string>;
|
|
17
|
+
taskSubagents: Map<string, string>;
|
|
18
|
+
cancelledTasks: ReadonlySet<string>;
|
|
19
|
+
allocateWorktrees: (tasks: TaskNode[]) => Promise<void>;
|
|
20
|
+
resolveWorktrees: (tasks: TaskNode[]) => Promise<void>;
|
|
21
|
+
integrateWorktree: (task: TaskNode, result?: TaskResult) => Promise<{
|
|
22
|
+
ok: boolean;
|
|
23
|
+
conflictFiles?: string[];
|
|
24
|
+
reason?: string;
|
|
25
|
+
}>;
|
|
26
|
+
applyTaskFailure: (taskId: string, subagentId: string, errMsg: string) => Promise<void>;
|
|
27
|
+
}): Promise<TaskOutcome>;
|
|
28
|
+
//# sourceMappingURL=sdd-task-execution.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"sdd-task-execution.d.ts","sourceRoot":"","sources":["../src/sdd-task-execution.ts"],"names":[],"mappings":"AAEA,OAAO,EAAkB,KAAK,4BAA4B,EAAE,MAAM,+BAA+B,CAAC;AAClG,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,yBAAyB,CAAC;AACxD,OAAO,KAAK,EAAE,QAAQ,EAAE,UAAU,EAAE,MAAM,wBAAwB,CAAC;AAEnE,OAAO,KAAK,EAAE,qBAAqB,EAAE,WAAW,EAAE,MAAM,6BAA6B,CAAC;AAEtF,wBAAsB,cAAc,CAAC,MAAM,EAAE;IAC3C,IAAI,EAAE,QAAQ,CAAC;IACf,IAAI,EAAE,qBAAqB,CAAC;IAC5B,WAAW,EAAE,4BAA4B,GAAG,IAAI,CAAC;IACjD,aAAa,EAAE,GAAG,CAAC,MAAM,CAAC,CAAC;IAC3B,aAAa,EAAE,MAAM,CAAC;IACtB,SAAS,EAAE,MAAM,GAAG,SAAS,CAAC;IAC9B,KAAK,EAAE,MAAM,CAAC;IACd,cAAc,EAAE,MAAM,MAAM,CAAC;IAC7B,IAAI,EAAE,CAAC,CAAC,SAAS,MAAM,QAAQ,EAAE,KAAK,EAAE,CAAC,EAAE,OAAO,EAAE,QAAQ,CAAC,CAAC,CAAC,KAAK,IAAI,CAAC;IACzE,QAAQ,EAAE,WAAW,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IACtC,YAAY,EAAE,WAAW,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAC1C,aAAa,EAAE,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IACnC,cAAc,EAAE,WAAW,CAAC,MAAM,CAAC,CAAC;IACpC,iBAAiB,EAAE,CAAC,KAAK,EAAE,QAAQ,EAAE,KAAK,OAAO,CAAC,IAAI,CAAC,CAAC;IACxD,gBAAgB,EAAE,CAAC,KAAK,EAAE,QAAQ,EAAE,KAAK,OAAO,CAAC,IAAI,CAAC,CAAC;IACvD,iBAAiB,EAAE,CACjB,IAAI,EAAE,QAAQ,EACd,MAAM,CAAC,EAAE,UAAU,KAChB,OAAO,CAAC;QAAE,EAAE,EAAE,OAAO,CAAC;QAAC,aAAa,CAAC,EAAE,MAAM,EAAE,CAAC;QAAC,MAAM,CAAC,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;IACzE,gBAAgB,EAAE,CAAC,MAAM,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,KAAK,OAAO,CAAC,IAAI,CAAC,CAAC;CACzF,GAAG,OAAO,CAAC,WAAW,CAAC,CAmIvB"}
|
package/dist/spec-builder.d.ts
CHANGED
|
@@ -17,6 +17,14 @@ export interface AISpecSession {
|
|
|
17
17
|
spec?: Specification | undefined;
|
|
18
18
|
implementation?: string | undefined;
|
|
19
19
|
taskGraphId?: string | undefined;
|
|
20
|
+
/**
|
|
21
|
+
* Last agent message shown to the operator (open question or plan prose).
|
|
22
|
+
* Persisted so a reconnect/restart can re-pair the next user answer and
|
|
23
|
+
* re-render the transcript without re-running the model.
|
|
24
|
+
*/
|
|
25
|
+
lastAgentText?: string | undefined;
|
|
26
|
+
/** Most recent SDD run id started from this interview (continuity deep-link). */
|
|
27
|
+
lastRunId?: string | undefined;
|
|
20
28
|
approved: boolean;
|
|
21
29
|
createdAt: number;
|
|
22
30
|
updatedAt: number;
|
|
@@ -100,13 +108,36 @@ export declare class AISpecBuilder {
|
|
|
100
108
|
*/
|
|
101
109
|
markDone(): void;
|
|
102
110
|
/**
|
|
103
|
-
* Set the task graph ID for this session.
|
|
111
|
+
* Set the task graph ID for this session. Awaits the save so a caller that
|
|
112
|
+
* immediately follows with `await saveSession()` cannot end up with the
|
|
113
|
+
* awaited write committing first and the fire-and-forget rename reverting
|
|
114
|
+
* the persisted `taskGraphId` to its pre-set value. Same race window that
|
|
115
|
+
* broke `setLastAgentText`/`setLastRunId` on the resume test.
|
|
104
116
|
*/
|
|
105
|
-
setTaskGraphId(graphId: string): void
|
|
117
|
+
setTaskGraphId(graphId: string): Promise<void>;
|
|
106
118
|
/**
|
|
107
119
|
* Get the task graph ID for this session.
|
|
108
120
|
*/
|
|
109
121
|
getTaskGraphId(): string | undefined;
|
|
122
|
+
/**
|
|
123
|
+
* Persist the last agent utterance so resume can rehydrate the UI + Q/A
|
|
124
|
+
* pairing. Awaits the save so the next mutation in the call chain (e.g.
|
|
125
|
+
* `setLastRunId`) cannot fire a concurrent save that overwrites this one
|
|
126
|
+
* with a stale snapshot — the fire-and-forget `autoSave()` pattern leaves
|
|
127
|
+
* a race window where an earlier queued save may commit its rename after
|
|
128
|
+
* a later one, silently reverting the persisted state.
|
|
129
|
+
*/
|
|
130
|
+
setLastAgentText(text: string): Promise<void>;
|
|
131
|
+
getLastAgentText(): string | undefined;
|
|
132
|
+
/** Record a run kicked off from this interview (board deep-link after restart). See {@link setLastAgentText} for the awaited-save rationale. */
|
|
133
|
+
setLastRunId(runId: string): Promise<void>;
|
|
134
|
+
getLastRunId(): string | undefined;
|
|
135
|
+
/**
|
|
136
|
+
* Hard-reset in-memory session fields while keeping the same session id /
|
|
137
|
+
* store binding. Used when the operator abandons a resumed interview and
|
|
138
|
+
* starts a brand-new goal (the next save overwrites the session file).
|
|
139
|
+
*/
|
|
140
|
+
resetForNewInterview(): void;
|
|
110
141
|
/**
|
|
111
142
|
* Save the current spec to the store.
|
|
112
143
|
*/
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"spec-builder.d.ts","sourceRoot":"","sources":["../src/spec-builder.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,aAAa,EAAgC,MAAM,wBAAwB,CAAC;AAG1F,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,iBAAiB,CAAC;AAIjD,MAAM,MAAM,WAAW,GACnB,aAAa,GACb,aAAa,GACb,gBAAgB,GAChB,aAAa,GACb,WAAW,GACX,MAAM,CAAC;AAEX,MAAM,WAAW,eAAe;IAC9B,QAAQ,EAAE,MAAM,CAAC;IACjB,MAAM,EAAE,MAAM,CAAC;IACf,SAAS,EAAE,MAAM,CAAC;CACnB;AAED,MAAM,WAAW,aAAa;IAC5B,EAAE,EAAE,MAAM,CAAC;IACX,KAAK,EAAE,WAAW,CAAC;IACnB,KAAK,EAAE,MAAM,CAAC;IACd,UAAU,EAAE,MAAM,CAAC;IACnB,cAAc,EAAE,MAAM,CAAC;IACvB,OAAO,EAAE,eAAe,EAAE,CAAC;IAC3B,aAAa,EAAE,MAAM,CAAC;IACtB,IAAI,CAAC,EAAE,aAAa,GAAG,SAAS,CAAC;IACjC,cAAc,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IACpC,WAAW,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IACjC,QAAQ,EAAE,OAAO,CAAC;IAClB,SAAS,EAAE,MAAM,CAAC;IAClB,SAAS,EAAE,MAAM,CAAC;CACnB;AAID,MAAM,WAAW,oBAAoB;IACnC,KAAK,EAAE,SAAS,CAAC;IACjB,sDAAsD;IACtD,YAAY,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IAClC,oEAAoE;IACpE,YAAY,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IAClC,kEAAkE;IAClE,cAAc,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IACpC,gFAAgF;IAChF,WAAW,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;CAClC;AAoND;;;;GAIG;AACH,qBAAa,aAAa;IACxB,OAAO,CAAC,OAAO,CAAgB;IAC/B,OAAO,CAAC,QAAQ,CAAC,KAAK,CAAY;IAClC,OAAO,CAAC,QAAQ,CAAC,YAAY,CAAS;IACtC,OAAO,CAAC,QAAQ,CAAC,YAAY,CAAS;IACtC,OAAO,CAAC,QAAQ,CAAC,WAAW,CAAC,CAAqB;IAElD,YAAY,IAAI,EAAE,oBAAoB,EAiBrC;IAID,kCAAkC;IAC5B,WAAW,IAAI,OAAO,CAAC,IAAI,CAAC,
|
|
1
|
+
{"version":3,"file":"spec-builder.d.ts","sourceRoot":"","sources":["../src/spec-builder.ts"],"names":[],"mappings":"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"}
|