rivet-design 0.8.6 → 0.9.1

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 (106) hide show
  1. package/bin/rivet.js +11 -0
  2. package/dist/config/evaluateFlags.d.ts +6 -2
  3. package/dist/config/evaluateFlags.d.ts.map +1 -1
  4. package/dist/config/evaluateFlags.js +4 -4
  5. package/dist/config/evaluateFlags.js.map +1 -1
  6. package/dist/config/featureFlagUserKey.d.ts +11 -0
  7. package/dist/config/featureFlagUserKey.d.ts.map +1 -0
  8. package/dist/config/featureFlagUserKey.js +21 -0
  9. package/dist/config/featureFlagUserKey.js.map +1 -0
  10. package/dist/config/flags.d.ts +6 -0
  11. package/dist/config/flags.d.ts.map +1 -1
  12. package/dist/config/flags.js +2 -0
  13. package/dist/config/flags.js.map +1 -1
  14. package/dist/config/proxy.d.ts +1 -0
  15. package/dist/config/proxy.d.ts.map +1 -1
  16. package/dist/config/proxy.js +9 -1
  17. package/dist/config/proxy.js.map +1 -1
  18. package/dist/index.js +198 -12
  19. package/dist/index.js.map +1 -1
  20. package/dist/mcp/agent-variants/SessionStore.d.ts +121 -0
  21. package/dist/mcp/agent-variants/SessionStore.d.ts.map +1 -0
  22. package/dist/mcp/agent-variants/SessionStore.js +480 -0
  23. package/dist/mcp/agent-variants/SessionStore.js.map +1 -0
  24. package/dist/mcp/agent-variants/WorktreeOrchestrator.d.ts +187 -0
  25. package/dist/mcp/agent-variants/WorktreeOrchestrator.d.ts.map +1 -0
  26. package/dist/mcp/agent-variants/WorktreeOrchestrator.js +482 -0
  27. package/dist/mcp/agent-variants/WorktreeOrchestrator.js.map +1 -0
  28. package/dist/mcp/agent-variants/contracts.d.ts +373 -0
  29. package/dist/mcp/agent-variants/contracts.d.ts.map +1 -0
  30. package/dist/mcp/agent-variants/contracts.js +134 -0
  31. package/dist/mcp/agent-variants/contracts.js.map +1 -0
  32. package/dist/mcp/agent-variants/errors.d.ts +8 -0
  33. package/dist/mcp/agent-variants/errors.d.ts.map +1 -0
  34. package/dist/mcp/agent-variants/errors.js +30 -0
  35. package/dist/mcp/agent-variants/errors.js.map +1 -0
  36. package/dist/mcp/agent-variants/index.d.ts +11 -0
  37. package/dist/mcp/agent-variants/index.d.ts.map +1 -0
  38. package/dist/mcp/agent-variants/index.js +15 -0
  39. package/dist/mcp/agent-variants/index.js.map +1 -0
  40. package/dist/mcp/agent-variants/pendingChangesAdapter.d.ts +38 -0
  41. package/dist/mcp/agent-variants/pendingChangesAdapter.d.ts.map +1 -0
  42. package/dist/mcp/agent-variants/pendingChangesAdapter.js +79 -0
  43. package/dist/mcp/agent-variants/pendingChangesAdapter.js.map +1 -0
  44. package/dist/mcp/agent-variants/tools.d.ts +8 -0
  45. package/dist/mcp/agent-variants/tools.d.ts.map +1 -0
  46. package/dist/mcp/agent-variants/tools.js +221 -0
  47. package/dist/mcp/agent-variants/tools.js.map +1 -0
  48. package/dist/mcp/server.d.ts.map +1 -1
  49. package/dist/mcp/server.js +51 -34
  50. package/dist/mcp/server.js.map +1 -1
  51. package/dist/proxy-middleware/proxy-config.d.ts +4 -1
  52. package/dist/proxy-middleware/proxy-config.d.ts.map +1 -1
  53. package/dist/proxy-middleware/proxy-config.js +34 -5
  54. package/dist/proxy-middleware/proxy-config.js.map +1 -1
  55. package/dist/routes/agentVariants.d.ts +16 -0
  56. package/dist/routes/agentVariants.d.ts.map +1 -0
  57. package/dist/routes/agentVariants.js +234 -0
  58. package/dist/routes/agentVariants.js.map +1 -0
  59. package/dist/server.d.ts +3 -0
  60. package/dist/server.d.ts.map +1 -1
  61. package/dist/server.js +24 -8
  62. package/dist/server.js.map +1 -1
  63. package/dist/services/ConfigManager.d.ts +8 -0
  64. package/dist/services/ConfigManager.d.ts.map +1 -1
  65. package/dist/services/ConfigManager.js +13 -0
  66. package/dist/services/ConfigManager.js.map +1 -1
  67. package/dist/services/FeatureFlagService.d.ts +9 -5
  68. package/dist/services/FeatureFlagService.d.ts.map +1 -1
  69. package/dist/services/FeatureFlagService.js +18 -9
  70. package/dist/services/FeatureFlagService.js.map +1 -1
  71. package/dist/services/SessionBridgeService.d.ts +22 -0
  72. package/dist/services/SessionBridgeService.d.ts.map +1 -1
  73. package/dist/services/SessionBridgeService.js +58 -1
  74. package/dist/services/SessionBridgeService.js.map +1 -1
  75. package/dist/services/TelemetryService.d.ts +5 -1
  76. package/dist/services/TelemetryService.d.ts.map +1 -1
  77. package/dist/services/TelemetryService.js +19 -7
  78. package/dist/services/TelemetryService.js.map +1 -1
  79. package/dist/services/WorktreeManager.d.ts +42 -3
  80. package/dist/services/WorktreeManager.d.ts.map +1 -1
  81. package/dist/services/WorktreeManager.js +149 -6
  82. package/dist/services/WorktreeManager.js.map +1 -1
  83. package/dist/types/change-request-types.d.ts +36 -1
  84. package/dist/types/change-request-types.d.ts.map +1 -1
  85. package/dist/utils/devServerCommand.d.ts +19 -0
  86. package/dist/utils/devServerCommand.d.ts.map +1 -0
  87. package/dist/utils/devServerCommand.js +38 -0
  88. package/dist/utils/devServerCommand.js.map +1 -0
  89. package/dist/utils/skills/claude-skill.d.ts +2 -2
  90. package/dist/utils/skills/claude-skill.d.ts.map +1 -1
  91. package/dist/utils/skills/claude-skill.js +87 -4
  92. package/dist/utils/skills/claude-skill.js.map +1 -1
  93. package/dist/utils/skills/cursor-rules.d.ts +2 -2
  94. package/dist/utils/skills/cursor-rules.d.ts.map +1 -1
  95. package/dist/utils/skills/cursor-rules.js +87 -4
  96. package/dist/utils/skills/cursor-rules.js.map +1 -1
  97. package/dist/utils/variantPreviewPort.d.ts +18 -0
  98. package/dist/utils/variantPreviewPort.d.ts.map +1 -0
  99. package/dist/utils/variantPreviewPort.js +28 -0
  100. package/dist/utils/variantPreviewPort.js.map +1 -0
  101. package/package.json +1 -1
  102. package/src/ui/dist/assets/main-Bv0LuxKz.js +382 -0
  103. package/src/ui/dist/assets/main-BzmseUDd.css +1 -0
  104. package/src/ui/dist/index.html +2 -2
  105. package/src/ui/dist/assets/main-DpcUh_b_.js +0 -382
  106. package/src/ui/dist/assets/main-wC0IkT-I.css +0 -1
@@ -0,0 +1,121 @@
1
+ import { type Brief, type LeasedWorkItemDescriptor, type ProjectContext, type Stage, type Target, type TerminalSummary, type VariantPickEnvelope, type WorkItem, type WorkItemStatus } from './contracts';
2
+ /** TTL for a lease on a code_gen work item. Bumped to 10min after observing
3
+ * agents legitimately take longer than 3min when running 4+ Task sub-agents
4
+ * in parallel — the recovery path (re-lease + re-report) worked, but the UX
5
+ * delay before the chip's pills lit up was noticeable. */
6
+ export declare const DEFAULT_LEASE_TTL_MS: number;
7
+ /** TTL for a lease on a scaffold_base work item. Slightly longer than
8
+ * code_gen because npm/yarn create can be slow on a cold cache. */
9
+ export declare const SCAFFOLD_LEASE_TTL_MS: number;
10
+ export interface SessionStoreClock {
11
+ now(): number;
12
+ }
13
+ export interface ProposeArgs {
14
+ sessionId?: string;
15
+ prompt: string;
16
+ count?: number;
17
+ target?: Target;
18
+ projectContext?: ProjectContext;
19
+ }
20
+ export interface ProposeResult {
21
+ sessionId: string;
22
+ briefWorkItem: WorkItem;
23
+ }
24
+ export interface ApprovedBriefSelection {
25
+ briefId: string;
26
+ bodyOverride?: string;
27
+ }
28
+ export interface ApproveResult {
29
+ approvedCount: number;
30
+ totalCount: number;
31
+ codeGenWorkItemIds: string[];
32
+ scaffoldBaseWorkItemId?: string;
33
+ }
34
+ export interface RequestWorkResult {
35
+ leaseId: string;
36
+ leaseTtlMs: number;
37
+ leasedWorkItems: LeasedWorkItemDescriptor[];
38
+ }
39
+ export interface ReportCompleteResult {
40
+ stage: Stage;
41
+ progress: {
42
+ ready: number;
43
+ total: number;
44
+ };
45
+ summary?: TerminalSummary;
46
+ }
47
+ export declare class SessionStore {
48
+ private readonly sessions;
49
+ private readonly clock;
50
+ constructor(clock?: SessionStoreClock);
51
+ propose(args: ProposeArgs): ProposeResult;
52
+ reportBriefs(args: {
53
+ sessionId: string;
54
+ workItemId: string;
55
+ attempt: number;
56
+ leaseId?: string;
57
+ briefs: Brief[];
58
+ }): {
59
+ briefs: Brief[];
60
+ };
61
+ approve(args: {
62
+ sessionId: string;
63
+ selections: ApprovedBriefSelection[];
64
+ }): ApproveResult;
65
+ requestWork(args: {
66
+ sessionId: string;
67
+ leaseOwner: string;
68
+ requestedLeaseCount?: number;
69
+ }): RequestWorkResult;
70
+ reportComplete(args: {
71
+ sessionId: string;
72
+ workItemId: string;
73
+ leaseId: string;
74
+ attempt: number;
75
+ status: WorkItemStatus;
76
+ output?: unknown;
77
+ error?: {
78
+ code: string;
79
+ message: string;
80
+ };
81
+ }): ReportCompleteResult;
82
+ cancel(args: {
83
+ sessionId: string;
84
+ reason?: string;
85
+ }): {
86
+ stage: 'cancelled';
87
+ cleanupStatus: 'pending' | 'complete' | 'partial';
88
+ };
89
+ recordVariantPick(args: {
90
+ sessionId: string;
91
+ envelope: VariantPickEnvelope;
92
+ }): {
93
+ duplicate: boolean;
94
+ };
95
+ getStage(sessionId: string): Stage;
96
+ getBriefs(sessionId: string): Brief[];
97
+ getProgress(sessionId: string): {
98
+ ready: number;
99
+ total: number;
100
+ };
101
+ getSummary(sessionId: string): TerminalSummary;
102
+ getVariantPick(sessionId: string): VariantPickEnvelope | undefined;
103
+ hasSession(sessionId: string): boolean;
104
+ /** Read a work item's input blob — used by the orchestrator to recover
105
+ * briefLabel / target / projectContext when auto-enqueueing the diff. */
106
+ getWorkItemInput(sessionId: string, workItemId: string): unknown;
107
+ /** Read the projectContext for a session (existing | fresh). */
108
+ getProjectContext(sessionId: string): ProjectContext;
109
+ private requireSession;
110
+ private requireWorkItem;
111
+ private assertStage;
112
+ private validateLease;
113
+ private expireStaleLeases;
114
+ private leasableItems;
115
+ private dependenciesMet;
116
+ private cascadeDependencyFailure;
117
+ private evaluateTerminal;
118
+ private progressOf;
119
+ private summaryOf;
120
+ }
121
+ //# sourceMappingURL=SessionStore.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"SessionStore.d.ts","sourceRoot":"","sources":["../../../src/mcp/agent-variants/SessionStore.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,480 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.SessionStore = exports.SCAFFOLD_LEASE_TTL_MS = exports.DEFAULT_LEASE_TTL_MS = void 0;
4
+ const crypto_1 = require("crypto");
5
+ const errors_1 = require("./errors");
6
+ const contracts_1 = require("./contracts");
7
+ const DEFAULT_VARIANT_COUNT = 4;
8
+ const MAX_VARIANT_COUNT = 8;
9
+ /** TTL for a lease on a code_gen work item. Bumped to 10min after observing
10
+ * agents legitimately take longer than 3min when running 4+ Task sub-agents
11
+ * in parallel — the recovery path (re-lease + re-report) worked, but the UX
12
+ * delay before the chip's pills lit up was noticeable. */
13
+ exports.DEFAULT_LEASE_TTL_MS = 10 * 60 * 1000;
14
+ /** TTL for a lease on a scaffold_base work item. Slightly longer than
15
+ * code_gen because npm/yarn create can be slow on a cold cache. */
16
+ exports.SCAFFOLD_LEASE_TTL_MS = 15 * 60 * 1000;
17
+ const SYSTEM_CLOCK = { now: () => Date.now() };
18
+ function fingerprint(parts) {
19
+ return parts.map((p) => (p === undefined ? '∅' : String(p))).join('|');
20
+ }
21
+ function leaseTtlForKind(kind) {
22
+ return kind === 'scaffold_base' ? exports.SCAFFOLD_LEASE_TTL_MS : exports.DEFAULT_LEASE_TTL_MS;
23
+ }
24
+ function descriptorFor(item) {
25
+ return {
26
+ id: item.id,
27
+ kind: item.kind,
28
+ attempt: item.attempt,
29
+ dependsOn: [...item.dependsOn],
30
+ input: item.input,
31
+ output_schema: outputSchemaFor(item.kind),
32
+ };
33
+ }
34
+ function outputSchemaFor(kind) {
35
+ switch (kind) {
36
+ case 'brief':
37
+ return { briefs: 'Array<{briefId, label, body}>' };
38
+ case 'scaffold_base':
39
+ return { workspacePath: 'string', framework: 'string' };
40
+ case 'code_gen':
41
+ return { worktreePath: 'string', changedFiles: 'string[]' };
42
+ case 'cleanup_runtime':
43
+ return { released: 'boolean' };
44
+ }
45
+ }
46
+ class SessionStore {
47
+ sessions = new Map();
48
+ clock;
49
+ constructor(clock = SYSTEM_CLOCK) {
50
+ this.clock = clock;
51
+ }
52
+ // --- Lifecycle ----------------------------------------------------------
53
+ propose(args) {
54
+ const sessionId = args.sessionId ?? (0, crypto_1.randomUUID)();
55
+ if (this.sessions.has(sessionId)) {
56
+ throw new errors_1.AgentVariantsError('INVALID_TRANSITION', `Session ${sessionId} already exists`);
57
+ }
58
+ const projectContext = args.projectContext ?? { kind: 'existing' };
59
+ const count = clampCount(args.count);
60
+ const briefItem = {
61
+ id: (0, crypto_1.randomUUID)(),
62
+ kind: 'brief',
63
+ status: 'pending',
64
+ attempt: 0,
65
+ dependsOn: [],
66
+ input: {
67
+ prompt: args.prompt,
68
+ count,
69
+ target: args.target,
70
+ projectContext,
71
+ },
72
+ acceptedReports: [],
73
+ };
74
+ const record = {
75
+ sessionId,
76
+ stage: 'awaiting_briefs',
77
+ prompt: args.prompt,
78
+ count,
79
+ target: args.target,
80
+ projectContext,
81
+ briefs: [],
82
+ approvedBriefs: [],
83
+ workItems: new Map([[briefItem.id, briefItem]]),
84
+ workItemOrder: [briefItem.id],
85
+ acceptedFingerprints: new Map(),
86
+ createdAt: this.clock.now(),
87
+ };
88
+ this.sessions.set(sessionId, record);
89
+ return { sessionId, briefWorkItem: briefItem };
90
+ }
91
+ reportBriefs(args) {
92
+ const session = this.requireSession(args.sessionId);
93
+ // Idempotent replay: accept regardless of current stage so retries after a
94
+ // stage advance still return the same response without mutating state.
95
+ const fp = fingerprint([
96
+ 'reportBriefs',
97
+ args.sessionId,
98
+ args.workItemId,
99
+ args.leaseId,
100
+ args.attempt,
101
+ 'succeeded',
102
+ ]);
103
+ const cached = session.acceptedFingerprints.get(fp);
104
+ if (cached)
105
+ return cached;
106
+ this.assertStage(session, ['awaiting_briefs']);
107
+ const item = this.requireWorkItem(session, args.workItemId);
108
+ if (item.kind !== 'brief') {
109
+ throw new errors_1.AgentVariantsError('INVALID_STAGE_ACTION', `Work item ${args.workItemId} is not a brief item`);
110
+ }
111
+ if (args.leaseId !== undefined) {
112
+ this.validateLease(item, args.leaseId, args.attempt);
113
+ }
114
+ else if (item.attempt !== args.attempt) {
115
+ throw new errors_1.AgentVariantsError('STALE_LEASE', `attempt mismatch: expected ${item.attempt}, got ${args.attempt}`);
116
+ }
117
+ item.status = 'succeeded';
118
+ item.output = { briefs: args.briefs };
119
+ session.briefs = args.briefs;
120
+ session.stage = 'awaiting_approval';
121
+ const result = { briefs: args.briefs };
122
+ session.acceptedFingerprints.set(fp, result);
123
+ return result;
124
+ }
125
+ approve(args) {
126
+ const session = this.requireSession(args.sessionId);
127
+ this.assertStage(session, ['awaiting_approval']);
128
+ if (args.selections.length === 0) {
129
+ throw new errors_1.AgentVariantsError('MISSING_REQUIRED_INPUT', 'At least one brief must be approved');
130
+ }
131
+ const briefIds = new Set(session.briefs.map((b) => b.briefId));
132
+ for (const sel of args.selections) {
133
+ if (!briefIds.has(sel.briefId)) {
134
+ throw new errors_1.AgentVariantsError('MISSING_REQUIRED_INPUT', `Unknown briefId: ${sel.briefId}`);
135
+ }
136
+ }
137
+ session.approvedBriefs = args.selections;
138
+ let scaffoldBaseId;
139
+ if (session.projectContext.kind === 'fresh') {
140
+ const scaffoldItem = {
141
+ id: (0, crypto_1.randomUUID)(),
142
+ kind: 'scaffold_base',
143
+ status: 'pending',
144
+ attempt: 0,
145
+ dependsOn: [],
146
+ input: {
147
+ workspacePath: session.projectContext.workspacePath,
148
+ framework: session.projectContext.framework,
149
+ },
150
+ acceptedReports: [],
151
+ };
152
+ session.workItems.set(scaffoldItem.id, scaffoldItem);
153
+ session.workItemOrder.push(scaffoldItem.id);
154
+ scaffoldBaseId = scaffoldItem.id;
155
+ }
156
+ const codeGenIds = [];
157
+ for (const sel of args.selections) {
158
+ const brief = session.briefs.find((b) => b.briefId === sel.briefId);
159
+ if (!brief)
160
+ continue;
161
+ const codeGenItem = {
162
+ id: (0, crypto_1.randomUUID)(),
163
+ kind: 'code_gen',
164
+ status: 'pending',
165
+ attempt: 0,
166
+ dependsOn: scaffoldBaseId ? [scaffoldBaseId] : [],
167
+ input: {
168
+ briefId: brief.briefId,
169
+ briefLabel: brief.label,
170
+ briefBody: sel.bodyOverride ?? brief.body,
171
+ target: session.target,
172
+ projectContext: session.projectContext,
173
+ },
174
+ acceptedReports: [],
175
+ };
176
+ session.workItems.set(codeGenItem.id, codeGenItem);
177
+ session.workItemOrder.push(codeGenItem.id);
178
+ codeGenIds.push(codeGenItem.id);
179
+ }
180
+ session.stage = 'work_items_ready';
181
+ return {
182
+ approvedCount: args.selections.length,
183
+ totalCount: session.briefs.length,
184
+ codeGenWorkItemIds: codeGenIds,
185
+ scaffoldBaseWorkItemId: scaffoldBaseId,
186
+ };
187
+ }
188
+ // --- Lease management ---------------------------------------------------
189
+ requestWork(args) {
190
+ const session = this.requireSession(args.sessionId);
191
+ this.assertStage(session, ['work_items_ready', 'waiting_for_results']);
192
+ this.expireStaleLeases(session);
193
+ const leasable = this.leasableItems(session);
194
+ const limit = args.requestedLeaseCount ?? leasable.length;
195
+ const issued = leasable.slice(0, Math.max(0, limit));
196
+ if (issued.length === 0) {
197
+ throw new errors_1.AgentVariantsError('INVALID_STAGE_ACTION', 'No work items currently leasable (all running, blocked by deps, or done)');
198
+ }
199
+ const now = this.clock.now();
200
+ const leaseId = (0, crypto_1.randomUUID)();
201
+ for (const item of issued) {
202
+ const ttl = leaseTtlForKind(item.kind);
203
+ item.attempt = item.attempt + 1;
204
+ item.lease = {
205
+ leaseId,
206
+ leaseOwner: args.leaseOwner,
207
+ leaseIssuedAt: now,
208
+ leaseExpiresAt: now + ttl,
209
+ attempt: item.attempt,
210
+ };
211
+ item.status = 'running';
212
+ }
213
+ session.stage = 'waiting_for_results';
214
+ return {
215
+ leaseId,
216
+ leaseTtlMs: Math.max(...issued.map((i) => leaseTtlForKind(i.kind))),
217
+ leasedWorkItems: issued.map(descriptorFor),
218
+ };
219
+ }
220
+ reportComplete(args) {
221
+ const session = this.requireSession(args.sessionId);
222
+ if (contracts_1.TERMINAL_STAGES.has(session.stage)) {
223
+ // idempotent: terminal sessions accept replays of accepted fingerprints,
224
+ // reject new mutating reports.
225
+ const fp = fingerprint([
226
+ 'reportComplete',
227
+ args.sessionId,
228
+ args.workItemId,
229
+ args.leaseId,
230
+ args.attempt,
231
+ args.status,
232
+ ]);
233
+ const cached = session.acceptedFingerprints.get(fp);
234
+ if (cached)
235
+ return cached;
236
+ throw new errors_1.AgentVariantsError('INVALID_STAGE_ACTION', `Session is in terminal stage ${session.stage}; new reports rejected`);
237
+ }
238
+ this.assertStage(session, ['work_items_ready', 'waiting_for_results']);
239
+ const item = this.requireWorkItem(session, args.workItemId);
240
+ const fp = fingerprint([
241
+ 'reportComplete',
242
+ args.sessionId,
243
+ args.workItemId,
244
+ args.leaseId,
245
+ args.attempt,
246
+ args.status,
247
+ ]);
248
+ const cached = session.acceptedFingerprints.get(fp);
249
+ if (cached)
250
+ return cached;
251
+ this.validateLease(item, args.leaseId, args.attempt);
252
+ if (args.status === 'running') {
253
+ // mid-status heartbeat: extend lease, return progress.
254
+ const now = this.clock.now();
255
+ if (item.lease) {
256
+ item.lease.leaseExpiresAt = now + leaseTtlForKind(item.kind);
257
+ }
258
+ return {
259
+ stage: session.stage,
260
+ progress: this.progressOf(session),
261
+ };
262
+ }
263
+ item.status = args.status;
264
+ item.output = args.output;
265
+ item.error = args.error;
266
+ item.acceptedReports.push(fp);
267
+ item.lease = undefined;
268
+ if (args.status === 'failed') {
269
+ this.cascadeDependencyFailure(session, item.id);
270
+ }
271
+ else if (args.status === 'succeeded') {
272
+ // succeeded items unblock dependents — handled in leasableItems()
273
+ }
274
+ const result = this.evaluateTerminal(session);
275
+ session.acceptedFingerprints.set(fp, result);
276
+ return result;
277
+ }
278
+ // --- Cancel / cleanup ---------------------------------------------------
279
+ cancel(args) {
280
+ const session = this.requireSession(args.sessionId);
281
+ if (session.stage === 'cancelled') {
282
+ return { stage: 'cancelled', cleanupStatus: 'complete' };
283
+ }
284
+ session.stage = 'cancelled';
285
+ session.cancelReason = args.reason;
286
+ for (const item of session.workItems.values()) {
287
+ if (item.status === 'pending' ||
288
+ item.status === 'running') {
289
+ item.status = 'cancelled';
290
+ item.lease = undefined;
291
+ }
292
+ }
293
+ // No cleanup_runtime items in Phase 1; status starts as pending until
294
+ // Phase 2 wires the worktree teardown.
295
+ return { stage: 'cancelled', cleanupStatus: 'pending' };
296
+ }
297
+ // --- Variant pick handoff (queues to pending-changes adapter) -----------
298
+ recordVariantPick(args) {
299
+ const session = this.requireSession(args.sessionId);
300
+ if (!['ready', 'degraded'].includes(session.stage)) {
301
+ throw new errors_1.AgentVariantsError('INVALID_STAGE_ACTION', `Cannot pick variant in stage ${session.stage}`);
302
+ }
303
+ if (session.variantPick &&
304
+ session.variantPick.variantId === args.envelope.variantId) {
305
+ return { duplicate: true };
306
+ }
307
+ if (session.variantPick) {
308
+ throw new errors_1.AgentVariantsError('PENDING_CHANGE_CONFLICT', `Session already has a variant pick for ${session.variantPick.variantId}`);
309
+ }
310
+ session.variantPick = args.envelope;
311
+ return { duplicate: false };
312
+ }
313
+ // --- Read accessors -----------------------------------------------------
314
+ getStage(sessionId) {
315
+ return this.requireSession(sessionId).stage;
316
+ }
317
+ getBriefs(sessionId) {
318
+ return [...this.requireSession(sessionId).briefs];
319
+ }
320
+ getProgress(sessionId) {
321
+ return this.progressOf(this.requireSession(sessionId));
322
+ }
323
+ getSummary(sessionId) {
324
+ const session = this.requireSession(sessionId);
325
+ return this.summaryOf(session);
326
+ }
327
+ getVariantPick(sessionId) {
328
+ return this.requireSession(sessionId).variantPick;
329
+ }
330
+ hasSession(sessionId) {
331
+ return this.sessions.has(sessionId);
332
+ }
333
+ /** Read a work item's input blob — used by the orchestrator to recover
334
+ * briefLabel / target / projectContext when auto-enqueueing the diff. */
335
+ getWorkItemInput(sessionId, workItemId) {
336
+ const session = this.requireSession(sessionId);
337
+ const item = this.requireWorkItem(session, workItemId);
338
+ return item.input;
339
+ }
340
+ /** Read the projectContext for a session (existing | fresh). */
341
+ getProjectContext(sessionId) {
342
+ return this.requireSession(sessionId).projectContext;
343
+ }
344
+ // --- Internals ----------------------------------------------------------
345
+ requireSession(sessionId) {
346
+ const s = this.sessions.get(sessionId);
347
+ if (!s) {
348
+ throw new errors_1.AgentVariantsError('SESSION_NOT_FOUND', `Unknown sessionId: ${sessionId}`);
349
+ }
350
+ return s;
351
+ }
352
+ requireWorkItem(session, id) {
353
+ const item = session.workItems.get(id);
354
+ if (!item) {
355
+ throw new errors_1.AgentVariantsError('WORK_ITEM_NOT_FOUND', `Unknown workItemId: ${id}`);
356
+ }
357
+ return item;
358
+ }
359
+ assertStage(session, allowed) {
360
+ if (!allowed.includes(session.stage)) {
361
+ throw new errors_1.AgentVariantsError('INVALID_STAGE_ACTION', `Action not allowed in stage ${session.stage}; allowed: ${allowed.join(', ')}`);
362
+ }
363
+ }
364
+ validateLease(item, leaseId, attempt) {
365
+ if (!item.lease) {
366
+ throw new errors_1.AgentVariantsError('LEASE_MISMATCH', `Work item ${item.id} has no active lease`);
367
+ }
368
+ if (item.lease.leaseId !== leaseId) {
369
+ throw new errors_1.AgentVariantsError('STALE_LEASE', `Lease ${leaseId} does not match active lease`);
370
+ }
371
+ if (this.clock.now() > item.lease.leaseExpiresAt) {
372
+ throw new errors_1.AgentVariantsError('LEASE_EXPIRED', `Lease for work item ${item.id} expired`);
373
+ }
374
+ if (item.lease.attempt !== attempt) {
375
+ throw new errors_1.AgentVariantsError('STALE_LEASE', `attempt mismatch: lease has attempt ${item.lease.attempt}, got ${attempt}`);
376
+ }
377
+ }
378
+ expireStaleLeases(session) {
379
+ const now = this.clock.now();
380
+ for (const item of session.workItems.values()) {
381
+ if (item.lease &&
382
+ item.status === 'running' &&
383
+ now > item.lease.leaseExpiresAt) {
384
+ item.lease = undefined;
385
+ item.status = 'pending';
386
+ }
387
+ }
388
+ }
389
+ leasableItems(session) {
390
+ const out = [];
391
+ for (const id of session.workItemOrder) {
392
+ const item = session.workItems.get(id);
393
+ if (item.kind === 'brief')
394
+ continue;
395
+ if (item.status !== 'pending')
396
+ continue;
397
+ if (!this.dependenciesMet(session, item))
398
+ continue;
399
+ out.push(item);
400
+ }
401
+ return out;
402
+ }
403
+ dependenciesMet(session, item) {
404
+ for (const depId of item.dependsOn) {
405
+ const dep = session.workItems.get(depId);
406
+ if (!dep || dep.status !== 'succeeded')
407
+ return false;
408
+ }
409
+ return true;
410
+ }
411
+ cascadeDependencyFailure(session, failedId) {
412
+ for (const item of session.workItems.values()) {
413
+ if (item.dependsOn.includes(failedId) && item.status === 'pending') {
414
+ item.status = 'failed';
415
+ item.error = {
416
+ code: 'DEPENDENCY_FAILED',
417
+ message: `Dependency ${failedId} failed`,
418
+ };
419
+ }
420
+ }
421
+ }
422
+ evaluateTerminal(session) {
423
+ const codeGenItems = [...session.workItems.values()].filter((i) => i.kind === 'code_gen');
424
+ const allDone = codeGenItems.every((i) => i.status === 'succeeded' ||
425
+ i.status === 'failed' ||
426
+ i.status === 'cancelled');
427
+ if (!allDone) {
428
+ return {
429
+ stage: session.stage,
430
+ progress: this.progressOf(session),
431
+ };
432
+ }
433
+ const succeeded = codeGenItems.filter((i) => i.status === 'succeeded').length;
434
+ let terminal;
435
+ if (succeeded === codeGenItems.length)
436
+ terminal = 'ready';
437
+ else if (succeeded > 0)
438
+ terminal = 'degraded';
439
+ else
440
+ terminal = 'failed';
441
+ session.stage = terminal;
442
+ return {
443
+ stage: terminal,
444
+ progress: this.progressOf(session),
445
+ summary: this.summaryOf(session),
446
+ };
447
+ }
448
+ progressOf(session) {
449
+ const codeGen = [...session.workItems.values()].filter((i) => i.kind === 'code_gen');
450
+ const ready = codeGen.filter((i) => i.status === 'succeeded').length;
451
+ return { ready, total: codeGen.length };
452
+ }
453
+ summaryOf(session) {
454
+ const codeGen = [...session.workItems.values()].filter((i) => i.kind === 'code_gen');
455
+ return {
456
+ successCount: codeGen.filter((i) => i.status === 'succeeded').length,
457
+ failureCount: codeGen.filter((i) => i.status === 'failed').length,
458
+ cancelledCount: codeGen.filter((i) => i.status === 'cancelled').length,
459
+ variants: codeGen.map((i) => {
460
+ const input = i.input;
461
+ return {
462
+ workItemId: i.id,
463
+ status: i.status,
464
+ label: input.briefLabel,
465
+ };
466
+ }),
467
+ };
468
+ }
469
+ }
470
+ exports.SessionStore = SessionStore;
471
+ function clampCount(count) {
472
+ if (count === undefined)
473
+ return DEFAULT_VARIANT_COUNT;
474
+ if (count < 2)
475
+ return 2;
476
+ if (count > MAX_VARIANT_COUNT)
477
+ return MAX_VARIANT_COUNT;
478
+ return count;
479
+ }
480
+ //# sourceMappingURL=SessionStore.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"SessionStore.js","sourceRoot":"","sources":["../../../src/mcp/agent-variants/SessionStore.ts"],"names":[],"mappings":"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"}