@kimbho/kimbho-cli 0.1.22 → 0.1.25
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/index.cjs +181 -33
- package/dist/index.cjs.map +2 -2
- package/package.json +1 -1
package/dist/index.cjs
CHANGED
|
@@ -12718,7 +12718,7 @@ function createCompletionRuntimeCommand(program2) {
|
|
|
12718
12718
|
// package.json
|
|
12719
12719
|
var package_default = {
|
|
12720
12720
|
name: "@kimbho/kimbho-cli",
|
|
12721
|
-
version: "0.1.
|
|
12721
|
+
version: "0.1.25",
|
|
12722
12722
|
description: "Kimbho CLI is a terminal-native coding agent for planning, execution, and verification.",
|
|
12723
12723
|
type: "module",
|
|
12724
12724
|
engines: {
|
|
@@ -24540,7 +24540,8 @@ async function runShellCommand(toolId, command, cwd, timeoutMs, signal) {
|
|
|
24540
24540
|
command
|
|
24541
24541
|
], cwd, timeoutMs, signal);
|
|
24542
24542
|
const success2 = !result.timedOut && result.code === 0;
|
|
24543
|
-
const
|
|
24543
|
+
const interactiveSetupSummary = !success2 ? detectInteractiveShellPrompt(command, result.stdout, result.stderr) : null;
|
|
24544
|
+
const summary = result.timedOut ? `Command timed out after ${timeoutMs}ms.` : interactiveSetupSummary ? interactiveSetupSummary : success2 ? `Command completed successfully.` : `Command exited with code ${result.code ?? "unknown"}.`;
|
|
24544
24545
|
return ToolResultSchema.parse({
|
|
24545
24546
|
toolId,
|
|
24546
24547
|
success: success2,
|
|
@@ -24549,6 +24550,18 @@ async function runShellCommand(toolId, command, cwd, timeoutMs, signal) {
|
|
|
24549
24550
|
stderr: truncateOutput(result.stderr)
|
|
24550
24551
|
});
|
|
24551
24552
|
}
|
|
24553
|
+
function detectInteractiveShellPrompt(command, stdout, stderr) {
|
|
24554
|
+
const combined = `${stdout}
|
|
24555
|
+
${stderr}`;
|
|
24556
|
+
const normalizedCommand = command.trim().toLowerCase();
|
|
24557
|
+
if (/how would you like to configure eslint\?/i.test(combined) || normalizedCommand.includes("next lint") && /eslint/i.test(combined) && /(strict \(recommended\)|base|cancel)/i.test(combined)) {
|
|
24558
|
+
return "Interactive ESLint setup required before next lint can run.";
|
|
24559
|
+
}
|
|
24560
|
+
if (/\?\s+[^\n]+\n(?:\s*❯|\s*>|\s*\*)/i.test(combined) || /(would you like to|choose one of the following|select an option|enter a value)/i.test(combined)) {
|
|
24561
|
+
return "Command requires interactive input before it can continue.";
|
|
24562
|
+
}
|
|
24563
|
+
return null;
|
|
24564
|
+
}
|
|
24552
24565
|
async function executeFileRead(input, context) {
|
|
24553
24566
|
if (context.signal?.aborted) {
|
|
24554
24567
|
const error2 = new Error("Tool execution aborted.");
|
|
@@ -33108,6 +33121,24 @@ function isVerificationAction(action) {
|
|
|
33108
33121
|
const command = typeof action.input.command === "string" ? action.input.command : "";
|
|
33109
33122
|
return command.length > 0 && isVerificationCommand(command);
|
|
33110
33123
|
}
|
|
33124
|
+
function extractShellCommand(action) {
|
|
33125
|
+
if (action.type !== "tool" || action.tool !== "shell.exec") {
|
|
33126
|
+
return "";
|
|
33127
|
+
}
|
|
33128
|
+
return typeof action.input.command === "string" ? action.input.command.trim() : "";
|
|
33129
|
+
}
|
|
33130
|
+
function isInteractiveVerificationSetupFailure(action, result) {
|
|
33131
|
+
if (!isVerificationAction(action) || result.success) {
|
|
33132
|
+
return false;
|
|
33133
|
+
}
|
|
33134
|
+
const command = extractShellCommand(action).toLowerCase();
|
|
33135
|
+
const combined = [
|
|
33136
|
+
result.summary,
|
|
33137
|
+
result.stdout ?? "",
|
|
33138
|
+
result.stderr ?? ""
|
|
33139
|
+
].join("\n").toLowerCase();
|
|
33140
|
+
return combined.includes("interactive eslint setup required") || combined.includes("command requires interactive input before it can continue") || command.includes("lint") && combined.includes("how would you like to configure eslint");
|
|
33141
|
+
}
|
|
33111
33142
|
function buildSystemPrompt(agent, task, request, allowedTools, plan, extraInstructions) {
|
|
33112
33143
|
const toolShape = allowedTools.join("|");
|
|
33113
33144
|
const dependencyTasks = plan ? flattenPlanTasks(plan).filter((candidate) => task.dependsOn.includes(candidate.id)) : [];
|
|
@@ -33150,6 +33181,7 @@ function buildSystemPrompt(agent, task, request, allowedTools, plan, extraInstru
|
|
|
33150
33181
|
`- Keep paths relative to the workspace.`,
|
|
33151
33182
|
`- In an existing repo, inspect and change the likely source files before running build or test verification. Do not front-load verification unless you are confirming an already-completed change or diagnosing a failure.`,
|
|
33152
33183
|
`- After changing code, run verification with tests.run or shell.exec when appropriate.`,
|
|
33184
|
+
`- If a verification command asks for interactive setup or operator input, do not rerun it unchanged. Choose a different non-interactive verifier, or configure that verifier only if the task explicitly requires it.`,
|
|
33153
33185
|
`- Do not claim success unless the task acceptance criteria are satisfied.`,
|
|
33154
33186
|
`- If the task is underspecified, make a pragmatic implementation choice and continue.`,
|
|
33155
33187
|
...task.subagentInstructions ? [
|
|
@@ -33820,6 +33852,7 @@ ${truncateForModel(customAgentMemory)}`);
|
|
|
33820
33852
|
const applyToolResult = async (parsedAction, result, step, transcriptEntry) => {
|
|
33821
33853
|
const mutatingAction = isMutatingAction(parsedAction);
|
|
33822
33854
|
const verificationAction = isVerificationAction(parsedAction);
|
|
33855
|
+
const interactiveVerificationSetupFailure = verificationAction && !result.success && isInteractiveVerificationSetupFailure(parsedAction, result);
|
|
33823
33856
|
if (mutatingAction && result.success) {
|
|
33824
33857
|
changedWorkspace = true;
|
|
33825
33858
|
verifiedAfterLatestChange = false;
|
|
@@ -33834,6 +33867,10 @@ ${truncateForModel(customAgentMemory)}`);
|
|
|
33834
33867
|
repairRequiredBeforeVerification = false;
|
|
33835
33868
|
repairAppliedSinceFailure = false;
|
|
33836
33869
|
lastVerificationFailure = null;
|
|
33870
|
+
} else if (interactiveVerificationSetupFailure) {
|
|
33871
|
+
repairRequiredBeforeVerification = false;
|
|
33872
|
+
repairAppliedSinceFailure = false;
|
|
33873
|
+
lastVerificationFailure = result;
|
|
33837
33874
|
} else {
|
|
33838
33875
|
verificationFailures += 1;
|
|
33839
33876
|
repairRequiredBeforeVerification = true;
|
|
@@ -33853,9 +33890,25 @@ ${truncateForModel(customAgentMemory)}`);
|
|
|
33853
33890
|
if (mutatingAction && result.success) {
|
|
33854
33891
|
followUp.push("Code or workspace state changed. Inspect the diff if needed and run verification before finishing.");
|
|
33855
33892
|
}
|
|
33856
|
-
if (verificationAction &&
|
|
33893
|
+
if (verificationAction && interactiveVerificationSetupFailure) {
|
|
33894
|
+
const failureSummary = `${result.toolId}: ${result.summary}`;
|
|
33857
33895
|
transcriptEntry.runtimeNote = [
|
|
33858
|
-
`Verification
|
|
33896
|
+
`Verification could not run non-interactively. Latest failure: ${failureSummary}`,
|
|
33897
|
+
"Executor should choose a different non-interactive verifier or configure the verifier explicitly."
|
|
33898
|
+
].join(" ");
|
|
33899
|
+
await emitProgress({
|
|
33900
|
+
type: "task-note",
|
|
33901
|
+
sessionId,
|
|
33902
|
+
taskId: task.id,
|
|
33903
|
+
agentRole: task.agentRole,
|
|
33904
|
+
step,
|
|
33905
|
+
message: `Verification needs setup via ${failureSummary}. Choosing a different non-interactive verifier or configuration path.`
|
|
33906
|
+
});
|
|
33907
|
+
followUp.push(`The attempted verification was not a code failure. It requires interactive setup or input (${failureSummary}). Do not rerun the same verifier unchanged. Choose a different non-interactive verification command, or configure the verifier explicitly if the task requires it.`);
|
|
33908
|
+
} else if (verificationAction && !result.success) {
|
|
33909
|
+
const failureSummary = `${result.toolId}: ${result.summary}`;
|
|
33910
|
+
transcriptEntry.runtimeNote = [
|
|
33911
|
+
`Verification failed (${verificationFailures}/${maxRepairAttempts} repair attempts used). Latest failure: ${failureSummary}`,
|
|
33859
33912
|
"Executor requires a repair action before the next verification run."
|
|
33860
33913
|
].join(" ");
|
|
33861
33914
|
await emitProgress({
|
|
@@ -33864,9 +33917,9 @@ ${truncateForModel(customAgentMemory)}`);
|
|
|
33864
33917
|
taskId: task.id,
|
|
33865
33918
|
agentRole: task.agentRole,
|
|
33866
33919
|
step,
|
|
33867
|
-
message: `Verification failed. Repair attempts used: ${verificationFailures}/${maxRepairAttempts}.`
|
|
33920
|
+
message: `Verification failed via ${failureSummary}. Repair attempts used: ${verificationFailures}/${maxRepairAttempts}.`
|
|
33868
33921
|
});
|
|
33869
|
-
followUp.push(`Verification failed. Inspect the failure output, repair the issue, and run verification again before finishing. Repair attempts used: ${verificationFailures}/${maxRepairAttempts}.`);
|
|
33922
|
+
followUp.push(`Verification failed via ${failureSummary}. Inspect the failure output, repair the issue, and run verification again before finishing. Repair attempts used: ${verificationFailures}/${maxRepairAttempts}.`);
|
|
33870
33923
|
if (verificationFailures >= maxRepairAttempts) {
|
|
33871
33924
|
transcriptEntry.runtimeNote = [
|
|
33872
33925
|
transcriptEntry.runtimeNote,
|
|
@@ -34255,11 +34308,20 @@ ${truncateForModel(customAgentMemory)}`);
|
|
|
34255
34308
|
sessionId,
|
|
34256
34309
|
taskId: task.id,
|
|
34257
34310
|
agentRole: task.agentRole,
|
|
34258
|
-
message: `Step budget exhausted after ${maxSteps} steps.`
|
|
34311
|
+
message: task.agentRole !== "test-debugger" ? `Step budget exhausted after ${maxSteps} steps; handing task to test-debugger.` : `Step budget exhausted after ${maxSteps} steps; debugger escalation exhausted.`
|
|
34259
34312
|
});
|
|
34313
|
+
if (task.agentRole !== "test-debugger") {
|
|
34314
|
+
return {
|
|
34315
|
+
status: "handoff",
|
|
34316
|
+
summary: `Autonomous executor reached the step limit (${maxSteps}) for ${task.id}; handing off to test-debugger.`,
|
|
34317
|
+
toolResults,
|
|
34318
|
+
artifacts: Array.from(artifacts),
|
|
34319
|
+
usage: usageTotals
|
|
34320
|
+
};
|
|
34321
|
+
}
|
|
34260
34322
|
return {
|
|
34261
|
-
status: "
|
|
34262
|
-
summary: `Autonomous executor reached the step limit (${maxSteps}) for ${task.id}.`,
|
|
34323
|
+
status: "blocked",
|
|
34324
|
+
summary: `Autonomous executor reached the step limit (${maxSteps}) for ${task.id}; debugger escalation exhausted.`,
|
|
34263
34325
|
toolResults,
|
|
34264
34326
|
artifacts: Array.from(artifacts),
|
|
34265
34327
|
usage: usageTotals
|
|
@@ -43848,6 +43910,9 @@ async function renderCustomAgents(cwd) {
|
|
|
43848
43910
|
// src/shell.ts
|
|
43849
43911
|
var AMBER = "\x1B[38;5;214m";
|
|
43850
43912
|
var CYAN = "\x1B[38;5;45m";
|
|
43913
|
+
var RED = "\x1B[38;5;203m";
|
|
43914
|
+
var SHIMMER_HEAD = "\x1B[38;5;230m";
|
|
43915
|
+
var SHIMMER_TAIL = "\x1B[38;5;223m";
|
|
43851
43916
|
var BOLD = "\x1B[1m";
|
|
43852
43917
|
var DIM = "\x1B[2m";
|
|
43853
43918
|
var RESET = "\x1B[0m";
|
|
@@ -43908,7 +43973,9 @@ var MAX_CHAT_MESSAGES = 12;
|
|
|
43908
43973
|
var MAX_CHAT_CONTEXT_CHARS = 8e3;
|
|
43909
43974
|
var CHAT_COMPACTION_TAIL_MESSAGES = 6;
|
|
43910
43975
|
var DEFAULT_MAX_AUTO_TASKS = 3;
|
|
43976
|
+
var UNBOUNDED_MAX_AUTO_TASKS = Number.MAX_SAFE_INTEGER;
|
|
43911
43977
|
var DEFAULT_MAX_AGENT_STEPS = 8;
|
|
43978
|
+
var UNBOUNDED_MAX_AGENT_STEPS = 128;
|
|
43912
43979
|
var DEFAULT_MAX_REPAIR_ATTEMPTS2 = 2;
|
|
43913
43980
|
var SPINNER_FRAMES = [
|
|
43914
43981
|
"-",
|
|
@@ -43916,6 +43983,14 @@ var SPINNER_FRAMES = [
|
|
|
43916
43983
|
"|",
|
|
43917
43984
|
"/"
|
|
43918
43985
|
];
|
|
43986
|
+
var ELLIPSIS_FRAMES = [
|
|
43987
|
+
". ",
|
|
43988
|
+
".. ",
|
|
43989
|
+
"...",
|
|
43990
|
+
" ..",
|
|
43991
|
+
" .",
|
|
43992
|
+
" "
|
|
43993
|
+
];
|
|
43919
43994
|
var IDLE_STATUS_LABELS = [
|
|
43920
43995
|
"thinking",
|
|
43921
43996
|
"musing",
|
|
@@ -43927,6 +44002,24 @@ var IDLE_STATUS_LABELS = [
|
|
|
43927
44002
|
function color(code, value) {
|
|
43928
44003
|
return `${code}${value}${RESET}`;
|
|
43929
44004
|
}
|
|
44005
|
+
function renderShimmeringLabel(label, frameIndex) {
|
|
44006
|
+
const characters = Array.from(label);
|
|
44007
|
+
if (characters.length === 0) {
|
|
44008
|
+
return color(BOLD, label);
|
|
44009
|
+
}
|
|
44010
|
+
const shimmerWidth = Math.min(4, characters.length + 1);
|
|
44011
|
+
const head = frameIndex % (characters.length + shimmerWidth);
|
|
44012
|
+
return characters.map((character, index) => {
|
|
44013
|
+
const distance = head - index;
|
|
44014
|
+
if (distance === 0) {
|
|
44015
|
+
return `${BOLD}${SHIMMER_HEAD}${character}${RESET}`;
|
|
44016
|
+
}
|
|
44017
|
+
if (distance > 0 && distance < shimmerWidth) {
|
|
44018
|
+
return `${BOLD}${SHIMMER_TAIL}${character}${RESET}`;
|
|
44019
|
+
}
|
|
44020
|
+
return `${BOLD}${character}${RESET}`;
|
|
44021
|
+
}).join("");
|
|
44022
|
+
}
|
|
43930
44023
|
function readRuntimeOverrideEntries() {
|
|
43931
44024
|
const raw = import_node_process26.default.env[KIMBHO_RUNTIME_OVERRIDES_ENV];
|
|
43932
44025
|
if (!raw || raw.trim().length === 0) {
|
|
@@ -43991,6 +44084,12 @@ function shouldAutoStartApprovedRuns(runtime) {
|
|
|
43991
44084
|
const approvalMode = resolveRuntimeOverrideApprovalMode(runtime);
|
|
43992
44085
|
return approvalMode === "auto" || approvalMode === "dontAsk" || approvalMode === "acceptEdits" || approvalMode === "bypassPermissions";
|
|
43993
44086
|
}
|
|
44087
|
+
function resolveShellMaxAutoTasks(runtime) {
|
|
44088
|
+
return shouldAutoStartApprovedRuns(runtime) ? UNBOUNDED_MAX_AUTO_TASKS : DEFAULT_MAX_AUTO_TASKS;
|
|
44089
|
+
}
|
|
44090
|
+
function resolveShellMaxAgentSteps(runtime) {
|
|
44091
|
+
return shouldAutoStartApprovedRuns(runtime) ? UNBOUNDED_MAX_AGENT_STEPS : DEFAULT_MAX_AGENT_STEPS;
|
|
44092
|
+
}
|
|
43994
44093
|
function normalizeApprovalMode(value) {
|
|
43995
44094
|
const normalized = value.trim().toLowerCase();
|
|
43996
44095
|
if (normalized === "manual" || normalized === "default") {
|
|
@@ -44132,7 +44231,7 @@ function createExecutionTelemetry() {
|
|
|
44132
44231
|
}
|
|
44133
44232
|
var ShellActivityIndicator = class {
|
|
44134
44233
|
interval = null;
|
|
44135
|
-
|
|
44234
|
+
animationTick = 0;
|
|
44136
44235
|
label;
|
|
44137
44236
|
activeLine = false;
|
|
44138
44237
|
constructor(label) {
|
|
@@ -44145,12 +44244,15 @@ var ShellActivityIndicator = class {
|
|
|
44145
44244
|
this.activeLine = true;
|
|
44146
44245
|
this.render();
|
|
44147
44246
|
this.interval = setInterval(() => {
|
|
44148
|
-
this.
|
|
44247
|
+
this.animationTick += 1;
|
|
44149
44248
|
this.render();
|
|
44150
|
-
},
|
|
44249
|
+
}, 140);
|
|
44151
44250
|
this.interval.unref?.();
|
|
44152
44251
|
}
|
|
44153
44252
|
update(label) {
|
|
44253
|
+
if (label !== this.label) {
|
|
44254
|
+
this.animationTick = 0;
|
|
44255
|
+
}
|
|
44154
44256
|
this.label = label;
|
|
44155
44257
|
if (this.interval) {
|
|
44156
44258
|
this.render();
|
|
@@ -44180,9 +44282,10 @@ var ShellActivityIndicator = class {
|
|
|
44180
44282
|
if (!import_node_process26.default.stdout.isTTY) {
|
|
44181
44283
|
return;
|
|
44182
44284
|
}
|
|
44183
|
-
const frame = color(AMBER, SPINNER_FRAMES[this.
|
|
44184
|
-
const status =
|
|
44185
|
-
const
|
|
44285
|
+
const frame = color(AMBER, SPINNER_FRAMES[this.animationTick % SPINNER_FRAMES.length]);
|
|
44286
|
+
const status = renderShimmeringLabel(this.label, this.animationTick);
|
|
44287
|
+
const dots = color(DIM, ELLIPSIS_FRAMES[this.animationTick % ELLIPSIS_FRAMES.length]);
|
|
44288
|
+
const raw = `${frame} ${status}${dots}`;
|
|
44186
44289
|
this.clear();
|
|
44187
44290
|
(0, import_node_readline2.cursorTo)(import_node_process26.default.stdout, 0);
|
|
44188
44291
|
import_node_process26.default.stdout.write(raw);
|
|
@@ -44491,6 +44594,27 @@ function hashString(value) {
|
|
|
44491
44594
|
function pickStatusLabel(message) {
|
|
44492
44595
|
const lower = message.toLowerCase();
|
|
44493
44596
|
const choose = (labels) => labels[hashString(message) % labels.length];
|
|
44597
|
+
if (lower.includes("verification needs setup") || lower.includes("different non-interactive verifier")) {
|
|
44598
|
+
return choose([
|
|
44599
|
+
"adapting",
|
|
44600
|
+
"rerouting",
|
|
44601
|
+
"recovering"
|
|
44602
|
+
]);
|
|
44603
|
+
}
|
|
44604
|
+
if (lower.includes("verification failed") || lower.includes("repair attempts used")) {
|
|
44605
|
+
return choose([
|
|
44606
|
+
"repairing",
|
|
44607
|
+
"debugging",
|
|
44608
|
+
"recovering"
|
|
44609
|
+
]);
|
|
44610
|
+
}
|
|
44611
|
+
if (lower.includes("repair budget exhausted") || lower.includes("debugger escalation")) {
|
|
44612
|
+
return choose([
|
|
44613
|
+
"escalating",
|
|
44614
|
+
"stopping",
|
|
44615
|
+
"blocking"
|
|
44616
|
+
]);
|
|
44617
|
+
}
|
|
44494
44618
|
if (lower.includes("synthesizing") || lower.includes("architecture brief")) {
|
|
44495
44619
|
return choose([
|
|
44496
44620
|
"planning",
|
|
@@ -44540,6 +44664,13 @@ function pickStatusLabel(message) {
|
|
|
44540
44664
|
"untangling"
|
|
44541
44665
|
]);
|
|
44542
44666
|
}
|
|
44667
|
+
if (lower.includes("verify") || lower.includes("verification")) {
|
|
44668
|
+
return choose([
|
|
44669
|
+
"verifying",
|
|
44670
|
+
"checking",
|
|
44671
|
+
"confirming"
|
|
44672
|
+
]);
|
|
44673
|
+
}
|
|
44543
44674
|
return choose([
|
|
44544
44675
|
"thinking",
|
|
44545
44676
|
"musing",
|
|
@@ -44667,13 +44798,13 @@ function renderShellPlanSummary(plan) {
|
|
|
44667
44798
|
}
|
|
44668
44799
|
return lines;
|
|
44669
44800
|
}
|
|
44670
|
-
function renderPendingRunProposal(proposal) {
|
|
44801
|
+
function renderPendingRunProposal(proposal, options = {}) {
|
|
44671
44802
|
const lines = [
|
|
44672
44803
|
`${color(BOLD, proposal.source === "queued" ? "Queued Plan Ready" : "Ready To Run")}`,
|
|
44673
44804
|
...renderShellPlanSummary(proposal.plan),
|
|
44674
44805
|
"",
|
|
44675
44806
|
color(DIM, `saved plan: ${proposal.planPath}`),
|
|
44676
|
-
"next: /approve to start, /run revise <feedback> to adjust, /run cancel to drop it"
|
|
44807
|
+
options.autoStart ? color(DIM, "next: auto-starting in the current permission mode") : "next: /approve to start, /run revise <feedback> to adjust, /run cancel to drop it"
|
|
44677
44808
|
];
|
|
44678
44809
|
if (proposal.source === "queued") {
|
|
44679
44810
|
lines.splice(1, 0, color(DIM, "The next queued request has been planned and is waiting for your approval."));
|
|
@@ -44734,8 +44865,12 @@ function renderShellSessionSummary(snapshot, planPath, sessionPath) {
|
|
|
44734
44865
|
lines.push(color(DIM, `saved session: ${sessionPath}`));
|
|
44735
44866
|
if (snapshot.pendingApprovals.length > 0) {
|
|
44736
44867
|
lines.push("next: /approve to continue, /deny to stop");
|
|
44737
|
-
} else {
|
|
44868
|
+
} else if (snapshot.status === "paused" || snapshot.status === "running" || snapshot.status === "ready") {
|
|
44738
44869
|
lines.push("next: /resume to continue a paused run or start another request");
|
|
44870
|
+
} else if (snapshot.status === "blocked") {
|
|
44871
|
+
lines.push("next: review the blocker or start another request");
|
|
44872
|
+
} else {
|
|
44873
|
+
lines.push("next: start another request");
|
|
44739
44874
|
}
|
|
44740
44875
|
return lines.join("\n");
|
|
44741
44876
|
}
|
|
@@ -44777,7 +44912,10 @@ function renderLiveExecutionEvent(event, board, startedAt) {
|
|
|
44777
44912
|
];
|
|
44778
44913
|
case "task-finished":
|
|
44779
44914
|
return [
|
|
44780
|
-
`${color(
|
|
44915
|
+
`${color(
|
|
44916
|
+
event.status === "completed" ? CYAN : event.status === "blocked" ? RED : AMBER,
|
|
44917
|
+
event.status === "completed" ? "Completed" : event.status === "awaiting-approval" ? "Paused" : event.status === "handoff" ? "Rerouting" : event.status === "blocked" ? "Blocked" : "Updated"
|
|
44918
|
+
)} ${simplifyExecutionSummary(event.summary) || event.taskId}`,
|
|
44781
44919
|
...renderConciseProgress(board, startedAt)
|
|
44782
44920
|
];
|
|
44783
44921
|
case "task-note":
|
|
@@ -45128,7 +45266,12 @@ async function prepareRunProposal(cwd, goal, runtime, options = {}) {
|
|
|
45128
45266
|
feedback: options.feedback ?? [],
|
|
45129
45267
|
source: options.source ?? "direct"
|
|
45130
45268
|
};
|
|
45131
|
-
console.log(renderPendingRunProposal(
|
|
45269
|
+
console.log(renderPendingRunProposal(
|
|
45270
|
+
runtime.pendingRunProposal,
|
|
45271
|
+
{
|
|
45272
|
+
autoStart: shouldAutoStartApprovedRuns(runtime)
|
|
45273
|
+
}
|
|
45274
|
+
).join("\n"));
|
|
45132
45275
|
return request.cwd;
|
|
45133
45276
|
}
|
|
45134
45277
|
async function executePendingRunProposal(runtime) {
|
|
@@ -45150,8 +45293,8 @@ async function executePendingRunProposal(runtime) {
|
|
|
45150
45293
|
proposal.goal,
|
|
45151
45294
|
request,
|
|
45152
45295
|
proposal.plan,
|
|
45153
|
-
|
|
45154
|
-
|
|
45296
|
+
resolveShellMaxAutoTasks(runtime),
|
|
45297
|
+
resolveShellMaxAgentSteps(runtime),
|
|
45155
45298
|
DEFAULT_MAX_REPAIR_ATTEMPTS2
|
|
45156
45299
|
);
|
|
45157
45300
|
console.log(renderRunStartCard(liveBoard));
|
|
@@ -45161,8 +45304,8 @@ async function executePendingRunProposal(runtime) {
|
|
|
45161
45304
|
let snapshot;
|
|
45162
45305
|
try {
|
|
45163
45306
|
snapshot = await new ExecutionOrchestrator().continueSession(proposal.snapshot, {
|
|
45164
|
-
maxAutoTasks:
|
|
45165
|
-
maxAgentSteps:
|
|
45307
|
+
maxAutoTasks: resolveShellMaxAutoTasks(runtime),
|
|
45308
|
+
maxAgentSteps: resolveShellMaxAgentSteps(runtime),
|
|
45166
45309
|
maxRepairAttempts: DEFAULT_MAX_REPAIR_ATTEMPTS2,
|
|
45167
45310
|
signal: controller.signal,
|
|
45168
45311
|
onProgress: async (event) => {
|
|
@@ -45215,8 +45358,8 @@ async function resumeGoalExecution(cwd, runtime) {
|
|
|
45215
45358
|
session.goal,
|
|
45216
45359
|
session.request,
|
|
45217
45360
|
session.plan,
|
|
45218
|
-
|
|
45219
|
-
|
|
45361
|
+
resolveShellMaxAutoTasks(runtime),
|
|
45362
|
+
resolveShellMaxAgentSteps(runtime),
|
|
45220
45363
|
DEFAULT_MAX_REPAIR_ATTEMPTS2
|
|
45221
45364
|
);
|
|
45222
45365
|
const controller = new AbortController();
|
|
@@ -45230,8 +45373,8 @@ async function resumeGoalExecution(cwd, runtime) {
|
|
|
45230
45373
|
let snapshot;
|
|
45231
45374
|
try {
|
|
45232
45375
|
snapshot = await new ExecutionOrchestrator().continueSession(session, {
|
|
45233
|
-
maxAutoTasks:
|
|
45234
|
-
maxAgentSteps:
|
|
45376
|
+
maxAutoTasks: resolveShellMaxAutoTasks(runtime),
|
|
45377
|
+
maxAgentSteps: resolveShellMaxAgentSteps(runtime),
|
|
45235
45378
|
maxRepairAttempts: DEFAULT_MAX_REPAIR_ATTEMPTS2,
|
|
45236
45379
|
signal: controller.signal,
|
|
45237
45380
|
onProgress: async (event) => {
|
|
@@ -45309,8 +45452,8 @@ async function resolvePendingApproval(cwd, runtime, decision, approvalId, option
|
|
|
45309
45452
|
session.goal,
|
|
45310
45453
|
session.request,
|
|
45311
45454
|
session.plan,
|
|
45312
|
-
|
|
45313
|
-
|
|
45455
|
+
resolveShellMaxAutoTasks(runtime),
|
|
45456
|
+
resolveShellMaxAgentSteps(runtime),
|
|
45314
45457
|
DEFAULT_MAX_REPAIR_ATTEMPTS2
|
|
45315
45458
|
);
|
|
45316
45459
|
liveBoard.approvals = session.pendingApprovals.length;
|
|
@@ -45325,8 +45468,8 @@ async function resolvePendingApproval(cwd, runtime, decision, approvalId, option
|
|
|
45325
45468
|
let snapshot;
|
|
45326
45469
|
try {
|
|
45327
45470
|
snapshot = await new ExecutionOrchestrator().continueSession(session, {
|
|
45328
|
-
maxAutoTasks:
|
|
45329
|
-
maxAgentSteps:
|
|
45471
|
+
maxAutoTasks: resolveShellMaxAutoTasks(runtime),
|
|
45472
|
+
maxAgentSteps: resolveShellMaxAgentSteps(runtime),
|
|
45330
45473
|
maxRepairAttempts: DEFAULT_MAX_REPAIR_ATTEMPTS2,
|
|
45331
45474
|
approvalDecisions: approvals.map((approval) => ({
|
|
45332
45475
|
approvalId: approval.id,
|
|
@@ -46663,7 +46806,12 @@ async function handleShellCommand(cwd, input, state, runtime, execute) {
|
|
|
46663
46806
|
if (head === "run" || head === "new" || head === "scaffold") {
|
|
46664
46807
|
const subcommand = tokens[1]?.trim().toLowerCase();
|
|
46665
46808
|
if (!tokens[1] && runtime.pendingRunProposal) {
|
|
46666
|
-
console.log(renderPendingRunProposal(
|
|
46809
|
+
console.log(renderPendingRunProposal(
|
|
46810
|
+
runtime.pendingRunProposal,
|
|
46811
|
+
{
|
|
46812
|
+
autoStart: shouldAutoStartApprovedRuns(runtime)
|
|
46813
|
+
}
|
|
46814
|
+
).join("\n"));
|
|
46667
46815
|
return cwd;
|
|
46668
46816
|
}
|
|
46669
46817
|
if (subcommand === "approve" || subcommand === "start" || subcommand === "execute") {
|