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,62 @@
1
+ [
2
+ {
3
+ "id": "TASK-001",
4
+ "status": "closed",
5
+ "subject": "v1.21 release: Windows cross-platform hardening",
6
+ "owner": "alice",
7
+ "description": "Fixed ~30 Windows-specific test flakes. Key fixes: path separator normalization in cwd-clamp, tmpdir handling in stats-sqlite, skip markers for file-based SQLite tests on Windows. All CI checks green.",
8
+ "createdAt": "2026-04-20T09:00:00Z",
9
+ "updatedAt": "2026-04-25T08:00:00Z",
10
+ "closedAt": "2026-04-25T08:00:00Z",
11
+ "priority": "high",
12
+ "labels": ["v1.21", "windows", "ci"]
13
+ },
14
+ {
15
+ "id": "TASK-002",
16
+ "status": "closed",
17
+ "subject": "Add per-session token accounting to all MCP tools",
18
+ "owner": "bob",
19
+ "description": "Migrated from global stats to session-keyed accounting using CLAUDE_SESSION_ID. Fixes concurrent terminal clobbering. See _stats.ts refactor.",
20
+ "createdAt": "2026-04-18T10:00:00Z",
21
+ "updatedAt": "2026-04-22T16:00:00Z",
22
+ "closedAt": "2026-04-22T16:00:00Z",
23
+ "priority": "high",
24
+ "labels": ["v1.18", "accounting"]
25
+ },
26
+ {
27
+ "id": "TASK-003",
28
+ "status": "closed",
29
+ "subject": "Implement redirect-by-default for Read/Grep/Edit hooks",
30
+ "owner": "alice",
31
+ "description": "Changed default ASHLR_HOOK_MODE from 'nudge' to 'redirect'. Added isInsideCwd safety net so out-of-scope paths fall back to nudge. Added ASHLR_HOOK_MODE env override.",
32
+ "createdAt": "2026-04-17T09:00:00Z",
33
+ "updatedAt": "2026-04-23T12:00:00Z",
34
+ "closedAt": "2026-04-23T12:00:00Z",
35
+ "priority": "medium",
36
+ "labels": ["v1.18", "hooks"]
37
+ },
38
+ {
39
+ "id": "TASK-004",
40
+ "status": "closed",
41
+ "subject": "Deploy genome auto-consolidate + LLM synthesis",
42
+ "owner": "charlie",
43
+ "description": "Genome now auto-consolidates proposals into knowledge/ on session end. LLM synthesis uses local Ollama or cloud override. Cache TTL 1h. Falls back to snipCompact on LLM failure.",
44
+ "createdAt": "2026-04-15T11:00:00Z",
45
+ "updatedAt": "2026-04-22T18:00:00Z",
46
+ "closedAt": "2026-04-22T18:00:00Z",
47
+ "priority": "high",
48
+ "labels": ["v1.14", "genome"]
49
+ },
50
+ {
51
+ "id": "TASK-005",
52
+ "status": "closed",
53
+ "subject": "Fix status-line animation: session delta not lifetime",
54
+ "owner": "bob",
55
+ "description": "Status line was showing lifetime savings instead of session delta. Root cause: savings-status-line.ts was reading from the wrong stats key. Fixed by switching to session-scoped read.",
56
+ "createdAt": "2026-04-21T14:00:00Z",
57
+ "updatedAt": "2026-04-25T07:00:00Z",
58
+ "closedAt": "2026-04-25T07:00:00Z",
59
+ "priority": "medium",
60
+ "labels": ["v1.20.2", "status-line", "bugfix"]
61
+ }
62
+ ]
@@ -0,0 +1,27 @@
1
+ [
2
+ { "id": "TASK-201", "status": "open", "subject": "Migrate genome crypto to v2 key format", "owner": "alice", "createdAt": "2026-04-01T09:00:00Z", "priority": "high" },
3
+ { "id": "TASK-202", "status": "open", "subject": "Add ashlr__glob streaming for large dirs", "owner": "alice", "createdAt": "2026-04-02T09:00:00Z", "priority": "medium" },
4
+ { "id": "TASK-203", "status": "in-progress", "subject": "Implement cloud genome pull on session start", "owner": "bob", "createdAt": "2026-04-03T09:00:00Z", "priority": "high" },
5
+ { "id": "TASK-204", "status": "open", "subject": "Add ashlr__sql query plan explain support", "owner": "bob", "createdAt": "2026-04-04T09:00:00Z", "priority": "low" },
6
+ { "id": "TASK-205", "status": "closed", "subject": "Fix embed-populator crash on empty genome", "owner": "charlie", "createdAt": "2026-04-05T09:00:00Z", "priority": "high" },
7
+ { "id": "TASK-206", "status": "open", "subject": "Track A: decompose efficiency-server into 5 tools", "owner": "charlie", "createdAt": "2026-04-06T09:00:00Z", "priority": "medium" },
8
+ { "id": "TASK-207", "status": "in-progress", "subject": "Track B: WebSearch + Task hook coverage", "owner": "diana", "createdAt": "2026-04-07T09:00:00Z", "priority": "high" },
9
+ { "id": "TASK-208", "status": "open", "subject": "Track C: edit-structural AST rename server", "owner": "diana", "createdAt": "2026-04-08T09:00:00Z", "priority": "medium" },
10
+ { "id": "TASK-209", "status": "open", "subject": "Track D: LLM provider abstraction in _summarize", "owner": "alice", "createdAt": "2026-04-09T09:00:00Z", "priority": "medium" },
11
+ { "id": "TASK-210", "status": "open", "subject": "Track E: namespace + WHEN copy for redirects", "owner": "bob", "createdAt": "2026-04-10T09:00:00Z", "priority": "low" },
12
+ { "id": "TASK-211", "status": "open", "subject": "Track F: GitHub OAuth refresh token flow", "owner": "charlie", "createdAt": "2026-04-11T09:00:00Z", "priority": "high" },
13
+ { "id": "TASK-212", "status": "open", "subject": "Track G: dashboard per-tool bar chart", "owner": "diana", "createdAt": "2026-04-12T09:00:00Z", "priority": "medium" },
14
+ { "id": "TASK-213", "status": "in-progress", "subject": "Track H: v1.22 benchmark suite", "owner": "alice", "createdAt": "2026-04-13T09:00:00Z", "priority": "high" },
15
+ { "id": "TASK-214", "status": "open", "subject": "Add Ollama auto-detection for local LLM", "owner": "bob", "createdAt": "2026-04-14T09:00:00Z", "priority": "low" },
16
+ { "id": "TASK-215", "status": "closed", "subject": "Retire tool-redirect.ts (absorbed into pretooluse hooks)", "owner": "charlie", "createdAt": "2026-04-15T09:00:00Z", "priority": "medium" },
17
+ { "id": "TASK-216", "status": "open", "subject": "Add ashlr__orient graph export format", "owner": "diana", "createdAt": "2026-04-16T09:00:00Z", "priority": "low" },
18
+ { "id": "TASK-217", "status": "open", "subject": "Improve savings-math accuracy for cache hits", "owner": "alice", "createdAt": "2026-04-17T09:00:00Z", "priority": "medium" },
19
+ { "id": "TASK-218", "status": "open", "subject": "Add ashlr__bash --timeout flag", "owner": "bob", "createdAt": "2026-04-18T09:00:00Z", "priority": "low" },
20
+ { "id": "TASK-219", "status": "closed", "subject": "Fix hook-timings p95 calculation off-by-one", "owner": "charlie", "createdAt": "2026-04-19T09:00:00Z", "priority": "low" },
21
+ { "id": "TASK-220", "status": "open", "subject": "Add ashlr__tree depth filter", "owner": "diana", "createdAt": "2026-04-20T09:00:00Z", "priority": "low" },
22
+ { "id": "TASK-221", "status": "open", "subject": "Improve genome proposal deduplication", "owner": "alice", "createdAt": "2026-04-21T09:00:00Z", "priority": "medium" },
23
+ { "id": "TASK-222", "status": "open", "subject": "Add session-end cost breakdown report", "owner": "bob", "createdAt": "2026-04-22T09:00:00Z", "priority": "low" },
24
+ { "id": "TASK-223", "status": "in-progress", "subject": "ashlr Pro trial flow — upgrade wizard", "owner": "charlie", "createdAt": "2026-04-23T09:00:00Z", "priority": "high" },
25
+ { "id": "TASK-224", "status": "open", "subject": "Add ashlr__http response caching", "owner": "diana", "createdAt": "2026-04-24T09:00:00Z", "priority": "medium" },
26
+ { "id": "TASK-225", "status": "open", "subject": "Publish ashlr-plugin v1.22 to npm", "owner": "alice", "createdAt": "2026-04-25T09:00:00Z", "priority": "high" }
27
+ ]
@@ -0,0 +1,79 @@
1
+ [
2
+ {
3
+ "id": "TASK-101",
4
+ "status": "open",
5
+ "subject": "Implement ashlr__websearch dedup pipeline",
6
+ "owner": "alice",
7
+ "description": "Build the domain deduplication and snippet truncation pipeline for ashlr__websearch. Should integrate with summarizeIfLarge for result sets > 3 entries. See Track B spec in ultrathink-deploy-agents plan.",
8
+ "createdAt": "2026-04-24T10:00:00Z",
9
+ "updatedAt": "2026-04-24T14:30:00Z",
10
+ "priority": "high",
11
+ "labels": ["track-b", "token-efficiency"]
12
+ },
13
+ {
14
+ "id": "TASK-102",
15
+ "status": "open",
16
+ "subject": "Add PreToolUse hook for WebSearch redirect",
17
+ "owner": "alice",
18
+ "description": "Create pretooluse-websearch.ts following the pretooluse-grep.ts pattern. Should block in redirect mode and nudge in nudge mode. Include hook-timings telemetry.",
19
+ "createdAt": "2026-04-24T10:05:00Z",
20
+ "updatedAt": "2026-04-24T15:00:00Z",
21
+ "priority": "high",
22
+ "labels": ["track-b", "hooks"]
23
+ },
24
+ {
25
+ "id": "TASK-103",
26
+ "status": "open",
27
+ "subject": "Write unit tests for websearch and task tools",
28
+ "owner": "bob",
29
+ "description": "Test files: __tests__/websearch.test.ts and __tests__/task-tools.test.ts. Mock recordSavingAccurate and summarizeIfLarge. Cover: dedup, truncation, summarize gate, savings call shape.",
30
+ "createdAt": "2026-04-24T10:10:00Z",
31
+ "updatedAt": "2026-04-25T09:00:00Z",
32
+ "priority": "medium",
33
+ "labels": ["track-b", "testing"]
34
+ },
35
+ {
36
+ "id": "TASK-104",
37
+ "status": "open",
38
+ "subject": "Register new tools in _router-handlers.ts and hooks.json",
39
+ "owner": "bob",
40
+ "description": "Add import statements for websearch-server-handlers and task-server-handlers to _router-handlers.ts. Add WebSearch, TaskList, TaskGet matchers to hooks/hooks.json. Verify no circular imports.",
41
+ "createdAt": "2026-04-24T10:15:00Z",
42
+ "updatedAt": "2026-04-24T16:00:00Z",
43
+ "priority": "medium",
44
+ "labels": ["track-b", "wiring"]
45
+ },
46
+ {
47
+ "id": "TASK-105",
48
+ "status": "open",
49
+ "subject": "Create bench fixtures for Track H",
50
+ "owner": "charlie",
51
+ "description": "Add bench/fixtures/websearch-*.json and bench/fixtures/tasklist-*.json with realistic shapes for benchmark runs. 3-5 files each. Synthetic data is fine.",
52
+ "createdAt": "2026-04-24T10:20:00Z",
53
+ "updatedAt": "2026-04-24T11:00:00Z",
54
+ "priority": "low",
55
+ "labels": ["track-b", "bench"]
56
+ },
57
+ {
58
+ "id": "TASK-106",
59
+ "status": "open",
60
+ "subject": "Update commands/ashlr-help.md with new tools",
61
+ "owner": "charlie",
62
+ "description": "Add ashlr__websearch and ashlr__task_list / ashlr__task_get to the help command listing.",
63
+ "createdAt": "2026-04-24T10:25:00Z",
64
+ "updatedAt": "2026-04-24T10:25:00Z",
65
+ "priority": "low",
66
+ "labels": ["track-b", "docs"]
67
+ },
68
+ {
69
+ "id": "TASK-107",
70
+ "status": "in-progress",
71
+ "subject": "Track H: benchmark all new v1.22 tools",
72
+ "owner": "diana",
73
+ "description": "Run bench suite against websearch + task fixtures. Report token savings vs baseline. Target: > 40% reduction for websearch, > 50% for task list with 50+ items.",
74
+ "createdAt": "2026-04-25T08:00:00Z",
75
+ "updatedAt": "2026-04-25T09:30:00Z",
76
+ "priority": "high",
77
+ "labels": ["track-h", "bench"]
78
+ }
79
+ ]
@@ -0,0 +1,32 @@
1
+ [
2
+ {
3
+ "title": "Bun — A fast all-in-one JavaScript runtime",
4
+ "url": "https://bun.sh/",
5
+ "snippet": "Bun is a fast JavaScript all-in-one toolkit. It is a runtime, bundler, test runner, and package manager. Bun is designed to be a drop-in Node.js replacement with native TypeScript support, built-in SQLite, a fast HTTP server, and the Bun Shell for cross-platform scripting. Benchmarks show Bun is 3-4x faster than Node.js for HTTP throughput and 30x faster for cold starts.",
6
+ "score": 0.99
7
+ },
8
+ {
9
+ "title": "Bun Documentation — Installation",
10
+ "url": "https://bun.sh/docs/installation",
11
+ "snippet": "Install Bun via curl: curl -fsSL https://bun.sh/install | bash. Or via npm: npm install -g bun. Or via Homebrew: brew install oven-sh/bun/bun. Bun requires macOS 12+, Linux (kernel 5.6+), or Windows 10+. After installation, verify with: bun --version. Bun auto-detects package.json and tsconfig.json.",
12
+ "score": 0.95
13
+ },
14
+ {
15
+ "title": "Bun Blog — Bun v1.2 Release Notes",
16
+ "url": "https://bun.sh/blog/bun-v1.2",
17
+ "snippet": "Bun v1.2 adds: S3 object storage built-in, PostgreSQL client built-in, improved Node.js compatibility for crypto, streams, and child_process. The bun test runner now supports --coverage with LCOV output. The bundler supports CSS, SVG, and HTML entry points. Memory usage reduced 40% for long-running server workloads.",
18
+ "score": 0.91
19
+ },
20
+ {
21
+ "title": "GitHub — oven-sh/bun",
22
+ "url": "https://github.com/oven-sh/bun",
23
+ "snippet": "Bun is implemented in Zig and uses JavaScriptCore (WebKit's JS engine) instead of V8. The repository contains the runtime, bundler, package manager, and standard library. Currently at 74k GitHub stars. Contributions welcome — see CONTRIBUTING.md for build instructions. Issues labeled 'good first issue' are ideal for new contributors.",
24
+ "score": 0.88
25
+ },
26
+ {
27
+ "title": "Bun vs Node.js vs Deno — 2025 Comparison",
28
+ "url": "https://blog.logrocket.com/bun-vs-node-vs-deno-2025/",
29
+ "snippet": "Comprehensive comparison of JavaScript runtimes in 2025. Bun wins on: raw HTTP throughput (Bun: 400k req/s, Node: 95k, Deno: 130k), cold-start time (Bun: 5ms, Node: 150ms), and built-in SQLite. Node.js wins on: ecosystem maturity, third-party module compatibility, and enterprise adoption. Deno wins on: TypeScript-first DX and security sandbox.",
30
+ "score": 0.82
31
+ }
32
+ ]
@@ -0,0 +1,32 @@
1
+ [
2
+ {
3
+ "title": "React Docs — Hooks Reference",
4
+ "url": "https://react.dev/reference/react/hooks",
5
+ "snippet": "Hooks let you use different React features from your components. Built-in hooks include: useState for local state, useEffect for side effects, useContext for consuming context, useReducer for complex state logic, useCallback and useMemo for performance optimization, useRef for DOM refs and mutable values, and useId for unique IDs. Custom hooks let you extract stateful logic into reusable functions.",
6
+ "score": 0.98
7
+ },
8
+ {
9
+ "title": "Patterns.dev — React Hooks Patterns",
10
+ "url": "https://www.patterns.dev/react/hooks-pattern/",
11
+ "snippet": "The Hooks pattern allows you to add state and lifecycle methods to functional components without using class components. This guide covers: the Container/Presentational pattern replaced by hooks, custom hooks for data fetching, the useLocalStorage hook, and composing hooks for complex features. Hooks make it easy to extract and share stateful logic between components.",
12
+ "score": 0.93
13
+ },
14
+ {
15
+ "title": "kentcdodds.com — The State Reducer Pattern with React Hooks",
16
+ "url": "https://kentcdodds.com/blog/the-state-reducer-pattern-with-react-hooks",
17
+ "snippet": "The state reducer pattern is an advanced React hooks pattern for inversion of control. It allows users of your component to customize how state changes happen. Implementation uses useReducer with an overrideable reducer function. The pattern is useful for component libraries where consumers need fine-grained control over state transitions.",
18
+ "score": 0.87
19
+ },
20
+ {
21
+ "title": "Smashing Magazine — Advanced React Hooks",
22
+ "url": "https://www.smashingmagazine.com/2021/11/advanced-react-hooks-redux/",
23
+ "snippet": "Advanced hooks patterns covered: useImperativeHandle for exposing imperative APIs, useLayoutEffect vs useEffect timing differences, useDeferredValue for concurrent mode, useTransition for non-urgent updates, and useSyncExternalStore for third-party state integration. Each pattern includes real-world use cases and performance benchmarks.",
24
+ "score": 0.81
25
+ },
26
+ {
27
+ "title": "GitHub — awesome-react-hooks",
28
+ "url": "https://github.com/rehooks/awesome-react-hooks",
29
+ "snippet": "A curated list of React Hooks resources and libraries. Includes: data fetching hooks (SWR, React Query), form hooks (React Hook Form, Formik), animation hooks (Framer Motion), routing hooks (React Router v6), and state management hooks (Zustand, Jotai). Over 6,000 stars.",
30
+ "score": 0.76
31
+ }
32
+ ]
@@ -0,0 +1,38 @@
1
+ [
2
+ {
3
+ "title": "TypeScript Handbook — Generics",
4
+ "url": "https://www.typescriptlang.org/docs/handbook/2/generics.html",
5
+ "snippet": "Generics allow you to create reusable components that can work with a variety of types rather than a single one. Using type variables, a special kind of variable that works on types rather than values, you can define functions, classes, and interfaces that are type-safe without committing to a specific type. For example: function identity<T>(arg: T): T { return arg; } This is the identity function. We've now added a type variable T that captures the type the user provides so we can use that information later.",
6
+ "score": 0.97
7
+ },
8
+ {
9
+ "title": "TypeScript Handbook — Generics (mirror)",
10
+ "url": "https://www.typescriptlang.org/docs/handbook/generics.html",
11
+ "snippet": "Duplicate domain entry — should be deduped. Generic classes have a similar shape to generic interfaces. Generic classes have a generic type parameter list in angle brackets following the name of the class.",
12
+ "score": 0.65
13
+ },
14
+ {
15
+ "title": "Understanding TypeScript Generics — freeCodeCamp",
16
+ "url": "https://www.freecodecamp.org/news/typescript-generics-use-case/",
17
+ "snippet": "TypeScript generics are a powerful feature that allow you to create flexible, reusable functions and classes. Generics enable you to define a component that can work with any data type. This tutorial walks through practical examples including generic constraints, default type parameters, and conditional types. You'll learn when to use generics vs. union types, and how to avoid common pitfalls.",
18
+ "score": 0.91
19
+ },
20
+ {
21
+ "title": "TypeScript Generics Tutorial — refactoring.guru",
22
+ "url": "https://refactoring.guru/typescript-generics",
23
+ "snippet": "In this tutorial we explore advanced generic patterns: generic utility types (Partial, Required, Readonly, Pick, Omit), mapped types, and template literal types. Code examples show before/after refactoring with generics to eliminate type duplication.",
24
+ "score": 0.84
25
+ },
26
+ {
27
+ "title": "Stack Overflow — TypeScript generics with constraints",
28
+ "url": "https://stackoverflow.com/questions/typed-generics-typescript",
29
+ "snippet": "Top answer (1.2k votes): Use a constraint to limit what T can be. Example: function getProperty<T, K extends keyof T>(obj: T, key: K): T[K] { return obj[key]; } This pattern is extremely common in utility libraries like lodash-es and type-fest. The keyof constraint ensures type safety at compile time.",
30
+ "score": 0.88
31
+ },
32
+ {
33
+ "title": "TypeScript Deep Dive — Generics",
34
+ "url": "https://basarat.gitbook.io/typescript/type-system/generics",
35
+ "snippet": "Generics are just variables for types. The motivation for generics is to provide meaningful type constraints between members. This chapter covers: generic functions, generic classes, generic constraints, and the common patterns you'll see in real TypeScript codebases like Angular and NestJS.",
36
+ "score": 0.79
37
+ }
38
+ ]
@@ -0,0 +1 @@
1
+ 049801243cc791e0ba28910b8a638f0e05446bcd
@@ -0,0 +1,17 @@
1
+ # node-sdk reference subset
2
+
3
+ Subset of [github.com/vercel/ai](https://github.com/vercel/ai) at commit
4
+ `049801243cc791e0ba28910b8a638f0e05446bcd`, included for benchmark reproducibility.
5
+
6
+ 32 TypeScript source files sampled from `packages/ai/src/` covering:
7
+ agent orchestration, embed, error types, generate-image, generate-object,
8
+ generate-speech, generate-text, telemetry, and utility modules.
9
+
10
+ No test files are included. Files ending in `.test.ts` or `.spec.ts` were excluded.
11
+
12
+ ## License notice
13
+
14
+ The files in `src/` are copyright Vercel, Inc. and contributors, licensed under
15
+ the Apache-2.0 License. See https://github.com/vercel/ai/blob/main/LICENSE for
16
+ the full text. These files are included here solely for benchmark reproducibility
17
+ under fair use / the Apache-2.0 license terms.
@@ -0,0 +1,163 @@
1
+ import type { Arrayable, Context, ToolSet } from '@ai-sdk/provider-utils';
2
+ import { ModelMessage } from '@ai-sdk/provider-utils';
3
+ import { GenerateTextResult } from '../generate-text/generate-text-result';
4
+ import { Output } from '../generate-text/output';
5
+ import { StreamTextTransform } from '../generate-text/stream-text';
6
+ import { StreamTextResult } from '../generate-text/stream-text-result';
7
+ import {
8
+ OnToolExecutionEndCallback,
9
+ OnToolExecutionStartCallback,
10
+ } from '../generate-text/tool-execution-events';
11
+ import { TimeoutConfiguration } from '../prompt/request-options';
12
+ import type {
13
+ ToolLoopAgentOnFinishCallback,
14
+ ToolLoopAgentOnStartCallback,
15
+ ToolLoopAgentOnStepFinishCallback,
16
+ ToolLoopAgentOnStepStartCallback,
17
+ } from './tool-loop-agent-settings';
18
+
19
+ /**
20
+ * Parameters for calling an agent.
21
+ */
22
+ export type AgentCallParameters<
23
+ CALL_OPTIONS,
24
+ TOOLS extends ToolSet = {},
25
+ RUNTIME_CONTEXT extends Context = Context,
26
+ > = ([CALL_OPTIONS] extends [never]
27
+ ? { options?: never }
28
+ : { options: CALL_OPTIONS }) &
29
+ (
30
+ | {
31
+ /**
32
+ * A prompt. It can be either a text prompt or a list of messages.
33
+ *
34
+ * You can either use `prompt` or `messages` but not both.
35
+ */
36
+ prompt: string | Array<ModelMessage>;
37
+
38
+ /**
39
+ * A list of messages.
40
+ *
41
+ * You can either use `prompt` or `messages` but not both.
42
+ */
43
+ messages?: never;
44
+ }
45
+ | {
46
+ /**
47
+ * A list of messages.
48
+ *
49
+ * You can either use `prompt` or `messages` but not both.
50
+ */
51
+ messages: Array<ModelMessage>;
52
+
53
+ /**
54
+ * A prompt. It can be either a text prompt or a list of messages.
55
+ *
56
+ * You can either use `prompt` or `messages` but not both.
57
+ */
58
+ prompt?: never;
59
+ }
60
+ ) & {
61
+ /**
62
+ * Abort signal.
63
+ */
64
+ abortSignal?: AbortSignal;
65
+
66
+ /**
67
+ * Timeout in milliseconds. Can be specified as a number or as an object with `totalMs`.
68
+ */
69
+ timeout?: TimeoutConfiguration<TOOLS>;
70
+
71
+ /**
72
+ * Callback that is called when the agent operation begins, before any LLM calls.
73
+ */
74
+ experimental_onStart?: ToolLoopAgentOnStartCallback<TOOLS, RUNTIME_CONTEXT>;
75
+
76
+ /**
77
+ * Callback that is called when a step (LLM call) begins, before the provider is called.
78
+ */
79
+ experimental_onStepStart?: ToolLoopAgentOnStepStartCallback<
80
+ TOOLS,
81
+ RUNTIME_CONTEXT
82
+ >;
83
+
84
+ /**
85
+ * Callback that is called before each tool execution begins.
86
+ */
87
+ experimental_onToolExecutionStart?: OnToolExecutionStartCallback<TOOLS>;
88
+
89
+ /**
90
+ * Callback that is called after each tool execution completes.
91
+ */
92
+ experimental_onToolExecutionEnd?: OnToolExecutionEndCallback<TOOLS>;
93
+
94
+ /**
95
+ * Callback that is called when each step (LLM call) is finished, including intermediate steps.
96
+ */
97
+ onStepFinish?: ToolLoopAgentOnStepFinishCallback<TOOLS, RUNTIME_CONTEXT>;
98
+
99
+ /**
100
+ * Callback that is called when all steps are finished and the response is complete.
101
+ */
102
+ onFinish?: ToolLoopAgentOnFinishCallback<TOOLS, RUNTIME_CONTEXT>;
103
+ };
104
+
105
+ /**
106
+ * Parameters for streaming an output from an agent.
107
+ */
108
+ export type AgentStreamParameters<
109
+ CALL_OPTIONS,
110
+ TOOLS extends ToolSet,
111
+ RUNTIME_CONTEXT extends Context = Context,
112
+ > = AgentCallParameters<CALL_OPTIONS, TOOLS, RUNTIME_CONTEXT> & {
113
+ /**
114
+ * Optional stream transformations.
115
+ * They are applied in the order they are provided.
116
+ * The stream transformations must maintain the stream structure for streamText to work correctly.
117
+ */
118
+ experimental_transform?: Arrayable<StreamTextTransform<TOOLS>>;
119
+ };
120
+
121
+ /**
122
+ * An Agent receives a prompt (text or messages) and generates or streams an output
123
+ * that consists of steps, tool calls, data parts, etc.
124
+ *
125
+ * You can implement your own Agent by implementing the `Agent` interface,
126
+ * or use the `ToolLoopAgent` class.
127
+ */
128
+ export interface Agent<
129
+ CALL_OPTIONS = never,
130
+ TOOLS extends ToolSet = {},
131
+ RUNTIME_CONTEXT extends Context = Context,
132
+ OUTPUT extends Output = never,
133
+ > {
134
+ /**
135
+ * The specification version of the agent interface. This will enable
136
+ * us to evolve the agent interface and retain backwards compatibility.
137
+ */
138
+ readonly version: 'agent-v1';
139
+
140
+ /**
141
+ * The id of the agent.
142
+ */
143
+ readonly id: string | undefined;
144
+
145
+ /**
146
+ * The tools that the agent can use.
147
+ */
148
+ readonly tools: TOOLS;
149
+
150
+ /**
151
+ * Generates an output from the agent (non-streaming).
152
+ */
153
+ generate(
154
+ options: AgentCallParameters<CALL_OPTIONS, TOOLS, RUNTIME_CONTEXT>,
155
+ ): PromiseLike<GenerateTextResult<TOOLS, RUNTIME_CONTEXT, OUTPUT>>;
156
+
157
+ /**
158
+ * Streams an output from the agent (streaming).
159
+ */
160
+ stream(
161
+ options: AgentStreamParameters<CALL_OPTIONS, TOOLS, RUNTIME_CONTEXT>,
162
+ ): PromiseLike<StreamTextResult<TOOLS, RUNTIME_CONTEXT, OUTPUT>>;
163
+ }
@@ -0,0 +1,83 @@
1
+ import { StreamTextTransform, UIMessageStreamOptions } from '../generate-text';
2
+ import { Output } from '../generate-text/output';
3
+ import type { Arrayable, Context, ToolSet } from '@ai-sdk/provider-utils';
4
+ import { TimeoutConfiguration } from '../prompt/request-options';
5
+ import { InferUIMessageChunk } from '../ui-message-stream';
6
+ import { convertToModelMessages } from '../ui/convert-to-model-messages';
7
+ import { InferUITools, UIMessage } from '../ui/ui-messages';
8
+ import { validateUIMessages } from '../ui/validate-ui-messages';
9
+ import { AsyncIterableStream } from '../util/async-iterable-stream';
10
+ import { Agent } from './agent';
11
+ import type { ToolLoopAgentOnStepFinishCallback } from './tool-loop-agent-settings';
12
+
13
+ /**
14
+ * Runs the agent and stream the output as a UI message stream.
15
+ *
16
+ * @param agent - The agent to run.
17
+ * @param uiMessages - The input UI messages.
18
+ * @param abortSignal - The abort signal. Optional.
19
+ * @param timeout - Timeout in milliseconds. Optional.
20
+ * @param options - The options for the agent.
21
+ * @param experimental_transform - The stream transformations. Optional.
22
+ * @param onStepFinish - Callback that is called when each step is finished. Optional.
23
+ *
24
+ * @returns The UI message stream.
25
+ */
26
+ export async function createAgentUIStream<
27
+ CALL_OPTIONS = never,
28
+ TOOLS extends ToolSet = {},
29
+ RUNTIME_CONTEXT extends Context = Context,
30
+ OUTPUT extends Output = never,
31
+ MESSAGE_METADATA = unknown,
32
+ >({
33
+ agent,
34
+ uiMessages,
35
+ options,
36
+ abortSignal,
37
+ timeout,
38
+ experimental_transform,
39
+ onStepFinish,
40
+ ...uiMessageStreamOptions
41
+ }: {
42
+ agent: Agent<CALL_OPTIONS, TOOLS, RUNTIME_CONTEXT, OUTPUT>;
43
+ uiMessages: unknown[];
44
+ abortSignal?: AbortSignal;
45
+ timeout?: TimeoutConfiguration<TOOLS>;
46
+ options?: CALL_OPTIONS;
47
+ experimental_transform?: Arrayable<StreamTextTransform<TOOLS>>;
48
+ onStepFinish?: ToolLoopAgentOnStepFinishCallback<TOOLS>;
49
+ // TODO `originalMessages` is part of this for bc, omit in v7
50
+ } & UIMessageStreamOptions<
51
+ UIMessage<MESSAGE_METADATA, never, InferUITools<TOOLS>>
52
+ >): Promise<
53
+ AsyncIterableStream<
54
+ InferUIMessageChunk<UIMessage<MESSAGE_METADATA, never, InferUITools<TOOLS>>>
55
+ >
56
+ > {
57
+ const validatedMessages = await validateUIMessages<
58
+ UIMessage<MESSAGE_METADATA, never, InferUITools<TOOLS>>
59
+ >({
60
+ messages: uiMessages,
61
+ tools: agent.tools,
62
+ });
63
+
64
+ const modelMessages = await convertToModelMessages(validatedMessages, {
65
+ tools: agent.tools,
66
+ });
67
+
68
+ const result = await agent.stream({
69
+ prompt: modelMessages,
70
+ options: options as CALL_OPTIONS,
71
+ abortSignal,
72
+ timeout,
73
+ experimental_transform,
74
+ onStepFinish,
75
+ });
76
+
77
+ return result.toUIMessageStream({
78
+ ...uiMessageStreamOptions,
79
+ // TODO reading `originalMessages` is here for bc, always use `validatedMessages` in v7
80
+ originalMessages:
81
+ uiMessageStreamOptions.originalMessages ?? validatedMessages,
82
+ });
83
+ }