@ashlr/hub 2.2.0
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/CHANGELOG.md +1158 -0
- package/LICENSE +21 -0
- package/README.md +833 -0
- package/bin/ashlr +8 -0
- package/dist/api/core.d.ts +28 -0
- package/dist/api/core.js +42 -0
- package/dist/api/core.js.map +1 -0
- package/dist/api/index.d.ts +9 -0
- package/dist/api/index.js +9 -0
- package/dist/api/index.js.map +1 -0
- package/dist/api/plugin.d.ts +12 -0
- package/dist/api/plugin.js +13 -0
- package/dist/api/plugin.js.map +1 -0
- package/dist/api/types.d.ts +9 -0
- package/dist/api/types.js +9 -0
- package/dist/api/types.js.map +1 -0
- package/dist/cli/args.d.ts +20 -0
- package/dist/cli/args.js +23 -0
- package/dist/cli/args.js.map +1 -0
- package/dist/cli/ask.d.ts +22 -0
- package/dist/cli/ask.js +240 -0
- package/dist/cli/ask.js.map +1 -0
- package/dist/cli/audit.d.ts +26 -0
- package/dist/cli/audit.js +199 -0
- package/dist/cli/audit.js.map +1 -0
- package/dist/cli/backlog.d.ts +26 -0
- package/dist/cli/backlog.js +322 -0
- package/dist/cli/backlog.js.map +1 -0
- package/dist/cli/completions.d.ts +18 -0
- package/dist/cli/completions.js +156 -0
- package/dist/cli/completions.js.map +1 -0
- package/dist/cli/daemon.d.ts +31 -0
- package/dist/cli/daemon.js +334 -0
- package/dist/cli/daemon.js.map +1 -0
- package/dist/cli/demo-sandbox.d.ts +78 -0
- package/dist/cli/demo-sandbox.js +227 -0
- package/dist/cli/demo-sandbox.js.map +1 -0
- package/dist/cli/demo.d.ts +76 -0
- package/dist/cli/demo.js +285 -0
- package/dist/cli/demo.js.map +1 -0
- package/dist/cli/digest.d.ts +46 -0
- package/dist/cli/digest.js +352 -0
- package/dist/cli/digest.js.map +1 -0
- package/dist/cli/doctor-init.d.ts +28 -0
- package/dist/cli/doctor-init.js +335 -0
- package/dist/cli/doctor-init.js.map +1 -0
- package/dist/cli/genome.d.ts +62 -0
- package/dist/cli/genome.js +1061 -0
- package/dist/cli/genome.js.map +1 -0
- package/dist/cli/gh.d.ts +27 -0
- package/dist/cli/gh.js +322 -0
- package/dist/cli/gh.js.map +1 -0
- package/dist/cli/goals.d.ts +55 -0
- package/dist/cli/goals.js +667 -0
- package/dist/cli/goals.js.map +1 -0
- package/dist/cli/health.d.ts +56 -0
- package/dist/cli/health.js +407 -0
- package/dist/cli/health.js.map +1 -0
- package/dist/cli/help.d.ts +51 -0
- package/dist/cli/help.js +436 -0
- package/dist/cli/help.js.map +1 -0
- package/dist/cli/inbox.d.ts +28 -0
- package/dist/cli/inbox.js +589 -0
- package/dist/cli/inbox.js.map +1 -0
- package/dist/cli/index.d.ts +41 -0
- package/dist/cli/index.js +1208 -0
- package/dist/cli/index.js.map +1 -0
- package/dist/cli/knowledge.d.ts +33 -0
- package/dist/cli/knowledge.js +575 -0
- package/dist/cli/knowledge.js.map +1 -0
- package/dist/cli/mcp.d.ts +26 -0
- package/dist/cli/mcp.js +487 -0
- package/dist/cli/mcp.js.map +1 -0
- package/dist/cli/models.d.ts +26 -0
- package/dist/cli/models.js +435 -0
- package/dist/cli/models.js.map +1 -0
- package/dist/cli/new.d.ts +32 -0
- package/dist/cli/new.js +565 -0
- package/dist/cli/new.js.map +1 -0
- package/dist/cli/notify.d.ts +20 -0
- package/dist/cli/notify.js +188 -0
- package/dist/cli/notify.js.map +1 -0
- package/dist/cli/onboard.d.ts +85 -0
- package/dist/cli/onboard.js +305 -0
- package/dist/cli/onboard.js.map +1 -0
- package/dist/cli/open.d.ts +38 -0
- package/dist/cli/open.js +86 -0
- package/dist/cli/open.js.map +1 -0
- package/dist/cli/orient.d.ts +14 -0
- package/dist/cli/orient.js +110 -0
- package/dist/cli/orient.js.map +1 -0
- package/dist/cli/picker.d.ts +21 -0
- package/dist/cli/picker.js +177 -0
- package/dist/cli/picker.js.map +1 -0
- package/dist/cli/plugins.d.ts +21 -0
- package/dist/cli/plugins.js +394 -0
- package/dist/cli/plugins.js.map +1 -0
- package/dist/cli/preflight.d.ts +29 -0
- package/dist/cli/preflight.js +131 -0
- package/dist/cli/preflight.js.map +1 -0
- package/dist/cli/pulse.d.ts +26 -0
- package/dist/cli/pulse.js +482 -0
- package/dist/cli/pulse.js.map +1 -0
- package/dist/cli/reflect.d.ts +42 -0
- package/dist/cli/reflect.js +381 -0
- package/dist/cli/reflect.js.map +1 -0
- package/dist/cli/run.d.ts +29 -0
- package/dist/cli/run.js +687 -0
- package/dist/cli/run.js.map +1 -0
- package/dist/cli/sandbox.d.ts +20 -0
- package/dist/cli/sandbox.js +345 -0
- package/dist/cli/sandbox.js.map +1 -0
- package/dist/cli/seams.d.ts +41 -0
- package/dist/cli/seams.js +167 -0
- package/dist/cli/seams.js.map +1 -0
- package/dist/cli/serve.d.ts +25 -0
- package/dist/cli/serve.js +249 -0
- package/dist/cli/serve.js.map +1 -0
- package/dist/cli/ship.d.ts +33 -0
- package/dist/cli/ship.js +433 -0
- package/dist/cli/ship.js.map +1 -0
- package/dist/cli/spec.d.ts +19 -0
- package/dist/cli/spec.js +478 -0
- package/dist/cli/spec.js.map +1 -0
- package/dist/cli/swarm.d.ts +42 -0
- package/dist/cli/swarm.js +1365 -0
- package/dist/cli/swarm.js.map +1 -0
- package/dist/cli/telemetry.d.ts +26 -0
- package/dist/cli/telemetry.js +364 -0
- package/dist/cli/telemetry.js.map +1 -0
- package/dist/cli/tui.d.ts +17 -0
- package/dist/cli/tui.js +52 -0
- package/dist/cli/tui.js.map +1 -0
- package/dist/cli/ui.d.ts +53 -0
- package/dist/cli/ui.js +66 -0
- package/dist/cli/ui.js.map +1 -0
- package/dist/cli/update.d.ts +38 -0
- package/dist/cli/update.js +682 -0
- package/dist/cli/update.js.map +1 -0
- package/dist/cli/vercel.d.ts +20 -0
- package/dist/cli/vercel.js +193 -0
- package/dist/cli/vercel.js.map +1 -0
- package/dist/cli/verify-safety.d.ts +96 -0
- package/dist/cli/verify-safety.js +509 -0
- package/dist/cli/verify-safety.js.map +1 -0
- package/dist/cli/wire.d.ts +22 -0
- package/dist/cli/wire.js +205 -0
- package/dist/cli/wire.js.map +1 -0
- package/dist/core/classify.d.ts +51 -0
- package/dist/core/classify.js +450 -0
- package/dist/core/classify.js.map +1 -0
- package/dist/core/config.d.ts +63 -0
- package/dist/core/config.js +474 -0
- package/dist/core/config.js.map +1 -0
- package/dist/core/daemon/loop.d.ts +74 -0
- package/dist/core/daemon/loop.js +618 -0
- package/dist/core/daemon/loop.js.map +1 -0
- package/dist/core/daemon/state.d.ts +66 -0
- package/dist/core/daemon/state.js +197 -0
- package/dist/core/daemon/state.js.map +1 -0
- package/dist/core/dashboard.d.ts +40 -0
- package/dist/core/dashboard.js +463 -0
- package/dist/core/dashboard.js.map +1 -0
- package/dist/core/digest/build.d.ts +51 -0
- package/dist/core/digest/build.js +230 -0
- package/dist/core/digest/build.js.map +1 -0
- package/dist/core/digest/deliver.d.ts +47 -0
- package/dist/core/digest/deliver.js +230 -0
- package/dist/core/digest/deliver.js.map +1 -0
- package/dist/core/digest/store.d.ts +57 -0
- package/dist/core/digest/store.js +223 -0
- package/dist/core/digest/store.js.map +1 -0
- package/dist/core/doctor-fix.d.ts +21 -0
- package/dist/core/doctor-fix.js +440 -0
- package/dist/core/doctor-fix.js.map +1 -0
- package/dist/core/doctor.d.ts +18 -0
- package/dist/core/doctor.js +806 -0
- package/dist/core/doctor.js.map +1 -0
- package/dist/core/env-bridge.d.ts +64 -0
- package/dist/core/env-bridge.js +103 -0
- package/dist/core/env-bridge.js.map +1 -0
- package/dist/core/genome/capture.d.ts +49 -0
- package/dist/core/genome/capture.js +352 -0
- package/dist/core/genome/capture.js.map +1 -0
- package/dist/core/genome/consolidate.d.ts +38 -0
- package/dist/core/genome/consolidate.js +426 -0
- package/dist/core/genome/consolidate.js.map +1 -0
- package/dist/core/genome/export.d.ts +29 -0
- package/dist/core/genome/export.js +102 -0
- package/dist/core/genome/export.js.map +1 -0
- package/dist/core/genome/playbook.d.ts +33 -0
- package/dist/core/genome/playbook.js +320 -0
- package/dist/core/genome/playbook.js.map +1 -0
- package/dist/core/genome/recall.d.ts +45 -0
- package/dist/core/genome/recall.js +293 -0
- package/dist/core/genome/recall.js.map +1 -0
- package/dist/core/genome/store.d.ts +62 -0
- package/dist/core/genome/store.js +711 -0
- package/dist/core/genome/store.js.map +1 -0
- package/dist/core/git.d.ts +34 -0
- package/dist/core/git.js +115 -0
- package/dist/core/git.js.map +1 -0
- package/dist/core/goals/advance.d.ts +82 -0
- package/dist/core/goals/advance.js +263 -0
- package/dist/core/goals/advance.js.map +1 -0
- package/dist/core/goals/planner.d.ts +58 -0
- package/dist/core/goals/planner.js +233 -0
- package/dist/core/goals/planner.js.map +1 -0
- package/dist/core/goals/store.d.ts +128 -0
- package/dist/core/goals/store.js +442 -0
- package/dist/core/goals/store.js.map +1 -0
- package/dist/core/inbox/apply.d.ts +36 -0
- package/dist/core/inbox/apply.js +407 -0
- package/dist/core/inbox/apply.js.map +1 -0
- package/dist/core/inbox/notify-proposal.d.ts +13 -0
- package/dist/core/inbox/notify-proposal.js +21 -0
- package/dist/core/inbox/notify-proposal.js.map +1 -0
- package/dist/core/inbox/store.d.ts +67 -0
- package/dist/core/inbox/store.js +258 -0
- package/dist/core/inbox/store.js.map +1 -0
- package/dist/core/index-engine.d.ts +62 -0
- package/dist/core/index-engine.js +486 -0
- package/dist/core/index-engine.js.map +1 -0
- package/dist/core/integrations/desktop-notify.d.ts +18 -0
- package/dist/core/integrations/desktop-notify.js +42 -0
- package/dist/core/integrations/desktop-notify.js.map +1 -0
- package/dist/core/integrations/editors.d.ts +50 -0
- package/dist/core/integrations/editors.js +216 -0
- package/dist/core/integrations/editors.js.map +1 -0
- package/dist/core/integrations/github.d.ts +66 -0
- package/dist/core/integrations/github.js +332 -0
- package/dist/core/integrations/github.js.map +1 -0
- package/dist/core/integrations/identity.d.ts +29 -0
- package/dist/core/integrations/identity.js +359 -0
- package/dist/core/integrations/identity.js.map +1 -0
- package/dist/core/integrations/notify.d.ts +23 -0
- package/dist/core/integrations/notify.js +96 -0
- package/dist/core/integrations/notify.js.map +1 -0
- package/dist/core/integrations/vercel.d.ts +37 -0
- package/dist/core/integrations/vercel.js +192 -0
- package/dist/core/integrations/vercel.js.map +1 -0
- package/dist/core/knowledge/ask.d.ts +34 -0
- package/dist/core/knowledge/ask.js +325 -0
- package/dist/core/knowledge/ask.js.map +1 -0
- package/dist/core/knowledge/graph.d.ts +51 -0
- package/dist/core/knowledge/graph.js +564 -0
- package/dist/core/knowledge/graph.js.map +1 -0
- package/dist/core/knowledge/index.d.ts +74 -0
- package/dist/core/knowledge/index.js +586 -0
- package/dist/core/knowledge/index.js.map +1 -0
- package/dist/core/learn/playbooks.d.ts +84 -0
- package/dist/core/learn/playbooks.js +241 -0
- package/dist/core/learn/playbooks.js.map +1 -0
- package/dist/core/learn/reflect.d.ts +87 -0
- package/dist/core/learn/reflect.js +435 -0
- package/dist/core/learn/reflect.js.map +1 -0
- package/dist/core/learn/store.d.ts +51 -0
- package/dist/core/learn/store.js +165 -0
- package/dist/core/learn/store.js.map +1 -0
- package/dist/core/learn/tuning.d.ts +48 -0
- package/dist/core/learn/tuning.js +201 -0
- package/dist/core/learn/tuning.js.map +1 -0
- package/dist/core/lifecycle/scaffold.d.ts +43 -0
- package/dist/core/lifecycle/scaffold.js +260 -0
- package/dist/core/lifecycle/scaffold.js.map +1 -0
- package/dist/core/lifecycle/ship.d.ts +48 -0
- package/dist/core/lifecycle/ship.js +513 -0
- package/dist/core/lifecycle/ship.js.map +1 -0
- package/dist/core/lifecycle/templates.d.ts +20 -0
- package/dist/core/lifecycle/templates.js +605 -0
- package/dist/core/lifecycle/templates.js.map +1 -0
- package/dist/core/mcp-gateway.d.ts +59 -0
- package/dist/core/mcp-gateway.js +385 -0
- package/dist/core/mcp-gateway.js.map +1 -0
- package/dist/core/mcp-native.d.ts +53 -0
- package/dist/core/mcp-native.js +507 -0
- package/dist/core/mcp-native.js.map +1 -0
- package/dist/core/mcp-registry.d.ts +36 -0
- package/dist/core/mcp-registry.js +180 -0
- package/dist/core/mcp-registry.js.map +1 -0
- package/dist/core/observability/budget-alert.d.ts +18 -0
- package/dist/core/observability/budget-alert.js +90 -0
- package/dist/core/observability/budget-alert.js.map +1 -0
- package/dist/core/observability/estimate.d.ts +27 -0
- package/dist/core/observability/estimate.js +188 -0
- package/dist/core/observability/estimate.js.map +1 -0
- package/dist/core/observability/forecast.d.ts +19 -0
- package/dist/core/observability/forecast.js +101 -0
- package/dist/core/observability/forecast.js.map +1 -0
- package/dist/core/observability/governance.d.ts +28 -0
- package/dist/core/observability/governance.js +101 -0
- package/dist/core/observability/governance.js.map +1 -0
- package/dist/core/observability/otlp.d.ts +88 -0
- package/dist/core/observability/otlp.js +217 -0
- package/dist/core/observability/otlp.js.map +1 -0
- package/dist/core/observability/rollup.d.ts +35 -0
- package/dist/core/observability/rollup.js +311 -0
- package/dist/core/observability/rollup.js.map +1 -0
- package/dist/core/observability/telemetry-sink.d.ts +63 -0
- package/dist/core/observability/telemetry-sink.js +350 -0
- package/dist/core/observability/telemetry-sink.js.map +1 -0
- package/dist/core/observability/usage-source.d.ts +60 -0
- package/dist/core/observability/usage-source.js +347 -0
- package/dist/core/observability/usage-source.js.map +1 -0
- package/dist/core/onboard.d.ts +27 -0
- package/dist/core/onboard.js +288 -0
- package/dist/core/onboard.js.map +1 -0
- package/dist/core/orient.d.ts +23 -0
- package/dist/core/orient.js +135 -0
- package/dist/core/orient.js.map +1 -0
- package/dist/core/phantom.d.ts +23 -0
- package/dist/core/phantom.js +279 -0
- package/dist/core/phantom.js.map +1 -0
- package/dist/core/plugins/host-api.d.ts +29 -0
- package/dist/core/plugins/host-api.js +113 -0
- package/dist/core/plugins/host-api.js.map +1 -0
- package/dist/core/plugins/integrity.d.ts +36 -0
- package/dist/core/plugins/integrity.js +73 -0
- package/dist/core/plugins/integrity.js.map +1 -0
- package/dist/core/plugins/manifest.d.ts +31 -0
- package/dist/core/plugins/manifest.js +316 -0
- package/dist/core/plugins/manifest.js.map +1 -0
- package/dist/core/plugins/registry.d.ts +87 -0
- package/dist/core/plugins/registry.js +415 -0
- package/dist/core/plugins/registry.js.map +1 -0
- package/dist/core/plugins/types.d.ts +182 -0
- package/dist/core/plugins/types.js +40 -0
- package/dist/core/plugins/types.js.map +1 -0
- package/dist/core/plugins/wrappers.d.ts +40 -0
- package/dist/core/plugins/wrappers.js +229 -0
- package/dist/core/plugins/wrappers.js.map +1 -0
- package/dist/core/portfolio/backlog.d.ts +40 -0
- package/dist/core/portfolio/backlog.js +177 -0
- package/dist/core/portfolio/backlog.js.map +1 -0
- package/dist/core/portfolio/scanners.d.ts +21 -0
- package/dist/core/portfolio/scanners.js +600 -0
- package/dist/core/portfolio/scanners.js.map +1 -0
- package/dist/core/providers.d.ts +34 -0
- package/dist/core/providers.js +250 -0
- package/dist/core/providers.js.map +1 -0
- package/dist/core/quality/conventions.d.ts +35 -0
- package/dist/core/quality/conventions.js +267 -0
- package/dist/core/quality/conventions.js.map +1 -0
- package/dist/core/quality/fixes.d.ts +56 -0
- package/dist/core/quality/fixes.js +209 -0
- package/dist/core/quality/fixes.js.map +1 -0
- package/dist/core/quality/health.d.ts +69 -0
- package/dist/core/quality/health.js +350 -0
- package/dist/core/quality/health.js.map +1 -0
- package/dist/core/quality/store.d.ts +56 -0
- package/dist/core/quality/store.js +195 -0
- package/dist/core/quality/store.js.map +1 -0
- package/dist/core/readiness.d.ts +112 -0
- package/dist/core/readiness.js +431 -0
- package/dist/core/readiness.js.map +1 -0
- package/dist/core/run/agent-loop.d.ts +40 -0
- package/dist/core/run/agent-loop.js +291 -0
- package/dist/core/run/agent-loop.js.map +1 -0
- package/dist/core/run/budget.d.ts +47 -0
- package/dist/core/run/budget.js +113 -0
- package/dist/core/run/budget.js.map +1 -0
- package/dist/core/run/engines.d.ts +75 -0
- package/dist/core/run/engines.js +199 -0
- package/dist/core/run/engines.js.map +1 -0
- package/dist/core/run/model-manager.d.ts +64 -0
- package/dist/core/run/model-manager.js +339 -0
- package/dist/core/run/model-manager.js.map +1 -0
- package/dist/core/run/orchestrator.d.ts +100 -0
- package/dist/core/run/orchestrator.js +1515 -0
- package/dist/core/run/orchestrator.js.map +1 -0
- package/dist/core/run/provider-client.d.ts +46 -0
- package/dist/core/run/provider-client.js +796 -0
- package/dist/core/run/provider-client.js.map +1 -0
- package/dist/core/run/retry.d.ts +19 -0
- package/dist/core/run/retry.js +68 -0
- package/dist/core/run/retry.js.map +1 -0
- package/dist/core/run/router.d.ts +50 -0
- package/dist/core/run/router.js +257 -0
- package/dist/core/run/router.js.map +1 -0
- package/dist/core/run/self-heal.d.ts +52 -0
- package/dist/core/run/self-heal.js +181 -0
- package/dist/core/run/self-heal.js.map +1 -0
- package/dist/core/run/streaming.d.ts +31 -0
- package/dist/core/run/streaming.js +122 -0
- package/dist/core/run/streaming.js.map +1 -0
- package/dist/core/run/verify.d.ts +30 -0
- package/dist/core/run/verify.js +204 -0
- package/dist/core/run/verify.js.map +1 -0
- package/dist/core/sandbox/audit.d.ts +31 -0
- package/dist/core/sandbox/audit.js +169 -0
- package/dist/core/sandbox/audit.js.map +1 -0
- package/dist/core/sandbox/policy.d.ts +61 -0
- package/dist/core/sandbox/policy.js +211 -0
- package/dist/core/sandbox/policy.js.map +1 -0
- package/dist/core/sandbox/worktree.d.ts +175 -0
- package/dist/core/sandbox/worktree.js +673 -0
- package/dist/core/sandbox/worktree.js.map +1 -0
- package/dist/core/seams/backlog.d.ts +47 -0
- package/dist/core/seams/backlog.js +47 -0
- package/dist/core/seams/backlog.js.map +1 -0
- package/dist/core/seams/daemon-coordinator.d.ts +72 -0
- package/dist/core/seams/daemon-coordinator.js +76 -0
- package/dist/core/seams/daemon-coordinator.js.map +1 -0
- package/dist/core/seams/genome.d.ts +45 -0
- package/dist/core/seams/genome.js +53 -0
- package/dist/core/seams/genome.js.map +1 -0
- package/dist/core/seams/identity.d.ts +40 -0
- package/dist/core/seams/identity.js +44 -0
- package/dist/core/seams/identity.js.map +1 -0
- package/dist/core/seams/inbox.d.ts +60 -0
- package/dist/core/seams/inbox.js +66 -0
- package/dist/core/seams/inbox.js.map +1 -0
- package/dist/core/seams/index.d.ts +20 -0
- package/dist/core/seams/index.js +21 -0
- package/dist/core/seams/index.js.map +1 -0
- package/dist/core/seams/portfolio.d.ts +50 -0
- package/dist/core/seams/portfolio.js +61 -0
- package/dist/core/seams/portfolio.js.map +1 -0
- package/dist/core/seams/registry.d.ts +42 -0
- package/dist/core/seams/registry.js +128 -0
- package/dist/core/seams/registry.js.map +1 -0
- package/dist/core/seams/run-swarm.d.ts +66 -0
- package/dist/core/seams/run-swarm.js +74 -0
- package/dist/core/seams/run-swarm.js.map +1 -0
- package/dist/core/seams/types.d.ts +123 -0
- package/dist/core/seams/types.js +35 -0
- package/dist/core/seams/types.js.map +1 -0
- package/dist/core/spec/spec-store.d.ts +62 -0
- package/dist/core/spec/spec-store.js +359 -0
- package/dist/core/spec/spec-store.js.map +1 -0
- package/dist/core/swarm/gate.d.ts +45 -0
- package/dist/core/swarm/gate.js +114 -0
- package/dist/core/swarm/gate.js.map +1 -0
- package/dist/core/swarm/planner.d.ts +32 -0
- package/dist/core/swarm/planner.js +293 -0
- package/dist/core/swarm/planner.js.map +1 -0
- package/dist/core/swarm/rollback.d.ts +56 -0
- package/dist/core/swarm/rollback.js +266 -0
- package/dist/core/swarm/rollback.js.map +1 -0
- package/dist/core/swarm/runner.d.ts +62 -0
- package/dist/core/swarm/runner.js +1263 -0
- package/dist/core/swarm/runner.js.map +1 -0
- package/dist/core/swarm/sign.d.ts +71 -0
- package/dist/core/swarm/sign.js +362 -0
- package/dist/core/swarm/sign.js.map +1 -0
- package/dist/core/swarm/store.d.ts +52 -0
- package/dist/core/swarm/store.js +195 -0
- package/dist/core/swarm/store.js.map +1 -0
- package/dist/core/tidy.d.ts +32 -0
- package/dist/core/tidy.js +354 -0
- package/dist/core/tidy.js.map +1 -0
- package/dist/core/tools-registry.d.ts +16 -0
- package/dist/core/tools-registry.js +308 -0
- package/dist/core/tools-registry.js.map +1 -0
- package/dist/core/types.d.ts +2545 -0
- package/dist/core/types.js +9 -0
- package/dist/core/types.js.map +1 -0
- package/dist/core/web/api.d.ts +53 -0
- package/dist/core/web/api.js +698 -0
- package/dist/core/web/api.js.map +1 -0
- package/dist/core/web/public/app.js +1906 -0
- package/dist/core/web/public/index.html +721 -0
- package/dist/core/web/public/styles.css +2007 -0
- package/dist/core/web/server.d.ts +18 -0
- package/dist/core/web/server.js +122 -0
- package/dist/core/web/server.js.map +1 -0
- package/dist/core/web/static.d.ts +18 -0
- package/dist/core/web/static.js +122 -0
- package/dist/core/web/static.js.map +1 -0
- package/dist/tui/app.d.ts +33 -0
- package/dist/tui/app.js +350 -0
- package/dist/tui/app.js.map +1 -0
- package/dist/tui/render.d.ts +20 -0
- package/dist/tui/render.js +558 -0
- package/dist/tui/render.js.map +1 -0
- package/package.json +80 -0
- package/schema/config.schema.json +223 -0
|
@@ -0,0 +1,605 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* M6: Project Lifecycle — Template Registry
|
|
3
|
+
*
|
|
4
|
+
* Four agentic-engineering starter templates for `ashlr new`.
|
|
5
|
+
* Pure data module — no filesystem or network access.
|
|
6
|
+
*/
|
|
7
|
+
// ---------------------------------------------------------------------------
|
|
8
|
+
// Shared helpers — common files every template includes
|
|
9
|
+
// ---------------------------------------------------------------------------
|
|
10
|
+
function claudeMd(name, category, stack) {
|
|
11
|
+
return {
|
|
12
|
+
path: 'CLAUDE.md',
|
|
13
|
+
content: `# ${name}
|
|
14
|
+
|
|
15
|
+
> Category: \`${category}\` · Stack: \`${stack}\`
|
|
16
|
+
|
|
17
|
+
## About This Project
|
|
18
|
+
|
|
19
|
+
This project was scaffolded with **ashlr** — a local-first agentic engineering hub.
|
|
20
|
+
All AI-assisted work on this repo is wired through the **ashlr gateway** (see \`.mcp.json\`).
|
|
21
|
+
|
|
22
|
+
## Agentic Engineering Conventions
|
|
23
|
+
|
|
24
|
+
- **local-first via ashlr**: prefer local models; cloud fallback only when needed.
|
|
25
|
+
- **genome stubs** live in \`.ashlrcode/genome/\` — update them as patterns emerge.
|
|
26
|
+
- One logical change per commit; keep commits small and descriptive.
|
|
27
|
+
- All new modules get a \`// M: <purpose>\` header comment.
|
|
28
|
+
- Prefer explicit types over inference at module boundaries.
|
|
29
|
+
|
|
30
|
+
## Quick Start
|
|
31
|
+
|
|
32
|
+
\`\`\`bash
|
|
33
|
+
# Install dependencies
|
|
34
|
+
npm install
|
|
35
|
+
|
|
36
|
+
# Run tests
|
|
37
|
+
npm test
|
|
38
|
+
|
|
39
|
+
# Build
|
|
40
|
+
npm run build
|
|
41
|
+
\`\`\`
|
|
42
|
+
|
|
43
|
+
## Session Tracking
|
|
44
|
+
|
|
45
|
+
Sessions are captured automatically via \`entire\` on every commit.
|
|
46
|
+
Use \`entire resume <branch>\` when picking up prior work.
|
|
47
|
+
`,
|
|
48
|
+
};
|
|
49
|
+
}
|
|
50
|
+
function mcpJson() {
|
|
51
|
+
return {
|
|
52
|
+
path: '.mcp.json',
|
|
53
|
+
content: JSON.stringify({
|
|
54
|
+
mcpServers: {
|
|
55
|
+
ashlr: {
|
|
56
|
+
command: 'ashlr',
|
|
57
|
+
args: ['mcp'],
|
|
58
|
+
},
|
|
59
|
+
},
|
|
60
|
+
}, null, 2) + '\n',
|
|
61
|
+
};
|
|
62
|
+
}
|
|
63
|
+
function genomeGitkeep() {
|
|
64
|
+
return {
|
|
65
|
+
path: '.ashlrcode/genome/.gitkeep',
|
|
66
|
+
content: '',
|
|
67
|
+
};
|
|
68
|
+
}
|
|
69
|
+
function gitignore(extras = []) {
|
|
70
|
+
const lines = ['node_modules/', 'dist/', ...extras, ''];
|
|
71
|
+
return {
|
|
72
|
+
path: '.gitignore',
|
|
73
|
+
content: lines.join('\n'),
|
|
74
|
+
};
|
|
75
|
+
}
|
|
76
|
+
// ---------------------------------------------------------------------------
|
|
77
|
+
// Template: minimal
|
|
78
|
+
// ---------------------------------------------------------------------------
|
|
79
|
+
const minimalTemplate = {
|
|
80
|
+
id: 'minimal',
|
|
81
|
+
title: 'Minimal',
|
|
82
|
+
description: 'README, .gitignore, and CLAUDE.md only — a blank agentic-engineering slate.',
|
|
83
|
+
files({ name, category }) {
|
|
84
|
+
return [
|
|
85
|
+
{
|
|
86
|
+
path: 'README.md',
|
|
87
|
+
content: `# ${name}\n\n> Category: \`${category}\`\n\nA minimal project scaffolded with [ashlr](https://github.com/ashlrai/ashlr-hub).\n`,
|
|
88
|
+
},
|
|
89
|
+
{
|
|
90
|
+
path: 'package.json',
|
|
91
|
+
content: JSON.stringify({
|
|
92
|
+
name,
|
|
93
|
+
version: '0.1.0',
|
|
94
|
+
description: `${name} — a minimal project scaffolded with ashlr`,
|
|
95
|
+
type: 'module',
|
|
96
|
+
private: true,
|
|
97
|
+
}, null, 2) + '\n',
|
|
98
|
+
},
|
|
99
|
+
gitignore(),
|
|
100
|
+
claudeMd(name, category, 'minimal'),
|
|
101
|
+
mcpJson(),
|
|
102
|
+
genomeGitkeep(),
|
|
103
|
+
];
|
|
104
|
+
},
|
|
105
|
+
};
|
|
106
|
+
// ---------------------------------------------------------------------------
|
|
107
|
+
// Template: node-cli
|
|
108
|
+
// ---------------------------------------------------------------------------
|
|
109
|
+
const nodeCliTemplate = {
|
|
110
|
+
id: 'node-cli',
|
|
111
|
+
title: 'Node CLI',
|
|
112
|
+
description: 'TypeScript ESM CLI with bin entry, tsconfig, vitest, and an ashlr-hub-lite layout.',
|
|
113
|
+
files({ name, category }) {
|
|
114
|
+
return [
|
|
115
|
+
{
|
|
116
|
+
path: 'README.md',
|
|
117
|
+
content: `# ${name}
|
|
118
|
+
|
|
119
|
+
> Category: \`${category}\` · Stack: \`node-cli\`
|
|
120
|
+
|
|
121
|
+
A TypeScript ESM CLI scaffolded with [ashlr](https://github.com/ashlrai/ashlr-hub).
|
|
122
|
+
|
|
123
|
+
## Usage
|
|
124
|
+
|
|
125
|
+
\`\`\`bash
|
|
126
|
+
npm install
|
|
127
|
+
npm run build
|
|
128
|
+
node dist/index.js --help
|
|
129
|
+
\`\`\`
|
|
130
|
+
|
|
131
|
+
## Scripts
|
|
132
|
+
|
|
133
|
+
| Script | Purpose |
|
|
134
|
+
|--------|---------|
|
|
135
|
+
| \`npm run build\` | Compile TypeScript to \`dist/\` |
|
|
136
|
+
| \`npm test\` | Run vitest suite |
|
|
137
|
+
| \`npm run typecheck\` | Type-check without emitting |
|
|
138
|
+
| \`npm run lint\` | ESLint |
|
|
139
|
+
`,
|
|
140
|
+
},
|
|
141
|
+
{
|
|
142
|
+
path: 'package.json',
|
|
143
|
+
content: JSON.stringify({
|
|
144
|
+
name,
|
|
145
|
+
version: '0.1.0',
|
|
146
|
+
description: `${name} CLI`,
|
|
147
|
+
type: 'module',
|
|
148
|
+
bin: {
|
|
149
|
+
[name]: './dist/index.js',
|
|
150
|
+
},
|
|
151
|
+
main: './dist/index.js',
|
|
152
|
+
scripts: {
|
|
153
|
+
build: 'tsc',
|
|
154
|
+
test: 'vitest run',
|
|
155
|
+
typecheck: 'tsc --noEmit',
|
|
156
|
+
lint: 'eslint src',
|
|
157
|
+
},
|
|
158
|
+
devDependencies: {
|
|
159
|
+
typescript: '^5.4.0',
|
|
160
|
+
vitest: '^1.6.0',
|
|
161
|
+
'@typescript-eslint/eslint-plugin': '^7.0.0',
|
|
162
|
+
'@typescript-eslint/parser': '^7.0.0',
|
|
163
|
+
eslint: '^8.57.0',
|
|
164
|
+
},
|
|
165
|
+
}, null, 2) + '\n',
|
|
166
|
+
},
|
|
167
|
+
{
|
|
168
|
+
path: 'tsconfig.json',
|
|
169
|
+
content: JSON.stringify({
|
|
170
|
+
compilerOptions: {
|
|
171
|
+
target: 'ES2022',
|
|
172
|
+
module: 'NodeNext',
|
|
173
|
+
moduleResolution: 'NodeNext',
|
|
174
|
+
outDir: './dist',
|
|
175
|
+
rootDir: './src',
|
|
176
|
+
strict: true,
|
|
177
|
+
skipLibCheck: true,
|
|
178
|
+
declaration: true,
|
|
179
|
+
declarationMap: true,
|
|
180
|
+
sourceMap: true,
|
|
181
|
+
},
|
|
182
|
+
include: ['src'],
|
|
183
|
+
exclude: ['node_modules', 'dist'],
|
|
184
|
+
}, null, 2) + '\n',
|
|
185
|
+
},
|
|
186
|
+
{
|
|
187
|
+
path: 'src/index.ts',
|
|
188
|
+
content: `#!/usr/bin/env node
|
|
189
|
+
/**
|
|
190
|
+
* ${name} — entry point
|
|
191
|
+
*/
|
|
192
|
+
|
|
193
|
+
const [,, ...args] = process.argv;
|
|
194
|
+
|
|
195
|
+
if (args.includes('--help') || args.includes('-h')) {
|
|
196
|
+
console.log(\`${name} — a CLI tool\\n\\nUsage: ${name} [options]\\n\\nOptions:\\n --help, -h Show this help\`);
|
|
197
|
+
process.exit(0);
|
|
198
|
+
}
|
|
199
|
+
|
|
200
|
+
console.log(\`Hello from ${name}!\`);
|
|
201
|
+
`,
|
|
202
|
+
mode: 0o755,
|
|
203
|
+
},
|
|
204
|
+
{
|
|
205
|
+
path: 'src/index.test.ts',
|
|
206
|
+
content: `import { describe, it, expect } from 'vitest';
|
|
207
|
+
|
|
208
|
+
describe('${name}', () => {
|
|
209
|
+
it('placeholder passes', () => {
|
|
210
|
+
expect(true).toBe(true);
|
|
211
|
+
});
|
|
212
|
+
});
|
|
213
|
+
`,
|
|
214
|
+
},
|
|
215
|
+
gitignore(['*.tsbuildinfo']),
|
|
216
|
+
claudeMd(name, category, 'node-cli'),
|
|
217
|
+
mcpJson(),
|
|
218
|
+
genomeGitkeep(),
|
|
219
|
+
];
|
|
220
|
+
},
|
|
221
|
+
};
|
|
222
|
+
// ---------------------------------------------------------------------------
|
|
223
|
+
// Template: mcp-server
|
|
224
|
+
// ---------------------------------------------------------------------------
|
|
225
|
+
const mcpServerTemplate = {
|
|
226
|
+
id: 'mcp-server',
|
|
227
|
+
title: 'MCP Server',
|
|
228
|
+
description: 'Minimal @modelcontextprotocol/sdk stdio server skeleton with TypeScript ESM.',
|
|
229
|
+
files({ name, category }) {
|
|
230
|
+
return [
|
|
231
|
+
{
|
|
232
|
+
path: 'README.md',
|
|
233
|
+
content: `# ${name}
|
|
234
|
+
|
|
235
|
+
> Category: \`${category}\` · Stack: \`mcp-server\`
|
|
236
|
+
|
|
237
|
+
A minimal MCP (Model Context Protocol) stdio server scaffolded with [ashlr](https://github.com/ashlrai/ashlr-hub).
|
|
238
|
+
|
|
239
|
+
## Usage
|
|
240
|
+
|
|
241
|
+
\`\`\`bash
|
|
242
|
+
npm install
|
|
243
|
+
npm run build
|
|
244
|
+
node dist/server.js
|
|
245
|
+
\`\`\`
|
|
246
|
+
|
|
247
|
+
Wire into a Claude Code project via \`.mcp.json\`:
|
|
248
|
+
|
|
249
|
+
\`\`\`json
|
|
250
|
+
{
|
|
251
|
+
"mcpServers": {
|
|
252
|
+
"${name}": {
|
|
253
|
+
"command": "node",
|
|
254
|
+
"args": ["path/to/${name}/dist/server.js"]
|
|
255
|
+
}
|
|
256
|
+
}
|
|
257
|
+
}
|
|
258
|
+
\`\`\`
|
|
259
|
+
|
|
260
|
+
## Scripts
|
|
261
|
+
|
|
262
|
+
| Script | Purpose |
|
|
263
|
+
|--------|---------|
|
|
264
|
+
| \`npm run build\` | Compile TypeScript to \`dist/\` |
|
|
265
|
+
| \`npm test\` | Run vitest suite |
|
|
266
|
+
| \`npm run typecheck\` | Type-check without emitting |
|
|
267
|
+
`,
|
|
268
|
+
},
|
|
269
|
+
{
|
|
270
|
+
path: 'package.json',
|
|
271
|
+
content: JSON.stringify({
|
|
272
|
+
name,
|
|
273
|
+
version: '0.1.0',
|
|
274
|
+
description: `${name} MCP server`,
|
|
275
|
+
type: 'module',
|
|
276
|
+
main: './dist/server.js',
|
|
277
|
+
scripts: {
|
|
278
|
+
build: 'tsc',
|
|
279
|
+
test: 'vitest run',
|
|
280
|
+
typecheck: 'tsc --noEmit',
|
|
281
|
+
start: 'node dist/server.js',
|
|
282
|
+
},
|
|
283
|
+
dependencies: {
|
|
284
|
+
'@modelcontextprotocol/sdk': '^1.0.0',
|
|
285
|
+
},
|
|
286
|
+
devDependencies: {
|
|
287
|
+
typescript: '^5.4.0',
|
|
288
|
+
vitest: '^1.6.0',
|
|
289
|
+
},
|
|
290
|
+
}, null, 2) + '\n',
|
|
291
|
+
},
|
|
292
|
+
{
|
|
293
|
+
path: 'tsconfig.json',
|
|
294
|
+
content: JSON.stringify({
|
|
295
|
+
compilerOptions: {
|
|
296
|
+
target: 'ES2022',
|
|
297
|
+
module: 'NodeNext',
|
|
298
|
+
moduleResolution: 'NodeNext',
|
|
299
|
+
outDir: './dist',
|
|
300
|
+
rootDir: './src',
|
|
301
|
+
strict: true,
|
|
302
|
+
skipLibCheck: true,
|
|
303
|
+
declaration: true,
|
|
304
|
+
sourceMap: true,
|
|
305
|
+
},
|
|
306
|
+
include: ['src'],
|
|
307
|
+
exclude: ['node_modules', 'dist'],
|
|
308
|
+
}, null, 2) + '\n',
|
|
309
|
+
},
|
|
310
|
+
{
|
|
311
|
+
path: 'src/server.ts',
|
|
312
|
+
content: `/**
|
|
313
|
+
* ${name} — MCP stdio server entry point
|
|
314
|
+
*
|
|
315
|
+
* Skeleton using @modelcontextprotocol/sdk.
|
|
316
|
+
* Add your tools, resources, and prompts below.
|
|
317
|
+
*/
|
|
318
|
+
|
|
319
|
+
import { Server } from '@modelcontextprotocol/sdk/server/index.js';
|
|
320
|
+
import { StdioServerTransport } from '@modelcontextprotocol/sdk/server/stdio.js';
|
|
321
|
+
import {
|
|
322
|
+
CallToolRequestSchema,
|
|
323
|
+
ListToolsRequestSchema,
|
|
324
|
+
} from '@modelcontextprotocol/sdk/types.js';
|
|
325
|
+
|
|
326
|
+
const server = new Server(
|
|
327
|
+
{ name: '${name}', version: '0.1.0' },
|
|
328
|
+
{ capabilities: { tools: {} } },
|
|
329
|
+
);
|
|
330
|
+
|
|
331
|
+
// ---------------------------------------------------------------------------
|
|
332
|
+
// Tools
|
|
333
|
+
// ---------------------------------------------------------------------------
|
|
334
|
+
|
|
335
|
+
server.setRequestHandler(ListToolsRequestSchema, async () => ({
|
|
336
|
+
tools: [
|
|
337
|
+
{
|
|
338
|
+
name: 'hello',
|
|
339
|
+
description: 'A starter tool — returns a greeting.',
|
|
340
|
+
inputSchema: {
|
|
341
|
+
type: 'object' as const,
|
|
342
|
+
properties: {
|
|
343
|
+
name: { type: 'string', description: 'Name to greet' },
|
|
344
|
+
},
|
|
345
|
+
},
|
|
346
|
+
},
|
|
347
|
+
],
|
|
348
|
+
}));
|
|
349
|
+
|
|
350
|
+
server.setRequestHandler(CallToolRequestSchema, async (request) => {
|
|
351
|
+
const { name: toolName, arguments: args } = request.params;
|
|
352
|
+
|
|
353
|
+
if (toolName === 'hello') {
|
|
354
|
+
const who = (args as { name?: string }).name ?? 'world';
|
|
355
|
+
return {
|
|
356
|
+
content: [{ type: 'text', text: \`Hello, \${who}! From ${name} MCP server.\` }],
|
|
357
|
+
};
|
|
358
|
+
}
|
|
359
|
+
|
|
360
|
+
throw new Error(\`Unknown tool: \${toolName}\`);
|
|
361
|
+
});
|
|
362
|
+
|
|
363
|
+
// ---------------------------------------------------------------------------
|
|
364
|
+
// Start
|
|
365
|
+
// ---------------------------------------------------------------------------
|
|
366
|
+
|
|
367
|
+
const transport = new StdioServerTransport();
|
|
368
|
+
await server.connect(transport);
|
|
369
|
+
`,
|
|
370
|
+
mode: 0o755,
|
|
371
|
+
},
|
|
372
|
+
{
|
|
373
|
+
path: 'src/server.test.ts',
|
|
374
|
+
content: `import { describe, it, expect } from 'vitest';
|
|
375
|
+
|
|
376
|
+
describe('${name} server', () => {
|
|
377
|
+
it('placeholder passes', () => {
|
|
378
|
+
expect(true).toBe(true);
|
|
379
|
+
});
|
|
380
|
+
});
|
|
381
|
+
`,
|
|
382
|
+
},
|
|
383
|
+
gitignore(['*.tsbuildinfo']),
|
|
384
|
+
claudeMd(name, category, 'mcp-server'),
|
|
385
|
+
mcpJson(),
|
|
386
|
+
genomeGitkeep(),
|
|
387
|
+
];
|
|
388
|
+
},
|
|
389
|
+
};
|
|
390
|
+
// ---------------------------------------------------------------------------
|
|
391
|
+
// Template: next-app
|
|
392
|
+
// ---------------------------------------------------------------------------
|
|
393
|
+
const nextAppTemplate = {
|
|
394
|
+
id: 'next-app',
|
|
395
|
+
title: 'Next.js App',
|
|
396
|
+
description: 'Minimal Next.js 14 App Router project with TypeScript and Tailwind CSS.',
|
|
397
|
+
files({ name, category }) {
|
|
398
|
+
return [
|
|
399
|
+
{
|
|
400
|
+
path: 'README.md',
|
|
401
|
+
content: `# ${name}
|
|
402
|
+
|
|
403
|
+
> Category: \`${category}\` · Stack: \`next-app\`
|
|
404
|
+
|
|
405
|
+
A minimal Next.js 14 application scaffolded with [ashlr](https://github.com/ashlrai/ashlr-hub).
|
|
406
|
+
|
|
407
|
+
## Usage
|
|
408
|
+
|
|
409
|
+
\`\`\`bash
|
|
410
|
+
npm install
|
|
411
|
+
npm run dev
|
|
412
|
+
\`\`\`
|
|
413
|
+
|
|
414
|
+
Open [http://localhost:3000](http://localhost:3000).
|
|
415
|
+
|
|
416
|
+
## Scripts
|
|
417
|
+
|
|
418
|
+
| Script | Purpose |
|
|
419
|
+
|--------|---------|
|
|
420
|
+
| \`npm run dev\` | Start development server |
|
|
421
|
+
| \`npm run build\` | Production build |
|
|
422
|
+
| \`npm start\` | Start production server |
|
|
423
|
+
| \`npm run lint\` | ESLint |
|
|
424
|
+
`,
|
|
425
|
+
},
|
|
426
|
+
{
|
|
427
|
+
path: 'package.json',
|
|
428
|
+
content: JSON.stringify({
|
|
429
|
+
name,
|
|
430
|
+
version: '0.1.0',
|
|
431
|
+
description: `${name} Next.js app`,
|
|
432
|
+
private: true,
|
|
433
|
+
scripts: {
|
|
434
|
+
dev: 'next dev',
|
|
435
|
+
build: 'next build',
|
|
436
|
+
start: 'next start',
|
|
437
|
+
lint: 'next lint',
|
|
438
|
+
},
|
|
439
|
+
dependencies: {
|
|
440
|
+
next: '^14.2.0',
|
|
441
|
+
react: '^18.3.0',
|
|
442
|
+
'react-dom': '^18.3.0',
|
|
443
|
+
},
|
|
444
|
+
devDependencies: {
|
|
445
|
+
typescript: '^5.4.0',
|
|
446
|
+
'@types/node': '^20.0.0',
|
|
447
|
+
'@types/react': '^18.3.0',
|
|
448
|
+
'@types/react-dom': '^18.3.0',
|
|
449
|
+
tailwindcss: '^3.4.0',
|
|
450
|
+
autoprefixer: '^10.4.0',
|
|
451
|
+
postcss: '^8.4.0',
|
|
452
|
+
eslint: '^8.57.0',
|
|
453
|
+
'eslint-config-next': '^14.2.0',
|
|
454
|
+
},
|
|
455
|
+
}, null, 2) + '\n',
|
|
456
|
+
},
|
|
457
|
+
{
|
|
458
|
+
path: 'tsconfig.json',
|
|
459
|
+
content: JSON.stringify({
|
|
460
|
+
compilerOptions: {
|
|
461
|
+
target: 'ES2017',
|
|
462
|
+
lib: ['dom', 'dom.iterable', 'esnext'],
|
|
463
|
+
allowJs: true,
|
|
464
|
+
skipLibCheck: true,
|
|
465
|
+
strict: true,
|
|
466
|
+
noEmit: true,
|
|
467
|
+
esModuleInterop: true,
|
|
468
|
+
module: 'esnext',
|
|
469
|
+
moduleResolution: 'bundler',
|
|
470
|
+
resolveJsonModule: true,
|
|
471
|
+
isolatedModules: true,
|
|
472
|
+
jsx: 'preserve',
|
|
473
|
+
incremental: true,
|
|
474
|
+
plugins: [{ name: 'next' }],
|
|
475
|
+
paths: { '@/*': ['./src/*'] },
|
|
476
|
+
},
|
|
477
|
+
include: ['next-env.d.ts', '**/*.ts', '**/*.tsx', '.next/types/**/*.ts'],
|
|
478
|
+
exclude: ['node_modules'],
|
|
479
|
+
}, null, 2) + '\n',
|
|
480
|
+
},
|
|
481
|
+
{
|
|
482
|
+
path: 'next.config.ts',
|
|
483
|
+
content: `import type { NextConfig } from 'next';
|
|
484
|
+
|
|
485
|
+
const nextConfig: NextConfig = {
|
|
486
|
+
// Add your Next.js config here
|
|
487
|
+
};
|
|
488
|
+
|
|
489
|
+
export default nextConfig;
|
|
490
|
+
`,
|
|
491
|
+
},
|
|
492
|
+
{
|
|
493
|
+
path: 'src/app/layout.tsx',
|
|
494
|
+
content: `import type { Metadata } from 'next';
|
|
495
|
+
|
|
496
|
+
export const metadata: Metadata = {
|
|
497
|
+
title: '${name}',
|
|
498
|
+
description: '${name} — scaffolded with ashlr',
|
|
499
|
+
};
|
|
500
|
+
|
|
501
|
+
export default function RootLayout({
|
|
502
|
+
children,
|
|
503
|
+
}: {
|
|
504
|
+
children: React.ReactNode;
|
|
505
|
+
}) {
|
|
506
|
+
return (
|
|
507
|
+
<html lang="en">
|
|
508
|
+
<body>{children}</body>
|
|
509
|
+
</html>
|
|
510
|
+
);
|
|
511
|
+
}
|
|
512
|
+
`,
|
|
513
|
+
},
|
|
514
|
+
{
|
|
515
|
+
path: 'src/app/page.tsx',
|
|
516
|
+
content: `export default function Home() {
|
|
517
|
+
return (
|
|
518
|
+
<main>
|
|
519
|
+
<h1>${name}</h1>
|
|
520
|
+
<p>Scaffolded with <strong>ashlr</strong>. Start editing <code>src/app/page.tsx</code>.</p>
|
|
521
|
+
</main>
|
|
522
|
+
);
|
|
523
|
+
}
|
|
524
|
+
`,
|
|
525
|
+
},
|
|
526
|
+
{
|
|
527
|
+
path: 'src/app/globals.css',
|
|
528
|
+
content: `@tailwind base;
|
|
529
|
+
@tailwind components;
|
|
530
|
+
@tailwind utilities;
|
|
531
|
+
`,
|
|
532
|
+
},
|
|
533
|
+
{
|
|
534
|
+
path: 'tailwind.config.ts',
|
|
535
|
+
content: `import type { Config } from 'tailwindcss';
|
|
536
|
+
|
|
537
|
+
const config: Config = {
|
|
538
|
+
content: [
|
|
539
|
+
'./src/pages/**/*.{js,ts,jsx,tsx,mdx}',
|
|
540
|
+
'./src/components/**/*.{js,ts,jsx,tsx,mdx}',
|
|
541
|
+
'./src/app/**/*.{js,ts,jsx,tsx,mdx}',
|
|
542
|
+
],
|
|
543
|
+
theme: {
|
|
544
|
+
extend: {},
|
|
545
|
+
},
|
|
546
|
+
plugins: [],
|
|
547
|
+
};
|
|
548
|
+
|
|
549
|
+
export default config;
|
|
550
|
+
`,
|
|
551
|
+
},
|
|
552
|
+
{
|
|
553
|
+
path: 'postcss.config.js',
|
|
554
|
+
content: `export default {
|
|
555
|
+
plugins: {
|
|
556
|
+
tailwindcss: {},
|
|
557
|
+
autoprefixer: {},
|
|
558
|
+
},
|
|
559
|
+
};
|
|
560
|
+
`,
|
|
561
|
+
},
|
|
562
|
+
{
|
|
563
|
+
path: '.eslintrc.json',
|
|
564
|
+
content: JSON.stringify({ extends: 'next/core-web-vitals' }, null, 2) + '\n',
|
|
565
|
+
},
|
|
566
|
+
gitignore(['.next/', 'out/', '*.tsbuildinfo', '.env*.local']),
|
|
567
|
+
claudeMd(name, category, 'next-app'),
|
|
568
|
+
mcpJson(),
|
|
569
|
+
genomeGitkeep(),
|
|
570
|
+
];
|
|
571
|
+
},
|
|
572
|
+
};
|
|
573
|
+
// ---------------------------------------------------------------------------
|
|
574
|
+
// Registry
|
|
575
|
+
// ---------------------------------------------------------------------------
|
|
576
|
+
export const TEMPLATES = [
|
|
577
|
+
nodeCliTemplate,
|
|
578
|
+
mcpServerTemplate,
|
|
579
|
+
nextAppTemplate,
|
|
580
|
+
minimalTemplate,
|
|
581
|
+
];
|
|
582
|
+
/**
|
|
583
|
+
* M33: builtin TEMPLATES + validated templates from enabled plugins.
|
|
584
|
+
* Best-effort: a broken plugin layer yields the builtins only. Plugin
|
|
585
|
+
* template ids arrive prefixed `<plugin>:<id>` (wrappers.validateTemplate).
|
|
586
|
+
*/
|
|
587
|
+
export async function getTemplates(cfg) {
|
|
588
|
+
let fromPlugins = [];
|
|
589
|
+
try {
|
|
590
|
+
const { loadConfig } = await import('../config.js');
|
|
591
|
+
const { getPluginTemplates } = await import('../plugins/registry.js');
|
|
592
|
+
fromPlugins = await getPluginTemplates(cfg ?? loadConfig());
|
|
593
|
+
}
|
|
594
|
+
catch {
|
|
595
|
+
fromPlugins = [];
|
|
596
|
+
}
|
|
597
|
+
return [...TEMPLATES, ...fromPlugins];
|
|
598
|
+
}
|
|
599
|
+
export function getTemplate(id) {
|
|
600
|
+
return TEMPLATES.find((t) => t.id === id) ?? null;
|
|
601
|
+
}
|
|
602
|
+
export function listTemplates() {
|
|
603
|
+
return TEMPLATES.map(({ id, title, description }) => ({ id, title, description }));
|
|
604
|
+
}
|
|
605
|
+
//# sourceMappingURL=templates.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"templates.js","sourceRoot":"","sources":["../../../src/core/lifecycle/templates.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAIH,8EAA8E;AAC9E,wDAAwD;AACxD,8EAA8E;AAE9E,SAAS,QAAQ,CAAC,IAAY,EAAE,QAAgB,EAAE,KAAa;IAC7D,OAAO;QACL,IAAI,EAAE,WAAW;QACjB,OAAO,EAAE,KAAK,IAAI;;gBAEN,QAAQ,iBAAiB,KAAK;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAgC7C;KACE,CAAC;AACJ,CAAC;AAED,SAAS,OAAO;IACd,OAAO;QACL,IAAI,EAAE,WAAW;QACjB,OAAO,EAAE,IAAI,CAAC,SAAS,CACrB;YACE,UAAU,EAAE;gBACV,KAAK,EAAE;oBACL,OAAO,EAAE,OAAO;oBAChB,IAAI,EAAE,CAAC,KAAK,CAAC;iBACd;aACF;SACF,EACD,IAAI,EACJ,CAAC,CACF,GAAG,IAAI;KACT,CAAC;AACJ,CAAC;AAED,SAAS,aAAa;IACpB,OAAO;QACL,IAAI,EAAE,4BAA4B;QAClC,OAAO,EAAE,EAAE;KACZ,CAAC;AACJ,CAAC;AAED,SAAS,SAAS,CAAC,SAAmB,EAAE;IACtC,MAAM,KAAK,GAAG,CAAC,eAAe,EAAE,OAAO,EAAE,GAAG,MAAM,EAAE,EAAE,CAAC,CAAC;IACxD,OAAO;QACL,IAAI,EAAE,YAAY;QAClB,OAAO,EAAE,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC;KAC1B,CAAC;AACJ,CAAC;AAED,8EAA8E;AAC9E,oBAAoB;AACpB,8EAA8E;AAE9E,MAAM,eAAe,GAAoB;IACvC,EAAE,EAAE,SAAS;IACb,KAAK,EAAE,SAAS;IAChB,WAAW,EAAE,6EAA6E;IAC1F,KAAK,CAAC,EAAE,IAAI,EAAE,QAAQ,EAAE;QACtB,OAAO;YACL;gBACE,IAAI,EAAE,WAAW;gBACjB,OAAO,EAAE,KAAK,IAAI,qBAAqB,QAAQ,0FAA0F;aAC1I;YACD;gBACE,IAAI,EAAE,cAAc;gBACpB,OAAO,EAAE,IAAI,CAAC,SAAS,CACrB;oBACE,IAAI;oBACJ,OAAO,EAAE,OAAO;oBAChB,WAAW,EAAE,GAAG,IAAI,4CAA4C;oBAChE,IAAI,EAAE,QAAQ;oBACd,OAAO,EAAE,IAAI;iBACd,EACD,IAAI,EACJ,CAAC,CACF,GAAG,IAAI;aACT;YACD,SAAS,EAAE;YACX,QAAQ,CAAC,IAAI,EAAE,QAAQ,EAAE,SAAS,CAAC;YACnC,OAAO,EAAE;YACT,aAAa,EAAE;SAChB,CAAC;IACJ,CAAC;CACF,CAAC;AAEF,8EAA8E;AAC9E,qBAAqB;AACrB,8EAA8E;AAE9E,MAAM,eAAe,GAAoB;IACvC,EAAE,EAAE,UAAU;IACd,KAAK,EAAE,UAAU;IACjB,WAAW,EAAE,oFAAoF;IACjG,KAAK,CAAC,EAAE,IAAI,EAAE,QAAQ,EAAE;QACtB,OAAO;YACL;gBACE,IAAI,EAAE,WAAW;gBACjB,OAAO,EAAE,KAAK,IAAI;;gBAEV,QAAQ;;;;;;;;;;;;;;;;;;;;CAoBvB;aACM;YACD;gBACE,IAAI,EAAE,cAAc;gBACpB,OAAO,EAAE,IAAI,CAAC,SAAS,CACrB;oBACE,IAAI;oBACJ,OAAO,EAAE,OAAO;oBAChB,WAAW,EAAE,GAAG,IAAI,MAAM;oBAC1B,IAAI,EAAE,QAAQ;oBACd,GAAG,EAAE;wBACH,CAAC,IAAI,CAAC,EAAE,iBAAiB;qBAC1B;oBACD,IAAI,EAAE,iBAAiB;oBACvB,OAAO,EAAE;wBACP,KAAK,EAAE,KAAK;wBACZ,IAAI,EAAE,YAAY;wBAClB,SAAS,EAAE,cAAc;wBACzB,IAAI,EAAE,YAAY;qBACnB;oBACD,eAAe,EAAE;wBACf,UAAU,EAAE,QAAQ;wBACpB,MAAM,EAAE,QAAQ;wBAChB,kCAAkC,EAAE,QAAQ;wBAC5C,2BAA2B,EAAE,QAAQ;wBACrC,MAAM,EAAE,SAAS;qBAClB;iBACF,EACD,IAAI,EACJ,CAAC,CACF,GAAG,IAAI;aACT;YACD;gBACE,IAAI,EAAE,eAAe;gBACrB,OAAO,EAAE,IAAI,CAAC,SAAS,CACrB;oBACE,eAAe,EAAE;wBACf,MAAM,EAAE,QAAQ;wBAChB,MAAM,EAAE,UAAU;wBAClB,gBAAgB,EAAE,UAAU;wBAC5B,MAAM,EAAE,QAAQ;wBAChB,OAAO,EAAE,OAAO;wBAChB,MAAM,EAAE,IAAI;wBACZ,YAAY,EAAE,IAAI;wBAClB,WAAW,EAAE,IAAI;wBACjB,cAAc,EAAE,IAAI;wBACpB,SAAS,EAAE,IAAI;qBAChB;oBACD,OAAO,EAAE,CAAC,KAAK,CAAC;oBAChB,OAAO,EAAE,CAAC,cAAc,EAAE,MAAM,CAAC;iBAClC,EACD,IAAI,EACJ,CAAC,CACF,GAAG,IAAI;aACT;YACD;gBACE,IAAI,EAAE,cAAc;gBACpB,OAAO,EAAE;;KAEZ,IAAI;;;;;;kBAMS,IAAI,6BAA6B,IAAI;;;;2BAI5B,IAAI;CAC9B;gBACO,IAAI,EAAE,KAAK;aACZ;YACD;gBACE,IAAI,EAAE,mBAAmB;gBACzB,OAAO,EAAE;;YAEL,IAAI;;;;;CAKf;aACM;YACD,SAAS,CAAC,CAAC,eAAe,CAAC,CAAC;YAC5B,QAAQ,CAAC,IAAI,EAAE,QAAQ,EAAE,UAAU,CAAC;YACpC,OAAO,EAAE;YACT,aAAa,EAAE;SAChB,CAAC;IACJ,CAAC;CACF,CAAC;AAEF,8EAA8E;AAC9E,uBAAuB;AACvB,8EAA8E;AAE9E,MAAM,iBAAiB,GAAoB;IACzC,EAAE,EAAE,YAAY;IAChB,KAAK,EAAE,YAAY;IACnB,WAAW,EAAE,8EAA8E;IAC3F,KAAK,CAAC,EAAE,IAAI,EAAE,QAAQ,EAAE;QACtB,OAAO;YACL;gBACE,IAAI,EAAE,WAAW;gBACjB,OAAO,EAAE,KAAK,IAAI;;gBAEV,QAAQ;;;;;;;;;;;;;;;;;OAiBjB,IAAI;;0BAEe,IAAI;;;;;;;;;;;;;CAa7B;aACM;YACD;gBACE,IAAI,EAAE,cAAc;gBACpB,OAAO,EAAE,IAAI,CAAC,SAAS,CACrB;oBACE,IAAI;oBACJ,OAAO,EAAE,OAAO;oBAChB,WAAW,EAAE,GAAG,IAAI,aAAa;oBACjC,IAAI,EAAE,QAAQ;oBACd,IAAI,EAAE,kBAAkB;oBACxB,OAAO,EAAE;wBACP,KAAK,EAAE,KAAK;wBACZ,IAAI,EAAE,YAAY;wBAClB,SAAS,EAAE,cAAc;wBACzB,KAAK,EAAE,qBAAqB;qBAC7B;oBACD,YAAY,EAAE;wBACZ,2BAA2B,EAAE,QAAQ;qBACtC;oBACD,eAAe,EAAE;wBACf,UAAU,EAAE,QAAQ;wBACpB,MAAM,EAAE,QAAQ;qBACjB;iBACF,EACD,IAAI,EACJ,CAAC,CACF,GAAG,IAAI;aACT;YACD;gBACE,IAAI,EAAE,eAAe;gBACrB,OAAO,EAAE,IAAI,CAAC,SAAS,CACrB;oBACE,eAAe,EAAE;wBACf,MAAM,EAAE,QAAQ;wBAChB,MAAM,EAAE,UAAU;wBAClB,gBAAgB,EAAE,UAAU;wBAC5B,MAAM,EAAE,QAAQ;wBAChB,OAAO,EAAE,OAAO;wBAChB,MAAM,EAAE,IAAI;wBACZ,YAAY,EAAE,IAAI;wBAClB,WAAW,EAAE,IAAI;wBACjB,SAAS,EAAE,IAAI;qBAChB;oBACD,OAAO,EAAE,CAAC,KAAK,CAAC;oBAChB,OAAO,EAAE,CAAC,cAAc,EAAE,MAAM,CAAC;iBAClC,EACD,IAAI,EACJ,CAAC,CACF,GAAG,IAAI;aACT;YACD;gBACE,IAAI,EAAE,eAAe;gBACrB,OAAO,EAAE;KACZ,IAAI;;;;;;;;;;;;;;aAcI,IAAI;;;;;;;;;;;;;;;;;;;;;;;;;;;;;+DA6B8C,IAAI;;;;;;;;;;;;;CAalE;gBACO,IAAI,EAAE,KAAK;aACZ;YACD;gBACE,IAAI,EAAE,oBAAoB;gBAC1B,OAAO,EAAE;;YAEL,IAAI;;;;;CAKf;aACM;YACD,SAAS,CAAC,CAAC,eAAe,CAAC,CAAC;YAC5B,QAAQ,CAAC,IAAI,EAAE,QAAQ,EAAE,YAAY,CAAC;YACtC,OAAO,EAAE;YACT,aAAa,EAAE;SAChB,CAAC;IACJ,CAAC;CACF,CAAC;AAEF,8EAA8E;AAC9E,qBAAqB;AACrB,8EAA8E;AAE9E,MAAM,eAAe,GAAoB;IACvC,EAAE,EAAE,UAAU;IACd,KAAK,EAAE,aAAa;IACpB,WAAW,EAAE,yEAAyE;IACtF,KAAK,CAAC,EAAE,IAAI,EAAE,QAAQ,EAAE;QACtB,OAAO;YACL;gBACE,IAAI,EAAE,WAAW;gBACjB,OAAO,EAAE,KAAK,IAAI;;gBAEV,QAAQ;;;;;;;;;;;;;;;;;;;;;CAqBvB;aACM;YACD;gBACE,IAAI,EAAE,cAAc;gBACpB,OAAO,EAAE,IAAI,CAAC,SAAS,CACrB;oBACE,IAAI;oBACJ,OAAO,EAAE,OAAO;oBAChB,WAAW,EAAE,GAAG,IAAI,cAAc;oBAClC,OAAO,EAAE,IAAI;oBACb,OAAO,EAAE;wBACP,GAAG,EAAE,UAAU;wBACf,KAAK,EAAE,YAAY;wBACnB,KAAK,EAAE,YAAY;wBACnB,IAAI,EAAE,WAAW;qBAClB;oBACD,YAAY,EAAE;wBACZ,IAAI,EAAE,SAAS;wBACf,KAAK,EAAE,SAAS;wBAChB,WAAW,EAAE,SAAS;qBACvB;oBACD,eAAe,EAAE;wBACf,UAAU,EAAE,QAAQ;wBACpB,aAAa,EAAE,SAAS;wBACxB,cAAc,EAAE,SAAS;wBACzB,kBAAkB,EAAE,SAAS;wBAC7B,WAAW,EAAE,QAAQ;wBACrB,YAAY,EAAE,SAAS;wBACvB,OAAO,EAAE,QAAQ;wBACjB,MAAM,EAAE,SAAS;wBACjB,oBAAoB,EAAE,SAAS;qBAChC;iBACF,EACD,IAAI,EACJ,CAAC,CACF,GAAG,IAAI;aACT;YACD;gBACE,IAAI,EAAE,eAAe;gBACrB,OAAO,EAAE,IAAI,CAAC,SAAS,CACrB;oBACE,eAAe,EAAE;wBACf,MAAM,EAAE,QAAQ;wBAChB,GAAG,EAAE,CAAC,KAAK,EAAE,cAAc,EAAE,QAAQ,CAAC;wBACtC,OAAO,EAAE,IAAI;wBACb,YAAY,EAAE,IAAI;wBAClB,MAAM,EAAE,IAAI;wBACZ,MAAM,EAAE,IAAI;wBACZ,eAAe,EAAE,IAAI;wBACrB,MAAM,EAAE,QAAQ;wBAChB,gBAAgB,EAAE,SAAS;wBAC3B,iBAAiB,EAAE,IAAI;wBACvB,eAAe,EAAE,IAAI;wBACrB,GAAG,EAAE,UAAU;wBACf,WAAW,EAAE,IAAI;wBACjB,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,CAAC;wBAC3B,KAAK,EAAE,EAAE,KAAK,EAAE,CAAC,SAAS,CAAC,EAAE;qBAC9B;oBACD,OAAO,EAAE,CAAC,eAAe,EAAE,SAAS,EAAE,UAAU,EAAE,qBAAqB,CAAC;oBACxE,OAAO,EAAE,CAAC,cAAc,CAAC;iBAC1B,EACD,IAAI,EACJ,CAAC,CACF,GAAG,IAAI;aACT;YACD;gBACE,IAAI,EAAE,gBAAgB;gBACtB,OAAO,EAAE;;;;;;;CAOhB;aACM;YACD;gBACE,IAAI,EAAE,oBAAoB;gBAC1B,OAAO,EAAE;;;YAGL,IAAI;kBACE,IAAI;;;;;;;;;;;;;;CAcrB;aACM;YACD;gBACE,IAAI,EAAE,kBAAkB;gBACxB,OAAO,EAAE;;;YAGL,IAAI;;;;;CAKf;aACM;YACD;gBACE,IAAI,EAAE,qBAAqB;gBAC3B,OAAO,EAAE;;;CAGhB;aACM;YACD;gBACE,IAAI,EAAE,oBAAoB;gBAC1B,OAAO,EAAE;;;;;;;;;;;;;;;CAehB;aACM;YACD;gBACE,IAAI,EAAE,mBAAmB;gBACzB,OAAO,EAAE;;;;;;CAMhB;aACM;YACD;gBACE,IAAI,EAAE,gBAAgB;gBACtB,OAAO,EAAE,IAAI,CAAC,SAAS,CAAC,EAAE,OAAO,EAAE,sBAAsB,EAAE,EAAE,IAAI,EAAE,CAAC,CAAC,GAAG,IAAI;aAC7E;YACD,SAAS,CAAC,CAAC,QAAQ,EAAE,MAAM,EAAE,eAAe,EAAE,aAAa,CAAC,CAAC;YAC7D,QAAQ,CAAC,IAAI,EAAE,QAAQ,EAAE,UAAU,CAAC;YACpC,OAAO,EAAE;YACT,aAAa,EAAE;SAChB,CAAC;IACJ,CAAC;CACF,CAAC;AAEF,8EAA8E;AAC9E,WAAW;AACX,8EAA8E;AAE9E,MAAM,CAAC,MAAM,SAAS,GAAsB;IAC1C,eAAe;IACf,iBAAiB;IACjB,eAAe;IACf,eAAe;CAChB,CAAC;AAEF;;;;GAIG;AACH,MAAM,CAAC,KAAK,UAAU,YAAY,CAAC,GAAuC;IACxE,IAAI,WAAW,GAAsB,EAAE,CAAC;IACxC,IAAI,CAAC;QACH,MAAM,EAAE,UAAU,EAAE,GAAG,MAAM,MAAM,CAAC,cAAc,CAAC,CAAC;QACpD,MAAM,EAAE,kBAAkB,EAAE,GAAG,MAAM,MAAM,CAAC,wBAAwB,CAAC,CAAC;QACtE,WAAW,GAAG,MAAM,kBAAkB,CAAC,GAAG,IAAI,UAAU,EAAE,CAAC,CAAC;IAC9D,CAAC;IAAC,MAAM,CAAC;QACP,WAAW,GAAG,EAAE,CAAC;IACnB,CAAC;IACD,OAAO,CAAC,GAAG,SAAS,EAAE,GAAG,WAAW,CAAC,CAAC;AACxC,CAAC;AAED,MAAM,UAAU,WAAW,CAAC,EAAU;IACpC,OAAO,SAAS,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,EAAE,KAAK,EAAE,CAAC,IAAI,IAAI,CAAC;AACpD,CAAC;AAED,MAAM,UAAU,aAAa;IAC3B,OAAO,SAAS,CAAC,GAAG,CAAC,CAAC,EAAE,EAAE,EAAE,KAAK,EAAE,WAAW,EAAE,EAAE,EAAE,CAAC,CAAC,EAAE,EAAE,EAAE,KAAK,EAAE,WAAW,EAAE,CAAC,CAAC,CAAC;AACrF,CAAC"}
|
|
@@ -0,0 +1,59 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* core/mcp-gateway.ts — MCP aggregation gateway + per-server probe.
|
|
3
|
+
*
|
|
4
|
+
* Two responsibilities:
|
|
5
|
+
*
|
|
6
|
+
* 1. probeServer(spec, timeoutMs): start ONE downstream MCP server as a child,
|
|
7
|
+
* list its tools, tear it down, and return an McpServerHealth. NEVER throws —
|
|
8
|
+
* startup failures, timeouts, and crashes surface in the returned health
|
|
9
|
+
* object (ok:false + error). Used by `ashlr mcp doctor` and gateway startup.
|
|
10
|
+
*
|
|
11
|
+
* 2. startGateway(registry): run a stdio MCP server (this process) that starts
|
|
12
|
+
* every discovered downstream as a child, namespaces their tools as
|
|
13
|
+
* `<server>__<tool>`, and proxies tools/list + tools/call to the correct
|
|
14
|
+
* downstream. ROBUST: per-downstream startup timeout; a downstream that
|
|
15
|
+
* fails to start is skipped with a stderr warning and never crashes the
|
|
16
|
+
* gateway. Point ANY agent at `ashlr mcp` to get every discovered tool.
|
|
17
|
+
*
|
|
18
|
+
* This module is the ONLY place (besides mcp-registry) allowed to depend on
|
|
19
|
+
* @modelcontextprotocol/sdk.
|
|
20
|
+
*/
|
|
21
|
+
import type { McpRegistry, McpServerSpec, McpServerHealth } from './types.js';
|
|
22
|
+
/**
|
|
23
|
+
* Env var set on every downstream child the gateway spawns. A downstream that
|
|
24
|
+
* is itself an ashlr gateway can read this to refuse re-aggregation, providing
|
|
25
|
+
* a second line of defense against the self-spawn fork bomb (the primary
|
|
26
|
+
* defense is isSelfGateway() filtering at startGateway).
|
|
27
|
+
*/
|
|
28
|
+
export declare const GATEWAY_ENV_MARKER = "ASHLR_MCP_GATEWAY";
|
|
29
|
+
/**
|
|
30
|
+
* True when a spec resolves to THIS aggregation gateway — i.e. running it as a
|
|
31
|
+
* downstream would recurse (`ashlr mcp install` writes exactly such an entry:
|
|
32
|
+
* name "ashlr", command <bin>/ashlr, args ['mcp']). We detect it structurally
|
|
33
|
+
* (no path resolution needed): the canonical installed entry is `args`
|
|
34
|
+
* containing 'mcp' AND the command basename being `ashlr`, OR the conventional
|
|
35
|
+
* name 'ashlr' paired with an 'mcp' arg. Skipping these prevents an unbounded
|
|
36
|
+
* fan-out of nested gateways.
|
|
37
|
+
*/
|
|
38
|
+
export declare function isSelfGateway(spec: McpServerSpec): boolean;
|
|
39
|
+
/**
|
|
40
|
+
* Start a single downstream MCP server, list its tools, and tear it down.
|
|
41
|
+
* NEVER throws — all failures (ENOENT, crash, timeout) are reported via the
|
|
42
|
+
* returned McpServerHealth (ok:false, toolCount:0, tools:[], error:<msg>).
|
|
43
|
+
*
|
|
44
|
+
* @param spec The downstream server spec to probe.
|
|
45
|
+
* @param timeoutMs Per-probe startup/list timeout (default 8s).
|
|
46
|
+
*/
|
|
47
|
+
export declare function probeServer(spec: McpServerSpec, timeoutMs?: number): Promise<McpServerHealth>;
|
|
48
|
+
/**
|
|
49
|
+
* Run the aggregation gateway on stdio.
|
|
50
|
+
*
|
|
51
|
+
* Starts every server in `registry` as a child (skipping any that fail to start
|
|
52
|
+
* within the timeout, with a stderr warning), exposes their tools namespaced as
|
|
53
|
+
* `<server>__<tool>`, and proxies tools/list + tools/call to the owning
|
|
54
|
+
* downstream. Resolves only when the gateway transport closes (stdin EOF).
|
|
55
|
+
*
|
|
56
|
+
* @param registry The discovered MCP servers to aggregate.
|
|
57
|
+
* @param timeoutMs Per-downstream startup timeout (default 8s).
|
|
58
|
+
*/
|
|
59
|
+
export declare function startGateway(registry: McpRegistry, timeoutMs?: number): Promise<void>;
|