@cat-factory/kernel 0.6.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 (318) hide show
  1. package/LICENSE +21 -0
  2. package/dist/domain/catalog.d.ts +36 -0
  3. package/dist/domain/catalog.d.ts.map +1 -0
  4. package/dist/domain/catalog.js +55 -0
  5. package/dist/domain/catalog.js.map +1 -0
  6. package/dist/domain/errors.d.ts +57 -0
  7. package/dist/domain/errors.d.ts.map +1 -0
  8. package/dist/domain/errors.js +60 -0
  9. package/dist/domain/errors.js.map +1 -0
  10. package/dist/domain/models.d.ts +204 -0
  11. package/dist/domain/models.d.ts.map +1 -0
  12. package/dist/domain/models.js +522 -0
  13. package/dist/domain/models.js.map +1 -0
  14. package/dist/domain/pipeline-registry.d.ts +19 -0
  15. package/dist/domain/pipeline-registry.d.ts.map +1 -0
  16. package/dist/domain/pipeline-registry.js +48 -0
  17. package/dist/domain/pipeline-registry.js.map +1 -0
  18. package/dist/domain/seed.d.ts +14 -0
  19. package/dist/domain/seed.d.ts.map +1 -0
  20. package/dist/domain/seed.js +369 -0
  21. package/dist/domain/seed.js.map +1 -0
  22. package/dist/domain/service-registration.d.ts +31 -0
  23. package/dist/domain/service-registration.d.ts.map +1 -0
  24. package/dist/domain/service-registration.js +37 -0
  25. package/dist/domain/service-registration.js.map +1 -0
  26. package/dist/domain/subtasks.logic.d.ts +6 -0
  27. package/dist/domain/subtasks.logic.d.ts.map +1 -0
  28. package/dist/domain/subtasks.logic.js +20 -0
  29. package/dist/domain/subtasks.logic.js.map +1 -0
  30. package/dist/domain/types.d.ts +2 -0
  31. package/dist/domain/types.d.ts.map +1 -0
  32. package/dist/domain/types.js +2 -0
  33. package/dist/domain/types.js.map +1 -0
  34. package/dist/index.d.ts +16 -0
  35. package/dist/index.d.ts.map +1 -0
  36. package/dist/index.js +21 -0
  37. package/dist/index.js.map +1 -0
  38. package/dist/ports/account-repositories.d.ts +46 -0
  39. package/dist/ports/account-repositories.d.ts.map +1 -0
  40. package/dist/ports/account-repositories.js +2 -0
  41. package/dist/ports/account-repositories.js.map +1 -0
  42. package/dist/ports/agent-executor.d.ts +361 -0
  43. package/dist/ports/agent-executor.d.ts.map +1 -0
  44. package/dist/ports/agent-executor.js +8 -0
  45. package/dist/ports/agent-executor.js.map +1 -0
  46. package/dist/ports/agent-runs.d.ts +28 -0
  47. package/dist/ports/agent-runs.d.ts.map +1 -0
  48. package/dist/ports/agent-runs.js +2 -0
  49. package/dist/ports/agent-runs.js.map +1 -0
  50. package/dist/ports/board-operations.d.ts +15 -0
  51. package/dist/ports/board-operations.d.ts.map +1 -0
  52. package/dist/ports/board-operations.js +2 -0
  53. package/dist/ports/board-operations.js.map +1 -0
  54. package/dist/ports/board-scan-repositories.d.ts +23 -0
  55. package/dist/ports/board-scan-repositories.d.ts.map +1 -0
  56. package/dist/ports/board-scan-repositories.js +2 -0
  57. package/dist/ports/board-scan-repositories.js.map +1 -0
  58. package/dist/ports/bootstrap-repositories.d.ts +71 -0
  59. package/dist/ports/bootstrap-repositories.d.ts.map +1 -0
  60. package/dist/ports/bootstrap-repositories.js +2 -0
  61. package/dist/ports/bootstrap-repositories.js.map +1 -0
  62. package/dist/ports/bootstrap-runner.d.ts +20 -0
  63. package/dist/ports/bootstrap-runner.d.ts.map +1 -0
  64. package/dist/ports/bootstrap-runner.js +12 -0
  65. package/dist/ports/bootstrap-runner.js.map +1 -0
  66. package/dist/ports/ci-status.d.ts +23 -0
  67. package/dist/ports/ci-status.d.ts.map +1 -0
  68. package/dist/ports/ci-status.js +8 -0
  69. package/dist/ports/ci-status.js.map +1 -0
  70. package/dist/ports/clarity-review-repositories.d.ts +12 -0
  71. package/dist/ports/clarity-review-repositories.d.ts.map +1 -0
  72. package/dist/ports/clarity-review-repositories.js +2 -0
  73. package/dist/ports/clarity-review-repositories.js.map +1 -0
  74. package/dist/ports/consensus-repositories.d.ts +12 -0
  75. package/dist/ports/consensus-repositories.d.ts.map +1 -0
  76. package/dist/ports/consensus-repositories.js +2 -0
  77. package/dist/ports/consensus-repositories.js.map +1 -0
  78. package/dist/ports/document-repositories.d.ts +55 -0
  79. package/dist/ports/document-repositories.d.ts.map +1 -0
  80. package/dist/ports/document-repositories.js +2 -0
  81. package/dist/ports/document-repositories.js.map +1 -0
  82. package/dist/ports/document-source.d.ts +55 -0
  83. package/dist/ports/document-source.d.ts.map +1 -0
  84. package/dist/ports/document-source.js +2 -0
  85. package/dist/ports/document-source.js.map +1 -0
  86. package/dist/ports/email-sender.d.ts +42 -0
  87. package/dist/ports/email-sender.d.ts.map +1 -0
  88. package/dist/ports/email-sender.js +7 -0
  89. package/dist/ports/email-sender.js.map +1 -0
  90. package/dist/ports/environment-provider.d.ts +67 -0
  91. package/dist/ports/environment-provider.d.ts.map +1 -0
  92. package/dist/ports/environment-provider.js +2 -0
  93. package/dist/ports/environment-provider.js.map +1 -0
  94. package/dist/ports/environment-repositories.d.ts +64 -0
  95. package/dist/ports/environment-repositories.d.ts.map +1 -0
  96. package/dist/ports/environment-repositories.js +2 -0
  97. package/dist/ports/environment-repositories.js.map +1 -0
  98. package/dist/ports/execution-events.d.ts +72 -0
  99. package/dist/ports/execution-events.d.ts.map +1 -0
  100. package/dist/ports/execution-events.js +16 -0
  101. package/dist/ports/execution-events.js.map +1 -0
  102. package/dist/ports/fragment-repositories.d.ts +65 -0
  103. package/dist/ports/fragment-repositories.d.ts.map +1 -0
  104. package/dist/ports/fragment-repositories.js +2 -0
  105. package/dist/ports/fragment-repositories.js.map +1 -0
  106. package/dist/ports/fragment-selector.d.ts +64 -0
  107. package/dist/ports/fragment-selector.d.ts.map +1 -0
  108. package/dist/ports/fragment-selector.js +2 -0
  109. package/dist/ports/fragment-selector.js.map +1 -0
  110. package/dist/ports/github-client.d.ts +226 -0
  111. package/dist/ports/github-client.d.ts.map +1 -0
  112. package/dist/ports/github-client.js +2 -0
  113. package/dist/ports/github-client.js.map +1 -0
  114. package/dist/ports/github-provisioning.d.ts +47 -0
  115. package/dist/ports/github-provisioning.d.ts.map +1 -0
  116. package/dist/ports/github-provisioning.js +12 -0
  117. package/dist/ports/github-provisioning.js.map +1 -0
  118. package/dist/ports/github-repositories.d.ts +136 -0
  119. package/dist/ports/github-repositories.d.ts.map +1 -0
  120. package/dist/ports/github-repositories.js +2 -0
  121. package/dist/ports/github-repositories.js.map +1 -0
  122. package/dist/ports/incident-enrichment.d.ts +40 -0
  123. package/dist/ports/incident-enrichment.d.ts.map +1 -0
  124. package/dist/ports/incident-enrichment.js +30 -0
  125. package/dist/ports/incident-enrichment.js.map +1 -0
  126. package/dist/ports/index.d.ts +68 -0
  127. package/dist/ports/index.d.ts.map +1 -0
  128. package/dist/ports/index.js +11 -0
  129. package/dist/ports/index.js.map +1 -0
  130. package/dist/ports/invitation-repositories.d.ts +28 -0
  131. package/dist/ports/invitation-repositories.d.ts.map +1 -0
  132. package/dist/ports/invitation-repositories.js +2 -0
  133. package/dist/ports/invitation-repositories.js.map +1 -0
  134. package/dist/ports/llm-metrics.d.ts +142 -0
  135. package/dist/ports/llm-metrics.d.ts.map +1 -0
  136. package/dist/ports/llm-metrics.js +16 -0
  137. package/dist/ports/llm-metrics.js.map +1 -0
  138. package/dist/ports/llm-trace-sink.d.ts +84 -0
  139. package/dist/ports/llm-trace-sink.d.ts.map +1 -0
  140. package/dist/ports/llm-trace-sink.js +55 -0
  141. package/dist/ports/llm-trace-sink.js.map +1 -0
  142. package/dist/ports/local-model-repositories.d.ts +29 -0
  143. package/dist/ports/local-model-repositories.d.ts.map +1 -0
  144. package/dist/ports/local-model-repositories.js +2 -0
  145. package/dist/ports/local-model-repositories.js.map +1 -0
  146. package/dist/ports/merge-preset-repositories.d.ts +14 -0
  147. package/dist/ports/merge-preset-repositories.d.ts.map +1 -0
  148. package/dist/ports/merge-preset-repositories.js +2 -0
  149. package/dist/ports/merge-preset-repositories.js.map +1 -0
  150. package/dist/ports/model-default-repositories.d.ts +9 -0
  151. package/dist/ports/model-default-repositories.d.ts.map +1 -0
  152. package/dist/ports/model-default-repositories.js +6 -0
  153. package/dist/ports/model-default-repositories.js.map +1 -0
  154. package/dist/ports/model-provider.d.ts +69 -0
  155. package/dist/ports/model-provider.d.ts.map +1 -0
  156. package/dist/ports/model-provider.js +16 -0
  157. package/dist/ports/model-provider.js.map +1 -0
  158. package/dist/ports/notification-channel.d.ts +16 -0
  159. package/dist/ports/notification-channel.d.ts.map +1 -0
  160. package/dist/ports/notification-channel.js +22 -0
  161. package/dist/ports/notification-channel.js.map +1 -0
  162. package/dist/ports/notification-repositories.d.ts +15 -0
  163. package/dist/ports/notification-repositories.d.ts.map +1 -0
  164. package/dist/ports/notification-repositories.js +2 -0
  165. package/dist/ports/notification-repositories.js.map +1 -0
  166. package/dist/ports/password-hasher.d.ts +14 -0
  167. package/dist/ports/password-hasher.d.ts.map +1 -0
  168. package/dist/ports/password-hasher.js +9 -0
  169. package/dist/ports/password-hasher.js.map +1 -0
  170. package/dist/ports/personal-secret-cipher.d.ts +7 -0
  171. package/dist/ports/personal-secret-cipher.d.ts.map +1 -0
  172. package/dist/ports/personal-secret-cipher.js +12 -0
  173. package/dist/ports/personal-secret-cipher.js.map +1 -0
  174. package/dist/ports/personal-subscription-repositories.d.ts +72 -0
  175. package/dist/ports/personal-subscription-repositories.d.ts.map +1 -0
  176. package/dist/ports/personal-subscription-repositories.js +2 -0
  177. package/dist/ports/personal-subscription-repositories.js.map +1 -0
  178. package/dist/ports/pr-mergeability.d.ts +24 -0
  179. package/dist/ports/pr-mergeability.d.ts.map +1 -0
  180. package/dist/ports/pr-mergeability.js +7 -0
  181. package/dist/ports/pr-mergeability.js.map +1 -0
  182. package/dist/ports/pr-merger.d.ts +10 -0
  183. package/dist/ports/pr-merger.d.ts.map +1 -0
  184. package/dist/ports/pr-merger.js +8 -0
  185. package/dist/ports/pr-merger.js.map +1 -0
  186. package/dist/ports/provider-api-key-repositories.d.ts +71 -0
  187. package/dist/ports/provider-api-key-repositories.d.ts.map +1 -0
  188. package/dist/ports/provider-api-key-repositories.js +15 -0
  189. package/dist/ports/provider-api-key-repositories.js.map +1 -0
  190. package/dist/ports/provider-subscription-repositories.d.ts +51 -0
  191. package/dist/ports/provider-subscription-repositories.d.ts.map +1 -0
  192. package/dist/ports/provider-subscription-repositories.js +15 -0
  193. package/dist/ports/provider-subscription-repositories.js.map +1 -0
  194. package/dist/ports/recurring-repositories.d.ts +46 -0
  195. package/dist/ports/recurring-repositories.d.ts.map +1 -0
  196. package/dist/ports/recurring-repositories.js +2 -0
  197. package/dist/ports/recurring-repositories.js.map +1 -0
  198. package/dist/ports/release-health-repositories.d.ts +42 -0
  199. package/dist/ports/release-health-repositories.d.ts.map +1 -0
  200. package/dist/ports/release-health-repositories.js +6 -0
  201. package/dist/ports/release-health-repositories.js.map +1 -0
  202. package/dist/ports/release-health.d.ts +59 -0
  203. package/dist/ports/release-health.d.ts.map +1 -0
  204. package/dist/ports/release-health.js +8 -0
  205. package/dist/ports/release-health.js.map +1 -0
  206. package/dist/ports/repo-bootstrapper.d.ts +80 -0
  207. package/dist/ports/repo-bootstrapper.d.ts.map +1 -0
  208. package/dist/ports/repo-bootstrapper.js +2 -0
  209. package/dist/ports/repo-bootstrapper.js.map +1 -0
  210. package/dist/ports/repo-scanner.d.ts +22 -0
  211. package/dist/ports/repo-scanner.d.ts.map +1 -0
  212. package/dist/ports/repo-scanner.js +2 -0
  213. package/dist/ports/repo-scanner.js.map +1 -0
  214. package/dist/ports/repositories.d.ts +131 -0
  215. package/dist/ports/repositories.d.ts.map +1 -0
  216. package/dist/ports/repositories.js +2 -0
  217. package/dist/ports/repositories.js.map +1 -0
  218. package/dist/ports/requirement-review-repositories.d.ts +16 -0
  219. package/dist/ports/requirement-review-repositories.d.ts.map +1 -0
  220. package/dist/ports/requirement-review-repositories.js +2 -0
  221. package/dist/ports/requirement-review-repositories.js.map +1 -0
  222. package/dist/ports/runner-pool-provider.d.ts +25 -0
  223. package/dist/ports/runner-pool-provider.d.ts.map +1 -0
  224. package/dist/ports/runner-pool-provider.js +2 -0
  225. package/dist/ports/runner-pool-provider.js.map +1 -0
  226. package/dist/ports/runner-pool-repositories.d.ts +27 -0
  227. package/dist/ports/runner-pool-repositories.d.ts.map +1 -0
  228. package/dist/ports/runner-pool-repositories.js +7 -0
  229. package/dist/ports/runner-pool-repositories.js.map +1 -0
  230. package/dist/ports/runner-transport.d.ts +119 -0
  231. package/dist/ports/runner-transport.d.ts.map +1 -0
  232. package/dist/ports/runner-transport.js +2 -0
  233. package/dist/ports/runner-transport.js.map +1 -0
  234. package/dist/ports/runtime.d.ts +9 -0
  235. package/dist/ports/runtime.d.ts.map +1 -0
  236. package/dist/ports/runtime.js +5 -0
  237. package/dist/ports/runtime.js.map +1 -0
  238. package/dist/ports/sandbox-repositories.d.ts +39 -0
  239. package/dist/ports/sandbox-repositories.d.ts.map +1 -0
  240. package/dist/ports/sandbox-repositories.js +2 -0
  241. package/dist/ports/sandbox-repositories.js.map +1 -0
  242. package/dist/ports/secret-cipher.d.ts +7 -0
  243. package/dist/ports/secret-cipher.d.ts.map +1 -0
  244. package/dist/ports/secret-cipher.js +7 -0
  245. package/dist/ports/secret-cipher.js.map +1 -0
  246. package/dist/ports/service-fragment-default-repositories.d.ts +7 -0
  247. package/dist/ports/service-fragment-default-repositories.d.ts.map +1 -0
  248. package/dist/ports/service-fragment-default-repositories.js +6 -0
  249. package/dist/ports/service-fragment-default-repositories.js.map +1 -0
  250. package/dist/ports/service-repositories.d.ts +68 -0
  251. package/dist/ports/service-repositories.d.ts.map +1 -0
  252. package/dist/ports/service-repositories.js +2 -0
  253. package/dist/ports/service-repositories.js.map +1 -0
  254. package/dist/ports/slack-repositories.d.ts +61 -0
  255. package/dist/ports/slack-repositories.d.ts.map +1 -0
  256. package/dist/ports/slack-repositories.js +2 -0
  257. package/dist/ports/slack-repositories.js.map +1 -0
  258. package/dist/ports/task-repositories.d.ts +61 -0
  259. package/dist/ports/task-repositories.d.ts.map +1 -0
  260. package/dist/ports/task-repositories.js +2 -0
  261. package/dist/ports/task-repositories.js.map +1 -0
  262. package/dist/ports/task-source.d.ts +69 -0
  263. package/dist/ports/task-source.d.ts.map +1 -0
  264. package/dist/ports/task-source.js +2 -0
  265. package/dist/ports/task-source.js.map +1 -0
  266. package/dist/ports/ticket-tracker.d.ts +19 -0
  267. package/dist/ports/ticket-tracker.d.ts.map +1 -0
  268. package/dist/ports/ticket-tracker.js +8 -0
  269. package/dist/ports/ticket-tracker.js.map +1 -0
  270. package/dist/ports/token-usage.d.ts +37 -0
  271. package/dist/ports/token-usage.d.ts.map +1 -0
  272. package/dist/ports/token-usage.js +6 -0
  273. package/dist/ports/token-usage.js.map +1 -0
  274. package/dist/ports/tracker-settings-repositories.d.ts +6 -0
  275. package/dist/ports/tracker-settings-repositories.d.ts.map +1 -0
  276. package/dist/ports/tracker-settings-repositories.js +2 -0
  277. package/dist/ports/tracker-settings-repositories.js.map +1 -0
  278. package/dist/ports/url-safety-policy.d.ts +15 -0
  279. package/dist/ports/url-safety-policy.d.ts.map +1 -0
  280. package/dist/ports/url-safety-policy.js +13 -0
  281. package/dist/ports/url-safety-policy.js.map +1 -0
  282. package/dist/ports/user-repositories.d.ts +52 -0
  283. package/dist/ports/user-repositories.d.ts.map +1 -0
  284. package/dist/ports/user-repositories.js +13 -0
  285. package/dist/ports/user-repositories.js.map +1 -0
  286. package/dist/ports/webhook-verifier.d.ts +9 -0
  287. package/dist/ports/webhook-verifier.d.ts.map +1 -0
  288. package/dist/ports/webhook-verifier.js +8 -0
  289. package/dist/ports/webhook-verifier.js.map +1 -0
  290. package/dist/ports/work-runner.d.ts +19 -0
  291. package/dist/ports/work-runner.d.ts.map +1 -0
  292. package/dist/ports/work-runner.js +19 -0
  293. package/dist/ports/work-runner.js.map +1 -0
  294. package/dist/ports/workspace-settings-repositories.d.ts +8 -0
  295. package/dist/ports/workspace-settings-repositories.d.ts.map +1 -0
  296. package/dist/ports/workspace-settings-repositories.js +2 -0
  297. package/dist/ports/workspace-settings-repositories.js.map +1 -0
  298. package/dist/shared/atlassian.logic.d.ts +11 -0
  299. package/dist/shared/atlassian.logic.d.ts.map +1 -0
  300. package/dist/shared/atlassian.logic.js +148 -0
  301. package/dist/shared/atlassian.logic.js.map +1 -0
  302. package/dist/shared/markdown.logic.d.ts +5 -0
  303. package/dist/shared/markdown.logic.d.ts.map +1 -0
  304. package/dist/shared/markdown.logic.js +21 -0
  305. package/dist/shared/markdown.logic.js.map +1 -0
  306. package/dist/shared/source-registry.logic.d.ts +10 -0
  307. package/dist/shared/source-registry.logic.d.ts.map +1 -0
  308. package/dist/shared/source-registry.logic.js +17 -0
  309. package/dist/shared/source-registry.logic.js.map +1 -0
  310. package/dist/shared/tasks-prompt.logic.d.ts +16 -0
  311. package/dist/shared/tasks-prompt.logic.d.ts.map +1 -0
  312. package/dist/shared/tasks-prompt.logic.js +29 -0
  313. package/dist/shared/tasks-prompt.logic.js.map +1 -0
  314. package/dist/workspace-guard.d.ts +4 -0
  315. package/dist/workspace-guard.d.ts.map +1 -0
  316. package/dist/workspace-guard.js +5 -0
  317. package/dist/workspace-guard.js.map +1 -0
  318. package/package.json +32 -0
@@ -0,0 +1,522 @@
1
+ import { isLocalRunner, } from '@cat-factory/contracts';
2
+ export const SUBSCRIPTION_VENDORS = {
3
+ claude: { harness: 'claude-code', label: 'Claude', individualOnly: true },
4
+ glm: {
5
+ harness: 'claude-code',
6
+ baseUrl: 'https://api.z.ai/api/anthropic',
7
+ label: 'GLM (Z.ai)',
8
+ individualOnly: true,
9
+ },
10
+ kimi: {
11
+ harness: 'claude-code',
12
+ baseUrl: 'https://api.moonshot.ai/anthropic',
13
+ label: 'Kimi (Moonshot)',
14
+ },
15
+ deepseek: {
16
+ harness: 'claude-code',
17
+ baseUrl: 'https://api.deepseek.com/anthropic',
18
+ label: 'DeepSeek',
19
+ },
20
+ codex: { harness: 'codex', label: 'ChatGPT (Codex)', individualOnly: true },
21
+ };
22
+ export const MODEL_CATALOG = [
23
+ {
24
+ id: 'cloudflare-llama',
25
+ label: 'Llama 3.1',
26
+ description: "Meta's fast 8B instruct model — Cloudflare Workers AI's default.",
27
+ cloudflare: {
28
+ provider: 'workers-ai',
29
+ model: '@cf/meta/llama-3.1-8b-instruct',
30
+ contextTokens: 7_968,
31
+ },
32
+ },
33
+ {
34
+ id: 'qwen',
35
+ label: 'Qwen3',
36
+ description: "Alibaba's Qwen3 — Qwen3-30B on Cloudflare, flagship Qwen3-Max when direct.",
37
+ cloudflare: {
38
+ provider: 'workers-ai',
39
+ model: '@cf/qwen/qwen3-30b-a3b-fp8',
40
+ contextTokens: 32_768,
41
+ },
42
+ direct: {
43
+ ref: { provider: 'qwen', model: 'qwen3-max' },
44
+ keyEnv: 'QWEN_API_KEY',
45
+ providerLabel: 'DashScope',
46
+ },
47
+ },
48
+ {
49
+ id: 'kimi-k2.7',
50
+ label: 'Kimi K2.7',
51
+ description: "Moonshot AI's latest 1T-param agentic-coding model (structured outputs), 256K context.",
52
+ cloudflare: {
53
+ provider: 'workers-ai',
54
+ model: '@cf/moonshotai/kimi-k2.7-code',
55
+ contextTokens: 262_144,
56
+ },
57
+ },
58
+ {
59
+ id: 'kimi',
60
+ label: 'Kimi K2.6',
61
+ description: "Moonshot AI's frontier-scale agentic model with a 256K context, on Cloudflare or " +
62
+ 'direct via a Moonshot key / Kimi (Moonshot) subscription.',
63
+ cloudflare: {
64
+ provider: 'workers-ai',
65
+ model: '@cf/moonshotai/kimi-k2.6',
66
+ contextTokens: 262_144,
67
+ },
68
+ direct: {
69
+ ref: { provider: 'moonshot', model: 'kimi-k2.6', contextTokens: 262_144 },
70
+ keyEnv: 'MOONSHOT_API_KEY',
71
+ providerLabel: 'Moonshot',
72
+ },
73
+ // Run via Claude Code against Moonshot's Anthropic-compatible endpoint on a
74
+ // Kimi coding-plan subscription (same 256K window, flat-rate quota).
75
+ subscription: {
76
+ ref: {
77
+ provider: 'moonshot',
78
+ model: 'kimi-k2.6',
79
+ harness: 'claude-code',
80
+ contextTokens: 262_144,
81
+ },
82
+ vendor: 'kimi',
83
+ },
84
+ },
85
+ {
86
+ id: 'deepseek',
87
+ label: 'DeepSeek R1',
88
+ description: "DeepSeek's reasoning: the 80K R1 Qwen-32B distill on Cloudflare, or the flagship " +
89
+ 'chat model (64K) when direct or via a DeepSeek coding-plan subscription.',
90
+ cloudflare: {
91
+ provider: 'workers-ai',
92
+ model: '@cf/deepseek-ai/deepseek-r1-distill-qwen-32b',
93
+ contextTokens: 80_000,
94
+ },
95
+ direct: {
96
+ ref: { provider: 'deepseek', model: 'deepseek-chat', contextTokens: 64_000 },
97
+ keyEnv: 'DEEPSEEK_API_KEY',
98
+ providerLabel: 'DeepSeek',
99
+ },
100
+ // Run via Claude Code against DeepSeek's Anthropic-compatible endpoint on a
101
+ // DeepSeek coding-plan subscription (full context, flat-rate quota).
102
+ subscription: {
103
+ ref: {
104
+ provider: 'deepseek',
105
+ model: 'deepseek-chat',
106
+ harness: 'claude-code',
107
+ contextTokens: 64_000,
108
+ },
109
+ vendor: 'deepseek',
110
+ },
111
+ },
112
+ {
113
+ id: 'deepseek-v4-pro',
114
+ label: 'DeepSeek V4 Pro',
115
+ description: "DeepSeek's flagship V4 Pro agentic-coding model, served on Cloudflare (131K context).",
116
+ // A Cloudflare AI-catalog model: a `<provider>/<model>` slug (not a native `@cf/...`
117
+ // id) Cloudflare serves on its unified-billing run catalog via a partner (Fireworks),
118
+ // reached with the account's own Workers AI binding/token — no AI Gateway, no BYOK.
119
+ // The Worker runs it through `binding.run` directly (see WorkersAiLlmUpstream).
120
+ cloudflare: {
121
+ provider: 'workers-ai',
122
+ model: 'deepseek/deepseek-v4-pro',
123
+ contextTokens: 131_072,
124
+ },
125
+ },
126
+ {
127
+ id: 'glm',
128
+ label: 'GLM-5.2',
129
+ description: "Z.ai's agentic-coding model: 256K context on Cloudflare, or the full 1M-token " +
130
+ 'window via a GLM (Z.ai) subscription.',
131
+ cloudflare: { provider: 'workers-ai', model: '@cf/zai-org/glm-5.2', contextTokens: 262_144 },
132
+ // Run via Claude Code against Z.ai's Anthropic-compatible endpoint on a GLM
133
+ // coding-plan subscription (full 1M context, flat-rate quota).
134
+ subscription: {
135
+ ref: { provider: 'zai', model: 'glm-5.2', harness: 'claude-code', contextTokens: 1_000_000 },
136
+ vendor: 'glm',
137
+ },
138
+ },
139
+ // Subscription-only models: run in the Claude Code / Codex harness with a pooled
140
+ // subscription token (Claude Pro/Max, ChatGPT Plus/Pro), direct to the vendor.
141
+ {
142
+ id: 'claude-opus',
143
+ label: 'Claude Opus 4.8',
144
+ description: "Anthropic's most capable model, run via Claude Code on your Claude subscription.",
145
+ subscription: {
146
+ ref: { provider: 'anthropic', model: 'claude-opus-4-8', harness: 'claude-code' },
147
+ vendor: 'claude',
148
+ },
149
+ },
150
+ {
151
+ id: 'claude-sonnet',
152
+ label: 'Claude Sonnet 4.6',
153
+ description: "Anthropic's balanced speed/intelligence model, run via Claude Code.",
154
+ subscription: {
155
+ ref: { provider: 'anthropic', model: 'claude-sonnet-4-6', harness: 'claude-code' },
156
+ vendor: 'claude',
157
+ },
158
+ },
159
+ {
160
+ id: 'gpt-5.5',
161
+ label: 'GPT-5.5',
162
+ description: "OpenAI's flagship, run via Codex on your ChatGPT subscription.",
163
+ subscription: {
164
+ ref: { provider: 'openai', model: 'gpt-5.5-codex', harness: 'codex' },
165
+ vendor: 'codex',
166
+ },
167
+ },
168
+ {
169
+ id: 'gpt-5.4',
170
+ label: 'GPT-5.4',
171
+ description: "OpenAI's cost-efficient mid-tier, run via Codex on your ChatGPT subscription.",
172
+ subscription: {
173
+ ref: { provider: 'openai', model: 'gpt-5.4-codex', harness: 'codex' },
174
+ vendor: 'codex',
175
+ },
176
+ },
177
+ // OpenRouter — a single OpenAI-compatible gateway to 300+ models, billed at provider
178
+ // rates with no per-token markup. These are curated, direct-only entries (no Cloudflare
179
+ // fallback): they become selectable once an OpenRouter API key is connected for the
180
+ // workspace/user. Model slugs follow OpenRouter's `vendor/model` ids (see
181
+ // openrouter.ai/models); verify them against the live catalog when they change.
182
+ {
183
+ id: 'openrouter-claude-opus',
184
+ label: 'Claude Opus (OpenRouter)',
185
+ description: "Anthropic's flagship Claude Opus via OpenRouter — billed at Anthropic rates.",
186
+ direct: {
187
+ ref: { provider: 'openrouter', model: 'anthropic/claude-opus-4.8', contextTokens: 1_000_000 },
188
+ keyEnv: 'OPENROUTER_API_KEY',
189
+ providerLabel: 'OpenRouter',
190
+ },
191
+ },
192
+ {
193
+ id: 'openrouter-gemini-pro',
194
+ label: 'Gemini 3 Pro (OpenRouter)',
195
+ description: "Google's Gemini 3 Pro via OpenRouter — 1M-token context.",
196
+ direct: {
197
+ ref: { provider: 'openrouter', model: 'google/gemini-3-pro', contextTokens: 1_048_576 },
198
+ keyEnv: 'OPENROUTER_API_KEY',
199
+ providerLabel: 'OpenRouter',
200
+ },
201
+ },
202
+ {
203
+ id: 'openrouter-gpt',
204
+ label: 'GPT-5.5 (OpenRouter)',
205
+ description: "OpenAI's flagship GPT-5.5 via OpenRouter — billed at OpenAI rates.",
206
+ direct: {
207
+ ref: { provider: 'openrouter', model: 'openai/gpt-5.5', contextTokens: 400_000 },
208
+ keyEnv: 'OPENROUTER_API_KEY',
209
+ providerLabel: 'OpenRouter',
210
+ },
211
+ },
212
+ {
213
+ id: 'openrouter-deepseek',
214
+ label: 'DeepSeek Chat (OpenRouter)',
215
+ description: "DeepSeek's flagship chat model via OpenRouter — low-cost, 64K context.",
216
+ direct: {
217
+ ref: { provider: 'openrouter', model: 'deepseek/deepseek-chat', contextTokens: 64_000 },
218
+ keyEnv: 'OPENROUTER_API_KEY',
219
+ providerLabel: 'OpenRouter',
220
+ },
221
+ },
222
+ {
223
+ id: 'openrouter-llama',
224
+ label: 'Llama 3.3 70B (OpenRouter)',
225
+ description: "Meta's Llama 3.3 70B Instruct via OpenRouter — open-weight, 131K context.",
226
+ direct: {
227
+ ref: {
228
+ provider: 'openrouter',
229
+ model: 'meta-llama/llama-3.3-70b-instruct',
230
+ contextTokens: 131_072,
231
+ },
232
+ keyEnv: 'OPENROUTER_API_KEY',
233
+ providerLabel: 'OpenRouter',
234
+ },
235
+ },
236
+ // LiteLLM — an operator-hosted OpenAI-compatible gateway. Model names are defined by the
237
+ // operator's LiteLLM `config.yaml` (`model_name`), so this generic entry assumes a
238
+ // `gpt-4o` route; rename the model (or pin via AGENT_DEFAULT_MODEL) to match your
239
+ // gateway. Selectable once a LiteLLM API key is connected AND LITELLM_BASE_URL is set.
240
+ {
241
+ id: 'litellm-default',
242
+ label: 'LiteLLM (gateway default)',
243
+ description: "Your LiteLLM gateway's `gpt-4o` route — rename to match your config.yaml.",
244
+ direct: {
245
+ ref: { provider: 'litellm', model: 'gpt-4o', contextTokens: 128_000 },
246
+ keyEnv: 'LITELLM_API_KEY',
247
+ providerLabel: 'LiteLLM',
248
+ },
249
+ },
250
+ ];
251
+ const BY_ID = new Map(MODEL_CATALOG.map((m) => [m.id, m]));
252
+ /** Look up a catalog model by id, or `undefined` for an unknown/empty id. */
253
+ export function getSelectableModel(id) {
254
+ return id ? BY_ID.get(id) : undefined;
255
+ }
256
+ // Context window (total input + output tokens) for every concrete ref the catalog
257
+ // declares one for, keyed by `${provider}:${model}` across all flavours. A model can
258
+ // appear under several flavours with DIFFERENT windows (e.g. DeepSeek 80K on Cloudflare
259
+ // vs 64K direct), so each ref is mapped on its own.
260
+ const CONTEXT_WINDOW_BY_REF = (() => {
261
+ const map = new Map();
262
+ for (const model of MODEL_CATALOG) {
263
+ for (const ref of [model.cloudflare, model.direct?.ref, model.subscription?.ref]) {
264
+ if (ref?.contextTokens)
265
+ map.set(`${ref.provider}:${ref.model}`, ref.contextTokens);
266
+ }
267
+ }
268
+ return map;
269
+ })();
270
+ /**
271
+ * The total context window (input + output tokens) the catalog declares for a concrete
272
+ * model ref, matched by provider + model. Returns undefined for a ref the catalog does
273
+ * not carry or one with no declared window. Used by the LLM proxy to cap a call's
274
+ * requested output so input + output can't exceed a small-window model's limit — a model
275
+ * like `@cf/qwen/qwen3-30b-a3b-fp8` (32K total) otherwise rejects the whole request
276
+ * (Workers AI error 8007 → HTTP 502) when the output floor alone fills the window.
277
+ */
278
+ export function contextWindowFor(ref) {
279
+ return CONTEXT_WINDOW_BY_REF.get(`${ref.provider}:${ref.model}`);
280
+ }
281
+ /** Whether a flavour of the model is usable given the capabilities. */
282
+ function directUsable(model, caps) {
283
+ if (!model.direct)
284
+ return false;
285
+ const provider = model.direct.ref.provider;
286
+ if (caps.directProviders.has(provider))
287
+ return true;
288
+ // A local-runner model needs no pooled key (the user's endpoint carries the optional
289
+ // key), but it's only usable when THIS specific model is enabled — keyed by its id.
290
+ return isLocalRunner(provider) && (caps.localModels?.has(model.id) ?? false);
291
+ }
292
+ function cloudflareUsable(model, caps) {
293
+ return !!model.cloudflare && caps.cloudflareEnabled;
294
+ }
295
+ function subscriptionUsable(model, caps) {
296
+ return !!model.subscription && caps.subscriptionVendors.has(model.subscription.vendor);
297
+ }
298
+ /**
299
+ * Whether a catalog model is selectable for the given capabilities — it has at least
300
+ * one usable flavour (a configured direct key, an enabled Cloudflare lib, or a
301
+ * connected subscription vendor). Unknown ids are not usable.
302
+ */
303
+ export function isModelUsable(id, caps) {
304
+ const model = getSelectableModel(id);
305
+ if (!model) {
306
+ // Dynamic local-runner model: usable when the resolving user has enabled this exact
307
+ // model (`"<provider>:<model>"` is in `localModels`), not merely the runner configured.
308
+ const local = parseLocalModelId(id);
309
+ return !!local && (caps.localModels?.has(`${local.provider}:${local.model}`) ?? false);
310
+ }
311
+ return (directUsable(model, caps) || cloudflareUsable(model, caps) || subscriptionUsable(model, caps));
312
+ }
313
+ // The effective variant a model resolves to for a capability set: prefer a usable
314
+ // direct key, else the Cloudflare lib, else a connected subscription. When NOTHING is
315
+ // usable it still returns a best-effort ref (direct → cloudflare → subscription) so
316
+ // callers always get a ref; selectability is reported separately by `isModelUsable`.
317
+ // A dual-mode model's subscription flavour ("subscriptions win") is preferred
318
+ // per-workspace by the executor + frontend, not here.
319
+ function effectiveVariant(model, caps) {
320
+ const direct = () => ({
321
+ ref: model.direct.ref,
322
+ flavor: 'direct',
323
+ providerLabel: model.direct.providerLabel,
324
+ });
325
+ const cloudflare = () => ({
326
+ ref: model.cloudflare,
327
+ flavor: 'cloudflare',
328
+ providerLabel: 'Cloudflare',
329
+ });
330
+ const subscription = () => ({
331
+ ref: model.subscription.ref,
332
+ flavor: 'subscription',
333
+ providerLabel: SUBSCRIPTION_VENDORS[model.subscription.vendor].label,
334
+ vendor: model.subscription.vendor,
335
+ });
336
+ // Prefer a usable flavour.
337
+ if (directUsable(model, caps))
338
+ return direct();
339
+ if (cloudflareUsable(model, caps))
340
+ return cloudflare();
341
+ if (subscriptionUsable(model, caps))
342
+ return subscription();
343
+ // Nothing usable: a best-effort ref so the caller still has something to show/run
344
+ // (the guard / `available` flag gate actual use).
345
+ if (model.direct)
346
+ return direct();
347
+ if (model.cloudflare)
348
+ return cloudflare();
349
+ if (model.subscription)
350
+ return subscription();
351
+ throw new Error(`Model '${model.id}' has no resolvable variant (no cloudflare/direct/subscription)`);
352
+ }
353
+ /** Project a catalog model onto its effective, display-ready option. */
354
+ function toOption(model, caps, costFor) {
355
+ const variant = effectiveVariant(model, caps);
356
+ const cost = costFor?.(variant.ref);
357
+ const option = {
358
+ id: model.id,
359
+ label: model.label,
360
+ description: model.description,
361
+ flavor: variant.flavor,
362
+ available: isModelUsable(model.id, caps),
363
+ providerLabel: variant.providerLabel,
364
+ provider: variant.ref.provider,
365
+ model: variant.ref.model,
366
+ ...(variant.vendor ? { vendor: variant.vendor } : {}),
367
+ ...(cost ? { cost } : {}),
368
+ ...(variant.ref.contextTokens ? { contextTokens: variant.ref.contextTokens } : {}),
369
+ // Subscription flavours are flat-rate quota, not budget-metered.
370
+ ...(variant.flavor === 'subscription' ? { quotaBased: true } : {}),
371
+ };
372
+ // Dual-mode model: attach the subscription flavour the frontend prefers when the
373
+ // workspace has a token for its vendor (the base above stays the fallback).
374
+ if (model.subscription && variant.flavor !== 'subscription') {
375
+ const subRef = model.subscription.ref;
376
+ const subCost = costFor?.(subRef);
377
+ option.subscription = {
378
+ vendor: model.subscription.vendor,
379
+ providerLabel: SUBSCRIPTION_VENDORS[model.subscription.vendor].label,
380
+ provider: subRef.provider,
381
+ model: subRef.model,
382
+ ...(subCost ? { cost: subCost } : {}),
383
+ ...(subRef.contextTokens ? { contextTokens: subRef.contextTokens } : {}),
384
+ };
385
+ }
386
+ return option;
387
+ }
388
+ /**
389
+ * The subscription option for a catalog model id (vendor + ref carrying the
390
+ * harness), or undefined when the model has no subscription path. The executor
391
+ * uses this to override a step to its subscription flavour when the workspace has
392
+ * a pooled token for the vendor — "subscriptions always win".
393
+ */
394
+ export function subscriptionOptionFor(id) {
395
+ const model = getSelectableModel(id);
396
+ if (!model?.subscription)
397
+ return undefined;
398
+ return { vendor: model.subscription.vendor, ref: model.subscription.ref };
399
+ }
400
+ /** Whether a vendor's subscription is licensed for individual use only (e.g. `claude`). */
401
+ export function isIndividualVendor(vendor) {
402
+ return SUBSCRIPTION_VENDORS[vendor].individualOnly === true;
403
+ }
404
+ /** Every vendor flagged individual-usage only — the single source of truth for the
405
+ * per-user personal-subscription flow (e.g. activation refresh) so it never drifts
406
+ * from {@link SUBSCRIPTION_VENDORS}. */
407
+ export const INDIVIDUAL_VENDORS = Object.keys(SUBSCRIPTION_VENDORS).filter(isIndividualVendor);
408
+ /**
409
+ * The individual-usage vendor a catalog model id runs on, or null. A model triggers
410
+ * the individual-usage restricted mode (per-user credential, no recurring, etc.) only
411
+ * when it has a subscription flavour AND that vendor is `individualOnly`. Used by the
412
+ * engine/controllers to gate a run on the initiator's personal subscription.
413
+ */
414
+ export function individualVendorForModelId(id) {
415
+ const sub = subscriptionOptionFor(id);
416
+ return sub && isIndividualVendor(sub.vendor) ? sub.vendor : null;
417
+ }
418
+ /**
419
+ * The individual-usage vendor whose PERSONAL credential a run on this catalog model id
420
+ * will ACTUALLY lease, given whether the run's user already has a personal subscription
421
+ * for the candidate vendor (`hasPersonalSubscription`). Returns null when no personal
422
+ * credential is needed. This is the gating-accurate refinement of
423
+ * {@link individualVendorForModelId}, and mirrors
424
+ * `ContainerAgentExecutor.resolveEffectiveRef`, so the credential gate prompts for a
425
+ * password exactly when dispatch will use one:
426
+ *
427
+ * - SUBSCRIPTION-ONLY individual model (Claude / Codex — no Cloudflare/direct base):
428
+ * there is no fallback, so the personal credential is always required.
429
+ * - DUAL-MODE individual model (e.g. GLM, which also has a Cloudflare base): per-user.
430
+ * A user WITH their own personal subscription for the vendor runs on it (gated on
431
+ * their password); a user WITHOUT one falls back to the Cloudflare base and is not
432
+ * gated. (Individual vendors are never pooled, so there is no shared fallback — only
433
+ * the user's own subscription or the base.)
434
+ * - Poolable / non-subscription models: never need a personal credential.
435
+ */
436
+ export function personalCredentialVendorForModelId(id, hasPersonalSubscription) {
437
+ const model = getSelectableModel(id);
438
+ const sub = model?.subscription;
439
+ if (!sub || !isIndividualVendor(sub.vendor))
440
+ return null;
441
+ const hasBase = !!model.cloudflare || !!model.direct;
442
+ if (!hasBase)
443
+ return sub.vendor;
444
+ return hasPersonalSubscription(sub.vendor) ? sub.vendor : null;
445
+ }
446
+ /**
447
+ * The effective catalog for a deployment: each model resolved to the flavour that
448
+ * is actually in use given which direct-provider keys are configured. Served to
449
+ * the frontend so the picker can show whether a model runs direct, on Cloudflare,
450
+ * or on a subscription harness — plus its informational list cost when `costFor`
451
+ * is supplied. Subscription models are always listed; the frontend gates them on
452
+ * whether the workspace has a token for the vendor.
453
+ */
454
+ export function effectiveCatalog(caps, costFor) {
455
+ return effectiveCatalogWith([], caps, costFor);
456
+ }
457
+ /**
458
+ * Like {@link effectiveCatalog}, but with deployment/user-specific extra models
459
+ * appended to the static catalog — used to surface a user's locally-run models
460
+ * (see {@link localSelectableModels}) alongside the built-in catalog.
461
+ */
462
+ export function effectiveCatalogWith(extra, caps, costFor) {
463
+ return [...MODEL_CATALOG, ...extra].map((model) => toOption(model, caps, costFor));
464
+ }
465
+ /**
466
+ * Build the dynamic, per-user catalog entries for a set of configured local endpoints.
467
+ * Each enabled model becomes a `direct`-flavour {@link SelectableModel} with a stable id
468
+ * `"<provider>:<model>"` and no key requirement (gated by `localModels`).
469
+ */
470
+ export function localSelectableModels(endpoints) {
471
+ const out = [];
472
+ for (const ep of endpoints) {
473
+ for (const model of ep.models) {
474
+ out.push({
475
+ id: `${ep.provider}:${model}`,
476
+ label: model,
477
+ description: `Local model served by ${ep.label}.`,
478
+ direct: {
479
+ ref: { provider: ep.provider, model },
480
+ keyEnv: '',
481
+ providerLabel: ep.label,
482
+ },
483
+ });
484
+ }
485
+ }
486
+ return out;
487
+ }
488
+ /**
489
+ * Parse a dynamic local-model id of the form `"<provider>:<model>"` into a {@link ModelRef}.
490
+ * Splits on the FIRST colon so model ids that themselves contain colons (e.g.
491
+ * `ollama:qwen2.5-coder:32b`) round-trip correctly. Returns undefined for non-local ids.
492
+ */
493
+ export function parseLocalModelId(id) {
494
+ if (!id)
495
+ return undefined;
496
+ const idx = id.indexOf(':');
497
+ if (idx <= 0 || idx >= id.length - 1)
498
+ return undefined;
499
+ const provider = id.slice(0, idx);
500
+ if (!isLocalRunner(provider))
501
+ return undefined;
502
+ return { provider, model: id.slice(idx + 1) };
503
+ }
504
+ /**
505
+ * Resolve a block's selected model id to the {@link ModelRef} that should run it,
506
+ * honouring the direct/Cloudflare fallback and carrying the subscription harness
507
+ * when applicable. Returns `undefined` for an unknown or absent id so the caller
508
+ * falls back to its default routing.
509
+ */
510
+ export function resolveModelRef(id, caps) {
511
+ const model = getSelectableModel(id);
512
+ if (model)
513
+ return effectiveVariant(model, caps).ref;
514
+ // Dynamic local-runner model ids (`<provider>:<model>`) aren't in the static catalog;
515
+ // parse them straight into a ref so a block pinned to a local model resolves even at
516
+ // deployment-config time (when per-user local capabilities aren't known).
517
+ const local = parseLocalModelId(id);
518
+ return local ? { provider: local.provider, model: local.model } : undefined;
519
+ }
520
+ /** Every subscription vendor (the full set), for building a permissive capability set. */
521
+ export const ALL_SUBSCRIPTION_VENDORS = Object.keys(SUBSCRIPTION_VENDORS);
522
+ //# sourceMappingURL=models.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"models.js","sourceRoot":"","sources":["../../src/domain/models.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,19 @@
1
+ import type { Pipeline } from './types.js';
2
+ /**
3
+ * Register an extra predefined pipeline. A registered pipeline whose id matches a
4
+ * built-in (or an earlier registration) replaces it, so a deployment can both add new
5
+ * pipelines and customize the built-in catalog.
6
+ */
7
+ export declare function registerPipeline(pipeline: Pipeline): void;
8
+ /** Register several extra predefined pipelines at once. */
9
+ export declare function registerPipelines(pipelines: Iterable<Pipeline>): void;
10
+ /** The registered extra pipelines (registration order). */
11
+ export declare function registeredPipelines(): Pipeline[];
12
+ /**
13
+ * Merge the registered pipelines into a built-in list: a registered pipeline replaces a
14
+ * built-in with the same id in place, new ones are appended (registration order).
15
+ */
16
+ export declare function mergeRegisteredPipelines(builtins: readonly Pipeline[]): Pipeline[];
17
+ /** Drop all registered pipelines. Intended for tests that exercise registration. */
18
+ export declare function clearRegisteredPipelines(): void;
19
+ //# sourceMappingURL=pipeline-registry.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"pipeline-registry.d.ts","sourceRoot":"","sources":["../../src/domain/pipeline-registry.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,YAAY,CAAA;AAU1C;;;;GAIG;AACH,wBAAgB,gBAAgB,CAAC,QAAQ,EAAE,QAAQ,GAAG,IAAI,CAIzD;AAED,2DAA2D;AAC3D,wBAAgB,iBAAiB,CAAC,SAAS,EAAE,QAAQ,CAAC,QAAQ,CAAC,GAAG,IAAI,CAErE;AAED,2DAA2D;AAC3D,wBAAgB,mBAAmB,IAAI,QAAQ,EAAE,CAEhD;AAED;;;GAGG;AACH,wBAAgB,wBAAwB,CAAC,QAAQ,EAAE,SAAS,QAAQ,EAAE,GAAG,QAAQ,EAAE,CAQlF;AAED,oFAAoF;AACpF,wBAAgB,wBAAwB,IAAI,IAAI,CAE/C"}
@@ -0,0 +1,48 @@
1
+ // Installation-level extension point for predefined pipelines, mirroring the custom
2
+ // agent-kind and model-provider registry seams. A deployment — e.g. a proprietary org
3
+ // package — registers extra pipelines once at startup (an import side effect);
4
+ // `seedPipelines()` then includes them, so every new workspace is seeded with them
5
+ // alongside the built-in catalog. Registered pipelines can reference both built-in and
6
+ // custom (registered) agent kinds.
7
+ const extra = [];
8
+ /**
9
+ * Register an extra predefined pipeline. A registered pipeline whose id matches a
10
+ * built-in (or an earlier registration) replaces it, so a deployment can both add new
11
+ * pipelines and customize the built-in catalog.
12
+ */
13
+ export function registerPipeline(pipeline) {
14
+ const existing = extra.findIndex((p) => p.id === pipeline.id);
15
+ if (existing >= 0)
16
+ extra[existing] = pipeline;
17
+ else
18
+ extra.push(pipeline);
19
+ }
20
+ /** Register several extra predefined pipelines at once. */
21
+ export function registerPipelines(pipelines) {
22
+ for (const pipeline of pipelines)
23
+ registerPipeline(pipeline);
24
+ }
25
+ /** The registered extra pipelines (registration order). */
26
+ export function registeredPipelines() {
27
+ return [...extra];
28
+ }
29
+ /**
30
+ * Merge the registered pipelines into a built-in list: a registered pipeline replaces a
31
+ * built-in with the same id in place, new ones are appended (registration order).
32
+ */
33
+ export function mergeRegisteredPipelines(builtins) {
34
+ const merged = [...builtins];
35
+ for (const pipeline of extra) {
36
+ const at = merged.findIndex((p) => p.id === pipeline.id);
37
+ if (at >= 0)
38
+ merged[at] = pipeline;
39
+ else
40
+ merged.push(pipeline);
41
+ }
42
+ return merged;
43
+ }
44
+ /** Drop all registered pipelines. Intended for tests that exercise registration. */
45
+ export function clearRegisteredPipelines() {
46
+ extra.length = 0;
47
+ }
48
+ //# sourceMappingURL=pipeline-registry.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"pipeline-registry.js","sourceRoot":"","sources":["../../src/domain/pipeline-registry.ts"],"names":[],"mappings":"AAEA,oFAAoF;AACpF,sFAAsF;AACtF,+EAA+E;AAC/E,mFAAmF;AACnF,uFAAuF;AACvF,mCAAmC;AACnC,MAAM,KAAK,GAAe,EAAE,CAAA;AAE5B;;;;GAIG;AACH,MAAM,UAAU,gBAAgB,CAAC,QAAkB;IACjD,MAAM,QAAQ,GAAG,KAAK,CAAC,SAAS,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,EAAE,KAAK,QAAQ,CAAC,EAAE,CAAC,CAAA;IAC7D,IAAI,QAAQ,IAAI,CAAC;QAAE,KAAK,CAAC,QAAQ,CAAC,GAAG,QAAQ,CAAA;;QACxC,KAAK,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAA;AAC3B,CAAC;AAED,2DAA2D;AAC3D,MAAM,UAAU,iBAAiB,CAAC,SAA6B;IAC7D,KAAK,MAAM,QAAQ,IAAI,SAAS;QAAE,gBAAgB,CAAC,QAAQ,CAAC,CAAA;AAC9D,CAAC;AAED,2DAA2D;AAC3D,MAAM,UAAU,mBAAmB;IACjC,OAAO,CAAC,GAAG,KAAK,CAAC,CAAA;AACnB,CAAC;AAED;;;GAGG;AACH,MAAM,UAAU,wBAAwB,CAAC,QAA6B;IACpE,MAAM,MAAM,GAAG,CAAC,GAAG,QAAQ,CAAC,CAAA;IAC5B,KAAK,MAAM,QAAQ,IAAI,KAAK,EAAE,CAAC;QAC7B,MAAM,EAAE,GAAG,MAAM,CAAC,SAAS,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,EAAE,KAAK,QAAQ,CAAC,EAAE,CAAC,CAAA;QACxD,IAAI,EAAE,IAAI,CAAC;YAAE,MAAM,CAAC,EAAE,CAAC,GAAG,QAAQ,CAAA;;YAC7B,MAAM,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAA;IAC5B,CAAC;IACD,OAAO,MAAM,CAAA;AACf,CAAC;AAED,oFAAoF;AACpF,MAAM,UAAU,wBAAwB;IACtC,KAAK,CAAC,MAAM,GAAG,CAAC,CAAA;AAClB,CAAC"}
@@ -0,0 +1,14 @@
1
+ import type { Block, Pipeline } from './types.js';
2
+ export declare function seedBlocks(): Block[];
3
+ /**
4
+ * Reusable pipelines shown in the pipeline palette on first load: the built-in catalog
5
+ * plus any pipelines a deployment registered via `registerPipeline` (e.g. a proprietary
6
+ * org package), merged by id.
7
+ */
8
+ export declare function seedPipelines(): Pipeline[];
9
+ /** Pipeline id of the blueprint-only run kicked off after a successful bootstrap. */
10
+ export declare const BLUEPRINT_PIPELINE_ID = "pl_blueprint";
11
+ /** Pipeline ids of the built-in recurring-pipeline presets. */
12
+ export declare const DEP_UPDATE_PIPELINE_ID = "pl_dep_update";
13
+ export declare const TECH_DEBT_PIPELINE_ID = "pl_tech_debt";
14
+ //# sourceMappingURL=seed.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"seed.d.ts","sourceRoot":"","sources":["../../src/domain/seed.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,KAAK,EAAE,QAAQ,EAAE,MAAM,YAAY,CAAA;AAOjD,wBAAgB,UAAU,IAAI,KAAK,EAAE,CAgHpC;AAED;;;;GAIG;AACH,wBAAgB,aAAa,IAAI,QAAQ,EAAE,CAkP1C;AAED,qFAAqF;AACrF,eAAO,MAAM,qBAAqB,iBAAiB,CAAA;AAEnD,+DAA+D;AAC/D,eAAO,MAAM,sBAAsB,kBAAkB,CAAA;AACrD,eAAO,MAAM,qBAAqB,iBAAiB,CAAA"}