@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,482 @@
1
+ /**
2
+ * `ashlr pulse` — rich local observability dashboard.
3
+ *
4
+ * Flags:
5
+ * --json machine-readable ActivityRollup
6
+ * --window 1d|7d|30d window (default 7d)
7
+ * --project <name> restrict to a single project
8
+ *
9
+ * Renders: window summary (totals + cost), by-project table, top models,
10
+ * budget status (warn/over highlighted). Honors privacy guardrails — prints
11
+ * only aggregate metadata, never content. Returns process exit code.
12
+ *
13
+ * Uses lazy imports so the command degrades gracefully before M5 core modules
14
+ * are built, matching the M3/M4 lazy-import pattern.
15
+ */
16
+ // ---------------------------------------------------------------------------
17
+ // ANSI helpers (non-TTY safe)
18
+ // ---------------------------------------------------------------------------
19
+ import { C, pad, makeColors, isTty } from './ui.js';
20
+ const { bold, dim, red, green, yellow, cyan, gray, magenta } = makeColors(isTty());
21
+ let _buildRollup = undefined;
22
+ async function loadBuildRollup() {
23
+ if (_buildRollup === undefined) {
24
+ try {
25
+ const mod = await import('../core/observability/rollup.js');
26
+ _buildRollup = mod.buildRollup;
27
+ }
28
+ catch {
29
+ _buildRollup = null;
30
+ }
31
+ }
32
+ return _buildRollup ?? null;
33
+ }
34
+ async function loadConfig() {
35
+ const mod = await import('../core/config.js');
36
+ return mod.loadConfig();
37
+ }
38
+ let _buildForecast = undefined;
39
+ async function loadBuildForecast() {
40
+ if (_buildForecast === undefined) {
41
+ try {
42
+ const mod = await import('../core/observability/forecast.js');
43
+ _buildForecast = mod.buildForecast;
44
+ }
45
+ catch {
46
+ _buildForecast = null;
47
+ }
48
+ }
49
+ return _buildForecast ?? null;
50
+ }
51
+ let _evalGovernance = undefined;
52
+ async function loadEvalGovernance() {
53
+ if (_evalGovernance === undefined) {
54
+ try {
55
+ const mod = await import('../core/observability/governance.js');
56
+ _evalGovernance = mod.evalGovernance;
57
+ }
58
+ catch {
59
+ _evalGovernance = null;
60
+ }
61
+ }
62
+ return _evalGovernance ?? null;
63
+ }
64
+ function parsePulseArgs(args) {
65
+ const result = {
66
+ window: '7d',
67
+ project: undefined,
68
+ json: false,
69
+ };
70
+ let i = 0;
71
+ while (i < args.length) {
72
+ const arg = args[i];
73
+ if (arg === '--json') {
74
+ result.json = true;
75
+ i++;
76
+ }
77
+ else if (arg === '--window') {
78
+ const val = args[++i];
79
+ if (!val || !['1d', '7d', '30d'].includes(val)) {
80
+ result.usageError = `--window requires one of: 1d, 7d, 30d; got: ${val ?? '(missing)'}`;
81
+ return result;
82
+ }
83
+ result.window = val;
84
+ i++;
85
+ }
86
+ else if (arg === '--project') {
87
+ const val = args[++i];
88
+ if (!val) {
89
+ result.usageError = `--project requires a project name`;
90
+ return result;
91
+ }
92
+ result.project = val;
93
+ i++;
94
+ }
95
+ else if (arg === '--help' || arg === '-h') {
96
+ // handled upstream
97
+ i++;
98
+ }
99
+ else {
100
+ result.usageError = `unknown flag: ${arg}`;
101
+ return result;
102
+ }
103
+ }
104
+ return result;
105
+ }
106
+ // ---------------------------------------------------------------------------
107
+ // Formatting helpers
108
+ // ---------------------------------------------------------------------------
109
+ /** Format token count as compact string (e.g. 1.2M, 340K, 512). */
110
+ function fmtTokens(n) {
111
+ if (n >= 1_000_000)
112
+ return `${(n / 1_000_000).toFixed(1)}M`;
113
+ if (n >= 1_000)
114
+ return `${(n / 1_000).toFixed(0)}K`;
115
+ return String(n);
116
+ }
117
+ /** Format USD cost. */
118
+ function fmtUsd(n) {
119
+ if (n === 0)
120
+ return '$0.00';
121
+ if (n < 0.01)
122
+ return `$${n.toFixed(5)}`;
123
+ if (n < 1)
124
+ return `$${n.toFixed(3)}`;
125
+ return `$${n.toFixed(2)}`;
126
+ }
127
+ /** Format a project path for display — show basename or last 2 segments. */
128
+ function fmtProject(p) {
129
+ const parts = p.replace(/\/$/, '').split('/').filter(Boolean);
130
+ if (parts.length === 0)
131
+ return p;
132
+ if (parts.length === 1)
133
+ return parts[0];
134
+ // Show last 2 path segments joined by /
135
+ return `${parts[parts.length - 2]}/${parts[parts.length - 1]}`;
136
+ }
137
+ /** Format a window label as a human-readable span. */
138
+ function fmtWindow(w) {
139
+ switch (w) {
140
+ case '1d': return 'last 24 hours';
141
+ case '7d': return 'last 7 days';
142
+ case '30d': return 'last 30 days';
143
+ default: return w;
144
+ }
145
+ }
146
+ /** Format an ISO timestamp as a short local date+time. */
147
+ function fmtDate(iso) {
148
+ try {
149
+ const d = new Date(iso);
150
+ return d.toLocaleString('en-US', {
151
+ month: 'short', day: 'numeric',
152
+ hour: '2-digit', minute: '2-digit',
153
+ hour12: false,
154
+ });
155
+ }
156
+ catch {
157
+ return iso;
158
+ }
159
+ }
160
+ /** Render a budget alert line with appropriate color. */
161
+ function renderBudgetLine(budget) {
162
+ const ICON_BY_LEVEL = { over: '●', warn: '◐', ok: '○' };
163
+ const COLOR_BY_LEVEL = { over: red, warn: yellow, ok: green };
164
+ const icon = ICON_BY_LEVEL[budget.level];
165
+ const colorFn = COLOR_BY_LEVEL[budget.level];
166
+ const parts = [colorFn(`${icon} ${budget.message}`)];
167
+ if (budget.capUsd !== null) {
168
+ const pct = budget.capUsd > 0 ? Math.round((budget.spentUsd / budget.capUsd) * 100) : 0;
169
+ parts.push(gray(`(${fmtUsd(budget.spentUsd)} / ${fmtUsd(budget.capUsd)} USD ${pct}%)`));
170
+ }
171
+ if (budget.capTokens !== null) {
172
+ const pct = budget.capTokens > 0 ? Math.round((budget.spentTokens / budget.capTokens) * 100) : 0;
173
+ parts.push(gray(`(${fmtTokens(budget.spentTokens)} / ${fmtTokens(budget.capTokens)} tok ${pct}%)`));
174
+ }
175
+ return parts.join(' ');
176
+ }
177
+ /** Render the M19 spend-governance status line. */
178
+ function renderGovernanceLine(gov) {
179
+ const ICON = gov.level === 'over' ? '●' : gov.level === 'warn' ? '◐' : '○';
180
+ const colorFn = gov.level === 'over' ? red : gov.level === 'warn' ? yellow : green;
181
+ const levelStr = colorFn(`${ICON} ${gov.level.toUpperCase()}`);
182
+ const detail = gov.capUsd !== null
183
+ ? gray(` ($${gov.spentUsd.toFixed(2)} / $${gov.capUsd.toFixed(2)} this ${gov.window})`)
184
+ : dim(' (no cap configured)');
185
+ return `${levelStr}${detail}`;
186
+ }
187
+ /** Render the M15 cost/savings/forecast line (estimates clearly labeled). */
188
+ function renderForecastLine(fc) {
189
+ const spent = `spent ${bold(fmtUsd(fc.spentUsd))} (${fc.window})`;
190
+ const saved = fc.localSavingsUsd > 0
191
+ ? ` ${green(`saved ~${fmtUsd(fc.localSavingsUsd)} vs cloud`)}`
192
+ : ` ${dim('$0 cloud usage')}`;
193
+ const proj = ` ${dim(`projected ~${fmtUsd(fc.projectedMonthlyUsd)}/mo`)}`;
194
+ return `${spent}${saved}${proj} ${dim('[estimates]')}`;
195
+ }
196
+ // ---------------------------------------------------------------------------
197
+ // Sparkline / bar chart for daily usage
198
+ // ---------------------------------------------------------------------------
199
+ /** Render a compact horizontal bar chart for by-day token totals. */
200
+ function renderDayBars(rollup) {
201
+ const days = rollup.byDay;
202
+ if (days.length === 0) {
203
+ console.log(` ${dim('(no daily data)')}`);
204
+ return;
205
+ }
206
+ const maxTokens = Math.max(...days.map(d => d.tokensIn + d.tokensOut), 1);
207
+ const BAR_WIDTH = 20;
208
+ // Show at most 14 days to keep output tight
209
+ const visible = days.slice(-14);
210
+ for (const day of visible) {
211
+ const total = day.tokensIn + day.tokensOut;
212
+ const barLen = Math.round((total / maxTokens) * BAR_WIDTH);
213
+ const bar = '█'.repeat(barLen) + '░'.repeat(BAR_WIDTH - barLen);
214
+ const dayLabel = day.day.slice(5); // MM-DD
215
+ const tokenStr = pad(fmtTokens(total), 6, 'right');
216
+ const costStr = fmtUsd(day.estCostUsd);
217
+ const sessStr = day.sessions > 0 ? gray(`${day.sessions}s`) : gray(' ');
218
+ console.log(` ${gray(dayLabel)} ${cyan(bar)} ${pad(tokenStr, 6, 'right')} tok ` +
219
+ `${pad(costStr, 7, 'right')} ${sessStr}`);
220
+ }
221
+ }
222
+ // ---------------------------------------------------------------------------
223
+ // Rich dashboard renderer
224
+ // ---------------------------------------------------------------------------
225
+ function renderDashboard(rollup, forecast, governance) {
226
+ const { window: win, since, totals, byProject, byModel, budget } = rollup;
227
+ // ── Header ────────────────────────────────────────────────────────────────
228
+ console.log('');
229
+ console.log(bold(' ashlr pulse') +
230
+ gray(` — ${fmtWindow(win)}`) +
231
+ dim(` (since ${fmtDate(since)})`));
232
+ console.log('');
233
+ // ── Totals summary ────────────────────────────────────────────────────────
234
+ const totalTok = totals.tokensIn + totals.tokensOut;
235
+ console.log(` ${bold('Tokens')} in ${cyan(fmtTokens(totals.tokensIn))} ` +
236
+ `out ${cyan(fmtTokens(totals.tokensOut))} ` +
237
+ `total ${bold(cyan(fmtTokens(totalTok)))}`);
238
+ console.log(` ${bold('Cost')} ${bold(cyan(fmtUsd(totals.estCostUsd)))}`);
239
+ if (forecast) {
240
+ console.log(` ${bold('Savings')} ${renderForecastLine(forecast)}`);
241
+ }
242
+ console.log(` ${bold('Sessions')} ${cyan(String(totals.sessions))} ` +
243
+ `${bold('Commits')} ${cyan(String(totals.commits))}`);
244
+ console.log('');
245
+ // ── Budget status ─────────────────────────────────────────────────────────
246
+ console.log(` ${bold('Budget')} ${renderBudgetLine(budget)}`);
247
+ if (governance) {
248
+ console.log(` ${bold('Governance')} ${renderGovernanceLine(governance)}`);
249
+ }
250
+ console.log('');
251
+ // ── By-project table ─────────────────────────────────────────────────────
252
+ if (byProject.length > 0) {
253
+ const projW = Math.min(40, Math.max(10, ...byProject.map(p => fmtProject(p.project).length)));
254
+ const sessW = 5;
255
+ const commitW = 7;
256
+ const tokW = 8;
257
+ const costW = 8;
258
+ console.log(` ${bold('By Project')}`);
259
+ console.log('');
260
+ console.log(` ${bold(pad('Project', projW))} ` +
261
+ `${bold(pad('Sess', sessW, 'right'))} ` +
262
+ `${bold(pad('Commits', commitW, 'right'))} ` +
263
+ `${bold(pad('Tokens', tokW, 'right'))} ` +
264
+ `${bold(pad('Cost', costW, 'right'))}`);
265
+ console.log(` ${'─'.repeat(projW)} ${'─'.repeat(sessW)} ` +
266
+ `${'─'.repeat(commitW)} ${'─'.repeat(tokW)} ${'─'.repeat(costW)}`);
267
+ // Show top 15 projects
268
+ for (const p of byProject.slice(0, 15)) {
269
+ const tokTotal = p.tokensIn + p.tokensOut;
270
+ const nameStr = fmtProject(p.project);
271
+ console.log(` ${pad(cyan(nameStr), projW)} ` +
272
+ `${pad(String(p.sessions), sessW, 'right')} ` +
273
+ `${pad(String(p.commits), commitW, 'right')} ` +
274
+ `${pad(fmtTokens(tokTotal), tokW, 'right')} ` +
275
+ `${pad(fmtUsd(p.estCostUsd), costW, 'right')}`);
276
+ }
277
+ if (byProject.length > 15) {
278
+ console.log(` ${dim(` … and ${byProject.length - 15} more project(s)`)}`);
279
+ }
280
+ console.log('');
281
+ }
282
+ else {
283
+ console.log(` ${dim('No project activity in this window.')}`);
284
+ console.log('');
285
+ }
286
+ // ── Top models ────────────────────────────────────────────────────────────
287
+ if (byModel.length > 0) {
288
+ const modelW = Math.min(44, Math.max(10, ...byModel.slice(0, 8).map(m => m.model.length)));
289
+ const callsW = 6;
290
+ const tokW2 = 8;
291
+ const costW2 = 8;
292
+ console.log(` ${bold('Top Models')}`);
293
+ console.log('');
294
+ console.log(` ${bold(pad('Model', modelW))} ` +
295
+ `${bold(pad('Calls', callsW, 'right'))} ` +
296
+ `${bold(pad('Tokens', tokW2, 'right'))} ` +
297
+ `${bold(pad('Cost', costW2, 'right'))}`);
298
+ console.log(` ${'─'.repeat(modelW)} ${'─'.repeat(callsW)} ` +
299
+ `${'─'.repeat(tokW2)} ${'─'.repeat(costW2)}`);
300
+ for (const m of byModel.slice(0, 8)) {
301
+ const tokTotal = m.tokensIn + m.tokensOut;
302
+ // Truncate long model ids
303
+ const modelStr = m.model.length > modelW ? m.model.slice(0, modelW - 1) + '…' : m.model;
304
+ // Color model name: local (ollama/lmstudio) = green, cloud = magenta
305
+ const isLocal = /ollama|lmstudio/i.test(m.model);
306
+ const modelColored = isLocal ? green(modelStr) : magenta(modelStr);
307
+ console.log(` ${pad(modelColored, modelW)} ` +
308
+ `${pad(String(m.calls), callsW, 'right')} ` +
309
+ `${pad(fmtTokens(tokTotal), tokW2, 'right')} ` +
310
+ `${pad(fmtUsd(m.estCostUsd), costW2, 'right')}`);
311
+ }
312
+ console.log('');
313
+ }
314
+ // ── Daily activity chart ──────────────────────────────────────────────────
315
+ if (rollup.byDay.length > 0) {
316
+ console.log(` ${bold('Daily Activity')} ${dim('(tokens/day)')}`);
317
+ console.log('');
318
+ renderDayBars(rollup);
319
+ console.log('');
320
+ }
321
+ // ── Footer ────────────────────────────────────────────────────────────────
322
+ console.log(dim(' All numbers computed locally from ~/.claude/projects and ~/.ashlr/runs.'));
323
+ if (budget.level !== 'ok') {
324
+ const tip = budget.level === 'over'
325
+ ? `Budget exceeded — check ${bold('ashlr doctor')} for details.`
326
+ : `Approaching budget cap — ${fmtUsd(budget.spentUsd)} spent.`;
327
+ console.log(` ${yellow('Tip:')} ${tip}`);
328
+ }
329
+ console.log('');
330
+ }
331
+ // ---------------------------------------------------------------------------
332
+ // cmdPulse — main entry point
333
+ // ---------------------------------------------------------------------------
334
+ /**
335
+ * `ashlr pulse` — rich local observability dashboard.
336
+ *
337
+ * Flags:
338
+ * --json machine-readable ActivityRollup
339
+ * --window 1d|7d|30d window (default 7d)
340
+ * --project <name> restrict to a single project
341
+ *
342
+ * Returns process exit code: 0 = ok/warn, 1 = budget over.
343
+ */
344
+ export async function cmdPulse(args) {
345
+ // Help shortcircuit
346
+ if (args[0] === '--help' || args[0] === '-h' || args[0] === 'help') {
347
+ printPulseHelp();
348
+ return 0;
349
+ }
350
+ const parsed = parsePulseArgs(args);
351
+ if (parsed.usageError) {
352
+ process.stderr.write(`${C.red}error:${C.reset} ${parsed.usageError}\n`);
353
+ return 2;
354
+ }
355
+ // Load buildRollup (lazy; degrades if M5 core not yet built).
356
+ // Load buildForecast lazily; degrades gracefully if M15 module not yet built.
357
+ // Load evalGovernance lazily; degrades gracefully if M19 module not yet built.
358
+ const [buildRollup, buildForecast, evalGovernance] = await Promise.all([
359
+ loadBuildRollup(),
360
+ loadBuildForecast(),
361
+ loadEvalGovernance(),
362
+ ]);
363
+ if (!buildRollup) {
364
+ process.stderr.write(`${C.red}error:${C.reset} pulse requires src/core/observability/rollup.ts (M5 module not yet built).\n`);
365
+ return 1;
366
+ }
367
+ // Load config
368
+ let cfg;
369
+ try {
370
+ cfg = await loadConfig();
371
+ }
372
+ catch (err) {
373
+ process.stderr.write(`${C.red}error:${C.reset} failed to load config: ` +
374
+ (err instanceof Error ? err.message : String(err)) + '\n');
375
+ return 1;
376
+ }
377
+ // Build rollup
378
+ let rollup;
379
+ try {
380
+ rollup = buildRollup(parsed.window, cfg, { project: parsed.project });
381
+ }
382
+ catch (err) {
383
+ process.stderr.write(`${C.red}error:${C.reset} failed to build rollup: ` +
384
+ (err instanceof Error ? err.message : String(err)) + '\n');
385
+ return 1;
386
+ }
387
+ // Build forecast (M15; degrades gracefully when module not yet present)
388
+ const forecastWindow = parsed.window === '1d' ? '7d' : parsed.window;
389
+ let forecast = null;
390
+ if (buildForecast) {
391
+ try {
392
+ forecast = buildForecast(forecastWindow, cfg);
393
+ }
394
+ catch {
395
+ // non-fatal — forecast is best-effort
396
+ forecast = null;
397
+ }
398
+ }
399
+ // Build governance verdict (M19; degrades gracefully when module not yet present)
400
+ let governance = null;
401
+ if (evalGovernance) {
402
+ try {
403
+ governance = evalGovernance(cfg);
404
+ }
405
+ catch {
406
+ // non-fatal — governance is best-effort
407
+ governance = null;
408
+ }
409
+ }
410
+ // Machine output.
411
+ // BACKWARD-COMPAT (M15): emit the ActivityRollup at the TOP LEVEL (as shipped
412
+ // through M14) and attach `forecast` as a purely additive field. Existing
413
+ // consumers — notably the M13 Raycast Pulse extension, which destructures
414
+ // { totals, byProject, byModel, budget } from the top level — keep working,
415
+ // while new consumers read the additive `.forecast`.
416
+ // M19: also attach `governance` as a purely additive field.
417
+ if (parsed.json) {
418
+ const out = { ...rollup, forecast, governance };
419
+ process.stdout.write(JSON.stringify(out, null, 2) + '\n');
420
+ return rollup.budget.level === 'over' ? 1 : 0;
421
+ }
422
+ // Rich dashboard
423
+ renderDashboard(rollup, forecast, governance);
424
+ return rollup.budget.level === 'over' ? 1 : 0;
425
+ }
426
+ // ---------------------------------------------------------------------------
427
+ // Help
428
+ // ---------------------------------------------------------------------------
429
+ function printPulseHelp() {
430
+ console.log('');
431
+ console.log(bold(' ashlr pulse') + dim(' — local-first observability dashboard'));
432
+ console.log('');
433
+ console.log(' ' + bold('Usage:'));
434
+ console.log('');
435
+ console.log(` ashlr pulse [options]`);
436
+ console.log('');
437
+ console.log(' ' + bold('Options:'));
438
+ console.log('');
439
+ const opts = [
440
+ ['--window 1d|7d|30d', 'Time window for the rollup (default: 7d).'],
441
+ ['--project <name>', 'Filter to a single project (path basename or full path).'],
442
+ ['--json', 'Emit ActivityRollup JSON on stdout; no ANSI rendering.'],
443
+ ];
444
+ const optW = Math.max(...opts.map(([o]) => o.length));
445
+ for (const [opt, desc] of opts) {
446
+ console.log(` ${cyan(pad(opt, optW))} ${desc}`);
447
+ }
448
+ console.log('');
449
+ console.log(' ' + bold('Data sources (local, read-only):'));
450
+ console.log('');
451
+ console.log(` ${dim('• ~/.claude/projects/**/*.jsonl — Claude Code session transcripts')}`);
452
+ console.log(` ${dim('• ~/.ashlr/runs/*.json — ashlr run records')}`);
453
+ console.log(` ${dim('• git log per indexed repo — commit counts')}`);
454
+ console.log('');
455
+ console.log(' ' + bold('Privacy:'));
456
+ console.log('');
457
+ console.log(` ${dim('• Only usage metadata is read (tokens, model, timestamp, project path).')}`);
458
+ console.log(` ${dim('• Message content is never read, stored, or printed.')}`);
459
+ console.log('');
460
+ console.log(' ' + bold('Budget caps + spend governance (M19):'));
461
+ console.log('');
462
+ console.log(` ${dim('Set in config: ashlr config set telemetry.budgetUsd 10.00')}`);
463
+ console.log(` ${dim(' ashlr config set telemetry.budgetWindow 7d')}`);
464
+ console.log(` ${dim(' ashlr config set telemetry.govAction warn # or block')}`);
465
+ console.log(` ${dim('Governance: ok <80% cap, warn >=80%, over >cap.')}`);
466
+ console.log(` ${dim('Advisory by default; use --over-budget to proceed when govAction=block.')}`);
467
+ console.log('');
468
+ console.log(' ' + bold('Exit codes:'));
469
+ console.log('');
470
+ console.log(` ${dim('0 ok or warn (under/near cap)')}`);
471
+ console.log(` ${dim('1 budget exceeded (over cap)')}`);
472
+ console.log(` ${dim('2 bad usage / invalid flag')}`);
473
+ console.log('');
474
+ console.log(' ' + bold('Examples:'));
475
+ console.log('');
476
+ console.log(` ${cyan('ashlr pulse')} ${dim('# 7-day dashboard')}`);
477
+ console.log(` ${cyan('ashlr pulse --window 1d')} ${dim('# today')}`);
478
+ console.log(` ${cyan('ashlr pulse --project ashlr-hub')} ${dim('# single project')}`);
479
+ console.log(` ${cyan('ashlr pulse --json | jq .totals')} ${dim('# machine-readable')}`);
480
+ console.log('');
481
+ }
482
+ //# sourceMappingURL=pulse.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"pulse.js","sourceRoot":"","sources":["../../src/cli/pulse.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,42 @@
1
+ /**
2
+ * CLI handler for `ashlr reflect` — M26 self-improvement / meta-learning.
3
+ *
4
+ * Scores the org's OWN past swarms/usage/genome, distills playbooks, and
5
+ * proposes routing/policy/prompt tuning. The DEFAULT path is a deterministic,
6
+ * local-only, READ-ONLY report — it writes nothing outside ~/.ashlr/learn/ and
7
+ * makes ZERO non-localhost connections.
8
+ *
9
+ * Usage:
10
+ * ashlr reflect [--since <7d|30d>] [--json] [--allow-cloud]
11
+ * ashlr reflect playbooks [--persist] [--allow-cloud] # distill (report-only); --persist writes to genome
12
+ * ashlr reflect propose # emit tuning PROPOSALS (pending)
13
+ *
14
+ * HARD SAFETY INVARIANTS (M26) enforced by this surface:
15
+ * - READ-ONLY history; writes ONLY under ~/.ashlr/learn/ (and, on `propose`,
16
+ * PENDING inbox proposals). NEVER writes config.json / router / prompts.
17
+ * - PROPOSAL-ONLY tuning: `propose` routes to createProposal (status pending).
18
+ * - LOCAL-FIRST: metrics need no model; optional narrative/playbook text routes
19
+ * through getActiveClient(local-only unless --allow-cloud + key), mirroring ask.ts.
20
+ * - BOUNDED: --since window / capped maxRuns; no unbounded loops.
21
+ * - NO OUTWARD ACTION: no push/PR/deploy/merge.
22
+ *
23
+ * NOTE (integration — owned by the Build/Integrate phase, NOT this scaffold):
24
+ * src/cli/index.ts must add a `loadReflectCmd = lazyCmd(() => import('./reflect.js'),
25
+ * (m) => m.cmdReflect as Cmd, 'reflect command requires src/cli/reflect.ts (M26 …)')`,
26
+ * a `case 'reflect':` in the dispatch switch, and a cmdHelp entry.
27
+ *
28
+ * Exit codes: 0 success, 1 runtime error, 2 bad usage.
29
+ */
30
+ /**
31
+ * `ashlr reflect [--since <Nd>] [--json] [--allow-cloud]`
32
+ * `ashlr reflect playbooks [--allow-cloud]`
33
+ * `ashlr reflect propose`
34
+ *
35
+ * Default path: deterministic, local-only, READ-ONLY report persisted under
36
+ * ~/.ashlr/learn/. `playbooks` distills + persists to the genome. `propose`
37
+ * emits PENDING tuning proposals into the inbox. Nothing auto-applies; no
38
+ * config/router/prompt is ever mutated.
39
+ *
40
+ * Exit codes: 0 success, 1 runtime error, 2 bad usage.
41
+ */
42
+ export declare function cmdReflect(args: string[]): Promise<number>;