@wrongstack/cli 0.296.2 → 0.296.4
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-TOAWVJDY.js} +197 -60
- package/dist/cli-main-TOAWVJDY.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/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
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"execution-storage-observability.d.ts","sourceRoot":"","sources":["../src/execution-storage-observability.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,yBAAyB,CAAC;AAExD,wBAAgB,2BAA2B,CACzC,MAAM,EAAE,QAAQ,EAChB,WAAW,EAAE,MAAM,GAAG,SAAS,GAC9B,MAAM,IAAI,
|
|
1
|
+
{"version":3,"file":"execution-storage-observability.d.ts","sourceRoot":"","sources":["../src/execution-storage-observability.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,yBAAyB,CAAC;AAExD,wBAAgB,2BAA2B,CACzC,MAAM,EAAE,QAAQ,EAChB,WAAW,EAAE,MAAM,GAAG,SAAS,GAC9B,MAAM,IAAI,CAiFZ"}
|
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,CA06BhE"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"host-subagent-factory.d.ts","sourceRoot":"","sources":["../../src/fleet/host-subagent-factory.ts"],"names":[],"mappings":"AAcA,OAAO,EACL,KAAK,YAAY,EAEjB,KAAK,sBAAsB,EAK5B,MAAM,+BAA+B,CAAC;AAUvC,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,2BAA2B,CAAC;AAG9D,OAAO,KAAK,EACV,MAAM,EAIN,cAAc,EAEd,IAAI,EACL,MAAM,wBAAwB,CAAC;AAIhC,OAAO,KAAK,EAAE,cAAc,EAAE,qBAAqB,EAAE,MAAM,iBAAiB,CAAC;AAW7E,MAAM,WAAW,0BAA0B;IACzC,IAAI,EAAE,cAAc,CAAC;IACrB,IAAI,EAAE,qBAAqB,CAAC;IAC5B,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,cAAc,CAAC,CAAC;IACvC,cAAc,CAAC,EAAE,sBAAsB,GAAG,SAAS,CAAC;IACpD,WAAW,EAAE,CAAC,KAAK,CAAC,EAAE,MAAM,EAAE,KAAK,IAAI,EAAE,CAAC;IAC1C,iBAAiB,EAAE,MAAM,MAAM,CAAC;IAChC,kBAAkB,EAAE,CAAC,UAAU,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,KAAK,IAAI,CAAC;IAC/D,oBAAoB,EAAE,CAAC,KAAK,CAAC,EAAE,MAAM,EAAE,KAAK,YAAY,CAAC;CAC1D;AAED,wBAAgB,yBAAyB,CACvC,MAAM,EAAE,MAAM,EACd,IAAI,EAAE,0BAA0B,GAC/B,YAAY,
|
|
1
|
+
{"version":3,"file":"host-subagent-factory.d.ts","sourceRoot":"","sources":["../../src/fleet/host-subagent-factory.ts"],"names":[],"mappings":"AAcA,OAAO,EACL,KAAK,YAAY,EAEjB,KAAK,sBAAsB,EAK5B,MAAM,+BAA+B,CAAC;AAUvC,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,2BAA2B,CAAC;AAG9D,OAAO,KAAK,EACV,MAAM,EAIN,cAAc,EAEd,IAAI,EACL,MAAM,wBAAwB,CAAC;AAIhC,OAAO,KAAK,EAAE,cAAc,EAAE,qBAAqB,EAAE,MAAM,iBAAiB,CAAC;AAW7E,MAAM,WAAW,0BAA0B;IACzC,IAAI,EAAE,cAAc,CAAC;IACrB,IAAI,EAAE,qBAAqB,CAAC;IAC5B,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,cAAc,CAAC,CAAC;IACvC,cAAc,CAAC,EAAE,sBAAsB,GAAG,SAAS,CAAC;IACpD,WAAW,EAAE,CAAC,KAAK,CAAC,EAAE,MAAM,EAAE,KAAK,IAAI,EAAE,CAAC;IAC1C,iBAAiB,EAAE,MAAM,MAAM,CAAC;IAChC,kBAAkB,EAAE,CAAC,UAAU,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,KAAK,IAAI,CAAC;IAC/D,oBAAoB,EAAE,CAAC,KAAK,CAAC,EAAE,MAAM,EAAE,KAAK,YAAY,CAAC;CAC1D;AAED,wBAAgB,yBAAyB,CACvC,MAAM,EAAE,MAAM,EACd,IAAI,EAAE,0BAA0B,GAC/B,YAAY,CAmTd"}
|
|
@@ -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-6AQ3BXZA.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-JUYKUNJX.js.map
|
package/dist/hq-server/auth.d.ts
CHANGED
|
@@ -4,6 +4,7 @@
|
|
|
4
4
|
* @module hq-server/auth
|
|
5
5
|
*/
|
|
6
6
|
import type * as http from 'node:http';
|
|
7
|
+
import type { HqSessionEntry } from './types.js';
|
|
7
8
|
export declare const HQ_SESSION_COOKIE = "hq.session";
|
|
8
9
|
export declare const HQ_SESSION_MAX_AGE_MS: number;
|
|
9
10
|
export interface HqBrowserAuthContext {
|
|
@@ -12,7 +13,18 @@ export interface HqBrowserAuthContext {
|
|
|
12
13
|
id: string;
|
|
13
14
|
capabilities?: string[];
|
|
14
15
|
}
|
|
15
|
-
|
|
16
|
+
/**
|
|
17
|
+
* Cookie-session auth context — returned when a valid `hq.session` cookie
|
|
18
|
+
* is presented. Password-origin cookies have `kind: 'cookie'` (full
|
|
19
|
+
* access). Token-origin cookies carry the source token's capabilities
|
|
20
|
+
* so capability checks (e.g. `control.enqueue`) still apply.
|
|
21
|
+
*/
|
|
22
|
+
export interface HqCookieAuthContext {
|
|
23
|
+
kind: 'cookie';
|
|
24
|
+
tokenId?: string;
|
|
25
|
+
capabilities?: string[];
|
|
26
|
+
}
|
|
27
|
+
export type HqBrowserAuthResult = HqBrowserAuthContext | HqCookieAuthContext | undefined;
|
|
16
28
|
/**
|
|
17
29
|
* The only featureful frontend is the packaged, same-origin React SPA.
|
|
18
30
|
* The missing-assets recovery document contains inline CSS but no script.
|
|
@@ -25,6 +37,7 @@ export declare function parseCookieHeader(cookieHeader: string | undefined): Rec
|
|
|
25
37
|
export declare function setHqSessionCookie(res: http.ServerResponse, value: string, secure?: boolean): void;
|
|
26
38
|
export declare function clearHqSessionCookie(res: http.ServerResponse, secure?: boolean): void;
|
|
27
39
|
export declare function isTokenAuth(auth: HqBrowserAuthResult): auth is HqBrowserAuthContext;
|
|
40
|
+
export declare function isCookieAuth(auth: HqBrowserAuthResult): auth is HqCookieAuthContext;
|
|
28
41
|
/**
|
|
29
42
|
* Constant-time membership test for a token set. Returns the matching stored
|
|
30
43
|
* token (so callers can look up its metadata) or undefined. Iterates and
|
|
@@ -41,7 +54,5 @@ export declare function authenticateBrowserRequest(req: http.IncomingMessage, ur
|
|
|
41
54
|
}>;
|
|
42
55
|
passwordHash?: string | undefined;
|
|
43
56
|
cookieSecret?: string | undefined;
|
|
44
|
-
}, sessions: Map<string,
|
|
45
|
-
createdAt: number;
|
|
46
|
-
}>): HqBrowserAuthResult;
|
|
57
|
+
}, sessions: Map<string, HqSessionEntry>): HqBrowserAuthResult;
|
|
47
58
|
//# sourceMappingURL=auth.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"auth.d.ts","sourceRoot":"","sources":["../../src/hq-server/auth.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAGH,OAAO,KAAK,KAAK,IAAI,MAAM,WAAW,CAAC;
|
|
1
|
+
{"version":3,"file":"auth.d.ts","sourceRoot":"","sources":["../../src/hq-server/auth.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAGH,OAAO,KAAK,KAAK,IAAI,MAAM,WAAW,CAAC;AAEvC,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,YAAY,CAAC;AAIjD,eAAO,MAAM,iBAAiB,eAAe,CAAC;AAC9C,eAAO,MAAM,qBAAqB,QAA0B,CAAC;AAI7D,MAAM,WAAW,oBAAoB;IACnC,IAAI,EAAE,OAAO,CAAC;IACd,KAAK,EAAE,MAAM,CAAC;IACd,EAAE,EAAE,MAAM,CAAC;IACX,YAAY,CAAC,EAAE,MAAM,EAAE,CAAC;CACzB;AAED;;;;;GAKG;AACH,MAAM,WAAW,mBAAmB;IAClC,IAAI,EAAE,QAAQ,CAAC;IACf,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,YAAY,CAAC,EAAE,MAAM,EAAE,CAAC;CACzB;AAED,MAAM,MAAM,mBAAmB,GAAG,oBAAoB,GAAG,mBAAmB,GAAG,SAAS,CAAC;AAIzF;;;GAGG;AACH,wBAAgB,oBAAoB,CAAC,GAAG,EAAE,IAAI,CAAC,cAAc,GAAG,IAAI,CAoBnE;AA+DD,wBAAgB,uBAAuB,CACrC,GAAG,EAAE,IAAI,CAAC,eAAe,EACzB,SAAS,CAAC,EAAE,MAAM,EAClB,SAAS,CAAC,EAAE,MAAM,EAClB,oBAAoB,GAAE,WAAW,CAAC,MAAM,CAAa,GACpD,OAAO,CAgCT;AAQD,wBAAgB,wBAAwB,CAAC,SAAS,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,GAAG,MAAM,CAElF;AAED,wBAAgB,oBAAoB,CAAC,KAAK,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,GAAG,MAAM,GAAG,SAAS,CAatF;AAED,wBAAgB,iBAAiB,CAAC,YAAY,EAAE,MAAM,GAAG,SAAS,GAAG,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAmB1F;AAED,wBAAgB,kBAAkB,CAChC,GAAG,EAAE,IAAI,CAAC,cAAc,EACxB,KAAK,EAAE,MAAM,EACb,MAAM,CAAC,EAAE,OAAO,GACf,IAAI,CAUN;AAED,wBAAgB,oBAAoB,CAAC,GAAG,EAAE,IAAI,CAAC,cAAc,EAAE,MAAM,CAAC,EAAE,OAAO,GAAG,IAAI,CAIrF;AAID,wBAAgB,WAAW,CAAC,IAAI,EAAE,mBAAmB,GAAG,IAAI,IAAI,oBAAoB,CAEnF;AAED,wBAAgB,YAAY,CAAC,IAAI,EAAE,mBAAmB,GAAG,IAAI,IAAI,mBAAmB,CAEnF;AAgCD;;;;;;GAMG;AACH,wBAAgB,oBAAoB,CAAC,MAAM,EAAE,GAAG,CAAC,MAAM,CAAC,EAAE,QAAQ,EAAE,MAAM,GAAG,MAAM,GAAG,SAAS,CAQ9F;AAED,wBAAgB,0BAA0B,CACxC,GAAG,EAAE,IAAI,CAAC,eAAe,EACzB,GAAG,EAAE,GAAG,EACR,WAAW,EAAE;IACX,aAAa,EAAE,GAAG,CAAC,MAAM,CAAC,CAAC;IAC3B,gBAAgB,EAAE,GAAG,CAAC,MAAM,EAAE;QAAE,EAAE,EAAE,MAAM,CAAC;QAAC,YAAY,CAAC,EAAE,MAAM,EAAE,CAAA;KAAE,CAAC,CAAC;IACvE,YAAY,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IAClC,YAAY,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;CACnC,EACD,QAAQ,EAAE,GAAG,CAAC,MAAM,EAAE,cAAc,CAAC,GACpC,mBAAmB,CAkDrB"}
|
|
@@ -1,22 +1,14 @@
|
|
|
1
1
|
import type * as http from 'node:http';
|
|
2
2
|
import { type HqAlertRuleConfig, type HqRedactionPolicy, type HqToken } from '@wrongstack/core/hq';
|
|
3
|
-
import type { HqRouterMutableAuth } from '../types.js';
|
|
4
|
-
export declare function handleApiAuthStatus(req: http.IncomingMessage, res: http.ServerResponse, url: URL, mutableAuth: HqRouterMutableAuth, sessions: Map<string,
|
|
5
|
-
|
|
6
|
-
}>, requireBrowserAuth: boolean | undefined, trustedPublicOrigins: Set<string>, secureCookies: boolean | undefined): Promise<void>;
|
|
7
|
-
export declare function handleApiLogin(req: http.IncomingMessage, res: http.ServerResponse, mutableAuth: HqRouterMutableAuth, sessions: Map<string, {
|
|
8
|
-
createdAt: number;
|
|
9
|
-
}>, loginAttempts: Map<string, {
|
|
3
|
+
import type { HqRouterMutableAuth, HqSessionEntry } from '../types.js';
|
|
4
|
+
export declare function handleApiAuthStatus(req: http.IncomingMessage, res: http.ServerResponse, url: URL, mutableAuth: HqRouterMutableAuth, sessions: Map<string, HqSessionEntry>, requireBrowserAuth: boolean | undefined, trustedPublicOrigins: Set<string>, secureCookies: boolean | undefined): Promise<void>;
|
|
5
|
+
export declare function handleApiLogin(req: http.IncomingMessage, res: http.ServerResponse, mutableAuth: HqRouterMutableAuth, sessions: Map<string, HqSessionEntry>, loginAttempts: Map<string, {
|
|
10
6
|
count: number;
|
|
11
7
|
blockedUntil: number;
|
|
12
8
|
lastAttempt: number;
|
|
13
9
|
}>, secureCookies: boolean | undefined): Promise<void>;
|
|
14
|
-
export declare function handleApiLogout(req: http.IncomingMessage, res: http.ServerResponse, mutableAuth: HqRouterMutableAuth, sessions: Map<string,
|
|
15
|
-
|
|
16
|
-
}>, secureCookies: boolean | undefined): Promise<void>;
|
|
17
|
-
export declare function handleApiPassword(req: http.IncomingMessage, res: http.ServerResponse, mutableAuth: HqRouterMutableAuth, sessions: Map<string, {
|
|
18
|
-
createdAt: number;
|
|
19
|
-
}>, dataDir: string, secureCookies: boolean | undefined, requireBrowserAuth: boolean | undefined): Promise<void>;
|
|
10
|
+
export declare function handleApiLogout(req: http.IncomingMessage, res: http.ServerResponse, mutableAuth: HqRouterMutableAuth, sessions: Map<string, HqSessionEntry>, secureCookies: boolean | undefined): Promise<void>;
|
|
11
|
+
export declare function handleApiPassword(req: http.IncomingMessage, res: http.ServerResponse, mutableAuth: HqRouterMutableAuth, sessions: Map<string, HqSessionEntry>, dataDir: string, secureCookies: boolean | undefined, requireBrowserAuth: boolean | undefined): Promise<void>;
|
|
20
12
|
export declare function applyAuthFile(mutableAuth: HqRouterMutableAuth, next: {
|
|
21
13
|
browserTokens?: Array<{
|
|
22
14
|
token: string;
|
|
@@ -29,4 +21,5 @@ export declare function applyAuthFile(mutableAuth: HqRouterMutableAuth, next: {
|
|
|
29
21
|
cookieSecret?: string;
|
|
30
22
|
alertRules?: HqAlertRuleConfig;
|
|
31
23
|
}): void;
|
|
24
|
+
export declare function handleApiBootstrap(req: http.IncomingMessage, res: http.ServerResponse, mutableAuth: HqRouterMutableAuth, sessions: Map<string, HqSessionEntry>, secureCookies: boolean | undefined, bootstrapStore: import('@wrongstack/core/hq').HqBootstrapCodeStore): Promise<void>;
|
|
32
25
|
//# sourceMappingURL=auth-handlers.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"auth-handlers.d.ts","sourceRoot":"","sources":["../../../src/hq-server/routes/auth-handlers.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,KAAK,IAAI,MAAM,WAAW,CAAC;AACvC,OAAO,EAOL,KAAK,iBAAiB,EACtB,KAAK,iBAAiB,EACtB,KAAK,OAAO,EACb,MAAM,qBAAqB,CAAC;
|
|
1
|
+
{"version":3,"file":"auth-handlers.d.ts","sourceRoot":"","sources":["../../../src/hq-server/routes/auth-handlers.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,KAAK,IAAI,MAAM,WAAW,CAAC;AACvC,OAAO,EAOL,KAAK,iBAAiB,EACtB,KAAK,iBAAiB,EACtB,KAAK,OAAO,EACb,MAAM,qBAAqB,CAAC;AAY7B,OAAO,KAAK,EAAE,mBAAmB,EAAE,cAAc,EAAE,MAAM,aAAa,CAAC;AAQvE,wBAAsB,mBAAmB,CACvC,GAAG,EAAE,IAAI,CAAC,eAAe,EACzB,GAAG,EAAE,IAAI,CAAC,cAAc,EACxB,GAAG,EAAE,GAAG,EACR,WAAW,EAAE,mBAAmB,EAChC,QAAQ,EAAE,GAAG,CAAC,MAAM,EAAE,cAAc,CAAC,EACrC,kBAAkB,EAAE,OAAO,GAAG,SAAS,EACvC,oBAAoB,EAAE,GAAG,CAAC,MAAM,CAAC,EACjC,aAAa,EAAE,OAAO,GAAG,SAAS,GACjC,OAAO,CAAC,IAAI,CAAC,CAyBf;AAED,wBAAsB,cAAc,CAClC,GAAG,EAAE,IAAI,CAAC,eAAe,EACzB,GAAG,EAAE,IAAI,CAAC,cAAc,EACxB,WAAW,EAAE,mBAAmB,EAChC,QAAQ,EAAE,GAAG,CAAC,MAAM,EAAE,cAAc,CAAC,EACrC,aAAa,EAAE,GAAG,CAAC,MAAM,EAAE;IAAE,KAAK,EAAE,MAAM,CAAC;IAAC,YAAY,EAAE,MAAM,CAAC;IAAC,WAAW,EAAE,MAAM,CAAA;CAAE,CAAC,EACxF,aAAa,EAAE,OAAO,GAAG,SAAS,GACjC,OAAO,CAAC,IAAI,CAAC,CA4Ef;AAED,wBAAsB,eAAe,CACnC,GAAG,EAAE,IAAI,CAAC,eAAe,EACzB,GAAG,EAAE,IAAI,CAAC,cAAc,EACxB,WAAW,EAAE,mBAAmB,EAChC,QAAQ,EAAE,GAAG,CAAC,MAAM,EAAE,cAAc,CAAC,EACrC,aAAa,EAAE,OAAO,GAAG,SAAS,GACjC,OAAO,CAAC,IAAI,CAAC,CAkBf;AAED,wBAAsB,iBAAiB,CACrC,GAAG,EAAE,IAAI,CAAC,eAAe,EACzB,GAAG,EAAE,IAAI,CAAC,cAAc,EACxB,WAAW,EAAE,mBAAmB,EAChC,QAAQ,EAAE,GAAG,CAAC,MAAM,EAAE,cAAc,CAAC,EACrC,OAAO,EAAE,MAAM,EACf,aAAa,EAAE,OAAO,GAAG,SAAS,EAClC,kBAAkB,EAAE,OAAO,GAAG,SAAS,GACtC,OAAO,CAAC,IAAI,CAAC,CA6Hf;AAED,wBAAgB,aAAa,CAC3B,WAAW,EAAE,mBAAmB,EAChC,IAAI,EAAE;IACJ,aAAa,CAAC,EAAE,KAAK,CAAC;QAAE,KAAK,EAAE,MAAM,CAAC;QAAC,EAAE,EAAE,MAAM,CAAC;QAAC,YAAY,CAAC,EAAE,MAAM,EAAE,CAAA;KAAE,CAAC,CAAC;IAC9E,YAAY,CAAC,EAAE,KAAK,CAAC,OAAO,CAAC,CAAC;IAC9B,eAAe,CAAC,EAAE,OAAO,CAAC,iBAAiB,CAAC,CAAC;IAC7C,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,UAAU,CAAC,EAAE,iBAAiB,CAAC;CAChC,GACA,IAAI,CAoBN;AAID,wBAAsB,kBAAkB,CACtC,GAAG,EAAE,IAAI,CAAC,eAAe,EACzB,GAAG,EAAE,IAAI,CAAC,cAAc,EACxB,WAAW,EAAE,mBAAmB,EAChC,QAAQ,EAAE,GAAG,CAAC,MAAM,EAAE,cAAc,CAAC,EACrC,aAAa,EAAE,OAAO,GAAG,SAAS,EAClC,cAAc,EAAE,OAAO,qBAAqB,EAAE,oBAAoB,GACjE,OAAO,CAAC,IAAI,CAAC,CA2Ef"}
|
|
@@ -20,6 +20,7 @@ export declare const setHqSecurityHeaders: typeof HqServerAuth.setHqSecurityHead
|
|
|
20
20
|
export declare const hasTrustedBrowserOrigin: typeof HqServerAuth.hasTrustedBrowserOrigin;
|
|
21
21
|
export declare const authenticateBrowserRequest: typeof HqServerAuth.authenticateBrowserRequest;
|
|
22
22
|
export declare const isTokenAuth: typeof HqServerAuth.isTokenAuth;
|
|
23
|
+
export declare const isCookieAuth: typeof HqServerAuth.isCookieAuth;
|
|
23
24
|
export declare const setHqSessionCookie: typeof HqServerAuth.setHqSessionCookie;
|
|
24
25
|
export declare const clearHqSessionCookie: typeof HqServerAuth.clearHqSessionCookie;
|
|
25
26
|
export declare const serializeHqSessionCookie: typeof HqServerAuth.serializeHqSessionCookie;
|
|
@@ -31,13 +32,14 @@ export declare const readRequestBody: typeof HqServerUtils.readRequestBody;
|
|
|
31
32
|
export declare const writeInvalidBody: typeof HqServerUtils.writeInvalidBody;
|
|
32
33
|
export declare const sanitizeApiError: typeof HqServerUtils.sanitizeApiError;
|
|
33
34
|
export declare const buildHttpUrl: typeof HqServerUtils.buildHttpUrl;
|
|
35
|
+
export declare const buildBootstrapHttpUrl: typeof HqServerUtils.buildBootstrapHttpUrl;
|
|
34
36
|
export declare const buildClientWsUrl: typeof HqServerUtils.buildClientWsUrl;
|
|
35
37
|
export declare const agentRingKey: typeof HqServerUtils.agentRingKey;
|
|
36
38
|
export declare const agentMessageToEntry: typeof HqServerUtils.agentMessageToEntry;
|
|
37
39
|
export declare const readLocalSubagentTranscript: typeof HqServerUtils.readLocalSubagentTranscript;
|
|
38
40
|
export declare const lanIPv4Addresses: typeof HqServerUtils.lanIPv4Addresses;
|
|
39
41
|
export declare const hqRuntimeMarkerPath: typeof HqServerUtils.hqRuntimeMarkerPath;
|
|
40
|
-
import type { ConnectedClient, HqRouterMutableAuth, HqSnapshotBroadcaster, ProjectDetail, TranscriptRing } from './types.js';
|
|
42
|
+
import type { ConnectedClient, HqRouterMutableAuth, HqSessionEntry, HqSnapshotBroadcaster, ProjectDetail, TranscriptRing } from './types.js';
|
|
41
43
|
export type { ConnectedClient, HqSnapshotBroadcaster, ProjectDetail, TranscriptRing, };
|
|
42
44
|
export interface HqRouterMailboxGateway {
|
|
43
45
|
mailbox: Mailbox;
|
|
@@ -49,9 +51,7 @@ export interface HqRouterDeps {
|
|
|
49
51
|
listeningPort: number;
|
|
50
52
|
trustedPublicOrigins: Set<string>;
|
|
51
53
|
mutableAuth: HqRouterMutableAuth;
|
|
52
|
-
sessions: Map<string,
|
|
53
|
-
createdAt: number;
|
|
54
|
-
}>;
|
|
54
|
+
sessions: Map<string, HqSessionEntry>;
|
|
55
55
|
loginAttempts: Map<string, {
|
|
56
56
|
count: number;
|
|
57
57
|
blockedUntil: number;
|
|
@@ -75,6 +75,8 @@ export interface HqRouterDeps {
|
|
|
75
75
|
getMailboxGateway: (projectDir: string) => HqRouterMailboxGateway;
|
|
76
76
|
/** Aggregate token-expiry stats for snapshot totals + alert engine. */
|
|
77
77
|
getTokenStats?: (() => HqSnapshot['totals']['tokenStats'] | undefined) | undefined;
|
|
78
|
+
/** One-time bootstrap code store for token-to-cookie exchange. */
|
|
79
|
+
bootstrapStore?: import('@wrongstack/core/hq').HqBootstrapCodeStore | undefined;
|
|
78
80
|
}
|
|
79
81
|
/**
|
|
80
82
|
* Create the HTTP request listener that handles all `/api/*` routes as well
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"routes.d.ts","sourceRoot":"","sources":["../../src/hq-server/routes.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAIH,OAAO,KAAK,KAAK,IAAI,MAAM,WAAW,CAAC;AACvC,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,IAAI,CAAC;AACpC,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,2BAA2B,CAAC;AAC/D,OAAO,EAAE,KAAK,mBAAmB,EAAyC,MAAM,qBAAqB,CAAC;AACtG,OAAO,KAAK,EAAE,UAAU,EAAE,aAAa,EAAkC,iBAAiB,EAAE,eAAe,EAAuC,iBAAiB,EAAE,MAAM,qBAAqB,CAAC;AACjM,OAAO,KAAK,EAAE,uBAAuB,EAAE,MAAM,+BAA+B,CAAC;AAC7E,OAAO,EACL,KAAK,OAAO,EACZ,KAAK,yBAAyB,EAC9B,KAAK,sBAAsB,EAE5B,MAAM,+BAA+B,CAAC;AAGvC,OAAO,KAAK,YAAY,MAAM,WAAW,CAAC;AAE1C,OAAO,KAAK,aAAa,MAAM,YAAY,CAAC;
|
|
1
|
+
{"version":3,"file":"routes.d.ts","sourceRoot":"","sources":["../../src/hq-server/routes.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAIH,OAAO,KAAK,KAAK,IAAI,MAAM,WAAW,CAAC;AACvC,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,IAAI,CAAC;AACpC,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,2BAA2B,CAAC;AAC/D,OAAO,EAAE,KAAK,mBAAmB,EAAyC,MAAM,qBAAqB,CAAC;AACtG,OAAO,KAAK,EAAE,UAAU,EAAE,aAAa,EAAkC,iBAAiB,EAAE,eAAe,EAAuC,iBAAiB,EAAE,MAAM,qBAAqB,CAAC;AACjM,OAAO,KAAK,EAAE,uBAAuB,EAAE,MAAM,+BAA+B,CAAC;AAC7E,OAAO,EACL,KAAK,OAAO,EACZ,KAAK,yBAAyB,EAC9B,KAAK,sBAAsB,EAE5B,MAAM,+BAA+B,CAAC;AAGvC,OAAO,KAAK,YAAY,MAAM,WAAW,CAAC;AAE1C,OAAO,KAAK,aAAa,MAAM,YAAY,CAAC;AAyB5C,eAAO,MAAM,oBAAoB,0CAAoC,CAAC;AACtE,eAAO,MAAM,uBAAuB,6CAAuC,CAAC;AAC5E,eAAO,MAAM,0BAA0B,gDAA0C,CAAC;AAClF,eAAO,MAAM,WAAW,iCAA2B,CAAC;AACpD,eAAO,MAAM,YAAY,kCAA4B,CAAC;AACtD,eAAO,MAAM,kBAAkB,wCAAkC,CAAC;AAClE,eAAO,MAAM,oBAAoB,0CAAoC,CAAC;AACtE,eAAO,MAAM,wBAAwB,8CAAwC,CAAC;AAC9E,eAAO,MAAM,oBAAoB,0CAAoC,CAAC;AACtE,eAAO,MAAM,iBAAiB,uCAAiC,CAAC;AAChE,eAAO,MAAM,iBAAiB,eAAiC,CAAC;AAEhE,eAAO,MAAM,iBAAiB,wCAAkC,CAAC;AACjE,eAAO,MAAM,eAAe,sCAAgC,CAAC;AAC7D,eAAO,MAAM,gBAAgB,uCAAiC,CAAC;AAC/D,eAAO,MAAM,gBAAgB,uCAAiC,CAAC;AAC/D,eAAO,MAAM,YAAY,mCAA6B,CAAC;AACvD,eAAO,MAAM,qBAAqB,4CAAsC,CAAC;AACzE,eAAO,MAAM,gBAAgB,uCAAiC,CAAC;AAC/D,eAAO,MAAM,YAAY,mCAA6B,CAAC;AACvD,eAAO,MAAM,mBAAmB,0CAAoC,CAAC;AACrE,eAAO,MAAM,2BAA2B,kDAA4C,CAAC;AACrF,eAAO,MAAM,gBAAgB,uCAAiC,CAAC;AAC/D,eAAO,MAAM,mBAAmB,0CAAoC,CAAC;AAIrE,OAAO,KAAK,EACV,eAAe,EACf,mBAAmB,EACnB,cAAc,EACd,qBAAqB,EACrB,aAAa,EACb,cAAc,EACf,MAAM,YAAY,CAAC;AAEpB,YAAY,EACV,eAAe,EACf,qBAAqB,EACrB,aAAa,EACb,cAAc,GACf,CAAC;AAIF,MAAM,WAAW,sBAAsB;IACrC,OAAO,EAAE,OAAO,CAAC;IACjB,MAAM,EAAE,UAAU,CAAC,OAAO,uBAAuB,CAAC,CAAC;CACpD;AAED,MAAM,WAAW,YAAY;IAC3B,aAAa,EAAE,aAAa,CAAC;IAC7B,IAAI,EAAE,MAAM,CAAC;IACb,aAAa,EAAE,MAAM,CAAC;IACtB,oBAAoB,EAAE,GAAG,CAAC,MAAM,CAAC,CAAC;IAClC,WAAW,EAAE,mBAAmB,CAAC;IACjC,QAAQ,EAAE,GAAG,CAAC,MAAM,EAAE,cAAc,CAAC,CAAC;IACtC,aAAa,EAAE,GAAG,CAAC,MAAM,EAAE;QAAE,KAAK,EAAE,MAAM,CAAC;QAAC,YAAY,EAAE,MAAM,CAAC;QAAC,WAAW,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;IACzF,OAAO,EAAE,GAAG,CAAC,SAAS,EAAE,eAAe,CAAC,CAAC;IACzC,QAAQ,EAAE,GAAG,CAAC,SAAS,CAAC,CAAC;IACzB,QAAQ,EAAE,eAAe,EAAE,CAAC;IAC5B,WAAW,EAAE,GAAG,CAAC,MAAM,EAAE,cAAc,CAAC,CAAC;IACzC,aAAa,EAAE,GAAG,CAAC,MAAM,EAAE,iBAAiB,EAAE,CAAC,CAAC;IAChD,eAAe,EAAE,GAAG,CAAC,MAAM,EAAE,sBAAsB,CAAC,CAAC;IACrD,yBAAyB,EAAE,sBAAsB,CAAC;IAClD,WAAW,EAAE,aAAa,CAAC;IAC3B,QAAQ,EAAE,iBAAiB,CAAC;IAC5B,WAAW,EAAE,UAAU,CAAC,OAAO,mBAAmB,CAAC,CAAC;IACpD,OAAO,EAAE,MAAM,CAAC;IAChB,YAAY,EAAE,MAAM,CAAC;IACrB,kBAAkB,EAAE,OAAO,GAAG,SAAS,CAAC;IACxC,aAAa,EAAE,OAAO,GAAG,SAAS,CAAC;IACnC,uBAAuB,EAAE,CACvB,GAAG,EAAE,IAAI,CAAC,eAAe,EACzB,UAAU,EAAE,MAAM,KACf,yBAAyB,CAAC;IAC/B,iBAAiB,EAAE,CAAC,UAAU,EAAE,MAAM,KAAK,sBAAsB,CAAC;IAClE,uEAAuE;IACvE,aAAa,CAAC,EAAE,CAAC,MAAM,UAAU,CAAC,QAAQ,CAAC,CAAC,YAAY,CAAC,GAAG,SAAS,CAAC,GAAG,SAAS,CAAC;IACnF,kEAAkE;IAClE,cAAc,CAAC,EAAE,OAAO,qBAAqB,EAAE,oBAAoB,GAAG,SAAS,CAAC;CACjF;AAID;;;;;;GAMG;AACH,wBAAgB,cAAc,CAAC,IAAI,EAAE,YAAY,GAAG,CAAC,GAAG,EAAE,IAAI,CAAC,eAAe,EAAE,GAAG,EAAE,IAAI,CAAC,cAAc,KAAK,OAAO,CAAC,IAAI,CAAC,CAgRzH"}
|
|
@@ -15,6 +15,50 @@ export declare const HQ_SNAPSHOT_BROADCAST_DEBOUNCE_MS = 100;
|
|
|
15
15
|
* the dashboard — from doing a full rebuild + atomic disk write at up to 10 Hz.
|
|
16
16
|
*/
|
|
17
17
|
export declare const HQ_SNAPSHOT_PERSIST_MIN_INTERVAL_MS = 3000;
|
|
18
|
+
/** Unsent bytes retained for one dashboard socket before it is disconnected. */
|
|
19
|
+
export declare const HQ_BROWSER_MAX_BUFFERED_BYTES: number;
|
|
20
|
+
/**
|
|
21
|
+
* Send an already-serialized frame to a WebSocket peer, enforcing
|
|
22
|
+
* per-client backpressure.
|
|
23
|
+
*
|
|
24
|
+
* A `readyState === OPEN` check alone says the socket is connected, not that
|
|
25
|
+
* anyone is reading it. `ws` buffers whatever it cannot flush, so a tab that
|
|
26
|
+
* stalled — backgrounded, throttled, paused in devtools — makes this process
|
|
27
|
+
* retain every subsequent broadcast for it. These are full fleet snapshots,
|
|
28
|
+
* historically as large as 9 MB each, which is the difference between a
|
|
29
|
+
* bounded cost and an unbounded one.
|
|
30
|
+
*
|
|
31
|
+
* Mirrors `sendSerialized` in `@wrongstack/webui-server`, deliberately
|
|
32
|
+
* duplicated rather than imported: HQ's snapshot path is in the CLI's
|
|
33
|
+
* always-loaded graph, and a static import would drag that whole package into
|
|
34
|
+
* boot, which the CLI keeps behind a lazy import on purpose.
|
|
35
|
+
*/
|
|
36
|
+
export declare function sendGuarded(ws: WebSocket, data: string): boolean;
|
|
37
|
+
/**
|
|
38
|
+
* How long a session/fleet snapshot may go unrefreshed before it is treated
|
|
39
|
+
* as gone.
|
|
40
|
+
*
|
|
41
|
+
* `session.ended` is the only thing that used to remove these entries, so any
|
|
42
|
+
* session that died without sending one — crash, SIGKILL, dropped network,
|
|
43
|
+
* closed laptop — stayed in its client's map for as long as the socket lived.
|
|
44
|
+
* That is both retained memory and, worse, permanent weight in every
|
|
45
|
+
* `buildSnapshot()` broadcast to every browser.
|
|
46
|
+
*
|
|
47
|
+
* A live session republishes unconditionally every 2.5s (`session-bridge.ts`
|
|
48
|
+
* forces the snapshot on a timer, bypassing its own dedupe hash), so
|
|
49
|
+
* `receivedAt` is a true liveness signal rather than a change signal. Five
|
|
50
|
+
* minutes is 120 consecutive missed publishes — far past any GC pause,
|
|
51
|
+
* scheduler stall, or transient hiccup, so this never evicts a live session.
|
|
52
|
+
*/
|
|
53
|
+
export declare const HQ_STALE_SNAPSHOT_MS: number;
|
|
54
|
+
/**
|
|
55
|
+
* Drop session/fleet/MCP entries whose publisher has stopped refreshing them.
|
|
56
|
+
*
|
|
57
|
+
* Runs from `buildSnapshot` because that is exactly the moment stale entries
|
|
58
|
+
* would otherwise be serialized into a broadcast — no separate timer to own,
|
|
59
|
+
* and no window where a reaped entry is still visible to a reader.
|
|
60
|
+
*/
|
|
61
|
+
export declare function reapStaleClientState(clients: Map<WebSocket, ConnectedClient>, nowMs?: number): void;
|
|
18
62
|
export declare function buildSnapshot(clients: Map<WebSocket, ConnectedClient>, options?: {
|
|
19
63
|
tokenStats?: HqSnapshot['totals']['tokenStats'];
|
|
20
64
|
}): HqSnapshot;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"snapshot.d.ts","sourceRoot":"","sources":["../../src/hq-server/snapshot.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,KAAK,
|
|
1
|
+
{"version":3,"file":"snapshot.d.ts","sourceRoot":"","sources":["../../src/hq-server/snapshot.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,KAAK,EAIV,mBAAmB,EACnB,eAAe,EAOf,aAAa,EAIb,UAAU,EACX,MAAM,qBAAqB,CAAC;AAC7B,OAAO,EAAE,SAAS,EAAE,MAAM,IAAI,CAAC;AAC/B,OAAO,KAAK,EAAE,eAAe,EAAE,qBAAqB,EAAE,aAAa,EAAE,MAAM,YAAY,CAAC;AAKxF,eAAO,MAAM,iCAAiC,MAAM,CAAC;AACrD;;;;;;GAMG;AACH,eAAO,MAAM,mCAAmC,OAAQ,CAAC;AAEzD,gFAAgF;AAChF,eAAO,MAAM,6BAA6B,QAAmB,CAAC;AAE9D;;;;;;;;;;;;;;;GAeG;AACH,wBAAgB,WAAW,CAAC,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,MAAM,GAAG,OAAO,CAqBhE;AAED;;;;;;;;;;;;;;;GAeG;AACH,eAAO,MAAM,oBAAoB,QAAa,CAAC;AAE/C;;;;;;GAMG;AACH,wBAAgB,oBAAoB,CAClC,OAAO,EAAE,GAAG,CAAC,SAAS,EAAE,eAAe,CAAC,EACxC,KAAK,GAAE,MAAmB,GACzB,IAAI,CAgBN;AAID,wBAAgB,aAAa,CAC3B,OAAO,EAAE,GAAG,CAAC,SAAS,EAAE,eAAe,CAAC,EACxC,OAAO,CAAC,EAAE;IAAE,UAAU,CAAC,EAAE,UAAU,CAAC,QAAQ,CAAC,CAAC,YAAY,CAAC,CAAA;CAAE,GAC5D,UAAU,CA0SZ;AAID,wBAAgB,yBAAyB,CACvC,OAAO,EAAE,GAAG,CAAC,SAAS,EAAE,eAAe,CAAC,EACxC,QAAQ,EAAE,GAAG,CAAC,SAAS,CAAC,EACxB,WAAW,CAAC,EAAE,aAAa,GAC1B,qBAAqB,CAgEvB;AAID,wBAAgB,kBAAkB,CAChC,OAAO,EAAE,GAAG,CAAC,SAAS,EAAE,eAAe,CAAC,EACxC,SAAS,EAAE,MAAM,GAChB,aAAa,GAAG,IAAI,CAqDtB;AAID,wBAAgB,cAAc,CAAC,KAAK,EAAE,eAAe,EAAE,QAAQ,EAAE,GAAG,CAAC,SAAS,CAAC,GAAG,IAAI,CAIrF;AAED,8EAA8E;AAC9E,wBAAgB,sBAAsB,CACpC,OAAO,EAAE,mBAAmB,EAC5B,QAAQ,EAAE,GAAG,CAAC,SAAS,CAAC,GACvB,IAAI,CAGN"}
|
|
@@ -3,10 +3,9 @@
|
|
|
3
3
|
*
|
|
4
4
|
* @module hq-server/types
|
|
5
5
|
*/
|
|
6
|
+
import type { HqAlertRuleConfig, HqBrowserMessage, HqClientCapability, HqClientRecord, HqEventEnvelope, HqFleetSnapshotPayload, HqMailboxSnapshotPayload, HqMcpServerHealth, HqPersistence, HqProjectIdentity, HqProjectRecord, HqQueuedCommand, HqRedactionPolicy, HqSessionSnapshotPayload, HqToken, HqTranscriptEntry } from '@wrongstack/core/hq';
|
|
6
7
|
import type { WebSocket } from 'ws';
|
|
7
|
-
|
|
8
|
-
import type { HqBrowserMessage } from '@wrongstack/core/hq';
|
|
9
|
-
export type { HqClientCapability, HqClientRecord, HqEventEnvelope, HqFleetSnapshotPayload, HqMailboxSnapshotPayload, HqMcpServerHealth, HqPersistence, HqProjectIdentity, HqProjectRecord, HqQueuedCommand, HqRedactionPolicy, HqSessionSnapshotPayload, HqToken, HqTranscriptEntry, HqBrowserMessage, };
|
|
8
|
+
export type { HqBrowserMessage, HqClientCapability, HqClientRecord, HqEventEnvelope, HqFleetSnapshotPayload, HqMailboxSnapshotPayload, HqMcpServerHealth, HqPersistence, HqProjectIdentity, HqProjectRecord, HqQueuedCommand, HqRedactionPolicy, HqSessionSnapshotPayload, HqToken, HqTranscriptEntry, };
|
|
10
9
|
export interface TrackedSessionSnapshot {
|
|
11
10
|
payload: HqSessionSnapshotPayload;
|
|
12
11
|
/** Epoch ms of the last `session.snapshot` refresh — freshness authority for the cleanup timer. */
|
|
@@ -45,7 +44,10 @@ export interface ConnectedClient {
|
|
|
45
44
|
/** Per-client coordinator fleet snapshots, keyed by runId and owned by a session when known. */
|
|
46
45
|
fleets: Map<string, TrackedFleetSnapshot>;
|
|
47
46
|
/** Per-session MCP health snapshots, keyed by sessionId. */
|
|
48
|
-
mcpSnapshots: Map<string,
|
|
47
|
+
mcpSnapshots: Map<string, {
|
|
48
|
+
servers: HqMcpServerHealth[];
|
|
49
|
+
receivedAt: number;
|
|
50
|
+
}>;
|
|
49
51
|
/** Pending outbound commands (Phase 3 — control plane). */
|
|
50
52
|
commandQueue: HqQueuedCommand[];
|
|
51
53
|
}
|
|
@@ -63,6 +65,22 @@ export interface HqRouterMutableAuth {
|
|
|
63
65
|
cookieSecret?: string | undefined;
|
|
64
66
|
alertRules: HqAlertRuleConfig | undefined;
|
|
65
67
|
}
|
|
68
|
+
/**
|
|
69
|
+
* Session record stored in the server-side `sessions` Map.
|
|
70
|
+
*
|
|
71
|
+
* - `kind: 'password'` — created by `/api/login`; full browser access.
|
|
72
|
+
* - `kind: 'token'` — created by `/api/auth/bootstrap`; scoped to the
|
|
73
|
+
* originating browser token's ID and capabilities so revocation/expiry
|
|
74
|
+
* of that token invalidates the session too.
|
|
75
|
+
*/
|
|
76
|
+
export interface HqSessionEntry {
|
|
77
|
+
readonly createdAt: number;
|
|
78
|
+
readonly kind: 'password' | 'token';
|
|
79
|
+
/** For token sessions: the browser-token ID this session was minted from. */
|
|
80
|
+
readonly tokenId?: string | undefined;
|
|
81
|
+
/** For token sessions: capabilities inherited from the source token. */
|
|
82
|
+
readonly capabilities?: string[] | undefined;
|
|
83
|
+
}
|
|
66
84
|
export interface TranscriptRing {
|
|
67
85
|
entries: HqTranscriptEntry[];
|
|
68
86
|
machineId?: string;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/hq-server/types.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,KAAK,
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/hq-server/types.ts"],"names":[],"mappings":"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"}
|
|
@@ -43,6 +43,14 @@ export declare function displayHost(host: string): string;
|
|
|
43
43
|
export declare function readRequestBody(req: http.IncomingMessage, maxBytes?: number): Promise<string>;
|
|
44
44
|
export declare function writeInvalidBody(res: http.ServerResponse, error: unknown): void;
|
|
45
45
|
export declare function buildHttpUrl(host: string, port: number, token?: string): string;
|
|
46
|
+
/**
|
|
47
|
+
* Build the browser startup URL with a one-time bootstrap code in the
|
|
48
|
+
* fragment (`#bootstrap=…`). Fragments never reach HTTP access logs,
|
|
49
|
+
* Referer headers, or proxy caches — unlike query-string tokens. The
|
|
50
|
+
* SPA extracts the fragment, POSTs it to `/api/auth/bootstrap`, and
|
|
51
|
+
* receives only an HttpOnly session cookie.
|
|
52
|
+
*/
|
|
53
|
+
export declare function buildBootstrapHttpUrl(host: string, port: number, bootstrapCode: string): string;
|
|
46
54
|
export declare function buildClientWsUrl(host: string, port: number, token?: string): string;
|
|
47
55
|
export declare function hqRuntimeMarkerPath(dataDir: string): string;
|
|
48
56
|
/** Non-internal IPv4 addresses, so we can print URLs reachable from other machines. */
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"utils.d.ts","sourceRoot":"","sources":["../../src/hq-server/utils.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAGH,OAAO,KAAK,KAAK,IAAI,MAAM,WAAW,CAAC;AAGvC,OAAO,KAAK,EAAE,eAAe,EAAE,aAAa,EAAE,iBAAiB,EAAE,MAAM,qBAAqB,CAAC;AAK7F,eAAO,MAAM,mBAAmB,OAAO,CAAC;AACxC,eAAO,MAAM,uBAAuB,MAAM,CAAC;AAC3C,eAAO,MAAM,eAAe,MAAM,CAAC;AAInC;;;GAGG;AACH,wBAAgB,WAAW,CAAC,GAAG,EAAE,GAAG,CAAC,MAAM,EAAE,OAAO,CAAC,EAAE,GAAG,EAAE,MAAM,GAAG,IAAI,CAMxE;AAID;;;;GAIG;AACH,wBAAgB,YAAY,CAAC,SAAS,EAAE,MAAM,GAAG,SAAS,EAAE,KAAK,EAAE,MAAM,GAAG,MAAM,CAEjF;AAED;;;;;GAKG;AACH,wBAAgB,mBAAmB,CAAC,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,iBAAiB,CAmBjF;AAED;;;;;;;GAOG;AACH,wBAAsB,2BAA2B,CAC/C,SAAS,EAAE,MAAM,EACjB,UAAU,EAAE,MAAM,GACjB,OAAO,CAAC,iBAAiB,EAAE,GAAG,IAAI,CAAC,CA2BrC;AAID,2DAA2D;AAC3D,wBAAgB,iBAAiB,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI,CAM9D;AAED,qFAAqF;AACrF,wBAAgB,WAAW,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAEhD;AAMD,gFAAgF;AAChF,wBAAgB,eAAe,CAAC,GAAG,EAAE,IAAI,CAAC,eAAe,EAAE,QAAQ,SAAY,GAAG,OAAO,CAAC,MAAM,CAAC,CAuBhG;AAED,wBAAgB,gBAAgB,CAAC,GAAG,EAAE,IAAI,CAAC,cAAc,EAAE,KAAK,EAAE,OAAO,GAAG,IAAI,CAI/E;AAID,wBAAgB,YAAY,CAAC,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,KAAK,CAAC,EAAE,MAAM,GAAG,MAAM,CAI/E;AAED,wBAAgB,gBAAgB,CAAC,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,KAAK,CAAC,EAAE,MAAM,GAAG,MAAM,CAInF;AAID,wBAAgB,mBAAmB,CAAC,OAAO,EAAE,MAAM,GAAG,MAAM,CAE3D;AAID,uFAAuF;AACvF,wBAAgB,gBAAgB,IAAI,MAAM,EAAE,CAa3C;AAID,wBAAgB,iBAAiB,CAAC,KAAK,EAAE,OAAO,EAAE,SAAS,EAAE,MAAM,GAAG,MAAM,GAAG,SAAS,CAIvF;AAID;;;;GAIG;AACH,wBAAgB,YAAY,CAAC,QAAQ,EAAE,MAAM,GAAG,SAAS,EAAE,SAAS,EAAE,MAAM,GAAG,SAAS,GAAG,MAAM,CAGhG;AAID;;;;GAIG;AACH,wBAAgB,sBAAsB,CAAC,WAAW,EAAE,aAAa,EAAE,KAAK,EAAE,eAAe,GAAG,IAAI,CA+B/F;AAID;;;;;GAKG;AACH,wBAAgB,gBAAgB,CAAC,GAAG,EAAE,OAAO,GAAG,MAAM,CAerD"}
|
|
1
|
+
{"version":3,"file":"utils.d.ts","sourceRoot":"","sources":["../../src/hq-server/utils.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAGH,OAAO,KAAK,KAAK,IAAI,MAAM,WAAW,CAAC;AAGvC,OAAO,KAAK,EAAE,eAAe,EAAE,aAAa,EAAE,iBAAiB,EAAE,MAAM,qBAAqB,CAAC;AAK7F,eAAO,MAAM,mBAAmB,OAAO,CAAC;AACxC,eAAO,MAAM,uBAAuB,MAAM,CAAC;AAC3C,eAAO,MAAM,eAAe,MAAM,CAAC;AAInC;;;GAGG;AACH,wBAAgB,WAAW,CAAC,GAAG,EAAE,GAAG,CAAC,MAAM,EAAE,OAAO,CAAC,EAAE,GAAG,EAAE,MAAM,GAAG,IAAI,CAMxE;AAID;;;;GAIG;AACH,wBAAgB,YAAY,CAAC,SAAS,EAAE,MAAM,GAAG,SAAS,EAAE,KAAK,EAAE,MAAM,GAAG,MAAM,CAEjF;AAED;;;;;GAKG;AACH,wBAAgB,mBAAmB,CAAC,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,iBAAiB,CAmBjF;AAED;;;;;;;GAOG;AACH,wBAAsB,2BAA2B,CAC/C,SAAS,EAAE,MAAM,EACjB,UAAU,EAAE,MAAM,GACjB,OAAO,CAAC,iBAAiB,EAAE,GAAG,IAAI,CAAC,CA2BrC;AAID,2DAA2D;AAC3D,wBAAgB,iBAAiB,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI,CAM9D;AAED,qFAAqF;AACrF,wBAAgB,WAAW,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAEhD;AAMD,gFAAgF;AAChF,wBAAgB,eAAe,CAAC,GAAG,EAAE,IAAI,CAAC,eAAe,EAAE,QAAQ,SAAY,GAAG,OAAO,CAAC,MAAM,CAAC,CAuBhG;AAED,wBAAgB,gBAAgB,CAAC,GAAG,EAAE,IAAI,CAAC,cAAc,EAAE,KAAK,EAAE,OAAO,GAAG,IAAI,CAI/E;AAID,wBAAgB,YAAY,CAAC,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,KAAK,CAAC,EAAE,MAAM,GAAG,MAAM,CAI/E;AAED;;;;;;GAMG;AACH,wBAAgB,qBAAqB,CAAC,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,aAAa,EAAE,MAAM,GAAG,MAAM,CAI/F;AAED,wBAAgB,gBAAgB,CAAC,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,KAAK,CAAC,EAAE,MAAM,GAAG,MAAM,CAInF;AAID,wBAAgB,mBAAmB,CAAC,OAAO,EAAE,MAAM,GAAG,MAAM,CAE3D;AAID,uFAAuF;AACvF,wBAAgB,gBAAgB,IAAI,MAAM,EAAE,CAa3C;AAID,wBAAgB,iBAAiB,CAAC,KAAK,EAAE,OAAO,EAAE,SAAS,EAAE,MAAM,GAAG,MAAM,GAAG,SAAS,CAIvF;AAID;;;;GAIG;AACH,wBAAgB,YAAY,CAAC,QAAQ,EAAE,MAAM,GAAG,SAAS,EAAE,SAAS,EAAE,MAAM,GAAG,SAAS,GAAG,MAAM,CAGhG;AAID;;;;GAIG;AACH,wBAAgB,sBAAsB,CAAC,WAAW,EAAE,aAAa,EAAE,KAAK,EAAE,eAAe,GAAG,IAAI,CA+B/F;AAID;;;;;GAKG;AACH,wBAAgB,gBAAgB,CAAC,GAAG,EAAE,OAAO,GAAG,MAAM,CAerD"}
|
package/dist/hq-server/ws.d.ts
CHANGED
|
@@ -3,8 +3,8 @@
|
|
|
3
3
|
*
|
|
4
4
|
* @module hq-server/ws
|
|
5
5
|
*/
|
|
6
|
-
import { WebSocket } from 'ws';
|
|
7
6
|
import type { HqCommandAuditLog, HqEventEnvelope, HqPersistence, HqRedactionPolicy, HqToken, HqTranscriptEntry } from '@wrongstack/core/hq';
|
|
7
|
+
import { WebSocket } from 'ws';
|
|
8
8
|
import type { ConnectedClient, HqSnapshotBroadcaster, TranscriptRing } from './types.js';
|
|
9
9
|
export declare function handleBrowser(ws: WebSocket, snapshotBroadcaster: HqSnapshotBroadcaster, browsers: Set<WebSocket>): void;
|
|
10
10
|
export declare function handleClient(ws: WebSocket, clients: Map<WebSocket, ConnectedClient>, browsers: Set<WebSocket>, eventLog: HqEventEnvelope[], auth: {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ws.d.ts","sourceRoot":"","sources":["../../src/hq-server/ws.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAGH,OAAO,
|
|
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,EAMf,aAAa,EAEb,iBAAiB,EAGjB,OAAO,EAEP,iBAAiB,EAElB,MAAM,qBAAqB,CAAC;AAW7B,OAAO,EAAE,SAAS,EAAE,MAAM,IAAI,CAAC;AAE/B,OAAO,KAAK,EAAE,eAAe,EAAE,qBAAqB,EAAE,cAAc,EAAE,MAAM,YAAY,CAAC;AAkBzF,wBAAgB,aAAa,CAC3B,EAAE,EAAE,SAAS,EACb,mBAAmB,EAAE,qBAAqB,EAC1C,QAAQ,EAAE,GAAG,CAAC,SAAS,CAAC,GACvB,IAAI,CAsBN;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,CA0dN"}
|
|
@@ -15,7 +15,7 @@ import {
|
|
|
15
15
|
readLocalSubagentTranscript,
|
|
16
16
|
sanitizeApiError,
|
|
17
17
|
startHqServer
|
|
18
|
-
} from "./chunk-
|
|
18
|
+
} from "./chunk-OI7GWJDS.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-6AQ3BXZA.js.map
|
package/dist/hq-server.d.ts
CHANGED
|
@@ -9,10 +9,10 @@
|
|
|
9
9
|
*/
|
|
10
10
|
import { type TrustBoundary } from '@wrongstack/core/security';
|
|
11
11
|
import { HQ_HTML } from './hq-recovery-html.js';
|
|
12
|
-
import {
|
|
12
|
+
import { agentMessageToEntry, agentRingKey, decodePathSegment, readLocalSubagentTranscript, sanitizeApiError } from './hq-server/routes.js';
|
|
13
13
|
import type { ConnectedClient, TranscriptRing } from './hq-server/types.js';
|
|
14
|
-
export type { ConnectedClient, TranscriptRing };
|
|
15
14
|
export { HqInsecureExposureError } from '@wrongstack/core/hq';
|
|
15
|
+
export type { ConnectedClient, TranscriptRing };
|
|
16
16
|
export { HQ_HTML };
|
|
17
17
|
export declare const DEFAULT_HOST = "127.0.0.1";
|
|
18
18
|
export declare const DEFAULT_PORT = 3499;
|
|
@@ -22,7 +22,7 @@ export declare const CLIENT_TTL_MS = 60000;
|
|
|
22
22
|
export declare const CLIENT_CLEANUP_INTERVAL_MS = 30000;
|
|
23
23
|
export declare const BROWSER_HEARTBEAT_INTERVAL_MS = 15000;
|
|
24
24
|
export declare const SESSION_SNAPSHOT_TTL_MS = 30000;
|
|
25
|
-
export {
|
|
25
|
+
export { agentMessageToEntry, agentRingKey, decodePathSegment, readLocalSubagentTranscript, sanitizeApiError, };
|
|
26
26
|
export interface HqServerOptions {
|
|
27
27
|
/** Policy authority for control-plane command enqueue decisions. */
|
|
28
28
|
trustBoundary?: TrustBoundary | undefined;
|
package/dist/hq-server.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"hq-server.d.ts","sourceRoot":"","sources":["../src/hq-server.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;
|
|
1
|
+
{"version":3,"file":"hq-server.d.ts","sourceRoot":"","sources":["../src/hq-server.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAgCH,OAAO,EAAoC,KAAK,aAAa,EAAE,MAAM,2BAA2B,CAAC;AAEjG,OAAO,EAAE,OAAO,EAAE,MAAM,uBAAuB,CAAC;AAIhD,OAAO,EACL,mBAAmB,EACnB,YAAY,EAMZ,iBAAiB,EASjB,2BAA2B,EAC3B,gBAAgB,EACjB,MAAM,uBAAuB,CAAC;AAO/B,OAAO,KAAK,EAAE,eAAe,EAAkB,cAAc,EAAE,MAAM,sBAAsB,CAAC;AAG5F,OAAO,EAAE,uBAAuB,EAAE,MAAM,qBAAqB,CAAC;AAC9D,YAAY,EAAE,eAAe,EAAE,cAAc,EAAE,CAAC;AAIhD,OAAO,EAAE,OAAO,EAAE,CAAC;AACnB,eAAO,MAAM,YAAY,cAAc,CAAC;AACxC,eAAO,MAAM,YAAY,OAAO,CAAC;AACjC,eAAO,MAAM,aAAa,OAAO,CAAC;AAClC,eAAO,MAAM,wBAAwB,KAAK,CAAC;AAC3C,eAAO,MAAM,aAAa,QAAS,CAAC;AACpC,eAAO,MAAM,0BAA0B,QAAS,CAAC;AACjD,eAAO,MAAM,6BAA6B,QAAS,CAAC;AACpD,eAAO,MAAM,uBAAuB,QAAS,CAAC;AAE9C,OAAO,EACL,mBAAmB,EACnB,YAAY,EACZ,iBAAiB,EACjB,2BAA2B,EAC3B,gBAAgB,GACjB,CAAC;AAIF,MAAM,WAAW,eAAe;IAC9B,oEAAoE;IACpE,aAAa,CAAC,EAAE,aAAa,GAAG,SAAS,CAAC;IAC1C,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,UAAU,CAAC,EAAE,OAAO,CAAC;IACrB,SAAS,CAAC,EAAE,OAAO,CAAC;IACpB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,0BAA0B,CAAC,EAAE,MAAM,CAAC;IACpC,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,uBAAuB,CAAC,EAAE,MAAM,CAAC;IACjC,oBAAoB,CAAC,EAAE,MAAM,CAAC;IAC9B,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,iBAAiB,CAAC,EAAE,OAAO,CAAC;IAC5B,aAAa,CAAC,EAAE,OAAO,CAAC;IACxB,kBAAkB,CAAC,EAAE,OAAO,CAAC;IAC7B;;;;;;;;;OASG;IACH,UAAU,CAAC,EAAE,MAAM,CAAC;CACrB;AAED,MAAM,WAAW,uBAAuB;IACtC,OAAO,EAAE,MAAM,CAAC;IAChB,UAAU,EAAE,MAAM,CAAC;IACnB,SAAS,EAAE,MAAM,CAAC;IAClB,SAAS,EAAE;QACT,iBAAiB,EAAE,MAAM,CAAC;QAC1B,mBAAmB,CAAC,EAAE,MAAM,CAAC;KAC9B,CAAC;IACF,WAAW,EAAE,OAAO,CAAC;IACrB,gBAAgB,EAAE,OAAO,CAAC;IAC1B,YAAY,EAAE,OAAO,CAAC;CACvB;AAED,MAAM,MAAM,eAAe,GAAG,uBAAuB,CAAC;AAEtD,MAAM,WAAW,cAAc;IAC7B,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;IACb,aAAa,CAAC,EAAE,eAAe,CAAC;IAChC,iBAAiB,CAAC,MAAM,EAAE,MAAM,GAAG,IAAI,CAAC;IACxC,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC,CAAC;CACxB;AAID,wBAAsB,aAAa,CAAC,OAAO,GAAE,eAAoB,GAAG,OAAO,CAAC,cAAc,CAAC,CAM1F"}
|
|
@@ -94,11 +94,14 @@ ${output.trim()}` : ""}`
|
|
|
94
94
|
}, options.timeoutMs ?? START_TIMEOUT_MS);
|
|
95
95
|
});
|
|
96
96
|
}
|
|
97
|
-
function buildPublicHqUrl(tunnelUrl, localBrowserUrl,
|
|
97
|
+
function buildPublicHqUrl(tunnelUrl, localBrowserUrl, includeBootstrap) {
|
|
98
98
|
const publicUrl = new URL(tunnelUrl);
|
|
99
|
-
if (
|
|
100
|
-
|
|
101
|
-
|
|
99
|
+
if (includeBootstrap && localBrowserUrl) {
|
|
100
|
+
try {
|
|
101
|
+
const localHash = new URL(localBrowserUrl).hash;
|
|
102
|
+
if (localHash.startsWith("#bootstrap=")) publicUrl.hash = localHash.slice(1);
|
|
103
|
+
} catch {
|
|
104
|
+
}
|
|
102
105
|
}
|
|
103
106
|
return publicUrl.toString();
|
|
104
107
|
}
|
|
@@ -108,4 +111,4 @@ export {
|
|
|
108
111
|
hasRegisteredQuickTunnelConnection,
|
|
109
112
|
startHqQuickTunnel
|
|
110
113
|
};
|
|
111
|
-
//# sourceMappingURL=hq-tunnel-
|
|
114
|
+
//# sourceMappingURL=hq-tunnel-RFKGC4HI.js.map
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"version": 3,
|
|
3
3
|
"sources": ["../src/hq-tunnel.ts"],
|
|
4
|
-
"sourcesContent": ["import { type ChildProcessByStdio, spawn } from 'node:child_process';\nimport type { Readable } from 'node:stream';\n\nconst QUICK_TUNNEL_URL = /https:\\/\\/[a-z0-9-]+\\.trycloudflare\\.com\\b/i;\nconst QUICK_TUNNEL_REGISTERED = /\\bRegistered tunnel connection\\b/i;\nconst START_TIMEOUT_MS = 30_000;\nconst MAX_LOG_CHARS = 16_384;\n\nexport interface HqQuickTunnelHandle {\n url: string;\n close(): Promise<void>;\n}\n\nexport interface HqQuickTunnelOptions {\n executable?: string | undefined;\n timeoutMs?: number | undefined;\n onUnexpectedExit?: ((message: string) => void) | undefined;\n}\n\nexport function extractQuickTunnelUrl(output: string): string | undefined {\n return output.match(QUICK_TUNNEL_URL)?.[0];\n}\n\n/** cloudflared prints the public URL before its edge connection is usable. */\nexport function hasRegisteredQuickTunnelConnection(output: string): boolean {\n return QUICK_TUNNEL_REGISTERED.test(output);\n}\n\nfunction tail(current: string, chunk: unknown): string {\n return `${current}${String(chunk)}`.slice(-MAX_LOG_CHARS);\n}\n\n/** Start an anonymous TryCloudflare tunnel and tie it to the HQ process lifecycle. */\nexport function startHqQuickTunnel(\n originUrl: string,\n options: HqQuickTunnelOptions = {},\n): Promise<HqQuickTunnelHandle> {\n return new Promise((resolve, reject) => {\n const executable = options.executable ?? 'cloudflared';\n let child: ChildProcessByStdio<null, Readable, Readable>;\n try {\n child = spawn(executable, ['tunnel', '--url', originUrl], {\n stdio: ['ignore', 'pipe', 'pipe'],\n windowsHide: true,\n });\n } catch (error) {\n reject(error);\n return;\n }\n\n let output = '';\n let settled = false;\n let closing = false;\n let publicUrl: string | undefined;\n\n const fail = (message: string): void => {\n if (settled) return;\n settled = true;\n clearTimeout(timer);\n if (!child.killed) child.kill();\n reject(new Error(message));\n };\n\n const inspect = (chunk: unknown): void => {\n output = tail(output, chunk);\n if (settled) return;\n const found = extractQuickTunnelUrl(output);\n if (found) publicUrl = found;\n if (!publicUrl || !hasRegisteredQuickTunnelConnection(output)) return;\n const readyUrl = publicUrl;\n settled = true;\n clearTimeout(timer);\n resolve({\n url: readyUrl,\n close: () =>\n new Promise<void>((done) => {\n if (child.exitCode !== null || child.signalCode !== null) {\n done();\n return;\n }\n closing = true;\n const forceTimer = setTimeout(() => {\n if (child.exitCode === null && child.signalCode === null) child.kill('SIGKILL');\n }, 3_000);\n child.once('exit', () => {\n clearTimeout(forceTimer);\n done();\n });\n child.kill();\n }),\n });\n };\n\n child.stdout.on('data', inspect);\n child.stderr.on('data', inspect);\n child.once('error', (error: NodeJS.ErrnoException) => {\n const detail =\n error.code === 'ENOENT'\n ? '`cloudflared` was not found in PATH. Install Cloudflare Tunnel, then retry.'\n : `cloudflared failed to start: ${error.message}`;\n fail(detail);\n });\n child.once('exit', (code, signal) => {\n const suffix = output.trim() ? `\\n${output.trim()}` : '';\n if (!settled) {\n fail(\n `cloudflared exited before publishing a tunnel URL (code ${code ?? signal ?? 'unknown'}).${suffix}`,\n );\n } else if (!closing) {\n options.onUnexpectedExit?.(\n `Cloudflare Quick Tunnel ${publicUrl ?? ''} stopped (code ${code ?? signal ?? 'unknown'}).${suffix}`,\n );\n }\n });\n\n const timer = setTimeout(() => {\n fail(\n `${\n publicUrl\n ? 'Timed out waiting for cloudflared to register the Quick Tunnel connection.'\n : 'Timed out waiting for a trycloudflare.com URL from cloudflared.'\n }${output.trim() ? `\\n${output.trim()}` : ''}`,\n );\n }, options.timeoutMs ?? START_TIMEOUT_MS);\n });\n}\n\nexport function buildPublicHqUrl(\n tunnelUrl: string,\n localBrowserUrl: string | undefined,\n
|
|
5
|
-
"mappings": "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
|
|
4
|
+
"sourcesContent": ["import { type ChildProcessByStdio, spawn } from 'node:child_process';\nimport type { Readable } from 'node:stream';\n\nconst QUICK_TUNNEL_URL = /https:\\/\\/[a-z0-9-]+\\.trycloudflare\\.com\\b/i;\nconst QUICK_TUNNEL_REGISTERED = /\\bRegistered tunnel connection\\b/i;\nconst START_TIMEOUT_MS = 30_000;\nconst MAX_LOG_CHARS = 16_384;\n\nexport interface HqQuickTunnelHandle {\n url: string;\n close(): Promise<void>;\n}\n\nexport interface HqQuickTunnelOptions {\n executable?: string | undefined;\n timeoutMs?: number | undefined;\n onUnexpectedExit?: ((message: string) => void) | undefined;\n}\n\nexport function extractQuickTunnelUrl(output: string): string | undefined {\n return output.match(QUICK_TUNNEL_URL)?.[0];\n}\n\n/** cloudflared prints the public URL before its edge connection is usable. */\nexport function hasRegisteredQuickTunnelConnection(output: string): boolean {\n return QUICK_TUNNEL_REGISTERED.test(output);\n}\n\nfunction tail(current: string, chunk: unknown): string {\n return `${current}${String(chunk)}`.slice(-MAX_LOG_CHARS);\n}\n\n/** Start an anonymous TryCloudflare tunnel and tie it to the HQ process lifecycle. */\nexport function startHqQuickTunnel(\n originUrl: string,\n options: HqQuickTunnelOptions = {},\n): Promise<HqQuickTunnelHandle> {\n return new Promise((resolve, reject) => {\n const executable = options.executable ?? 'cloudflared';\n let child: ChildProcessByStdio<null, Readable, Readable>;\n try {\n child = spawn(executable, ['tunnel', '--url', originUrl], {\n stdio: ['ignore', 'pipe', 'pipe'],\n windowsHide: true,\n });\n } catch (error) {\n reject(error);\n return;\n }\n\n let output = '';\n let settled = false;\n let closing = false;\n let publicUrl: string | undefined;\n\n const fail = (message: string): void => {\n if (settled) return;\n settled = true;\n clearTimeout(timer);\n if (!child.killed) child.kill();\n reject(new Error(message));\n };\n\n const inspect = (chunk: unknown): void => {\n output = tail(output, chunk);\n if (settled) return;\n const found = extractQuickTunnelUrl(output);\n if (found) publicUrl = found;\n if (!publicUrl || !hasRegisteredQuickTunnelConnection(output)) return;\n const readyUrl = publicUrl;\n settled = true;\n clearTimeout(timer);\n resolve({\n url: readyUrl,\n close: () =>\n new Promise<void>((done) => {\n if (child.exitCode !== null || child.signalCode !== null) {\n done();\n return;\n }\n closing = true;\n const forceTimer = setTimeout(() => {\n if (child.exitCode === null && child.signalCode === null) child.kill('SIGKILL');\n }, 3_000);\n child.once('exit', () => {\n clearTimeout(forceTimer);\n done();\n });\n child.kill();\n }),\n });\n };\n\n child.stdout.on('data', inspect);\n child.stderr.on('data', inspect);\n child.once('error', (error: NodeJS.ErrnoException) => {\n const detail =\n error.code === 'ENOENT'\n ? '`cloudflared` was not found in PATH. Install Cloudflare Tunnel, then retry.'\n : `cloudflared failed to start: ${error.message}`;\n fail(detail);\n });\n child.once('exit', (code, signal) => {\n const suffix = output.trim() ? `\\n${output.trim()}` : '';\n if (!settled) {\n fail(\n `cloudflared exited before publishing a tunnel URL (code ${code ?? signal ?? 'unknown'}).${suffix}`,\n );\n } else if (!closing) {\n options.onUnexpectedExit?.(\n `Cloudflare Quick Tunnel ${publicUrl ?? ''} stopped (code ${code ?? signal ?? 'unknown'}).${suffix}`,\n );\n }\n });\n\n const timer = setTimeout(() => {\n fail(\n `${\n publicUrl\n ? 'Timed out waiting for cloudflared to register the Quick Tunnel connection.'\n : 'Timed out waiting for a trycloudflare.com URL from cloudflared.'\n }${output.trim() ? `\\n${output.trim()}` : ''}`,\n );\n }, options.timeoutMs ?? START_TIMEOUT_MS);\n });\n}\n\nexport function buildPublicHqUrl(\n tunnelUrl: string,\n localBrowserUrl: string | undefined,\n includeBootstrap: boolean,\n): string {\n const publicUrl = new URL(tunnelUrl);\n if (includeBootstrap && localBrowserUrl) {\n // Preserve the bootstrap fragment (#bootstrap=\u2026) from the local URL so\n // the tunnel user gets the same one-time code exchange path. Never copy\n // query-string tokens \u2014 those are the reusable credential we are\n // eliminating.\n try {\n const localHash = new URL(localBrowserUrl).hash;\n if (localHash.startsWith('#bootstrap=')) publicUrl.hash = localHash.slice(1);\n } catch {\n // Malformed local URL \u2014 skip.\n }\n }\n return publicUrl.toString();\n}\n"],
|
|
5
|
+
"mappings": "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",
|
|
6
6
|
"names": []
|
|
7
7
|
}
|
package/dist/hq-tunnel.d.ts
CHANGED
|
@@ -12,5 +12,5 @@ export declare function extractQuickTunnelUrl(output: string): string | undefine
|
|
|
12
12
|
export declare function hasRegisteredQuickTunnelConnection(output: string): boolean;
|
|
13
13
|
/** Start an anonymous TryCloudflare tunnel and tie it to the HQ process lifecycle. */
|
|
14
14
|
export declare function startHqQuickTunnel(originUrl: string, options?: HqQuickTunnelOptions): Promise<HqQuickTunnelHandle>;
|
|
15
|
-
export declare function buildPublicHqUrl(tunnelUrl: string, localBrowserUrl: string | undefined,
|
|
15
|
+
export declare function buildPublicHqUrl(tunnelUrl: string, localBrowserUrl: string | undefined, includeBootstrap: boolean): string;
|
|
16
16
|
//# sourceMappingURL=hq-tunnel.d.ts.map
|
package/dist/hq-tunnel.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"hq-tunnel.d.ts","sourceRoot":"","sources":["../src/hq-tunnel.ts"],"names":[],"mappings":"AAQA,MAAM,WAAW,mBAAmB;IAClC,GAAG,EAAE,MAAM,CAAC;IACZ,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC,CAAC;CACxB;AAED,MAAM,WAAW,oBAAoB;IACnC,UAAU,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IAChC,SAAS,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IAC/B,gBAAgB,CAAC,EAAE,CAAC,CAAC,OAAO,EAAE,MAAM,KAAK,IAAI,CAAC,GAAG,SAAS,CAAC;CAC5D;AAED,wBAAgB,qBAAqB,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,GAAG,SAAS,CAExE;AAED,8EAA8E;AAC9E,wBAAgB,kCAAkC,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAE1E;AAMD,sFAAsF;AACtF,wBAAgB,kBAAkB,CAChC,SAAS,EAAE,MAAM,EACjB,OAAO,GAAE,oBAAyB,GACjC,OAAO,CAAC,mBAAmB,CAAC,CAyF9B;AAED,wBAAgB,gBAAgB,CAC9B,SAAS,EAAE,MAAM,EACjB,eAAe,EAAE,MAAM,GAAG,SAAS,EACnC,
|
|
1
|
+
{"version":3,"file":"hq-tunnel.d.ts","sourceRoot":"","sources":["../src/hq-tunnel.ts"],"names":[],"mappings":"AAQA,MAAM,WAAW,mBAAmB;IAClC,GAAG,EAAE,MAAM,CAAC;IACZ,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC,CAAC;CACxB;AAED,MAAM,WAAW,oBAAoB;IACnC,UAAU,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IAChC,SAAS,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IAC/B,gBAAgB,CAAC,EAAE,CAAC,CAAC,OAAO,EAAE,MAAM,KAAK,IAAI,CAAC,GAAG,SAAS,CAAC;CAC5D;AAED,wBAAgB,qBAAqB,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,GAAG,SAAS,CAExE;AAED,8EAA8E;AAC9E,wBAAgB,kCAAkC,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAE1E;AAMD,sFAAsF;AACtF,wBAAgB,kBAAkB,CAChC,SAAS,EAAE,MAAM,EACjB,OAAO,GAAE,oBAAyB,GACjC,OAAO,CAAC,mBAAmB,CAAC,CAyF9B;AAED,wBAAgB,gBAAgB,CAC9B,SAAS,EAAE,MAAM,EACjB,eAAe,EAAE,MAAM,GAAG,SAAS,EACnC,gBAAgB,EAAE,OAAO,GACxB,MAAM,CAeR"}
|
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-OI7GWJDS.js";
|
|
26
26
|
import "./chunk-Q5GTM25S.js";
|
|
27
27
|
import {
|
|
28
28
|
CLI_VERSION
|
|
@@ -1521,7 +1521,7 @@ 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-
|
|
1524
|
+
hq: async () => (await import("./hq-JUYKUNJX.js")).hqCmd,
|
|
1525
1525
|
mailbox: async () => (await import("./mailbox-serve-2UWHEN3M.js")).mailboxServeCmd,
|
|
1526
1526
|
permissions: async () => (await import("./permissions-FNYLZIL4.js")).permissionsCmd,
|
|
1527
1527
|
project: async () => (await import("./project-BLQ3ALVL.js")).projectCmd
|
|
@@ -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-6AQ3BXZA.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)) {
|
|
@@ -2253,7 +2253,7 @@ async function handleHqShortCircuit(flags) {
|
|
|
2253
2253
|
return 1;
|
|
2254
2254
|
}
|
|
2255
2255
|
try {
|
|
2256
|
-
const { buildPublicHqUrl, startHqQuickTunnel } = await import("./hq-tunnel-
|
|
2256
|
+
const { buildPublicHqUrl, startHqQuickTunnel } = await import("./hq-tunnel-RFKGC4HI.js");
|
|
2257
2257
|
const originHost = handle.host === "::1" ? "[::1]" : handle.host;
|
|
2258
2258
|
tunnel = await startHqQuickTunnel(`http://${originHost}:${handle.port}`, {
|
|
2259
2259
|
onUnexpectedExit: (message) => process.stderr.write(`${color8.yellow("!")} ${message}
|
|
@@ -2854,7 +2854,7 @@ async function initializeCli(argv) {
|
|
|
2854
2854
|
async function main(argv) {
|
|
2855
2855
|
const cliCtx = await initializeCli(argv);
|
|
2856
2856
|
if (typeof cliCtx === "number") return cliCtx;
|
|
2857
|
-
const { runInteractive } = await import("./cli-main-
|
|
2857
|
+
const { runInteractive } = await import("./cli-main-TOAWVJDY.js");
|
|
2858
2858
|
return runInteractive(cliCtx);
|
|
2859
2859
|
}
|
|
2860
2860
|
|
|
@@ -23,7 +23,7 @@ import {
|
|
|
23
23
|
trySaveImplementationPlan,
|
|
24
24
|
trySaveSpecFromAIOutput,
|
|
25
25
|
trySaveTasksFromAIOutput
|
|
26
|
-
} from "./chunk-
|
|
26
|
+
} from "./chunk-BQCAJ7FI.js";
|
|
27
27
|
import "./chunk-7OCVIDC7.js";
|
|
28
28
|
export {
|
|
29
29
|
SDDState,
|
|
@@ -51,4 +51,4 @@ export {
|
|
|
51
51
|
trySaveSpecFromAIOutput,
|
|
52
52
|
trySaveTasksFromAIOutput
|
|
53
53
|
};
|
|
54
|
-
//# sourceMappingURL=sdd-runtime-
|
|
54
|
+
//# sourceMappingURL=sdd-runtime-JG4EEKL6.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"task-manager.d.ts","sourceRoot":"","sources":["../../../src/services/sdd/task-manager.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,wBAAwB,CAAC;AAC3D,OAAO,EAAoB,cAAc,EAAE,WAAW,EAAE,MAAM,iBAAiB,CAAC;AAGhF,YAAY,EAAE,YAAY,EAAE,CAAC;AAC7B,OAAO,EAAE,cAAc,EAAE,CAAC;AAE1B;;GAEG;AACH,wBAAgB,aAAa,CAAC,EAAE,EAAE,MAAM,GAAG,MAAM,CAUhD;AAkBD,wBAAsB,wBAAwB,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC,
|
|
1
|
+
{"version":3,"file":"task-manager.d.ts","sourceRoot":"","sources":["../../../src/services/sdd/task-manager.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,wBAAwB,CAAC;AAC3D,OAAO,EAAoB,cAAc,EAAE,WAAW,EAAE,MAAM,iBAAiB,CAAC;AAGhF,YAAY,EAAE,YAAY,EAAE,CAAC;AAC7B,OAAO,EAAE,cAAc,EAAE,CAAC;AAE1B;;GAEG;AACH,wBAAgB,aAAa,CAAC,EAAE,EAAE,MAAM,GAAG,MAAM,CAUhD;AAkBD,wBAAsB,wBAAwB,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC,CA0CjF;AAED,wBAAgB,eAAe,IAAI,YAAY,GAAG,IAAI,CAIrD;AAED,wBAAgB,cAAc,IAAI;IAChC,EAAE,EAAE,MAAM,CAAC;IACX,KAAK,EAAE,MAAM,CAAC;IACd,WAAW,EAAE,MAAM,CAAC;IACpB,QAAQ,EAAE,MAAM,CAAC;IACjB,aAAa,EAAE,MAAM,CAAC;IACtB,IAAI,EAAE,MAAM,EAAE,CAAC;IACf,SAAS,EAAE,MAAM,GAAG,SAAS,CAAC;CAC/B,GAAG,IAAI,CAeP;AAED,wBAAgB,iBAAiB,IAAI,OAAO,CAW3C;AAED,wBAAgB,eAAe,IAAI,MAAM,GAAG,IAAI,CAW/C;AAED,wBAAgB,0BAA0B,IAAI,MAAM,GAAG,IAAI,CAuD1D;AAED,wBAAgB,0BAA0B,IAAI,MAAM,GAAG,IAAI,CAc1D;AAED;;;;;GAKG;AACH,wBAAgB,aAAa,CAAC,CAAC,SAAS;IAAE,EAAE,EAAE,MAAM,CAAC;IAAC,KAAK,EAAE,MAAM,CAAA;CAAE,EACnE,KAAK,EAAE,CAAC,EAAE,EACV,KAAK,EAAE,MAAM,GACZ,CAAC,GAAG,IAAI,CAYV;AAED,wBAAgB,iBAAiB,CAAC,SAAS,EAAE,MAAM,GAAG,OAAO,CAY5D;AAED,wBAAgB,cAAc,IAAI,MAAM,GAAG,IAAI,CAE9C;AACD,wBAAgB,oBAAoB,IAAI,WAAW,GAAG,IAAI,CAEzD"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"settings.d.ts","sourceRoot":"","sources":["../../src/slash-commands/settings.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,
|
|
1
|
+
{"version":3,"file":"settings.d.ts","sourceRoot":"","sources":["../../src/slash-commands/settings.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAsB,YAAY,EAAE,MAAM,wBAAwB,CAAC;AAU/E,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,sBAAsB,CAAC;AAGhE;;;;;;;GAOG;AACH,wBAAgB,oBAAoB,CAAC,IAAI,EAAE,mBAAmB,GAAG,YAAY,CAuiC5E"}
|
|
@@ -892,7 +892,8 @@ async function runWebUI(opts) {
|
|
|
892
892
|
projectSddSession: specsPaths.projectSddSession,
|
|
893
893
|
projectSddBoards: specsPaths.projectSddBoards
|
|
894
894
|
}
|
|
895
|
-
} : void 0
|
|
895
|
+
} : void 0,
|
|
896
|
+
{ trustBoundary, logger: consoleLogger }
|
|
896
897
|
);
|
|
897
898
|
const sddWizardHandler = opts.sddSubagentFactory && specsPaths ? new SddWizardWebSocketHandler(
|
|
898
899
|
buildSddWizardDeps({
|
|
@@ -1456,4 +1457,4 @@ async function runWebUI(opts) {
|
|
|
1456
1457
|
export {
|
|
1457
1458
|
runWebUI
|
|
1458
1459
|
};
|
|
1459
|
-
//# sourceMappingURL=webui-server-
|
|
1460
|
+
//# sourceMappingURL=webui-server-ZF5KVGC5.js.map
|