@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,350 @@
1
+ /**
2
+ * src/tui/app.ts — M13 interactive TUI driver.
3
+ *
4
+ * Wires the pure renderer (src/tui/render.ts) to the data aggregator
5
+ * (src/core/dashboard.ts buildSnapshot) and the terminal. Handles all the
6
+ * impure concerns the renderer deliberately avoids:
7
+ *
8
+ * - Alt-screen buffer enter/leave, cursor hide/show, raw-mode toggling.
9
+ * - Raw keypress decoding (tab/shift-tab, 1-5, j/k, r, enter, q, Ctrl-C).
10
+ * - Auto-refresh tick (~2s) that re-reads data sources without blocking.
11
+ * - Resize awareness (re-render on SIGWINCH).
12
+ * - GUARANTEED terminal restoration on quit / signal / throw.
13
+ *
14
+ * `runTui(cfg, { once })`:
15
+ * - once === true OR stdout is not a TTY → render exactly one frame to
16
+ * stdout and resolve 0. NEVER enters raw mode or the alt-screen. This is
17
+ * the headless / scripting / test path (and the safe degraded path for
18
+ * piped output).
19
+ * - otherwise → enter the interactive loop and resolve when the user quits.
20
+ *
21
+ * Zero new runtime deps: Node built-ins + cli/ui.ts helpers only.
22
+ */
23
+ import { buildSnapshot } from '../core/dashboard.js';
24
+ import { renderFrame } from './render.js';
25
+ // ---------------------------------------------------------------------------
26
+ // Constants
27
+ // ---------------------------------------------------------------------------
28
+ /** Ordered tab list — used for tab/shift-tab cycling and 1-5 selection. */
29
+ const TAB_ORDER = ['overview', 'runs', 'swarms', 'pulse', 'mcp', 'inbox', 'portfolio'];
30
+ /** Auto-refresh cadence (ms). */
31
+ const REFRESH_MS = 2000;
32
+ /** Fallback terminal dimensions when stdout reports none. */
33
+ const FALLBACK_COLS = 80;
34
+ const FALLBACK_ROWS = 24;
35
+ // Terminal control sequences (kept local so the renderer stays pure).
36
+ const ALT_SCREEN_ENTER = '\x1b[?1049h';
37
+ const ALT_SCREEN_LEAVE = '\x1b[?1049l';
38
+ const CURSOR_HIDE = '\x1b[?25l';
39
+ const CURSOR_SHOW = '\x1b[?25h';
40
+ const CURSOR_HOME = '\x1b[H';
41
+ const CLEAR_SCREEN = '\x1b[2J';
42
+ // ---------------------------------------------------------------------------
43
+ // Snapshot helpers
44
+ // ---------------------------------------------------------------------------
45
+ /** An all-zero snapshot used when buildSnapshot fails — keeps the TUI alive. */
46
+ function emptySnapshot() {
47
+ return {
48
+ generatedAt: new Date().toISOString(),
49
+ repos: { total: 0, dirty: 0, stale: 0 },
50
+ tools: { installed: 0, total: 0 },
51
+ activity: { sessions: 0, tokens: 0, estCostUsd: 0, commits: 0 },
52
+ runs: [],
53
+ swarms: [],
54
+ mcp: [],
55
+ genome: { entries: 0, projects: 0 },
56
+ inbox: { pending: 0 },
57
+ };
58
+ }
59
+ /** Build a snapshot, degrading to an empty one on any failure. Never throws. */
60
+ async function safeSnapshot(cfg) {
61
+ try {
62
+ return await buildSnapshot(cfg);
63
+ }
64
+ catch {
65
+ return emptySnapshot();
66
+ }
67
+ }
68
+ /** Current terminal dimensions, with sane fallbacks. */
69
+ function terminalSize() {
70
+ const cols = process.stdout.columns && process.stdout.columns > 0
71
+ ? process.stdout.columns
72
+ : FALLBACK_COLS;
73
+ const rows = process.stdout.rows && process.stdout.rows > 0
74
+ ? process.stdout.rows
75
+ : FALLBACK_ROWS;
76
+ return { cols, rows };
77
+ }
78
+ /** Number of selectable rows on the given tab (for j/k bounds). */
79
+ function selectableCount(snap, tab) {
80
+ switch (tab) {
81
+ case 'runs': return snap.runs.length;
82
+ case 'swarms': return snap.swarms.length;
83
+ case 'mcp': return snap.mcp.length;
84
+ default: return 0; // overview / pulse have no row selection
85
+ }
86
+ }
87
+ // ---------------------------------------------------------------------------
88
+ // runTui — public entry point
89
+ // ---------------------------------------------------------------------------
90
+ /**
91
+ * Drive the TUI.
92
+ *
93
+ * @param cfg Loaded hub config (passed straight through to buildSnapshot).
94
+ * @param opts { once } — render a single frame and exit when true.
95
+ * @returns Process exit code (0 on success). Never rejects.
96
+ */
97
+ export async function runTui(cfg, opts) {
98
+ const interactive = !opts.once && process.stdout.isTTY === true && process.stdin.isTTY === true;
99
+ // Headless / --once / non-TTY → one frame to stdout, no raw mode, no alt-screen.
100
+ if (!interactive) {
101
+ return renderOnce(cfg);
102
+ }
103
+ return runInteractive(cfg);
104
+ }
105
+ // ---------------------------------------------------------------------------
106
+ // --once / non-TTY path
107
+ // ---------------------------------------------------------------------------
108
+ /** Render exactly one frame to stdout and resolve 0. Never throws. */
109
+ async function renderOnce(cfg) {
110
+ try {
111
+ const snap = await safeSnapshot(cfg);
112
+ const { cols, rows } = terminalSize();
113
+ const state = { tab: 'overview', selected: 0, cols, rows };
114
+ const frame = renderFrame(snap, state);
115
+ process.stdout.write(frame + '\n');
116
+ return 0;
117
+ }
118
+ catch {
119
+ // Absolute last-resort guard — should be unreachable given safeSnapshot.
120
+ return 0;
121
+ }
122
+ }
123
+ // ---------------------------------------------------------------------------
124
+ // Interactive path
125
+ // ---------------------------------------------------------------------------
126
+ async function runInteractive(cfg) {
127
+ const out = process.stdout;
128
+ const input = process.stdin;
129
+ let tab = 'overview';
130
+ let selected = 0;
131
+ let snap = await safeSnapshot(cfg);
132
+ let lastFrame = '';
133
+ let timer = null;
134
+ let refreshing = false;
135
+ let restored = false;
136
+ let resolveLoop = null;
137
+ // ── Terminal lifecycle ──────────────────────────────────────────────────
138
+ function enterTerminal() {
139
+ out.write(ALT_SCREEN_ENTER + CURSOR_HIDE + CLEAR_SCREEN + CURSOR_HOME);
140
+ if (typeof input.setRawMode === 'function')
141
+ input.setRawMode(true);
142
+ input.resume();
143
+ input.setEncoding('utf8');
144
+ }
145
+ /** Restore the terminal to a sane state. Idempotent — safe to call twice. */
146
+ function restoreTerminal() {
147
+ if (restored)
148
+ return;
149
+ restored = true;
150
+ if (timer) {
151
+ clearInterval(timer);
152
+ timer = null;
153
+ }
154
+ try {
155
+ if (typeof input.setRawMode === 'function' && input.isTTY)
156
+ input.setRawMode(false);
157
+ }
158
+ catch {
159
+ /* ignore */
160
+ }
161
+ input.pause();
162
+ input.removeListener('data', onKey);
163
+ process.removeListener('SIGINT', onSignal);
164
+ process.removeListener('SIGTERM', onSignal);
165
+ process.removeListener('SIGWINCH', onResize);
166
+ // Drop the last-resort backstops so they don't leak across a normal quit.
167
+ process.removeListener('uncaughtException', onFatal);
168
+ process.removeListener('unhandledRejection', onFatal);
169
+ // Show cursor + leave alt-screen LAST so the prior terminal contents return.
170
+ out.write(CURSOR_SHOW + ALT_SCREEN_LEAVE);
171
+ }
172
+ // ── Rendering ───────────────────────────────────────────────────────────
173
+ function clampSelection() {
174
+ const max = selectableCount(snap, tab);
175
+ if (max <= 0) {
176
+ selected = 0;
177
+ }
178
+ else if (selected >= max) {
179
+ selected = max - 1;
180
+ }
181
+ else if (selected < 0) {
182
+ selected = 0;
183
+ }
184
+ }
185
+ function paint() {
186
+ clampSelection();
187
+ const { cols, rows } = terminalSize();
188
+ const state = { tab, selected, cols, rows };
189
+ const frame = renderFrame(snap, state);
190
+ if (frame === lastFrame)
191
+ return; // skip redundant repaints
192
+ lastFrame = frame;
193
+ out.write(CURSOR_HOME + frame);
194
+ }
195
+ // ── Data refresh (bounded, never blocks the loop) ───────────────────────
196
+ async function refresh() {
197
+ if (refreshing || restored)
198
+ return;
199
+ refreshing = true;
200
+ try {
201
+ snap = await safeSnapshot(cfg);
202
+ if (!restored)
203
+ paint();
204
+ }
205
+ finally {
206
+ refreshing = false;
207
+ }
208
+ }
209
+ // ── Event handlers ──────────────────────────────────────────────────────
210
+ function finish(code) {
211
+ restoreTerminal();
212
+ if (resolveLoop) {
213
+ const r = resolveLoop;
214
+ resolveLoop = null;
215
+ r(code);
216
+ }
217
+ }
218
+ function onSignal() {
219
+ finish(0);
220
+ }
221
+ /**
222
+ * Last-resort backstop: if anything in the event-handler / refresh-tick
223
+ * chain throws (e.g. a renderer regression), restore the terminal before
224
+ * the process dies so we never leave alt-screen + hidden cursor + raw mode.
225
+ */
226
+ function onFatal(err) {
227
+ restoreTerminal();
228
+ if (resolveLoop) {
229
+ const r = resolveLoop;
230
+ resolveLoop = null;
231
+ r(1);
232
+ }
233
+ // Surface the original error after the terminal is sane.
234
+ console.error(err);
235
+ }
236
+ function onResize() {
237
+ if (restored)
238
+ return;
239
+ try {
240
+ // Force a full clear so a shrunk terminal doesn't leave stale rows.
241
+ lastFrame = '';
242
+ out.write(CLEAR_SCREEN);
243
+ paint();
244
+ }
245
+ catch {
246
+ // Never let a resize repaint corrupt the terminal.
247
+ finish(1);
248
+ }
249
+ }
250
+ function cycleTab(dir) {
251
+ const idx = TAB_ORDER.indexOf(tab);
252
+ const next = (idx + dir + TAB_ORDER.length) % TAB_ORDER.length;
253
+ tab = TAB_ORDER[next];
254
+ selected = 0;
255
+ paint();
256
+ }
257
+ function moveSelection(delta) {
258
+ const max = selectableCount(snap, tab);
259
+ if (max <= 0)
260
+ return;
261
+ selected = Math.min(max - 1, Math.max(0, selected + delta));
262
+ paint();
263
+ }
264
+ function onKeyRaw(key) {
265
+ if (restored)
266
+ return;
267
+ // Ctrl-C / q → quit.
268
+ if (key === '' || key === 'q' || key === 'Q') {
269
+ finish(0);
270
+ return;
271
+ }
272
+ // Numeric tab selection (1-9, bounded by TAB_ORDER length).
273
+ if (key >= '1' && key <= '9') {
274
+ const idx = Number(key) - 1;
275
+ if (idx < TAB_ORDER.length) {
276
+ tab = TAB_ORDER[idx];
277
+ selected = 0;
278
+ paint();
279
+ }
280
+ return;
281
+ }
282
+ switch (key) {
283
+ case '\t': // Tab → next tab
284
+ cycleTab(1);
285
+ return;
286
+ case '\x1b[Z': // Shift-Tab → previous tab
287
+ cycleTab(-1);
288
+ return;
289
+ case 'j':
290
+ case '\x1b[B': // Down arrow
291
+ moveSelection(1);
292
+ return;
293
+ case 'k':
294
+ case '\x1b[A': // Up arrow
295
+ moveSelection(-1);
296
+ return;
297
+ case 'r':
298
+ case 'R':
299
+ void refresh();
300
+ return;
301
+ case '\r':
302
+ case '\n':
303
+ // Enter → "open detail". The renderer already highlights the selected
304
+ // row; a dedicated detail pane is out of scope for M13, so Enter
305
+ // triggers an immediate refresh of the focused tab (cheap, useful,
306
+ // and never leaves the alt-screen). Reads only — no outward action.
307
+ void refresh();
308
+ return;
309
+ default:
310
+ return;
311
+ }
312
+ }
313
+ /** Keypress entry point — guarded so a renderer throw can never corrupt
314
+ * the terminal (restoreTerminal runs before the process dies). */
315
+ function onKey(key) {
316
+ try {
317
+ onKeyRaw(key);
318
+ }
319
+ catch (err) {
320
+ onFatal(err);
321
+ }
322
+ }
323
+ // ── Wire up + run ───────────────────────────────────────────────────────
324
+ return new Promise((resolve) => {
325
+ resolveLoop = resolve;
326
+ try {
327
+ enterTerminal();
328
+ paint();
329
+ input.on('data', onKey);
330
+ process.on('SIGINT', onSignal);
331
+ process.on('SIGTERM', onSignal);
332
+ process.on('SIGWINCH', onResize);
333
+ // Process-level backstops: guarantee terminal restoration even if a
334
+ // throw escapes a sync event listener or the refresh tick. Removed in
335
+ // restoreTerminal() so they don't leak across a normal quit.
336
+ process.once('uncaughtException', onFatal);
337
+ process.once('unhandledRejection', onFatal);
338
+ timer = setInterval(() => void refresh(), REFRESH_MS);
339
+ // Don't let the refresh timer keep the event loop alive on its own.
340
+ if (typeof timer.unref === 'function')
341
+ timer.unref();
342
+ }
343
+ catch {
344
+ // Any failure setting up the interactive loop must restore the terminal
345
+ // and resolve cleanly rather than leaving it corrupted.
346
+ finish(0);
347
+ }
348
+ });
349
+ }
350
+ //# sourceMappingURL=app.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"app.js","sourceRoot":"","sources":["../../src/tui/app.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,20 @@
1
+ /**
2
+ * src/tui/render.ts
3
+ *
4
+ * PURE renderer for the interactive TUI dashboard.
5
+ *
6
+ * renderFrame(snap, state) → complete ANSI frame string sized to
7
+ * state.cols × state.rows. No I/O, no side-effects, no timers.
8
+ * Fully testable by snapshotting the returned string.
9
+ *
10
+ * Uses ONLY src/cli/ui.ts helpers (C, stripAnsi, pad, makeColors)
11
+ * and Node built-ins. Zero new runtime deps.
12
+ */
13
+ import type { DashboardSnapshot, TuiTab } from '../core/types.js';
14
+ export interface RenderState {
15
+ tab: TuiTab;
16
+ selected: number;
17
+ cols: number;
18
+ rows: number;
19
+ }
20
+ export declare function renderFrame(snap: DashboardSnapshot, state: RenderState): string;