ashlr-plugin 1.36.4

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 (499) hide show
  1. package/.agents/plugins/marketplace.json +20 -0
  2. package/.claude-plugin/marketplace.json +39 -0
  3. package/.claude-plugin/plugin.json +36 -0
  4. package/.codex/agents/README.md +9 -0
  5. package/.codex/agents/ashlr-explorer.md +36 -0
  6. package/.codex/agents/ashlr-worker.md +38 -0
  7. package/.codex-plugin/plugin.json +45 -0
  8. package/.mcp.json +14 -0
  9. package/LICENSE +21 -0
  10. package/README.md +311 -0
  11. package/agents/ashlr-code.md +69 -0
  12. package/agents/ashlr-explore.md +44 -0
  13. package/agents/ashlr-plan.md +54 -0
  14. package/bench/fixtures/notebook-large.ipynb +660 -0
  15. package/bench/fixtures/notebook-small.ipynb +39 -0
  16. package/bench/fixtures/tasklist-closed.json +62 -0
  17. package/bench/fixtures/tasklist-large-mixed.json +27 -0
  18. package/bench/fixtures/tasklist-sprint-open.json +79 -0
  19. package/bench/fixtures/websearch-bun-runtime.json +32 -0
  20. package/bench/fixtures/websearch-react-hooks-patterns.json +32 -0
  21. package/bench/fixtures/websearch-typescript-generics.json +38 -0
  22. package/bench/refs/node-sdk/.refrev +1 -0
  23. package/bench/refs/node-sdk/README.md +17 -0
  24. package/bench/refs/node-sdk/src/agent/agent.ts +163 -0
  25. package/bench/refs/node-sdk/src/agent/create-agent-ui-stream.ts +83 -0
  26. package/bench/refs/node-sdk/src/agent/tool-loop-agent.ts +238 -0
  27. package/bench/refs/node-sdk/src/embed/embed-many.ts +409 -0
  28. package/bench/refs/node-sdk/src/embed/embed-result.ts +50 -0
  29. package/bench/refs/node-sdk/src/embed/embed.ts +257 -0
  30. package/bench/refs/node-sdk/src/error/invalid-argument-error.ts +34 -0
  31. package/bench/refs/node-sdk/src/error/invalid-tool-input-error.ts +33 -0
  32. package/bench/refs/node-sdk/src/error/no-object-generated-error.ts +70 -0
  33. package/bench/refs/node-sdk/src/generate-image/generate-image-result.ts +42 -0
  34. package/bench/refs/node-sdk/src/generate-image/generate-image.ts +362 -0
  35. package/bench/refs/node-sdk/src/generate-object/generate-object-result.ts +67 -0
  36. package/bench/refs/node-sdk/src/generate-object/generate-object.ts +501 -0
  37. package/bench/refs/node-sdk/src/generate-object/inject-json-instruction.ts +30 -0
  38. package/bench/refs/node-sdk/src/generate-object/output-strategy.ts +415 -0
  39. package/bench/refs/node-sdk/src/generate-object/repair-text.ts +12 -0
  40. package/bench/refs/node-sdk/src/generate-object/stream-object.ts +960 -0
  41. package/bench/refs/node-sdk/src/generate-speech/generate-speech.ts +191 -0
  42. package/bench/refs/node-sdk/src/generate-text/generate-text.ts +1484 -0
  43. package/bench/refs/node-sdk/src/generate-text/stream-text.ts +2708 -0
  44. package/bench/refs/node-sdk/src/generate-text/tool-call.ts +59 -0
  45. package/bench/refs/node-sdk/src/generate-text/tool-result.ts +36 -0
  46. package/bench/refs/node-sdk/src/telemetry/create-telemetry-dispatcher.ts +146 -0
  47. package/bench/refs/node-sdk/src/telemetry/telemetry-registry.ts +15 -0
  48. package/bench/refs/node-sdk/src/telemetry/telemetry.ts +223 -0
  49. package/bench/refs/node-sdk/src/util/async-iterable-stream.ts +94 -0
  50. package/bench/refs/node-sdk/src/util/consume-stream.ts +31 -0
  51. package/bench/refs/node-sdk/src/util/create-stitchable-stream.ts +112 -0
  52. package/bench/refs/node-sdk/src/util/download/download.ts +74 -0
  53. package/bench/refs/node-sdk/src/util/error-handler.ts +1 -0
  54. package/bench/refs/node-sdk/src/util/fix-json.ts +401 -0
  55. package/bench/refs/node-sdk/src/util/merge-objects.ts +79 -0
  56. package/bench/refs/python-lib/.refrev +1 -0
  57. package/bench/refs/python-lib/README.md +18 -0
  58. package/bench/refs/python-lib/pandas/core/_numba/executor.py +249 -0
  59. package/bench/refs/python-lib/pandas/core/_numba/extensions.py +586 -0
  60. package/bench/refs/python-lib/pandas/core/_numba/kernels/mean_.py +198 -0
  61. package/bench/refs/python-lib/pandas/core/_numba/kernels/min_max_.py +178 -0
  62. package/bench/refs/python-lib/pandas/core/_numba/kernels/sum_.py +255 -0
  63. package/bench/refs/python-lib/pandas/core/_numba/kernels/var_.py +251 -0
  64. package/bench/refs/python-lib/pandas/core/accessor.py +520 -0
  65. package/bench/refs/python-lib/pandas/core/api.py +138 -0
  66. package/bench/refs/python-lib/pandas/core/array_algos/masked_accumulations.py +97 -0
  67. package/bench/refs/python-lib/pandas/core/array_algos/masked_reductions.py +252 -0
  68. package/bench/refs/python-lib/pandas/core/array_algos/putmask.py +150 -0
  69. package/bench/refs/python-lib/pandas/core/array_algos/quantile.py +232 -0
  70. package/bench/refs/python-lib/pandas/core/array_algos/replace.py +159 -0
  71. package/bench/refs/python-lib/pandas/core/array_algos/take.py +609 -0
  72. package/bench/refs/python-lib/pandas/core/arraylike.py +534 -0
  73. package/bench/refs/python-lib/pandas/core/arrays/_arrow_string_mixins.py +434 -0
  74. package/bench/refs/python-lib/pandas/core/arrays/_mixins.py +630 -0
  75. package/bench/refs/python-lib/pandas/core/arrays/_ranges.py +276 -0
  76. package/bench/refs/python-lib/pandas/core/arrays/_utils.py +77 -0
  77. package/bench/refs/python-lib/pandas/core/arrays/arrow/accessors.py +521 -0
  78. package/bench/refs/python-lib/pandas/core/arrays/arrow/extension_types.py +174 -0
  79. package/bench/refs/python-lib/pandas/core/arrays/boolean.py +454 -0
  80. package/bench/refs/python-lib/pandas/core/arrays/floating.py +192 -0
  81. package/bench/refs/python-lib/pandas/core/arrays/integer.py +296 -0
  82. package/bench/refs/python-lib/pandas/core/arrays/masked.py +2140 -0
  83. package/bench/refs/python-lib/pandas/core/arrays/numeric.py +305 -0
  84. package/bench/refs/python-lib/pandas/core/arrays/numpy_.py +701 -0
  85. package/bench/refs/python-lib/pandas/core/arrays/period.py +1586 -0
  86. package/bench/refs/python-lib/pandas/core/arrays/sparse/accessor.py +505 -0
  87. package/bench/refs/python-lib/pandas/core/arrays/sparse/scipy_sparse.py +208 -0
  88. package/bench/refs/rust-project/.refrev +1 -0
  89. package/bench/refs/rust-project/README.md +17 -0
  90. package/bench/refs/rust-project/tokio/src/doc/os.rs +68 -0
  91. package/bench/refs/rust-project/tokio/src/fs/dir_builder.rs +129 -0
  92. package/bench/refs/rust-project/tokio/src/fs/file.rs +1113 -0
  93. package/bench/refs/rust-project/tokio/src/fs/mocks.rs +176 -0
  94. package/bench/refs/rust-project/tokio/src/fs/mod.rs +324 -0
  95. package/bench/refs/rust-project/tokio/src/fs/open_options.rs +856 -0
  96. package/bench/refs/rust-project/tokio/src/fs/read.rs +80 -0
  97. package/bench/refs/rust-project/tokio/src/fs/read_dir.rs +357 -0
  98. package/bench/refs/rust-project/tokio/src/fs/write.rs +99 -0
  99. package/bench/refs/rust-project/tokio/src/future/maybe_done.rs +123 -0
  100. package/bench/refs/rust-project/tokio/src/future/try_join.rs +82 -0
  101. package/bench/refs/rust-project/tokio/src/io/async_buf_read.rs +117 -0
  102. package/bench/refs/rust-project/tokio/src/io/async_read.rs +133 -0
  103. package/bench/refs/rust-project/tokio/src/io/async_seek.rs +96 -0
  104. package/bench/refs/rust-project/tokio/src/io/async_write.rs +402 -0
  105. package/bench/refs/rust-project/tokio/src/io/blocking.rs +339 -0
  106. package/bench/refs/rust-project/tokio/src/io/interest.rs +345 -0
  107. package/bench/refs/rust-project/tokio/src/io/join.rs +130 -0
  108. package/bench/refs/rust-project/tokio/src/io/mod.rs +308 -0
  109. package/bench/refs/rust-project/tokio/src/io/poll_evented.rs +319 -0
  110. package/bench/refs/rust-project/tokio/src/io/read_buf.rs +344 -0
  111. package/bench/refs/rust-project/tokio/src/io/ready.rs +322 -0
  112. package/bench/refs/rust-project/tokio/src/io/split.rs +166 -0
  113. package/bench/refs/rust-project/tokio/src/io/stderr.rs +148 -0
  114. package/bench/refs/rust-project/tokio/src/io/stdin.rs +98 -0
  115. package/bench/refs/rust-project/tokio/src/io/stdio_common.rs +222 -0
  116. package/bench/refs/rust-project/tokio/src/io/stdout.rs +197 -0
  117. package/bench/refs/rust-project/tokio/src/io/util/buf_reader.rs +311 -0
  118. package/bench/refs/rust-project/tokio/src/io/util/buf_stream.rs +207 -0
  119. package/bench/refs/rust-project/tokio/src/io/util/buf_writer.rs +310 -0
  120. package/bench/refs/rust-project/tokio/src/io/util/chain.rs +144 -0
  121. package/commands/_spawn-patterns.json +32 -0
  122. package/commands/ashlr-allow.md +21 -0
  123. package/commands/ashlr-benchmark.md +53 -0
  124. package/commands/ashlr-brief.md +97 -0
  125. package/commands/ashlr-budget.md +76 -0
  126. package/commands/ashlr-compact.md +54 -0
  127. package/commands/ashlr-dashboard.md +37 -0
  128. package/commands/ashlr-doctor.md +56 -0
  129. package/commands/ashlr-eco-mode.md +92 -0
  130. package/commands/ashlr-genome-init.md +24 -0
  131. package/commands/ashlr-genome-keygen.md +36 -0
  132. package/commands/ashlr-genome-loop.md +118 -0
  133. package/commands/ashlr-genome-push.md +36 -0
  134. package/commands/ashlr-genome-rewrap.md +48 -0
  135. package/commands/ashlr-genome-team-init.md +67 -0
  136. package/commands/ashlr-handoff.md +23 -0
  137. package/commands/ashlr-help.md +86 -0
  138. package/commands/ashlr-hook-timings.md +30 -0
  139. package/commands/ashlr-leaderboard.md +50 -0
  140. package/commands/ashlr-ollama-setup.md +39 -0
  141. package/commands/ashlr-orchestrate-status.md +72 -0
  142. package/commands/ashlr-orchestrate.md +83 -0
  143. package/commands/ashlr-parallelize.md +63 -0
  144. package/commands/ashlr-report-crash.md +33 -0
  145. package/commands/ashlr-resume.md +72 -0
  146. package/commands/ashlr-savings.md +24 -0
  147. package/commands/ashlr-settings.md +50 -0
  148. package/commands/ashlr-spawn.md +61 -0
  149. package/commands/ashlr-start.md +60 -0
  150. package/commands/ashlr-status.md +64 -0
  151. package/commands/ashlr-team-invite.md +47 -0
  152. package/commands/ashlr-tier.md +122 -0
  153. package/commands/ashlr-tour.md +60 -0
  154. package/commands/ashlr-update.md +155 -0
  155. package/commands/ashlr-upgrade.md +96 -0
  156. package/commands/goal.md +58 -0
  157. package/commands/loop.md +40 -0
  158. package/docs/CNAME +1 -0
  159. package/docs/PRO_TIER.md +104 -0
  160. package/docs/README.md +21 -0
  161. package/docs/architecture.md +415 -0
  162. package/docs/ashlr-pipe.md +161 -0
  163. package/docs/assets/logo.svg +19 -0
  164. package/docs/assets/og.png +0 -0
  165. package/docs/assets/og.svg +41 -0
  166. package/docs/benchmarks-v2.json +355 -0
  167. package/docs/benchmarks.json +102 -0
  168. package/docs/benchmarks.md +211 -0
  169. package/docs/billing.md +185 -0
  170. package/docs/cloud-genome.md +155 -0
  171. package/docs/competitive-wozcode.md +92 -0
  172. package/docs/deploy.md +325 -0
  173. package/docs/email-templates.md +113 -0
  174. package/docs/embed-tuning.md +103 -0
  175. package/docs/genome.md +120 -0
  176. package/docs/github-oauth-onboarding.md +127 -0
  177. package/docs/hero-video-script.md +129 -0
  178. package/docs/index.html +2262 -0
  179. package/docs/install-prompt.md +78 -0
  180. package/docs/install-windows.md +132 -0
  181. package/docs/install.ps1 +171 -0
  182. package/docs/install.sh +146 -0
  183. package/docs/launch/README.md +114 -0
  184. package/docs/launch/hn.md +49 -0
  185. package/docs/launch/reddit.md +45 -0
  186. package/docs/launch/x.md +65 -0
  187. package/docs/launch-post.md +112 -0
  188. package/docs/legal.md +78 -0
  189. package/docs/llm-providers.md +99 -0
  190. package/docs/multi-host-mcp.md +217 -0
  191. package/docs/multi-turn-architecture.md +108 -0
  192. package/docs/operations/deployment.md +108 -0
  193. package/docs/operations/error-monitoring.md +70 -0
  194. package/docs/operations/weekly-digest.md +70 -0
  195. package/docs/operations.md +494 -0
  196. package/docs/platform-support.md +133 -0
  197. package/docs/policy-packs.md +188 -0
  198. package/docs/press-kit/fact-sheet.md +78 -0
  199. package/docs/press-kit/founder-bio.md +3 -0
  200. package/docs/press-kit/logo.svg +33 -0
  201. package/docs/press-kit/screenshots.md +146 -0
  202. package/docs/pricing.md +251 -0
  203. package/docs/pro-backend-architecture.md +523 -0
  204. package/docs/producthunt.md +52 -0
  205. package/docs/router-migration.md +110 -0
  206. package/docs/session-log-schema.md +68 -0
  207. package/docs/social.md +95 -0
  208. package/docs/team-genome.md +528 -0
  209. package/docs/telemetry.md +194 -0
  210. package/docs/test-isolation.md +100 -0
  211. package/docs/upgrade.md +159 -0
  212. package/hooks/_hook-errors.ts +87 -0
  213. package/hooks/_hook-perf-emit.ts +113 -0
  214. package/hooks/_hook-timing-ledger.ts +1133 -0
  215. package/hooks/_nudge-throttle.ts +127 -0
  216. package/hooks/_recent-blocks.ts +127 -0
  217. package/hooks/audit-upload.ts +86 -0
  218. package/hooks/codex-hooks.json +171 -0
  219. package/hooks/commit-attribution.ts +179 -0
  220. package/hooks/edit-batching-nudge.ts +154 -0
  221. package/hooks/genome-scribe-hook.ts +219 -0
  222. package/hooks/hooks.json +294 -0
  223. package/hooks/orient-nudge-hook.ts +242 -0
  224. package/hooks/policy-enforce.ts +214 -0
  225. package/hooks/post-tool-use-embedding.ts +93 -0
  226. package/hooks/post-tool-use-genome.sh +37 -0
  227. package/hooks/post-tool-use-genome.ts +69 -0
  228. package/hooks/posttooluse-correlate.ts +122 -0
  229. package/hooks/posttooluse-dedupe-output.ts +241 -0
  230. package/hooks/posttooluse-genome-refresh.ts +223 -0
  231. package/hooks/posttooluse-native-nudge.ts +205 -0
  232. package/hooks/posttooluse-stale-result.ts +277 -0
  233. package/hooks/pretooluse-bash.ts +63 -0
  234. package/hooks/pretooluse-budget-guard.ts +318 -0
  235. package/hooks/pretooluse-common.ts +985 -0
  236. package/hooks/pretooluse-eco-router.ts +196 -0
  237. package/hooks/pretooluse-edit.sh +93 -0
  238. package/hooks/pretooluse-edit.ts +197 -0
  239. package/hooks/pretooluse-glob.ts +70 -0
  240. package/hooks/pretooluse-grep.sh +85 -0
  241. package/hooks/pretooluse-grep.ts +96 -0
  242. package/hooks/pretooluse-notebookedit.ts +121 -0
  243. package/hooks/pretooluse-read.sh +118 -0
  244. package/hooks/pretooluse-read.ts +118 -0
  245. package/hooks/pretooluse-task.ts +130 -0
  246. package/hooks/pretooluse-webfetch.ts +66 -0
  247. package/hooks/pretooluse-websearch.ts +85 -0
  248. package/hooks/pretooluse-write.ts +128 -0
  249. package/hooks/pulse-emit.ts +197 -0
  250. package/hooks/session-end-consolidate.sh +35 -0
  251. package/hooks/session-end-consolidate.ts +188 -0
  252. package/hooks/session-end-stats-gc.ts +80 -0
  253. package/hooks/session-log-append.sh +94 -0
  254. package/hooks/session-log-append.ts +116 -0
  255. package/hooks/session-start.ts +993 -0
  256. package/hooks/sessionend-hook-health-nudge.ts +451 -0
  257. package/hooks/sessionend-savings-nudge.ts +318 -0
  258. package/hooks/sessionend-status-line-nudge.ts +296 -0
  259. package/hooks/sessionstart-brief.ts +140 -0
  260. package/hooks/sessionstart-cost-refactor.ts +95 -0
  261. package/hooks/sessionstart-efficient.ts +110 -0
  262. package/hooks/sessionstart-genome-author.ts +93 -0
  263. package/hooks/sessionstart-lean-tools.ts +98 -0
  264. package/hooks/sessionstart-search.ts +97 -0
  265. package/hooks/stop-accounting.ts +152 -0
  266. package/hooks/subagent-stop-rollup.ts +162 -0
  267. package/hooks/userpromptsubmit-brief-trigger.ts +156 -0
  268. package/package.json +56 -0
  269. package/ports/README.md +108 -0
  270. package/ports/cursor/mcp.json +11 -0
  271. package/ports/goose/recipe.yaml +26 -0
  272. package/scripts/ashlr-mcp.ts +40 -0
  273. package/scripts/auto-update.ts +177 -0
  274. package/scripts/baseline-scan.ts +831 -0
  275. package/scripts/bench-orchestrate.ts +377 -0
  276. package/scripts/benchmark-refs.ts +292 -0
  277. package/scripts/bootstrap.mjs +100 -0
  278. package/scripts/brief-eval.ts +234 -0
  279. package/scripts/bump-version.ts +82 -0
  280. package/scripts/bun-resolve.d.mts +11 -0
  281. package/scripts/bun-resolve.mjs +59 -0
  282. package/scripts/calibrate-grep.ts +467 -0
  283. package/scripts/capture-grep-workload.ts +260 -0
  284. package/scripts/check-tier.ts +61 -0
  285. package/scripts/check-version-sync.ts +97 -0
  286. package/scripts/cli-orchestrate-status.ts +386 -0
  287. package/scripts/cli-orchestrate.ts +303 -0
  288. package/scripts/cli.ts +478 -0
  289. package/scripts/cloud-smoke-test.ts +313 -0
  290. package/scripts/coach-report.ts +373 -0
  291. package/scripts/context-db-migrate.ts +137 -0
  292. package/scripts/context-status.ts +43 -0
  293. package/scripts/demo-run.ts +255 -0
  294. package/scripts/deploy-smoke.sh +140 -0
  295. package/scripts/doctor.ts +992 -0
  296. package/scripts/embed-file-worker.ts +104 -0
  297. package/scripts/embed-tune.ts +308 -0
  298. package/scripts/errors-report.ts +428 -0
  299. package/scripts/find-test-leak.ts +69 -0
  300. package/scripts/generate-badge.ts +357 -0
  301. package/scripts/genome-auto-consolidate.ts +533 -0
  302. package/scripts/genome-auto-propose.ts +578 -0
  303. package/scripts/genome-cloud-pull.ts +363 -0
  304. package/scripts/genome-cloud-push.ts +382 -0
  305. package/scripts/genome-cloud-sync.ts +587 -0
  306. package/scripts/genome-commit-watcher.ts +295 -0
  307. package/scripts/genome-init.ts +986 -0
  308. package/scripts/genome-key.ts +233 -0
  309. package/scripts/genome-keygen.ts +168 -0
  310. package/scripts/genome-link.ts +59 -0
  311. package/scripts/genome-refresh-worker.ts +364 -0
  312. package/scripts/genome-rewrap.ts +90 -0
  313. package/scripts/genome-synthesizer.ts +679 -0
  314. package/scripts/genome-team-init.ts +312 -0
  315. package/scripts/handoff-pack.ts +438 -0
  316. package/scripts/hook-bootstrap.mjs +75 -0
  317. package/scripts/hook-timing-reader.ts +371 -0
  318. package/scripts/hook-timings-report.ts +554 -0
  319. package/scripts/install-genome-hooks.ts +196 -0
  320. package/scripts/install-onnx-model.ts +154 -0
  321. package/scripts/install-permissions.ts +276 -0
  322. package/scripts/install-status-line.ts +150 -0
  323. package/scripts/mcp-entrypoint.sh +78 -0
  324. package/scripts/mcp-entrypoint.ts +130 -0
  325. package/scripts/mdx-angle-bracket-lint.ts +152 -0
  326. package/scripts/measure-cold-start.ts +126 -0
  327. package/scripts/migrate-stats-to-sqlite.ts +86 -0
  328. package/scripts/ollama-setup.ts +498 -0
  329. package/scripts/onboarding-wizard.ts +1691 -0
  330. package/scripts/orchestrate-emit-telemetry.ts +177 -0
  331. package/scripts/orchestrate-expand.ts +517 -0
  332. package/scripts/orchestrate-run.ts +744 -0
  333. package/scripts/print-legend.ts +50 -0
  334. package/scripts/product-metadata.ts +38 -0
  335. package/scripts/prune-old-memories.ts +208 -0
  336. package/scripts/publish.sh +88 -0
  337. package/scripts/read-calibration.ts +122 -0
  338. package/scripts/report-crash.ts +226 -0
  339. package/scripts/run-benchmark.ts +750 -0
  340. package/scripts/run-root-tests.ts +28 -0
  341. package/scripts/savings-dashboard.ts +1258 -0
  342. package/scripts/savings-report-extras.ts +447 -0
  343. package/scripts/savings-status-line.ts +873 -0
  344. package/scripts/session-event-emit.ts +266 -0
  345. package/scripts/session-greet.ts +686 -0
  346. package/scripts/session-log-report.ts +551 -0
  347. package/scripts/session-resume.ts +614 -0
  348. package/scripts/set-hook-mode.ts +83 -0
  349. package/scripts/smoke-cross-platform.ts +117 -0
  350. package/scripts/smoke-realtime.ts +257 -0
  351. package/scripts/smoke-tools.ts +21 -0
  352. package/scripts/stats-cloud-pull.ts +213 -0
  353. package/scripts/stats-cloud-sync.ts +261 -0
  354. package/scripts/telemetry-flush.ts +160 -0
  355. package/scripts/telemetry-status.ts +266 -0
  356. package/scripts/timing-budget.ts +35 -0
  357. package/scripts/ui-animation.ts +120 -0
  358. package/scripts/ui.ts +431 -0
  359. package/scripts/upgrade-flow.ts +775 -0
  360. package/scripts/weekly-digest.ts +394 -0
  361. package/servers/_accounting.ts +78 -0
  362. package/servers/_ask-router.ts +84 -0
  363. package/servers/_ast-chunker.ts +434 -0
  364. package/servers/_ast-helpers.ts +183 -0
  365. package/servers/_ast-languages.ts +153 -0
  366. package/servers/_ast-refactor/_shared.ts +221 -0
  367. package/servers/_ast-refactor/cross-file-rename.ts +560 -0
  368. package/servers/_ast-refactor/extract-function.ts +357 -0
  369. package/servers/_ast-refactor/file-local-rename.ts +172 -0
  370. package/servers/_ast-refactor.ts +41 -0
  371. package/servers/_ast-skeleton.ts +107 -0
  372. package/servers/_bash-summarizers-registry.ts +1096 -0
  373. package/servers/_crash-dump.ts +210 -0
  374. package/servers/_cwd-clamp.ts +342 -0
  375. package/servers/_edit-log.ts +28 -0
  376. package/servers/_edit-match.ts +236 -0
  377. package/servers/_edit-validate.ts +196 -0
  378. package/servers/_embed-calibration.ts +123 -0
  379. package/servers/_embedding-cache.ts +401 -0
  380. package/servers/_embedding-model.ts +329 -0
  381. package/servers/_events.ts +113 -0
  382. package/servers/_genome-cache.ts +154 -0
  383. package/servers/_genome-commits.ts +172 -0
  384. package/servers/_genome-crypto-v2.ts +242 -0
  385. package/servers/_genome-crypto.ts +259 -0
  386. package/servers/_genome-discoveries.ts +140 -0
  387. package/servers/_genome-embed-populator.ts +216 -0
  388. package/servers/_genome-freshness.ts +134 -0
  389. package/servers/_genome-issues.ts +171 -0
  390. package/servers/_genome-live.ts +263 -0
  391. package/servers/_genome-prs.ts +188 -0
  392. package/servers/_genome-search.ts +479 -0
  393. package/servers/_genome-sync.ts +297 -0
  394. package/servers/_history-tracker.ts +279 -0
  395. package/servers/_http-helpers.ts +151 -0
  396. package/servers/_identity-hash.ts +151 -0
  397. package/servers/_llm-providers/anthropic.ts +132 -0
  398. package/servers/_llm-providers/cloud.ts +195 -0
  399. package/servers/_llm-providers/index.ts +350 -0
  400. package/servers/_llm-providers/local.ts +127 -0
  401. package/servers/_llm-providers/onnx.ts +393 -0
  402. package/servers/_llm-providers/types.ts +27 -0
  403. package/servers/_manifest-v2.ts +447 -0
  404. package/servers/_mcp-host.ts +93 -0
  405. package/servers/_nudge-events.ts +451 -0
  406. package/servers/_orchestrate-executor.ts +316 -0
  407. package/servers/_prefetch.ts +435 -0
  408. package/servers/_pricing.ts +256 -0
  409. package/servers/_pro.ts +381 -0
  410. package/servers/_read-cache.ts +44 -0
  411. package/servers/_router-handlers.ts +46 -0
  412. package/servers/_router.ts +55 -0
  413. package/servers/_run-with-timeout.ts +173 -0
  414. package/servers/_savings-render.ts +214 -0
  415. package/servers/_stats-sqlite.ts +640 -0
  416. package/servers/_stats.ts +1183 -0
  417. package/servers/_status-line-cells.ts +469 -0
  418. package/servers/_streaks.ts +162 -0
  419. package/servers/_summarize.ts +208 -0
  420. package/servers/_task-graph-render.ts +217 -0
  421. package/servers/_task-graph.ts +545 -0
  422. package/servers/_telemetry.ts +719 -0
  423. package/servers/_test-parsers.ts +530 -0
  424. package/servers/_test-watch.ts +626 -0
  425. package/servers/_text-helpers.ts +37 -0
  426. package/servers/_token-measure.ts +160 -0
  427. package/servers/_tool-base.ts +248 -0
  428. package/servers/_weekly-digest.ts +391 -0
  429. package/servers/ask-server-handlers.ts +49 -0
  430. package/servers/ask-server.ts +174 -0
  431. package/servers/bash-server-handlers.ts +138 -0
  432. package/servers/bash-server.ts +1136 -0
  433. package/servers/bench.ts +186 -0
  434. package/servers/diff-semantic-server-handlers.ts +39 -0
  435. package/servers/diff-semantic-server.ts +566 -0
  436. package/servers/diff-server-handlers.ts +317 -0
  437. package/servers/diff-server.ts +20 -0
  438. package/servers/edit-server-handlers.ts +31 -0
  439. package/servers/edit-server.ts +209 -0
  440. package/servers/edit-structural-server-handlers.ts +322 -0
  441. package/servers/efficiency-server-handlers.ts +161 -0
  442. package/servers/efficiency-server.ts +1135 -0
  443. package/servers/flush-server-handlers.ts +21 -0
  444. package/servers/flush-server.ts +19 -0
  445. package/servers/genome-server-handlers.ts +118 -0
  446. package/servers/genome-server.ts +397 -0
  447. package/servers/github-server-handlers.ts +187 -0
  448. package/servers/github-server.ts +856 -0
  449. package/servers/glob-server-handlers.ts +233 -0
  450. package/servers/glob-server.ts +20 -0
  451. package/servers/grep-server-handlers.ts +61 -0
  452. package/servers/grep-server.ts +564 -0
  453. package/servers/http-server-handlers.ts +36 -0
  454. package/servers/http-server.ts +149 -0
  455. package/servers/logs-server-handlers.ts +42 -0
  456. package/servers/logs-server.ts +359 -0
  457. package/servers/ls-server-handlers.ts +166 -0
  458. package/servers/ls-server.ts +20 -0
  459. package/servers/multi-edit-server-handlers.ts +51 -0
  460. package/servers/multi-edit-server.ts +422 -0
  461. package/servers/notebook-edit-server-handlers.ts +34 -0
  462. package/servers/notebook-edit-server.ts +181 -0
  463. package/servers/orient-server-handlers.ts +52 -0
  464. package/servers/orient-server.ts +436 -0
  465. package/servers/pipe-server-handlers.ts +68 -0
  466. package/servers/pipe-server.ts +300 -0
  467. package/servers/read-server-handlers.ts +42 -0
  468. package/servers/read-server.ts +206 -0
  469. package/servers/rename-file-server-handlers.ts +67 -0
  470. package/servers/rename-file-server.ts +699 -0
  471. package/servers/savings-server-handlers.ts +27 -0
  472. package/servers/savings-server.ts +54 -0
  473. package/servers/search-replace-regex-server-handlers.ts +96 -0
  474. package/servers/search-replace-regex-server.ts +751 -0
  475. package/servers/sql-server-handlers.ts +58 -0
  476. package/servers/sql-server.ts +505 -0
  477. package/servers/task-server-handlers.ts +358 -0
  478. package/servers/task-server.ts +24 -0
  479. package/servers/test-server-handlers.ts +351 -0
  480. package/servers/test-server.ts +20 -0
  481. package/servers/tree-server-handlers.ts +503 -0
  482. package/servers/tree-server.ts +20 -0
  483. package/servers/webfetch-server-handlers.ts +166 -0
  484. package/servers/webfetch-server.ts +20 -0
  485. package/servers/websearch-server-handlers.ts +215 -0
  486. package/servers/websearch-server.ts +19 -0
  487. package/servers/write-server-handlers.ts +27 -0
  488. package/servers/write-server.ts +97 -0
  489. package/skills/ashlr-brief/SKILL.md +80 -0
  490. package/skills/ashlr-codex-doctor/SKILL.md +21 -0
  491. package/skills/ashlr-codex-efficient-tools/SKILL.md +17 -0
  492. package/skills/ashlr-codex-genome-refresh/SKILL.md +20 -0
  493. package/skills/ashlr-codex-parallel-explore/SKILL.md +20 -0
  494. package/skills/ashlr-codex-savings/SKILL.md +17 -0
  495. package/skills/ashlr-cost-refactor/SKILL.md +50 -0
  496. package/skills/ashlr-efficient/SKILL.md +64 -0
  497. package/skills/ashlr-genome-author/SKILL.md +43 -0
  498. package/skills/ashlr-lean-tools/SKILL.md +43 -0
  499. package/skills/ashlr-search/SKILL.md +46 -0
@@ -0,0 +1,188 @@
1
+ # Policy Packs
2
+
3
+ Policy packs let a team admin define allow, deny, and require-confirmation rules for tool calls. The server distributes the current pack to every org member; the `policy-enforce` hook applies the rules client-side before any tool runs.
4
+
5
+ ---
6
+
7
+ ## Rule syntax
8
+
9
+ Each rule has three fields:
10
+
11
+ | Field | Type | Description |
12
+ |---------|-------------------------------|--------------------------------------------------|
13
+ | `match` | glob string | Pattern matched against the tool call (see below)|
14
+ | `kind` | `"tool"` / `"path"` / `"shell"` | What the pattern is matched against |
15
+ | `reason`| string (optional) | Human-readable explanation shown when blocked |
16
+
17
+ ### Kinds
18
+
19
+ **`tool`** — matches against the tool name.
20
+
21
+ ```yaml
22
+ match: "mcp__ashlr-*"
23
+ kind: tool
24
+ ```
25
+
26
+ Matches any ashlr MCP tool. Since the v1.13 router consolidation the canonical prefix is `mcp__plugin_ashlr_ashlr__ashlr__*` (e.g. `mcp__plugin_ashlr_ashlr__ashlr__edit`). Patterns like `mcp__ashlr-*` still match the legacy form seen in older transcripts; prefer `mcp__plugin_ashlr_*` for new policies.
27
+
28
+ **`path`** — matches against file path arguments (`file_path`, `path`, `file`).
29
+
30
+ ```yaml
31
+ match: "/etc/*"
32
+ kind: path
33
+ reason: "System files require manual review"
34
+ ```
35
+
36
+ Blocks or confirms any tool call whose path argument matches `/etc/*`.
37
+
38
+ **`shell`** — matches against the `command` argument of Bash calls.
39
+
40
+ ```yaml
41
+ match: "Bash(rm *)"
42
+ kind: shell
43
+ reason: "Deletions not permitted in CI"
44
+ ```
45
+
46
+ The `Bash(...)` wrapper is optional syntax sugar; the inner pattern is matched against the raw command string.
47
+
48
+ ---
49
+
50
+ ## Precedence
51
+
52
+ Rules are evaluated in this order — **first match wins per tier**:
53
+
54
+ ```
55
+ deny > requireConfirm > allow
56
+ ```
57
+
58
+ If a call matches a `deny` rule it is blocked regardless of any `allow` rule. If it matches `requireConfirm` (and no `deny` rule), Claude prompts the user before proceeding. `allow` rules have no enforcement effect on their own — they exist as documentation and for future audit filtering.
59
+
60
+ ### Example
61
+
62
+ ```yaml
63
+ rules:
64
+ deny:
65
+ - match: "Bash(rm *)"
66
+ kind: shell
67
+ reason: "No deletions — use the trash instead"
68
+ - match: "/etc/*"
69
+ kind: path
70
+ reason: "System files are read-only"
71
+ requireConfirm:
72
+ - match: "Write"
73
+ kind: tool
74
+ - match: "/home/*/prod-*"
75
+ kind: path
76
+ allow:
77
+ - match: "mcp__ashlr-*"
78
+ kind: tool
79
+ - match: "Read"
80
+ kind: tool
81
+ ```
82
+
83
+ With this policy:
84
+
85
+ - `Bash(rm -rf /tmp)` → **blocked** (deny shell rule)
86
+ - `Edit(/etc/hosts)` → **blocked** (deny path rule)
87
+ - `Write(/home/alice/prod-config.yaml)` → **confirm** (requireConfirm path rule takes effect after deny check passes)
88
+ - `Write(/home/alice/dev-notes.md)` → **confirm** (requireConfirm tool rule)
89
+ - `Read(anything)` → **allowed** (no deny or requireConfirm match)
90
+ - `mcp__plugin_ashlr_ashlr__ashlr__read` → **allowed**
91
+
92
+ ---
93
+
94
+ ## YAML upload format
95
+
96
+ POST to `/policy/upload` with `Content-Type: application/json`:
97
+
98
+ ```json
99
+ {
100
+ "orgId": "your-org-id",
101
+ "name": "default",
102
+ "rules": {
103
+ "allow": [
104
+ { "match": "Read", "kind": "tool" },
105
+ { "match": "mcp__ashlr-*", "kind": "tool" }
106
+ ],
107
+ "deny": [
108
+ { "match": "Bash(rm *)", "kind": "shell", "reason": "No deletions" },
109
+ { "match": "/etc/*", "kind": "path", "reason": "System files locked" }
110
+ ],
111
+ "requireConfirm": [
112
+ { "match": "Write", "kind": "tool" },
113
+ { "match": "/home/*/prod-*", "kind": "path" }
114
+ ]
115
+ }
116
+ }
117
+ ```
118
+
119
+ The server creates a new version number on each upload. The current pointer is updated automatically.
120
+
121
+ ---
122
+
123
+ ## Versioning and rollback
124
+
125
+ Every upload creates an immutable versioned snapshot. To see recent versions:
126
+
127
+ ```
128
+ GET /policy/history
129
+ ```
130
+
131
+ Response:
132
+ ```json
133
+ [
134
+ { "packId": "...", "name": "default", "version": 3, "author": "alice@co.com", "createdAt": "..." },
135
+ { "packId": "...", "name": "default", "version": 2, "author": "bob@co.com", "createdAt": "..." },
136
+ { "packId": "...", "name": "default", "version": 1, "author": "alice@co.com", "createdAt": "..." }
137
+ ]
138
+ ```
139
+
140
+ To roll back:
141
+
142
+ ```json
143
+ POST /policy/rollback
144
+ {
145
+ "packId": "<id of the v1 pack>",
146
+ "toVersion": 1
147
+ }
148
+ ```
149
+
150
+ This sets the current pointer to the v1 pack. No data is deleted — all versions remain in history.
151
+
152
+ ---
153
+
154
+ ## Client-side enforcement
155
+
156
+ The `hooks/policy-enforce.ts` hook fires on every `Edit`, `Write`, `Bash`, `MultiEdit`, and ashlr-edit call (PreToolUse). It:
157
+
158
+ 1. Fetches `/policy/current` (cached for 5 minutes in `/tmp`).
159
+ 2. Evaluates rules in precedence order.
160
+ 3. On a `deny` match: writes `{"type":"block","reason":"..."}` to stdout and exits 2 — the tool is cancelled.
161
+ 4. On a `requireConfirm` match: writes `{"permissionDecision":"ask","reason":"..."}` to stdout — Claude prompts the user.
162
+ 5. On allow / no match: exits 0 silently.
163
+
164
+ ### Kill switch
165
+
166
+ Set `ASHLR_POLICY_ENFORCE=0` to disable enforcement entirely (useful for break-glass situations or local dev).
167
+
168
+ ### Requirements
169
+
170
+ - `ASHLR_PRO_TOKEN` must be set.
171
+ - User's org must be on the `team` tier or higher.
172
+ - No policy configured → all tools allowed (fail-open).
173
+ - Network errors → fail-open (tool proceeds, error is not surfaced).
174
+
175
+ ---
176
+
177
+ ## Glob syntax
178
+
179
+ Patterns use [minimatch](https://github.com/isaacs/minimatch) glob syntax:
180
+
181
+ | Pattern | Matches |
182
+ |-------------------|-------------------------------------------------|
183
+ | `mcp__ashlr-*` | Any tool starting with `mcp__ashlr-` |
184
+ | `Edit` | Exactly the Edit tool |
185
+ | `/etc/*` | Any path directly under `/etc/` |
186
+ | `/etc/**` | Any path anywhere under `/etc/` |
187
+ | `Bash(rm *)` | Any Bash command starting with `rm ` |
188
+ | `**/prod-*` | Any path segment containing `prod-` prefix |
@@ -0,0 +1,78 @@
1
+ # Fact sheet — ashlr-plugin
2
+
3
+ Quick-reference for journalists and analysts.
4
+
5
+ ---
6
+
7
+ | Field | Value |
8
+ |---|---|
9
+ | **Product name** | ashlr-plugin |
10
+ | **Current version** | 1.36.0 |
11
+ | **Release date** | June 2026 |
12
+ | **Repository** | github.com/ashlrai/ashlr-plugin |
13
+ | **License** | MIT |
14
+ | **Website** | plugin.ashlr.ai |
15
+ | **Category** | Codex plugin / Claude Code plugin / AI coding tool / MCP server |
16
+ | **Primary use case** | Token-efficiency layer for Codex and Claude Code |
17
+
18
+ ---
19
+
20
+ ## Technical
21
+
22
+ | Field | Value |
23
+ |---|---|
24
+ | **MCP tools** | 40 |
25
+ | **Skills / slash commands** | 34 Claude Code slash commands + Codex workflow skills |
26
+ | **Test count** | 860 pass, 2 skip, 0 fail |
27
+ | **Test files** | 55 |
28
+ | **Codebase (plugin repo)** | 750 files, 149,462 LOC in the latest self-repo benchmark artifact |
29
+ | **Runtime** | Bun >= 1.3 |
30
+ | **Benchmark: overall savings** | −57% cross-language mean token reduction |
31
+ | **Benchmark: read savings** | −82.2% mean |
32
+ | **Benchmark: grep savings** | −81.7% mean |
33
+ | **Benchmark methodology** | scripts/run-benchmark.ts; weekly CI refresh; docs/benchmarks-v2.json |
34
+ | **Compatible hosts** | Codex, Claude Code, Cursor (via MCP), Goose (via recipe), generic MCP hosts |
35
+
36
+ ---
37
+
38
+ ## Team
39
+
40
+ | Field | Value |
41
+ |---|---|
42
+ | **Team size** | 1 (solo founder) |
43
+ | **Founder** | Mason Wyatt |
44
+ | **Contact** | support@ashlr.ai |
45
+ | **Press contact** | support@ashlr.ai |
46
+
47
+ ---
48
+
49
+ ## Pricing
50
+
51
+ | Tier | Price | Notes |
52
+ |---|---|---|
53
+ | Free | $0 forever | Full plugin, MIT, no feature gates |
54
+ | Pro | $12/month or $120/year | Cloud genome sync, hosted LLM summarizer, cross-machine stats |
55
+ | Team | $24/user/month or $20/user/month annual (min 3 users) | E2E-encrypted shared team genome (vclock LWW + manual conflict resolution), org dashboard, policy packs, SSO, audit log |
56
+ | Enterprise | Contact sales | On-prem, private inference, dedicated SLA |
57
+
58
+ ---
59
+
60
+ ## Key claims (all traceable)
61
+
62
+ | Claim | Source |
63
+ |---|---|
64
+ | −57% cross-language token savings | docs/benchmarks.md, multi-repo reference set |
65
+ | −82.2% read savings | docs/benchmarks-v2.json, aggregate.ashlr__read.mean = 0.178 → 1 − 0.178 = 82.2% |
66
+ | −81.7% grep savings | docs/benchmarks-v2.json, aggregate.ashlr__grep.mean = 0.183 → 1 − 0.183 = 81.7% |
67
+ | 860 passing tests | CHANGELOG.md [1.4.0] Tests section |
68
+ | 40 MCP tools | README.md tool table |
69
+ | 34 slash commands + Codex skills | docs/pricing.md + `.codex-plugin/plugin.json` |
70
+ | MIT license | LICENSE file |
71
+
72
+ ---
73
+
74
+ ## Known limitations
75
+
76
+ - 2 tests skipped: `no-genome grep` environment-leak flake and a benchmark ratio assertion (same root cause). Both pass in isolation; documented in-line.
77
+ - `rg` binary sensitivity: benchmark rg-resolution walks multiple candidate paths but may require `rg` to be a plain system binary in some environments.
78
+ - Small edits (< ~30 chars): `ashlr__edit` diff-summary overhead exceeds naive payload; ratio is 2.5x in the small-edit benchmark bucket.
@@ -0,0 +1,3 @@
1
+ # Founder bio — Mason Wyatt
2
+
3
+ Mason Wyatt is the founder of ashlr and a principal at Evero Consulting. He built ashlr after noticing that Claude Code's native file-reading and search tools were shipping full payloads — entire source files, complete grep output — into model context on every call, driving token bills up on real codebases without a corresponding benefit to output quality. He shipped the plugin from v0.1 to production in a single week, building a reproducible benchmark harness alongside the tools so every claimed savings number is auditable and refreshed weekly by CI. He can be reached at support@ashlr.ai.
@@ -0,0 +1,33 @@
1
+ <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 200 48" fill="none">
2
+ <defs>
3
+ <linearGradient id="logo-grad" x1="0" y1="0" x2="32" y2="32" gradientUnits="userSpaceOnUse">
4
+ <stop offset="0%" stop-color="#c2410c"/>
5
+ <stop offset="100%" stop-color="#8B2E1A"/>
6
+ </linearGradient>
7
+ </defs>
8
+
9
+ <!-- Icon mark: ledger square -->
10
+ <rect x="0" y="8" width="32" height="32" rx="6" fill="#1a0f0c"/>
11
+ <rect x="0.75" y="8.75" width="30.5" height="30.5" rx="5.5" fill="none" stroke="url(#logo-grad)" stroke-opacity="0.3" stroke-width="1.5"/>
12
+ <!-- Ledger lines -->
13
+ <line x1="6" y1="18" x2="26" y2="18" stroke="url(#logo-grad)" stroke-opacity="0.4" stroke-width="1"/>
14
+ <line x1="6" y1="24" x2="26" y2="24" stroke="url(#logo-grad)" stroke-opacity="0.55" stroke-width="1"/>
15
+ <line x1="6" y1="30" x2="26" y2="30" stroke="url(#logo-grad)" stroke-opacity="0.7" stroke-width="1"/>
16
+ <!-- Brand square -->
17
+ <rect x="6" y="10" width="7" height="7" fill="url(#logo-grad)"/>
18
+ <!-- Row dots -->
19
+ <circle cx="23" cy="24" r="2" fill="url(#logo-grad)"/>
20
+ <circle cx="23" cy="30" r="2" fill="url(#logo-grad)" opacity="0.65"/>
21
+
22
+ <!-- Wordmark -->
23
+ <!-- Uses a system-font fallback; replace with Fraunces webfont embedding for print use -->
24
+ <text
25
+ x="44"
26
+ y="33"
27
+ font-family="Georgia, 'Times New Roman', serif"
28
+ font-weight="300"
29
+ font-size="28"
30
+ letter-spacing="-0.5"
31
+ fill="#F3EADB"
32
+ >ashlr</text>
33
+ </svg>
@@ -0,0 +1,146 @@
1
+ # Screenshots — ashlr v1.4.0 launch
2
+
3
+ Ordered by priority. Capture in order; use the listed commands to reproduce exactly.
4
+
5
+ ---
6
+
7
+ ## 1. Status line — active session
8
+
9
+ **What to show:** The Claude Code terminal footer with the ashlr status line, showing a real session counter, sparkline, and the `↑` activity indicator.
10
+
11
+ **Environment:** Terminal (iTerm2 or similar), dark or light, full-width.
12
+
13
+ **Command to reproduce:**
14
+ ```bash
15
+ # Fire a few tool calls first to get a non-zero session counter
16
+ # Then the status line updates automatically within ~550ms
17
+ # Widen terminal to at least 120 columns for full display
18
+ ```
19
+
20
+ **Expected visual:**
21
+ ```
22
+ ashlr · 7d ▁▂▃▅▇█ · session ↑+48.2K · lifetime +2.1M
23
+ ```
24
+ The gradient shimmer should be mid-sweep. The `↑` activity indicator should be lit (orange, fading to the brand dark). Sparkline should show meaningful variation across the 7 bars.
25
+
26
+ **Capture notes:** 1280px wide minimum. Retina / 2x preferred.
27
+
28
+ ---
29
+
30
+ ## 2. /ashlr-savings dashboard
31
+
32
+ **What to show:** The full `/ashlr-savings` ASCII output — per-tool rows, dollar amounts, sparkline, session and lifetime totals.
33
+
34
+ **Environment:** Terminal.
35
+
36
+ **Command to reproduce:**
37
+ ```bash
38
+ # Inside Claude Code after a real session with tool calls:
39
+ /ashlr-savings
40
+ ```
41
+
42
+ **Expected visual:**
43
+ ```
44
+ Session savings · ashlr-plugin v1.4.0
45
+ ────────────────────────────────────────
46
+ ashlr__read 6 calls −42,180 tok $0.13
47
+ ashlr__grep 3 calls −11,040 tok $0.03
48
+ ashlr__edit 2 calls −3,200 tok $0.01
49
+ ─────────────────────────────────────────────
50
+ Session total −56,420 tok $0.17
51
+ Lifetime total −284,900 tok $0.86
52
+ 7-day sparkline ▁▂▃▃▅▆█
53
+ ```
54
+ Numbers should be real (not zero). At least 3 tools with non-zero rows.
55
+
56
+ ---
57
+
58
+ ## 3. /ashlr-dashboard — watch mode
59
+
60
+ **What to show:** The full ASCII dashboard with bar chart, sparklines, and projected annual line.
61
+
62
+ **Environment:** Terminal, dark preferred for contrast.
63
+
64
+ **Command to reproduce:**
65
+ ```bash
66
+ bun run ~/.claude/plugins/cache/ashlr-marketplace/ashlr/1.4.0/scripts/savings-dashboard.ts --watch
67
+ ```
68
+
69
+ **Expected visual:** Three tiles across the top (session / lifetime / best day), bar chart with at least 3 rows, 7-day and 30-day sparklines, the Fraunces-style projected annual line at the bottom. Colors intact — `--watch` mode live-redraws every 1.5s; capture a mid-redraw frame if possible.
70
+
71
+ ---
72
+
73
+ ## 4. Before/after comparison — single file
74
+
75
+ **What to show:** Side-by-side of raw vs ashlr output for `server/tests/auth.test.ts`. Demonstrates the 85% token reduction on a real file.
76
+
77
+ **Environment:** Terminal or static image composition.
78
+
79
+ **Numbers (from docs/benchmarks-v2.json):**
80
+ - Raw: 10,846 bytes / 2,709 tokens
81
+ - ashlr: 1,623 bytes / 406 tokens
82
+ - Ratio: 0.150 (85% reduction)
83
+
84
+ **Command to reproduce:**
85
+ ```bash
86
+ # Raw (native Read):
87
+ # Read server/tests/auth.test.ts
88
+ # ↑ shows full file, ~10,846 bytes in context
89
+
90
+ # ashlr:
91
+ # ashlr__read { "path": "server/tests/auth.test.ts" }
92
+ # ↑ shows head + elision marker + tail, ~1,623 bytes
93
+ ```
94
+
95
+ **Expected visual:** Two terminal panels. Left: raw output scrolling to show full length. Right: ashlr output — compact, with the `[... N lines elided ...]` marker visible. Token counts shown as labels below each panel.
96
+
97
+ ---
98
+
99
+ ## 5. Benchmarks page — browser
100
+
101
+ **What to show:** `plugin.ashlr.ai/benchmarks` with the −57% cross-language number prominent, per-tool breakdown bars, and the methodology section.
102
+
103
+ **Environment:** Browser, parchment background, 1280x800 viewport.
104
+
105
+ **Command to reproduce:**
106
+ ```bash
107
+ # Navigate to: https://plugin.ashlr.ai/benchmarks
108
+ # Or locally: cd site && bun run dev, then open /benchmarks
109
+ ```
110
+
111
+ **Expected visual:** The large −57% number above the fold. Per-tool bars showing read/grep/edit breakdown. The CI badge showing the last benchmark run. Methodology panel visible on scroll. Parchment grain texture intact.
112
+
113
+ **Capture notes:** Full-page screenshot preferred. Above-the-fold crop also useful as a thumbnail.
114
+
115
+ ---
116
+
117
+ ## 6. Compare page — browser
118
+
119
+ **What to show:** `plugin.ashlr.ai/compare` with the four-column comparison table. The ashlr column highlighted in the debit red.
120
+
121
+ **Environment:** Browser, 1440px wide preferred to show all four columns without horizontal scroll.
122
+
123
+ **Command to reproduce:**
124
+ ```bash
125
+ # Navigate to: https://plugin.ashlr.ai/compare
126
+ # Or locally: cd site && bun run dev, then open /compare
127
+ ```
128
+
129
+ **Expected visual:** Table with group headers (Compression / Architecture / Observability / etc.), the ashlr column with a subtle red tint, `+` marks in green for ashlr, `unknown` in muted ink for WOZCODE where data is not published.
130
+
131
+ ---
132
+
133
+ ## 7. Landing page hero
134
+
135
+ **What to show:** The `plugin.ashlr.ai` landing page hero — the large display number, the animated SVG terminal mock, and the install command.
136
+
137
+ **Environment:** Browser, 1440px wide.
138
+
139
+ **Command to reproduce:**
140
+ ```bash
141
+ # Navigate to: https://plugin.ashlr.ai
142
+ ```
143
+
144
+ **Expected visual:** The −57% number in Fraunces display weight, the stamp animation in mid-rotate, the terminal mock SVG showing the sparkline and counter. The parchment background with grain. The install command block visible below the fold.
145
+
146
+ **Capture notes:** Catch the hero at the moment the stamp-rotate animation is at ~45 degrees for the most dynamic still.