@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,513 @@
1
+ /**
2
+ * core/lifecycle/ship.ts — pre-ship gate + optional deploy for `ashlr ship`.
3
+ *
4
+ * `runShipGate` is READ-ONLY: it scans, runs scripts, and reports.
5
+ * `deploy` is the ONLY place an outward action can happen, and ONLY when
6
+ * opts.confirm === true. Default is always dry-run.
7
+ *
8
+ * Both functions NEVER throw — errors are captured in ShipCheck / detail strings.
9
+ */
10
+ import { existsSync, readFileSync } from 'node:fs';
11
+ import { join, resolve } from 'node:path';
12
+ import { spawnSync } from 'node:child_process';
13
+ import { loadConfig } from '../config.js';
14
+ import { withToolEnv } from '../env-bridge.js';
15
+ // ---------------------------------------------------------------------------
16
+ // Constants
17
+ // ---------------------------------------------------------------------------
18
+ /** Max ms to wait for test / lint / build scripts. */
19
+ const SCRIPT_TIMEOUT_MS = 120_000;
20
+ /** Max ms to wait for binshield scan. */
21
+ const BINSHIELD_TIMEOUT_MS = 60_000;
22
+ /** Max ms to wait for deploy commands. */
23
+ const DEPLOY_TIMEOUT_MS = 300_000;
24
+ // ---------------------------------------------------------------------------
25
+ // Helpers
26
+ // ---------------------------------------------------------------------------
27
+ function makeCheck(id, label, status, detail, fix) {
28
+ const c = { id, label, status, detail };
29
+ if (fix !== undefined)
30
+ c.fix = fix;
31
+ return c;
32
+ }
33
+ /** Run a command synchronously, returning { stdout, stderr, exitCode, error }. */
34
+ function runSync(cmd, args, cwd, timeoutMs, env) {
35
+ try {
36
+ const result = spawnSync(cmd, args, {
37
+ encoding: 'utf8',
38
+ cwd,
39
+ timeout: timeoutMs,
40
+ maxBuffer: 4 * 1024 * 1024, // 4 MB
41
+ ...(env !== undefined ? { env } : {}),
42
+ });
43
+ const timedOut = result.signal === 'SIGTERM' || result.error?.code === 'ETIMEDOUT';
44
+ return {
45
+ stdout: (result.stdout ?? '').trim(),
46
+ stderr: (result.stderr ?? '').trim(),
47
+ exitCode: result.status,
48
+ timedOut,
49
+ error: result.error ? result.error.message : undefined,
50
+ };
51
+ }
52
+ catch (err) {
53
+ return {
54
+ stdout: '',
55
+ stderr: '',
56
+ exitCode: null,
57
+ timedOut: false,
58
+ error: err instanceof Error ? err.message : String(err),
59
+ };
60
+ }
61
+ }
62
+ /** Detect a tool on PATH by running `which <tool>`. Returns path or null. */
63
+ function whichSync(tool) {
64
+ try {
65
+ const result = spawnSync('which', [tool], { encoding: 'utf8', timeout: 5_000 });
66
+ if (result.status === 0) {
67
+ const out = (result.stdout ?? '').trim();
68
+ return out.length > 0 ? out : null;
69
+ }
70
+ return null;
71
+ }
72
+ catch {
73
+ return null;
74
+ }
75
+ }
76
+ /** First non-empty line of (preferred || fallback) output, or '' when none. */
77
+ function firstNonEmptyLine(preferred, fallback) {
78
+ return (preferred || fallback).split('\n').find((l) => l.trim()) ?? '';
79
+ }
80
+ /** Compact error summary: first 5 lines of (preferred || fallback), capped at 300 chars. */
81
+ function summarizeErrOutput(preferred, fallback) {
82
+ return (preferred || fallback).split('\n').slice(0, 5).join(' | ').slice(0, 300);
83
+ }
84
+ /** Read and parse package.json in a project directory. Returns null on any failure. */
85
+ function readPackageJson(projectPath) {
86
+ try {
87
+ const pkgPath = join(projectPath, 'package.json');
88
+ if (!existsSync(pkgPath))
89
+ return null;
90
+ const raw = readFileSync(pkgPath, 'utf8');
91
+ return JSON.parse(raw);
92
+ }
93
+ catch {
94
+ return null;
95
+ }
96
+ }
97
+ /** Extract the scripts map from a parsed package.json. */
98
+ function getScripts(pkg) {
99
+ const scripts = pkg['scripts'];
100
+ if (scripts && typeof scripts === 'object' && !Array.isArray(scripts)) {
101
+ return scripts;
102
+ }
103
+ return {};
104
+ }
105
+ /** Check whether an npm script exists. */
106
+ function hasScript(scripts, name) {
107
+ return Object.prototype.hasOwnProperty.call(scripts, name) && typeof scripts[name] === 'string';
108
+ }
109
+ // ---------------------------------------------------------------------------
110
+ // Check 1: Supply-chain (binshield or built-in fallback)
111
+ // ---------------------------------------------------------------------------
112
+ /** Patterns that suggest a risky dep value (git/http URLs in package.json). */
113
+ const RISKY_DEP_PATTERNS = [
114
+ /^git\+https?:\/\//i,
115
+ /^git:\/\//i,
116
+ /^https?:\/\//i,
117
+ /^github:/i,
118
+ /^bitbucket:/i,
119
+ /^gitlab:/i,
120
+ ];
121
+ function isRiskyDepValue(val) {
122
+ if (typeof val !== 'string')
123
+ return false;
124
+ return RISKY_DEP_PATTERNS.some((re) => re.test(val));
125
+ }
126
+ /** Built-in dependency sanity check (used when binshield is absent). */
127
+ function builtInSupplyChainCheck(projectPath) {
128
+ const id = 'supply-chain';
129
+ const label = 'Supply-chain check';
130
+ const pkg = readPackageJson(projectPath);
131
+ if (pkg === null) {
132
+ // No package.json — skip (might be a non-Node project)
133
+ return makeCheck(id, label, 'skip', 'No package.json found — skipping dependency check');
134
+ }
135
+ const warnings = [];
136
+ // 1. Check for git/http URL deps in dependencies + devDependencies
137
+ for (const depField of ['dependencies', 'devDependencies', 'peerDependencies', 'optionalDependencies']) {
138
+ const deps = pkg[depField];
139
+ if (deps && typeof deps === 'object' && !Array.isArray(deps)) {
140
+ for (const [name, val] of Object.entries(deps)) {
141
+ if (isRiskyDepValue(val)) {
142
+ warnings.push(`${depField}.${name}: remote URL dep "${val}"`);
143
+ }
144
+ }
145
+ }
146
+ }
147
+ // 2. Check for install scripts in the project's own package.json
148
+ const scripts = getScripts(pkg);
149
+ for (const scriptName of ['preinstall', 'install', 'postinstall', 'prepare']) {
150
+ if (hasScript(scripts, scriptName)) {
151
+ warnings.push(`install script "${scriptName}" present: ${scripts[scriptName]}`);
152
+ }
153
+ }
154
+ // 3. Check for a lockfile
155
+ const lockfiles = ['package-lock.json', 'yarn.lock', 'pnpm-lock.yaml', 'bun.lockb'];
156
+ const hasLockfile = lockfiles.some((f) => existsSync(join(projectPath, f)));
157
+ if (!hasLockfile) {
158
+ warnings.push('no lockfile found (package-lock.json / yarn.lock / pnpm-lock.yaml / bun.lockb)');
159
+ }
160
+ if (warnings.length === 0) {
161
+ return makeCheck(id, label, 'pass', 'Built-in dep check: no risky patterns found, lockfile present');
162
+ }
163
+ const detail = `Built-in dep check — ${warnings.length} warning(s): ${warnings.join('; ')}`;
164
+ const fix = warnings.some((w) => w.includes('install script'))
165
+ ? 'Review install scripts and remote URL deps before shipping'
166
+ : 'Consider pinning dependencies to exact versions and committing a lockfile';
167
+ return makeCheck(id, label, 'warn', detail, fix);
168
+ }
169
+ /** Supply-chain check: binshield if installed, else built-in fallback. */
170
+ function checkSupplyChain(projectPath) {
171
+ const id = 'supply-chain';
172
+ const label = 'Supply-chain check';
173
+ const binshieldPath = whichSync('binshield');
174
+ if (binshieldPath !== null) {
175
+ // Run binshield scan (read-only)
176
+ const result = runSync('binshield', ['scan', '.'], projectPath, BINSHIELD_TIMEOUT_MS);
177
+ if (result.timedOut) {
178
+ return makeCheck(id, label, 'warn', 'binshield scan timed out', 'Run binshield scan manually');
179
+ }
180
+ if (result.error) {
181
+ return makeCheck(id, label, 'warn', `binshield error: ${result.error}`, 'Check binshield installation');
182
+ }
183
+ if (result.exitCode === 0) {
184
+ const detail = result.stdout
185
+ ? `binshield: ${result.stdout.split('\n')[0]}`
186
+ : 'binshield scan passed';
187
+ return makeCheck(id, label, 'pass', detail);
188
+ }
189
+ // Non-zero exit — extract useful detail
190
+ const combined = [result.stdout, result.stderr].filter(Boolean).join('\n');
191
+ const firstLine = combined.split('\n')[0] ?? 'scan found issues';
192
+ return makeCheck(id, label, 'fail', `binshield: ${firstLine}`, 'Review binshield findings and remediate before shipping');
193
+ }
194
+ // No binshield — fall back to built-in check
195
+ return builtInSupplyChainCheck(projectPath);
196
+ }
197
+ // ---------------------------------------------------------------------------
198
+ // Check 2-4: npm script runners (test, lint, build)
199
+ // ---------------------------------------------------------------------------
200
+ function runScriptCheck(checkId, label, scriptName, projectPath, scripts) {
201
+ if (!hasScript(scripts, scriptName)) {
202
+ return makeCheck(checkId, label, 'skip', `No "${scriptName}" script in package.json`);
203
+ }
204
+ const result = runSync('npm', ['run', scriptName, '--silent'], projectPath, SCRIPT_TIMEOUT_MS);
205
+ if (result.timedOut) {
206
+ return makeCheck(checkId, label, 'fail', `"${scriptName}" script timed out after ${SCRIPT_TIMEOUT_MS / 1000}s`, `Investigate slow ${scriptName} or increase timeout`);
207
+ }
208
+ if (result.error) {
209
+ return makeCheck(checkId, label, 'fail', `Failed to run "${scriptName}": ${result.error}`, 'Ensure npm is installed and package.json is valid');
210
+ }
211
+ if (result.exitCode === 0) {
212
+ // Summarize output: first non-empty line or generic success
213
+ const firstLine = firstNonEmptyLine(result.stdout, result.stderr);
214
+ const detail = firstLine
215
+ ? `"${scriptName}" passed: ${firstLine.slice(0, 120)}`
216
+ : `"${scriptName}" passed`;
217
+ return makeCheck(checkId, label, 'pass', detail);
218
+ }
219
+ // Script failed — capture relevant output
220
+ const errOutput = summarizeErrOutput(result.stderr, result.stdout);
221
+ return makeCheck(checkId, label, 'fail', `"${scriptName}" failed (exit ${result.exitCode ?? 'null'}): ${errOutput}`, `Fix failing ${scriptName} before shipping`);
222
+ }
223
+ // ---------------------------------------------------------------------------
224
+ // Check 5: Secrets scan
225
+ // ---------------------------------------------------------------------------
226
+ /** Obvious key patterns to flag in tracked file contents. */
227
+ const SECRET_PATTERNS = [
228
+ { label: 'AWS access key', re: /AKIA[0-9A-Z]{16}/ },
229
+ { label: 'AWS secret key', re: /aws_secret_access_key\s*=\s*["']?[A-Za-z0-9/+=]{40}["']?/i },
230
+ { label: 'generic API key', re: /api[_-]?key\s*[:=]\s*["']?[A-Za-z0-9_-]{20,}["']?/i },
231
+ { label: 'Bearer token', re: /bearer\s+[A-Za-z0-9\-._~+/]+=*/i },
232
+ { label: 'private key header', re: /-----BEGIN (RSA |EC |OPENSSH |DSA )?PRIVATE KEY-----/ },
233
+ { label: 'GitHub token', re: /ghp_[A-Za-z0-9]{36}|github_pat_[A-Za-z0-9_]{82}/ },
234
+ { label: 'Stripe secret key', re: /sk_(live|test)_[A-Za-z0-9]{20,}/ },
235
+ { label: 'Anthropic API key', re: /sk-ant-[A-Za-z0-9\-_]{20,}/ },
236
+ { label: 'OpenAI API key', re: /\bsk-[A-Za-z0-9]{32,}\b/ },
237
+ { label: 'password assignment', re: /password\s*[:=]\s*["'][^"']{8,}["']/i },
238
+ ];
239
+ /** Check for committed .env files or obvious secret patterns in tracked files. */
240
+ function checkSecrets(projectPath) {
241
+ const id = 'secrets';
242
+ const label = 'Secrets scan';
243
+ // Check if this is a git repo
244
+ const gitResult = runSync('git', ['rev-parse', '--git-dir'], projectPath, 5_000);
245
+ if (gitResult.exitCode !== 0) {
246
+ return makeCheck(id, label, 'skip', 'Not a git repository — skipping secrets scan');
247
+ }
248
+ const findings = [];
249
+ // 1. Check for .env files tracked by git.
250
+ // List candidates directly (NUL-separated) WITHOUT --error-unmatch: that flag
251
+ // exits 1 whenever ANY pathspec has no match, which would skip the whole
252
+ // branch even when a real .env / .env.production IS tracked. Any non-empty
253
+ // output here is a finding.
254
+ const lsFilesResult = runSync('git', ['ls-files', '-z', '--', '*.env', '.env', '.env.*'], projectPath, 10_000);
255
+ if (lsFilesResult.exitCode === 0 && lsFilesResult.stdout.length > 0) {
256
+ const envFiles = lsFilesResult.stdout.split('\0').filter(Boolean);
257
+ for (const line of envFiles) {
258
+ findings.push(`.env file tracked by git: ${line}`);
259
+ }
260
+ }
261
+ // 2. Scan tracked files for obvious key patterns (bounded: only text-ish files, skip binaries)
262
+ // Get list of tracked files (limit to a reasonable count to avoid huge scans)
263
+ const trackedResult = runSync('git', ['ls-files', '--cached', '-z'], projectPath, 15_000);
264
+ if (trackedResult.exitCode === 0 && trackedResult.stdout.length > 0) {
265
+ // Split on NUL (git -z output)
266
+ const files = trackedResult.stdout.split('\0').filter(Boolean).slice(0, 500);
267
+ // Extensions we'll scan (skip known binary types)
268
+ const TEXT_EXTS = new Set([
269
+ '.ts', '.tsx', '.js', '.jsx', '.mjs', '.cjs',
270
+ '.json', '.yaml', '.yml', '.toml', '.env',
271
+ '.sh', '.bash', '.zsh', '.fish',
272
+ '.py', '.rb', '.go', '.rs', '.java', '.kt', '.swift',
273
+ '.txt', '.md', '.mdx', '.html', '.css', '.scss',
274
+ '.conf', '.cfg', '.ini', '.config',
275
+ ]);
276
+ // Any tracked env-family file (.env, .env.local, .env.production, foo.env,
277
+ // config/secrets.env) is text-scannable regardless of its trailing
278
+ // extension, which would otherwise be e.g. '.production' and miss the
279
+ // allowlist.
280
+ const ENV_FAMILY_RE = /(^|\/)\.env($|\.)|\.env$/;
281
+ const scannedPaths = new Set();
282
+ for (const relPath of files) {
283
+ const ext = relPath.includes('.') ? `.${relPath.split('.').pop().toLowerCase()}` : '';
284
+ if (!TEXT_EXTS.has(ext) && !ENV_FAMILY_RE.test(relPath))
285
+ continue;
286
+ const absPath = join(projectPath, relPath);
287
+ if (scannedPaths.has(absPath))
288
+ continue;
289
+ scannedPaths.add(absPath);
290
+ try {
291
+ if (!existsSync(absPath))
292
+ continue;
293
+ const content = readFileSync(absPath, 'utf8');
294
+ for (const { label: patLabel, re } of SECRET_PATTERNS) {
295
+ if (re.test(content)) {
296
+ // Don't add duplicates for same file + pattern
297
+ const key = `${relPath}:${patLabel}`;
298
+ if (!findings.some((f) => f.includes(key))) {
299
+ findings.push(`${relPath}: possible ${patLabel}`);
300
+ }
301
+ break; // one warning per file is enough
302
+ }
303
+ }
304
+ }
305
+ catch {
306
+ // Unreadable file — skip silently
307
+ }
308
+ }
309
+ }
310
+ if (findings.length === 0) {
311
+ return makeCheck(id, label, 'pass', 'No committed .env files or obvious key patterns found');
312
+ }
313
+ const detail = `${findings.length} finding(s): ${findings.slice(0, 3).join('; ')}${findings.length > 3 ? ` (+${findings.length - 3} more)` : ''}`;
314
+ return makeCheck(id, label, 'warn', detail, 'Remove secrets from tracked files; add to .gitignore; use phantom or env vars');
315
+ }
316
+ // ---------------------------------------------------------------------------
317
+ // runShipGate
318
+ // ---------------------------------------------------------------------------
319
+ /**
320
+ * Run all pre-ship gate checks for the project at `projectPath`.
321
+ *
322
+ * READ-ONLY: scans files and runs npm scripts. Never deploys or pushes.
323
+ * Never throws — all errors are captured as ShipCheck fail/warn/skip entries.
324
+ *
325
+ * Checks run in order:
326
+ * 1. supply-chain — binshield (if installed) else built-in dep sanity check
327
+ * 2. test — npm run test (if script exists)
328
+ * 3. lint — npm run lint (if script exists)
329
+ * 4. build — npm run build (if script exists)
330
+ * 5. secrets — git-tracked .env files + obvious key patterns
331
+ *
332
+ * `passed` is true when no check has status 'fail'.
333
+ */
334
+ export async function runShipGate(projectPath, opts) {
335
+ void opts; // strict is only consumed by the CLI (exit code); gate itself just reports
336
+ const absPath = resolve(projectPath);
337
+ const checks = [];
338
+ // Read package.json once — shared by script checks
339
+ const pkg = readPackageJson(absPath);
340
+ const scripts = pkg ? getScripts(pkg) : {};
341
+ // 1. Supply-chain
342
+ try {
343
+ checks.push(checkSupplyChain(absPath));
344
+ }
345
+ catch (err) {
346
+ checks.push(makeCheck('supply-chain', 'Supply-chain check', 'warn', `Check threw unexpectedly: ${err instanceof Error ? err.message : String(err)}`));
347
+ }
348
+ // 2. Test
349
+ try {
350
+ checks.push(runScriptCheck('test', 'Tests', 'test', absPath, scripts));
351
+ }
352
+ catch (err) {
353
+ checks.push(makeCheck('test', 'Tests', 'warn', `Test check threw: ${err instanceof Error ? err.message : String(err)}`));
354
+ }
355
+ // 3. Lint
356
+ try {
357
+ checks.push(runScriptCheck('lint', 'Lint', 'lint', absPath, scripts));
358
+ }
359
+ catch (err) {
360
+ checks.push(makeCheck('lint', 'Lint', 'warn', `Lint check threw: ${err instanceof Error ? err.message : String(err)}`));
361
+ }
362
+ // 4. Build
363
+ try {
364
+ checks.push(runScriptCheck('build', 'Build', 'build', absPath, scripts));
365
+ }
366
+ catch (err) {
367
+ checks.push(makeCheck('build', 'Build', 'warn', `Build check threw: ${err instanceof Error ? err.message : String(err)}`));
368
+ }
369
+ // 5. Secrets
370
+ try {
371
+ checks.push(checkSecrets(absPath));
372
+ }
373
+ catch (err) {
374
+ checks.push(makeCheck('secrets', 'Secrets scan', 'warn', `Secrets check threw: ${err instanceof Error ? err.message : String(err)}`));
375
+ }
376
+ // Build summary
377
+ const summary = { pass: 0, warn: 0, fail: 0, skip: 0 };
378
+ for (const c of checks) {
379
+ summary[c.status]++;
380
+ }
381
+ const passed = summary.fail === 0;
382
+ return { checks, summary, passed };
383
+ }
384
+ // ---------------------------------------------------------------------------
385
+ // deploy
386
+ // ---------------------------------------------------------------------------
387
+ /** Guidance strings for tools that are absent. */
388
+ const ABSENT_GUIDANCE = {
389
+ morphkit: 'morphkit not installed — run: npm i -g morphkit-cli (see morphkit.dev)',
390
+ binshield: 'binshield not installed — see binshield.dev',
391
+ };
392
+ /**
393
+ * Single source of truth for each deploy target's command + argv.
394
+ * Both the human display string and the spawnSync argv are derived from this,
395
+ * so they can never drift out of sync.
396
+ *
397
+ * `cmd` is the executable; `args` is the spawnSync argv. For unknown targets we
398
+ * default to `<target> deploy`.
399
+ */
400
+ function deployInvocation(target, projectPath) {
401
+ switch (target) {
402
+ case 'vercel':
403
+ // `vercel` deploys from the project directory; --prod for production
404
+ return { cmd: 'vercel', args: ['--cwd', projectPath] };
405
+ case 'stack':
406
+ return { cmd: 'stack', args: ['deploy'] };
407
+ case 'morphkit':
408
+ // morphkit has no 'deploy' command; 'generate' is the correct pipeline command
409
+ return { cmd: 'morphkit', args: ['generate', projectPath, '-o', join(projectPath, 'ios-app')] };
410
+ case 'gh':
411
+ // gh pages deploy (common gh-pages pattern)
412
+ return { cmd: 'gh', args: ['workflow', 'run', 'deploy.yml'] };
413
+ default:
414
+ return { cmd: target, args: ['deploy'] };
415
+ }
416
+ }
417
+ /**
418
+ * Render a deploy invocation as a human-readable command string. Absolute-path
419
+ * args are JSON-quoted (matching the prior buildDeployCommand output); flags and
420
+ * subcommands are left bare.
421
+ */
422
+ function formatDeployCommand(inv) {
423
+ const parts = inv.args.map((a) => (a.startsWith('/') ? JSON.stringify(a) : a));
424
+ return [inv.cmd, ...parts].join(' ');
425
+ }
426
+ /**
427
+ * Optionally deploy the project to the named target.
428
+ *
429
+ * DRY-RUN BY DEFAULT: only runs the real deploy command when `opts.confirm`
430
+ * is true. This is the ONLY function in the codebase that may execute an
431
+ * outward action.
432
+ *
433
+ * Supported targets: vercel | stack | morphkit | gh
434
+ * Detect every tool at runtime via `which`. If the tool is not installed,
435
+ * return a guidance string instead of failing.
436
+ *
437
+ * Never throws.
438
+ */
439
+ export async function deploy(projectPath, target, opts) {
440
+ const absPath = resolve(projectPath);
441
+ // Resolve the tool once; reused by the absent-guidance branch and the
442
+ // not-installed fallback below.
443
+ const toolPath = whichSync(target);
444
+ // Check for absent-with-guidance tools first
445
+ if (Object.prototype.hasOwnProperty.call(ABSENT_GUIDANCE, target)) {
446
+ const known = ABSENT_GUIDANCE[target];
447
+ if (known !== undefined) {
448
+ // Still check if it happens to be installed (e.g. user installed morphkit later)
449
+ if (toolPath === null) {
450
+ return { ran: false, dryRun: false, detail: known };
451
+ }
452
+ }
453
+ }
454
+ if (toolPath === null) {
455
+ const guidance = ABSENT_GUIDANCE[target] ?? `${target} not installed — install it to use this deploy target`;
456
+ return { ran: false, dryRun: false, detail: guidance };
457
+ }
458
+ const invocation = deployInvocation(target, absPath);
459
+ const cmd = formatDeployCommand(invocation);
460
+ // Dry-run: report what would run without executing
461
+ if (!opts.confirm) {
462
+ return {
463
+ ran: false,
464
+ dryRun: true,
465
+ detail: `DRY RUN: would run: ${cmd}`,
466
+ };
467
+ }
468
+ // --- CONFIRM path: actually run the deploy ---
469
+ // argv comes from the same table that produced the display string above.
470
+ const { cmd: spawnCmd, args: spawnArgs } = invocation;
471
+ try {
472
+ // Project unified config into the child's env so stack/vercel/gh/morphkit
473
+ // honor ~/.ashlr/config.json without modification (M10 env bridge).
474
+ const childEnv = withToolEnv(loadConfig());
475
+ const result = runSync(spawnCmd, spawnArgs, absPath, DEPLOY_TIMEOUT_MS, childEnv);
476
+ if (result.timedOut) {
477
+ return {
478
+ ran: false,
479
+ dryRun: false,
480
+ detail: `Deploy command timed out after ${DEPLOY_TIMEOUT_MS / 1000}s: ${cmd}`,
481
+ };
482
+ }
483
+ if (result.error) {
484
+ return {
485
+ ran: false,
486
+ dryRun: false,
487
+ detail: `Deploy failed to launch: ${result.error}`,
488
+ };
489
+ }
490
+ if (result.exitCode === 0) {
491
+ const firstLine = firstNonEmptyLine(result.stdout, result.stderr);
492
+ const detail = firstLine
493
+ ? `Deploy succeeded: ${firstLine.slice(0, 200)}`
494
+ : 'Deploy succeeded';
495
+ return { ran: true, dryRun: false, detail };
496
+ }
497
+ // Non-zero exit
498
+ const errOutput = summarizeErrOutput(result.stderr, result.stdout);
499
+ return {
500
+ ran: false,
501
+ dryRun: false,
502
+ detail: `Deploy failed (exit ${result.exitCode ?? 'null'}): ${errOutput}`,
503
+ };
504
+ }
505
+ catch (err) {
506
+ return {
507
+ ran: false,
508
+ dryRun: false,
509
+ detail: `Deploy threw unexpectedly: ${err instanceof Error ? err.message : String(err)}`,
510
+ };
511
+ }
512
+ }
513
+ //# sourceMappingURL=ship.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ship.js","sourceRoot":"","sources":["../../../src/core/lifecycle/ship.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,20 @@
1
+ /**
2
+ * M6: Project Lifecycle — Template Registry
3
+ *
4
+ * Four agentic-engineering starter templates for `ashlr new`.
5
+ * Pure data module — no filesystem or network access.
6
+ */
7
+ import type { ProjectTemplate } from '../types.js';
8
+ export declare const TEMPLATES: ProjectTemplate[];
9
+ /**
10
+ * M33: builtin TEMPLATES + validated templates from enabled plugins.
11
+ * Best-effort: a broken plugin layer yields the builtins only. Plugin
12
+ * template ids arrive prefixed `<plugin>:<id>` (wrappers.validateTemplate).
13
+ */
14
+ export declare function getTemplates(cfg?: import('../types.js').AshlrConfig): Promise<ProjectTemplate[]>;
15
+ export declare function getTemplate(id: string): ProjectTemplate | null;
16
+ export declare function listTemplates(): {
17
+ id: string;
18
+ title: string;
19
+ description: string;
20
+ }[];