@relay-harness/coding-agent 0.0.0-stage → 1.0.3

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 (1318) hide show
  1. package/CHANGELOG.md +6122 -0
  2. package/LICENSE +22 -0
  3. package/README.md +79 -2
  4. package/dist/bun/cli.d.ts +5 -0
  5. package/dist/bun/cli.d.ts.map +1 -0
  6. package/dist/bun/cli.js +5 -0
  7. package/dist/bun/cli.js.map +1 -0
  8. package/dist/bun/restore-sandbox-env.d.ts +17 -0
  9. package/dist/bun/restore-sandbox-env.d.ts.map +1 -0
  10. package/dist/bun/restore-sandbox-env.js +36 -0
  11. package/dist/bun/restore-sandbox-env.js.map +1 -0
  12. package/dist/bun/runtime-setup.d.ts +2 -0
  13. package/dist/bun/runtime-setup.d.ts.map +1 -0
  14. package/dist/bun/runtime-setup.js +12 -0
  15. package/dist/bun/runtime-setup.js.map +1 -0
  16. package/dist/bun/sandbox-env-setup.d.ts +2 -0
  17. package/dist/bun/sandbox-env-setup.d.ts.map +1 -0
  18. package/dist/bun/sandbox-env-setup.js +4 -0
  19. package/dist/bun/sandbox-env-setup.js.map +1 -0
  20. package/dist/bundle/chunks/anthropic-messages-TXWUAW5N.js +6 -0
  21. package/dist/bundle/chunks/anthropic.js +75 -0
  22. package/dist/bundle/chunks/azure-openai-responses-EJG46ESA.js +2 -0
  23. package/dist/bundle/chunks/bedrock-converse-stream.js +83 -0
  24. package/dist/bundle/chunks/chunk-3QND5D7W.js +82 -0
  25. package/dist/bundle/chunks/chunk-3XNI2SB6.js +15 -0
  26. package/dist/bundle/chunks/chunk-4L3WN2XY.js +2 -0
  27. package/dist/bundle/chunks/chunk-5H4IRYOE.js +1791 -0
  28. package/dist/bundle/chunks/chunk-6CYCI3EJ.js +12 -0
  29. package/dist/bundle/chunks/chunk-7ZC4UXSL.js +2 -0
  30. package/dist/bundle/chunks/chunk-A3JYRWB6.js +2 -0
  31. package/dist/bundle/chunks/chunk-C47CLQZK.js +2 -0
  32. package/dist/bundle/chunks/chunk-DRQDKNXA.js +2 -0
  33. package/dist/bundle/chunks/chunk-EQ2HXQGJ.js +2 -0
  34. package/dist/bundle/chunks/chunk-F5ZABL6Z.js +20 -0
  35. package/dist/bundle/chunks/chunk-H3QXYIF7.js +31 -0
  36. package/dist/bundle/chunks/chunk-ISNO4JTR.js +127 -0
  37. package/dist/bundle/chunks/chunk-KJUDFE6Y.js +11 -0
  38. package/dist/bundle/chunks/chunk-L2ZPNLYD.js +2 -0
  39. package/dist/bundle/chunks/chunk-LD2P6SFZ.js +2 -0
  40. package/dist/bundle/chunks/chunk-MP5FU7MG.js +20 -0
  41. package/dist/bundle/chunks/chunk-NS67SA75.js +2 -0
  42. package/dist/bundle/chunks/chunk-O7R77OAK.js +2 -0
  43. package/dist/bundle/chunks/chunk-PGXDEOVV.js +2 -0
  44. package/dist/bundle/chunks/chunk-PJACZCIR.js +2 -0
  45. package/dist/bundle/chunks/chunk-PRRNXB7S.js +2 -0
  46. package/dist/bundle/chunks/chunk-PTRF7IZB.js +2 -0
  47. package/dist/bundle/chunks/chunk-RZ4KG4BP.js +44 -0
  48. package/dist/bundle/chunks/chunk-S3GGRYIO.js +6 -0
  49. package/dist/bundle/chunks/chunk-TEPMHNKQ.js +2 -0
  50. package/dist/bundle/chunks/chunk-TRDNDS6A.js +4 -0
  51. package/dist/bundle/chunks/chunk-USJZMAIR.js +2 -0
  52. package/dist/bundle/chunks/chunk-UTB4DTYQ.js +2 -0
  53. package/dist/bundle/chunks/chunk-WMTXXI7H.js +4 -0
  54. package/dist/bundle/chunks/chunk-XDAWU2J5.js +132 -0
  55. package/dist/bundle/chunks/chunk-Z2G7KLPH.js +11 -0
  56. package/dist/bundle/chunks/cli-K4CNHWOI.js +51 -0
  57. package/dist/bundle/chunks/cloudflare-workers-ai-system-one-NM3JRRWQ.js +2 -0
  58. package/dist/bundle/chunks/codemode-worker.js +374 -0
  59. package/dist/bundle/chunks/easter-egg-3d-TGRCIHA4.js +2 -0
  60. package/dist/bundle/chunks/execute-6E5DA2QI.js +388 -0
  61. package/dist/bundle/chunks/github-copilot.js +2 -0
  62. package/dist/bundle/chunks/google-generative-ai-HYUNEOCJ.js +2 -0
  63. package/dist/bundle/chunks/google-vertex-J7MDGTNM.js +2 -0
  64. package/dist/bundle/chunks/https-proxy-agent-2VXB7436.js +13 -0
  65. package/dist/bundle/chunks/image-resize-worker.js +2 -0
  66. package/dist/bundle/chunks/jiti-loader-C3NU2SDH.js +21 -0
  67. package/dist/bundle/chunks/jiti-static-loader-E6ANQD5T.js +2 -0
  68. package/dist/bundle/chunks/kimi-coding.js +2 -0
  69. package/dist/bundle/chunks/lib-TEDK3E5I.js +9 -0
  70. package/dist/bundle/chunks/llama-cpp-classify-XT44PI3C.js +22 -0
  71. package/dist/bundle/chunks/meta.js +2 -0
  72. package/dist/bundle/chunks/mistral-conversations-UD2HHXKZ.js +5 -0
  73. package/dist/bundle/chunks/multipart-parser-SQ6GDJL7.js +3 -0
  74. package/dist/bundle/chunks/node-N5BSDOA5.js +16 -0
  75. package/dist/bundle/chunks/node-TWVVAGPO.js +2 -0
  76. package/dist/bundle/chunks/openai-chatgpt.js +75 -0
  77. package/dist/bundle/chunks/openai-codex-responses-EMHXEJR4.js +10 -0
  78. package/dist/bundle/chunks/openai-codex.js +75 -0
  79. package/dist/bundle/chunks/openai-completions-LPKRZYMC.js +7 -0
  80. package/dist/bundle/chunks/openai-responses-TOOBRHUV.js +3 -0
  81. package/dist/bundle/chunks/openrouter-images-ZVXWCSIM.js +2 -0
  82. package/dist/bundle/chunks/openrouter.js +75 -0
  83. package/dist/bundle/chunks/relay-messages-QRFJXG5X.js +8 -0
  84. package/dist/bundle/chunks/runtime-O5HLCH3V.js +2 -0
  85. package/dist/bundle/chunks/src-UK77SYZE.js +4 -0
  86. package/dist/bundle/chunks/typesafe-system-one-PRR5K6CI.js +2 -0
  87. package/dist/bundle/chunks/virtual-modules-ZGB2J7DY.js +2 -0
  88. package/dist/bundle/chunks/xai.js +2 -0
  89. package/dist/bundle/cli-runtime.js +3 -0
  90. package/dist/bundle/cli.js +5 -0
  91. package/dist/bundle/index.js +2 -0
  92. package/dist/bundle/rpc-entry.js +3 -0
  93. package/dist/cli/args.d.ts +61 -0
  94. package/dist/cli/args.d.ts.map +1 -0
  95. package/dist/cli/args.js +454 -0
  96. package/dist/cli/args.js.map +1 -0
  97. package/dist/cli/auth-check.d.ts +19 -0
  98. package/dist/cli/auth-check.d.ts.map +1 -0
  99. package/dist/cli/auth-check.js +50 -0
  100. package/dist/cli/auth-check.js.map +1 -0
  101. package/dist/cli/auth-command.d.ts +24 -0
  102. package/dist/cli/auth-command.d.ts.map +1 -0
  103. package/dist/cli/auth-command.js +103 -0
  104. package/dist/cli/auth-command.js.map +1 -0
  105. package/dist/cli/config-selector.d.ts +16 -0
  106. package/dist/cli/config-selector.d.ts.map +1 -0
  107. package/dist/cli/config-selector.js +32 -0
  108. package/dist/cli/config-selector.js.map +1 -0
  109. package/dist/cli/credential-print.d.ts +13 -0
  110. package/dist/cli/credential-print.d.ts.map +1 -0
  111. package/dist/cli/credential-print.js +76 -0
  112. package/dist/cli/credential-print.js.map +1 -0
  113. package/dist/cli/file-processor.d.ts +15 -0
  114. package/dist/cli/file-processor.d.ts.map +1 -0
  115. package/dist/cli/file-processor.js +71 -0
  116. package/dist/cli/file-processor.js.map +1 -0
  117. package/dist/cli/initial-message.d.ts +18 -0
  118. package/dist/cli/initial-message.d.ts.map +1 -0
  119. package/dist/cli/initial-message.js +22 -0
  120. package/dist/cli/initial-message.js.map +1 -0
  121. package/dist/cli/list-models.d.ts +9 -0
  122. package/dist/cli/list-models.d.ts.map +1 -0
  123. package/dist/cli/list-models.js +98 -0
  124. package/dist/cli/list-models.js.map +1 -0
  125. package/dist/cli/project-trust.d.ts +10 -0
  126. package/dist/cli/project-trust.d.ts.map +1 -0
  127. package/dist/cli/project-trust.js +48 -0
  128. package/dist/cli/project-trust.js.map +1 -0
  129. package/dist/cli/session-picker.d.ts +10 -0
  130. package/dist/cli/session-picker.d.ts.map +1 -0
  131. package/dist/cli/session-picker.js +36 -0
  132. package/dist/cli/session-picker.js.map +1 -0
  133. package/dist/cli/setup.d.ts +2 -0
  134. package/dist/cli/setup.d.ts.map +1 -0
  135. package/dist/cli/setup.js +12 -0
  136. package/dist/cli/setup.js.map +1 -0
  137. package/dist/cli/startup-ui.d.ts +20 -0
  138. package/dist/cli/startup-ui.d.ts.map +1 -0
  139. package/dist/cli/startup-ui.js +193 -0
  140. package/dist/cli/startup-ui.js.map +1 -0
  141. package/dist/cli.d.ts +3 -0
  142. package/dist/cli.d.ts.map +1 -0
  143. package/dist/cli.js +6 -0
  144. package/dist/cli.js.map +1 -0
  145. package/dist/config.d.ts +108 -0
  146. package/dist/config.d.ts.map +1 -0
  147. package/dist/config.js +264 -0
  148. package/dist/config.js.map +1 -0
  149. package/dist/core/agent-session-runtime.d.ts +119 -0
  150. package/dist/core/agent-session-runtime.d.ts.map +1 -0
  151. package/dist/core/agent-session-runtime.js +317 -0
  152. package/dist/core/agent-session-runtime.js.map +1 -0
  153. package/dist/core/agent-session-services.d.ts +86 -0
  154. package/dist/core/agent-session-services.d.ts.map +1 -0
  155. package/dist/core/agent-session-services.js +147 -0
  156. package/dist/core/agent-session-services.js.map +1 -0
  157. package/dist/core/agent-session.d.ts +891 -0
  158. package/dist/core/agent-session.d.ts.map +1 -0
  159. package/dist/core/agent-session.js +3553 -0
  160. package/dist/core/agent-session.js.map +1 -0
  161. package/dist/core/auth-guidance.d.ts +5 -0
  162. package/dist/core/auth-guidance.d.ts.map +1 -0
  163. package/dist/core/auth-guidance.js +21 -0
  164. package/dist/core/auth-guidance.js.map +1 -0
  165. package/dist/core/auth-storage.d.ts +72 -0
  166. package/dist/core/auth-storage.d.ts.map +1 -0
  167. package/dist/core/auth-storage.js +426 -0
  168. package/dist/core/auth-storage.js.map +1 -0
  169. package/dist/core/bash-executor.d.ts +32 -0
  170. package/dist/core/bash-executor.d.ts.map +1 -0
  171. package/dist/core/bash-executor.js +106 -0
  172. package/dist/core/bash-executor.js.map +1 -0
  173. package/dist/core/bug-report.d.ts +176 -0
  174. package/dist/core/bug-report.d.ts.map +1 -0
  175. package/dist/core/bug-report.js +292 -0
  176. package/dist/core/bug-report.js.map +1 -0
  177. package/dist/core/cache-stats.d.ts +49 -0
  178. package/dist/core/cache-stats.d.ts.map +1 -0
  179. package/dist/core/cache-stats.js +112 -0
  180. package/dist/core/cache-stats.js.map +1 -0
  181. package/dist/core/cache-warmer.d.ts +103 -0
  182. package/dist/core/cache-warmer.d.ts.map +1 -0
  183. package/dist/core/cache-warmer.js +356 -0
  184. package/dist/core/cache-warmer.js.map +1 -0
  185. package/dist/core/compaction/branch-summarization.d.ts +98 -0
  186. package/dist/core/compaction/branch-summarization.d.ts.map +1 -0
  187. package/dist/core/compaction/branch-summarization.js +251 -0
  188. package/dist/core/compaction/branch-summarization.js.map +1 -0
  189. package/dist/core/compaction/compaction.d.ts +145 -0
  190. package/dist/core/compaction/compaction.d.ts.map +1 -0
  191. package/dist/core/compaction/compaction.js +744 -0
  192. package/dist/core/compaction/compaction.js.map +1 -0
  193. package/dist/core/compaction/index.d.ts +7 -0
  194. package/dist/core/compaction/index.d.ts.map +1 -0
  195. package/dist/core/compaction/index.js +7 -0
  196. package/dist/core/compaction/index.js.map +1 -0
  197. package/dist/core/compaction/utils.d.ts +39 -0
  198. package/dist/core/compaction/utils.d.ts.map +1 -0
  199. package/dist/core/compaction/utils.js +149 -0
  200. package/dist/core/compaction/utils.js.map +1 -0
  201. package/dist/core/crash-log.d.ts +27 -0
  202. package/dist/core/crash-log.d.ts.map +1 -0
  203. package/dist/core/crash-log.js +140 -0
  204. package/dist/core/crash-log.js.map +1 -0
  205. package/dist/core/defaults.d.ts +4 -0
  206. package/dist/core/defaults.d.ts.map +1 -0
  207. package/dist/core/defaults.js +11 -0
  208. package/dist/core/defaults.js.map +1 -0
  209. package/dist/core/diagnostics.d.ts +15 -0
  210. package/dist/core/diagnostics.d.ts.map +1 -0
  211. package/dist/core/diagnostics.js +2 -0
  212. package/dist/core/diagnostics.js.map +1 -0
  213. package/dist/core/event-bus.d.ts +9 -0
  214. package/dist/core/event-bus.d.ts.map +1 -0
  215. package/dist/core/event-bus.js +25 -0
  216. package/dist/core/event-bus.js.map +1 -0
  217. package/dist/core/exec.d.ts +29 -0
  218. package/dist/core/exec.d.ts.map +1 -0
  219. package/dist/core/exec.js +75 -0
  220. package/dist/core/exec.js.map +1 -0
  221. package/dist/core/experimental.d.ts +2 -0
  222. package/dist/core/experimental.d.ts.map +1 -0
  223. package/dist/core/experimental.js +4 -0
  224. package/dist/core/experimental.js.map +1 -0
  225. package/dist/core/export-html/ansi-to-html.d.ts +22 -0
  226. package/dist/core/export-html/ansi-to-html.d.ts.map +1 -0
  227. package/dist/core/export-html/ansi-to-html.js +249 -0
  228. package/dist/core/export-html/ansi-to-html.js.map +1 -0
  229. package/dist/core/export-html/index.d.ts +37 -0
  230. package/dist/core/export-html/index.d.ts.map +1 -0
  231. package/dist/core/export-html/index.js +226 -0
  232. package/dist/core/export-html/index.js.map +1 -0
  233. package/dist/core/export-html/template.css +1076 -0
  234. package/dist/core/export-html/template.html +55 -0
  235. package/dist/core/export-html/template.js +1918 -0
  236. package/dist/core/export-html/tool-renderer.d.ts +34 -0
  237. package/dist/core/export-html/tool-renderer.d.ts.map +1 -0
  238. package/dist/core/export-html/tool-renderer.js +108 -0
  239. package/dist/core/export-html/tool-renderer.js.map +1 -0
  240. package/dist/core/export-html/vendor/highlight.min.js +1213 -0
  241. package/dist/core/export-html/vendor/marked.min.js +78 -0
  242. package/dist/core/extensions/index.d.ts +12 -0
  243. package/dist/core/extensions/index.d.ts.map +1 -0
  244. package/dist/core/extensions/index.js +9 -0
  245. package/dist/core/extensions/index.js.map +1 -0
  246. package/dist/core/extensions/jiti-loader.d.ts +2 -0
  247. package/dist/core/extensions/jiti-loader.d.ts.map +1 -0
  248. package/dist/core/extensions/jiti-loader.js +4 -0
  249. package/dist/core/extensions/jiti-loader.js.map +1 -0
  250. package/dist/core/extensions/jiti-static-loader.d.ts +2 -0
  251. package/dist/core/extensions/jiti-static-loader.d.ts.map +1 -0
  252. package/dist/core/extensions/jiti-static-loader.js +4 -0
  253. package/dist/core/extensions/jiti-static-loader.js.map +1 -0
  254. package/dist/core/extensions/loader.d.ts +23 -0
  255. package/dist/core/extensions/loader.d.ts.map +1 -0
  256. package/dist/core/extensions/loader.js +701 -0
  257. package/dist/core/extensions/loader.js.map +1 -0
  258. package/dist/core/extensions/runner.d.ts +213 -0
  259. package/dist/core/extensions/runner.d.ts.map +1 -0
  260. package/dist/core/extensions/runner.js +1239 -0
  261. package/dist/core/extensions/runner.js.map +1 -0
  262. package/dist/core/extensions/types.d.ts +1720 -0
  263. package/dist/core/extensions/types.d.ts.map +1 -0
  264. package/dist/core/extensions/types.js +48 -0
  265. package/dist/core/extensions/types.js.map +1 -0
  266. package/dist/core/extensions/virtual-modules.d.ts +3 -0
  267. package/dist/core/extensions/virtual-modules.d.ts.map +1 -0
  268. package/dist/core/extensions/virtual-modules.js +38 -0
  269. package/dist/core/extensions/virtual-modules.js.map +1 -0
  270. package/dist/core/extensions/wrapper.d.ts +20 -0
  271. package/dist/core/extensions/wrapper.d.ts.map +1 -0
  272. package/dist/core/extensions/wrapper.js +22 -0
  273. package/dist/core/extensions/wrapper.js.map +1 -0
  274. package/dist/core/footer-data-provider.d.ts +64 -0
  275. package/dist/core/footer-data-provider.d.ts.map +1 -0
  276. package/dist/core/footer-data-provider.js +338 -0
  277. package/dist/core/footer-data-provider.js.map +1 -0
  278. package/dist/core/harness-core.d.ts +50 -0
  279. package/dist/core/harness-core.d.ts.map +1 -0
  280. package/dist/core/harness-core.js +240 -0
  281. package/dist/core/harness-core.js.map +1 -0
  282. package/dist/core/http-dispatcher.d.ts +22 -0
  283. package/dist/core/http-dispatcher.d.ts.map +1 -0
  284. package/dist/core/http-dispatcher.js +98 -0
  285. package/dist/core/http-dispatcher.js.map +1 -0
  286. package/dist/core/index.d.ts +14 -0
  287. package/dist/core/index.d.ts.map +1 -0
  288. package/dist/core/index.js +13 -0
  289. package/dist/core/index.js.map +1 -0
  290. package/dist/core/keybindings.d.ts +428 -0
  291. package/dist/core/keybindings.d.ts.map +1 -0
  292. package/dist/core/keybindings.js +321 -0
  293. package/dist/core/keybindings.js.map +1 -0
  294. package/dist/core/mcp-servers.d.ts +125 -0
  295. package/dist/core/mcp-servers.d.ts.map +1 -0
  296. package/dist/core/mcp-servers.js +198 -0
  297. package/dist/core/mcp-servers.js.map +1 -0
  298. package/dist/core/messages.d.ts +77 -0
  299. package/dist/core/messages.d.ts.map +1 -0
  300. package/dist/core/messages.js +124 -0
  301. package/dist/core/messages.js.map +1 -0
  302. package/dist/core/model-config.d.ts +759 -0
  303. package/dist/core/model-config.d.ts.map +1 -0
  304. package/dist/core/model-config.js +293 -0
  305. package/dist/core/model-config.js.map +1 -0
  306. package/dist/core/model-registry.d.ts +63 -0
  307. package/dist/core/model-registry.d.ts.map +1 -0
  308. package/dist/core/model-registry.js +144 -0
  309. package/dist/core/model-registry.js.map +1 -0
  310. package/dist/core/model-resolver.d.ts +124 -0
  311. package/dist/core/model-resolver.d.ts.map +1 -0
  312. package/dist/core/model-resolver.js +589 -0
  313. package/dist/core/model-resolver.js.map +1 -0
  314. package/dist/core/model-runtime.d.ts +142 -0
  315. package/dist/core/model-runtime.d.ts.map +1 -0
  316. package/dist/core/model-runtime.js +732 -0
  317. package/dist/core/model-runtime.js.map +1 -0
  318. package/dist/core/models-store.d.ts +22 -0
  319. package/dist/core/models-store.d.ts.map +1 -0
  320. package/dist/core/models-store.js +115 -0
  321. package/dist/core/models-store.js.map +1 -0
  322. package/dist/core/nested-tool-calls.d.ts +102 -0
  323. package/dist/core/nested-tool-calls.d.ts.map +1 -0
  324. package/dist/core/nested-tool-calls.js +178 -0
  325. package/dist/core/nested-tool-calls.js.map +1 -0
  326. package/dist/core/output-guard.d.ts +7 -0
  327. package/dist/core/output-guard.d.ts.map +1 -0
  328. package/dist/core/output-guard.js +89 -0
  329. package/dist/core/output-guard.js.map +1 -0
  330. package/dist/core/package-manager.d.ts +217 -0
  331. package/dist/core/package-manager.d.ts.map +1 -0
  332. package/dist/core/package-manager.js +2224 -0
  333. package/dist/core/package-manager.js.map +1 -0
  334. package/dist/core/project-trust.d.ts +15 -0
  335. package/dist/core/project-trust.d.ts.map +1 -0
  336. package/dist/core/project-trust.js +59 -0
  337. package/dist/core/project-trust.js.map +1 -0
  338. package/dist/core/prompt-templates.d.ts +59 -0
  339. package/dist/core/prompt-templates.d.ts.map +1 -0
  340. package/dist/core/prompt-templates.js +262 -0
  341. package/dist/core/prompt-templates.js.map +1 -0
  342. package/dist/core/provider-attribution.d.ts +4 -0
  343. package/dist/core/provider-attribution.d.ts.map +1 -0
  344. package/dist/core/provider-attribution.js +72 -0
  345. package/dist/core/provider-attribution.js.map +1 -0
  346. package/dist/core/provider-composer.d.ts +80 -0
  347. package/dist/core/provider-composer.d.ts.map +1 -0
  348. package/dist/core/provider-composer.js +484 -0
  349. package/dist/core/provider-composer.js.map +1 -0
  350. package/dist/core/relay-manifest.d.ts +8 -0
  351. package/dist/core/relay-manifest.d.ts.map +1 -0
  352. package/dist/core/relay-manifest.js +26 -0
  353. package/dist/core/relay-manifest.js.map +1 -0
  354. package/dist/core/resolve-config-value.d.ts +30 -0
  355. package/dist/core/resolve-config-value.d.ts.map +1 -0
  356. package/dist/core/resolve-config-value.js +247 -0
  357. package/dist/core/resolve-config-value.js.map +1 -0
  358. package/dist/core/resource-loader.d.ts +227 -0
  359. package/dist/core/resource-loader.d.ts.map +1 -0
  360. package/dist/core/resource-loader.js +1005 -0
  361. package/dist/core/resource-loader.js.map +1 -0
  362. package/dist/core/runtime-credentials.d.ts +15 -0
  363. package/dist/core/runtime-credentials.d.ts.map +1 -0
  364. package/dist/core/runtime-credentials.js +39 -0
  365. package/dist/core/runtime-credentials.js.map +1 -0
  366. package/dist/core/sdk.d.ts +108 -0
  367. package/dist/core/sdk.d.ts.map +1 -0
  368. package/dist/core/sdk.js +315 -0
  369. package/dist/core/sdk.js.map +1 -0
  370. package/dist/core/session-cwd.d.ts +19 -0
  371. package/dist/core/session-cwd.d.ts.map +1 -0
  372. package/dist/core/session-cwd.js +38 -0
  373. package/dist/core/session-cwd.js.map +1 -0
  374. package/dist/core/session-export.d.ts +8 -0
  375. package/dist/core/session-export.d.ts.map +1 -0
  376. package/dist/core/session-export.js +33 -0
  377. package/dist/core/session-export.js.map +1 -0
  378. package/dist/core/session-manager.d.ts +416 -0
  379. package/dist/core/session-manager.d.ts.map +1 -0
  380. package/dist/core/session-manager.js +1523 -0
  381. package/dist/core/session-manager.js.map +1 -0
  382. package/dist/core/settings-diagnostics.d.ts +9 -0
  383. package/dist/core/settings-diagnostics.d.ts.map +1 -0
  384. package/dist/core/settings-diagnostics.js +21 -0
  385. package/dist/core/settings-diagnostics.js.map +1 -0
  386. package/dist/core/settings-manager.d.ts +423 -0
  387. package/dist/core/settings-manager.d.ts.map +1 -0
  388. package/dist/core/settings-manager.js +1120 -0
  389. package/dist/core/settings-manager.js.map +1 -0
  390. package/dist/core/skills.d.ts +60 -0
  391. package/dist/core/skills.d.ts.map +1 -0
  392. package/dist/core/skills.js +408 -0
  393. package/dist/core/skills.js.map +1 -0
  394. package/dist/core/slash-commands.d.ts +15 -0
  395. package/dist/core/slash-commands.d.ts.map +1 -0
  396. package/dist/core/slash-commands.js +29 -0
  397. package/dist/core/slash-commands.js.map +1 -0
  398. package/dist/core/source-info.d.ts +26 -0
  399. package/dist/core/source-info.d.ts.map +1 -0
  400. package/dist/core/source-info.js +35 -0
  401. package/dist/core/source-info.js.map +1 -0
  402. package/dist/core/system-prompt.d.ts +71 -0
  403. package/dist/core/system-prompt.d.ts.map +1 -0
  404. package/dist/core/system-prompt.js +147 -0
  405. package/dist/core/system-prompt.js.map +1 -0
  406. package/dist/core/telemetry.d.ts +3 -0
  407. package/dist/core/telemetry.d.ts.map +1 -0
  408. package/dist/core/telemetry.js +9 -0
  409. package/dist/core/telemetry.js.map +1 -0
  410. package/dist/core/timings.d.ts +10 -0
  411. package/dist/core/timings.d.ts.map +1 -0
  412. package/dist/core/timings.js +41 -0
  413. package/dist/core/timings.js.map +1 -0
  414. package/dist/core/tools/bash.d.ts +100 -0
  415. package/dist/core/tools/bash.d.ts.map +1 -0
  416. package/dist/core/tools/bash.js +333 -0
  417. package/dist/core/tools/bash.js.map +1 -0
  418. package/dist/core/tools/edit-diff.d.ts +101 -0
  419. package/dist/core/tools/edit-diff.d.ts.map +1 -0
  420. package/dist/core/tools/edit-diff.js +421 -0
  421. package/dist/core/tools/edit-diff.js.map +1 -0
  422. package/dist/core/tools/edit.d.ts +44 -0
  423. package/dist/core/tools/edit.d.ts.map +1 -0
  424. package/dist/core/tools/edit.js +147 -0
  425. package/dist/core/tools/edit.js.map +1 -0
  426. package/dist/core/tools/file-mutation-queue.d.ts +6 -0
  427. package/dist/core/tools/file-mutation-queue.d.ts.map +1 -0
  428. package/dist/core/tools/file-mutation-queue.js +52 -0
  429. package/dist/core/tools/file-mutation-queue.js.map +1 -0
  430. package/dist/core/tools/find.d.ts +42 -0
  431. package/dist/core/tools/find.d.ts.map +1 -0
  432. package/dist/core/tools/find.js +251 -0
  433. package/dist/core/tools/find.js.map +1 -0
  434. package/dist/core/tools/grep.d.ts +41 -0
  435. package/dist/core/tools/grep.d.ts.map +1 -0
  436. package/dist/core/tools/grep.js +252 -0
  437. package/dist/core/tools/grep.js.map +1 -0
  438. package/dist/core/tools/index.d.ts +43 -0
  439. package/dist/core/tools/index.d.ts.map +1 -0
  440. package/dist/core/tools/index.js +129 -0
  441. package/dist/core/tools/index.js.map +1 -0
  442. package/dist/core/tools/ls.d.ts +41 -0
  443. package/dist/core/tools/ls.d.ts.map +1 -0
  444. package/dist/core/tools/ls.js +126 -0
  445. package/dist/core/tools/ls.js.map +1 -0
  446. package/dist/core/tools/output-accumulator.d.ts +63 -0
  447. package/dist/core/tools/output-accumulator.d.ts.map +1 -0
  448. package/dist/core/tools/output-accumulator.js +214 -0
  449. package/dist/core/tools/output-accumulator.js.map +1 -0
  450. package/dist/core/tools/path-utils.d.ts +10 -0
  451. package/dist/core/tools/path-utils.d.ts.map +1 -0
  452. package/dist/core/tools/path-utils.js +99 -0
  453. package/dist/core/tools/path-utils.js.map +1 -0
  454. package/dist/core/tools/powershell.d.ts +16 -0
  455. package/dist/core/tools/powershell.d.ts.map +1 -0
  456. package/dist/core/tools/powershell.js +39 -0
  457. package/dist/core/tools/powershell.js.map +1 -0
  458. package/dist/core/tools/read.d.ts +42 -0
  459. package/dist/core/tools/read.d.ts.map +1 -0
  460. package/dist/core/tools/read.js +169 -0
  461. package/dist/core/tools/read.js.map +1 -0
  462. package/dist/core/tools/render-utils.d.ts +30 -0
  463. package/dist/core/tools/render-utils.d.ts.map +1 -0
  464. package/dist/core/tools/render-utils.js +91 -0
  465. package/dist/core/tools/render-utils.js.map +1 -0
  466. package/dist/core/tools/renderers/bash.d.ts +12 -0
  467. package/dist/core/tools/renderers/bash.d.ts.map +1 -0
  468. package/dist/core/tools/renderers/bash.js +117 -0
  469. package/dist/core/tools/renderers/bash.js.map +1 -0
  470. package/dist/core/tools/renderers/edit.d.ts +23 -0
  471. package/dist/core/tools/renderers/edit.d.ts.map +1 -0
  472. package/dist/core/tools/renderers/edit.js +167 -0
  473. package/dist/core/tools/renderers/edit.js.map +1 -0
  474. package/dist/core/tools/renderers/find.d.ts +10 -0
  475. package/dist/core/tools/renderers/find.d.ts.map +1 -0
  476. package/dist/core/tools/renderers/find.js +64 -0
  477. package/dist/core/tools/renderers/find.js.map +1 -0
  478. package/dist/core/tools/renderers/grep.d.ts +10 -0
  479. package/dist/core/tools/renderers/grep.d.ts.map +1 -0
  480. package/dist/core/tools/renderers/grep.js +69 -0
  481. package/dist/core/tools/renderers/grep.js.map +1 -0
  482. package/dist/core/tools/renderers/index.d.ts +28 -0
  483. package/dist/core/tools/renderers/index.d.ts.map +1 -0
  484. package/dist/core/tools/renderers/index.js +47 -0
  485. package/dist/core/tools/renderers/index.js.map +1 -0
  486. package/dist/core/tools/renderers/ls.d.ts +10 -0
  487. package/dist/core/tools/renderers/ls.d.ts.map +1 -0
  488. package/dist/core/tools/renderers/ls.js +58 -0
  489. package/dist/core/tools/renderers/ls.js.map +1 -0
  490. package/dist/core/tools/renderers/read.d.ts +11 -0
  491. package/dist/core/tools/renderers/read.d.ts.map +1 -0
  492. package/dist/core/tools/renderers/read.js +130 -0
  493. package/dist/core/tools/renderers/read.js.map +1 -0
  494. package/dist/core/tools/renderers/write.d.ts +10 -0
  495. package/dist/core/tools/renderers/write.d.ts.map +1 -0
  496. package/dist/core/tools/renderers/write.js +153 -0
  497. package/dist/core/tools/renderers/write.js.map +1 -0
  498. package/dist/core/tools/tool-definition-wrapper.d.ts +16 -0
  499. package/dist/core/tools/tool-definition-wrapper.d.ts.map +1 -0
  500. package/dist/core/tools/tool-definition-wrapper.js +38 -0
  501. package/dist/core/tools/tool-definition-wrapper.js.map +1 -0
  502. package/dist/core/tools/truncate.d.ts +84 -0
  503. package/dist/core/tools/truncate.d.ts.map +1 -0
  504. package/dist/core/tools/truncate.js +244 -0
  505. package/dist/core/tools/truncate.js.map +1 -0
  506. package/dist/core/tools/write.d.ts +30 -0
  507. package/dist/core/tools/write.d.ts.map +1 -0
  508. package/dist/core/tools/write.js +61 -0
  509. package/dist/core/tools/write.js.map +1 -0
  510. package/dist/core/trust-manager.d.ts +36 -0
  511. package/dist/core/trust-manager.d.ts.map +1 -0
  512. package/dist/core/trust-manager.js +204 -0
  513. package/dist/core/trust-manager.js.map +1 -0
  514. package/dist/core/usage-totals.d.ts +21 -0
  515. package/dist/core/usage-totals.d.ts.map +1 -0
  516. package/dist/core/usage-totals.js +79 -0
  517. package/dist/core/usage-totals.js.map +1 -0
  518. package/dist/core/virtual-models.d.ts +117 -0
  519. package/dist/core/virtual-models.d.ts.map +1 -0
  520. package/dist/core/virtual-models.js +124 -0
  521. package/dist/core/virtual-models.js.map +1 -0
  522. package/dist/core/workspace-probe.d.ts +8 -0
  523. package/dist/core/workspace-probe.d.ts.map +1 -0
  524. package/dist/core/workspace-probe.js +65 -0
  525. package/dist/core/workspace-probe.js.map +1 -0
  526. package/dist/extensions/codemode/execute.d.ts +16 -0
  527. package/dist/extensions/codemode/execute.d.ts.map +1 -0
  528. package/dist/extensions/codemode/execute.js +577 -0
  529. package/dist/extensions/codemode/execute.js.map +1 -0
  530. package/dist/extensions/codemode/execute.lazy.d.ts +3 -0
  531. package/dist/extensions/codemode/execute.lazy.d.ts.map +1 -0
  532. package/dist/extensions/codemode/execute.lazy.js +3 -0
  533. package/dist/extensions/codemode/execute.lazy.js.map +1 -0
  534. package/dist/extensions/codemode/index.d.ts +21 -0
  535. package/dist/extensions/codemode/index.d.ts.map +1 -0
  536. package/dist/extensions/codemode/index.js +31 -0
  537. package/dist/extensions/codemode/index.js.map +1 -0
  538. package/dist/extensions/codemode/renderer.d.ts +12 -0
  539. package/dist/extensions/codemode/renderer.d.ts.map +1 -0
  540. package/dist/extensions/codemode/renderer.js +137 -0
  541. package/dist/extensions/codemode/renderer.js.map +1 -0
  542. package/dist/extensions/codemode/tool.d.ts +123 -0
  543. package/dist/extensions/codemode/tool.d.ts.map +1 -0
  544. package/dist/extensions/codemode/tool.js +268 -0
  545. package/dist/extensions/codemode/tool.js.map +1 -0
  546. package/dist/extensions/codemode/worker.d.ts +7 -0
  547. package/dist/extensions/codemode/worker.d.ts.map +1 -0
  548. package/dist/extensions/codemode/worker.js +7 -0
  549. package/dist/extensions/codemode/worker.js.map +1 -0
  550. package/dist/extensions/index.d.ts +3 -0
  551. package/dist/extensions/index.d.ts.map +1 -0
  552. package/dist/extensions/index.js +19 -0
  553. package/dist/extensions/index.js.map +1 -0
  554. package/dist/extensions/intake/docx.d.ts +42 -0
  555. package/dist/extensions/intake/docx.d.ts.map +1 -0
  556. package/dist/extensions/intake/docx.js +148 -0
  557. package/dist/extensions/intake/docx.js.map +1 -0
  558. package/dist/extensions/intake/index.d.ts +17 -0
  559. package/dist/extensions/intake/index.d.ts.map +1 -0
  560. package/dist/extensions/intake/index.js +88 -0
  561. package/dist/extensions/intake/index.js.map +1 -0
  562. package/dist/extensions/intake/prompt.d.ts +6 -0
  563. package/dist/extensions/intake/prompt.d.ts.map +1 -0
  564. package/dist/extensions/intake/prompt.js +41 -0
  565. package/dist/extensions/intake/prompt.js.map +1 -0
  566. package/dist/extensions/intake/questionnaire.d.ts +84 -0
  567. package/dist/extensions/intake/questionnaire.d.ts.map +1 -0
  568. package/dist/extensions/intake/questionnaire.js +472 -0
  569. package/dist/extensions/intake/questionnaire.js.map +1 -0
  570. package/dist/extensions/laya/assessment.d.ts +40 -0
  571. package/dist/extensions/laya/assessment.d.ts.map +1 -0
  572. package/dist/extensions/laya/assessment.js +191 -0
  573. package/dist/extensions/laya/assessment.js.map +1 -0
  574. package/dist/extensions/laya/docker.d.ts +19 -0
  575. package/dist/extensions/laya/docker.d.ts.map +1 -0
  576. package/dist/extensions/laya/docker.js +44 -0
  577. package/dist/extensions/laya/docker.js.map +1 -0
  578. package/dist/extensions/laya/index.d.ts +43 -0
  579. package/dist/extensions/laya/index.d.ts.map +1 -0
  580. package/dist/extensions/laya/index.js +780 -0
  581. package/dist/extensions/laya/index.js.map +1 -0
  582. package/dist/extensions/laya/learn.d.ts +67 -0
  583. package/dist/extensions/laya/learn.d.ts.map +1 -0
  584. package/dist/extensions/laya/learn.js +263 -0
  585. package/dist/extensions/laya/learn.js.map +1 -0
  586. package/dist/extensions/laya/memory.d.ts +48 -0
  587. package/dist/extensions/laya/memory.d.ts.map +1 -0
  588. package/dist/extensions/laya/memory.js +107 -0
  589. package/dist/extensions/laya/memory.js.map +1 -0
  590. package/dist/extensions/laya/model-manifest.d.ts +7 -0
  591. package/dist/extensions/laya/model-manifest.d.ts.map +1 -0
  592. package/dist/extensions/laya/model-manifest.js +48 -0
  593. package/dist/extensions/laya/model-manifest.js.map +1 -0
  594. package/dist/extensions/laya/policy.d.ts +130 -0
  595. package/dist/extensions/laya/policy.d.ts.map +1 -0
  596. package/dist/extensions/laya/policy.js +222 -0
  597. package/dist/extensions/laya/policy.js.map +1 -0
  598. package/dist/extensions/laya/questions.d.ts +60 -0
  599. package/dist/extensions/laya/questions.d.ts.map +1 -0
  600. package/dist/extensions/laya/questions.js +189 -0
  601. package/dist/extensions/laya/questions.js.map +1 -0
  602. package/dist/extensions/laya/routers.d.ts +25 -0
  603. package/dist/extensions/laya/routers.d.ts.map +1 -0
  604. package/dist/extensions/laya/routers.js +121 -0
  605. package/dist/extensions/laya/routers.js.map +1 -0
  606. package/dist/extensions/laya/runtime.d.ts +58 -0
  607. package/dist/extensions/laya/runtime.d.ts.map +1 -0
  608. package/dist/extensions/laya/runtime.js +127 -0
  609. package/dist/extensions/laya/runtime.js.map +1 -0
  610. package/dist/extensions/laya/seed.d.ts +39 -0
  611. package/dist/extensions/laya/seed.d.ts.map +1 -0
  612. package/dist/extensions/laya/seed.js +358 -0
  613. package/dist/extensions/laya/seed.js.map +1 -0
  614. package/dist/extensions/laya/server.d.ts +50 -0
  615. package/dist/extensions/laya/server.d.ts.map +1 -0
  616. package/dist/extensions/laya/server.js +251 -0
  617. package/dist/extensions/laya/server.js.map +1 -0
  618. package/dist/extensions/laya/telemetry.d.ts +94 -0
  619. package/dist/extensions/laya/telemetry.d.ts.map +1 -0
  620. package/dist/extensions/laya/telemetry.js +107 -0
  621. package/dist/extensions/laya/telemetry.js.map +1 -0
  622. package/dist/extensions/laya/train-script.d.ts +8 -0
  623. package/dist/extensions/laya/train-script.d.ts.map +1 -0
  624. package/dist/extensions/laya/train-script.js +422 -0
  625. package/dist/extensions/laya/train-script.js.map +1 -0
  626. package/dist/extensions/laya/training.d.ts +176 -0
  627. package/dist/extensions/laya/training.d.ts.map +1 -0
  628. package/dist/extensions/laya/training.js +337 -0
  629. package/dist/extensions/laya/training.js.map +1 -0
  630. package/dist/extensions/llama/client.d.ts +69 -0
  631. package/dist/extensions/llama/client.d.ts.map +1 -0
  632. package/dist/extensions/llama/client.js +313 -0
  633. package/dist/extensions/llama/client.js.map +1 -0
  634. package/dist/extensions/llama/huggingface.d.ts +23 -0
  635. package/dist/extensions/llama/huggingface.d.ts.map +1 -0
  636. package/dist/extensions/llama/huggingface.js +141 -0
  637. package/dist/extensions/llama/huggingface.js.map +1 -0
  638. package/dist/extensions/llama/index.d.ts +3 -0
  639. package/dist/extensions/llama/index.d.ts.map +1 -0
  640. package/dist/extensions/llama/index.js +219 -0
  641. package/dist/extensions/llama/index.js.map +1 -0
  642. package/dist/extensions/llama/provider.d.ts +12 -0
  643. package/dist/extensions/llama/provider.d.ts.map +1 -0
  644. package/dist/extensions/llama/provider.js +213 -0
  645. package/dist/extensions/llama/provider.js.map +1 -0
  646. package/dist/extensions/llama/ui.d.ts +42 -0
  647. package/dist/extensions/llama/ui.d.ts.map +1 -0
  648. package/dist/extensions/llama/ui.js +416 -0
  649. package/dist/extensions/llama/ui.js.map +1 -0
  650. package/dist/extensions/mcp/cli.d.ts +21 -0
  651. package/dist/extensions/mcp/cli.d.ts.map +1 -0
  652. package/dist/extensions/mcp/cli.js +503 -0
  653. package/dist/extensions/mcp/cli.js.map +1 -0
  654. package/dist/extensions/mcp/cli.lazy.d.ts +3 -0
  655. package/dist/extensions/mcp/cli.lazy.d.ts.map +1 -0
  656. package/dist/extensions/mcp/cli.lazy.js +3 -0
  657. package/dist/extensions/mcp/cli.lazy.js.map +1 -0
  658. package/dist/extensions/mcp/config.d.ts +84 -0
  659. package/dist/extensions/mcp/config.d.ts.map +1 -0
  660. package/dist/extensions/mcp/config.js +194 -0
  661. package/dist/extensions/mcp/config.js.map +1 -0
  662. package/dist/extensions/mcp/index.d.ts +79 -0
  663. package/dist/extensions/mcp/index.d.ts.map +1 -0
  664. package/dist/extensions/mcp/index.js +1101 -0
  665. package/dist/extensions/mcp/index.js.map +1 -0
  666. package/dist/extensions/mcp/log.d.ts +16 -0
  667. package/dist/extensions/mcp/log.d.ts.map +1 -0
  668. package/dist/extensions/mcp/log.js +66 -0
  669. package/dist/extensions/mcp/log.js.map +1 -0
  670. package/dist/extensions/mcp/oauth.d.ts +98 -0
  671. package/dist/extensions/mcp/oauth.d.ts.map +1 -0
  672. package/dist/extensions/mcp/oauth.js +366 -0
  673. package/dist/extensions/mcp/oauth.js.map +1 -0
  674. package/dist/extensions/mcp/resources.d.ts +43 -0
  675. package/dist/extensions/mcp/resources.d.ts.map +1 -0
  676. package/dist/extensions/mcp/resources.js +262 -0
  677. package/dist/extensions/mcp/resources.js.map +1 -0
  678. package/dist/extensions/mcp/runtime.d.ts +98 -0
  679. package/dist/extensions/mcp/runtime.d.ts.map +1 -0
  680. package/dist/extensions/mcp/runtime.js +395 -0
  681. package/dist/extensions/mcp/runtime.js.map +1 -0
  682. package/dist/extensions/mcp/runtime.lazy.d.ts +3 -0
  683. package/dist/extensions/mcp/runtime.lazy.d.ts.map +1 -0
  684. package/dist/extensions/mcp/runtime.lazy.js +3 -0
  685. package/dist/extensions/mcp/runtime.lazy.js.map +1 -0
  686. package/dist/extensions/mcp/tools.d.ts +86 -0
  687. package/dist/extensions/mcp/tools.d.ts.map +1 -0
  688. package/dist/extensions/mcp/tools.js +252 -0
  689. package/dist/extensions/mcp/tools.js.map +1 -0
  690. package/dist/extensions/mcp/ui.d.ts +60 -0
  691. package/dist/extensions/mcp/ui.d.ts.map +1 -0
  692. package/dist/extensions/mcp/ui.js +178 -0
  693. package/dist/extensions/mcp/ui.js.map +1 -0
  694. package/dist/extensions/tool-search/index.d.ts +12 -0
  695. package/dist/extensions/tool-search/index.d.ts.map +1 -0
  696. package/dist/extensions/tool-search/index.js +15 -0
  697. package/dist/extensions/tool-search/index.js.map +1 -0
  698. package/dist/extensions/tool-search/tool.d.ts +73 -0
  699. package/dist/extensions/tool-search/tool.d.ts.map +1 -0
  700. package/dist/extensions/tool-search/tool.js +189 -0
  701. package/dist/extensions/tool-search/tool.js.map +1 -0
  702. package/dist/index.d.ts +44 -0
  703. package/dist/index.d.ts.map +1 -0
  704. package/dist/index.js +53 -0
  705. package/dist/index.js.map +1 -0
  706. package/dist/main.d.ts +16 -0
  707. package/dist/main.d.ts.map +1 -0
  708. package/dist/main.js +820 -0
  709. package/dist/main.js.map +1 -0
  710. package/dist/migrations.d.ts +33 -0
  711. package/dist/migrations.d.ts.map +1 -0
  712. package/dist/migrations.js +282 -0
  713. package/dist/migrations.js.map +1 -0
  714. package/dist/modes/index.d.ts +10 -0
  715. package/dist/modes/index.d.ts.map +1 -0
  716. package/dist/modes/index.js +8 -0
  717. package/dist/modes/index.js.map +1 -0
  718. package/dist/modes/interactive/assets/clankolas.png +0 -0
  719. package/dist/modes/interactive/bug-report.d.ts +16 -0
  720. package/dist/modes/interactive/bug-report.d.ts.map +1 -0
  721. package/dist/modes/interactive/bug-report.js +171 -0
  722. package/dist/modes/interactive/bug-report.js.map +1 -0
  723. package/dist/modes/interactive/chat-viewport.d.ts +20 -0
  724. package/dist/modes/interactive/chat-viewport.d.ts.map +1 -0
  725. package/dist/modes/interactive/chat-viewport.js +28 -0
  726. package/dist/modes/interactive/chat-viewport.js.map +1 -0
  727. package/dist/modes/interactive/components/armin.d.ts +37 -0
  728. package/dist/modes/interactive/components/armin.d.ts.map +1 -0
  729. package/dist/modes/interactive/components/armin.js +335 -0
  730. package/dist/modes/interactive/components/armin.js.map +1 -0
  731. package/dist/modes/interactive/components/assistant-message.d.ts +26 -0
  732. package/dist/modes/interactive/components/assistant-message.d.ts.map +1 -0
  733. package/dist/modes/interactive/components/assistant-message.js +158 -0
  734. package/dist/modes/interactive/components/assistant-message.js.map +1 -0
  735. package/dist/modes/interactive/components/auth-url.d.ts +14 -0
  736. package/dist/modes/interactive/components/auth-url.d.ts.map +1 -0
  737. package/dist/modes/interactive/components/auth-url.js +37 -0
  738. package/dist/modes/interactive/components/auth-url.js.map +1 -0
  739. package/dist/modes/interactive/components/bash-execution.d.ts +34 -0
  740. package/dist/modes/interactive/components/bash-execution.d.ts.map +1 -0
  741. package/dist/modes/interactive/components/bash-execution.js +175 -0
  742. package/dist/modes/interactive/components/bash-execution.js.map +1 -0
  743. package/dist/modes/interactive/components/bordered-loader.d.ts +16 -0
  744. package/dist/modes/interactive/components/bordered-loader.d.ts.map +1 -0
  745. package/dist/modes/interactive/components/bordered-loader.js +54 -0
  746. package/dist/modes/interactive/components/bordered-loader.js.map +1 -0
  747. package/dist/modes/interactive/components/branch-summary-message.d.ts +16 -0
  748. package/dist/modes/interactive/components/branch-summary-message.d.ts.map +1 -0
  749. package/dist/modes/interactive/components/branch-summary-message.js +51 -0
  750. package/dist/modes/interactive/components/branch-summary-message.js.map +1 -0
  751. package/dist/modes/interactive/components/compaction-summary-message.d.ts +16 -0
  752. package/dist/modes/interactive/components/compaction-summary-message.d.ts.map +1 -0
  753. package/dist/modes/interactive/components/compaction-summary-message.js +52 -0
  754. package/dist/modes/interactive/components/compaction-summary-message.js.map +1 -0
  755. package/dist/modes/interactive/components/config-selector.d.ts +102 -0
  756. package/dist/modes/interactive/components/config-selector.d.ts.map +1 -0
  757. package/dist/modes/interactive/components/config-selector.js +772 -0
  758. package/dist/modes/interactive/components/config-selector.js.map +1 -0
  759. package/dist/modes/interactive/components/countdown-timer.d.ts +14 -0
  760. package/dist/modes/interactive/components/countdown-timer.d.ts.map +1 -0
  761. package/dist/modes/interactive/components/countdown-timer.js +33 -0
  762. package/dist/modes/interactive/components/countdown-timer.js.map +1 -0
  763. package/dist/modes/interactive/components/custom-editor.d.ts +30 -0
  764. package/dist/modes/interactive/components/custom-editor.d.ts.map +1 -0
  765. package/dist/modes/interactive/components/custom-editor.js +115 -0
  766. package/dist/modes/interactive/components/custom-editor.js.map +1 -0
  767. package/dist/modes/interactive/components/custom-entry.d.ts +19 -0
  768. package/dist/modes/interactive/components/custom-entry.d.ts.map +1 -0
  769. package/dist/modes/interactive/components/custom-entry.js +52 -0
  770. package/dist/modes/interactive/components/custom-entry.js.map +1 -0
  771. package/dist/modes/interactive/components/custom-message.d.ts +22 -0
  772. package/dist/modes/interactive/components/custom-message.d.ts.map +1 -0
  773. package/dist/modes/interactive/components/custom-message.js +87 -0
  774. package/dist/modes/interactive/components/custom-message.js.map +1 -0
  775. package/dist/modes/interactive/components/diff.d.ts +12 -0
  776. package/dist/modes/interactive/components/diff.d.ts.map +1 -0
  777. package/dist/modes/interactive/components/diff.js +133 -0
  778. package/dist/modes/interactive/components/diff.js.map +1 -0
  779. package/dist/modes/interactive/components/dynamic-border.d.ts +15 -0
  780. package/dist/modes/interactive/components/dynamic-border.d.ts.map +1 -0
  781. package/dist/modes/interactive/components/dynamic-border.js +21 -0
  782. package/dist/modes/interactive/components/dynamic-border.js.map +1 -0
  783. package/dist/modes/interactive/components/earendil-announcement.d.ts +5 -0
  784. package/dist/modes/interactive/components/earendil-announcement.d.ts.map +1 -0
  785. package/dist/modes/interactive/components/earendil-announcement.js +40 -0
  786. package/dist/modes/interactive/components/earendil-announcement.js.map +1 -0
  787. package/dist/modes/interactive/components/easter-egg-3d.d.ts +104 -0
  788. package/dist/modes/interactive/components/easter-egg-3d.d.ts.map +1 -0
  789. package/dist/modes/interactive/components/easter-egg-3d.js +1141 -0
  790. package/dist/modes/interactive/components/easter-egg-3d.js.map +1 -0
  791. package/dist/modes/interactive/components/easter-egg-3d.lazy.d.ts +6 -0
  792. package/dist/modes/interactive/components/easter-egg-3d.lazy.d.ts.map +1 -0
  793. package/dist/modes/interactive/components/easter-egg-3d.lazy.js +23 -0
  794. package/dist/modes/interactive/components/easter-egg-3d.lazy.js.map +1 -0
  795. package/dist/modes/interactive/components/extension-editor.d.ts +24 -0
  796. package/dist/modes/interactive/components/extension-editor.d.ts.map +1 -0
  797. package/dist/modes/interactive/components/extension-editor.js +103 -0
  798. package/dist/modes/interactive/components/extension-editor.js.map +1 -0
  799. package/dist/modes/interactive/components/extension-input.d.ts +25 -0
  800. package/dist/modes/interactive/components/extension-input.d.ts.map +1 -0
  801. package/dist/modes/interactive/components/extension-input.js +67 -0
  802. package/dist/modes/interactive/components/extension-input.js.map +1 -0
  803. package/dist/modes/interactive/components/extension-selector.d.ts +27 -0
  804. package/dist/modes/interactive/components/extension-selector.d.ts.map +1 -0
  805. package/dist/modes/interactive/components/extension-selector.js +87 -0
  806. package/dist/modes/interactive/components/extension-selector.js.map +1 -0
  807. package/dist/modes/interactive/components/first-time-setup.d.ts +25 -0
  808. package/dist/modes/interactive/components/first-time-setup.d.ts.map +1 -0
  809. package/dist/modes/interactive/components/first-time-setup.js +109 -0
  810. package/dist/modes/interactive/components/first-time-setup.js.map +1 -0
  811. package/dist/modes/interactive/components/footer.d.ts +39 -0
  812. package/dist/modes/interactive/components/footer.d.ts.map +1 -0
  813. package/dist/modes/interactive/components/footer.js +265 -0
  814. package/dist/modes/interactive/components/footer.js.map +1 -0
  815. package/dist/modes/interactive/components/index.d.ts +33 -0
  816. package/dist/modes/interactive/components/index.d.ts.map +1 -0
  817. package/dist/modes/interactive/components/index.js +34 -0
  818. package/dist/modes/interactive/components/index.js.map +1 -0
  819. package/dist/modes/interactive/components/keybinding-hints.d.ts +13 -0
  820. package/dist/modes/interactive/components/keybinding-hints.d.ts.map +1 -0
  821. package/dist/modes/interactive/components/keybinding-hints.js +36 -0
  822. package/dist/modes/interactive/components/keybinding-hints.js.map +1 -0
  823. package/dist/modes/interactive/components/login-dialog.d.ts +54 -0
  824. package/dist/modes/interactive/components/login-dialog.d.ts.map +1 -0
  825. package/dist/modes/interactive/components/login-dialog.js +194 -0
  826. package/dist/modes/interactive/components/login-dialog.js.map +1 -0
  827. package/dist/modes/interactive/components/markdown-transform.d.ts +3 -0
  828. package/dist/modes/interactive/components/markdown-transform.d.ts.map +1 -0
  829. package/dist/modes/interactive/components/markdown-transform.js +19 -0
  830. package/dist/modes/interactive/components/markdown-transform.js.map +1 -0
  831. package/dist/modes/interactive/components/mermaid.d.ts +11 -0
  832. package/dist/modes/interactive/components/mermaid.d.ts.map +1 -0
  833. package/dist/modes/interactive/components/mermaid.js +75 -0
  834. package/dist/modes/interactive/components/mermaid.js.map +1 -0
  835. package/dist/modes/interactive/components/model-selector.d.ts +60 -0
  836. package/dist/modes/interactive/components/model-selector.d.ts.map +1 -0
  837. package/dist/modes/interactive/components/model-selector.js +361 -0
  838. package/dist/modes/interactive/components/model-selector.js.map +1 -0
  839. package/dist/modes/interactive/components/oauth-selector.d.ts +39 -0
  840. package/dist/modes/interactive/components/oauth-selector.d.ts.map +1 -0
  841. package/dist/modes/interactive/components/oauth-selector.js +166 -0
  842. package/dist/modes/interactive/components/oauth-selector.js.map +1 -0
  843. package/dist/modes/interactive/components/relay-logo.d.ts +22 -0
  844. package/dist/modes/interactive/components/relay-logo.d.ts.map +1 -0
  845. package/dist/modes/interactive/components/relay-logo.js +63 -0
  846. package/dist/modes/interactive/components/relay-logo.js.map +1 -0
  847. package/dist/modes/interactive/components/scoped-models-selector.d.ts +46 -0
  848. package/dist/modes/interactive/components/scoped-models-selector.d.ts.map +1 -0
  849. package/dist/modes/interactive/components/scoped-models-selector.js +326 -0
  850. package/dist/modes/interactive/components/scoped-models-selector.js.map +1 -0
  851. package/dist/modes/interactive/components/session-selector-search.d.ts +23 -0
  852. package/dist/modes/interactive/components/session-selector-search.d.ts.map +1 -0
  853. package/dist/modes/interactive/components/session-selector-search.js +155 -0
  854. package/dist/modes/interactive/components/session-selector-search.js.map +1 -0
  855. package/dist/modes/interactive/components/session-selector.d.ts +95 -0
  856. package/dist/modes/interactive/components/session-selector.d.ts.map +1 -0
  857. package/dist/modes/interactive/components/session-selector.js +893 -0
  858. package/dist/modes/interactive/components/session-selector.js.map +1 -0
  859. package/dist/modes/interactive/components/settings-selector.d.ts +96 -0
  860. package/dist/modes/interactive/components/settings-selector.d.ts.map +1 -0
  861. package/dist/modes/interactive/components/settings-selector.js +742 -0
  862. package/dist/modes/interactive/components/settings-selector.js.map +1 -0
  863. package/dist/modes/interactive/components/settings-submenu.d.ts +72 -0
  864. package/dist/modes/interactive/components/settings-submenu.d.ts.map +1 -0
  865. package/dist/modes/interactive/components/settings-submenu.js +165 -0
  866. package/dist/modes/interactive/components/settings-submenu.js.map +1 -0
  867. package/dist/modes/interactive/components/show-images-selector.d.ts +10 -0
  868. package/dist/modes/interactive/components/show-images-selector.d.ts.map +1 -0
  869. package/dist/modes/interactive/components/show-images-selector.js +39 -0
  870. package/dist/modes/interactive/components/show-images-selector.js.map +1 -0
  871. package/dist/modes/interactive/components/skill-invocation-message.d.ts +17 -0
  872. package/dist/modes/interactive/components/skill-invocation-message.d.ts.map +1 -0
  873. package/dist/modes/interactive/components/skill-invocation-message.js +54 -0
  874. package/dist/modes/interactive/components/skill-invocation-message.js.map +1 -0
  875. package/dist/modes/interactive/components/status-indicator.d.ts +30 -0
  876. package/dist/modes/interactive/components/status-indicator.d.ts.map +1 -0
  877. package/dist/modes/interactive/components/status-indicator.js +67 -0
  878. package/dist/modes/interactive/components/status-indicator.js.map +1 -0
  879. package/dist/modes/interactive/components/theme-selector.d.ts +11 -0
  880. package/dist/modes/interactive/components/theme-selector.d.ts.map +1 -0
  881. package/dist/modes/interactive/components/theme-selector.js +50 -0
  882. package/dist/modes/interactive/components/theme-selector.js.map +1 -0
  883. package/dist/modes/interactive/components/themed-text.d.ts +17 -0
  884. package/dist/modes/interactive/components/themed-text.d.ts.map +1 -0
  885. package/dist/modes/interactive/components/themed-text.js +29 -0
  886. package/dist/modes/interactive/components/themed-text.js.map +1 -0
  887. package/dist/modes/interactive/components/thinking-selector.d.ts +23 -0
  888. package/dist/modes/interactive/components/thinking-selector.d.ts.map +1 -0
  889. package/dist/modes/interactive/components/thinking-selector.js +109 -0
  890. package/dist/modes/interactive/components/thinking-selector.js.map +1 -0
  891. package/dist/modes/interactive/components/tool-execution.d.ts +68 -0
  892. package/dist/modes/interactive/components/tool-execution.d.ts.map +1 -0
  893. package/dist/modes/interactive/components/tool-execution.js +314 -0
  894. package/dist/modes/interactive/components/tool-execution.js.map +1 -0
  895. package/dist/modes/interactive/components/tree-selector.d.ts +94 -0
  896. package/dist/modes/interactive/components/tree-selector.d.ts.map +1 -0
  897. package/dist/modes/interactive/components/tree-selector.js +1254 -0
  898. package/dist/modes/interactive/components/tree-selector.js.map +1 -0
  899. package/dist/modes/interactive/components/trust-selector.d.ts +23 -0
  900. package/dist/modes/interactive/components/trust-selector.d.ts.map +1 -0
  901. package/dist/modes/interactive/components/trust-selector.js +91 -0
  902. package/dist/modes/interactive/components/trust-selector.js.map +1 -0
  903. package/dist/modes/interactive/components/user-message-selector.d.ts +30 -0
  904. package/dist/modes/interactive/components/user-message-selector.d.ts.map +1 -0
  905. package/dist/modes/interactive/components/user-message-selector.js +114 -0
  906. package/dist/modes/interactive/components/user-message-selector.js.map +1 -0
  907. package/dist/modes/interactive/components/user-message.d.ts +16 -0
  908. package/dist/modes/interactive/components/user-message.d.ts.map +1 -0
  909. package/dist/modes/interactive/components/user-message.js +50 -0
  910. package/dist/modes/interactive/components/user-message.js.map +1 -0
  911. package/dist/modes/interactive/components/visual-truncate.d.ts +48 -0
  912. package/dist/modes/interactive/components/visual-truncate.d.ts.map +1 -0
  913. package/dist/modes/interactive/components/visual-truncate.js +66 -0
  914. package/dist/modes/interactive/components/visual-truncate.js.map +1 -0
  915. package/dist/modes/interactive/external-editor.d.ts +12 -0
  916. package/dist/modes/interactive/external-editor.d.ts.map +1 -0
  917. package/dist/modes/interactive/external-editor.js +38 -0
  918. package/dist/modes/interactive/external-editor.js.map +1 -0
  919. package/dist/modes/interactive/interactive-mode.d.ts +482 -0
  920. package/dist/modes/interactive/interactive-mode.d.ts.map +1 -0
  921. package/dist/modes/interactive/interactive-mode.js +5861 -0
  922. package/dist/modes/interactive/interactive-mode.js.map +1 -0
  923. package/dist/modes/interactive/model-catalog-refresh.d.ts +7 -0
  924. package/dist/modes/interactive/model-catalog-refresh.d.ts.map +1 -0
  925. package/dist/modes/interactive/model-catalog-refresh.js +34 -0
  926. package/dist/modes/interactive/model-catalog-refresh.js.map +1 -0
  927. package/dist/modes/interactive/model-search.d.ts +12 -0
  928. package/dist/modes/interactive/model-search.d.ts.map +1 -0
  929. package/dist/modes/interactive/model-search.js +15 -0
  930. package/dist/modes/interactive/model-search.js.map +1 -0
  931. package/dist/modes/interactive/session-share.d.ts +16 -0
  932. package/dist/modes/interactive/session-share.d.ts.map +1 -0
  933. package/dist/modes/interactive/session-share.js +119 -0
  934. package/dist/modes/interactive/session-share.js.map +1 -0
  935. package/dist/modes/interactive/theme/dark.json +78 -0
  936. package/dist/modes/interactive/theme/light.json +78 -0
  937. package/dist/modes/interactive/theme/system-theme.d.ts +55 -0
  938. package/dist/modes/interactive/theme/system-theme.d.ts.map +1 -0
  939. package/dist/modes/interactive/theme/system-theme.js +546 -0
  940. package/dist/modes/interactive/theme/system-theme.js.map +1 -0
  941. package/dist/modes/interactive/theme/theme-controller.d.ts +81 -0
  942. package/dist/modes/interactive/theme/theme-controller.d.ts.map +1 -0
  943. package/dist/modes/interactive/theme/theme-controller.js +210 -0
  944. package/dist/modes/interactive/theme/theme-controller.js.map +1 -0
  945. package/dist/modes/interactive/theme/theme-json.d.ts +85 -0
  946. package/dist/modes/interactive/theme/theme-json.d.ts.map +1 -0
  947. package/dist/modes/interactive/theme/theme-json.js +132 -0
  948. package/dist/modes/interactive/theme/theme-json.js.map +1 -0
  949. package/dist/modes/interactive/theme/theme-schema.json +361 -0
  950. package/dist/modes/interactive/theme/theme.d.ts +158 -0
  951. package/dist/modes/interactive/theme/theme.d.ts.map +1 -0
  952. package/dist/modes/interactive/theme/theme.js +912 -0
  953. package/dist/modes/interactive/theme/theme.js.map +1 -0
  954. package/dist/modes/interactive/tui-renderer.d.ts +22 -0
  955. package/dist/modes/interactive/tui-renderer.d.ts.map +1 -0
  956. package/dist/modes/interactive/tui-renderer.js +67 -0
  957. package/dist/modes/interactive/tui-renderer.js.map +1 -0
  958. package/dist/modes/json-event.d.ts +34 -0
  959. package/dist/modes/json-event.d.ts.map +1 -0
  960. package/dist/modes/json-event.js +29 -0
  961. package/dist/modes/json-event.js.map +1 -0
  962. package/dist/modes/print-mode.d.ts +28 -0
  963. package/dist/modes/print-mode.d.ts.map +1 -0
  964. package/dist/modes/print-mode.js +142 -0
  965. package/dist/modes/print-mode.js.map +1 -0
  966. package/dist/modes/rpc/jsonl.d.ts +17 -0
  967. package/dist/modes/rpc/jsonl.d.ts.map +1 -0
  968. package/dist/modes/rpc/jsonl.js +49 -0
  969. package/dist/modes/rpc/jsonl.js.map +1 -0
  970. package/dist/modes/rpc/rpc-client.d.ts +254 -0
  971. package/dist/modes/rpc/rpc-client.d.ts.map +1 -0
  972. package/dist/modes/rpc/rpc-client.js +499 -0
  973. package/dist/modes/rpc/rpc-client.js.map +1 -0
  974. package/dist/modes/rpc/rpc-mode.d.ts +20 -0
  975. package/dist/modes/rpc/rpc-mode.d.ts.map +1 -0
  976. package/dist/modes/rpc/rpc-mode.js +655 -0
  977. package/dist/modes/rpc/rpc-mode.js.map +1 -0
  978. package/dist/modes/rpc/rpc-types.d.ts +478 -0
  979. package/dist/modes/rpc/rpc-types.d.ts.map +1 -0
  980. package/dist/modes/rpc/rpc-types.js +8 -0
  981. package/dist/modes/rpc/rpc-types.js.map +1 -0
  982. package/dist/package-manager-cli.d.ts +8 -0
  983. package/dist/package-manager-cli.d.ts.map +1 -0
  984. package/dist/package-manager-cli.js +524 -0
  985. package/dist/package-manager-cli.js.map +1 -0
  986. package/dist/rpc-entry.d.ts +3 -0
  987. package/dist/rpc-entry.d.ts.map +1 -0
  988. package/dist/rpc-entry.js +11 -0
  989. package/dist/rpc-entry.js.map +1 -0
  990. package/dist/utils/abort.d.ts +5 -0
  991. package/dist/utils/abort.d.ts.map +1 -0
  992. package/dist/utils/abort.js +48 -0
  993. package/dist/utils/abort.js.map +1 -0
  994. package/dist/utils/ansi.d.ts +2 -0
  995. package/dist/utils/ansi.d.ts.map +1 -0
  996. package/dist/utils/ansi.js +52 -0
  997. package/dist/utils/ansi.js.map +1 -0
  998. package/dist/utils/changelog.d.ts +22 -0
  999. package/dist/utils/changelog.d.ts.map +1 -0
  1000. package/dist/utils/changelog.js +176 -0
  1001. package/dist/utils/changelog.js.map +1 -0
  1002. package/dist/utils/child-process.d.ts +18 -0
  1003. package/dist/utils/child-process.d.ts.map +1 -0
  1004. package/dist/utils/child-process.js +106 -0
  1005. package/dist/utils/child-process.js.map +1 -0
  1006. package/dist/utils/clipboard-command.d.ts +7 -0
  1007. package/dist/utils/clipboard-command.d.ts.map +1 -0
  1008. package/dist/utils/clipboard-command.js +45 -0
  1009. package/dist/utils/clipboard-command.js.map +1 -0
  1010. package/dist/utils/clipboard-image.d.ts +11 -0
  1011. package/dist/utils/clipboard-image.d.ts.map +1 -0
  1012. package/dist/utils/clipboard-image.js +214 -0
  1013. package/dist/utils/clipboard-image.js.map +1 -0
  1014. package/dist/utils/clipboard.d.ts +6 -0
  1015. package/dist/utils/clipboard.d.ts.map +1 -0
  1016. package/dist/utils/clipboard.js +156 -0
  1017. package/dist/utils/clipboard.js.map +1 -0
  1018. package/dist/utils/deprecation.d.ts +4 -0
  1019. package/dist/utils/deprecation.d.ts.map +1 -0
  1020. package/dist/utils/deprecation.js +13 -0
  1021. package/dist/utils/deprecation.js.map +1 -0
  1022. package/dist/utils/exif-orientation.d.ts +5 -0
  1023. package/dist/utils/exif-orientation.d.ts.map +1 -0
  1024. package/dist/utils/exif-orientation.js +157 -0
  1025. package/dist/utils/exif-orientation.js.map +1 -0
  1026. package/dist/utils/frontmatter.d.ts +8 -0
  1027. package/dist/utils/frontmatter.d.ts.map +1 -0
  1028. package/dist/utils/frontmatter.js +27 -0
  1029. package/dist/utils/frontmatter.js.map +1 -0
  1030. package/dist/utils/fs-watch.d.ts +5 -0
  1031. package/dist/utils/fs-watch.d.ts.map +1 -0
  1032. package/dist/utils/fs-watch.js +25 -0
  1033. package/dist/utils/fs-watch.js.map +1 -0
  1034. package/dist/utils/git.d.ts +26 -0
  1035. package/dist/utils/git.d.ts.map +1 -0
  1036. package/dist/utils/git.js +195 -0
  1037. package/dist/utils/git.js.map +1 -0
  1038. package/dist/utils/html.d.ts +7 -0
  1039. package/dist/utils/html.d.ts.map +1 -0
  1040. package/dist/utils/html.js +40 -0
  1041. package/dist/utils/html.js.map +1 -0
  1042. package/dist/utils/image-convert.d.ts +22 -0
  1043. package/dist/utils/image-convert.d.ts.map +1 -0
  1044. package/dist/utils/image-convert.js +84 -0
  1045. package/dist/utils/image-convert.js.map +1 -0
  1046. package/dist/utils/image-process.d.ts +18 -0
  1047. package/dist/utils/image-process.d.ts.map +1 -0
  1048. package/dist/utils/image-process.js +83 -0
  1049. package/dist/utils/image-process.js.map +1 -0
  1050. package/dist/utils/image-resize-core.d.ts +30 -0
  1051. package/dist/utils/image-resize-core.d.ts.map +1 -0
  1052. package/dist/utils/image-resize-core.js +124 -0
  1053. package/dist/utils/image-resize-core.js.map +1 -0
  1054. package/dist/utils/image-resize-worker.d.ts +2 -0
  1055. package/dist/utils/image-resize-worker.d.ts.map +1 -0
  1056. package/dist/utils/image-resize-worker.js +31 -0
  1057. package/dist/utils/image-resize-worker.js.map +1 -0
  1058. package/dist/utils/image-resize.d.ts +16 -0
  1059. package/dist/utils/image-resize.d.ts.map +1 -0
  1060. package/dist/utils/image-resize.js +97 -0
  1061. package/dist/utils/image-resize.js.map +1 -0
  1062. package/dist/utils/json.d.ts +3 -0
  1063. package/dist/utils/json.d.ts.map +1 -0
  1064. package/dist/utils/json.js +7 -0
  1065. package/dist/utils/json.js.map +1 -0
  1066. package/dist/utils/management-http.d.ts +25 -0
  1067. package/dist/utils/management-http.d.ts.map +1 -0
  1068. package/dist/utils/management-http.js +54 -0
  1069. package/dist/utils/management-http.js.map +1 -0
  1070. package/dist/utils/mime.d.ts +3 -0
  1071. package/dist/utils/mime.d.ts.map +1 -0
  1072. package/dist/utils/mime.js +110 -0
  1073. package/dist/utils/mime.js.map +1 -0
  1074. package/dist/utils/open-browser.d.ts +9 -0
  1075. package/dist/utils/open-browser.d.ts.map +1 -0
  1076. package/dist/utils/open-browser.js +22 -0
  1077. package/dist/utils/open-browser.js.map +1 -0
  1078. package/dist/utils/output-files.d.ts +15 -0
  1079. package/dist/utils/output-files.d.ts.map +1 -0
  1080. package/dist/utils/output-files.js +30 -0
  1081. package/dist/utils/output-files.js.map +1 -0
  1082. package/dist/utils/paths.d.ts +34 -0
  1083. package/dist/utils/paths.d.ts.map +1 -0
  1084. package/dist/utils/paths.js +115 -0
  1085. package/dist/utils/paths.js.map +1 -0
  1086. package/dist/utils/photon.d.ts +21 -0
  1087. package/dist/utils/photon.d.ts.map +1 -0
  1088. package/dist/utils/photon.js +121 -0
  1089. package/dist/utils/photon.js.map +1 -0
  1090. package/dist/utils/relay-user-agent.d.ts +2 -0
  1091. package/dist/utils/relay-user-agent.d.ts.map +1 -0
  1092. package/dist/utils/relay-user-agent.js +5 -0
  1093. package/dist/utils/relay-user-agent.js.map +1 -0
  1094. package/dist/utils/shell.d.ts +32 -0
  1095. package/dist/utils/shell.d.ts.map +1 -0
  1096. package/dist/utils/shell.js +189 -0
  1097. package/dist/utils/shell.js.map +1 -0
  1098. package/dist/utils/sleep.d.ts +5 -0
  1099. package/dist/utils/sleep.d.ts.map +1 -0
  1100. package/dist/utils/sleep.js +17 -0
  1101. package/dist/utils/sleep.js.map +1 -0
  1102. package/dist/utils/syntax-highlight.d.ts +13 -0
  1103. package/dist/utils/syntax-highlight.d.ts.map +1 -0
  1104. package/dist/utils/syntax-highlight.js +179 -0
  1105. package/dist/utils/syntax-highlight.js.map +1 -0
  1106. package/dist/utils/text.d.ts +8 -0
  1107. package/dist/utils/text.d.ts.map +1 -0
  1108. package/dist/utils/text.js +9 -0
  1109. package/dist/utils/text.js.map +1 -0
  1110. package/dist/utils/tool-result-images.d.ts +21 -0
  1111. package/dist/utils/tool-result-images.d.ts.map +1 -0
  1112. package/dist/utils/tool-result-images.js +48 -0
  1113. package/dist/utils/tool-result-images.js.map +1 -0
  1114. package/dist/utils/tools-manager.d.ts +13 -0
  1115. package/dist/utils/tools-manager.d.ts.map +1 -0
  1116. package/dist/utils/tools-manager.js +343 -0
  1117. package/dist/utils/tools-manager.js.map +1 -0
  1118. package/dist/utils/version-check.d.ts +17 -0
  1119. package/dist/utils/version-check.d.ts.map +1 -0
  1120. package/dist/utils/version-check.js +78 -0
  1121. package/dist/utils/version-check.js.map +1 -0
  1122. package/dist/utils/wsl.d.ts +3 -0
  1123. package/dist/utils/wsl.d.ts.map +1 -0
  1124. package/dist/utils/wsl.js +15 -0
  1125. package/dist/utils/wsl.js.map +1 -0
  1126. package/dist/utils/zip.d.ts +7 -0
  1127. package/dist/utils/zip.d.ts.map +1 -0
  1128. package/dist/utils/zip.js +60 -0
  1129. package/dist/utils/zip.js.map +1 -0
  1130. package/docs/cli-integration.md +106 -0
  1131. package/docs/cli.md +316 -0
  1132. package/docs/codemode.md +207 -0
  1133. package/docs/compaction.md +463 -0
  1134. package/docs/configuration.md +47 -0
  1135. package/docs/containerization.md +154 -0
  1136. package/docs/custom-provider.md +173 -0
  1137. package/docs/docs.json +224 -0
  1138. package/docs/environment-variables.md +97 -0
  1139. package/docs/extensions.md +274 -0
  1140. package/docs/harness-core.md +99 -0
  1141. package/docs/how-relay-works.md +49 -0
  1142. package/docs/images/doom-extension.png +0 -0
  1143. package/docs/images/exy.png +0 -0
  1144. package/docs/images/interactive-mode.png +0 -0
  1145. package/docs/images/tree-view.png +0 -0
  1146. package/docs/index.md +39 -0
  1147. package/docs/intake.md +40 -0
  1148. package/docs/json.md +226 -0
  1149. package/docs/keybindings.md +194 -0
  1150. package/docs/laya.md +152 -0
  1151. package/docs/llama-cpp.md +114 -0
  1152. package/docs/mcp.md +258 -0
  1153. package/docs/message-types.md +261 -0
  1154. package/docs/models.md +205 -0
  1155. package/docs/packages.md +129 -0
  1156. package/docs/prompt-templates.md +59 -0
  1157. package/docs/providers.md +187 -0
  1158. package/docs/quickstart.md +139 -0
  1159. package/docs/rpc-commands.md +860 -0
  1160. package/docs/rpc-extension-ui.md +200 -0
  1161. package/docs/rpc.md +193 -0
  1162. package/docs/sdk.md +147 -0
  1163. package/docs/security.md +99 -0
  1164. package/docs/session-format.md +293 -0
  1165. package/docs/sessions.md +66 -0
  1166. package/docs/settings.md +206 -0
  1167. package/docs/shell-aliases.md +93 -0
  1168. package/docs/skills.md +93 -0
  1169. package/docs/slash-commands.md +61 -0
  1170. package/docs/terminal-setup.md +219 -0
  1171. package/docs/termux.md +121 -0
  1172. package/docs/themes.md +136 -0
  1173. package/docs/tmux.md +55 -0
  1174. package/docs/tui.md +125 -0
  1175. package/docs/usage.md +94 -0
  1176. package/docs/virtual-models.md +114 -0
  1177. package/docs/windows.md +67 -0
  1178. package/examples/README.md +39 -0
  1179. package/examples/extensions/README.md +213 -0
  1180. package/examples/extensions/auto-commit-on-exit.ts +49 -0
  1181. package/examples/extensions/bash-spawn-hook.ts +30 -0
  1182. package/examples/extensions/bookmark.ts +50 -0
  1183. package/examples/extensions/border-status-editor.ts +150 -0
  1184. package/examples/extensions/built-in-tool-renderer.ts +225 -0
  1185. package/examples/extensions/claude-rules.ts +86 -0
  1186. package/examples/extensions/commands.ts +72 -0
  1187. package/examples/extensions/confirm-destructive.ts +59 -0
  1188. package/examples/extensions/custom-compaction.ts +117 -0
  1189. package/examples/extensions/custom-footer.ts +64 -0
  1190. package/examples/extensions/custom-header.ts +73 -0
  1191. package/examples/extensions/custom-provider-anthropic/index.ts +617 -0
  1192. package/examples/extensions/custom-provider-anthropic/package-lock.json +24 -0
  1193. package/examples/extensions/custom-provider-anthropic/package.json +19 -0
  1194. package/examples/extensions/custom-provider-gitlab-duo/index.ts +405 -0
  1195. package/examples/extensions/custom-provider-gitlab-duo/package.json +16 -0
  1196. package/examples/extensions/custom-provider-gitlab-duo/test.ts +82 -0
  1197. package/examples/extensions/debug-provider.ts +90 -0
  1198. package/examples/extensions/dirty-repo-guard.ts +56 -0
  1199. package/examples/extensions/doom-overlay/README.md +46 -0
  1200. package/examples/extensions/doom-overlay/doom/build/doom.js +21 -0
  1201. package/examples/extensions/doom-overlay/doom/build/doom.wasm +0 -0
  1202. package/examples/extensions/doom-overlay/doom/build.sh +152 -0
  1203. package/examples/extensions/doom-overlay/doom/doomgeneric_relay.c +72 -0
  1204. package/examples/extensions/doom-overlay/doom-component.ts +132 -0
  1205. package/examples/extensions/doom-overlay/doom-engine.ts +173 -0
  1206. package/examples/extensions/doom-overlay/doom-keys.ts +104 -0
  1207. package/examples/extensions/doom-overlay/index.ts +74 -0
  1208. package/examples/extensions/doom-overlay/wad-finder.ts +55 -0
  1209. package/examples/extensions/dynamic-resources/SKILL.md +8 -0
  1210. package/examples/extensions/dynamic-resources/dynamic.json +81 -0
  1211. package/examples/extensions/dynamic-resources/dynamic.md +5 -0
  1212. package/examples/extensions/dynamic-resources/index.ts +15 -0
  1213. package/examples/extensions/dynamic-tools.ts +74 -0
  1214. package/examples/extensions/entry-renderer.ts +41 -0
  1215. package/examples/extensions/event-bus.ts +43 -0
  1216. package/examples/extensions/file-trigger.ts +41 -0
  1217. package/examples/extensions/git-checkpoint.ts +53 -0
  1218. package/examples/extensions/git-merge-and-resolve.ts +115 -0
  1219. package/examples/extensions/github-issue-autocomplete.ts +185 -0
  1220. package/examples/extensions/handoff.ts +190 -0
  1221. package/examples/extensions/hello.ts +26 -0
  1222. package/examples/extensions/hidden-thinking-label.ts +53 -0
  1223. package/examples/extensions/inline-bash.ts +94 -0
  1224. package/examples/extensions/input-transform-streaming.ts +39 -0
  1225. package/examples/extensions/input-transform.ts +43 -0
  1226. package/examples/extensions/interactive-shell.ts +196 -0
  1227. package/examples/extensions/jev-router.ts +113 -0
  1228. package/examples/extensions/mac-system-theme.ts +47 -0
  1229. package/examples/extensions/message-renderer.ts +59 -0
  1230. package/examples/extensions/minimal-mode.ts +354 -0
  1231. package/examples/extensions/modal-editor.ts +85 -0
  1232. package/examples/extensions/model-status.ts +31 -0
  1233. package/examples/extensions/notify.ts +57 -0
  1234. package/examples/extensions/overlay-qa-tests.ts +1450 -0
  1235. package/examples/extensions/overlay-test.ts +153 -0
  1236. package/examples/extensions/permission-gate.ts +34 -0
  1237. package/examples/extensions/pirate.ts +47 -0
  1238. package/examples/extensions/plan-mode/README.md +66 -0
  1239. package/examples/extensions/plan-mode/index.ts +390 -0
  1240. package/examples/extensions/plan-mode/utils.ts +168 -0
  1241. package/examples/extensions/preset.ts +436 -0
  1242. package/examples/extensions/project-trust.ts +64 -0
  1243. package/examples/extensions/prompt-customizer.ts +49 -0
  1244. package/examples/extensions/protected-paths.ts +30 -0
  1245. package/examples/extensions/provider-payload.ts +18 -0
  1246. package/examples/extensions/qna.ts +118 -0
  1247. package/examples/extensions/question.ts +278 -0
  1248. package/examples/extensions/questionnaire.ts +440 -0
  1249. package/examples/extensions/rainbow-editor.ts +88 -0
  1250. package/examples/extensions/reload-runtime.ts +37 -0
  1251. package/examples/extensions/rpc-demo.ts +118 -0
  1252. package/examples/extensions/sandbox/index.ts +321 -0
  1253. package/examples/extensions/sandbox/package-lock.json +92 -0
  1254. package/examples/extensions/sandbox/package.json +19 -0
  1255. package/examples/extensions/send-user-message.ts +97 -0
  1256. package/examples/extensions/session-name.ts +27 -0
  1257. package/examples/extensions/shutdown-command.ts +63 -0
  1258. package/examples/extensions/snake.ts +343 -0
  1259. package/examples/extensions/space-invaders.ts +560 -0
  1260. package/examples/extensions/ssh.ts +220 -0
  1261. package/examples/extensions/status-line.ts +32 -0
  1262. package/examples/extensions/structured-output.ts +65 -0
  1263. package/examples/extensions/subagent/README.md +196 -0
  1264. package/examples/extensions/subagent/agents/planner.md +37 -0
  1265. package/examples/extensions/subagent/agents/reviewer.md +35 -0
  1266. package/examples/extensions/subagent/agents/scout.md +50 -0
  1267. package/examples/extensions/subagent/agents/security-auditor.md +20 -0
  1268. package/examples/extensions/subagent/agents/verifier.md +31 -0
  1269. package/examples/extensions/subagent/agents/worker.md +24 -0
  1270. package/examples/extensions/subagent/agents.ts +157 -0
  1271. package/examples/extensions/subagent/index.ts +1038 -0
  1272. package/examples/extensions/subagent/prompts/implement-and-review.md +10 -0
  1273. package/examples/extensions/subagent/prompts/implement-and-verify.md +10 -0
  1274. package/examples/extensions/subagent/prompts/implement.md +10 -0
  1275. package/examples/extensions/subagent/prompts/scout-and-plan.md +9 -0
  1276. package/examples/extensions/subagent/skills/delegate/SKILL.md +48 -0
  1277. package/examples/extensions/subagent/skills/security-audit/SKILL.md +108 -0
  1278. package/examples/extensions/subagent/skills/security-audit/references/categories.md +130 -0
  1279. package/examples/extensions/subagent/skills/security-audit/references/report.md +38 -0
  1280. package/examples/extensions/summarize.ts +199 -0
  1281. package/examples/extensions/system-prompt-header.ts +17 -0
  1282. package/examples/extensions/tic-tac-toe.ts +1008 -0
  1283. package/examples/extensions/timed-confirm.ts +70 -0
  1284. package/examples/extensions/titlebar-spinner.ts +58 -0
  1285. package/examples/extensions/todo.ts +297 -0
  1286. package/examples/extensions/tool-override.ts +144 -0
  1287. package/examples/extensions/tools.ts +146 -0
  1288. package/examples/extensions/trigger-compact.ts +50 -0
  1289. package/examples/extensions/truncated-tool.ts +195 -0
  1290. package/examples/extensions/widget-placement.ts +9 -0
  1291. package/examples/extensions/with-deps/index.ts +32 -0
  1292. package/examples/extensions/with-deps/package-lock.json +31 -0
  1293. package/examples/extensions/with-deps/package.json +22 -0
  1294. package/examples/extensions/working-indicator.ts +123 -0
  1295. package/examples/extensions/working-message-test.ts +25 -0
  1296. package/examples/plugins/relay-example-plugin/README.md +38 -0
  1297. package/examples/plugins/relay-example-plugin/package.json +10 -0
  1298. package/examples/plugins/relay-example-plugin/src/contract.ts +13 -0
  1299. package/examples/plugins/relay-example-plugin/src/session.ts +24 -0
  1300. package/examples/plugins/relay-example-plugin/src/tui.ts +31 -0
  1301. package/examples/rpc-client.ts +35 -0
  1302. package/examples/rpc-extension-ui.ts +661 -0
  1303. package/examples/sdk/01-minimal.ts +26 -0
  1304. package/examples/sdk/02-custom-model.ts +49 -0
  1305. package/examples/sdk/03-custom-prompt.ts +70 -0
  1306. package/examples/sdk/04-skills.ts +55 -0
  1307. package/examples/sdk/05-tools.ts +48 -0
  1308. package/examples/sdk/06-extensions.ts +94 -0
  1309. package/examples/sdk/07-context-files.ts +42 -0
  1310. package/examples/sdk/08-prompt-templates.ts +51 -0
  1311. package/examples/sdk/09-api-keys-and-oauth.ts +34 -0
  1312. package/examples/sdk/10-settings.ts +53 -0
  1313. package/examples/sdk/11-sessions.ts +52 -0
  1314. package/examples/sdk/12-full-control.ts +74 -0
  1315. package/examples/sdk/13-session-runtime.ts +67 -0
  1316. package/examples/sdk/14-codemode-mcp.ts +61 -0
  1317. package/examples/sdk/README.md +141 -0
  1318. package/package.json +111 -5
@@ -0,0 +1,176 @@
1
+ import { type DockerRun } from "./docker.ts";
2
+ import { type LayaModelManifest } from "./runtime.ts";
3
+ /**
4
+ * Training of the routing model, in a Docker container. Exercises live in a workspace in the Laya
5
+ * home on the host: the synthetic seed the shipped model was trained on, plus the tasks labeled from
6
+ * sessions (`/laya learn`). The container reads the workspace and writes the new model to the models
7
+ * volume. Training starts from the model that routes today, and the new model replaces it only when
8
+ * it answers the held-out test split about as well.
9
+ */
10
+ /** One exercise in laya-trainer's dataset format. */
11
+ export interface TrainingRow {
12
+ id: string;
13
+ state: {
14
+ request: string;
15
+ };
16
+ expected: Record<string, string | number | boolean>;
17
+ source: string;
18
+ split?: "train" | "val" | "test";
19
+ /** Session the task came from. */
20
+ session?: string;
21
+ label_source?: string;
22
+ note?: string;
23
+ /** What to know when doing a similar task. Shown to the model, never trained on. */
24
+ lesson?: string;
25
+ created?: string;
26
+ }
27
+ export interface TrainingWorkspace {
28
+ dir: string;
29
+ decisions: string;
30
+ dataset: string;
31
+ registry: string;
32
+ }
33
+ /** Exercises labeled from sessions. Training focuses on them; the rest is replayed. */
34
+ export declare const SESSION_SOURCE = "session";
35
+ /** The seed size of the shipped model: the same rows, so the same held-out test split. */
36
+ export declare const SEED_ROWS = 1100;
37
+ /** A new model is activated unless it answers more than this fraction fewer test questions. */
38
+ export declare const REGRESSION_TOLERANCE = 0.01;
39
+ export declare function trainingWorkspace(home: string): TrainingWorkspace;
40
+ /** Writes the current questions and, on first use, the seed exercises. */
41
+ export declare function ensureWorkspace(workspace: TrainingWorkspace): void;
42
+ export declare function readRows(path: string): TrainingRow[];
43
+ export declare function writeRows(path: string, rows: readonly TrainingRow[]): void;
44
+ /** Requests that differ only in case and spacing are the same exercise. */
45
+ export declare function requestKey(request: string): string;
46
+ /**
47
+ * Adds rows, replacing the labels of an exercise with the same request: a later session labels it
48
+ * with newer evidence.
49
+ */
50
+ export declare function mergeRows(existing: readonly TrainingRow[], incoming: ReadonlyArray<Omit<TrainingRow, "id">>): {
51
+ rows: TrainingRow[];
52
+ added: number;
53
+ updated: number;
54
+ };
55
+ /** Correct answers on a set of exercises, as the training script reports them. */
56
+ export interface Score {
57
+ n: number;
58
+ correct: number;
59
+ per_question: Record<string, {
60
+ n: number;
61
+ correct: number;
62
+ }>;
63
+ }
64
+ export interface TrainedModel {
65
+ name: string;
66
+ createdAt: string;
67
+ /** Model the training started from. */
68
+ basedOn: string;
69
+ sessionTasks: number;
70
+ /** Test split: the new model and the one it started from. */
71
+ test: {
72
+ candidate: Score;
73
+ current: Score;
74
+ };
75
+ /** Session exercises: answers the new model and the one it started from get right. */
76
+ session: {
77
+ candidate: Score;
78
+ current: Score;
79
+ };
80
+ seconds: number;
81
+ device: string;
82
+ }
83
+ export interface ModelRegistry {
84
+ /** Trained model that routes requests. Absent: the shipped model. */
85
+ active?: string;
86
+ models: TrainedModel[];
87
+ }
88
+ export declare function readRegistry(workspace: TrainingWorkspace): ModelRegistry;
89
+ export declare function writeRegistry(workspace: TrainingWorkspace, registry: ModelRegistry): void;
90
+ export declare const accuracy: (score: Score) => number;
91
+ /** Whether the new model answers the test split well enough to replace the current one. */
92
+ export declare function passesGate(test: TrainedModel["test"]): boolean;
93
+ /** Keeps the newest inactive models and the active one; returns the names to delete. */
94
+ export declare function pruneModels(registry: ModelRegistry): {
95
+ registry: ModelRegistry;
96
+ removed: string[];
97
+ };
98
+ export interface TrainingProgress {
99
+ phase: "train" | "evaluate";
100
+ epoch?: number;
101
+ epochs?: number;
102
+ done?: number;
103
+ eta_s?: number;
104
+ device?: string;
105
+ model?: "new" | "current";
106
+ }
107
+ export declare function describeProgress(progress: TrainingProgress): string;
108
+ export interface TrainingOutcome {
109
+ model: TrainedModel;
110
+ /** Whether the new model now routes requests. */
111
+ activated: boolean;
112
+ /** Model that routed before. */
113
+ previous: string;
114
+ }
115
+ export interface TrainingListener {
116
+ progress(progress: TrainingProgress): void;
117
+ finished(result: {
118
+ outcome: TrainingOutcome;
119
+ } | {
120
+ error: Error;
121
+ }): void;
122
+ }
123
+ export interface LayaTrainerOptions {
124
+ home: string;
125
+ manifest: LayaModelManifest;
126
+ docker: DockerRun;
127
+ /** Image the training container runs; the server's image. */
128
+ image: () => Promise<string>;
129
+ /** Whether the training container can use an NVIDIA GPU. */
130
+ gpu: () => Promise<boolean>;
131
+ }
132
+ /** Whether a container of the image sees an NVIDIA GPU: needs the CUDA image and Docker GPU support. */
133
+ export declare function dockerHasGpu(docker: DockerRun, image: string): Promise<boolean>;
134
+ /**
135
+ * Runs one training at a time. It belongs to the process, not to a session runtime, so training
136
+ * goes on across `/new` and `/resume`; `listener` is the latest runtime that wants its events.
137
+ */
138
+ export declare class LayaTrainer {
139
+ readonly workspace: TrainingWorkspace;
140
+ private readonly options;
141
+ private abort;
142
+ private job;
143
+ /** Latest progress of the running training. */
144
+ progress: TrainingProgress | undefined;
145
+ listener: TrainingListener | undefined;
146
+ constructor(options: LayaTrainerOptions);
147
+ get running(): boolean;
148
+ /** The model that routes requests, with its path inside the containers: the active trained model, or the shipped one. */
149
+ activeModel(): {
150
+ name: string;
151
+ dir: string;
152
+ };
153
+ /** Selects the model that routes requests; the shipped model's version selects it. */
154
+ use(name: string): void;
155
+ /** Exercises in the workspace, by source. */
156
+ counts(): Record<string, number>;
157
+ /** Adds labeled session tasks to the workspace. */
158
+ addExercises(rows: ReadonlyArray<Omit<TrainingRow, "id">>): {
159
+ added: number;
160
+ updated: number;
161
+ };
162
+ /**
163
+ * Trains a new model from the active one and activates it when it passes the test gate. The
164
+ * listener hears the result too, so a caller that does not wait only needs to catch.
165
+ */
166
+ train(): Promise<TrainingOutcome>;
167
+ /** Stops a running training and removes its container. */
168
+ stop(): void;
169
+ private run;
170
+ /** Deletes trained models from the volume. */
171
+ private removeModels;
172
+ private runScript;
173
+ }
174
+ /** The trainer of a Laya home, shared by every session runtime of the process. */
175
+ export declare function sharedTrainer(options: LayaTrainerOptions): LayaTrainer;
176
+ //# sourceMappingURL=training.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"training.d.ts","sourceRoot":"","sources":["../../../src/extensions/laya/training.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,337 @@
1
+ import { existsSync, mkdirSync, readFileSync, writeFileSync } from "node:fs";
2
+ import { dirname, join } from "node:path";
3
+ import { dockerError } from "./docker.js";
4
+ import { layaDecisionsFile } from "./questions.js";
5
+ import { LAYA_IMAGE_PATHS, LAYA_MODELS_VOLUME, LAYA_TRAIN_CONTAINER, trainedModelPath, } from "./runtime.js";
6
+ import { generateSeed } from "./seed.js";
7
+ /** Exercises labeled from sessions. Training focuses on them; the rest is replayed. */
8
+ export const SESSION_SOURCE = "session";
9
+ /** The seed size of the shipped model: the same rows, so the same held-out test split. */
10
+ export const SEED_ROWS = 1100;
11
+ /** A new model is activated unless it answers more than this fraction fewer test questions. */
12
+ export const REGRESSION_TOLERANCE = 0.01;
13
+ /** Trained models kept besides the active one, newest first. Older ones are deleted. */
14
+ const KEEP_INACTIVE_MODELS = 2;
15
+ export function trainingWorkspace(home) {
16
+ const dir = join(home, "training");
17
+ return {
18
+ dir,
19
+ decisions: join(dir, "decisions.json"),
20
+ dataset: join(dir, "data", "dataset.jsonl"),
21
+ registry: join(dir, "models.json"),
22
+ };
23
+ }
24
+ /** Writes the current questions and, on first use, the seed exercises. */
25
+ export function ensureWorkspace(workspace) {
26
+ mkdirSync(dirname(workspace.dataset), { recursive: true });
27
+ writeFileSync(workspace.decisions, `${JSON.stringify(layaDecisionsFile(), null, 2)}\n`, "utf8");
28
+ if (!existsSync(workspace.dataset)) {
29
+ const rows = generateSeed(SEED_ROWS).map((row, i) => ({ id: `r${String(i + 1).padStart(5, "0")}`, ...row }));
30
+ writeRows(workspace.dataset, rows);
31
+ }
32
+ }
33
+ export function readRows(path) {
34
+ if (!existsSync(path))
35
+ return [];
36
+ const rows = [];
37
+ for (const line of readFileSync(path, "utf8").split("\n")) {
38
+ if (!line.trim())
39
+ continue;
40
+ try {
41
+ rows.push(JSON.parse(line));
42
+ }
43
+ catch {
44
+ // A line broken by hand; the training script skips it too.
45
+ }
46
+ }
47
+ return rows;
48
+ }
49
+ export function writeRows(path, rows) {
50
+ mkdirSync(dirname(path), { recursive: true });
51
+ writeFileSync(path, rows.map((row) => `${JSON.stringify(row)}\n`).join(""), "utf8");
52
+ }
53
+ /** Requests that differ only in case and spacing are the same exercise. */
54
+ export function requestKey(request) {
55
+ return request.trim().toLowerCase().replace(/\s+/g, " ");
56
+ }
57
+ /**
58
+ * Adds rows, replacing the labels of an exercise with the same request: a later session labels it
59
+ * with newer evidence.
60
+ */
61
+ export function mergeRows(existing, incoming) {
62
+ const rows = [...existing];
63
+ const byKey = new Map(rows.map((row, index) => [requestKey(row.state.request), index]));
64
+ let next = Math.max(0, ...rows.map((row) => Number(/^s(\d+)$/.exec(row.id)?.[1] ?? 0))) + 1;
65
+ let added = 0;
66
+ let updated = 0;
67
+ for (const row of incoming) {
68
+ const key = requestKey(row.state.request);
69
+ const index = byKey.get(key);
70
+ if (index === undefined) {
71
+ byKey.set(key, rows.length);
72
+ rows.push({ id: `s${String(next++).padStart(5, "0")}`, ...row });
73
+ added++;
74
+ }
75
+ else {
76
+ rows[index] = { id: rows[index].id, ...row };
77
+ updated++;
78
+ }
79
+ }
80
+ return { rows, added, updated };
81
+ }
82
+ export function readRegistry(workspace) {
83
+ try {
84
+ const registry = JSON.parse(readFileSync(workspace.registry, "utf8"));
85
+ return { active: registry.active, models: Array.isArray(registry.models) ? registry.models : [] };
86
+ }
87
+ catch {
88
+ return { models: [] };
89
+ }
90
+ }
91
+ export function writeRegistry(workspace, registry) {
92
+ mkdirSync(workspace.dir, { recursive: true });
93
+ writeFileSync(workspace.registry, `${JSON.stringify(registry, null, 2)}\n`, "utf8");
94
+ }
95
+ export const accuracy = (score) => (score.n > 0 ? score.correct / score.n : 0);
96
+ /** Whether the new model answers the test split well enough to replace the current one. */
97
+ export function passesGate(test) {
98
+ return accuracy(test.candidate) >= accuracy(test.current) - REGRESSION_TOLERANCE;
99
+ }
100
+ /** Keeps the newest inactive models and the active one; returns the names to delete. */
101
+ export function pruneModels(registry) {
102
+ // The registry lists models in the order they were trained.
103
+ const inactive = registry.models.filter((model) => model.name !== registry.active).reverse();
104
+ const removed = inactive.slice(KEEP_INACTIVE_MODELS).map((model) => model.name);
105
+ return {
106
+ registry: { ...registry, models: registry.models.filter((model) => !removed.includes(model.name)) },
107
+ removed,
108
+ };
109
+ }
110
+ export function describeProgress(progress) {
111
+ if (progress.phase === "evaluate") {
112
+ return progress.model === "current" ? "comparing with the current model" : "testing the new model";
113
+ }
114
+ if (!progress.epoch)
115
+ return `starting on ${progress.device ?? "the device"}`;
116
+ const minutes = progress.eta_s === undefined ? undefined : Math.max(1, Math.round(progress.eta_s / 60));
117
+ return `round ${progress.epoch}/${progress.epochs} ${Math.round((progress.done ?? 0) * 100)}%${minutes && progress.done !== 1 ? `, about ${minutes} min left` : ""}`;
118
+ }
119
+ /** Runs a Python one-liner in the image, with the models volume mounted. */
120
+ function inImage(image, code, extra = [], gpu = false) {
121
+ return [
122
+ "run",
123
+ "--rm",
124
+ ...(gpu ? ["--gpus", "all"] : []),
125
+ "--volume",
126
+ `${LAYA_MODELS_VOLUME}:${LAYA_IMAGE_PATHS.trainedModels}`,
127
+ image,
128
+ "python",
129
+ "-c",
130
+ code,
131
+ ...extra,
132
+ ];
133
+ }
134
+ /** Whether a container of the image sees an NVIDIA GPU: needs the CUDA image and Docker GPU support. */
135
+ export async function dockerHasGpu(docker, image) {
136
+ const result = await docker(inImage(image, "import sys, torch; sys.exit(0 if torch.cuda.is_available() else 1)", [], true), { timeout: 120_000 });
137
+ return result.code === 0;
138
+ }
139
+ /**
140
+ * Runs one training at a time. It belongs to the process, not to a session runtime, so training
141
+ * goes on across `/new` and `/resume`; `listener` is the latest runtime that wants its events.
142
+ */
143
+ export class LayaTrainer {
144
+ workspace;
145
+ options;
146
+ abort;
147
+ job;
148
+ /** Latest progress of the running training. */
149
+ progress;
150
+ listener;
151
+ constructor(options) {
152
+ this.options = options;
153
+ this.workspace = trainingWorkspace(options.home);
154
+ }
155
+ get running() {
156
+ return this.job !== undefined;
157
+ }
158
+ /** The model that routes requests, with its path inside the containers: the active trained model, or the shipped one. */
159
+ activeModel() {
160
+ const registry = readRegistry(this.workspace);
161
+ const active = registry.active;
162
+ if (active && registry.models.some((model) => model.name === active)) {
163
+ return { name: active, dir: trainedModelPath(active) };
164
+ }
165
+ return { name: this.options.manifest.version, dir: LAYA_IMAGE_PATHS.shippedModel };
166
+ }
167
+ /** Selects the model that routes requests; the shipped model's version selects it. */
168
+ use(name) {
169
+ const registry = readRegistry(this.workspace);
170
+ if (name === this.options.manifest.version) {
171
+ writeRegistry(this.workspace, { ...registry, active: undefined });
172
+ return;
173
+ }
174
+ if (!registry.models.some((model) => model.name === name)) {
175
+ throw new Error(`No trained model named ${name}. Models: ${[this.options.manifest.version, ...registry.models.map((model) => model.name)].join(", ")}`);
176
+ }
177
+ writeRegistry(this.workspace, { ...registry, active: name });
178
+ }
179
+ /** Exercises in the workspace, by source. */
180
+ counts() {
181
+ const counts = {};
182
+ for (const row of readRows(this.workspace.dataset))
183
+ counts[row.source] = (counts[row.source] ?? 0) + 1;
184
+ return counts;
185
+ }
186
+ /** Adds labeled session tasks to the workspace. */
187
+ addExercises(rows) {
188
+ ensureWorkspace(this.workspace);
189
+ const merged = mergeRows(readRows(this.workspace.dataset), rows);
190
+ writeRows(this.workspace.dataset, merged.rows);
191
+ return { added: merged.added, updated: merged.updated };
192
+ }
193
+ /**
194
+ * Trains a new model from the active one and activates it when it passes the test gate. The
195
+ * listener hears the result too, so a caller that does not wait only needs to catch.
196
+ */
197
+ train() {
198
+ if (this.job)
199
+ return Promise.reject(new Error("Laya is already training"));
200
+ this.abort = new AbortController();
201
+ this.job = this.run(this.abort.signal)
202
+ .finally(() => {
203
+ this.job = undefined;
204
+ this.abort = undefined;
205
+ this.progress = undefined;
206
+ })
207
+ .then((outcome) => {
208
+ this.listener?.finished({ outcome });
209
+ return outcome;
210
+ }, (error) => {
211
+ const failure = error instanceof Error ? error : new Error(String(error));
212
+ this.listener?.finished({ error: failure });
213
+ throw failure;
214
+ });
215
+ return this.job;
216
+ }
217
+ /** Stops a running training and removes its container. */
218
+ stop() {
219
+ if (!this.abort)
220
+ return;
221
+ this.abort.abort();
222
+ void this.options.docker(["rm", "--force", LAYA_TRAIN_CONTAINER], { timeout: 60_000 });
223
+ }
224
+ async run(signal) {
225
+ ensureWorkspace(this.workspace);
226
+ if (!readRows(this.workspace.dataset).some((row) => row.source === SESSION_SOURCE)) {
227
+ throw new Error("There are no session tasks to learn yet. Run /laya learn in a session first.");
228
+ }
229
+ const image = await this.options.image();
230
+ const gpu = await this.options.gpu();
231
+ const registry = readRegistry(this.workspace);
232
+ const base = this.activeModel();
233
+ const number = Math.max(0, ...registry.models.map((model) => Number(/^local-(\d+)$/.exec(model.name)?.[1] ?? 0)));
234
+ const name = `local-${number + 1}`;
235
+ const out = trainedModelPath(name);
236
+ // A container left by a training that was killed would block the name.
237
+ await this.options.docker(["rm", "--force", LAYA_TRAIN_CONTAINER], { timeout: 60_000 });
238
+ const args = [
239
+ "run",
240
+ "--rm",
241
+ "--name",
242
+ LAYA_TRAIN_CONTAINER,
243
+ ...(gpu ? ["--gpus", "all"] : []),
244
+ "--volume",
245
+ `${LAYA_MODELS_VOLUME}:${LAYA_IMAGE_PATHS.trainedModels}`,
246
+ "--mount",
247
+ `type=bind,source=${this.workspace.dir},target=${LAYA_IMAGE_PATHS.workspace},readonly`,
248
+ image,
249
+ "python",
250
+ LAYA_IMAGE_PATHS.trainScript,
251
+ "learn",
252
+ "--workspace",
253
+ LAYA_IMAGE_PATHS.workspace,
254
+ "--init",
255
+ base.dir,
256
+ "--out",
257
+ out,
258
+ "--focus-source",
259
+ SESSION_SOURCE,
260
+ ];
261
+ let result = await this.runScript(args, signal);
262
+ if (!result.ok && result.error === "out_of_memory") {
263
+ // The smallest batch that still trains; the GPU may have been shared with another process.
264
+ result = await this.runScript([...args, "--micro-batch", "1", "--grad-accum", "16", "--low-memory", "on"], signal);
265
+ }
266
+ if (!result.ok) {
267
+ await this.removeModels(image, [name]);
268
+ throw new Error(result.message);
269
+ }
270
+ const model = {
271
+ name,
272
+ createdAt: new Date().toISOString(),
273
+ basedOn: base.name,
274
+ sessionTasks: result.rows.focus,
275
+ test: result.test,
276
+ session: result.focus,
277
+ seconds: result.seconds,
278
+ device: result.device,
279
+ };
280
+ const activated = passesGate(model.test);
281
+ const pruned = pruneModels({ active: activated ? name : registry.active, models: [...registry.models, model] });
282
+ writeRegistry(this.workspace, pruned.registry);
283
+ await this.removeModels(image, pruned.removed);
284
+ return { model, activated, previous: base.name };
285
+ }
286
+ /** Deletes trained models from the volume. */
287
+ async removeModels(image, names) {
288
+ if (names.length === 0)
289
+ return;
290
+ await this.options.docker(inImage(image, "import shutil, sys; [shutil.rmtree(path, ignore_errors=True) for path in sys.argv[1:]]", names.map(trainedModelPath)), { timeout: 120_000 });
291
+ }
292
+ async runScript(args, signal) {
293
+ const stderr = [];
294
+ const result = await this.options.docker(args, {
295
+ signal,
296
+ onLine: (line, stream) => {
297
+ if (stream === "stdout")
298
+ return;
299
+ if (line.startsWith("PROGRESS ")) {
300
+ try {
301
+ this.progress = JSON.parse(line.slice("PROGRESS ".length));
302
+ this.listener?.progress(this.progress);
303
+ }
304
+ catch {
305
+ // Not a progress line after all.
306
+ }
307
+ }
308
+ else if (line.trim()) {
309
+ stderr.push(line);
310
+ if (stderr.length > 20)
311
+ stderr.shift();
312
+ }
313
+ },
314
+ });
315
+ if (signal.aborted)
316
+ return { ok: false, message: "Training was stopped" };
317
+ const last = result.stdout.trim().split("\n").at(-1) ?? "";
318
+ try {
319
+ return JSON.parse(last);
320
+ }
321
+ catch {
322
+ const detail = stderr.slice(-4).join(" ").trim() || dockerError(result);
323
+ return { ok: false, message: `The training container exited with code ${result.code}: ${detail}` };
324
+ }
325
+ }
326
+ }
327
+ const trainers = new Map();
328
+ /** The trainer of a Laya home, shared by every session runtime of the process. */
329
+ export function sharedTrainer(options) {
330
+ let trainer = trainers.get(options.home);
331
+ if (!trainer) {
332
+ trainer = new LayaTrainer(options);
333
+ trainers.set(options.home, trainer);
334
+ }
335
+ return trainer;
336
+ }
337
+ //# sourceMappingURL=training.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"training.js","sourceRoot":"","sources":["../../../src/extensions/laya/training.ts"],"names":[],"mappings":"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","sourcesContent":["import { existsSync, mkdirSync, readFileSync, writeFileSync } from \"node:fs\";\nimport { dirname, join } from \"node:path\";\nimport { type DockerRun, dockerError } from \"./docker.ts\";\nimport { layaDecisionsFile } from \"./questions.ts\";\nimport {\n\tLAYA_IMAGE_PATHS,\n\tLAYA_MODELS_VOLUME,\n\tLAYA_TRAIN_CONTAINER,\n\ttype LayaModelManifest,\n\ttrainedModelPath,\n} from \"./runtime.ts\";\nimport { generateSeed } from \"./seed.ts\";\n\n/**\n * Training of the routing model, in a Docker container. Exercises live in a workspace in the Laya\n * home on the host: the synthetic seed the shipped model was trained on, plus the tasks labeled from\n * sessions (`/laya learn`). The container reads the workspace and writes the new model to the models\n * volume. Training starts from the model that routes today, and the new model replaces it only when\n * it answers the held-out test split about as well.\n */\n\n/** One exercise in laya-trainer's dataset format. */\nexport interface TrainingRow {\n\tid: string;\n\tstate: { request: string };\n\texpected: Record<string, string | number | boolean>;\n\tsource: string;\n\tsplit?: \"train\" | \"val\" | \"test\";\n\t/** Session the task came from. */\n\tsession?: string;\n\tlabel_source?: string;\n\tnote?: string;\n\t/** What to know when doing a similar task. Shown to the model, never trained on. */\n\tlesson?: string;\n\tcreated?: string;\n}\n\nexport interface TrainingWorkspace {\n\tdir: string;\n\tdecisions: string;\n\tdataset: string;\n\tregistry: string;\n}\n\n/** Exercises labeled from sessions. Training focuses on them; the rest is replayed. */\nexport const SESSION_SOURCE = \"session\";\n/** The seed size of the shipped model: the same rows, so the same held-out test split. */\nexport const SEED_ROWS = 1100;\n/** A new model is activated unless it answers more than this fraction fewer test questions. */\nexport const REGRESSION_TOLERANCE = 0.01;\n/** Trained models kept besides the active one, newest first. Older ones are deleted. */\nconst KEEP_INACTIVE_MODELS = 2;\n\nexport function trainingWorkspace(home: string): TrainingWorkspace {\n\tconst dir = join(home, \"training\");\n\treturn {\n\t\tdir,\n\t\tdecisions: join(dir, \"decisions.json\"),\n\t\tdataset: join(dir, \"data\", \"dataset.jsonl\"),\n\t\tregistry: join(dir, \"models.json\"),\n\t};\n}\n\n/** Writes the current questions and, on first use, the seed exercises. */\nexport function ensureWorkspace(workspace: TrainingWorkspace): void {\n\tmkdirSync(dirname(workspace.dataset), { recursive: true });\n\twriteFileSync(workspace.decisions, `${JSON.stringify(layaDecisionsFile(), null, 2)}\\n`, \"utf8\");\n\tif (!existsSync(workspace.dataset)) {\n\t\tconst rows = generateSeed(SEED_ROWS).map((row, i) => ({ id: `r${String(i + 1).padStart(5, \"0\")}`, ...row }));\n\t\twriteRows(workspace.dataset, rows);\n\t}\n}\n\nexport function readRows(path: string): TrainingRow[] {\n\tif (!existsSync(path)) return [];\n\tconst rows: TrainingRow[] = [];\n\tfor (const line of readFileSync(path, \"utf8\").split(\"\\n\")) {\n\t\tif (!line.trim()) continue;\n\t\ttry {\n\t\t\trows.push(JSON.parse(line) as TrainingRow);\n\t\t} catch {\n\t\t\t// A line broken by hand; the training script skips it too.\n\t\t}\n\t}\n\treturn rows;\n}\n\nexport function writeRows(path: string, rows: readonly TrainingRow[]): void {\n\tmkdirSync(dirname(path), { recursive: true });\n\twriteFileSync(path, rows.map((row) => `${JSON.stringify(row)}\\n`).join(\"\"), \"utf8\");\n}\n\n/** Requests that differ only in case and spacing are the same exercise. */\nexport function requestKey(request: string): string {\n\treturn request.trim().toLowerCase().replace(/\\s+/g, \" \");\n}\n\n/**\n * Adds rows, replacing the labels of an exercise with the same request: a later session labels it\n * with newer evidence.\n */\nexport function mergeRows(\n\texisting: readonly TrainingRow[],\n\tincoming: ReadonlyArray<Omit<TrainingRow, \"id\">>,\n): { rows: TrainingRow[]; added: number; updated: number } {\n\tconst rows = [...existing];\n\tconst byKey = new Map(rows.map((row, index) => [requestKey(row.state.request), index]));\n\tlet next = Math.max(0, ...rows.map((row) => Number(/^s(\\d+)$/.exec(row.id)?.[1] ?? 0))) + 1;\n\tlet added = 0;\n\tlet updated = 0;\n\tfor (const row of incoming) {\n\t\tconst key = requestKey(row.state.request);\n\t\tconst index = byKey.get(key);\n\t\tif (index === undefined) {\n\t\t\tbyKey.set(key, rows.length);\n\t\t\trows.push({ id: `s${String(next++).padStart(5, \"0\")}`, ...row });\n\t\t\tadded++;\n\t\t} else {\n\t\t\trows[index] = { id: rows[index].id, ...row };\n\t\t\tupdated++;\n\t\t}\n\t}\n\treturn { rows, added, updated };\n}\n\n/** Correct answers on a set of exercises, as the training script reports them. */\nexport interface Score {\n\tn: number;\n\tcorrect: number;\n\tper_question: Record<string, { n: number; correct: number }>;\n}\n\nexport interface TrainedModel {\n\tname: string;\n\tcreatedAt: string;\n\t/** Model the training started from. */\n\tbasedOn: string;\n\tsessionTasks: number;\n\t/** Test split: the new model and the one it started from. */\n\ttest: { candidate: Score; current: Score };\n\t/** Session exercises: answers the new model and the one it started from get right. */\n\tsession: { candidate: Score; current: Score };\n\tseconds: number;\n\tdevice: string;\n}\n\nexport interface ModelRegistry {\n\t/** Trained model that routes requests. Absent: the shipped model. */\n\tactive?: string;\n\tmodels: TrainedModel[];\n}\n\nexport function readRegistry(workspace: TrainingWorkspace): ModelRegistry {\n\ttry {\n\t\tconst registry = JSON.parse(readFileSync(workspace.registry, \"utf8\")) as ModelRegistry;\n\t\treturn { active: registry.active, models: Array.isArray(registry.models) ? registry.models : [] };\n\t} catch {\n\t\treturn { models: [] };\n\t}\n}\n\nexport function writeRegistry(workspace: TrainingWorkspace, registry: ModelRegistry): void {\n\tmkdirSync(workspace.dir, { recursive: true });\n\twriteFileSync(workspace.registry, `${JSON.stringify(registry, null, 2)}\\n`, \"utf8\");\n}\n\nexport const accuracy = (score: Score): number => (score.n > 0 ? score.correct / score.n : 0);\n\n/** Whether the new model answers the test split well enough to replace the current one. */\nexport function passesGate(test: TrainedModel[\"test\"]): boolean {\n\treturn accuracy(test.candidate) >= accuracy(test.current) - REGRESSION_TOLERANCE;\n}\n\n/** Keeps the newest inactive models and the active one; returns the names to delete. */\nexport function pruneModels(registry: ModelRegistry): { registry: ModelRegistry; removed: string[] } {\n\t// The registry lists models in the order they were trained.\n\tconst inactive = registry.models.filter((model) => model.name !== registry.active).reverse();\n\tconst removed = inactive.slice(KEEP_INACTIVE_MODELS).map((model) => model.name);\n\treturn {\n\t\tregistry: { ...registry, models: registry.models.filter((model) => !removed.includes(model.name)) },\n\t\tremoved,\n\t};\n}\n\nexport interface TrainingProgress {\n\tphase: \"train\" | \"evaluate\";\n\tepoch?: number;\n\tepochs?: number;\n\tdone?: number;\n\teta_s?: number;\n\tdevice?: string;\n\tmodel?: \"new\" | \"current\";\n}\n\nexport function describeProgress(progress: TrainingProgress): string {\n\tif (progress.phase === \"evaluate\") {\n\t\treturn progress.model === \"current\" ? \"comparing with the current model\" : \"testing the new model\";\n\t}\n\tif (!progress.epoch) return `starting on ${progress.device ?? \"the device\"}`;\n\tconst minutes = progress.eta_s === undefined ? undefined : Math.max(1, Math.round(progress.eta_s / 60));\n\treturn `round ${progress.epoch}/${progress.epochs} ${Math.round((progress.done ?? 0) * 100)}%${\n\t\tminutes && progress.done !== 1 ? `, about ${minutes} min left` : \"\"\n\t}`;\n}\n\ntype ScriptResult =\n\t| {\n\t\t\tok: true;\n\t\t\tseconds: number;\n\t\t\tdevice: string;\n\t\t\trows: { focus: number };\n\t\t\ttest: TrainedModel[\"test\"];\n\t\t\tfocus: TrainedModel[\"session\"];\n\t }\n\t| { ok: false; error?: string; message: string };\n\nexport interface TrainingOutcome {\n\tmodel: TrainedModel;\n\t/** Whether the new model now routes requests. */\n\tactivated: boolean;\n\t/** Model that routed before. */\n\tprevious: string;\n}\n\nexport interface TrainingListener {\n\tprogress(progress: TrainingProgress): void;\n\tfinished(result: { outcome: TrainingOutcome } | { error: Error }): void;\n}\n\nexport interface LayaTrainerOptions {\n\thome: string;\n\tmanifest: LayaModelManifest;\n\tdocker: DockerRun;\n\t/** Image the training container runs; the server's image. */\n\timage: () => Promise<string>;\n\t/** Whether the training container can use an NVIDIA GPU. */\n\tgpu: () => Promise<boolean>;\n}\n\n/** Runs a Python one-liner in the image, with the models volume mounted. */\nfunction inImage(image: string, code: string, extra: string[] = [], gpu = false): string[] {\n\treturn [\n\t\t\"run\",\n\t\t\"--rm\",\n\t\t...(gpu ? [\"--gpus\", \"all\"] : []),\n\t\t\"--volume\",\n\t\t`${LAYA_MODELS_VOLUME}:${LAYA_IMAGE_PATHS.trainedModels}`,\n\t\timage,\n\t\t\"python\",\n\t\t\"-c\",\n\t\tcode,\n\t\t...extra,\n\t];\n}\n\n/** Whether a container of the image sees an NVIDIA GPU: needs the CUDA image and Docker GPU support. */\nexport async function dockerHasGpu(docker: DockerRun, image: string): Promise<boolean> {\n\tconst result = await docker(\n\t\tinImage(image, \"import sys, torch; sys.exit(0 if torch.cuda.is_available() else 1)\", [], true),\n\t\t{ timeout: 120_000 },\n\t);\n\treturn result.code === 0;\n}\n\n/**\n * Runs one training at a time. It belongs to the process, not to a session runtime, so training\n * goes on across `/new` and `/resume`; `listener` is the latest runtime that wants its events.\n */\nexport class LayaTrainer {\n\treadonly workspace: TrainingWorkspace;\n\tprivate readonly options: LayaTrainerOptions;\n\tprivate abort: AbortController | undefined;\n\tprivate job: Promise<TrainingOutcome> | undefined;\n\t/** Latest progress of the running training. */\n\tprogress: TrainingProgress | undefined;\n\tlistener: TrainingListener | undefined;\n\n\tconstructor(options: LayaTrainerOptions) {\n\t\tthis.options = options;\n\t\tthis.workspace = trainingWorkspace(options.home);\n\t}\n\n\tget running(): boolean {\n\t\treturn this.job !== undefined;\n\t}\n\n\t/** The model that routes requests, with its path inside the containers: the active trained model, or the shipped one. */\n\tactiveModel(): { name: string; dir: string } {\n\t\tconst registry = readRegistry(this.workspace);\n\t\tconst active = registry.active;\n\t\tif (active && registry.models.some((model) => model.name === active)) {\n\t\t\treturn { name: active, dir: trainedModelPath(active) };\n\t\t}\n\t\treturn { name: this.options.manifest.version, dir: LAYA_IMAGE_PATHS.shippedModel };\n\t}\n\n\t/** Selects the model that routes requests; the shipped model's version selects it. */\n\tuse(name: string): void {\n\t\tconst registry = readRegistry(this.workspace);\n\t\tif (name === this.options.manifest.version) {\n\t\t\twriteRegistry(this.workspace, { ...registry, active: undefined });\n\t\t\treturn;\n\t\t}\n\t\tif (!registry.models.some((model) => model.name === name)) {\n\t\t\tthrow new Error(\n\t\t\t\t`No trained model named ${name}. Models: ${[this.options.manifest.version, ...registry.models.map((model) => model.name)].join(\", \")}`,\n\t\t\t);\n\t\t}\n\t\twriteRegistry(this.workspace, { ...registry, active: name });\n\t}\n\n\t/** Exercises in the workspace, by source. */\n\tcounts(): Record<string, number> {\n\t\tconst counts: Record<string, number> = {};\n\t\tfor (const row of readRows(this.workspace.dataset)) counts[row.source] = (counts[row.source] ?? 0) + 1;\n\t\treturn counts;\n\t}\n\n\t/** Adds labeled session tasks to the workspace. */\n\taddExercises(rows: ReadonlyArray<Omit<TrainingRow, \"id\">>): { added: number; updated: number } {\n\t\tensureWorkspace(this.workspace);\n\t\tconst merged = mergeRows(readRows(this.workspace.dataset), rows);\n\t\twriteRows(this.workspace.dataset, merged.rows);\n\t\treturn { added: merged.added, updated: merged.updated };\n\t}\n\n\t/**\n\t * Trains a new model from the active one and activates it when it passes the test gate. The\n\t * listener hears the result too, so a caller that does not wait only needs to catch.\n\t */\n\ttrain(): Promise<TrainingOutcome> {\n\t\tif (this.job) return Promise.reject(new Error(\"Laya is already training\"));\n\t\tthis.abort = new AbortController();\n\t\tthis.job = this.run(this.abort.signal)\n\t\t\t.finally(() => {\n\t\t\t\tthis.job = undefined;\n\t\t\t\tthis.abort = undefined;\n\t\t\t\tthis.progress = undefined;\n\t\t\t})\n\t\t\t.then(\n\t\t\t\t(outcome) => {\n\t\t\t\t\tthis.listener?.finished({ outcome });\n\t\t\t\t\treturn outcome;\n\t\t\t\t},\n\t\t\t\t(error: unknown) => {\n\t\t\t\t\tconst failure = error instanceof Error ? error : new Error(String(error));\n\t\t\t\t\tthis.listener?.finished({ error: failure });\n\t\t\t\t\tthrow failure;\n\t\t\t\t},\n\t\t\t);\n\t\treturn this.job;\n\t}\n\n\t/** Stops a running training and removes its container. */\n\tstop(): void {\n\t\tif (!this.abort) return;\n\t\tthis.abort.abort();\n\t\tvoid this.options.docker([\"rm\", \"--force\", LAYA_TRAIN_CONTAINER], { timeout: 60_000 });\n\t}\n\n\tprivate async run(signal: AbortSignal): Promise<TrainingOutcome> {\n\t\tensureWorkspace(this.workspace);\n\t\tif (!readRows(this.workspace.dataset).some((row) => row.source === SESSION_SOURCE)) {\n\t\t\tthrow new Error(\"There are no session tasks to learn yet. Run /laya learn in a session first.\");\n\t\t}\n\t\tconst image = await this.options.image();\n\t\tconst gpu = await this.options.gpu();\n\t\tconst registry = readRegistry(this.workspace);\n\t\tconst base = this.activeModel();\n\t\tconst number = Math.max(0, ...registry.models.map((model) => Number(/^local-(\\d+)$/.exec(model.name)?.[1] ?? 0)));\n\t\tconst name = `local-${number + 1}`;\n\t\tconst out = trainedModelPath(name);\n\t\t// A container left by a training that was killed would block the name.\n\t\tawait this.options.docker([\"rm\", \"--force\", LAYA_TRAIN_CONTAINER], { timeout: 60_000 });\n\n\t\tconst args = [\n\t\t\t\"run\",\n\t\t\t\"--rm\",\n\t\t\t\"--name\",\n\t\t\tLAYA_TRAIN_CONTAINER,\n\t\t\t...(gpu ? [\"--gpus\", \"all\"] : []),\n\t\t\t\"--volume\",\n\t\t\t`${LAYA_MODELS_VOLUME}:${LAYA_IMAGE_PATHS.trainedModels}`,\n\t\t\t\"--mount\",\n\t\t\t`type=bind,source=${this.workspace.dir},target=${LAYA_IMAGE_PATHS.workspace},readonly`,\n\t\t\timage,\n\t\t\t\"python\",\n\t\t\tLAYA_IMAGE_PATHS.trainScript,\n\t\t\t\"learn\",\n\t\t\t\"--workspace\",\n\t\t\tLAYA_IMAGE_PATHS.workspace,\n\t\t\t\"--init\",\n\t\t\tbase.dir,\n\t\t\t\"--out\",\n\t\t\tout,\n\t\t\t\"--focus-source\",\n\t\t\tSESSION_SOURCE,\n\t\t];\n\t\tlet result = await this.runScript(args, signal);\n\t\tif (!result.ok && result.error === \"out_of_memory\") {\n\t\t\t// The smallest batch that still trains; the GPU may have been shared with another process.\n\t\t\tresult = await this.runScript(\n\t\t\t\t[...args, \"--micro-batch\", \"1\", \"--grad-accum\", \"16\", \"--low-memory\", \"on\"],\n\t\t\t\tsignal,\n\t\t\t);\n\t\t}\n\t\tif (!result.ok) {\n\t\t\tawait this.removeModels(image, [name]);\n\t\t\tthrow new Error(result.message);\n\t\t}\n\n\t\tconst model: TrainedModel = {\n\t\t\tname,\n\t\t\tcreatedAt: new Date().toISOString(),\n\t\t\tbasedOn: base.name,\n\t\t\tsessionTasks: result.rows.focus,\n\t\t\ttest: result.test,\n\t\t\tsession: result.focus,\n\t\t\tseconds: result.seconds,\n\t\t\tdevice: result.device,\n\t\t};\n\t\tconst activated = passesGate(model.test);\n\t\tconst pruned = pruneModels({ active: activated ? name : registry.active, models: [...registry.models, model] });\n\t\twriteRegistry(this.workspace, pruned.registry);\n\t\tawait this.removeModels(image, pruned.removed);\n\t\treturn { model, activated, previous: base.name };\n\t}\n\n\t/** Deletes trained models from the volume. */\n\tprivate async removeModels(image: string, names: string[]): Promise<void> {\n\t\tif (names.length === 0) return;\n\t\tawait this.options.docker(\n\t\t\tinImage(\n\t\t\t\timage,\n\t\t\t\t\"import shutil, sys; [shutil.rmtree(path, ignore_errors=True) for path in sys.argv[1:]]\",\n\t\t\t\tnames.map(trainedModelPath),\n\t\t\t),\n\t\t\t{ timeout: 120_000 },\n\t\t);\n\t}\n\n\tprivate async runScript(args: string[], signal: AbortSignal): Promise<ScriptResult> {\n\t\tconst stderr: string[] = [];\n\t\tconst result = await this.options.docker(args, {\n\t\t\tsignal,\n\t\t\tonLine: (line, stream) => {\n\t\t\t\tif (stream === \"stdout\") return;\n\t\t\t\tif (line.startsWith(\"PROGRESS \")) {\n\t\t\t\t\ttry {\n\t\t\t\t\t\tthis.progress = JSON.parse(line.slice(\"PROGRESS \".length)) as TrainingProgress;\n\t\t\t\t\t\tthis.listener?.progress(this.progress);\n\t\t\t\t\t} catch {\n\t\t\t\t\t\t// Not a progress line after all.\n\t\t\t\t\t}\n\t\t\t\t} else if (line.trim()) {\n\t\t\t\t\tstderr.push(line);\n\t\t\t\t\tif (stderr.length > 20) stderr.shift();\n\t\t\t\t}\n\t\t\t},\n\t\t});\n\t\tif (signal.aborted) return { ok: false, message: \"Training was stopped\" };\n\t\tconst last = result.stdout.trim().split(\"\\n\").at(-1) ?? \"\";\n\t\ttry {\n\t\t\treturn JSON.parse(last) as ScriptResult;\n\t\t} catch {\n\t\t\tconst detail = stderr.slice(-4).join(\" \").trim() || dockerError(result);\n\t\t\treturn { ok: false, message: `The training container exited with code ${result.code}: ${detail}` };\n\t\t}\n\t}\n}\n\nconst trainers = new Map<string, LayaTrainer>();\n\n/** The trainer of a Laya home, shared by every session runtime of the process. */\nexport function sharedTrainer(options: LayaTrainerOptions): LayaTrainer {\n\tlet trainer = trainers.get(options.home);\n\tif (!trainer) {\n\t\ttrainer = new LayaTrainer(options);\n\t\ttrainers.set(options.home, trainer);\n\t}\n\treturn trainer;\n}\n"]}
@@ -0,0 +1,69 @@
1
+ export type LlamaModelStatus = "unloaded" | "loading" | "loaded" | "downloading" | "sleeping";
2
+ export interface LlamaModelInfo {
3
+ id: string;
4
+ aliases?: string[];
5
+ status: {
6
+ value: LlamaModelStatus;
7
+ args?: string[];
8
+ failed?: boolean;
9
+ exit_code?: number;
10
+ progress?: Record<string, {
11
+ done: number;
12
+ total: number;
13
+ }>;
14
+ };
15
+ architecture?: {
16
+ input_modalities?: string[];
17
+ output_modalities?: string[];
18
+ };
19
+ source?: string;
20
+ meta?: {
21
+ n_ctx?: number;
22
+ n_ctx_train?: number;
23
+ size?: number;
24
+ ftype?: string;
25
+ };
26
+ }
27
+ export interface LlamaModelsResponse {
28
+ data: LlamaModelInfo[];
29
+ object?: string;
30
+ }
31
+ export interface LlamaServerProps {
32
+ models_autoload?: boolean;
33
+ chat_template?: string;
34
+ }
35
+ export interface LlamaModelEvent {
36
+ model: string;
37
+ event: string;
38
+ data?: unknown;
39
+ }
40
+ export interface LlamaProgress {
41
+ message: string;
42
+ ratio?: number;
43
+ detail?: string;
44
+ }
45
+ export declare function formatBytes(bytes: number): string;
46
+ export declare function normalizeLlamaServerUrl(value: string): string;
47
+ export declare function llamaInferenceUrl(serverUrl: string): string;
48
+ export declare class LlamaClient {
49
+ readonly serverUrl: string;
50
+ private readonly apiKey;
51
+ constructor(serverUrl: string, apiKey?: string);
52
+ private request;
53
+ list(options?: {
54
+ reload?: boolean;
55
+ signal?: AbortSignal;
56
+ }): Promise<LlamaModelInfo[]>;
57
+ props(options?: {
58
+ model?: string;
59
+ signal?: AbortSignal;
60
+ }): Promise<LlamaServerProps>;
61
+ load(model: string, signal?: AbortSignal): Promise<void>;
62
+ unload(model: string, signal?: AbortSignal): Promise<void>;
63
+ unloadAndWait(model: string, signal?: AbortSignal): Promise<void>;
64
+ download(model: string, signal?: AbortSignal): Promise<void>;
65
+ watch(onEvent: (event: LlamaModelEvent) => void, signal?: AbortSignal): Promise<void>;
66
+ loadAndWait(model: string, onProgress: (progress: LlamaProgress) => void, signal?: AbortSignal): Promise<LlamaModelInfo>;
67
+ downloadAndWait(model: string, onProgress: (progress: LlamaProgress) => void, signal?: AbortSignal): Promise<LlamaModelInfo[]>;
68
+ }
69
+ //# sourceMappingURL=client.d.ts.map