@wrongstack/cli 1.0.13 → 1.0.15
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/{chunk-TNZBQG45.js → chunk-DUF5FEWD.js} +2 -2
- package/dist/{chunk-YRC3I3LE.js → chunk-MZY6UDWC.js} +14 -3
- package/dist/{chunk-OJR7K3OI.js → chunk-U3PDQOYU.js} +2 -2
- package/dist/{cli-context-5IF7ZYEY.js → cli-context-6MTVFJPO.js} +5 -5
- package/dist/{cli-main-6JWASRH2.js → cli-main-42SM33EG.js} +69 -14
- package/dist/execute-deps.d.ts +5 -1
- package/dist/{execution-EXDRBS4F.js → execution-6KIOQUAG.js} +7 -1
- package/dist/{hq-NO2NWGU4.js → hq-O5BOP6UY.js} +12 -2
- package/dist/hq-server/auth.d.ts +10 -0
- package/dist/{hq-server-KE5YDNGG.js → hq-server-YW4MJCKH.js} +2 -2
- package/dist/index.js +10 -4
- package/dist/services/statusline-config.d.ts +12 -5
- package/dist/{short-circuit-flags-72E77TJI.js → short-circuit-flags-T6EFG3W6.js} +2 -2
- package/dist/{subcommands-EJI7DBQS.js → subcommands-3ILCNR2T.js} +2 -2
- package/dist/wiring/cli-execute-builder.d.ts +3 -0
- package/dist/wiring/command-host-state.d.ts +5 -1
- package/dist/wiring/runtime-controller-deps.d.ts +3 -0
- package/package.json +28 -28
|
@@ -22,7 +22,7 @@ async function handleHelpVersionShortCircuit(argv) {
|
|
|
22
22
|
}
|
|
23
23
|
if (earlyFlags["help"] === true) {
|
|
24
24
|
if (positional.length > 0) {
|
|
25
|
-
const { subcommandNames } = await import("./subcommands-
|
|
25
|
+
const { subcommandNames } = await import("./subcommands-3ILCNR2T.js");
|
|
26
26
|
if (subcommandNames.includes(positional[0])) {
|
|
27
27
|
const first = positional[0];
|
|
28
28
|
const deep = positional[1];
|
|
@@ -43,4 +43,4 @@ async function handleHelpVersionShortCircuit(argv) {
|
|
|
43
43
|
export {
|
|
44
44
|
handleHelpVersionShortCircuit
|
|
45
45
|
};
|
|
46
|
-
//# sourceMappingURL=chunk-
|
|
46
|
+
//# sourceMappingURL=chunk-DUF5FEWD.js.map
|
|
@@ -231,7 +231,7 @@ function hqAuthRequired(mutableAuth, requireBrowserAuth) {
|
|
|
231
231
|
return (requireBrowserAuth ?? mutableAuth.requireBrowserAuth) === true || mutableAuth.requireAuthFloor === true || mutableAuth.browserTokens.size > 0 || mutableAuth.passwordHash !== void 0;
|
|
232
232
|
}
|
|
233
233
|
function hqClientAuthRequired(mutableAuth) {
|
|
234
|
-
return mutableAuth.
|
|
234
|
+
return mutableAuth.clientTokens.size > 0 || hqAuthRequired(mutableAuth);
|
|
235
235
|
}
|
|
236
236
|
function extractBrowserToken(req, url) {
|
|
237
237
|
const queryToken = url.searchParams.get("token");
|
|
@@ -4880,8 +4880,19 @@ async function startHqServerWithAuth(options, host, port, dataDir, firstRunAuth)
|
|
|
4880
4880
|
bootstrapStore
|
|
4881
4881
|
};
|
|
4882
4882
|
const handleRequest = createHqRouter(routerDeps);
|
|
4883
|
+
const closeSocketsOfRemovedSessions = (before) => {
|
|
4884
|
+
for (const [browser, sessionId] of browserSocketSessions) {
|
|
4885
|
+
if (!before.has(sessionId) || sessions.has(sessionId)) continue;
|
|
4886
|
+
if (browser.readyState === WebSocket3.OPEN) {
|
|
4887
|
+
browser.close(1008, "Browser session revoked");
|
|
4888
|
+
}
|
|
4889
|
+
}
|
|
4890
|
+
};
|
|
4883
4891
|
const httpServer = http.createServer((req, res) => {
|
|
4884
|
-
|
|
4892
|
+
const sessionsBefore = sessions.size > 0 ? new Set(sessions.keys()) : void 0;
|
|
4893
|
+
void handleRequest(req, res).finally(() => {
|
|
4894
|
+
if (sessionsBefore !== void 0) closeSocketsOfRemovedSessions(sessionsBefore);
|
|
4895
|
+
});
|
|
4885
4896
|
});
|
|
4886
4897
|
const wss = new WebSocketServer({ noServer: true, maxPayload: 1 * 1024 * 1024 });
|
|
4887
4898
|
const browserHeartbeatTimer = setInterval(() => {
|
|
@@ -5089,4 +5100,4 @@ export {
|
|
|
5089
5100
|
startHqServer,
|
|
5090
5101
|
HqInsecureExposureError2 as HqInsecureExposureError
|
|
5091
5102
|
};
|
|
5092
|
-
//# sourceMappingURL=chunk-
|
|
5103
|
+
//# sourceMappingURL=chunk-MZY6UDWC.js.map
|
|
@@ -31,7 +31,7 @@ var loaders = {
|
|
|
31
31
|
quick: async () => (await import("./quick-CNB4Z3HS.js")).quickCmd,
|
|
32
32
|
bench: async () => (await import("./bench-YBU6BVQP.js")).benchCmd,
|
|
33
33
|
chronicle: async () => (await import("./chronicle-UTFETHP6.js")).chronicleCmd,
|
|
34
|
-
hq: async () => (await import("./hq-
|
|
34
|
+
hq: async () => (await import("./hq-O5BOP6UY.js")).hqCmd,
|
|
35
35
|
mailbox: async () => (await import("./mailbox-serve-X3CR6VFW.js")).mailboxServeCmd,
|
|
36
36
|
permissions: async () => (await import("./permissions-CFDLXETM.js")).permissionsCmd,
|
|
37
37
|
project: async () => (await import("./project-AOQI5XTK.js")).projectCmd,
|
|
@@ -51,4 +51,4 @@ export {
|
|
|
51
51
|
subcommands,
|
|
52
52
|
subcommandNames
|
|
53
53
|
};
|
|
54
|
-
//# sourceMappingURL=chunk-
|
|
54
|
+
//# sourceMappingURL=chunk-U3PDQOYU.js.map
|
|
@@ -19,17 +19,17 @@ import {
|
|
|
19
19
|
} from "./chunk-GPPRNAKW.js";
|
|
20
20
|
import {
|
|
21
21
|
subcommands
|
|
22
|
-
} from "./chunk-
|
|
22
|
+
} from "./chunk-U3PDQOYU.js";
|
|
23
23
|
import {
|
|
24
24
|
renderDeepHelp,
|
|
25
25
|
renderFocusedHelp
|
|
26
26
|
} from "./chunk-JX6KL7OF.js";
|
|
27
27
|
import {
|
|
28
28
|
handleHelpVersionShortCircuit
|
|
29
|
-
} from "./chunk-
|
|
29
|
+
} from "./chunk-DUF5FEWD.js";
|
|
30
30
|
import {
|
|
31
31
|
DEFAULT_PORT
|
|
32
|
-
} from "./chunk-
|
|
32
|
+
} from "./chunk-MZY6UDWC.js";
|
|
33
33
|
import "./chunk-HXJYHAR4.js";
|
|
34
34
|
import {
|
|
35
35
|
resolveHqPasswordInput
|
|
@@ -866,7 +866,7 @@ async function isPortInUse(host, port) {
|
|
|
866
866
|
}
|
|
867
867
|
async function handleHqShortCircuit(flags) {
|
|
868
868
|
if (flags["hq"] !== true) return null;
|
|
869
|
-
const { startHqServer } = await import("./hq-server-
|
|
869
|
+
const { startHqServer } = await import("./hq-server-YW4MJCKH.js");
|
|
870
870
|
const tunnelRequested = flags["tunnel"] === true;
|
|
871
871
|
const rawPublicUrl = typeof flags["hq-public-url"] === "string" ? flags["hq-public-url"] : process.env.WRONGSTACK_HQ_PUBLIC_URL;
|
|
872
872
|
let publicOrigin;
|
|
@@ -3303,4 +3303,4 @@ async function initializeCli(argv) {
|
|
|
3303
3303
|
export {
|
|
3304
3304
|
initializeCli
|
|
3305
3305
|
};
|
|
3306
|
-
//# sourceMappingURL=cli-context-
|
|
3306
|
+
//# sourceMappingURL=cli-context-6MTVFJPO.js.map
|
|
@@ -5822,6 +5822,9 @@ function createRuntimeControllerDeps(input) {
|
|
|
5822
5822
|
statuslineDensities: input.statuslineDensities,
|
|
5823
5823
|
setStatuslineDensities: input.setStatuslineDensities,
|
|
5824
5824
|
saveStatuslineDensities: input.saveStatuslineDensities,
|
|
5825
|
+
statuslineOrder: input.statuslineOrder,
|
|
5826
|
+
setStatuslineOrder: input.setStatuslineOrder,
|
|
5827
|
+
saveStatuslineOrder: input.saveStatuslineOrder,
|
|
5825
5828
|
getYolo: input.getYolo,
|
|
5826
5829
|
onYolo: input.onYolo,
|
|
5827
5830
|
getAutonomy: input.getAutonomy,
|
|
@@ -6210,6 +6213,9 @@ async function runCliExecution(params) {
|
|
|
6210
6213
|
statuslineDensities,
|
|
6211
6214
|
setStatuslineDensities,
|
|
6212
6215
|
saveStatuslineDensities,
|
|
6216
|
+
statuslineOrder,
|
|
6217
|
+
setStatuslineOrder,
|
|
6218
|
+
saveStatuslineOrder,
|
|
6213
6219
|
setYoloMode,
|
|
6214
6220
|
autonomyMode,
|
|
6215
6221
|
setAutonomyMode,
|
|
@@ -6238,7 +6244,7 @@ async function runCliExecution(params) {
|
|
|
6238
6244
|
governanceHandle,
|
|
6239
6245
|
setConfig
|
|
6240
6246
|
} = params;
|
|
6241
|
-
const { execute } = await import("./execution-
|
|
6247
|
+
const { execute } = await import("./execution-6KIOQUAG.js");
|
|
6242
6248
|
return execute(
|
|
6243
6249
|
toExecuteDeps({
|
|
6244
6250
|
core: {
|
|
@@ -6360,6 +6366,9 @@ async function runCliExecution(params) {
|
|
|
6360
6366
|
statuslineDensities,
|
|
6361
6367
|
setStatuslineDensities,
|
|
6362
6368
|
saveStatuslineDensities,
|
|
6369
|
+
statuslineOrder,
|
|
6370
|
+
setStatuslineOrder,
|
|
6371
|
+
saveStatuslineOrder,
|
|
6363
6372
|
getYolo: setYoloMode,
|
|
6364
6373
|
onYolo: setYoloMode,
|
|
6365
6374
|
getAutonomy: () => autonomyMode,
|
|
@@ -8840,13 +8849,14 @@ import * as path9 from "node:path";
|
|
|
8840
8849
|
import {
|
|
8841
8850
|
clampLine,
|
|
8842
8851
|
defaultChipEnabledMap,
|
|
8852
|
+
resolveStatuslineOrder,
|
|
8843
8853
|
STATUSLINE_DENSITY_LEVELS,
|
|
8844
8854
|
STATUSLINE_ITEMS
|
|
8845
8855
|
} from "@wrongstack/core/statusline";
|
|
8846
8856
|
import { ERROR_CODES, FsError } from "@wrongstack/core/types";
|
|
8847
8857
|
import { atomicWrite, resolveWstackPaths, toErrorMessage as toErrorMessage4 } from "@wrongstack/core/utils";
|
|
8848
8858
|
var CONFIG_ENV = "WRONGSTACK_STATUSLINE_CONFIG";
|
|
8849
|
-
var STATUSLINE_CONFIG_VERSION =
|
|
8859
|
+
var STATUSLINE_CONFIG_VERSION = 4;
|
|
8850
8860
|
var STATUSLINE_CONFIG_KEYS = STATUSLINE_ITEMS;
|
|
8851
8861
|
var DEFAULTS = defaultChipEnabledMap();
|
|
8852
8862
|
function emptyDocument() {
|
|
@@ -8854,7 +8864,8 @@ function emptyDocument() {
|
|
|
8854
8864
|
version: STATUSLINE_CONFIG_VERSION,
|
|
8855
8865
|
chips: { ...DEFAULTS },
|
|
8856
8866
|
lines: {},
|
|
8857
|
-
densities: {}
|
|
8867
|
+
densities: {},
|
|
8868
|
+
order: []
|
|
8858
8869
|
};
|
|
8859
8870
|
}
|
|
8860
8871
|
function resolveConfigPath() {
|
|
@@ -8898,20 +8909,30 @@ function normalizeDensities(value) {
|
|
|
8898
8909
|
}
|
|
8899
8910
|
return densities;
|
|
8900
8911
|
}
|
|
8912
|
+
function normalizeOrder(value) {
|
|
8913
|
+
if (!Array.isArray(value)) return [];
|
|
8914
|
+
const items = value.filter(
|
|
8915
|
+
(item) => typeof item === "string" && STATUSLINE_CONFIG_KEYS.includes(item)
|
|
8916
|
+
);
|
|
8917
|
+
const resolved = resolveStatuslineOrder(items);
|
|
8918
|
+
return resolved.every((item, index) => item === STATUSLINE_ITEMS[index]) ? [] : resolved;
|
|
8919
|
+
}
|
|
8901
8920
|
function parseDocument(value) {
|
|
8902
|
-
if (isRecord2(value) && (isRecord2(value["chips"]) || isRecord2(value["lines"]) || isRecord2(value["densities"]))) {
|
|
8921
|
+
if (isRecord2(value) && (isRecord2(value["chips"]) || isRecord2(value["lines"]) || isRecord2(value["densities"]) || Array.isArray(value["order"]))) {
|
|
8903
8922
|
return {
|
|
8904
8923
|
version: STATUSLINE_CONFIG_VERSION,
|
|
8905
8924
|
chips: normalizeChips(value["chips"]),
|
|
8906
8925
|
lines: normalizeLines(value["lines"]),
|
|
8907
|
-
densities: normalizeDensities(value["densities"])
|
|
8926
|
+
densities: normalizeDensities(value["densities"]),
|
|
8927
|
+
order: normalizeOrder(value["order"])
|
|
8908
8928
|
};
|
|
8909
8929
|
}
|
|
8910
8930
|
return {
|
|
8911
8931
|
version: STATUSLINE_CONFIG_VERSION,
|
|
8912
8932
|
chips: normalizeChips(value),
|
|
8913
8933
|
lines: {},
|
|
8914
|
-
densities: {}
|
|
8934
|
+
densities: {},
|
|
8935
|
+
order: []
|
|
8915
8936
|
};
|
|
8916
8937
|
}
|
|
8917
8938
|
function isMissingKnownChips(value) {
|
|
@@ -8921,8 +8942,9 @@ function needsRewrite(value) {
|
|
|
8921
8942
|
if (isRecord2(value) && isRecord2(value["chips"])) {
|
|
8922
8943
|
if (value["version"] !== STATUSLINE_CONFIG_VERSION) return true;
|
|
8923
8944
|
if (isMissingKnownChips(value["chips"])) return true;
|
|
8924
|
-
if (!isRecord2(value["lines"]) || !isRecord2(value["densities"])
|
|
8925
|
-
|
|
8945
|
+
if (!isRecord2(value["lines"]) || !isRecord2(value["densities"]) || !Array.isArray(value["order"]))
|
|
8946
|
+
return true;
|
|
8947
|
+
return JSON.stringify(normalizeLines(value["lines"])) !== JSON.stringify(value["lines"]) || JSON.stringify(normalizeDensities(value["densities"])) !== JSON.stringify(value["densities"]) || JSON.stringify(normalizeOrder(value["order"])) !== JSON.stringify(value["order"]);
|
|
8926
8948
|
}
|
|
8927
8949
|
return true;
|
|
8928
8950
|
}
|
|
@@ -8980,7 +9002,8 @@ async function saveStatuslineConfig(config) {
|
|
|
8980
9002
|
version: STATUSLINE_CONFIG_VERSION,
|
|
8981
9003
|
chips: normalizeChips(config.chips),
|
|
8982
9004
|
lines: normalizeLines(config.lines),
|
|
8983
|
-
densities: normalizeDensities(config.densities)
|
|
9005
|
+
densities: normalizeDensities(config.densities),
|
|
9006
|
+
order: normalizeOrder(config.order)
|
|
8984
9007
|
},
|
|
8985
9008
|
null,
|
|
8986
9009
|
2
|
|
@@ -9001,6 +9024,9 @@ async function loadStatuslineLines() {
|
|
|
9001
9024
|
async function loadStatuslineDensities() {
|
|
9002
9025
|
return (await loadStatuslineConfig()).densities;
|
|
9003
9026
|
}
|
|
9027
|
+
async function loadStatuslineOrder() {
|
|
9028
|
+
return (await loadStatuslineConfig()).order;
|
|
9029
|
+
}
|
|
9004
9030
|
var docMutationChain = Promise.resolve();
|
|
9005
9031
|
function queueDocMutation(mutate) {
|
|
9006
9032
|
const run = docMutationChain.then(mutate, mutate);
|
|
@@ -9016,7 +9042,8 @@ async function saveStatuslineLayout(layout) {
|
|
|
9016
9042
|
await saveStatuslineConfig({
|
|
9017
9043
|
...doc,
|
|
9018
9044
|
lines: normalizeLines(layout.lines ?? doc.lines),
|
|
9019
|
-
densities: normalizeDensities(layout.densities ?? doc.densities)
|
|
9045
|
+
densities: normalizeDensities(layout.densities ?? doc.densities),
|
|
9046
|
+
order: normalizeOrder(layout.order ?? doc.order)
|
|
9020
9047
|
});
|
|
9021
9048
|
});
|
|
9022
9049
|
}
|
|
@@ -28524,6 +28551,11 @@ var ALL_SETTINGS_KEYS = [
|
|
|
28524
28551
|
"context-strategy",
|
|
28525
28552
|
"context-auto-compact",
|
|
28526
28553
|
"token-saving",
|
|
28554
|
+
"nextsteps-tool",
|
|
28555
|
+
"autothin",
|
|
28556
|
+
"autothin-idle",
|
|
28557
|
+
"autothin-min",
|
|
28558
|
+
"autothin-boot",
|
|
28527
28559
|
"max-concurrent",
|
|
28528
28560
|
"title-animation",
|
|
28529
28561
|
"reasoning",
|
|
@@ -28547,6 +28579,10 @@ var ALL_SETTINGS_KEYS = [
|
|
|
28547
28579
|
"statusline",
|
|
28548
28580
|
"animation",
|
|
28549
28581
|
"read-symbols",
|
|
28582
|
+
"hq",
|
|
28583
|
+
"hq-url",
|
|
28584
|
+
"hq-token",
|
|
28585
|
+
"hq-raw",
|
|
28550
28586
|
"defaults",
|
|
28551
28587
|
"reset"
|
|
28552
28588
|
];
|
|
@@ -30122,7 +30158,7 @@ function buildStatuslineCommand(deps) {
|
|
|
30122
30158
|
}
|
|
30123
30159
|
if (item === "layout") {
|
|
30124
30160
|
if (action !== "reset") return { message: "Usage: /statusline layout reset" };
|
|
30125
|
-
await deps.setConfig({ ...cfg, lines: {}, densities: {} });
|
|
30161
|
+
await deps.setConfig({ ...cfg, lines: {}, densities: {}, order: [] });
|
|
30126
30162
|
return { message: "StatusBar layout reset: default lines and densities restored." };
|
|
30127
30163
|
}
|
|
30128
30164
|
if (item === "all") {
|
|
@@ -31330,7 +31366,7 @@ function buildTelegramSettingsCommand(opts) {
|
|
|
31330
31366
|
category: "Config",
|
|
31331
31367
|
aliases: ["tg-settings"],
|
|
31332
31368
|
description: "Toggle which agent events are reported to Telegram.",
|
|
31333
|
-
argsHint: "[session-end|delegate|long-tool|poll|chat <value
|
|
31369
|
+
argsHint: "[session-end|delegate|long-tool|poll|chat <value>|all]",
|
|
31334
31370
|
help: HELP2,
|
|
31335
31371
|
async run(args) {
|
|
31336
31372
|
const { cmd: sub, rest } = parseSubcommand(args);
|
|
@@ -31614,7 +31650,7 @@ function buildTodosCommand(opts) {
|
|
|
31614
31650
|
return {
|
|
31615
31651
|
message: unknownSubcommand(
|
|
31616
31652
|
cmd,
|
|
31617
|
-
["show", "clear", "add", "done", "done-all", "remove"],
|
|
31653
|
+
["show", "clear", "add", "done", "done-all", "remove", "rm"],
|
|
31618
31654
|
"todos"
|
|
31619
31655
|
) + "\n\nRelated: /plan (session-persistent roadmap) | /tasks (structured tasks with priorities)"
|
|
31620
31656
|
};
|
|
@@ -33949,6 +33985,15 @@ async function setupCommandHostState(input) {
|
|
|
33949
33985
|
currentDensities = { ...next };
|
|
33950
33986
|
await saveStatuslineLayout({ densities: next });
|
|
33951
33987
|
};
|
|
33988
|
+
const statuslineOrder = await loadStatuslineOrder();
|
|
33989
|
+
let currentOrder = [...statuslineOrder];
|
|
33990
|
+
const setStatuslineOrder = (next) => {
|
|
33991
|
+
currentOrder = [...next];
|
|
33992
|
+
};
|
|
33993
|
+
const saveStatuslineOrder = async (next) => {
|
|
33994
|
+
currentOrder = [...next];
|
|
33995
|
+
await saveStatuslineLayout({ order: next });
|
|
33996
|
+
};
|
|
33952
33997
|
const agentsMonitorController = createAgentsMonitorController();
|
|
33953
33998
|
const onPanelOpen = { current: null };
|
|
33954
33999
|
const goalHost = createGoalHost({
|
|
@@ -34026,6 +34071,10 @@ async function setupCommandHostState(input) {
|
|
|
34026
34071
|
getCurrentStatuslineDensities: () => currentDensities,
|
|
34027
34072
|
setStatuslineDensities,
|
|
34028
34073
|
saveStatuslineDensities,
|
|
34074
|
+
statuslineOrder: [...statuslineOrder],
|
|
34075
|
+
getCurrentStatuslineOrder: () => currentOrder,
|
|
34076
|
+
setStatuslineOrder,
|
|
34077
|
+
saveStatuslineOrder,
|
|
34029
34078
|
agentsMonitorController,
|
|
34030
34079
|
onPanelOpen,
|
|
34031
34080
|
goalHost,
|
|
@@ -38761,6 +38810,9 @@ async function runInteractive(cliCtx) {
|
|
|
38761
38810
|
statuslineDensities,
|
|
38762
38811
|
setStatuslineDensities,
|
|
38763
38812
|
saveStatuslineDensities,
|
|
38813
|
+
statuslineOrder,
|
|
38814
|
+
setStatuslineOrder,
|
|
38815
|
+
saveStatuslineOrder,
|
|
38764
38816
|
agentsMonitorController,
|
|
38765
38817
|
onPanelOpen,
|
|
38766
38818
|
goalHost,
|
|
@@ -39014,6 +39066,9 @@ async function runInteractive(cliCtx) {
|
|
|
39014
39066
|
statuslineDensities,
|
|
39015
39067
|
setStatuslineDensities,
|
|
39016
39068
|
saveStatuslineDensities,
|
|
39069
|
+
statuslineOrder,
|
|
39070
|
+
setStatuslineOrder,
|
|
39071
|
+
saveStatuslineOrder,
|
|
39017
39072
|
setYoloMode,
|
|
39018
39073
|
autonomyMode,
|
|
39019
39074
|
setAutonomyMode: (mode) => {
|
|
@@ -39055,4 +39110,4 @@ export {
|
|
|
39055
39110
|
CLI_VERSION,
|
|
39056
39111
|
runInteractive
|
|
39057
39112
|
};
|
|
39058
|
-
//# sourceMappingURL=cli-main-
|
|
39113
|
+
//# sourceMappingURL=cli-main-42SM33EG.js.map
|
package/dist/execute-deps.d.ts
CHANGED
|
@@ -14,7 +14,7 @@ import type { BrainAutoRisk } from '@wrongstack/core/execution';
|
|
|
14
14
|
import type { JournalEntry } from '@wrongstack/core/goal';
|
|
15
15
|
import type { EventBus } from '@wrongstack/core/kernel';
|
|
16
16
|
import type { SlashCommandRegistry } from '@wrongstack/core/registry';
|
|
17
|
-
import type { StatuslineDensities, StatuslineLines } from '@wrongstack/core/statusline';
|
|
17
|
+
import type { StatuslineDensities, StatuslineLines, StatuslineOrder } from '@wrongstack/core/statusline';
|
|
18
18
|
import type { QueueStore } from '@wrongstack/core/storage';
|
|
19
19
|
import type { AttachmentStore, AutonomyStage, Config, ConfigStore, MemoryPort, Message, ModelsRegistry, ModeStore, PromptLoader, ProviderConfig, ResolvedProvider, SessionEvent, SessionStore, SessionWriter, SkillLoader, TokenCounter } from '@wrongstack/core/types';
|
|
20
20
|
import type { WstackPaths } from '@wrongstack/core/utils';
|
|
@@ -277,6 +277,10 @@ export interface ControllerDeps {
|
|
|
277
277
|
statuslineDensities?: StatuslineDensities | undefined;
|
|
278
278
|
setStatuslineDensities?: ((densities: StatuslineDensities) => void) | undefined;
|
|
279
279
|
saveStatuslineDensities?: ((densities: StatuslineDensities) => Promise<void>) | undefined;
|
|
280
|
+
/** Custom left-to-right statusline order (schema v4). */
|
|
281
|
+
statuslineOrder?: StatuslineOrder | undefined;
|
|
282
|
+
setStatuslineOrder?: ((order: StatuslineOrder) => void) | undefined;
|
|
283
|
+
saveStatuslineOrder?: ((order: StatuslineOrder) => Promise<void>) | undefined;
|
|
280
284
|
getYolo?: (() => boolean) | undefined;
|
|
281
285
|
onYolo?: ((setTo?: boolean) => boolean) | undefined;
|
|
282
286
|
getAutonomy?: (() => AutonomyMode) | undefined;
|
|
@@ -6310,6 +6310,9 @@ async function execute(deps) {
|
|
|
6310
6310
|
statuslineDensities,
|
|
6311
6311
|
setStatuslineDensities,
|
|
6312
6312
|
saveStatuslineDensities,
|
|
6313
|
+
statuslineOrder,
|
|
6314
|
+
setStatuslineOrder,
|
|
6315
|
+
saveStatuslineOrder,
|
|
6313
6316
|
getYolo,
|
|
6314
6317
|
onYolo,
|
|
6315
6318
|
getAutonomy,
|
|
@@ -6637,6 +6640,9 @@ async function execute(deps) {
|
|
|
6637
6640
|
statuslineDensities,
|
|
6638
6641
|
setStatuslineDensities,
|
|
6639
6642
|
saveStatuslineDensities,
|
|
6643
|
+
statuslineOrder,
|
|
6644
|
+
setStatuslineOrder,
|
|
6645
|
+
saveStatuslineOrder,
|
|
6640
6646
|
getPluginItems,
|
|
6641
6647
|
onPluginToggle,
|
|
6642
6648
|
getMcpServers,
|
|
@@ -6953,4 +6959,4 @@ export {
|
|
|
6953
6959
|
execute,
|
|
6954
6960
|
resolveReviewerFallbackModels
|
|
6955
6961
|
};
|
|
6956
|
-
//# sourceMappingURL=execution-
|
|
6962
|
+
//# sourceMappingURL=execution-6KIOQUAG.js.map
|
|
@@ -68,7 +68,7 @@ var hqCmd = async (args, deps) => {
|
|
|
68
68
|
return 1;
|
|
69
69
|
};
|
|
70
70
|
async function startServer(deps) {
|
|
71
|
-
const { startHqServer } = await import("./hq-server-
|
|
71
|
+
const { startHqServer } = await import("./hq-server-YW4MJCKH.js");
|
|
72
72
|
const dataDir = resolveDataDir(deps);
|
|
73
73
|
const flags = deps.flags ?? {};
|
|
74
74
|
const rawPublicUrl = typeof flags["hq-public-url"] === "string" ? flags["hq-public-url"] : process.env.WRONGSTACK_HQ_PUBLIC_URL;
|
|
@@ -538,6 +538,16 @@ async function tokenList(args, deps) {
|
|
|
538
538
|
});
|
|
539
539
|
const tokens = authFile[tokenField] ?? [];
|
|
540
540
|
if (tokens.length === 0) {
|
|
541
|
+
const browserCredential = authFile.passwordHash !== void 0 || (authFile.browserTokens ?? []).length > 0;
|
|
542
|
+
if (scope === "client" && browserCredential) {
|
|
543
|
+
deps.renderer.write(
|
|
544
|
+
"No client tokens issued. HQ has a browser credential, so /ws/client REJECTS every publisher.\n"
|
|
545
|
+
);
|
|
546
|
+
deps.renderer.write(
|
|
547
|
+
"Run `wstack hq token create --client [label]` to let publishers connect.\n"
|
|
548
|
+
);
|
|
549
|
+
return 0;
|
|
550
|
+
}
|
|
541
551
|
deps.renderer.write(
|
|
542
552
|
`No ${scope} tokens issued. ${scope === "browser" ? "Browsers" : "Clients"} are in OPEN MODE.
|
|
543
553
|
`
|
|
@@ -977,4 +987,4 @@ export {
|
|
|
977
987
|
hqCmd,
|
|
978
988
|
resolveAuditActor
|
|
979
989
|
};
|
|
980
|
-
//# sourceMappingURL=hq-
|
|
990
|
+
//# sourceMappingURL=hq-O5BOP6UY.js.map
|
package/dist/hq-server/auth.d.ts
CHANGED
|
@@ -91,6 +91,16 @@ export declare function hqAuthRequired(mutableAuth: HqRouterMutableAuth, require
|
|
|
91
91
|
* which are a separate set from the browser tokens, but the same fail-closed
|
|
92
92
|
* floor applies: an all-expired client-token file must not mean "no auth
|
|
93
93
|
* configured, let anyone register as a session".
|
|
94
|
+
*
|
|
95
|
+
* WS-2026-09-15-01: this used to be `requireAuthFloor || clientTokens.size > 0`.
|
|
96
|
+
* The floor only latches in true open mode (no password, no browser token), so
|
|
97
|
+
* a password-protected HQ on a network bind whose client tokens had all expired
|
|
98
|
+
* or been revoked accepted a tokenless `/ws/client` — and `client.hello` then
|
|
99
|
+
* granted every capability the socket declared, `control.approve` included.
|
|
100
|
+
* OPEN MODE is "no credential of any kind" (SECURITY.md); once HQ holds ANY
|
|
101
|
+
* browser credential, the publisher channel must present a client token too.
|
|
102
|
+
* A loopback exemption is deliberately absent: `--tunnel` and reverse proxies
|
|
103
|
+
* deliver remote traffic from 127.0.0.1.
|
|
94
104
|
*/
|
|
95
105
|
export declare function hqClientAuthRequired(mutableAuth: HqRouterMutableAuth): boolean;
|
|
96
106
|
/**
|
|
@@ -10,7 +10,7 @@ import {
|
|
|
10
10
|
readLocalSubagentTranscript,
|
|
11
11
|
sanitizeApiError,
|
|
12
12
|
startHqServer
|
|
13
|
-
} from "./chunk-
|
|
13
|
+
} from "./chunk-MZY6UDWC.js";
|
|
14
14
|
import "./chunk-HXJYHAR4.js";
|
|
15
15
|
import "./chunk-5EA6OTLJ.js";
|
|
16
16
|
import "./chunk-Q7E3BPDU.js";
|
|
@@ -27,4 +27,4 @@ export {
|
|
|
27
27
|
sanitizeApiError,
|
|
28
28
|
startHqServer
|
|
29
29
|
};
|
|
30
|
-
//# sourceMappingURL=hq-server-
|
|
30
|
+
//# sourceMappingURL=hq-server-YW4MJCKH.js.map
|
package/dist/index.js
CHANGED
|
@@ -16,14 +16,14 @@ async function main(argv) {
|
|
|
16
16
|
applySessionShellDefault();
|
|
17
17
|
const earlyFlags = parseArgs(argv).flags;
|
|
18
18
|
if (earlyFlags["help"] === true || earlyFlags["version"] === true) {
|
|
19
|
-
const { handleHelpVersionShortCircuit } = await import("./short-circuit-flags-
|
|
19
|
+
const { handleHelpVersionShortCircuit } = await import("./short-circuit-flags-T6EFG3W6.js");
|
|
20
20
|
const earlyExit = await handleHelpVersionShortCircuit(argv);
|
|
21
21
|
if (earlyExit !== null) return earlyExit;
|
|
22
22
|
}
|
|
23
|
-
const { initializeCli } = await import("./cli-context-
|
|
23
|
+
const { initializeCli } = await import("./cli-context-6MTVFJPO.js");
|
|
24
24
|
const cliCtx = await initializeCli(argv);
|
|
25
25
|
if (typeof cliCtx === "number") return cliCtx;
|
|
26
|
-
const { runInteractive } = await import("./cli-main-
|
|
26
|
+
const { runInteractive } = await import("./cli-main-42SM33EG.js");
|
|
27
27
|
return runInteractive(cliCtx);
|
|
28
28
|
}
|
|
29
29
|
|
|
@@ -31,7 +31,12 @@ async function main(argv) {
|
|
|
31
31
|
import { resolve } from "node:path";
|
|
32
32
|
import { pathToFileURL } from "node:url";
|
|
33
33
|
import { scrubErrorText } from "@wrongstack/core/security";
|
|
34
|
-
import {
|
|
34
|
+
import {
|
|
35
|
+
hardenWin32ExecutableSearch,
|
|
36
|
+
installCrashShield,
|
|
37
|
+
runFatalSalvageSync,
|
|
38
|
+
writeErr
|
|
39
|
+
} from "@wrongstack/core/utils";
|
|
35
40
|
var SQLITE_WARNING_RE = /sqlite is an experimental feature/i;
|
|
36
41
|
function installSqliteWarningFilter() {
|
|
37
42
|
const originalEmit = process.emitWarning.bind(process);
|
|
@@ -119,6 +124,7 @@ function runAsMain(mainFn) {
|
|
|
119
124
|
if (!isMain) return;
|
|
120
125
|
installBrokenPipeHandlers();
|
|
121
126
|
installCrashShield();
|
|
127
|
+
hardenWin32ExecutableSearch();
|
|
122
128
|
process.on("exit", () => {
|
|
123
129
|
runFatalSalvageSync();
|
|
124
130
|
});
|
|
@@ -1,11 +1,12 @@
|
|
|
1
|
-
import { type StatuslineDensities, type StatuslineItem, type StatuslineLines } from '@wrongstack/core/statusline';
|
|
1
|
+
import { type StatuslineDensities, type StatuslineItem, type StatuslineLines, type StatuslineOrder } from '@wrongstack/core/statusline';
|
|
2
2
|
/**
|
|
3
3
|
* On-disk schema version.
|
|
4
4
|
* v1 — flat boolean map.
|
|
5
5
|
* v2 — `{chips, lines}`.
|
|
6
6
|
* v3 — adds `densities` (per-chip full/short/micro pin).
|
|
7
|
+
* v4 — adds `order` (custom left-to-right chip order).
|
|
7
8
|
*/
|
|
8
|
-
export declare const STATUSLINE_CONFIG_VERSION =
|
|
9
|
+
export declare const STATUSLINE_CONFIG_VERSION = 4;
|
|
9
10
|
/**
|
|
10
11
|
* The persistence vocabulary IS the core contract — one list, so a new chip
|
|
11
12
|
* cannot gain a default line without gaining a toggle (or vice versa). The
|
|
@@ -17,8 +18,8 @@ export type StatuslineConfig = {
|
|
|
17
18
|
[K in StatuslineConfigKey]?: boolean | undefined;
|
|
18
19
|
};
|
|
19
20
|
/**
|
|
20
|
-
*
|
|
21
|
-
*
|
|
21
|
+
* v4 statusline.json document: on/off map, sparse per-chip line assignment,
|
|
22
|
+
* sparse density pins, and optional custom left-to-right order. Absent `lines` keys mean
|
|
22
23
|
* "render on the contract's default line" (`DEFAULT_LINES`); absent
|
|
23
24
|
* `densities` keys mean "let the rail fitter choose".
|
|
24
25
|
*/
|
|
@@ -27,6 +28,7 @@ export interface StatuslineDocument {
|
|
|
27
28
|
chips: StatuslineConfig;
|
|
28
29
|
lines: StatuslineLines;
|
|
29
30
|
densities: StatuslineDensities;
|
|
31
|
+
order: StatuslineOrder;
|
|
30
32
|
}
|
|
31
33
|
/**
|
|
32
34
|
* Chip toggles for a brand-new config. Not every chip is on: the static
|
|
@@ -42,14 +44,17 @@ export declare function saveStatuslineConfig(config: StatuslineDocument): Promis
|
|
|
42
44
|
export declare function loadStatuslineLines(): Promise<StatuslineLines>;
|
|
43
45
|
/** Load just the per-chip density pins (defaults to {} when unpinned). */
|
|
44
46
|
export declare function loadStatuslineDensities(): Promise<StatuslineDensities>;
|
|
47
|
+
/** Load custom left-to-right chip order (empty means canonical order). */
|
|
48
|
+
export declare function loadStatuslineOrder(): Promise<StatuslineOrder>;
|
|
45
49
|
/**
|
|
46
|
-
* Persist a new layout (lines and/or
|
|
50
|
+
* Persist a new layout (lines, densities and/or order) while preserving the stored
|
|
47
51
|
* chip toggles. Values are re-normalized (unknown keys dropped, clamped) so a
|
|
48
52
|
* malformed caller cannot write garbage to disk.
|
|
49
53
|
*/
|
|
50
54
|
export declare function saveStatuslineLayout(layout: {
|
|
51
55
|
lines?: StatuslineLines | undefined;
|
|
52
56
|
densities?: StatuslineDensities | undefined;
|
|
57
|
+
order?: StatuslineOrder | undefined;
|
|
53
58
|
}): Promise<void>;
|
|
54
59
|
/**
|
|
55
60
|
* Persist the chip on/off map while preserving the stored layout. Same RMW
|
|
@@ -60,4 +65,6 @@ export declare function saveStatuslineLayout(layout: {
|
|
|
60
65
|
export declare function saveStatuslineChips(chips: StatuslineConfig): Promise<void>;
|
|
61
66
|
/** Back-compat alias: persist only the line assignment. */
|
|
62
67
|
export declare function saveStatuslineLines(lines: StatuslineLines): Promise<void>;
|
|
68
|
+
/** Back-compat-sized helper: persist only the custom chip order. */
|
|
69
|
+
export declare function saveStatuslineOrder(order: StatuslineOrder): Promise<void>;
|
|
63
70
|
//# sourceMappingURL=statusline-config.d.ts.map
|
|
@@ -1,10 +1,10 @@
|
|
|
1
1
|
import {
|
|
2
2
|
handleHelpVersionShortCircuit
|
|
3
|
-
} from "./chunk-
|
|
3
|
+
} from "./chunk-DUF5FEWD.js";
|
|
4
4
|
import "./chunk-6WRKAACA.js";
|
|
5
5
|
import "./chunk-XJXDOF63.js";
|
|
6
6
|
import "./chunk-C3Z4N6A6.js";
|
|
7
7
|
export {
|
|
8
8
|
handleHelpVersionShortCircuit
|
|
9
9
|
};
|
|
10
|
-
//# sourceMappingURL=short-circuit-flags-
|
|
10
|
+
//# sourceMappingURL=short-circuit-flags-T6EFG3W6.js.map
|
|
@@ -91,6 +91,9 @@ export declare function runCliExecution(params: {
|
|
|
91
91
|
statuslineDensities?: RC['statuslineDensities'];
|
|
92
92
|
setStatuslineDensities?: NonNullable<RC['setStatuslineDensities']>;
|
|
93
93
|
saveStatuslineDensities?: NonNullable<RC['saveStatuslineDensities']>;
|
|
94
|
+
statuslineOrder?: RC['statuslineOrder'];
|
|
95
|
+
setStatuslineOrder?: NonNullable<RC['setStatuslineOrder']>;
|
|
96
|
+
saveStatuslineOrder?: NonNullable<RC['saveStatuslineOrder']>;
|
|
94
97
|
setYoloMode: NonNullable<RC['getYolo']>;
|
|
95
98
|
autonomyMode: ReturnType<RC['getAutonomy']>;
|
|
96
99
|
setAutonomyMode: NonNullable<RC['setAutonomy']>;
|
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
import { type BrainArbiter, type Director } from '@wrongstack/core/coordination';
|
|
3
3
|
import type { EventBus } from '@wrongstack/core/kernel';
|
|
4
4
|
import { type DestructiveKind } from '@wrongstack/core/security';
|
|
5
|
-
import type { StatuslineDensities, StatuslineLines } from '@wrongstack/core/statusline';
|
|
5
|
+
import type { StatuslineDensities, StatuslineLines, StatuslineOrder } from '@wrongstack/core/statusline';
|
|
6
6
|
import { type Config, type SessionWriter } from '@wrongstack/core/types';
|
|
7
7
|
import type { WstackPaths } from '@wrongstack/core/utils';
|
|
8
8
|
import { SddRunRegistry } from '@wrongstack/sdd';
|
|
@@ -143,6 +143,10 @@ export declare function setupCommandHostState(input: CommandHostStateInput): Pro
|
|
|
143
143
|
getCurrentStatuslineDensities: () => Partial<Record<import("@wrongstack/core/statusline").StatuslineItem, import("@wrongstack/core/statusline").StatuslineDensity>>;
|
|
144
144
|
setStatuslineDensities: (next: StatuslineDensities) => void;
|
|
145
145
|
saveStatuslineDensities: (next: StatuslineDensities) => Promise<void>;
|
|
146
|
+
statuslineOrder: import("@wrongstack/core/statusline").StatuslineItem[];
|
|
147
|
+
getCurrentStatuslineOrder: () => StatuslineOrder;
|
|
148
|
+
setStatuslineOrder: (next: StatuslineOrder) => void;
|
|
149
|
+
saveStatuslineOrder: (next: StatuslineOrder) => Promise<void>;
|
|
146
150
|
agentsMonitorController: import("./controllers.js").AgentsMonitorController;
|
|
147
151
|
onPanelOpen: {
|
|
148
152
|
current: ((action: string) => boolean) | null;
|
|
@@ -25,6 +25,9 @@ interface RuntimeControllerDepsInput {
|
|
|
25
25
|
statuslineDensities?: ControllerDeps['statuslineDensities'];
|
|
26
26
|
setStatuslineDensities?: ControllerDeps['setStatuslineDensities'];
|
|
27
27
|
saveStatuslineDensities?: ControllerDeps['saveStatuslineDensities'];
|
|
28
|
+
statuslineOrder?: ControllerDeps['statuslineOrder'];
|
|
29
|
+
setStatuslineOrder?: ControllerDeps['setStatuslineOrder'];
|
|
30
|
+
saveStatuslineOrder?: ControllerDeps['saveStatuslineOrder'];
|
|
28
31
|
getYolo: NonNullable<ControllerDeps['getYolo']>;
|
|
29
32
|
onYolo: NonNullable<ControllerDeps['onYolo']>;
|
|
30
33
|
getAutonomy: () => AutonomyMode;
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@wrongstack/cli",
|
|
3
|
-
"version": "1.0.
|
|
3
|
+
"version": "1.0.15",
|
|
4
4
|
"license": "MIT",
|
|
5
5
|
"description": "WrongStack CLI — terminal AI coding agent with provider catalog from models.dev. Provides `wrongstack` and `wstack` binaries.",
|
|
6
6
|
"keywords": [
|
|
@@ -41,36 +41,36 @@
|
|
|
41
41
|
"data"
|
|
42
42
|
],
|
|
43
43
|
"dependencies": {
|
|
44
|
-
"@wrongstack/acp": "1.0.
|
|
45
|
-
"@wrongstack/bench": "1.0.
|
|
46
|
-
"@wrongstack/core": "1.0.
|
|
47
|
-
"@wrongstack/kanban": "1.0.
|
|
48
|
-
"@wrongstack/mcp": "1.0.
|
|
49
|
-
"@wrongstack/persistence": "1.0.
|
|
50
|
-
"@wrongstack/plug-lsp": "1.0.
|
|
51
|
-
"@wrongstack/plugins": "1.0.
|
|
52
|
-
"@wrongstack/primitives": "1.0.
|
|
53
|
-
"@wrongstack/providers": "1.0.
|
|
54
|
-
"@wrongstack/requirement-intake": "1.0.
|
|
55
|
-
"@wrongstack/runtime": "1.0.
|
|
56
|
-
"@wrongstack/sage": "1.0.
|
|
57
|
-
"@wrongstack/sdd": "1.0.
|
|
58
|
-
"@wrongstack/security-scanner": "1.0.
|
|
59
|
-
"@wrongstack/simpleui": "1.0.
|
|
60
|
-
"@wrongstack/techstack": "1.0.
|
|
61
|
-
"@wrongstack/telegram": "1.0.
|
|
62
|
-
"@wrongstack/tools": "1.0.
|
|
63
|
-
"@wrongstack/tui": "1.0.
|
|
64
|
-
"@wrongstack/vector-memory": "1.0.
|
|
65
|
-
"@wrongstack/webui": "1.0.
|
|
66
|
-
"@wrongstack/webui-hq": "1.0.
|
|
67
|
-
"@wrongstack/webui-protocol": "1.0.
|
|
68
|
-
"@wrongstack/webui-server": "1.0.
|
|
69
|
-
"@wrongstack/wrongtrace": "1.0.
|
|
44
|
+
"@wrongstack/acp": "1.0.15",
|
|
45
|
+
"@wrongstack/bench": "1.0.15",
|
|
46
|
+
"@wrongstack/core": "1.0.15",
|
|
47
|
+
"@wrongstack/kanban": "1.0.15",
|
|
48
|
+
"@wrongstack/mcp": "1.0.15",
|
|
49
|
+
"@wrongstack/persistence": "1.0.15",
|
|
50
|
+
"@wrongstack/plug-lsp": "1.0.15",
|
|
51
|
+
"@wrongstack/plugins": "1.0.15",
|
|
52
|
+
"@wrongstack/primitives": "1.0.15",
|
|
53
|
+
"@wrongstack/providers": "1.0.15",
|
|
54
|
+
"@wrongstack/requirement-intake": "1.0.15",
|
|
55
|
+
"@wrongstack/runtime": "1.0.15",
|
|
56
|
+
"@wrongstack/sage": "1.0.15",
|
|
57
|
+
"@wrongstack/sdd": "1.0.15",
|
|
58
|
+
"@wrongstack/security-scanner": "1.0.15",
|
|
59
|
+
"@wrongstack/simpleui": "1.0.15",
|
|
60
|
+
"@wrongstack/techstack": "1.0.15",
|
|
61
|
+
"@wrongstack/telegram": "1.0.15",
|
|
62
|
+
"@wrongstack/tools": "1.0.15",
|
|
63
|
+
"@wrongstack/tui": "1.0.15",
|
|
64
|
+
"@wrongstack/vector-memory": "1.0.15",
|
|
65
|
+
"@wrongstack/webui": "1.0.15",
|
|
66
|
+
"@wrongstack/webui-hq": "1.0.15",
|
|
67
|
+
"@wrongstack/webui-protocol": "1.0.15",
|
|
68
|
+
"@wrongstack/webui-server": "1.0.15",
|
|
69
|
+
"@wrongstack/wrongtrace": "1.0.15",
|
|
70
70
|
"ws": "^8.21.3"
|
|
71
71
|
},
|
|
72
72
|
"optionalDependencies": {
|
|
73
|
-
"@wrongstack/desktop": "1.0.
|
|
73
|
+
"@wrongstack/desktop": "1.0.15"
|
|
74
74
|
},
|
|
75
75
|
"devDependencies": {
|
|
76
76
|
"@types/node": "^26.5.1",
|