@aibyzero/byz 0.0.0 → 0.1.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (1215) hide show
  1. package/CHANGELOG.md +15 -0
  2. package/LICENSE +21 -0
  3. package/README.md +148 -5
  4. package/dist/cli.js +55 -0
  5. package/dist/runtime/bun/cli.d.ts +3 -0
  6. package/dist/runtime/bun/cli.d.ts.map +1 -0
  7. package/dist/runtime/bun/cli.js +11 -0
  8. package/dist/runtime/bun/cli.js.map +1 -0
  9. package/dist/runtime/bun/register-bedrock.d.ts +2 -0
  10. package/dist/runtime/bun/register-bedrock.d.ts.map +1 -0
  11. package/dist/runtime/bun/register-bedrock.js +4 -0
  12. package/dist/runtime/bun/register-bedrock.js.map +1 -0
  13. package/dist/runtime/bun/restore-sandbox-env.d.ts +17 -0
  14. package/dist/runtime/bun/restore-sandbox-env.d.ts.map +1 -0
  15. package/dist/runtime/bun/restore-sandbox-env.js +36 -0
  16. package/dist/runtime/bun/restore-sandbox-env.js.map +1 -0
  17. package/dist/runtime/bundle/chunks/anthropic-messages-JWX2WP65.js +45 -0
  18. package/dist/runtime/bundle/chunks/anthropic.js +75 -0
  19. package/dist/runtime/bundle/chunks/azure-openai-responses-5ENVCQ7U.js +2 -0
  20. package/dist/runtime/bundle/chunks/bedrock-converse-stream.js +74 -0
  21. package/dist/runtime/bundle/chunks/chunk-4L3WN2XY.js +2 -0
  22. package/dist/runtime/bundle/chunks/chunk-6CYCI3EJ.js +12 -0
  23. package/dist/runtime/bundle/chunks/chunk-6R7UI4IY.js +2 -0
  24. package/dist/runtime/bundle/chunks/chunk-AXIIZGTV.js +2 -0
  25. package/dist/runtime/bundle/chunks/chunk-CCRJHU72.js +1547 -0
  26. package/dist/runtime/bundle/chunks/chunk-DRQDKNXA.js +2 -0
  27. package/dist/runtime/bundle/chunks/chunk-GMWCTUPB.js +2 -0
  28. package/dist/runtime/bundle/chunks/chunk-GPPBJGBU.js +50 -0
  29. package/dist/runtime/bundle/chunks/chunk-JUUC5AZY.js +2 -0
  30. package/dist/runtime/bundle/chunks/chunk-L2ZPNLYD.js +2 -0
  31. package/dist/runtime/bundle/chunks/chunk-MNAIPA3J.js +2 -0
  32. package/dist/runtime/bundle/chunks/chunk-NBBFIJUL.js +11 -0
  33. package/dist/runtime/bundle/chunks/chunk-NUHFSC37.js +25 -0
  34. package/dist/runtime/bundle/chunks/chunk-PGXDEOVV.js +2 -0
  35. package/dist/runtime/bundle/chunks/chunk-PJACZCIR.js +2 -0
  36. package/dist/runtime/bundle/chunks/chunk-PRRNXB7S.js +2 -0
  37. package/dist/runtime/bundle/chunks/chunk-TEPMHNKQ.js +2 -0
  38. package/dist/runtime/bundle/chunks/chunk-TRDNDS6A.js +4 -0
  39. package/dist/runtime/bundle/chunks/chunk-UAQELI3K.js +2 -0
  40. package/dist/runtime/bundle/chunks/chunk-XDUWOHPL.js +6 -0
  41. package/dist/runtime/bundle/chunks/chunk-XNGRGP62.js +2 -0
  42. package/dist/runtime/bundle/chunks/dist-RDWOYWHR.js +13 -0
  43. package/dist/runtime/bundle/chunks/github-copilot.js +2 -0
  44. package/dist/runtime/bundle/chunks/google-generative-ai-XDKMGBCJ.js +2 -0
  45. package/dist/runtime/bundle/chunks/google-vertex-D5FGEO3Y.js +2 -0
  46. package/dist/runtime/bundle/chunks/image-resize-worker.js +2 -0
  47. package/dist/runtime/bundle/chunks/kimi-coding.js +2 -0
  48. package/dist/runtime/bundle/chunks/lib-HGQMNYVT.js +9 -0
  49. package/dist/runtime/bundle/chunks/mistral-conversations-YK73UAOZ.js +5 -0
  50. package/dist/runtime/bundle/chunks/multipart-parser-SQ6GDJL7.js +3 -0
  51. package/dist/runtime/bundle/chunks/openai-codex-responses-GJVBJXLB.js +8 -0
  52. package/dist/runtime/bundle/chunks/openai-codex.js +75 -0
  53. package/dist/runtime/bundle/chunks/openai-completions-XGHMB3UO.js +7 -0
  54. package/dist/runtime/bundle/chunks/openai-responses-BSOJMSEV.js +2 -0
  55. package/dist/runtime/bundle/chunks/openrouter-images-N4XVVFSD.js +2 -0
  56. package/dist/runtime/bundle/chunks/openrouter.js +75 -0
  57. package/dist/runtime/bundle/chunks/pi-messages-TPFH44NP.js +8 -0
  58. package/dist/runtime/bundle/chunks/radius.js +75 -0
  59. package/dist/runtime/bundle/chunks/src-UK77SYZE.js +4 -0
  60. package/dist/runtime/bundle/chunks/xai.js +2 -0
  61. package/dist/runtime/bundle/cli.js +3 -0
  62. package/dist/runtime/bundle/client.js +2 -0
  63. package/dist/runtime/bundle/index.js +2 -0
  64. package/dist/runtime/bundle/rpc-entry.js +3 -0
  65. package/dist/runtime/cli/args.d.ts +61 -0
  66. package/dist/runtime/cli/args.d.ts.map +1 -0
  67. package/dist/runtime/cli/args.js +439 -0
  68. package/dist/runtime/cli/args.js.map +1 -0
  69. package/dist/runtime/cli/auth-check.d.ts +19 -0
  70. package/dist/runtime/cli/auth-check.d.ts.map +1 -0
  71. package/dist/runtime/cli/auth-check.js +50 -0
  72. package/dist/runtime/cli/auth-check.js.map +1 -0
  73. package/dist/runtime/cli/auth-command.d.ts +24 -0
  74. package/dist/runtime/cli/auth-command.d.ts.map +1 -0
  75. package/dist/runtime/cli/auth-command.js +103 -0
  76. package/dist/runtime/cli/auth-command.js.map +1 -0
  77. package/dist/runtime/cli/config-selector.d.ts +16 -0
  78. package/dist/runtime/cli/config-selector.d.ts.map +1 -0
  79. package/dist/runtime/cli/config-selector.js +31 -0
  80. package/dist/runtime/cli/config-selector.js.map +1 -0
  81. package/dist/runtime/cli/credential-print.d.ts +13 -0
  82. package/dist/runtime/cli/credential-print.d.ts.map +1 -0
  83. package/dist/runtime/cli/credential-print.js +76 -0
  84. package/dist/runtime/cli/credential-print.js.map +1 -0
  85. package/dist/runtime/cli/experimental/auth.d.ts +16 -0
  86. package/dist/runtime/cli/experimental/auth.d.ts.map +1 -0
  87. package/dist/runtime/cli/experimental/auth.js +13 -0
  88. package/dist/runtime/cli/experimental/auth.js.map +1 -0
  89. package/dist/runtime/cli/experimental/cli.d.ts +6 -0
  90. package/dist/runtime/cli/experimental/cli.d.ts.map +1 -0
  91. package/dist/runtime/cli/experimental/cli.js +5 -0
  92. package/dist/runtime/cli/experimental/cli.js.map +1 -0
  93. package/dist/runtime/cli/experimental/command-options.d.ts +17 -0
  94. package/dist/runtime/cli/experimental/command-options.d.ts.map +1 -0
  95. package/dist/runtime/cli/experimental/command-options.js +35 -0
  96. package/dist/runtime/cli/experimental/command-options.js.map +1 -0
  97. package/dist/runtime/cli/experimental/command.d.ts +63 -0
  98. package/dist/runtime/cli/experimental/command.d.ts.map +1 -0
  99. package/dist/runtime/cli/experimental/command.js +130 -0
  100. package/dist/runtime/cli/experimental/command.js.map +1 -0
  101. package/dist/runtime/cli/experimental/commands/client.d.ts +13 -0
  102. package/dist/runtime/cli/experimental/commands/client.d.ts.map +1 -0
  103. package/dist/runtime/cli/experimental/commands/client.js +25 -0
  104. package/dist/runtime/cli/experimental/commands/client.js.map +1 -0
  105. package/dist/runtime/cli/experimental/commands/pi.d.ts +15 -0
  106. package/dist/runtime/cli/experimental/commands/pi.d.ts.map +1 -0
  107. package/dist/runtime/cli/experimental/commands/pi.js +28 -0
  108. package/dist/runtime/cli/experimental/commands/pi.js.map +1 -0
  109. package/dist/runtime/cli/experimental/commands/server.d.ts +13 -0
  110. package/dist/runtime/cli/experimental/commands/server.d.ts.map +1 -0
  111. package/dist/runtime/cli/experimental/commands/server.js +25 -0
  112. package/dist/runtime/cli/experimental/commands/server.js.map +1 -0
  113. package/dist/runtime/cli/experimental/transport-address.d.ts +10 -0
  114. package/dist/runtime/cli/experimental/transport-address.d.ts.map +1 -0
  115. package/dist/runtime/cli/experimental/transport-address.js +38 -0
  116. package/dist/runtime/cli/experimental/transport-address.js.map +1 -0
  117. package/dist/runtime/cli/file-processor.d.ts +15 -0
  118. package/dist/runtime/cli/file-processor.d.ts.map +1 -0
  119. package/dist/runtime/cli/file-processor.js +71 -0
  120. package/dist/runtime/cli/file-processor.js.map +1 -0
  121. package/dist/runtime/cli/initial-message.d.ts +18 -0
  122. package/dist/runtime/cli/initial-message.d.ts.map +1 -0
  123. package/dist/runtime/cli/initial-message.js +22 -0
  124. package/dist/runtime/cli/initial-message.js.map +1 -0
  125. package/dist/runtime/cli/list-models.d.ts +9 -0
  126. package/dist/runtime/cli/list-models.d.ts.map +1 -0
  127. package/dist/runtime/cli/list-models.js +98 -0
  128. package/dist/runtime/cli/list-models.js.map +1 -0
  129. package/dist/runtime/cli/project-trust.d.ts +10 -0
  130. package/dist/runtime/cli/project-trust.d.ts.map +1 -0
  131. package/dist/runtime/cli/project-trust.js +48 -0
  132. package/dist/runtime/cli/project-trust.js.map +1 -0
  133. package/dist/runtime/cli/session-picker.d.ts +10 -0
  134. package/dist/runtime/cli/session-picker.d.ts.map +1 -0
  135. package/dist/runtime/cli/session-picker.js +36 -0
  136. package/dist/runtime/cli/session-picker.js.map +1 -0
  137. package/dist/runtime/cli/startup-ui.d.ts +20 -0
  138. package/dist/runtime/cli/startup-ui.d.ts.map +1 -0
  139. package/dist/runtime/cli/startup-ui.js +184 -0
  140. package/dist/runtime/cli/startup-ui.js.map +1 -0
  141. package/dist/runtime/cli.d.ts +3 -0
  142. package/dist/runtime/cli.d.ts.map +1 -0
  143. package/dist/runtime/cli.js +19 -0
  144. package/dist/runtime/cli.js.map +1 -0
  145. package/dist/runtime/client/index.d.ts +3 -0
  146. package/dist/runtime/client/index.d.ts.map +1 -0
  147. package/dist/runtime/client/index.js +3 -0
  148. package/dist/runtime/client/index.js.map +1 -0
  149. package/dist/runtime/client/remote-session.d.ts +53 -0
  150. package/dist/runtime/client/remote-session.d.ts.map +1 -0
  151. package/dist/runtime/client/remote-session.js +340 -0
  152. package/dist/runtime/client/remote-session.js.map +1 -0
  153. package/dist/runtime/client/transcript.d.ts +12 -0
  154. package/dist/runtime/client/transcript.d.ts.map +1 -0
  155. package/dist/runtime/client/transcript.js +98 -0
  156. package/dist/runtime/client/transcript.js.map +1 -0
  157. package/dist/runtime/config.d.ts +98 -0
  158. package/dist/runtime/config.d.ts.map +1 -0
  159. package/dist/runtime/config.js +469 -0
  160. package/dist/runtime/config.js.map +1 -0
  161. package/dist/runtime/core/agent-session-runtime.d.ts +119 -0
  162. package/dist/runtime/core/agent-session-runtime.d.ts.map +1 -0
  163. package/dist/runtime/core/agent-session-runtime.js +309 -0
  164. package/dist/runtime/core/agent-session-runtime.js.map +1 -0
  165. package/dist/runtime/core/agent-session-services.d.ts +86 -0
  166. package/dist/runtime/core/agent-session-services.d.ts.map +1 -0
  167. package/dist/runtime/core/agent-session-services.js +134 -0
  168. package/dist/runtime/core/agent-session-services.js.map +1 -0
  169. package/dist/runtime/core/agent-session.d.ts +678 -0
  170. package/dist/runtime/core/agent-session.d.ts.map +1 -0
  171. package/dist/runtime/core/agent-session.js +2808 -0
  172. package/dist/runtime/core/agent-session.js.map +1 -0
  173. package/dist/runtime/core/auth-guidance.d.ts +5 -0
  174. package/dist/runtime/core/auth-guidance.d.ts.map +1 -0
  175. package/dist/runtime/core/auth-guidance.js +21 -0
  176. package/dist/runtime/core/auth-guidance.js.map +1 -0
  177. package/dist/runtime/core/auth-storage.d.ts +72 -0
  178. package/dist/runtime/core/auth-storage.d.ts.map +1 -0
  179. package/dist/runtime/core/auth-storage.js +426 -0
  180. package/dist/runtime/core/auth-storage.js.map +1 -0
  181. package/dist/runtime/core/bash-executor.d.ts +32 -0
  182. package/dist/runtime/core/bash-executor.d.ts.map +1 -0
  183. package/dist/runtime/core/bash-executor.js +111 -0
  184. package/dist/runtime/core/bash-executor.js.map +1 -0
  185. package/dist/runtime/core/cache-stats.d.ts +49 -0
  186. package/dist/runtime/core/cache-stats.d.ts.map +1 -0
  187. package/dist/runtime/core/cache-stats.js +101 -0
  188. package/dist/runtime/core/cache-stats.js.map +1 -0
  189. package/dist/runtime/core/compaction/branch-summarization.d.ts +98 -0
  190. package/dist/runtime/core/compaction/branch-summarization.d.ts.map +1 -0
  191. package/dist/runtime/core/compaction/branch-summarization.js +250 -0
  192. package/dist/runtime/core/compaction/branch-summarization.js.map +1 -0
  193. package/dist/runtime/core/compaction/compaction.d.ts +143 -0
  194. package/dist/runtime/core/compaction/compaction.d.ts.map +1 -0
  195. package/dist/runtime/core/compaction/compaction.js +669 -0
  196. package/dist/runtime/core/compaction/compaction.js.map +1 -0
  197. package/dist/runtime/core/compaction/index.d.ts +7 -0
  198. package/dist/runtime/core/compaction/index.d.ts.map +1 -0
  199. package/dist/runtime/core/compaction/index.js +7 -0
  200. package/dist/runtime/core/compaction/index.js.map +1 -0
  201. package/dist/runtime/core/compaction/utils.d.ts +38 -0
  202. package/dist/runtime/core/compaction/utils.d.ts.map +1 -0
  203. package/dist/runtime/core/compaction/utils.js +142 -0
  204. package/dist/runtime/core/compaction/utils.js.map +1 -0
  205. package/dist/runtime/core/defaults.d.ts +4 -0
  206. package/dist/runtime/core/defaults.d.ts.map +1 -0
  207. package/dist/runtime/core/defaults.js +11 -0
  208. package/dist/runtime/core/defaults.js.map +1 -0
  209. package/dist/runtime/core/diagnostics.d.ts +15 -0
  210. package/dist/runtime/core/diagnostics.d.ts.map +1 -0
  211. package/dist/runtime/core/diagnostics.js +2 -0
  212. package/dist/runtime/core/diagnostics.js.map +1 -0
  213. package/dist/runtime/core/event-bus.d.ts +9 -0
  214. package/dist/runtime/core/event-bus.d.ts.map +1 -0
  215. package/dist/runtime/core/event-bus.js +25 -0
  216. package/dist/runtime/core/event-bus.js.map +1 -0
  217. package/dist/runtime/core/exec.d.ts +29 -0
  218. package/dist/runtime/core/exec.d.ts.map +1 -0
  219. package/dist/runtime/core/exec.js +75 -0
  220. package/dist/runtime/core/exec.js.map +1 -0
  221. package/dist/runtime/core/experimental.d.ts +6 -0
  222. package/dist/runtime/core/experimental.d.ts.map +1 -0
  223. package/dist/runtime/core/experimental.js +8 -0
  224. package/dist/runtime/core/experimental.js.map +1 -0
  225. package/dist/runtime/core/export-html/ansi-to-html.d.ts +22 -0
  226. package/dist/runtime/core/export-html/ansi-to-html.d.ts.map +1 -0
  227. package/dist/runtime/core/export-html/ansi-to-html.js +249 -0
  228. package/dist/runtime/core/export-html/ansi-to-html.js.map +1 -0
  229. package/dist/runtime/core/export-html/index.d.ts +37 -0
  230. package/dist/runtime/core/export-html/index.d.ts.map +1 -0
  231. package/dist/runtime/core/export-html/index.js +226 -0
  232. package/dist/runtime/core/export-html/index.js.map +1 -0
  233. package/dist/runtime/core/export-html/template.css +1066 -0
  234. package/dist/runtime/core/export-html/template.html +55 -0
  235. package/dist/runtime/core/export-html/template.js +1864 -0
  236. package/dist/runtime/core/export-html/tool-renderer.d.ts +34 -0
  237. package/dist/runtime/core/export-html/tool-renderer.d.ts.map +1 -0
  238. package/dist/runtime/core/export-html/tool-renderer.js +108 -0
  239. package/dist/runtime/core/export-html/tool-renderer.js.map +1 -0
  240. package/dist/runtime/core/export-html/vendor/highlight.min.js +1213 -0
  241. package/dist/runtime/core/export-html/vendor/marked.min.js +78 -0
  242. package/dist/runtime/core/extensions/index.d.ts +12 -0
  243. package/dist/runtime/core/extensions/index.d.ts.map +1 -0
  244. package/dist/runtime/core/extensions/index.js +9 -0
  245. package/dist/runtime/core/extensions/index.js.map +1 -0
  246. package/dist/runtime/core/extensions/loader.d.ts +23 -0
  247. package/dist/runtime/core/extensions/loader.d.ts.map +1 -0
  248. package/dist/runtime/core/extensions/loader.js +648 -0
  249. package/dist/runtime/core/extensions/loader.js.map +1 -0
  250. package/dist/runtime/core/extensions/runner.d.ts +173 -0
  251. package/dist/runtime/core/extensions/runner.d.ts.map +1 -0
  252. package/dist/runtime/core/extensions/runner.js +967 -0
  253. package/dist/runtime/core/extensions/runner.js.map +1 -0
  254. package/dist/runtime/core/extensions/types.d.ts +1328 -0
  255. package/dist/runtime/core/extensions/types.d.ts.map +1 -0
  256. package/dist/runtime/core/extensions/types.js +48 -0
  257. package/dist/runtime/core/extensions/types.js.map +1 -0
  258. package/dist/runtime/core/extensions/wrapper.d.ts +20 -0
  259. package/dist/runtime/core/extensions/wrapper.d.ts.map +1 -0
  260. package/dist/runtime/core/extensions/wrapper.js +41 -0
  261. package/dist/runtime/core/extensions/wrapper.js.map +1 -0
  262. package/dist/runtime/core/footer-data-provider.d.ts +64 -0
  263. package/dist/runtime/core/footer-data-provider.d.ts.map +1 -0
  264. package/dist/runtime/core/footer-data-provider.js +338 -0
  265. package/dist/runtime/core/footer-data-provider.js.map +1 -0
  266. package/dist/runtime/core/http-dispatcher.d.ts +22 -0
  267. package/dist/runtime/core/http-dispatcher.d.ts.map +1 -0
  268. package/dist/runtime/core/http-dispatcher.js +96 -0
  269. package/dist/runtime/core/http-dispatcher.js.map +1 -0
  270. package/dist/runtime/core/index.d.ts +13 -0
  271. package/dist/runtime/core/index.d.ts.map +1 -0
  272. package/dist/runtime/core/index.js +13 -0
  273. package/dist/runtime/core/index.js.map +1 -0
  274. package/dist/runtime/core/keybindings.d.ts +423 -0
  275. package/dist/runtime/core/keybindings.d.ts.map +1 -0
  276. package/dist/runtime/core/keybindings.js +317 -0
  277. package/dist/runtime/core/keybindings.js.map +1 -0
  278. package/dist/runtime/core/messages.d.ts +77 -0
  279. package/dist/runtime/core/messages.d.ts.map +1 -0
  280. package/dist/runtime/core/messages.js +123 -0
  281. package/dist/runtime/core/messages.js.map +1 -0
  282. package/dist/runtime/core/model-config.d.ts +576 -0
  283. package/dist/runtime/core/model-config.d.ts.map +1 -0
  284. package/dist/runtime/core/model-config.js +256 -0
  285. package/dist/runtime/core/model-config.js.map +1 -0
  286. package/dist/runtime/core/model-registry.d.ts +45 -0
  287. package/dist/runtime/core/model-registry.d.ts.map +1 -0
  288. package/dist/runtime/core/model-registry.js +107 -0
  289. package/dist/runtime/core/model-registry.js.map +1 -0
  290. package/dist/runtime/core/model-resolver.d.ts +124 -0
  291. package/dist/runtime/core/model-resolver.d.ts.map +1 -0
  292. package/dist/runtime/core/model-resolver.js +589 -0
  293. package/dist/runtime/core/model-resolver.js.map +1 -0
  294. package/dist/runtime/core/model-runtime.d.ts +100 -0
  295. package/dist/runtime/core/model-runtime.d.ts.map +1 -0
  296. package/dist/runtime/core/model-runtime.js +599 -0
  297. package/dist/runtime/core/model-runtime.js.map +1 -0
  298. package/dist/runtime/core/models-store.d.ts +22 -0
  299. package/dist/runtime/core/models-store.d.ts.map +1 -0
  300. package/dist/runtime/core/models-store.js +115 -0
  301. package/dist/runtime/core/models-store.js.map +1 -0
  302. package/dist/runtime/core/output-guard.d.ts +7 -0
  303. package/dist/runtime/core/output-guard.d.ts.map +1 -0
  304. package/dist/runtime/core/output-guard.js +89 -0
  305. package/dist/runtime/core/output-guard.js.map +1 -0
  306. package/dist/runtime/core/package-manager.d.ts +213 -0
  307. package/dist/runtime/core/package-manager.d.ts.map +1 -0
  308. package/dist/runtime/core/package-manager.js +2177 -0
  309. package/dist/runtime/core/package-manager.js.map +1 -0
  310. package/dist/runtime/core/pi-manifest.d.ts +8 -0
  311. package/dist/runtime/core/pi-manifest.d.ts.map +1 -0
  312. package/dist/runtime/core/pi-manifest.js +26 -0
  313. package/dist/runtime/core/pi-manifest.js.map +1 -0
  314. package/dist/runtime/core/project-trust.d.ts +15 -0
  315. package/dist/runtime/core/project-trust.d.ts.map +1 -0
  316. package/dist/runtime/core/project-trust.js +59 -0
  317. package/dist/runtime/core/project-trust.js.map +1 -0
  318. package/dist/runtime/core/prompt-templates.d.ts +54 -0
  319. package/dist/runtime/core/prompt-templates.d.ts.map +1 -0
  320. package/dist/runtime/core/prompt-templates.js +236 -0
  321. package/dist/runtime/core/prompt-templates.js.map +1 -0
  322. package/dist/runtime/core/provider-attribution.d.ts +4 -0
  323. package/dist/runtime/core/provider-attribution.d.ts.map +1 -0
  324. package/dist/runtime/core/provider-attribution.js +72 -0
  325. package/dist/runtime/core/provider-attribution.js.map +1 -0
  326. package/dist/runtime/core/provider-composer.d.ts +58 -0
  327. package/dist/runtime/core/provider-composer.d.ts.map +1 -0
  328. package/dist/runtime/core/provider-composer.js +396 -0
  329. package/dist/runtime/core/provider-composer.js.map +1 -0
  330. package/dist/runtime/core/radius.d.ts +2 -0
  331. package/dist/runtime/core/radius.d.ts.map +1 -0
  332. package/dist/runtime/core/radius.js +2 -0
  333. package/dist/runtime/core/radius.js.map +1 -0
  334. package/dist/runtime/core/remote-catalog-provider.d.ts +5 -0
  335. package/dist/runtime/core/remote-catalog-provider.d.ts.map +1 -0
  336. package/dist/runtime/core/remote-catalog-provider.js +122 -0
  337. package/dist/runtime/core/remote-catalog-provider.js.map +1 -0
  338. package/dist/runtime/core/resolve-config-value.d.ts +30 -0
  339. package/dist/runtime/core/resolve-config-value.d.ts.map +1 -0
  340. package/dist/runtime/core/resolve-config-value.js +247 -0
  341. package/dist/runtime/core/resolve-config-value.js.map +1 -0
  342. package/dist/runtime/core/resource-loader.d.ts +221 -0
  343. package/dist/runtime/core/resource-loader.d.ts.map +1 -0
  344. package/dist/runtime/core/resource-loader.js +875 -0
  345. package/dist/runtime/core/resource-loader.js.map +1 -0
  346. package/dist/runtime/core/runtime-credentials.d.ts +15 -0
  347. package/dist/runtime/core/runtime-credentials.d.ts.map +1 -0
  348. package/dist/runtime/core/runtime-credentials.js +39 -0
  349. package/dist/runtime/core/runtime-credentials.js.map +1 -0
  350. package/dist/runtime/core/sdk.d.ts +108 -0
  351. package/dist/runtime/core/sdk.d.ts.map +1 -0
  352. package/dist/runtime/core/sdk.js +275 -0
  353. package/dist/runtime/core/sdk.js.map +1 -0
  354. package/dist/runtime/core/session-cwd.d.ts +19 -0
  355. package/dist/runtime/core/session-cwd.d.ts.map +1 -0
  356. package/dist/runtime/core/session-cwd.js +38 -0
  357. package/dist/runtime/core/session-cwd.js.map +1 -0
  358. package/dist/runtime/core/session-export.d.ts +4 -0
  359. package/dist/runtime/core/session-export.d.ts.map +1 -0
  360. package/dist/runtime/core/session-export.js +32 -0
  361. package/dist/runtime/core/session-export.js.map +1 -0
  362. package/dist/runtime/core/session-manager.d.ts +356 -0
  363. package/dist/runtime/core/session-manager.d.ts.map +1 -0
  364. package/dist/runtime/core/session-manager.js +1341 -0
  365. package/dist/runtime/core/session-manager.js.map +1 -0
  366. package/dist/runtime/core/settings-diagnostics.d.ts +9 -0
  367. package/dist/runtime/core/settings-diagnostics.d.ts.map +1 -0
  368. package/dist/runtime/core/settings-diagnostics.js +21 -0
  369. package/dist/runtime/core/settings-diagnostics.js.map +1 -0
  370. package/dist/runtime/core/settings-manager.d.ts +324 -0
  371. package/dist/runtime/core/settings-manager.d.ts.map +1 -0
  372. package/dist/runtime/core/settings-manager.js +980 -0
  373. package/dist/runtime/core/settings-manager.js.map +1 -0
  374. package/dist/runtime/core/skills.d.ts +60 -0
  375. package/dist/runtime/core/skills.d.ts.map +1 -0
  376. package/dist/runtime/core/skills.js +405 -0
  377. package/dist/runtime/core/skills.js.map +1 -0
  378. package/dist/runtime/core/slash-commands.d.ts +15 -0
  379. package/dist/runtime/core/slash-commands.d.ts.map +1 -0
  380. package/dist/runtime/core/slash-commands.js +27 -0
  381. package/dist/runtime/core/slash-commands.js.map +1 -0
  382. package/dist/runtime/core/source-info.d.ts +18 -0
  383. package/dist/runtime/core/source-info.d.ts.map +1 -0
  384. package/dist/runtime/core/source-info.js +19 -0
  385. package/dist/runtime/core/source-info.js.map +1 -0
  386. package/dist/runtime/core/system-prompt.d.ts +28 -0
  387. package/dist/runtime/core/system-prompt.d.ts.map +1 -0
  388. package/dist/runtime/core/system-prompt.js +119 -0
  389. package/dist/runtime/core/system-prompt.js.map +1 -0
  390. package/dist/runtime/core/telemetry.d.ts +3 -0
  391. package/dist/runtime/core/telemetry.d.ts.map +1 -0
  392. package/dist/runtime/core/telemetry.js +9 -0
  393. package/dist/runtime/core/telemetry.js.map +1 -0
  394. package/dist/runtime/core/timings.d.ts +10 -0
  395. package/dist/runtime/core/timings.d.ts.map +1 -0
  396. package/dist/runtime/core/timings.js +41 -0
  397. package/dist/runtime/core/timings.js.map +1 -0
  398. package/dist/runtime/core/tools/bash.d.ts +87 -0
  399. package/dist/runtime/core/tools/bash.d.ts.map +1 -0
  400. package/dist/runtime/core/tools/bash.js +410 -0
  401. package/dist/runtime/core/tools/bash.js.map +1 -0
  402. package/dist/runtime/core/tools/edit-diff.d.ts +101 -0
  403. package/dist/runtime/core/tools/edit-diff.d.ts.map +1 -0
  404. package/dist/runtime/core/tools/edit-diff.js +421 -0
  405. package/dist/runtime/core/tools/edit-diff.js.map +1 -0
  406. package/dist/runtime/core/tools/edit.d.ts +55 -0
  407. package/dist/runtime/core/tools/edit.d.ts.map +1 -0
  408. package/dist/runtime/core/tools/edit.js +306 -0
  409. package/dist/runtime/core/tools/edit.js.map +1 -0
  410. package/dist/runtime/core/tools/file-mutation-queue.d.ts +6 -0
  411. package/dist/runtime/core/tools/file-mutation-queue.d.ts.map +1 -0
  412. package/dist/runtime/core/tools/file-mutation-queue.js +52 -0
  413. package/dist/runtime/core/tools/file-mutation-queue.js.map +1 -0
  414. package/dist/runtime/core/tools/find.d.ts +42 -0
  415. package/dist/runtime/core/tools/find.d.ts.map +1 -0
  416. package/dist/runtime/core/tools/find.js +302 -0
  417. package/dist/runtime/core/tools/find.js.map +1 -0
  418. package/dist/runtime/core/tools/grep.d.ts +41 -0
  419. package/dist/runtime/core/tools/grep.d.ts.map +1 -0
  420. package/dist/runtime/core/tools/grep.js +308 -0
  421. package/dist/runtime/core/tools/grep.js.map +1 -0
  422. package/dist/runtime/core/tools/index.d.ts +43 -0
  423. package/dist/runtime/core/tools/index.d.ts.map +1 -0
  424. package/dist/runtime/core/tools/index.js +129 -0
  425. package/dist/runtime/core/tools/index.js.map +1 -0
  426. package/dist/runtime/core/tools/ls.d.ts +41 -0
  427. package/dist/runtime/core/tools/ls.d.ts.map +1 -0
  428. package/dist/runtime/core/tools/ls.js +171 -0
  429. package/dist/runtime/core/tools/ls.js.map +1 -0
  430. package/dist/runtime/core/tools/output-accumulator.d.ts +52 -0
  431. package/dist/runtime/core/tools/output-accumulator.d.ts.map +1 -0
  432. package/dist/runtime/core/tools/output-accumulator.js +184 -0
  433. package/dist/runtime/core/tools/output-accumulator.js.map +1 -0
  434. package/dist/runtime/core/tools/path-utils.d.ts +10 -0
  435. package/dist/runtime/core/tools/path-utils.d.ts.map +1 -0
  436. package/dist/runtime/core/tools/path-utils.js +99 -0
  437. package/dist/runtime/core/tools/path-utils.js.map +1 -0
  438. package/dist/runtime/core/tools/powershell.d.ts +16 -0
  439. package/dist/runtime/core/tools/powershell.d.ts.map +1 -0
  440. package/dist/runtime/core/tools/powershell.js +39 -0
  441. package/dist/runtime/core/tools/powershell.js.map +1 -0
  442. package/dist/runtime/core/tools/read.d.ts +39 -0
  443. package/dist/runtime/core/tools/read.d.ts.map +1 -0
  444. package/dist/runtime/core/tools/read.js +282 -0
  445. package/dist/runtime/core/tools/read.js.map +1 -0
  446. package/dist/runtime/core/tools/render-utils.d.ts +24 -0
  447. package/dist/runtime/core/tools/render-utils.d.ts.map +1 -0
  448. package/dist/runtime/core/tools/render-utils.js +65 -0
  449. package/dist/runtime/core/tools/render-utils.js.map +1 -0
  450. package/dist/runtime/core/tools/tool-definition-wrapper.d.ts +14 -0
  451. package/dist/runtime/core/tools/tool-definition-wrapper.d.ts.map +1 -0
  452. package/dist/runtime/core/tools/tool-definition-wrapper.js +36 -0
  453. package/dist/runtime/core/tools/tool-definition-wrapper.js.map +1 -0
  454. package/dist/runtime/core/tools/truncate.d.ts +70 -0
  455. package/dist/runtime/core/tools/truncate.d.ts.map +1 -0
  456. package/dist/runtime/core/tools/truncate.js +215 -0
  457. package/dist/runtime/core/tools/truncate.js.map +1 -0
  458. package/dist/runtime/core/tools/write.d.ts +30 -0
  459. package/dist/runtime/core/tools/write.d.ts.map +1 -0
  460. package/dist/runtime/core/tools/write.js +203 -0
  461. package/dist/runtime/core/tools/write.js.map +1 -0
  462. package/dist/runtime/core/trust-manager.d.ts +36 -0
  463. package/dist/runtime/core/trust-manager.d.ts.map +1 -0
  464. package/dist/runtime/core/trust-manager.js +203 -0
  465. package/dist/runtime/core/trust-manager.js.map +1 -0
  466. package/dist/runtime/core/usage-totals.d.ts +19 -0
  467. package/dist/runtime/core/usage-totals.d.ts.map +1 -0
  468. package/dist/runtime/core/usage-totals.js +52 -0
  469. package/dist/runtime/core/usage-totals.js.map +1 -0
  470. package/dist/runtime/extensions/index.d.ts +3 -0
  471. package/dist/runtime/extensions/index.d.ts.map +1 -0
  472. package/dist/runtime/extensions/index.js +3 -0
  473. package/dist/runtime/extensions/index.js.map +1 -0
  474. package/dist/runtime/extensions/llama/client.d.ts +67 -0
  475. package/dist/runtime/extensions/llama/client.d.ts.map +1 -0
  476. package/dist/runtime/extensions/llama/client.js +309 -0
  477. package/dist/runtime/extensions/llama/client.js.map +1 -0
  478. package/dist/runtime/extensions/llama/huggingface.d.ts +23 -0
  479. package/dist/runtime/extensions/llama/huggingface.d.ts.map +1 -0
  480. package/dist/runtime/extensions/llama/huggingface.js +141 -0
  481. package/dist/runtime/extensions/llama/huggingface.js.map +1 -0
  482. package/dist/runtime/extensions/llama/index.d.ts +3 -0
  483. package/dist/runtime/extensions/llama/index.d.ts.map +1 -0
  484. package/dist/runtime/extensions/llama/index.js +219 -0
  485. package/dist/runtime/extensions/llama/index.js.map +1 -0
  486. package/dist/runtime/extensions/llama/provider.d.ts +12 -0
  487. package/dist/runtime/extensions/llama/provider.d.ts.map +1 -0
  488. package/dist/runtime/extensions/llama/provider.js +146 -0
  489. package/dist/runtime/extensions/llama/provider.js.map +1 -0
  490. package/dist/runtime/extensions/llama/ui.d.ts +42 -0
  491. package/dist/runtime/extensions/llama/ui.d.ts.map +1 -0
  492. package/dist/runtime/extensions/llama/ui.js +416 -0
  493. package/dist/runtime/extensions/llama/ui.js.map +1 -0
  494. package/dist/runtime/index.d.ts +37 -0
  495. package/dist/runtime/index.d.ts.map +1 -0
  496. package/dist/runtime/index.js +49 -0
  497. package/dist/runtime/index.js.map +1 -0
  498. package/dist/runtime/main.d.ts +16 -0
  499. package/dist/runtime/main.d.ts.map +1 -0
  500. package/dist/runtime/main.js +799 -0
  501. package/dist/runtime/main.js.map +1 -0
  502. package/dist/runtime/migrations.d.ts +33 -0
  503. package/dist/runtime/migrations.d.ts.map +1 -0
  504. package/dist/runtime/migrations.js +282 -0
  505. package/dist/runtime/migrations.js.map +1 -0
  506. package/dist/runtime/modes/index.d.ts +10 -0
  507. package/dist/runtime/modes/index.d.ts.map +1 -0
  508. package/dist/runtime/modes/index.js +8 -0
  509. package/dist/runtime/modes/index.js.map +1 -0
  510. package/dist/runtime/modes/interactive/assets/clankolas.png +0 -0
  511. package/dist/runtime/modes/interactive/components/armin.d.ts +34 -0
  512. package/dist/runtime/modes/interactive/components/armin.d.ts.map +1 -0
  513. package/dist/runtime/modes/interactive/components/armin.js +333 -0
  514. package/dist/runtime/modes/interactive/components/armin.js.map +1 -0
  515. package/dist/runtime/modes/interactive/components/assistant-message.d.ts +25 -0
  516. package/dist/runtime/modes/interactive/components/assistant-message.d.ts.map +1 -0
  517. package/dist/runtime/modes/interactive/components/assistant-message.js +150 -0
  518. package/dist/runtime/modes/interactive/components/assistant-message.js.map +1 -0
  519. package/dist/runtime/modes/interactive/components/bash-execution.d.ts +34 -0
  520. package/dist/runtime/modes/interactive/components/bash-execution.d.ts.map +1 -0
  521. package/dist/runtime/modes/interactive/components/bash-execution.js +175 -0
  522. package/dist/runtime/modes/interactive/components/bash-execution.js.map +1 -0
  523. package/dist/runtime/modes/interactive/components/bordered-loader.d.ts +16 -0
  524. package/dist/runtime/modes/interactive/components/bordered-loader.d.ts.map +1 -0
  525. package/dist/runtime/modes/interactive/components/bordered-loader.js +54 -0
  526. package/dist/runtime/modes/interactive/components/bordered-loader.js.map +1 -0
  527. package/dist/runtime/modes/interactive/components/branch-summary-message.d.ts +16 -0
  528. package/dist/runtime/modes/interactive/components/branch-summary-message.d.ts.map +1 -0
  529. package/dist/runtime/modes/interactive/components/branch-summary-message.js +44 -0
  530. package/dist/runtime/modes/interactive/components/branch-summary-message.js.map +1 -0
  531. package/dist/runtime/modes/interactive/components/compaction-summary-message.d.ts +16 -0
  532. package/dist/runtime/modes/interactive/components/compaction-summary-message.d.ts.map +1 -0
  533. package/dist/runtime/modes/interactive/components/compaction-summary-message.js +45 -0
  534. package/dist/runtime/modes/interactive/components/compaction-summary-message.js.map +1 -0
  535. package/dist/runtime/modes/interactive/components/config-selector.d.ts +102 -0
  536. package/dist/runtime/modes/interactive/components/config-selector.d.ts.map +1 -0
  537. package/dist/runtime/modes/interactive/components/config-selector.js +761 -0
  538. package/dist/runtime/modes/interactive/components/config-selector.js.map +1 -0
  539. package/dist/runtime/modes/interactive/components/countdown-timer.d.ts +14 -0
  540. package/dist/runtime/modes/interactive/components/countdown-timer.d.ts.map +1 -0
  541. package/dist/runtime/modes/interactive/components/countdown-timer.js +33 -0
  542. package/dist/runtime/modes/interactive/components/countdown-timer.js.map +1 -0
  543. package/dist/runtime/modes/interactive/components/custom-editor.d.ts +21 -0
  544. package/dist/runtime/modes/interactive/components/custom-editor.d.ts.map +1 -0
  545. package/dist/runtime/modes/interactive/components/custom-editor.js +77 -0
  546. package/dist/runtime/modes/interactive/components/custom-editor.js.map +1 -0
  547. package/dist/runtime/modes/interactive/components/custom-entry.d.ts +19 -0
  548. package/dist/runtime/modes/interactive/components/custom-entry.d.ts.map +1 -0
  549. package/dist/runtime/modes/interactive/components/custom-entry.js +52 -0
  550. package/dist/runtime/modes/interactive/components/custom-entry.js.map +1 -0
  551. package/dist/runtime/modes/interactive/components/custom-message.d.ts +22 -0
  552. package/dist/runtime/modes/interactive/components/custom-message.d.ts.map +1 -0
  553. package/dist/runtime/modes/interactive/components/custom-message.js +87 -0
  554. package/dist/runtime/modes/interactive/components/custom-message.js.map +1 -0
  555. package/dist/runtime/modes/interactive/components/daxnuts.d.ts +23 -0
  556. package/dist/runtime/modes/interactive/components/daxnuts.d.ts.map +1 -0
  557. package/dist/runtime/modes/interactive/components/daxnuts.js +140 -0
  558. package/dist/runtime/modes/interactive/components/daxnuts.js.map +1 -0
  559. package/dist/runtime/modes/interactive/components/diff.d.ts +12 -0
  560. package/dist/runtime/modes/interactive/components/diff.d.ts.map +1 -0
  561. package/dist/runtime/modes/interactive/components/diff.js +133 -0
  562. package/dist/runtime/modes/interactive/components/diff.js.map +1 -0
  563. package/dist/runtime/modes/interactive/components/dynamic-border.d.ts +15 -0
  564. package/dist/runtime/modes/interactive/components/dynamic-border.d.ts.map +1 -0
  565. package/dist/runtime/modes/interactive/components/dynamic-border.js +21 -0
  566. package/dist/runtime/modes/interactive/components/dynamic-border.js.map +1 -0
  567. package/dist/runtime/modes/interactive/components/earendil-announcement.d.ts +5 -0
  568. package/dist/runtime/modes/interactive/components/earendil-announcement.d.ts.map +1 -0
  569. package/dist/runtime/modes/interactive/components/earendil-announcement.js +40 -0
  570. package/dist/runtime/modes/interactive/components/earendil-announcement.js.map +1 -0
  571. package/dist/runtime/modes/interactive/components/extension-editor.d.ts +21 -0
  572. package/dist/runtime/modes/interactive/components/extension-editor.d.ts.map +1 -0
  573. package/dist/runtime/modes/interactive/components/extension-editor.js +98 -0
  574. package/dist/runtime/modes/interactive/components/extension-editor.js.map +1 -0
  575. package/dist/runtime/modes/interactive/components/extension-input.d.ts +23 -0
  576. package/dist/runtime/modes/interactive/components/extension-input.d.ts.map +1 -0
  577. package/dist/runtime/modes/interactive/components/extension-input.js +61 -0
  578. package/dist/runtime/modes/interactive/components/extension-input.js.map +1 -0
  579. package/dist/runtime/modes/interactive/components/extension-selector.d.ts +26 -0
  580. package/dist/runtime/modes/interactive/components/extension-selector.d.ts.map +1 -0
  581. package/dist/runtime/modes/interactive/components/extension-selector.js +83 -0
  582. package/dist/runtime/modes/interactive/components/extension-selector.js.map +1 -0
  583. package/dist/runtime/modes/interactive/components/first-time-setup.d.ts +25 -0
  584. package/dist/runtime/modes/interactive/components/first-time-setup.d.ts.map +1 -0
  585. package/dist/runtime/modes/interactive/components/first-time-setup.js +103 -0
  586. package/dist/runtime/modes/interactive/components/first-time-setup.js.map +1 -0
  587. package/dist/runtime/modes/interactive/components/footer.d.ts +32 -0
  588. package/dist/runtime/modes/interactive/components/footer.d.ts.map +1 -0
  589. package/dist/runtime/modes/interactive/components/footer.js +222 -0
  590. package/dist/runtime/modes/interactive/components/footer.js.map +1 -0
  591. package/dist/runtime/modes/interactive/components/index.d.ts +34 -0
  592. package/dist/runtime/modes/interactive/components/index.d.ts.map +1 -0
  593. package/dist/runtime/modes/interactive/components/index.js +35 -0
  594. package/dist/runtime/modes/interactive/components/index.js.map +1 -0
  595. package/dist/runtime/modes/interactive/components/keybinding-hints.d.ts +13 -0
  596. package/dist/runtime/modes/interactive/components/keybinding-hints.d.ts.map +1 -0
  597. package/dist/runtime/modes/interactive/components/keybinding-hints.js +36 -0
  598. package/dist/runtime/modes/interactive/components/keybinding-hints.js.map +1 -0
  599. package/dist/runtime/modes/interactive/components/login-dialog.d.ts +52 -0
  600. package/dist/runtime/modes/interactive/components/login-dialog.d.ts.map +1 -0
  601. package/dist/runtime/modes/interactive/components/login-dialog.js +188 -0
  602. package/dist/runtime/modes/interactive/components/login-dialog.js.map +1 -0
  603. package/dist/runtime/modes/interactive/components/markdown-transform.d.ts +3 -0
  604. package/dist/runtime/modes/interactive/components/markdown-transform.d.ts.map +1 -0
  605. package/dist/runtime/modes/interactive/components/markdown-transform.js +19 -0
  606. package/dist/runtime/modes/interactive/components/markdown-transform.js.map +1 -0
  607. package/dist/runtime/modes/interactive/components/mermaid.d.ts +11 -0
  608. package/dist/runtime/modes/interactive/components/mermaid.d.ts.map +1 -0
  609. package/dist/runtime/modes/interactive/components/mermaid.js +75 -0
  610. package/dist/runtime/modes/interactive/components/mermaid.js.map +1 -0
  611. package/dist/runtime/modes/interactive/components/model-selector.d.ts +60 -0
  612. package/dist/runtime/modes/interactive/components/model-selector.d.ts.map +1 -0
  613. package/dist/runtime/modes/interactive/components/model-selector.js +370 -0
  614. package/dist/runtime/modes/interactive/components/model-selector.js.map +1 -0
  615. package/dist/runtime/modes/interactive/components/oauth-selector.d.ts +33 -0
  616. package/dist/runtime/modes/interactive/components/oauth-selector.d.ts.map +1 -0
  617. package/dist/runtime/modes/interactive/components/oauth-selector.js +163 -0
  618. package/dist/runtime/modes/interactive/components/oauth-selector.js.map +1 -0
  619. package/dist/runtime/modes/interactive/components/scoped-models-selector.d.ts +46 -0
  620. package/dist/runtime/modes/interactive/components/scoped-models-selector.d.ts.map +1 -0
  621. package/dist/runtime/modes/interactive/components/scoped-models-selector.js +328 -0
  622. package/dist/runtime/modes/interactive/components/scoped-models-selector.js.map +1 -0
  623. package/dist/runtime/modes/interactive/components/session-selector-search.d.ts +23 -0
  624. package/dist/runtime/modes/interactive/components/session-selector-search.d.ts.map +1 -0
  625. package/dist/runtime/modes/interactive/components/session-selector-search.js +155 -0
  626. package/dist/runtime/modes/interactive/components/session-selector-search.js.map +1 -0
  627. package/dist/runtime/modes/interactive/components/session-selector.d.ts +95 -0
  628. package/dist/runtime/modes/interactive/components/session-selector.d.ts.map +1 -0
  629. package/dist/runtime/modes/interactive/components/session-selector.js +867 -0
  630. package/dist/runtime/modes/interactive/components/session-selector.js.map +1 -0
  631. package/dist/runtime/modes/interactive/components/settings-selector.d.ts +90 -0
  632. package/dist/runtime/modes/interactive/components/settings-selector.d.ts.map +1 -0
  633. package/dist/runtime/modes/interactive/components/settings-selector.js +695 -0
  634. package/dist/runtime/modes/interactive/components/settings-selector.js.map +1 -0
  635. package/dist/runtime/modes/interactive/components/settings-submenu.d.ts +72 -0
  636. package/dist/runtime/modes/interactive/components/settings-submenu.d.ts.map +1 -0
  637. package/dist/runtime/modes/interactive/components/settings-submenu.js +165 -0
  638. package/dist/runtime/modes/interactive/components/settings-submenu.js.map +1 -0
  639. package/dist/runtime/modes/interactive/components/show-images-selector.d.ts +10 -0
  640. package/dist/runtime/modes/interactive/components/show-images-selector.d.ts.map +1 -0
  641. package/dist/runtime/modes/interactive/components/show-images-selector.js +39 -0
  642. package/dist/runtime/modes/interactive/components/show-images-selector.js.map +1 -0
  643. package/dist/runtime/modes/interactive/components/skill-invocation-message.d.ts +17 -0
  644. package/dist/runtime/modes/interactive/components/skill-invocation-message.d.ts.map +1 -0
  645. package/dist/runtime/modes/interactive/components/skill-invocation-message.js +47 -0
  646. package/dist/runtime/modes/interactive/components/skill-invocation-message.js.map +1 -0
  647. package/dist/runtime/modes/interactive/components/status-indicator.d.ts +28 -0
  648. package/dist/runtime/modes/interactive/components/status-indicator.d.ts.map +1 -0
  649. package/dist/runtime/modes/interactive/components/status-indicator.js +60 -0
  650. package/dist/runtime/modes/interactive/components/status-indicator.js.map +1 -0
  651. package/dist/runtime/modes/interactive/components/theme-selector.d.ts +11 -0
  652. package/dist/runtime/modes/interactive/components/theme-selector.d.ts.map +1 -0
  653. package/dist/runtime/modes/interactive/components/theme-selector.js +50 -0
  654. package/dist/runtime/modes/interactive/components/theme-selector.js.map +1 -0
  655. package/dist/runtime/modes/interactive/components/thinking-selector.d.ts +23 -0
  656. package/dist/runtime/modes/interactive/components/thinking-selector.d.ts.map +1 -0
  657. package/dist/runtime/modes/interactive/components/thinking-selector.js +109 -0
  658. package/dist/runtime/modes/interactive/components/thinking-selector.js.map +1 -0
  659. package/dist/runtime/modes/interactive/components/tool-execution.d.ts +63 -0
  660. package/dist/runtime/modes/interactive/components/tool-execution.d.ts.map +1 -0
  661. package/dist/runtime/modes/interactive/components/tool-execution.js +326 -0
  662. package/dist/runtime/modes/interactive/components/tool-execution.js.map +1 -0
  663. package/dist/runtime/modes/interactive/components/tree-selector.d.ts +94 -0
  664. package/dist/runtime/modes/interactive/components/tree-selector.d.ts.map +1 -0
  665. package/dist/runtime/modes/interactive/components/tree-selector.js +1245 -0
  666. package/dist/runtime/modes/interactive/components/tree-selector.js.map +1 -0
  667. package/dist/runtime/modes/interactive/components/trust-selector.d.ts +23 -0
  668. package/dist/runtime/modes/interactive/components/trust-selector.d.ts.map +1 -0
  669. package/dist/runtime/modes/interactive/components/trust-selector.js +91 -0
  670. package/dist/runtime/modes/interactive/components/trust-selector.js.map +1 -0
  671. package/dist/runtime/modes/interactive/components/user-message-selector.d.ts +30 -0
  672. package/dist/runtime/modes/interactive/components/user-message-selector.d.ts.map +1 -0
  673. package/dist/runtime/modes/interactive/components/user-message-selector.js +114 -0
  674. package/dist/runtime/modes/interactive/components/user-message-selector.js.map +1 -0
  675. package/dist/runtime/modes/interactive/components/user-message.d.ts +16 -0
  676. package/dist/runtime/modes/interactive/components/user-message.d.ts.map +1 -0
  677. package/dist/runtime/modes/interactive/components/user-message.js +49 -0
  678. package/dist/runtime/modes/interactive/components/user-message.js.map +1 -0
  679. package/dist/runtime/modes/interactive/components/visual-truncate.d.ts +24 -0
  680. package/dist/runtime/modes/interactive/components/visual-truncate.d.ts.map +1 -0
  681. package/dist/runtime/modes/interactive/components/visual-truncate.js +33 -0
  682. package/dist/runtime/modes/interactive/components/visual-truncate.js.map +1 -0
  683. package/dist/runtime/modes/interactive/external-editor.d.ts +12 -0
  684. package/dist/runtime/modes/interactive/external-editor.d.ts.map +1 -0
  685. package/dist/runtime/modes/interactive/external-editor.js +38 -0
  686. package/dist/runtime/modes/interactive/external-editor.js.map +1 -0
  687. package/dist/runtime/modes/interactive/interactive-mode.d.ts +446 -0
  688. package/dist/runtime/modes/interactive/interactive-mode.d.ts.map +1 -0
  689. package/dist/runtime/modes/interactive/interactive-mode.js +5509 -0
  690. package/dist/runtime/modes/interactive/interactive-mode.js.map +1 -0
  691. package/dist/runtime/modes/interactive/model-catalog-refresh.d.ts +7 -0
  692. package/dist/runtime/modes/interactive/model-catalog-refresh.d.ts.map +1 -0
  693. package/dist/runtime/modes/interactive/model-catalog-refresh.js +34 -0
  694. package/dist/runtime/modes/interactive/model-catalog-refresh.js.map +1 -0
  695. package/dist/runtime/modes/interactive/model-search.d.ts +12 -0
  696. package/dist/runtime/modes/interactive/model-search.d.ts.map +1 -0
  697. package/dist/runtime/modes/interactive/model-search.js +15 -0
  698. package/dist/runtime/modes/interactive/model-search.js.map +1 -0
  699. package/dist/runtime/modes/interactive/session-share.d.ts +16 -0
  700. package/dist/runtime/modes/interactive/session-share.d.ts.map +1 -0
  701. package/dist/runtime/modes/interactive/session-share.js +188 -0
  702. package/dist/runtime/modes/interactive/session-share.js.map +1 -0
  703. package/dist/runtime/modes/interactive/theme/dark.json +90 -0
  704. package/dist/runtime/modes/interactive/theme/light.json +89 -0
  705. package/dist/runtime/modes/interactive/theme/theme-controller.d.ts +40 -0
  706. package/dist/runtime/modes/interactive/theme/theme-controller.d.ts.map +1 -0
  707. package/dist/runtime/modes/interactive/theme/theme-controller.js +125 -0
  708. package/dist/runtime/modes/interactive/theme/theme-controller.js.map +1 -0
  709. package/dist/runtime/modes/interactive/theme/theme-schema.json +352 -0
  710. package/dist/runtime/modes/interactive/theme/theme.d.ts +122 -0
  711. package/dist/runtime/modes/interactive/theme/theme.d.ts.map +1 -0
  712. package/dist/runtime/modes/interactive/theme/theme.js +1092 -0
  713. package/dist/runtime/modes/interactive/theme/theme.js.map +1 -0
  714. package/dist/runtime/modes/json-event.d.ts +34 -0
  715. package/dist/runtime/modes/json-event.d.ts.map +1 -0
  716. package/dist/runtime/modes/json-event.js +29 -0
  717. package/dist/runtime/modes/json-event.js.map +1 -0
  718. package/dist/runtime/modes/print-mode.d.ts +28 -0
  719. package/dist/runtime/modes/print-mode.d.ts.map +1 -0
  720. package/dist/runtime/modes/print-mode.js +142 -0
  721. package/dist/runtime/modes/print-mode.js.map +1 -0
  722. package/dist/runtime/modes/rpc/jsonl.d.ts +17 -0
  723. package/dist/runtime/modes/rpc/jsonl.d.ts.map +1 -0
  724. package/dist/runtime/modes/rpc/jsonl.js +49 -0
  725. package/dist/runtime/modes/rpc/jsonl.js.map +1 -0
  726. package/dist/runtime/modes/rpc/rpc-client.d.ts +254 -0
  727. package/dist/runtime/modes/rpc/rpc-client.d.ts.map +1 -0
  728. package/dist/runtime/modes/rpc/rpc-client.js +495 -0
  729. package/dist/runtime/modes/rpc/rpc-client.js.map +1 -0
  730. package/dist/runtime/modes/rpc/rpc-mode.d.ts +20 -0
  731. package/dist/runtime/modes/rpc/rpc-mode.d.ts.map +1 -0
  732. package/dist/runtime/modes/rpc/rpc-mode.js +657 -0
  733. package/dist/runtime/modes/rpc/rpc-mode.js.map +1 -0
  734. package/dist/runtime/modes/rpc/rpc-types.d.ts +469 -0
  735. package/dist/runtime/modes/rpc/rpc-types.d.ts.map +1 -0
  736. package/dist/runtime/modes/rpc/rpc-types.js +8 -0
  737. package/dist/runtime/modes/rpc/rpc-types.js.map +1 -0
  738. package/dist/runtime/package-manager-cli.d.ts +9 -0
  739. package/dist/runtime/package-manager-cli.d.ts.map +1 -0
  740. package/dist/runtime/package-manager-cli.js +961 -0
  741. package/dist/runtime/package-manager-cli.js.map +1 -0
  742. package/dist/runtime/rpc-entry.d.ts +3 -0
  743. package/dist/runtime/rpc-entry.d.ts.map +1 -0
  744. package/dist/runtime/rpc-entry.js +11 -0
  745. package/dist/runtime/rpc-entry.js.map +1 -0
  746. package/dist/runtime/server/create-harness.d.ts +26 -0
  747. package/dist/runtime/server/create-harness.d.ts.map +1 -0
  748. package/dist/runtime/server/create-harness.js +106 -0
  749. package/dist/runtime/server/create-harness.js.map +1 -0
  750. package/dist/runtime/utils/abort.d.ts +5 -0
  751. package/dist/runtime/utils/abort.d.ts.map +1 -0
  752. package/dist/runtime/utils/abort.js +48 -0
  753. package/dist/runtime/utils/abort.js.map +1 -0
  754. package/dist/runtime/utils/ansi.d.ts +2 -0
  755. package/dist/runtime/utils/ansi.d.ts.map +1 -0
  756. package/dist/runtime/utils/ansi.js +52 -0
  757. package/dist/runtime/utils/ansi.js.map +1 -0
  758. package/dist/runtime/utils/changelog.d.ts +22 -0
  759. package/dist/runtime/utils/changelog.d.ts.map +1 -0
  760. package/dist/runtime/utils/changelog.js +165 -0
  761. package/dist/runtime/utils/changelog.js.map +1 -0
  762. package/dist/runtime/utils/child-process.d.ts +18 -0
  763. package/dist/runtime/utils/child-process.d.ts.map +1 -0
  764. package/dist/runtime/utils/child-process.js +106 -0
  765. package/dist/runtime/utils/child-process.js.map +1 -0
  766. package/dist/runtime/utils/clipboard-image.d.ts +11 -0
  767. package/dist/runtime/utils/clipboard-image.d.ts.map +1 -0
  768. package/dist/runtime/utils/clipboard-image.js +245 -0
  769. package/dist/runtime/utils/clipboard-image.js.map +1 -0
  770. package/dist/runtime/utils/clipboard-native.d.ts +11 -0
  771. package/dist/runtime/utils/clipboard-native.d.ts.map +1 -0
  772. package/dist/runtime/utils/clipboard-native.js +20 -0
  773. package/dist/runtime/utils/clipboard-native.js.map +1 -0
  774. package/dist/runtime/utils/clipboard.d.ts +4 -0
  775. package/dist/runtime/utils/clipboard.d.ts.map +1 -0
  776. package/dist/runtime/utils/clipboard.js +161 -0
  777. package/dist/runtime/utils/clipboard.js.map +1 -0
  778. package/dist/runtime/utils/deprecation.d.ts +4 -0
  779. package/dist/runtime/utils/deprecation.d.ts.map +1 -0
  780. package/dist/runtime/utils/deprecation.js +13 -0
  781. package/dist/runtime/utils/deprecation.js.map +1 -0
  782. package/dist/runtime/utils/exif-orientation.d.ts +5 -0
  783. package/dist/runtime/utils/exif-orientation.d.ts.map +1 -0
  784. package/dist/runtime/utils/exif-orientation.js +158 -0
  785. package/dist/runtime/utils/exif-orientation.js.map +1 -0
  786. package/dist/runtime/utils/frontmatter.d.ts +8 -0
  787. package/dist/runtime/utils/frontmatter.d.ts.map +1 -0
  788. package/dist/runtime/utils/frontmatter.js +27 -0
  789. package/dist/runtime/utils/frontmatter.js.map +1 -0
  790. package/dist/runtime/utils/fs-watch.d.ts +5 -0
  791. package/dist/runtime/utils/fs-watch.d.ts.map +1 -0
  792. package/dist/runtime/utils/fs-watch.js +25 -0
  793. package/dist/runtime/utils/fs-watch.js.map +1 -0
  794. package/dist/runtime/utils/git.d.ts +26 -0
  795. package/dist/runtime/utils/git.d.ts.map +1 -0
  796. package/dist/runtime/utils/git.js +195 -0
  797. package/dist/runtime/utils/git.js.map +1 -0
  798. package/dist/runtime/utils/html.d.ts +7 -0
  799. package/dist/runtime/utils/html.d.ts.map +1 -0
  800. package/dist/runtime/utils/html.js +40 -0
  801. package/dist/runtime/utils/html.js.map +1 -0
  802. package/dist/runtime/utils/image-convert.d.ts +10 -0
  803. package/dist/runtime/utils/image-convert.d.ts.map +1 -0
  804. package/dist/runtime/utils/image-convert.js +45 -0
  805. package/dist/runtime/utils/image-convert.js.map +1 -0
  806. package/dist/runtime/utils/image-process.d.ts +18 -0
  807. package/dist/runtime/utils/image-process.d.ts.map +1 -0
  808. package/dist/runtime/utils/image-process.js +83 -0
  809. package/dist/runtime/utils/image-process.js.map +1 -0
  810. package/dist/runtime/utils/image-resize-core.d.ts +30 -0
  811. package/dist/runtime/utils/image-resize-core.d.ts.map +1 -0
  812. package/dist/runtime/utils/image-resize-core.js +124 -0
  813. package/dist/runtime/utils/image-resize-core.js.map +1 -0
  814. package/dist/runtime/utils/image-resize-worker.d.ts +2 -0
  815. package/dist/runtime/utils/image-resize-worker.d.ts.map +1 -0
  816. package/dist/runtime/utils/image-resize-worker.js +31 -0
  817. package/dist/runtime/utils/image-resize-worker.js.map +1 -0
  818. package/dist/runtime/utils/image-resize.d.ts +16 -0
  819. package/dist/runtime/utils/image-resize.d.ts.map +1 -0
  820. package/dist/runtime/utils/image-resize.js +97 -0
  821. package/dist/runtime/utils/image-resize.js.map +1 -0
  822. package/dist/runtime/utils/json.d.ts +3 -0
  823. package/dist/runtime/utils/json.d.ts.map +1 -0
  824. package/dist/runtime/utils/json.js +7 -0
  825. package/dist/runtime/utils/json.js.map +1 -0
  826. package/dist/runtime/utils/management-http.d.ts +25 -0
  827. package/dist/runtime/utils/management-http.d.ts.map +1 -0
  828. package/dist/runtime/utils/management-http.js +54 -0
  829. package/dist/runtime/utils/management-http.js.map +1 -0
  830. package/dist/runtime/utils/mime.d.ts +3 -0
  831. package/dist/runtime/utils/mime.d.ts.map +1 -0
  832. package/dist/runtime/utils/mime.js +110 -0
  833. package/dist/runtime/utils/mime.js.map +1 -0
  834. package/dist/runtime/utils/open-browser.d.ts +9 -0
  835. package/dist/runtime/utils/open-browser.d.ts.map +1 -0
  836. package/dist/runtime/utils/open-browser.js +22 -0
  837. package/dist/runtime/utils/open-browser.js.map +1 -0
  838. package/dist/runtime/utils/paths.d.ts +34 -0
  839. package/dist/runtime/utils/paths.d.ts.map +1 -0
  840. package/dist/runtime/utils/paths.js +114 -0
  841. package/dist/runtime/utils/paths.js.map +1 -0
  842. package/dist/runtime/utils/photon.d.ts +21 -0
  843. package/dist/runtime/utils/photon.d.ts.map +1 -0
  844. package/dist/runtime/utils/photon.js +121 -0
  845. package/dist/runtime/utils/photon.js.map +1 -0
  846. package/dist/runtime/utils/pi-user-agent.d.ts +2 -0
  847. package/dist/runtime/utils/pi-user-agent.d.ts.map +1 -0
  848. package/dist/runtime/utils/pi-user-agent.js +5 -0
  849. package/dist/runtime/utils/pi-user-agent.js.map +1 -0
  850. package/dist/runtime/utils/shell.d.ts +34 -0
  851. package/dist/runtime/utils/shell.d.ts.map +1 -0
  852. package/dist/runtime/utils/shell.js +214 -0
  853. package/dist/runtime/utils/shell.js.map +1 -0
  854. package/dist/runtime/utils/sleep.d.ts +5 -0
  855. package/dist/runtime/utils/sleep.d.ts.map +1 -0
  856. package/dist/runtime/utils/sleep.js +17 -0
  857. package/dist/runtime/utils/sleep.js.map +1 -0
  858. package/dist/runtime/utils/syntax-highlight.d.ts +13 -0
  859. package/dist/runtime/utils/syntax-highlight.d.ts.map +1 -0
  860. package/dist/runtime/utils/syntax-highlight.js +177 -0
  861. package/dist/runtime/utils/syntax-highlight.js.map +1 -0
  862. package/dist/runtime/utils/text.d.ts +8 -0
  863. package/dist/runtime/utils/text.d.ts.map +1 -0
  864. package/dist/runtime/utils/text.js +9 -0
  865. package/dist/runtime/utils/text.js.map +1 -0
  866. package/dist/runtime/utils/tool-result-images.d.ts +19 -0
  867. package/dist/runtime/utils/tool-result-images.d.ts.map +1 -0
  868. package/dist/runtime/utils/tool-result-images.js +45 -0
  869. package/dist/runtime/utils/tool-result-images.js.map +1 -0
  870. package/dist/runtime/utils/tools-manager.d.ts +12 -0
  871. package/dist/runtime/utils/tools-manager.d.ts.map +1 -0
  872. package/dist/runtime/utils/tools-manager.js +321 -0
  873. package/dist/runtime/utils/tools-manager.js.map +1 -0
  874. package/dist/runtime/utils/version-check.d.ts +19 -0
  875. package/dist/runtime/utils/version-check.d.ts.map +1 -0
  876. package/dist/runtime/utils/version-check.js +79 -0
  877. package/dist/runtime/utils/version-check.js.map +1 -0
  878. package/dist/runtime/utils/windows-self-update.d.ts +3 -0
  879. package/dist/runtime/utils/windows-self-update.d.ts.map +1 -0
  880. package/dist/runtime/utils/windows-self-update.js +77 -0
  881. package/dist/runtime/utils/windows-self-update.js.map +1 -0
  882. package/dist/update.js +134 -0
  883. package/dist/workflows.js +391 -0
  884. package/docs/compaction.md +416 -0
  885. package/docs/containerization.md +111 -0
  886. package/docs/custom-provider.md +777 -0
  887. package/docs/development.md +71 -0
  888. package/docs/docs.json +156 -0
  889. package/docs/environment-variables.md +94 -0
  890. package/docs/extensions.md +3002 -0
  891. package/docs/images/doom-extension.png +0 -0
  892. package/docs/images/exy.png +0 -0
  893. package/docs/images/interactive-mode.png +0 -0
  894. package/docs/images/tree-view.png +0 -0
  895. package/docs/index.md +84 -0
  896. package/docs/json.md +98 -0
  897. package/docs/keybindings.md +236 -0
  898. package/docs/llama-cpp.md +101 -0
  899. package/docs/models.md +571 -0
  900. package/docs/packages.md +228 -0
  901. package/docs/prompt-templates.md +96 -0
  902. package/docs/providers.md +317 -0
  903. package/docs/quickstart.md +167 -0
  904. package/docs/rpc.md +1618 -0
  905. package/docs/sdk.md +1219 -0
  906. package/docs/security.md +59 -0
  907. package/docs/session-format.md +438 -0
  908. package/docs/sessions.md +145 -0
  909. package/docs/settings.md +361 -0
  910. package/docs/shell-aliases.md +13 -0
  911. package/docs/skills.md +232 -0
  912. package/docs/terminal-setup.md +165 -0
  913. package/docs/termux.md +127 -0
  914. package/docs/themes.md +320 -0
  915. package/docs/tmux.md +63 -0
  916. package/docs/tui.md +942 -0
  917. package/docs/usage.md +310 -0
  918. package/docs/windows.md +39 -0
  919. package/examples/README.md +25 -0
  920. package/examples/extensions/README.md +213 -0
  921. package/examples/extensions/auto-commit-on-exit.ts +49 -0
  922. package/examples/extensions/bash-spawn-hook.ts +30 -0
  923. package/examples/extensions/bookmark.ts +50 -0
  924. package/examples/extensions/border-status-editor.ts +150 -0
  925. package/examples/extensions/built-in-tool-renderer.ts +249 -0
  926. package/examples/extensions/claude-rules.ts +86 -0
  927. package/examples/extensions/commands.ts +72 -0
  928. package/examples/extensions/confirm-destructive.ts +59 -0
  929. package/examples/extensions/custom-compaction.ts +117 -0
  930. package/examples/extensions/custom-footer.ts +64 -0
  931. package/examples/extensions/custom-header.ts +73 -0
  932. package/examples/extensions/custom-provider-anthropic/index.ts +611 -0
  933. package/examples/extensions/custom-provider-anthropic/package-lock.json +24 -0
  934. package/examples/extensions/custom-provider-anthropic/package.json +19 -0
  935. package/examples/extensions/custom-provider-gitlab-duo/index.ts +405 -0
  936. package/examples/extensions/custom-provider-gitlab-duo/package.json +16 -0
  937. package/examples/extensions/custom-provider-gitlab-duo/test.ts +82 -0
  938. package/examples/extensions/dirty-repo-guard.ts +56 -0
  939. package/examples/extensions/doom-overlay/README.md +46 -0
  940. package/examples/extensions/doom-overlay/doom/build/doom.js +21 -0
  941. package/examples/extensions/doom-overlay/doom/build/doom.wasm +0 -0
  942. package/examples/extensions/doom-overlay/doom/build.sh +152 -0
  943. package/examples/extensions/doom-overlay/doom/doomgeneric_pi.c +72 -0
  944. package/examples/extensions/doom-overlay/doom-component.ts +132 -0
  945. package/examples/extensions/doom-overlay/doom-engine.ts +173 -0
  946. package/examples/extensions/doom-overlay/doom-keys.ts +104 -0
  947. package/examples/extensions/doom-overlay/index.ts +74 -0
  948. package/examples/extensions/doom-overlay/wad-finder.ts +55 -0
  949. package/examples/extensions/dynamic-resources/SKILL.md +8 -0
  950. package/examples/extensions/dynamic-resources/dynamic.json +79 -0
  951. package/examples/extensions/dynamic-resources/dynamic.md +5 -0
  952. package/examples/extensions/dynamic-resources/index.ts +15 -0
  953. package/examples/extensions/dynamic-tools.ts +74 -0
  954. package/examples/extensions/entry-renderer.ts +41 -0
  955. package/examples/extensions/event-bus.ts +43 -0
  956. package/examples/extensions/file-trigger.ts +41 -0
  957. package/examples/extensions/git-checkpoint.ts +53 -0
  958. package/examples/extensions/git-merge-and-resolve.ts +115 -0
  959. package/examples/extensions/github-issue-autocomplete.ts +185 -0
  960. package/examples/extensions/gondolin/index.ts +531 -0
  961. package/examples/extensions/gondolin/package-lock.json +185 -0
  962. package/examples/extensions/gondolin/package.json +19 -0
  963. package/examples/extensions/handoff.ts +190 -0
  964. package/examples/extensions/hello.ts +26 -0
  965. package/examples/extensions/hidden-thinking-label.ts +53 -0
  966. package/examples/extensions/inline-bash.ts +94 -0
  967. package/examples/extensions/input-transform-streaming.ts +39 -0
  968. package/examples/extensions/input-transform.ts +43 -0
  969. package/examples/extensions/interactive-shell.ts +196 -0
  970. package/examples/extensions/kimi-deferred-tools.ts +61 -0
  971. package/examples/extensions/mac-system-theme.ts +47 -0
  972. package/examples/extensions/message-renderer.ts +59 -0
  973. package/examples/extensions/minimal-mode.ts +426 -0
  974. package/examples/extensions/modal-editor.ts +85 -0
  975. package/examples/extensions/model-status.ts +31 -0
  976. package/examples/extensions/notify.ts +57 -0
  977. package/examples/extensions/overlay-qa-tests.ts +1450 -0
  978. package/examples/extensions/overlay-test.ts +153 -0
  979. package/examples/extensions/permission-gate.ts +34 -0
  980. package/examples/extensions/pirate.ts +47 -0
  981. package/examples/extensions/plan-mode/README.md +66 -0
  982. package/examples/extensions/plan-mode/index.ts +390 -0
  983. package/examples/extensions/plan-mode/utils.ts +168 -0
  984. package/examples/extensions/preset.ts +436 -0
  985. package/examples/extensions/project-trust.ts +64 -0
  986. package/examples/extensions/prompt-customizer.ts +97 -0
  987. package/examples/extensions/protected-paths.ts +30 -0
  988. package/examples/extensions/provider-payload.ts +18 -0
  989. package/examples/extensions/qna.ts +118 -0
  990. package/examples/extensions/question.ts +286 -0
  991. package/examples/extensions/questionnaire.ts +448 -0
  992. package/examples/extensions/rainbow-editor.ts +88 -0
  993. package/examples/extensions/reload-runtime.ts +37 -0
  994. package/examples/extensions/rpc-demo.ts +118 -0
  995. package/examples/extensions/sandbox/index.ts +321 -0
  996. package/examples/extensions/sandbox/package-lock.json +92 -0
  997. package/examples/extensions/sandbox/package.json +19 -0
  998. package/examples/extensions/send-user-message.ts +97 -0
  999. package/examples/extensions/session-name.ts +27 -0
  1000. package/examples/extensions/shutdown-command.ts +63 -0
  1001. package/examples/extensions/snake.ts +343 -0
  1002. package/examples/extensions/space-invaders.ts +560 -0
  1003. package/examples/extensions/ssh.ts +220 -0
  1004. package/examples/extensions/status-line.ts +32 -0
  1005. package/examples/extensions/structured-output.ts +65 -0
  1006. package/examples/extensions/subagent/README.md +177 -0
  1007. package/examples/extensions/subagent/agents/planner.md +37 -0
  1008. package/examples/extensions/subagent/agents/reviewer.md +35 -0
  1009. package/examples/extensions/subagent/agents/scout.md +50 -0
  1010. package/examples/extensions/subagent/agents/worker.md +24 -0
  1011. package/examples/extensions/subagent/agents.ts +157 -0
  1012. package/examples/extensions/subagent/index.ts +1038 -0
  1013. package/examples/extensions/subagent/prompts/implement-and-review.md +10 -0
  1014. package/examples/extensions/subagent/prompts/implement.md +10 -0
  1015. package/examples/extensions/subagent/prompts/scout-and-plan.md +9 -0
  1016. package/examples/extensions/summarize.ts +199 -0
  1017. package/examples/extensions/system-prompt-header.ts +17 -0
  1018. package/examples/extensions/tic-tac-toe.ts +1008 -0
  1019. package/examples/extensions/timed-confirm.ts +70 -0
  1020. package/examples/extensions/titlebar-spinner.ts +58 -0
  1021. package/examples/extensions/todo.ts +297 -0
  1022. package/examples/extensions/tool-override.ts +144 -0
  1023. package/examples/extensions/tools.ts +146 -0
  1024. package/examples/extensions/trigger-compact.ts +50 -0
  1025. package/examples/extensions/truncated-tool.ts +195 -0
  1026. package/examples/extensions/widget-placement.ts +9 -0
  1027. package/examples/extensions/with-deps/index.ts +32 -0
  1028. package/examples/extensions/with-deps/package-lock.json +31 -0
  1029. package/examples/extensions/with-deps/package.json +22 -0
  1030. package/examples/extensions/working-indicator.ts +123 -0
  1031. package/examples/extensions/working-message-test.ts +25 -0
  1032. package/examples/rpc-extension-ui.ts +641 -0
  1033. package/examples/sdk/01-minimal.ts +26 -0
  1034. package/examples/sdk/02-custom-model.ts +49 -0
  1035. package/examples/sdk/03-custom-prompt.ts +75 -0
  1036. package/examples/sdk/04-skills.ts +55 -0
  1037. package/examples/sdk/05-tools.ts +48 -0
  1038. package/examples/sdk/06-extensions.ts +99 -0
  1039. package/examples/sdk/07-context-files.ts +47 -0
  1040. package/examples/sdk/08-prompt-templates.ts +51 -0
  1041. package/examples/sdk/09-api-keys-and-oauth.ts +34 -0
  1042. package/examples/sdk/10-settings.ts +53 -0
  1043. package/examples/sdk/11-sessions.ts +52 -0
  1044. package/examples/sdk/12-full-control.ts +74 -0
  1045. package/examples/sdk/13-session-runtime.ts +67 -0
  1046. package/examples/sdk/README.md +140 -0
  1047. package/package.json +65 -12
  1048. package/upstream.json +6 -0
  1049. package/workflows/cm/LICENSE +21 -0
  1050. package/workflows/cm/README.md +333 -0
  1051. package/workflows/cm/THIRD_PARTY_NOTICES.md +29 -0
  1052. package/workflows/cm/VERSION +1 -0
  1053. package/workflows/cm/agents/cm-backend-agent.md +34 -0
  1054. package/workflows/cm/agents/cm-contract-agent.md +34 -0
  1055. package/workflows/cm/agents/cm-database-agent.md +34 -0
  1056. package/workflows/cm/agents/cm-frontend-agent.md +33 -0
  1057. package/workflows/cm/agents/cm-miniprogram-agent.md +33 -0
  1058. package/workflows/cm/agents/cm-ui-agent.md +34 -0
  1059. package/workflows/cm/assets/docs/command-picker-mobile.svg +56 -0
  1060. package/workflows/cm/assets/docs/command-picker.svg +56 -0
  1061. package/workflows/cm/assets/docs/user-guide-hero-mobile.svg +35 -0
  1062. package/workflows/cm/assets/docs/user-guide-hero.svg +36 -0
  1063. package/workflows/cm/assets/readme/delivery-flow.svg +86 -0
  1064. package/workflows/cm/assets/readme/hero.svg +77 -0
  1065. package/workflows/cm/assets/readme/recovery-record.svg +73 -0
  1066. package/workflows/cm/assets/readme/test-evidence.svg +64 -0
  1067. package/workflows/cm/compat/claude-commands/cm-ai.md +3 -0
  1068. package/workflows/cm/compat/claude-commands/cm-check.md +3 -0
  1069. package/workflows/cm/compat/claude-commands/cm-fix.md +3 -0
  1070. package/workflows/cm/compat/claude-commands/cm-idea.md +3 -0
  1071. package/workflows/cm/compat/claude-commands/cm-init.md +3 -0
  1072. package/workflows/cm/compat/claude-commands/cm-prd.md +3 -0
  1073. package/workflows/cm/compat/claude-commands/cm-refactor.md +3 -0
  1074. package/workflows/cm/compat/claude-commands/cm-test.md +3 -0
  1075. package/workflows/cm/docs/architecture.md +130 -0
  1076. package/workflows/cm/docs/fixes/.reviews/fix-manifest-runtime-checkbox-drift-r1.md +33 -0
  1077. package/workflows/cm/docs/fixes/.reviews/fix-manifest-runtime-checkbox-drift-r2.md +31 -0
  1078. package/workflows/cm/docs/fixes/.reviews/fix-model-call-boundary-identity-T-FIX-model-call-boundary-identity-a1-handoff.json +56 -0
  1079. package/workflows/cm/docs/fixes/.reviews/fix-model-call-boundary-identity-T-FIX-model-call-boundary-identity-a2-handoff.json +85 -0
  1080. package/workflows/cm/docs/fixes/.reviews/fix-model-call-boundary-identity-T-FIX-model-call-boundary-identity-r1.md +53 -0
  1081. package/workflows/cm/docs/fixes/.reviews/fix-model-call-boundary-identity-T-FIX-model-call-boundary-identity-r2.md +80 -0
  1082. package/workflows/cm/docs/fixes/.reviews/fix-review-evidence-scope-honesty-T-FIX-review-evidence-scope-honesty-a1-handoff.json +35 -0
  1083. package/workflows/cm/docs/fixes/.reviews/fix-review-evidence-scope-honesty-T-FIX-review-evidence-scope-honesty-r1.md +33 -0
  1084. package/workflows/cm/docs/fixes/.reviews/fix-windows-cp1252-log-output-r1.md +30 -0
  1085. package/workflows/cm/docs/fixes/.reviews/fix-windows-cp1252-log-output-r2.md +16 -0
  1086. package/workflows/cm/docs/fixes/.reviews/openai-compatible-depth-fixture-T-FIX-openai-compatible-depth-fixture-a1-handoff.json +40 -0
  1087. package/workflows/cm/docs/fixes/.reviews/openai-compatible-depth-fixture-T-FIX-openai-compatible-depth-fixture-r1.md +30 -0
  1088. package/workflows/cm/docs/fixes/20260729-windows-cp1252-log-output.md +65 -0
  1089. package/workflows/cm/docs/fixes/20260804-manifest-runtime-checkbox-drift.md +67 -0
  1090. package/workflows/cm/docs/fixes/20260806-model-call-boundary-identity.md +80 -0
  1091. package/workflows/cm/docs/fixes/20260807-prelanding-integrity.md +58 -0
  1092. package/workflows/cm/docs/fixes/20260826-openai-compatible-depth-fixture.md +39 -0
  1093. package/workflows/cm/docs/installation.md +149 -0
  1094. package/workflows/cm/docs/sample-prd/prd-funding-rate-alert.md +42 -0
  1095. package/workflows/cm/docs/sample-specs/docs//351/234/200/346/261/202/347/244/272/344/276/213.md +24 -0
  1096. package/workflows/cm/docs/user-guide.md +521 -0
  1097. package/workflows/cm/docs//351/207/215/346/236/204/346/265/201/347/250/213/350/256/276/350/256/241/README.md +19 -0
  1098. package/workflows/cm/docs//351/207/215/346/236/204/346/265/201/347/250/213/350/256/276/350/256/241/refactor-flow.excalidraw +3650 -0
  1099. package/workflows/cm/docs//351/207/215/346/236/204/346/265/201/347/250/213/350/256/276/350/256/241/refactor-flow.mp4 +0 -0
  1100. package/workflows/cm/docs//351/207/215/346/236/204/346/265/201/347/250/213/350/256/276/350/256/241/refactor-flow.png +0 -0
  1101. package/workflows/cm/docs//351/207/215/346/236/204/346/265/201/347/250/213/350/256/276/350/256/241/refactor-flow.spec.json +223 -0
  1102. package/workflows/cm/package.json +45 -0
  1103. package/workflows/cm/runtime/external-expert.md +302 -0
  1104. package/workflows/cm/runtime/logging.md +206 -0
  1105. package/workflows/cm/runtime/model-efficiency.md +201 -0
  1106. package/workflows/cm/runtime/orchestration.md +113 -0
  1107. package/workflows/cm/runtime/project-context.md +37 -0
  1108. package/workflows/cm/runtime/review.md +114 -0
  1109. package/workflows/cm/runtime/task-gates.md +114 -0
  1110. package/workflows/cm/runtime/task-handoff.schema.json +103 -0
  1111. package/workflows/cm/runtime/test-contract.md +212 -0
  1112. package/workflows/cm/runtime/workflow-config.md +115 -0
  1113. package/workflows/cm/runtime/workflow-routing.md +82 -0
  1114. package/workflows/cm/scripts/cm-check-runtime.ps1 +69 -0
  1115. package/workflows/cm/scripts/cm-check-runtime.sh +866 -0
  1116. package/workflows/cm/scripts/cm-log-event.py +1270 -0
  1117. package/workflows/cm/scripts/cm-openai-compatible-call.py +661 -0
  1118. package/workflows/cm/scripts/cm-prd-review-gate.py +319 -0
  1119. package/workflows/cm/scripts/cm-prd-timing.py +272 -0
  1120. package/workflows/cm/scripts/cm-spec-manifest.py +171 -0
  1121. package/workflows/cm/scripts/cm-task-gate.py +760 -0
  1122. package/workflows/cm/scripts/cm-usage-report.py +516 -0
  1123. package/workflows/cm/scripts/cm_workflow_config.py +612 -0
  1124. package/workflows/cm/scripts/scan-public-safety.py +89 -0
  1125. package/workflows/cm/scripts/test-cm-log-event.py +1213 -0
  1126. package/workflows/cm/scripts/test-cm-openai-compatible-call.py +1185 -0
  1127. package/workflows/cm/scripts/test-cm-prd-review-gate.py +243 -0
  1128. package/workflows/cm/scripts/test-cm-prd-timing.py +168 -0
  1129. package/workflows/cm/scripts/test-cm-usage-report.py +584 -0
  1130. package/workflows/cm/scripts/test-shell-compat.sh +338 -0
  1131. package/workflows/cm/scripts/test-spec-manifest.py +220 -0
  1132. package/workflows/cm/scripts/test-task-gate.py +540 -0
  1133. package/workflows/cm/scripts/test-workflow-config.py +394 -0
  1134. package/workflows/cm/scripts/validate-public-repo.py +200 -0
  1135. package/workflows/cm/scripts/validate-test-cases.py +127 -0
  1136. package/workflows/cm/skills/cm-ai/SKILL.md +120 -0
  1137. package/workflows/cm/skills/cm-ai/references/N1-init.md +92 -0
  1138. package/workflows/cm/skills/cm-ai/references/N2-enter-feature.md +38 -0
  1139. package/workflows/cm/skills/cm-ai/references/N3-execute-task.md +99 -0
  1140. package/workflows/cm/skills/cm-ai/references/N4-review.md +96 -0
  1141. package/workflows/cm/skills/cm-ai/references/N5-mark-done.md +107 -0
  1142. package/workflows/cm/skills/cm-ai/references/N6-qa-eval.md +102 -0
  1143. package/workflows/cm/skills/cm-ai/references/N7-context.md +23 -0
  1144. package/workflows/cm/skills/cm-ai/references/N8-finish.md +97 -0
  1145. package/workflows/cm/skills/cm-backend-engineer/SKILL.md +100 -0
  1146. package/workflows/cm/skills/cm-check/SKILL.md +60 -0
  1147. package/workflows/cm/skills/cm-contract-engineer/SKILL.md +136 -0
  1148. package/workflows/cm/skills/cm-database-engineer/SKILL.md +89 -0
  1149. package/workflows/cm/skills/cm-devops-engineer/SKILL.md +137 -0
  1150. package/workflows/cm/skills/cm-doc-syncer/SKILL.md +150 -0
  1151. package/workflows/cm/skills/cm-finance-expert/SKILL.md +85 -0
  1152. package/workflows/cm/skills/cm-fix/SKILL.md +159 -0
  1153. package/workflows/cm/skills/cm-frontend-engineer/SKILL.md +127 -0
  1154. package/workflows/cm/skills/cm-idea/SKILL.md +42 -0
  1155. package/workflows/cm/skills/cm-idea/references/domains/trading.md +97 -0
  1156. package/workflows/cm/skills/cm-idea/references/example-prd.md +92 -0
  1157. package/workflows/cm/skills/cm-idea/references/idea-to-prd.md +282 -0
  1158. package/workflows/cm/skills/cm-init/SKILL.md +158 -0
  1159. package/workflows/cm/skills/cm-miniprogram-engineer/SKILL.md +141 -0
  1160. package/workflows/cm/skills/cm-miniprogram-engineer/references/platform-readiness.md +58 -0
  1161. package/workflows/cm/skills/cm-miniprogram-engineer/references/release-checklist.md +59 -0
  1162. package/workflows/cm/skills/cm-prd/SKILL.md +521 -0
  1163. package/workflows/cm/skills/cm-prd/references/brownfield.md +13 -0
  1164. package/workflows/cm/skills/cm-prd/references/change-mode.md +145 -0
  1165. package/workflows/cm/skills/cm-prd/references/context-scope.md +62 -0
  1166. package/workflows/cm/skills/cm-prd/references/greenfield.md +80 -0
  1167. package/workflows/cm/skills/cm-prd/references/phase-timing.md +60 -0
  1168. package/workflows/cm/skills/cm-prd/references/spec-self-check.md +22 -0
  1169. package/workflows/cm/skills/cm-product-manager/SKILL.md +83 -0
  1170. package/workflows/cm/skills/cm-qa-engineer/SKILL.md +142 -0
  1171. package/workflows/cm/skills/cm-refactor/SKILL.md +209 -0
  1172. package/workflows/cm/skills/cm-test/SKILL.md +259 -0
  1173. package/workflows/cm/skills/cm-ui-engineer/SKILL.md +105 -0
  1174. package/workflows/cm/skills/codebase-context/SKILL.md +489 -0
  1175. package/workflows/cm/skills/darwin-skill/NOTICE.md +26 -0
  1176. package/workflows/cm/skills/darwin-skill/README.md +272 -0
  1177. package/workflows/cm/skills/darwin-skill/SKILL.md +492 -0
  1178. package/workflows/cm/skills/darwin-skill/references/runtime-neutrality.md +68 -0
  1179. package/workflows/cm/skills/darwin-skill/references/skilllens-evidence.md +142 -0
  1180. package/workflows/cm/skills/darwin-skill/scripts/screenshot.mjs +71 -0
  1181. package/workflows/cm/skills/darwin-skill/templates/result-card-dark.html +698 -0
  1182. package/workflows/cm/skills/darwin-skill/templates/result-card-white.html +444 -0
  1183. package/workflows/cm/skills/darwin-skill/templates/result-card.html +616 -0
  1184. package/workflows/cm/skills/external-expert/SKILL.md +250 -0
  1185. package/workflows/cm/templates/arch-reference.md +68 -0
  1186. package/workflows/cm/templates/auto-update/cm-announce.sh +19 -0
  1187. package/workflows/cm/templates/auto-update/cm-update.sh +274 -0
  1188. package/workflows/cm/templates/cm-workflow.yml +52 -0
  1189. package/workflows/cm/templates/dashboard/dashboard.html +153 -0
  1190. package/workflows/cm/templates/dashboard/serve.sh +10 -0
  1191. package/workflows/cm/templates/hooks/pre-commit-cm-task-check +67 -0
  1192. package/workflows/cm/templates/pixel/cm-pixel.html +388 -0
  1193. package/workflows/cm/templates/pixel/cm-pixel.sh +212 -0
  1194. package/workflows/cm/templates/pixel/dev/README.md +20 -0
  1195. package/workflows/cm/templates/pixel/dev/atlas-preview.png +0 -0
  1196. package/workflows/cm/templates/pixel/dev/build.py +55 -0
  1197. package/workflows/cm/templates/pixel/dev/sheets/roguelikeChar_transparent.png +0 -0
  1198. package/workflows/cm/templates/pixel/dev/sheets/roguelikeCity_tilemap.png +0 -0
  1199. package/workflows/cm/templates/pixel/dev/sheets/roguelikeIndoor_transparent.png +0 -0
  1200. package/workflows/cm/templates/pixel/dev/template.html +388 -0
  1201. package/workflows/cm/templates/pixel/serve.sh +12 -0
  1202. package/workflows/cm/templates/refactor/cm-refactor-denies.json +14 -0
  1203. package/workflows/cm/templates/rules/backend-api.md +36 -0
  1204. package/workflows/cm/templates/rules/coding-style.md +44 -0
  1205. package/workflows/cm/templates/rules/database.md +27 -0
  1206. package/workflows/cm/templates/rules/finance.md +32 -0
  1207. package/workflows/cm/templates/rules/frontend.md +32 -0
  1208. package/workflows/cm/templates/rules/git-workflow.md +25 -0
  1209. package/workflows/cm/templates/rules/miniprogram.md +31 -0
  1210. package/workflows/cm/templates/rules/security.md +31 -0
  1211. package/workflows/cm/templates/rules/smart-contract.md +28 -0
  1212. package/workflows/cm/templates/rules/testing.md +36 -0
  1213. package/workflows/cm/templates/statusline/cm-statusline.sh +73 -0
  1214. package/workflows/cm/templates/ui-lens/cm-ui-lens-extract.mjs +55 -0
  1215. package/workflows.lock.json +39 -0
@@ -0,0 +1,1270 @@
1
+ #!/usr/bin/env python3
2
+ """Append one normalized CM event to project and user-global JSONL logs."""
3
+
4
+ from __future__ import annotations
5
+
6
+ import argparse
7
+ import json
8
+ import os
9
+ import re
10
+ import sys
11
+ import time
12
+ import uuid
13
+ from datetime import datetime, timezone
14
+ from pathlib import Path
15
+ from typing import Any, Dict, List, Optional, Tuple
16
+
17
+
18
+ SCHEMA_VERSION = 1
19
+ IDENTIFIER = re.compile(r"^[A-Za-z][A-Za-z0-9._-]{0,63}$")
20
+ RESOURCE_ID = re.compile(r"^[A-Za-z0-9][A-Za-z0-9._-]{0,127}$")
21
+ RUN_ID = re.compile(r"^[A-Za-z0-9][A-Za-z0-9._-]{7,127}$")
22
+ SENSITIVE_KEY = re.compile(
23
+ r"(api[_-]?key|authorization|cookie|password|passwd|private[_-]?key|"
24
+ r"recovery[_-]?code|secret|token)",
25
+ re.IGNORECASE,
26
+ )
27
+ RESERVED_FIELDS = {
28
+ "schema_version",
29
+ "event_id",
30
+ "run_id",
31
+ "at",
32
+ "workflow",
33
+ "event",
34
+ "phase",
35
+ "runtime",
36
+ "project",
37
+ "project_path",
38
+ "specs_path",
39
+ "detail",
40
+ }
41
+ TERMINAL_EVENTS = {"done", "run_done"}
42
+ RESOURCE_GUARDED_EVENTS = TERMINAL_EVENTS | {"task_done"}
43
+ RESOURCE_PHASES = {"acquired", "released", "cleanup_failed"}
44
+ TEST_RUN_GUARDED_EVENTS = TERMINAL_EVENTS | {"task_done"}
45
+ TEST_RUN_PHASES = {"start", "case_start", "case_complete", "case_blocked", "complete"}
46
+ MODEL_USAGE_TOKEN_FIELDS = {
47
+ "input_tokens",
48
+ "output_tokens",
49
+ "cache_read_tokens",
50
+ "cache_write_tokens",
51
+ }
52
+ MODEL_USAGE_STATES = {"observed", "unavailable"}
53
+ MODEL_USAGE_OUTCOMES = {"success", "error", "blocked", "cancelled"}
54
+ MODEL_USAGE_ALLOWED_FIELDS = MODEL_USAGE_TOKEN_FIELDS | {
55
+ "call_id",
56
+ "role",
57
+ "adapter",
58
+ "requested_model",
59
+ "effective_model",
60
+ "provider",
61
+ "source",
62
+ "purpose",
63
+ "stage",
64
+ "node",
65
+ "feature",
66
+ "task",
67
+ "usage_state",
68
+ "duration_ms",
69
+ "outcome",
70
+ "attempt",
71
+ }
72
+ MODEL_CALL_ALLOWED_FIELDS = {
73
+ "call_id",
74
+ "stage",
75
+ "role",
76
+ "adapter",
77
+ "requested_model",
78
+ "source",
79
+ "purpose",
80
+ }
81
+ MODEL_CALL_IDENTITY_FIELDS = (
82
+ "workflow",
83
+ "runtime",
84
+ "stage",
85
+ "role",
86
+ "adapter",
87
+ "requested_model",
88
+ "source",
89
+ "purpose",
90
+ )
91
+ LOCK_HANDLES = []
92
+
93
+
94
+ class UsageError(ValueError):
95
+ """User-facing input error."""
96
+
97
+
98
+ def parse_args() -> argparse.Namespace:
99
+ parser = argparse.ArgumentParser(
100
+ description="Write one CM Workflow event to project and global logs."
101
+ )
102
+ parser.add_argument("--workflow", required=True)
103
+ parser.add_argument("--event", required=True)
104
+ parser.add_argument("--phase")
105
+ parser.add_argument("--runtime", required=True)
106
+ parser.add_argument("--project")
107
+ parser.add_argument("--project-root")
108
+ parser.add_argument("--specs-dir")
109
+ parser.add_argument("--run-id")
110
+ parser.add_argument("--at")
111
+ parser.add_argument("--detail", required=True)
112
+ parser.add_argument("--data-json", default="{}")
113
+ return parser.parse_args()
114
+
115
+
116
+ def validate_identifier(label: str, value: Optional[str]) -> Optional[str]:
117
+ if value is not None and not IDENTIFIER.fullmatch(value):
118
+ raise UsageError(
119
+ f"{label} must match {IDENTIFIER.pattern!r}; got {value!r}"
120
+ )
121
+ return value
122
+
123
+
124
+ def parse_timestamp(raw: Optional[str]) -> Tuple[str, datetime]:
125
+ if raw is None:
126
+ parsed = datetime.now().astimezone()
127
+ else:
128
+ normalized = raw[:-1] + "+00:00" if raw.endswith("Z") else raw
129
+ try:
130
+ parsed = datetime.fromisoformat(normalized)
131
+ except ValueError as exc:
132
+ raise UsageError("--at must be an ISO-8601 timestamp") from exc
133
+ if parsed.tzinfo is None or parsed.utcoffset() is None:
134
+ raise UsageError("--at must include a timezone offset")
135
+ return parsed.isoformat(timespec="seconds"), parsed
136
+
137
+
138
+ def validate_detail(detail: str) -> str:
139
+ if not detail.strip():
140
+ raise UsageError("--detail cannot be empty")
141
+ if len(detail) > 500:
142
+ raise UsageError("--detail cannot exceed 500 characters")
143
+ if any(character in detail for character in ("\n", "\r", "\0")):
144
+ raise UsageError("--detail cannot contain control-line characters")
145
+ return detail
146
+
147
+
148
+ def reject_sensitive_keys(
149
+ value: Any,
150
+ path: str = "data",
151
+ allowed_sensitive_keys: Optional[set[str]] = None,
152
+ ) -> None:
153
+ allowed = allowed_sensitive_keys or set()
154
+ if isinstance(value, dict):
155
+ for key, child in value.items():
156
+ if not isinstance(key, str):
157
+ raise UsageError(f"{path} keys must be strings")
158
+ if SENSITIVE_KEY.search(key) and not (path == "data" and key in allowed):
159
+ raise UsageError(f"sensitive log field is forbidden: {path}.{key}")
160
+ reject_sensitive_keys(child, f"{path}.{key}", allowed)
161
+ elif isinstance(value, list):
162
+ for index, child in enumerate(value):
163
+ reject_sensitive_keys(child, f"{path}[{index}]", allowed)
164
+
165
+
166
+ def parse_data(raw: str, event: str) -> Dict[str, Any]:
167
+ if len(raw.encode("utf-8")) > 8192:
168
+ raise UsageError("--data-json cannot exceed 8192 UTF-8 bytes")
169
+ try:
170
+ value = json.loads(raw)
171
+ except json.JSONDecodeError as exc:
172
+ raise UsageError("--data-json must be a JSON object") from exc
173
+ if not isinstance(value, dict):
174
+ raise UsageError("--data-json must be a JSON object")
175
+ overlap = RESERVED_FIELDS.intersection(value)
176
+ if overlap:
177
+ raise UsageError(
178
+ "--data-json cannot override reserved fields: "
179
+ + ", ".join(sorted(overlap))
180
+ )
181
+ allowed = MODEL_USAGE_TOKEN_FIELDS if event == "model_usage" else set()
182
+ reject_sensitive_keys(value, allowed_sensitive_keys=allowed)
183
+ return value
184
+
185
+
186
+ def validate_short_text(label: str, value: Any, *, required: bool = False) -> None:
187
+ if value is None and not required:
188
+ return
189
+ if not isinstance(value, str) or not value.strip():
190
+ raise UsageError(f"model event requires a non-empty {label}")
191
+ if len(value) > 160 or any(character in value for character in ("\n", "\r", "\0")):
192
+ raise UsageError(f"model event {label} must be one line and at most 160 characters")
193
+
194
+
195
+ def validate_model_usage_event(
196
+ event: str,
197
+ phase: Optional[str],
198
+ data: Dict[str, Any],
199
+ ) -> None:
200
+ if event != "model_usage":
201
+ return
202
+ unknown = set(data).difference(MODEL_USAGE_ALLOWED_FIELDS)
203
+ if unknown:
204
+ raise UsageError(
205
+ "model_usage contains unsupported fields: " + ", ".join(sorted(unknown))
206
+ )
207
+ if phase != "complete":
208
+ raise UsageError("model_usage events require phase complete")
209
+ call_id = data.get("call_id")
210
+ if not isinstance(call_id, str) or not RESOURCE_ID.fullmatch(call_id):
211
+ raise UsageError("model_usage requires a valid call_id")
212
+ role = data.get("role")
213
+ if not isinstance(role, str) or not IDENTIFIER.fullmatch(role):
214
+ raise UsageError("model_usage requires a valid role")
215
+ usage_state = data.get("usage_state")
216
+ if usage_state not in MODEL_USAGE_STATES:
217
+ raise UsageError("model_usage usage_state must be observed or unavailable")
218
+ outcome = data.get("outcome")
219
+ if outcome not in MODEL_USAGE_OUTCOMES:
220
+ raise UsageError(
221
+ "model_usage outcome must be success, error, blocked, or cancelled"
222
+ )
223
+ for field in (
224
+ "adapter",
225
+ "requested_model",
226
+ "source",
227
+ "purpose",
228
+ "stage",
229
+ ):
230
+ validate_short_text(field, data.get(field), required=True)
231
+ for field in (
232
+ "effective_model",
233
+ "provider",
234
+ "node",
235
+ "feature",
236
+ "task",
237
+ ):
238
+ validate_short_text(field, data.get(field))
239
+ attempt = data.get("attempt")
240
+ if attempt is not None and (
241
+ isinstance(attempt, bool) or not isinstance(attempt, int) or attempt < 1
242
+ ):
243
+ raise UsageError("model_usage attempt must be a positive integer")
244
+ numeric_fields = MODEL_USAGE_TOKEN_FIELDS | {"duration_ms"}
245
+ present_numeric = numeric_fields.intersection(data)
246
+ if usage_state == "unavailable" and MODEL_USAGE_TOKEN_FIELDS.intersection(data):
247
+ raise UsageError("unavailable model_usage cannot contain token counts")
248
+ if usage_state == "observed":
249
+ for required_field in ("input_tokens", "output_tokens"):
250
+ if required_field not in data:
251
+ raise UsageError(
252
+ f"observed model_usage requires {required_field}"
253
+ )
254
+ for field in present_numeric:
255
+ value = data[field]
256
+ if isinstance(value, bool) or not isinstance(value, int) or value < 0:
257
+ raise UsageError(f"model_usage {field} must be a non-negative integer")
258
+
259
+
260
+ def validate_model_call_event(
261
+ event: str,
262
+ phase: Optional[str],
263
+ data: Dict[str, Any],
264
+ ) -> None:
265
+ if event != "model_call":
266
+ return
267
+ unknown = set(data).difference(MODEL_CALL_ALLOWED_FIELDS)
268
+ if unknown:
269
+ raise UsageError(
270
+ "model_call contains unsupported fields: " + ", ".join(sorted(unknown))
271
+ )
272
+ if phase != "claimed":
273
+ raise UsageError("model_call events require phase claimed")
274
+ call_id = data.get("call_id")
275
+ if not isinstance(call_id, str) or not RESOURCE_ID.fullmatch(call_id):
276
+ raise UsageError("model_call requires a valid call_id")
277
+ role = data.get("role")
278
+ if not isinstance(role, str) or not IDENTIFIER.fullmatch(role):
279
+ raise UsageError("model_call requires a valid role")
280
+ for field in (
281
+ "stage",
282
+ "adapter",
283
+ "requested_model",
284
+ "source",
285
+ "purpose",
286
+ ):
287
+ validate_short_text(field, data.get(field), required=True)
288
+
289
+
290
+ def model_call_identity(event: Dict[str, Any]) -> Tuple[str, ...]:
291
+ return tuple(str(event.get(field, "")) for field in MODEL_CALL_IDENTITY_FIELDS)
292
+
293
+
294
+ def validate_resource_event(
295
+ event: str,
296
+ phase: Optional[str],
297
+ data: Dict[str, Any],
298
+ ) -> None:
299
+ if event != "resource":
300
+ return
301
+ if phase not in RESOURCE_PHASES:
302
+ raise UsageError(
303
+ "resource events require phase acquired, released, or cleanup_failed"
304
+ )
305
+ resource_id = data.get("resource_id")
306
+ if not isinstance(resource_id, str) or not RESOURCE_ID.fullmatch(resource_id):
307
+ raise UsageError("resource events require a valid resource_id")
308
+ resource_kind = data.get("resource_kind")
309
+ if (
310
+ not isinstance(resource_kind, str)
311
+ or not IDENTIFIER.fullmatch(resource_kind)
312
+ ):
313
+ raise UsageError("resource events require a valid resource_kind")
314
+ if phase == "acquired" and data.get("cleanup_required") is not True:
315
+ raise UsageError("resource acquisition requires cleanup_required: true")
316
+
317
+
318
+ def validate_test_run_event(
319
+ event: str,
320
+ phase: Optional[str],
321
+ data: Dict[str, Any],
322
+ ) -> None:
323
+ if event != "test_run" or phase is None:
324
+ return
325
+ if phase not in TEST_RUN_PHASES:
326
+ raise UsageError(
327
+ "test_run events require phase start, case_start, case_complete, "
328
+ "case_blocked, or complete"
329
+ )
330
+ if phase.startswith("case_"):
331
+ case_id = data.get("case_id")
332
+ if not isinstance(case_id, str) or not RESOURCE_ID.fullmatch(case_id):
333
+ raise UsageError("test_run case events require a valid case_id")
334
+
335
+
336
+ def resolve_directory(label: str, raw: Optional[str]) -> Optional[Path]:
337
+ if raw is None:
338
+ return None
339
+ path = Path(raw).expanduser().resolve(strict=False)
340
+ if not path.is_dir():
341
+ raise UsageError(f"{label} is not an existing directory: {path}")
342
+ return path
343
+
344
+
345
+ def generated_run_id() -> str:
346
+ stamp = datetime.now(timezone.utc).strftime("%Y%m%dT%H%M%SZ")
347
+ return f"{stamp}-{uuid.uuid4().hex[:8]}"
348
+
349
+
350
+ def load_pointer(path: Path) -> Optional[Dict[str, Any]]:
351
+ if not path.is_file():
352
+ return None
353
+ try:
354
+ value = json.loads(path.read_text(encoding="utf-8"))
355
+ except (OSError, json.JSONDecodeError):
356
+ return None
357
+ if not isinstance(value, dict):
358
+ return None
359
+ run_id = value.get("run_id")
360
+ if not isinstance(run_id, str) or not RUN_ID.fullmatch(run_id):
361
+ return None
362
+ return value
363
+
364
+
365
+ def load_project_run_state(
366
+ path: Optional[Path],
367
+ ) -> Tuple[Optional[str], Dict[str, str]]:
368
+ if path is None or not path.is_file():
369
+ return None, {}
370
+ latest_run_id = None
371
+ states: Dict[str, str] = {}
372
+ try:
373
+ with path.open(encoding="utf-8") as handle:
374
+ for line in handle:
375
+ try:
376
+ value = json.loads(line)
377
+ except json.JSONDecodeError:
378
+ continue
379
+ if not isinstance(value, dict):
380
+ continue
381
+ run_id = value.get("run_id")
382
+ event = value.get("event")
383
+ if not isinstance(run_id, str) or not RUN_ID.fullmatch(run_id):
384
+ continue
385
+ if not isinstance(event, str):
386
+ continue
387
+ latest_run_id = run_id
388
+ if event == "run_start":
389
+ states[run_id] = "running"
390
+ elif event in TERMINAL_EVENTS:
391
+ states[run_id] = "done"
392
+ elif run_id not in states:
393
+ states[run_id] = "running"
394
+ except OSError:
395
+ return None, {}
396
+ return latest_run_id, states
397
+
398
+
399
+ def select_run_id(
400
+ *,
401
+ explicit: Optional[str],
402
+ event: str,
403
+ pointer: Optional[Dict[str, Any]],
404
+ latest_project_run: Optional[str],
405
+ project_states: Dict[str, str],
406
+ ) -> Tuple[str, bool]:
407
+ if explicit is not None:
408
+ if not RUN_ID.fullmatch(explicit):
409
+ raise UsageError("invalid --run-id")
410
+ return explicit, event == "run_start"
411
+ if pointer and pointer.get("status") == "running":
412
+ pointer_run_id = str(pointer["run_id"])
413
+ if project_states.get(pointer_run_id) != "done":
414
+ return pointer_run_id, False
415
+ if (
416
+ pointer
417
+ and pointer.get("status") == "done"
418
+ and event in TERMINAL_EVENTS
419
+ ):
420
+ return str(pointer["run_id"]), False
421
+ if (
422
+ latest_project_run is not None
423
+ and project_states.get(latest_project_run) == "running"
424
+ ):
425
+ return latest_project_run, False
426
+ if (
427
+ latest_project_run is not None
428
+ and project_states.get(latest_project_run) == "done"
429
+ and event in TERMINAL_EVENTS
430
+ ):
431
+ return latest_project_run, False
432
+ return generated_run_id(), True
433
+
434
+
435
+ def compact_json(value: Dict[str, Any]) -> str:
436
+ return json.dumps(value, ensure_ascii=False, separators=(",", ":")) + "\n"
437
+
438
+
439
+ def canonical_json(value: Dict[str, Any]) -> str:
440
+ return json.dumps(
441
+ value,
442
+ ensure_ascii=False,
443
+ separators=(",", ":"),
444
+ sort_keys=True,
445
+ )
446
+
447
+
448
+ def deterministic_event_id(value: Dict[str, Any]) -> str:
449
+ identity = dict(value)
450
+ identity.pop("at", None)
451
+ identity.pop("event_id", None)
452
+ return str(uuid.uuid5(uuid.NAMESPACE_URL, canonical_json(identity)))
453
+
454
+
455
+ def find_jsonl_event(
456
+ path: Path, event_id: str
457
+ ) -> Optional[Dict[str, Any]]:
458
+ if not path.is_file():
459
+ return None
460
+ try:
461
+ with path.open(encoding="utf-8") as handle:
462
+ for line in handle:
463
+ try:
464
+ value = json.loads(line)
465
+ except json.JSONDecodeError:
466
+ continue
467
+ if isinstance(value, dict) and value.get("event_id") == event_id:
468
+ return value
469
+ except OSError:
470
+ return None
471
+ return None
472
+
473
+
474
+ def find_model_usage_call(
475
+ path: Path,
476
+ run_id: str,
477
+ call_id: str,
478
+ ) -> Optional[Dict[str, Any]]:
479
+ if not path.is_file():
480
+ return None
481
+ try:
482
+ with path.open(encoding="utf-8") as handle:
483
+ for line in handle:
484
+ try:
485
+ value = json.loads(line)
486
+ except json.JSONDecodeError:
487
+ continue
488
+ if (
489
+ isinstance(value, dict)
490
+ and value.get("run_id") == run_id
491
+ and value.get("event") == "model_usage"
492
+ and value.get("call_id") == call_id
493
+ ):
494
+ return value
495
+ except OSError:
496
+ return None
497
+ return None
498
+
499
+
500
+ def find_model_call_claim(
501
+ path: Path,
502
+ run_id: str,
503
+ call_id: str,
504
+ ) -> Optional[Dict[str, Any]]:
505
+ if not path.is_file():
506
+ return None
507
+ try:
508
+ with path.open(encoding="utf-8") as handle:
509
+ for line in handle:
510
+ try:
511
+ value = json.loads(line)
512
+ except json.JSONDecodeError:
513
+ continue
514
+ if (
515
+ isinstance(value, dict)
516
+ and value.get("run_id") == run_id
517
+ and value.get("event") == "model_call"
518
+ and value.get("phase") == "claimed"
519
+ and value.get("call_id") == call_id
520
+ ):
521
+ return value
522
+ except OSError:
523
+ return None
524
+ return None
525
+
526
+
527
+ def jsonl_has_event(path: Path, event_id: str) -> bool:
528
+ return find_jsonl_event(path, event_id) is not None
529
+
530
+
531
+ def load_resource_states(
532
+ path: Path,
533
+ run_id: str,
534
+ ) -> Dict[str, Tuple[str, str]]:
535
+ if not path.is_file():
536
+ return {}
537
+ states: Dict[str, Tuple[str, str]] = {}
538
+ with path.open(encoding="utf-8") as handle:
539
+ for line in handle:
540
+ try:
541
+ value = json.loads(line)
542
+ except json.JSONDecodeError as exc:
543
+ raise UsageError("resource state log contains invalid JSON") from exc
544
+ if (
545
+ not isinstance(value, dict)
546
+ or value.get("run_id") != run_id
547
+ or value.get("event") != "resource"
548
+ ):
549
+ continue
550
+ resource_id = value.get("resource_id")
551
+ resource_kind = value.get("resource_kind")
552
+ phase = value.get("phase")
553
+ if (
554
+ not isinstance(resource_id, str)
555
+ or not RESOURCE_ID.fullmatch(resource_id)
556
+ or not isinstance(resource_kind, str)
557
+ or not IDENTIFIER.fullmatch(resource_kind)
558
+ or phase not in RESOURCE_PHASES
559
+ ):
560
+ raise UsageError("resource state log contains a malformed event")
561
+ if phase == "acquired" and value.get("cleanup_required") is not True:
562
+ raise UsageError("resource acquisition is missing cleanup_required")
563
+ apply_resource_transition(
564
+ states,
565
+ resource_id,
566
+ resource_kind,
567
+ str(phase),
568
+ )
569
+ return states
570
+
571
+
572
+ def apply_resource_transition(
573
+ states: Dict[str, Tuple[str, str]],
574
+ resource_id: str,
575
+ resource_kind: str,
576
+ phase: str,
577
+ ) -> None:
578
+ previous = states.get(resource_id)
579
+ if previous is None:
580
+ if phase != "acquired":
581
+ raise UsageError("resource terminal phase has no acquisition")
582
+ states[resource_id] = (phase, resource_kind)
583
+ return
584
+
585
+ previous_phase, previous_kind = previous
586
+ if previous_kind != resource_kind:
587
+ raise UsageError("resource_kind does not match its acquisition")
588
+ if phase == "acquired":
589
+ if previous_phase != "acquired":
590
+ raise UsageError(
591
+ "released resource_id cannot be reused; acquire a new resource_id"
592
+ )
593
+ raise UsageError(
594
+ "active resource_id already has an acquisition; "
595
+ "acquire a new resource_id"
596
+ )
597
+ elif phase == "cleanup_failed" and previous_phase == "released":
598
+ raise UsageError("released resource cannot fail cleanup")
599
+ states[resource_id] = (phase, resource_kind)
600
+
601
+
602
+ def unclosed_resources(states: Dict[str, Tuple[str, str]]) -> List[str]:
603
+ return sorted(
604
+ resource_id
605
+ for resource_id, (phase, _) in states.items()
606
+ if phase in {"acquired", "cleanup_failed"}
607
+ )
608
+
609
+
610
+ def apply_test_run_transition(
611
+ active: bool,
612
+ open_cases: set[str],
613
+ phase: str,
614
+ case_id: Optional[str],
615
+ ) -> bool:
616
+ if phase == "start":
617
+ if active:
618
+ raise UsageError("test_run start has no preceding complete")
619
+ if open_cases:
620
+ raise UsageError("test_run state contains cases without an active run")
621
+ return True
622
+ if phase == "case_start":
623
+ if not active:
624
+ raise UsageError("test_run case_start has no active test run")
625
+ assert case_id is not None
626
+ if case_id in open_cases:
627
+ raise UsageError("test_run case already has an active case_start")
628
+ open_cases.add(case_id)
629
+ return active
630
+ if phase in {"case_complete", "case_blocked"}:
631
+ if not active:
632
+ raise UsageError("test_run case terminal phase has no active test run")
633
+ assert case_id is not None
634
+ if case_id not in open_cases:
635
+ raise UsageError("test_run case terminal phase has no case_start")
636
+ open_cases.remove(case_id)
637
+ return active
638
+ if not active:
639
+ raise UsageError("test_run complete has no active test run")
640
+ if open_cases:
641
+ raise UsageError("test_run complete has unfinished cases")
642
+ return False
643
+
644
+
645
+ def load_test_run_state(path: Path, run_id: str) -> Tuple[bool, set[str]]:
646
+ if not path.is_file():
647
+ return False, set()
648
+ active = False
649
+ open_cases: set[str] = set()
650
+ with path.open(encoding="utf-8") as handle:
651
+ for line in handle:
652
+ try:
653
+ value = json.loads(line)
654
+ except json.JSONDecodeError as exc:
655
+ raise UsageError("test_run state log contains invalid JSON") from exc
656
+ if (
657
+ not isinstance(value, dict)
658
+ or value.get("run_id") != run_id
659
+ or value.get("event") != "test_run"
660
+ or value.get("phase") is None
661
+ ):
662
+ continue
663
+ phase = value.get("phase")
664
+ if phase not in TEST_RUN_PHASES:
665
+ raise UsageError("test_run state log contains a malformed event")
666
+ case_id = value.get("case_id")
667
+ if phase.startswith("case_") and (
668
+ not isinstance(case_id, str) or not RESOURCE_ID.fullmatch(case_id)
669
+ ):
670
+ raise UsageError("test_run state log contains a malformed case event")
671
+ # Before invocation-level pairing was introduced, phased test records
672
+ # could contain a standalone complete event. Treat that historical
673
+ # shape as already closed; candidate writes still pass through the
674
+ # strict transition validator below and cannot create new orphans.
675
+ if phase == "complete" and not active and not open_cases:
676
+ continue
677
+ active = apply_test_run_transition(
678
+ active,
679
+ open_cases,
680
+ str(phase),
681
+ str(case_id) if isinstance(case_id, str) else None,
682
+ )
683
+ return active, open_cases
684
+
685
+
686
+ def index_has_status(path: Path, run_id: str, status: str) -> bool:
687
+ if not path.is_file():
688
+ return False
689
+ try:
690
+ with path.open(encoding="utf-8") as handle:
691
+ for line in handle:
692
+ try:
693
+ value = json.loads(line)
694
+ except json.JSONDecodeError:
695
+ continue
696
+ if (
697
+ isinstance(value, dict)
698
+ and value.get("run_id") == run_id
699
+ and value.get("status") == status
700
+ ):
701
+ return True
702
+ except OSError:
703
+ return False
704
+ return False
705
+
706
+
707
+ def append_line(path: Path, value: Dict[str, Any], *, private: bool) -> None:
708
+ path.parent.mkdir(parents=True, exist_ok=True)
709
+ mode = 0o600 if private else 0o644
710
+ descriptor = os.open(path, os.O_APPEND | os.O_CREAT | os.O_WRONLY, mode)
711
+ try:
712
+ os.write(descriptor, compact_json(value).encode("utf-8"))
713
+ os.fsync(descriptor)
714
+ finally:
715
+ os.close(descriptor)
716
+ if private and os.name != "nt":
717
+ os.chmod(path, 0o600)
718
+
719
+
720
+ def ensure_private_directory(path: Path) -> None:
721
+ path.mkdir(parents=True, exist_ok=True)
722
+ if os.name != "nt":
723
+ os.chmod(path, 0o700)
724
+
725
+
726
+ def acquire_file_lock(path: Path, *, private: bool, timeout: float = 10.0) -> None:
727
+ path.parent.mkdir(parents=True, exist_ok=True)
728
+ handle = path.open("a+b")
729
+ if private and os.name != "nt":
730
+ os.chmod(path, 0o600)
731
+ handle.seek(0, os.SEEK_END)
732
+ if handle.tell() == 0:
733
+ handle.write(b"0")
734
+ handle.flush()
735
+ deadline = time.monotonic() + timeout
736
+ while True:
737
+ try:
738
+ handle.seek(0)
739
+ if os.name == "nt":
740
+ import msvcrt
741
+
742
+ msvcrt.locking(handle.fileno(), msvcrt.LK_NBLCK, 1)
743
+ else:
744
+ import fcntl
745
+
746
+ fcntl.flock(handle.fileno(), fcntl.LOCK_EX | fcntl.LOCK_NB)
747
+ LOCK_HANDLES.append(handle)
748
+ return
749
+ except (OSError, BlockingIOError):
750
+ if time.monotonic() >= deadline:
751
+ handle.close()
752
+ raise TimeoutError(f"timed out waiting for log lock: {path}")
753
+ time.sleep(0.05)
754
+
755
+
756
+ def write_pointer(path: Path, value: Dict[str, Any]) -> None:
757
+ temporary = path.with_name(f"{path.name}.tmp.{os.getpid()}.{uuid.uuid4().hex}")
758
+ try:
759
+ temporary.write_text(compact_json(value), encoding="utf-8")
760
+ if os.name != "nt":
761
+ os.chmod(temporary, 0o644)
762
+ os.replace(temporary, path)
763
+ finally:
764
+ try:
765
+ temporary.unlink()
766
+ except FileNotFoundError:
767
+ pass
768
+
769
+
770
+ def project_name(explicit: Optional[str], project_root: Optional[Path]) -> str:
771
+ if explicit:
772
+ if len(explicit) > 120 or any(char in explicit for char in ("\n", "\r", "\0")):
773
+ raise UsageError("--project must be one line and at most 120 characters")
774
+ return explicit
775
+ return project_root.name if project_root else "unscoped"
776
+
777
+
778
+ def valid_pointer_global_log(
779
+ pointer: Optional[Dict[str, Any]],
780
+ global_home: Path,
781
+ run_id: str,
782
+ ) -> Optional[Path]:
783
+ if not pointer or pointer.get("run_id") != run_id:
784
+ return None
785
+ raw = pointer.get("global_log")
786
+ if not isinstance(raw, str):
787
+ return None
788
+ candidate = Path(raw).expanduser().resolve(strict=False)
789
+ try:
790
+ relative = candidate.relative_to(global_home)
791
+ except ValueError:
792
+ return None
793
+ parts = relative.parts
794
+ if (
795
+ len(parts) != 3
796
+ or parts[0] != "runs"
797
+ or not re.fullmatch(r"\d{4}-\d{2}", parts[1])
798
+ or parts[2] != f"{run_id}.jsonl"
799
+ ):
800
+ return None
801
+ return candidate
802
+
803
+
804
+ def select_global_log(
805
+ *,
806
+ global_home: Path,
807
+ run_id: str,
808
+ parsed_at: datetime,
809
+ pointer: Optional[Dict[str, Any]],
810
+ ) -> Path:
811
+ pointed = valid_pointer_global_log(pointer, global_home, run_id)
812
+ if pointed is not None:
813
+ return pointed
814
+ matches = sorted((global_home / "runs").glob(f"*/{run_id}.jsonl"))
815
+ if len(matches) > 1:
816
+ raise UsageError(
817
+ f"multiple global log files found for run_id {run_id}; "
818
+ "repair the local mirror before continuing"
819
+ )
820
+ if matches:
821
+ return matches[0].resolve(strict=False)
822
+ month = parsed_at.strftime("%Y-%m")
823
+ return global_home / "runs" / month / f"{run_id}.jsonl"
824
+
825
+
826
+ def main() -> int:
827
+ args = parse_args()
828
+ try:
829
+ workflow = str(validate_identifier("--workflow", args.workflow))
830
+ event_name = str(validate_identifier("--event", args.event))
831
+ phase = validate_identifier("--phase", args.phase)
832
+ runtime = str(validate_identifier("--runtime", args.runtime))
833
+ detail = validate_detail(args.detail)
834
+ data = parse_data(args.data_json, event_name)
835
+ validate_resource_event(event_name, phase, data)
836
+ validate_test_run_event(event_name, phase, data)
837
+ validate_model_usage_event(event_name, phase, data)
838
+ validate_model_call_event(event_name, phase, data)
839
+ at, parsed_at = parse_timestamp(args.at)
840
+ project_root = resolve_directory("--project-root", args.project_root)
841
+ specs_dir = resolve_directory("--specs-dir", args.specs_dir)
842
+ display_project = project_name(args.project, project_root)
843
+ except UsageError as exc:
844
+ print(f"cm-log-event: {exc}", file=sys.stderr)
845
+ return 2
846
+
847
+ global_home = Path(
848
+ os.environ.get("CM_WORKFLOW_LOG_HOME", "~/.cm-workflow/logs")
849
+ ).expanduser().resolve(strict=False)
850
+ if specs_dir:
851
+ try:
852
+ acquire_file_lock(specs_dir / ".cm-run.lock", private=False)
853
+ except OSError as exc:
854
+ print(
855
+ f"cm-log-event: project run lock failed: {type(exc).__name__}",
856
+ file=sys.stderr,
857
+ )
858
+ return 1
859
+ global_lock_error = None
860
+ try:
861
+ ensure_private_directory(global_home)
862
+ acquire_file_lock(global_home / ".cm-write.lock", private=True)
863
+ except OSError as exc:
864
+ global_lock_error = exc
865
+ if specs_dir is None:
866
+ print(
867
+ f"cm-log-event: global-only log lock failed: {type(exc).__name__}",
868
+ file=sys.stderr,
869
+ )
870
+ return 1
871
+
872
+ pointer_path = specs_dir / ".cm-run.json" if specs_dir else None
873
+ pointer = load_pointer(pointer_path) if pointer_path else None
874
+ project_log = specs_dir / "运行日志.jsonl" if specs_dir else None
875
+ latest_project_run, project_states = load_project_run_state(project_log)
876
+ try:
877
+ run_id, new_run = select_run_id(
878
+ explicit=args.run_id,
879
+ event=event_name,
880
+ pointer=pointer,
881
+ latest_project_run=latest_project_run,
882
+ project_states=project_states,
883
+ )
884
+ except UsageError as exc:
885
+ print(f"cm-log-event: {exc}", file=sys.stderr)
886
+ return 2
887
+
888
+ terminal = event_name in TERMINAL_EVENTS
889
+
890
+ global_log: Optional[Path] = None
891
+ if project_log is None:
892
+ try:
893
+ global_log = select_global_log(
894
+ global_home=global_home,
895
+ run_id=run_id,
896
+ parsed_at=parsed_at,
897
+ pointer=pointer,
898
+ )
899
+ except UsageError as exc:
900
+ print(f"cm-log-event: {exc}", file=sys.stderr)
901
+ return 2
902
+
903
+ event: Dict[str, Any] = {
904
+ "schema_version": SCHEMA_VERSION,
905
+ "run_id": run_id,
906
+ "at": at,
907
+ "workflow": workflow,
908
+ "event": event_name,
909
+ "runtime": runtime,
910
+ "project": display_project,
911
+ "detail": detail,
912
+ }
913
+ if phase:
914
+ event["phase"] = phase
915
+ if project_root:
916
+ event["project_path"] = str(project_root)
917
+ if specs_dir:
918
+ event["specs_path"] = str(specs_dir)
919
+ event.update(data)
920
+ event_id = deterministic_event_id(event)
921
+ event["event_id"] = event_id
922
+ authoritative_log = project_log if project_log else global_log
923
+ assert authoritative_log is not None
924
+ if event_name == "model_usage":
925
+ existing_call = find_model_usage_call(
926
+ authoritative_log,
927
+ run_id,
928
+ str(data["call_id"]),
929
+ )
930
+ if existing_call is not None and existing_call.get("event_id") != event_id:
931
+ print(
932
+ "cm-log-event: model_usage call_id already used with different payload",
933
+ file=sys.stderr,
934
+ )
935
+ return 2
936
+ existing_claim = find_model_call_claim(
937
+ authoritative_log,
938
+ run_id,
939
+ str(data["call_id"]),
940
+ )
941
+ if data.get("adapter") == "openai-compatible" and existing_claim is None:
942
+ print(
943
+ "cm-log-event: managed model_usage requires a prior model_call claim",
944
+ file=sys.stderr,
945
+ )
946
+ return 2
947
+ if (
948
+ existing_claim is not None
949
+ and model_call_identity(existing_claim) != model_call_identity(event)
950
+ ):
951
+ print(
952
+ "cm-log-event: model_usage identity does not match model_call claim",
953
+ file=sys.stderr,
954
+ )
955
+ return 2
956
+ if event_name == "model_call":
957
+ existing_usage = find_model_usage_call(
958
+ authoritative_log,
959
+ run_id,
960
+ str(data["call_id"]),
961
+ )
962
+ if existing_usage is not None:
963
+ print(
964
+ "cm-log-event: model_call call_id already completed",
965
+ file=sys.stderr,
966
+ )
967
+ return 2
968
+ existing_claim = find_model_call_claim(
969
+ authoritative_log,
970
+ run_id,
971
+ str(data["call_id"]),
972
+ )
973
+ if existing_claim is not None and existing_claim.get("event_id") != event_id:
974
+ print(
975
+ "cm-log-event: model_call call_id already claimed with different payload",
976
+ file=sys.stderr,
977
+ )
978
+ return 2
979
+ existing_authoritative_event = None
980
+ if (
981
+ event_name in {"resource", "test_run"}
982
+ or event_name in RESOURCE_GUARDED_EVENTS
983
+ or event_name in TEST_RUN_GUARDED_EVENTS
984
+ ):
985
+ existing_authoritative_event = find_jsonl_event(
986
+ authoritative_log,
987
+ event_id,
988
+ )
989
+
990
+ resource_states: Dict[str, Tuple[str, str]] = {}
991
+ if (
992
+ event_name == "resource"
993
+ and existing_authoritative_event is None
994
+ ) or (
995
+ event_name in RESOURCE_GUARDED_EVENTS
996
+ and existing_authoritative_event is None
997
+ ):
998
+ try:
999
+ resource_states = load_resource_states(authoritative_log, run_id)
1000
+ except (OSError, UsageError) as exc:
1001
+ print(
1002
+ "cm-log-event: resource state cannot be verified: "
1003
+ f"{type(exc).__name__}",
1004
+ file=sys.stderr,
1005
+ )
1006
+ return 2
1007
+
1008
+ if (
1009
+ event_name in RESOURCE_GUARDED_EVENTS
1010
+ and existing_authoritative_event is None
1011
+ ):
1012
+ pending_resources = unclosed_resources(resource_states)
1013
+ if pending_resources:
1014
+ print(
1015
+ "cm-log-event: completion blocked by unclosed resources: "
1016
+ + ", ".join(pending_resources),
1017
+ file=sys.stderr,
1018
+ )
1019
+ return 2
1020
+
1021
+ if event_name == "resource" and existing_authoritative_event is None:
1022
+ try:
1023
+ apply_resource_transition(
1024
+ resource_states,
1025
+ str(data["resource_id"]),
1026
+ str(data["resource_kind"]),
1027
+ str(phase),
1028
+ )
1029
+ except UsageError as exc:
1030
+ print(f"cm-log-event: {exc}", file=sys.stderr)
1031
+ return 2
1032
+
1033
+ test_run_active = False
1034
+ open_test_cases: set[str] = set()
1035
+ if (
1036
+ (event_name == "test_run" and phase is not None)
1037
+ or event_name in TEST_RUN_GUARDED_EVENTS
1038
+ ) and existing_authoritative_event is None:
1039
+ try:
1040
+ test_run_active, open_test_cases = load_test_run_state(
1041
+ authoritative_log,
1042
+ run_id,
1043
+ )
1044
+ except (OSError, UsageError) as exc:
1045
+ print(
1046
+ "cm-log-event: test_run state cannot be verified: "
1047
+ f"{type(exc).__name__}",
1048
+ file=sys.stderr,
1049
+ )
1050
+ return 2
1051
+
1052
+ if (
1053
+ event_name in TEST_RUN_GUARDED_EVENTS
1054
+ and existing_authoritative_event is None
1055
+ and (test_run_active or open_test_cases)
1056
+ ):
1057
+ detail_parts = []
1058
+ if test_run_active:
1059
+ detail_parts.append("active invocation")
1060
+ if open_test_cases:
1061
+ detail_parts.append("open cases: " + ", ".join(sorted(open_test_cases)))
1062
+ print(
1063
+ "cm-log-event: completion blocked by incomplete test_run: "
1064
+ + "; ".join(detail_parts),
1065
+ file=sys.stderr,
1066
+ )
1067
+ return 2
1068
+
1069
+ if (
1070
+ event_name == "test_run"
1071
+ and phase is not None
1072
+ and existing_authoritative_event is None
1073
+ ):
1074
+ try:
1075
+ apply_test_run_transition(
1076
+ test_run_active,
1077
+ open_test_cases,
1078
+ str(phase),
1079
+ str(data["case_id"]) if "case_id" in data else None,
1080
+ )
1081
+ except UsageError as exc:
1082
+ print(f"cm-log-event: {exc}", file=sys.stderr)
1083
+ return 2
1084
+
1085
+ project_duplicate = False
1086
+ if project_log:
1087
+ try:
1088
+ existing_project_event = find_jsonl_event(project_log, event_id)
1089
+ project_duplicate = existing_project_event is not None
1090
+ if existing_project_event is not None:
1091
+ event = existing_project_event
1092
+ at, parsed_at = parse_timestamp(str(event["at"]))
1093
+ else:
1094
+ append_line(project_log, event, private=False)
1095
+ except OSError as exc:
1096
+ print(
1097
+ f"cm-log-event: authoritative project log write failed: "
1098
+ f"{type(exc).__name__}",
1099
+ file=sys.stderr,
1100
+ )
1101
+ return 1
1102
+
1103
+ if global_log is None:
1104
+ try:
1105
+ global_log = select_global_log(
1106
+ global_home=global_home,
1107
+ run_id=run_id,
1108
+ parsed_at=parsed_at,
1109
+ pointer=pointer,
1110
+ )
1111
+ except UsageError as exc:
1112
+ print(f"cm-log-event: {exc}", file=sys.stderr)
1113
+ return 2
1114
+
1115
+ global_written = False
1116
+ degraded = False
1117
+ global_duplicate = False
1118
+ try:
1119
+ if global_lock_error is not None:
1120
+ raise global_lock_error
1121
+ ensure_private_directory(global_home)
1122
+ ensure_private_directory(global_home / "runs")
1123
+ ensure_private_directory(global_log.parent)
1124
+ global_duplicate = jsonl_has_event(global_log, event_id)
1125
+ if not global_duplicate:
1126
+ append_line(global_log, event, private=True)
1127
+ index_path = global_home / "index.jsonl"
1128
+ if new_run and not index_has_status(index_path, run_id, "running"):
1129
+ index_start = {
1130
+ "schema_version": SCHEMA_VERSION,
1131
+ "at": at,
1132
+ "run_id": run_id,
1133
+ "status": "running",
1134
+ "workflow": workflow,
1135
+ "runtime": runtime,
1136
+ "project": display_project,
1137
+ "project_path": str(project_root) if project_root else None,
1138
+ "specs_path": str(specs_dir) if specs_dir else None,
1139
+ "log_file": str(global_log.relative_to(global_home)),
1140
+ }
1141
+ append_line(index_path, index_start, private=True)
1142
+ if terminal and not index_has_status(index_path, run_id, "done"):
1143
+ index_done = {
1144
+ "schema_version": SCHEMA_VERSION,
1145
+ "at": at,
1146
+ "run_id": run_id,
1147
+ "status": "done",
1148
+ "workflow": workflow,
1149
+ "runtime": runtime,
1150
+ "project": display_project,
1151
+ "log_file": str(global_log.relative_to(global_home)),
1152
+ }
1153
+ append_line(index_path, index_done, private=True)
1154
+ global_written = True
1155
+ except OSError as exc:
1156
+ if project_log is None:
1157
+ print(
1158
+ f"cm-log-event: global-only log write failed: {type(exc).__name__}",
1159
+ file=sys.stderr,
1160
+ )
1161
+ return 1
1162
+ degraded = True
1163
+ degrade_event = {
1164
+ "schema_version": SCHEMA_VERSION,
1165
+ "run_id": run_id,
1166
+ "at": at,
1167
+ "workflow": workflow,
1168
+ "event": "degrade",
1169
+ "phase": "global_log",
1170
+ "runtime": runtime,
1171
+ "project": display_project,
1172
+ "detail": "全局日志镜像写入失败,项目日志继续作为权威来源",
1173
+ "error_type": type(exc).__name__,
1174
+ }
1175
+ if project_root:
1176
+ degrade_event["project_path"] = str(project_root)
1177
+ if specs_dir:
1178
+ degrade_event["specs_path"] = str(specs_dir)
1179
+ degrade_event["event_id"] = deterministic_event_id(degrade_event)
1180
+ try:
1181
+ if not jsonl_has_event(project_log, str(degrade_event["event_id"])):
1182
+ append_line(project_log, degrade_event, private=False)
1183
+ except OSError as project_exc:
1184
+ print(
1185
+ f"cm-log-event: project degradation log failed: "
1186
+ f"{type(project_exc).__name__}",
1187
+ file=sys.stderr,
1188
+ )
1189
+ return 1
1190
+ print(
1191
+ "cm-log-event: global mirror unavailable; project log retained",
1192
+ file=sys.stderr,
1193
+ )
1194
+
1195
+ pointer_written = None
1196
+ if pointer_path:
1197
+ pointer_value = {
1198
+ "schema_version": SCHEMA_VERSION,
1199
+ "run_id": run_id,
1200
+ "workflow": workflow,
1201
+ "status": "done" if terminal else "running",
1202
+ "global_log": str(global_log),
1203
+ "global_written": global_written,
1204
+ "updated_at": at,
1205
+ }
1206
+ try:
1207
+ write_pointer(pointer_path, pointer_value)
1208
+ pointer_written = True
1209
+ except OSError as exc:
1210
+ pointer_written = False
1211
+ degraded = True
1212
+ pointer_degrade = {
1213
+ "schema_version": SCHEMA_VERSION,
1214
+ "run_id": run_id,
1215
+ "at": at,
1216
+ "workflow": workflow,
1217
+ "event": "degrade",
1218
+ "phase": "run_pointer",
1219
+ "runtime": runtime,
1220
+ "project": display_project,
1221
+ "detail": "运行指针写入失败,将从权威项目日志恢复",
1222
+ "error_type": type(exc).__name__,
1223
+ }
1224
+ if project_root:
1225
+ pointer_degrade["project_path"] = str(project_root)
1226
+ if specs_dir:
1227
+ pointer_degrade["specs_path"] = str(specs_dir)
1228
+ pointer_degrade["event_id"] = deterministic_event_id(pointer_degrade)
1229
+ try:
1230
+ if not jsonl_has_event(
1231
+ project_log, str(pointer_degrade["event_id"])
1232
+ ):
1233
+ append_line(project_log, pointer_degrade, private=False)
1234
+ except OSError as project_exc:
1235
+ print(
1236
+ f"cm-log-event: run-pointer degradation log failed: "
1237
+ f"{type(project_exc).__name__}",
1238
+ file=sys.stderr,
1239
+ )
1240
+ return 1
1241
+ if global_written:
1242
+ try:
1243
+ if not jsonl_has_event(
1244
+ global_log, str(pointer_degrade["event_id"])
1245
+ ):
1246
+ append_line(global_log, pointer_degrade, private=True)
1247
+ except OSError:
1248
+ pass
1249
+ print(
1250
+ "cm-log-event: active-run pointer unavailable; "
1251
+ "project log recovery retained",
1252
+ file=sys.stderr,
1253
+ )
1254
+
1255
+ result = {
1256
+ "event_id": event_id,
1257
+ "run_id": run_id,
1258
+ "project_log": str(project_log) if project_log else None,
1259
+ "global_log": str(global_log),
1260
+ "global_written": global_written,
1261
+ "pointer_written": pointer_written,
1262
+ "deduplicated": project_duplicate if project_log else global_duplicate,
1263
+ "degraded": degraded,
1264
+ }
1265
+ print(json.dumps(result, ensure_ascii=True, separators=(",", ":")))
1266
+ return 0
1267
+
1268
+
1269
+ if __name__ == "__main__":
1270
+ raise SystemExit(main())