@slaw-ai/server 2026.611.0

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 (1198) hide show
  1. package/LICENSE +26 -0
  2. package/dist/adapters/builtin-adapter-types.d.ts +5 -0
  3. package/dist/adapters/builtin-adapter-types.d.ts.map +1 -0
  4. package/dist/adapters/builtin-adapter-types.js +18 -0
  5. package/dist/adapters/builtin-adapter-types.js.map +1 -0
  6. package/dist/adapters/codex-models.d.ts +5 -0
  7. package/dist/adapters/codex-models.d.ts.map +1 -0
  8. package/dist/adapters/codex-models.js +105 -0
  9. package/dist/adapters/codex-models.js.map +1 -0
  10. package/dist/adapters/cursor-models.d.ts +13 -0
  11. package/dist/adapters/cursor-models.d.ts.map +1 -0
  12. package/dist/adapters/cursor-models.js +148 -0
  13. package/dist/adapters/cursor-models.js.map +1 -0
  14. package/dist/adapters/http/execute.d.ts +3 -0
  15. package/dist/adapters/http/execute.d.ts.map +1 -0
  16. package/dist/adapters/http/execute.js +51 -0
  17. package/dist/adapters/http/execute.js.map +1 -0
  18. package/dist/adapters/http/execute.test.d.ts +2 -0
  19. package/dist/adapters/http/execute.test.d.ts.map +1 -0
  20. package/dist/adapters/http/execute.test.js +40 -0
  21. package/dist/adapters/http/execute.test.js.map +1 -0
  22. package/dist/adapters/http/index.d.ts +3 -0
  23. package/dist/adapters/http/index.d.ts.map +1 -0
  24. package/dist/adapters/http/index.js +20 -0
  25. package/dist/adapters/http/index.js.map +1 -0
  26. package/dist/adapters/http/test.d.ts +3 -0
  27. package/dist/adapters/http/test.d.ts.map +1 -0
  28. package/dist/adapters/http/test.js +106 -0
  29. package/dist/adapters/http/test.js.map +1 -0
  30. package/dist/adapters/index.d.ts +4 -0
  31. package/dist/adapters/index.d.ts.map +1 -0
  32. package/dist/adapters/index.js +3 -0
  33. package/dist/adapters/index.js.map +1 -0
  34. package/dist/adapters/plugin-loader.d.ts +28 -0
  35. package/dist/adapters/plugin-loader.d.ts.map +1 -0
  36. package/dist/adapters/plugin-loader.js +196 -0
  37. package/dist/adapters/plugin-loader.js.map +1 -0
  38. package/dist/adapters/process/execute.d.ts +3 -0
  39. package/dist/adapters/process/execute.d.ts.map +1 -0
  40. package/dist/adapters/process/execute.js +70 -0
  41. package/dist/adapters/process/execute.js.map +1 -0
  42. package/dist/adapters/process/index.d.ts +3 -0
  43. package/dist/adapters/process/index.d.ts.map +1 -0
  44. package/dist/adapters/process/index.js +23 -0
  45. package/dist/adapters/process/index.js.map +1 -0
  46. package/dist/adapters/process/test.d.ts +3 -0
  47. package/dist/adapters/process/test.d.ts.map +1 -0
  48. package/dist/adapters/process/test.js +77 -0
  49. package/dist/adapters/process/test.js.map +1 -0
  50. package/dist/adapters/registry.d.ts +69 -0
  51. package/dist/adapters/registry.d.ts.map +1 -0
  52. package/dist/adapters/registry.js +598 -0
  53. package/dist/adapters/registry.js.map +1 -0
  54. package/dist/adapters/types.d.ts +2 -0
  55. package/dist/adapters/types.d.ts.map +1 -0
  56. package/dist/adapters/types.js +2 -0
  57. package/dist/adapters/types.js.map +1 -0
  58. package/dist/adapters/utils.d.ts +43 -0
  59. package/dist/adapters/utils.d.ts.map +1 -0
  60. package/dist/adapters/utils.js +52 -0
  61. package/dist/adapters/utils.js.map +1 -0
  62. package/dist/agent-auth-jwt.d.ts +14 -0
  63. package/dist/agent-auth-jwt.d.ts.map +1 -0
  64. package/dist/agent-auth-jwt.js +117 -0
  65. package/dist/agent-auth-jwt.js.map +1 -0
  66. package/dist/app.d.ts +39 -0
  67. package/dist/app.d.ts.map +1 -0
  68. package/dist/app.js +386 -0
  69. package/dist/app.js.map +1 -0
  70. package/dist/attachment-types.d.ts +23 -0
  71. package/dist/attachment-types.d.ts.map +1 -0
  72. package/dist/attachment-types.js +98 -0
  73. package/dist/attachment-types.js.map +1 -0
  74. package/dist/auth/better-auth.d.ts +40 -0
  75. package/dist/auth/better-auth.d.ts.map +1 -0
  76. package/dist/auth/better-auth.js +148 -0
  77. package/dist/auth/better-auth.js.map +1 -0
  78. package/dist/config-file.d.ts +24 -0
  79. package/dist/config-file.d.ts.map +1 -0
  80. package/dist/config-file.js +73 -0
  81. package/dist/config-file.js.map +1 -0
  82. package/dist/config.d.ts +44 -0
  83. package/dist/config.d.ts.map +1 -0
  84. package/dist/config.js +247 -0
  85. package/dist/config.js.map +1 -0
  86. package/dist/dev-runner-worktree.d.ts +15 -0
  87. package/dist/dev-runner-worktree.d.ts.map +1 -0
  88. package/dist/dev-runner-worktree.js +101 -0
  89. package/dist/dev-runner-worktree.js.map +1 -0
  90. package/dist/dev-server-status.d.ts +33 -0
  91. package/dist/dev-server-status.d.ts.map +1 -0
  92. package/dist/dev-server-status.js +89 -0
  93. package/dist/dev-server-status.js.map +1 -0
  94. package/dist/dev-watch-ignore.d.ts +2 -0
  95. package/dist/dev-watch-ignore.d.ts.map +1 -0
  96. package/dist/dev-watch-ignore.js +36 -0
  97. package/dist/dev-watch-ignore.js.map +1 -0
  98. package/dist/errors.d.ts +12 -0
  99. package/dist/errors.d.ts.map +1 -0
  100. package/dist/errors.js +28 -0
  101. package/dist/errors.js.map +1 -0
  102. package/dist/first-admin-claim.d.ts +17 -0
  103. package/dist/first-admin-claim.d.ts.map +1 -0
  104. package/dist/first-admin-claim.js +30 -0
  105. package/dist/first-admin-claim.js.map +1 -0
  106. package/dist/home-paths.d.ts +15 -0
  107. package/dist/home-paths.d.ts.map +1 -0
  108. package/dist/home-paths.js +48 -0
  109. package/dist/home-paths.js.map +1 -0
  110. package/dist/http/body-limits.d.ts +4 -0
  111. package/dist/http/body-limits.d.ts.map +1 -0
  112. package/dist/http/body-limits.js +4 -0
  113. package/dist/http/body-limits.js.map +1 -0
  114. package/dist/index.d.ts +10 -0
  115. package/dist/index.d.ts.map +1 -0
  116. package/dist/index.js +786 -0
  117. package/dist/index.js.map +1 -0
  118. package/dist/instance-claim.d.ts +23 -0
  119. package/dist/instance-claim.d.ts.map +1 -0
  120. package/dist/instance-claim.js +126 -0
  121. package/dist/instance-claim.js.map +1 -0
  122. package/dist/lib/join-request-dedupe.d.ts +11 -0
  123. package/dist/lib/join-request-dedupe.d.ts.map +1 -0
  124. package/dist/lib/join-request-dedupe.js +49 -0
  125. package/dist/lib/join-request-dedupe.js.map +1 -0
  126. package/dist/log-redaction.d.ts +11 -0
  127. package/dist/log-redaction.d.ts.map +1 -0
  128. package/dist/log-redaction.js +122 -0
  129. package/dist/log-redaction.js.map +1 -0
  130. package/dist/middleware/auth.d.ts +12 -0
  131. package/dist/middleware/auth.d.ts.map +1 -0
  132. package/dist/middleware/auth.js +302 -0
  133. package/dist/middleware/auth.js.map +1 -0
  134. package/dist/middleware/error-handler.d.ts +17 -0
  135. package/dist/middleware/error-handler.d.ts.map +1 -0
  136. package/dist/middleware/error-handler.js +46 -0
  137. package/dist/middleware/error-handler.js.map +1 -0
  138. package/dist/middleware/http-log-policy.d.ts +2 -0
  139. package/dist/middleware/http-log-policy.d.ts.map +1 -0
  140. package/dist/middleware/http-log-policy.js +52 -0
  141. package/dist/middleware/http-log-policy.js.map +1 -0
  142. package/dist/middleware/index.d.ts +4 -0
  143. package/dist/middleware/index.d.ts.map +1 -0
  144. package/dist/middleware/index.js +4 -0
  145. package/dist/middleware/index.js.map +1 -0
  146. package/dist/middleware/logger.d.ts +4 -0
  147. package/dist/middleware/logger.d.ts.map +1 -0
  148. package/dist/middleware/logger.js +92 -0
  149. package/dist/middleware/logger.js.map +1 -0
  150. package/dist/middleware/operator-mutation-guard.d.ts +3 -0
  151. package/dist/middleware/operator-mutation-guard.d.ts.map +1 -0
  152. package/dist/middleware/operator-mutation-guard.js +70 -0
  153. package/dist/middleware/operator-mutation-guard.js.map +1 -0
  154. package/dist/middleware/private-hostname-guard.d.ts +11 -0
  155. package/dist/middleware/private-hostname-guard.d.ts.map +1 -0
  156. package/dist/middleware/private-hostname-guard.js +78 -0
  157. package/dist/middleware/private-hostname-guard.js.map +1 -0
  158. package/dist/middleware/validate.d.ts +4 -0
  159. package/dist/middleware/validate.d.ts.map +1 -0
  160. package/dist/middleware/validate.js +7 -0
  161. package/dist/middleware/validate.js.map +1 -0
  162. package/dist/onboarding-assets/default/AGENTS.md +18 -0
  163. package/dist/onboarding-assets/squad_lead/AGENTS.md +61 -0
  164. package/dist/onboarding-assets/squad_lead/HEARTBEAT.md +85 -0
  165. package/dist/onboarding-assets/squad_lead/SOUL.md +33 -0
  166. package/dist/onboarding-assets/squad_lead/TOOLS.md +3 -0
  167. package/dist/paths.d.ts +3 -0
  168. package/dist/paths.d.ts.map +1 -0
  169. package/dist/paths.js +31 -0
  170. package/dist/paths.js.map +1 -0
  171. package/dist/realtime/live-events-ws.d.ts +28 -0
  172. package/dist/realtime/live-events-ws.d.ts.map +1 -0
  173. package/dist/realtime/live-events-ws.js +187 -0
  174. package/dist/realtime/live-events-ws.js.map +1 -0
  175. package/dist/redaction.d.ts +5 -0
  176. package/dist/redaction.d.ts.map +1 -0
  177. package/dist/redaction.js +125 -0
  178. package/dist/redaction.js.map +1 -0
  179. package/dist/routes/access.d.ts +75 -0
  180. package/dist/routes/access.d.ts.map +1 -0
  181. package/dist/routes/access.js +3070 -0
  182. package/dist/routes/access.js.map +1 -0
  183. package/dist/routes/activity.d.ts +3 -0
  184. package/dist/routes/activity.d.ts.map +1 -0
  185. package/dist/routes/activity.js +90 -0
  186. package/dist/routes/activity.js.map +1 -0
  187. package/dist/routes/adapters.d.ts +16 -0
  188. package/dist/routes/adapters.d.ts.map +1 -0
  189. package/dist/routes/adapters.js +539 -0
  190. package/dist/routes/adapters.js.map +1 -0
  191. package/dist/routes/agents.d.ts +6 -0
  192. package/dist/routes/agents.d.ts.map +1 -0
  193. package/dist/routes/agents.js +2733 -0
  194. package/dist/routes/agents.js.map +1 -0
  195. package/dist/routes/approvals.d.ts +6 -0
  196. package/dist/routes/approvals.d.ts.map +1 -0
  197. package/dist/routes/approvals.js +300 -0
  198. package/dist/routes/approvals.js.map +1 -0
  199. package/dist/routes/assets.d.ts +4 -0
  200. package/dist/routes/assets.d.ts.map +1 -0
  201. package/dist/routes/assets.js +309 -0
  202. package/dist/routes/assets.js.map +1 -0
  203. package/dist/routes/auth.d.ts +3 -0
  204. package/dist/routes/auth.d.ts.map +1 -0
  205. package/dist/routes/auth.js +82 -0
  206. package/dist/routes/auth.js.map +1 -0
  207. package/dist/routes/authz.d.ts +19 -0
  208. package/dist/routes/authz.d.ts.map +1 -0
  209. package/dist/routes/authz.js +75 -0
  210. package/dist/routes/authz.js.map +1 -0
  211. package/dist/routes/botfather.d.ts +9 -0
  212. package/dist/routes/botfather.d.ts.map +1 -0
  213. package/dist/routes/botfather.js +127 -0
  214. package/dist/routes/botfather.js.map +1 -0
  215. package/dist/routes/cloud-upstreams.d.ts +5 -0
  216. package/dist/routes/cloud-upstreams.d.ts.map +1 -0
  217. package/dist/routes/cloud-upstreams.js +103 -0
  218. package/dist/routes/cloud-upstreams.js.map +1 -0
  219. package/dist/routes/costs.d.ts +11 -0
  220. package/dist/routes/costs.d.ts.map +1 -0
  221. package/dist/routes/costs.js +285 -0
  222. package/dist/routes/costs.js.map +1 -0
  223. package/dist/routes/dashboard.d.ts +3 -0
  224. package/dist/routes/dashboard.d.ts.map +1 -0
  225. package/dist/routes/dashboard.js +15 -0
  226. package/dist/routes/dashboard.js.map +1 -0
  227. package/dist/routes/environment-selection.d.ts +13 -0
  228. package/dist/routes/environment-selection.d.ts.map +1 -0
  229. package/dist/routes/environment-selection.js +30 -0
  230. package/dist/routes/environment-selection.js.map +1 -0
  231. package/dist/routes/environments.d.ts +6 -0
  232. package/dist/routes/environments.d.ts.map +1 -0
  233. package/dist/routes/environments.js +414 -0
  234. package/dist/routes/environments.js.map +1 -0
  235. package/dist/routes/execution-workspaces.d.ts +3 -0
  236. package/dist/routes/execution-workspaces.d.ts.map +1 -0
  237. package/dist/routes/execution-workspaces.js +537 -0
  238. package/dist/routes/execution-workspaces.js.map +1 -0
  239. package/dist/routes/goals.d.ts +3 -0
  240. package/dist/routes/goals.d.ts.map +1 -0
  241. package/dist/routes/goals.js +95 -0
  242. package/dist/routes/goals.js.map +1 -0
  243. package/dist/routes/health.d.ts +9 -0
  244. package/dist/routes/health.d.ts.map +1 -0
  245. package/dist/routes/health.js +143 -0
  246. package/dist/routes/health.js.map +1 -0
  247. package/dist/routes/inbox-dismissals.d.ts +3 -0
  248. package/dist/routes/inbox-dismissals.d.ts.map +1 -0
  249. package/dist/routes/inbox-dismissals.js +58 -0
  250. package/dist/routes/inbox-dismissals.js.map +1 -0
  251. package/dist/routes/index.d.ts +24 -0
  252. package/dist/routes/index.d.ts.map +1 -0
  253. package/dist/routes/index.js +24 -0
  254. package/dist/routes/index.js.map +1 -0
  255. package/dist/routes/instance-database-backups.d.ts +15 -0
  256. package/dist/routes/instance-database-backups.d.ts.map +1 -0
  257. package/dist/routes/instance-database-backups.js +12 -0
  258. package/dist/routes/instance-database-backups.js.map +1 -0
  259. package/dist/routes/instance-settings.d.ts +3 -0
  260. package/dist/routes/instance-settings.d.ts.map +1 -0
  261. package/dist/routes/instance-settings.js +110 -0
  262. package/dist/routes/instance-settings.js.map +1 -0
  263. package/dist/routes/issue-tree-control.d.ts +3 -0
  264. package/dist/routes/issue-tree-control.d.ts.map +1 -0
  265. package/dist/routes/issue-tree-control.js +373 -0
  266. package/dist/routes/issue-tree-control.js.map +1 -0
  267. package/dist/routes/issues-checkout-wakeup.d.ts +9 -0
  268. package/dist/routes/issues-checkout-wakeup.d.ts.map +1 -0
  269. package/dist/routes/issues-checkout-wakeup.js +12 -0
  270. package/dist/routes/issues-checkout-wakeup.js.map +1 -0
  271. package/dist/routes/issues.d.ts +15 -0
  272. package/dist/routes/issues.d.ts.map +1 -0
  273. package/dist/routes/issues.js +5276 -0
  274. package/dist/routes/issues.js.map +1 -0
  275. package/dist/routes/llms.d.ts +3 -0
  276. package/dist/routes/llms.d.ts.map +1 -0
  277. package/dist/routes/llms.js +80 -0
  278. package/dist/routes/llms.js.map +1 -0
  279. package/dist/routes/openapi.d.ts +4 -0
  280. package/dist/routes/openapi.d.ts.map +1 -0
  281. package/dist/routes/openapi.js +3284 -0
  282. package/dist/routes/openapi.js.map +1 -0
  283. package/dist/routes/org-chart-svg.d.ts +25 -0
  284. package/dist/routes/org-chart-svg.d.ts.map +1 -0
  285. package/dist/routes/org-chart-svg.js +656 -0
  286. package/dist/routes/org-chart-svg.js.map +1 -0
  287. package/dist/routes/plugin-ui-static.d.ts +69 -0
  288. package/dist/routes/plugin-ui-static.d.ts.map +1 -0
  289. package/dist/routes/plugin-ui-static.js +411 -0
  290. package/dist/routes/plugin-ui-static.js.map +1 -0
  291. package/dist/routes/plugins.d.ts +121 -0
  292. package/dist/routes/plugins.d.ts.map +1 -0
  293. package/dist/routes/plugins.js +2390 -0
  294. package/dist/routes/plugins.js.map +1 -0
  295. package/dist/routes/projects.d.ts +3 -0
  296. package/dist/routes/projects.d.ts.map +1 -0
  297. package/dist/routes/projects.js +566 -0
  298. package/dist/routes/projects.js.map +1 -0
  299. package/dist/routes/resource-memberships.d.ts +3 -0
  300. package/dist/routes/resource-memberships.d.ts.map +1 -0
  301. package/dist/routes/resource-memberships.js +97 -0
  302. package/dist/routes/resource-memberships.js.map +1 -0
  303. package/dist/routes/routines.d.ts +6 -0
  304. package/dist/routes/routines.d.ts.map +1 -0
  305. package/dist/routes/routines.js +411 -0
  306. package/dist/routes/routines.js.map +1 -0
  307. package/dist/routes/secrets.d.ts +3 -0
  308. package/dist/routes/secrets.d.ts.map +1 -0
  309. package/dist/routes/secrets.js +419 -0
  310. package/dist/routes/secrets.js.map +1 -0
  311. package/dist/routes/sidebar-badges.d.ts +3 -0
  312. package/dist/routes/sidebar-badges.d.ts.map +1 -0
  313. package/dist/routes/sidebar-badges.js +68 -0
  314. package/dist/routes/sidebar-badges.js.map +1 -0
  315. package/dist/routes/sidebar-preferences.d.ts +3 -0
  316. package/dist/routes/sidebar-preferences.d.ts.map +1 -0
  317. package/dist/routes/sidebar-preferences.js +63 -0
  318. package/dist/routes/sidebar-preferences.js.map +1 -0
  319. package/dist/routes/squad-import-paths.d.ts +3 -0
  320. package/dist/routes/squad-import-paths.d.ts.map +1 -0
  321. package/dist/routes/squad-import-paths.js +3 -0
  322. package/dist/routes/squad-import-paths.js.map +1 -0
  323. package/dist/routes/squad-skills.d.ts +3 -0
  324. package/dist/routes/squad-skills.d.ts.map +1 -0
  325. package/dist/routes/squad-skills.js +366 -0
  326. package/dist/routes/squad-skills.js.map +1 -0
  327. package/dist/routes/squads.d.ts +4 -0
  328. package/dist/routes/squads.d.ts.map +1 -0
  329. package/dist/routes/squads.js +450 -0
  330. package/dist/routes/squads.js.map +1 -0
  331. package/dist/routes/user-profiles.d.ts +3 -0
  332. package/dist/routes/user-profiles.d.ts.map +1 -0
  333. package/dist/routes/user-profiles.js +337 -0
  334. package/dist/routes/user-profiles.js.map +1 -0
  335. package/dist/routes/workspace-command-authz.d.ts +14 -0
  336. package/dist/routes/workspace-command-authz.d.ts.map +1 -0
  337. package/dist/routes/workspace-command-authz.js +83 -0
  338. package/dist/routes/workspace-command-authz.js.map +1 -0
  339. package/dist/routes/workspace-runtime-service-authz.d.ts +12 -0
  340. package/dist/routes/workspace-runtime-service-authz.d.ts.map +1 -0
  341. package/dist/routes/workspace-runtime-service-authz.js +96 -0
  342. package/dist/routes/workspace-runtime-service-authz.js.map +1 -0
  343. package/dist/runtime-api.d.ts +19 -0
  344. package/dist/runtime-api.d.ts.map +1 -0
  345. package/dist/runtime-api.js +137 -0
  346. package/dist/runtime-api.js.map +1 -0
  347. package/dist/secrets/aws-secrets-manager-provider.d.ts +87 -0
  348. package/dist/secrets/aws-secrets-manager-provider.d.ts.map +1 -0
  349. package/dist/secrets/aws-secrets-manager-provider.js +964 -0
  350. package/dist/secrets/aws-secrets-manager-provider.js.map +1 -0
  351. package/dist/secrets/configured-provider.d.ts +3 -0
  352. package/dist/secrets/configured-provider.d.ts.map +1 -0
  353. package/dist/secrets/configured-provider.js +8 -0
  354. package/dist/secrets/configured-provider.js.map +1 -0
  355. package/dist/secrets/external-stub-providers.d.ts +5 -0
  356. package/dist/secrets/external-stub-providers.d.ts.map +1 -0
  357. package/dist/secrets/external-stub-providers.js +71 -0
  358. package/dist/secrets/external-stub-providers.js.map +1 -0
  359. package/dist/secrets/local-encrypted-provider.d.ts +3 -0
  360. package/dist/secrets/local-encrypted-provider.d.ts.map +1 -0
  361. package/dist/secrets/local-encrypted-provider.js +244 -0
  362. package/dist/secrets/local-encrypted-provider.js.map +1 -0
  363. package/dist/secrets/provider-registry.d.ts +6 -0
  364. package/dist/secrets/provider-registry.d.ts.map +1 -0
  365. package/dist/secrets/provider-registry.js +24 -0
  366. package/dist/secrets/provider-registry.js.map +1 -0
  367. package/dist/secrets/types.d.ts +138 -0
  368. package/dist/secrets/types.d.ts.map +1 -0
  369. package/dist/secrets/types.js +36 -0
  370. package/dist/secrets/types.js.map +1 -0
  371. package/dist/services/access.d.ts +184 -0
  372. package/dist/services/access.d.ts.map +1 -0
  373. package/dist/services/access.js +542 -0
  374. package/dist/services/access.js.map +1 -0
  375. package/dist/services/activity-log.d.ts +19 -0
  376. package/dist/services/activity-log.d.ts.map +1 -0
  377. package/dist/services/activity-log.js +99 -0
  378. package/dist/services/activity-log.js.map +1 -0
  379. package/dist/services/activity.d.ts +462 -0
  380. package/dist/services/activity.d.ts.map +1 -0
  381. package/dist/services/activity.js +443 -0
  382. package/dist/services/activity.js.map +1 -0
  383. package/dist/services/adapter-plugin-store.d.ts +36 -0
  384. package/dist/services/adapter-plugin-store.d.ts.map +1 -0
  385. package/dist/services/adapter-plugin-store.js +154 -0
  386. package/dist/services/adapter-plugin-store.js.map +1 -0
  387. package/dist/services/agent-instructions.d.ts +91 -0
  388. package/dist/services/agent-instructions.d.ts.map +1 -0
  389. package/dist/services/agent-instructions.js +580 -0
  390. package/dist/services/agent-instructions.js.map +1 -0
  391. package/dist/services/agent-permissions.d.ts +6 -0
  392. package/dist/services/agent-permissions.d.ts.map +1 -0
  393. package/dist/services/agent-permissions.js +20 -0
  394. package/dist/services/agent-permissions.js.map +1 -0
  395. package/dist/services/agent-start-lock.d.ts +2 -0
  396. package/dist/services/agent-start-lock.d.ts.map +1 -0
  397. package/dist/services/agent-start-lock.js +43 -0
  398. package/dist/services/agent-start-lock.js.map +1 -0
  399. package/dist/services/agents.d.ts +2253 -0
  400. package/dist/services/agents.d.ts.map +1 -0
  401. package/dist/services/agents.js +609 -0
  402. package/dist/services/agents.js.map +1 -0
  403. package/dist/services/approvals.d.ts +546 -0
  404. package/dist/services/approvals.d.ts.map +1 -0
  405. package/dist/services/approvals.js +212 -0
  406. package/dist/services/approvals.js.map +1 -0
  407. package/dist/services/assets.d.ts +33 -0
  408. package/dist/services/assets.d.ts.map +1 -0
  409. package/dist/services/assets.js +17 -0
  410. package/dist/services/assets.js.map +1 -0
  411. package/dist/services/authorization.d.ts +67 -0
  412. package/dist/services/authorization.d.ts.map +1 -0
  413. package/dist/services/authorization.js +608 -0
  414. package/dist/services/authorization.js.map +1 -0
  415. package/dist/services/botfather/authoring-lock.d.ts +17 -0
  416. package/dist/services/botfather/authoring-lock.d.ts.map +1 -0
  417. package/dist/services/botfather/authoring-lock.js +23 -0
  418. package/dist/services/botfather/authoring-lock.js.map +1 -0
  419. package/dist/services/botfather/authoring-lock.test.d.ts +2 -0
  420. package/dist/services/botfather/authoring-lock.test.d.ts.map +1 -0
  421. package/dist/services/botfather/authoring-lock.test.js +25 -0
  422. package/dist/services/botfather/authoring-lock.test.js.map +1 -0
  423. package/dist/services/botfather/client.d.ts +26 -0
  424. package/dist/services/botfather/client.d.ts.map +1 -0
  425. package/dist/services/botfather/client.js +113 -0
  426. package/dist/services/botfather/client.js.map +1 -0
  427. package/dist/services/botfather/credentials.d.ts +15 -0
  428. package/dist/services/botfather/credentials.d.ts.map +1 -0
  429. package/dist/services/botfather/credentials.js +39 -0
  430. package/dist/services/botfather/credentials.js.map +1 -0
  431. package/dist/services/botfather/enrollment.d.ts +49 -0
  432. package/dist/services/botfather/enrollment.d.ts.map +1 -0
  433. package/dist/services/botfather/enrollment.js +145 -0
  434. package/dist/services/botfather/enrollment.js.map +1 -0
  435. package/dist/services/botfather/instance-limit-enforcement.d.ts +44 -0
  436. package/dist/services/botfather/instance-limit-enforcement.d.ts.map +1 -0
  437. package/dist/services/botfather/instance-limit-enforcement.js +83 -0
  438. package/dist/services/botfather/instance-limit-enforcement.js.map +1 -0
  439. package/dist/services/botfather/instance-limit-enforcement.test.d.ts +2 -0
  440. package/dist/services/botfather/instance-limit-enforcement.test.d.ts.map +1 -0
  441. package/dist/services/botfather/instance-limit-enforcement.test.js +66 -0
  442. package/dist/services/botfather/instance-limit-enforcement.test.js.map +1 -0
  443. package/dist/services/botfather/limits-store.d.ts +36 -0
  444. package/dist/services/botfather/limits-store.d.ts.map +1 -0
  445. package/dist/services/botfather/limits-store.js +94 -0
  446. package/dist/services/botfather/limits-store.js.map +1 -0
  447. package/dist/services/botfather/limits-store.test.d.ts +2 -0
  448. package/dist/services/botfather/limits-store.test.d.ts.map +1 -0
  449. package/dist/services/botfather/limits-store.test.js +70 -0
  450. package/dist/services/botfather/limits-store.test.js.map +1 -0
  451. package/dist/services/botfather/reporter.d.ts +41 -0
  452. package/dist/services/botfather/reporter.d.ts.map +1 -0
  453. package/dist/services/botfather/reporter.js +448 -0
  454. package/dist/services/botfather/reporter.js.map +1 -0
  455. package/dist/services/botfather/service.d.ts +84 -0
  456. package/dist/services/botfather/service.d.ts.map +1 -0
  457. package/dist/services/botfather/service.js +229 -0
  458. package/dist/services/botfather/service.js.map +1 -0
  459. package/dist/services/botfather/service.test.d.ts +2 -0
  460. package/dist/services/botfather/service.test.d.ts.map +1 -0
  461. package/dist/services/botfather/service.test.js +120 -0
  462. package/dist/services/botfather/service.test.js.map +1 -0
  463. package/dist/services/botfather/skill-catalog.d.ts +28 -0
  464. package/dist/services/botfather/skill-catalog.d.ts.map +1 -0
  465. package/dist/services/botfather/skill-catalog.js +101 -0
  466. package/dist/services/botfather/skill-catalog.js.map +1 -0
  467. package/dist/services/botfather/skill-catalog.test.d.ts +2 -0
  468. package/dist/services/botfather/skill-catalog.test.d.ts.map +1 -0
  469. package/dist/services/botfather/skill-catalog.test.js +151 -0
  470. package/dist/services/botfather/skill-catalog.test.js.map +1 -0
  471. package/dist/services/budgets.d.ts +38 -0
  472. package/dist/services/budgets.d.ts.map +1 -0
  473. package/dist/services/budgets.js +833 -0
  474. package/dist/services/budgets.js.map +1 -0
  475. package/dist/services/catalog-provenance.d.ts +7 -0
  476. package/dist/services/catalog-provenance.d.ts.map +1 -0
  477. package/dist/services/catalog-provenance.js +64 -0
  478. package/dist/services/catalog-provenance.js.map +1 -0
  479. package/dist/services/cloud-upstreams.d.ts +42 -0
  480. package/dist/services/cloud-upstreams.d.ts.map +1 -0
  481. package/dist/services/cloud-upstreams.js +1071 -0
  482. package/dist/services/cloud-upstreams.js.map +1 -0
  483. package/dist/services/costs.d.ts +127 -0
  484. package/dist/services/costs.d.ts.map +1 -0
  485. package/dist/services/costs.js +409 -0
  486. package/dist/services/costs.js.map +1 -0
  487. package/dist/services/cron.d.ts +80 -0
  488. package/dist/services/cron.d.ts.map +1 -0
  489. package/dist/services/cron.js +300 -0
  490. package/dist/services/cron.js.map +1 -0
  491. package/dist/services/dashboard.d.ts +34 -0
  492. package/dist/services/dashboard.d.ts.map +1 -0
  493. package/dist/services/dashboard.js +142 -0
  494. package/dist/services/dashboard.js.map +1 -0
  495. package/dist/services/default-agent-instructions.d.ts +9 -0
  496. package/dist/services/default-agent-instructions.d.ts.map +1 -0
  497. package/dist/services/default-agent-instructions.js +20 -0
  498. package/dist/services/default-agent-instructions.js.map +1 -0
  499. package/dist/services/document-annotations.d.ts +160 -0
  500. package/dist/services/document-annotations.d.ts.map +1 -0
  501. package/dist/services/document-annotations.js +324 -0
  502. package/dist/services/document-annotations.js.map +1 -0
  503. package/dist/services/documents.d.ts +347 -0
  504. package/dist/services/documents.d.ts.map +1 -0
  505. package/dist/services/documents.js +638 -0
  506. package/dist/services/documents.js.map +1 -0
  507. package/dist/services/environment-config.d.ts +55 -0
  508. package/dist/services/environment-config.d.ts.map +1 -0
  509. package/dist/services/environment-config.js +441 -0
  510. package/dist/services/environment-config.js.map +1 -0
  511. package/dist/services/environment-execution-target.d.ts +21 -0
  512. package/dist/services/environment-execution-target.d.ts.map +1 -0
  513. package/dist/services/environment-execution-target.js +121 -0
  514. package/dist/services/environment-execution-target.js.map +1 -0
  515. package/dist/services/environment-probe.d.ts +9 -0
  516. package/dist/services/environment-probe.d.ts.map +1 -0
  517. package/dist/services/environment-probe.js +106 -0
  518. package/dist/services/environment-probe.js.map +1 -0
  519. package/dist/services/environment-run-orchestrator.d.ts +124 -0
  520. package/dist/services/environment-run-orchestrator.d.ts.map +1 -0
  521. package/dist/services/environment-run-orchestrator.js +392 -0
  522. package/dist/services/environment-run-orchestrator.js.map +1 -0
  523. package/dist/services/environment-runtime.d.ts +90 -0
  524. package/dist/services/environment-runtime.d.ts.map +1 -0
  525. package/dist/services/environment-runtime.js +968 -0
  526. package/dist/services/environment-runtime.js.map +1 -0
  527. package/dist/services/environments.d.ts +36 -0
  528. package/dist/services/environments.d.ts.map +1 -0
  529. package/dist/services/environments.js +260 -0
  530. package/dist/services/environments.js.map +1 -0
  531. package/dist/services/execution-workspace-policy.d.ts +42 -0
  532. package/dist/services/execution-workspace-policy.d.ts.map +1 -0
  533. package/dist/services/execution-workspace-policy.js +262 -0
  534. package/dist/services/execution-workspace-policy.js.map +1 -0
  535. package/dist/services/execution-workspaces.d.ts +30 -0
  536. package/dist/services/execution-workspaces.d.ts.map +1 -0
  537. package/dist/services/execution-workspaces.js +645 -0
  538. package/dist/services/execution-workspaces.js.map +1 -0
  539. package/dist/services/finance.d.ts +93 -0
  540. package/dist/services/finance.d.ts.map +1 -0
  541. package/dist/services/finance.js +120 -0
  542. package/dist/services/finance.js.map +1 -0
  543. package/dist/services/github-fetch.d.ts +4 -0
  544. package/dist/services/github-fetch.d.ts.map +1 -0
  545. package/dist/services/github-fetch.js +23 -0
  546. package/dist/services/github-fetch.js.map +1 -0
  547. package/dist/services/goals.d.ts +433 -0
  548. package/dist/services/goals.d.ts.map +1 -0
  549. package/dist/services/goals.js +54 -0
  550. package/dist/services/goals.js.map +1 -0
  551. package/dist/services/heartbeat-circuit-breaker.d.ts +89 -0
  552. package/dist/services/heartbeat-circuit-breaker.d.ts.map +1 -0
  553. package/dist/services/heartbeat-circuit-breaker.js +156 -0
  554. package/dist/services/heartbeat-circuit-breaker.js.map +1 -0
  555. package/dist/services/heartbeat-circuit-breaker.test.d.ts +2 -0
  556. package/dist/services/heartbeat-circuit-breaker.test.d.ts.map +1 -0
  557. package/dist/services/heartbeat-circuit-breaker.test.js +97 -0
  558. package/dist/services/heartbeat-circuit-breaker.test.js.map +1 -0
  559. package/dist/services/heartbeat-run-summary.d.ts +7 -0
  560. package/dist/services/heartbeat-run-summary.d.ts.map +1 -0
  561. package/dist/services/heartbeat-run-summary.js +84 -0
  562. package/dist/services/heartbeat-run-summary.js.map +1 -0
  563. package/dist/services/heartbeat-stop-metadata.d.ts +28 -0
  564. package/dist/services/heartbeat-stop-metadata.d.ts.map +1 -0
  565. package/dist/services/heartbeat-stop-metadata.js +86 -0
  566. package/dist/services/heartbeat-stop-metadata.js.map +1 -0
  567. package/dist/services/heartbeat-stop-metadata.test.d.ts +2 -0
  568. package/dist/services/heartbeat-stop-metadata.test.d.ts.map +1 -0
  569. package/dist/services/heartbeat-stop-metadata.test.js +93 -0
  570. package/dist/services/heartbeat-stop-metadata.test.js.map +1 -0
  571. package/dist/services/heartbeat.d.ts +1578 -0
  572. package/dist/services/heartbeat.d.ts.map +1 -0
  573. package/dist/services/heartbeat.js +8274 -0
  574. package/dist/services/heartbeat.js.map +1 -0
  575. package/dist/services/hire-hook.d.ts +14 -0
  576. package/dist/services/hire-hook.d.ts.map +1 -0
  577. package/dist/services/hire-hook.js +85 -0
  578. package/dist/services/hire-hook.js.map +1 -0
  579. package/dist/services/inbox-dismissals.d.ts +22 -0
  580. package/dist/services/inbox-dismissals.d.ts.map +1 -0
  581. package/dist/services/inbox-dismissals.js +33 -0
  582. package/dist/services/inbox-dismissals.js.map +1 -0
  583. package/dist/services/index.d.ts +50 -0
  584. package/dist/services/index.d.ts.map +1 -0
  585. package/dist/services/index.js +49 -0
  586. package/dist/services/index.js.map +1 -0
  587. package/dist/services/instance-settings.d.ts +12 -0
  588. package/dist/services/instance-settings.d.ts.map +1 -0
  589. package/dist/services/instance-settings.js +142 -0
  590. package/dist/services/instance-settings.js.map +1 -0
  591. package/dist/services/invite-grants.d.ts +15 -0
  592. package/dist/services/invite-grants.d.ts.map +1 -0
  593. package/dist/services/invite-grants.js +50 -0
  594. package/dist/services/invite-grants.js.map +1 -0
  595. package/dist/services/issue-approvals.d.ts +56 -0
  596. package/dist/services/issue-approvals.d.ts.map +1 -0
  597. package/dist/services/issue-approvals.js +153 -0
  598. package/dist/services/issue-approvals.js.map +1 -0
  599. package/dist/services/issue-assignment-wakeup.d.ts +29 -0
  600. package/dist/services/issue-assignment-wakeup.d.ts.map +1 -0
  601. package/dist/services/issue-assignment-wakeup.js +22 -0
  602. package/dist/services/issue-assignment-wakeup.js.map +1 -0
  603. package/dist/services/issue-continuation-summary.d.ts +71 -0
  604. package/dist/services/issue-continuation-summary.d.ts.map +1 -0
  605. package/dist/services/issue-continuation-summary.js +222 -0
  606. package/dist/services/issue-continuation-summary.js.map +1 -0
  607. package/dist/services/issue-execution-policy.d.ts +93 -0
  608. package/dist/services/issue-execution-policy.d.ts.map +1 -0
  609. package/dist/services/issue-execution-policy.js +838 -0
  610. package/dist/services/issue-execution-policy.js.map +1 -0
  611. package/dist/services/issue-goal-fallback.d.ts +18 -0
  612. package/dist/services/issue-goal-fallback.d.ts.map +1 -0
  613. package/dist/services/issue-goal-fallback.js +33 -0
  614. package/dist/services/issue-goal-fallback.js.map +1 -0
  615. package/dist/services/issue-liveness.d.ts +3 -0
  616. package/dist/services/issue-liveness.d.ts.map +1 -0
  617. package/dist/services/issue-liveness.js +2 -0
  618. package/dist/services/issue-liveness.js.map +1 -0
  619. package/dist/services/issue-recovery-actions.d.ts +40 -0
  620. package/dist/services/issue-recovery-actions.d.ts.map +1 -0
  621. package/dist/services/issue-recovery-actions.js +204 -0
  622. package/dist/services/issue-recovery-actions.js.map +1 -0
  623. package/dist/services/issue-references.d.ts +22 -0
  624. package/dist/services/issue-references.d.ts.map +1 -0
  625. package/dist/services/issue-references.js +341 -0
  626. package/dist/services/issue-references.js.map +1 -0
  627. package/dist/services/issue-thread-interactions.d.ts +81 -0
  628. package/dist/services/issue-thread-interactions.d.ts.map +1 -0
  629. package/dist/services/issue-thread-interactions.js +1017 -0
  630. package/dist/services/issue-thread-interactions.js.map +1 -0
  631. package/dist/services/issue-thread-interactions.test.d.ts +2 -0
  632. package/dist/services/issue-thread-interactions.test.d.ts.map +1 -0
  633. package/dist/services/issue-thread-interactions.test.js +195 -0
  634. package/dist/services/issue-thread-interactions.test.js.map +1 -0
  635. package/dist/services/issue-tree-control.d.ts +89 -0
  636. package/dist/services/issue-tree-control.d.ts.map +1 -0
  637. package/dist/services/issue-tree-control.js +933 -0
  638. package/dist/services/issue-tree-control.js.map +1 -0
  639. package/dist/services/issues.d.ts +898 -0
  640. package/dist/services/issues.d.ts.map +1 -0
  641. package/dist/services/issues.js +4705 -0
  642. package/dist/services/issues.js.map +1 -0
  643. package/dist/services/json-schema-secret-refs.d.ts +5 -0
  644. package/dist/services/json-schema-secret-refs.d.ts.map +1 -0
  645. package/dist/services/json-schema-secret-refs.js +67 -0
  646. package/dist/services/json-schema-secret-refs.js.map +1 -0
  647. package/dist/services/live-events.d.ts +17 -0
  648. package/dist/services/live-events.d.ts.map +1 -0
  649. package/dist/services/live-events.js +33 -0
  650. package/dist/services/live-events.js.map +1 -0
  651. package/dist/services/local-service-supervisor.d.ts +56 -0
  652. package/dist/services/local-service-supervisor.d.ts.map +1 -0
  653. package/dist/services/local-service-supervisor.js +284 -0
  654. package/dist/services/local-service-supervisor.js.map +1 -0
  655. package/dist/services/operator-auth.d.ts +271 -0
  656. package/dist/services/operator-auth.d.ts.map +1 -0
  657. package/dist/services/operator-auth.js +361 -0
  658. package/dist/services/operator-auth.js.map +1 -0
  659. package/dist/services/plugin-capability-validator.d.ts +108 -0
  660. package/dist/services/plugin-capability-validator.d.ts.map +1 -0
  661. package/dist/services/plugin-capability-validator.js +314 -0
  662. package/dist/services/plugin-capability-validator.js.map +1 -0
  663. package/dist/services/plugin-config-validator.d.ts +26 -0
  664. package/dist/services/plugin-config-validator.d.ts.map +1 -0
  665. package/dist/services/plugin-config-validator.js +41 -0
  666. package/dist/services/plugin-config-validator.js.map +1 -0
  667. package/dist/services/plugin-database.d.ts +49 -0
  668. package/dist/services/plugin-database.d.ts.map +1 -0
  669. package/dist/services/plugin-database.js +475 -0
  670. package/dist/services/plugin-database.js.map +1 -0
  671. package/dist/services/plugin-dev-watcher.d.ts +30 -0
  672. package/dist/services/plugin-dev-watcher.d.ts.map +1 -0
  673. package/dist/services/plugin-dev-watcher.js +246 -0
  674. package/dist/services/plugin-dev-watcher.js.map +1 -0
  675. package/dist/services/plugin-environment-driver.d.ts +126 -0
  676. package/dist/services/plugin-environment-driver.d.ts.map +1 -0
  677. package/dist/services/plugin-environment-driver.js +226 -0
  678. package/dist/services/plugin-environment-driver.js.map +1 -0
  679. package/dist/services/plugin-event-bus.d.ts +149 -0
  680. package/dist/services/plugin-event-bus.d.ts.map +1 -0
  681. package/dist/services/plugin-event-bus.js +258 -0
  682. package/dist/services/plugin-event-bus.js.map +1 -0
  683. package/dist/services/plugin-host-service-cleanup.d.ts +14 -0
  684. package/dist/services/plugin-host-service-cleanup.d.ts.map +1 -0
  685. package/dist/services/plugin-host-service-cleanup.js +37 -0
  686. package/dist/services/plugin-host-service-cleanup.js.map +1 -0
  687. package/dist/services/plugin-host-services.d.ts +17 -0
  688. package/dist/services/plugin-host-services.d.ts.map +1 -0
  689. package/dist/services/plugin-host-services.js +2460 -0
  690. package/dist/services/plugin-host-services.js.map +1 -0
  691. package/dist/services/plugin-job-coordinator.d.ts +81 -0
  692. package/dist/services/plugin-job-coordinator.d.ts.map +1 -0
  693. package/dist/services/plugin-job-coordinator.js +172 -0
  694. package/dist/services/plugin-job-coordinator.js.map +1 -0
  695. package/dist/services/plugin-job-scheduler.d.ts +163 -0
  696. package/dist/services/plugin-job-scheduler.d.ts.map +1 -0
  697. package/dist/services/plugin-job-scheduler.js +454 -0
  698. package/dist/services/plugin-job-scheduler.js.map +1 -0
  699. package/dist/services/plugin-job-store.d.ts +208 -0
  700. package/dist/services/plugin-job-store.d.ts.map +1 -0
  701. package/dist/services/plugin-job-store.js +350 -0
  702. package/dist/services/plugin-job-store.js.map +1 -0
  703. package/dist/services/plugin-lifecycle.d.ts +203 -0
  704. package/dist/services/plugin-lifecycle.d.ts.map +1 -0
  705. package/dist/services/plugin-lifecycle.js +501 -0
  706. package/dist/services/plugin-lifecycle.js.map +1 -0
  707. package/dist/services/plugin-loader.d.ts +453 -0
  708. package/dist/services/plugin-loader.d.ts.map +1 -0
  709. package/dist/services/plugin-loader.js +1295 -0
  710. package/dist/services/plugin-loader.js.map +1 -0
  711. package/dist/services/plugin-local-folders.d.ts +49 -0
  712. package/dist/services/plugin-local-folders.d.ts.map +1 -0
  713. package/dist/services/plugin-local-folders.js +510 -0
  714. package/dist/services/plugin-local-folders.js.map +1 -0
  715. package/dist/services/plugin-log-retention.d.ts +20 -0
  716. package/dist/services/plugin-log-retention.d.ts.map +1 -0
  717. package/dist/services/plugin-log-retention.js +63 -0
  718. package/dist/services/plugin-log-retention.js.map +1 -0
  719. package/dist/services/plugin-managed-agents.d.ts +15 -0
  720. package/dist/services/plugin-managed-agents.d.ts.map +1 -0
  721. package/dist/services/plugin-managed-agents.js +457 -0
  722. package/dist/services/plugin-managed-agents.js.map +1 -0
  723. package/dist/services/plugin-managed-routines.d.ts +42 -0
  724. package/dist/services/plugin-managed-routines.d.ts.map +1 -0
  725. package/dist/services/plugin-managed-routines.js +416 -0
  726. package/dist/services/plugin-managed-routines.js.map +1 -0
  727. package/dist/services/plugin-managed-skills.d.ts +14 -0
  728. package/dist/services/plugin-managed-skills.d.ts.map +1 -0
  729. package/dist/services/plugin-managed-skills.js +264 -0
  730. package/dist/services/plugin-managed-skills.js.map +1 -0
  731. package/dist/services/plugin-manifest-validator.d.ts +79 -0
  732. package/dist/services/plugin-manifest-validator.d.ts.map +1 -0
  733. package/dist/services/plugin-manifest-validator.js +84 -0
  734. package/dist/services/plugin-manifest-validator.js.map +1 -0
  735. package/dist/services/plugin-registry.d.ts +2550 -0
  736. package/dist/services/plugin-registry.d.ts.map +1 -0
  737. package/dist/services/plugin-registry.js +581 -0
  738. package/dist/services/plugin-registry.js.map +1 -0
  739. package/dist/services/plugin-runtime-sandbox.d.ts +40 -0
  740. package/dist/services/plugin-runtime-sandbox.d.ts.map +1 -0
  741. package/dist/services/plugin-runtime-sandbox.js +154 -0
  742. package/dist/services/plugin-runtime-sandbox.js.map +1 -0
  743. package/dist/services/plugin-secrets-handler.d.ts +83 -0
  744. package/dist/services/plugin-secrets-handler.d.ts.map +1 -0
  745. package/dist/services/plugin-secrets-handler.js +168 -0
  746. package/dist/services/plugin-secrets-handler.js.map +1 -0
  747. package/dist/services/plugin-state-store.d.ts +92 -0
  748. package/dist/services/plugin-state-store.d.ts.map +1 -0
  749. package/dist/services/plugin-state-store.js +190 -0
  750. package/dist/services/plugin-state-store.js.map +1 -0
  751. package/dist/services/plugin-stream-bus.d.ts +29 -0
  752. package/dist/services/plugin-stream-bus.d.ts.map +1 -0
  753. package/dist/services/plugin-stream-bus.js +48 -0
  754. package/dist/services/plugin-stream-bus.js.map +1 -0
  755. package/dist/services/plugin-tool-dispatcher.d.ts +181 -0
  756. package/dist/services/plugin-tool-dispatcher.d.ts.map +1 -0
  757. package/dist/services/plugin-tool-dispatcher.js +224 -0
  758. package/dist/services/plugin-tool-dispatcher.js.map +1 -0
  759. package/dist/services/plugin-tool-registry.d.ts +192 -0
  760. package/dist/services/plugin-tool-registry.d.ts.map +1 -0
  761. package/dist/services/plugin-tool-registry.js +224 -0
  762. package/dist/services/plugin-tool-registry.js.map +1 -0
  763. package/dist/services/plugin-worker-manager.d.ts +262 -0
  764. package/dist/services/plugin-worker-manager.d.ts.map +1 -0
  765. package/dist/services/plugin-worker-manager.js +942 -0
  766. package/dist/services/plugin-worker-manager.js.map +1 -0
  767. package/dist/services/portable-path.d.ts +2 -0
  768. package/dist/services/portable-path.d.ts.map +1 -0
  769. package/dist/services/portable-path.js +15 -0
  770. package/dist/services/portable-path.js.map +1 -0
  771. package/dist/services/principal-access-compatibility.d.ts +26 -0
  772. package/dist/services/principal-access-compatibility.d.ts.map +1 -0
  773. package/dist/services/principal-access-compatibility.js +94 -0
  774. package/dist/services/principal-access-compatibility.js.map +1 -0
  775. package/dist/services/productivity-review.d.ts +83 -0
  776. package/dist/services/productivity-review.d.ts.map +1 -0
  777. package/dist/services/productivity-review.js +652 -0
  778. package/dist/services/productivity-review.js.map +1 -0
  779. package/dist/services/project-workspace-runtime-config.d.ts +4 -0
  780. package/dist/services/project-workspace-runtime-config.d.ts.map +1 -0
  781. package/dist/services/project-workspace-runtime-config.js +54 -0
  782. package/dist/services/project-workspace-runtime-config.js.map +1 -0
  783. package/dist/services/projects.d.ts +99 -0
  784. package/dist/services/projects.d.ts.map +1 -0
  785. package/dist/services/projects.js +879 -0
  786. package/dist/services/projects.js.map +1 -0
  787. package/dist/services/quota-windows.d.ts +9 -0
  788. package/dist/services/quota-windows.d.ts.map +1 -0
  789. package/dist/services/quota-windows.js +56 -0
  790. package/dist/services/quota-windows.js.map +1 -0
  791. package/dist/services/recovery/index.d.ts +10 -0
  792. package/dist/services/recovery/index.d.ts.map +1 -0
  793. package/dist/services/recovery/index.js +6 -0
  794. package/dist/services/recovery/index.js.map +1 -0
  795. package/dist/services/recovery/issue-graph-liveness.d.ts +85 -0
  796. package/dist/services/recovery/issue-graph-liveness.d.ts.map +1 -0
  797. package/dist/services/recovery/issue-graph-liveness.js +356 -0
  798. package/dist/services/recovery/issue-graph-liveness.js.map +1 -0
  799. package/dist/services/recovery/model-profile-hint.d.ts +21 -0
  800. package/dist/services/recovery/model-profile-hint.d.ts.map +1 -0
  801. package/dist/services/recovery/model-profile-hint.js +36 -0
  802. package/dist/services/recovery/model-profile-hint.js.map +1 -0
  803. package/dist/services/recovery/model-profile-hint.test.d.ts +2 -0
  804. package/dist/services/recovery/model-profile-hint.test.d.ts.map +1 -0
  805. package/dist/services/recovery/model-profile-hint.test.js +38 -0
  806. package/dist/services/recovery/model-profile-hint.test.js.map +1 -0
  807. package/dist/services/recovery/origins.d.ts +36 -0
  808. package/dist/services/recovery/origins.d.ts.map +1 -0
  809. package/dist/services/recovery/origins.js +45 -0
  810. package/dist/services/recovery/origins.js.map +1 -0
  811. package/dist/services/recovery/pause-hold-guard.d.ts +6 -0
  812. package/dist/services/recovery/pause-hold-guard.d.ts.map +1 -0
  813. package/dist/services/recovery/pause-hold-guard.js +6 -0
  814. package/dist/services/recovery/pause-hold-guard.js.map +1 -0
  815. package/dist/services/recovery/run-liveness-continuations.d.ts +50 -0
  816. package/dist/services/recovery/run-liveness-continuations.d.ts.map +1 -0
  817. package/dist/services/recovery/run-liveness-continuations.js +117 -0
  818. package/dist/services/recovery/run-liveness-continuations.js.map +1 -0
  819. package/dist/services/recovery/service.d.ts +258 -0
  820. package/dist/services/recovery/service.d.ts.map +1 -0
  821. package/dist/services/recovery/service.js +2892 -0
  822. package/dist/services/recovery/service.js.map +1 -0
  823. package/dist/services/recovery/successful-run-handoff.d.ts +89 -0
  824. package/dist/services/recovery/successful-run-handoff.d.ts.map +1 -0
  825. package/dist/services/recovery/successful-run-handoff.js +304 -0
  826. package/dist/services/recovery/successful-run-handoff.js.map +1 -0
  827. package/dist/services/recovery/successful-run-handoff.test.d.ts +2 -0
  828. package/dist/services/recovery/successful-run-handoff.test.d.ts.map +1 -0
  829. package/dist/services/recovery/successful-run-handoff.test.js +276 -0
  830. package/dist/services/recovery/successful-run-handoff.test.js.map +1 -0
  831. package/dist/services/resource-memberships.d.ts +55 -0
  832. package/dist/services/resource-memberships.d.ts.map +1 -0
  833. package/dist/services/resource-memberships.js +213 -0
  834. package/dist/services/resource-memberships.js.map +1 -0
  835. package/dist/services/routines.d.ts +170 -0
  836. package/dist/services/routines.d.ts.map +1 -0
  837. package/dist/services/routines.js +2015 -0
  838. package/dist/services/routines.js.map +1 -0
  839. package/dist/services/run-continuations.d.ts +3 -0
  840. package/dist/services/run-continuations.d.ts.map +1 -0
  841. package/dist/services/run-continuations.js +2 -0
  842. package/dist/services/run-continuations.js.map +1 -0
  843. package/dist/services/run-liveness.d.ts +46 -0
  844. package/dist/services/run-liveness.d.ts.map +1 -0
  845. package/dist/services/run-liveness.js +275 -0
  846. package/dist/services/run-liveness.js.map +1 -0
  847. package/dist/services/run-log-store.d.ts +34 -0
  848. package/dist/services/run-log-store.d.ts.map +1 -0
  849. package/dist/services/run-log-store.js +111 -0
  850. package/dist/services/run-log-store.js.map +1 -0
  851. package/dist/services/sandbox-provider-runtime.d.ts +132 -0
  852. package/dist/services/sandbox-provider-runtime.d.ts.map +1 -0
  853. package/dist/services/sandbox-provider-runtime.js +216 -0
  854. package/dist/services/sandbox-provider-runtime.js.map +1 -0
  855. package/dist/services/secrets.d.ts +1991 -0
  856. package/dist/services/secrets.d.ts.map +1 -0
  857. package/dist/services/secrets.js +1781 -0
  858. package/dist/services/secrets.js.map +1 -0
  859. package/dist/services/session-workspace-cwd.d.ts +2 -0
  860. package/dist/services/session-workspace-cwd.d.ts.map +1 -0
  861. package/dist/services/session-workspace-cwd.js +24 -0
  862. package/dist/services/session-workspace-cwd.js.map +1 -0
  863. package/dist/services/session-workspace-cwd.test.d.ts +2 -0
  864. package/dist/services/session-workspace-cwd.test.d.ts.map +1 -0
  865. package/dist/services/session-workspace-cwd.test.js +25 -0
  866. package/dist/services/session-workspace-cwd.test.js.map +1 -0
  867. package/dist/services/sidebar-badges.d.ts +14 -0
  868. package/dist/services/sidebar-badges.d.ts.map +1 -0
  869. package/dist/services/sidebar-badges.js +48 -0
  870. package/dist/services/sidebar-badges.js.map +1 -0
  871. package/dist/services/sidebar-preferences.d.ts +9 -0
  872. package/dist/services/sidebar-preferences.d.ts.map +1 -0
  873. package/dist/services/sidebar-preferences.js +82 -0
  874. package/dist/services/sidebar-preferences.js.map +1 -0
  875. package/dist/services/skills-catalog.d.ts +14 -0
  876. package/dist/services/skills-catalog.d.ts.map +1 -0
  877. package/dist/services/skills-catalog.js +171 -0
  878. package/dist/services/skills-catalog.js.map +1 -0
  879. package/dist/services/squad-export-readme.d.ts +17 -0
  880. package/dist/services/squad-export-readme.d.ts.map +1 -0
  881. package/dist/services/squad-export-readme.js +148 -0
  882. package/dist/services/squad-export-readme.js.map +1 -0
  883. package/dist/services/squad-member-roles.d.ts +9 -0
  884. package/dist/services/squad-member-roles.d.ts.map +1 -0
  885. package/dist/services/squad-member-roles.js +48 -0
  886. package/dist/services/squad-member-roles.js.map +1 -0
  887. package/dist/services/squad-portability.d.ts +24 -0
  888. package/dist/services/squad-portability.d.ts.map +1 -0
  889. package/dist/services/squad-portability.js +4093 -0
  890. package/dist/services/squad-portability.js.map +1 -0
  891. package/dist/services/squad-search-rate-limit.d.ts +22 -0
  892. package/dist/services/squad-search-rate-limit.d.ts.map +1 -0
  893. package/dist/services/squad-search-rate-limit.js +38 -0
  894. package/dist/services/squad-search-rate-limit.js.map +1 -0
  895. package/dist/services/squad-search.d.ts +8 -0
  896. package/dist/services/squad-search.d.ts.map +1 -0
  897. package/dist/services/squad-search.js +626 -0
  898. package/dist/services/squad-search.js.map +1 -0
  899. package/dist/services/squad-skills.d.ts +107 -0
  900. package/dist/services/squad-skills.d.ts.map +1 -0
  901. package/dist/services/squad-skills.js +3044 -0
  902. package/dist/services/squad-skills.js.map +1 -0
  903. package/dist/services/squads.d.ts +154 -0
  904. package/dist/services/squads.d.ts.map +1 -0
  905. package/dist/services/squads.js +278 -0
  906. package/dist/services/squads.js.map +1 -0
  907. package/dist/services/wake-cycle-guard.d.ts +44 -0
  908. package/dist/services/wake-cycle-guard.d.ts.map +1 -0
  909. package/dist/services/wake-cycle-guard.js +79 -0
  910. package/dist/services/wake-cycle-guard.js.map +1 -0
  911. package/dist/services/wake-cycle-guard.test.d.ts +2 -0
  912. package/dist/services/wake-cycle-guard.test.d.ts.map +1 -0
  913. package/dist/services/wake-cycle-guard.test.js +67 -0
  914. package/dist/services/wake-cycle-guard.test.js.map +1 -0
  915. package/dist/services/work-products.d.ts +14 -0
  916. package/dist/services/work-products.d.ts.map +1 -0
  917. package/dist/services/work-products.js +100 -0
  918. package/dist/services/work-products.js.map +1 -0
  919. package/dist/services/workspace-operation-log-store.d.ts +33 -0
  920. package/dist/services/workspace-operation-log-store.d.ts.map +1 -0
  921. package/dist/services/workspace-operation-log-store.js +110 -0
  922. package/dist/services/workspace-operation-log-store.js.map +1 -0
  923. package/dist/services/workspace-operations.d.ts +44 -0
  924. package/dist/services/workspace-operations.d.ts.map +1 -0
  925. package/dist/services/workspace-operations.js +211 -0
  926. package/dist/services/workspace-operations.js.map +1 -0
  927. package/dist/services/workspace-realization.d.ts +33 -0
  928. package/dist/services/workspace-realization.d.ts.map +1 -0
  929. package/dist/services/workspace-realization.js +221 -0
  930. package/dist/services/workspace-realization.js.map +1 -0
  931. package/dist/services/workspace-runtime-read-model.d.ts +92 -0
  932. package/dist/services/workspace-runtime-read-model.d.ts.map +1 -0
  933. package/dist/services/workspace-runtime-read-model.js +67 -0
  934. package/dist/services/workspace-runtime-read-model.js.map +1 -0
  935. package/dist/services/workspace-runtime.d.ts +252 -0
  936. package/dist/services/workspace-runtime.d.ts.map +1 -0
  937. package/dist/services/workspace-runtime.js +2519 -0
  938. package/dist/services/workspace-runtime.js.map +1 -0
  939. package/dist/startup-banner.d.ts +32 -0
  940. package/dist/startup-banner.d.ts.map +1 -0
  941. package/dist/startup-banner.js +118 -0
  942. package/dist/startup-banner.js.map +1 -0
  943. package/dist/static-index-html.d.ts +2 -0
  944. package/dist/static-index-html.d.ts.map +1 -0
  945. package/dist/static-index-html.js +7 -0
  946. package/dist/static-index-html.js.map +1 -0
  947. package/dist/storage/index.d.ts +6 -0
  948. package/dist/storage/index.d.ts.map +1 -0
  949. package/dist/storage/index.js +29 -0
  950. package/dist/storage/index.js.map +1 -0
  951. package/dist/storage/local-disk-provider.d.ts +3 -0
  952. package/dist/storage/local-disk-provider.d.ts.map +1 -0
  953. package/dist/storage/local-disk-provider.js +85 -0
  954. package/dist/storage/local-disk-provider.js.map +1 -0
  955. package/dist/storage/provider-registry.d.ts +4 -0
  956. package/dist/storage/provider-registry.d.ts.map +1 -0
  957. package/dist/storage/provider-registry.js +15 -0
  958. package/dist/storage/provider-registry.js.map +1 -0
  959. package/dist/storage/s3-provider.d.ts +11 -0
  960. package/dist/storage/s3-provider.d.ts.map +1 -0
  961. package/dist/storage/s3-provider.js +124 -0
  962. package/dist/storage/s3-provider.js.map +1 -0
  963. package/dist/storage/service.d.ts +3 -0
  964. package/dist/storage/service.d.ts.map +1 -0
  965. package/dist/storage/service.js +120 -0
  966. package/dist/storage/service.js.map +1 -0
  967. package/dist/storage/types.d.ts +59 -0
  968. package/dist/storage/types.d.ts.map +1 -0
  969. package/dist/storage/types.js +2 -0
  970. package/dist/storage/types.js.map +1 -0
  971. package/dist/ui-branding.d.ts +13 -0
  972. package/dist/ui-branding.d.ts.map +1 -0
  973. package/dist/ui-branding.js +187 -0
  974. package/dist/ui-branding.js.map +1 -0
  975. package/dist/version.d.ts +2 -0
  976. package/dist/version.d.ts.map +1 -0
  977. package/dist/version.js +5 -0
  978. package/dist/version.js.map +1 -0
  979. package/dist/vite-html-renderer.d.ts +18 -0
  980. package/dist/vite-html-renderer.d.ts.map +1 -0
  981. package/dist/vite-html-renderer.js +61 -0
  982. package/dist/vite-html-renderer.js.map +1 -0
  983. package/dist/worktree-config.d.ts +19 -0
  984. package/dist/worktree-config.d.ts.map +1 -0
  985. package/dist/worktree-config.js +373 -0
  986. package/dist/worktree-config.js.map +1 -0
  987. package/package.json +92 -0
  988. package/skills/diagnose-why-work-stopped/SKILL.md +161 -0
  989. package/skills/para-memory-files/SKILL.md +104 -0
  990. package/skills/para-memory-files/references/schemas.md +35 -0
  991. package/skills/slaw/SKILL.md +371 -0
  992. package/skills/slaw/references/api-reference.md +879 -0
  993. package/skills/slaw/references/artifacts.md +44 -0
  994. package/skills/slaw/references/issue-workspaces.md +80 -0
  995. package/skills/slaw/references/routines.md +187 -0
  996. package/skills/slaw/references/squad-skills.md +258 -0
  997. package/skills/slaw/references/workflows.md +113 -0
  998. package/skills/slaw/scripts/slaw-upload-artifact.sh +371 -0
  999. package/skills/slaw-converting-plans-to-tasks/SKILL.md +42 -0
  1000. package/skills/slaw-create-agent/SKILL.md +163 -0
  1001. package/skills/slaw-create-agent/references/agent-instruction-templates.md +123 -0
  1002. package/skills/slaw-create-agent/references/agents/coder.md +64 -0
  1003. package/skills/slaw-create-agent/references/agents/qa.md +88 -0
  1004. package/skills/slaw-create-agent/references/agents/securityengineer.md +135 -0
  1005. package/skills/slaw-create-agent/references/agents/uxdesigner.md +115 -0
  1006. package/skills/slaw-create-agent/references/api-reference.md +110 -0
  1007. package/skills/slaw-create-agent/references/baseline-role-guide.md +168 -0
  1008. package/skills/slaw-create-agent/references/draft-review-checklist.md +95 -0
  1009. package/skills/slaw-create-plugin/SKILL.md +154 -0
  1010. package/skills/slaw-dev/SKILL.md +267 -0
  1011. package/skills/terminal-bench-loop/SKILL.md +236 -0
  1012. package/ui-dist/android-chrome-192x192.png +0 -0
  1013. package/ui-dist/android-chrome-512x512.png +0 -0
  1014. package/ui-dist/apple-touch-icon.png +0 -0
  1015. package/ui-dist/assets/apl-B4CMkyY2.js +1 -0
  1016. package/ui-dist/assets/arc-xbLjL0VN.js +1 -0
  1017. package/ui-dist/assets/architectureDiagram-3BPJPVTR-KcFd4B-U.js +36 -0
  1018. package/ui-dist/assets/asciiarmor-Df11BRmG.js +1 -0
  1019. package/ui-dist/assets/asn1-EdZsLKOL.js +1 -0
  1020. package/ui-dist/assets/asterisk-B-8jnY81.js +1 -0
  1021. package/ui-dist/assets/blockDiagram-GPEHLZMM-CSD4otEL.js +132 -0
  1022. package/ui-dist/assets/brainfuck-C4LP7Hcl.js +1 -0
  1023. package/ui-dist/assets/c4Diagram-AAUBKEIU-Cre_NEHp.js +10 -0
  1024. package/ui-dist/assets/channel-BFN8obi8.js +1 -0
  1025. package/ui-dist/assets/chunk-2J33WTMH-CssLBsbh.js +1 -0
  1026. package/ui-dist/assets/chunk-4BX2VUAB-DjiavNFv.js +1 -0
  1027. package/ui-dist/assets/chunk-55IACEB6-C_F0yeYq.js +1 -0
  1028. package/ui-dist/assets/chunk-727SXJPM-B1FAOW4a.js +206 -0
  1029. package/ui-dist/assets/chunk-AQP2D5EJ-Do1241W-.js +231 -0
  1030. package/ui-dist/assets/chunk-FMBD7UC4-BQRrOMZD.js +15 -0
  1031. package/ui-dist/assets/chunk-ND2GUHAM-BPSt3kZ1.js +1 -0
  1032. package/ui-dist/assets/chunk-QZHKN3VN-BSpmhWDD.js +1 -0
  1033. package/ui-dist/assets/classDiagram-4FO5ZUOK-1Ay0zFCU.js +1 -0
  1034. package/ui-dist/assets/classDiagram-v2-Q7XG4LA2-1Ay0zFCU.js +1 -0
  1035. package/ui-dist/assets/clike-B9uivgTg.js +1 -0
  1036. package/ui-dist/assets/clojure-BMjYHr_A.js +1 -0
  1037. package/ui-dist/assets/cmake-BQqOBYOt.js +1 -0
  1038. package/ui-dist/assets/cobol-CWcv1MsR.js +1 -0
  1039. package/ui-dist/assets/coffeescript-S37ZYGWr.js +1 -0
  1040. package/ui-dist/assets/commonlisp-DBKNyK5s.js +1 -0
  1041. package/ui-dist/assets/cose-bilkent-S5V4N54A-CK2f2Te4.js +1 -0
  1042. package/ui-dist/assets/crystal-SjHAIU92.js +1 -0
  1043. package/ui-dist/assets/css-BnMrqG3P.js +1 -0
  1044. package/ui-dist/assets/cypher-C_CwsFkJ.js +1 -0
  1045. package/ui-dist/assets/cytoscape.esm-D8joxN9f.js +321 -0
  1046. package/ui-dist/assets/d-pRatUO7H.js +1 -0
  1047. package/ui-dist/assets/dagre-BM42HDAG-DaOXTN9-.js +4 -0
  1048. package/ui-dist/assets/defaultLocale-DX6XiGOO.js +1 -0
  1049. package/ui-dist/assets/diagram-2AECGRRQ-D0ScQUGy.js +43 -0
  1050. package/ui-dist/assets/diagram-5GNKFQAL-7mH4Cncd.js +10 -0
  1051. package/ui-dist/assets/diagram-KO2AKTUF-aA9kuK-7.js +3 -0
  1052. package/ui-dist/assets/diagram-LMA3HP47-C9UXfmdK.js +24 -0
  1053. package/ui-dist/assets/diagram-OG6HWLK6-Ba3U-x1r.js +24 -0
  1054. package/ui-dist/assets/diff-DbItnlRl.js +1 -0
  1055. package/ui-dist/assets/dockerfile-BKs6k2Af.js +1 -0
  1056. package/ui-dist/assets/dtd-DF_7sFjM.js +1 -0
  1057. package/ui-dist/assets/dylan-DwRh75JA.js +1 -0
  1058. package/ui-dist/assets/ebnf-CDyGwa7X.js +1 -0
  1059. package/ui-dist/assets/ecl-Cabwm37j.js +1 -0
  1060. package/ui-dist/assets/eiffel-CnydiIhH.js +1 -0
  1061. package/ui-dist/assets/elm-vLlmbW-K.js +1 -0
  1062. package/ui-dist/assets/erDiagram-TEJ5UH35-CmskPKH1.js +85 -0
  1063. package/ui-dist/assets/erlang-BNw1qcRV.js +1 -0
  1064. package/ui-dist/assets/factor-kuTfRLto.js +1 -0
  1065. package/ui-dist/assets/fcl-Kvtd6kyn.js +1 -0
  1066. package/ui-dist/assets/flowDiagram-I6XJVG4X-B0iEPqGd.js +162 -0
  1067. package/ui-dist/assets/forth-Ffai-XNe.js +1 -0
  1068. package/ui-dist/assets/fortran-DYz_wnZ1.js +1 -0
  1069. package/ui-dist/assets/ganttDiagram-6RSMTGT7-DtpxlgWQ.js +292 -0
  1070. package/ui-dist/assets/gas-Bneqetm1.js +1 -0
  1071. package/ui-dist/assets/gherkin-heZmZLOM.js +1 -0
  1072. package/ui-dist/assets/gitGraphDiagram-PVQCEYII-VefBjqya.js +106 -0
  1073. package/ui-dist/assets/graph-CAnANduQ.js +1 -0
  1074. package/ui-dist/assets/groovy-D9Dt4D0W.js +1 -0
  1075. package/ui-dist/assets/haskell-Cw1EW3IL.js +1 -0
  1076. package/ui-dist/assets/haxe-H-WmDvRZ.js +1 -0
  1077. package/ui-dist/assets/http-DBlCnlav.js +1 -0
  1078. package/ui-dist/assets/idl-BEugSyMb.js +1 -0
  1079. package/ui-dist/assets/index-B9KxOFt-.js +1 -0
  1080. package/ui-dist/assets/index-BMPCuc-W.js +1 -0
  1081. package/ui-dist/assets/index-Bbfs2D7R.js +1 -0
  1082. package/ui-dist/assets/index-BrgHE5Lg.js +1 -0
  1083. package/ui-dist/assets/index-C5q-Cwlp.js +7 -0
  1084. package/ui-dist/assets/index-C6LpKpr3.js +1 -0
  1085. package/ui-dist/assets/index-CIzt5DFV.js +1 -0
  1086. package/ui-dist/assets/index-CRwAuYPj.js +1 -0
  1087. package/ui-dist/assets/index-CTEnIXsJ.js +1 -0
  1088. package/ui-dist/assets/index-CXGemv2V.js +1 -0
  1089. package/ui-dist/assets/index-ClDiS51u.js +1 -0
  1090. package/ui-dist/assets/index-CvKYfvpz.js +1 -0
  1091. package/ui-dist/assets/index-D2IqxlXD.js +1 -0
  1092. package/ui-dist/assets/index-D97fJMFR.js +522 -0
  1093. package/ui-dist/assets/index-DDHdUa2f.js +1 -0
  1094. package/ui-dist/assets/index-DMZ0QXqi.js +1 -0
  1095. package/ui-dist/assets/index-DMi4KpxO.js +6 -0
  1096. package/ui-dist/assets/index-DZB48Gve.js +1 -0
  1097. package/ui-dist/assets/index-Drr9zRdK.css +1 -0
  1098. package/ui-dist/assets/index-DtGqpE43.js +1 -0
  1099. package/ui-dist/assets/index-Du18kURt.js +2 -0
  1100. package/ui-dist/assets/index-KaLXuTqA.js +1 -0
  1101. package/ui-dist/assets/index-j5NgiILm.js +13 -0
  1102. package/ui-dist/assets/index-u0SfLZ3g.js +3 -0
  1103. package/ui-dist/assets/infoDiagram-5YYISTIA-D2OGH-dO.js +2 -0
  1104. package/ui-dist/assets/init-Gi6I4Gst.js +1 -0
  1105. package/ui-dist/assets/ishikawaDiagram-YF4QCWOH-CnMf3BJj.js +70 -0
  1106. package/ui-dist/assets/javascript-iXu5QeM3.js +1 -0
  1107. package/ui-dist/assets/journeyDiagram-JHISSGLW-BaXdD53T.js +139 -0
  1108. package/ui-dist/assets/julia-DuME0IfC.js +1 -0
  1109. package/ui-dist/assets/kanban-definition-UN3LZRKU-Brt7LjHm.js +89 -0
  1110. package/ui-dist/assets/katex-yT8l5JNH.js +257 -0
  1111. package/ui-dist/assets/layout-DGIYPm2g.js +1 -0
  1112. package/ui-dist/assets/linear-536T6Mkh.js +1 -0
  1113. package/ui-dist/assets/livescript-BwQOo05w.js +1 -0
  1114. package/ui-dist/assets/lua-VAEuO923.js +1 -0
  1115. package/ui-dist/assets/mathematica-DTrFuWx2.js +1 -0
  1116. package/ui-dist/assets/mbox-CNhZ1qSd.js +1 -0
  1117. package/ui-dist/assets/mermaid.core-CURTLVBm.js +303 -0
  1118. package/ui-dist/assets/mindmap-definition-RKZ34NQL-S2tDCU-U.js +96 -0
  1119. package/ui-dist/assets/mirc-CjQqDB4T.js +1 -0
  1120. package/ui-dist/assets/mllike-CXdrOF99.js +1 -0
  1121. package/ui-dist/assets/modelica-Dc1JOy9r.js +1 -0
  1122. package/ui-dist/assets/mscgen-BA5vi2Kp.js +1 -0
  1123. package/ui-dist/assets/mumps-BT43cFF4.js +1 -0
  1124. package/ui-dist/assets/nginx-DdIZxoE0.js +1 -0
  1125. package/ui-dist/assets/nsis-LdVXkNf5.js +1 -0
  1126. package/ui-dist/assets/ntriples-BfvgReVJ.js +1 -0
  1127. package/ui-dist/assets/octave-Ck1zUtKM.js +1 -0
  1128. package/ui-dist/assets/ordinal-Cboi1Yqb.js +1 -0
  1129. package/ui-dist/assets/oz-BzwKVEFT.js +1 -0
  1130. package/ui-dist/assets/pascal--L3eBynH.js +1 -0
  1131. package/ui-dist/assets/perl-CdXCOZ3F.js +1 -0
  1132. package/ui-dist/assets/pieDiagram-4H26LBE5-DD_Ih32z.js +30 -0
  1133. package/ui-dist/assets/pig-CevX1Tat.js +1 -0
  1134. package/ui-dist/assets/powershell-CFHJl5sT.js +1 -0
  1135. package/ui-dist/assets/properties-C78fOPTZ.js +1 -0
  1136. package/ui-dist/assets/protobuf-ChK-085T.js +1 -0
  1137. package/ui-dist/assets/pug-DeIclll2.js +1 -0
  1138. package/ui-dist/assets/puppet-DMA9R1ak.js +1 -0
  1139. package/ui-dist/assets/python-BuPzkPfP.js +1 -0
  1140. package/ui-dist/assets/q-pXgVlZs6.js +1 -0
  1141. package/ui-dist/assets/quadrantDiagram-W4KKPZXB-DA5BPBIK.js +7 -0
  1142. package/ui-dist/assets/r-B6wPVr8A.js +1 -0
  1143. package/ui-dist/assets/requirementDiagram-4Y6WPE33-Em8SPCro.js +84 -0
  1144. package/ui-dist/assets/rpm-CTu-6PCP.js +1 -0
  1145. package/ui-dist/assets/ruby-B2Rjki9n.js +1 -0
  1146. package/ui-dist/assets/sankeyDiagram-5OEKKPKP-BJVC4haY.js +40 -0
  1147. package/ui-dist/assets/sas-B4kiWyti.js +1 -0
  1148. package/ui-dist/assets/scheme-C41bIUwD.js +1 -0
  1149. package/ui-dist/assets/sequenceDiagram-3UESZ5HK-Cskntadf.js +162 -0
  1150. package/ui-dist/assets/shell-CjFT_Tl9.js +1 -0
  1151. package/ui-dist/assets/sieve-C3Gn_uJK.js +1 -0
  1152. package/ui-dist/assets/simple-mode-GW_nhZxv.js +1 -0
  1153. package/ui-dist/assets/smalltalk-CnHTOXQT.js +1 -0
  1154. package/ui-dist/assets/solr-DehyRSwq.js +1 -0
  1155. package/ui-dist/assets/sparql-DkYu6x3z.js +1 -0
  1156. package/ui-dist/assets/spreadsheet-BCZA_wO0.js +1 -0
  1157. package/ui-dist/assets/sql-D0XecflT.js +1 -0
  1158. package/ui-dist/assets/stateDiagram-AJRCARHV-CxlfdaOi.js +1 -0
  1159. package/ui-dist/assets/stateDiagram-v2-BHNVJYJU-eTgftUjW.js +1 -0
  1160. package/ui-dist/assets/stex-C3f8Ysf7.js +1 -0
  1161. package/ui-dist/assets/stylus-B533Al4x.js +1 -0
  1162. package/ui-dist/assets/swift-BzpIVaGY.js +1 -0
  1163. package/ui-dist/assets/tcl-DVfN8rqt.js +1 -0
  1164. package/ui-dist/assets/textile-CnDTJFAw.js +1 -0
  1165. package/ui-dist/assets/tiddlywiki-DO-Gjzrf.js +1 -0
  1166. package/ui-dist/assets/tiki-DGYXhP31.js +1 -0
  1167. package/ui-dist/assets/timeline-definition-PNZ67QCA-LOdaWSSa.js +120 -0
  1168. package/ui-dist/assets/toml-Bm5Em-hy.js +1 -0
  1169. package/ui-dist/assets/troff-wAsdV37c.js +1 -0
  1170. package/ui-dist/assets/ttcn-CfJYG6tj.js +1 -0
  1171. package/ui-dist/assets/ttcn-cfg-B9xdYoR4.js +1 -0
  1172. package/ui-dist/assets/turtle-B1tBg_DP.js +1 -0
  1173. package/ui-dist/assets/vb-CmGdzxic.js +1 -0
  1174. package/ui-dist/assets/vbscript-BuJXcnF6.js +1 -0
  1175. package/ui-dist/assets/velocity-D8B20fx6.js +1 -0
  1176. package/ui-dist/assets/vennDiagram-CIIHVFJN-CJ4ji6B3.js +34 -0
  1177. package/ui-dist/assets/verilog-C6RDOZhf.js +1 -0
  1178. package/ui-dist/assets/vhdl-lSbBsy5d.js +1 -0
  1179. package/ui-dist/assets/wardley-L42UT6IY-CxnVdUVH.js +153 -0
  1180. package/ui-dist/assets/wardleyDiagram-YWT4CUSO-CgGDttpl.js +78 -0
  1181. package/ui-dist/assets/webidl-ZXfAyPTL.js +1 -0
  1182. package/ui-dist/assets/xquery-DzFWVndE.js +1 -0
  1183. package/ui-dist/assets/xychartDiagram-2RQKCTM6-zuQa7bqx.js +7 -0
  1184. package/ui-dist/assets/yacas-BJ4BC0dw.js +1 -0
  1185. package/ui-dist/assets/z80-Hz9HOZM7.js +1 -0
  1186. package/ui-dist/brands/opencode-logo-dark-square.svg +18 -0
  1187. package/ui-dist/brands/opencode-logo-light-square.svg +18 -0
  1188. package/ui-dist/favicon-16x16.png +0 -0
  1189. package/ui-dist/favicon-32x32.png +0 -0
  1190. package/ui-dist/favicon.ico +0 -0
  1191. package/ui-dist/favicon.svg +8 -0
  1192. package/ui-dist/index.html +46 -0
  1193. package/ui-dist/site.webmanifest +30 -0
  1194. package/ui-dist/sw.js +42 -0
  1195. package/ui-dist/worktree-favicon-16x16.png +0 -0
  1196. package/ui-dist/worktree-favicon-32x32.png +0 -0
  1197. package/ui-dist/worktree-favicon.ico +0 -0
  1198. package/ui-dist/worktree-favicon.svg +9 -0
@@ -0,0 +1,3284 @@
1
+ import { Router } from "express";
2
+ import { z } from "zod";
3
+ import {
4
+ // Agent
5
+ createAgentSchema, createAgentHireSchema, updateAgentSchema, updateAgentPermissionsSchema, updateAgentInstructionsPathSchema, updateAgentInstructionsBundleSchema, upsertAgentInstructionsFileSchema, createAgentKeySchema, wakeAgentSchema, resetAgentSessionSchema, agentSkillSyncSchema, testAdapterEnvironmentSchema,
6
+ // Issue
7
+ createIssueSchema, updateIssueSchema, createIssueLabelSchema, addIssueCommentSchema, checkoutIssueSchema, linkIssueApprovalSchema, createIssueWorkProductSchema, updateIssueWorkProductSchema, upsertIssueDocumentSchema, restoreIssueDocumentRevisionSchema,
8
+ // Project
9
+ createProjectSchema, updateProjectSchema, createProjectWorkspaceSchema, updateProjectWorkspaceSchema,
10
+ // Squad
11
+ createSquadSchema, updateSquadSchema, updateSquadBrandingSchema,
12
+ // Routine
13
+ createRoutineSchema, updateRoutineSchema, createRoutineTriggerSchema, updateRoutineTriggerSchema, rotateRoutineTriggerSecretSchema, runRoutineSchema,
14
+ // Goal
15
+ createGoalSchema, updateGoalSchema,
16
+ // Secret
17
+ createSecretSchema, updateSecretSchema, rotateSecretSchema,
18
+ // Approval
19
+ createApprovalSchema, resolveApprovalSchema, requestApprovalRevisionSchema, resubmitApprovalSchema, addApprovalCommentSchema,
20
+ // Cost / budget
21
+ createCostEventSchema, createFinanceEventSchema, updateBudgetSchema, upsertBudgetPolicySchema, resolveBudgetIncidentSchema,
22
+ // Sidebar
23
+ upsertSidebarOrderPreferenceSchema,
24
+ // Execution workspaces
25
+ updateExecutionWorkspaceSchema, workspaceRuntimeControlTargetSchema,
26
+ // Environments
27
+ createEnvironmentSchema, updateEnvironmentSchema, probeEnvironmentConfigSchema,
28
+ // Squad skills
29
+ squadSkillCreateSchema, squadSkillFileUpdateSchema, squadSkillImportSchema, squadSkillProjectScanRequestSchema,
30
+ // Issue tree
31
+ createIssueTreeHoldSchema, previewIssueTreeControlSchema, releaseIssueTreeHoldSchema,
32
+ // Issue interactions
33
+ createIssueThreadInteractionSchema, createChildIssueSchema, acceptIssueThreadInteractionSchema, rejectIssueThreadInteractionSchema, respondIssueThreadInteractionSchema,
34
+ // Auth / profile
35
+ updateCurrentUserProfileSchema,
36
+ // Squad portability (legacy routes)
37
+ squadPortabilityExportSchema, squadPortabilityPreviewSchema, squadPortabilityImportSchema,
38
+ // Access / membership
39
+ acceptInviteSchema, createSquadInviteSchema, claimJoinRequestApiKeySchema, createCliAuthChallengeSchema, resolveCliAuthChallengeSchema, updateSquadMemberSchema, updateSquadMemberWithPermissionsSchema, archiveSquadMemberSchema, updateMemberPermissionsSchema, updateUserSquadAccessSchema,
40
+ // Instance settings
41
+ patchInstanceGeneralSettingsSchema, patchInstanceExperimentalSettingsSchema, } from "@slaw-ai/shared";
42
+ const zodTypeName = (schema) => schema._def.typeName;
43
+ function unwrapSchema(schema) {
44
+ const typeName = zodTypeName(schema);
45
+ if (typeName === "ZodOptional" || typeName === "ZodDefault" || typeName === "ZodCatch") {
46
+ return unwrapSchema(schema._def.innerType);
47
+ }
48
+ if (typeName === "ZodEffects") {
49
+ return unwrapSchema(schema._def.schema);
50
+ }
51
+ return schema;
52
+ }
53
+ function isOptionalSchema(schema) {
54
+ const typeName = zodTypeName(schema);
55
+ if (typeName === "ZodOptional" || typeName === "ZodDefault" || typeName === "ZodCatch") {
56
+ return true;
57
+ }
58
+ if (typeName === "ZodEffects") {
59
+ return isOptionalSchema(schema._def.schema);
60
+ }
61
+ if (typeName === "ZodNullable") {
62
+ return isOptionalSchema(schema._def.innerType);
63
+ }
64
+ return false;
65
+ }
66
+ function applyStringChecks(jsonSchema, checks) {
67
+ for (const check of checks) {
68
+ if (check.kind === "min")
69
+ jsonSchema.minLength = check.value;
70
+ if (check.kind === "max")
71
+ jsonSchema.maxLength = check.value;
72
+ if (check.kind === "email")
73
+ jsonSchema.format = "email";
74
+ if (check.kind === "url")
75
+ jsonSchema.format = "uri";
76
+ if (check.kind === "uuid")
77
+ jsonSchema.format = "uuid";
78
+ if (check.kind === "datetime")
79
+ jsonSchema.format = "date-time";
80
+ if (check.kind === "regex" && check.regex instanceof RegExp) {
81
+ jsonSchema.pattern = check.regex.source;
82
+ }
83
+ }
84
+ }
85
+ function applyNumberChecks(jsonSchema, checks) {
86
+ for (const check of checks) {
87
+ if (check.kind === "int")
88
+ jsonSchema.type = "integer";
89
+ if (check.kind === "min") {
90
+ jsonSchema.minimum = check.value;
91
+ if (!check.inclusive)
92
+ jsonSchema.exclusiveMinimum = true;
93
+ }
94
+ if (check.kind === "max") {
95
+ jsonSchema.maximum = check.value;
96
+ if (!check.inclusive)
97
+ jsonSchema.exclusiveMaximum = true;
98
+ }
99
+ }
100
+ }
101
+ function zodToOpenApiSchema(schema) {
102
+ const unwrapped = unwrapSchema(schema);
103
+ const typeName = zodTypeName(unwrapped);
104
+ if (typeName === "ZodString") {
105
+ const jsonSchema = { type: "string" };
106
+ applyStringChecks(jsonSchema, unwrapped._def.checks ?? []);
107
+ return jsonSchema;
108
+ }
109
+ if (typeName === "ZodNumber") {
110
+ const jsonSchema = { type: "number" };
111
+ applyNumberChecks(jsonSchema, unwrapped._def.checks ?? []);
112
+ return jsonSchema;
113
+ }
114
+ if (typeName === "ZodBoolean")
115
+ return { type: "boolean" };
116
+ if (typeName === "ZodDate")
117
+ return { type: "string", format: "date-time" };
118
+ if (typeName === "ZodAny" || typeName === "ZodUnknown")
119
+ return {};
120
+ if (typeName === "ZodLiteral") {
121
+ const value = unwrapped._def.value;
122
+ return { type: typeof value, enum: [value] };
123
+ }
124
+ if (typeName === "ZodEnum") {
125
+ return { type: "string", enum: unwrapped._def.values };
126
+ }
127
+ if (typeName === "ZodNativeEnum") {
128
+ const values = Object.values(unwrapped._def.values).filter((value) => typeof value === "string" || typeof value === "number");
129
+ return { enum: Array.from(new Set(values)) };
130
+ }
131
+ if (typeName === "ZodArray") {
132
+ return { type: "array", items: zodToOpenApiSchema(unwrapped._def.type) };
133
+ }
134
+ if (typeName === "ZodRecord") {
135
+ return {
136
+ type: "object",
137
+ additionalProperties: zodToOpenApiSchema(unwrapped._def.valueType),
138
+ };
139
+ }
140
+ if (typeName === "ZodNullable") {
141
+ return { ...zodToOpenApiSchema(unwrapped._def.innerType), nullable: true };
142
+ }
143
+ if (typeName === "ZodUnion") {
144
+ return { oneOf: unwrapped._def.options.map((option) => zodToOpenApiSchema(option)) };
145
+ }
146
+ if (typeName === "ZodDiscriminatedUnion") {
147
+ return {
148
+ oneOf: Array.from(unwrapped._def.options.values()).map((option) => zodToOpenApiSchema(option)),
149
+ };
150
+ }
151
+ if (typeName === "ZodIntersection") {
152
+ return {
153
+ allOf: [
154
+ zodToOpenApiSchema(unwrapped._def.left),
155
+ zodToOpenApiSchema(unwrapped._def.right),
156
+ ],
157
+ };
158
+ }
159
+ if (typeName === "ZodObject") {
160
+ const shape = unwrapped._def.shape();
161
+ const properties = {};
162
+ const required = [];
163
+ for (const [key, value] of Object.entries(shape)) {
164
+ const propertySchema = value;
165
+ properties[key] = zodToOpenApiSchema(propertySchema);
166
+ if (!isOptionalSchema(propertySchema))
167
+ required.push(key);
168
+ }
169
+ const jsonSchema = { type: "object", properties };
170
+ if (required.length > 0)
171
+ jsonSchema.required = required;
172
+ return jsonSchema;
173
+ }
174
+ return {};
175
+ }
176
+ function normalizeContent(content) {
177
+ return Object.fromEntries(Object.entries(content).map(([contentType, media]) => [
178
+ contentType,
179
+ {
180
+ ...media,
181
+ schema: isZodSchema(media.schema)
182
+ ? zodToOpenApiSchema(media.schema)
183
+ : media.schema,
184
+ },
185
+ ]));
186
+ }
187
+ function isZodSchema(value) {
188
+ return Boolean(value &&
189
+ typeof value === "object" &&
190
+ "_def" in value &&
191
+ typeof value.safeParse === "function");
192
+ }
193
+ function normalizeResponses(responses = {}) {
194
+ return Object.fromEntries(Object.entries(responses).map(([status, response]) => {
195
+ const content = response.content;
196
+ return [
197
+ status,
198
+ content
199
+ ? {
200
+ ...response,
201
+ content: normalizeContent(content),
202
+ }
203
+ : response,
204
+ ];
205
+ }));
206
+ }
207
+ function parametersFromSchema(schema, location) {
208
+ const objectSchema = unwrapSchema(schema);
209
+ if (zodTypeName(objectSchema) !== "ZodObject")
210
+ return [];
211
+ const shape = objectSchema._def.shape();
212
+ return Object.entries(shape).map(([name, value]) => ({
213
+ name,
214
+ in: location,
215
+ required: location === "path" ? true : !isOptionalSchema(value),
216
+ schema: zodToOpenApiSchema(value),
217
+ }));
218
+ }
219
+ class OpenAPIRegistry {
220
+ schemas = {};
221
+ paths = [];
222
+ register(name, schema) {
223
+ this.schemas[name] = zodToOpenApiSchema(schema);
224
+ return { $ref: `#/components/schemas/${name}` };
225
+ }
226
+ registerPath(pathRegistration) {
227
+ this.paths.push(pathRegistration);
228
+ }
229
+ buildPaths() {
230
+ const paths = {};
231
+ for (const { method, path, request, responses, ...operation } of this.paths) {
232
+ const normalizedOperation = {
233
+ ...operation,
234
+ responses: normalizeResponses(responses),
235
+ };
236
+ if (request?.params) {
237
+ normalizedOperation.parameters = parametersFromSchema(request.params, "path");
238
+ }
239
+ if (request?.body) {
240
+ normalizedOperation.requestBody = {
241
+ ...request.body,
242
+ content: normalizeContent(request.body.content),
243
+ };
244
+ }
245
+ paths[path] ??= {};
246
+ paths[path][method] = normalizedOperation;
247
+ }
248
+ return paths;
249
+ }
250
+ buildComponents() {
251
+ return { schemas: this.schemas };
252
+ }
253
+ }
254
+ const registry = new OpenAPIRegistry();
255
+ // ─── Common schemas ──────────────────────────────────────────────────────────
256
+ const ErrorSchema = registry.register("Error", z.object({ error: z.string() }));
257
+ const responses = {
258
+ ok: (schema = z.record(z.unknown())) => ({
259
+ description: "Success",
260
+ content: { "application/json": { schema } },
261
+ }),
262
+ noContent: { description: "No content" },
263
+ badRequest: {
264
+ description: "Bad request",
265
+ content: { "application/json": { schema: ErrorSchema } },
266
+ },
267
+ unauthorized: {
268
+ description: "Unauthorized",
269
+ content: { "application/json": { schema: ErrorSchema } },
270
+ },
271
+ forbidden: {
272
+ description: "Forbidden",
273
+ content: { "application/json": { schema: ErrorSchema } },
274
+ },
275
+ notFound: {
276
+ description: "Not found",
277
+ content: { "application/json": { schema: ErrorSchema } },
278
+ },
279
+ serverError: {
280
+ description: "Internal server error",
281
+ content: { "application/json": { schema: ErrorSchema } },
282
+ },
283
+ };
284
+ const jsonBody = (schema) => ({
285
+ content: { "application/json": { schema } },
286
+ required: true,
287
+ });
288
+ const r = responses;
289
+ const OPERATOR_SESSION_AUTH_SCHEME = "OperatorSessionAuth";
290
+ const OPERATOR_API_KEY_AUTH_SCHEME = "OperatorApiKeyAuth";
291
+ const AGENT_BEARER_AUTH_SCHEME = "AgentBearerAuth";
292
+ function securityRequirement(name) {
293
+ return { [name]: [] };
294
+ }
295
+ const OPERATOR_SECURITY = [
296
+ securityRequirement(OPERATOR_SESSION_AUTH_SCHEME),
297
+ securityRequirement(OPERATOR_API_KEY_AUTH_SCHEME),
298
+ ];
299
+ const AUTHENTICATED_SECURITY = [
300
+ ...OPERATOR_SECURITY,
301
+ securityRequirement(AGENT_BEARER_AUTH_SCHEME),
302
+ ];
303
+ const PUBLIC_OPERATIONS = new Set([
304
+ "GET /api/health",
305
+ "GET /api/openapi.json",
306
+ "GET /api/instance-claim/{token}",
307
+ "POST /api/cli-auth/challenges",
308
+ "GET /api/cli-auth/challenges/{id}",
309
+ "POST /api/cli-auth/challenges/{id}/cancel",
310
+ "GET /api/invites/{token}",
311
+ "GET /api/invites/{token}/logo",
312
+ "GET /api/invites/{token}/onboarding",
313
+ "GET /api/invites/{token}/onboarding.txt",
314
+ "GET /api/invites/{token}/skills/index",
315
+ "GET /api/invites/{token}/skills/{skillName}",
316
+ "GET /api/invites/{token}/test-resolution",
317
+ "POST /api/invites/{token}/accept",
318
+ "POST /api/join-requests/{requestId}/claim-api-key",
319
+ ]);
320
+ const OPERATOR_ONLY_PREFIXES = [
321
+ "/api/auth/",
322
+ "/api/admin/",
323
+ "/api/plugins",
324
+ "/api/instance/",
325
+ ];
326
+ const OPERATOR_ONLY_OPERATIONS = new Set([
327
+ "GET /api/squads",
328
+ "POST /api/squads",
329
+ "GET /api/squads/stats",
330
+ "GET /api/squads/issues",
331
+ "POST /api/instance-claim/{token}/claim",
332
+ "GET /api/cli-auth/me",
333
+ "POST /api/squads/{squadId}/invites",
334
+ "GET /api/squads/{squadId}/invites",
335
+ "GET /api/squads/{squadId}/join-requests",
336
+ "POST /api/squads/{squadId}/join-requests/{requestId}/approve",
337
+ "POST /api/squads/{squadId}/join-requests/{requestId}/reject",
338
+ "GET /api/squads/{squadId}/members",
339
+ "PATCH /api/squads/{squadId}/members/{memberId}",
340
+ "PATCH /api/squads/{squadId}/members/{memberId}/role-and-grants",
341
+ "POST /api/squads/{squadId}/members/{memberId}/archive",
342
+ "PATCH /api/squads/{squadId}/members/{memberId}/permissions",
343
+ "GET /api/squads/{squadId}/user-directory",
344
+ "POST /api/issues/{id}/interactions/{interactionId}/accept",
345
+ "POST /api/issues/{id}/interactions/{interactionId}/reject",
346
+ "POST /api/issues/{id}/interactions/{interactionId}/respond",
347
+ ]);
348
+ const INSTANCE_ADMIN_OPERATIONS = new Set([
349
+ "POST /api/squads",
350
+ "POST /api/plugins/install",
351
+ "POST /api/instance/database-backups",
352
+ "POST /api/admin/users/{userId}/promote-instance-admin",
353
+ "POST /api/admin/users/{userId}/demote-instance-admin",
354
+ "PUT /api/admin/users/{userId}/squad-access",
355
+ ]);
356
+ const CREATED_OPERATIONS = new Set([
357
+ "POST /api/adapters/install",
358
+ "POST /api/squads/{squadId}/agent-hires",
359
+ "POST /api/squads/{squadId}/agents",
360
+ "POST /api/agents/{id}/keys",
361
+ "POST /api/squads/{squadId}/approvals",
362
+ "POST /api/approvals/{id}/comments",
363
+ "POST /api/squads/{squadId}/assets/images",
364
+ "POST /api/squads/{squadId}/logo",
365
+ "POST /api/cli-auth/challenges",
366
+ "POST /api/squads",
367
+ "POST /api/squads/{squadId}/invites",
368
+ "POST /api/squads/{squadId}/cost-events",
369
+ "POST /api/squads/{squadId}/finance-events",
370
+ "POST /api/squads/{squadId}/environments",
371
+ "POST /api/squads/{squadId}/goals",
372
+ "POST /api/squads/{squadId}/labels",
373
+ "POST /api/issues/{id}/work-products",
374
+ "POST /api/issues/{id}/approvals",
375
+ "POST /api/squads/{squadId}/issues",
376
+ "POST /api/issues/{id}/children",
377
+ "POST /api/issues/{id}/interactions",
378
+ "POST /api/issues/{id}/comments",
379
+ "POST /api/squads/{squadId}/issues/{issueId}/attachments",
380
+ "POST /api/squads/{squadId}/projects",
381
+ "POST /api/projects/{id}/workspaces",
382
+ "POST /api/squads/{squadId}/routines",
383
+ "POST /api/routines/{id}/triggers",
384
+ "POST /api/squads/{squadId}/secrets",
385
+ "POST /api/squads/{squadId}/skills",
386
+ "POST /api/squads/{squadId}/skills/import",
387
+ "POST /api/join-requests/{requestId}/claim-api-key",
388
+ "POST /api/admin/users/{userId}/promote-instance-admin",
389
+ "POST /api/plugins/install",
390
+ "POST /api/instance/database-backups",
391
+ ]);
392
+ const ACCEPTED_OPERATIONS = new Set([
393
+ "POST /api/invites/{token}/accept",
394
+ ]);
395
+ const FORBIDDEN_RESPONSE = {
396
+ description: "Forbidden",
397
+ content: {
398
+ "application/json": {
399
+ schema: { $ref: "#/components/schemas/Error" },
400
+ },
401
+ },
402
+ };
403
+ function operationKey(method, path) {
404
+ return `${method.toUpperCase()} ${path}`;
405
+ }
406
+ function isOperatorOnlyOperation(method, path) {
407
+ const key = operationKey(method, path);
408
+ if (OPERATOR_ONLY_OPERATIONS.has(key))
409
+ return true;
410
+ return OPERATOR_ONLY_PREFIXES.some((prefix) => path.startsWith(prefix));
411
+ }
412
+ function resolveOperationAuthLevel(method, path) {
413
+ const key = operationKey(method, path);
414
+ if (PUBLIC_OPERATIONS.has(key))
415
+ return "public";
416
+ if (INSTANCE_ADMIN_OPERATIONS.has(key))
417
+ return "instance_admin";
418
+ if (isOperatorOnlyOperation(method, path))
419
+ return "operator";
420
+ return "authenticated";
421
+ }
422
+ function applyOperationStatusOverride(operation, fromStatus, toStatus) {
423
+ const responses = operation.responses;
424
+ if (!responses || !responses[fromStatus] || responses[toStatus])
425
+ return;
426
+ responses[toStatus] = responses[fromStatus];
427
+ delete responses[fromStatus];
428
+ }
429
+ function applyDocumentFixups(document) {
430
+ document.components ??= {};
431
+ document.components.securitySchemes = {
432
+ [OPERATOR_SESSION_AUTH_SCHEME]: {
433
+ type: "apiKey",
434
+ in: "cookie",
435
+ name: "slaw_session",
436
+ description: "Operator session cookie in authenticated mode. Slaw uses Better Auth; cookie transport may vary by deployment.",
437
+ },
438
+ [OPERATOR_API_KEY_AUTH_SCHEME]: {
439
+ type: "http",
440
+ scheme: "bearer",
441
+ bearerFormat: "Operator API Key",
442
+ description: "Operator API key presented in the Authorization bearer header.",
443
+ },
444
+ [AGENT_BEARER_AUTH_SCHEME]: {
445
+ type: "http",
446
+ scheme: "bearer",
447
+ bearerFormat: "Agent API Key or Agent JWT",
448
+ description: "Agent API key or Slaw-issued local agent JWT presented in the Authorization bearer header.",
449
+ },
450
+ };
451
+ document.security = AUTHENTICATED_SECURITY;
452
+ for (const [path, pathItem] of Object.entries(document.paths ?? {})) {
453
+ for (const [method, operation] of Object.entries(pathItem)) {
454
+ const authLevel = resolveOperationAuthLevel(method, path);
455
+ if (authLevel === "public") {
456
+ operation.security = [];
457
+ }
458
+ else if (authLevel === "authenticated") {
459
+ operation.security = AUTHENTICATED_SECURITY;
460
+ }
461
+ else {
462
+ operation.security = OPERATOR_SECURITY;
463
+ }
464
+ operation["x-slaw-authorization"] =
465
+ authLevel === "instance_admin"
466
+ ? { actor: "operator", instanceAdmin: true }
467
+ : authLevel === "operator"
468
+ ? { actor: "operator" }
469
+ : authLevel === "authenticated"
470
+ ? { actor: "operator_or_agent" }
471
+ : { actor: "public" };
472
+ const key = operationKey(method, path);
473
+ if (authLevel !== "public") {
474
+ const responses = (operation.responses ??= {});
475
+ if (!responses["403"]) {
476
+ responses["403"] = FORBIDDEN_RESPONSE;
477
+ }
478
+ }
479
+ if (CREATED_OPERATIONS.has(key)) {
480
+ applyOperationStatusOverride(operation, "200", "201");
481
+ }
482
+ if (ACCEPTED_OPERATIONS.has(key)) {
483
+ applyOperationStatusOverride(operation, "200", "202");
484
+ }
485
+ }
486
+ }
487
+ return document;
488
+ }
489
+ // ─── Health ──────────────────────────────────────────────────────────────────
490
+ registry.registerPath({
491
+ method: "get",
492
+ path: "/api/health",
493
+ tags: ["health"],
494
+ summary: "Health check",
495
+ responses: {
496
+ 200: r.ok(z.object({
497
+ status: z.enum(["ok", "unhealthy"]),
498
+ version: z.string().optional(),
499
+ deploymentMode: z.string().optional(),
500
+ bootstrapStatus: z.enum(["ready", "bootstrap_pending"]).optional(),
501
+ bootstrapInviteActive: z.boolean().optional(),
502
+ })),
503
+ 503: { description: "Service unavailable", content: { "application/json": { schema: ErrorSchema } } },
504
+ },
505
+ });
506
+ registry.registerPath({
507
+ method: "get",
508
+ path: "/api/openapi.json",
509
+ tags: ["health"],
510
+ summary: "Get the generated OpenAPI document",
511
+ responses: { 200: r.ok() },
512
+ });
513
+ // ─── Squads ───────────────────────────────────────────────────────────────
514
+ registry.registerPath({
515
+ method: "get",
516
+ path: "/api/squads",
517
+ tags: ["squads"],
518
+ summary: "List squads",
519
+ responses: { 200: r.ok(), 401: r.unauthorized },
520
+ });
521
+ registry.registerPath({
522
+ method: "post",
523
+ path: "/api/squads",
524
+ tags: ["squads"],
525
+ summary: "Create a squad",
526
+ request: { body: jsonBody(createSquadSchema) },
527
+ responses: { 200: r.ok(), 400: r.badRequest, 401: r.unauthorized },
528
+ });
529
+ registry.registerPath({
530
+ method: "get",
531
+ path: "/api/squads/stats",
532
+ tags: ["squads"],
533
+ summary: "Squad stats",
534
+ responses: { 200: r.ok(), 401: r.unauthorized },
535
+ });
536
+ registry.registerPath({
537
+ method: "get",
538
+ path: "/api/squads/{squadId}",
539
+ tags: ["squads"],
540
+ summary: "Get a squad",
541
+ request: { params: z.object({ squadId: z.string() }) },
542
+ responses: { 200: r.ok(), 401: r.unauthorized, 404: r.notFound },
543
+ });
544
+ registry.registerPath({
545
+ method: "patch",
546
+ path: "/api/squads/{squadId}",
547
+ tags: ["squads"],
548
+ summary: "Update a squad",
549
+ request: {
550
+ params: z.object({ squadId: z.string() }),
551
+ body: jsonBody(updateSquadSchema.partial()),
552
+ },
553
+ responses: { 200: r.ok(), 400: r.badRequest, 401: r.unauthorized, 404: r.notFound },
554
+ });
555
+ registry.registerPath({
556
+ method: "patch",
557
+ path: "/api/squads/{squadId}/branding",
558
+ tags: ["squads"],
559
+ summary: "Update squad branding",
560
+ request: {
561
+ params: z.object({ squadId: z.string() }),
562
+ body: jsonBody(updateSquadBrandingSchema),
563
+ },
564
+ responses: { 200: r.ok(), 400: r.badRequest, 401: r.unauthorized },
565
+ });
566
+ registry.registerPath({
567
+ method: "post",
568
+ path: "/api/squads/{squadId}/archive",
569
+ tags: ["squads"],
570
+ summary: "Archive a squad",
571
+ request: { params: z.object({ squadId: z.string() }) },
572
+ responses: { 200: r.ok(), 401: r.unauthorized, 404: r.notFound },
573
+ });
574
+ registry.registerPath({
575
+ method: "delete",
576
+ path: "/api/squads/{squadId}",
577
+ tags: ["squads"],
578
+ summary: "Delete a squad",
579
+ request: { params: z.object({ squadId: z.string() }) },
580
+ responses: { 200: r.ok(), 401: r.unauthorized, 404: r.notFound },
581
+ });
582
+ registry.registerPath({
583
+ method: "post",
584
+ path: "/api/squads/{squadId}/exports",
585
+ tags: ["squads"],
586
+ summary: "Export squad data",
587
+ request: { params: z.object({ squadId: z.string() }) },
588
+ responses: { 200: r.ok(), 401: r.unauthorized },
589
+ });
590
+ registry.registerPath({
591
+ method: "post",
592
+ path: "/api/squads/{squadId}/exports/preview",
593
+ tags: ["squads"],
594
+ summary: "Preview squad export",
595
+ request: { params: z.object({ squadId: z.string() }) },
596
+ responses: { 200: r.ok(), 401: r.unauthorized },
597
+ });
598
+ registry.registerPath({
599
+ method: "post",
600
+ path: "/api/squads/{squadId}/imports/preview",
601
+ tags: ["squads"],
602
+ summary: "Preview squad import",
603
+ request: { params: z.object({ squadId: z.string() }) },
604
+ responses: { 200: r.ok(), 400: r.badRequest, 401: r.unauthorized },
605
+ });
606
+ registry.registerPath({
607
+ method: "post",
608
+ path: "/api/squads/{squadId}/imports/apply",
609
+ tags: ["squads"],
610
+ summary: "Apply squad import",
611
+ request: { params: z.object({ squadId: z.string() }) },
612
+ responses: { 200: r.ok(), 400: r.badRequest, 401: r.unauthorized },
613
+ });
614
+ // ─── Agents ──────────────────────────────────────────────────────────────────
615
+ registry.registerPath({
616
+ method: "get",
617
+ path: "/api/squads/{squadId}/agents",
618
+ tags: ["agents"],
619
+ summary: "List agents in a squad",
620
+ request: { params: z.object({ squadId: z.string() }) },
621
+ responses: { 200: r.ok(), 401: r.unauthorized },
622
+ });
623
+ registry.registerPath({
624
+ method: "post",
625
+ path: "/api/squads/{squadId}/agents",
626
+ tags: ["agents"],
627
+ summary: "Create an agent",
628
+ request: {
629
+ params: z.object({ squadId: z.string() }),
630
+ body: jsonBody(createAgentSchema),
631
+ },
632
+ responses: { 200: r.ok(), 400: r.badRequest, 401: r.unauthorized },
633
+ });
634
+ registry.registerPath({
635
+ method: "post",
636
+ path: "/api/squads/{squadId}/agent-hires",
637
+ tags: ["agents"],
638
+ summary: "Hire an agent",
639
+ request: {
640
+ params: z.object({ squadId: z.string() }),
641
+ body: jsonBody(createAgentHireSchema),
642
+ },
643
+ responses: { 200: r.ok(), 400: r.badRequest, 401: r.unauthorized },
644
+ });
645
+ registry.registerPath({
646
+ method: "get",
647
+ path: "/api/squads/{squadId}/agent-configurations",
648
+ tags: ["agents"],
649
+ summary: "List agent configurations for a squad",
650
+ request: { params: z.object({ squadId: z.string() }) },
651
+ responses: { 200: r.ok(), 401: r.unauthorized },
652
+ });
653
+ registry.registerPath({
654
+ method: "get",
655
+ path: "/api/squads/{squadId}/org",
656
+ tags: ["agents"],
657
+ summary: "Get org chart data",
658
+ request: { params: z.object({ squadId: z.string() }) },
659
+ responses: { 200: r.ok(), 401: r.unauthorized },
660
+ });
661
+ registry.registerPath({
662
+ method: "get",
663
+ path: "/api/agents/me",
664
+ tags: ["agents"],
665
+ summary: "Get the current agent",
666
+ responses: { 200: r.ok(), 401: r.unauthorized },
667
+ });
668
+ registry.registerPath({
669
+ method: "get",
670
+ path: "/api/agents/me/inbox-lite",
671
+ tags: ["agents"],
672
+ summary: "Get current agent inbox (lite)",
673
+ responses: { 200: r.ok(), 401: r.unauthorized },
674
+ });
675
+ registry.registerPath({
676
+ method: "get",
677
+ path: "/api/agents/me/inbox/mine",
678
+ tags: ["agents"],
679
+ summary: "Get current agent assigned inbox items",
680
+ responses: { 200: r.ok(), 401: r.unauthorized },
681
+ });
682
+ registry.registerPath({
683
+ method: "get",
684
+ path: "/api/agents/{id}",
685
+ tags: ["agents"],
686
+ summary: "Get an agent",
687
+ request: { params: z.object({ id: z.string() }) },
688
+ responses: { 200: r.ok(), 401: r.unauthorized, 404: r.notFound },
689
+ });
690
+ registry.registerPath({
691
+ method: "patch",
692
+ path: "/api/agents/{id}",
693
+ tags: ["agents"],
694
+ summary: "Update an agent",
695
+ request: {
696
+ params: z.object({ id: z.string() }),
697
+ body: jsonBody(updateAgentSchema.omit({ permissions: true })),
698
+ },
699
+ responses: { 200: r.ok(), 400: r.badRequest, 401: r.unauthorized, 404: r.notFound },
700
+ });
701
+ registry.registerPath({
702
+ method: "delete",
703
+ path: "/api/agents/{id}",
704
+ tags: ["agents"],
705
+ summary: "Delete an agent",
706
+ request: { params: z.object({ id: z.string() }) },
707
+ responses: { 200: r.ok(), 401: r.unauthorized, 404: r.notFound },
708
+ });
709
+ registry.registerPath({
710
+ method: "patch",
711
+ path: "/api/agents/{id}/permissions",
712
+ tags: ["agents"],
713
+ summary: "Update agent permissions",
714
+ request: {
715
+ params: z.object({ id: z.string() }),
716
+ body: jsonBody(updateAgentPermissionsSchema),
717
+ },
718
+ responses: { 200: r.ok(), 400: r.badRequest, 401: r.unauthorized },
719
+ });
720
+ registry.registerPath({
721
+ method: "patch",
722
+ path: "/api/agents/{id}/instructions-path",
723
+ tags: ["agents"],
724
+ summary: "Update agent instructions path",
725
+ request: {
726
+ params: z.object({ id: z.string() }),
727
+ body: jsonBody(updateAgentInstructionsPathSchema),
728
+ },
729
+ responses: { 200: r.ok(), 400: r.badRequest, 401: r.unauthorized },
730
+ });
731
+ registry.registerPath({
732
+ method: "get",
733
+ path: "/api/agents/{id}/instructions-bundle",
734
+ tags: ["agents"],
735
+ summary: "Get agent instructions bundle",
736
+ request: { params: z.object({ id: z.string() }) },
737
+ responses: { 200: r.ok(), 401: r.unauthorized, 404: r.notFound },
738
+ });
739
+ registry.registerPath({
740
+ method: "patch",
741
+ path: "/api/agents/{id}/instructions-bundle",
742
+ tags: ["agents"],
743
+ summary: "Update agent instructions bundle",
744
+ request: {
745
+ params: z.object({ id: z.string() }),
746
+ body: jsonBody(updateAgentInstructionsBundleSchema),
747
+ },
748
+ responses: { 200: r.ok(), 400: r.badRequest, 401: r.unauthorized },
749
+ });
750
+ registry.registerPath({
751
+ method: "get",
752
+ path: "/api/agents/{id}/instructions-bundle/file",
753
+ tags: ["agents"],
754
+ summary: "Get agent instructions file",
755
+ request: { params: z.object({ id: z.string() }) },
756
+ responses: { 200: r.ok(), 401: r.unauthorized, 404: r.notFound },
757
+ });
758
+ registry.registerPath({
759
+ method: "put",
760
+ path: "/api/agents/{id}/instructions-bundle/file",
761
+ tags: ["agents"],
762
+ summary: "Upsert agent instructions file",
763
+ request: {
764
+ params: z.object({ id: z.string() }),
765
+ body: jsonBody(upsertAgentInstructionsFileSchema),
766
+ },
767
+ responses: { 200: r.ok(), 400: r.badRequest, 401: r.unauthorized },
768
+ });
769
+ registry.registerPath({
770
+ method: "delete",
771
+ path: "/api/agents/{id}/instructions-bundle/file",
772
+ tags: ["agents"],
773
+ summary: "Delete agent instructions file",
774
+ request: { params: z.object({ id: z.string() }) },
775
+ responses: { 200: r.ok(), 401: r.unauthorized },
776
+ });
777
+ registry.registerPath({
778
+ method: "get",
779
+ path: "/api/agents/{id}/configuration",
780
+ tags: ["agents"],
781
+ summary: "Get agent configuration",
782
+ request: { params: z.object({ id: z.string() }) },
783
+ responses: { 200: r.ok(), 401: r.unauthorized, 404: r.notFound },
784
+ });
785
+ registry.registerPath({
786
+ method: "get",
787
+ path: "/api/agents/{id}/config-revisions",
788
+ tags: ["agents"],
789
+ summary: "List agent config revisions",
790
+ request: { params: z.object({ id: z.string() }) },
791
+ responses: { 200: r.ok(), 401: r.unauthorized },
792
+ });
793
+ registry.registerPath({
794
+ method: "get",
795
+ path: "/api/agents/{id}/config-revisions/{revisionId}",
796
+ tags: ["agents"],
797
+ summary: "Get an agent config revision",
798
+ request: { params: z.object({ id: z.string(), revisionId: z.string() }) },
799
+ responses: { 200: r.ok(), 401: r.unauthorized, 404: r.notFound },
800
+ });
801
+ registry.registerPath({
802
+ method: "post",
803
+ path: "/api/agents/{id}/config-revisions/{revisionId}/rollback",
804
+ tags: ["agents"],
805
+ summary: "Roll back to a config revision",
806
+ request: { params: z.object({ id: z.string(), revisionId: z.string() }) },
807
+ responses: { 200: r.ok(), 401: r.unauthorized, 404: r.notFound },
808
+ });
809
+ registry.registerPath({
810
+ method: "get",
811
+ path: "/api/agents/{id}/runtime-state",
812
+ tags: ["agents"],
813
+ summary: "Get agent runtime state",
814
+ request: { params: z.object({ id: z.string() }) },
815
+ responses: { 200: r.ok(), 401: r.unauthorized, 404: r.notFound },
816
+ });
817
+ registry.registerPath({
818
+ method: "post",
819
+ path: "/api/agents/{id}/runtime-state/reset-session",
820
+ tags: ["agents"],
821
+ summary: "Reset agent session",
822
+ request: {
823
+ params: z.object({ id: z.string() }),
824
+ body: jsonBody(resetAgentSessionSchema),
825
+ },
826
+ responses: { 200: r.ok(), 400: r.badRequest, 401: r.unauthorized },
827
+ });
828
+ registry.registerPath({
829
+ method: "get",
830
+ path: "/api/agents/{id}/task-sessions",
831
+ tags: ["agents"],
832
+ summary: "List agent task sessions",
833
+ request: { params: z.object({ id: z.string() }) },
834
+ responses: { 200: r.ok(), 401: r.unauthorized },
835
+ });
836
+ registry.registerPath({
837
+ method: "get",
838
+ path: "/api/agents/{id}/skills",
839
+ tags: ["agents"],
840
+ summary: "List agent skills",
841
+ request: { params: z.object({ id: z.string() }) },
842
+ responses: { 200: r.ok(), 401: r.unauthorized },
843
+ });
844
+ registry.registerPath({
845
+ method: "post",
846
+ path: "/api/agents/{id}/skills/sync",
847
+ tags: ["agents"],
848
+ summary: "Sync desired skills onto an agent configuration",
849
+ request: {
850
+ params: z.object({ id: z.string() }),
851
+ body: jsonBody(agentSkillSyncSchema),
852
+ },
853
+ responses: { 200: r.ok(), 400: r.badRequest, 401: r.unauthorized, 404: r.notFound },
854
+ });
855
+ registry.registerPath({
856
+ method: "get",
857
+ path: "/api/agents/{id}/keys",
858
+ tags: ["agents"],
859
+ summary: "List agent API keys",
860
+ request: { params: z.object({ id: z.string() }) },
861
+ responses: { 200: r.ok(), 401: r.unauthorized },
862
+ });
863
+ registry.registerPath({
864
+ method: "post",
865
+ path: "/api/agents/{id}/keys",
866
+ tags: ["agents"],
867
+ summary: "Create an agent API key",
868
+ request: {
869
+ params: z.object({ id: z.string() }),
870
+ body: jsonBody(createAgentKeySchema),
871
+ },
872
+ responses: { 200: r.ok(), 400: r.badRequest, 401: r.unauthorized },
873
+ });
874
+ registry.registerPath({
875
+ method: "delete",
876
+ path: "/api/agents/{id}/keys/{keyId}",
877
+ tags: ["agents"],
878
+ summary: "Delete an agent API key",
879
+ request: { params: z.object({ id: z.string(), keyId: z.string() }) },
880
+ responses: { 200: r.ok(), 401: r.unauthorized, 404: r.notFound },
881
+ });
882
+ registry.registerPath({
883
+ method: "post",
884
+ path: "/api/agents/{id}/wakeup",
885
+ tags: ["agents"],
886
+ summary: "Wake up an agent",
887
+ request: {
888
+ params: z.object({ id: z.string() }),
889
+ body: jsonBody(wakeAgentSchema),
890
+ },
891
+ responses: { 200: r.ok(), 400: r.badRequest, 401: r.unauthorized },
892
+ });
893
+ registry.registerPath({
894
+ method: "post",
895
+ path: "/api/agents/{id}/pause",
896
+ tags: ["agents"],
897
+ summary: "Pause an agent",
898
+ request: { params: z.object({ id: z.string() }) },
899
+ responses: { 200: r.ok(), 401: r.unauthorized },
900
+ });
901
+ registry.registerPath({
902
+ method: "post",
903
+ path: "/api/agents/{id}/resume",
904
+ tags: ["agents"],
905
+ summary: "Resume an agent",
906
+ request: { params: z.object({ id: z.string() }) },
907
+ responses: { 200: r.ok(), 401: r.unauthorized },
908
+ });
909
+ registry.registerPath({
910
+ method: "post",
911
+ path: "/api/agents/{id}/terminate",
912
+ tags: ["agents"],
913
+ summary: "Terminate an agent",
914
+ request: { params: z.object({ id: z.string() }) },
915
+ responses: { 200: r.ok(), 401: r.unauthorized },
916
+ });
917
+ registry.registerPath({
918
+ method: "get",
919
+ path: "/api/instance/scheduler-heartbeats",
920
+ tags: ["agents"],
921
+ summary: "List scheduler heartbeats",
922
+ responses: { 200: r.ok(), 401: r.unauthorized },
923
+ });
924
+ // ─── Adapters ────────────────────────────────────────────────────────────────
925
+ registry.registerPath({
926
+ method: "get",
927
+ path: "/api/squads/{squadId}/adapters/{type}/models",
928
+ tags: ["adapters"],
929
+ summary: "List models for an adapter type",
930
+ request: { params: z.object({ squadId: z.string(), type: z.string() }) },
931
+ responses: { 200: r.ok(), 401: r.unauthorized },
932
+ });
933
+ registry.registerPath({
934
+ method: "get",
935
+ path: "/api/squads/{squadId}/adapters/{type}/detect-model",
936
+ tags: ["adapters"],
937
+ summary: "Detect active model for an adapter",
938
+ request: { params: z.object({ squadId: z.string(), type: z.string() }) },
939
+ responses: { 200: r.ok(), 401: r.unauthorized },
940
+ });
941
+ registry.registerPath({
942
+ method: "post",
943
+ path: "/api/squads/{squadId}/adapters/{type}/test-environment",
944
+ tags: ["adapters"],
945
+ summary: "Validate adapter environment access for a squad",
946
+ request: {
947
+ params: z.object({ squadId: z.string(), type: z.string() }),
948
+ body: jsonBody(testAdapterEnvironmentSchema),
949
+ },
950
+ responses: { 200: r.ok(), 400: r.badRequest, 401: r.unauthorized },
951
+ });
952
+ // ─── Issues ──────────────────────────────────────────────────────────────────
953
+ registry.registerPath({
954
+ method: "get",
955
+ path: "/api/squads/{squadId}/issues",
956
+ tags: ["issues"],
957
+ summary: "List issues in a squad",
958
+ request: { params: z.object({ squadId: z.string() }) },
959
+ responses: { 200: r.ok(), 401: r.unauthorized },
960
+ });
961
+ registry.registerPath({
962
+ method: "post",
963
+ path: "/api/squads/{squadId}/issues",
964
+ tags: ["issues"],
965
+ summary: "Create an issue",
966
+ request: {
967
+ params: z.object({ squadId: z.string() }),
968
+ body: jsonBody(createIssueSchema),
969
+ },
970
+ responses: { 200: r.ok(), 400: r.badRequest, 401: r.unauthorized },
971
+ });
972
+ registry.registerPath({
973
+ method: "get",
974
+ path: "/api/issues/{id}",
975
+ tags: ["issues"],
976
+ summary: "Get an issue",
977
+ request: { params: z.object({ id: z.string() }) },
978
+ responses: { 200: r.ok(), 401: r.unauthorized, 404: r.notFound },
979
+ });
980
+ registry.registerPath({
981
+ method: "patch",
982
+ path: "/api/issues/{id}",
983
+ tags: ["issues"],
984
+ summary: "Update an issue",
985
+ request: {
986
+ params: z.object({ id: z.string() }),
987
+ body: jsonBody(updateIssueSchema.partial()),
988
+ },
989
+ responses: { 200: r.ok(), 400: r.badRequest, 401: r.unauthorized, 404: r.notFound },
990
+ });
991
+ registry.registerPath({
992
+ method: "delete",
993
+ path: "/api/issues/{id}",
994
+ tags: ["issues"],
995
+ summary: "Delete an issue",
996
+ request: { params: z.object({ id: z.string() }) },
997
+ responses: { 200: r.ok(), 401: r.unauthorized, 404: r.notFound },
998
+ });
999
+ registry.registerPath({
1000
+ method: "get",
1001
+ path: "/api/issues/{id}/heartbeat-context",
1002
+ tags: ["issues"],
1003
+ summary: "Get issue heartbeat context",
1004
+ request: { params: z.object({ id: z.string() }) },
1005
+ responses: { 200: r.ok(), 401: r.unauthorized },
1006
+ });
1007
+ registry.registerPath({
1008
+ method: "get",
1009
+ path: "/api/issues/{id}/work-products",
1010
+ tags: ["issues"],
1011
+ summary: "List issue work products",
1012
+ request: { params: z.object({ id: z.string() }) },
1013
+ responses: { 200: r.ok(), 401: r.unauthorized },
1014
+ });
1015
+ registry.registerPath({
1016
+ method: "post",
1017
+ path: "/api/issues/{id}/work-products",
1018
+ tags: ["issues"],
1019
+ summary: "Create an issue work product",
1020
+ request: {
1021
+ params: z.object({ id: z.string() }),
1022
+ body: jsonBody(createIssueWorkProductSchema),
1023
+ },
1024
+ responses: { 200: r.ok(), 400: r.badRequest, 401: r.unauthorized },
1025
+ });
1026
+ registry.registerPath({
1027
+ method: "patch",
1028
+ path: "/api/work-products/{id}",
1029
+ tags: ["issues"],
1030
+ summary: "Update a work product",
1031
+ request: {
1032
+ params: z.object({ id: z.string() }),
1033
+ body: jsonBody(updateIssueWorkProductSchema),
1034
+ },
1035
+ responses: { 200: r.ok(), 400: r.badRequest, 401: r.unauthorized },
1036
+ });
1037
+ registry.registerPath({
1038
+ method: "delete",
1039
+ path: "/api/work-products/{id}",
1040
+ tags: ["issues"],
1041
+ summary: "Delete a work product",
1042
+ request: { params: z.object({ id: z.string() }) },
1043
+ responses: { 200: r.ok(), 401: r.unauthorized },
1044
+ });
1045
+ registry.registerPath({
1046
+ method: "get",
1047
+ path: "/api/issues/{id}/documents",
1048
+ tags: ["issues"],
1049
+ summary: "List issue documents",
1050
+ request: { params: z.object({ id: z.string() }) },
1051
+ responses: { 200: r.ok(), 401: r.unauthorized },
1052
+ });
1053
+ registry.registerPath({
1054
+ method: "get",
1055
+ path: "/api/issues/{id}/documents/{key}",
1056
+ tags: ["issues"],
1057
+ summary: "Get an issue document",
1058
+ request: { params: z.object({ id: z.string(), key: z.string() }) },
1059
+ responses: { 200: r.ok(), 401: r.unauthorized, 404: r.notFound },
1060
+ });
1061
+ registry.registerPath({
1062
+ method: "put",
1063
+ path: "/api/issues/{id}/documents/{key}",
1064
+ tags: ["issues"],
1065
+ summary: "Upsert an issue document",
1066
+ request: {
1067
+ params: z.object({ id: z.string(), key: z.string() }),
1068
+ body: jsonBody(upsertIssueDocumentSchema),
1069
+ },
1070
+ responses: { 200: r.ok(), 400: r.badRequest, 401: r.unauthorized },
1071
+ });
1072
+ registry.registerPath({
1073
+ method: "delete",
1074
+ path: "/api/issues/{id}/documents/{key}",
1075
+ tags: ["issues"],
1076
+ summary: "Delete an issue document",
1077
+ request: { params: z.object({ id: z.string(), key: z.string() }) },
1078
+ responses: { 200: r.ok(), 401: r.unauthorized },
1079
+ });
1080
+ registry.registerPath({
1081
+ method: "get",
1082
+ path: "/api/issues/{id}/documents/{key}/revisions",
1083
+ tags: ["issues"],
1084
+ summary: "List issue document revisions",
1085
+ request: { params: z.object({ id: z.string(), key: z.string() }) },
1086
+ responses: { 200: r.ok(), 401: r.unauthorized },
1087
+ });
1088
+ registry.registerPath({
1089
+ method: "post",
1090
+ path: "/api/issues/{id}/documents/{key}/revisions/{revisionId}/restore",
1091
+ tags: ["issues"],
1092
+ summary: "Restore a document revision",
1093
+ request: {
1094
+ params: z.object({ id: z.string(), key: z.string(), revisionId: z.string() }),
1095
+ body: jsonBody(restoreIssueDocumentRevisionSchema),
1096
+ },
1097
+ responses: { 200: r.ok(), 401: r.unauthorized },
1098
+ });
1099
+ registry.registerPath({
1100
+ method: "get",
1101
+ path: "/api/issues/{id}/comments",
1102
+ tags: ["issues"],
1103
+ summary: "List issue comments",
1104
+ request: { params: z.object({ id: z.string() }) },
1105
+ responses: { 200: r.ok(), 401: r.unauthorized },
1106
+ });
1107
+ registry.registerPath({
1108
+ method: "post",
1109
+ path: "/api/issues/{id}/comments",
1110
+ tags: ["issues"],
1111
+ summary: "Add a comment to an issue",
1112
+ request: {
1113
+ params: z.object({ id: z.string() }),
1114
+ body: jsonBody(addIssueCommentSchema),
1115
+ },
1116
+ responses: { 200: r.ok(), 400: r.badRequest, 401: r.unauthorized },
1117
+ });
1118
+ registry.registerPath({
1119
+ method: "delete",
1120
+ path: "/api/issues/{id}/comments/{commentId}",
1121
+ tags: ["issues"],
1122
+ summary: "Delete an issue comment",
1123
+ request: { params: z.object({ id: z.string(), commentId: z.string() }) },
1124
+ responses: { 200: r.ok(), 401: r.unauthorized },
1125
+ });
1126
+ registry.registerPath({
1127
+ method: "get",
1128
+ path: "/api/issues/{id}/approvals",
1129
+ tags: ["issues"],
1130
+ summary: "List issue approvals",
1131
+ request: { params: z.object({ id: z.string() }) },
1132
+ responses: { 200: r.ok(), 401: r.unauthorized },
1133
+ });
1134
+ registry.registerPath({
1135
+ method: "post",
1136
+ path: "/api/issues/{id}/approvals",
1137
+ tags: ["issues"],
1138
+ summary: "Link an approval to an issue",
1139
+ request: {
1140
+ params: z.object({ id: z.string() }),
1141
+ body: jsonBody(linkIssueApprovalSchema),
1142
+ },
1143
+ responses: { 200: r.ok(), 400: r.badRequest, 401: r.unauthorized },
1144
+ });
1145
+ registry.registerPath({
1146
+ method: "delete",
1147
+ path: "/api/issues/{id}/approvals/{approvalId}",
1148
+ tags: ["issues"],
1149
+ summary: "Unlink an approval from an issue",
1150
+ request: { params: z.object({ id: z.string(), approvalId: z.string() }) },
1151
+ responses: { 200: r.ok(), 401: r.unauthorized },
1152
+ });
1153
+ registry.registerPath({
1154
+ method: "post",
1155
+ path: "/api/issues/{id}/checkout",
1156
+ tags: ["issues"],
1157
+ summary: "Check out an issue",
1158
+ request: {
1159
+ params: z.object({ id: z.string() }),
1160
+ body: jsonBody(checkoutIssueSchema),
1161
+ },
1162
+ responses: { 200: r.ok(), 400: r.badRequest, 401: r.unauthorized },
1163
+ });
1164
+ registry.registerPath({
1165
+ method: "post",
1166
+ path: "/api/issues/{id}/release",
1167
+ tags: ["issues"],
1168
+ summary: "Release an issue",
1169
+ request: { params: z.object({ id: z.string() }) },
1170
+ responses: { 200: r.ok(), 401: r.unauthorized },
1171
+ });
1172
+ registry.registerPath({
1173
+ method: "post",
1174
+ path: "/api/issues/{id}/read",
1175
+ tags: ["issues"],
1176
+ summary: "Mark an issue as read",
1177
+ request: { params: z.object({ id: z.string() }) },
1178
+ responses: { 200: r.ok(), 401: r.unauthorized },
1179
+ });
1180
+ registry.registerPath({
1181
+ method: "delete",
1182
+ path: "/api/issues/{id}/read",
1183
+ tags: ["issues"],
1184
+ summary: "Mark an issue as unread",
1185
+ request: { params: z.object({ id: z.string() }) },
1186
+ responses: { 200: r.ok(), 401: r.unauthorized },
1187
+ });
1188
+ registry.registerPath({
1189
+ method: "post",
1190
+ path: "/api/issues/{id}/inbox-archive",
1191
+ tags: ["issues"],
1192
+ summary: "Archive issue from inbox",
1193
+ request: { params: z.object({ id: z.string() }) },
1194
+ responses: { 200: r.ok(), 401: r.unauthorized },
1195
+ });
1196
+ registry.registerPath({
1197
+ method: "delete",
1198
+ path: "/api/issues/{id}/inbox-archive",
1199
+ tags: ["issues"],
1200
+ summary: "Un-archive issue from inbox",
1201
+ request: { params: z.object({ id: z.string() }) },
1202
+ responses: { 200: r.ok(), 401: r.unauthorized },
1203
+ });
1204
+ registry.registerPath({
1205
+ method: "get",
1206
+ path: "/api/issues/{id}/attachments",
1207
+ tags: ["issues"],
1208
+ summary: "List issue attachments",
1209
+ request: { params: z.object({ id: z.string() }) },
1210
+ responses: { 200: r.ok(), 401: r.unauthorized },
1211
+ });
1212
+ registry.registerPath({
1213
+ method: "get",
1214
+ path: "/api/squads/{squadId}/labels",
1215
+ tags: ["issues"],
1216
+ summary: "List labels in a squad",
1217
+ request: { params: z.object({ squadId: z.string() }) },
1218
+ responses: { 200: r.ok(), 401: r.unauthorized },
1219
+ });
1220
+ registry.registerPath({
1221
+ method: "post",
1222
+ path: "/api/squads/{squadId}/labels",
1223
+ tags: ["issues"],
1224
+ summary: "Create a label",
1225
+ request: {
1226
+ params: z.object({ squadId: z.string() }),
1227
+ body: jsonBody(createIssueLabelSchema),
1228
+ },
1229
+ responses: { 200: r.ok(), 400: r.badRequest, 401: r.unauthorized },
1230
+ });
1231
+ registry.registerPath({
1232
+ method: "delete",
1233
+ path: "/api/labels/{labelId}",
1234
+ tags: ["issues"],
1235
+ summary: "Delete a label",
1236
+ request: { params: z.object({ labelId: z.string() }) },
1237
+ responses: { 200: r.ok(), 401: r.unauthorized },
1238
+ });
1239
+ // ─── Projects ────────────────────────────────────────────────────────────────
1240
+ registry.registerPath({
1241
+ method: "get",
1242
+ path: "/api/squads/{squadId}/projects",
1243
+ tags: ["projects"],
1244
+ summary: "List projects in a squad",
1245
+ request: { params: z.object({ squadId: z.string() }) },
1246
+ responses: { 200: r.ok(), 401: r.unauthorized },
1247
+ });
1248
+ registry.registerPath({
1249
+ method: "post",
1250
+ path: "/api/squads/{squadId}/projects",
1251
+ tags: ["projects"],
1252
+ summary: "Create a project",
1253
+ request: {
1254
+ params: z.object({ squadId: z.string() }),
1255
+ body: jsonBody(createProjectSchema),
1256
+ },
1257
+ responses: { 200: r.ok(), 400: r.badRequest, 401: r.unauthorized },
1258
+ });
1259
+ registry.registerPath({
1260
+ method: "get",
1261
+ path: "/api/projects/{id}",
1262
+ tags: ["projects"],
1263
+ summary: "Get a project",
1264
+ request: { params: z.object({ id: z.string() }) },
1265
+ responses: { 200: r.ok(), 401: r.unauthorized, 404: r.notFound },
1266
+ });
1267
+ registry.registerPath({
1268
+ method: "patch",
1269
+ path: "/api/projects/{id}",
1270
+ tags: ["projects"],
1271
+ summary: "Update a project",
1272
+ request: {
1273
+ params: z.object({ id: z.string() }),
1274
+ body: jsonBody(updateProjectSchema),
1275
+ },
1276
+ responses: { 200: r.ok(), 400: r.badRequest, 401: r.unauthorized },
1277
+ });
1278
+ registry.registerPath({
1279
+ method: "delete",
1280
+ path: "/api/projects/{id}",
1281
+ tags: ["projects"],
1282
+ summary: "Delete a project",
1283
+ request: { params: z.object({ id: z.string() }) },
1284
+ responses: { 200: r.ok(), 401: r.unauthorized },
1285
+ });
1286
+ registry.registerPath({
1287
+ method: "get",
1288
+ path: "/api/projects/{id}/workspaces",
1289
+ tags: ["projects"],
1290
+ summary: "List project workspaces",
1291
+ request: { params: z.object({ id: z.string() }) },
1292
+ responses: { 200: r.ok(), 401: r.unauthorized },
1293
+ });
1294
+ registry.registerPath({
1295
+ method: "post",
1296
+ path: "/api/projects/{id}/workspaces",
1297
+ tags: ["projects"],
1298
+ summary: "Create a project workspace",
1299
+ request: {
1300
+ params: z.object({ id: z.string() }),
1301
+ body: jsonBody(createProjectWorkspaceSchema),
1302
+ },
1303
+ responses: { 200: r.ok(), 400: r.badRequest, 401: r.unauthorized },
1304
+ });
1305
+ registry.registerPath({
1306
+ method: "patch",
1307
+ path: "/api/projects/{id}/workspaces/{workspaceId}",
1308
+ tags: ["projects"],
1309
+ summary: "Update a project workspace",
1310
+ request: {
1311
+ params: z.object({ id: z.string(), workspaceId: z.string() }),
1312
+ body: jsonBody(updateProjectWorkspaceSchema),
1313
+ },
1314
+ responses: { 200: r.ok(), 400: r.badRequest, 401: r.unauthorized, 404: r.notFound },
1315
+ });
1316
+ registry.registerPath({
1317
+ method: "delete",
1318
+ path: "/api/projects/{id}/workspaces/{workspaceId}",
1319
+ tags: ["projects"],
1320
+ summary: "Delete a project workspace",
1321
+ request: { params: z.object({ id: z.string(), workspaceId: z.string() }) },
1322
+ responses: { 200: r.ok(), 401: r.unauthorized },
1323
+ });
1324
+ // ─── Routines ────────────────────────────────────────────────────────────────
1325
+ registry.registerPath({
1326
+ method: "get",
1327
+ path: "/api/squads/{squadId}/routines",
1328
+ tags: ["routines"],
1329
+ summary: "List routines in a squad",
1330
+ request: { params: z.object({ squadId: z.string() }) },
1331
+ responses: { 200: r.ok(), 401: r.unauthorized },
1332
+ });
1333
+ registry.registerPath({
1334
+ method: "post",
1335
+ path: "/api/squads/{squadId}/routines",
1336
+ tags: ["routines"],
1337
+ summary: "Create a routine",
1338
+ request: {
1339
+ params: z.object({ squadId: z.string() }),
1340
+ body: jsonBody(createRoutineSchema),
1341
+ },
1342
+ responses: { 200: r.ok(), 400: r.badRequest, 401: r.unauthorized },
1343
+ });
1344
+ registry.registerPath({
1345
+ method: "get",
1346
+ path: "/api/routines/{id}",
1347
+ tags: ["routines"],
1348
+ summary: "Get a routine",
1349
+ request: { params: z.object({ id: z.string() }) },
1350
+ responses: { 200: r.ok(), 401: r.unauthorized, 404: r.notFound },
1351
+ });
1352
+ registry.registerPath({
1353
+ method: "patch",
1354
+ path: "/api/routines/{id}",
1355
+ tags: ["routines"],
1356
+ summary: "Update a routine",
1357
+ request: {
1358
+ params: z.object({ id: z.string() }),
1359
+ body: jsonBody(updateRoutineSchema),
1360
+ },
1361
+ responses: { 200: r.ok(), 400: r.badRequest, 401: r.unauthorized },
1362
+ });
1363
+ registry.registerPath({
1364
+ method: "get",
1365
+ path: "/api/routines/{id}/runs",
1366
+ tags: ["routines"],
1367
+ summary: "List runs for a routine",
1368
+ request: { params: z.object({ id: z.string() }) },
1369
+ responses: { 200: r.ok(), 401: r.unauthorized },
1370
+ });
1371
+ registry.registerPath({
1372
+ method: "post",
1373
+ path: "/api/routines/{id}/run",
1374
+ tags: ["routines"],
1375
+ summary: "Manually run a routine",
1376
+ request: {
1377
+ params: z.object({ id: z.string() }),
1378
+ body: jsonBody(runRoutineSchema),
1379
+ },
1380
+ responses: { 200: r.ok(), 400: r.badRequest, 401: r.unauthorized },
1381
+ });
1382
+ registry.registerPath({
1383
+ method: "post",
1384
+ path: "/api/routines/{id}/triggers",
1385
+ tags: ["routines"],
1386
+ summary: "Create a routine trigger",
1387
+ request: {
1388
+ params: z.object({ id: z.string() }),
1389
+ body: jsonBody(createRoutineTriggerSchema),
1390
+ },
1391
+ responses: { 200: r.ok(), 400: r.badRequest, 401: r.unauthorized },
1392
+ });
1393
+ registry.registerPath({
1394
+ method: "patch",
1395
+ path: "/api/routine-triggers/{id}",
1396
+ tags: ["routines"],
1397
+ summary: "Update a routine trigger",
1398
+ request: {
1399
+ params: z.object({ id: z.string() }),
1400
+ body: jsonBody(updateRoutineTriggerSchema),
1401
+ },
1402
+ responses: { 200: r.ok(), 400: r.badRequest, 401: r.unauthorized },
1403
+ });
1404
+ registry.registerPath({
1405
+ method: "delete",
1406
+ path: "/api/routine-triggers/{id}",
1407
+ tags: ["routines"],
1408
+ summary: "Delete a routine trigger",
1409
+ request: { params: z.object({ id: z.string() }) },
1410
+ responses: { 200: r.ok(), 401: r.unauthorized },
1411
+ });
1412
+ registry.registerPath({
1413
+ method: "post",
1414
+ path: "/api/routine-triggers/{id}/rotate-secret",
1415
+ tags: ["routines"],
1416
+ summary: "Rotate a routine trigger secret",
1417
+ request: {
1418
+ params: z.object({ id: z.string() }),
1419
+ body: jsonBody(rotateRoutineTriggerSecretSchema),
1420
+ },
1421
+ responses: { 200: r.ok(), 400: r.badRequest, 401: r.unauthorized, 404: r.notFound },
1422
+ });
1423
+ registry.registerPath({
1424
+ method: "post",
1425
+ path: "/api/routine-triggers/public/{publicId}/fire",
1426
+ tags: ["routines"],
1427
+ summary: "Fire a public routine trigger",
1428
+ request: { params: z.object({ publicId: z.string() }) },
1429
+ responses: { 200: r.ok(), 401: r.unauthorized, 404: r.notFound },
1430
+ });
1431
+ // ─── Goals ───────────────────────────────────────────────────────────────────
1432
+ registry.registerPath({
1433
+ method: "get",
1434
+ path: "/api/squads/{squadId}/goals",
1435
+ tags: ["goals"],
1436
+ summary: "List goals in a squad",
1437
+ request: { params: z.object({ squadId: z.string() }) },
1438
+ responses: { 200: r.ok(), 401: r.unauthorized },
1439
+ });
1440
+ registry.registerPath({
1441
+ method: "post",
1442
+ path: "/api/squads/{squadId}/goals",
1443
+ tags: ["goals"],
1444
+ summary: "Create a goal",
1445
+ request: {
1446
+ params: z.object({ squadId: z.string() }),
1447
+ body: jsonBody(createGoalSchema),
1448
+ },
1449
+ responses: { 200: r.ok(), 400: r.badRequest, 401: r.unauthorized },
1450
+ });
1451
+ registry.registerPath({
1452
+ method: "get",
1453
+ path: "/api/goals/{id}",
1454
+ tags: ["goals"],
1455
+ summary: "Get a goal",
1456
+ request: { params: z.object({ id: z.string() }) },
1457
+ responses: { 200: r.ok(), 401: r.unauthorized, 404: r.notFound },
1458
+ });
1459
+ registry.registerPath({
1460
+ method: "patch",
1461
+ path: "/api/goals/{id}",
1462
+ tags: ["goals"],
1463
+ summary: "Update a goal",
1464
+ request: {
1465
+ params: z.object({ id: z.string() }),
1466
+ body: jsonBody(updateGoalSchema),
1467
+ },
1468
+ responses: { 200: r.ok(), 400: r.badRequest, 401: r.unauthorized },
1469
+ });
1470
+ registry.registerPath({
1471
+ method: "delete",
1472
+ path: "/api/goals/{id}",
1473
+ tags: ["goals"],
1474
+ summary: "Delete a goal",
1475
+ request: { params: z.object({ id: z.string() }) },
1476
+ responses: { 200: r.ok(), 401: r.unauthorized },
1477
+ });
1478
+ // ─── Secrets ─────────────────────────────────────────────────────────────────
1479
+ registry.registerPath({
1480
+ method: "get",
1481
+ path: "/api/squads/{squadId}/secret-providers",
1482
+ tags: ["secrets"],
1483
+ summary: "List secret providers",
1484
+ request: { params: z.object({ squadId: z.string() }) },
1485
+ responses: { 200: r.ok(), 401: r.unauthorized },
1486
+ });
1487
+ registry.registerPath({
1488
+ method: "get",
1489
+ path: "/api/squads/{squadId}/secrets",
1490
+ tags: ["secrets"],
1491
+ summary: "List secrets in a squad",
1492
+ request: { params: z.object({ squadId: z.string() }) },
1493
+ responses: { 200: r.ok(), 401: r.unauthorized },
1494
+ });
1495
+ registry.registerPath({
1496
+ method: "post",
1497
+ path: "/api/squads/{squadId}/secrets",
1498
+ tags: ["secrets"],
1499
+ summary: "Create a secret",
1500
+ request: {
1501
+ params: z.object({ squadId: z.string() }),
1502
+ body: jsonBody(createSecretSchema),
1503
+ },
1504
+ responses: { 200: r.ok(), 400: r.badRequest, 401: r.unauthorized },
1505
+ });
1506
+ registry.registerPath({
1507
+ method: "patch",
1508
+ path: "/api/secrets/{id}",
1509
+ tags: ["secrets"],
1510
+ summary: "Update a secret",
1511
+ request: {
1512
+ params: z.object({ id: z.string() }),
1513
+ body: jsonBody(updateSecretSchema),
1514
+ },
1515
+ responses: { 200: r.ok(), 400: r.badRequest, 401: r.unauthorized },
1516
+ });
1517
+ registry.registerPath({
1518
+ method: "post",
1519
+ path: "/api/secrets/{id}/rotate",
1520
+ tags: ["secrets"],
1521
+ summary: "Rotate a secret",
1522
+ request: {
1523
+ params: z.object({ id: z.string() }),
1524
+ body: jsonBody(rotateSecretSchema),
1525
+ },
1526
+ responses: { 200: r.ok(), 400: r.badRequest, 401: r.unauthorized },
1527
+ });
1528
+ registry.registerPath({
1529
+ method: "delete",
1530
+ path: "/api/secrets/{id}",
1531
+ tags: ["secrets"],
1532
+ summary: "Delete a secret",
1533
+ request: { params: z.object({ id: z.string() }) },
1534
+ responses: { 200: r.ok(), 401: r.unauthorized },
1535
+ });
1536
+ // ─── Approvals ───────────────────────────────────────────────────────────────
1537
+ registry.registerPath({
1538
+ method: "get",
1539
+ path: "/api/squads/{squadId}/approvals",
1540
+ tags: ["approvals"],
1541
+ summary: "List approvals in a squad",
1542
+ request: { params: z.object({ squadId: z.string() }) },
1543
+ responses: { 200: r.ok(), 401: r.unauthorized },
1544
+ });
1545
+ registry.registerPath({
1546
+ method: "post",
1547
+ path: "/api/squads/{squadId}/approvals",
1548
+ tags: ["approvals"],
1549
+ summary: "Create an approval",
1550
+ request: {
1551
+ params: z.object({ squadId: z.string() }),
1552
+ body: jsonBody(createApprovalSchema),
1553
+ },
1554
+ responses: { 200: r.ok(), 400: r.badRequest, 401: r.unauthorized },
1555
+ });
1556
+ registry.registerPath({
1557
+ method: "get",
1558
+ path: "/api/approvals/{id}",
1559
+ tags: ["approvals"],
1560
+ summary: "Get an approval",
1561
+ request: { params: z.object({ id: z.string() }) },
1562
+ responses: { 200: r.ok(), 401: r.unauthorized, 404: r.notFound },
1563
+ });
1564
+ registry.registerPath({
1565
+ method: "get",
1566
+ path: "/api/approvals/{id}/issues",
1567
+ tags: ["approvals"],
1568
+ summary: "List issues linked to an approval",
1569
+ request: { params: z.object({ id: z.string() }) },
1570
+ responses: { 200: r.ok(), 401: r.unauthorized },
1571
+ });
1572
+ registry.registerPath({
1573
+ method: "post",
1574
+ path: "/api/approvals/{id}/approve",
1575
+ tags: ["approvals"],
1576
+ summary: "Approve an approval",
1577
+ request: {
1578
+ params: z.object({ id: z.string() }),
1579
+ body: jsonBody(resolveApprovalSchema),
1580
+ },
1581
+ responses: { 200: r.ok(), 400: r.badRequest, 401: r.unauthorized },
1582
+ });
1583
+ registry.registerPath({
1584
+ method: "post",
1585
+ path: "/api/approvals/{id}/reject",
1586
+ tags: ["approvals"],
1587
+ summary: "Reject an approval",
1588
+ request: {
1589
+ params: z.object({ id: z.string() }),
1590
+ body: jsonBody(resolveApprovalSchema),
1591
+ },
1592
+ responses: { 200: r.ok(), 400: r.badRequest, 401: r.unauthorized },
1593
+ });
1594
+ registry.registerPath({
1595
+ method: "post",
1596
+ path: "/api/approvals/{id}/request-revision",
1597
+ tags: ["approvals"],
1598
+ summary: "Request revision on an approval",
1599
+ request: {
1600
+ params: z.object({ id: z.string() }),
1601
+ body: jsonBody(requestApprovalRevisionSchema),
1602
+ },
1603
+ responses: { 200: r.ok(), 400: r.badRequest, 401: r.unauthorized },
1604
+ });
1605
+ registry.registerPath({
1606
+ method: "post",
1607
+ path: "/api/approvals/{id}/resubmit",
1608
+ tags: ["approvals"],
1609
+ summary: "Resubmit an approval",
1610
+ request: {
1611
+ params: z.object({ id: z.string() }),
1612
+ body: jsonBody(resubmitApprovalSchema),
1613
+ },
1614
+ responses: { 200: r.ok(), 400: r.badRequest, 401: r.unauthorized },
1615
+ });
1616
+ registry.registerPath({
1617
+ method: "get",
1618
+ path: "/api/approvals/{id}/comments",
1619
+ tags: ["approvals"],
1620
+ summary: "List approval comments",
1621
+ request: { params: z.object({ id: z.string() }) },
1622
+ responses: { 200: r.ok(), 401: r.unauthorized },
1623
+ });
1624
+ registry.registerPath({
1625
+ method: "post",
1626
+ path: "/api/approvals/{id}/comments",
1627
+ tags: ["approvals"],
1628
+ summary: "Add a comment to an approval",
1629
+ request: {
1630
+ params: z.object({ id: z.string() }),
1631
+ body: jsonBody(addApprovalCommentSchema),
1632
+ },
1633
+ responses: { 200: r.ok(), 400: r.badRequest, 401: r.unauthorized },
1634
+ });
1635
+ // ─── Costs ───────────────────────────────────────────────────────────────────
1636
+ const costSummaryPaths = [
1637
+ "summary", "by-agent", "by-agent-model", "by-provider",
1638
+ "by-biller", "by-project", "finance-summary", "finance-by-biller",
1639
+ "finance-by-kind", "finance-events", "window-spend", "quota-windows",
1640
+ ];
1641
+ for (const segment of costSummaryPaths) {
1642
+ registry.registerPath({
1643
+ method: "get",
1644
+ path: `/api/squads/{squadId}/costs/${segment}`,
1645
+ tags: ["costs"],
1646
+ summary: `Cost report: ${segment}`,
1647
+ request: { params: z.object({ squadId: z.string() }) },
1648
+ responses: { 200: r.ok(), 401: r.unauthorized },
1649
+ });
1650
+ }
1651
+ registry.registerPath({
1652
+ method: "post",
1653
+ path: "/api/squads/{squadId}/cost-events",
1654
+ tags: ["costs"],
1655
+ summary: "Record a cost event",
1656
+ request: {
1657
+ params: z.object({ squadId: z.string() }),
1658
+ body: jsonBody(createCostEventSchema),
1659
+ },
1660
+ responses: { 200: r.ok(), 400: r.badRequest, 401: r.unauthorized },
1661
+ });
1662
+ registry.registerPath({
1663
+ method: "post",
1664
+ path: "/api/squads/{squadId}/finance-events",
1665
+ tags: ["costs"],
1666
+ summary: "Record a finance event",
1667
+ request: {
1668
+ params: z.object({ squadId: z.string() }),
1669
+ body: jsonBody(createFinanceEventSchema),
1670
+ },
1671
+ responses: { 200: r.ok(), 400: r.badRequest, 401: r.unauthorized },
1672
+ });
1673
+ registry.registerPath({
1674
+ method: "post",
1675
+ path: "/api/squads/{squadId}/budgets/policies",
1676
+ tags: ["costs"],
1677
+ summary: "Create or update a budget policy",
1678
+ request: {
1679
+ params: z.object({ squadId: z.string() }),
1680
+ body: jsonBody(upsertBudgetPolicySchema),
1681
+ },
1682
+ responses: { 200: r.ok(), 400: r.badRequest, 401: r.unauthorized, 404: r.notFound },
1683
+ });
1684
+ registry.registerPath({
1685
+ method: "post",
1686
+ path: "/api/squads/{squadId}/budget-incidents/{incidentId}/resolve",
1687
+ tags: ["costs"],
1688
+ summary: "Resolve a budget incident",
1689
+ request: {
1690
+ params: z.object({ squadId: z.string(), incidentId: z.string() }),
1691
+ body: jsonBody(resolveBudgetIncidentSchema),
1692
+ },
1693
+ responses: { 200: r.ok(), 400: r.badRequest, 401: r.unauthorized, 404: r.notFound },
1694
+ });
1695
+ registry.registerPath({
1696
+ method: "get",
1697
+ path: "/api/squads/{squadId}/budgets/overview",
1698
+ tags: ["costs"],
1699
+ summary: "Get budget overview",
1700
+ request: { params: z.object({ squadId: z.string() }) },
1701
+ responses: { 200: r.ok(), 401: r.unauthorized },
1702
+ });
1703
+ registry.registerPath({
1704
+ method: "patch",
1705
+ path: "/api/squads/{squadId}/budgets",
1706
+ tags: ["costs"],
1707
+ summary: "Update squad budget",
1708
+ request: {
1709
+ params: z.object({ squadId: z.string() }),
1710
+ body: jsonBody(updateBudgetSchema),
1711
+ },
1712
+ responses: { 200: r.ok(), 400: r.badRequest, 401: r.unauthorized },
1713
+ });
1714
+ registry.registerPath({
1715
+ method: "patch",
1716
+ path: "/api/agents/{agentId}/budgets",
1717
+ tags: ["costs"],
1718
+ summary: "Update agent budget",
1719
+ request: {
1720
+ params: z.object({ agentId: z.string() }),
1721
+ body: jsonBody(updateBudgetSchema),
1722
+ },
1723
+ responses: { 200: r.ok(), 400: r.badRequest, 401: r.unauthorized },
1724
+ });
1725
+ // ─── Activity ────────────────────────────────────────────────────────────────
1726
+ registry.registerPath({
1727
+ method: "get",
1728
+ path: "/api/squads/{squadId}/activity",
1729
+ tags: ["activity"],
1730
+ summary: "List squad activity",
1731
+ request: { params: z.object({ squadId: z.string() }) },
1732
+ responses: { 200: r.ok(), 401: r.unauthorized },
1733
+ });
1734
+ registry.registerPath({
1735
+ method: "post",
1736
+ path: "/api/squads/{squadId}/activity",
1737
+ tags: ["activity"],
1738
+ summary: "Create an activity entry",
1739
+ request: {
1740
+ params: z.object({ squadId: z.string() }),
1741
+ body: jsonBody(z.object({
1742
+ actorType: z.enum(["agent", "user", "system", "plugin"]).optional(),
1743
+ actorId: z.string().min(1),
1744
+ action: z.string().min(1),
1745
+ entityType: z.string().min(1),
1746
+ entityId: z.string().min(1),
1747
+ agentId: z.string().uuid().optional().nullable(),
1748
+ details: z.record(z.unknown()).optional().nullable(),
1749
+ })),
1750
+ },
1751
+ responses: { 200: r.ok(), 400: r.badRequest, 401: r.unauthorized },
1752
+ });
1753
+ registry.registerPath({
1754
+ method: "get",
1755
+ path: "/api/issues/{id}/activity",
1756
+ tags: ["activity"],
1757
+ summary: "List activity for an issue",
1758
+ request: { params: z.object({ id: z.string() }) },
1759
+ responses: { 200: r.ok(), 401: r.unauthorized },
1760
+ });
1761
+ registry.registerPath({
1762
+ method: "get",
1763
+ path: "/api/issues/{id}/runs",
1764
+ tags: ["activity"],
1765
+ summary: "List runs for an issue",
1766
+ request: { params: z.object({ id: z.string() }) },
1767
+ responses: { 200: r.ok(), 401: r.unauthorized },
1768
+ });
1769
+ registry.registerPath({
1770
+ method: "get",
1771
+ path: "/api/heartbeat-runs/{runId}/issues",
1772
+ tags: ["activity"],
1773
+ summary: "List issues for a heartbeat run",
1774
+ request: { params: z.object({ runId: z.string() }) },
1775
+ responses: { 200: r.ok(), 401: r.unauthorized },
1776
+ });
1777
+ // ─── Dashboard ───────────────────────────────────────────────────────────────
1778
+ registry.registerPath({
1779
+ method: "get",
1780
+ path: "/api/squads/{squadId}/dashboard",
1781
+ tags: ["dashboard"],
1782
+ summary: "Get dashboard data",
1783
+ request: { params: z.object({ squadId: z.string() }) },
1784
+ responses: { 200: r.ok(), 401: r.unauthorized },
1785
+ });
1786
+ // ─── Sidebar ─────────────────────────────────────────────────────────────────
1787
+ registry.registerPath({
1788
+ method: "get",
1789
+ path: "/api/squads/{squadId}/sidebar-badges",
1790
+ tags: ["sidebar"],
1791
+ summary: "Get sidebar badge counts",
1792
+ request: { params: z.object({ squadId: z.string() }) },
1793
+ responses: { 200: r.ok(), 401: r.unauthorized },
1794
+ });
1795
+ registry.registerPath({
1796
+ method: "get",
1797
+ path: "/api/sidebar-preferences/me",
1798
+ tags: ["sidebar"],
1799
+ summary: "Get current user sidebar preferences",
1800
+ responses: { 200: r.ok(), 401: r.unauthorized },
1801
+ });
1802
+ registry.registerPath({
1803
+ method: "put",
1804
+ path: "/api/sidebar-preferences/me",
1805
+ tags: ["sidebar"],
1806
+ summary: "Update current user sidebar preferences",
1807
+ request: { body: jsonBody(upsertSidebarOrderPreferenceSchema) },
1808
+ responses: { 200: r.ok(), 400: r.badRequest, 401: r.unauthorized },
1809
+ });
1810
+ registry.registerPath({
1811
+ method: "get",
1812
+ path: "/api/squads/{squadId}/sidebar-preferences/me",
1813
+ tags: ["sidebar"],
1814
+ summary: "Get sidebar preferences for squad",
1815
+ request: { params: z.object({ squadId: z.string() }) },
1816
+ responses: { 200: r.ok(), 401: r.unauthorized },
1817
+ });
1818
+ registry.registerPath({
1819
+ method: "put",
1820
+ path: "/api/squads/{squadId}/sidebar-preferences/me",
1821
+ tags: ["sidebar"],
1822
+ summary: "Update sidebar preferences for squad",
1823
+ request: {
1824
+ params: z.object({ squadId: z.string() }),
1825
+ body: jsonBody(upsertSidebarOrderPreferenceSchema),
1826
+ },
1827
+ responses: { 200: r.ok(), 400: r.badRequest, 401: r.unauthorized },
1828
+ });
1829
+ // ─── Inbox dismissals ────────────────────────────────────────────────────────
1830
+ registry.registerPath({
1831
+ method: "get",
1832
+ path: "/api/squads/{squadId}/inbox-dismissals",
1833
+ tags: ["inbox"],
1834
+ summary: "List inbox dismissals",
1835
+ request: { params: z.object({ squadId: z.string() }) },
1836
+ responses: { 200: r.ok(), 401: r.unauthorized },
1837
+ });
1838
+ registry.registerPath({
1839
+ method: "post",
1840
+ path: "/api/squads/{squadId}/inbox-dismissals",
1841
+ tags: ["inbox"],
1842
+ summary: "Create an inbox dismissal",
1843
+ request: {
1844
+ params: z.object({ squadId: z.string() }),
1845
+ body: jsonBody(z.object({
1846
+ itemKey: z.string().trim().min(1).regex(/^(approval|join|run):.+$/, "Unsupported inbox item key"),
1847
+ })),
1848
+ },
1849
+ responses: { 200: r.ok(), 401: r.unauthorized },
1850
+ });
1851
+ // ─── Instance settings ────────────────────────────────────────────────────────
1852
+ registry.registerPath({
1853
+ method: "get",
1854
+ path: "/api/instance/settings/general",
1855
+ tags: ["instance"],
1856
+ summary: "Get general instance settings",
1857
+ responses: { 200: r.ok(), 401: r.unauthorized },
1858
+ });
1859
+ registry.registerPath({
1860
+ method: "patch",
1861
+ path: "/api/instance/settings/general",
1862
+ tags: ["instance"],
1863
+ summary: "Update general instance settings",
1864
+ request: { body: jsonBody(patchInstanceGeneralSettingsSchema) },
1865
+ responses: { 200: r.ok(), 400: r.badRequest, 401: r.unauthorized },
1866
+ });
1867
+ registry.registerPath({
1868
+ method: "get",
1869
+ path: "/api/instance/settings/experimental",
1870
+ tags: ["instance"],
1871
+ summary: "Get experimental instance settings",
1872
+ responses: { 200: r.ok(), 401: r.unauthorized },
1873
+ });
1874
+ registry.registerPath({
1875
+ method: "patch",
1876
+ path: "/api/instance/settings/experimental",
1877
+ tags: ["instance"],
1878
+ summary: "Update experimental instance settings",
1879
+ request: { body: jsonBody(patchInstanceExperimentalSettingsSchema) },
1880
+ responses: { 200: r.ok(), 400: r.badRequest, 401: r.unauthorized },
1881
+ });
1882
+ // ─── Access / invites / members ───────────────────────────────────────────────
1883
+ registry.registerPath({
1884
+ method: "get",
1885
+ path: "/api/squads/{squadId}/invites",
1886
+ tags: ["access"],
1887
+ summary: "List squad invites",
1888
+ request: { params: z.object({ squadId: z.string() }) },
1889
+ responses: { 200: r.ok(), 401: r.unauthorized },
1890
+ });
1891
+ registry.registerPath({
1892
+ method: "post",
1893
+ path: "/api/squads/{squadId}/invites",
1894
+ tags: ["access"],
1895
+ summary: "Create a squad invite",
1896
+ request: {
1897
+ params: z.object({ squadId: z.string() }),
1898
+ body: jsonBody(createSquadInviteSchema),
1899
+ },
1900
+ responses: { 200: r.ok(), 400: r.badRequest, 401: r.unauthorized },
1901
+ });
1902
+ registry.registerPath({
1903
+ method: "get",
1904
+ path: "/api/squads/{squadId}/join-requests",
1905
+ tags: ["access"],
1906
+ summary: "List squad join requests",
1907
+ request: { params: z.object({ squadId: z.string() }) },
1908
+ responses: { 200: r.ok(), 401: r.unauthorized },
1909
+ });
1910
+ registry.registerPath({
1911
+ method: "post",
1912
+ path: "/api/squads/{squadId}/join-requests/{requestId}/approve",
1913
+ tags: ["access"],
1914
+ summary: "Approve a squad join request",
1915
+ request: { params: z.object({ squadId: z.string(), requestId: z.string() }) },
1916
+ responses: { 200: r.ok(), 401: r.unauthorized, 404: r.notFound },
1917
+ });
1918
+ registry.registerPath({
1919
+ method: "post",
1920
+ path: "/api/squads/{squadId}/join-requests/{requestId}/reject",
1921
+ tags: ["access"],
1922
+ summary: "Reject a squad join request",
1923
+ request: { params: z.object({ squadId: z.string(), requestId: z.string() }) },
1924
+ responses: { 200: r.ok(), 401: r.unauthorized, 404: r.notFound },
1925
+ });
1926
+ registry.registerPath({
1927
+ method: "post",
1928
+ path: "/api/invites/{inviteId}/revoke",
1929
+ tags: ["access"],
1930
+ summary: "Revoke an invite",
1931
+ request: { params: z.object({ inviteId: z.string() }) },
1932
+ responses: { 200: r.ok(), 401: r.unauthorized, 404: r.notFound },
1933
+ });
1934
+ registry.registerPath({
1935
+ method: "get",
1936
+ path: "/api/invites/{token}",
1937
+ tags: ["access"],
1938
+ summary: "Get an invite by token",
1939
+ request: { params: z.object({ token: z.string() }) },
1940
+ responses: { 200: r.ok(), 404: r.notFound },
1941
+ });
1942
+ registry.registerPath({
1943
+ method: "post",
1944
+ path: "/api/invites/{token}/accept",
1945
+ tags: ["access"],
1946
+ summary: "Accept an invite and create or replay a join request",
1947
+ request: {
1948
+ params: z.object({ token: z.string() }),
1949
+ body: jsonBody(acceptInviteSchema),
1950
+ },
1951
+ responses: { 200: r.ok(), 400: r.badRequest, 401: r.unauthorized, 404: r.notFound },
1952
+ });
1953
+ registry.registerPath({
1954
+ method: "get",
1955
+ path: "/api/squads/{squadId}/members",
1956
+ tags: ["access"],
1957
+ summary: "List squad members",
1958
+ request: { params: z.object({ squadId: z.string() }) },
1959
+ responses: { 200: r.ok(), 401: r.unauthorized },
1960
+ });
1961
+ registry.registerPath({
1962
+ method: "patch",
1963
+ path: "/api/squads/{squadId}/members/{memberId}",
1964
+ tags: ["access"],
1965
+ summary: "Update a squad member status or role",
1966
+ request: {
1967
+ params: z.object({ squadId: z.string(), memberId: z.string() }),
1968
+ body: jsonBody(updateSquadMemberSchema),
1969
+ },
1970
+ responses: { 200: r.ok(), 400: r.badRequest, 401: r.unauthorized, 404: r.notFound },
1971
+ });
1972
+ registry.registerPath({
1973
+ method: "patch",
1974
+ path: "/api/squads/{squadId}/members/{memberId}/role-and-grants",
1975
+ tags: ["access"],
1976
+ summary: "Update a squad member role and explicit grants",
1977
+ request: {
1978
+ params: z.object({ squadId: z.string(), memberId: z.string() }),
1979
+ body: jsonBody(updateSquadMemberWithPermissionsSchema),
1980
+ },
1981
+ responses: { 200: r.ok(), 400: r.badRequest, 401: r.unauthorized, 404: r.notFound },
1982
+ });
1983
+ registry.registerPath({
1984
+ method: "post",
1985
+ path: "/api/squads/{squadId}/members/{memberId}/archive",
1986
+ tags: ["access"],
1987
+ summary: "Archive a squad member",
1988
+ request: {
1989
+ params: z.object({ squadId: z.string(), memberId: z.string() }),
1990
+ body: jsonBody(archiveSquadMemberSchema),
1991
+ },
1992
+ responses: { 200: r.ok(), 400: r.badRequest, 401: r.unauthorized, 404: r.notFound },
1993
+ });
1994
+ registry.registerPath({
1995
+ method: "patch",
1996
+ path: "/api/squads/{squadId}/members/{memberId}/permissions",
1997
+ tags: ["access"],
1998
+ summary: "Update explicit squad member permissions",
1999
+ request: {
2000
+ params: z.object({ squadId: z.string(), memberId: z.string() }),
2001
+ body: jsonBody(updateMemberPermissionsSchema),
2002
+ },
2003
+ responses: { 200: r.ok(), 400: r.badRequest, 401: r.unauthorized, 404: r.notFound },
2004
+ });
2005
+ registry.registerPath({
2006
+ method: "get",
2007
+ path: "/api/squads/{squadId}/user-directory",
2008
+ tags: ["access"],
2009
+ summary: "Get squad user directory",
2010
+ request: { params: z.object({ squadId: z.string() }) },
2011
+ responses: { 200: r.ok(), 401: r.unauthorized },
2012
+ });
2013
+ registry.registerPath({
2014
+ method: "get",
2015
+ path: "/api/cli-auth/me",
2016
+ tags: ["access"],
2017
+ summary: "Get current CLI auth session",
2018
+ responses: { 200: r.ok(), 401: r.unauthorized },
2019
+ });
2020
+ registry.registerPath({
2021
+ method: "post",
2022
+ path: "/api/cli-auth/challenges",
2023
+ tags: ["access"],
2024
+ summary: "Create a CLI auth challenge",
2025
+ request: { body: jsonBody(createCliAuthChallengeSchema) },
2026
+ responses: { 200: r.ok(), 400: r.badRequest },
2027
+ });
2028
+ registry.registerPath({
2029
+ method: "post",
2030
+ path: "/api/cli-auth/challenges/{id}/approve",
2031
+ tags: ["access"],
2032
+ summary: "Approve a CLI auth challenge",
2033
+ request: {
2034
+ params: z.object({ id: z.string() }),
2035
+ body: jsonBody(resolveCliAuthChallengeSchema),
2036
+ },
2037
+ responses: { 200: r.ok(), 400: r.badRequest, 401: r.unauthorized, 404: r.notFound },
2038
+ });
2039
+ registry.registerPath({
2040
+ method: "post",
2041
+ path: "/api/cli-auth/challenges/{id}/cancel",
2042
+ tags: ["access"],
2043
+ summary: "Cancel a CLI auth challenge",
2044
+ request: {
2045
+ params: z.object({ id: z.string() }),
2046
+ body: jsonBody(resolveCliAuthChallengeSchema),
2047
+ },
2048
+ responses: { 200: r.ok(), 400: r.badRequest, 404: r.notFound },
2049
+ });
2050
+ registry.registerPath({
2051
+ method: "post",
2052
+ path: "/api/cli-auth/revoke-current",
2053
+ tags: ["access"],
2054
+ summary: "Revoke current CLI auth session",
2055
+ responses: { 200: r.ok(), 401: r.unauthorized },
2056
+ });
2057
+ registry.registerPath({
2058
+ method: "get",
2059
+ path: "/api/skills/available",
2060
+ tags: ["access"],
2061
+ summary: "List available skills",
2062
+ responses: { 200: r.ok() },
2063
+ });
2064
+ registry.registerPath({
2065
+ method: "get",
2066
+ path: "/api/skills/index",
2067
+ tags: ["access"],
2068
+ summary: "Get skills index",
2069
+ responses: { 200: r.ok() },
2070
+ });
2071
+ registry.registerPath({
2072
+ method: "get",
2073
+ path: "/api/skills/{skillName}",
2074
+ tags: ["access"],
2075
+ summary: "Get a skill by name",
2076
+ request: { params: z.object({ skillName: z.string() }) },
2077
+ responses: { 200: r.ok(), 404: r.notFound },
2078
+ });
2079
+ registry.registerPath({
2080
+ method: "post",
2081
+ path: "/api/join-requests/{requestId}/claim-api-key",
2082
+ tags: ["access"],
2083
+ summary: "Claim the initial API key for an approved agent join request",
2084
+ request: {
2085
+ params: z.object({ requestId: z.string() }),
2086
+ body: jsonBody(claimJoinRequestApiKeySchema),
2087
+ },
2088
+ responses: { 200: r.ok(), 400: r.badRequest, 403: r.forbidden, 404: r.notFound },
2089
+ });
2090
+ registry.registerPath({
2091
+ method: "get",
2092
+ path: "/api/admin/users",
2093
+ tags: ["admin"],
2094
+ summary: "List all users (admin)",
2095
+ responses: { 200: r.ok(), 401: r.unauthorized, 403: r.forbidden },
2096
+ });
2097
+ // ─── Auth / profile ──────────────────────────────────────────────────────────
2098
+ registry.registerPath({
2099
+ method: "get",
2100
+ path: "/api/auth/get-session",
2101
+ tags: ["auth"],
2102
+ summary: "Get current session",
2103
+ responses: { 200: r.ok(), 401: r.unauthorized },
2104
+ });
2105
+ registry.registerPath({
2106
+ method: "get",
2107
+ path: "/api/auth/profile",
2108
+ tags: ["auth"],
2109
+ summary: "Get current user profile",
2110
+ responses: { 200: r.ok(), 401: r.unauthorized },
2111
+ });
2112
+ registry.registerPath({
2113
+ method: "patch",
2114
+ path: "/api/auth/profile",
2115
+ tags: ["auth"],
2116
+ summary: "Update current user profile",
2117
+ request: { body: jsonBody(updateCurrentUserProfileSchema) },
2118
+ responses: { 200: r.ok(), 400: r.badRequest, 401: r.unauthorized },
2119
+ });
2120
+ registry.registerPath({
2121
+ method: "get",
2122
+ path: "/api/squads/{squadId}/users/{userSlug}/profile",
2123
+ tags: ["auth"],
2124
+ summary: "Get a user profile within a squad",
2125
+ request: { params: z.object({ squadId: z.string(), userSlug: z.string() }) },
2126
+ responses: { 200: r.ok(), 401: r.unauthorized, 404: r.notFound },
2127
+ });
2128
+ // ─── Heartbeat runs ──────────────────────────────────────────────────────────
2129
+ registry.registerPath({
2130
+ method: "get",
2131
+ path: "/api/squads/{squadId}/heartbeat-runs",
2132
+ tags: ["runs"],
2133
+ summary: "List heartbeat runs for a squad",
2134
+ request: { params: z.object({ squadId: z.string() }) },
2135
+ responses: { 200: r.ok(), 401: r.unauthorized },
2136
+ });
2137
+ registry.registerPath({
2138
+ method: "get",
2139
+ path: "/api/squads/{squadId}/live-runs",
2140
+ tags: ["runs"],
2141
+ summary: "List live runs for a squad",
2142
+ request: { params: z.object({ squadId: z.string() }) },
2143
+ responses: { 200: r.ok(), 401: r.unauthorized },
2144
+ });
2145
+ registry.registerPath({
2146
+ method: "get",
2147
+ path: "/api/issues/{issueId}/live-runs",
2148
+ tags: ["runs"],
2149
+ summary: "List live runs for an issue",
2150
+ request: { params: z.object({ issueId: z.string() }) },
2151
+ responses: { 200: r.ok(), 401: r.unauthorized },
2152
+ });
2153
+ registry.registerPath({
2154
+ method: "get",
2155
+ path: "/api/issues/{issueId}/active-run",
2156
+ tags: ["runs"],
2157
+ summary: "Get active run for an issue",
2158
+ request: { params: z.object({ issueId: z.string() }) },
2159
+ responses: { 200: r.ok(), 401: r.unauthorized },
2160
+ });
2161
+ registry.registerPath({
2162
+ method: "get",
2163
+ path: "/api/heartbeat-runs/{runId}",
2164
+ tags: ["runs"],
2165
+ summary: "Get a heartbeat run",
2166
+ request: { params: z.object({ runId: z.string() }) },
2167
+ responses: { 200: r.ok(), 401: r.unauthorized, 404: r.notFound },
2168
+ });
2169
+ registry.registerPath({
2170
+ method: "post",
2171
+ path: "/api/heartbeat-runs/{runId}/cancel",
2172
+ tags: ["runs"],
2173
+ summary: "Cancel a heartbeat run",
2174
+ request: { params: z.object({ runId: z.string() }) },
2175
+ responses: { 200: r.ok(), 401: r.unauthorized },
2176
+ });
2177
+ registry.registerPath({
2178
+ method: "post",
2179
+ path: "/api/heartbeat-runs/{runId}/watchdog-decisions",
2180
+ tags: ["runs"],
2181
+ summary: "Submit watchdog decisions for a run",
2182
+ request: {
2183
+ params: z.object({ runId: z.string() }),
2184
+ body: jsonBody(z.object({
2185
+ decision: z.enum(["snooze", "continue", "dismissed_false_positive"]),
2186
+ evaluationIssueId: z.string().optional().nullable(),
2187
+ reason: z.string().optional().nullable(),
2188
+ snoozedUntil: z.string().datetime().optional().nullable(),
2189
+ })),
2190
+ },
2191
+ responses: { 200: r.ok(), 401: r.unauthorized },
2192
+ });
2193
+ registry.registerPath({
2194
+ method: "get",
2195
+ path: "/api/heartbeat-runs/{runId}/events",
2196
+ tags: ["runs"],
2197
+ summary: "Get events for a heartbeat run",
2198
+ request: { params: z.object({ runId: z.string() }) },
2199
+ responses: { 200: r.ok(), 401: r.unauthorized },
2200
+ });
2201
+ registry.registerPath({
2202
+ method: "get",
2203
+ path: "/api/heartbeat-runs/{runId}/log",
2204
+ tags: ["runs"],
2205
+ summary: "Get log for a heartbeat run",
2206
+ request: { params: z.object({ runId: z.string() }) },
2207
+ responses: { 200: r.ok(), 401: r.unauthorized },
2208
+ });
2209
+ registry.registerPath({
2210
+ method: "get",
2211
+ path: "/api/heartbeat-runs/{runId}/workspace-operations",
2212
+ tags: ["runs"],
2213
+ summary: "List workspace operations for a run",
2214
+ request: { params: z.object({ runId: z.string() }) },
2215
+ responses: { 200: r.ok(), 401: r.unauthorized },
2216
+ });
2217
+ registry.registerPath({
2218
+ method: "get",
2219
+ path: "/api/workspace-operations/{operationId}/log",
2220
+ tags: ["runs"],
2221
+ summary: "Get log for a workspace operation",
2222
+ request: { params: z.object({ operationId: z.string() }) },
2223
+ responses: { 200: r.ok(), 401: r.unauthorized },
2224
+ });
2225
+ // ─── Agent runs & heartbeat ───────────────────────────────────────────────────
2226
+ registry.registerPath({
2227
+ method: "post",
2228
+ path: "/api/agents/{id}/approve",
2229
+ tags: ["agents"],
2230
+ summary: "Approve a pending agent action",
2231
+ request: { params: z.object({ id: z.string() }) },
2232
+ responses: { 200: r.ok(), 401: r.unauthorized },
2233
+ });
2234
+ registry.registerPath({
2235
+ method: "post",
2236
+ path: "/api/agents/{id}/heartbeat/invoke",
2237
+ tags: ["agents"],
2238
+ summary: "Invoke agent heartbeat",
2239
+ request: { params: z.object({ id: z.string() }) },
2240
+ responses: { 200: r.ok(), 401: r.unauthorized },
2241
+ });
2242
+ registry.registerPath({
2243
+ method: "post",
2244
+ path: "/api/agents/{id}/claude-login",
2245
+ tags: ["agents"],
2246
+ summary: "Trigger Claude login for agent",
2247
+ request: { params: z.object({ id: z.string() }) },
2248
+ responses: { 200: r.ok(), 401: r.unauthorized },
2249
+ });
2250
+ // ─── Issue interactions & tree ───────────────────────────────────────────────
2251
+ registry.registerPath({
2252
+ method: "get",
2253
+ path: "/api/issues/{id}/interactions",
2254
+ tags: ["issues"],
2255
+ summary: "List issue thread interactions",
2256
+ request: { params: z.object({ id: z.string() }) },
2257
+ responses: { 200: r.ok(), 401: r.unauthorized },
2258
+ });
2259
+ registry.registerPath({
2260
+ method: "post",
2261
+ path: "/api/issues/{id}/interactions",
2262
+ tags: ["issues"],
2263
+ summary: "Create an issue thread interaction",
2264
+ request: {
2265
+ params: z.object({ id: z.string() }),
2266
+ body: jsonBody(createIssueThreadInteractionSchema),
2267
+ },
2268
+ responses: { 200: r.ok(), 400: r.badRequest, 401: r.unauthorized },
2269
+ });
2270
+ registry.registerPath({
2271
+ method: "post",
2272
+ path: "/api/issues/{id}/interactions/{interactionId}/accept",
2273
+ tags: ["issues"],
2274
+ summary: "Accept an issue thread interaction",
2275
+ request: {
2276
+ params: z.object({ id: z.string(), interactionId: z.string() }),
2277
+ body: jsonBody(acceptIssueThreadInteractionSchema),
2278
+ },
2279
+ responses: { 200: r.ok(), 400: r.badRequest, 401: r.unauthorized, 404: r.notFound },
2280
+ });
2281
+ registry.registerPath({
2282
+ method: "post",
2283
+ path: "/api/issues/{id}/interactions/{interactionId}/reject",
2284
+ tags: ["issues"],
2285
+ summary: "Reject an issue thread interaction",
2286
+ request: {
2287
+ params: z.object({ id: z.string(), interactionId: z.string() }),
2288
+ body: jsonBody(rejectIssueThreadInteractionSchema),
2289
+ },
2290
+ responses: { 200: r.ok(), 400: r.badRequest, 401: r.unauthorized, 404: r.notFound },
2291
+ });
2292
+ registry.registerPath({
2293
+ method: "post",
2294
+ path: "/api/issues/{id}/interactions/{interactionId}/respond",
2295
+ tags: ["issues"],
2296
+ summary: "Answer questions on an issue thread interaction",
2297
+ request: {
2298
+ params: z.object({ id: z.string(), interactionId: z.string() }),
2299
+ body: jsonBody(respondIssueThreadInteractionSchema),
2300
+ },
2301
+ responses: { 200: r.ok(), 400: r.badRequest, 401: r.unauthorized, 404: r.notFound },
2302
+ });
2303
+ registry.registerPath({
2304
+ method: "post",
2305
+ path: "/api/issues/{id}/children",
2306
+ tags: ["issues"],
2307
+ summary: "Create child issues",
2308
+ request: { params: z.object({ id: z.string() }), body: jsonBody(createChildIssueSchema) },
2309
+ responses: { 200: r.ok(), 400: r.badRequest, 401: r.unauthorized },
2310
+ });
2311
+ registry.registerPath({
2312
+ method: "post",
2313
+ path: "/api/issues/{id}/admin/force-release",
2314
+ tags: ["issues"],
2315
+ summary: "Force-release an issue (admin)",
2316
+ request: { params: z.object({ id: z.string() }) },
2317
+ responses: { 200: r.ok(), 401: r.unauthorized, 403: r.forbidden },
2318
+ });
2319
+ registry.registerPath({
2320
+ method: "get",
2321
+ path: "/api/issues/{id}/tree-control/state",
2322
+ tags: ["issues"],
2323
+ summary: "Get issue tree control state",
2324
+ request: { params: z.object({ id: z.string() }) },
2325
+ responses: { 200: r.ok(), 401: r.unauthorized },
2326
+ });
2327
+ registry.registerPath({
2328
+ method: "post",
2329
+ path: "/api/issues/{id}/tree-control/preview",
2330
+ tags: ["issues"],
2331
+ summary: "Preview issue tree control changes",
2332
+ request: {
2333
+ params: z.object({ id: z.string() }),
2334
+ body: jsonBody(previewIssueTreeControlSchema),
2335
+ },
2336
+ responses: { 200: r.ok(), 400: r.badRequest, 401: r.unauthorized },
2337
+ });
2338
+ registry.registerPath({
2339
+ method: "get",
2340
+ path: "/api/issues/{id}/tree-holds",
2341
+ tags: ["issues"],
2342
+ summary: "List issue tree holds",
2343
+ request: { params: z.object({ id: z.string() }) },
2344
+ responses: { 200: r.ok(), 401: r.unauthorized },
2345
+ });
2346
+ registry.registerPath({
2347
+ method: "post",
2348
+ path: "/api/issues/{id}/tree-holds",
2349
+ tags: ["issues"],
2350
+ summary: "Create an issue tree hold",
2351
+ request: {
2352
+ params: z.object({ id: z.string() }),
2353
+ body: jsonBody(createIssueTreeHoldSchema),
2354
+ },
2355
+ responses: { 200: r.ok(), 400: r.badRequest, 401: r.unauthorized },
2356
+ });
2357
+ registry.registerPath({
2358
+ method: "get",
2359
+ path: "/api/issues/{id}/tree-holds/{holdId}",
2360
+ tags: ["issues"],
2361
+ summary: "Get an issue tree hold",
2362
+ request: { params: z.object({ id: z.string(), holdId: z.string() }) },
2363
+ responses: { 200: r.ok(), 401: r.unauthorized, 404: r.notFound },
2364
+ });
2365
+ registry.registerPath({
2366
+ method: "post",
2367
+ path: "/api/issues/{id}/tree-holds/{holdId}/release",
2368
+ tags: ["issues"],
2369
+ summary: "Release an issue tree hold",
2370
+ request: {
2371
+ params: z.object({ id: z.string(), holdId: z.string() }),
2372
+ body: jsonBody(releaseIssueTreeHoldSchema),
2373
+ },
2374
+ responses: { 200: r.ok(), 401: r.unauthorized },
2375
+ });
2376
+ // ─── Attachments ──────────────────────────────────────────────────────────────
2377
+ registry.registerPath({
2378
+ method: "post",
2379
+ path: "/api/squads/{squadId}/issues/{issueId}/attachments",
2380
+ tags: ["assets"],
2381
+ summary: "Upload an attachment to an issue",
2382
+ request: { params: z.object({ squadId: z.string(), issueId: z.string() }) },
2383
+ responses: { 200: r.ok(), 401: r.unauthorized },
2384
+ });
2385
+ registry.registerPath({
2386
+ method: "get",
2387
+ path: "/api/attachments/{attachmentId}/content",
2388
+ tags: ["assets"],
2389
+ summary: "Download attachment content",
2390
+ request: { params: z.object({ attachmentId: z.string() }) },
2391
+ responses: { 200: { description: "File content" }, 401: r.unauthorized, 404: r.notFound },
2392
+ });
2393
+ registry.registerPath({
2394
+ method: "delete",
2395
+ path: "/api/attachments/{attachmentId}",
2396
+ tags: ["assets"],
2397
+ summary: "Delete an attachment",
2398
+ request: { params: z.object({ attachmentId: z.string() }) },
2399
+ responses: { 200: r.ok(), 401: r.unauthorized },
2400
+ });
2401
+ // ─── Assets ──────────────────────────────────────────────────────────────────
2402
+ registry.registerPath({
2403
+ method: "post",
2404
+ path: "/api/squads/{squadId}/assets/images",
2405
+ tags: ["assets"],
2406
+ summary: "Upload an image asset",
2407
+ request: { params: z.object({ squadId: z.string() }) },
2408
+ responses: { 200: r.ok(), 401: r.unauthorized },
2409
+ });
2410
+ registry.registerPath({
2411
+ method: "post",
2412
+ path: "/api/squads/{squadId}/logo",
2413
+ tags: ["assets"],
2414
+ summary: "Upload squad logo",
2415
+ request: { params: z.object({ squadId: z.string() }) },
2416
+ responses: { 200: r.ok(), 401: r.unauthorized },
2417
+ });
2418
+ registry.registerPath({
2419
+ method: "get",
2420
+ path: "/api/assets/{assetId}/content",
2421
+ tags: ["assets"],
2422
+ summary: "Download asset content",
2423
+ request: { params: z.object({ assetId: z.string() }) },
2424
+ responses: { 200: { description: "File content" }, 401: r.unauthorized, 404: r.notFound },
2425
+ });
2426
+ // ─── Squad skills ───────────────────────────────────────────────────────────
2427
+ registry.registerPath({
2428
+ method: "get",
2429
+ path: "/api/squads/{squadId}/skills",
2430
+ tags: ["skills"],
2431
+ summary: "List skills for a squad",
2432
+ request: { params: z.object({ squadId: z.string() }) },
2433
+ responses: { 200: r.ok(), 401: r.unauthorized },
2434
+ });
2435
+ registry.registerPath({
2436
+ method: "get",
2437
+ path: "/api/squads/{squadId}/skills/{skillId}",
2438
+ tags: ["skills"],
2439
+ summary: "Get a squad skill",
2440
+ request: { params: z.object({ squadId: z.string(), skillId: z.string() }) },
2441
+ responses: { 200: r.ok(), 401: r.unauthorized, 404: r.notFound },
2442
+ });
2443
+ registry.registerPath({
2444
+ method: "get",
2445
+ path: "/api/squads/{squadId}/skills/{skillId}/update-status",
2446
+ tags: ["skills"],
2447
+ summary: "Get skill update status",
2448
+ request: { params: z.object({ squadId: z.string(), skillId: z.string() }) },
2449
+ responses: { 200: r.ok(), 401: r.unauthorized },
2450
+ });
2451
+ registry.registerPath({
2452
+ method: "get",
2453
+ path: "/api/squads/{squadId}/skills/{skillId}/files",
2454
+ tags: ["skills"],
2455
+ summary: "List skill files",
2456
+ request: { params: z.object({ squadId: z.string(), skillId: z.string() }) },
2457
+ responses: { 200: r.ok(), 401: r.unauthorized },
2458
+ });
2459
+ registry.registerPath({
2460
+ method: "post",
2461
+ path: "/api/squads/{squadId}/skills",
2462
+ tags: ["skills"],
2463
+ summary: "Create a squad skill",
2464
+ request: {
2465
+ params: z.object({ squadId: z.string() }),
2466
+ body: jsonBody(squadSkillCreateSchema),
2467
+ },
2468
+ responses: { 200: r.ok(), 400: r.badRequest, 401: r.unauthorized },
2469
+ });
2470
+ registry.registerPath({
2471
+ method: "patch",
2472
+ path: "/api/squads/{squadId}/skills/{skillId}/files",
2473
+ tags: ["skills"],
2474
+ summary: "Update a skill file",
2475
+ request: {
2476
+ params: z.object({ squadId: z.string(), skillId: z.string() }),
2477
+ body: jsonBody(squadSkillFileUpdateSchema),
2478
+ },
2479
+ responses: { 200: r.ok(), 400: r.badRequest, 401: r.unauthorized },
2480
+ });
2481
+ registry.registerPath({
2482
+ method: "post",
2483
+ path: "/api/squads/{squadId}/skills/import",
2484
+ tags: ["skills"],
2485
+ summary: "Import a skill",
2486
+ request: {
2487
+ params: z.object({ squadId: z.string() }),
2488
+ body: jsonBody(squadSkillImportSchema),
2489
+ },
2490
+ responses: { 200: r.ok(), 400: r.badRequest, 401: r.unauthorized },
2491
+ });
2492
+ registry.registerPath({
2493
+ method: "post",
2494
+ path: "/api/squads/{squadId}/skills/scan-projects",
2495
+ tags: ["skills"],
2496
+ summary: "Scan project for skills",
2497
+ request: {
2498
+ params: z.object({ squadId: z.string() }),
2499
+ body: jsonBody(squadSkillProjectScanRequestSchema),
2500
+ },
2501
+ responses: { 200: r.ok(), 400: r.badRequest, 401: r.unauthorized },
2502
+ });
2503
+ registry.registerPath({
2504
+ method: "post",
2505
+ path: "/api/squads/{squadId}/skills/{skillId}/install-update",
2506
+ tags: ["skills"],
2507
+ summary: "Install a skill update",
2508
+ request: { params: z.object({ squadId: z.string(), skillId: z.string() }) },
2509
+ responses: { 200: r.ok(), 401: r.unauthorized },
2510
+ });
2511
+ registry.registerPath({
2512
+ method: "delete",
2513
+ path: "/api/squads/{squadId}/skills/{skillId}",
2514
+ tags: ["skills"],
2515
+ summary: "Delete a squad skill",
2516
+ request: { params: z.object({ squadId: z.string(), skillId: z.string() }) },
2517
+ responses: { 200: r.ok(), 401: r.unauthorized },
2518
+ });
2519
+ // ─── Execution workspaces ─────────────────────────────────────────────────────
2520
+ registry.registerPath({
2521
+ method: "get",
2522
+ path: "/api/squads/{squadId}/execution-workspaces",
2523
+ tags: ["execution-workspaces"],
2524
+ summary: "List execution workspaces for a squad",
2525
+ request: { params: z.object({ squadId: z.string() }) },
2526
+ responses: { 200: r.ok(), 401: r.unauthorized },
2527
+ });
2528
+ registry.registerPath({
2529
+ method: "get",
2530
+ path: "/api/execution-workspaces/{id}",
2531
+ tags: ["execution-workspaces"],
2532
+ summary: "Get an execution workspace",
2533
+ request: { params: z.object({ id: z.string() }) },
2534
+ responses: { 200: r.ok(), 401: r.unauthorized, 404: r.notFound },
2535
+ });
2536
+ registry.registerPath({
2537
+ method: "get",
2538
+ path: "/api/execution-workspaces/{id}/close-readiness",
2539
+ tags: ["execution-workspaces"],
2540
+ summary: "Check close-readiness of a workspace",
2541
+ request: { params: z.object({ id: z.string() }) },
2542
+ responses: { 200: r.ok(), 401: r.unauthorized },
2543
+ });
2544
+ registry.registerPath({
2545
+ method: "get",
2546
+ path: "/api/execution-workspaces/{id}/workspace-operations",
2547
+ tags: ["execution-workspaces"],
2548
+ summary: "List workspace operations",
2549
+ request: { params: z.object({ id: z.string() }) },
2550
+ responses: { 200: r.ok(), 401: r.unauthorized },
2551
+ });
2552
+ registry.registerPath({
2553
+ method: "patch",
2554
+ path: "/api/execution-workspaces/{id}",
2555
+ tags: ["execution-workspaces"],
2556
+ summary: "Update an execution workspace",
2557
+ request: {
2558
+ params: z.object({ id: z.string() }),
2559
+ body: jsonBody(updateExecutionWorkspaceSchema),
2560
+ },
2561
+ responses: { 200: r.ok(), 400: r.badRequest, 401: r.unauthorized },
2562
+ });
2563
+ registry.registerPath({
2564
+ method: "post",
2565
+ path: "/api/execution-workspaces/{id}/runtime-services/{action}",
2566
+ tags: ["execution-workspaces"],
2567
+ summary: "Control a runtime service in a workspace",
2568
+ request: {
2569
+ params: z.object({ id: z.string(), action: z.string() }),
2570
+ body: jsonBody(workspaceRuntimeControlTargetSchema),
2571
+ },
2572
+ responses: { 200: r.ok(), 400: r.badRequest, 401: r.unauthorized },
2573
+ });
2574
+ registry.registerPath({
2575
+ method: "post",
2576
+ path: "/api/execution-workspaces/{id}/runtime-commands/{action}",
2577
+ tags: ["execution-workspaces"],
2578
+ summary: "Run a runtime command in a workspace",
2579
+ request: {
2580
+ params: z.object({ id: z.string(), action: z.string() }),
2581
+ body: jsonBody(workspaceRuntimeControlTargetSchema),
2582
+ },
2583
+ responses: { 200: r.ok(), 400: r.badRequest, 401: r.unauthorized },
2584
+ });
2585
+ // ─── Environments ─────────────────────────────────────────────────────────────
2586
+ registry.registerPath({
2587
+ method: "get",
2588
+ path: "/api/squads/{squadId}/environments",
2589
+ tags: ["environments"],
2590
+ summary: "List environments for a squad",
2591
+ request: { params: z.object({ squadId: z.string() }) },
2592
+ responses: { 200: r.ok(), 401: r.unauthorized },
2593
+ });
2594
+ registry.registerPath({
2595
+ method: "get",
2596
+ path: "/api/squads/{squadId}/environments/capabilities",
2597
+ tags: ["environments"],
2598
+ summary: "Get environment capabilities",
2599
+ request: { params: z.object({ squadId: z.string() }) },
2600
+ responses: { 200: r.ok(), 401: r.unauthorized },
2601
+ });
2602
+ registry.registerPath({
2603
+ method: "post",
2604
+ path: "/api/squads/{squadId}/environments",
2605
+ tags: ["environments"],
2606
+ summary: "Create an environment",
2607
+ request: {
2608
+ params: z.object({ squadId: z.string() }),
2609
+ body: jsonBody(createEnvironmentSchema),
2610
+ },
2611
+ responses: { 200: r.ok(), 400: r.badRequest, 401: r.unauthorized },
2612
+ });
2613
+ registry.registerPath({
2614
+ method: "get",
2615
+ path: "/api/environments/{id}",
2616
+ tags: ["environments"],
2617
+ summary: "Get an environment",
2618
+ request: { params: z.object({ id: z.string() }) },
2619
+ responses: { 200: r.ok(), 401: r.unauthorized, 404: r.notFound },
2620
+ });
2621
+ registry.registerPath({
2622
+ method: "get",
2623
+ path: "/api/environments/{id}/leases",
2624
+ tags: ["environments"],
2625
+ summary: "List leases for an environment",
2626
+ request: { params: z.object({ id: z.string() }) },
2627
+ responses: { 200: r.ok(), 401: r.unauthorized },
2628
+ });
2629
+ registry.registerPath({
2630
+ method: "get",
2631
+ path: "/api/environment-leases/{leaseId}",
2632
+ tags: ["environments"],
2633
+ summary: "Get an environment lease",
2634
+ request: { params: z.object({ leaseId: z.string() }) },
2635
+ responses: { 200: r.ok(), 401: r.unauthorized, 404: r.notFound },
2636
+ });
2637
+ registry.registerPath({
2638
+ method: "patch",
2639
+ path: "/api/environments/{id}",
2640
+ tags: ["environments"],
2641
+ summary: "Update an environment",
2642
+ request: {
2643
+ params: z.object({ id: z.string() }),
2644
+ body: jsonBody(updateEnvironmentSchema),
2645
+ },
2646
+ responses: { 200: r.ok(), 400: r.badRequest, 401: r.unauthorized },
2647
+ });
2648
+ registry.registerPath({
2649
+ method: "delete",
2650
+ path: "/api/environments/{id}",
2651
+ tags: ["environments"],
2652
+ summary: "Delete an environment",
2653
+ request: { params: z.object({ id: z.string() }) },
2654
+ responses: { 200: r.ok(), 401: r.unauthorized },
2655
+ });
2656
+ registry.registerPath({
2657
+ method: "post",
2658
+ path: "/api/environments/{id}/probe",
2659
+ tags: ["environments"],
2660
+ summary: "Probe an environment",
2661
+ request: { params: z.object({ id: z.string() }) },
2662
+ responses: { 200: r.ok(), 401: r.unauthorized },
2663
+ });
2664
+ registry.registerPath({
2665
+ method: "post",
2666
+ path: "/api/squads/{squadId}/environments/probe-config",
2667
+ tags: ["environments"],
2668
+ summary: "Probe environment config",
2669
+ request: {
2670
+ params: z.object({ squadId: z.string() }),
2671
+ body: jsonBody(probeEnvironmentConfigSchema),
2672
+ },
2673
+ responses: { 200: r.ok(), 400: r.badRequest, 401: r.unauthorized },
2674
+ });
2675
+ // ─── Adapters (full) ──────────────────────────────────────────────────────────
2676
+ registry.registerPath({
2677
+ method: "get",
2678
+ path: "/api/adapters",
2679
+ tags: ["adapters"],
2680
+ summary: "List all adapters",
2681
+ responses: { 200: r.ok(), 401: r.unauthorized },
2682
+ });
2683
+ registry.registerPath({
2684
+ method: "post",
2685
+ path: "/api/adapters/install",
2686
+ tags: ["adapters"],
2687
+ summary: "Install an adapter",
2688
+ request: {
2689
+ body: jsonBody(z.object({
2690
+ packageName: z.string(),
2691
+ isLocalPath: z.boolean().optional(),
2692
+ version: z.string().optional(),
2693
+ })),
2694
+ },
2695
+ responses: { 200: r.ok(), 400: r.badRequest, 401: r.unauthorized },
2696
+ });
2697
+ registry.registerPath({
2698
+ method: "patch",
2699
+ path: "/api/adapters/{type}",
2700
+ tags: ["adapters"],
2701
+ summary: "Enable or disable an adapter",
2702
+ request: {
2703
+ params: z.object({ type: z.string() }),
2704
+ body: jsonBody(z.object({ disabled: z.boolean() })),
2705
+ },
2706
+ responses: { 200: r.ok(), 401: r.unauthorized },
2707
+ });
2708
+ registry.registerPath({
2709
+ method: "patch",
2710
+ path: "/api/adapters/{type}/override",
2711
+ tags: ["adapters"],
2712
+ summary: "Pause or resume an adapter's override of a builtin",
2713
+ request: {
2714
+ params: z.object({ type: z.string() }),
2715
+ body: jsonBody(z.object({ paused: z.boolean() })),
2716
+ },
2717
+ responses: { 200: r.ok(), 401: r.unauthorized },
2718
+ });
2719
+ registry.registerPath({
2720
+ method: "delete",
2721
+ path: "/api/adapters/{type}",
2722
+ tags: ["adapters"],
2723
+ summary: "Delete an adapter",
2724
+ request: { params: z.object({ type: z.string() }) },
2725
+ responses: { 200: r.ok(), 401: r.unauthorized },
2726
+ });
2727
+ registry.registerPath({
2728
+ method: "post",
2729
+ path: "/api/adapters/{type}/reload",
2730
+ tags: ["adapters"],
2731
+ summary: "Reload an adapter",
2732
+ request: { params: z.object({ type: z.string() }) },
2733
+ responses: { 200: r.ok(), 401: r.unauthorized },
2734
+ });
2735
+ registry.registerPath({
2736
+ method: "post",
2737
+ path: "/api/adapters/{type}/reinstall",
2738
+ tags: ["adapters"],
2739
+ summary: "Reinstall an adapter",
2740
+ request: { params: z.object({ type: z.string() }) },
2741
+ responses: { 200: r.ok(), 401: r.unauthorized },
2742
+ });
2743
+ registry.registerPath({
2744
+ method: "get",
2745
+ path: "/api/adapters/{type}/config-schema",
2746
+ tags: ["adapters"],
2747
+ summary: "Get adapter config schema",
2748
+ request: { params: z.object({ type: z.string() }) },
2749
+ responses: { 200: r.ok(), 401: r.unauthorized },
2750
+ });
2751
+ // ─── Plugins ──────────────────────────────────────────────────────────────────
2752
+ registry.registerPath({
2753
+ method: "get",
2754
+ path: "/api/plugins",
2755
+ tags: ["plugins"],
2756
+ summary: "List installed plugins",
2757
+ responses: { 200: r.ok(), 401: r.unauthorized },
2758
+ });
2759
+ registry.registerPath({
2760
+ method: "get",
2761
+ path: "/api/plugins/examples",
2762
+ tags: ["plugins"],
2763
+ summary: "List example plugins",
2764
+ responses: { 200: r.ok() },
2765
+ });
2766
+ registry.registerPath({
2767
+ method: "get",
2768
+ path: "/api/plugins/ui-contributions",
2769
+ tags: ["plugins"],
2770
+ summary: "List plugin UI contributions",
2771
+ responses: { 200: r.ok(), 401: r.unauthorized },
2772
+ });
2773
+ registry.registerPath({
2774
+ method: "get",
2775
+ path: "/api/plugins/tools",
2776
+ tags: ["plugins"],
2777
+ summary: "List plugin tools",
2778
+ responses: { 200: r.ok(), 401: r.unauthorized },
2779
+ });
2780
+ registry.registerPath({
2781
+ method: "post",
2782
+ path: "/api/plugins/tools/execute",
2783
+ tags: ["plugins"],
2784
+ summary: "Execute a plugin tool",
2785
+ request: {
2786
+ body: jsonBody(z.object({
2787
+ tool: z.string(),
2788
+ parameters: z.record(z.unknown()).optional(),
2789
+ runContext: z.object({
2790
+ agentId: z.string(),
2791
+ runId: z.string(),
2792
+ squadId: z.string(),
2793
+ projectId: z.string(),
2794
+ }),
2795
+ })),
2796
+ },
2797
+ responses: { 200: r.ok(), 400: r.badRequest, 401: r.unauthorized },
2798
+ });
2799
+ registry.registerPath({
2800
+ method: "post",
2801
+ path: "/api/plugins/install",
2802
+ tags: ["plugins"],
2803
+ summary: "Install a plugin",
2804
+ request: {
2805
+ body: jsonBody(z.object({
2806
+ packageName: z.string(),
2807
+ version: z.string().optional(),
2808
+ isLocalPath: z.boolean().optional(),
2809
+ })),
2810
+ },
2811
+ responses: { 200: r.ok(), 400: r.badRequest, 401: r.unauthorized },
2812
+ });
2813
+ registry.registerPath({
2814
+ method: "get",
2815
+ path: "/api/plugins/{pluginId}",
2816
+ tags: ["plugins"],
2817
+ summary: "Get a plugin",
2818
+ request: { params: z.object({ pluginId: z.string() }) },
2819
+ responses: { 200: r.ok(), 401: r.unauthorized, 404: r.notFound },
2820
+ });
2821
+ registry.registerPath({
2822
+ method: "delete",
2823
+ path: "/api/plugins/{pluginId}",
2824
+ tags: ["plugins"],
2825
+ summary: "Delete a plugin",
2826
+ request: { params: z.object({ pluginId: z.string() }) },
2827
+ responses: { 200: r.ok(), 401: r.unauthorized },
2828
+ });
2829
+ registry.registerPath({
2830
+ method: "post",
2831
+ path: "/api/plugins/{pluginId}/enable",
2832
+ tags: ["plugins"],
2833
+ summary: "Enable a plugin",
2834
+ request: { params: z.object({ pluginId: z.string() }) },
2835
+ responses: { 200: r.ok(), 401: r.unauthorized },
2836
+ });
2837
+ registry.registerPath({
2838
+ method: "post",
2839
+ path: "/api/plugins/{pluginId}/disable",
2840
+ tags: ["plugins"],
2841
+ summary: "Disable a plugin",
2842
+ request: { params: z.object({ pluginId: z.string() }) },
2843
+ responses: { 200: r.ok(), 401: r.unauthorized },
2844
+ });
2845
+ registry.registerPath({
2846
+ method: "get",
2847
+ path: "/api/plugins/{pluginId}/health",
2848
+ tags: ["plugins"],
2849
+ summary: "Get plugin health",
2850
+ request: { params: z.object({ pluginId: z.string() }) },
2851
+ responses: { 200: r.ok(), 401: r.unauthorized },
2852
+ });
2853
+ registry.registerPath({
2854
+ method: "get",
2855
+ path: "/api/plugins/{pluginId}/logs",
2856
+ tags: ["plugins"],
2857
+ summary: "Get plugin logs",
2858
+ request: { params: z.object({ pluginId: z.string() }) },
2859
+ responses: { 200: r.ok(), 401: r.unauthorized },
2860
+ });
2861
+ registry.registerPath({
2862
+ method: "post",
2863
+ path: "/api/plugins/{pluginId}/upgrade",
2864
+ tags: ["plugins"],
2865
+ summary: "Upgrade a plugin",
2866
+ request: { params: z.object({ pluginId: z.string() }) },
2867
+ responses: { 200: r.ok(), 401: r.unauthorized },
2868
+ });
2869
+ registry.registerPath({
2870
+ method: "get",
2871
+ path: "/api/plugins/{pluginId}/config",
2872
+ tags: ["plugins"],
2873
+ summary: "Get plugin config",
2874
+ request: { params: z.object({ pluginId: z.string() }) },
2875
+ responses: { 200: r.ok(), 401: r.unauthorized },
2876
+ });
2877
+ registry.registerPath({
2878
+ method: "post",
2879
+ path: "/api/plugins/{pluginId}/config",
2880
+ tags: ["plugins"],
2881
+ summary: "Set plugin config",
2882
+ request: {
2883
+ params: z.object({ pluginId: z.string() }),
2884
+ body: jsonBody(z.object({ configJson: z.record(z.unknown()) })),
2885
+ },
2886
+ responses: { 200: r.ok(), 400: r.badRequest, 401: r.unauthorized },
2887
+ });
2888
+ registry.registerPath({
2889
+ method: "post",
2890
+ path: "/api/plugins/{pluginId}/config/test",
2891
+ tags: ["plugins"],
2892
+ summary: "Test plugin config",
2893
+ request: {
2894
+ params: z.object({ pluginId: z.string() }),
2895
+ body: jsonBody(z.object({ configJson: z.record(z.unknown()) })),
2896
+ },
2897
+ responses: { 200: r.ok(), 400: r.badRequest, 401: r.unauthorized },
2898
+ });
2899
+ registry.registerPath({
2900
+ method: "get",
2901
+ path: "/api/plugins/{pluginId}/jobs",
2902
+ tags: ["plugins"],
2903
+ summary: "List plugin jobs",
2904
+ request: { params: z.object({ pluginId: z.string() }) },
2905
+ responses: { 200: r.ok(), 401: r.unauthorized },
2906
+ });
2907
+ registry.registerPath({
2908
+ method: "get",
2909
+ path: "/api/plugins/{pluginId}/jobs/{jobId}/runs",
2910
+ tags: ["plugins"],
2911
+ summary: "List runs for a plugin job",
2912
+ request: { params: z.object({ pluginId: z.string(), jobId: z.string() }) },
2913
+ responses: { 200: r.ok(), 401: r.unauthorized },
2914
+ });
2915
+ registry.registerPath({
2916
+ method: "post",
2917
+ path: "/api/plugins/{pluginId}/jobs/{jobId}/trigger",
2918
+ tags: ["plugins"],
2919
+ summary: "Trigger a plugin job",
2920
+ request: { params: z.object({ pluginId: z.string(), jobId: z.string() }) },
2921
+ responses: { 200: r.ok(), 401: r.unauthorized },
2922
+ });
2923
+ registry.registerPath({
2924
+ method: "post",
2925
+ path: "/api/plugins/{pluginId}/webhooks/{endpointKey}",
2926
+ tags: ["plugins"],
2927
+ summary: "Deliver an external webhook payload to a plugin",
2928
+ request: {
2929
+ params: z.object({ pluginId: z.string(), endpointKey: z.string() }),
2930
+ },
2931
+ responses: { 200: r.ok(), 401: r.unauthorized },
2932
+ });
2933
+ registry.registerPath({
2934
+ method: "get",
2935
+ path: "/api/plugins/{pluginId}/dashboard",
2936
+ tags: ["plugins"],
2937
+ summary: "Get plugin dashboard data",
2938
+ request: { params: z.object({ pluginId: z.string() }) },
2939
+ responses: { 200: r.ok(), 401: r.unauthorized },
2940
+ });
2941
+ registry.registerPath({
2942
+ method: "post",
2943
+ path: "/api/plugins/{pluginId}/bridge/data",
2944
+ tags: ["plugins"],
2945
+ summary: "Send data via plugin bridge",
2946
+ request: {
2947
+ params: z.object({ pluginId: z.string() }),
2948
+ body: jsonBody(z.object({
2949
+ key: z.string(),
2950
+ squadId: z.string().optional(),
2951
+ params: z.record(z.unknown()).optional(),
2952
+ })),
2953
+ },
2954
+ responses: { 200: r.ok(), 401: r.unauthorized },
2955
+ });
2956
+ registry.registerPath({
2957
+ method: "post",
2958
+ path: "/api/plugins/{pluginId}/bridge/action",
2959
+ tags: ["plugins"],
2960
+ summary: "Send action via plugin bridge",
2961
+ request: {
2962
+ params: z.object({ pluginId: z.string() }),
2963
+ body: jsonBody(z.object({
2964
+ key: z.string(),
2965
+ squadId: z.string().optional(),
2966
+ params: z.record(z.unknown()).optional(),
2967
+ })),
2968
+ },
2969
+ responses: { 200: r.ok(), 401: r.unauthorized },
2970
+ });
2971
+ registry.registerPath({
2972
+ method: "post",
2973
+ path: "/api/plugins/{pluginId}/data/{key}",
2974
+ tags: ["plugins"],
2975
+ summary: "Get plugin data by key (URL-keyed bridge)",
2976
+ request: {
2977
+ params: z.object({ pluginId: z.string(), key: z.string() }),
2978
+ body: jsonBody(z.object({
2979
+ squadId: z.string().optional(),
2980
+ params: z.record(z.unknown()).optional(),
2981
+ })),
2982
+ },
2983
+ responses: { 200: r.ok(), 401: r.unauthorized },
2984
+ });
2985
+ registry.registerPath({
2986
+ method: "post",
2987
+ path: "/api/plugins/{pluginId}/actions/{key}",
2988
+ tags: ["plugins"],
2989
+ summary: "Invoke a plugin action (URL-keyed bridge)",
2990
+ request: {
2991
+ params: z.object({ pluginId: z.string(), key: z.string() }),
2992
+ body: jsonBody(z.object({
2993
+ squadId: z.string().optional(),
2994
+ params: z.record(z.unknown()).optional(),
2995
+ })),
2996
+ },
2997
+ responses: { 200: r.ok(), 401: r.unauthorized },
2998
+ });
2999
+ // ─── Instance database backups ────────────────────────────────────────────────
3000
+ registry.registerPath({
3001
+ method: "post",
3002
+ path: "/api/instance/database-backups",
3003
+ tags: ["instance"],
3004
+ summary: "Trigger a database backup",
3005
+ responses: { 200: r.ok(), 401: r.unauthorized, 403: r.forbidden },
3006
+ });
3007
+ // ─── LLM text endpoints ───────────────────────────────────────────────────────
3008
+ registry.registerPath({
3009
+ method: "get",
3010
+ path: "/api/llms/agent-configuration.txt",
3011
+ tags: ["llms"],
3012
+ summary: "Get agent configuration as plain text (for LLM context)",
3013
+ responses: { 200: { description: "Plain text agent configuration" }, 401: r.unauthorized },
3014
+ });
3015
+ registry.registerPath({
3016
+ method: "get",
3017
+ path: "/api/llms/agent-configuration/{adapterType}.txt",
3018
+ tags: ["llms"],
3019
+ summary: "Get agent configuration for a specific adapter type",
3020
+ request: { params: z.object({ adapterType: z.string() }) },
3021
+ responses: { 200: { description: "Plain text agent configuration" }, 401: r.unauthorized },
3022
+ });
3023
+ registry.registerPath({
3024
+ method: "get",
3025
+ path: "/api/llms/agent-icons.txt",
3026
+ tags: ["llms"],
3027
+ summary: "Get agent icon names as plain text",
3028
+ responses: { 200: { description: "Plain text icon list" }, 401: r.unauthorized },
3029
+ });
3030
+ // ─── Issues (legacy / misc) ───────────────────────────────────────────────────
3031
+ registry.registerPath({
3032
+ method: "get",
3033
+ path: "/api/issues",
3034
+ tags: ["issues"],
3035
+ summary: "Legacy — returns error directing to /api/squads/{squadId}/issues",
3036
+ responses: { 400: r.badRequest },
3037
+ });
3038
+ registry.registerPath({
3039
+ method: "get",
3040
+ path: "/api/issues/{id}/comments/{commentId}",
3041
+ tags: ["issues"],
3042
+ summary: "Get a single issue comment",
3043
+ request: { params: z.object({ id: z.string(), commentId: z.string() }) },
3044
+ responses: { 200: r.ok(), 401: r.unauthorized, 404: r.notFound },
3045
+ });
3046
+ // ─── Org chart images ─────────────────────────────────────────────────────────
3047
+ registry.registerPath({
3048
+ method: "get",
3049
+ path: "/api/squads/{squadId}/org.svg",
3050
+ tags: ["squads"],
3051
+ summary: "Get org chart as SVG",
3052
+ request: { params: z.object({ squadId: z.string() }) },
3053
+ responses: { 200: { description: "SVG image" }, 401: r.unauthorized },
3054
+ });
3055
+ registry.registerPath({
3056
+ method: "get",
3057
+ path: "/api/squads/{squadId}/org.png",
3058
+ tags: ["squads"],
3059
+ summary: "Get org chart as PNG",
3060
+ request: { params: z.object({ squadId: z.string() }) },
3061
+ responses: { 200: { description: "PNG image" }, 401: r.unauthorized },
3062
+ });
3063
+ // ─── Squad portability (legacy routes) ─────────────────────────────────────
3064
+ registry.registerPath({
3065
+ method: "get",
3066
+ path: "/api/squads/issues",
3067
+ tags: ["squads"],
3068
+ summary: "Legacy — returns error directing to correct issues path",
3069
+ responses: { 400: r.badRequest },
3070
+ });
3071
+ registry.registerPath({
3072
+ method: "post",
3073
+ path: "/api/squads/{squadId}/export",
3074
+ tags: ["squads"],
3075
+ summary: "Export a squad (legacy singular form)",
3076
+ request: {
3077
+ params: z.object({ squadId: z.string() }),
3078
+ body: jsonBody(squadPortabilityExportSchema),
3079
+ },
3080
+ responses: { 200: r.ok(), 401: r.unauthorized },
3081
+ });
3082
+ registry.registerPath({
3083
+ method: "post",
3084
+ path: "/api/squads/import/preview",
3085
+ tags: ["squads"],
3086
+ summary: "Preview a squad import (legacy route)",
3087
+ request: { body: jsonBody(squadPortabilityPreviewSchema) },
3088
+ responses: { 200: r.ok(), 400: r.badRequest, 401: r.unauthorized },
3089
+ });
3090
+ registry.registerPath({
3091
+ method: "post",
3092
+ path: "/api/squads/import",
3093
+ tags: ["squads"],
3094
+ summary: "Apply a squad import (legacy route)",
3095
+ request: { body: jsonBody(squadPortabilityImportSchema) },
3096
+ responses: { 200: r.ok(), 400: r.badRequest, 401: r.unauthorized },
3097
+ });
3098
+ // ─── Operator claim & CLI auth ───────────────────────────────────────────────────
3099
+ registry.registerPath({
3100
+ method: "get",
3101
+ path: "/api/instance-claim/{token}",
3102
+ tags: ["access"],
3103
+ summary: "Get operator claim details by token",
3104
+ request: { params: z.object({ token: z.string() }) },
3105
+ responses: { 200: r.ok(), 404: r.notFound },
3106
+ });
3107
+ registry.registerPath({
3108
+ method: "post",
3109
+ path: "/api/instance-claim/{token}/claim",
3110
+ tags: ["access"],
3111
+ summary: "Claim an operator token",
3112
+ request: { params: z.object({ token: z.string() }) },
3113
+ responses: { 200: r.ok(), 401: r.unauthorized, 404: r.notFound },
3114
+ });
3115
+ registry.registerPath({
3116
+ method: "get",
3117
+ path: "/api/cli-auth/challenges/{id}",
3118
+ tags: ["access"],
3119
+ summary: "Get a CLI auth challenge",
3120
+ request: { params: z.object({ id: z.string() }) },
3121
+ responses: { 200: r.ok(), 404: r.notFound },
3122
+ });
3123
+ // ─── Invite onboarding ────────────────────────────────────────────────────────
3124
+ registry.registerPath({
3125
+ method: "get",
3126
+ path: "/api/invites/{token}/logo",
3127
+ tags: ["access"],
3128
+ summary: "Get squad logo for an invite",
3129
+ request: { params: z.object({ token: z.string() }) },
3130
+ responses: { 200: { description: "Image file" }, 404: r.notFound },
3131
+ });
3132
+ registry.registerPath({
3133
+ method: "get",
3134
+ path: "/api/invites/{token}/onboarding",
3135
+ tags: ["access"],
3136
+ summary: "Get onboarding data for an invite",
3137
+ request: { params: z.object({ token: z.string() }) },
3138
+ responses: { 200: r.ok(), 404: r.notFound },
3139
+ });
3140
+ registry.registerPath({
3141
+ method: "get",
3142
+ path: "/api/invites/{token}/onboarding.txt",
3143
+ tags: ["access"],
3144
+ summary: "Get onboarding instructions as plain text",
3145
+ request: { params: z.object({ token: z.string() }) },
3146
+ responses: { 200: { description: "Plain text onboarding instructions" }, 404: r.notFound },
3147
+ });
3148
+ registry.registerPath({
3149
+ method: "get",
3150
+ path: "/api/invites/{token}/skills/index",
3151
+ tags: ["access"],
3152
+ summary: "Get skills index for an invite",
3153
+ request: { params: z.object({ token: z.string() }) },
3154
+ responses: { 200: r.ok(), 404: r.notFound },
3155
+ });
3156
+ registry.registerPath({
3157
+ method: "get",
3158
+ path: "/api/invites/{token}/skills/{skillName}",
3159
+ tags: ["access"],
3160
+ summary: "Get a skill by name for an invite",
3161
+ request: { params: z.object({ token: z.string(), skillName: z.string() }) },
3162
+ responses: { 200: r.ok(), 404: r.notFound },
3163
+ });
3164
+ registry.registerPath({
3165
+ method: "get",
3166
+ path: "/api/invites/{token}/test-resolution",
3167
+ tags: ["access"],
3168
+ summary: "Test invite token resolution",
3169
+ request: { params: z.object({ token: z.string() }) },
3170
+ responses: { 200: r.ok(), 404: r.notFound },
3171
+ });
3172
+ // ─── Admin ────────────────────────────────────────────────────────────────────
3173
+ registry.registerPath({
3174
+ method: "get",
3175
+ path: "/api/admin/users/{userId}/squad-access",
3176
+ tags: ["admin"],
3177
+ summary: "Get squad access for a user (admin)",
3178
+ request: { params: z.object({ userId: z.string() }) },
3179
+ responses: { 200: r.ok(), 401: r.unauthorized, 403: r.forbidden },
3180
+ });
3181
+ registry.registerPath({
3182
+ method: "put",
3183
+ path: "/api/admin/users/{userId}/squad-access",
3184
+ tags: ["admin"],
3185
+ summary: "Set squad access for a user (admin)",
3186
+ request: {
3187
+ params: z.object({ userId: z.string() }),
3188
+ body: jsonBody(updateUserSquadAccessSchema),
3189
+ },
3190
+ responses: { 200: r.ok(), 400: r.badRequest, 401: r.unauthorized, 403: r.forbidden },
3191
+ });
3192
+ registry.registerPath({
3193
+ method: "post",
3194
+ path: "/api/admin/users/{userId}/promote-instance-admin",
3195
+ tags: ["admin"],
3196
+ summary: "Promote a user to instance admin",
3197
+ request: { params: z.object({ userId: z.string() }) },
3198
+ responses: { 200: r.ok(), 401: r.unauthorized, 403: r.forbidden, 404: r.notFound },
3199
+ });
3200
+ registry.registerPath({
3201
+ method: "post",
3202
+ path: "/api/admin/users/{userId}/demote-instance-admin",
3203
+ tags: ["admin"],
3204
+ summary: "Demote a user from instance admin",
3205
+ request: { params: z.object({ userId: z.string() }) },
3206
+ responses: { 200: r.ok(), 401: r.unauthorized, 403: r.forbidden, 404: r.notFound },
3207
+ });
3208
+ // ─── Project workspace runtime ────────────────────────────────────────────────
3209
+ registry.registerPath({
3210
+ method: "post",
3211
+ path: "/api/projects/{id}/workspaces/{workspaceId}/runtime-services/{action}",
3212
+ tags: ["projects"],
3213
+ summary: "Control a runtime service in a project workspace",
3214
+ request: {
3215
+ params: z.object({ id: z.string(), workspaceId: z.string(), action: z.string() }),
3216
+ body: jsonBody(workspaceRuntimeControlTargetSchema),
3217
+ },
3218
+ responses: { 200: r.ok(), 400: r.badRequest, 401: r.unauthorized },
3219
+ });
3220
+ registry.registerPath({
3221
+ method: "post",
3222
+ path: "/api/projects/{id}/workspaces/{workspaceId}/runtime-commands/{action}",
3223
+ tags: ["projects"],
3224
+ summary: "Run a runtime command in a project workspace",
3225
+ request: {
3226
+ params: z.object({ id: z.string(), workspaceId: z.string(), action: z.string() }),
3227
+ body: jsonBody(workspaceRuntimeControlTargetSchema),
3228
+ },
3229
+ responses: { 200: r.ok(), 400: r.badRequest, 401: r.unauthorized },
3230
+ });
3231
+ // ─── Plugin bridge stream ─────────────────────────────────────────────────────
3232
+ registry.registerPath({
3233
+ method: "get",
3234
+ path: "/api/plugins/{pluginId}/bridge/stream/{channel}",
3235
+ tags: ["plugins"],
3236
+ summary: "Subscribe to a plugin bridge SSE stream",
3237
+ request: { params: z.object({ pluginId: z.string(), channel: z.string() }) },
3238
+ responses: {
3239
+ 200: { description: "Server-sent event stream (text/event-stream)" },
3240
+ 401: r.unauthorized,
3241
+ },
3242
+ });
3243
+ // ─── Plugin UI static ─────────────────────────────────────────────────────────
3244
+ registry.registerPath({
3245
+ method: "get",
3246
+ path: "/api/_plugins/{pluginId}/ui/{filePath}",
3247
+ tags: ["plugins"],
3248
+ summary: "Serve plugin UI static file",
3249
+ request: { params: z.object({ pluginId: z.string(), filePath: z.string() }) },
3250
+ responses: { 200: { description: "Static file content" }, 404: r.notFound },
3251
+ });
3252
+ // ─── Adapter UI parser ────────────────────────────────────────────────────────
3253
+ registry.registerPath({
3254
+ method: "get",
3255
+ path: "/api/adapters/{type}/ui-parser.js",
3256
+ tags: ["adapters"],
3257
+ summary: "Get adapter UI parser script",
3258
+ request: { params: z.object({ type: z.string() }) },
3259
+ responses: { 200: { description: "JavaScript file" }, 404: r.notFound },
3260
+ });
3261
+ // ─── Spec builder ─────────────────────────────────────────────────────────────
3262
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any
3263
+ export function buildOpenApiDocument() {
3264
+ return applyDocumentFixups({
3265
+ openapi: "3.0.0",
3266
+ info: {
3267
+ title: "Slaw API",
3268
+ version: "1.0.0",
3269
+ description: "REST API for the Slaw AI agent management platform",
3270
+ },
3271
+ servers: [{ url: "/" }],
3272
+ components: registry.buildComponents(),
3273
+ paths: registry.buildPaths(),
3274
+ });
3275
+ }
3276
+ export const buildOpenApiSpec = buildOpenApiDocument;
3277
+ export function openApiRoutes() {
3278
+ const router = Router();
3279
+ router.get("/openapi.json", (_req, res) => {
3280
+ res.json(buildOpenApiDocument());
3281
+ });
3282
+ return router;
3283
+ }
3284
+ //# sourceMappingURL=openapi.js.map