@canhta/dsh-autopilot 0.1.0-alpha.1

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 (448) hide show
  1. package/AGENTS.md +41 -0
  2. package/CONTEXT.md +39 -0
  3. package/LICENSE +21 -0
  4. package/README.md +95 -0
  5. package/cordis.patch.yml +13 -0
  6. package/deploy/dsh-autopilot.service +26 -0
  7. package/docs/CONTRIBUTING.md +60 -0
  8. package/docs/README.md +34 -0
  9. package/docs/agents/domain.md +7 -0
  10. package/docs/agents/issue-tracker.md +21 -0
  11. package/docs/agents/triage-labels.md +13 -0
  12. package/docs/assets/banner.png +0 -0
  13. package/docs/deployment.md +138 -0
  14. package/docs/engineering.md +43 -0
  15. package/docs/specs/execution.md +65 -0
  16. package/docs/specs/integrations.md +89 -0
  17. package/docs/specs/lifecycle.md +81 -0
  18. package/docs/specs/operations.md +89 -0
  19. package/docs/specs/plugin.md +49 -0
  20. package/docs/specs/providers.md +62 -0
  21. package/docs/specs/scope.md +35 -0
  22. package/docs/specs/ui-components.md +96 -0
  23. package/docs/specs/web-ui.md +64 -0
  24. package/lib/admission/cancellation-control.d.ts +11 -0
  25. package/lib/admission/cancellation-control.js +72 -0
  26. package/lib/admission/cancellation-control.js.map +1 -0
  27. package/lib/admission/candidates.d.ts +2 -0
  28. package/lib/admission/candidates.js +23 -0
  29. package/lib/admission/candidates.js.map +1 -0
  30. package/lib/admission/composition-claim.d.ts +10 -0
  31. package/lib/admission/composition-claim.js +13 -0
  32. package/lib/admission/composition-claim.js.map +1 -0
  33. package/lib/admission/constants.d.ts +12 -0
  34. package/lib/admission/constants.js +13 -0
  35. package/lib/admission/constants.js.map +1 -0
  36. package/lib/admission/deliveries.d.ts +6 -0
  37. package/lib/admission/deliveries.js +175 -0
  38. package/lib/admission/deliveries.js.map +1 -0
  39. package/lib/admission/delivery-control.d.ts +28 -0
  40. package/lib/admission/delivery-control.js +294 -0
  41. package/lib/admission/delivery-control.js.map +1 -0
  42. package/lib/admission/execution-control.d.ts +29 -0
  43. package/lib/admission/execution-control.js +177 -0
  44. package/lib/admission/execution-control.js.map +1 -0
  45. package/lib/admission/index.d.ts +4 -0
  46. package/lib/admission/index.js +4 -0
  47. package/lib/admission/index.js.map +1 -0
  48. package/lib/admission/model.d.ts +296 -0
  49. package/lib/admission/model.js +13 -0
  50. package/lib/admission/model.js.map +1 -0
  51. package/lib/admission/pause-control.d.ts +44 -0
  52. package/lib/admission/pause-control.js +220 -0
  53. package/lib/admission/pause-control.js.map +1 -0
  54. package/lib/admission/policy.d.ts +39 -0
  55. package/lib/admission/policy.js +238 -0
  56. package/lib/admission/policy.js.map +1 -0
  57. package/lib/admission/ports.d.ts +13 -0
  58. package/lib/admission/ports.js +2 -0
  59. package/lib/admission/ports.js.map +1 -0
  60. package/lib/admission/publication-control.d.ts +16 -0
  61. package/lib/admission/publication-control.js +153 -0
  62. package/lib/admission/publication-control.js.map +1 -0
  63. package/lib/admission/reconciler.d.ts +7 -0
  64. package/lib/admission/reconciler.js +121 -0
  65. package/lib/admission/reconciler.js.map +1 -0
  66. package/lib/admission/resume-control.d.ts +27 -0
  67. package/lib/admission/resume-control.js +213 -0
  68. package/lib/admission/resume-control.js.map +1 -0
  69. package/lib/admission/run-fence.d.ts +11 -0
  70. package/lib/admission/run-fence.js +49 -0
  71. package/lib/admission/run-fence.js.map +1 -0
  72. package/lib/admission/service.d.ts +130 -0
  73. package/lib/admission/service.js +415 -0
  74. package/lib/admission/service.js.map +1 -0
  75. package/lib/admission/state-domain.d.ts +11 -0
  76. package/lib/admission/state-domain.js +33 -0
  77. package/lib/admission/state-domain.js.map +1 -0
  78. package/lib/admission/state-integrity.d.ts +19 -0
  79. package/lib/admission/state-integrity.js +102 -0
  80. package/lib/admission/state-integrity.js.map +1 -0
  81. package/lib/admission/state-migration.d.ts +4 -0
  82. package/lib/admission/state-migration.js +46 -0
  83. package/lib/admission/state-migration.js.map +1 -0
  84. package/lib/admission/state.d.ts +4524 -0
  85. package/lib/admission/state.js +394 -0
  86. package/lib/admission/state.js.map +1 -0
  87. package/lib/admission.d.ts +1 -0
  88. package/lib/admission.js +2 -0
  89. package/lib/admission.js.map +1 -0
  90. package/lib/client-types/client/OperationsAtoms.d.ts +30 -0
  91. package/lib/client-types/client/OperationsPanel.d.ts +34 -0
  92. package/lib/client-types/client/RunsView.d.ts +14 -0
  93. package/lib/client-types/client/SettingsCapabilitySections.d.ts +16 -0
  94. package/lib/client-types/client/SettingsPanel.d.ts +40 -0
  95. package/lib/client-types/client/SettingsPolicySections.d.ts +13 -0
  96. package/lib/client-types/client/SettingsProviderSection.d.ts +21 -0
  97. package/lib/client-types/client/SummaryView.d.ts +10 -0
  98. package/lib/client-types/client/WorktreesView.d.ts +9 -0
  99. package/lib/client-types/client/index.d.ts +9 -0
  100. package/lib/client-types/client/locales/en.d.ts +154 -0
  101. package/lib/client-types/client/locales/index.d.ts +9 -0
  102. package/lib/client-types/client/locales/zh.d.ts +155 -0
  103. package/lib/client-types/client/settings-draft.d.ts +29 -0
  104. package/lib/client-types/client/state.d.ts +63 -0
  105. package/lib/client-types/code-host/index.d.ts +2 -0
  106. package/lib/client-types/code-host/model.d.ts +118 -0
  107. package/lib/client-types/code-host/registry.d.ts +23 -0
  108. package/lib/client-types/code-host/validation.d.ts +51 -0
  109. package/lib/client-types/code-host.d.ts +2 -0
  110. package/lib/client-types/config/index.d.ts +2 -0
  111. package/lib/client-types/config/settings.d.ts +51 -0
  112. package/lib/client-types/config.d.ts +2 -0
  113. package/lib/client-types/notification/index.d.ts +2 -0
  114. package/lib/client-types/notification/model.d.ts +57 -0
  115. package/lib/client-types/notification/registry.d.ts +16 -0
  116. package/lib/client-types/notification.d.ts +2 -0
  117. package/lib/client-types/providers/generation-registry.d.ts +20 -0
  118. package/lib/client-types/remote.d.ts +65 -0
  119. package/lib/client-types/tracker/index.d.ts +2 -0
  120. package/lib/client-types/tracker/model.d.ts +222 -0
  121. package/lib/client-types/tracker/registry.d.ts +49 -0
  122. package/lib/client-types/tracker/validation.d.ts +60 -0
  123. package/lib/client-types/tracker.d.ts +2 -0
  124. package/lib/client-types/web/contract.d.ts +958 -0
  125. package/lib/client.js +7961 -0
  126. package/lib/client.js.map +1 -0
  127. package/lib/code-host/index.d.ts +2 -0
  128. package/lib/code-host/index.js +3 -0
  129. package/lib/code-host/index.js.map +1 -0
  130. package/lib/code-host/model.d.ts +118 -0
  131. package/lib/code-host/model.js +23 -0
  132. package/lib/code-host/model.js.map +1 -0
  133. package/lib/code-host/registry.d.ts +23 -0
  134. package/lib/code-host/registry.js +90 -0
  135. package/lib/code-host/registry.js.map +1 -0
  136. package/lib/code-host/validation.d.ts +51 -0
  137. package/lib/code-host/validation.js +30 -0
  138. package/lib/code-host/validation.js.map +1 -0
  139. package/lib/code-host.d.ts +2 -0
  140. package/lib/code-host.js +3 -0
  141. package/lib/code-host.js.map +1 -0
  142. package/lib/config/index.d.ts +2 -0
  143. package/lib/config/index.js +3 -0
  144. package/lib/config/index.js.map +1 -0
  145. package/lib/config/settings.d.ts +51 -0
  146. package/lib/config/settings.js +195 -0
  147. package/lib/config/settings.js.map +1 -0
  148. package/lib/config.d.ts +2 -0
  149. package/lib/config.js +3 -0
  150. package/lib/config.js.map +1 -0
  151. package/lib/delivery/index.d.ts +1 -0
  152. package/lib/delivery/index.js +2 -0
  153. package/lib/delivery/index.js.map +1 -0
  154. package/lib/delivery/service.d.ts +29 -0
  155. package/lib/delivery/service.js +140 -0
  156. package/lib/delivery/service.js.map +1 -0
  157. package/lib/delivery.d.ts +2 -0
  158. package/lib/delivery.js +3 -0
  159. package/lib/delivery.js.map +1 -0
  160. package/lib/dispatch/composition.d.ts +18 -0
  161. package/lib/dispatch/composition.js +109 -0
  162. package/lib/dispatch/composition.js.map +1 -0
  163. package/lib/dispatch/contract.d.ts +2 -0
  164. package/lib/dispatch/contract.js +2 -0
  165. package/lib/dispatch/contract.js.map +1 -0
  166. package/lib/dispatch/execute.d.ts +10 -0
  167. package/lib/dispatch/execute.js +138 -0
  168. package/lib/dispatch/execute.js.map +1 -0
  169. package/lib/dispatch/execution-state.d.ts +12 -0
  170. package/lib/dispatch/execution-state.js +24 -0
  171. package/lib/dispatch/execution-state.js.map +1 -0
  172. package/lib/dispatch/git.d.ts +5 -0
  173. package/lib/dispatch/git.js +95 -0
  174. package/lib/dispatch/git.js.map +1 -0
  175. package/lib/dispatch/index.d.ts +2 -0
  176. package/lib/dispatch/index.js +2 -0
  177. package/lib/dispatch/index.js.map +1 -0
  178. package/lib/dispatch/report.d.ts +11 -0
  179. package/lib/dispatch/report.js +141 -0
  180. package/lib/dispatch/report.js.map +1 -0
  181. package/lib/dispatch/resume.d.ts +17 -0
  182. package/lib/dispatch/resume.js +89 -0
  183. package/lib/dispatch/resume.js.map +1 -0
  184. package/lib/dispatch/service.d.ts +56 -0
  185. package/lib/dispatch/service.js +231 -0
  186. package/lib/dispatch/service.js.map +1 -0
  187. package/lib/dispatch/usage.d.ts +10 -0
  188. package/lib/dispatch/usage.js +47 -0
  189. package/lib/dispatch/usage.js.map +1 -0
  190. package/lib/dispatch.d.ts +2 -0
  191. package/lib/dispatch.js +3 -0
  192. package/lib/dispatch.js.map +1 -0
  193. package/lib/github-code-host.d.ts +1 -0
  194. package/lib/github-code-host.js +2 -0
  195. package/lib/github-code-host.js.map +1 -0
  196. package/lib/github-issues.d.ts +1 -0
  197. package/lib/github-issues.js +2 -0
  198. package/lib/github-issues.js.map +1 -0
  199. package/lib/index.d.ts +21 -0
  200. package/lib/index.js +48 -0
  201. package/lib/index.js.map +1 -0
  202. package/lib/ingress.d.ts +2 -0
  203. package/lib/ingress.js +3 -0
  204. package/lib/ingress.js.map +1 -0
  205. package/lib/jira.d.ts +1 -0
  206. package/lib/jira.js +2 -0
  207. package/lib/jira.js.map +1 -0
  208. package/lib/mcp/contracts.d.ts +21 -0
  209. package/lib/mcp/contracts.js +33 -0
  210. package/lib/mcp/contracts.js.map +1 -0
  211. package/lib/mcp/cursor.d.ts +10 -0
  212. package/lib/mcp/cursor.js +68 -0
  213. package/lib/mcp/cursor.js.map +1 -0
  214. package/lib/mcp/definition.d.ts +8 -0
  215. package/lib/mcp/definition.js +43 -0
  216. package/lib/mcp/definition.js.map +1 -0
  217. package/lib/mcp/index.d.ts +6 -0
  218. package/lib/mcp/index.js +7 -0
  219. package/lib/mcp/index.js.map +1 -0
  220. package/lib/mcp/json.d.ts +4 -0
  221. package/lib/mcp/json.js +20 -0
  222. package/lib/mcp/json.js.map +1 -0
  223. package/lib/mcp/mount.d.ts +17 -0
  224. package/lib/mcp/mount.js +79 -0
  225. package/lib/mcp/mount.js.map +1 -0
  226. package/lib/mcp/read-tools.d.ts +27 -0
  227. package/lib/mcp/read-tools.js +149 -0
  228. package/lib/mcp/read-tools.js.map +1 -0
  229. package/lib/notification/index.d.ts +2 -0
  230. package/lib/notification/index.js +3 -0
  231. package/lib/notification/index.js.map +1 -0
  232. package/lib/notification/model.d.ts +57 -0
  233. package/lib/notification/model.js +20 -0
  234. package/lib/notification/model.js.map +1 -0
  235. package/lib/notification/registry.d.ts +16 -0
  236. package/lib/notification/registry.js +67 -0
  237. package/lib/notification/registry.js.map +1 -0
  238. package/lib/notification.d.ts +2 -0
  239. package/lib/notification.js +3 -0
  240. package/lib/notification.js.map +1 -0
  241. package/lib/ntfy-notification.d.ts +1 -0
  242. package/lib/ntfy-notification.js +2 -0
  243. package/lib/ntfy-notification.js.map +1 -0
  244. package/lib/operations/cleanup-inspector.d.ts +16 -0
  245. package/lib/operations/cleanup-inspector.js +132 -0
  246. package/lib/operations/cleanup-inspector.js.map +1 -0
  247. package/lib/operations/cleanup.d.ts +25 -0
  248. package/lib/operations/cleanup.js +151 -0
  249. package/lib/operations/cleanup.js.map +1 -0
  250. package/lib/operations/disposition.d.ts +46 -0
  251. package/lib/operations/disposition.js +89 -0
  252. package/lib/operations/disposition.js.map +1 -0
  253. package/lib/operations/health.d.ts +6 -0
  254. package/lib/operations/health.js +41 -0
  255. package/lib/operations/health.js.map +1 -0
  256. package/lib/operations/index.d.ts +6 -0
  257. package/lib/operations/index.js +7 -0
  258. package/lib/operations/index.js.map +1 -0
  259. package/lib/operations/inspection.d.ts +35 -0
  260. package/lib/operations/inspection.js +183 -0
  261. package/lib/operations/inspection.js.map +1 -0
  262. package/lib/operations/model.d.ts +77 -0
  263. package/lib/operations/model.js +2 -0
  264. package/lib/operations/model.js.map +1 -0
  265. package/lib/operations/recovery.d.ts +11 -0
  266. package/lib/operations/recovery.js +101 -0
  267. package/lib/operations/recovery.js.map +1 -0
  268. package/lib/operations/retention.d.ts +28 -0
  269. package/lib/operations/retention.js +105 -0
  270. package/lib/operations/retention.js.map +1 -0
  271. package/lib/operations/runtime-owner.d.ts +54 -0
  272. package/lib/operations/runtime-owner.js +281 -0
  273. package/lib/operations/runtime-owner.js.map +1 -0
  274. package/lib/operations/service.d.ts +55 -0
  275. package/lib/operations/service.js +154 -0
  276. package/lib/operations/service.js.map +1 -0
  277. package/lib/operations/state.d.ts +79 -0
  278. package/lib/operations/state.js +51 -0
  279. package/lib/operations/state.js.map +1 -0
  280. package/lib/operations/storage-composition.d.ts +16 -0
  281. package/lib/operations/storage-composition.js +61 -0
  282. package/lib/operations/storage-composition.js.map +1 -0
  283. package/lib/operations/store.d.ts +16 -0
  284. package/lib/operations/store.js +84 -0
  285. package/lib/operations/store.js.map +1 -0
  286. package/lib/operations.d.ts +2 -0
  287. package/lib/operations.js +3 -0
  288. package/lib/operations.js.map +1 -0
  289. package/lib/providers/generation-registry.d.ts +20 -0
  290. package/lib/providers/generation-registry.js +72 -0
  291. package/lib/providers/generation-registry.js.map +1 -0
  292. package/lib/providers/github-code-host/contracts.d.ts +224 -0
  293. package/lib/providers/github-code-host/contracts.js +144 -0
  294. package/lib/providers/github-code-host/contracts.js.map +1 -0
  295. package/lib/providers/github-code-host/index.d.ts +2 -0
  296. package/lib/providers/github-code-host/index.js +2 -0
  297. package/lib/providers/github-code-host/index.js.map +1 -0
  298. package/lib/providers/github-code-host/provider.d.ts +5 -0
  299. package/lib/providers/github-code-host/provider.js +289 -0
  300. package/lib/providers/github-code-host/provider.js.map +1 -0
  301. package/lib/providers/github-code-host/schemas.d.ts +81 -0
  302. package/lib/providers/github-code-host/schemas.js +39 -0
  303. package/lib/providers/github-code-host/schemas.js.map +1 -0
  304. package/lib/providers/github-code-host/settings.d.ts +16 -0
  305. package/lib/providers/github-code-host/settings.js +65 -0
  306. package/lib/providers/github-code-host/settings.js.map +1 -0
  307. package/lib/providers/github-issues/contracts.d.ts +151 -0
  308. package/lib/providers/github-issues/contracts.js +141 -0
  309. package/lib/providers/github-issues/contracts.js.map +1 -0
  310. package/lib/providers/github-issues/index.d.ts +1 -0
  311. package/lib/providers/github-issues/index.js +2 -0
  312. package/lib/providers/github-issues/index.js.map +1 -0
  313. package/lib/providers/github-issues/ingress.d.ts +8 -0
  314. package/lib/providers/github-issues/ingress.js +80 -0
  315. package/lib/providers/github-issues/ingress.js.map +1 -0
  316. package/lib/providers/github-issues/normalization.d.ts +11 -0
  317. package/lib/providers/github-issues/normalization.js +115 -0
  318. package/lib/providers/github-issues/normalization.js.map +1 -0
  319. package/lib/providers/github-issues/provider.d.ts +6 -0
  320. package/lib/providers/github-issues/provider.js +235 -0
  321. package/lib/providers/github-issues/provider.js.map +1 -0
  322. package/lib/providers/github-issues/schemas.d.ts +123 -0
  323. package/lib/providers/github-issues/schemas.js +58 -0
  324. package/lib/providers/github-issues/schemas.js.map +1 -0
  325. package/lib/providers/github-issues/settings.d.ts +27 -0
  326. package/lib/providers/github-issues/settings.js +154 -0
  327. package/lib/providers/github-issues/settings.js.map +1 -0
  328. package/lib/providers/jira/contracts.d.ts +193 -0
  329. package/lib/providers/jira/contracts.js +133 -0
  330. package/lib/providers/jira/contracts.js.map +1 -0
  331. package/lib/providers/jira/index.d.ts +1 -0
  332. package/lib/providers/jira/index.js +2 -0
  333. package/lib/providers/jira/index.js.map +1 -0
  334. package/lib/providers/jira/ingress.d.ts +4 -0
  335. package/lib/providers/jira/ingress.js +60 -0
  336. package/lib/providers/jira/ingress.js.map +1 -0
  337. package/lib/providers/jira/normalization.d.ts +8 -0
  338. package/lib/providers/jira/normalization.js +121 -0
  339. package/lib/providers/jira/normalization.js.map +1 -0
  340. package/lib/providers/jira/provider.d.ts +6 -0
  341. package/lib/providers/jira/provider.js +317 -0
  342. package/lib/providers/jira/provider.js.map +1 -0
  343. package/lib/providers/jira/schemas.d.ts +134 -0
  344. package/lib/providers/jira/schemas.js +76 -0
  345. package/lib/providers/jira/schemas.js.map +1 -0
  346. package/lib/providers/jira/settings.d.ts +32 -0
  347. package/lib/providers/jira/settings.js +163 -0
  348. package/lib/providers/jira/settings.js.map +1 -0
  349. package/lib/providers/notification-http.d.ts +13 -0
  350. package/lib/providers/notification-http.js +136 -0
  351. package/lib/providers/notification-http.js.map +1 -0
  352. package/lib/providers/ntfy-notification/index.d.ts +2 -0
  353. package/lib/providers/ntfy-notification/index.js +2 -0
  354. package/lib/providers/ntfy-notification/index.js.map +1 -0
  355. package/lib/providers/ntfy-notification/provider.d.ts +4 -0
  356. package/lib/providers/ntfy-notification/provider.js +89 -0
  357. package/lib/providers/ntfy-notification/provider.js.map +1 -0
  358. package/lib/providers/ntfy-notification/settings.d.ts +12 -0
  359. package/lib/providers/ntfy-notification/settings.js +34 -0
  360. package/lib/providers/ntfy-notification/settings.js.map +1 -0
  361. package/lib/providers/webhook-notification/index.d.ts +2 -0
  362. package/lib/providers/webhook-notification/index.js +2 -0
  363. package/lib/providers/webhook-notification/index.js.map +1 -0
  364. package/lib/providers/webhook-notification/provider.d.ts +4 -0
  365. package/lib/providers/webhook-notification/provider.js +57 -0
  366. package/lib/providers/webhook-notification/provider.js.map +1 -0
  367. package/lib/providers/webhook-notification/settings.d.ts +11 -0
  368. package/lib/providers/webhook-notification/settings.js +31 -0
  369. package/lib/providers/webhook-notification/settings.js.map +1 -0
  370. package/lib/publication/git.d.ts +7 -0
  371. package/lib/publication/git.js +154 -0
  372. package/lib/publication/git.js.map +1 -0
  373. package/lib/publication/index.d.ts +1 -0
  374. package/lib/publication/index.js +2 -0
  375. package/lib/publication/index.js.map +1 -0
  376. package/lib/publication/service.d.ts +27 -0
  377. package/lib/publication/service.js +166 -0
  378. package/lib/publication/service.js.map +1 -0
  379. package/lib/publication.d.ts +2 -0
  380. package/lib/publication.js +3 -0
  381. package/lib/publication.js.map +1 -0
  382. package/lib/reconciliation/index.d.ts +3 -0
  383. package/lib/reconciliation/index.js +4 -0
  384. package/lib/reconciliation/index.js.map +1 -0
  385. package/lib/reconciliation/ingress.d.ts +21 -0
  386. package/lib/reconciliation/ingress.js +168 -0
  387. package/lib/reconciliation/ingress.js.map +1 -0
  388. package/lib/reconciliation/service.d.ts +75 -0
  389. package/lib/reconciliation/service.js +228 -0
  390. package/lib/reconciliation/service.js.map +1 -0
  391. package/lib/reconciliation.d.ts +2 -0
  392. package/lib/reconciliation.js +3 -0
  393. package/lib/reconciliation.js.map +1 -0
  394. package/lib/remote.d.ts +65 -0
  395. package/lib/remote.js +135 -0
  396. package/lib/remote.js.map +1 -0
  397. package/lib/tracker/index.d.ts +2 -0
  398. package/lib/tracker/index.js +3 -0
  399. package/lib/tracker/index.js.map +1 -0
  400. package/lib/tracker/model.d.ts +222 -0
  401. package/lib/tracker/model.js +66 -0
  402. package/lib/tracker/model.js.map +1 -0
  403. package/lib/tracker/registry.d.ts +49 -0
  404. package/lib/tracker/registry.js +213 -0
  405. package/lib/tracker/registry.js.map +1 -0
  406. package/lib/tracker/validation.d.ts +60 -0
  407. package/lib/tracker/validation.js +52 -0
  408. package/lib/tracker/validation.js.map +1 -0
  409. package/lib/tracker.d.ts +2 -0
  410. package/lib/tracker.js +3 -0
  411. package/lib/tracker.js.map +1 -0
  412. package/lib/typert.d.ts +1 -0
  413. package/lib/typert.js +2 -0
  414. package/lib/typert.js.map +1 -0
  415. package/lib/web/commands.d.ts +18 -0
  416. package/lib/web/commands.js +231 -0
  417. package/lib/web/commands.js.map +1 -0
  418. package/lib/web/contract.d.ts +958 -0
  419. package/lib/web/contract.js +230 -0
  420. package/lib/web/contract.js.map +1 -0
  421. package/lib/web/contributions.d.ts +41 -0
  422. package/lib/web/contributions.js +61 -0
  423. package/lib/web/contributions.js.map +1 -0
  424. package/lib/web/integrations.d.ts +13 -0
  425. package/lib/web/integrations.js +95 -0
  426. package/lib/web/integrations.js.map +1 -0
  427. package/lib/web/projection.d.ts +10 -0
  428. package/lib/web/projection.js +192 -0
  429. package/lib/web/projection.js.map +1 -0
  430. package/lib/web/service.d.ts +31 -0
  431. package/lib/web/service.js +141 -0
  432. package/lib/web/service.js.map +1 -0
  433. package/lib/web.d.ts +5 -0
  434. package/lib/web.js +6 -0
  435. package/lib/web.js.map +1 -0
  436. package/lib/webhook-notification.d.ts +1 -0
  437. package/lib/webhook-notification.js +2 -0
  438. package/lib/webhook-notification.js.map +1 -0
  439. package/lib/workflow/index.d.ts +1 -0
  440. package/lib/workflow/index.js +2 -0
  441. package/lib/workflow/index.js.map +1 -0
  442. package/lib/workflow/service.d.ts +31 -0
  443. package/lib/workflow/service.js +220 -0
  444. package/lib/workflow/service.js.map +1 -0
  445. package/lib/workflow.d.ts +2 -0
  446. package/lib/workflow.js +3 -0
  447. package/lib/workflow.js.map +1 -0
  448. package/package.json +276 -0
@@ -0,0 +1,2 @@
1
+ export * from './model.js';
2
+ export { CodeHost, default } from './registry.js';
@@ -0,0 +1,3 @@
1
+ export * from './model.js';
2
+ export { CodeHost, default } from './registry.js';
3
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/code-host/index.ts"],"names":[],"mappings":"AAAA,cAAc,YAAY,CAAA;AAC1B,OAAO,EAAE,QAAQ,EAAE,OAAO,EAAE,MAAM,eAAe,CAAA"}
@@ -0,0 +1,118 @@
1
+ declare const codeHostProviderIdBrand: unique symbol;
2
+ declare const codeHostBindingIdBrand: unique symbol;
3
+ declare const codeHostRepositoryIdBrand: unique symbol;
4
+ declare const pullRequestIdBrand: unique symbol;
5
+ export type CodeHostProviderId = string & {
6
+ readonly [codeHostProviderIdBrand]: true;
7
+ };
8
+ export type CodeHostBindingId = string & {
9
+ readonly [codeHostBindingIdBrand]: true;
10
+ };
11
+ export type CodeHostRepositoryId = string & {
12
+ readonly [codeHostRepositoryIdBrand]: true;
13
+ };
14
+ export type PullRequestId = string & {
15
+ readonly [pullRequestIdBrand]: true;
16
+ };
17
+ export declare const codeHostProviderId: (value: string) => CodeHostProviderId;
18
+ export declare const codeHostBindingId: (value: string) => CodeHostBindingId;
19
+ export declare const codeHostRepositoryId: (value: string) => CodeHostRepositoryId;
20
+ export declare const pullRequestId: (value: string) => PullRequestId;
21
+ export declare const CODE_HOST_INTERFACE_VERSION: 1;
22
+ export declare const codeHostCapabilities: readonly ['repository', 'branch', 'pull-request', 'reconciliation'];
23
+ export type CodeHostCapability = (typeof codeHostCapabilities)[number];
24
+ /** Provider-owned publication target selected before a run allocates execution resources. */
25
+ export interface CodeHostBinding {
26
+ readonly providerId: CodeHostProviderId;
27
+ readonly bindingId: CodeHostBindingId;
28
+ readonly repositoryId: CodeHostRepositoryId;
29
+ readonly repository: string;
30
+ }
31
+ export interface CodeHostTreeEntry {
32
+ readonly path: string;
33
+ readonly mode: '100644' | '100755';
34
+ readonly type: 'blob';
35
+ readonly sha: string;
36
+ }
37
+ export interface CodeHostFile {
38
+ readonly path: string;
39
+ readonly content: string;
40
+ }
41
+ /** Complete bounded publication input, reconstructed from the durable intent and verified local Git state. */
42
+ export interface CodeHostPublication {
43
+ readonly bindingId: CodeHostBindingId;
44
+ readonly repositoryId: CodeHostRepositoryId;
45
+ readonly repository: string;
46
+ readonly baseBranch: string;
47
+ readonly headBranch: string;
48
+ readonly baseHead: string;
49
+ readonly localHead: string;
50
+ readonly tree: readonly CodeHostTreeEntry[];
51
+ readonly files: readonly CodeHostFile[];
52
+ readonly title: string;
53
+ readonly body: string;
54
+ readonly marker: string;
55
+ }
56
+ export interface PullRequestReceipt {
57
+ readonly id: PullRequestId;
58
+ readonly number: number;
59
+ readonly url: string;
60
+ readonly state: 'open' | 'merged' | 'closed-unmerged';
61
+ readonly baseBranch: string;
62
+ readonly headBranch: string;
63
+ readonly remoteHead: string;
64
+ }
65
+ export type CodeHostBranchObservation = {
66
+ readonly kind: 'missing';
67
+ } | {
68
+ readonly kind: 'base';
69
+ readonly remoteHead: string;
70
+ } | {
71
+ readonly kind: 'published';
72
+ readonly remoteHead: string;
73
+ } | {
74
+ readonly kind: 'conflict';
75
+ readonly remoteHead: string;
76
+ };
77
+ export type CodeHostPullRequestObservation = {
78
+ readonly kind: 'missing';
79
+ } | {
80
+ readonly kind: 'matching';
81
+ readonly receipt: PullRequestReceipt;
82
+ } | {
83
+ readonly kind: 'conflict';
84
+ readonly reason: string;
85
+ };
86
+ export interface CodeHostReconciliation {
87
+ readonly baseHead: string;
88
+ readonly branch: CodeHostBranchObservation;
89
+ readonly pullRequest: CodeHostPullRequestObservation;
90
+ }
91
+ export interface CodeHostProviderRequest {
92
+ readonly publication: CodeHostPublication;
93
+ readonly signal: AbortSignal;
94
+ }
95
+ export interface CodeHostProvider {
96
+ readonly id: CodeHostProviderId;
97
+ readonly interfaceVersion: typeof CODE_HOST_INTERFACE_VERSION;
98
+ readonly displayName: string;
99
+ readonly configurationNamespace: string;
100
+ readonly capabilities: readonly CodeHostCapability[];
101
+ reconcile(request: CodeHostProviderRequest): Promise<CodeHostReconciliation>;
102
+ createBranch(request: CodeHostProviderRequest): Promise<void>;
103
+ publishChanges(request: CodeHostProviderRequest): Promise<void>;
104
+ createPullRequest(request: CodeHostProviderRequest): Promise<PullRequestReceipt>;
105
+ }
106
+ export interface CodeHostPublisher {
107
+ reconcile(publication: CodeHostPublication, signal?: AbortSignal): Promise<CodeHostReconciliation>;
108
+ createBranch(publication: CodeHostPublication, signal?: AbortSignal): Promise<void>;
109
+ publishChanges(publication: CodeHostPublication, signal?: AbortSignal): Promise<void>;
110
+ createPullRequest(publication: CodeHostPublication, signal?: AbortSignal): Promise<PullRequestReceipt>;
111
+ }
112
+ export type CodeHostProviderErrorCode = 'authentication' | 'permission' | 'invalid-configuration' | 'not-found' | 'conflict' | 'rate-limit' | 'timeout' | 'transient' | 'unsupported-capability' | 'ambiguous-acknowledgement' | 'invalid-response' | 'provider-unavailable';
113
+ export declare class CodeHostProviderError extends Error {
114
+ readonly code: CodeHostProviderErrorCode;
115
+ readonly retryAfterMs?: number | undefined;
116
+ constructor(code: CodeHostProviderErrorCode, message: string, retryAfterMs?: number | undefined);
117
+ }
118
+ export {};
@@ -0,0 +1,23 @@
1
+ const ID_PATTERN = /^[a-z0-9][a-z0-9._:-]{0,255}$/;
2
+ function opaqueId(kind, value) {
3
+ if (!ID_PATTERN.test(value))
4
+ throw new TypeError(`${kind} must match ${String(ID_PATTERN)}`);
5
+ return value;
6
+ }
7
+ export const codeHostProviderId = (value) => opaqueId('code-host provider id', value);
8
+ export const codeHostBindingId = (value) => opaqueId('code-host binding id', value);
9
+ export const codeHostRepositoryId = (value) => opaqueId('code-host repository id', value);
10
+ export const pullRequestId = (value) => opaqueId('pull-request id', value);
11
+ export const CODE_HOST_INTERFACE_VERSION = 1;
12
+ export const codeHostCapabilities = ['repository', 'branch', 'pull-request', 'reconciliation'];
13
+ export class CodeHostProviderError extends Error {
14
+ code;
15
+ retryAfterMs;
16
+ constructor(code, message, retryAfterMs) {
17
+ super(message);
18
+ this.code = code;
19
+ this.retryAfterMs = retryAfterMs;
20
+ this.name = 'CodeHostProviderError';
21
+ }
22
+ }
23
+ //# sourceMappingURL=model.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"model.js","sourceRoot":"","sources":["../../src/code-host/model.ts"],"names":[],"mappings":"AAUA,MAAM,UAAU,GAAG,+BAA+B,CAAA;AAElD,SAAS,QAAQ,CAAmB,IAAY,EAAE,KAAa;IAC7D,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,KAAK,CAAC;QAAE,MAAM,IAAI,SAAS,CAAC,GAAG,IAAI,eAAe,MAAM,CAAC,UAAU,CAAC,EAAE,CAAC,CAAA;IAC5F,OAAO,KAAU,CAAA;AACnB,CAAC;AAED,MAAM,CAAC,MAAM,kBAAkB,GAAG,CAAC,KAAa,EAAsB,EAAE,CACtE,QAAQ,CAAqB,uBAAuB,EAAE,KAAK,CAAC,CAAA;AAC9D,MAAM,CAAC,MAAM,iBAAiB,GAAG,CAAC,KAAa,EAAqB,EAAE,CACpE,QAAQ,CAAoB,sBAAsB,EAAE,KAAK,CAAC,CAAA;AAC5D,MAAM,CAAC,MAAM,oBAAoB,GAAG,CAAC,KAAa,EAAwB,EAAE,CAC1E,QAAQ,CAAuB,yBAAyB,EAAE,KAAK,CAAC,CAAA;AAClE,MAAM,CAAC,MAAM,aAAa,GAAG,CAAC,KAAa,EAAiB,EAAE,CAAC,QAAQ,CAAgB,iBAAiB,EAAE,KAAK,CAAC,CAAA;AAEhH,MAAM,CAAC,MAAM,2BAA2B,GAAG,CAAU,CAAA;AACrD,MAAM,CAAC,MAAM,oBAAoB,GAAG,CAAC,YAAY,EAAE,QAAQ,EAAE,cAAc,EAAE,gBAAgB,CAAU,CAAA;AAwGvG,MAAM,OAAO,qBAAsB,SAAQ,KAAK;IAEnC,IAAI;IAEJ,YAAY;IAHvB,YACW,IAA+B,EACxC,OAAe,EACN,YAAqB;QAE9B,KAAK,CAAC,OAAO,CAAC,CAAA;oBAJL,IAAI;4BAEJ,YAAY;QAGrB,IAAI,CAAC,IAAI,GAAG,uBAAuB,CAAA;IACrC,CAAC;CACF"}
@@ -0,0 +1,23 @@
1
+ import { type Context, Service } from '@deepseek-ai/cordis';
2
+ import { type CodeHostBinding, type CodeHostProvider, type CodeHostProviderId, type CodeHostPublisher } from './model.js';
3
+ declare module '@deepseek-ai/cordis' {
4
+ interface Context {
5
+ codeHost: CodeHost;
6
+ }
7
+ }
8
+ /** Generation-fenced normalized code-host seam used only by the Host publication owner. */
9
+ export declare class CodeHost extends Service {
10
+ private readonly providers;
11
+ private readonly bindings;
12
+ constructor(ctx: Context);
13
+ /** Register one complete provider generation; the disposer fences new calls, aborts active work, and drains it. */
14
+ register(provider: CodeHostProvider): () => Promise<void>;
15
+ /** Register the single provider-owned target snapshot used for future execution claims. */
16
+ registerBinding(binding: CodeHostBinding): () => void;
17
+ /** Return the current provider-owned target, or fail before a run can snapshot an unavailable binding. */
18
+ binding(id: CodeHostProviderId): CodeHostBinding;
19
+ /** Retain one provider generation for a publication sequence; provider withdrawal fences every late result. */
20
+ withProvider<T>(id: CodeHostProviderId, operation: (publisher: CodeHostPublisher) => Promise<T>): Promise<T>;
21
+ private invoke;
22
+ }
23
+ export default CodeHost;
@@ -0,0 +1,90 @@
1
+ import { Service } from '@deepseek-ai/cordis';
2
+ import { ZodError } from 'zod';
3
+ import { GenerationRegistry } from '../providers/generation-registry.js';
4
+ import { CODE_HOST_INTERFACE_VERSION, CodeHostProviderError, codeHostCapabilities, } from './model.js';
5
+ import { pullRequestReceiptSchema, reconciliationSchema } from './validation.js';
6
+ /** Generation-fenced normalized code-host seam used only by the Host publication owner. */
7
+ export class CodeHost extends Service {
8
+ providers = new GenerationRegistry();
9
+ bindings = new Map();
10
+ constructor(ctx) {
11
+ super(ctx, 'codeHost');
12
+ }
13
+ /** Register one complete provider generation; the disposer fences new calls, aborts active work, and drains it. */
14
+ register(provider) {
15
+ if (provider.interfaceVersion !== CODE_HOST_INTERFACE_VERSION) {
16
+ throw new TypeError(`code-host provider "${provider.id}" uses interface version ${String(provider.interfaceVersion)}; expected ${String(CODE_HOST_INTERFACE_VERSION)}`);
17
+ }
18
+ if (this.providers.has(provider.id))
19
+ throw new Error(`code-host provider "${provider.id}" is already registered`);
20
+ const missing = codeHostCapabilities.filter((capability) => !provider.capabilities.includes(capability));
21
+ if (missing.length > 0) {
22
+ throw new TypeError(`code-host provider "${provider.id}" is missing capabilities: ${missing.join(', ')}`);
23
+ }
24
+ return this.providers.register(provider.id, provider);
25
+ }
26
+ /** Register the single provider-owned target snapshot used for future execution claims. */
27
+ registerBinding(binding) {
28
+ if (this.bindings.has(binding.providerId)) {
29
+ throw new Error(`code-host binding "${binding.providerId}" is already registered`);
30
+ }
31
+ const retained = structuredClone(binding);
32
+ this.bindings.set(binding.providerId, retained);
33
+ let disposed = false;
34
+ return () => {
35
+ if (disposed)
36
+ return;
37
+ disposed = true;
38
+ if (this.bindings.get(binding.providerId) === retained)
39
+ this.bindings.delete(binding.providerId);
40
+ };
41
+ }
42
+ /** Return the current provider-owned target, or fail before a run can snapshot an unavailable binding. */
43
+ binding(id) {
44
+ const binding = this.bindings.get(id);
45
+ if (binding === undefined) {
46
+ throw new CodeHostProviderError('provider-unavailable', `code-host binding "${id}" is unavailable`);
47
+ }
48
+ return structuredClone(binding);
49
+ }
50
+ /** Retain one provider generation for a publication sequence; provider withdrawal fences every late result. */
51
+ async withProvider(id, operation) {
52
+ const registered = this.providers.require(id, () => new CodeHostProviderError('provider-unavailable', `code-host provider "${id}" is unavailable`));
53
+ const publisher = {
54
+ reconcile: (publication, signal) => this.invoke(registered, 'reconcile', publication, signal, reconciliationSchema.parse),
55
+ createBranch: (publication, signal) => this.invoke(registered, 'createBranch', publication, signal),
56
+ publishChanges: (publication, signal) => this.invoke(registered, 'publishChanges', publication, signal),
57
+ createPullRequest: (publication, signal) => this.invoke(registered, 'createPullRequest', publication, signal, pullRequestReceiptSchema.parse),
58
+ };
59
+ return await this.providers.retain(registered, () => operation(publisher));
60
+ }
61
+ async invoke(registered, operation, publication, callerSignal, validate) {
62
+ callerSignal?.throwIfAborted();
63
+ const request = {
64
+ publication: structuredClone(publication),
65
+ signal: this.providers.signal(registered, callerSignal),
66
+ };
67
+ try {
68
+ const value = await registered.provider[operation](request);
69
+ this.providers.assertCurrent(registered, () => withdrawn(registered.provider.id, operation));
70
+ callerSignal?.throwIfAborted();
71
+ return validate === undefined ? value : validate(value);
72
+ }
73
+ catch (error) {
74
+ if (!registered.accepting)
75
+ throw withdrawn(registered.provider.id, operation);
76
+ callerSignal?.throwIfAborted();
77
+ if (error instanceof CodeHostProviderError)
78
+ throw error;
79
+ if (error instanceof ZodError) {
80
+ throw new CodeHostProviderError('invalid-response', `code-host provider "${registered.provider.id}" returned an invalid ${operation} result`);
81
+ }
82
+ throw new CodeHostProviderError('transient', `code-host provider "${registered.provider.id}" failed ${operation}`);
83
+ }
84
+ }
85
+ }
86
+ function withdrawn(id, operation) {
87
+ return new CodeHostProviderError(operation === 'reconcile' ? 'provider-unavailable' : 'ambiguous-acknowledgement', `code-host provider "${id}" was withdrawn`);
88
+ }
89
+ export default CodeHost;
90
+ //# sourceMappingURL=registry.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"registry.js","sourceRoot":"","sources":["../../src/code-host/registry.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,51 @@
1
+ import { z } from 'zod';
2
+ declare const receiptSchema: z.ZodObject<{
3
+ id: z.ZodPipe<z.ZodString, z.ZodTransform<import("./model.js").PullRequestId, string>>;
4
+ number: z.ZodNumber;
5
+ url: z.ZodURL;
6
+ state: z.ZodEnum<{
7
+ "closed-unmerged": "closed-unmerged";
8
+ merged: "merged";
9
+ open: "open";
10
+ }>;
11
+ baseBranch: z.ZodString;
12
+ headBranch: z.ZodString;
13
+ remoteHead: z.ZodString;
14
+ }, z.core.$strip>;
15
+ export declare const reconciliationSchema: z.ZodObject<{
16
+ baseHead: z.ZodString;
17
+ branch: z.ZodDiscriminatedUnion<[z.ZodObject<{
18
+ kind: z.ZodLiteral<"missing">;
19
+ }, z.core.$strip>, z.ZodObject<{
20
+ kind: z.ZodLiteral<"base">;
21
+ remoteHead: z.ZodString;
22
+ }, z.core.$strip>, z.ZodObject<{
23
+ kind: z.ZodLiteral<"published">;
24
+ remoteHead: z.ZodString;
25
+ }, z.core.$strip>, z.ZodObject<{
26
+ kind: z.ZodLiteral<"conflict">;
27
+ remoteHead: z.ZodString;
28
+ }, z.core.$strip>], "kind">;
29
+ pullRequest: z.ZodDiscriminatedUnion<[z.ZodObject<{
30
+ kind: z.ZodLiteral<"missing">;
31
+ }, z.core.$strip>, z.ZodObject<{
32
+ kind: z.ZodLiteral<"matching">;
33
+ receipt: z.ZodObject<{
34
+ id: z.ZodPipe<z.ZodString, z.ZodTransform<import("./model.js").PullRequestId, string>>;
35
+ number: z.ZodNumber;
36
+ url: z.ZodURL;
37
+ state: z.ZodEnum<{
38
+ "closed-unmerged": "closed-unmerged";
39
+ merged: "merged";
40
+ open: "open";
41
+ }>;
42
+ baseBranch: z.ZodString;
43
+ headBranch: z.ZodString;
44
+ remoteHead: z.ZodString;
45
+ }, z.core.$strip>;
46
+ }, z.core.$strip>, z.ZodObject<{
47
+ kind: z.ZodLiteral<"conflict">;
48
+ reason: z.ZodString;
49
+ }, z.core.$strip>], "kind">;
50
+ }, z.core.$strip>;
51
+ export { receiptSchema as pullRequestReceiptSchema };
@@ -0,0 +1,30 @@
1
+ import { z } from 'zod';
2
+ import { pullRequestId } from './model.js';
3
+ const sha = z.string().regex(/^[a-f0-9]{40}$/);
4
+ const receiptSchema = z.object({
5
+ id: z.string().min(1).max(256).transform(pullRequestId),
6
+ number: z.number().int().positive().safe(),
7
+ url: z.url().max(4096),
8
+ state: z.enum(['open', 'merged', 'closed-unmerged']),
9
+ baseBranch: z.string().min(1).max(256),
10
+ headBranch: z.string().min(1).max(256),
11
+ remoteHead: sha,
12
+ });
13
+ const branchSchema = z.discriminatedUnion('kind', [
14
+ z.object({ kind: z.literal('missing') }),
15
+ z.object({ kind: z.literal('base'), remoteHead: sha }),
16
+ z.object({ kind: z.literal('published'), remoteHead: sha }),
17
+ z.object({ kind: z.literal('conflict'), remoteHead: sha }),
18
+ ]);
19
+ const pullRequestSchema = z.discriminatedUnion('kind', [
20
+ z.object({ kind: z.literal('missing') }),
21
+ z.object({ kind: z.literal('matching'), receipt: receiptSchema }),
22
+ z.object({ kind: z.literal('conflict'), reason: z.string().min(1).max(4096) }),
23
+ ]);
24
+ export const reconciliationSchema = z.object({
25
+ baseHead: sha,
26
+ branch: branchSchema,
27
+ pullRequest: pullRequestSchema,
28
+ });
29
+ export { receiptSchema as pullRequestReceiptSchema };
30
+ //# sourceMappingURL=validation.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"validation.js","sourceRoot":"","sources":["../../src/code-host/validation.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAA;AACvB,OAAO,EAAE,aAAa,EAAE,MAAM,YAAY,CAAA;AAE1C,MAAM,GAAG,GAAG,CAAC,CAAC,MAAM,EAAE,CAAC,KAAK,CAAC,gBAAgB,CAAC,CAAA;AAC9C,MAAM,aAAa,GAAG,CAAC,CAAC,MAAM,CAAC;IAC7B,EAAE,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,SAAS,CAAC,aAAa,CAAC;IACvD,MAAM,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,EAAE,CAAC,QAAQ,EAAE,CAAC,IAAI,EAAE;IAC1C,GAAG,EAAE,CAAC,CAAC,GAAG,EAAE,CAAC,GAAG,CAAC,IAAI,CAAC;IACtB,KAAK,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC,MAAM,EAAE,QAAQ,EAAE,iBAAiB,CAAC,CAAC;IACpD,UAAU,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC;IACtC,UAAU,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC;IACtC,UAAU,EAAE,GAAG;CAChB,CAAC,CAAA;AAEF,MAAM,YAAY,GAAG,CAAC,CAAC,kBAAkB,CAAC,MAAM,EAAE;IAChD,CAAC,CAAC,MAAM,CAAC,EAAE,IAAI,EAAE,CAAC,CAAC,OAAO,CAAC,SAAS,CAAC,EAAE,CAAC;IACxC,CAAC,CAAC,MAAM,CAAC,EAAE,IAAI,EAAE,CAAC,CAAC,OAAO,CAAC,MAAM,CAAC,EAAE,UAAU,EAAE,GAAG,EAAE,CAAC;IACtD,CAAC,CAAC,MAAM,CAAC,EAAE,IAAI,EAAE,CAAC,CAAC,OAAO,CAAC,WAAW,CAAC,EAAE,UAAU,EAAE,GAAG,EAAE,CAAC;IAC3D,CAAC,CAAC,MAAM,CAAC,EAAE,IAAI,EAAE,CAAC,CAAC,OAAO,CAAC,UAAU,CAAC,EAAE,UAAU,EAAE,GAAG,EAAE,CAAC;CAC3D,CAAC,CAAA;AAEF,MAAM,iBAAiB,GAAG,CAAC,CAAC,kBAAkB,CAAC,MAAM,EAAE;IACrD,CAAC,CAAC,MAAM,CAAC,EAAE,IAAI,EAAE,CAAC,CAAC,OAAO,CAAC,SAAS,CAAC,EAAE,CAAC;IACxC,CAAC,CAAC,MAAM,CAAC,EAAE,IAAI,EAAE,CAAC,CAAC,OAAO,CAAC,UAAU,CAAC,EAAE,OAAO,EAAE,aAAa,EAAE,CAAC;IACjE,CAAC,CAAC,MAAM,CAAC,EAAE,IAAI,EAAE,CAAC,CAAC,OAAO,CAAC,UAAU,CAAC,EAAE,MAAM,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC;CAC/E,CAAC,CAAA;AAEF,MAAM,CAAC,MAAM,oBAAoB,GAAG,CAAC,CAAC,MAAM,CAAC;IAC3C,QAAQ,EAAE,GAAG;IACb,MAAM,EAAE,YAAY;IACpB,WAAW,EAAE,iBAAiB;CAC/B,CAAC,CAAA;AAEF,OAAO,EAAE,aAAa,IAAI,wBAAwB,EAAE,CAAA"}
@@ -0,0 +1,2 @@
1
+ export * from './code-host/index.js';
2
+ export { default } from './code-host/index.js';
@@ -0,0 +1,3 @@
1
+ export * from './code-host/index.js';
2
+ export { default } from './code-host/index.js';
3
+ //# sourceMappingURL=code-host.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"code-host.js","sourceRoot":"","sources":["../src/code-host.ts"],"names":[],"mappings":"AAAA,cAAc,sBAAsB,CAAA;AACpC,OAAO,EAAE,OAAO,EAAE,MAAM,sBAAsB,CAAA"}
@@ -0,0 +1,2 @@
1
+ export * from './settings.js';
2
+ export { default } from './settings.js';
@@ -0,0 +1,3 @@
1
+ export * from './settings.js';
2
+ export { default } from './settings.js';
3
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/config/index.ts"],"names":[],"mappings":"AAAA,cAAc,eAAe,CAAA;AAC7B,OAAO,EAAE,OAAO,EAAE,MAAM,eAAe,CAAA"}
@@ -0,0 +1,51 @@
1
+ import { type Context, Service } from '@deepseek-ai/cordis';
2
+ import { type NotificationEvent } from '../notification.js';
3
+ export interface NotificationSubscription {
4
+ providerId: string;
5
+ destinationId: string;
6
+ events: NotificationEvent['type'][];
7
+ summaryDisclosure: 'redacted' | 'full';
8
+ }
9
+ export interface AutopilotSettings {
10
+ trackerProvider: string;
11
+ codeHostProvider: string;
12
+ allowWorkflowChanges: boolean;
13
+ notificationSubscriptions: NotificationSubscription[];
14
+ runUrlTemplate: string;
15
+ issueUrlTemplate: string;
16
+ maxQueued: number;
17
+ maxRunning: number;
18
+ maxBriefBytes: number;
19
+ reconcileIntervalSeconds: number;
20
+ executionMode: 'disabled' | 'native';
21
+ targetRepository: string;
22
+ targetBaseBranch: string;
23
+ managedWorktreeRoot: string;
24
+ runtimeStorePath: string;
25
+ autoCleanupEnabled: boolean;
26
+ cleanupRetentionDays: number;
27
+ deploymentTokenCap: number;
28
+ perRunTokenCap: number;
29
+ runTokenAllowance: number;
30
+ }
31
+ declare module '@deepseek-ai/cordis' {
32
+ interface Context {
33
+ autopilotConfig: AutopilotConfig;
34
+ }
35
+ }
36
+ /** Own and validate the one root Autopilot Settings namespace. */
37
+ export declare class AutopilotConfig extends Service {
38
+ static readonly inject: string[];
39
+ private settings?;
40
+ constructor(ctx: Context);
41
+ /** Return the current validated Settings snapshot; the caller receives no credential values and performs no I/O. */
42
+ get(): AutopilotSettings;
43
+ /**
44
+ * Observe successfully persisted Settings changes until the returned disposer is called.
45
+ * The Settings service serializes callbacks; callback failures propagate according to its watcher contract.
46
+ */
47
+ watch(callback: (next: AutopilotSettings, previous: AutopilotSettings) => void | Promise<void>): () => void;
48
+ }
49
+ /** Validate execution routing and budget settings before any resource is acquired. */
50
+ export declare function validateExecutionSettings(settings: AutopilotSettings): void;
51
+ export default AutopilotConfig;
@@ -0,0 +1,195 @@
1
+ import { isAbsolute } from 'node:path';
2
+ import { Service } from '@deepseek-ai/cordis';
3
+ import s from '@deepseek-ai/schemastery';
4
+ import { codeHostProviderId } from '../code-host.js';
5
+ import { notificationDestinationId, notificationProviderId } from '../notification.js';
6
+ import { trackerProviderId } from '../tracker.js';
7
+ const autopilotSettingsSchema = s.object({
8
+ trackerProvider: s.string().default('jira'),
9
+ codeHostProvider: s.string().default(''),
10
+ allowWorkflowChanges: s.boolean().default(false),
11
+ notificationSubscriptions: s
12
+ .array(s.object({
13
+ providerId: s.string().required(),
14
+ destinationId: s.string().required(),
15
+ events: s.array(s.union(['started', 'blocked', 'paused', 'failed', 'completed'])).default([]),
16
+ summaryDisclosure: s.union(['redacted', 'full']).default('redacted'),
17
+ }))
18
+ .default([]),
19
+ runUrlTemplate: s.string().default(''),
20
+ issueUrlTemplate: s.string().default(''),
21
+ maxQueued: s.number().min(1).max(100).default(20),
22
+ maxRunning: s.number().min(1).max(100).default(1),
23
+ maxBriefBytes: s
24
+ .number()
25
+ .min(1024)
26
+ .max(32 * 1024)
27
+ .default(32 * 1024),
28
+ reconcileIntervalSeconds: s
29
+ .number()
30
+ .min(5)
31
+ .max(24 * 60 * 60)
32
+ .default(5 * 60),
33
+ executionMode: s.union(['disabled', 'native']).default('disabled'),
34
+ targetRepository: s.string().default(''),
35
+ targetBaseBranch: s.string().default(''),
36
+ managedWorktreeRoot: s.string().default(''),
37
+ runtimeStorePath: s.string().default(''),
38
+ autoCleanupEnabled: s.boolean().default(true),
39
+ cleanupRetentionDays: s.number().min(0).max(3650).default(7),
40
+ deploymentTokenCap: s.number().min(0).default(0),
41
+ perRunTokenCap: s.number().min(0).default(0),
42
+ runTokenAllowance: s.number().min(0).default(0),
43
+ });
44
+ /** Own and validate the one root Autopilot Settings namespace. */
45
+ export class AutopilotConfig extends Service {
46
+ static inject = ['settings'];
47
+ settings;
48
+ constructor(ctx) {
49
+ super(ctx, 'autopilotConfig');
50
+ this.settings = ctx.settings.register('dsh-autopilot', autopilotSettingsSchema, {
51
+ validate: (value) => {
52
+ validateSettings(value);
53
+ const current = this.settings?.get();
54
+ if (current === undefined)
55
+ return;
56
+ if (current.trackerProvider !== value.trackerProvider) {
57
+ const admission = ctx.get('admission');
58
+ if (admission === undefined) {
59
+ throw new Error('Cannot change tracker provider because durable run status is unavailable.');
60
+ }
61
+ const blocker = admission.trackerSwitchBlocker(current.trackerProvider);
62
+ if (blocker !== undefined)
63
+ throw new Error(blocker);
64
+ }
65
+ if (current.codeHostProvider !== value.codeHostProvider) {
66
+ const admission = ctx.get('admission');
67
+ if (admission === undefined) {
68
+ throw new Error('Cannot change code-host provider because durable run status is unavailable.');
69
+ }
70
+ const blocker = admission.codeHostSwitchBlocker(current.codeHostProvider);
71
+ if (blocker !== undefined)
72
+ throw new Error(blocker);
73
+ }
74
+ if (current.targetRepository !== value.targetRepository ||
75
+ current.targetBaseBranch !== value.targetBaseBranch ||
76
+ current.managedWorktreeRoot !== value.managedWorktreeRoot ||
77
+ current.allowWorkflowChanges !== value.allowWorkflowChanges) {
78
+ const admission = ctx.get('admission');
79
+ if (admission === undefined) {
80
+ throw new Error('Cannot change execution routing because durable run status is unavailable.');
81
+ }
82
+ const blocker = admission.executionRoutingSwitchBlocker();
83
+ if (blocker !== undefined)
84
+ throw new Error(blocker);
85
+ }
86
+ },
87
+ });
88
+ }
89
+ /** Return the current validated Settings snapshot; the caller receives no credential values and performs no I/O. */
90
+ get() {
91
+ if (this.settings === undefined)
92
+ throw new Error('Autopilot Settings are not initialized');
93
+ return this.settings.get();
94
+ }
95
+ /**
96
+ * Observe successfully persisted Settings changes until the returned disposer is called.
97
+ * The Settings service serializes callbacks; callback failures propagate according to its watcher contract.
98
+ */
99
+ watch(callback) {
100
+ if (this.settings === undefined)
101
+ throw new Error('Autopilot Settings are not initialized');
102
+ return this.settings.watch(callback);
103
+ }
104
+ }
105
+ function validateSettings(value) {
106
+ trackerProviderId(value.trackerProvider);
107
+ if (value.codeHostProvider !== '')
108
+ codeHostProviderId(value.codeHostProvider);
109
+ if (value.notificationSubscriptions.length > 32)
110
+ throw new TypeError('too many notification subscriptions');
111
+ const notificationKeys = new Set();
112
+ for (const subscription of value.notificationSubscriptions) {
113
+ notificationProviderId(subscription.providerId);
114
+ notificationDestinationId(subscription.destinationId);
115
+ if (subscription.events.length === 0 || new Set(subscription.events).size !== subscription.events.length) {
116
+ throw new TypeError('notification events must be non-empty and unique');
117
+ }
118
+ const key = `${subscription.providerId}\0${subscription.destinationId}`;
119
+ if (notificationKeys.has(key))
120
+ throw new TypeError('notification destinations must be unique');
121
+ notificationKeys.add(key);
122
+ }
123
+ if (value.notificationSubscriptions.length > 0) {
124
+ validateUrlTemplate(value.runUrlTemplate, '{runId}', 'run URL');
125
+ validateUrlTemplate(value.issueUrlTemplate, '{displayKey}', 'issue URL');
126
+ }
127
+ if (value.runtimeStorePath !== '' && !isAbsolute(value.runtimeStorePath)) {
128
+ throw new TypeError('runtimeStorePath must be an absolute path');
129
+ }
130
+ for (const [name, candidate] of [
131
+ ['maxQueued', value.maxQueued],
132
+ ['maxRunning', value.maxRunning],
133
+ ['maxBriefBytes', value.maxBriefBytes],
134
+ ['reconcileIntervalSeconds', value.reconcileIntervalSeconds],
135
+ ['cleanupRetentionDays', value.cleanupRetentionDays],
136
+ ['deploymentTokenCap', value.deploymentTokenCap],
137
+ ['perRunTokenCap', value.perRunTokenCap],
138
+ ['runTokenAllowance', value.runTokenAllowance],
139
+ ]) {
140
+ if (!Number.isInteger(candidate))
141
+ throw new TypeError(`${name} must be an integer`);
142
+ }
143
+ if (value.executionMode === 'native')
144
+ validateExecutionSettings(value);
145
+ }
146
+ function validateUrlTemplate(template, placeholder, subject) {
147
+ if (template.length > 4096)
148
+ throw new TypeError(`${subject} template is too long`);
149
+ if (template.split(placeholder).length !== 2)
150
+ throw new TypeError(`${subject} template must contain ${placeholder} once`);
151
+ let url;
152
+ try {
153
+ url = new URL(template.replace(placeholder, 'validated-id'));
154
+ }
155
+ catch {
156
+ throw new TypeError(`${subject} template must produce an absolute URL`);
157
+ }
158
+ if (url.protocol !== 'https:' || url.username !== '' || url.password !== '') {
159
+ throw new TypeError(`${subject} template must use HTTPS without embedded credentials`);
160
+ }
161
+ }
162
+ /** Validate execution routing and budget settings before any resource is acquired. */
163
+ export function validateExecutionSettings(settings) {
164
+ if (settings.executionMode !== 'native') {
165
+ throw new Error('dispatch is disabled; enable native execution first');
166
+ }
167
+ if (!isAbsolute(settings.targetRepository) || !isAbsolute(settings.managedWorktreeRoot)) {
168
+ throw new TypeError('target repository and managed worktree root must be absolute paths');
169
+ }
170
+ if (settings.codeHostProvider === '')
171
+ throw new TypeError('codeHostProvider is required for execution');
172
+ if (!/^[a-zA-Z0-9][a-zA-Z0-9._/-]*$/.test(settings.targetBaseBranch) ||
173
+ settings.targetBaseBranch.includes('..') ||
174
+ settings.targetBaseBranch.includes('//') ||
175
+ settings.targetBaseBranch.endsWith('/') ||
176
+ settings.targetBaseBranch.endsWith('.lock')) {
177
+ throw new TypeError('target base branch is invalid');
178
+ }
179
+ for (const [name, value] of [
180
+ ['deploymentTokenCap', settings.deploymentTokenCap],
181
+ ['perRunTokenCap', settings.perRunTokenCap],
182
+ ['runTokenAllowance', settings.runTokenAllowance],
183
+ ]) {
184
+ if (!Number.isSafeInteger(value) || value <= 0)
185
+ throw new TypeError(`${name} must be a positive safe integer`);
186
+ }
187
+ if (settings.runTokenAllowance > settings.perRunTokenCap) {
188
+ throw new TypeError('run token allowance must not exceed the per-run token cap');
189
+ }
190
+ if (settings.runTokenAllowance > settings.deploymentTokenCap) {
191
+ throw new TypeError('run token allowance must not exceed the deployment token cap');
192
+ }
193
+ }
194
+ export default AutopilotConfig;
195
+ //# sourceMappingURL=settings.js.map