@evalops/maestro 0.10.8 → 0.10.11

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 (1009) hide show
  1. package/README.md +3 -1
  2. package/dist/agent/action-approval.d.ts +6 -0
  3. package/dist/agent/action-approval.d.ts.map +1 -1
  4. package/dist/agent/action-approval.js.map +1 -1
  5. package/dist/agent/agent.d.ts +13 -1
  6. package/dist/agent/agent.d.ts.map +1 -1
  7. package/dist/agent/agent.js +368 -1
  8. package/dist/agent/agent.js.map +1 -1
  9. package/dist/agent/auto-compaction.d.ts +4 -4
  10. package/dist/agent/auto-compaction.d.ts.map +1 -1
  11. package/dist/agent/auto-compaction.js.map +1 -1
  12. package/dist/agent/compaction-cleanup.d.ts +2 -0
  13. package/dist/agent/compaction-cleanup.d.ts.map +1 -1
  14. package/dist/agent/compaction-cleanup.js +17 -2
  15. package/dist/agent/compaction-cleanup.js.map +1 -1
  16. package/dist/agent/compaction.d.ts +3 -1
  17. package/dist/agent/compaction.d.ts.map +1 -1
  18. package/dist/agent/compaction.js +10 -2
  19. package/dist/agent/compaction.js.map +1 -1
  20. package/dist/agent/context-manager.d.ts +4 -0
  21. package/dist/agent/context-manager.d.ts.map +1 -1
  22. package/dist/agent/context-manager.js +8 -0
  23. package/dist/agent/context-manager.js.map +1 -1
  24. package/dist/agent/context-providers.d.ts +2 -0
  25. package/dist/agent/context-providers.d.ts.map +1 -1
  26. package/dist/agent/context-providers.js +3 -2
  27. package/dist/agent/context-providers.js.map +1 -1
  28. package/dist/agent/providers/google-gemini-cli.js +17 -5
  29. package/dist/agent/providers/google.js +174 -144
  30. package/dist/agent/providers/openai-codex-responses.d.ts +4 -0
  31. package/dist/agent/providers/openai-codex-responses.d.ts.map +1 -0
  32. package/dist/agent/providers/openai-codex-responses.js +637 -0
  33. package/dist/agent/providers/openai-codex-responses.js.map +1 -0
  34. package/dist/agent/providers/openai-codex-session.d.ts +18 -0
  35. package/dist/agent/providers/openai-codex-session.d.ts.map +1 -0
  36. package/dist/agent/providers/openai-codex-session.js +53 -0
  37. package/dist/agent/providers/openai-codex-session.js.map +1 -0
  38. package/dist/agent/providers/openai-responses-sdk.d.ts.map +1 -1
  39. package/dist/agent/providers/openai-responses-sdk.js +16 -6
  40. package/dist/agent/providers/openai-responses-sdk.js.map +1 -1
  41. package/dist/agent/providers/openai-shared.d.ts +12 -5
  42. package/dist/agent/providers/openai-shared.d.ts.map +1 -1
  43. package/dist/agent/providers/openai-shared.js +291 -2
  44. package/dist/agent/providers/openai-shared.js.map +1 -1
  45. package/dist/agent/providers/openai.d.ts +1 -1
  46. package/dist/agent/providers/openai.d.ts.map +1 -1
  47. package/dist/agent/providers/openai.js +48 -20
  48. package/dist/agent/providers/openai.js.map +1 -1
  49. package/dist/agent/providers/vertex.js +7 -0
  50. package/dist/agent/tracing.d.ts +16 -5
  51. package/dist/agent/tracing.d.ts.map +1 -1
  52. package/dist/agent/tracing.js +44 -2
  53. package/dist/agent/tracing.js.map +1 -1
  54. package/dist/agent/transport/create-provider-stream.d.ts.map +1 -1
  55. package/dist/agent/transport/create-provider-stream.js +9 -0
  56. package/dist/agent/transport/create-provider-stream.js.map +1 -1
  57. package/dist/agent/transport/tool-execution-bridge.d.ts +86 -0
  58. package/dist/agent/transport/tool-execution-bridge.d.ts.map +1 -0
  59. package/dist/agent/transport/tool-execution-bridge.js +665 -0
  60. package/dist/agent/transport/tool-execution-bridge.js.map +1 -0
  61. package/dist/agent/transport/tool-execution.d.ts +3 -0
  62. package/dist/agent/transport/tool-execution.d.ts.map +1 -1
  63. package/dist/agent/transport/tool-execution.js +16 -1
  64. package/dist/agent/transport/tool-execution.js.map +1 -1
  65. package/dist/agent/transport/tool-safety-pipeline.d.ts +7 -1
  66. package/dist/agent/transport/tool-safety-pipeline.d.ts.map +1 -1
  67. package/dist/agent/transport/tool-safety-pipeline.js +207 -40
  68. package/dist/agent/transport/tool-safety-pipeline.js.map +1 -1
  69. package/dist/agent/transport/tool-update-queue.d.ts +2 -0
  70. package/dist/agent/transport/tool-update-queue.d.ts.map +1 -1
  71. package/dist/agent/transport/tool-update-queue.js.map +1 -1
  72. package/dist/agent/transport.d.ts +3 -0
  73. package/dist/agent/transport.d.ts.map +1 -1
  74. package/dist/agent/transport.js +96 -16
  75. package/dist/agent/transport.js.map +1 -1
  76. package/dist/agent/types.d.ts +50 -2
  77. package/dist/agent/types.d.ts.map +1 -1
  78. package/dist/agent/types.js.map +1 -1
  79. package/dist/approvals/platform-action-approval.d.ts +32 -0
  80. package/dist/approvals/platform-action-approval.d.ts.map +1 -0
  81. package/dist/approvals/platform-action-approval.js +210 -0
  82. package/dist/approvals/platform-action-approval.js.map +1 -0
  83. package/dist/approvals/service-client.d.ts +56 -0
  84. package/dist/approvals/service-client.d.ts.map +1 -0
  85. package/dist/approvals/service-client.js +316 -0
  86. package/dist/approvals/service-client.js.map +1 -0
  87. package/dist/audit/logger.d.ts +4 -4
  88. package/dist/bootstrap/auth-setup.d.ts +2 -2
  89. package/dist/bootstrap/auth-setup.d.ts.map +1 -1
  90. package/dist/bootstrap/auth-setup.js +4 -7
  91. package/dist/bootstrap/auth-setup.js.map +1 -1
  92. package/dist/cli/args.d.ts +2 -0
  93. package/dist/cli/args.d.ts.map +1 -1
  94. package/dist/cli/args.js +29 -0
  95. package/dist/cli/args.js.map +1 -1
  96. package/dist/cli/commands/codex.d.ts +2 -0
  97. package/dist/cli/commands/codex.d.ts.map +1 -0
  98. package/dist/cli/commands/codex.js +65 -0
  99. package/dist/cli/commands/codex.js.map +1 -0
  100. package/dist/cli/commands/config.js +1 -1
  101. package/dist/cli/commands/config.js.map +1 -1
  102. package/dist/cli/commands/evalops.d.ts +2 -0
  103. package/dist/cli/commands/evalops.d.ts.map +1 -0
  104. package/dist/cli/commands/evalops.js +74 -0
  105. package/dist/cli/commands/evalops.js.map +1 -0
  106. package/dist/cli/commands/hosted-runner.d.ts +23 -0
  107. package/dist/cli/commands/hosted-runner.d.ts.map +1 -0
  108. package/dist/cli/commands/hosted-runner.js +241 -0
  109. package/dist/cli/commands/hosted-runner.js.map +1 -0
  110. package/dist/cli/commands/init.d.ts +4 -0
  111. package/dist/cli/commands/init.d.ts.map +1 -0
  112. package/dist/cli/commands/init.js +140 -0
  113. package/dist/cli/commands/init.js.map +1 -0
  114. package/dist/cli/commands/memory.d.ts.map +1 -1
  115. package/dist/cli/commands/memory.js +23 -30
  116. package/dist/cli/commands/memory.js.map +1 -1
  117. package/dist/cli/commands/remote.d.ts +3 -0
  118. package/dist/cli/commands/remote.d.ts.map +1 -0
  119. package/dist/cli/commands/remote.js +631 -0
  120. package/dist/cli/commands/remote.js.map +1 -0
  121. package/dist/cli/commands/stats.d.ts +7 -0
  122. package/dist/cli/commands/stats.d.ts.map +1 -0
  123. package/dist/cli/commands/stats.js +167 -0
  124. package/dist/cli/commands/stats.js.map +1 -0
  125. package/dist/cli/headless-protocol.d.ts +16 -1
  126. package/dist/cli/headless-protocol.d.ts.map +1 -1
  127. package/dist/cli/headless-protocol.js +60 -4
  128. package/dist/cli/headless-protocol.js.map +1 -1
  129. package/dist/cli/headless.d.ts.map +1 -1
  130. package/dist/cli/headless.js +1 -0
  131. package/dist/cli/headless.js.map +1 -1
  132. package/dist/cli/help.d.ts.map +1 -1
  133. package/dist/cli/help.js +44 -1
  134. package/dist/cli/help.js.map +1 -1
  135. package/dist/cli/jsonl-writer.d.ts.map +1 -1
  136. package/dist/cli/jsonl-writer.js +19 -6
  137. package/dist/cli/jsonl-writer.js.map +1 -1
  138. package/dist/cli-tui/client-tools/client-tool-controller.d.ts.map +1 -1
  139. package/dist/cli-tui/client-tools/client-tool-controller.js +17 -1
  140. package/dist/cli-tui/client-tools/client-tool-controller.js.map +1 -1
  141. package/dist/cli-tui/commands/access-command.js +1 -1
  142. package/dist/cli-tui/commands/access-command.js.map +1 -1
  143. package/dist/cli-tui/commands/audit-command.js +1 -1
  144. package/dist/cli-tui/commands/audit-command.js.map +1 -1
  145. package/dist/cli-tui/commands/command-catalog.d.ts +29 -0
  146. package/dist/cli-tui/commands/command-catalog.d.ts.map +1 -0
  147. package/dist/cli-tui/commands/command-catalog.js +645 -0
  148. package/dist/cli-tui/commands/command-catalog.js.map +1 -0
  149. package/dist/cli-tui/commands/command-registry-adapter.d.ts +12 -0
  150. package/dist/cli-tui/commands/command-registry-adapter.d.ts.map +1 -0
  151. package/dist/cli-tui/commands/command-registry-adapter.js +120 -0
  152. package/dist/cli-tui/commands/command-registry-adapter.js.map +1 -0
  153. package/dist/cli-tui/commands/command-suite-catalog.d.ts +14 -0
  154. package/dist/cli-tui/commands/command-suite-catalog.d.ts.map +1 -0
  155. package/dist/cli-tui/commands/command-suite-catalog.js +147 -0
  156. package/dist/cli-tui/commands/command-suite-catalog.js.map +1 -0
  157. package/dist/cli-tui/commands/{grouped-command-handlers.d.ts → command-suite-handlers.d.ts} +27 -26
  158. package/dist/cli-tui/commands/command-suite-handlers.d.ts.map +1 -0
  159. package/dist/cli-tui/commands/command-suite-handlers.js +110 -0
  160. package/dist/cli-tui/commands/command-suite-handlers.js.map +1 -0
  161. package/dist/cli-tui/commands/hotkeys-command.d.ts +1 -1
  162. package/dist/cli-tui/commands/hotkeys-command.d.ts.map +1 -1
  163. package/dist/cli-tui/commands/hotkeys-command.js +2 -2
  164. package/dist/cli-tui/commands/hotkeys-command.js.map +1 -1
  165. package/dist/cli-tui/commands/limits-command.js +1 -1
  166. package/dist/cli-tui/commands/limits-command.js.map +1 -1
  167. package/dist/cli-tui/commands/pii-command.js +1 -1
  168. package/dist/cli-tui/commands/pii-command.js.map +1 -1
  169. package/dist/cli-tui/commands/registry.d.ts +1 -1
  170. package/dist/cli-tui/commands/registry.d.ts.map +1 -1
  171. package/dist/cli-tui/commands/registry.js +29 -921
  172. package/dist/cli-tui/commands/registry.js.map +1 -1
  173. package/dist/cli-tui/commands/{grouped → subcommands}/auth-commands.d.ts +2 -1
  174. package/dist/cli-tui/commands/subcommands/auth-commands.d.ts.map +1 -0
  175. package/dist/cli-tui/commands/{grouped → subcommands}/auth-commands.js +22 -6
  176. package/dist/cli-tui/commands/subcommands/auth-commands.js.map +1 -0
  177. package/dist/cli-tui/commands/{grouped → subcommands}/config-commands.d.ts +0 -1
  178. package/dist/cli-tui/commands/subcommands/config-commands.d.ts.map +1 -0
  179. package/dist/cli-tui/commands/{grouped → subcommands}/config-commands.js +2 -2
  180. package/dist/cli-tui/commands/subcommands/config-commands.js.map +1 -0
  181. package/dist/cli-tui/commands/{grouped → subcommands}/diag-commands.d.ts +1 -2
  182. package/dist/cli-tui/commands/subcommands/diag-commands.d.ts.map +1 -0
  183. package/dist/cli-tui/commands/{grouped → subcommands}/diag-commands.js +5 -7
  184. package/dist/cli-tui/commands/subcommands/diag-commands.js.map +1 -0
  185. package/dist/cli-tui/commands/{grouped → subcommands}/git-commands.d.ts +0 -2
  186. package/dist/cli-tui/commands/subcommands/git-commands.d.ts.map +1 -0
  187. package/dist/cli-tui/commands/{grouped → subcommands}/git-commands.js +2 -2
  188. package/dist/cli-tui/commands/subcommands/git-commands.js.map +1 -0
  189. package/dist/cli-tui/commands/{grouped → subcommands}/index.d.ts +2 -2
  190. package/dist/cli-tui/commands/subcommands/index.d.ts.map +1 -0
  191. package/dist/cli-tui/commands/{grouped → subcommands}/index.js +2 -2
  192. package/dist/cli-tui/commands/subcommands/index.js.map +1 -0
  193. package/dist/cli-tui/commands/{grouped → subcommands}/safety-commands.d.ts +0 -1
  194. package/dist/cli-tui/commands/subcommands/safety-commands.d.ts.map +1 -0
  195. package/dist/cli-tui/commands/{grouped → subcommands}/safety-commands.js +12 -12
  196. package/dist/cli-tui/commands/subcommands/safety-commands.js.map +1 -0
  197. package/dist/cli-tui/commands/{grouped → subcommands}/session-commands.d.ts +1 -2
  198. package/dist/cli-tui/commands/subcommands/session-commands.d.ts.map +1 -0
  199. package/dist/cli-tui/commands/{grouped → subcommands}/session-commands.js +3 -3
  200. package/dist/cli-tui/commands/subcommands/session-commands.js.map +1 -0
  201. package/dist/cli-tui/commands/{grouped → subcommands}/tools-commands.d.ts +0 -1
  202. package/dist/cli-tui/commands/subcommands/tools-commands.d.ts.map +1 -0
  203. package/dist/cli-tui/commands/{grouped → subcommands}/tools-commands.js +2 -2
  204. package/dist/cli-tui/commands/subcommands/tools-commands.js.map +1 -0
  205. package/dist/cli-tui/commands/{grouped → subcommands}/ui-commands.d.ts +0 -1
  206. package/dist/cli-tui/commands/subcommands/ui-commands.d.ts.map +1 -0
  207. package/dist/cli-tui/commands/{grouped → subcommands}/ui-commands.js +5 -5
  208. package/dist/cli-tui/commands/subcommands/ui-commands.js.map +1 -0
  209. package/dist/cli-tui/commands/{grouped → subcommands}/undo-commands.d.ts +1 -2
  210. package/dist/cli-tui/commands/subcommands/undo-commands.d.ts.map +1 -0
  211. package/dist/cli-tui/commands/{grouped → subcommands}/undo-commands.js +6 -6
  212. package/dist/cli-tui/commands/subcommands/undo-commands.js.map +1 -0
  213. package/dist/cli-tui/commands/subcommands/usage-commands.d.ts.map +1 -0
  214. package/dist/cli-tui/commands/{grouped → subcommands}/usage-commands.js +2 -2
  215. package/dist/cli-tui/commands/subcommands/usage-commands.js.map +1 -0
  216. package/dist/cli-tui/commands/{grouped → subcommands}/utils.d.ts +15 -15
  217. package/dist/cli-tui/commands/subcommands/utils.d.ts.map +1 -0
  218. package/dist/cli-tui/commands/{grouped → subcommands}/utils.js +13 -8
  219. package/dist/cli-tui/commands/subcommands/utils.js.map +1 -0
  220. package/dist/cli-tui/commands/types.d.ts +3 -3
  221. package/dist/cli-tui/commands/types.d.ts.map +1 -1
  222. package/dist/cli-tui/commands/types.js.map +1 -1
  223. package/dist/cli-tui/editor-view.d.ts +1 -1
  224. package/dist/cli-tui/editor-view.d.ts.map +1 -1
  225. package/dist/cli-tui/editor-view.js +1 -1
  226. package/dist/cli-tui/editor-view.js.map +1 -1
  227. package/dist/cli-tui/oauth/oauth-flow-controller.d.ts +4 -0
  228. package/dist/cli-tui/oauth/oauth-flow-controller.d.ts.map +1 -1
  229. package/dist/cli-tui/oauth/oauth-flow-controller.js +76 -5
  230. package/dist/cli-tui/oauth/oauth-flow-controller.js.map +1 -1
  231. package/dist/cli-tui/run/run-controller.d.ts +2 -2
  232. package/dist/cli-tui/run/run-controller.d.ts.map +1 -1
  233. package/dist/cli-tui/run/run-controller.js +3 -2
  234. package/dist/cli-tui/run/run-controller.js.map +1 -1
  235. package/dist/cli-tui/run/run-shell-command.d.ts.map +1 -1
  236. package/dist/cli-tui/run/run-shell-command.js +11 -3
  237. package/dist/cli-tui/run/run-shell-command.js.map +1 -1
  238. package/dist/cli-tui/run/streaming-shell-command.d.ts.map +1 -1
  239. package/dist/cli-tui/run/streaming-shell-command.js +11 -3
  240. package/dist/cli-tui/run/streaming-shell-command.js.map +1 -1
  241. package/dist/cli-tui/selectors/model-selector.d.ts.map +1 -1
  242. package/dist/cli-tui/selectors/model-selector.js +1 -0
  243. package/dist/cli-tui/selectors/model-selector.js.map +1 -1
  244. package/dist/cli-tui/tui-renderer/agent-event-bridge.d.ts +8 -0
  245. package/dist/cli-tui/tui-renderer/agent-event-bridge.d.ts.map +1 -1
  246. package/dist/cli-tui/tui-renderer/agent-event-bridge.js +23 -2
  247. package/dist/cli-tui/tui-renderer/agent-event-bridge.js.map +1 -1
  248. package/dist/cli-tui/tui-renderer/command-registry-options.d.ts +3 -3
  249. package/dist/cli-tui/tui-renderer/command-registry-options.d.ts.map +1 -1
  250. package/dist/cli-tui/tui-renderer/command-registry-options.js +12 -2
  251. package/dist/cli-tui/tui-renderer/command-registry-options.js.map +1 -1
  252. package/dist/cli-tui/tui-renderer/command-suite-wiring.d.ts +32 -0
  253. package/dist/cli-tui/tui-renderer/command-suite-wiring.d.ts.map +1 -0
  254. package/dist/cli-tui/tui-renderer/command-suite-wiring.js +108 -0
  255. package/dist/cli-tui/tui-renderer/command-suite-wiring.js.map +1 -0
  256. package/dist/cli-tui/tui-renderer/input-controller.d.ts +2 -2
  257. package/dist/cli-tui/tui-renderer/input-controller.d.ts.map +1 -1
  258. package/dist/cli-tui/tui-renderer/input-controller.js +2 -2
  259. package/dist/cli-tui/tui-renderer/input-controller.js.map +1 -1
  260. package/dist/cli-tui/tui-renderer/ui-state-controller.d.ts +1 -1
  261. package/dist/cli-tui/tui-renderer/ui-state-controller.js +1 -1
  262. package/dist/cli-tui/tui-renderer/ui-state-controller.js.map +1 -1
  263. package/dist/cli-tui/tui-renderer.d.ts +1 -3
  264. package/dist/cli-tui/tui-renderer.d.ts.map +1 -1
  265. package/dist/cli-tui/tui-renderer.js +37 -83
  266. package/dist/cli-tui/tui-renderer.js.map +1 -1
  267. package/dist/cli-tui/utils/runtime-badges.d.ts +8 -0
  268. package/dist/cli-tui/utils/runtime-badges.d.ts.map +1 -1
  269. package/dist/cli-tui/utils/runtime-badges.js +58 -0
  270. package/dist/cli-tui/utils/runtime-badges.js.map +1 -1
  271. package/dist/cli.js +42555 -23133
  272. package/dist/cli.js.map +1 -1
  273. package/dist/config/env-vars.d.ts +4 -0
  274. package/dist/config/env-vars.d.ts.map +1 -1
  275. package/dist/config/env-vars.js +4 -0
  276. package/dist/config/env-vars.js.map +1 -1
  277. package/dist/config/feature-flags.d.ts +44 -0
  278. package/dist/config/feature-flags.d.ts.map +1 -1
  279. package/dist/config/feature-flags.js +214 -0
  280. package/dist/config/feature-flags.js.map +1 -1
  281. package/dist/connectors/service-client.d.ts +98 -0
  282. package/dist/connectors/service-client.d.ts.map +1 -0
  283. package/dist/connectors/service-client.js +459 -0
  284. package/dist/connectors/service-client.js.map +1 -0
  285. package/dist/conversation/render-model.d.ts.map +1 -1
  286. package/dist/conversation/render-model.js +53 -3
  287. package/dist/conversation/render-model.js.map +1 -1
  288. package/dist/db/health.d.ts +8 -0
  289. package/dist/db/health.d.ts.map +1 -0
  290. package/dist/db/health.js +64 -0
  291. package/dist/db/health.js.map +1 -0
  292. package/dist/db/migrate.d.ts +301 -0
  293. package/dist/db/migrate.d.ts.map +1 -1
  294. package/dist/db/migrate.js +186 -0
  295. package/dist/db/migrate.js.map +1 -1
  296. package/dist/db/migrations/0000_initial.sql +308 -0
  297. package/dist/db/migrations/0001_shared_sessions.sql +18 -0
  298. package/dist/db/migrations/0002_usage_metrics.sql +28 -0
  299. package/dist/db/migrations/0003_execution_traces.sql +18 -0
  300. package/dist/db/migrations/0004_workspace_config.sql +11 -0
  301. package/dist/db/migrations/0005_revenue_attribution.sql +31 -0
  302. package/dist/db/migrations/0006_hosted_session_storage.sql +51 -0
  303. package/dist/db/migrations/0007_reconcile_legacy_audit_hash_cache.sql +24 -0
  304. package/dist/db/migrations/0008_reconcile_legacy_webhook_deliveries.sql +290 -0
  305. package/dist/db/migrations/meta/0000_snapshot.json +2438 -0
  306. package/dist/db/migrations/meta/_journal.json +69 -0
  307. package/dist/db/schema.d.ts +2232 -844
  308. package/dist/db/schema.d.ts.map +1 -1
  309. package/dist/db/schema.js +187 -1
  310. package/dist/db/schema.js.map +1 -1
  311. package/dist/evalops/agent-bootstrap.d.ts +73 -0
  312. package/dist/evalops/agent-bootstrap.d.ts.map +1 -0
  313. package/dist/evalops/agent-bootstrap.js +380 -0
  314. package/dist/evalops/agent-bootstrap.js.map +1 -0
  315. package/dist/export-html.d.ts.map +1 -1
  316. package/dist/export-html.js +7 -4
  317. package/dist/export-html.js.map +1 -1
  318. package/dist/headless/utility-command-manager.d.ts +2 -1
  319. package/dist/headless/utility-command-manager.d.ts.map +1 -1
  320. package/dist/headless/utility-command-manager.js +12 -6
  321. package/dist/headless/utility-command-manager.js.map +1 -1
  322. package/dist/headless/utility-file-read.d.ts +1 -0
  323. package/dist/headless/utility-file-read.d.ts.map +1 -1
  324. package/dist/headless/utility-file-read.js +5 -1
  325. package/dist/headless/utility-file-read.js.map +1 -1
  326. package/dist/headless/utility-file-search.d.ts +1 -0
  327. package/dist/headless/utility-file-search.d.ts.map +1 -1
  328. package/dist/headless/utility-file-search.js +4 -1
  329. package/dist/headless/utility-file-search.js.map +1 -1
  330. package/dist/headless/utility-file-watch-manager.d.ts +2 -1
  331. package/dist/headless/utility-file-watch-manager.d.ts.map +1 -1
  332. package/dist/headless/utility-file-watch-manager.js +6 -2
  333. package/dist/headless/utility-file-watch-manager.js.map +1 -1
  334. package/dist/headless/workspace-root.d.ts +8 -0
  335. package/dist/headless/workspace-root.d.ts.map +1 -0
  336. package/dist/headless/workspace-root.js +74 -0
  337. package/dist/headless/workspace-root.js.map +1 -0
  338. package/dist/hooks/notification-hooks.d.ts +5 -0
  339. package/dist/hooks/notification-hooks.d.ts.map +1 -1
  340. package/dist/hooks/notification-hooks.js +4 -0
  341. package/dist/hooks/notification-hooks.js.map +1 -1
  342. package/dist/lsp/diagnostic-deltas.d.ts +20 -0
  343. package/dist/lsp/diagnostic-deltas.d.ts.map +1 -0
  344. package/dist/lsp/diagnostic-deltas.js +92 -0
  345. package/dist/lsp/diagnostic-deltas.js.map +1 -0
  346. package/dist/lsp/diagnostic-repair.d.ts +48 -0
  347. package/dist/lsp/diagnostic-repair.d.ts.map +1 -0
  348. package/dist/lsp/diagnostic-repair.js +143 -0
  349. package/dist/lsp/diagnostic-repair.js.map +1 -0
  350. package/dist/main.d.ts.map +1 -1
  351. package/dist/main.js +127 -37
  352. package/dist/main.js.map +1 -1
  353. package/dist/mcp/config.d.ts +4 -2
  354. package/dist/mcp/config.d.ts.map +1 -1
  355. package/dist/mcp/config.js +58 -14
  356. package/dist/mcp/config.js.map +1 -1
  357. package/dist/mcp/index.d.ts +1 -0
  358. package/dist/mcp/index.d.ts.map +1 -1
  359. package/dist/mcp/index.js +1 -0
  360. package/dist/mcp/index.js.map +1 -1
  361. package/dist/mcp/manager.d.ts +1 -0
  362. package/dist/mcp/manager.d.ts.map +1 -1
  363. package/dist/mcp/manager.js +1 -0
  364. package/dist/mcp/manager.js.map +1 -1
  365. package/dist/mcp/platform-plugin.d.ts +3 -0
  366. package/dist/mcp/platform-plugin.d.ts.map +1 -0
  367. package/dist/mcp/platform-plugin.js +117 -0
  368. package/dist/mcp/platform-plugin.js.map +1 -0
  369. package/dist/mcp/tool-bridge.d.ts +15 -0
  370. package/dist/mcp/tool-bridge.d.ts.map +1 -1
  371. package/dist/mcp/tool-bridge.js +194 -6
  372. package/dist/mcp/tool-bridge.js.map +1 -1
  373. package/dist/memory/platform-memory-client.d.ts +130 -0
  374. package/dist/memory/platform-memory-client.d.ts.map +1 -0
  375. package/dist/memory/platform-memory-client.js +330 -0
  376. package/dist/memory/platform-memory-client.js.map +1 -0
  377. package/dist/memory/service-client.d.ts.map +1 -1
  378. package/dist/memory/service-client.js +1 -2
  379. package/dist/memory/service-client.js.map +1 -1
  380. package/dist/models/builtin.d.ts.map +1 -1
  381. package/dist/models/builtin.js +137 -0
  382. package/dist/models/builtin.js.map +1 -1
  383. package/dist/models/config-loader.d.ts +10 -10
  384. package/dist/models/config-loader.d.ts.map +1 -1
  385. package/dist/models/config-loader.js +1 -0
  386. package/dist/models/config-loader.js.map +1 -1
  387. package/dist/models/registry.d.ts +1 -0
  388. package/dist/models/registry.d.ts.map +1 -1
  389. package/dist/models/registry.js +1 -0
  390. package/dist/models/registry.js.map +1 -1
  391. package/dist/oauth/connectors.d.ts +25 -0
  392. package/dist/oauth/connectors.d.ts.map +1 -0
  393. package/dist/oauth/connectors.js +253 -0
  394. package/dist/oauth/connectors.js.map +1 -0
  395. package/dist/oauth/device-identity.d.ts +18 -0
  396. package/dist/oauth/device-identity.d.ts.map +1 -0
  397. package/dist/oauth/device-identity.js +193 -0
  398. package/dist/oauth/device-identity.js.map +1 -0
  399. package/dist/oauth/evalops.d.ts.map +1 -1
  400. package/dist/oauth/evalops.js +74 -15
  401. package/dist/oauth/evalops.js.map +1 -1
  402. package/dist/oauth/index.d.ts +1 -1
  403. package/dist/oauth/index.d.ts.map +1 -1
  404. package/dist/oauth/index.js +31 -1
  405. package/dist/oauth/index.js.map +1 -1
  406. package/dist/oauth/openai-codex.d.ts +16 -0
  407. package/dist/oauth/openai-codex.d.ts.map +1 -0
  408. package/dist/oauth/openai-codex.js +300 -0
  409. package/dist/oauth/openai-codex.js.map +1 -0
  410. package/dist/opentelemetry.d.ts.map +1 -1
  411. package/dist/opentelemetry.js +9 -2
  412. package/dist/opentelemetry.js.map +1 -1
  413. package/dist/platform/agent-runtime-client.d.ts +279 -0
  414. package/dist/platform/agent-runtime-client.d.ts.map +1 -0
  415. package/dist/platform/agent-runtime-client.js +515 -0
  416. package/dist/platform/agent-runtime-client.js.map +1 -0
  417. package/dist/platform/cerebro-facts-client.d.ts +56 -0
  418. package/dist/platform/cerebro-facts-client.d.ts.map +1 -0
  419. package/dist/platform/cerebro-facts-client.js +297 -0
  420. package/dist/platform/cerebro-facts-client.js.map +1 -0
  421. package/dist/platform/client.d.ts +2 -1
  422. package/dist/platform/client.d.ts.map +1 -1
  423. package/dist/platform/client.js +9 -26
  424. package/dist/platform/client.js.map +1 -1
  425. package/dist/platform/core-services.d.ts +128 -0
  426. package/dist/platform/core-services.d.ts.map +1 -1
  427. package/dist/platform/core-services.js +128 -0
  428. package/dist/platform/core-services.js.map +1 -1
  429. package/dist/platform/maestro-timeline-client.d.ts +22 -0
  430. package/dist/platform/maestro-timeline-client.d.ts.map +1 -0
  431. package/dist/platform/maestro-timeline-client.js +373 -0
  432. package/dist/platform/maestro-timeline-client.js.map +1 -0
  433. package/dist/platform/tool-execution-client.d.ts +104 -0
  434. package/dist/platform/tool-execution-client.d.ts.map +1 -0
  435. package/dist/platform/tool-execution-client.js +284 -0
  436. package/dist/platform/tool-execution-client.js.map +1 -0
  437. package/dist/prompts/service-client.d.ts.map +1 -1
  438. package/dist/prompts/service-client.js +5 -2
  439. package/dist/prompts/service-client.js.map +1 -1
  440. package/dist/providers/anthropic-auth.d.ts.map +1 -1
  441. package/dist/providers/anthropic-auth.js +8 -6
  442. package/dist/providers/anthropic-auth.js.map +1 -1
  443. package/dist/providers/api-keys.d.ts +1 -0
  444. package/dist/providers/api-keys.d.ts.map +1 -1
  445. package/dist/providers/api-keys.js +5 -0
  446. package/dist/providers/api-keys.js.map +1 -1
  447. package/dist/providers/auth.d.ts +2 -1
  448. package/dist/providers/auth.d.ts.map +1 -1
  449. package/dist/providers/auth.js +26 -3
  450. package/dist/providers/auth.js.map +1 -1
  451. package/dist/remote-runner/attach-client.d.ts +41 -0
  452. package/dist/remote-runner/attach-client.d.ts.map +1 -0
  453. package/dist/remote-runner/attach-client.js +692 -0
  454. package/dist/remote-runner/attach-client.js.map +1 -0
  455. package/dist/remote-runner/client.d.ts +205 -0
  456. package/dist/remote-runner/client.d.ts.map +1 -0
  457. package/dist/remote-runner/client.js +633 -0
  458. package/dist/remote-runner/client.js.map +1 -0
  459. package/dist/safety/action-firewall.d.ts +6 -1
  460. package/dist/safety/action-firewall.d.ts.map +1 -1
  461. package/dist/safety/action-firewall.js +62 -26
  462. package/dist/safety/action-firewall.js.map +1 -1
  463. package/dist/safety/governance-service-client.d.ts +36 -0
  464. package/dist/safety/governance-service-client.d.ts.map +1 -0
  465. package/dist/safety/governance-service-client.js +279 -0
  466. package/dist/safety/governance-service-client.js.map +1 -0
  467. package/dist/safety/policy.d.ts +13 -2
  468. package/dist/safety/policy.d.ts.map +1 -1
  469. package/dist/safety/policy.js +474 -52
  470. package/dist/safety/policy.js.map +1 -1
  471. package/dist/sdk-tools.d.ts +21 -0
  472. package/dist/sdk-tools.d.ts.map +1 -1
  473. package/dist/sdk-tools.js +16 -0
  474. package/dist/sdk-tools.js.map +1 -1
  475. package/dist/server/app-context.d.ts +25 -0
  476. package/dist/server/app-context.d.ts.map +1 -1
  477. package/dist/server/app-context.js.map +1 -1
  478. package/dist/server/approval-service.d.ts +7 -8
  479. package/dist/server/approval-service.d.ts.map +1 -1
  480. package/dist/server/approval-service.js +12 -24
  481. package/dist/server/approval-service.js.map +1 -1
  482. package/dist/server/authz.d.ts +23 -2
  483. package/dist/server/authz.d.ts.map +1 -1
  484. package/dist/server/authz.js +153 -17
  485. package/dist/server/authz.js.map +1 -1
  486. package/dist/server/handlers/approvals.d.ts.map +1 -1
  487. package/dist/server/handlers/approvals.js +3 -10
  488. package/dist/server/handlers/approvals.js.map +1 -1
  489. package/dist/server/handlers/branch.d.ts.map +1 -1
  490. package/dist/server/handlers/branch.js +29 -20
  491. package/dist/server/handlers/branch.js.map +1 -1
  492. package/dist/server/handlers/bridge.d.ts.map +1 -1
  493. package/dist/server/handlers/bridge.js +3 -2
  494. package/dist/server/handlers/bridge.js.map +1 -1
  495. package/dist/server/handlers/chat-ws.d.ts.map +1 -1
  496. package/dist/server/handlers/chat-ws.js +23 -31
  497. package/dist/server/handlers/chat-ws.js.map +1 -1
  498. package/dist/server/handlers/chat.d.ts.map +1 -1
  499. package/dist/server/handlers/chat.js +105 -46
  500. package/dist/server/handlers/chat.js.map +1 -1
  501. package/dist/server/handlers/compliance.d.ts +3 -0
  502. package/dist/server/handlers/compliance.d.ts.map +1 -0
  503. package/dist/server/handlers/compliance.js +53 -0
  504. package/dist/server/handlers/compliance.js.map +1 -0
  505. package/dist/server/handlers/context.d.ts.map +1 -1
  506. package/dist/server/handlers/context.js +3 -8
  507. package/dist/server/handlers/context.js.map +1 -1
  508. package/dist/server/handlers/fleet.d.ts +4 -0
  509. package/dist/server/handlers/fleet.d.ts.map +1 -0
  510. package/dist/server/handlers/fleet.js +9 -0
  511. package/dist/server/handlers/fleet.js.map +1 -0
  512. package/dist/server/handlers/headless-sessions.d.ts +4 -0
  513. package/dist/server/handlers/headless-sessions.d.ts.map +1 -1
  514. package/dist/server/handlers/headless-sessions.js +168 -3
  515. package/dist/server/handlers/headless-sessions.js.map +1 -1
  516. package/dist/server/handlers/health.d.ts +31 -2
  517. package/dist/server/handlers/health.d.ts.map +1 -1
  518. package/dist/server/handlers/health.js +82 -8
  519. package/dist/server/handlers/health.js.map +1 -1
  520. package/dist/server/handlers/hosted-runner-drain.d.ts +128 -0
  521. package/dist/server/handlers/hosted-runner-drain.d.ts.map +1 -0
  522. package/dist/server/handlers/hosted-runner-drain.js +373 -0
  523. package/dist/server/handlers/hosted-runner-drain.js.map +1 -0
  524. package/dist/server/handlers/hosted-runner-identity.d.ts +17 -0
  525. package/dist/server/handlers/hosted-runner-identity.d.ts.map +1 -0
  526. package/dist/server/handlers/hosted-runner-identity.js +39 -0
  527. package/dist/server/handlers/hosted-runner-identity.js.map +1 -0
  528. package/dist/server/handlers/intelligent-router.d.ts +3 -0
  529. package/dist/server/handlers/intelligent-router.d.ts.map +1 -0
  530. package/dist/server/handlers/intelligent-router.js +141 -0
  531. package/dist/server/handlers/intelligent-router.js.map +1 -0
  532. package/dist/server/handlers/models.d.ts.map +1 -1
  533. package/dist/server/handlers/models.js +14 -0
  534. package/dist/server/handlers/models.js.map +1 -1
  535. package/dist/server/handlers/pending-requests.d.ts +8 -0
  536. package/dist/server/handlers/pending-requests.d.ts.map +1 -0
  537. package/dist/server/handlers/pending-requests.js +149 -0
  538. package/dist/server/handlers/pending-requests.js.map +1 -0
  539. package/dist/server/handlers/revenue-attribution.d.ts +3 -0
  540. package/dist/server/handlers/revenue-attribution.d.ts.map +1 -0
  541. package/dist/server/handlers/revenue-attribution.js +45 -0
  542. package/dist/server/handlers/revenue-attribution.js.map +1 -0
  543. package/dist/server/handlers/runtime-app-server-ws.d.ts +10 -0
  544. package/dist/server/handlers/runtime-app-server-ws.d.ts.map +1 -0
  545. package/dist/server/handlers/runtime-app-server-ws.js +206 -0
  546. package/dist/server/handlers/runtime-app-server-ws.js.map +1 -0
  547. package/dist/server/handlers/session-artifacts.js +2 -2
  548. package/dist/server/handlers/session-artifacts.js.map +1 -1
  549. package/dist/server/handlers/session-attachments.js +3 -3
  550. package/dist/server/handlers/session-attachments.js.map +1 -1
  551. package/dist/server/handlers/session-timeline.d.ts +11 -0
  552. package/dist/server/handlers/session-timeline.d.ts.map +1 -0
  553. package/dist/server/handlers/session-timeline.js +77 -0
  554. package/dist/server/handlers/session-timeline.js.map +1 -0
  555. package/dist/server/handlers/sessions.d.ts +11 -0
  556. package/dist/server/handlers/sessions.d.ts.map +1 -1
  557. package/dist/server/handlers/sessions.js +68 -100
  558. package/dist/server/handlers/sessions.js.map +1 -1
  559. package/dist/server/handlers/traces.d.ts +3 -0
  560. package/dist/server/handlers/traces.d.ts.map +1 -0
  561. package/dist/server/handlers/traces.js +60 -0
  562. package/dist/server/handlers/traces.js.map +1 -0
  563. package/dist/server/handlers/usage-analytics.d.ts +3 -0
  564. package/dist/server/handlers/usage-analytics.d.ts.map +1 -0
  565. package/dist/server/handlers/usage-analytics.js +40 -0
  566. package/dist/server/handlers/usage-analytics.js.map +1 -0
  567. package/dist/server/handlers/workspace-config.d.ts +3 -0
  568. package/dist/server/handlers/workspace-config.d.ts.map +1 -0
  569. package/dist/server/handlers/workspace-config.js +62 -0
  570. package/dist/server/handlers/workspace-config.js.map +1 -0
  571. package/dist/server/headless-in-process-host.d.ts +8 -1
  572. package/dist/server/headless-in-process-host.d.ts.map +1 -1
  573. package/dist/server/headless-in-process-host.js +6 -0
  574. package/dist/server/headless-in-process-host.js.map +1 -1
  575. package/dist/server/headless-runtime-service.d.ts +99 -1
  576. package/dist/server/headless-runtime-service.d.ts.map +1 -1
  577. package/dist/server/headless-runtime-service.js +286 -23
  578. package/dist/server/headless-runtime-service.js.map +1 -1
  579. package/dist/server/hosted-session-manager.d.ts +103 -0
  580. package/dist/server/hosted-session-manager.d.ts.map +1 -0
  581. package/dist/server/hosted-session-manager.js +629 -0
  582. package/dist/server/hosted-session-manager.js.map +1 -0
  583. package/dist/server/pending-request-payload.d.ts +4 -0
  584. package/dist/server/pending-request-payload.d.ts.map +1 -0
  585. package/dist/server/pending-request-payload.js +107 -0
  586. package/dist/server/pending-request-payload.js.map +1 -0
  587. package/dist/server/request-context.d.ts +4 -0
  588. package/dist/server/request-context.d.ts.map +1 -1
  589. package/dist/server/request-context.js +9 -0
  590. package/dist/server/request-context.js.map +1 -1
  591. package/dist/server/routes.d.ts.map +1 -1
  592. package/dist/server/routes.js +149 -1
  593. package/dist/server/routes.js.map +1 -1
  594. package/dist/server/runtime-ws-access.d.ts +16 -0
  595. package/dist/server/runtime-ws-access.d.ts.map +1 -0
  596. package/dist/server/runtime-ws-access.js +21 -0
  597. package/dist/server/runtime-ws-access.js.map +1 -0
  598. package/dist/server/server-middlewares.d.ts +1 -1
  599. package/dist/server/server-middlewares.d.ts.map +1 -1
  600. package/dist/server/server-middlewares.js +35 -27
  601. package/dist/server/server-middlewares.js.map +1 -1
  602. package/dist/server/server-request-manager.d.ts +8 -27
  603. package/dist/server/server-request-manager.d.ts.map +1 -1
  604. package/dist/server/server-request-manager.js +7 -0
  605. package/dist/server/server-request-manager.js.map +1 -1
  606. package/dist/server/server-utils.d.ts +2 -1
  607. package/dist/server/server-utils.d.ts.map +1 -1
  608. package/dist/server/server-utils.js +11 -1
  609. package/dist/server/server-utils.js.map +1 -1
  610. package/dist/server/session-event-env.d.ts +2 -0
  611. package/dist/server/session-event-env.d.ts.map +1 -0
  612. package/dist/server/session-event-env.js +8 -0
  613. package/dist/server/session-event-env.js.map +1 -0
  614. package/dist/server/session-initialization.d.ts +25 -4
  615. package/dist/server/session-initialization.d.ts.map +1 -1
  616. package/dist/server/session-initialization.js +22 -5
  617. package/dist/server/session-initialization.js.map +1 -1
  618. package/dist/server/session-scope.d.ts +4 -0
  619. package/dist/server/session-scope.d.ts.map +1 -1
  620. package/dist/server/session-scope.js +44 -4
  621. package/dist/server/session-scope.js.map +1 -1
  622. package/dist/server/session-timeline.d.ts +13 -0
  623. package/dist/server/session-timeline.d.ts.map +1 -0
  624. package/dist/server/session-timeline.js +566 -0
  625. package/dist/server/session-timeline.js.map +1 -0
  626. package/dist/services/compliance/controls.d.ts +6 -0
  627. package/dist/services/compliance/controls.d.ts.map +1 -0
  628. package/dist/services/compliance/controls.js +113 -0
  629. package/dist/services/compliance/controls.js.map +1 -0
  630. package/dist/services/compliance/index.d.ts +6 -0
  631. package/dist/services/compliance/index.d.ts.map +1 -0
  632. package/dist/services/compliance/index.js +5 -0
  633. package/dist/services/compliance/index.js.map +1 -0
  634. package/dist/services/compliance/normalize.d.ts +23 -0
  635. package/dist/services/compliance/normalize.d.ts.map +1 -0
  636. package/dist/services/compliance/normalize.js +226 -0
  637. package/dist/services/compliance/normalize.js.map +1 -0
  638. package/dist/services/compliance/recorder.d.ts +22 -0
  639. package/dist/services/compliance/recorder.d.ts.map +1 -0
  640. package/dist/services/compliance/recorder.js +89 -0
  641. package/dist/services/compliance/recorder.js.map +1 -0
  642. package/dist/services/compliance/service.d.ts +24 -0
  643. package/dist/services/compliance/service.d.ts.map +1 -0
  644. package/dist/services/compliance/service.js +426 -0
  645. package/dist/services/compliance/service.js.map +1 -0
  646. package/dist/services/compliance/types.d.ts +185 -0
  647. package/dist/services/compliance/types.d.ts.map +1 -0
  648. package/dist/services/compliance/types.js +2 -0
  649. package/dist/services/compliance/types.js.map +1 -0
  650. package/dist/services/intelligent-router/index.d.ts +5 -0
  651. package/dist/services/intelligent-router/index.d.ts.map +1 -0
  652. package/dist/services/intelligent-router/index.js +5 -0
  653. package/dist/services/intelligent-router/index.js.map +1 -0
  654. package/dist/services/intelligent-router/normalize.d.ts +9 -0
  655. package/dist/services/intelligent-router/normalize.d.ts.map +1 -0
  656. package/dist/services/intelligent-router/normalize.js +169 -0
  657. package/dist/services/intelligent-router/normalize.js.map +1 -0
  658. package/dist/services/intelligent-router/recorder.d.ts +24 -0
  659. package/dist/services/intelligent-router/recorder.d.ts.map +1 -0
  660. package/dist/services/intelligent-router/recorder.js +98 -0
  661. package/dist/services/intelligent-router/recorder.js.map +1 -0
  662. package/dist/services/intelligent-router/service.d.ts +22 -0
  663. package/dist/services/intelligent-router/service.d.ts.map +1 -0
  664. package/dist/services/intelligent-router/service.js +328 -0
  665. package/dist/services/intelligent-router/service.js.map +1 -0
  666. package/dist/services/intelligent-router/types.d.ts +98 -0
  667. package/dist/services/intelligent-router/types.d.ts.map +1 -0
  668. package/dist/services/intelligent-router/types.js +7 -0
  669. package/dist/services/intelligent-router/types.js.map +1 -0
  670. package/dist/services/revenue-attribution/index.d.ts +4 -0
  671. package/dist/services/revenue-attribution/index.d.ts.map +1 -0
  672. package/dist/services/revenue-attribution/index.js +4 -0
  673. package/dist/services/revenue-attribution/index.js.map +1 -0
  674. package/dist/services/revenue-attribution/normalize.d.ts +13 -0
  675. package/dist/services/revenue-attribution/normalize.d.ts.map +1 -0
  676. package/dist/services/revenue-attribution/normalize.js +155 -0
  677. package/dist/services/revenue-attribution/normalize.js.map +1 -0
  678. package/dist/services/revenue-attribution/service.d.ts +21 -0
  679. package/dist/services/revenue-attribution/service.d.ts.map +1 -0
  680. package/dist/services/revenue-attribution/service.js +248 -0
  681. package/dist/services/revenue-attribution/service.js.map +1 -0
  682. package/dist/services/revenue-attribution/types.d.ts +96 -0
  683. package/dist/services/revenue-attribution/types.d.ts.map +1 -0
  684. package/dist/services/revenue-attribution/types.js +7 -0
  685. package/dist/services/revenue-attribution/types.js.map +1 -0
  686. package/dist/services/traces/index.d.ts +5 -0
  687. package/dist/services/traces/index.d.ts.map +1 -0
  688. package/dist/services/traces/index.js +4 -0
  689. package/dist/services/traces/index.js.map +1 -0
  690. package/dist/services/traces/normalize.d.ts +20 -0
  691. package/dist/services/traces/normalize.d.ts.map +1 -0
  692. package/dist/services/traces/normalize.js +261 -0
  693. package/dist/services/traces/normalize.js.map +1 -0
  694. package/dist/services/traces/otel.d.ts +3 -0
  695. package/dist/services/traces/otel.d.ts.map +1 -0
  696. package/dist/services/traces/otel.js +173 -0
  697. package/dist/services/traces/otel.js.map +1 -0
  698. package/dist/services/traces/service.d.ts +17 -0
  699. package/dist/services/traces/service.d.ts.map +1 -0
  700. package/dist/services/traces/service.js +197 -0
  701. package/dist/services/traces/service.js.map +1 -0
  702. package/dist/services/traces/types.d.ts +130 -0
  703. package/dist/services/traces/types.d.ts.map +1 -0
  704. package/dist/services/traces/types.js +8 -0
  705. package/dist/services/traces/types.js.map +1 -0
  706. package/dist/services/usage-analytics/aggregation.d.ts +18 -0
  707. package/dist/services/usage-analytics/aggregation.d.ts.map +1 -0
  708. package/dist/services/usage-analytics/aggregation.js +130 -0
  709. package/dist/services/usage-analytics/aggregation.js.map +1 -0
  710. package/dist/services/usage-analytics/index.d.ts +5 -0
  711. package/dist/services/usage-analytics/index.d.ts.map +1 -0
  712. package/dist/services/usage-analytics/index.js +4 -0
  713. package/dist/services/usage-analytics/index.js.map +1 -0
  714. package/dist/services/usage-analytics/recorder.d.ts +16 -0
  715. package/dist/services/usage-analytics/recorder.d.ts.map +1 -0
  716. package/dist/services/usage-analytics/recorder.js +128 -0
  717. package/dist/services/usage-analytics/recorder.js.map +1 -0
  718. package/dist/services/usage-analytics/service.d.ts +15 -0
  719. package/dist/services/usage-analytics/service.d.ts.map +1 -0
  720. package/dist/services/usage-analytics/service.js +210 -0
  721. package/dist/services/usage-analytics/service.js.map +1 -0
  722. package/dist/services/usage-analytics/types.d.ts +80 -0
  723. package/dist/services/usage-analytics/types.d.ts.map +1 -0
  724. package/dist/services/usage-analytics/types.js +2 -0
  725. package/dist/services/usage-analytics/types.js.map +1 -0
  726. package/dist/services/workspace-config/index.d.ts +6 -0
  727. package/dist/services/workspace-config/index.d.ts.map +1 -0
  728. package/dist/services/workspace-config/index.js +5 -0
  729. package/dist/services/workspace-config/index.js.map +1 -0
  730. package/dist/services/workspace-config/middleware.d.ts +5 -0
  731. package/dist/services/workspace-config/middleware.d.ts.map +1 -0
  732. package/dist/services/workspace-config/middleware.js +98 -0
  733. package/dist/services/workspace-config/middleware.js.map +1 -0
  734. package/dist/services/workspace-config/normalize.d.ts +17 -0
  735. package/dist/services/workspace-config/normalize.d.ts.map +1 -0
  736. package/dist/services/workspace-config/normalize.js +148 -0
  737. package/dist/services/workspace-config/normalize.js.map +1 -0
  738. package/dist/services/workspace-config/policy.d.ts +16 -0
  739. package/dist/services/workspace-config/policy.d.ts.map +1 -0
  740. package/dist/services/workspace-config/policy.js +77 -0
  741. package/dist/services/workspace-config/policy.js.map +1 -0
  742. package/dist/services/workspace-config/service.d.ts +20 -0
  743. package/dist/services/workspace-config/service.d.ts.map +1 -0
  744. package/dist/services/workspace-config/service.js +162 -0
  745. package/dist/services/workspace-config/service.js.map +1 -0
  746. package/dist/services/workspace-config/types.d.ts +71 -0
  747. package/dist/services/workspace-config/types.d.ts.map +1 -0
  748. package/dist/services/workspace-config/types.js +2 -0
  749. package/dist/services/workspace-config/types.js.map +1 -0
  750. package/dist/session/manager.d.ts.map +1 -1
  751. package/dist/session/manager.js +10 -0
  752. package/dist/session/manager.js.map +1 -1
  753. package/dist/session/migration.d.ts.map +1 -1
  754. package/dist/session/migration.js +2 -1
  755. package/dist/session/migration.js.map +1 -1
  756. package/dist/session/session-memory.d.ts.map +1 -1
  757. package/dist/session/session-memory.js +7 -1
  758. package/dist/session/session-memory.js.map +1 -1
  759. package/dist/session/types.d.ts +1 -2
  760. package/dist/session/types.d.ts.map +1 -1
  761. package/dist/session/types.js +1 -22
  762. package/dist/session/types.js.map +1 -1
  763. package/dist/session/wire-format.d.ts +7 -0
  764. package/dist/session/wire-format.d.ts.map +1 -0
  765. package/dist/session/wire-format.generated.d.ts +95 -0
  766. package/dist/session/wire-format.generated.d.ts.map +1 -0
  767. package/dist/session/wire-format.generated.js +111 -0
  768. package/dist/session/wire-format.generated.js.map +1 -0
  769. package/dist/session/wire-format.js +145 -0
  770. package/dist/session/wire-format.js.map +1 -0
  771. package/dist/shared-memory/client.d.ts.map +1 -1
  772. package/dist/shared-memory/client.js +22 -22
  773. package/dist/shared-memory/client.js.map +1 -1
  774. package/dist/skills/artifact-metadata.d.ts +16 -0
  775. package/dist/skills/artifact-metadata.d.ts.map +1 -0
  776. package/dist/skills/artifact-metadata.js +86 -0
  777. package/dist/skills/artifact-metadata.js.map +1 -0
  778. package/dist/skills/loader.d.ts +2 -2
  779. package/dist/skills/loader.d.ts.map +1 -1
  780. package/dist/skills/loader.js +1 -0
  781. package/dist/skills/loader.js.map +1 -1
  782. package/dist/skills/service-client.d.ts +42 -0
  783. package/dist/skills/service-client.d.ts.map +1 -0
  784. package/dist/skills/service-client.js +258 -0
  785. package/dist/skills/service-client.js.map +1 -0
  786. package/dist/skills/tool.d.ts +3 -0
  787. package/dist/skills/tool.d.ts.map +1 -1
  788. package/dist/skills/tool.js +67 -5
  789. package/dist/skills/tool.js.map +1 -1
  790. package/dist/telemetry/index.d.ts +4 -0
  791. package/dist/telemetry/index.d.ts.map +1 -1
  792. package/dist/telemetry/index.js +5 -0
  793. package/dist/telemetry/index.js.map +1 -1
  794. package/dist/telemetry/maestro-event-bus.d.ts +440 -0
  795. package/dist/telemetry/maestro-event-bus.d.ts.map +1 -0
  796. package/dist/telemetry/maestro-event-bus.js +784 -0
  797. package/dist/telemetry/maestro-event-bus.js.map +1 -0
  798. package/dist/telemetry/maestro-event-catalog.d.ts +48 -0
  799. package/dist/telemetry/maestro-event-catalog.d.ts.map +1 -0
  800. package/dist/telemetry/maestro-event-catalog.js +69 -0
  801. package/dist/telemetry/maestro-event-catalog.js.map +1 -0
  802. package/dist/telemetry/maestro-platform-replay-fixture.d.ts +24 -0
  803. package/dist/telemetry/maestro-platform-replay-fixture.d.ts.map +1 -0
  804. package/dist/telemetry/maestro-platform-replay-fixture.js +400 -0
  805. package/dist/telemetry/maestro-platform-replay-fixture.js.map +1 -0
  806. package/dist/telemetry/maestro-publisher-conformance-fixture.d.ts +29 -0
  807. package/dist/telemetry/maestro-publisher-conformance-fixture.d.ts.map +1 -0
  808. package/dist/telemetry/maestro-publisher-conformance-fixture.js +240 -0
  809. package/dist/telemetry/maestro-publisher-conformance-fixture.js.map +1 -0
  810. package/dist/telemetry/meter-service-client.d.ts +0 -33
  811. package/dist/telemetry/meter-service-client.d.ts.map +1 -1
  812. package/dist/telemetry/meter-service-client.js +22 -50
  813. package/dist/telemetry/meter-service-client.js.map +1 -1
  814. package/dist/telemetry/turn-tracker.d.ts.map +1 -1
  815. package/dist/telemetry/turn-tracker.js +5 -5
  816. package/dist/telemetry/turn-tracker.js.map +1 -1
  817. package/dist/telemetry/wide-events.d.ts +8 -0
  818. package/dist/telemetry/wide-events.d.ts.map +1 -1
  819. package/dist/telemetry/wide-events.js +28 -0
  820. package/dist/telemetry/wide-events.js.map +1 -1
  821. package/dist/telemetry.d.ts +1 -1
  822. package/dist/telemetry.d.ts.map +1 -1
  823. package/dist/telemetry.js +14 -4
  824. package/dist/telemetry.js.map +1 -1
  825. package/dist/timeline/redaction.d.ts +5 -0
  826. package/dist/timeline/redaction.d.ts.map +1 -0
  827. package/dist/timeline/redaction.js +119 -0
  828. package/dist/timeline/redaction.js.map +1 -0
  829. package/dist/tools/ask-user.d.ts +26 -0
  830. package/dist/tools/ask-user.d.ts.map +1 -1
  831. package/dist/tools/ask-user.js +33 -1
  832. package/dist/tools/ask-user.js.map +1 -1
  833. package/dist/tools/background/task-types.d.ts +1 -1
  834. package/dist/tools/edit.d.ts +2 -0
  835. package/dist/tools/edit.d.ts.map +1 -1
  836. package/dist/tools/edit.js +27 -7
  837. package/dist/tools/edit.js.map +1 -1
  838. package/dist/tools/index.d.ts +9 -0
  839. package/dist/tools/index.d.ts.map +1 -1
  840. package/dist/tools/pipeline.d.ts.map +1 -1
  841. package/dist/tools/pipeline.js +16 -7
  842. package/dist/tools/pipeline.js.map +1 -1
  843. package/dist/tools/write.d.ts +2 -0
  844. package/dist/tools/write.d.ts.map +1 -1
  845. package/dist/tools/write.js +24 -6
  846. package/dist/tools/write.js.map +1 -1
  847. package/dist/tracking/cost-tracker.d.ts +15 -12
  848. package/dist/tracking/cost-tracker.d.ts.map +1 -1
  849. package/dist/tracking/cost-tracker.js +29 -40
  850. package/dist/tracking/cost-tracker.js.map +1 -1
  851. package/dist/utils/checkpoint-profiler.d.ts +29 -0
  852. package/dist/utils/checkpoint-profiler.d.ts.map +1 -0
  853. package/dist/utils/checkpoint-profiler.js +118 -0
  854. package/dist/utils/checkpoint-profiler.js.map +1 -0
  855. package/dist/utils/downstream-http.d.ts +21 -0
  856. package/dist/utils/downstream-http.d.ts.map +1 -0
  857. package/dist/utils/downstream-http.js +151 -0
  858. package/dist/utils/downstream-http.js.map +1 -0
  859. package/dist/utils/downstream.d.ts +18 -0
  860. package/dist/utils/downstream.d.ts.map +1 -0
  861. package/dist/utils/downstream.js +47 -0
  862. package/dist/utils/downstream.js.map +1 -0
  863. package/dist/utils/logger.d.ts +3 -1
  864. package/dist/utils/logger.d.ts.map +1 -1
  865. package/dist/utils/logger.js +12 -1
  866. package/dist/utils/logger.js.map +1 -1
  867. package/dist/utils/oauth-http.d.ts +8 -0
  868. package/dist/utils/oauth-http.d.ts.map +1 -0
  869. package/dist/utils/oauth-http.js +41 -0
  870. package/dist/utils/oauth-http.js.map +1 -0
  871. package/dist/utils/path-utils.d.ts +2 -0
  872. package/dist/utils/path-utils.d.ts.map +1 -0
  873. package/dist/utils/path-utils.js +12 -0
  874. package/dist/utils/path-utils.js.map +1 -0
  875. package/dist/utils/path-validation.d.ts +1 -1
  876. package/dist/utils/path-validation.d.ts.map +1 -1
  877. package/dist/utils/path-validation.js +3 -3
  878. package/dist/utils/path-validation.js.map +1 -1
  879. package/dist/version.json +2 -2
  880. package/dist/web-server.d.ts +7 -1
  881. package/dist/web-server.d.ts.map +1 -1
  882. package/dist/web-server.js +117 -15
  883. package/dist/web-server.js.map +1 -1
  884. package/dist/webhooks/delivery.d.ts.map +1 -1
  885. package/dist/webhooks/delivery.js +9 -12
  886. package/dist/webhooks/delivery.js.map +1 -1
  887. package/node_modules/@bufbuild/protobuf/dist/cjs/descriptors.d.ts +12 -5
  888. package/node_modules/@bufbuild/protobuf/dist/cjs/from-binary.js +7 -7
  889. package/node_modules/@bufbuild/protobuf/dist/cjs/from-json.d.ts +1 -1
  890. package/node_modules/@bufbuild/protobuf/dist/cjs/from-json.js +1 -1
  891. package/node_modules/@bufbuild/protobuf/dist/cjs/reflect/path.d.ts +1 -1
  892. package/node_modules/@bufbuild/protobuf/dist/cjs/registry.js +24 -1
  893. package/node_modules/@bufbuild/protobuf/dist/cjs/to-json.d.ts +1 -1
  894. package/node_modules/@bufbuild/protobuf/dist/cjs/to-json.js +9 -10
  895. package/node_modules/@bufbuild/protobuf/dist/cjs/types.d.ts +1 -1
  896. package/node_modules/@bufbuild/protobuf/dist/cjs/wire/binary-encoding.d.ts +9 -7
  897. package/node_modules/@bufbuild/protobuf/dist/cjs/wire/binary-encoding.js +18 -8
  898. package/node_modules/@bufbuild/protobuf/dist/cjs/wire/text-encoding.d.ts +4 -2
  899. package/node_modules/@bufbuild/protobuf/dist/cjs/wire/text-encoding.js +8 -1
  900. package/node_modules/@bufbuild/protobuf/dist/cjs/wkt/gen/google/protobuf/api_pb.d.ts +1 -1
  901. package/node_modules/@bufbuild/protobuf/dist/cjs/wkt/gen/google/protobuf/compiler/plugin_pb.d.ts +2 -2
  902. package/node_modules/@bufbuild/protobuf/dist/cjs/wkt/gen/google/protobuf/descriptor_pb.d.ts +37 -23
  903. package/node_modules/@bufbuild/protobuf/dist/cjs/wkt/gen/google/protobuf/descriptor_pb.js +1 -1
  904. package/node_modules/@bufbuild/protobuf/dist/cjs/wkt/gen/google/protobuf/field_mask_pb.d.ts +32 -36
  905. package/node_modules/@bufbuild/protobuf/dist/cjs/wkt/gen/google/protobuf/go_features_pb.d.ts +65 -0
  906. package/node_modules/@bufbuild/protobuf/dist/cjs/wkt/gen/google/protobuf/go_features_pb.js +38 -2
  907. package/node_modules/@bufbuild/protobuf/dist/cjs/wkt/gen/google/protobuf/timestamp_pb.d.ts +5 -5
  908. package/node_modules/@bufbuild/protobuf/dist/cjs/wkt/gen/google/protobuf/type_pb.d.ts +3 -3
  909. package/node_modules/@bufbuild/protobuf/dist/cjs/wkt/wrappers.d.ts +10 -0
  910. package/node_modules/@bufbuild/protobuf/dist/cjs/wkt/wrappers.js +24 -0
  911. package/node_modules/@bufbuild/protobuf/dist/esm/descriptors.d.ts +12 -5
  912. package/node_modules/@bufbuild/protobuf/dist/esm/from-binary.js +7 -7
  913. package/node_modules/@bufbuild/protobuf/dist/esm/from-json.d.ts +1 -1
  914. package/node_modules/@bufbuild/protobuf/dist/esm/from-json.js +2 -2
  915. package/node_modules/@bufbuild/protobuf/dist/esm/reflect/path.d.ts +1 -1
  916. package/node_modules/@bufbuild/protobuf/dist/esm/registry.js +24 -1
  917. package/node_modules/@bufbuild/protobuf/dist/esm/to-json.d.ts +1 -1
  918. package/node_modules/@bufbuild/protobuf/dist/esm/to-json.js +10 -11
  919. package/node_modules/@bufbuild/protobuf/dist/esm/types.d.ts +1 -1
  920. package/node_modules/@bufbuild/protobuf/dist/esm/wire/binary-encoding.d.ts +9 -7
  921. package/node_modules/@bufbuild/protobuf/dist/esm/wire/binary-encoding.js +18 -8
  922. package/node_modules/@bufbuild/protobuf/dist/esm/wire/text-encoding.d.ts +4 -2
  923. package/node_modules/@bufbuild/protobuf/dist/esm/wire/text-encoding.js +8 -1
  924. package/node_modules/@bufbuild/protobuf/dist/esm/wkt/gen/google/protobuf/api_pb.d.ts +1 -1
  925. package/node_modules/@bufbuild/protobuf/dist/esm/wkt/gen/google/protobuf/compiler/plugin_pb.d.ts +2 -2
  926. package/node_modules/@bufbuild/protobuf/dist/esm/wkt/gen/google/protobuf/descriptor_pb.d.ts +37 -23
  927. package/node_modules/@bufbuild/protobuf/dist/esm/wkt/gen/google/protobuf/descriptor_pb.js +1 -1
  928. package/node_modules/@bufbuild/protobuf/dist/esm/wkt/gen/google/protobuf/field_mask_pb.d.ts +32 -36
  929. package/node_modules/@bufbuild/protobuf/dist/esm/wkt/gen/google/protobuf/go_features_pb.d.ts +65 -0
  930. package/node_modules/@bufbuild/protobuf/dist/esm/wkt/gen/google/protobuf/go_features_pb.js +37 -1
  931. package/node_modules/@bufbuild/protobuf/dist/esm/wkt/gen/google/protobuf/timestamp_pb.d.ts +5 -5
  932. package/node_modules/@bufbuild/protobuf/dist/esm/wkt/gen/google/protobuf/type_pb.d.ts +3 -3
  933. package/node_modules/@bufbuild/protobuf/dist/esm/wkt/wrappers.d.ts +10 -0
  934. package/node_modules/@bufbuild/protobuf/dist/esm/wkt/wrappers.js +23 -0
  935. package/node_modules/@bufbuild/protobuf/package.json +1 -1
  936. package/node_modules/@evalops/contracts/dist/headless-protocol-schemas.generated.d.ts +305 -2
  937. package/node_modules/@evalops/contracts/dist/headless-protocol-schemas.generated.d.ts.map +1 -1
  938. package/node_modules/@evalops/contracts/dist/headless-protocol-schemas.generated.js +34 -4
  939. package/node_modules/@evalops/contracts/dist/headless-protocol-schemas.generated.js.map +1 -1
  940. package/node_modules/@evalops/contracts/dist/index.d.ts +88 -0
  941. package/node_modules/@evalops/contracts/dist/index.d.ts.map +1 -1
  942. package/node_modules/@evalops/contracts/dist/index.js +2 -0
  943. package/node_modules/@evalops/contracts/dist/index.js.map +1 -1
  944. package/node_modules/@evalops/contracts/dist/proto/maestro/v1/headless_pb.d.ts +77 -77
  945. package/node_modules/@evalops/contracts/dist/proto/maestro/v1/headless_pb.d.ts.map +1 -1
  946. package/node_modules/@evalops/contracts/dist/proto/maestro/v1/headless_pb.js +1 -1
  947. package/node_modules/@evalops/contracts/dist/proto/maestro/v1/headless_pb.js.map +1 -1
  948. package/node_modules/@evalops/contracts/dist/runtime-app-server.d.ts +182 -0
  949. package/node_modules/@evalops/contracts/dist/runtime-app-server.d.ts.map +1 -0
  950. package/node_modules/@evalops/contracts/dist/runtime-app-server.js +83 -0
  951. package/node_modules/@evalops/contracts/dist/runtime-app-server.js.map +1 -0
  952. package/node_modules/@evalops/contracts/dist/runtime-server-request.d.ts +133 -0
  953. package/node_modules/@evalops/contracts/dist/runtime-server-request.d.ts.map +1 -0
  954. package/node_modules/@evalops/contracts/dist/runtime-server-request.js +68 -0
  955. package/node_modules/@evalops/contracts/dist/runtime-server-request.js.map +1 -0
  956. package/node_modules/@evalops/contracts/dist/schemas.d.ts +178 -0
  957. package/node_modules/@evalops/contracts/dist/schemas.d.ts.map +1 -1
  958. package/node_modules/@evalops/contracts/dist/schemas.js +165 -0
  959. package/node_modules/@evalops/contracts/dist/schemas.js.map +1 -1
  960. package/node_modules/@evalops/contracts/dist/typebox-utils.d.ts +2 -0
  961. package/node_modules/@evalops/contracts/dist/typebox-utils.d.ts.map +1 -0
  962. package/node_modules/@evalops/contracts/dist/typebox-utils.js +5 -0
  963. package/node_modules/@evalops/contracts/dist/typebox-utils.js.map +1 -0
  964. package/node_modules/@evalops/contracts/dist/validators.d.ts +4 -1
  965. package/node_modules/@evalops/contracts/dist/validators.d.ts.map +1 -1
  966. package/node_modules/@evalops/contracts/dist/validators.js +4 -1
  967. package/node_modules/@evalops/contracts/dist/validators.js.map +1 -1
  968. package/node_modules/@evalops/contracts/package.json +1 -1
  969. package/node_modules/@evalops/tui/package.json +1 -1
  970. package/node_modules/string-width/index.js +93 -9
  971. package/node_modules/string-width/package.json +1 -1
  972. package/package.json +32 -25
  973. package/dist/cli-tui/commands/grouped/auth-commands.d.ts.map +0 -1
  974. package/dist/cli-tui/commands/grouped/auth-commands.js.map +0 -1
  975. package/dist/cli-tui/commands/grouped/config-commands.d.ts.map +0 -1
  976. package/dist/cli-tui/commands/grouped/config-commands.js.map +0 -1
  977. package/dist/cli-tui/commands/grouped/diag-commands.d.ts.map +0 -1
  978. package/dist/cli-tui/commands/grouped/diag-commands.js.map +0 -1
  979. package/dist/cli-tui/commands/grouped/git-commands.d.ts.map +0 -1
  980. package/dist/cli-tui/commands/grouped/git-commands.js.map +0 -1
  981. package/dist/cli-tui/commands/grouped/index.d.ts.map +0 -1
  982. package/dist/cli-tui/commands/grouped/index.js.map +0 -1
  983. package/dist/cli-tui/commands/grouped/safety-commands.d.ts.map +0 -1
  984. package/dist/cli-tui/commands/grouped/safety-commands.js.map +0 -1
  985. package/dist/cli-tui/commands/grouped/session-commands.d.ts.map +0 -1
  986. package/dist/cli-tui/commands/grouped/session-commands.js.map +0 -1
  987. package/dist/cli-tui/commands/grouped/tools-commands.d.ts.map +0 -1
  988. package/dist/cli-tui/commands/grouped/tools-commands.js.map +0 -1
  989. package/dist/cli-tui/commands/grouped/ui-commands.d.ts.map +0 -1
  990. package/dist/cli-tui/commands/grouped/ui-commands.js.map +0 -1
  991. package/dist/cli-tui/commands/grouped/undo-commands.d.ts.map +0 -1
  992. package/dist/cli-tui/commands/grouped/undo-commands.js.map +0 -1
  993. package/dist/cli-tui/commands/grouped/usage-commands.d.ts.map +0 -1
  994. package/dist/cli-tui/commands/grouped/usage-commands.js.map +0 -1
  995. package/dist/cli-tui/commands/grouped/utils.d.ts.map +0 -1
  996. package/dist/cli-tui/commands/grouped/utils.js.map +0 -1
  997. package/dist/cli-tui/commands/grouped-command-handlers.d.ts.map +0 -1
  998. package/dist/cli-tui/commands/grouped-command-handlers.js +0 -135
  999. package/dist/cli-tui/commands/grouped-command-handlers.js.map +0 -1
  1000. package/dist/cli-tui/tui-renderer/grouped-handlers-wiring.d.ts +0 -78
  1001. package/dist/cli-tui/tui-renderer/grouped-handlers-wiring.d.ts.map +0 -1
  1002. package/dist/cli-tui/tui-renderer/grouped-handlers-wiring.js +0 -129
  1003. package/dist/cli-tui/tui-renderer/grouped-handlers-wiring.js.map +0 -1
  1004. package/node_modules/@evalops/memory/dist/client.d.ts +0 -94
  1005. package/node_modules/@evalops/memory/dist/client.js +0 -503
  1006. package/node_modules/@evalops/memory/gen/proto/dist/memory/v1/memory_pb.d.ts +0 -608
  1007. package/node_modules/@evalops/memory/gen/proto/dist/memory/v1/memory_pb.js +0 -187
  1008. package/node_modules/@evalops/memory/package.json +0 -26
  1009. /package/dist/cli-tui/commands/{grouped → subcommands}/usage-commands.d.ts +0 -0
@@ -1 +1 @@
1
- {"version":3,"file":"migration.js","sourceRoot":"","sources":["../../src/session/migration.ts"],"names":[],"mappings":"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","sourcesContent":["/**\n * Session Migration System\n *\n * Handles background migration of session files to newer formats.\n * Inspired by Conductor's session migration pattern with:\n * - Versioned migrations\n * - Progress tracking\n * - Background batch processing\n * - Persistent state to avoid re-running\n */\n\nimport {\n\texistsSync,\n\tmkdirSync,\n\treadFileSync,\n\treaddirSync,\n\twriteFileSync,\n} from \"node:fs\";\nimport { join } from \"node:path\";\nimport { SESSION_CONFIG, getAgentDir } from \"../config/constants.js\";\nimport { recordSessionMigration } from \"../telemetry.js\";\nimport { createLogger } from \"../utils/logger.js\";\nimport {\n\tCURRENT_SESSION_VERSION,\n\ttype CompactionEntry,\n\ttype SessionEntry,\n\ttype SessionHeaderEntry,\n\ttype SessionMigrationState,\n\ttype SessionTreeEntry,\n\tisSessionTreeEntry,\n\ttryParseSessionEntry,\n} from \"./types.js\";\n\nconst logger = createLogger(\"session-migration\");\n\nconst MIGRATION_STATE_FILE = \"session-migration-state.json\";\n\nlet migrationPromise: Promise<SessionMigrationState | null> | null = null;\n\n// Files to skip during migration (e.g., currently active session files)\nconst skipFiles = new Set<string>();\n\n/**\n * Register a file to be skipped during migration.\n * Used to prevent race conditions with active session writers.\n */\nexport function registerActiveSessionFile(filePath: string): void {\n\tskipFiles.add(filePath);\n}\n\n/**\n * Unregister a file from the skip list.\n */\nexport function unregisterActiveSessionFile(filePath: string): void {\n\tskipFiles.delete(filePath);\n}\n\n/**\n * Get the session directory for the current working directory.\n */\nfunction getSessionDirectory(): string {\n\tconst cwd = process.cwd();\n\tconst safePath = `--${cwd.replace(/^[/\\\\]/, \"\").replace(/[/\\\\:]/g, \"-\")}--`;\n\tconst baseDir = SESSION_CONFIG.DEFAULT_DIR || join(getAgentDir(), \"sessions\");\n\treturn join(baseDir, safePath);\n}\n\nfunction getMigrationStatePath(): string {\n\tconst sessionDir = getSessionDirectory();\n\tif (!existsSync(sessionDir)) {\n\t\tmkdirSync(sessionDir, { recursive: true });\n\t}\n\treturn join(sessionDir, MIGRATION_STATE_FILE);\n}\n\nfunction loadMigrationState(): SessionMigrationState | null {\n\tconst statePath = getMigrationStatePath();\n\tif (!existsSync(statePath)) {\n\t\treturn null;\n\t}\n\ttry {\n\t\tconst content = readFileSync(statePath, \"utf8\");\n\t\tconst state = JSON.parse(content) as SessionMigrationState;\n\t\tif (\n\t\t\tstate &&\n\t\t\ttypeof state === \"object\" &&\n\t\t\ttypeof state.version === \"number\" &&\n\t\t\ttypeof state.lastRun === \"string\"\n\t\t) {\n\t\t\treturn state;\n\t\t}\n\t} catch (error) {\n\t\tlogger.warn(\"Failed to load migration state\", { error });\n\t}\n\treturn null;\n}\n\nfunction persistMigrationState(state: SessionMigrationState): void {\n\ttry {\n\t\tconst statePath = getMigrationStatePath();\n\t\twriteFileSync(statePath, JSON.stringify(state, null, 2));\n\t} catch (error) {\n\t\tlogger.warn(\"Failed to persist migration state\", { error });\n\t}\n}\n\nfunction readSessionEntries(filePath: string): SessionEntry[] {\n\tif (!existsSync(filePath)) {\n\t\treturn [];\n\t}\n\tconst contents = readFileSync(filePath, \"utf8\").trim();\n\tif (!contents) {\n\t\treturn [];\n\t}\n\n\tconst entries: SessionEntry[] = [];\n\tfor (const line of contents.split(\"\\n\")) {\n\t\tconst entry = tryParseSessionEntry(line);\n\t\tif (entry) {\n\t\t\tentries.push(entry);\n\t\t}\n\t}\n\treturn entries;\n}\n\nfunction generateEntryId(existing: Set<string>): string {\n\tconst chars = \"abcdefghijklmnopqrstuvwxyz0123456789\";\n\tfor (let attempt = 0; attempt < 100; attempt++) {\n\t\tlet id = \"\";\n\t\tfor (let i = 0; i < 8; i++) {\n\t\t\tid += chars[Math.floor(Math.random() * chars.length)];\n\t\t}\n\t\tif (!existing.has(id)) {\n\t\t\treturn id;\n\t\t}\n\t}\n\t// Fallback to timestamp-based ID\n\treturn `${Date.now().toString(36)}${Math.random().toString(36).slice(2, 6)}`;\n}\n\n/**\n * Migrate v1 sessions to v2 format (add tree entry IDs and parentIds)\n */\nfunction migrateV1ToV2(entries: SessionEntry[]): boolean {\n\tconst ids = new Set<string>();\n\tlet prevId: string | null = null;\n\tlet migrated = false;\n\t// Include message, custom_message, and branch_summary entries to match\n\t// how firstKeptEntryIndex was computed in v1 sessions\n\tconst messageEntries: SessionTreeEntry[] = [];\n\n\tfor (const entry of entries) {\n\t\tif (entry.type === \"session\") {\n\t\t\tif ((entry as SessionHeaderEntry).version !== CURRENT_SESSION_VERSION) {\n\t\t\t\t(entry as SessionHeaderEntry).version = CURRENT_SESSION_VERSION;\n\t\t\t\tmigrated = true;\n\t\t\t}\n\t\t\tcontinue;\n\t\t}\n\t\tif (!isSessionTreeEntry(entry)) {\n\t\t\tcontinue;\n\t\t}\n\t\tif (!entry.id || ids.has(entry.id)) {\n\t\t\tentry.id = generateEntryId(ids);\n\t\t\tmigrated = true;\n\t\t}\n\t\tids.add(entry.id);\n\t\tif (entry.parentId === undefined) {\n\t\t\tentry.parentId = prevId;\n\t\t\tmigrated = true;\n\t\t}\n\t\tprevId = entry.id;\n\t\t// Collect all entry types that contribute to firstKeptEntryIndex\n\t\tif (\n\t\t\tentry.type === \"message\" ||\n\t\t\tentry.type === \"custom_message\" ||\n\t\t\tentry.type === \"branch_summary\"\n\t\t) {\n\t\t\tmessageEntries.push(entry);\n\t\t}\n\t}\n\n\t// Second pass: convert compaction entries' firstKeptEntryIndex to firstKeptEntryId\n\tfor (const entry of entries) {\n\t\tif (entry.type !== \"compaction\") continue;\n\t\tconst compaction = entry as CompactionEntry & {\n\t\t\tfirstKeptEntryIndex?: number;\n\t\t};\n\t\tif (\n\t\t\ttypeof compaction.firstKeptEntryIndex === \"number\" &&\n\t\t\t!compaction.firstKeptEntryId\n\t\t) {\n\t\t\tconst target = messageEntries[compaction.firstKeptEntryIndex];\n\t\t\tconst fallback = messageEntries[0]?.id ?? compaction.id;\n\t\t\tcompaction.firstKeptEntryId = target?.id ?? fallback;\n\t\t\tmigrated = true;\n\t\t}\n\t\tif (compaction.firstKeptEntryIndex !== undefined) {\n\t\t\tdelete compaction.firstKeptEntryIndex;\n\t\t\tmigrated = true;\n\t\t}\n\t}\n\n\treturn migrated;\n}\n\n/**\n * Migrate entries to the current version, returning true if any changes were made.\n */\nexport function migrateToCurrentVersion(entries: SessionEntry[]): boolean {\n\tconst header = entries.find((e) => e.type === \"session\") as\n\t\t| SessionHeaderEntry\n\t\t| undefined;\n\tconst version = header?.version ?? 1;\n\n\tif (version >= CURRENT_SESSION_VERSION) {\n\t\treturn false;\n\t}\n\n\tlet migrated = false;\n\n\tif (version < 2) {\n\t\tmigrated = migrateV1ToV2(entries) || migrated;\n\t}\n\n\treturn migrated;\n}\n\n/**\n * Run migration on a single session file.\n * Returns: { migrated: boolean, error?: Error }\n */\nfunction migrateSessionFile(filePath: string): {\n\tmigrated: boolean;\n\terror?: Error;\n} {\n\ttry {\n\t\tconst entries = readSessionEntries(filePath);\n\t\tif (entries.length === 0) {\n\t\t\treturn { migrated: false };\n\t\t}\n\n\t\tconst migrated = migrateToCurrentVersion(entries);\n\t\tif (migrated) {\n\t\t\tconst content = `${entries.map((e) => JSON.stringify(e)).join(\"\\n\")}\\n`;\n\t\t\twriteFileSync(filePath, content);\n\t\t}\n\n\t\treturn { migrated };\n\t} catch (error) {\n\t\treturn {\n\t\t\tmigrated: false,\n\t\t\terror: error instanceof Error ? error : new Error(String(error)),\n\t\t};\n\t}\n}\n\n/**\n * Run session migration across all session files in the directory.\n */\nasync function runSessionMigrationInternal(): Promise<SessionMigrationState | null> {\n\tconst existing = loadMigrationState();\n\tif (existing && existing.version >= CURRENT_SESSION_VERSION) {\n\t\treturn existing;\n\t}\n\n\tconst sessionDir = getSessionDirectory();\n\tif (!existsSync(sessionDir)) {\n\t\t// No sessions to migrate\n\t\tconst state: SessionMigrationState = {\n\t\t\tversion: CURRENT_SESSION_VERSION,\n\t\t\tlastRun: new Date().toISOString(),\n\t\t\tsuccesses: 0,\n\t\t\tfailures: 0,\n\t\t\tnormalized: 0,\n\t\t\tskipped: 0,\n\t\t\ttotal: 0,\n\t\t};\n\t\tpersistMigrationState(state);\n\t\trecordSessionMigration({\n\t\t\ttotal: state.total,\n\t\t\tmigrated: state.normalized,\n\t\t\tskipped: state.skipped,\n\t\t\tfailures: state.failures,\n\t\t\tversion: state.version,\n\t\t});\n\t\treturn state;\n\t}\n\n\tconst startedAt = new Date().toISOString();\n\tlet files: string[];\n\ttry {\n\t\tfiles = readdirSync(sessionDir)\n\t\t\t.filter((f) => f.endsWith(\".jsonl\"))\n\t\t\t.map((f) => join(sessionDir, f));\n\t} catch (error) {\n\t\tlogger.warn(\"Failed to read session directory\", { error });\n\t\treturn null;\n\t}\n\n\tconst state: SessionMigrationState = {\n\t\tversion: CURRENT_SESSION_VERSION,\n\t\tlastRun: startedAt,\n\t\tsuccesses: 0,\n\t\tfailures: 0,\n\t\tnormalized: 0,\n\t\tskipped: 0,\n\t\ttotal: files.length,\n\t};\n\n\t// Process in batches to avoid blocking\n\tconst BATCH_SIZE = 10;\n\tfor (let i = 0; i < files.length; i += BATCH_SIZE) {\n\t\tconst batch = files.slice(i, i + BATCH_SIZE);\n\n\t\tfor (const file of batch) {\n\t\t\t// Skip files that are currently active (to prevent race conditions)\n\t\t\tif (skipFiles.has(file)) {\n\t\t\t\tstate.skipped += 1;\n\t\t\t\tcontinue;\n\t\t\t}\n\t\t\tconst result = migrateSessionFile(file);\n\t\t\tif (result.error) {\n\t\t\t\tstate.failures += 1;\n\t\t\t\tlogger.warn(\"Session migration failed\", {\n\t\t\t\t\tfile,\n\t\t\t\t\terror: result.error.message,\n\t\t\t\t});\n\t\t\t} else if (result.migrated) {\n\t\t\t\tstate.successes += 1;\n\t\t\t\tstate.normalized += 1;\n\t\t\t} else {\n\t\t\t\tstate.skipped += 1;\n\t\t\t}\n\t\t}\n\n\t\t// Yield to event loop between batches\n\t\tif (i + BATCH_SIZE < files.length) {\n\t\t\tawait new Promise((resolve) => setImmediate(resolve));\n\t\t}\n\t}\n\n\tpersistMigrationState(state);\n\n\tif (state.normalized > 0) {\n\t\tlogger.info(\"Session migration completed\", {\n\t\t\ttotal: state.total,\n\t\t\tmigrated: state.normalized,\n\t\t\tskipped: state.skipped,\n\t\t\tfailures: state.failures,\n\t\t});\n\t}\n\n\t// Record telemetry for migration stats\n\trecordSessionMigration({\n\t\ttotal: state.total,\n\t\tmigrated: state.normalized,\n\t\tskipped: state.skipped,\n\t\tfailures: state.failures,\n\t\tversion: state.version,\n\t});\n\n\treturn state;\n}\n\n/**\n * Schedule session migration to run in the background.\n * Safe to call multiple times - only runs once.\n */\nexport function scheduleSessionMigration(): void {\n\tif (migrationPromise) {\n\t\treturn;\n\t}\n\tmigrationPromise = runSessionMigrationInternal().catch((error) => {\n\t\tlogger.warn(\"Session migration failed\", { error });\n\t\treturn null;\n\t});\n}\n\n/**\n * Run session migration and wait for completion.\n * Returns migration state or null if migration failed.\n */\nexport async function runSessionMigration(): Promise<SessionMigrationState | null> {\n\tif (!migrationPromise) {\n\t\tmigrationPromise = runSessionMigrationInternal().catch((error) => {\n\t\t\tlogger.warn(\"Session migration failed\", { error });\n\t\t\treturn null;\n\t\t});\n\t}\n\treturn migrationPromise;\n}\n\n/**\n * Get the current migration state without running migration.\n */\nexport function getMigrationState(): SessionMigrationState | null {\n\treturn loadMigrationState();\n}\n\n/**\n * Reset migration state to force re-migration on next run.\n * Useful for testing or after manual session file edits.\n */\nexport function resetMigrationState(): void {\n\tconst statePath = getMigrationStatePath();\n\tif (existsSync(statePath)) {\n\t\ttry {\n\t\t\tconst resetState: SessionMigrationState = {\n\t\t\t\tversion: 0,\n\t\t\t\tlastRun: \"\",\n\t\t\t\tsuccesses: 0,\n\t\t\t\tfailures: 0,\n\t\t\t\tnormalized: 0,\n\t\t\t\tskipped: 0,\n\t\t\t\ttotal: 0,\n\t\t\t};\n\t\t\twriteFileSync(statePath, JSON.stringify(resetState, null, 2));\n\t\t} catch {\n\t\t\t// Ignore errors\n\t\t}\n\t}\n\tmigrationPromise = null;\n}\n"]}
1
+ {"version":3,"file":"migration.js","sourceRoot":"","sources":["../../src/session/migration.ts"],"names":[],"mappings":"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","sourcesContent":["/**\n * Session Migration System\n *\n * Handles background migration of session files to newer formats.\n * Inspired by Conductor's session migration pattern with:\n * - Versioned migrations\n * - Progress tracking\n * - Background batch processing\n * - Persistent state to avoid re-running\n */\n\nimport {\n\texistsSync,\n\tmkdirSync,\n\treadFileSync,\n\treaddirSync,\n\twriteFileSync,\n} from \"node:fs\";\nimport { join } from \"node:path\";\nimport { SESSION_CONFIG, getAgentDir } from \"../config/constants.js\";\nimport { recordSessionMigration } from \"../telemetry.js\";\nimport { createLogger } from \"../utils/logger.js\";\nimport {\n\tCURRENT_SESSION_VERSION,\n\ttype CompactionEntry,\n\ttype SessionEntry,\n\ttype SessionHeaderEntry,\n\ttype SessionMigrationState,\n\ttype SessionTreeEntry,\n\tisSessionTreeEntry,\n\ttryParseSessionEntry,\n} from \"./types.js\";\n\nconst logger = createLogger(\"session-migration\");\n\nconst MIGRATION_STATE_FILE = \"session-migration-state.json\";\n\nlet migrationPromise: Promise<SessionMigrationState | null> | null = null;\n\n// Files to skip during migration (e.g., currently active session files)\nconst skipFiles = new Set<string>();\n\n/**\n * Register a file to be skipped during migration.\n * Used to prevent race conditions with active session writers.\n */\nexport function registerActiveSessionFile(filePath: string): void {\n\tskipFiles.add(filePath);\n}\n\n/**\n * Unregister a file from the skip list.\n */\nexport function unregisterActiveSessionFile(filePath: string): void {\n\tskipFiles.delete(filePath);\n}\n\n/**\n * Get the session directory for the current working directory.\n */\nfunction getSessionDirectory(): string {\n\tconst cwd = process.cwd();\n\tconst safePath = `--${cwd.replace(/^[/\\\\]/, \"\").replace(/[/\\\\:]/g, \"-\")}--`;\n\tconst baseDir = SESSION_CONFIG.DEFAULT_DIR || join(getAgentDir(), \"sessions\");\n\treturn join(baseDir, safePath);\n}\n\nfunction getMigrationStatePath(): string {\n\tconst sessionDir = getSessionDirectory();\n\tif (!existsSync(sessionDir)) {\n\t\tmkdirSync(sessionDir, { recursive: true });\n\t}\n\treturn join(sessionDir, MIGRATION_STATE_FILE);\n}\n\nfunction loadMigrationState(): SessionMigrationState | null {\n\tconst statePath = getMigrationStatePath();\n\tif (!existsSync(statePath)) {\n\t\treturn null;\n\t}\n\ttry {\n\t\tconst content = readFileSync(statePath, \"utf8\");\n\t\tconst state = JSON.parse(content) as SessionMigrationState;\n\t\tif (\n\t\t\tstate &&\n\t\t\ttypeof state === \"object\" &&\n\t\t\ttypeof state.version === \"number\" &&\n\t\t\ttypeof state.lastRun === \"string\"\n\t\t) {\n\t\t\treturn state;\n\t\t}\n\t} catch (error) {\n\t\tlogger.warn(\"Failed to load migration state\", { error });\n\t}\n\treturn null;\n}\n\nfunction persistMigrationState(state: SessionMigrationState): void {\n\ttry {\n\t\tconst statePath = getMigrationStatePath();\n\t\twriteFileSync(statePath, JSON.stringify(state, null, 2));\n\t} catch (error) {\n\t\tlogger.warn(\"Failed to persist migration state\", { error });\n\t}\n}\n\nfunction readSessionEntries(filePath: string): SessionEntry[] {\n\tif (!existsSync(filePath)) {\n\t\treturn [];\n\t}\n\tconst contents = readFileSync(filePath, \"utf8\").trim();\n\tif (!contents) {\n\t\treturn [];\n\t}\n\n\tconst entries: SessionEntry[] = [];\n\tfor (const line of contents.split(\"\\n\")) {\n\t\tconst entry = tryParseSessionEntry(line);\n\t\tif (entry) {\n\t\t\tentries.push(entry);\n\t\t}\n\t}\n\treturn entries;\n}\n\nfunction generateEntryId(existing: Set<string>): string {\n\tconst chars = \"abcdefghijklmnopqrstuvwxyz0123456789\";\n\tfor (let attempt = 0; attempt < 100; attempt++) {\n\t\tlet id = \"\";\n\t\tfor (let i = 0; i < 8; i++) {\n\t\t\tid += chars[Math.floor(Math.random() * chars.length)];\n\t\t}\n\t\tif (!existing.has(id)) {\n\t\t\treturn id;\n\t\t}\n\t}\n\t// Fallback to timestamp-based ID\n\treturn `${Date.now().toString(36)}${Math.random().toString(36).slice(2, 6)}`;\n}\n\n/**\n * Migrate v1 sessions to v2 format (add tree entry IDs and parentIds)\n */\nfunction migrateV1ToV2(entries: SessionEntry[]): boolean {\n\tconst ids = new Set<string>();\n\tlet prevId: string | null = null;\n\tlet migrated = false;\n\t// Include message, custom_message, and branch_summary entries to match\n\t// how firstKeptEntryIndex was computed in v1 sessions\n\tconst messageEntries: SessionTreeEntry[] = [];\n\n\tfor (const entry of entries) {\n\t\tif (entry.type === \"session\") {\n\t\t\tif ((entry as SessionHeaderEntry).version !== CURRENT_SESSION_VERSION) {\n\t\t\t\t(entry as SessionHeaderEntry).version = CURRENT_SESSION_VERSION;\n\t\t\t\tmigrated = true;\n\t\t\t}\n\t\t\tcontinue;\n\t\t}\n\t\tif (!isSessionTreeEntry(entry)) {\n\t\t\tcontinue;\n\t\t}\n\t\tif (!entry.id || ids.has(entry.id)) {\n\t\t\tentry.id = generateEntryId(ids);\n\t\t\tmigrated = true;\n\t\t}\n\t\tids.add(entry.id);\n\t\tif (entry.parentId === undefined) {\n\t\t\tentry.parentId = prevId;\n\t\t\tmigrated = true;\n\t\t}\n\t\tprevId = entry.id;\n\t\t// Preserve v1 migration semantics: legacy firstKeptEntryIndex was computed\n\t\t// from message-bearing entries, including tool results.\n\t\tif (\n\t\t\tentry.type === \"message\" ||\n\t\t\tentry.type === \"custom_message\" ||\n\t\t\tentry.type === \"branch_summary\"\n\t\t) {\n\t\t\tmessageEntries.push(entry);\n\t\t}\n\t}\n\n\t// Second pass: convert compaction entries' firstKeptEntryIndex to firstKeptEntryId\n\tfor (const entry of entries) {\n\t\tif (entry.type !== \"compaction\") continue;\n\t\tconst compaction = entry as CompactionEntry & {\n\t\t\tfirstKeptEntryIndex?: number;\n\t\t};\n\t\tif (\n\t\t\ttypeof compaction.firstKeptEntryIndex === \"number\" &&\n\t\t\t!compaction.firstKeptEntryId\n\t\t) {\n\t\t\tconst target = messageEntries[compaction.firstKeptEntryIndex];\n\t\t\tconst fallback = messageEntries[0]?.id ?? compaction.id;\n\t\t\tcompaction.firstKeptEntryId = target?.id ?? fallback;\n\t\t\tmigrated = true;\n\t\t}\n\t\tif (compaction.firstKeptEntryIndex !== undefined) {\n\t\t\tdelete compaction.firstKeptEntryIndex;\n\t\t\tmigrated = true;\n\t\t}\n\t}\n\n\treturn migrated;\n}\n\n/**\n * Migrate entries to the current version, returning true if any changes were made.\n */\nexport function migrateToCurrentVersion(entries: SessionEntry[]): boolean {\n\tconst header = entries.find((e) => e.type === \"session\") as\n\t\t| SessionHeaderEntry\n\t\t| undefined;\n\tconst version = header?.version ?? 1;\n\n\tif (version >= CURRENT_SESSION_VERSION) {\n\t\treturn false;\n\t}\n\n\tlet migrated = false;\n\n\tif (version < 2) {\n\t\tmigrated = migrateV1ToV2(entries) || migrated;\n\t}\n\n\treturn migrated;\n}\n\n/**\n * Run migration on a single session file.\n * Returns: { migrated: boolean, error?: Error }\n */\nfunction migrateSessionFile(filePath: string): {\n\tmigrated: boolean;\n\terror?: Error;\n} {\n\ttry {\n\t\tconst entries = readSessionEntries(filePath);\n\t\tif (entries.length === 0) {\n\t\t\treturn { migrated: false };\n\t\t}\n\n\t\tconst migrated = migrateToCurrentVersion(entries);\n\t\tif (migrated) {\n\t\t\tconst content = `${entries.map((e) => JSON.stringify(e)).join(\"\\n\")}\\n`;\n\t\t\twriteFileSync(filePath, content);\n\t\t}\n\n\t\treturn { migrated };\n\t} catch (error) {\n\t\treturn {\n\t\t\tmigrated: false,\n\t\t\terror: error instanceof Error ? error : new Error(String(error)),\n\t\t};\n\t}\n}\n\n/**\n * Run session migration across all session files in the directory.\n */\nasync function runSessionMigrationInternal(): Promise<SessionMigrationState | null> {\n\tconst existing = loadMigrationState();\n\tif (existing && existing.version >= CURRENT_SESSION_VERSION) {\n\t\treturn existing;\n\t}\n\n\tconst sessionDir = getSessionDirectory();\n\tif (!existsSync(sessionDir)) {\n\t\t// No sessions to migrate\n\t\tconst state: SessionMigrationState = {\n\t\t\tversion: CURRENT_SESSION_VERSION,\n\t\t\tlastRun: new Date().toISOString(),\n\t\t\tsuccesses: 0,\n\t\t\tfailures: 0,\n\t\t\tnormalized: 0,\n\t\t\tskipped: 0,\n\t\t\ttotal: 0,\n\t\t};\n\t\tpersistMigrationState(state);\n\t\trecordSessionMigration({\n\t\t\ttotal: state.total,\n\t\t\tmigrated: state.normalized,\n\t\t\tskipped: state.skipped,\n\t\t\tfailures: state.failures,\n\t\t\tversion: state.version,\n\t\t});\n\t\treturn state;\n\t}\n\n\tconst startedAt = new Date().toISOString();\n\tlet files: string[];\n\ttry {\n\t\tfiles = readdirSync(sessionDir)\n\t\t\t.filter((f) => f.endsWith(\".jsonl\"))\n\t\t\t.map((f) => join(sessionDir, f));\n\t} catch (error) {\n\t\tlogger.warn(\"Failed to read session directory\", { error });\n\t\treturn null;\n\t}\n\n\tconst state: SessionMigrationState = {\n\t\tversion: CURRENT_SESSION_VERSION,\n\t\tlastRun: startedAt,\n\t\tsuccesses: 0,\n\t\tfailures: 0,\n\t\tnormalized: 0,\n\t\tskipped: 0,\n\t\ttotal: files.length,\n\t};\n\n\t// Process in batches to avoid blocking\n\tconst BATCH_SIZE = 10;\n\tfor (let i = 0; i < files.length; i += BATCH_SIZE) {\n\t\tconst batch = files.slice(i, i + BATCH_SIZE);\n\n\t\tfor (const file of batch) {\n\t\t\t// Skip files that are currently active (to prevent race conditions)\n\t\t\tif (skipFiles.has(file)) {\n\t\t\t\tstate.skipped += 1;\n\t\t\t\tcontinue;\n\t\t\t}\n\t\t\tconst result = migrateSessionFile(file);\n\t\t\tif (result.error) {\n\t\t\t\tstate.failures += 1;\n\t\t\t\tlogger.warn(\"Session migration failed\", {\n\t\t\t\t\tfile,\n\t\t\t\t\terror: result.error.message,\n\t\t\t\t});\n\t\t\t} else if (result.migrated) {\n\t\t\t\tstate.successes += 1;\n\t\t\t\tstate.normalized += 1;\n\t\t\t} else {\n\t\t\t\tstate.skipped += 1;\n\t\t\t}\n\t\t}\n\n\t\t// Yield to event loop between batches\n\t\tif (i + BATCH_SIZE < files.length) {\n\t\t\tawait new Promise((resolve) => setImmediate(resolve));\n\t\t}\n\t}\n\n\tpersistMigrationState(state);\n\n\tif (state.normalized > 0) {\n\t\tlogger.info(\"Session migration completed\", {\n\t\t\ttotal: state.total,\n\t\t\tmigrated: state.normalized,\n\t\t\tskipped: state.skipped,\n\t\t\tfailures: state.failures,\n\t\t});\n\t}\n\n\t// Record telemetry for migration stats\n\trecordSessionMigration({\n\t\ttotal: state.total,\n\t\tmigrated: state.normalized,\n\t\tskipped: state.skipped,\n\t\tfailures: state.failures,\n\t\tversion: state.version,\n\t});\n\n\treturn state;\n}\n\n/**\n * Schedule session migration to run in the background.\n * Safe to call multiple times - only runs once.\n */\nexport function scheduleSessionMigration(): void {\n\tif (migrationPromise) {\n\t\treturn;\n\t}\n\tmigrationPromise = runSessionMigrationInternal().catch((error) => {\n\t\tlogger.warn(\"Session migration failed\", { error });\n\t\treturn null;\n\t});\n}\n\n/**\n * Run session migration and wait for completion.\n * Returns migration state or null if migration failed.\n */\nexport async function runSessionMigration(): Promise<SessionMigrationState | null> {\n\tif (!migrationPromise) {\n\t\tmigrationPromise = runSessionMigrationInternal().catch((error) => {\n\t\t\tlogger.warn(\"Session migration failed\", { error });\n\t\t\treturn null;\n\t\t});\n\t}\n\treturn migrationPromise;\n}\n\n/**\n * Get the current migration state without running migration.\n */\nexport function getMigrationState(): SessionMigrationState | null {\n\treturn loadMigrationState();\n}\n\n/**\n * Reset migration state to force re-migration on next run.\n * Useful for testing or after manual session file edits.\n */\nexport function resetMigrationState(): void {\n\tconst statePath = getMigrationStatePath();\n\tif (existsSync(statePath)) {\n\t\ttry {\n\t\t\tconst resetState: SessionMigrationState = {\n\t\t\t\tversion: 0,\n\t\t\t\tlastRun: \"\",\n\t\t\t\tsuccesses: 0,\n\t\t\t\tfailures: 0,\n\t\t\t\tnormalized: 0,\n\t\t\t\tskipped: 0,\n\t\t\t\ttotal: 0,\n\t\t\t};\n\t\t\twriteFileSync(statePath, JSON.stringify(resetState, null, 2));\n\t\t} catch {\n\t\t\t// Ignore errors\n\t\t}\n\t}\n\tmigrationPromise = null;\n}\n"]}
@@ -1 +1 @@
1
- {"version":3,"file":"session-memory.d.ts","sourceRoot":"","sources":["../../src/session/session-memory.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,KAAK,WAAW,EAAsB,MAAM,oBAAoB,CAAC;AAW1E,eAAO,MAAM,oBAAoB,mBAAmB,CAAC;AAoDrD,wBAAgB,yBAAyB,CAAC,WAAW,EAAE,MAAM,GAAG;IAC/D,OAAO,EAAE,MAAM,CAAC;IAChB,SAAS,EAAE,MAAM,CAAC;IAClB,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,oBAAoB,CAAC,EAAE,MAAM,CAAC;IAC9B,kBAAkB,EAAE,MAAM,CAAC;CAC3B,GAAG,IAAI,CAsEP;AAED,wBAAgB,iBAAiB,CAAC,WAAW,EAAE,MAAM,GAAG,WAAW,GAAG,IAAI,CAWzE"}
1
+ {"version":3,"file":"session-memory.d.ts","sourceRoot":"","sources":["../../src/session/session-memory.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,KAAK,WAAW,EAAsB,MAAM,oBAAoB,CAAC;AAW1E,eAAO,MAAM,oBAAoB,mBAAmB,CAAC;AA2DrD,wBAAgB,yBAAyB,CAAC,WAAW,EAAE,MAAM,GAAG;IAC/D,OAAO,EAAE,MAAM,CAAC;IAChB,SAAS,EAAE,MAAM,CAAC;IAClB,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,oBAAoB,CAAC,EAAE,MAAM,CAAC;IAC9B,kBAAkB,EAAE,MAAM,CAAC;CAC3B,GAAG,IAAI,CAuEP;AAED,wBAAgB,iBAAiB,CAAC,WAAW,EAAE,MAAM,GAAG,WAAW,GAAG,IAAI,CAWzE"}
@@ -44,6 +44,12 @@ function collectRecentUserContext(entries, limit = 4) {
44
44
  }
45
45
  return lines;
46
46
  }
47
+ function hasMessageContent(content) {
48
+ if (typeof content === "string") {
49
+ return content.trim().length > 0;
50
+ }
51
+ return Array.isArray(content) && content.length > 0;
52
+ }
47
53
  export function buildSessionMemoryContent(sessionPath) {
48
54
  if (!existsSync(sessionPath)) {
49
55
  return null;
@@ -95,7 +101,7 @@ export function buildSessionMemoryContent(sessionPath) {
95
101
  sessionId: info.id,
96
102
  cwd: info.cwd,
97
103
  memoryExtractionHash: info.memoryExtractionHash,
98
- assistantTurnCount: info.messages.filter((message) => message.role === "assistant").length,
104
+ assistantTurnCount: info.messages.filter((message) => message.role === "assistant" && hasMessageContent(message.content)).length,
99
105
  };
100
106
  }
101
107
  export function syncSessionMemory(sessionPath) {
@@ -1 +1 @@
1
- {"version":3,"file":"session-memory.js","sourceRoot":"","sources":["../../src/session/session-memory.ts"],"names":[],"mappings":"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","sourcesContent":["import { existsSync, statSync } from \"node:fs\";\nimport { type MemoryEntry, upsertScopedMemory } from \"../memory/index.js\";\nimport { createLogger } from \"../utils/logger.js\";\nimport {\n\tbuildSessionFileInfo,\n\textractTextFromContent,\n\tsafeReadSessionEntries,\n} from \"./session-context.js\";\nimport type { SessionEntry } from \"./types.js\";\n\nconst logger = createLogger(\"session-memory\");\n\nexport const SESSION_MEMORY_TOPIC = \"session-memory\";\n\nfunction normalizeLine(text: string): string {\n\treturn text.replace(/\\s+/g, \" \").trim();\n}\n\nfunction collectSummaryHistory(entries: SessionEntry[], limit = 8): string[] {\n\tconst summaries = entries\n\t\t.filter(\n\t\t\t(entry): entry is Extract<SessionEntry, { type: \"session_meta\" }> =>\n\t\t\t\tentry.type === \"session_meta\" &&\n\t\t\t\ttypeof entry.summary === \"string\" &&\n\t\t\t\tentry.summary.trim().length > 0,\n\t\t)\n\t\t.map((entry) => normalizeLine(entry.summary ?? \"\"));\n\n\tconst unique: string[] = [];\n\tfor (let index = summaries.length - 1; index >= 0; index -= 1) {\n\t\tconst summary = summaries[index];\n\t\tif (!summary || unique.includes(summary)) {\n\t\t\tcontinue;\n\t\t}\n\t\tunique.unshift(summary);\n\t\tif (unique.length >= limit) {\n\t\t\tbreak;\n\t\t}\n\t}\n\treturn unique;\n}\n\nfunction collectRecentUserContext(\n\tentries: SessionEntry[],\n\tlimit = 4,\n): string[] {\n\tconst lines: string[] = [];\n\tfor (let index = entries.length - 1; index >= 0; index -= 1) {\n\t\tconst entry = entries[index];\n\t\tif (entry?.type !== \"message\" || entry.message.role !== \"user\") {\n\t\t\tcontinue;\n\t\t}\n\t\tconst text = normalizeLine(extractTextFromContent(entry.message.content));\n\t\tif (!text || lines.includes(text)) {\n\t\t\tcontinue;\n\t\t}\n\t\tlines.unshift(text);\n\t\tif (lines.length >= limit) {\n\t\t\tbreak;\n\t\t}\n\t}\n\treturn lines;\n}\n\nexport function buildSessionMemoryContent(sessionPath: string): {\n\tcontent: string;\n\tsessionId: string;\n\tcwd?: string;\n\tmemoryExtractionHash?: string;\n\tassistantTurnCount: number;\n} | null {\n\tif (!existsSync(sessionPath)) {\n\t\treturn null;\n\t}\n\n\tconst stats = statSync(sessionPath);\n\tconst entries = safeReadSessionEntries(sessionPath, (error) => {\n\t\tlogger.warn(\"Failed to read session while building session memory\", {\n\t\t\tsessionPath,\n\t\t\terror: error instanceof Error ? error.message : String(error),\n\t\t});\n\t});\n\tconst info = buildSessionFileInfo(entries, stats);\n\tif (!info?.id || info.id === \"unknown\") {\n\t\treturn null;\n\t}\n\n\tconst currentState =\n\t\tinfo.resumeSummary?.trim() ||\n\t\tinfo.summary?.trim() ||\n\t\t\"Session is active, but no runtime summary has been saved yet.\";\n\tconst title =\n\t\tinfo.title?.trim() ||\n\t\tinfo.summary?.trim() ||\n\t\tinfo.subject?.trim() ||\n\t\tinfo.id;\n\tconst task =\n\t\tinfo.firstMessage.trim() ||\n\t\tinfo.subject?.trim() ||\n\t\t\"No explicit task has been captured for this session yet.\";\n\tconst worklog = collectSummaryHistory(entries);\n\tconst recentUserContext = collectRecentUserContext(entries);\n\n\tconst lines = [\n\t\t\"# Session Memory\",\n\t\t\"\",\n\t\t`- Session: ${title}`,\n\t\t`- Session ID: ${info.id}`,\n\t\t`- Created: ${info.created.toISOString()}`,\n\t\t`- Updated: ${stats.mtime.toISOString()}`,\n\t\t`- Messages: ${info.messageCount}`,\n\t];\n\n\tif (info.tags?.length) {\n\t\tlines.push(`- Tags: ${info.tags.join(\", \")}`);\n\t}\n\n\tlines.push(\"\", \"## Current State\", currentState, \"\", \"## Task\", task);\n\n\tif (recentUserContext.length > 0) {\n\t\tlines.push(\n\t\t\t\"\",\n\t\t\t\"## Recent User Context\",\n\t\t\t...recentUserContext.map((line) => `- ${line}`),\n\t\t);\n\t}\n\n\tif (worklog.length > 0) {\n\t\tlines.push(\"\", \"## Worklog\", ...worklog.map((line) => `- ${line}`));\n\t}\n\n\treturn {\n\t\tcontent: lines.join(\"\\n\").trim(),\n\t\tsessionId: info.id,\n\t\tcwd: info.cwd,\n\t\tmemoryExtractionHash: info.memoryExtractionHash,\n\t\tassistantTurnCount: info.messages.filter(\n\t\t\t(message) => message.role === \"assistant\",\n\t\t).length,\n\t};\n}\n\nexport function syncSessionMemory(sessionPath: string): MemoryEntry | null {\n\tconst built = buildSessionMemoryContent(sessionPath);\n\tif (!built) {\n\t\treturn null;\n\t}\n\n\treturn upsertScopedMemory(SESSION_MEMORY_TOPIC, built.content, {\n\t\tsessionId: built.sessionId,\n\t\ttags: [\"session\", \"summary\"],\n\t\tcwd: built.cwd,\n\t});\n}\n"]}
1
+ {"version":3,"file":"session-memory.js","sourceRoot":"","sources":["../../src/session/session-memory.ts"],"names":[],"mappings":"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","sourcesContent":["import { existsSync, statSync } from \"node:fs\";\nimport { type MemoryEntry, upsertScopedMemory } from \"../memory/index.js\";\nimport { createLogger } from \"../utils/logger.js\";\nimport {\n\tbuildSessionFileInfo,\n\textractTextFromContent,\n\tsafeReadSessionEntries,\n} from \"./session-context.js\";\nimport type { SessionEntry } from \"./types.js\";\n\nconst logger = createLogger(\"session-memory\");\n\nexport const SESSION_MEMORY_TOPIC = \"session-memory\";\n\nfunction normalizeLine(text: string): string {\n\treturn text.replace(/\\s+/g, \" \").trim();\n}\n\nfunction collectSummaryHistory(entries: SessionEntry[], limit = 8): string[] {\n\tconst summaries = entries\n\t\t.filter(\n\t\t\t(entry): entry is Extract<SessionEntry, { type: \"session_meta\" }> =>\n\t\t\t\tentry.type === \"session_meta\" &&\n\t\t\t\ttypeof entry.summary === \"string\" &&\n\t\t\t\tentry.summary.trim().length > 0,\n\t\t)\n\t\t.map((entry) => normalizeLine(entry.summary ?? \"\"));\n\n\tconst unique: string[] = [];\n\tfor (let index = summaries.length - 1; index >= 0; index -= 1) {\n\t\tconst summary = summaries[index];\n\t\tif (!summary || unique.includes(summary)) {\n\t\t\tcontinue;\n\t\t}\n\t\tunique.unshift(summary);\n\t\tif (unique.length >= limit) {\n\t\t\tbreak;\n\t\t}\n\t}\n\treturn unique;\n}\n\nfunction collectRecentUserContext(\n\tentries: SessionEntry[],\n\tlimit = 4,\n): string[] {\n\tconst lines: string[] = [];\n\tfor (let index = entries.length - 1; index >= 0; index -= 1) {\n\t\tconst entry = entries[index];\n\t\tif (entry?.type !== \"message\" || entry.message.role !== \"user\") {\n\t\t\tcontinue;\n\t\t}\n\t\tconst text = normalizeLine(extractTextFromContent(entry.message.content));\n\t\tif (!text || lines.includes(text)) {\n\t\t\tcontinue;\n\t\t}\n\t\tlines.unshift(text);\n\t\tif (lines.length >= limit) {\n\t\t\tbreak;\n\t\t}\n\t}\n\treturn lines;\n}\n\nfunction hasMessageContent(content: unknown): boolean {\n\tif (typeof content === \"string\") {\n\t\treturn content.trim().length > 0;\n\t}\n\treturn Array.isArray(content) && content.length > 0;\n}\n\nexport function buildSessionMemoryContent(sessionPath: string): {\n\tcontent: string;\n\tsessionId: string;\n\tcwd?: string;\n\tmemoryExtractionHash?: string;\n\tassistantTurnCount: number;\n} | null {\n\tif (!existsSync(sessionPath)) {\n\t\treturn null;\n\t}\n\n\tconst stats = statSync(sessionPath);\n\tconst entries = safeReadSessionEntries(sessionPath, (error) => {\n\t\tlogger.warn(\"Failed to read session while building session memory\", {\n\t\t\tsessionPath,\n\t\t\terror: error instanceof Error ? error.message : String(error),\n\t\t});\n\t});\n\tconst info = buildSessionFileInfo(entries, stats);\n\tif (!info?.id || info.id === \"unknown\") {\n\t\treturn null;\n\t}\n\n\tconst currentState =\n\t\tinfo.resumeSummary?.trim() ||\n\t\tinfo.summary?.trim() ||\n\t\t\"Session is active, but no runtime summary has been saved yet.\";\n\tconst title =\n\t\tinfo.title?.trim() ||\n\t\tinfo.summary?.trim() ||\n\t\tinfo.subject?.trim() ||\n\t\tinfo.id;\n\tconst task =\n\t\tinfo.firstMessage.trim() ||\n\t\tinfo.subject?.trim() ||\n\t\t\"No explicit task has been captured for this session yet.\";\n\tconst worklog = collectSummaryHistory(entries);\n\tconst recentUserContext = collectRecentUserContext(entries);\n\n\tconst lines = [\n\t\t\"# Session Memory\",\n\t\t\"\",\n\t\t`- Session: ${title}`,\n\t\t`- Session ID: ${info.id}`,\n\t\t`- Created: ${info.created.toISOString()}`,\n\t\t`- Updated: ${stats.mtime.toISOString()}`,\n\t\t`- Messages: ${info.messageCount}`,\n\t];\n\n\tif (info.tags?.length) {\n\t\tlines.push(`- Tags: ${info.tags.join(\", \")}`);\n\t}\n\n\tlines.push(\"\", \"## Current State\", currentState, \"\", \"## Task\", task);\n\n\tif (recentUserContext.length > 0) {\n\t\tlines.push(\n\t\t\t\"\",\n\t\t\t\"## Recent User Context\",\n\t\t\t...recentUserContext.map((line) => `- ${line}`),\n\t\t);\n\t}\n\n\tif (worklog.length > 0) {\n\t\tlines.push(\"\", \"## Worklog\", ...worklog.map((line) => `- ${line}`));\n\t}\n\n\treturn {\n\t\tcontent: lines.join(\"\\n\").trim(),\n\t\tsessionId: info.id,\n\t\tcwd: info.cwd,\n\t\tmemoryExtractionHash: info.memoryExtractionHash,\n\t\tassistantTurnCount: info.messages.filter(\n\t\t\t(message) =>\n\t\t\t\tmessage.role === \"assistant\" && hasMessageContent(message.content),\n\t\t).length,\n\t};\n}\n\nexport function syncSessionMemory(sessionPath: string): MemoryEntry | null {\n\tconst built = buildSessionMemoryContent(sessionPath);\n\tif (!built) {\n\t\treturn null;\n\t}\n\n\treturn upsertScopedMemory(SESSION_MEMORY_TOPIC, built.content, {\n\t\tsessionId: built.sessionId,\n\t\ttags: [\"session\", \"summary\"],\n\t\tcwd: built.cwd,\n\t});\n}\n"]}
@@ -156,8 +156,7 @@ export interface SessionMigrationState {
156
156
  /** Total sessions processed */
157
157
  total: number;
158
158
  }
159
- export declare function parseSessionEntry(line: string): SessionEntry;
160
- export declare function tryParseSessionEntry(line: string): SessionEntry | null;
159
+ export { normalizeSessionEntry, normalizeStopReasonValue, parseSessionEntry, isSessionWireCompactionContextEntry, tryParseSessionEntry, } from "./wire-format.js";
161
160
  export declare function isSessionHeaderEntry(entry: SessionEntry): entry is SessionHeaderEntry;
162
161
  export declare function isSessionTreeEntry(entry: SessionEntry): entry is SessionTreeEntry;
163
162
  //# sourceMappingURL=types.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/session/types.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,UAAU,EAAE,YAAY,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAC;AAC/E,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,qBAAqB,CAAC;AAE1D,eAAO,MAAM,uBAAuB,IAAI,CAAC;AAEzC,MAAM,WAAW,oBAAoB;IACpC,QAAQ,EAAE,MAAM,CAAC;IACjB,OAAO,EAAE,MAAM,CAAC;IAChB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,SAAS,CAAC,EAAE,OAAO,CAAC;IACpB,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,MAAM,CAAC,EAAE,SAAS,GAAG,QAAQ,CAAC;CAC9B;AAED,MAAM,WAAW,eAAe;IAC/B,IAAI,EAAE,MAAM,CAAC;IACb,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,WAAW,CAAC,EAAE,MAAM,CAAC;CACrB;AAED,MAAM,WAAW,kBAAkB;IAClC,IAAI,EAAE,SAAS,CAAC;IAChB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,EAAE,EAAE,MAAM,CAAC;IACX,SAAS,EAAE,MAAM,CAAC;IAClB,GAAG,EAAE,MAAM,CAAC;IACZ,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,aAAa,CAAC,EAAE,oBAAoB,CAAC;IACrC,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,cAAc,CAAC,EAAE,cAAc,CAAC;IAChC,KAAK,CAAC,EAAE,eAAe,EAAE,CAAC;IAC1B,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,aAAa,CAAC,EAAE,MAAM,CAAC;CACvB;AAED,MAAM,WAAW,gBAAgB;IAChC,IAAI,EAAE,MAAM,CAAC;IACb,EAAE,EAAE,MAAM,CAAC;IACX,QAAQ,EAAE,MAAM,GAAG,IAAI,CAAC;IACxB,SAAS,EAAE,MAAM,CAAC;CAClB;AAED,MAAM,WAAW,mBAAoB,SAAQ,gBAAgB;IAC5D,IAAI,EAAE,SAAS,CAAC;IAChB,OAAO,EAAE,UAAU,CAAC;CACpB;AAED,MAAM,WAAW,wBAAwB;IACxC,IAAI,EAAE,oBAAoB,CAAC;IAC3B,SAAS,EAAE,MAAM,CAAC;IAClB,YAAY,EAAE,MAAM,CAAC;IACrB,aAAa,EAAE,MAAM,CAAC;CACtB;AAED,MAAM,WAAW,wBAAyB,SAAQ,gBAAgB;IACjE,IAAI,EAAE,uBAAuB,CAAC;IAC9B,aAAa,EAAE,MAAM,CAAC;CACtB;AAED,MAAM,WAAW,gBAAiB,SAAQ,gBAAgB;IACzD,IAAI,EAAE,cAAc,CAAC;IACrB,KAAK,EAAE,MAAM,CAAC;IACd,aAAa,CAAC,EAAE,oBAAoB,CAAC;CACrC;AAED,MAAM,WAAW,gBAAgB;IAChC,IAAI,EAAE,cAAc,CAAC;IACrB,SAAS,EAAE,MAAM,CAAC;IAClB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,oBAAoB,CAAC,EAAE,MAAM,CAAC;IAC9B,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,IAAI,CAAC,EAAE,MAAM,EAAE,CAAC;CAChB;AAED,MAAM,WAAW,eAAe,CAAC,CAAC,GAAG,OAAO,CAAE,SAAQ,gBAAgB;IACrE,IAAI,EAAE,YAAY,CAAC;IACnB,OAAO,EAAE,MAAM,CAAC;IAChB,gBAAgB,EAAE,MAAM,CAAC;IACzB,YAAY,EAAE,MAAM,CAAC;IACrB,OAAO,CAAC,EAAE,CAAC,CAAC;IACZ,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,IAAI,CAAC,EAAE,OAAO,CAAC;IACf,kBAAkB,CAAC,EAAE,MAAM,CAAC;IAC5B,6CAA6C;IAC7C,mBAAmB,CAAC,EAAE,MAAM,CAAC;CAC7B;AAED,MAAM,WAAW,kBAAkB,CAAC,CAAC,GAAG,OAAO,CAAE,SAAQ,gBAAgB;IACxE,IAAI,EAAE,gBAAgB,CAAC;IACvB,MAAM,EAAE,MAAM,CAAC;IACf,OAAO,EAAE,MAAM,CAAC;IAChB,OAAO,CAAC,EAAE,CAAC,CAAC;IACZ,QAAQ,CAAC,EAAE,OAAO,CAAC;CACnB;AAED,MAAM,WAAW,WAAW,CAAC,CAAC,GAAG,OAAO,CAAE,SAAQ,gBAAgB;IACjE,IAAI,EAAE,QAAQ,CAAC;IACf,UAAU,EAAE,MAAM,CAAC;IACnB,IAAI,CAAC,EAAE,CAAC,CAAC;CACT;AAED,MAAM,WAAW,kBAAkB,CAAC,CAAC,GAAG,OAAO,CAAE,SAAQ,gBAAgB;IACxE,IAAI,EAAE,gBAAgB,CAAC;IACvB,UAAU,EAAE,MAAM,CAAC;IACnB,OAAO,EAAE,MAAM,GAAG,CAAC,WAAW,GAAG,YAAY,CAAC,EAAE,CAAC;IACjD,OAAO,CAAC,EAAE,CAAC,CAAC;IACZ,OAAO,EAAE,OAAO,CAAC;CACjB;AAED,MAAM,WAAW,UAAW,SAAQ,gBAAgB;IACnD,IAAI,EAAE,OAAO,CAAC;IACd,QAAQ,EAAE,MAAM,CAAC;IACjB,KAAK,EAAE,MAAM,GAAG,SAAS,CAAC;CAC1B;AAED,MAAM,MAAM,gBAAgB,GACzB,mBAAmB,GACnB,wBAAwB,GACxB,gBAAgB,GAChB,eAAe,GACf,kBAAkB,GAClB,WAAW,GACX,kBAAkB,GAClB,UAAU,CAAC;AAEd,MAAM,MAAM,YAAY,GACrB,kBAAkB,GAClB,gBAAgB,GAChB,gBAAgB,GAChB,wBAAwB,CAAC;AAE5B,MAAM,WAAW,eAAe;IAC/B,KAAK,EAAE,gBAAgB,CAAC;IACxB,QAAQ,EAAE,eAAe,EAAE,CAAC;IAC5B,KAAK,CAAC,EAAE,MAAM,CAAC;CACf;AAED,MAAM,WAAW,eAAe;IAC/B,IAAI,EAAE,MAAM,CAAC;IACb,EAAE,EAAE,MAAM,CAAC;IACX,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,OAAO,EAAE,IAAI,CAAC;IACd,QAAQ,EAAE,IAAI,CAAC;IACf,IAAI,EAAE,MAAM,CAAC;IACb,YAAY,EAAE,MAAM,CAAC;IACrB,YAAY,EAAE,MAAM,CAAC;IACrB,OAAO,EAAE,MAAM,CAAC;IAChB,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,QAAQ,EAAE,OAAO,CAAC;IAClB,eAAe,EAAE,MAAM,CAAC;CACxB;AAED,MAAM,WAAW,cAAc;IAC9B,EAAE,EAAE,MAAM,CAAC;IACX,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,SAAS,EAAE,MAAM,CAAC;IAClB,SAAS,EAAE,MAAM,CAAC;IAClB,YAAY,EAAE,MAAM,CAAC;IACrB,QAAQ,EAAE,OAAO,CAAC;IAClB,IAAI,CAAC,EAAE,MAAM,EAAE,CAAC;CAChB;AAED;;;GAGG;AACH,MAAM,WAAW,qBAAqB;IACrC,qCAAqC;IACrC,OAAO,EAAE,MAAM,CAAC;IAChB,+CAA+C;IAC/C,OAAO,EAAE,MAAM,CAAC;IAChB,+CAA+C;IAC/C,SAAS,EAAE,MAAM,CAAC;IAClB,+CAA+C;IAC/C,QAAQ,EAAE,MAAM,CAAC;IACjB,qDAAqD;IACrD,UAAU,EAAE,MAAM,CAAC;IACnB,sDAAsD;IACtD,OAAO,EAAE,MAAM,CAAC;IAChB,+BAA+B;IAC/B,KAAK,EAAE,MAAM,CAAC;CACd;AAED,wBAAgB,iBAAiB,CAAC,IAAI,EAAE,MAAM,GAAG,YAAY,CAa5D;AAED,wBAAgB,oBAAoB,CAAC,IAAI,EAAE,MAAM,GAAG,YAAY,GAAG,IAAI,CAMtE;AAED,wBAAgB,oBAAoB,CACnC,KAAK,EAAE,YAAY,GACjB,KAAK,IAAI,kBAAkB,CAE7B;AAED,wBAAgB,kBAAkB,CACjC,KAAK,EAAE,YAAY,GACjB,KAAK,IAAI,gBAAgB,CAM3B"}
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/session/types.ts"],"names":[],"mappings":"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"}
@@ -1,26 +1,5 @@
1
1
  export const CURRENT_SESSION_VERSION = 2;
2
- export function parseSessionEntry(line) {
3
- const trimmed = line.trim();
4
- if (!trimmed) {
5
- throw new Error("Empty session entry");
6
- }
7
- const parsed = JSON.parse(trimmed);
8
- if (!parsed || typeof parsed !== "object") {
9
- throw new Error("Invalid session entry");
10
- }
11
- if (typeof parsed.type !== "string") {
12
- throw new Error("Session entry missing type");
13
- }
14
- return parsed;
15
- }
16
- export function tryParseSessionEntry(line) {
17
- try {
18
- return parseSessionEntry(line);
19
- }
20
- catch {
21
- return null;
22
- }
23
- }
2
+ export { normalizeSessionEntry, normalizeStopReasonValue, parseSessionEntry, isSessionWireCompactionContextEntry, tryParseSessionEntry, } from "./wire-format.js";
24
3
  export function isSessionHeaderEntry(entry) {
25
4
  return entry.type === "session";
26
5
  }
@@ -1 +1 @@
1
- {"version":3,"file":"types.js","sourceRoot":"","sources":["../../src/session/types.ts"],"names":[],"mappings":"AAGA,MAAM,CAAC,MAAM,uBAAuB,GAAG,CAAC,CAAC;AA6LzC,MAAM,UAAU,iBAAiB,CAAC,IAAY;IAC7C,MAAM,OAAO,GAAG,IAAI,CAAC,IAAI,EAAE,CAAC;IAC5B,IAAI,CAAC,OAAO,EAAE,CAAC;QACd,MAAM,IAAI,KAAK,CAAC,qBAAqB,CAAC,CAAC;IACxC,CAAC;IACD,MAAM,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,OAAO,CAAiB,CAAC;IACnD,IAAI,CAAC,MAAM,IAAI,OAAO,MAAM,KAAK,QAAQ,EAAE,CAAC;QAC3C,MAAM,IAAI,KAAK,CAAC,uBAAuB,CAAC,CAAC;IAC1C,CAAC;IACD,IAAI,OAAQ,MAA6B,CAAC,IAAI,KAAK,QAAQ,EAAE,CAAC;QAC7D,MAAM,IAAI,KAAK,CAAC,4BAA4B,CAAC,CAAC;IAC/C,CAAC;IACD,OAAO,MAAM,CAAC;AACf,CAAC;AAED,MAAM,UAAU,oBAAoB,CAAC,IAAY;IAChD,IAAI,CAAC;QACJ,OAAO,iBAAiB,CAAC,IAAI,CAAC,CAAC;IAChC,CAAC;IAAC,MAAM,CAAC;QACR,OAAO,IAAI,CAAC;IACb,CAAC;AACF,CAAC;AAED,MAAM,UAAU,oBAAoB,CACnC,KAAmB;IAEnB,OAAO,KAAK,CAAC,IAAI,KAAK,SAAS,CAAC;AACjC,CAAC;AAED,MAAM,UAAU,kBAAkB,CACjC,KAAmB;IAEnB,OAAO,CACN,KAAK,CAAC,IAAI,KAAK,SAAS;QACxB,KAAK,CAAC,IAAI,KAAK,cAAc;QAC7B,KAAK,CAAC,IAAI,KAAK,oBAAoB,CACnC,CAAC;AACH,CAAC","sourcesContent":["import type { AppMessage, ImageContent, TextContent } from \"../agent/types.js\";\nimport type { PromptMetadata } from \"../prompts/types.js\";\n\nexport const CURRENT_SESSION_VERSION = 2;\n\nexport interface SessionModelMetadata {\n\tprovider: string;\n\tmodelId: string;\n\tproviderName?: string;\n\tname?: string;\n\tbaseUrl?: string;\n\treasoning?: boolean;\n\tcontextWindow?: number;\n\tmaxTokens?: number;\n\tsource?: \"builtin\" | \"custom\";\n}\n\nexport interface SessionToolInfo {\n\tname: string;\n\tlabel?: string;\n\tdescription?: string;\n}\n\nexport interface SessionHeaderEntry {\n\ttype: \"session\";\n\tversion?: number;\n\tid: string;\n\ttimestamp: string;\n\tcwd: string;\n\tsubject?: string;\n\tmodel?: string;\n\tmodelMetadata?: SessionModelMetadata;\n\tthinkingLevel?: string;\n\tsystemPrompt?: string;\n\tpromptMetadata?: PromptMetadata;\n\ttools?: SessionToolInfo[];\n\tbranchedFrom?: string;\n\tparentSession?: string;\n}\n\nexport interface SessionEntryBase {\n\ttype: string;\n\tid: string;\n\tparentId: string | null;\n\ttimestamp: string;\n}\n\nexport interface SessionMessageEntry extends SessionEntryBase {\n\ttype: \"message\";\n\tmessage: AppMessage;\n}\n\nexport interface AttachmentExtractedEntry {\n\ttype: \"attachment_extract\";\n\ttimestamp: string;\n\tattachmentId: string;\n\textractedText: string;\n}\n\nexport interface ThinkingLevelChangeEntry extends SessionEntryBase {\n\ttype: \"thinking_level_change\";\n\tthinkingLevel: string;\n}\n\nexport interface ModelChangeEntry extends SessionEntryBase {\n\ttype: \"model_change\";\n\tmodel: string;\n\tmodelMetadata?: SessionModelMetadata;\n}\n\nexport interface SessionMetaEntry {\n\ttype: \"session_meta\";\n\ttimestamp: string;\n\tsummary?: string;\n\tresumeSummary?: string;\n\tmemoryExtractionHash?: string;\n\tfavorite?: boolean;\n\ttitle?: string;\n\ttags?: string[];\n}\n\nexport interface CompactionEntry<T = unknown> extends SessionEntryBase {\n\ttype: \"compaction\";\n\tsummary: string;\n\tfirstKeptEntryId: string;\n\ttokensBefore: number;\n\tdetails?: T;\n\tfromHook?: boolean;\n\tauto?: boolean;\n\tcustomInstructions?: string;\n\t/** Legacy compaction index (v1 sessions). */\n\tfirstKeptEntryIndex?: number;\n}\n\nexport interface BranchSummaryEntry<T = unknown> extends SessionEntryBase {\n\ttype: \"branch_summary\";\n\tfromId: string;\n\tsummary: string;\n\tdetails?: T;\n\tfromHook?: boolean;\n}\n\nexport interface CustomEntry<T = unknown> extends SessionEntryBase {\n\ttype: \"custom\";\n\tcustomType: string;\n\tdata?: T;\n}\n\nexport interface CustomMessageEntry<T = unknown> extends SessionEntryBase {\n\ttype: \"custom_message\";\n\tcustomType: string;\n\tcontent: string | (TextContent | ImageContent)[];\n\tdetails?: T;\n\tdisplay: boolean;\n}\n\nexport interface LabelEntry extends SessionEntryBase {\n\ttype: \"label\";\n\ttargetId: string;\n\tlabel: string | undefined;\n}\n\nexport type SessionTreeEntry =\n\t| SessionMessageEntry\n\t| ThinkingLevelChangeEntry\n\t| ModelChangeEntry\n\t| CompactionEntry\n\t| BranchSummaryEntry\n\t| CustomEntry\n\t| CustomMessageEntry\n\t| LabelEntry;\n\nexport type SessionEntry =\n\t| SessionHeaderEntry\n\t| SessionTreeEntry\n\t| SessionMetaEntry\n\t| AttachmentExtractedEntry;\n\nexport interface SessionTreeNode {\n\tentry: SessionTreeEntry;\n\tchildren: SessionTreeNode[];\n\tlabel?: string;\n}\n\nexport interface SessionMetadata {\n\tpath: string;\n\tid: string;\n\tsubject?: string;\n\tcreated: Date;\n\tmodified: Date;\n\tsize: number;\n\tmessageCount: number;\n\tfirstMessage: string;\n\tsummary: string;\n\tresumeSummary?: string;\n\tfavorite: boolean;\n\tallMessagesText: string;\n}\n\nexport interface SessionSummary {\n\tid: string;\n\tsubject?: string;\n\ttitle?: string;\n\tresumeSummary?: string;\n\tcreatedAt: string;\n\tupdatedAt: string;\n\tmessageCount: number;\n\tfavorite: boolean;\n\ttags?: string[];\n}\n\n/**\n * Tracks the state of session migrations across the session directory.\n * Persisted to disk to avoid re-running migrations on every startup.\n */\nexport interface SessionMigrationState {\n\t/** Migration version that was run */\n\tversion: number;\n\t/** ISO timestamp of when migration last ran */\n\tlastRun: string;\n\t/** Number of sessions successfully migrated */\n\tsuccesses: number;\n\t/** Number of sessions that failed migration */\n\tfailures: number;\n\t/** Number of sessions that required normalization */\n\tnormalized: number;\n\t/** Number of sessions skipped (already up to date) */\n\tskipped: number;\n\t/** Total sessions processed */\n\ttotal: number;\n}\n\nexport function parseSessionEntry(line: string): SessionEntry {\n\tconst trimmed = line.trim();\n\tif (!trimmed) {\n\t\tthrow new Error(\"Empty session entry\");\n\t}\n\tconst parsed = JSON.parse(trimmed) as SessionEntry;\n\tif (!parsed || typeof parsed !== \"object\") {\n\t\tthrow new Error(\"Invalid session entry\");\n\t}\n\tif (typeof (parsed as { type?: unknown }).type !== \"string\") {\n\t\tthrow new Error(\"Session entry missing type\");\n\t}\n\treturn parsed;\n}\n\nexport function tryParseSessionEntry(line: string): SessionEntry | null {\n\ttry {\n\t\treturn parseSessionEntry(line);\n\t} catch {\n\t\treturn null;\n\t}\n}\n\nexport function isSessionHeaderEntry(\n\tentry: SessionEntry,\n): entry is SessionHeaderEntry {\n\treturn entry.type === \"session\";\n}\n\nexport function isSessionTreeEntry(\n\tentry: SessionEntry,\n): entry is SessionTreeEntry {\n\treturn (\n\t\tentry.type !== \"session\" &&\n\t\tentry.type !== \"session_meta\" &&\n\t\tentry.type !== \"attachment_extract\"\n\t);\n}\n"]}
1
+ {"version":3,"file":"types.js","sourceRoot":"","sources":["../../src/session/types.ts"],"names":[],"mappings":"AAGA,MAAM,CAAC,MAAM,uBAAuB,GAAG,CAAC,CAAC;AA6LzC,OAAO,EACN,qBAAqB,EACrB,wBAAwB,EACxB,iBAAiB,EACjB,mCAAmC,EACnC,oBAAoB,GACpB,MAAM,kBAAkB,CAAC;AAE1B,MAAM,UAAU,oBAAoB,CACnC,KAAmB;IAEnB,OAAO,KAAK,CAAC,IAAI,KAAK,SAAS,CAAC;AACjC,CAAC;AAED,MAAM,UAAU,kBAAkB,CACjC,KAAmB;IAEnB,OAAO,CACN,KAAK,CAAC,IAAI,KAAK,SAAS;QACxB,KAAK,CAAC,IAAI,KAAK,cAAc;QAC7B,KAAK,CAAC,IAAI,KAAK,oBAAoB,CACnC,CAAC;AACH,CAAC","sourcesContent":["import type { AppMessage, ImageContent, TextContent } from \"../agent/types.js\";\nimport type { PromptMetadata } from \"../prompts/types.js\";\n\nexport const CURRENT_SESSION_VERSION = 2;\n\nexport interface SessionModelMetadata {\n\tprovider: string;\n\tmodelId: string;\n\tproviderName?: string;\n\tname?: string;\n\tbaseUrl?: string;\n\treasoning?: boolean;\n\tcontextWindow?: number;\n\tmaxTokens?: number;\n\tsource?: \"builtin\" | \"custom\";\n}\n\nexport interface SessionToolInfo {\n\tname: string;\n\tlabel?: string;\n\tdescription?: string;\n}\n\nexport interface SessionHeaderEntry {\n\ttype: \"session\";\n\tversion?: number;\n\tid: string;\n\ttimestamp: string;\n\tcwd: string;\n\tsubject?: string;\n\tmodel?: string;\n\tmodelMetadata?: SessionModelMetadata;\n\tthinkingLevel?: string;\n\tsystemPrompt?: string;\n\tpromptMetadata?: PromptMetadata;\n\ttools?: SessionToolInfo[];\n\tbranchedFrom?: string;\n\tparentSession?: string;\n}\n\nexport interface SessionEntryBase {\n\ttype: string;\n\tid: string;\n\tparentId: string | null;\n\ttimestamp: string;\n}\n\nexport interface SessionMessageEntry extends SessionEntryBase {\n\ttype: \"message\";\n\tmessage: AppMessage;\n}\n\nexport interface AttachmentExtractedEntry {\n\ttype: \"attachment_extract\";\n\ttimestamp: string;\n\tattachmentId: string;\n\textractedText: string;\n}\n\nexport interface ThinkingLevelChangeEntry extends SessionEntryBase {\n\ttype: \"thinking_level_change\";\n\tthinkingLevel: string;\n}\n\nexport interface ModelChangeEntry extends SessionEntryBase {\n\ttype: \"model_change\";\n\tmodel: string;\n\tmodelMetadata?: SessionModelMetadata;\n}\n\nexport interface SessionMetaEntry {\n\ttype: \"session_meta\";\n\ttimestamp: string;\n\tsummary?: string;\n\tresumeSummary?: string;\n\tmemoryExtractionHash?: string;\n\tfavorite?: boolean;\n\ttitle?: string;\n\ttags?: string[];\n}\n\nexport interface CompactionEntry<T = unknown> extends SessionEntryBase {\n\ttype: \"compaction\";\n\tsummary: string;\n\tfirstKeptEntryId: string;\n\ttokensBefore: number;\n\tdetails?: T;\n\tfromHook?: boolean;\n\tauto?: boolean;\n\tcustomInstructions?: string;\n\t/** Legacy compaction index (v1 sessions). */\n\tfirstKeptEntryIndex?: number;\n}\n\nexport interface BranchSummaryEntry<T = unknown> extends SessionEntryBase {\n\ttype: \"branch_summary\";\n\tfromId: string;\n\tsummary: string;\n\tdetails?: T;\n\tfromHook?: boolean;\n}\n\nexport interface CustomEntry<T = unknown> extends SessionEntryBase {\n\ttype: \"custom\";\n\tcustomType: string;\n\tdata?: T;\n}\n\nexport interface CustomMessageEntry<T = unknown> extends SessionEntryBase {\n\ttype: \"custom_message\";\n\tcustomType: string;\n\tcontent: string | (TextContent | ImageContent)[];\n\tdetails?: T;\n\tdisplay: boolean;\n}\n\nexport interface LabelEntry extends SessionEntryBase {\n\ttype: \"label\";\n\ttargetId: string;\n\tlabel: string | undefined;\n}\n\nexport type SessionTreeEntry =\n\t| SessionMessageEntry\n\t| ThinkingLevelChangeEntry\n\t| ModelChangeEntry\n\t| CompactionEntry\n\t| BranchSummaryEntry\n\t| CustomEntry\n\t| CustomMessageEntry\n\t| LabelEntry;\n\nexport type SessionEntry =\n\t| SessionHeaderEntry\n\t| SessionTreeEntry\n\t| SessionMetaEntry\n\t| AttachmentExtractedEntry;\n\nexport interface SessionTreeNode {\n\tentry: SessionTreeEntry;\n\tchildren: SessionTreeNode[];\n\tlabel?: string;\n}\n\nexport interface SessionMetadata {\n\tpath: string;\n\tid: string;\n\tsubject?: string;\n\tcreated: Date;\n\tmodified: Date;\n\tsize: number;\n\tmessageCount: number;\n\tfirstMessage: string;\n\tsummary: string;\n\tresumeSummary?: string;\n\tfavorite: boolean;\n\tallMessagesText: string;\n}\n\nexport interface SessionSummary {\n\tid: string;\n\tsubject?: string;\n\ttitle?: string;\n\tresumeSummary?: string;\n\tcreatedAt: string;\n\tupdatedAt: string;\n\tmessageCount: number;\n\tfavorite: boolean;\n\ttags?: string[];\n}\n\n/**\n * Tracks the state of session migrations across the session directory.\n * Persisted to disk to avoid re-running migrations on every startup.\n */\nexport interface SessionMigrationState {\n\t/** Migration version that was run */\n\tversion: number;\n\t/** ISO timestamp of when migration last ran */\n\tlastRun: string;\n\t/** Number of sessions successfully migrated */\n\tsuccesses: number;\n\t/** Number of sessions that failed migration */\n\tfailures: number;\n\t/** Number of sessions that required normalization */\n\tnormalized: number;\n\t/** Number of sessions skipped (already up to date) */\n\tskipped: number;\n\t/** Total sessions processed */\n\ttotal: number;\n}\n\nexport {\n\tnormalizeSessionEntry,\n\tnormalizeStopReasonValue,\n\tparseSessionEntry,\n\tisSessionWireCompactionContextEntry,\n\ttryParseSessionEntry,\n} from \"./wire-format.js\";\n\nexport function isSessionHeaderEntry(\n\tentry: SessionEntry,\n): entry is SessionHeaderEntry {\n\treturn entry.type === \"session\";\n}\n\nexport function isSessionTreeEntry(\n\tentry: SessionEntry,\n): entry is SessionTreeEntry {\n\treturn (\n\t\tentry.type !== \"session\" &&\n\t\tentry.type !== \"session_meta\" &&\n\t\tentry.type !== \"attachment_extract\"\n\t);\n}\n"]}
@@ -0,0 +1,7 @@
1
+ import type { SessionEntry } from "./types.js";
2
+ export declare function normalizeStopReasonValue(value: unknown): unknown;
3
+ export declare function normalizeSessionEntry(entry: unknown): SessionEntry | null;
4
+ export declare function isSessionWireCompactionContextEntry(entry: unknown): boolean;
5
+ export declare function parseSessionEntry(line: string): SessionEntry;
6
+ export declare function tryParseSessionEntry(line: string): SessionEntry | null;
7
+ //# sourceMappingURL=wire-format.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"wire-format.d.ts","sourceRoot":"","sources":["../../src/session/wire-format.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,YAAY,CAAC;AA2C/C,wBAAgB,wBAAwB,CAAC,KAAK,EAAE,OAAO,GAAG,OAAO,CAGhE;AAmCD,wBAAgB,qBAAqB,CAAC,KAAK,EAAE,OAAO,GAAG,YAAY,GAAG,IAAI,CAiDzE;AAED,wBAAgB,mCAAmC,CAAC,KAAK,EAAE,OAAO,GAAG,OAAO,CAmB3E;AAED,wBAAgB,iBAAiB,CAAC,IAAI,EAAE,MAAM,GAAG,YAAY,CAU5D;AAED,wBAAgB,oBAAoB,CAAC,IAAI,EAAE,MAAM,GAAG,YAAY,GAAG,IAAI,CAMtE"}
@@ -0,0 +1,95 @@
1
+ /**
2
+ * Auto-generated by `scripts/session-wire-format-codegen.mjs`.
3
+ * Do not edit manually; update `src/session/wire-format.manifest.json` instead.
4
+ */
5
+ export declare const sessionWireFormatVersion: "session-wire-format.v1";
6
+ export declare const sessionWireStopReasonAliases: {
7
+ readonly tool_use: "toolUse";
8
+ readonly tool_calls: "toolUse";
9
+ readonly max_tokens: "length";
10
+ readonly end_turn: "stop";
11
+ readonly stop_sequence: "stop";
12
+ };
13
+ export declare const sessionWireFieldAliases: {
14
+ readonly modelMetadata: {
15
+ readonly model_id: "modelId";
16
+ readonly provider_name: "providerName";
17
+ readonly base_url: "baseUrl";
18
+ readonly context_window: "contextWindow";
19
+ readonly max_tokens: "maxTokens";
20
+ };
21
+ readonly session: {
22
+ readonly model_metadata: "modelMetadata";
23
+ readonly thinking_level: "thinkingLevel";
24
+ readonly system_prompt: "systemPrompt";
25
+ readonly prompt_metadata: "promptMetadata";
26
+ readonly branched_from: "branchedFrom";
27
+ readonly parent_session: "parentSession";
28
+ };
29
+ readonly sessionMeta: {
30
+ readonly resume_summary: "resumeSummary";
31
+ readonly memory_extraction_hash: "memoryExtractionHash";
32
+ };
33
+ readonly attachmentExtract: {
34
+ readonly attachment_id: "attachmentId";
35
+ readonly extracted_text: "extractedText";
36
+ };
37
+ readonly assistantMessage: {
38
+ readonly stop_reason: "stopReason";
39
+ };
40
+ readonly toolResultMessage: {
41
+ readonly tool_call_id: "toolCallId";
42
+ readonly tool_name: "toolName";
43
+ readonly is_error: "isError";
44
+ };
45
+ readonly thinkingLevelChange: {
46
+ readonly thinking_level: "thinkingLevel";
47
+ };
48
+ readonly modelChange: {
49
+ readonly model_metadata: "modelMetadata";
50
+ };
51
+ readonly compaction: {
52
+ readonly first_kept_entry_id: "firstKeptEntryId";
53
+ readonly first_kept_entry_index: "firstKeptEntryIndex";
54
+ readonly tokens_before: "tokensBefore";
55
+ readonly custom_instructions: "customInstructions";
56
+ };
57
+ readonly branchSummary: {
58
+ readonly from_id: "fromId";
59
+ readonly from_hook: "fromHook";
60
+ };
61
+ readonly custom: {
62
+ readonly custom_type: "customType";
63
+ };
64
+ readonly customMessage: {
65
+ readonly custom_type: "customType";
66
+ };
67
+ readonly label: {
68
+ readonly target_id: "targetId";
69
+ };
70
+ };
71
+ export declare const sessionWireContentBlockTypeAliases: {
72
+ readonly tool_call: "toolCall";
73
+ };
74
+ export declare const sessionWireContentBlockFieldAliases: {
75
+ readonly toolCall: {
76
+ readonly args: "arguments";
77
+ };
78
+ readonly thinking: {
79
+ readonly text: "thinking";
80
+ readonly signature: "thinkingSignature";
81
+ };
82
+ };
83
+ export declare const sessionWireCompactionContextEntryTypes: readonly ["message", "custom_message", "branch_summary"];
84
+ export declare const sessionWireCompactionContextExcludedMessageRoles: readonly ["toolResult"];
85
+ export declare function canonicalSessionWireStopReason(reason: string): string;
86
+ export declare function canonicalSessionWireContentBlockType(type: string): string;
87
+ export declare function getSessionWireContentBlockFieldAliases(type: string): {
88
+ readonly args: "arguments";
89
+ } | {
90
+ readonly text: "thinking";
91
+ readonly signature: "thinkingSignature";
92
+ } | undefined;
93
+ export declare function isSessionWireCompactionContextEntryType(type: string): boolean;
94
+ export declare function isSessionWireCompactionExcludedMessageRole(role: string): boolean;
95
+ //# sourceMappingURL=wire-format.generated.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"wire-format.generated.d.ts","sourceRoot":"","sources":["../../src/session/wire-format.generated.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,eAAO,MAAM,wBAAwB,EAAG,wBAAiC,CAAC;AAE1E,eAAO,MAAM,4BAA4B;;;;;;CAM/B,CAAC;AAEX,eAAO,MAAM,uBAAuB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAyD1B,CAAC;AAEX,eAAO,MAAM,kCAAkC;;CAErC,CAAC;AAEX,eAAO,MAAM,mCAAmC;;;;;;;;CAQtC,CAAC;AAEX,eAAO,MAAM,sCAAsC,0DAIzC,CAAC;AAEX,eAAO,MAAM,gDAAgD,yBAEnD,CAAC;AAaX,wBAAgB,8BAA8B,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,CAErE;AAED,wBAAgB,oCAAoC,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAEzE;AAED,wBAAgB,sCAAsC,CAAC,IAAI,EAAE,MAAM;;;;;cAElE;AAED,wBAAgB,uCAAuC,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAI7E;AAED,wBAAgB,0CAA0C,CACzD,IAAI,EAAE,MAAM,GACV,OAAO,CAIT"}
@@ -0,0 +1,111 @@
1
+ /**
2
+ * Auto-generated by `scripts/session-wire-format-codegen.mjs`.
3
+ * Do not edit manually; update `src/session/wire-format.manifest.json` instead.
4
+ */
5
+ export const sessionWireFormatVersion = "session-wire-format.v1";
6
+ export const sessionWireStopReasonAliases = {
7
+ tool_use: "toolUse",
8
+ tool_calls: "toolUse",
9
+ max_tokens: "length",
10
+ end_turn: "stop",
11
+ stop_sequence: "stop",
12
+ };
13
+ export const sessionWireFieldAliases = {
14
+ modelMetadata: {
15
+ model_id: "modelId",
16
+ provider_name: "providerName",
17
+ base_url: "baseUrl",
18
+ context_window: "contextWindow",
19
+ max_tokens: "maxTokens",
20
+ },
21
+ session: {
22
+ model_metadata: "modelMetadata",
23
+ thinking_level: "thinkingLevel",
24
+ system_prompt: "systemPrompt",
25
+ prompt_metadata: "promptMetadata",
26
+ branched_from: "branchedFrom",
27
+ parent_session: "parentSession",
28
+ },
29
+ sessionMeta: {
30
+ resume_summary: "resumeSummary",
31
+ memory_extraction_hash: "memoryExtractionHash",
32
+ },
33
+ attachmentExtract: {
34
+ attachment_id: "attachmentId",
35
+ extracted_text: "extractedText",
36
+ },
37
+ assistantMessage: {
38
+ stop_reason: "stopReason",
39
+ },
40
+ toolResultMessage: {
41
+ tool_call_id: "toolCallId",
42
+ tool_name: "toolName",
43
+ is_error: "isError",
44
+ },
45
+ thinkingLevelChange: {
46
+ thinking_level: "thinkingLevel",
47
+ },
48
+ modelChange: {
49
+ model_metadata: "modelMetadata",
50
+ },
51
+ compaction: {
52
+ first_kept_entry_id: "firstKeptEntryId",
53
+ first_kept_entry_index: "firstKeptEntryIndex",
54
+ tokens_before: "tokensBefore",
55
+ custom_instructions: "customInstructions",
56
+ },
57
+ branchSummary: {
58
+ from_id: "fromId",
59
+ from_hook: "fromHook",
60
+ },
61
+ custom: {
62
+ custom_type: "customType",
63
+ },
64
+ customMessage: {
65
+ custom_type: "customType",
66
+ },
67
+ label: {
68
+ target_id: "targetId",
69
+ },
70
+ };
71
+ export const sessionWireContentBlockTypeAliases = {
72
+ tool_call: "toolCall",
73
+ };
74
+ export const sessionWireContentBlockFieldAliases = {
75
+ toolCall: {
76
+ args: "arguments",
77
+ },
78
+ thinking: {
79
+ text: "thinking",
80
+ signature: "thinkingSignature",
81
+ },
82
+ };
83
+ export const sessionWireCompactionContextEntryTypes = [
84
+ "message",
85
+ "custom_message",
86
+ "branch_summary",
87
+ ];
88
+ export const sessionWireCompactionContextExcludedMessageRoles = [
89
+ "toolResult",
90
+ ];
91
+ function getSessionWireAlias(aliases, key) {
92
+ return Object.prototype.hasOwnProperty.call(aliases, key)
93
+ ? aliases[key]
94
+ : undefined;
95
+ }
96
+ export function canonicalSessionWireStopReason(reason) {
97
+ return getSessionWireAlias(sessionWireStopReasonAliases, reason) ?? reason;
98
+ }
99
+ export function canonicalSessionWireContentBlockType(type) {
100
+ return getSessionWireAlias(sessionWireContentBlockTypeAliases, type) ?? type;
101
+ }
102
+ export function getSessionWireContentBlockFieldAliases(type) {
103
+ return getSessionWireAlias(sessionWireContentBlockFieldAliases, type);
104
+ }
105
+ export function isSessionWireCompactionContextEntryType(type) {
106
+ return sessionWireCompactionContextEntryTypes.includes(type);
107
+ }
108
+ export function isSessionWireCompactionExcludedMessageRole(role) {
109
+ return sessionWireCompactionContextExcludedMessageRoles.includes(role);
110
+ }
111
+ //# sourceMappingURL=wire-format.generated.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"wire-format.generated.js","sourceRoot":"","sources":["../../src/session/wire-format.generated.ts"],"names":[],"mappings":"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","sourcesContent":["/**\n * Auto-generated by `scripts/session-wire-format-codegen.mjs`.\n * Do not edit manually; update `src/session/wire-format.manifest.json` instead.\n */\n\nexport const sessionWireFormatVersion = \"session-wire-format.v1\" as const;\n\nexport const sessionWireStopReasonAliases = {\n\ttool_use: \"toolUse\",\n\ttool_calls: \"toolUse\",\n\tmax_tokens: \"length\",\n\tend_turn: \"stop\",\n\tstop_sequence: \"stop\",\n} as const;\n\nexport const sessionWireFieldAliases = {\n\tmodelMetadata: {\n\t\tmodel_id: \"modelId\",\n\t\tprovider_name: \"providerName\",\n\t\tbase_url: \"baseUrl\",\n\t\tcontext_window: \"contextWindow\",\n\t\tmax_tokens: \"maxTokens\",\n\t},\n\tsession: {\n\t\tmodel_metadata: \"modelMetadata\",\n\t\tthinking_level: \"thinkingLevel\",\n\t\tsystem_prompt: \"systemPrompt\",\n\t\tprompt_metadata: \"promptMetadata\",\n\t\tbranched_from: \"branchedFrom\",\n\t\tparent_session: \"parentSession\",\n\t},\n\tsessionMeta: {\n\t\tresume_summary: \"resumeSummary\",\n\t\tmemory_extraction_hash: \"memoryExtractionHash\",\n\t},\n\tattachmentExtract: {\n\t\tattachment_id: \"attachmentId\",\n\t\textracted_text: \"extractedText\",\n\t},\n\tassistantMessage: {\n\t\tstop_reason: \"stopReason\",\n\t},\n\ttoolResultMessage: {\n\t\ttool_call_id: \"toolCallId\",\n\t\ttool_name: \"toolName\",\n\t\tis_error: \"isError\",\n\t},\n\tthinkingLevelChange: {\n\t\tthinking_level: \"thinkingLevel\",\n\t},\n\tmodelChange: {\n\t\tmodel_metadata: \"modelMetadata\",\n\t},\n\tcompaction: {\n\t\tfirst_kept_entry_id: \"firstKeptEntryId\",\n\t\tfirst_kept_entry_index: \"firstKeptEntryIndex\",\n\t\ttokens_before: \"tokensBefore\",\n\t\tcustom_instructions: \"customInstructions\",\n\t},\n\tbranchSummary: {\n\t\tfrom_id: \"fromId\",\n\t\tfrom_hook: \"fromHook\",\n\t},\n\tcustom: {\n\t\tcustom_type: \"customType\",\n\t},\n\tcustomMessage: {\n\t\tcustom_type: \"customType\",\n\t},\n\tlabel: {\n\t\ttarget_id: \"targetId\",\n\t},\n} as const;\n\nexport const sessionWireContentBlockTypeAliases = {\n\ttool_call: \"toolCall\",\n} as const;\n\nexport const sessionWireContentBlockFieldAliases = {\n\ttoolCall: {\n\t\targs: \"arguments\",\n\t},\n\tthinking: {\n\t\ttext: \"thinking\",\n\t\tsignature: \"thinkingSignature\",\n\t},\n} as const;\n\nexport const sessionWireCompactionContextEntryTypes = [\n\t\"message\",\n\t\"custom_message\",\n\t\"branch_summary\",\n] as const;\n\nexport const sessionWireCompactionContextExcludedMessageRoles = [\n\t\"toolResult\",\n] as const;\n\ntype SessionWireAliasSource = Readonly<Record<string, unknown>>;\n\nfunction getSessionWireAlias<T extends SessionWireAliasSource>(\n\taliases: T,\n\tkey: string,\n): T[keyof T] | undefined {\n\treturn Object.prototype.hasOwnProperty.call(aliases, key)\n\t\t? aliases[key as keyof T]\n\t\t: undefined;\n}\n\nexport function canonicalSessionWireStopReason(reason: string): string {\n\treturn getSessionWireAlias(sessionWireStopReasonAliases, reason) ?? reason;\n}\n\nexport function canonicalSessionWireContentBlockType(type: string): string {\n\treturn getSessionWireAlias(sessionWireContentBlockTypeAliases, type) ?? type;\n}\n\nexport function getSessionWireContentBlockFieldAliases(type: string) {\n\treturn getSessionWireAlias(sessionWireContentBlockFieldAliases, type);\n}\n\nexport function isSessionWireCompactionContextEntryType(type: string): boolean {\n\treturn sessionWireCompactionContextEntryTypes.includes(\n\t\ttype as (typeof sessionWireCompactionContextEntryTypes)[number],\n\t);\n}\n\nexport function isSessionWireCompactionExcludedMessageRole(\n\trole: string,\n): boolean {\n\treturn sessionWireCompactionContextExcludedMessageRoles.includes(\n\t\trole as (typeof sessionWireCompactionContextExcludedMessageRoles)[number],\n\t);\n}\n"]}