steroids-cli 0.9.43 → 0.10.13
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/cli/base-command.d.ts +16 -0
- package/dist/cli/base-command.d.ts.map +1 -0
- package/dist/cli/base-command.js +42 -0
- package/dist/cli/base-command.js.map +1 -0
- package/dist/cli/version-check.d.ts.map +1 -1
- package/dist/cli/version-check.js +28 -2
- package/dist/cli/version-check.js.map +1 -1
- package/dist/commands/disputes.js +15 -30
- package/dist/commands/disputes.js.map +1 -1
- package/dist/commands/gc.d.ts +1 -1
- package/dist/commands/gc.d.ts.map +1 -1
- package/dist/commands/gc.js +49 -64
- package/dist/commands/gc.js.map +1 -1
- package/dist/commands/git.d.ts.map +1 -1
- package/dist/commands/git.js +5 -8
- package/dist/commands/git.js.map +1 -1
- package/dist/commands/health-stuck.js +2 -6
- package/dist/commands/health-stuck.js.map +1 -1
- package/dist/commands/health.d.ts.map +1 -1
- package/dist/commands/health.js +2 -6
- package/dist/commands/health.js.map +1 -1
- package/dist/commands/llm.d.ts.map +1 -1
- package/dist/commands/llm.js +4 -12
- package/dist/commands/llm.js.map +1 -1
- package/dist/commands/locks.js +12 -24
- package/dist/commands/locks.js.map +1 -1
- package/dist/commands/loop-phases.d.ts +0 -4
- package/dist/commands/loop-phases.d.ts.map +1 -1
- package/dist/commands/loop-phases.js +75 -108
- package/dist/commands/loop-phases.js.map +1 -1
- package/dist/commands/purge.d.ts.map +1 -1
- package/dist/commands/purge.js +11 -22
- package/dist/commands/purge.js.map +1 -1
- package/dist/commands/runners-list.d.ts.map +1 -1
- package/dist/commands/runners-list.js +11 -30
- package/dist/commands/runners-list.js.map +1 -1
- package/dist/commands/runners-parallel.d.ts.map +1 -1
- package/dist/commands/runners-parallel.js +3 -7
- package/dist/commands/runners-parallel.js.map +1 -1
- package/dist/commands/runners.js +2 -9
- package/dist/commands/runners.js.map +1 -1
- package/dist/commands/scan.d.ts.map +1 -1
- package/dist/commands/scan.js +5 -8
- package/dist/commands/scan.js.map +1 -1
- package/dist/commands/sections-commands.d.ts.map +1 -1
- package/dist/commands/sections-commands.js +12 -24
- package/dist/commands/sections-commands.js.map +1 -1
- package/dist/commands/sections.js +6 -12
- package/dist/commands/sections.js.map +1 -1
- package/dist/commands/skills.d.ts +11 -0
- package/dist/commands/skills.d.ts.map +1 -0
- package/dist/commands/skills.js +181 -0
- package/dist/commands/skills.js.map +1 -0
- package/dist/commands/tasks-reset.d.ts.map +1 -1
- package/dist/commands/tasks-reset.js +3 -6
- package/dist/commands/tasks-reset.js.map +1 -1
- package/dist/commands/tasks.d.ts.map +1 -1
- package/dist/commands/tasks.js +49 -67
- package/dist/commands/tasks.js.map +1 -1
- package/dist/commands/web.d.ts.map +1 -1
- package/dist/commands/web.js +3 -1
- package/dist/commands/web.js.map +1 -1
- package/dist/config/loader.d.ts +1 -0
- package/dist/config/loader.d.ts.map +1 -1
- package/dist/config/loader.js.map +1 -1
- package/dist/database/connection.d.ts +7 -0
- package/dist/database/connection.d.ts.map +1 -1
- package/dist/database/connection.js +27 -3
- package/dist/database/connection.js.map +1 -1
- package/dist/database/queries.d.ts +9 -0
- package/dist/database/queries.d.ts.map +1 -1
- package/dist/database/queries.js +55 -18
- package/dist/database/queries.js.map +1 -1
- package/dist/database/schema.d.ts +2 -2
- package/dist/database/schema.d.ts.map +1 -1
- package/dist/database/schema.js +6 -0
- package/dist/database/schema.js.map +1 -1
- package/dist/git/status.d.ts.map +1 -1
- package/dist/git/status.js +13 -2
- package/dist/git/status.js.map +1 -1
- package/dist/git/submission-resolution.d.ts.map +1 -1
- package/dist/git/submission-resolution.js +3 -7
- package/dist/git/submission-resolution.js.map +1 -1
- package/dist/index.js +5 -0
- package/dist/index.js.map +1 -1
- package/dist/migrations/backfill.d.ts +3 -0
- package/dist/migrations/backfill.d.ts.map +1 -0
- package/dist/migrations/backfill.js +53 -0
- package/dist/migrations/backfill.js.map +1 -0
- package/dist/migrations/runner.d.ts.map +1 -1
- package/dist/migrations/runner.js +9 -0
- package/dist/migrations/runner.js.map +1 -1
- package/dist/orchestrator/base-runner.d.ts +14 -0
- package/dist/orchestrator/base-runner.d.ts.map +1 -0
- package/dist/orchestrator/base-runner.js +57 -0
- package/dist/orchestrator/base-runner.js.map +1 -0
- package/dist/orchestrator/coder.d.ts +3 -21
- package/dist/orchestrator/coder.d.ts.map +1 -1
- package/dist/orchestrator/coder.js +128 -259
- package/dist/orchestrator/coder.js.map +1 -1
- package/dist/orchestrator/coordinator.d.ts.map +1 -1
- package/dist/orchestrator/coordinator.js +1 -0
- package/dist/orchestrator/coordinator.js.map +1 -1
- package/dist/orchestrator/fallback-handler.d.ts +3 -23
- package/dist/orchestrator/fallback-handler.d.ts.map +1 -1
- package/dist/orchestrator/fallback-handler.js +40 -357
- package/dist/orchestrator/fallback-handler.js.map +1 -1
- package/dist/orchestrator/history-manager.d.ts +15 -0
- package/dist/orchestrator/history-manager.d.ts.map +1 -0
- package/dist/orchestrator/history-manager.js +93 -0
- package/dist/orchestrator/history-manager.js.map +1 -0
- package/dist/orchestrator/post-coder.d.ts.map +1 -1
- package/dist/orchestrator/post-coder.js +16 -24
- package/dist/orchestrator/post-coder.js.map +1 -1
- package/dist/orchestrator/post-reviewer.d.ts.map +1 -1
- package/dist/orchestrator/post-reviewer.js +25 -37
- package/dist/orchestrator/post-reviewer.js.map +1 -1
- package/dist/orchestrator/reviewer.d.ts +3 -27
- package/dist/orchestrator/reviewer.d.ts.map +1 -1
- package/dist/orchestrator/reviewer.js +182 -325
- package/dist/orchestrator/reviewer.js.map +1 -1
- package/dist/orchestrator/signal-parser.d.ts +32 -0
- package/dist/orchestrator/signal-parser.d.ts.map +1 -0
- package/dist/orchestrator/signal-parser.js +73 -0
- package/dist/orchestrator/signal-parser.js.map +1 -0
- package/dist/orchestrator/types.d.ts +9 -13
- package/dist/orchestrator/types.d.ts.map +1 -1
- package/dist/parallel/clone.d.ts.map +1 -1
- package/dist/parallel/clone.js +37 -2
- package/dist/parallel/clone.js.map +1 -1
- package/dist/parallel/merge-conflict-attempts.d.ts.map +1 -1
- package/dist/parallel/merge-conflict-attempts.js +4 -12
- package/dist/parallel/merge-conflict-attempts.js.map +1 -1
- package/dist/parallel/merge-conflict.d.ts.map +1 -1
- package/dist/parallel/merge-conflict.js +3 -10
- package/dist/parallel/merge-conflict.js.map +1 -1
- package/dist/parallel/merge-sealing.d.ts +0 -3
- package/dist/parallel/merge-sealing.d.ts.map +1 -1
- package/dist/parallel/merge-sealing.js +5 -9
- package/dist/parallel/merge-sealing.js.map +1 -1
- package/dist/prompts/coder.d.ts +1 -1
- package/dist/prompts/coder.d.ts.map +1 -1
- package/dist/prompts/coder.js +66 -119
- package/dist/prompts/coder.js.map +1 -1
- package/dist/prompts/prompt-helpers.d.ts +4 -0
- package/dist/prompts/prompt-helpers.d.ts.map +1 -1
- package/dist/prompts/prompt-helpers.js +35 -0
- package/dist/prompts/prompt-helpers.js.map +1 -1
- package/dist/prompts/reviewer.d.ts.map +1 -1
- package/dist/prompts/reviewer.js +1 -3
- package/dist/prompts/reviewer.js.map +1 -1
- package/dist/runners/activity-log.d.ts.map +1 -1
- package/dist/runners/activity-log.js +12 -36
- package/dist/runners/activity-log.js.map +1 -1
- package/dist/runners/credit-pause.d.ts.map +1 -1
- package/dist/runners/credit-pause.js +7 -10
- package/dist/runners/credit-pause.js.map +1 -1
- package/dist/runners/daemon.d.ts +0 -3
- package/dist/runners/daemon.d.ts.map +1 -1
- package/dist/runners/daemon.js +23 -50
- package/dist/runners/daemon.js.map +1 -1
- package/dist/runners/global-db.d.ts +6 -1
- package/dist/runners/global-db.d.ts.map +1 -1
- package/dist/runners/global-db.js +87 -71
- package/dist/runners/global-db.js.map +1 -1
- package/dist/runners/orchestrator-loop.d.ts.map +1 -1
- package/dist/runners/orchestrator-loop.js +2 -6
- package/dist/runners/orchestrator-loop.js.map +1 -1
- package/dist/runners/projects.d.ts +2 -20
- package/dist/runners/projects.d.ts.map +1 -1
- package/dist/runners/projects.js +24 -102
- package/dist/runners/projects.js.map +1 -1
- package/dist/runners/wakeup-checks.d.ts +0 -3
- package/dist/runners/wakeup-checks.d.ts.map +1 -1
- package/dist/runners/wakeup-checks.js +11 -26
- package/dist/runners/wakeup-checks.js.map +1 -1
- package/dist/runners/wakeup-timing.d.ts.map +1 -1
- package/dist/runners/wakeup-timing.js +4 -12
- package/dist/runners/wakeup-timing.js.map +1 -1
- package/dist/runners/wakeup.d.ts.map +1 -1
- package/dist/runners/wakeup.js +29 -61
- package/dist/runners/wakeup.js.map +1 -1
- package/migrations/004_add_section_dependencies.sql +1 -1
- package/migrations/018_expand_audit_columns.sql +13 -0
- package/migrations/019_add_task_start_sha.sql +9 -0
- package/migrations/manifest.json +17 -1
- package/package.json +3 -3
- package/dist/orchestrator/schemas.d.ts +0 -26
- package/dist/orchestrator/schemas.d.ts.map +0 -1
- package/dist/orchestrator/schemas.js +0 -154
- package/dist/orchestrator/schemas.js.map +0 -1
- package/dist/parallel/merge.test.d.ts +0 -5
- package/dist/parallel/merge.test.d.ts.map +0 -1
- package/dist/parallel/merge.test.js +0 -322
- package/dist/parallel/merge.test.js.map +0 -1
|
@@ -1,382 +1,65 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
/**
|
|
3
|
-
*
|
|
4
|
-
*
|
|
3
|
+
* Legacy fallback handler wrapping the new SignalParser.
|
|
4
|
+
* This file will be fully replaced in Task 5/6 when loop-phases is refactored,
|
|
5
|
+
* but for now it bridges the gap to allow deleting schemas.ts.
|
|
5
6
|
*/
|
|
6
7
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
7
8
|
exports.OrchestrationFallbackHandler = void 0;
|
|
8
|
-
const
|
|
9
|
+
const signal_parser_js_1 = require("./signal-parser.js");
|
|
9
10
|
class OrchestrationFallbackHandler {
|
|
10
|
-
static UNQUOTED_KEY_REGEX = /([{,]\s*)([A-Za-z_][A-Za-z0-9_]*)(\s*:)/g;
|
|
11
|
-
static SINGLE_QUOTED_STRING_REGEX = /'((?:\\.|[^'\\])*)'/g;
|
|
12
|
-
hasCompletionIndicator(lowerOutput) {
|
|
13
|
-
if (/\b(?:not|no|not yet|still not|cannot|can't|unable to)\s+(?:task\s+)?(?:is\s+)?(?:complete|complete[d]?|finished|done|ready)\b/.test(lowerOutput)) {
|
|
14
|
-
return false;
|
|
15
|
-
}
|
|
16
|
-
return /\b(?:task\s+)?(?:is\s+)?(?:complete|complete[d]?|implemented|finished|done|ready for review|ready)\b/.test(lowerOutput);
|
|
17
|
-
}
|
|
18
|
-
hasCommitIndicator(lowerOutput) {
|
|
19
|
-
if (/\b(commit|committed)\b.*\b(?:fail|failed|failure|error|unable|cannot|denied|rejected|blocked|aborted)\b/.test(lowerOutput)) {
|
|
20
|
-
return false;
|
|
21
|
-
}
|
|
22
|
-
if (/\b(?:fail|failed|error|unable|cannot|denied|rejected|blocked|aborted)\b.*\b(commit|committed)\b/.test(lowerOutput)) {
|
|
23
|
-
return false;
|
|
24
|
-
}
|
|
25
|
-
return /\b(committed|commit)\b/.test(lowerOutput);
|
|
26
|
-
}
|
|
27
|
-
hasErrorIndicator(lowerOutput) {
|
|
28
|
-
return /\b(fatal|error|failed)\b/.test(lowerOutput);
|
|
29
|
-
}
|
|
30
|
-
normalizeJsonCandidate(raw) {
|
|
31
|
-
let normalized = raw.trim();
|
|
32
|
-
// Strip markdown fences if present
|
|
33
|
-
const fencedMatch = normalized.match(/^```(?:json)?\s*([\s\S]*?)\s*```$/i);
|
|
34
|
-
if (fencedMatch?.[1]) {
|
|
35
|
-
normalized = fencedMatch[1].trim();
|
|
36
|
-
}
|
|
37
|
-
// Normalize smart quotes
|
|
38
|
-
normalized = normalized
|
|
39
|
-
.replace(/[“”]/g, '"')
|
|
40
|
-
.replace(/[‘’]/g, "'");
|
|
41
|
-
// Quote unquoted object keys: { action: "retry" } -> { "action": "retry" }
|
|
42
|
-
normalized = normalized.replace(OrchestrationFallbackHandler.UNQUOTED_KEY_REGEX, '$1"$2"$3');
|
|
43
|
-
// Convert single-quoted strings to JSON-safe double-quoted strings
|
|
44
|
-
normalized = normalized.replace(OrchestrationFallbackHandler.SINGLE_QUOTED_STRING_REGEX, (_match, inner) => `"${inner.replace(/"/g, '\\"')}"`);
|
|
45
|
-
// Remove trailing commas
|
|
46
|
-
normalized = normalized.replace(/,\s*([}\]])/g, '$1');
|
|
47
|
-
// Normalize python-ish literals that occasionally leak
|
|
48
|
-
normalized = normalized
|
|
49
|
-
.replace(/\bTrue\b/g, 'true')
|
|
50
|
-
.replace(/\bFalse\b/g, 'false')
|
|
51
|
-
.replace(/\bNone\b/g, 'null');
|
|
52
|
-
return normalized;
|
|
53
|
-
}
|
|
54
|
-
tryRepairAndParse(rawOutput, validator, successLog) {
|
|
55
|
-
const candidates = [rawOutput];
|
|
56
|
-
const jsonBlock = rawOutput.match(/```json\s*([\s\S]*?)\s*```/i);
|
|
57
|
-
if (jsonBlock?.[1]) {
|
|
58
|
-
candidates.push(jsonBlock[1]);
|
|
59
|
-
}
|
|
60
|
-
const start = rawOutput.indexOf('{');
|
|
61
|
-
const end = rawOutput.lastIndexOf('}');
|
|
62
|
-
if (start !== -1 && end !== -1 && end > start) {
|
|
63
|
-
candidates.push(rawOutput.substring(start, end + 1));
|
|
64
|
-
}
|
|
65
|
-
for (const candidate of candidates) {
|
|
66
|
-
const normalized = this.normalizeJsonCandidate(candidate);
|
|
67
|
-
try {
|
|
68
|
-
const parsed = JSON.parse(normalized);
|
|
69
|
-
const { valid, data } = validator(parsed);
|
|
70
|
-
if (valid) {
|
|
71
|
-
console.log(successLog);
|
|
72
|
-
return data;
|
|
73
|
-
}
|
|
74
|
-
}
|
|
75
|
-
catch {
|
|
76
|
-
// Continue to next candidate
|
|
77
|
-
}
|
|
78
|
-
}
|
|
79
|
-
return null;
|
|
80
|
-
}
|
|
81
|
-
/**
|
|
82
|
-
* Parse coder orchestrator output with multi-layer fallback
|
|
83
|
-
*/
|
|
84
11
|
parseCoderOutput(rawOutput) {
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
const parsed = JSON.parse(rawOutput);
|
|
88
|
-
const { valid, data } = (0, schemas_js_1.validateCoderResultWithLogging)(parsed);
|
|
89
|
-
if (valid) {
|
|
90
|
-
console.log('[Orchestrator] ✓ Layer 1: Direct JSON parse succeeded');
|
|
91
|
-
return data;
|
|
92
|
-
}
|
|
93
|
-
}
|
|
94
|
-
catch (e) {
|
|
95
|
-
// Continue to next layer
|
|
96
|
-
}
|
|
97
|
-
// Layer 2: Extract from markdown code block
|
|
98
|
-
const jsonBlock = rawOutput.match(/```json\s*([\s\S]*?)\s*```/);
|
|
99
|
-
if (jsonBlock) {
|
|
100
|
-
try {
|
|
101
|
-
const parsed = JSON.parse(jsonBlock[1]);
|
|
102
|
-
const { valid, data } = (0, schemas_js_1.validateCoderResultWithLogging)(parsed);
|
|
103
|
-
if (valid) {
|
|
104
|
-
console.log('[Orchestrator] ✓ Layer 2: Markdown extraction succeeded');
|
|
105
|
-
return data;
|
|
106
|
-
}
|
|
107
|
-
}
|
|
108
|
-
catch (e) {
|
|
109
|
-
// Continue to next layer
|
|
110
|
-
}
|
|
111
|
-
}
|
|
112
|
-
// Layer 3: Find first { to last }
|
|
113
|
-
const start = rawOutput.indexOf('{');
|
|
114
|
-
const end = rawOutput.lastIndexOf('}');
|
|
115
|
-
if (start !== -1 && end !== -1 && end > start) {
|
|
116
|
-
try {
|
|
117
|
-
const parsed = JSON.parse(rawOutput.substring(start, end + 1));
|
|
118
|
-
const { valid, data } = (0, schemas_js_1.validateCoderResultWithLogging)(parsed);
|
|
119
|
-
if (valid) {
|
|
120
|
-
console.log('[Orchestrator] ✓ Layer 3: Substring extraction succeeded');
|
|
121
|
-
return data;
|
|
122
|
-
}
|
|
123
|
-
}
|
|
124
|
-
catch (e) {
|
|
125
|
-
// Continue to next layer
|
|
126
|
-
}
|
|
127
|
-
}
|
|
128
|
-
// Layer 4: Repair malformed JSON and validate
|
|
129
|
-
const repaired = this.tryRepairAndParse(rawOutput, schemas_js_1.validateCoderResultWithLogging, '[Orchestrator] ✓ Layer 4: JSON repair succeeded');
|
|
130
|
-
if (repaired) {
|
|
131
|
-
return repaired;
|
|
132
|
-
}
|
|
133
|
-
// Layer 5: Keyword fallback
|
|
134
|
-
console.warn('[Orchestrator] ⚠ Layer 5: Using keyword fallback (all parsing+repair failed)');
|
|
135
|
-
return this.keywordFallbackCoder(rawOutput);
|
|
136
|
-
}
|
|
137
|
-
/**
|
|
138
|
-
* Parse reviewer orchestrator output with multi-layer fallback
|
|
139
|
-
*/
|
|
140
|
-
parseReviewerOutput(rawOutput) {
|
|
141
|
-
// Layer 1: Direct JSON parse
|
|
142
|
-
try {
|
|
143
|
-
const parsed = JSON.parse(rawOutput);
|
|
144
|
-
const { valid, data } = (0, schemas_js_1.validateReviewerResultWithLogging)(parsed);
|
|
145
|
-
if (valid) {
|
|
146
|
-
console.log('[Orchestrator] ✓ Layer 1: Direct JSON parse succeeded');
|
|
147
|
-
return data;
|
|
148
|
-
}
|
|
149
|
-
}
|
|
150
|
-
catch (e) {
|
|
151
|
-
// Continue to next layer
|
|
152
|
-
}
|
|
153
|
-
// Layer 2: Extract from markdown code block
|
|
154
|
-
const jsonBlock = rawOutput.match(/```json\s*([\s\S]*?)\s*```/);
|
|
155
|
-
if (jsonBlock) {
|
|
156
|
-
try {
|
|
157
|
-
const parsed = JSON.parse(jsonBlock[1]);
|
|
158
|
-
const { valid, data } = (0, schemas_js_1.validateReviewerResultWithLogging)(parsed);
|
|
159
|
-
if (valid) {
|
|
160
|
-
console.log('[Orchestrator] ✓ Layer 2: Markdown extraction succeeded');
|
|
161
|
-
return data;
|
|
162
|
-
}
|
|
163
|
-
}
|
|
164
|
-
catch (e) {
|
|
165
|
-
// Continue to next layer
|
|
166
|
-
}
|
|
167
|
-
}
|
|
168
|
-
// Layer 3: Find first { to last }
|
|
169
|
-
const start = rawOutput.indexOf('{');
|
|
170
|
-
const end = rawOutput.lastIndexOf('}');
|
|
171
|
-
if (start !== -1 && end !== -1 && end > start) {
|
|
172
|
-
try {
|
|
173
|
-
const parsed = JSON.parse(rawOutput.substring(start, end + 1));
|
|
174
|
-
const { valid, data } = (0, schemas_js_1.validateReviewerResultWithLogging)(parsed);
|
|
175
|
-
if (valid) {
|
|
176
|
-
console.log('[Orchestrator] ✓ Layer 3: Substring extraction succeeded');
|
|
177
|
-
return data;
|
|
178
|
-
}
|
|
179
|
-
}
|
|
180
|
-
catch (e) {
|
|
181
|
-
// Continue to next layer
|
|
182
|
-
}
|
|
183
|
-
}
|
|
184
|
-
// Layer 4: Repair malformed JSON and validate
|
|
185
|
-
const repaired = this.tryRepairAndParse(rawOutput, schemas_js_1.validateReviewerResultWithLogging, '[Orchestrator] ✓ Layer 4: JSON repair succeeded');
|
|
186
|
-
if (repaired) {
|
|
187
|
-
return repaired;
|
|
188
|
-
}
|
|
189
|
-
// Layer 5: Explicit decision fallback
|
|
190
|
-
console.warn('[Orchestrator] ⚠ Layer 5: Using explicit decision fallback (all parsing+repair failed)');
|
|
191
|
-
return this.keywordFallbackReviewer(rawOutput);
|
|
192
|
-
}
|
|
193
|
-
extractExplicitReviewerDecision(output) {
|
|
194
|
-
const map = {
|
|
195
|
-
APPROVE: 'approve',
|
|
196
|
-
REJECT: 'reject',
|
|
197
|
-
DISPUTE: 'dispute',
|
|
198
|
-
SKIP: 'skip',
|
|
199
|
-
};
|
|
200
|
-
// Use the LAST DECISION token in the output, not the first.
|
|
201
|
-
// When a provider session is resumed, the full conversation history is replayed
|
|
202
|
-
// and old DECISION tokens from previous reviews appear before the current one.
|
|
203
|
-
const decisionPattern = /(?:^|[\n\r])\s*(?:\*\*)?DECISION(?:\*\*)?\s*(?::|-)\s*(APPROVE|REJECT|DISPUTE|SKIP)\b/gim;
|
|
204
|
-
let lastMatch = null;
|
|
205
|
-
let match;
|
|
206
|
-
while ((match = decisionPattern.exec(output)) !== null) {
|
|
207
|
-
lastMatch = match;
|
|
208
|
-
}
|
|
209
|
-
if (lastMatch?.[1]) {
|
|
210
|
-
return map[lastMatch[1].toUpperCase()] ?? null;
|
|
211
|
-
}
|
|
212
|
-
// Fallback: last non-empty line starting with a bare decision token
|
|
213
|
-
const lines = output.split(/[\n\r]+/);
|
|
214
|
-
for (let i = lines.length - 1; i >= 0; i--) {
|
|
215
|
-
const line = lines[i].trim();
|
|
216
|
-
if (!line)
|
|
217
|
-
continue;
|
|
218
|
-
const token = line.match(/^(APPROVE|REJECT|DISPUTE|SKIP)\b/i)?.[1];
|
|
219
|
-
if (token) {
|
|
220
|
-
return map[token.toUpperCase()] ?? null;
|
|
221
|
-
}
|
|
222
|
-
break; // only check the last non-empty line
|
|
223
|
-
}
|
|
224
|
-
return null;
|
|
225
|
-
}
|
|
226
|
-
/**
|
|
227
|
-
* Keyword-based fallback for coder orchestrator
|
|
228
|
-
*/
|
|
229
|
-
keywordFallbackCoder(output) {
|
|
230
|
-
const lower = output.toLowerCase();
|
|
231
|
-
// Check for timeout
|
|
232
|
-
if (/timeout|timed out/.test(lower)) {
|
|
233
|
-
return {
|
|
234
|
-
action: 'retry',
|
|
235
|
-
reasoning: 'FALLBACK: Detected timeout',
|
|
236
|
-
commits: [],
|
|
237
|
-
next_status: 'in_progress',
|
|
238
|
-
metadata: {
|
|
239
|
-
files_changed: 0,
|
|
240
|
-
confidence: 'low',
|
|
241
|
-
exit_clean: false,
|
|
242
|
-
has_commits: false
|
|
243
|
-
}
|
|
244
|
-
};
|
|
245
|
-
}
|
|
246
|
-
// Check for errors
|
|
247
|
-
if (this.hasErrorIndicator(lower) && !this.hasCommitIndicator(lower)) {
|
|
248
|
-
return {
|
|
249
|
-
action: 'error',
|
|
250
|
-
reasoning: 'FALLBACK: Detected error keywords',
|
|
251
|
-
commits: [],
|
|
252
|
-
next_status: 'failed',
|
|
253
|
-
metadata: {
|
|
254
|
-
files_changed: 0,
|
|
255
|
-
confidence: 'low',
|
|
256
|
-
exit_clean: false,
|
|
257
|
-
has_commits: false
|
|
258
|
-
}
|
|
259
|
-
};
|
|
260
|
-
}
|
|
261
|
-
// Check for completion with commit
|
|
262
|
-
if (this.hasCommitIndicator(lower) && !this.hasErrorIndicator(lower)) {
|
|
263
|
-
return {
|
|
264
|
-
action: 'submit',
|
|
265
|
-
reasoning: 'FALLBACK: Detected commit keywords',
|
|
266
|
-
commits: [],
|
|
267
|
-
next_status: 'review',
|
|
268
|
-
metadata: {
|
|
269
|
-
files_changed: 0,
|
|
270
|
-
confidence: 'low',
|
|
271
|
-
exit_clean: true,
|
|
272
|
-
has_commits: false
|
|
273
|
-
}
|
|
274
|
-
};
|
|
275
|
-
}
|
|
276
|
-
// Check for completion signals
|
|
277
|
-
if (this.hasCompletionIndicator(lower)) {
|
|
12
|
+
const signal = signal_parser_js_1.SignalParser.parseCoderSignal(rawOutput);
|
|
13
|
+
if (signal === 'review') {
|
|
278
14
|
return {
|
|
279
15
|
action: 'submit',
|
|
280
|
-
reasoning: '
|
|
16
|
+
reasoning: 'SignalParser detected STATUS: REVIEW',
|
|
281
17
|
commits: [],
|
|
282
18
|
next_status: 'review',
|
|
283
|
-
|
|
284
|
-
|
|
285
|
-
|
|
286
|
-
|
|
287
|
-
has_commits: false
|
|
288
|
-
}
|
|
19
|
+
files_changed: 1,
|
|
20
|
+
confidence: 'high',
|
|
21
|
+
exit_clean: true,
|
|
22
|
+
has_commits: false
|
|
289
23
|
};
|
|
290
24
|
}
|
|
291
|
-
// Safe default: retry
|
|
292
25
|
return {
|
|
293
26
|
action: 'retry',
|
|
294
|
-
reasoning: '
|
|
27
|
+
reasoning: 'SignalParser detected unclear status',
|
|
295
28
|
commits: [],
|
|
296
29
|
next_status: 'in_progress',
|
|
297
|
-
|
|
298
|
-
|
|
299
|
-
|
|
300
|
-
|
|
301
|
-
has_commits: false
|
|
302
|
-
}
|
|
30
|
+
files_changed: 0,
|
|
31
|
+
confidence: 'low',
|
|
32
|
+
exit_clean: true,
|
|
33
|
+
has_commits: false
|
|
303
34
|
};
|
|
304
35
|
}
|
|
305
|
-
|
|
306
|
-
|
|
307
|
-
|
|
308
|
-
|
|
309
|
-
|
|
310
|
-
if (decision === '
|
|
311
|
-
|
|
312
|
-
|
|
313
|
-
|
|
314
|
-
|
|
315
|
-
|
|
316
|
-
metadata: {
|
|
317
|
-
rejection_count: 0,
|
|
318
|
-
confidence: 'low',
|
|
319
|
-
push_to_remote: true,
|
|
320
|
-
repeated_issue: false
|
|
321
|
-
}
|
|
322
|
-
};
|
|
323
|
-
}
|
|
324
|
-
if (decision === 'reject') {
|
|
325
|
-
return {
|
|
326
|
-
decision: 'reject',
|
|
327
|
-
reasoning: 'FALLBACK: Explicit DECISION token REJECT',
|
|
328
|
-
notes: 'Rejected - see reviewer output for details',
|
|
329
|
-
next_status: 'in_progress',
|
|
330
|
-
metadata: {
|
|
331
|
-
rejection_count: 0,
|
|
332
|
-
confidence: 'low',
|
|
333
|
-
push_to_remote: false,
|
|
334
|
-
repeated_issue: false
|
|
335
|
-
}
|
|
336
|
-
};
|
|
337
|
-
}
|
|
338
|
-
if (decision === 'dispute') {
|
|
339
|
-
return {
|
|
340
|
-
decision: 'dispute',
|
|
341
|
-
reasoning: 'FALLBACK: Explicit DECISION token DISPUTE',
|
|
342
|
-
notes: 'Dispute detected - human decision needed',
|
|
343
|
-
next_status: 'disputed',
|
|
344
|
-
metadata: {
|
|
345
|
-
rejection_count: 0,
|
|
346
|
-
confidence: 'low',
|
|
347
|
-
push_to_remote: false,
|
|
348
|
-
repeated_issue: false
|
|
349
|
-
}
|
|
350
|
-
};
|
|
351
|
-
}
|
|
352
|
-
if (decision === 'skip') {
|
|
353
|
-
return {
|
|
354
|
-
decision: 'skip',
|
|
355
|
-
reasoning: 'FALLBACK: Explicit DECISION token SKIP',
|
|
356
|
-
notes: 'Task skipped',
|
|
357
|
-
next_status: 'skipped',
|
|
358
|
-
metadata: {
|
|
359
|
-
rejection_count: 0,
|
|
360
|
-
confidence: 'low',
|
|
361
|
-
push_to_remote: true,
|
|
362
|
-
repeated_issue: false
|
|
363
|
-
}
|
|
364
|
-
};
|
|
365
|
-
}
|
|
366
|
-
// Safe default: unclear
|
|
36
|
+
parseReviewerOutput(rawOutput) {
|
|
37
|
+
const result = signal_parser_js_1.SignalParser.parseReviewerSignal(rawOutput);
|
|
38
|
+
let nextStatus = 'review';
|
|
39
|
+
if (result.decision === 'approve')
|
|
40
|
+
nextStatus = 'completed';
|
|
41
|
+
if (result.decision === 'reject')
|
|
42
|
+
nextStatus = 'in_progress';
|
|
43
|
+
if (result.decision === 'dispute')
|
|
44
|
+
nextStatus = 'disputed';
|
|
45
|
+
if (result.decision === 'skip')
|
|
46
|
+
nextStatus = 'skipped';
|
|
367
47
|
return {
|
|
368
|
-
decision:
|
|
369
|
-
reasoning:
|
|
370
|
-
notes:
|
|
371
|
-
|
|
372
|
-
|
|
373
|
-
|
|
374
|
-
|
|
375
|
-
|
|
376
|
-
|
|
377
|
-
}
|
|
48
|
+
decision: result.decision,
|
|
49
|
+
reasoning: `SignalParser detected ${result.decision}`,
|
|
50
|
+
notes: result.notes,
|
|
51
|
+
follow_up_tasks: result.followUpTasks,
|
|
52
|
+
next_status: nextStatus,
|
|
53
|
+
rejection_count: 0,
|
|
54
|
+
confidence: 'high',
|
|
55
|
+
push_to_remote: false,
|
|
56
|
+
repeated_issue: false
|
|
378
57
|
};
|
|
379
58
|
}
|
|
59
|
+
extractExplicitReviewerDecision(output) {
|
|
60
|
+
const result = signal_parser_js_1.SignalParser.parseReviewerSignal(output);
|
|
61
|
+
return result.decision === 'unclear' ? null : result.decision;
|
|
62
|
+
}
|
|
380
63
|
}
|
|
381
64
|
exports.OrchestrationFallbackHandler = OrchestrationFallbackHandler;
|
|
382
65
|
//# sourceMappingURL=fallback-handler.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"fallback-handler.js","sourceRoot":"","sources":["../../src/orchestrator/fallback-handler.ts"],"names":[],"mappings":";AAAA;;;
|
|
1
|
+
{"version":3,"file":"fallback-handler.js","sourceRoot":"","sources":["../../src/orchestrator/fallback-handler.ts"],"names":[],"mappings":";AAAA;;;;GAIG;;;AAGH,yDAAkD;AAElD,MAAa,4BAA4B;IACvC,gBAAgB,CAAC,SAAiB;QAChC,MAAM,MAAM,GAAG,+BAAY,CAAC,gBAAgB,CAAC,SAAS,CAAC,CAAC;QAExD,IAAI,MAAM,KAAK,QAAQ,EAAE,CAAC;YACxB,OAAO;gBACL,MAAM,EAAE,QAAQ;gBAChB,SAAS,EAAE,sCAAsC;gBACjD,OAAO,EAAE,EAAE;gBACX,WAAW,EAAE,QAAQ;gBACrB,aAAa,EAAE,CAAC;gBAChB,UAAU,EAAE,MAAM;gBAClB,UAAU,EAAE,IAAI;gBAChB,WAAW,EAAE,KAAK;aACnB,CAAC;QACJ,CAAC;QAED,OAAO;YACL,MAAM,EAAE,OAAO;YACf,SAAS,EAAE,sCAAsC;YACjD,OAAO,EAAE,EAAE;YACX,WAAW,EAAE,aAAa;YAC1B,aAAa,EAAE,CAAC;YAChB,UAAU,EAAE,KAAK;YACjB,UAAU,EAAE,IAAI;YAChB,WAAW,EAAE,KAAK;SACnB,CAAC;IACJ,CAAC;IAED,mBAAmB,CAAC,SAAiB;QACnC,MAAM,MAAM,GAAG,+BAAY,CAAC,mBAAmB,CAAC,SAAS,CAAC,CAAC;QAE3D,IAAI,UAAU,GAAoE,QAAQ,CAAC;QAC3F,IAAI,MAAM,CAAC,QAAQ,KAAK,SAAS;YAAE,UAAU,GAAG,WAAW,CAAC;QAC5D,IAAI,MAAM,CAAC,QAAQ,KAAK,QAAQ;YAAE,UAAU,GAAG,aAAa,CAAC;QAC7D,IAAI,MAAM,CAAC,QAAQ,KAAK,SAAS;YAAE,UAAU,GAAG,UAAU,CAAC;QAC3D,IAAI,MAAM,CAAC,QAAQ,KAAK,MAAM;YAAE,UAAU,GAAG,SAAS,CAAC;QAEvD,OAAO;YACL,QAAQ,EAAE,MAAM,CAAC,QAAQ;YACzB,SAAS,EAAE,yBAAyB,MAAM,CAAC,QAAQ,EAAE;YACrD,KAAK,EAAE,MAAM,CAAC,KAAK;YACnB,eAAe,EAAE,MAAM,CAAC,aAAa;YACrC,WAAW,EAAE,UAAU;YACvB,eAAe,EAAE,CAAC;YAClB,UAAU,EAAE,MAAM;YAClB,cAAc,EAAE,KAAK;YACrB,cAAc,EAAE,KAAK;SACtB,CAAC;IACJ,CAAC;IAED,+BAA+B,CAAC,MAAc;QAC5C,MAAM,MAAM,GAAG,+BAAY,CAAC,mBAAmB,CAAC,MAAM,CAAC,CAAC;QACxD,OAAO,MAAM,CAAC,QAAQ,KAAK,SAAS,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,MAAM,CAAC,QAAQ,CAAC;IAChE,CAAC;CACF;AAvDD,oEAuDC"}
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
export declare class HistoryManager {
|
|
2
|
+
/**
|
|
3
|
+
* Fetch invocations with explicit retry logic for SQLITE_BUSY
|
|
4
|
+
*/
|
|
5
|
+
static fetchInvocationsWithRetry(projectPath: string, taskId: string, resumeSessionId: string, maxRetries?: number): import("../database/queries.js").TaskInvocation[];
|
|
6
|
+
/**
|
|
7
|
+
* Reconstruct session history and apply Token Guard pruning to fit within context limits.
|
|
8
|
+
* Throws an error if the base prompt alone exceeds the safe limit.
|
|
9
|
+
*/
|
|
10
|
+
static reconstructHistoryWithTokenGuard(projectPath: string, taskId: string, resumeSessionId: string, basePrompt: string, modelName: string, safeLimit: number): {
|
|
11
|
+
finalPrompt: string;
|
|
12
|
+
finalHistoryText: string;
|
|
13
|
+
};
|
|
14
|
+
}
|
|
15
|
+
//# sourceMappingURL=history-manager.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"history-manager.d.ts","sourceRoot":"","sources":["../../src/orchestrator/history-manager.ts"],"names":[],"mappings":"AAIA,qBAAa,cAAc;IACzB;;OAEG;WACW,yBAAyB,CACrC,WAAW,EAAE,MAAM,EACnB,MAAM,EAAE,MAAM,EACd,eAAe,EAAE,MAAM,EACvB,UAAU,SAAI;IAsBhB;;;OAGG;WACW,gCAAgC,CAC5C,WAAW,EAAE,MAAM,EACnB,MAAM,EAAE,MAAM,EACd,eAAe,EAAE,MAAM,EACvB,UAAU,EAAE,MAAM,EAClB,SAAS,EAAE,MAAM,EACjB,SAAS,EAAE,MAAM,GAChB;QAAE,WAAW,EAAE,MAAM,CAAC;QAAC,gBAAgB,EAAE,MAAM,CAAA;KAAE;CAgErD"}
|
|
@@ -0,0 +1,93 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.HistoryManager = void 0;
|
|
4
|
+
const tokens_js_1 = require("../utils/tokens.js");
|
|
5
|
+
const queries_js_1 = require("../database/queries.js");
|
|
6
|
+
const connection_js_1 = require("../database/connection.js");
|
|
7
|
+
class HistoryManager {
|
|
8
|
+
/**
|
|
9
|
+
* Fetch invocations with explicit retry logic for SQLITE_BUSY
|
|
10
|
+
*/
|
|
11
|
+
static fetchInvocationsWithRetry(projectPath, taskId, resumeSessionId, maxRetries = 3) {
|
|
12
|
+
let attempt = 0;
|
|
13
|
+
while (attempt < maxRetries) {
|
|
14
|
+
try {
|
|
15
|
+
return (0, connection_js_1.withDatabase)(projectPath, (db) => (0, queries_js_1.getTaskInvocationsBySession)(db, taskId, resumeSessionId));
|
|
16
|
+
}
|
|
17
|
+
catch (error) {
|
|
18
|
+
if (error.code === 'SQLITE_BUSY' && attempt < maxRetries - 1) {
|
|
19
|
+
attempt++;
|
|
20
|
+
// Basic exponential backoff: 50ms, 100ms, ...
|
|
21
|
+
const delay = Math.pow(2, attempt) * 25;
|
|
22
|
+
Atomics.wait(new Int32Array(new SharedArrayBuffer(4)), 0, 0, delay);
|
|
23
|
+
continue;
|
|
24
|
+
}
|
|
25
|
+
throw error;
|
|
26
|
+
}
|
|
27
|
+
}
|
|
28
|
+
throw new Error('Unreachable');
|
|
29
|
+
}
|
|
30
|
+
/**
|
|
31
|
+
* Reconstruct session history and apply Token Guard pruning to fit within context limits.
|
|
32
|
+
* Throws an error if the base prompt alone exceeds the safe limit.
|
|
33
|
+
*/
|
|
34
|
+
static reconstructHistoryWithTokenGuard(projectPath, taskId, resumeSessionId, basePrompt, modelName, safeLimit) {
|
|
35
|
+
const systemPromptSize = (0, tokens_js_1.countTokens)(basePrompt, modelName);
|
|
36
|
+
if (systemPromptSize > safeLimit) {
|
|
37
|
+
throw new Error(`Context Too Large: System Prompt and Task Spec alone exceed safe context limit (${systemPromptSize} > ${safeLimit} tokens). Task cannot be processed.`);
|
|
38
|
+
}
|
|
39
|
+
const invocations = HistoryManager.fetchInvocationsWithRetry(projectPath, taskId, resumeSessionId);
|
|
40
|
+
const buildHistory = (invs, pruneOlder) => {
|
|
41
|
+
let hist = '';
|
|
42
|
+
for (let i = 0; i < invs.length; i++) {
|
|
43
|
+
const inv = invs[i];
|
|
44
|
+
// Skip the base prompt of the session (always first in DB for this session)
|
|
45
|
+
const isOriginalFirst = inv.id === invocations[0].id;
|
|
46
|
+
if (inv.prompt && !isOriginalFirst) {
|
|
47
|
+
hist += `
|
|
48
|
+
|
|
49
|
+
--- USER CONTINUATION ---
|
|
50
|
+
${inv.prompt}`;
|
|
51
|
+
}
|
|
52
|
+
if (inv.response) {
|
|
53
|
+
const isOlder = i < invs.length - 1;
|
|
54
|
+
const responseText = (pruneOlder && isOlder) ? (0, tokens_js_1.pruneResponseOutputs)(inv.response) : inv.response;
|
|
55
|
+
hist += `
|
|
56
|
+
|
|
57
|
+
--- ASSISTANT RESPONSE ---
|
|
58
|
+
${responseText}`;
|
|
59
|
+
}
|
|
60
|
+
}
|
|
61
|
+
return hist;
|
|
62
|
+
};
|
|
63
|
+
let currentSize = (0, tokens_js_1.countTokens)(basePrompt + buildHistory(invocations, false), modelName);
|
|
64
|
+
let finalHistoryText = '';
|
|
65
|
+
const guardedInvocations = [...invocations];
|
|
66
|
+
if (currentSize <= safeLimit) {
|
|
67
|
+
finalHistoryText = buildHistory(guardedInvocations, false);
|
|
68
|
+
}
|
|
69
|
+
else {
|
|
70
|
+
// Token Guard: First attempt to selectively prune tool outputs and thought blocks
|
|
71
|
+
finalHistoryText = buildHistory(guardedInvocations, true);
|
|
72
|
+
currentSize = (0, tokens_js_1.countTokens)(basePrompt + finalHistoryText, modelName);
|
|
73
|
+
// Token Guard: Truncate history if still necessary by dropping oldest executions entirely
|
|
74
|
+
while (currentSize > safeLimit && guardedInvocations.length > 0) {
|
|
75
|
+
guardedInvocations.shift(); // Prune oldest entry
|
|
76
|
+
finalHistoryText = buildHistory(guardedInvocations, true);
|
|
77
|
+
currentSize = (0, tokens_js_1.countTokens)(basePrompt + finalHistoryText, modelName);
|
|
78
|
+
}
|
|
79
|
+
if (guardedInvocations.length < invocations.length) {
|
|
80
|
+
console.warn(`Token Guard: Pruned ${invocations.length - guardedInvocations.length} older execution(s) entirely to fit within ${safeLimit} token limit.`);
|
|
81
|
+
}
|
|
82
|
+
else {
|
|
83
|
+
console.warn(`Token Guard: Selectively pruned tool/thought blocks to fit within ${safeLimit} token limit.`);
|
|
84
|
+
}
|
|
85
|
+
}
|
|
86
|
+
return {
|
|
87
|
+
finalPrompt: basePrompt + finalHistoryText,
|
|
88
|
+
finalHistoryText
|
|
89
|
+
};
|
|
90
|
+
}
|
|
91
|
+
}
|
|
92
|
+
exports.HistoryManager = HistoryManager;
|
|
93
|
+
//# sourceMappingURL=history-manager.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"history-manager.js","sourceRoot":"","sources":["../../src/orchestrator/history-manager.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"post-coder.d.ts","sourceRoot":"","sources":["../../src/orchestrator/post-coder.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,EAAE,YAAY,EAAE,MAAM,YAAY,CAAC;AAkB1C;;GAEG;AACH,wBAAgB,oBAAoB,CAAC,OAAO,EAAE,YAAY,GAAG,MAAM,
|
|
1
|
+
{"version":3,"file":"post-coder.d.ts","sourceRoot":"","sources":["../../src/orchestrator/post-coder.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,EAAE,YAAY,EAAE,MAAM,YAAY,CAAC;AAkB1C;;GAEG;AACH,wBAAgB,oBAAoB,CAAC,OAAO,EAAE,YAAY,GAAG,MAAM,CAmQlE"}
|
|
@@ -180,12 +180,10 @@ ${filesSection}
|
|
|
180
180
|
"contract_violation": "checklist_required" | "rejection_response_required" | null,
|
|
181
181
|
"wont_fix_override_items": ["specific required fix", "another required fix"],
|
|
182
182
|
"next_status": "review" | "in_progress" | "failed",
|
|
183
|
-
"
|
|
184
|
-
|
|
185
|
-
|
|
186
|
-
|
|
187
|
-
"has_commits": false
|
|
188
|
-
}
|
|
183
|
+
"files_changed": 0,
|
|
184
|
+
"confidence": "high" | "medium" | "low",
|
|
185
|
+
"exit_clean": true,
|
|
186
|
+
"has_commits": false
|
|
189
187
|
}
|
|
190
188
|
\`\`\`
|
|
191
189
|
|
|
@@ -228,12 +226,10 @@ ${filesSection}
|
|
|
228
226
|
"commits": ["abc123", "def456"],
|
|
229
227
|
"commit_message": null,
|
|
230
228
|
"next_status": "review",
|
|
231
|
-
"
|
|
232
|
-
|
|
233
|
-
|
|
234
|
-
|
|
235
|
-
"has_commits": true
|
|
236
|
-
}
|
|
229
|
+
"files_changed": 3,
|
|
230
|
+
"confidence": "high",
|
|
231
|
+
"exit_clean": true,
|
|
232
|
+
"has_commits": true
|
|
237
233
|
}
|
|
238
234
|
\`\`\`
|
|
239
235
|
|
|
@@ -245,12 +241,10 @@ ${filesSection}
|
|
|
245
241
|
"commits": [],
|
|
246
242
|
"commit_message": "feat: implement task specification",
|
|
247
243
|
"next_status": "review",
|
|
248
|
-
"
|
|
249
|
-
|
|
250
|
-
|
|
251
|
-
|
|
252
|
-
"has_commits": false
|
|
253
|
-
}
|
|
244
|
+
"files_changed": 2,
|
|
245
|
+
"confidence": "high",
|
|
246
|
+
"exit_clean": true,
|
|
247
|
+
"has_commits": false
|
|
254
248
|
}
|
|
255
249
|
\`\`\`
|
|
256
250
|
|
|
@@ -262,12 +256,10 @@ ${filesSection}
|
|
|
262
256
|
"commits": [],
|
|
263
257
|
"commit_message": null,
|
|
264
258
|
"next_status": "in_progress",
|
|
265
|
-
"
|
|
266
|
-
|
|
267
|
-
|
|
268
|
-
|
|
269
|
-
"has_commits": false
|
|
270
|
-
}
|
|
259
|
+
"files_changed": 0,
|
|
260
|
+
"confidence": "high",
|
|
261
|
+
"exit_clean": false,
|
|
262
|
+
"has_commits": false
|
|
271
263
|
}
|
|
272
264
|
\`\`\`
|
|
273
265
|
|