@ashlr/hub 2.2.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +1158 -0
- package/LICENSE +21 -0
- package/README.md +833 -0
- package/bin/ashlr +8 -0
- package/dist/api/core.d.ts +28 -0
- package/dist/api/core.js +42 -0
- package/dist/api/core.js.map +1 -0
- package/dist/api/index.d.ts +9 -0
- package/dist/api/index.js +9 -0
- package/dist/api/index.js.map +1 -0
- package/dist/api/plugin.d.ts +12 -0
- package/dist/api/plugin.js +13 -0
- package/dist/api/plugin.js.map +1 -0
- package/dist/api/types.d.ts +9 -0
- package/dist/api/types.js +9 -0
- package/dist/api/types.js.map +1 -0
- package/dist/cli/args.d.ts +20 -0
- package/dist/cli/args.js +23 -0
- package/dist/cli/args.js.map +1 -0
- package/dist/cli/ask.d.ts +22 -0
- package/dist/cli/ask.js +240 -0
- package/dist/cli/ask.js.map +1 -0
- package/dist/cli/audit.d.ts +26 -0
- package/dist/cli/audit.js +199 -0
- package/dist/cli/audit.js.map +1 -0
- package/dist/cli/backlog.d.ts +26 -0
- package/dist/cli/backlog.js +322 -0
- package/dist/cli/backlog.js.map +1 -0
- package/dist/cli/completions.d.ts +18 -0
- package/dist/cli/completions.js +156 -0
- package/dist/cli/completions.js.map +1 -0
- package/dist/cli/daemon.d.ts +31 -0
- package/dist/cli/daemon.js +334 -0
- package/dist/cli/daemon.js.map +1 -0
- package/dist/cli/demo-sandbox.d.ts +78 -0
- package/dist/cli/demo-sandbox.js +227 -0
- package/dist/cli/demo-sandbox.js.map +1 -0
- package/dist/cli/demo.d.ts +76 -0
- package/dist/cli/demo.js +285 -0
- package/dist/cli/demo.js.map +1 -0
- package/dist/cli/digest.d.ts +46 -0
- package/dist/cli/digest.js +352 -0
- package/dist/cli/digest.js.map +1 -0
- package/dist/cli/doctor-init.d.ts +28 -0
- package/dist/cli/doctor-init.js +335 -0
- package/dist/cli/doctor-init.js.map +1 -0
- package/dist/cli/genome.d.ts +62 -0
- package/dist/cli/genome.js +1061 -0
- package/dist/cli/genome.js.map +1 -0
- package/dist/cli/gh.d.ts +27 -0
- package/dist/cli/gh.js +322 -0
- package/dist/cli/gh.js.map +1 -0
- package/dist/cli/goals.d.ts +55 -0
- package/dist/cli/goals.js +667 -0
- package/dist/cli/goals.js.map +1 -0
- package/dist/cli/health.d.ts +56 -0
- package/dist/cli/health.js +407 -0
- package/dist/cli/health.js.map +1 -0
- package/dist/cli/help.d.ts +51 -0
- package/dist/cli/help.js +436 -0
- package/dist/cli/help.js.map +1 -0
- package/dist/cli/inbox.d.ts +28 -0
- package/dist/cli/inbox.js +589 -0
- package/dist/cli/inbox.js.map +1 -0
- package/dist/cli/index.d.ts +41 -0
- package/dist/cli/index.js +1208 -0
- package/dist/cli/index.js.map +1 -0
- package/dist/cli/knowledge.d.ts +33 -0
- package/dist/cli/knowledge.js +575 -0
- package/dist/cli/knowledge.js.map +1 -0
- package/dist/cli/mcp.d.ts +26 -0
- package/dist/cli/mcp.js +487 -0
- package/dist/cli/mcp.js.map +1 -0
- package/dist/cli/models.d.ts +26 -0
- package/dist/cli/models.js +435 -0
- package/dist/cli/models.js.map +1 -0
- package/dist/cli/new.d.ts +32 -0
- package/dist/cli/new.js +565 -0
- package/dist/cli/new.js.map +1 -0
- package/dist/cli/notify.d.ts +20 -0
- package/dist/cli/notify.js +188 -0
- package/dist/cli/notify.js.map +1 -0
- package/dist/cli/onboard.d.ts +85 -0
- package/dist/cli/onboard.js +305 -0
- package/dist/cli/onboard.js.map +1 -0
- package/dist/cli/open.d.ts +38 -0
- package/dist/cli/open.js +86 -0
- package/dist/cli/open.js.map +1 -0
- package/dist/cli/orient.d.ts +14 -0
- package/dist/cli/orient.js +110 -0
- package/dist/cli/orient.js.map +1 -0
- package/dist/cli/picker.d.ts +21 -0
- package/dist/cli/picker.js +177 -0
- package/dist/cli/picker.js.map +1 -0
- package/dist/cli/plugins.d.ts +21 -0
- package/dist/cli/plugins.js +394 -0
- package/dist/cli/plugins.js.map +1 -0
- package/dist/cli/preflight.d.ts +29 -0
- package/dist/cli/preflight.js +131 -0
- package/dist/cli/preflight.js.map +1 -0
- package/dist/cli/pulse.d.ts +26 -0
- package/dist/cli/pulse.js +482 -0
- package/dist/cli/pulse.js.map +1 -0
- package/dist/cli/reflect.d.ts +42 -0
- package/dist/cli/reflect.js +381 -0
- package/dist/cli/reflect.js.map +1 -0
- package/dist/cli/run.d.ts +29 -0
- package/dist/cli/run.js +687 -0
- package/dist/cli/run.js.map +1 -0
- package/dist/cli/sandbox.d.ts +20 -0
- package/dist/cli/sandbox.js +345 -0
- package/dist/cli/sandbox.js.map +1 -0
- package/dist/cli/seams.d.ts +41 -0
- package/dist/cli/seams.js +167 -0
- package/dist/cli/seams.js.map +1 -0
- package/dist/cli/serve.d.ts +25 -0
- package/dist/cli/serve.js +249 -0
- package/dist/cli/serve.js.map +1 -0
- package/dist/cli/ship.d.ts +33 -0
- package/dist/cli/ship.js +433 -0
- package/dist/cli/ship.js.map +1 -0
- package/dist/cli/spec.d.ts +19 -0
- package/dist/cli/spec.js +478 -0
- package/dist/cli/spec.js.map +1 -0
- package/dist/cli/swarm.d.ts +42 -0
- package/dist/cli/swarm.js +1365 -0
- package/dist/cli/swarm.js.map +1 -0
- package/dist/cli/telemetry.d.ts +26 -0
- package/dist/cli/telemetry.js +364 -0
- package/dist/cli/telemetry.js.map +1 -0
- package/dist/cli/tui.d.ts +17 -0
- package/dist/cli/tui.js +52 -0
- package/dist/cli/tui.js.map +1 -0
- package/dist/cli/ui.d.ts +53 -0
- package/dist/cli/ui.js +66 -0
- package/dist/cli/ui.js.map +1 -0
- package/dist/cli/update.d.ts +38 -0
- package/dist/cli/update.js +682 -0
- package/dist/cli/update.js.map +1 -0
- package/dist/cli/vercel.d.ts +20 -0
- package/dist/cli/vercel.js +193 -0
- package/dist/cli/vercel.js.map +1 -0
- package/dist/cli/verify-safety.d.ts +96 -0
- package/dist/cli/verify-safety.js +509 -0
- package/dist/cli/verify-safety.js.map +1 -0
- package/dist/cli/wire.d.ts +22 -0
- package/dist/cli/wire.js +205 -0
- package/dist/cli/wire.js.map +1 -0
- package/dist/core/classify.d.ts +51 -0
- package/dist/core/classify.js +450 -0
- package/dist/core/classify.js.map +1 -0
- package/dist/core/config.d.ts +63 -0
- package/dist/core/config.js +474 -0
- package/dist/core/config.js.map +1 -0
- package/dist/core/daemon/loop.d.ts +74 -0
- package/dist/core/daemon/loop.js +618 -0
- package/dist/core/daemon/loop.js.map +1 -0
- package/dist/core/daemon/state.d.ts +66 -0
- package/dist/core/daemon/state.js +197 -0
- package/dist/core/daemon/state.js.map +1 -0
- package/dist/core/dashboard.d.ts +40 -0
- package/dist/core/dashboard.js +463 -0
- package/dist/core/dashboard.js.map +1 -0
- package/dist/core/digest/build.d.ts +51 -0
- package/dist/core/digest/build.js +230 -0
- package/dist/core/digest/build.js.map +1 -0
- package/dist/core/digest/deliver.d.ts +47 -0
- package/dist/core/digest/deliver.js +230 -0
- package/dist/core/digest/deliver.js.map +1 -0
- package/dist/core/digest/store.d.ts +57 -0
- package/dist/core/digest/store.js +223 -0
- package/dist/core/digest/store.js.map +1 -0
- package/dist/core/doctor-fix.d.ts +21 -0
- package/dist/core/doctor-fix.js +440 -0
- package/dist/core/doctor-fix.js.map +1 -0
- package/dist/core/doctor.d.ts +18 -0
- package/dist/core/doctor.js +806 -0
- package/dist/core/doctor.js.map +1 -0
- package/dist/core/env-bridge.d.ts +64 -0
- package/dist/core/env-bridge.js +103 -0
- package/dist/core/env-bridge.js.map +1 -0
- package/dist/core/genome/capture.d.ts +49 -0
- package/dist/core/genome/capture.js +352 -0
- package/dist/core/genome/capture.js.map +1 -0
- package/dist/core/genome/consolidate.d.ts +38 -0
- package/dist/core/genome/consolidate.js +426 -0
- package/dist/core/genome/consolidate.js.map +1 -0
- package/dist/core/genome/export.d.ts +29 -0
- package/dist/core/genome/export.js +102 -0
- package/dist/core/genome/export.js.map +1 -0
- package/dist/core/genome/playbook.d.ts +33 -0
- package/dist/core/genome/playbook.js +320 -0
- package/dist/core/genome/playbook.js.map +1 -0
- package/dist/core/genome/recall.d.ts +45 -0
- package/dist/core/genome/recall.js +293 -0
- package/dist/core/genome/recall.js.map +1 -0
- package/dist/core/genome/store.d.ts +62 -0
- package/dist/core/genome/store.js +711 -0
- package/dist/core/genome/store.js.map +1 -0
- package/dist/core/git.d.ts +34 -0
- package/dist/core/git.js +115 -0
- package/dist/core/git.js.map +1 -0
- package/dist/core/goals/advance.d.ts +82 -0
- package/dist/core/goals/advance.js +263 -0
- package/dist/core/goals/advance.js.map +1 -0
- package/dist/core/goals/planner.d.ts +58 -0
- package/dist/core/goals/planner.js +233 -0
- package/dist/core/goals/planner.js.map +1 -0
- package/dist/core/goals/store.d.ts +128 -0
- package/dist/core/goals/store.js +442 -0
- package/dist/core/goals/store.js.map +1 -0
- package/dist/core/inbox/apply.d.ts +36 -0
- package/dist/core/inbox/apply.js +407 -0
- package/dist/core/inbox/apply.js.map +1 -0
- package/dist/core/inbox/notify-proposal.d.ts +13 -0
- package/dist/core/inbox/notify-proposal.js +21 -0
- package/dist/core/inbox/notify-proposal.js.map +1 -0
- package/dist/core/inbox/store.d.ts +67 -0
- package/dist/core/inbox/store.js +258 -0
- package/dist/core/inbox/store.js.map +1 -0
- package/dist/core/index-engine.d.ts +62 -0
- package/dist/core/index-engine.js +486 -0
- package/dist/core/index-engine.js.map +1 -0
- package/dist/core/integrations/desktop-notify.d.ts +18 -0
- package/dist/core/integrations/desktop-notify.js +42 -0
- package/dist/core/integrations/desktop-notify.js.map +1 -0
- package/dist/core/integrations/editors.d.ts +50 -0
- package/dist/core/integrations/editors.js +216 -0
- package/dist/core/integrations/editors.js.map +1 -0
- package/dist/core/integrations/github.d.ts +66 -0
- package/dist/core/integrations/github.js +332 -0
- package/dist/core/integrations/github.js.map +1 -0
- package/dist/core/integrations/identity.d.ts +29 -0
- package/dist/core/integrations/identity.js +359 -0
- package/dist/core/integrations/identity.js.map +1 -0
- package/dist/core/integrations/notify.d.ts +23 -0
- package/dist/core/integrations/notify.js +96 -0
- package/dist/core/integrations/notify.js.map +1 -0
- package/dist/core/integrations/vercel.d.ts +37 -0
- package/dist/core/integrations/vercel.js +192 -0
- package/dist/core/integrations/vercel.js.map +1 -0
- package/dist/core/knowledge/ask.d.ts +34 -0
- package/dist/core/knowledge/ask.js +325 -0
- package/dist/core/knowledge/ask.js.map +1 -0
- package/dist/core/knowledge/graph.d.ts +51 -0
- package/dist/core/knowledge/graph.js +564 -0
- package/dist/core/knowledge/graph.js.map +1 -0
- package/dist/core/knowledge/index.d.ts +74 -0
- package/dist/core/knowledge/index.js +586 -0
- package/dist/core/knowledge/index.js.map +1 -0
- package/dist/core/learn/playbooks.d.ts +84 -0
- package/dist/core/learn/playbooks.js +241 -0
- package/dist/core/learn/playbooks.js.map +1 -0
- package/dist/core/learn/reflect.d.ts +87 -0
- package/dist/core/learn/reflect.js +435 -0
- package/dist/core/learn/reflect.js.map +1 -0
- package/dist/core/learn/store.d.ts +51 -0
- package/dist/core/learn/store.js +165 -0
- package/dist/core/learn/store.js.map +1 -0
- package/dist/core/learn/tuning.d.ts +48 -0
- package/dist/core/learn/tuning.js +201 -0
- package/dist/core/learn/tuning.js.map +1 -0
- package/dist/core/lifecycle/scaffold.d.ts +43 -0
- package/dist/core/lifecycle/scaffold.js +260 -0
- package/dist/core/lifecycle/scaffold.js.map +1 -0
- package/dist/core/lifecycle/ship.d.ts +48 -0
- package/dist/core/lifecycle/ship.js +513 -0
- package/dist/core/lifecycle/ship.js.map +1 -0
- package/dist/core/lifecycle/templates.d.ts +20 -0
- package/dist/core/lifecycle/templates.js +605 -0
- package/dist/core/lifecycle/templates.js.map +1 -0
- package/dist/core/mcp-gateway.d.ts +59 -0
- package/dist/core/mcp-gateway.js +385 -0
- package/dist/core/mcp-gateway.js.map +1 -0
- package/dist/core/mcp-native.d.ts +53 -0
- package/dist/core/mcp-native.js +507 -0
- package/dist/core/mcp-native.js.map +1 -0
- package/dist/core/mcp-registry.d.ts +36 -0
- package/dist/core/mcp-registry.js +180 -0
- package/dist/core/mcp-registry.js.map +1 -0
- package/dist/core/observability/budget-alert.d.ts +18 -0
- package/dist/core/observability/budget-alert.js +90 -0
- package/dist/core/observability/budget-alert.js.map +1 -0
- package/dist/core/observability/estimate.d.ts +27 -0
- package/dist/core/observability/estimate.js +188 -0
- package/dist/core/observability/estimate.js.map +1 -0
- package/dist/core/observability/forecast.d.ts +19 -0
- package/dist/core/observability/forecast.js +101 -0
- package/dist/core/observability/forecast.js.map +1 -0
- package/dist/core/observability/governance.d.ts +28 -0
- package/dist/core/observability/governance.js +101 -0
- package/dist/core/observability/governance.js.map +1 -0
- package/dist/core/observability/otlp.d.ts +88 -0
- package/dist/core/observability/otlp.js +217 -0
- package/dist/core/observability/otlp.js.map +1 -0
- package/dist/core/observability/rollup.d.ts +35 -0
- package/dist/core/observability/rollup.js +311 -0
- package/dist/core/observability/rollup.js.map +1 -0
- package/dist/core/observability/telemetry-sink.d.ts +63 -0
- package/dist/core/observability/telemetry-sink.js +350 -0
- package/dist/core/observability/telemetry-sink.js.map +1 -0
- package/dist/core/observability/usage-source.d.ts +60 -0
- package/dist/core/observability/usage-source.js +347 -0
- package/dist/core/observability/usage-source.js.map +1 -0
- package/dist/core/onboard.d.ts +27 -0
- package/dist/core/onboard.js +288 -0
- package/dist/core/onboard.js.map +1 -0
- package/dist/core/orient.d.ts +23 -0
- package/dist/core/orient.js +135 -0
- package/dist/core/orient.js.map +1 -0
- package/dist/core/phantom.d.ts +23 -0
- package/dist/core/phantom.js +279 -0
- package/dist/core/phantom.js.map +1 -0
- package/dist/core/plugins/host-api.d.ts +29 -0
- package/dist/core/plugins/host-api.js +113 -0
- package/dist/core/plugins/host-api.js.map +1 -0
- package/dist/core/plugins/integrity.d.ts +36 -0
- package/dist/core/plugins/integrity.js +73 -0
- package/dist/core/plugins/integrity.js.map +1 -0
- package/dist/core/plugins/manifest.d.ts +31 -0
- package/dist/core/plugins/manifest.js +316 -0
- package/dist/core/plugins/manifest.js.map +1 -0
- package/dist/core/plugins/registry.d.ts +87 -0
- package/dist/core/plugins/registry.js +415 -0
- package/dist/core/plugins/registry.js.map +1 -0
- package/dist/core/plugins/types.d.ts +182 -0
- package/dist/core/plugins/types.js +40 -0
- package/dist/core/plugins/types.js.map +1 -0
- package/dist/core/plugins/wrappers.d.ts +40 -0
- package/dist/core/plugins/wrappers.js +229 -0
- package/dist/core/plugins/wrappers.js.map +1 -0
- package/dist/core/portfolio/backlog.d.ts +40 -0
- package/dist/core/portfolio/backlog.js +177 -0
- package/dist/core/portfolio/backlog.js.map +1 -0
- package/dist/core/portfolio/scanners.d.ts +21 -0
- package/dist/core/portfolio/scanners.js +600 -0
- package/dist/core/portfolio/scanners.js.map +1 -0
- package/dist/core/providers.d.ts +34 -0
- package/dist/core/providers.js +250 -0
- package/dist/core/providers.js.map +1 -0
- package/dist/core/quality/conventions.d.ts +35 -0
- package/dist/core/quality/conventions.js +267 -0
- package/dist/core/quality/conventions.js.map +1 -0
- package/dist/core/quality/fixes.d.ts +56 -0
- package/dist/core/quality/fixes.js +209 -0
- package/dist/core/quality/fixes.js.map +1 -0
- package/dist/core/quality/health.d.ts +69 -0
- package/dist/core/quality/health.js +350 -0
- package/dist/core/quality/health.js.map +1 -0
- package/dist/core/quality/store.d.ts +56 -0
- package/dist/core/quality/store.js +195 -0
- package/dist/core/quality/store.js.map +1 -0
- package/dist/core/readiness.d.ts +112 -0
- package/dist/core/readiness.js +431 -0
- package/dist/core/readiness.js.map +1 -0
- package/dist/core/run/agent-loop.d.ts +40 -0
- package/dist/core/run/agent-loop.js +291 -0
- package/dist/core/run/agent-loop.js.map +1 -0
- package/dist/core/run/budget.d.ts +47 -0
- package/dist/core/run/budget.js +113 -0
- package/dist/core/run/budget.js.map +1 -0
- package/dist/core/run/engines.d.ts +75 -0
- package/dist/core/run/engines.js +199 -0
- package/dist/core/run/engines.js.map +1 -0
- package/dist/core/run/model-manager.d.ts +64 -0
- package/dist/core/run/model-manager.js +339 -0
- package/dist/core/run/model-manager.js.map +1 -0
- package/dist/core/run/orchestrator.d.ts +100 -0
- package/dist/core/run/orchestrator.js +1515 -0
- package/dist/core/run/orchestrator.js.map +1 -0
- package/dist/core/run/provider-client.d.ts +46 -0
- package/dist/core/run/provider-client.js +796 -0
- package/dist/core/run/provider-client.js.map +1 -0
- package/dist/core/run/retry.d.ts +19 -0
- package/dist/core/run/retry.js +68 -0
- package/dist/core/run/retry.js.map +1 -0
- package/dist/core/run/router.d.ts +50 -0
- package/dist/core/run/router.js +257 -0
- package/dist/core/run/router.js.map +1 -0
- package/dist/core/run/self-heal.d.ts +52 -0
- package/dist/core/run/self-heal.js +181 -0
- package/dist/core/run/self-heal.js.map +1 -0
- package/dist/core/run/streaming.d.ts +31 -0
- package/dist/core/run/streaming.js +122 -0
- package/dist/core/run/streaming.js.map +1 -0
- package/dist/core/run/verify.d.ts +30 -0
- package/dist/core/run/verify.js +204 -0
- package/dist/core/run/verify.js.map +1 -0
- package/dist/core/sandbox/audit.d.ts +31 -0
- package/dist/core/sandbox/audit.js +169 -0
- package/dist/core/sandbox/audit.js.map +1 -0
- package/dist/core/sandbox/policy.d.ts +61 -0
- package/dist/core/sandbox/policy.js +211 -0
- package/dist/core/sandbox/policy.js.map +1 -0
- package/dist/core/sandbox/worktree.d.ts +175 -0
- package/dist/core/sandbox/worktree.js +673 -0
- package/dist/core/sandbox/worktree.js.map +1 -0
- package/dist/core/seams/backlog.d.ts +47 -0
- package/dist/core/seams/backlog.js +47 -0
- package/dist/core/seams/backlog.js.map +1 -0
- package/dist/core/seams/daemon-coordinator.d.ts +72 -0
- package/dist/core/seams/daemon-coordinator.js +76 -0
- package/dist/core/seams/daemon-coordinator.js.map +1 -0
- package/dist/core/seams/genome.d.ts +45 -0
- package/dist/core/seams/genome.js +53 -0
- package/dist/core/seams/genome.js.map +1 -0
- package/dist/core/seams/identity.d.ts +40 -0
- package/dist/core/seams/identity.js +44 -0
- package/dist/core/seams/identity.js.map +1 -0
- package/dist/core/seams/inbox.d.ts +60 -0
- package/dist/core/seams/inbox.js +66 -0
- package/dist/core/seams/inbox.js.map +1 -0
- package/dist/core/seams/index.d.ts +20 -0
- package/dist/core/seams/index.js +21 -0
- package/dist/core/seams/index.js.map +1 -0
- package/dist/core/seams/portfolio.d.ts +50 -0
- package/dist/core/seams/portfolio.js +61 -0
- package/dist/core/seams/portfolio.js.map +1 -0
- package/dist/core/seams/registry.d.ts +42 -0
- package/dist/core/seams/registry.js +128 -0
- package/dist/core/seams/registry.js.map +1 -0
- package/dist/core/seams/run-swarm.d.ts +66 -0
- package/dist/core/seams/run-swarm.js +74 -0
- package/dist/core/seams/run-swarm.js.map +1 -0
- package/dist/core/seams/types.d.ts +123 -0
- package/dist/core/seams/types.js +35 -0
- package/dist/core/seams/types.js.map +1 -0
- package/dist/core/spec/spec-store.d.ts +62 -0
- package/dist/core/spec/spec-store.js +359 -0
- package/dist/core/spec/spec-store.js.map +1 -0
- package/dist/core/swarm/gate.d.ts +45 -0
- package/dist/core/swarm/gate.js +114 -0
- package/dist/core/swarm/gate.js.map +1 -0
- package/dist/core/swarm/planner.d.ts +32 -0
- package/dist/core/swarm/planner.js +293 -0
- package/dist/core/swarm/planner.js.map +1 -0
- package/dist/core/swarm/rollback.d.ts +56 -0
- package/dist/core/swarm/rollback.js +266 -0
- package/dist/core/swarm/rollback.js.map +1 -0
- package/dist/core/swarm/runner.d.ts +62 -0
- package/dist/core/swarm/runner.js +1263 -0
- package/dist/core/swarm/runner.js.map +1 -0
- package/dist/core/swarm/sign.d.ts +71 -0
- package/dist/core/swarm/sign.js +362 -0
- package/dist/core/swarm/sign.js.map +1 -0
- package/dist/core/swarm/store.d.ts +52 -0
- package/dist/core/swarm/store.js +195 -0
- package/dist/core/swarm/store.js.map +1 -0
- package/dist/core/tidy.d.ts +32 -0
- package/dist/core/tidy.js +354 -0
- package/dist/core/tidy.js.map +1 -0
- package/dist/core/tools-registry.d.ts +16 -0
- package/dist/core/tools-registry.js +308 -0
- package/dist/core/tools-registry.js.map +1 -0
- package/dist/core/types.d.ts +2545 -0
- package/dist/core/types.js +9 -0
- package/dist/core/types.js.map +1 -0
- package/dist/core/web/api.d.ts +53 -0
- package/dist/core/web/api.js +698 -0
- package/dist/core/web/api.js.map +1 -0
- package/dist/core/web/public/app.js +1906 -0
- package/dist/core/web/public/index.html +721 -0
- package/dist/core/web/public/styles.css +2007 -0
- package/dist/core/web/server.d.ts +18 -0
- package/dist/core/web/server.js +122 -0
- package/dist/core/web/server.js.map +1 -0
- package/dist/core/web/static.d.ts +18 -0
- package/dist/core/web/static.js +122 -0
- package/dist/core/web/static.js.map +1 -0
- package/dist/tui/app.d.ts +33 -0
- package/dist/tui/app.js +350 -0
- package/dist/tui/app.js.map +1 -0
- package/dist/tui/render.d.ts +20 -0
- package/dist/tui/render.js +558 -0
- package/dist/tui/render.js.map +1 -0
- package/package.json +80 -0
- package/schema/config.schema.json +223 -0
package/dist/cli/new.js
ADDED
|
@@ -0,0 +1,565 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* `ashlr new <name>` — scaffold a new project into the ashlr ecosystem.
|
|
3
|
+
*
|
|
4
|
+
* Usage:
|
|
5
|
+
* ashlr new <name> [--template <id>] [--category <c>] [--stack <recipe>]
|
|
6
|
+
* [--here] [--no-git] [--json] [--list]
|
|
7
|
+
*
|
|
8
|
+
* Flags:
|
|
9
|
+
* --template <id> Template to scaffold from (default: node-cli).
|
|
10
|
+
* Run --list to see available templates.
|
|
11
|
+
* --category <c> Category bucket under ~/Desktop/github/ (default: side-projects).
|
|
12
|
+
* --stack <recipe> Stack recipe id to provision after scaffold (requires `stack` installed).
|
|
13
|
+
* --here Scaffold into cwd/<name> instead of the default github tree.
|
|
14
|
+
* --no-git Skip `git init`.
|
|
15
|
+
* --json Emit ScaffoldResult as JSON on stdout instead of human output.
|
|
16
|
+
* --list List available templates and exit.
|
|
17
|
+
*
|
|
18
|
+
* Exit codes:
|
|
19
|
+
* 0 success
|
|
20
|
+
* 1 error (dir exists, scaffold failed, etc.)
|
|
21
|
+
* 2 bad usage / invalid name
|
|
22
|
+
*/
|
|
23
|
+
import { execSync, execFileSync } from 'node:child_process';
|
|
24
|
+
import { existsSync } from 'node:fs';
|
|
25
|
+
import { homedir } from 'node:os';
|
|
26
|
+
import { resolve, join, sep } from 'node:path';
|
|
27
|
+
import { cwd } from 'node:process';
|
|
28
|
+
// ---------------------------------------------------------------------------
|
|
29
|
+
// Lazy imports — lifecycle modules built by other M6 agents
|
|
30
|
+
// ---------------------------------------------------------------------------
|
|
31
|
+
async function importScaffold() {
|
|
32
|
+
return (import('../core/lifecycle/scaffold.js'));
|
|
33
|
+
}
|
|
34
|
+
async function importTemplates() {
|
|
35
|
+
return (import('../core/lifecycle/templates.js'));
|
|
36
|
+
}
|
|
37
|
+
// ---------------------------------------------------------------------------
|
|
38
|
+
// ANSI helpers (non-TTY safe)
|
|
39
|
+
// ---------------------------------------------------------------------------
|
|
40
|
+
import { makeColors, isTty } from './ui.js';
|
|
41
|
+
const { bold, dim, red, green, yellow, cyan, gray } = makeColors(isTty());
|
|
42
|
+
// ---------------------------------------------------------------------------
|
|
43
|
+
// Name validation
|
|
44
|
+
// ---------------------------------------------------------------------------
|
|
45
|
+
/**
|
|
46
|
+
* A safe project name slug:
|
|
47
|
+
* - 1–80 characters
|
|
48
|
+
* - lowercase letters, digits, hyphens, underscores only
|
|
49
|
+
* - must start with a letter or digit
|
|
50
|
+
* - no path separators, dots (leading/trailing), spaces, or special chars
|
|
51
|
+
*/
|
|
52
|
+
const SAFE_NAME_RE = /^[a-z0-9][a-z0-9_-]{0,79}$/;
|
|
53
|
+
function validateName(name) {
|
|
54
|
+
if (!name || name.trim() === '') {
|
|
55
|
+
return 'Project name is required.';
|
|
56
|
+
}
|
|
57
|
+
if (name.includes('/') || name.includes('\\')) {
|
|
58
|
+
return `Name must not contain path separators: "${name}"`;
|
|
59
|
+
}
|
|
60
|
+
if (name.startsWith('.') || name.endsWith('.')) {
|
|
61
|
+
return `Name must not start or end with a dot: "${name}"`;
|
|
62
|
+
}
|
|
63
|
+
if (!SAFE_NAME_RE.test(name)) {
|
|
64
|
+
return (`Name "${name}" is invalid. Use only lowercase letters, digits, hyphens, ` +
|
|
65
|
+
`and underscores. Must start with a letter or digit.`);
|
|
66
|
+
}
|
|
67
|
+
return null;
|
|
68
|
+
}
|
|
69
|
+
/**
|
|
70
|
+
* A safe category slug — a single path segment under ~/Desktop/github/.
|
|
71
|
+
* - 1–64 characters
|
|
72
|
+
* - lowercase letters, digits, hyphens, underscores only
|
|
73
|
+
* - must start with a letter or digit
|
|
74
|
+
* - NO path separators, dots, or traversal sequences
|
|
75
|
+
* Mirrors validateName to keep `--category` from escaping the github tree.
|
|
76
|
+
*/
|
|
77
|
+
const SAFE_CATEGORY_RE = /^[a-z0-9][a-z0-9_-]{0,63}$/;
|
|
78
|
+
function validateCategory(category) {
|
|
79
|
+
if (!category || category.trim() === '') {
|
|
80
|
+
return 'Category must not be empty.';
|
|
81
|
+
}
|
|
82
|
+
if (category.includes('/') ||
|
|
83
|
+
category.includes('\\') ||
|
|
84
|
+
category.includes('.')) {
|
|
85
|
+
return `Category must not contain path separators or dots: "${category}"`;
|
|
86
|
+
}
|
|
87
|
+
if (!SAFE_CATEGORY_RE.test(category)) {
|
|
88
|
+
return (`Category "${category}" is invalid. Use only lowercase letters, digits, ` +
|
|
89
|
+
`hyphens, and underscores. Must start with a letter or digit.`);
|
|
90
|
+
}
|
|
91
|
+
return null;
|
|
92
|
+
}
|
|
93
|
+
/**
|
|
94
|
+
* A safe stack-recipe slug. Rejects shell metacharacters, whitespace, path
|
|
95
|
+
* separators, and traversal so it can never be interpreted as a shell command
|
|
96
|
+
* even though we already invoke `stack` via execFileSync (no shell).
|
|
97
|
+
*/
|
|
98
|
+
const SAFE_RECIPE_RE = /^[a-z0-9][a-z0-9_-]{0,63}$/i;
|
|
99
|
+
function validateRecipe(recipe) {
|
|
100
|
+
if (!recipe || recipe.trim() === '') {
|
|
101
|
+
return 'Stack recipe must not be empty.';
|
|
102
|
+
}
|
|
103
|
+
if (!SAFE_RECIPE_RE.test(recipe)) {
|
|
104
|
+
return (`Stack recipe "${recipe}" is invalid. Use only letters, digits, hyphens, ` +
|
|
105
|
+
`and underscores (no spaces, slashes, dots, or shell metacharacters).`);
|
|
106
|
+
}
|
|
107
|
+
return null;
|
|
108
|
+
}
|
|
109
|
+
function parseArgs(args) {
|
|
110
|
+
const result = {
|
|
111
|
+
templateId: 'node-cli',
|
|
112
|
+
category: 'side-projects',
|
|
113
|
+
here: false,
|
|
114
|
+
noGit: false,
|
|
115
|
+
json: false,
|
|
116
|
+
list: false,
|
|
117
|
+
};
|
|
118
|
+
let i = 0;
|
|
119
|
+
while (i < args.length) {
|
|
120
|
+
const arg = args[i];
|
|
121
|
+
if (arg === '--list') {
|
|
122
|
+
result.list = true;
|
|
123
|
+
i++;
|
|
124
|
+
}
|
|
125
|
+
else if (arg === '--here') {
|
|
126
|
+
result.here = true;
|
|
127
|
+
i++;
|
|
128
|
+
}
|
|
129
|
+
else if (arg === '--no-git') {
|
|
130
|
+
result.noGit = true;
|
|
131
|
+
i++;
|
|
132
|
+
}
|
|
133
|
+
else if (arg === '--json') {
|
|
134
|
+
result.json = true;
|
|
135
|
+
i++;
|
|
136
|
+
}
|
|
137
|
+
else if (arg === '--template') {
|
|
138
|
+
const val = args[++i];
|
|
139
|
+
if (!val) {
|
|
140
|
+
result.usageError = '--template requires a template id (e.g. node-cli, mcp-server, next-app, minimal)';
|
|
141
|
+
return result;
|
|
142
|
+
}
|
|
143
|
+
result.templateId = val;
|
|
144
|
+
i++;
|
|
145
|
+
}
|
|
146
|
+
else if (arg === '--category') {
|
|
147
|
+
const val = args[++i];
|
|
148
|
+
if (!val) {
|
|
149
|
+
result.usageError = '--category requires a category name (e.g. side-projects, dev-tools)';
|
|
150
|
+
return result;
|
|
151
|
+
}
|
|
152
|
+
result.category = val;
|
|
153
|
+
i++;
|
|
154
|
+
}
|
|
155
|
+
else if (arg === '--stack') {
|
|
156
|
+
const val = args[++i];
|
|
157
|
+
if (!val) {
|
|
158
|
+
result.usageError = '--stack requires a recipe name';
|
|
159
|
+
return result;
|
|
160
|
+
}
|
|
161
|
+
result.stackRecipe = val;
|
|
162
|
+
i++;
|
|
163
|
+
}
|
|
164
|
+
else if (!arg.startsWith('--')) {
|
|
165
|
+
// Positional: the project name
|
|
166
|
+
if (result.name !== undefined) {
|
|
167
|
+
result.usageError = `Unexpected positional argument: "${arg}". Only one name allowed.`;
|
|
168
|
+
return result;
|
|
169
|
+
}
|
|
170
|
+
result.name = arg;
|
|
171
|
+
i++;
|
|
172
|
+
}
|
|
173
|
+
else {
|
|
174
|
+
result.usageError = `Unknown flag: ${arg}`;
|
|
175
|
+
return result;
|
|
176
|
+
}
|
|
177
|
+
}
|
|
178
|
+
return result;
|
|
179
|
+
}
|
|
180
|
+
// ---------------------------------------------------------------------------
|
|
181
|
+
// Stack provisioning (best-effort, post-scaffold)
|
|
182
|
+
// ---------------------------------------------------------------------------
|
|
183
|
+
function detectTool(name) {
|
|
184
|
+
try {
|
|
185
|
+
const out = execSync(`which ${name} 2>/dev/null`, { encoding: 'utf8' }).trim();
|
|
186
|
+
return out || null;
|
|
187
|
+
}
|
|
188
|
+
catch {
|
|
189
|
+
return null;
|
|
190
|
+
}
|
|
191
|
+
}
|
|
192
|
+
function runStackRecipe(dir, recipe) {
|
|
193
|
+
const stackBin = detectTool('stack');
|
|
194
|
+
if (!stackBin) {
|
|
195
|
+
return { ok: false, detail: 'stack not installed — skipping recipe provisioning' };
|
|
196
|
+
}
|
|
197
|
+
try {
|
|
198
|
+
// execFileSync bypasses the shell entirely — `recipe` is passed as a
|
|
199
|
+
// discrete argv entry and can never be interpreted as a shell command.
|
|
200
|
+
// `recipe` is additionally validated against SAFE_RECIPE_RE before we get
|
|
201
|
+
// here, so command injection is doubly prevented.
|
|
202
|
+
execFileSync(stackBin, ['provision', recipe], {
|
|
203
|
+
cwd: dir,
|
|
204
|
+
stdio: 'pipe',
|
|
205
|
+
timeout: 120_000,
|
|
206
|
+
});
|
|
207
|
+
return { ok: true, detail: `stack provision ${recipe} completed` };
|
|
208
|
+
}
|
|
209
|
+
catch (err) {
|
|
210
|
+
const msg = err instanceof Error ? err.message : String(err);
|
|
211
|
+
return { ok: false, detail: `stack provision ${recipe} failed: ${msg}` };
|
|
212
|
+
}
|
|
213
|
+
}
|
|
214
|
+
// ---------------------------------------------------------------------------
|
|
215
|
+
// Human-readable output
|
|
216
|
+
// ---------------------------------------------------------------------------
|
|
217
|
+
function printSuccess(result, name, templateId) {
|
|
218
|
+
const homeDir = process.env['HOME'] ?? '';
|
|
219
|
+
const shortDir = result.dir.startsWith(homeDir)
|
|
220
|
+
? '~' + result.dir.slice(homeDir.length)
|
|
221
|
+
: result.dir;
|
|
222
|
+
console.log('');
|
|
223
|
+
console.log(bold(' ashlr new') + gray(' — project scaffolded'));
|
|
224
|
+
console.log('');
|
|
225
|
+
console.log(` ${bold('Project:')} ${cyan(name)}`);
|
|
226
|
+
console.log(` ${bold('Template:')} ${templateId}`);
|
|
227
|
+
console.log(` ${bold('Location:')} ${shortDir}`);
|
|
228
|
+
console.log('');
|
|
229
|
+
// Files written
|
|
230
|
+
const filesShort = result.filesWritten.map(f => {
|
|
231
|
+
const rel = f.startsWith(result.dir + '/') ? f.slice(result.dir.length + 1) : f;
|
|
232
|
+
return rel;
|
|
233
|
+
});
|
|
234
|
+
console.log(` ${bold('Files written')} ${gray(`(${filesShort.length}):`)} `);
|
|
235
|
+
for (const f of filesShort) {
|
|
236
|
+
console.log(` ${dim('+')} ${f}`);
|
|
237
|
+
}
|
|
238
|
+
console.log('');
|
|
239
|
+
// Status line
|
|
240
|
+
const gitStr = result.gitInitialized ? green('git init') : dim('no git');
|
|
241
|
+
const mcpStr = result.mcpWired ? green('mcp wired') : yellow('mcp not wired');
|
|
242
|
+
const indexStr = result.registered ? green('indexed') : dim('not indexed');
|
|
243
|
+
console.log(` ${gitStr} ${dim('·')} ${mcpStr} ${dim('·')} ${indexStr}`);
|
|
244
|
+
// Warnings
|
|
245
|
+
if (result.warnings.length > 0) {
|
|
246
|
+
console.log('');
|
|
247
|
+
for (const w of result.warnings) {
|
|
248
|
+
console.log(` ${yellow('warn:')} ${w}`);
|
|
249
|
+
}
|
|
250
|
+
}
|
|
251
|
+
// Next steps
|
|
252
|
+
console.log('');
|
|
253
|
+
console.log(` ${bold('Next steps:')}`);
|
|
254
|
+
console.log(` ${cyan(`cd ${shortDir}`)}`);
|
|
255
|
+
if (result.gitInitialized) {
|
|
256
|
+
console.log(` ${dim('# make your first commit')}`);
|
|
257
|
+
console.log(` ${cyan('git add -A && git commit -m "initial scaffold"')}`);
|
|
258
|
+
}
|
|
259
|
+
console.log(` ${cyan('ashlr run "get started"')} ${dim('# kick off a local agent')}`);
|
|
260
|
+
console.log(` ${cyan('ashlr ship .')} ${dim('# run pre-ship gate when ready')}`);
|
|
261
|
+
console.log('');
|
|
262
|
+
}
|
|
263
|
+
function printError(msg) {
|
|
264
|
+
process.stderr.write(red('error: ') + msg + '\n');
|
|
265
|
+
}
|
|
266
|
+
// ---------------------------------------------------------------------------
|
|
267
|
+
// Template list display
|
|
268
|
+
// ---------------------------------------------------------------------------
|
|
269
|
+
async function cmdNewList(jsonMode) {
|
|
270
|
+
let listTemplates;
|
|
271
|
+
try {
|
|
272
|
+
const mod = await importTemplates();
|
|
273
|
+
listTemplates = mod.listTemplates;
|
|
274
|
+
}
|
|
275
|
+
catch (err) {
|
|
276
|
+
const msg = err instanceof Error ? err.message : String(err);
|
|
277
|
+
printError(`Failed to load templates (M6 module not yet built): ${msg}`);
|
|
278
|
+
return 1;
|
|
279
|
+
}
|
|
280
|
+
let templates = listTemplates();
|
|
281
|
+
// M33: append validated plugin templates (best-effort; builtins always list).
|
|
282
|
+
try {
|
|
283
|
+
const mod = await importTemplates();
|
|
284
|
+
const all = await mod.getTemplates?.();
|
|
285
|
+
if (all && all.length > templates.length) {
|
|
286
|
+
const known = new Set(templates.map((t) => t.id));
|
|
287
|
+
templates = [
|
|
288
|
+
...templates,
|
|
289
|
+
...all.filter((t) => !known.has(t.id)).map((t) => ({ id: t.id, title: t.title, description: t.description })),
|
|
290
|
+
];
|
|
291
|
+
}
|
|
292
|
+
}
|
|
293
|
+
catch { /* plugin templates are additive only */ }
|
|
294
|
+
if (jsonMode) {
|
|
295
|
+
process.stdout.write(JSON.stringify(templates, null, 2) + '\n');
|
|
296
|
+
return 0;
|
|
297
|
+
}
|
|
298
|
+
console.log('');
|
|
299
|
+
console.log(bold(' ashlr new --list') + gray(' — available templates'));
|
|
300
|
+
console.log('');
|
|
301
|
+
const idW = Math.max(10, ...templates.map(t => t.id.length));
|
|
302
|
+
const titleW = Math.max(10, ...templates.map(t => t.title.length));
|
|
303
|
+
console.log(` ${bold(padStr('ID', idW))} ${bold(padStr('Title', titleW))} ${bold('Description')}`);
|
|
304
|
+
console.log(` ${'─'.repeat(idW)} ${'─'.repeat(titleW)} ${'─'.repeat(40)}`);
|
|
305
|
+
for (const t of templates) {
|
|
306
|
+
console.log(` ${cyan(padStr(t.id, idW))} ${padStr(t.title, titleW)} ${dim(t.description)}`);
|
|
307
|
+
}
|
|
308
|
+
console.log('');
|
|
309
|
+
console.log(` ${dim('Use --template <id> to scaffold from a template.')}`);
|
|
310
|
+
console.log(` ${dim('Example: ashlr new my-project --template mcp-server')}`);
|
|
311
|
+
console.log('');
|
|
312
|
+
return 0;
|
|
313
|
+
}
|
|
314
|
+
function padStr(s, width) {
|
|
315
|
+
// eslint-disable-next-line no-control-regex
|
|
316
|
+
const visible = s.replace(/\x1b\[[0-9;]*m/g, '').length;
|
|
317
|
+
const spaces = Math.max(0, width - visible);
|
|
318
|
+
return s + ' '.repeat(spaces);
|
|
319
|
+
}
|
|
320
|
+
// ---------------------------------------------------------------------------
|
|
321
|
+
// Main command
|
|
322
|
+
// ---------------------------------------------------------------------------
|
|
323
|
+
/**
|
|
324
|
+
* `ashlr new <name> [--template <id>] [--category <c>] [--stack <recipe>]
|
|
325
|
+
* [--here] [--no-git] [--json] [--list]`
|
|
326
|
+
*
|
|
327
|
+
* Scaffold a new project with the agentic-engineering layout and register it
|
|
328
|
+
* in the ashlr index. REFUSES to overwrite an existing directory.
|
|
329
|
+
*
|
|
330
|
+
* Returns a process exit code (0 = success, 1 = error, 2 = bad usage).
|
|
331
|
+
*/
|
|
332
|
+
export async function cmdNew(args) {
|
|
333
|
+
// Help shortcircuit
|
|
334
|
+
if (args[0] === '--help' || args[0] === '-h' || args[0] === 'help') {
|
|
335
|
+
printHelp();
|
|
336
|
+
return 0;
|
|
337
|
+
}
|
|
338
|
+
const parsed = parseArgs(args);
|
|
339
|
+
if (parsed.usageError) {
|
|
340
|
+
printError(parsed.usageError);
|
|
341
|
+
process.stderr.write(dim('Run `ashlr new --help` for usage.\n'));
|
|
342
|
+
return 2;
|
|
343
|
+
}
|
|
344
|
+
// --list: show templates and exit
|
|
345
|
+
if (parsed.list) {
|
|
346
|
+
return cmdNewList(parsed.json);
|
|
347
|
+
}
|
|
348
|
+
// Name is required (unless --list)
|
|
349
|
+
if (!parsed.name) {
|
|
350
|
+
printError('Project name is required.');
|
|
351
|
+
process.stderr.write(dim('Usage: ashlr new <name> [--template <id>] [--category <c>] [--stack <recipe>] [--here] [--no-git] [--json]\n'));
|
|
352
|
+
return 2;
|
|
353
|
+
}
|
|
354
|
+
// Validate name
|
|
355
|
+
const nameErr = validateName(parsed.name);
|
|
356
|
+
if (nameErr) {
|
|
357
|
+
printError(nameErr);
|
|
358
|
+
return 2;
|
|
359
|
+
}
|
|
360
|
+
// Validate category — a single in-tree path segment under ~/Desktop/github/.
|
|
361
|
+
// Without this, `--category '../../../../tmp/evil'` would resolve OUTSIDE the
|
|
362
|
+
// github tree and scaffold there. Skipped for --here (cwd-relative scaffold).
|
|
363
|
+
if (!parsed.here) {
|
|
364
|
+
const categoryErr = validateCategory(parsed.category);
|
|
365
|
+
if (categoryErr) {
|
|
366
|
+
printError(categoryErr);
|
|
367
|
+
return 2;
|
|
368
|
+
}
|
|
369
|
+
}
|
|
370
|
+
// Validate stack recipe (defense-in-depth; execFileSync already avoids shell).
|
|
371
|
+
if (parsed.stackRecipe !== undefined) {
|
|
372
|
+
const recipeErr = validateRecipe(parsed.stackRecipe);
|
|
373
|
+
if (recipeErr) {
|
|
374
|
+
printError(recipeErr);
|
|
375
|
+
return 2;
|
|
376
|
+
}
|
|
377
|
+
}
|
|
378
|
+
// Load scaffold + template modules
|
|
379
|
+
let scaffoldProject;
|
|
380
|
+
let targetDir;
|
|
381
|
+
let getTemplate;
|
|
382
|
+
try {
|
|
383
|
+
const [scaffoldMod, templatesMod] = await Promise.all([
|
|
384
|
+
importScaffold(),
|
|
385
|
+
importTemplates(),
|
|
386
|
+
]);
|
|
387
|
+
scaffoldProject = scaffoldMod.scaffoldProject;
|
|
388
|
+
targetDir = scaffoldMod.targetDir;
|
|
389
|
+
getTemplate = templatesMod.getTemplate;
|
|
390
|
+
}
|
|
391
|
+
catch (err) {
|
|
392
|
+
const msg = err instanceof Error ? err.message : String(err);
|
|
393
|
+
printError(`Failed to load lifecycle modules (M6 not yet built): ${msg}`);
|
|
394
|
+
return 1;
|
|
395
|
+
}
|
|
396
|
+
// Validate that the requested template exists (builtin first; M33 plugin
|
|
397
|
+
// templates resolved by their prefixed id, e.g. "my-plugin:my-template").
|
|
398
|
+
let tmpl = getTemplate(parsed.templateId);
|
|
399
|
+
if (!tmpl && parsed.templateId.includes(':')) {
|
|
400
|
+
try {
|
|
401
|
+
const templatesMod = await importTemplates();
|
|
402
|
+
const all = await templatesMod.getTemplates?.();
|
|
403
|
+
tmpl = all?.find((t) => t.id === parsed.templateId) ?? null;
|
|
404
|
+
}
|
|
405
|
+
catch { /* fall through to the unknown-template error */ }
|
|
406
|
+
}
|
|
407
|
+
if (!tmpl) {
|
|
408
|
+
printError(`Unknown template: "${parsed.templateId}". ` +
|
|
409
|
+
`Run \`ashlr new --list\` to see available templates.`);
|
|
410
|
+
return 2;
|
|
411
|
+
}
|
|
412
|
+
// Resolve target directory
|
|
413
|
+
let dir;
|
|
414
|
+
if (parsed.here) {
|
|
415
|
+
dir = resolve(join(cwd(), parsed.name));
|
|
416
|
+
}
|
|
417
|
+
else {
|
|
418
|
+
dir = targetDir(parsed.name, parsed.category);
|
|
419
|
+
// SAFETY: belt-and-suspenders — even with a validated category, assert the
|
|
420
|
+
// resolved dir lives strictly inside ~/Desktop/github/ before any write or
|
|
421
|
+
// `git init` can touch the filesystem. Refuses out-of-tree creation.
|
|
422
|
+
const root = resolve(join(homedir(), 'Desktop', 'github'));
|
|
423
|
+
if (!(dir === root || dir.startsWith(root + sep))) {
|
|
424
|
+
printError(`Refusing to scaffold outside the github tree.\n` +
|
|
425
|
+
` Resolved target: ${dir}\n` +
|
|
426
|
+
` Allowed root: ${root}`);
|
|
427
|
+
return 2;
|
|
428
|
+
}
|
|
429
|
+
}
|
|
430
|
+
// SAFETY: refuse to overwrite an existing directory
|
|
431
|
+
if (existsSync(dir)) {
|
|
432
|
+
printError(`Target directory already exists: ${dir}\n` +
|
|
433
|
+
` Refusing to overwrite. Choose a different name or category.`);
|
|
434
|
+
return 1;
|
|
435
|
+
}
|
|
436
|
+
// Build the scaffold spec
|
|
437
|
+
const spec = {
|
|
438
|
+
name: parsed.name,
|
|
439
|
+
category: parsed.category,
|
|
440
|
+
templateId: parsed.templateId,
|
|
441
|
+
dir,
|
|
442
|
+
git: !parsed.noGit,
|
|
443
|
+
stackRecipe: parsed.stackRecipe,
|
|
444
|
+
};
|
|
445
|
+
// Run the scaffold
|
|
446
|
+
if (!parsed.json) {
|
|
447
|
+
process.stderr.write(dim(`Scaffolding "${parsed.name}" from template "${parsed.templateId}"…\n`));
|
|
448
|
+
}
|
|
449
|
+
let result;
|
|
450
|
+
try {
|
|
451
|
+
result = scaffoldProject(spec);
|
|
452
|
+
}
|
|
453
|
+
catch (err) {
|
|
454
|
+
const msg = err instanceof Error ? err.message : String(err);
|
|
455
|
+
printError(`Scaffold failed unexpectedly: ${msg}`);
|
|
456
|
+
return 1;
|
|
457
|
+
}
|
|
458
|
+
if (!result.ok) {
|
|
459
|
+
if (parsed.json) {
|
|
460
|
+
process.stdout.write(JSON.stringify(result, null, 2) + '\n');
|
|
461
|
+
}
|
|
462
|
+
else {
|
|
463
|
+
printError(result.error ?? 'Scaffold failed for unknown reason.');
|
|
464
|
+
if (result.warnings.length > 0) {
|
|
465
|
+
for (const w of result.warnings) {
|
|
466
|
+
process.stderr.write(yellow('warn: ') + w + '\n');
|
|
467
|
+
}
|
|
468
|
+
}
|
|
469
|
+
}
|
|
470
|
+
return 1;
|
|
471
|
+
}
|
|
472
|
+
// Post-scaffold: run stack recipe (best-effort, after scaffold)
|
|
473
|
+
const stackWarnings = [];
|
|
474
|
+
if (parsed.stackRecipe) {
|
|
475
|
+
if (!parsed.json) {
|
|
476
|
+
process.stderr.write(dim(`Running stack recipe "${parsed.stackRecipe}"…\n`));
|
|
477
|
+
}
|
|
478
|
+
const stackResult = runStackRecipe(result.dir, parsed.stackRecipe);
|
|
479
|
+
if (!stackResult.ok) {
|
|
480
|
+
stackWarnings.push(stackResult.detail);
|
|
481
|
+
}
|
|
482
|
+
else if (!parsed.json) {
|
|
483
|
+
process.stderr.write(green('stack: ') + stackResult.detail + '\n');
|
|
484
|
+
}
|
|
485
|
+
}
|
|
486
|
+
// Merge any stack warnings into result warnings for JSON output
|
|
487
|
+
const finalResult = stackWarnings.length > 0
|
|
488
|
+
? { ...result, warnings: [...result.warnings, ...stackWarnings] }
|
|
489
|
+
: result;
|
|
490
|
+
// Output
|
|
491
|
+
if (parsed.json) {
|
|
492
|
+
process.stdout.write(JSON.stringify(finalResult, null, 2) + '\n');
|
|
493
|
+
}
|
|
494
|
+
else {
|
|
495
|
+
printSuccess(finalResult, parsed.name, parsed.templateId);
|
|
496
|
+
// Surface stack warnings after the summary
|
|
497
|
+
for (const w of stackWarnings) {
|
|
498
|
+
console.log(` ${yellow('warn:')} ${w}`);
|
|
499
|
+
}
|
|
500
|
+
if (stackWarnings.length > 0) {
|
|
501
|
+
console.log('');
|
|
502
|
+
}
|
|
503
|
+
}
|
|
504
|
+
return 0;
|
|
505
|
+
}
|
|
506
|
+
// ---------------------------------------------------------------------------
|
|
507
|
+
// Help
|
|
508
|
+
// ---------------------------------------------------------------------------
|
|
509
|
+
function printHelp() {
|
|
510
|
+
console.log('');
|
|
511
|
+
console.log(bold(' ashlr new') + dim(' — scaffold a new project into the ashlr ecosystem'));
|
|
512
|
+
console.log('');
|
|
513
|
+
console.log(' ' + bold('Usage:'));
|
|
514
|
+
console.log('');
|
|
515
|
+
console.log(` ashlr new ${cyan('<name>')} [options]`);
|
|
516
|
+
console.log(` ashlr new ${cyan('--list')} [--json]`);
|
|
517
|
+
console.log('');
|
|
518
|
+
console.log(' ' + bold('Options:'));
|
|
519
|
+
console.log('');
|
|
520
|
+
const opts = [
|
|
521
|
+
['--template <id>', 'Template to use (default: node-cli). See --list for available templates.'],
|
|
522
|
+
['--category <c>', 'Category under ~/Desktop/github/ (default: side-projects).'],
|
|
523
|
+
['--stack <recipe>', 'Run a stack recipe after scaffolding (requires `stack` on PATH).'],
|
|
524
|
+
['--here', 'Scaffold into cwd/<name> instead of the default ~/Desktop/github tree.'],
|
|
525
|
+
['--no-git', 'Skip `git init` in the new project.'],
|
|
526
|
+
['--json', 'Emit ScaffoldResult JSON on stdout instead of human output.'],
|
|
527
|
+
['--list', 'List available templates and exit.'],
|
|
528
|
+
];
|
|
529
|
+
const optW = Math.max(...opts.map(([o]) => o.length));
|
|
530
|
+
for (const [opt, desc] of opts) {
|
|
531
|
+
console.log(` ${cyan(padStr(opt, optW))} ${desc}`);
|
|
532
|
+
}
|
|
533
|
+
console.log('');
|
|
534
|
+
console.log(' ' + bold('Templates:'));
|
|
535
|
+
console.log('');
|
|
536
|
+
console.log(` ${cyan('node-cli')} Node.js CLI starter with TypeScript + ESM`);
|
|
537
|
+
console.log(` ${cyan('mcp-server')} MCP server starter with stdio transport`);
|
|
538
|
+
console.log(` ${cyan('next-app')} Next.js app with TypeScript`);
|
|
539
|
+
console.log(` ${cyan('minimal')} Bare-bones project with just the agentic-engineering layout`);
|
|
540
|
+
console.log('');
|
|
541
|
+
console.log(' ' + bold('Examples:'));
|
|
542
|
+
console.log('');
|
|
543
|
+
console.log(` ${gray('# Scaffold a new CLI tool in the default category (side-projects)')}`);
|
|
544
|
+
console.log(` ashlr new my-tool`);
|
|
545
|
+
console.log('');
|
|
546
|
+
console.log(` ${gray('# MCP server in the dev-tools category')}`);
|
|
547
|
+
console.log(` ashlr new my-mcp --template mcp-server --category dev-tools`);
|
|
548
|
+
console.log('');
|
|
549
|
+
console.log(` ${gray('# Scaffold into current directory (e.g. inside a monorepo)')}`);
|
|
550
|
+
console.log(` ashlr new my-app --template next-app --here`);
|
|
551
|
+
console.log('');
|
|
552
|
+
console.log(` ${gray('# Scaffold then provision with a stack recipe')}`);
|
|
553
|
+
console.log(` ashlr new my-proj --stack my-recipe`);
|
|
554
|
+
console.log('');
|
|
555
|
+
console.log(` ${gray('# List all available templates')}`);
|
|
556
|
+
console.log(` ashlr new --list`);
|
|
557
|
+
console.log('');
|
|
558
|
+
console.log(' ' + bold('Safety:'));
|
|
559
|
+
console.log('');
|
|
560
|
+
console.log(` ${dim('• REFUSES to overwrite an existing directory (no clobber).')}`);
|
|
561
|
+
console.log(` ${dim('• Writes ONLY under the target directory.')}`);
|
|
562
|
+
console.log(` ${dim('• Stack provisioning is best-effort; scaffold succeeds even if stack fails.')}`);
|
|
563
|
+
console.log('');
|
|
564
|
+
}
|
|
565
|
+
//# sourceMappingURL=new.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"new.js","sourceRoot":"","sources":["../../src/cli/new.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* `ashlr notify` — notification webhook subcommand.
|
|
3
|
+
*
|
|
4
|
+
* Usage:
|
|
5
|
+
* ashlr notify test [--json]
|
|
6
|
+
*
|
|
7
|
+
* Sends a test ping to configured webhook(s) (cfg.notify.slackWebhook /
|
|
8
|
+
* cfg.notify.discordWebhook). Informative no-op (exit 0) when none configured —
|
|
9
|
+
* explains how to set one up. Never posts without a configured webhook.
|
|
10
|
+
*
|
|
11
|
+
* Exit codes:
|
|
12
|
+
* 0 test ping sent (or no webhook configured — informative)
|
|
13
|
+
* 1 test ping failed
|
|
14
|
+
* 2 bad usage
|
|
15
|
+
*/
|
|
16
|
+
/**
|
|
17
|
+
* `ashlr notify test` — send a test ping to configured webhook(s).
|
|
18
|
+
* Informative no-op when no webhook is configured. Returns a process exit code.
|
|
19
|
+
*/
|
|
20
|
+
export declare function cmdNotify(args: string[]): Promise<number>;
|