@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,281 @@
1
+ import { randomUUID } from 'node:crypto';
2
+ import { lstat, mkdir, open, readFile, realpath, rename, rmdir, stat, unlink } from 'node:fs/promises';
3
+ import { basename, dirname, join, resolve } from 'node:path';
4
+ import { Service } from '@deepseek-ai/cordis';
5
+ import { authoritativeStorePath } from './storage-composition.js';
6
+ const OWNER_FILE = 'owner.json';
7
+ export class RuntimeStoreOwnedError extends Error {
8
+ owner;
9
+ constructor(owner) {
10
+ super(owner === undefined
11
+ ? 'the Autopilot runtime store has an incomplete owner fence'
12
+ : `the Autopilot runtime store is already owned by process ${String(owner.pid)} since ${owner.acquiredAt}`);
13
+ this.owner = owner;
14
+ this.name = 'RuntimeStoreOwnedError';
15
+ }
16
+ }
17
+ export class RuntimeStoreConfigurationError extends Error {
18
+ constructor(configured, authoritative) {
19
+ super(`runtimeStorePath "${configured}" does not match the authoritative DSH storage backend "${authoritative}"`);
20
+ this.name = 'RuntimeStoreConfigurationError';
21
+ }
22
+ }
23
+ /** Hold the one-VPS fence for the authoritative DSH storage medium before Autopilot opens durable state. */
24
+ export class RuntimeOwner extends Service {
25
+ options;
26
+ static inject = ['autopilotConfig'];
27
+ owned;
28
+ holders = 0;
29
+ closing = false;
30
+ waitForHolders;
31
+ constructor(ctx, options = {}) {
32
+ super(ctx, 'runtimeOwner');
33
+ this.options = options;
34
+ }
35
+ async *[Service.init]() {
36
+ await this.ensureOwned();
37
+ yield async () => {
38
+ this.closing = true;
39
+ if (this.holders > 0) {
40
+ await new Promise((resolve) => {
41
+ this.waitForHolders = resolve;
42
+ });
43
+ }
44
+ await this.release();
45
+ };
46
+ }
47
+ /**
48
+ * Acquire the authoritative DSH storage-medium fence, or prove this service already owns that exact canonical
49
+ * medium. An optional runtimeStorePath is only a configuration assertion. Unprovable or changed media,
50
+ * unsafe/incomplete targets and a live owner reject; stale local-process ownership is reclaimed atomically.
51
+ */
52
+ async ensureOwned() {
53
+ if (this.closing)
54
+ throw new Error('the runtime-store owner is shutting down');
55
+ const storePath = await canonicalPath(authoritativeStorePath(this.ctx, this.options));
56
+ const configured = this.ctx.autopilotConfig.get().runtimeStorePath;
57
+ if (configured !== '') {
58
+ const configuredPath = await canonicalPath(configured);
59
+ if (configuredPath !== storePath)
60
+ throw new RuntimeStoreConfigurationError(configuredPath, storePath);
61
+ }
62
+ if (this.owned?.storePath === storePath)
63
+ return storePath;
64
+ if (this.owned !== undefined) {
65
+ throw new Error('the authoritative DSH storage medium cannot change while this Host owns another medium');
66
+ }
67
+ const lockPath = `${storePath}.autopilot-owner`;
68
+ const record = await acquire(lockPath);
69
+ this.owned = { storePath, lockPath, record };
70
+ return storePath;
71
+ }
72
+ /**
73
+ * Keep the owner fence alive through a dependent service's complete asynchronous shutdown. Rejects during owner
74
+ * shutdown; the returned idempotent release callback performs no I/O.
75
+ */
76
+ hold() {
77
+ if (this.closing)
78
+ throw new Error('the runtime-store owner is shutting down');
79
+ this.holders += 1;
80
+ let released = false;
81
+ return () => {
82
+ if (released)
83
+ return;
84
+ released = true;
85
+ this.holders -= 1;
86
+ if (this.holders === 0)
87
+ this.waitForHolders?.();
88
+ };
89
+ }
90
+ /** Return detached owner/fence facts without touching the filesystem; available until this service is disposed. */
91
+ snapshot() {
92
+ return this.owned === undefined
93
+ ? { status: 'unconfigured' }
94
+ : { status: 'held', storePath: this.owned.storePath, acquiredAt: this.owned.record.acquiredAt };
95
+ }
96
+ async release() {
97
+ const owned = this.owned;
98
+ if (owned === undefined)
99
+ return;
100
+ this.owned = undefined;
101
+ let current;
102
+ try {
103
+ current = await readOwner(owned.lockPath);
104
+ }
105
+ catch {
106
+ return;
107
+ }
108
+ if (current?.nonce !== owned.record.nonce)
109
+ return;
110
+ const releasePath = `${owned.lockPath}.release-${owned.record.nonce}`;
111
+ try {
112
+ await rename(owned.lockPath, releasePath);
113
+ await removeLockDirectory(releasePath);
114
+ }
115
+ catch (error) {
116
+ if (!isMissing(error))
117
+ throw error;
118
+ }
119
+ }
120
+ }
121
+ async function canonicalPath(path) {
122
+ const absolute = resolve(path);
123
+ await mkdir(dirname(absolute), { recursive: true, mode: 0o700 });
124
+ try {
125
+ return await realpath(absolute);
126
+ }
127
+ catch (error) {
128
+ if (!isMissing(error))
129
+ throw error;
130
+ return join(await realpath(dirname(absolute)), basename(absolute));
131
+ }
132
+ }
133
+ async function acquire(lockPath) {
134
+ await mkdir(dirname(lockPath), { recursive: true, mode: 0o700 });
135
+ for (;;) {
136
+ const record = await currentOwnerRecord();
137
+ try {
138
+ await mkdir(lockPath, { mode: 0o700 });
139
+ const handle = await open(`${lockPath}/${OWNER_FILE}`, 'wx', 0o600);
140
+ try {
141
+ await handle.writeFile(`${JSON.stringify(record)}\n`);
142
+ await handle.sync();
143
+ }
144
+ finally {
145
+ await handle.close();
146
+ }
147
+ return record;
148
+ }
149
+ catch (error) {
150
+ if (!isAlreadyExists(error)) {
151
+ try {
152
+ await removeLockDirectory(lockPath);
153
+ }
154
+ catch {
155
+ // Preserve the acquisition error; a partial fence fails closed on the next attempt.
156
+ }
157
+ throw error;
158
+ }
159
+ }
160
+ let metadata;
161
+ try {
162
+ metadata = await lstat(lockPath);
163
+ }
164
+ catch (error) {
165
+ if (isMissing(error))
166
+ continue;
167
+ throw error;
168
+ }
169
+ if (!metadata.isDirectory() || metadata.isSymbolicLink())
170
+ throw new RuntimeStoreOwnedError(undefined);
171
+ const existing = await readOwner(lockPath);
172
+ if ((existing === undefined && !(await incompleteFenceIsStale(lockPath))) ||
173
+ (existing !== undefined && (await ownerIsLive(existing)))) {
174
+ throw new RuntimeStoreOwnedError(existing);
175
+ }
176
+ const stalePath = `${lockPath}.stale-${randomUUID()}`;
177
+ try {
178
+ await rename(lockPath, stalePath);
179
+ }
180
+ catch (error) {
181
+ if (isMissing(error))
182
+ continue;
183
+ throw error;
184
+ }
185
+ await removeLockDirectory(stalePath);
186
+ }
187
+ }
188
+ async function currentOwnerRecord() {
189
+ const [bootId, processStart] = await Promise.all([linuxBootId(), linuxProcessStart(process.pid)]);
190
+ return {
191
+ version: 1,
192
+ pid: process.pid,
193
+ nonce: randomUUID(),
194
+ acquiredAt: new Date().toISOString(),
195
+ ...(bootId === undefined ? {} : { bootId }),
196
+ ...(processStart === undefined ? {} : { processStart }),
197
+ };
198
+ }
199
+ async function readOwner(lockPath) {
200
+ try {
201
+ const parsed = JSON.parse(await readFile(`${lockPath}/${OWNER_FILE}`, 'utf8'));
202
+ if (parsed.version !== 1 ||
203
+ !Number.isSafeInteger(parsed.pid) ||
204
+ (parsed.pid ?? 0) <= 0 ||
205
+ typeof parsed.nonce !== 'string' ||
206
+ parsed.nonce.length === 0 ||
207
+ typeof parsed.acquiredAt !== 'string' ||
208
+ !Number.isFinite(Date.parse(parsed.acquiredAt))) {
209
+ return undefined;
210
+ }
211
+ return parsed;
212
+ }
213
+ catch (error) {
214
+ if (!isMissing(error))
215
+ return undefined;
216
+ return undefined;
217
+ }
218
+ }
219
+ async function incompleteFenceIsStale(lockPath) {
220
+ try {
221
+ return Date.now() - (await stat(lockPath)).mtimeMs >= 5_000;
222
+ }
223
+ catch {
224
+ return false;
225
+ }
226
+ }
227
+ async function ownerIsLive(owner) {
228
+ const bootId = await linuxBootId();
229
+ if (owner.bootId !== undefined && bootId !== undefined && owner.bootId !== bootId)
230
+ return false;
231
+ const processStart = await linuxProcessStart(owner.pid);
232
+ if (owner.processStart !== undefined && processStart !== undefined)
233
+ return owner.processStart === processStart;
234
+ try {
235
+ process.kill(owner.pid, 0);
236
+ return true;
237
+ }
238
+ catch (error) {
239
+ return error.code === 'EPERM';
240
+ }
241
+ }
242
+ async function linuxBootId() {
243
+ try {
244
+ return (await readFile('/proc/sys/kernel/random/boot_id', 'utf8')).trim();
245
+ }
246
+ catch {
247
+ return undefined;
248
+ }
249
+ }
250
+ async function linuxProcessStart(pid) {
251
+ try {
252
+ const value = await readFile(`/proc/${String(pid)}/stat`, 'utf8');
253
+ const close = value.lastIndexOf(')');
254
+ return value.slice(close + 2).split(' ')[19];
255
+ }
256
+ catch {
257
+ return undefined;
258
+ }
259
+ }
260
+ async function removeLockDirectory(path) {
261
+ const metadata = await lstat(path);
262
+ if (!metadata.isDirectory() || metadata.isSymbolicLink()) {
263
+ throw new Error('refusing to remove a runtime-owner fence that is not a directory');
264
+ }
265
+ try {
266
+ await unlink(`${path}/${OWNER_FILE}`);
267
+ }
268
+ catch (error) {
269
+ if (!isMissing(error))
270
+ throw error;
271
+ }
272
+ await rmdir(path);
273
+ }
274
+ function isAlreadyExists(error) {
275
+ return error.code === 'EEXIST';
276
+ }
277
+ function isMissing(error) {
278
+ return error.code === 'ENOENT';
279
+ }
280
+ export default RuntimeOwner;
281
+ //# sourceMappingURL=runtime-owner.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"runtime-owner.js","sourceRoot":"","sources":["../../src/operations/runtime-owner.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,55 @@
1
+ import { type Context, Service } from '@deepseek-ai/cordis';
2
+ import type { RunId } from '../admission.js';
3
+ import type { CleanupPreview, MaintenanceAudit, OperationsHealth, OrphanWorktreeFact, RecoveryParticipant, RetainedWorktreeFact } from './model.js';
4
+ export interface AutopilotOperationsOptions {
5
+ readonly now?: () => number;
6
+ }
7
+ declare module '@deepseek-ai/cordis' {
8
+ interface Context {
9
+ autopilotOperations: AutopilotOperations;
10
+ }
11
+ }
12
+ /** Coordinate conservative retained-worktree maintenance, recovery readiness, audit, and operational health. */
13
+ export declare class AutopilotOperations extends Service {
14
+ static readonly inject: string[];
15
+ private readonly store;
16
+ private readonly recovery;
17
+ private readonly inspector;
18
+ private readonly cleanup;
19
+ private readonly retention;
20
+ private readonly now;
21
+ private readying;
22
+ private storeRecovered;
23
+ constructor(ctx: Context, options?: AutopilotOperationsOptions);
24
+ [Service.init](): AsyncGenerator<() => Promise<void>, void, void>;
25
+ /** Register one effect-owned recovery generation; disposal withdraws, cancels, and drains active reconciliation. */
26
+ registerRecoveryParticipant(id: string, participant: RecoveryParticipant): () => Promise<void>;
27
+ /** Reconcile every required contributor and reject execution while durable restart work remains unresolved. */
28
+ assertDispatchReady(): Promise<void>;
29
+ /** Inspect one allocated run and retain an opaque process-local authorization preview. */
30
+ previewCleanup(runId: RunId): Promise<CleanupPreview>;
31
+ /** Inspect one allocated run without retaining an authorization capable cleanup preview. */
32
+ inspectCleanup(runId: RunId): Promise<Omit<CleanupPreview, 'previewId'>>;
33
+ /** Recheck and consume one eligible preview, persist intent, and remove only through native Git worktree operations. */
34
+ removeWorktree(previewId: string, operationId?: string): Promise<CleanupPreview>;
35
+ /** Reconcile a replayed Web cleanup command against its durable maintenance outcome. */
36
+ cleanupCommandOutcome(operationId: string): Promise<'completed' | 'pending' | 'retry-required' | 'unknown'>;
37
+ /** Run the automatic retention policy through the same preview, recheck, intent, and removal path. */
38
+ runRetentionMaintenance(): Promise<{
39
+ inspected: number;
40
+ removed: number;
41
+ attention: number;
42
+ }>;
43
+ /** Project retained, missing, unsafe, and orphaned worktrees without authorizing orphan deletion. */
44
+ inspectWorktrees(): Promise<{
45
+ retained: readonly RetainedWorktreeFact[];
46
+ orphans: readonly OrphanWorktreeFact[];
47
+ audit: readonly MaintenanceAudit[];
48
+ }>;
49
+ /** Return independent process, persistence, recovery, integration, and admission health facts without I/O. */
50
+ health(): OperationsHealth;
51
+ private ensureStore;
52
+ private openStore;
53
+ private reconcilePendingCleanup;
54
+ }
55
+ export default AutopilotOperations;
@@ -0,0 +1,154 @@
1
+ import { randomUUID } from 'node:crypto';
2
+ import { Service } from '@deepseek-ai/cordis';
3
+ import { CleanupOperations } from './cleanup.js';
4
+ import { CleanupInspector } from './cleanup-inspector.js';
5
+ import { projectOperationsHealth } from './health.js';
6
+ import { pathExists } from './inspection.js';
7
+ import { RecoveryParticipants } from './recovery.js';
8
+ import { RetentionMaintenance } from './retention.js';
9
+ import { appendMaintenanceAudit } from './state.js';
10
+ import { MaintenanceStateStore } from './store.js';
11
+ /** Coordinate conservative retained-worktree maintenance, recovery readiness, audit, and operational health. */
12
+ export class AutopilotOperations extends Service {
13
+ static inject = [
14
+ 'admission',
15
+ 'autopilotConfig',
16
+ 'pullRequestDisposition',
17
+ 'runtimeOwner',
18
+ 'storageDomain',
19
+ 'subprocess',
20
+ ];
21
+ store;
22
+ recovery = new RecoveryParticipants();
23
+ inspector;
24
+ cleanup;
25
+ retention;
26
+ now;
27
+ readying;
28
+ storeRecovered = false;
29
+ constructor(ctx, options = {}) {
30
+ super(ctx, 'autopilotOperations');
31
+ this.now = options.now ?? Date.now;
32
+ this.store = new MaintenanceStateStore(ctx);
33
+ this.inspector = new CleanupInspector(ctx, this.store, this.now);
34
+ this.cleanup = new CleanupOperations(ctx, this.store, this.inspector, () => this.ensureStore(), this.now);
35
+ this.retention = new RetentionMaintenance(ctx, this.store, this.cleanup, () => this.ensureStore());
36
+ }
37
+ async *[Service.init]() {
38
+ const releaseOwnerHold = this.ctx.runtimeOwner.hold();
39
+ let stopSettingsWatch;
40
+ try {
41
+ await this.ensureStore();
42
+ stopSettingsWatch = this.ctx.autopilotConfig.watch(() => this.retention.reschedule());
43
+ }
44
+ catch (error) {
45
+ try {
46
+ await this.store.close();
47
+ }
48
+ catch {
49
+ // Preserve the recovery failure that prevented the service from mounting.
50
+ }
51
+ finally {
52
+ releaseOwnerHold();
53
+ }
54
+ throw error;
55
+ }
56
+ yield async () => {
57
+ stopSettingsWatch?.();
58
+ try {
59
+ await this.retention.stop();
60
+ await this.recovery.dispose();
61
+ await this.store.close();
62
+ }
63
+ finally {
64
+ releaseOwnerHold();
65
+ }
66
+ };
67
+ this.retention.schedule(0);
68
+ }
69
+ /** Register one effect-owned recovery generation; disposal withdraws, cancels, and drains active reconciliation. */
70
+ registerRecoveryParticipant(id, participant) {
71
+ return this.recovery.register(id, participant);
72
+ }
73
+ /** Reconcile every required contributor and reject execution while durable restart work remains unresolved. */
74
+ async assertDispatchReady() {
75
+ await this.ensureStore();
76
+ await this.recovery.reconcileAll();
77
+ if (this.health().recovery.status !== 'complete') {
78
+ throw new Error('Autopilot recovery must be completed before execution starts');
79
+ }
80
+ }
81
+ /** Inspect one allocated run and retain an opaque process-local authorization preview. */
82
+ previewCleanup(runId) {
83
+ return this.cleanup.preview(runId);
84
+ }
85
+ /** Inspect one allocated run without retaining an authorization capable cleanup preview. */
86
+ inspectCleanup(runId) {
87
+ return this.cleanup.inspect(runId);
88
+ }
89
+ /** Recheck and consume one eligible preview, persist intent, and remove only through native Git worktree operations. */
90
+ removeWorktree(previewId, operationId) {
91
+ return this.cleanup.remove(previewId, operationId);
92
+ }
93
+ /** Reconcile a replayed Web cleanup command against its durable maintenance outcome. */
94
+ async cleanupCommandOutcome(operationId) {
95
+ await this.ensureStore();
96
+ const state = this.store.current();
97
+ if (state.pendingCleanup?.operationId === operationId)
98
+ return 'pending';
99
+ return state.audit.findLast((entry) => entry.operationId === operationId)?.outcome ?? 'unknown';
100
+ }
101
+ /** Run the automatic retention policy through the same preview, recheck, intent, and removal path. */
102
+ runRetentionMaintenance() {
103
+ return this.retention.run();
104
+ }
105
+ /** Project retained, missing, unsafe, and orphaned worktrees without authorizing orphan deletion. */
106
+ inspectWorktrees() {
107
+ return this.retention.inspectWorktrees();
108
+ }
109
+ /** Return independent process, persistence, recovery, integration, and admission health facts without I/O. */
110
+ health() {
111
+ return projectOperationsHealth(this.ctx, this.store, this.recovery, this.inspector);
112
+ }
113
+ async ensureStore() {
114
+ if (this.storeRecovered)
115
+ return;
116
+ if (this.readying !== undefined)
117
+ return await this.readying;
118
+ this.readying = this.openStore();
119
+ try {
120
+ await this.readying;
121
+ }
122
+ finally {
123
+ this.readying = undefined;
124
+ }
125
+ }
126
+ async openStore() {
127
+ await this.store.open();
128
+ await this.reconcilePendingCleanup();
129
+ this.storeRecovered = true;
130
+ }
131
+ async reconcilePendingCleanup() {
132
+ const pending = this.store.current().pendingCleanup;
133
+ if (pending === undefined)
134
+ return;
135
+ const remains = await pathExists(pending.worktreePath);
136
+ await this.store.update((state) => ({
137
+ ...appendMaintenanceAudit(state, {
138
+ id: randomUUID(),
139
+ operationId: pending.operationId,
140
+ at: new Date(this.now()).toISOString(),
141
+ kind: 'cleanup-recovered',
142
+ runId: pending.runId,
143
+ worktreePath: pending.worktreePath,
144
+ outcome: remains ? 'retry-required' : 'completed',
145
+ detail: remains
146
+ ? 'interrupted cleanup left the path present; a new preview is required'
147
+ : 'interrupted cleanup completed before acknowledgement; the absent path was retained as the outcome',
148
+ }),
149
+ pendingCleanup: undefined,
150
+ }));
151
+ }
152
+ }
153
+ export default AutopilotOperations;
154
+ //# sourceMappingURL=service.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"service.js","sourceRoot":"","sources":["../../src/operations/service.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,79 @@
1
+ import { z } from 'zod';
2
+ import type { RunId } from '../admission.js';
3
+ import type { MaintenanceAudit } from './model.js';
4
+ export declare const MAINTENANCE_STATE_KEY: 'primary';
5
+ export declare const maintenanceStateSchema: z.ZodObject<{
6
+ schemaVersion: z.ZodLiteral<1>;
7
+ revision: z.ZodNumber;
8
+ mergeObservations: z.ZodArray<z.ZodObject<{
9
+ runId: z.ZodPipe<z.ZodString, z.ZodTransform<RunId, string>>;
10
+ firstObservedMergedAt: z.ZodISODateTime;
11
+ lastObservedMergedAt: z.ZodISODateTime;
12
+ }, z.core.$strip>>;
13
+ pendingCleanup: z.ZodOptional<z.ZodObject<{
14
+ operationId: z.ZodString;
15
+ runId: z.ZodPipe<z.ZodString, z.ZodTransform<RunId, string>>;
16
+ worktreePath: z.ZodString;
17
+ previewFingerprint: z.ZodString;
18
+ startedAt: z.ZodISODateTime;
19
+ }, z.core.$strip>>;
20
+ audit: z.ZodArray<z.ZodObject<{
21
+ id: z.ZodString;
22
+ operationId: z.ZodOptional<z.ZodString>;
23
+ at: z.ZodISODateTime;
24
+ kind: z.ZodEnum<{
25
+ "cleanup-recovered": "cleanup-recovered";
26
+ "cleanup-rejected": "cleanup-rejected";
27
+ "cleanup-removed": "cleanup-removed";
28
+ "cleanup-started": "cleanup-started";
29
+ "merge-observed": "merge-observed";
30
+ }>;
31
+ runId: z.ZodPipe<z.ZodString, z.ZodTransform<RunId, string>>;
32
+ worktreePath: z.ZodString;
33
+ outcome: z.ZodOptional<z.ZodEnum<{
34
+ completed: "completed";
35
+ "retry-required": "retry-required";
36
+ }>>;
37
+ detail: z.ZodString;
38
+ }, z.core.$strip>>;
39
+ }, z.core.$strip>;
40
+ export type MaintenanceState = z.infer<typeof maintenanceStateSchema>;
41
+ export declare const maintenanceDomainSpec: {
42
+ name: string;
43
+ version: number;
44
+ tables: {
45
+ state: import("@deepseek-ai/dsh-storage-domain").DomainTableSpec<"primary", {
46
+ schemaVersion: 1;
47
+ revision: number;
48
+ mergeObservations: {
49
+ runId: RunId;
50
+ firstObservedMergedAt: string;
51
+ lastObservedMergedAt: string;
52
+ }[];
53
+ pendingCleanup?: {
54
+ operationId: string;
55
+ runId: RunId;
56
+ worktreePath: string;
57
+ previewFingerprint: string;
58
+ startedAt: string;
59
+ } | undefined;
60
+ audit: {
61
+ id: string;
62
+ operationId?: string | undefined;
63
+ at: string;
64
+ kind: "cleanup-recovered" | "cleanup-rejected" | "cleanup-removed" | "cleanup-started" | "merge-observed";
65
+ runId: RunId;
66
+ worktreePath: string;
67
+ outcome?: "completed" | "retry-required" | undefined;
68
+ detail: string;
69
+ }[];
70
+ }>;
71
+ };
72
+ };
73
+ export declare function initialMaintenanceState(): MaintenanceState;
74
+ export declare function existingMergeObservation(state: MaintenanceState, runId: RunId): {
75
+ runId: RunId;
76
+ firstObservedMergedAt: string;
77
+ lastObservedMergedAt: string;
78
+ } | undefined;
79
+ export declare function appendMaintenanceAudit(state: MaintenanceState, audit: MaintenanceAudit): MaintenanceState;
@@ -0,0 +1,51 @@
1
+ import { defineDomain, domainTable } from '@deepseek-ai/dsh-storage-domain';
2
+ import { z } from 'zod';
3
+ import { runIdSchema } from '../admission/state.js';
4
+ export const MAINTENANCE_STATE_KEY = 'primary';
5
+ const pathSchema = z.string().min(1).max(4096);
6
+ const mergeObservationSchema = z.object({
7
+ runId: runIdSchema,
8
+ firstObservedMergedAt: z.iso.datetime({ offset: true }),
9
+ lastObservedMergedAt: z.iso.datetime({ offset: true }),
10
+ });
11
+ const pendingCleanupSchema = z.object({
12
+ operationId: z.string().uuid(),
13
+ runId: runIdSchema,
14
+ worktreePath: pathSchema,
15
+ previewFingerprint: z.string().regex(/^[a-f0-9]{64}$/),
16
+ startedAt: z.iso.datetime({ offset: true }),
17
+ });
18
+ const auditSchema = z.object({
19
+ id: z.string().uuid(),
20
+ operationId: z.string().uuid().optional(),
21
+ at: z.iso.datetime({ offset: true }),
22
+ kind: z.enum(['merge-observed', 'cleanup-started', 'cleanup-removed', 'cleanup-rejected', 'cleanup-recovered']),
23
+ runId: runIdSchema,
24
+ worktreePath: pathSchema,
25
+ outcome: z.enum(['completed', 'retry-required']).optional(),
26
+ detail: z.string().min(1).max(4096),
27
+ });
28
+ export const maintenanceStateSchema = z.object({
29
+ schemaVersion: z.literal(1),
30
+ revision: z.number().int().nonnegative(),
31
+ mergeObservations: z.array(mergeObservationSchema).max(100),
32
+ pendingCleanup: pendingCleanupSchema.optional(),
33
+ audit: z.array(auditSchema).max(1000),
34
+ });
35
+ export const maintenanceDomainSpec = defineDomain({
36
+ name: 'autopilot_maintenance',
37
+ version: 1,
38
+ tables: {
39
+ state: domainTable(maintenanceStateSchema),
40
+ },
41
+ });
42
+ export function initialMaintenanceState() {
43
+ return { schemaVersion: 1, revision: 0, mergeObservations: [], audit: [] };
44
+ }
45
+ export function existingMergeObservation(state, runId) {
46
+ return state.mergeObservations.find((observation) => observation.runId === runId);
47
+ }
48
+ export function appendMaintenanceAudit(state, audit) {
49
+ return { ...state, audit: [...state.audit, audit].slice(-1000) };
50
+ }
51
+ //# sourceMappingURL=state.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"state.js","sourceRoot":"","sources":["../../src/operations/state.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,WAAW,EAAE,MAAM,iCAAiC,CAAA;AAC3E,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAA;AACvB,OAAO,EAAE,WAAW,EAAE,MAAM,uBAAuB,CAAA;AAInD,MAAM,CAAC,MAAM,qBAAqB,GAAG,SAAkB,CAAA;AACvD,MAAM,UAAU,GAAG,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,IAAI,CAAC,CAAA;AAE9C,MAAM,sBAAsB,GAAG,CAAC,CAAC,MAAM,CAAC;IACtC,KAAK,EAAE,WAAW;IAClB,qBAAqB,EAAE,CAAC,CAAC,GAAG,CAAC,QAAQ,CAAC,EAAE,MAAM,EAAE,IAAI,EAAE,CAAC;IACvD,oBAAoB,EAAE,CAAC,CAAC,GAAG,CAAC,QAAQ,CAAC,EAAE,MAAM,EAAE,IAAI,EAAE,CAAC;CACvD,CAAC,CAAA;AAEF,MAAM,oBAAoB,GAAG,CAAC,CAAC,MAAM,CAAC;IACpC,WAAW,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,IAAI,EAAE;IAC9B,KAAK,EAAE,WAAW;IAClB,YAAY,EAAE,UAAU;IACxB,kBAAkB,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,KAAK,CAAC,gBAAgB,CAAC;IACtD,SAAS,EAAE,CAAC,CAAC,GAAG,CAAC,QAAQ,CAAC,EAAE,MAAM,EAAE,IAAI,EAAE,CAAC;CAC5C,CAAC,CAAA;AAEF,MAAM,WAAW,GAAG,CAAC,CAAC,MAAM,CAAC;IAC3B,EAAE,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,IAAI,EAAE;IACrB,WAAW,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,IAAI,EAAE,CAAC,QAAQ,EAAE;IACzC,EAAE,EAAE,CAAC,CAAC,GAAG,CAAC,QAAQ,CAAC,EAAE,MAAM,EAAE,IAAI,EAAE,CAAC;IACpC,IAAI,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC,gBAAgB,EAAE,iBAAiB,EAAE,iBAAiB,EAAE,kBAAkB,EAAE,mBAAmB,CAAC,CAAC;IAC/G,KAAK,EAAE,WAAW;IAClB,YAAY,EAAE,UAAU;IACxB,OAAO,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC,WAAW,EAAE,gBAAgB,CAAC,CAAC,CAAC,QAAQ,EAAE;IAC3D,MAAM,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,IAAI,CAAC;CACpC,CAAC,CAAA;AAEF,MAAM,CAAC,MAAM,sBAAsB,GAAG,CAAC,CAAC,MAAM,CAAC;IAC7C,aAAa,EAAE,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC;IAC3B,QAAQ,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,EAAE,CAAC,WAAW,EAAE;IACxC,iBAAiB,EAAE,CAAC,CAAC,KAAK,CAAC,sBAAsB,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC;IAC3D,cAAc,EAAE,oBAAoB,CAAC,QAAQ,EAAE;IAC/C,KAAK,EAAE,CAAC,CAAC,KAAK,CAAC,WAAW,CAAC,CAAC,GAAG,CAAC,IAAI,CAAC;CACtC,CAAC,CAAA;AAIF,MAAM,CAAC,MAAM,qBAAqB,GAAG,YAAY,CAAC;IAChD,IAAI,EAAE,uBAAuB;IAC7B,OAAO,EAAE,CAAC;IACV,MAAM,EAAE;QACN,KAAK,EAAE,WAAW,CAAiD,sBAAsB,CAAC;KAC3F;CACF,CAAC,CAAA;AAEF,MAAM,UAAU,uBAAuB;IACrC,OAAO,EAAE,aAAa,EAAE,CAAC,EAAE,QAAQ,EAAE,CAAC,EAAE,iBAAiB,EAAE,EAAE,EAAE,KAAK,EAAE,EAAE,EAAE,CAAA;AAC5E,CAAC;AAED,MAAM,UAAU,wBAAwB,CAAC,KAAuB,EAAE,KAAY;IAC5E,OAAO,KAAK,CAAC,iBAAiB,CAAC,IAAI,CAAC,CAAC,WAAW,EAAE,EAAE,CAAC,WAAW,CAAC,KAAK,KAAK,KAAK,CAAC,CAAA;AACnF,CAAC;AAED,MAAM,UAAU,sBAAsB,CAAC,KAAuB,EAAE,KAAuB;IACrF,OAAO,EAAE,GAAG,KAAK,EAAE,KAAK,EAAE,CAAC,GAAG,KAAK,CAAC,KAAK,EAAE,KAAK,CAAC,CAAC,KAAK,CAAC,CAAC,IAAI,CAAC,EAAE,CAAA;AAClE,CAAC"}
@@ -0,0 +1,16 @@
1
+ import type { Context } from '@deepseek-ai/cordis';
2
+ interface LoaderEntry {
3
+ readonly disabled: boolean;
4
+ readonly options: {
5
+ readonly name: string;
6
+ readonly config?: unknown;
7
+ };
8
+ evaluate(expression: string): unknown;
9
+ }
10
+ export interface RuntimeOwnerOptions {
11
+ /** Programmatic host proof for compositions that do not use the DSH Loader. */
12
+ readonly authoritativeStorePath?: string;
13
+ }
14
+ export declare function authoritativeStorePath(ctx: Context, options: RuntimeOwnerOptions): string;
15
+ export declare function authoritativePathFromEntries(entries: readonly LoaderEntry[]): string;
16
+ export {};