steroids-cli 0.17.1 → 0.18.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 +8 -0
- package/dist/commands/loop-phases-coder-decision.d.ts.map +1 -1
- package/dist/commands/loop-phases-coder-decision.js +2 -1
- package/dist/commands/loop-phases-coder-decision.js.map +1 -1
- package/dist/commands/loop-phases-helpers.d.ts.map +1 -1
- package/dist/commands/loop-phases-helpers.js.map +1 -1
- package/dist/commands/loop-phases-reviewer.d.ts.map +1 -1
- package/dist/commands/loop-phases-reviewer.js +18 -39
- package/dist/commands/loop-phases-reviewer.js.map +1 -1
- package/dist/commands/monitor-respond.d.ts.map +1 -1
- package/dist/commands/monitor-respond.js +15 -2
- package/dist/commands/monitor-respond.js.map +1 -1
- package/dist/commands/monitor.d.ts +1 -1
- package/dist/commands/monitor.d.ts.map +1 -1
- package/dist/commands/monitor.js +41 -6
- package/dist/commands/monitor.js.map +1 -1
- package/dist/commands/reviewer-preflight.d.ts.map +1 -1
- package/dist/commands/reviewer-preflight.js +8 -64
- package/dist/commands/reviewer-preflight.js.map +1 -1
- package/dist/commands/sections-delete.d.ts.map +1 -1
- package/dist/commands/sections-delete.js +16 -1
- package/dist/commands/sections-delete.js.map +1 -1
- package/dist/commands/task-runtime-cleanup.d.ts +13 -0
- package/dist/commands/task-runtime-cleanup.d.ts.map +1 -0
- package/dist/commands/task-runtime-cleanup.js +134 -0
- package/dist/commands/task-runtime-cleanup.js.map +1 -0
- package/dist/commands/tasks-reset.d.ts.map +1 -1
- package/dist/commands/tasks-reset.js +20 -52
- package/dist/commands/tasks-reset.js.map +1 -1
- package/dist/commands/tasks.d.ts.map +1 -1
- package/dist/commands/tasks.js +10 -68
- package/dist/commands/tasks.js.map +1 -1
- package/dist/database/queries.d.ts.map +1 -1
- package/dist/database/queries.js +3 -0
- package/dist/database/queries.js.map +1 -1
- package/dist/git/section-pr.d.ts +4 -3
- package/dist/git/section-pr.d.ts.map +1 -1
- package/dist/git/section-pr.js +8 -15
- package/dist/git/section-pr.js.map +1 -1
- package/dist/intake/reviewer-approval.d.ts +5 -1
- package/dist/intake/reviewer-approval.d.ts.map +1 -1
- package/dist/intake/reviewer-approval.js +90 -15
- package/dist/intake/reviewer-approval.js.map +1 -1
- package/dist/monitor/investigator-agent.d.ts +2 -1
- package/dist/monitor/investigator-agent.d.ts.map +1 -1
- package/dist/monitor/investigator-agent.js +26 -6
- package/dist/monitor/investigator-agent.js.map +1 -1
- package/dist/monitor/investigator-prompt.d.ts +2 -1
- package/dist/monitor/investigator-prompt.d.ts.map +1 -1
- package/dist/monitor/investigator-prompt.js +110 -69
- package/dist/monitor/investigator-prompt.js.map +1 -1
- package/dist/monitor/loop.d.ts.map +1 -1
- package/dist/monitor/loop.js +63 -7
- package/dist/monitor/loop.js.map +1 -1
- package/dist/monitor/response-mode.d.ts +38 -0
- package/dist/monitor/response-mode.d.ts.map +1 -0
- package/dist/monitor/response-mode.js +189 -0
- package/dist/monitor/response-mode.js.map +1 -0
- package/dist/orchestrator/approval-effects-replay.d.ts +17 -0
- package/dist/orchestrator/approval-effects-replay.d.ts.map +1 -0
- package/dist/orchestrator/approval-effects-replay.js +55 -0
- package/dist/orchestrator/approval-effects-replay.js.map +1 -0
- package/dist/orchestrator/automated-approval-effects.d.ts +26 -0
- package/dist/orchestrator/automated-approval-effects.d.ts.map +1 -0
- package/dist/orchestrator/automated-approval-effects.js +294 -0
- package/dist/orchestrator/automated-approval-effects.js.map +1 -0
- package/dist/orchestrator/merge-queue-completion.d.ts +12 -0
- package/dist/orchestrator/merge-queue-completion.d.ts.map +1 -0
- package/dist/orchestrator/merge-queue-completion.js +33 -0
- package/dist/orchestrator/merge-queue-completion.js.map +1 -0
- package/dist/orchestrator/merge-queue.d.ts +8 -1
- package/dist/orchestrator/merge-queue.d.ts.map +1 -1
- package/dist/orchestrator/merge-queue.js +48 -13
- package/dist/orchestrator/merge-queue.js.map +1 -1
- package/dist/orchestrator/reviewer-approval-outcome.d.ts +26 -0
- package/dist/orchestrator/reviewer-approval-outcome.d.ts.map +1 -0
- package/dist/orchestrator/reviewer-approval-outcome.js +52 -0
- package/dist/orchestrator/reviewer-approval-outcome.js.map +1 -0
- package/dist/orchestrator/reviewer-policy.d.ts +12 -0
- package/dist/orchestrator/reviewer-policy.d.ts.map +1 -0
- package/dist/orchestrator/reviewer-policy.js +53 -0
- package/dist/orchestrator/reviewer-policy.js.map +1 -0
- package/dist/orchestrator/reviewer.d.ts +4 -19
- package/dist/orchestrator/reviewer.d.ts.map +1 -1
- package/dist/orchestrator/reviewer.js +14 -63
- package/dist/orchestrator/reviewer.js.map +1 -1
- package/dist/orchestrator/section-completion.d.ts +9 -0
- package/dist/orchestrator/section-completion.d.ts.map +1 -0
- package/dist/orchestrator/section-completion.js +22 -0
- package/dist/orchestrator/section-completion.js.map +1 -0
- package/dist/orchestrator/submission-context.d.ts +30 -0
- package/dist/orchestrator/submission-context.d.ts.map +1 -0
- package/dist/orchestrator/submission-context.js +124 -0
- package/dist/orchestrator/submission-context.js.map +1 -0
- package/dist/runners/global-db-connection.d.ts.map +1 -1
- package/dist/runners/global-db-connection.js +21 -0
- package/dist/runners/global-db-connection.js.map +1 -1
- package/dist/runners/global-db-schema-migrations-v21.d.ts +3 -2
- package/dist/runners/global-db-schema-migrations-v21.d.ts.map +1 -1
- package/dist/runners/global-db-schema-migrations-v21.js +8 -3
- package/dist/runners/global-db-schema-migrations-v21.js.map +1 -1
- package/dist/runners/global-db-schema.d.ts +2 -1
- package/dist/runners/global-db-schema.d.ts.map +1 -1
- package/dist/runners/global-db-schema.js +6 -1
- package/dist/runners/global-db-schema.js.map +1 -1
- package/dist/runners/wakeup-project.d.ts.map +1 -1
- package/dist/runners/wakeup-project.js +9 -1
- package/dist/runners/wakeup-project.js.map +1 -1
- package/dist/runners/wakeup-sanitise-recovery.d.ts +1 -1
- package/dist/runners/wakeup-sanitise-recovery.d.ts.map +1 -1
- package/dist/runners/wakeup-sanitise-recovery.js +26 -15
- package/dist/runners/wakeup-sanitise-recovery.js.map +1 -1
- package/dist/runners/wakeup-sanitise.d.ts +1 -1
- package/dist/runners/wakeup-sanitise.d.ts.map +1 -1
- package/dist/runners/wakeup-sanitise.js +5 -5
- package/dist/runners/wakeup-sanitise.js.map +1 -1
- package/package.json +28 -2
|
@@ -1,10 +1,12 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.buildIntakeApprovalReplayInput = buildIntakeApprovalReplayInput;
|
|
3
4
|
exports.handleIntakeTaskApproval = handleIntakeTaskApproval;
|
|
4
5
|
const queries_js_1 = require("../database/queries.js");
|
|
5
6
|
const intake_queries_js_1 = require("../database/intake-queries.js");
|
|
6
7
|
const pipeline_glue_js_1 = require("./pipeline-glue.js");
|
|
7
8
|
const task_templates_js_1 = require("./task-templates.js");
|
|
9
|
+
const task_templates_js_2 = require("./task-templates.js");
|
|
8
10
|
const task_reference_js_1 = require("./task-reference.js");
|
|
9
11
|
function getOrCreateSectionId(db, sectionName) {
|
|
10
12
|
const existing = (0, queries_js_1.getSectionByName)(db, sectionName);
|
|
@@ -33,38 +35,111 @@ function createNextIntakeTask(db, nextPhase, report, options = {}) {
|
|
|
33
35
|
});
|
|
34
36
|
return nextTask.id;
|
|
35
37
|
}
|
|
36
|
-
function
|
|
38
|
+
function findExistingNextTaskId(db, nextTaskTitle) {
|
|
39
|
+
const row = db
|
|
40
|
+
.prepare(`SELECT id
|
|
41
|
+
FROM tasks
|
|
42
|
+
WHERE title = ?
|
|
43
|
+
AND source_file = ?
|
|
44
|
+
ORDER BY created_at DESC, id DESC
|
|
45
|
+
LIMIT 1`)
|
|
46
|
+
.get(nextTaskTitle, task_templates_js_2.DEFAULT_INTAKE_PIPELINE_SOURCE_FILE);
|
|
47
|
+
return row?.id ?? null;
|
|
48
|
+
}
|
|
49
|
+
function resolveLinkedNextTaskId(db, linkedTaskId, nextPhase, nextTaskTitle, source, externalId) {
|
|
50
|
+
if (!linkedTaskId) {
|
|
51
|
+
return null;
|
|
52
|
+
}
|
|
53
|
+
const linkedTask = (0, queries_js_1.getTask)(db, linkedTaskId);
|
|
54
|
+
if (!linkedTask) {
|
|
55
|
+
return null;
|
|
56
|
+
}
|
|
57
|
+
const reference = (0, task_reference_js_1.parseIntakeTaskReference)(linkedTask);
|
|
58
|
+
if (linkedTask.title === nextTaskTitle &&
|
|
59
|
+
reference?.phase === nextPhase &&
|
|
60
|
+
reference.source === source &&
|
|
61
|
+
reference.externalId === externalId) {
|
|
62
|
+
return linkedTaskId;
|
|
63
|
+
}
|
|
64
|
+
return null;
|
|
65
|
+
}
|
|
66
|
+
function resolveReplayInput(task, source) {
|
|
67
|
+
if (typeof source !== 'string') {
|
|
68
|
+
return source;
|
|
69
|
+
}
|
|
70
|
+
return buildIntakeApprovalReplayInput(task, source);
|
|
71
|
+
}
|
|
72
|
+
function buildIntakeApprovalReplayInput(task, projectPath) {
|
|
37
73
|
const reference = (0, task_reference_js_1.parseIntakeTaskReference)(task);
|
|
38
74
|
if (!reference || reference.phase === 'fix') {
|
|
39
|
-
return
|
|
40
|
-
}
|
|
41
|
-
const report = (0, intake_queries_js_1.getIntakeReport)(db, reference.source, reference.externalId);
|
|
42
|
-
if (!report) {
|
|
43
|
-
throw new Error(`Intake pipeline task refers to missing report ${reference.source}#${reference.externalId}`);
|
|
75
|
+
return null;
|
|
44
76
|
}
|
|
45
77
|
const result = (0, pipeline_glue_js_1.parseIntakeResultFile)(projectPath);
|
|
46
78
|
if (result.phase !== reference.phase) {
|
|
47
79
|
throw new Error(`Intake result phase "${result.phase}" does not match approved task phase "${reference.phase}" for ${reference.source}#${reference.externalId}`);
|
|
48
80
|
}
|
|
49
|
-
|
|
50
|
-
|
|
81
|
+
return {
|
|
82
|
+
kind: 'intake',
|
|
83
|
+
source: reference.source,
|
|
84
|
+
externalId: reference.externalId,
|
|
85
|
+
phase: reference.phase,
|
|
86
|
+
currentTaskTitle: task.title,
|
|
87
|
+
transition: (0, pipeline_glue_js_1.deriveIntakePipelineTransition)(result),
|
|
88
|
+
};
|
|
89
|
+
}
|
|
90
|
+
function handleIntakeTaskApproval(db, task, projectPathOrReplayInput) {
|
|
91
|
+
const replayInput = resolveReplayInput(task, projectPathOrReplayInput);
|
|
92
|
+
if (!replayInput) {
|
|
93
|
+
return { handled: false };
|
|
94
|
+
}
|
|
95
|
+
const report = (0, intake_queries_js_1.getIntakeReport)(db, replayInput.source, replayInput.externalId);
|
|
96
|
+
if (!report) {
|
|
97
|
+
throw new Error(`Intake pipeline task refers to missing report ${replayInput.source}#${replayInput.externalId}`);
|
|
98
|
+
}
|
|
99
|
+
if (replayInput.transition.action === 'complete') {
|
|
100
|
+
const targetStatus = replayInput.transition.resolutionCode === 'fixed' ? 'resolved' : 'ignored';
|
|
101
|
+
if (report.status === targetStatus) {
|
|
102
|
+
return { handled: true, transition: replayInput.transition };
|
|
103
|
+
}
|
|
51
104
|
(0, intake_queries_js_1.updateIntakeReportState)(db, report.source, report.externalId, {
|
|
52
|
-
status:
|
|
105
|
+
status: targetStatus,
|
|
53
106
|
resolvedAt: new Date().toISOString(),
|
|
54
107
|
linkedTaskId: task.id,
|
|
55
108
|
});
|
|
56
|
-
return { handled: true, transition };
|
|
109
|
+
return { handled: true, transition: replayInput.transition };
|
|
57
110
|
}
|
|
58
|
-
const
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
111
|
+
const nextTaskTitle = replayInput.transition.nextTaskTitle ??
|
|
112
|
+
(0, task_templates_js_1.buildIntakeTaskTemplate)(replayInput.transition.nextPhase, report, {
|
|
113
|
+
retryAttempt: replayInput.transition.action === 'retry'
|
|
114
|
+
? parseRetryAttemptFromTitle(replayInput.currentTaskTitle) + 1
|
|
115
|
+
: undefined,
|
|
116
|
+
}).title;
|
|
117
|
+
const existingNextTaskId = (report.linkedTaskId && report.linkedTaskId !== task.id
|
|
118
|
+
? resolveLinkedNextTaskId(db, report.linkedTaskId, replayInput.transition.nextPhase, nextTaskTitle, replayInput.source, replayInput.externalId)
|
|
119
|
+
: null) ??
|
|
120
|
+
findExistingNextTaskId(db, nextTaskTitle);
|
|
121
|
+
if (existingNextTaskId) {
|
|
122
|
+
(0, intake_queries_js_1.updateIntakeReportState)(db, report.source, report.externalId, {
|
|
123
|
+
status: 'in_progress',
|
|
124
|
+
resolvedAt: null,
|
|
125
|
+
linkedTaskId: existingNextTaskId,
|
|
126
|
+
});
|
|
127
|
+
return {
|
|
128
|
+
handled: true,
|
|
129
|
+
transition: replayInput.transition,
|
|
130
|
+
createdTaskId: existingNextTaskId,
|
|
131
|
+
};
|
|
132
|
+
}
|
|
133
|
+
const createdTaskId = createNextIntakeTask(db, replayInput.transition.nextPhase, report, {
|
|
134
|
+
currentTaskTitle: replayInput.currentTaskTitle,
|
|
135
|
+
nextTaskTitle: replayInput.transition.nextTaskTitle,
|
|
136
|
+
retry: replayInput.transition.action === 'retry',
|
|
62
137
|
});
|
|
63
138
|
(0, intake_queries_js_1.updateIntakeReportState)(db, report.source, report.externalId, {
|
|
64
139
|
status: 'in_progress',
|
|
65
140
|
resolvedAt: null,
|
|
66
141
|
linkedTaskId: createdTaskId,
|
|
67
142
|
});
|
|
68
|
-
return { handled: true, transition, createdTaskId };
|
|
143
|
+
return { handled: true, transition: replayInput.transition, createdTaskId };
|
|
69
144
|
}
|
|
70
145
|
//# sourceMappingURL=reviewer-approval.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"reviewer-approval.js","sourceRoot":"","sources":["../../src/intake/reviewer-approval.ts"],"names":[],"mappings":";;
|
|
1
|
+
{"version":3,"file":"reviewer-approval.js","sourceRoot":"","sources":["../../src/intake/reviewer-approval.ts"],"names":[],"mappings":"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"}
|
|
@@ -13,6 +13,7 @@
|
|
|
13
13
|
*
|
|
14
14
|
* Every action is fully documented in the run results for accountability.
|
|
15
15
|
*/
|
|
16
|
+
import { type StoredMonitorResponsePreset } from './response-mode.js';
|
|
16
17
|
import type { ScanResult } from './scanner.js';
|
|
17
18
|
export type FirstResponderAction = {
|
|
18
19
|
action: 'reset_task';
|
|
@@ -99,5 +100,5 @@ export declare function parseFirstResponderResponse(raw: string): FirstResponder
|
|
|
99
100
|
export declare function runFirstResponder(agents: Array<{
|
|
100
101
|
provider: string;
|
|
101
102
|
model: string;
|
|
102
|
-
}>, scanResult: ScanResult, preset:
|
|
103
|
+
}>, scanResult: ScanResult, preset: StoredMonitorResponsePreset, customPrompt: string | null, remediationContext?: string): Promise<FirstResponderResult>;
|
|
103
104
|
//# sourceMappingURL=investigator-agent.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"investigator-agent.d.ts","sourceRoot":"","sources":["../../src/monitor/investigator-agent.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"investigator-agent.d.ts","sourceRoot":"","sources":["../../src/monitor/investigator-agent.ts"],"names":[],"mappings":"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"}
|
|
@@ -21,6 +21,7 @@ exports.runFirstResponder = runFirstResponder;
|
|
|
21
21
|
const registry_js_1 = require("../providers/registry.js");
|
|
22
22
|
const investigator_prompt_js_1 = require("./investigator-prompt.js");
|
|
23
23
|
const investigator_actions_js_1 = require("./investigator-actions.js");
|
|
24
|
+
const response_mode_js_1 = require("./response-mode.js");
|
|
24
25
|
// ---------------------------------------------------------------------------
|
|
25
26
|
// Allowed action schemas (used in prompt + validation)
|
|
26
27
|
// ---------------------------------------------------------------------------
|
|
@@ -143,12 +144,27 @@ function parseFirstResponderResponse(raw) {
|
|
|
143
144
|
}
|
|
144
145
|
return { diagnosis, actions: validActions };
|
|
145
146
|
}
|
|
147
|
+
function filterActionsForPreset(actions, preset, diagnosis) {
|
|
148
|
+
const policy = (0, response_mode_js_1.getMonitorResponsePolicy)(preset);
|
|
149
|
+
const filtered = actions.filter((action) => {
|
|
150
|
+
const allowed = policy.allowedActions.has(action.action);
|
|
151
|
+
if (!allowed) {
|
|
152
|
+
console.warn(`[first-responder] Dropping disallowed ${action.action} action for ${policy.preset}`);
|
|
153
|
+
}
|
|
154
|
+
return allowed;
|
|
155
|
+
});
|
|
156
|
+
if (filtered.length > 0 || actions.length === 0 || !policy.allowedActions.has('report_only')) {
|
|
157
|
+
return filtered;
|
|
158
|
+
}
|
|
159
|
+
return [{ action: 'report_only', diagnosis }];
|
|
160
|
+
}
|
|
146
161
|
// ---------------------------------------------------------------------------
|
|
147
162
|
// Main entry point — fallback chain
|
|
148
163
|
// ---------------------------------------------------------------------------
|
|
149
164
|
async function runFirstResponder(agents, scanResult, preset, customPrompt, remediationContext) {
|
|
150
165
|
const registry = await (0, registry_js_1.getProviderRegistry)();
|
|
151
166
|
const prompt = (0, investigator_prompt_js_1.buildFirstResponderPrompt)(scanResult, preset, customPrompt, remediationContext);
|
|
167
|
+
const policy = (0, response_mode_js_1.getMonitorResponsePolicy)(preset);
|
|
152
168
|
for (const agent of agents) {
|
|
153
169
|
let provider;
|
|
154
170
|
try {
|
|
@@ -191,15 +207,18 @@ async function runFirstResponder(agents, scanResult, preset, customPrompt, remed
|
|
|
191
207
|
continue;
|
|
192
208
|
}
|
|
193
209
|
const response = parseFirstResponderResponse(result.stdout);
|
|
210
|
+
const filteredActions = filterActionsForPreset(response.actions, preset, response.diagnosis);
|
|
194
211
|
// M6: If FR returned only report_only but scan has actionable anomalies, inject fallback actions.
|
|
195
212
|
// Uses reset_task for task-level anomalies (94.9% success) over trigger_wakeup (0% for idle_project).
|
|
196
213
|
const ACTIONABLE_TYPES = new Set(['blocked_task', 'failed_task', 'orphaned_task', 'hanging_invocation', 'zombie_runner', 'dead_runner']);
|
|
197
214
|
const actionableAnomalies = scanResult.anomalies.filter(a => ACTIONABLE_TYPES.has(a.type));
|
|
198
|
-
const onlyReportOnly =
|
|
199
|
-
|
|
215
|
+
const onlyReportOnly = filteredActions.length === 0 || filteredActions.every(a => a.action === 'report_only');
|
|
216
|
+
let finalActions = filteredActions;
|
|
217
|
+
if (policy.allowFallbackRepairInjection && actionableAnomalies.length > 0 && onlyReportOnly) {
|
|
218
|
+
const repairActions = [];
|
|
200
219
|
const taskAnomaly = actionableAnomalies.find(a => a.taskId);
|
|
201
220
|
if (taskAnomaly) {
|
|
202
|
-
|
|
221
|
+
repairActions.push({
|
|
203
222
|
action: 'reset_task',
|
|
204
223
|
projectPath: taskAnomaly.projectPath,
|
|
205
224
|
taskId: taskAnomaly.taskId,
|
|
@@ -207,18 +226,19 @@ async function runFirstResponder(agents, scanResult, preset, customPrompt, remed
|
|
|
207
226
|
});
|
|
208
227
|
}
|
|
209
228
|
else {
|
|
210
|
-
|
|
229
|
+
repairActions.push({
|
|
211
230
|
action: 'trigger_wakeup',
|
|
212
231
|
reason: 'M6: FR returned only report_only for actionable anomalies; injecting wakeup',
|
|
213
232
|
});
|
|
214
233
|
}
|
|
234
|
+
finalActions = [...filteredActions, ...repairActions];
|
|
215
235
|
}
|
|
216
|
-
const actionResults = await (0, investigator_actions_js_1.executeActions)(
|
|
236
|
+
const actionResults = await (0, investigator_actions_js_1.executeActions)(finalActions);
|
|
217
237
|
return {
|
|
218
238
|
success: true,
|
|
219
239
|
agentUsed: `${agent.provider}/${agent.model}`,
|
|
220
240
|
diagnosis: response.diagnosis,
|
|
221
|
-
actions:
|
|
241
|
+
actions: finalActions,
|
|
222
242
|
actionResults,
|
|
223
243
|
};
|
|
224
244
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"investigator-agent.js","sourceRoot":"","sources":["../../src/monitor/investigator-agent.ts"],"names":[],"mappings":";AAAA;;;;;;;;;;;;;;GAcG;;;
|
|
1
|
+
{"version":3,"file":"investigator-agent.js","sourceRoot":"","sources":["../../src/monitor/investigator-agent.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
/**
|
|
2
2
|
* Prompt builder for the first responder agent.
|
|
3
3
|
*/
|
|
4
|
+
import { type StoredMonitorResponsePreset } from './response-mode.js';
|
|
4
5
|
import type { ScanResult } from './scanner.js';
|
|
5
|
-
export declare function buildFirstResponderPrompt(scanResult: ScanResult, preset:
|
|
6
|
+
export declare function buildFirstResponderPrompt(scanResult: ScanResult, preset: StoredMonitorResponsePreset, customPrompt: string | null, remediationContext?: string): string;
|
|
6
7
|
//# sourceMappingURL=investigator-prompt.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"investigator-prompt.d.ts","sourceRoot":"","sources":["../../src/monitor/investigator-prompt.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,cAAc,CAAC;
|
|
1
|
+
{"version":3,"file":"investigator-prompt.d.ts","sourceRoot":"","sources":["../../src/monitor/investigator-prompt.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,EAGL,KAAK,2BAA2B,EACjC,MAAM,oBAAoB,CAAC;AAC5B,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,cAAc,CAAC;AAgH/C,wBAAgB,yBAAyB,CACvC,UAAU,EAAE,UAAU,EACtB,MAAM,EAAE,2BAA2B,EACnC,YAAY,EAAE,MAAM,GAAG,IAAI,EAC3B,kBAAkB,CAAC,EAAE,MAAM,GAC1B,MAAM,CAyER"}
|
|
@@ -4,15 +4,113 @@
|
|
|
4
4
|
*/
|
|
5
5
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
6
|
exports.buildFirstResponderPrompt = buildFirstResponderPrompt;
|
|
7
|
+
const response_mode_js_1 = require("./response-mode.js");
|
|
7
8
|
const PRESET_INSTRUCTIONS = {
|
|
8
|
-
|
|
9
|
-
|
|
9
|
+
monitor_only: 'This mode is observation-only. Do not request any actions. Provide diagnosis only.',
|
|
10
|
+
triage_only: 'Diagnose the root cause. Investigate with read-only queries when needed. Do not request mutating actions.',
|
|
10
11
|
fix_and_monitor: 'Attempt to fix issues by resetting stuck tasks, adding missing dependencies, providing feedback to coders, or killing zombie runners. Only stop all runners as a last resort.',
|
|
12
|
+
custom: 'Follow the custom instructions below while staying within the host-enforced action policy.',
|
|
13
|
+
stop_on_error: 'Legacy mode: if the situation is dangerous, stop all runners immediately. Do not attempt other repairs.',
|
|
14
|
+
investigate_and_stop: 'Legacy mode: diagnose the root cause. If the situation is dangerous, stop all runners. Otherwise, report only.',
|
|
11
15
|
};
|
|
16
|
+
const ACTION_DOCS = [
|
|
17
|
+
{
|
|
18
|
+
action: 'query_db',
|
|
19
|
+
text: `**Investigation & Debugging:**
|
|
20
|
+
|
|
21
|
+
- { "action": "query_db", "projectPath": "<path>", "sql": "<SELECT ...>", "reason": "<why>" }
|
|
22
|
+
Run a READ-ONLY SQL query against a project's database to investigate issues.
|
|
23
|
+
Only SELECT statements are allowed.
|
|
24
|
+
Tables available: tasks, sections, section_dependencies, task_invocations, task_feedback, task_rejections.`,
|
|
25
|
+
},
|
|
26
|
+
{
|
|
27
|
+
action: 'reset_task',
|
|
28
|
+
text: `**Task Fixes:**
|
|
29
|
+
|
|
30
|
+
- { "action": "reset_task", "projectPath": "<path>", "taskId": "<id>", "reason": "<why>" }
|
|
31
|
+
Reset a stuck or failed task so it can run again.`,
|
|
32
|
+
},
|
|
33
|
+
{
|
|
34
|
+
action: 'update_task',
|
|
35
|
+
text: `- { "action": "update_task", "projectPath": "<path>", "taskId": "<id>", "fields": { ... }, "reason": "<why>" }
|
|
36
|
+
Update specific task fields. Allowed fields: status, failure_count, rejection_count, merge_failure_count, conflict_count, blocked_reason, description, merge_phase, approved_sha, rebase_attempts.`,
|
|
37
|
+
},
|
|
38
|
+
{
|
|
39
|
+
action: 'add_task_feedback',
|
|
40
|
+
text: `- { "action": "add_task_feedback", "projectPath": "<path>", "taskId": "<id>", "feedback": "<guidance>", "reason": "<why>" }
|
|
41
|
+
Add feedback that future coder or reviewer attempts will see.`,
|
|
42
|
+
},
|
|
43
|
+
{
|
|
44
|
+
action: 'add_dependency',
|
|
45
|
+
text: `**Dependency & Ordering Fixes:**
|
|
46
|
+
|
|
47
|
+
- { "action": "add_dependency", "projectPath": "<path>", "sectionId": "<id>", "dependsOnSectionId": "<id>", "reason": "<why>" }
|
|
48
|
+
Add a section dependency so work runs in the correct order.`,
|
|
49
|
+
},
|
|
50
|
+
{
|
|
51
|
+
action: 'reset_project',
|
|
52
|
+
text: `**Project & Runner Controls:**
|
|
53
|
+
|
|
54
|
+
- { "action": "reset_project", "projectPath": "<path>", "reason": "<why>" }
|
|
55
|
+
Reset all blocked or failed tasks in a project to pending.`,
|
|
56
|
+
},
|
|
57
|
+
{
|
|
58
|
+
action: 'kill_runner',
|
|
59
|
+
text: `- { "action": "kill_runner", "runnerId": "<pid>", "reason": "<why>" }
|
|
60
|
+
Send SIGTERM to a specific runner process by PID.`,
|
|
61
|
+
},
|
|
62
|
+
{
|
|
63
|
+
action: 'stop_all_runners',
|
|
64
|
+
text: `- { "action": "stop_all_runners", "reason": "<why>" }
|
|
65
|
+
Stop every active runner. Use only when the system is in a dangerous state.`,
|
|
66
|
+
},
|
|
67
|
+
{
|
|
68
|
+
action: 'trigger_wakeup',
|
|
69
|
+
text: `- { "action": "trigger_wakeup", "reason": "<why>" }
|
|
70
|
+
Trigger the wakeup cycle to restart runners and recover from idle states.`,
|
|
71
|
+
},
|
|
72
|
+
{
|
|
73
|
+
action: 'release_merge_lock',
|
|
74
|
+
text: `**Merge Queue:**
|
|
75
|
+
|
|
76
|
+
- { "action": "release_merge_lock", "projectPath": "<path>", "diagnosis": "<why>" }
|
|
77
|
+
Force-release a stale merge lock for a project.`,
|
|
78
|
+
},
|
|
79
|
+
{
|
|
80
|
+
action: 'reset_merge_phase',
|
|
81
|
+
text: `- { "action": "reset_merge_phase", "projectPath": "<path>", "taskId": "<id>", "diagnosis": "<why>" }
|
|
82
|
+
Reset a stuck merge_pending task back to the queued phase.`,
|
|
83
|
+
},
|
|
84
|
+
{
|
|
85
|
+
action: 'suppress_anomaly',
|
|
86
|
+
text: `**Suppression:**
|
|
87
|
+
|
|
88
|
+
- { "action": "suppress_anomaly", "projectPath": "<path>", "anomalyType": "<type>", "duration_hours": <number>, "reason": "<why>" }
|
|
89
|
+
Suppress a known false positive anomaly for the specified project and type (max 168 hours).`,
|
|
90
|
+
},
|
|
91
|
+
{
|
|
92
|
+
action: 'report_only',
|
|
93
|
+
text: `**Report:**
|
|
94
|
+
|
|
95
|
+
- { "action": "report_only", "diagnosis": "<summary>" }
|
|
96
|
+
No action taken, just report findings.`,
|
|
97
|
+
},
|
|
98
|
+
];
|
|
99
|
+
function buildAllowedActionsSection(preset) {
|
|
100
|
+
const policy = (0, response_mode_js_1.getMonitorResponsePolicy)(preset);
|
|
101
|
+
if (policy.allowedActions.size === 0) {
|
|
102
|
+
return `No actions are allowed in this mode. Return an empty "actions" array.`;
|
|
103
|
+
}
|
|
104
|
+
return ACTION_DOCS
|
|
105
|
+
.filter((doc) => policy.allowedActions.has(doc.action))
|
|
106
|
+
.map((doc) => doc.text)
|
|
107
|
+
.join('\n\n');
|
|
108
|
+
}
|
|
12
109
|
function buildFirstResponderPrompt(scanResult, preset, customPrompt, remediationContext) {
|
|
110
|
+
const policy = (0, response_mode_js_1.getMonitorResponsePolicy)(preset);
|
|
13
111
|
const presetText = preset === 'custom' && customPrompt
|
|
14
112
|
? customPrompt
|
|
15
|
-
: PRESET_INSTRUCTIONS[preset]
|
|
113
|
+
: PRESET_INSTRUCTIONS[preset];
|
|
16
114
|
const anomalyList = scanResult.anomalies.length === 0
|
|
17
115
|
? 'No anomalies detected.'
|
|
18
116
|
: scanResult.anomalies.map((a, i) => `${i + 1}. [${a.severity.toUpperCase()}] ${a.type} — ${a.details}\n` +
|
|
@@ -42,6 +140,12 @@ ${presetText}
|
|
|
42
140
|
|
|
43
141
|
## Instructions
|
|
44
142
|
|
|
143
|
+
Selected response mode: ${policy.label}
|
|
144
|
+
Host policy:
|
|
145
|
+
- Auto-dispatch allowed: ${policy.autoDispatch ? 'yes' : 'no'}
|
|
146
|
+
- Mutating actions allowed: ${policy.allowedActions.has('reset_task') ? 'yes' : 'no'}
|
|
147
|
+
- Fallback repair injection allowed: ${policy.allowFallbackRepairInjection ? 'yes' : 'no'}
|
|
148
|
+
|
|
45
149
|
Analyze the anomalies above and respond with a JSON object matching this schema:
|
|
46
150
|
|
|
47
151
|
{
|
|
@@ -55,71 +159,7 @@ Analyze the anomalies above and respond with a JSON object matching this schema:
|
|
|
55
159
|
|
|
56
160
|
### Allowed Actions
|
|
57
161
|
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
- { "action": "query_db", "projectPath": "<path>", "sql": "<SELECT ...>", "reason": "<why>" }
|
|
61
|
-
Run a READ-ONLY SQL query against a project's database to investigate issues.
|
|
62
|
-
Use this to inspect task states, dependencies, invocation history, section ordering, etc.
|
|
63
|
-
Only SELECT statements are allowed. Results are returned for your analysis.
|
|
64
|
-
Tables available: tasks, sections, section_dependencies, task_invocations, task_feedback, task_rejections.
|
|
65
|
-
Example: SELECT id, title, status, failure_count, rejection_count, section_id FROM tasks WHERE status NOT IN ('completed', 'skipped')
|
|
66
|
-
|
|
67
|
-
**Task Fixes:**
|
|
68
|
-
|
|
69
|
-
- { "action": "reset_task", "projectPath": "<path>", "taskId": "<id>", "reason": "<why>" }
|
|
70
|
-
Resets a stuck/failed task to pending (clears failure and rejection counts).
|
|
71
|
-
|
|
72
|
-
- { "action": "update_task", "projectPath": "<path>", "taskId": "<id>", "fields": { ... }, "reason": "<why>" }
|
|
73
|
-
Update specific task fields. Allowed fields: status, failure_count, rejection_count, merge_failure_count, conflict_count, blocked_reason, description, merge_phase, approved_sha, rebase_attempts.
|
|
74
|
-
Valid statuses: pending, in_progress, review, merge_pending, completed, failed, skipped, disputed, blocked_conflict, blocked_error.
|
|
75
|
-
Use this for surgical fixes — e.g., changing status from blocked_error to pending, clearing a blocked_reason, updating a description to be clearer.
|
|
76
|
-
|
|
77
|
-
- { "action": "add_task_feedback", "projectPath": "<path>", "taskId": "<id>", "feedback": "<guidance>", "reason": "<why>" }
|
|
78
|
-
Add human-style feedback notes to a task. Next time a coder or reviewer works on this task, they will see your feedback.
|
|
79
|
-
Use this to guide future attempts — e.g., "The previous approach failed because X. Try Y instead." or "This task depends on task Z being completed first — check that Z's output file exists before proceeding."
|
|
80
|
-
|
|
81
|
-
**Dependency & Ordering Fixes:**
|
|
82
|
-
|
|
83
|
-
- { "action": "add_dependency", "projectPath": "<path>", "sectionId": "<id>", "dependsOnSectionId": "<id>", "reason": "<why>" }
|
|
84
|
-
Add a section dependency so sectionId won't run until dependsOnSectionId completes.
|
|
85
|
-
Use when tasks are failing because they run before a prerequisite section is done.
|
|
86
|
-
Circular dependencies are automatically rejected.
|
|
87
|
-
|
|
88
|
-
**Project & Runner Controls:**
|
|
89
|
-
|
|
90
|
-
- { "action": "reset_project", "projectPath": "<path>", "reason": "<why>" }
|
|
91
|
-
Resets ALL blocked/failed/skipped tasks in a project to pending and re-enables the project.
|
|
92
|
-
Use when a project has multiple blocked tasks that need bulk recovery.
|
|
93
|
-
|
|
94
|
-
- { "action": "kill_runner", "runnerId": "<pid>", "reason": "<why>" }
|
|
95
|
-
Sends SIGTERM to a specific runner process by PID.
|
|
96
|
-
|
|
97
|
-
- { "action": "stop_all_runners", "reason": "<why>" }
|
|
98
|
-
Stops every active runner. Use only when the system is in a dangerous state.
|
|
99
|
-
|
|
100
|
-
- { "action": "trigger_wakeup", "reason": "<why>" }
|
|
101
|
-
Triggers the wakeup cycle to restart runners and recover from idle states.
|
|
102
|
-
|
|
103
|
-
**Merge Queue:**
|
|
104
|
-
|
|
105
|
-
- { "action": "release_merge_lock", "projectPath": "<path>", "diagnosis": "<why>" }
|
|
106
|
-
Force-release a stale merge lock for a project. Use when a merge_pending task is stuck because the merge lock was not released after a crash.
|
|
107
|
-
|
|
108
|
-
- { "action": "reset_merge_phase", "projectPath": "<path>", "taskId": "<id>", "diagnosis": "<why>" }
|
|
109
|
-
Reset a merge_pending task's merge_phase to 'queued' and clear rebase_attempts. Use when a task is stuck in rebasing/rebase_review phase.
|
|
110
|
-
|
|
111
|
-
**Suppression:**
|
|
112
|
-
|
|
113
|
-
- { "action": "suppress_anomaly", "projectPath": "<path>", "anomalyType": "<type>", "duration_hours": <number>, "reason": "<why>" }
|
|
114
|
-
Suppress a known false positive anomaly for the specified project and type (max 168 hours = 1 week).
|
|
115
|
-
The scanner will skip matching anomalies until the suppression expires.
|
|
116
|
-
Use when you have confirmed an anomaly is a false positive (e.g., idle_project when runners are actually active via parallel sessions).
|
|
117
|
-
Valid anomaly types: orphaned_task, hanging_invocation, zombie_runner, dead_runner, db_inconsistency, credit_exhaustion, failed_task, skipped_task, idle_project, high_invocations, repeated_failures, blocked_task, stale_merge_lock, stuck_merge_phase, disputed_task.
|
|
118
|
-
|
|
119
|
-
**Report:**
|
|
120
|
-
|
|
121
|
-
- { "action": "report_only", "diagnosis": "<summary>" }
|
|
122
|
-
No action taken, just report findings. Use when anomalies are informational only.
|
|
162
|
+
${buildAllowedActionsSection(preset)}
|
|
123
163
|
|
|
124
164
|
## Guidelines
|
|
125
165
|
|
|
@@ -131,7 +171,8 @@ Analyze the anomalies above and respond with a JSON object matching this schema:
|
|
|
131
171
|
- NEVER modify the steroids CLI source code — your job is to fix project-level task/runner issues.
|
|
132
172
|
- Respond with valid JSON only — no markdown fences, no commentary outside the JSON.
|
|
133
173
|
- If no action is needed, use a single report_only action.
|
|
134
|
-
-
|
|
174
|
+
- If this mode does not allow a desired action, do not request it.
|
|
175
|
+
- Blocking issues still require a useful diagnosis even when this mode forbids repair.
|
|
135
176
|
- Document everything. Your actions will be reviewed. Explain your reasoning.`;
|
|
136
177
|
}
|
|
137
178
|
//# sourceMappingURL=investigator-prompt.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"investigator-prompt.js","sourceRoot":"","sources":["../../src/monitor/investigator-prompt.ts"],"names":[],"mappings":";AAAA;;GAEG;;
|
|
1
|
+
{"version":3,"file":"investigator-prompt.js","sourceRoot":"","sources":["../../src/monitor/investigator-prompt.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"loop.d.ts","sourceRoot":"","sources":["../../src/monitor/loop.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;
|
|
1
|
+
{"version":3,"file":"loop.d.ts","sourceRoot":"","sources":["../../src/monitor/loop.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AA0BH,MAAM,WAAW,kBAAkB;IACjC,OAAO,EAAE,OAAO,GAAG,iBAAiB,GAAG,4BAA4B,GAAG,SAAS,GAAG,OAAO,CAAC;IAC1F,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,YAAY,EAAE,MAAM,CAAC;IACrB,gBAAgB,CAAC,EAAE,MAAM,CAAC;IAC1B,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB;AAmSD;;;GAGG;AACH,wBAAsB,YAAY,IAAI,OAAO,CAAC,IAAI,CAAC,CAgElD;AAED;;;GAGG;AACH,wBAAsB,eAAe,CAAC,OAAO,CAAC,EAAE;IAAE,MAAM,CAAC,EAAE,OAAO,CAAC;IAAC,MAAM,CAAC,EAAE,MAAM,CAAC;IAAC,aAAa,CAAC,EAAE,OAAO,CAAA;CAAE,GAAG,OAAO,CAAC,kBAAkB,CAAC,CA8F3I"}
|