@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":"index.js","sourceRoot":"","sources":["../../../src/core/seams/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AAEH,cAAc,YAAY,CAAC;AAC3B,cAAc,eAAe,CAAC;AAC9B,cAAc,gBAAgB,CAAC;AAC/B,cAAc,cAAc,CAAC;AAC7B,cAAc,YAAY,CAAC;AAC3B,cAAc,yBAAyB,CAAC;AACxC,cAAc,aAAa,CAAC;AAC5B,cAAc,gBAAgB,CAAC;AAC/B,cAAc,eAAe,CAAC"}
|
|
@@ -0,0 +1,50 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* core/seams/portfolio.ts — PortfolioSync seam (M30).
|
|
3
|
+
*
|
|
4
|
+
* SEAM over core/quality/store.ts (HealthReport snapshots) + core/dashboard.ts
|
|
5
|
+
* (the portfolio DashboardSnapshot).
|
|
6
|
+
*
|
|
7
|
+
* (a) PortfolioSync — the interface.
|
|
8
|
+
* (b) LocalPortfolioSync — DEFAULT. Behavior-preserving adapter; delegates
|
|
9
|
+
* 1:1. Health snapshots write ONLY under
|
|
10
|
+
* ~/.ashlr/quality/; snapshot build is read-only.
|
|
11
|
+
* (c) CloudPortfolioSync — GATED stub; every method throws before any I/O.
|
|
12
|
+
* (d) selectPortfolioSync — local by default; gated stub ONLY when an
|
|
13
|
+
* endpoint is explicitly configured (still refuses).
|
|
14
|
+
*
|
|
15
|
+
* HARD SAFETY: local-first + self-hostable + cloud-gated. No new deps.
|
|
16
|
+
*/
|
|
17
|
+
import type { AshlrConfig, DashboardSnapshot, HealthReport } from '../types.js';
|
|
18
|
+
export declare const PORTFOLIO_SEAM: {
|
|
19
|
+
id: "portfolio";
|
|
20
|
+
name: string;
|
|
21
|
+
delegatesTo: string;
|
|
22
|
+
summary: string;
|
|
23
|
+
};
|
|
24
|
+
/** Health-snapshot persistence + portfolio dashboard build. */
|
|
25
|
+
export interface PortfolioSync {
|
|
26
|
+
/** Persist a HealthReport snapshot; returns its path or null on failure. */
|
|
27
|
+
saveReport(report: HealthReport): string | null;
|
|
28
|
+
/** List persisted HealthReport snapshots, most-recent first (bounded). */
|
|
29
|
+
listReports(): HealthReport[];
|
|
30
|
+
/** Newest snapshot strictly before `before` (for trend deltas), or null. */
|
|
31
|
+
loadPreviousReport(before?: string): HealthReport | null;
|
|
32
|
+
/** Build the portfolio dashboard snapshot (read-only aggregation). */
|
|
33
|
+
buildSnapshot(cfg: AshlrConfig): Promise<DashboardSnapshot>;
|
|
34
|
+
}
|
|
35
|
+
/** DEFAULT local impl — pass-through adapter over the quality store + dashboard. */
|
|
36
|
+
export declare class LocalPortfolioSync implements PortfolioSync {
|
|
37
|
+
saveReport(report: HealthReport): string | null;
|
|
38
|
+
listReports(): HealthReport[];
|
|
39
|
+
loadPreviousReport(before?: string): HealthReport | null;
|
|
40
|
+
buildSnapshot(cfg: AshlrConfig): Promise<DashboardSnapshot>;
|
|
41
|
+
}
|
|
42
|
+
/** GATED cloud stub — a team-shared portfolio roll-up WOULD live here. Throws first. */
|
|
43
|
+
export declare class CloudPortfolioSync implements PortfolioSync {
|
|
44
|
+
saveReport(_report: HealthReport): string | null;
|
|
45
|
+
listReports(): HealthReport[];
|
|
46
|
+
loadPreviousReport(_before?: string): HealthReport | null;
|
|
47
|
+
buildSnapshot(_cfg: AshlrConfig): Promise<DashboardSnapshot>;
|
|
48
|
+
}
|
|
49
|
+
/** Local by default; gated stub only when an endpoint is configured (refuses). */
|
|
50
|
+
export declare function selectPortfolioSync(cfg: AshlrConfig): PortfolioSync;
|
|
@@ -0,0 +1,61 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* core/seams/portfolio.ts — PortfolioSync seam (M30).
|
|
3
|
+
*
|
|
4
|
+
* SEAM over core/quality/store.ts (HealthReport snapshots) + core/dashboard.ts
|
|
5
|
+
* (the portfolio DashboardSnapshot).
|
|
6
|
+
*
|
|
7
|
+
* (a) PortfolioSync — the interface.
|
|
8
|
+
* (b) LocalPortfolioSync — DEFAULT. Behavior-preserving adapter; delegates
|
|
9
|
+
* 1:1. Health snapshots write ONLY under
|
|
10
|
+
* ~/.ashlr/quality/; snapshot build is read-only.
|
|
11
|
+
* (c) CloudPortfolioSync — GATED stub; every method throws before any I/O.
|
|
12
|
+
* (d) selectPortfolioSync — local by default; gated stub ONLY when an
|
|
13
|
+
* endpoint is explicitly configured (still refuses).
|
|
14
|
+
*
|
|
15
|
+
* HARD SAFETY: local-first + self-hostable + cloud-gated. No new deps.
|
|
16
|
+
*/
|
|
17
|
+
import { listReports, loadPreviousReport, saveReport } from '../quality/store.js';
|
|
18
|
+
import { buildSnapshot } from '../dashboard.js';
|
|
19
|
+
import { seamEndpoint } from './registry.js';
|
|
20
|
+
import { cloudGatedError } from './types.js';
|
|
21
|
+
export const PORTFOLIO_SEAM = {
|
|
22
|
+
id: 'portfolio',
|
|
23
|
+
name: 'PortfolioSync',
|
|
24
|
+
delegatesTo: 'core/quality/store.ts + core/dashboard.ts',
|
|
25
|
+
summary: 'Portfolio health snapshots (~/.ashlr/quality/) + the org dashboard roll-up (read-only build).',
|
|
26
|
+
};
|
|
27
|
+
/** DEFAULT local impl — pass-through adapter over the quality store + dashboard. */
|
|
28
|
+
export class LocalPortfolioSync {
|
|
29
|
+
saveReport(report) {
|
|
30
|
+
return saveReport(report);
|
|
31
|
+
}
|
|
32
|
+
listReports() {
|
|
33
|
+
return listReports();
|
|
34
|
+
}
|
|
35
|
+
loadPreviousReport(before) {
|
|
36
|
+
return loadPreviousReport(before);
|
|
37
|
+
}
|
|
38
|
+
buildSnapshot(cfg) {
|
|
39
|
+
return buildSnapshot(cfg);
|
|
40
|
+
}
|
|
41
|
+
}
|
|
42
|
+
/** GATED cloud stub — a team-shared portfolio roll-up WOULD live here. Throws first. */
|
|
43
|
+
export class CloudPortfolioSync {
|
|
44
|
+
saveReport(_report) {
|
|
45
|
+
throw cloudGatedError(PORTFOLIO_SEAM.name, 'saveReport');
|
|
46
|
+
}
|
|
47
|
+
listReports() {
|
|
48
|
+
throw cloudGatedError(PORTFOLIO_SEAM.name, 'listReports');
|
|
49
|
+
}
|
|
50
|
+
loadPreviousReport(_before) {
|
|
51
|
+
throw cloudGatedError(PORTFOLIO_SEAM.name, 'loadPreviousReport');
|
|
52
|
+
}
|
|
53
|
+
buildSnapshot(_cfg) {
|
|
54
|
+
throw cloudGatedError(PORTFOLIO_SEAM.name, 'buildSnapshot');
|
|
55
|
+
}
|
|
56
|
+
}
|
|
57
|
+
/** Local by default; gated stub only when an endpoint is configured (refuses). */
|
|
58
|
+
export function selectPortfolioSync(cfg) {
|
|
59
|
+
return seamEndpoint(cfg, 'portfolio') ? new CloudPortfolioSync() : new LocalPortfolioSync();
|
|
60
|
+
}
|
|
61
|
+
//# sourceMappingURL=portfolio.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"portfolio.js","sourceRoot":"","sources":["../../../src/core/seams/portfolio.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;GAeG;AAEH,OAAO,EAAE,WAAW,EAAE,kBAAkB,EAAE,UAAU,EAAE,MAAM,qBAAqB,CAAC;AAClF,OAAO,EAAE,aAAa,EAAE,MAAM,iBAAiB,CAAC;AAEhD,OAAO,EAAE,YAAY,EAAE,MAAM,eAAe,CAAC;AAC7C,OAAO,EAAE,eAAe,EAAE,MAAM,YAAY,CAAC;AAE7C,MAAM,CAAC,MAAM,cAAc,GAAG;IAC5B,EAAE,EAAE,WAAoB;IACxB,IAAI,EAAE,eAAe;IACrB,WAAW,EAAE,2CAA2C;IACxD,OAAO,EAAE,+FAA+F;CACzG,CAAC;AAcF,oFAAoF;AACpF,MAAM,OAAO,kBAAkB;IAC7B,UAAU,CAAC,MAAoB;QAC7B,OAAO,UAAU,CAAC,MAAM,CAAC,CAAC;IAC5B,CAAC;IACD,WAAW;QACT,OAAO,WAAW,EAAE,CAAC;IACvB,CAAC;IACD,kBAAkB,CAAC,MAAe;QAChC,OAAO,kBAAkB,CAAC,MAAM,CAAC,CAAC;IACpC,CAAC;IACD,aAAa,CAAC,GAAgB;QAC5B,OAAO,aAAa,CAAC,GAAG,CAAC,CAAC;IAC5B,CAAC;CACF;AAED,wFAAwF;AACxF,MAAM,OAAO,kBAAkB;IAC7B,UAAU,CAAC,OAAqB;QAC9B,MAAM,eAAe,CAAC,cAAc,CAAC,IAAI,EAAE,YAAY,CAAC,CAAC;IAC3D,CAAC;IACD,WAAW;QACT,MAAM,eAAe,CAAC,cAAc,CAAC,IAAI,EAAE,aAAa,CAAC,CAAC;IAC5D,CAAC;IACD,kBAAkB,CAAC,OAAgB;QACjC,MAAM,eAAe,CAAC,cAAc,CAAC,IAAI,EAAE,oBAAoB,CAAC,CAAC;IACnE,CAAC;IACD,aAAa,CAAC,IAAiB;QAC7B,MAAM,eAAe,CAAC,cAAc,CAAC,IAAI,EAAE,eAAe,CAAC,CAAC;IAC9D,CAAC;CACF;AAED,kFAAkF;AAClF,MAAM,UAAU,mBAAmB,CAAC,GAAgB;IAClD,OAAO,YAAY,CAAC,GAAG,EAAE,WAAW,CAAC,CAAC,CAAC,CAAC,IAAI,kBAAkB,EAAE,CAAC,CAAC,CAAC,IAAI,kBAAkB,EAAE,CAAC;AAC9F,CAAC"}
|
|
@@ -0,0 +1,42 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* core/seams/registry.ts — M30 seam registry + endpoint accessor.
|
|
3
|
+
*
|
|
4
|
+
* The single place that:
|
|
5
|
+
* - reads (defensively) the OPTIONAL per-seam cloud endpoint config, and
|
|
6
|
+
* - lists every seam with its active impl ('local') and cloud availability
|
|
7
|
+
* (false | 'gated'), feeding the READ-ONLY `ashlr seams` diagnostic.
|
|
8
|
+
*
|
|
9
|
+
* HARD SAFETY:
|
|
10
|
+
* - READ-ONLY: building the registry triggers NO I/O — it reads only the
|
|
11
|
+
* in-memory config and emits metadata. It never instantiates a seam impl,
|
|
12
|
+
* never calls a local adapter, and never touches disk/network.
|
|
13
|
+
* - NO ACTIVATION PATH: `seamEndpoint()` only reports whether an endpoint
|
|
14
|
+
* STRING is present. A present endpoint routes a selector to the GATED stub
|
|
15
|
+
* (which throws). There is no value of config that yields a functional cloud
|
|
16
|
+
* backbone.
|
|
17
|
+
* - NON-REGRESSION: the seam config is read via a cast over an OPTIONAL
|
|
18
|
+
* property of AshlrConfig (`seamsConfig()`), so AshlrConfig is unmodified and
|
|
19
|
+
* DEFAULT UNSET => local for every seam.
|
|
20
|
+
*/
|
|
21
|
+
import type { AshlrConfig } from '../types.js';
|
|
22
|
+
import type { SeamId, SeamRegistry, SeamsConfig } from './types.js';
|
|
23
|
+
/**
|
|
24
|
+
* Defensively read the OPTIONAL `seams` config block off AshlrConfig WITHOUT
|
|
25
|
+
* modifying the AshlrConfig type (NON-REGRESSION). Returns {} when unset, so
|
|
26
|
+
* every seam DEFAULTS to local.
|
|
27
|
+
*/
|
|
28
|
+
export declare function seamsConfig(cfg: AshlrConfig): SeamsConfig;
|
|
29
|
+
/**
|
|
30
|
+
* Return the explicitly-configured cloud endpoint for a seam, or null when
|
|
31
|
+
* unset. A non-null result routes the seam's selector to the GATED stub (which
|
|
32
|
+
* throws on every method) — it NEVER enables a functional backbone. Only the
|
|
33
|
+
* seven gated seams can have an endpoint; the reference telemetry seam is
|
|
34
|
+
* excluded (it has no gated stub here).
|
|
35
|
+
*/
|
|
36
|
+
export declare function seamEndpoint(cfg: AshlrConfig, id: Exclude<SeamId, 'telemetry'>): string | null;
|
|
37
|
+
/**
|
|
38
|
+
* Build the READ-ONLY seam registry roll-up for `ashlr seams`. Pure: derives
|
|
39
|
+
* everything from the in-memory config + static descriptors. Triggers NO I/O,
|
|
40
|
+
* instantiates NO seam impl, and never touches disk/network. NEVER throws.
|
|
41
|
+
*/
|
|
42
|
+
export declare function buildSeamRegistry(cfg: AshlrConfig): SeamRegistry;
|
|
@@ -0,0 +1,128 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* core/seams/registry.ts — M30 seam registry + endpoint accessor.
|
|
3
|
+
*
|
|
4
|
+
* The single place that:
|
|
5
|
+
* - reads (defensively) the OPTIONAL per-seam cloud endpoint config, and
|
|
6
|
+
* - lists every seam with its active impl ('local') and cloud availability
|
|
7
|
+
* (false | 'gated'), feeding the READ-ONLY `ashlr seams` diagnostic.
|
|
8
|
+
*
|
|
9
|
+
* HARD SAFETY:
|
|
10
|
+
* - READ-ONLY: building the registry triggers NO I/O — it reads only the
|
|
11
|
+
* in-memory config and emits metadata. It never instantiates a seam impl,
|
|
12
|
+
* never calls a local adapter, and never touches disk/network.
|
|
13
|
+
* - NO ACTIVATION PATH: `seamEndpoint()` only reports whether an endpoint
|
|
14
|
+
* STRING is present. A present endpoint routes a selector to the GATED stub
|
|
15
|
+
* (which throws). There is no value of config that yields a functional cloud
|
|
16
|
+
* backbone.
|
|
17
|
+
* - NON-REGRESSION: the seam config is read via a cast over an OPTIONAL
|
|
18
|
+
* property of AshlrConfig (`seamsConfig()`), so AshlrConfig is unmodified and
|
|
19
|
+
* DEFAULT UNSET => local for every seam.
|
|
20
|
+
*/
|
|
21
|
+
import { RUN_SWARM_SEAM } from './run-swarm.js';
|
|
22
|
+
import { BACKLOG_SEAM } from './backlog.js';
|
|
23
|
+
import { INBOX_SEAM } from './inbox.js';
|
|
24
|
+
import { DAEMON_COORDINATOR_SEAM } from './daemon-coordinator.js';
|
|
25
|
+
import { GENOME_SEAM } from './genome.js';
|
|
26
|
+
import { PORTFOLIO_SEAM } from './portfolio.js';
|
|
27
|
+
import { IDENTITY_SEAM } from './identity.js';
|
|
28
|
+
/**
|
|
29
|
+
* The seam ids that have a GATED cloud stub (so `cloud` reports 'gated'). The
|
|
30
|
+
* `telemetry` reference seam is intentionally NOT here: its opt-in OtlpHttpSink
|
|
31
|
+
* is a real local-network sink (M19), not a gated team backbone — its cloud
|
|
32
|
+
* field is `false`.
|
|
33
|
+
*/
|
|
34
|
+
const GATED_SEAM_IDS = new Set([
|
|
35
|
+
'runSwarm',
|
|
36
|
+
'backlog',
|
|
37
|
+
'inbox',
|
|
38
|
+
'daemonCoordinator',
|
|
39
|
+
'genome',
|
|
40
|
+
'portfolio',
|
|
41
|
+
'identity',
|
|
42
|
+
]);
|
|
43
|
+
/**
|
|
44
|
+
* Defensively read the OPTIONAL `seams` config block off AshlrConfig WITHOUT
|
|
45
|
+
* modifying the AshlrConfig type (NON-REGRESSION). Returns {} when unset, so
|
|
46
|
+
* every seam DEFAULTS to local.
|
|
47
|
+
*/
|
|
48
|
+
export function seamsConfig(cfg) {
|
|
49
|
+
const raw = cfg.seams;
|
|
50
|
+
if (raw !== null && typeof raw === 'object' && !Array.isArray(raw)) {
|
|
51
|
+
return raw;
|
|
52
|
+
}
|
|
53
|
+
return {};
|
|
54
|
+
}
|
|
55
|
+
/**
|
|
56
|
+
* Return the explicitly-configured cloud endpoint for a seam, or null when
|
|
57
|
+
* unset. A non-null result routes the seam's selector to the GATED stub (which
|
|
58
|
+
* throws on every method) — it NEVER enables a functional backbone. Only the
|
|
59
|
+
* seven gated seams can have an endpoint; the reference telemetry seam is
|
|
60
|
+
* excluded (it has no gated stub here).
|
|
61
|
+
*/
|
|
62
|
+
export function seamEndpoint(cfg, id) {
|
|
63
|
+
const sc = seamsConfig(cfg);
|
|
64
|
+
const entry = sc[id];
|
|
65
|
+
const endpoint = entry?.endpoint;
|
|
66
|
+
return typeof endpoint === 'string' && endpoint.trim().length > 0 ? endpoint : null;
|
|
67
|
+
}
|
|
68
|
+
/**
|
|
69
|
+
* The static seam descriptors, in display order (telemetry cited last).
|
|
70
|
+
*
|
|
71
|
+
* Built LAZILY inside a function rather than at module top-level: registry.ts
|
|
72
|
+
* and the per-seam modules import each other (each seam pulls `seamEndpoint`
|
|
73
|
+
* from here; here we cite each seam's `*_SEAM` descriptor). Referencing the
|
|
74
|
+
* imported `*_SEAM` bindings at module-evaluation time is order-dependent under
|
|
75
|
+
* ESM and can hit a temporal-dead-zone crash when a seam module is the FIRST
|
|
76
|
+
* entry imported. Deferring the array into a function guarantees every `*_SEAM`
|
|
77
|
+
* binding is fully initialised before it is read, regardless of import order.
|
|
78
|
+
*/
|
|
79
|
+
function seamDescriptors() {
|
|
80
|
+
return [
|
|
81
|
+
RUN_SWARM_SEAM,
|
|
82
|
+
BACKLOG_SEAM,
|
|
83
|
+
INBOX_SEAM,
|
|
84
|
+
DAEMON_COORDINATOR_SEAM,
|
|
85
|
+
GENOME_SEAM,
|
|
86
|
+
PORTFOLIO_SEAM,
|
|
87
|
+
IDENTITY_SEAM,
|
|
88
|
+
{
|
|
89
|
+
id: 'telemetry',
|
|
90
|
+
name: 'TelemetrySink',
|
|
91
|
+
delegatesTo: 'core/observability/telemetry-sink.ts',
|
|
92
|
+
summary: 'Reference seam (M19): LocalFileSink default + opt-in OTLP sink. Cited, not rewritten.',
|
|
93
|
+
},
|
|
94
|
+
];
|
|
95
|
+
}
|
|
96
|
+
/**
|
|
97
|
+
* Build the READ-ONLY seam registry roll-up for `ashlr seams`. Pure: derives
|
|
98
|
+
* everything from the in-memory config + static descriptors. Triggers NO I/O,
|
|
99
|
+
* instantiates NO seam impl, and never touches disk/network. NEVER throws.
|
|
100
|
+
*/
|
|
101
|
+
export function buildSeamRegistry(cfg) {
|
|
102
|
+
const seams = seamDescriptors().map((d) => {
|
|
103
|
+
const cloud = GATED_SEAM_IDS.has(d.id) ? 'gated' : false;
|
|
104
|
+
// Only the gated seams can have an endpoint; telemetry never routes here.
|
|
105
|
+
const endpointConfigured = d.id !== 'telemetry' && seamEndpoint(cfg, d.id) !== null;
|
|
106
|
+
// active is 'gated' ONLY when a cloud endpoint is explicitly configured for
|
|
107
|
+
// a gated seam — and that impl refuses. Otherwise ALWAYS 'local'.
|
|
108
|
+
const active = endpointConfigured ? 'gated' : 'local';
|
|
109
|
+
return {
|
|
110
|
+
id: d.id,
|
|
111
|
+
name: d.name,
|
|
112
|
+
active,
|
|
113
|
+
cloud,
|
|
114
|
+
endpointConfigured,
|
|
115
|
+
delegatesTo: d.delegatesTo,
|
|
116
|
+
summary: d.summary,
|
|
117
|
+
};
|
|
118
|
+
});
|
|
119
|
+
const gatedConfigured = seams.filter((s) => s.endpointConfigured).length;
|
|
120
|
+
const allLocal = seams.every((s) => s.active === 'local');
|
|
121
|
+
return {
|
|
122
|
+
generatedAt: new Date().toISOString(),
|
|
123
|
+
seams,
|
|
124
|
+
allLocal,
|
|
125
|
+
gatedConfigured,
|
|
126
|
+
};
|
|
127
|
+
}
|
|
128
|
+
//# sourceMappingURL=registry.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"registry.js","sourceRoot":"","sources":["../../../src/core/seams/registry.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;GAmBG;AAIH,OAAO,EAAE,cAAc,EAAE,MAAM,gBAAgB,CAAC;AAChD,OAAO,EAAE,YAAY,EAAE,MAAM,cAAc,CAAC;AAC5C,OAAO,EAAE,UAAU,EAAE,MAAM,YAAY,CAAC;AACxC,OAAO,EAAE,uBAAuB,EAAE,MAAM,yBAAyB,CAAC;AAClE,OAAO,EAAE,WAAW,EAAE,MAAM,aAAa,CAAC;AAC1C,OAAO,EAAE,cAAc,EAAE,MAAM,gBAAgB,CAAC;AAChD,OAAO,EAAE,aAAa,EAAE,MAAM,eAAe,CAAC;AAE9C;;;;;GAKG;AACH,MAAM,cAAc,GAAwB,IAAI,GAAG,CAAS;IAC1D,UAAU;IACV,SAAS;IACT,OAAO;IACP,mBAAmB;IACnB,QAAQ;IACR,WAAW;IACX,UAAU;CACX,CAAC,CAAC;AAEH;;;;GAIG;AACH,MAAM,UAAU,WAAW,CAAC,GAAgB;IAC1C,MAAM,GAAG,GAAI,GAA2B,CAAC,KAAK,CAAC;IAC/C,IAAI,GAAG,KAAK,IAAI,IAAI,OAAO,GAAG,KAAK,QAAQ,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC;QACnE,OAAO,GAAkB,CAAC;IAC5B,CAAC;IACD,OAAO,EAAE,CAAC;AACZ,CAAC;AAED;;;;;;GAMG;AACH,MAAM,UAAU,YAAY,CAAC,GAAgB,EAAE,EAAgC;IAC7E,MAAM,EAAE,GAAG,WAAW,CAAC,GAAG,CAAC,CAAC;IAC5B,MAAM,KAAK,GAAG,EAAE,CAAC,EAAE,CAAC,CAAC;IACrB,MAAM,QAAQ,GAAG,KAAK,EAAE,QAAQ,CAAC;IACjC,OAAO,OAAO,QAAQ,KAAK,QAAQ,IAAI,QAAQ,CAAC,IAAI,EAAE,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,IAAI,CAAC;AACtF,CAAC;AAUD;;;;;;;;;;GAUG;AACH,SAAS,eAAe;IACtB,OAAO;QACL,cAAc;QACd,YAAY;QACZ,UAAU;QACV,uBAAuB;QACvB,WAAW;QACX,cAAc;QACd,aAAa;QACb;YACE,EAAE,EAAE,WAAW;YACf,IAAI,EAAE,eAAe;YACrB,WAAW,EAAE,sCAAsC;YACnD,OAAO,EAAE,uFAAuF;SACjG;KACF,CAAC;AACJ,CAAC;AAED;;;;GAIG;AACH,MAAM,UAAU,iBAAiB,CAAC,GAAgB;IAChD,MAAM,KAAK,GAAiB,eAAe,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE;QACtD,MAAM,KAAK,GAAG,cAAc,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAE,OAAiB,CAAC,CAAC,CAAE,KAAe,CAAC;QAC/E,0EAA0E;QAC1E,MAAM,kBAAkB,GACtB,CAAC,CAAC,EAAE,KAAK,WAAW,IAAI,YAAY,CAAC,GAAG,EAAE,CAAC,CAAC,EAAkC,CAAC,KAAK,IAAI,CAAC;QAC3F,4EAA4E;QAC5E,kEAAkE;QAClE,MAAM,MAAM,GAAG,kBAAkB,CAAC,CAAC,CAAE,OAAiB,CAAC,CAAC,CAAE,OAAiB,CAAC;QAC5E,OAAO;YACL,EAAE,EAAE,CAAC,CAAC,EAAE;YACR,IAAI,EAAE,CAAC,CAAC,IAAI;YACZ,MAAM;YACN,KAAK;YACL,kBAAkB;YAClB,WAAW,EAAE,CAAC,CAAC,WAAW;YAC1B,OAAO,EAAE,CAAC,CAAC,OAAO;SACnB,CAAC;IACJ,CAAC,CAAC,CAAC;IAEH,MAAM,eAAe,GAAG,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,kBAAkB,CAAC,CAAC,MAAM,CAAC;IACzE,MAAM,QAAQ,GAAG,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,MAAM,KAAK,OAAO,CAAC,CAAC;IAE1D,OAAO;QACL,WAAW,EAAE,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE;QACrC,KAAK;QACL,QAAQ;QACR,eAAe;KAChB,CAAC;AACJ,CAAC"}
|
|
@@ -0,0 +1,66 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* core/seams/run-swarm.ts — RunSwarmStore seam (M30).
|
|
3
|
+
*
|
|
4
|
+
* SEAM over core/swarm/store.ts (listSwarms / loadSwarm / saveSwarm).
|
|
5
|
+
*
|
|
6
|
+
* Shape (mirrors the canonical telemetry-sink seam):
|
|
7
|
+
* (a) RunSwarmStore — the interface.
|
|
8
|
+
* (b) LocalRunSwarmStore — DEFAULT. A thin, behavior-preserving adapter that
|
|
9
|
+
* delegates 1:1 to the existing exported functions.
|
|
10
|
+
* ZERO behavior change, identical signatures.
|
|
11
|
+
* (c) CloudRunSwarmStore — GATED stub. Every method THROWS the canonical
|
|
12
|
+
* gated error as its FIRST statement, before any
|
|
13
|
+
* I/O. It performs NO fetch/http and touches NO
|
|
14
|
+
* disk/network — it only refuses.
|
|
15
|
+
* (d) selectRunSwarmStore — returns LocalRunSwarmStore by default; returns
|
|
16
|
+
* the gated stub ONLY when a cloud endpoint is
|
|
17
|
+
* explicitly configured for this seam (and that
|
|
18
|
+
* stub still refuses). There is NO activation path.
|
|
19
|
+
*
|
|
20
|
+
* HARD SAFETY: local-first + self-hostable + cloud-gated. No new deps.
|
|
21
|
+
*/
|
|
22
|
+
import type { AshlrConfig, SwarmRun } from '../types.js';
|
|
23
|
+
/** The display name + delegate path for diagnostics. */
|
|
24
|
+
export declare const RUN_SWARM_SEAM: {
|
|
25
|
+
id: "runSwarm";
|
|
26
|
+
name: string;
|
|
27
|
+
delegatesTo: string;
|
|
28
|
+
summary: string;
|
|
29
|
+
};
|
|
30
|
+
/** Persistence + listing of SwarmRun records. */
|
|
31
|
+
export interface RunSwarmStore {
|
|
32
|
+
/** List all persisted swarm runs, most-recent first. */
|
|
33
|
+
list(): SwarmRun[];
|
|
34
|
+
/** Load a single swarm run by id, or null when absent/corrupt. */
|
|
35
|
+
load(id: string): SwarmRun | null;
|
|
36
|
+
/** Persist a swarm run record. */
|
|
37
|
+
save(s: SwarmRun): void;
|
|
38
|
+
}
|
|
39
|
+
/**
|
|
40
|
+
* DEFAULT local impl — a behavior-preserving adapter over core/swarm/store.ts.
|
|
41
|
+
* Each method is a direct pass-through; no logic is added or changed.
|
|
42
|
+
*/
|
|
43
|
+
export declare class LocalRunSwarmStore implements RunSwarmStore {
|
|
44
|
+
list(): SwarmRun[];
|
|
45
|
+
load(id: string): SwarmRun | null;
|
|
46
|
+
save(s: SwarmRun): void;
|
|
47
|
+
}
|
|
48
|
+
/**
|
|
49
|
+
* GATED cloud stub — a multi-machine/team swarm registry WOULD live here.
|
|
50
|
+
* Every method THROWS the canonical gated error FIRST, before any I/O. It never
|
|
51
|
+
* opens a socket, never calls fetch, never touches disk. Referenceable, inert.
|
|
52
|
+
*/
|
|
53
|
+
export declare class CloudRunSwarmStore implements RunSwarmStore {
|
|
54
|
+
list(): SwarmRun[];
|
|
55
|
+
load(_id: string): SwarmRun | null;
|
|
56
|
+
save(_s: SwarmRun): void;
|
|
57
|
+
}
|
|
58
|
+
/**
|
|
59
|
+
* Select the active RunSwarmStore for a config.
|
|
60
|
+
* - LocalRunSwarmStore by DEFAULT (no endpoint configured) — the only path the
|
|
61
|
+
* autonomous loop/daemon can ever reach.
|
|
62
|
+
* - CloudRunSwarmStore ONLY when a cloud endpoint is explicitly configured for
|
|
63
|
+
* this seam — and that impl REFUSES (throws) on every method. There is no
|
|
64
|
+
* way to flip to a functional cloud backbone.
|
|
65
|
+
*/
|
|
66
|
+
export declare function selectRunSwarmStore(cfg: AshlrConfig): RunSwarmStore;
|
|
@@ -0,0 +1,74 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* core/seams/run-swarm.ts — RunSwarmStore seam (M30).
|
|
3
|
+
*
|
|
4
|
+
* SEAM over core/swarm/store.ts (listSwarms / loadSwarm / saveSwarm).
|
|
5
|
+
*
|
|
6
|
+
* Shape (mirrors the canonical telemetry-sink seam):
|
|
7
|
+
* (a) RunSwarmStore — the interface.
|
|
8
|
+
* (b) LocalRunSwarmStore — DEFAULT. A thin, behavior-preserving adapter that
|
|
9
|
+
* delegates 1:1 to the existing exported functions.
|
|
10
|
+
* ZERO behavior change, identical signatures.
|
|
11
|
+
* (c) CloudRunSwarmStore — GATED stub. Every method THROWS the canonical
|
|
12
|
+
* gated error as its FIRST statement, before any
|
|
13
|
+
* I/O. It performs NO fetch/http and touches NO
|
|
14
|
+
* disk/network — it only refuses.
|
|
15
|
+
* (d) selectRunSwarmStore — returns LocalRunSwarmStore by default; returns
|
|
16
|
+
* the gated stub ONLY when a cloud endpoint is
|
|
17
|
+
* explicitly configured for this seam (and that
|
|
18
|
+
* stub still refuses). There is NO activation path.
|
|
19
|
+
*
|
|
20
|
+
* HARD SAFETY: local-first + self-hostable + cloud-gated. No new deps.
|
|
21
|
+
*/
|
|
22
|
+
import { listSwarms, loadSwarm, saveSwarm } from '../swarm/store.js';
|
|
23
|
+
import { seamEndpoint } from './registry.js';
|
|
24
|
+
import { cloudGatedError } from './types.js';
|
|
25
|
+
/** The display name + delegate path for diagnostics. */
|
|
26
|
+
export const RUN_SWARM_SEAM = {
|
|
27
|
+
id: 'runSwarm',
|
|
28
|
+
name: 'RunSwarmStore',
|
|
29
|
+
delegatesTo: 'core/swarm/store.ts',
|
|
30
|
+
summary: 'Persist + list autonomous run/swarm records (~/.ashlr/swarms/).',
|
|
31
|
+
};
|
|
32
|
+
/**
|
|
33
|
+
* DEFAULT local impl — a behavior-preserving adapter over core/swarm/store.ts.
|
|
34
|
+
* Each method is a direct pass-through; no logic is added or changed.
|
|
35
|
+
*/
|
|
36
|
+
export class LocalRunSwarmStore {
|
|
37
|
+
list() {
|
|
38
|
+
return listSwarms();
|
|
39
|
+
}
|
|
40
|
+
load(id) {
|
|
41
|
+
return loadSwarm(id);
|
|
42
|
+
}
|
|
43
|
+
save(s) {
|
|
44
|
+
saveSwarm(s);
|
|
45
|
+
}
|
|
46
|
+
}
|
|
47
|
+
/**
|
|
48
|
+
* GATED cloud stub — a multi-machine/team swarm registry WOULD live here.
|
|
49
|
+
* Every method THROWS the canonical gated error FIRST, before any I/O. It never
|
|
50
|
+
* opens a socket, never calls fetch, never touches disk. Referenceable, inert.
|
|
51
|
+
*/
|
|
52
|
+
export class CloudRunSwarmStore {
|
|
53
|
+
list() {
|
|
54
|
+
throw cloudGatedError(RUN_SWARM_SEAM.name, 'list');
|
|
55
|
+
}
|
|
56
|
+
load(_id) {
|
|
57
|
+
throw cloudGatedError(RUN_SWARM_SEAM.name, 'load');
|
|
58
|
+
}
|
|
59
|
+
save(_s) {
|
|
60
|
+
throw cloudGatedError(RUN_SWARM_SEAM.name, 'save');
|
|
61
|
+
}
|
|
62
|
+
}
|
|
63
|
+
/**
|
|
64
|
+
* Select the active RunSwarmStore for a config.
|
|
65
|
+
* - LocalRunSwarmStore by DEFAULT (no endpoint configured) — the only path the
|
|
66
|
+
* autonomous loop/daemon can ever reach.
|
|
67
|
+
* - CloudRunSwarmStore ONLY when a cloud endpoint is explicitly configured for
|
|
68
|
+
* this seam — and that impl REFUSES (throws) on every method. There is no
|
|
69
|
+
* way to flip to a functional cloud backbone.
|
|
70
|
+
*/
|
|
71
|
+
export function selectRunSwarmStore(cfg) {
|
|
72
|
+
return seamEndpoint(cfg, 'runSwarm') ? new CloudRunSwarmStore() : new LocalRunSwarmStore();
|
|
73
|
+
}
|
|
74
|
+
//# sourceMappingURL=run-swarm.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"run-swarm.js","sourceRoot":"","sources":["../../../src/core/seams/run-swarm.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;GAoBG;AAEH,OAAO,EAAE,UAAU,EAAE,SAAS,EAAE,SAAS,EAAE,MAAM,mBAAmB,CAAC;AAErE,OAAO,EAAE,YAAY,EAAE,MAAM,eAAe,CAAC;AAC7C,OAAO,EAAE,eAAe,EAAE,MAAM,YAAY,CAAC;AAE7C,wDAAwD;AACxD,MAAM,CAAC,MAAM,cAAc,GAAG;IAC5B,EAAE,EAAE,UAAmB;IACvB,IAAI,EAAE,eAAe;IACrB,WAAW,EAAE,qBAAqB;IAClC,OAAO,EAAE,iEAAiE;CAC3E,CAAC;AAYF;;;GAGG;AACH,MAAM,OAAO,kBAAkB;IAC7B,IAAI;QACF,OAAO,UAAU,EAAE,CAAC;IACtB,CAAC;IACD,IAAI,CAAC,EAAU;QACb,OAAO,SAAS,CAAC,EAAE,CAAC,CAAC;IACvB,CAAC;IACD,IAAI,CAAC,CAAW;QACd,SAAS,CAAC,CAAC,CAAC,CAAC;IACf,CAAC;CACF;AAED;;;;GAIG;AACH,MAAM,OAAO,kBAAkB;IAC7B,IAAI;QACF,MAAM,eAAe,CAAC,cAAc,CAAC,IAAI,EAAE,MAAM,CAAC,CAAC;IACrD,CAAC;IACD,IAAI,CAAC,GAAW;QACd,MAAM,eAAe,CAAC,cAAc,CAAC,IAAI,EAAE,MAAM,CAAC,CAAC;IACrD,CAAC;IACD,IAAI,CAAC,EAAY;QACf,MAAM,eAAe,CAAC,cAAc,CAAC,IAAI,EAAE,MAAM,CAAC,CAAC;IACrD,CAAC;CACF;AAED;;;;;;;GAOG;AACH,MAAM,UAAU,mBAAmB,CAAC,GAAgB;IAClD,OAAO,YAAY,CAAC,GAAG,EAAE,UAAU,CAAC,CAAC,CAAC,CAAC,IAAI,kBAAkB,EAAE,CAAC,CAAC,CAAC,IAAI,kBAAkB,EAAE,CAAC;AAC7F,CAAC"}
|
|
@@ -0,0 +1,123 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* core/seams/types.ts — M30 seam types (single-sourced).
|
|
3
|
+
*
|
|
4
|
+
* Defines the shared types for the M30 "cloud-ready seams" layer: the read-only
|
|
5
|
+
* diagnostic shape (`SeamStatus`), the registry roll-up (`SeamRegistry`), and a
|
|
6
|
+
* defensive, OPTIONAL config augmentation (`SeamsConfig`) describing where a
|
|
7
|
+
* cloud/team backbone endpoint WOULD be configured per seam.
|
|
8
|
+
*
|
|
9
|
+
* HARD SAFETY NOTE: the presence of an endpoint string here NEVER activates a
|
|
10
|
+
* working cloud backbone. Every cloud impl is a GATED STUB that THROWS before
|
|
11
|
+
* any I/O. A configured endpoint only changes which (throwing) stub a selector
|
|
12
|
+
* returns; it can never perform a remote call. There is NO config flag and NO
|
|
13
|
+
* code path that activates a functional cloud/team backbone — that remains a
|
|
14
|
+
* Mason GATE (explicit opt-in, not implemented). Local-first + self-hostable;
|
|
15
|
+
* nothing public.
|
|
16
|
+
*
|
|
17
|
+
* This block is kept OUT of the monolithic core/types.ts on purpose so the M30
|
|
18
|
+
* additions are purely additive and cannot perturb any existing type. The
|
|
19
|
+
* `SeamsConfig` shape is read defensively off `AshlrConfig` via `seamsConfig()`
|
|
20
|
+
* in registry.ts (a cast over an optional property) so AshlrConfig itself is
|
|
21
|
+
* unchanged — preserving the M30 NON-REGRESSION invariant at the type level.
|
|
22
|
+
*/
|
|
23
|
+
/**
|
|
24
|
+
* Stable identifiers for every v2 seam. Used as the key in the registry and in
|
|
25
|
+
* the `ashlr seams` diagnostic. `telemetry` is the pre-existing M19 reference
|
|
26
|
+
* seam (core/observability/telemetry-sink.ts) — it is CITED here, not rewritten.
|
|
27
|
+
*/
|
|
28
|
+
export type SeamId = 'runSwarm' | 'backlog' | 'inbox' | 'daemonCoordinator' | 'genome' | 'portfolio' | 'identity' | 'telemetry';
|
|
29
|
+
/**
|
|
30
|
+
* Which implementation a seam is actively serving. The default path is ALWAYS
|
|
31
|
+
* `'local'`. `'gated'` is only ever surfaced when a cloud endpoint is explicitly
|
|
32
|
+
* configured for that seam — and that impl REFUSES (throws) on every method.
|
|
33
|
+
*/
|
|
34
|
+
export type SeamImpl = 'local' | 'gated';
|
|
35
|
+
/**
|
|
36
|
+
* Whether a cloud/team impl exists for a seam. It is NEVER `true` in M30:
|
|
37
|
+
* - `false` — no cloud impl exists at all (e.g. the reference telemetry seam,
|
|
38
|
+
* whose opt-in OTLP sink is a real local-network sink, not a
|
|
39
|
+
* gated team backbone).
|
|
40
|
+
* - `'gated'`— a cloud STUB exists but is gated on Mason and THROWS; it can be
|
|
41
|
+
* referenced (when an endpoint is configured) but never does I/O.
|
|
42
|
+
*/
|
|
43
|
+
export type SeamCloud = false | 'gated';
|
|
44
|
+
/**
|
|
45
|
+
* Read-only diagnostic record for one seam — the row rendered by `ashlr seams`.
|
|
46
|
+
* Pure metadata; contains NO endpoint secrets and triggers NO I/O to produce.
|
|
47
|
+
*/
|
|
48
|
+
export interface SeamStatus {
|
|
49
|
+
/** Stable seam identifier. */
|
|
50
|
+
id: SeamId;
|
|
51
|
+
/** Human-readable seam name (e.g. 'RunSwarmStore'). */
|
|
52
|
+
name: string;
|
|
53
|
+
/** The active implementation. ALWAYS 'local' on the default path. */
|
|
54
|
+
active: SeamImpl;
|
|
55
|
+
/** Cloud availability: false (none) or 'gated' (stub exists, throws). */
|
|
56
|
+
cloud: SeamCloud;
|
|
57
|
+
/**
|
|
58
|
+
* Whether a cloud endpoint is explicitly configured for this seam. When true,
|
|
59
|
+
* `active` is 'gated' and the seam REFUSES to operate (throws). Default false.
|
|
60
|
+
*/
|
|
61
|
+
endpointConfigured: boolean;
|
|
62
|
+
/** The existing local module this seam delegates to (for the diagnostic). */
|
|
63
|
+
delegatesTo: string;
|
|
64
|
+
/** One-line description of the seam's responsibility. */
|
|
65
|
+
summary: string;
|
|
66
|
+
}
|
|
67
|
+
/** The full read-only registry roll-up consumed by the `ashlr seams` command. */
|
|
68
|
+
export interface SeamRegistry {
|
|
69
|
+
/** ISO timestamp the registry snapshot was produced. */
|
|
70
|
+
generatedAt: string;
|
|
71
|
+
/** One row per seam. */
|
|
72
|
+
seams: SeamStatus[];
|
|
73
|
+
/**
|
|
74
|
+
* Convenience roll-up flags for the diagnostic header.
|
|
75
|
+
* `allLocal` is true when EVERY seam is serving its local impl (the only
|
|
76
|
+
* state reachable without an explicitly-configured cloud endpoint).
|
|
77
|
+
*/
|
|
78
|
+
allLocal: boolean;
|
|
79
|
+
/** Count of seams with an explicitly-configured (but gated) cloud endpoint. */
|
|
80
|
+
gatedConfigured: number;
|
|
81
|
+
}
|
|
82
|
+
/**
|
|
83
|
+
* OPTIONAL, defensively-read config augmentation describing where a cloud/team
|
|
84
|
+
* backbone endpoint WOULD live per seam. DEFAULT UNSET => local for every seam.
|
|
85
|
+
*
|
|
86
|
+
* Read off `AshlrConfig` via a cast in registry.ts; AshlrConfig itself is NOT
|
|
87
|
+
* modified (NON-REGRESSION). An endpoint string here only routes a selector to
|
|
88
|
+
* the GATED (throwing) stub — it can never enable a functional backbone.
|
|
89
|
+
*/
|
|
90
|
+
export interface SeamsConfig {
|
|
91
|
+
/** Per-seam cloud endpoint. Presence => route to the gated stub (throws). */
|
|
92
|
+
runSwarm?: {
|
|
93
|
+
endpoint?: string;
|
|
94
|
+
};
|
|
95
|
+
backlog?: {
|
|
96
|
+
endpoint?: string;
|
|
97
|
+
};
|
|
98
|
+
inbox?: {
|
|
99
|
+
endpoint?: string;
|
|
100
|
+
};
|
|
101
|
+
daemonCoordinator?: {
|
|
102
|
+
endpoint?: string;
|
|
103
|
+
};
|
|
104
|
+
genome?: {
|
|
105
|
+
endpoint?: string;
|
|
106
|
+
};
|
|
107
|
+
portfolio?: {
|
|
108
|
+
endpoint?: string;
|
|
109
|
+
};
|
|
110
|
+
identity?: {
|
|
111
|
+
endpoint?: string;
|
|
112
|
+
};
|
|
113
|
+
}
|
|
114
|
+
/**
|
|
115
|
+
* Canonical gated-error message thrown by EVERY cloud stub method. Centralised
|
|
116
|
+
* so the message is identical across seams and easy for the verifier to assert.
|
|
117
|
+
*/
|
|
118
|
+
export declare const CLOUD_GATED_MESSAGE = "cloud/team backbone gated on Mason \u2014 not implemented (requires Mason's explicit opt-in)";
|
|
119
|
+
/**
|
|
120
|
+
* Construct the canonical gated Error for a seam + method. The cloud stubs call
|
|
121
|
+
* this and THROW it as the FIRST statement of every method, before any I/O.
|
|
122
|
+
*/
|
|
123
|
+
export declare function cloudGatedError(seam: string, method: string): Error;
|
|
@@ -0,0 +1,35 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* core/seams/types.ts — M30 seam types (single-sourced).
|
|
3
|
+
*
|
|
4
|
+
* Defines the shared types for the M30 "cloud-ready seams" layer: the read-only
|
|
5
|
+
* diagnostic shape (`SeamStatus`), the registry roll-up (`SeamRegistry`), and a
|
|
6
|
+
* defensive, OPTIONAL config augmentation (`SeamsConfig`) describing where a
|
|
7
|
+
* cloud/team backbone endpoint WOULD be configured per seam.
|
|
8
|
+
*
|
|
9
|
+
* HARD SAFETY NOTE: the presence of an endpoint string here NEVER activates a
|
|
10
|
+
* working cloud backbone. Every cloud impl is a GATED STUB that THROWS before
|
|
11
|
+
* any I/O. A configured endpoint only changes which (throwing) stub a selector
|
|
12
|
+
* returns; it can never perform a remote call. There is NO config flag and NO
|
|
13
|
+
* code path that activates a functional cloud/team backbone — that remains a
|
|
14
|
+
* Mason GATE (explicit opt-in, not implemented). Local-first + self-hostable;
|
|
15
|
+
* nothing public.
|
|
16
|
+
*
|
|
17
|
+
* This block is kept OUT of the monolithic core/types.ts on purpose so the M30
|
|
18
|
+
* additions are purely additive and cannot perturb any existing type. The
|
|
19
|
+
* `SeamsConfig` shape is read defensively off `AshlrConfig` via `seamsConfig()`
|
|
20
|
+
* in registry.ts (a cast over an optional property) so AshlrConfig itself is
|
|
21
|
+
* unchanged — preserving the M30 NON-REGRESSION invariant at the type level.
|
|
22
|
+
*/
|
|
23
|
+
/**
|
|
24
|
+
* Canonical gated-error message thrown by EVERY cloud stub method. Centralised
|
|
25
|
+
* so the message is identical across seams and easy for the verifier to assert.
|
|
26
|
+
*/
|
|
27
|
+
export const CLOUD_GATED_MESSAGE = 'cloud/team backbone gated on Mason — not implemented (requires Mason\'s explicit opt-in)';
|
|
28
|
+
/**
|
|
29
|
+
* Construct the canonical gated Error for a seam + method. The cloud stubs call
|
|
30
|
+
* this and THROW it as the FIRST statement of every method, before any I/O.
|
|
31
|
+
*/
|
|
32
|
+
export function cloudGatedError(seam, method) {
|
|
33
|
+
return new Error(`[ashlr seams] ${seam}.${method}: ${CLOUD_GATED_MESSAGE}`);
|
|
34
|
+
}
|
|
35
|
+
//# sourceMappingURL=types.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.js","sourceRoot":"","sources":["../../../src/core/seams/types.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;GAqBG;AA6FH;;;GAGG;AACH,MAAM,CAAC,MAAM,mBAAmB,GAC9B,0FAA0F,CAAC;AAE7F;;;GAGG;AACH,MAAM,UAAU,eAAe,CAAC,IAAY,EAAE,MAAc;IAC1D,OAAO,IAAI,KAAK,CAAC,iBAAiB,IAAI,IAAI,MAAM,KAAK,mBAAmB,EAAE,CAAC,CAAC;AAC9E,CAAC"}
|