@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 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/extensions/laya/index.ts"],"names":[],"mappings":"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","sourcesContent":["import { randomUUID } from \"node:crypto\";\nimport { existsSync, mkdirSync, rmSync, statSync, writeFileSync } from \"node:fs\";\nimport { dirname, join, resolve } from \"node:path\";\nimport {\n\ttype Api,\n\ttype ClassifierModel,\n\tcreateProvider,\n\ttype Message,\n\ttype Model,\n\ttype ModelThinkingLevel,\n\ttype Provider,\n} from \"@relay-harness/ai\";\nimport { typesafeSystemOneApi } from \"@relay-harness/ai/api/typesafe-system-one.lazy\";\nimport { getAgentDir } from \"../../config.ts\";\nimport type { ExtensionAPI, ExtensionContext } from \"../../core/extensions/types.ts\";\nimport { SessionManager } from \"../../core/session-manager.ts\";\nimport type { LayaSettings } from \"../../core/settings-manager.ts\";\nimport type { ModelRoute, ModelRouteRequest } from \"../../core/virtual-models.ts\";\nimport { assessmentFromAnswers, assessmentFromLabels, heuristicAssessment, type TaskAssessment } from \"./assessment.ts\";\nimport { type DockerRun, spawnDocker } from \"./docker.ts\";\nimport {\n\tbuildLearnPrompt,\n\texercisesToRows,\n\tLEARN_TOOL_NAME,\n\tlearnToolSchema,\n\trenderQuestions,\n\trenderTask,\n\ttype SessionTask,\n\tsessionTasks,\n} from \"./learn.ts\";\nimport { LAYA_LESSONS_MESSAGE, LESSON_SIMILARITY, ROUTE_SIMILARITY, renderLessons, TaskMemory } from \"./memory.ts\";\nimport { LAYA_MODEL_MANIFEST } from \"./model-manifest.ts\";\nimport {\n\tapplyPolicy,\n\ttype Candidate,\n\tDEFAULT_MODEL_REGISTRY,\n\ttype EscalationReason,\n\tnextTier,\n\tPerformanceHistory,\n\tPOLICY_PROFILES,\n\ttype PolicyDecision,\n\ttype PolicyProfile,\n\tparseModelRef,\n\tQuotaManager,\n\trankCandidates,\n\ttype ScoredCandidate,\n\ttaskKey,\n} from \"./policy.ts\";\nimport { CAPABILITY_TIERS, type CapabilityTier, LAYA_QUESTIONS, layaDecisionsFile } from \"./questions.ts\";\nimport { LAYA_PLAN_MESSAGE, renderPlanMessage, selectSkills, unneededTools } from \"./routers.ts\";\nimport { type LayaImageVariant, layaImage } from \"./runtime.ts\";\nimport { generateSeed } from \"./seed.ts\";\nimport { isLocalUrl, LayaServer } from \"./server.ts\";\nimport {\n\tdatasetFromTelemetry,\n\tHARNESS_MESSAGE,\n\thistoryFromTelemetry,\n\tsummarizeRun,\n\tTelemetryStore,\n\ttruncateRequest,\n} from \"./telemetry.ts\";\nimport {\n\taccuracy,\n\tdescribeProgress,\n\tdockerHasGpu,\n\treadRegistry,\n\treadRows,\n\ttype Score,\n\tSESSION_SOURCE,\n\tsharedTrainer,\n\ttype TrainingListener,\n\ttype TrainingOutcome,\n} from \"./training.ts\";\n\nexport { LAYA_PLAN_MESSAGE } from \"./routers.ts\";\n\nexport const LAYA_PROVIDER_ID = \"laya\";\nexport const LAYA_CLASSIFIER_ID = \"execution-intelligence\";\nexport const LAYA_VIRTUAL_MODEL_ID = \"auto\";\n/** Not 8000, the port laya-trainer's own server and many development servers use. */\nexport const DEFAULT_LAYA_BASE_URL = \"http://127.0.0.1:8737/v1\";\n\nconst DEFAULT_TIMEOUT_MS = 5000;\nconst DEFAULT_MIN_CONFIDENCE = 0.5;\nconst DEFAULT_ESCALATE_AFTER_FAILURES = 3;\n/** After a failed classifier call, keyword rules answer for this long before Laya is tried again. */\nconst LAYA_RETRY_AFTER_MS = 60_000;\nconst QUOTA_ERROR = /rate.?limit|\\b429\\b|overload|\\b529\\b|quota|capacity|too many requests|usage limit/i;\n\n/** Router state stored on the session branch. */\nexport interface LayaRouterState {\n\ttaskId: string;\n\trequest: string;\n\tassessment: TaskAssessment;\n\tpolicy: PolicyDecision;\n\tprofile: PolicyProfile;\n\t/** Tier and model currently handling the task. */\n\ttier: CapabilityTier;\n\tmodel: string;\n\tthinkingLevel: ModelThinkingLevel;\n\t/** Failed tool calls of the turn already answered by an escalation. */\n\tfailuresAtEscalation: number;\n\tescalations: Array<{ reason: EscalationReason; from: CapabilityTier; to: CapabilityTier }>;\n\tattempts: number;\n\t/** Top-ranked alternatives at selection time, for `/laya`. */\n\talternatives: string[];\n}\n\nconst layaClassifier: ClassifierModel<\"typesafe-system-one\"> = {\n\ttype: \"classifier\",\n\tid: LAYA_CLASSIFIER_ID,\n\tname: \"Laya Execution Intelligence\",\n\tapi: \"typesafe-system-one\",\n\tprovider: LAYA_PROVIDER_ID,\n\tbaseUrl: DEFAULT_LAYA_BASE_URL,\n\tinput: [\"text\"],\n\tcost: { input: 0, output: 0, cacheRead: 0, cacheWrite: 0 },\n\tcontextWindow: 1024,\n};\n\n/**\n * The local Laya server speaks TypeSafe's System One protocol, so the built-in implementation serves\n * it. It needs no key; `LAYA_API_KEY` is sent when set, for servers that require one.\n */\nfunction createLayaProvider(baseUrl: () => string | undefined): Provider {\n\treturn createProvider({\n\t\tid: LAYA_PROVIDER_ID,\n\t\tname: \"Laya\",\n\t\tauth: {\n\t\t\tapiKey: {\n\t\t\t\tname: \"Laya\",\n\t\t\t\tresolve: async ({ ctx, credential }) => ({\n\t\t\t\t\tauth: {\n\t\t\t\t\t\tapiKey: credential?.key ?? (await ctx.env(\"LAYA_API_KEY\")) ?? \"local\",\n\t\t\t\t\t\tbaseUrl: baseUrl() ?? (await ctx.env(\"LAYA_BASE_URL\")) ?? DEFAULT_LAYA_BASE_URL,\n\t\t\t\t\t},\n\t\t\t\t\tsource: \"Laya server\",\n\t\t\t\t}),\n\t\t\t},\n\t\t},\n\t\tmodels: [layaClassifier],\n\t\tclassifiers: { \"typesafe-system-one\": typesafeSystemOneApi() },\n\t});\n}\n\nfunction messageText(message: Message): string {\n\tif (message.role !== \"user\") return \"\";\n\tconst content = message.content;\n\tif (typeof content === \"string\") return content;\n\treturn content.flatMap((block) => (block.type === \"text\" ? [block.text] : [])).join(\"\\n\");\n}\n\n/** Index of the latest message the user wrote; harness and plan messages do not count. */\nfunction lastUserIndex(messages: readonly Message[]): number {\n\treturn messages.findLastIndex((message) => message.role === \"user\" && !HARNESS_MESSAGE.test(messageText(message)));\n}\n\n/** Failed tool calls and harness verification requests since the user's latest message. */\nfunction failuresThisTurn(messages: readonly Message[]): { count: number; evidence: boolean } {\n\tlet count = 0;\n\tlet evidence = false;\n\tfor (const message of messages.slice(lastUserIndex(messages) + 1)) {\n\t\tif (message.role === \"toolResult\" && message.isError) count++;\n\t\tif (message.role === \"user\" && messageText(message).startsWith(\"[harness:evidence]\")) {\n\t\t\tcount++;\n\t\t\tevidence = true;\n\t\t}\n\t}\n\treturn { count, evidence };\n}\n\nconst percent = (score: Score) => `${(accuracy(score) * 100).toFixed(1)}%`;\n\n/** What a finished training changed, for the user. */\nexport function describeTrainingOutcome({ model, activated, previous }: TrainingOutcome): string {\n\tconst session = `${model.session.candidate.correct} of ${model.session.candidate.n} answers on the session tasks right (${previous}: ${model.session.current.correct})`;\n\tconst minutes = Math.max(1, Math.round(model.seconds / 60));\n\treturn activated\n\t\t? `Laya learned ${model.sessionTasks} session tasks in about ${minutes} min: ${model.name} now routes requests. It gets ${session}; test ${percent(model.test.candidate)} (${previous}: ${percent(model.test.current)}).`\n\t\t: `Laya trained ${model.name}, but ${previous} keeps routing: the test score fell from ${percent(model.test.current)} to ${percent(model.test.candidate)}. It gets ${session}. /laya use ${model.name} activates it anyway.`;\n}\n\nexport interface LayaExtensionOptions {\n\t/** Docker CLI runner. Default: the `docker` command. */\n\tdocker?: DockerRun;\n}\n\n/** Files of the Python runtime Relay used to install on the host, before Laya moved to Docker. */\nconst HOST_RUNTIME_LEFTOVERS = [\"venv\", \"models\", \"serve.py\", \"train.py\", \"server.log\"];\n\nexport default function layaExtension(relay: ExtensionAPI, options: LayaExtensionOptions = {}): void {\n\tconst quota = new QuotaManager();\n\tconst docker = options.docker ?? spawnDocker;\n\tconst layaHome = join(getAgentDir(), \"laya\");\n\tconst store = new TelemetryStore(join(layaHome, \"telemetry.jsonl\"));\n\tconst baseUrl = () => settings.baseUrl ?? process.env.LAYA_BASE_URL ?? DEFAULT_LAYA_BASE_URL;\n\tlet variant: Promise<LayaImageVariant> | undefined;\n\tlet gpu: Promise<boolean> | undefined;\n\t/** The CUDA image where an NVIDIA GPU exists, the smaller CPU image otherwise. */\n\tconst hostVariant = async (): Promise<LayaImageVariant> => {\n\t\tif (process.platform === \"darwin\") return \"cpu\";\n\t\ttry {\n\t\t\treturn (await relay.exec(\"nvidia-smi\", [\"-L\"], { timeout: 10_000 })).code === 0 ? \"cuda\" : \"cpu\";\n\t\t} catch {\n\t\t\treturn \"cpu\";\n\t\t}\n\t};\n\tconst imageVariant = () => {\n\t\tvariant ??= hostVariant();\n\t\treturn variant;\n\t};\n\tconst image = async () => settings.image ?? layaImage(LAYA_MODEL_MANIFEST, await imageVariant());\n\tconst trainingGpu = () => {\n\t\tgpu ??= (async () => (await imageVariant()) === \"cuda\" && dockerHasGpu(docker, await image()))();\n\t\treturn gpu;\n\t};\n\tconst trainer = sharedTrainer({ home: layaHome, manifest: LAYA_MODEL_MANIFEST, docker, image, gpu: trainingGpu });\n\tconst server = new LayaServer({ docker, baseUrl, image, model: () => trainer.activeModel().dir });\n\t/** Server problem last reported, so a failing Docker is not reported on every start. */\n\tlet reportedProblem: string | undefined;\n\tlet history = new PerformanceHistory();\n\tlet settings: LayaSettings = {};\n\tlet profileOverride: PolicyProfile | undefined;\n\tlet layaUnavailableUntil = 0;\n\tlet lastClassifierError: string | undefined;\n\t/** Plan computed in before_agent_start for the prompt about to be sent. */\n\tlet pending: { request: string; assessment: TaskAssessment } | undefined;\n\t/** Latest state returned by the router, and the run it belongs to. */\n\tlet current: LayaRouterState | undefined;\n\tlet run: { taskId: string; startedAt: number } | undefined;\n\t/** Tools active before enforced tool routing changed them. */\n\tlet toolBaseline: { tools: string[]; applied: string[] } | undefined;\n\t/** Tasks `/laya learn` listed for the agent to label, numbered as the agent saw them. */\n\tlet learnTasks: { tasks: SessionTask[]; session: string } | undefined;\n\t/** This runtime's training listener, while it is the latest one. */\n\tlet listener: TrainingListener | undefined;\n\tlet memoryCache: { version: string; memory: TaskMemory } | undefined;\n\n\tconst refreshSettings = () => {\n\t\tsettings = relay.getSettings().laya ?? {};\n\t\tquota.configure(settings.quota);\n\t};\n\tconst profile = (): PolicyProfile => {\n\t\tconst flag = relay.getFlag(\"laya-policy\");\n\t\tconst fromFlag = POLICY_PROFILES.find((name) => name === flag);\n\t\treturn profileOverride ?? fromFlag ?? settings.policy ?? \"balanced\";\n\t};\n\tconst isSelected = (ctx: ExtensionContext) =>\n\t\tctx.model?.provider === LAYA_PROVIDER_ID && ctx.model.id === LAYA_VIRTUAL_MODEL_ID;\n\n\trelay.registerFlag(\"laya-policy\", {\n\t\ttype: \"string\",\n\t\tdescription: \"Cost profile of the laya/auto router: economy, balanced, quality or critical\",\n\t});\n\trelay.registerProvider(createLayaProvider(() => settings.baseUrl));\n\n\t/** System 1: Laya's answers, or keyword rules when the server cannot answer. */\n\t/** Learned tasks, reloaded when the training dataset changes. Undefined when off or empty. */\n\tfunction memory(): TaskMemory | undefined {\n\t\tif (settings.memory === false) return undefined;\n\t\tlet version: string;\n\t\ttry {\n\t\t\tconst stat = statSync(trainer.workspace.dataset);\n\t\t\tversion = `${stat.mtimeMs}:${stat.size}`;\n\t\t} catch {\n\t\t\treturn undefined;\n\t\t}\n\t\tif (memoryCache?.version !== version) {\n\t\t\tmemoryCache = { version, memory: TaskMemory.fromRows(readRows(trainer.workspace.dataset)) };\n\t\t}\n\t\treturn memoryCache.memory.size > 0 ? memoryCache.memory : undefined;\n\t}\n\n\t/** Lessons of learned tasks similar to a request; none for harness messages such as /laya learn's. */\n\tconst lessonsFor = (request: string) =>\n\t\tHARNESS_MESSAGE.test(request.trimStart())\n\t\t\t? undefined\n\t\t\t: renderLessons(memory()?.search(request, LESSON_SIMILARITY) ?? []);\n\n\t/** The labels of a learned task close to the request, then Laya's answers, then keyword rules. */\n\tasync function assess(request: string, ctx: ExtensionContext, signal?: AbortSignal): Promise<TaskAssessment> {\n\t\tconst learned = memory()?.search(request, ROUTE_SIMILARITY, 1)[0];\n\t\tif (learned) {\n\t\t\ttry {\n\t\t\t\treturn {\n\t\t\t\t\t...assessmentFromLabels(learned.task.expected),\n\t\t\t\t\tsource: \"memory\",\n\t\t\t\t\tconfidence: learned.similarity,\n\t\t\t\t};\n\t\t\t} catch {\n\t\t\t\t// Labeled against questions that have changed since; Laya answers instead.\n\t\t\t}\n\t\t}\n\t\tconst classifier = ctx.modelRegistry.findOfType(\"classifier\", LAYA_PROVIDER_ID, LAYA_CLASSIFIER_ID);\n\t\t// While the container installs, or without Docker, the classifier call would only fail.\n\t\tif (!classifier || Date.now() < layaUnavailableUntil || server.state === \"installing\") {\n\t\t\treturn heuristicAssessment(request);\n\t\t}\n\t\tconst result = await ctx.modelRegistry.classify(\n\t\t\tclassifier,\n\t\t\t{ state: { request: truncateRequest(request) }, questions: LAYA_QUESTIONS },\n\t\t\t{ signal, timeoutMs: settings.timeoutMs ?? DEFAULT_TIMEOUT_MS, maxRetries: 0 },\n\t\t);\n\t\ttry {\n\t\t\tif (result.stopReason !== \"stop\") throw new Error(result.errorMessage ?? \"Laya did not answer\");\n\t\t\tconst assessment = assessmentFromAnswers(result.answers);\n\t\t\tlastClassifierError = undefined;\n\t\t\treturn assessment;\n\t\t} catch (error) {\n\t\t\tif (signal?.aborted) throw error;\n\t\t\tlastClassifierError = error instanceof Error ? error.message : String(error);\n\t\t\tlayaUnavailableUntil = Date.now() + LAYA_RETRY_AFTER_MS;\n\t\t\treturn heuristicAssessment(request);\n\t\t}\n\t}\n\n\t/** Model registry: configured models whose provider has credentials. */\n\tfunction candidates(ctx: ExtensionContext): Array<Candidate & { model: Model<Api> }> {\n\t\tconst registry = { ...DEFAULT_MODEL_REGISTRY, ...settings.models };\n\t\tconst result: Array<Candidate & { model: Model<Api> }> = [];\n\t\tfor (const tier of CAPABILITY_TIERS) {\n\t\t\tfor (const ref of registry[tier] ?? []) {\n\t\t\t\tconst parsed = parseModelRef(ref);\n\t\t\t\tconst model = parsed && ctx.modelRegistry.find(parsed.provider, parsed.id);\n\t\t\t\tif (!model || model.provider === LAYA_PROVIDER_ID || !ctx.modelRegistry.hasConfiguredAuth(model)) continue;\n\t\t\t\tresult.push({ ref, provider: model.provider, tier, order: result.length, model });\n\t\t\t}\n\t\t}\n\t\treturn result;\n\t}\n\n\tfunction rank(\n\t\tctx: ExtensionContext,\n\t\tinput: { assessment: TaskAssessment; requiredTier: CapabilityTier; minTier: CapabilityTier },\n\t): Array<ScoredCandidate & { model: Model<Api> }> {\n\t\tconst available = candidates(ctx);\n\t\tif (available.length === 0) {\n\t\t\tthrow new Error(\n\t\t\t\t\"laya/auto: no model of the Laya model registry has credentials. Log in to a provider or set laya.models.\",\n\t\t\t);\n\t\t}\n\t\tconst byRef = new Map(available.map((candidate) => [candidate.ref, candidate.model]));\n\t\tconst ranked = rankCandidates(available, {\n\t\t\trequiredTier: input.requiredTier,\n\t\t\tminTier: input.minTier,\n\t\t\trisk: input.assessment.task.risk,\n\t\t\tprofile: profile(),\n\t\t\ttaskKey: taskKey(input.assessment),\n\t\t\thistory,\n\t\t\tquota,\n\t\t});\n\t\t// Every candidate is below the floor or out of quota: take the strongest one available.\n\t\tconst fallback = [...available].sort(\n\t\t\t(a, b) => CAPABILITY_TIERS.indexOf(b.tier) - CAPABILITY_TIERS.indexOf(a.tier),\n\t\t);\n\t\tconst list =\n\t\t\tranked.length > 0\n\t\t\t\t? ranked\n\t\t\t\t: fallback.map((candidate) => ({\n\t\t\t\t\t\t...candidate,\n\t\t\t\t\t\tsuccess: 0,\n\t\t\t\t\t\tcost: 0,\n\t\t\t\t\t\tlatency: 0,\n\t\t\t\t\t\tutility: 0,\n\t\t\t\t\t\teligible: false,\n\t\t\t\t\t}));\n\t\treturn list.map((candidate) => ({ ...candidate, model: byRef.get(candidate.ref)! }));\n\t}\n\n\tfunction select(\n\t\tctx: ExtensionContext,\n\t\tbase: Omit<LayaRouterState, \"tier\" | \"model\" | \"thinkingLevel\" | \"alternatives\">,\n\t\tminTier: CapabilityTier,\n\t\trequiredTier: CapabilityTier,\n\t): { route: ModelRoute<LayaRouterState>; state: LayaRouterState } {\n\t\tconst ranked = rank(ctx, { assessment: base.assessment, requiredTier, minTier });\n\t\tconst chosen = ranked[0];\n\t\tconst state: LayaRouterState = {\n\t\t\t...base,\n\t\t\ttier: chosen.tier,\n\t\t\tmodel: chosen.ref,\n\t\t\tthinkingLevel: base.policy.thinkingLevel,\n\t\t\talternatives: ranked.slice(1, 4).map((candidate) => candidate.ref),\n\t\t};\n\t\tcurrent = state;\n\t\tctx.ui.setStatus(\n\t\t\t\"laya\",\n\t\t\t`laya ${profile()}: ${base.assessment.task.type} → ${chosen.tier} ${chosen.model.id} • ${state.thinkingLevel}${\n\t\t\t\t{ laya: \"\", memory: \" (memory)\", heuristic: \" (rules)\" }[base.assessment.source]\n\t\t\t}`,\n\t\t);\n\t\treturn { route: { model: chosen.model, thinkingLevel: state.thinkingLevel, state }, state };\n\t}\n\n\tasync function planTask(\n\t\trequest: ModelRouteRequest<LayaRouterState>,\n\t\tctx: ExtensionContext,\n\t): Promise<ModelRoute<LayaRouterState>> {\n\t\tconst index = lastUserIndex(request.messages);\n\t\tconst text = index >= 0 ? messageText(request.messages[index]) : \"\";\n\t\tconst assessment =\n\t\t\tpending && pending.request === text ? pending.assessment : await assess(text, ctx, request.signal);\n\t\tpending = undefined;\n\t\tconst policy = applyPolicy(assessment, text, {\n\t\t\tminConfidence: settings.minConfidence ?? DEFAULT_MIN_CONFIDENCE,\n\t\t});\n\t\tconst taskId = randomUUID();\n\t\trun = { taskId, startedAt: run?.startedAt ?? Date.now() };\n\t\tconst escalations = policy.escalations.map((reason) => ({\n\t\t\treason,\n\t\t\tfrom: policy.recommendedTier,\n\t\t\tto: policy.requiredTier,\n\t\t}));\n\t\treturn select(\n\t\t\tctx,\n\t\t\t{\n\t\t\t\ttaskId,\n\t\t\t\trequest: truncateRequest(text),\n\t\t\t\tassessment,\n\t\t\t\tpolicy,\n\t\t\t\tprofile: profile(),\n\t\t\t\tfailuresAtEscalation: 0,\n\t\t\t\tescalations,\n\t\t\t\tattempts: 1,\n\t\t\t},\n\t\t\tpolicy.minTier,\n\t\t\tpolicy.requiredTier,\n\t\t).route;\n\t}\n\n\t/** Moves the task one tier up, or to an equivalent model when the provider is out of quota. */\n\tfunction escalate(\n\t\tctx: ExtensionContext,\n\t\tstate: LayaRouterState,\n\t\treason: EscalationReason,\n\t\tfailures: number,\n\t): ModelRoute<LayaRouterState> | undefined {\n\t\tconst sameTier = reason === \"provider_unavailable\";\n\t\tconst target = sameTier ? state.tier : nextTier(state.tier);\n\t\tif (!target) return undefined;\n\t\tconst { route } = select(\n\t\t\tctx,\n\t\t\t{\n\t\t\t\t...state,\n\t\t\t\tfailuresAtEscalation: failures,\n\t\t\t\tescalations: [...state.escalations, { reason, from: state.tier, to: target }],\n\t\t\t\tattempts: state.attempts + 1,\n\t\t\t},\n\t\t\ttarget,\n\t\t\ttarget,\n\t\t);\n\t\treturn route;\n\t}\n\n\tfunction sticky(ctx: ExtensionContext, state: LayaRouterState): ModelRoute<LayaRouterState> {\n\t\tconst parsed = parseModelRef(state.model);\n\t\tconst model = parsed && ctx.modelRegistry.find(parsed.provider, parsed.id);\n\t\tif (!model) throw new Error(`laya/auto: routed model ${state.model} is no longer in the catalog`);\n\t\tcurrent = state;\n\t\treturn { model, thinkingLevel: state.thinkingLevel };\n\t}\n\n\tasync function route(\n\t\trequest: ModelRouteRequest<LayaRouterState>,\n\t\tctx: ExtensionContext,\n\t): Promise<ModelRoute<LayaRouterState>> {\n\t\tconst state = request.state;\n\t\tif (request.reason === \"direct\") {\n\t\t\t// Compaction summaries and extension calls: a balanced model without heavy reasoning.\n\t\t\tconst ranked = rank(ctx, { assessment: heuristicAssessment(\"\"), requiredTier: \"balanced\", minTier: \"fast\" });\n\t\t\treturn { model: ranked[0].model, thinkingLevel: \"low\" };\n\t\t}\n\t\tif (request.reason === \"user\" || !state) return planTask(request, ctx);\n\n\t\tif (request.reason === \"retry\" && request.failed) {\n\t\t\tif (QUOTA_ERROR.test(request.failed.message.errorMessage ?? \"\")) {\n\t\t\t\tquota.recordPressure(request.failed.model.provider);\n\t\t\t\tconst route = escalate(ctx, state, \"provider_unavailable\", state.failuresAtEscalation);\n\t\t\t\tif (route) return route;\n\t\t\t}\n\t\t\treturn sticky(ctx, state);\n\t\t}\n\n\t\tconst threshold = settings.escalateAfterFailures ?? DEFAULT_ESCALATE_AFTER_FAILURES;\n\t\tconst failures = failuresThisTurn(request.messages);\n\t\tif (threshold > 0 && failures.count - state.failuresAtEscalation >= threshold) {\n\t\t\tconst route = escalate(ctx, state, failures.evidence ? \"test_failure\" : \"repeated_failure\", failures.count);\n\t\t\tif (route) return route;\n\t\t}\n\t\treturn sticky(ctx, state);\n\t}\n\n\trelay.registerVirtualModel<LayaRouterState>({\n\t\tprovider: LAYA_PROVIDER_ID,\n\t\tid: LAYA_VIRTUAL_MODEL_ID,\n\t\tname: \"Auto (Laya)\",\n\t\troute,\n\t});\n\n\t/**\n\t * Pulls the image and starts or updates the server container, with progress in the status line.\n\t * `explicit` is a user command: it always reports the result. Otherwise only a finished\n\t * installation and a new problem are reported.\n\t */\n\tasync function install(ctx: ExtensionContext, explicit = false): Promise<boolean> {\n\t\tlet worked = false;\n\t\tconst ok = await server.install((message) => {\n\t\t\tworked = true;\n\t\t\tctx.ui.setStatus(\"laya-setup\", `laya: ${message}`);\n\t\t});\n\t\tctx.ui.setStatus(\"laya-setup\", undefined);\n\t\tif (ok) {\n\t\t\tlayaUnavailableUntil = 0;\n\t\t\tlastClassifierError = undefined;\n\t\t\treportedProblem = undefined;\n\t\t\tif (explicit || worked) ctx.ui.notify(`Laya is ${server.describe()}; it routes laya/auto requests.`);\n\t\t\treturn true;\n\t\t}\n\t\tconst problem = server.describe();\n\t\tif (explicit || problem !== reportedProblem) {\n\t\t\treportedProblem = problem;\n\t\t\tctx.ui.notify(`Laya ${problem}. Keyword rules route laya/auto requests until it runs.`, \"warning\");\n\t\t}\n\t\treturn false;\n\t}\n\n\t/** Deletes the Python environment and model that Relay installed on the host before Laya moved to Docker. */\n\tfunction removeHostRuntime(): void {\n\t\tfor (const name of HOST_RUNTIME_LEFTOVERS) {\n\t\t\ttry {\n\t\t\t\trmSync(join(layaHome, name), { recursive: true, force: true });\n\t\t\t} catch {\n\t\t\t\t// In use or not ours to delete; it does no harm.\n\t\t\t}\n\t\t}\n\t}\n\n\t/** Capability tier of a `provider/model` in the Laya model registry. */\n\tconst tierOf = (ref: string): CapabilityTier | undefined => {\n\t\tconst registry = { ...DEFAULT_MODEL_REGISTRY, ...settings.models };\n\t\treturn CAPABILITY_TIERS.find((tier) => registry[tier]?.includes(ref));\n\t};\n\n\t/**\n\t * Starts training on the collected exercises. It runs in the background in interactive modes and\n\t * reports through the listener; print and JSON mode wait for it, since the process ends with the turn.\n\t */\n\tasync function startTraining(ctx: ExtensionContext): Promise<string> {\n\t\tif (trainer.running) return \"Laya is already training; run /laya train after it ends to include these tasks.\";\n\t\tif (server.state !== \"ready\" && !(await server.install())) {\n\t\t\treturn `Laya ${server.describe()}, so it cannot train yet. Run /laya setup, then /laya train.`;\n\t\t}\n\t\tif (!(await trainingGpu())) {\n\t\t\tconst accepted =\n\t\t\t\t!ctx.hasUI ||\n\t\t\t\t(await ctx.ui.confirm(\n\t\t\t\t\t\"Train Laya on the CPU?\",\n\t\t\t\t\t\"Docker gives Laya no GPU on this computer. Training still works, but can take an hour or more. Laya keeps routing requests meanwhile.\",\n\t\t\t\t));\n\t\t\tif (!accepted) return \"Training was not started. Run /laya train when you want it.\";\n\t\t}\n\t\t// The server runs on the CPU, so it keeps routing while the training container has the GPU.\n\t\tconst job = trainer.train();\n\t\tif (ctx.mode === \"print\" || ctx.mode === \"json\") {\n\t\t\ttry {\n\t\t\t\treturn describeTrainingOutcome(await job);\n\t\t\t} catch (error) {\n\t\t\t\treturn `Laya training failed: ${error instanceof Error ? error.message : String(error)}`;\n\t\t\t}\n\t\t}\n\t\t// The listener reports the result.\n\t\tjob.catch(() => {});\n\t\treturn \"Laya is training in a Docker container (a few minutes with a GPU). The current model keeps routing until it ends; then the new model routes requests if it passes the test.\";\n\t}\n\n\trelay.on(\"session_start\", (_event, ctx) => {\n\t\trefreshSettings();\n\t\thistory = settings.telemetry === false ? new PerformanceHistory() : historyFromTelemetry(store.read());\n\t\tremoveHostRuntime();\n\t\t// Install right away in the background: pull the image on first use, then keep the container\n\t\t// running. Sessions without a UI (print mode, SDK, tests) leave Docker alone.\n\t\tif (settings.autostart !== false && ctx.hasUI && isLocalUrl(baseUrl())) void install(ctx);\n\t\tlistener = {\n\t\t\tprogress: (progress) => ctx.ui.setStatus(\"laya-train\", `laya training: ${describeProgress(progress)}`),\n\t\t\tfinished: (result) => {\n\t\t\t\tctx.ui.setStatus(\"laya-train\", undefined);\n\t\t\t\tif (\"error\" in result) {\n\t\t\t\t\tctx.ui.notify(`Laya training failed: ${result.error.message}`, \"error\");\n\t\t\t\t\treturn;\n\t\t\t\t}\n\t\t\t\tctx.ui.notify(describeTrainingOutcome(result.outcome), result.outcome.activated ? \"info\" : \"warning\");\n\t\t\t\t// The server container is replaced by one serving the new model.\n\t\t\t\tif (result.outcome.activated) void install(ctx);\n\t\t\t},\n\t\t};\n\t\ttrainer.listener = listener;\n\t});\n\n\trelay.registerTool<typeof learnToolSchema, { added: number; updated: number; training?: string }>({\n\t\tname: LEARN_TOOL_NAME,\n\t\tlabel: \"Laya learn\",\n\t\tdescription:\n\t\t\t\"Save labeled tasks of this session as training exercises for Laya, Relay's routing model, and train it so similar requests get the right model, effort and tools. Use after /laya learn lists the tasks, or when the user asks Relay to learn from this session or conversation.\",\n\t\tparameters: learnToolSchema,\n\t\t// Loaded by /laya learn, or found by tool search when the user asks in their own words.\n\t\texposure: \"deferred\",\n\t\texecutionMode: \"sequential\",\n\t\tasync execute(_toolCallId, params, _signal, _onUpdate, ctx) {\n\t\t\tif (!learnTasks) {\n\t\t\t\t// Called without /laya learn: number this session's tasks and ask for labels against them.\n\t\t\t\tconst tasks = sessionTasks(ctx.sessionManager.getBranch(), tierOf);\n\t\t\t\tlearnTasks = { tasks, session: ctx.sessionManager.getSessionId() };\n\t\t\t\tthrow new Error(\n\t\t\t\t\t[\n\t\t\t\t\t\t`Nothing was saved: label these tasks of the session by their numbers, then call ${LEARN_TOOL_NAME} again. Leave out entries that are not coding tasks, such as this request to learn.`,\n\t\t\t\t\t\t`Questions:\\n${renderQuestions()}`,\n\t\t\t\t\t\t...tasks.map(renderTask),\n\t\t\t\t\t].join(\"\\n\\n\"),\n\t\t\t\t);\n\t\t\t}\n\t\t\tconst rows = exercisesToRows(learnTasks.tasks, params.exercises, {\n\t\t\t\tsession: learnTasks.session,\n\t\t\t\tcreated: new Date().toISOString(),\n\t\t\t});\n\t\t\tconst { added, updated } = trainer.addExercises(rows);\n\t\t\tlearnTasks = undefined;\n\t\t\tconst sessionRows = trainer.counts()[SESSION_SOURCE] ?? 0;\n\t\t\tconst saved = `Saved ${rows.length} exercises (${added} new, ${updated} updated); ${sessionRows} session tasks in total, in ${trainer.workspace.dataset}. Requests similar to these tasks use their labels and lessons from the next one.`;\n\t\t\tconst training =\n\t\t\t\tparams.train === false ? \"Training was not started (run /laya train).\" : await startTraining(ctx);\n\t\t\treturn { content: [{ type: \"text\", text: `${saved} ${training}` }], details: { added, updated, training } };\n\t\t},\n\t});\n\n\t/** The user's own tool set: the active tools, or the set enforcement replaced while it is unchanged. */\n\tconst userTools = (): string[] => {\n\t\tconst active = relay.getActiveTools();\n\t\tconst applied = toolBaseline?.applied;\n\t\tconst unchanged = applied && active.length === applied.length && active.every((name, i) => name === applied[i]);\n\t\treturn unchanged && toolBaseline ? toolBaseline.tools : active;\n\t};\n\n\trelay.on(\"before_agent_start\", async (event, ctx) => {\n\t\trefreshSettings();\n\t\tconst enforce = isSelected(ctx) && settings.toolRouting === \"enforce\";\n\t\t// Enforcement is off or another model is selected: give the user's tools back.\n\t\tif (toolBaseline && !enforce) {\n\t\t\trelay.setActiveTools(userTools());\n\t\t\ttoolBaseline = undefined;\n\t\t}\n\t\tif (!isSelected(ctx)) {\n\t\t\t// Lessons help whichever model runs the request.\n\t\t\tconst lessons = lessonsFor(event.prompt);\n\t\t\tif (!lessons) return;\n\t\t\treturn {\n\t\t\t\tmessage: {\n\t\t\t\t\tcustomType: LAYA_LESSONS_MESSAGE,\n\t\t\t\t\tcontent: `[laya:lessons] ${lessons}`,\n\t\t\t\t\tdisplay: false,\n\t\t\t\t},\n\t\t\t};\n\t\t}\n\t\tconst assessment = await assess(event.prompt, ctx, ctx.signal);\n\t\tpending = { request: event.prompt, assessment };\n\t\tconst policy = applyPolicy(assessment, event.prompt, {\n\t\t\tminConfidence: settings.minConfidence ?? DEFAULT_MIN_CONFIDENCE,\n\t\t});\n\t\tconst skills = selectSkills(event.systemPromptOptions.skills, assessment.agent, event.prompt);\n\n\t\tlet deactivated: string[] = [];\n\t\tif (enforce) {\n\t\t\tconst baseline = userTools();\n\t\t\tdeactivated = unneededTools(baseline, assessment.tools);\n\t\t\tconst applied = baseline.filter((name) => !deactivated.includes(name));\n\t\t\ttoolBaseline = { tools: baseline, applied };\n\t\t\trelay.setActiveTools(applied);\n\t\t}\n\t\tconst lessons = lessonsFor(event.prompt);\n\t\tconst plan = renderPlanMessage(assessment, policy, skills, deactivated);\n\t\treturn {\n\t\t\tmessage: {\n\t\t\t\tcustomType: LAYA_PLAN_MESSAGE,\n\t\t\t\tcontent: lessons ? `${plan}\\n- ${lessons}` : plan,\n\t\t\t\tdisplay: false,\n\t\t\t\tdetails: { assessment, policy, skills, deactivated },\n\t\t\t},\n\t\t};\n\t});\n\n\trelay.on(\"session_shutdown\", (event) => {\n\t\t// The server container keeps running for the next session.\n\t\tif (trainer.listener === listener) trainer.listener = undefined;\n\t\t// Training belongs to the process: it goes on into the next session, and stops when Relay quits.\n\t\tif (event.reason === \"quit\") trainer.stop();\n\t});\n\n\trelay.on(\"agent_start\", () => {\n\t\trun = undefined;\n\t});\n\n\trelay.on(\"agent_end\", (event, ctx) => {\n\t\tconst state = current;\n\t\tif (!isSelected(ctx) || !state || !run || run.taskId !== state.taskId) return;\n\t\tconst summary = summarizeRun(event.messages);\n\t\tconst success = summary.outcome === \"completed\" && summary.testsPassed !== false;\n\t\tconst [provider, ...rest] = state.model.split(\"/\");\n\t\tif (summary.outcome !== \"aborted\") history.record(taskKey(state.assessment), state.model, success);\n\t\tif (settings.telemetry === false) return;\n\t\ttry {\n\t\t\tstore.append({\n\t\t\t\ttask_id: state.taskId,\n\t\t\t\ttimestamp: new Date().toISOString(),\n\t\t\t\trequest: state.request,\n\t\t\t\tclassification: {\n\t\t\t\t\tsource: state.assessment.source,\n\t\t\t\t\t...state.assessment.task,\n\t\t\t\t\tagent: state.assessment.agent,\n\t\t\t\t\tvalidation: state.assessment.validation,\n\t\t\t\t\tconfidence: Number(state.assessment.confidence.toFixed(3)),\n\t\t\t\t\trecommended_tier: state.assessment.recommendation.tier,\n\t\t\t\t\trecommended_effort: state.assessment.recommendation.effort,\n\t\t\t\t},\n\t\t\t\tpolicy: { profile: state.profile, required_tier: state.policy.requiredTier, rules: state.policy.rules },\n\t\t\t\tselected: { provider, model: rest.join(\"/\"), tier: state.tier, thinking_level: state.thinkingLevel },\n\t\t\t\tresult: {\n\t\t\t\t\tsuccess,\n\t\t\t\t\toutcome: summary.outcome,\n\t\t\t\t\tattempts: state.attempts,\n\t\t\t\t\tescalations: state.escalations,\n\t\t\t\t\ttests_passed: summary.testsPassed,\n\t\t\t\t\ttool_failures: summary.toolFailures,\n\t\t\t\t},\n\t\t\t\tusage: {\n\t\t\t\t\ttokens: summary.tokens,\n\t\t\t\t\tcost: Number(summary.cost.toFixed(6)),\n\t\t\t\t\tduration_ms: Date.now() - run.startedAt,\n\t\t\t\t\tmodels: summary.models,\n\t\t\t\t},\n\t\t\t});\n\t\t} catch (error) {\n\t\t\tctx.ui.notify(\n\t\t\t\t`Laya telemetry not written: ${error instanceof Error ? error.message : String(error)}`,\n\t\t\t\t\"warning\",\n\t\t\t);\n\t\t}\n\t});\n\n\tconst writeJson = (path: string, content: string) => {\n\t\tmkdirSync(dirname(path), { recursive: true });\n\t\twriteFileSync(path, content, \"utf8\");\n\t};\n\n\trelay.registerCommand(\"laya\", {\n\t\tdescription: \"Laya execution router: status, setup, learn from sessions, train, models, policy\",\n\t\tgetArgumentCompletions: (prefix) =>\n\t\t\t[\n\t\t\t\t\"status\",\n\t\t\t\t\"setup\",\n\t\t\t\t\"start\",\n\t\t\t\t\"stop\",\n\t\t\t\t\"learn\",\n\t\t\t\t\"train\",\n\t\t\t\t\"models\",\n\t\t\t\t\"use \",\n\t\t\t\t\"policy \",\n\t\t\t\t\"decisions\",\n\t\t\t\t\"seed\",\n\t\t\t\t\"export\",\n\t\t\t]\n\t\t\t\t.filter((item) => item.startsWith(prefix))\n\t\t\t\t.map((item) => ({ value: item, label: item.trim() })),\n\t\thandler: async (args, ctx) => {\n\t\t\trefreshSettings();\n\t\t\tconst [subcommand = \"status\", ...rest] = args.trim().split(/\\s+/).filter(Boolean);\n\t\t\tconst layaDir = resolve(ctx.cwd, \".laya\");\n\t\t\tswitch (subcommand) {\n\t\t\t\tcase \"policy\": {\n\t\t\t\t\tconst name = POLICY_PROFILES.find((value) => value === rest[0]);\n\t\t\t\t\tif (!name) {\n\t\t\t\t\t\tctx.ui.notify(`Usage: /laya policy ${POLICY_PROFILES.join(\"|\")} (current: ${profile()})`, \"warning\");\n\t\t\t\t\t\treturn;\n\t\t\t\t\t}\n\t\t\t\t\tprofileOverride = name;\n\t\t\t\t\tctx.ui.notify(`Laya cost profile for this session: ${name}`);\n\t\t\t\t\treturn;\n\t\t\t\t}\n\t\t\t\tcase \"decisions\": {\n\t\t\t\t\tconst path = resolve(ctx.cwd, rest[0] ?? join(layaDir, \"decisions.json\"));\n\t\t\t\t\twriteJson(path, `${JSON.stringify(layaDecisionsFile(), null, 2)}\\n`);\n\t\t\t\t\tctx.ui.notify(`Wrote the Laya questions to ${path}`);\n\t\t\t\t\treturn;\n\t\t\t\t}\n\t\t\t\tcase \"seed\": {\n\t\t\t\t\tconst count = Number(rest[0] ?? 1100);\n\t\t\t\t\tif (!Number.isInteger(count) || count <= 0) {\n\t\t\t\t\t\tctx.ui.notify(\"Usage: /laya seed [count] [path]\", \"warning\");\n\t\t\t\t\t\treturn;\n\t\t\t\t\t}\n\t\t\t\t\tconst path = resolve(ctx.cwd, rest[1] ?? join(layaDir, \"data\", \"relay-seed.jsonl\"));\n\t\t\t\t\tconst rows = generateSeed(count);\n\t\t\t\t\twriteJson(path, rows.map((row) => `${JSON.stringify(row)}\\n`).join(\"\"));\n\t\t\t\t\tctx.ui.notify(`Wrote ${rows.length} synthetic exercises to ${path}`);\n\t\t\t\t\treturn;\n\t\t\t\t}\n\t\t\t\tcase \"export\": {\n\t\t\t\t\tconst path = resolve(ctx.cwd, rest[0] ?? join(layaDir, \"data\", \"relay-telemetry.jsonl\"));\n\t\t\t\t\tconst rows = datasetFromTelemetry(store.read(Number.MAX_SAFE_INTEGER));\n\t\t\t\t\twriteJson(path, rows.map((row) => `${JSON.stringify(row)}\\n`).join(\"\"));\n\t\t\t\t\tctx.ui.notify(`Exported ${rows.length} evidence-labeled exercises to ${path}`);\n\t\t\t\t\treturn;\n\t\t\t\t}\n\t\t\t\tcase \"learn\": {\n\t\t\t\t\tconst file = rest.join(\" \");\n\t\t\t\t\tlet entries = ctx.sessionManager.getBranch();\n\t\t\t\t\tlet session = ctx.sessionManager.getSessionId();\n\t\t\t\t\tif (file) {\n\t\t\t\t\t\tconst path = resolve(ctx.cwd, file);\n\t\t\t\t\t\tif (!existsSync(path)) {\n\t\t\t\t\t\t\tctx.ui.notify(`No session file at ${path}`, \"warning\");\n\t\t\t\t\t\t\treturn;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tconst manager = SessionManager.open(path);\n\t\t\t\t\t\tentries = manager.getBranch();\n\t\t\t\t\t\tsession = manager.getSessionId();\n\t\t\t\t\t}\n\t\t\t\t\tconst tasks = sessionTasks(entries, tierOf);\n\t\t\t\t\tif (tasks.length === 0) {\n\t\t\t\t\t\tctx.ui.notify(\"The session has no requests to learn from yet.\", \"warning\");\n\t\t\t\t\t\treturn;\n\t\t\t\t\t}\n\t\t\t\t\tlearnTasks = { tasks, session };\n\t\t\t\t\tconst active = relay.getActiveTools();\n\t\t\t\t\tif (!active.includes(LEARN_TOOL_NAME)) relay.setActiveTools([...active, LEARN_TOOL_NAME]);\n\t\t\t\t\tconst prompt = buildLearnPrompt(tasks, { source: file ? resolve(ctx.cwd, file) : undefined });\n\t\t\t\t\tif (ctx.isIdle()) relay.sendUserMessage(prompt);\n\t\t\t\t\telse relay.sendUserMessage(prompt, { deliverAs: \"followUp\" });\n\t\t\t\t\treturn;\n\t\t\t\t}\n\t\t\t\tcase \"train\": {\n\t\t\t\t\tctx.ui.notify(await startTraining(ctx));\n\t\t\t\t\treturn;\n\t\t\t\t}\n\t\t\t\tcase \"models\": {\n\t\t\t\t\tconst active = trainer.activeModel().name;\n\t\t\t\t\tconst registry = readRegistry(trainer.workspace);\n\t\t\t\t\tconst mark = (name: string) => (name === active ? \" (routing)\" : \"\");\n\t\t\t\t\tconst lines = [`${LAYA_MODEL_MANIFEST.version}: shipped with Relay${mark(LAYA_MODEL_MANIFEST.version)}`];\n\t\t\t\t\tfor (const model of registry.models) {\n\t\t\t\t\t\tlines.push(\n\t\t\t\t\t\t\t`${model.name}: ${model.createdAt.slice(0, 16).replace(\"T\", \" \")}, from ${model.basedOn}, ${model.sessionTasks} session tasks, test ${percent(model.test.candidate)} (${model.basedOn}: ${percent(model.test.current)}), session answers ${model.session.candidate.correct}/${model.session.candidate.n}${mark(model.name)}`,\n\t\t\t\t\t\t);\n\t\t\t\t\t}\n\t\t\t\t\tconst counts = trainer.counts();\n\t\t\t\t\tlines.push(\n\t\t\t\t\t\t`Exercises: ${\n\t\t\t\t\t\t\tObject.entries(counts)\n\t\t\t\t\t\t\t\t.map(([source, count]) => `${count} ${source}`)\n\t\t\t\t\t\t\t\t.join(\", \") || \"none yet\"\n\t\t\t\t\t\t} (${trainer.workspace.dataset})`,\n\t\t\t\t\t);\n\t\t\t\t\tif (trainer.running) {\n\t\t\t\t\t\tlines.push(`Training: ${trainer.progress ? describeProgress(trainer.progress) : \"starting\"}`);\n\t\t\t\t\t}\n\t\t\t\t\tctx.ui.notify(lines.join(\"\\n\"));\n\t\t\t\t\treturn;\n\t\t\t\t}\n\t\t\t\tcase \"use\": {\n\t\t\t\t\tconst name = rest[0];\n\t\t\t\t\tif (!name) {\n\t\t\t\t\t\tctx.ui.notify(\n\t\t\t\t\t\t\t`Usage: /laya use <model> (current: ${trainer.activeModel().name}; see /laya models)`,\n\t\t\t\t\t\t\t\"warning\",\n\t\t\t\t\t\t);\n\t\t\t\t\t\treturn;\n\t\t\t\t\t}\n\t\t\t\t\ttry {\n\t\t\t\t\t\ttrainer.use(name);\n\t\t\t\t\t} catch (error) {\n\t\t\t\t\t\tctx.ui.notify(error instanceof Error ? error.message : String(error), \"warning\");\n\t\t\t\t\t\treturn;\n\t\t\t\t\t}\n\t\t\t\t\tctx.ui.notify(`${trainer.activeModel().name} routes requests once the Laya container restarts with it`);\n\t\t\t\t\t// Replaces the server container with one serving the selected model.\n\t\t\t\t\tawait install(ctx, true);\n\t\t\t\t\treturn;\n\t\t\t\t}\n\t\t\t\tcase \"setup\":\n\t\t\t\tcase \"start\": {\n\t\t\t\t\tawait install(ctx, true);\n\t\t\t\t\treturn;\n\t\t\t\t}\n\t\t\t\tcase \"stop\": {\n\t\t\t\t\tawait server.stop();\n\t\t\t\t\tctx.ui.notify(\"Stopped the Laya container; /laya start or the next Relay start runs it again\");\n\t\t\t\t\treturn;\n\t\t\t\t}\n\t\t\t\tcase \"status\": {\n\t\t\t\t\tconst providers = new Set(candidates(ctx).map((candidate) => candidate.provider));\n\t\t\t\t\tconst lines = [\n\t\t\t\t\t\t`Profile: ${profile()}${isSelected(ctx) ? \"\" : \" (select laya/auto to route with Laya)\"}`,\n\t\t\t\t\t\t`Laya container: ${server.describe()}; server ${(await server.isUp()) ? \"answering\" : \"not answering\"} at ${baseUrl()}`,\n\t\t\t\t\t\t`Laya server: ${lastClassifierError ? `unavailable, using keyword rules (${lastClassifierError})` : \"ok or not yet asked\"}`,\n\t\t\t\t\t\t`Models with credentials: ${\n\t\t\t\t\t\t\tcandidates(ctx)\n\t\t\t\t\t\t\t\t.map((candidate) => `${candidate.tier}:${candidate.ref}`)\n\t\t\t\t\t\t\t\t.join(\", \") || \"none\"\n\t\t\t\t\t\t}`,\n\t\t\t\t\t\t`Quota: ${\n\t\t\t\t\t\t\tObject.entries(quota.snapshot(providers))\n\t\t\t\t\t\t\t\t.map(([name, value]) => `${name} ${value}`)\n\t\t\t\t\t\t\t\t.join(\", \") || \"none\"\n\t\t\t\t\t\t}`,\n\t\t\t\t\t\t`Routing model: ${trainer.activeModel().name}${\n\t\t\t\t\t\t\ttrainer.running\n\t\t\t\t\t\t\t\t? `; training ${trainer.progress ? describeProgress(trainer.progress) : \"starting\"}`\n\t\t\t\t\t\t\t\t: \"\"\n\t\t\t\t\t\t}`,\n\t\t\t\t\t\t`Memory: ${settings.memory === false ? \"off\" : `${memory()?.size ?? 0} learned tasks route similar requests and share their lessons`}`,\n\t\t\t\t\t\t`Telemetry: ${settings.telemetry === false ? \"off\" : store.path}`,\n\t\t\t\t\t];\n\t\t\t\t\tif (current) {\n\t\t\t\t\t\tlines.push(\n\t\t\t\t\t\t\t`Last plan: ${current.assessment.task.type} (${current.assessment.source}, confidence ${current.assessment.confidence.toFixed(2)}), recommended ${current.policy.recommendedTier}/${current.assessment.recommendation.effort}, routed ${current.tier} ${current.model} • ${current.thinkingLevel}`,\n\t\t\t\t\t\t\t`Alternatives: ${current.alternatives.join(\", \") || \"none\"}`,\n\t\t\t\t\t\t);\n\t\t\t\t\t\tif (current.escalations.length > 0) {\n\t\t\t\t\t\t\tlines.push(\n\t\t\t\t\t\t\t\t`Escalations: ${current.escalations.map((e) => `${e.reason} ${e.from}→${e.to}`).join(\", \")}`,\n\t\t\t\t\t\t\t);\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\tctx.ui.notify(lines.join(\"\\n\"));\n\t\t\t\t\treturn;\n\t\t\t\t}\n\t\t\t\tdefault:\n\t\t\t\t\tctx.ui.notify(\n\t\t\t\t\t\t\"Usage: /laya [status|setup|start|stop|learn [session file]|train|models|use <model>|policy <profile>|decisions [path]|seed [count] [path]|export [path]]\",\n\t\t\t\t\t\t\"warning\",\n\t\t\t\t\t);\n\t\t\t}\n\t\t},\n\t});\n}\n"]}
@@ -0,0 +1,67 @@
1
+ import { type Static, type TSchema, Type } from "typebox";
2
+ import type { SessionEntry } from "../../core/session-manager.ts";
3
+ import { type CapabilityTier } from "./questions.ts";
4
+ import { type TrainingRow } from "./training.ts";
5
+ /**
6
+ * `/laya learn`: turns the tasks of a session into training exercises. Relay extracts each request
7
+ * with the evidence of how it went (tools, files, commands, failures, checks, the model that ran
8
+ * it, the user's next message); the agent answers Laya's questions for each one from that evidence
9
+ * and saves them with the `laya_learn` tool.
10
+ */
11
+ export declare const LEARN_TOOL_NAME = "laya_learn";
12
+ /** Starts the agent's turn of `/laya learn`. It is harness text, never a task itself. */
13
+ export declare const LEARN_MESSAGE_PREFIX = "[laya:learn]";
14
+ export interface SessionTask {
15
+ /** 1-based number the agent refers to. */
16
+ number: number;
17
+ request: string;
18
+ /** Tool name to number of calls. */
19
+ tools: Record<string, number>;
20
+ files: string[];
21
+ commands: string[];
22
+ toolFailures: number;
23
+ /** First line of the first failed tool results. */
24
+ errors: string[];
25
+ /** Outcome of the last test, type check, build or lint run, or null when none ran. */
26
+ testsPassed: boolean | null;
27
+ outcome: "completed" | "error" | "aborted";
28
+ /** `provider/model • thinking`, with the capability tier when the Laya registry lists the model. */
29
+ models: string[];
30
+ /** The laya/auto plan, when it routed the task. */
31
+ planned?: {
32
+ type: string;
33
+ tier: string;
34
+ effort: string;
35
+ source: string;
36
+ };
37
+ /** The end of the agent's last reply. */
38
+ reply: string;
39
+ /** The user's next request: a correction there means the task was not done right. */
40
+ next?: string;
41
+ }
42
+ /** Requests of a session branch and the evidence of how each one went. */
43
+ export declare function sessionTasks(entries: readonly SessionEntry[], tierOf?: (ref: string) => CapabilityTier | undefined): SessionTask[];
44
+ export declare function renderTask(task: SessionTask): string;
45
+ /** Laya's questions with their answer options, for the agent that labels. */
46
+ export declare function renderQuestions(): string;
47
+ export declare function buildLearnPrompt(tasks: readonly SessionTask[], options?: {
48
+ source?: string;
49
+ }): string;
50
+ export declare const learnToolSchema: Type.TObject<{
51
+ exercises: Type.TArray<Type.TObject<{
52
+ task: Type.TInteger;
53
+ labels: TSchema;
54
+ note: Type.TOptional<Type.TString>;
55
+ lesson: Type.TOptional<Type.TString>;
56
+ }>>;
57
+ train: Type.TOptional<Type.TBoolean>;
58
+ }>;
59
+ export type LearnToolParams = Static<typeof learnToolSchema>;
60
+ /** Checks that every question has a valid answer; the schema already does, this guards raw calls. */
61
+ export declare function labelProblems(labels: Record<string, unknown>): string[];
62
+ /** Training rows for the labeled tasks. Unknown task numbers and invalid labels are errors. */
63
+ export declare function exercisesToRows(tasks: readonly SessionTask[], exercises: LearnToolParams["exercises"], meta: {
64
+ session: string;
65
+ created: string;
66
+ }): Array<Omit<TrainingRow, "id">>;
67
+ //# sourceMappingURL=learn.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"learn.d.ts","sourceRoot":"","sources":["../../../src/extensions/laya/learn.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,KAAK,MAAM,EAAE,KAAK,OAAO,EAAE,IAAI,EAAE,MAAM,SAAS,CAAC;AAC1D,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,+BAA+B,CAAC;AAGlE,OAAO,EAAE,KAAK,cAAc,EAAkB,MAAM,gBAAgB,CAAC;AAGrE,OAAO,EAAkB,KAAK,WAAW,EAAE,MAAM,eAAe,CAAC;AAEjE;;;;;GAKG;AAEH,eAAO,MAAM,eAAe,eAAe,CAAC;AAC5C,yFAAyF;AACzF,eAAO,MAAM,oBAAoB,iBAAiB,CAAC;AAOnD,MAAM,WAAW,WAAW;IAC3B,0CAA0C;IAC1C,MAAM,EAAE,MAAM,CAAC;IACf,OAAO,EAAE,MAAM,CAAC;IAChB,oCAAoC;IACpC,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAC9B,KAAK,EAAE,MAAM,EAAE,CAAC;IAChB,QAAQ,EAAE,MAAM,EAAE,CAAC;IACnB,YAAY,EAAE,MAAM,CAAC;IACrB,mDAAmD;IACnD,MAAM,EAAE,MAAM,EAAE,CAAC;IACjB,sFAAsF;IACtF,WAAW,EAAE,OAAO,GAAG,IAAI,CAAC;IAC5B,OAAO,EAAE,WAAW,GAAG,OAAO,GAAG,SAAS,CAAC;IAC3C,oGAAoG;IACpG,MAAM,EAAE,MAAM,EAAE,CAAC;IACjB,mDAAmD;IACnD,OAAO,CAAC,EAAE;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,MAAM,CAAC;QAAC,MAAM,EAAE,MAAM,CAAC;QAAC,MAAM,EAAE,MAAM,CAAA;KAAE,CAAC;IACzE,yCAAyC;IACzC,KAAK,EAAE,MAAM,CAAC;IACd,qFAAqF;IACrF,IAAI,CAAC,EAAE,MAAM,CAAC;CACd;AAmBD,0EAA0E;AAC1E,wBAAgB,YAAY,CAC3B,OAAO,EAAE,SAAS,YAAY,EAAE,EAChC,MAAM,GAAE,CAAC,GAAG,EAAE,MAAM,KAAK,cAAc,GAAG,SAA2B,GACnE,WAAW,EAAE,CA2Ef;AAED,wBAAgB,UAAU,CAAC,IAAI,EAAE,WAAW,GAAG,MAAM,CAwBpD;AAED,6EAA6E;AAC7E,wBAAgB,eAAe,IAAI,MAAM,CAcxC;AAED,wBAAgB,gBAAgB,CAAC,KAAK,EAAE,SAAS,WAAW,EAAE,EAAE,OAAO,GAAE;IAAE,MAAM,CAAC,EAAE,MAAM,CAAA;CAAO,GAAG,MAAM,CAyBzG;AAuBD,eAAO,MAAM,eAAe;;;;;;;;EAmB1B,CAAC;AAEH,MAAM,MAAM,eAAe,GAAG,MAAM,CAAC,OAAO,eAAe,CAAC,CAAC;AAE7D,qGAAqG;AACrG,wBAAgB,aAAa,CAAC,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,MAAM,EAAE,CAavE;AAED,+FAA+F;AAC/F,wBAAgB,eAAe,CAC9B,KAAK,EAAE,SAAS,WAAW,EAAE,EAC7B,SAAS,EAAE,eAAe,CAAC,WAAW,CAAC,EACvC,IAAI,EAAE;IAAE,OAAO,EAAE,MAAM,CAAC;IAAC,OAAO,EAAE,MAAM,CAAA;CAAE,GACxC,KAAK,CAAC,IAAI,CAAC,WAAW,EAAE,IAAI,CAAC,CAAC,CAkChC"}
@@ -0,0 +1,263 @@
1
+ import { Type } from "typebox";
2
+ import { LAYA_QUESTIONS } from "./questions.js";
3
+ import { LAYA_PLAN_MESSAGE } from "./routers.js";
4
+ import { HARNESS_MESSAGE, summarizeRun, truncateRequest } from "./telemetry.js";
5
+ import { SESSION_SOURCE } from "./training.js";
6
+ /**
7
+ * `/laya learn`: turns the tasks of a session into training exercises. Relay extracts each request
8
+ * with the evidence of how it went (tools, files, commands, failures, checks, the model that ran
9
+ * it, the user's next message); the agent answers Laya's questions for each one from that evidence
10
+ * and saves them with the `laya_learn` tool.
11
+ */
12
+ export const LEARN_TOOL_NAME = "laya_learn";
13
+ /** Starts the agent's turn of `/laya learn`. It is harness text, never a task itself. */
14
+ export const LEARN_MESSAGE_PREFIX = "[laya:learn]";
15
+ /** Newest tasks of a long session that are offered for labeling. */
16
+ const MAX_TASKS = 60;
17
+ const MAX_FILES = 12;
18
+ const MAX_COMMANDS = 8;
19
+ const MAX_ERRORS = 3;
20
+ function userText(message) {
21
+ if (message.role !== "user")
22
+ return undefined;
23
+ const content = message.content;
24
+ if (typeof content === "string")
25
+ return content;
26
+ return content.flatMap((block) => (block.type === "text" ? [block.text] : [])).join("\n");
27
+ }
28
+ const clip = (text, max) => {
29
+ const flat = text.replace(/\s+/g, " ").trim();
30
+ return flat.length > max ? `${flat.slice(0, max)}…` : flat;
31
+ };
32
+ /** Requests of a session branch and the evidence of how each one went. */
33
+ export function sessionTasks(entries, tierOf = () => undefined) {
34
+ const groups = [];
35
+ for (const entry of entries) {
36
+ if (entry.type === "custom_message" && entry.customType === LAYA_PLAN_MESSAGE) {
37
+ const group = groups.at(-1);
38
+ if (group)
39
+ group.plan = entry.details;
40
+ continue;
41
+ }
42
+ if (entry.type !== "message")
43
+ continue;
44
+ const text = userText(entry.message)?.trim();
45
+ if (text?.startsWith(LEARN_MESSAGE_PREFIX)) {
46
+ // The work of an earlier /laya learn belongs to no task.
47
+ groups.push({ request: text, messages: [], skip: true });
48
+ }
49
+ else if (text && !HARNESS_MESSAGE.test(text)) {
50
+ groups.push({ request: text, messages: [] });
51
+ }
52
+ else {
53
+ groups.at(-1)?.messages.push(entry.message);
54
+ }
55
+ }
56
+ const tasks = [];
57
+ groups.forEach((group, index) => {
58
+ if (group.skip)
59
+ return;
60
+ const tools = {};
61
+ const files = new Set();
62
+ const commands = [];
63
+ const models = new Set();
64
+ const errors = [];
65
+ let reply = "";
66
+ for (const message of group.messages) {
67
+ if (message.role === "toolResult" && message.isError && errors.length < MAX_ERRORS) {
68
+ const text = message.content.flatMap((block) => (block.type === "text" ? [block.text] : [])).join("\n");
69
+ const line = text.split("\n").find((candidate) => candidate.trim());
70
+ if (line)
71
+ errors.push(`${message.toolName}: ${clip(line, 160)}`);
72
+ }
73
+ if (message.role !== "assistant")
74
+ continue;
75
+ const ref = `${message.provider}/${message.model}`;
76
+ const tier = tierOf(ref);
77
+ models.add(`${ref}${tier ? ` (${tier} tier)` : ""}${message.thinkingLevel ? ` • ${message.thinkingLevel}` : ""}`);
78
+ for (const block of message.content) {
79
+ if (block.type === "text" && block.text.trim())
80
+ reply = block.text;
81
+ if (block.type !== "toolCall")
82
+ continue;
83
+ tools[block.name] = (tools[block.name] ?? 0) + 1;
84
+ const path = block.arguments.path ?? block.arguments.file_path;
85
+ if (typeof path === "string" && /^(edit|write|multi_edit|notebook_edit)$/.test(block.name))
86
+ files.add(path);
87
+ if (typeof block.arguments.command === "string")
88
+ commands.push(clip(block.arguments.command, 200));
89
+ }
90
+ }
91
+ const summary = summarizeRun(group.messages);
92
+ const assessment = group.plan?.assessment;
93
+ const following = groups.slice(index + 1).find((other) => !other.skip);
94
+ tasks.push({
95
+ number: 0,
96
+ request: truncateRequest(group.request),
97
+ tools,
98
+ files: [...files],
99
+ commands,
100
+ toolFailures: summary.toolFailures,
101
+ errors,
102
+ testsPassed: summary.testsPassed,
103
+ outcome: summary.outcome,
104
+ models: [...models],
105
+ planned: assessment && {
106
+ type: assessment.task.type,
107
+ tier: group.plan?.policy?.requiredTier ?? assessment.recommendation.tier,
108
+ effort: assessment.recommendation.effort,
109
+ source: assessment.source,
110
+ },
111
+ reply: clip(reply, 300),
112
+ next: following && clip(following.request, 200),
113
+ });
114
+ });
115
+ return tasks.slice(-MAX_TASKS).map((task, i) => ({ ...task, number: i + 1 }));
116
+ }
117
+ export function renderTask(task) {
118
+ const lines = [`### Task ${task.number}`, "Request:", "<request>", task.request, "</request>"];
119
+ const checks = task.testsPassed === null ? "no checks ran" : task.testsPassed ? "checks passed" : "checks failed";
120
+ lines.push(`Ran on: ${task.models.join(", ") || "no model answered"}; outcome ${task.outcome}; ${task.toolFailures} failed tool calls; ${checks}`);
121
+ if (task.planned) {
122
+ lines.push(`Laya planned: ${task.planned.type}, ${task.planned.tier} tier, ${task.planned.effort} effort (${task.planned.source})`);
123
+ }
124
+ const tools = Object.entries(task.tools).map(([name, count]) => `${name}×${count}`);
125
+ lines.push(`Tools: ${tools.join(", ") || "none"}`);
126
+ if (task.files.length > 0) {
127
+ const more = task.files.length > MAX_FILES ? ` and ${task.files.length - MAX_FILES} more` : "";
128
+ lines.push(`Files changed (${task.files.length}): ${task.files.slice(0, MAX_FILES).join(", ")}${more}`);
129
+ }
130
+ if (task.commands.length > 0) {
131
+ lines.push(`Commands: ${task.commands.slice(0, MAX_COMMANDS).join(" | ")}`);
132
+ }
133
+ if (task.errors.length > 0)
134
+ lines.push(`Errors: ${task.errors.join(" | ")}`);
135
+ if (task.reply)
136
+ lines.push(`Last reply: ${task.reply}`);
137
+ if (task.next)
138
+ lines.push(`Next user message: ${task.next}`);
139
+ return lines.join("\n");
140
+ }
141
+ /** Laya's questions with their answer options, for the agent that labels. */
142
+ export function renderQuestions() {
143
+ return Object.entries(LAYA_QUESTIONS)
144
+ .map(([id, question]) => {
145
+ if (question.type === "choice") {
146
+ const options = Object.entries(question.criteria).map(([key, text]) => `${key} (${text})`);
147
+ return `- ${id}: ${question.instructions} One of: ${options.join("; ")}.`;
148
+ }
149
+ if (question.type === "score") {
150
+ const levels = question.criteria.map((text, i) => `${i} ${text}`);
151
+ return `- ${id}: ${question.instructions} An integer: ${levels.join("; ")}.`;
152
+ }
153
+ return `- ${id}: ${question.instructions} true or false.`;
154
+ })
155
+ .join("\n");
156
+ }
157
+ export function buildLearnPrompt(tasks, options = {}) {
158
+ return `${LEARN_MESSAGE_PREFIX} Teach Laya, Relay's routing model, the tasks of ${options.source ? `the session ${options.source}` : "this session"}, so it routes similar requests better. Do not change any file and do not redo the tasks.
159
+
160
+ Laya reads a request and answers the questions below. Relay uses the answers to pick the model tier, the reasoning effort, the role, the tools and the validation for the request. For each task listed after the questions, decide the right answers from its evidence: what the task needed, not what was planned or what happened to run.
161
+
162
+ <questions>
163
+ ${renderQuestions()}
164
+ </questions>
165
+
166
+ How to decide:
167
+ - capability_tier and reasoning_effort: the cheapest tier and the lowest effort that would have done the task right. A task that finished cleanly with no failed tool calls may have needed less than the tier that ran it if it was simple. A task that failed, needed many retries, was escalated, or was corrected in the next user message needed at least one tier more than the one that ran it.
168
+ - requires_*: what the task needed, with the tools and commands that ran as evidence. Changed files mean requires_write; test, type check, build or lint commands mean requires_tests; git commands mean requires_git; other commands mean requires_shell. A tool that ran without being needed does not count.
169
+ - scope: from the files changed and the request: one line or value, one file, one module, several modules, the whole repository, several repositories.
170
+ - complexity, risk, ambiguity, reasoning_requirement, validation_level, agent, task_type, security_sensitive: judge the request and what doing it right took.
171
+ - Leave out entries that are not tasks for a coding agent: greetings, thanks, or remarks about the conversation itself.
172
+
173
+ For each task, also write a lesson when the session taught something a model doing a similar task should know: the command that validated the result, where the change belongs, a mistake that cost a retry and how it was fixed, a convention the user asked for. Write it as advice for next time, in one to three sentences, in English, with concrete names (commands, paths, settings). Leave it out when there is nothing beyond the obvious. Never put secrets, tokens or personal data in a lesson.
174
+
175
+ Relay applies what you save at once: a new request similar to a learned task is routed with its labels, and the model that runs it reads its lesson. Training then teaches the routing model the same tasks.
176
+
177
+ <tasks>
178
+ ${tasks.map(renderTask).join("\n\n")}
179
+ </tasks>
180
+
181
+ Then call the \`${LEARN_TOOL_NAME}\` tool once, with one exercise per task you keep. It saves them and starts training. Finally reply, in the language the user writes in, with a short table (task, type, tier, effort, lesson in a few words) and what happens next.`;
182
+ }
183
+ function labelSchema() {
184
+ const properties = {};
185
+ for (const [id, question] of Object.entries(LAYA_QUESTIONS)) {
186
+ if (question.type === "choice") {
187
+ properties[id] = Type.Union(Object.keys(question.criteria).map((key) => Type.Literal(key)), { description: question.instructions });
188
+ }
189
+ else if (question.type === "score") {
190
+ properties[id] = Type.Integer({
191
+ minimum: 0,
192
+ maximum: question.criteria.length - 1,
193
+ description: question.instructions,
194
+ });
195
+ }
196
+ else {
197
+ properties[id] = Type.Boolean({ description: question.instructions });
198
+ }
199
+ }
200
+ return Type.Object(properties, { additionalProperties: false });
201
+ }
202
+ export const learnToolSchema = Type.Object({
203
+ exercises: Type.Array(Type.Object({
204
+ task: Type.Integer({ minimum: 1, description: "Task number from the /laya learn list." }),
205
+ labels: labelSchema(),
206
+ note: Type.Optional(Type.String({ description: "One sentence: the evidence behind the tier and the effort." })),
207
+ lesson: Type.Optional(Type.String({
208
+ maxLength: 600,
209
+ description: "Advice for a model doing a similar task: how to validate, where the change belongs, a mistake to avoid. One to three sentences, no secrets.",
210
+ })),
211
+ }), { minItems: 1, description: "One exercise per task worth learning." }),
212
+ train: Type.Optional(Type.Boolean({ description: "Start training after saving. Default: true." })),
213
+ });
214
+ /** Checks that every question has a valid answer; the schema already does, this guards raw calls. */
215
+ export function labelProblems(labels) {
216
+ const problems = [];
217
+ for (const [id, question] of Object.entries(LAYA_QUESTIONS)) {
218
+ const value = labels[id];
219
+ const valid = question.type === "choice"
220
+ ? typeof value === "string" && value in question.criteria
221
+ : question.type === "score"
222
+ ? Number.isInteger(value) && value >= 0 && value < question.criteria.length
223
+ : typeof value === "boolean";
224
+ if (!valid)
225
+ problems.push(`${id}: ${JSON.stringify(value)} is not a valid answer`);
226
+ }
227
+ return problems;
228
+ }
229
+ /** Training rows for the labeled tasks. Unknown task numbers and invalid labels are errors. */
230
+ export function exercisesToRows(tasks, exercises, meta) {
231
+ const problems = [];
232
+ const rows = [];
233
+ for (const exercise of exercises) {
234
+ const task = tasks.find((candidate) => candidate.number === exercise.task);
235
+ const labels = exercise.labels;
236
+ if (!task) {
237
+ problems.push(`task ${exercise.task}: there is no such task (1 to ${tasks.length})`);
238
+ continue;
239
+ }
240
+ const invalid = labelProblems(labels);
241
+ if (invalid.length > 0) {
242
+ problems.push(...invalid.map((problem) => `task ${exercise.task}: ${problem}`));
243
+ continue;
244
+ }
245
+ rows.push({
246
+ state: { request: task.request },
247
+ expected: Object.fromEntries(Object.keys(LAYA_QUESTIONS).map((id) => [id, labels[id]])),
248
+ source: SESSION_SOURCE,
249
+ // Every session task is studied: the user asked for these tasks to be learned.
250
+ split: "train",
251
+ session: meta.session,
252
+ label_source: "agent",
253
+ ...(exercise.note ? { note: exercise.note } : {}),
254
+ ...(exercise.lesson?.trim() ? { lesson: exercise.lesson.trim() } : {}),
255
+ created: meta.created,
256
+ });
257
+ }
258
+ if (problems.length > 0) {
259
+ throw new Error(`Nothing was saved. Fix these exercises and call ${LEARN_TOOL_NAME} again:\n- ${problems.join("\n- ")}`);
260
+ }
261
+ return rows;
262
+ }
263
+ //# sourceMappingURL=learn.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"learn.js","sourceRoot":"","sources":["../../../src/extensions/laya/learn.ts"],"names":[],"mappings":"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","sourcesContent":["import type { AgentMessage } from \"@relay-harness/agent-core\";\nimport { type Static, type TSchema, Type } from \"typebox\";\nimport type { SessionEntry } from \"../../core/session-manager.ts\";\nimport type { TaskAssessment } from \"./assessment.ts\";\nimport type { PolicyDecision } from \"./policy.ts\";\nimport { type CapabilityTier, LAYA_QUESTIONS } from \"./questions.ts\";\nimport { LAYA_PLAN_MESSAGE } from \"./routers.ts\";\nimport { HARNESS_MESSAGE, summarizeRun, truncateRequest } from \"./telemetry.ts\";\nimport { SESSION_SOURCE, type TrainingRow } from \"./training.ts\";\n\n/**\n * `/laya learn`: turns the tasks of a session into training exercises. Relay extracts each request\n * with the evidence of how it went (tools, files, commands, failures, checks, the model that ran\n * it, the user's next message); the agent answers Laya's questions for each one from that evidence\n * and saves them with the `laya_learn` tool.\n */\n\nexport const LEARN_TOOL_NAME = \"laya_learn\";\n/** Starts the agent's turn of `/laya learn`. It is harness text, never a task itself. */\nexport const LEARN_MESSAGE_PREFIX = \"[laya:learn]\";\n/** Newest tasks of a long session that are offered for labeling. */\nconst MAX_TASKS = 60;\nconst MAX_FILES = 12;\nconst MAX_COMMANDS = 8;\nconst MAX_ERRORS = 3;\n\nexport interface SessionTask {\n\t/** 1-based number the agent refers to. */\n\tnumber: number;\n\trequest: string;\n\t/** Tool name to number of calls. */\n\ttools: Record<string, number>;\n\tfiles: string[];\n\tcommands: string[];\n\ttoolFailures: number;\n\t/** First line of the first failed tool results. */\n\terrors: string[];\n\t/** Outcome of the last test, type check, build or lint run, or null when none ran. */\n\ttestsPassed: boolean | null;\n\toutcome: \"completed\" | \"error\" | \"aborted\";\n\t/** `provider/model • thinking`, with the capability tier when the Laya registry lists the model. */\n\tmodels: string[];\n\t/** The laya/auto plan, when it routed the task. */\n\tplanned?: { type: string; tier: string; effort: string; source: string };\n\t/** The end of the agent's last reply. */\n\treply: string;\n\t/** The user's next request: a correction there means the task was not done right. */\n\tnext?: string;\n}\n\ninterface PlanDetails {\n\tassessment?: TaskAssessment;\n\tpolicy?: PolicyDecision;\n}\n\nfunction userText(message: AgentMessage): string | undefined {\n\tif (message.role !== \"user\") return undefined;\n\tconst content = message.content;\n\tif (typeof content === \"string\") return content;\n\treturn content.flatMap((block) => (block.type === \"text\" ? [block.text] : [])).join(\"\\n\");\n}\n\nconst clip = (text: string, max: number) => {\n\tconst flat = text.replace(/\\s+/g, \" \").trim();\n\treturn flat.length > max ? `${flat.slice(0, max)}…` : flat;\n};\n\n/** Requests of a session branch and the evidence of how each one went. */\nexport function sessionTasks(\n\tentries: readonly SessionEntry[],\n\ttierOf: (ref: string) => CapabilityTier | undefined = () => undefined,\n): SessionTask[] {\n\tconst groups: Array<{ request: string; messages: AgentMessage[]; plan?: PlanDetails; skip?: boolean }> = [];\n\tfor (const entry of entries) {\n\t\tif (entry.type === \"custom_message\" && entry.customType === LAYA_PLAN_MESSAGE) {\n\t\t\tconst group = groups.at(-1);\n\t\t\tif (group) group.plan = entry.details as PlanDetails;\n\t\t\tcontinue;\n\t\t}\n\t\tif (entry.type !== \"message\") continue;\n\t\tconst text = userText(entry.message)?.trim();\n\t\tif (text?.startsWith(LEARN_MESSAGE_PREFIX)) {\n\t\t\t// The work of an earlier /laya learn belongs to no task.\n\t\t\tgroups.push({ request: text, messages: [], skip: true });\n\t\t} else if (text && !HARNESS_MESSAGE.test(text)) {\n\t\t\tgroups.push({ request: text, messages: [] });\n\t\t} else {\n\t\t\tgroups.at(-1)?.messages.push(entry.message);\n\t\t}\n\t}\n\n\tconst tasks: SessionTask[] = [];\n\tgroups.forEach((group, index) => {\n\t\tif (group.skip) return;\n\t\tconst tools: Record<string, number> = {};\n\t\tconst files = new Set<string>();\n\t\tconst commands: string[] = [];\n\t\tconst models = new Set<string>();\n\t\tconst errors: string[] = [];\n\t\tlet reply = \"\";\n\t\tfor (const message of group.messages) {\n\t\t\tif (message.role === \"toolResult\" && message.isError && errors.length < MAX_ERRORS) {\n\t\t\t\tconst text = message.content.flatMap((block) => (block.type === \"text\" ? [block.text] : [])).join(\"\\n\");\n\t\t\t\tconst line = text.split(\"\\n\").find((candidate) => candidate.trim());\n\t\t\t\tif (line) errors.push(`${message.toolName}: ${clip(line, 160)}`);\n\t\t\t}\n\t\t\tif (message.role !== \"assistant\") continue;\n\t\t\tconst ref = `${message.provider}/${message.model}`;\n\t\t\tconst tier = tierOf(ref);\n\t\t\tmodels.add(\n\t\t\t\t`${ref}${tier ? ` (${tier} tier)` : \"\"}${message.thinkingLevel ? ` • ${message.thinkingLevel}` : \"\"}`,\n\t\t\t);\n\t\t\tfor (const block of message.content) {\n\t\t\t\tif (block.type === \"text\" && block.text.trim()) reply = block.text;\n\t\t\t\tif (block.type !== \"toolCall\") continue;\n\t\t\t\ttools[block.name] = (tools[block.name] ?? 0) + 1;\n\t\t\t\tconst path = block.arguments.path ?? block.arguments.file_path;\n\t\t\t\tif (typeof path === \"string\" && /^(edit|write|multi_edit|notebook_edit)$/.test(block.name)) files.add(path);\n\t\t\t\tif (typeof block.arguments.command === \"string\") commands.push(clip(block.arguments.command, 200));\n\t\t\t}\n\t\t}\n\t\tconst summary = summarizeRun(group.messages);\n\t\tconst assessment = group.plan?.assessment;\n\t\tconst following = groups.slice(index + 1).find((other) => !other.skip);\n\t\ttasks.push({\n\t\t\tnumber: 0,\n\t\t\trequest: truncateRequest(group.request),\n\t\t\ttools,\n\t\t\tfiles: [...files],\n\t\t\tcommands,\n\t\t\ttoolFailures: summary.toolFailures,\n\t\t\terrors,\n\t\t\ttestsPassed: summary.testsPassed,\n\t\t\toutcome: summary.outcome,\n\t\t\tmodels: [...models],\n\t\t\tplanned: assessment && {\n\t\t\t\ttype: assessment.task.type,\n\t\t\t\ttier: group.plan?.policy?.requiredTier ?? assessment.recommendation.tier,\n\t\t\t\teffort: assessment.recommendation.effort,\n\t\t\t\tsource: assessment.source,\n\t\t\t},\n\t\t\treply: clip(reply, 300),\n\t\t\tnext: following && clip(following.request, 200),\n\t\t});\n\t});\n\treturn tasks.slice(-MAX_TASKS).map((task, i) => ({ ...task, number: i + 1 }));\n}\n\nexport function renderTask(task: SessionTask): string {\n\tconst lines = [`### Task ${task.number}`, \"Request:\", \"<request>\", task.request, \"</request>\"];\n\tconst checks = task.testsPassed === null ? \"no checks ran\" : task.testsPassed ? \"checks passed\" : \"checks failed\";\n\tlines.push(\n\t\t`Ran on: ${task.models.join(\", \") || \"no model answered\"}; outcome ${task.outcome}; ${task.toolFailures} failed tool calls; ${checks}`,\n\t);\n\tif (task.planned) {\n\t\tlines.push(\n\t\t\t`Laya planned: ${task.planned.type}, ${task.planned.tier} tier, ${task.planned.effort} effort (${task.planned.source})`,\n\t\t);\n\t}\n\tconst tools = Object.entries(task.tools).map(([name, count]) => `${name}×${count}`);\n\tlines.push(`Tools: ${tools.join(\", \") || \"none\"}`);\n\tif (task.files.length > 0) {\n\t\tconst more = task.files.length > MAX_FILES ? ` and ${task.files.length - MAX_FILES} more` : \"\";\n\t\tlines.push(`Files changed (${task.files.length}): ${task.files.slice(0, MAX_FILES).join(\", \")}${more}`);\n\t}\n\tif (task.commands.length > 0) {\n\t\tlines.push(`Commands: ${task.commands.slice(0, MAX_COMMANDS).join(\" | \")}`);\n\t}\n\tif (task.errors.length > 0) lines.push(`Errors: ${task.errors.join(\" | \")}`);\n\tif (task.reply) lines.push(`Last reply: ${task.reply}`);\n\tif (task.next) lines.push(`Next user message: ${task.next}`);\n\treturn lines.join(\"\\n\");\n}\n\n/** Laya's questions with their answer options, for the agent that labels. */\nexport function renderQuestions(): string {\n\treturn Object.entries(LAYA_QUESTIONS)\n\t\t.map(([id, question]) => {\n\t\t\tif (question.type === \"choice\") {\n\t\t\t\tconst options = Object.entries(question.criteria).map(([key, text]) => `${key} (${text})`);\n\t\t\t\treturn `- ${id}: ${question.instructions} One of: ${options.join(\"; \")}.`;\n\t\t\t}\n\t\t\tif (question.type === \"score\") {\n\t\t\t\tconst levels = question.criteria.map((text, i) => `${i} ${text}`);\n\t\t\t\treturn `- ${id}: ${question.instructions} An integer: ${levels.join(\"; \")}.`;\n\t\t\t}\n\t\t\treturn `- ${id}: ${question.instructions} true or false.`;\n\t\t})\n\t\t.join(\"\\n\");\n}\n\nexport function buildLearnPrompt(tasks: readonly SessionTask[], options: { source?: string } = {}): string {\n\treturn `${LEARN_MESSAGE_PREFIX} Teach Laya, Relay's routing model, the tasks of ${options.source ? `the session ${options.source}` : \"this session\"}, so it routes similar requests better. Do not change any file and do not redo the tasks.\n\nLaya reads a request and answers the questions below. Relay uses the answers to pick the model tier, the reasoning effort, the role, the tools and the validation for the request. For each task listed after the questions, decide the right answers from its evidence: what the task needed, not what was planned or what happened to run.\n\n<questions>\n${renderQuestions()}\n</questions>\n\nHow to decide:\n- capability_tier and reasoning_effort: the cheapest tier and the lowest effort that would have done the task right. A task that finished cleanly with no failed tool calls may have needed less than the tier that ran it if it was simple. A task that failed, needed many retries, was escalated, or was corrected in the next user message needed at least one tier more than the one that ran it.\n- requires_*: what the task needed, with the tools and commands that ran as evidence. Changed files mean requires_write; test, type check, build or lint commands mean requires_tests; git commands mean requires_git; other commands mean requires_shell. A tool that ran without being needed does not count.\n- scope: from the files changed and the request: one line or value, one file, one module, several modules, the whole repository, several repositories.\n- complexity, risk, ambiguity, reasoning_requirement, validation_level, agent, task_type, security_sensitive: judge the request and what doing it right took.\n- Leave out entries that are not tasks for a coding agent: greetings, thanks, or remarks about the conversation itself.\n\nFor each task, also write a lesson when the session taught something a model doing a similar task should know: the command that validated the result, where the change belongs, a mistake that cost a retry and how it was fixed, a convention the user asked for. Write it as advice for next time, in one to three sentences, in English, with concrete names (commands, paths, settings). Leave it out when there is nothing beyond the obvious. Never put secrets, tokens or personal data in a lesson.\n\nRelay applies what you save at once: a new request similar to a learned task is routed with its labels, and the model that runs it reads its lesson. Training then teaches the routing model the same tasks.\n\n<tasks>\n${tasks.map(renderTask).join(\"\\n\\n\")}\n</tasks>\n\nThen call the \\`${LEARN_TOOL_NAME}\\` tool once, with one exercise per task you keep. It saves them and starts training. Finally reply, in the language the user writes in, with a short table (task, type, tier, effort, lesson in a few words) and what happens next.`;\n}\n\nfunction labelSchema(): TSchema {\n\tconst properties: Record<string, TSchema> = {};\n\tfor (const [id, question] of Object.entries(LAYA_QUESTIONS)) {\n\t\tif (question.type === \"choice\") {\n\t\t\tproperties[id] = Type.Union(\n\t\t\t\tObject.keys(question.criteria).map((key) => Type.Literal(key)),\n\t\t\t\t{ description: question.instructions },\n\t\t\t);\n\t\t} else if (question.type === \"score\") {\n\t\t\tproperties[id] = Type.Integer({\n\t\t\t\tminimum: 0,\n\t\t\t\tmaximum: question.criteria.length - 1,\n\t\t\t\tdescription: question.instructions,\n\t\t\t});\n\t\t} else {\n\t\t\tproperties[id] = Type.Boolean({ description: question.instructions });\n\t\t}\n\t}\n\treturn Type.Object(properties, { additionalProperties: false });\n}\n\nexport const learnToolSchema = Type.Object({\n\texercises: Type.Array(\n\t\tType.Object({\n\t\t\ttask: Type.Integer({ minimum: 1, description: \"Task number from the /laya learn list.\" }),\n\t\t\tlabels: labelSchema(),\n\t\t\tnote: Type.Optional(\n\t\t\t\tType.String({ description: \"One sentence: the evidence behind the tier and the effort.\" }),\n\t\t\t),\n\t\t\tlesson: Type.Optional(\n\t\t\t\tType.String({\n\t\t\t\t\tmaxLength: 600,\n\t\t\t\t\tdescription:\n\t\t\t\t\t\t\"Advice for a model doing a similar task: how to validate, where the change belongs, a mistake to avoid. One to three sentences, no secrets.\",\n\t\t\t\t}),\n\t\t\t),\n\t\t}),\n\t\t{ minItems: 1, description: \"One exercise per task worth learning.\" },\n\t),\n\ttrain: Type.Optional(Type.Boolean({ description: \"Start training after saving. Default: true.\" })),\n});\n\nexport type LearnToolParams = Static<typeof learnToolSchema>;\n\n/** Checks that every question has a valid answer; the schema already does, this guards raw calls. */\nexport function labelProblems(labels: Record<string, unknown>): string[] {\n\tconst problems: string[] = [];\n\tfor (const [id, question] of Object.entries(LAYA_QUESTIONS)) {\n\t\tconst value = labels[id];\n\t\tconst valid =\n\t\t\tquestion.type === \"choice\"\n\t\t\t\t? typeof value === \"string\" && value in question.criteria\n\t\t\t\t: question.type === \"score\"\n\t\t\t\t\t? Number.isInteger(value) && (value as number) >= 0 && (value as number) < question.criteria.length\n\t\t\t\t\t: typeof value === \"boolean\";\n\t\tif (!valid) problems.push(`${id}: ${JSON.stringify(value)} is not a valid answer`);\n\t}\n\treturn problems;\n}\n\n/** Training rows for the labeled tasks. Unknown task numbers and invalid labels are errors. */\nexport function exercisesToRows(\n\ttasks: readonly SessionTask[],\n\texercises: LearnToolParams[\"exercises\"],\n\tmeta: { session: string; created: string },\n): Array<Omit<TrainingRow, \"id\">> {\n\tconst problems: string[] = [];\n\tconst rows: Array<Omit<TrainingRow, \"id\">> = [];\n\tfor (const exercise of exercises) {\n\t\tconst task = tasks.find((candidate) => candidate.number === exercise.task);\n\t\tconst labels = exercise.labels as Record<string, string | number | boolean>;\n\t\tif (!task) {\n\t\t\tproblems.push(`task ${exercise.task}: there is no such task (1 to ${tasks.length})`);\n\t\t\tcontinue;\n\t\t}\n\t\tconst invalid = labelProblems(labels);\n\t\tif (invalid.length > 0) {\n\t\t\tproblems.push(...invalid.map((problem) => `task ${exercise.task}: ${problem}`));\n\t\t\tcontinue;\n\t\t}\n\t\trows.push({\n\t\t\tstate: { request: task.request },\n\t\t\texpected: Object.fromEntries(Object.keys(LAYA_QUESTIONS).map((id) => [id, labels[id]])),\n\t\t\tsource: SESSION_SOURCE,\n\t\t\t// Every session task is studied: the user asked for these tasks to be learned.\n\t\t\tsplit: \"train\",\n\t\t\tsession: meta.session,\n\t\t\tlabel_source: \"agent\",\n\t\t\t...(exercise.note ? { note: exercise.note } : {}),\n\t\t\t...(exercise.lesson?.trim() ? { lesson: exercise.lesson.trim() } : {}),\n\t\t\tcreated: meta.created,\n\t\t});\n\t}\n\tif (problems.length > 0) {\n\t\tthrow new Error(\n\t\t\t`Nothing was saved. Fix these exercises and call ${LEARN_TOOL_NAME} again:\\n- ${problems.join(\"\\n- \")}`,\n\t\t);\n\t}\n\treturn rows;\n}\n"]}
@@ -0,0 +1,48 @@
1
+ import { type TrainingRow } from "./training.ts";
2
+ /**
3
+ * Memory of the tasks taught with `/laya learn`. Training takes minutes on a GPU and needs the Laya
4
+ * environment; the memory works from the next request. A request close to a learned task is routed
5
+ * with that task's labels, and the model that runs it gets the lessons of similar tasks.
6
+ *
7
+ * Similarity is the cosine of TF-IDF word vectors. Word weights come from every exercise of the
8
+ * workspace, so words common to all coding requests ("fix", "add", "file") count little and the
9
+ * specific ones ("pager", "off-by-one", "token expiry") decide.
10
+ */
11
+ /** A learned task close enough for its labels to route a new request. */
12
+ export declare const ROUTE_SIMILARITY = 0.6;
13
+ /** A learned task close enough for its lesson to be worth reading. */
14
+ export declare const LESSON_SIMILARITY = 0.45;
15
+ export interface LearnedTask {
16
+ id: string;
17
+ request: string;
18
+ expected: TrainingRow["expected"];
19
+ lesson?: string;
20
+ }
21
+ export interface MemoryMatch {
22
+ task: LearnedTask;
23
+ similarity: number;
24
+ }
25
+ /** Words of a request: identifiers split at case changes, accents removed, stopwords dropped. */
26
+ export declare function words(text: string): string[];
27
+ export declare class TaskMemory {
28
+ readonly tasks: readonly LearnedTask[];
29
+ private readonly idf;
30
+ private readonly defaultIdf;
31
+ private readonly vectors;
32
+ /** `corpus` is every request the word weights are counted over; it includes the tasks. */
33
+ constructor(tasks: readonly LearnedTask[], corpus: readonly string[]);
34
+ /** Session tasks of a training dataset, weighted over all of its exercises. */
35
+ static fromRows(rows: readonly TrainingRow[]): TaskMemory;
36
+ get size(): number;
37
+ private vector;
38
+ /** Learned tasks at least `minSimilarity` close to the request, closest first. */
39
+ search(request: string, minSimilarity: number, limit?: number): MemoryMatch[];
40
+ }
41
+ /** Custom message with the lessons, sent next to the request when laya/auto does not route it. */
42
+ export declare const LAYA_LESSONS_MESSAGE = "laya.lessons";
43
+ /**
44
+ * Lessons of similar tasks for the model that runs the request, or undefined when none has one.
45
+ * The plan message includes the text as one item; other models get it with the `[laya:lessons]` prefix.
46
+ */
47
+ export declare function renderLessons(matches: readonly MemoryMatch[]): string | undefined;
48
+ //# sourceMappingURL=memory.d.ts.map