@wrongstack/cli 0.296.3 → 0.297.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/boot/dispatch-webui.d.ts +7 -0
- package/dist/boot/dispatch-webui.d.ts.map +1 -1
- package/dist/boot/launch-banner.d.ts +22 -0
- package/dist/boot/launch-banner.d.ts.map +1 -0
- package/dist/boot/launch-menu.d.ts.map +1 -1
- package/dist/boot/tui-settings-adapter.d.ts.map +1 -1
- package/dist/{chunk-OI7GWJDS.js → chunk-7JABKXET.js} +372 -10
- package/dist/chunk-7JABKXET.js.map +7 -0
- package/dist/{chunk-WY7KKOUK.js → chunk-JW75HY4F.js} +31 -10
- package/dist/chunk-JW75HY4F.js.map +7 -0
- package/dist/{chunk-Z7YGASQP.js → chunk-QZKWRNIP.js} +19 -18
- package/dist/chunk-QZKWRNIP.js.map +7 -0
- package/dist/{chunk-BQCAJ7FI.js → chunk-XTIXVJXP.js} +16 -3
- package/dist/chunk-XTIXVJXP.js.map +7 -0
- package/dist/{cli-main-RTY35OPD.js → cli-main-GOY5YGVL.js} +25199 -25112
- package/dist/cli-main-GOY5YGVL.js.map +7 -0
- package/dist/cli-main-helpers.d.ts +1 -1
- package/dist/cli-main-helpers.d.ts.map +1 -1
- package/dist/cli-main.d.ts.map +1 -1
- package/dist/{execution-O7I5DYE6.js → execution-A4PGK4XV.js} +39 -9
- package/dist/execution-A4PGK4XV.js.map +7 -0
- package/dist/execution.d.ts.map +1 -1
- package/dist/fleet-statusline.d.ts.map +1 -1
- package/dist/goal-host.d.ts +1 -1
- package/dist/goal-host.d.ts.map +1 -1
- package/dist/{hq-JUYKUNJX.js → hq-GBPGXIR5.js} +2 -2
- package/dist/hq-publisher.d.ts +3 -2
- package/dist/hq-publisher.d.ts.map +1 -1
- package/dist/hq-server/types.d.ts +8 -0
- package/dist/hq-server/types.d.ts.map +1 -1
- package/dist/hq-server/ws.d.ts +61 -2
- package/dist/hq-server/ws.d.ts.map +1 -1
- package/dist/{hq-server-6AQ3BXZA.js → hq-server-YQUUMTPU.js} +2 -2
- package/dist/index.js +293 -26
- package/dist/index.js.map +4 -4
- package/dist/kanban-hq-sync.d.ts +13 -1
- package/dist/kanban-hq-sync.d.ts.map +1 -1
- package/dist/live-settings-input.d.ts +9 -0
- package/dist/live-settings-input.d.ts.map +1 -1
- package/dist/{mailbox-serve-2UWHEN3M.js → mailbox-serve-DBOOOOWZ.js} +50 -8
- package/dist/mailbox-serve-DBOOOOWZ.js.map +7 -0
- package/dist/{sdd-runtime-JG4EEKL6.js → sdd-runtime-AIJCJGWC.js} +2 -2
- package/dist/services/sdd/state.d.ts +3 -3
- package/dist/services/sdd/state.d.ts.map +1 -1
- package/dist/services/sdd/task-manager.d.ts.map +1 -1
- package/dist/session-stats.d.ts.map +1 -1
- package/dist/settings-menu.d.ts.map +1 -1
- package/dist/slash-commands/command-context.d.ts +2 -0
- package/dist/slash-commands/command-context.d.ts.map +1 -1
- package/dist/slash-commands/goal.d.ts +1 -1
- package/dist/slash-commands/goal.d.ts.map +1 -1
- package/dist/slash-commands/sdd.d.ts.map +1 -1
- package/dist/webui-server/kanban-host-adapter.d.ts +1 -1
- package/dist/webui-server/kanban-host-adapter.d.ts.map +1 -1
- package/dist/webui-server/session-start-payload.d.ts +4 -0
- package/dist/webui-server/session-start-payload.d.ts.map +1 -1
- package/dist/{webui-server-ZF5KVGC5.js → webui-server-XKFUOKMJ.js} +155 -132
- package/dist/webui-server-XKFUOKMJ.js.map +7 -0
- package/dist/webui-server-options.d.ts +7 -0
- package/dist/webui-server-options.d.ts.map +1 -1
- package/dist/webui-server.d.ts.map +1 -1
- package/dist/wiring/command-host-state.d.ts.map +1 -1
- package/dist/wiring/hq-telemetry.d.ts +4 -3
- package/dist/wiring/hq-telemetry.d.ts.map +1 -1
- package/dist/wiring/lifecycle-plugins.d.ts +5 -8
- package/dist/wiring/lifecycle-plugins.d.ts.map +1 -1
- package/dist/wiring/metrics.d.ts +1 -1
- package/dist/wiring/metrics.d.ts.map +1 -1
- package/dist/wiring/runtime-lifecycle-deps.d.ts.map +1 -1
- package/dist/wiring/sage.d.ts.map +1 -1
- package/dist/wiring/sdd-handlers.d.ts.map +1 -1
- package/package.json +22 -22
- package/dist/chunk-BQCAJ7FI.js.map +0 -7
- package/dist/chunk-OI7GWJDS.js.map +0 -7
- package/dist/chunk-WY7KKOUK.js.map +0 -7
- package/dist/chunk-Z7YGASQP.js.map +0 -7
- package/dist/cli-main-RTY35OPD.js.map +0 -7
- package/dist/execution-O7I5DYE6.js.map +0 -7
- package/dist/mailbox-serve-2UWHEN3M.js.map +0 -7
- package/dist/webui-server-ZF5KVGC5.js.map +0 -7
- /package/dist/{hq-JUYKUNJX.js.map → hq-GBPGXIR5.js.map} +0 -0
- /package/dist/{hq-server-6AQ3BXZA.js.map → hq-server-YQUUMTPU.js.map} +0 -0
- /package/dist/{sdd-runtime-JG4EEKL6.js.map → sdd-runtime-AIJCJGWC.js.map} +0 -0
package/dist/execution.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"execution.d.ts","sourceRoot":"","sources":["../src/execution.ts"],"names":[],"mappings":"AA0DA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAC;AAMrD,YAAY,EAAE,iBAAiB,EAAE,MAAM,0BAA0B,CAAC;AAWlE,OAAO,EACL,+BAA+B,EAC/B,kCAAkC,EAClC,8BAA8B,EAC9B,8BAA8B,EAC9B,6BAA6B,GAC9B,MAAM,8BAA8B,CAAC;AAEtC,YAAY,EACV,SAAS,EACT,aAAa,EACb,WAAW,EACX,aAAa,EACb,gBAAgB,EAChB,gBAAgB,EAChB,cAAc,GACf,MAAM,mBAAmB,CAAC;AAE3B,wBAAsB,OAAO,CAAC,IAAI,EAAE,WAAW,GAAG,OAAO,CAAC,MAAM,CAAC,
|
|
1
|
+
{"version":3,"file":"execution.d.ts","sourceRoot":"","sources":["../src/execution.ts"],"names":[],"mappings":"AA0DA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAC;AAMrD,YAAY,EAAE,iBAAiB,EAAE,MAAM,0BAA0B,CAAC;AAWlE,OAAO,EACL,+BAA+B,EAC/B,kCAAkC,EAClC,8BAA8B,EAC9B,8BAA8B,EAC9B,6BAA6B,GAC9B,MAAM,8BAA8B,CAAC;AAEtC,YAAY,EACV,SAAS,EACT,aAAa,EACb,WAAW,EACX,aAAa,EACb,gBAAgB,EAChB,gBAAgB,EAChB,cAAc,GACf,MAAM,mBAAmB,CAAC;AAE3B,wBAAsB,OAAO,CAAC,IAAI,EAAE,WAAW,GAAG,OAAO,CAAC,MAAM,CAAC,CA26BhE"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"fleet-statusline.d.ts","sourceRoot":"","sources":["../src/fleet-statusline.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;GAcG;AAEH,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,yBAAyB,CAAC;AAIxD,MAAM,WAAW,eAAe;IAC9B,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,EAAE,MAAM,CAAC;IACb,MAAM,EAAE,SAAS,GAAG,MAAM,GAAG,QAAQ,CAAC;IACtC,UAAU,EAAE,MAAM,CAAC;IACnB,SAAS,EAAE,MAAM,CAAC;IAClB,QAAQ,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IAC9B,SAAS,EAAE,MAAM,CAAC;IAClB,OAAO,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IAC7B,qEAAqE;IACrE,UAAU,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;CACjC;AAED,MAAM,WAAW,sBAAsB;IACrC,MAAM,EAAE,QAAQ,CAAC;IACjB,GAAG,CAAC,EAAE,MAAM,CAAC,WAAW,GAAG,SAAS,CAAC;IACrC,gDAAgD;IAChD,UAAU,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IAChC,gCAAgC;IAChC,GAAG,CAAC,EAAE,CAAC,MAAM,MAAM,CAAC,GAAG,SAAS,CAAC;IACjC,gFAAgF;IAChF,OAAO,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;CAC9B;AAYD;;;;GAIG;AACH,wBAAgB,eAAe,CAC7B,MAAM,EAAE,GAAG,CAAC,MAAM,EAAE,eAAe,CAAC,EACpC,GAAG,EAAE,MAAM,EACX,OAAO,EAAE,MAAM,EACf,OAAO,CAAC,EAAE,MAAM,GAAG,SAAS,GAC3B,MAAM,CA+DR;AAED,qBAAa,eAAe;IAC1B,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAW;IAClC,OAAO,CAAC,QAAQ,CAAC,GAAG,CAAqB;IACzC,OAAO,CAAC,QAAQ,CAAC,UAAU,CAAS;IACpC,OAAO,CAAC,QAAQ,CAAC,GAAG,CAAe;IACnC,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAqB;IAC9C,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAsC;IAC7D,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAyB;IAChD,OAAO,CAAC,MAAM,CAAS;IACvB,OAAO,CAAC,IAAI,CAAK;IACjB,OAAO,CAAC,YAAY,CAA8C;IAClE,OAAO,CAAC,SAAS,CAA+C;IAChE,OAAO,CAAC,aAAa,CAA6B;IAClD,OAAO,CAAC,SAAS,CAAK;IACtB,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAMvB;IAEF,YAAY,IAAI,EAAE,sBAAsB,EAMvC;IAED,kFAAkF;IAClF,KAAK,IAAI,IAAI,
|
|
1
|
+
{"version":3,"file":"fleet-statusline.d.ts","sourceRoot":"","sources":["../src/fleet-statusline.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;GAcG;AAEH,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,yBAAyB,CAAC;AAIxD,MAAM,WAAW,eAAe;IAC9B,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,EAAE,MAAM,CAAC;IACb,MAAM,EAAE,SAAS,GAAG,MAAM,GAAG,QAAQ,CAAC;IACtC,UAAU,EAAE,MAAM,CAAC;IACnB,SAAS,EAAE,MAAM,CAAC;IAClB,QAAQ,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IAC9B,SAAS,EAAE,MAAM,CAAC;IAClB,OAAO,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IAC7B,qEAAqE;IACrE,UAAU,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;CACjC;AAED,MAAM,WAAW,sBAAsB;IACrC,MAAM,EAAE,QAAQ,CAAC;IACjB,GAAG,CAAC,EAAE,MAAM,CAAC,WAAW,GAAG,SAAS,CAAC;IACrC,gDAAgD;IAChD,UAAU,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IAChC,gCAAgC;IAChC,GAAG,CAAC,EAAE,CAAC,MAAM,MAAM,CAAC,GAAG,SAAS,CAAC;IACjC,gFAAgF;IAChF,OAAO,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;CAC9B;AAYD;;;;GAIG;AACH,wBAAgB,eAAe,CAC7B,MAAM,EAAE,GAAG,CAAC,MAAM,EAAE,eAAe,CAAC,EACpC,GAAG,EAAE,MAAM,EACX,OAAO,EAAE,MAAM,EACf,OAAO,CAAC,EAAE,MAAM,GAAG,SAAS,GAC3B,MAAM,CA+DR;AAED,qBAAa,eAAe;IAC1B,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAW;IAClC,OAAO,CAAC,QAAQ,CAAC,GAAG,CAAqB;IACzC,OAAO,CAAC,QAAQ,CAAC,UAAU,CAAS;IACpC,OAAO,CAAC,QAAQ,CAAC,GAAG,CAAe;IACnC,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAqB;IAC9C,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAsC;IAC7D,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAyB;IAChD,OAAO,CAAC,MAAM,CAAS;IACvB,OAAO,CAAC,IAAI,CAAK;IACjB,OAAO,CAAC,YAAY,CAA8C;IAClE,OAAO,CAAC,SAAS,CAA+C;IAChE,OAAO,CAAC,aAAa,CAA6B;IAClD,OAAO,CAAC,SAAS,CAAK;IACtB,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAMvB;IAEF,YAAY,IAAI,EAAE,sBAAsB,EAMvC;IAED,kFAAkF;IAClF,KAAK,IAAI,IAAI,CA4EZ;IAED,wDAAwD;IACxD,IAAI,IAAI,IAAI,CAGX;IAED,OAAO,CAAC,KAAK;IAIb,OAAO,CAAC,QAAQ;IAchB,OAAO,CAAC,UAAU;IAuBlB,OAAO,CAAC,aAAa;IAerB,OAAO,CAAC,KAAK;CAWd"}
|
package/dist/goal-host.d.ts
CHANGED
|
@@ -41,7 +41,7 @@ export interface GoalHostDeps {
|
|
|
41
41
|
events: EventBus;
|
|
42
42
|
/** Current parent session id for worktree lifecycle events. */
|
|
43
43
|
getSessionId?: (() => string | undefined) | undefined;
|
|
44
|
-
/** Directory for per-project phase-graph
|
|
44
|
+
/** Directory for per-project phase-graph engine checkpoints. */
|
|
45
45
|
storeDir: string;
|
|
46
46
|
/** Project root — base for git-worktree isolation. */
|
|
47
47
|
projectRoot: string;
|
package/dist/goal-host.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"goal-host.d.ts","sourceRoot":"","sources":["../src/goal-host.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;GAgBG;AAgBH,OAAO,EAAe,KAAK,UAAU,EAAwC,KAAK,aAAa,EAAc,MAAM,uBAAuB,CAAC;AAC3I,OAAO,EAAkB,KAAK,YAAY,EAAE,MAAM,+BAA+B,CAAC;AAElF,OAAO,KAAK,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,wBAAwB,CAAC;AAC/D,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,yBAAyB,CAAC;AAaxD,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,kBAAkB,CAAC;AAmEvD;;;;GAIG;AACH,wBAAgB,mBAAmB,CACjC,IAAI,GAAE;IAAE,KAAK,CAAC,EAAE,SAAS,MAAM,EAAE,GAAG,SAAS,CAAC;IAAC,IAAI,CAAC,EAAE,SAAS,MAAM,EAAE,GAAG,SAAS,CAAA;CAAO,GACzF,IAAI,CAQN;AAED,uEAAuE;AACvE,wBAAgB,eAAe,IAAI,IAAI,CAEtC;AAED,6DAA6D;AAC7D,wBAAgB,oBAAoB,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAEzD;AA+GD,MAAM,WAAW,YAAY;IAC3B,cAAc,EAAE,cAAc,CAAC;IAC/B,+EAA+E;IAC/E,SAAS,EAAE,MAAM,MAAM,CAAC;IACxB,2EAA2E;IAC3E,MAAM,EAAE,QAAQ,CAAC;IACjB,+DAA+D;IAC/D,YAAY,CAAC,EAAE,CAAC,MAAM,MAAM,GAAG,SAAS,CAAC,GAAG,SAAS,CAAC;IACtD,
|
|
1
|
+
{"version":3,"file":"goal-host.d.ts","sourceRoot":"","sources":["../src/goal-host.ts"],"names":[],"mappings":"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"}
|
|
@@ -36,7 +36,7 @@ var hqCmd = async (args, deps) => {
|
|
|
36
36
|
return 1;
|
|
37
37
|
};
|
|
38
38
|
async function startServer(deps) {
|
|
39
|
-
const { startHqServer } = await import("./hq-server-
|
|
39
|
+
const { startHqServer } = await import("./hq-server-YQUUMTPU.js");
|
|
40
40
|
const dataDir = resolveDataDir(deps);
|
|
41
41
|
const flags = deps.flags ?? {};
|
|
42
42
|
const host = typeof flags["host"] === "string" ? flags["host"] : HQ_CLI_DEFAULT_HOST;
|
|
@@ -544,4 +544,4 @@ export {
|
|
|
544
544
|
hqCmd,
|
|
545
545
|
resolveAuditActor
|
|
546
546
|
};
|
|
547
|
-
//# sourceMappingURL=hq-
|
|
547
|
+
//# sourceMappingURL=hq-GBPGXIR5.js.map
|
package/dist/hq-publisher.d.ts
CHANGED
|
@@ -1,10 +1,11 @@
|
|
|
1
|
-
import type { CreateHqPublisherOptions } from '@wrongstack/core/hq';
|
|
2
|
-
import type
|
|
1
|
+
import type { CreateHqPublisherOptions, HqPublisher } from '@wrongstack/core/hq';
|
|
2
|
+
import { type KanbanHqSyncStats } from './kanban-hq-sync.js';
|
|
3
3
|
type CliHqPublisherOptions = Omit<CreateHqPublisherOptions, 'socketFactory'> & {
|
|
4
4
|
socketFactory?: CreateHqPublisherOptions['socketFactory'];
|
|
5
5
|
};
|
|
6
6
|
export interface CliHqConnection {
|
|
7
7
|
getPublisher(): HqPublisher | undefined;
|
|
8
|
+
getKanbanSyncStats(): KanbanHqSyncStats | undefined;
|
|
8
9
|
stop(): void;
|
|
9
10
|
}
|
|
10
11
|
export interface CliHqConnectionOptions extends CliHqPublisherOptions {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"hq-publisher.d.ts","sourceRoot":"","sources":["../src/hq-publisher.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"hq-publisher.d.ts","sourceRoot":"","sources":["../src/hq-publisher.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,wBAAwB,EAAE,WAAW,EAAgB,MAAM,qBAAqB,CAAC;AAG/F,OAAO,EAAsB,KAAK,iBAAiB,EAAE,MAAM,qBAAqB,CAAC;AAEjF,KAAK,qBAAqB,GAAG,IAAI,CAAC,wBAAwB,EAAE,eAAe,CAAC,GAAG;IAC7E,aAAa,CAAC,EAAE,wBAAwB,CAAC,eAAe,CAAC,CAAC;CAC3D,CAAC;AAEF,MAAM,WAAW,eAAe;IAC9B,YAAY,IAAI,WAAW,GAAG,SAAS,CAAC;IACxC,kBAAkB,IAAI,iBAAiB,GAAG,SAAS,CAAC;IACpD,IAAI,IAAI,IAAI,CAAC;CACd;AAED,MAAM,WAAW,sBAAuB,SAAQ,qBAAqB;IACnE,SAAS,CAAC,EAAE,CAAC,CAAC,SAAS,EAAE,WAAW,KAAK,IAAI,CAAC,GAAG,SAAS,CAAC;IAC3D,eAAe,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;CACtC;AAMD,wBAAgB,oBAAoB,CAAC,OAAO,EAAE,qBAAqB,GAAG,WAAW,GAAG,SAAS,CAK5F;AAmBD,wBAAgB,oBAAoB,CAAC,OAAO,EAAE,sBAAsB,GAAG,eAAe,CAgErF"}
|
|
@@ -50,6 +50,14 @@ export interface ConnectedClient {
|
|
|
50
50
|
}>;
|
|
51
51
|
/** Pending outbound commands (Phase 3 — control plane). */
|
|
52
52
|
commandQueue: HqQueuedCommand[];
|
|
53
|
+
/**
|
|
54
|
+
* Whether this client is the project's leader (the client with
|
|
55
|
+
* `control.receive` capability that other clients coordinate with).
|
|
56
|
+
* Live tracking lives in `HqServer`; this field is the snapshot.
|
|
57
|
+
* Used by the leader-deposed detector in `peer.rehydrate` emission.
|
|
58
|
+
* Defaults to `false` for clients without `control.receive`.
|
|
59
|
+
*/
|
|
60
|
+
isLeader: boolean;
|
|
53
61
|
}
|
|
54
62
|
export interface HqRouterMutableAuth {
|
|
55
63
|
operatorPolicy: HqRedactionPolicy;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/hq-server/types.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,KAAK,EACV,iBAAiB,EACjB,gBAAgB,EAChB,kBAAkB,EAClB,cAAc,EACd,eAAe,EACf,sBAAsB,EACtB,wBAAwB,EACxB,iBAAiB,EACjB,aAAa,EACb,iBAAiB,EACjB,eAAe,EACf,eAAe,EACf,iBAAiB,EACjB,wBAAwB,EACxB,OAAO,EACP,iBAAiB,EAClB,MAAM,qBAAqB,CAAC;AAC7B,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,IAAI,CAAC;AAEpC,YAAY,EACV,gBAAgB,EAChB,kBAAkB,EAClB,cAAc,EACd,eAAe,EACf,sBAAsB,EACtB,wBAAwB,EACxB,iBAAiB,EACjB,aAAa,EACb,iBAAiB,EACjB,eAAe,EACf,eAAe,EACf,iBAAiB,EACjB,wBAAwB,EACxB,OAAO,EACP,iBAAiB,GAClB,CAAC;AAIF,MAAM,WAAW,sBAAsB;IACrC,OAAO,EAAE,wBAAwB,CAAC;IAClC,mGAAmG;IACnG,UAAU,EAAE,MAAM,CAAC;CACpB;AAED,MAAM,WAAW,oBAAoB;IACnC,OAAO,EAAE,sBAAsB,CAAC;IAChC,uDAAuD;IACvD,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,UAAU,EAAE,MAAM,CAAC;CACpB;AAED,MAAM,WAAW,eAAe;IAC9B,EAAE,EAAE,SAAS,CAAC;IACd,QAAQ,EAAE,MAAM,CAAC;IACjB,SAAS,EAAE,MAAM,CAAC;IAClB,OAAO,EAAE,iBAAiB,CAAC;IAC3B,IAAI,EAAE,MAAM,CAAC;IACb,WAAW,EAAE,MAAM,CAAC;IACpB,UAAU,EAAE,MAAM,CAAC;IACnB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,YAAY,EAAE,SAAS,MAAM,EAAE,CAAC;IAChC,0EAA0E;IAC1E,SAAS,CAAC,EAAE,OAAO,CAAC;IACpB,kFAAkF;IAClF,uBAAuB,EAAE,iBAAiB,CAAC;IAC3C,uEAAuE;IACvE,YAAY,EAAE,MAAM,CAAC;IACrB,kEAAkE;IAClE,SAAS,EAAE,GAAG,CAAC,MAAM,EAAE,wBAAwB,CAAC,CAAC;IACjD,sEAAsE;IACtE,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,kEAAkE;IAClE,QAAQ,EAAE,GAAG,CAAC,MAAM,EAAE,sBAAsB,CAAC,CAAC;IAC9C,gGAAgG;IAChG,MAAM,EAAE,GAAG,CAAC,MAAM,EAAE,oBAAoB,CAAC,CAAC;IAC1C,4DAA4D;IAC5D,YAAY,EAAE,GAAG,CAAC,MAAM,EAAE;QAAE,OAAO,EAAE,iBAAiB,EAAE,CAAC;QAAC,UAAU,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;IAChF,2DAA2D;IAC3D,YAAY,EAAE,eAAe,EAAE,CAAC;
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/hq-server/types.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,KAAK,EACV,iBAAiB,EACjB,gBAAgB,EAChB,kBAAkB,EAClB,cAAc,EACd,eAAe,EACf,sBAAsB,EACtB,wBAAwB,EACxB,iBAAiB,EACjB,aAAa,EACb,iBAAiB,EACjB,eAAe,EACf,eAAe,EACf,iBAAiB,EACjB,wBAAwB,EACxB,OAAO,EACP,iBAAiB,EAClB,MAAM,qBAAqB,CAAC;AAC7B,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,IAAI,CAAC;AAEpC,YAAY,EACV,gBAAgB,EAChB,kBAAkB,EAClB,cAAc,EACd,eAAe,EACf,sBAAsB,EACtB,wBAAwB,EACxB,iBAAiB,EACjB,aAAa,EACb,iBAAiB,EACjB,eAAe,EACf,eAAe,EACf,iBAAiB,EACjB,wBAAwB,EACxB,OAAO,EACP,iBAAiB,GAClB,CAAC;AAIF,MAAM,WAAW,sBAAsB;IACrC,OAAO,EAAE,wBAAwB,CAAC;IAClC,mGAAmG;IACnG,UAAU,EAAE,MAAM,CAAC;CACpB;AAED,MAAM,WAAW,oBAAoB;IACnC,OAAO,EAAE,sBAAsB,CAAC;IAChC,uDAAuD;IACvD,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,UAAU,EAAE,MAAM,CAAC;CACpB;AAED,MAAM,WAAW,eAAe;IAC9B,EAAE,EAAE,SAAS,CAAC;IACd,QAAQ,EAAE,MAAM,CAAC;IACjB,SAAS,EAAE,MAAM,CAAC;IAClB,OAAO,EAAE,iBAAiB,CAAC;IAC3B,IAAI,EAAE,MAAM,CAAC;IACb,WAAW,EAAE,MAAM,CAAC;IACpB,UAAU,EAAE,MAAM,CAAC;IACnB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,YAAY,EAAE,SAAS,MAAM,EAAE,CAAC;IAChC,0EAA0E;IAC1E,SAAS,CAAC,EAAE,OAAO,CAAC;IACpB,kFAAkF;IAClF,uBAAuB,EAAE,iBAAiB,CAAC;IAC3C,uEAAuE;IACvE,YAAY,EAAE,MAAM,CAAC;IACrB,kEAAkE;IAClE,SAAS,EAAE,GAAG,CAAC,MAAM,EAAE,wBAAwB,CAAC,CAAC;IACjD,sEAAsE;IACtE,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,kEAAkE;IAClE,QAAQ,EAAE,GAAG,CAAC,MAAM,EAAE,sBAAsB,CAAC,CAAC;IAC9C,gGAAgG;IAChG,MAAM,EAAE,GAAG,CAAC,MAAM,EAAE,oBAAoB,CAAC,CAAC;IAC1C,4DAA4D;IAC5D,YAAY,EAAE,GAAG,CAAC,MAAM,EAAE;QAAE,OAAO,EAAE,iBAAiB,EAAE,CAAC;QAAC,UAAU,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;IAChF,2DAA2D;IAC3D,YAAY,EAAE,eAAe,EAAE,CAAC;IAChC;;;;;;OAMG;IACH,QAAQ,EAAE,OAAO,CAAC;CACnB;AAED,MAAM,WAAW,mBAAmB;IAClC,cAAc,EAAE,iBAAiB,CAAC;IAClC,sBAAsB,EAAE,OAAO,CAAC,iBAAiB,CAAC,GAAG,SAAS,CAAC;IAC/D,aAAa,EAAE,GAAG,CAAC,MAAM,CAAC,CAAC;IAC3B,YAAY,EAAE,GAAG,CAAC,MAAM,CAAC,CAAC;IAC1B,gBAAgB,EAAE,GAAG,CAAC,MAAM,EAAE;QAAE,EAAE,EAAE,MAAM,CAAC;QAAC,YAAY,CAAC,EAAE,MAAM,EAAE,CAAA;KAAE,CAAC,CAAC;IACvE,eAAe,EAAE,GAAG,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IACtC,YAAY,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IAClC,YAAY,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IAClC,UAAU,EAAE,iBAAiB,GAAG,SAAS,CAAC;CAC3C;AAED;;;;;;;GAOG;AACH,MAAM,WAAW,cAAc;IAC7B,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAC;IAC3B,QAAQ,CAAC,IAAI,EAAE,UAAU,GAAG,OAAO,CAAC;IACpC,6EAA6E;IAC7E,QAAQ,CAAC,OAAO,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IACtC,wEAAwE;IACxE,QAAQ,CAAC,YAAY,CAAC,EAAE,MAAM,EAAE,GAAG,SAAS,CAAC;CAC9C;AAID,MAAM,WAAW,cAAc;IAC7B,OAAO,EAAE,iBAAiB,EAAE,CAAC;IAC7B,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AAID,MAAM,WAAW,qBAAqB;IACpC,iBAAiB,IAAI,MAAM,CAAC;IAC5B,SAAS,IAAI,IAAI,CAAC;IAClB,KAAK,IAAI,IAAI,CAAC;CACf;AAID,MAAM,WAAW,aAAa;IAC5B,WAAW,EAAE,MAAM,CAAC;IACpB,OAAO,EAAE,eAAe,CAAC;IACzB,OAAO,EAAE,SAAS,cAAc,EAAE,CAAC;IACnC,SAAS,EAAE,SAAS,wBAAwB,EAAE,CAAC;CAChD"}
|
package/dist/hq-server/ws.d.ts
CHANGED
|
@@ -3,10 +3,69 @@
|
|
|
3
3
|
*
|
|
4
4
|
* @module hq-server/ws
|
|
5
5
|
*/
|
|
6
|
-
import type { HqCommandAuditLog, HqEventEnvelope, HqPersistence, HqRedactionPolicy, HqToken, HqTranscriptEntry } from '@wrongstack/core/hq';
|
|
6
|
+
import type { HqClientResumeMessage, HqCommandAuditLog, HqEventEnvelope, HqPeerRehydrateReason, HqPersistence, HqRedactionPolicy, HqToken, HqTranscriptEntry } from '@wrongstack/core/hq';
|
|
7
7
|
import { WebSocket } from 'ws';
|
|
8
8
|
import type { ConnectedClient, HqSnapshotBroadcaster, TranscriptRing } from './types.js';
|
|
9
|
-
|
|
9
|
+
/**
|
|
10
|
+
* Detect leader loss and emit the appropriate envelope. Currently wired
|
|
11
|
+
* on `client.closed` (graceful close) and the two heartbeat-timeout sites
|
|
12
|
+
* in `hq-server.ts`. An `auth-revoked` call site is a planned follow-up;
|
|
13
|
+
* the `reason` parameter already accepts it.
|
|
14
|
+
*
|
|
15
|
+
* Returns `true` when a leader-loss event was actually emitted. Note:
|
|
16
|
+
* the dedup gate (`PEER_DEDUP_WINDOW_MS`) suppresses re-emit for the same
|
|
17
|
+
* `(projectId, previousLeaderHandle)` and is intentionally NOT considered
|
|
18
|
+
* a "not the leader" outcome — the lost client is still the leader; the
|
|
19
|
+
* function returns `false` purely because there is nothing new to broadcast.
|
|
20
|
+
* Callers that need to log the loss should consult `lostClient.isLeader`
|
|
21
|
+
* separately.
|
|
22
|
+
*
|
|
23
|
+
* Dedup: a `peer.rehydrate` for the same `(projectId, previousLeaderHandle)`
|
|
24
|
+
* is suppressed if one was emitted within `PEER_DEDUP_WINDOW_MS` (1 h).
|
|
25
|
+
* `peer.lost` is not deduped — a project losing its last surviving client
|
|
26
|
+
* is significant enough to emit every time the topology changes.
|
|
27
|
+
*/
|
|
28
|
+
export declare function detectLeaderLoss(lostClient: ConnectedClient, clients: Map<WebSocket, ConnectedClient>, browsers: Set<WebSocket>, reason: HqPeerRehydrateReason, eventSink?: {
|
|
29
|
+
eventLog: HqEventEnvelope[];
|
|
30
|
+
persistence?: HqPersistence | undefined;
|
|
31
|
+
}): boolean;
|
|
32
|
+
/**
|
|
33
|
+
* Server-side fanout of a `hq.kanban_snapshot` envelope after a merge.
|
|
34
|
+
*
|
|
35
|
+
* C2 — broadcasts the post-merge `delta` payload to:
|
|
36
|
+
* - every client whose `projectId` matches `projectId`, and
|
|
37
|
+
* - every browser in `browsers` (browsers are not project-scoped at the
|
|
38
|
+
* WS level; the browser-side projection filters by project when it
|
|
39
|
+
* applies the snapshot).
|
|
40
|
+
*
|
|
41
|
+
* The `delta` payload is the same touched-only payload the merge handler
|
|
42
|
+
* builds (full-set broadcasts drive V8 heap exhaustion on long-lived
|
|
43
|
+
* boards — see the merge handler's comment).
|
|
44
|
+
*
|
|
45
|
+
* Exported for direct unit testing in `tests/hq-kanban-fanout.test.ts`.
|
|
46
|
+
*/
|
|
47
|
+
export declare function fanoutKanbanDelta(message: string, clients: Map<WebSocket, ConnectedClient>, browsers: Set<WebSocket>, projectId: string): {
|
|
48
|
+
clientsNotified: number;
|
|
49
|
+
browsersNotified: number;
|
|
50
|
+
};
|
|
51
|
+
/**
|
|
52
|
+
* Server-side handler for `client.resume` frames.
|
|
53
|
+
*
|
|
54
|
+
* Wired from `handleClient` (line 511) when the client frame type is
|
|
55
|
+
* `client.resume`. The handler:
|
|
56
|
+
* - Validates identity (clientId/projectId match against the WS).
|
|
57
|
+
* - Updates `client.lastSeenAt`.
|
|
58
|
+
* - Computes the cursor (what the client has received).
|
|
59
|
+
* - Filters `eventLog` for envelopes with `clientId === client.clientId && env.seq > cursor`.
|
|
60
|
+
* - Checks the log cannot serve the gap (log_unavailable).
|
|
61
|
+
* - Checks the gap is fresh (last_seen_too_old).
|
|
62
|
+
* - Checks the gap is not too large (gap_too_large).
|
|
63
|
+
* - Sends `hq.resume_gap` on success.
|
|
64
|
+
*
|
|
65
|
+
* Exported for direct unit testing in `tests/hq-resume-handler.test.ts`.
|
|
66
|
+
*/
|
|
67
|
+
export declare function handleClientResume(ws: WebSocket, clients: Map<WebSocket, ConnectedClient>, eventLog: HqEventEnvelope[], frame: HqClientResumeMessage, snapshotBroadcaster?: HqSnapshotBroadcaster): void;
|
|
68
|
+
export declare function handleBrowser(ws: WebSocket, snapshotBroadcaster: HqSnapshotBroadcaster, browsers: Set<WebSocket>, eventLog: HqEventEnvelope[]): void;
|
|
10
69
|
export declare function handleClient(ws: WebSocket, clients: Map<WebSocket, ConnectedClient>, browsers: Set<WebSocket>, eventLog: HqEventEnvelope[], auth: {
|
|
11
70
|
token?: HqToken | undefined;
|
|
12
71
|
getOperatorPolicy: () => Partial<HqRedactionPolicy> | undefined;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ws.d.ts","sourceRoot":"","sources":["../../src/hq-server/ws.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAGH,OAAO,KAAK,EACV,iBAAiB,EACjB,eAAe,
|
|
1
|
+
{"version":3,"file":"ws.d.ts","sourceRoot":"","sources":["../../src/hq-server/ws.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAGH,OAAO,KAAK,EACV,qBAAqB,EACrB,iBAAiB,EACjB,eAAe,EAQf,qBAAqB,EACrB,aAAa,EAEb,iBAAiB,EAGjB,OAAO,EAEP,iBAAiB,EAElB,MAAM,qBAAqB,CAAC;AAe7B,OAAO,EAAE,SAAS,EAAE,MAAM,IAAI,CAAC;AAE/B,OAAO,KAAK,EAAE,eAAe,EAAE,qBAAqB,EAAE,cAAc,EAAE,MAAM,YAAY,CAAC;AAmEzF;;;;;;;;;;;;;;;;;;GAkBG;AACH,wBAAgB,gBAAgB,CAC9B,UAAU,EAAE,eAAe,EAC3B,OAAO,EAAE,GAAG,CAAC,SAAS,EAAE,eAAe,CAAC,EACxC,QAAQ,EAAE,GAAG,CAAC,SAAS,CAAC,EACxB,MAAM,EAAE,qBAAqB,EAC7B,SAAS,CAAC,EAAE;IAAE,QAAQ,EAAE,eAAe,EAAE,CAAC;IAAC,WAAW,CAAC,EAAE,aAAa,GAAG,SAAS,CAAA;CAAE,GACnF,OAAO,CAsFT;AAiBD;;;;;;;;;;;;;;GAcG;AACH,wBAAgB,iBAAiB,CAC/B,OAAO,EAAE,MAAM,EACf,OAAO,EAAE,GAAG,CAAC,SAAS,EAAE,eAAe,CAAC,EACxC,QAAQ,EAAE,GAAG,CAAC,SAAS,CAAC,EACxB,SAAS,EAAE,MAAM,GAChB;IAAE,eAAe,EAAE,MAAM,CAAC;IAAC,gBAAgB,EAAE,MAAM,CAAA;CAAE,CAcvD;AAED;;;;;;;;;;;;;;;GAeG;AACH,wBAAgB,kBAAkB,CAChC,EAAE,EAAE,SAAS,EACb,OAAO,EAAE,GAAG,CAAC,SAAS,EAAE,eAAe,CAAC,EACxC,QAAQ,EAAE,eAAe,EAAE,EAC3B,KAAK,EAAE,qBAAqB,EAC5B,mBAAmB,CAAC,EAAE,qBAAqB,GAC1C,IAAI,CAyIN;AA8ED,wBAAgB,aAAa,CAC3B,EAAE,EAAE,SAAS,EACb,mBAAmB,EAAE,qBAAqB,EAC1C,QAAQ,EAAE,GAAG,CAAC,SAAS,CAAC,EACxB,QAAQ,EAAE,eAAe,EAAE,GAC1B,IAAI,CA4DN;AAID,wBAAgB,YAAY,CAC1B,EAAE,EAAE,SAAS,EACb,OAAO,EAAE,GAAG,CAAC,SAAS,EAAE,eAAe,CAAC,EACxC,QAAQ,EAAE,GAAG,CAAC,SAAS,CAAC,EACxB,QAAQ,EAAE,eAAe,EAAE,EAC3B,IAAI,EAAE;IACJ,KAAK,CAAC,EAAE,OAAO,GAAG,SAAS,CAAC;IAC5B,iBAAiB,EAAE,MAAM,OAAO,CAAC,iBAAiB,CAAC,GAAG,SAAS,CAAC;CACjE,EACD,mBAAmB,EAAE,qBAAqB,EAC1C,WAAW,EAAE,GAAG,CAAC,MAAM,EAAE,cAAc,CAAC,EACxC,aAAa,EAAE,GAAG,CAAC,MAAM,EAAE,iBAAiB,EAAE,CAAC,EAC/C,WAAW,CAAC,EAAE,aAAa,EAC3B,QAAQ,CAAC,EAAE,iBAAiB,GAC3B,IAAI,CAogBN"}
|
|
@@ -15,7 +15,7 @@ import {
|
|
|
15
15
|
readLocalSubagentTranscript,
|
|
16
16
|
sanitizeApiError,
|
|
17
17
|
startHqServer
|
|
18
|
-
} from "./chunk-
|
|
18
|
+
} from "./chunk-7JABKXET.js";
|
|
19
19
|
import "./chunk-Q5GTM25S.js";
|
|
20
20
|
import "./chunk-7OCVIDC7.js";
|
|
21
21
|
export {
|
|
@@ -36,4 +36,4 @@ export {
|
|
|
36
36
|
sanitizeApiError,
|
|
37
37
|
startHqServer
|
|
38
38
|
};
|
|
39
|
-
//# sourceMappingURL=hq-server-
|
|
39
|
+
//# sourceMappingURL=hq-server-YQUUMTPU.js.map
|
package/dist/index.js
CHANGED
|
@@ -22,7 +22,7 @@ import {
|
|
|
22
22
|
} from "./chunk-TGDHN4LM.js";
|
|
23
23
|
import {
|
|
24
24
|
DEFAULT_PORT
|
|
25
|
-
} from "./chunk-
|
|
25
|
+
} from "./chunk-7JABKXET.js";
|
|
26
26
|
import "./chunk-Q5GTM25S.js";
|
|
27
27
|
import {
|
|
28
28
|
CLI_VERSION
|
|
@@ -1521,8 +1521,8 @@ var loaders = {
|
|
|
1521
1521
|
quick: async () => (await import("./quick-VIO2BEHS.js")).quickCmd,
|
|
1522
1522
|
bench: async () => (await import("./bench-7ZDWSNEF.js")).benchCmd,
|
|
1523
1523
|
chronicle: async () => (await import("./chronicle-QQEQFSSE.js")).chronicleCmd,
|
|
1524
|
-
hq: async () => (await import("./hq-
|
|
1525
|
-
mailbox: async () => (await import("./mailbox-serve-
|
|
1524
|
+
hq: async () => (await import("./hq-GBPGXIR5.js")).hqCmd,
|
|
1525
|
+
mailbox: async () => (await import("./mailbox-serve-DBOOOOWZ.js")).mailboxServeCmd,
|
|
1526
1526
|
permissions: async () => (await import("./permissions-FNYLZIL4.js")).permissionsCmd,
|
|
1527
1527
|
project: async () => (await import("./project-BLQ3ALVL.js")).projectCmd
|
|
1528
1528
|
};
|
|
@@ -2157,7 +2157,7 @@ async function isPortInUse(host, port) {
|
|
|
2157
2157
|
}
|
|
2158
2158
|
async function handleHqShortCircuit(flags) {
|
|
2159
2159
|
if (flags["hq"] !== true) return null;
|
|
2160
|
-
const { startHqServer } = await import("./hq-server-
|
|
2160
|
+
const { startHqServer } = await import("./hq-server-YQUUMTPU.js");
|
|
2161
2161
|
const tunnelRequested = flags["tunnel"] === true;
|
|
2162
2162
|
const host = typeof flags["host"] === "string" ? flags["host"] : tunnelRequested ? "127.0.0.1" : HQ_CLI_DEFAULT_HOST;
|
|
2163
2163
|
if (tunnelRequested && !isLoopbackHost(host)) {
|
|
@@ -2316,9 +2316,122 @@ ${color8.green("Cloudflare Quick Tunnel ready:")} ${browserUrl}
|
|
|
2316
2316
|
}
|
|
2317
2317
|
|
|
2318
2318
|
// src/boot/launch-menu.ts
|
|
2319
|
-
import { atomicWrite as atomicWrite3, color as color9, isStdinTTY as isStdinTTY2 } from "@wrongstack/core/utils";
|
|
2319
|
+
import { atomicWrite as atomicWrite3, color as color9, isStdinTTY as isStdinTTY2, setRawMode as setRawMode2 } from "@wrongstack/core/utils";
|
|
2320
2320
|
import { HQ_CLI_DEFAULT_HOST as HQ_CLI_DEFAULT_HOST2 } from "@wrongstack/core/hq";
|
|
2321
2321
|
import * as fs8 from "node:fs/promises";
|
|
2322
|
+
|
|
2323
|
+
// src/boot/launch-banner.ts
|
|
2324
|
+
var STACK_ORANGE = { r: 253, g: 159, b: 2 };
|
|
2325
|
+
var SIGNAL_PINK = { r: 254, g: 46, b: 95 };
|
|
2326
|
+
function mixRgb(a, b, t) {
|
|
2327
|
+
const clamped = Math.min(1, Math.max(0, t));
|
|
2328
|
+
return {
|
|
2329
|
+
r: Math.round(a.r + (b.r - a.r) * clamped),
|
|
2330
|
+
g: Math.round(a.g + (b.g - a.g) * clamped),
|
|
2331
|
+
b: Math.round(a.b + (b.b - a.b) * clamped)
|
|
2332
|
+
};
|
|
2333
|
+
}
|
|
2334
|
+
function fg(c) {
|
|
2335
|
+
return `\x1B[38;2;${c.r};${c.g};${c.b}m`;
|
|
2336
|
+
}
|
|
2337
|
+
function colorsEnabled() {
|
|
2338
|
+
const flag = (value) => value !== void 0 && value.trim() !== "" && !/^(0|false|no|off)$/i.test(value.trim());
|
|
2339
|
+
if (flag(process.env.NO_COLOR)) return false;
|
|
2340
|
+
if (flag(process.env.FORCE_COLOR)) return true;
|
|
2341
|
+
return process.stdout.isTTY === true;
|
|
2342
|
+
}
|
|
2343
|
+
var WORDMARK_GLYPH_BITS = Object.freeze({
|
|
2344
|
+
W: Object.freeze(["10001", "10001", "10001", "10101", "10101", "10101", "01010"]),
|
|
2345
|
+
R: Object.freeze(["11110", "10001", "10001", "11110", "10100", "10010", "10001"]),
|
|
2346
|
+
O: Object.freeze(["01110", "10001", "10001", "10001", "10001", "10001", "01110"]),
|
|
2347
|
+
N: Object.freeze(["10001", "11001", "11001", "10101", "10011", "10011", "10001"]),
|
|
2348
|
+
G: Object.freeze(["01110", "10001", "10000", "10111", "10001", "10001", "01110"]),
|
|
2349
|
+
S: Object.freeze(["01111", "10000", "10000", "01110", "00001", "00001", "11110"]),
|
|
2350
|
+
T: Object.freeze(["11111", "00100", "00100", "00100", "00100", "00100", "00100"]),
|
|
2351
|
+
A: Object.freeze(["01110", "10001", "10001", "11111", "10001", "10001", "10001"]),
|
|
2352
|
+
C: Object.freeze(["01111", "10000", "10000", "10000", "10000", "10000", "01111"]),
|
|
2353
|
+
K: Object.freeze(["10001", "10010", "10100", "11000", "10100", "10010", "10001"])
|
|
2354
|
+
});
|
|
2355
|
+
var WORDMARK = "WRONGSTACK";
|
|
2356
|
+
var WORDMARK_PIXEL_ROWS = 7;
|
|
2357
|
+
var WORDMARK_ROWS = Math.ceil(WORDMARK_PIXEL_ROWS / 2);
|
|
2358
|
+
var GLYPH_WIDTH = 5;
|
|
2359
|
+
var WORDMARK_WIDTH = WORDMARK.length * GLYPH_WIDTH + WORDMARK.length - 1;
|
|
2360
|
+
function packedCell(top, bottom) {
|
|
2361
|
+
if (top === "1" && bottom === "1") return "\u2588";
|
|
2362
|
+
if (top === "1") return "\u2580";
|
|
2363
|
+
if (bottom === "1") return "\u2584";
|
|
2364
|
+
return " ";
|
|
2365
|
+
}
|
|
2366
|
+
function packedGlyphRow(glyph, row) {
|
|
2367
|
+
const top = glyph[row * 2] ?? "";
|
|
2368
|
+
const bottom = glyph[row * 2 + 1] ?? "";
|
|
2369
|
+
return Array.from(
|
|
2370
|
+
{ length: GLYPH_WIDTH },
|
|
2371
|
+
(_, column) => packedCell(top[column], bottom[column])
|
|
2372
|
+
).join("");
|
|
2373
|
+
}
|
|
2374
|
+
var WORDMARK_LINES = Object.freeze(
|
|
2375
|
+
Array.from(
|
|
2376
|
+
{ length: WORDMARK_ROWS },
|
|
2377
|
+
(_, row) => [...WORDMARK].map((letter) => {
|
|
2378
|
+
const glyph = WORDMARK_GLYPH_BITS[letter];
|
|
2379
|
+
return glyph ? packedGlyphRow(glyph, row) : " ".repeat(GLYPH_WIDTH);
|
|
2380
|
+
}).join(" ")
|
|
2381
|
+
)
|
|
2382
|
+
);
|
|
2383
|
+
function gradientLine(text, colorOn) {
|
|
2384
|
+
if (!colorOn) return text;
|
|
2385
|
+
const length = text.length;
|
|
2386
|
+
let out = "\x1B[1m";
|
|
2387
|
+
for (let i = 0; i < length; i++) {
|
|
2388
|
+
const ch = text[i];
|
|
2389
|
+
if (ch === " ") {
|
|
2390
|
+
out += ch;
|
|
2391
|
+
continue;
|
|
2392
|
+
}
|
|
2393
|
+
const t = length > 1 ? i / (length - 1) : 0.5;
|
|
2394
|
+
out += `${fg(mixRgb(STACK_ORANGE, SIGNAL_PINK, t))}${ch}`;
|
|
2395
|
+
}
|
|
2396
|
+
return `${out}\x1B[0m`;
|
|
2397
|
+
}
|
|
2398
|
+
function dimLine(text, colorOn) {
|
|
2399
|
+
return colorOn ? `\x1B[2m${text}\x1B[22m` : text;
|
|
2400
|
+
}
|
|
2401
|
+
var MARK_COLS = 5;
|
|
2402
|
+
var PINK_HOME = 1;
|
|
2403
|
+
var MARK_WIDTH = MARK_COLS * 2 + (MARK_COLS - 1);
|
|
2404
|
+
function buildMarkLines(colorOn) {
|
|
2405
|
+
const orange = colorOn ? fg(STACK_ORANGE) : "";
|
|
2406
|
+
const pink = colorOn ? fg(SIGNAL_PINK) : "";
|
|
2407
|
+
const reset = colorOn ? "\x1B[0m" : "";
|
|
2408
|
+
return Array.from({ length: 3 }, (_, row) => {
|
|
2409
|
+
const cells = Array.from({ length: MARK_COLS }, (_2, column) => {
|
|
2410
|
+
if (column === PINK_HOME && (row === 1 || row === 2)) return `${pink}\u2588\u2588${reset}`;
|
|
2411
|
+
if (row < 2 && column !== PINK_HOME) return `${orange}\u2588\u2588${reset}`;
|
|
2412
|
+
return " ";
|
|
2413
|
+
});
|
|
2414
|
+
return cells.join(" ").trimEnd();
|
|
2415
|
+
});
|
|
2416
|
+
}
|
|
2417
|
+
function launchBannerLines(columns, version) {
|
|
2418
|
+
const colorOn = colorsEnabled();
|
|
2419
|
+
const tagline = version ? `v${version} \xB7 the wrong stack for all the right reasons` : "the wrong stack for all the right reasons";
|
|
2420
|
+
if (columns < WORDMARK_WIDTH + 4) {
|
|
2421
|
+
const compact = "\u2590\u2588\u258C W R O N G S T A C K";
|
|
2422
|
+
return [gradientLine(compact, colorOn), dimLine(tagline, colorOn)];
|
|
2423
|
+
}
|
|
2424
|
+
const markPad = " ".repeat(Math.max(0, Math.floor((WORDMARK_WIDTH - MARK_WIDTH) / 2)));
|
|
2425
|
+
const tagPad = " ".repeat(Math.max(0, Math.floor((WORDMARK_WIDTH - tagline.length) / 2)));
|
|
2426
|
+
return [
|
|
2427
|
+
...buildMarkLines(colorOn).map((line) => markPad + line),
|
|
2428
|
+
"",
|
|
2429
|
+
...WORDMARK_LINES.map((line) => gradientLine(line, colorOn)),
|
|
2430
|
+
tagPad + dimLine(tagline, colorOn)
|
|
2431
|
+
];
|
|
2432
|
+
}
|
|
2433
|
+
|
|
2434
|
+
// src/boot/launch-menu.ts
|
|
2322
2435
|
var DEFAULT_PORTS = {
|
|
2323
2436
|
webui: 3456,
|
|
2324
2437
|
simpleui: 3466,
|
|
@@ -2389,6 +2502,7 @@ async function runLaunchMenu(deps) {
|
|
|
2389
2502
|
}
|
|
2390
2503
|
const { renderer, reader, lastChoice } = deps;
|
|
2391
2504
|
const ports = { ...DEFAULT_PORTS, ...deps.defaultPorts ?? {} };
|
|
2505
|
+
writeBanner(renderer);
|
|
2392
2506
|
if (lastChoice) {
|
|
2393
2507
|
const accept = await promptSummaryGate(deps);
|
|
2394
2508
|
if (accept === "use-last") {
|
|
@@ -2399,32 +2513,37 @@ async function runLaunchMenu(deps) {
|
|
|
2399
2513
|
}
|
|
2400
2514
|
}
|
|
2401
2515
|
renderer.write(`
|
|
2402
|
-
${color9.
|
|
2403
|
-
`);
|
|
2404
|
-
renderer.write(` ${color9.dim("\u2500".repeat(48))}
|
|
2405
|
-
`);
|
|
2406
|
-
renderer.write(` ${color9.amber("?")} Choose how to run WrongStack:
|
|
2516
|
+
${color9.amber("?")} Choose how to run WrongStack:
|
|
2407
2517
|
|
|
2408
2518
|
`);
|
|
2409
|
-
|
|
2410
|
-
|
|
2411
|
-
|
|
2519
|
+
const arrowPick = await promptModeArrow(deps);
|
|
2520
|
+
let choice;
|
|
2521
|
+
if (arrowPick) {
|
|
2522
|
+
if (arrowPick.cancelled) {
|
|
2523
|
+
return { mode: "tui-repl", cancelled: true };
|
|
2524
|
+
}
|
|
2525
|
+
choice = { mode: arrowPick.mode };
|
|
2526
|
+
} else {
|
|
2527
|
+
for (const opt of MODE_OPTIONS) {
|
|
2528
|
+
renderer.write(
|
|
2529
|
+
` ${color9.bold(String(opt.key))}) ${opt.icon} ${color9.bold(opt.label)} ${color9.dim(opt.hint)}
|
|
2412
2530
|
`
|
|
2413
|
-
|
|
2414
|
-
|
|
2415
|
-
|
|
2531
|
+
);
|
|
2532
|
+
}
|
|
2533
|
+
renderer.write(`
|
|
2416
2534
|
${color9.dim("\u2500".repeat(48))}
|
|
2417
2535
|
`);
|
|
2418
|
-
|
|
2419
|
-
|
|
2420
|
-
|
|
2421
|
-
|
|
2422
|
-
|
|
2423
|
-
|
|
2424
|
-
|
|
2536
|
+
const answer = (await reader.readLine(
|
|
2537
|
+
` ${color9.amber("?")} Mode ${color9.dim("[1-4, q to quit]")} ${color9.dim(`(auto 1 in ${MENU_TIMEOUT_MS / 1e3}s)`)} `,
|
|
2538
|
+
{ timeoutMs: MENU_TIMEOUT_MS, defaultAnswer: "1" }
|
|
2539
|
+
)).trim().toLowerCase();
|
|
2540
|
+
if (answer === "q" || answer === "quit") {
|
|
2541
|
+
renderer.write(color9.dim(" Goodbye!\n"));
|
|
2542
|
+
return { mode: "tui-repl", cancelled: true };
|
|
2543
|
+
}
|
|
2544
|
+
const picked = MODE_OPTIONS.find((o) => String(o.key) === answer || o.mode === answer);
|
|
2545
|
+
choice = picked ? { mode: picked.mode } : { mode: "tui-repl" };
|
|
2425
2546
|
}
|
|
2426
|
-
const picked = MODE_OPTIONS.find((o) => String(o.key) === answer || o.mode === answer);
|
|
2427
|
-
const choice = picked ? { mode: picked.mode } : { mode: "tui-repl" };
|
|
2428
2547
|
if (choice.mode !== "tui-repl") {
|
|
2429
2548
|
const port = await promptPort(deps, ports[choice.mode]);
|
|
2430
2549
|
choice.port = port;
|
|
@@ -2434,6 +2553,154 @@ async function runLaunchMenu(deps) {
|
|
|
2434
2553
|
}
|
|
2435
2554
|
return finalize(choice, ports);
|
|
2436
2555
|
}
|
|
2556
|
+
function writeBanner(renderer) {
|
|
2557
|
+
const columns = process.stdout.columns ?? 80;
|
|
2558
|
+
renderer.write("\n");
|
|
2559
|
+
for (const line of launchBannerLines(columns, CLI_VERSION)) {
|
|
2560
|
+
renderer.write(` ${line}
|
|
2561
|
+
`);
|
|
2562
|
+
}
|
|
2563
|
+
}
|
|
2564
|
+
function canUseArrowMenu() {
|
|
2565
|
+
if (process.env.VITEST || process.env.NODE_ENV === "test") return false;
|
|
2566
|
+
const stdin = process.stdin;
|
|
2567
|
+
return isStdinTTY2() && process.stdout.isTTY === true && typeof stdin.setRawMode === "function";
|
|
2568
|
+
}
|
|
2569
|
+
async function promptModeArrow(deps) {
|
|
2570
|
+
if (!canUseArrowMenu()) return null;
|
|
2571
|
+
const { renderer } = deps;
|
|
2572
|
+
const stdin = process.stdin;
|
|
2573
|
+
const out = (s) => renderer.write(s);
|
|
2574
|
+
return await new Promise((resolve2) => {
|
|
2575
|
+
let index = 0;
|
|
2576
|
+
let drawn = 0;
|
|
2577
|
+
let remaining = Math.round(MENU_TIMEOUT_MS / 1e3);
|
|
2578
|
+
let countdown = true;
|
|
2579
|
+
let settled = false;
|
|
2580
|
+
let interval;
|
|
2581
|
+
const wasRaw = stdin.isRaw === true;
|
|
2582
|
+
const wasPaused = stdin.isPaused();
|
|
2583
|
+
const rows = () => {
|
|
2584
|
+
const lines = [];
|
|
2585
|
+
for (let i = 0; i < MODE_OPTIONS.length; i++) {
|
|
2586
|
+
const opt = MODE_OPTIONS[i];
|
|
2587
|
+
const selected = i === index;
|
|
2588
|
+
const pointer = selected ? color9.pink("\u276F") : " ";
|
|
2589
|
+
const label = selected ? color9.amber(color9.bold(opt.label)) : color9.bold(opt.label);
|
|
2590
|
+
lines.push(
|
|
2591
|
+
` ${pointer} ${color9.dim(String(opt.key))} ${opt.icon} ${label} ${color9.dim(opt.hint)}`
|
|
2592
|
+
);
|
|
2593
|
+
}
|
|
2594
|
+
lines.push("");
|
|
2595
|
+
const auto = countdown ? color9.dim(` \xB7 auto-launches ${MODE_OPTIONS[index].label} in ${remaining}s`) : "";
|
|
2596
|
+
lines.push(` ${color9.dim("\u2191\u2193 move \xB7 Enter launch \xB7 1-4 jump \xB7 q quit")}${auto}`);
|
|
2597
|
+
return lines;
|
|
2598
|
+
};
|
|
2599
|
+
const paint = () => {
|
|
2600
|
+
const lines = rows();
|
|
2601
|
+
let frame = drawn > 0 ? `\x1B[${drawn}A` : "";
|
|
2602
|
+
frame += `${lines.map((line) => `\x1B[2K${line}`).join("\n")}
|
|
2603
|
+
`;
|
|
2604
|
+
out(frame);
|
|
2605
|
+
drawn = lines.length;
|
|
2606
|
+
};
|
|
2607
|
+
const stopInput = () => {
|
|
2608
|
+
if (interval) {
|
|
2609
|
+
clearInterval(interval);
|
|
2610
|
+
interval = void 0;
|
|
2611
|
+
}
|
|
2612
|
+
stdin.off("data", onData);
|
|
2613
|
+
stdin.off("close", onClose);
|
|
2614
|
+
try {
|
|
2615
|
+
setRawMode2(stdin, wasRaw);
|
|
2616
|
+
} catch {
|
|
2617
|
+
}
|
|
2618
|
+
if (wasPaused) stdin.pause();
|
|
2619
|
+
};
|
|
2620
|
+
const settle = (result, finalLine) => {
|
|
2621
|
+
if (settled) return;
|
|
2622
|
+
settled = true;
|
|
2623
|
+
stopInput();
|
|
2624
|
+
if (drawn > 0) out(`\x1B[${drawn}A`);
|
|
2625
|
+
out("\x1B[0J");
|
|
2626
|
+
out(finalLine);
|
|
2627
|
+
out("\x1B[?25h");
|
|
2628
|
+
resolve2(result);
|
|
2629
|
+
};
|
|
2630
|
+
const pick = () => {
|
|
2631
|
+
const opt = MODE_OPTIONS[index];
|
|
2632
|
+
settle(
|
|
2633
|
+
{ cancelled: false, mode: opt.mode },
|
|
2634
|
+
` ${color9.green("\u2714")} ${opt.icon} ${color9.bold(opt.label)} ${color9.dim(opt.hint)}
|
|
2635
|
+
`
|
|
2636
|
+
);
|
|
2637
|
+
};
|
|
2638
|
+
const cancel = () => {
|
|
2639
|
+
settle({ cancelled: true, mode: "tui-repl" }, color9.dim(" Goodbye!\n"));
|
|
2640
|
+
};
|
|
2641
|
+
const stopCountdown = () => {
|
|
2642
|
+
if (!countdown) return;
|
|
2643
|
+
countdown = false;
|
|
2644
|
+
if (interval) {
|
|
2645
|
+
clearInterval(interval);
|
|
2646
|
+
interval = void 0;
|
|
2647
|
+
}
|
|
2648
|
+
};
|
|
2649
|
+
const onData = (buf) => {
|
|
2650
|
+
const key = buf.toString("utf8");
|
|
2651
|
+
stopCountdown();
|
|
2652
|
+
if (key === "" || key === "q" || key === "Q" || key === "\x1B") {
|
|
2653
|
+
cancel();
|
|
2654
|
+
return;
|
|
2655
|
+
}
|
|
2656
|
+
if (key === "\r" || key === "\n") {
|
|
2657
|
+
pick();
|
|
2658
|
+
return;
|
|
2659
|
+
}
|
|
2660
|
+
if (key === "\x1B[A" || key === "\x1BOA" || key === "k") {
|
|
2661
|
+
index = (index + MODE_OPTIONS.length - 1) % MODE_OPTIONS.length;
|
|
2662
|
+
paint();
|
|
2663
|
+
return;
|
|
2664
|
+
}
|
|
2665
|
+
if (key === "\x1B[B" || key === "\x1BOB" || key === "j") {
|
|
2666
|
+
index = (index + 1) % MODE_OPTIONS.length;
|
|
2667
|
+
paint();
|
|
2668
|
+
return;
|
|
2669
|
+
}
|
|
2670
|
+
if (/^[0-9]$/.test(key)) {
|
|
2671
|
+
const digit = Number.parseInt(key, 10);
|
|
2672
|
+
if (digit >= 1 && digit <= MODE_OPTIONS.length) {
|
|
2673
|
+
index = digit - 1;
|
|
2674
|
+
pick();
|
|
2675
|
+
return;
|
|
2676
|
+
}
|
|
2677
|
+
}
|
|
2678
|
+
paint();
|
|
2679
|
+
};
|
|
2680
|
+
const onClose = () => {
|
|
2681
|
+
settle({ cancelled: true, mode: "tui-repl" }, "");
|
|
2682
|
+
};
|
|
2683
|
+
try {
|
|
2684
|
+
setRawMode2(stdin, true);
|
|
2685
|
+
stdin.resume();
|
|
2686
|
+
} catch {
|
|
2687
|
+
resolve2(null);
|
|
2688
|
+
return;
|
|
2689
|
+
}
|
|
2690
|
+
out("\x1B[?25l");
|
|
2691
|
+
paint();
|
|
2692
|
+
stdin.on("data", onData);
|
|
2693
|
+
stdin.once("close", onClose);
|
|
2694
|
+
interval = setInterval(() => {
|
|
2695
|
+
remaining -= 1;
|
|
2696
|
+
if (remaining <= 0) {
|
|
2697
|
+
pick();
|
|
2698
|
+
return;
|
|
2699
|
+
}
|
|
2700
|
+
paint();
|
|
2701
|
+
}, 1e3);
|
|
2702
|
+
});
|
|
2703
|
+
}
|
|
2437
2704
|
async function promptSummaryGate(deps) {
|
|
2438
2705
|
const { renderer, reader, lastChoice } = deps;
|
|
2439
2706
|
if (!lastChoice) return "re-prompt";
|
|
@@ -2854,7 +3121,7 @@ async function initializeCli(argv) {
|
|
|
2854
3121
|
async function main(argv) {
|
|
2855
3122
|
const cliCtx = await initializeCli(argv);
|
|
2856
3123
|
if (typeof cliCtx === "number") return cliCtx;
|
|
2857
|
-
const { runInteractive } = await import("./cli-main-
|
|
3124
|
+
const { runInteractive } = await import("./cli-main-GOY5YGVL.js");
|
|
2858
3125
|
return runInteractive(cliCtx);
|
|
2859
3126
|
}
|
|
2860
3127
|
|