@sapiom/harness 0.0.0 → 0.1.1

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 (246) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +44 -43
  3. package/dist/cli/auth.d.ts +26 -0
  4. package/dist/cli/auth.d.ts.map +1 -0
  5. package/dist/cli/auth.js +39 -0
  6. package/dist/cli/auth.js.map +1 -0
  7. package/dist/cli/bin.d.ts +3 -0
  8. package/dist/cli/bin.d.ts.map +1 -0
  9. package/dist/cli/bin.js +163 -0
  10. package/dist/cli/bin.js.map +1 -0
  11. package/dist/cli/consent.d.ts +15 -0
  12. package/dist/cli/consent.d.ts.map +1 -0
  13. package/dist/cli/consent.js +81 -0
  14. package/dist/cli/consent.js.map +1 -0
  15. package/dist/cli/doctor.d.ts +27 -0
  16. package/dist/cli/doctor.d.ts.map +1 -0
  17. package/dist/cli/doctor.js +74 -0
  18. package/dist/cli/doctor.js.map +1 -0
  19. package/dist/cli/machine-id.d.ts +19 -0
  20. package/dist/cli/machine-id.d.ts.map +1 -0
  21. package/dist/cli/machine-id.js +75 -0
  22. package/dist/cli/machine-id.js.map +1 -0
  23. package/dist/cli/paths.d.ts +3 -0
  24. package/dist/cli/paths.d.ts.map +1 -0
  25. package/dist/cli/paths.js +11 -0
  26. package/dist/cli/paths.js.map +1 -0
  27. package/dist/cli/settings.d.ts +26 -0
  28. package/dist/cli/settings.d.ts.map +1 -0
  29. package/dist/cli/settings.js +123 -0
  30. package/dist/cli/settings.js.map +1 -0
  31. package/dist/core/adapters/claude-code.d.ts +41 -0
  32. package/dist/core/adapters/claude-code.d.ts.map +1 -0
  33. package/dist/core/adapters/claude-code.js +238 -0
  34. package/dist/core/adapters/claude-code.js.map +1 -0
  35. package/dist/core/adapters/codex.d.ts +59 -0
  36. package/dist/core/adapters/codex.d.ts.map +1 -0
  37. package/dist/core/adapters/codex.js +319 -0
  38. package/dist/core/adapters/codex.js.map +1 -0
  39. package/dist/core/canvas-body.d.ts +45 -0
  40. package/dist/core/canvas-body.d.ts.map +1 -0
  41. package/dist/core/canvas-body.js +94 -0
  42. package/dist/core/canvas-body.js.map +1 -0
  43. package/dist/core/canvas-cache.d.ts +23 -0
  44. package/dist/core/canvas-cache.d.ts.map +1 -0
  45. package/dist/core/canvas-cache.js +64 -0
  46. package/dist/core/canvas-cache.js.map +1 -0
  47. package/dist/core/canvas-enrich.d.ts +106 -0
  48. package/dist/core/canvas-enrich.d.ts.map +1 -0
  49. package/dist/core/canvas-enrich.js +178 -0
  50. package/dist/core/canvas-enrich.js.map +1 -0
  51. package/dist/core/canvas-enrichment.d.ts +144 -0
  52. package/dist/core/canvas-enrichment.d.ts.map +1 -0
  53. package/dist/core/canvas-enrichment.js +192 -0
  54. package/dist/core/canvas-enrichment.js.map +1 -0
  55. package/dist/core/canvas-graph.d.ts +71 -0
  56. package/dist/core/canvas-graph.d.ts.map +1 -0
  57. package/dist/core/canvas-graph.js +111 -0
  58. package/dist/core/canvas-graph.js.map +1 -0
  59. package/dist/core/canvas-index-classify.d.ts +41 -0
  60. package/dist/core/canvas-index-classify.d.ts.map +1 -0
  61. package/dist/core/canvas-index-classify.js +63 -0
  62. package/dist/core/canvas-index-classify.js.map +1 -0
  63. package/dist/core/canvas-interconnections.d.ts +24 -0
  64. package/dist/core/canvas-interconnections.d.ts.map +1 -0
  65. package/dist/core/canvas-interconnections.js +96 -0
  66. package/dist/core/canvas-interconnections.js.map +1 -0
  67. package/dist/core/canvas-manifest-check.d.ts +15 -0
  68. package/dist/core/canvas-manifest-check.d.ts.map +1 -0
  69. package/dist/core/canvas-manifest-check.js +90 -0
  70. package/dist/core/canvas-manifest-check.js.map +1 -0
  71. package/dist/core/canvas-render.d.ts +73 -0
  72. package/dist/core/canvas-render.d.ts.map +1 -0
  73. package/dist/core/canvas-render.js +145 -0
  74. package/dist/core/canvas-render.js.map +1 -0
  75. package/dist/core/canvas-svg.d.ts +50 -0
  76. package/dist/core/canvas-svg.d.ts.map +1 -0
  77. package/dist/core/canvas-svg.js +240 -0
  78. package/dist/core/canvas-svg.js.map +1 -0
  79. package/dist/core/canvas-template.d.ts +43 -0
  80. package/dist/core/canvas-template.d.ts.map +1 -0
  81. package/dist/core/canvas-template.js +365 -0
  82. package/dist/core/canvas-template.js.map +1 -0
  83. package/dist/core/canvas-watcher.d.ts +25 -0
  84. package/dist/core/canvas-watcher.d.ts.map +1 -0
  85. package/dist/core/canvas-watcher.js +144 -0
  86. package/dist/core/canvas-watcher.js.map +1 -0
  87. package/dist/core/collector/batcher.d.ts +57 -0
  88. package/dist/core/collector/batcher.d.ts.map +1 -0
  89. package/dist/core/collector/batcher.js +143 -0
  90. package/dist/core/collector/batcher.js.map +1 -0
  91. package/dist/core/collector/codex-tailer.d.ts +85 -0
  92. package/dist/core/collector/codex-tailer.d.ts.map +1 -0
  93. package/dist/core/collector/codex-tailer.js +270 -0
  94. package/dist/core/collector/codex-tailer.js.map +1 -0
  95. package/dist/core/collector/normalizer.d.ts +33 -0
  96. package/dist/core/collector/normalizer.d.ts.map +1 -0
  97. package/dist/core/collector/normalizer.js +94 -0
  98. package/dist/core/collector/normalizer.js.map +1 -0
  99. package/dist/core/collector/seq.d.ts +14 -0
  100. package/dist/core/collector/seq.d.ts.map +1 -0
  101. package/dist/core/collector/seq.js +20 -0
  102. package/dist/core/collector/seq.js.map +1 -0
  103. package/dist/core/collector/store.d.ts +16 -0
  104. package/dist/core/collector/store.d.ts.map +1 -0
  105. package/dist/core/collector/store.js +30 -0
  106. package/dist/core/collector/store.js.map +1 -0
  107. package/dist/core/collector/transcript.d.ts +38 -0
  108. package/dist/core/collector/transcript.d.ts.map +1 -0
  109. package/dist/core/collector/transcript.js +110 -0
  110. package/dist/core/collector/transcript.js.map +1 -0
  111. package/dist/core/event-bus.d.ts +9 -0
  112. package/dist/core/event-bus.d.ts.map +1 -0
  113. package/dist/core/event-bus.js +25 -0
  114. package/dist/core/event-bus.js.map +1 -0
  115. package/dist/core/example-seed.d.ts +34 -0
  116. package/dist/core/example-seed.d.ts.map +1 -0
  117. package/dist/core/example-seed.js +277 -0
  118. package/dist/core/example-seed.js.map +1 -0
  119. package/dist/core/inject/claude-settings.d.ts +34 -0
  120. package/dist/core/inject/claude-settings.d.ts.map +1 -0
  121. package/dist/core/inject/claude-settings.js +152 -0
  122. package/dist/core/inject/claude-settings.js.map +1 -0
  123. package/dist/core/inject/mcp-config.d.ts +26 -0
  124. package/dist/core/inject/mcp-config.d.ts.map +1 -0
  125. package/dist/core/inject/mcp-config.js +39 -0
  126. package/dist/core/inject/mcp-config.js.map +1 -0
  127. package/dist/core/inject/retention.d.ts +66 -0
  128. package/dist/core/inject/retention.d.ts.map +1 -0
  129. package/dist/core/inject/retention.js +119 -0
  130. package/dist/core/inject/retention.js.map +1 -0
  131. package/dist/core/inject/system-prompt.d.ts +11 -0
  132. package/dist/core/inject/system-prompt.d.ts.map +1 -0
  133. package/dist/core/inject/system-prompt.js +22 -0
  134. package/dist/core/inject/system-prompt.js.map +1 -0
  135. package/dist/core/macro-runner.d.ts +36 -0
  136. package/dist/core/macro-runner.d.ts.map +1 -0
  137. package/dist/core/macro-runner.js +66 -0
  138. package/dist/core/macro-runner.js.map +1 -0
  139. package/dist/core/macros.d.ts +10 -0
  140. package/dist/core/macros.d.ts.map +1 -0
  141. package/dist/core/macros.js +59 -0
  142. package/dist/core/macros.js.map +1 -0
  143. package/dist/core/path-safety.d.ts +33 -0
  144. package/dist/core/path-safety.d.ts.map +1 -0
  145. package/dist/core/path-safety.js +63 -0
  146. package/dist/core/path-safety.js.map +1 -0
  147. package/dist/core/paths.d.ts +27 -0
  148. package/dist/core/paths.d.ts.map +1 -0
  149. package/dist/core/paths.js +43 -0
  150. package/dist/core/paths.js.map +1 -0
  151. package/dist/core/port-detector.d.ts +69 -0
  152. package/dist/core/port-detector.d.ts.map +1 -0
  153. package/dist/core/port-detector.js +121 -0
  154. package/dist/core/port-detector.js.map +1 -0
  155. package/dist/core/session-manager.d.ts +275 -0
  156. package/dist/core/session-manager.d.ts.map +1 -0
  157. package/dist/core/session-manager.js +729 -0
  158. package/dist/core/session-manager.js.map +1 -0
  159. package/dist/core/task-manager.d.ts +138 -0
  160. package/dist/core/task-manager.d.ts.map +1 -0
  161. package/dist/core/task-manager.js +286 -0
  162. package/dist/core/task-manager.js.map +1 -0
  163. package/dist/core/task-stream.d.ts +32 -0
  164. package/dist/core/task-stream.d.ts.map +1 -0
  165. package/dist/core/task-stream.js +87 -0
  166. package/dist/core/task-stream.js.map +1 -0
  167. package/dist/core/workflow-registry.d.ts +36 -0
  168. package/dist/core/workflow-registry.d.ts.map +1 -0
  169. package/dist/core/workflow-registry.js +220 -0
  170. package/dist/core/workflow-registry.js.map +1 -0
  171. package/dist/core/workspace-context.d.ts +43 -0
  172. package/dist/core/workspace-context.d.ts.map +1 -0
  173. package/dist/core/workspace-context.js +108 -0
  174. package/dist/core/workspace-context.js.map +1 -0
  175. package/dist/core/workspace-watcher.d.ts +26 -0
  176. package/dist/core/workspace-watcher.d.ts.map +1 -0
  177. package/dist/core/workspace-watcher.js +174 -0
  178. package/dist/core/workspace-watcher.js.map +1 -0
  179. package/dist/index.d.ts +6 -0
  180. package/dist/index.d.ts.map +1 -0
  181. package/dist/index.js +6 -0
  182. package/dist/index.js.map +1 -0
  183. package/dist/profiles/canvas-guidelines.d.ts +20 -0
  184. package/dist/profiles/canvas-guidelines.d.ts.map +1 -0
  185. package/dist/profiles/canvas-guidelines.js +48 -0
  186. package/dist/profiles/canvas-guidelines.js.map +1 -0
  187. package/dist/profiles/default.d.ts +10 -0
  188. package/dist/profiles/default.d.ts.map +1 -0
  189. package/dist/profiles/default.js +70 -0
  190. package/dist/profiles/default.js.map +1 -0
  191. package/dist/server/auth.d.ts +9 -0
  192. package/dist/server/auth.d.ts.map +1 -0
  193. package/dist/server/auth.js +28 -0
  194. package/dist/server/auth.js.map +1 -0
  195. package/dist/server/canvas-render.d.ts +18 -0
  196. package/dist/server/canvas-render.d.ts.map +1 -0
  197. package/dist/server/canvas-render.js +24 -0
  198. package/dist/server/canvas-render.js.map +1 -0
  199. package/dist/server/canvas.d.ts +12 -0
  200. package/dist/server/canvas.d.ts.map +1 -0
  201. package/dist/server/canvas.js +174 -0
  202. package/dist/server/canvas.js.map +1 -0
  203. package/dist/server/events-ws.d.ts +11 -0
  204. package/dist/server/events-ws.d.ts.map +1 -0
  205. package/dist/server/events-ws.js +24 -0
  206. package/dist/server/events-ws.js.map +1 -0
  207. package/dist/server/fs.d.ts +4 -0
  208. package/dist/server/fs.d.ts.map +1 -0
  209. package/dist/server/fs.js +88 -0
  210. package/dist/server/fs.js.map +1 -0
  211. package/dist/server/index.d.ts +83 -0
  212. package/dist/server/index.d.ts.map +1 -0
  213. package/dist/server/index.js +0 -0
  214. package/dist/server/index.js.map +1 -0
  215. package/dist/server/ingest.d.ts +74 -0
  216. package/dist/server/ingest.d.ts.map +1 -0
  217. package/dist/server/ingest.js +74 -0
  218. package/dist/server/ingest.js.map +1 -0
  219. package/dist/server/macros.d.ts +32 -0
  220. package/dist/server/macros.d.ts.map +1 -0
  221. package/dist/server/macros.js +76 -0
  222. package/dist/server/macros.js.map +1 -0
  223. package/dist/server/rest.d.ts +75 -0
  224. package/dist/server/rest.d.ts.map +1 -0
  225. package/dist/server/rest.js +235 -0
  226. package/dist/server/rest.js.map +1 -0
  227. package/dist/server/static.d.ts +8 -0
  228. package/dist/server/static.d.ts.map +1 -0
  229. package/dist/server/static.js +36 -0
  230. package/dist/server/static.js.map +1 -0
  231. package/dist/server/terminal-ws.d.ts +9 -0
  232. package/dist/server/terminal-ws.d.ts.map +1 -0
  233. package/dist/server/terminal-ws.js +59 -0
  234. package/dist/server/terminal-ws.js.map +1 -0
  235. package/dist/server/ws-router.d.ts +16 -0
  236. package/dist/server/ws-router.d.ts.map +1 -0
  237. package/dist/server/ws-router.js +26 -0
  238. package/dist/server/ws-router.js.map +1 -0
  239. package/dist/shared/types.d.ts +485 -0
  240. package/dist/shared/types.d.ts.map +1 -0
  241. package/dist/shared/types.js +80 -0
  242. package/dist/shared/types.js.map +1 -0
  243. package/dist/web/assets/index-B9R4TzH7.css +32 -0
  244. package/dist/web/assets/index-Dh97QAgq.js +192 -0
  245. package/dist/web/index.html +27 -0
  246. package/package.json +84 -7
@@ -0,0 +1 @@
1
+ {"version":3,"file":"fs.js","sourceRoot":"","sources":["../../src/server/fs.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,83 @@
1
+ /**
2
+ * Harness server — integration point for every workstream.
3
+ *
4
+ * Single process: serves the built SPA from dist/web, the REST surface, the
5
+ * webhook ingest endpoint, canvas file serving, and the two WebSocket
6
+ * endpoints (/ws/terminal, /ws/events). Binds 127.0.0.1 only. See
7
+ * src/shared/types.ts for the full protocol contract.
8
+ */
9
+ import type { HarnessAdapter, HarnessKind } from "../shared/types.js";
10
+ import { SessionManager, type LaunchOptsBuilder } from "../core/session-manager.js";
11
+ import type { HarnessIdentity } from "../cli/auth.js";
12
+ export interface HarnessServerOptions {
13
+ port: number;
14
+ /** Bind address. Defaults to 127.0.0.1 — the server must never listen on 0.0.0.0. */
15
+ host?: string;
16
+ /** Per-boot secret; required on WS upgrades, /api (header) and hook scripts (bearer). */
17
+ bootToken: string;
18
+ telemetryOptIn: boolean;
19
+ /** Sapiom identity from CLI auth; omit/null when unauthenticated or --no-auth. */
20
+ identity?: HarnessIdentity | null;
21
+ /** Stable per-install id for analytics. Defaults to a freshly loaded/created one. */
22
+ machineId?: string;
23
+ /** Override the adapter set (tests inject a stubbed claude-code binary). */
24
+ adapters?: Partial<Record<HarnessKind, HarnessAdapter>>;
25
+ /** Root directory ALL persistent harness state lives under: machine-id,
26
+ * sessions.json, workflows.json, events.ndjson, settings.json, generated/
27
+ * and sample-project/. Defaults to the real HARNESS_HOME
28
+ * (`~/.sapiom/harness`) — unchanged for CLI users. Tests, e2e scripts and
29
+ * live checks MUST pass a scratch directory here so a server boot never
30
+ * registers its temp projects (or anything else) into the developer's
31
+ * real state. The per-file options below still override individual
32
+ * locations; each now defaults under this root. */
33
+ stateRoot?: string;
34
+ /** Session registry file. Defaults to `<stateRoot>/sessions.json`. */
35
+ sessionsPath?: string;
36
+ buildLaunchOpts?: LaunchOptsBuilder;
37
+ /** Root directory per-session generated agent configs are written under —
38
+ * and cleaned up from (exit-time delete + boot-time sweep, see
39
+ * core/inject/retention.ts). Defaults to `<stateRoot>/generated`. */
40
+ generatedRoot?: string;
41
+ collectorUrl?: string;
42
+ /** Workflow registry file. Defaults to `<stateRoot>/workflows.json`. */
43
+ workflowsRegistryPath?: string;
44
+ /** Local analytics ndjson sink. Defaults to `<stateRoot>/events.ndjson`. */
45
+ eventStorePath?: string;
46
+ /** Overrides the home directory codex rollout discovery scans
47
+ * (`<home>/.codex/sessions/...`). Defaults to the real OS home dir; tests
48
+ * point this at a fixture tree instead of touching `~/.codex` for real. */
49
+ codexHomeDir?: string;
50
+ /** Directory the built SPA lives in. Defaults to dist/web next to this module. */
51
+ webDir?: string;
52
+ /** The directory the CLI was launched against — scanned for workflows at
53
+ * boot so the rail isn't empty until a manual "+ Connect", and (unless
54
+ * autoCreateSession is false) where the boot session is created. */
55
+ launchDir?: string;
56
+ /** Auto-create a session in launchDir once the server is listening, so the
57
+ * app doesn't open empty. Defaults to true; the CLI's --no-session flag
58
+ * sets this to false. Uses `defaultHarnessKind` for which agent to launch. */
59
+ autoCreateSession?: boolean;
60
+ /** Harness kind for the auto-created boot session. The CLI resolves this
61
+ * from doctor() results (claude-code if present, else codex) before
62
+ * calling startServer; defaults to "claude-code" for callers that don't
63
+ * run doctor (tests, --dev flows without a real agent). */
64
+ defaultHarnessKind?: HarnessKind;
65
+ /** Harness kinds confirmed available at CLI boot (doctor()), surfaced
66
+ * as-is in AppState for the SPA — see its doc comment. Omitted (not
67
+ * defaulted here) when the caller doesn't supply it. */
68
+ availableHarnesses?: HarnessKind[];
69
+ /** "This boot found no prior harness use on this machine" — computed by
70
+ * the CLI before it records the launch dir, surfaced verbatim in
71
+ * AppState.firstRun (see its doc comment). Omitted → absent there too. */
72
+ firstRun?: boolean;
73
+ /** Where POST /api/sample-project seeds the bundled example. Defaults to
74
+ * `<stateRoot>/sample-project`. */
75
+ sampleProjectRoot?: string;
76
+ }
77
+ export interface HarnessServer {
78
+ close(): Promise<void>;
79
+ port: number;
80
+ sessionManager: SessionManager;
81
+ }
82
+ export declare const startServer: (options: HarnessServerOptions) => Promise<HarnessServer>;
83
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/server/index.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAUH,OAAO,KAAK,EAEV,cAAc,EACd,WAAW,EAGZ,MAAM,oBAAoB,CAAC;AAG5B,OAAO,EAAE,cAAc,EAAE,KAAK,iBAAiB,EAAE,MAAM,4BAA4B,CAAC;AAcpF,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,gBAAgB,CAAC;AAiDtD,MAAM,WAAW,oBAAoB;IACnC,IAAI,EAAE,MAAM,CAAC;IACb,qFAAqF;IACrF,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,yFAAyF;IACzF,SAAS,EAAE,MAAM,CAAC;IAClB,cAAc,EAAE,OAAO,CAAC;IACxB,kFAAkF;IAClF,QAAQ,CAAC,EAAE,eAAe,GAAG,IAAI,CAAC;IAClC,qFAAqF;IACrF,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,4EAA4E;IAC5E,QAAQ,CAAC,EAAE,OAAO,CAAC,MAAM,CAAC,WAAW,EAAE,cAAc,CAAC,CAAC,CAAC;IACxD;;;;;;;wDAOoD;IACpD,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,sEAAsE;IACtE,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,eAAe,CAAC,EAAE,iBAAiB,CAAC;IACpC;;0EAEsE;IACtE,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,wEAAwE;IACxE,qBAAqB,CAAC,EAAE,MAAM,CAAC;IAC/B,4EAA4E;IAC5E,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB;;+EAE2E;IAC3E,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,kFAAkF;IAClF,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB;;yEAEqE;IACrE,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB;;mFAE+E;IAC/E,iBAAiB,CAAC,EAAE,OAAO,CAAC;IAC5B;;;gEAG4D;IAC5D,kBAAkB,CAAC,EAAE,WAAW,CAAC;IACjC;;6DAEyD;IACzD,kBAAkB,CAAC,EAAE,WAAW,EAAE,CAAC;IACnC;;+EAE2E;IAC3E,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB;wCACoC;IACpC,iBAAiB,CAAC,EAAE,MAAM,CAAC;CAC5B;AAED,MAAM,WAAW,aAAa;IAC5B,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC,CAAC;IACvB,IAAI,EAAE,MAAM,CAAC;IACb,cAAc,EAAE,cAAc,CAAC;CAChC;AAuDD,eAAO,MAAM,WAAW,GAAU,SAAS,oBAAoB,KAAG,OAAO,CAAC,aAAa,CAynBtF,CAAC"}
Binary file
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/server/index.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,74 @@
1
+ /**
2
+ * POST /ingest — receives hook payloads from the emit.cjs scripts generated
3
+ * by core/inject/claude-settings.ts.
4
+ *
5
+ * Self-contained: the integrator mounts this router on the main app
6
+ * (`app.use(createIngestRouter(deps))`) and owns everything else (session
7
+ * manager, WS bridges, canvas). This file has no knowledge of express app
8
+ * setup beyond its own router.
9
+ */
10
+ import { type Router } from "express";
11
+ import type { AnalyticsEvent, HarnessKind } from "../shared/types.js";
12
+ import type { NormalizeContext } from "../core/collector/normalizer.js";
13
+ import { type SeqCounter } from "../core/collector/seq.js";
14
+ export interface IngestSessionContext {
15
+ harness: HarnessKind;
16
+ userId: string | null;
17
+ tenantId: string | null;
18
+ machineId: string;
19
+ /** Already-known agent session id, if resolved from an earlier session.start. */
20
+ agentSessionId: string | null;
21
+ }
22
+ export interface IngestDeps {
23
+ /** Per-boot secret; requests without a matching bearer token are rejected. */
24
+ ingestToken: string;
25
+ /** Raw hook payload -> AnalyticsEvent, or null to skip (e.g. PreToolUse). */
26
+ normalize: (hookEvent: string, hookPayload: Record<string, unknown>, context: NormalizeContext) => AnalyticsEvent | null;
27
+ /** Look up session context for a harnessSessionId. Undefined = unknown session, drop. */
28
+ resolveSession: (harnessSessionId: string) => IngestSessionContext | undefined;
29
+ /** Called once a session.start event reveals the agent's own session id. */
30
+ onAgentSessionResolved: (harnessSessionId: string, agentSessionId: string) => void;
31
+ /**
32
+ * Called once a SessionStart(-equivalent) event is actually processed for
33
+ * a session — the signal that its TUI is genuinely interactive, not just
34
+ * that its pty exists. See `SessionManager.setReady`/`HarnessSession.ready`
35
+ * for what this gates. Fires alongside `onAgentSessionResolved` (same
36
+ * event), kept separate since "ready" and "agent session id known" are
37
+ * conceptually distinct even though they happen to co-occur today.
38
+ */
39
+ onSessionReady?: (harnessSessionId: string) => void;
40
+ store: {
41
+ append(event: AnalyticsEvent): Promise<void>;
42
+ };
43
+ batcher: {
44
+ enqueue(event: AnalyticsEvent): void;
45
+ };
46
+ /** Optional transcript backfill for turn.completed / session.end. */
47
+ enrichFromTranscript?: (event: AnalyticsEvent, transcriptPath: string | undefined) => Promise<AnalyticsEvent>;
48
+ /** Called for every successfully normalized event (after any transcript
49
+ * enrichment), before it's persisted — e.g. to feed a tool.call event's
50
+ * command/output text to dev-server port detection. */
51
+ onNormalizedEvent?: (event: AnalyticsEvent) => void;
52
+ onError?: (err: unknown) => void;
53
+ /** Injectable for tests; defaults to a fresh per-router counter. */
54
+ seqCounter?: SeqCounter;
55
+ }
56
+ /**
57
+ * Exported so an in-process, non-HTTP event source (currently: the Codex
58
+ * transcript tailer, which has no hook script to POST here) can feed the
59
+ * exact same normalize -> transcript-enrich -> store -> batcher pipeline
60
+ * that a real hook POST goes through, without a needless HTTP round-trip
61
+ * back into this same server. Field names deliberately match the HTTP body
62
+ * shape (hookEvent/harnessSessionId/payload) so callers can construct one
63
+ * directly from whatever `{hookEvent, payload}` pair their event source
64
+ * already produces.
65
+ */
66
+ export interface IngestRequestBody {
67
+ hookEvent?: string;
68
+ receivedAt?: string;
69
+ harnessSessionId?: string;
70
+ payload?: Record<string, unknown>;
71
+ }
72
+ export declare function processIngest(body: IngestRequestBody, deps: IngestDeps, seqCounter: SeqCounter): Promise<void>;
73
+ export declare function createIngestRouter(deps: IngestDeps): Router;
74
+ //# sourceMappingURL=ingest.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ingest.d.ts","sourceRoot":"","sources":["../../src/server/ingest.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAEH,OAAgB,EAAE,KAAK,MAAM,EAAE,MAAM,SAAS,CAAC;AAE/C,OAAO,KAAK,EAAE,cAAc,EAAE,WAAW,EAAE,MAAM,oBAAoB,CAAC;AACtE,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,iCAAiC,CAAC;AACxE,OAAO,EAAoB,KAAK,UAAU,EAAE,MAAM,0BAA0B,CAAC;AAE7E,MAAM,WAAW,oBAAoB;IACnC,OAAO,EAAE,WAAW,CAAC;IACrB,MAAM,EAAE,MAAM,GAAG,IAAI,CAAC;IACtB,QAAQ,EAAE,MAAM,GAAG,IAAI,CAAC;IACxB,SAAS,EAAE,MAAM,CAAC;IAClB,iFAAiF;IACjF,cAAc,EAAE,MAAM,GAAG,IAAI,CAAC;CAC/B;AAED,MAAM,WAAW,UAAU;IACzB,8EAA8E;IAC9E,WAAW,EAAE,MAAM,CAAC;IACpB,6EAA6E;IAC7E,SAAS,EAAE,CACT,SAAS,EAAE,MAAM,EACjB,WAAW,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EACpC,OAAO,EAAE,gBAAgB,KACtB,cAAc,GAAG,IAAI,CAAC;IAC3B,yFAAyF;IACzF,cAAc,EAAE,CAAC,gBAAgB,EAAE,MAAM,KAAK,oBAAoB,GAAG,SAAS,CAAC;IAC/E,4EAA4E;IAC5E,sBAAsB,EAAE,CAAC,gBAAgB,EAAE,MAAM,EAAE,cAAc,EAAE,MAAM,KAAK,IAAI,CAAC;IACnF;;;;;;;OAOG;IACH,cAAc,CAAC,EAAE,CAAC,gBAAgB,EAAE,MAAM,KAAK,IAAI,CAAC;IACpD,KAAK,EAAE;QAAE,MAAM,CAAC,KAAK,EAAE,cAAc,GAAG,OAAO,CAAC,IAAI,CAAC,CAAA;KAAE,CAAC;IACxD,OAAO,EAAE;QAAE,OAAO,CAAC,KAAK,EAAE,cAAc,GAAG,IAAI,CAAA;KAAE,CAAC;IAClD,qEAAqE;IACrE,oBAAoB,CAAC,EAAE,CACrB,KAAK,EAAE,cAAc,EACrB,cAAc,EAAE,MAAM,GAAG,SAAS,KAC/B,OAAO,CAAC,cAAc,CAAC,CAAC;IAC7B;;4DAEwD;IACxD,iBAAiB,CAAC,EAAE,CAAC,KAAK,EAAE,cAAc,KAAK,IAAI,CAAC;IACpD,OAAO,CAAC,EAAE,CAAC,GAAG,EAAE,OAAO,KAAK,IAAI,CAAC;IACjC,oEAAoE;IACpE,UAAU,CAAC,EAAE,UAAU,CAAC;CACzB;AAED;;;;;;;;;GASG;AACH,MAAM,WAAW,iBAAiB;IAChC,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,gBAAgB,CAAC,EAAE,MAAM,CAAC;IAC1B,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;CACnC;AAOD,wBAAsB,aAAa,CACjC,IAAI,EAAE,iBAAiB,EACvB,IAAI,EAAE,UAAU,EAChB,UAAU,EAAE,UAAU,GACrB,OAAO,CAAC,IAAI,CAAC,CAwCf;AAED,wBAAgB,kBAAkB,CAAC,IAAI,EAAE,UAAU,GAAG,MAAM,CAsB3D"}
@@ -0,0 +1,74 @@
1
+ /**
2
+ * POST /ingest — receives hook payloads from the emit.cjs scripts generated
3
+ * by core/inject/claude-settings.ts.
4
+ *
5
+ * Self-contained: the integrator mounts this router on the main app
6
+ * (`app.use(createIngestRouter(deps))`) and owns everything else (session
7
+ * manager, WS bridges, canvas). This file has no knowledge of express app
8
+ * setup beyond its own router.
9
+ */
10
+ import express from "express";
11
+ import { createSeqCounter } from "../core/collector/seq.js";
12
+ function bearerToken(header) {
13
+ if (!header || !header.startsWith("Bearer "))
14
+ return null;
15
+ return header.slice("Bearer ".length);
16
+ }
17
+ export async function processIngest(body, deps, seqCounter) {
18
+ const hookEvent = body.hookEvent;
19
+ const harnessSessionId = body.harnessSessionId;
20
+ if (!hookEvent || !harnessSessionId)
21
+ return;
22
+ const session = deps.resolveSession(harnessSessionId);
23
+ if (!session)
24
+ return;
25
+ const hookPayload = body.payload ?? {};
26
+ const event = deps.normalize(hookEvent, hookPayload, {
27
+ userId: session.userId,
28
+ tenantId: session.tenantId,
29
+ machineId: session.machineId,
30
+ harnessSessionId,
31
+ harness: session.harness,
32
+ agentSessionId: session.agentSessionId,
33
+ // Assigned here, server-side — never trust ordering from the hook script.
34
+ seq: seqCounter.next(harnessSessionId),
35
+ });
36
+ if (!event)
37
+ return;
38
+ let finalEvent = event;
39
+ if ((hookEvent === "Stop" || hookEvent === "SessionEnd") && deps.enrichFromTranscript) {
40
+ const transcriptPath = typeof hookPayload.transcript_path === "string" ? hookPayload.transcript_path : undefined;
41
+ finalEvent = await deps.enrichFromTranscript(event, transcriptPath);
42
+ }
43
+ if (hookEvent === "SessionStart") {
44
+ if (finalEvent.agentSessionId)
45
+ deps.onAgentSessionResolved(harnessSessionId, finalEvent.agentSessionId);
46
+ deps.onSessionReady?.(harnessSessionId);
47
+ }
48
+ deps.onNormalizedEvent?.(finalEvent);
49
+ await deps.store.append(finalEvent);
50
+ deps.batcher.enqueue(finalEvent);
51
+ if (hookEvent === "SessionEnd") {
52
+ seqCounter.reset(harnessSessionId);
53
+ }
54
+ }
55
+ export function createIngestRouter(deps) {
56
+ const seqCounter = deps.seqCounter ?? createSeqCounter();
57
+ const router = express.Router();
58
+ router.use(express.json({ limit: "1mb" }));
59
+ router.post("/ingest", (req, res) => {
60
+ const token = bearerToken(req.headers.authorization);
61
+ if (token !== deps.ingestToken) {
62
+ res.status(401).json({ ok: false });
63
+ return;
64
+ }
65
+ // Always respond fast — a slow/dead harness server must never slow the
66
+ // agent's hook pipeline. Processing happens after the response is sent.
67
+ res.status(200).json({ ok: true });
68
+ void processIngest(req.body, deps, seqCounter).catch((err) => {
69
+ deps.onError?.(err);
70
+ });
71
+ });
72
+ return router;
73
+ }
74
+ //# sourceMappingURL=ingest.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ingest.js","sourceRoot":"","sources":["../../src/server/ingest.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,32 @@
1
+ import { type Router as ExpressRouter } from "express";
2
+ import { type MacroDef, type WorkflowInfo } from "../shared/types.js";
3
+ export interface MacrosRouterDeps {
4
+ listMacros(): MacroDef[];
5
+ /** Look up a registered workflow by its path; null when not found. */
6
+ findWorkflow(workflowPath: string): WorkflowInfo | null;
7
+ /** The session's project directory, or null when the session is unknown. */
8
+ getSessionCwd(harnessSessionId: string): string | null;
9
+ /** The session's currently bound workflow path (PATCH /sessions/:id/workflow),
10
+ * or null when unbound / the session is unknown. Explicit `workflowPath` on
11
+ * the request always wins — this is only a fallback for when it's omitted. */
12
+ getBoundWorkflowPath(harnessSessionId: string): string | null;
13
+ /** Injects resolved text into the session's pty (the SessionManager). */
14
+ injectInput(harnessSessionId: string, text: string, submit: boolean): Promise<void>;
15
+ /** Runs an "inject" macro marked `execution: "background"` as a headless
16
+ * one-shot task (the TaskManager) instead of touching the session's pty.
17
+ * May throw TaskNotSupportedError (session's harness has no headless
18
+ * mode → 400) or TaskAlreadyRunningError (same macro already in flight
19
+ * for this session → 409). */
20
+ runBackgroundTask(harnessSessionId: string, macro: MacroDef, prompt: string): Promise<void>;
21
+ /** Opens a URL in the user's default browser (the `open` package). */
22
+ openUrl(url: string): Promise<void>;
23
+ /** The "visualize" macro's `render-canvas` action: force refresh of the
24
+ * session's bound canvas — deterministic re-render plus an enrichment
25
+ * task re-spawn (see core/canvas-enrich.ts). May throw
26
+ * TaskAlreadyRunningError (an enrichment for this workflow is already in
27
+ * flight → 409) or TaskNotSupportedError (the session's harness has no
28
+ * headless mode → 400), same as any other background-task launch. */
29
+ renderCanvas(harnessSessionId: string): Promise<void>;
30
+ }
31
+ export declare function createMacrosRouter(deps: MacrosRouterDeps): ExpressRouter;
32
+ //# sourceMappingURL=macros.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"macros.d.ts","sourceRoot":"","sources":["../../src/server/macros.ts"],"names":[],"mappings":"AAYA,OAAO,EAAU,KAAK,MAAM,IAAI,aAAa,EAAE,MAAM,SAAS,CAAC;AAC/D,OAAO,EAAgB,KAAK,QAAQ,EAAwB,KAAK,YAAY,EAAE,MAAM,oBAAoB,CAAC;AAK1G,MAAM,WAAW,gBAAgB;IAC/B,UAAU,IAAI,QAAQ,EAAE,CAAC;IACzB,sEAAsE;IACtE,YAAY,CAAC,YAAY,EAAE,MAAM,GAAG,YAAY,GAAG,IAAI,CAAC;IACxD,4EAA4E;IAC5E,aAAa,CAAC,gBAAgB,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI,CAAC;IACvD;;mFAE+E;IAC/E,oBAAoB,CAAC,gBAAgB,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI,CAAC;IAC9D,yEAAyE;IACzE,WAAW,CAAC,gBAAgB,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,MAAM,EAAE,OAAO,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IACpF;;;;mCAI+B;IAC/B,iBAAiB,CAAC,gBAAgB,EAAE,MAAM,EAAE,KAAK,EAAE,QAAQ,EAAE,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IAC5F,sEAAsE;IACtE,OAAO,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IACpC;;;;;0EAKsE;IACtE,YAAY,CAAC,gBAAgB,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;CACvD;AAED,wBAAgB,kBAAkB,CAAC,IAAI,EAAE,gBAAgB,GAAG,aAAa,CA+DxE"}
@@ -0,0 +1,76 @@
1
+ /**
2
+ * Macro execution endpoint (workstream W5's backend slice): `GET /api/macros`
3
+ * and `POST /api/macros/:id/run` from src/shared/types.ts. The SPA's action
4
+ * rail already resolves and opens "open-url" macros client-side — it can't
5
+ * carry the boot token through `window.open` anyway — so in practice this
6
+ * only ever executes "inject" macros (routed to the session's pty, or to a
7
+ * headless background task when the macro says `execution: "background"`)
8
+ * and "render-canvas", but it handles every kind per the documented
9
+ * contract. The integrator mounts this (with express.json()) alongside the
10
+ * SessionManager, TaskManager, and WorkflowRegistry.
11
+ */
12
+ import * as path from "node:path";
13
+ import { Router } from "express";
14
+ import { CANVAS_INDEX } from "../shared/types.js";
15
+ import { MacroValidationError, resolveMacro } from "../core/macro-runner.js";
16
+ import { SessionNotReadyError } from "../core/session-manager.js";
17
+ import { TaskAlreadyRunningError, TaskNotSupportedError } from "../core/task-manager.js";
18
+ export function createMacrosRouter(deps) {
19
+ const router = Router();
20
+ router.get("/api/macros", (_req, res) => {
21
+ res.json(deps.listMacros());
22
+ });
23
+ router.post("/api/macros/:id/run", async (req, res) => {
24
+ const macro = deps.listMacros().find((m) => m.id === req.params.id);
25
+ if (!macro) {
26
+ res.status(404).json({ error: `Unknown macro '${req.params.id}'` });
27
+ return;
28
+ }
29
+ const body = (req.body ?? {});
30
+ if (typeof body.harnessSessionId !== "string" || !body.harnessSessionId) {
31
+ res.status(400).json({ error: "harnessSessionId is required" });
32
+ return;
33
+ }
34
+ const cwd = deps.getSessionCwd(body.harnessSessionId);
35
+ if (!cwd) {
36
+ res.status(404).json({ error: `Unknown session '${body.harnessSessionId}'` });
37
+ return;
38
+ }
39
+ const workflowPath = typeof body.workflowPath === "string" ? body.workflowPath : deps.getBoundWorkflowPath(body.harnessSessionId);
40
+ const workflow = workflowPath ? deps.findWorkflow(workflowPath) : null;
41
+ try {
42
+ const resolved = resolveMacro(macro, {
43
+ workflow,
44
+ sessionCwd: cwd,
45
+ canvasPath: path.join(cwd, CANVAS_INDEX),
46
+ subject: body.subject,
47
+ });
48
+ if (resolved.kind === "open-url") {
49
+ await deps.openUrl(resolved.url);
50
+ }
51
+ else if (resolved.kind === "render-canvas") {
52
+ await deps.renderCanvas(body.harnessSessionId);
53
+ }
54
+ else if (macro.execution === "background") {
55
+ await deps.runBackgroundTask(body.harnessSessionId, macro, resolved.text);
56
+ }
57
+ else {
58
+ await deps.injectInput(body.harnessSessionId, resolved.text, resolved.submit);
59
+ }
60
+ res.json({ ok: true });
61
+ }
62
+ catch (err) {
63
+ if (err instanceof MacroValidationError || err instanceof TaskNotSupportedError) {
64
+ res.status(400).json({ error: err.message });
65
+ return;
66
+ }
67
+ if (err instanceof SessionNotReadyError || err instanceof TaskAlreadyRunningError) {
68
+ res.status(409).json({ error: err.message });
69
+ return;
70
+ }
71
+ res.status(500).json({ error: err.message });
72
+ }
73
+ });
74
+ return router;
75
+ }
76
+ //# sourceMappingURL=macros.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"macros.js","sourceRoot":"","sources":["../../src/server/macros.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,75 @@
1
+ /**
2
+ * REST surface under /api — see src/shared/types.ts for the full contract
3
+ * table. This router covers the session-lifecycle endpoints (W1); workflows,
4
+ * macros and settings are mounted by other workstreams alongside this one.
5
+ */
6
+ import { Router } from "express";
7
+ import type { BackgroundTask, HarnessAdapter, HarnessKind, HarnessSession, MacroDef, SampleProjectSeedResponse, WorkflowInfo } from "../shared/types.js";
8
+ import { type SessionManager } from "../core/session-manager.js";
9
+ export interface RestRouterOptions {
10
+ sessionManager: SessionManager;
11
+ adapters: Partial<Record<HarnessKind, HarnessAdapter>>;
12
+ version: string;
13
+ /** Sapiom identity from CLI auth; null when unauthenticated / --no-auth. */
14
+ identity: {
15
+ userId: string;
16
+ organizationName: string;
17
+ } | null;
18
+ listWorkflows: () => Promise<WorkflowInfo[]>;
19
+ listMacros: () => MacroDef[];
20
+ /** Look up a registered workflow by its path; null when not found. Backs
21
+ * PATCH /sessions/:id/workflow's validation (a bind target must already
22
+ * be a known workflow — scan/connect it first). */
23
+ findWorkflow: (workflowPath: string) => WorkflowInfo | null;
24
+ /** Mirrors a session's workspace state (its binding plus the full workflow
25
+ * registry) into HARNESS_CONTEXT_FILE in its cwd — the caller (server/
26
+ * index.ts) resolves `session.boundWorkflowPath` against the live
27
+ * registry, so this only needs the session itself. Called on every
28
+ * successful bind/unbind. Never throws — a write failure is logged by the
29
+ * implementation, not surfaced as a request error. */
30
+ writeWorkspaceContext: (session: HarnessSession) => Promise<void>;
31
+ /** Re-renders the session's canvas (its bound workflow, or the workspace
32
+ * overview when unbound) via the deterministic pipeline — called after a
33
+ * successful bind/unbind so the pane reflects the new selection without
34
+ * waiting on the agent to run the Visualize macro itself. Never throws
35
+ * (core/canvas-render.ts's contract); defaults to a no-op for tests that
36
+ * don't care about canvas output. */
37
+ renderCanvas?: (session: HarnessSession) => Promise<void>;
38
+ /** Called after a settings PATCH persists a changed telemetryOptIn, so the
39
+ * live collector batcher can be gated without a server restart. */
40
+ onTelemetryOptInChange?: (optIn: boolean) => void;
41
+ /** Called (fire-and-forget) after a session is created, with its cwd and id
42
+ * — lets the integrator scan that directory for workflows (so opening a
43
+ * session in a new project discovers them without a manual "+ Connect")
44
+ * and, when the scan discovers one, render the new session's canvas. */
45
+ onSessionCreated?: (cwd: string, harnessSessionId: string) => void;
46
+ /** The directory the CLI was launched against — surfaced in AppState so the
47
+ * SPA can prefill the new-session modal with it. */
48
+ launchDir: string;
49
+ /** Background tasks known to this boot (TaskManager.list) — surfaced in
50
+ * AppState so a page load mid-run shows the canvas activity state without
51
+ * waiting for the next task.status frame. Optional: omitted by callers
52
+ * without a TaskManager (tests), leaving AppState.tasks absent. */
53
+ listTasks?: () => BackgroundTask[];
54
+ /** Harness kinds confirmed available at CLI boot (doctor()), in
55
+ * default-preference order. Omitted (rather than defaulted here) when the
56
+ * caller doesn't supply it, so AppState.availableHarnesses stays absent in
57
+ * that case too — see its doc comment for how consumers should treat that. */
58
+ availableHarnesses?: HarnessKind[];
59
+ /** "This boot found no prior harness use" — computed by the CLI before it
60
+ * mutated any state, surfaced verbatim in AppState.firstRun. Omitted when
61
+ * the caller doesn't supply it (tests), leaving AppState.firstRun absent. */
62
+ firstRun?: boolean;
63
+ /** Seeds (or reuses) the bundled example project and returns where it
64
+ * landed — backs POST /api/sample-project (the welcome panel's "Run the
65
+ * sample project"). Optional so callers without the real seeder (tests)
66
+ * get a 501 from the route instead of having to stub one. */
67
+ seedSampleProject?: () => Promise<SampleProjectSeedResponse>;
68
+ /** Where GET/PATCH /settings (and /state's settings read) persist to.
69
+ * Omitted, the real `~/.sapiom/harness/settings.json` — the integrator
70
+ * (server/index.ts) passes the path under its resolved state root so an
71
+ * isolated boot never reads or writes the developer's real settings. */
72
+ settingsPath?: string;
73
+ }
74
+ export declare function createRestRouter(options: RestRouterOptions): Router;
75
+ //# sourceMappingURL=rest.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"rest.d.ts","sourceRoot":"","sources":["../../src/server/rest.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAgB,EAAE,MAAM,EAAE,MAAM,SAAS,CAAC;AAG1C,OAAO,KAAK,EAEV,cAAc,EAGd,cAAc,EACd,WAAW,EACX,cAAc,EAGd,QAAQ,EACR,yBAAyB,EAEzB,YAAY,EACb,MAAM,oBAAoB,CAAC;AAC5B,OAAO,EAAwB,KAAK,cAAc,EAAE,MAAM,4BAA4B,CAAC;AAuBvF,MAAM,WAAW,iBAAiB;IAChC,cAAc,EAAE,cAAc,CAAC;IAC/B,QAAQ,EAAE,OAAO,CAAC,MAAM,CAAC,WAAW,EAAE,cAAc,CAAC,CAAC,CAAC;IACvD,OAAO,EAAE,MAAM,CAAC;IAChB,4EAA4E;IAC5E,QAAQ,EAAE;QAAE,MAAM,EAAE,MAAM,CAAC;QAAC,gBAAgB,EAAE,MAAM,CAAA;KAAE,GAAG,IAAI,CAAC;IAC9D,aAAa,EAAE,MAAM,OAAO,CAAC,YAAY,EAAE,CAAC,CAAC;IAC7C,UAAU,EAAE,MAAM,QAAQ,EAAE,CAAC;IAC7B;;wDAEoD;IACpD,YAAY,EAAE,CAAC,YAAY,EAAE,MAAM,KAAK,YAAY,GAAG,IAAI,CAAC;IAC5D;;;;;2DAKuD;IACvD,qBAAqB,EAAE,CAAC,OAAO,EAAE,cAAc,KAAK,OAAO,CAAC,IAAI,CAAC,CAAC;IAClE;;;;;0CAKsC;IACtC,YAAY,CAAC,EAAE,CAAC,OAAO,EAAE,cAAc,KAAK,OAAO,CAAC,IAAI,CAAC,CAAC;IAC1D;uEACmE;IACnE,sBAAsB,CAAC,EAAE,CAAC,KAAK,EAAE,OAAO,KAAK,IAAI,CAAC;IAClD;;;4EAGwE;IACxE,gBAAgB,CAAC,EAAE,CAAC,GAAG,EAAE,MAAM,EAAE,gBAAgB,EAAE,MAAM,KAAK,IAAI,CAAC;IACnE;wDACoD;IACpD,SAAS,EAAE,MAAM,CAAC;IAClB;;;wEAGoE;IACpE,SAAS,CAAC,EAAE,MAAM,cAAc,EAAE,CAAC;IACnC;;;kFAG8E;IAC9E,kBAAkB,CAAC,EAAE,WAAW,EAAE,CAAC;IACnC;;iFAE6E;IAC7E,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB;;;iEAG6D;IAC7D,iBAAiB,CAAC,EAAE,MAAM,OAAO,CAAC,yBAAyB,CAAC,CAAC;IAC7D;;;4EAGwE;IACxE,YAAY,CAAC,EAAE,MAAM,CAAC;CACvB;AAED,wBAAgB,gBAAgB,CAAC,OAAO,EAAE,iBAAiB,GAAG,MAAM,CAuNnE"}