@repo-prism/dispatch-hub 1.1.16 → 1.8.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.
Files changed (72) hide show
  1. package/README.md +2 -1
  2. package/dist/api-errors.d.ts +26 -0
  3. package/dist/api-errors.d.ts.map +1 -0
  4. package/dist/api-errors.js +61 -0
  5. package/dist/api-errors.js.map +1 -0
  6. package/dist/auth.d.ts +8 -0
  7. package/dist/auth.d.ts.map +1 -1
  8. package/dist/auth.js +22 -1
  9. package/dist/auth.js.map +1 -1
  10. package/dist/bin.js +0 -0
  11. package/dist/dashboard/app.css +1 -1
  12. package/dist/dashboard/app.js +199 -111
  13. package/dist/dashboard/app.js.map +636 -6
  14. package/dist/dashboard/hub.css +17449 -275
  15. package/dist/dashboard/index.html +4 -3
  16. package/dist/dashboard/prism-mark.png +0 -0
  17. package/dist/host-telemetry.d.ts +9 -0
  18. package/dist/host-telemetry.d.ts.map +1 -0
  19. package/dist/host-telemetry.js +30 -0
  20. package/dist/host-telemetry.js.map +1 -0
  21. package/dist/hub-record.d.ts.map +1 -1
  22. package/dist/hub-record.js +36 -1
  23. package/dist/hub-record.js.map +1 -1
  24. package/dist/index.d.ts +2 -2
  25. package/dist/index.d.ts.map +1 -1
  26. package/dist/index.js +2 -2
  27. package/dist/index.js.map +1 -1
  28. package/dist/intelligence.d.ts +37 -0
  29. package/dist/intelligence.d.ts.map +1 -0
  30. package/dist/intelligence.js +102 -0
  31. package/dist/intelligence.js.map +1 -0
  32. package/dist/notes.d.ts +32 -0
  33. package/dist/notes.d.ts.map +1 -0
  34. package/dist/notes.js +117 -0
  35. package/dist/notes.js.map +1 -0
  36. package/dist/notify.d.ts +6 -0
  37. package/dist/notify.d.ts.map +1 -1
  38. package/dist/notify.js +66 -12
  39. package/dist/notify.js.map +1 -1
  40. package/dist/paths.d.ts +25 -1
  41. package/dist/paths.d.ts.map +1 -1
  42. package/dist/paths.js +30 -2
  43. package/dist/paths.js.map +1 -1
  44. package/dist/pick-folder.d.ts +9 -0
  45. package/dist/pick-folder.d.ts.map +1 -0
  46. package/dist/pick-folder.js +49 -0
  47. package/dist/pick-folder.js.map +1 -0
  48. package/dist/registry.d.ts +7 -0
  49. package/dist/registry.d.ts.map +1 -1
  50. package/dist/registry.js +45 -6
  51. package/dist/registry.js.map +1 -1
  52. package/dist/server.d.ts +18 -1
  53. package/dist/server.d.ts.map +1 -1
  54. package/dist/server.js +421 -29
  55. package/dist/server.js.map +1 -1
  56. package/dist/snapshot.d.ts +14 -2
  57. package/dist/snapshot.d.ts.map +1 -1
  58. package/dist/snapshot.js +44 -9
  59. package/dist/snapshot.js.map +1 -1
  60. package/dist/statusline.d.ts +2 -0
  61. package/dist/statusline.d.ts.map +1 -1
  62. package/dist/statusline.js +23 -5
  63. package/dist/statusline.js.map +1 -1
  64. package/dist/types.d.ts +66 -3
  65. package/dist/types.d.ts.map +1 -1
  66. package/dist/types.js +5 -0
  67. package/dist/types.js.map +1 -1
  68. package/dist/watch.d.ts +22 -5
  69. package/dist/watch.d.ts.map +1 -1
  70. package/dist/watch.js +59 -13
  71. package/dist/watch.js.map +1 -1
  72. package/package.json +7 -3
package/dist/paths.d.ts CHANGED
@@ -5,6 +5,10 @@ export type HubEnv = {
5
5
  readonly PRISM_HUB?: string;
6
6
  readonly PRISM_HUB_HOME?: string;
7
7
  readonly PRISM_HUB_PORT?: string;
8
+ /** `1` speaks `local.prismhq.in` instead of `prismhq.localhost`. */
9
+ readonly PRISM_CONSOLE_ALIAS?: string;
10
+ /** An explicit hostname for the dashboard URL, overriding the default. */
11
+ readonly PRISM_CONSOLE_HOST?: string;
8
12
  readonly VITEST?: string;
9
13
  readonly [key: string]: string | undefined;
10
14
  };
@@ -13,5 +17,25 @@ export declare function hubRecordPath(home?: string): string;
13
17
  export declare function hubRegistryPath(home?: string): string;
14
18
  export declare function hubPort(env?: HubEnv): number;
15
19
  export declare function hubEnabled(env?: HubEnv): boolean;
16
- export declare function dashboardUrl(port: number, token?: string): string;
20
+ /**
21
+ * The address bar name (ADR-0048).
22
+ *
23
+ * `prismhq.localhost` is the default. RFC 6761 reserves `.localhost`, so
24
+ * browsers resolve it to loopback with no DNS, hosts file, or sudo. The
25
+ * daemon still binds `127.0.0.1:17330`. `local.prismhq.in` stays an opt-in
26
+ * (`PRISM_CONSOLE_ALIAS=1`) exact-name alias — never a `*.prismhq.in` suffix.
27
+ */
28
+ export declare const CONSOLE_HOST = "prismhq.localhost";
29
+ /** Branded loopback alias. Exact name only — never a `*.prismhq.in` suffix. */
30
+ export declare const CONSOLE_ALIAS_HOST = "local.prismhq.in";
31
+ export declare function consoleHost(env?: HubEnv): string;
32
+ export declare function dashboardUrl(port: number, token?: string, env?: HubEnv): string;
33
+ /**
34
+ * The address the daemon binds and that health checks dial.
35
+ *
36
+ * Deliberately still the literal loopback IP: a name is a nicety for the
37
+ * address bar, but `ensureHub` polling a name it cannot resolve would turn a
38
+ * cosmetic feature into a broken dispatch.
39
+ */
40
+ export declare function hubOrigin(port: number): string;
17
41
  //# sourceMappingURL=paths.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"paths.d.ts","sourceRoot":"","sources":["../src/paths.ts"],"names":[],"mappings":"AAGA,4DAA4D;AAC5D,eAAO,MAAM,QAAQ,QAAQ,CAAC;AAE9B,eAAO,MAAM,YAAY,eAAe,CAAC;AAEzC,MAAM,MAAM,MAAM,GAAG;IACnB,QAAQ,CAAC,SAAS,CAAC,EAAE,MAAM,CAAC;IAC5B,QAAQ,CAAC,cAAc,CAAC,EAAE,MAAM,CAAC;IACjC,QAAQ,CAAC,cAAc,CAAC,EAAE,MAAM,CAAC;IACjC,QAAQ,CAAC,MAAM,CAAC,EAAE,MAAM,CAAC;IACzB,QAAQ,EAAE,GAAG,EAAE,MAAM,GAAG,MAAM,GAAG,SAAS,CAAC;CAC5C,CAAC;AAEF,wBAAgB,OAAO,CAAC,GAAG,GAAE,MAAoB,GAAG,MAAM,CAIzD;AAED,wBAAgB,aAAa,CAAC,IAAI,SAAY,GAAG,MAAM,CAEtD;AAED,wBAAgB,eAAe,CAAC,IAAI,SAAY,GAAG,MAAM,CAExD;AAED,wBAAgB,OAAO,CAAC,GAAG,GAAE,MAAoB,GAAG,MAAM,CAKzD;AAED,wBAAgB,UAAU,CAAC,GAAG,GAAE,MAAoB,GAAG,OAAO,CAM7D;AAED,wBAAgB,YAAY,CAAC,IAAI,EAAE,MAAM,EAAE,KAAK,CAAC,EAAE,MAAM,GAAG,MAAM,CAGjE"}
1
+ {"version":3,"file":"paths.d.ts","sourceRoot":"","sources":["../src/paths.ts"],"names":[],"mappings":"AAGA,4DAA4D;AAC5D,eAAO,MAAM,QAAQ,QAAQ,CAAC;AAE9B,eAAO,MAAM,YAAY,eAAe,CAAC;AAEzC,MAAM,MAAM,MAAM,GAAG;IACnB,QAAQ,CAAC,SAAS,CAAC,EAAE,MAAM,CAAC;IAC5B,QAAQ,CAAC,cAAc,CAAC,EAAE,MAAM,CAAC;IACjC,QAAQ,CAAC,cAAc,CAAC,EAAE,MAAM,CAAC;IACjC,oEAAoE;IACpE,QAAQ,CAAC,mBAAmB,CAAC,EAAE,MAAM,CAAC;IACtC,0EAA0E;IAC1E,QAAQ,CAAC,kBAAkB,CAAC,EAAE,MAAM,CAAC;IACrC,QAAQ,CAAC,MAAM,CAAC,EAAE,MAAM,CAAC;IACzB,QAAQ,EAAE,GAAG,EAAE,MAAM,GAAG,MAAM,GAAG,SAAS,CAAC;CAC5C,CAAC;AAEF,wBAAgB,OAAO,CAAC,GAAG,GAAE,MAAoB,GAAG,MAAM,CAIzD;AAED,wBAAgB,aAAa,CAAC,IAAI,SAAY,GAAG,MAAM,CAEtD;AAED,wBAAgB,eAAe,CAAC,IAAI,SAAY,GAAG,MAAM,CAExD;AAED,wBAAgB,OAAO,CAAC,GAAG,GAAE,MAAoB,GAAG,MAAM,CAKzD;AAED,wBAAgB,UAAU,CAAC,GAAG,GAAE,MAAoB,GAAG,OAAO,CAM7D;AAED;;;;;;;GAOG;AACH,eAAO,MAAM,YAAY,sBAAsB,CAAC;AAEhD,+EAA+E;AAC/E,eAAO,MAAM,kBAAkB,qBAAqB,CAAC;AAErD,wBAAgB,WAAW,CAAC,GAAG,GAAE,MAAoB,GAAG,MAAM,CAI7D;AAED,wBAAgB,YAAY,CAC1B,IAAI,EAAE,MAAM,EACZ,KAAK,CAAC,EAAE,MAAM,EACd,GAAG,GAAE,MAAoB,GACxB,MAAM,CAGR;AAED;;;;;;GAMG;AACH,wBAAgB,SAAS,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAE9C"}
package/dist/paths.js CHANGED
@@ -31,8 +31,36 @@ export function hubEnabled(env = process.env) {
31
31
  return false;
32
32
  return true;
33
33
  }
34
- export function dashboardUrl(port, token) {
35
- const base = `http://127.0.0.1:${port}/`;
34
+ /**
35
+ * The address bar name (ADR-0048).
36
+ *
37
+ * `prismhq.localhost` is the default. RFC 6761 reserves `.localhost`, so
38
+ * browsers resolve it to loopback with no DNS, hosts file, or sudo. The
39
+ * daemon still binds `127.0.0.1:17330`. `local.prismhq.in` stays an opt-in
40
+ * (`PRISM_CONSOLE_ALIAS=1`) exact-name alias — never a `*.prismhq.in` suffix.
41
+ */
42
+ export const CONSOLE_HOST = "prismhq.localhost";
43
+ /** Branded loopback alias. Exact name only — never a `*.prismhq.in` suffix. */
44
+ export const CONSOLE_ALIAS_HOST = "local.prismhq.in";
45
+ export function consoleHost(env = process.env) {
46
+ if (env.PRISM_CONSOLE_HOST?.trim())
47
+ return env.PRISM_CONSOLE_HOST.trim();
48
+ if (env.PRISM_CONSOLE_ALIAS === "1")
49
+ return CONSOLE_ALIAS_HOST;
50
+ return CONSOLE_HOST;
51
+ }
52
+ export function dashboardUrl(port, token, env = process.env) {
53
+ const base = `http://${consoleHost(env)}:${port}/`;
36
54
  return token ? `${base}?token=${encodeURIComponent(token)}` : base;
37
55
  }
56
+ /**
57
+ * The address the daemon binds and that health checks dial.
58
+ *
59
+ * Deliberately still the literal loopback IP: a name is a nicety for the
60
+ * address bar, but `ensureHub` polling a name it cannot resolve would turn a
61
+ * cosmetic feature into a broken dispatch.
62
+ */
63
+ export function hubOrigin(port) {
64
+ return `http://127.0.0.1:${port}`;
65
+ }
38
66
  //# sourceMappingURL=paths.js.map
package/dist/paths.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"paths.js","sourceRoot":"","sources":["../src/paths.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,SAAS,CAAC;AAClC,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AAEjC,4DAA4D;AAC5D,MAAM,CAAC,MAAM,QAAQ,GAAG,KAAK,CAAC;AAE9B,MAAM,CAAC,MAAM,YAAY,GAAG,YAAY,CAAC;AAUzC,MAAM,UAAU,OAAO,CAAC,MAAc,OAAO,CAAC,GAAG;IAC/C,MAAM,QAAQ,GAAG,GAAG,CAAC,cAAc,EAAE,IAAI,EAAE,CAAC;IAC5C,IAAI,QAAQ;QAAE,OAAO,QAAQ,CAAC;IAC9B,OAAO,IAAI,CAAC,OAAO,EAAE,EAAE,QAAQ,EAAE,KAAK,CAAC,CAAC;AAC1C,CAAC;AAED,MAAM,UAAU,aAAa,CAAC,IAAI,GAAG,OAAO,EAAE;IAC5C,OAAO,IAAI,CAAC,IAAI,EAAE,UAAU,CAAC,CAAC;AAChC,CAAC;AAED,MAAM,UAAU,eAAe,CAAC,IAAI,GAAG,OAAO,EAAE;IAC9C,OAAO,IAAI,CAAC,IAAI,EAAE,eAAe,CAAC,CAAC;AACrC,CAAC;AAED,MAAM,UAAU,OAAO,CAAC,MAAc,OAAO,CAAC,GAAG;IAC/C,MAAM,GAAG,GAAG,GAAG,CAAC,cAAc,EAAE,IAAI,EAAE,CAAC;IACvC,IAAI,GAAG,KAAK,GAAG;QAAE,OAAO,CAAC,CAAC;IAC1B,MAAM,MAAM,GAAG,GAAG,CAAC,CAAC,CAAC,MAAM,CAAC,QAAQ,CAAC,GAAG,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC;IACzD,OAAO,MAAM,CAAC,SAAS,CAAC,MAAM,CAAC,IAAI,MAAM,IAAI,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,QAAQ,CAAC;AACrE,CAAC;AAED,MAAM,UAAU,UAAU,CAAC,MAAc,OAAO,CAAC,GAAG;IAClD,IAAI,GAAG,CAAC,SAAS,KAAK,GAAG;QAAE,OAAO,KAAK,CAAC;IACxC,2EAA2E;IAC3E,0CAA0C;IAC1C,IAAI,GAAG,CAAC,MAAM,KAAK,MAAM,IAAI,GAAG,CAAC,SAAS,KAAK,GAAG;QAAE,OAAO,KAAK,CAAC;IACjE,OAAO,IAAI,CAAC;AACd,CAAC;AAED,MAAM,UAAU,YAAY,CAAC,IAAY,EAAE,KAAc;IACvD,MAAM,IAAI,GAAG,oBAAoB,IAAI,GAAG,CAAC;IACzC,OAAO,KAAK,CAAC,CAAC,CAAC,GAAG,IAAI,UAAU,kBAAkB,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC;AACrE,CAAC"}
1
+ {"version":3,"file":"paths.js","sourceRoot":"","sources":["../src/paths.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,SAAS,CAAC;AAClC,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AAEjC,4DAA4D;AAC5D,MAAM,CAAC,MAAM,QAAQ,GAAG,KAAK,CAAC;AAE9B,MAAM,CAAC,MAAM,YAAY,GAAG,YAAY,CAAC;AAczC,MAAM,UAAU,OAAO,CAAC,MAAc,OAAO,CAAC,GAAG;IAC/C,MAAM,QAAQ,GAAG,GAAG,CAAC,cAAc,EAAE,IAAI,EAAE,CAAC;IAC5C,IAAI,QAAQ;QAAE,OAAO,QAAQ,CAAC;IAC9B,OAAO,IAAI,CAAC,OAAO,EAAE,EAAE,QAAQ,EAAE,KAAK,CAAC,CAAC;AAC1C,CAAC;AAED,MAAM,UAAU,aAAa,CAAC,IAAI,GAAG,OAAO,EAAE;IAC5C,OAAO,IAAI,CAAC,IAAI,EAAE,UAAU,CAAC,CAAC;AAChC,CAAC;AAED,MAAM,UAAU,eAAe,CAAC,IAAI,GAAG,OAAO,EAAE;IAC9C,OAAO,IAAI,CAAC,IAAI,EAAE,eAAe,CAAC,CAAC;AACrC,CAAC;AAED,MAAM,UAAU,OAAO,CAAC,MAAc,OAAO,CAAC,GAAG;IAC/C,MAAM,GAAG,GAAG,GAAG,CAAC,cAAc,EAAE,IAAI,EAAE,CAAC;IACvC,IAAI,GAAG,KAAK,GAAG;QAAE,OAAO,CAAC,CAAC;IAC1B,MAAM,MAAM,GAAG,GAAG,CAAC,CAAC,CAAC,MAAM,CAAC,QAAQ,CAAC,GAAG,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC;IACzD,OAAO,MAAM,CAAC,SAAS,CAAC,MAAM,CAAC,IAAI,MAAM,IAAI,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,QAAQ,CAAC;AACrE,CAAC;AAED,MAAM,UAAU,UAAU,CAAC,MAAc,OAAO,CAAC,GAAG;IAClD,IAAI,GAAG,CAAC,SAAS,KAAK,GAAG;QAAE,OAAO,KAAK,CAAC;IACxC,2EAA2E;IAC3E,0CAA0C;IAC1C,IAAI,GAAG,CAAC,MAAM,KAAK,MAAM,IAAI,GAAG,CAAC,SAAS,KAAK,GAAG;QAAE,OAAO,KAAK,CAAC;IACjE,OAAO,IAAI,CAAC;AACd,CAAC;AAED;;;;;;;GAOG;AACH,MAAM,CAAC,MAAM,YAAY,GAAG,mBAAmB,CAAC;AAEhD,+EAA+E;AAC/E,MAAM,CAAC,MAAM,kBAAkB,GAAG,kBAAkB,CAAC;AAErD,MAAM,UAAU,WAAW,CAAC,MAAc,OAAO,CAAC,GAAG;IACnD,IAAI,GAAG,CAAC,kBAAkB,EAAE,IAAI,EAAE;QAAE,OAAO,GAAG,CAAC,kBAAkB,CAAC,IAAI,EAAE,CAAC;IACzE,IAAI,GAAG,CAAC,mBAAmB,KAAK,GAAG;QAAE,OAAO,kBAAkB,CAAC;IAC/D,OAAO,YAAY,CAAC;AACtB,CAAC;AAED,MAAM,UAAU,YAAY,CAC1B,IAAY,EACZ,KAAc,EACd,MAAc,OAAO,CAAC,GAAG;IAEzB,MAAM,IAAI,GAAG,UAAU,WAAW,CAAC,GAAG,CAAC,IAAI,IAAI,GAAG,CAAC;IACnD,OAAO,KAAK,CAAC,CAAC,CAAC,GAAG,IAAI,UAAU,kBAAkB,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC;AACrE,CAAC;AAED;;;;;;GAMG;AACH,MAAM,UAAU,SAAS,CAAC,IAAY;IACpC,OAAO,oBAAoB,IAAI,EAAE,CAAC;AACpC,CAAC"}
@@ -0,0 +1,9 @@
1
+ export type ExecFileFn = (file: string, args: readonly string[], options?: {
2
+ timeout?: number;
3
+ }) => Promise<{
4
+ stdout: string;
5
+ stderr?: string;
6
+ }>;
7
+ export declare function pickLocalFolder(platform?: NodeJS.Platform, run?: ExecFileFn): Promise<string | undefined>;
8
+ export declare function normalizeDir(raw: string): string | undefined;
9
+ //# sourceMappingURL=pick-folder.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"pick-folder.d.ts","sourceRoot":"","sources":["../src/pick-folder.ts"],"names":[],"mappings":"AAYA,MAAM,MAAM,UAAU,GAAG,CACvB,IAAI,EAAE,MAAM,EACZ,IAAI,EAAE,SAAS,MAAM,EAAE,EACvB,OAAO,CAAC,EAAE;IAAE,OAAO,CAAC,EAAE,MAAM,CAAA;CAAE,KAC3B,OAAO,CAAC;IAAE,MAAM,EAAE,MAAM,CAAC;IAAC,MAAM,CAAC,EAAE,MAAM,CAAA;CAAE,CAAC,CAAC;AAElD,wBAAsB,eAAe,CACnC,QAAQ,GAAE,MAAM,CAAC,QAA2B,EAC5C,GAAG,GAAE,UAGJ,GACA,OAAO,CAAC,MAAM,GAAG,SAAS,CAAC,CAyC7B;AAED,wBAAgB,YAAY,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,GAAG,SAAS,CAG5D"}
@@ -0,0 +1,49 @@
1
+ /**
2
+ * Native folder picker for "Select repository…" in the Console.
3
+ *
4
+ * The browser cannot give us an absolute path (`showDirectoryPicker` is
5
+ * origin-scoped). The hub runs on the user's machine, so it can open the
6
+ * platform dialog and return the POSIX path we then register.
7
+ */
8
+ import { execFile } from "node:child_process";
9
+ import { promisify } from "node:util";
10
+ const execFileAsync = promisify(execFile);
11
+ export async function pickLocalFolder(platform = process.platform, run = async (file, args, options) => {
12
+ const result = await execFileAsync(file, [...args], options);
13
+ return { stdout: String(result.stdout), stderr: String(result.stderr) };
14
+ }) {
15
+ try {
16
+ if (platform === "darwin") {
17
+ const { stdout } = await run("osascript", [
18
+ "-e",
19
+ 'POSIX path of (choose folder with prompt "Select a Prism repository")',
20
+ ], { timeout: 300_000 });
21
+ return normalizeDir(stdout);
22
+ }
23
+ if (platform === "linux") {
24
+ const { stdout } = await run("zenity", [
25
+ "--file-selection",
26
+ "--directory",
27
+ "--title=Select a Prism repository",
28
+ ], { timeout: 300_000 });
29
+ return normalizeDir(stdout);
30
+ }
31
+ if (platform === "win32") {
32
+ const { stdout } = await run("powershell", [
33
+ "-NoProfile",
34
+ "-Command",
35
+ "Add-Type -AssemblyName System.Windows.Forms; $d = New-Object System.Windows.Forms.FolderBrowserDialog; $d.Description = 'Select a Prism repository'; if ($d.ShowDialog() -eq 'OK') { Write-Output $d.SelectedPath }",
36
+ ], { timeout: 300_000 });
37
+ return normalizeDir(stdout);
38
+ }
39
+ }
40
+ catch {
41
+ return undefined;
42
+ }
43
+ return undefined;
44
+ }
45
+ export function normalizeDir(raw) {
46
+ const path = raw.trim().replace(/[/\\]+$/, "");
47
+ return path.length > 0 ? path : undefined;
48
+ }
49
+ //# sourceMappingURL=pick-folder.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"pick-folder.js","sourceRoot":"","sources":["../src/pick-folder.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AACH,OAAO,EAAE,QAAQ,EAAE,MAAM,oBAAoB,CAAC;AAC9C,OAAO,EAAE,SAAS,EAAE,MAAM,WAAW,CAAC;AAEtC,MAAM,aAAa,GAAG,SAAS,CAAC,QAAQ,CAAC,CAAC;AAQ1C,MAAM,CAAC,KAAK,UAAU,eAAe,CACnC,WAA4B,OAAO,CAAC,QAAQ,EAC5C,MAAkB,KAAK,EAAE,IAAI,EAAE,IAAI,EAAE,OAAO,EAAE,EAAE;IAC9C,MAAM,MAAM,GAAG,MAAM,aAAa,CAAC,IAAI,EAAE,CAAC,GAAG,IAAI,CAAC,EAAE,OAAO,CAAC,CAAC;IAC7D,OAAO,EAAE,MAAM,EAAE,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,EAAE,MAAM,EAAE,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,EAAE,CAAC;AAC1E,CAAC;IAED,IAAI,CAAC;QACH,IAAI,QAAQ,KAAK,QAAQ,EAAE,CAAC;YAC1B,MAAM,EAAE,MAAM,EAAE,GAAG,MAAM,GAAG,CAC1B,WAAW,EACX;gBACE,IAAI;gBACJ,uEAAuE;aACxE,EACD,EAAE,OAAO,EAAE,OAAO,EAAE,CACrB,CAAC;YACF,OAAO,YAAY,CAAC,MAAM,CAAC,CAAC;QAC9B,CAAC;QACD,IAAI,QAAQ,KAAK,OAAO,EAAE,CAAC;YACzB,MAAM,EAAE,MAAM,EAAE,GAAG,MAAM,GAAG,CAC1B,QAAQ,EACR;gBACE,kBAAkB;gBAClB,aAAa;gBACb,mCAAmC;aACpC,EACD,EAAE,OAAO,EAAE,OAAO,EAAE,CACrB,CAAC;YACF,OAAO,YAAY,CAAC,MAAM,CAAC,CAAC;QAC9B,CAAC;QACD,IAAI,QAAQ,KAAK,OAAO,EAAE,CAAC;YACzB,MAAM,EAAE,MAAM,EAAE,GAAG,MAAM,GAAG,CAC1B,YAAY,EACZ;gBACE,YAAY;gBACZ,UAAU;gBACV,qNAAqN;aACtN,EACD,EAAE,OAAO,EAAE,OAAO,EAAE,CACrB,CAAC;YACF,OAAO,YAAY,CAAC,MAAM,CAAC,CAAC;QAC9B,CAAC;IACH,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,SAAS,CAAC;IACnB,CAAC;IACD,OAAO,SAAS,CAAC;AACnB,CAAC;AAED,MAAM,UAAU,YAAY,CAAC,GAAW;IACtC,MAAM,IAAI,GAAG,GAAG,CAAC,IAAI,EAAE,CAAC,OAAO,CAAC,SAAS,EAAE,EAAE,CAAC,CAAC;IAC/C,OAAO,IAAI,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,SAAS,CAAC;AAC5C,CAAC"}
@@ -1,8 +1,15 @@
1
1
  import { type HubEnv } from "./paths.js";
2
2
  import type { WorkspaceEntry } from "./types.js";
3
3
  export declare function workspaceLabel(path: string): string;
4
+ /** Test fixtures under packages/.../fixtures — not user checkouts. */
5
+ export declare function isFixtureWorkspacePath(path: string): boolean;
6
+ export declare function isNestedWorkspace(path: string, parent: string): boolean;
7
+ /** Keep top-level checkouts. Drop nested folders and intelligence fixtures. */
8
+ export declare function pruneHubWorkspaces(workspaces: readonly WorkspaceEntry[]): WorkspaceEntry[];
4
9
  export declare function loadRegistry(env?: HubEnv): Promise<WorkspaceEntry[]>;
5
10
  export declare function saveRegistry(workspaces: readonly WorkspaceEntry[], env?: HubEnv): Promise<void>;
6
11
  export declare function registerWorkspace(path: string, env?: HubEnv, now?: () => string): Promise<WorkspaceEntry[]>;
12
+ /** Drop a checkout from the Console. Does not delete the tree or its jobs. */
13
+ export declare function unregisterWorkspace(path: string, env?: HubEnv): Promise<WorkspaceEntry[]>;
7
14
  export declare function dropMissingWorkspaces(exists: (path: string) => Promise<boolean>, env?: HubEnv): Promise<WorkspaceEntry[]>;
8
15
  //# sourceMappingURL=registry.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"registry.d.ts","sourceRoot":"","sources":["../src/registry.ts"],"names":[],"mappings":"AAEA,OAAO,EAA4B,KAAK,MAAM,EAAE,MAAM,YAAY,CAAC;AACnE,OAAO,KAAK,EAAE,cAAc,EAAqB,MAAM,YAAY,CAAC;AAEpE,wBAAgB,cAAc,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAEnD;AAED,wBAAsB,YAAY,CAChC,GAAG,GAAE,MAAoB,GACxB,OAAO,CAAC,cAAc,EAAE,CAAC,CAM3B;AAED,wBAAsB,YAAY,CAChC,UAAU,EAAE,SAAS,cAAc,EAAE,EACrC,GAAG,GAAE,MAAoB,GACxB,OAAO,CAAC,IAAI,CAAC,CAEf;AAED,wBAAsB,iBAAiB,CACrC,IAAI,EAAE,MAAM,EACZ,GAAG,GAAE,MAAoB,EACzB,GAAG,GAAE,MAAM,MAAuC,GACjD,OAAO,CAAC,cAAc,EAAE,CAAC,CAc3B;AAED,wBAAsB,qBAAqB,CACzC,MAAM,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,OAAO,CAAC,OAAO,CAAC,EAC1C,GAAG,GAAE,MAAoB,GACxB,OAAO,CAAC,cAAc,EAAE,CAAC,CAU3B"}
1
+ {"version":3,"file":"registry.d.ts","sourceRoot":"","sources":["../src/registry.ts"],"names":[],"mappings":"AAEA,OAAO,EAA4B,KAAK,MAAM,EAAE,MAAM,YAAY,CAAC;AACnE,OAAO,KAAK,EAAE,cAAc,EAAqB,MAAM,YAAY,CAAC;AAEpE,wBAAgB,cAAc,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAEnD;AAMD,sEAAsE;AACtE,wBAAgB,sBAAsB,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAI5D;AAED,wBAAgB,iBAAiB,CAAC,IAAI,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,GAAG,OAAO,CAMvE;AAED,+EAA+E;AAC/E,wBAAgB,kBAAkB,CAChC,UAAU,EAAE,SAAS,cAAc,EAAE,GACpC,cAAc,EAAE,CAUlB;AAED,wBAAsB,YAAY,CAChC,GAAG,GAAE,MAAoB,GACxB,OAAO,CAAC,cAAc,EAAE,CAAC,CAM3B;AAED,wBAAsB,YAAY,CAChC,UAAU,EAAE,SAAS,cAAc,EAAE,EACrC,GAAG,GAAE,MAAoB,GACxB,OAAO,CAAC,IAAI,CAAC,CAEf;AAED,wBAAsB,iBAAiB,CACrC,IAAI,EAAE,MAAM,EACZ,GAAG,GAAE,MAAoB,EACzB,GAAG,GAAE,MAAM,MAAuC,GACjD,OAAO,CAAC,cAAc,EAAE,CAAC,CAmB3B;AAED,8EAA8E;AAC9E,wBAAsB,mBAAmB,CACvC,IAAI,EAAE,MAAM,EACZ,GAAG,GAAE,MAAoB,GACxB,OAAO,CAAC,cAAc,EAAE,CAAC,CAO3B;AAED,wBAAsB,qBAAqB,CACzC,MAAM,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,OAAO,CAAC,OAAO,CAAC,EAC1C,GAAG,GAAE,MAAoB,GACxB,OAAO,CAAC,cAAc,EAAE,CAAC,CAc3B"}
package/dist/registry.js CHANGED
@@ -1,9 +1,29 @@
1
- import { basename } from "node:path";
1
+ import { basename, resolve, sep } from "node:path";
2
2
  import { readJsonFile, writeJsonFile } from "./json-file.js";
3
3
  import { hubHome, hubRegistryPath } from "./paths.js";
4
4
  export function workspaceLabel(path) {
5
5
  return basename(path.replace(/[/\\]+$/, "")) || path;
6
6
  }
7
+ function resolvedPath(path) {
8
+ return resolve(path).replace(/[/\\]+$/, "");
9
+ }
10
+ /** Test fixtures under packages/.../fixtures — not user checkouts. */
11
+ export function isFixtureWorkspacePath(path) {
12
+ return /(?:^|[/\\])(?:packages|apps)[/\\][^/\\]+[/\\]fixtures[/\\]/.test(path.replace(/\\/g, "/"));
13
+ }
14
+ export function isNestedWorkspace(path, parent) {
15
+ const child = resolvedPath(path);
16
+ const root = resolvedPath(parent);
17
+ if (child === root)
18
+ return false;
19
+ const prefix = root.endsWith(sep) ? root : root + sep;
20
+ return child.startsWith(prefix);
21
+ }
22
+ /** Keep top-level checkouts. Drop nested folders and intelligence fixtures. */
23
+ export function pruneHubWorkspaces(workspaces) {
24
+ const withoutFixtures = workspaces.filter((entry) => !isFixtureWorkspacePath(entry.path));
25
+ return withoutFixtures.filter((entry) => !withoutFixtures.some((other) => isNestedWorkspace(entry.path, other.path)));
26
+ }
7
27
  export async function loadRegistry(env = process.env) {
8
28
  const file = await readJsonFile(hubRegistryPath(hubHome(env)), { workspaces: [] });
9
29
  return [...(file.workspaces ?? [])];
@@ -16,25 +36,44 @@ export async function registerWorkspace(path, env = process.env, now = () => new
16
36
  if (!root)
17
37
  return loadRegistry(env);
18
38
  const current = await loadRegistry(env);
19
- const next = [
39
+ if (isFixtureWorkspacePath(root)) {
40
+ const kept = pruneHubWorkspaces(current);
41
+ if (kept.length !== current.length)
42
+ await saveRegistry(kept, env);
43
+ return kept;
44
+ }
45
+ const next = pruneHubWorkspaces([
20
46
  ...current.filter((entry) => entry.path !== root),
21
47
  {
22
48
  path: root,
23
49
  label: workspaceLabel(root),
24
50
  lastSeenAt: now(),
25
51
  },
26
- ];
52
+ ]);
27
53
  await saveRegistry(next, env);
28
54
  return next;
29
55
  }
56
+ /** Drop a checkout from the Console. Does not delete the tree or its jobs. */
57
+ export async function unregisterWorkspace(path, env = process.env) {
58
+ const root = resolvedPath(path.trim());
59
+ if (!root)
60
+ return loadRegistry(env);
61
+ const current = await loadRegistry(env);
62
+ const next = current.filter((entry) => resolvedPath(entry.path) !== root);
63
+ if (next.length !== current.length)
64
+ await saveRegistry(next, env);
65
+ return next;
66
+ }
30
67
  export async function dropMissingWorkspaces(exists, env = process.env) {
31
68
  const current = await loadRegistry(env);
32
- const kept = [];
69
+ const present = [];
33
70
  for (const entry of current) {
34
71
  if (await exists(entry.path))
35
- kept.push(entry);
72
+ present.push(entry);
36
73
  }
37
- if (kept.length !== current.length) {
74
+ const kept = pruneHubWorkspaces(present);
75
+ if (kept.length !== current.length ||
76
+ kept.some((entry, index) => entry.path !== current[index]?.path)) {
38
77
  await saveRegistry(kept, env);
39
78
  }
40
79
  return kept;
@@ -1 +1 @@
1
- {"version":3,"file":"registry.js","sourceRoot":"","sources":["../src/registry.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,WAAW,CAAC;AACrC,OAAO,EAAE,YAAY,EAAE,aAAa,EAAE,MAAM,gBAAgB,CAAC;AAC7D,OAAO,EAAE,OAAO,EAAE,eAAe,EAAe,MAAM,YAAY,CAAC;AAGnE,MAAM,UAAU,cAAc,CAAC,IAAY;IACzC,OAAO,QAAQ,CAAC,IAAI,CAAC,OAAO,CAAC,SAAS,EAAE,EAAE,CAAC,CAAC,IAAI,IAAI,CAAC;AACvD,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,YAAY,CAChC,MAAc,OAAO,CAAC,GAAG;IAEzB,MAAM,IAAI,GAAG,MAAM,YAAY,CAC7B,eAAe,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,EAC7B,EAAE,UAAU,EAAE,EAAE,EAAE,CACnB,CAAC;IACF,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,UAAU,IAAI,EAAE,CAAC,CAAC,CAAC;AACtC,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,YAAY,CAChC,UAAqC,EACrC,MAAc,OAAO,CAAC,GAAG;IAEzB,MAAM,aAAa,CAAC,eAAe,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,EAAE,EAAE,UAAU,EAAE,CAAC,CAAC;AACrE,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,iBAAiB,CACrC,IAAY,EACZ,MAAc,OAAO,CAAC,GAAG,EACzB,MAAoB,GAAG,EAAE,CAAC,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE;IAElD,MAAM,IAAI,GAAG,IAAI,CAAC,IAAI,EAAE,CAAC;IACzB,IAAI,CAAC,IAAI;QAAE,OAAO,YAAY,CAAC,GAAG,CAAC,CAAC;IACpC,MAAM,OAAO,GAAG,MAAM,YAAY,CAAC,GAAG,CAAC,CAAC;IACxC,MAAM,IAAI,GAAqB;QAC7B,GAAG,OAAO,CAAC,MAAM,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,CAAC,IAAI,KAAK,IAAI,CAAC;QACjD;YACE,IAAI,EAAE,IAAI;YACV,KAAK,EAAE,cAAc,CAAC,IAAI,CAAC;YAC3B,UAAU,EAAE,GAAG,EAAE;SAClB;KACF,CAAC;IACF,MAAM,YAAY,CAAC,IAAI,EAAE,GAAG,CAAC,CAAC;IAC9B,OAAO,IAAI,CAAC;AACd,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,qBAAqB,CACzC,MAA0C,EAC1C,MAAc,OAAO,CAAC,GAAG;IAEzB,MAAM,OAAO,GAAG,MAAM,YAAY,CAAC,GAAG,CAAC,CAAC;IACxC,MAAM,IAAI,GAAqB,EAAE,CAAC;IAClC,KAAK,MAAM,KAAK,IAAI,OAAO,EAAE,CAAC;QAC5B,IAAI,MAAM,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC;YAAE,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;IACjD,CAAC;IACD,IAAI,IAAI,CAAC,MAAM,KAAK,OAAO,CAAC,MAAM,EAAE,CAAC;QACnC,MAAM,YAAY,CAAC,IAAI,EAAE,GAAG,CAAC,CAAC;IAChC,CAAC;IACD,OAAO,IAAI,CAAC;AACd,CAAC"}
1
+ {"version":3,"file":"registry.js","sourceRoot":"","sources":["../src/registry.ts"],"names":[],"mappings":"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"}
package/dist/server.d.ts CHANGED
@@ -1,7 +1,13 @@
1
+ import { type WorkerBackend, type WorkerModelOption } from "@repo-prism/dispatch";
2
+ import { type IntelligencePlane } from "./intelligence.js";
1
3
  import { type NotifyFn } from "./notify.js";
2
4
  import { type HubEnv } from "./paths.js";
3
5
  import type { HubRecord } from "./types.js";
4
- export type JobControlFn = (workspacePath: string, jobId: string, action: string) => Promise<unknown>;
6
+ export type JobControlFn = (workspacePath: string, jobId: string, action: string, extra?: {
7
+ readonly path?: string;
8
+ readonly context?: string;
9
+ }) => Promise<unknown>;
10
+ export type JobStartFn = (workspacePath: string, args: Record<string, unknown>) => Promise<unknown>;
5
11
  export type HubOptions = {
6
12
  readonly env?: HubEnv;
7
13
  readonly notify?: NotifyFn;
@@ -9,7 +15,18 @@ export type HubOptions = {
9
15
  readonly pollMs?: number;
10
16
  readonly assetsDir?: string;
11
17
  readonly control?: JobControlFn;
18
+ readonly startJob?: JobStartFn;
12
19
  readonly version?: string;
20
+ /** Injected in tests; production drains through `@repo-prism/dispatch`. */
21
+ readonly drain?: (workspacePath: string) => Promise<void>;
22
+ /** Injected in tests; production lazily imports Core (ADR-0048). */
23
+ readonly intelligence?: IntelligencePlane;
24
+ /** Injected in tests; production opens the native folder picker. */
25
+ readonly pickFolder?: () => Promise<string | undefined>;
26
+ /** Injected in tests; production asks the selected agent for its model list. */
27
+ readonly listWorkerModels?: (input: {
28
+ readonly backend: WorkerBackend;
29
+ }) => Promise<readonly WorkerModelOption[]>;
13
30
  };
14
31
  export type StartedHub = {
15
32
  readonly record: HubRecord;
@@ -1 +1 @@
1
- {"version":3,"file":"server.d.ts","sourceRoot":"","sources":["../src/server.ts"],"names":[],"mappings":"AAoBA,OAAO,EAAoB,KAAK,QAAQ,EAAE,MAAM,aAAa,CAAC;AAC9D,OAAO,EAAyB,KAAK,MAAM,EAAE,MAAM,YAAY,CAAC;AAEhE,OAAO,KAAK,EAEV,SAAS,EAGV,MAAM,YAAY,CAAC;AAgBpB,MAAM,MAAM,YAAY,GAAG,CACzB,aAAa,EAAE,MAAM,EACrB,KAAK,EAAE,MAAM,EACb,MAAM,EAAE,MAAM,KACX,OAAO,CAAC,OAAO,CAAC,CAAC;AAEtB,MAAM,MAAM,UAAU,GAAG;IACvB,QAAQ,CAAC,GAAG,CAAC,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,MAAM,CAAC,EAAE,QAAQ,CAAC;IAC3B,QAAQ,CAAC,MAAM,CAAC,EAAE,MAAM,CAAC;IACzB,QAAQ,CAAC,MAAM,CAAC,EAAE,MAAM,CAAC;IACzB,QAAQ,CAAC,SAAS,CAAC,EAAE,MAAM,CAAC;IAC5B,QAAQ,CAAC,OAAO,CAAC,EAAE,YAAY,CAAC;IAChC,QAAQ,CAAC,OAAO,CAAC,EAAE,MAAM,CAAC;CAC3B,CAAC;AAEF,MAAM,MAAM,UAAU,GAAG;IACvB,QAAQ,CAAC,MAAM,EAAE,SAAS,CAAC;IAC3B,QAAQ,CAAC,GAAG,EAAE,MAAM,CAAC;IACrB,QAAQ,CAAC,KAAK,EAAE,MAAM,OAAO,CAAC,IAAI,CAAC,CAAC;CACrC,CAAC;AAuBF,wBAAsB,QAAQ,CAC5B,OAAO,GAAE,UAAe,GACvB,OAAO,CAAC,UAAU,GAAG;IAAE,cAAc,EAAE,IAAI,CAAA;CAAE,CAAC,CAyQhD"}
1
+ {"version":3,"file":"server.d.ts","sourceRoot":"","sources":["../src/server.ts"],"names":[],"mappings":"AAUA,OAAO,EAiBL,KAAK,aAAa,EAClB,KAAK,iBAAiB,EACvB,MAAM,sBAAsB,CAAC;AAS9B,OAAO,EAEL,KAAK,iBAAiB,EACvB,MAAM,mBAAmB,CAAC;AAS3B,OAAO,EAAoB,KAAK,QAAQ,EAAE,MAAM,aAAa,CAAC;AAE9D,OAAO,EAAyB,KAAK,MAAM,EAAE,MAAM,YAAY,CAAC;AAShE,OAAO,KAAK,EAEV,SAAS,EAIV,MAAM,YAAY,CAAC;AAiBpB,MAAM,MAAM,YAAY,GAAG,CACzB,aAAa,EAAE,MAAM,EACrB,KAAK,EAAE,MAAM,EACb,MAAM,EAAE,MAAM,EACd,KAAK,CAAC,EAAE;IAAE,QAAQ,CAAC,IAAI,CAAC,EAAE,MAAM,CAAC;IAAC,QAAQ,CAAC,OAAO,CAAC,EAAE,MAAM,CAAA;CAAE,KAC1D,OAAO,CAAC,OAAO,CAAC,CAAC;AAEtB,MAAM,MAAM,UAAU,GAAG,CACvB,aAAa,EAAE,MAAM,EACrB,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,KAC1B,OAAO,CAAC,OAAO,CAAC,CAAC;AAEtB,MAAM,MAAM,UAAU,GAAG;IACvB,QAAQ,CAAC,GAAG,CAAC,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,MAAM,CAAC,EAAE,QAAQ,CAAC;IAC3B,QAAQ,CAAC,MAAM,CAAC,EAAE,MAAM,CAAC;IACzB,QAAQ,CAAC,MAAM,CAAC,EAAE,MAAM,CAAC;IACzB,QAAQ,CAAC,SAAS,CAAC,EAAE,MAAM,CAAC;IAC5B,QAAQ,CAAC,OAAO,CAAC,EAAE,YAAY,CAAC;IAChC,QAAQ,CAAC,QAAQ,CAAC,EAAE,UAAU,CAAC;IAC/B,QAAQ,CAAC,OAAO,CAAC,EAAE,MAAM,CAAC;IAC1B,2EAA2E;IAC3E,QAAQ,CAAC,KAAK,CAAC,EAAE,CAAC,aAAa,EAAE,MAAM,KAAK,OAAO,CAAC,IAAI,CAAC,CAAC;IAC1D,oEAAoE;IACpE,QAAQ,CAAC,YAAY,CAAC,EAAE,iBAAiB,CAAC;IAC1C,oEAAoE;IACpE,QAAQ,CAAC,UAAU,CAAC,EAAE,MAAM,OAAO,CAAC,MAAM,GAAG,SAAS,CAAC,CAAC;IACxD,gFAAgF;IAChF,QAAQ,CAAC,gBAAgB,CAAC,EAAE,CAAC,KAAK,EAAE;QAClC,QAAQ,CAAC,OAAO,EAAE,aAAa,CAAC;KACjC,KAAK,OAAO,CAAC,SAAS,iBAAiB,EAAE,CAAC,CAAC;CAC7C,CAAC;AAEF,MAAM,MAAM,UAAU,GAAG;IACvB,QAAQ,CAAC,MAAM,EAAE,SAAS,CAAC;IAC3B,QAAQ,CAAC,GAAG,EAAE,MAAM,CAAC;IACrB,QAAQ,CAAC,KAAK,EAAE,MAAM,OAAO,CAAC,IAAI,CAAC,CAAC;CACrC,CAAC;AAkEF,wBAAsB,QAAQ,CAC5B,OAAO,GAAE,UAAe,GACvB,OAAO,CAAC,UAAU,GAAG;IAAE,cAAc,EAAE,IAAI,CAAA;CAAE,CAAC,CAkoBhD"}