@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,431 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* readiness.ts — SHARED, READ-ONLY first-activation readiness model (H7).
|
|
3
|
+
*
|
|
4
|
+
* Single source of truth consumed by BOTH `ashlr preflight` (src/cli/preflight.ts)
|
|
5
|
+
* AND the five new read-only `ashlr doctor` probes (src/core/doctor.ts), so there
|
|
6
|
+
* is no drift and no double maintenance. See docs/contracts/CONTRACT-H7.md
|
|
7
|
+
* (BUILD ITEM 1 + BUILD ITEM 2).
|
|
8
|
+
*
|
|
9
|
+
* H7 ABSOLUTE RULES (proven by test/h7.*):
|
|
10
|
+
* - READ-ONLY: composes only read-only primitives — probeEndpoint (local GET,
|
|
11
|
+
* never throws), listEnrolled, killSwitchOn, loadDaemonState (H5 self-heal),
|
|
12
|
+
* listSandboxes. It MUTATES NOTHING and adds NO outward capability.
|
|
13
|
+
* - The ONE write is the `~/.ashlr` writeable probe — it writes then UNLINKS a
|
|
14
|
+
* private sentinel under the (HOME-relative, isolated-in-tests) ~/.ashlr dir;
|
|
15
|
+
* it touches no repo, no enrollment, no kill, no daemon state, and leaves no
|
|
16
|
+
* persistent artifact.
|
|
17
|
+
* - NEVER throws — every facet degrades to a typed result on error.
|
|
18
|
+
* - No new runtime deps; node builtins + existing core modules only.
|
|
19
|
+
*
|
|
20
|
+
* NOTE: paths are resolved at CALL TIME via homedir() (matching policy.ts /
|
|
21
|
+
* daemon/state.ts) so a test that relocates process.env.HOME gets an ISOLATED
|
|
22
|
+
* ~/.ashlr — never the real one. (config.ts CONFIG_DIR is captured at import
|
|
23
|
+
* time, so we do NOT use it here for the writeable sentinel.)
|
|
24
|
+
*/
|
|
25
|
+
import { spawnSync } from 'node:child_process';
|
|
26
|
+
import { existsSync, mkdirSync, writeFileSync, unlinkSync, readFileSync } from 'node:fs';
|
|
27
|
+
import { homedir } from 'node:os';
|
|
28
|
+
import { join } from 'node:path';
|
|
29
|
+
import { probeEndpoint } from './providers.js';
|
|
30
|
+
import { listEnrolled, killSwitchOn } from './sandbox/policy.js';
|
|
31
|
+
import { loadDaemonState, daemonStatePath } from './daemon/state.js';
|
|
32
|
+
import { listSandboxes, ORPHAN_STALE_MS } from './sandbox/worktree.js';
|
|
33
|
+
import { getPhantomStatus } from './phantom.js';
|
|
34
|
+
// ---------------------------------------------------------------------------
|
|
35
|
+
// Internal: call-time ~/.ashlr resolution (HOME-relative, isolated in tests)
|
|
36
|
+
// ---------------------------------------------------------------------------
|
|
37
|
+
/** Call-time ~/.ashlr dir (matches policy.ts / daemon/state.ts — NOT config.ts). */
|
|
38
|
+
function ashlrDir() {
|
|
39
|
+
return join(homedir(), '.ashlr');
|
|
40
|
+
}
|
|
41
|
+
/** Orphan-sandbox count threshold at/above which sandbox health warns. */
|
|
42
|
+
export const SANDBOX_ORPHAN_WARN_THRESHOLD = 3;
|
|
43
|
+
// ---------------------------------------------------------------------------
|
|
44
|
+
// Per-facet read-only helpers (each NEVER throws)
|
|
45
|
+
// ---------------------------------------------------------------------------
|
|
46
|
+
/**
|
|
47
|
+
* READ-ONLY writeable probe for ~/.ashlr. Writes then immediately UNLINKS a
|
|
48
|
+
* private sentinel under the (call-time, HOME-relative) ~/.ashlr dir. Returns
|
|
49
|
+
* true when writeable, false otherwise. Leaves NO persistent artifact. Never
|
|
50
|
+
* throws.
|
|
51
|
+
*/
|
|
52
|
+
export function checkAshlrWriteable() {
|
|
53
|
+
const dir = ashlrDir();
|
|
54
|
+
// A unique sentinel name so concurrent probes never collide and a leftover
|
|
55
|
+
// (should an unlink ever be skipped) is unmistakably transient.
|
|
56
|
+
const sentinel = join(dir, `.ashlr-preflight-${process.pid}-${Date.now()}.tmp`);
|
|
57
|
+
try {
|
|
58
|
+
if (!existsSync(dir))
|
|
59
|
+
mkdirSync(dir, { recursive: true });
|
|
60
|
+
writeFileSync(sentinel, '', 'utf8');
|
|
61
|
+
return true;
|
|
62
|
+
}
|
|
63
|
+
catch {
|
|
64
|
+
return false;
|
|
65
|
+
}
|
|
66
|
+
finally {
|
|
67
|
+
// ALWAYS attempt to remove the sentinel — leave no persistent artifact.
|
|
68
|
+
try {
|
|
69
|
+
if (existsSync(sentinel))
|
|
70
|
+
unlinkSync(sentinel);
|
|
71
|
+
}
|
|
72
|
+
catch {
|
|
73
|
+
/* idempotent — never throw from the cleanup */
|
|
74
|
+
}
|
|
75
|
+
}
|
|
76
|
+
}
|
|
77
|
+
/** READ-ONLY enrollment snapshot: { count } via listEnrolled(). Never throws. */
|
|
78
|
+
export function readEnrollmentState() {
|
|
79
|
+
try {
|
|
80
|
+
return { count: listEnrolled().length };
|
|
81
|
+
}
|
|
82
|
+
catch {
|
|
83
|
+
return { count: 0 };
|
|
84
|
+
}
|
|
85
|
+
}
|
|
86
|
+
/** READ-ONLY kill-switch snapshot: { on } via killSwitchOn(). Never throws. */
|
|
87
|
+
export function readKillState() {
|
|
88
|
+
try {
|
|
89
|
+
return { on: killSwitchOn() };
|
|
90
|
+
}
|
|
91
|
+
catch {
|
|
92
|
+
return { on: false };
|
|
93
|
+
}
|
|
94
|
+
}
|
|
95
|
+
/**
|
|
96
|
+
* READ-ONLY daemon-health snapshot via loadDaemonState() (which applies the H5
|
|
97
|
+
* reconcileDaemonState self-heal at the load chokepoint). Returns whether the
|
|
98
|
+
* daemon is reported running, its recorded pid, and whether the recorded pid is
|
|
99
|
+
* still alive (a still-running flag with a live pid is a healthy live daemon; a
|
|
100
|
+
* dead-pid running flag is already self-healed to running:false by the load).
|
|
101
|
+
* Never throws.
|
|
102
|
+
*/
|
|
103
|
+
export function readDaemonHealth() {
|
|
104
|
+
try {
|
|
105
|
+
// Peek at the RAW persisted flag BEFORE loadDaemonState() applies the H5
|
|
106
|
+
// reconcileDaemonState self-heal, so we can report whether a stale dead-pid
|
|
107
|
+
// `running:true` flag was healed at the load chokepoint. This peek is a pure
|
|
108
|
+
// read — it never writes.
|
|
109
|
+
let rawRunning = false;
|
|
110
|
+
let rawPid = null;
|
|
111
|
+
try {
|
|
112
|
+
const p = daemonStatePath();
|
|
113
|
+
if (existsSync(p)) {
|
|
114
|
+
const parsed = JSON.parse(readFileSync(p, 'utf8'));
|
|
115
|
+
if (typeof parsed === 'object' && parsed !== null && !Array.isArray(parsed)) {
|
|
116
|
+
const obj = parsed;
|
|
117
|
+
rawRunning = obj['running'] === true;
|
|
118
|
+
rawPid = typeof obj['pid'] === 'number' ? obj['pid'] : null;
|
|
119
|
+
}
|
|
120
|
+
}
|
|
121
|
+
}
|
|
122
|
+
catch {
|
|
123
|
+
rawRunning = false;
|
|
124
|
+
rawPid = null;
|
|
125
|
+
}
|
|
126
|
+
// loadDaemonState() applies the self-heal: a dead-pid running flag becomes
|
|
127
|
+
// running:false. The post-load `running` is therefore the truthful state.
|
|
128
|
+
const state = loadDaemonState();
|
|
129
|
+
// selfHealed iff the RAW file claimed running with a pid that is NOT alive
|
|
130
|
+
// and the post-load state is now stopped (the reconcile flipped it).
|
|
131
|
+
let selfHealed = false;
|
|
132
|
+
if (rawRunning && !state.running) {
|
|
133
|
+
let rawPidAlive = false;
|
|
134
|
+
if (typeof rawPid === 'number' && rawPid > 0) {
|
|
135
|
+
try {
|
|
136
|
+
process.kill(rawPid, 0);
|
|
137
|
+
rawPidAlive = true;
|
|
138
|
+
}
|
|
139
|
+
catch {
|
|
140
|
+
rawPidAlive = false;
|
|
141
|
+
}
|
|
142
|
+
}
|
|
143
|
+
selfHealed = !rawPidAlive;
|
|
144
|
+
}
|
|
145
|
+
// pidAlive: whether the POST-load (self-healed) running flag is backed by a
|
|
146
|
+
// live pid — a healthy live daemon. (A dead-pid flag is already healed to
|
|
147
|
+
// running:false above, so this is only true for a genuinely live daemon.)
|
|
148
|
+
let pidAlive = false;
|
|
149
|
+
if (state.running && typeof state.pid === 'number' && state.pid > 0) {
|
|
150
|
+
try {
|
|
151
|
+
process.kill(state.pid, 0);
|
|
152
|
+
pidAlive = true;
|
|
153
|
+
}
|
|
154
|
+
catch {
|
|
155
|
+
pidAlive = false;
|
|
156
|
+
}
|
|
157
|
+
}
|
|
158
|
+
return { running: state.running, pid: state.pid, selfHealed, pidAlive };
|
|
159
|
+
}
|
|
160
|
+
catch {
|
|
161
|
+
return { running: false, pid: null, selfHealed: false, pidAlive: false };
|
|
162
|
+
}
|
|
163
|
+
}
|
|
164
|
+
/**
|
|
165
|
+
* READ-ONLY sandbox-health snapshot via listSandboxes(): total on-disk sandboxes
|
|
166
|
+
* + an orphan estimate. A sandbox is counted as an orphan when its owner pid is
|
|
167
|
+
* no longer alive AND it is older than ORPHAN_STALE_MS (mirrors the sweep's two
|
|
168
|
+
* guards — a LIVE owner pid is NEVER counted as an orphan regardless of age).
|
|
169
|
+
* Read-only; removes NOTHING. Never throws.
|
|
170
|
+
*/
|
|
171
|
+
export function readSandboxHealth() {
|
|
172
|
+
try {
|
|
173
|
+
const sandboxes = listSandboxes();
|
|
174
|
+
const now = Date.now();
|
|
175
|
+
let orphans = 0;
|
|
176
|
+
for (const sb of sandboxes) {
|
|
177
|
+
// Guard 1 — POSITIVE liveness: a live owner pid is never an orphan.
|
|
178
|
+
const pid = sb.ownerPid;
|
|
179
|
+
if (typeof pid === 'number' && Number.isInteger(pid) && pid > 0) {
|
|
180
|
+
let alive = false;
|
|
181
|
+
try {
|
|
182
|
+
process.kill(pid, 0);
|
|
183
|
+
alive = true;
|
|
184
|
+
}
|
|
185
|
+
catch {
|
|
186
|
+
alive = false;
|
|
187
|
+
}
|
|
188
|
+
if (alive)
|
|
189
|
+
continue;
|
|
190
|
+
}
|
|
191
|
+
// Guard 2 — AGE fallback: no usable live owner; count only when stale.
|
|
192
|
+
const created = Date.parse(sb.createdAt);
|
|
193
|
+
if (Number.isFinite(created) && now - created >= ORPHAN_STALE_MS) {
|
|
194
|
+
orphans++;
|
|
195
|
+
}
|
|
196
|
+
}
|
|
197
|
+
return { total: sandboxes.length, orphans };
|
|
198
|
+
}
|
|
199
|
+
catch {
|
|
200
|
+
return { total: 0, orphans: 0 };
|
|
201
|
+
}
|
|
202
|
+
}
|
|
203
|
+
/** READ-ONLY presence check for git (`git --version`). Never throws. */
|
|
204
|
+
function gitPresent() {
|
|
205
|
+
try {
|
|
206
|
+
const r = spawnSync('git', ['--version'], { encoding: 'utf8', timeout: 5000 });
|
|
207
|
+
return !r.error && r.status === 0;
|
|
208
|
+
}
|
|
209
|
+
catch {
|
|
210
|
+
return false;
|
|
211
|
+
}
|
|
212
|
+
}
|
|
213
|
+
// ---------------------------------------------------------------------------
|
|
214
|
+
// buildReadiness — composes the facets into a ReadinessReport
|
|
215
|
+
// ---------------------------------------------------------------------------
|
|
216
|
+
/**
|
|
217
|
+
* Build the full first-activation readiness report (READ-ONLY).
|
|
218
|
+
*
|
|
219
|
+
* Composes (all read-only, all degrade gracefully):
|
|
220
|
+
* - local model reachable via probeEndpoint (down => WARNING, never a blocker)
|
|
221
|
+
* - enrollment count via readEnrollmentState (0 => INFO, never a blocker)
|
|
222
|
+
* - kill-switch via readKillState (on => WARNING)
|
|
223
|
+
* - daemon not stuck via readDaemonHealth (self-heal already applied)
|
|
224
|
+
* - ~/.ashlr writeable via checkAshlrWriteable (not writeable => BLOCKER)
|
|
225
|
+
* - sandbox health via readSandboxHealth (high orphan count => WARNING)
|
|
226
|
+
* - git present (absent => BLOCKER); phantom present (absent => WARNING)
|
|
227
|
+
*
|
|
228
|
+
* `ready` is true iff blockers.length === 0. Never throws.
|
|
229
|
+
*
|
|
230
|
+
* MUST NOT mutate any enrollment/kill/daemon/sandbox/repo state; the ONLY write
|
|
231
|
+
* is the self-cleaning sentinel inside checkAshlrWriteable.
|
|
232
|
+
*/
|
|
233
|
+
export async function buildReadiness(cfg) {
|
|
234
|
+
const blockers = [];
|
|
235
|
+
const warnings = [];
|
|
236
|
+
const info = [];
|
|
237
|
+
// -- local model reachable (down => warning, never a blocker, never throws) --
|
|
238
|
+
{
|
|
239
|
+
const models = cfg?.models;
|
|
240
|
+
const lmUrl = typeof models?.lmstudio === 'string' ? models.lmstudio : '';
|
|
241
|
+
const olUrl = typeof models?.ollama === 'string' ? models.ollama : '';
|
|
242
|
+
const probes = [];
|
|
243
|
+
if (lmUrl)
|
|
244
|
+
probes.push(probeEndpoint('lmstudio', lmUrl));
|
|
245
|
+
if (olUrl)
|
|
246
|
+
probes.push(probeEndpoint('ollama', olUrl));
|
|
247
|
+
if (probes.length === 0) {
|
|
248
|
+
warnings.push({
|
|
249
|
+
id: 'model',
|
|
250
|
+
severity: 'warning',
|
|
251
|
+
detail: 'no local model endpoint configured (cfg.models.lmstudio / cfg.models.ollama)',
|
|
252
|
+
fix: 'Configure a local model in ~/.ashlr/config.json or run `ashlr models`.',
|
|
253
|
+
});
|
|
254
|
+
}
|
|
255
|
+
else {
|
|
256
|
+
let anyUp = false;
|
|
257
|
+
const downDetails = [];
|
|
258
|
+
// probeEndpoint never throws, but stay defensive — a single rejection must
|
|
259
|
+
// not abort the whole readiness report.
|
|
260
|
+
const results = await Promise.allSettled(probes);
|
|
261
|
+
for (const r of results) {
|
|
262
|
+
if (r.status === 'fulfilled') {
|
|
263
|
+
if (r.value.up)
|
|
264
|
+
anyUp = true;
|
|
265
|
+
else
|
|
266
|
+
downDetails.push(`${r.value.id} down (${r.value.error ?? 'no response'})`);
|
|
267
|
+
}
|
|
268
|
+
else {
|
|
269
|
+
downDetails.push('probe failed');
|
|
270
|
+
}
|
|
271
|
+
}
|
|
272
|
+
if (anyUp) {
|
|
273
|
+
info.push({
|
|
274
|
+
id: 'model',
|
|
275
|
+
severity: 'info',
|
|
276
|
+
detail: 'local model reachable',
|
|
277
|
+
});
|
|
278
|
+
}
|
|
279
|
+
else {
|
|
280
|
+
warnings.push({
|
|
281
|
+
id: 'model',
|
|
282
|
+
severity: 'warning',
|
|
283
|
+
detail: `local model unreachable — ${downDetails.join('; ')}`,
|
|
284
|
+
fix: 'Start LM Studio / Ollama, or proceed (autonomy needs a local model to run).',
|
|
285
|
+
});
|
|
286
|
+
}
|
|
287
|
+
}
|
|
288
|
+
}
|
|
289
|
+
// -- enrollment state (empty is FINE — info, never a blocker) ---------------
|
|
290
|
+
{
|
|
291
|
+
const { count } = readEnrollmentState();
|
|
292
|
+
if (count === 0) {
|
|
293
|
+
info.push({
|
|
294
|
+
id: 'enrollment',
|
|
295
|
+
severity: 'info',
|
|
296
|
+
detail: 'no repos enrolled yet (a fresh install is legitimately empty)',
|
|
297
|
+
fix: 'Run `ashlr onboard` to safely enroll your first repo.',
|
|
298
|
+
});
|
|
299
|
+
}
|
|
300
|
+
else {
|
|
301
|
+
info.push({
|
|
302
|
+
id: 'enrollment',
|
|
303
|
+
severity: 'info',
|
|
304
|
+
detail: `${count} repo(s) enrolled`,
|
|
305
|
+
});
|
|
306
|
+
}
|
|
307
|
+
}
|
|
308
|
+
// -- kill-switch (on => warning: nothing will run) --------------------------
|
|
309
|
+
{
|
|
310
|
+
const { on } = readKillState();
|
|
311
|
+
if (on) {
|
|
312
|
+
warnings.push({
|
|
313
|
+
id: 'kill-switch',
|
|
314
|
+
severity: 'warning',
|
|
315
|
+
detail: 'kill switch is ON — all autonomy is paused (nothing will run)',
|
|
316
|
+
fix: 'Clear it with `ashlr kill off` when you are ready to resume.',
|
|
317
|
+
});
|
|
318
|
+
}
|
|
319
|
+
else {
|
|
320
|
+
info.push({
|
|
321
|
+
id: 'kill-switch',
|
|
322
|
+
severity: 'info',
|
|
323
|
+
detail: 'kill switch is OFF',
|
|
324
|
+
});
|
|
325
|
+
}
|
|
326
|
+
}
|
|
327
|
+
// -- daemon not stuck (H5 self-heal already applied at load) -----------------
|
|
328
|
+
{
|
|
329
|
+
const { running, pid, selfHealed } = readDaemonHealth();
|
|
330
|
+
if (selfHealed) {
|
|
331
|
+
info.push({
|
|
332
|
+
id: 'daemon',
|
|
333
|
+
severity: 'info',
|
|
334
|
+
detail: 'daemon stopped (a stale dead-pid running flag was self-healed)',
|
|
335
|
+
});
|
|
336
|
+
}
|
|
337
|
+
else if (running) {
|
|
338
|
+
info.push({
|
|
339
|
+
id: 'daemon',
|
|
340
|
+
severity: 'info',
|
|
341
|
+
detail: `daemon running (pid ${pid ?? '?'})`,
|
|
342
|
+
});
|
|
343
|
+
}
|
|
344
|
+
else {
|
|
345
|
+
info.push({
|
|
346
|
+
id: 'daemon',
|
|
347
|
+
severity: 'info',
|
|
348
|
+
detail: 'daemon not running',
|
|
349
|
+
});
|
|
350
|
+
}
|
|
351
|
+
}
|
|
352
|
+
// -- ~/.ashlr writeable (not writeable => BLOCKER — nothing can persist) -----
|
|
353
|
+
{
|
|
354
|
+
if (checkAshlrWriteable()) {
|
|
355
|
+
info.push({
|
|
356
|
+
id: 'ashlr-writeable',
|
|
357
|
+
severity: 'info',
|
|
358
|
+
detail: '~/.ashlr is writeable',
|
|
359
|
+
});
|
|
360
|
+
}
|
|
361
|
+
else {
|
|
362
|
+
blockers.push({
|
|
363
|
+
id: 'ashlr-writeable',
|
|
364
|
+
severity: 'blocker',
|
|
365
|
+
detail: '~/.ashlr is NOT writeable — no state can be persisted',
|
|
366
|
+
fix: 'Fix permissions on ~/.ashlr (e.g. `chmod u+rwx ~/.ashlr`).',
|
|
367
|
+
});
|
|
368
|
+
}
|
|
369
|
+
}
|
|
370
|
+
// -- sandbox health (high orphan count => warning; never a blocker) ---------
|
|
371
|
+
{
|
|
372
|
+
const { total, orphans } = readSandboxHealth();
|
|
373
|
+
if (orphans >= SANDBOX_ORPHAN_WARN_THRESHOLD) {
|
|
374
|
+
warnings.push({
|
|
375
|
+
id: 'sandbox',
|
|
376
|
+
severity: 'warning',
|
|
377
|
+
detail: `${orphans} orphaned sandbox(es) of ${total} on disk`,
|
|
378
|
+
fix: 'Reclaim them with `ashlr sandbox gc`.',
|
|
379
|
+
});
|
|
380
|
+
}
|
|
381
|
+
else {
|
|
382
|
+
info.push({
|
|
383
|
+
id: 'sandbox',
|
|
384
|
+
severity: 'info',
|
|
385
|
+
detail: total === 0 ? 'no sandboxes on disk' : `${total} sandbox(es) on disk, ${orphans} orphan(s)`,
|
|
386
|
+
});
|
|
387
|
+
}
|
|
388
|
+
}
|
|
389
|
+
// -- git present (absent => BLOCKER) ----------------------------------------
|
|
390
|
+
{
|
|
391
|
+
if (gitPresent()) {
|
|
392
|
+
info.push({ id: 'git', severity: 'info', detail: 'git is installed' });
|
|
393
|
+
}
|
|
394
|
+
else {
|
|
395
|
+
blockers.push({
|
|
396
|
+
id: 'git',
|
|
397
|
+
severity: 'blocker',
|
|
398
|
+
detail: 'git not found on PATH — the autonomous chain cannot run',
|
|
399
|
+
fix: 'Install git: https://git-scm.com',
|
|
400
|
+
});
|
|
401
|
+
}
|
|
402
|
+
}
|
|
403
|
+
// -- phantom present (optional; absent => warning) --------------------------
|
|
404
|
+
{
|
|
405
|
+
let installed = false;
|
|
406
|
+
try {
|
|
407
|
+
installed = getPhantomStatus().installed;
|
|
408
|
+
}
|
|
409
|
+
catch {
|
|
410
|
+
installed = false;
|
|
411
|
+
}
|
|
412
|
+
if (installed) {
|
|
413
|
+
info.push({ id: 'phantom', severity: 'info', detail: 'phantom is installed' });
|
|
414
|
+
}
|
|
415
|
+
else {
|
|
416
|
+
warnings.push({
|
|
417
|
+
id: 'phantom',
|
|
418
|
+
severity: 'warning',
|
|
419
|
+
detail: 'phantom not installed (optional — secret scrubbing still applies)',
|
|
420
|
+
});
|
|
421
|
+
}
|
|
422
|
+
}
|
|
423
|
+
return {
|
|
424
|
+
ready: blockers.length === 0,
|
|
425
|
+
blockers,
|
|
426
|
+
warnings,
|
|
427
|
+
info,
|
|
428
|
+
generatedAt: new Date().toISOString(),
|
|
429
|
+
};
|
|
430
|
+
}
|
|
431
|
+
//# sourceMappingURL=readiness.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"readiness.js","sourceRoot":"","sources":["../../src/core/readiness.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,40 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* agent-loop.ts — bounded ReAct-style loop for a single RunTask.
|
|
3
|
+
*
|
|
4
|
+
* Runs the task against a ProviderClient, handling tool calls when supported,
|
|
5
|
+
* enforcing the hard budget ceiling, and emitting RunStep events per step.
|
|
6
|
+
* Never throws out of runTask — all errors are captured into task.status/error.
|
|
7
|
+
*
|
|
8
|
+
* M11: accepts an optional StreamSink in ctx for live progress streaming.
|
|
9
|
+
* Emits model-delta events via client.chatStream() when available (falls back
|
|
10
|
+
* to client.chat() with a single delta of the full content). Also emits
|
|
11
|
+
* tool-call events per tool execution.
|
|
12
|
+
*/
|
|
13
|
+
import type { RunTask, RunStep, RunBudget, RunUsage, ProviderClient } from '../types.js';
|
|
14
|
+
import type { StreamSink } from './streaming.js';
|
|
15
|
+
/**
|
|
16
|
+
* Execute a single RunTask to completion using `client`.
|
|
17
|
+
*
|
|
18
|
+
* - Runs a bounded chat loop (ReAct-style).
|
|
19
|
+
* - When ctx.tools is present AND client.supportsTools, may issue tool calls
|
|
20
|
+
* and feed results back as role:'tool' messages.
|
|
21
|
+
* - Accumulates per-step usage into ctx.usage (mutated in place via addUsage).
|
|
22
|
+
* - Emits one RunStep per model call (kind:'model') and per tool execution
|
|
23
|
+
* batch (kind:'tool') via ctx.onStep.
|
|
24
|
+
* - M11: emits RunStreamEvents via ctx.sink for live CLI progress:
|
|
25
|
+
* model-delta (via chatStream if available, else single onDelta of full content),
|
|
26
|
+
* tool-call per tool execution.
|
|
27
|
+
* - HARD STOP: if overBudget(ctx.usage, ctx.budget) at any point, stops the
|
|
28
|
+
* loop. Sets task.status='failed' (no result) or 'done' (partial result).
|
|
29
|
+
* - On success: task.status='done', task.result=<text>, task.usage=<delta>.
|
|
30
|
+
* - On error: task.status='failed', task.error=<message>.
|
|
31
|
+
* - Returns the SAME task object (mutated) for caller convenience.
|
|
32
|
+
*/
|
|
33
|
+
export declare function runTask(task: RunTask, client: ProviderClient, ctx: {
|
|
34
|
+
tools?: unknown[];
|
|
35
|
+
budget: RunBudget;
|
|
36
|
+
usage: RunUsage;
|
|
37
|
+
/** M11: optional StreamSink for live progress events. Defaults to nullSink. */
|
|
38
|
+
sink?: StreamSink;
|
|
39
|
+
onStep: (s: RunStep) => void;
|
|
40
|
+
}): Promise<RunTask>;
|