@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":"index.js","sourceRoot":"","sources":["../../../src/core/seams/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AAEH,cAAc,YAAY,CAAC;AAC3B,cAAc,eAAe,CAAC;AAC9B,cAAc,gBAAgB,CAAC;AAC/B,cAAc,cAAc,CAAC;AAC7B,cAAc,YAAY,CAAC;AAC3B,cAAc,yBAAyB,CAAC;AACxC,cAAc,aAAa,CAAC;AAC5B,cAAc,gBAAgB,CAAC;AAC/B,cAAc,eAAe,CAAC"}
@@ -0,0 +1,50 @@
1
+ /**
2
+ * core/seams/portfolio.ts — PortfolioSync seam (M30).
3
+ *
4
+ * SEAM over core/quality/store.ts (HealthReport snapshots) + core/dashboard.ts
5
+ * (the portfolio DashboardSnapshot).
6
+ *
7
+ * (a) PortfolioSync — the interface.
8
+ * (b) LocalPortfolioSync — DEFAULT. Behavior-preserving adapter; delegates
9
+ * 1:1. Health snapshots write ONLY under
10
+ * ~/.ashlr/quality/; snapshot build is read-only.
11
+ * (c) CloudPortfolioSync — GATED stub; every method throws before any I/O.
12
+ * (d) selectPortfolioSync — local by default; gated stub ONLY when an
13
+ * endpoint is explicitly configured (still refuses).
14
+ *
15
+ * HARD SAFETY: local-first + self-hostable + cloud-gated. No new deps.
16
+ */
17
+ import type { AshlrConfig, DashboardSnapshot, HealthReport } from '../types.js';
18
+ export declare const PORTFOLIO_SEAM: {
19
+ id: "portfolio";
20
+ name: string;
21
+ delegatesTo: string;
22
+ summary: string;
23
+ };
24
+ /** Health-snapshot persistence + portfolio dashboard build. */
25
+ export interface PortfolioSync {
26
+ /** Persist a HealthReport snapshot; returns its path or null on failure. */
27
+ saveReport(report: HealthReport): string | null;
28
+ /** List persisted HealthReport snapshots, most-recent first (bounded). */
29
+ listReports(): HealthReport[];
30
+ /** Newest snapshot strictly before `before` (for trend deltas), or null. */
31
+ loadPreviousReport(before?: string): HealthReport | null;
32
+ /** Build the portfolio dashboard snapshot (read-only aggregation). */
33
+ buildSnapshot(cfg: AshlrConfig): Promise<DashboardSnapshot>;
34
+ }
35
+ /** DEFAULT local impl — pass-through adapter over the quality store + dashboard. */
36
+ export declare class LocalPortfolioSync implements PortfolioSync {
37
+ saveReport(report: HealthReport): string | null;
38
+ listReports(): HealthReport[];
39
+ loadPreviousReport(before?: string): HealthReport | null;
40
+ buildSnapshot(cfg: AshlrConfig): Promise<DashboardSnapshot>;
41
+ }
42
+ /** GATED cloud stub — a team-shared portfolio roll-up WOULD live here. Throws first. */
43
+ export declare class CloudPortfolioSync implements PortfolioSync {
44
+ saveReport(_report: HealthReport): string | null;
45
+ listReports(): HealthReport[];
46
+ loadPreviousReport(_before?: string): HealthReport | null;
47
+ buildSnapshot(_cfg: AshlrConfig): Promise<DashboardSnapshot>;
48
+ }
49
+ /** Local by default; gated stub only when an endpoint is configured (refuses). */
50
+ export declare function selectPortfolioSync(cfg: AshlrConfig): PortfolioSync;
@@ -0,0 +1,61 @@
1
+ /**
2
+ * core/seams/portfolio.ts — PortfolioSync seam (M30).
3
+ *
4
+ * SEAM over core/quality/store.ts (HealthReport snapshots) + core/dashboard.ts
5
+ * (the portfolio DashboardSnapshot).
6
+ *
7
+ * (a) PortfolioSync — the interface.
8
+ * (b) LocalPortfolioSync — DEFAULT. Behavior-preserving adapter; delegates
9
+ * 1:1. Health snapshots write ONLY under
10
+ * ~/.ashlr/quality/; snapshot build is read-only.
11
+ * (c) CloudPortfolioSync — GATED stub; every method throws before any I/O.
12
+ * (d) selectPortfolioSync — local by default; gated stub ONLY when an
13
+ * endpoint is explicitly configured (still refuses).
14
+ *
15
+ * HARD SAFETY: local-first + self-hostable + cloud-gated. No new deps.
16
+ */
17
+ import { listReports, loadPreviousReport, saveReport } from '../quality/store.js';
18
+ import { buildSnapshot } from '../dashboard.js';
19
+ import { seamEndpoint } from './registry.js';
20
+ import { cloudGatedError } from './types.js';
21
+ export const PORTFOLIO_SEAM = {
22
+ id: 'portfolio',
23
+ name: 'PortfolioSync',
24
+ delegatesTo: 'core/quality/store.ts + core/dashboard.ts',
25
+ summary: 'Portfolio health snapshots (~/.ashlr/quality/) + the org dashboard roll-up (read-only build).',
26
+ };
27
+ /** DEFAULT local impl — pass-through adapter over the quality store + dashboard. */
28
+ export class LocalPortfolioSync {
29
+ saveReport(report) {
30
+ return saveReport(report);
31
+ }
32
+ listReports() {
33
+ return listReports();
34
+ }
35
+ loadPreviousReport(before) {
36
+ return loadPreviousReport(before);
37
+ }
38
+ buildSnapshot(cfg) {
39
+ return buildSnapshot(cfg);
40
+ }
41
+ }
42
+ /** GATED cloud stub — a team-shared portfolio roll-up WOULD live here. Throws first. */
43
+ export class CloudPortfolioSync {
44
+ saveReport(_report) {
45
+ throw cloudGatedError(PORTFOLIO_SEAM.name, 'saveReport');
46
+ }
47
+ listReports() {
48
+ throw cloudGatedError(PORTFOLIO_SEAM.name, 'listReports');
49
+ }
50
+ loadPreviousReport(_before) {
51
+ throw cloudGatedError(PORTFOLIO_SEAM.name, 'loadPreviousReport');
52
+ }
53
+ buildSnapshot(_cfg) {
54
+ throw cloudGatedError(PORTFOLIO_SEAM.name, 'buildSnapshot');
55
+ }
56
+ }
57
+ /** Local by default; gated stub only when an endpoint is configured (refuses). */
58
+ export function selectPortfolioSync(cfg) {
59
+ return seamEndpoint(cfg, 'portfolio') ? new CloudPortfolioSync() : new LocalPortfolioSync();
60
+ }
61
+ //# sourceMappingURL=portfolio.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"portfolio.js","sourceRoot":"","sources":["../../../src/core/seams/portfolio.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;GAeG;AAEH,OAAO,EAAE,WAAW,EAAE,kBAAkB,EAAE,UAAU,EAAE,MAAM,qBAAqB,CAAC;AAClF,OAAO,EAAE,aAAa,EAAE,MAAM,iBAAiB,CAAC;AAEhD,OAAO,EAAE,YAAY,EAAE,MAAM,eAAe,CAAC;AAC7C,OAAO,EAAE,eAAe,EAAE,MAAM,YAAY,CAAC;AAE7C,MAAM,CAAC,MAAM,cAAc,GAAG;IAC5B,EAAE,EAAE,WAAoB;IACxB,IAAI,EAAE,eAAe;IACrB,WAAW,EAAE,2CAA2C;IACxD,OAAO,EAAE,+FAA+F;CACzG,CAAC;AAcF,oFAAoF;AACpF,MAAM,OAAO,kBAAkB;IAC7B,UAAU,CAAC,MAAoB;QAC7B,OAAO,UAAU,CAAC,MAAM,CAAC,CAAC;IAC5B,CAAC;IACD,WAAW;QACT,OAAO,WAAW,EAAE,CAAC;IACvB,CAAC;IACD,kBAAkB,CAAC,MAAe;QAChC,OAAO,kBAAkB,CAAC,MAAM,CAAC,CAAC;IACpC,CAAC;IACD,aAAa,CAAC,GAAgB;QAC5B,OAAO,aAAa,CAAC,GAAG,CAAC,CAAC;IAC5B,CAAC;CACF;AAED,wFAAwF;AACxF,MAAM,OAAO,kBAAkB;IAC7B,UAAU,CAAC,OAAqB;QAC9B,MAAM,eAAe,CAAC,cAAc,CAAC,IAAI,EAAE,YAAY,CAAC,CAAC;IAC3D,CAAC;IACD,WAAW;QACT,MAAM,eAAe,CAAC,cAAc,CAAC,IAAI,EAAE,aAAa,CAAC,CAAC;IAC5D,CAAC;IACD,kBAAkB,CAAC,OAAgB;QACjC,MAAM,eAAe,CAAC,cAAc,CAAC,IAAI,EAAE,oBAAoB,CAAC,CAAC;IACnE,CAAC;IACD,aAAa,CAAC,IAAiB;QAC7B,MAAM,eAAe,CAAC,cAAc,CAAC,IAAI,EAAE,eAAe,CAAC,CAAC;IAC9D,CAAC;CACF;AAED,kFAAkF;AAClF,MAAM,UAAU,mBAAmB,CAAC,GAAgB;IAClD,OAAO,YAAY,CAAC,GAAG,EAAE,WAAW,CAAC,CAAC,CAAC,CAAC,IAAI,kBAAkB,EAAE,CAAC,CAAC,CAAC,IAAI,kBAAkB,EAAE,CAAC;AAC9F,CAAC"}
@@ -0,0 +1,42 @@
1
+ /**
2
+ * core/seams/registry.ts — M30 seam registry + endpoint accessor.
3
+ *
4
+ * The single place that:
5
+ * - reads (defensively) the OPTIONAL per-seam cloud endpoint config, and
6
+ * - lists every seam with its active impl ('local') and cloud availability
7
+ * (false | 'gated'), feeding the READ-ONLY `ashlr seams` diagnostic.
8
+ *
9
+ * HARD SAFETY:
10
+ * - READ-ONLY: building the registry triggers NO I/O — it reads only the
11
+ * in-memory config and emits metadata. It never instantiates a seam impl,
12
+ * never calls a local adapter, and never touches disk/network.
13
+ * - NO ACTIVATION PATH: `seamEndpoint()` only reports whether an endpoint
14
+ * STRING is present. A present endpoint routes a selector to the GATED stub
15
+ * (which throws). There is no value of config that yields a functional cloud
16
+ * backbone.
17
+ * - NON-REGRESSION: the seam config is read via a cast over an OPTIONAL
18
+ * property of AshlrConfig (`seamsConfig()`), so AshlrConfig is unmodified and
19
+ * DEFAULT UNSET => local for every seam.
20
+ */
21
+ import type { AshlrConfig } from '../types.js';
22
+ import type { SeamId, SeamRegistry, SeamsConfig } from './types.js';
23
+ /**
24
+ * Defensively read the OPTIONAL `seams` config block off AshlrConfig WITHOUT
25
+ * modifying the AshlrConfig type (NON-REGRESSION). Returns {} when unset, so
26
+ * every seam DEFAULTS to local.
27
+ */
28
+ export declare function seamsConfig(cfg: AshlrConfig): SeamsConfig;
29
+ /**
30
+ * Return the explicitly-configured cloud endpoint for a seam, or null when
31
+ * unset. A non-null result routes the seam's selector to the GATED stub (which
32
+ * throws on every method) — it NEVER enables a functional backbone. Only the
33
+ * seven gated seams can have an endpoint; the reference telemetry seam is
34
+ * excluded (it has no gated stub here).
35
+ */
36
+ export declare function seamEndpoint(cfg: AshlrConfig, id: Exclude<SeamId, 'telemetry'>): string | null;
37
+ /**
38
+ * Build the READ-ONLY seam registry roll-up for `ashlr seams`. Pure: derives
39
+ * everything from the in-memory config + static descriptors. Triggers NO I/O,
40
+ * instantiates NO seam impl, and never touches disk/network. NEVER throws.
41
+ */
42
+ export declare function buildSeamRegistry(cfg: AshlrConfig): SeamRegistry;
@@ -0,0 +1,128 @@
1
+ /**
2
+ * core/seams/registry.ts — M30 seam registry + endpoint accessor.
3
+ *
4
+ * The single place that:
5
+ * - reads (defensively) the OPTIONAL per-seam cloud endpoint config, and
6
+ * - lists every seam with its active impl ('local') and cloud availability
7
+ * (false | 'gated'), feeding the READ-ONLY `ashlr seams` diagnostic.
8
+ *
9
+ * HARD SAFETY:
10
+ * - READ-ONLY: building the registry triggers NO I/O — it reads only the
11
+ * in-memory config and emits metadata. It never instantiates a seam impl,
12
+ * never calls a local adapter, and never touches disk/network.
13
+ * - NO ACTIVATION PATH: `seamEndpoint()` only reports whether an endpoint
14
+ * STRING is present. A present endpoint routes a selector to the GATED stub
15
+ * (which throws). There is no value of config that yields a functional cloud
16
+ * backbone.
17
+ * - NON-REGRESSION: the seam config is read via a cast over an OPTIONAL
18
+ * property of AshlrConfig (`seamsConfig()`), so AshlrConfig is unmodified and
19
+ * DEFAULT UNSET => local for every seam.
20
+ */
21
+ import { RUN_SWARM_SEAM } from './run-swarm.js';
22
+ import { BACKLOG_SEAM } from './backlog.js';
23
+ import { INBOX_SEAM } from './inbox.js';
24
+ import { DAEMON_COORDINATOR_SEAM } from './daemon-coordinator.js';
25
+ import { GENOME_SEAM } from './genome.js';
26
+ import { PORTFOLIO_SEAM } from './portfolio.js';
27
+ import { IDENTITY_SEAM } from './identity.js';
28
+ /**
29
+ * The seam ids that have a GATED cloud stub (so `cloud` reports 'gated'). The
30
+ * `telemetry` reference seam is intentionally NOT here: its opt-in OtlpHttpSink
31
+ * is a real local-network sink (M19), not a gated team backbone — its cloud
32
+ * field is `false`.
33
+ */
34
+ const GATED_SEAM_IDS = new Set([
35
+ 'runSwarm',
36
+ 'backlog',
37
+ 'inbox',
38
+ 'daemonCoordinator',
39
+ 'genome',
40
+ 'portfolio',
41
+ 'identity',
42
+ ]);
43
+ /**
44
+ * Defensively read the OPTIONAL `seams` config block off AshlrConfig WITHOUT
45
+ * modifying the AshlrConfig type (NON-REGRESSION). Returns {} when unset, so
46
+ * every seam DEFAULTS to local.
47
+ */
48
+ export function seamsConfig(cfg) {
49
+ const raw = cfg.seams;
50
+ if (raw !== null && typeof raw === 'object' && !Array.isArray(raw)) {
51
+ return raw;
52
+ }
53
+ return {};
54
+ }
55
+ /**
56
+ * Return the explicitly-configured cloud endpoint for a seam, or null when
57
+ * unset. A non-null result routes the seam's selector to the GATED stub (which
58
+ * throws on every method) — it NEVER enables a functional backbone. Only the
59
+ * seven gated seams can have an endpoint; the reference telemetry seam is
60
+ * excluded (it has no gated stub here).
61
+ */
62
+ export function seamEndpoint(cfg, id) {
63
+ const sc = seamsConfig(cfg);
64
+ const entry = sc[id];
65
+ const endpoint = entry?.endpoint;
66
+ return typeof endpoint === 'string' && endpoint.trim().length > 0 ? endpoint : null;
67
+ }
68
+ /**
69
+ * The static seam descriptors, in display order (telemetry cited last).
70
+ *
71
+ * Built LAZILY inside a function rather than at module top-level: registry.ts
72
+ * and the per-seam modules import each other (each seam pulls `seamEndpoint`
73
+ * from here; here we cite each seam's `*_SEAM` descriptor). Referencing the
74
+ * imported `*_SEAM` bindings at module-evaluation time is order-dependent under
75
+ * ESM and can hit a temporal-dead-zone crash when a seam module is the FIRST
76
+ * entry imported. Deferring the array into a function guarantees every `*_SEAM`
77
+ * binding is fully initialised before it is read, regardless of import order.
78
+ */
79
+ function seamDescriptors() {
80
+ return [
81
+ RUN_SWARM_SEAM,
82
+ BACKLOG_SEAM,
83
+ INBOX_SEAM,
84
+ DAEMON_COORDINATOR_SEAM,
85
+ GENOME_SEAM,
86
+ PORTFOLIO_SEAM,
87
+ IDENTITY_SEAM,
88
+ {
89
+ id: 'telemetry',
90
+ name: 'TelemetrySink',
91
+ delegatesTo: 'core/observability/telemetry-sink.ts',
92
+ summary: 'Reference seam (M19): LocalFileSink default + opt-in OTLP sink. Cited, not rewritten.',
93
+ },
94
+ ];
95
+ }
96
+ /**
97
+ * Build the READ-ONLY seam registry roll-up for `ashlr seams`. Pure: derives
98
+ * everything from the in-memory config + static descriptors. Triggers NO I/O,
99
+ * instantiates NO seam impl, and never touches disk/network. NEVER throws.
100
+ */
101
+ export function buildSeamRegistry(cfg) {
102
+ const seams = seamDescriptors().map((d) => {
103
+ const cloud = GATED_SEAM_IDS.has(d.id) ? 'gated' : false;
104
+ // Only the gated seams can have an endpoint; telemetry never routes here.
105
+ const endpointConfigured = d.id !== 'telemetry' && seamEndpoint(cfg, d.id) !== null;
106
+ // active is 'gated' ONLY when a cloud endpoint is explicitly configured for
107
+ // a gated seam — and that impl refuses. Otherwise ALWAYS 'local'.
108
+ const active = endpointConfigured ? 'gated' : 'local';
109
+ return {
110
+ id: d.id,
111
+ name: d.name,
112
+ active,
113
+ cloud,
114
+ endpointConfigured,
115
+ delegatesTo: d.delegatesTo,
116
+ summary: d.summary,
117
+ };
118
+ });
119
+ const gatedConfigured = seams.filter((s) => s.endpointConfigured).length;
120
+ const allLocal = seams.every((s) => s.active === 'local');
121
+ return {
122
+ generatedAt: new Date().toISOString(),
123
+ seams,
124
+ allLocal,
125
+ gatedConfigured,
126
+ };
127
+ }
128
+ //# sourceMappingURL=registry.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"registry.js","sourceRoot":"","sources":["../../../src/core/seams/registry.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;GAmBG;AAIH,OAAO,EAAE,cAAc,EAAE,MAAM,gBAAgB,CAAC;AAChD,OAAO,EAAE,YAAY,EAAE,MAAM,cAAc,CAAC;AAC5C,OAAO,EAAE,UAAU,EAAE,MAAM,YAAY,CAAC;AACxC,OAAO,EAAE,uBAAuB,EAAE,MAAM,yBAAyB,CAAC;AAClE,OAAO,EAAE,WAAW,EAAE,MAAM,aAAa,CAAC;AAC1C,OAAO,EAAE,cAAc,EAAE,MAAM,gBAAgB,CAAC;AAChD,OAAO,EAAE,aAAa,EAAE,MAAM,eAAe,CAAC;AAE9C;;;;;GAKG;AACH,MAAM,cAAc,GAAwB,IAAI,GAAG,CAAS;IAC1D,UAAU;IACV,SAAS;IACT,OAAO;IACP,mBAAmB;IACnB,QAAQ;IACR,WAAW;IACX,UAAU;CACX,CAAC,CAAC;AAEH;;;;GAIG;AACH,MAAM,UAAU,WAAW,CAAC,GAAgB;IAC1C,MAAM,GAAG,GAAI,GAA2B,CAAC,KAAK,CAAC;IAC/C,IAAI,GAAG,KAAK,IAAI,IAAI,OAAO,GAAG,KAAK,QAAQ,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC;QACnE,OAAO,GAAkB,CAAC;IAC5B,CAAC;IACD,OAAO,EAAE,CAAC;AACZ,CAAC;AAED;;;;;;GAMG;AACH,MAAM,UAAU,YAAY,CAAC,GAAgB,EAAE,EAAgC;IAC7E,MAAM,EAAE,GAAG,WAAW,CAAC,GAAG,CAAC,CAAC;IAC5B,MAAM,KAAK,GAAG,EAAE,CAAC,EAAE,CAAC,CAAC;IACrB,MAAM,QAAQ,GAAG,KAAK,EAAE,QAAQ,CAAC;IACjC,OAAO,OAAO,QAAQ,KAAK,QAAQ,IAAI,QAAQ,CAAC,IAAI,EAAE,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,IAAI,CAAC;AACtF,CAAC;AAUD;;;;;;;;;;GAUG;AACH,SAAS,eAAe;IACtB,OAAO;QACL,cAAc;QACd,YAAY;QACZ,UAAU;QACV,uBAAuB;QACvB,WAAW;QACX,cAAc;QACd,aAAa;QACb;YACE,EAAE,EAAE,WAAW;YACf,IAAI,EAAE,eAAe;YACrB,WAAW,EAAE,sCAAsC;YACnD,OAAO,EAAE,uFAAuF;SACjG;KACF,CAAC;AACJ,CAAC;AAED;;;;GAIG;AACH,MAAM,UAAU,iBAAiB,CAAC,GAAgB;IAChD,MAAM,KAAK,GAAiB,eAAe,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE;QACtD,MAAM,KAAK,GAAG,cAAc,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAE,OAAiB,CAAC,CAAC,CAAE,KAAe,CAAC;QAC/E,0EAA0E;QAC1E,MAAM,kBAAkB,GACtB,CAAC,CAAC,EAAE,KAAK,WAAW,IAAI,YAAY,CAAC,GAAG,EAAE,CAAC,CAAC,EAAkC,CAAC,KAAK,IAAI,CAAC;QAC3F,4EAA4E;QAC5E,kEAAkE;QAClE,MAAM,MAAM,GAAG,kBAAkB,CAAC,CAAC,CAAE,OAAiB,CAAC,CAAC,CAAE,OAAiB,CAAC;QAC5E,OAAO;YACL,EAAE,EAAE,CAAC,CAAC,EAAE;YACR,IAAI,EAAE,CAAC,CAAC,IAAI;YACZ,MAAM;YACN,KAAK;YACL,kBAAkB;YAClB,WAAW,EAAE,CAAC,CAAC,WAAW;YAC1B,OAAO,EAAE,CAAC,CAAC,OAAO;SACnB,CAAC;IACJ,CAAC,CAAC,CAAC;IAEH,MAAM,eAAe,GAAG,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,kBAAkB,CAAC,CAAC,MAAM,CAAC;IACzE,MAAM,QAAQ,GAAG,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,MAAM,KAAK,OAAO,CAAC,CAAC;IAE1D,OAAO;QACL,WAAW,EAAE,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE;QACrC,KAAK;QACL,QAAQ;QACR,eAAe;KAChB,CAAC;AACJ,CAAC"}
@@ -0,0 +1,66 @@
1
+ /**
2
+ * core/seams/run-swarm.ts — RunSwarmStore seam (M30).
3
+ *
4
+ * SEAM over core/swarm/store.ts (listSwarms / loadSwarm / saveSwarm).
5
+ *
6
+ * Shape (mirrors the canonical telemetry-sink seam):
7
+ * (a) RunSwarmStore — the interface.
8
+ * (b) LocalRunSwarmStore — DEFAULT. A thin, behavior-preserving adapter that
9
+ * delegates 1:1 to the existing exported functions.
10
+ * ZERO behavior change, identical signatures.
11
+ * (c) CloudRunSwarmStore — GATED stub. Every method THROWS the canonical
12
+ * gated error as its FIRST statement, before any
13
+ * I/O. It performs NO fetch/http and touches NO
14
+ * disk/network — it only refuses.
15
+ * (d) selectRunSwarmStore — returns LocalRunSwarmStore by default; returns
16
+ * the gated stub ONLY when a cloud endpoint is
17
+ * explicitly configured for this seam (and that
18
+ * stub still refuses). There is NO activation path.
19
+ *
20
+ * HARD SAFETY: local-first + self-hostable + cloud-gated. No new deps.
21
+ */
22
+ import type { AshlrConfig, SwarmRun } from '../types.js';
23
+ /** The display name + delegate path for diagnostics. */
24
+ export declare const RUN_SWARM_SEAM: {
25
+ id: "runSwarm";
26
+ name: string;
27
+ delegatesTo: string;
28
+ summary: string;
29
+ };
30
+ /** Persistence + listing of SwarmRun records. */
31
+ export interface RunSwarmStore {
32
+ /** List all persisted swarm runs, most-recent first. */
33
+ list(): SwarmRun[];
34
+ /** Load a single swarm run by id, or null when absent/corrupt. */
35
+ load(id: string): SwarmRun | null;
36
+ /** Persist a swarm run record. */
37
+ save(s: SwarmRun): void;
38
+ }
39
+ /**
40
+ * DEFAULT local impl — a behavior-preserving adapter over core/swarm/store.ts.
41
+ * Each method is a direct pass-through; no logic is added or changed.
42
+ */
43
+ export declare class LocalRunSwarmStore implements RunSwarmStore {
44
+ list(): SwarmRun[];
45
+ load(id: string): SwarmRun | null;
46
+ save(s: SwarmRun): void;
47
+ }
48
+ /**
49
+ * GATED cloud stub — a multi-machine/team swarm registry WOULD live here.
50
+ * Every method THROWS the canonical gated error FIRST, before any I/O. It never
51
+ * opens a socket, never calls fetch, never touches disk. Referenceable, inert.
52
+ */
53
+ export declare class CloudRunSwarmStore implements RunSwarmStore {
54
+ list(): SwarmRun[];
55
+ load(_id: string): SwarmRun | null;
56
+ save(_s: SwarmRun): void;
57
+ }
58
+ /**
59
+ * Select the active RunSwarmStore for a config.
60
+ * - LocalRunSwarmStore by DEFAULT (no endpoint configured) — the only path the
61
+ * autonomous loop/daemon can ever reach.
62
+ * - CloudRunSwarmStore ONLY when a cloud endpoint is explicitly configured for
63
+ * this seam — and that impl REFUSES (throws) on every method. There is no
64
+ * way to flip to a functional cloud backbone.
65
+ */
66
+ export declare function selectRunSwarmStore(cfg: AshlrConfig): RunSwarmStore;
@@ -0,0 +1,74 @@
1
+ /**
2
+ * core/seams/run-swarm.ts — RunSwarmStore seam (M30).
3
+ *
4
+ * SEAM over core/swarm/store.ts (listSwarms / loadSwarm / saveSwarm).
5
+ *
6
+ * Shape (mirrors the canonical telemetry-sink seam):
7
+ * (a) RunSwarmStore — the interface.
8
+ * (b) LocalRunSwarmStore — DEFAULT. A thin, behavior-preserving adapter that
9
+ * delegates 1:1 to the existing exported functions.
10
+ * ZERO behavior change, identical signatures.
11
+ * (c) CloudRunSwarmStore — GATED stub. Every method THROWS the canonical
12
+ * gated error as its FIRST statement, before any
13
+ * I/O. It performs NO fetch/http and touches NO
14
+ * disk/network — it only refuses.
15
+ * (d) selectRunSwarmStore — returns LocalRunSwarmStore by default; returns
16
+ * the gated stub ONLY when a cloud endpoint is
17
+ * explicitly configured for this seam (and that
18
+ * stub still refuses). There is NO activation path.
19
+ *
20
+ * HARD SAFETY: local-first + self-hostable + cloud-gated. No new deps.
21
+ */
22
+ import { listSwarms, loadSwarm, saveSwarm } from '../swarm/store.js';
23
+ import { seamEndpoint } from './registry.js';
24
+ import { cloudGatedError } from './types.js';
25
+ /** The display name + delegate path for diagnostics. */
26
+ export const RUN_SWARM_SEAM = {
27
+ id: 'runSwarm',
28
+ name: 'RunSwarmStore',
29
+ delegatesTo: 'core/swarm/store.ts',
30
+ summary: 'Persist + list autonomous run/swarm records (~/.ashlr/swarms/).',
31
+ };
32
+ /**
33
+ * DEFAULT local impl — a behavior-preserving adapter over core/swarm/store.ts.
34
+ * Each method is a direct pass-through; no logic is added or changed.
35
+ */
36
+ export class LocalRunSwarmStore {
37
+ list() {
38
+ return listSwarms();
39
+ }
40
+ load(id) {
41
+ return loadSwarm(id);
42
+ }
43
+ save(s) {
44
+ saveSwarm(s);
45
+ }
46
+ }
47
+ /**
48
+ * GATED cloud stub — a multi-machine/team swarm registry WOULD live here.
49
+ * Every method THROWS the canonical gated error FIRST, before any I/O. It never
50
+ * opens a socket, never calls fetch, never touches disk. Referenceable, inert.
51
+ */
52
+ export class CloudRunSwarmStore {
53
+ list() {
54
+ throw cloudGatedError(RUN_SWARM_SEAM.name, 'list');
55
+ }
56
+ load(_id) {
57
+ throw cloudGatedError(RUN_SWARM_SEAM.name, 'load');
58
+ }
59
+ save(_s) {
60
+ throw cloudGatedError(RUN_SWARM_SEAM.name, 'save');
61
+ }
62
+ }
63
+ /**
64
+ * Select the active RunSwarmStore for a config.
65
+ * - LocalRunSwarmStore by DEFAULT (no endpoint configured) — the only path the
66
+ * autonomous loop/daemon can ever reach.
67
+ * - CloudRunSwarmStore ONLY when a cloud endpoint is explicitly configured for
68
+ * this seam — and that impl REFUSES (throws) on every method. There is no
69
+ * way to flip to a functional cloud backbone.
70
+ */
71
+ export function selectRunSwarmStore(cfg) {
72
+ return seamEndpoint(cfg, 'runSwarm') ? new CloudRunSwarmStore() : new LocalRunSwarmStore();
73
+ }
74
+ //# sourceMappingURL=run-swarm.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"run-swarm.js","sourceRoot":"","sources":["../../../src/core/seams/run-swarm.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;GAoBG;AAEH,OAAO,EAAE,UAAU,EAAE,SAAS,EAAE,SAAS,EAAE,MAAM,mBAAmB,CAAC;AAErE,OAAO,EAAE,YAAY,EAAE,MAAM,eAAe,CAAC;AAC7C,OAAO,EAAE,eAAe,EAAE,MAAM,YAAY,CAAC;AAE7C,wDAAwD;AACxD,MAAM,CAAC,MAAM,cAAc,GAAG;IAC5B,EAAE,EAAE,UAAmB;IACvB,IAAI,EAAE,eAAe;IACrB,WAAW,EAAE,qBAAqB;IAClC,OAAO,EAAE,iEAAiE;CAC3E,CAAC;AAYF;;;GAGG;AACH,MAAM,OAAO,kBAAkB;IAC7B,IAAI;QACF,OAAO,UAAU,EAAE,CAAC;IACtB,CAAC;IACD,IAAI,CAAC,EAAU;QACb,OAAO,SAAS,CAAC,EAAE,CAAC,CAAC;IACvB,CAAC;IACD,IAAI,CAAC,CAAW;QACd,SAAS,CAAC,CAAC,CAAC,CAAC;IACf,CAAC;CACF;AAED;;;;GAIG;AACH,MAAM,OAAO,kBAAkB;IAC7B,IAAI;QACF,MAAM,eAAe,CAAC,cAAc,CAAC,IAAI,EAAE,MAAM,CAAC,CAAC;IACrD,CAAC;IACD,IAAI,CAAC,GAAW;QACd,MAAM,eAAe,CAAC,cAAc,CAAC,IAAI,EAAE,MAAM,CAAC,CAAC;IACrD,CAAC;IACD,IAAI,CAAC,EAAY;QACf,MAAM,eAAe,CAAC,cAAc,CAAC,IAAI,EAAE,MAAM,CAAC,CAAC;IACrD,CAAC;CACF;AAED;;;;;;;GAOG;AACH,MAAM,UAAU,mBAAmB,CAAC,GAAgB;IAClD,OAAO,YAAY,CAAC,GAAG,EAAE,UAAU,CAAC,CAAC,CAAC,CAAC,IAAI,kBAAkB,EAAE,CAAC,CAAC,CAAC,IAAI,kBAAkB,EAAE,CAAC;AAC7F,CAAC"}
@@ -0,0 +1,123 @@
1
+ /**
2
+ * core/seams/types.ts — M30 seam types (single-sourced).
3
+ *
4
+ * Defines the shared types for the M30 "cloud-ready seams" layer: the read-only
5
+ * diagnostic shape (`SeamStatus`), the registry roll-up (`SeamRegistry`), and a
6
+ * defensive, OPTIONAL config augmentation (`SeamsConfig`) describing where a
7
+ * cloud/team backbone endpoint WOULD be configured per seam.
8
+ *
9
+ * HARD SAFETY NOTE: the presence of an endpoint string here NEVER activates a
10
+ * working cloud backbone. Every cloud impl is a GATED STUB that THROWS before
11
+ * any I/O. A configured endpoint only changes which (throwing) stub a selector
12
+ * returns; it can never perform a remote call. There is NO config flag and NO
13
+ * code path that activates a functional cloud/team backbone — that remains a
14
+ * Mason GATE (explicit opt-in, not implemented). Local-first + self-hostable;
15
+ * nothing public.
16
+ *
17
+ * This block is kept OUT of the monolithic core/types.ts on purpose so the M30
18
+ * additions are purely additive and cannot perturb any existing type. The
19
+ * `SeamsConfig` shape is read defensively off `AshlrConfig` via `seamsConfig()`
20
+ * in registry.ts (a cast over an optional property) so AshlrConfig itself is
21
+ * unchanged — preserving the M30 NON-REGRESSION invariant at the type level.
22
+ */
23
+ /**
24
+ * Stable identifiers for every v2 seam. Used as the key in the registry and in
25
+ * the `ashlr seams` diagnostic. `telemetry` is the pre-existing M19 reference
26
+ * seam (core/observability/telemetry-sink.ts) — it is CITED here, not rewritten.
27
+ */
28
+ export type SeamId = 'runSwarm' | 'backlog' | 'inbox' | 'daemonCoordinator' | 'genome' | 'portfolio' | 'identity' | 'telemetry';
29
+ /**
30
+ * Which implementation a seam is actively serving. The default path is ALWAYS
31
+ * `'local'`. `'gated'` is only ever surfaced when a cloud endpoint is explicitly
32
+ * configured for that seam — and that impl REFUSES (throws) on every method.
33
+ */
34
+ export type SeamImpl = 'local' | 'gated';
35
+ /**
36
+ * Whether a cloud/team impl exists for a seam. It is NEVER `true` in M30:
37
+ * - `false` — no cloud impl exists at all (e.g. the reference telemetry seam,
38
+ * whose opt-in OTLP sink is a real local-network sink, not a
39
+ * gated team backbone).
40
+ * - `'gated'`— a cloud STUB exists but is gated on Mason and THROWS; it can be
41
+ * referenced (when an endpoint is configured) but never does I/O.
42
+ */
43
+ export type SeamCloud = false | 'gated';
44
+ /**
45
+ * Read-only diagnostic record for one seam — the row rendered by `ashlr seams`.
46
+ * Pure metadata; contains NO endpoint secrets and triggers NO I/O to produce.
47
+ */
48
+ export interface SeamStatus {
49
+ /** Stable seam identifier. */
50
+ id: SeamId;
51
+ /** Human-readable seam name (e.g. 'RunSwarmStore'). */
52
+ name: string;
53
+ /** The active implementation. ALWAYS 'local' on the default path. */
54
+ active: SeamImpl;
55
+ /** Cloud availability: false (none) or 'gated' (stub exists, throws). */
56
+ cloud: SeamCloud;
57
+ /**
58
+ * Whether a cloud endpoint is explicitly configured for this seam. When true,
59
+ * `active` is 'gated' and the seam REFUSES to operate (throws). Default false.
60
+ */
61
+ endpointConfigured: boolean;
62
+ /** The existing local module this seam delegates to (for the diagnostic). */
63
+ delegatesTo: string;
64
+ /** One-line description of the seam's responsibility. */
65
+ summary: string;
66
+ }
67
+ /** The full read-only registry roll-up consumed by the `ashlr seams` command. */
68
+ export interface SeamRegistry {
69
+ /** ISO timestamp the registry snapshot was produced. */
70
+ generatedAt: string;
71
+ /** One row per seam. */
72
+ seams: SeamStatus[];
73
+ /**
74
+ * Convenience roll-up flags for the diagnostic header.
75
+ * `allLocal` is true when EVERY seam is serving its local impl (the only
76
+ * state reachable without an explicitly-configured cloud endpoint).
77
+ */
78
+ allLocal: boolean;
79
+ /** Count of seams with an explicitly-configured (but gated) cloud endpoint. */
80
+ gatedConfigured: number;
81
+ }
82
+ /**
83
+ * OPTIONAL, defensively-read config augmentation describing where a cloud/team
84
+ * backbone endpoint WOULD live per seam. DEFAULT UNSET => local for every seam.
85
+ *
86
+ * Read off `AshlrConfig` via a cast in registry.ts; AshlrConfig itself is NOT
87
+ * modified (NON-REGRESSION). An endpoint string here only routes a selector to
88
+ * the GATED (throwing) stub — it can never enable a functional backbone.
89
+ */
90
+ export interface SeamsConfig {
91
+ /** Per-seam cloud endpoint. Presence => route to the gated stub (throws). */
92
+ runSwarm?: {
93
+ endpoint?: string;
94
+ };
95
+ backlog?: {
96
+ endpoint?: string;
97
+ };
98
+ inbox?: {
99
+ endpoint?: string;
100
+ };
101
+ daemonCoordinator?: {
102
+ endpoint?: string;
103
+ };
104
+ genome?: {
105
+ endpoint?: string;
106
+ };
107
+ portfolio?: {
108
+ endpoint?: string;
109
+ };
110
+ identity?: {
111
+ endpoint?: string;
112
+ };
113
+ }
114
+ /**
115
+ * Canonical gated-error message thrown by EVERY cloud stub method. Centralised
116
+ * so the message is identical across seams and easy for the verifier to assert.
117
+ */
118
+ export declare const CLOUD_GATED_MESSAGE = "cloud/team backbone gated on Mason \u2014 not implemented (requires Mason's explicit opt-in)";
119
+ /**
120
+ * Construct the canonical gated Error for a seam + method. The cloud stubs call
121
+ * this and THROW it as the FIRST statement of every method, before any I/O.
122
+ */
123
+ export declare function cloudGatedError(seam: string, method: string): Error;
@@ -0,0 +1,35 @@
1
+ /**
2
+ * core/seams/types.ts — M30 seam types (single-sourced).
3
+ *
4
+ * Defines the shared types for the M30 "cloud-ready seams" layer: the read-only
5
+ * diagnostic shape (`SeamStatus`), the registry roll-up (`SeamRegistry`), and a
6
+ * defensive, OPTIONAL config augmentation (`SeamsConfig`) describing where a
7
+ * cloud/team backbone endpoint WOULD be configured per seam.
8
+ *
9
+ * HARD SAFETY NOTE: the presence of an endpoint string here NEVER activates a
10
+ * working cloud backbone. Every cloud impl is a GATED STUB that THROWS before
11
+ * any I/O. A configured endpoint only changes which (throwing) stub a selector
12
+ * returns; it can never perform a remote call. There is NO config flag and NO
13
+ * code path that activates a functional cloud/team backbone — that remains a
14
+ * Mason GATE (explicit opt-in, not implemented). Local-first + self-hostable;
15
+ * nothing public.
16
+ *
17
+ * This block is kept OUT of the monolithic core/types.ts on purpose so the M30
18
+ * additions are purely additive and cannot perturb any existing type. The
19
+ * `SeamsConfig` shape is read defensively off `AshlrConfig` via `seamsConfig()`
20
+ * in registry.ts (a cast over an optional property) so AshlrConfig itself is
21
+ * unchanged — preserving the M30 NON-REGRESSION invariant at the type level.
22
+ */
23
+ /**
24
+ * Canonical gated-error message thrown by EVERY cloud stub method. Centralised
25
+ * so the message is identical across seams and easy for the verifier to assert.
26
+ */
27
+ export const CLOUD_GATED_MESSAGE = 'cloud/team backbone gated on Mason — not implemented (requires Mason\'s explicit opt-in)';
28
+ /**
29
+ * Construct the canonical gated Error for a seam + method. The cloud stubs call
30
+ * this and THROW it as the FIRST statement of every method, before any I/O.
31
+ */
32
+ export function cloudGatedError(seam, method) {
33
+ return new Error(`[ashlr seams] ${seam}.${method}: ${CLOUD_GATED_MESSAGE}`);
34
+ }
35
+ //# sourceMappingURL=types.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.js","sourceRoot":"","sources":["../../../src/core/seams/types.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;GAqBG;AA6FH;;;GAGG;AACH,MAAM,CAAC,MAAM,mBAAmB,GAC9B,0FAA0F,CAAC;AAE7F;;;GAGG;AACH,MAAM,UAAU,eAAe,CAAC,IAAY,EAAE,MAAc;IAC1D,OAAO,IAAI,KAAK,CAAC,iBAAiB,IAAI,IAAI,MAAM,KAAK,mBAAmB,EAAE,CAAC,CAAC;AAC9E,CAAC"}