@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 @@
|
|
|
1
|
+
{"version":3,"file":"store.js","sourceRoot":"","sources":["../../../src/core/genome/store.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* git.ts — lightweight Git introspection helpers.
|
|
3
|
+
*
|
|
4
|
+
* Rules:
|
|
5
|
+
* - Zero third-party deps; Node builtins only.
|
|
6
|
+
* - Never throw — return null / zero-filled values on any error.
|
|
7
|
+
* - Every execFileSync call gets a tight timeout (5 s) and stdio:'pipe'
|
|
8
|
+
* so a hung git never blocks the indexer.
|
|
9
|
+
*/
|
|
10
|
+
import type { GitStatus } from './types.js';
|
|
11
|
+
/**
|
|
12
|
+
* Returns true when `dir` is the root of a git repository.
|
|
13
|
+
* Accepts both standard `.git/` directories and git worktrees / submodules
|
|
14
|
+
* where `.git` is a plain file containing a `gitdir:` pointer.
|
|
15
|
+
*/
|
|
16
|
+
export declare function isRepo(dir: string): boolean;
|
|
17
|
+
/**
|
|
18
|
+
* Returns a GitStatus snapshot for the repo at `repoPath`, or null when the
|
|
19
|
+
* path is not a repo or git is unavailable.
|
|
20
|
+
*/
|
|
21
|
+
export declare function getGitStatus(repoPath: string): GitStatus | null;
|
|
22
|
+
/**
|
|
23
|
+
* Parses the `origin` remote URL of the repo at `repoPath` and extracts the
|
|
24
|
+
* GitHub org (or user) name. Returns `{ remote, org }` where either may be
|
|
25
|
+
* null when unavailable or not a recognised GitHub URL.
|
|
26
|
+
*
|
|
27
|
+
* Handles both HTTPS and SSH remote formats:
|
|
28
|
+
* https://github.com/<org>/<repo>.git
|
|
29
|
+
* git@github.com:<org>/<repo>.git
|
|
30
|
+
*/
|
|
31
|
+
export declare function getRemoteOrg(repoPath: string): {
|
|
32
|
+
remote: string | null;
|
|
33
|
+
org: string | null;
|
|
34
|
+
};
|
package/dist/core/git.js
ADDED
|
@@ -0,0 +1,115 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* git.ts — lightweight Git introspection helpers.
|
|
3
|
+
*
|
|
4
|
+
* Rules:
|
|
5
|
+
* - Zero third-party deps; Node builtins only.
|
|
6
|
+
* - Never throw — return null / zero-filled values on any error.
|
|
7
|
+
* - Every execFileSync call gets a tight timeout (5 s) and stdio:'pipe'
|
|
8
|
+
* so a hung git never blocks the indexer.
|
|
9
|
+
*/
|
|
10
|
+
import { execFileSync } from 'node:child_process';
|
|
11
|
+
import { existsSync, statSync } from 'node:fs';
|
|
12
|
+
import { join } from 'node:path';
|
|
13
|
+
// ---------------------------------------------------------------------------
|
|
14
|
+
// Internal helpers
|
|
15
|
+
// ---------------------------------------------------------------------------
|
|
16
|
+
const GIT_TIMEOUT = 5_000; // ms
|
|
17
|
+
/**
|
|
18
|
+
* Run a git command inside `cwd`. Returns trimmed stdout or null on error.
|
|
19
|
+
*/
|
|
20
|
+
function git(cwd, args) {
|
|
21
|
+
try {
|
|
22
|
+
const out = execFileSync('git', args, {
|
|
23
|
+
cwd,
|
|
24
|
+
timeout: GIT_TIMEOUT,
|
|
25
|
+
stdio: 'pipe',
|
|
26
|
+
encoding: 'utf8',
|
|
27
|
+
});
|
|
28
|
+
return out.trim();
|
|
29
|
+
}
|
|
30
|
+
catch {
|
|
31
|
+
return null;
|
|
32
|
+
}
|
|
33
|
+
}
|
|
34
|
+
// ---------------------------------------------------------------------------
|
|
35
|
+
// Public API
|
|
36
|
+
// ---------------------------------------------------------------------------
|
|
37
|
+
/**
|
|
38
|
+
* Returns true when `dir` is the root of a git repository.
|
|
39
|
+
* Accepts both standard `.git/` directories and git worktrees / submodules
|
|
40
|
+
* where `.git` is a plain file containing a `gitdir:` pointer.
|
|
41
|
+
*/
|
|
42
|
+
export function isRepo(dir) {
|
|
43
|
+
const gitEntry = join(dir, '.git');
|
|
44
|
+
if (!existsSync(gitEntry))
|
|
45
|
+
return false;
|
|
46
|
+
// Accept both directory and file (worktree / submodule)
|
|
47
|
+
const st = statSync(gitEntry, { throwIfNoEntry: false });
|
|
48
|
+
return st !== undefined; // exists as either file or dir
|
|
49
|
+
}
|
|
50
|
+
/**
|
|
51
|
+
* Returns a GitStatus snapshot for the repo at `repoPath`, or null when the
|
|
52
|
+
* path is not a repo or git is unavailable.
|
|
53
|
+
*/
|
|
54
|
+
export function getGitStatus(repoPath) {
|
|
55
|
+
if (!isRepo(repoPath))
|
|
56
|
+
return null;
|
|
57
|
+
// --- branch ---
|
|
58
|
+
const branchRaw = git(repoPath, ['rev-parse', '--abbrev-ref', 'HEAD']);
|
|
59
|
+
if (branchRaw === null)
|
|
60
|
+
return null; // git not available / not a real repo
|
|
61
|
+
const branch = branchRaw || 'HEAD'; // detached HEAD shows 'HEAD'
|
|
62
|
+
// --- dirty (number of changed lines in porcelain output) ---
|
|
63
|
+
const porcelain = git(repoPath, ['status', '--porcelain']);
|
|
64
|
+
const dirty = porcelain === null || porcelain === ''
|
|
65
|
+
? 0
|
|
66
|
+
: porcelain.split('\n').filter(Boolean).length;
|
|
67
|
+
// --- ahead / behind upstream ---
|
|
68
|
+
let ahead = 0;
|
|
69
|
+
let behind = 0;
|
|
70
|
+
const revCount = git(repoPath, [
|
|
71
|
+
'rev-list',
|
|
72
|
+
'--left-right',
|
|
73
|
+
'--count',
|
|
74
|
+
'@{u}...HEAD',
|
|
75
|
+
]);
|
|
76
|
+
if (revCount !== null) {
|
|
77
|
+
// Output is "<behind>\t<ahead>" (left=upstream, right=HEAD)
|
|
78
|
+
const parts = revCount.split(/\s+/);
|
|
79
|
+
if (parts.length >= 2) {
|
|
80
|
+
behind = parseInt(parts[0] ?? '0', 10) || 0;
|
|
81
|
+
ahead = parseInt(parts[1] ?? '0', 10) || 0;
|
|
82
|
+
}
|
|
83
|
+
}
|
|
84
|
+
// If no upstream is configured, revCount is null → ahead/behind stay 0.
|
|
85
|
+
// --- last commit ISO timestamp ---
|
|
86
|
+
const lastCommit = git(repoPath, ['log', '-1', '--format=%cI']) || null;
|
|
87
|
+
return { branch, dirty, ahead, behind, lastCommit };
|
|
88
|
+
}
|
|
89
|
+
/**
|
|
90
|
+
* Parses the `origin` remote URL of the repo at `repoPath` and extracts the
|
|
91
|
+
* GitHub org (or user) name. Returns `{ remote, org }` where either may be
|
|
92
|
+
* null when unavailable or not a recognised GitHub URL.
|
|
93
|
+
*
|
|
94
|
+
* Handles both HTTPS and SSH remote formats:
|
|
95
|
+
* https://github.com/<org>/<repo>.git
|
|
96
|
+
* git@github.com:<org>/<repo>.git
|
|
97
|
+
*/
|
|
98
|
+
export function getRemoteOrg(repoPath) {
|
|
99
|
+
const remote = git(repoPath, ['remote', 'get-url', 'origin']);
|
|
100
|
+
if (!remote)
|
|
101
|
+
return { remote: null, org: null };
|
|
102
|
+
// HTTPS: https://github.com/org/repo(.git)?
|
|
103
|
+
const httpsMatch = remote.match(/^https?:\/\/(?:[^@]+@)?github\.com\/([^/]+)\//i);
|
|
104
|
+
if (httpsMatch) {
|
|
105
|
+
return { remote, org: httpsMatch[1] ?? null };
|
|
106
|
+
}
|
|
107
|
+
// SSH: git@github.com:org/repo(.git)?
|
|
108
|
+
const sshMatch = remote.match(/^git@github\.com:([^/]+)\//i);
|
|
109
|
+
if (sshMatch) {
|
|
110
|
+
return { remote, org: sshMatch[1] ?? null };
|
|
111
|
+
}
|
|
112
|
+
// Remote exists but is not GitHub (e.g. local path, other host)
|
|
113
|
+
return { remote, org: null };
|
|
114
|
+
}
|
|
115
|
+
//# sourceMappingURL=git.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"git.js","sourceRoot":"","sources":["../../src/core/git.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,82 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* advance.ts — M28: advance a Goal by running its NEXT actionable milestone
|
|
3
|
+
* through the EXACT M21/M24 sandboxed, proposal-only execution path.
|
|
4
|
+
*
|
|
5
|
+
* THIS IS THE SAFETY-CRITICAL MODULE. The adversarial review WILL try to break
|
|
6
|
+
* the invariants below — they are enforced here, verbatim:
|
|
7
|
+
*
|
|
8
|
+
* 1. SANDBOXED + PROPOSAL-ONLY EXECUTION. advanceGoal() calls runSwarm with
|
|
9
|
+
* opts { sandbox:true, requireSandbox:true, propose:true } + a HARD budget,
|
|
10
|
+
* ALWAYS. It NEVER runs a swarm against the real working tree, NEVER ships,
|
|
11
|
+
* pushes, opens PRs, deploys, or applies a proposal. The ONLY execution
|
|
12
|
+
* sink is a PENDING inbox proposal (produced BY runSwarm's propose path).
|
|
13
|
+
* This module imports/invokes NONE of the outward-action sinks (no
|
|
14
|
+
* proposal-apply, no proposal-approve status write, no remote push, no PR
|
|
15
|
+
* creation, no deploy) — verified by a source-level grep guard in tests.
|
|
16
|
+
*
|
|
17
|
+
* 2. ENROLLMENT-SCOPED. Before ANY swarm starts, advanceGoal() resolves the
|
|
18
|
+
* goal's project and calls assertMayMutate(repo, { allowAnyRepo }) — which
|
|
19
|
+
* ALSO checks the kill switch. A non-enrolled repo (or kill switch on)
|
|
20
|
+
* HARD-ERRORS before runSwarm is ever reached. A goal with no project
|
|
21
|
+
* cannot be advanced. DEFAULT enrollment EMPTY => nothing executes.
|
|
22
|
+
*
|
|
23
|
+
* 3. STEERABLE + BOUNDED. There is NO auto-advance loop here. advanceGoal()
|
|
24
|
+
* advances exactly ONE milestone per call (the user's explicit gate). The
|
|
25
|
+
* budget is hard-capped. nextActionableMilestone() is a pure READ seam the
|
|
26
|
+
* (user-gated) daemon MAY consume — it never advances anything itself.
|
|
27
|
+
*
|
|
28
|
+
* 4. READ-ONLY TRACKING. progressOf() / nextActionableMilestone() mutate
|
|
29
|
+
* nothing; they only read the Goal record + swarm/inbox state.
|
|
30
|
+
*/
|
|
31
|
+
import type { AdvanceOptions, AshlrConfig, Goal, GoalProgress, Milestone, SwarmRun } from '../types.js';
|
|
32
|
+
/**
|
|
33
|
+
* Return the NEXT actionable milestone of a goal: the lowest-`order` milestone
|
|
34
|
+
* with status 'pending', when the goal itself is not paused/archived/done.
|
|
35
|
+
* Returns null when the goal is paused/archived/done or has no pending
|
|
36
|
+
* milestone.
|
|
37
|
+
*
|
|
38
|
+
* SEQUENCING GUARD (dependency-ordered plans): an EARLIER non-terminal
|
|
39
|
+
* milestone — one still 'in-progress' or left 'blocked' (e.g. a prior advance
|
|
40
|
+
* that threw / needs a human) — GATES the plan. When such a milestone precedes
|
|
41
|
+
* the lowest pending one, we return null rather than skipping ahead, so a
|
|
42
|
+
* sequenced plan never advances out of order past a stuck step. (A 'paused'
|
|
43
|
+
* milestone is an explicit human steering decision, NOT a stuck step, so it
|
|
44
|
+
* does NOT gate — the human deliberately set it aside.)
|
|
45
|
+
*
|
|
46
|
+
* Pure & read-only — this is the seam the user-gated daemon may consume to find
|
|
47
|
+
* goal work. It NEVER advances, runs a swarm, or mutates anything.
|
|
48
|
+
*/
|
|
49
|
+
export declare function nextActionableMilestone(goal: Goal): Milestone | null;
|
|
50
|
+
/**
|
|
51
|
+
* Advance a goal by running its NEXT actionable milestone exactly once.
|
|
52
|
+
*
|
|
53
|
+
* Flow (ALL steps mandatory):
|
|
54
|
+
* 1. loadGoal(goalId); resolve the next actionable milestone (else throw).
|
|
55
|
+
* 2. The goal MUST be bound to a project — resolve(goal.project). A goal with
|
|
56
|
+
* no project HARD-ERRORS (cannot be advanced).
|
|
57
|
+
* 3. assertMayMutate(repo, { allowAnyRepo }) — enrollment + kill-switch GATE.
|
|
58
|
+
* Throws (HARD-ERROR) BEFORE any swarm starts if the repo is not enrolled
|
|
59
|
+
* or the kill switch is on.
|
|
60
|
+
* 4. updateMilestoneStatus(... 'in-progress').
|
|
61
|
+
* 5. runSwarm({ goal, specId }, cfg, { sandbox:true, requireSandbox:true,
|
|
62
|
+
* propose:true, budget, allowCloud, project:repo }, sink). // NON-NEGOTIABLE
|
|
63
|
+
* 6. Inspect run.status: 'done' with a PENDING proposal => link swarmId +
|
|
64
|
+
* proposalId, set 'proposed'; otherwise => link swarmId, set 'blocked'.
|
|
65
|
+
* 7. Return the SwarmRun for tracking. NEVER approve/apply the proposal.
|
|
66
|
+
*
|
|
67
|
+
* This module NEVER applies/approves the proposal, never pushes to a remote,
|
|
68
|
+
* never opens a PR, and never deploys. The proposal is left PENDING for a human.
|
|
69
|
+
*
|
|
70
|
+
* @param sink optional StreamSink for the swarm; a no-op sink is used if omitted.
|
|
71
|
+
*/
|
|
72
|
+
export declare function advanceGoal(goalId: string, cfg: AshlrConfig, opts?: AdvanceOptions, sink?: (e: unknown) => void): Promise<SwarmRun>;
|
|
73
|
+
/**
|
|
74
|
+
* Compute a read-only GoalProgress roll-up for a goal: per-status counts, the
|
|
75
|
+
* proposed/done totals, fractionDone, and the next actionable milestone id.
|
|
76
|
+
*
|
|
77
|
+
* Pure analysis over the Goal record, with an optional read-only reconcile of a
|
|
78
|
+
* 'proposed' milestone to 'done' when its linked proposal was applied OUT OF
|
|
79
|
+
* BAND (loadProposal — never mutates the proposal). Mutates NOTHING. Never
|
|
80
|
+
* throws.
|
|
81
|
+
*/
|
|
82
|
+
export declare function progressOf(goal: Goal): GoalProgress;
|
|
@@ -0,0 +1,263 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* advance.ts — M28: advance a Goal by running its NEXT actionable milestone
|
|
3
|
+
* through the EXACT M21/M24 sandboxed, proposal-only execution path.
|
|
4
|
+
*
|
|
5
|
+
* THIS IS THE SAFETY-CRITICAL MODULE. The adversarial review WILL try to break
|
|
6
|
+
* the invariants below — they are enforced here, verbatim:
|
|
7
|
+
*
|
|
8
|
+
* 1. SANDBOXED + PROPOSAL-ONLY EXECUTION. advanceGoal() calls runSwarm with
|
|
9
|
+
* opts { sandbox:true, requireSandbox:true, propose:true } + a HARD budget,
|
|
10
|
+
* ALWAYS. It NEVER runs a swarm against the real working tree, NEVER ships,
|
|
11
|
+
* pushes, opens PRs, deploys, or applies a proposal. The ONLY execution
|
|
12
|
+
* sink is a PENDING inbox proposal (produced BY runSwarm's propose path).
|
|
13
|
+
* This module imports/invokes NONE of the outward-action sinks (no
|
|
14
|
+
* proposal-apply, no proposal-approve status write, no remote push, no PR
|
|
15
|
+
* creation, no deploy) — verified by a source-level grep guard in tests.
|
|
16
|
+
*
|
|
17
|
+
* 2. ENROLLMENT-SCOPED. Before ANY swarm starts, advanceGoal() resolves the
|
|
18
|
+
* goal's project and calls assertMayMutate(repo, { allowAnyRepo }) — which
|
|
19
|
+
* ALSO checks the kill switch. A non-enrolled repo (or kill switch on)
|
|
20
|
+
* HARD-ERRORS before runSwarm is ever reached. A goal with no project
|
|
21
|
+
* cannot be advanced. DEFAULT enrollment EMPTY => nothing executes.
|
|
22
|
+
*
|
|
23
|
+
* 3. STEERABLE + BOUNDED. There is NO auto-advance loop here. advanceGoal()
|
|
24
|
+
* advances exactly ONE milestone per call (the user's explicit gate). The
|
|
25
|
+
* budget is hard-capped. nextActionableMilestone() is a pure READ seam the
|
|
26
|
+
* (user-gated) daemon MAY consume — it never advances anything itself.
|
|
27
|
+
*
|
|
28
|
+
* 4. READ-ONLY TRACKING. progressOf() / nextActionableMilestone() mutate
|
|
29
|
+
* nothing; they only read the Goal record + swarm/inbox state.
|
|
30
|
+
*/
|
|
31
|
+
import { resolve } from 'node:path';
|
|
32
|
+
import { assertMayMutate } from '../sandbox/policy.js';
|
|
33
|
+
import { runSwarm } from '../swarm/runner.js';
|
|
34
|
+
import { loadSwarm } from '../swarm/store.js';
|
|
35
|
+
import { loadProposal, listProposals } from '../inbox/store.js';
|
|
36
|
+
import { loadGoal, updateMilestoneStatus } from './store.js';
|
|
37
|
+
// ---------------------------------------------------------------------------
|
|
38
|
+
// HARD per-advance budget — a goal advance is ALWAYS bounded.
|
|
39
|
+
// ---------------------------------------------------------------------------
|
|
40
|
+
/** Default HARD ceiling for a single milestone advance. allowCloud defaults off. */
|
|
41
|
+
const DEFAULT_ADVANCE_BUDGET = {
|
|
42
|
+
maxTokens: 200_000,
|
|
43
|
+
maxSteps: 40,
|
|
44
|
+
allowCloud: false,
|
|
45
|
+
};
|
|
46
|
+
// ---------------------------------------------------------------------------
|
|
47
|
+
// nextActionableMilestone — pure READ seam (no mutation, no swarm).
|
|
48
|
+
// ---------------------------------------------------------------------------
|
|
49
|
+
/**
|
|
50
|
+
* Return the NEXT actionable milestone of a goal: the lowest-`order` milestone
|
|
51
|
+
* with status 'pending', when the goal itself is not paused/archived/done.
|
|
52
|
+
* Returns null when the goal is paused/archived/done or has no pending
|
|
53
|
+
* milestone.
|
|
54
|
+
*
|
|
55
|
+
* SEQUENCING GUARD (dependency-ordered plans): an EARLIER non-terminal
|
|
56
|
+
* milestone — one still 'in-progress' or left 'blocked' (e.g. a prior advance
|
|
57
|
+
* that threw / needs a human) — GATES the plan. When such a milestone precedes
|
|
58
|
+
* the lowest pending one, we return null rather than skipping ahead, so a
|
|
59
|
+
* sequenced plan never advances out of order past a stuck step. (A 'paused'
|
|
60
|
+
* milestone is an explicit human steering decision, NOT a stuck step, so it
|
|
61
|
+
* does NOT gate — the human deliberately set it aside.)
|
|
62
|
+
*
|
|
63
|
+
* Pure & read-only — this is the seam the user-gated daemon may consume to find
|
|
64
|
+
* goal work. It NEVER advances, runs a swarm, or mutates anything.
|
|
65
|
+
*/
|
|
66
|
+
export function nextActionableMilestone(goal) {
|
|
67
|
+
if (goal.status === 'paused' || goal.status === 'archived' || goal.status === 'done') {
|
|
68
|
+
return null;
|
|
69
|
+
}
|
|
70
|
+
const ordered = [...goal.milestones].sort((a, b) => a.order - b.order);
|
|
71
|
+
const firstPending = ordered.find((m) => m.status === 'pending');
|
|
72
|
+
if (!firstPending)
|
|
73
|
+
return null;
|
|
74
|
+
// If any EARLIER milestone is still non-terminal ('in-progress' or 'blocked'),
|
|
75
|
+
// the plan is gated on it — do NOT advance past it to a later pending one.
|
|
76
|
+
const blockedEarlier = ordered.some((m) => m.order < firstPending.order &&
|
|
77
|
+
(m.status === 'in-progress' || m.status === 'blocked'));
|
|
78
|
+
if (blockedEarlier)
|
|
79
|
+
return null;
|
|
80
|
+
return firstPending;
|
|
81
|
+
}
|
|
82
|
+
// ---------------------------------------------------------------------------
|
|
83
|
+
// advanceGoal — the explicit, single-milestone, sandboxed proposal-only run.
|
|
84
|
+
// ---------------------------------------------------------------------------
|
|
85
|
+
/**
|
|
86
|
+
* Advance a goal by running its NEXT actionable milestone exactly once.
|
|
87
|
+
*
|
|
88
|
+
* Flow (ALL steps mandatory):
|
|
89
|
+
* 1. loadGoal(goalId); resolve the next actionable milestone (else throw).
|
|
90
|
+
* 2. The goal MUST be bound to a project — resolve(goal.project). A goal with
|
|
91
|
+
* no project HARD-ERRORS (cannot be advanced).
|
|
92
|
+
* 3. assertMayMutate(repo, { allowAnyRepo }) — enrollment + kill-switch GATE.
|
|
93
|
+
* Throws (HARD-ERROR) BEFORE any swarm starts if the repo is not enrolled
|
|
94
|
+
* or the kill switch is on.
|
|
95
|
+
* 4. updateMilestoneStatus(... 'in-progress').
|
|
96
|
+
* 5. runSwarm({ goal, specId }, cfg, { sandbox:true, requireSandbox:true,
|
|
97
|
+
* propose:true, budget, allowCloud, project:repo }, sink). // NON-NEGOTIABLE
|
|
98
|
+
* 6. Inspect run.status: 'done' with a PENDING proposal => link swarmId +
|
|
99
|
+
* proposalId, set 'proposed'; otherwise => link swarmId, set 'blocked'.
|
|
100
|
+
* 7. Return the SwarmRun for tracking. NEVER approve/apply the proposal.
|
|
101
|
+
*
|
|
102
|
+
* This module NEVER applies/approves the proposal, never pushes to a remote,
|
|
103
|
+
* never opens a PR, and never deploys. The proposal is left PENDING for a human.
|
|
104
|
+
*
|
|
105
|
+
* @param sink optional StreamSink for the swarm; a no-op sink is used if omitted.
|
|
106
|
+
*/
|
|
107
|
+
export async function advanceGoal(goalId, cfg, opts, sink) {
|
|
108
|
+
const goal = loadGoal(goalId);
|
|
109
|
+
if (!goal)
|
|
110
|
+
throw new Error(`goal not found: ${goalId}`);
|
|
111
|
+
const milestone = nextActionableMilestone(goal);
|
|
112
|
+
if (!milestone) {
|
|
113
|
+
throw new Error(`goal has no actionable milestone to advance: ${goalId}`);
|
|
114
|
+
}
|
|
115
|
+
// ENROLLMENT-SCOPED: a goal with no project cannot be advanced.
|
|
116
|
+
if (!goal.project) {
|
|
117
|
+
throw new Error('goal has no enrolled project; cannot advance');
|
|
118
|
+
}
|
|
119
|
+
const repo = resolve(goal.project);
|
|
120
|
+
// GATE — enrollment + kill switch. Throws BEFORE any swarm starts.
|
|
121
|
+
//
|
|
122
|
+
// allowAnyRepo is a TEST SEAM ONLY: it is honored here ONLY when the process
|
|
123
|
+
// ALSO sets ASHLR_TEST_ALLOW_ANY_REPO=1, so a production / in-process caller
|
|
124
|
+
// of advanceGoal({ allowAnyRepo: true }) CANNOT bypass the enrollment check —
|
|
125
|
+
// closing the latent weakening of invariant #2. It NEVER bypasses the kill
|
|
126
|
+
// switch (assertMayMutate checks that unconditionally). NOTE: the bypass is
|
|
127
|
+
// deliberately NOT threaded into runSwarm/createSandbox below — the runner
|
|
128
|
+
// re-runs assertMayMutate(project) at swarm start WITHOUT allowAnyRepo, so
|
|
129
|
+
// enrollment is re-enforced even in tests; do not reopen that window.
|
|
130
|
+
const allowAnyRepo = opts?.allowAnyRepo === true && process.env.ASHLR_TEST_ALLOW_ANY_REPO === '1';
|
|
131
|
+
assertMayMutate(repo, allowAnyRepo ? { allowAnyRepo: true } : undefined);
|
|
132
|
+
// Mark in-progress so tracking reflects the active advance.
|
|
133
|
+
updateMilestoneStatus(goalId, milestone.id, 'in-progress');
|
|
134
|
+
const budget = {
|
|
135
|
+
...DEFAULT_ADVANCE_BUDGET,
|
|
136
|
+
...(opts?.budget ?? {}),
|
|
137
|
+
allowCloud: opts?.allowCloud ?? false,
|
|
138
|
+
};
|
|
139
|
+
// SANDBOXED + PROPOSAL-ONLY — these three flags are NON-NEGOTIABLE.
|
|
140
|
+
//
|
|
141
|
+
// Wrapped in try/catch so a THROWN/aborted runSwarm (sandbox creation
|
|
142
|
+
// failure, provider error, mid-run kill) does NOT leave the milestone stuck
|
|
143
|
+
// 'in-progress' forever (which would make it permanently unadvanceable AND
|
|
144
|
+
// let a later pending milestone advance out of order). On any throw we reset
|
|
145
|
+
// the milestone to 'blocked' (for human attention) before re-throwing.
|
|
146
|
+
let run;
|
|
147
|
+
try {
|
|
148
|
+
run = await runSwarm({
|
|
149
|
+
goal: `${goal.objective} — ${milestone.title}`,
|
|
150
|
+
specId: milestone.specId ?? undefined,
|
|
151
|
+
}, cfg, {
|
|
152
|
+
sandbox: true,
|
|
153
|
+
requireSandbox: true,
|
|
154
|
+
propose: true,
|
|
155
|
+
budget,
|
|
156
|
+
allowCloud: opts?.allowCloud ?? false,
|
|
157
|
+
project: repo,
|
|
158
|
+
}, sink ?? (() => { }));
|
|
159
|
+
}
|
|
160
|
+
catch (err) {
|
|
161
|
+
// Best-effort recovery: surface the milestone as 'blocked' so it remains
|
|
162
|
+
// re-steerable (resume/skip/re-advance) and the plan stays in order.
|
|
163
|
+
updateMilestoneStatus(goalId, milestone.id, 'blocked');
|
|
164
|
+
throw err;
|
|
165
|
+
}
|
|
166
|
+
// Correlate the PENDING proposal the swarm emitted (its ONLY sink). We do NOT
|
|
167
|
+
// create it here — runSwarm's propose path did. We only READ to link the id.
|
|
168
|
+
const proposalId = findProposalForSwarm(run.id, repo);
|
|
169
|
+
if ((run.status === 'done' || run.status === 'needs-approval') && proposalId) {
|
|
170
|
+
updateMilestoneStatus(goalId, milestone.id, 'proposed', {
|
|
171
|
+
swarmId: run.id,
|
|
172
|
+
proposalId,
|
|
173
|
+
});
|
|
174
|
+
}
|
|
175
|
+
else {
|
|
176
|
+
// Failed / aborted / escalated, or no proposal produced => blocked for a human.
|
|
177
|
+
updateMilestoneStatus(goalId, milestone.id, 'blocked', {
|
|
178
|
+
swarmId: run.id,
|
|
179
|
+
proposalId: proposalId ?? null,
|
|
180
|
+
});
|
|
181
|
+
}
|
|
182
|
+
return run;
|
|
183
|
+
}
|
|
184
|
+
/**
|
|
185
|
+
* READ-ONLY correlation: find the PENDING proposal the swarm produced. The
|
|
186
|
+
* runner's propose path stamps the proposal summary with `swarm=<run.id>`, so
|
|
187
|
+
* we match on that (and the repo). Returns the proposal id or null. Never
|
|
188
|
+
* mutates — pure read of the inbox.
|
|
189
|
+
*/
|
|
190
|
+
function findProposalForSwarm(swarmId, repo) {
|
|
191
|
+
try {
|
|
192
|
+
const candidates = listProposals({ status: 'pending' }).filter((p) => p.origin === 'swarm' &&
|
|
193
|
+
(p.repo === repo || p.repo === null) &&
|
|
194
|
+
typeof p.summary === 'string' &&
|
|
195
|
+
p.summary.includes(`swarm=${swarmId}`));
|
|
196
|
+
// listProposals is most-recent first; take the freshest match.
|
|
197
|
+
return candidates[0]?.id ?? null;
|
|
198
|
+
}
|
|
199
|
+
catch {
|
|
200
|
+
return null;
|
|
201
|
+
}
|
|
202
|
+
}
|
|
203
|
+
// ---------------------------------------------------------------------------
|
|
204
|
+
// progressOf — read-only tracking roll-up.
|
|
205
|
+
// ---------------------------------------------------------------------------
|
|
206
|
+
/**
|
|
207
|
+
* Compute a read-only GoalProgress roll-up for a goal: per-status counts, the
|
|
208
|
+
* proposed/done totals, fractionDone, and the next actionable milestone id.
|
|
209
|
+
*
|
|
210
|
+
* Pure analysis over the Goal record, with an optional read-only reconcile of a
|
|
211
|
+
* 'proposed' milestone to 'done' when its linked proposal was applied OUT OF
|
|
212
|
+
* BAND (loadProposal — never mutates the proposal). Mutates NOTHING. Never
|
|
213
|
+
* throws.
|
|
214
|
+
*/
|
|
215
|
+
export function progressOf(goal) {
|
|
216
|
+
const byStatus = {};
|
|
217
|
+
let proposed = 0;
|
|
218
|
+
let done = 0;
|
|
219
|
+
let skipped = 0;
|
|
220
|
+
for (const m of goal.milestones) {
|
|
221
|
+
// Read-only reconcile: any milestone carrying a linked proposalId whose
|
|
222
|
+
// proposal was applied OUT OF BAND counts as done — including a 'blocked'
|
|
223
|
+
// or still 'in-progress' milestone (advance links proposalId on the blocked
|
|
224
|
+
// branch when a 'needs-approval' run produced one), not only 'proposed'.
|
|
225
|
+
// Without this a goal could under-report completion and never roll to 'done'
|
|
226
|
+
// after its proposal was applied. We NEVER mutate the proposal or the goal.
|
|
227
|
+
let effective = m.status;
|
|
228
|
+
if ((m.status === 'proposed' || m.status === 'blocked' || m.status === 'in-progress') &&
|
|
229
|
+
m.proposalId) {
|
|
230
|
+
try {
|
|
231
|
+
const p = loadProposal(m.proposalId);
|
|
232
|
+
if (p && p.status === 'applied')
|
|
233
|
+
effective = 'done';
|
|
234
|
+
}
|
|
235
|
+
catch {
|
|
236
|
+
/* read-only best-effort */
|
|
237
|
+
}
|
|
238
|
+
}
|
|
239
|
+
byStatus[effective] = (byStatus[effective] ?? 0) + 1;
|
|
240
|
+
if (effective === 'proposed')
|
|
241
|
+
proposed += 1;
|
|
242
|
+
if (effective === 'done')
|
|
243
|
+
done += 1;
|
|
244
|
+
if (effective === 'skipped')
|
|
245
|
+
skipped += 1;
|
|
246
|
+
}
|
|
247
|
+
const total = goal.milestones.length;
|
|
248
|
+
const denom = total - skipped;
|
|
249
|
+
const fractionDone = denom > 0 ? done / denom : 0;
|
|
250
|
+
return {
|
|
251
|
+
goalId: goal.id,
|
|
252
|
+
total,
|
|
253
|
+
byStatus,
|
|
254
|
+
proposed,
|
|
255
|
+
done,
|
|
256
|
+
fractionDone,
|
|
257
|
+
nextActionableId: nextActionableMilestone(goal)?.id ?? null,
|
|
258
|
+
};
|
|
259
|
+
}
|
|
260
|
+
// Keep loadSwarm imported as the documented read-only tracking handle the CLI
|
|
261
|
+
// status dashboard may use to surface swarm progress (read-only, never mutates).
|
|
262
|
+
void loadSwarm;
|
|
263
|
+
//# sourceMappingURL=advance.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"advance.js","sourceRoot":"","sources":["../../../src/core/goals/advance.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,58 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* planner.ts — M28: deterministic-by-default decomposition of an OBJECTIVE
|
|
3
|
+
* into ordered MILESTONES, and per-milestone spec authoring.
|
|
4
|
+
*
|
|
5
|
+
* SAFETY / DESIGN (see docs/contracts/CONTRACT-M28.md):
|
|
6
|
+
* - LOCAL-FIRST: decomposeGoal is DETERMINISTIC by default (a heuristic split
|
|
7
|
+
* — NO LLM, ZERO network). Optional LLM-assisted refinement routes ONLY
|
|
8
|
+
* through getActiveClient(cfg, { allowCloud }) — local Ollama/LM Studio
|
|
9
|
+
* unless --allow-cloud + a configured key (mirrors M25/M26/M27). The default
|
|
10
|
+
* path makes ZERO non-localhost connections.
|
|
11
|
+
* - BOUNDED: the number of milestones is hard-capped by maxMilestones.
|
|
12
|
+
* - NO OUTWARD ACTION: planning NEVER runs a swarm, NEVER touches a user repo
|
|
13
|
+
* working tree, NEVER pushes/PRs/deploys. planMilestoneSpec authors a spec
|
|
14
|
+
* via spec-store (writes ONLY under the spec store, never a user tree).
|
|
15
|
+
* - No new runtime deps; node builtins + existing modules only.
|
|
16
|
+
*/
|
|
17
|
+
import type { AshlrConfig, DecomposeOptions, Goal, Milestone, SpecArtifact } from '../types.js';
|
|
18
|
+
/**
|
|
19
|
+
* Decompose a high-level `objective` into an ordered list of Milestones.
|
|
20
|
+
*
|
|
21
|
+
* DEFAULT (local, deterministic): split the objective into a bounded sequence
|
|
22
|
+
* of ordered milestones using a pure heuristic (numbered-list / "then" /
|
|
23
|
+
* sentence segmentation, plus a standard scaffold of phases when the objective
|
|
24
|
+
* is a single clause). NO model is called; ZERO network.
|
|
25
|
+
*
|
|
26
|
+
* OPTIONAL (opts.allowCloud): refine the deterministic split's titles/details
|
|
27
|
+
* via getActiveClient(cfg, { allowCloud }) — local-first; cloud only with a
|
|
28
|
+
* configured key. Refinement NEVER increases the count beyond the cap and
|
|
29
|
+
* falls back to the deterministic split on any model error.
|
|
30
|
+
*
|
|
31
|
+
* Returns plain Milestone[] (status 'pending', specId/swarmId/proposalId null,
|
|
32
|
+
* order assigned 0..n). Does NOT persist — the caller (store.addMilestone /
|
|
33
|
+
* the CLI `goals plan`) materializes them. Bounded by
|
|
34
|
+
* min(opts.maxMilestones ?? DEFAULT_MAX_MILESTONES, HARD_MAX_MILESTONES).
|
|
35
|
+
* Never throws.
|
|
36
|
+
*/
|
|
37
|
+
export declare function decomposeGoal(objective: string, cfg: AshlrConfig, opts?: DecomposeOptions): Promise<Milestone[]>;
|
|
38
|
+
/**
|
|
39
|
+
* Author (or link) a versioned SpecArtifact for a single milestone of a goal.
|
|
40
|
+
*
|
|
41
|
+
* Delegates to spec-store.authorSpec(goal-derived-prompt, cfg, { project }),
|
|
42
|
+
* which is local-first and idempotent (v1 is reused if it already exists).
|
|
43
|
+
* The authored spec is scoped to the goal's `project` when set. Returns the
|
|
44
|
+
* SpecArtifact so the caller can persist milestone.specId = artifact.id via
|
|
45
|
+
* store.updateMilestoneStatus.
|
|
46
|
+
*
|
|
47
|
+
* NEVER runs a swarm and NEVER touches a user repo working tree — authorSpec
|
|
48
|
+
* only writes to the spec store (project/.ashlr/specs or ~/.ashlr/specs).
|
|
49
|
+
*
|
|
50
|
+
* LOCAL-FIRST: `opts.allowCloud` is threaded straight into authorSpec and
|
|
51
|
+
* defaults to FALSE, so the no-flag `goals plan` path can NEVER reach a cloud
|
|
52
|
+
* provider for spec authoring even when a cloud provider sits in the configured
|
|
53
|
+
* providerChain (closing the default-path cloud-egress gap). Cloud authoring
|
|
54
|
+
* happens ONLY when the user explicitly passed --allow-cloud.
|
|
55
|
+
*/
|
|
56
|
+
export declare function planMilestoneSpec(goal: Goal, milestone: Milestone, cfg: AshlrConfig, opts?: {
|
|
57
|
+
allowCloud?: boolean;
|
|
58
|
+
}): Promise<SpecArtifact>;
|