@wrongstack/cli 0.296.2 → 0.296.3
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/boot/dispatch-webui.d.ts +1 -0
- package/dist/boot/dispatch-webui.d.ts.map +1 -1
- package/dist/boot/tui-session-resume.d.ts.map +1 -1
- package/dist/{chunk-IN4GXGYW.js → chunk-BQCAJ7FI.js} +2 -2
- package/dist/{chunk-IN4GXGYW.js.map → chunk-BQCAJ7FI.js.map} +2 -2
- package/dist/{chunk-X5DQTPXT.js → chunk-OI7GWJDS.js} +1048 -804
- package/dist/chunk-OI7GWJDS.js.map +7 -0
- package/dist/{cli-main-6AU6E4XZ.js → cli-main-RTY35OPD.js} +196 -54
- package/dist/cli-main-RTY35OPD.js.map +7 -0
- package/dist/cli-main.d.ts.map +1 -1
- package/dist/execute-deps.d.ts +1 -0
- package/dist/execute-deps.d.ts.map +1 -1
- package/dist/{execution-V26SE52F.js → execution-O7I5DYE6.js} +34 -8
- package/dist/execution-O7I5DYE6.js.map +7 -0
- package/dist/execution-storage-observability.d.ts.map +1 -1
- package/dist/execution.d.ts.map +1 -1
- package/dist/fleet/host-subagent-factory.d.ts.map +1 -1
- package/dist/{hq-BECGICEZ.js → hq-JUYKUNJX.js} +2 -2
- package/dist/hq-server/auth.d.ts +15 -4
- package/dist/hq-server/auth.d.ts.map +1 -1
- package/dist/hq-server/routes/auth-handlers.d.ts +6 -13
- package/dist/hq-server/routes/auth-handlers.d.ts.map +1 -1
- package/dist/hq-server/routes.d.ts +6 -4
- package/dist/hq-server/routes.d.ts.map +1 -1
- package/dist/hq-server/snapshot.d.ts +44 -0
- package/dist/hq-server/snapshot.d.ts.map +1 -1
- package/dist/hq-server/types.d.ts +22 -4
- package/dist/hq-server/types.d.ts.map +1 -1
- package/dist/hq-server/utils.d.ts +8 -0
- package/dist/hq-server/utils.d.ts.map +1 -1
- package/dist/hq-server/ws.d.ts +1 -1
- package/dist/hq-server/ws.d.ts.map +1 -1
- package/dist/{hq-server-FJOVOERO.js → hq-server-6AQ3BXZA.js} +2 -2
- package/dist/hq-server.d.ts +3 -3
- package/dist/hq-server.d.ts.map +1 -1
- package/dist/{hq-tunnel-YZLRONPV.js → hq-tunnel-RFKGC4HI.js} +8 -5
- package/dist/{hq-tunnel-YZLRONPV.js.map → hq-tunnel-RFKGC4HI.js.map} +2 -2
- package/dist/hq-tunnel.d.ts +1 -1
- package/dist/hq-tunnel.d.ts.map +1 -1
- package/dist/index.js +5 -5
- package/dist/{sdd-runtime-IKPROVV2.js → sdd-runtime-JG4EEKL6.js} +2 -2
- package/dist/services/sdd/task-manager.d.ts.map +1 -1
- package/dist/slash-commands/settings.d.ts.map +1 -1
- package/dist/{webui-server-G3TISUIY.js → webui-server-ZF5KVGC5.js} +3 -2
- package/dist/webui-server-ZF5KVGC5.js.map +7 -0
- package/dist/webui-server-options.d.ts +2 -0
- package/dist/webui-server-options.d.ts.map +1 -1
- package/dist/webui-server.d.ts.map +1 -1
- package/dist/wiring/sage.d.ts.map +1 -1
- package/dist/wiring/session.d.ts +3 -1
- package/dist/wiring/session.d.ts.map +1 -1
- package/package.json +22 -22
- package/dist/chunk-X5DQTPXT.js.map +0 -7
- package/dist/cli-main-6AU6E4XZ.js.map +0 -7
- package/dist/execution-V26SE52F.js.map +0 -7
- package/dist/webui-server-G3TISUIY.js.map +0 -7
- /package/dist/{hq-BECGICEZ.js.map → hq-JUYKUNJX.js.map} +0 -0
- /package/dist/{hq-server-FJOVOERO.js.map → hq-server-6AQ3BXZA.js.map} +0 -0
- /package/dist/{sdd-runtime-IKPROVV2.js.map → sdd-runtime-JG4EEKL6.js.map} +0 -0
|
@@ -29,7 +29,7 @@ import {
|
|
|
29
29
|
getTaskProgress,
|
|
30
30
|
matchTaskNode,
|
|
31
31
|
sddState
|
|
32
|
-
} from "./chunk-
|
|
32
|
+
} from "./chunk-BQCAJ7FI.js";
|
|
33
33
|
import {
|
|
34
34
|
setupPlugins
|
|
35
35
|
} from "./chunk-QUNHS6O3.js";
|
|
@@ -1587,7 +1587,7 @@ async function loadOnlineAgentsForPrompt(projectDir, skip) {
|
|
|
1587
1587
|
}
|
|
1588
1588
|
}
|
|
1589
1589
|
async function getSddRuntimeStateForCli() {
|
|
1590
|
-
const sdd = await import("./sdd-runtime-
|
|
1590
|
+
const sdd = await import("./sdd-runtime-JG4EEKL6.js");
|
|
1591
1591
|
return {
|
|
1592
1592
|
tracker: sdd.getTaskTracker(),
|
|
1593
1593
|
builder: sdd.getActiveBuilder(),
|
|
@@ -17832,9 +17832,9 @@ function buildSecurityCommand(opts) {
|
|
|
17832
17832
|
}
|
|
17833
17833
|
|
|
17834
17834
|
// src/slash-commands/settings.ts
|
|
17835
|
-
import { color as color44 } from "@wrongstack/core/utils";
|
|
17836
17835
|
import { noOpVault as noOpVault9 } from "@wrongstack/core/security";
|
|
17837
17836
|
import { resolveFleetChatVerbosity } from "@wrongstack/core/types";
|
|
17837
|
+
import { color as color44, toErrorMessage as toErrorMessage20 } from "@wrongstack/core/utils";
|
|
17838
17838
|
import { getProcessRegistry } from "@wrongstack/tools";
|
|
17839
17839
|
|
|
17840
17840
|
// src/utils/delay-format.ts
|
|
@@ -17845,7 +17845,6 @@ function formatDelay(ms) {
|
|
|
17845
17845
|
}
|
|
17846
17846
|
|
|
17847
17847
|
// src/slash-commands/settings.ts
|
|
17848
|
-
import { toErrorMessage as toErrorMessage20 } from "@wrongstack/core/utils";
|
|
17849
17848
|
function buildSettingsCommand(opts) {
|
|
17850
17849
|
const help = [
|
|
17851
17850
|
"Usage:",
|
|
@@ -17885,6 +17884,7 @@ function buildSettingsCommand(opts) {
|
|
|
17885
17884
|
" /settings thinking-word <word> TUI status-chip word (single short word)",
|
|
17886
17885
|
" /settings statusline minimum|detailed|no-color TUI statusline density",
|
|
17887
17886
|
" /settings animation rainbow|wave|pulse|dots|breathe|cycle TUI working-chip animation",
|
|
17887
|
+
" /settings read-symbols on|off Include codebase-index symbols in read tool results",
|
|
17888
17888
|
" /settings reasoning auto|on|off Reasoning mode (auto = provider default)",
|
|
17889
17889
|
" /settings reasoning-effort none|minimal|low|medium|high|xhigh|max Reasoning effort",
|
|
17890
17890
|
" /settings reasoning-preserve on|off Preserve thinking across turns",
|
|
@@ -17975,6 +17975,7 @@ function buildSettingsCommand(opts) {
|
|
|
17975
17975
|
` thinking word: ${color44.cyan(au?.thinkingWord ?? "thinking")} ${color44.dim("change: /settings thinking-word <word>")}`,
|
|
17976
17976
|
` statusline mode: ${color44.cyan(au?.statuslineMode ?? "detailed")} ${color44.dim("change: /settings statusline minimum|detailed|no-color")}`,
|
|
17977
17977
|
` animation style: ${color44.cyan(au?.animationStyle ?? "rainbow")} ${color44.dim("change: /settings animation rainbow|wave|pulse|dots|breathe|cycle")}`,
|
|
17978
|
+
` read symbols: ${au?.readAdvancedMode === true ? color44.cyan("on") : color44.dim("off")} ${color44.dim("change: /settings read-symbols on|off")}`,
|
|
17978
17979
|
` reasoning mode: ${color44.cyan(reasoningMode)} ${color44.dim("change: /settings reasoning auto|on|off")}`,
|
|
17979
17980
|
` reasoning effort: ${color44.cyan(reasoningEffort)} ${color44.dim("change: /settings reasoning-effort <level>")}`,
|
|
17980
17981
|
` reasoning preserve: ${reasoningPreserve ? color44.cyan("on") : color44.dim("off")} ${color44.dim("change: /settings reasoning-preserve on|off")}`,
|
|
@@ -18042,14 +18043,18 @@ function buildSettingsCommand(opts) {
|
|
|
18042
18043
|
hq.enabled = on;
|
|
18043
18044
|
cfg.hq = hq;
|
|
18044
18045
|
});
|
|
18045
|
-
return {
|
|
18046
|
+
return {
|
|
18047
|
+
message: `${color44.green("\u2713")} HQ publishing \u2192 ${on ? color44.cyan("on") : color44.dim("off")}`
|
|
18048
|
+
};
|
|
18046
18049
|
}
|
|
18047
18050
|
if (sub === "hq-url") {
|
|
18048
18051
|
const raw = rest.join(" ").trim();
|
|
18049
|
-
if (!raw)
|
|
18052
|
+
if (!raw)
|
|
18053
|
+
return { message: `${color44.amber("Usage:")} /settings hq-url <http://host:3499>` };
|
|
18050
18054
|
try {
|
|
18051
18055
|
const url = new URL(raw);
|
|
18052
|
-
if (url.protocol !== "http:" && url.protocol !== "https:")
|
|
18056
|
+
if (url.protocol !== "http:" && url.protocol !== "https:")
|
|
18057
|
+
throw new Error("bad protocol");
|
|
18053
18058
|
} catch {
|
|
18054
18059
|
return { message: `${color44.red("Invalid URL")}: ${raw}` };
|
|
18055
18060
|
}
|
|
@@ -18063,14 +18068,17 @@ function buildSettingsCommand(opts) {
|
|
|
18063
18068
|
}
|
|
18064
18069
|
if (sub === "hq-token") {
|
|
18065
18070
|
const token = rest.join(" ").trim();
|
|
18066
|
-
if (!token)
|
|
18071
|
+
if (!token)
|
|
18072
|
+
return { message: `${color44.amber("Usage:")} /settings hq-token <client-token>` };
|
|
18067
18073
|
await persistConfigSetting({ ...persistDeps, forceGlobal: true }, (cfg) => {
|
|
18068
18074
|
const hq = cfg.hq ?? {};
|
|
18069
18075
|
hq.token = token;
|
|
18070
18076
|
hq.enabled = true;
|
|
18071
18077
|
cfg.hq = hq;
|
|
18072
18078
|
});
|
|
18073
|
-
return {
|
|
18079
|
+
return {
|
|
18080
|
+
message: `${color44.green("\u2713")} HQ token saved ${color44.dim("(active profile config)")}`
|
|
18081
|
+
};
|
|
18074
18082
|
}
|
|
18075
18083
|
if (sub === "hq-raw") {
|
|
18076
18084
|
const raw = (rest[0] ?? "").toLowerCase();
|
|
@@ -18083,7 +18091,9 @@ function buildSettingsCommand(opts) {
|
|
|
18083
18091
|
hq.rawContent = on;
|
|
18084
18092
|
cfg.hq = hq;
|
|
18085
18093
|
});
|
|
18086
|
-
return {
|
|
18094
|
+
return {
|
|
18095
|
+
message: `${color44.green("\u2713")} HQ raw content \u2192 ${on ? color44.cyan("on") : color44.dim("off")}`
|
|
18096
|
+
};
|
|
18087
18097
|
}
|
|
18088
18098
|
if (sub === "delay") {
|
|
18089
18099
|
const raw = rest[0];
|
|
@@ -18323,7 +18333,10 @@ function buildSettingsCommand(opts) {
|
|
|
18323
18333
|
const ms = Math.round(seconds * 1e3);
|
|
18324
18334
|
await persistConfigSetting(persistDeps, (cfg) => {
|
|
18325
18335
|
const cb = cfg.circuitBreaker;
|
|
18326
|
-
cfg.circuitBreaker = {
|
|
18336
|
+
cfg.circuitBreaker = {
|
|
18337
|
+
...cb ?? {},
|
|
18338
|
+
autoKillResetMs: ms
|
|
18339
|
+
};
|
|
18327
18340
|
});
|
|
18328
18341
|
getProcessRegistry().setBreakerConfig({ autoKillResetMs: ms });
|
|
18329
18342
|
return {
|
|
@@ -18334,7 +18347,9 @@ function buildSettingsCommand(opts) {
|
|
|
18334
18347
|
const raw = (rest[0] ?? "").toLowerCase();
|
|
18335
18348
|
const modes = ["balanced", "frugal", "deep"];
|
|
18336
18349
|
if (!modes.includes(raw)) {
|
|
18337
|
-
return {
|
|
18350
|
+
return {
|
|
18351
|
+
message: `${color44.amber("Usage:")} /settings context-mode balanced|frugal|deep`
|
|
18352
|
+
};
|
|
18338
18353
|
}
|
|
18339
18354
|
await persistConfigSetting(persistDeps, (cfg) => {
|
|
18340
18355
|
const ctx = cfg.context ?? {};
|
|
@@ -18349,7 +18364,9 @@ function buildSettingsCommand(opts) {
|
|
|
18349
18364
|
const raw = (rest[0] ?? "").toLowerCase();
|
|
18350
18365
|
const strategies = ["hybrid", "intelligent", "selective"];
|
|
18351
18366
|
if (!strategies.includes(raw)) {
|
|
18352
|
-
return {
|
|
18367
|
+
return {
|
|
18368
|
+
message: `${color44.amber("Usage:")} /settings context-strategy hybrid|intelligent|selective`
|
|
18369
|
+
};
|
|
18353
18370
|
}
|
|
18354
18371
|
await persistConfigSetting(persistDeps, (cfg) => {
|
|
18355
18372
|
const ctx = cfg.context ?? {};
|
|
@@ -18379,7 +18396,9 @@ function buildSettingsCommand(opts) {
|
|
|
18379
18396
|
const raw = (rest[0] ?? "").toLowerCase();
|
|
18380
18397
|
const tiers = ["off", "minimal", "light", "medium", "aggressive"];
|
|
18381
18398
|
if (!tiers.includes(raw)) {
|
|
18382
|
-
return {
|
|
18399
|
+
return {
|
|
18400
|
+
message: `${color44.amber("Usage:")} /settings token-saving off|minimal|light|medium|aggressive`
|
|
18401
|
+
};
|
|
18383
18402
|
}
|
|
18384
18403
|
await persistConfigSetting(persistDeps, (cfg) => {
|
|
18385
18404
|
const feat = cfg.features ?? {};
|
|
@@ -18482,125 +18501,173 @@ function buildSettingsCommand(opts) {
|
|
|
18482
18501
|
}
|
|
18483
18502
|
if (sub === "mcp") {
|
|
18484
18503
|
const raw = (rest[0] ?? "").toLowerCase();
|
|
18485
|
-
if (!["on", "off"].includes(raw))
|
|
18504
|
+
if (!["on", "off"].includes(raw))
|
|
18505
|
+
return { message: `${color44.amber("Usage:")} /settings mcp on|off` };
|
|
18486
18506
|
const on = raw === "on";
|
|
18487
18507
|
await persistConfigSetting(persistDeps, (cfg) => {
|
|
18488
18508
|
const feats = cfg.features ?? {};
|
|
18489
18509
|
feats.mcp = on;
|
|
18490
18510
|
cfg.features = feats;
|
|
18491
18511
|
});
|
|
18492
|
-
return {
|
|
18512
|
+
return {
|
|
18513
|
+
message: `${color44.green("\u2713")} MCP features \u2192 ${on ? color44.cyan("on") : color44.dim("off")} ${color44.dim("restart to apply")}`
|
|
18514
|
+
};
|
|
18493
18515
|
}
|
|
18494
18516
|
if (sub === "plugins") {
|
|
18495
18517
|
const raw = (rest[0] ?? "").toLowerCase();
|
|
18496
|
-
if (!["on", "off"].includes(raw))
|
|
18518
|
+
if (!["on", "off"].includes(raw))
|
|
18519
|
+
return { message: `${color44.amber("Usage:")} /settings plugins on|off` };
|
|
18497
18520
|
const on = raw === "on";
|
|
18498
18521
|
await persistConfigSetting(persistDeps, (cfg) => {
|
|
18499
18522
|
const feats = cfg.features ?? {};
|
|
18500
18523
|
feats.plugins = on;
|
|
18501
18524
|
cfg.features = feats;
|
|
18502
18525
|
});
|
|
18503
|
-
return {
|
|
18526
|
+
return {
|
|
18527
|
+
message: `${color44.green("\u2713")} Plugin features \u2192 ${on ? color44.cyan("on") : color44.dim("off")} ${color44.dim("restart to apply")}`
|
|
18528
|
+
};
|
|
18504
18529
|
}
|
|
18505
18530
|
if (sub === "memory") {
|
|
18506
18531
|
const raw = (rest[0] ?? "").toLowerCase();
|
|
18507
|
-
if (!["on", "off"].includes(raw))
|
|
18532
|
+
if (!["on", "off"].includes(raw))
|
|
18533
|
+
return { message: `${color44.amber("Usage:")} /settings memory on|off` };
|
|
18508
18534
|
const on = raw === "on";
|
|
18509
18535
|
await persistConfigSetting(persistDeps, (cfg) => {
|
|
18510
18536
|
const feats = cfg.features ?? {};
|
|
18511
18537
|
feats.memory = on;
|
|
18512
18538
|
cfg.features = feats;
|
|
18513
18539
|
});
|
|
18514
|
-
return {
|
|
18540
|
+
return {
|
|
18541
|
+
message: `${color44.green("\u2713")} Memory features \u2192 ${on ? color44.cyan("on") : color44.dim("off")} ${color44.dim("restart to apply")}`
|
|
18542
|
+
};
|
|
18515
18543
|
}
|
|
18516
18544
|
if (sub === "skills") {
|
|
18517
18545
|
const raw = (rest[0] ?? "").toLowerCase();
|
|
18518
|
-
if (!["on", "off"].includes(raw))
|
|
18546
|
+
if (!["on", "off"].includes(raw))
|
|
18547
|
+
return { message: `${color44.amber("Usage:")} /settings skills on|off` };
|
|
18519
18548
|
const on = raw === "on";
|
|
18520
18549
|
await persistConfigSetting(persistDeps, (cfg) => {
|
|
18521
18550
|
const feats = cfg.features ?? {};
|
|
18522
18551
|
feats.skills = on;
|
|
18523
18552
|
cfg.features = feats;
|
|
18524
18553
|
});
|
|
18525
|
-
return {
|
|
18554
|
+
return {
|
|
18555
|
+
message: `${color44.green("\u2713")} Skills features \u2192 ${on ? color44.cyan("on") : color44.dim("off")} ${color44.dim("restart to apply")}`
|
|
18556
|
+
};
|
|
18526
18557
|
}
|
|
18527
18558
|
if (sub === "models-registry") {
|
|
18528
18559
|
const raw = (rest[0] ?? "").toLowerCase();
|
|
18529
|
-
if (!["on", "off"].includes(raw))
|
|
18560
|
+
if (!["on", "off"].includes(raw))
|
|
18561
|
+
return { message: `${color44.amber("Usage:")} /settings models-registry on|off` };
|
|
18530
18562
|
const on = raw === "on";
|
|
18531
18563
|
await persistConfigSetting(persistDeps, (cfg) => {
|
|
18532
18564
|
const feats = cfg.features ?? {};
|
|
18533
18565
|
feats.modelsRegistry = on;
|
|
18534
18566
|
cfg.features = feats;
|
|
18535
18567
|
});
|
|
18536
|
-
return {
|
|
18568
|
+
return {
|
|
18569
|
+
message: `${color44.green("\u2713")} Models registry \u2192 ${on ? color44.cyan("on") : color44.dim("off")} ${color44.dim("restart to apply")}`
|
|
18570
|
+
};
|
|
18537
18571
|
}
|
|
18538
18572
|
if (sub === "stream-fleet") {
|
|
18539
18573
|
const raw = (rest[0] ?? "").toLowerCase();
|
|
18540
18574
|
const mode = raw === "on" ? "full" : raw === "off" || raw === "full" ? raw : void 0;
|
|
18541
|
-
if (!mode)
|
|
18575
|
+
if (!mode)
|
|
18576
|
+
return {
|
|
18577
|
+
message: `${color44.amber("Usage:")} /settings stream-fleet off|full (on = full)`
|
|
18578
|
+
};
|
|
18542
18579
|
await persistAutonomySetting(persistDeps, (autonomy) => {
|
|
18543
18580
|
autonomy.fleetChatVerbosity = mode;
|
|
18544
18581
|
});
|
|
18545
18582
|
opts.fleetStreamController?.setMode(mode);
|
|
18546
18583
|
const desc = mode === "full" ? "every subagent tool call and message in chat" : "subagent chat lines hidden (F2/F3 stay live)";
|
|
18547
|
-
return {
|
|
18584
|
+
return {
|
|
18585
|
+
message: `${color44.green("\u2713")} fleet chat \u2192 ${color44.cyan(mode)} ${color44.dim(desc)}`
|
|
18586
|
+
};
|
|
18548
18587
|
}
|
|
18549
18588
|
if (sub === "chime") {
|
|
18550
18589
|
const raw = (rest[0] ?? "").toLowerCase();
|
|
18551
|
-
if (!["on", "off"].includes(raw))
|
|
18590
|
+
if (!["on", "off"].includes(raw))
|
|
18591
|
+
return { message: `${color44.amber("Usage:")} /settings chime on|off` };
|
|
18552
18592
|
const on = raw === "on";
|
|
18553
18593
|
await persistAutonomySetting(persistDeps, (autonomy) => {
|
|
18554
18594
|
autonomy.chime = on;
|
|
18555
18595
|
});
|
|
18556
|
-
return {
|
|
18596
|
+
return {
|
|
18597
|
+
message: `${color44.green("\u2713")} completion chime \u2192 ${on ? color44.cyan("on") : color44.dim("off")}`
|
|
18598
|
+
};
|
|
18557
18599
|
}
|
|
18558
18600
|
if (sub === "confirm-exit") {
|
|
18559
18601
|
const raw = (rest[0] ?? "").toLowerCase();
|
|
18560
|
-
if (!["on", "off"].includes(raw))
|
|
18602
|
+
if (!["on", "off"].includes(raw))
|
|
18603
|
+
return { message: `${color44.amber("Usage:")} /settings confirm-exit on|off` };
|
|
18561
18604
|
const on = raw === "on";
|
|
18562
18605
|
await persistAutonomySetting(persistDeps, (autonomy) => {
|
|
18563
18606
|
autonomy.confirmExit = on;
|
|
18564
18607
|
});
|
|
18565
|
-
return {
|
|
18608
|
+
return {
|
|
18609
|
+
message: `${color44.green("\u2713")} confirm before exit \u2192 ${on ? color44.cyan("on") : color44.dim("off")}`
|
|
18610
|
+
};
|
|
18566
18611
|
}
|
|
18567
18612
|
if (sub === "max-iterations") {
|
|
18568
18613
|
const raw = rest[0];
|
|
18569
|
-
if (raw === void 0)
|
|
18614
|
+
if (raw === void 0)
|
|
18615
|
+
return {
|
|
18616
|
+
message: `${color44.amber("Usage:")} /settings max-iterations <n> ${color44.dim("(0 = default)")}`
|
|
18617
|
+
};
|
|
18570
18618
|
const n = Number.parseInt(raw, 10);
|
|
18571
|
-
if (Number.isNaN(n) || n < 0)
|
|
18619
|
+
if (Number.isNaN(n) || n < 0)
|
|
18620
|
+
return {
|
|
18621
|
+
message: `${color44.red("Invalid number")}: "${raw}". Enter a non-negative integer.`
|
|
18622
|
+
};
|
|
18572
18623
|
await persistConfigSetting(persistDeps, (cfg) => {
|
|
18573
18624
|
const tools = cfg.tools ?? {};
|
|
18574
18625
|
tools.maxIterations = n;
|
|
18575
18626
|
cfg.tools = tools;
|
|
18576
18627
|
});
|
|
18577
|
-
return {
|
|
18628
|
+
return {
|
|
18629
|
+
message: `${color44.green("\u2713")} max iterations \u2192 ${color44.cyan(n === 0 ? "default" : String(n))} ${color44.dim("agent pauses after this many iterations")}`
|
|
18630
|
+
};
|
|
18578
18631
|
}
|
|
18579
18632
|
if (sub === "auto-proceed-max-iterations") {
|
|
18580
18633
|
const raw = rest[0];
|
|
18581
|
-
if (raw === void 0)
|
|
18634
|
+
if (raw === void 0)
|
|
18635
|
+
return {
|
|
18636
|
+
message: `${color44.amber("Usage:")} /settings auto-proceed-max-iterations <n> ${color44.dim("(0 = unlimited)")}`
|
|
18637
|
+
};
|
|
18582
18638
|
const n = Number.parseInt(raw, 10);
|
|
18583
|
-
if (Number.isNaN(n) || n < 0)
|
|
18639
|
+
if (Number.isNaN(n) || n < 0)
|
|
18640
|
+
return {
|
|
18641
|
+
message: `${color44.red("Invalid number")}: "${raw}". Enter a non-negative integer.`
|
|
18642
|
+
};
|
|
18584
18643
|
await persistAutonomySetting(persistDeps, (autonomy) => {
|
|
18585
18644
|
autonomy.autoProceedMaxIterations = n;
|
|
18586
18645
|
});
|
|
18587
|
-
return {
|
|
18646
|
+
return {
|
|
18647
|
+
message: `${color44.green("\u2713")} auto-proceed max iterations \u2192 ${color44.cyan(n === 0 ? "unlimited" : String(n))}`
|
|
18648
|
+
};
|
|
18588
18649
|
}
|
|
18589
18650
|
if (sub === "index-on-start") {
|
|
18590
18651
|
const raw = (rest[0] ?? "").toLowerCase();
|
|
18591
|
-
if (!["on", "off"].includes(raw))
|
|
18652
|
+
if (!["on", "off"].includes(raw))
|
|
18653
|
+
return { message: `${color44.amber("Usage:")} /settings index-on-start on|off` };
|
|
18592
18654
|
const on = raw === "on";
|
|
18593
18655
|
await persistConfigSetting(persistDeps, (cfg) => {
|
|
18594
18656
|
const idx = cfg.indexing ?? {};
|
|
18595
18657
|
idx.onSessionStart = on;
|
|
18596
18658
|
cfg.indexing = idx;
|
|
18597
18659
|
});
|
|
18598
|
-
return {
|
|
18660
|
+
return {
|
|
18661
|
+
message: `${color44.green("\u2713")} index on session start \u2192 ${on ? color44.cyan("on") : color44.dim("off")} ${color44.dim("effective next session")}`
|
|
18662
|
+
};
|
|
18599
18663
|
}
|
|
18600
18664
|
if (sub === "log-level") {
|
|
18601
18665
|
const raw = (rest[0] ?? "").toLowerCase();
|
|
18602
18666
|
const levels = ["error", "warn", "info", "debug", "trace"];
|
|
18603
|
-
if (!levels.includes(raw))
|
|
18667
|
+
if (!levels.includes(raw))
|
|
18668
|
+
return {
|
|
18669
|
+
message: `${color44.amber("Usage:")} /settings log-level error|warn|info|debug|trace`
|
|
18670
|
+
};
|
|
18604
18671
|
await persistConfigSetting(persistDeps, (cfg) => {
|
|
18605
18672
|
const log = cfg.log ?? {};
|
|
18606
18673
|
log.level = raw;
|
|
@@ -18611,18 +18678,27 @@ function buildSettingsCommand(opts) {
|
|
|
18611
18678
|
if (sub === "audit-level") {
|
|
18612
18679
|
const raw = (rest[0] ?? "").toLowerCase();
|
|
18613
18680
|
const levels = ["minimal", "standard", "full"];
|
|
18614
|
-
if (!levels.includes(raw))
|
|
18681
|
+
if (!levels.includes(raw))
|
|
18682
|
+
return {
|
|
18683
|
+
message: `${color44.amber("Usage:")} /settings audit-level minimal|standard|full`
|
|
18684
|
+
};
|
|
18615
18685
|
await persistConfigSetting(persistDeps, (cfg) => {
|
|
18616
18686
|
const sess = cfg.session ?? {};
|
|
18617
18687
|
sess.auditLevel = raw;
|
|
18618
18688
|
cfg.session = sess;
|
|
18619
18689
|
});
|
|
18620
|
-
return {
|
|
18690
|
+
return {
|
|
18691
|
+
message: `${color44.green("\u2713")} audit level \u2192 ${color44.cyan(raw)} ${color44.dim("restart to apply")}`
|
|
18692
|
+
};
|
|
18621
18693
|
}
|
|
18622
18694
|
if (sub === "thinking-word") {
|
|
18623
18695
|
const raw = rest.join(" ").trim();
|
|
18624
|
-
if (!raw)
|
|
18625
|
-
|
|
18696
|
+
if (!raw)
|
|
18697
|
+
return {
|
|
18698
|
+
message: `${color44.amber("Usage:")} /settings thinking-word <word> ${color44.dim('single short word, e.g. "thinking", "vibing", "cooking"')}`
|
|
18699
|
+
};
|
|
18700
|
+
if (raw.length > 16)
|
|
18701
|
+
return { message: `${color44.red("Word too long")}: max 16 characters.` };
|
|
18626
18702
|
await persistAutonomySetting(persistDeps, (autonomy) => {
|
|
18627
18703
|
autonomy.thinkingWord = raw;
|
|
18628
18704
|
});
|
|
@@ -18631,23 +18707,45 @@ function buildSettingsCommand(opts) {
|
|
|
18631
18707
|
if (sub === "statusline") {
|
|
18632
18708
|
const raw = (rest[0] ?? "").toLowerCase();
|
|
18633
18709
|
const modes = ["minimum", "detailed", "no-color"];
|
|
18634
|
-
if (!modes.includes(raw))
|
|
18710
|
+
if (!modes.includes(raw))
|
|
18711
|
+
return {
|
|
18712
|
+
message: `${color44.amber("Usage:")} /settings statusline minimum|detailed|no-color`
|
|
18713
|
+
};
|
|
18635
18714
|
await persistAutonomySetting(persistDeps, (autonomy) => {
|
|
18636
18715
|
autonomy.statuslineMode = raw;
|
|
18637
18716
|
});
|
|
18638
18717
|
return { message: `${color44.green("\u2713")} statusline mode \u2192 ${color44.cyan(raw)}` };
|
|
18639
18718
|
}
|
|
18719
|
+
if (sub === "read-symbols") {
|
|
18720
|
+
const raw = (rest[0] ?? "").toLowerCase();
|
|
18721
|
+
if (!["on", "off"].includes(raw)) {
|
|
18722
|
+
return { message: `${color44.amber("Usage:")} /settings read-symbols on|off` };
|
|
18723
|
+
}
|
|
18724
|
+
const on = raw === "on";
|
|
18725
|
+
await persistAutonomySetting(persistDeps, (autonomy) => {
|
|
18726
|
+
autonomy.readAdvancedMode = on;
|
|
18727
|
+
});
|
|
18728
|
+
if (opts.context?.meta) {
|
|
18729
|
+
opts.context.meta["tools.read.advancedMode"] = on;
|
|
18730
|
+
}
|
|
18731
|
+
return {
|
|
18732
|
+
message: `${color44.green("\u2713")} read symbols \u2192 ${on ? color44.cyan("on") : color44.dim("off")} ${color44.dim(on ? "codebase-index symbols will be included in read tool results" : "read tool returns file content only")}`
|
|
18733
|
+
};
|
|
18734
|
+
}
|
|
18640
18735
|
if (sub === "animation") {
|
|
18641
18736
|
const raw = (rest[0] ?? "").toLowerCase();
|
|
18642
18737
|
const styles = ["rainbow", "wave", "pulse", "dots", "breathe", "cycle"];
|
|
18643
|
-
if (!styles.includes(raw))
|
|
18738
|
+
if (!styles.includes(raw))
|
|
18739
|
+
return {
|
|
18740
|
+
message: `${color44.amber("Usage:")} /settings animation rainbow|wave|pulse|dots|breathe|cycle`
|
|
18741
|
+
};
|
|
18644
18742
|
await persistAutonomySetting(persistDeps, (autonomy) => {
|
|
18645
18743
|
autonomy.animationStyle = raw;
|
|
18646
18744
|
});
|
|
18647
18745
|
return { message: `${color44.green("\u2713")} animation style \u2192 ${color44.cyan(raw)}` };
|
|
18648
18746
|
}
|
|
18649
18747
|
return {
|
|
18650
|
-
message: `${color44.red("Unknown setting")} "${sub}". ${unknownSubcommand(sub, ["delay", "mode", "hints", "debug-stream", "config-scope", "fs-access", "refine", "refine-delay", "refine-language", "refiner-provider", "refiner-model", "refiner-fallback-profile", "refiner-clear", "semver-part", "breaker", "breaker-timeout", "context-mode", "context-strategy", "context-auto-compact", "token-saving", "max-concurrent", "title-animation", "reasoning", "reasoning-effort", "reasoning-preserve", "cache-ttl", "stream-fleet", "chime", "confirm-exit", "mcp", "plugins", "memory", "skills", "models-registry", "max-iterations", "auto-proceed-max-iterations", "index-on-start", "log-level", "audit-level", "thinking-word", "statusline", "animation", "defaults"], "settings")}`
|
|
18748
|
+
message: `${color44.red("Unknown setting")} "${sub}". ${unknownSubcommand(sub, ["delay", "mode", "hints", "debug-stream", "config-scope", "fs-access", "refine", "refine-delay", "refine-language", "refiner-provider", "refiner-model", "refiner-fallback-profile", "refiner-clear", "semver-part", "breaker", "breaker-timeout", "context-mode", "context-strategy", "context-auto-compact", "token-saving", "max-concurrent", "title-animation", "reasoning", "reasoning-effort", "reasoning-preserve", "cache-ttl", "stream-fleet", "chime", "confirm-exit", "mcp", "plugins", "memory", "skills", "models-registry", "max-iterations", "auto-proceed-max-iterations", "index-on-start", "log-level", "audit-level", "thinking-word", "statusline", "animation", "read-symbols", "defaults"], "settings")}`
|
|
18651
18749
|
};
|
|
18652
18750
|
} catch (err) {
|
|
18653
18751
|
return {
|
|
@@ -23197,6 +23295,16 @@ ${audienceMemory.map((text) => `- ${text}`).join("\n")}`
|
|
|
23197
23295
|
subReasoningConfig = await resolveHostSubagentReasoningConfig(host.deps, id, model);
|
|
23198
23296
|
},
|
|
23199
23297
|
events,
|
|
23298
|
+
// Thread the leader's shared ProviderModelStatusTracker so the
|
|
23299
|
+
// subagent's fallback extension quarantines a (provider, model) pair
|
|
23300
|
+
// on the first 429 (rate-limit) failure instead of silently
|
|
23301
|
+
// reassigning the same doomed model on every concurrent spawn.
|
|
23302
|
+
// Without this dep, deps.statusTracker in fallback-model.ts is
|
|
23303
|
+
// undefined and every recordFailure / isAvailable call is a no-op,
|
|
23304
|
+
// so the waiting-room transition never fires along the subagent
|
|
23305
|
+
// dispatch path. The tracker is the same singleton the leader uses,
|
|
23306
|
+
// populated by brain-and-orchestration.ts into host.opts.statusTracker.
|
|
23307
|
+
...host.opts.statusTracker ? { statusTracker: host.opts.statusTracker } : {},
|
|
23200
23308
|
...mergedConfig.fallbackStickiness?.primaryProbeInterval !== void 0 ? { primaryCooldownMs: mergedConfig.fallbackStickiness.primaryProbeInterval } : {},
|
|
23201
23309
|
...mergedConfig.fallbackStickiness?.stickyFallbackTurns !== void 0 ? { stickyFallbackTurns: mergedConfig.fallbackStickiness.stickyFallbackTurns } : {}
|
|
23202
23310
|
})
|
|
@@ -27532,6 +27640,7 @@ function setupSage(deps) {
|
|
|
27532
27640
|
maxCharsPerTool: cfg?.inject?.maxCharsPerTool,
|
|
27533
27641
|
taskAware: cfg?.inject?.taskAware,
|
|
27534
27642
|
minScore: cfg?.inject?.minScore,
|
|
27643
|
+
minImportance: cfg?.inject?.minImportance,
|
|
27535
27644
|
repeatCooldownMs: cfg?.inject?.repeatCooldownMs,
|
|
27536
27645
|
verifyOnMutation: cfg?.hygiene?.autoOnFileChange,
|
|
27537
27646
|
triggers: cfg?.inject?.triggers,
|
|
@@ -28233,7 +28342,12 @@ async function setupSession(params) {
|
|
|
28233
28342
|
const todosCheckpointPath = sessionScopedPath3(wpaths.projectSessions, sessionId, ".todos.json");
|
|
28234
28343
|
if (resumeId) {
|
|
28235
28344
|
try {
|
|
28236
|
-
const restoredTodos = await loadTodosCheckpoint(
|
|
28345
|
+
const restoredTodos = await loadTodosCheckpoint(
|
|
28346
|
+
todosCheckpointPath,
|
|
28347
|
+
eventsBus,
|
|
28348
|
+
traceId,
|
|
28349
|
+
sessionId
|
|
28350
|
+
);
|
|
28237
28351
|
if (restoredTodos && restoredTodos.length > 0) {
|
|
28238
28352
|
context.state.replaceTodos(restoredTodos);
|
|
28239
28353
|
renderer.writeInfo(
|
|
@@ -28243,14 +28357,39 @@ async function setupSession(params) {
|
|
|
28243
28357
|
} catch {
|
|
28244
28358
|
}
|
|
28245
28359
|
}
|
|
28246
|
-
const
|
|
28360
|
+
const checkpointWarning = loggerParam ? (msg) => loggerParam.warn(msg) : void 0;
|
|
28361
|
+
let checkpointSessionId = sessionId;
|
|
28362
|
+
let checkpointSessionsDir = wpaths.projectSessions;
|
|
28363
|
+
const attachCheckpoint = (targetSessionId, sessionsDir) => attachTodosCheckpoint(
|
|
28247
28364
|
context.state,
|
|
28248
|
-
|
|
28249
|
-
|
|
28365
|
+
sessionScopedPath3(sessionsDir, targetSessionId, ".todos.json"),
|
|
28366
|
+
targetSessionId,
|
|
28250
28367
|
eventsBus,
|
|
28251
28368
|
traceId,
|
|
28252
|
-
|
|
28369
|
+
checkpointWarning
|
|
28253
28370
|
);
|
|
28371
|
+
let detachTodosCheckpointOnly = attachCheckpoint(sessionId, checkpointSessionsDir);
|
|
28372
|
+
let checkpointAttached = true;
|
|
28373
|
+
const detachCurrentCheckpoint = async () => {
|
|
28374
|
+
if (!checkpointAttached) return;
|
|
28375
|
+
checkpointAttached = false;
|
|
28376
|
+
await detachTodosCheckpointOnly();
|
|
28377
|
+
};
|
|
28378
|
+
let checkpointRebindTail = Promise.resolve();
|
|
28379
|
+
const rebindTodosCheckpoint = (nextSessionId, sessionsDir = wpaths.projectSessions) => {
|
|
28380
|
+
const transition = checkpointRebindTail.then(async () => {
|
|
28381
|
+
if (checkpointAttached && nextSessionId === checkpointSessionId && sessionsDir === checkpointSessionsDir) {
|
|
28382
|
+
return;
|
|
28383
|
+
}
|
|
28384
|
+
await detachCurrentCheckpoint();
|
|
28385
|
+
checkpointSessionId = nextSessionId;
|
|
28386
|
+
checkpointSessionsDir = sessionsDir;
|
|
28387
|
+
detachTodosCheckpointOnly = attachCheckpoint(nextSessionId, sessionsDir);
|
|
28388
|
+
checkpointAttached = true;
|
|
28389
|
+
});
|
|
28390
|
+
checkpointRebindTail = transition.catch(() => void 0);
|
|
28391
|
+
return transition;
|
|
28392
|
+
};
|
|
28254
28393
|
const planPath = sessionScopedPath3(wpaths.projectSessions, sessionId, ".plan.json");
|
|
28255
28394
|
context.state.setMeta("plan.path", planPath);
|
|
28256
28395
|
const taskPath = sessionScopedPath3(wpaths.projectSessions, sessionId, ".tasks.json");
|
|
@@ -28260,7 +28399,8 @@ async function setupSession(params) {
|
|
|
28260
28399
|
const detachTodosCheckpoint = async () => {
|
|
28261
28400
|
detachSessionKanbanMirror();
|
|
28262
28401
|
cacheLedger?.dispose();
|
|
28263
|
-
await
|
|
28402
|
+
await checkpointRebindTail;
|
|
28403
|
+
await detachCurrentCheckpoint();
|
|
28264
28404
|
};
|
|
28265
28405
|
let dirState;
|
|
28266
28406
|
if (resumeId) {
|
|
@@ -28299,6 +28439,7 @@ async function setupSession(params) {
|
|
|
28299
28439
|
queueStore,
|
|
28300
28440
|
planPath,
|
|
28301
28441
|
detachTodosCheckpoint,
|
|
28442
|
+
rebindTodosCheckpoint,
|
|
28302
28443
|
priorFleetState: dirState ?? void 0,
|
|
28303
28444
|
restoredToolCalls,
|
|
28304
28445
|
restoredEvents,
|
|
@@ -28939,7 +29080,7 @@ async function runInteractive(cliCtx) {
|
|
|
28939
29080
|
onEvent: evOn
|
|
28940
29081
|
});
|
|
28941
29082
|
const savedProviderCfg = config.providers?.[config.provider];
|
|
28942
|
-
const { execute } = await import("./execution-
|
|
29083
|
+
const { execute } = await import("./execution-O7I5DYE6.js");
|
|
28943
29084
|
const stopHeapWatchdog = startHeapWatchdog();
|
|
28944
29085
|
teardownHandlers.push(() => {
|
|
28945
29086
|
void stopHeapWatchdog();
|
|
@@ -28972,6 +29113,7 @@ async function runInteractive(cliCtx) {
|
|
|
28972
29113
|
queueStore,
|
|
28973
29114
|
context,
|
|
28974
29115
|
detachTodosCheckpoint,
|
|
29116
|
+
rebindTodosCheckpoint: sessResult.rebindTodosCheckpoint,
|
|
28975
29117
|
sessionStore,
|
|
28976
29118
|
memoryStore,
|
|
28977
29119
|
modeStore,
|
|
@@ -29123,4 +29265,4 @@ export {
|
|
|
29123
29265
|
CLI_VERSION,
|
|
29124
29266
|
runInteractive
|
|
29125
29267
|
};
|
|
29126
|
-
//# sourceMappingURL=cli-main-
|
|
29268
|
+
//# sourceMappingURL=cli-main-RTY35OPD.js.map
|