@portel/photon 1.22.1 → 1.23.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 (211) hide show
  1. package/README.md +19 -8
  2. package/dist/a2ui/mapper.d.ts +40 -0
  3. package/dist/a2ui/mapper.d.ts.map +1 -0
  4. package/dist/a2ui/mapper.js +286 -0
  5. package/dist/a2ui/mapper.js.map +1 -0
  6. package/dist/a2ui/types.d.ts +129 -0
  7. package/dist/a2ui/types.d.ts.map +1 -0
  8. package/dist/a2ui/types.js +20 -0
  9. package/dist/a2ui/types.js.map +1 -0
  10. package/dist/ag-ui/adapter.d.ts +9 -1
  11. package/dist/ag-ui/adapter.d.ts.map +1 -1
  12. package/dist/ag-ui/adapter.js +33 -16
  13. package/dist/ag-ui/adapter.js.map +1 -1
  14. package/dist/auto-ui/beam/routes/api-daemon.d.ts +18 -0
  15. package/dist/auto-ui/beam/routes/api-daemon.d.ts.map +1 -0
  16. package/dist/auto-ui/beam/routes/api-daemon.js +118 -0
  17. package/dist/auto-ui/beam/routes/api-daemon.js.map +1 -0
  18. package/dist/auto-ui/beam.d.ts.map +1 -1
  19. package/dist/auto-ui/beam.js +34 -34
  20. package/dist/auto-ui/beam.js.map +1 -1
  21. package/dist/auto-ui/bridge/renderers.d.ts.map +1 -1
  22. package/dist/auto-ui/bridge/renderers.js +371 -0
  23. package/dist/auto-ui/bridge/renderers.js.map +1 -1
  24. package/dist/auto-ui/streamable-http-transport.d.ts.map +1 -1
  25. package/dist/auto-ui/streamable-http-transport.js +38 -1
  26. package/dist/auto-ui/streamable-http-transport.js.map +1 -1
  27. package/dist/auto-ui/types.d.ts +19 -0
  28. package/dist/auto-ui/types.d.ts.map +1 -1
  29. package/dist/auto-ui/types.js.map +1 -1
  30. package/dist/beam.bundle.js +757 -107
  31. package/dist/beam.bundle.js.map +4 -4
  32. package/dist/cli/commands/beam.d.ts.map +1 -1
  33. package/dist/cli/commands/beam.js +2 -0
  34. package/dist/cli/commands/beam.js.map +1 -1
  35. package/dist/cli/commands/build.d.ts.map +1 -1
  36. package/dist/cli/commands/build.js +2 -0
  37. package/dist/cli/commands/build.js.map +1 -1
  38. package/dist/cli/commands/doctor.d.ts.map +1 -1
  39. package/dist/cli/commands/doctor.js +92 -3
  40. package/dist/cli/commands/doctor.js.map +1 -1
  41. package/dist/cli/commands/host.d.ts.map +1 -1
  42. package/dist/cli/commands/host.js +9 -1
  43. package/dist/cli/commands/host.js.map +1 -1
  44. package/dist/cli/commands/info.d.ts.map +1 -1
  45. package/dist/cli/commands/info.js +7 -3
  46. package/dist/cli/commands/info.js.map +1 -1
  47. package/dist/cli/commands/init.d.ts.map +1 -1
  48. package/dist/cli/commands/init.js +4 -0
  49. package/dist/cli/commands/init.js.map +1 -1
  50. package/dist/cli/commands/maker.d.ts +8 -0
  51. package/dist/cli/commands/maker.d.ts.map +1 -1
  52. package/dist/cli/commands/maker.js +113 -46
  53. package/dist/cli/commands/maker.js.map +1 -1
  54. package/dist/cli/commands/marketplace.d.ts.map +1 -1
  55. package/dist/cli/commands/marketplace.js +7 -1
  56. package/dist/cli/commands/marketplace.js.map +1 -1
  57. package/dist/cli/commands/mcp.d.ts +10 -0
  58. package/dist/cli/commands/mcp.d.ts.map +1 -1
  59. package/dist/cli/commands/mcp.js +215 -4
  60. package/dist/cli/commands/mcp.js.map +1 -1
  61. package/dist/cli/commands/package.d.ts.map +1 -1
  62. package/dist/cli/commands/package.js +33 -15
  63. package/dist/cli/commands/package.js.map +1 -1
  64. package/dist/cli/commands/ps.d.ts +16 -0
  65. package/dist/cli/commands/ps.d.ts.map +1 -0
  66. package/dist/cli/commands/ps.js +267 -0
  67. package/dist/cli/commands/ps.js.map +1 -0
  68. package/dist/cli/commands/run.d.ts.map +1 -1
  69. package/dist/cli/commands/run.js +7 -0
  70. package/dist/cli/commands/run.js.map +1 -1
  71. package/dist/cli/commands/update.d.ts.map +1 -1
  72. package/dist/cli/commands/update.js +14 -4
  73. package/dist/cli/commands/update.js.map +1 -1
  74. package/dist/cli/index.d.ts.map +1 -1
  75. package/dist/cli/index.js +9 -4
  76. package/dist/cli/index.js.map +1 -1
  77. package/dist/context-store.d.ts +4 -4
  78. package/dist/context-store.d.ts.map +1 -1
  79. package/dist/context-store.js +20 -17
  80. package/dist/context-store.js.map +1 -1
  81. package/dist/context.d.ts +5 -4
  82. package/dist/context.d.ts.map +1 -1
  83. package/dist/context.js +68 -14
  84. package/dist/context.js.map +1 -1
  85. package/dist/daemon/client.d.ts +60 -0
  86. package/dist/daemon/client.d.ts.map +1 -1
  87. package/dist/daemon/client.js +76 -0
  88. package/dist/daemon/client.js.map +1 -1
  89. package/dist/daemon/execution-history-sqlite.d.ts +50 -0
  90. package/dist/daemon/execution-history-sqlite.d.ts.map +1 -0
  91. package/dist/daemon/execution-history-sqlite.js +165 -0
  92. package/dist/daemon/execution-history-sqlite.js.map +1 -0
  93. package/dist/daemon/execution-history.d.ts +78 -0
  94. package/dist/daemon/execution-history.d.ts.map +1 -0
  95. package/dist/daemon/execution-history.js +246 -0
  96. package/dist/daemon/execution-history.js.map +1 -0
  97. package/dist/daemon/hot-reload-state.d.ts +27 -0
  98. package/dist/daemon/hot-reload-state.d.ts.map +1 -0
  99. package/dist/daemon/hot-reload-state.js +48 -0
  100. package/dist/daemon/hot-reload-state.js.map +1 -0
  101. package/dist/daemon/protocol.d.ts +5 -1
  102. package/dist/daemon/protocol.d.ts.map +1 -1
  103. package/dist/daemon/protocol.js +13 -0
  104. package/dist/daemon/protocol.js.map +1 -1
  105. package/dist/daemon/registry-keys.d.ts +88 -0
  106. package/dist/daemon/registry-keys.d.ts.map +1 -0
  107. package/dist/daemon/registry-keys.js +91 -0
  108. package/dist/daemon/registry-keys.js.map +1 -0
  109. package/dist/daemon/server.js +1521 -186
  110. package/dist/daemon/server.js.map +1 -1
  111. package/dist/daemon/session-resolver.d.ts +28 -0
  112. package/dist/daemon/session-resolver.d.ts.map +1 -0
  113. package/dist/daemon/session-resolver.js +41 -0
  114. package/dist/daemon/session-resolver.js.map +1 -0
  115. package/dist/data-migration.js +20 -9
  116. package/dist/data-migration.js.map +1 -1
  117. package/dist/loader.d.ts +22 -8
  118. package/dist/loader.d.ts.map +1 -1
  119. package/dist/loader.js +214 -94
  120. package/dist/loader.js.map +1 -1
  121. package/dist/marketplace-manager.d.ts.map +1 -1
  122. package/dist/marketplace-manager.js +9 -5
  123. package/dist/marketplace-manager.js.map +1 -1
  124. package/dist/namespace-migration.d.ts.map +1 -1
  125. package/dist/namespace-migration.js +28 -23
  126. package/dist/namespace-migration.js.map +1 -1
  127. package/dist/photon-cli-runner.d.ts.map +1 -1
  128. package/dist/photon-cli-runner.js +57 -8
  129. package/dist/photon-cli-runner.js.map +1 -1
  130. package/dist/serv/auth/auth-store.d.ts +155 -0
  131. package/dist/serv/auth/auth-store.d.ts.map +1 -0
  132. package/dist/serv/auth/auth-store.js +240 -0
  133. package/dist/serv/auth/auth-store.js.map +1 -0
  134. package/dist/serv/auth/endpoints.d.ts +113 -0
  135. package/dist/serv/auth/endpoints.d.ts.map +1 -0
  136. package/dist/serv/auth/endpoints.js +1005 -0
  137. package/dist/serv/auth/endpoints.js.map +1 -0
  138. package/dist/serv/auth/http-adapter.d.ts +60 -0
  139. package/dist/serv/auth/http-adapter.d.ts.map +1 -0
  140. package/dist/serv/auth/http-adapter.js +235 -0
  141. package/dist/serv/auth/http-adapter.js.map +1 -0
  142. package/dist/serv/auth/jwt.d.ts +92 -6
  143. package/dist/serv/auth/jwt.d.ts.map +1 -1
  144. package/dist/serv/auth/jwt.js +226 -24
  145. package/dist/serv/auth/jwt.js.map +1 -1
  146. package/dist/serv/auth/oauth-sqlite-stores.d.ts +48 -0
  147. package/dist/serv/auth/oauth-sqlite-stores.d.ts.map +1 -0
  148. package/dist/serv/auth/oauth-sqlite-stores.js +212 -0
  149. package/dist/serv/auth/oauth-sqlite-stores.js.map +1 -0
  150. package/dist/serv/auth/sqlite-stores.d.ts +85 -0
  151. package/dist/serv/auth/sqlite-stores.d.ts.map +1 -0
  152. package/dist/serv/auth/sqlite-stores.js +446 -0
  153. package/dist/serv/auth/sqlite-stores.js.map +1 -0
  154. package/dist/serv/auth/well-known.d.ts +54 -1
  155. package/dist/serv/auth/well-known.d.ts.map +1 -1
  156. package/dist/serv/auth/well-known.js +166 -17
  157. package/dist/serv/auth/well-known.js.map +1 -1
  158. package/dist/serv/index.d.ts +45 -2
  159. package/dist/serv/index.d.ts.map +1 -1
  160. package/dist/serv/index.js +65 -1
  161. package/dist/serv/index.js.map +1 -1
  162. package/dist/serv/types/index.d.ts +80 -0
  163. package/dist/serv/types/index.d.ts.map +1 -1
  164. package/dist/serv/types/index.js.map +1 -1
  165. package/dist/server.d.ts.map +1 -1
  166. package/dist/server.js +61 -6
  167. package/dist/server.js.map +1 -1
  168. package/dist/shared/announce-context.d.ts +51 -0
  169. package/dist/shared/announce-context.d.ts.map +1 -0
  170. package/dist/shared/announce-context.js +73 -0
  171. package/dist/shared/announce-context.js.map +1 -0
  172. package/dist/shared/audit-sqlite.d.ts +63 -0
  173. package/dist/shared/audit-sqlite.d.ts.map +1 -0
  174. package/dist/shared/audit-sqlite.js +187 -0
  175. package/dist/shared/audit-sqlite.js.map +1 -0
  176. package/dist/shared/audit.d.ts +25 -3
  177. package/dist/shared/audit.d.ts.map +1 -1
  178. package/dist/shared/audit.js +97 -3
  179. package/dist/shared/audit.js.map +1 -1
  180. package/dist/shared/error-handler.d.ts +10 -1
  181. package/dist/shared/error-handler.d.ts.map +1 -1
  182. package/dist/shared/error-handler.js +17 -2
  183. package/dist/shared/error-handler.js.map +1 -1
  184. package/dist/shared/security.d.ts +12 -0
  185. package/dist/shared/security.d.ts.map +1 -1
  186. package/dist/shared/security.js +80 -0
  187. package/dist/shared/security.js.map +1 -1
  188. package/dist/shared/sqlite-runtime.d.ts +46 -0
  189. package/dist/shared/sqlite-runtime.d.ts.map +1 -0
  190. package/dist/shared/sqlite-runtime.js +110 -0
  191. package/dist/shared/sqlite-runtime.js.map +1 -0
  192. package/dist/tasks/store.d.ts +1 -1
  193. package/dist/tasks/store.d.ts.map +1 -1
  194. package/dist/tasks/store.js +29 -15
  195. package/dist/tasks/store.js.map +1 -1
  196. package/dist/telemetry/metrics.d.ts +26 -0
  197. package/dist/telemetry/metrics.d.ts.map +1 -1
  198. package/dist/telemetry/metrics.js +31 -0
  199. package/dist/telemetry/metrics.js.map +1 -1
  200. package/dist/test-runner.d.ts.map +1 -1
  201. package/dist/test-runner.js +3 -3
  202. package/dist/test-runner.js.map +1 -1
  203. package/dist/version-checker.d.ts.map +1 -1
  204. package/dist/version-checker.js +7 -14
  205. package/dist/version-checker.js.map +1 -1
  206. package/dist/version.d.ts +12 -0
  207. package/dist/version.d.ts.map +1 -1
  208. package/dist/version.js +103 -1
  209. package/dist/version.js.map +1 -1
  210. package/package.json +6 -2
  211. package/templates/photon.template.ts +7 -13
@@ -0,0 +1,73 @@
1
+ /**
2
+ * CLI context transparency helper.
3
+ *
4
+ * Agent-first output: default is minimal (just the command result), so
5
+ * tool-calling agents don't see a wall of prose. When the user passes
6
+ * `-v` / `--verbose` (or sets `PHOTON_VERBOSE=1`), commands emit `→`
7
+ * prefixed context lines showing PHOTON_DIR, the resolved photon, and
8
+ * the target path. When the user passes `--json`, the command includes
9
+ * a structured `context` envelope in its output.
10
+ *
11
+ * Rule of thumb for adopters: any command whose behavior depends on
12
+ * which PHOTON_DIR is resolved should call `announceContext()` once at
13
+ * entry so a user running `-v` can audit the decision. Commands that
14
+ * already support `--json` should merge `contextEnvelope()` into their
15
+ * response envelope.
16
+ *
17
+ * See docs/internals/PHOTON-DIR-AND-NAMESPACE.md and the codebase audit
18
+ * (§10) for the full list of PHOTON_DIR-sensitive commands and the
19
+ * migration status.
20
+ */
21
+ import { getDefaultContext } from '../context.js';
22
+ function argvHas(flag, short) {
23
+ return process.argv.includes(flag) || (short !== undefined && process.argv.includes(short));
24
+ }
25
+ /** True when the caller opted into transparency via argv or env. */
26
+ export function isVerbose() {
27
+ if (argvHas('--quiet', '-q'))
28
+ return false;
29
+ if (process.env.PHOTON_VERBOSE === '1')
30
+ return true;
31
+ if (argvHas('--verbose', '-v'))
32
+ return true;
33
+ return false;
34
+ }
35
+ /** Build the structured context envelope for `--json` mode. */
36
+ export function contextEnvelope(opts = {}) {
37
+ const ctx = getDefaultContext();
38
+ const env = {
39
+ photonDir: ctx.baseDir,
40
+ dataDir: ctx.dataDir,
41
+ };
42
+ if (opts.photon !== undefined)
43
+ env.photon = opts.photon;
44
+ if (opts.action !== undefined)
45
+ env.action = opts.action;
46
+ if (opts.target !== undefined)
47
+ env.target = opts.target;
48
+ return env;
49
+ }
50
+ /**
51
+ * Print transparency lines to stderr when verbose is enabled. No-op
52
+ * otherwise so default output stays clean for agents and scripts.
53
+ */
54
+ export function announceContext(opts = {}) {
55
+ const verbose = opts.verbose ?? isVerbose();
56
+ if (!verbose)
57
+ return;
58
+ const ctx = getDefaultContext();
59
+ const lines = [];
60
+ lines.push(`→ PHOTON_DIR: ${ctx.baseDir}`);
61
+ if (opts.photon)
62
+ lines.push(`→ Photon: ${opts.photon}`);
63
+ if (opts.action && opts.target) {
64
+ lines.push(`→ ${opts.action}: ${opts.target}`);
65
+ }
66
+ else if (opts.target) {
67
+ lines.push(`→ Target: ${opts.target}`);
68
+ }
69
+ if (opts.hint)
70
+ lines.push(` ${opts.hint}`);
71
+ process.stderr.write(lines.join('\n') + '\n');
72
+ }
73
+ //# sourceMappingURL=announce-context.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"announce-context.js","sourceRoot":"","sources":["../../src/shared/announce-context.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;GAmBG;AAEH,OAAO,EAAE,iBAAiB,EAAE,MAAM,eAAe,CAAC;AAyBlD,SAAS,OAAO,CAAC,IAAY,EAAE,KAAc;IAC3C,OAAO,OAAO,CAAC,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC,KAAK,KAAK,SAAS,IAAI,OAAO,CAAC,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC,CAAC;AAC9F,CAAC;AAED,oEAAoE;AACpE,MAAM,UAAU,SAAS;IACvB,IAAI,OAAO,CAAC,SAAS,EAAE,IAAI,CAAC;QAAE,OAAO,KAAK,CAAC;IAC3C,IAAI,OAAO,CAAC,GAAG,CAAC,cAAc,KAAK,GAAG;QAAE,OAAO,IAAI,CAAC;IACpD,IAAI,OAAO,CAAC,WAAW,EAAE,IAAI,CAAC;QAAE,OAAO,IAAI,CAAC;IAC5C,OAAO,KAAK,CAAC;AACf,CAAC;AAED,+DAA+D;AAC/D,MAAM,UAAU,eAAe,CAAC,OAAwB,EAAE;IACxD,MAAM,GAAG,GAAG,iBAAiB,EAAE,CAAC;IAChC,MAAM,GAAG,GAAoB;QAC3B,SAAS,EAAE,GAAG,CAAC,OAAO;QACtB,OAAO,EAAE,GAAG,CAAC,OAAO;KACrB,CAAC;IACF,IAAI,IAAI,CAAC,MAAM,KAAK,SAAS;QAAE,GAAG,CAAC,MAAM,GAAG,IAAI,CAAC,MAAM,CAAC;IACxD,IAAI,IAAI,CAAC,MAAM,KAAK,SAAS;QAAE,GAAG,CAAC,MAAM,GAAG,IAAI,CAAC,MAAM,CAAC;IACxD,IAAI,IAAI,CAAC,MAAM,KAAK,SAAS;QAAE,GAAG,CAAC,MAAM,GAAG,IAAI,CAAC,MAAM,CAAC;IACxD,OAAO,GAAG,CAAC;AACb,CAAC;AAED;;;GAGG;AACH,MAAM,UAAU,eAAe,CAAC,OAAwB,EAAE;IACxD,MAAM,OAAO,GAAG,IAAI,CAAC,OAAO,IAAI,SAAS,EAAE,CAAC;IAC5C,IAAI,CAAC,OAAO;QAAE,OAAO;IACrB,MAAM,GAAG,GAAG,iBAAiB,EAAE,CAAC;IAChC,MAAM,KAAK,GAAa,EAAE,CAAC;IAC3B,KAAK,CAAC,IAAI,CAAC,iBAAiB,GAAG,CAAC,OAAO,EAAE,CAAC,CAAC;IAC3C,IAAI,IAAI,CAAC,MAAM;QAAE,KAAK,CAAC,IAAI,CAAC,iBAAiB,IAAI,CAAC,MAAM,EAAE,CAAC,CAAC;IAC5D,IAAI,IAAI,CAAC,MAAM,IAAI,IAAI,CAAC,MAAM,EAAE,CAAC;QAC/B,KAAK,CAAC,IAAI,CAAC,KAAK,IAAI,CAAC,MAAM,KAAK,IAAI,CAAC,MAAM,EAAE,CAAC,CAAC;IACjD,CAAC;SAAM,IAAI,IAAI,CAAC,MAAM,EAAE,CAAC;QACvB,KAAK,CAAC,IAAI,CAAC,iBAAiB,IAAI,CAAC,MAAM,EAAE,CAAC,CAAC;IAC7C,CAAC;IACD,IAAI,IAAI,CAAC,IAAI;QAAE,KAAK,CAAC,IAAI,CAAC,KAAK,IAAI,CAAC,IAAI,EAAE,CAAC,CAAC;IAC5C,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,IAAI,CAAC,CAAC;AAChD,CAAC"}
@@ -0,0 +1,63 @@
1
+ /**
2
+ * SQLite-backed audit log.
3
+ *
4
+ * Alternative to the JSONL writer in `audit.ts` for deployments that want
5
+ * queryable audit history. Supports indexed filters on `caller`, `photon`,
6
+ * `timestamp` without scanning the file.
7
+ *
8
+ * Runtime-agnostic loader: uses `bun:sqlite` under Bun, `better-sqlite3`
9
+ * under Node. Falls back to JSONL if neither is available.
10
+ *
11
+ * Row cap: deletes oldest rows when count exceeds `maxRows` (default 100k).
12
+ * Cheaper than the JSONL rotate/delete dance and preserves query index
13
+ * integrity automatically.
14
+ */
15
+ import type { AuditEntry } from './audit.js';
16
+ import { type SqliteDatabase } from './sqlite-runtime.js';
17
+ export interface AuditQuery {
18
+ /** Only rows at or after this timestamp. */
19
+ since?: Date;
20
+ /** Only rows at or before this timestamp. */
21
+ until?: Date;
22
+ /** Filter by photon name. */
23
+ photon?: string;
24
+ /** Filter by authenticated caller (sub claim). */
25
+ client?: string;
26
+ /** Filter by event type. */
27
+ event?: string;
28
+ /** Max rows to return. Default 1000. */
29
+ limit?: number;
30
+ /** Sort direction on timestamp. Default descending (most recent first). */
31
+ order?: 'asc' | 'desc';
32
+ }
33
+ /**
34
+ * Open a SQLite-backed audit store. Returns a backend with write/query/close.
35
+ */
36
+ export declare function openAuditDatabase(path: string): Promise<SqliteDatabase>;
37
+ export interface AuditBackend {
38
+ write(entry: AuditEntry): void;
39
+ query(q: AuditQuery): AuditEntry[];
40
+ count(): number;
41
+ close(): void;
42
+ }
43
+ export declare class SqliteAuditBackend implements AuditBackend {
44
+ private db;
45
+ private maxRows;
46
+ /** Check row count every N writes to avoid COUNT(*) per insert. */
47
+ private trimInterval;
48
+ private insert;
49
+ private countStmt;
50
+ private trimStmt;
51
+ private writes;
52
+ /** Known columns we store in dedicated fields; anything else goes into `extra`. */
53
+ private static readonly WELL_KNOWN;
54
+ constructor(db: SqliteDatabase, maxRows?: number,
55
+ /** Check row count every N writes to avoid COUNT(*) per insert. */
56
+ trimInterval?: number);
57
+ write(entry: AuditEntry): void;
58
+ query(q?: AuditQuery): AuditEntry[];
59
+ count(): number;
60
+ close(): void;
61
+ private trimIfNeeded;
62
+ }
63
+ //# sourceMappingURL=audit-sqlite.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"audit-sqlite.d.ts","sourceRoot":"","sources":["../../src/shared/audit-sqlite.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;GAaG;AAEH,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,YAAY,CAAC;AAC7C,OAAO,EAAc,KAAK,cAAc,EAAwB,MAAM,qBAAqB,CAAC;AAM5F,MAAM,WAAW,UAAU;IACzB,4CAA4C;IAC5C,KAAK,CAAC,EAAE,IAAI,CAAC;IACb,6CAA6C;IAC7C,KAAK,CAAC,EAAE,IAAI,CAAC;IACb,6BAA6B;IAC7B,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,kDAAkD;IAClD,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,4BAA4B;IAC5B,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,wCAAwC;IACxC,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,2EAA2E;IAC3E,KAAK,CAAC,EAAE,KAAK,GAAG,MAAM,CAAC;CACxB;AA4BD;;GAEG;AACH,wBAAsB,iBAAiB,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,cAAc,CAAC,CAE7E;AAMD,MAAM,WAAW,YAAY;IAC3B,KAAK,CAAC,KAAK,EAAE,UAAU,GAAG,IAAI,CAAC;IAC/B,KAAK,CAAC,CAAC,EAAE,UAAU,GAAG,UAAU,EAAE,CAAC;IACnC,KAAK,IAAI,MAAM,CAAC;IAChB,KAAK,IAAI,IAAI,CAAC;CACf;AAED,qBAAa,kBAAmB,YAAW,YAAY;IAmBnD,OAAO,CAAC,EAAE;IACV,OAAO,CAAC,OAAO;IACf,mEAAmE;IACnE,OAAO,CAAC,YAAY;IArBtB,OAAO,CAAC,MAAM,CAAkB;IAChC,OAAO,CAAC,SAAS,CAAkB;IACnC,OAAO,CAAC,QAAQ,CAAkB;IAClC,OAAO,CAAC,MAAM,CAAK;IACnB,mFAAmF;IACnF,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAC,UAAU,CAU/B;gBAGO,EAAE,EAAE,cAAc,EAClB,OAAO,SAAU;IACzB,mEAAmE;IAC3D,YAAY,SAAM;IAY5B,KAAK,CAAC,KAAK,EAAE,UAAU,GAAG,IAAI;IA+B9B,KAAK,CAAC,CAAC,GAAE,UAAe,GAAG,UAAU,EAAE;IAiCvC,KAAK,IAAI,MAAM;IAKf,KAAK,IAAI,IAAI;IAQb,OAAO,CAAC,YAAY;CAUrB"}
@@ -0,0 +1,187 @@
1
+ /**
2
+ * SQLite-backed audit log.
3
+ *
4
+ * Alternative to the JSONL writer in `audit.ts` for deployments that want
5
+ * queryable audit history. Supports indexed filters on `caller`, `photon`,
6
+ * `timestamp` without scanning the file.
7
+ *
8
+ * Runtime-agnostic loader: uses `bun:sqlite` under Bun, `better-sqlite3`
9
+ * under Node. Falls back to JSONL if neither is available.
10
+ *
11
+ * Row cap: deletes oldest rows when count exceeds `maxRows` (default 100k).
12
+ * Cheaper than the JSONL rotate/delete dance and preserves query index
13
+ * integrity automatically.
14
+ */
15
+ import { openSqlite } from './sqlite-runtime.js';
16
+ // ============================================================================
17
+ // Schema + open
18
+ // ============================================================================
19
+ function initSchema(db) {
20
+ db.exec(`
21
+ CREATE TABLE IF NOT EXISTS audit (
22
+ id INTEGER PRIMARY KEY AUTOINCREMENT,
23
+ ts INTEGER NOT NULL,
24
+ event TEXT NOT NULL,
25
+ photon TEXT,
26
+ method TEXT,
27
+ instance TEXT,
28
+ client TEXT,
29
+ session_id TEXT,
30
+ duration_ms INTEGER,
31
+ error TEXT,
32
+ extra TEXT
33
+ );
34
+ CREATE INDEX IF NOT EXISTS idx_audit_ts ON audit(ts);
35
+ CREATE INDEX IF NOT EXISTS idx_audit_photon_ts ON audit(photon, ts);
36
+ CREATE INDEX IF NOT EXISTS idx_audit_client_ts ON audit(client, ts);
37
+ CREATE INDEX IF NOT EXISTS idx_audit_event_ts ON audit(event, ts);
38
+ `);
39
+ }
40
+ /**
41
+ * Open a SQLite-backed audit store. Returns a backend with write/query/close.
42
+ */
43
+ export async function openAuditDatabase(path) {
44
+ return openSqlite(path, initSchema);
45
+ }
46
+ export class SqliteAuditBackend {
47
+ db;
48
+ maxRows;
49
+ trimInterval;
50
+ insert;
51
+ countStmt;
52
+ trimStmt;
53
+ writes = 0;
54
+ /** Known columns we store in dedicated fields; anything else goes into `extra`. */
55
+ static WELL_KNOWN = new Set([
56
+ 'ts',
57
+ 'event',
58
+ 'photon',
59
+ 'method',
60
+ 'instance',
61
+ 'client',
62
+ 'sessionId',
63
+ 'durationMs',
64
+ 'error',
65
+ ]);
66
+ constructor(db, maxRows = 100_000,
67
+ /** Check row count every N writes to avoid COUNT(*) per insert. */
68
+ trimInterval = 500) {
69
+ this.db = db;
70
+ this.maxRows = maxRows;
71
+ this.trimInterval = trimInterval;
72
+ this.insert = db.prepare(`INSERT INTO audit (ts, event, photon, method, instance, client, session_id, duration_ms, error, extra)
73
+ VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?)`);
74
+ this.countStmt = db.prepare('SELECT COUNT(*) AS n FROM audit');
75
+ this.trimStmt = db.prepare('DELETE FROM audit WHERE id IN (SELECT id FROM audit ORDER BY ts ASC LIMIT ?)');
76
+ }
77
+ write(entry) {
78
+ try {
79
+ const tsMs = typeof entry.ts === 'string' ? Date.parse(entry.ts) : Date.now();
80
+ const extra = {};
81
+ for (const key of Object.keys(entry)) {
82
+ if (!SqliteAuditBackend.WELL_KNOWN.has(key)) {
83
+ extra[key] = entry[key];
84
+ }
85
+ }
86
+ this.insert.run(tsMs, entry.event, entry.photon ?? null, entry.method ?? null, entry.instance ?? null, entry.client ?? null, entry.sessionId ?? null, entry.durationMs ?? null, entry.error ?? null, Object.keys(extra).length > 0 ? JSON.stringify(extra) : null);
87
+ this.writes++;
88
+ if (this.writes >= this.trimInterval) {
89
+ this.writes = 0;
90
+ this.trimIfNeeded();
91
+ }
92
+ }
93
+ catch {
94
+ // Never block execution for audit I/O
95
+ }
96
+ }
97
+ query(q = {}) {
98
+ const clauses = [];
99
+ const params = [];
100
+ if (q.since) {
101
+ clauses.push('ts >= ?');
102
+ params.push(q.since.getTime());
103
+ }
104
+ if (q.until) {
105
+ clauses.push('ts <= ?');
106
+ params.push(q.until.getTime());
107
+ }
108
+ if (q.photon) {
109
+ clauses.push('photon = ?');
110
+ params.push(q.photon);
111
+ }
112
+ if (q.client) {
113
+ clauses.push('client = ?');
114
+ params.push(q.client);
115
+ }
116
+ if (q.event) {
117
+ clauses.push('event = ?');
118
+ params.push(q.event);
119
+ }
120
+ const where = clauses.length ? `WHERE ${clauses.join(' AND ')}` : '';
121
+ const order = q.order === 'asc' ? 'ASC' : 'DESC';
122
+ const limit = q.limit ?? 1000;
123
+ const sql = `SELECT * FROM audit ${where} ORDER BY ts ${order} LIMIT ?`;
124
+ params.push(limit);
125
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any
126
+ const rows = this.db.prepare(sql).all(...params);
127
+ return rows.map((r) => rowToEntry(r));
128
+ }
129
+ count() {
130
+ const row = this.countStmt.get();
131
+ return row?.n ?? 0;
132
+ }
133
+ close() {
134
+ try {
135
+ this.db.close();
136
+ }
137
+ catch {
138
+ // ignore
139
+ }
140
+ }
141
+ trimIfNeeded() {
142
+ const current = this.count();
143
+ if (current <= this.maxRows)
144
+ return;
145
+ const excess = current - this.maxRows;
146
+ try {
147
+ this.trimStmt.run(excess);
148
+ }
149
+ catch {
150
+ // Silent — trim is best-effort
151
+ }
152
+ }
153
+ }
154
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any
155
+ function rowToEntry(row) {
156
+ const entry = {
157
+ ts: new Date(row.ts).toISOString(),
158
+ event: row.event,
159
+ };
160
+ if (row.photon != null)
161
+ entry.photon = row.photon;
162
+ if (row.method != null)
163
+ entry.method = row.method;
164
+ if (row.instance != null)
165
+ entry.instance = row.instance;
166
+ if (row.client != null)
167
+ entry.client = row.client;
168
+ if (row.session_id != null)
169
+ entry.sessionId = row.session_id;
170
+ if (row.duration_ms != null)
171
+ entry.durationMs = row.duration_ms;
172
+ if (row.error != null)
173
+ entry.error = row.error;
174
+ if (row.extra) {
175
+ try {
176
+ const parsed = JSON.parse(row.extra);
177
+ for (const k of Object.keys(parsed)) {
178
+ entry[k] = parsed[k];
179
+ }
180
+ }
181
+ catch {
182
+ // malformed extra; drop silently
183
+ }
184
+ }
185
+ return entry;
186
+ }
187
+ //# sourceMappingURL=audit-sqlite.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"audit-sqlite.js","sourceRoot":"","sources":["../../src/shared/audit-sqlite.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;GAaG;AAGH,OAAO,EAAE,UAAU,EAA6C,MAAM,qBAAqB,CAAC;AAuB5F,+EAA+E;AAC/E,gBAAgB;AAChB,+EAA+E;AAE/E,SAAS,UAAU,CAAC,EAAkB;IACpC,EAAE,CAAC,IAAI,CAAC;;;;;;;;;;;;;;;;;;GAkBP,CAAC,CAAC;AACL,CAAC;AAED;;GAEG;AACH,MAAM,CAAC,KAAK,UAAU,iBAAiB,CAAC,IAAY;IAClD,OAAO,UAAU,CAAC,IAAI,EAAE,UAAU,CAAC,CAAC;AACtC,CAAC;AAaD,MAAM,OAAO,kBAAkB;IAmBnB;IACA;IAEA;IArBF,MAAM,CAAkB;IACxB,SAAS,CAAkB;IAC3B,QAAQ,CAAkB;IAC1B,MAAM,GAAG,CAAC,CAAC;IACnB,mFAAmF;IAC3E,MAAM,CAAU,UAAU,GAAG,IAAI,GAAG,CAAC;QAC3C,IAAI;QACJ,OAAO;QACP,QAAQ;QACR,QAAQ;QACR,UAAU;QACV,QAAQ;QACR,WAAW;QACX,YAAY;QACZ,OAAO;KACR,CAAC,CAAC;IAEH,YACU,EAAkB,EAClB,UAAU,OAAO;IACzB,mEAAmE;IAC3D,eAAe,GAAG;QAHlB,OAAE,GAAF,EAAE,CAAgB;QAClB,YAAO,GAAP,OAAO,CAAU;QAEjB,iBAAY,GAAZ,YAAY,CAAM;QAE1B,IAAI,CAAC,MAAM,GAAG,EAAE,CAAC,OAAO,CACtB;6CACuC,CACxC,CAAC;QACF,IAAI,CAAC,SAAS,GAAG,EAAE,CAAC,OAAO,CAAC,iCAAiC,CAAC,CAAC;QAC/D,IAAI,CAAC,QAAQ,GAAG,EAAE,CAAC,OAAO,CACxB,8EAA8E,CAC/E,CAAC;IACJ,CAAC;IAED,KAAK,CAAC,KAAiB;QACrB,IAAI,CAAC;YACH,MAAM,IAAI,GAAG,OAAO,KAAK,CAAC,EAAE,KAAK,QAAQ,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,GAAG,EAAE,CAAC;YAC9E,MAAM,KAAK,GAA4B,EAAE,CAAC;YAC1C,KAAK,MAAM,GAAG,IAAI,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC;gBACrC,IAAI,CAAC,kBAAkB,CAAC,UAAU,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE,CAAC;oBAC5C,KAAK,CAAC,GAAG,CAAC,GAAI,KAAiC,CAAC,GAAG,CAAC,CAAC;gBACvD,CAAC;YACH,CAAC;YACD,IAAI,CAAC,MAAM,CAAC,GAAG,CACb,IAAI,EACJ,KAAK,CAAC,KAAK,EACX,KAAK,CAAC,MAAM,IAAI,IAAI,EACpB,KAAK,CAAC,MAAM,IAAI,IAAI,EACpB,KAAK,CAAC,QAAQ,IAAI,IAAI,EACtB,KAAK,CAAC,MAAM,IAAI,IAAI,EACpB,KAAK,CAAC,SAAS,IAAI,IAAI,EACvB,KAAK,CAAC,UAAU,IAAI,IAAI,EACxB,KAAK,CAAC,KAAK,IAAI,IAAI,EACnB,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,IAAI,CAC7D,CAAC;YACF,IAAI,CAAC,MAAM,EAAE,CAAC;YACd,IAAI,IAAI,CAAC,MAAM,IAAI,IAAI,CAAC,YAAY,EAAE,CAAC;gBACrC,IAAI,CAAC,MAAM,GAAG,CAAC,CAAC;gBAChB,IAAI,CAAC,YAAY,EAAE,CAAC;YACtB,CAAC;QACH,CAAC;QAAC,MAAM,CAAC;YACP,sCAAsC;QACxC,CAAC;IACH,CAAC;IAED,KAAK,CAAC,IAAgB,EAAE;QACtB,MAAM,OAAO,GAAa,EAAE,CAAC;QAC7B,MAAM,MAAM,GAAwB,EAAE,CAAC;QACvC,IAAI,CAAC,CAAC,KAAK,EAAE,CAAC;YACZ,OAAO,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;YACxB,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,EAAE,CAAC,CAAC;QACjC,CAAC;QACD,IAAI,CAAC,CAAC,KAAK,EAAE,CAAC;YACZ,OAAO,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;YACxB,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,EAAE,CAAC,CAAC;QACjC,CAAC;QACD,IAAI,CAAC,CAAC,MAAM,EAAE,CAAC;YACb,OAAO,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC;YAC3B,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC;QACxB,CAAC;QACD,IAAI,CAAC,CAAC,MAAM,EAAE,CAAC;YACb,OAAO,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC;YAC3B,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC;QACxB,CAAC;QACD,IAAI,CAAC,CAAC,KAAK,EAAE,CAAC;YACZ,OAAO,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC;YAC1B,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC;QACvB,CAAC;QACD,MAAM,KAAK,GAAG,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,SAAS,OAAO,CAAC,IAAI,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;QACrE,MAAM,KAAK,GAAG,CAAC,CAAC,KAAK,KAAK,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,MAAM,CAAC;QACjD,MAAM,KAAK,GAAG,CAAC,CAAC,KAAK,IAAI,IAAI,CAAC;QAC9B,MAAM,GAAG,GAAG,uBAAuB,KAAK,gBAAgB,KAAK,UAAU,CAAC;QACxE,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;QACnB,8DAA8D;QAC9D,MAAM,IAAI,GAAG,IAAI,CAAC,EAAE,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,GAAG,MAAM,CAAU,CAAC;QAC1D,OAAO,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,CAAC;IACxC,CAAC;IAED,KAAK;QACH,MAAM,GAAG,GAAG,IAAI,CAAC,SAAS,CAAC,GAAG,EAA+B,CAAC;QAC9D,OAAO,GAAG,EAAE,CAAC,IAAI,CAAC,CAAC;IACrB,CAAC;IAED,KAAK;QACH,IAAI,CAAC;YACH,IAAI,CAAC,EAAE,CAAC,KAAK,EAAE,CAAC;QAClB,CAAC;QAAC,MAAM,CAAC;YACP,SAAS;QACX,CAAC;IACH,CAAC;IAEO,YAAY;QAClB,MAAM,OAAO,GAAG,IAAI,CAAC,KAAK,EAAE,CAAC;QAC7B,IAAI,OAAO,IAAI,IAAI,CAAC,OAAO;YAAE,OAAO;QACpC,MAAM,MAAM,GAAG,OAAO,GAAG,IAAI,CAAC,OAAO,CAAC;QACtC,IAAI,CAAC;YACH,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC;QAC5B,CAAC;QAAC,MAAM,CAAC;YACP,+BAA+B;QACjC,CAAC;IACH,CAAC;;AAGH,8DAA8D;AAC9D,SAAS,UAAU,CAAC,GAAQ;IAC1B,MAAM,KAAK,GAAe;QACxB,EAAE,EAAE,IAAI,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC,WAAW,EAAE;QAClC,KAAK,EAAE,GAAG,CAAC,KAAK;KACjB,CAAC;IACF,IAAI,GAAG,CAAC,MAAM,IAAI,IAAI;QAAE,KAAK,CAAC,MAAM,GAAG,GAAG,CAAC,MAAM,CAAC;IAClD,IAAI,GAAG,CAAC,MAAM,IAAI,IAAI;QAAE,KAAK,CAAC,MAAM,GAAG,GAAG,CAAC,MAAM,CAAC;IAClD,IAAI,GAAG,CAAC,QAAQ,IAAI,IAAI;QAAE,KAAK,CAAC,QAAQ,GAAG,GAAG,CAAC,QAAQ,CAAC;IACxD,IAAI,GAAG,CAAC,MAAM,IAAI,IAAI;QAAE,KAAK,CAAC,MAAM,GAAG,GAAG,CAAC,MAAM,CAAC;IAClD,IAAI,GAAG,CAAC,UAAU,IAAI,IAAI;QAAE,KAAK,CAAC,SAAS,GAAG,GAAG,CAAC,UAAU,CAAC;IAC7D,IAAI,GAAG,CAAC,WAAW,IAAI,IAAI;QAAE,KAAK,CAAC,UAAU,GAAG,GAAG,CAAC,WAAW,CAAC;IAChE,IAAI,GAAG,CAAC,KAAK,IAAI,IAAI;QAAE,KAAK,CAAC,KAAK,GAAG,GAAG,CAAC,KAAK,CAAC;IAC/C,IAAI,GAAG,CAAC,KAAK,EAAE,CAAC;QACd,IAAI,CAAC;YACH,MAAM,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,KAAK,CAA4B,CAAC;YAChE,KAAK,MAAM,CAAC,IAAI,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,EAAE,CAAC;gBACnC,KAAiC,CAAC,CAAC,CAAC,GAAG,MAAM,CAAC,CAAC,CAAC,CAAC;YACpD,CAAC;QACH,CAAC;QAAC,MAAM,CAAC;YACP,iCAAiC;QACnC,CAAC;IACH,CAAC;IACD,OAAO,KAAK,CAAC;AACf,CAAC"}
@@ -1,10 +1,15 @@
1
1
  /**
2
2
  * Persistent Audit Log
3
3
  *
4
- * Append-only JSONL writer to ~/.photon/audit.jsonl
5
- * Silent failure never blocks execution for audit I/O
6
- * Size-based rotation: rotates at 5MB, keeps 3 archived files
4
+ * Two backends, selected at runtime:
5
+ * - JSONL (default): append-only writer to ~/.photon/audit.jsonl,
6
+ * size-based rotation (5MB, 3 archives). Always available.
7
+ * - SQLite (opt-in via initAuditSqlite): indexed, queryable. Preferred for
8
+ * daemons that need fast per-caller / per-photon audit queries.
9
+ *
10
+ * Silent failure — never blocks execution for audit I/O.
7
11
  */
12
+ import type { AuditBackend, AuditQuery } from './audit-sqlite.js';
8
13
  /** Rotate when file exceeds this size (5MB) */
9
14
  declare const MAX_FILE_SIZE: number;
10
15
  /** Number of rotated archives to keep */
@@ -21,6 +26,23 @@ export interface AuditEntry {
21
26
  error?: string;
22
27
  [key: string]: unknown;
23
28
  }
29
+ /**
30
+ * Upgrade the audit writer to a SQLite backend for indexed queries.
31
+ * Callers (daemon startup, server bootstrap) invoke this once early.
32
+ * Safe to call multiple times — subsequent calls are no-ops. If SQLite
33
+ * isn't available (no `better-sqlite3` on Node, not running under Bun),
34
+ * throws and the JSONL fallback remains active.
35
+ */
36
+ export declare function initAuditSqlite(path?: string): Promise<void>;
37
+ /**
38
+ * Swap the SQLite backend for a pre-constructed one. For tests.
39
+ */
40
+ export declare function setAuditBackend(backend: AuditBackend | null): void;
41
+ /**
42
+ * Query the audit log. Uses SQLite indexes when available, otherwise
43
+ * streams the JSONL file and filters in memory.
44
+ */
45
+ export declare function queryAudit(q?: AuditQuery): Promise<AuditEntry[]>;
24
46
  export declare function audit(entry: AuditEntry): void;
25
47
  /** Force a rotation check (used by CLI clear/rotate commands) */
26
48
  export declare function forceRotate(): boolean;
@@ -1 +1 @@
1
- {"version":3,"file":"audit.d.ts","sourceRoot":"","sources":["../../src/shared/audit.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AASH,+CAA+C;AAC/C,QAAA,MAAM,aAAa,QAAkB,CAAC;AACtC,yCAAyC;AACzC,QAAA,MAAM,iBAAiB,IAAI,CAAC;AAI5B,MAAM,WAAW,UAAU;IACzB,EAAE,EAAE,MAAM,CAAC;IACX,KAAK,EAAE,MAAM,CAAC;IACd,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC;CACxB;AAoCD,wBAAgB,KAAK,CAAC,KAAK,EAAE,UAAU,GAAG,IAAI,CAgB7C;AAED,iEAAiE;AACjE,wBAAgB,WAAW,IAAI,OAAO,CAkBrC;AAED,eAAO,MAAM,eAAe,QAAa,CAAC;AAC1C,eAAO,MAAM,cAAc,QAAY,CAAC;AACxC,OAAO,EAAE,aAAa,EAAE,iBAAiB,EAAE,CAAC"}
1
+ {"version":3,"file":"audit.d.ts","sourceRoot":"","sources":["../../src/shared/audit.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AAKH,OAAO,KAAK,EAAE,YAAY,EAAE,UAAU,EAAE,MAAM,mBAAmB,CAAC;AAKlE,+CAA+C;AAC/C,QAAA,MAAM,aAAa,QAAkB,CAAC;AACtC,yCAAyC;AACzC,QAAA,MAAM,iBAAiB,IAAI,CAAC;AAI5B,MAAM,WAAW,UAAU;IACzB,EAAE,EAAE,MAAM,CAAC;IACX,KAAK,EAAE,MAAM,CAAC;IACd,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC;CACxB;AASD;;;;;;GAMG;AACH,wBAAsB,eAAe,CAAC,IAAI,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAWlE;AAED;;GAEG;AACH,wBAAgB,eAAe,CAAC,OAAO,EAAE,YAAY,GAAG,IAAI,GAAG,IAAI,CAElE;AAED;;;GAGG;AACH,wBAAsB,UAAU,CAAC,CAAC,GAAE,UAAe,GAAG,OAAO,CAAC,UAAU,EAAE,CAAC,CAG1E;AAmED,wBAAgB,KAAK,CAAC,KAAK,EAAE,UAAU,GAAG,IAAI,CAyB7C;AAED,iEAAiE;AACjE,wBAAgB,WAAW,IAAI,OAAO,CAkBrC;AAED,eAAO,MAAM,eAAe,QAAa,CAAC;AAC1C,eAAO,MAAM,cAAc,QAAY,CAAC;AACxC,OAAO,EAAE,aAAa,EAAE,iBAAiB,EAAE,CAAC"}
@@ -1,9 +1,13 @@
1
1
  /**
2
2
  * Persistent Audit Log
3
3
  *
4
- * Append-only JSONL writer to ~/.photon/audit.jsonl
5
- * Silent failure never blocks execution for audit I/O
6
- * Size-based rotation: rotates at 5MB, keeps 3 archived files
4
+ * Two backends, selected at runtime:
5
+ * - JSONL (default): append-only writer to ~/.photon/audit.jsonl,
6
+ * size-based rotation (5MB, 3 archives). Always available.
7
+ * - SQLite (opt-in via initAuditSqlite): indexed, queryable. Preferred for
8
+ * daemons that need fast per-caller / per-photon audit queries.
9
+ *
10
+ * Silent failure — never blocks execution for audit I/O.
7
11
  */
8
12
  import { appendFileSync, mkdirSync, statSync, renameSync, unlinkSync, existsSync } from 'fs';
9
13
  import { join, dirname } from 'path';
@@ -19,6 +23,86 @@ const ROTATION_CHECK_INTERVAL = 100;
19
23
  let dirEnsured = false;
20
24
  let writeCount = 0;
21
25
  let rotating = false;
26
+ /** Active SQLite backend, or null if we're using JSONL. */
27
+ let sqliteBackend = null;
28
+ /**
29
+ * Upgrade the audit writer to a SQLite backend for indexed queries.
30
+ * Callers (daemon startup, server bootstrap) invoke this once early.
31
+ * Safe to call multiple times — subsequent calls are no-ops. If SQLite
32
+ * isn't available (no `better-sqlite3` on Node, not running under Bun),
33
+ * throws and the JSONL fallback remains active.
34
+ */
35
+ export async function initAuditSqlite(path) {
36
+ if (sqliteBackend)
37
+ return;
38
+ const { openAuditDatabase, SqliteAuditBackend } = await import('./audit-sqlite.js');
39
+ const dbPath = path ?? AUDIT_FILE.replace(/\.jsonl$/i, '.db');
40
+ try {
41
+ mkdirSync(dirname(dbPath), { recursive: true });
42
+ }
43
+ catch {
44
+ // non-fatal
45
+ }
46
+ const db = await openAuditDatabase(dbPath);
47
+ sqliteBackend = new SqliteAuditBackend(db);
48
+ }
49
+ /**
50
+ * Swap the SQLite backend for a pre-constructed one. For tests.
51
+ */
52
+ export function setAuditBackend(backend) {
53
+ sqliteBackend = backend;
54
+ }
55
+ /**
56
+ * Query the audit log. Uses SQLite indexes when available, otherwise
57
+ * streams the JSONL file and filters in memory.
58
+ */
59
+ export async function queryAudit(q = {}) {
60
+ if (sqliteBackend)
61
+ return sqliteBackend.query(q);
62
+ return queryJsonl(q);
63
+ }
64
+ async function queryJsonl(q) {
65
+ const { readFile } = await import('fs/promises');
66
+ const results = [];
67
+ try {
68
+ const raw = await readFile(AUDIT_FILE, 'utf8');
69
+ const lines = raw.split('\n').filter(Boolean);
70
+ // Newest first — iterate from the end so limit clamps cheaply
71
+ const ordered = q.order === 'asc' ? lines : [...lines].reverse();
72
+ const limit = q.limit ?? 1000;
73
+ for (const line of ordered) {
74
+ let entry;
75
+ try {
76
+ entry = JSON.parse(line);
77
+ }
78
+ catch {
79
+ continue;
80
+ }
81
+ if (!matchesQuery(entry, q))
82
+ continue;
83
+ results.push(entry);
84
+ if (results.length >= limit)
85
+ break;
86
+ }
87
+ }
88
+ catch {
89
+ // file missing or unreadable — empty result
90
+ }
91
+ return results;
92
+ }
93
+ function matchesQuery(entry, q) {
94
+ if (q.photon && entry.photon !== q.photon)
95
+ return false;
96
+ if (q.client && entry.client !== q.client)
97
+ return false;
98
+ if (q.event && entry.event !== q.event)
99
+ return false;
100
+ if (q.since && new Date(entry.ts).getTime() < q.since.getTime())
101
+ return false;
102
+ if (q.until && new Date(entry.ts).getTime() > q.until.getTime())
103
+ return false;
104
+ return true;
105
+ }
22
106
  /**
23
107
  * Rotate audit log files: audit.jsonl → audit.1.jsonl → audit.2.jsonl → audit.3.jsonl
24
108
  * Oldest file beyond MAX_ROTATED_FILES is deleted.
@@ -52,6 +136,16 @@ function rotateIfNeeded() {
52
136
  }
53
137
  }
54
138
  export function audit(entry) {
139
+ // Prefer SQLite when initialized; fall through to JSONL on failure.
140
+ if (sqliteBackend) {
141
+ try {
142
+ sqliteBackend.write(entry);
143
+ return;
144
+ }
145
+ catch {
146
+ // fall through to JSONL so the write isn't lost
147
+ }
148
+ }
55
149
  try {
56
150
  if (!dirEnsured) {
57
151
  mkdirSync(AUDIT_DIR, { recursive: true });
@@ -1 +1 @@
1
- {"version":3,"file":"audit.js","sourceRoot":"","sources":["../../src/shared/audit.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"audit.js","sourceRoot":"","sources":["../../src/shared/audit.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AAEH,OAAO,EAAE,cAAc,EAAE,SAAS,EAAE,QAAQ,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,MAAM,IAAI,CAAC;AAC7F,OAAO,EAAE,IAAI,EAAE,OAAO,EAAE,MAAM,MAAM,CAAC;AACrC,OAAO,EAAE,YAAY,EAAE,MAAM,qBAAqB,CAAC;AAGnD,MAAM,UAAU,GAAG,YAAY,EAAE,CAAC;AAClC,MAAM,SAAS,GAAG,OAAO,CAAC,UAAU,CAAC,CAAC;AAEtC,+CAA+C;AAC/C,MAAM,aAAa,GAAG,CAAC,GAAG,IAAI,GAAG,IAAI,CAAC;AACtC,yCAAyC;AACzC,MAAM,iBAAiB,GAAG,CAAC,CAAC;AAC5B,qEAAqE;AACrE,MAAM,uBAAuB,GAAG,GAAG,CAAC;AAepC,IAAI,UAAU,GAAG,KAAK,CAAC;AACvB,IAAI,UAAU,GAAG,CAAC,CAAC;AACnB,IAAI,QAAQ,GAAG,KAAK,CAAC;AAErB,2DAA2D;AAC3D,IAAI,aAAa,GAAwB,IAAI,CAAC;AAE9C;;;;;;GAMG;AACH,MAAM,CAAC,KAAK,UAAU,eAAe,CAAC,IAAa;IACjD,IAAI,aAAa;QAAE,OAAO;IAC1B,MAAM,EAAE,iBAAiB,EAAE,kBAAkB,EAAE,GAAG,MAAM,MAAM,CAAC,mBAAmB,CAAC,CAAC;IACpF,MAAM,MAAM,GAAG,IAAI,IAAI,UAAU,CAAC,OAAO,CAAC,WAAW,EAAE,KAAK,CAAC,CAAC;IAC9D,IAAI,CAAC;QACH,SAAS,CAAC,OAAO,CAAC,MAAM,CAAC,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;IAClD,CAAC;IAAC,MAAM,CAAC;QACP,YAAY;IACd,CAAC;IACD,MAAM,EAAE,GAAG,MAAM,iBAAiB,CAAC,MAAM,CAAC,CAAC;IAC3C,aAAa,GAAG,IAAI,kBAAkB,CAAC,EAAE,CAAC,CAAC;AAC7C,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,eAAe,CAAC,OAA4B;IAC1D,aAAa,GAAG,OAAO,CAAC;AAC1B,CAAC;AAED;;;GAGG;AACH,MAAM,CAAC,KAAK,UAAU,UAAU,CAAC,IAAgB,EAAE;IACjD,IAAI,aAAa;QAAE,OAAO,aAAa,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;IACjD,OAAO,UAAU,CAAC,CAAC,CAAC,CAAC;AACvB,CAAC;AAED,KAAK,UAAU,UAAU,CAAC,CAAa;IACrC,MAAM,EAAE,QAAQ,EAAE,GAAG,MAAM,MAAM,CAAC,aAAa,CAAC,CAAC;IACjD,MAAM,OAAO,GAAiB,EAAE,CAAC;IACjC,IAAI,CAAC;QACH,MAAM,GAAG,GAAG,MAAM,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAC,CAAC;QAC/C,MAAM,KAAK,GAAG,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC;QAC9C,8DAA8D;QAC9D,MAAM,OAAO,GAAG,CAAC,CAAC,KAAK,KAAK,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,GAAG,KAAK,CAAC,CAAC,OAAO,EAAE,CAAC;QACjE,MAAM,KAAK,GAAG,CAAC,CAAC,KAAK,IAAI,IAAI,CAAC;QAC9B,KAAK,MAAM,IAAI,IAAI,OAAO,EAAE,CAAC;YAC3B,IAAI,KAAiB,CAAC;YACtB,IAAI,CAAC;gBACH,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAe,CAAC;YACzC,CAAC;YAAC,MAAM,CAAC;gBACP,SAAS;YACX,CAAC;YACD,IAAI,CAAC,YAAY,CAAC,KAAK,EAAE,CAAC,CAAC;gBAAE,SAAS;YACtC,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;YACpB,IAAI,OAAO,CAAC,MAAM,IAAI,KAAK;gBAAE,MAAM;QACrC,CAAC;IACH,CAAC;IAAC,MAAM,CAAC;QACP,4CAA4C;IAC9C,CAAC;IACD,OAAO,OAAO,CAAC;AACjB,CAAC;AAED,SAAS,YAAY,CAAC,KAAiB,EAAE,CAAa;IACpD,IAAI,CAAC,CAAC,MAAM,IAAI,KAAK,CAAC,MAAM,KAAK,CAAC,CAAC,MAAM;QAAE,OAAO,KAAK,CAAC;IACxD,IAAI,CAAC,CAAC,MAAM,IAAI,KAAK,CAAC,MAAM,KAAK,CAAC,CAAC,MAAM;QAAE,OAAO,KAAK,CAAC;IACxD,IAAI,CAAC,CAAC,KAAK,IAAI,KAAK,CAAC,KAAK,KAAK,CAAC,CAAC,KAAK;QAAE,OAAO,KAAK,CAAC;IACrD,IAAI,CAAC,CAAC,KAAK,IAAI,IAAI,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC,OAAO,EAAE,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,EAAE;QAAE,OAAO,KAAK,CAAC;IAC9E,IAAI,CAAC,CAAC,KAAK,IAAI,IAAI,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC,OAAO,EAAE,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,EAAE;QAAE,OAAO,KAAK,CAAC;IAC9E,OAAO,IAAI,CAAC;AACd,CAAC;AAED;;;GAGG;AACH,SAAS,cAAc;IACrB,IAAI,QAAQ;QAAE,OAAO;IACrB,QAAQ,GAAG,IAAI,CAAC;IAChB,IAAI,CAAC;QACH,MAAM,KAAK,GAAG,QAAQ,CAAC,UAAU,CAAC,CAAC;QACnC,IAAI,KAAK,CAAC,IAAI,GAAG,aAAa;YAAE,OAAO;QAEvC,8DAA8D;QAC9D,KAAK,IAAI,CAAC,GAAG,iBAAiB,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC;YAC5C,MAAM,GAAG,GAAG,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC,IAAI,CAAC,SAAS,EAAE,SAAS,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC;YAC3E,MAAM,GAAG,GAAG,IAAI,CAAC,SAAS,EAAE,SAAS,CAAC,QAAQ,CAAC,CAAC;YAChD,IAAI,CAAC,KAAK,iBAAiB,IAAI,UAAU,CAAC,GAAG,CAAC,EAAE,CAAC;gBAC/C,UAAU,CAAC,GAAG,CAAC,CAAC;YAClB,CAAC;YACD,IAAI,UAAU,CAAC,GAAG,CAAC,EAAE,CAAC;gBACpB,UAAU,CAAC,GAAG,EAAE,GAAG,CAAC,CAAC;YACvB,CAAC;QACH,CAAC;QACD,kFAAkF;IACpF,CAAC;IAAC,MAAM,CAAC;QACP,2CAA2C;IAC7C,CAAC;YAAS,CAAC;QACT,QAAQ,GAAG,KAAK,CAAC;IACnB,CAAC;AACH,CAAC;AAED,MAAM,UAAU,KAAK,CAAC,KAAiB;IACrC,oEAAoE;IACpE,IAAI,aAAa,EAAE,CAAC;QAClB,IAAI,CAAC;YACH,aAAa,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;YAC3B,OAAO;QACT,CAAC;QAAC,MAAM,CAAC;YACP,gDAAgD;QAClD,CAAC;IACH,CAAC;IACD,IAAI,CAAC;QACH,IAAI,CAAC,UAAU,EAAE,CAAC;YAChB,SAAS,CAAC,SAAS,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;YAC1C,UAAU,GAAG,IAAI,CAAC;QACpB,CAAC;QACD,cAAc,CAAC,UAAU,EAAE,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,GAAG,IAAI,CAAC,CAAC;QAEzD,UAAU,EAAE,CAAC;QACb,IAAI,UAAU,IAAI,uBAAuB,EAAE,CAAC;YAC1C,UAAU,GAAG,CAAC,CAAC;YACf,cAAc,EAAE,CAAC;QACnB,CAAC;IACH,CAAC;IAAC,MAAM,CAAC;QACP,2CAA2C;IAC7C,CAAC;AACH,CAAC;AAED,iEAAiE;AACjE,MAAM,UAAU,WAAW;IACzB,IAAI,CAAC;QACH,IAAI,CAAC,UAAU,CAAC,UAAU,CAAC;YAAE,OAAO,KAAK,CAAC;QAC1C,+BAA+B;QAC/B,KAAK,IAAI,CAAC,GAAG,iBAAiB,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC;YAC5C,MAAM,GAAG,GAAG,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC,IAAI,CAAC,SAAS,EAAE,SAAS,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC;YAC3E,MAAM,GAAG,GAAG,IAAI,CAAC,SAAS,EAAE,SAAS,CAAC,QAAQ,CAAC,CAAC;YAChD,IAAI,CAAC,KAAK,iBAAiB,IAAI,UAAU,CAAC,GAAG,CAAC,EAAE,CAAC;gBAC/C,UAAU,CAAC,GAAG,CAAC,CAAC;YAClB,CAAC;YACD,IAAI,UAAU,CAAC,GAAG,CAAC,EAAE,CAAC;gBACpB,UAAU,CAAC,GAAG,EAAE,GAAG,CAAC,CAAC;YACvB,CAAC;QACH,CAAC;QACD,OAAO,IAAI,CAAC;IACd,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,KAAK,CAAC;IACf,CAAC;AACH,CAAC;AAED,MAAM,CAAC,MAAM,eAAe,GAAG,UAAU,CAAC;AAC1C,MAAM,CAAC,MAAM,cAAc,GAAG,SAAS,CAAC;AACxC,OAAO,EAAE,aAAa,EAAE,iBAAiB,EAAE,CAAC"}
@@ -51,12 +51,21 @@ export declare function handleError(error: unknown, options?: {
51
51
  showStack?: boolean;
52
52
  }): never | void;
53
53
  /**
54
- * Print error to stderr and exit with appropriate code
54
+ * Print error to stderr and exit with appropriate code.
55
+ *
56
+ * Options:
57
+ * - suggestion: short tip (what to do next)
58
+ * - searchedIn: path that was searched (for not-found cases)
59
+ * - docsAnchor: TROUBLESHOOTING.md anchor (e.g. 'mcp-not-found-in-marketplace').
60
+ * Appended as 'Docs: <url>#<anchor>' to give users a place to read more.
61
+ * - docsUrl: full override when the docs live elsewhere.
55
62
  */
56
63
  export declare function exitWithError(message: string, options?: {
57
64
  exitCode?: ExitCodeType;
58
65
  suggestion?: string;
59
66
  searchedIn?: string;
67
+ docsAnchor?: string;
68
+ docsUrl?: string;
60
69
  logger?: Logger;
61
70
  }): never;
62
71
  /**
@@ -1 +1 @@
1
- {"version":3,"file":"error-handler.d.ts","sourceRoot":"","sources":["../../src/shared/error-handler.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,EAAE,MAAM,EAAE,MAAM,aAAa,CAAC;AACrC,OAAO,EAAE,WAAW,EAAE,eAAe,EAAE,MAAM,qBAAqB,CAAC;AAGnE,OAAO,EAAE,WAAW,EAAE,eAAe,EAAE,CAAC;AAMxC;;;GAGG;AACH,eAAO,MAAM,QAAQ;IACnB,qCAAqC;;IAErC,gCAAgC;;IAEhC,6CAA6C;;IAE7C,sDAAsD;;IAEtD,iCAAiC;;IAEjC,kCAAkC;;IAElC,iDAAiD;;IAEjD,wBAAwB;;IAExB,sCAAsC;;CAE9B,CAAC;AAEX,KAAK,YAAY,GAAG,CAAC,OAAO,QAAQ,CAAC,CAAC,MAAM,OAAO,QAAQ,CAAC,CAAC;AAM7D;;GAEG;AACH,wBAAgB,eAAe,CAAC,KAAK,EAAE,OAAO,GAAG,MAAM,CAWtD;AAED;;GAEG;AACH,wBAAgB,WAAW,CAAC,KAAK,EAAE,OAAO,EAAE,IAAI,CAAC,EAAE,MAAM,GAAG,KAAK,IAAI,MAAM,CAAC,cAAc,CAOzF;AAED;;GAEG;AACH,wBAAgB,SAAS,CAAC,KAAK,EAAE,OAAO,EAAE,OAAO,CAAC,EAAE,MAAM,EAAE,UAAU,CAAC,EAAE,MAAM,GAAG,WAAW,CA0C5F;AAMD;;GAEG;AACH,wBAAgB,WAAW,CACzB,KAAK,EAAE,OAAO,EACd,OAAO,GAAE;IACP,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,WAAW,CAAC,EAAE,OAAO,CAAC;IACtB,QAAQ,CAAC,EAAE,YAAY,CAAC;IACxB,SAAS,CAAC,EAAE,OAAO,CAAC;CAChB,GACL,KAAK,GAAG,IAAI,CAsCd;AAMD;;GAEG;AACH,wBAAgB,aAAa,CAC3B,OAAO,EAAE,MAAM,EACf,OAAO,CAAC,EAAE;IACR,QAAQ,CAAC,EAAE,YAAY,CAAC;IACxB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,MAAM,CAAC,EAAE,MAAM,CAAC;CACjB,GACA,KAAK,CAsBP;AAMD;;;GAGG;AACH,wBAAgB,eAAe,CAC7B,QAAQ,EAAE,MAAM,EAChB,KAAK,EAAE,OAAO,GACb;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,SAAS,EAAE,MAAM,CAAC;IAAC,SAAS,EAAE,OAAO,CAAA;CAAE,CA0FzD"}
1
+ {"version":3,"file":"error-handler.d.ts","sourceRoot":"","sources":["../../src/shared/error-handler.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,EAAE,MAAM,EAAE,MAAM,aAAa,CAAC;AACrC,OAAO,EAAE,WAAW,EAAE,eAAe,EAAE,MAAM,qBAAqB,CAAC;AAGnE,OAAO,EAAE,WAAW,EAAE,eAAe,EAAE,CAAC;AAMxC;;;GAGG;AACH,eAAO,MAAM,QAAQ;IACnB,qCAAqC;;IAErC,gCAAgC;;IAEhC,6CAA6C;;IAE7C,sDAAsD;;IAEtD,iCAAiC;;IAEjC,kCAAkC;;IAElC,iDAAiD;;IAEjD,wBAAwB;;IAExB,sCAAsC;;CAE9B,CAAC;AAEX,KAAK,YAAY,GAAG,CAAC,OAAO,QAAQ,CAAC,CAAC,MAAM,OAAO,QAAQ,CAAC,CAAC;AAM7D;;GAEG;AACH,wBAAgB,eAAe,CAAC,KAAK,EAAE,OAAO,GAAG,MAAM,CAWtD;AAED;;GAEG;AACH,wBAAgB,WAAW,CAAC,KAAK,EAAE,OAAO,EAAE,IAAI,CAAC,EAAE,MAAM,GAAG,KAAK,IAAI,MAAM,CAAC,cAAc,CAOzF;AAED;;GAEG;AACH,wBAAgB,SAAS,CAAC,KAAK,EAAE,OAAO,EAAE,OAAO,CAAC,EAAE,MAAM,EAAE,UAAU,CAAC,EAAE,MAAM,GAAG,WAAW,CA0C5F;AAMD;;GAEG;AACH,wBAAgB,WAAW,CACzB,KAAK,EAAE,OAAO,EACd,OAAO,GAAE;IACP,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,WAAW,CAAC,EAAE,OAAO,CAAC;IACtB,QAAQ,CAAC,EAAE,YAAY,CAAC;IACxB,SAAS,CAAC,EAAE,OAAO,CAAC;CAChB,GACL,KAAK,GAAG,IAAI,CAsCd;AAQD;;;;;;;;;GASG;AACH,wBAAgB,aAAa,CAC3B,OAAO,EAAE,MAAM,EACf,OAAO,CAAC,EAAE;IACR,QAAQ,CAAC,EAAE,YAAY,CAAC;IACxB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,MAAM,CAAC,EAAE,MAAM,CAAC;CACjB,GACA,KAAK,CAqCP;AAMD;;;GAGG;AACH,wBAAgB,eAAe,CAC7B,QAAQ,EAAE,MAAM,EAChB,KAAK,EAAE,OAAO,GACb;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,SAAS,EAAE,MAAM,CAAC;IAAC,SAAS,EAAE,OAAO,CAAA;CAAE,CA0FzD"}
@@ -127,11 +127,20 @@ export function handleError(error, options = {}) {
127
127
  // ══════════════════════════════════════════════════════════════════════════════
128
128
  // CLI ERROR UTILITIES
129
129
  // ══════════════════════════════════════════════════════════════════════════════
130
+ const DOCS_BASE = 'https://github.com/portel-dev/photon/blob/main/docs/TROUBLESHOOTING.md';
130
131
  /**
131
- * Print error to stderr and exit with appropriate code
132
+ * Print error to stderr and exit with appropriate code.
133
+ *
134
+ * Options:
135
+ * - suggestion: short tip (what to do next)
136
+ * - searchedIn: path that was searched (for not-found cases)
137
+ * - docsAnchor: TROUBLESHOOTING.md anchor (e.g. 'mcp-not-found-in-marketplace').
138
+ * Appended as 'Docs: <url>#<anchor>' to give users a place to read more.
139
+ * - docsUrl: full override when the docs live elsewhere.
132
140
  */
133
141
  export function exitWithError(message, options) {
134
- const { exitCode = ExitCode.ERROR, suggestion, searchedIn, logger } = options || {};
142
+ const { exitCode = ExitCode.ERROR, suggestion, searchedIn, docsAnchor, docsUrl, logger, } = options || {};
143
+ const docs = docsUrl ?? (docsAnchor ? `${DOCS_BASE}#${docsAnchor}` : undefined);
135
144
  if (logger) {
136
145
  logger.error(message);
137
146
  if (searchedIn) {
@@ -140,6 +149,9 @@ export function exitWithError(message, options) {
140
149
  if (suggestion) {
141
150
  logger.info(`Tip: ${suggestion}`);
142
151
  }
152
+ if (docs) {
153
+ logger.info(`Docs: ${docs}`);
154
+ }
143
155
  }
144
156
  else {
145
157
  console.error(`✗ ${message}`);
@@ -149,6 +161,9 @@ export function exitWithError(message, options) {
149
161
  if (suggestion) {
150
162
  console.error(` Tip: ${suggestion}`);
151
163
  }
164
+ if (docs) {
165
+ console.error(` Docs: ${docs}`);
166
+ }
152
167
  }
153
168
  process.exit(exitCode);
154
169
  }
@@ -1 +1 @@
1
- {"version":3,"file":"error-handler.js","sourceRoot":"","sources":["../../src/shared/error-handler.ts"],"names":[],"mappings":"AAAA;;GAEG;AAGH,OAAO,EAAE,WAAW,EAAE,eAAe,EAAE,MAAM,qBAAqB,CAAC;AAEnE,gDAAgD;AAChD,OAAO,EAAE,WAAW,EAAE,eAAe,EAAE,CAAC;AAExC,iFAAiF;AACjF,0CAA0C;AAC1C,iFAAiF;AAEjF;;;GAGG;AACH,MAAM,CAAC,MAAM,QAAQ,GAAG;IACtB,qCAAqC;IACrC,OAAO,EAAE,CAAC;IACV,gCAAgC;IAChC,KAAK,EAAE,CAAC;IACR,6CAA6C;IAC7C,gBAAgB,EAAE,CAAC;IACnB,sDAAsD;IACtD,YAAY,EAAE,CAAC;IACf,iCAAiC;IACjC,SAAS,EAAE,CAAC;IACZ,kCAAkC;IAClC,aAAa,EAAE,CAAC;IAChB,iDAAiD;IACjD,gBAAgB,EAAE,CAAC;IACnB,wBAAwB;IACxB,iBAAiB,EAAE,EAAE;IACrB,sCAAsC;IACtC,SAAS,EAAE,GAAG;CACN,CAAC;AAIX,iFAAiF;AACjF,kBAAkB;AAClB,iFAAiF;AAEjF;;GAEG;AACH,MAAM,UAAU,eAAe,CAAC,KAAc;IAC5C,IAAI,KAAK,YAAY,KAAK,EAAE,CAAC;QAC3B,OAAO,KAAK,CAAC,OAAO,CAAC;IACvB,CAAC;IACD,IAAI,OAAO,KAAK,KAAK,QAAQ,EAAE,CAAC;QAC9B,OAAO,KAAK,CAAC;IACf,CAAC;IACD,IAAI,KAAK,IAAI,OAAO,KAAK,KAAK,QAAQ,IAAI,SAAS,IAAI,KAAK,EAAE,CAAC;QAC7D,OAAO,MAAM,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC;IAC/B,CAAC;IACD,OAAO,eAAe,CAAC;AACzB,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,WAAW,CAAC,KAAc,EAAE,IAAa;IACvD,IAAI,CAAC,CAAC,KAAK,YAAY,KAAK,CAAC;QAAE,OAAO,KAAK,CAAC;IAC5C,MAAM,SAAS,GAAG,KAA8B,CAAC;IACjD,IAAI,IAAI,EAAE,CAAC;QACT,OAAO,SAAS,CAAC,IAAI,KAAK,IAAI,CAAC;IACjC,CAAC;IACD,OAAO,SAAS,CAAC,IAAI,KAAK,SAAS,CAAC;AACtC,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,SAAS,CAAC,KAAc,EAAE,OAAgB,EAAE,UAAmB;IAC7E,IAAI,KAAK,YAAY,WAAW,EAAE,CAAC;QACjC,OAAO,KAAK,CAAC;IACf,CAAC;IAED,MAAM,OAAO,GAAG,OAAO,CAAC,CAAC,CAAC,GAAG,OAAO,KAAK,eAAe,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC,CAAC,eAAe,CAAC,KAAK,CAAC,CAAC;IAE3F,yEAAyE;IACzE,6EAA6E;IAC7E,+CAA+C;IAC/C,MAAM,IAAI,GAAG,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,EAAE,KAAK,EAAE,KAAK,EAAE,CAAC,CAAC,CAAC,SAAS,CAAC;IAEnE,6CAA6C;IAC7C,IAAI,WAAW,CAAC,KAAK,CAAC,EAAE,CAAC;QACvB,IAAI,KAAK,CAAC,IAAI,KAAK,QAAQ,IAAI,KAAK,CAAC,IAAI,EAAE,CAAC;YAC1C,OAAO,IAAI,WAAW,CACpB,mBAAmB,KAAK,CAAC,IAAI,GAAG,OAAO,CAAC,CAAC,CAAC,KAAK,OAAO,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,EAChE,mBAAmB,EACnB,EAAE,IAAI,EAAE,KAAK,CAAC,IAAI,EAAE,EACpB,0DAA0D,EAC1D,IAAI,CACL,CAAC;QACJ,CAAC;QACD,IAAI,KAAK,CAAC,IAAI,KAAK,QAAQ,IAAI,KAAK,CAAC,IAAI,EAAE,CAAC;YAC1C,OAAO,IAAI,WAAW,CACpB,sBAAsB,KAAK,CAAC,IAAI,GAAG,OAAO,CAAC,CAAC,CAAC,KAAK,OAAO,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,EACnE,mBAAmB,EACnB,EAAE,IAAI,EAAE,KAAK,CAAC,IAAI,EAAE,EACpB,0DAA0D,EAC1D,IAAI,CACL,CAAC;QACJ,CAAC;QACD,OAAO,IAAI,WAAW,CACpB,OAAO,EACP,mBAAmB,EACnB,EAAE,IAAI,EAAE,KAAK,CAAC,IAAI,EAAE,IAAI,EAAE,KAAK,CAAC,IAAI,EAAE,EACtC,UAAU,EACV,IAAI,CACL,CAAC;IACJ,CAAC;IAED,OAAO,IAAI,WAAW,CAAC,OAAO,EAAE,eAAe,EAAE,SAAS,EAAE,UAAU,EAAE,IAAI,CAAC,CAAC;AAChF,CAAC;AAED,iFAAiF;AACjF,gBAAgB;AAChB,iFAAiF;AAEjF;;GAEG;AACH,MAAM,UAAU,WAAW,CACzB,KAAc,EACd,UAKI,EAAE;IAEN,MAAM,EACJ,MAAM,EACN,WAAW,GAAG,KAAK,EACnB,QAAQ,EACR,SAAS,GAAG,OAAO,CAAC,GAAG,CAAC,KAAK,KAAK,MAAM,GACzC,GAAG,OAAO,CAAC;IAEZ,MAAM,OAAO,GAAG,eAAe,CAAC,KAAK,CAAC,CAAC;IACvC,MAAM,UAAU,GAAG,KAAK,YAAY,WAAW,CAAC,CAAC,CAAC,KAAK,CAAC,UAAU,CAAC,CAAC,CAAC,SAAS,CAAC;IAC/E,MAAM,KAAK,GAAG,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC,SAAS,CAAC;IAE/D,MAAM,KAAK,GAAG,CAAC,OAAO,CAAC,CAAC;IACxB,IAAI,UAAU;QAAE,KAAK,CAAC,IAAI,CAAC,iBAAiB,UAAU,EAAE,CAAC,CAAC;IAC1D,IAAI,SAAS,IAAI,KAAK;QAAE,KAAK,CAAC,IAAI,CAAC,mBAAmB,KAAK,EAAE,CAAC,CAAC;IAC/D,MAAM,SAAS,GAAG,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;IAElC,IAAI,MAAM,EAAE,CAAC;QACX,MAAM,CAAC,KAAK,CAAC,SAAS,CAAC,CAAC;QACxB,IAAI,SAAS,IAAI,KAAK,EAAE,CAAC;YACvB,MAAM,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;QACtB,CAAC;IACH,CAAC;SAAM,CAAC;QACN,OAAO,CAAC,KAAK,CAAC,KAAK,SAAS,EAAE,CAAC,CAAC;IAClC,CAAC;IAED,IAAI,KAAK,YAAY,WAAW,IAAI,KAAK,CAAC,OAAO,EAAE,CAAC;QAClD,IAAI,MAAM,EAAE,CAAC;YACX,MAAM,CAAC,KAAK,CAAC,gBAAgB,EAAE,KAAK,CAAC,OAAO,CAAC,CAAC;QAChD,CAAC;aAAM,IAAI,SAAS,EAAE,CAAC;YACrB,OAAO,CAAC,KAAK,CAAC,gBAAgB,EAAE,KAAK,CAAC,OAAO,CAAC,CAAC;QACjD,CAAC;IACH,CAAC;IAED,IAAI,WAAW,EAAE,CAAC;QAChB,MAAM,IAAI,GAAG,QAAQ,IAAI,QAAQ,CAAC,KAAK,CAAC;QACxC,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IACrB,CAAC;AACH,CAAC;AAED,iFAAiF;AACjF,sBAAsB;AACtB,iFAAiF;AAEjF;;GAEG;AACH,MAAM,UAAU,aAAa,CAC3B,OAAe,EACf,OAKC;IAED,MAAM,EAAE,QAAQ,GAAG,QAAQ,CAAC,KAAK,EAAE,UAAU,EAAE,UAAU,EAAE,MAAM,EAAE,GAAG,OAAO,IAAI,EAAE,CAAC;IAEpF,IAAI,MAAM,EAAE,CAAC;QACX,MAAM,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC;QACtB,IAAI,UAAU,EAAE,CAAC;YACf,MAAM,CAAC,KAAK,CAAC,gBAAgB,UAAU,EAAE,CAAC,CAAC;QAC7C,CAAC;QACD,IAAI,UAAU,EAAE,CAAC;YACf,MAAM,CAAC,IAAI,CAAC,QAAQ,UAAU,EAAE,CAAC,CAAC;QACpC,CAAC;IACH,CAAC;SAAM,CAAC;QACN,OAAO,CAAC,KAAK,CAAC,KAAK,OAAO,EAAE,CAAC,CAAC;QAC9B,IAAI,UAAU,EAAE,CAAC;YACf,OAAO,CAAC,KAAK,CAAC,kBAAkB,UAAU,EAAE,CAAC,CAAC;QAChD,CAAC;QACD,IAAI,UAAU,EAAE,CAAC;YACf,OAAO,CAAC,KAAK,CAAC,UAAU,UAAU,EAAE,CAAC,CAAC;QACxC,CAAC;IACH,CAAC;IAED,OAAO,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;AACzB,CAAC;AAED,iFAAiF;AACjF,iEAAiE;AACjE,iFAAiF;AAEjF;;;GAGG;AACH,MAAM,UAAU,eAAe,CAC7B,QAAgB,EAChB,KAAc;IAEd,IAAI,YAAY,GAAG,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;IAC1E,IAAI,SAAS,GAAG,eAAe,CAAC;IAChC,IAAI,UAAU,GAAG,EAAE,CAAC;IACpB,IAAI,SAAS,GAAG,KAAK,CAAC;IAEtB,MAAM,SAAS,GAAG,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC;IAC3D,MAAM,QAAQ,GACZ,KAAK,IAAI,OAAO,KAAK,KAAK,QAAQ,IAAI,MAAM,IAAI,KAAK,CAAC,CAAC,CAAC,MAAM,CAAE,KAAa,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;IAE3F,sEAAsE;IACtE,MAAM,WAAW,GACf,KAAK,IAAI,OAAO,KAAK,KAAK,QAAQ,IAAI,aAAa,IAAI,KAAK,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;IAChG,MAAM,QAAQ,GAAG,KAAK,IAAI,OAAO,KAAK,KAAK,QAAQ,IAAI,MAAM,IAAI,KAAK,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;IAEjG,IAAI,WAAW;QAAE,YAAY,GAAG,WAAW,CAAC;IAE5C,iFAAiF;IACjF,IAAI,SAAS,KAAK,wBAAwB,EAAE,CAAC;QAC3C,SAAS,GAAG,cAAc,CAAC;QAC3B,UAAU;YACR,6FAA6F,CAAC;QAChG,SAAS,GAAG,IAAI,CAAC;IACnB,CAAC;SAAM,IAAI,SAAS,KAAK,sBAAsB,EAAE,CAAC;QAChD,SAAS,GAAG,cAAc,CAAC;QAC3B,UAAU,GAAG,gFAAgF,CAAC;QAC9F,SAAS,GAAG,IAAI,CAAC;IACnB,CAAC;SAAM,IAAI,SAAS,KAAK,yBAAyB,EAAE,CAAC;QACnD,SAAS,GAAG,eAAe,CAAC;QAC5B,UAAU;YACR,kGAAkG,CAAC;QACrG,SAAS,GAAG,IAAI,CAAC;IACnB,CAAC;SAAM,IAAI,SAAS,KAAK,oBAAoB,IAAI,QAAQ,KAAK,WAAW,EAAE,CAAC;QAC1E,SAAS,GAAG,eAAe,CAAC;QAC5B,UAAU,GAAG,gFAAgF,CAAC;QAC9F,SAAS,GAAG,IAAI,CAAC;IACnB,CAAC;SAAM,IAAI,SAAS,KAAK,iBAAiB,EAAE,CAAC;QAC3C,SAAS,GAAG,kBAAkB,CAAC;QAC/B,UAAU,GAAG,mEAAmE,CAAC;QACjF,SAAS,GAAG,KAAK,CAAC;IACpB,CAAC;SAAM,IACL,QAAQ,KAAK,cAAc;QAC3B,QAAQ,KAAK,aAAa;QAC1B,QAAQ,KAAK,WAAW,EACxB,CAAC;QACD,SAAS,GAAG,eAAe,CAAC;QAC5B,UAAU;YACR,wFAAwF,CAAC;QAC3F,SAAS,GAAG,IAAI,CAAC;IACnB,CAAC;SAAM,IAAI,QAAQ,KAAK,QAAQ,IAAI,QAAQ,KAAK,OAAO,EAAE,CAAC;QACzD,SAAS,GAAG,kBAAkB,CAAC;QAC/B,UAAU,GAAG,4DAA4D,CAAC;QAC1E,SAAS,GAAG,KAAK,CAAC;IACpB,CAAC;SAAM,IAAI,QAAQ,KAAK,QAAQ,EAAE,CAAC;QACjC,SAAS,GAAG,iBAAiB,CAAC;QAC9B,UAAU,GAAG,6DAA6D,CAAC;QAC3E,SAAS,GAAG,KAAK,CAAC;IACpB,CAAC;SAAM,IAAI,QAAQ,EAAE,CAAC;QACpB,UAAU,GAAG,QAAQ,CAAC;IACxB,CAAC;SAAM,IAAI,YAAY,CAAC,QAAQ,CAAC,gBAAgB,CAAC,IAAI,YAAY,CAAC,QAAQ,CAAC,WAAW,CAAC,EAAE,CAAC;QACzF,SAAS,GAAG,sBAAsB,CAAC;QACnC,UAAU;YACR,yFAAyF,CAAC;IAC9F,CAAC;SAAM,IAAI,YAAY,CAAC,QAAQ,CAAC,UAAU,CAAC,IAAI,YAAY,CAAC,QAAQ,CAAC,YAAY,CAAC,EAAE,CAAC;QACpF,SAAS,GAAG,kBAAkB,CAAC;QAC/B,UAAU,GAAG,mEAAmE,CAAC;IACnF,CAAC;SAAM,IAAI,YAAY,CAAC,QAAQ,CAAC,SAAS,CAAC,EAAE,CAAC;QAC5C,SAAS,GAAG,eAAe,CAAC;QAC5B,UAAU,GAAG,gFAAgF,CAAC;QAC9F,SAAS,GAAG,IAAI,CAAC;IACnB,CAAC;SAAM,IAAI,YAAY,CAAC,QAAQ,CAAC,SAAS,CAAC,EAAE,CAAC;QAC5C,SAAS,GAAG,eAAe,CAAC;QAC5B,UAAU;YACR,wFAAwF,CAAC;QAC3F,SAAS,GAAG,IAAI,CAAC;IACnB,CAAC;SAAM,IAAI,YAAY,CAAC,QAAQ,CAAC,YAAY,CAAC,EAAE,CAAC;QAC/C,SAAS,GAAG,kBAAkB,CAAC;QAC/B,UAAU,GAAG,4DAA4D,CAAC;IAC5E,CAAC;SAAM,IAAI,YAAY,CAAC,QAAQ,CAAC,WAAW,CAAC,EAAE,CAAC;QAC9C,SAAS,GAAG,iBAAiB,CAAC;QAC9B,UAAU,GAAG,6DAA6D,CAAC;IAC7E,CAAC;IAED,IAAI,QAAQ,IAAI,CAAC,UAAU;QAAE,UAAU,GAAG,QAAQ,CAAC;IAEnD,IAAI,IAAI,GAAG,eAAe,QAAQ,mBAAmB,SAAS,cAAc,YAAY,IAAI,CAAC;IAC7F,IAAI,UAAU;QAAE,IAAI,IAAI,iBAAiB,UAAU,IAAI,CAAC;IACxD,IAAI,IAAI,cAAc,SAAS,IAAI,CAAC;IAEpC,OAAO,EAAE,IAAI,EAAE,SAAS,EAAE,SAAS,EAAE,CAAC;AACxC,CAAC"}
1
+ {"version":3,"file":"error-handler.js","sourceRoot":"","sources":["../../src/shared/error-handler.ts"],"names":[],"mappings":"AAAA;;GAEG;AAGH,OAAO,EAAE,WAAW,EAAE,eAAe,EAAE,MAAM,qBAAqB,CAAC;AAEnE,gDAAgD;AAChD,OAAO,EAAE,WAAW,EAAE,eAAe,EAAE,CAAC;AAExC,iFAAiF;AACjF,0CAA0C;AAC1C,iFAAiF;AAEjF;;;GAGG;AACH,MAAM,CAAC,MAAM,QAAQ,GAAG;IACtB,qCAAqC;IACrC,OAAO,EAAE,CAAC;IACV,gCAAgC;IAChC,KAAK,EAAE,CAAC;IACR,6CAA6C;IAC7C,gBAAgB,EAAE,CAAC;IACnB,sDAAsD;IACtD,YAAY,EAAE,CAAC;IACf,iCAAiC;IACjC,SAAS,EAAE,CAAC;IACZ,kCAAkC;IAClC,aAAa,EAAE,CAAC;IAChB,iDAAiD;IACjD,gBAAgB,EAAE,CAAC;IACnB,wBAAwB;IACxB,iBAAiB,EAAE,EAAE;IACrB,sCAAsC;IACtC,SAAS,EAAE,GAAG;CACN,CAAC;AAIX,iFAAiF;AACjF,kBAAkB;AAClB,iFAAiF;AAEjF;;GAEG;AACH,MAAM,UAAU,eAAe,CAAC,KAAc;IAC5C,IAAI,KAAK,YAAY,KAAK,EAAE,CAAC;QAC3B,OAAO,KAAK,CAAC,OAAO,CAAC;IACvB,CAAC;IACD,IAAI,OAAO,KAAK,KAAK,QAAQ,EAAE,CAAC;QAC9B,OAAO,KAAK,CAAC;IACf,CAAC;IACD,IAAI,KAAK,IAAI,OAAO,KAAK,KAAK,QAAQ,IAAI,SAAS,IAAI,KAAK,EAAE,CAAC;QAC7D,OAAO,MAAM,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC;IAC/B,CAAC;IACD,OAAO,eAAe,CAAC;AACzB,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,WAAW,CAAC,KAAc,EAAE,IAAa;IACvD,IAAI,CAAC,CAAC,KAAK,YAAY,KAAK,CAAC;QAAE,OAAO,KAAK,CAAC;IAC5C,MAAM,SAAS,GAAG,KAA8B,CAAC;IACjD,IAAI,IAAI,EAAE,CAAC;QACT,OAAO,SAAS,CAAC,IAAI,KAAK,IAAI,CAAC;IACjC,CAAC;IACD,OAAO,SAAS,CAAC,IAAI,KAAK,SAAS,CAAC;AACtC,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,SAAS,CAAC,KAAc,EAAE,OAAgB,EAAE,UAAmB;IAC7E,IAAI,KAAK,YAAY,WAAW,EAAE,CAAC;QACjC,OAAO,KAAK,CAAC;IACf,CAAC;IAED,MAAM,OAAO,GAAG,OAAO,CAAC,CAAC,CAAC,GAAG,OAAO,KAAK,eAAe,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC,CAAC,eAAe,CAAC,KAAK,CAAC,CAAC;IAE3F,yEAAyE;IACzE,6EAA6E;IAC7E,+CAA+C;IAC/C,MAAM,IAAI,GAAG,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,EAAE,KAAK,EAAE,KAAK,EAAE,CAAC,CAAC,CAAC,SAAS,CAAC;IAEnE,6CAA6C;IAC7C,IAAI,WAAW,CAAC,KAAK,CAAC,EAAE,CAAC;QACvB,IAAI,KAAK,CAAC,IAAI,KAAK,QAAQ,IAAI,KAAK,CAAC,IAAI,EAAE,CAAC;YAC1C,OAAO,IAAI,WAAW,CACpB,mBAAmB,KAAK,CAAC,IAAI,GAAG,OAAO,CAAC,CAAC,CAAC,KAAK,OAAO,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,EAChE,mBAAmB,EACnB,EAAE,IAAI,EAAE,KAAK,CAAC,IAAI,EAAE,EACpB,0DAA0D,EAC1D,IAAI,CACL,CAAC;QACJ,CAAC;QACD,IAAI,KAAK,CAAC,IAAI,KAAK,QAAQ,IAAI,KAAK,CAAC,IAAI,EAAE,CAAC;YAC1C,OAAO,IAAI,WAAW,CACpB,sBAAsB,KAAK,CAAC,IAAI,GAAG,OAAO,CAAC,CAAC,CAAC,KAAK,OAAO,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,EACnE,mBAAmB,EACnB,EAAE,IAAI,EAAE,KAAK,CAAC,IAAI,EAAE,EACpB,0DAA0D,EAC1D,IAAI,CACL,CAAC;QACJ,CAAC;QACD,OAAO,IAAI,WAAW,CACpB,OAAO,EACP,mBAAmB,EACnB,EAAE,IAAI,EAAE,KAAK,CAAC,IAAI,EAAE,IAAI,EAAE,KAAK,CAAC,IAAI,EAAE,EACtC,UAAU,EACV,IAAI,CACL,CAAC;IACJ,CAAC;IAED,OAAO,IAAI,WAAW,CAAC,OAAO,EAAE,eAAe,EAAE,SAAS,EAAE,UAAU,EAAE,IAAI,CAAC,CAAC;AAChF,CAAC;AAED,iFAAiF;AACjF,gBAAgB;AAChB,iFAAiF;AAEjF;;GAEG;AACH,MAAM,UAAU,WAAW,CACzB,KAAc,EACd,UAKI,EAAE;IAEN,MAAM,EACJ,MAAM,EACN,WAAW,GAAG,KAAK,EACnB,QAAQ,EACR,SAAS,GAAG,OAAO,CAAC,GAAG,CAAC,KAAK,KAAK,MAAM,GACzC,GAAG,OAAO,CAAC;IAEZ,MAAM,OAAO,GAAG,eAAe,CAAC,KAAK,CAAC,CAAC;IACvC,MAAM,UAAU,GAAG,KAAK,YAAY,WAAW,CAAC,CAAC,CAAC,KAAK,CAAC,UAAU,CAAC,CAAC,CAAC,SAAS,CAAC;IAC/E,MAAM,KAAK,GAAG,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC,SAAS,CAAC;IAE/D,MAAM,KAAK,GAAG,CAAC,OAAO,CAAC,CAAC;IACxB,IAAI,UAAU;QAAE,KAAK,CAAC,IAAI,CAAC,iBAAiB,UAAU,EAAE,CAAC,CAAC;IAC1D,IAAI,SAAS,IAAI,KAAK;QAAE,KAAK,CAAC,IAAI,CAAC,mBAAmB,KAAK,EAAE,CAAC,CAAC;IAC/D,MAAM,SAAS,GAAG,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;IAElC,IAAI,MAAM,EAAE,CAAC;QACX,MAAM,CAAC,KAAK,CAAC,SAAS,CAAC,CAAC;QACxB,IAAI,SAAS,IAAI,KAAK,EAAE,CAAC;YACvB,MAAM,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;QACtB,CAAC;IACH,CAAC;SAAM,CAAC;QACN,OAAO,CAAC,KAAK,CAAC,KAAK,SAAS,EAAE,CAAC,CAAC;IAClC,CAAC;IAED,IAAI,KAAK,YAAY,WAAW,IAAI,KAAK,CAAC,OAAO,EAAE,CAAC;QAClD,IAAI,MAAM,EAAE,CAAC;YACX,MAAM,CAAC,KAAK,CAAC,gBAAgB,EAAE,KAAK,CAAC,OAAO,CAAC,CAAC;QAChD,CAAC;aAAM,IAAI,SAAS,EAAE,CAAC;YACrB,OAAO,CAAC,KAAK,CAAC,gBAAgB,EAAE,KAAK,CAAC,OAAO,CAAC,CAAC;QACjD,CAAC;IACH,CAAC;IAED,IAAI,WAAW,EAAE,CAAC;QAChB,MAAM,IAAI,GAAG,QAAQ,IAAI,QAAQ,CAAC,KAAK,CAAC;QACxC,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IACrB,CAAC;AACH,CAAC;AAED,iFAAiF;AACjF,sBAAsB;AACtB,iFAAiF;AAEjF,MAAM,SAAS,GAAG,wEAAwE,CAAC;AAE3F;;;;;;;;;GASG;AACH,MAAM,UAAU,aAAa,CAC3B,OAAe,EACf,OAOC;IAED,MAAM,EACJ,QAAQ,GAAG,QAAQ,CAAC,KAAK,EACzB,UAAU,EACV,UAAU,EACV,UAAU,EACV,OAAO,EACP,MAAM,GACP,GAAG,OAAO,IAAI,EAAE,CAAC;IAElB,MAAM,IAAI,GAAG,OAAO,IAAI,CAAC,UAAU,CAAC,CAAC,CAAC,GAAG,SAAS,IAAI,UAAU,EAAE,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC;IAEhF,IAAI,MAAM,EAAE,CAAC;QACX,MAAM,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC;QACtB,IAAI,UAAU,EAAE,CAAC;YACf,MAAM,CAAC,KAAK,CAAC,gBAAgB,UAAU,EAAE,CAAC,CAAC;QAC7C,CAAC;QACD,IAAI,UAAU,EAAE,CAAC;YACf,MAAM,CAAC,IAAI,CAAC,QAAQ,UAAU,EAAE,CAAC,CAAC;QACpC,CAAC;QACD,IAAI,IAAI,EAAE,CAAC;YACT,MAAM,CAAC,IAAI,CAAC,SAAS,IAAI,EAAE,CAAC,CAAC;QAC/B,CAAC;IACH,CAAC;SAAM,CAAC;QACN,OAAO,CAAC,KAAK,CAAC,KAAK,OAAO,EAAE,CAAC,CAAC;QAC9B,IAAI,UAAU,EAAE,CAAC;YACf,OAAO,CAAC,KAAK,CAAC,kBAAkB,UAAU,EAAE,CAAC,CAAC;QAChD,CAAC;QACD,IAAI,UAAU,EAAE,CAAC;YACf,OAAO,CAAC,KAAK,CAAC,UAAU,UAAU,EAAE,CAAC,CAAC;QACxC,CAAC;QACD,IAAI,IAAI,EAAE,CAAC;YACT,OAAO,CAAC,KAAK,CAAC,WAAW,IAAI,EAAE,CAAC,CAAC;QACnC,CAAC;IACH,CAAC;IAED,OAAO,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;AACzB,CAAC;AAED,iFAAiF;AACjF,iEAAiE;AACjE,iFAAiF;AAEjF;;;GAGG;AACH,MAAM,UAAU,eAAe,CAC7B,QAAgB,EAChB,KAAc;IAEd,IAAI,YAAY,GAAG,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;IAC1E,IAAI,SAAS,GAAG,eAAe,CAAC;IAChC,IAAI,UAAU,GAAG,EAAE,CAAC;IACpB,IAAI,SAAS,GAAG,KAAK,CAAC;IAEtB,MAAM,SAAS,GAAG,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC;IAC3D,MAAM,QAAQ,GACZ,KAAK,IAAI,OAAO,KAAK,KAAK,QAAQ,IAAI,MAAM,IAAI,KAAK,CAAC,CAAC,CAAC,MAAM,CAAE,KAAa,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;IAE3F,sEAAsE;IACtE,MAAM,WAAW,GACf,KAAK,IAAI,OAAO,KAAK,KAAK,QAAQ,IAAI,aAAa,IAAI,KAAK,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;IAChG,MAAM,QAAQ,GAAG,KAAK,IAAI,OAAO,KAAK,KAAK,QAAQ,IAAI,MAAM,IAAI,KAAK,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;IAEjG,IAAI,WAAW;QAAE,YAAY,GAAG,WAAW,CAAC;IAE5C,iFAAiF;IACjF,IAAI,SAAS,KAAK,wBAAwB,EAAE,CAAC;QAC3C,SAAS,GAAG,cAAc,CAAC;QAC3B,UAAU;YACR,6FAA6F,CAAC;QAChG,SAAS,GAAG,IAAI,CAAC;IACnB,CAAC;SAAM,IAAI,SAAS,KAAK,sBAAsB,EAAE,CAAC;QAChD,SAAS,GAAG,cAAc,CAAC;QAC3B,UAAU,GAAG,gFAAgF,CAAC;QAC9F,SAAS,GAAG,IAAI,CAAC;IACnB,CAAC;SAAM,IAAI,SAAS,KAAK,yBAAyB,EAAE,CAAC;QACnD,SAAS,GAAG,eAAe,CAAC;QAC5B,UAAU;YACR,kGAAkG,CAAC;QACrG,SAAS,GAAG,IAAI,CAAC;IACnB,CAAC;SAAM,IAAI,SAAS,KAAK,oBAAoB,IAAI,QAAQ,KAAK,WAAW,EAAE,CAAC;QAC1E,SAAS,GAAG,eAAe,CAAC;QAC5B,UAAU,GAAG,gFAAgF,CAAC;QAC9F,SAAS,GAAG,IAAI,CAAC;IACnB,CAAC;SAAM,IAAI,SAAS,KAAK,iBAAiB,EAAE,CAAC;QAC3C,SAAS,GAAG,kBAAkB,CAAC;QAC/B,UAAU,GAAG,mEAAmE,CAAC;QACjF,SAAS,GAAG,KAAK,CAAC;IACpB,CAAC;SAAM,IACL,QAAQ,KAAK,cAAc;QAC3B,QAAQ,KAAK,aAAa;QAC1B,QAAQ,KAAK,WAAW,EACxB,CAAC;QACD,SAAS,GAAG,eAAe,CAAC;QAC5B,UAAU;YACR,wFAAwF,CAAC;QAC3F,SAAS,GAAG,IAAI,CAAC;IACnB,CAAC;SAAM,IAAI,QAAQ,KAAK,QAAQ,IAAI,QAAQ,KAAK,OAAO,EAAE,CAAC;QACzD,SAAS,GAAG,kBAAkB,CAAC;QAC/B,UAAU,GAAG,4DAA4D,CAAC;QAC1E,SAAS,GAAG,KAAK,CAAC;IACpB,CAAC;SAAM,IAAI,QAAQ,KAAK,QAAQ,EAAE,CAAC;QACjC,SAAS,GAAG,iBAAiB,CAAC;QAC9B,UAAU,GAAG,6DAA6D,CAAC;QAC3E,SAAS,GAAG,KAAK,CAAC;IACpB,CAAC;SAAM,IAAI,QAAQ,EAAE,CAAC;QACpB,UAAU,GAAG,QAAQ,CAAC;IACxB,CAAC;SAAM,IAAI,YAAY,CAAC,QAAQ,CAAC,gBAAgB,CAAC,IAAI,YAAY,CAAC,QAAQ,CAAC,WAAW,CAAC,EAAE,CAAC;QACzF,SAAS,GAAG,sBAAsB,CAAC;QACnC,UAAU;YACR,yFAAyF,CAAC;IAC9F,CAAC;SAAM,IAAI,YAAY,CAAC,QAAQ,CAAC,UAAU,CAAC,IAAI,YAAY,CAAC,QAAQ,CAAC,YAAY,CAAC,EAAE,CAAC;QACpF,SAAS,GAAG,kBAAkB,CAAC;QAC/B,UAAU,GAAG,mEAAmE,CAAC;IACnF,CAAC;SAAM,IAAI,YAAY,CAAC,QAAQ,CAAC,SAAS,CAAC,EAAE,CAAC;QAC5C,SAAS,GAAG,eAAe,CAAC;QAC5B,UAAU,GAAG,gFAAgF,CAAC;QAC9F,SAAS,GAAG,IAAI,CAAC;IACnB,CAAC;SAAM,IAAI,YAAY,CAAC,QAAQ,CAAC,SAAS,CAAC,EAAE,CAAC;QAC5C,SAAS,GAAG,eAAe,CAAC;QAC5B,UAAU;YACR,wFAAwF,CAAC;QAC3F,SAAS,GAAG,IAAI,CAAC;IACnB,CAAC;SAAM,IAAI,YAAY,CAAC,QAAQ,CAAC,YAAY,CAAC,EAAE,CAAC;QAC/C,SAAS,GAAG,kBAAkB,CAAC;QAC/B,UAAU,GAAG,4DAA4D,CAAC;IAC5E,CAAC;SAAM,IAAI,YAAY,CAAC,QAAQ,CAAC,WAAW,CAAC,EAAE,CAAC;QAC9C,SAAS,GAAG,iBAAiB,CAAC;QAC9B,UAAU,GAAG,6DAA6D,CAAC;IAC7E,CAAC;IAED,IAAI,QAAQ,IAAI,CAAC,UAAU;QAAE,UAAU,GAAG,QAAQ,CAAC;IAEnD,IAAI,IAAI,GAAG,eAAe,QAAQ,mBAAmB,SAAS,cAAc,YAAY,IAAI,CAAC;IAC7F,IAAI,UAAU;QAAE,IAAI,IAAI,iBAAiB,UAAU,IAAI,CAAC;IACxD,IAAI,IAAI,cAAc,SAAS,IAAI,CAAC;IAEpC,OAAO,EAAE,IAAI,EAAE,SAAS,EAAE,SAAS,EAAE,CAAC;AACxC,CAAC"}