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,316 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* _orchestrate-executor.ts — per-node executor for the Q1'27 orchestration runner.
|
|
3
|
+
*
|
|
4
|
+
* Two executors live here:
|
|
5
|
+
* - executeNodeStub: the original Bun.spawn `console.log('STUB-NODE: …')`
|
|
6
|
+
* path, refactored out of scripts/orchestrate-run.ts. PRODUCTION DEFAULT.
|
|
7
|
+
* - executeNodeLlm: real Claude wiring via servers/_llm-providers/ (auto
|
|
8
|
+
* dispatcher prefers anthropic, then cloud, etc). FLAG-GATED behind
|
|
9
|
+
* ASHLR_ORCHESTRATE_REAL_LLM=1.
|
|
10
|
+
*
|
|
11
|
+
* Both return the same ExecuteNodeResult shape so the runner can swap them
|
|
12
|
+
* with a single ternary. AbortSignal is propagated to the underlying fetch
|
|
13
|
+
* (LLM path) or kill() (stub path) for cancellation.
|
|
14
|
+
*
|
|
15
|
+
* Cost safety (LLM path):
|
|
16
|
+
* - Per-node hard token cap = min(node.estimatedTokens * 1.5, 5000).
|
|
17
|
+
* - If the model response would exceed the cap, we truncate the output
|
|
18
|
+
* to (cap * 4) characters (rough chars-per-token ≈ 4) and append
|
|
19
|
+
* "[truncated at cap]". The model still BILLS for outTokens the
|
|
20
|
+
* provider reports, but downstream nodes never see runaway text.
|
|
21
|
+
*
|
|
22
|
+
* Test seams:
|
|
23
|
+
* - _setProviderFactoryForTests lets the test suite inject a fake
|
|
24
|
+
* LlmProvider implementation without touching the real network.
|
|
25
|
+
* - _setSpawnImplForTests lets stub-path tests inject a fake Bun.spawn.
|
|
26
|
+
*/
|
|
27
|
+
|
|
28
|
+
import { selectProvider, type LlmProvider } from "./_llm-providers/index.ts";
|
|
29
|
+
import type { TaskNode } from "./_task-graph.ts";
|
|
30
|
+
|
|
31
|
+
// ---------------------------------------------------------------------------
|
|
32
|
+
// Public types
|
|
33
|
+
// ---------------------------------------------------------------------------
|
|
34
|
+
|
|
35
|
+
export interface ExecuteNodeOptions {
|
|
36
|
+
node: TaskNode;
|
|
37
|
+
handoffPayload: string;
|
|
38
|
+
cwd?: string;
|
|
39
|
+
timeoutMs: number;
|
|
40
|
+
signal?: AbortSignal;
|
|
41
|
+
}
|
|
42
|
+
|
|
43
|
+
export interface ExecuteNodeResult {
|
|
44
|
+
ok: boolean;
|
|
45
|
+
output: string;
|
|
46
|
+
error?: string;
|
|
47
|
+
tokensIn?: number;
|
|
48
|
+
tokensOut?: number;
|
|
49
|
+
durationMs: number;
|
|
50
|
+
}
|
|
51
|
+
|
|
52
|
+
// ---------------------------------------------------------------------------
|
|
53
|
+
// DI seams
|
|
54
|
+
// ---------------------------------------------------------------------------
|
|
55
|
+
|
|
56
|
+
type SpawnFn = typeof Bun.spawn;
|
|
57
|
+
type ProviderFactory = () => Promise<LlmProvider>;
|
|
58
|
+
|
|
59
|
+
let _spawnImpl: SpawnFn | null = null;
|
|
60
|
+
let _providerFactory: ProviderFactory | null = null;
|
|
61
|
+
|
|
62
|
+
/** Test seam: override Bun.spawn used by executeNodeStub. */
|
|
63
|
+
export function _setSpawnImplForTests(fn: SpawnFn | null): void {
|
|
64
|
+
_spawnImpl = fn;
|
|
65
|
+
}
|
|
66
|
+
|
|
67
|
+
/** Test seam: override the LlmProvider factory used by executeNodeLlm. */
|
|
68
|
+
export function _setProviderFactoryForTests(fn: ProviderFactory | null): void {
|
|
69
|
+
_providerFactory = fn;
|
|
70
|
+
}
|
|
71
|
+
|
|
72
|
+
function spawnGuarded(...args: Parameters<SpawnFn>): ReturnType<SpawnFn> {
|
|
73
|
+
return (_spawnImpl ?? Bun.spawn)(...args);
|
|
74
|
+
}
|
|
75
|
+
|
|
76
|
+
async function resolveProvider(): Promise<LlmProvider> {
|
|
77
|
+
if (_providerFactory) return _providerFactory();
|
|
78
|
+
return selectProvider();
|
|
79
|
+
}
|
|
80
|
+
|
|
81
|
+
// ---------------------------------------------------------------------------
|
|
82
|
+
// Prompt template (LLM path)
|
|
83
|
+
// ---------------------------------------------------------------------------
|
|
84
|
+
|
|
85
|
+
/**
|
|
86
|
+
* Build the prompt for one node. Exported so tests can assert that goal,
|
|
87
|
+
* scope, and handoff context all reach the model verbatim.
|
|
88
|
+
*
|
|
89
|
+
* IMPORTANT: this prompt is intentionally READ-ONLY — the MVP does not
|
|
90
|
+
* write files or run commands. Future milestones (q1-27 wk 10+) will lift
|
|
91
|
+
* this restriction by handing the prompt to a Claude Code subagent.
|
|
92
|
+
*/
|
|
93
|
+
export function buildNodePrompt(node: TaskNode, handoffPayload: string): string {
|
|
94
|
+
const scope = (node.scope ?? []).join(", ");
|
|
95
|
+
const handoff = handoffPayload && handoffPayload.length > 0 ? handoffPayload : "(none)";
|
|
96
|
+
return (
|
|
97
|
+
"You are an orchestration agent executing one node of a task graph.\n" +
|
|
98
|
+
`Node goal: ${node.goal}\n` +
|
|
99
|
+
`Scope (files you may reference): ${scope}\n` +
|
|
100
|
+
`Handoff context from completed predecessors: ${handoff}\n` +
|
|
101
|
+
"\n" +
|
|
102
|
+
"Produce a concise summary (≤500 words) of what would be done, files to edit, " +
|
|
103
|
+
"and any blockers. DO NOT take destructive actions in this MVP — orchestrate-mode is read-only."
|
|
104
|
+
);
|
|
105
|
+
}
|
|
106
|
+
|
|
107
|
+
// ---------------------------------------------------------------------------
|
|
108
|
+
// Stub executor (original Bun.spawn `console.log('STUB-NODE: …')` path)
|
|
109
|
+
// ---------------------------------------------------------------------------
|
|
110
|
+
|
|
111
|
+
interface SpawnEnv extends Record<string, string> {
|
|
112
|
+
NODE_ID: string;
|
|
113
|
+
NODE_GOAL: string;
|
|
114
|
+
NODE_SCOPE: string;
|
|
115
|
+
HANDOFF_PAYLOAD: string;
|
|
116
|
+
}
|
|
117
|
+
|
|
118
|
+
function buildSpawnEnv(node: TaskNode, handoffPayload: string): SpawnEnv {
|
|
119
|
+
return {
|
|
120
|
+
NODE_ID: node.id,
|
|
121
|
+
NODE_GOAL: node.goal,
|
|
122
|
+
NODE_SCOPE: (node.scope ?? []).join(":"),
|
|
123
|
+
HANDOFF_PAYLOAD: handoffPayload,
|
|
124
|
+
};
|
|
125
|
+
}
|
|
126
|
+
|
|
127
|
+
export async function executeNodeStub(opts: ExecuteNodeOptions): Promise<ExecuteNodeResult> {
|
|
128
|
+
const t0 = Date.now();
|
|
129
|
+
const env = buildSpawnEnv(opts.node, opts.handoffPayload);
|
|
130
|
+
try {
|
|
131
|
+
const proc = spawnGuarded(
|
|
132
|
+
[
|
|
133
|
+
"bun",
|
|
134
|
+
"--eval",
|
|
135
|
+
"console.log('STUB-NODE: ' + (process.env.NODE_ID || 'unknown'));",
|
|
136
|
+
],
|
|
137
|
+
{
|
|
138
|
+
env: { ...process.env, ...env },
|
|
139
|
+
cwd: opts.cwd,
|
|
140
|
+
stdout: "pipe",
|
|
141
|
+
stderr: "pipe",
|
|
142
|
+
},
|
|
143
|
+
);
|
|
144
|
+
|
|
145
|
+
let timedOut = false;
|
|
146
|
+
const timer = setTimeout(() => {
|
|
147
|
+
timedOut = true;
|
|
148
|
+
try { proc.kill(); } catch { /* best-effort */ }
|
|
149
|
+
}, opts.timeoutMs);
|
|
150
|
+
|
|
151
|
+
// Propagate AbortSignal to subprocess kill().
|
|
152
|
+
const onAbort = () => {
|
|
153
|
+
try { proc.kill(); } catch { /* best-effort */ }
|
|
154
|
+
};
|
|
155
|
+
opts.signal?.addEventListener("abort", onAbort);
|
|
156
|
+
|
|
157
|
+
let stdout = "";
|
|
158
|
+
let stderr = "";
|
|
159
|
+
try {
|
|
160
|
+
const stdoutPromise = proc.stdout instanceof ReadableStream
|
|
161
|
+
? new Response(proc.stdout).text()
|
|
162
|
+
: Promise.resolve("");
|
|
163
|
+
const stderrPromise = proc.stderr instanceof ReadableStream
|
|
164
|
+
? new Response(proc.stderr).text()
|
|
165
|
+
: Promise.resolve("");
|
|
166
|
+
stdout = await stdoutPromise;
|
|
167
|
+
stderr = await stderrPromise;
|
|
168
|
+
await proc.exited;
|
|
169
|
+
} finally {
|
|
170
|
+
clearTimeout(timer);
|
|
171
|
+
opts.signal?.removeEventListener("abort", onAbort);
|
|
172
|
+
}
|
|
173
|
+
|
|
174
|
+
const durationMs = Date.now() - t0;
|
|
175
|
+
|
|
176
|
+
if (opts.signal?.aborted) {
|
|
177
|
+
return { ok: false, output: stdout, error: "aborted", durationMs };
|
|
178
|
+
}
|
|
179
|
+
if (timedOut) {
|
|
180
|
+
return {
|
|
181
|
+
ok: false,
|
|
182
|
+
output: stdout,
|
|
183
|
+
error: `timeout after ${opts.timeoutMs}ms`,
|
|
184
|
+
durationMs,
|
|
185
|
+
};
|
|
186
|
+
}
|
|
187
|
+
|
|
188
|
+
const exitCode = typeof proc.exitCode === "number" ? proc.exitCode : 0;
|
|
189
|
+
if (exitCode !== 0) {
|
|
190
|
+
return {
|
|
191
|
+
ok: false,
|
|
192
|
+
output: stdout,
|
|
193
|
+
error: stderr.trim() || `exit ${exitCode}`,
|
|
194
|
+
durationMs,
|
|
195
|
+
};
|
|
196
|
+
}
|
|
197
|
+
|
|
198
|
+
return { ok: true, output: stdout, durationMs };
|
|
199
|
+
} catch (err) {
|
|
200
|
+
return {
|
|
201
|
+
ok: false,
|
|
202
|
+
output: "",
|
|
203
|
+
error: err instanceof Error ? err.message : String(err),
|
|
204
|
+
durationMs: Date.now() - t0,
|
|
205
|
+
};
|
|
206
|
+
}
|
|
207
|
+
}
|
|
208
|
+
|
|
209
|
+
// ---------------------------------------------------------------------------
|
|
210
|
+
// LLM executor (flag-gated, READ-ONLY)
|
|
211
|
+
// ---------------------------------------------------------------------------
|
|
212
|
+
|
|
213
|
+
const HARD_TOKEN_CAP = 5_000;
|
|
214
|
+
const TOKEN_CAP_MULTIPLIER = 1.5;
|
|
215
|
+
const CHARS_PER_TOKEN = 4; // rough — used only to bound output bytes
|
|
216
|
+
|
|
217
|
+
function computeTokenCap(node: TaskNode): number {
|
|
218
|
+
const est = node.estimatedTokens ?? 0;
|
|
219
|
+
return Math.min(Math.max(1, Math.floor(est * TOKEN_CAP_MULTIPLIER)), HARD_TOKEN_CAP);
|
|
220
|
+
}
|
|
221
|
+
|
|
222
|
+
function applyOutputCap(output: string, tokenCap: number): string {
|
|
223
|
+
const charCap = tokenCap * CHARS_PER_TOKEN;
|
|
224
|
+
if (output.length <= charCap) return output;
|
|
225
|
+
return output.slice(0, charCap) + "\n[truncated at cap]";
|
|
226
|
+
}
|
|
227
|
+
|
|
228
|
+
/**
|
|
229
|
+
* Execute one node via the configured LlmProvider.
|
|
230
|
+
*
|
|
231
|
+
* Pre-flight credential check: if the auto-selected provider is `none`
|
|
232
|
+
* (no Anthropic key / no Pro token / no local LLM), we return
|
|
233
|
+
* { ok: false, error: "no LLM credentials configured" } WITHOUT making any
|
|
234
|
+
* network call. This guards the cost-safety story end-to-end.
|
|
235
|
+
*
|
|
236
|
+
* TODO(q1-27 wk 7-9): Team tier should draw from central quota; for now
|
|
237
|
+
* Team uses user's own credentials (same path as Pro). When central quota
|
|
238
|
+
* lands, this function should accept a tier hint and bill against the
|
|
239
|
+
* team's shared bucket instead of the user's ANTHROPIC_API_KEY.
|
|
240
|
+
*/
|
|
241
|
+
export async function executeNodeLlm(opts: ExecuteNodeOptions): Promise<ExecuteNodeResult> {
|
|
242
|
+
const t0 = Date.now();
|
|
243
|
+
const tokenCap = computeTokenCap(opts.node);
|
|
244
|
+
|
|
245
|
+
// Fast-fail when already aborted.
|
|
246
|
+
if (opts.signal?.aborted) {
|
|
247
|
+
return { ok: false, output: "", error: "aborted", durationMs: Date.now() - t0 };
|
|
248
|
+
}
|
|
249
|
+
|
|
250
|
+
// Resolve provider; bail with explicit error when no credentials exist.
|
|
251
|
+
let provider: LlmProvider;
|
|
252
|
+
try {
|
|
253
|
+
provider = await resolveProvider();
|
|
254
|
+
} catch (err) {
|
|
255
|
+
return {
|
|
256
|
+
ok: false,
|
|
257
|
+
output: "",
|
|
258
|
+
error: err instanceof Error ? err.message : String(err),
|
|
259
|
+
durationMs: Date.now() - t0,
|
|
260
|
+
};
|
|
261
|
+
}
|
|
262
|
+
|
|
263
|
+
if (provider.name === "none") {
|
|
264
|
+
return {
|
|
265
|
+
ok: false,
|
|
266
|
+
output: "",
|
|
267
|
+
error: "no LLM credentials configured",
|
|
268
|
+
durationMs: Date.now() - t0,
|
|
269
|
+
};
|
|
270
|
+
}
|
|
271
|
+
|
|
272
|
+
// Build prompt (system) + node task description (user content).
|
|
273
|
+
const prompt = buildNodePrompt(opts.node, opts.handoffPayload);
|
|
274
|
+
|
|
275
|
+
// The LlmProvider.summarize signature takes (text, systemPrompt). We pass
|
|
276
|
+
// an empty user text and put the full prompt in the system slot because
|
|
277
|
+
// the Anthropic provider sets `system: prompt` + `messages: [{role:user,
|
|
278
|
+
// content: text}]`. To keep the prompt visible as the user turn (better
|
|
279
|
+
// model behavior for one-shot tasks), we instead put the prompt as user
|
|
280
|
+
// content and use a minimal system prompt that tells the model to follow
|
|
281
|
+
// it verbatim.
|
|
282
|
+
const SYSTEM = "Follow the orchestration task in the user message exactly. Be concise.";
|
|
283
|
+
|
|
284
|
+
// Race the provider call against AbortSignal so cancellations don't have
|
|
285
|
+
// to wait for the full 15s provider timeout. The provider itself doesn't
|
|
286
|
+
// accept an AbortSignal in its public surface today; this race gives us
|
|
287
|
+
// the same effective behavior at the call-site.
|
|
288
|
+
let response: { output: string; inTokens: number; outTokens: number };
|
|
289
|
+
try {
|
|
290
|
+
const summarizePromise = provider.summarize(prompt, SYSTEM, { maxTokens: tokenCap });
|
|
291
|
+
if (opts.signal) {
|
|
292
|
+
const abortPromise = new Promise<never>((_, reject) => {
|
|
293
|
+
opts.signal!.addEventListener("abort", () => reject(new Error("aborted")), { once: true });
|
|
294
|
+
});
|
|
295
|
+
response = await Promise.race([summarizePromise, abortPromise]);
|
|
296
|
+
} else {
|
|
297
|
+
response = await summarizePromise;
|
|
298
|
+
}
|
|
299
|
+
} catch (err) {
|
|
300
|
+
return {
|
|
301
|
+
ok: false,
|
|
302
|
+
output: "",
|
|
303
|
+
error: err instanceof Error ? err.message : String(err),
|
|
304
|
+
durationMs: Date.now() - t0,
|
|
305
|
+
};
|
|
306
|
+
}
|
|
307
|
+
|
|
308
|
+
const capped = applyOutputCap(response.output, tokenCap);
|
|
309
|
+
return {
|
|
310
|
+
ok: true,
|
|
311
|
+
output: capped,
|
|
312
|
+
tokensIn: response.inTokens,
|
|
313
|
+
tokensOut: response.outTokens,
|
|
314
|
+
durationMs: Date.now() - t0,
|
|
315
|
+
};
|
|
316
|
+
}
|