@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
package/CHANGELOG.md CHANGED
@@ -1,75 +1,100 @@
1
1
  # Changelog
2
2
 
3
- All notable changes to `@aexol/spectral` are documented here.
4
- Format follows [Keep a Changelog](https://keepachangelog.com/en/1.1.0/).
3
+ All notable changes to `@aexol/spectral` are documented here. Format follows
4
+ [Keep a Changelog](https://keepachangelog.com/en/1.1.0/).
5
5
 
6
6
  ## [Unreleased]
7
7
 
8
+ ## [0.8.4] - 2026-06-02
9
+
10
+ ### Added
11
+
12
+ - Added `contextWindow` override field to the Built-in UserModels admin form,
13
+ allowing admins to set a custom context window for built-in models.
14
+ The field appears between Credits and System Prompt in the edit/create
15
+ form. Also added to model config export/import and GraphQL selector.
16
+
17
+ ## [0.8.3] - 2026-06-02
18
+
19
+ ### Fixed
20
+
21
+ - Fixed aggressive context compaction on every turn when using built-in models
22
+ (e.g. "Aexol Coder"). The `contextWindow` was always `null` for built-in
23
+ `UserModel` entries because the lookup used pipe-separated keys
24
+ (`provider|modelId`) but `UserModel.baseModel` stores values with a colon
25
+ separator (`anthropic:claude-sonnet-4-20250514`). The backend now correctly
26
+ inherits `contextWindow` from the linked `BaseModel`.
27
+
8
28
  ## [0.7.2] - 2026-05-25
9
29
 
10
30
  ### Changed
31
+
11
32
  - Version bump for monorepo release
12
33
 
13
34
  ### Added
35
+
14
36
  - Admin OpenRouter catalog picker in `/studio/admin/models` (Base Models tab):
15
- search across 368 models from `https://openrouter.ai/api/v1/models` and add
16
- to the whitelist with one click. Picker marks models already present in the
37
+ search across 368 models from `https://openrouter.ai/api/v1/models` and add to
38
+ the whitelist with one click. Picker marks models already present in the
17
39
  whitelist (disabled add) regardless of their enabled state.
18
- - `Query.adminOpenRouterCatalog: [OpenRouterModel!]!` — admin-gated, with a
19
- 1h in-memory TTL cache of the upstream catalog.
20
- - `Mutation.adminCreateBaseModel(input: BaseModelCreateInput!): BaseModel!`
21
- with duplicate guard on `(provider, modelId)`. Defaults `enabled=true`.
40
+ - `Query.adminOpenRouterCatalog: [OpenRouterModel!]!` — admin-gated, with a 1h
41
+ in-memory TTL cache of the upstream catalog.
42
+ - `Mutation.adminCreateBaseModel(input: BaseModelCreateInput!): BaseModel!` with
43
+ duplicate guard on `(provider, modelId)`. Defaults `enabled=true`.
22
44
  - Verbatim `modelId` routing for `provider="openrouter"` in the backend
23
45
  inference proxy: no `${provider}/${modelId}` rebuild — picker-sourced rows
24
46
  carry the canonical OR ID and are sent through unchanged. Legacy rebuild
25
- fallback is preserved for older naive-provider rows
26
- (`provider="deepseek"`, `"google"`, etc.).
47
+ fallback is preserved for older naive-provider rows (`provider="deepseek"`,
48
+ `"google"`, etc.).
27
49
  - Per-session model selection: choose AI model from a whitelist managed by
28
50
  admins. Selection persists per session in localStorage and is sent in the
29
51
  `prompt` envelope to apply via pi `setModel()`.
30
- - New SQLite column `sessions.model_id` for cross-restart recovery of
31
- selected model.
32
- - Synthetic pi providers `spectral-proxy-anthropic` and
33
- `spectral-proxy-openai`, registered at `PiBridge` start, that point pi's
34
- `ModelRegistry` at the backend's `/v1` proxy. `AuthStorage.inMemory()` and
35
- `ModelRegistry.inMemory()` skip on-disk pi credentials in `serve` mode.
36
- - Backend `/v1/messages` and `/v1/chat/completions` machine-JWT auth branch
37
- with raw `modelId` resolution against the `BaseModel` whitelist.
52
+ - New SQLite column `sessions.model_id` for cross-restart recovery of selected
53
+ model.
54
+ - Synthetic pi providers `spectral-proxy-anthropic` and `spectral-proxy-openai`,
55
+ registered at `PiBridge` start, that point pi's `ModelRegistry` at the
56
+ backend's `/v1` proxy. `AuthStorage.inMemory()` and `ModelRegistry.inMemory()`
57
+ skip on-disk pi credentials in `serve` mode.
58
+ - Backend `/v1/messages` and `/v1/chat/completions` machine-JWT auth branch with
59
+ raw `modelId` resolution against the `BaseModel` whitelist.
38
60
  - TTL-cached `fetchAllowedModels` GraphQL query used by `spectral serve` to
39
61
  discover the team's allowed models from the backend at startup.
40
62
  - Startup info log on `spectral serve`:
41
63
  `✓ Inference routed via backend proxy (N model(s) available)`.
42
64
 
43
65
  ### Changed
66
+
44
67
  - Soft-remove a model from the whitelist by reusing the existing per-row
45
- `Switch` toggle (no separate Remove button). Disabled rows remain visible
46
- in the admin table and can be re-enabled with the same Switch.
47
- - Available models are now read from a backend-managed `BaseModel` table
48
- (synced from https://models.dev/api.json by admins) instead of a
49
- hardcoded frontend whitelist.
50
- - `spectral serve` inference now routes through the backend proxy
51
- (centralized API keys) instead of reading `~/.pi/agent/auth.json`. CLI
52
- machines no longer need provider API keys locally; the backend manages
53
- them. The per-machine machine JWT carries auth, and the per-team
54
- `BaseModel` whitelist gates which models can be used.
68
+ `Switch` toggle (no separate Remove button). Disabled rows remain visible in
69
+ the admin table and can be re-enabled with the same Switch.
70
+ - Available models are now read from a backend-managed `BaseModel` table (synced
71
+ from https://models.dev/api.json by admins) instead of a hardcoded frontend
72
+ whitelist.
73
+ - `spectral serve` inference now routes through the backend proxy (centralized
74
+ API keys) instead of reading `~/.pi/agent/auth.json`. CLI machines no longer
75
+ need provider API keys locally; the backend manages them. The per-machine
76
+ machine JWT carries auth, and the per-team `BaseModel` whitelist gates which
77
+ models can be used.
55
78
 
56
79
  ### Fixed
80
+
57
81
  - Admin "Add from OpenRouter" picker GraphQL syntax error
58
- (`Expected Name, found String "modalities"`). Mutations
59
- `adminCreateBaseModel` and `adminUpdateBaseModel` now pass their input
60
- objects via Zeus `$()` variables instead of inline serialization,
61
- so nested array fields (`modalities`, `supportedParameters`) parse
62
- correctly server-side.
82
+ (`Expected Name, found String "modalities"`). Mutations `adminCreateBaseModel`
83
+ and `adminUpdateBaseModel` now pass their input objects via Zeus `$()`
84
+ variables instead of inline serialization, so nested array fields
85
+ (`modalities`, `supportedParameters`) parse correctly server-side.
63
86
 
64
87
  ### Removed
65
- - Hardcoded `landing/config/model-whitelist.ts` allowlist (replaced by
66
- the DB-backed whitelist).
88
+
89
+ - Hardcoded `landing/config/model-whitelist.ts` allowlist (replaced by the
90
+ DB-backed whitelist).
67
91
 
68
92
  ### Migration
93
+
69
94
  - `spectral` (CLI / TUI subprocess mode): no change — still uses local
70
95
  `~/.pi/agent/auth.json`.
71
- - `spectral serve`: ensure the backend has the relevant provider keys
72
- configured (`ANTHROPIC_API_KEY`, `OPENROUTER_API_KEY`, etc.). Local
96
+ - `spectral serve`: ensure the backend has the relevant provider keys configured
97
+ (`ANTHROPIC_API_KEY`, `OPENROUTER_API_KEY`, etc.). Local
73
98
  `~/.pi/agent/auth.json` is ignored when running `serve`.
74
99
 
75
100
  ## [0.1.0] — 2026-04-29
@@ -77,35 +102,37 @@ Format follows [Keep a Changelog](https://keepachangelog.com/en/1.1.0/).
77
102
  Initial release.
78
103
 
79
104
  ### Added
105
+
80
106
  - `spectral login` — interactive authentication. Verifies the team API key
81
107
  against the Aexol MCP backend before persisting credentials to
82
108
  `~/.spectral/config.json` (mode `0600`).
83
109
  - `spectral logout` — removes stored credentials. Idempotent.
84
- - `spectral serve` — always-on agent that connects this machine to the
85
- Aexol relay over a single long-lived WebSocket.
86
- - Registers a machine identity with your team on first run; reuses the
87
- issued JWT on subsequent runs.
110
+ - `spectral serve` — always-on agent that connects this machine to the Aexol
111
+ relay over a single long-lived WebSocket.
112
+ - Registers a machine identity with your team on first run; reuses the issued
113
+ JWT on subsequent runs.
88
114
  - Reconnects automatically with exponential backoff.
89
- - Graceful shutdown on `SIGINT` / `SIGTERM`: drains in-flight responses
90
- and closes the relay cleanly before exiting.
115
+ - Graceful shutdown on `SIGINT` / `SIGTERM`: drains in-flight responses and
116
+ closes the relay cleanly before exiting.
91
117
  - `--machine-name <name>` overrides the default `os.hostname()`.
92
118
  - Browser-driven sessions through the Aexol web UI:
93
119
  - Machine picker for switching between paired devices.
94
- - Multi-tab sync of project and session lifecycle changes (create,
95
- rename, delete) via a per-machine meta channel.
120
+ - Multi-tab sync of project and session lifecycle changes (create, rename,
121
+ delete) via a per-machine meta channel.
96
122
  - Stuck-turn watchdog re-enables the composer after 60s of silence.
97
123
  - Local-first storage: projects, sessions, and messages live in a SQLite
98
124
  database at `~/.spectral/sessions.db`. They never leave the machine.
99
- - Bundled Aexol MCP extension auto-loaded for the local TUI path so
100
- `spectral` (no subcommand) acts as a fully-configured pi session.
101
- - Plain pi pass-through: any flag that isn't a Spectral subcommand is
102
- forwarded verbatim to `pi`.
125
+ - Bundled Aexol MCP extension auto-loaded for the local TUI path so `spectral`
126
+ (no subcommand) acts as a fully-configured pi session.
127
+ - Plain pi pass-through: any flag that isn't a Spectral subcommand is forwarded
128
+ verbatim to `pi`.
103
129
 
104
130
  ### Notes
105
- - Backend storage is identity + machine metadata only. Message content,
106
- code, and model API keys never leave your machine.
107
- - One SQLite database per machine switching machines in the browser
108
- shows a different project list, by design.
109
- - Pi auth tokens (Anthropic, OpenAI, Cerebras, Google, custom endpoints)
110
- are managed by pi itself in `~/.pi/agent/auth.json` and are not read or
131
+
132
+ - Backend storage is identity + machine metadata only. Message content, code,
133
+ and model API keys never leave your machine.
134
+ - One SQLite database per machine — switching machines in the browser shows a
135
+ different project list, by design.
136
+ - Pi auth tokens (Anthropic, OpenAI, Cerebras, Google, custom endpoints) are
137
+ managed by pi itself in `~/.pi/agent/auth.json` and are not read or
111
138
  transmitted by Spectral.
package/README.md CHANGED
@@ -4,10 +4,10 @@
4
4
 
5
5
  ## What is Spectral?
6
6
 
7
- Spectral is the always-on coding agent for [Aexol](https://aexol.com). You install
8
- it on every machine you want to code on, run `spectral serve`, and your devices
9
- appear in the Aexol web UI as live agents you can drive from any browser tab — no
10
- port forwarding, no SSH, no exposing localhost.
7
+ Spectral is the always-on coding agent for [Aexol](https://aexol.com). You
8
+ install it on every machine you want to code on, run `spectral serve`, and your
9
+ devices appear in the Aexol web UI as live agents you can drive from any browser
10
+ tab — no port forwarding, no SSH, no exposing localhost.
11
11
 
12
12
  Under the hood, Spectral is a thin branded wrapper around
13
13
  [pi](https://www.npmjs.com/package/@mariozechner/pi-coding-agent) by Mario
@@ -33,9 +33,9 @@ Requires Node.js **20 or newer**.
33
33
  spectral login
34
34
  ```
35
35
 
36
- You'll be prompted for your Aexol MCP URL (defaults to `https://api.aexol.ai/mcp`)
37
- and a team API key (`sk-aexol-team-…`). Credentials are written to
38
- `~/.spectral/config.json` with mode `0600`.
36
+ You'll be prompted for your Aexol MCP URL (defaults to
37
+ `https://api.aexol.ai/mcp`) and a team API key (`sk-aexol-team-…`).
38
+ Credentials are written to `~/.spectral/config.json` with mode `0600`.
39
39
 
40
40
  2. **Start the agent**
41
41
 
@@ -59,44 +59,44 @@ Aexol MCP extension auto-loaded.
59
59
 
60
60
  ## Commands
61
61
 
62
- | Command | Description |
63
- |--------------------|-------------------------------------------------------------------------------|
64
- | `spectral` | Local TUI. Forwards all flags to pi; loads the bundled Aexol MCP extension. |
65
- | `spectral login` | Interactive auth. Verifies the key against the MCP backend and stores it. |
66
- | `spectral logout` | Removes `~/.spectral/config.json`. Idempotent. |
67
- | `spectral serve` | Connect this machine to the Aexol relay. Stays up; survives reconnects. |
62
+ | Command | Description |
63
+ | -------------------- | --------------------------------------------------------------------------- |
64
+ | `spectral` | Local TUI. Forwards all flags to pi; loads the bundled Aexol MCP extension. |
65
+ | `spectral login` | Interactive auth. Verifies the key against the MCP backend and stores it. |
66
+ | `spectral logout` | Removes `~/.spectral/config.json`. Idempotent. |
67
+ | `spectral serve` | Connect this machine to the Aexol relay. Stays up; survives reconnects. |
68
68
  | `spectral --version` | Print version. |
69
- | `spectral --help` | Print Spectral header, then pi's full help. |
69
+ | `spectral --help` | Print Spectral header, then pi's full help. |
70
70
 
71
71
  ### `spectral serve` flags
72
72
 
73
- | Flag | Description |
74
- |----------------------------|-------------------------------------------------------------------|
75
- | `--machine-name <name>` | Override the display name (default: `os.hostname()`). |
73
+ | Flag | Description |
74
+ | ----------------------- | ----------------------------------------------------- |
75
+ | `--machine-name <name>` | Override the display name (default: `os.hostname()`). |
76
76
 
77
- Anything that isn't a Spectral subcommand is forwarded verbatim to pi, so any
78
- pi flag you know works. Example: `spectral -p "summarize this repo"`.
77
+ Anything that isn't a Spectral subcommand is forwarded verbatim to pi, so any pi
78
+ flag you know works. Example: `spectral -p "summarize this repo"`.
79
79
 
80
80
  ## How it works
81
81
 
82
82
  ```
83
- ┌────────────────┐ ┌─────────────────┐ ┌────────────────┐
84
- │ Browser tab │────────▶│ Aexol backend │◀────────│ spectral serve │
85
- │ (Aexol web UI) │ WSS │ (relay) │ WSS │ (your machine) │
86
- └────────────────┘ └─────────────────┘ └────────────────┘
87
-
88
- identity + routing only
89
- (no message content, no code)
83
+ ┌────────────────┐ ┌─────────────────┐ ┌────────────────┐
84
+ │ Browser tab │────────▶│ Aexol backend │◀────────│ spectral serve │
85
+ │ (Aexol web UI) │ WSS │ (relay) │ WSS │ (your machine) │
86
+ └────────────────┘ └─────────────────┘ └────────────────┘
87
+
88
+ identity + routing only
89
+ (no message content, no code)
90
90
  ```
91
91
 
92
92
  - Your machine runs `spectral serve` and registers with the relay using a
93
93
  machine JWT issued at first run.
94
- - Browser sessions for that machine open a WebSocket to the backend. The
95
- backend forwards every frame to your machine and back — it never reads or
96
- stores message content.
97
- - All your local state — projects, sessions, messages, pi auth tokens —
98
- lives on the device. The backend only knows machine identity (id, display
99
- name, hostname, last-seen) and team membership.
94
+ - Browser sessions for that machine open a WebSocket to the backend. The backend
95
+ forwards every frame to your machine and back — it never reads or stores
96
+ message content.
97
+ - All your local state — projects, sessions, messages, pi auth tokens — lives on
98
+ the device. The backend only knows machine identity (id, display name,
99
+ hostname, last-seen) and team membership.
100
100
 
101
101
  ## How inference is routed
102
102
 
@@ -116,88 +116,86 @@ direct call to provider backend uses centralized API keys
116
116
  scoped to team's BaseModel whitelist
117
117
  ```
118
118
 
119
- - **`spectral` (CLI subprocess mode)** — pi runs as a normal subprocess and
120
- uses whatever provider keys you've stored locally in `~/.pi/agent/auth.json`
119
+ - **`spectral` (CLI subprocess mode)** — pi runs as a normal subprocess and uses
120
+ whatever provider keys you've stored locally in `~/.pi/agent/auth.json`
121
121
  (Anthropic, OpenAI, Cerebras, Google, custom OpenAI-compatible endpoints).
122
- Spectral never reads or transmits these. This is the classic local-only
123
- flow.
122
+ Spectral never reads or transmits these. This is the classic local-only flow.
124
123
  - **`spectral serve` (relay mode)** — pi runs in-process inside the serve
125
124
  daemon. All inference traffic is proxied through the Aexol backend's
126
125
  `/v1/messages` and `/v1/chat/completions` endpoints, authenticated with the
127
126
  per-machine machine JWT. The backend holds the upstream provider keys and
128
127
  enforces a per-team `BaseModel` whitelist server-side. The local
129
- `~/.pi/agent/auth.json` is **not read** in this mode (`AuthStorage.inMemory()`).
128
+ `~/.pi/agent/auth.json` is **not read** in this mode
129
+ (`AuthStorage.inMemory()`).
130
130
 
131
- Why two paths? `spectral serve` is designed for shared / managed machines
132
- where the team controls which models are usable and operators don't want
133
- provider keys sitting on every box. `spectral` (no subcommand) is the
134
- unmanaged TUI path and behaves like a vanilla pi install.
131
+ Why two paths? `spectral serve` is designed for shared / managed machines where
132
+ the team controls which models are usable and operators don't want provider keys
133
+ sitting on every box. `spectral` (no subcommand) is the unmanaged TUI path and
134
+ behaves like a vanilla pi install.
135
135
 
136
136
  ## Configuration
137
137
 
138
- | Path / variable | Purpose |
139
- |-------------------------------------------|--------------------------------------------------------|
140
- | `~/.spectral/config.json` | Aexol MCP URL + team API key. Created by `spectral login`. Mode `0600`. |
141
- | `~/.spectral/machine.json` | Machine identity + relay JWT. Created on first `spectral serve`. |
142
- | `~/.spectral/sessions.db` | Local SQLite for projects, sessions, messages. |
143
- | `SPECTRAL_CONFIG_DIR` | Override the directory above. |
144
- | `SPECTRAL_MCP_URL` | Override the MCP URL at login time. |
145
- | `SPECTRAL_BACKEND_URL` | Override the backend HTTP base for `spectral serve`. |
146
- | `SPECTRAL_RELAY_URL` | Override the derived relay WebSocket URL. |
147
-
148
- Pi's own auth state for the local TUI path (Anthropic, OpenAI, etc.) lives
149
- in `~/.pi/agent/auth.json` on the same machine. Spectral never reads it and
150
- never sends it anywhere. Note that `spectral serve` does **not** use this
151
- file — it routes inference through the backend proxy instead (see
138
+ | Path / variable | Purpose |
139
+ | -------------------------- | ----------------------------------------------------------------------- |
140
+ | `~/.spectral/config.json` | Aexol MCP URL + team API key. Created by `spectral login`. Mode `0600`. |
141
+ | `~/.spectral/machine.json` | Machine identity + relay JWT. Created on first `spectral serve`. |
142
+ | `~/.spectral/sessions.db` | Local SQLite for projects, sessions, messages. |
143
+ | `SPECTRAL_CONFIG_DIR` | Override the directory above. |
144
+ | `SPECTRAL_MCP_URL` | Override the MCP URL at login time. |
145
+ | `SPECTRAL_BACKEND_URL` | Override the backend HTTP base for `spectral serve`. |
146
+ | `SPECTRAL_RELAY_URL` | Override the derived relay WebSocket URL. |
147
+
148
+ Pi's own auth state for the local TUI path (Anthropic, OpenAI, etc.) lives in
149
+ `~/.pi/agent/auth.json` on the same machine. Spectral never reads it and never
150
+ sends it anywhere. Note that `spectral serve` does **not** use this file — it
151
+ routes inference through the backend proxy instead (see
152
152
  [How inference is routed](#how-inference-is-routed)).
153
153
 
154
154
  ## Multiple machines
155
155
 
156
156
  You can run `spectral serve` on as many machines as you like under one team —
157
- each gets its own machine identity and its own SQLite. The browser picker
158
- lists all of them; switching machines shows that machine's project list and
159
- session history. Switching is a hard context change: the previous selection
160
- is cleared so you don't accidentally talk to the wrong device.
157
+ each gets its own machine identity and its own SQLite. The browser picker lists
158
+ all of them; switching machines shows that machine's project list and session
159
+ history. Switching is a hard context change: the previous selection is cleared
160
+ so you don't accidentally talk to the wrong device.
161
161
 
162
162
  ## Troubleshooting
163
163
 
164
- - **My machine isn't showing up in the browser picker.**
165
- Make sure `spectral serve` is still running (it logs reconnect attempts to
166
- stderr). If `spectral login` was run a long time ago and the team key was
167
- rotated, re-run `spectral login`.
164
+ - **My machine isn't showing up in the browser picker.** Make sure
165
+ `spectral serve` is still running (it logs reconnect attempts to stderr). If
166
+ `spectral login` was run a long time ago and the team key was rotated, re-run
167
+ `spectral login`.
168
168
 
169
- - **WebSocket keeps disconnecting.**
170
- The relay client reconnects automatically with exponential backoff. Brief
171
- network blips are expected and handled. If the backoff loop is constant,
172
- check that your team API key is still valid and that your network allows
173
- outbound WebSocket connections to the configured backend.
169
+ - **WebSocket keeps disconnecting.** The relay client reconnects automatically
170
+ with exponential backoff. Brief network blips are expected and handled. If the
171
+ backoff loop is constant, check that your team API key is still valid and that
172
+ your network allows outbound WebSocket connections to the configured backend.
174
173
 
175
- - **`better-sqlite3` errors on first `spectral serve`.**
176
- This usually means the native module didn't compile during install. Try
174
+ - **`better-sqlite3` errors on first `spectral serve`.** This usually means the
175
+ native module didn't compile during install. Try
177
176
  `cd ~/.spectral && npm rebuild better-sqlite3`, or reinstall Spectral after
178
177
  ensuring you have a working C/C++ toolchain (`make`, a C compiler, Python).
179
178
 
180
- - **I want to revoke a machine.**
181
- Stop `spectral serve` on that device. Machine revocation from the Aexol UI
182
- is on the roadmap; today the most reliable approach is to rotate the team
183
- API key, which invalidates every machine's relay JWT for that team.
179
+ - **I want to revoke a machine.** Stop `spectral serve` on that device. Machine
180
+ revocation from the Aexol UI is on the roadmap; today the most reliable
181
+ approach is to rotate the team API key, which invalidates every machine's
182
+ relay JWT for that team.
184
183
 
185
184
  ## Privacy & data
186
185
 
187
186
  - **Model API keys**:
188
187
  - For `spectral` (CLI / TUI mode): live ONLY on the machine, in pi's own
189
188
  `~/.pi/agent/auth.json`. Never read or transmitted by Spectral.
190
- - For `spectral serve` (relay mode): live on the **backend**, not the
191
- machine. The local machine holds only its machine JWT; provider keys
192
- are managed centrally and scoped to the team's `BaseModel` whitelist.
189
+ - For `spectral serve` (relay mode): live on the **backend**, not the machine.
190
+ The local machine holds only its machine JWT; provider keys are managed
191
+ centrally and scoped to the team's `BaseModel` whitelist.
193
192
  - **Code, messages, file contents, generated artifacts** live ONLY on the
194
193
  machine, in `~/.spectral/sessions.db` and the working directory you point
195
194
  `spectral serve` at.
196
195
  - **The backend stores**: machine identity (id, display name, hostname,
197
196
  last-seen timestamps), the relay JWT issued at registration, and team
198
- membership. For `spectral serve`, it also holds the centralized provider
199
- API keys used to fulfil inference requests on behalf of authorized
200
- machines.
197
+ membership. For `spectral serve`, it also holds the centralized provider API
198
+ keys used to fulfil inference requests on behalf of authorized machines.
201
199
  - **The backend does not store**: prompts, responses, tool calls, files,
202
200
  artifacts, or any other message-channel content.
203
201
 
@@ -209,5 +207,5 @@ MIT — see [LICENSE](./LICENSE).
209
207
 
210
208
  - Website: <https://aexol.com>
211
209
  - Source is currently hosted in an internal Aexol repository; public mirror TBD.
212
- - Issues: please file them with your Aexol contact (a public issue tracker
213
- is not yet available).
210
+ - Issues: please file them with your Aexol contact (a public issue tracker is
211
+ not yet available).
@@ -0,0 +1,37 @@
1
+ /**
2
+ * Agent discovery and configuration for the subagent delegation extension.
3
+ *
4
+ * Agent definitions are markdown files with YAML frontmatter:
5
+ *
6
+ * ---
7
+ * name: my-agent
8
+ * description: What this agent does
9
+ * tools: read, grep, find, ls
10
+ * model: claude-haiku-4-5
11
+ * ---
12
+ * System prompt for the agent goes here.
13
+ *
14
+ * Locations:
15
+ * ~/.spectral/agent/agents/*.md — User-level (always loaded)
16
+ * .spectral/agents/*.md — Project-level (opt-in via agentScope)
17
+ */
18
+ export type AgentScope = "user" | "project" | "both";
19
+ export interface AgentConfig {
20
+ name: string;
21
+ description: string;
22
+ tools?: string[];
23
+ model?: string;
24
+ systemPrompt: string;
25
+ source: "user" | "project";
26
+ filePath: string;
27
+ }
28
+ export interface AgentDiscoveryResult {
29
+ agents: AgentConfig[];
30
+ projectAgentsDir: string | null;
31
+ }
32
+ export declare function discoverAgents(cwd: string, scope: AgentScope): AgentDiscoveryResult;
33
+ export declare function formatAgentList(agents: AgentConfig[], maxItems: number): {
34
+ text: string;
35
+ remaining: number;
36
+ };
37
+ //# sourceMappingURL=agents.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"agents.d.ts","sourceRoot":"","sources":["../../src/agent/agents.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;GAgBG;AAMH,MAAM,MAAM,UAAU,GAAG,MAAM,GAAG,SAAS,GAAG,MAAM,CAAC;AAErD,MAAM,WAAW,WAAW;IAC1B,IAAI,EAAE,MAAM,CAAC;IACb,WAAW,EAAE,MAAM,CAAC;IACpB,KAAK,CAAC,EAAE,MAAM,EAAE,CAAC;IACjB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,YAAY,EAAE,MAAM,CAAC;IACrB,MAAM,EAAE,MAAM,GAAG,SAAS,CAAC;IAC3B,QAAQ,EAAE,MAAM,CAAC;CAClB;AAED,MAAM,WAAW,oBAAoB;IACnC,MAAM,EAAE,WAAW,EAAE,CAAC;IACtB,gBAAgB,EAAE,MAAM,GAAG,IAAI,CAAC;CACjC;AAyED,wBAAgB,cAAc,CAAC,GAAG,EAAE,MAAM,EAAE,KAAK,EAAE,UAAU,GAAG,oBAAoB,CAoBnF;AAED,wBAAgB,eAAe,CAC7B,MAAM,EAAE,WAAW,EAAE,EACrB,QAAQ,EAAE,MAAM,GACf;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,SAAS,EAAE,MAAM,CAAA;CAAE,CAQrC"}
@@ -0,0 +1,29 @@
1
+ /**
2
+ * Subagent Delegation Extension for Spectral
3
+ *
4
+ * Registers a `subagent` tool that allows the coding agent to delegate tasks
5
+ * to specialized sub-agents running in-process via `agentLoop()`.
6
+ *
7
+ * Each subagent invocation runs with its own fresh AgentContext (isolated
8
+ * context window), keeping the main conversation lean and focused.
9
+ *
10
+ * Three execution modes:
11
+ * - Single: { agent: "name", task: "..." }
12
+ * - Parallel: { tasks: [{ agent, task }, ...] } (max 8, 4 concurrent)
13
+ * - Chain: { chain: [{ agent, task: "... {previous} ..." }, ...] }
14
+ *
15
+ * Agent definitions live as markdown files with YAML frontmatter:
16
+ * - ~/.spectral/agent/agents/*.md (user-level, always loaded)
17
+ * - .spectral/agents/*.md (project-level, opt-in via agentScope)
18
+ *
19
+ * Subagents use an in-process `agentLoop()` for:
20
+ * - Clean context isolation (fresh messages array)
21
+ * - Combined system prompt (main agent + subagent-specific instructions)
22
+ * - Tool filtering (only the tools specified in agent config)
23
+ * - Model selection (session model preferred, agent-configured as fallback)
24
+ * - Signal propagation (abort passthrough)
25
+ * - Access to observational memory via the recall tool
26
+ */
27
+ import { type ExtensionAPI } from "../sdk/coding-agent/index.js";
28
+ export default function subagentExtension(pi: ExtensionAPI): void;
29
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/agent/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;GAyBG;AAWH,OAAO,EACN,KAAK,YAAY,EAEjB,MAAM,8BAA8B,CAAC;AAqetC,MAAM,CAAC,OAAO,UAAU,iBAAiB,CAAC,EAAE,EAAE,YAAY,GAAG,IAAI,CAqThE"}
package/dist/cli.d.ts ADDED
@@ -0,0 +1,17 @@
1
+ #!/usr/bin/env node
2
+ /**
3
+ * @aexol/spectral — Coding agent that never sleeps
4
+ *
5
+ * Headless CLI wrapper — no TUI mode supported.
6
+ *
7
+ * Subcommand routing:
8
+ * - `spectral login` → interactive auth flow (writes ~/.spectral/config.json)
9
+ * - `spectral logout` → deletes ~/.spectral/config.json
10
+ * - `spectral serve` → start the Aexol relay WebSocket server (headless)
11
+ * - `spectral bind` → link directory to an Aexol Studio project
12
+ * - `spectral unbind` → remove Aexol Studio project binding
13
+ * - `spectral --version` / `--help` → branded short-circuits, no auth needed.
14
+ * - anything else → error with usage hint.
15
+ */
16
+ export {};
17
+ //# sourceMappingURL=cli.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"cli.d.ts","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":";AACA;;;;;;;;;;;;;GAaG"}
@@ -0,0 +1,12 @@
1
+ /**
2
+ * `spectral bind` — link the current directory to an Aexol Studio project.
3
+ *
4
+ * Usage:
5
+ * spectral bind <project-id> [--team-id <id>] [--name <name>] [--force]
6
+ *
7
+ * Writes `.aexol/aexol.jsonc` so that `spectral` knows which Studio project
8
+ * this repository belongs to. By default it refuses to overwrite an existing
9
+ * binding; pass `--force` to rebind.
10
+ */
11
+ export declare function runBind(args: string[]): Promise<void>;
12
+ //# sourceMappingURL=bind.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"bind.d.ts","sourceRoot":"","sources":["../../src/commands/bind.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAUH,wBAAsB,OAAO,CAAC,IAAI,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC,IAAI,CAAC,CAyF3D"}
@@ -0,0 +1,15 @@
1
+ /**
2
+ * OAuth login for CLI machine ownership (called from interactive `spectral login`).
3
+ *
4
+ * Flow:
5
+ * 1. Start a temporary HTTP server on a random localhost port.
6
+ * 2. Open the browser to `https://aexol.ai/cli-auth?port=<PORT>`.
7
+ * 3. Wait for the browser to redirect to `http://localhost:<PORT>?token=<JWT>`.
8
+ * 4. Save the token to `~/.spectral/config.json` as `userJwt`.
9
+ * 5. Shutdown the HTTP server and exit.
10
+ *
11
+ * On failure (timeout, network error, user closes browser), the server shuts
12
+ * down after a configurable timeout (default 120s).
13
+ */
14
+ export declare function runLoginOAuth(): Promise<void>;
15
+ //# sourceMappingURL=login-oauth.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"login-oauth.d.ts","sourceRoot":"","sources":["../../src/commands/login-oauth.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;GAYG;AAsEH,wBAAsB,aAAa,IAAI,OAAO,CAAC,IAAI,CAAC,CA4EnD"}
@@ -0,0 +1,37 @@
1
+ /**
2
+ * `spectral login` — interactive authentication against the Aexol MCP backend.
3
+ *
4
+ * Flow:
5
+ * 1. Choose auth method: Team API key or OAuth (browser).
6
+ * 2a. API key: prompt for team API key (masked input). Verify the
7
+ * sk-aexol-team- prefix locally so we don't send obviously-wrong
8
+ * credentials. The API URL is taken from env or the hard default.
9
+ * 2b. OAuth: open browser for Aexol Studio authorization.
10
+ * 3. Verify reachability + auth by calling tools/list against the URL.
11
+ * 4. On success: persist to ~/.spectral/config.json (mode 0600).
12
+ *
13
+ * Exits non-zero on any failure so shell scripts can detect it.
14
+ *
15
+ * NOTE: pure logic lives in `performLogin` — the interactive `runLogin`
16
+ * wrapper delegates to it after collecting prompts. Tests target
17
+ * `performLogin` directly so we don't have to drive `@inquirer/prompts`.
18
+ */
19
+ export interface PerformLoginOptions {
20
+ apiUrl: string;
21
+ teamApiKey: string;
22
+ }
23
+ export interface PerformLoginResult {
24
+ toolCount: number;
25
+ }
26
+ /**
27
+ * Pure login logic. Throws `Error` with one of these stable message prefixes:
28
+ * - "Invalid API key prefix" — local validation failed
29
+ * - "Invalid token" — server returned 401/403
30
+ * - "Authentication failed" — server rejected the request (other 4xx/5xx)
31
+ * - "Could not reach" — network error (DNS, refused connection, timeout)
32
+ *
33
+ * Tests assert on these substrings.
34
+ */
35
+ export declare function performLogin(opts: PerformLoginOptions): Promise<PerformLoginResult>;
36
+ export declare function runLogin(): Promise<void>;
37
+ //# sourceMappingURL=login.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"login.d.ts","sourceRoot":"","sources":["../../src/commands/login.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;GAiBG;AAgBH,MAAM,WAAW,mBAAmB;IAClC,MAAM,EAAE,MAAM,CAAC;IACf,UAAU,EAAE,MAAM,CAAC;CACpB;AAED,MAAM,WAAW,kBAAkB;IACjC,SAAS,EAAE,MAAM,CAAC;CACnB;AAED;;;;;;;;GAQG;AACH,wBAAsB,YAAY,CAAC,IAAI,EAAE,mBAAmB,GAAG,OAAO,CAAC,kBAAkB,CAAC,CAqCzF;AAED,wBAAsB,QAAQ,IAAI,OAAO,CAAC,IAAI,CAAC,CAyE9C"}
@@ -0,0 +1,8 @@
1
+ /**
2
+ * `spectral logout` — remove the persisted Aexol credentials.
3
+ *
4
+ * Idempotent: missing config is not an error. Always exits 0 unless the
5
+ * filesystem itself misbehaves (in which case we surface the OS error).
6
+ */
7
+ export declare function runLogout(): Promise<void>;
8
+ //# sourceMappingURL=logout.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"logout.d.ts","sourceRoot":"","sources":["../../src/commands/logout.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAMH,wBAAsB,SAAS,IAAI,OAAO,CAAC,IAAI,CAAC,CAa/C"}