@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
package/bin/ashlr ADDED
@@ -0,0 +1,8 @@
1
+ #!/usr/bin/env node
2
+ // Thin shim: delegate to the compiled CLI entrypoint.
3
+ // Resolve relative to this file so the symlink in ~/.local/bin works.
4
+ import { fileURLToPath } from 'node:url';
5
+ import { dirname, resolve } from 'node:path';
6
+
7
+ const here = dirname(fileURLToPath(import.meta.url));
8
+ import(resolve(here, '../dist/cli/index.js'));
@@ -0,0 +1,28 @@
1
+ /**
2
+ * api/core.ts — the PUBLIC programmatic surface of @ashlr/hub (M33).
3
+ *
4
+ * Curated, read-heavy re-exports so other tools can build on ashlr's local
5
+ * stores without shelling out to the CLI. Everything here follows the same
6
+ * safety rules as the CLI: reads are free; the only mutation exposed is the
7
+ * inbox proposal path (pending, human-gated) — applyProposal is deliberately
8
+ * NOT exported.
9
+ */
10
+ export { loadConfig, saveConfig, defaultConfig, CONFIG_PATH } from '../core/config.js';
11
+ export { loadIndex } from '../core/index-engine.js';
12
+ export { buildOrientation } from '../core/orient.js';
13
+ export { recall } from '../core/genome/recall.js';
14
+ export { loadGenome, appendHubEntry } from '../core/genome/store.js';
15
+ export { loadBacklog } from '../core/portfolio/backlog.js';
16
+ export { loadPreviousReport, listReports } from '../core/quality/store.js';
17
+ export { ask } from '../core/knowledge/ask.js';
18
+ export { impact, buildGraph } from '../core/knowledge/graph.js';
19
+ export { listRuns, loadRun } from '../core/run/orchestrator.js';
20
+ export { listSwarms, loadSwarm } from '../core/swarm/store.js';
21
+ export { estimateRun, estimateSwarm } from '../core/observability/estimate.js';
22
+ export { buildRollup } from '../core/observability/rollup.js';
23
+ export { listProposals, loadProposal, createProposal, pendingCount } from '../core/inbox/store.js';
24
+ export { readAudit } from '../core/sandbox/audit.js';
25
+ export { getProviderRegistry } from '../core/providers.js';
26
+ export { buildSeamRegistry } from '../core/seams/registry.js';
27
+ export { nativeToolDefs, listNativeTools, isNativeTool, callNativeTool } from '../core/mcp-native.js';
28
+ export { buildSnapshot } from '../core/dashboard.js';
@@ -0,0 +1,42 @@
1
+ /**
2
+ * api/core.ts — the PUBLIC programmatic surface of @ashlr/hub (M33).
3
+ *
4
+ * Curated, read-heavy re-exports so other tools can build on ashlr's local
5
+ * stores without shelling out to the CLI. Everything here follows the same
6
+ * safety rules as the CLI: reads are free; the only mutation exposed is the
7
+ * inbox proposal path (pending, human-gated) — applyProposal is deliberately
8
+ * NOT exported.
9
+ */
10
+ // Config (read + write of ~/.ashlr/config.json with validation)
11
+ export { loadConfig, saveConfig, defaultConfig, CONFIG_PATH } from '../core/config.js';
12
+ // Desktop index (read-only)
13
+ export { loadIndex } from '../core/index-engine.js';
14
+ // Orientation — the composite session-start context (M31)
15
+ export { buildOrientation } from '../core/orient.js';
16
+ // Genome memory
17
+ export { recall } from '../core/genome/recall.js';
18
+ export { loadGenome, appendHubEntry } from '../core/genome/store.js';
19
+ // Portfolio intelligence (read-only)
20
+ export { loadBacklog } from '../core/portfolio/backlog.js';
21
+ export { loadPreviousReport, listReports } from '../core/quality/store.js';
22
+ export { ask } from '../core/knowledge/ask.js';
23
+ export { impact, buildGraph } from '../core/knowledge/graph.js';
24
+ // Runs + swarms (read-only history)
25
+ export { listRuns, loadRun } from '../core/run/orchestrator.js';
26
+ export { listSwarms, loadSwarm } from '../core/swarm/store.js';
27
+ // Pre-flight estimation (M32)
28
+ export { estimateRun, estimateSwarm } from '../core/observability/estimate.js';
29
+ export { buildRollup } from '../core/observability/rollup.js';
30
+ // Approval inbox — list/load + CREATE (pending only). Approval/apply is
31
+ // deliberately NOT exported: that path stays human-gated via the CLI/web.
32
+ export { listProposals, loadProposal, createProposal, pendingCount } from '../core/inbox/store.js';
33
+ // Audit trail (read-only)
34
+ export { readAudit } from '../core/sandbox/audit.js';
35
+ // Providers + seams (read-only diagnostics)
36
+ export { getProviderRegistry } from '../core/providers.js';
37
+ export { buildSeamRegistry } from '../core/seams/registry.js';
38
+ // Native MCP tool registry (M31) — for hosts embedding ashlr's agent tools
39
+ export { nativeToolDefs, listNativeTools, isNativeTool, callNativeTool } from '../core/mcp-native.js';
40
+ // Dashboard snapshot (read-only aggregate)
41
+ export { buildSnapshot } from '../core/dashboard.js';
42
+ //# sourceMappingURL=core.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"core.js","sourceRoot":"","sources":["../../src/api/core.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAEH,gEAAgE;AAChE,OAAO,EAAE,UAAU,EAAE,UAAU,EAAE,aAAa,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAC;AAEvF,4BAA4B;AAC5B,OAAO,EAAE,SAAS,EAAE,MAAM,yBAAyB,CAAC;AAEpD,0DAA0D;AAC1D,OAAO,EAAE,gBAAgB,EAAE,MAAM,mBAAmB,CAAC;AAErD,gBAAgB;AAChB,OAAO,EAAE,MAAM,EAAE,MAAM,0BAA0B,CAAC;AAClD,OAAO,EAAE,UAAU,EAAE,cAAc,EAAE,MAAM,yBAAyB,CAAC;AAErE,qCAAqC;AACrC,OAAO,EAAE,WAAW,EAAE,MAAM,8BAA8B,CAAC;AAC3D,OAAO,EAAE,kBAAkB,EAAE,WAAW,EAAE,MAAM,0BAA0B,CAAC;AAC3E,OAAO,EAAE,GAAG,EAAE,MAAM,0BAA0B,CAAC;AAC/C,OAAO,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,4BAA4B,CAAC;AAEhE,oCAAoC;AACpC,OAAO,EAAE,QAAQ,EAAE,OAAO,EAAE,MAAM,6BAA6B,CAAC;AAChE,OAAO,EAAE,UAAU,EAAE,SAAS,EAAE,MAAM,wBAAwB,CAAC;AAE/D,8BAA8B;AAC9B,OAAO,EAAE,WAAW,EAAE,aAAa,EAAE,MAAM,mCAAmC,CAAC;AAC/E,OAAO,EAAE,WAAW,EAAE,MAAM,iCAAiC,CAAC;AAE9D,wEAAwE;AACxE,0EAA0E;AAC1E,OAAO,EAAE,aAAa,EAAE,YAAY,EAAE,cAAc,EAAE,YAAY,EAAE,MAAM,wBAAwB,CAAC;AAEnG,0BAA0B;AAC1B,OAAO,EAAE,SAAS,EAAE,MAAM,0BAA0B,CAAC;AAErD,4CAA4C;AAC5C,OAAO,EAAE,mBAAmB,EAAE,MAAM,sBAAsB,CAAC;AAC3D,OAAO,EAAE,iBAAiB,EAAE,MAAM,2BAA2B,CAAC;AAE9D,2EAA2E;AAC3E,OAAO,EAAE,cAAc,EAAE,eAAe,EAAE,YAAY,EAAE,cAAc,EAAE,MAAM,uBAAuB,CAAC;AAEtG,2CAA2C;AAC3C,OAAO,EAAE,aAAa,EAAE,MAAM,sBAAsB,CAAC"}
@@ -0,0 +1,9 @@
1
+ /**
2
+ * api/index.ts — the root entry of @ashlr/hub (M33).
3
+ *
4
+ * `import { loadConfig, recall, … } from '@ashlr/hub'` — the curated core
5
+ * surface plus the public types. Plugin authors import from
6
+ * '@ashlr/hub/plugin' instead (see ./plugin.ts).
7
+ */
8
+ export * from './core.js';
9
+ export type * from './types.js';
@@ -0,0 +1,9 @@
1
+ /**
2
+ * api/index.ts — the root entry of @ashlr/hub (M33).
3
+ *
4
+ * `import { loadConfig, recall, … } from '@ashlr/hub'` — the curated core
5
+ * surface plus the public types. Plugin authors import from
6
+ * '@ashlr/hub/plugin' instead (see ./plugin.ts).
7
+ */
8
+ export * from './core.js';
9
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/api/index.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,cAAc,WAAW,CAAC"}
@@ -0,0 +1,12 @@
1
+ /**
2
+ * api/plugin.ts — the PUBLIC plugin-system surface of @ashlr/hub (M33).
3
+ *
4
+ * Curated re-exports for plugin authors:
5
+ * import type { PluginManifest, AshlrPlugin, ... } from '@ashlr/hub/plugin';
6
+ * import { definePlugin, PLUGIN_API_VERSION } from '@ashlr/hub/plugin';
7
+ *
8
+ * Internals (registry, host-api, wrappers, manifest reader) stay unexported —
9
+ * add exports deliberately, never wholesale.
10
+ */
11
+ export { PLUGIN_API_VERSION, definePlugin, } from '../core/plugins/types.js';
12
+ export type { PluginCapability, PluginManifest, PluginHost, PluginScanner, PluginProviderSpec, PluginCommandSpec, PluginContributions, AshlrPlugin, } from '../core/plugins/types.js';
@@ -0,0 +1,13 @@
1
+ /**
2
+ * api/plugin.ts — the PUBLIC plugin-system surface of @ashlr/hub (M33).
3
+ *
4
+ * Curated re-exports for plugin authors:
5
+ * import type { PluginManifest, AshlrPlugin, ... } from '@ashlr/hub/plugin';
6
+ * import { definePlugin, PLUGIN_API_VERSION } from '@ashlr/hub/plugin';
7
+ *
8
+ * Internals (registry, host-api, wrappers, manifest reader) stay unexported —
9
+ * add exports deliberately, never wholesale.
10
+ */
11
+ // Types + identity helper for plugin authors.
12
+ export { PLUGIN_API_VERSION, definePlugin, } from '../core/plugins/types.js';
13
+ //# sourceMappingURL=plugin.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"plugin.js","sourceRoot":"","sources":["../../src/api/plugin.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAEH,8CAA8C;AAC9C,OAAO,EACL,kBAAkB,EAClB,YAAY,GACb,MAAM,0BAA0B,CAAC"}
@@ -0,0 +1,9 @@
1
+ /**
2
+ * api/types.ts — the PUBLIC type surface of @ashlr/hub (M33).
3
+ *
4
+ * Curated re-exports only: everything here is part of the published contract
5
+ * (`import type { … } from '@ashlr/hub/types'`). Internals stay unexported —
6
+ * add types deliberately, never wholesale.
7
+ */
8
+ export type { AshlrConfig, AshlrIndex, IndexedItem, ItemKind, GitStatus, RunState, RunTask, RunUsage, RunBudget, RunOptions, RunEstimate, PercentileTriple, SwarmRun, SwarmPlan, GenomeEntry, RecallHit, LearnInput, Backlog, WorkItem, WorkSource, HealthScore, HealthReport, HealthDimensionScore, AskResult, ImpactResult, KnowledgeGraph, Proposal, ProposalKind, ProposalStatus, ApplyResult, AuditEntry, ActivityRollup, DashboardSnapshot, WebServerOptions, OrientResult, NativeToolDef, NativeToolSafety, NotifyTarget, } from '../core/types.js';
9
+ export type { SeamId, SeamImpl, SeamCloud, SeamStatus, SeamRegistry, } from '../core/seams/types.js';
@@ -0,0 +1,9 @@
1
+ /**
2
+ * api/types.ts — the PUBLIC type surface of @ashlr/hub (M33).
3
+ *
4
+ * Curated re-exports only: everything here is part of the published contract
5
+ * (`import type { … } from '@ashlr/hub/types'`). Internals stay unexported —
6
+ * add types deliberately, never wholesale.
7
+ */
8
+ export {};
9
+ //# sourceMappingURL=types.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.js","sourceRoot":"","sources":["../../src/api/types.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG"}
@@ -0,0 +1,20 @@
1
+ /**
2
+ * Shared CLI argument-parsing helpers.
3
+ *
4
+ * Extracted from the per-command parsers where the same validated-flag idioms
5
+ * were repeated. These are pure validators — callers keep their own loop and
6
+ * index handling, so control flow is unchanged.
7
+ */
8
+ /**
9
+ * Validate a flag value as a positive integer.
10
+ *
11
+ * Returns `{ n }` on success or `{ error }` with the canonical message
12
+ * (`--<name> requires a positive integer, got: <raw|(missing)>`) on failure.
13
+ * Mirrors the inline `parseInt(...,10)` + `isNaN || <= 0` checks the command
14
+ * parsers used, including the `(missing)` placeholder for an absent value.
15
+ */
16
+ export declare function parsePositiveInt(name: string, raw: string | undefined): {
17
+ n: number;
18
+ } | {
19
+ error: string;
20
+ };
@@ -0,0 +1,23 @@
1
+ /**
2
+ * Shared CLI argument-parsing helpers.
3
+ *
4
+ * Extracted from the per-command parsers where the same validated-flag idioms
5
+ * were repeated. These are pure validators — callers keep their own loop and
6
+ * index handling, so control flow is unchanged.
7
+ */
8
+ /**
9
+ * Validate a flag value as a positive integer.
10
+ *
11
+ * Returns `{ n }` on success or `{ error }` with the canonical message
12
+ * (`--<name> requires a positive integer, got: <raw|(missing)>`) on failure.
13
+ * Mirrors the inline `parseInt(...,10)` + `isNaN || <= 0` checks the command
14
+ * parsers used, including the `(missing)` placeholder for an absent value.
15
+ */
16
+ export function parsePositiveInt(name, raw) {
17
+ const n = raw !== undefined ? parseInt(raw, 10) : NaN;
18
+ if (isNaN(n) || n <= 0) {
19
+ return { error: `--${name} requires a positive integer, got: ${raw ?? '(missing)'}` };
20
+ }
21
+ return { n };
22
+ }
23
+ //# sourceMappingURL=args.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"args.js","sourceRoot":"","sources":["../../src/cli/args.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH;;;;;;;GAOG;AACH,MAAM,UAAU,gBAAgB,CAC9B,IAAY,EACZ,GAAuB;IAEvB,MAAM,CAAC,GAAG,GAAG,KAAK,SAAS,CAAC,CAAC,CAAC,QAAQ,CAAC,GAAG,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC;IACtD,IAAI,KAAK,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC;QACvB,OAAO,EAAE,KAAK,EAAE,KAAK,IAAI,sCAAsC,GAAG,IAAI,WAAW,EAAE,EAAE,CAAC;IACxF,CAAC;IACD,OAAO,EAAE,CAAC,EAAE,CAAC;AACf,CAAC"}
@@ -0,0 +1,22 @@
1
+ /**
2
+ * CLI handler for `ashlr ask "<question>"`.
3
+ *
4
+ * Performs LOCAL RAG across the indexed portfolio and prints the synthesized
5
+ * answer with cited sources. All code stays on-machine by default — cloud is
6
+ * NEVER used unless --allow-cloud is explicitly passed AND a key exists.
7
+ *
8
+ * Usage:
9
+ * ashlr ask "<question>" [--repo <path>] [--allow-cloud] [--json]
10
+ *
11
+ * Exit codes: 0 success, 1 error, 2 bad usage.
12
+ */
13
+ /**
14
+ * `ashlr ask "<question>" [--repo <path>] [--allow-cloud] [--json]`
15
+ *
16
+ * LOCAL RAG over the indexed portfolio. Default path: local model only, all
17
+ * code stays on-machine. --allow-cloud opts into cloud synthesis (prints a
18
+ * clear warning before sending code off-machine).
19
+ *
20
+ * Exit codes: 0 success, 1 runtime error, 2 bad usage.
21
+ */
22
+ export declare function cmdAsk(args: string[]): Promise<number>;
@@ -0,0 +1,240 @@
1
+ /**
2
+ * CLI handler for `ashlr ask "<question>"`.
3
+ *
4
+ * Performs LOCAL RAG across the indexed portfolio and prints the synthesized
5
+ * answer with cited sources. All code stays on-machine by default — cloud is
6
+ * NEVER used unless --allow-cloud is explicitly passed AND a key exists.
7
+ *
8
+ * Usage:
9
+ * ashlr ask "<question>" [--repo <path>] [--allow-cloud] [--json]
10
+ *
11
+ * Exit codes: 0 success, 1 error, 2 bad usage.
12
+ */
13
+ import path from 'node:path';
14
+ import { pad, makeColors, isTty } from './ui.js';
15
+ import { isEnrolled } from '../core/sandbox/policy.js';
16
+ let _ask = undefined;
17
+ async function importAsk() {
18
+ if (_ask === undefined) {
19
+ try {
20
+ const mod = (await import('../core/knowledge/ask.js'));
21
+ _ask = mod.ask;
22
+ }
23
+ catch {
24
+ _ask = null;
25
+ }
26
+ }
27
+ return _ask ?? null;
28
+ }
29
+ function parseAskArgs(args) {
30
+ let question;
31
+ let repo;
32
+ let allowCloud = false;
33
+ let json = false;
34
+ let help = false;
35
+ let error;
36
+ for (let i = 0; i < args.length; i++) {
37
+ const a = args[i];
38
+ if (a === '--help' || a === '-h') {
39
+ help = true;
40
+ }
41
+ else if (a === '--allow-cloud') {
42
+ allowCloud = true;
43
+ }
44
+ else if (a === '--json') {
45
+ json = true;
46
+ }
47
+ else if (a === '--repo') {
48
+ const next = args[++i];
49
+ if (!next || next.startsWith('--')) {
50
+ error = '--repo requires a path argument';
51
+ break;
52
+ }
53
+ repo = next;
54
+ }
55
+ else if (!a.startsWith('--')) {
56
+ // Positional: the question
57
+ if (question === undefined) {
58
+ question = a;
59
+ }
60
+ else {
61
+ // Multiple positional args — join them as the question
62
+ question = question + ' ' + a;
63
+ }
64
+ }
65
+ else {
66
+ error = `Unknown flag: ${a}`;
67
+ break;
68
+ }
69
+ }
70
+ if (!error && !help && !question) {
71
+ error = 'A question is required. Usage: ashlr ask "<question>"';
72
+ }
73
+ return { question: question ?? '', repo, allowCloud, json, help, error };
74
+ }
75
+ // ─── Help ─────────────────────────────────────────────────────────────────────
76
+ function printHelp() {
77
+ const tty = isTty();
78
+ const { bold, cyan, dim, gray } = makeColors(tty);
79
+ const out = (s = '') => process.stdout.write(s + '\n');
80
+ out('');
81
+ out(bold(' ashlr ask') + dim(' — LOCAL RAG across the indexed portfolio'));
82
+ out('');
83
+ out(' ' + bold('Usage:'));
84
+ out(` ${cyan('ashlr ask "<question>"')} [--repo <path>] [--allow-cloud] [--json]`);
85
+ out('');
86
+ out(' ' + bold('Options:'));
87
+ const opts = [
88
+ ['--repo <path>', 'Scope the search to a single enrolled repo (absolute path).'],
89
+ ['--allow-cloud', 'Allow cloud model for synthesis if local is unavailable. SENDS CODE TO CLOUD.'],
90
+ ['--json', 'Emit AskResult as JSON on stdout instead of human-readable output.'],
91
+ ['--help', 'Show this help.'],
92
+ ];
93
+ const w = Math.max(...opts.map(([f]) => f.length));
94
+ for (const [flag, desc] of opts) {
95
+ out(` ${cyan(pad(flag, w))} ${desc}`);
96
+ }
97
+ out('');
98
+ out(' ' + bold('Examples:'));
99
+ out(` ${cyan('ashlr ask "how does the orchestrator handle retries"')}`);
100
+ out(` ${cyan('ashlr ask "what deps are shared across repos"')}`);
101
+ out(` ${cyan('ashlr ask "where is auth logic" --repo ~/projects/my-app')}`);
102
+ out(` ${cyan('ashlr ask "summarize the run pipeline" --json')}`);
103
+ out('');
104
+ out(' ' + gray('Run `ashlr knowledge build` first to index enrolled repos.'));
105
+ out('');
106
+ }
107
+ // ─── Human-readable output ───────────────────────────────────────────────────
108
+ function printAskHuman(result) {
109
+ const tty = isTty();
110
+ const { bold, cyan, dim, green, yellow, gray } = makeColors(tty);
111
+ const out = (s = '') => process.stdout.write(s + '\n');
112
+ out('');
113
+ out(bold(' Answer') + gray(` [${result.method} · ${result.local ? 'local' : 'cloud'}]`));
114
+ out('');
115
+ // Indent the answer body
116
+ const lines = result.answer.split('\n');
117
+ for (const line of lines) {
118
+ out(' ' + line);
119
+ }
120
+ out('');
121
+ if (result.sources.length === 0) {
122
+ out(dim(' (no sources cited)'));
123
+ out('');
124
+ return;
125
+ }
126
+ out(bold(' Sources:'));
127
+ const srcW = Math.max(...result.sources.map(s => `${s.repo}:${s.file}`.length), 12);
128
+ for (const src of result.sources) {
129
+ const loc = `${src.repo}:${src.file}`;
130
+ const lineRef = src.line > 0 ? yellow(`L${src.line}`) : dim('—');
131
+ out(` ${cyan(pad(loc, srcW))} ${lineRef}`);
132
+ }
133
+ out('');
134
+ if (!result.local) {
135
+ out(green(' ') + yellow('Note: answer was synthesized using a CLOUD model (--allow-cloud was set).'));
136
+ out('');
137
+ }
138
+ }
139
+ // ─── Main export ─────────────────────────────────────────────────────────────
140
+ /**
141
+ * `ashlr ask "<question>" [--repo <path>] [--allow-cloud] [--json]`
142
+ *
143
+ * LOCAL RAG over the indexed portfolio. Default path: local model only, all
144
+ * code stays on-machine. --allow-cloud opts into cloud synthesis (prints a
145
+ * clear warning before sending code off-machine).
146
+ *
147
+ * Exit codes: 0 success, 1 runtime error, 2 bad usage.
148
+ */
149
+ export async function cmdAsk(args) {
150
+ const parsed = parseAskArgs(args);
151
+ if (parsed.help) {
152
+ printHelp();
153
+ return 0;
154
+ }
155
+ if (parsed.error) {
156
+ process.stderr.write('error: ' + parsed.error + '\n');
157
+ process.stderr.write('Run `ashlr ask --help` for usage.\n');
158
+ return 2;
159
+ }
160
+ const tty = isTty();
161
+ const { bold, yellow, red, dim, cyan } = makeColors(tty);
162
+ // ── ENROLLMENT-SCOPED: reject a non-enrolled --repo before any retrieval ──
163
+ // (docs/contracts/CONTRACT-M25.md invariant 3: ask is enrolled-repos-only.) Resolve to absolute
164
+ // and validate; loadChunks would silently return [] otherwise.
165
+ let scopedRepo = parsed.repo;
166
+ if (parsed.repo !== undefined) {
167
+ const abs = path.resolve(parsed.repo);
168
+ if (!isEnrolled(abs)) {
169
+ process.stderr.write(red('error: ') +
170
+ `not enrolled: ${parsed.repo}\n` +
171
+ ' ask is scoped to enrolled repos. Enroll first: ashlr enroll add <path>\n');
172
+ return 1;
173
+ }
174
+ scopedRepo = abs;
175
+ }
176
+ // ── Privacy warning for --allow-cloud ────────────────────────────────────
177
+ if (parsed.allowCloud && !parsed.json) {
178
+ process.stderr.write(yellow('warning: ') +
179
+ '--allow-cloud is set — repository code chunks MAY be sent to a cloud model for synthesis.\n' +
180
+ ' Omit --allow-cloud to keep all code on-machine (default).\n');
181
+ }
182
+ // ── Load the ask module ───────────────────────────────────────────────────
183
+ const askFn = await importAsk();
184
+ if (!askFn) {
185
+ process.stderr.write(red('error: ') +
186
+ 'ask command requires src/core/knowledge/ask.ts (M25 module not yet built).\n');
187
+ return 1;
188
+ }
189
+ // ── Execute ───────────────────────────────────────────────────────────────
190
+ let result;
191
+ try {
192
+ result = await askFn(parsed.question, {
193
+ repo: scopedRepo,
194
+ allowCloud: parsed.allowCloud,
195
+ });
196
+ }
197
+ catch (err) {
198
+ const msg = err instanceof Error ? err.message : String(err);
199
+ // Hint when nothing is indexed yet
200
+ if (msg.toLowerCase().includes('no chunks') ||
201
+ msg.toLowerCase().includes('not indexed') ||
202
+ msg.toLowerCase().includes('empty')) {
203
+ process.stderr.write(red('error: ') + 'No knowledge indexed yet.\n' +
204
+ dim(' Run ') + cyan('ashlr knowledge build') + dim(' to index enrolled repos first.\n'));
205
+ return 1;
206
+ }
207
+ process.stderr.write(red('error: ') + msg + '\n');
208
+ return 1;
209
+ }
210
+ // ── No chunks found: hint to build ───────────────────────────────────────
211
+ if (result.sources.length === 0 && !result.answer.trim()) {
212
+ if (parsed.json) {
213
+ process.stdout.write(JSON.stringify(result) + '\n');
214
+ }
215
+ else {
216
+ process.stderr.write(dim('No knowledge indexed') +
217
+ (parsed.repo ? ` for repo: ${parsed.repo}` : '') + '.\n');
218
+ process.stderr.write(dim(' Run ') + cyan('ashlr knowledge build') +
219
+ (parsed.repo ? ` --repo ${parsed.repo}` : '') +
220
+ dim(' to index enrolled repos.\n'));
221
+ }
222
+ return 1;
223
+ }
224
+ // ── Output ────────────────────────────────────────────────────────────────
225
+ if (parsed.json) {
226
+ process.stdout.write(JSON.stringify(result) + '\n');
227
+ }
228
+ else {
229
+ // Hint when nothing is indexed but the module returned something
230
+ if (result.sources.length === 0) {
231
+ process.stderr.write(bold('Hint: ') +
232
+ dim('no sources found — run ') +
233
+ cyan('ashlr knowledge build') +
234
+ dim(' to index enrolled repos.\n'));
235
+ }
236
+ printAskHuman(result);
237
+ }
238
+ return 0;
239
+ }
240
+ //# sourceMappingURL=ask.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ask.js","sourceRoot":"","sources":["../../src/cli/ask.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AAEH,OAAO,IAAI,MAAM,WAAW,CAAC;AAC7B,OAAO,EAAE,GAAG,EAAE,UAAU,EAAE,KAAK,EAAE,MAAM,SAAS,CAAC;AACjD,OAAO,EAAE,UAAU,EAAE,MAAM,2BAA2B,CAAC;AASvD,IAAI,IAAI,GAA6B,SAAS,CAAC;AAE/C,KAAK,UAAU,SAAS;IACtB,IAAI,IAAI,KAAK,SAAS,EAAE,CAAC;QACvB,IAAI,CAAC;YACH,MAAM,GAAG,GAAG,CAAC,MAAM,MAAM,CAAC,0BAA0B,CAAC,CAAmB,CAAC;YACzE,IAAI,GAAG,GAAG,CAAC,GAAG,CAAC;QACjB,CAAC;QAAC,MAAM,CAAC;YACP,IAAI,GAAG,IAAI,CAAC;QACd,CAAC;IACH,CAAC;IACD,OAAO,IAAI,IAAI,IAAI,CAAC;AACtB,CAAC;AAaD,SAAS,YAAY,CAAC,IAAc;IAClC,IAAI,QAA4B,CAAC;IACjC,IAAI,IAAwB,CAAC;IAC7B,IAAI,UAAU,GAAG,KAAK,CAAC;IACvB,IAAI,IAAI,GAAG,KAAK,CAAC;IACjB,IAAI,IAAI,GAAG,KAAK,CAAC;IACjB,IAAI,KAAyB,CAAC;IAE9B,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,IAAI,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;QACrC,MAAM,CAAC,GAAG,IAAI,CAAC,CAAC,CAAC,CAAC;QAClB,IAAI,CAAC,KAAK,QAAQ,IAAI,CAAC,KAAK,IAAI,EAAE,CAAC;YACjC,IAAI,GAAG,IAAI,CAAC;QACd,CAAC;aAAM,IAAI,CAAC,KAAK,eAAe,EAAE,CAAC;YACjC,UAAU,GAAG,IAAI,CAAC;QACpB,CAAC;aAAM,IAAI,CAAC,KAAK,QAAQ,EAAE,CAAC;YAC1B,IAAI,GAAG,IAAI,CAAC;QACd,CAAC;aAAM,IAAI,CAAC,KAAK,QAAQ,EAAE,CAAC;YAC1B,MAAM,IAAI,GAAG,IAAI,CAAC,EAAE,CAAC,CAAC,CAAC;YACvB,IAAI,CAAC,IAAI,IAAI,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,EAAE,CAAC;gBACnC,KAAK,GAAG,iCAAiC,CAAC;gBAC1C,MAAM;YACR,CAAC;YACD,IAAI,GAAG,IAAI,CAAC;QACd,CAAC;aAAM,IAAI,CAAC,CAAC,CAAC,UAAU,CAAC,IAAI,CAAC,EAAE,CAAC;YAC/B,2BAA2B;YAC3B,IAAI,QAAQ,KAAK,SAAS,EAAE,CAAC;gBAC3B,QAAQ,GAAG,CAAC,CAAC;YACf,CAAC;iBAAM,CAAC;gBACN,uDAAuD;gBACvD,QAAQ,GAAG,QAAQ,GAAG,GAAG,GAAG,CAAC,CAAC;YAChC,CAAC;QACH,CAAC;aAAM,CAAC;YACN,KAAK,GAAG,iBAAiB,CAAC,EAAE,CAAC;YAC7B,MAAM;QACR,CAAC;IACH,CAAC;IAED,IAAI,CAAC,KAAK,IAAI,CAAC,IAAI,IAAI,CAAC,QAAQ,EAAE,CAAC;QACjC,KAAK,GAAG,uDAAuD,CAAC;IAClE,CAAC;IAED,OAAO,EAAE,QAAQ,EAAE,QAAQ,IAAI,EAAE,EAAE,IAAI,EAAE,UAAU,EAAE,IAAI,EAAE,IAAI,EAAE,KAAK,EAAE,CAAC;AAC3E,CAAC;AAED,iFAAiF;AAEjF,SAAS,SAAS;IAChB,MAAM,GAAG,GAAG,KAAK,EAAE,CAAC;IACpB,MAAM,EAAE,IAAI,EAAE,IAAI,EAAE,GAAG,EAAE,IAAI,EAAE,GAAG,UAAU,CAAC,GAAG,CAAC,CAAC;IAClD,MAAM,GAAG,GAAG,CAAC,CAAC,GAAG,EAAE,EAAE,EAAE,CAAC,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,GAAG,IAAI,CAAC,CAAC;IAEvD,GAAG,CAAC,EAAE,CAAC,CAAC;IACR,GAAG,CAAC,IAAI,CAAC,aAAa,CAAC,GAAG,GAAG,CAAC,2CAA2C,CAAC,CAAC,CAAC;IAC5E,GAAG,CAAC,EAAE,CAAC,CAAC;IACR,GAAG,CAAC,IAAI,GAAG,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC;IAC3B,GAAG,CAAC,OAAO,IAAI,CAAC,wBAAwB,CAAC,2CAA2C,CAAC,CAAC;IACtF,GAAG,CAAC,EAAE,CAAC,CAAC;IACR,GAAG,CAAC,IAAI,GAAG,IAAI,CAAC,UAAU,CAAC,CAAC,CAAC;IAE7B,MAAM,IAAI,GAAuB;QAC/B,CAAC,eAAe,EAAE,6DAA6D,CAAC;QAChF,CAAC,eAAe,EAAE,+EAA+E,CAAC;QAClG,CAAC,QAAQ,EAAS,oEAAoE,CAAC;QACvF,CAAC,QAAQ,EAAS,iBAAiB,CAAC;KACrC,CAAC;IACF,MAAM,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC;IACnD,KAAK,MAAM,CAAC,IAAI,EAAE,IAAI,CAAC,IAAI,IAAI,EAAE,CAAC;QAChC,GAAG,CAAC,OAAO,IAAI,CAAC,GAAG,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC,KAAK,IAAI,EAAE,CAAC,CAAC;IAC5C,CAAC;IAED,GAAG,CAAC,EAAE,CAAC,CAAC;IACR,GAAG,CAAC,IAAI,GAAG,IAAI,CAAC,WAAW,CAAC,CAAC,CAAC;IAC9B,GAAG,CAAC,OAAO,IAAI,CAAC,sDAAsD,CAAC,EAAE,CAAC,CAAC;IAC3E,GAAG,CAAC,OAAO,IAAI,CAAC,+CAA+C,CAAC,EAAE,CAAC,CAAC;IACpE,GAAG,CAAC,OAAO,IAAI,CAAC,0DAA0D,CAAC,EAAE,CAAC,CAAC;IAC/E,GAAG,CAAC,OAAO,IAAI,CAAC,+CAA+C,CAAC,EAAE,CAAC,CAAC;IACpE,GAAG,CAAC,EAAE,CAAC,CAAC;IACR,GAAG,CAAC,IAAI,GAAG,IAAI,CAAC,4DAA4D,CAAC,CAAC,CAAC;IAC/E,GAAG,CAAC,EAAE,CAAC,CAAC;AACV,CAAC;AAED,gFAAgF;AAEhF,SAAS,aAAa,CAAC,MAA4C;IACjE,MAAM,GAAG,GAAG,KAAK,EAAE,CAAC;IACpB,MAAM,EAAE,IAAI,EAAE,IAAI,EAAE,GAAG,EAAE,KAAK,EAAE,MAAM,EAAE,IAAI,EAAE,GAAG,UAAU,CAAC,GAAG,CAAC,CAAC;IACjE,MAAM,GAAG,GAAG,CAAC,CAAC,GAAG,EAAE,EAAE,EAAE,CAAC,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,GAAG,IAAI,CAAC,CAAC;IAEvD,GAAG,CAAC,EAAE,CAAC,CAAC;IACR,GAAG,CAAC,IAAI,CAAC,UAAU,CAAC,GAAG,IAAI,CAAC,KAAK,MAAM,CAAC,MAAM,MAAM,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,OAAO,GAAG,CAAC,CAAC,CAAC;IAC1F,GAAG,CAAC,EAAE,CAAC,CAAC;IAER,yBAAyB;IACzB,MAAM,KAAK,GAAG,MAAM,CAAC,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;IACxC,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE,CAAC;QACzB,GAAG,CAAC,IAAI,GAAG,IAAI,CAAC,CAAC;IACnB,CAAC;IACD,GAAG,CAAC,EAAE,CAAC,CAAC;IAER,IAAI,MAAM,CAAC,OAAO,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QAChC,GAAG,CAAC,GAAG,CAAC,sBAAsB,CAAC,CAAC,CAAC;QACjC,GAAG,CAAC,EAAE,CAAC,CAAC;QACR,OAAO;IACT,CAAC;IAED,GAAG,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC,CAAC;IACxB,MAAM,IAAI,GAAG,IAAI,CAAC,GAAG,CACnB,GAAG,MAAM,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,GAAG,CAAC,CAAC,IAAI,IAAI,CAAC,CAAC,IAAI,EAAE,CAAC,MAAM,CAAC,EACxD,EAAE,CACH,CAAC;IACF,KAAK,MAAM,GAAG,IAAI,MAAM,CAAC,OAAO,EAAE,CAAC;QACjC,MAAM,GAAG,GAAG,GAAG,GAAG,CAAC,IAAI,IAAI,GAAG,CAAC,IAAI,EAAE,CAAC;QACtC,MAAM,OAAO,GAAG,GAAG,CAAC,IAAI,GAAG,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,IAAI,GAAG,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;QACjE,GAAG,CAAC,OAAO,IAAI,CAAC,GAAG,CAAC,GAAG,EAAE,IAAI,CAAC,CAAC,KAAK,OAAO,EAAE,CAAC,CAAC;IACjD,CAAC;IACD,GAAG,CAAC,EAAE,CAAC,CAAC;IAER,IAAI,CAAC,MAAM,CAAC,KAAK,EAAE,CAAC;QAClB,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,GAAG,MAAM,CAAC,2EAA2E,CAAC,CAAC,CAAC;QACvG,GAAG,CAAC,EAAE,CAAC,CAAC;IACV,CAAC;AACH,CAAC;AAED,gFAAgF;AAEhF;;;;;;;;GAQG;AACH,MAAM,CAAC,KAAK,UAAU,MAAM,CAAC,IAAc;IACzC,MAAM,MAAM,GAAG,YAAY,CAAC,IAAI,CAAC,CAAC;IAElC,IAAI,MAAM,CAAC,IAAI,EAAE,CAAC;QAChB,SAAS,EAAE,CAAC;QACZ,OAAO,CAAC,CAAC;IACX,CAAC;IAED,IAAI,MAAM,CAAC,KAAK,EAAE,CAAC;QACjB,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,SAAS,GAAG,MAAM,CAAC,KAAK,GAAG,IAAI,CAAC,CAAC;QACtD,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,qCAAqC,CAAC,CAAC;QAC5D,OAAO,CAAC,CAAC;IACX,CAAC;IAED,MAAM,GAAG,GAAG,KAAK,EAAE,CAAC;IACpB,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,GAAG,EAAE,GAAG,EAAE,IAAI,EAAE,GAAG,UAAU,CAAC,GAAG,CAAC,CAAC;IAEzD,6EAA6E;IAC7E,gGAAgG;IAChG,+DAA+D;IAC/D,IAAI,UAAU,GAAuB,MAAM,CAAC,IAAI,CAAC;IACjD,IAAI,MAAM,CAAC,IAAI,KAAK,SAAS,EAAE,CAAC;QAC9B,MAAM,GAAG,GAAG,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;QACtC,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,EAAE,CAAC;YACrB,OAAO,CAAC,MAAM,CAAC,KAAK,CAClB,GAAG,CAAC,SAAS,CAAC;gBACd,iBAAiB,MAAM,CAAC,IAAI,IAAI;gBAChC,iFAAiF,CAClF,CAAC;YACF,OAAO,CAAC,CAAC;QACX,CAAC;QACD,UAAU,GAAG,GAAG,CAAC;IACnB,CAAC;IAED,4EAA4E;IAC5E,IAAI,MAAM,CAAC,UAAU,IAAI,CAAC,MAAM,CAAC,IAAI,EAAE,CAAC;QACtC,OAAO,CAAC,MAAM,CAAC,KAAK,CAClB,MAAM,CAAC,WAAW,CAAC;YACnB,6FAA6F;YAC7F,sEAAsE,CACvE,CAAC;IACJ,CAAC;IAED,6EAA6E;IAC7E,MAAM,KAAK,GAAG,MAAM,SAAS,EAAE,CAAC;IAChC,IAAI,CAAC,KAAK,EAAE,CAAC;QACX,OAAO,CAAC,MAAM,CAAC,KAAK,CAClB,GAAG,CAAC,SAAS,CAAC;YACd,8EAA8E,CAC/E,CAAC;QACF,OAAO,CAAC,CAAC;IACX,CAAC;IAED,6EAA6E;IAC7E,IAAI,MAA4C,CAAC;IACjD,IAAI,CAAC;QACH,MAAM,GAAG,MAAM,KAAK,CAAC,MAAM,CAAC,QAAQ,EAAE;YACpC,IAAI,EAAE,UAAU;YAChB,UAAU,EAAE,MAAM,CAAC,UAAU;SAC9B,CAAC,CAAC;IACL,CAAC;IAAC,OAAO,GAAG,EAAE,CAAC;QACb,MAAM,GAAG,GAAG,GAAG,YAAY,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;QAE7D,mCAAmC;QACnC,IACE,GAAG,CAAC,WAAW,EAAE,CAAC,QAAQ,CAAC,WAAW,CAAC;YACvC,GAAG,CAAC,WAAW,EAAE,CAAC,QAAQ,CAAC,aAAa,CAAC;YACzC,GAAG,CAAC,WAAW,EAAE,CAAC,QAAQ,CAAC,OAAO,CAAC,EACnC,CAAC;YACD,OAAO,CAAC,MAAM,CAAC,KAAK,CAClB,GAAG,CAAC,SAAS,CAAC,GAAG,6BAA6B;gBAC9C,GAAG,CAAC,QAAQ,CAAC,GAAG,IAAI,CAAC,uBAAuB,CAAC,GAAG,GAAG,CAAC,mCAAmC,CAAC,CACzF,CAAC;YACF,OAAO,CAAC,CAAC;QACX,CAAC;QAED,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,GAAG,CAAC,SAAS,CAAC,GAAG,GAAG,GAAG,IAAI,CAAC,CAAC;QAClD,OAAO,CAAC,CAAC;IACX,CAAC;IAED,4EAA4E;IAC5E,IAAI,MAAM,CAAC,OAAO,CAAC,MAAM,KAAK,CAAC,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,IAAI,EAAE,EAAE,CAAC;QACzD,IAAI,MAAM,CAAC,IAAI,EAAE,CAAC;YAChB,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,GAAG,IAAI,CAAC,CAAC;QACtD,CAAC;aAAM,CAAC;YACN,OAAO,CAAC,MAAM,CAAC,KAAK,CAClB,GAAG,CAAC,sBAAsB,CAAC;gBAC3B,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,cAAc,MAAM,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,GAAG,KAAK,CACzD,CAAC;YACF,OAAO,CAAC,MAAM,CAAC,KAAK,CAClB,GAAG,CAAC,QAAQ,CAAC,GAAG,IAAI,CAAC,uBAAuB,CAAC;gBAC7C,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,WAAW,MAAM,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;gBAC7C,GAAG,CAAC,6BAA6B,CAAC,CACnC,CAAC;QACJ,CAAC;QACD,OAAO,CAAC,CAAC;IACX,CAAC;IAED,6EAA6E;IAC7E,IAAI,MAAM,CAAC,IAAI,EAAE,CAAC;QAChB,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,GAAG,IAAI,CAAC,CAAC;IACtD,CAAC;SAAM,CAAC;QACN,iEAAiE;QACjE,IAAI,MAAM,CAAC,OAAO,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YAChC,OAAO,CAAC,MAAM,CAAC,KAAK,CAClB,IAAI,CAAC,QAAQ,CAAC;gBACd,GAAG,CAAC,yBAAyB,CAAC;gBAC9B,IAAI,CAAC,uBAAuB,CAAC;gBAC7B,GAAG,CAAC,6BAA6B,CAAC,CACnC,CAAC;QACJ,CAAC;QACD,aAAa,CAAC,MAAM,CAAC,CAAC;IACxB,CAAC;IAED,OAAO,CAAC,CAAC;AACX,CAAC"}
@@ -0,0 +1,26 @@
1
+ /**
2
+ * `ashlr audit` — READ-ONLY audit-trail viewer (Ashlr v2.1 MILESTONE H6, PART A).
3
+ *
4
+ * Tails the append-only JSONL audit trail (newest-first) written by
5
+ * `core/sandbox/audit.ts`. MUTATES NOTHING. No outward call. No model. The only
6
+ * thing this command does is READ `~/.ashlr/audit/<date>.jsonl` via `readAudit()`
7
+ * and print / filter it — see docs/contracts/CONTRACT-H6.md §A.3.
8
+ *
9
+ * H6 MOVES the viewer here from `cli/sandbox.ts` (where a minimal `cmdAudit`
10
+ * lived) and EXTENDS it with `--action` / `--result` / `--since` filters. The
11
+ * dispatcher's `loadAuditCmd` (src/cli/index.ts) is re-pointed at this module;
12
+ * the old `cmdAudit`/`formatAuditEntry`/`loadAuditModule` block in
13
+ * `cli/sandbox.ts` is removed in the implementation step.
14
+ *
15
+ * Flags (ALL read-only):
16
+ * --limit N | -n N | N Cap to the newest N records (applied AFTER filters).
17
+ * --json Emit the records as a JSON array.
18
+ * --action <verb> Filter by action; `--action enroll` matches `enroll:*`,
19
+ * `--action kill:on` matches exactly. [H6 NEW]
20
+ * --result <ok|refused|error> Filter by outcome. [H6 NEW]
21
+ * --since <ISO|YYYY-MM-DD> Drop records with ts strictly before this. [H6 NEW]
22
+ *
23
+ * Returns 0 on success, 2 on bad args (unknown flag / unparseable --since),
24
+ * 1 when the audit core module is not built.
25
+ */
26
+ export declare function cmdAudit(args: string[]): Promise<number>;