@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
package/dist/tui/app.js
ADDED
|
@@ -0,0 +1,350 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* src/tui/app.ts — M13 interactive TUI driver.
|
|
3
|
+
*
|
|
4
|
+
* Wires the pure renderer (src/tui/render.ts) to the data aggregator
|
|
5
|
+
* (src/core/dashboard.ts buildSnapshot) and the terminal. Handles all the
|
|
6
|
+
* impure concerns the renderer deliberately avoids:
|
|
7
|
+
*
|
|
8
|
+
* - Alt-screen buffer enter/leave, cursor hide/show, raw-mode toggling.
|
|
9
|
+
* - Raw keypress decoding (tab/shift-tab, 1-5, j/k, r, enter, q, Ctrl-C).
|
|
10
|
+
* - Auto-refresh tick (~2s) that re-reads data sources without blocking.
|
|
11
|
+
* - Resize awareness (re-render on SIGWINCH).
|
|
12
|
+
* - GUARANTEED terminal restoration on quit / signal / throw.
|
|
13
|
+
*
|
|
14
|
+
* `runTui(cfg, { once })`:
|
|
15
|
+
* - once === true OR stdout is not a TTY → render exactly one frame to
|
|
16
|
+
* stdout and resolve 0. NEVER enters raw mode or the alt-screen. This is
|
|
17
|
+
* the headless / scripting / test path (and the safe degraded path for
|
|
18
|
+
* piped output).
|
|
19
|
+
* - otherwise → enter the interactive loop and resolve when the user quits.
|
|
20
|
+
*
|
|
21
|
+
* Zero new runtime deps: Node built-ins + cli/ui.ts helpers only.
|
|
22
|
+
*/
|
|
23
|
+
import { buildSnapshot } from '../core/dashboard.js';
|
|
24
|
+
import { renderFrame } from './render.js';
|
|
25
|
+
// ---------------------------------------------------------------------------
|
|
26
|
+
// Constants
|
|
27
|
+
// ---------------------------------------------------------------------------
|
|
28
|
+
/** Ordered tab list — used for tab/shift-tab cycling and 1-5 selection. */
|
|
29
|
+
const TAB_ORDER = ['overview', 'runs', 'swarms', 'pulse', 'mcp', 'inbox', 'portfolio'];
|
|
30
|
+
/** Auto-refresh cadence (ms). */
|
|
31
|
+
const REFRESH_MS = 2000;
|
|
32
|
+
/** Fallback terminal dimensions when stdout reports none. */
|
|
33
|
+
const FALLBACK_COLS = 80;
|
|
34
|
+
const FALLBACK_ROWS = 24;
|
|
35
|
+
// Terminal control sequences (kept local so the renderer stays pure).
|
|
36
|
+
const ALT_SCREEN_ENTER = '\x1b[?1049h';
|
|
37
|
+
const ALT_SCREEN_LEAVE = '\x1b[?1049l';
|
|
38
|
+
const CURSOR_HIDE = '\x1b[?25l';
|
|
39
|
+
const CURSOR_SHOW = '\x1b[?25h';
|
|
40
|
+
const CURSOR_HOME = '\x1b[H';
|
|
41
|
+
const CLEAR_SCREEN = '\x1b[2J';
|
|
42
|
+
// ---------------------------------------------------------------------------
|
|
43
|
+
// Snapshot helpers
|
|
44
|
+
// ---------------------------------------------------------------------------
|
|
45
|
+
/** An all-zero snapshot used when buildSnapshot fails — keeps the TUI alive. */
|
|
46
|
+
function emptySnapshot() {
|
|
47
|
+
return {
|
|
48
|
+
generatedAt: new Date().toISOString(),
|
|
49
|
+
repos: { total: 0, dirty: 0, stale: 0 },
|
|
50
|
+
tools: { installed: 0, total: 0 },
|
|
51
|
+
activity: { sessions: 0, tokens: 0, estCostUsd: 0, commits: 0 },
|
|
52
|
+
runs: [],
|
|
53
|
+
swarms: [],
|
|
54
|
+
mcp: [],
|
|
55
|
+
genome: { entries: 0, projects: 0 },
|
|
56
|
+
inbox: { pending: 0 },
|
|
57
|
+
};
|
|
58
|
+
}
|
|
59
|
+
/** Build a snapshot, degrading to an empty one on any failure. Never throws. */
|
|
60
|
+
async function safeSnapshot(cfg) {
|
|
61
|
+
try {
|
|
62
|
+
return await buildSnapshot(cfg);
|
|
63
|
+
}
|
|
64
|
+
catch {
|
|
65
|
+
return emptySnapshot();
|
|
66
|
+
}
|
|
67
|
+
}
|
|
68
|
+
/** Current terminal dimensions, with sane fallbacks. */
|
|
69
|
+
function terminalSize() {
|
|
70
|
+
const cols = process.stdout.columns && process.stdout.columns > 0
|
|
71
|
+
? process.stdout.columns
|
|
72
|
+
: FALLBACK_COLS;
|
|
73
|
+
const rows = process.stdout.rows && process.stdout.rows > 0
|
|
74
|
+
? process.stdout.rows
|
|
75
|
+
: FALLBACK_ROWS;
|
|
76
|
+
return { cols, rows };
|
|
77
|
+
}
|
|
78
|
+
/** Number of selectable rows on the given tab (for j/k bounds). */
|
|
79
|
+
function selectableCount(snap, tab) {
|
|
80
|
+
switch (tab) {
|
|
81
|
+
case 'runs': return snap.runs.length;
|
|
82
|
+
case 'swarms': return snap.swarms.length;
|
|
83
|
+
case 'mcp': return snap.mcp.length;
|
|
84
|
+
default: return 0; // overview / pulse have no row selection
|
|
85
|
+
}
|
|
86
|
+
}
|
|
87
|
+
// ---------------------------------------------------------------------------
|
|
88
|
+
// runTui — public entry point
|
|
89
|
+
// ---------------------------------------------------------------------------
|
|
90
|
+
/**
|
|
91
|
+
* Drive the TUI.
|
|
92
|
+
*
|
|
93
|
+
* @param cfg Loaded hub config (passed straight through to buildSnapshot).
|
|
94
|
+
* @param opts { once } — render a single frame and exit when true.
|
|
95
|
+
* @returns Process exit code (0 on success). Never rejects.
|
|
96
|
+
*/
|
|
97
|
+
export async function runTui(cfg, opts) {
|
|
98
|
+
const interactive = !opts.once && process.stdout.isTTY === true && process.stdin.isTTY === true;
|
|
99
|
+
// Headless / --once / non-TTY → one frame to stdout, no raw mode, no alt-screen.
|
|
100
|
+
if (!interactive) {
|
|
101
|
+
return renderOnce(cfg);
|
|
102
|
+
}
|
|
103
|
+
return runInteractive(cfg);
|
|
104
|
+
}
|
|
105
|
+
// ---------------------------------------------------------------------------
|
|
106
|
+
// --once / non-TTY path
|
|
107
|
+
// ---------------------------------------------------------------------------
|
|
108
|
+
/** Render exactly one frame to stdout and resolve 0. Never throws. */
|
|
109
|
+
async function renderOnce(cfg) {
|
|
110
|
+
try {
|
|
111
|
+
const snap = await safeSnapshot(cfg);
|
|
112
|
+
const { cols, rows } = terminalSize();
|
|
113
|
+
const state = { tab: 'overview', selected: 0, cols, rows };
|
|
114
|
+
const frame = renderFrame(snap, state);
|
|
115
|
+
process.stdout.write(frame + '\n');
|
|
116
|
+
return 0;
|
|
117
|
+
}
|
|
118
|
+
catch {
|
|
119
|
+
// Absolute last-resort guard — should be unreachable given safeSnapshot.
|
|
120
|
+
return 0;
|
|
121
|
+
}
|
|
122
|
+
}
|
|
123
|
+
// ---------------------------------------------------------------------------
|
|
124
|
+
// Interactive path
|
|
125
|
+
// ---------------------------------------------------------------------------
|
|
126
|
+
async function runInteractive(cfg) {
|
|
127
|
+
const out = process.stdout;
|
|
128
|
+
const input = process.stdin;
|
|
129
|
+
let tab = 'overview';
|
|
130
|
+
let selected = 0;
|
|
131
|
+
let snap = await safeSnapshot(cfg);
|
|
132
|
+
let lastFrame = '';
|
|
133
|
+
let timer = null;
|
|
134
|
+
let refreshing = false;
|
|
135
|
+
let restored = false;
|
|
136
|
+
let resolveLoop = null;
|
|
137
|
+
// ── Terminal lifecycle ──────────────────────────────────────────────────
|
|
138
|
+
function enterTerminal() {
|
|
139
|
+
out.write(ALT_SCREEN_ENTER + CURSOR_HIDE + CLEAR_SCREEN + CURSOR_HOME);
|
|
140
|
+
if (typeof input.setRawMode === 'function')
|
|
141
|
+
input.setRawMode(true);
|
|
142
|
+
input.resume();
|
|
143
|
+
input.setEncoding('utf8');
|
|
144
|
+
}
|
|
145
|
+
/** Restore the terminal to a sane state. Idempotent — safe to call twice. */
|
|
146
|
+
function restoreTerminal() {
|
|
147
|
+
if (restored)
|
|
148
|
+
return;
|
|
149
|
+
restored = true;
|
|
150
|
+
if (timer) {
|
|
151
|
+
clearInterval(timer);
|
|
152
|
+
timer = null;
|
|
153
|
+
}
|
|
154
|
+
try {
|
|
155
|
+
if (typeof input.setRawMode === 'function' && input.isTTY)
|
|
156
|
+
input.setRawMode(false);
|
|
157
|
+
}
|
|
158
|
+
catch {
|
|
159
|
+
/* ignore */
|
|
160
|
+
}
|
|
161
|
+
input.pause();
|
|
162
|
+
input.removeListener('data', onKey);
|
|
163
|
+
process.removeListener('SIGINT', onSignal);
|
|
164
|
+
process.removeListener('SIGTERM', onSignal);
|
|
165
|
+
process.removeListener('SIGWINCH', onResize);
|
|
166
|
+
// Drop the last-resort backstops so they don't leak across a normal quit.
|
|
167
|
+
process.removeListener('uncaughtException', onFatal);
|
|
168
|
+
process.removeListener('unhandledRejection', onFatal);
|
|
169
|
+
// Show cursor + leave alt-screen LAST so the prior terminal contents return.
|
|
170
|
+
out.write(CURSOR_SHOW + ALT_SCREEN_LEAVE);
|
|
171
|
+
}
|
|
172
|
+
// ── Rendering ───────────────────────────────────────────────────────────
|
|
173
|
+
function clampSelection() {
|
|
174
|
+
const max = selectableCount(snap, tab);
|
|
175
|
+
if (max <= 0) {
|
|
176
|
+
selected = 0;
|
|
177
|
+
}
|
|
178
|
+
else if (selected >= max) {
|
|
179
|
+
selected = max - 1;
|
|
180
|
+
}
|
|
181
|
+
else if (selected < 0) {
|
|
182
|
+
selected = 0;
|
|
183
|
+
}
|
|
184
|
+
}
|
|
185
|
+
function paint() {
|
|
186
|
+
clampSelection();
|
|
187
|
+
const { cols, rows } = terminalSize();
|
|
188
|
+
const state = { tab, selected, cols, rows };
|
|
189
|
+
const frame = renderFrame(snap, state);
|
|
190
|
+
if (frame === lastFrame)
|
|
191
|
+
return; // skip redundant repaints
|
|
192
|
+
lastFrame = frame;
|
|
193
|
+
out.write(CURSOR_HOME + frame);
|
|
194
|
+
}
|
|
195
|
+
// ── Data refresh (bounded, never blocks the loop) ───────────────────────
|
|
196
|
+
async function refresh() {
|
|
197
|
+
if (refreshing || restored)
|
|
198
|
+
return;
|
|
199
|
+
refreshing = true;
|
|
200
|
+
try {
|
|
201
|
+
snap = await safeSnapshot(cfg);
|
|
202
|
+
if (!restored)
|
|
203
|
+
paint();
|
|
204
|
+
}
|
|
205
|
+
finally {
|
|
206
|
+
refreshing = false;
|
|
207
|
+
}
|
|
208
|
+
}
|
|
209
|
+
// ── Event handlers ──────────────────────────────────────────────────────
|
|
210
|
+
function finish(code) {
|
|
211
|
+
restoreTerminal();
|
|
212
|
+
if (resolveLoop) {
|
|
213
|
+
const r = resolveLoop;
|
|
214
|
+
resolveLoop = null;
|
|
215
|
+
r(code);
|
|
216
|
+
}
|
|
217
|
+
}
|
|
218
|
+
function onSignal() {
|
|
219
|
+
finish(0);
|
|
220
|
+
}
|
|
221
|
+
/**
|
|
222
|
+
* Last-resort backstop: if anything in the event-handler / refresh-tick
|
|
223
|
+
* chain throws (e.g. a renderer regression), restore the terminal before
|
|
224
|
+
* the process dies so we never leave alt-screen + hidden cursor + raw mode.
|
|
225
|
+
*/
|
|
226
|
+
function onFatal(err) {
|
|
227
|
+
restoreTerminal();
|
|
228
|
+
if (resolveLoop) {
|
|
229
|
+
const r = resolveLoop;
|
|
230
|
+
resolveLoop = null;
|
|
231
|
+
r(1);
|
|
232
|
+
}
|
|
233
|
+
// Surface the original error after the terminal is sane.
|
|
234
|
+
console.error(err);
|
|
235
|
+
}
|
|
236
|
+
function onResize() {
|
|
237
|
+
if (restored)
|
|
238
|
+
return;
|
|
239
|
+
try {
|
|
240
|
+
// Force a full clear so a shrunk terminal doesn't leave stale rows.
|
|
241
|
+
lastFrame = '';
|
|
242
|
+
out.write(CLEAR_SCREEN);
|
|
243
|
+
paint();
|
|
244
|
+
}
|
|
245
|
+
catch {
|
|
246
|
+
// Never let a resize repaint corrupt the terminal.
|
|
247
|
+
finish(1);
|
|
248
|
+
}
|
|
249
|
+
}
|
|
250
|
+
function cycleTab(dir) {
|
|
251
|
+
const idx = TAB_ORDER.indexOf(tab);
|
|
252
|
+
const next = (idx + dir + TAB_ORDER.length) % TAB_ORDER.length;
|
|
253
|
+
tab = TAB_ORDER[next];
|
|
254
|
+
selected = 0;
|
|
255
|
+
paint();
|
|
256
|
+
}
|
|
257
|
+
function moveSelection(delta) {
|
|
258
|
+
const max = selectableCount(snap, tab);
|
|
259
|
+
if (max <= 0)
|
|
260
|
+
return;
|
|
261
|
+
selected = Math.min(max - 1, Math.max(0, selected + delta));
|
|
262
|
+
paint();
|
|
263
|
+
}
|
|
264
|
+
function onKeyRaw(key) {
|
|
265
|
+
if (restored)
|
|
266
|
+
return;
|
|
267
|
+
// Ctrl-C / q → quit.
|
|
268
|
+
if (key === '' || key === 'q' || key === 'Q') {
|
|
269
|
+
finish(0);
|
|
270
|
+
return;
|
|
271
|
+
}
|
|
272
|
+
// Numeric tab selection (1-9, bounded by TAB_ORDER length).
|
|
273
|
+
if (key >= '1' && key <= '9') {
|
|
274
|
+
const idx = Number(key) - 1;
|
|
275
|
+
if (idx < TAB_ORDER.length) {
|
|
276
|
+
tab = TAB_ORDER[idx];
|
|
277
|
+
selected = 0;
|
|
278
|
+
paint();
|
|
279
|
+
}
|
|
280
|
+
return;
|
|
281
|
+
}
|
|
282
|
+
switch (key) {
|
|
283
|
+
case '\t': // Tab → next tab
|
|
284
|
+
cycleTab(1);
|
|
285
|
+
return;
|
|
286
|
+
case '\x1b[Z': // Shift-Tab → previous tab
|
|
287
|
+
cycleTab(-1);
|
|
288
|
+
return;
|
|
289
|
+
case 'j':
|
|
290
|
+
case '\x1b[B': // Down arrow
|
|
291
|
+
moveSelection(1);
|
|
292
|
+
return;
|
|
293
|
+
case 'k':
|
|
294
|
+
case '\x1b[A': // Up arrow
|
|
295
|
+
moveSelection(-1);
|
|
296
|
+
return;
|
|
297
|
+
case 'r':
|
|
298
|
+
case 'R':
|
|
299
|
+
void refresh();
|
|
300
|
+
return;
|
|
301
|
+
case '\r':
|
|
302
|
+
case '\n':
|
|
303
|
+
// Enter → "open detail". The renderer already highlights the selected
|
|
304
|
+
// row; a dedicated detail pane is out of scope for M13, so Enter
|
|
305
|
+
// triggers an immediate refresh of the focused tab (cheap, useful,
|
|
306
|
+
// and never leaves the alt-screen). Reads only — no outward action.
|
|
307
|
+
void refresh();
|
|
308
|
+
return;
|
|
309
|
+
default:
|
|
310
|
+
return;
|
|
311
|
+
}
|
|
312
|
+
}
|
|
313
|
+
/** Keypress entry point — guarded so a renderer throw can never corrupt
|
|
314
|
+
* the terminal (restoreTerminal runs before the process dies). */
|
|
315
|
+
function onKey(key) {
|
|
316
|
+
try {
|
|
317
|
+
onKeyRaw(key);
|
|
318
|
+
}
|
|
319
|
+
catch (err) {
|
|
320
|
+
onFatal(err);
|
|
321
|
+
}
|
|
322
|
+
}
|
|
323
|
+
// ── Wire up + run ───────────────────────────────────────────────────────
|
|
324
|
+
return new Promise((resolve) => {
|
|
325
|
+
resolveLoop = resolve;
|
|
326
|
+
try {
|
|
327
|
+
enterTerminal();
|
|
328
|
+
paint();
|
|
329
|
+
input.on('data', onKey);
|
|
330
|
+
process.on('SIGINT', onSignal);
|
|
331
|
+
process.on('SIGTERM', onSignal);
|
|
332
|
+
process.on('SIGWINCH', onResize);
|
|
333
|
+
// Process-level backstops: guarantee terminal restoration even if a
|
|
334
|
+
// throw escapes a sync event listener or the refresh tick. Removed in
|
|
335
|
+
// restoreTerminal() so they don't leak across a normal quit.
|
|
336
|
+
process.once('uncaughtException', onFatal);
|
|
337
|
+
process.once('unhandledRejection', onFatal);
|
|
338
|
+
timer = setInterval(() => void refresh(), REFRESH_MS);
|
|
339
|
+
// Don't let the refresh timer keep the event loop alive on its own.
|
|
340
|
+
if (typeof timer.unref === 'function')
|
|
341
|
+
timer.unref();
|
|
342
|
+
}
|
|
343
|
+
catch {
|
|
344
|
+
// Any failure setting up the interactive loop must restore the terminal
|
|
345
|
+
// and resolve cleanly rather than leaving it corrupted.
|
|
346
|
+
finish(0);
|
|
347
|
+
}
|
|
348
|
+
});
|
|
349
|
+
}
|
|
350
|
+
//# sourceMappingURL=app.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"app.js","sourceRoot":"","sources":["../../src/tui/app.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* src/tui/render.ts
|
|
3
|
+
*
|
|
4
|
+
* PURE renderer for the interactive TUI dashboard.
|
|
5
|
+
*
|
|
6
|
+
* renderFrame(snap, state) → complete ANSI frame string sized to
|
|
7
|
+
* state.cols × state.rows. No I/O, no side-effects, no timers.
|
|
8
|
+
* Fully testable by snapshotting the returned string.
|
|
9
|
+
*
|
|
10
|
+
* Uses ONLY src/cli/ui.ts helpers (C, stripAnsi, pad, makeColors)
|
|
11
|
+
* and Node built-ins. Zero new runtime deps.
|
|
12
|
+
*/
|
|
13
|
+
import type { DashboardSnapshot, TuiTab } from '../core/types.js';
|
|
14
|
+
export interface RenderState {
|
|
15
|
+
tab: TuiTab;
|
|
16
|
+
selected: number;
|
|
17
|
+
cols: number;
|
|
18
|
+
rows: number;
|
|
19
|
+
}
|
|
20
|
+
export declare function renderFrame(snap: DashboardSnapshot, state: RenderState): string;
|