mstro-app 0.4.51 → 0.5.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +10 -5
- package/bin/mstro.js +1 -1
- package/dist/server/cli/headless/claude-invoker-stall.d.ts.map +1 -1
- package/dist/server/cli/headless/claude-invoker-stall.js +7 -2
- package/dist/server/cli/headless/claude-invoker-stall.js.map +1 -1
- package/dist/server/cli/headless/claude-invoker.js +1 -1
- package/dist/server/cli/headless/claude-invoker.js.map +1 -1
- package/dist/server/cli/headless/runner.d.ts.map +1 -1
- package/dist/server/cli/headless/runner.js +63 -67
- package/dist/server/cli/headless/runner.js.map +1 -1
- package/dist/server/cli/headless/stall-assessor.d.ts.map +1 -1
- package/dist/server/cli/headless/stall-assessor.js +9 -4
- package/dist/server/cli/headless/stall-assessor.js.map +1 -1
- package/dist/server/cli/improvisation-history-store.d.ts +16 -0
- package/dist/server/cli/improvisation-history-store.d.ts.map +1 -0
- package/dist/server/cli/improvisation-history-store.js +52 -0
- package/dist/server/cli/improvisation-history-store.js.map +1 -0
- package/dist/server/cli/improvisation-movements.d.ts +31 -0
- package/dist/server/cli/improvisation-movements.d.ts.map +1 -0
- package/dist/server/cli/improvisation-movements.js +93 -0
- package/dist/server/cli/improvisation-movements.js.map +1 -0
- package/dist/server/cli/improvisation-output-queue.d.ts +13 -0
- package/dist/server/cli/improvisation-output-queue.d.ts.map +1 -0
- package/dist/server/cli/improvisation-output-queue.js +40 -0
- package/dist/server/cli/improvisation-output-queue.js.map +1 -0
- package/dist/server/cli/improvisation-retry.d.ts +21 -51
- package/dist/server/cli/improvisation-retry.d.ts.map +1 -1
- package/dist/server/cli/improvisation-retry.js +18 -433
- package/dist/server/cli/improvisation-retry.js.map +1 -1
- package/dist/server/cli/improvisation-session-manager.d.ts +10 -8
- package/dist/server/cli/improvisation-session-manager.d.ts.map +1 -1
- package/dist/server/cli/improvisation-session-manager.js +53 -148
- package/dist/server/cli/improvisation-session-manager.js.map +1 -1
- package/dist/server/cli/retry/retry-best-result.d.ts +4 -0
- package/dist/server/cli/retry/retry-best-result.d.ts.map +1 -0
- package/dist/server/cli/retry/retry-best-result.js +61 -0
- package/dist/server/cli/retry/retry-best-result.js.map +1 -0
- package/dist/server/cli/retry/retry-context-loss.d.ts +6 -0
- package/dist/server/cli/retry/retry-context-loss.d.ts.map +1 -0
- package/dist/server/cli/retry/retry-context-loss.js +68 -0
- package/dist/server/cli/retry/retry-context-loss.js.map +1 -0
- package/dist/server/cli/retry/retry-premature-completion.d.ts +5 -0
- package/dist/server/cli/retry/retry-premature-completion.d.ts.map +1 -0
- package/dist/server/cli/retry/retry-premature-completion.js +81 -0
- package/dist/server/cli/retry/retry-premature-completion.js.map +1 -0
- package/dist/server/cli/retry/retry-recovery-strategies.d.ts +13 -0
- package/dist/server/cli/retry/retry-recovery-strategies.d.ts.map +1 -0
- package/dist/server/cli/retry/retry-recovery-strategies.js +166 -0
- package/dist/server/cli/retry/retry-recovery-strategies.js.map +1 -0
- package/dist/server/cli/retry/retry-resume-strategy.d.ts +12 -0
- package/dist/server/cli/retry/retry-resume-strategy.d.ts.map +1 -0
- package/dist/server/cli/retry/retry-resume-strategy.js +22 -0
- package/dist/server/cli/retry/retry-resume-strategy.js.map +1 -0
- package/dist/server/cli/retry/retry-runner-factory.d.ts +11 -0
- package/dist/server/cli/retry/retry-runner-factory.d.ts.map +1 -0
- package/dist/server/cli/retry/retry-runner-factory.js +60 -0
- package/dist/server/cli/retry/retry-runner-factory.js.map +1 -0
- package/dist/server/cli/retry/retry-tool-results.d.ts +9 -0
- package/dist/server/cli/retry/retry-tool-results.d.ts.map +1 -0
- package/dist/server/cli/retry/retry-tool-results.js +24 -0
- package/dist/server/cli/retry/retry-tool-results.js.map +1 -0
- package/dist/server/cli/retry/retry-types.d.ts +30 -0
- package/dist/server/cli/retry/retry-types.d.ts.map +1 -0
- package/dist/server/cli/retry/retry-types.js +4 -0
- package/dist/server/cli/retry/retry-types.js.map +1 -0
- package/dist/server/index.js +21 -109
- package/dist/server/index.js.map +1 -1
- package/dist/server/server-setup.d.ts +16 -1
- package/dist/server/server-setup.d.ts.map +1 -1
- package/dist/server/server-setup.js +107 -0
- package/dist/server/server-setup.js.map +1 -1
- package/dist/server/services/plan/board-config.d.ts +21 -0
- package/dist/server/services/plan/board-config.d.ts.map +1 -0
- package/dist/server/services/plan/board-config.js +112 -0
- package/dist/server/services/plan/board-config.js.map +1 -0
- package/dist/server/services/plan/composer.d.ts +1 -1
- package/dist/server/services/plan/composer.d.ts.map +1 -1
- package/dist/server/services/plan/composer.js +7 -5
- package/dist/server/services/plan/composer.js.map +1 -1
- package/dist/server/services/plan/executor.d.ts +48 -48
- package/dist/server/services/plan/executor.d.ts.map +1 -1
- package/dist/server/services/plan/executor.js +157 -455
- package/dist/server/services/plan/executor.js.map +1 -1
- package/dist/server/services/plan/issue-loader.d.ts +16 -0
- package/dist/server/services/plan/issue-loader.d.ts.map +1 -0
- package/dist/server/services/plan/issue-loader.js +46 -0
- package/dist/server/services/plan/issue-loader.js.map +1 -0
- package/dist/server/services/plan/issue-writer.d.ts +34 -0
- package/dist/server/services/plan/issue-writer.d.ts.map +1 -0
- package/dist/server/services/plan/issue-writer.js +110 -0
- package/dist/server/services/plan/issue-writer.js.map +1 -0
- package/dist/server/services/plan/output-manager.d.ts.map +1 -1
- package/dist/server/services/plan/output-manager.js +2 -1
- package/dist/server/services/plan/output-manager.js.map +1 -1
- package/dist/server/services/plan/progress-log.d.ts +11 -0
- package/dist/server/services/plan/progress-log.d.ts.map +1 -0
- package/dist/server/services/plan/progress-log.js +81 -0
- package/dist/server/services/plan/progress-log.js.map +1 -0
- package/dist/server/services/plan/prompt-builder.d.ts.map +1 -1
- package/dist/server/services/plan/prompt-builder.js +48 -31
- package/dist/server/services/plan/prompt-builder.js.map +1 -1
- package/dist/server/services/plan/readiness-planner.d.ts +15 -0
- package/dist/server/services/plan/readiness-planner.d.ts.map +1 -0
- package/dist/server/services/plan/readiness-planner.js +41 -0
- package/dist/server/services/plan/readiness-planner.js.map +1 -0
- package/dist/server/services/plan/review-gate.d.ts +31 -0
- package/dist/server/services/plan/review-gate.d.ts.map +1 -1
- package/dist/server/services/plan/review-gate.js +52 -2
- package/dist/server/services/plan/review-gate.js.map +1 -1
- package/dist/server/services/platform.d.ts +56 -0
- package/dist/server/services/platform.d.ts.map +1 -1
- package/dist/server/services/platform.js +154 -52
- package/dist/server/services/platform.js.map +1 -1
- package/dist/server/services/websocket/file-download-handler.d.ts +17 -0
- package/dist/server/services/websocket/file-download-handler.d.ts.map +1 -0
- package/dist/server/services/websocket/file-download-handler.js +165 -0
- package/dist/server/services/websocket/file-download-handler.js.map +1 -0
- package/dist/server/services/websocket/git-branch-handlers.d.ts +1 -1
- package/dist/server/services/websocket/git-branch-handlers.d.ts.map +1 -1
- package/dist/server/services/websocket/git-branch-handlers.js +21 -1
- package/dist/server/services/websocket/git-branch-handlers.js.map +1 -1
- package/dist/server/services/websocket/git-handlers.js +1 -1
- package/dist/server/services/websocket/git-handlers.js.map +1 -1
- package/dist/server/services/websocket/git-worktree-handlers.d.ts +2 -0
- package/dist/server/services/websocket/git-worktree-handlers.d.ts.map +1 -1
- package/dist/server/services/websocket/git-worktree-handlers.js +30 -4
- package/dist/server/services/websocket/git-worktree-handlers.js.map +1 -1
- package/dist/server/services/websocket/handler-context.d.ts +15 -0
- package/dist/server/services/websocket/handler-context.d.ts.map +1 -1
- package/dist/server/services/websocket/handler.d.ts +7 -0
- package/dist/server/services/websocket/handler.d.ts.map +1 -1
- package/dist/server/services/websocket/handler.js +73 -11
- package/dist/server/services/websocket/handler.js.map +1 -1
- package/dist/server/services/websocket/msg-id-tracker.d.ts +21 -0
- package/dist/server/services/websocket/msg-id-tracker.d.ts.map +1 -0
- package/dist/server/services/websocket/msg-id-tracker.js +77 -0
- package/dist/server/services/websocket/msg-id-tracker.js.map +1 -0
- package/dist/server/services/websocket/quality-handlers.js +15 -3
- package/dist/server/services/websocket/quality-handlers.js.map +1 -1
- package/dist/server/services/websocket/quality-review-agent.js +2 -2
- package/dist/server/services/websocket/session-handlers.d.ts +48 -2
- package/dist/server/services/websocket/session-handlers.d.ts.map +1 -1
- package/dist/server/services/websocket/session-handlers.js +204 -65
- package/dist/server/services/websocket/session-handlers.js.map +1 -1
- package/dist/server/services/websocket/session-initialization.d.ts +2 -2
- package/dist/server/services/websocket/session-initialization.d.ts.map +1 -1
- package/dist/server/services/websocket/session-initialization.js +75 -17
- package/dist/server/services/websocket/session-initialization.js.map +1 -1
- package/dist/server/services/websocket/session-registry.d.ts +29 -1
- package/dist/server/services/websocket/session-registry.d.ts.map +1 -1
- package/dist/server/services/websocket/session-registry.js +53 -4
- package/dist/server/services/websocket/session-registry.js.map +1 -1
- package/dist/server/services/websocket/tab-broadcast.d.ts +24 -0
- package/dist/server/services/websocket/tab-broadcast.d.ts.map +1 -0
- package/dist/server/services/websocket/tab-broadcast.js +13 -0
- package/dist/server/services/websocket/tab-broadcast.js.map +1 -0
- package/dist/server/services/websocket/tab-event-buffer.d.ts +103 -0
- package/dist/server/services/websocket/tab-event-buffer.d.ts.map +1 -0
- package/dist/server/services/websocket/tab-event-buffer.js +107 -0
- package/dist/server/services/websocket/tab-event-buffer.js.map +1 -0
- package/dist/server/services/websocket/tab-event-replay.d.ts +20 -0
- package/dist/server/services/websocket/tab-event-replay.d.ts.map +1 -0
- package/dist/server/services/websocket/tab-event-replay.js +21 -0
- package/dist/server/services/websocket/tab-event-replay.js.map +1 -0
- package/dist/server/services/websocket/tab-handlers.d.ts +0 -1
- package/dist/server/services/websocket/tab-handlers.d.ts.map +1 -1
- package/dist/server/services/websocket/tab-handlers.js +2 -9
- package/dist/server/services/websocket/tab-handlers.js.map +1 -1
- package/dist/server/services/websocket/types.d.ts +15 -6
- package/dist/server/services/websocket/types.d.ts.map +1 -1
- package/dist/server/services/websocket/types.js +6 -4
- package/dist/server/services/websocket/types.js.map +1 -1
- package/package.json +1 -1
- package/server/README.md +1 -1
- package/server/cli/headless/claude-invoker-stall.ts +7 -2
- package/server/cli/headless/claude-invoker.ts +1 -1
- package/server/cli/headless/runner.ts +67 -72
- package/server/cli/headless/stall-assessor.ts +9 -4
- package/server/cli/headless/types.ts +1 -1
- package/server/cli/improvisation-history-store.ts +62 -0
- package/server/cli/improvisation-movements.ts +120 -0
- package/server/cli/improvisation-output-queue.ts +42 -0
- package/server/cli/improvisation-retry.ts +25 -600
- package/server/cli/improvisation-session-manager.ts +74 -160
- package/server/cli/retry/retry-best-result.ts +70 -0
- package/server/cli/retry/retry-context-loss.ts +87 -0
- package/server/cli/retry/retry-premature-completion.ts +113 -0
- package/server/cli/retry/retry-recovery-strategies.ts +247 -0
- package/server/cli/retry/retry-resume-strategy.ts +33 -0
- package/server/cli/retry/retry-runner-factory.ts +70 -0
- package/server/cli/retry/retry-tool-results.ts +31 -0
- package/server/cli/retry/retry-types.ts +32 -0
- package/server/index.ts +37 -123
- package/server/server-setup.ts +126 -1
- package/server/services/plan/agents/assess-stall.md +11 -4
- package/server/services/plan/board-config.ts +122 -0
- package/server/services/plan/composer.ts +7 -5
- package/server/services/plan/executor.ts +214 -467
- package/server/services/plan/issue-loader.ts +64 -0
- package/server/services/plan/issue-writer.ts +137 -0
- package/server/services/plan/output-manager.ts +2 -1
- package/server/services/plan/progress-log.ts +92 -0
- package/server/services/plan/prompt-builder.ts +73 -35
- package/server/services/plan/readiness-planner.ts +50 -0
- package/server/services/plan/review-gate.ts +102 -2
- package/server/services/platform.ts +163 -58
- package/server/services/websocket/file-download-handler.ts +191 -0
- package/server/services/websocket/git-branch-handlers.ts +28 -1
- package/server/services/websocket/git-handlers.ts +1 -1
- package/server/services/websocket/git-worktree-handlers.ts +31 -4
- package/server/services/websocket/handler-context.ts +15 -0
- package/server/services/websocket/handler.ts +76 -12
- package/server/services/websocket/msg-id-tracker.ts +84 -0
- package/server/services/websocket/quality-handlers.ts +16 -3
- package/server/services/websocket/quality-review-agent.ts +2 -2
- package/server/services/websocket/session-handlers.ts +213 -68
- package/server/services/websocket/session-initialization.ts +83 -19
- package/server/services/websocket/session-registry.ts +61 -4
- package/server/services/websocket/tab-broadcast.ts +38 -0
- package/server/services/websocket/tab-event-buffer.ts +159 -0
- package/server/services/websocket/tab-event-replay.ts +42 -0
- package/server/services/websocket/tab-handlers.ts +2 -9
- package/server/services/websocket/types.ts +17 -4
|
@@ -0,0 +1,93 @@
|
|
|
1
|
+
// Copyright (c) 2025-present Mstro, Inc. All rights reserved.
|
|
2
|
+
// Licensed under the MIT License. See LICENSE file for details.
|
|
3
|
+
/**
|
|
4
|
+
* Fallback `HeadlessRunResult` used when a cancellation fires before any
|
|
5
|
+
* run produces one. Shape matches the minimum fields the emit helpers
|
|
6
|
+
* look at downstream.
|
|
7
|
+
*/
|
|
8
|
+
export const CANCELLED_FALLBACK_RESULT = {
|
|
9
|
+
completed: false, needsHandoff: false, totalTokens: 0, sessionId: '',
|
|
10
|
+
output: '', exitCode: 1, signalName: 'SIGTERM',
|
|
11
|
+
};
|
|
12
|
+
/** Build a MovementRecord representing a successful execution. */
|
|
13
|
+
export function buildSuccessMovement(result, args, retryLog) {
|
|
14
|
+
return {
|
|
15
|
+
id: `prompt-${args.sequenceNumber}`,
|
|
16
|
+
sequenceNumber: args.sequenceNumber,
|
|
17
|
+
userPrompt: args.userPrompt,
|
|
18
|
+
timestamp: new Date().toISOString(),
|
|
19
|
+
tokensUsed: result.totalTokens,
|
|
20
|
+
summary: '',
|
|
21
|
+
filesModified: [],
|
|
22
|
+
assistantResponse: result.assistantResponse,
|
|
23
|
+
thinkingOutput: result.thinkingOutput,
|
|
24
|
+
toolUseHistory: result.toolUseHistory?.map(t => ({
|
|
25
|
+
toolName: t.toolName, toolId: t.toolId, toolInput: t.toolInput,
|
|
26
|
+
result: t.result, isError: t.isError, duration: t.duration,
|
|
27
|
+
})),
|
|
28
|
+
errorOutput: result.error,
|
|
29
|
+
durationMs: Date.now() - args.execStart,
|
|
30
|
+
retryLog: retryLog && retryLog.length > 0 ? retryLog : undefined,
|
|
31
|
+
...(args.isAutoContinue && { isAutoContinue: true }),
|
|
32
|
+
};
|
|
33
|
+
}
|
|
34
|
+
/** Build a MovementRecord representing a user-initiated cancel mid-run. */
|
|
35
|
+
export function buildCancelledMovement(result, args) {
|
|
36
|
+
return {
|
|
37
|
+
id: `prompt-${args.sequenceNumber}`,
|
|
38
|
+
sequenceNumber: args.sequenceNumber,
|
|
39
|
+
userPrompt: args.userPrompt,
|
|
40
|
+
timestamp: new Date().toISOString(),
|
|
41
|
+
tokensUsed: result ? result.totalTokens : 0,
|
|
42
|
+
summary: '',
|
|
43
|
+
filesModified: [],
|
|
44
|
+
assistantResponse: result?.assistantResponse,
|
|
45
|
+
thinkingOutput: result?.thinkingOutput,
|
|
46
|
+
toolUseHistory: result?.toolUseHistory?.map(t => ({
|
|
47
|
+
toolName: t.toolName, toolId: t.toolId, toolInput: t.toolInput,
|
|
48
|
+
result: t.result,
|
|
49
|
+
})),
|
|
50
|
+
errorOutput: 'Execution cancelled by user',
|
|
51
|
+
durationMs: Date.now() - args.execStart,
|
|
52
|
+
};
|
|
53
|
+
}
|
|
54
|
+
/** Build a MovementRecord for a thrown error inside executePrompt. */
|
|
55
|
+
export function buildErrorMovement(errorMessage, args) {
|
|
56
|
+
return {
|
|
57
|
+
id: `prompt-${args.sequenceNumber}`,
|
|
58
|
+
sequenceNumber: args.sequenceNumber,
|
|
59
|
+
userPrompt: args.userPrompt,
|
|
60
|
+
timestamp: new Date().toISOString(),
|
|
61
|
+
tokensUsed: 0,
|
|
62
|
+
summary: '',
|
|
63
|
+
filesModified: [],
|
|
64
|
+
errorOutput: errorMessage,
|
|
65
|
+
durationMs: Date.now() - args.execStart,
|
|
66
|
+
};
|
|
67
|
+
}
|
|
68
|
+
/**
|
|
69
|
+
* Heuristic for auto-continuing "end_turn" runs that appear incomplete:
|
|
70
|
+
* lots of thinking, not much visible output, and no tool work that
|
|
71
|
+
* already justifies the short response.
|
|
72
|
+
*/
|
|
73
|
+
export function shouldAutoContinue(result, autoContinueCount, maxAutoContinues, cancelled) {
|
|
74
|
+
if (autoContinueCount >= maxAutoContinues)
|
|
75
|
+
return false;
|
|
76
|
+
if (cancelled)
|
|
77
|
+
return false;
|
|
78
|
+
if (!result.completed || result.signalName)
|
|
79
|
+
return false;
|
|
80
|
+
if (result.stopReason !== 'end_turn')
|
|
81
|
+
return false;
|
|
82
|
+
const thinkingLen = result.thinkingOutput?.length ?? 0;
|
|
83
|
+
const responseLen = result.assistantResponse?.length ?? 0;
|
|
84
|
+
const successfulToolCalls = result.toolUseHistory?.filter(t => t.result !== undefined && !t.isError).length ?? 0;
|
|
85
|
+
if (thinkingLen < 500 || responseLen > 1000)
|
|
86
|
+
return false;
|
|
87
|
+
// When the agent executed tool calls and produced a non-trivial response,
|
|
88
|
+
// long thinking is expected — the work happened in the tools, not the text.
|
|
89
|
+
if (successfulToolCalls > 0 && responseLen > 200)
|
|
90
|
+
return false;
|
|
91
|
+
return thinkingLen >= responseLen * 3;
|
|
92
|
+
}
|
|
93
|
+
//# sourceMappingURL=improvisation-movements.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"improvisation-movements.js","sourceRoot":"","sources":["../../../server/cli/improvisation-movements.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
export declare class OutputQueue {
|
|
2
|
+
private readonly onEmit;
|
|
3
|
+
private queue;
|
|
4
|
+
private timer;
|
|
5
|
+
constructor(onEmit: (text: string) => void);
|
|
6
|
+
start(): void;
|
|
7
|
+
queue_(text: string): void;
|
|
8
|
+
/** Drain all buffered entries, emitting each via `onEmit` in order. */
|
|
9
|
+
flush(): void;
|
|
10
|
+
/** Stop the flush timer. Does NOT drain; call `flush()` first if needed. */
|
|
11
|
+
destroy(): void;
|
|
12
|
+
}
|
|
13
|
+
//# sourceMappingURL=improvisation-output-queue.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"improvisation-output-queue.d.ts","sourceRoot":"","sources":["../../../server/cli/improvisation-output-queue.ts"],"names":[],"mappings":"AAWA,qBAAa,WAAW;IAIV,OAAO,CAAC,QAAQ,CAAC,MAAM;IAHnC,OAAO,CAAC,KAAK,CAAkD;IAC/D,OAAO,CAAC,KAAK,CAA+B;gBAEf,MAAM,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,IAAI;IAE3D,KAAK,IAAI,IAAI;IAKb,MAAM,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI;IAI1B,uEAAuE;IACvE,KAAK,IAAI,IAAI;IAOb,4EAA4E;IAC5E,OAAO,IAAI,IAAI;CAMhB"}
|
|
@@ -0,0 +1,40 @@
|
|
|
1
|
+
// Copyright (c) 2025-present Mstro, Inc. All rights reserved.
|
|
2
|
+
// Licensed under the MIT License. See LICENSE file for details.
|
|
3
|
+
/**
|
|
4
|
+
* Small FIFO output buffer with a fixed-interval flush timer, used by the
|
|
5
|
+
* improvisation session manager to coalesce rapid stdout writes into
|
|
6
|
+
* steady `onOutput` emissions.
|
|
7
|
+
*/
|
|
8
|
+
const FLUSH_INTERVAL_MS = 50;
|
|
9
|
+
export class OutputQueue {
|
|
10
|
+
onEmit;
|
|
11
|
+
queue = [];
|
|
12
|
+
timer = null;
|
|
13
|
+
constructor(onEmit) {
|
|
14
|
+
this.onEmit = onEmit;
|
|
15
|
+
}
|
|
16
|
+
start() {
|
|
17
|
+
if (this.timer)
|
|
18
|
+
return;
|
|
19
|
+
this.timer = setInterval(() => { this.flush(); }, FLUSH_INTERVAL_MS);
|
|
20
|
+
}
|
|
21
|
+
queue_(text) {
|
|
22
|
+
this.queue.push({ text, timestamp: Date.now() });
|
|
23
|
+
}
|
|
24
|
+
/** Drain all buffered entries, emitting each via `onEmit` in order. */
|
|
25
|
+
flush() {
|
|
26
|
+
while (this.queue.length > 0) {
|
|
27
|
+
const item = this.queue.shift();
|
|
28
|
+
if (item)
|
|
29
|
+
this.onEmit(item.text);
|
|
30
|
+
}
|
|
31
|
+
}
|
|
32
|
+
/** Stop the flush timer. Does NOT drain; call `flush()` first if needed. */
|
|
33
|
+
destroy() {
|
|
34
|
+
if (this.timer) {
|
|
35
|
+
clearInterval(this.timer);
|
|
36
|
+
this.timer = null;
|
|
37
|
+
}
|
|
38
|
+
}
|
|
39
|
+
}
|
|
40
|
+
//# sourceMappingURL=improvisation-output-queue.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"improvisation-output-queue.js","sourceRoot":"","sources":["../../../server/cli/improvisation-output-queue.ts"],"names":[],"mappings":"AAAA,8DAA8D;AAC9D,gEAAgE;AAEhE;;;;GAIG;AAEH,MAAM,iBAAiB,GAAG,EAAE,CAAC;AAE7B,MAAM,OAAO,WAAW;IAIO;IAHrB,KAAK,GAA+C,EAAE,CAAC;IACvD,KAAK,GAA0B,IAAI,CAAC;IAE5C,YAA6B,MAA8B;QAA9B,WAAM,GAAN,MAAM,CAAwB;IAAG,CAAC;IAE/D,KAAK;QACH,IAAI,IAAI,CAAC,KAAK;YAAE,OAAO;QACvB,IAAI,CAAC,KAAK,GAAG,WAAW,CAAC,GAAG,EAAE,GAAG,IAAI,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC,EAAE,iBAAiB,CAAC,CAAC;IACvE,CAAC;IAED,MAAM,CAAC,IAAY;QACjB,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,SAAS,EAAE,IAAI,CAAC,GAAG,EAAE,EAAE,CAAC,CAAC;IACnD,CAAC;IAED,uEAAuE;IACvE,KAAK;QACH,OAAO,IAAI,CAAC,KAAK,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YAC7B,MAAM,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC,KAAK,EAAE,CAAC;YAChC,IAAI,IAAI;gBAAE,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QACnC,CAAC;IACH,CAAC;IAED,4EAA4E;IAC5E,OAAO;QACL,IAAI,IAAI,CAAC,KAAK,EAAE,CAAC;YACf,aAAa,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;YAC1B,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC;QACpB,CAAC;IACH,CAAC;CACF"}
|
|
@@ -1,52 +1,22 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
}
|
|
16
|
-
|
|
17
|
-
export
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
history: SessionHistory;
|
|
23
|
-
executionStartTimestamp: number | undefined;
|
|
24
|
-
}
|
|
25
|
-
/** Determine whether to use --resume and which session ID */
|
|
26
|
-
export declare function determineResumeStrategy(state: RetryLoopState, session: RetrySessionState): {
|
|
27
|
-
useResume: boolean;
|
|
28
|
-
resumeSessionId: string | undefined;
|
|
29
|
-
};
|
|
30
|
-
/** Create HeadlessRunner for one retry iteration */
|
|
31
|
-
export declare function createExecutionRunner(state: RetryLoopState, session: RetrySessionState, callbacks: RetryCallbacks, sequenceNumber: number, useResume: boolean, resumeSessionId: string | undefined, imageAttachments: FileAttachment[] | undefined, workingDirOverride?: string): HeadlessRunner;
|
|
32
|
-
/** Detect resume context loss (Path 1): session expired on --resume */
|
|
33
|
-
export declare function detectResumeContextLoss(result: HeadlessRunResult, state: RetryLoopState, useResume: boolean, maxRetries: number, nativeTimeouts: number, verbose: boolean): void;
|
|
34
|
-
/** Detect native timeout context loss (Path 2): tool timeouts caused confusion */
|
|
35
|
-
export declare function detectNativeTimeoutContextLoss(result: HeadlessRunResult, state: RetryLoopState, maxRetries: number, nativeTimeouts: number, verbose: boolean): Promise<void>;
|
|
36
|
-
/** Accumulate completed tool results from a run into the retry state */
|
|
37
|
-
export declare function accumulateToolResults(result: HeadlessRunResult, state: RetryLoopState): void;
|
|
38
|
-
/** Handle inter-movement context loss recovery (resume session expired) */
|
|
39
|
-
export declare function applyInterMovementRecovery(state: RetryLoopState, promptWithAttachments: string, history: MovementRecord[], callbacks: RetryCallbacks): void;
|
|
40
|
-
/** Handle native-timeout context loss recovery (tool timeouts caused confusion) */
|
|
41
|
-
export declare function applyNativeTimeoutRecovery(result: HeadlessRunResult, state: RetryLoopState, promptWithAttachments: string, session: RetrySessionState, callbacks: RetryCallbacks): void;
|
|
42
|
-
/** Check if context loss recovery should trigger. Returns true if loop should continue. */
|
|
43
|
-
export declare function shouldRetryContextLoss(result: HeadlessRunResult, state: RetryLoopState, session: RetrySessionState, useResume: boolean, nativeTimeouts: number, maxRetries: number, promptWithAttachments: string, callbacks: RetryCallbacks): boolean;
|
|
44
|
-
/** Handle tool timeout checkpoint. Returns true if loop should continue. */
|
|
45
|
-
export declare function applyToolTimeoutRetry(state: RetryLoopState, maxRetries: number, promptWithAttachments: string, callbacks: RetryCallbacks, model: string | undefined, effortLevel: string | undefined): boolean;
|
|
46
|
-
/** Detect and retry after a signal crash. Returns true if loop should continue. */
|
|
47
|
-
export declare function shouldRetrySignalCrash(result: HeadlessRunResult, state: RetryLoopState, session: RetrySessionState, maxRetries: number, promptWithAttachments: string, callbacks: RetryCallbacks): boolean;
|
|
48
|
-
/** Detect and retry premature completion. Returns true if loop should continue. */
|
|
49
|
-
export declare function shouldRetryPrematureCompletion(result: HeadlessRunResult, state: RetryLoopState, session: RetrySessionState, maxRetries: number, callbacks: RetryCallbacks): Promise<boolean>;
|
|
50
|
-
/** Select the best result across retries using Haiku assessment */
|
|
51
|
-
export declare function selectBestResult(state: RetryLoopState, result: HeadlessRunResult, userPrompt: string, verbose: boolean): Promise<HeadlessRunResult>;
|
|
1
|
+
/**
|
|
2
|
+
* Retry and recovery logic for improvisation sessions — barrel re-export.
|
|
3
|
+
*
|
|
4
|
+
* Implementation lives in focused modules under ./retry/:
|
|
5
|
+
* - retry-types.ts — RetryCallbacks, RetrySessionState
|
|
6
|
+
* - retry-resume-strategy.ts — whether/how to --resume
|
|
7
|
+
* - retry-runner-factory.ts — HeadlessRunner factory for a single iteration
|
|
8
|
+
* - retry-context-loss.ts — Path 1 + Path 2 context loss detection
|
|
9
|
+
* - retry-tool-results.ts — accumulate tool results across retries
|
|
10
|
+
* - retry-recovery-strategies.ts — context-loss, tool-timeout, signal-crash retries
|
|
11
|
+
* - retry-premature-completion.ts — detect + recover from unfinished end_turn
|
|
12
|
+
* - retry-best-result.ts — pick the best result across retries
|
|
13
|
+
*/
|
|
14
|
+
export { selectBestResult } from './retry/retry-best-result.js';
|
|
15
|
+
export { detectNativeTimeoutContextLoss, detectResumeContextLoss } from './retry/retry-context-loss.js';
|
|
16
|
+
export { shouldRetryPrematureCompletion } from './retry/retry-premature-completion.js';
|
|
17
|
+
export { applyInterMovementRecovery, applyNativeTimeoutRecovery, applyToolTimeoutRetry, shouldRetryContextLoss, shouldRetrySignalCrash, } from './retry/retry-recovery-strategies.js';
|
|
18
|
+
export { determineResumeStrategy } from './retry/retry-resume-strategy.js';
|
|
19
|
+
export { createExecutionRunner } from './retry/retry-runner-factory.js';
|
|
20
|
+
export { accumulateToolResults } from './retry/retry-tool-results.js';
|
|
21
|
+
export type { RetryCallbacks, RetrySessionState } from './retry/retry-types.js';
|
|
52
22
|
//# sourceMappingURL=improvisation-retry.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"improvisation-retry.d.ts","sourceRoot":"","sources":["../../../server/cli/improvisation-retry.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"improvisation-retry.d.ts","sourceRoot":"","sources":["../../../server/cli/improvisation-retry.ts"],"names":[],"mappings":"AAGA;;;;;;;;;;;;GAYG;AAEH,OAAO,EAAE,gBAAgB,EAAE,MAAM,8BAA8B,CAAC;AAChE,OAAO,EAAE,8BAA8B,EAAE,uBAAuB,EAAE,MAAM,+BAA+B,CAAC;AACxG,OAAO,EAAE,8BAA8B,EAAE,MAAM,uCAAuC,CAAC;AACvF,OAAO,EACL,0BAA0B,EAC1B,0BAA0B,EAC1B,qBAAqB,EACrB,sBAAsB,EACtB,sBAAsB,GACvB,MAAM,sCAAsC,CAAC;AAC9C,OAAO,EAAE,uBAAuB,EAAE,MAAM,kCAAkC,CAAC;AAC3E,OAAO,EAAE,qBAAqB,EAAE,MAAM,iCAAiC,CAAC;AACxE,OAAO,EAAE,qBAAqB,EAAE,MAAM,+BAA+B,CAAC;AACtE,YAAY,EAAE,cAAc,EAAE,iBAAiB,EAAE,MAAM,wBAAwB,CAAC"}
|