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,61 @@
1
+ ---
2
+ name: ashlr-spawn
3
+ description: Spawn a named delegation pattern as one or more sub-agents. Patterns defined in _spawn-patterns.json.
4
+ argument-hint: "`<pattern>` [args...]"
5
+ ---
6
+
7
+ Spawn a named delegation pattern using `_spawn-patterns.json`.
8
+
9
+ ## Patterns available
10
+
11
+ - `triage-issues` — classify open issues by severity / label / age (haiku, batch)
12
+ - `refactor-files` — apply a described refactor across a file list (sonnet, parallel-per-file)
13
+ - `codebase-explain` — explain a codebase area with key files + flow (haiku, tiered)
14
+ - `pr-review-sweep` — review all changed files in a PR (sonnet, parallel-per-file-changed)
15
+ - `parallel-test-fix` — fix failing tests across multiple files (sonnet, parallel-per-file)
16
+
17
+ ## Argument convention
18
+
19
+ ```
20
+ /ashlr-spawn <pattern> [args...]
21
+ ```
22
+
23
+ - First positional token after `/ashlr-spawn` is the **pattern name**.
24
+ - Everything after the pattern name is the **args** string, passed verbatim to the prompt template as `{{args}}`.
25
+ - For file-fanout patterns (`refactor-files`, `parallel-test-fix`), additional tokens that look like file paths (contain `/` or `.`) are collected into `{{files}}`; the remaining tokens form `{{args}}`.
26
+
27
+ Examples:
28
+ ```
29
+ /ashlr-spawn triage-issues
30
+ /ashlr-spawn codebase-explain the genome pipeline
31
+ /ashlr-spawn refactor-files extract pure functions src/utils.ts src/helpers.ts
32
+ /ashlr-spawn pr-review-sweep 123
33
+ /ashlr-spawn parallel-test-fix __tests__/savings-math.test.ts __tests__/stats-sqlite.test.ts
34
+ ```
35
+
36
+ ## Steps
37
+
38
+ 1. Parse `$ARGUMENTS`:
39
+ - Extract the pattern name (first token).
40
+ - Collect remaining tokens: file-path-like tokens → `{{files}}`; everything else → `{{args}}`.
41
+
42
+ 2. Read `commands/_spawn-patterns.json` (path: `${CLAUDE_PLUGIN_ROOT}/commands/_spawn-patterns.json`). If the file is missing, error: "\_spawn-patterns.json not found — run from the plugin root."
43
+
44
+ 3. Look up the pattern. If not found, print: "Unknown pattern `<name>`. Available: triage-issues, refactor-files, codebase-explain, pr-review-sweep, parallel-test-fix" and stop.
45
+
46
+ 4. Render the `prompt_template` by substituting `{{args}}` and `{{files}}` with the parsed values (empty string if not provided).
47
+
48
+ 5. Apply `fanout_strategy`:
49
+ - `batch` — spawn **one** Agent with `subagent_type` from the pattern, passing the rendered prompt.
50
+ - `parallel-per-file` — spawn **one Agent per file** in `{{files}}`, each with the same rendered prompt focused on that single file. Collect results.
51
+ - `parallel-per-file-changed` — use `git diff --name-only origin/main...HEAD` to get the changed file list, then spawn one Agent per file.
52
+ - `tiered` — spawn Phase 1 `ashlr:ashlr:explore` agent, then pass its output to Phase 2 `ashlr:ashlr:code` agent for deeper analysis.
53
+
54
+ 6. Wait for all agents to complete.
55
+
56
+ 7. Print a merged report:
57
+ - Header: `## /ashlr-spawn <pattern> — <N> agent(s) completed`
58
+ - One section per agent output (for multi-agent fanouts, titled by file name).
59
+ - Footer: total agents spawned, pattern used, fanout strategy.
60
+
61
+ If `$ARGUMENTS` is empty, print the patterns list and stop.
@@ -0,0 +1,60 @@
1
+ ---
2
+ name: ashlr-start
3
+ description: >
4
+ First-run onboarding wizard for the ashlr-plugin. Guides users through
5
+ doctor check, permissions, a live read demo, genome initialization, and
6
+ a quick pro teaser — all in under 60 seconds. Run automatically on the
7
+ first session; re-run manually any time with /ashlr-start.
8
+ Use /ashlr-start --reset to re-arm the auto-trigger for the next session.
9
+ ---
10
+
11
+ You are running the ashlr first-run onboarding wizard.
12
+
13
+ ## --reset flag
14
+
15
+ If the user invoked `/ashlr-start --reset`, run:
16
+
17
+ ```sh
18
+ bun run "${CLAUDE_PLUGIN_ROOT}/scripts/onboarding-wizard.ts" --reset
19
+ ```
20
+
21
+ Show the output and stop. Do not run the full wizard.
22
+
23
+ ## Normal wizard flow
24
+
25
+ 1. Run the wizard script:
26
+
27
+ ```sh
28
+ bun run "${CLAUDE_PLUGIN_ROOT}/scripts/onboarding-wizard.ts" --no-interactive
29
+ ```
30
+
31
+ 2. Render its output verbatim in a plain code block.
32
+
33
+ 3. After the block, work through each `[ASHLR_PROMPT: ...]` line that
34
+ appeared in the output. For each one:
35
+ - Ask the user the exact question shown in the marker.
36
+ - Wait for their answer (y/n).
37
+ - If they answer **yes** (or press Enter, treating blank as yes):
38
+ - For the permissions prompt: run
39
+ `bun run "${CLAUDE_PLUGIN_ROOT}/scripts/install-permissions.ts"`
40
+ and show the output.
41
+ - For the genome prompt: invoke the `/ashlr-genome-init` skill.
42
+ - If they answer **no**, acknowledge and move on.
43
+
44
+ 4. If any `[ASHLR_WARN] ...` lines appeared, surface the fix instructions
45
+ clearly but do not block the wizard.
46
+
47
+ 5. After all prompts are resolved, say:
48
+ "Wizard complete. Run /ashlr-savings any time to see your running
49
+ totals, or /ashlr-tour for a deeper walkthrough."
50
+
51
+ ## Rules
52
+
53
+ - Do not run any destructive operation without the user's explicit
54
+ confirmation at a `[ASHLR_PROMPT]` step.
55
+ - Do not add narration between wizard sections — the script output is
56
+ the narrative.
57
+ - If the script exits non-zero, show stderr and tell the user to run
58
+ `/ashlr-doctor` for a full diagnosis.
59
+ - Do not call any tool not listed above during the wizard.
60
+ - Keep responses concise — the wizard output is the substance.
@@ -0,0 +1,64 @@
1
+ ---
2
+ name: ashlr-status
3
+ description: Report the ashlr-plugin activation status and MCP server health.
4
+ ---
5
+
6
+ Report the following as a compact status block:
7
+
8
+ 1. **Plugin version** — from `.claude-plugin/plugin.json`
9
+ 2. **MCP server reachable** — call `ashlr__savings` and see if it returns; if yes, mark green
10
+ 3. **Genome detected** — check for `.ashlrcode/genome/` in `process.cwd()`; report yes/no
11
+ 4. **Core library version** — read `~/Desktop/ashlr-core-efficiency/package.json` if accessible
12
+ 5. **Session savings** — from `ashlr__savings`
13
+
14
+ Format:
15
+
16
+ ```
17
+ ashlr-plugin v0.1.0
18
+ server: ✓ reachable
19
+ genome: ✓ (.ashlrcode/genome found) | ✗ (no genome — run `/genome init`)
20
+ core: @ashlr/core-efficiency@0.1.0
21
+ session: 12 calls, ~8,450 tokens saved
22
+ ```
23
+
24
+ If `$ARGUMENTS` contains `--context`, also run:
25
+
26
+ ```sh
27
+ bun run "${CLAUDE_PLUGIN_ROOT}/scripts/context-status.ts"
28
+ ```
29
+
30
+ If `ASHLR_CONTEXT_DB_DISABLE=1` is set, print `ashlr context-db: disabled (ASHLR_CONTEXT_DB_DISABLE=1)` instead. Append the output under a `## Embedding cache` section after the main status block.
31
+
32
+ If `$ARGUMENTS` contains `--telemetry` (or is not set — always include this section), append a **Telemetry snapshot** section:
33
+
34
+ ```sh
35
+ bun run "${CLAUDE_PLUGIN_ROOT}/scripts/telemetry-status.ts"
36
+ ```
37
+
38
+ This reports:
39
+ - **LLM provider** — which provider `selectProvider()` would pick right now (anthropic / onnx / local / snipCompact-only). Determined by: `ANTHROPIC_API_KEY` set? → anthropic. ONNX runtime available? → onnx. Else → local or snipCompact.
40
+ - **Embedding cache** — total embeddings in `~/.ashlr/context.db`, hit rate over last 100 calls from `~/.ashlr/embed-calibration.jsonl`.
41
+ - **Genome** — sections present (count files in `.ashlrcode/genome/`), fire-rate (fraction of last 50 `ashlr__grep` calls where `genome_route_taken` was emitted, from `~/.ashlr/session-log.jsonl`).
42
+ - **Block→ashlr ratio (24h)** — blocks emitted vs `tool_called_after_block` events in last 24h from hook-timings.jsonl + session-log.jsonl. Shows conversion rate as %.
43
+ - **Opt-in telemetry** — current mode (off / opt-in) + buffer line count + how to disable.
44
+
45
+ Format:
46
+
47
+ ```
48
+ ## Telemetry snapshot
49
+ llm-provider: anthropic (ANTHROPIC_API_KEY set)
50
+ embed-cache: 847 entries · last-100 hit rate 34%
51
+ genome: 12 sections · last-50 grep fire-rate 68%
52
+ block→ashlr: 42 blocks / 31 converted = 74% (24h)
53
+ opt-in telemetry: OFF (default) · to enable: ASHLR_TELEMETRY=on
54
+ ```
55
+
56
+ When telemetry is ON, show instead:
57
+
58
+ ```
59
+ opt-in telemetry: ON · buffer: 42 events · to disable: ASHLR_TELEMETRY=off
60
+ ```
61
+
62
+ If any data is unavailable (file absent, DB not initialized), show `—` for that field rather than erroring.
63
+
64
+ No preamble, no trailing summary.
@@ -0,0 +1,47 @@
1
+ ---
2
+ name: ashlr-team-invite
3
+ description: Invite someone to your ashlr team by email. Sends a magic-link invite (admin role required).
4
+ ---
5
+
6
+ Invite a new member to the caller's team.
7
+
8
+ **Usage:** The user invokes this skill with an email, optionally followed by `admin` or `member` (default: `member`):
9
+
10
+ ```
11
+ /ashlr-team-invite alice@example.com
12
+ /ashlr-team-invite bob@example.com admin
13
+ ```
14
+
15
+ Steps:
16
+
17
+ 1. If the first non-flag argument is missing or doesn't look like an email (no `@`), reply:
18
+
19
+ > "Usage: `/ashlr-team-invite <email> [admin|member]`"
20
+
21
+ and stop.
22
+
23
+ 2. Resolve the API base URL (default `https://api.ashlr.ai`, override with `ASHLR_API_URL`), and the API token:
24
+
25
+ ```bash
26
+ TOKEN="${ASHLR_PRO_TOKEN:-$(cat ~/.ashlr/pro-token 2>/dev/null)}"
27
+ [ -z "$TOKEN" ] && { echo "Not signed in. Run /ashlr-upgrade first."; exit 1; }
28
+ ```
29
+
30
+ 3. POST the invite:
31
+
32
+ ```bash
33
+ curl -sS -X POST "${ASHLR_API_URL:-https://api.ashlr.ai}/team/invite" \
34
+ -H "Authorization: Bearer $TOKEN" \
35
+ -H "Content-Type: application/json" \
36
+ -d '{"email":"<EMAIL>","role":"<ROLE>"}'
37
+ ```
38
+
39
+ 4. Interpret the response:
40
+ - HTTP 200 → print `✓ invite sent to <email>. Expires in 7 days.`
41
+ - HTTP 403 with `{"error":"Admin role required."}` → print `✗ You must be a team admin to invite members.`
42
+ - HTTP 404 with `{"error":"Not a team member."}` → print `✗ You're not on a team yet. Create one with POST /team/create first.`
43
+ - Any other error → print the server's `error` field verbatim.
44
+
45
+ 5. Print no preamble. Print no trailing summary. Just the one-line outcome.
46
+
47
+ No other commands. No branching beyond the four response cases above.
@@ -0,0 +1,122 @@
1
+ ---
2
+ name: ashlr-tier
3
+ description: Three-phase tiered delegation — explore (haiku) → implement (sonnet) → integration-check (haiku). Routes each phase to the right model tier automatically.
4
+ argument-hint: "`<task>`"
5
+ ---
6
+
7
+ Run a task through three model tiers in sequence, each phase feeding the next.
8
+
9
+ ## Usage
10
+
11
+ ```
12
+ /ashlr-tier <task>
13
+ ```
14
+
15
+ ## How it works
16
+
17
+ The phase 2 agent is selected based on the caller's ashlr tier (resolved from `~/.ashlr/pro-token-cache.json`):
18
+
19
+ | Phase | Free tier | Pro/Team tier | Role |
20
+ |-------|-----------|---------------|------|
21
+ | 1 — Discovery | `ashlr:ashlr:explore` (haiku) | `ashlr:ashlr:explore` (haiku) | Map relevant files, understand current state, surface risks |
22
+ | 2 — Implementation | `ashlr:ashlr:explore` (haiku) | `ashlr:ashlr:code` (sonnet) | Implement the change using Phase 1 findings |
23
+ | 3 — Integration check | `ashlr:ashlr:plan` (haiku) | `ashlr:ashlr:plan` (haiku) | Verify the implementation is consistent, surfaces integration risks |
24
+
25
+ Free tier defaults to haiku for phase 2 to keep delegation costs predictable; Pro/Team tier upgrades to sonnet for higher implementation quality. Override via `--force-sonnet` (any tier) or `--force-haiku` (any tier) — see args.
26
+
27
+ ## Examples
28
+
29
+ ```
30
+ /ashlr-tier add rate limiting to the HTTP server
31
+ /ashlr-tier refactor the genome pipeline to use streaming
32
+ /ashlr-tier extract the summarization logic into a shared helper
33
+ ```
34
+
35
+ ## Steps
36
+
37
+ 1. If `$ARGUMENTS` is empty, print usage and stop.
38
+
39
+ 2. **Detect tier**. Run via Bash:
40
+ ```
41
+ bun run ${CLAUDE_PLUGIN_ROOT}/scripts/check-tier.ts
42
+ ```
43
+ Capture output as `<tier>` — one of `free`, `pro`, `team`.
44
+ - If `$ARGUMENTS` contains `--force-sonnet`, set `<tier>` to `pro`.
45
+ - If `$ARGUMENTS` contains `--force-haiku`, set `<tier>` to `free`.
46
+ - Strip the `--force-*` flag from the forwarded `<task>` argument.
47
+
48
+ 3. **Phase 1 — Discovery** (spawn `ashlr:ashlr:explore`):
49
+
50
+ Prompt:
51
+ ```
52
+ Discovery phase for task: <task>
53
+
54
+ 1. Map all files that will need to change or be understood.
55
+ 2. Identify the entry points, key functions, and data flows involved.
56
+ 3. Surface any gotchas, risks, or constraints the implementer must know.
57
+ 4. List any existing utilities or patterns that should be reused.
58
+
59
+ Output the standard explore shape (What / Key files / Flow / Gotchas / Unknowns). Stay under 400 words.
60
+ ```
61
+
62
+ Wait for completion. Capture output as `<phase1_output>`.
63
+
64
+ 4. **Phase 2 — Implementation** — pick subagent based on `<tier>`:
65
+ - `free` → spawn `ashlr:ashlr:explore` (haiku, lower cost)
66
+ - `pro` or `team` → spawn `ashlr:ashlr:code` (sonnet, full implementation quality)
67
+
68
+ Prompt:
69
+ ```
70
+ Implementation phase for task: <task>
71
+
72
+ Phase 1 discovery findings:
73
+ <phase1_output>
74
+
75
+ Using the above findings:
76
+ 1. Implement the task.
77
+ 2. Follow existing patterns and reuse utilities identified in Phase 1.
78
+ 3. Handle the risks and constraints called out above.
79
+ 4. Run tests after making changes.
80
+
81
+ Report: files changed, summary of changes, test results.
82
+ ```
83
+
84
+ Wait for completion. Capture output as `<phase2_output>`.
85
+
86
+ 5. **Phase 3 — Integration check** (spawn `ashlr:ashlr:plan`):
87
+
88
+ Prompt:
89
+ ```
90
+ Integration check for task: <task>
91
+
92
+ Phase 2 implementation summary:
93
+ <phase2_output>
94
+
95
+ Review the implementation for:
96
+ 1. Interface consistency — are all callers of changed functions still compatible?
97
+ 2. Missing edge cases — what inputs/states weren't tested?
98
+ 3. Integration risks — what other system components could be affected?
99
+ 4. Follow-up tasks needed before this is production-ready.
100
+
101
+ Output: verdict (Ready / Needs work / Blocked), top 3 risks with file:line citations, recommended follow-ups.
102
+ ```
103
+
104
+ Wait for completion. Capture output as `<phase3_output>`.
105
+
106
+ 6. Print final report. The Phase 2 header line should reflect the actual model used (sonnet for pro/team, haiku for free):
107
+
108
+ ```
109
+ ## /ashlr-tier — <task> (tier: <tier>)
110
+
111
+ ### Phase 1: Discovery (explore / haiku)
112
+ <phase1_output>
113
+
114
+ ### Phase 2: Implementation (<code/sonnet> if pro/team, <explore/haiku> if free)
115
+ <phase2_output>
116
+
117
+ ### Phase 3: Integration check (plan / haiku)
118
+ <phase3_output>
119
+
120
+ ---
121
+ Verdict: <extracted from phase3>
122
+ ```
@@ -0,0 +1,60 @@
1
+ ---
2
+ name: ashlr-tour
3
+ description: 60-second guided walkthrough of the ashlr-plugin on the current project — proves the value of the tools on real files.
4
+ ---
5
+
6
+ You are giving a first-run tour of the ashlr-plugin. Execute the steps below in order. Each narration must be at most 2 sentences — short, instructional, second-person ("you"). Do not dump raw payloads unless asked: summarize what the user should notice.
7
+
8
+ ### Step 0 — status-line legend
9
+
10
+ Run `/ashlr-legend` and show the output verbatim in a fenced code block.
11
+
12
+ Narrate: "This is what every element in your status line means — refer back to it any time."
13
+
14
+ ### Step 1 — current state
15
+
16
+ Run the `/ashlr-status` skill (or read `~/.ashlr/stats.json` directly). Narrate: what ashlr currently sees (MCP servers active, genome present?, lifetime tokens saved so far). Keep it to one line.
17
+
18
+ ### Step 2 — tree view
19
+
20
+ Call `ashlr__tree` on the current working directory (`cwd`).
21
+
22
+ Narrate: "Here is what `ashlr__tree` shows the model instead of dozens of `ls`/`Read` calls — a compressed structural view of your repo."
23
+
24
+ ### Step 3 — read a real file
25
+
26
+ Pick the largest TypeScript file in `cwd` (ignore `node_modules`, `dist`, `.git`). Call `ashlr__read` on it. After the call, fetch the raw byte count via `wc -c` and compare to the returned payload length.
27
+
28
+ Narrate: "That file is X bytes on disk; `ashlr__read` returned Y bytes (~Z% of the original) — head + tail preserved, middle snipped."
29
+
30
+ ### Step 4 — show the receipts
31
+
32
+ Call `ashlr__savings` and display the totals block verbatim in a fenced code block.
33
+
34
+ Narrate: "Those two calls alone saved roughly N tokens (~$X). Multiply across a working session and it adds up fast."
35
+
36
+ ### Step 5 — three concrete next steps
37
+
38
+ End the tour with exactly these three bullets:
39
+
40
+ 1. **Try a real question with genome-aware grep:**
41
+ ```
42
+ Use ashlr__grep to find "<something real in your repo>"
43
+ ```
44
+ 2. **Unlock deeper savings (-84% on grep) by mapping the genome:**
45
+ ```
46
+ /ashlr-genome-init
47
+ ```
48
+ 3. **Install the status-line so savings follow you everywhere:**
49
+ ```
50
+ /ashlr-settings set statusLine true
51
+ ```
52
+
53
+ Close with one sentence: "That's the tour — run `/ashlr-savings` any time to see running totals, or `/ashlr-legend` to decode the status line."
54
+
55
+ ### Rules
56
+
57
+ - Do not run tools outside this sequence during the tour.
58
+ - If any step errors (e.g. no TS files in cwd, MCP server down), note it in one line and continue.
59
+ - Never exceed 2 sentences of narration per step.
60
+ - Total narration across all steps: under 60 lines.
@@ -0,0 +1,155 @@
1
+ ---
2
+ name: ashlr-update
3
+ description: Update the ashlr-plugin to the latest version from its git remote.
4
+ ---
5
+
6
+ Update the installed plugin in place.
7
+
8
+ The install location differs by Claude Code version:
9
+
10
+ - **New layout** (most users): `~/.claude/plugins/cache/<marketplace>/ashlr/<version>/`
11
+ - **Legacy layout**: `~/.claude/plugins/ashlr-plugin/`
12
+ - **Dev install**: `$CLAUDE_PLUGIN_ROOT` (set when running from a local checkout)
13
+
14
+ Resolve the actual path before doing anything else.
15
+
16
+ Steps:
17
+
18
+ 1. **Resolve the install path.** Run via Bash, picking the first candidate that
19
+ is a git checkout:
20
+
21
+ ```bash
22
+ PLUGIN_DIR=""
23
+ for candidate in \
24
+ "${CLAUDE_PLUGIN_ROOT:-}" \
25
+ "$HOME/.claude/plugins/ashlr-plugin" \
26
+ "$(ls -d $HOME/.claude/plugins/cache/*/ashlr/*/ 2>/dev/null | tail -1)"; do
27
+ [ -z "$candidate" ] && continue
28
+ if [ -d "$candidate/.git" ]; then PLUGIN_DIR="$candidate"; break; fi
29
+ done
30
+ echo "PLUGIN_DIR=$PLUGIN_DIR"
31
+ ```
32
+
33
+ - If `PLUGIN_DIR` is empty, tell the user: "ashlr-plugin is not installed as
34
+ a git checkout. Re-run `/plugin marketplace add` (or reinstall from the
35
+ marketplace) to upgrade, then restart Claude Code." Stop here.
36
+ - If multiple cache directories exist (old `0.7.0/` plus a newer versioned
37
+ dir), the `tail -1` picks the most recent lexicographically — which is
38
+ usually correct. If that turns out wrong, pass the path yourself.
39
+
40
+ 2. **Capture the pre-update SHA:**
41
+
42
+ ```bash
43
+ git -C "$PLUGIN_DIR" rev-parse --short HEAD
44
+ ```
45
+
46
+ 3. **Pull and reinstall.** Run as a single bash block so the auto-recovery
47
+ logic stays atomic:
48
+
49
+ ```bash
50
+ git -C "$PLUGIN_DIR" fetch --quiet 2>&1
51
+ PULL_OUT=$(git -C "$PLUGIN_DIR" pull --ff-only 2>&1)
52
+ PULL_RC=$?
53
+
54
+ if [ $PULL_RC -ne 0 ] && echo "$PULL_OUT" | grep -q "would be overwritten by merge"; then
55
+ # Conflict shape: "Your local changes to the following files would be
56
+ # overwritten by merge:" + tab-indented file list + "Please commit ...".
57
+ # Extract the file list, then split into:
58
+ # SAFE — files that are gitignored at the upstream HEAD post-pull
59
+ # (proof the project no longer tracks them — runtime mutations
60
+ # are pure cruft, safe to discard)
61
+ # UNSAFE — anything else (real source-file conflicts the user must
62
+ # resolve themselves)
63
+ CONFLICTS=$(echo "$PULL_OUT" | awk '/would be overwritten/{flag=1; next} /^Please/{flag=0} flag' | sed 's/^[[:space:]]*//' | sed '/^$/d')
64
+ UPSTREAM_IGNORE=$(git -C "$PLUGIN_DIR" show "@{u}:.gitignore" 2>/dev/null)
65
+
66
+ SAFE=""
67
+ UNSAFE=""
68
+ while IFS= read -r f; do
69
+ [ -z "$f" ] && continue
70
+ if echo "$UPSTREAM_IGNORE" | grep -qFx "$f"; then
71
+ SAFE="$SAFE $f"
72
+ else
73
+ UNSAFE="$UNSAFE $f"
74
+ fi
75
+ done <<< "$CONFLICTS"
76
+
77
+ if [ -n "$UNSAFE" ]; then
78
+ echo "$PULL_OUT"
79
+ echo ""
80
+ echo "Files with local changes that aren't safe to auto-discard:"
81
+ for f in $UNSAFE; do echo " $f"; done
82
+ echo ""
83
+ echo "Resolve manually, then re-run /ashlr-update."
84
+ exit 1
85
+ fi
86
+
87
+ echo "Auto-resetting runtime-only files (now gitignored upstream):"
88
+ for f in $SAFE; do echo " $f"; done
89
+ git -C "$PLUGIN_DIR" checkout -- $SAFE
90
+ git -C "$PLUGIN_DIR" pull --ff-only 2>&1 | tail -5
91
+ elif [ $PULL_RC -ne 0 ]; then
92
+ echo "$PULL_OUT"
93
+ exit 1
94
+ fi
95
+
96
+ (cd "$PLUGIN_DIR" && bun install 2>&1 | tail -3)
97
+
98
+ # Refresh ~/.ashlr/last-project.json so the next MCP tool call sees the
99
+ # current project, not whatever stale value the SessionStart hook last
100
+ # wrote (could be hours/days old, pointing at a different project). Without
101
+ # this, even a successful pull leaves ashlr__read/grep/edit refusing every
102
+ # call against the user's actual cwd until they restart Claude Code.
103
+ if [ -n "${CLAUDE_PROJECT_DIR:-$PWD}" ]; then
104
+ CLAUDE_PROJECT_DIR="${CLAUDE_PROJECT_DIR:-$PWD}" \
105
+ bun -e 'import("./hooks/session-start").then(m => m.writeProjectHint())' \
106
+ --cwd "$PLUGIN_DIR" 2>/dev/null || true
107
+ fi
108
+ ```
109
+
110
+ Why the auto-recovery: the plugin's own genome subsystem (PostToolUse
111
+ `genome-auto-propose` + SessionEnd consolidator) appends to runtime files
112
+ inside the plugin checkout. When the upstream commit moves those files into
113
+ `.gitignore`, any locally-mutated copy will block `git pull --ff-only` even
114
+ though the content is throwaway hook output. The whitelist is "in upstream's
115
+ `.gitignore`" — that's the project's explicit signal that the file is not
116
+ source content. Anything outside that whitelist still surfaces verbatim, so
117
+ real conflicts (a user's hand-edits to the plugin code) never get clobbered.
118
+
119
+ 4. **Capture the post-update SHA and the changelog:**
120
+
121
+ ```bash
122
+ git -C "$PLUGIN_DIR" rev-parse --short HEAD
123
+ git -C "$PLUGIN_DIR" log --oneline HEAD@{1}..HEAD
124
+ ```
125
+
126
+ 5. **Report:**
127
+
128
+ ```
129
+ ashlr-plugin updated: <old-sha> → <new-sha>
130
+ Changes:
131
+ <oneline log, or "already up to date">
132
+
133
+ ⚠ MCP servers run from the old code until you reload.
134
+ Fastest: run /reload-plugins
135
+ Full: quit Claude Code and start a fresh session
136
+ ```
137
+
138
+ The warning is not optional — in-process MCP servers are long-lived child
139
+ processes that Claude Code does NOT hot-reload after `git pull`. If the
140
+ user keeps working without a reload, `ashlr__edit` / `ashlr__grep` / etc.
141
+ will still be running the previous version's code even though the source
142
+ on disk has moved forward.
143
+
144
+ If the SHAs are equal, just print `ashlr-plugin already up to date at <sha>.`
145
+ and skip the restart prompt.
146
+
147
+ ### Note on Claude Code's plugin cache
148
+
149
+ The cache directory is named after the version at *install* time (e.g.
150
+ `ashlr/0.7.0/`), and that directory name does **not** change when you pull
151
+ newer commits into it via this skill. The path is effectively opaque — treat
152
+ it as the plugin's git checkout, not a version indicator. Claude Code's
153
+ marketplace loader reads `package.json` / `.claude-plugin/plugin.json` inside
154
+ the checkout, so the version it reports will reflect the pulled HEAD, not the
155
+ directory name.
@@ -0,0 +1,96 @@
1
+ ---
2
+ name: ashlr-upgrade
3
+ description: >
4
+ Terminal-native free-to-pro upgrade for ashlr. Walks the user from free
5
+ to Pro or Team in under 90 seconds without leaving the terminal. Primary
6
+ path: GitHub OAuth sign-in. Fallback: magic-link email. Handles plan
7
+ selection, Stripe checkout (with 7-day Pro trial on first checkout), and
8
+ activation polling — all from the CLI.
9
+ ---
10
+
11
+ You are running the ashlr upgrade flow.
12
+
13
+ ## What Pro gives you
14
+
15
+ **Your team learns together.** Free ashlr builds a genome that lives on your machine and resets when you switch laptops. Pro lifts that genome into a shared encrypted layer so every engineer's discoveries become everyone's — across machines, across teammates, across sessions.
16
+
17
+ - **Shared team genome** — every `ashlr__grep` hit, every file pattern discovered, every codebase insight lands in an encrypted, versioned store the whole team retrieves from. New engineers onboard into context, not silence.
18
+ - **Weekly team digest** — a summary of what the team learned that week: top genome sections hit, streak rankings, savings milestones. Delivered via `/ashlr-resume`; optional email.
19
+ - **Cross-machine streak and savings sync** — your streak counter, savings ledger, and `/ashlr-dashboard` follow you across machines without manual copy.
20
+ - **Cloud LLM summarizer** — `ashlr__read` and genome summarization run on hosted Haiku. No local Ollama or GPU setup required.
21
+ - **Hosted embedding retrieval** — `ashlr__grep` uses a cloud pgvector index refreshed on every push. Materially better recall on repos with > 5,000 files.
22
+
23
+ **Pro:** $12/mo or $120/yr — one developer, all cloud features.
24
+
25
+ **Pro Team:** $24/user/mo (min 3 seats) or $20/user/mo annual — shared encrypted genome, org-wide savings dashboard, policy packs (shipping), SSO.
26
+
27
+ First checkout includes a **7-day free trial** — no charge until the trial ends, cancel any time. The free tier is never crippled; Pro adds cloud context, it does not remove anything free.
28
+
29
+ ## Invocation
30
+
31
+ Run the upgrade script:
32
+
33
+ ```sh
34
+ bun run "${CLAUDE_PLUGIN_ROOT}/scripts/upgrade-flow.ts"
35
+ ```
36
+
37
+ Stream its stdout verbatim to the user. Do not add narration between steps —
38
+ the script output is the narrative.
39
+
40
+ ## Sign-in methods
41
+
42
+ The script will first ask how the user wants to sign in:
43
+
44
+ 1. **Sign in with GitHub** (primary) — opens `https://plugin.ashlr.ai/signin`
45
+ in the browser. After GitHub OAuth consent (`read:user user:email public_repo`),
46
+ the CLI receives a token automatically. This also unlocks the repo picker for
47
+ auto-genome builds on public repos.
48
+ 2. **Magic link** (fallback) — sends a one-time sign-in link to the user's email.
49
+ Use this if the user cannot open a browser or prefers not to connect GitHub.
50
+
51
+ ## Flags
52
+
53
+ Pass any user-supplied flags through directly. Supported flags:
54
+
55
+ - `--tier pro|team` — pre-select a tier
56
+ - `--annual` — pre-select annual billing
57
+ - `--email <addr>` — skip the email prompt (magic-link path only)
58
+ - `--no-poll` — skip the activation polling step (useful for testing)
59
+
60
+ Example with flags:
61
+
62
+ ```sh
63
+ bun run "${CLAUDE_PLUGIN_ROOT}/scripts/upgrade-flow.ts" --tier pro --annual
64
+ ```
65
+
66
+ ## Handling [ASHLR_PROMPT: ...] markers
67
+
68
+ When the script prints a line starting with `[ASHLR_PROMPT: ...]`, pause,
69
+ ask the user exactly the question inside the brackets, collect their input,
70
+ and write it to the script's stdin followed by a newline.
71
+
72
+ The markers you will encounter:
73
+
74
+ - `[ASHLR_PROMPT: How would you like to sign in? (1) GitHub (2) Email magic link]` — ask which method
75
+ - `[ASHLR_PROMPT: Email to sign in?]` — ask for the user's email address (magic-link path)
76
+ - `[ASHLR_PROMPT: Choose a plan (1-4, default 1):]` — ask which plan number
77
+ - `[ASHLR_PROMPT: How many seats (default 3):]` — (Team plans only) ask seat count
78
+
79
+ ## 7-day Pro trial
80
+
81
+ First-time Pro checkouts include a 7-day free trial — no charge until the
82
+ trial ends. The script surfaces the trial offer automatically. If you see a
83
+ user hesitating, remind them: trial starts immediately, cancel any time before
84
+ day 7, no charge if cancelled.
85
+
86
+ ## Error handling
87
+
88
+ If the script exits non-zero, show stderr and tell the user to run
89
+ `/ashlr-doctor` for a full diagnosis.
90
+
91
+ ## Rules
92
+
93
+ - Do not run any destructive operation without the user's explicit confirmation.
94
+ - Do not add narration between wizard sections — the script output is the narrative.
95
+ - Keep responses concise — the upgrade flow output is the substance.
96
+ - If the user is already on Pro or Team, the script will say so and exit — do not re-run it.