@ashlr/hub 2.2.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (477) hide show
  1. package/CHANGELOG.md +1158 -0
  2. package/LICENSE +21 -0
  3. package/README.md +833 -0
  4. package/bin/ashlr +8 -0
  5. package/dist/api/core.d.ts +28 -0
  6. package/dist/api/core.js +42 -0
  7. package/dist/api/core.js.map +1 -0
  8. package/dist/api/index.d.ts +9 -0
  9. package/dist/api/index.js +9 -0
  10. package/dist/api/index.js.map +1 -0
  11. package/dist/api/plugin.d.ts +12 -0
  12. package/dist/api/plugin.js +13 -0
  13. package/dist/api/plugin.js.map +1 -0
  14. package/dist/api/types.d.ts +9 -0
  15. package/dist/api/types.js +9 -0
  16. package/dist/api/types.js.map +1 -0
  17. package/dist/cli/args.d.ts +20 -0
  18. package/dist/cli/args.js +23 -0
  19. package/dist/cli/args.js.map +1 -0
  20. package/dist/cli/ask.d.ts +22 -0
  21. package/dist/cli/ask.js +240 -0
  22. package/dist/cli/ask.js.map +1 -0
  23. package/dist/cli/audit.d.ts +26 -0
  24. package/dist/cli/audit.js +199 -0
  25. package/dist/cli/audit.js.map +1 -0
  26. package/dist/cli/backlog.d.ts +26 -0
  27. package/dist/cli/backlog.js +322 -0
  28. package/dist/cli/backlog.js.map +1 -0
  29. package/dist/cli/completions.d.ts +18 -0
  30. package/dist/cli/completions.js +156 -0
  31. package/dist/cli/completions.js.map +1 -0
  32. package/dist/cli/daemon.d.ts +31 -0
  33. package/dist/cli/daemon.js +334 -0
  34. package/dist/cli/daemon.js.map +1 -0
  35. package/dist/cli/demo-sandbox.d.ts +78 -0
  36. package/dist/cli/demo-sandbox.js +227 -0
  37. package/dist/cli/demo-sandbox.js.map +1 -0
  38. package/dist/cli/demo.d.ts +76 -0
  39. package/dist/cli/demo.js +285 -0
  40. package/dist/cli/demo.js.map +1 -0
  41. package/dist/cli/digest.d.ts +46 -0
  42. package/dist/cli/digest.js +352 -0
  43. package/dist/cli/digest.js.map +1 -0
  44. package/dist/cli/doctor-init.d.ts +28 -0
  45. package/dist/cli/doctor-init.js +335 -0
  46. package/dist/cli/doctor-init.js.map +1 -0
  47. package/dist/cli/genome.d.ts +62 -0
  48. package/dist/cli/genome.js +1061 -0
  49. package/dist/cli/genome.js.map +1 -0
  50. package/dist/cli/gh.d.ts +27 -0
  51. package/dist/cli/gh.js +322 -0
  52. package/dist/cli/gh.js.map +1 -0
  53. package/dist/cli/goals.d.ts +55 -0
  54. package/dist/cli/goals.js +667 -0
  55. package/dist/cli/goals.js.map +1 -0
  56. package/dist/cli/health.d.ts +56 -0
  57. package/dist/cli/health.js +407 -0
  58. package/dist/cli/health.js.map +1 -0
  59. package/dist/cli/help.d.ts +51 -0
  60. package/dist/cli/help.js +436 -0
  61. package/dist/cli/help.js.map +1 -0
  62. package/dist/cli/inbox.d.ts +28 -0
  63. package/dist/cli/inbox.js +589 -0
  64. package/dist/cli/inbox.js.map +1 -0
  65. package/dist/cli/index.d.ts +41 -0
  66. package/dist/cli/index.js +1208 -0
  67. package/dist/cli/index.js.map +1 -0
  68. package/dist/cli/knowledge.d.ts +33 -0
  69. package/dist/cli/knowledge.js +575 -0
  70. package/dist/cli/knowledge.js.map +1 -0
  71. package/dist/cli/mcp.d.ts +26 -0
  72. package/dist/cli/mcp.js +487 -0
  73. package/dist/cli/mcp.js.map +1 -0
  74. package/dist/cli/models.d.ts +26 -0
  75. package/dist/cli/models.js +435 -0
  76. package/dist/cli/models.js.map +1 -0
  77. package/dist/cli/new.d.ts +32 -0
  78. package/dist/cli/new.js +565 -0
  79. package/dist/cli/new.js.map +1 -0
  80. package/dist/cli/notify.d.ts +20 -0
  81. package/dist/cli/notify.js +188 -0
  82. package/dist/cli/notify.js.map +1 -0
  83. package/dist/cli/onboard.d.ts +85 -0
  84. package/dist/cli/onboard.js +305 -0
  85. package/dist/cli/onboard.js.map +1 -0
  86. package/dist/cli/open.d.ts +38 -0
  87. package/dist/cli/open.js +86 -0
  88. package/dist/cli/open.js.map +1 -0
  89. package/dist/cli/orient.d.ts +14 -0
  90. package/dist/cli/orient.js +110 -0
  91. package/dist/cli/orient.js.map +1 -0
  92. package/dist/cli/picker.d.ts +21 -0
  93. package/dist/cli/picker.js +177 -0
  94. package/dist/cli/picker.js.map +1 -0
  95. package/dist/cli/plugins.d.ts +21 -0
  96. package/dist/cli/plugins.js +394 -0
  97. package/dist/cli/plugins.js.map +1 -0
  98. package/dist/cli/preflight.d.ts +29 -0
  99. package/dist/cli/preflight.js +131 -0
  100. package/dist/cli/preflight.js.map +1 -0
  101. package/dist/cli/pulse.d.ts +26 -0
  102. package/dist/cli/pulse.js +482 -0
  103. package/dist/cli/pulse.js.map +1 -0
  104. package/dist/cli/reflect.d.ts +42 -0
  105. package/dist/cli/reflect.js +381 -0
  106. package/dist/cli/reflect.js.map +1 -0
  107. package/dist/cli/run.d.ts +29 -0
  108. package/dist/cli/run.js +687 -0
  109. package/dist/cli/run.js.map +1 -0
  110. package/dist/cli/sandbox.d.ts +20 -0
  111. package/dist/cli/sandbox.js +345 -0
  112. package/dist/cli/sandbox.js.map +1 -0
  113. package/dist/cli/seams.d.ts +41 -0
  114. package/dist/cli/seams.js +167 -0
  115. package/dist/cli/seams.js.map +1 -0
  116. package/dist/cli/serve.d.ts +25 -0
  117. package/dist/cli/serve.js +249 -0
  118. package/dist/cli/serve.js.map +1 -0
  119. package/dist/cli/ship.d.ts +33 -0
  120. package/dist/cli/ship.js +433 -0
  121. package/dist/cli/ship.js.map +1 -0
  122. package/dist/cli/spec.d.ts +19 -0
  123. package/dist/cli/spec.js +478 -0
  124. package/dist/cli/spec.js.map +1 -0
  125. package/dist/cli/swarm.d.ts +42 -0
  126. package/dist/cli/swarm.js +1365 -0
  127. package/dist/cli/swarm.js.map +1 -0
  128. package/dist/cli/telemetry.d.ts +26 -0
  129. package/dist/cli/telemetry.js +364 -0
  130. package/dist/cli/telemetry.js.map +1 -0
  131. package/dist/cli/tui.d.ts +17 -0
  132. package/dist/cli/tui.js +52 -0
  133. package/dist/cli/tui.js.map +1 -0
  134. package/dist/cli/ui.d.ts +53 -0
  135. package/dist/cli/ui.js +66 -0
  136. package/dist/cli/ui.js.map +1 -0
  137. package/dist/cli/update.d.ts +38 -0
  138. package/dist/cli/update.js +682 -0
  139. package/dist/cli/update.js.map +1 -0
  140. package/dist/cli/vercel.d.ts +20 -0
  141. package/dist/cli/vercel.js +193 -0
  142. package/dist/cli/vercel.js.map +1 -0
  143. package/dist/cli/verify-safety.d.ts +96 -0
  144. package/dist/cli/verify-safety.js +509 -0
  145. package/dist/cli/verify-safety.js.map +1 -0
  146. package/dist/cli/wire.d.ts +22 -0
  147. package/dist/cli/wire.js +205 -0
  148. package/dist/cli/wire.js.map +1 -0
  149. package/dist/core/classify.d.ts +51 -0
  150. package/dist/core/classify.js +450 -0
  151. package/dist/core/classify.js.map +1 -0
  152. package/dist/core/config.d.ts +63 -0
  153. package/dist/core/config.js +474 -0
  154. package/dist/core/config.js.map +1 -0
  155. package/dist/core/daemon/loop.d.ts +74 -0
  156. package/dist/core/daemon/loop.js +618 -0
  157. package/dist/core/daemon/loop.js.map +1 -0
  158. package/dist/core/daemon/state.d.ts +66 -0
  159. package/dist/core/daemon/state.js +197 -0
  160. package/dist/core/daemon/state.js.map +1 -0
  161. package/dist/core/dashboard.d.ts +40 -0
  162. package/dist/core/dashboard.js +463 -0
  163. package/dist/core/dashboard.js.map +1 -0
  164. package/dist/core/digest/build.d.ts +51 -0
  165. package/dist/core/digest/build.js +230 -0
  166. package/dist/core/digest/build.js.map +1 -0
  167. package/dist/core/digest/deliver.d.ts +47 -0
  168. package/dist/core/digest/deliver.js +230 -0
  169. package/dist/core/digest/deliver.js.map +1 -0
  170. package/dist/core/digest/store.d.ts +57 -0
  171. package/dist/core/digest/store.js +223 -0
  172. package/dist/core/digest/store.js.map +1 -0
  173. package/dist/core/doctor-fix.d.ts +21 -0
  174. package/dist/core/doctor-fix.js +440 -0
  175. package/dist/core/doctor-fix.js.map +1 -0
  176. package/dist/core/doctor.d.ts +18 -0
  177. package/dist/core/doctor.js +806 -0
  178. package/dist/core/doctor.js.map +1 -0
  179. package/dist/core/env-bridge.d.ts +64 -0
  180. package/dist/core/env-bridge.js +103 -0
  181. package/dist/core/env-bridge.js.map +1 -0
  182. package/dist/core/genome/capture.d.ts +49 -0
  183. package/dist/core/genome/capture.js +352 -0
  184. package/dist/core/genome/capture.js.map +1 -0
  185. package/dist/core/genome/consolidate.d.ts +38 -0
  186. package/dist/core/genome/consolidate.js +426 -0
  187. package/dist/core/genome/consolidate.js.map +1 -0
  188. package/dist/core/genome/export.d.ts +29 -0
  189. package/dist/core/genome/export.js +102 -0
  190. package/dist/core/genome/export.js.map +1 -0
  191. package/dist/core/genome/playbook.d.ts +33 -0
  192. package/dist/core/genome/playbook.js +320 -0
  193. package/dist/core/genome/playbook.js.map +1 -0
  194. package/dist/core/genome/recall.d.ts +45 -0
  195. package/dist/core/genome/recall.js +293 -0
  196. package/dist/core/genome/recall.js.map +1 -0
  197. package/dist/core/genome/store.d.ts +62 -0
  198. package/dist/core/genome/store.js +711 -0
  199. package/dist/core/genome/store.js.map +1 -0
  200. package/dist/core/git.d.ts +34 -0
  201. package/dist/core/git.js +115 -0
  202. package/dist/core/git.js.map +1 -0
  203. package/dist/core/goals/advance.d.ts +82 -0
  204. package/dist/core/goals/advance.js +263 -0
  205. package/dist/core/goals/advance.js.map +1 -0
  206. package/dist/core/goals/planner.d.ts +58 -0
  207. package/dist/core/goals/planner.js +233 -0
  208. package/dist/core/goals/planner.js.map +1 -0
  209. package/dist/core/goals/store.d.ts +128 -0
  210. package/dist/core/goals/store.js +442 -0
  211. package/dist/core/goals/store.js.map +1 -0
  212. package/dist/core/inbox/apply.d.ts +36 -0
  213. package/dist/core/inbox/apply.js +407 -0
  214. package/dist/core/inbox/apply.js.map +1 -0
  215. package/dist/core/inbox/notify-proposal.d.ts +13 -0
  216. package/dist/core/inbox/notify-proposal.js +21 -0
  217. package/dist/core/inbox/notify-proposal.js.map +1 -0
  218. package/dist/core/inbox/store.d.ts +67 -0
  219. package/dist/core/inbox/store.js +258 -0
  220. package/dist/core/inbox/store.js.map +1 -0
  221. package/dist/core/index-engine.d.ts +62 -0
  222. package/dist/core/index-engine.js +486 -0
  223. package/dist/core/index-engine.js.map +1 -0
  224. package/dist/core/integrations/desktop-notify.d.ts +18 -0
  225. package/dist/core/integrations/desktop-notify.js +42 -0
  226. package/dist/core/integrations/desktop-notify.js.map +1 -0
  227. package/dist/core/integrations/editors.d.ts +50 -0
  228. package/dist/core/integrations/editors.js +216 -0
  229. package/dist/core/integrations/editors.js.map +1 -0
  230. package/dist/core/integrations/github.d.ts +66 -0
  231. package/dist/core/integrations/github.js +332 -0
  232. package/dist/core/integrations/github.js.map +1 -0
  233. package/dist/core/integrations/identity.d.ts +29 -0
  234. package/dist/core/integrations/identity.js +359 -0
  235. package/dist/core/integrations/identity.js.map +1 -0
  236. package/dist/core/integrations/notify.d.ts +23 -0
  237. package/dist/core/integrations/notify.js +96 -0
  238. package/dist/core/integrations/notify.js.map +1 -0
  239. package/dist/core/integrations/vercel.d.ts +37 -0
  240. package/dist/core/integrations/vercel.js +192 -0
  241. package/dist/core/integrations/vercel.js.map +1 -0
  242. package/dist/core/knowledge/ask.d.ts +34 -0
  243. package/dist/core/knowledge/ask.js +325 -0
  244. package/dist/core/knowledge/ask.js.map +1 -0
  245. package/dist/core/knowledge/graph.d.ts +51 -0
  246. package/dist/core/knowledge/graph.js +564 -0
  247. package/dist/core/knowledge/graph.js.map +1 -0
  248. package/dist/core/knowledge/index.d.ts +74 -0
  249. package/dist/core/knowledge/index.js +586 -0
  250. package/dist/core/knowledge/index.js.map +1 -0
  251. package/dist/core/learn/playbooks.d.ts +84 -0
  252. package/dist/core/learn/playbooks.js +241 -0
  253. package/dist/core/learn/playbooks.js.map +1 -0
  254. package/dist/core/learn/reflect.d.ts +87 -0
  255. package/dist/core/learn/reflect.js +435 -0
  256. package/dist/core/learn/reflect.js.map +1 -0
  257. package/dist/core/learn/store.d.ts +51 -0
  258. package/dist/core/learn/store.js +165 -0
  259. package/dist/core/learn/store.js.map +1 -0
  260. package/dist/core/learn/tuning.d.ts +48 -0
  261. package/dist/core/learn/tuning.js +201 -0
  262. package/dist/core/learn/tuning.js.map +1 -0
  263. package/dist/core/lifecycle/scaffold.d.ts +43 -0
  264. package/dist/core/lifecycle/scaffold.js +260 -0
  265. package/dist/core/lifecycle/scaffold.js.map +1 -0
  266. package/dist/core/lifecycle/ship.d.ts +48 -0
  267. package/dist/core/lifecycle/ship.js +513 -0
  268. package/dist/core/lifecycle/ship.js.map +1 -0
  269. package/dist/core/lifecycle/templates.d.ts +20 -0
  270. package/dist/core/lifecycle/templates.js +605 -0
  271. package/dist/core/lifecycle/templates.js.map +1 -0
  272. package/dist/core/mcp-gateway.d.ts +59 -0
  273. package/dist/core/mcp-gateway.js +385 -0
  274. package/dist/core/mcp-gateway.js.map +1 -0
  275. package/dist/core/mcp-native.d.ts +53 -0
  276. package/dist/core/mcp-native.js +507 -0
  277. package/dist/core/mcp-native.js.map +1 -0
  278. package/dist/core/mcp-registry.d.ts +36 -0
  279. package/dist/core/mcp-registry.js +180 -0
  280. package/dist/core/mcp-registry.js.map +1 -0
  281. package/dist/core/observability/budget-alert.d.ts +18 -0
  282. package/dist/core/observability/budget-alert.js +90 -0
  283. package/dist/core/observability/budget-alert.js.map +1 -0
  284. package/dist/core/observability/estimate.d.ts +27 -0
  285. package/dist/core/observability/estimate.js +188 -0
  286. package/dist/core/observability/estimate.js.map +1 -0
  287. package/dist/core/observability/forecast.d.ts +19 -0
  288. package/dist/core/observability/forecast.js +101 -0
  289. package/dist/core/observability/forecast.js.map +1 -0
  290. package/dist/core/observability/governance.d.ts +28 -0
  291. package/dist/core/observability/governance.js +101 -0
  292. package/dist/core/observability/governance.js.map +1 -0
  293. package/dist/core/observability/otlp.d.ts +88 -0
  294. package/dist/core/observability/otlp.js +217 -0
  295. package/dist/core/observability/otlp.js.map +1 -0
  296. package/dist/core/observability/rollup.d.ts +35 -0
  297. package/dist/core/observability/rollup.js +311 -0
  298. package/dist/core/observability/rollup.js.map +1 -0
  299. package/dist/core/observability/telemetry-sink.d.ts +63 -0
  300. package/dist/core/observability/telemetry-sink.js +350 -0
  301. package/dist/core/observability/telemetry-sink.js.map +1 -0
  302. package/dist/core/observability/usage-source.d.ts +60 -0
  303. package/dist/core/observability/usage-source.js +347 -0
  304. package/dist/core/observability/usage-source.js.map +1 -0
  305. package/dist/core/onboard.d.ts +27 -0
  306. package/dist/core/onboard.js +288 -0
  307. package/dist/core/onboard.js.map +1 -0
  308. package/dist/core/orient.d.ts +23 -0
  309. package/dist/core/orient.js +135 -0
  310. package/dist/core/orient.js.map +1 -0
  311. package/dist/core/phantom.d.ts +23 -0
  312. package/dist/core/phantom.js +279 -0
  313. package/dist/core/phantom.js.map +1 -0
  314. package/dist/core/plugins/host-api.d.ts +29 -0
  315. package/dist/core/plugins/host-api.js +113 -0
  316. package/dist/core/plugins/host-api.js.map +1 -0
  317. package/dist/core/plugins/integrity.d.ts +36 -0
  318. package/dist/core/plugins/integrity.js +73 -0
  319. package/dist/core/plugins/integrity.js.map +1 -0
  320. package/dist/core/plugins/manifest.d.ts +31 -0
  321. package/dist/core/plugins/manifest.js +316 -0
  322. package/dist/core/plugins/manifest.js.map +1 -0
  323. package/dist/core/plugins/registry.d.ts +87 -0
  324. package/dist/core/plugins/registry.js +415 -0
  325. package/dist/core/plugins/registry.js.map +1 -0
  326. package/dist/core/plugins/types.d.ts +182 -0
  327. package/dist/core/plugins/types.js +40 -0
  328. package/dist/core/plugins/types.js.map +1 -0
  329. package/dist/core/plugins/wrappers.d.ts +40 -0
  330. package/dist/core/plugins/wrappers.js +229 -0
  331. package/dist/core/plugins/wrappers.js.map +1 -0
  332. package/dist/core/portfolio/backlog.d.ts +40 -0
  333. package/dist/core/portfolio/backlog.js +177 -0
  334. package/dist/core/portfolio/backlog.js.map +1 -0
  335. package/dist/core/portfolio/scanners.d.ts +21 -0
  336. package/dist/core/portfolio/scanners.js +600 -0
  337. package/dist/core/portfolio/scanners.js.map +1 -0
  338. package/dist/core/providers.d.ts +34 -0
  339. package/dist/core/providers.js +250 -0
  340. package/dist/core/providers.js.map +1 -0
  341. package/dist/core/quality/conventions.d.ts +35 -0
  342. package/dist/core/quality/conventions.js +267 -0
  343. package/dist/core/quality/conventions.js.map +1 -0
  344. package/dist/core/quality/fixes.d.ts +56 -0
  345. package/dist/core/quality/fixes.js +209 -0
  346. package/dist/core/quality/fixes.js.map +1 -0
  347. package/dist/core/quality/health.d.ts +69 -0
  348. package/dist/core/quality/health.js +350 -0
  349. package/dist/core/quality/health.js.map +1 -0
  350. package/dist/core/quality/store.d.ts +56 -0
  351. package/dist/core/quality/store.js +195 -0
  352. package/dist/core/quality/store.js.map +1 -0
  353. package/dist/core/readiness.d.ts +112 -0
  354. package/dist/core/readiness.js +431 -0
  355. package/dist/core/readiness.js.map +1 -0
  356. package/dist/core/run/agent-loop.d.ts +40 -0
  357. package/dist/core/run/agent-loop.js +291 -0
  358. package/dist/core/run/agent-loop.js.map +1 -0
  359. package/dist/core/run/budget.d.ts +47 -0
  360. package/dist/core/run/budget.js +113 -0
  361. package/dist/core/run/budget.js.map +1 -0
  362. package/dist/core/run/engines.d.ts +75 -0
  363. package/dist/core/run/engines.js +199 -0
  364. package/dist/core/run/engines.js.map +1 -0
  365. package/dist/core/run/model-manager.d.ts +64 -0
  366. package/dist/core/run/model-manager.js +339 -0
  367. package/dist/core/run/model-manager.js.map +1 -0
  368. package/dist/core/run/orchestrator.d.ts +100 -0
  369. package/dist/core/run/orchestrator.js +1515 -0
  370. package/dist/core/run/orchestrator.js.map +1 -0
  371. package/dist/core/run/provider-client.d.ts +46 -0
  372. package/dist/core/run/provider-client.js +796 -0
  373. package/dist/core/run/provider-client.js.map +1 -0
  374. package/dist/core/run/retry.d.ts +19 -0
  375. package/dist/core/run/retry.js +68 -0
  376. package/dist/core/run/retry.js.map +1 -0
  377. package/dist/core/run/router.d.ts +50 -0
  378. package/dist/core/run/router.js +257 -0
  379. package/dist/core/run/router.js.map +1 -0
  380. package/dist/core/run/self-heal.d.ts +52 -0
  381. package/dist/core/run/self-heal.js +181 -0
  382. package/dist/core/run/self-heal.js.map +1 -0
  383. package/dist/core/run/streaming.d.ts +31 -0
  384. package/dist/core/run/streaming.js +122 -0
  385. package/dist/core/run/streaming.js.map +1 -0
  386. package/dist/core/run/verify.d.ts +30 -0
  387. package/dist/core/run/verify.js +204 -0
  388. package/dist/core/run/verify.js.map +1 -0
  389. package/dist/core/sandbox/audit.d.ts +31 -0
  390. package/dist/core/sandbox/audit.js +169 -0
  391. package/dist/core/sandbox/audit.js.map +1 -0
  392. package/dist/core/sandbox/policy.d.ts +61 -0
  393. package/dist/core/sandbox/policy.js +211 -0
  394. package/dist/core/sandbox/policy.js.map +1 -0
  395. package/dist/core/sandbox/worktree.d.ts +175 -0
  396. package/dist/core/sandbox/worktree.js +673 -0
  397. package/dist/core/sandbox/worktree.js.map +1 -0
  398. package/dist/core/seams/backlog.d.ts +47 -0
  399. package/dist/core/seams/backlog.js +47 -0
  400. package/dist/core/seams/backlog.js.map +1 -0
  401. package/dist/core/seams/daemon-coordinator.d.ts +72 -0
  402. package/dist/core/seams/daemon-coordinator.js +76 -0
  403. package/dist/core/seams/daemon-coordinator.js.map +1 -0
  404. package/dist/core/seams/genome.d.ts +45 -0
  405. package/dist/core/seams/genome.js +53 -0
  406. package/dist/core/seams/genome.js.map +1 -0
  407. package/dist/core/seams/identity.d.ts +40 -0
  408. package/dist/core/seams/identity.js +44 -0
  409. package/dist/core/seams/identity.js.map +1 -0
  410. package/dist/core/seams/inbox.d.ts +60 -0
  411. package/dist/core/seams/inbox.js +66 -0
  412. package/dist/core/seams/inbox.js.map +1 -0
  413. package/dist/core/seams/index.d.ts +20 -0
  414. package/dist/core/seams/index.js +21 -0
  415. package/dist/core/seams/index.js.map +1 -0
  416. package/dist/core/seams/portfolio.d.ts +50 -0
  417. package/dist/core/seams/portfolio.js +61 -0
  418. package/dist/core/seams/portfolio.js.map +1 -0
  419. package/dist/core/seams/registry.d.ts +42 -0
  420. package/dist/core/seams/registry.js +128 -0
  421. package/dist/core/seams/registry.js.map +1 -0
  422. package/dist/core/seams/run-swarm.d.ts +66 -0
  423. package/dist/core/seams/run-swarm.js +74 -0
  424. package/dist/core/seams/run-swarm.js.map +1 -0
  425. package/dist/core/seams/types.d.ts +123 -0
  426. package/dist/core/seams/types.js +35 -0
  427. package/dist/core/seams/types.js.map +1 -0
  428. package/dist/core/spec/spec-store.d.ts +62 -0
  429. package/dist/core/spec/spec-store.js +359 -0
  430. package/dist/core/spec/spec-store.js.map +1 -0
  431. package/dist/core/swarm/gate.d.ts +45 -0
  432. package/dist/core/swarm/gate.js +114 -0
  433. package/dist/core/swarm/gate.js.map +1 -0
  434. package/dist/core/swarm/planner.d.ts +32 -0
  435. package/dist/core/swarm/planner.js +293 -0
  436. package/dist/core/swarm/planner.js.map +1 -0
  437. package/dist/core/swarm/rollback.d.ts +56 -0
  438. package/dist/core/swarm/rollback.js +266 -0
  439. package/dist/core/swarm/rollback.js.map +1 -0
  440. package/dist/core/swarm/runner.d.ts +62 -0
  441. package/dist/core/swarm/runner.js +1263 -0
  442. package/dist/core/swarm/runner.js.map +1 -0
  443. package/dist/core/swarm/sign.d.ts +71 -0
  444. package/dist/core/swarm/sign.js +362 -0
  445. package/dist/core/swarm/sign.js.map +1 -0
  446. package/dist/core/swarm/store.d.ts +52 -0
  447. package/dist/core/swarm/store.js +195 -0
  448. package/dist/core/swarm/store.js.map +1 -0
  449. package/dist/core/tidy.d.ts +32 -0
  450. package/dist/core/tidy.js +354 -0
  451. package/dist/core/tidy.js.map +1 -0
  452. package/dist/core/tools-registry.d.ts +16 -0
  453. package/dist/core/tools-registry.js +308 -0
  454. package/dist/core/tools-registry.js.map +1 -0
  455. package/dist/core/types.d.ts +2545 -0
  456. package/dist/core/types.js +9 -0
  457. package/dist/core/types.js.map +1 -0
  458. package/dist/core/web/api.d.ts +53 -0
  459. package/dist/core/web/api.js +698 -0
  460. package/dist/core/web/api.js.map +1 -0
  461. package/dist/core/web/public/app.js +1906 -0
  462. package/dist/core/web/public/index.html +721 -0
  463. package/dist/core/web/public/styles.css +2007 -0
  464. package/dist/core/web/server.d.ts +18 -0
  465. package/dist/core/web/server.js +122 -0
  466. package/dist/core/web/server.js.map +1 -0
  467. package/dist/core/web/static.d.ts +18 -0
  468. package/dist/core/web/static.js +122 -0
  469. package/dist/core/web/static.js.map +1 -0
  470. package/dist/tui/app.d.ts +33 -0
  471. package/dist/tui/app.js +350 -0
  472. package/dist/tui/app.js.map +1 -0
  473. package/dist/tui/render.d.ts +20 -0
  474. package/dist/tui/render.js +558 -0
  475. package/dist/tui/render.js.map +1 -0
  476. package/package.json +80 -0
  477. package/schema/config.schema.json +223 -0
@@ -0,0 +1 @@
1
+ {"version":3,"file":"store.js","sourceRoot":"","sources":["../../../src/core/genome/store.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,34 @@
1
+ /**
2
+ * git.ts — lightweight Git introspection helpers.
3
+ *
4
+ * Rules:
5
+ * - Zero third-party deps; Node builtins only.
6
+ * - Never throw — return null / zero-filled values on any error.
7
+ * - Every execFileSync call gets a tight timeout (5 s) and stdio:'pipe'
8
+ * so a hung git never blocks the indexer.
9
+ */
10
+ import type { GitStatus } from './types.js';
11
+ /**
12
+ * Returns true when `dir` is the root of a git repository.
13
+ * Accepts both standard `.git/` directories and git worktrees / submodules
14
+ * where `.git` is a plain file containing a `gitdir:` pointer.
15
+ */
16
+ export declare function isRepo(dir: string): boolean;
17
+ /**
18
+ * Returns a GitStatus snapshot for the repo at `repoPath`, or null when the
19
+ * path is not a repo or git is unavailable.
20
+ */
21
+ export declare function getGitStatus(repoPath: string): GitStatus | null;
22
+ /**
23
+ * Parses the `origin` remote URL of the repo at `repoPath` and extracts the
24
+ * GitHub org (or user) name. Returns `{ remote, org }` where either may be
25
+ * null when unavailable or not a recognised GitHub URL.
26
+ *
27
+ * Handles both HTTPS and SSH remote formats:
28
+ * https://github.com/<org>/<repo>.git
29
+ * git@github.com:<org>/<repo>.git
30
+ */
31
+ export declare function getRemoteOrg(repoPath: string): {
32
+ remote: string | null;
33
+ org: string | null;
34
+ };
@@ -0,0 +1,115 @@
1
+ /**
2
+ * git.ts — lightweight Git introspection helpers.
3
+ *
4
+ * Rules:
5
+ * - Zero third-party deps; Node builtins only.
6
+ * - Never throw — return null / zero-filled values on any error.
7
+ * - Every execFileSync call gets a tight timeout (5 s) and stdio:'pipe'
8
+ * so a hung git never blocks the indexer.
9
+ */
10
+ import { execFileSync } from 'node:child_process';
11
+ import { existsSync, statSync } from 'node:fs';
12
+ import { join } from 'node:path';
13
+ // ---------------------------------------------------------------------------
14
+ // Internal helpers
15
+ // ---------------------------------------------------------------------------
16
+ const GIT_TIMEOUT = 5_000; // ms
17
+ /**
18
+ * Run a git command inside `cwd`. Returns trimmed stdout or null on error.
19
+ */
20
+ function git(cwd, args) {
21
+ try {
22
+ const out = execFileSync('git', args, {
23
+ cwd,
24
+ timeout: GIT_TIMEOUT,
25
+ stdio: 'pipe',
26
+ encoding: 'utf8',
27
+ });
28
+ return out.trim();
29
+ }
30
+ catch {
31
+ return null;
32
+ }
33
+ }
34
+ // ---------------------------------------------------------------------------
35
+ // Public API
36
+ // ---------------------------------------------------------------------------
37
+ /**
38
+ * Returns true when `dir` is the root of a git repository.
39
+ * Accepts both standard `.git/` directories and git worktrees / submodules
40
+ * where `.git` is a plain file containing a `gitdir:` pointer.
41
+ */
42
+ export function isRepo(dir) {
43
+ const gitEntry = join(dir, '.git');
44
+ if (!existsSync(gitEntry))
45
+ return false;
46
+ // Accept both directory and file (worktree / submodule)
47
+ const st = statSync(gitEntry, { throwIfNoEntry: false });
48
+ return st !== undefined; // exists as either file or dir
49
+ }
50
+ /**
51
+ * Returns a GitStatus snapshot for the repo at `repoPath`, or null when the
52
+ * path is not a repo or git is unavailable.
53
+ */
54
+ export function getGitStatus(repoPath) {
55
+ if (!isRepo(repoPath))
56
+ return null;
57
+ // --- branch ---
58
+ const branchRaw = git(repoPath, ['rev-parse', '--abbrev-ref', 'HEAD']);
59
+ if (branchRaw === null)
60
+ return null; // git not available / not a real repo
61
+ const branch = branchRaw || 'HEAD'; // detached HEAD shows 'HEAD'
62
+ // --- dirty (number of changed lines in porcelain output) ---
63
+ const porcelain = git(repoPath, ['status', '--porcelain']);
64
+ const dirty = porcelain === null || porcelain === ''
65
+ ? 0
66
+ : porcelain.split('\n').filter(Boolean).length;
67
+ // --- ahead / behind upstream ---
68
+ let ahead = 0;
69
+ let behind = 0;
70
+ const revCount = git(repoPath, [
71
+ 'rev-list',
72
+ '--left-right',
73
+ '--count',
74
+ '@{u}...HEAD',
75
+ ]);
76
+ if (revCount !== null) {
77
+ // Output is "<behind>\t<ahead>" (left=upstream, right=HEAD)
78
+ const parts = revCount.split(/\s+/);
79
+ if (parts.length >= 2) {
80
+ behind = parseInt(parts[0] ?? '0', 10) || 0;
81
+ ahead = parseInt(parts[1] ?? '0', 10) || 0;
82
+ }
83
+ }
84
+ // If no upstream is configured, revCount is null → ahead/behind stay 0.
85
+ // --- last commit ISO timestamp ---
86
+ const lastCommit = git(repoPath, ['log', '-1', '--format=%cI']) || null;
87
+ return { branch, dirty, ahead, behind, lastCommit };
88
+ }
89
+ /**
90
+ * Parses the `origin` remote URL of the repo at `repoPath` and extracts the
91
+ * GitHub org (or user) name. Returns `{ remote, org }` where either may be
92
+ * null when unavailable or not a recognised GitHub URL.
93
+ *
94
+ * Handles both HTTPS and SSH remote formats:
95
+ * https://github.com/<org>/<repo>.git
96
+ * git@github.com:<org>/<repo>.git
97
+ */
98
+ export function getRemoteOrg(repoPath) {
99
+ const remote = git(repoPath, ['remote', 'get-url', 'origin']);
100
+ if (!remote)
101
+ return { remote: null, org: null };
102
+ // HTTPS: https://github.com/org/repo(.git)?
103
+ const httpsMatch = remote.match(/^https?:\/\/(?:[^@]+@)?github\.com\/([^/]+)\//i);
104
+ if (httpsMatch) {
105
+ return { remote, org: httpsMatch[1] ?? null };
106
+ }
107
+ // SSH: git@github.com:org/repo(.git)?
108
+ const sshMatch = remote.match(/^git@github\.com:([^/]+)\//i);
109
+ if (sshMatch) {
110
+ return { remote, org: sshMatch[1] ?? null };
111
+ }
112
+ // Remote exists but is not GitHub (e.g. local path, other host)
113
+ return { remote, org: null };
114
+ }
115
+ //# sourceMappingURL=git.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"git.js","sourceRoot":"","sources":["../../src/core/git.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,82 @@
1
+ /**
2
+ * advance.ts — M28: advance a Goal by running its NEXT actionable milestone
3
+ * through the EXACT M21/M24 sandboxed, proposal-only execution path.
4
+ *
5
+ * THIS IS THE SAFETY-CRITICAL MODULE. The adversarial review WILL try to break
6
+ * the invariants below — they are enforced here, verbatim:
7
+ *
8
+ * 1. SANDBOXED + PROPOSAL-ONLY EXECUTION. advanceGoal() calls runSwarm with
9
+ * opts { sandbox:true, requireSandbox:true, propose:true } + a HARD budget,
10
+ * ALWAYS. It NEVER runs a swarm against the real working tree, NEVER ships,
11
+ * pushes, opens PRs, deploys, or applies a proposal. The ONLY execution
12
+ * sink is a PENDING inbox proposal (produced BY runSwarm's propose path).
13
+ * This module imports/invokes NONE of the outward-action sinks (no
14
+ * proposal-apply, no proposal-approve status write, no remote push, no PR
15
+ * creation, no deploy) — verified by a source-level grep guard in tests.
16
+ *
17
+ * 2. ENROLLMENT-SCOPED. Before ANY swarm starts, advanceGoal() resolves the
18
+ * goal's project and calls assertMayMutate(repo, { allowAnyRepo }) — which
19
+ * ALSO checks the kill switch. A non-enrolled repo (or kill switch on)
20
+ * HARD-ERRORS before runSwarm is ever reached. A goal with no project
21
+ * cannot be advanced. DEFAULT enrollment EMPTY => nothing executes.
22
+ *
23
+ * 3. STEERABLE + BOUNDED. There is NO auto-advance loop here. advanceGoal()
24
+ * advances exactly ONE milestone per call (the user's explicit gate). The
25
+ * budget is hard-capped. nextActionableMilestone() is a pure READ seam the
26
+ * (user-gated) daemon MAY consume — it never advances anything itself.
27
+ *
28
+ * 4. READ-ONLY TRACKING. progressOf() / nextActionableMilestone() mutate
29
+ * nothing; they only read the Goal record + swarm/inbox state.
30
+ */
31
+ import type { AdvanceOptions, AshlrConfig, Goal, GoalProgress, Milestone, SwarmRun } from '../types.js';
32
+ /**
33
+ * Return the NEXT actionable milestone of a goal: the lowest-`order` milestone
34
+ * with status 'pending', when the goal itself is not paused/archived/done.
35
+ * Returns null when the goal is paused/archived/done or has no pending
36
+ * milestone.
37
+ *
38
+ * SEQUENCING GUARD (dependency-ordered plans): an EARLIER non-terminal
39
+ * milestone — one still 'in-progress' or left 'blocked' (e.g. a prior advance
40
+ * that threw / needs a human) — GATES the plan. When such a milestone precedes
41
+ * the lowest pending one, we return null rather than skipping ahead, so a
42
+ * sequenced plan never advances out of order past a stuck step. (A 'paused'
43
+ * milestone is an explicit human steering decision, NOT a stuck step, so it
44
+ * does NOT gate — the human deliberately set it aside.)
45
+ *
46
+ * Pure & read-only — this is the seam the user-gated daemon may consume to find
47
+ * goal work. It NEVER advances, runs a swarm, or mutates anything.
48
+ */
49
+ export declare function nextActionableMilestone(goal: Goal): Milestone | null;
50
+ /**
51
+ * Advance a goal by running its NEXT actionable milestone exactly once.
52
+ *
53
+ * Flow (ALL steps mandatory):
54
+ * 1. loadGoal(goalId); resolve the next actionable milestone (else throw).
55
+ * 2. The goal MUST be bound to a project — resolve(goal.project). A goal with
56
+ * no project HARD-ERRORS (cannot be advanced).
57
+ * 3. assertMayMutate(repo, { allowAnyRepo }) — enrollment + kill-switch GATE.
58
+ * Throws (HARD-ERROR) BEFORE any swarm starts if the repo is not enrolled
59
+ * or the kill switch is on.
60
+ * 4. updateMilestoneStatus(... 'in-progress').
61
+ * 5. runSwarm({ goal, specId }, cfg, { sandbox:true, requireSandbox:true,
62
+ * propose:true, budget, allowCloud, project:repo }, sink). // NON-NEGOTIABLE
63
+ * 6. Inspect run.status: 'done' with a PENDING proposal => link swarmId +
64
+ * proposalId, set 'proposed'; otherwise => link swarmId, set 'blocked'.
65
+ * 7. Return the SwarmRun for tracking. NEVER approve/apply the proposal.
66
+ *
67
+ * This module NEVER applies/approves the proposal, never pushes to a remote,
68
+ * never opens a PR, and never deploys. The proposal is left PENDING for a human.
69
+ *
70
+ * @param sink optional StreamSink for the swarm; a no-op sink is used if omitted.
71
+ */
72
+ export declare function advanceGoal(goalId: string, cfg: AshlrConfig, opts?: AdvanceOptions, sink?: (e: unknown) => void): Promise<SwarmRun>;
73
+ /**
74
+ * Compute a read-only GoalProgress roll-up for a goal: per-status counts, the
75
+ * proposed/done totals, fractionDone, and the next actionable milestone id.
76
+ *
77
+ * Pure analysis over the Goal record, with an optional read-only reconcile of a
78
+ * 'proposed' milestone to 'done' when its linked proposal was applied OUT OF
79
+ * BAND (loadProposal — never mutates the proposal). Mutates NOTHING. Never
80
+ * throws.
81
+ */
82
+ export declare function progressOf(goal: Goal): GoalProgress;
@@ -0,0 +1,263 @@
1
+ /**
2
+ * advance.ts — M28: advance a Goal by running its NEXT actionable milestone
3
+ * through the EXACT M21/M24 sandboxed, proposal-only execution path.
4
+ *
5
+ * THIS IS THE SAFETY-CRITICAL MODULE. The adversarial review WILL try to break
6
+ * the invariants below — they are enforced here, verbatim:
7
+ *
8
+ * 1. SANDBOXED + PROPOSAL-ONLY EXECUTION. advanceGoal() calls runSwarm with
9
+ * opts { sandbox:true, requireSandbox:true, propose:true } + a HARD budget,
10
+ * ALWAYS. It NEVER runs a swarm against the real working tree, NEVER ships,
11
+ * pushes, opens PRs, deploys, or applies a proposal. The ONLY execution
12
+ * sink is a PENDING inbox proposal (produced BY runSwarm's propose path).
13
+ * This module imports/invokes NONE of the outward-action sinks (no
14
+ * proposal-apply, no proposal-approve status write, no remote push, no PR
15
+ * creation, no deploy) — verified by a source-level grep guard in tests.
16
+ *
17
+ * 2. ENROLLMENT-SCOPED. Before ANY swarm starts, advanceGoal() resolves the
18
+ * goal's project and calls assertMayMutate(repo, { allowAnyRepo }) — which
19
+ * ALSO checks the kill switch. A non-enrolled repo (or kill switch on)
20
+ * HARD-ERRORS before runSwarm is ever reached. A goal with no project
21
+ * cannot be advanced. DEFAULT enrollment EMPTY => nothing executes.
22
+ *
23
+ * 3. STEERABLE + BOUNDED. There is NO auto-advance loop here. advanceGoal()
24
+ * advances exactly ONE milestone per call (the user's explicit gate). The
25
+ * budget is hard-capped. nextActionableMilestone() is a pure READ seam the
26
+ * (user-gated) daemon MAY consume — it never advances anything itself.
27
+ *
28
+ * 4. READ-ONLY TRACKING. progressOf() / nextActionableMilestone() mutate
29
+ * nothing; they only read the Goal record + swarm/inbox state.
30
+ */
31
+ import { resolve } from 'node:path';
32
+ import { assertMayMutate } from '../sandbox/policy.js';
33
+ import { runSwarm } from '../swarm/runner.js';
34
+ import { loadSwarm } from '../swarm/store.js';
35
+ import { loadProposal, listProposals } from '../inbox/store.js';
36
+ import { loadGoal, updateMilestoneStatus } from './store.js';
37
+ // ---------------------------------------------------------------------------
38
+ // HARD per-advance budget — a goal advance is ALWAYS bounded.
39
+ // ---------------------------------------------------------------------------
40
+ /** Default HARD ceiling for a single milestone advance. allowCloud defaults off. */
41
+ const DEFAULT_ADVANCE_BUDGET = {
42
+ maxTokens: 200_000,
43
+ maxSteps: 40,
44
+ allowCloud: false,
45
+ };
46
+ // ---------------------------------------------------------------------------
47
+ // nextActionableMilestone — pure READ seam (no mutation, no swarm).
48
+ // ---------------------------------------------------------------------------
49
+ /**
50
+ * Return the NEXT actionable milestone of a goal: the lowest-`order` milestone
51
+ * with status 'pending', when the goal itself is not paused/archived/done.
52
+ * Returns null when the goal is paused/archived/done or has no pending
53
+ * milestone.
54
+ *
55
+ * SEQUENCING GUARD (dependency-ordered plans): an EARLIER non-terminal
56
+ * milestone — one still 'in-progress' or left 'blocked' (e.g. a prior advance
57
+ * that threw / needs a human) — GATES the plan. When such a milestone precedes
58
+ * the lowest pending one, we return null rather than skipping ahead, so a
59
+ * sequenced plan never advances out of order past a stuck step. (A 'paused'
60
+ * milestone is an explicit human steering decision, NOT a stuck step, so it
61
+ * does NOT gate — the human deliberately set it aside.)
62
+ *
63
+ * Pure & read-only — this is the seam the user-gated daemon may consume to find
64
+ * goal work. It NEVER advances, runs a swarm, or mutates anything.
65
+ */
66
+ export function nextActionableMilestone(goal) {
67
+ if (goal.status === 'paused' || goal.status === 'archived' || goal.status === 'done') {
68
+ return null;
69
+ }
70
+ const ordered = [...goal.milestones].sort((a, b) => a.order - b.order);
71
+ const firstPending = ordered.find((m) => m.status === 'pending');
72
+ if (!firstPending)
73
+ return null;
74
+ // If any EARLIER milestone is still non-terminal ('in-progress' or 'blocked'),
75
+ // the plan is gated on it — do NOT advance past it to a later pending one.
76
+ const blockedEarlier = ordered.some((m) => m.order < firstPending.order &&
77
+ (m.status === 'in-progress' || m.status === 'blocked'));
78
+ if (blockedEarlier)
79
+ return null;
80
+ return firstPending;
81
+ }
82
+ // ---------------------------------------------------------------------------
83
+ // advanceGoal — the explicit, single-milestone, sandboxed proposal-only run.
84
+ // ---------------------------------------------------------------------------
85
+ /**
86
+ * Advance a goal by running its NEXT actionable milestone exactly once.
87
+ *
88
+ * Flow (ALL steps mandatory):
89
+ * 1. loadGoal(goalId); resolve the next actionable milestone (else throw).
90
+ * 2. The goal MUST be bound to a project — resolve(goal.project). A goal with
91
+ * no project HARD-ERRORS (cannot be advanced).
92
+ * 3. assertMayMutate(repo, { allowAnyRepo }) — enrollment + kill-switch GATE.
93
+ * Throws (HARD-ERROR) BEFORE any swarm starts if the repo is not enrolled
94
+ * or the kill switch is on.
95
+ * 4. updateMilestoneStatus(... 'in-progress').
96
+ * 5. runSwarm({ goal, specId }, cfg, { sandbox:true, requireSandbox:true,
97
+ * propose:true, budget, allowCloud, project:repo }, sink). // NON-NEGOTIABLE
98
+ * 6. Inspect run.status: 'done' with a PENDING proposal => link swarmId +
99
+ * proposalId, set 'proposed'; otherwise => link swarmId, set 'blocked'.
100
+ * 7. Return the SwarmRun for tracking. NEVER approve/apply the proposal.
101
+ *
102
+ * This module NEVER applies/approves the proposal, never pushes to a remote,
103
+ * never opens a PR, and never deploys. The proposal is left PENDING for a human.
104
+ *
105
+ * @param sink optional StreamSink for the swarm; a no-op sink is used if omitted.
106
+ */
107
+ export async function advanceGoal(goalId, cfg, opts, sink) {
108
+ const goal = loadGoal(goalId);
109
+ if (!goal)
110
+ throw new Error(`goal not found: ${goalId}`);
111
+ const milestone = nextActionableMilestone(goal);
112
+ if (!milestone) {
113
+ throw new Error(`goal has no actionable milestone to advance: ${goalId}`);
114
+ }
115
+ // ENROLLMENT-SCOPED: a goal with no project cannot be advanced.
116
+ if (!goal.project) {
117
+ throw new Error('goal has no enrolled project; cannot advance');
118
+ }
119
+ const repo = resolve(goal.project);
120
+ // GATE — enrollment + kill switch. Throws BEFORE any swarm starts.
121
+ //
122
+ // allowAnyRepo is a TEST SEAM ONLY: it is honored here ONLY when the process
123
+ // ALSO sets ASHLR_TEST_ALLOW_ANY_REPO=1, so a production / in-process caller
124
+ // of advanceGoal({ allowAnyRepo: true }) CANNOT bypass the enrollment check —
125
+ // closing the latent weakening of invariant #2. It NEVER bypasses the kill
126
+ // switch (assertMayMutate checks that unconditionally). NOTE: the bypass is
127
+ // deliberately NOT threaded into runSwarm/createSandbox below — the runner
128
+ // re-runs assertMayMutate(project) at swarm start WITHOUT allowAnyRepo, so
129
+ // enrollment is re-enforced even in tests; do not reopen that window.
130
+ const allowAnyRepo = opts?.allowAnyRepo === true && process.env.ASHLR_TEST_ALLOW_ANY_REPO === '1';
131
+ assertMayMutate(repo, allowAnyRepo ? { allowAnyRepo: true } : undefined);
132
+ // Mark in-progress so tracking reflects the active advance.
133
+ updateMilestoneStatus(goalId, milestone.id, 'in-progress');
134
+ const budget = {
135
+ ...DEFAULT_ADVANCE_BUDGET,
136
+ ...(opts?.budget ?? {}),
137
+ allowCloud: opts?.allowCloud ?? false,
138
+ };
139
+ // SANDBOXED + PROPOSAL-ONLY — these three flags are NON-NEGOTIABLE.
140
+ //
141
+ // Wrapped in try/catch so a THROWN/aborted runSwarm (sandbox creation
142
+ // failure, provider error, mid-run kill) does NOT leave the milestone stuck
143
+ // 'in-progress' forever (which would make it permanently unadvanceable AND
144
+ // let a later pending milestone advance out of order). On any throw we reset
145
+ // the milestone to 'blocked' (for human attention) before re-throwing.
146
+ let run;
147
+ try {
148
+ run = await runSwarm({
149
+ goal: `${goal.objective} — ${milestone.title}`,
150
+ specId: milestone.specId ?? undefined,
151
+ }, cfg, {
152
+ sandbox: true,
153
+ requireSandbox: true,
154
+ propose: true,
155
+ budget,
156
+ allowCloud: opts?.allowCloud ?? false,
157
+ project: repo,
158
+ }, sink ?? (() => { }));
159
+ }
160
+ catch (err) {
161
+ // Best-effort recovery: surface the milestone as 'blocked' so it remains
162
+ // re-steerable (resume/skip/re-advance) and the plan stays in order.
163
+ updateMilestoneStatus(goalId, milestone.id, 'blocked');
164
+ throw err;
165
+ }
166
+ // Correlate the PENDING proposal the swarm emitted (its ONLY sink). We do NOT
167
+ // create it here — runSwarm's propose path did. We only READ to link the id.
168
+ const proposalId = findProposalForSwarm(run.id, repo);
169
+ if ((run.status === 'done' || run.status === 'needs-approval') && proposalId) {
170
+ updateMilestoneStatus(goalId, milestone.id, 'proposed', {
171
+ swarmId: run.id,
172
+ proposalId,
173
+ });
174
+ }
175
+ else {
176
+ // Failed / aborted / escalated, or no proposal produced => blocked for a human.
177
+ updateMilestoneStatus(goalId, milestone.id, 'blocked', {
178
+ swarmId: run.id,
179
+ proposalId: proposalId ?? null,
180
+ });
181
+ }
182
+ return run;
183
+ }
184
+ /**
185
+ * READ-ONLY correlation: find the PENDING proposal the swarm produced. The
186
+ * runner's propose path stamps the proposal summary with `swarm=<run.id>`, so
187
+ * we match on that (and the repo). Returns the proposal id or null. Never
188
+ * mutates — pure read of the inbox.
189
+ */
190
+ function findProposalForSwarm(swarmId, repo) {
191
+ try {
192
+ const candidates = listProposals({ status: 'pending' }).filter((p) => p.origin === 'swarm' &&
193
+ (p.repo === repo || p.repo === null) &&
194
+ typeof p.summary === 'string' &&
195
+ p.summary.includes(`swarm=${swarmId}`));
196
+ // listProposals is most-recent first; take the freshest match.
197
+ return candidates[0]?.id ?? null;
198
+ }
199
+ catch {
200
+ return null;
201
+ }
202
+ }
203
+ // ---------------------------------------------------------------------------
204
+ // progressOf — read-only tracking roll-up.
205
+ // ---------------------------------------------------------------------------
206
+ /**
207
+ * Compute a read-only GoalProgress roll-up for a goal: per-status counts, the
208
+ * proposed/done totals, fractionDone, and the next actionable milestone id.
209
+ *
210
+ * Pure analysis over the Goal record, with an optional read-only reconcile of a
211
+ * 'proposed' milestone to 'done' when its linked proposal was applied OUT OF
212
+ * BAND (loadProposal — never mutates the proposal). Mutates NOTHING. Never
213
+ * throws.
214
+ */
215
+ export function progressOf(goal) {
216
+ const byStatus = {};
217
+ let proposed = 0;
218
+ let done = 0;
219
+ let skipped = 0;
220
+ for (const m of goal.milestones) {
221
+ // Read-only reconcile: any milestone carrying a linked proposalId whose
222
+ // proposal was applied OUT OF BAND counts as done — including a 'blocked'
223
+ // or still 'in-progress' milestone (advance links proposalId on the blocked
224
+ // branch when a 'needs-approval' run produced one), not only 'proposed'.
225
+ // Without this a goal could under-report completion and never roll to 'done'
226
+ // after its proposal was applied. We NEVER mutate the proposal or the goal.
227
+ let effective = m.status;
228
+ if ((m.status === 'proposed' || m.status === 'blocked' || m.status === 'in-progress') &&
229
+ m.proposalId) {
230
+ try {
231
+ const p = loadProposal(m.proposalId);
232
+ if (p && p.status === 'applied')
233
+ effective = 'done';
234
+ }
235
+ catch {
236
+ /* read-only best-effort */
237
+ }
238
+ }
239
+ byStatus[effective] = (byStatus[effective] ?? 0) + 1;
240
+ if (effective === 'proposed')
241
+ proposed += 1;
242
+ if (effective === 'done')
243
+ done += 1;
244
+ if (effective === 'skipped')
245
+ skipped += 1;
246
+ }
247
+ const total = goal.milestones.length;
248
+ const denom = total - skipped;
249
+ const fractionDone = denom > 0 ? done / denom : 0;
250
+ return {
251
+ goalId: goal.id,
252
+ total,
253
+ byStatus,
254
+ proposed,
255
+ done,
256
+ fractionDone,
257
+ nextActionableId: nextActionableMilestone(goal)?.id ?? null,
258
+ };
259
+ }
260
+ // Keep loadSwarm imported as the documented read-only tracking handle the CLI
261
+ // status dashboard may use to surface swarm progress (read-only, never mutates).
262
+ void loadSwarm;
263
+ //# sourceMappingURL=advance.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"advance.js","sourceRoot":"","sources":["../../../src/core/goals/advance.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,58 @@
1
+ /**
2
+ * planner.ts — M28: deterministic-by-default decomposition of an OBJECTIVE
3
+ * into ordered MILESTONES, and per-milestone spec authoring.
4
+ *
5
+ * SAFETY / DESIGN (see docs/contracts/CONTRACT-M28.md):
6
+ * - LOCAL-FIRST: decomposeGoal is DETERMINISTIC by default (a heuristic split
7
+ * — NO LLM, ZERO network). Optional LLM-assisted refinement routes ONLY
8
+ * through getActiveClient(cfg, { allowCloud }) — local Ollama/LM Studio
9
+ * unless --allow-cloud + a configured key (mirrors M25/M26/M27). The default
10
+ * path makes ZERO non-localhost connections.
11
+ * - BOUNDED: the number of milestones is hard-capped by maxMilestones.
12
+ * - NO OUTWARD ACTION: planning NEVER runs a swarm, NEVER touches a user repo
13
+ * working tree, NEVER pushes/PRs/deploys. planMilestoneSpec authors a spec
14
+ * via spec-store (writes ONLY under the spec store, never a user tree).
15
+ * - No new runtime deps; node builtins + existing modules only.
16
+ */
17
+ import type { AshlrConfig, DecomposeOptions, Goal, Milestone, SpecArtifact } from '../types.js';
18
+ /**
19
+ * Decompose a high-level `objective` into an ordered list of Milestones.
20
+ *
21
+ * DEFAULT (local, deterministic): split the objective into a bounded sequence
22
+ * of ordered milestones using a pure heuristic (numbered-list / "then" /
23
+ * sentence segmentation, plus a standard scaffold of phases when the objective
24
+ * is a single clause). NO model is called; ZERO network.
25
+ *
26
+ * OPTIONAL (opts.allowCloud): refine the deterministic split's titles/details
27
+ * via getActiveClient(cfg, { allowCloud }) — local-first; cloud only with a
28
+ * configured key. Refinement NEVER increases the count beyond the cap and
29
+ * falls back to the deterministic split on any model error.
30
+ *
31
+ * Returns plain Milestone[] (status 'pending', specId/swarmId/proposalId null,
32
+ * order assigned 0..n). Does NOT persist — the caller (store.addMilestone /
33
+ * the CLI `goals plan`) materializes them. Bounded by
34
+ * min(opts.maxMilestones ?? DEFAULT_MAX_MILESTONES, HARD_MAX_MILESTONES).
35
+ * Never throws.
36
+ */
37
+ export declare function decomposeGoal(objective: string, cfg: AshlrConfig, opts?: DecomposeOptions): Promise<Milestone[]>;
38
+ /**
39
+ * Author (or link) a versioned SpecArtifact for a single milestone of a goal.
40
+ *
41
+ * Delegates to spec-store.authorSpec(goal-derived-prompt, cfg, { project }),
42
+ * which is local-first and idempotent (v1 is reused if it already exists).
43
+ * The authored spec is scoped to the goal's `project` when set. Returns the
44
+ * SpecArtifact so the caller can persist milestone.specId = artifact.id via
45
+ * store.updateMilestoneStatus.
46
+ *
47
+ * NEVER runs a swarm and NEVER touches a user repo working tree — authorSpec
48
+ * only writes to the spec store (project/.ashlr/specs or ~/.ashlr/specs).
49
+ *
50
+ * LOCAL-FIRST: `opts.allowCloud` is threaded straight into authorSpec and
51
+ * defaults to FALSE, so the no-flag `goals plan` path can NEVER reach a cloud
52
+ * provider for spec authoring even when a cloud provider sits in the configured
53
+ * providerChain (closing the default-path cloud-egress gap). Cloud authoring
54
+ * happens ONLY when the user explicitly passed --allow-cloud.
55
+ */
56
+ export declare function planMilestoneSpec(goal: Goal, milestone: Milestone, cfg: AshlrConfig, opts?: {
57
+ allowCloud?: boolean;
58
+ }): Promise<SpecArtifact>;