indusagi-coding-agent 0.1.42 → 0.1.44

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 (288) hide show
  1. package/CHANGELOG.md +23 -3
  2. package/README.md +3 -0
  3. package/dist/command-line/args.js +1 -1
  4. package/dist/command-line/args.js.map +1 -1
  5. package/dist/command-line/list-models.js +1 -1
  6. package/dist/command-line/list-models.js.map +1 -1
  7. package/dist/command-line/login-handler.d.ts.map +1 -1
  8. package/dist/command-line/login-handler.js +39 -0
  9. package/dist/command-line/login-handler.js.map +1 -1
  10. package/dist/dev/observe-deep.d.ts +2 -0
  11. package/dist/dev/observe-deep.d.ts.map +1 -0
  12. package/dist/dev/observe-deep.js +333 -0
  13. package/dist/dev/observe-deep.js.map +1 -0
  14. package/dist/dev/observe-smoke.d.ts +2 -0
  15. package/dist/dev/observe-smoke.d.ts.map +1 -0
  16. package/dist/dev/observe-smoke.js +264 -0
  17. package/dist/dev/observe-smoke.js.map +1 -0
  18. package/dist/index.d.ts +4 -0
  19. package/dist/index.d.ts.map +1 -1
  20. package/dist/index.js +3 -0
  21. package/dist/index.js.map +1 -1
  22. package/dist/interfaces/induscode-ui-delegate.d.ts +3 -0
  23. package/dist/interfaces/induscode-ui-delegate.d.ts.map +1 -0
  24. package/dist/interfaces/induscode-ui-delegate.js +148 -0
  25. package/dist/interfaces/induscode-ui-delegate.js.map +1 -0
  26. package/dist/interfaces/terminal-ui/components/footer.d.ts.map +1 -1
  27. package/dist/interfaces/terminal-ui/components/footer.js +9 -15
  28. package/dist/interfaces/terminal-ui/components/footer.js.map +1 -1
  29. package/dist/interfaces/terminal-ui/components/model-selector.d.ts.map +1 -1
  30. package/dist/interfaces/terminal-ui/components/model-selector.js +1 -1
  31. package/dist/interfaces/terminal-ui/components/model-selector.js.map +1 -1
  32. package/dist/interfaces/terminal-ui/components/oauth-selector.d.ts.map +1 -1
  33. package/dist/interfaces/terminal-ui/components/oauth-selector.js +1 -0
  34. package/dist/interfaces/terminal-ui/components/oauth-selector.js.map +1 -1
  35. package/dist/main.d.ts.map +1 -1
  36. package/dist/main.js +42 -18
  37. package/dist/main.js.map +1 -1
  38. package/dist/observe.d.ts +2 -0
  39. package/dist/observe.d.ts.map +1 -0
  40. package/dist/observe.js +2 -0
  41. package/dist/observe.js.map +1 -0
  42. package/dist/runtime/agent-session.d.ts +15 -0
  43. package/dist/runtime/agent-session.d.ts.map +1 -1
  44. package/dist/runtime/agent-session.js +444 -223
  45. package/dist/runtime/agent-session.js.map +1 -1
  46. package/dist/runtime/index.d.ts +5 -0
  47. package/dist/runtime/index.d.ts.map +1 -1
  48. package/dist/runtime/index.js +5 -0
  49. package/dist/runtime/index.js.map +1 -1
  50. package/dist/runtime/model-registry.d.ts +6 -0
  51. package/dist/runtime/model-registry.d.ts.map +1 -1
  52. package/dist/runtime/model-registry.js +71 -14
  53. package/dist/runtime/model-registry.js.map +1 -1
  54. package/dist/runtime/model-resolver.d.ts.map +1 -1
  55. package/dist/runtime/model-resolver.js +6 -3
  56. package/dist/runtime/model-resolver.js.map +1 -1
  57. package/dist/runtime/observe.d.ts +50 -0
  58. package/dist/runtime/observe.d.ts.map +1 -0
  59. package/dist/runtime/observe.js +233 -0
  60. package/dist/runtime/observe.js.map +1 -0
  61. package/dist/runtime/plugins/types.d.ts +3 -0
  62. package/dist/runtime/plugins/types.d.ts.map +1 -1
  63. package/dist/runtime/plugins/types.js.map +1 -1
  64. package/dist/runtime/providers/adapters/claude-cli-adapter.d.ts +19 -0
  65. package/dist/runtime/providers/adapters/claude-cli-adapter.d.ts.map +1 -0
  66. package/dist/runtime/providers/adapters/claude-cli-adapter.js +242 -0
  67. package/dist/runtime/providers/adapters/claude-cli-adapter.js.map +1 -0
  68. package/dist/runtime/providers/adapters/codex-cli-adapter.d.ts +18 -0
  69. package/dist/runtime/providers/adapters/codex-cli-adapter.d.ts.map +1 -0
  70. package/dist/runtime/providers/adapters/codex-cli-adapter.js +177 -0
  71. package/dist/runtime/providers/adapters/codex-cli-adapter.js.map +1 -0
  72. package/dist/runtime/providers/adapters/indusagi-cli-adapter.d.ts +21 -0
  73. package/dist/runtime/providers/adapters/indusagi-cli-adapter.d.ts.map +1 -0
  74. package/dist/runtime/providers/adapters/indusagi-cli-adapter.js +162 -0
  75. package/dist/runtime/providers/adapters/indusagi-cli-adapter.js.map +1 -0
  76. package/dist/runtime/providers/adapters/utils.d.ts +12 -0
  77. package/dist/runtime/providers/adapters/utils.d.ts.map +1 -0
  78. package/dist/runtime/providers/adapters/utils.js +122 -0
  79. package/dist/runtime/providers/adapters/utils.js.map +1 -0
  80. package/dist/runtime/providers/builtins.d.ts +3 -0
  81. package/dist/runtime/providers/builtins.d.ts.map +1 -0
  82. package/dist/runtime/providers/builtins.js +99 -0
  83. package/dist/runtime/providers/builtins.js.map +1 -0
  84. package/dist/runtime/providers/provider-adapter-registry.d.ts +11 -0
  85. package/dist/runtime/providers/provider-adapter-registry.d.ts.map +1 -0
  86. package/dist/runtime/providers/provider-adapter-registry.js +36 -0
  87. package/dist/runtime/providers/provider-adapter-registry.js.map +1 -0
  88. package/dist/runtime/providers/provider-adapter.d.ts +33 -0
  89. package/dist/runtime/providers/provider-adapter.d.ts.map +1 -0
  90. package/dist/runtime/providers/provider-adapter.js +2 -0
  91. package/dist/runtime/providers/provider-adapter.js.map +1 -0
  92. package/dist/runtime/providers/provider-service.d.ts +33 -0
  93. package/dist/runtime/providers/provider-service.d.ts.map +1 -0
  94. package/dist/runtime/providers/provider-service.js +157 -0
  95. package/dist/runtime/providers/provider-service.js.map +1 -0
  96. package/dist/runtime/providers/types.d.ts +29 -0
  97. package/dist/runtime/providers/types.d.ts.map +1 -0
  98. package/dist/runtime/providers/types.js +9 -0
  99. package/dist/runtime/providers/types.js.map +1 -0
  100. package/dist/runtime/sdk.d.ts +6 -0
  101. package/dist/runtime/sdk.d.ts.map +1 -1
  102. package/dist/runtime/sdk.js +55 -8
  103. package/dist/runtime/sdk.js.map +1 -1
  104. package/dist/telemetry/core/types.d.ts +1 -1
  105. package/dist/telemetry/core/types.js +1 -1
  106. package/dist/vendor/observe/adapters/agent-event-adapter.d.ts +28 -0
  107. package/dist/vendor/observe/adapters/agent-event-adapter.d.ts.map +1 -0
  108. package/dist/vendor/observe/adapters/agent-event-adapter.js +136 -0
  109. package/dist/vendor/observe/adapters/agent-event-adapter.js.map +1 -0
  110. package/dist/vendor/observe/adapters/ai-stream-adapter.d.ts +24 -0
  111. package/dist/vendor/observe/adapters/ai-stream-adapter.d.ts.map +1 -0
  112. package/dist/vendor/observe/adapters/ai-stream-adapter.js +118 -0
  113. package/dist/vendor/observe/adapters/ai-stream-adapter.js.map +1 -0
  114. package/dist/vendor/observe/artifacts/content-store.d.ts +12 -0
  115. package/dist/vendor/observe/artifacts/content-store.d.ts.map +1 -0
  116. package/dist/vendor/observe/artifacts/content-store.js +2 -0
  117. package/dist/vendor/observe/artifacts/content-store.js.map +1 -0
  118. package/dist/vendor/observe/artifacts/file-content-store.d.ts +16 -0
  119. package/dist/vendor/observe/artifacts/file-content-store.d.ts.map +1 -0
  120. package/dist/vendor/observe/artifacts/file-content-store.js +43 -0
  121. package/dist/vendor/observe/artifacts/file-content-store.js.map +1 -0
  122. package/dist/vendor/observe/batcher.d.ts +27 -0
  123. package/dist/vendor/observe/batcher.d.ts.map +1 -0
  124. package/dist/vendor/observe/batcher.js +66 -0
  125. package/dist/vendor/observe/batcher.js.map +1 -0
  126. package/dist/vendor/observe/client/artifacts-manager.d.ts +29 -0
  127. package/dist/vendor/observe/client/artifacts-manager.d.ts.map +1 -0
  128. package/dist/vendor/observe/client/artifacts-manager.js +120 -0
  129. package/dist/vendor/observe/client/artifacts-manager.js.map +1 -0
  130. package/dist/vendor/observe/client/datasets-manager.d.ts +16 -0
  131. package/dist/vendor/observe/client/datasets-manager.d.ts.map +1 -0
  132. package/dist/vendor/observe/client/datasets-manager.js +27 -0
  133. package/dist/vendor/observe/client/datasets-manager.js.map +1 -0
  134. package/dist/vendor/observe/client/experiments-manager.d.ts +61 -0
  135. package/dist/vendor/observe/client/experiments-manager.d.ts.map +1 -0
  136. package/dist/vendor/observe/client/experiments-manager.js +132 -0
  137. package/dist/vendor/observe/client/experiments-manager.js.map +1 -0
  138. package/dist/vendor/observe/client/index.d.ts +9 -0
  139. package/dist/vendor/observe/client/index.d.ts.map +1 -0
  140. package/dist/vendor/observe/client/index.js +9 -0
  141. package/dist/vendor/observe/client/index.js.map +1 -0
  142. package/dist/vendor/observe/client/observe-client.d.ts +30 -0
  143. package/dist/vendor/observe/client/observe-client.d.ts.map +1 -0
  144. package/dist/vendor/observe/client/observe-client.js +22 -0
  145. package/dist/vendor/observe/client/observe-client.js.map +1 -0
  146. package/dist/vendor/observe/client/prompts-manager.d.ts +17 -0
  147. package/dist/vendor/observe/client/prompts-manager.d.ts.map +1 -0
  148. package/dist/vendor/observe/client/prompts-manager.js +38 -0
  149. package/dist/vendor/observe/client/prompts-manager.js.map +1 -0
  150. package/dist/vendor/observe/client/scores-manager.d.ts +10 -0
  151. package/dist/vendor/observe/client/scores-manager.d.ts.map +1 -0
  152. package/dist/vendor/observe/client/scores-manager.js +15 -0
  153. package/dist/vendor/observe/client/scores-manager.js.map +1 -0
  154. package/dist/vendor/observe/client/sessions-manager.d.ts +15 -0
  155. package/dist/vendor/observe/client/sessions-manager.d.ts.map +1 -0
  156. package/dist/vendor/observe/client/sessions-manager.js +24 -0
  157. package/dist/vendor/observe/client/sessions-manager.js.map +1 -0
  158. package/dist/vendor/observe/client/traces-manager.d.ts +23 -0
  159. package/dist/vendor/observe/client/traces-manager.d.ts.map +1 -0
  160. package/dist/vendor/observe/client/traces-manager.js +39 -0
  161. package/dist/vendor/observe/client/traces-manager.js.map +1 -0
  162. package/dist/vendor/observe/console-exporter.d.ts +11 -0
  163. package/dist/vendor/observe/console-exporter.d.ts.map +1 -0
  164. package/dist/vendor/observe/console-exporter.js +18 -0
  165. package/dist/vendor/observe/console-exporter.js.map +1 -0
  166. package/dist/vendor/observe/context.d.ts +4 -0
  167. package/dist/vendor/observe/context.d.ts.map +1 -0
  168. package/dist/vendor/observe/context.js +9 -0
  169. package/dist/vendor/observe/context.js.map +1 -0
  170. package/dist/vendor/observe/entities/artifacts.d.ts +46 -0
  171. package/dist/vendor/observe/entities/artifacts.d.ts.map +1 -0
  172. package/dist/vendor/observe/entities/artifacts.js +2 -0
  173. package/dist/vendor/observe/entities/artifacts.js.map +1 -0
  174. package/dist/vendor/observe/entities/datasets.d.ts +37 -0
  175. package/dist/vendor/observe/entities/datasets.d.ts.map +1 -0
  176. package/dist/vendor/observe/entities/datasets.js +2 -0
  177. package/dist/vendor/observe/entities/datasets.js.map +1 -0
  178. package/dist/vendor/observe/entities/experiments.d.ts +66 -0
  179. package/dist/vendor/observe/entities/experiments.d.ts.map +1 -0
  180. package/dist/vendor/observe/entities/experiments.js +2 -0
  181. package/dist/vendor/observe/entities/experiments.js.map +1 -0
  182. package/dist/vendor/observe/entities/index.d.ts +9 -0
  183. package/dist/vendor/observe/entities/index.d.ts.map +1 -0
  184. package/dist/vendor/observe/entities/index.js +9 -0
  185. package/dist/vendor/observe/entities/index.js.map +1 -0
  186. package/dist/vendor/observe/entities/prompts.d.ts +25 -0
  187. package/dist/vendor/observe/entities/prompts.d.ts.map +1 -0
  188. package/dist/vendor/observe/entities/prompts.js +2 -0
  189. package/dist/vendor/observe/entities/prompts.js.map +1 -0
  190. package/dist/vendor/observe/entities/scores.d.ts +28 -0
  191. package/dist/vendor/observe/entities/scores.d.ts.map +1 -0
  192. package/dist/vendor/observe/entities/scores.js +2 -0
  193. package/dist/vendor/observe/entities/scores.js.map +1 -0
  194. package/dist/vendor/observe/entities/sessions.d.ts +36 -0
  195. package/dist/vendor/observe/entities/sessions.d.ts.map +1 -0
  196. package/dist/vendor/observe/entities/sessions.js +2 -0
  197. package/dist/vendor/observe/entities/sessions.js.map +1 -0
  198. package/dist/vendor/observe/entities/shared.d.ts +26 -0
  199. package/dist/vendor/observe/entities/shared.d.ts.map +1 -0
  200. package/dist/vendor/observe/entities/shared.js +2 -0
  201. package/dist/vendor/observe/entities/shared.js.map +1 -0
  202. package/dist/vendor/observe/entities/traces.d.ts +59 -0
  203. package/dist/vendor/observe/entities/traces.d.ts.map +1 -0
  204. package/dist/vendor/observe/entities/traces.js +2 -0
  205. package/dist/vendor/observe/entities/traces.js.map +1 -0
  206. package/dist/vendor/observe/exporter.d.ts +2 -0
  207. package/dist/vendor/observe/exporter.d.ts.map +1 -0
  208. package/dist/vendor/observe/exporter.js +2 -0
  209. package/dist/vendor/observe/exporter.js.map +1 -0
  210. package/dist/vendor/observe/file-exporter.d.ts +16 -0
  211. package/dist/vendor/observe/file-exporter.d.ts.map +1 -0
  212. package/dist/vendor/observe/file-exporter.js +39 -0
  213. package/dist/vendor/observe/file-exporter.js.map +1 -0
  214. package/dist/vendor/observe/global.d.ts +6 -0
  215. package/dist/vendor/observe/global.d.ts.map +1 -0
  216. package/dist/vendor/observe/global.js +17 -0
  217. package/dist/vendor/observe/global.js.map +1 -0
  218. package/dist/vendor/observe/index.d.ts +24 -0
  219. package/dist/vendor/observe/index.d.ts.map +1 -0
  220. package/dist/vendor/observe/index.js +24 -0
  221. package/dist/vendor/observe/index.js.map +1 -0
  222. package/dist/vendor/observe/noop.d.ts +17 -0
  223. package/dist/vendor/observe/noop.d.ts.map +1 -0
  224. package/dist/vendor/observe/noop.js +80 -0
  225. package/dist/vendor/observe/noop.js.map +1 -0
  226. package/dist/vendor/observe/privacy.d.ts +18 -0
  227. package/dist/vendor/observe/privacy.d.ts.map +1 -0
  228. package/dist/vendor/observe/privacy.js +160 -0
  229. package/dist/vendor/observe/privacy.js.map +1 -0
  230. package/dist/vendor/observe/query/simple-query-client.d.ts +11 -0
  231. package/dist/vendor/observe/query/simple-query-client.d.ts.map +1 -0
  232. package/dist/vendor/observe/query/simple-query-client.js +31 -0
  233. package/dist/vendor/observe/query/simple-query-client.js.map +1 -0
  234. package/dist/vendor/observe/replay/session-replay.d.ts +20 -0
  235. package/dist/vendor/observe/replay/session-replay.d.ts.map +1 -0
  236. package/dist/vendor/observe/replay/session-replay.js +180 -0
  237. package/dist/vendor/observe/replay/session-replay.js.map +1 -0
  238. package/dist/vendor/observe/runtime.d.ts +27 -0
  239. package/dist/vendor/observe/runtime.d.ts.map +1 -0
  240. package/dist/vendor/observe/runtime.js +177 -0
  241. package/dist/vendor/observe/runtime.js.map +1 -0
  242. package/dist/vendor/observe/server/dashboard-html.d.ts +6 -0
  243. package/dist/vendor/observe/server/dashboard-html.d.ts.map +1 -0
  244. package/dist/vendor/observe/server/dashboard-html.js +305 -0
  245. package/dist/vendor/observe/server/dashboard-html.js.map +1 -0
  246. package/dist/vendor/observe/server/http-observe-server.d.ts +62 -0
  247. package/dist/vendor/observe/server/http-observe-server.d.ts.map +1 -0
  248. package/dist/vendor/observe/server/http-observe-server.js +418 -0
  249. package/dist/vendor/observe/server/http-observe-server.js.map +1 -0
  250. package/dist/vendor/observe/server/in-memory-observe-server.d.ts +20 -0
  251. package/dist/vendor/observe/server/in-memory-observe-server.d.ts.map +1 -0
  252. package/dist/vendor/observe/server/in-memory-observe-server.js +76 -0
  253. package/dist/vendor/observe/server/in-memory-observe-server.js.map +1 -0
  254. package/dist/vendor/observe/span.d.ts +45 -0
  255. package/dist/vendor/observe/span.d.ts.map +1 -0
  256. package/dist/vendor/observe/span.js +110 -0
  257. package/dist/vendor/observe/span.js.map +1 -0
  258. package/dist/vendor/observe/store/contracts.d.ts +59 -0
  259. package/dist/vendor/observe/store/contracts.d.ts.map +1 -0
  260. package/dist/vendor/observe/store/contracts.js +2 -0
  261. package/dist/vendor/observe/store/contracts.js.map +1 -0
  262. package/dist/vendor/observe/store/file-control-plane-store.d.ts +33 -0
  263. package/dist/vendor/observe/store/file-control-plane-store.d.ts.map +1 -0
  264. package/dist/vendor/observe/store/file-control-plane-store.js +146 -0
  265. package/dist/vendor/observe/store/file-control-plane-store.js.map +1 -0
  266. package/dist/vendor/observe/store/in-memory-control-plane-store.d.ts +84 -0
  267. package/dist/vendor/observe/store/in-memory-control-plane-store.d.ts.map +1 -0
  268. package/dist/vendor/observe/store/in-memory-control-plane-store.js +447 -0
  269. package/dist/vendor/observe/store/in-memory-control-plane-store.js.map +1 -0
  270. package/dist/vendor/observe/store/index.d.ts +4 -0
  271. package/dist/vendor/observe/store/index.d.ts.map +1 -0
  272. package/dist/vendor/observe/store/index.js +4 -0
  273. package/dist/vendor/observe/store/index.js.map +1 -0
  274. package/dist/vendor/observe/types.d.ts +246 -0
  275. package/dist/vendor/observe/types.d.ts.map +1 -0
  276. package/dist/vendor/observe/types.js +152 -0
  277. package/dist/vendor/observe/types.js.map +1 -0
  278. package/dist/vendor/observe/worker/in-memory-observe-worker.d.ts +25 -0
  279. package/dist/vendor/observe/worker/in-memory-observe-worker.d.ts.map +1 -0
  280. package/dist/vendor/observe/worker/in-memory-observe-worker.js +82 -0
  281. package/dist/vendor/observe/worker/in-memory-observe-worker.js.map +1 -0
  282. package/guides/CLAUDE_CODEX_CLI_INTEGRATION_PLAN.md +321 -0
  283. package/guides/{PI_MONO_MIT_REMOVAL_GUIDE.md → INDUSAGI_MONO_MIT_REMOVAL_GUIDE.md} +29 -29
  284. package/guides/INDUSVX_OBSERVE_FULL_INTEGRATION_REPORT.md +543 -0
  285. package/guides/OBSERVE_DEEP_VALIDATION.md +252 -0
  286. package/guides/OBSERVE_LOCAL_TESTING.md +183 -0
  287. package/guides/OPTION3_PROVIDER_ADAPTER_RUNTIME_PLAN.md +370 -0
  288. package/package.json +11 -4
@@ -0,0 +1,305 @@
1
+ function escapeForHtml(value) {
2
+ return value
3
+ .replaceAll("&", "&")
4
+ .replaceAll("<", "&lt;")
5
+ .replaceAll(">", "&gt;")
6
+ .replaceAll('"', "&quot;")
7
+ .replaceAll("'", "&#39;");
8
+ }
9
+ export function renderObserveDashboardHtml(options) {
10
+ const title = escapeForHtml(options.title ?? "Observe Dashboard");
11
+ const basePath = options.basePath.replace(/\/$/, "");
12
+ const safeBasePath = JSON.stringify(basePath);
13
+ return `<!doctype html>
14
+ <html lang="en">
15
+ <head>
16
+ <meta charset="utf-8" />
17
+ <meta name="viewport" content="width=device-width, initial-scale=1" />
18
+ <title>${title}</title>
19
+ <style>
20
+ :root {
21
+ color-scheme: dark;
22
+ --bg: #0b1020;
23
+ --panel: #131a2b;
24
+ --panel-alt: #1a2338;
25
+ --text: #ecf3ff;
26
+ --muted: #9fb0d1;
27
+ --accent: #76a9ff;
28
+ --border: #263252;
29
+ --good: #4ade80;
30
+ }
31
+ * { box-sizing: border-box; }
32
+ body {
33
+ margin: 0;
34
+ font-family: Inter, ui-sans-serif, system-ui, -apple-system, BlinkMacSystemFont, "Segoe UI", sans-serif;
35
+ background: linear-gradient(180deg, var(--bg), #0f172a 55%, #111827 100%);
36
+ color: var(--text);
37
+ }
38
+ .page {
39
+ max-width: 1200px;
40
+ margin: 0 auto;
41
+ padding: 24px;
42
+ }
43
+ .hero {
44
+ display: flex;
45
+ justify-content: space-between;
46
+ gap: 16px;
47
+ align-items: flex-end;
48
+ margin-bottom: 24px;
49
+ }
50
+ .hero h1 {
51
+ margin: 0 0 8px;
52
+ font-size: 2rem;
53
+ }
54
+ .hero p, .muted { color: var(--muted); }
55
+ .badge {
56
+ display: inline-flex;
57
+ align-items: center;
58
+ gap: 8px;
59
+ padding: 8px 12px;
60
+ border-radius: 999px;
61
+ background: rgba(118, 169, 255, 0.12);
62
+ border: 1px solid rgba(118, 169, 255, 0.25);
63
+ color: var(--accent);
64
+ }
65
+ .grid {
66
+ display: grid;
67
+ gap: 16px;
68
+ }
69
+ .cards {
70
+ grid-template-columns: repeat(auto-fit, minmax(180px, 1fr));
71
+ margin-bottom: 24px;
72
+ }
73
+ .panels {
74
+ grid-template-columns: repeat(auto-fit, minmax(320px, 1fr));
75
+ }
76
+ .panel {
77
+ background: rgba(19, 26, 43, 0.88);
78
+ border: 1px solid var(--border);
79
+ border-radius: 18px;
80
+ padding: 16px;
81
+ box-shadow: 0 12px 30px rgba(0, 0, 0, 0.22);
82
+ }
83
+ .panel h2 {
84
+ margin: 0 0 12px;
85
+ font-size: 1rem;
86
+ }
87
+ .card-value {
88
+ font-size: 1.8rem;
89
+ font-weight: 700;
90
+ margin-bottom: 6px;
91
+ }
92
+ ul {
93
+ margin: 0;
94
+ padding-left: 18px;
95
+ }
96
+ li { margin: 0 0 8px; }
97
+ code, pre {
98
+ font-family: ui-monospace, SFMono-Regular, Menlo, Monaco, Consolas, monospace;
99
+ }
100
+ pre {
101
+ margin: 0;
102
+ white-space: pre-wrap;
103
+ word-break: break-word;
104
+ background: rgba(12, 17, 29, 0.7);
105
+ border: 1px solid var(--border);
106
+ border-radius: 12px;
107
+ padding: 12px;
108
+ max-height: 360px;
109
+ overflow: auto;
110
+ }
111
+ .toolbar {
112
+ display: flex;
113
+ gap: 8px;
114
+ flex-wrap: wrap;
115
+ margin-bottom: 12px;
116
+ }
117
+ button {
118
+ cursor: pointer;
119
+ border: 1px solid var(--border);
120
+ background: var(--panel-alt);
121
+ color: var(--text);
122
+ border-radius: 10px;
123
+ padding: 8px 12px;
124
+ }
125
+ button:hover { border-color: var(--accent); }
126
+ .ok-dot {
127
+ width: 8px;
128
+ height: 8px;
129
+ border-radius: 999px;
130
+ background: var(--good);
131
+ display: inline-block;
132
+ }
133
+ .empty { color: var(--muted); font-style: italic; }
134
+ .split {
135
+ display: grid;
136
+ gap: 12px;
137
+ }
138
+ .kv {
139
+ display: grid;
140
+ grid-template-columns: 140px 1fr;
141
+ gap: 8px;
142
+ font-size: 0.92rem;
143
+ }
144
+ a { color: var(--accent); }
145
+ @media (max-width: 720px) {
146
+ .hero { flex-direction: column; align-items: flex-start; }
147
+ .kv { grid-template-columns: 1fr; }
148
+ }
149
+ </style>
150
+ </head>
151
+ <body>
152
+ <main class="page">
153
+ <section class="hero">
154
+ <div>
155
+ <h1>${title}</h1>
156
+ <p>Clean-room Observe dashboard for runtime telemetry and control-plane state.</p>
157
+ </div>
158
+ <div class="badge"><span class="ok-dot"></span><span id="health-status">Checking API…</span></div>
159
+ </section>
160
+
161
+ <section class="grid cards">
162
+ <article class="panel">
163
+ <h2>Total records</h2>
164
+ <div class="card-value" id="stat-total">—</div>
165
+ <div class="muted">Runtime records stored</div>
166
+ </article>
167
+ <article class="panel">
168
+ <h2>Traces</h2>
169
+ <div class="card-value" id="stat-traces">—</div>
170
+ <div class="muted">Trace records ingested</div>
171
+ </article>
172
+ <article class="panel">
173
+ <h2>Spans</h2>
174
+ <div class="card-value" id="stat-spans">—</div>
175
+ <div class="muted">Span records ingested</div>
176
+ </article>
177
+ <article class="panel">
178
+ <h2>Events</h2>
179
+ <div class="card-value" id="stat-events">—</div>
180
+ <div class="muted">Event records ingested</div>
181
+ </article>
182
+ </section>
183
+
184
+ <section class="grid panels">
185
+ <article class="panel">
186
+ <div class="toolbar">
187
+ <button id="refresh-button" type="button">Refresh</button>
188
+ <button id="show-records-button" type="button">Load latest records</button>
189
+ </div>
190
+ <h2>Runtime overview</h2>
191
+ <div class="split">
192
+ <div class="kv"><strong>API base</strong><code id="api-base"></code></div>
193
+ <div class="kv"><strong>Time range</strong><span id="time-range">—</span></div>
194
+ </div>
195
+ <pre id="records-output">Loading…</pre>
196
+ </article>
197
+
198
+ <article class="panel">
199
+ <h2>Latest control-plane traces</h2>
200
+ <ul id="trace-list"><li class="empty">Loading…</li></ul>
201
+ </article>
202
+
203
+ <article class="panel">
204
+ <h2>Artifacts</h2>
205
+ <ul id="artifact-list"><li class="empty">Loading…</li></ul>
206
+ </article>
207
+
208
+ <article class="panel">
209
+ <h2>Endpoint map</h2>
210
+ <ul>
211
+ <li><code>${escapeForHtml(basePath)}/ingest</code></li>
212
+ <li><code>${escapeForHtml(basePath)}/records</code></li>
213
+ <li><code>${escapeForHtml(basePath)}/stats</code></li>
214
+ <li><code>${escapeForHtml(basePath)}/control-plane/traces</code></li>
215
+ <li><code>${escapeForHtml(basePath)}/control-plane/artifacts</code></li>
216
+ </ul>
217
+ </article>
218
+ </section>
219
+ </main>
220
+
221
+ <script>
222
+ const basePath = ${safeBasePath};
223
+ const byId = (id) => document.getElementById(id);
224
+
225
+ function setText(id, value) {
226
+ const node = byId(id);
227
+ if (node) node.textContent = value;
228
+ }
229
+
230
+ function renderList(id, items, formatter) {
231
+ const node = byId(id);
232
+ if (!node) return;
233
+ if (!items || items.length === 0) {
234
+ node.innerHTML = '<li class="empty">No data yet</li>';
235
+ return;
236
+ }
237
+ node.innerHTML = items.map(formatter).join('');
238
+ }
239
+
240
+ function formatTimestamp(ts) {
241
+ if (!ts) return '—';
242
+ return new Date(ts).toLocaleString();
243
+ }
244
+
245
+ async function fetchJson(path) {
246
+ const response = await fetch(path);
247
+ if (!response.ok) {
248
+ throw new Error('Request failed: ' + response.status + ' ' + path);
249
+ }
250
+ return response.json();
251
+ }
252
+
253
+ async function refreshDashboard(loadRecords = false) {
254
+ setText('api-base', basePath);
255
+ const [health, stats, traces, artifacts] = await Promise.all([
256
+ fetchJson(basePath + '/health'),
257
+ fetchJson(basePath + '/stats'),
258
+ fetchJson(basePath + '/control-plane/traces?limit=8').catch(() => ({ items: [] })),
259
+ fetchJson(basePath + '/control-plane/artifacts?limit=8').catch(() => ({ items: [] })),
260
+ ]);
261
+
262
+ setText('health-status', health.ok ? 'API healthy' : 'API unavailable');
263
+ setText('stat-total', String(stats.total ?? 0));
264
+ setText('stat-traces', String(stats.byRecordType?.trace ?? 0));
265
+ setText('stat-spans', String(stats.byRecordType?.span ?? 0));
266
+ setText('stat-events', String(stats.byRecordType?.event ?? 0));
267
+ setText('time-range', formatTimestamp(stats.earliestTs) + ' → ' + formatTimestamp(stats.latestTs));
268
+
269
+ renderList('trace-list', traces.items ?? [], (item) =>
270
+ '<li><strong>' + (item.name || item.id) + '</strong><br /><span class="muted">' +
271
+ (item.status || 'unknown') + ' · ' + formatTimestamp(item.updatedAt) + '</span></li>'
272
+ );
273
+
274
+ renderList('artifact-list', artifacts.items ?? [], (item) =>
275
+ '<li><strong>' + (item.name || item.id) + '</strong><br /><span class="muted">' +
276
+ (item.kind || 'artifact') + ' · ' + (item.storage || 'inline') + '</span></li>'
277
+ );
278
+
279
+ if (loadRecords) {
280
+ const records = await fetchJson(basePath + '/records?limit=12&order=desc');
281
+ byId('records-output').textContent = JSON.stringify(records.items ?? [], null, 2);
282
+ }
283
+ }
284
+
285
+ byId('refresh-button')?.addEventListener('click', () => {
286
+ refreshDashboard(false).catch((error) => {
287
+ byId('records-output').textContent = String(error);
288
+ });
289
+ });
290
+
291
+ byId('show-records-button')?.addEventListener('click', () => {
292
+ refreshDashboard(true).catch((error) => {
293
+ byId('records-output').textContent = String(error);
294
+ });
295
+ });
296
+
297
+ refreshDashboard(true).catch((error) => {
298
+ setText('health-status', 'API error');
299
+ byId('records-output').textContent = String(error);
300
+ });
301
+ </script>
302
+ </body>
303
+ </html>`;
304
+ }
305
+ //# sourceMappingURL=dashboard-html.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"dashboard-html.js","sourceRoot":"","sources":["../../../../app/vendor/observe/server/dashboard-html.ts"],"names":[],"mappings":"AAKA,SAAS,aAAa,CAAC,KAAa;IAClC,OAAO,KAAK;SACT,UAAU,CAAC,GAAG,EAAE,OAAO,CAAC;SACxB,UAAU,CAAC,GAAG,EAAE,MAAM,CAAC;SACvB,UAAU,CAAC,GAAG,EAAE,MAAM,CAAC;SACvB,UAAU,CAAC,GAAG,EAAE,QAAQ,CAAC;SACzB,UAAU,CAAC,GAAG,EAAE,OAAO,CAAC,CAAC;AAC9B,CAAC;AAED,MAAM,UAAU,0BAA0B,CAAC,OAAoC;IAC7E,MAAM,KAAK,GAAG,aAAa,CAAC,OAAO,CAAC,KAAK,IAAI,mBAAmB,CAAC,CAAC;IAClE,MAAM,QAAQ,GAAG,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC;IACrD,MAAM,YAAY,GAAG,IAAI,CAAC,SAAS,CAAC,QAAQ,CAAC,CAAC;IAE9C,OAAO;;;;;aAKI,KAAK;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;gBAyIF,KAAK;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;wBAwDG,aAAa,CAAC,QAAQ,CAAC;wBACvB,aAAa,CAAC,QAAQ,CAAC;wBACvB,aAAa,CAAC,QAAQ,CAAC;wBACvB,aAAa,CAAC,QAAQ,CAAC;wBACvB,aAAa,CAAC,QAAQ,CAAC;;;;;;;yBAOtB,YAAY;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;QAiF7B,CAAC;AACT,CAAC"}
@@ -0,0 +1,62 @@
1
+ import { type IncomingMessage, type ServerResponse } from "node:http";
2
+ import type { ObserveControlPlaneStore } from "../index.js";
3
+ import type { ObserveQueryBackend, ObserveRecord, ObserveSink } from "../types.js";
4
+ export interface ObserveHttpServerOptions {
5
+ sink: ObserveSink;
6
+ queryBackend: ObserveQueryBackend;
7
+ controlPlaneStore?: ObserveControlPlaneStore;
8
+ host?: string;
9
+ port?: number;
10
+ basePath?: string;
11
+ maxBodyBytes?: number;
12
+ }
13
+ export interface ObserveHttpIngestRequest {
14
+ sessionId?: string;
15
+ records: ObserveRecord[];
16
+ }
17
+ export interface ObserveHttpIngestResponse {
18
+ accepted: number;
19
+ mirroredTraceCount: number;
20
+ }
21
+ export declare class ObserveHttpServer {
22
+ readonly host: string;
23
+ readonly port?: number;
24
+ readonly basePath: string;
25
+ private readonly sink;
26
+ private readonly queryBackend;
27
+ private readonly controlPlaneStore?;
28
+ private readonly maxBodyBytes;
29
+ private server?;
30
+ constructor(options: ObserveHttpServerOptions);
31
+ start(): Promise<{
32
+ host: string;
33
+ port: number;
34
+ }>;
35
+ stop(): Promise<void>;
36
+ handle(req: IncomingMessage, res: ServerResponse): Promise<void>;
37
+ private handleControlPlaneGet;
38
+ private respondEntity;
39
+ private ingest;
40
+ private readIngestPayload;
41
+ private isObserveBatch;
42
+ private readJsonBody;
43
+ private parseObserveQuery;
44
+ private parseSessionFilter;
45
+ private parseTraceFilter;
46
+ private parseArtifactFilter;
47
+ private parsePromptFilter;
48
+ private parseDatasetFilter;
49
+ private parseDatasetItemFilter;
50
+ private parseExperimentFilter;
51
+ private parseExperimentRunFilter;
52
+ private parseScoreFilter;
53
+ private listParam;
54
+ private stringParam;
55
+ private numberParam;
56
+ private orderParam;
57
+ private getRequestUrl;
58
+ private normalizeBasePath;
59
+ private html;
60
+ private json;
61
+ }
62
+ //# sourceMappingURL=http-observe-server.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"http-observe-server.d.ts","sourceRoot":"","sources":["../../../../app/vendor/observe/server/http-observe-server.ts"],"names":[],"mappings":"AAAA,OAAO,EAAgB,KAAK,eAAe,EAAe,KAAK,cAAc,EAAE,MAAM,WAAW,CAAC;AAEjG,OAAO,KAAK,EAGV,wBAAwB,EAkBzB,MAAM,aAAa,CAAC;AACrB,OAAO,KAAK,EAGV,mBAAmB,EACnB,aAAa,EAEb,WAAW,EAEZ,MAAM,aAAa,CAAC;AAErB,MAAM,WAAW,wBAAwB;IACvC,IAAI,EAAE,WAAW,CAAC;IAClB,YAAY,EAAE,mBAAmB,CAAC;IAClC,iBAAiB,CAAC,EAAE,wBAAwB,CAAC;IAC7C,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,YAAY,CAAC,EAAE,MAAM,CAAC;CACvB;AAED,MAAM,WAAW,wBAAwB;IACvC,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,OAAO,EAAE,aAAa,EAAE,CAAC;CAC1B;AAED,MAAM,WAAW,yBAAyB;IACxC,QAAQ,EAAE,MAAM,CAAC;IACjB,kBAAkB,EAAE,MAAM,CAAC;CAC5B;AAED,qBAAa,iBAAiB;IAC5B,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,IAAI,CAAC,EAAE,MAAM,CAAC;IACvB,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC;IAE1B,OAAO,CAAC,QAAQ,CAAC,IAAI,CAAc;IACnC,OAAO,CAAC,QAAQ,CAAC,YAAY,CAAsB;IACnD,OAAO,CAAC,QAAQ,CAAC,iBAAiB,CAAC,CAA2B;IAC9D,OAAO,CAAC,QAAQ,CAAC,YAAY,CAAS;IACtC,OAAO,CAAC,MAAM,CAAC,CAAS;gBAEZ,OAAO,EAAE,wBAAwB;IAUvC,KAAK,IAAI,OAAO,CAAC;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,MAAM,CAAA;KAAE,CAAC;IA6BhD,IAAI,IAAI,OAAO,CAAC,IAAI,CAAC;IAYrB,MAAM,CAAC,GAAG,EAAE,eAAe,EAAE,GAAG,EAAE,cAAc,GAAG,OAAO,CAAC,IAAI,CAAC;YAyDxD,qBAAqB;YAoIrB,aAAa;YAcb,MAAM;YA+BN,iBAAiB;IAoB/B,OAAO,CAAC,cAAc;YAWR,YAAY;IAkB1B,OAAO,CAAC,iBAAiB;IAkBzB,OAAO,CAAC,kBAAkB;IAQ1B,OAAO,CAAC,gBAAgB;IAUxB,OAAO,CAAC,mBAAmB;IAS3B,OAAO,CAAC,iBAAiB;IAOzB,OAAO,CAAC,kBAAkB;IAM1B,OAAO,CAAC,sBAAsB;IAO9B,OAAO,CAAC,qBAAqB;IAQ7B,OAAO,CAAC,wBAAwB;IAShC,OAAO,CAAC,gBAAgB;IASxB,OAAO,CAAC,SAAS;IAUjB,OAAO,CAAC,WAAW;IAKnB,OAAO,CAAC,WAAW;IAUnB,OAAO,CAAC,UAAU;IASlB,OAAO,CAAC,aAAa;IAIrB,OAAO,CAAC,iBAAiB;IAMzB,OAAO,CAAC,IAAI;IAOZ,OAAO,CAAC,IAAI;CAOb"}