@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,605 @@
1
+ /**
2
+ * M6: Project Lifecycle — Template Registry
3
+ *
4
+ * Four agentic-engineering starter templates for `ashlr new`.
5
+ * Pure data module — no filesystem or network access.
6
+ */
7
+ // ---------------------------------------------------------------------------
8
+ // Shared helpers — common files every template includes
9
+ // ---------------------------------------------------------------------------
10
+ function claudeMd(name, category, stack) {
11
+ return {
12
+ path: 'CLAUDE.md',
13
+ content: `# ${name}
14
+
15
+ > Category: \`${category}\` · Stack: \`${stack}\`
16
+
17
+ ## About This Project
18
+
19
+ This project was scaffolded with **ashlr** — a local-first agentic engineering hub.
20
+ All AI-assisted work on this repo is wired through the **ashlr gateway** (see \`.mcp.json\`).
21
+
22
+ ## Agentic Engineering Conventions
23
+
24
+ - **local-first via ashlr**: prefer local models; cloud fallback only when needed.
25
+ - **genome stubs** live in \`.ashlrcode/genome/\` — update them as patterns emerge.
26
+ - One logical change per commit; keep commits small and descriptive.
27
+ - All new modules get a \`// M: <purpose>\` header comment.
28
+ - Prefer explicit types over inference at module boundaries.
29
+
30
+ ## Quick Start
31
+
32
+ \`\`\`bash
33
+ # Install dependencies
34
+ npm install
35
+
36
+ # Run tests
37
+ npm test
38
+
39
+ # Build
40
+ npm run build
41
+ \`\`\`
42
+
43
+ ## Session Tracking
44
+
45
+ Sessions are captured automatically via \`entire\` on every commit.
46
+ Use \`entire resume <branch>\` when picking up prior work.
47
+ `,
48
+ };
49
+ }
50
+ function mcpJson() {
51
+ return {
52
+ path: '.mcp.json',
53
+ content: JSON.stringify({
54
+ mcpServers: {
55
+ ashlr: {
56
+ command: 'ashlr',
57
+ args: ['mcp'],
58
+ },
59
+ },
60
+ }, null, 2) + '\n',
61
+ };
62
+ }
63
+ function genomeGitkeep() {
64
+ return {
65
+ path: '.ashlrcode/genome/.gitkeep',
66
+ content: '',
67
+ };
68
+ }
69
+ function gitignore(extras = []) {
70
+ const lines = ['node_modules/', 'dist/', ...extras, ''];
71
+ return {
72
+ path: '.gitignore',
73
+ content: lines.join('\n'),
74
+ };
75
+ }
76
+ // ---------------------------------------------------------------------------
77
+ // Template: minimal
78
+ // ---------------------------------------------------------------------------
79
+ const minimalTemplate = {
80
+ id: 'minimal',
81
+ title: 'Minimal',
82
+ description: 'README, .gitignore, and CLAUDE.md only — a blank agentic-engineering slate.',
83
+ files({ name, category }) {
84
+ return [
85
+ {
86
+ path: 'README.md',
87
+ content: `# ${name}\n\n> Category: \`${category}\`\n\nA minimal project scaffolded with [ashlr](https://github.com/ashlrai/ashlr-hub).\n`,
88
+ },
89
+ {
90
+ path: 'package.json',
91
+ content: JSON.stringify({
92
+ name,
93
+ version: '0.1.0',
94
+ description: `${name} — a minimal project scaffolded with ashlr`,
95
+ type: 'module',
96
+ private: true,
97
+ }, null, 2) + '\n',
98
+ },
99
+ gitignore(),
100
+ claudeMd(name, category, 'minimal'),
101
+ mcpJson(),
102
+ genomeGitkeep(),
103
+ ];
104
+ },
105
+ };
106
+ // ---------------------------------------------------------------------------
107
+ // Template: node-cli
108
+ // ---------------------------------------------------------------------------
109
+ const nodeCliTemplate = {
110
+ id: 'node-cli',
111
+ title: 'Node CLI',
112
+ description: 'TypeScript ESM CLI with bin entry, tsconfig, vitest, and an ashlr-hub-lite layout.',
113
+ files({ name, category }) {
114
+ return [
115
+ {
116
+ path: 'README.md',
117
+ content: `# ${name}
118
+
119
+ > Category: \`${category}\` · Stack: \`node-cli\`
120
+
121
+ A TypeScript ESM CLI scaffolded with [ashlr](https://github.com/ashlrai/ashlr-hub).
122
+
123
+ ## Usage
124
+
125
+ \`\`\`bash
126
+ npm install
127
+ npm run build
128
+ node dist/index.js --help
129
+ \`\`\`
130
+
131
+ ## Scripts
132
+
133
+ | Script | Purpose |
134
+ |--------|---------|
135
+ | \`npm run build\` | Compile TypeScript to \`dist/\` |
136
+ | \`npm test\` | Run vitest suite |
137
+ | \`npm run typecheck\` | Type-check without emitting |
138
+ | \`npm run lint\` | ESLint |
139
+ `,
140
+ },
141
+ {
142
+ path: 'package.json',
143
+ content: JSON.stringify({
144
+ name,
145
+ version: '0.1.0',
146
+ description: `${name} CLI`,
147
+ type: 'module',
148
+ bin: {
149
+ [name]: './dist/index.js',
150
+ },
151
+ main: './dist/index.js',
152
+ scripts: {
153
+ build: 'tsc',
154
+ test: 'vitest run',
155
+ typecheck: 'tsc --noEmit',
156
+ lint: 'eslint src',
157
+ },
158
+ devDependencies: {
159
+ typescript: '^5.4.0',
160
+ vitest: '^1.6.0',
161
+ '@typescript-eslint/eslint-plugin': '^7.0.0',
162
+ '@typescript-eslint/parser': '^7.0.0',
163
+ eslint: '^8.57.0',
164
+ },
165
+ }, null, 2) + '\n',
166
+ },
167
+ {
168
+ path: 'tsconfig.json',
169
+ content: JSON.stringify({
170
+ compilerOptions: {
171
+ target: 'ES2022',
172
+ module: 'NodeNext',
173
+ moduleResolution: 'NodeNext',
174
+ outDir: './dist',
175
+ rootDir: './src',
176
+ strict: true,
177
+ skipLibCheck: true,
178
+ declaration: true,
179
+ declarationMap: true,
180
+ sourceMap: true,
181
+ },
182
+ include: ['src'],
183
+ exclude: ['node_modules', 'dist'],
184
+ }, null, 2) + '\n',
185
+ },
186
+ {
187
+ path: 'src/index.ts',
188
+ content: `#!/usr/bin/env node
189
+ /**
190
+ * ${name} — entry point
191
+ */
192
+
193
+ const [,, ...args] = process.argv;
194
+
195
+ if (args.includes('--help') || args.includes('-h')) {
196
+ console.log(\`${name} — a CLI tool\\n\\nUsage: ${name} [options]\\n\\nOptions:\\n --help, -h Show this help\`);
197
+ process.exit(0);
198
+ }
199
+
200
+ console.log(\`Hello from ${name}!\`);
201
+ `,
202
+ mode: 0o755,
203
+ },
204
+ {
205
+ path: 'src/index.test.ts',
206
+ content: `import { describe, it, expect } from 'vitest';
207
+
208
+ describe('${name}', () => {
209
+ it('placeholder passes', () => {
210
+ expect(true).toBe(true);
211
+ });
212
+ });
213
+ `,
214
+ },
215
+ gitignore(['*.tsbuildinfo']),
216
+ claudeMd(name, category, 'node-cli'),
217
+ mcpJson(),
218
+ genomeGitkeep(),
219
+ ];
220
+ },
221
+ };
222
+ // ---------------------------------------------------------------------------
223
+ // Template: mcp-server
224
+ // ---------------------------------------------------------------------------
225
+ const mcpServerTemplate = {
226
+ id: 'mcp-server',
227
+ title: 'MCP Server',
228
+ description: 'Minimal @modelcontextprotocol/sdk stdio server skeleton with TypeScript ESM.',
229
+ files({ name, category }) {
230
+ return [
231
+ {
232
+ path: 'README.md',
233
+ content: `# ${name}
234
+
235
+ > Category: \`${category}\` · Stack: \`mcp-server\`
236
+
237
+ A minimal MCP (Model Context Protocol) stdio server scaffolded with [ashlr](https://github.com/ashlrai/ashlr-hub).
238
+
239
+ ## Usage
240
+
241
+ \`\`\`bash
242
+ npm install
243
+ npm run build
244
+ node dist/server.js
245
+ \`\`\`
246
+
247
+ Wire into a Claude Code project via \`.mcp.json\`:
248
+
249
+ \`\`\`json
250
+ {
251
+ "mcpServers": {
252
+ "${name}": {
253
+ "command": "node",
254
+ "args": ["path/to/${name}/dist/server.js"]
255
+ }
256
+ }
257
+ }
258
+ \`\`\`
259
+
260
+ ## Scripts
261
+
262
+ | Script | Purpose |
263
+ |--------|---------|
264
+ | \`npm run build\` | Compile TypeScript to \`dist/\` |
265
+ | \`npm test\` | Run vitest suite |
266
+ | \`npm run typecheck\` | Type-check without emitting |
267
+ `,
268
+ },
269
+ {
270
+ path: 'package.json',
271
+ content: JSON.stringify({
272
+ name,
273
+ version: '0.1.0',
274
+ description: `${name} MCP server`,
275
+ type: 'module',
276
+ main: './dist/server.js',
277
+ scripts: {
278
+ build: 'tsc',
279
+ test: 'vitest run',
280
+ typecheck: 'tsc --noEmit',
281
+ start: 'node dist/server.js',
282
+ },
283
+ dependencies: {
284
+ '@modelcontextprotocol/sdk': '^1.0.0',
285
+ },
286
+ devDependencies: {
287
+ typescript: '^5.4.0',
288
+ vitest: '^1.6.0',
289
+ },
290
+ }, null, 2) + '\n',
291
+ },
292
+ {
293
+ path: 'tsconfig.json',
294
+ content: JSON.stringify({
295
+ compilerOptions: {
296
+ target: 'ES2022',
297
+ module: 'NodeNext',
298
+ moduleResolution: 'NodeNext',
299
+ outDir: './dist',
300
+ rootDir: './src',
301
+ strict: true,
302
+ skipLibCheck: true,
303
+ declaration: true,
304
+ sourceMap: true,
305
+ },
306
+ include: ['src'],
307
+ exclude: ['node_modules', 'dist'],
308
+ }, null, 2) + '\n',
309
+ },
310
+ {
311
+ path: 'src/server.ts',
312
+ content: `/**
313
+ * ${name} — MCP stdio server entry point
314
+ *
315
+ * Skeleton using @modelcontextprotocol/sdk.
316
+ * Add your tools, resources, and prompts below.
317
+ */
318
+
319
+ import { Server } from '@modelcontextprotocol/sdk/server/index.js';
320
+ import { StdioServerTransport } from '@modelcontextprotocol/sdk/server/stdio.js';
321
+ import {
322
+ CallToolRequestSchema,
323
+ ListToolsRequestSchema,
324
+ } from '@modelcontextprotocol/sdk/types.js';
325
+
326
+ const server = new Server(
327
+ { name: '${name}', version: '0.1.0' },
328
+ { capabilities: { tools: {} } },
329
+ );
330
+
331
+ // ---------------------------------------------------------------------------
332
+ // Tools
333
+ // ---------------------------------------------------------------------------
334
+
335
+ server.setRequestHandler(ListToolsRequestSchema, async () => ({
336
+ tools: [
337
+ {
338
+ name: 'hello',
339
+ description: 'A starter tool — returns a greeting.',
340
+ inputSchema: {
341
+ type: 'object' as const,
342
+ properties: {
343
+ name: { type: 'string', description: 'Name to greet' },
344
+ },
345
+ },
346
+ },
347
+ ],
348
+ }));
349
+
350
+ server.setRequestHandler(CallToolRequestSchema, async (request) => {
351
+ const { name: toolName, arguments: args } = request.params;
352
+
353
+ if (toolName === 'hello') {
354
+ const who = (args as { name?: string }).name ?? 'world';
355
+ return {
356
+ content: [{ type: 'text', text: \`Hello, \${who}! From ${name} MCP server.\` }],
357
+ };
358
+ }
359
+
360
+ throw new Error(\`Unknown tool: \${toolName}\`);
361
+ });
362
+
363
+ // ---------------------------------------------------------------------------
364
+ // Start
365
+ // ---------------------------------------------------------------------------
366
+
367
+ const transport = new StdioServerTransport();
368
+ await server.connect(transport);
369
+ `,
370
+ mode: 0o755,
371
+ },
372
+ {
373
+ path: 'src/server.test.ts',
374
+ content: `import { describe, it, expect } from 'vitest';
375
+
376
+ describe('${name} server', () => {
377
+ it('placeholder passes', () => {
378
+ expect(true).toBe(true);
379
+ });
380
+ });
381
+ `,
382
+ },
383
+ gitignore(['*.tsbuildinfo']),
384
+ claudeMd(name, category, 'mcp-server'),
385
+ mcpJson(),
386
+ genomeGitkeep(),
387
+ ];
388
+ },
389
+ };
390
+ // ---------------------------------------------------------------------------
391
+ // Template: next-app
392
+ // ---------------------------------------------------------------------------
393
+ const nextAppTemplate = {
394
+ id: 'next-app',
395
+ title: 'Next.js App',
396
+ description: 'Minimal Next.js 14 App Router project with TypeScript and Tailwind CSS.',
397
+ files({ name, category }) {
398
+ return [
399
+ {
400
+ path: 'README.md',
401
+ content: `# ${name}
402
+
403
+ > Category: \`${category}\` · Stack: \`next-app\`
404
+
405
+ A minimal Next.js 14 application scaffolded with [ashlr](https://github.com/ashlrai/ashlr-hub).
406
+
407
+ ## Usage
408
+
409
+ \`\`\`bash
410
+ npm install
411
+ npm run dev
412
+ \`\`\`
413
+
414
+ Open [http://localhost:3000](http://localhost:3000).
415
+
416
+ ## Scripts
417
+
418
+ | Script | Purpose |
419
+ |--------|---------|
420
+ | \`npm run dev\` | Start development server |
421
+ | \`npm run build\` | Production build |
422
+ | \`npm start\` | Start production server |
423
+ | \`npm run lint\` | ESLint |
424
+ `,
425
+ },
426
+ {
427
+ path: 'package.json',
428
+ content: JSON.stringify({
429
+ name,
430
+ version: '0.1.0',
431
+ description: `${name} Next.js app`,
432
+ private: true,
433
+ scripts: {
434
+ dev: 'next dev',
435
+ build: 'next build',
436
+ start: 'next start',
437
+ lint: 'next lint',
438
+ },
439
+ dependencies: {
440
+ next: '^14.2.0',
441
+ react: '^18.3.0',
442
+ 'react-dom': '^18.3.0',
443
+ },
444
+ devDependencies: {
445
+ typescript: '^5.4.0',
446
+ '@types/node': '^20.0.0',
447
+ '@types/react': '^18.3.0',
448
+ '@types/react-dom': '^18.3.0',
449
+ tailwindcss: '^3.4.0',
450
+ autoprefixer: '^10.4.0',
451
+ postcss: '^8.4.0',
452
+ eslint: '^8.57.0',
453
+ 'eslint-config-next': '^14.2.0',
454
+ },
455
+ }, null, 2) + '\n',
456
+ },
457
+ {
458
+ path: 'tsconfig.json',
459
+ content: JSON.stringify({
460
+ compilerOptions: {
461
+ target: 'ES2017',
462
+ lib: ['dom', 'dom.iterable', 'esnext'],
463
+ allowJs: true,
464
+ skipLibCheck: true,
465
+ strict: true,
466
+ noEmit: true,
467
+ esModuleInterop: true,
468
+ module: 'esnext',
469
+ moduleResolution: 'bundler',
470
+ resolveJsonModule: true,
471
+ isolatedModules: true,
472
+ jsx: 'preserve',
473
+ incremental: true,
474
+ plugins: [{ name: 'next' }],
475
+ paths: { '@/*': ['./src/*'] },
476
+ },
477
+ include: ['next-env.d.ts', '**/*.ts', '**/*.tsx', '.next/types/**/*.ts'],
478
+ exclude: ['node_modules'],
479
+ }, null, 2) + '\n',
480
+ },
481
+ {
482
+ path: 'next.config.ts',
483
+ content: `import type { NextConfig } from 'next';
484
+
485
+ const nextConfig: NextConfig = {
486
+ // Add your Next.js config here
487
+ };
488
+
489
+ export default nextConfig;
490
+ `,
491
+ },
492
+ {
493
+ path: 'src/app/layout.tsx',
494
+ content: `import type { Metadata } from 'next';
495
+
496
+ export const metadata: Metadata = {
497
+ title: '${name}',
498
+ description: '${name} — scaffolded with ashlr',
499
+ };
500
+
501
+ export default function RootLayout({
502
+ children,
503
+ }: {
504
+ children: React.ReactNode;
505
+ }) {
506
+ return (
507
+ <html lang="en">
508
+ <body>{children}</body>
509
+ </html>
510
+ );
511
+ }
512
+ `,
513
+ },
514
+ {
515
+ path: 'src/app/page.tsx',
516
+ content: `export default function Home() {
517
+ return (
518
+ <main>
519
+ <h1>${name}</h1>
520
+ <p>Scaffolded with <strong>ashlr</strong>. Start editing <code>src/app/page.tsx</code>.</p>
521
+ </main>
522
+ );
523
+ }
524
+ `,
525
+ },
526
+ {
527
+ path: 'src/app/globals.css',
528
+ content: `@tailwind base;
529
+ @tailwind components;
530
+ @tailwind utilities;
531
+ `,
532
+ },
533
+ {
534
+ path: 'tailwind.config.ts',
535
+ content: `import type { Config } from 'tailwindcss';
536
+
537
+ const config: Config = {
538
+ content: [
539
+ './src/pages/**/*.{js,ts,jsx,tsx,mdx}',
540
+ './src/components/**/*.{js,ts,jsx,tsx,mdx}',
541
+ './src/app/**/*.{js,ts,jsx,tsx,mdx}',
542
+ ],
543
+ theme: {
544
+ extend: {},
545
+ },
546
+ plugins: [],
547
+ };
548
+
549
+ export default config;
550
+ `,
551
+ },
552
+ {
553
+ path: 'postcss.config.js',
554
+ content: `export default {
555
+ plugins: {
556
+ tailwindcss: {},
557
+ autoprefixer: {},
558
+ },
559
+ };
560
+ `,
561
+ },
562
+ {
563
+ path: '.eslintrc.json',
564
+ content: JSON.stringify({ extends: 'next/core-web-vitals' }, null, 2) + '\n',
565
+ },
566
+ gitignore(['.next/', 'out/', '*.tsbuildinfo', '.env*.local']),
567
+ claudeMd(name, category, 'next-app'),
568
+ mcpJson(),
569
+ genomeGitkeep(),
570
+ ];
571
+ },
572
+ };
573
+ // ---------------------------------------------------------------------------
574
+ // Registry
575
+ // ---------------------------------------------------------------------------
576
+ export const TEMPLATES = [
577
+ nodeCliTemplate,
578
+ mcpServerTemplate,
579
+ nextAppTemplate,
580
+ minimalTemplate,
581
+ ];
582
+ /**
583
+ * M33: builtin TEMPLATES + validated templates from enabled plugins.
584
+ * Best-effort: a broken plugin layer yields the builtins only. Plugin
585
+ * template ids arrive prefixed `<plugin>:<id>` (wrappers.validateTemplate).
586
+ */
587
+ export async function getTemplates(cfg) {
588
+ let fromPlugins = [];
589
+ try {
590
+ const { loadConfig } = await import('../config.js');
591
+ const { getPluginTemplates } = await import('../plugins/registry.js');
592
+ fromPlugins = await getPluginTemplates(cfg ?? loadConfig());
593
+ }
594
+ catch {
595
+ fromPlugins = [];
596
+ }
597
+ return [...TEMPLATES, ...fromPlugins];
598
+ }
599
+ export function getTemplate(id) {
600
+ return TEMPLATES.find((t) => t.id === id) ?? null;
601
+ }
602
+ export function listTemplates() {
603
+ return TEMPLATES.map(({ id, title, description }) => ({ id, title, description }));
604
+ }
605
+ //# sourceMappingURL=templates.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"templates.js","sourceRoot":"","sources":["../../../src/core/lifecycle/templates.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,59 @@
1
+ /**
2
+ * core/mcp-gateway.ts — MCP aggregation gateway + per-server probe.
3
+ *
4
+ * Two responsibilities:
5
+ *
6
+ * 1. probeServer(spec, timeoutMs): start ONE downstream MCP server as a child,
7
+ * list its tools, tear it down, and return an McpServerHealth. NEVER throws —
8
+ * startup failures, timeouts, and crashes surface in the returned health
9
+ * object (ok:false + error). Used by `ashlr mcp doctor` and gateway startup.
10
+ *
11
+ * 2. startGateway(registry): run a stdio MCP server (this process) that starts
12
+ * every discovered downstream as a child, namespaces their tools as
13
+ * `<server>__<tool>`, and proxies tools/list + tools/call to the correct
14
+ * downstream. ROBUST: per-downstream startup timeout; a downstream that
15
+ * fails to start is skipped with a stderr warning and never crashes the
16
+ * gateway. Point ANY agent at `ashlr mcp` to get every discovered tool.
17
+ *
18
+ * This module is the ONLY place (besides mcp-registry) allowed to depend on
19
+ * @modelcontextprotocol/sdk.
20
+ */
21
+ import type { McpRegistry, McpServerSpec, McpServerHealth } from './types.js';
22
+ /**
23
+ * Env var set on every downstream child the gateway spawns. A downstream that
24
+ * is itself an ashlr gateway can read this to refuse re-aggregation, providing
25
+ * a second line of defense against the self-spawn fork bomb (the primary
26
+ * defense is isSelfGateway() filtering at startGateway).
27
+ */
28
+ export declare const GATEWAY_ENV_MARKER = "ASHLR_MCP_GATEWAY";
29
+ /**
30
+ * True when a spec resolves to THIS aggregation gateway — i.e. running it as a
31
+ * downstream would recurse (`ashlr mcp install` writes exactly such an entry:
32
+ * name "ashlr", command <bin>/ashlr, args ['mcp']). We detect it structurally
33
+ * (no path resolution needed): the canonical installed entry is `args`
34
+ * containing 'mcp' AND the command basename being `ashlr`, OR the conventional
35
+ * name 'ashlr' paired with an 'mcp' arg. Skipping these prevents an unbounded
36
+ * fan-out of nested gateways.
37
+ */
38
+ export declare function isSelfGateway(spec: McpServerSpec): boolean;
39
+ /**
40
+ * Start a single downstream MCP server, list its tools, and tear it down.
41
+ * NEVER throws — all failures (ENOENT, crash, timeout) are reported via the
42
+ * returned McpServerHealth (ok:false, toolCount:0, tools:[], error:<msg>).
43
+ *
44
+ * @param spec The downstream server spec to probe.
45
+ * @param timeoutMs Per-probe startup/list timeout (default 8s).
46
+ */
47
+ export declare function probeServer(spec: McpServerSpec, timeoutMs?: number): Promise<McpServerHealth>;
48
+ /**
49
+ * Run the aggregation gateway on stdio.
50
+ *
51
+ * Starts every server in `registry` as a child (skipping any that fail to start
52
+ * within the timeout, with a stderr warning), exposes their tools namespaced as
53
+ * `<server>__<tool>`, and proxies tools/list + tools/call to the owning
54
+ * downstream. Resolves only when the gateway transport closes (stdin EOF).
55
+ *
56
+ * @param registry The discovered MCP servers to aggregate.
57
+ * @param timeoutMs Per-downstream startup timeout (default 8s).
58
+ */
59
+ export declare function startGateway(registry: McpRegistry, timeoutMs?: number): Promise<void>;