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,358 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* task-server-handlers — side-effect module.
|
|
3
|
+
*
|
|
4
|
+
* Importing this file registers ashlr__task_list and ashlr__task_get into
|
|
5
|
+
* the shared registry (_tool-base.ts). Used by both the standalone entry
|
|
6
|
+
* point (task-server.ts) and the router (_router.ts via _router-handlers.ts).
|
|
7
|
+
*
|
|
8
|
+
* TaskCreate/Update are intentionally NOT wrapped — they're tiny inputs
|
|
9
|
+
* with no token savings opportunity on the read side.
|
|
10
|
+
*/
|
|
11
|
+
|
|
12
|
+
import { registerTool, type ToolCallContext, type ToolResult } from "./_tool-base";
|
|
13
|
+
import { recordSavingAccurate } from "./_accounting";
|
|
14
|
+
|
|
15
|
+
// ---------------------------------------------------------------------------
|
|
16
|
+
// Types
|
|
17
|
+
// ---------------------------------------------------------------------------
|
|
18
|
+
|
|
19
|
+
interface TaskListArgs {
|
|
20
|
+
status?: string;
|
|
21
|
+
owner?: string;
|
|
22
|
+
limit?: number;
|
|
23
|
+
}
|
|
24
|
+
|
|
25
|
+
interface TaskGetArgs {
|
|
26
|
+
taskId: string;
|
|
27
|
+
}
|
|
28
|
+
|
|
29
|
+
interface RawTask {
|
|
30
|
+
id?: string;
|
|
31
|
+
taskId?: string;
|
|
32
|
+
status?: string;
|
|
33
|
+
subject?: string;
|
|
34
|
+
title?: string;
|
|
35
|
+
description?: string;
|
|
36
|
+
owner?: string;
|
|
37
|
+
assignee?: string;
|
|
38
|
+
createdAt?: string;
|
|
39
|
+
updatedAt?: string;
|
|
40
|
+
[key: string]: unknown;
|
|
41
|
+
}
|
|
42
|
+
|
|
43
|
+
interface CompactTaskRow {
|
|
44
|
+
taskId: string;
|
|
45
|
+
status: string;
|
|
46
|
+
subject: string;
|
|
47
|
+
ageMin: number;
|
|
48
|
+
}
|
|
49
|
+
|
|
50
|
+
// ---------------------------------------------------------------------------
|
|
51
|
+
// Helpers
|
|
52
|
+
// ---------------------------------------------------------------------------
|
|
53
|
+
|
|
54
|
+
/** Extract a task's ID from various field name conventions. */
|
|
55
|
+
function getTaskId(t: RawTask): string {
|
|
56
|
+
return String(t.id ?? t.taskId ?? "");
|
|
57
|
+
}
|
|
58
|
+
|
|
59
|
+
/** Extract status, normalizing to lowercase. */
|
|
60
|
+
function getStatus(t: RawTask): string {
|
|
61
|
+
return String(t.status ?? "unknown").toLowerCase();
|
|
62
|
+
}
|
|
63
|
+
|
|
64
|
+
/** Extract a short subject line from various field name conventions. */
|
|
65
|
+
function getSubject(t: RawTask): string {
|
|
66
|
+
return String(t.subject ?? t.title ?? "").slice(0, 80);
|
|
67
|
+
}
|
|
68
|
+
|
|
69
|
+
/** Extract owner/assignee. */
|
|
70
|
+
function getOwner(t: RawTask): string {
|
|
71
|
+
return String(t.owner ?? t.assignee ?? "");
|
|
72
|
+
}
|
|
73
|
+
|
|
74
|
+
/**
|
|
75
|
+
* Compute age in minutes from a createdAt timestamp. Returns -1 if
|
|
76
|
+
* the timestamp is missing or unparseable.
|
|
77
|
+
*/
|
|
78
|
+
function ageMinutes(t: RawTask): number {
|
|
79
|
+
const ts = t.createdAt ?? t.updatedAt;
|
|
80
|
+
if (!ts) return -1;
|
|
81
|
+
try {
|
|
82
|
+
const ms = Date.now() - new Date(String(ts)).getTime();
|
|
83
|
+
return Math.max(0, Math.round(ms / 60_000));
|
|
84
|
+
} catch {
|
|
85
|
+
return -1;
|
|
86
|
+
}
|
|
87
|
+
}
|
|
88
|
+
|
|
89
|
+
/**
|
|
90
|
+
* Snip a long text to maxBytes with an elision marker in the middle.
|
|
91
|
+
* Used to compact task descriptions.
|
|
92
|
+
*/
|
|
93
|
+
function snipCompact(s: string, maxBytes: number): { text: string; snipped: boolean; fullLength: number } {
|
|
94
|
+
const fullLength = s.length;
|
|
95
|
+
if (fullLength <= maxBytes) return { text: s, snipped: false, fullLength };
|
|
96
|
+
const half = Math.floor(maxBytes / 2);
|
|
97
|
+
const head = s.slice(0, half);
|
|
98
|
+
const tail = s.slice(fullLength - half);
|
|
99
|
+
const elided = fullLength - maxBytes;
|
|
100
|
+
return {
|
|
101
|
+
text: `${head}\n\n[... ${elided} chars elided — full description is ${fullLength} chars ...]\n\n${tail}`,
|
|
102
|
+
snipped: true,
|
|
103
|
+
fullLength,
|
|
104
|
+
};
|
|
105
|
+
}
|
|
106
|
+
|
|
107
|
+
// ---------------------------------------------------------------------------
|
|
108
|
+
// Core logic (exported for tests)
|
|
109
|
+
// ---------------------------------------------------------------------------
|
|
110
|
+
|
|
111
|
+
/**
|
|
112
|
+
* ashlrTaskList — thin redirect handler for the MCP tool entry point.
|
|
113
|
+
*
|
|
114
|
+
* IMPORTANT — this function is a *redirect notice*, not a real fetch:
|
|
115
|
+
*
|
|
116
|
+
* MCP tool subprocesses cannot invoke Claude Code's built-in TaskList tool.
|
|
117
|
+
* The actual token-savings value lives in the PreToolUse hook
|
|
118
|
+
* (`hooks/pretooluse-task.ts`) which intercepts the *built-in* TaskList call
|
|
119
|
+
* and offers compaction via `processTaskListResults` once Claude has the
|
|
120
|
+
* task data in-context.
|
|
121
|
+
*
|
|
122
|
+
* When the agent calls `ashlr__task_list` directly (no native results in
|
|
123
|
+
* hand), the correct behavior is to nudge it to call Claude Code's
|
|
124
|
+
* built-in TaskList — that's what produces real task data which can then
|
|
125
|
+
* be compacted by the hook flow.
|
|
126
|
+
*
|
|
127
|
+
* Do NOT "implement real fetch" here — there is no subprocess-side fetch
|
|
128
|
+
* available. The compression worker (`processTaskListResults`) is the real
|
|
129
|
+
* implementation; this redirect just wires the MCP entry point.
|
|
130
|
+
*/
|
|
131
|
+
export async function ashlrTaskList(args: TaskListArgs): Promise<string> {
|
|
132
|
+
const { status, owner, limit = 30 } = args;
|
|
133
|
+
|
|
134
|
+
const rawPayload = JSON.stringify({ status, owner, limit, note: "tasklist-redirect" });
|
|
135
|
+
const rawBytes = rawPayload.length;
|
|
136
|
+
|
|
137
|
+
const output = {
|
|
138
|
+
tasks: [] as CompactTaskRow[],
|
|
139
|
+
totalCount: 0,
|
|
140
|
+
droppedCount: 0,
|
|
141
|
+
redirect: "TaskList",
|
|
142
|
+
note:
|
|
143
|
+
"[ashlr__task_list] This MCP tool is a thin nudge — it cannot call the " +
|
|
144
|
+
"built-in TaskList from a subprocess. Call Claude Code's built-in TaskList " +
|
|
145
|
+
"directly. The ashlr PreToolUse hook then routes the *result* through " +
|
|
146
|
+
"processTaskListResults() to compact it (taskId, status, subject ≤80 chars, " +
|
|
147
|
+
"ageMin) and save 50–80% on long task lists. " +
|
|
148
|
+
`Requested filters: status=${status ?? "all"}, owner=${owner ?? "all"}, limit=${limit}.`,
|
|
149
|
+
};
|
|
150
|
+
|
|
151
|
+
const compactJson = JSON.stringify(output);
|
|
152
|
+
const compactBytes = compactJson.length;
|
|
153
|
+
|
|
154
|
+
await recordSavingAccurate({
|
|
155
|
+
rawBytes,
|
|
156
|
+
compactBytes,
|
|
157
|
+
toolName: "ashlr__task_list",
|
|
158
|
+
cacheHit: false,
|
|
159
|
+
});
|
|
160
|
+
|
|
161
|
+
return compactJson;
|
|
162
|
+
}
|
|
163
|
+
|
|
164
|
+
/**
|
|
165
|
+
* Process raw task list results into a compact column view.
|
|
166
|
+
* Exported for tests and for caller-provided result scenarios.
|
|
167
|
+
*/
|
|
168
|
+
export async function processTaskListResults(
|
|
169
|
+
rawTasks: RawTask[],
|
|
170
|
+
opts: TaskListArgs = {},
|
|
171
|
+
): Promise<{
|
|
172
|
+
tasks: CompactTaskRow[];
|
|
173
|
+
totalCount: number;
|
|
174
|
+
droppedCount: number;
|
|
175
|
+
rawBytes: number;
|
|
176
|
+
compactBytes: number;
|
|
177
|
+
}> {
|
|
178
|
+
const { status, owner, limit = 30 } = opts;
|
|
179
|
+
const rawBytes = JSON.stringify(rawTasks).length;
|
|
180
|
+
|
|
181
|
+
// Filter by status.
|
|
182
|
+
let filtered = rawTasks;
|
|
183
|
+
if (status) {
|
|
184
|
+
const s = status.toLowerCase();
|
|
185
|
+
filtered = filtered.filter((t) => getStatus(t) === s);
|
|
186
|
+
}
|
|
187
|
+
|
|
188
|
+
// Filter by owner.
|
|
189
|
+
if (owner) {
|
|
190
|
+
const o = owner.toLowerCase();
|
|
191
|
+
filtered = filtered.filter((t) => getOwner(t).toLowerCase() === o);
|
|
192
|
+
}
|
|
193
|
+
|
|
194
|
+
const totalCount = filtered.length;
|
|
195
|
+
const kept = filtered.slice(0, limit);
|
|
196
|
+
const droppedCount = totalCount - kept.length;
|
|
197
|
+
|
|
198
|
+
const tasks: CompactTaskRow[] = kept.map((t) => ({
|
|
199
|
+
taskId: getTaskId(t),
|
|
200
|
+
status: getStatus(t),
|
|
201
|
+
subject: getSubject(t),
|
|
202
|
+
ageMin: ageMinutes(t),
|
|
203
|
+
}));
|
|
204
|
+
|
|
205
|
+
const output = { tasks, totalCount, droppedCount };
|
|
206
|
+
const compactBytes = JSON.stringify(output).length;
|
|
207
|
+
|
|
208
|
+
await recordSavingAccurate({
|
|
209
|
+
rawBytes,
|
|
210
|
+
compactBytes,
|
|
211
|
+
toolName: "ashlr__task_list",
|
|
212
|
+
cacheHit: false,
|
|
213
|
+
});
|
|
214
|
+
|
|
215
|
+
return { ...output, rawBytes, compactBytes };
|
|
216
|
+
}
|
|
217
|
+
|
|
218
|
+
/**
|
|
219
|
+
* ashlrTaskGet — thin redirect handler for the MCP tool entry point.
|
|
220
|
+
*
|
|
221
|
+
* IMPORTANT — this function is a *redirect notice*, not a real fetch:
|
|
222
|
+
*
|
|
223
|
+
* MCP tool subprocesses cannot invoke Claude Code's built-in TaskGet tool.
|
|
224
|
+
* The actual token-savings value lives in the PreToolUse hook
|
|
225
|
+
* (`hooks/pretooluse-task.ts`) which intercepts the *built-in* TaskGet call
|
|
226
|
+
* and offers description-truncation via `processTaskGetResult` once Claude
|
|
227
|
+
* has the task body in-context.
|
|
228
|
+
*
|
|
229
|
+
* When the agent calls `ashlr__task_get` directly (no native task data in
|
|
230
|
+
* hand), the correct behavior is to nudge it to call Claude Code's
|
|
231
|
+
* built-in TaskGet — that's what produces real task data which can then
|
|
232
|
+
* be compacted by the hook flow.
|
|
233
|
+
*
|
|
234
|
+
* Do NOT "implement real fetch" here — there is no subprocess-side fetch
|
|
235
|
+
* available. The compression worker (`processTaskGetResult`) is the real
|
|
236
|
+
* implementation; this redirect just wires the MCP entry point.
|
|
237
|
+
*/
|
|
238
|
+
export async function ashlrTaskGet(args: TaskGetArgs): Promise<string> {
|
|
239
|
+
const { taskId } = args;
|
|
240
|
+
|
|
241
|
+
const rawPayload = JSON.stringify({ taskId, note: "taskget-redirect" });
|
|
242
|
+
const rawBytes = rawPayload.length;
|
|
243
|
+
|
|
244
|
+
const output = {
|
|
245
|
+
taskId,
|
|
246
|
+
status: "redirect",
|
|
247
|
+
subject: "",
|
|
248
|
+
descriptionCompact: "",
|
|
249
|
+
fullLength: 0,
|
|
250
|
+
redirect: "TaskGet",
|
|
251
|
+
note:
|
|
252
|
+
"[ashlr__task_get] This MCP tool is a thin nudge — it cannot call the " +
|
|
253
|
+
"built-in TaskGet from a subprocess. Call Claude Code's built-in TaskGet " +
|
|
254
|
+
`directly for taskId=${JSON.stringify(taskId)}. The ashlr PreToolUse hook ` +
|
|
255
|
+
"then routes the *result* through processTaskGetResult() to snipCompact " +
|
|
256
|
+
"descriptions > 2KB (head + tail with elision marker), saving tokens on " +
|
|
257
|
+
"long-bodied tasks without losing context bookends.",
|
|
258
|
+
};
|
|
259
|
+
|
|
260
|
+
const compactJson = JSON.stringify(output);
|
|
261
|
+
const compactBytes = compactJson.length;
|
|
262
|
+
|
|
263
|
+
await recordSavingAccurate({
|
|
264
|
+
rawBytes,
|
|
265
|
+
compactBytes,
|
|
266
|
+
toolName: "ashlr__task_get",
|
|
267
|
+
cacheHit: false,
|
|
268
|
+
});
|
|
269
|
+
|
|
270
|
+
return compactJson;
|
|
271
|
+
}
|
|
272
|
+
|
|
273
|
+
/**
|
|
274
|
+
* Process a raw single task into a compact view, truncating the description
|
|
275
|
+
* if it exceeds 2KB.
|
|
276
|
+
* Exported for tests.
|
|
277
|
+
*/
|
|
278
|
+
export async function processTaskGetResult(
|
|
279
|
+
rawTask: RawTask,
|
|
280
|
+
): Promise<{
|
|
281
|
+
taskId: string;
|
|
282
|
+
status: string;
|
|
283
|
+
subject: string;
|
|
284
|
+
descriptionCompact: string;
|
|
285
|
+
fullLength: number;
|
|
286
|
+
rawBytes: number;
|
|
287
|
+
compactBytes: number;
|
|
288
|
+
}> {
|
|
289
|
+
const rawBytes = JSON.stringify(rawTask).length;
|
|
290
|
+
const description = String(rawTask.description ?? "");
|
|
291
|
+
const { text: descriptionCompact, fullLength } = snipCompact(description, 2048);
|
|
292
|
+
|
|
293
|
+
const output = {
|
|
294
|
+
taskId: getTaskId(rawTask),
|
|
295
|
+
status: getStatus(rawTask),
|
|
296
|
+
subject: getSubject(rawTask),
|
|
297
|
+
descriptionCompact,
|
|
298
|
+
fullLength,
|
|
299
|
+
};
|
|
300
|
+
|
|
301
|
+
const compactBytes = JSON.stringify(output).length;
|
|
302
|
+
|
|
303
|
+
await recordSavingAccurate({
|
|
304
|
+
rawBytes,
|
|
305
|
+
compactBytes,
|
|
306
|
+
toolName: "ashlr__task_get",
|
|
307
|
+
cacheHit: false,
|
|
308
|
+
});
|
|
309
|
+
|
|
310
|
+
return { ...output, rawBytes, compactBytes };
|
|
311
|
+
}
|
|
312
|
+
|
|
313
|
+
// ---------------------------------------------------------------------------
|
|
314
|
+
// Registration (side-effect on import)
|
|
315
|
+
// ---------------------------------------------------------------------------
|
|
316
|
+
|
|
317
|
+
registerTool({
|
|
318
|
+
name: "ashlr__task_list",
|
|
319
|
+
description:
|
|
320
|
+
"Token-efficient task list viewer. Filters by status/owner, limits to max rows (default 30), " +
|
|
321
|
+
"and returns a compact column view: taskId, status, subject (80 chars), ageMin. " +
|
|
322
|
+
"Use instead of TaskList to avoid verbose task payloads. " +
|
|
323
|
+
"Args: status (optional filter), owner (optional filter), limit (default 30).",
|
|
324
|
+
inputSchema: {
|
|
325
|
+
type: "object",
|
|
326
|
+
properties: {
|
|
327
|
+
status: { type: "string", description: "Filter by task status (e.g. 'open', 'closed')" },
|
|
328
|
+
owner: { type: "string", description: "Filter by owner/assignee" },
|
|
329
|
+
limit: { type: "number", description: "Max tasks to return (default 30)" },
|
|
330
|
+
},
|
|
331
|
+
required: [],
|
|
332
|
+
},
|
|
333
|
+
handler: async (args: Record<string, unknown>, _ctx: ToolCallContext): Promise<ToolResult> => {
|
|
334
|
+
const text = await ashlrTaskList(args as unknown as TaskListArgs);
|
|
335
|
+
return { content: [{ type: "text", text }] };
|
|
336
|
+
},
|
|
337
|
+
});
|
|
338
|
+
|
|
339
|
+
registerTool({
|
|
340
|
+
name: "ashlr__task_get",
|
|
341
|
+
description:
|
|
342
|
+
"Token-efficient single task viewer. Fetches a task by ID and snipCompacts the description " +
|
|
343
|
+
"if it exceeds 2KB (head + tail with elision marker). " +
|
|
344
|
+
"Returns: taskId, status, subject, descriptionCompact, fullLength. " +
|
|
345
|
+
"Use instead of TaskGet for long-description tasks. " +
|
|
346
|
+
"Args: taskId (required).",
|
|
347
|
+
inputSchema: {
|
|
348
|
+
type: "object",
|
|
349
|
+
properties: {
|
|
350
|
+
taskId: { type: "string", description: "Task ID to retrieve" },
|
|
351
|
+
},
|
|
352
|
+
required: ["taskId"],
|
|
353
|
+
},
|
|
354
|
+
handler: async (args: Record<string, unknown>, _ctx: ToolCallContext): Promise<ToolResult> => {
|
|
355
|
+
const text = await ashlrTaskGet(args as unknown as TaskGetArgs);
|
|
356
|
+
return { content: [{ type: "text", text }] };
|
|
357
|
+
},
|
|
358
|
+
});
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
#!/usr/bin/env bun
|
|
2
|
+
/**
|
|
3
|
+
* ashlr-task MCP server — standalone entry point.
|
|
4
|
+
*
|
|
5
|
+
* Imports task-server-handlers (registers ashlr__task_list + ashlr__task_get
|
|
6
|
+
* into the shared registry) then runs as a standalone stdio MCP server.
|
|
7
|
+
*
|
|
8
|
+
* For in-process router use, import task-server-handlers directly.
|
|
9
|
+
*/
|
|
10
|
+
|
|
11
|
+
import "./task-server-handlers";
|
|
12
|
+
import { runStandalone } from "./_tool-base";
|
|
13
|
+
|
|
14
|
+
// Re-export core logic so tests that import from this module keep working.
|
|
15
|
+
export {
|
|
16
|
+
ashlrTaskList,
|
|
17
|
+
ashlrTaskGet,
|
|
18
|
+
processTaskListResults,
|
|
19
|
+
processTaskGetResult,
|
|
20
|
+
} from "./task-server-handlers";
|
|
21
|
+
|
|
22
|
+
if (import.meta.main) {
|
|
23
|
+
await runStandalone("ashlr-task", "0.1.0");
|
|
24
|
+
}
|