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,112 @@
1
+ import { createResolvablePromise } from './create-resolvable-promise';
2
+
3
+ /**
4
+ * Creates a stitchable stream that can pipe one stream at a time.
5
+ *
6
+ * @template T - The type of values emitted by the streams.
7
+ * @returns {Object} An object containing the stitchable stream and control methods.
8
+ */
9
+ export function createStitchableStream<T>(): {
10
+ stream: ReadableStream<T>;
11
+ addStream: (innerStream: ReadableStream<T>) => void;
12
+ close: () => void;
13
+ terminate: () => void;
14
+ } {
15
+ let innerStreamReaders: ReadableStreamDefaultReader<T>[] = [];
16
+ let controller: ReadableStreamDefaultController<T> | null = null;
17
+ let isClosed = false;
18
+ let waitForNewStream = createResolvablePromise<void>();
19
+
20
+ const terminate = () => {
21
+ isClosed = true;
22
+ waitForNewStream.resolve();
23
+
24
+ innerStreamReaders.forEach(reader => reader.cancel());
25
+ innerStreamReaders = [];
26
+ controller?.close();
27
+ };
28
+
29
+ const processPull = async () => {
30
+ // Case 1: Outer stream is closed and no more inner streams
31
+ if (isClosed && innerStreamReaders.length === 0) {
32
+ controller?.close();
33
+ return;
34
+ }
35
+
36
+ // Case 2: No inner streams available, but outer stream is open
37
+ // wait for a new inner stream to be added or the outer stream to close
38
+ if (innerStreamReaders.length === 0) {
39
+ waitForNewStream = createResolvablePromise<void>();
40
+ await waitForNewStream.promise;
41
+ return await processPull();
42
+ }
43
+
44
+ try {
45
+ const { value, done } = await innerStreamReaders[0].read();
46
+
47
+ if (done) {
48
+ // Case 3: Current inner stream is done
49
+ innerStreamReaders.shift(); // Remove the finished stream
50
+
51
+ if (innerStreamReaders.length === 0 && isClosed) {
52
+ // when closed and no more inner streams, stop pulling
53
+ controller?.close();
54
+ } else {
55
+ // continue pulling from the next stream
56
+ await processPull();
57
+ }
58
+ } else {
59
+ // Case 4: Current inner stream returns an item
60
+ controller?.enqueue(value);
61
+ }
62
+ } catch (error) {
63
+ // Case 5: Current inner stream throws an error
64
+ controller?.error(error);
65
+ innerStreamReaders.shift(); // Remove the errored stream
66
+ terminate(); // we have errored, terminate all streams
67
+ }
68
+ };
69
+
70
+ return {
71
+ stream: new ReadableStream<T>({
72
+ start(controllerParam) {
73
+ controller = controllerParam;
74
+ },
75
+ pull: processPull,
76
+ async cancel() {
77
+ for (const reader of innerStreamReaders) {
78
+ await reader.cancel();
79
+ }
80
+ innerStreamReaders = [];
81
+ isClosed = true;
82
+ },
83
+ }),
84
+ addStream: (innerStream: ReadableStream<T>) => {
85
+ if (isClosed) {
86
+ throw new Error('Cannot add inner stream: outer stream is closed');
87
+ }
88
+
89
+ innerStreamReaders.push(innerStream.getReader());
90
+ waitForNewStream.resolve();
91
+ },
92
+
93
+ /**
94
+ * Gracefully close the outer stream. This will let the inner streams
95
+ * finish processing and then close the outer stream.
96
+ */
97
+ close: () => {
98
+ isClosed = true;
99
+ waitForNewStream.resolve();
100
+
101
+ if (innerStreamReaders.length === 0) {
102
+ controller?.close();
103
+ }
104
+ },
105
+
106
+ /**
107
+ * Immediately close the outer stream. This will cancel all inner streams
108
+ * and close the outer stream.
109
+ */
110
+ terminate,
111
+ };
112
+ }
@@ -0,0 +1,74 @@
1
+ import {
2
+ DownloadError,
3
+ readResponseWithSizeLimit,
4
+ DEFAULT_MAX_DOWNLOAD_SIZE,
5
+ validateDownloadUrl,
6
+ } from '@ai-sdk/provider-utils';
7
+ import {
8
+ withUserAgentSuffix,
9
+ getRuntimeEnvironmentUserAgent,
10
+ } from '@ai-sdk/provider-utils';
11
+ import { VERSION } from '../../version';
12
+
13
+ /**
14
+ * Download a file from a URL.
15
+ *
16
+ * @param url - The URL to download from.
17
+ * @param maxBytes - Maximum allowed download size in bytes. Defaults to 100 MiB.
18
+ * @param abortSignal - An optional abort signal to cancel the download.
19
+ * @returns The downloaded data and media type.
20
+ *
21
+ * @throws DownloadError if the download fails or exceeds maxBytes.
22
+ */
23
+ export const download = async ({
24
+ url,
25
+ maxBytes,
26
+ abortSignal,
27
+ }: {
28
+ url: URL;
29
+ maxBytes?: number;
30
+ abortSignal?: AbortSignal;
31
+ }) => {
32
+ const urlText = url.toString();
33
+ validateDownloadUrl(urlText);
34
+ try {
35
+ const response = await fetch(urlText, {
36
+ headers: withUserAgentSuffix(
37
+ {},
38
+ `ai-sdk/${VERSION}`,
39
+ getRuntimeEnvironmentUserAgent(),
40
+ ),
41
+ signal: abortSignal,
42
+ });
43
+
44
+ // Validate final URL after redirects to prevent SSRF via open redirect
45
+ if (response.redirected) {
46
+ validateDownloadUrl(response.url);
47
+ }
48
+
49
+ if (!response.ok) {
50
+ throw new DownloadError({
51
+ url: urlText,
52
+ statusCode: response.status,
53
+ statusText: response.statusText,
54
+ });
55
+ }
56
+
57
+ const data = await readResponseWithSizeLimit({
58
+ response,
59
+ url: urlText,
60
+ maxBytes: maxBytes ?? DEFAULT_MAX_DOWNLOAD_SIZE,
61
+ });
62
+
63
+ return {
64
+ data,
65
+ mediaType: response.headers.get('content-type') ?? undefined,
66
+ };
67
+ } catch (error) {
68
+ if (DownloadError.isInstance(error)) {
69
+ throw error;
70
+ }
71
+
72
+ throw new DownloadError({ url: urlText, cause: error });
73
+ }
74
+ };
@@ -0,0 +1 @@
1
+ export type ErrorHandler = (error: unknown) => void;
@@ -0,0 +1,401 @@
1
+ type State =
2
+ | 'ROOT'
3
+ | 'FINISH'
4
+ | 'INSIDE_STRING'
5
+ | 'INSIDE_STRING_ESCAPE'
6
+ | 'INSIDE_LITERAL'
7
+ | 'INSIDE_NUMBER'
8
+ | 'INSIDE_OBJECT_START'
9
+ | 'INSIDE_OBJECT_KEY'
10
+ | 'INSIDE_OBJECT_AFTER_KEY'
11
+ | 'INSIDE_OBJECT_BEFORE_VALUE'
12
+ | 'INSIDE_OBJECT_AFTER_VALUE'
13
+ | 'INSIDE_OBJECT_AFTER_COMMA'
14
+ | 'INSIDE_ARRAY_START'
15
+ | 'INSIDE_ARRAY_AFTER_VALUE'
16
+ | 'INSIDE_ARRAY_AFTER_COMMA';
17
+
18
+ // Implemented as a scanner with additional fixing
19
+ // that performs a single linear time scan pass over the partial JSON.
20
+ //
21
+ // The states should ideally match relevant states from the JSON spec:
22
+ // https://www.json.org/json-en.html
23
+ //
24
+ // Please note that invalid JSON is not considered/covered, because it
25
+ // is assumed that the resulting JSON will be processed by a standard
26
+ // JSON parser that will detect any invalid JSON.
27
+ export function fixJson(input: string): string {
28
+ const stack: State[] = ['ROOT'];
29
+ let lastValidIndex = -1;
30
+ let literalStart: number | null = null;
31
+
32
+ function processValueStart(char: string, i: number, swapState: State) {
33
+ {
34
+ switch (char) {
35
+ case '"': {
36
+ lastValidIndex = i;
37
+ stack.pop();
38
+ stack.push(swapState);
39
+ stack.push('INSIDE_STRING');
40
+ break;
41
+ }
42
+
43
+ case 'f':
44
+ case 't':
45
+ case 'n': {
46
+ lastValidIndex = i;
47
+ literalStart = i;
48
+ stack.pop();
49
+ stack.push(swapState);
50
+ stack.push('INSIDE_LITERAL');
51
+ break;
52
+ }
53
+
54
+ case '-': {
55
+ stack.pop();
56
+ stack.push(swapState);
57
+ stack.push('INSIDE_NUMBER');
58
+ break;
59
+ }
60
+ case '0':
61
+ case '1':
62
+ case '2':
63
+ case '3':
64
+ case '4':
65
+ case '5':
66
+ case '6':
67
+ case '7':
68
+ case '8':
69
+ case '9': {
70
+ lastValidIndex = i;
71
+ stack.pop();
72
+ stack.push(swapState);
73
+ stack.push('INSIDE_NUMBER');
74
+ break;
75
+ }
76
+
77
+ case '{': {
78
+ lastValidIndex = i;
79
+ stack.pop();
80
+ stack.push(swapState);
81
+ stack.push('INSIDE_OBJECT_START');
82
+ break;
83
+ }
84
+
85
+ case '[': {
86
+ lastValidIndex = i;
87
+ stack.pop();
88
+ stack.push(swapState);
89
+ stack.push('INSIDE_ARRAY_START');
90
+ break;
91
+ }
92
+ }
93
+ }
94
+ }
95
+
96
+ function processAfterObjectValue(char: string, i: number) {
97
+ switch (char) {
98
+ case ',': {
99
+ stack.pop();
100
+ stack.push('INSIDE_OBJECT_AFTER_COMMA');
101
+ break;
102
+ }
103
+ case '}': {
104
+ lastValidIndex = i;
105
+ stack.pop();
106
+ break;
107
+ }
108
+ }
109
+ }
110
+
111
+ function processAfterArrayValue(char: string, i: number) {
112
+ switch (char) {
113
+ case ',': {
114
+ stack.pop();
115
+ stack.push('INSIDE_ARRAY_AFTER_COMMA');
116
+ break;
117
+ }
118
+ case ']': {
119
+ lastValidIndex = i;
120
+ stack.pop();
121
+ break;
122
+ }
123
+ }
124
+ }
125
+
126
+ for (let i = 0; i < input.length; i++) {
127
+ const char = input[i];
128
+ const currentState = stack[stack.length - 1];
129
+
130
+ switch (currentState) {
131
+ case 'ROOT':
132
+ processValueStart(char, i, 'FINISH');
133
+ break;
134
+
135
+ case 'INSIDE_OBJECT_START': {
136
+ switch (char) {
137
+ case '"': {
138
+ stack.pop();
139
+ stack.push('INSIDE_OBJECT_KEY');
140
+ break;
141
+ }
142
+ case '}': {
143
+ lastValidIndex = i;
144
+ stack.pop();
145
+ break;
146
+ }
147
+ }
148
+ break;
149
+ }
150
+
151
+ case 'INSIDE_OBJECT_AFTER_COMMA': {
152
+ switch (char) {
153
+ case '"': {
154
+ stack.pop();
155
+ stack.push('INSIDE_OBJECT_KEY');
156
+ break;
157
+ }
158
+ }
159
+ break;
160
+ }
161
+
162
+ case 'INSIDE_OBJECT_KEY': {
163
+ switch (char) {
164
+ case '"': {
165
+ stack.pop();
166
+ stack.push('INSIDE_OBJECT_AFTER_KEY');
167
+ break;
168
+ }
169
+ }
170
+ break;
171
+ }
172
+
173
+ case 'INSIDE_OBJECT_AFTER_KEY': {
174
+ switch (char) {
175
+ case ':': {
176
+ stack.pop();
177
+ stack.push('INSIDE_OBJECT_BEFORE_VALUE');
178
+
179
+ break;
180
+ }
181
+ }
182
+ break;
183
+ }
184
+
185
+ case 'INSIDE_OBJECT_BEFORE_VALUE': {
186
+ processValueStart(char, i, 'INSIDE_OBJECT_AFTER_VALUE');
187
+ break;
188
+ }
189
+
190
+ case 'INSIDE_OBJECT_AFTER_VALUE': {
191
+ processAfterObjectValue(char, i);
192
+ break;
193
+ }
194
+
195
+ case 'INSIDE_STRING': {
196
+ switch (char) {
197
+ case '"': {
198
+ stack.pop();
199
+ lastValidIndex = i;
200
+ break;
201
+ }
202
+
203
+ case '\\': {
204
+ stack.push('INSIDE_STRING_ESCAPE');
205
+ break;
206
+ }
207
+
208
+ default: {
209
+ lastValidIndex = i;
210
+ }
211
+ }
212
+
213
+ break;
214
+ }
215
+
216
+ case 'INSIDE_ARRAY_START': {
217
+ switch (char) {
218
+ case ']': {
219
+ lastValidIndex = i;
220
+ stack.pop();
221
+ break;
222
+ }
223
+
224
+ default: {
225
+ lastValidIndex = i;
226
+ processValueStart(char, i, 'INSIDE_ARRAY_AFTER_VALUE');
227
+ break;
228
+ }
229
+ }
230
+ break;
231
+ }
232
+
233
+ case 'INSIDE_ARRAY_AFTER_VALUE': {
234
+ switch (char) {
235
+ case ',': {
236
+ stack.pop();
237
+ stack.push('INSIDE_ARRAY_AFTER_COMMA');
238
+ break;
239
+ }
240
+
241
+ case ']': {
242
+ lastValidIndex = i;
243
+ stack.pop();
244
+ break;
245
+ }
246
+
247
+ default: {
248
+ lastValidIndex = i;
249
+ break;
250
+ }
251
+ }
252
+
253
+ break;
254
+ }
255
+
256
+ case 'INSIDE_ARRAY_AFTER_COMMA': {
257
+ processValueStart(char, i, 'INSIDE_ARRAY_AFTER_VALUE');
258
+ break;
259
+ }
260
+
261
+ case 'INSIDE_STRING_ESCAPE': {
262
+ stack.pop();
263
+ lastValidIndex = i;
264
+
265
+ break;
266
+ }
267
+
268
+ case 'INSIDE_NUMBER': {
269
+ switch (char) {
270
+ case '0':
271
+ case '1':
272
+ case '2':
273
+ case '3':
274
+ case '4':
275
+ case '5':
276
+ case '6':
277
+ case '7':
278
+ case '8':
279
+ case '9': {
280
+ lastValidIndex = i;
281
+ break;
282
+ }
283
+
284
+ case 'e':
285
+ case 'E':
286
+ case '-':
287
+ case '.': {
288
+ break;
289
+ }
290
+
291
+ case ',': {
292
+ stack.pop();
293
+
294
+ if (stack[stack.length - 1] === 'INSIDE_ARRAY_AFTER_VALUE') {
295
+ processAfterArrayValue(char, i);
296
+ }
297
+
298
+ if (stack[stack.length - 1] === 'INSIDE_OBJECT_AFTER_VALUE') {
299
+ processAfterObjectValue(char, i);
300
+ }
301
+
302
+ break;
303
+ }
304
+
305
+ case '}': {
306
+ stack.pop();
307
+
308
+ if (stack[stack.length - 1] === 'INSIDE_OBJECT_AFTER_VALUE') {
309
+ processAfterObjectValue(char, i);
310
+ }
311
+
312
+ break;
313
+ }
314
+
315
+ case ']': {
316
+ stack.pop();
317
+
318
+ if (stack[stack.length - 1] === 'INSIDE_ARRAY_AFTER_VALUE') {
319
+ processAfterArrayValue(char, i);
320
+ }
321
+
322
+ break;
323
+ }
324
+
325
+ default: {
326
+ stack.pop();
327
+ break;
328
+ }
329
+ }
330
+
331
+ break;
332
+ }
333
+
334
+ case 'INSIDE_LITERAL': {
335
+ const partialLiteral = input.substring(literalStart!, i + 1);
336
+
337
+ if (
338
+ !'false'.startsWith(partialLiteral) &&
339
+ !'true'.startsWith(partialLiteral) &&
340
+ !'null'.startsWith(partialLiteral)
341
+ ) {
342
+ stack.pop();
343
+
344
+ if (stack[stack.length - 1] === 'INSIDE_OBJECT_AFTER_VALUE') {
345
+ processAfterObjectValue(char, i);
346
+ } else if (stack[stack.length - 1] === 'INSIDE_ARRAY_AFTER_VALUE') {
347
+ processAfterArrayValue(char, i);
348
+ }
349
+ } else {
350
+ lastValidIndex = i;
351
+ }
352
+
353
+ break;
354
+ }
355
+ }
356
+ }
357
+
358
+ let result = input.slice(0, lastValidIndex + 1);
359
+
360
+ for (let i = stack.length - 1; i >= 0; i--) {
361
+ const state = stack[i];
362
+
363
+ switch (state) {
364
+ case 'INSIDE_STRING': {
365
+ result += '"';
366
+ break;
367
+ }
368
+
369
+ case 'INSIDE_OBJECT_KEY':
370
+ case 'INSIDE_OBJECT_AFTER_KEY':
371
+ case 'INSIDE_OBJECT_AFTER_COMMA':
372
+ case 'INSIDE_OBJECT_START':
373
+ case 'INSIDE_OBJECT_BEFORE_VALUE':
374
+ case 'INSIDE_OBJECT_AFTER_VALUE': {
375
+ result += '}';
376
+ break;
377
+ }
378
+
379
+ case 'INSIDE_ARRAY_START':
380
+ case 'INSIDE_ARRAY_AFTER_COMMA':
381
+ case 'INSIDE_ARRAY_AFTER_VALUE': {
382
+ result += ']';
383
+ break;
384
+ }
385
+
386
+ case 'INSIDE_LITERAL': {
387
+ const partialLiteral = input.substring(literalStart!, input.length);
388
+
389
+ if ('true'.startsWith(partialLiteral)) {
390
+ result += 'true'.slice(partialLiteral.length);
391
+ } else if ('false'.startsWith(partialLiteral)) {
392
+ result += 'false'.slice(partialLiteral.length);
393
+ } else if ('null'.startsWith(partialLiteral)) {
394
+ result += 'null'.slice(partialLiteral.length);
395
+ }
396
+ }
397
+ }
398
+ }
399
+
400
+ return result;
401
+ }
@@ -0,0 +1,79 @@
1
+ /**
2
+ * Deeply merges two objects together.
3
+ * - Properties from the `overrides` object override those in the `base` object with the same key.
4
+ * - For nested objects, the merge is performed recursively (deep merge).
5
+ * - Arrays are replaced, not merged.
6
+ * - Primitive values are replaced.
7
+ * - If both `base` and `overrides` are undefined, returns undefined.
8
+ * - If one of `base` or `overrides` is undefined, returns the other.
9
+ *
10
+ * @param base The target object to merge into
11
+ * @param overrides The source object to merge from
12
+ * @returns A new object with the merged properties, or undefined if both inputs are undefined
13
+ */
14
+ export function mergeObjects<T extends object, U extends object>(
15
+ base: T | undefined,
16
+ overrides: U | undefined,
17
+ ): (T & U) | T | U | undefined {
18
+ // If both inputs are undefined, return undefined
19
+ if (base === undefined && overrides === undefined) {
20
+ return undefined;
21
+ }
22
+
23
+ // If target is undefined, return source
24
+ if (base === undefined) {
25
+ return overrides;
26
+ }
27
+
28
+ // If source is undefined, return target
29
+ if (overrides === undefined) {
30
+ return base;
31
+ }
32
+
33
+ // Create a new object to avoid mutating the inputs
34
+ const result = { ...base } as T & U;
35
+
36
+ // Iterate through all keys in the source object
37
+ for (const key in overrides) {
38
+ if (Object.prototype.hasOwnProperty.call(overrides, key)) {
39
+ const overridesValue = overrides[key];
40
+
41
+ // Skip if the overrides value is undefined
42
+ if (overridesValue === undefined) continue;
43
+
44
+ // Get the base value if it exists
45
+ const baseValue =
46
+ key in base ? base[key as unknown as keyof T] : undefined;
47
+
48
+ // Check if both values are objects that can be deeply merged
49
+ const isSourceObject =
50
+ overridesValue !== null &&
51
+ typeof overridesValue === 'object' &&
52
+ !Array.isArray(overridesValue) &&
53
+ !(overridesValue instanceof Date) &&
54
+ !(overridesValue instanceof RegExp);
55
+
56
+ const isTargetObject =
57
+ baseValue !== null &&
58
+ baseValue !== undefined &&
59
+ typeof baseValue === 'object' &&
60
+ !Array.isArray(baseValue) &&
61
+ !(baseValue instanceof Date) &&
62
+ !(baseValue instanceof RegExp);
63
+
64
+ // If both values are mergeable objects, merge them recursively
65
+ if (isSourceObject && isTargetObject) {
66
+ result[key as keyof (T & U)] = mergeObjects(
67
+ baseValue as object,
68
+ overridesValue as object,
69
+ ) as any;
70
+ } else {
71
+ // For primitives, arrays, or when one value is not a mergeable object,
72
+ // simply override with the source value
73
+ result[key as keyof (T & U)] = overridesValue as any;
74
+ }
75
+ }
76
+ }
77
+
78
+ return result;
79
+ }
@@ -0,0 +1 @@
1
+ be0642f7cb8900282a43b53cd50cf00a05161ed6
@@ -0,0 +1,18 @@
1
+ # python-lib reference subset
2
+
3
+ Subset of [github.com/pandas-dev/pandas](https://github.com/pandas-dev/pandas) at commit
4
+ `be0642f7cb8900282a43b53cd50cf00a05161ed6`, included for benchmark reproducibility.
5
+
6
+ 30 Python source files sampled from `pandas/core/` covering:
7
+ accessor helpers, array algorithms, array types (boolean, floating, integer,
8
+ numeric, period, masked, numpy, arrow), numba kernels, and sparse array support.
9
+
10
+ No test files are included. Files under `tests/` were excluded.
11
+
12
+ ## License notice
13
+
14
+ The files in `pandas/` are copyright the pandas development team and contributors,
15
+ licensed under the BSD 3-Clause License. See
16
+ https://github.com/pandas-dev/pandas/blob/main/LICENSE for the full text.
17
+ These files are included here solely for benchmark reproducibility under the
18
+ BSD 3-Clause License terms.