@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,394 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* cli/plugins.ts — `ashlr plugins list|info|enable|disable` + `ashlr x <name>` (M33).
|
|
3
|
+
*
|
|
4
|
+
* Trust posture (CONTRACT-M33 / docs/PLUGINS.md):
|
|
5
|
+
* - `list` / `info` are DISCOVERY ONLY — they read manifest.json files and
|
|
6
|
+
* NEVER import plugin code.
|
|
7
|
+
* - `enable` is the consent gate: shows declared capabilities + a trust
|
|
8
|
+
* warning, requires interactive confirmation (or --yes), and pins the
|
|
9
|
+
* entry file's sha256 into ~/.ashlr/config.json (tamper evidence).
|
|
10
|
+
* - `disable` removes the name from plugins.enabled (pin kept for re-enable).
|
|
11
|
+
* - `ashlr x <name> [...]` runs an enabled plugin's command through the
|
|
12
|
+
* wrapped (audited, exit-code-safe) runner.
|
|
13
|
+
*
|
|
14
|
+
* Exit codes: 0 success · 1 runtime error · 2 bad usage.
|
|
15
|
+
*/
|
|
16
|
+
import { createInterface } from 'node:readline';
|
|
17
|
+
import { join, basename } from 'node:path';
|
|
18
|
+
import { loadConfig, saveConfig } from '../core/config.js';
|
|
19
|
+
import { makeColors, isTty, pad } from './ui.js';
|
|
20
|
+
const c = makeColors(isTty());
|
|
21
|
+
async function importRegistry() {
|
|
22
|
+
return import('../core/plugins/registry.js');
|
|
23
|
+
}
|
|
24
|
+
async function importIntegrity() {
|
|
25
|
+
return import('../core/plugins/integrity.js');
|
|
26
|
+
}
|
|
27
|
+
function printPluginsHelp() {
|
|
28
|
+
console.log('');
|
|
29
|
+
console.log(c.bold(' ashlr plugins') + c.dim(' — manage the plugin layer (default-off)'));
|
|
30
|
+
console.log('');
|
|
31
|
+
console.log(` ${c.cyan('ashlr plugins init <name> [--capability k]')} ${c.dim('scaffold a working plugin skeleton')}`);
|
|
32
|
+
console.log(` ${c.cyan('ashlr plugins list [--json]')} ${c.dim('discover plugins (manifests only — runs NO plugin code)')}`);
|
|
33
|
+
console.log(` ${c.cyan('ashlr plugins info <name>')} ${c.dim('manifest detail for one plugin')}`);
|
|
34
|
+
console.log(` ${c.cyan('ashlr plugins enable <name> [--yes]')} ${c.dim('consent gate: confirm + integrity-pin + enable')}`);
|
|
35
|
+
console.log(` ${c.cyan('ashlr plugins disable <name>')} ${c.dim('remove from plugins.enabled')}`);
|
|
36
|
+
console.log(` ${c.cyan('ashlr x <name> [args...]')} ${c.dim("run an enabled plugin's command")}`);
|
|
37
|
+
console.log('');
|
|
38
|
+
console.log(' ' + c.dim('Plugins live in ~/.ashlr/plugins/<name>/ — see docs/PLUGINS.md for the trust model.'));
|
|
39
|
+
console.log('');
|
|
40
|
+
}
|
|
41
|
+
/** y/N prompt (TTY only; non-TTY refuses unless --yes). */
|
|
42
|
+
function promptConfirm(question) {
|
|
43
|
+
return new Promise((resolve) => {
|
|
44
|
+
const rl = createInterface({ input: process.stdin, output: process.stderr });
|
|
45
|
+
rl.question(`${question} [y/N] `, (answer) => {
|
|
46
|
+
rl.close();
|
|
47
|
+
resolve(/^y(es)?$/i.test(answer.trim()));
|
|
48
|
+
});
|
|
49
|
+
});
|
|
50
|
+
}
|
|
51
|
+
async function cmdPluginsList(jsonMode) {
|
|
52
|
+
const { discoverPlugins } = await importRegistry();
|
|
53
|
+
const cfg = loadConfig();
|
|
54
|
+
const enabled = new Set(cfg.plugins?.enabled ?? []);
|
|
55
|
+
const found = discoverPlugins();
|
|
56
|
+
if (jsonMode) {
|
|
57
|
+
process.stdout.write(JSON.stringify(found.map((p) => ({
|
|
58
|
+
dir: p.dir,
|
|
59
|
+
name: p.manifest?.name ?? basename(p.dir),
|
|
60
|
+
ok: p.ok,
|
|
61
|
+
reason: p.reason,
|
|
62
|
+
enabled: p.manifest ? enabled.has(p.manifest.name) : false,
|
|
63
|
+
capabilities: p.manifest?.capabilities ?? [],
|
|
64
|
+
version: p.manifest?.version,
|
|
65
|
+
})), null, 2) + '\n');
|
|
66
|
+
return 0;
|
|
67
|
+
}
|
|
68
|
+
console.log('');
|
|
69
|
+
console.log(c.bold(' ashlr plugins') + c.dim(` — ${found.length} discovered (discovery never runs plugin code)`));
|
|
70
|
+
console.log('');
|
|
71
|
+
if (found.length === 0) {
|
|
72
|
+
console.log(c.dim(' none — drop a plugin under ~/.ashlr/plugins/<name>/ (see docs/PLUGINS.md)'));
|
|
73
|
+
console.log('');
|
|
74
|
+
return 0;
|
|
75
|
+
}
|
|
76
|
+
for (const p of found) {
|
|
77
|
+
const name = p.manifest?.name ?? basename(p.dir);
|
|
78
|
+
const state = !p.ok
|
|
79
|
+
? c.red(`invalid (${p.reason ?? 'bad manifest'})`)
|
|
80
|
+
: enabled.has(name)
|
|
81
|
+
? c.green('enabled')
|
|
82
|
+
: c.dim('disabled');
|
|
83
|
+
const caps = p.manifest?.capabilities.join(',') ?? '—';
|
|
84
|
+
console.log(` ${c.cyan(pad(name, 24))} ${pad(state, 24)} ${c.dim(`[${caps}] v${p.manifest?.version ?? '?'}`)}`);
|
|
85
|
+
}
|
|
86
|
+
console.log('');
|
|
87
|
+
console.log(c.dim(' enable with: ashlr plugins enable <name>'));
|
|
88
|
+
console.log('');
|
|
89
|
+
return 0;
|
|
90
|
+
}
|
|
91
|
+
async function cmdPluginsInfo(name, jsonMode) {
|
|
92
|
+
if (!name) {
|
|
93
|
+
process.stderr.write('error: usage: ashlr plugins info <name>\n');
|
|
94
|
+
return 2;
|
|
95
|
+
}
|
|
96
|
+
const { discoverPlugins } = await importRegistry();
|
|
97
|
+
const found = discoverPlugins().find((p) => p.manifest?.name === name || basename(p.dir) === name);
|
|
98
|
+
if (!found) {
|
|
99
|
+
process.stderr.write(`error: plugin not found under ~/.ashlr/plugins/: ${name}\n`);
|
|
100
|
+
return 1;
|
|
101
|
+
}
|
|
102
|
+
if (jsonMode) {
|
|
103
|
+
process.stdout.write(JSON.stringify(found, null, 2) + '\n');
|
|
104
|
+
return 0;
|
|
105
|
+
}
|
|
106
|
+
const cfg = loadConfig();
|
|
107
|
+
console.log('');
|
|
108
|
+
console.log(c.bold(` ${name}`) + (found.ok ? '' : c.red(' (invalid manifest)')));
|
|
109
|
+
if (found.manifest) {
|
|
110
|
+
console.log(` version ${c.cyan(found.manifest.version)}`);
|
|
111
|
+
console.log(` apiVersion ${c.cyan(found.manifest.apiVersion)}`);
|
|
112
|
+
console.log(` capabilities ${c.cyan(found.manifest.capabilities.join(', ') || '(none)')}`);
|
|
113
|
+
console.log(` entry ${c.dim(join(found.dir, found.manifest.entry))}`);
|
|
114
|
+
if (found.manifest.description)
|
|
115
|
+
console.log(` description ${found.manifest.description}`);
|
|
116
|
+
console.log(` enabled ${(cfg.plugins?.enabled ?? []).includes(name) ? c.green('yes') : c.dim('no')}`);
|
|
117
|
+
console.log(` integrity ${cfg.plugins?.integrity?.[name] ? c.green('pinned') : c.dim('not pinned')}`);
|
|
118
|
+
}
|
|
119
|
+
else if (found.reason) {
|
|
120
|
+
console.log(` ${c.red(found.reason)}`);
|
|
121
|
+
}
|
|
122
|
+
console.log('');
|
|
123
|
+
return 0;
|
|
124
|
+
}
|
|
125
|
+
async function cmdPluginsEnable(name, yes, jsonMode) {
|
|
126
|
+
if (!name) {
|
|
127
|
+
process.stderr.write('error: usage: ashlr plugins enable <name> [--yes]\n');
|
|
128
|
+
return 2;
|
|
129
|
+
}
|
|
130
|
+
const { discoverPlugins } = await importRegistry();
|
|
131
|
+
const { hashEntry } = await importIntegrity();
|
|
132
|
+
const found = discoverPlugins().find((p) => p.manifest?.name === name);
|
|
133
|
+
if (!found?.ok || !found.manifest) {
|
|
134
|
+
process.stderr.write(`error: no valid plugin named "${name}" under ~/.ashlr/plugins/` +
|
|
135
|
+
(found?.reason ? ` (${found.reason})` : '') + '\n');
|
|
136
|
+
return 1;
|
|
137
|
+
}
|
|
138
|
+
// ── The consent gate ──────────────────────────────────────────────────────
|
|
139
|
+
if (!yes) {
|
|
140
|
+
if (!isTty()) {
|
|
141
|
+
process.stderr.write('error: enabling a plugin requires confirmation — re-run with --yes in non-TTY contexts.\n');
|
|
142
|
+
return 1;
|
|
143
|
+
}
|
|
144
|
+
console.log('');
|
|
145
|
+
console.log(c.bold(` Enable plugin "${name}" v${found.manifest.version}?`));
|
|
146
|
+
console.log(` capabilities: ${c.cyan(found.manifest.capabilities.join(', ') || '(none)')}`);
|
|
147
|
+
console.log('');
|
|
148
|
+
console.log(c.yellow(' ⚠ An enabled plugin runs IN-PROCESS with the same OS privileges as ashlr.'));
|
|
149
|
+
console.log(c.yellow(' Only enable plugins whose source you have read or whose author you trust.'));
|
|
150
|
+
console.log('');
|
|
151
|
+
const confirmed = await promptConfirm(' Enable?');
|
|
152
|
+
if (!confirmed) {
|
|
153
|
+
console.log(c.dim(' Aborted — plugin remains disabled.'));
|
|
154
|
+
return 0;
|
|
155
|
+
}
|
|
156
|
+
}
|
|
157
|
+
// ── Integrity pin + config write ─────────────────────────────────────────
|
|
158
|
+
const entryPath = join(found.dir, found.manifest.entry);
|
|
159
|
+
const hash = hashEntry(entryPath);
|
|
160
|
+
if (!hash) {
|
|
161
|
+
process.stderr.write(`error: could not hash entry file ${entryPath} — does it exist?\n`);
|
|
162
|
+
return 1;
|
|
163
|
+
}
|
|
164
|
+
const cfg = loadConfig();
|
|
165
|
+
const plugins = cfg.plugins ?? { enabled: [], settings: {}, integrity: {} };
|
|
166
|
+
if (!plugins.enabled.includes(name))
|
|
167
|
+
plugins.enabled.push(name);
|
|
168
|
+
plugins.integrity[name] = hash;
|
|
169
|
+
cfg.plugins = plugins;
|
|
170
|
+
saveConfig(cfg);
|
|
171
|
+
if (jsonMode) {
|
|
172
|
+
process.stdout.write(JSON.stringify({ enabled: true, name, integrity: hash }, null, 2) + '\n');
|
|
173
|
+
}
|
|
174
|
+
else {
|
|
175
|
+
console.log(c.green(` ✓ enabled ${name}`) + c.dim(` (entry pinned ${hash.slice(0, 18)}…)`));
|
|
176
|
+
console.log('');
|
|
177
|
+
}
|
|
178
|
+
return 0;
|
|
179
|
+
}
|
|
180
|
+
async function cmdPluginsDisable(name, jsonMode) {
|
|
181
|
+
if (!name) {
|
|
182
|
+
process.stderr.write('error: usage: ashlr plugins disable <name>\n');
|
|
183
|
+
return 2;
|
|
184
|
+
}
|
|
185
|
+
const cfg = loadConfig();
|
|
186
|
+
const enabled = cfg.plugins?.enabled ?? [];
|
|
187
|
+
if (!enabled.includes(name)) {
|
|
188
|
+
process.stderr.write(`error: plugin "${name}" is not enabled\n`);
|
|
189
|
+
return 1;
|
|
190
|
+
}
|
|
191
|
+
cfg.plugins = {
|
|
192
|
+
enabled: enabled.filter((n) => n !== name),
|
|
193
|
+
settings: cfg.plugins?.settings ?? {},
|
|
194
|
+
integrity: cfg.plugins?.integrity ?? {},
|
|
195
|
+
};
|
|
196
|
+
saveConfig(cfg);
|
|
197
|
+
if (jsonMode) {
|
|
198
|
+
process.stdout.write(JSON.stringify({ enabled: false, name }, null, 2) + '\n');
|
|
199
|
+
}
|
|
200
|
+
else {
|
|
201
|
+
console.log(c.green(` ✓ disabled ${name}`));
|
|
202
|
+
}
|
|
203
|
+
return 0;
|
|
204
|
+
}
|
|
205
|
+
// ---------------------------------------------------------------------------
|
|
206
|
+
// plugins init — scaffold a working plugin skeleton
|
|
207
|
+
// ---------------------------------------------------------------------------
|
|
208
|
+
const INIT_CAPABILITIES = ['scanner', 'template', 'provider', 'command'];
|
|
209
|
+
/** Entry-file skeleton per capability (plain ESM; works without a build step). */
|
|
210
|
+
function initEntrySource(name, capability) {
|
|
211
|
+
const header = `// ${name} — an ashlr plugin (capability: ${capability}).\n` +
|
|
212
|
+
`// Typed authoring: npm i -D @ashlr/hub, then import { definePlugin } from '@ashlr/hub/plugin'.\n` +
|
|
213
|
+
`// Docs + trust model: docs/PLUGINS.md in the ashlr-hub repo.\n\n`;
|
|
214
|
+
switch (capability) {
|
|
215
|
+
case 'scanner':
|
|
216
|
+
return header + `export default {
|
|
217
|
+
activate(host) {
|
|
218
|
+
host.log('activated');
|
|
219
|
+
return {
|
|
220
|
+
scanners: [{
|
|
221
|
+
id: 'example',
|
|
222
|
+
// Return WorkItem-shaped objects. The hub wraps this: 15s timeout,
|
|
223
|
+
// 100-item cap, value/effort clamped 1..5, score recomputed,
|
|
224
|
+
// title/detail secret-scrubbed, ids namespaced.
|
|
225
|
+
async scan(repo) {
|
|
226
|
+
return [{
|
|
227
|
+
id: 'demo', repo, source: 'plugin',
|
|
228
|
+
title: 'Example finding from ${name}',
|
|
229
|
+
detail: 'Replace scan() with real discovery logic.',
|
|
230
|
+
value: 3, effort: 2, score: 0, tags: [], ts: new Date().toISOString(),
|
|
231
|
+
}];
|
|
232
|
+
},
|
|
233
|
+
}],
|
|
234
|
+
};
|
|
235
|
+
},
|
|
236
|
+
};\n`;
|
|
237
|
+
case 'template':
|
|
238
|
+
return header + `export default {
|
|
239
|
+
activate() {
|
|
240
|
+
return {
|
|
241
|
+
templates: [{
|
|
242
|
+
id: 'starter', // exposed as '${name}:starter' in \`ashlr new --list\`
|
|
243
|
+
title: 'Example starter',
|
|
244
|
+
description: 'Scaffolded by the ${name} plugin.',
|
|
245
|
+
files: ({ name: projectName }) => [
|
|
246
|
+
{ path: 'README.md', content: '# ' + projectName + '\\n' },
|
|
247
|
+
],
|
|
248
|
+
}],
|
|
249
|
+
};
|
|
250
|
+
},
|
|
251
|
+
};\n`;
|
|
252
|
+
case 'provider':
|
|
253
|
+
return header + `export default {
|
|
254
|
+
activate() {
|
|
255
|
+
return {
|
|
256
|
+
providers: [{
|
|
257
|
+
id: '${name}-model',
|
|
258
|
+
tier: 'local', // 'cloud' providers require --allow-cloud + envKeys presence
|
|
259
|
+
async probe() { return { up: false }; },
|
|
260
|
+
async createClient({ model }) {
|
|
261
|
+
return {
|
|
262
|
+
id: '${name}-model', supportsTools: false,
|
|
263
|
+
async chat(messages) {
|
|
264
|
+
return { text: 'not implemented', toolCalls: [], usage: { tokensIn: 0, tokensOut: 0 } };
|
|
265
|
+
},
|
|
266
|
+
};
|
|
267
|
+
},
|
|
268
|
+
}],
|
|
269
|
+
};
|
|
270
|
+
},
|
|
271
|
+
};\n`;
|
|
272
|
+
case 'command':
|
|
273
|
+
return header + `export default {
|
|
274
|
+
activate() {
|
|
275
|
+
return {
|
|
276
|
+
commands: [{
|
|
277
|
+
name: 'hello', // invoked as: ashlr x hello
|
|
278
|
+
description: 'Example command from ${name}',
|
|
279
|
+
async run(args, host) {
|
|
280
|
+
host.log('hello ' + (args[0] ?? 'world'));
|
|
281
|
+
return 0;
|
|
282
|
+
},
|
|
283
|
+
}],
|
|
284
|
+
};
|
|
285
|
+
},
|
|
286
|
+
};\n`;
|
|
287
|
+
}
|
|
288
|
+
}
|
|
289
|
+
async function cmdPluginsInit(args, jsonMode) {
|
|
290
|
+
const name = args.find((a) => !a.startsWith('--'));
|
|
291
|
+
const capIdx = args.indexOf('--capability');
|
|
292
|
+
const capability = (capIdx !== -1 ? args[capIdx + 1] : 'scanner');
|
|
293
|
+
if (!name) {
|
|
294
|
+
process.stderr.write('error: usage: ashlr plugins init <name> [--capability scanner|template|provider|command]\n');
|
|
295
|
+
return 2;
|
|
296
|
+
}
|
|
297
|
+
if (!/^[a-z][a-z0-9-]{0,39}$/.test(name)) {
|
|
298
|
+
process.stderr.write(`error: plugin name must match ^[a-z][a-z0-9-]{0,39}$ — got "${name}"\n`);
|
|
299
|
+
return 2;
|
|
300
|
+
}
|
|
301
|
+
if (!INIT_CAPABILITIES.includes(capability)) {
|
|
302
|
+
process.stderr.write(`error: --capability must be one of: ${INIT_CAPABILITIES.join(', ')}\n`);
|
|
303
|
+
return 2;
|
|
304
|
+
}
|
|
305
|
+
const { homedir } = await import('node:os');
|
|
306
|
+
const { mkdirSync, writeFileSync, existsSync } = await import('node:fs');
|
|
307
|
+
const dir = join(homedir(), '.ashlr', 'plugins', name);
|
|
308
|
+
if (existsSync(join(dir, 'manifest.json'))) {
|
|
309
|
+
process.stderr.write(`error: ${dir} already has a manifest.json — refusing to overwrite\n`);
|
|
310
|
+
return 1;
|
|
311
|
+
}
|
|
312
|
+
mkdirSync(dir, { recursive: true });
|
|
313
|
+
writeFileSync(join(dir, 'manifest.json'), JSON.stringify({
|
|
314
|
+
name,
|
|
315
|
+
version: '0.1.0',
|
|
316
|
+
apiVersion: '^1.0.0',
|
|
317
|
+
description: `An ashlr ${capability} plugin.`,
|
|
318
|
+
entry: './index.mjs',
|
|
319
|
+
capabilities: [capability],
|
|
320
|
+
}, null, 2) + '\n');
|
|
321
|
+
writeFileSync(join(dir, 'index.mjs'), initEntrySource(name, capability));
|
|
322
|
+
if (jsonMode) {
|
|
323
|
+
process.stdout.write(JSON.stringify({ created: true, name, capability, dir }, null, 2) + '\n');
|
|
324
|
+
}
|
|
325
|
+
else {
|
|
326
|
+
console.log('');
|
|
327
|
+
console.log(c.green(` ✓ scaffolded ${name}`) + c.dim(` (${capability}) at ${dir}`));
|
|
328
|
+
console.log('');
|
|
329
|
+
console.log(' Next steps:');
|
|
330
|
+
console.log(` 1. Edit ${c.cyan(join(dir, 'index.mjs'))}`);
|
|
331
|
+
console.log(` 2. ${c.cyan(`ashlr plugins enable ${name}`)} ${c.dim('(confirm + integrity pin)')}`);
|
|
332
|
+
if (capability === 'scanner')
|
|
333
|
+
console.log(` 3. ${c.cyan('ashlr backlog refresh')} ${c.dim('items appear tagged [plugin]')}`);
|
|
334
|
+
if (capability === 'command')
|
|
335
|
+
console.log(` 3. ${c.cyan('ashlr x hello')}`);
|
|
336
|
+
if (capability === 'template')
|
|
337
|
+
console.log(` 3. ${c.cyan('ashlr new --list')} ${c.dim(`shows ${name}:starter`)}`);
|
|
338
|
+
console.log('');
|
|
339
|
+
}
|
|
340
|
+
return 0;
|
|
341
|
+
}
|
|
342
|
+
export async function cmdPlugins(args) {
|
|
343
|
+
const sub = args[0];
|
|
344
|
+
const jsonMode = args.includes('--json');
|
|
345
|
+
const yes = args.includes('--yes');
|
|
346
|
+
if (!sub || sub === '--help' || sub === '-h' || sub === 'help') {
|
|
347
|
+
printPluginsHelp();
|
|
348
|
+
return 0;
|
|
349
|
+
}
|
|
350
|
+
if (sub === 'list')
|
|
351
|
+
return cmdPluginsList(jsonMode);
|
|
352
|
+
if (sub === 'info')
|
|
353
|
+
return cmdPluginsInfo(args[1], jsonMode);
|
|
354
|
+
if (sub === 'init')
|
|
355
|
+
return cmdPluginsInit(args.slice(1), jsonMode);
|
|
356
|
+
if (sub === 'enable')
|
|
357
|
+
return cmdPluginsEnable(args[1], yes, jsonMode);
|
|
358
|
+
if (sub === 'disable')
|
|
359
|
+
return cmdPluginsDisable(args[1], jsonMode);
|
|
360
|
+
process.stderr.write(`error: unknown plugins subcommand: ${sub}\n`);
|
|
361
|
+
printPluginsHelp();
|
|
362
|
+
return 2;
|
|
363
|
+
}
|
|
364
|
+
/**
|
|
365
|
+
* `ashlr x <name> [args...]` — run an enabled plugin's command (wrapped:
|
|
366
|
+
* audited invocation + exit code; builtin shadowing rejected at load).
|
|
367
|
+
*/
|
|
368
|
+
export async function cmdX(args) {
|
|
369
|
+
const name = args[0];
|
|
370
|
+
if (!name || name === '--help' || name === '-h' || name === 'help') {
|
|
371
|
+
console.log('');
|
|
372
|
+
console.log(c.bold(' ashlr x') + c.dim(" — run an enabled plugin's command"));
|
|
373
|
+
console.log(` ${c.cyan('ashlr x <name> [args...]')}`);
|
|
374
|
+
console.log(' ' + c.dim('Available commands come from enabled plugins — see `ashlr plugins list`.'));
|
|
375
|
+
console.log('');
|
|
376
|
+
return name ? 0 : 2;
|
|
377
|
+
}
|
|
378
|
+
const { loadEnabledPlugins } = await importRegistry();
|
|
379
|
+
const { buildHostApi } = await import('../core/plugins/host-api.js');
|
|
380
|
+
const { wrapCommand } = await import('../core/plugins/wrappers.js');
|
|
381
|
+
const cfg = loadConfig();
|
|
382
|
+
for (const p of await loadEnabledPlugins(cfg)) {
|
|
383
|
+
const command = (p.contributions.commands ?? []).find((cmd) => cmd.name === name);
|
|
384
|
+
if (command) {
|
|
385
|
+
// The wrapper audits the invocation + exit code and never throws.
|
|
386
|
+
const host = buildHostApi(p.manifest, cfg);
|
|
387
|
+
return wrapCommand(p.name, command).run(args.slice(1), host);
|
|
388
|
+
}
|
|
389
|
+
}
|
|
390
|
+
process.stderr.write(`error: no enabled plugin provides the command "${name}". ` +
|
|
391
|
+
'Run `ashlr plugins list` to see enabled plugins.\n');
|
|
392
|
+
return 1;
|
|
393
|
+
}
|
|
394
|
+
//# sourceMappingURL=plugins.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"plugins.js","sourceRoot":"","sources":["../../src/cli/plugins.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* CLI handler for `ashlr preflight` — a READ-ONLY first-activation readiness
|
|
3
|
+
* check. See docs/contracts/CONTRACT-H7.md (BUILD ITEM 1).
|
|
4
|
+
*
|
|
5
|
+
* Prints `ready=true|false` plus a blockers[] / warnings[] list, computed from
|
|
6
|
+
* the SHARED read-only readiness model (src/core/readiness.ts → buildReadiness).
|
|
7
|
+
* Mutates NOTHING and makes NO new outward call (probeEndpoint is the same local
|
|
8
|
+
* model GET `ashlr doctor` already performs). Exit code 0 when ready, 1 when
|
|
9
|
+
* blocked.
|
|
10
|
+
*
|
|
11
|
+
* Flags:
|
|
12
|
+
* --json Emit the ReadinessReport as JSON on stdout (no color).
|
|
13
|
+
* --help Show usage.
|
|
14
|
+
*
|
|
15
|
+
* Wiring: BUILD/INTEGRATION adds the `case 'preflight'` dispatcher arm + a
|
|
16
|
+
* `loadPreflightCmd` lazy loader in src/cli/index.ts (mirroring loadVerifySafetyCmd)
|
|
17
|
+
* + a cmdHelp entry. This file does NOT touch the dispatcher.
|
|
18
|
+
*
|
|
19
|
+
* Exit codes: 0 ready, 1 blocked (a hard blocker present), 2 bad usage.
|
|
20
|
+
*/
|
|
21
|
+
/**
|
|
22
|
+
* `ashlr preflight [--json]` — READ-ONLY readiness check.
|
|
23
|
+
*
|
|
24
|
+
* Loads the config, builds the shared readiness report (which mutates nothing
|
|
25
|
+
* besides a self-cleaning ~/.ashlr writeable sentinel), then prints either the
|
|
26
|
+
* JSON report (--json) or a grouped human-readable summary. Returns 0 when
|
|
27
|
+
* ready, 1 when a hard blocker is present, 2 on bad usage.
|
|
28
|
+
*/
|
|
29
|
+
export declare function cmdPreflight(args: string[]): Promise<number>;
|
|
@@ -0,0 +1,131 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* CLI handler for `ashlr preflight` — a READ-ONLY first-activation readiness
|
|
3
|
+
* check. See docs/contracts/CONTRACT-H7.md (BUILD ITEM 1).
|
|
4
|
+
*
|
|
5
|
+
* Prints `ready=true|false` plus a blockers[] / warnings[] list, computed from
|
|
6
|
+
* the SHARED read-only readiness model (src/core/readiness.ts → buildReadiness).
|
|
7
|
+
* Mutates NOTHING and makes NO new outward call (probeEndpoint is the same local
|
|
8
|
+
* model GET `ashlr doctor` already performs). Exit code 0 when ready, 1 when
|
|
9
|
+
* blocked.
|
|
10
|
+
*
|
|
11
|
+
* Flags:
|
|
12
|
+
* --json Emit the ReadinessReport as JSON on stdout (no color).
|
|
13
|
+
* --help Show usage.
|
|
14
|
+
*
|
|
15
|
+
* Wiring: BUILD/INTEGRATION adds the `case 'preflight'` dispatcher arm + a
|
|
16
|
+
* `loadPreflightCmd` lazy loader in src/cli/index.ts (mirroring loadVerifySafetyCmd)
|
|
17
|
+
* + a cmdHelp entry. This file does NOT touch the dispatcher.
|
|
18
|
+
*
|
|
19
|
+
* Exit codes: 0 ready, 1 blocked (a hard blocker present), 2 bad usage.
|
|
20
|
+
*/
|
|
21
|
+
import { loadConfig } from '../core/config.js';
|
|
22
|
+
import { buildReadiness } from '../core/readiness.js';
|
|
23
|
+
import { pad, makeColors, isTty } from './ui.js';
|
|
24
|
+
function parsePreflightArgs(args) {
|
|
25
|
+
let json = false;
|
|
26
|
+
let help = false;
|
|
27
|
+
let error;
|
|
28
|
+
for (const a of args) {
|
|
29
|
+
if (a === undefined)
|
|
30
|
+
continue;
|
|
31
|
+
if (a === '--help' || a === '-h') {
|
|
32
|
+
help = true;
|
|
33
|
+
}
|
|
34
|
+
else if (a === '--json') {
|
|
35
|
+
json = true;
|
|
36
|
+
}
|
|
37
|
+
else {
|
|
38
|
+
error = `Unknown argument: ${a}`;
|
|
39
|
+
break;
|
|
40
|
+
}
|
|
41
|
+
}
|
|
42
|
+
return { json, help, error };
|
|
43
|
+
}
|
|
44
|
+
// ─── Help ─────────────────────────────────────────────────────────────────────
|
|
45
|
+
function printHelp() {
|
|
46
|
+
const tty = isTty();
|
|
47
|
+
const { bold, cyan, dim, gray } = makeColors(tty);
|
|
48
|
+
const out = (s = '') => process.stdout.write(s + '\n');
|
|
49
|
+
out('');
|
|
50
|
+
out(bold(' ashlr preflight') + dim(' — read-only first-activation readiness check'));
|
|
51
|
+
out('');
|
|
52
|
+
out(' ' + bold('Usage:'));
|
|
53
|
+
out(` ${cyan('ashlr preflight')} [--json]`);
|
|
54
|
+
out('');
|
|
55
|
+
out(' ' + bold('Options:'));
|
|
56
|
+
const opts = [
|
|
57
|
+
['--json', 'Emit the ReadinessReport as JSON (no color) instead of human-readable output.'],
|
|
58
|
+
['--help', 'Show this help.'],
|
|
59
|
+
];
|
|
60
|
+
const w = Math.max(...opts.map(([f]) => f.length));
|
|
61
|
+
for (const [flag, desc] of opts)
|
|
62
|
+
out(` ${cyan(pad(flag, w))} ${desc}`);
|
|
63
|
+
out('');
|
|
64
|
+
out(' ' + gray('READ-ONLY: reports model reachability, enrollment count, kill-switch state,'));
|
|
65
|
+
out(' ' + gray('daemon health, ~/.ashlr writeability, sandbox health, git + phantom presence.'));
|
|
66
|
+
out(' ' + gray('Mutates nothing. Exit 0 when ready, 1 when a hard blocker is present.'));
|
|
67
|
+
out('');
|
|
68
|
+
}
|
|
69
|
+
// ─── Human-readable render ─────────────────────────────────────────────────────
|
|
70
|
+
/**
|
|
71
|
+
* Human-readable render of a ReadinessReport: a `ready=true|false` headline,
|
|
72
|
+
* then grouped blockers → warnings → info sections (colorized when on a TTY).
|
|
73
|
+
*/
|
|
74
|
+
function printReadiness(report) {
|
|
75
|
+
const tty = isTty();
|
|
76
|
+
const { bold, dim, red, green, yellow, cyan, gray } = makeColors(tty);
|
|
77
|
+
const out = (s = '') => process.stdout.write(s + '\n');
|
|
78
|
+
out('');
|
|
79
|
+
const headline = report.ready
|
|
80
|
+
? green(bold(' ready=true')) + dim(' — first activation is safe to proceed')
|
|
81
|
+
: red(bold(' ready=false')) + dim(' — resolve the blocker(s) below first');
|
|
82
|
+
out(headline);
|
|
83
|
+
out('');
|
|
84
|
+
const section = (title, findings, marker, color) => {
|
|
85
|
+
if (findings.length === 0)
|
|
86
|
+
return;
|
|
87
|
+
out(' ' + bold(title));
|
|
88
|
+
for (const f of findings) {
|
|
89
|
+
out(` ${color(marker)} ${f.detail}`);
|
|
90
|
+
if (f.fix)
|
|
91
|
+
out(` ${gray('→ ' + f.fix)}`);
|
|
92
|
+
}
|
|
93
|
+
out('');
|
|
94
|
+
};
|
|
95
|
+
section('Blockers', report.blockers, '✗', red);
|
|
96
|
+
section('Warnings', report.warnings, '!', yellow);
|
|
97
|
+
section('OK', report.info, '✓', green);
|
|
98
|
+
out(' ' + gray('Review proposals with ') + cyan('ashlr inbox') + gray('; safely activate with ') + cyan('ashlr onboard') + gray('.'));
|
|
99
|
+
out('');
|
|
100
|
+
}
|
|
101
|
+
// ─── Main export ─────────────────────────────────────────────────────────────
|
|
102
|
+
/**
|
|
103
|
+
* `ashlr preflight [--json]` — READ-ONLY readiness check.
|
|
104
|
+
*
|
|
105
|
+
* Loads the config, builds the shared readiness report (which mutates nothing
|
|
106
|
+
* besides a self-cleaning ~/.ashlr writeable sentinel), then prints either the
|
|
107
|
+
* JSON report (--json) or a grouped human-readable summary. Returns 0 when
|
|
108
|
+
* ready, 1 when a hard blocker is present, 2 on bad usage.
|
|
109
|
+
*/
|
|
110
|
+
export async function cmdPreflight(args) {
|
|
111
|
+
const parsed = parsePreflightArgs(args);
|
|
112
|
+
if (parsed.help) {
|
|
113
|
+
printHelp();
|
|
114
|
+
return 0;
|
|
115
|
+
}
|
|
116
|
+
if (parsed.error) {
|
|
117
|
+
process.stderr.write('error: ' + parsed.error + '\n');
|
|
118
|
+
process.stderr.write('Run `ashlr preflight --help` for usage.\n');
|
|
119
|
+
return 2;
|
|
120
|
+
}
|
|
121
|
+
const cfg = loadConfig();
|
|
122
|
+
const report = await buildReadiness(cfg);
|
|
123
|
+
if (parsed.json) {
|
|
124
|
+
process.stdout.write(JSON.stringify(report) + '\n');
|
|
125
|
+
}
|
|
126
|
+
else {
|
|
127
|
+
printReadiness(report);
|
|
128
|
+
}
|
|
129
|
+
return report.ready ? 0 : 1;
|
|
130
|
+
}
|
|
131
|
+
//# sourceMappingURL=preflight.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"preflight.js","sourceRoot":"","sources":["../../src/cli/preflight.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* `ashlr pulse` — rich local observability dashboard.
|
|
3
|
+
*
|
|
4
|
+
* Flags:
|
|
5
|
+
* --json machine-readable ActivityRollup
|
|
6
|
+
* --window 1d|7d|30d window (default 7d)
|
|
7
|
+
* --project <name> restrict to a single project
|
|
8
|
+
*
|
|
9
|
+
* Renders: window summary (totals + cost), by-project table, top models,
|
|
10
|
+
* budget status (warn/over highlighted). Honors privacy guardrails — prints
|
|
11
|
+
* only aggregate metadata, never content. Returns process exit code.
|
|
12
|
+
*
|
|
13
|
+
* Uses lazy imports so the command degrades gracefully before M5 core modules
|
|
14
|
+
* are built, matching the M3/M4 lazy-import pattern.
|
|
15
|
+
*/
|
|
16
|
+
/**
|
|
17
|
+
* `ashlr pulse` — rich local observability dashboard.
|
|
18
|
+
*
|
|
19
|
+
* Flags:
|
|
20
|
+
* --json machine-readable ActivityRollup
|
|
21
|
+
* --window 1d|7d|30d window (default 7d)
|
|
22
|
+
* --project <name> restrict to a single project
|
|
23
|
+
*
|
|
24
|
+
* Returns process exit code: 0 = ok/warn, 1 = budget over.
|
|
25
|
+
*/
|
|
26
|
+
export declare function cmdPulse(args: string[]): Promise<number>;
|