@software-dlc/cli 0.157.2

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 (701) hide show
  1. package/CHANGELOG.md +11 -0
  2. package/LICENSE +105 -0
  3. package/README.md +31 -0
  4. package/dist/checkout.d.ts +43 -0
  5. package/dist/checkout.d.ts.map +1 -0
  6. package/dist/checkout.js +92 -0
  7. package/dist/checkout.js.map +1 -0
  8. package/dist/cli-arguments.d.ts +13 -0
  9. package/dist/cli-arguments.d.ts.map +1 -0
  10. package/dist/cli-arguments.js +67 -0
  11. package/dist/cli-arguments.js.map +1 -0
  12. package/dist/cli-branch-history.d.ts +48 -0
  13. package/dist/cli-branch-history.d.ts.map +1 -0
  14. package/dist/cli-branch-history.js +319 -0
  15. package/dist/cli-branch-history.js.map +1 -0
  16. package/dist/cli-branches.d.ts +22 -0
  17. package/dist/cli-branches.d.ts.map +1 -0
  18. package/dist/cli-branches.js +59 -0
  19. package/dist/cli-branches.js.map +1 -0
  20. package/dist/cli-deploy.d.ts +14 -0
  21. package/dist/cli-deploy.d.ts.map +1 -0
  22. package/dist/cli-deploy.js +164 -0
  23. package/dist/cli-deploy.js.map +1 -0
  24. package/dist/cli-health.d.ts +3 -0
  25. package/dist/cli-health.d.ts.map +1 -0
  26. package/dist/cli-health.js +73 -0
  27. package/dist/cli-health.js.map +1 -0
  28. package/dist/cli-help.d.ts +21 -0
  29. package/dist/cli-help.d.ts.map +1 -0
  30. package/dist/cli-help.js +176 -0
  31. package/dist/cli-help.js.map +1 -0
  32. package/dist/cli-login.d.ts +76 -0
  33. package/dist/cli-login.d.ts.map +1 -0
  34. package/dist/cli-login.js +634 -0
  35. package/dist/cli-login.js.map +1 -0
  36. package/dist/cli-operation.d.ts +2 -0
  37. package/dist/cli-operation.d.ts.map +1 -0
  38. package/dist/cli-operation.js +66 -0
  39. package/dist/cli-operation.js.map +1 -0
  40. package/dist/cli-org.d.ts +12 -0
  41. package/dist/cli-org.d.ts.map +1 -0
  42. package/dist/cli-org.js +218 -0
  43. package/dist/cli-org.js.map +1 -0
  44. package/dist/cli-rebuild.d.ts +20 -0
  45. package/dist/cli-rebuild.d.ts.map +1 -0
  46. package/dist/cli-rebuild.js +29 -0
  47. package/dist/cli-rebuild.js.map +1 -0
  48. package/dist/cli-reset.d.ts +27 -0
  49. package/dist/cli-reset.d.ts.map +1 -0
  50. package/dist/cli-reset.js +44 -0
  51. package/dist/cli-reset.js.map +1 -0
  52. package/dist/cli-snapshot.d.ts +398 -0
  53. package/dist/cli-snapshot.d.ts.map +1 -0
  54. package/dist/cli-snapshot.js +45 -0
  55. package/dist/cli-snapshot.js.map +1 -0
  56. package/dist/cli-task-context.d.ts +3 -0
  57. package/dist/cli-task-context.d.ts.map +1 -0
  58. package/dist/cli-task-context.js +112 -0
  59. package/dist/cli-task-context.js.map +1 -0
  60. package/dist/cli.d.ts +3 -0
  61. package/dist/cli.d.ts.map +1 -0
  62. package/dist/cli.js +1004 -0
  63. package/dist/cli.js.map +1 -0
  64. package/dist/graph-packages-lock.d.ts +169 -0
  65. package/dist/graph-packages-lock.d.ts.map +1 -0
  66. package/dist/graph-packages-lock.js +503 -0
  67. package/dist/graph-packages-lock.js.map +1 -0
  68. package/dist/index.d.ts +2 -0
  69. package/dist/index.d.ts.map +1 -0
  70. package/dist/index.js +2 -0
  71. package/dist/index.js.map +1 -0
  72. package/dist/local/aggregate-preflight.d.ts +12 -0
  73. package/dist/local/aggregate-preflight.d.ts.map +1 -0
  74. package/dist/local/aggregate-preflight.js +22 -0
  75. package/dist/local/aggregate-preflight.js.map +1 -0
  76. package/dist/local/allow-mcp.d.ts +77 -0
  77. package/dist/local/allow-mcp.d.ts.map +1 -0
  78. package/dist/local/allow-mcp.js +394 -0
  79. package/dist/local/allow-mcp.js.map +1 -0
  80. package/dist/local/api-client.d.ts +15 -0
  81. package/dist/local/api-client.d.ts.map +1 -0
  82. package/dist/local/api-client.js +87 -0
  83. package/dist/local/api-client.js.map +1 -0
  84. package/dist/local/app-contract-readers.d.ts +229 -0
  85. package/dist/local/app-contract-readers.d.ts.map +1 -0
  86. package/dist/local/app-contract-readers.js +450 -0
  87. package/dist/local/app-contract-readers.js.map +1 -0
  88. package/dist/local/app-org-reader.d.ts +21 -0
  89. package/dist/local/app-org-reader.d.ts.map +1 -0
  90. package/dist/local/app-org-reader.js +66 -0
  91. package/dist/local/app-org-reader.js.map +1 -0
  92. package/dist/local/app-shell-readers.d.ts +96 -0
  93. package/dist/local/app-shell-readers.d.ts.map +1 -0
  94. package/dist/local/app-shell-readers.js +381 -0
  95. package/dist/local/app-shell-readers.js.map +1 -0
  96. package/dist/local/app-tasks-read.d.ts +202 -0
  97. package/dist/local/app-tasks-read.d.ts.map +1 -0
  98. package/dist/local/app-tasks-read.js +290 -0
  99. package/dist/local/app-tasks-read.js.map +1 -0
  100. package/dist/local/app-worktrees.d.ts +69 -0
  101. package/dist/local/app-worktrees.d.ts.map +1 -0
  102. package/dist/local/app-worktrees.js +554 -0
  103. package/dist/local/app-worktrees.js.map +1 -0
  104. package/dist/local/base-sync-manifest.d.ts +12 -0
  105. package/dist/local/base-sync-manifest.d.ts.map +1 -0
  106. package/dist/local/base-sync-manifest.js +57 -0
  107. package/dist/local/base-sync-manifest.js.map +1 -0
  108. package/dist/local/blast-radius.d.ts +191 -0
  109. package/dist/local/blast-radius.d.ts.map +1 -0
  110. package/dist/local/blast-radius.js +585 -0
  111. package/dist/local/blast-radius.js.map +1 -0
  112. package/dist/local/canonical.d.ts +2 -0
  113. package/dist/local/canonical.d.ts.map +1 -0
  114. package/dist/local/canonical.js +2 -0
  115. package/dist/local/canonical.js.map +1 -0
  116. package/dist/local/config.d.ts +22 -0
  117. package/dist/local/config.d.ts.map +1 -0
  118. package/dist/local/config.js +57 -0
  119. package/dist/local/config.js.map +1 -0
  120. package/dist/local/document-commands.d.ts +163 -0
  121. package/dist/local/document-commands.d.ts.map +1 -0
  122. package/dist/local/document-commands.js +620 -0
  123. package/dist/local/document-commands.js.map +1 -0
  124. package/dist/local/document-embeds.d.ts +21 -0
  125. package/dist/local/document-embeds.d.ts.map +1 -0
  126. package/dist/local/document-embeds.js +38 -0
  127. package/dist/local/document-embeds.js.map +1 -0
  128. package/dist/local/environment-context.d.ts +39 -0
  129. package/dist/local/environment-context.d.ts.map +1 -0
  130. package/dist/local/environment-context.js +193 -0
  131. package/dist/local/environment-context.js.map +1 -0
  132. package/dist/local/environment-exclude.d.ts +7 -0
  133. package/dist/local/environment-exclude.d.ts.map +1 -0
  134. package/dist/local/environment-exclude.js +82 -0
  135. package/dist/local/environment-exclude.js.map +1 -0
  136. package/dist/local/environment-sidecar.d.ts +126 -0
  137. package/dist/local/environment-sidecar.d.ts.map +1 -0
  138. package/dist/local/environment-sidecar.js +442 -0
  139. package/dist/local/environment-sidecar.js.map +1 -0
  140. package/dist/local/environment-switch.d.ts +22 -0
  141. package/dist/local/environment-switch.d.ts.map +1 -0
  142. package/dist/local/environment-switch.js +385 -0
  143. package/dist/local/environment-switch.js.map +1 -0
  144. package/dist/local/exact-remote-projection.d.ts +17 -0
  145. package/dist/local/exact-remote-projection.d.ts.map +1 -0
  146. package/dist/local/exact-remote-projection.js +53 -0
  147. package/dist/local/exact-remote-projection.js.map +1 -0
  148. package/dist/local/experimental/path-object-store.d.ts +66 -0
  149. package/dist/local/experimental/path-object-store.d.ts.map +1 -0
  150. package/dist/local/experimental/path-object-store.js +135 -0
  151. package/dist/local/experimental/path-object-store.js.map +1 -0
  152. package/dist/local/external-worktree-binding.d.ts +21 -0
  153. package/dist/local/external-worktree-binding.d.ts.map +1 -0
  154. package/dist/local/external-worktree-binding.js +56 -0
  155. package/dist/local/external-worktree-binding.js.map +1 -0
  156. package/dist/local/folder-members.d.ts +34 -0
  157. package/dist/local/folder-members.d.ts.map +1 -0
  158. package/dist/local/folder-members.js +168 -0
  159. package/dist/local/folder-members.js.map +1 -0
  160. package/dist/local/git-ref-authority.d.ts +11 -0
  161. package/dist/local/git-ref-authority.d.ts.map +1 -0
  162. package/dist/local/git-ref-authority.js +76 -0
  163. package/dist/local/git-ref-authority.js.map +1 -0
  164. package/dist/local/git.d.ts +88 -0
  165. package/dist/local/git.d.ts.map +1 -0
  166. package/dist/local/git.js +413 -0
  167. package/dist/local/git.js.map +1 -0
  168. package/dist/local/graph-read.d.ts +168 -0
  169. package/dist/local/graph-read.d.ts.map +1 -0
  170. package/dist/local/graph-read.js +360 -0
  171. package/dist/local/graph-read.js.map +1 -0
  172. package/dist/local/graph-sync.d.ts +39 -0
  173. package/dist/local/graph-sync.d.ts.map +1 -0
  174. package/dist/local/graph-sync.js +186 -0
  175. package/dist/local/graph-sync.js.map +1 -0
  176. package/dist/local/guide-commands.d.ts +79 -0
  177. package/dist/local/guide-commands.d.ts.map +1 -0
  178. package/dist/local/guide-commands.js +247 -0
  179. package/dist/local/guide-commands.js.map +1 -0
  180. package/dist/local/health-files.d.ts +24 -0
  181. package/dist/local/health-files.d.ts.map +1 -0
  182. package/dist/local/health-files.js +133 -0
  183. package/dist/local/health-files.js.map +1 -0
  184. package/dist/local/health-inspection.d.ts +12 -0
  185. package/dist/local/health-inspection.d.ts.map +1 -0
  186. package/dist/local/health-inspection.js +407 -0
  187. package/dist/local/health-inspection.js.map +1 -0
  188. package/dist/local/health-policy.d.ts +11 -0
  189. package/dist/local/health-policy.d.ts.map +1 -0
  190. package/dist/local/health-policy.js +257 -0
  191. package/dist/local/health-policy.js.map +1 -0
  192. package/dist/local/health-projection.d.ts +14 -0
  193. package/dist/local/health-projection.d.ts.map +1 -0
  194. package/dist/local/health-projection.js +102 -0
  195. package/dist/local/health-projection.js.map +1 -0
  196. package/dist/local/health-schema.d.ts +338 -0
  197. package/dist/local/health-schema.d.ts.map +1 -0
  198. package/dist/local/health-schema.js +213 -0
  199. package/dist/local/health-schema.js.map +1 -0
  200. package/dist/local/health-store.d.ts +61 -0
  201. package/dist/local/health-store.d.ts.map +1 -0
  202. package/dist/local/health-store.js +218 -0
  203. package/dist/local/health-store.js.map +1 -0
  204. package/dist/local/index.d.ts +66 -0
  205. package/dist/local/index.d.ts.map +1 -0
  206. package/dist/local/index.js +66 -0
  207. package/dist/local/index.js.map +1 -0
  208. package/dist/local/journey-commands.d.ts +65 -0
  209. package/dist/local/journey-commands.d.ts.map +1 -0
  210. package/dist/local/journey-commands.js +138 -0
  211. package/dist/local/journey-commands.js.map +1 -0
  212. package/dist/local/local-org-store.d.ts +46 -0
  213. package/dist/local/local-org-store.d.ts.map +1 -0
  214. package/dist/local/local-org-store.js +132 -0
  215. package/dist/local/local-org-store.js.map +1 -0
  216. package/dist/local/local-org.d.ts +389 -0
  217. package/dist/local/local-org.d.ts.map +1 -0
  218. package/dist/local/local-org.js +855 -0
  219. package/dist/local/local-org.js.map +1 -0
  220. package/dist/local/media-upload.d.ts +5 -0
  221. package/dist/local/media-upload.d.ts.map +1 -0
  222. package/dist/local/media-upload.js +41 -0
  223. package/dist/local/media-upload.js.map +1 -0
  224. package/dist/local/operation.d.ts +155 -0
  225. package/dist/local/operation.d.ts.map +1 -0
  226. package/dist/local/operation.js +340 -0
  227. package/dist/local/operation.js.map +1 -0
  228. package/dist/local/ownership-reader-schema.d.ts +117 -0
  229. package/dist/local/ownership-reader-schema.d.ts.map +1 -0
  230. package/dist/local/ownership-reader-schema.js +105 -0
  231. package/dist/local/ownership-reader-schema.js.map +1 -0
  232. package/dist/local/ownership-reader-worker.d.ts +2 -0
  233. package/dist/local/ownership-reader-worker.d.ts.map +1 -0
  234. package/dist/local/ownership-reader-worker.js +341 -0
  235. package/dist/local/ownership-reader-worker.js.map +1 -0
  236. package/dist/local/ownership-reader.d.ts +10 -0
  237. package/dist/local/ownership-reader.d.ts.map +1 -0
  238. package/dist/local/ownership-reader.js +93 -0
  239. package/dist/local/ownership-reader.js.map +1 -0
  240. package/dist/local/package-uses-check.d.ts +33 -0
  241. package/dist/local/package-uses-check.d.ts.map +1 -0
  242. package/dist/local/package-uses-check.js +62 -0
  243. package/dist/local/package-uses-check.js.map +1 -0
  244. package/dist/local/pending-recovery.d.ts +22 -0
  245. package/dist/local/pending-recovery.d.ts.map +1 -0
  246. package/dist/local/pending-recovery.js +171 -0
  247. package/dist/local/pending-recovery.js.map +1 -0
  248. package/dist/local/portable-commit-store.d.ts +28 -0
  249. package/dist/local/portable-commit-store.d.ts.map +1 -0
  250. package/dist/local/portable-commit-store.js +187 -0
  251. package/dist/local/portable-commit-store.js.map +1 -0
  252. package/dist/local/portable-commit.d.ts +109 -0
  253. package/dist/local/portable-commit.d.ts.map +1 -0
  254. package/dist/local/portable-commit.js +209 -0
  255. package/dist/local/portable-commit.js.map +1 -0
  256. package/dist/local/portable-remote.d.ts +432 -0
  257. package/dist/local/portable-remote.d.ts.map +1 -0
  258. package/dist/local/portable-remote.js +280 -0
  259. package/dist/local/portable-remote.js.map +1 -0
  260. package/dist/local/project-deleted.d.ts +4 -0
  261. package/dist/local/project-deleted.d.ts.map +1 -0
  262. package/dist/local/project-deleted.js +13 -0
  263. package/dist/local/project-deleted.js.map +1 -0
  264. package/dist/local/projection.d.ts +166 -0
  265. package/dist/local/projection.d.ts.map +1 -0
  266. package/dist/local/projection.js +709 -0
  267. package/dist/local/projection.js.map +1 -0
  268. package/dist/local/read-operation.d.ts +3 -0
  269. package/dist/local/read-operation.d.ts.map +1 -0
  270. package/dist/local/read-operation.js +19 -0
  271. package/dist/local/read-operation.js.map +1 -0
  272. package/dist/local/rebuild.d.ts +11 -0
  273. package/dist/local/rebuild.d.ts.map +1 -0
  274. package/dist/local/rebuild.js +42 -0
  275. package/dist/local/rebuild.js.map +1 -0
  276. package/dist/local/remote-base.d.ts +25 -0
  277. package/dist/local/remote-base.d.ts.map +1 -0
  278. package/dist/local/remote-base.js +68 -0
  279. package/dist/local/remote-base.js.map +1 -0
  280. package/dist/local/save-layout-worker.d.ts +19 -0
  281. package/dist/local/save-layout-worker.d.ts.map +1 -0
  282. package/dist/local/save-layout-worker.js +28 -0
  283. package/dist/local/save-layout-worker.js.map +1 -0
  284. package/dist/local/save-layout.d.ts +84 -0
  285. package/dist/local/save-layout.d.ts.map +1 -0
  286. package/dist/local/save-layout.js +221 -0
  287. package/dist/local/save-layout.js.map +1 -0
  288. package/dist/local/scope-impact.d.ts +31 -0
  289. package/dist/local/scope-impact.d.ts.map +1 -0
  290. package/dist/local/scope-impact.js +32 -0
  291. package/dist/local/scope-impact.js.map +1 -0
  292. package/dist/local/source-evidence/filesystem-worker.d.ts +2 -0
  293. package/dist/local/source-evidence/filesystem-worker.d.ts.map +1 -0
  294. package/dist/local/source-evidence/filesystem-worker.js +139 -0
  295. package/dist/local/source-evidence/filesystem-worker.js.map +1 -0
  296. package/dist/local/source-evidence/processes.d.ts +20 -0
  297. package/dist/local/source-evidence/processes.d.ts.map +1 -0
  298. package/dist/local/source-evidence/processes.js +133 -0
  299. package/dist/local/source-evidence/processes.js.map +1 -0
  300. package/dist/local/source-evidence/protocol.d.ts +52 -0
  301. package/dist/local/source-evidence/protocol.d.ts.map +1 -0
  302. package/dist/local/source-evidence/protocol.js +72 -0
  303. package/dist/local/source-evidence/protocol.js.map +1 -0
  304. package/dist/local/source-evidence/reader.d.ts +14 -0
  305. package/dist/local/source-evidence/reader.d.ts.map +1 -0
  306. package/dist/local/source-evidence/reader.js +308 -0
  307. package/dist/local/source-evidence/reader.js.map +1 -0
  308. package/dist/local/source-evidence/schema.d.ts +2504 -0
  309. package/dist/local/source-evidence/schema.d.ts.map +1 -0
  310. package/dist/local/source-evidence/schema.js +99 -0
  311. package/dist/local/source-evidence/schema.js.map +1 -0
  312. package/dist/local/source-policy/loader.d.ts +29 -0
  313. package/dist/local/source-policy/loader.d.ts.map +1 -0
  314. package/dist/local/source-policy/loader.js +209 -0
  315. package/dist/local/source-policy/loader.js.map +1 -0
  316. package/dist/local/source-policy/process.d.ts +7 -0
  317. package/dist/local/source-policy/process.d.ts.map +1 -0
  318. package/dist/local/source-policy/process.js +53 -0
  319. package/dist/local/source-policy/process.js.map +1 -0
  320. package/dist/local/source-policy/protocol.d.ts +27 -0
  321. package/dist/local/source-policy/protocol.d.ts.map +1 -0
  322. package/dist/local/source-policy/protocol.js +48 -0
  323. package/dist/local/source-policy/protocol.js.map +1 -0
  324. package/dist/local/source-policy/worker.d.ts +2 -0
  325. package/dist/local/source-policy/worker.d.ts.map +1 -0
  326. package/dist/local/source-policy/worker.js +100 -0
  327. package/dist/local/source-policy/worker.js.map +1 -0
  328. package/dist/local/state-directory.d.ts +17 -0
  329. package/dist/local/state-directory.d.ts.map +1 -0
  330. package/dist/local/state-directory.js +68 -0
  331. package/dist/local/state-directory.js.map +1 -0
  332. package/dist/local/store-database.d.ts +13 -0
  333. package/dist/local/store-database.d.ts.map +1 -0
  334. package/dist/local/store-database.js +187 -0
  335. package/dist/local/store-database.js.map +1 -0
  336. package/dist/local/store.d.ts +181 -0
  337. package/dist/local/store.d.ts.map +1 -0
  338. package/dist/local/store.js +585 -0
  339. package/dist/local/store.js.map +1 -0
  340. package/dist/local/sync.d.ts +47 -0
  341. package/dist/local/sync.d.ts.map +1 -0
  342. package/dist/local/sync.js +518 -0
  343. package/dist/local/sync.js.map +1 -0
  344. package/dist/local/task-context-inspection.d.ts +23 -0
  345. package/dist/local/task-context-inspection.d.ts.map +1 -0
  346. package/dist/local/task-context-inspection.js +165 -0
  347. package/dist/local/task-context-inspection.js.map +1 -0
  348. package/dist/local/task-context-observations.d.ts +9553 -0
  349. package/dist/local/task-context-observations.d.ts.map +1 -0
  350. package/dist/local/task-context-observations.js +232 -0
  351. package/dist/local/task-context-observations.js.map +1 -0
  352. package/dist/local/task-context-provider.d.ts +18 -0
  353. package/dist/local/task-context-provider.d.ts.map +1 -0
  354. package/dist/local/task-context-provider.js +231 -0
  355. package/dist/local/task-context-provider.js.map +1 -0
  356. package/dist/local/task-context-schema.d.ts +847 -0
  357. package/dist/local/task-context-schema.d.ts.map +1 -0
  358. package/dist/local/task-context-schema.js +305 -0
  359. package/dist/local/task-context-schema.js.map +1 -0
  360. package/dist/local/task-context-source.d.ts +16 -0
  361. package/dist/local/task-context-source.d.ts.map +1 -0
  362. package/dist/local/task-context-source.js +45 -0
  363. package/dist/local/task-context-source.js.map +1 -0
  364. package/dist/local/task-context.d.ts +14 -0
  365. package/dist/local/task-context.d.ts.map +1 -0
  366. package/dist/local/task-context.js +570 -0
  367. package/dist/local/task-context.js.map +1 -0
  368. package/dist/local/test-commands.d.ts +71 -0
  369. package/dist/local/test-commands.d.ts.map +1 -0
  370. package/dist/local/test-commands.js +292 -0
  371. package/dist/local/test-commands.js.map +1 -0
  372. package/dist/local/tree-save.d.ts +117 -0
  373. package/dist/local/tree-save.d.ts.map +1 -0
  374. package/dist/local/tree-save.js +615 -0
  375. package/dist/local/tree-save.js.map +1 -0
  376. package/dist/local/variants.d.ts +125 -0
  377. package/dist/local/variants.d.ts.map +1 -0
  378. package/dist/local/variants.js +267 -0
  379. package/dist/local/variants.js.map +1 -0
  380. package/dist/local/workspace-admission.d.ts +61 -0
  381. package/dist/local/workspace-admission.d.ts.map +1 -0
  382. package/dist/local/workspace-admission.js +112 -0
  383. package/dist/local/workspace-admission.js.map +1 -0
  384. package/dist/local/workspace-authority-guard.d.ts +18 -0
  385. package/dist/local/workspace-authority-guard.d.ts.map +1 -0
  386. package/dist/local/workspace-authority-guard.js +69 -0
  387. package/dist/local/workspace-authority-guard.js.map +1 -0
  388. package/dist/local/workspace-authority.d.ts +33 -0
  389. package/dist/local/workspace-authority.d.ts.map +1 -0
  390. package/dist/local/workspace-authority.js +33 -0
  391. package/dist/local/workspace-authority.js.map +1 -0
  392. package/dist/local/workspace-branch-runtime.d.ts +61 -0
  393. package/dist/local/workspace-branch-runtime.d.ts.map +1 -0
  394. package/dist/local/workspace-branch-runtime.js +216 -0
  395. package/dist/local/workspace-branch-runtime.js.map +1 -0
  396. package/dist/local/workspace-built-content.d.ts +137 -0
  397. package/dist/local/workspace-built-content.d.ts.map +1 -0
  398. package/dist/local/workspace-built-content.js +393 -0
  399. package/dist/local/workspace-built-content.js.map +1 -0
  400. package/dist/local/workspace-claim-status-read.d.ts +53 -0
  401. package/dist/local/workspace-claim-status-read.d.ts.map +1 -0
  402. package/dist/local/workspace-claim-status-read.js +118 -0
  403. package/dist/local/workspace-claim-status-read.js.map +1 -0
  404. package/dist/local/workspace-claim-status.d.ts +172 -0
  405. package/dist/local/workspace-claim-status.d.ts.map +1 -0
  406. package/dist/local/workspace-claim-status.js +721 -0
  407. package/dist/local/workspace-claim-status.js.map +1 -0
  408. package/dist/local/workspace-claim-views.d.ts +45 -0
  409. package/dist/local/workspace-claim-views.d.ts.map +1 -0
  410. package/dist/local/workspace-claim-views.js +45 -0
  411. package/dist/local/workspace-claim-views.js.map +1 -0
  412. package/dist/local/workspace-cli.d.ts +46 -0
  413. package/dist/local/workspace-cli.d.ts.map +1 -0
  414. package/dist/local/workspace-cli.js +1524 -0
  415. package/dist/local/workspace-cli.js.map +1 -0
  416. package/dist/local/workspace-commit-resolver.d.ts +19 -0
  417. package/dist/local/workspace-commit-resolver.d.ts.map +1 -0
  418. package/dist/local/workspace-commit-resolver.js +47 -0
  419. package/dist/local/workspace-commit-resolver.js.map +1 -0
  420. package/dist/local/workspace-decision-store.d.ts +184 -0
  421. package/dist/local/workspace-decision-store.d.ts.map +1 -0
  422. package/dist/local/workspace-decision-store.js +510 -0
  423. package/dist/local/workspace-decision-store.js.map +1 -0
  424. package/dist/local/workspace-environment-runtime.d.ts +107 -0
  425. package/dist/local/workspace-environment-runtime.d.ts.map +1 -0
  426. package/dist/local/workspace-environment-runtime.js +135 -0
  427. package/dist/local/workspace-environment-runtime.js.map +1 -0
  428. package/dist/local/workspace-evidence-drop.d.ts +21 -0
  429. package/dist/local/workspace-evidence-drop.d.ts.map +1 -0
  430. package/dist/local/workspace-evidence-drop.js +58 -0
  431. package/dist/local/workspace-evidence-drop.js.map +1 -0
  432. package/dist/local/workspace-evidence-sign-tool.d.ts +20 -0
  433. package/dist/local/workspace-evidence-sign-tool.d.ts.map +1 -0
  434. package/dist/local/workspace-evidence-sign-tool.js +85 -0
  435. package/dist/local/workspace-evidence-sign-tool.js.map +1 -0
  436. package/dist/local/workspace-evidence-status.d.ts +89 -0
  437. package/dist/local/workspace-evidence-status.d.ts.map +1 -0
  438. package/dist/local/workspace-evidence-status.js +141 -0
  439. package/dist/local/workspace-evidence-status.js.map +1 -0
  440. package/dist/local/workspace-evidence.d.ts +145 -0
  441. package/dist/local/workspace-evidence.d.ts.map +1 -0
  442. package/dist/local/workspace-evidence.js +347 -0
  443. package/dist/local/workspace-evidence.js.map +1 -0
  444. package/dist/local/workspace-graph-store.d.ts +32 -0
  445. package/dist/local/workspace-graph-store.d.ts.map +1 -0
  446. package/dist/local/workspace-graph-store.js +249 -0
  447. package/dist/local/workspace-graph-store.js.map +1 -0
  448. package/dist/local/workspace-handoff.d.ts +32 -0
  449. package/dist/local/workspace-handoff.d.ts.map +1 -0
  450. package/dist/local/workspace-handoff.js +144 -0
  451. package/dist/local/workspace-handoff.js.map +1 -0
  452. package/dist/local/workspace-history-journal.d.ts +70 -0
  453. package/dist/local/workspace-history-journal.d.ts.map +1 -0
  454. package/dist/local/workspace-history-journal.js +131 -0
  455. package/dist/local/workspace-history-journal.js.map +1 -0
  456. package/dist/local/workspace-history-store.d.ts +98 -0
  457. package/dist/local/workspace-history-store.d.ts.map +1 -0
  458. package/dist/local/workspace-history-store.js +632 -0
  459. package/dist/local/workspace-history-store.js.map +1 -0
  460. package/dist/local/workspace-history-types.d.ts +307 -0
  461. package/dist/local/workspace-history-types.d.ts.map +1 -0
  462. package/dist/local/workspace-history-types.js +2 -0
  463. package/dist/local/workspace-history-types.js.map +1 -0
  464. package/dist/local/workspace-integration-runtime.d.ts +48 -0
  465. package/dist/local/workspace-integration-runtime.d.ts.map +1 -0
  466. package/dist/local/workspace-integration-runtime.js +419 -0
  467. package/dist/local/workspace-integration-runtime.js.map +1 -0
  468. package/dist/local/workspace-lock.d.ts +7 -0
  469. package/dist/local/workspace-lock.d.ts.map +1 -0
  470. package/dist/local/workspace-lock.js +211 -0
  471. package/dist/local/workspace-lock.js.map +1 -0
  472. package/dist/local/workspace-merge.d.ts +77 -0
  473. package/dist/local/workspace-merge.d.ts.map +1 -0
  474. package/dist/local/workspace-merge.js +703 -0
  475. package/dist/local/workspace-merge.js.map +1 -0
  476. package/dist/local/workspace-mixed-history.d.ts +33 -0
  477. package/dist/local/workspace-mixed-history.d.ts.map +1 -0
  478. package/dist/local/workspace-mixed-history.js +107 -0
  479. package/dist/local/workspace-mixed-history.js.map +1 -0
  480. package/dist/local/workspace-overlap-allocation.d.ts +33 -0
  481. package/dist/local/workspace-overlap-allocation.d.ts.map +1 -0
  482. package/dist/local/workspace-overlap-allocation.js +69 -0
  483. package/dist/local/workspace-overlap-allocation.js.map +1 -0
  484. package/dist/local/workspace-overlap-impact.d.ts +46 -0
  485. package/dist/local/workspace-overlap-impact.d.ts.map +1 -0
  486. package/dist/local/workspace-overlap-impact.js +162 -0
  487. package/dist/local/workspace-overlap-impact.js.map +1 -0
  488. package/dist/local/workspace-overlap.d.ts +109 -0
  489. package/dist/local/workspace-overlap.d.ts.map +1 -0
  490. package/dist/local/workspace-overlap.js +327 -0
  491. package/dist/local/workspace-overlap.js.map +1 -0
  492. package/dist/local/workspace-paths.d.ts +4 -0
  493. package/dist/local/workspace-paths.d.ts.map +1 -0
  494. package/dist/local/workspace-paths.js +8 -0
  495. package/dist/local/workspace-paths.js.map +1 -0
  496. package/dist/local/workspace-pick-runtime.d.ts +70 -0
  497. package/dist/local/workspace-pick-runtime.d.ts.map +1 -0
  498. package/dist/local/workspace-pick-runtime.js +177 -0
  499. package/dist/local/workspace-pick-runtime.js.map +1 -0
  500. package/dist/local/workspace-pick-store.d.ts +33 -0
  501. package/dist/local/workspace-pick-store.d.ts.map +1 -0
  502. package/dist/local/workspace-pick-store.js +43 -0
  503. package/dist/local/workspace-pick-store.js.map +1 -0
  504. package/dist/local/workspace-pick.d.ts +73 -0
  505. package/dist/local/workspace-pick.d.ts.map +1 -0
  506. package/dist/local/workspace-pick.js +253 -0
  507. package/dist/local/workspace-pick.js.map +1 -0
  508. package/dist/local/workspace-portable-authoring.d.ts +43 -0
  509. package/dist/local/workspace-portable-authoring.d.ts.map +1 -0
  510. package/dist/local/workspace-portable-authoring.js +128 -0
  511. package/dist/local/workspace-portable-authoring.js.map +1 -0
  512. package/dist/local/workspace-prune.d.ts +63 -0
  513. package/dist/local/workspace-prune.d.ts.map +1 -0
  514. package/dist/local/workspace-prune.js +267 -0
  515. package/dist/local/workspace-prune.js.map +1 -0
  516. package/dist/local/workspace-remote-fetch.d.ts +82 -0
  517. package/dist/local/workspace-remote-fetch.d.ts.map +1 -0
  518. package/dist/local/workspace-remote-fetch.js +409 -0
  519. package/dist/local/workspace-remote-fetch.js.map +1 -0
  520. package/dist/local/workspace-remote-provider.d.ts +97 -0
  521. package/dist/local/workspace-remote-provider.d.ts.map +1 -0
  522. package/dist/local/workspace-remote-provider.js +400 -0
  523. package/dist/local/workspace-remote-provider.js.map +1 -0
  524. package/dist/local/workspace-remote-pull-request-journal.d.ts +49 -0
  525. package/dist/local/workspace-remote-pull-request-journal.d.ts.map +1 -0
  526. package/dist/local/workspace-remote-pull-request-journal.js +63 -0
  527. package/dist/local/workspace-remote-pull-request-journal.js.map +1 -0
  528. package/dist/local/workspace-remote-pull-request.d.ts +36 -0
  529. package/dist/local/workspace-remote-pull-request.d.ts.map +1 -0
  530. package/dist/local/workspace-remote-pull-request.js +158 -0
  531. package/dist/local/workspace-remote-pull-request.js.map +1 -0
  532. package/dist/local/workspace-remote-push.d.ts +88 -0
  533. package/dist/local/workspace-remote-push.d.ts.map +1 -0
  534. package/dist/local/workspace-remote-push.js +297 -0
  535. package/dist/local/workspace-remote-push.js.map +1 -0
  536. package/dist/local/workspace-remote-topic-journal.d.ts +56 -0
  537. package/dist/local/workspace-remote-topic-journal.d.ts.map +1 -0
  538. package/dist/local/workspace-remote-topic-journal.js +121 -0
  539. package/dist/local/workspace-remote-topic-journal.js.map +1 -0
  540. package/dist/local/workspace-remote-topic.d.ts +45 -0
  541. package/dist/local/workspace-remote-topic.d.ts.map +1 -0
  542. package/dist/local/workspace-remote-topic.js +204 -0
  543. package/dist/local/workspace-remote-topic.js.map +1 -0
  544. package/dist/local/workspace-remote-transfer.d.ts +76 -0
  545. package/dist/local/workspace-remote-transfer.d.ts.map +1 -0
  546. package/dist/local/workspace-remote-transfer.js +270 -0
  547. package/dist/local/workspace-remote-transfer.js.map +1 -0
  548. package/dist/local/workspace-resolution.d.ts +145 -0
  549. package/dist/local/workspace-resolution.d.ts.map +1 -0
  550. package/dist/local/workspace-resolution.js +479 -0
  551. package/dist/local/workspace-resolution.js.map +1 -0
  552. package/dist/local/workspace-resolver-provider.d.ts +72 -0
  553. package/dist/local/workspace-resolver-provider.d.ts.map +1 -0
  554. package/dist/local/workspace-resolver-provider.js +312 -0
  555. package/dist/local/workspace-resolver-provider.js.map +1 -0
  556. package/dist/local/workspace-runtime-handoff.d.ts +52 -0
  557. package/dist/local/workspace-runtime-handoff.d.ts.map +1 -0
  558. package/dist/local/workspace-runtime-handoff.js +237 -0
  559. package/dist/local/workspace-runtime-handoff.js.map +1 -0
  560. package/dist/local/workspace-runtime-lease.d.ts +26 -0
  561. package/dist/local/workspace-runtime-lease.d.ts.map +1 -0
  562. package/dist/local/workspace-runtime-lease.js +123 -0
  563. package/dist/local/workspace-runtime-lease.js.map +1 -0
  564. package/dist/local/workspace-runtime.d.ts +690 -0
  565. package/dist/local/workspace-runtime.d.ts.map +1 -0
  566. package/dist/local/workspace-runtime.js +2124 -0
  567. package/dist/local/workspace-runtime.js.map +1 -0
  568. package/dist/local/workspace-scope.d.ts +70 -0
  569. package/dist/local/workspace-scope.d.ts.map +1 -0
  570. package/dist/local/workspace-scope.js +206 -0
  571. package/dist/local/workspace-scope.js.map +1 -0
  572. package/dist/local/workspace-sources.d.ts +159 -0
  573. package/dist/local/workspace-sources.d.ts.map +1 -0
  574. package/dist/local/workspace-sources.js +570 -0
  575. package/dist/local/workspace-sources.js.map +1 -0
  576. package/dist/local/workspace-store-database.d.ts +5 -0
  577. package/dist/local/workspace-store-database.d.ts.map +1 -0
  578. package/dist/local/workspace-store-database.js +726 -0
  579. package/dist/local/workspace-store-database.js.map +1 -0
  580. package/dist/local/workspace-store.d.ts +261 -0
  581. package/dist/local/workspace-store.d.ts.map +1 -0
  582. package/dist/local/workspace-store.js +831 -0
  583. package/dist/local/workspace-store.js.map +1 -0
  584. package/dist/local/workspace-topology-runtime.d.ts +27 -0
  585. package/dist/local/workspace-topology-runtime.d.ts.map +1 -0
  586. package/dist/local/workspace-topology-runtime.js +396 -0
  587. package/dist/local/workspace-topology-runtime.js.map +1 -0
  588. package/dist/local/workspace-topology.d.ts +140 -0
  589. package/dist/local/workspace-topology.d.ts.map +1 -0
  590. package/dist/local/workspace-topology.js +359 -0
  591. package/dist/local/workspace-topology.js.map +1 -0
  592. package/dist/local/workspace-upstream-inspection.d.ts +60 -0
  593. package/dist/local/workspace-upstream-inspection.d.ts.map +1 -0
  594. package/dist/local/workspace-upstream-inspection.js +189 -0
  595. package/dist/local/workspace-upstream-inspection.js.map +1 -0
  596. package/dist/local/workspace-upstream-runtime.d.ts +91 -0
  597. package/dist/local/workspace-upstream-runtime.d.ts.map +1 -0
  598. package/dist/local/workspace-upstream-runtime.js +270 -0
  599. package/dist/local/workspace-upstream-runtime.js.map +1 -0
  600. package/dist/local/workspace-upstream-store.d.ts +51 -0
  601. package/dist/local/workspace-upstream-store.d.ts.map +1 -0
  602. package/dist/local/workspace-upstream-store.js +475 -0
  603. package/dist/local/workspace-upstream-store.js.map +1 -0
  604. package/dist/local/workspace-viewer-server.d.ts +136 -0
  605. package/dist/local/workspace-viewer-server.d.ts.map +1 -0
  606. package/dist/local/workspace-viewer-server.js +1097 -0
  607. package/dist/local/workspace-viewer-server.js.map +1 -0
  608. package/dist/local/workspace-viewer-snapshot.d.ts +49 -0
  609. package/dist/local/workspace-viewer-snapshot.d.ts.map +1 -0
  610. package/dist/local/workspace-viewer-snapshot.js +91 -0
  611. package/dist/local/workspace-viewer-snapshot.js.map +1 -0
  612. package/dist/local/worktree-projection.d.ts +76 -0
  613. package/dist/local/worktree-projection.d.ts.map +1 -0
  614. package/dist/local/worktree-projection.js +470 -0
  615. package/dist/local/worktree-projection.js.map +1 -0
  616. package/dist/mcp/client-identity.d.ts +8 -0
  617. package/dist/mcp/client-identity.d.ts.map +1 -0
  618. package/dist/mcp/client-identity.js +33 -0
  619. package/dist/mcp/client-identity.js.map +1 -0
  620. package/dist/mcp/graph-to-code.d.ts +53 -0
  621. package/dist/mcp/graph-to-code.d.ts.map +1 -0
  622. package/dist/mcp/graph-to-code.js +1624 -0
  623. package/dist/mcp/graph-to-code.js.map +1 -0
  624. package/dist/mcp/index.d.ts +3 -0
  625. package/dist/mcp/index.d.ts.map +1 -0
  626. package/dist/mcp/index.js +3 -0
  627. package/dist/mcp/index.js.map +1 -0
  628. package/dist/mcp/stdio/graph-to-code.d.ts +3 -0
  629. package/dist/mcp/stdio/graph-to-code.d.ts.map +1 -0
  630. package/dist/mcp/stdio/graph-to-code.js +55 -0
  631. package/dist/mcp/stdio/graph-to-code.js.map +1 -0
  632. package/dist/mcp/stdio/worktree.d.ts +3 -0
  633. package/dist/mcp/stdio/worktree.d.ts.map +1 -0
  634. package/dist/mcp/stdio/worktree.js +67 -0
  635. package/dist/mcp/stdio/worktree.js.map +1 -0
  636. package/dist/mcp/worktree-claim-status.d.ts +162 -0
  637. package/dist/mcp/worktree-claim-status.d.ts.map +1 -0
  638. package/dist/mcp/worktree-claim-status.js +113 -0
  639. package/dist/mcp/worktree-claim-status.js.map +1 -0
  640. package/dist/mcp/worktree-dispatch.d.ts +13 -0
  641. package/dist/mcp/worktree-dispatch.d.ts.map +1 -0
  642. package/dist/mcp/worktree-dispatch.js +52 -0
  643. package/dist/mcp/worktree-dispatch.js.map +1 -0
  644. package/dist/mcp/worktree-errors.d.ts +15 -0
  645. package/dist/mcp/worktree-errors.d.ts.map +1 -0
  646. package/dist/mcp/worktree-errors.js +17 -0
  647. package/dist/mcp/worktree-errors.js.map +1 -0
  648. package/dist/mcp/worktree-health.d.ts +12 -0
  649. package/dist/mcp/worktree-health.d.ts.map +1 -0
  650. package/dist/mcp/worktree-health.js +32 -0
  651. package/dist/mcp/worktree-health.js.map +1 -0
  652. package/dist/mcp/worktree-results.d.ts +15 -0
  653. package/dist/mcp/worktree-results.d.ts.map +1 -0
  654. package/dist/mcp/worktree-results.js +12 -0
  655. package/dist/mcp/worktree-results.js.map +1 -0
  656. package/dist/mcp/worktree-task-context.d.ts +57 -0
  657. package/dist/mcp/worktree-task-context.d.ts.map +1 -0
  658. package/dist/mcp/worktree-task-context.js +45 -0
  659. package/dist/mcp/worktree-task-context.js.map +1 -0
  660. package/dist/mcp/worktree-tools.d.ts +2648 -0
  661. package/dist/mcp/worktree-tools.d.ts.map +1 -0
  662. package/dist/mcp/worktree-tools.js +192 -0
  663. package/dist/mcp/worktree-tools.js.map +1 -0
  664. package/dist/mcp/worktree.d.ts +33 -0
  665. package/dist/mcp/worktree.d.ts.map +1 -0
  666. package/dist/mcp/worktree.js +551 -0
  667. package/dist/mcp/worktree.js.map +1 -0
  668. package/dist/own-package.d.ts +13 -0
  669. package/dist/own-package.d.ts.map +1 -0
  670. package/dist/own-package.js +32 -0
  671. package/dist/own-package.js.map +1 -0
  672. package/dist/packages-browse.d.ts +107 -0
  673. package/dist/packages-browse.d.ts.map +1 -0
  674. package/dist/packages-browse.js +646 -0
  675. package/dist/packages-browse.js.map +1 -0
  676. package/dist/packages-cli.d.ts +8 -0
  677. package/dist/packages-cli.d.ts.map +1 -0
  678. package/dist/packages-cli.js +184 -0
  679. package/dist/packages-cli.js.map +1 -0
  680. package/dist/packages-uses.d.ts +46 -0
  681. package/dist/packages-uses.d.ts.map +1 -0
  682. package/dist/packages-uses.js +737 -0
  683. package/dist/packages-uses.js.map +1 -0
  684. package/dist/portable.d.ts +7 -0
  685. package/dist/portable.d.ts.map +1 -0
  686. package/dist/portable.js +14 -0
  687. package/dist/portable.js.map +1 -0
  688. package/dist/quiet-warnings.d.ts +3 -0
  689. package/dist/quiet-warnings.d.ts.map +1 -0
  690. package/dist/quiet-warnings.js +21 -0
  691. package/dist/quiet-warnings.js.map +1 -0
  692. package/dist/view-seam.d.ts +62 -0
  693. package/dist/view-seam.d.ts.map +1 -0
  694. package/dist/view-seam.js +70 -0
  695. package/dist/view-seam.js.map +1 -0
  696. package/generated/graph-packages/index.json +5 -0
  697. package/graph-packages.lock.json +4 -0
  698. package/package.json +81 -0
  699. package/viewer/assets/index-BZKGDARF.css +1 -0
  700. package/viewer/assets/index-DWu0CbZZ.js +272 -0
  701. package/viewer/index.html +13 -0
@@ -0,0 +1,229 @@
1
+ import { type TaskModel } from './app-tasks-read.js';
2
+ /**
3
+ * The local half of the shared pages' domain contracts (docs/specs/app-ui-contracts.md): sdlc
4
+ * viewer's tasks, issues and Releases reads under api/app/, answered in the shapes the hosted
5
+ * session routes answer (the shell's own reads are app-shell-readers.ts's). Every read
6
+ * goes through a reader that already exists, and nothing here writes or moves a store:
7
+ *
8
+ * - tasks: the Tasks board rows (core.js snapshotHeadless, run in its own process by the caller)
9
+ * and one task's page (task-page-read.js, task_page.py);
10
+ * - issues: the local issue command (`issue list --all`, `issue show`);
11
+ * - releases: release_history.py, the Releases view's read of every Release and the candidate.
12
+ *
13
+ * A store a writer holds locked, or one that kept changing during the read, answers 503 with
14
+ * retry: the page may read again in a moment. Any other failure is said on the viewer's terminal and
15
+ * answered 500 with no detail, as the viewer's other routes do. Answers are kept briefly, and one
16
+ * read of each kind runs at a time; a failed read is not kept.
17
+ */
18
+ /** One request under api/app/: its path segments after it, decoded and checked, and its query. */
19
+ export type AppContractRoute = {
20
+ segments: string[];
21
+ query: URLSearchParams;
22
+ };
23
+ /** The answer: a status and the JSON body (the contract's data, or {error, retry?}). */
24
+ export type AppContractAnswer = {
25
+ status: number;
26
+ body: unknown;
27
+ };
28
+ /** One engine command: its stdout, even when it exits non-zero with a JSON answer, or a rejection. */
29
+ export type EngineRun = (script: string, args: string[]) => Promise<string>;
30
+ /** task-page-read.js's answer for one task. */
31
+ export type TaskPageAnswer = {
32
+ value?: Record<string, unknown>;
33
+ unknown?: string;
34
+ error?: string;
35
+ absent?: boolean;
36
+ };
37
+ export type AppContractReaderInput = {
38
+ /** The engine root whose commands run (the view code's own; checkout.ts engineLayout). */
39
+ engine: string;
40
+ /** The repository the engine reads. */
41
+ repo: string;
42
+ /**
43
+ * The Tasks board read (app-tasks-read.ts TaskBoardRead, or an older child's rows alone); it
44
+ * must not block this process.
45
+ */
46
+ boardRows: () => Promise<unknown>;
47
+ /** One task's page (task-page-read.js readTaskPage without links). */
48
+ taskPage: (id: string) => Promise<TaskPageAnswer>;
49
+ /** The viewer offers Done (POST api/task-done), so rows and holds the user's word closes say so. */
50
+ done?: boolean;
51
+ /** model.js's task search and row parts; absent, the model.js beside the engine's view code. */
52
+ model?: TaskModel;
53
+ run?: EngineRun;
54
+ now?: () => number;
55
+ };
56
+ /** The reader, and what drops its kept Tasks reads after a write (a Done) changed them. */
57
+ export type AppContractReader = ((route: AppContractRoute) => Promise<AppContractAnswer>) & {
58
+ invalidate: () => void;
59
+ };
60
+ /** One workspace, one list and one workflow whose statuses are the board's groups, then Cancelled. */
61
+ export declare function localTaskConfiguration(model: Pick<TaskModel, 'TASK_GROUPS'>): {
62
+ state: "active";
63
+ organization_id: string;
64
+ authorization_generation: null;
65
+ workspaces: {
66
+ id: string;
67
+ name: string;
68
+ is_default: boolean;
69
+ revision: number;
70
+ hierarchy_revision: number;
71
+ permission: "read";
72
+ lists: {
73
+ id: string;
74
+ name: string;
75
+ revision: number;
76
+ order_revision: number;
77
+ workflow_id: string;
78
+ default_status_id: string;
79
+ permission: "read";
80
+ offers: {
81
+ search: boolean;
82
+ archived: boolean;
83
+ assigned_to_me: boolean;
84
+ activity: boolean;
85
+ refresh_ms: number;
86
+ };
87
+ }[];
88
+ workflows: {
89
+ id: string;
90
+ name: string;
91
+ statuses: {
92
+ position: number;
93
+ revision: number;
94
+ id: string;
95
+ name: string;
96
+ category: "backlog" | "planned" | "in_progress" | "completed" | "canceled";
97
+ }[];
98
+ }[];
99
+ priorities: never[];
100
+ }[];
101
+ };
102
+ /** task_page.py's answer as the task's detail: its acceptance criteria are its checklist. */
103
+ export declare function localTaskDetail(page: Record<string, unknown>): {
104
+ permission: "read";
105
+ task: {
106
+ id: string;
107
+ list_id: string;
108
+ workflow_id: string;
109
+ status_id: string;
110
+ priority_id: null;
111
+ title: string;
112
+ description: string | null;
113
+ primary_user_id: string | null;
114
+ parent_task_id: null;
115
+ revision: number;
116
+ created_at: string;
117
+ created_by: string;
118
+ archived_at: null;
119
+ };
120
+ contributors: never[];
121
+ checklist: {
122
+ id: string;
123
+ label: string;
124
+ position: number;
125
+ is_complete: boolean;
126
+ revision: number;
127
+ }[];
128
+ holds: never[];
129
+ claim: null;
130
+ acceptance: string[];
131
+ estimate: {
132
+ low: number;
133
+ high: number;
134
+ } | null;
135
+ release: string | null;
136
+ thread: string | null;
137
+ };
138
+ /** One local issue (a list row, or `issue show`'s whole issue) in the Maintain issue's shape. */
139
+ export declare function localIssue(row: Record<string, unknown>): {
140
+ seen: string | null;
141
+ placement: string | null;
142
+ occurrences?: number | undefined;
143
+ id: string;
144
+ project_id: string;
145
+ title: string;
146
+ description: string;
147
+ external_reference: string | null;
148
+ status: string;
149
+ resolution_reason: string | null;
150
+ priority: null;
151
+ assignee_id: null;
152
+ assignee_username: string | null;
153
+ assignee_can_act: null;
154
+ created_by: string | null;
155
+ created_by_username: string | null;
156
+ revision: number;
157
+ created_at: string;
158
+ updated_at: string;
159
+ resolved_at: string | null;
160
+ closed_at: null;
161
+ };
162
+ /** A local issue's history as the Maintain issue's events. */
163
+ export declare function localIssueEvents(history: unknown[]): {
164
+ id: number;
165
+ kind: string;
166
+ fields: never[];
167
+ from_status: null;
168
+ to_status: string | null;
169
+ resolution_reason: string | null;
170
+ priority: null;
171
+ assignee_id: null;
172
+ assignee_username: null;
173
+ actor_id: null;
174
+ actor_username: string | null;
175
+ created_at: string;
176
+ note: string;
177
+ }[];
178
+ /**
179
+ * One of release_history.py's Releases in the hosted Release's shape. Its version is its label (the
180
+ * app version, or its batch when it has no app section, so two Releases never share one); the
181
+ * previous Release is the next older one listed, given by the caller.
182
+ */
183
+ export declare function localRelease(entry: Record<string, unknown>, previous: Record<string, unknown> | undefined): {
184
+ landings?: number | undefined;
185
+ id: string;
186
+ version: string;
187
+ computed_bump: string | null;
188
+ bump: string | null;
189
+ declared_reason: string | null;
190
+ declared_by_name: string | null;
191
+ source_judged: boolean;
192
+ marks_approximate: boolean;
193
+ written_by_name: null;
194
+ written_at: string;
195
+ previous_release_id: string | null;
196
+ breaking: boolean;
197
+ commit: string | null;
198
+ };
199
+ /**
200
+ * release_history.py's candidate as the hosted candidate. Its previous Release is the newest one
201
+ * listed, given by the caller and named by its label as the list names it (the candidate's own
202
+ * `previous` is that Release's app version, which a Release with no app section shares).
203
+ */
204
+ export declare function localCandidate(entry: Record<string, unknown>, newest: Record<string, unknown> | undefined): {
205
+ head_commit_id: string;
206
+ previous_release: {
207
+ id: string;
208
+ version: string;
209
+ } | null;
210
+ next_version: string;
211
+ version: string;
212
+ commits_since: number | null;
213
+ classification: {
214
+ bump: "patch" | "minor" | "major";
215
+ marks_approximate: boolean;
216
+ } | null;
217
+ changes: {
218
+ node_id: string;
219
+ node_type: string;
220
+ label: string;
221
+ change: string;
222
+ bump: null;
223
+ why: string | null;
224
+ modeling_only: boolean;
225
+ }[];
226
+ };
227
+ /** The read behind sdlc viewer's api/app/ routes. */
228
+ export declare function appContractReader(input: AppContractReaderInput): AppContractReader;
229
+ //# sourceMappingURL=app-contract-readers.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"app-contract-readers.d.ts","sourceRoot":"","sources":["../../src/local/app-contract-readers.ts"],"names":[],"mappings":"AAKA,OAAO,EASL,KAAK,SAAS,EACf,MAAM,qBAAqB,CAAC;AAE7B;;;;;;;;;;;;;;;GAeG;AAEH,kGAAkG;AAClG,MAAM,MAAM,gBAAgB,GAAG;IAAE,QAAQ,EAAE,MAAM,EAAE,CAAC;IAAC,KAAK,EAAE,eAAe,CAAA;CAAE,CAAC;AAE9E,wFAAwF;AACxF,MAAM,MAAM,iBAAiB,GAAG;IAAE,MAAM,EAAE,MAAM,CAAC;IAAC,IAAI,EAAE,OAAO,CAAA;CAAE,CAAC;AAElE,sGAAsG;AACtG,MAAM,MAAM,SAAS,GAAG,CAAC,MAAM,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,KAAK,OAAO,CAAC,MAAM,CAAC,CAAC;AAE5E,+CAA+C;AAC/C,MAAM,MAAM,cAAc,GAAG;IAC3B,KAAK,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IAChC,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,MAAM,CAAC,EAAE,OAAO,CAAC;CAClB,CAAC;AAEF,MAAM,MAAM,sBAAsB,GAAG;IACnC,0FAA0F;IAC1F,MAAM,EAAE,MAAM,CAAC;IACf,uCAAuC;IACvC,IAAI,EAAE,MAAM,CAAC;IACb;;;OAGG;IACH,SAAS,EAAE,MAAM,OAAO,CAAC,OAAO,CAAC,CAAC;IAClC,sEAAsE;IACtE,QAAQ,EAAE,CAAC,EAAE,EAAE,MAAM,KAAK,OAAO,CAAC,cAAc,CAAC,CAAC;IAClD,oGAAoG;IACpG,IAAI,CAAC,EAAE,OAAO,CAAC;IACf,gGAAgG;IAChG,KAAK,CAAC,EAAE,SAAS,CAAC;IAClB,GAAG,CAAC,EAAE,SAAS,CAAC;IAChB,GAAG,CAAC,EAAE,MAAM,MAAM,CAAC;CACpB,CAAC;AAEF,2FAA2F;AAC3F,MAAM,MAAM,iBAAiB,GAAG,CAAC,CAAC,KAAK,EAAE,gBAAgB,KAAK,OAAO,CAAC,iBAAiB,CAAC,CAAC,GAAG;IAAE,UAAU,EAAE,MAAM,IAAI,CAAA;CAAE,CAAC;AAiEvH,sGAAsG;AACtG,wBAAgB,sBAAsB,CAAC,KAAK,EAAE,IAAI,CAAC,SAAS,EAAE,aAAa,CAAC;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EA8B3E;AAiBD,6FAA6F;AAC7F,wBAAgB,eAAe,CAAC,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EA2D5D;AAID,iGAAiG;AACjG,wBAAgB,UAAU,CAAC,GAAG,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC;;;;;;;;;;;;;;;;;;;;;;EAmCtD;AAED,8DAA8D;AAC9D,wBAAgB,gBAAgB,CAAC,OAAO,EAAE,OAAO,EAAE;;;;;;;;;;;;;;IAsBlD;AAmBD;;;;GAIG;AACH,wBAAgB,YAAY,CAAC,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAAE,QAAQ,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,SAAS;;;;;;;;;;;;;;;EAmBzG;AAED;;;;GAIG;AACH,wBAAgB,cAAc,CAAC,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAAE,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,SAAS;;;;;;;;;;cAWlF,OAAO,GAAG,OAAO,GAAG,OAAO;;;;;;;;;;;;EAIlD;AAID,qDAAqD;AACrD,wBAAgB,iBAAiB,CAAC,KAAK,EAAE,sBAAsB,GAAG,iBAAiB,CAuJlF"}
@@ -0,0 +1,450 @@
1
+ import { execFile } from 'node:child_process';
2
+ import { createRequire } from 'node:module';
3
+ import path from 'node:path';
4
+ import { engineLayout } from '../checkout.js';
5
+ import { LIST_ID, LOCAL_TASK_OFFERS, localTaskMembers, localTaskPage, localTaskStatuses, localWaitingOnYou, taskBoardRead } from './app-tasks-read.js';
6
+ const ENGINE_TIMEOUT_MS = 120_000;
7
+ /** How long an answer serves later requests, by what it reads. */
8
+ const KEEP_MS = { board: 15_000, issues: 10_000, issue: 10_000, releases: 30_000, task: 10_000 };
9
+ const ISSUE_ID = /^iss-\d+$/;
10
+ // A store a writer holds: SQLite's own words, and core.js's when its snapshot could not settle.
11
+ const BUSY = /database is (locked|busy)|SQLITE_BUSY|stayed locked or kept changing/;
12
+ const LOCAL = 'local';
13
+ const TRUE = new Set(['true', '1']);
14
+ const ISSUE_STATUSES = new Set(['open', 'triaged', 'escalated', 'waiting_on_fix', 'resolved', 'closed']);
15
+ const RESOLUTIONS = new Set(['fixed', 'works_as_intended', 'planned', 'duplicate', 'wont_fix', 'cannot_reproduce']);
16
+ const BUMPS = new Set(['patch', 'minor', 'major']);
17
+ class Refusal extends Error {
18
+ status;
19
+ reason;
20
+ constructor(status, message, reason) {
21
+ super(message);
22
+ this.status = status;
23
+ this.reason = reason;
24
+ }
25
+ }
26
+ const notFound = () => new Refusal(404, 'Not found.');
27
+ function runEngine(repo) {
28
+ return (script, args) => new Promise((resolve, reject) => {
29
+ execFile('python3', [script, ...args], { cwd: repo, encoding: 'utf8', timeout: ENGINE_TIMEOUT_MS, maxBuffer: 64 * 1024 * 1024 }, (error, stdout, stderr) => {
30
+ // The engine prints {ok: false, error} and exits 1 for an answer it refuses.
31
+ if (!error || String(stdout).trim())
32
+ resolve(String(stdout));
33
+ else
34
+ reject(new Error(String(stderr).trim() || error.message));
35
+ });
36
+ });
37
+ }
38
+ const iso = (seconds) => typeof seconds === 'number' && Number.isFinite(seconds) ? new Date(seconds * 1000).toISOString() : null;
39
+ const text = (value) => (typeof value === 'string' && value ? value : null);
40
+ const record = (value) => value && typeof value === 'object' && !Array.isArray(value) ? value : {};
41
+ const list = (value) => (Array.isArray(value) ? value : []);
42
+ /** The engine's {ok, result} answer's result, or a throw with its error. */
43
+ function result(stdout, what) {
44
+ let parsed;
45
+ try {
46
+ parsed = JSON.parse(stdout);
47
+ }
48
+ catch {
49
+ throw new Error(`${what} printed no JSON`);
50
+ }
51
+ const answer = record(parsed);
52
+ if (answer.ok !== true)
53
+ throw new Error(`${what}: ${String(answer.error ?? 'it did not answer')}`);
54
+ return record(answer.result);
55
+ }
56
+ // ---- Tasks -------------------------------------------------------------------------------------
57
+ /** One workspace, one list and one workflow whose statuses are the board's groups, then Cancelled. */
58
+ export function localTaskConfiguration(model) {
59
+ return {
60
+ state: 'active',
61
+ organization_id: LOCAL,
62
+ authorization_generation: null,
63
+ workspaces: [
64
+ {
65
+ id: LOCAL,
66
+ name: 'Local',
67
+ is_default: true,
68
+ revision: 0,
69
+ hierarchy_revision: 0,
70
+ permission: 'read',
71
+ lists: [
72
+ {
73
+ id: LIST_ID,
74
+ name: 'Tasks',
75
+ revision: 0,
76
+ order_revision: 0,
77
+ workflow_id: LOCAL,
78
+ default_status_id: 'proposed',
79
+ permission: 'read',
80
+ offers: LOCAL_TASK_OFFERS
81
+ }
82
+ ],
83
+ workflows: [{ id: LOCAL, name: 'Local', statuses: localTaskStatuses(model) }],
84
+ priorities: []
85
+ }
86
+ ]
87
+ };
88
+ }
89
+ /** The list's query: the local filters, refusing the hosted ones this host does not offer. */
90
+ function taskQuery(query, model) {
91
+ if (query.get('state') === 'archived')
92
+ throw new Refusal(400, 'This checkout keeps no archived tasks.');
93
+ if (TRUE.has(query.get('assigned_to_me') ?? ''))
94
+ throw new Refusal(400, 'This checkout has no reader to assign tasks to.');
95
+ const group = query.get('group') || undefined;
96
+ if (group !== undefined && !model.TASK_GROUPS.some(([key]) => key === group))
97
+ throw new Refusal(400, 'Unknown group.');
98
+ return {
99
+ ...(query.get('search') ? { search: query.get('search') } : {}),
100
+ ...(query.has('owner') ? { owner: query.get('owner') } : {}),
101
+ ...(group ? { group } : {}),
102
+ urgent: TRUE.has(query.get('urgent') ?? ''),
103
+ over_estimate: TRUE.has(query.get('over_estimate') ?? '')
104
+ };
105
+ }
106
+ /** task_page.py's answer as the task's detail: its acceptance criteria are its checklist. */
107
+ export function localTaskDetail(page) {
108
+ const id = String(page.task);
109
+ const held = record(page.record);
110
+ const registry = record(page.registry);
111
+ const execution = record(page.execution);
112
+ const lifecycle = text(held.lifecycle_state);
113
+ const outcome = text(held.outcome);
114
+ const status = lifecycle === 'finished'
115
+ ? outcome === 'cancelled'
116
+ ? 'canceled'
117
+ : 'completed'
118
+ : lifecycle === 'active'
119
+ ? 'in_progress'
120
+ : lifecycle === 'planned'
121
+ ? 'planned'
122
+ : registry.state === 'done'
123
+ ? 'completed'
124
+ : 'backlog';
125
+ const acceptance = list(held.acceptance).filter((a) => typeof a === 'string');
126
+ const met = lifecycle === 'finished' && outcome === 'complete';
127
+ const estimate = record(held.estimate);
128
+ const thread = text(execution.thread);
129
+ return {
130
+ permission: 'read',
131
+ task: {
132
+ id,
133
+ list_id: LIST_ID,
134
+ workflow_id: LOCAL,
135
+ status_id: status,
136
+ priority_id: null,
137
+ title: text(held.original_objective) ?? text(registry.description) ?? id,
138
+ description: text(held.evidence),
139
+ primary_user_id: thread,
140
+ parent_task_id: null,
141
+ revision: 0,
142
+ // A task the registry lists with no record has no time it was made.
143
+ created_at: iso(held.created_at) ?? '',
144
+ created_by: thread ?? LOCAL,
145
+ archived_at: null
146
+ },
147
+ contributors: [],
148
+ checklist: acceptance.map((label, position) => ({
149
+ id: `acceptance-${position + 1}`,
150
+ label,
151
+ position,
152
+ is_complete: met,
153
+ revision: 0
154
+ })),
155
+ holds: [],
156
+ claim: null,
157
+ acceptance,
158
+ estimate: typeof estimate.low === 'number' && typeof estimate.high === 'number'
159
+ ? { low: estimate.low, high: estimate.high }
160
+ : null,
161
+ release: text(held.release),
162
+ thread
163
+ };
164
+ }
165
+ // ---- Issues ------------------------------------------------------------------------------------
166
+ /** One local issue (a list row, or `issue show`'s whole issue) in the Maintain issue's shape. */
167
+ export function localIssue(row) {
168
+ const status = String(row.status ?? 'open');
169
+ const resolution = text(row.resolution);
170
+ const description = [text(row.actual), text(row.expected) && `Expected: ${text(row.expected)}`]
171
+ .filter(Boolean)
172
+ .join('\n\n');
173
+ const created = iso(row.created) ?? '';
174
+ return {
175
+ id: String(row.issue),
176
+ project_id: LOCAL,
177
+ title: String(row.title ?? ''),
178
+ description,
179
+ external_reference: text(row.key),
180
+ status: ISSUE_STATUSES.has(status) ? status : 'open',
181
+ resolution_reason: resolution && RESOLUTIONS.has(resolution) ? resolution : null,
182
+ priority: null,
183
+ assignee_id: null,
184
+ assignee_username: text(row.owner),
185
+ assignee_can_act: null,
186
+ created_by: text(row.reported_by) ?? text(row.reporter),
187
+ created_by_username: text(row.reporter),
188
+ revision: list(row.history).length,
189
+ created_at: created,
190
+ // The latest of its last sighting, its resolution and its history (a reopen, a merge, a triage):
191
+ // each is a change, not a sighting. A listed row carries no history, so it reads sightings only.
192
+ updated_at: [iso(row.last_seen), iso(row.resolved_at), ...list(row.history).map((entry) => iso(record(entry).at))].reduce((latest, at) => (at && at > latest ? at : latest), created),
193
+ resolved_at: iso(row.resolved_at),
194
+ closed_at: null,
195
+ ...(typeof row.occurrences === 'number' ? { occurrences: row.occurrences } : {}),
196
+ seen: text(row.seen),
197
+ placement: text(row.placement)
198
+ };
199
+ }
200
+ /** A local issue's history as the Maintain issue's events. */
201
+ export function localIssueEvents(history) {
202
+ return history.map(record).map((entry, index) => {
203
+ const [key, value] = Object.entries(entry).find(([k]) => k !== 'at' && k !== 'actor') ?? ['changed', null];
204
+ const resolved = key === 'resolved';
205
+ const reopened = key === 'reopened';
206
+ const reason = resolved && typeof value === 'string' && RESOLUTIONS.has(value) ? value : null;
207
+ return {
208
+ id: index + 1,
209
+ kind: key === 'filed' ? 'created' : resolved || reopened ? 'transitioned' : 'updated',
210
+ fields: [],
211
+ from_status: null,
212
+ to_status: resolved ? 'resolved' : reopened ? 'open' : null,
213
+ resolution_reason: reason,
214
+ priority: null,
215
+ assignee_id: null,
216
+ assignee_username: null,
217
+ actor_id: null,
218
+ actor_username: text(entry.actor),
219
+ created_at: iso(entry.at) ?? '',
220
+ note: `${key.replace(/_/g, ' ')}${typeof value === 'string' ? `: ${value}` : ''}`
221
+ };
222
+ });
223
+ }
224
+ // ---- Releases ----------------------------------------------------------------------------------
225
+ /** A Release's or the candidate's bump reasons as its change lines. */
226
+ function releaseChanges(entry) {
227
+ return list(entry.reason_lines)
228
+ .map(record)
229
+ .map((line) => ({
230
+ node_id: String(line.node ?? ''),
231
+ node_type: String(line.type ?? ''),
232
+ label: String(line.label ?? ''),
233
+ change: String(line.change ?? ''),
234
+ bump: null,
235
+ why: text(line.why),
236
+ modeling_only: false
237
+ }));
238
+ }
239
+ /**
240
+ * One of release_history.py's Releases in the hosted Release's shape. Its version is its label (the
241
+ * app version, or its batch when it has no app section, so two Releases never share one); the
242
+ * previous Release is the next older one listed, given by the caller.
243
+ */
244
+ export function localRelease(entry, previous) {
245
+ const override = record(entry.override);
246
+ const version = String(entry.version ?? entry.id);
247
+ return {
248
+ id: String(entry.id ?? version),
249
+ version,
250
+ computed_bump: text(entry.computed),
251
+ bump: text(entry.bump),
252
+ declared_reason: text(override.reason),
253
+ declared_by_name: text(override.by),
254
+ source_judged: entry.unjudged === 0,
255
+ marks_approximate: entry.lower_bound === true,
256
+ written_by_name: null,
257
+ written_at: iso(entry.released_at) ?? '',
258
+ previous_release_id: previous ? String(previous.id ?? previous.version) : null,
259
+ breaking: entry.bump === 'major',
260
+ commit: text(entry.commit),
261
+ ...(typeof entry.landings === 'number' ? { landings: entry.landings } : {})
262
+ };
263
+ }
264
+ /**
265
+ * release_history.py's candidate as the hosted candidate. Its previous Release is the newest one
266
+ * listed, given by the caller and named by its label as the list names it (the candidate's own
267
+ * `previous` is that Release's app version, which a Release with no app section shares).
268
+ */
269
+ export function localCandidate(entry, newest) {
270
+ const bump = String(entry.bump ?? '');
271
+ const previous = newest ? localRelease(newest, undefined) : null;
272
+ const version = text(entry.app_version) ?? text(entry.version) ?? text(entry.previous) ?? '';
273
+ return {
274
+ head_commit_id: String(entry.commit ?? ''),
275
+ previous_release: previous ? { id: previous.id, version: previous.version } : null,
276
+ next_version: version,
277
+ version,
278
+ commits_since: typeof entry.commits === 'number' ? entry.commits : null,
279
+ classification: BUMPS.has(bump)
280
+ ? { bump: bump, marks_approximate: entry.lower_bound === true }
281
+ : null,
282
+ changes: releaseChanges(entry)
283
+ };
284
+ }
285
+ // ---- The reader --------------------------------------------------------------------------------
286
+ /** The read behind sdlc viewer's api/app/ routes. */
287
+ export function appContractReader(input) {
288
+ const run = input.run ?? runEngine(input.repo);
289
+ const now = input.now ?? Date.now;
290
+ const layout = engineLayout(input.engine);
291
+ const script = (name) => path.join(layout.scripts, name);
292
+ let loaded = input.model;
293
+ const model = () => (loaded ??= createRequire(import.meta.url)(path.join(layout.view, 'model.js')));
294
+ // One read per key at a time; an answer serves later requests for its time, a failure is not kept.
295
+ // A key forgotten while its read runs keeps that read's answer only for the requests already waiting.
296
+ const kept = new Map();
297
+ const reading = new Map();
298
+ let generation = 0;
299
+ const keep = (key, ms, read) => {
300
+ const held = kept.get(key);
301
+ if (held && held.until > now())
302
+ return Promise.resolve(held.value);
303
+ const running = reading.get(key);
304
+ if (running)
305
+ return running;
306
+ const started = now();
307
+ const born = generation;
308
+ const next = read()
309
+ .then((value) => {
310
+ if (born === generation)
311
+ kept.set(key, { until: started + ms, value });
312
+ return value;
313
+ })
314
+ .finally(() => {
315
+ if (reading.get(key) === next)
316
+ reading.delete(key);
317
+ });
318
+ reading.set(key, next);
319
+ return next;
320
+ };
321
+ const forget = () => {
322
+ generation += 1;
323
+ for (const key of [...kept.keys(), ...reading.keys()])
324
+ if (key === 'board' || key.startsWith('task:')) {
325
+ kept.delete(key);
326
+ reading.delete(key);
327
+ }
328
+ };
329
+ const board = async () => taskBoardRead(await keep('board', KEEP_MS.board, input.boardRows));
330
+ const done = input.done === true;
331
+ const engine = async (file, args) => result(await run(script(file), ['--repo', input.repo, ...args]), file);
332
+ const issues = () => keep('issues', KEEP_MS.issues, async () => list((await engine('issue', ['list', '--all'])).issues).map(record));
333
+ const history = () => keep('releases', KEEP_MS.releases, () => engine('release_history.py', []));
334
+ const releases = async () => list((await history()).releases)
335
+ .map(record)
336
+ .filter((entry) => !('error' in entry));
337
+ const answer = async (segments, query) => {
338
+ const [domain, ...rest] = segments;
339
+ const route = rest.join('/');
340
+ if (domain === 'tasks') {
341
+ if (route === 'configuration')
342
+ return localTaskConfiguration(model());
343
+ if (rest.length === 3 && rest[0] === 'lists' && rest[2] === 'tasks') {
344
+ if (rest[1] !== LIST_ID)
345
+ throw notFound();
346
+ const asked = taskQuery(query, model());
347
+ return localTaskPage(await board(), asked, model(), { done, now: now() });
348
+ }
349
+ if (route === 'waiting-on-you') {
350
+ const waiting = localWaitingOnYou(await board(), { done, now: now() });
351
+ // The board read is from before cli-view printed the user's queue.
352
+ if (!waiting)
353
+ throw new Refusal(409, 'This viewer reads no Waiting on you; restart sdlc viewer.', 'view_outdated');
354
+ return waiting;
355
+ }
356
+ if (route === 'members')
357
+ return localTaskMembers(await board());
358
+ if (rest.length === 2 && rest[0] === 'tasks') {
359
+ const id = rest[1];
360
+ const page = await keep(`task:${id}`, KEEP_MS.task, async () => {
361
+ const read = await input.taskPage(id);
362
+ if (read.error)
363
+ throw new Error(read.error);
364
+ return read;
365
+ });
366
+ if (!page.value)
367
+ throw notFound();
368
+ return localTaskDetail(page.value);
369
+ }
370
+ }
371
+ if (domain === 'issues') {
372
+ if (!route) {
373
+ const status = query.get('status');
374
+ if (status !== null && !ISSUE_STATUSES.has(status))
375
+ throw new Refusal(400, 'Unknown status.');
376
+ const limit = Math.min(Math.max(Number(query.get('limit') ?? 100) || 100, 1), 500);
377
+ const offset = Math.max(Number(query.get('offset') ?? 0) || 0, 0);
378
+ const rows = (await issues())
379
+ .map(localIssue)
380
+ .filter((issue) => status === null || issue.status === status)
381
+ .sort((a, b) => b.created_at.localeCompare(a.created_at));
382
+ return { issues: rows.slice(offset, offset + limit), total: rows.length };
383
+ }
384
+ if (rest.length === 1) {
385
+ const id = rest[0];
386
+ if (!ISSUE_ID.test(id))
387
+ throw notFound();
388
+ const shown = await keep(`issue:${id}`, KEEP_MS.issue, async () => {
389
+ try {
390
+ return await engine('issue', ['show', id]);
391
+ }
392
+ catch (error) {
393
+ if (/unknown issue/.test(String(error.message)))
394
+ throw notFound();
395
+ throw error;
396
+ }
397
+ });
398
+ return { issue: localIssue(shown), events: localIssueEvents(list(shown.history)) };
399
+ }
400
+ }
401
+ if (domain === 'releases') {
402
+ if (!route) {
403
+ return {
404
+ release_branch: null,
405
+ releases: (await releases()).map((entry, index, all) => localRelease(entry, all[index + 1])),
406
+ next_before: null,
407
+ can_write: false
408
+ };
409
+ }
410
+ if (route === 'candidate') {
411
+ const candidate = (await history()).candidate;
412
+ if (candidate === null || candidate === undefined)
413
+ return { candidate: null };
414
+ const entry = record(candidate);
415
+ if (typeof entry.error === 'string')
416
+ throw new Error(`the candidate cannot be described: ${entry.error}`);
417
+ return { candidate: localCandidate(entry, (await releases())[0]) };
418
+ }
419
+ if (rest.length === 1) {
420
+ const version = rest[0];
421
+ const all = await releases();
422
+ const index = all.findIndex((entry) => entry.id === version || entry.version === version);
423
+ if (index < 0)
424
+ throw notFound();
425
+ const found = all[index];
426
+ return { release: { ...localRelease(found, all[index + 1]), changes: releaseChanges(found) } };
427
+ }
428
+ }
429
+ throw notFound();
430
+ };
431
+ const reader = async ({ segments, query }) => {
432
+ try {
433
+ return { status: 200, body: await answer(segments, query) };
434
+ }
435
+ catch (error) {
436
+ if (error instanceof Refusal)
437
+ return { status: error.status, body: { error: error.message, ...(error.reason ? { reason: error.reason } : {}) } };
438
+ const message = error instanceof Error ? error.message : String(error);
439
+ if (BUSY.test(message)) {
440
+ process.stderr.write(`sdlc viewer: ${segments.join('/')} was busy: ${message}\n`);
441
+ return { status: 503, body: { error: 'The local stores are busy; read again in a moment.', retry: true } };
442
+ }
443
+ // The detail (a path or a database error) stays on the viewer's terminal, not the page.
444
+ process.stderr.write(`sdlc viewer: ${segments.join('/')} failed: ${message}\n`);
445
+ return { status: 500, body: { error: 'The read failed; see the sdlc viewer terminal.' } };
446
+ }
447
+ };
448
+ return Object.assign(reader, { invalidate: forget });
449
+ }
450
+ //# sourceMappingURL=app-contract-readers.js.map