@aexol/spectral 0.8.0 → 0.8.5

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 (561) hide show
  1. package/CHANGELOG.md +82 -55
  2. package/README.md +80 -82
  3. package/dist/agent/agents.d.ts +37 -0
  4. package/dist/agent/agents.d.ts.map +1 -0
  5. package/dist/agent/index.d.ts +29 -0
  6. package/dist/agent/index.d.ts.map +1 -0
  7. package/dist/cli.d.ts +17 -0
  8. package/dist/cli.d.ts.map +1 -0
  9. package/dist/commands/bind.d.ts +12 -0
  10. package/dist/commands/bind.d.ts.map +1 -0
  11. package/dist/commands/login-oauth.d.ts +15 -0
  12. package/dist/commands/login-oauth.d.ts.map +1 -0
  13. package/dist/commands/login.d.ts +37 -0
  14. package/dist/commands/login.d.ts.map +1 -0
  15. package/dist/commands/logout.d.ts +8 -0
  16. package/dist/commands/logout.d.ts.map +1 -0
  17. package/dist/commands/serve.d.ts +112 -0
  18. package/dist/commands/serve.d.ts.map +1 -0
  19. package/dist/commands/unbind.d.ts +8 -0
  20. package/dist/commands/unbind.d.ts.map +1 -0
  21. package/dist/config.d.ts +49 -0
  22. package/dist/config.d.ts.map +1 -0
  23. package/dist/designer/guidelines.d.ts +23 -0
  24. package/dist/designer/guidelines.d.ts.map +1 -0
  25. package/dist/designer/index.d.ts +26 -0
  26. package/dist/designer/index.d.ts.map +1 -0
  27. package/dist/designer/philosophies.d.ts +33 -0
  28. package/dist/designer/philosophies.d.ts.map +1 -0
  29. package/dist/designer/skills.d.ts +27 -0
  30. package/dist/designer/skills.d.ts.map +1 -0
  31. package/dist/designer/systems.d.ts +36 -0
  32. package/dist/designer/systems.d.ts.map +1 -0
  33. package/dist/extensions/aexol-mcp.d.ts +25 -0
  34. package/dist/extensions/aexol-mcp.d.ts.map +1 -0
  35. package/dist/extensions/kanban-bridge.d.ts +24 -0
  36. package/dist/extensions/kanban-bridge.d.ts.map +1 -0
  37. package/dist/extensions/kanban-bridge.js +668 -0
  38. package/dist/extensions/openrouter-attribution.d.ts +12 -0
  39. package/dist/extensions/openrouter-attribution.d.ts.map +1 -0
  40. package/dist/extensions/spectral-vision-fallback.d.ts +23 -0
  41. package/dist/extensions/spectral-vision-fallback.d.ts.map +1 -0
  42. package/dist/extensions/spectral-vision-fallback.js +32 -22
  43. package/dist/index.d.ts +46 -0
  44. package/dist/index.d.ts.map +1 -0
  45. package/dist/index.js +44 -0
  46. package/dist/mcp/agent-dir.d.ts +3 -0
  47. package/dist/mcp/agent-dir.d.ts.map +1 -0
  48. package/dist/mcp/commands.d.ts +9 -0
  49. package/dist/mcp/commands.d.ts.map +1 -0
  50. package/dist/mcp/config.d.ts +78 -0
  51. package/dist/mcp/config.d.ts.map +1 -0
  52. package/dist/mcp/consent-manager.d.ts +14 -0
  53. package/dist/mcp/consent-manager.d.ts.map +1 -0
  54. package/dist/mcp/direct-tools.d.ts +11 -0
  55. package/dist/mcp/direct-tools.d.ts.map +1 -0
  56. package/dist/mcp/errors.d.ts +100 -0
  57. package/dist/mcp/errors.d.ts.map +1 -0
  58. package/dist/mcp/glimpse-ui.d.ts +10 -0
  59. package/dist/mcp/glimpse-ui.d.ts.map +1 -0
  60. package/dist/mcp/host-html-template.d.ts +17 -0
  61. package/dist/mcp/host-html-template.d.ts.map +1 -0
  62. package/dist/mcp/index.d.ts +3 -0
  63. package/dist/mcp/index.d.ts.map +1 -0
  64. package/dist/mcp/init.d.ts +10 -0
  65. package/dist/mcp/init.d.ts.map +1 -0
  66. package/dist/mcp/init.js +1 -9
  67. package/dist/mcp/lifecycle.d.ts +30 -0
  68. package/dist/mcp/lifecycle.d.ts.map +1 -0
  69. package/dist/mcp/logger.d.ts +52 -0
  70. package/dist/mcp/logger.d.ts.map +1 -0
  71. package/dist/mcp/mcp-auth-flow.d.ts +69 -0
  72. package/dist/mcp/mcp-auth-flow.d.ts.map +1 -0
  73. package/dist/mcp/mcp-auth.d.ts +100 -0
  74. package/dist/mcp/mcp-auth.d.ts.map +1 -0
  75. package/dist/mcp/mcp-callback-server.d.ts +40 -0
  76. package/dist/mcp/mcp-callback-server.d.ts.map +1 -0
  77. package/dist/mcp/mcp-oauth-provider.d.ts +101 -0
  78. package/dist/mcp/mcp-oauth-provider.d.ts.map +1 -0
  79. package/dist/mcp/metadata-cache.d.ts +32 -0
  80. package/dist/mcp/metadata-cache.d.ts.map +1 -0
  81. package/dist/mcp/npx-resolver.d.ts +7 -0
  82. package/dist/mcp/npx-resolver.d.ts.map +1 -0
  83. package/dist/mcp/oauth-handler.d.ts +19 -0
  84. package/dist/mcp/oauth-handler.d.ts.map +1 -0
  85. package/dist/mcp/onboarding-state.d.ts +13 -0
  86. package/dist/mcp/onboarding-state.d.ts.map +1 -0
  87. package/dist/mcp/proxy-modes.d.ts +12 -0
  88. package/dist/mcp/proxy-modes.d.ts.map +1 -0
  89. package/dist/mcp/resource-tools.d.ts +2 -0
  90. package/dist/mcp/resource-tools.d.ts.map +1 -0
  91. package/dist/mcp/sampling-handler.d.ts +16 -0
  92. package/dist/mcp/sampling-handler.d.ts.map +1 -0
  93. package/dist/mcp/server-manager.d.ts +42 -0
  94. package/dist/mcp/server-manager.d.ts.map +1 -0
  95. package/dist/mcp/state.d.ts +41 -0
  96. package/dist/mcp/state.d.ts.map +1 -0
  97. package/dist/mcp/tool-metadata.d.ts +11 -0
  98. package/dist/mcp/tool-metadata.d.ts.map +1 -0
  99. package/dist/mcp/tool-registrar.d.ts +9 -0
  100. package/dist/mcp/tool-registrar.d.ts.map +1 -0
  101. package/dist/mcp/types.d.ts +263 -0
  102. package/dist/mcp/types.d.ts.map +1 -0
  103. package/dist/mcp/ui-resource-handler.d.ts +10 -0
  104. package/dist/mcp/ui-resource-handler.d.ts.map +1 -0
  105. package/dist/mcp/ui-server.d.ts +37 -0
  106. package/dist/mcp/ui-server.d.ts.map +1 -0
  107. package/dist/mcp/ui-session.d.ts +27 -0
  108. package/dist/mcp/ui-session.d.ts.map +1 -0
  109. package/dist/mcp/ui-stream-types.d.ts +197 -0
  110. package/dist/mcp/ui-stream-types.d.ts.map +1 -0
  111. package/dist/mcp/utils.d.ts +17 -0
  112. package/dist/mcp/utils.d.ts.map +1 -0
  113. package/dist/mcp/vitest.config.d.ts +3 -0
  114. package/dist/mcp/vitest.config.d.ts.map +1 -0
  115. package/dist/mcp-client.d.ts +58 -0
  116. package/dist/mcp-client.d.ts.map +1 -0
  117. package/dist/mcp-client.js +2 -1
  118. package/dist/memory/branch.d.ts +124 -0
  119. package/dist/memory/branch.d.ts.map +1 -0
  120. package/dist/memory/commands/status.d.ts +4 -0
  121. package/dist/memory/commands/status.d.ts.map +1 -0
  122. package/dist/memory/commands/view.d.ts +4 -0
  123. package/dist/memory/commands/view.d.ts.map +1 -0
  124. package/dist/memory/compaction.d.ts +113 -0
  125. package/dist/memory/compaction.d.ts.map +1 -0
  126. package/dist/memory/config.d.ts +27 -0
  127. package/dist/memory/config.d.ts.map +1 -0
  128. package/dist/memory/debug-log.d.ts +12 -0
  129. package/dist/memory/debug-log.d.ts.map +1 -0
  130. package/dist/memory/hooks/compaction-hook.d.ts +4 -0
  131. package/dist/memory/hooks/compaction-hook.d.ts.map +1 -0
  132. package/dist/memory/hooks/compaction-trigger.d.ts +4 -0
  133. package/dist/memory/hooks/compaction-trigger.d.ts.map +1 -0
  134. package/dist/memory/hooks/observer-trigger.d.ts +4 -0
  135. package/dist/memory/hooks/observer-trigger.d.ts.map +1 -0
  136. package/dist/memory/ids.d.ts +2 -0
  137. package/dist/memory/ids.d.ts.map +1 -0
  138. package/dist/memory/index.d.ts +3 -0
  139. package/dist/memory/index.d.ts.map +1 -0
  140. package/dist/memory/index.js +2 -0
  141. package/dist/memory/model-budget.d.ts +4 -0
  142. package/dist/memory/model-budget.d.ts.map +1 -0
  143. package/dist/memory/observer.d.ts +21 -0
  144. package/dist/memory/observer.d.ts.map +1 -0
  145. package/dist/memory/project-observations-store.d.ts +24 -0
  146. package/dist/memory/project-observations-store.d.ts.map +1 -0
  147. package/dist/memory/prompts.d.ts +11 -0
  148. package/dist/memory/prompts.d.ts.map +1 -0
  149. package/dist/memory/relevance.d.ts +4 -0
  150. package/dist/memory/relevance.d.ts.map +1 -0
  151. package/dist/memory/runtime.d.ts +40 -0
  152. package/dist/memory/runtime.d.ts.map +1 -0
  153. package/dist/memory/serialize.d.ts +26 -0
  154. package/dist/memory/serialize.d.ts.map +1 -0
  155. package/dist/memory/tokens.d.ts +8 -0
  156. package/dist/memory/tokens.d.ts.map +1 -0
  157. package/dist/memory/tools/read-project-observations.d.ts +8 -0
  158. package/dist/memory/tools/read-project-observations.d.ts.map +1 -0
  159. package/dist/memory/tools/recall-observation.d.ts +63 -0
  160. package/dist/memory/tools/recall-observation.d.ts.map +1 -0
  161. package/dist/memory/tools/write-project-observation.d.ts +9 -0
  162. package/dist/memory/tools/write-project-observation.d.ts.map +1 -0
  163. package/dist/memory/tools/write-project-observation.js +60 -0
  164. package/dist/memory/types.d.ts +65 -0
  165. package/dist/memory/types.d.ts.map +1 -0
  166. package/dist/preflight.d.ts +27 -0
  167. package/dist/preflight.d.ts.map +1 -0
  168. package/dist/preflight.js +3 -1
  169. package/dist/relay/auto-research.d.ts +64 -0
  170. package/dist/relay/auto-research.d.ts.map +1 -0
  171. package/dist/relay/auto-research.js +208 -69
  172. package/dist/relay/client.d.ts +126 -0
  173. package/dist/relay/client.d.ts.map +1 -0
  174. package/dist/relay/dispatcher.d.ts +207 -0
  175. package/dist/relay/dispatcher.d.ts.map +1 -0
  176. package/dist/relay/machine-store.d.ts +68 -0
  177. package/dist/relay/machine-store.d.ts.map +1 -0
  178. package/dist/relay/models-fetch.d.ts +75 -0
  179. package/dist/relay/models-fetch.d.ts.map +1 -0
  180. package/dist/relay/registration.d.ts +81 -0
  181. package/dist/relay/registration.d.ts.map +1 -0
  182. package/dist/sdk/agent-core/agent-loop.d.ts +24 -0
  183. package/dist/sdk/agent-core/agent-loop.d.ts.map +1 -0
  184. package/dist/sdk/agent-core/agent.d.ts +125 -0
  185. package/dist/sdk/agent-core/agent.d.ts.map +1 -0
  186. package/dist/sdk/agent-core/harness/agent-harness.d.ts +92 -0
  187. package/dist/sdk/agent-core/harness/agent-harness.d.ts.map +1 -0
  188. package/dist/sdk/agent-core/harness/compaction/branch-summarization.d.ts +53 -0
  189. package/dist/sdk/agent-core/harness/compaction/branch-summarization.d.ts.map +1 -0
  190. package/dist/sdk/agent-core/harness/compaction/compaction.d.ts +95 -0
  191. package/dist/sdk/agent-core/harness/compaction/compaction.d.ts.map +1 -0
  192. package/dist/sdk/agent-core/harness/compaction/utils.d.ts +25 -0
  193. package/dist/sdk/agent-core/harness/compaction/utils.d.ts.map +1 -0
  194. package/dist/sdk/agent-core/harness/env/nodejs.d.ts +51 -0
  195. package/dist/sdk/agent-core/harness/env/nodejs.d.ts.map +1 -0
  196. package/dist/sdk/agent-core/harness/messages.d.ts +51 -0
  197. package/dist/sdk/agent-core/harness/messages.d.ts.map +1 -0
  198. package/dist/sdk/agent-core/harness/prompt-templates.d.ts +48 -0
  199. package/dist/sdk/agent-core/harness/prompt-templates.d.ts.map +1 -0
  200. package/dist/sdk/agent-core/harness/session/jsonl-repo.d.ts +26 -0
  201. package/dist/sdk/agent-core/harness/session/jsonl-repo.d.ts.map +1 -0
  202. package/dist/sdk/agent-core/harness/session/jsonl-storage.d.ts +33 -0
  203. package/dist/sdk/agent-core/harness/session/jsonl-storage.d.ts.map +1 -0
  204. package/dist/sdk/agent-core/harness/session/memory-repo.d.ts +18 -0
  205. package/dist/sdk/agent-core/harness/session/memory-repo.d.ts.map +1 -0
  206. package/dist/sdk/agent-core/harness/session/memory-storage.d.ts +25 -0
  207. package/dist/sdk/agent-core/harness/session/memory-storage.d.ts.map +1 -0
  208. package/dist/sdk/agent-core/harness/session/repo-utils.d.ts +11 -0
  209. package/dist/sdk/agent-core/harness/session/repo-utils.d.ts.map +1 -0
  210. package/dist/sdk/agent-core/harness/session/session.d.ts +32 -0
  211. package/dist/sdk/agent-core/harness/session/session.d.ts.map +1 -0
  212. package/dist/sdk/agent-core/harness/session/uuid.d.ts +2 -0
  213. package/dist/sdk/agent-core/harness/session/uuid.d.ts.map +1 -0
  214. package/dist/sdk/agent-core/harness/skills.d.ts +44 -0
  215. package/dist/sdk/agent-core/harness/skills.d.ts.map +1 -0
  216. package/dist/sdk/agent-core/harness/system-prompt.d.ts +3 -0
  217. package/dist/sdk/agent-core/harness/system-prompt.d.ts.map +1 -0
  218. package/dist/sdk/agent-core/harness/types.d.ts +601 -0
  219. package/dist/sdk/agent-core/harness/types.d.ts.map +1 -0
  220. package/dist/sdk/agent-core/harness/utils/shell-output.d.ts +14 -0
  221. package/dist/sdk/agent-core/harness/utils/shell-output.d.ts.map +1 -0
  222. package/dist/sdk/agent-core/harness/utils/truncate.d.ts +70 -0
  223. package/dist/sdk/agent-core/harness/utils/truncate.d.ts.map +1 -0
  224. package/dist/sdk/agent-core/index.d.ts +20 -0
  225. package/dist/sdk/agent-core/index.d.ts.map +1 -0
  226. package/dist/sdk/agent-core/node.d.ts +3 -0
  227. package/dist/sdk/agent-core/node.d.ts.map +1 -0
  228. package/dist/sdk/agent-core/proxy.d.ts +69 -0
  229. package/dist/sdk/agent-core/proxy.d.ts.map +1 -0
  230. package/dist/sdk/agent-core/types.d.ts +393 -0
  231. package/dist/sdk/agent-core/types.d.ts.map +1 -0
  232. package/dist/sdk/ai/api-registry.d.ts +20 -0
  233. package/dist/sdk/ai/api-registry.d.ts.map +1 -0
  234. package/dist/sdk/ai/cli.d.ts +3 -0
  235. package/dist/sdk/ai/cli.d.ts.map +1 -0
  236. package/dist/sdk/ai/env-api-keys.d.ts +18 -0
  237. package/dist/sdk/ai/env-api-keys.d.ts.map +1 -0
  238. package/dist/sdk/ai/env-api-keys.js +9 -49
  239. package/dist/sdk/ai/image-models.d.ts +10 -0
  240. package/dist/sdk/ai/image-models.d.ts.map +1 -0
  241. package/dist/sdk/ai/image-models.generated.d.ts +440 -0
  242. package/dist/sdk/ai/image-models.generated.d.ts.map +1 -0
  243. package/dist/sdk/ai/images-api-registry.d.ts +14 -0
  244. package/dist/sdk/ai/images-api-registry.d.ts.map +1 -0
  245. package/dist/sdk/ai/images.d.ts +4 -0
  246. package/dist/sdk/ai/images.d.ts.map +1 -0
  247. package/dist/sdk/ai/index.d.ts +21 -0
  248. package/dist/sdk/ai/index.d.ts.map +1 -0
  249. package/dist/sdk/ai/models.d.ts +18 -0
  250. package/dist/sdk/ai/models.d.ts.map +1 -0
  251. package/dist/sdk/ai/models.generated.d.ts +17349 -0
  252. package/dist/sdk/ai/models.generated.d.ts.map +1 -0
  253. package/dist/sdk/ai/oauth.d.ts +2 -0
  254. package/dist/sdk/ai/oauth.d.ts.map +1 -0
  255. package/dist/sdk/ai/providers/anthropic.d.ts +54 -0
  256. package/dist/sdk/ai/providers/anthropic.d.ts.map +1 -0
  257. package/dist/sdk/ai/providers/faux.d.ts +56 -0
  258. package/dist/sdk/ai/providers/faux.d.ts.map +1 -0
  259. package/dist/sdk/ai/providers/github-copilot-headers.d.ts +8 -0
  260. package/dist/sdk/ai/providers/github-copilot-headers.d.ts.map +1 -0
  261. package/dist/sdk/ai/providers/openai-completions.d.ts +19 -0
  262. package/dist/sdk/ai/providers/openai-completions.d.ts.map +1 -0
  263. package/dist/sdk/ai/providers/openai-prompt-cache.d.ts +3 -0
  264. package/dist/sdk/ai/providers/openai-prompt-cache.d.ts.map +1 -0
  265. package/dist/sdk/ai/providers/register-builtins.d.ts +15 -0
  266. package/dist/sdk/ai/providers/register-builtins.d.ts.map +1 -0
  267. package/dist/sdk/ai/providers/simple-options.d.ts +8 -0
  268. package/dist/sdk/ai/providers/simple-options.d.ts.map +1 -0
  269. package/dist/sdk/ai/providers/transform-messages.d.ts +8 -0
  270. package/dist/sdk/ai/providers/transform-messages.d.ts.map +1 -0
  271. package/dist/sdk/ai/session-resources.d.ts +4 -0
  272. package/dist/sdk/ai/session-resources.d.ts.map +1 -0
  273. package/dist/sdk/ai/stream.d.ts +8 -0
  274. package/dist/sdk/ai/stream.d.ts.map +1 -0
  275. package/dist/sdk/ai/types.d.ts +488 -0
  276. package/dist/sdk/ai/types.d.ts.map +1 -0
  277. package/dist/sdk/ai/utils/diagnostics.d.ts +19 -0
  278. package/dist/sdk/ai/utils/diagnostics.d.ts.map +1 -0
  279. package/dist/sdk/ai/utils/event-stream.d.ts +21 -0
  280. package/dist/sdk/ai/utils/event-stream.d.ts.map +1 -0
  281. package/dist/sdk/ai/utils/hash.d.ts +3 -0
  282. package/dist/sdk/ai/utils/hash.d.ts.map +1 -0
  283. package/dist/sdk/ai/utils/headers.d.ts +2 -0
  284. package/dist/sdk/ai/utils/headers.d.ts.map +1 -0
  285. package/dist/sdk/ai/utils/json-parse.d.ts +16 -0
  286. package/dist/sdk/ai/utils/json-parse.d.ts.map +1 -0
  287. package/dist/sdk/ai/utils/node-http-proxy.d.ts +10 -0
  288. package/dist/sdk/ai/utils/node-http-proxy.d.ts.map +1 -0
  289. package/dist/sdk/ai/utils/oauth/anthropic.d.ts +25 -0
  290. package/dist/sdk/ai/utils/oauth/anthropic.d.ts.map +1 -0
  291. package/dist/sdk/ai/utils/oauth/anthropic.js +1 -1
  292. package/dist/sdk/ai/utils/oauth/device-code.d.ts +19 -0
  293. package/dist/sdk/ai/utils/oauth/device-code.d.ts.map +1 -0
  294. package/dist/sdk/ai/utils/oauth/github-copilot.d.ts +30 -0
  295. package/dist/sdk/ai/utils/oauth/github-copilot.d.ts.map +1 -0
  296. package/dist/sdk/ai/utils/oauth/index.d.ts +58 -0
  297. package/dist/sdk/ai/utils/oauth/index.d.ts.map +1 -0
  298. package/dist/sdk/ai/utils/oauth/oauth-page.d.ts +3 -0
  299. package/dist/sdk/ai/utils/oauth/oauth-page.d.ts.map +1 -0
  300. package/dist/sdk/ai/utils/oauth/openai-codex.d.ts +34 -0
  301. package/dist/sdk/ai/utils/oauth/openai-codex.d.ts.map +1 -0
  302. package/dist/sdk/ai/utils/oauth/openai-codex.js +1 -1
  303. package/dist/sdk/ai/utils/oauth/pkce.d.ts +13 -0
  304. package/dist/sdk/ai/utils/oauth/pkce.d.ts.map +1 -0
  305. package/dist/sdk/ai/utils/oauth/types.d.ts +64 -0
  306. package/dist/sdk/ai/utils/oauth/types.d.ts.map +1 -0
  307. package/dist/sdk/ai/utils/overflow.d.ts +56 -0
  308. package/dist/sdk/ai/utils/overflow.d.ts.map +1 -0
  309. package/dist/sdk/ai/utils/sanitize-unicode.d.ts +22 -0
  310. package/dist/sdk/ai/utils/sanitize-unicode.d.ts.map +1 -0
  311. package/dist/sdk/ai/utils/typebox-helpers.d.ts +17 -0
  312. package/dist/sdk/ai/utils/typebox-helpers.d.ts.map +1 -0
  313. package/dist/sdk/ai/utils/validation.d.ts +18 -0
  314. package/dist/sdk/ai/utils/validation.d.ts.map +1 -0
  315. package/dist/sdk/coding-agent/cli.d.ts +3 -0
  316. package/dist/sdk/coding-agent/cli.d.ts.map +1 -0
  317. package/dist/sdk/coding-agent/config.d.ts +71 -0
  318. package/dist/sdk/coding-agent/config.d.ts.map +1 -0
  319. package/dist/sdk/coding-agent/config.js +2 -69
  320. package/dist/sdk/coding-agent/core/agent-session-runtime.d.ts +117 -0
  321. package/dist/sdk/coding-agent/core/agent-session-runtime.d.ts.map +1 -0
  322. package/dist/sdk/coding-agent/core/agent-session-services.d.ts +86 -0
  323. package/dist/sdk/coding-agent/core/agent-session-services.d.ts.map +1 -0
  324. package/dist/sdk/coding-agent/core/agent-session.d.ts +626 -0
  325. package/dist/sdk/coding-agent/core/agent-session.d.ts.map +1 -0
  326. package/dist/sdk/coding-agent/core/auth-guidance.d.ts +5 -0
  327. package/dist/sdk/coding-agent/core/auth-guidance.d.ts.map +1 -0
  328. package/dist/sdk/coding-agent/core/auth-storage.d.ts +145 -0
  329. package/dist/sdk/coding-agent/core/auth-storage.d.ts.map +1 -0
  330. package/dist/sdk/coding-agent/core/bash-executor.d.ts +32 -0
  331. package/dist/sdk/coding-agent/core/bash-executor.d.ts.map +1 -0
  332. package/dist/sdk/coding-agent/core/compaction/branch-summarization.d.ts +88 -0
  333. package/dist/sdk/coding-agent/core/compaction/branch-summarization.d.ts.map +1 -0
  334. package/dist/sdk/coding-agent/core/compaction/compaction.d.ts +142 -0
  335. package/dist/sdk/coding-agent/core/compaction/compaction.d.ts.map +1 -0
  336. package/dist/sdk/coding-agent/core/compaction/index.d.ts +7 -0
  337. package/dist/sdk/coding-agent/core/compaction/index.d.ts.map +1 -0
  338. package/dist/sdk/coding-agent/core/compaction/utils.d.ts +38 -0
  339. package/dist/sdk/coding-agent/core/compaction/utils.d.ts.map +1 -0
  340. package/dist/sdk/coding-agent/core/defaults.d.ts +3 -0
  341. package/dist/sdk/coding-agent/core/defaults.d.ts.map +1 -0
  342. package/dist/sdk/coding-agent/core/diagnostics.d.ts +15 -0
  343. package/dist/sdk/coding-agent/core/diagnostics.d.ts.map +1 -0
  344. package/dist/sdk/coding-agent/core/event-bus.d.ts +9 -0
  345. package/dist/sdk/coding-agent/core/event-bus.d.ts.map +1 -0
  346. package/dist/sdk/coding-agent/core/exec.d.ts +29 -0
  347. package/dist/sdk/coding-agent/core/exec.d.ts.map +1 -0
  348. package/dist/sdk/coding-agent/core/extensions/index.d.ts +12 -0
  349. package/dist/sdk/coding-agent/core/extensions/index.d.ts.map +1 -0
  350. package/dist/sdk/coding-agent/core/extensions/loader.d.ts +24 -0
  351. package/dist/sdk/coding-agent/core/extensions/loader.d.ts.map +1 -0
  352. package/dist/sdk/coding-agent/core/extensions/loader.js +3 -35
  353. package/dist/sdk/coding-agent/core/extensions/runner.d.ts +161 -0
  354. package/dist/sdk/coding-agent/core/extensions/runner.d.ts.map +1 -0
  355. package/dist/sdk/coding-agent/core/extensions/runner.js +1 -2
  356. package/dist/sdk/coding-agent/core/extensions/types.d.ts +1181 -0
  357. package/dist/sdk/coding-agent/core/extensions/types.d.ts.map +1 -0
  358. package/dist/sdk/coding-agent/core/extensions/wrapper.d.ts +20 -0
  359. package/dist/sdk/coding-agent/core/extensions/wrapper.d.ts.map +1 -0
  360. package/dist/sdk/coding-agent/core/http-dispatcher.d.ts +21 -0
  361. package/dist/sdk/coding-agent/core/http-dispatcher.d.ts.map +1 -0
  362. package/dist/sdk/coding-agent/core/index.d.ts +12 -0
  363. package/dist/sdk/coding-agent/core/index.d.ts.map +1 -0
  364. package/dist/sdk/coding-agent/core/keybindings.d.ts +371 -0
  365. package/dist/sdk/coding-agent/core/keybindings.d.ts.map +1 -0
  366. package/dist/sdk/coding-agent/core/messages.d.ts +77 -0
  367. package/dist/sdk/coding-agent/core/messages.d.ts.map +1 -0
  368. package/dist/sdk/coding-agent/core/model-registry.d.ts +150 -0
  369. package/dist/sdk/coding-agent/core/model-registry.d.ts.map +1 -0
  370. package/dist/sdk/coding-agent/core/model-resolver-utils.d.ts +7 -0
  371. package/dist/sdk/coding-agent/core/model-resolver-utils.d.ts.map +1 -0
  372. package/dist/sdk/coding-agent/core/model-resolver-utils.js +8 -0
  373. package/dist/sdk/coding-agent/core/model-resolver.d.ts +110 -0
  374. package/dist/sdk/coding-agent/core/model-resolver.d.ts.map +1 -0
  375. package/dist/sdk/coding-agent/core/model-resolver.js +1 -1
  376. package/dist/sdk/coding-agent/core/output-guard.d.ts +6 -0
  377. package/dist/sdk/coding-agent/core/output-guard.d.ts.map +1 -0
  378. package/dist/sdk/coding-agent/core/package-manager.d.ts +204 -0
  379. package/dist/sdk/coding-agent/core/package-manager.d.ts.map +1 -0
  380. package/dist/sdk/coding-agent/core/prompt-templates.d.ts +52 -0
  381. package/dist/sdk/coding-agent/core/prompt-templates.d.ts.map +1 -0
  382. package/dist/sdk/coding-agent/core/provider-display-names.d.ts +2 -0
  383. package/dist/sdk/coding-agent/core/provider-display-names.d.ts.map +1 -0
  384. package/dist/sdk/coding-agent/core/resolve-config-value.d.ts +23 -0
  385. package/dist/sdk/coding-agent/core/resolve-config-value.d.ts.map +1 -0
  386. package/dist/sdk/coding-agent/core/resource-loader.d.ts +194 -0
  387. package/dist/sdk/coding-agent/core/resource-loader.d.ts.map +1 -0
  388. package/dist/sdk/coding-agent/core/resource-loader.js +1 -1
  389. package/dist/sdk/coding-agent/core/sdk.d.ts +107 -0
  390. package/dist/sdk/coding-agent/core/sdk.d.ts.map +1 -0
  391. package/dist/sdk/coding-agent/core/session-cwd.d.ts +19 -0
  392. package/dist/sdk/coding-agent/core/session-cwd.d.ts.map +1 -0
  393. package/dist/sdk/coding-agent/core/session-manager.d.ts +333 -0
  394. package/dist/sdk/coding-agent/core/session-manager.d.ts.map +1 -0
  395. package/dist/sdk/coding-agent/core/settings-manager.d.ts +209 -0
  396. package/dist/sdk/coding-agent/core/settings-manager.d.ts.map +1 -0
  397. package/dist/sdk/coding-agent/core/settings-manager.js +1 -170
  398. package/dist/sdk/coding-agent/core/skills.d.ts +60 -0
  399. package/dist/sdk/coding-agent/core/skills.d.ts.map +1 -0
  400. package/dist/sdk/coding-agent/core/slash-commands.d.ts +14 -0
  401. package/dist/sdk/coding-agent/core/slash-commands.d.ts.map +1 -0
  402. package/dist/sdk/coding-agent/core/source-info.d.ts +18 -0
  403. package/dist/sdk/coding-agent/core/source-info.d.ts.map +1 -0
  404. package/dist/sdk/coding-agent/core/system-prompt.d.ts +28 -0
  405. package/dist/sdk/coding-agent/core/system-prompt.d.ts.map +1 -0
  406. package/dist/sdk/coding-agent/core/system-prompt.js +3 -1
  407. package/dist/sdk/coding-agent/core/telemetry.d.ts +3 -0
  408. package/dist/sdk/coding-agent/core/telemetry.d.ts.map +1 -0
  409. package/dist/sdk/coding-agent/core/theme.d.ts +28 -0
  410. package/dist/sdk/coding-agent/core/theme.d.ts.map +1 -0
  411. package/dist/sdk/coding-agent/core/theme.js +202 -0
  412. package/dist/sdk/coding-agent/core/timings.d.ts +8 -0
  413. package/dist/sdk/coding-agent/core/timings.d.ts.map +1 -0
  414. package/dist/sdk/coding-agent/core/tools/bash.d.ts +63 -0
  415. package/dist/sdk/coding-agent/core/tools/bash.d.ts.map +1 -0
  416. package/dist/sdk/coding-agent/core/tools/bash.js +17 -18
  417. package/dist/sdk/coding-agent/core/tools/edit-diff.d.ts +87 -0
  418. package/dist/sdk/coding-agent/core/tools/edit-diff.d.ts.map +1 -0
  419. package/dist/sdk/coding-agent/core/tools/edit.d.ts +39 -0
  420. package/dist/sdk/coding-agent/core/tools/edit.d.ts.map +1 -0
  421. package/dist/sdk/coding-agent/core/tools/edit.js +7 -8
  422. package/dist/sdk/coding-agent/core/tools/file-mutation-queue.d.ts +6 -0
  423. package/dist/sdk/coding-agent/core/tools/file-mutation-queue.d.ts.map +1 -0
  424. package/dist/sdk/coding-agent/core/tools/find.d.ts +35 -0
  425. package/dist/sdk/coding-agent/core/tools/find.d.ts.map +1 -0
  426. package/dist/sdk/coding-agent/core/tools/find.js +9 -13
  427. package/dist/sdk/coding-agent/core/tools/grep.d.ts +37 -0
  428. package/dist/sdk/coding-agent/core/tools/grep.d.ts.map +1 -0
  429. package/dist/sdk/coding-agent/core/tools/grep.js +10 -14
  430. package/dist/sdk/coding-agent/core/tools/index.d.ts +40 -0
  431. package/dist/sdk/coding-agent/core/tools/index.d.ts.map +1 -0
  432. package/dist/sdk/coding-agent/core/tools/ls.d.ts +37 -0
  433. package/dist/sdk/coding-agent/core/tools/ls.d.ts.map +1 -0
  434. package/dist/sdk/coding-agent/core/tools/ls.js +9 -10
  435. package/dist/sdk/coding-agent/core/tools/output-accumulator.d.ts +52 -0
  436. package/dist/sdk/coding-agent/core/tools/output-accumulator.d.ts.map +1 -0
  437. package/dist/sdk/coding-agent/core/tools/path-utils.d.ts +8 -0
  438. package/dist/sdk/coding-agent/core/tools/path-utils.d.ts.map +1 -0
  439. package/dist/sdk/coding-agent/core/tools/read.d.ts +35 -0
  440. package/dist/sdk/coding-agent/core/tools/read.d.ts.map +1 -0
  441. package/dist/sdk/coding-agent/core/tools/read.js +33 -35
  442. package/dist/sdk/coding-agent/core/tools/render-diff.d.ts +17 -0
  443. package/dist/sdk/coding-agent/core/tools/render-diff.d.ts.map +1 -0
  444. package/dist/sdk/coding-agent/{modes/interactive/components/diff.js → core/tools/render-diff.js} +18 -31
  445. package/dist/sdk/coding-agent/core/tools/render-utils.d.ts +21 -0
  446. package/dist/sdk/coding-agent/core/tools/render-utils.d.ts.map +1 -0
  447. package/dist/sdk/coding-agent/core/tools/tool-definition-wrapper.d.ts +14 -0
  448. package/dist/sdk/coding-agent/core/tools/tool-definition-wrapper.d.ts.map +1 -0
  449. package/dist/sdk/coding-agent/core/tools/truncate.d.ts +70 -0
  450. package/dist/sdk/coding-agent/core/tools/truncate.d.ts.map +1 -0
  451. package/dist/sdk/coding-agent/core/tools/write.d.ts +26 -0
  452. package/dist/sdk/coding-agent/core/tools/write.d.ts.map +1 -0
  453. package/dist/sdk/coding-agent/core/tools/write.js +10 -11
  454. package/dist/sdk/coding-agent/index.d.ts +29 -0
  455. package/dist/sdk/coding-agent/index.d.ts.map +1 -0
  456. package/dist/sdk/coding-agent/index.js +7 -5
  457. package/dist/sdk/coding-agent/main.d.ts +2 -0
  458. package/dist/sdk/coding-agent/main.d.ts.map +1 -0
  459. package/dist/sdk/coding-agent/migrations.d.ts +33 -0
  460. package/dist/sdk/coding-agent/migrations.d.ts.map +1 -0
  461. package/dist/sdk/coding-agent/modes/index.d.ts +8 -0
  462. package/dist/sdk/coding-agent/modes/index.d.ts.map +1 -0
  463. package/dist/sdk/coding-agent/modes/index.js +0 -1
  464. package/dist/sdk/coding-agent/modes/print-mode.d.ts +28 -0
  465. package/dist/sdk/coding-agent/modes/print-mode.d.ts.map +1 -0
  466. package/dist/sdk/coding-agent/modes/rpc/jsonl.d.ts +17 -0
  467. package/dist/sdk/coding-agent/modes/rpc/jsonl.d.ts.map +1 -0
  468. package/dist/sdk/coding-agent/modes/rpc/rpc-client.d.ts +224 -0
  469. package/dist/sdk/coding-agent/modes/rpc/rpc-client.d.ts.map +1 -0
  470. package/dist/sdk/coding-agent/modes/rpc/rpc-mode.d.ts +20 -0
  471. package/dist/sdk/coding-agent/modes/rpc/rpc-mode.d.ts.map +1 -0
  472. package/dist/sdk/coding-agent/modes/rpc/rpc-mode.js +2 -2
  473. package/dist/sdk/coding-agent/modes/rpc/rpc-types.d.ts +419 -0
  474. package/dist/sdk/coding-agent/modes/rpc/rpc-types.d.ts.map +1 -0
  475. package/dist/sdk/coding-agent/utils/ansi.d.ts +2 -0
  476. package/dist/sdk/coding-agent/utils/ansi.d.ts.map +1 -0
  477. package/dist/sdk/coding-agent/utils/changelog.d.ts +21 -0
  478. package/dist/sdk/coding-agent/utils/changelog.d.ts.map +1 -0
  479. package/dist/sdk/coding-agent/utils/child-process.d.ts +15 -0
  480. package/dist/sdk/coding-agent/utils/child-process.d.ts.map +1 -0
  481. package/dist/sdk/coding-agent/utils/clipboard-image.d.ts +11 -0
  482. package/dist/sdk/coding-agent/utils/clipboard-image.d.ts.map +1 -0
  483. package/dist/sdk/coding-agent/utils/clipboard-native.d.ts +8 -0
  484. package/dist/sdk/coding-agent/utils/clipboard-native.d.ts.map +1 -0
  485. package/dist/sdk/coding-agent/utils/clipboard.d.ts +2 -0
  486. package/dist/sdk/coding-agent/utils/clipboard.d.ts.map +1 -0
  487. package/dist/sdk/coding-agent/utils/exif-orientation.d.ts +5 -0
  488. package/dist/sdk/coding-agent/utils/exif-orientation.d.ts.map +1 -0
  489. package/dist/sdk/coding-agent/utils/frontmatter.d.ts +8 -0
  490. package/dist/sdk/coding-agent/utils/frontmatter.d.ts.map +1 -0
  491. package/dist/sdk/coding-agent/utils/fs-watch.d.ts +5 -0
  492. package/dist/sdk/coding-agent/utils/fs-watch.d.ts.map +1 -0
  493. package/dist/sdk/coding-agent/utils/git.d.ts +26 -0
  494. package/dist/sdk/coding-agent/utils/git.d.ts.map +1 -0
  495. package/dist/sdk/coding-agent/utils/html.d.ts +7 -0
  496. package/dist/sdk/coding-agent/utils/html.d.ts.map +1 -0
  497. package/dist/sdk/coding-agent/utils/image-convert.d.ts +9 -0
  498. package/dist/sdk/coding-agent/utils/image-convert.d.ts.map +1 -0
  499. package/dist/sdk/coding-agent/utils/image-resize.d.ts +36 -0
  500. package/dist/sdk/coding-agent/utils/image-resize.d.ts.map +1 -0
  501. package/dist/sdk/coding-agent/utils/mime.d.ts +3 -0
  502. package/dist/sdk/coding-agent/utils/mime.d.ts.map +1 -0
  503. package/dist/sdk/coding-agent/utils/paths.d.ts +31 -0
  504. package/dist/sdk/coding-agent/utils/paths.d.ts.map +1 -0
  505. package/dist/sdk/coding-agent/utils/photon.d.ts +13 -0
  506. package/dist/sdk/coding-agent/utils/photon.d.ts.map +1 -0
  507. package/dist/sdk/coding-agent/utils/photon.js +2 -10
  508. package/dist/sdk/coding-agent/utils/pi-user-agent.d.ts +2 -0
  509. package/dist/sdk/coding-agent/utils/pi-user-agent.d.ts.map +1 -0
  510. package/dist/sdk/coding-agent/utils/pi-user-agent.js +1 -2
  511. package/dist/sdk/coding-agent/utils/shell.d.ts +30 -0
  512. package/dist/sdk/coding-agent/utils/shell.d.ts.map +1 -0
  513. package/dist/sdk/coding-agent/utils/sleep.d.ts +5 -0
  514. package/dist/sdk/coding-agent/utils/sleep.d.ts.map +1 -0
  515. package/dist/sdk/coding-agent/utils/syntax-highlight.d.ts +12 -0
  516. package/dist/sdk/coding-agent/utils/syntax-highlight.d.ts.map +1 -0
  517. package/dist/sdk/coding-agent/utils/tools-manager.d.ts +3 -0
  518. package/dist/sdk/coding-agent/utils/tools-manager.d.ts.map +1 -0
  519. package/dist/sdk/coding-agent/utils/version-check.d.ts +15 -0
  520. package/dist/sdk/coding-agent/utils/version-check.d.ts.map +1 -0
  521. package/dist/sdk/coding-agent/utils/windows-self-update.d.ts +3 -0
  522. package/dist/sdk/coding-agent/utils/windows-self-update.d.ts.map +1 -0
  523. package/dist/server/agent-bridge.d.ts +308 -0
  524. package/dist/server/agent-bridge.d.ts.map +1 -0
  525. package/dist/server/agent-bridge.js +2 -1
  526. package/dist/server/handlers/errors.d.ts +26 -0
  527. package/dist/server/handlers/errors.d.ts.map +1 -0
  528. package/dist/server/handlers/paths-autocomplete.d.ts +45 -0
  529. package/dist/server/handlers/paths-autocomplete.d.ts.map +1 -0
  530. package/dist/server/handlers/projects.d.ts +58 -0
  531. package/dist/server/handlers/projects.d.ts.map +1 -0
  532. package/dist/server/handlers/queue.d.ts +27 -0
  533. package/dist/server/handlers/queue.d.ts.map +1 -0
  534. package/dist/server/handlers/sessions.d.ts +50 -0
  535. package/dist/server/handlers/sessions.d.ts.map +1 -0
  536. package/dist/server/paths.d.ts +51 -0
  537. package/dist/server/paths.d.ts.map +1 -0
  538. package/dist/server/session-stream.d.ts +379 -0
  539. package/dist/server/session-stream.d.ts.map +1 -0
  540. package/dist/server/shutdown.d.ts +102 -0
  541. package/dist/server/shutdown.d.ts.map +1 -0
  542. package/dist/server/storage.d.ts +287 -0
  543. package/dist/server/storage.d.ts.map +1 -0
  544. package/dist/server/title-generator.d.ts +25 -0
  545. package/dist/server/title-generator.d.ts.map +1 -0
  546. package/dist/server/wire.d.ts +448 -0
  547. package/dist/server/wire.d.ts.map +1 -0
  548. package/dist/studio-binding.d.ts +44 -0
  549. package/dist/studio-binding.d.ts.map +1 -0
  550. package/dist/studio-binding.js +1 -1
  551. package/package.json +11 -1
  552. package/dist/sdk/coding-agent/bun/cli.js +0 -7
  553. package/dist/sdk/coding-agent/bun/restore-sandbox-env.js +0 -31
  554. package/dist/sdk/coding-agent/cli/args.js +0 -340
  555. package/dist/sdk/coding-agent/cli/file-processor.js +0 -82
  556. package/dist/sdk/coding-agent/cli/initial-message.js +0 -21
  557. package/dist/sdk/coding-agent/core/footer-data-provider.js +0 -309
  558. package/dist/sdk/coding-agent/modes/interactive/components/keybinding-hints.js +0 -35
  559. package/dist/sdk/coding-agent/modes/interactive/components/visual-truncate.js +0 -26
  560. package/dist/sdk/coding-agent/modes/interactive/interactive-mode.js +0 -3
  561. package/dist/sdk/coding-agent/modes/interactive/theme/theme.js +0 -1022
@@ -0,0 +1,207 @@
1
+ /**
2
+ * Relay envelope dispatcher (CLI side).
3
+ *
4
+ * Translates inbound `RelayFrame`s from the backend into calls against the
5
+ * pure REST handlers (`handlers/projects.ts`, `handlers/sessions.ts`) and
6
+ * the live `SessionStreamManager`. Pure module — no socket, no timers,
7
+ * no logging side-channels except what the caller passes in. The caller
8
+ * (`commands/serve.ts`) owns lifecycle and the `RelayClient`.
9
+ *
10
+ * Two entry points, one per inbound frame kind we route:
11
+ *
12
+ * - `handleRestRequest(frame, deps)` — synchronous-style request/response.
13
+ * Resolves to a `RestResponseFrame` the caller sends back via
14
+ * `relay.send(...)`. Errors thrown by handlers are mapped to status
15
+ * codes (400/404/500) and returned in the body, never re-thrown — the
16
+ * backend has a 30 s pending-request timeout and we want every request
17
+ * to terminate with a wire response so the browser doesn't sit on a
18
+ * stale spinner.
19
+ *
20
+ * - `handleClientMessage(frame, deps)` — fire-and-forget. Attaches a
21
+ * `Subscriber` (the relay socket, wrapped) to the session if not
22
+ * already attached, then calls `manager.prompt()`. Outbound
23
+ * `ServerEvent`s flow back through the subscriber as `WsEventFrame`s
24
+ * via `deps.relay.send()`.
25
+ *
26
+ * Subscriber bookkeeping lives in `serve.ts`, NOT here. The dispatcher
27
+ * is given the subscriber by the caller so it stays pure-ish (depends
28
+ * only on `manager` + `relay.send`). This also keeps the lifecycle for
29
+ * "detach all on relay disconnect" in one place.
30
+ *
31
+ * Path matching is a 30-line inline switch; we deliberately do not pull
32
+ * in `path-to-regexp` for five literal patterns. The matcher returns
33
+ * the parsed `id` param when applicable.
34
+ *
35
+ * Close-code policy (mirroring backend `router.ts`):
36
+ * - The dispatcher itself never closes the relay; that's serve.ts.
37
+ * - Backend cancels pending REST requests with `code:"timeout"` (30 s)
38
+ * or `code:"machine_offline"` (CLI socket dropped). Both are
39
+ * transparent to this layer — we just respond when we can.
40
+ */
41
+ import type { AutoResearchFrame, CancelTurnFrame, ClientMessageFrame, MetaEvent, RestRequestFrame, RestResponseFrame, SubscribeFrame } from "@aexol/relay-protocol";
42
+ import type { SessionStreamManager, Subscriber } from "../server/session-stream.js";
43
+ import type { SessionStore } from "../server/storage.js";
44
+ import type { RelayClient } from "./client.js";
45
+ /**
46
+ * Result of matching a request path against a route table entry.
47
+ * `id` is populated when the route had an `:id` placeholder.
48
+ */
49
+ interface RouteMatch {
50
+ route: "list_projects" | "create_project" | "update_project" | "delete_project" | "bind_studio" | "list_project_sessions" | "create_session" | "get_session" | "update_session" | "delete_session" | "get_session_memory" | "get_session_memory_details" | "compact_session" | "remember_and_delete_session" | "fork_session" | "list_path_autocomplete" | "enqueue_prompt" | "get_prompt_queue" | "remove_prompt" | "clear_prompt_queue";
51
+ id?: string;
52
+ /** Parsed query params, if the path carried a `?...` suffix. */
53
+ query?: URLSearchParams;
54
+ /** For `remove_prompt`: the queue item id extracted from the path. */
55
+ itemId?: string;
56
+ }
57
+ /**
58
+ * Inline path matcher. Returns `null` for any path/method combination we
59
+ * don't recognise; the caller turns that into a `404 Unknown route`.
60
+ *
61
+ * Intentionally literal — a regex table would be marginally fancier but
62
+ * also marginally slower and harder to read for ~9 routes.
63
+ */
64
+ export declare function matchRoute(method: string, path: string): RouteMatch | null;
65
+ /**
66
+ * Best-effort publisher for project/session lifecycle meta events. Bound
67
+ * by `serve.ts` to `relay.send({kind:"meta_event", machineId, event})`;
68
+ * tests pass a recording stub. Always called inside a try/catch by the
69
+ * dispatcher so a publish failure never breaks the REST response — the
70
+ * mutation already succeeded.
71
+ *
72
+ * Omit (`undefined`) to disable publishing entirely (used in the handler
73
+ * unit tests where there's no relay).
74
+ */
75
+ export type PublishMetaEvent = (event: MetaEvent) => void;
76
+ export interface RestRequestDeps {
77
+ store: SessionStore;
78
+ manager: SessionStreamManager;
79
+ /** Optional logger for unexpected errors. Defaults to console.error. */
80
+ logger?: {
81
+ error: (...args: unknown[]) => void;
82
+ };
83
+ /**
84
+ * Optional meta-event publisher. Invoked AFTER each successful mutation
85
+ * (create/update/delete project, create/update/delete session) so all
86
+ * tabs of all browsers subscribed to this machine refetch. Read paths
87
+ * (`list_*`, `get_*`) never publish.
88
+ *
89
+ * Failure handling: any throw is caught + logged; we never propagate
90
+ * publish failures into the REST response (the SQLite mutation has
91
+ * already committed and the caller deserves the success it asked for).
92
+ */
93
+ publishMetaEvent?: PublishMetaEvent;
94
+ }
95
+ /**
96
+ * Dispatch a `rest_request` frame. Always resolves with a
97
+ * `RestResponseFrame` — handler exceptions are caught and translated.
98
+ *
99
+ * Status mapping:
100
+ * - 200: handler returned successfully (body is the handler's return value
101
+ * or `{ ok: true }` for void returns)
102
+ * - 400: `BadRequestError` thrown by handler, OR malformed body for a
103
+ * route that requires one, OR unknown route
104
+ * - 404: `NotFoundError` thrown by handler
105
+ * - 405: route matches but method doesn't (returned as 404 since we don't
106
+ * distinguish — the matcher treats it as "no route", consistent
107
+ * with the original Hono router which also 404'd)
108
+ * - 500: anything else; `error` field carries a sanitized message
109
+ */
110
+ export declare function handleRestRequest(frame: RestRequestFrame, deps: RestRequestDeps): Promise<RestResponseFrame>;
111
+ export interface ClientMessageDeps {
112
+ manager: SessionStreamManager;
113
+ /** Live relay client used to send `WsEventFrame`s back. */
114
+ relay: Pick<RelayClient, "send">;
115
+ /**
116
+ * Subscriber registry. The dispatcher attaches per `(sessionId)` exactly
117
+ * once and reuses the same `Subscriber` instance for subsequent
118
+ * `client_message` frames addressed to the same session. The caller is
119
+ * responsible for clearing this on relay disconnect via
120
+ * `detachAll(deps)`.
121
+ *
122
+ * Keyed by `sessionId` (machine routing already happened at the backend;
123
+ * the CLI only ever sees frames addressed to itself).
124
+ */
125
+ subscribers: Map<string, Subscriber>;
126
+ /** Optional logger for prompt-side errors. Defaults to console.error. */
127
+ logger?: {
128
+ error: (...args: unknown[]) => void;
129
+ };
130
+ }
131
+ /**
132
+ * Dispatch a `client_message` frame. Idempotent w.r.t. attach: the same
133
+ * `Subscriber` is reused across messages for a given session.
134
+ *
135
+ * Errors:
136
+ * - Unknown sessionId → emits a `ws_event` carrying an `error`-typed
137
+ * `ServerEvent` so the browser sees it on the established stream
138
+ * (mirrors how the old WS route surfaced `manager.attach` failures).
139
+ * - Unknown message shape → silently ignored with a logger warning;
140
+ * the wire contract is `{type:"user_message", content:string}` and
141
+ * anything else is a protocol violation we don't escalate.
142
+ * - `manager.prompt()` rejection → logged; the manager itself broadcasts
143
+ * an `error` event to subscribers, so we don't double-report.
144
+ */
145
+ export declare function handleClientMessage(frame: ClientMessageFrame, deps: ClientMessageDeps): void;
146
+ /**
147
+ * Dispatch a `subscribe` frame from the backend. Handles the case where a
148
+ * browser enters an old session — we load history from SQLite immediately
149
+ * via `manager.attach()` and synthesize `session_ready` so the browser sees
150
+ * the full chat history without needing to send a first `client_message`.
151
+ *
152
+ * Idempotent: if a subscriber already exists for this session, we re-send
153
+ * `session_ready` (history may have changed, and the newly-joined browser
154
+ * tab needs it). The `ready.catch` handler is only registered once — on the
155
+ * first subscriber creation — to avoid duplicate error events.
156
+ */
157
+ export declare function handleSubscribe(frame: SubscribeFrame, deps: ClientMessageDeps): void;
158
+ /**
159
+ * Dispatch a `cancel_turn` frame. Disposes the session's pi bridge and
160
+ * removes the stream so the next user message creates a fresh one. The
161
+ * bridge dispose triggers `agent_end` broadcast to all subscribers.
162
+ *
163
+ * Idempotent: no-ops when no stream exists for the session.
164
+ */
165
+ export declare function handleCancelTurn(frame: CancelTurnFrame, deps: {
166
+ manager: SessionStreamManager;
167
+ logger?: {
168
+ error: (...args: unknown[]) => void;
169
+ };
170
+ }): void;
171
+ /**
172
+ * Detach every subscriber the dispatcher has attached. Called by
173
+ * `serve.ts` on relay disconnect / shutdown so the underlying pi
174
+ * processes don't keep an unreachable subscriber pinned.
175
+ *
176
+ * NOTE: this does NOT dispose the streams themselves — pi keeps running
177
+ * so a future browser reconnect can resume mid-turn. Use
178
+ * `manager.dispose()` at full shutdown.
179
+ */
180
+ export declare function detachAllSubscribers(manager: SessionStreamManager, subscribers: Map<string, Subscriber>): void;
181
+ export interface AutoResearchDeps {
182
+ store: SessionStore;
183
+ manager: SessionStreamManager;
184
+ relay: Pick<RelayClient, "send">;
185
+ /** Subscriber map shared with handleClientMessage. */
186
+ subscribers: Map<string, Subscriber>;
187
+ /** Project working directory. */
188
+ cwd: string;
189
+ /** Optional logger. Defaults to console.error. */
190
+ logger?: {
191
+ error: (...args: unknown[]) => void;
192
+ };
193
+ }
194
+ /**
195
+ * Dispatch an `auto_research` frame. Sends the auto-research task through
196
+ * the existing AgentBridge (backend proxy) instead of spawning a separate pi
197
+ * subprocess. This ensures auto-research uses the same model and API keys
198
+ * as the active session.
199
+ *
200
+ * Progress is streamed back as `ws_event` frames carrying
201
+ * `auto_research_*` ServerEvent types on the `sessionId` channel.
202
+ *
203
+ * Errors are surfaced as `auto_research_error` events.
204
+ */
205
+ export declare function handleAutoResearchFrame(frame: AutoResearchFrame, deps: AutoResearchDeps): void;
206
+ export {};
207
+ //# sourceMappingURL=dispatcher.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"dispatcher.d.ts","sourceRoot":"","sources":["../../src/relay/dispatcher.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,68 @@
1
+ /**
2
+ * Persistent record of a registered machine.
3
+ *
4
+ * Lives at `<configDir>/machine.json` (mode 0600). Created the first time
5
+ * `spectral serve` runs after login; reused across restarts so a single
6
+ * developer machine appears as one logical agent in the backend's machine
7
+ * list, regardless of how many times the CLI process restarts.
8
+ *
9
+ * Why a separate file from `config.json`?
10
+ * - `config.json` carries the team API key (rotated on logout). The
11
+ * machine identity outlives logout/login: if you `logout` then
12
+ * `login` with the same team, your machine should keep its `machineId`
13
+ * so the backend's audit log stays continuous.
14
+ * - The machine JWT is short-lived (decoded `exp` checked by
15
+ * `registration.ts`). Splitting it out keeps the auth file minimal and
16
+ * avoids any risk of accidentally serializing the JWT into a
17
+ * `spectral login` log line.
18
+ *
19
+ * Schema is intentionally minimal — Batch 3 will add capability flags;
20
+ * unknown fields are preserved on round-trip via `extra` so older CLIs
21
+ * don't strip data the backend later cares about.
22
+ */
23
+ export interface MachineRecord {
24
+ /** Stable machine id assigned by the backend on first register. */
25
+ machineId: string;
26
+ /** Display name (defaults to hostname; user can override with --machine-name). */
27
+ machineName: string;
28
+ /** Short-lived bearer JWT used for the WS Authorization header. */
29
+ machineJwt: string;
30
+ /** Team id (optional — backend may or may not return one in this batch). */
31
+ teamId?: string;
32
+ /** User who registered the machine via OAuth. Absent for team-API-key registrations. */
33
+ ownerId?: string;
34
+ /** Machine visibility: "PRIVATE" or "SHARED". */
35
+ visibility?: string;
36
+ /** Wall-clock ms when the JWT was issued (used for cheap freshness display). */
37
+ registeredAt: number;
38
+ /** Hostname captured at registration time. Informational only. */
39
+ hostname: string;
40
+ /** CLI version captured at registration time. Informational only. */
41
+ version: string;
42
+ /**
43
+ * Forward-compatibility bag: any unknown JSON keys read from disk are
44
+ * preserved here and re-emitted on save so a newer backend that adds
45
+ * fields doesn't get them stripped by an older CLI.
46
+ */
47
+ extra?: Record<string, unknown>;
48
+ }
49
+ export declare function getMachineFile(): string;
50
+ /**
51
+ * Read the persisted machine record. Returns `null` when the file is
52
+ * missing or malformed — callers treat both as "needs registration".
53
+ *
54
+ * We intentionally do NOT throw on parse errors: a corrupted machine.json
55
+ * should self-heal on the next `spectral serve` (re-register, overwrite),
56
+ * not block startup forever.
57
+ */
58
+ export declare function loadMachine(): Promise<MachineRecord | null>;
59
+ /**
60
+ * Write the machine record with restrictive permissions. Creates the
61
+ * config directory if missing (matches `writeConfig` in `config.ts`).
62
+ *
63
+ * Atomicity: we do NOT write-then-rename. The record is small, the file
64
+ * is single-writer (one `spectral serve` at a time per `$SPECTRAL_CONFIG_DIR`),
65
+ * and a torn write self-heals via `loadMachine` returning null + re-register.
66
+ */
67
+ export declare function saveMachine(rec: MachineRecord): Promise<void>;
68
+ //# sourceMappingURL=machine-store.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"machine-store.d.ts","sourceRoot":"","sources":["../../src/relay/machine-store.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;GAqBG;AAQH,MAAM,WAAW,aAAa;IAC5B,mEAAmE;IACnE,SAAS,EAAE,MAAM,CAAC;IAClB,kFAAkF;IAClF,WAAW,EAAE,MAAM,CAAC;IACpB,mEAAmE;IACnE,UAAU,EAAE,MAAM,CAAC;IACnB,4EAA4E;IAC5E,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,wFAAwF;IACxF,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,iDAAiD;IACjD,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,gFAAgF;IAChF,YAAY,EAAE,MAAM,CAAC;IACrB,kEAAkE;IAClE,QAAQ,EAAE,MAAM,CAAC;IACjB,qEAAqE;IACrE,OAAO,EAAE,MAAM,CAAC;IAChB;;;;OAIG;IACH,KAAK,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;CACjC;AAcD,wBAAgB,cAAc,IAAI,MAAM,CAEvC;AAED;;;;;;;GAOG;AACH,wBAAsB,WAAW,IAAI,OAAO,CAAC,aAAa,GAAG,IAAI,CAAC,CAuCjE;AAED;;;;;;;GAOG;AACH,wBAAsB,WAAW,CAAC,GAAG,EAAE,aAAa,GAAG,OAAO,CAAC,IAAI,CAAC,CAsBnE"}
@@ -0,0 +1,75 @@
1
+ /**
2
+ * Fetch the admin-managed list of allowed base models from the backend.
3
+ *
4
+ * Used by `AgentBridge` at startup to register synthetic providers
5
+ * (`spectral-proxy-anthropic` / `spectral-proxy-openai`) that route every
6
+ * inference call through the backend's `/v1/messages` and
7
+ * `/v1/chat/completions` endpoints. The backend authenticates the call
8
+ * with the machine JWT (Bearer) and forwards to the upstream provider
9
+ * using its own (centralized) API keys.
10
+ *
11
+ * Why GraphQL (not REST):
12
+ * - The backend already exposes the whitelist via `availableBaseModels`
13
+ * in its public GraphQL schema (`schema.graphql`); there is no
14
+ * equivalent REST endpoint and we don't want to add one just for the
15
+ * CLI.
16
+ * - The query is parameterless and authenticated via the same Bearer
17
+ * machine JWT used by `/v1/*`, so a single `fetch` call is enough —
18
+ * no Zeus client setup required.
19
+ *
20
+ * Caching:
21
+ * - In-memory TTL cache (default 5 min), keyed by `${backendUrl}|${jwt}`.
22
+ * Pi sessions are short-lived but a single `spectral serve` process
23
+ * creates many of them, so we don't want to hammer the GraphQL
24
+ * endpoint on every reconnect.
25
+ */
26
+ export interface AllowedModel {
27
+ /** Raw provider modelId, e.g. "claude-3-5-haiku-latest". Sent as `body.model`. */
28
+ modelId: string;
29
+ /** Provider key as the backend records it, e.g. "anthropic", "openai", "google", "built-in". */
30
+ provider: string;
31
+ /** Human-readable name. Backend currently returns the modelId here, but the
32
+ * shape is forward-compatible with a separate displayName field. */
33
+ displayName: string;
34
+ /** Whether the upstream model supports reasoning/thinking. */
35
+ supportsReasoning?: boolean | null;
36
+ /** Backend-assigned UserModel id. Present for built-in (custom) models. */
37
+ userModelId?: string;
38
+ /** Optional model credit rates (credits per 1M tokens) used for Agent UI usage display. */
39
+ creditInputPer1M?: number | null;
40
+ creditOutputPer1M?: number | null;
41
+ creditCachedInputPer1M?: number | null;
42
+ creditCacheReadPer1M?: number | null;
43
+ creditCacheWritePer1M?: number | null;
44
+ /** Context window size in tokens (from backend's BaseModelInfo). */
45
+ contextWindow?: number | null;
46
+ /** Whether the model supports image input (derived from capabilities.modalities.input). */
47
+ supportsImages?: boolean | null;
48
+ /** Admin-configured default model flag (from backend BaseModel.isDefault). */
49
+ isDefault?: boolean | null;
50
+ /** Admin-configured default vision model flag (from backend BaseModel.isVisionDefault). */
51
+ isVisionDefault?: boolean | null;
52
+ }
53
+ export interface FetchAllowedModelsOptions {
54
+ backendUrl: string;
55
+ machineJwt: string;
56
+ /** Override for tests. */
57
+ fetchImpl?: typeof fetch;
58
+ /**
59
+ * Bypass the in-memory cache for this call. Tests use this to assert
60
+ * that the network is actually hit; production code never sets it.
61
+ */
62
+ bypassCache?: boolean;
63
+ /** TTL in milliseconds. Default 5 min. Tests use 0 to effectively disable. */
64
+ cacheTtlMs?: number;
65
+ }
66
+ /** Test-only helper: drops every cached entry. */
67
+ export declare function clearAllowedModelsCache(): void;
68
+ /**
69
+ * Fetch the whitelist of allowed base models. Throws on any failure with a
70
+ * message tailored for an operator running `spectral serve` — the caller
71
+ * (AgentBridge.start) lets the throw propagate so the WS subscriber sees a
72
+ * clear error event instead of a silent fall-through to "no models".
73
+ */
74
+ export declare function fetchAllowedModels(opts: FetchAllowedModelsOptions): Promise<AllowedModel[]>;
75
+ //# sourceMappingURL=models-fetch.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"models-fetch.d.ts","sourceRoot":"","sources":["../../src/relay/models-fetch.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;GAwBG;AAEH,MAAM,WAAW,YAAY;IAC3B,kFAAkF;IAClF,OAAO,EAAE,MAAM,CAAC;IAChB,gGAAgG;IAChG,QAAQ,EAAE,MAAM,CAAC;IACjB;yEACqE;IACrE,WAAW,EAAE,MAAM,CAAC;IACpB,8DAA8D;IAC9D,iBAAiB,CAAC,EAAE,OAAO,GAAG,IAAI,CAAC;IACnC,2EAA2E;IAC3E,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,2FAA2F;IAC3F,gBAAgB,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IACjC,iBAAiB,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IAClC,sBAAsB,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IACvC,oBAAoB,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IACrC,qBAAqB,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IACtC,oEAAoE;IACpE,aAAa,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IAC9B,2FAA2F;IAC3F,cAAc,CAAC,EAAE,OAAO,GAAG,IAAI,CAAC;IAChC,8EAA8E;IAC9E,SAAS,CAAC,EAAE,OAAO,GAAG,IAAI,CAAC;IAC3B,2FAA2F;IAC3F,eAAe,CAAC,EAAE,OAAO,GAAG,IAAI,CAAC;CAClC;AAED,MAAM,WAAW,yBAAyB;IACxC,UAAU,EAAE,MAAM,CAAC;IACnB,UAAU,EAAE,MAAM,CAAC;IACnB,0BAA0B;IAC1B,SAAS,CAAC,EAAE,OAAO,KAAK,CAAC;IACzB;;;OAGG;IACH,WAAW,CAAC,EAAE,OAAO,CAAC;IACtB,8EAA8E;IAC9E,UAAU,CAAC,EAAE,MAAM,CAAC;CACrB;AAUD,kDAAkD;AAClD,wBAAgB,uBAAuB,IAAI,IAAI,CAE9C;AA0BD;;;;;GAKG;AACH,wBAAsB,kBAAkB,CACtC,IAAI,EAAE,yBAAyB,GAC9B,OAAO,CAAC,YAAY,EAAE,CAAC,CAyHzB"}
@@ -0,0 +1,81 @@
1
+ /**
2
+ * Machine registration with the Aexol backend.
3
+ *
4
+ * Contract (Batch 1 backend):
5
+ * POST <backend>/api/machines/register
6
+ * Headers: Authorization: Bearer <teamApiKey|userJwt>
7
+ * Body: { name?: string, hostname: string, version: string, pid: number }
8
+ * 200: { machineId: string, jwt: string, name: string, ownerId?: string }
9
+ *
10
+ * Auth priority:
11
+ * - If `userJwt` is set → used as Bearer token (machine gets ownerId)
12
+ * - Else → `apiKey` (team API key, machine gets no owner)
13
+ *
14
+ * Why this lives in its own module:
15
+ * - It's the ONLY consumer of the team API key / user JWT for registration.
16
+ * Once registration succeeds, the auth token is dropped on the floor —
17
+ * only the `machineJwt` is persisted (in `machine.json`) and threaded
18
+ * into `RelayClient`. Keeps the blast radius of an in-memory leak minimal.
19
+ * - It owns JWT expiry decoding so `serve.ts` doesn't have to know about
20
+ * JWT internals; a single boundary for "is the saved record still good".
21
+ *
22
+ * Failure mode: registration is fail-fast (no retry). The user is sitting
23
+ * at a CLI prompt; if their team key is wrong or the backend is down, the
24
+ * right answer is a clear error message, not a hang. WS reconnect (which
25
+ * IS retried) is the long-running path; that's `RelayClient`'s job.
26
+ */
27
+ import { type MachineRecord } from "./machine-store.js";
28
+ export interface RegistrationDeps {
29
+ /** Backend base URL, e.g. "https://api.aexol.ai". No trailing slash. */
30
+ backendUrl: string;
31
+ /** Team API key — used when `userJwt` is not set. */
32
+ apiKey: string;
33
+ /** Optional user JWT from OAuth login. When set, used instead of `apiKey` for registration. */
34
+ userJwt?: string;
35
+ /** Display name override (from `--machine-name`). Falls back to hostname. */
36
+ machineNameOverride?: string;
37
+ /** CLI version string for the registration payload. */
38
+ version: string;
39
+ /** Process id (informational; backend uses for last-seen audit). */
40
+ pid?: number;
41
+ /**
42
+ * Skew tolerance: treat the JWT as expired if it expires in less than this
43
+ * many seconds. Default 60s — well below any realistic JWT lifetime, but
44
+ * large enough that we don't connect with a token that dies mid-handshake.
45
+ */
46
+ expirySkewSec?: number;
47
+ /** Override fetch (tests). */
48
+ fetchImpl?: typeof fetch;
49
+ }
50
+ export interface RegisterResponse {
51
+ /** True when the existing on-disk record was reused (no network call). */
52
+ reused: boolean;
53
+ record: MachineRecord;
54
+ }
55
+ /**
56
+ * Decode the `exp` claim of a JWT without verifying the signature.
57
+ * We're not using this for AuthN — only for "should we re-register
58
+ * proactively". The backend is the source of truth on validity; if our
59
+ * cheap pre-check is wrong, the WS handshake will reject and we'll fall
60
+ * through to a full re-register on the next `spectral serve`.
61
+ *
62
+ * Returns `null` if the token isn't a parseable JWT or has no `exp`.
63
+ */
64
+ export declare function decodeJwtExp(jwt: string): number | null;
65
+ /** True when the JWT is past expiry (with skew). Treats undecodable as expired. */
66
+ export declare function isJwtExpired(jwt: string, skewSec?: number): boolean;
67
+ /**
68
+ * Ensure a machine is registered. Returns the record either from the cached
69
+ * `machine.json` (when the JWT is still fresh) or from a freshly issued one.
70
+ *
71
+ * Re-registration triggers:
72
+ * - No `machine.json` on disk (first run).
73
+ * - The cached JWT is expired or near-expired.
74
+ *
75
+ * Why we don't re-register on `--machine-name` change: the CLI flag controls
76
+ * the *next* registration's display name, but switching it shouldn't burn a
77
+ * fresh `machineId` on every restart. If users want a clean break they can
78
+ * delete `machine.json`.
79
+ */
80
+ export declare function ensureMachineRegistered(deps: RegistrationDeps): Promise<RegisterResponse>;
81
+ //# sourceMappingURL=registration.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"registration.d.ts","sourceRoot":"","sources":["../../src/relay/registration.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;GAyBG;AAIH,OAAO,EAA4B,KAAK,aAAa,EAAE,MAAM,oBAAoB,CAAC;AAElF,MAAM,WAAW,gBAAgB;IAC/B,wEAAwE;IACxE,UAAU,EAAE,MAAM,CAAC;IACnB,qDAAqD;IACrD,MAAM,EAAE,MAAM,CAAC;IACf,+FAA+F;IAC/F,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,6EAA6E;IAC7E,mBAAmB,CAAC,EAAE,MAAM,CAAC;IAC7B,uDAAuD;IACvD,OAAO,EAAE,MAAM,CAAC;IAChB,oEAAoE;IACpE,GAAG,CAAC,EAAE,MAAM,CAAC;IACb;;;;OAIG;IACH,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,8BAA8B;IAC9B,SAAS,CAAC,EAAE,OAAO,KAAK,CAAC;CAC1B;AAED,MAAM,WAAW,gBAAgB;IAC/B,0EAA0E;IAC1E,MAAM,EAAE,OAAO,CAAC;IAChB,MAAM,EAAE,aAAa,CAAC;CACvB;AAED;;;;;;;;GAQG;AACH,wBAAgB,YAAY,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI,CAWvD;AAED,mFAAmF;AACnF,wBAAgB,YAAY,CAAC,GAAG,EAAE,MAAM,EAAE,OAAO,SAAK,GAAG,OAAO,CAI/D;AAED;;;;;;;;;;;;GAYG;AACH,wBAAsB,uBAAuB,CAC3C,IAAI,EAAE,gBAAgB,GACrB,OAAO,CAAC,gBAAgB,CAAC,CAyF3B"}
@@ -0,0 +1,24 @@
1
+ /**
2
+ * Agent loop that works with AgentMessage throughout.
3
+ * Transforms to Message[] only at the LLM call boundary.
4
+ */
5
+ import { EventStream } from "../ai/index.js";
6
+ import type { AgentContext, AgentEvent, AgentLoopConfig, AgentMessage, StreamFn } from "./types.js";
7
+ export type AgentEventSink = (event: AgentEvent) => Promise<void> | void;
8
+ /**
9
+ * Start an agent loop with a new prompt message.
10
+ * The prompt is added to the context and events are emitted for it.
11
+ */
12
+ export declare function agentLoop(prompts: AgentMessage[], context: AgentContext, config: AgentLoopConfig, signal?: AbortSignal, streamFn?: StreamFn): EventStream<AgentEvent, AgentMessage[]>;
13
+ /**
14
+ * Continue an agent loop from the current context without adding a new message.
15
+ * Used for retries - context already has user message or tool results.
16
+ *
17
+ * **Important:** The last message in context must convert to a `user` or `toolResult` message
18
+ * via `convertToLlm`. If it doesn't, the LLM provider will reject the request.
19
+ * This cannot be validated here since `convertToLlm` is only called once per turn.
20
+ */
21
+ export declare function agentLoopContinue(context: AgentContext, config: AgentLoopConfig, signal?: AbortSignal, streamFn?: StreamFn): EventStream<AgentEvent, AgentMessage[]>;
22
+ export declare function runAgentLoop(prompts: AgentMessage[], context: AgentContext, config: AgentLoopConfig, emit: AgentEventSink, signal?: AbortSignal, streamFn?: StreamFn): Promise<AgentMessage[]>;
23
+ export declare function runAgentLoopContinue(context: AgentContext, config: AgentLoopConfig, emit: AgentEventSink, signal?: AbortSignal, streamFn?: StreamFn): Promise<AgentMessage[]>;
24
+ //# sourceMappingURL=agent-loop.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"agent-loop.d.ts","sourceRoot":"","sources":["../../../src/sdk/agent-core/agent-loop.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,EAGN,WAAW,EAIX,MAAM,gBAAgB,CAAC;AACxB,OAAO,KAAK,EACX,YAAY,EACZ,UAAU,EACV,eAAe,EACf,YAAY,EAIZ,QAAQ,EACR,MAAM,YAAY,CAAC;AAEpB,MAAM,MAAM,cAAc,GAAG,CAAC,KAAK,EAAE,UAAU,KAAK,OAAO,CAAC,IAAI,CAAC,GAAG,IAAI,CAAC;AAEzE;;;GAGG;AACH,wBAAgB,SAAS,CACxB,OAAO,EAAE,YAAY,EAAE,EACvB,OAAO,EAAE,YAAY,EACrB,MAAM,EAAE,eAAe,EACvB,MAAM,CAAC,EAAE,WAAW,EACpB,QAAQ,CAAC,EAAE,QAAQ,GACjB,WAAW,CAAC,UAAU,EAAE,YAAY,EAAE,CAAC,CAiBzC;AAED;;;;;;;GAOG;AACH,wBAAgB,iBAAiB,CAChC,OAAO,EAAE,YAAY,EACrB,MAAM,EAAE,eAAe,EACvB,MAAM,CAAC,EAAE,WAAW,EACpB,QAAQ,CAAC,EAAE,QAAQ,GACjB,WAAW,CAAC,UAAU,EAAE,YAAY,EAAE,CAAC,CAwBzC;AAED,wBAAsB,YAAY,CACjC,OAAO,EAAE,YAAY,EAAE,EACvB,OAAO,EAAE,YAAY,EACrB,MAAM,EAAE,eAAe,EACvB,IAAI,EAAE,cAAc,EACpB,MAAM,CAAC,EAAE,WAAW,EACpB,QAAQ,CAAC,EAAE,QAAQ,GACjB,OAAO,CAAC,YAAY,EAAE,CAAC,CAgBzB;AAED,wBAAsB,oBAAoB,CACzC,OAAO,EAAE,YAAY,EACrB,MAAM,EAAE,eAAe,EACvB,IAAI,EAAE,cAAc,EACpB,MAAM,CAAC,EAAE,WAAW,EACpB,QAAQ,CAAC,EAAE,QAAQ,GACjB,OAAO,CAAC,YAAY,EAAE,CAAC,CAiBzB"}
@@ -0,0 +1,125 @@
1
+ import { type ImageContent, type Message, type SimpleStreamOptions, type ThinkingBudgets, type Transport } from "../ai/index.js";
2
+ import type { AfterToolCallContext, AfterToolCallResult, AgentEvent, AgentLoopTurnUpdate, AgentMessage, AgentState, BeforeToolCallContext, BeforeToolCallResult, QueueMode, StreamFn, ToolExecutionMode } from "./types.js";
3
+ export type { QueueMode } from "./types.js";
4
+ /** Options for constructing an {@link Agent}. */
5
+ export interface AgentOptions {
6
+ initialState?: Partial<Omit<AgentState, "pendingToolCalls" | "isStreaming" | "streamingMessage" | "errorMessage">>;
7
+ convertToLlm?: (messages: AgentMessage[]) => Message[] | Promise<Message[]>;
8
+ transformContext?: (messages: AgentMessage[], signal?: AbortSignal) => Promise<AgentMessage[]>;
9
+ streamFn?: StreamFn;
10
+ getApiKey?: (provider: string) => Promise<string | undefined> | string | undefined;
11
+ onPayload?: SimpleStreamOptions["onPayload"];
12
+ onResponse?: SimpleStreamOptions["onResponse"];
13
+ beforeToolCall?: (context: BeforeToolCallContext, signal?: AbortSignal) => Promise<BeforeToolCallResult | undefined>;
14
+ afterToolCall?: (context: AfterToolCallContext, signal?: AbortSignal) => Promise<AfterToolCallResult | undefined>;
15
+ prepareNextTurn?: (signal?: AbortSignal) => Promise<AgentLoopTurnUpdate | undefined> | AgentLoopTurnUpdate | undefined;
16
+ steeringMode?: QueueMode;
17
+ followUpMode?: QueueMode;
18
+ sessionId?: string;
19
+ thinkingBudgets?: ThinkingBudgets;
20
+ transport?: Transport;
21
+ maxRetryDelayMs?: number;
22
+ toolExecution?: ToolExecutionMode;
23
+ }
24
+ /**
25
+ * Stateful wrapper around the low-level agent loop.
26
+ *
27
+ * `Agent` owns the current transcript, emits lifecycle events, executes tools,
28
+ * and exposes queueing APIs for steering and follow-up messages.
29
+ */
30
+ export declare class Agent {
31
+ private _state;
32
+ private readonly listeners;
33
+ private readonly steeringQueue;
34
+ private readonly followUpQueue;
35
+ convertToLlm: (messages: AgentMessage[]) => Message[] | Promise<Message[]>;
36
+ transformContext?: (messages: AgentMessage[], signal?: AbortSignal) => Promise<AgentMessage[]>;
37
+ streamFn: StreamFn;
38
+ getApiKey?: (provider: string) => Promise<string | undefined> | string | undefined;
39
+ onPayload?: SimpleStreamOptions["onPayload"];
40
+ onResponse?: SimpleStreamOptions["onResponse"];
41
+ beforeToolCall?: (context: BeforeToolCallContext, signal?: AbortSignal) => Promise<BeforeToolCallResult | undefined>;
42
+ afterToolCall?: (context: AfterToolCallContext, signal?: AbortSignal) => Promise<AfterToolCallResult | undefined>;
43
+ prepareNextTurn?: (signal?: AbortSignal) => Promise<AgentLoopTurnUpdate | undefined> | AgentLoopTurnUpdate | undefined;
44
+ private activeRun?;
45
+ /** Session identifier forwarded to providers for cache-aware backends. */
46
+ sessionId?: string;
47
+ /** Optional per-level thinking token budgets forwarded to the stream function. */
48
+ thinkingBudgets?: ThinkingBudgets;
49
+ /** Preferred transport forwarded to the stream function. */
50
+ transport: Transport;
51
+ /** Optional cap for provider-requested retry delays. */
52
+ maxRetryDelayMs?: number;
53
+ /** Tool execution strategy for assistant messages that contain multiple tool calls. */
54
+ toolExecution: ToolExecutionMode;
55
+ constructor(options?: AgentOptions);
56
+ /**
57
+ * Subscribe to agent lifecycle events.
58
+ *
59
+ * Listener promises are awaited in subscription order and are included in
60
+ * the current run's settlement. Listeners also receive the active abort
61
+ * signal for the current run.
62
+ *
63
+ * `agent_end` is the final emitted event for a run, but the agent does not
64
+ * become idle until all awaited listeners for that event have settled.
65
+ */
66
+ subscribe(listener: (event: AgentEvent, signal: AbortSignal) => Promise<void> | void): () => void;
67
+ /**
68
+ * Current agent state.
69
+ *
70
+ * Assigning `state.tools` or `state.messages` copies the provided top-level array.
71
+ */
72
+ get state(): AgentState;
73
+ /** Controls how queued steering messages are drained. */
74
+ set steeringMode(mode: QueueMode);
75
+ get steeringMode(): QueueMode;
76
+ /** Controls how queued follow-up messages are drained. */
77
+ set followUpMode(mode: QueueMode);
78
+ get followUpMode(): QueueMode;
79
+ /** Queue a message to be injected after the current assistant turn finishes. */
80
+ steer(message: AgentMessage): void;
81
+ /** Queue a message to run only after the agent would otherwise stop. */
82
+ followUp(message: AgentMessage): void;
83
+ /** Remove all queued steering messages. */
84
+ clearSteeringQueue(): void;
85
+ /** Remove all queued follow-up messages. */
86
+ clearFollowUpQueue(): void;
87
+ /** Remove all queued steering and follow-up messages. */
88
+ clearAllQueues(): void;
89
+ /** Returns true when either queue still contains pending messages. */
90
+ hasQueuedMessages(): boolean;
91
+ /** Active abort signal for the current run, if any. */
92
+ get signal(): AbortSignal | undefined;
93
+ /** Abort the current run, if one is active. */
94
+ abort(): void;
95
+ /**
96
+ * Resolve when the current run and all awaited event listeners have finished.
97
+ *
98
+ * This resolves after `agent_end` listeners settle.
99
+ */
100
+ waitForIdle(): Promise<void>;
101
+ /** Clear transcript state, runtime state, and queued messages. */
102
+ reset(): void;
103
+ /** Start a new prompt from text, a single message, or a batch of messages. */
104
+ prompt(message: AgentMessage | AgentMessage[]): Promise<void>;
105
+ prompt(input: string, images?: ImageContent[]): Promise<void>;
106
+ /** Continue from the current transcript. The last message must be a user or tool-result message. */
107
+ continue(): Promise<void>;
108
+ private normalizePromptInput;
109
+ private runPromptMessages;
110
+ private runContinuation;
111
+ private createContextSnapshot;
112
+ private createLoopConfig;
113
+ private runWithLifecycle;
114
+ private handleRunFailure;
115
+ private finishRun;
116
+ /**
117
+ * Reduce internal state for a loop event, then await listeners.
118
+ *
119
+ * `agent_end` only means no further loop events will be emitted. The run is
120
+ * considered idle later, after all awaited listeners for `agent_end` finish
121
+ * and `finishRun()` clears runtime-owned state.
122
+ */
123
+ private processEvents;
124
+ }
125
+ //# sourceMappingURL=agent.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"agent.d.ts","sourceRoot":"","sources":["../../../src/sdk/agent-core/agent.ts"],"names":[],"mappings":"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"}