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.
- package/.agents/plugins/marketplace.json +20 -0
- package/.claude-plugin/marketplace.json +39 -0
- package/.claude-plugin/plugin.json +36 -0
- package/.codex/agents/README.md +9 -0
- package/.codex/agents/ashlr-explorer.md +36 -0
- package/.codex/agents/ashlr-worker.md +38 -0
- package/.codex-plugin/plugin.json +45 -0
- package/.mcp.json +14 -0
- package/LICENSE +21 -0
- package/README.md +311 -0
- package/agents/ashlr-code.md +69 -0
- package/agents/ashlr-explore.md +44 -0
- package/agents/ashlr-plan.md +54 -0
- package/bench/fixtures/notebook-large.ipynb +660 -0
- package/bench/fixtures/notebook-small.ipynb +39 -0
- package/bench/fixtures/tasklist-closed.json +62 -0
- package/bench/fixtures/tasklist-large-mixed.json +27 -0
- package/bench/fixtures/tasklist-sprint-open.json +79 -0
- package/bench/fixtures/websearch-bun-runtime.json +32 -0
- package/bench/fixtures/websearch-react-hooks-patterns.json +32 -0
- package/bench/fixtures/websearch-typescript-generics.json +38 -0
- package/bench/refs/node-sdk/.refrev +1 -0
- package/bench/refs/node-sdk/README.md +17 -0
- package/bench/refs/node-sdk/src/agent/agent.ts +163 -0
- package/bench/refs/node-sdk/src/agent/create-agent-ui-stream.ts +83 -0
- package/bench/refs/node-sdk/src/agent/tool-loop-agent.ts +238 -0
- package/bench/refs/node-sdk/src/embed/embed-many.ts +409 -0
- package/bench/refs/node-sdk/src/embed/embed-result.ts +50 -0
- package/bench/refs/node-sdk/src/embed/embed.ts +257 -0
- package/bench/refs/node-sdk/src/error/invalid-argument-error.ts +34 -0
- package/bench/refs/node-sdk/src/error/invalid-tool-input-error.ts +33 -0
- package/bench/refs/node-sdk/src/error/no-object-generated-error.ts +70 -0
- package/bench/refs/node-sdk/src/generate-image/generate-image-result.ts +42 -0
- package/bench/refs/node-sdk/src/generate-image/generate-image.ts +362 -0
- package/bench/refs/node-sdk/src/generate-object/generate-object-result.ts +67 -0
- package/bench/refs/node-sdk/src/generate-object/generate-object.ts +501 -0
- package/bench/refs/node-sdk/src/generate-object/inject-json-instruction.ts +30 -0
- package/bench/refs/node-sdk/src/generate-object/output-strategy.ts +415 -0
- package/bench/refs/node-sdk/src/generate-object/repair-text.ts +12 -0
- package/bench/refs/node-sdk/src/generate-object/stream-object.ts +960 -0
- package/bench/refs/node-sdk/src/generate-speech/generate-speech.ts +191 -0
- package/bench/refs/node-sdk/src/generate-text/generate-text.ts +1484 -0
- package/bench/refs/node-sdk/src/generate-text/stream-text.ts +2708 -0
- package/bench/refs/node-sdk/src/generate-text/tool-call.ts +59 -0
- package/bench/refs/node-sdk/src/generate-text/tool-result.ts +36 -0
- package/bench/refs/node-sdk/src/telemetry/create-telemetry-dispatcher.ts +146 -0
- package/bench/refs/node-sdk/src/telemetry/telemetry-registry.ts +15 -0
- package/bench/refs/node-sdk/src/telemetry/telemetry.ts +223 -0
- package/bench/refs/node-sdk/src/util/async-iterable-stream.ts +94 -0
- package/bench/refs/node-sdk/src/util/consume-stream.ts +31 -0
- package/bench/refs/node-sdk/src/util/create-stitchable-stream.ts +112 -0
- package/bench/refs/node-sdk/src/util/download/download.ts +74 -0
- package/bench/refs/node-sdk/src/util/error-handler.ts +1 -0
- package/bench/refs/node-sdk/src/util/fix-json.ts +401 -0
- package/bench/refs/node-sdk/src/util/merge-objects.ts +79 -0
- package/bench/refs/python-lib/.refrev +1 -0
- package/bench/refs/python-lib/README.md +18 -0
- package/bench/refs/python-lib/pandas/core/_numba/executor.py +249 -0
- package/bench/refs/python-lib/pandas/core/_numba/extensions.py +586 -0
- package/bench/refs/python-lib/pandas/core/_numba/kernels/mean_.py +198 -0
- package/bench/refs/python-lib/pandas/core/_numba/kernels/min_max_.py +178 -0
- package/bench/refs/python-lib/pandas/core/_numba/kernels/sum_.py +255 -0
- package/bench/refs/python-lib/pandas/core/_numba/kernels/var_.py +251 -0
- package/bench/refs/python-lib/pandas/core/accessor.py +520 -0
- package/bench/refs/python-lib/pandas/core/api.py +138 -0
- package/bench/refs/python-lib/pandas/core/array_algos/masked_accumulations.py +97 -0
- package/bench/refs/python-lib/pandas/core/array_algos/masked_reductions.py +252 -0
- package/bench/refs/python-lib/pandas/core/array_algos/putmask.py +150 -0
- package/bench/refs/python-lib/pandas/core/array_algos/quantile.py +232 -0
- package/bench/refs/python-lib/pandas/core/array_algos/replace.py +159 -0
- package/bench/refs/python-lib/pandas/core/array_algos/take.py +609 -0
- package/bench/refs/python-lib/pandas/core/arraylike.py +534 -0
- package/bench/refs/python-lib/pandas/core/arrays/_arrow_string_mixins.py +434 -0
- package/bench/refs/python-lib/pandas/core/arrays/_mixins.py +630 -0
- package/bench/refs/python-lib/pandas/core/arrays/_ranges.py +276 -0
- package/bench/refs/python-lib/pandas/core/arrays/_utils.py +77 -0
- package/bench/refs/python-lib/pandas/core/arrays/arrow/accessors.py +521 -0
- package/bench/refs/python-lib/pandas/core/arrays/arrow/extension_types.py +174 -0
- package/bench/refs/python-lib/pandas/core/arrays/boolean.py +454 -0
- package/bench/refs/python-lib/pandas/core/arrays/floating.py +192 -0
- package/bench/refs/python-lib/pandas/core/arrays/integer.py +296 -0
- package/bench/refs/python-lib/pandas/core/arrays/masked.py +2140 -0
- package/bench/refs/python-lib/pandas/core/arrays/numeric.py +305 -0
- package/bench/refs/python-lib/pandas/core/arrays/numpy_.py +701 -0
- package/bench/refs/python-lib/pandas/core/arrays/period.py +1586 -0
- package/bench/refs/python-lib/pandas/core/arrays/sparse/accessor.py +505 -0
- package/bench/refs/python-lib/pandas/core/arrays/sparse/scipy_sparse.py +208 -0
- package/bench/refs/rust-project/.refrev +1 -0
- package/bench/refs/rust-project/README.md +17 -0
- package/bench/refs/rust-project/tokio/src/doc/os.rs +68 -0
- package/bench/refs/rust-project/tokio/src/fs/dir_builder.rs +129 -0
- package/bench/refs/rust-project/tokio/src/fs/file.rs +1113 -0
- package/bench/refs/rust-project/tokio/src/fs/mocks.rs +176 -0
- package/bench/refs/rust-project/tokio/src/fs/mod.rs +324 -0
- package/bench/refs/rust-project/tokio/src/fs/open_options.rs +856 -0
- package/bench/refs/rust-project/tokio/src/fs/read.rs +80 -0
- package/bench/refs/rust-project/tokio/src/fs/read_dir.rs +357 -0
- package/bench/refs/rust-project/tokio/src/fs/write.rs +99 -0
- package/bench/refs/rust-project/tokio/src/future/maybe_done.rs +123 -0
- package/bench/refs/rust-project/tokio/src/future/try_join.rs +82 -0
- package/bench/refs/rust-project/tokio/src/io/async_buf_read.rs +117 -0
- package/bench/refs/rust-project/tokio/src/io/async_read.rs +133 -0
- package/bench/refs/rust-project/tokio/src/io/async_seek.rs +96 -0
- package/bench/refs/rust-project/tokio/src/io/async_write.rs +402 -0
- package/bench/refs/rust-project/tokio/src/io/blocking.rs +339 -0
- package/bench/refs/rust-project/tokio/src/io/interest.rs +345 -0
- package/bench/refs/rust-project/tokio/src/io/join.rs +130 -0
- package/bench/refs/rust-project/tokio/src/io/mod.rs +308 -0
- package/bench/refs/rust-project/tokio/src/io/poll_evented.rs +319 -0
- package/bench/refs/rust-project/tokio/src/io/read_buf.rs +344 -0
- package/bench/refs/rust-project/tokio/src/io/ready.rs +322 -0
- package/bench/refs/rust-project/tokio/src/io/split.rs +166 -0
- package/bench/refs/rust-project/tokio/src/io/stderr.rs +148 -0
- package/bench/refs/rust-project/tokio/src/io/stdin.rs +98 -0
- package/bench/refs/rust-project/tokio/src/io/stdio_common.rs +222 -0
- package/bench/refs/rust-project/tokio/src/io/stdout.rs +197 -0
- package/bench/refs/rust-project/tokio/src/io/util/buf_reader.rs +311 -0
- package/bench/refs/rust-project/tokio/src/io/util/buf_stream.rs +207 -0
- package/bench/refs/rust-project/tokio/src/io/util/buf_writer.rs +310 -0
- package/bench/refs/rust-project/tokio/src/io/util/chain.rs +144 -0
- package/commands/_spawn-patterns.json +32 -0
- package/commands/ashlr-allow.md +21 -0
- package/commands/ashlr-benchmark.md +53 -0
- package/commands/ashlr-brief.md +97 -0
- package/commands/ashlr-budget.md +76 -0
- package/commands/ashlr-compact.md +54 -0
- package/commands/ashlr-dashboard.md +37 -0
- package/commands/ashlr-doctor.md +56 -0
- package/commands/ashlr-eco-mode.md +92 -0
- package/commands/ashlr-genome-init.md +24 -0
- package/commands/ashlr-genome-keygen.md +36 -0
- package/commands/ashlr-genome-loop.md +118 -0
- package/commands/ashlr-genome-push.md +36 -0
- package/commands/ashlr-genome-rewrap.md +48 -0
- package/commands/ashlr-genome-team-init.md +67 -0
- package/commands/ashlr-handoff.md +23 -0
- package/commands/ashlr-help.md +86 -0
- package/commands/ashlr-hook-timings.md +30 -0
- package/commands/ashlr-leaderboard.md +50 -0
- package/commands/ashlr-ollama-setup.md +39 -0
- package/commands/ashlr-orchestrate-status.md +72 -0
- package/commands/ashlr-orchestrate.md +83 -0
- package/commands/ashlr-parallelize.md +63 -0
- package/commands/ashlr-report-crash.md +33 -0
- package/commands/ashlr-resume.md +72 -0
- package/commands/ashlr-savings.md +24 -0
- package/commands/ashlr-settings.md +50 -0
- package/commands/ashlr-spawn.md +61 -0
- package/commands/ashlr-start.md +60 -0
- package/commands/ashlr-status.md +64 -0
- package/commands/ashlr-team-invite.md +47 -0
- package/commands/ashlr-tier.md +122 -0
- package/commands/ashlr-tour.md +60 -0
- package/commands/ashlr-update.md +155 -0
- package/commands/ashlr-upgrade.md +96 -0
- package/commands/goal.md +58 -0
- package/commands/loop.md +40 -0
- package/docs/CNAME +1 -0
- package/docs/PRO_TIER.md +104 -0
- package/docs/README.md +21 -0
- package/docs/architecture.md +415 -0
- package/docs/ashlr-pipe.md +161 -0
- package/docs/assets/logo.svg +19 -0
- package/docs/assets/og.png +0 -0
- package/docs/assets/og.svg +41 -0
- package/docs/benchmarks-v2.json +355 -0
- package/docs/benchmarks.json +102 -0
- package/docs/benchmarks.md +211 -0
- package/docs/billing.md +185 -0
- package/docs/cloud-genome.md +155 -0
- package/docs/competitive-wozcode.md +92 -0
- package/docs/deploy.md +325 -0
- package/docs/email-templates.md +113 -0
- package/docs/embed-tuning.md +103 -0
- package/docs/genome.md +120 -0
- package/docs/github-oauth-onboarding.md +127 -0
- package/docs/hero-video-script.md +129 -0
- package/docs/index.html +2262 -0
- package/docs/install-prompt.md +78 -0
- package/docs/install-windows.md +132 -0
- package/docs/install.ps1 +171 -0
- package/docs/install.sh +146 -0
- package/docs/launch/README.md +114 -0
- package/docs/launch/hn.md +49 -0
- package/docs/launch/reddit.md +45 -0
- package/docs/launch/x.md +65 -0
- package/docs/launch-post.md +112 -0
- package/docs/legal.md +78 -0
- package/docs/llm-providers.md +99 -0
- package/docs/multi-host-mcp.md +217 -0
- package/docs/multi-turn-architecture.md +108 -0
- package/docs/operations/deployment.md +108 -0
- package/docs/operations/error-monitoring.md +70 -0
- package/docs/operations/weekly-digest.md +70 -0
- package/docs/operations.md +494 -0
- package/docs/platform-support.md +133 -0
- package/docs/policy-packs.md +188 -0
- package/docs/press-kit/fact-sheet.md +78 -0
- package/docs/press-kit/founder-bio.md +3 -0
- package/docs/press-kit/logo.svg +33 -0
- package/docs/press-kit/screenshots.md +146 -0
- package/docs/pricing.md +251 -0
- package/docs/pro-backend-architecture.md +523 -0
- package/docs/producthunt.md +52 -0
- package/docs/router-migration.md +110 -0
- package/docs/session-log-schema.md +68 -0
- package/docs/social.md +95 -0
- package/docs/team-genome.md +528 -0
- package/docs/telemetry.md +194 -0
- package/docs/test-isolation.md +100 -0
- package/docs/upgrade.md +159 -0
- package/hooks/_hook-errors.ts +87 -0
- package/hooks/_hook-perf-emit.ts +113 -0
- package/hooks/_hook-timing-ledger.ts +1133 -0
- package/hooks/_nudge-throttle.ts +127 -0
- package/hooks/_recent-blocks.ts +127 -0
- package/hooks/audit-upload.ts +86 -0
- package/hooks/codex-hooks.json +171 -0
- package/hooks/commit-attribution.ts +179 -0
- package/hooks/edit-batching-nudge.ts +154 -0
- package/hooks/genome-scribe-hook.ts +219 -0
- package/hooks/hooks.json +294 -0
- package/hooks/orient-nudge-hook.ts +242 -0
- package/hooks/policy-enforce.ts +214 -0
- package/hooks/post-tool-use-embedding.ts +93 -0
- package/hooks/post-tool-use-genome.sh +37 -0
- package/hooks/post-tool-use-genome.ts +69 -0
- package/hooks/posttooluse-correlate.ts +122 -0
- package/hooks/posttooluse-dedupe-output.ts +241 -0
- package/hooks/posttooluse-genome-refresh.ts +223 -0
- package/hooks/posttooluse-native-nudge.ts +205 -0
- package/hooks/posttooluse-stale-result.ts +277 -0
- package/hooks/pretooluse-bash.ts +63 -0
- package/hooks/pretooluse-budget-guard.ts +318 -0
- package/hooks/pretooluse-common.ts +985 -0
- package/hooks/pretooluse-eco-router.ts +196 -0
- package/hooks/pretooluse-edit.sh +93 -0
- package/hooks/pretooluse-edit.ts +197 -0
- package/hooks/pretooluse-glob.ts +70 -0
- package/hooks/pretooluse-grep.sh +85 -0
- package/hooks/pretooluse-grep.ts +96 -0
- package/hooks/pretooluse-notebookedit.ts +121 -0
- package/hooks/pretooluse-read.sh +118 -0
- package/hooks/pretooluse-read.ts +118 -0
- package/hooks/pretooluse-task.ts +130 -0
- package/hooks/pretooluse-webfetch.ts +66 -0
- package/hooks/pretooluse-websearch.ts +85 -0
- package/hooks/pretooluse-write.ts +128 -0
- package/hooks/pulse-emit.ts +197 -0
- package/hooks/session-end-consolidate.sh +35 -0
- package/hooks/session-end-consolidate.ts +188 -0
- package/hooks/session-end-stats-gc.ts +80 -0
- package/hooks/session-log-append.sh +94 -0
- package/hooks/session-log-append.ts +116 -0
- package/hooks/session-start.ts +993 -0
- package/hooks/sessionend-hook-health-nudge.ts +451 -0
- package/hooks/sessionend-savings-nudge.ts +318 -0
- package/hooks/sessionend-status-line-nudge.ts +296 -0
- package/hooks/sessionstart-brief.ts +140 -0
- package/hooks/sessionstart-cost-refactor.ts +95 -0
- package/hooks/sessionstart-efficient.ts +110 -0
- package/hooks/sessionstart-genome-author.ts +93 -0
- package/hooks/sessionstart-lean-tools.ts +98 -0
- package/hooks/sessionstart-search.ts +97 -0
- package/hooks/stop-accounting.ts +152 -0
- package/hooks/subagent-stop-rollup.ts +162 -0
- package/hooks/userpromptsubmit-brief-trigger.ts +156 -0
- package/package.json +56 -0
- package/ports/README.md +108 -0
- package/ports/cursor/mcp.json +11 -0
- package/ports/goose/recipe.yaml +26 -0
- package/scripts/ashlr-mcp.ts +40 -0
- package/scripts/auto-update.ts +177 -0
- package/scripts/baseline-scan.ts +831 -0
- package/scripts/bench-orchestrate.ts +377 -0
- package/scripts/benchmark-refs.ts +292 -0
- package/scripts/bootstrap.mjs +100 -0
- package/scripts/brief-eval.ts +234 -0
- package/scripts/bump-version.ts +82 -0
- package/scripts/bun-resolve.d.mts +11 -0
- package/scripts/bun-resolve.mjs +59 -0
- package/scripts/calibrate-grep.ts +467 -0
- package/scripts/capture-grep-workload.ts +260 -0
- package/scripts/check-tier.ts +61 -0
- package/scripts/check-version-sync.ts +97 -0
- package/scripts/cli-orchestrate-status.ts +386 -0
- package/scripts/cli-orchestrate.ts +303 -0
- package/scripts/cli.ts +478 -0
- package/scripts/cloud-smoke-test.ts +313 -0
- package/scripts/coach-report.ts +373 -0
- package/scripts/context-db-migrate.ts +137 -0
- package/scripts/context-status.ts +43 -0
- package/scripts/demo-run.ts +255 -0
- package/scripts/deploy-smoke.sh +140 -0
- package/scripts/doctor.ts +992 -0
- package/scripts/embed-file-worker.ts +104 -0
- package/scripts/embed-tune.ts +308 -0
- package/scripts/errors-report.ts +428 -0
- package/scripts/find-test-leak.ts +69 -0
- package/scripts/generate-badge.ts +357 -0
- package/scripts/genome-auto-consolidate.ts +533 -0
- package/scripts/genome-auto-propose.ts +578 -0
- package/scripts/genome-cloud-pull.ts +363 -0
- package/scripts/genome-cloud-push.ts +382 -0
- package/scripts/genome-cloud-sync.ts +587 -0
- package/scripts/genome-commit-watcher.ts +295 -0
- package/scripts/genome-init.ts +986 -0
- package/scripts/genome-key.ts +233 -0
- package/scripts/genome-keygen.ts +168 -0
- package/scripts/genome-link.ts +59 -0
- package/scripts/genome-refresh-worker.ts +364 -0
- package/scripts/genome-rewrap.ts +90 -0
- package/scripts/genome-synthesizer.ts +679 -0
- package/scripts/genome-team-init.ts +312 -0
- package/scripts/handoff-pack.ts +438 -0
- package/scripts/hook-bootstrap.mjs +75 -0
- package/scripts/hook-timing-reader.ts +371 -0
- package/scripts/hook-timings-report.ts +554 -0
- package/scripts/install-genome-hooks.ts +196 -0
- package/scripts/install-onnx-model.ts +154 -0
- package/scripts/install-permissions.ts +276 -0
- package/scripts/install-status-line.ts +150 -0
- package/scripts/mcp-entrypoint.sh +78 -0
- package/scripts/mcp-entrypoint.ts +130 -0
- package/scripts/mdx-angle-bracket-lint.ts +152 -0
- package/scripts/measure-cold-start.ts +126 -0
- package/scripts/migrate-stats-to-sqlite.ts +86 -0
- package/scripts/ollama-setup.ts +498 -0
- package/scripts/onboarding-wizard.ts +1691 -0
- package/scripts/orchestrate-emit-telemetry.ts +177 -0
- package/scripts/orchestrate-expand.ts +517 -0
- package/scripts/orchestrate-run.ts +744 -0
- package/scripts/print-legend.ts +50 -0
- package/scripts/product-metadata.ts +38 -0
- package/scripts/prune-old-memories.ts +208 -0
- package/scripts/publish.sh +88 -0
- package/scripts/read-calibration.ts +122 -0
- package/scripts/report-crash.ts +226 -0
- package/scripts/run-benchmark.ts +750 -0
- package/scripts/run-root-tests.ts +28 -0
- package/scripts/savings-dashboard.ts +1258 -0
- package/scripts/savings-report-extras.ts +447 -0
- package/scripts/savings-status-line.ts +873 -0
- package/scripts/session-event-emit.ts +266 -0
- package/scripts/session-greet.ts +686 -0
- package/scripts/session-log-report.ts +551 -0
- package/scripts/session-resume.ts +614 -0
- package/scripts/set-hook-mode.ts +83 -0
- package/scripts/smoke-cross-platform.ts +117 -0
- package/scripts/smoke-realtime.ts +257 -0
- package/scripts/smoke-tools.ts +21 -0
- package/scripts/stats-cloud-pull.ts +213 -0
- package/scripts/stats-cloud-sync.ts +261 -0
- package/scripts/telemetry-flush.ts +160 -0
- package/scripts/telemetry-status.ts +266 -0
- package/scripts/timing-budget.ts +35 -0
- package/scripts/ui-animation.ts +120 -0
- package/scripts/ui.ts +431 -0
- package/scripts/upgrade-flow.ts +775 -0
- package/scripts/weekly-digest.ts +394 -0
- package/servers/_accounting.ts +78 -0
- package/servers/_ask-router.ts +84 -0
- package/servers/_ast-chunker.ts +434 -0
- package/servers/_ast-helpers.ts +183 -0
- package/servers/_ast-languages.ts +153 -0
- package/servers/_ast-refactor/_shared.ts +221 -0
- package/servers/_ast-refactor/cross-file-rename.ts +560 -0
- package/servers/_ast-refactor/extract-function.ts +357 -0
- package/servers/_ast-refactor/file-local-rename.ts +172 -0
- package/servers/_ast-refactor.ts +41 -0
- package/servers/_ast-skeleton.ts +107 -0
- package/servers/_bash-summarizers-registry.ts +1096 -0
- package/servers/_crash-dump.ts +210 -0
- package/servers/_cwd-clamp.ts +342 -0
- package/servers/_edit-log.ts +28 -0
- package/servers/_edit-match.ts +236 -0
- package/servers/_edit-validate.ts +196 -0
- package/servers/_embed-calibration.ts +123 -0
- package/servers/_embedding-cache.ts +401 -0
- package/servers/_embedding-model.ts +329 -0
- package/servers/_events.ts +113 -0
- package/servers/_genome-cache.ts +154 -0
- package/servers/_genome-commits.ts +172 -0
- package/servers/_genome-crypto-v2.ts +242 -0
- package/servers/_genome-crypto.ts +259 -0
- package/servers/_genome-discoveries.ts +140 -0
- package/servers/_genome-embed-populator.ts +216 -0
- package/servers/_genome-freshness.ts +134 -0
- package/servers/_genome-issues.ts +171 -0
- package/servers/_genome-live.ts +263 -0
- package/servers/_genome-prs.ts +188 -0
- package/servers/_genome-search.ts +479 -0
- package/servers/_genome-sync.ts +297 -0
- package/servers/_history-tracker.ts +279 -0
- package/servers/_http-helpers.ts +151 -0
- package/servers/_identity-hash.ts +151 -0
- package/servers/_llm-providers/anthropic.ts +132 -0
- package/servers/_llm-providers/cloud.ts +195 -0
- package/servers/_llm-providers/index.ts +350 -0
- package/servers/_llm-providers/local.ts +127 -0
- package/servers/_llm-providers/onnx.ts +393 -0
- package/servers/_llm-providers/types.ts +27 -0
- package/servers/_manifest-v2.ts +447 -0
- package/servers/_mcp-host.ts +93 -0
- package/servers/_nudge-events.ts +451 -0
- package/servers/_orchestrate-executor.ts +316 -0
- package/servers/_prefetch.ts +435 -0
- package/servers/_pricing.ts +256 -0
- package/servers/_pro.ts +381 -0
- package/servers/_read-cache.ts +44 -0
- package/servers/_router-handlers.ts +46 -0
- package/servers/_router.ts +55 -0
- package/servers/_run-with-timeout.ts +173 -0
- package/servers/_savings-render.ts +214 -0
- package/servers/_stats-sqlite.ts +640 -0
- package/servers/_stats.ts +1183 -0
- package/servers/_status-line-cells.ts +469 -0
- package/servers/_streaks.ts +162 -0
- package/servers/_summarize.ts +208 -0
- package/servers/_task-graph-render.ts +217 -0
- package/servers/_task-graph.ts +545 -0
- package/servers/_telemetry.ts +719 -0
- package/servers/_test-parsers.ts +530 -0
- package/servers/_test-watch.ts +626 -0
- package/servers/_text-helpers.ts +37 -0
- package/servers/_token-measure.ts +160 -0
- package/servers/_tool-base.ts +248 -0
- package/servers/_weekly-digest.ts +391 -0
- package/servers/ask-server-handlers.ts +49 -0
- package/servers/ask-server.ts +174 -0
- package/servers/bash-server-handlers.ts +138 -0
- package/servers/bash-server.ts +1136 -0
- package/servers/bench.ts +186 -0
- package/servers/diff-semantic-server-handlers.ts +39 -0
- package/servers/diff-semantic-server.ts +566 -0
- package/servers/diff-server-handlers.ts +317 -0
- package/servers/diff-server.ts +20 -0
- package/servers/edit-server-handlers.ts +31 -0
- package/servers/edit-server.ts +209 -0
- package/servers/edit-structural-server-handlers.ts +322 -0
- package/servers/efficiency-server-handlers.ts +161 -0
- package/servers/efficiency-server.ts +1135 -0
- package/servers/flush-server-handlers.ts +21 -0
- package/servers/flush-server.ts +19 -0
- package/servers/genome-server-handlers.ts +118 -0
- package/servers/genome-server.ts +397 -0
- package/servers/github-server-handlers.ts +187 -0
- package/servers/github-server.ts +856 -0
- package/servers/glob-server-handlers.ts +233 -0
- package/servers/glob-server.ts +20 -0
- package/servers/grep-server-handlers.ts +61 -0
- package/servers/grep-server.ts +564 -0
- package/servers/http-server-handlers.ts +36 -0
- package/servers/http-server.ts +149 -0
- package/servers/logs-server-handlers.ts +42 -0
- package/servers/logs-server.ts +359 -0
- package/servers/ls-server-handlers.ts +166 -0
- package/servers/ls-server.ts +20 -0
- package/servers/multi-edit-server-handlers.ts +51 -0
- package/servers/multi-edit-server.ts +422 -0
- package/servers/notebook-edit-server-handlers.ts +34 -0
- package/servers/notebook-edit-server.ts +181 -0
- package/servers/orient-server-handlers.ts +52 -0
- package/servers/orient-server.ts +436 -0
- package/servers/pipe-server-handlers.ts +68 -0
- package/servers/pipe-server.ts +300 -0
- package/servers/read-server-handlers.ts +42 -0
- package/servers/read-server.ts +206 -0
- package/servers/rename-file-server-handlers.ts +67 -0
- package/servers/rename-file-server.ts +699 -0
- package/servers/savings-server-handlers.ts +27 -0
- package/servers/savings-server.ts +54 -0
- package/servers/search-replace-regex-server-handlers.ts +96 -0
- package/servers/search-replace-regex-server.ts +751 -0
- package/servers/sql-server-handlers.ts +58 -0
- package/servers/sql-server.ts +505 -0
- package/servers/task-server-handlers.ts +358 -0
- package/servers/task-server.ts +24 -0
- package/servers/test-server-handlers.ts +351 -0
- package/servers/test-server.ts +20 -0
- package/servers/tree-server-handlers.ts +503 -0
- package/servers/tree-server.ts +20 -0
- package/servers/webfetch-server-handlers.ts +166 -0
- package/servers/webfetch-server.ts +20 -0
- package/servers/websearch-server-handlers.ts +215 -0
- package/servers/websearch-server.ts +19 -0
- package/servers/write-server-handlers.ts +27 -0
- package/servers/write-server.ts +97 -0
- package/skills/ashlr-brief/SKILL.md +80 -0
- package/skills/ashlr-codex-doctor/SKILL.md +21 -0
- package/skills/ashlr-codex-efficient-tools/SKILL.md +17 -0
- package/skills/ashlr-codex-genome-refresh/SKILL.md +20 -0
- package/skills/ashlr-codex-parallel-explore/SKILL.md +20 -0
- package/skills/ashlr-codex-savings/SKILL.md +17 -0
- package/skills/ashlr-cost-refactor/SKILL.md +50 -0
- package/skills/ashlr-efficient/SKILL.md +64 -0
- package/skills/ashlr-genome-author/SKILL.md +43 -0
- package/skills/ashlr-lean-tools/SKILL.md +43 -0
- package/skills/ashlr-search/SKILL.md +46 -0
|
@@ -0,0 +1,161 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: ashlr-pipe
|
|
3
|
+
description: Run a multi-step JS expression that calls grep/read/bash/ls/glob internally — intermediate results never enter context, only the return value does.
|
|
4
|
+
---
|
|
5
|
+
|
|
6
|
+
## Overview
|
|
7
|
+
|
|
8
|
+
`ashlr__pipe` lets you run a JavaScript async expression that orchestrates multiple ashlr tool calls in a single round-trip. Intermediate results (grep output, file contents, bash stdout) are computed server-side and **never sent to the model context** — only the expression's final return value does. Typical savings: **80–95%** vs calling the same tools individually.
|
|
9
|
+
|
|
10
|
+
### When to use it
|
|
11
|
+
|
|
12
|
+
- You need to grep for a pattern, then filter/transform the results
|
|
13
|
+
- You need to read several files and extract one fact from each
|
|
14
|
+
- You need to bash-query something and do arithmetic on the result
|
|
15
|
+
- Any pipeline where you'd otherwise burn context on large intermediate strings
|
|
16
|
+
|
|
17
|
+
---
|
|
18
|
+
|
|
19
|
+
## Security model & status
|
|
20
|
+
|
|
21
|
+
**Status: EXPERIMENTAL.** `ashlr__pipe` executes model-authored JavaScript code server-side. It is **off by default** in all releases.
|
|
22
|
+
|
|
23
|
+
### Flags
|
|
24
|
+
|
|
25
|
+
| Flag | Effect |
|
|
26
|
+
|---|---|
|
|
27
|
+
| `ASHLR_PIPE_ENABLE=1` | Registers the tool. Required to use `ashlr__pipe` at all. |
|
|
28
|
+
| `ASHLR_PIPE_ALLOW_BASH=1` | Adds `ctx.bash` to the expression context. Requires `ASHLR_PIPE_ENABLE=1`. |
|
|
29
|
+
|
|
30
|
+
These are two separate, independent opt-ins. Enabling the pipe feature does **not** automatically expose shell access.
|
|
31
|
+
|
|
32
|
+
### Default ctx — read-only tools only
|
|
33
|
+
|
|
34
|
+
By default `ctx` exposes only non-mutating, non-shell tools:
|
|
35
|
+
|
|
36
|
+
| Available by default | Requires `ASHLR_PIPE_ALLOW_BASH=1` |
|
|
37
|
+
|---|---|
|
|
38
|
+
| `ctx.grep`, `ctx.read`, `ctx.ls`, `ctx.glob` | `ctx.bash` |
|
|
39
|
+
|
|
40
|
+
If an expression calls `ctx.bash` without the flag set it receives a clear error:
|
|
41
|
+
```
|
|
42
|
+
ctx.bash is disabled; set ASHLR_PIPE_ALLOW_BASH=1 to enable shell access in pipes
|
|
43
|
+
```
|
|
44
|
+
|
|
45
|
+
### Deny-list (best-effort)
|
|
46
|
+
|
|
47
|
+
Before execution, the expression is checked against a deny-list of blocked tokens: `process`, `Bun`, `require`, `import(`, `globalThis`, `__proto__`, `constructor[`, `eval`, `Function(`, `setTimeout`, `setInterval`, `fetch(`. This is a best-effort guardrail, **not a true sandbox**. The AsyncFunction constructor prevents module-closure access; strict mode (`"use strict"` is prepended automatically) makes `this` undefined so token-splitting attacks (`this["pro"+"cess"]`) fail at runtime.
|
|
48
|
+
|
|
49
|
+
### Rollout flag
|
|
50
|
+
|
|
51
|
+
`ashlr__pipe` is **disabled by default**. Enable it per-session:
|
|
52
|
+
|
|
53
|
+
```sh
|
|
54
|
+
ASHLR_PIPE_ENABLE=1 claude
|
|
55
|
+
```
|
|
56
|
+
|
|
57
|
+
Or add it to your project's MCP environment config to enable permanently.
|
|
58
|
+
|
|
59
|
+
---
|
|
60
|
+
|
|
61
|
+
## Tool schema
|
|
62
|
+
|
|
63
|
+
```
|
|
64
|
+
ashlr__pipe(
|
|
65
|
+
expr: string — async function body, ≤2000 chars (required)
|
|
66
|
+
cwd?: string — working directory for tool calls
|
|
67
|
+
timeout_ms?: number — default 10000, hard max 30000
|
|
68
|
+
max_output_bytes? number — default 4096 (truncates serialized return value)
|
|
69
|
+
)
|
|
70
|
+
```
|
|
71
|
+
|
|
72
|
+
`expr` receives a single argument `ctx` with these async methods:
|
|
73
|
+
|
|
74
|
+
| Method | Equivalent tool | Args |
|
|
75
|
+
|---|---|---|
|
|
76
|
+
| `ctx.grep(args)` | `ashlr__grep` | `{ pattern, cwd?, bypassSummary?, ... }` |
|
|
77
|
+
| `ctx.read(args)` | `ashlr__read` | `{ path, bypassSummary? }` |
|
|
78
|
+
| `ctx.bash(args)` | `ashlr__bash` | `{ command, cwd?, timeout_ms? }` |
|
|
79
|
+
| `ctx.ls(args)` | `ashlr__ls` | `{ path? }` |
|
|
80
|
+
| `ctx.glob(args)` | `ashlr__glob` | `{ pattern, cwd? }` |
|
|
81
|
+
|
|
82
|
+
Each method returns the tool's text output as a plain string.
|
|
83
|
+
|
|
84
|
+
### Security
|
|
85
|
+
|
|
86
|
+
Before execution the expression is checked against a deny-list of blocked tokens:
|
|
87
|
+
`process`, `Bun`, `require`, `import(`, `globalThis`, `__proto__`, `constructor[`, `eval`, `Function(`, `setTimeout`, `setInterval`, `fetch(`.
|
|
88
|
+
|
|
89
|
+
The function is built with `AsyncFunction` (not `eval`) so module-level closures and `require` are inaccessible regardless of the deny-list.
|
|
90
|
+
|
|
91
|
+
### Return value
|
|
92
|
+
|
|
93
|
+
- The expression must `return` a value.
|
|
94
|
+
- The return value is `JSON.stringify`-ed. Non-serializable values (circular refs, BigInt) return `"[non-serializable result]"`.
|
|
95
|
+
- Output is truncated to `max_output_bytes` with a `[ashlr__pipe: output truncated]` marker.
|
|
96
|
+
|
|
97
|
+
---
|
|
98
|
+
|
|
99
|
+
## Worked examples
|
|
100
|
+
|
|
101
|
+
### Example 1 — grep for TODOs, return file:line pairs
|
|
102
|
+
|
|
103
|
+
Instead of calling `ashlr__grep` and getting back potentially thousands of lines, use `ashlr__pipe` to filter down to just the file:line pairs you care about:
|
|
104
|
+
|
|
105
|
+
```json
|
|
106
|
+
{
|
|
107
|
+
"expr": "const raw = await ctx.grep({ pattern: 'TODO', cwd: '.', bypassSummary: true }); const lines = raw.split('\\n').filter(l => l.includes(':')); return lines.slice(0, 20).map(l => l.split(':').slice(0,2).join(':'));"
|
|
108
|
+
}
|
|
109
|
+
```
|
|
110
|
+
|
|
111
|
+
The model receives a compact JSON array of `["file.ts:42", ...]` — not the full grep output.
|
|
112
|
+
|
|
113
|
+
### Example 2 — read several files and extract one fact each
|
|
114
|
+
|
|
115
|
+
Read the `name` field from every `package.json` found via `ctx.glob` (no shell required):
|
|
116
|
+
|
|
117
|
+
```json
|
|
118
|
+
{
|
|
119
|
+
"expr": "const paths = (await ctx.glob({ pattern: '**/package.json', cwd: '.' })).split('\\n').filter(p => p && !p.includes('node_modules')).slice(0, 10); const names = []; for (const p of paths) { const content = await ctx.read({ path: p, bypassSummary: true }); try { const pkg = JSON.parse(content.split('\\n').slice(1).join('\\n')); if (pkg.name) names.push(pkg.name); } catch {} } return names;"
|
|
120
|
+
}
|
|
121
|
+
```
|
|
122
|
+
|
|
123
|
+
Intermediate file contents (potentially hundreds of KB) stay on the server. The model receives only the `["name-a", "name-b", ...]` array.
|
|
124
|
+
|
|
125
|
+
### Example 3 — shell access (requires `ASHLR_PIPE_ALLOW_BASH=1`)
|
|
126
|
+
|
|
127
|
+
`ctx.bash` is only available when the additional opt-in flag is set:
|
|
128
|
+
|
|
129
|
+
```sh
|
|
130
|
+
ASHLR_PIPE_ENABLE=1 ASHLR_PIPE_ALLOW_BASH=1 claude
|
|
131
|
+
```
|
|
132
|
+
|
|
133
|
+
```json
|
|
134
|
+
{
|
|
135
|
+
"expr": "const listing = await ctx.bash({ command: 'find . -name package.json -not -path */node_modules/* -maxdepth 4' }); const paths = listing.split('\\n').filter(p => p.endsWith('package.json')); const names = []; for (const p of paths.slice(0, 10)) { const content = await ctx.read({ path: p, bypassSummary: true }); try { const pkg = JSON.parse(content.split('\\n').slice(1).join('\\n')); if (pkg.name) names.push(pkg.name); } catch {} } return names;"
|
|
136
|
+
}
|
|
137
|
+
```
|
|
138
|
+
|
|
139
|
+
Without the flag, `ctx.bash(...)` throws: `ctx.bash is disabled; set ASHLR_PIPE_ALLOW_BASH=1 to enable shell access in pipes`.
|
|
140
|
+
|
|
141
|
+
---
|
|
142
|
+
|
|
143
|
+
## Savings accounting
|
|
144
|
+
|
|
145
|
+
`ashlr__pipe` records **one** aggregate saving at the end:
|
|
146
|
+
- `rawBytes` = sum of all intermediate result lengths (what the model would have seen)
|
|
147
|
+
- `compactBytes` = final output length (what the model actually sees)
|
|
148
|
+
|
|
149
|
+
Intermediate calls are suppressed from the savings ledger so there is no double-counting.
|
|
150
|
+
|
|
151
|
+
---
|
|
152
|
+
|
|
153
|
+
## Troubleshooting
|
|
154
|
+
|
|
155
|
+
| Symptom | Cause | Fix |
|
|
156
|
+
|---|---|---|
|
|
157
|
+
| `disallowed token "process"` | expr contains a blocked identifier | Rewrite without the blocked token |
|
|
158
|
+
| `expr exceeds 2000 characters` | Expression too long | Split into a shorter pipeline or use bash to do more work |
|
|
159
|
+
| `timed out after Nms` | Expression took longer than `timeout_ms` | Raise `timeout_ms` (max 30000) or simplify the pipeline |
|
|
160
|
+
| Tool count jumps by 1 | Flag was set during smoke test | Unset `ASHLR_PIPE_ENABLE` before running `bun run smoke:tools` |
|
|
161
|
+
| `ctx.bash is disabled` | `ASHLR_PIPE_ALLOW_BASH` not set | Set `ASHLR_PIPE_ALLOW_BASH=1` alongside `ASHLR_PIPE_ENABLE=1`, or rewrite expr using `ctx.glob`/`ctx.read` |
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 64 64" fill="none">
|
|
2
|
+
<defs>
|
|
3
|
+
<linearGradient id="pl-grad" x1="0" y1="0" x2="64" y2="64" gradientUnits="userSpaceOnUse">
|
|
4
|
+
<stop offset="0%" stop-color="#c2410c"/>
|
|
5
|
+
<stop offset="100%" stop-color="#8B2E1A"/>
|
|
6
|
+
</linearGradient>
|
|
7
|
+
</defs>
|
|
8
|
+
<rect width="64" height="64" rx="14" fill="#1a0f0c"/>
|
|
9
|
+
<rect x="1" y="1" width="62" height="62" rx="13" fill="none" stroke="url(#pl-grad)" stroke-opacity="0.25" stroke-width="1.5"/>
|
|
10
|
+
<!-- Ledger lines -->
|
|
11
|
+
<line x1="14" y1="22" x2="50" y2="22" stroke="url(#pl-grad)" stroke-opacity="0.4" stroke-width="1"/>
|
|
12
|
+
<line x1="14" y1="32" x2="50" y2="32" stroke="url(#pl-grad)" stroke-opacity="0.5" stroke-width="1"/>
|
|
13
|
+
<line x1="14" y1="42" x2="50" y2="42" stroke="url(#pl-grad)" stroke-opacity="0.6" stroke-width="1"/>
|
|
14
|
+
<!-- Brand square -->
|
|
15
|
+
<rect x="14" y="14" width="10" height="10" fill="url(#pl-grad)"/>
|
|
16
|
+
<!-- Row marks -->
|
|
17
|
+
<circle cx="46" cy="32" r="2.5" fill="url(#pl-grad)"/>
|
|
18
|
+
<circle cx="46" cy="42" r="2.5" fill="url(#pl-grad)" opacity="0.7"/>
|
|
19
|
+
</svg>
|
|
Binary file
|
|
@@ -0,0 +1,41 @@
|
|
|
1
|
+
<svg xmlns="http://www.w3.org/2000/svg" width="1200" height="630" viewBox="0 0 1200 630">
|
|
2
|
+
<defs>
|
|
3
|
+
<filter id="noise" x="0" y="0" width="100%" height="100%">
|
|
4
|
+
<feTurbulence baseFrequency="0.9" numOctaves="3" stitchTiles="stitch" />
|
|
5
|
+
<feColorMatrix values="0 0 0 0 0.05 0 0 0 0 0.05 0 0 0 0 0.05 0 0 0 0.06 0" />
|
|
6
|
+
</filter>
|
|
7
|
+
<style>
|
|
8
|
+
@import url("https://fonts.googleapis.com/css2?family=Fraunces:opsz,wght@9..144,300;9..144,400&family=JetBrains+Mono:wght@400;500&family=IBM+Plex+Sans:wght@500&display=swap");
|
|
9
|
+
</style>
|
|
10
|
+
</defs>
|
|
11
|
+
|
|
12
|
+
<!-- Parchment background -->
|
|
13
|
+
<rect width="1200" height="630" fill="#F3EADB" />
|
|
14
|
+
|
|
15
|
+
<!-- Paper grain overlay -->
|
|
16
|
+
<rect width="1200" height="630" filter="url(#noise)" opacity="0.6" />
|
|
17
|
+
|
|
18
|
+
<!-- Brand mark -->
|
|
19
|
+
<rect x="80" y="80" width="14" height="14" fill="#8B2E1A" />
|
|
20
|
+
<text x="108" y="96" font-family="Fraunces, serif" font-size="32" fill="#121212" font-weight="400">ashlr</text>
|
|
21
|
+
|
|
22
|
+
<!-- Top-right meta -->
|
|
23
|
+
<text x="1120" y="96" font-family="JetBrains Mono, monospace" font-size="14" fill="#121212" opacity="0.55" text-anchor="end" letter-spacing="1.5">v0.1.0 · MIT</text>
|
|
24
|
+
|
|
25
|
+
<!-- Eyebrow -->
|
|
26
|
+
<line x1="80" y1="200" x2="140" y2="200" stroke="#8B2E1A" stroke-width="2" />
|
|
27
|
+
<text x="160" y="205" font-family="JetBrains Mono, monospace" font-size="14" fill="#8B2E1A" letter-spacing="3" font-weight="500">THE TOKEN LEDGER</text>
|
|
28
|
+
|
|
29
|
+
<!-- Headline -->
|
|
30
|
+
<text x="80" y="310" font-family="Fraunces, serif" font-size="104" fill="#121212" font-weight="300" letter-spacing="-3">Every tool call,</text>
|
|
31
|
+
<text x="80" y="420" font-family="Fraunces, serif" font-style="italic" font-size="104" fill="#8B2E1A" font-weight="300" letter-spacing="-3">line-itemized.</text>
|
|
32
|
+
|
|
33
|
+
<!-- Sub -->
|
|
34
|
+
<text x="80" y="490" font-family="IBM Plex Sans, sans-serif" font-size="24" fill="#121212" opacity="0.8" font-weight="400">Open-source Codex + Claude Code plugin — token-efficient Read, Grep, Edit.</text>
|
|
35
|
+
<text x="80" y="524" font-family="IBM Plex Sans, sans-serif" font-size="24" fill="#121212" opacity="0.55">Mean −57% savings across reference repos.</text>
|
|
36
|
+
|
|
37
|
+
<!-- Bottom strip: install commands -->
|
|
38
|
+
<line x1="80" y1="570" x2="1120" y2="570" stroke="#121212" stroke-opacity="0.15" stroke-width="1" />
|
|
39
|
+
<text x="80" y="600" font-family="JetBrains Mono, monospace" font-size="16" fill="#121212">/plugin marketplace add ashlrai/ashlr-plugin</text>
|
|
40
|
+
<text x="1120" y="600" font-family="JetBrains Mono, monospace" font-size="14" fill="#8B2E1A" text-anchor="end" letter-spacing="1.5">plugin.ashlr.ai</text>
|
|
41
|
+
</svg>
|
|
@@ -0,0 +1,355 @@
|
|
|
1
|
+
{
|
|
2
|
+
"version": 2,
|
|
3
|
+
"measuredAt": "2026-04-26T03:27:38.258Z",
|
|
4
|
+
"repo": {
|
|
5
|
+
"url": "https://github.com/ashlrai/ashlr-plugin.git",
|
|
6
|
+
"commit": "b98da9c6d38a27ee35a1b9d95d9b8b99ddbc58d4",
|
|
7
|
+
"files": 750,
|
|
8
|
+
"loc": 149462
|
|
9
|
+
},
|
|
10
|
+
"samples": {
|
|
11
|
+
"ashlr__read": [
|
|
12
|
+
{
|
|
13
|
+
"path": "/Users/masonwyatt/Desktop/ashlr-plugin/vscode/src/extension.ts",
|
|
14
|
+
"bucket": "2-5KB",
|
|
15
|
+
"rawBytes": 3472,
|
|
16
|
+
"rawTokens": 867,
|
|
17
|
+
"ashlrBytes": 1629,
|
|
18
|
+
"ashlrTokens": 406,
|
|
19
|
+
"ratio": 0.4682814302191465
|
|
20
|
+
},
|
|
21
|
+
{
|
|
22
|
+
"path": "/Users/masonwyatt/Desktop/ashlr-plugin/bench/fixtures/tasklist-sprint-open.json",
|
|
23
|
+
"bucket": "2-5KB",
|
|
24
|
+
"rawBytes": 3265,
|
|
25
|
+
"rawTokens": 817,
|
|
26
|
+
"ashlrBytes": 1623,
|
|
27
|
+
"ashlrTokens": 406,
|
|
28
|
+
"ratio": 0.4969400244798042
|
|
29
|
+
},
|
|
30
|
+
{
|
|
31
|
+
"path": "/Users/masonwyatt/Desktop/ashlr-plugin/site/components/bits/DecryptedText.tsx",
|
|
32
|
+
"bucket": "2-5KB",
|
|
33
|
+
"rawBytes": 4079,
|
|
34
|
+
"rawTokens": 1020,
|
|
35
|
+
"ashlrBytes": 1625,
|
|
36
|
+
"ashlrTokens": 406,
|
|
37
|
+
"ratio": 0.3980392156862745
|
|
38
|
+
},
|
|
39
|
+
{
|
|
40
|
+
"path": "/Users/masonwyatt/Desktop/ashlr-plugin/video/src/compositions/DashboardFrame.tsx",
|
|
41
|
+
"bucket": "2-5KB",
|
|
42
|
+
"rawBytes": 4213,
|
|
43
|
+
"rawTokens": 1051,
|
|
44
|
+
"ashlrBytes": 1629,
|
|
45
|
+
"ashlrTokens": 406,
|
|
46
|
+
"ratio": 0.38629876308277833
|
|
47
|
+
},
|
|
48
|
+
{
|
|
49
|
+
"path": "/Users/masonwyatt/Desktop/ashlr-plugin/site/app/dpa/page.tsx",
|
|
50
|
+
"bucket": "5-15KB",
|
|
51
|
+
"rawBytes": 13288,
|
|
52
|
+
"rawTokens": 3321,
|
|
53
|
+
"ashlrBytes": 1625,
|
|
54
|
+
"ashlrTokens": 406,
|
|
55
|
+
"ratio": 0.12225233363444746
|
|
56
|
+
},
|
|
57
|
+
{
|
|
58
|
+
"path": "/Users/masonwyatt/Desktop/ashlr-plugin/servers/_genome-crypto-v2.ts",
|
|
59
|
+
"bucket": "5-15KB",
|
|
60
|
+
"rawBytes": 9269,
|
|
61
|
+
"rawTokens": 2313,
|
|
62
|
+
"ashlrBytes": 1627,
|
|
63
|
+
"ashlrTokens": 406,
|
|
64
|
+
"ratio": 0.17552961521833116
|
|
65
|
+
},
|
|
66
|
+
{
|
|
67
|
+
"path": "/Users/masonwyatt/Desktop/ashlr-plugin/__tests__/_summarize.test.ts",
|
|
68
|
+
"bucket": "5-15KB",
|
|
69
|
+
"rawBytes": 7868,
|
|
70
|
+
"rawTokens": 1967,
|
|
71
|
+
"ashlrBytes": 1623,
|
|
72
|
+
"ashlrTokens": 406,
|
|
73
|
+
"ratio": 0.20640569395017794
|
|
74
|
+
},
|
|
75
|
+
{
|
|
76
|
+
"path": "/Users/masonwyatt/Desktop/ashlr-plugin/__tests__/hook-timings-async.test.ts",
|
|
77
|
+
"bucket": "5-15KB",
|
|
78
|
+
"rawBytes": 5678,
|
|
79
|
+
"rawTokens": 1416,
|
|
80
|
+
"ashlrBytes": 1629,
|
|
81
|
+
"ashlrTokens": 406,
|
|
82
|
+
"ratio": 0.2867231638418079
|
|
83
|
+
},
|
|
84
|
+
{
|
|
85
|
+
"path": "/Users/masonwyatt/Desktop/ashlr-plugin/servers/_test-parsers.ts",
|
|
86
|
+
"bucket": "15-50KB",
|
|
87
|
+
"rawBytes": 19213,
|
|
88
|
+
"rawTokens": 4780,
|
|
89
|
+
"ashlrBytes": 1625,
|
|
90
|
+
"ashlrTokens": 406,
|
|
91
|
+
"ratio": 0.08493723849372385
|
|
92
|
+
},
|
|
93
|
+
{
|
|
94
|
+
"path": "/Users/masonwyatt/Desktop/ashlr-plugin/scripts/genome-auto-consolidate.ts",
|
|
95
|
+
"bucket": "15-50KB",
|
|
96
|
+
"rawBytes": 18644,
|
|
97
|
+
"rawTokens": 4652,
|
|
98
|
+
"ashlrBytes": 1631,
|
|
99
|
+
"ashlrTokens": 406,
|
|
100
|
+
"ratio": 0.08727429062768702
|
|
101
|
+
},
|
|
102
|
+
{
|
|
103
|
+
"path": "/Users/masonwyatt/Desktop/ashlr-plugin/scripts/savings-dashboard.ts",
|
|
104
|
+
"bucket": "15-50KB",
|
|
105
|
+
"rawBytes": 41965,
|
|
106
|
+
"rawTokens": 10410,
|
|
107
|
+
"ashlrBytes": 1627,
|
|
108
|
+
"ashlrTokens": 406,
|
|
109
|
+
"ratio": 0.03900096061479347
|
|
110
|
+
},
|
|
111
|
+
{
|
|
112
|
+
"path": "/Users/masonwyatt/Desktop/ashlr-plugin/__tests__/embedding-cache.test.ts",
|
|
113
|
+
"bucket": "15-50KB",
|
|
114
|
+
"rawBytes": 20709,
|
|
115
|
+
"rawTokens": 5171,
|
|
116
|
+
"ashlrBytes": 1623,
|
|
117
|
+
"ashlrTokens": 406,
|
|
118
|
+
"ratio": 0.07851479404370527
|
|
119
|
+
},
|
|
120
|
+
{
|
|
121
|
+
"path": "/Users/masonwyatt/Desktop/ashlr-plugin/CHANGELOG.md",
|
|
122
|
+
"bucket": "50+KB",
|
|
123
|
+
"rawBytes": 160910,
|
|
124
|
+
"rawTokens": 39889,
|
|
125
|
+
"ashlrBytes": 1640,
|
|
126
|
+
"ashlrTokens": 406,
|
|
127
|
+
"ratio": 0.010178244628845045
|
|
128
|
+
},
|
|
129
|
+
{
|
|
130
|
+
"path": "/Users/masonwyatt/Desktop/ashlr-plugin/.ashlrcode/genome/knowledge/discoveries-auto.md",
|
|
131
|
+
"bucket": "50+KB",
|
|
132
|
+
"rawBytes": 232920,
|
|
133
|
+
"rawTokens": 57674,
|
|
134
|
+
"ashlrBytes": 1633,
|
|
135
|
+
"ashlrTokens": 406,
|
|
136
|
+
"ratio": 0.0070395672226653255
|
|
137
|
+
},
|
|
138
|
+
{
|
|
139
|
+
"path": "/Users/masonwyatt/Desktop/ashlr-plugin/server/src/db.ts",
|
|
140
|
+
"bucket": "50+KB",
|
|
141
|
+
"rawBytes": 87630,
|
|
142
|
+
"rawTokens": 21889,
|
|
143
|
+
"ashlrBytes": 1627,
|
|
144
|
+
"ashlrTokens": 406,
|
|
145
|
+
"ratio": 0.01854812919731372
|
|
146
|
+
},
|
|
147
|
+
{
|
|
148
|
+
"path": "/Users/masonwyatt/Desktop/ashlr-plugin/site/tsconfig.tsbuildinfo",
|
|
149
|
+
"bucket": "50+KB",
|
|
150
|
+
"rawBytes": 381765,
|
|
151
|
+
"rawTokens": 95442,
|
|
152
|
+
"ashlrBytes": 1623,
|
|
153
|
+
"ashlrTokens": 406,
|
|
154
|
+
"ratio": 0.004253892416336624
|
|
155
|
+
}
|
|
156
|
+
],
|
|
157
|
+
"ashlr__grep": [
|
|
158
|
+
{
|
|
159
|
+
"pattern": "function ",
|
|
160
|
+
"rawBytes": 850335,
|
|
161
|
+
"rawTokens": 212573,
|
|
162
|
+
"ashlrBytes": 3023,
|
|
163
|
+
"ashlrTokens": 756,
|
|
164
|
+
"ratio": 0.003556425322124635,
|
|
165
|
+
"method": "rg-truncated"
|
|
166
|
+
},
|
|
167
|
+
{
|
|
168
|
+
"pattern": "import ",
|
|
169
|
+
"rawBytes": 846065,
|
|
170
|
+
"rawTokens": 211503,
|
|
171
|
+
"ashlrBytes": 3023,
|
|
172
|
+
"ashlrTokens": 756,
|
|
173
|
+
"ratio": 0.0035744173841505793,
|
|
174
|
+
"method": "rg-truncated"
|
|
175
|
+
},
|
|
176
|
+
{
|
|
177
|
+
"pattern": "TODO",
|
|
178
|
+
"rawBytes": 12761,
|
|
179
|
+
"rawTokens": 3184,
|
|
180
|
+
"ashlrBytes": 3025,
|
|
181
|
+
"ashlrTokens": 756,
|
|
182
|
+
"ratio": 0.23743718592964824,
|
|
183
|
+
"method": "rg-truncated"
|
|
184
|
+
},
|
|
185
|
+
{
|
|
186
|
+
"pattern": "class ",
|
|
187
|
+
"rawBytes": 30112,
|
|
188
|
+
"rawTokens": 7524,
|
|
189
|
+
"ashlrBytes": 3025,
|
|
190
|
+
"ashlrTokens": 756,
|
|
191
|
+
"ratio": 0.10047846889952153,
|
|
192
|
+
"method": "rg-truncated"
|
|
193
|
+
},
|
|
194
|
+
{
|
|
195
|
+
"pattern": "interface ",
|
|
196
|
+
"rawBytes": 219322,
|
|
197
|
+
"rawTokens": 54830,
|
|
198
|
+
"ashlrBytes": 3023,
|
|
199
|
+
"ashlrTokens": 756,
|
|
200
|
+
"ratio": 0.013788072223235455,
|
|
201
|
+
"method": "rg-truncated"
|
|
202
|
+
}
|
|
203
|
+
],
|
|
204
|
+
"ashlr__edit": [
|
|
205
|
+
{
|
|
206
|
+
"size": "small",
|
|
207
|
+
"searchChars": 15,
|
|
208
|
+
"replaceChars": 15,
|
|
209
|
+
"naiveBytes": 47,
|
|
210
|
+
"naiveTokens": 12,
|
|
211
|
+
"ashlrBytes": 121,
|
|
212
|
+
"ashlrTokens": 30,
|
|
213
|
+
"ratio": 2.5
|
|
214
|
+
},
|
|
215
|
+
{
|
|
216
|
+
"size": "medium",
|
|
217
|
+
"searchChars": 184,
|
|
218
|
+
"replaceChars": 206,
|
|
219
|
+
"naiveBytes": 407,
|
|
220
|
+
"naiveTokens": 102,
|
|
221
|
+
"ashlrBytes": 201,
|
|
222
|
+
"ashlrTokens": 49,
|
|
223
|
+
"ratio": 0.4803921568627451
|
|
224
|
+
},
|
|
225
|
+
{
|
|
226
|
+
"size": "large",
|
|
227
|
+
"searchChars": 2243,
|
|
228
|
+
"replaceChars": 2383,
|
|
229
|
+
"naiveBytes": 4643,
|
|
230
|
+
"naiveTokens": 1161,
|
|
231
|
+
"ashlrBytes": 167,
|
|
232
|
+
"ashlrTokens": 41,
|
|
233
|
+
"ratio": 0.03531438415159346
|
|
234
|
+
}
|
|
235
|
+
]
|
|
236
|
+
},
|
|
237
|
+
"aggregate": {
|
|
238
|
+
"ashlr__read": {
|
|
239
|
+
"mean": 0.17938858483486492,
|
|
240
|
+
"p50": 0.12225233363444746,
|
|
241
|
+
"p90": 0.4682814302191465
|
|
242
|
+
},
|
|
243
|
+
"ashlr__grep": {
|
|
244
|
+
"mean": 0.0717669139517361,
|
|
245
|
+
"p50": 0.013788072223235455,
|
|
246
|
+
"p90": 0.23743718592964824
|
|
247
|
+
},
|
|
248
|
+
"ashlr__edit": {
|
|
249
|
+
"mean": 1.0052355136714461,
|
|
250
|
+
"p50": 0.4803921568627451,
|
|
251
|
+
"p90": 2.5
|
|
252
|
+
},
|
|
253
|
+
"overall": {
|
|
254
|
+
"mean": 0.26019826950545244
|
|
255
|
+
}
|
|
256
|
+
},
|
|
257
|
+
"methodology": "Measurement methodology (version 2):\n\n**ashlr__read**: For each sampled source file, we measure raw file bytes and\ntoken count (chars/4 heuristic). We then apply the same snipCompact\ntransformation used at runtime — wrapping the content in a tool_result message\nand calling snipCompact() — and measure the resulting byte/token count. The\nratio is ashlrTokens / rawTokens. Files below 2 KB are excluded because\nsnipCompact only fires on tool results > 2 000 chars; savings are zero by\ndesign for small files.\n\nFiles are selected deterministically: the repo HEAD commit SHA is folded into a\n32-bit seed (mulberry32 PRNG), then up to 4 files are sampled from each of four\nsize buckets (2–5 KB, 5–15 KB, 15–50 KB, 50+ KB). Re-running on the same\ncommit always picks the same files.\n\n**ashlr__grep**: Five common patterns (function, import, TODO, class, interface)\nare run via rg --json against the repo root. Raw output bytes are measured\ndirectly. The ashlr__grep fallback path (no genome) truncates output to 4 000\nchars (head 2 000 + tail 1 000). The ratio is truncated/raw.\n\nNote: when a .ashlrcode/genome/ index is present, real-world grep savings are\nsubstantially higher. This benchmark measures only the conservative\nno-genome baseline.\n\n**ashlr__edit**: Three synthetic edits (small ~15 chars, medium ~300 chars,\nlarge ~3 000 chars) compare the naive \"ship before+after as text\" approach\nagainst ashlr__edit's diff-summary format (one header line + removed/added\nfirst-lines). The ratio is summary tokens / naive tokens.\n\n**Aggregation**: per-tool mean/p50/p90 are computed over each tool's ratio\nvalues (lower ratio = more savings). The `overall.mean` is pooled across\nevery individual sample regardless of tool — so tools with more samples (read\nhas 15, grep has 5, edit has 3) weight the overall figure proportionally.\nThat makes the headline number reflect the workload mix, not a uniform\nper-tool average. The unweighted mean of per-tool means is intentionally NOT\npublished because it gives equal weight to a 3-sample tool and a 15-sample\ntool, which over-weights the synthetic edit overhead.\n\nToken counts use the chars/4 heuristic, the same estimator the plugin uses at\nruntime for savings accounting.",
|
|
258
|
+
"crossLanguageMeasuredAt": "2026-05-23T00:07:25.178Z",
|
|
259
|
+
"byRepo": {
|
|
260
|
+
"node-sdk": {
|
|
261
|
+
"repoKey": "node-sdk",
|
|
262
|
+
"language": "ts",
|
|
263
|
+
"upstreamRepo": "github.com/vercel/ai",
|
|
264
|
+
"refrev": "049801243cc791e0ba28910b8a638f0e05446bcd",
|
|
265
|
+
"meanRatio": 0.3866451136118328,
|
|
266
|
+
"savingsPct": 61.33548863881673,
|
|
267
|
+
"perTool": {
|
|
268
|
+
"read": {
|
|
269
|
+
"mean": 0.25972488616679845,
|
|
270
|
+
"p50": 0.2283464566929134,
|
|
271
|
+
"p90": 0.5638888888888889
|
|
272
|
+
},
|
|
273
|
+
"grep": {
|
|
274
|
+
"mean": 0.32009941944414705,
|
|
275
|
+
"p50": 0.2968197879858657,
|
|
276
|
+
"p90": 0.6948529411764706
|
|
277
|
+
},
|
|
278
|
+
"edit": {
|
|
279
|
+
"mean": 1.0052355136714461,
|
|
280
|
+
"p50": 0.4803921568627451,
|
|
281
|
+
"p90": 2.5
|
|
282
|
+
}
|
|
283
|
+
}
|
|
284
|
+
},
|
|
285
|
+
"python-lib": {
|
|
286
|
+
"repoKey": "python-lib",
|
|
287
|
+
"language": "py",
|
|
288
|
+
"upstreamRepo": "github.com/pandas-dev/pandas",
|
|
289
|
+
"refrev": "be0642f7cb8900282a43b53cd50cf00a05161ed6",
|
|
290
|
+
"meanRatio": 0.3688098954558492,
|
|
291
|
+
"savingsPct": 63.11901045441508,
|
|
292
|
+
"perTool": {
|
|
293
|
+
"read": {
|
|
294
|
+
"mean": 0.2429002666026248,
|
|
295
|
+
"p50": 0.230028328611898,
|
|
296
|
+
"p90": 0.56
|
|
297
|
+
},
|
|
298
|
+
"grep": {
|
|
299
|
+
"mean": 0.31431955954487434,
|
|
300
|
+
"p50": 0.20454545454545456,
|
|
301
|
+
"p90": 1
|
|
302
|
+
},
|
|
303
|
+
"edit": {
|
|
304
|
+
"mean": 1.0052355136714461,
|
|
305
|
+
"p50": 0.4803921568627451,
|
|
306
|
+
"p90": 2.5
|
|
307
|
+
}
|
|
308
|
+
}
|
|
309
|
+
},
|
|
310
|
+
"rust-project": {
|
|
311
|
+
"repoKey": "rust-project",
|
|
312
|
+
"language": "rs",
|
|
313
|
+
"upstreamRepo": "github.com/tokio-rs/tokio",
|
|
314
|
+
"refrev": "6c03e03898d71eca976ee1ad8481cf112ae722ba",
|
|
315
|
+
"meanRatio": 0.532296183969948,
|
|
316
|
+
"savingsPct": 46.7703816030052,
|
|
317
|
+
"perTool": {
|
|
318
|
+
"read": {
|
|
319
|
+
"mean": 0.24330862010197613,
|
|
320
|
+
"p50": 0.2088477366255144,
|
|
321
|
+
"p90": 0.4608399545970488
|
|
322
|
+
},
|
|
323
|
+
"grep": {
|
|
324
|
+
"mean": 0.826507713884993,
|
|
325
|
+
"p50": 1,
|
|
326
|
+
"p90": 1
|
|
327
|
+
},
|
|
328
|
+
"edit": {
|
|
329
|
+
"mean": 1.0052355136714461,
|
|
330
|
+
"p50": 0.4803921568627451,
|
|
331
|
+
"p90": 2.5
|
|
332
|
+
}
|
|
333
|
+
}
|
|
334
|
+
}
|
|
335
|
+
},
|
|
336
|
+
"byLanguage": {
|
|
337
|
+
"ts": {
|
|
338
|
+
"language": "ts",
|
|
339
|
+
"meanRatio": 0.3866451136118328,
|
|
340
|
+
"savingsPct": 61.33548863881673
|
|
341
|
+
},
|
|
342
|
+
"py": {
|
|
343
|
+
"language": "py",
|
|
344
|
+
"meanRatio": 0.3688098954558492,
|
|
345
|
+
"savingsPct": 63.11901045441508
|
|
346
|
+
},
|
|
347
|
+
"rs": {
|
|
348
|
+
"language": "rs",
|
|
349
|
+
"meanRatio": 0.532296183969948,
|
|
350
|
+
"savingsPct": 46.7703816030052
|
|
351
|
+
}
|
|
352
|
+
},
|
|
353
|
+
"crossLanguageMean": 0.42925039767920997,
|
|
354
|
+
"crossLanguageSavingsPct": 57.07496023207901
|
|
355
|
+
}
|
|
@@ -0,0 +1,102 @@
|
|
|
1
|
+
{
|
|
2
|
+
"generatedAt": "2026-04-15",
|
|
3
|
+
"method": "snipCompact via @ashlr/core-efficiency on each file; chars/4 token estimate",
|
|
4
|
+
"note": "Files below 2KB see 0% savings by design \u2014 snipCompact only fires on tool-results > 2000 chars. This is honest: there's nothing to trim on a small file.",
|
|
5
|
+
"reproducible": "legacy snapshot; use docs/benchmarks-v2.json and bun run scripts/run-benchmark.ts for current methodology",
|
|
6
|
+
"rows": [
|
|
7
|
+
{
|
|
8
|
+
"path": "src/compression/priority.ts",
|
|
9
|
+
"loc": 22,
|
|
10
|
+
"kb": 0.5,
|
|
11
|
+
"rawTokens": 117,
|
|
12
|
+
"ashlrTokens": 117,
|
|
13
|
+
"savedPct": 0
|
|
14
|
+
},
|
|
15
|
+
{
|
|
16
|
+
"path": "src/genome/jsonl.ts",
|
|
17
|
+
"loc": 42,
|
|
18
|
+
"kb": 1.2,
|
|
19
|
+
"rawTokens": 305,
|
|
20
|
+
"ashlrTokens": 305,
|
|
21
|
+
"savedPct": 0
|
|
22
|
+
},
|
|
23
|
+
{
|
|
24
|
+
"path": "src/tokens/index.ts",
|
|
25
|
+
"loc": 51,
|
|
26
|
+
"kb": 1.5,
|
|
27
|
+
"rawTokens": 372,
|
|
28
|
+
"ashlrTokens": 372,
|
|
29
|
+
"savedPct": 0
|
|
30
|
+
},
|
|
31
|
+
{
|
|
32
|
+
"path": "src/budget/index.ts",
|
|
33
|
+
"loc": 56,
|
|
34
|
+
"kb": 1.9,
|
|
35
|
+
"rawTokens": 491,
|
|
36
|
+
"ashlrTokens": 491,
|
|
37
|
+
"savedPct": 0
|
|
38
|
+
},
|
|
39
|
+
{
|
|
40
|
+
"path": "src/types/index.ts",
|
|
41
|
+
"loc": 68,
|
|
42
|
+
"kb": 1.9,
|
|
43
|
+
"rawTokens": 484,
|
|
44
|
+
"ashlrTokens": 484,
|
|
45
|
+
"savedPct": 0
|
|
46
|
+
},
|
|
47
|
+
{
|
|
48
|
+
"path": "src/compression/context.ts",
|
|
49
|
+
"loc": 186,
|
|
50
|
+
"kb": 5.9,
|
|
51
|
+
"rawTokens": 1517,
|
|
52
|
+
"ashlrTokens": 406,
|
|
53
|
+
"savedPct": 73.2
|
|
54
|
+
},
|
|
55
|
+
{
|
|
56
|
+
"path": "src/genome/manifest.ts",
|
|
57
|
+
"loc": 238,
|
|
58
|
+
"kb": 7.0,
|
|
59
|
+
"rawTokens": 1802,
|
|
60
|
+
"ashlrTokens": 406,
|
|
61
|
+
"savedPct": 77.5
|
|
62
|
+
},
|
|
63
|
+
{
|
|
64
|
+
"path": "src/genome/retriever.ts",
|
|
65
|
+
"loc": 259,
|
|
66
|
+
"kb": 7.8,
|
|
67
|
+
"rawTokens": 2001,
|
|
68
|
+
"ashlrTokens": 406,
|
|
69
|
+
"savedPct": 79.7
|
|
70
|
+
},
|
|
71
|
+
{
|
|
72
|
+
"path": "src/genome/fitness.ts",
|
|
73
|
+
"loc": 241,
|
|
74
|
+
"kb": 7.8,
|
|
75
|
+
"rawTokens": 2009,
|
|
76
|
+
"ashlrTokens": 406,
|
|
77
|
+
"savedPct": 79.8
|
|
78
|
+
},
|
|
79
|
+
{
|
|
80
|
+
"path": "src/genome/scribe.ts",
|
|
81
|
+
"loc": 276,
|
|
82
|
+
"kb": 8.3,
|
|
83
|
+
"rawTokens": 2131,
|
|
84
|
+
"ashlrTokens": 406,
|
|
85
|
+
"savedPct": 80.9
|
|
86
|
+
},
|
|
87
|
+
{
|
|
88
|
+
"path": "src/genome/generations.ts",
|
|
89
|
+
"loc": 331,
|
|
90
|
+
"kb": 11.2,
|
|
91
|
+
"rawTokens": 2878,
|
|
92
|
+
"ashlrTokens": 406,
|
|
93
|
+
"savedPct": 85.9
|
|
94
|
+
}
|
|
95
|
+
],
|
|
96
|
+
"summary": {
|
|
97
|
+
"smallFiles (<2KB)": 5,
|
|
98
|
+
"mediumFiles (2-10KB)": 5,
|
|
99
|
+
"largeFiles (\u226510KB)": 1,
|
|
100
|
+
"avgSavingsLargeFiles": 79.5
|
|
101
|
+
}
|
|
102
|
+
}
|