@10et/cli 1.0.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/LICENSE +21 -0
- package/README.md +79 -0
- package/clawdbot-plugin/clawdbot.plugin.json +20 -0
- package/clawdbot-plugin/index.js +555 -0
- package/clawdbot-plugin/index.ts +582 -0
- package/clawdbot-skill/README.md +328 -0
- package/clawdbot-skill/SKILL.md +59 -0
- package/clawdbot-skill/index.ts +683 -0
- package/clawdbot-skill/package.json +28 -0
- package/clawdbot-skill/skill.json +19 -0
- package/dist/commands/agent.d.ts +7 -0
- package/dist/commands/agent.d.ts.map +1 -0
- package/dist/commands/agent.js +170 -0
- package/dist/commands/agent.js.map +1 -0
- package/dist/commands/agents.d.ts +5 -0
- package/dist/commands/agents.d.ts.map +1 -0
- package/dist/commands/agents.js +400 -0
- package/dist/commands/agents.js.map +1 -0
- package/dist/commands/ci-setup.d.ts +5 -0
- package/dist/commands/ci-setup.d.ts.map +1 -0
- package/dist/commands/ci-setup.js +82 -0
- package/dist/commands/ci-setup.js.map +1 -0
- package/dist/commands/clawdbot.d.ts +11 -0
- package/dist/commands/clawdbot.d.ts.map +1 -0
- package/dist/commands/clawdbot.js +215 -0
- package/dist/commands/clawdbot.js.map +1 -0
- package/dist/commands/context-hub.d.ts +22 -0
- package/dist/commands/context-hub.d.ts.map +1 -0
- package/dist/commands/context-hub.js +3505 -0
- package/dist/commands/context-hub.js.map +1 -0
- package/dist/commands/deploy.d.ts +5 -0
- package/dist/commands/deploy.d.ts.map +1 -0
- package/dist/commands/deploy.js +371 -0
- package/dist/commands/deploy.js.map +1 -0
- package/dist/commands/digest.d.ts +12 -0
- package/dist/commands/digest.d.ts.map +1 -0
- package/dist/commands/digest.js +128 -0
- package/dist/commands/digest.js.map +1 -0
- package/dist/commands/doctor.d.ts +8 -0
- package/dist/commands/doctor.d.ts.map +1 -0
- package/dist/commands/doctor.js +265 -0
- package/dist/commands/doctor.js.map +1 -0
- package/dist/commands/eval.d.ts +46 -0
- package/dist/commands/eval.d.ts.map +1 -0
- package/dist/commands/eval.js +427 -0
- package/dist/commands/eval.js.map +1 -0
- package/dist/commands/feedback.d.ts +2 -0
- package/dist/commands/feedback.d.ts.map +1 -0
- package/dist/commands/feedback.js +179 -0
- package/dist/commands/feedback.js.map +1 -0
- package/dist/commands/findings.d.ts +13 -0
- package/dist/commands/findings.d.ts.map +1 -0
- package/dist/commands/findings.js +203 -0
- package/dist/commands/findings.js.map +1 -0
- package/dist/commands/flows.d.ts +10 -0
- package/dist/commands/flows.d.ts.map +1 -0
- package/dist/commands/flows.js +423 -0
- package/dist/commands/flows.js.map +1 -0
- package/dist/commands/gtm-process-update.d.ts +10 -0
- package/dist/commands/gtm-process-update.d.ts.map +1 -0
- package/dist/commands/gtm-process-update.js +101 -0
- package/dist/commands/gtm-process-update.js.map +1 -0
- package/dist/commands/hooks.d.ts +13 -0
- package/dist/commands/hooks.d.ts.map +1 -0
- package/dist/commands/hooks.js +304 -0
- package/dist/commands/hooks.js.map +1 -0
- package/dist/commands/hud.d.ts +4 -0
- package/dist/commands/hud.d.ts.map +1 -0
- package/dist/commands/hud.js +300 -0
- package/dist/commands/hud.js.map +1 -0
- package/dist/commands/ide.d.ts +28 -0
- package/dist/commands/ide.d.ts.map +1 -0
- package/dist/commands/ide.js +628 -0
- package/dist/commands/ide.js.map +1 -0
- package/dist/commands/improve.d.ts +11 -0
- package/dist/commands/improve.d.ts.map +1 -0
- package/dist/commands/improve.js +77 -0
- package/dist/commands/improve.js.map +1 -0
- package/dist/commands/init-from-service.d.ts +15 -0
- package/dist/commands/init-from-service.d.ts.map +1 -0
- package/dist/commands/init-from-service.js +540 -0
- package/dist/commands/init-from-service.js.map +1 -0
- package/dist/commands/init.d.ts +15 -0
- package/dist/commands/init.d.ts.map +1 -0
- package/dist/commands/init.js +940 -0
- package/dist/commands/init.js.map +1 -0
- package/dist/commands/kanban.d.ts +34 -0
- package/dist/commands/kanban.d.ts.map +1 -0
- package/dist/commands/kanban.js +225 -0
- package/dist/commands/kanban.js.map +1 -0
- package/dist/commands/linear.d.ts +41 -0
- package/dist/commands/linear.d.ts.map +1 -0
- package/dist/commands/linear.js +740 -0
- package/dist/commands/linear.js.map +1 -0
- package/dist/commands/login.d.ts +12 -0
- package/dist/commands/login.d.ts.map +1 -0
- package/dist/commands/login.js +780 -0
- package/dist/commands/login.js.map +1 -0
- package/dist/commands/memory.d.ts +38 -0
- package/dist/commands/memory.d.ts.map +1 -0
- package/dist/commands/memory.js +229 -0
- package/dist/commands/memory.js.map +1 -0
- package/dist/commands/migrate-services.d.ts +8 -0
- package/dist/commands/migrate-services.d.ts.map +1 -0
- package/dist/commands/migrate-services.js +182 -0
- package/dist/commands/migrate-services.js.map +1 -0
- package/dist/commands/migrate-tenet.d.ts +25 -0
- package/dist/commands/migrate-tenet.d.ts.map +1 -0
- package/dist/commands/migrate-tenet.js +252 -0
- package/dist/commands/migrate-tenet.js.map +1 -0
- package/dist/commands/onboard.d.ts +24 -0
- package/dist/commands/onboard.d.ts.map +1 -0
- package/dist/commands/onboard.js +873 -0
- package/dist/commands/onboard.js.map +1 -0
- package/dist/commands/openclaw.d.ts +59 -0
- package/dist/commands/openclaw.d.ts.map +1 -0
- package/dist/commands/openclaw.js +775 -0
- package/dist/commands/openclaw.js.map +1 -0
- package/dist/commands/orchestrate.d.ts +14 -0
- package/dist/commands/orchestrate.d.ts.map +1 -0
- package/dist/commands/orchestrate.js +270 -0
- package/dist/commands/orchestrate.js.map +1 -0
- package/dist/commands/organize.d.ts +16 -0
- package/dist/commands/organize.d.ts.map +1 -0
- package/dist/commands/organize.js +334 -0
- package/dist/commands/organize.js.map +1 -0
- package/dist/commands/peter.d.ts +21 -0
- package/dist/commands/peter.d.ts.map +1 -0
- package/dist/commands/peter.js +2778 -0
- package/dist/commands/peter.js.map +1 -0
- package/dist/commands/pi-fleet.d.ts +18 -0
- package/dist/commands/pi-fleet.d.ts.map +1 -0
- package/dist/commands/pi-fleet.js +382 -0
- package/dist/commands/pi-fleet.js.map +1 -0
- package/dist/commands/pi.d.ts +25 -0
- package/dist/commands/pi.d.ts.map +1 -0
- package/dist/commands/pi.js +218 -0
- package/dist/commands/pi.js.map +1 -0
- package/dist/commands/pivot.d.ts +28 -0
- package/dist/commands/pivot.d.ts.map +1 -0
- package/dist/commands/pivot.js +216 -0
- package/dist/commands/pivot.js.map +1 -0
- package/dist/commands/portfolio.d.ts +11 -0
- package/dist/commands/portfolio.d.ts.map +1 -0
- package/dist/commands/portfolio.js +239 -0
- package/dist/commands/portfolio.js.map +1 -0
- package/dist/commands/predict.d.ts +25 -0
- package/dist/commands/predict.d.ts.map +1 -0
- package/dist/commands/predict.js +234 -0
- package/dist/commands/predict.js.map +1 -0
- package/dist/commands/profile.d.ts +46 -0
- package/dist/commands/profile.d.ts.map +1 -0
- package/dist/commands/profile.js +498 -0
- package/dist/commands/profile.js.map +1 -0
- package/dist/commands/ralph.d.ts +11 -0
- package/dist/commands/ralph.d.ts.map +1 -0
- package/dist/commands/ralph.js +102 -0
- package/dist/commands/ralph.js.map +1 -0
- package/dist/commands/repair.d.ts +7 -0
- package/dist/commands/repair.d.ts.map +1 -0
- package/dist/commands/repair.js +356 -0
- package/dist/commands/repair.js.map +1 -0
- package/dist/commands/scope.d.ts +8 -0
- package/dist/commands/scope.d.ts.map +1 -0
- package/dist/commands/scope.js +503 -0
- package/dist/commands/scope.js.map +1 -0
- package/dist/commands/service-agent.d.ts +16 -0
- package/dist/commands/service-agent.d.ts.map +1 -0
- package/dist/commands/service-agent.js +375 -0
- package/dist/commands/service-agent.js.map +1 -0
- package/dist/commands/service-manager.d.ts +12 -0
- package/dist/commands/service-manager.d.ts.map +1 -0
- package/dist/commands/service-manager.js +969 -0
- package/dist/commands/service-manager.js.map +1 -0
- package/dist/commands/service-validate.d.ts +12 -0
- package/dist/commands/service-validate.d.ts.map +1 -0
- package/dist/commands/service-validate.js +619 -0
- package/dist/commands/service-validate.js.map +1 -0
- package/dist/commands/services-create.d.ts +15 -0
- package/dist/commands/services-create.d.ts.map +1 -0
- package/dist/commands/services-create.js +1800 -0
- package/dist/commands/services-create.js.map +1 -0
- package/dist/commands/services-scan.d.ts +13 -0
- package/dist/commands/services-scan.d.ts.map +1 -0
- package/dist/commands/services-scan.js +251 -0
- package/dist/commands/services-scan.js.map +1 -0
- package/dist/commands/services-sync-agents.d.ts +23 -0
- package/dist/commands/services-sync-agents.d.ts.map +1 -0
- package/dist/commands/services-sync-agents.js +207 -0
- package/dist/commands/services-sync-agents.js.map +1 -0
- package/dist/commands/services.d.ts +19 -0
- package/dist/commands/services.d.ts.map +1 -0
- package/dist/commands/services.js +906 -0
- package/dist/commands/services.js.map +1 -0
- package/dist/commands/session.d.ts +7 -0
- package/dist/commands/session.d.ts.map +1 -0
- package/dist/commands/session.js +597 -0
- package/dist/commands/session.js.map +1 -0
- package/dist/commands/setup.d.ts +12 -0
- package/dist/commands/setup.d.ts.map +1 -0
- package/dist/commands/setup.js +727 -0
- package/dist/commands/setup.js.map +1 -0
- package/dist/commands/skills.d.ts +31 -0
- package/dist/commands/skills.d.ts.map +1 -0
- package/dist/commands/skills.js +314 -0
- package/dist/commands/skills.js.map +1 -0
- package/dist/commands/start.d.ts +25 -0
- package/dist/commands/start.d.ts.map +1 -0
- package/dist/commands/start.js +251 -0
- package/dist/commands/start.js.map +1 -0
- package/dist/commands/status.d.ts +2 -0
- package/dist/commands/status.d.ts.map +1 -0
- package/dist/commands/status.js +163 -0
- package/dist/commands/status.js.map +1 -0
- package/dist/commands/synopsis.d.ts +54 -0
- package/dist/commands/synopsis.d.ts.map +1 -0
- package/dist/commands/synopsis.js +277 -0
- package/dist/commands/synopsis.js.map +1 -0
- package/dist/commands/telemetry-monitor.d.ts +11 -0
- package/dist/commands/telemetry-monitor.d.ts.map +1 -0
- package/dist/commands/telemetry-monitor.js +224 -0
- package/dist/commands/telemetry-monitor.js.map +1 -0
- package/dist/commands/telemetry-test.d.ts +11 -0
- package/dist/commands/telemetry-test.d.ts.map +1 -0
- package/dist/commands/telemetry-test.js +67 -0
- package/dist/commands/telemetry-test.js.map +1 -0
- package/dist/commands/tenet-agents.d.ts +13 -0
- package/dist/commands/tenet-agents.d.ts.map +1 -0
- package/dist/commands/tenet-agents.js +191 -0
- package/dist/commands/tenet-agents.js.map +1 -0
- package/dist/commands/tenet-setup.d.ts +20 -0
- package/dist/commands/tenet-setup.d.ts.map +1 -0
- package/dist/commands/tenet-setup.js +135 -0
- package/dist/commands/tenet-setup.js.map +1 -0
- package/dist/commands/train.d.ts +51 -0
- package/dist/commands/train.d.ts.map +1 -0
- package/dist/commands/train.js +692 -0
- package/dist/commands/train.js.map +1 -0
- package/dist/commands/update.d.ts +12 -0
- package/dist/commands/update.d.ts.map +1 -0
- package/dist/commands/update.js +559 -0
- package/dist/commands/update.js.map +1 -0
- package/dist/commands/validate-settings.d.ts +37 -0
- package/dist/commands/validate-settings.d.ts.map +1 -0
- package/dist/commands/validate-settings.js +197 -0
- package/dist/commands/validate-settings.js.map +1 -0
- package/dist/commands/verify.d.ts +14 -0
- package/dist/commands/verify.d.ts.map +1 -0
- package/dist/commands/verify.js +304 -0
- package/dist/commands/verify.js.map +1 -0
- package/dist/commands/viz.d.ts +40 -0
- package/dist/commands/viz.d.ts.map +1 -0
- package/dist/commands/viz.js +877 -0
- package/dist/commands/viz.js.map +1 -0
- package/dist/commands/voice.d.ts +409 -0
- package/dist/commands/voice.d.ts.map +1 -0
- package/dist/commands/voice.js +4765 -0
- package/dist/commands/voice.js.map +1 -0
- package/dist/commands/whoami.d.ts +2 -0
- package/dist/commands/whoami.d.ts.map +1 -0
- package/dist/commands/whoami.js +24 -0
- package/dist/commands/whoami.js.map +1 -0
- package/dist/dashboard/index.d.ts +11 -0
- package/dist/dashboard/index.d.ts.map +1 -0
- package/dist/dashboard/index.js +70 -0
- package/dist/dashboard/index.js.map +1 -0
- package/dist/dashboard-static/assets/index-BVrmW-ZI.js +154 -0
- package/dist/dashboard-static/assets/index-DtruPD44.css +1 -0
- package/dist/dashboard-static/index.html +16 -0
- package/dist/index.d.ts +4 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +1707 -0
- package/dist/index.js.map +1 -0
- package/dist/lib/advanced-setup.d.ts +78 -0
- package/dist/lib/advanced-setup.d.ts.map +1 -0
- package/dist/lib/advanced-setup.js +433 -0
- package/dist/lib/advanced-setup.js.map +1 -0
- package/dist/lib/agent-config.d.ts +86 -0
- package/dist/lib/agent-config.d.ts.map +1 -0
- package/dist/lib/agent-config.js +281 -0
- package/dist/lib/agent-config.js.map +1 -0
- package/dist/lib/agent-generator.d.ts +36 -0
- package/dist/lib/agent-generator.d.ts.map +1 -0
- package/dist/lib/agent-generator.js +400 -0
- package/dist/lib/agent-generator.js.map +1 -0
- package/dist/lib/agent-guards.d.ts +67 -0
- package/dist/lib/agent-guards.d.ts.map +1 -0
- package/dist/lib/agent-guards.js +229 -0
- package/dist/lib/agent-guards.js.map +1 -0
- package/dist/lib/agent-manifest.d.ts +35 -0
- package/dist/lib/agent-manifest.d.ts.map +1 -0
- package/dist/lib/agent-manifest.js +75 -0
- package/dist/lib/agent-manifest.js.map +1 -0
- package/dist/lib/agent-runtime-api.d.ts +32 -0
- package/dist/lib/agent-runtime-api.d.ts.map +1 -0
- package/dist/lib/agent-runtime-api.js +270 -0
- package/dist/lib/agent-runtime-api.js.map +1 -0
- package/dist/lib/agent-session.d.ts +104 -0
- package/dist/lib/agent-session.d.ts.map +1 -0
- package/dist/lib/agent-session.js +954 -0
- package/dist/lib/agent-session.js.map +1 -0
- package/dist/lib/build-supervisor.d.ts +44 -0
- package/dist/lib/build-supervisor.d.ts.map +1 -0
- package/dist/lib/build-supervisor.js +79 -0
- package/dist/lib/build-supervisor.js.map +1 -0
- package/dist/lib/connectors/index.d.ts +19 -0
- package/dist/lib/connectors/index.d.ts.map +1 -0
- package/dist/lib/connectors/index.js +23 -0
- package/dist/lib/connectors/index.js.map +1 -0
- package/dist/lib/counterfactual-engine.d.ts +136 -0
- package/dist/lib/counterfactual-engine.d.ts.map +1 -0
- package/dist/lib/counterfactual-engine.js +417 -0
- package/dist/lib/counterfactual-engine.js.map +1 -0
- package/dist/lib/counterfactual-training-bridge.d.ts +114 -0
- package/dist/lib/counterfactual-training-bridge.d.ts.map +1 -0
- package/dist/lib/counterfactual-training-bridge.js +322 -0
- package/dist/lib/counterfactual-training-bridge.js.map +1 -0
- package/dist/lib/discovery-agent.d.ts +48 -0
- package/dist/lib/discovery-agent.d.ts.map +1 -0
- package/dist/lib/discovery-agent.js +111 -0
- package/dist/lib/discovery-agent.js.map +1 -0
- package/dist/lib/domain/engine.d.ts +11 -0
- package/dist/lib/domain/engine.d.ts.map +1 -0
- package/dist/lib/domain/engine.js +23 -0
- package/dist/lib/domain/engine.js.map +1 -0
- package/dist/lib/domain/index.d.ts +3 -0
- package/dist/lib/domain/index.d.ts.map +1 -0
- package/dist/lib/domain/index.js +3 -0
- package/dist/lib/domain/index.js.map +1 -0
- package/dist/lib/domain/template-loader.d.ts +9 -0
- package/dist/lib/domain/template-loader.d.ts.map +1 -0
- package/dist/lib/domain/template-loader.js +29 -0
- package/dist/lib/domain/template-loader.js.map +1 -0
- package/dist/lib/domain/types.d.ts +29 -0
- package/dist/lib/domain/types.d.ts.map +1 -0
- package/dist/lib/domain/types.js +2 -0
- package/dist/lib/domain/types.js.map +1 -0
- package/dist/lib/dynamics-model.d.ts +107 -0
- package/dist/lib/dynamics-model.d.ts.map +1 -0
- package/dist/lib/dynamics-model.js +363 -0
- package/dist/lib/dynamics-model.js.map +1 -0
- package/dist/lib/eval-snapshot.d.ts +47 -0
- package/dist/lib/eval-snapshot.d.ts.map +1 -0
- package/dist/lib/eval-snapshot.js +326 -0
- package/dist/lib/eval-snapshot.js.map +1 -0
- package/dist/lib/eval-store.d.ts +20 -0
- package/dist/lib/eval-store.d.ts.map +1 -0
- package/dist/lib/eval-store.js +209 -0
- package/dist/lib/eval-store.js.map +1 -0
- package/dist/lib/findings-engine.d.ts +51 -0
- package/dist/lib/findings-engine.d.ts.map +1 -0
- package/dist/lib/findings-engine.js +338 -0
- package/dist/lib/findings-engine.js.map +1 -0
- package/dist/lib/flow-engine.d.ts +57 -0
- package/dist/lib/flow-engine.d.ts.map +1 -0
- package/dist/lib/flow-engine.js +717 -0
- package/dist/lib/flow-engine.js.map +1 -0
- package/dist/lib/gtm-generator.d.ts +29 -0
- package/dist/lib/gtm-generator.d.ts.map +1 -0
- package/dist/lib/gtm-generator.js +250 -0
- package/dist/lib/gtm-generator.js.map +1 -0
- package/dist/lib/hook-transformer.d.ts +11 -0
- package/dist/lib/hook-transformer.d.ts.map +1 -0
- package/dist/lib/hook-transformer.js +74 -0
- package/dist/lib/hook-transformer.js.map +1 -0
- package/dist/lib/hub-client.d.ts +81 -0
- package/dist/lib/hub-client.d.ts.map +1 -0
- package/dist/lib/hub-client.js +73 -0
- package/dist/lib/hub-client.js.map +1 -0
- package/dist/lib/hub-health.d.ts +40 -0
- package/dist/lib/hub-health.d.ts.map +1 -0
- package/dist/lib/hub-health.js +101 -0
- package/dist/lib/hub-health.js.map +1 -0
- package/dist/lib/ide-panes.d.ts +58 -0
- package/dist/lib/ide-panes.d.ts.map +1 -0
- package/dist/lib/ide-panes.js +508 -0
- package/dist/lib/ide-panes.js.map +1 -0
- package/dist/lib/invariant-monitor.d.ts +54 -0
- package/dist/lib/invariant-monitor.d.ts.map +1 -0
- package/dist/lib/invariant-monitor.js +487 -0
- package/dist/lib/invariant-monitor.js.map +1 -0
- package/dist/lib/journal-analyzer.d.ts +71 -0
- package/dist/lib/journal-analyzer.d.ts.map +1 -0
- package/dist/lib/journal-analyzer.js +306 -0
- package/dist/lib/journal-analyzer.js.map +1 -0
- package/dist/lib/kanban-github.d.ts +81 -0
- package/dist/lib/kanban-github.d.ts.map +1 -0
- package/dist/lib/kanban-github.js +318 -0
- package/dist/lib/kanban-github.js.map +1 -0
- package/dist/lib/kanban.d.ts +131 -0
- package/dist/lib/kanban.d.ts.map +1 -0
- package/dist/lib/kanban.js +340 -0
- package/dist/lib/kanban.js.map +1 -0
- package/dist/lib/kuva.d.ts +45 -0
- package/dist/lib/kuva.d.ts.map +1 -0
- package/dist/lib/kuva.js +131 -0
- package/dist/lib/kuva.js.map +1 -0
- package/dist/lib/linear-client.d.ts +73 -0
- package/dist/lib/linear-client.d.ts.map +1 -0
- package/dist/lib/linear-client.js +112 -0
- package/dist/lib/linear-client.js.map +1 -0
- package/dist/lib/linear-id-map.d.ts +20 -0
- package/dist/lib/linear-id-map.d.ts.map +1 -0
- package/dist/lib/linear-id-map.js +59 -0
- package/dist/lib/linear-id-map.js.map +1 -0
- package/dist/lib/linear-kanban.d.ts +66 -0
- package/dist/lib/linear-kanban.d.ts.map +1 -0
- package/dist/lib/linear-kanban.js +175 -0
- package/dist/lib/linear-kanban.js.map +1 -0
- package/dist/lib/linear-webhook.d.ts +50 -0
- package/dist/lib/linear-webhook.d.ts.map +1 -0
- package/dist/lib/linear-webhook.js +92 -0
- package/dist/lib/linear-webhook.js.map +1 -0
- package/dist/lib/map-event-bus.d.ts +50 -0
- package/dist/lib/map-event-bus.d.ts.map +1 -0
- package/dist/lib/map-event-bus.js +366 -0
- package/dist/lib/map-event-bus.js.map +1 -0
- package/dist/lib/memory-db.d.ts +136 -0
- package/dist/lib/memory-db.d.ts.map +1 -0
- package/dist/lib/memory-db.js +429 -0
- package/dist/lib/memory-db.js.map +1 -0
- package/dist/lib/memory-indexer.d.ts +61 -0
- package/dist/lib/memory-indexer.d.ts.map +1 -0
- package/dist/lib/memory-indexer.js +418 -0
- package/dist/lib/memory-indexer.js.map +1 -0
- package/dist/lib/memory-search.d.ts +185 -0
- package/dist/lib/memory-search.d.ts.map +1 -0
- package/dist/lib/memory-search.js +678 -0
- package/dist/lib/memory-search.js.map +1 -0
- package/dist/lib/meta-orchestrator.d.ts +141 -0
- package/dist/lib/meta-orchestrator.d.ts.map +1 -0
- package/dist/lib/meta-orchestrator.js +552 -0
- package/dist/lib/meta-orchestrator.js.map +1 -0
- package/dist/lib/model-pricing.d.ts +11 -0
- package/dist/lib/model-pricing.d.ts.map +1 -0
- package/dist/lib/model-pricing.js +27 -0
- package/dist/lib/model-pricing.js.map +1 -0
- package/dist/lib/onboarding.d.ts +40 -0
- package/dist/lib/onboarding.d.ts.map +1 -0
- package/dist/lib/onboarding.js +213 -0
- package/dist/lib/onboarding.js.map +1 -0
- package/dist/lib/openclaw-registry.d.ts +48 -0
- package/dist/lib/openclaw-registry.d.ts.map +1 -0
- package/dist/lib/openclaw-registry.js +181 -0
- package/dist/lib/openclaw-registry.js.map +1 -0
- package/dist/lib/openclaw-sdk.d.ts +115 -0
- package/dist/lib/openclaw-sdk.d.ts.map +1 -0
- package/dist/lib/openclaw-sdk.js +220 -0
- package/dist/lib/openclaw-sdk.js.map +1 -0
- package/dist/lib/peer-agent-generator.d.ts +44 -0
- package/dist/lib/peer-agent-generator.d.ts.map +1 -0
- package/dist/lib/peer-agent-generator.js +310 -0
- package/dist/lib/peer-agent-generator.js.map +1 -0
- package/dist/lib/peter-parker-bridge.d.ts +70 -0
- package/dist/lib/peter-parker-bridge.d.ts.map +1 -0
- package/dist/lib/peter-parker-bridge.js +345 -0
- package/dist/lib/peter-parker-bridge.js.map +1 -0
- package/dist/lib/peter-parker-config.d.ts +13 -0
- package/dist/lib/peter-parker-config.d.ts.map +1 -0
- package/dist/lib/peter-parker-config.js +86 -0
- package/dist/lib/peter-parker-config.js.map +1 -0
- package/dist/lib/physical-world-model.d.ts +50 -0
- package/dist/lib/physical-world-model.d.ts.map +1 -0
- package/dist/lib/physical-world-model.js +251 -0
- package/dist/lib/physical-world-model.js.map +1 -0
- package/dist/lib/pi-sky/bridge.d.ts +55 -0
- package/dist/lib/pi-sky/bridge.d.ts.map +1 -0
- package/dist/lib/pi-sky/bridge.js +264 -0
- package/dist/lib/pi-sky/bridge.js.map +1 -0
- package/dist/lib/pi-sky/cost-monitor.d.ts +21 -0
- package/dist/lib/pi-sky/cost-monitor.d.ts.map +1 -0
- package/dist/lib/pi-sky/cost-monitor.js +126 -0
- package/dist/lib/pi-sky/cost-monitor.js.map +1 -0
- package/dist/lib/pi-sky/eval-sweep.d.ts +27 -0
- package/dist/lib/pi-sky/eval-sweep.d.ts.map +1 -0
- package/dist/lib/pi-sky/eval-sweep.js +141 -0
- package/dist/lib/pi-sky/eval-sweep.js.map +1 -0
- package/dist/lib/pi-sky/event-router.d.ts +32 -0
- package/dist/lib/pi-sky/event-router.d.ts.map +1 -0
- package/dist/lib/pi-sky/event-router.js +176 -0
- package/dist/lib/pi-sky/event-router.js.map +1 -0
- package/dist/lib/pi-sky/experiment.d.ts +9 -0
- package/dist/lib/pi-sky/experiment.d.ts.map +1 -0
- package/dist/lib/pi-sky/experiment.js +83 -0
- package/dist/lib/pi-sky/experiment.js.map +1 -0
- package/dist/lib/pi-sky/index.d.ts +16 -0
- package/dist/lib/pi-sky/index.d.ts.map +1 -0
- package/dist/lib/pi-sky/index.js +16 -0
- package/dist/lib/pi-sky/index.js.map +1 -0
- package/dist/lib/pi-sky/stratus-gate.d.ts +28 -0
- package/dist/lib/pi-sky/stratus-gate.d.ts.map +1 -0
- package/dist/lib/pi-sky/stratus-gate.js +61 -0
- package/dist/lib/pi-sky/stratus-gate.js.map +1 -0
- package/dist/lib/pi-sky/swarm.d.ts +28 -0
- package/dist/lib/pi-sky/swarm.d.ts.map +1 -0
- package/dist/lib/pi-sky/swarm.js +208 -0
- package/dist/lib/pi-sky/swarm.js.map +1 -0
- package/dist/lib/pi-sky/types.d.ts +139 -0
- package/dist/lib/pi-sky/types.d.ts.map +1 -0
- package/dist/lib/pi-sky/types.js +2 -0
- package/dist/lib/pi-sky/types.js.map +1 -0
- package/dist/lib/pi-sky/voice-bridge.d.ts +20 -0
- package/dist/lib/pi-sky/voice-bridge.d.ts.map +1 -0
- package/dist/lib/pi-sky/voice-bridge.js +91 -0
- package/dist/lib/pi-sky/voice-bridge.js.map +1 -0
- package/dist/lib/planning-loop.d.ts +157 -0
- package/dist/lib/planning-loop.d.ts.map +1 -0
- package/dist/lib/planning-loop.js +537 -0
- package/dist/lib/planning-loop.js.map +1 -0
- package/dist/lib/policy-head.d.ts +53 -0
- package/dist/lib/policy-head.d.ts.map +1 -0
- package/dist/lib/policy-head.js +400 -0
- package/dist/lib/policy-head.js.map +1 -0
- package/dist/lib/predictor.d.ts +109 -0
- package/dist/lib/predictor.d.ts.map +1 -0
- package/dist/lib/predictor.js +433 -0
- package/dist/lib/predictor.js.map +1 -0
- package/dist/lib/replay-buffer.d.ts +93 -0
- package/dist/lib/replay-buffer.d.ts.map +1 -0
- package/dist/lib/replay-buffer.js +302 -0
- package/dist/lib/replay-buffer.js.map +1 -0
- package/dist/lib/resource-optimizer-middleware.d.ts +39 -0
- package/dist/lib/resource-optimizer-middleware.d.ts.map +1 -0
- package/dist/lib/resource-optimizer-middleware.js +228 -0
- package/dist/lib/resource-optimizer-middleware.js.map +1 -0
- package/dist/lib/resource-optimizer.d.ts +71 -0
- package/dist/lib/resource-optimizer.d.ts.map +1 -0
- package/dist/lib/resource-optimizer.js +228 -0
- package/dist/lib/resource-optimizer.js.map +1 -0
- package/dist/lib/rewards/index.d.ts +14 -0
- package/dist/lib/rewards/index.d.ts.map +1 -0
- package/dist/lib/rewards/index.js +15 -0
- package/dist/lib/rewards/index.js.map +1 -0
- package/dist/lib/rl-manager.d.ts +74 -0
- package/dist/lib/rl-manager.d.ts.map +1 -0
- package/dist/lib/rl-manager.js +245 -0
- package/dist/lib/rl-manager.js.map +1 -0
- package/dist/lib/sentinel-rl.d.ts +97 -0
- package/dist/lib/sentinel-rl.d.ts.map +1 -0
- package/dist/lib/sentinel-rl.js +430 -0
- package/dist/lib/sentinel-rl.js.map +1 -0
- package/dist/lib/service-analyzer.d.ts +76 -0
- package/dist/lib/service-analyzer.d.ts.map +1 -0
- package/dist/lib/service-analyzer.js +704 -0
- package/dist/lib/service-analyzer.js.map +1 -0
- package/dist/lib/service-dependencies.d.ts +44 -0
- package/dist/lib/service-dependencies.d.ts.map +1 -0
- package/dist/lib/service-dependencies.js +314 -0
- package/dist/lib/service-dependencies.js.map +1 -0
- package/dist/lib/service-detector.d.ts +61 -0
- package/dist/lib/service-detector.d.ts.map +1 -0
- package/dist/lib/service-detector.js +541 -0
- package/dist/lib/service-detector.js.map +1 -0
- package/dist/lib/service-gtm.d.ts +208 -0
- package/dist/lib/service-gtm.d.ts.map +1 -0
- package/dist/lib/service-gtm.js +1006 -0
- package/dist/lib/service-gtm.js.map +1 -0
- package/dist/lib/service-mcp-base.d.ts +103 -0
- package/dist/lib/service-mcp-base.d.ts.map +1 -0
- package/dist/lib/service-mcp-base.js +263 -0
- package/dist/lib/service-mcp-base.js.map +1 -0
- package/dist/lib/service-questionnaire.d.ts +11 -0
- package/dist/lib/service-questionnaire.d.ts.map +1 -0
- package/dist/lib/service-questionnaire.js +89 -0
- package/dist/lib/service-questionnaire.js.map +1 -0
- package/dist/lib/service-utils.d.ts +103 -0
- package/dist/lib/service-utils.d.ts.map +1 -0
- package/dist/lib/service-utils.js +385 -0
- package/dist/lib/service-utils.js.map +1 -0
- package/dist/lib/session-lock.d.ts +61 -0
- package/dist/lib/session-lock.d.ts.map +1 -0
- package/dist/lib/session-lock.js +438 -0
- package/dist/lib/session-lock.js.map +1 -0
- package/dist/lib/setup/agent-generator.d.ts +25 -0
- package/dist/lib/setup/agent-generator.d.ts.map +1 -0
- package/dist/lib/setup/agent-generator.js +444 -0
- package/dist/lib/setup/agent-generator.js.map +1 -0
- package/dist/lib/setup/context-analyzer.d.ts +16 -0
- package/dist/lib/setup/context-analyzer.d.ts.map +1 -0
- package/dist/lib/setup/context-analyzer.js +112 -0
- package/dist/lib/setup/context-analyzer.js.map +1 -0
- package/dist/lib/setup/doc-auditor.d.ts +54 -0
- package/dist/lib/setup/doc-auditor.d.ts.map +1 -0
- package/dist/lib/setup/doc-auditor.js +629 -0
- package/dist/lib/setup/doc-auditor.js.map +1 -0
- package/dist/lib/setup/domain-generator.d.ts +7 -0
- package/dist/lib/setup/domain-generator.d.ts.map +1 -0
- package/dist/lib/setup/domain-generator.js +58 -0
- package/dist/lib/setup/domain-generator.js.map +1 -0
- package/dist/lib/setup/flow-generator.d.ts +10 -0
- package/dist/lib/setup/flow-generator.d.ts.map +1 -0
- package/dist/lib/setup/flow-generator.js +113 -0
- package/dist/lib/setup/flow-generator.js.map +1 -0
- package/dist/lib/setup/invariant-bridge.d.ts +91 -0
- package/dist/lib/setup/invariant-bridge.d.ts.map +1 -0
- package/dist/lib/setup/invariant-bridge.js +384 -0
- package/dist/lib/setup/invariant-bridge.js.map +1 -0
- package/dist/lib/setup/smart-eval-generator.d.ts +38 -0
- package/dist/lib/setup/smart-eval-generator.d.ts.map +1 -0
- package/dist/lib/setup/smart-eval-generator.js +378 -0
- package/dist/lib/setup/smart-eval-generator.js.map +1 -0
- package/dist/lib/setup/smart-recommender.d.ts +63 -0
- package/dist/lib/setup/smart-recommender.d.ts.map +1 -0
- package/dist/lib/setup/smart-recommender.js +329 -0
- package/dist/lib/setup/smart-recommender.js.map +1 -0
- package/dist/lib/setup/spec-generator.d.ts +99 -0
- package/dist/lib/setup/spec-generator.d.ts.map +1 -0
- package/dist/lib/setup/spec-generator.js +784 -0
- package/dist/lib/setup/spec-generator.js.map +1 -0
- package/dist/lib/setup/starter-intelligence.d.ts +25 -0
- package/dist/lib/setup/starter-intelligence.d.ts.map +1 -0
- package/dist/lib/setup/starter-intelligence.js +309 -0
- package/dist/lib/setup/starter-intelligence.js.map +1 -0
- package/dist/lib/setup/violation-agent-generator.d.ts +32 -0
- package/dist/lib/setup/violation-agent-generator.d.ts.map +1 -0
- package/dist/lib/setup/violation-agent-generator.js +255 -0
- package/dist/lib/setup/violation-agent-generator.js.map +1 -0
- package/dist/lib/skill-generator.d.ts +21 -0
- package/dist/lib/skill-generator.d.ts.map +1 -0
- package/dist/lib/skill-generator.js +253 -0
- package/dist/lib/skill-generator.js.map +1 -0
- package/dist/lib/state-capture.d.ts +36 -0
- package/dist/lib/state-capture.d.ts.map +1 -0
- package/dist/lib/state-capture.js +541 -0
- package/dist/lib/state-capture.js.map +1 -0
- package/dist/lib/stealth-onboarding.d.ts +40 -0
- package/dist/lib/stealth-onboarding.d.ts.map +1 -0
- package/dist/lib/stealth-onboarding.js +213 -0
- package/dist/lib/stealth-onboarding.js.map +1 -0
- package/dist/lib/storage/cloud.d.ts +27 -0
- package/dist/lib/storage/cloud.d.ts.map +1 -0
- package/dist/lib/storage/cloud.js +75 -0
- package/dist/lib/storage/cloud.js.map +1 -0
- package/dist/lib/storage/index.d.ts +15 -0
- package/dist/lib/storage/index.d.ts.map +1 -0
- package/dist/lib/storage/index.js +15 -0
- package/dist/lib/storage/index.js.map +1 -0
- package/dist/lib/storage/interface.d.ts +56 -0
- package/dist/lib/storage/interface.d.ts.map +1 -0
- package/dist/lib/storage/interface.js +2 -0
- package/dist/lib/storage/interface.js.map +1 -0
- package/dist/lib/storage/local.d.ts +26 -0
- package/dist/lib/storage/local.d.ts.map +1 -0
- package/dist/lib/storage/local.js +164 -0
- package/dist/lib/storage/local.js.map +1 -0
- package/dist/lib/stratus-client.d.ts +178 -0
- package/dist/lib/stratus-client.d.ts.map +1 -0
- package/dist/lib/stratus-client.js +739 -0
- package/dist/lib/stratus-client.js.map +1 -0
- package/dist/lib/stratus-rollout-test.d.ts +10 -0
- package/dist/lib/stratus-rollout-test.d.ts.map +1 -0
- package/dist/lib/stratus-rollout-test.js +412 -0
- package/dist/lib/stratus-rollout-test.js.map +1 -0
- package/dist/lib/surface-agent.d.ts +78 -0
- package/dist/lib/surface-agent.d.ts.map +1 -0
- package/dist/lib/surface-agent.js +105 -0
- package/dist/lib/surface-agent.js.map +1 -0
- package/dist/lib/surface-coordination-example.d.ts +30 -0
- package/dist/lib/surface-coordination-example.d.ts.map +1 -0
- package/dist/lib/surface-coordination-example.js +164 -0
- package/dist/lib/surface-coordination-example.js.map +1 -0
- package/dist/lib/telemetry/physical-world-collector.d.ts +15 -0
- package/dist/lib/telemetry/physical-world-collector.d.ts.map +1 -0
- package/dist/lib/telemetry/physical-world-collector.js +177 -0
- package/dist/lib/telemetry/physical-world-collector.js.map +1 -0
- package/dist/lib/telemetry/training-bridge.d.ts +51 -0
- package/dist/lib/telemetry/training-bridge.d.ts.map +1 -0
- package/dist/lib/telemetry/training-bridge.js +185 -0
- package/dist/lib/telemetry/training-bridge.js.map +1 -0
- package/dist/lib/telemetry-agent-v2.d.ts +128 -0
- package/dist/lib/telemetry-agent-v2.d.ts.map +1 -0
- package/dist/lib/telemetry-agent-v2.js +1043 -0
- package/dist/lib/telemetry-agent-v2.js.map +1 -0
- package/dist/lib/telemetry-agent.d.ts +57 -0
- package/dist/lib/telemetry-agent.d.ts.map +1 -0
- package/dist/lib/telemetry-agent.js +289 -0
- package/dist/lib/telemetry-agent.js.map +1 -0
- package/dist/lib/telemetry-digest.d.ts +10 -0
- package/dist/lib/telemetry-digest.d.ts.map +1 -0
- package/dist/lib/telemetry-digest.js +381 -0
- package/dist/lib/telemetry-digest.js.map +1 -0
- package/dist/lib/telemetry.d.ts +37 -0
- package/dist/lib/telemetry.d.ts.map +1 -0
- package/dist/lib/telemetry.js +376 -0
- package/dist/lib/telemetry.js.map +1 -0
- package/dist/lib/tenet-board-agent.d.ts +52 -0
- package/dist/lib/tenet-board-agent.d.ts.map +1 -0
- package/dist/lib/tenet-board-agent.js +226 -0
- package/dist/lib/tenet-board-agent.js.map +1 -0
- package/dist/lib/tenet-ide-agent.d.ts +40 -0
- package/dist/lib/tenet-ide-agent.d.ts.map +1 -0
- package/dist/lib/tenet-ide-agent.js +199 -0
- package/dist/lib/tenet-ide-agent.js.map +1 -0
- package/dist/lib/text-preprocessing.d.ts +83 -0
- package/dist/lib/text-preprocessing.d.ts.map +1 -0
- package/dist/lib/text-preprocessing.js +261 -0
- package/dist/lib/text-preprocessing.js.map +1 -0
- package/dist/lib/tool-schemas.d.ts +35 -0
- package/dist/lib/tool-schemas.d.ts.map +1 -0
- package/dist/lib/tool-schemas.js +246 -0
- package/dist/lib/tool-schemas.js.map +1 -0
- package/dist/lib/training-buffer.d.ts +86 -0
- package/dist/lib/training-buffer.d.ts.map +1 -0
- package/dist/lib/training-buffer.js +139 -0
- package/dist/lib/training-buffer.js.map +1 -0
- package/dist/lib/training-tuples.d.ts +33 -0
- package/dist/lib/training-tuples.d.ts.map +1 -0
- package/dist/lib/training-tuples.js +273 -0
- package/dist/lib/training-tuples.js.map +1 -0
- package/dist/lib/trajectory-loader.d.ts +82 -0
- package/dist/lib/trajectory-loader.d.ts.map +1 -0
- package/dist/lib/trajectory-loader.js +406 -0
- package/dist/lib/trajectory-loader.js.map +1 -0
- package/dist/lib/tuple-miner.d.ts +30 -0
- package/dist/lib/tuple-miner.d.ts.map +1 -0
- package/dist/lib/tuple-miner.js +427 -0
- package/dist/lib/tuple-miner.js.map +1 -0
- package/dist/lib/vm-backend.d.ts +72 -0
- package/dist/lib/vm-backend.d.ts.map +1 -0
- package/dist/lib/vm-backend.js +175 -0
- package/dist/lib/vm-backend.js.map +1 -0
- package/dist/lib/workspace/backend.d.ts +53 -0
- package/dist/lib/workspace/backend.d.ts.map +1 -0
- package/dist/lib/workspace/backend.js +37 -0
- package/dist/lib/workspace/backend.js.map +1 -0
- package/dist/lib/workspace/cmux-adapter.d.ts +46 -0
- package/dist/lib/workspace/cmux-adapter.d.ts.map +1 -0
- package/dist/lib/workspace/cmux-adapter.js +261 -0
- package/dist/lib/workspace/cmux-adapter.js.map +1 -0
- package/dist/lib/workspace/data-pipeline.d.ts +35 -0
- package/dist/lib/workspace/data-pipeline.d.ts.map +1 -0
- package/dist/lib/workspace/data-pipeline.js +494 -0
- package/dist/lib/workspace/data-pipeline.js.map +1 -0
- package/dist/lib/workspace/engine.d.ts +65 -0
- package/dist/lib/workspace/engine.d.ts.map +1 -0
- package/dist/lib/workspace/engine.js +407 -0
- package/dist/lib/workspace/engine.js.map +1 -0
- package/dist/lib/workspace/notifications.d.ts +14 -0
- package/dist/lib/workspace/notifications.d.ts.map +1 -0
- package/dist/lib/workspace/notifications.js +41 -0
- package/dist/lib/workspace/notifications.js.map +1 -0
- package/dist/lib/workspace/sidebar-runner.d.ts +13 -0
- package/dist/lib/workspace/sidebar-runner.d.ts.map +1 -0
- package/dist/lib/workspace/sidebar-runner.js +419 -0
- package/dist/lib/workspace/sidebar-runner.js.map +1 -0
- package/dist/lib/workspace/surface-registry.d.ts +49 -0
- package/dist/lib/workspace/surface-registry.d.ts.map +1 -0
- package/dist/lib/workspace/surface-registry.js +225 -0
- package/dist/lib/workspace/surface-registry.js.map +1 -0
- package/dist/lib/workspace/surface-type.d.ts +153 -0
- package/dist/lib/workspace/surface-type.d.ts.map +1 -0
- package/dist/lib/workspace/surface-type.js +9 -0
- package/dist/lib/workspace/surface-type.js.map +1 -0
- package/dist/lib/workspace/surfaces/agent-overview.d.ts +16 -0
- package/dist/lib/workspace/surfaces/agent-overview.d.ts.map +1 -0
- package/dist/lib/workspace/surfaces/agent-overview.js +116 -0
- package/dist/lib/workspace/surfaces/agent-overview.js.map +1 -0
- package/dist/lib/workspace/surfaces/agent.d.ts +16 -0
- package/dist/lib/workspace/surfaces/agent.d.ts.map +1 -0
- package/dist/lib/workspace/surfaces/agent.js +112 -0
- package/dist/lib/workspace/surfaces/agent.js.map +1 -0
- package/dist/lib/workspace/surfaces/claude.d.ts +15 -0
- package/dist/lib/workspace/surfaces/claude.d.ts.map +1 -0
- package/dist/lib/workspace/surfaces/claude.js +23 -0
- package/dist/lib/workspace/surfaces/claude.js.map +1 -0
- package/dist/lib/workspace/surfaces/dashboard.d.ts +21 -0
- package/dist/lib/workspace/surfaces/dashboard.d.ts.map +1 -0
- package/dist/lib/workspace/surfaces/dashboard.js +32 -0
- package/dist/lib/workspace/surfaces/dashboard.js.map +1 -0
- package/dist/lib/workspace/surfaces/eval.d.ts +15 -0
- package/dist/lib/workspace/surfaces/eval.d.ts.map +1 -0
- package/dist/lib/workspace/surfaces/eval.js +42 -0
- package/dist/lib/workspace/surfaces/eval.js.map +1 -0
- package/dist/lib/workspace/surfaces/event-stream.d.ts +16 -0
- package/dist/lib/workspace/surfaces/event-stream.d.ts.map +1 -0
- package/dist/lib/workspace/surfaces/event-stream.js +40 -0
- package/dist/lib/workspace/surfaces/event-stream.js.map +1 -0
- package/dist/lib/workspace/surfaces/flow.d.ts +16 -0
- package/dist/lib/workspace/surfaces/flow.d.ts.map +1 -0
- package/dist/lib/workspace/surfaces/flow.js +49 -0
- package/dist/lib/workspace/surfaces/flow.js.map +1 -0
- package/dist/lib/workspace/surfaces/index.d.ts +19 -0
- package/dist/lib/workspace/surfaces/index.d.ts.map +1 -0
- package/dist/lib/workspace/surfaces/index.js +19 -0
- package/dist/lib/workspace/surfaces/index.js.map +1 -0
- package/dist/lib/workspace/surfaces/kanban.d.ts +15 -0
- package/dist/lib/workspace/surfaces/kanban.d.ts.map +1 -0
- package/dist/lib/workspace/surfaces/kanban.js +43 -0
- package/dist/lib/workspace/surfaces/kanban.js.map +1 -0
- package/dist/lib/workspace/surfaces/physical-world.d.ts +15 -0
- package/dist/lib/workspace/surfaces/physical-world.d.ts.map +1 -0
- package/dist/lib/workspace/surfaces/physical-world.js +37 -0
- package/dist/lib/workspace/surfaces/physical-world.js.map +1 -0
- package/dist/lib/workspace/surfaces/portfolio.d.ts +16 -0
- package/dist/lib/workspace/surfaces/portfolio.d.ts.map +1 -0
- package/dist/lib/workspace/surfaces/portfolio.js +102 -0
- package/dist/lib/workspace/surfaces/portfolio.js.map +1 -0
- package/dist/lib/workspace/surfaces/service.d.ts +16 -0
- package/dist/lib/workspace/surfaces/service.d.ts.map +1 -0
- package/dist/lib/workspace/surfaces/service.js +45 -0
- package/dist/lib/workspace/surfaces/service.js.map +1 -0
- package/dist/lib/workspace/surfaces/shell.d.ts +15 -0
- package/dist/lib/workspace/surfaces/shell.d.ts.map +1 -0
- package/dist/lib/workspace/surfaces/shell.js +19 -0
- package/dist/lib/workspace/surfaces/shell.js.map +1 -0
- package/dist/lib/workspace/surfaces/sidebar.d.ts +22 -0
- package/dist/lib/workspace/surfaces/sidebar.d.ts.map +1 -0
- package/dist/lib/workspace/surfaces/sidebar.js +94 -0
- package/dist/lib/workspace/surfaces/sidebar.js.map +1 -0
- package/dist/lib/workspace/surfaces/telemetry.d.ts +16 -0
- package/dist/lib/workspace/surfaces/telemetry.d.ts.map +1 -0
- package/dist/lib/workspace/surfaces/telemetry.js +48 -0
- package/dist/lib/workspace/surfaces/telemetry.js.map +1 -0
- package/dist/lib/workspace/surfaces/topology.d.ts +15 -0
- package/dist/lib/workspace/surfaces/topology.d.ts.map +1 -0
- package/dist/lib/workspace/surfaces/topology.js +19 -0
- package/dist/lib/workspace/surfaces/topology.js.map +1 -0
- package/dist/lib/workspace/surfaces/training.d.ts +16 -0
- package/dist/lib/workspace/surfaces/training.d.ts.map +1 -0
- package/dist/lib/workspace/surfaces/training.js +22 -0
- package/dist/lib/workspace/surfaces/training.js.map +1 -0
- package/dist/lib/workspace/tmux-adapter.d.ts +30 -0
- package/dist/lib/workspace/tmux-adapter.d.ts.map +1 -0
- package/dist/lib/workspace/tmux-adapter.js +137 -0
- package/dist/lib/workspace/tmux-adapter.js.map +1 -0
- package/dist/lib/workspace/tmux-sidebar.d.ts +14 -0
- package/dist/lib/workspace/tmux-sidebar.d.ts.map +1 -0
- package/dist/lib/workspace/tmux-sidebar.js +230 -0
- package/dist/lib/workspace/tmux-sidebar.js.map +1 -0
- package/dist/lib/world-model-store.d.ts +172 -0
- package/dist/lib/world-model-store.d.ts.map +1 -0
- package/dist/lib/world-model-store.js +487 -0
- package/dist/lib/world-model-store.js.map +1 -0
- package/dist/mcp/context-hub-mcp.d.ts +11 -0
- package/dist/mcp/context-hub-mcp.d.ts.map +1 -0
- package/dist/mcp/context-hub-mcp.js +797 -0
- package/dist/mcp/context-hub-mcp.js.map +1 -0
- package/dist/mcp/service-mcp-server.d.ts +12 -0
- package/dist/mcp/service-mcp-server.d.ts.map +1 -0
- package/dist/mcp/service-mcp-server.js +434 -0
- package/dist/mcp/service-mcp-server.js.map +1 -0
- package/dist/mcp/service-peer-mcp.d.ts +36 -0
- package/dist/mcp/service-peer-mcp.d.ts.map +1 -0
- package/dist/mcp/service-peer-mcp.js +220 -0
- package/dist/mcp/service-peer-mcp.js.map +1 -0
- package/dist/mcp/service-registry-mcp.d.ts +13 -0
- package/dist/mcp/service-registry-mcp.d.ts.map +1 -0
- package/dist/mcp/service-registry-mcp.js +330 -0
- package/dist/mcp/service-registry-mcp.js.map +1 -0
- package/dist/telegram/voice.d.ts +146 -0
- package/dist/telegram/voice.d.ts.map +1 -0
- package/dist/telegram/voice.js +351 -0
- package/dist/telegram/voice.js.map +1 -0
- package/dist/types/eval.d.ts +18 -0
- package/dist/types/eval.d.ts.map +1 -0
- package/dist/types/eval.js +5 -0
- package/dist/types/eval.js.map +1 -0
- package/dist/types/flows.d.ts +72 -0
- package/dist/types/flows.d.ts.map +1 -0
- package/dist/types/flows.js +10 -0
- package/dist/types/flows.js.map +1 -0
- package/dist/types/ide.d.ts +49 -0
- package/dist/types/ide.d.ts.map +1 -0
- package/dist/types/ide.js +5 -0
- package/dist/types/ide.js.map +1 -0
- package/dist/types/journal.d.ts +133 -0
- package/dist/types/journal.d.ts.map +1 -0
- package/dist/types/journal.js +59 -0
- package/dist/types/journal.js.map +1 -0
- package/dist/types/map.d.ts +42 -0
- package/dist/types/map.d.ts.map +1 -0
- package/dist/types/map.js +39 -0
- package/dist/types/map.js.map +1 -0
- package/dist/types/physical-world-model.d.ts +65 -0
- package/dist/types/physical-world-model.d.ts.map +1 -0
- package/dist/types/physical-world-model.js +43 -0
- package/dist/types/physical-world-model.js.map +1 -0
- package/dist/types/platform-digest.d.ts +228 -0
- package/dist/types/platform-digest.d.ts.map +1 -0
- package/dist/types/platform-digest.js +5 -0
- package/dist/types/platform-digest.js.map +1 -0
- package/dist/types/skills.d.ts +44 -0
- package/dist/types/skills.d.ts.map +1 -0
- package/dist/types/skills.js +5 -0
- package/dist/types/skills.js.map +1 -0
- package/dist/types/telemetry-digest.d.ts +75 -0
- package/dist/types/telemetry-digest.d.ts.map +1 -0
- package/dist/types/telemetry-digest.js +5 -0
- package/dist/types/telemetry-digest.js.map +1 -0
- package/dist/types/telemetry.d.ts +107 -0
- package/dist/types/telemetry.d.ts.map +1 -0
- package/dist/types/telemetry.js +5 -0
- package/dist/types/telemetry.js.map +1 -0
- package/dist/types/world-model.d.ts +478 -0
- package/dist/types/world-model.d.ts.map +1 -0
- package/dist/types/world-model.js +87 -0
- package/dist/types/world-model.js.map +1 -0
- package/dist/ui/banner.d.ts +18 -0
- package/dist/ui/banner.d.ts.map +1 -0
- package/dist/ui/banner.js +323 -0
- package/dist/ui/banner.js.map +1 -0
- package/dist/ui/context-hub-logs.d.ts +10 -0
- package/dist/ui/context-hub-logs.d.ts.map +1 -0
- package/dist/ui/context-hub-logs.js +175 -0
- package/dist/ui/context-hub-logs.js.map +1 -0
- package/dist/ui/event-dashboard.d.ts +12 -0
- package/dist/ui/event-dashboard.d.ts.map +1 -0
- package/dist/ui/event-dashboard.js +342 -0
- package/dist/ui/event-dashboard.js.map +1 -0
- package/dist/ui/index.d.ts +8 -0
- package/dist/ui/index.d.ts.map +1 -0
- package/dist/ui/index.js +8 -0
- package/dist/ui/index.js.map +1 -0
- package/dist/ui/prompts.d.ts +52 -0
- package/dist/ui/prompts.d.ts.map +1 -0
- package/dist/ui/prompts.js +72 -0
- package/dist/ui/prompts.js.map +1 -0
- package/dist/ui/service-dashboard.d.ts +11 -0
- package/dist/ui/service-dashboard.d.ts.map +1 -0
- package/dist/ui/service-dashboard.js +357 -0
- package/dist/ui/service-dashboard.js.map +1 -0
- package/dist/ui/services-manager.d.ts +11 -0
- package/dist/ui/services-manager.d.ts.map +1 -0
- package/dist/ui/services-manager.js +507 -0
- package/dist/ui/services-manager.js.map +1 -0
- package/dist/ui/theme.d.ts +82 -0
- package/dist/ui/theme.d.ts.map +1 -0
- package/dist/ui/theme.js +142 -0
- package/dist/ui/theme.js.map +1 -0
- package/dist/utils/auth-guard.d.ts +66 -0
- package/dist/utils/auth-guard.d.ts.map +1 -0
- package/dist/utils/auth-guard.js +347 -0
- package/dist/utils/auth-guard.js.map +1 -0
- package/dist/utils/auth-status.d.ts +21 -0
- package/dist/utils/auth-status.d.ts.map +1 -0
- package/dist/utils/auth-status.js +53 -0
- package/dist/utils/auth-status.js.map +1 -0
- package/dist/utils/claude-md-generator.d.ts +10 -0
- package/dist/utils/claude-md-generator.d.ts.map +1 -0
- package/dist/utils/claude-md-generator.js +215 -0
- package/dist/utils/claude-md-generator.js.map +1 -0
- package/dist/utils/context-hub-port.d.ts +33 -0
- package/dist/utils/context-hub-port.d.ts.map +1 -0
- package/dist/utils/context-hub-port.js +118 -0
- package/dist/utils/context-hub-port.js.map +1 -0
- package/dist/utils/ensure-context-hub.d.ts +20 -0
- package/dist/utils/ensure-context-hub.d.ts.map +1 -0
- package/dist/utils/ensure-context-hub.js +66 -0
- package/dist/utils/ensure-context-hub.js.map +1 -0
- package/dist/utils/ensure-project.d.ts +12 -0
- package/dist/utils/ensure-project.d.ts.map +1 -0
- package/dist/utils/ensure-project.js +81 -0
- package/dist/utils/ensure-project.js.map +1 -0
- package/dist/utils/git.d.ts +73 -0
- package/dist/utils/git.d.ts.map +1 -0
- package/dist/utils/git.js +222 -0
- package/dist/utils/git.js.map +1 -0
- package/dist/utils/github-auth.d.ts +54 -0
- package/dist/utils/github-auth.d.ts.map +1 -0
- package/dist/utils/github-auth.js +376 -0
- package/dist/utils/github-auth.js.map +1 -0
- package/dist/utils/github-repo.d.ts +30 -0
- package/dist/utils/github-repo.d.ts.map +1 -0
- package/dist/utils/github-repo.js +219 -0
- package/dist/utils/github-repo.js.map +1 -0
- package/dist/utils/jfl-config.d.ts +30 -0
- package/dist/utils/jfl-config.d.ts.map +1 -0
- package/dist/utils/jfl-config.js +153 -0
- package/dist/utils/jfl-config.js.map +1 -0
- package/dist/utils/jfl-migration.d.ts +29 -0
- package/dist/utils/jfl-migration.d.ts.map +1 -0
- package/dist/utils/jfl-migration.js +142 -0
- package/dist/utils/jfl-migration.js.map +1 -0
- package/dist/utils/jfl-paths.d.ts +71 -0
- package/dist/utils/jfl-paths.d.ts.map +1 -0
- package/dist/utils/jfl-paths.js +157 -0
- package/dist/utils/jfl-paths.js.map +1 -0
- package/dist/utils/platform-auth.d.ts +81 -0
- package/dist/utils/platform-auth.d.ts.map +1 -0
- package/dist/utils/platform-auth.js +192 -0
- package/dist/utils/platform-auth.js.map +1 -0
- package/dist/utils/project-config.d.ts +43 -0
- package/dist/utils/project-config.d.ts.map +1 -0
- package/dist/utils/project-config.js +97 -0
- package/dist/utils/project-config.js.map +1 -0
- package/dist/utils/provenance.d.ts +65 -0
- package/dist/utils/provenance.d.ts.map +1 -0
- package/dist/utils/provenance.js +213 -0
- package/dist/utils/provenance.js.map +1 -0
- package/dist/utils/settings-validator.d.ts +74 -0
- package/dist/utils/settings-validator.d.ts.map +1 -0
- package/dist/utils/settings-validator.js +241 -0
- package/dist/utils/settings-validator.js.map +1 -0
- package/dist/utils/skill-registry.d.ts +49 -0
- package/dist/utils/skill-registry.d.ts.map +1 -0
- package/dist/utils/skill-registry.js +192 -0
- package/dist/utils/skill-registry.js.map +1 -0
- package/dist/utils/tenet-env.d.ts +34 -0
- package/dist/utils/tenet-env.d.ts.map +1 -0
- package/dist/utils/tenet-env.js +42 -0
- package/dist/utils/tenet-env.js.map +1 -0
- package/dist/utils/wallet.d.ts +62 -0
- package/dist/utils/wallet.d.ts.map +1 -0
- package/dist/utils/wallet.js +253 -0
- package/dist/utils/wallet.js.map +1 -0
- package/dist/utils/x402-client.d.ts +86 -0
- package/dist/utils/x402-client.d.ts.map +1 -0
- package/dist/utils/x402-client.js +266 -0
- package/dist/utils/x402-client.js.map +1 -0
- package/package.json +105 -0
- package/packages/pi/AGENTS.md +112 -0
- package/packages/pi/assets/boot.mp3 +0 -0
- package/packages/pi/dist/agent-grid.d.ts +24 -0
- package/packages/pi/dist/agent-grid.d.ts.map +1 -0
- package/packages/pi/dist/agent-grid.js +162 -0
- package/packages/pi/dist/agent-grid.js.map +1 -0
- package/packages/pi/dist/agent-names.d.ts +43 -0
- package/packages/pi/dist/agent-names.d.ts.map +1 -0
- package/packages/pi/dist/agent-names.js +156 -0
- package/packages/pi/dist/agent-names.js.map +1 -0
- package/packages/pi/dist/autoresearch.d.ts +15 -0
- package/packages/pi/dist/autoresearch.d.ts.map +1 -0
- package/packages/pi/dist/autoresearch.js +372 -0
- package/packages/pi/dist/autoresearch.js.map +1 -0
- package/packages/pi/dist/bookmarks.d.ts +15 -0
- package/packages/pi/dist/bookmarks.d.ts.map +1 -0
- package/packages/pi/dist/bookmarks.js +77 -0
- package/packages/pi/dist/bookmarks.js.map +1 -0
- package/packages/pi/dist/context.d.ts +17 -0
- package/packages/pi/dist/context.d.ts.map +1 -0
- package/packages/pi/dist/context.js +152 -0
- package/packages/pi/dist/context.js.map +1 -0
- package/packages/pi/dist/crm-tool.d.ts +12 -0
- package/packages/pi/dist/crm-tool.d.ts.map +1 -0
- package/packages/pi/dist/crm-tool.js +58 -0
- package/packages/pi/dist/crm-tool.js.map +1 -0
- package/packages/pi/dist/eval-tool.d.ts +11 -0
- package/packages/pi/dist/eval-tool.d.ts.map +1 -0
- package/packages/pi/dist/eval-tool.js +188 -0
- package/packages/pi/dist/eval-tool.js.map +1 -0
- package/packages/pi/dist/eval.d.ts +12 -0
- package/packages/pi/dist/eval.d.ts.map +1 -0
- package/packages/pi/dist/eval.js +43 -0
- package/packages/pi/dist/eval.js.map +1 -0
- package/packages/pi/dist/footer.d.ts +20 -0
- package/packages/pi/dist/footer.d.ts.map +1 -0
- package/packages/pi/dist/footer.js +222 -0
- package/packages/pi/dist/footer.js.map +1 -0
- package/packages/pi/dist/header.d.ts +17 -0
- package/packages/pi/dist/header.d.ts.map +1 -0
- package/packages/pi/dist/header.js +156 -0
- package/packages/pi/dist/header.js.map +1 -0
- package/packages/pi/dist/hub-resolver.d.ts +11 -0
- package/packages/pi/dist/hub-resolver.d.ts.map +1 -0
- package/packages/pi/dist/hub-resolver.js +58 -0
- package/packages/pi/dist/hub-resolver.js.map +1 -0
- package/packages/pi/dist/hub-tools.d.ts +14 -0
- package/packages/pi/dist/hub-tools.d.ts.map +1 -0
- package/packages/pi/dist/hub-tools.js +266 -0
- package/packages/pi/dist/hub-tools.js.map +1 -0
- package/packages/pi/dist/hud-tool.d.ts +17 -0
- package/packages/pi/dist/hud-tool.d.ts.map +1 -0
- package/packages/pi/dist/hud-tool.js +297 -0
- package/packages/pi/dist/hud-tool.js.map +1 -0
- package/packages/pi/dist/index.d.ts +12 -0
- package/packages/pi/dist/index.d.ts.map +1 -0
- package/packages/pi/dist/index.js +556 -0
- package/packages/pi/dist/index.js.map +1 -0
- package/packages/pi/dist/jfl-resolve.d.ts +29 -0
- package/packages/pi/dist/jfl-resolve.d.ts.map +1 -0
- package/packages/pi/dist/jfl-resolve.js +89 -0
- package/packages/pi/dist/jfl-resolve.js.map +1 -0
- package/packages/pi/dist/journal.d.ts +23 -0
- package/packages/pi/dist/journal.d.ts.map +1 -0
- package/packages/pi/dist/journal.js +250 -0
- package/packages/pi/dist/journal.js.map +1 -0
- package/packages/pi/dist/map-bridge.d.ts +20 -0
- package/packages/pi/dist/map-bridge.d.ts.map +1 -0
- package/packages/pi/dist/map-bridge.js +181 -0
- package/packages/pi/dist/map-bridge.js.map +1 -0
- package/packages/pi/dist/memory-tool.d.ts +11 -0
- package/packages/pi/dist/memory-tool.d.ts.map +1 -0
- package/packages/pi/dist/memory-tool.js +162 -0
- package/packages/pi/dist/memory-tool.js.map +1 -0
- package/packages/pi/dist/notifications.d.ts +15 -0
- package/packages/pi/dist/notifications.d.ts.map +1 -0
- package/packages/pi/dist/notifications.js +65 -0
- package/packages/pi/dist/notifications.js.map +1 -0
- package/packages/pi/dist/onboarding-v1.d.ts +15 -0
- package/packages/pi/dist/onboarding-v1.d.ts.map +1 -0
- package/packages/pi/dist/onboarding-v1.js +417 -0
- package/packages/pi/dist/onboarding-v1.js.map +1 -0
- package/packages/pi/dist/onboarding-v2.d.ts +18 -0
- package/packages/pi/dist/onboarding-v2.d.ts.map +1 -0
- package/packages/pi/dist/onboarding-v2.js +402 -0
- package/packages/pi/dist/onboarding-v2.js.map +1 -0
- package/packages/pi/dist/onboarding-v3.d.ts +13 -0
- package/packages/pi/dist/onboarding-v3.d.ts.map +1 -0
- package/packages/pi/dist/onboarding-v3.js +581 -0
- package/packages/pi/dist/onboarding-v3.js.map +1 -0
- package/packages/pi/dist/peter-parker.d.ts +12 -0
- package/packages/pi/dist/peter-parker.d.ts.map +1 -0
- package/packages/pi/dist/peter-parker.js +162 -0
- package/packages/pi/dist/peter-parker.js.map +1 -0
- package/packages/pi/dist/pivot-tool.d.ts +11 -0
- package/packages/pi/dist/pivot-tool.d.ts.map +1 -0
- package/packages/pi/dist/pivot-tool.js +56 -0
- package/packages/pi/dist/pivot-tool.js.map +1 -0
- package/packages/pi/dist/policy-head-tool.d.ts +15 -0
- package/packages/pi/dist/policy-head-tool.d.ts.map +1 -0
- package/packages/pi/dist/policy-head-tool.js +220 -0
- package/packages/pi/dist/policy-head-tool.js.map +1 -0
- package/packages/pi/dist/portfolio-bridge.d.ts +12 -0
- package/packages/pi/dist/portfolio-bridge.d.ts.map +1 -0
- package/packages/pi/dist/portfolio-bridge.js +81 -0
- package/packages/pi/dist/portfolio-bridge.js.map +1 -0
- package/packages/pi/dist/service-skills.d.ts +15 -0
- package/packages/pi/dist/service-skills.d.ts.map +1 -0
- package/packages/pi/dist/service-skills.js +198 -0
- package/packages/pi/dist/service-skills.js.map +1 -0
- package/packages/pi/dist/session.d.ts +28 -0
- package/packages/pi/dist/session.d.ts.map +1 -0
- package/packages/pi/dist/session.js +649 -0
- package/packages/pi/dist/session.js.map +1 -0
- package/packages/pi/dist/shortcuts.d.ts +11 -0
- package/packages/pi/dist/shortcuts.d.ts.map +1 -0
- package/packages/pi/dist/shortcuts.js +231 -0
- package/packages/pi/dist/shortcuts.js.map +1 -0
- package/packages/pi/dist/startup-briefing.d.ts +13 -0
- package/packages/pi/dist/startup-briefing.d.ts.map +1 -0
- package/packages/pi/dist/startup-briefing.js +432 -0
- package/packages/pi/dist/startup-briefing.js.map +1 -0
- package/packages/pi/dist/stratus-bridge.d.ts +14 -0
- package/packages/pi/dist/stratus-bridge.d.ts.map +1 -0
- package/packages/pi/dist/stratus-bridge.js +104 -0
- package/packages/pi/dist/stratus-bridge.js.map +1 -0
- package/packages/pi/dist/subway-mesh.d.ts +88 -0
- package/packages/pi/dist/subway-mesh.d.ts.map +1 -0
- package/packages/pi/dist/subway-mesh.js +813 -0
- package/packages/pi/dist/subway-mesh.js.map +1 -0
- package/packages/pi/dist/synopsis-tool.d.ts +12 -0
- package/packages/pi/dist/synopsis-tool.d.ts.map +1 -0
- package/packages/pi/dist/synopsis-tool.js +84 -0
- package/packages/pi/dist/synopsis-tool.js.map +1 -0
- package/packages/pi/dist/tool-renderers.d.ts +55 -0
- package/packages/pi/dist/tool-renderers.d.ts.map +1 -0
- package/packages/pi/dist/tool-renderers.js +349 -0
- package/packages/pi/dist/tool-renderers.js.map +1 -0
- package/packages/pi/dist/training-buffer-tool.d.ts +16 -0
- package/packages/pi/dist/training-buffer-tool.d.ts.map +1 -0
- package/packages/pi/dist/training-buffer-tool.js +319 -0
- package/packages/pi/dist/training-buffer-tool.js.map +1 -0
- package/packages/pi/dist/types.d.ts +195 -0
- package/packages/pi/dist/types.d.ts.map +1 -0
- package/packages/pi/dist/types.js +11 -0
- package/packages/pi/dist/types.js.map +1 -0
- package/packages/pi/extensions/agent-grid.ts +191 -0
- package/packages/pi/extensions/agent-names.ts +178 -0
- package/packages/pi/extensions/autoresearch.ts +428 -0
- package/packages/pi/extensions/bookmarks.ts +85 -0
- package/packages/pi/extensions/context.ts +158 -0
- package/packages/pi/extensions/crm-tool.ts +61 -0
- package/packages/pi/extensions/eval-tool.ts +224 -0
- package/packages/pi/extensions/eval.ts +61 -0
- package/packages/pi/extensions/footer.ts +239 -0
- package/packages/pi/extensions/header.ts +171 -0
- package/packages/pi/extensions/hub-resolver.ts +63 -0
- package/packages/pi/extensions/hub-tools.ts +267 -0
- package/packages/pi/extensions/hud-tool.ts +294 -0
- package/packages/pi/extensions/index.ts +601 -0
- package/packages/pi/extensions/jfl-resolve.ts +98 -0
- package/packages/pi/extensions/journal.ts +309 -0
- package/packages/pi/extensions/map-bridge.ts +209 -0
- package/packages/pi/extensions/memory-tool.ts +170 -0
- package/packages/pi/extensions/notifications.ts +73 -0
- package/packages/pi/extensions/onboarding-v1.ts +455 -0
- package/packages/pi/extensions/onboarding-v2.ts +374 -0
- package/packages/pi/extensions/onboarding-v3.ts +686 -0
- package/packages/pi/extensions/peter-parker.ts +203 -0
- package/packages/pi/extensions/pivot-tool.ts +59 -0
- package/packages/pi/extensions/policy-head-tool.ts +277 -0
- package/packages/pi/extensions/portfolio-bridge.ts +89 -0
- package/packages/pi/extensions/service-skills.ts +219 -0
- package/packages/pi/extensions/session.ts +684 -0
- package/packages/pi/extensions/shortcuts.ts +259 -0
- package/packages/pi/extensions/startup-briefing.ts +482 -0
- package/packages/pi/extensions/stratus-bridge.ts +116 -0
- package/packages/pi/extensions/subway-mesh.ts +893 -0
- package/packages/pi/extensions/synopsis-tool.ts +88 -0
- package/packages/pi/extensions/tool-renderers.ts +366 -0
- package/packages/pi/extensions/training-buffer-tool.ts +376 -0
- package/packages/pi/extensions/types.ts +169 -0
- package/packages/pi/package-lock.json +346 -0
- package/packages/pi/package.json +42 -0
- package/packages/pi/skills/agent-browser/SKILL.md +116 -0
- package/packages/pi/skills/brand-architect/SKILL.md +240 -0
- package/packages/pi/skills/brand-architect/config.yaml +137 -0
- package/packages/pi/skills/campaign-hud/config.yaml +112 -0
- package/packages/pi/skills/content-creator/SKILL.md +294 -0
- package/packages/pi/skills/context/SKILL.md +65 -0
- package/packages/pi/skills/debug/MULTI_AGENT.md +360 -0
- package/packages/pi/skills/debug/SKILL.md +554 -0
- package/packages/pi/skills/end/SKILL.md +1790 -0
- package/packages/pi/skills/eval/SKILL.md +75 -0
- package/packages/pi/skills/fly-deploy/SKILL.md +676 -0
- package/packages/pi/skills/founder-video/SKILL.md +467 -0
- package/packages/pi/skills/hud/SKILL.md +160 -0
- package/packages/pi/skills/orchestrate/SKILL.md +74 -0
- package/packages/pi/skills/pi-agents/SKILL.md +78 -0
- package/packages/pi/skills/pivot/SKILL.md +91 -0
- package/packages/pi/skills/react-best-practices/AGENTS.md +2249 -0
- package/packages/pi/skills/react-best-practices/README.md +123 -0
- package/packages/pi/skills/react-best-practices/SKILL.md +125 -0
- package/packages/pi/skills/react-best-practices/metadata.json +15 -0
- package/packages/pi/skills/react-best-practices/rules/_sections.md +46 -0
- package/packages/pi/skills/react-best-practices/rules/_template.md +28 -0
- package/packages/pi/skills/react-best-practices/rules/advanced-event-handler-refs.md +55 -0
- package/packages/pi/skills/react-best-practices/rules/advanced-use-latest.md +49 -0
- package/packages/pi/skills/react-best-practices/rules/async-api-routes.md +38 -0
- package/packages/pi/skills/react-best-practices/rules/async-defer-await.md +80 -0
- package/packages/pi/skills/react-best-practices/rules/async-dependencies.md +36 -0
- package/packages/pi/skills/react-best-practices/rules/async-parallel.md +28 -0
- package/packages/pi/skills/react-best-practices/rules/async-suspense-boundaries.md +99 -0
- package/packages/pi/skills/react-best-practices/rules/bundle-barrel-imports.md +59 -0
- package/packages/pi/skills/react-best-practices/rules/bundle-conditional.md +31 -0
- package/packages/pi/skills/react-best-practices/rules/bundle-defer-third-party.md +49 -0
- package/packages/pi/skills/react-best-practices/rules/bundle-dynamic-imports.md +35 -0
- package/packages/pi/skills/react-best-practices/rules/bundle-preload.md +50 -0
- package/packages/pi/skills/react-best-practices/rules/client-event-listeners.md +74 -0
- package/packages/pi/skills/react-best-practices/rules/client-swr-dedup.md +56 -0
- package/packages/pi/skills/react-best-practices/rules/js-batch-dom-css.md +82 -0
- package/packages/pi/skills/react-best-practices/rules/js-cache-function-results.md +80 -0
- package/packages/pi/skills/react-best-practices/rules/js-cache-property-access.md +28 -0
- package/packages/pi/skills/react-best-practices/rules/js-cache-storage.md +70 -0
- package/packages/pi/skills/react-best-practices/rules/js-combine-iterations.md +32 -0
- package/packages/pi/skills/react-best-practices/rules/js-early-exit.md +50 -0
- package/packages/pi/skills/react-best-practices/rules/js-hoist-regexp.md +45 -0
- package/packages/pi/skills/react-best-practices/rules/js-index-maps.md +37 -0
- package/packages/pi/skills/react-best-practices/rules/js-length-check-first.md +49 -0
- package/packages/pi/skills/react-best-practices/rules/js-min-max-loop.md +82 -0
- package/packages/pi/skills/react-best-practices/rules/js-set-map-lookups.md +24 -0
- package/packages/pi/skills/react-best-practices/rules/js-tosorted-immutable.md +57 -0
- package/packages/pi/skills/react-best-practices/rules/rendering-activity.md +26 -0
- package/packages/pi/skills/react-best-practices/rules/rendering-animate-svg-wrapper.md +47 -0
- package/packages/pi/skills/react-best-practices/rules/rendering-conditional-render.md +40 -0
- package/packages/pi/skills/react-best-practices/rules/rendering-content-visibility.md +38 -0
- package/packages/pi/skills/react-best-practices/rules/rendering-hoist-jsx.md +46 -0
- package/packages/pi/skills/react-best-practices/rules/rendering-hydration-no-flicker.md +82 -0
- package/packages/pi/skills/react-best-practices/rules/rendering-svg-precision.md +28 -0
- package/packages/pi/skills/react-best-practices/rules/rerender-defer-reads.md +39 -0
- package/packages/pi/skills/react-best-practices/rules/rerender-dependencies.md +45 -0
- package/packages/pi/skills/react-best-practices/rules/rerender-derived-state.md +29 -0
- package/packages/pi/skills/react-best-practices/rules/rerender-functional-setstate.md +74 -0
- package/packages/pi/skills/react-best-practices/rules/rerender-lazy-state-init.md +58 -0
- package/packages/pi/skills/react-best-practices/rules/rerender-memo.md +44 -0
- package/packages/pi/skills/react-best-practices/rules/rerender-transitions.md +40 -0
- package/packages/pi/skills/react-best-practices/rules/server-after-nonblocking.md +73 -0
- package/packages/pi/skills/react-best-practices/rules/server-cache-lru.md +41 -0
- package/packages/pi/skills/react-best-practices/rules/server-cache-react.md +26 -0
- package/packages/pi/skills/react-best-practices/rules/server-parallel-fetching.md +79 -0
- package/packages/pi/skills/react-best-practices/rules/server-serialization.md +38 -0
- package/packages/pi/skills/remotion-best-practices/SKILL.md +43 -0
- package/packages/pi/skills/remotion-best-practices/rules/3d.md +86 -0
- package/packages/pi/skills/remotion-best-practices/rules/animations.md +29 -0
- package/packages/pi/skills/remotion-best-practices/rules/assets/charts-bar-chart.tsx +173 -0
- package/packages/pi/skills/remotion-best-practices/rules/assets/text-animations-typewriter.tsx +100 -0
- package/packages/pi/skills/remotion-best-practices/rules/assets/text-animations-word-highlight.tsx +108 -0
- package/packages/pi/skills/remotion-best-practices/rules/assets.md +78 -0
- package/packages/pi/skills/remotion-best-practices/rules/audio.md +172 -0
- package/packages/pi/skills/remotion-best-practices/rules/calculate-metadata.md +104 -0
- package/packages/pi/skills/remotion-best-practices/rules/can-decode.md +75 -0
- package/packages/pi/skills/remotion-best-practices/rules/charts.md +58 -0
- package/packages/pi/skills/remotion-best-practices/rules/compositions.md +146 -0
- package/packages/pi/skills/remotion-best-practices/rules/display-captions.md +126 -0
- package/packages/pi/skills/remotion-best-practices/rules/extract-frames.md +229 -0
- package/packages/pi/skills/remotion-best-practices/rules/fonts.md +152 -0
- package/packages/pi/skills/remotion-best-practices/rules/get-audio-duration.md +58 -0
- package/packages/pi/skills/remotion-best-practices/rules/get-video-dimensions.md +68 -0
- package/packages/pi/skills/remotion-best-practices/rules/get-video-duration.md +58 -0
- package/packages/pi/skills/remotion-best-practices/rules/gifs.md +138 -0
- package/packages/pi/skills/remotion-best-practices/rules/images.md +130 -0
- package/packages/pi/skills/remotion-best-practices/rules/import-srt-captions.md +67 -0
- package/packages/pi/skills/remotion-best-practices/rules/lottie.md +68 -0
- package/packages/pi/skills/remotion-best-practices/rules/measuring-dom-nodes.md +35 -0
- package/packages/pi/skills/remotion-best-practices/rules/measuring-text.md +143 -0
- package/packages/pi/skills/remotion-best-practices/rules/sequencing.md +106 -0
- package/packages/pi/skills/remotion-best-practices/rules/tailwind.md +11 -0
- package/packages/pi/skills/remotion-best-practices/rules/text-animations.md +20 -0
- package/packages/pi/skills/remotion-best-practices/rules/timing.md +179 -0
- package/packages/pi/skills/remotion-best-practices/rules/transcribe-captions.md +19 -0
- package/packages/pi/skills/remotion-best-practices/rules/transitions.md +122 -0
- package/packages/pi/skills/remotion-best-practices/rules/trimming.md +53 -0
- package/packages/pi/skills/remotion-best-practices/rules/videos.md +171 -0
- package/packages/pi/skills/search/SKILL.md +220 -0
- package/packages/pi/skills/spec/SKILL.md +377 -0
- package/packages/pi/skills/startup/SKILL.md +315 -0
- package/packages/pi/skills/subway-browser/SKILL.md +292 -0
- package/packages/pi/skills/viz/SKILL.md +204 -0
- package/packages/pi/skills/web-architect/SKILL.md +309 -0
- package/packages/pi/skills/x-algorithm/SKILL.md +305 -0
- package/packages/pi/teams/dev-team.yaml +63 -0
- package/packages/pi/teams/gtm-team.yaml +79 -0
- package/packages/pi/themes/jfl.theme.json +76 -0
- package/packages/pi/tsconfig.json +21 -0
- package/scripts/__pycache__/train-policy-head.cpython-314.pyc +0 -0
- package/scripts/collect-tuples.sh +124 -0
- package/scripts/commit-gtm.sh +56 -0
- package/scripts/commit-product.sh +68 -0
- package/scripts/context-query.sh +45 -0
- package/scripts/destroy-fleet.sh +37 -0
- package/scripts/generate-changesets.sh +113 -0
- package/scripts/jfl-ide.sh +48 -0
- package/scripts/migrate-to-branch-sessions.sh +201 -0
- package/scripts/postinstall.js +146 -0
- package/scripts/pp-branch-pr.sh +133 -0
- package/scripts/pp-branch-pr.sh.bak +115 -0
- package/scripts/session/auto-commit.sh +297 -0
- package/scripts/session/fix-tracked-logs.sh +97 -0
- package/scripts/session/jfl-doctor.sh +707 -0
- package/scripts/session/session-cleanup.sh +292 -0
- package/scripts/session/session-end.sh +198 -0
- package/scripts/session/session-init.sh +356 -0
- package/scripts/session/session-init.sh.backup +292 -0
- package/scripts/session/session-sync.sh +192 -0
- package/scripts/session/test-context-preservation.sh +160 -0
- package/scripts/session/test-critical-infrastructure.sh +293 -0
- package/scripts/session/test-experience-level.sh +336 -0
- package/scripts/session/test-session-cleanup.sh +268 -0
- package/scripts/session/test-session-sync.sh +320 -0
- package/scripts/setup-branch-protection.sh +106 -0
- package/scripts/spawn-fleet.sh +144 -0
- package/scripts/telemetry-dashboard.sh +44 -0
- package/scripts/test-map-eventbus.sh +357 -0
- package/scripts/test-onboarding.sh +121 -0
- package/scripts/test-planning-loop-e2e.ts +181 -0
- package/scripts/test-server-inference.ts +49 -0
- package/scripts/test-state-sensitivity.ts +32 -0
- package/scripts/train/requirements.txt +5 -0
- package/scripts/train/train-policy-head.py +477 -0
- package/scripts/train/v2/__pycache__/dataset.cpython-314.pyc +0 -0
- package/scripts/train/v2/__pycache__/eval.cpython-314.pyc +0 -0
- package/scripts/train/v2/__pycache__/generate_data.cpython-314.pyc +0 -0
- package/scripts/train/v2/__pycache__/infer.cpython-314.pyc +0 -0
- package/scripts/train/v2/__pycache__/model.cpython-314.pyc +0 -0
- package/scripts/train/v2/__pycache__/precompute.cpython-314.pyc +0 -0
- package/scripts/train/v2/__pycache__/train.cpython-314.pyc +0 -0
- package/scripts/train/v2/__pycache__/transform_buffer.cpython-314.pyc +0 -0
- package/scripts/train/v2/__pycache__/validate_data.cpython-314.pyc +0 -0
- package/scripts/train/v2/benchmark.py +661 -0
- package/scripts/train/v2/dataset.py +81 -0
- package/scripts/train/v2/domain.json +66 -0
- package/scripts/train/v2/eval.py +196 -0
- package/scripts/train/v2/generate_balanced.py +439 -0
- package/scripts/train/v2/generate_data.py +219 -0
- package/scripts/train/v2/generate_hard_negatives.py +219 -0
- package/scripts/train/v2/infer.py +301 -0
- package/scripts/train/v2/infer_server.py +224 -0
- package/scripts/train/v2/model.py +112 -0
- package/scripts/train/v2/online_train.py +576 -0
- package/scripts/train/v2/precompute.py +150 -0
- package/scripts/train/v2/train.py +302 -0
- package/scripts/train/v2/transform_buffer.py +227 -0
- package/scripts/train/v2/validate_data.py +115 -0
- package/scripts/train-policy-head.py +434 -0
- package/scripts/vm-swarm/README.md +301 -0
- package/scripts/vm-swarm/collect-tuples.sh +331 -0
- package/scripts/vm-swarm/create-base-template.sh +339 -0
- package/scripts/vm-swarm/kill-fleet.sh +204 -0
- package/scripts/vm-swarm/monitor-fleet.sh +346 -0
- package/scripts/vm-swarm/spawn-fleet.sh +304 -0
- package/scripts/voice-start.sh +156 -0
- package/scripts/voice-stop.sh +33 -0
- package/scripts/where-am-i.sh +78 -0
- package/templates/QUICKSTART_SKILL_TO_PRODUCT.md +242 -0
- package/templates/brand/BRAND_BRIEF.md +124 -0
- package/templates/brand/BRAND_DECISIONS.md +168 -0
- package/templates/brand/BRAND_GUIDELINES.md +251 -0
- package/templates/brand/VOICE_AND_TONE.md +146 -0
- package/templates/brand/global.css +240 -0
- package/templates/collaboration/CONTRIBUTOR.md +74 -0
- package/templates/collaboration/CRM.md +97 -0
- package/templates/collaboration/TASKS.md +83 -0
- package/templates/dating/FUNNEL.md +29 -0
- package/templates/dating/REWARDS.md +24 -0
- package/templates/dating/SIGNALS.md +18 -0
- package/templates/dating/anti_patterns.md +23 -0
- package/templates/dating/connectors/index.md +16 -0
- package/templates/dating/modes.md +21 -0
- package/templates/dating/psychology.md +18 -0
- package/templates/default/README.md +19 -0
- package/templates/service-agent/.claude/settings.json +32 -0
- package/templates/service-agent/CLAUDE.md +334 -0
- package/templates/service-agent/knowledge/ARCHITECTURE.md +115 -0
- package/templates/service-agent/knowledge/DEPLOYMENT.md +199 -0
- package/templates/service-agent/knowledge/RUNBOOK.md +412 -0
- package/templates/service-agent/knowledge/SERVICE_SPEC.md +77 -0
- package/templates/service-mcp-template.js +325 -0
- package/templates/strategic/NARRATIVE.md +114 -0
- package/templates/strategic/ROADMAP.md +128 -0
- package/templates/strategic/THESIS.md +108 -0
- package/templates/strategic/VISION.md +74 -0
|
@@ -0,0 +1,1800 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Services Create Command
|
|
3
|
+
*
|
|
4
|
+
* Create new service with AI assistance and automatic GTM integration
|
|
5
|
+
*
|
|
6
|
+
* @purpose Create new services with wizard, templates, and AI assistance
|
|
7
|
+
*/
|
|
8
|
+
import * as p from "@clack/prompts";
|
|
9
|
+
import chalk from "chalk";
|
|
10
|
+
import { existsSync, mkdirSync, writeFileSync } from "fs";
|
|
11
|
+
import { join } from "path";
|
|
12
|
+
import { spawn } from "child_process";
|
|
13
|
+
import { getCodeDirectory } from "../utils/jfl-config.js";
|
|
14
|
+
import { onboardCommand } from "./onboard.js";
|
|
15
|
+
import { execSync } from "child_process";
|
|
16
|
+
// ============================================================================
|
|
17
|
+
// Main Command
|
|
18
|
+
// ============================================================================
|
|
19
|
+
export async function servicesCreateCommand(options = {}) {
|
|
20
|
+
console.log();
|
|
21
|
+
p.intro(chalk.cyan("JFL - Create Service"));
|
|
22
|
+
try {
|
|
23
|
+
// Step 1: Collect service metadata
|
|
24
|
+
const metadata = await collectServiceMetadata(options);
|
|
25
|
+
if (!metadata) {
|
|
26
|
+
p.cancel("Service creation cancelled");
|
|
27
|
+
process.exit(0);
|
|
28
|
+
}
|
|
29
|
+
const { name, type, description, location } = metadata;
|
|
30
|
+
// Step 2: Check if directory exists
|
|
31
|
+
if (existsSync(location)) {
|
|
32
|
+
const overwrite = await p.confirm({
|
|
33
|
+
message: `Directory ${location} already exists. Overwrite?`,
|
|
34
|
+
initialValue: false,
|
|
35
|
+
});
|
|
36
|
+
if (p.isCancel(overwrite) || !overwrite) {
|
|
37
|
+
p.cancel("Service creation cancelled");
|
|
38
|
+
process.exit(0);
|
|
39
|
+
}
|
|
40
|
+
}
|
|
41
|
+
// Step 3: Choose AI tool (unless --skip-ai)
|
|
42
|
+
let aiTool = null;
|
|
43
|
+
if (!options.skipAI) {
|
|
44
|
+
const tools = getAvailableAITools();
|
|
45
|
+
if (tools.length === 0) {
|
|
46
|
+
console.log(chalk.yellow("\n⚠️ No AI tools detected"));
|
|
47
|
+
console.log(chalk.gray(" Install Claude Code: npm install -g @anthropic-ai/claude-code"));
|
|
48
|
+
console.log(chalk.gray(" Install Ralph: bun install -g ralph-tui\n"));
|
|
49
|
+
}
|
|
50
|
+
else {
|
|
51
|
+
aiTool = await p.select({
|
|
52
|
+
message: "Build with AI assistance?",
|
|
53
|
+
options: [
|
|
54
|
+
...tools.map(tool => ({
|
|
55
|
+
value: tool,
|
|
56
|
+
label: getToolLabel(tool),
|
|
57
|
+
hint: getToolHint(tool),
|
|
58
|
+
})),
|
|
59
|
+
{
|
|
60
|
+
value: "skip",
|
|
61
|
+
label: "Skip (just scaffold, I'll build manually)",
|
|
62
|
+
},
|
|
63
|
+
],
|
|
64
|
+
});
|
|
65
|
+
if (p.isCancel(aiTool)) {
|
|
66
|
+
p.cancel("Service creation cancelled");
|
|
67
|
+
process.exit(0);
|
|
68
|
+
}
|
|
69
|
+
if (aiTool === "skip") {
|
|
70
|
+
aiTool = null;
|
|
71
|
+
}
|
|
72
|
+
}
|
|
73
|
+
}
|
|
74
|
+
// Step 4: Confirm creation
|
|
75
|
+
const confirmed = await confirmCreation(name, type, description, location, aiTool);
|
|
76
|
+
if (!confirmed) {
|
|
77
|
+
p.cancel("Service creation cancelled");
|
|
78
|
+
process.exit(0);
|
|
79
|
+
}
|
|
80
|
+
// Step 5: Scaffold service
|
|
81
|
+
const spinner = p.spinner();
|
|
82
|
+
spinner.start("Creating service...");
|
|
83
|
+
await scaffoldService(location, name, type, description);
|
|
84
|
+
spinner.stop("✓ Service scaffolded");
|
|
85
|
+
// Step 6: Launch AI tool if selected
|
|
86
|
+
if (aiTool) {
|
|
87
|
+
await launchAITool(aiTool, location, name, type, description);
|
|
88
|
+
}
|
|
89
|
+
else {
|
|
90
|
+
showManualNextSteps(location, name);
|
|
91
|
+
}
|
|
92
|
+
p.outro(chalk.green("Service created successfully! 🚀"));
|
|
93
|
+
}
|
|
94
|
+
catch (error) {
|
|
95
|
+
p.cancel(chalk.red(`Error: ${error.message}`));
|
|
96
|
+
process.exit(1);
|
|
97
|
+
}
|
|
98
|
+
}
|
|
99
|
+
// ============================================================================
|
|
100
|
+
// Metadata Collection
|
|
101
|
+
// ============================================================================
|
|
102
|
+
async function collectServiceMetadata(options) {
|
|
103
|
+
// Service name
|
|
104
|
+
let name = options.name;
|
|
105
|
+
if (!name) {
|
|
106
|
+
name = await p.text({
|
|
107
|
+
message: "Service name?",
|
|
108
|
+
placeholder: "my-new-service",
|
|
109
|
+
validate: (value) => {
|
|
110
|
+
const error = validateServiceName(value);
|
|
111
|
+
return error || undefined;
|
|
112
|
+
},
|
|
113
|
+
});
|
|
114
|
+
if (p.isCancel(name)) {
|
|
115
|
+
return null;
|
|
116
|
+
}
|
|
117
|
+
}
|
|
118
|
+
else {
|
|
119
|
+
const error = validateServiceName(name);
|
|
120
|
+
if (error) {
|
|
121
|
+
throw new Error(error);
|
|
122
|
+
}
|
|
123
|
+
}
|
|
124
|
+
// Service type
|
|
125
|
+
let type = options.type;
|
|
126
|
+
if (!type) {
|
|
127
|
+
type = await p.select({
|
|
128
|
+
message: "Service type?",
|
|
129
|
+
options: [
|
|
130
|
+
{ value: "api", label: "API - REST/GraphQL service" },
|
|
131
|
+
{ value: "web", label: "Web - Frontend application" },
|
|
132
|
+
{ value: "worker", label: "Worker - Background jobs/queue" },
|
|
133
|
+
{ value: "cli", label: "CLI - Command-line tool" },
|
|
134
|
+
{ value: "infrastructure", label: "Infrastructure - Database, cache, etc." },
|
|
135
|
+
{ value: "container", label: "Container - Docker service" },
|
|
136
|
+
{ value: "agent", label: "Agent - Autonomous AI agent with eval loop" },
|
|
137
|
+
],
|
|
138
|
+
});
|
|
139
|
+
if (p.isCancel(type)) {
|
|
140
|
+
return null;
|
|
141
|
+
}
|
|
142
|
+
}
|
|
143
|
+
// Description
|
|
144
|
+
let description = options.description;
|
|
145
|
+
if (!description) {
|
|
146
|
+
description = await p.text({
|
|
147
|
+
message: "Description?",
|
|
148
|
+
placeholder: "What does this service do?",
|
|
149
|
+
validate: (value) => {
|
|
150
|
+
if (!value.trim()) {
|
|
151
|
+
return "Description required";
|
|
152
|
+
}
|
|
153
|
+
},
|
|
154
|
+
});
|
|
155
|
+
if (p.isCancel(description)) {
|
|
156
|
+
return null;
|
|
157
|
+
}
|
|
158
|
+
}
|
|
159
|
+
// Location
|
|
160
|
+
const codeDir = await getCodeDirectory();
|
|
161
|
+
const defaultLocation = join(codeDir, name);
|
|
162
|
+
const location = await p.text({
|
|
163
|
+
message: "Where to create?",
|
|
164
|
+
placeholder: defaultLocation,
|
|
165
|
+
initialValue: defaultLocation,
|
|
166
|
+
});
|
|
167
|
+
if (p.isCancel(location)) {
|
|
168
|
+
return null;
|
|
169
|
+
}
|
|
170
|
+
return { name, type, description, location };
|
|
171
|
+
}
|
|
172
|
+
// ============================================================================
|
|
173
|
+
// Validation
|
|
174
|
+
// ============================================================================
|
|
175
|
+
function validateServiceName(name) {
|
|
176
|
+
if (!name || !name.trim()) {
|
|
177
|
+
return "Service name required";
|
|
178
|
+
}
|
|
179
|
+
// Must be lowercase with hyphens
|
|
180
|
+
if (!/^[a-z0-9-]+$/.test(name)) {
|
|
181
|
+
return "Service name must be lowercase letters, numbers, and hyphens only";
|
|
182
|
+
}
|
|
183
|
+
// Can't start or end with hyphen
|
|
184
|
+
if (name.startsWith("-") || name.endsWith("-")) {
|
|
185
|
+
return "Service name can't start or end with hyphen";
|
|
186
|
+
}
|
|
187
|
+
// No consecutive hyphens
|
|
188
|
+
if (name.includes("--")) {
|
|
189
|
+
return "Service name can't have consecutive hyphens";
|
|
190
|
+
}
|
|
191
|
+
return undefined;
|
|
192
|
+
}
|
|
193
|
+
// ============================================================================
|
|
194
|
+
// AI Tool Detection
|
|
195
|
+
// ============================================================================
|
|
196
|
+
function getAvailableAITools() {
|
|
197
|
+
const tools = [];
|
|
198
|
+
if (hasClaudeCLI()) {
|
|
199
|
+
tools.push("claude");
|
|
200
|
+
}
|
|
201
|
+
if (hasRalphTui()) {
|
|
202
|
+
tools.push("ralph");
|
|
203
|
+
}
|
|
204
|
+
return tools;
|
|
205
|
+
}
|
|
206
|
+
function hasClaudeCLI() {
|
|
207
|
+
try {
|
|
208
|
+
execSync("which claude", { stdio: "ignore" });
|
|
209
|
+
return true;
|
|
210
|
+
}
|
|
211
|
+
catch {
|
|
212
|
+
return false;
|
|
213
|
+
}
|
|
214
|
+
}
|
|
215
|
+
function hasRalphTui() {
|
|
216
|
+
try {
|
|
217
|
+
execSync("which ralph-tui", { stdio: "ignore" });
|
|
218
|
+
return true;
|
|
219
|
+
}
|
|
220
|
+
catch {
|
|
221
|
+
return false;
|
|
222
|
+
}
|
|
223
|
+
}
|
|
224
|
+
function getToolLabel(tool) {
|
|
225
|
+
switch (tool) {
|
|
226
|
+
case "claude":
|
|
227
|
+
return "Claude Code (collaborative, recommended)";
|
|
228
|
+
case "ralph":
|
|
229
|
+
return "Ralph (autonomous agent loop)";
|
|
230
|
+
default:
|
|
231
|
+
return tool;
|
|
232
|
+
}
|
|
233
|
+
}
|
|
234
|
+
function getToolHint(tool) {
|
|
235
|
+
switch (tool) {
|
|
236
|
+
case "claude":
|
|
237
|
+
return "Interactive AI pair programming";
|
|
238
|
+
case "ralph":
|
|
239
|
+
return "Autonomous loop until complete";
|
|
240
|
+
default:
|
|
241
|
+
return "";
|
|
242
|
+
}
|
|
243
|
+
}
|
|
244
|
+
// ============================================================================
|
|
245
|
+
// Confirmation
|
|
246
|
+
// ============================================================================
|
|
247
|
+
async function confirmCreation(name, type, description, location, aiTool) {
|
|
248
|
+
console.log();
|
|
249
|
+
console.log(chalk.cyan("Ready to create:"));
|
|
250
|
+
console.log(chalk.gray(` Name: ${name}`));
|
|
251
|
+
console.log(chalk.gray(` Type: ${type}`));
|
|
252
|
+
console.log(chalk.gray(` Description: ${description}`));
|
|
253
|
+
console.log(chalk.gray(` Location: ${location}`));
|
|
254
|
+
console.log(chalk.gray(` AI Tool: ${aiTool || "None (manual)"}`));
|
|
255
|
+
console.log();
|
|
256
|
+
const confirmed = await p.confirm({
|
|
257
|
+
message: "Create this service?",
|
|
258
|
+
initialValue: true,
|
|
259
|
+
});
|
|
260
|
+
return !p.isCancel(confirmed) && confirmed;
|
|
261
|
+
}
|
|
262
|
+
// ============================================================================
|
|
263
|
+
// Service Scaffolding
|
|
264
|
+
// ============================================================================
|
|
265
|
+
async function scaffoldService(servicePath, serviceName, serviceType, description) {
|
|
266
|
+
// Create base directories
|
|
267
|
+
mkdirSync(servicePath, { recursive: true });
|
|
268
|
+
mkdirSync(join(servicePath, ".jfl", "journal"), { recursive: true });
|
|
269
|
+
mkdirSync(join(servicePath, ".jfl", "logs"), { recursive: true });
|
|
270
|
+
mkdirSync(join(servicePath, ".claude", "agents"), { recursive: true });
|
|
271
|
+
mkdirSync(join(servicePath, ".claude", "skills"), { recursive: true });
|
|
272
|
+
mkdirSync(join(servicePath, "knowledge"), { recursive: true });
|
|
273
|
+
// Get template for service type
|
|
274
|
+
const template = getServiceTemplate(serviceType, serviceName, description);
|
|
275
|
+
// Write all template files
|
|
276
|
+
for (const file of template.files) {
|
|
277
|
+
const filePath = join(servicePath, file.path);
|
|
278
|
+
const fileDir = join(filePath, "..");
|
|
279
|
+
mkdirSync(fileDir, { recursive: true });
|
|
280
|
+
writeFileSync(filePath, file.content);
|
|
281
|
+
}
|
|
282
|
+
// Write CLAUDE.md with service-specific instructions
|
|
283
|
+
const claudeMd = generateClaudeMd(serviceName, serviceType, description, template.instructions);
|
|
284
|
+
writeFileSync(join(servicePath, "CLAUDE.md"), claudeMd);
|
|
285
|
+
// Write base .gitignore
|
|
286
|
+
const gitignore = generateGitignore(serviceType);
|
|
287
|
+
writeFileSync(join(servicePath, ".gitignore"), gitignore);
|
|
288
|
+
// Initialize git
|
|
289
|
+
try {
|
|
290
|
+
execSync("git init", { cwd: servicePath, stdio: "ignore" });
|
|
291
|
+
execSync("git add .", { cwd: servicePath, stdio: "ignore" });
|
|
292
|
+
execSync(`git commit -m "Initial commit: scaffolded ${serviceType} service"`, {
|
|
293
|
+
cwd: servicePath,
|
|
294
|
+
stdio: "ignore",
|
|
295
|
+
});
|
|
296
|
+
}
|
|
297
|
+
catch (error) {
|
|
298
|
+
// Git init failed - not critical
|
|
299
|
+
console.log(chalk.yellow("⚠️ Git initialization failed (not critical)"));
|
|
300
|
+
}
|
|
301
|
+
}
|
|
302
|
+
// ============================================================================
|
|
303
|
+
// Service Templates
|
|
304
|
+
// ============================================================================
|
|
305
|
+
function getServiceTemplate(type, name, description) {
|
|
306
|
+
switch (type) {
|
|
307
|
+
case "api":
|
|
308
|
+
return getAPITemplate(name, description);
|
|
309
|
+
case "web":
|
|
310
|
+
return getWebTemplate(name, description);
|
|
311
|
+
case "worker":
|
|
312
|
+
return getWorkerTemplate(name, description);
|
|
313
|
+
case "cli":
|
|
314
|
+
return getCLITemplate(name, description);
|
|
315
|
+
case "infrastructure":
|
|
316
|
+
return getInfrastructureTemplate(name, description);
|
|
317
|
+
case "container":
|
|
318
|
+
return getContainerTemplate(name, description);
|
|
319
|
+
case "agent":
|
|
320
|
+
return getAgentTemplate(name, description);
|
|
321
|
+
default:
|
|
322
|
+
throw new Error(`Unknown service type: ${type}`);
|
|
323
|
+
}
|
|
324
|
+
}
|
|
325
|
+
function getAPITemplate(name, description) {
|
|
326
|
+
return {
|
|
327
|
+
files: [
|
|
328
|
+
{
|
|
329
|
+
path: "package.json",
|
|
330
|
+
content: JSON.stringify({
|
|
331
|
+
name,
|
|
332
|
+
version: "0.1.0",
|
|
333
|
+
description,
|
|
334
|
+
type: "module",
|
|
335
|
+
scripts: {
|
|
336
|
+
dev: "tsx watch src/index.ts",
|
|
337
|
+
build: "tsc",
|
|
338
|
+
start: "node dist/index.js",
|
|
339
|
+
test: "vitest",
|
|
340
|
+
},
|
|
341
|
+
dependencies: {
|
|
342
|
+
fastify: "^4.26.0",
|
|
343
|
+
"@fastify/cors": "^9.0.1",
|
|
344
|
+
pino: "^8.19.0",
|
|
345
|
+
},
|
|
346
|
+
devDependencies: {
|
|
347
|
+
typescript: "^5.3.3",
|
|
348
|
+
tsx: "^4.7.1",
|
|
349
|
+
vitest: "^1.3.1",
|
|
350
|
+
"@types/node": "^20.11.17",
|
|
351
|
+
},
|
|
352
|
+
}, null, 2),
|
|
353
|
+
},
|
|
354
|
+
{
|
|
355
|
+
path: "tsconfig.json",
|
|
356
|
+
content: JSON.stringify({
|
|
357
|
+
compilerOptions: {
|
|
358
|
+
target: "ES2022",
|
|
359
|
+
module: "ES2022",
|
|
360
|
+
moduleResolution: "node",
|
|
361
|
+
outDir: "./dist",
|
|
362
|
+
rootDir: "./src",
|
|
363
|
+
strict: true,
|
|
364
|
+
esModuleInterop: true,
|
|
365
|
+
skipLibCheck: true,
|
|
366
|
+
forceConsistentCasingInFileNames: true,
|
|
367
|
+
},
|
|
368
|
+
include: ["src/**/*"],
|
|
369
|
+
exclude: ["node_modules", "dist"],
|
|
370
|
+
}, null, 2),
|
|
371
|
+
},
|
|
372
|
+
{
|
|
373
|
+
path: "src/index.ts",
|
|
374
|
+
content: `import Fastify from 'fastify'
|
|
375
|
+
import cors from '@fastify/cors'
|
|
376
|
+
import { healthRoutes } from './routes/health.js'
|
|
377
|
+
|
|
378
|
+
const fastify = Fastify({
|
|
379
|
+
logger: true
|
|
380
|
+
})
|
|
381
|
+
|
|
382
|
+
fastify.register(cors)
|
|
383
|
+
fastify.register(healthRoutes)
|
|
384
|
+
|
|
385
|
+
const start = async () => {
|
|
386
|
+
try {
|
|
387
|
+
const port = parseInt(process.env.PORT || '3000', 10)
|
|
388
|
+
await fastify.listen({ port, host: '0.0.0.0' })
|
|
389
|
+
console.log(\`Server running on http://localhost:\${port}\`)
|
|
390
|
+
} catch (err) {
|
|
391
|
+
fastify.log.error(err)
|
|
392
|
+
process.exit(1)
|
|
393
|
+
}
|
|
394
|
+
}
|
|
395
|
+
|
|
396
|
+
start()
|
|
397
|
+
`,
|
|
398
|
+
},
|
|
399
|
+
{
|
|
400
|
+
path: "src/routes/health.ts",
|
|
401
|
+
content: `import { FastifyInstance } from 'fastify'
|
|
402
|
+
|
|
403
|
+
export async function healthRoutes(fastify: FastifyInstance) {
|
|
404
|
+
fastify.get('/health', async () => {
|
|
405
|
+
return { status: 'ok', timestamp: new Date().toISOString() }
|
|
406
|
+
})
|
|
407
|
+
}
|
|
408
|
+
`,
|
|
409
|
+
},
|
|
410
|
+
{
|
|
411
|
+
path: ".env.example",
|
|
412
|
+
content: `PORT=3000
|
|
413
|
+
NODE_ENV=development
|
|
414
|
+
`,
|
|
415
|
+
},
|
|
416
|
+
{
|
|
417
|
+
path: "README.md",
|
|
418
|
+
content: `# ${name}
|
|
419
|
+
|
|
420
|
+
${description}
|
|
421
|
+
|
|
422
|
+
## Getting Started
|
|
423
|
+
|
|
424
|
+
\`\`\`bash
|
|
425
|
+
npm install
|
|
426
|
+
npm run dev
|
|
427
|
+
\`\`\`
|
|
428
|
+
|
|
429
|
+
## API Endpoints
|
|
430
|
+
|
|
431
|
+
- \`GET /health\` - Health check
|
|
432
|
+
|
|
433
|
+
## Environment Variables
|
|
434
|
+
|
|
435
|
+
See \`.env.example\` for required environment variables.
|
|
436
|
+
`,
|
|
437
|
+
},
|
|
438
|
+
{
|
|
439
|
+
path: "knowledge/SERVICE_SPEC.md",
|
|
440
|
+
content: `# ${name} - Service Specification
|
|
441
|
+
|
|
442
|
+
## Overview
|
|
443
|
+
|
|
444
|
+
${description}
|
|
445
|
+
|
|
446
|
+
## Responsibilities
|
|
447
|
+
|
|
448
|
+
- [ ] TODO: Define what this service is responsible for
|
|
449
|
+
|
|
450
|
+
## API Endpoints
|
|
451
|
+
|
|
452
|
+
- \`GET /health\` - Health check endpoint
|
|
453
|
+
|
|
454
|
+
## Dependencies
|
|
455
|
+
|
|
456
|
+
- None (update as you add dependencies)
|
|
457
|
+
|
|
458
|
+
## Environment Variables
|
|
459
|
+
|
|
460
|
+
- \`PORT\` - Server port (default: 3000)
|
|
461
|
+
- \`NODE_ENV\` - Environment (development/production)
|
|
462
|
+
`,
|
|
463
|
+
},
|
|
464
|
+
],
|
|
465
|
+
instructions: `This is a REST API service using Fastify and TypeScript.
|
|
466
|
+
|
|
467
|
+
## Core Features to Implement
|
|
468
|
+
- [ ] Define API routes and endpoints
|
|
469
|
+
- [ ] Add request validation
|
|
470
|
+
- [ ] Implement business logic
|
|
471
|
+
- [ ] Add error handling
|
|
472
|
+
- [ ] Write unit tests
|
|
473
|
+
|
|
474
|
+
## Technical Stack
|
|
475
|
+
- **Framework:** Fastify (fast, low-overhead web framework)
|
|
476
|
+
- **Language:** TypeScript
|
|
477
|
+
- **Testing:** Vitest
|
|
478
|
+
|
|
479
|
+
## Key Patterns
|
|
480
|
+
- Keep routes thin, move logic to separate modules
|
|
481
|
+
- Use Fastify plugins for reusable functionality
|
|
482
|
+
- Validate all inputs
|
|
483
|
+
- Return consistent error responses
|
|
484
|
+
`,
|
|
485
|
+
};
|
|
486
|
+
}
|
|
487
|
+
function getWebTemplate(name, description) {
|
|
488
|
+
return {
|
|
489
|
+
files: [
|
|
490
|
+
{
|
|
491
|
+
path: "package.json",
|
|
492
|
+
content: JSON.stringify({
|
|
493
|
+
name,
|
|
494
|
+
version: "0.1.0",
|
|
495
|
+
description,
|
|
496
|
+
scripts: {
|
|
497
|
+
dev: "next dev",
|
|
498
|
+
build: "next build",
|
|
499
|
+
start: "next start",
|
|
500
|
+
lint: "next lint",
|
|
501
|
+
},
|
|
502
|
+
dependencies: {
|
|
503
|
+
react: "^18.2.0",
|
|
504
|
+
"react-dom": "^18.2.0",
|
|
505
|
+
next: "^14.1.0",
|
|
506
|
+
},
|
|
507
|
+
devDependencies: {
|
|
508
|
+
typescript: "^5.3.3",
|
|
509
|
+
"@types/node": "^20.11.17",
|
|
510
|
+
"@types/react": "^18.2.55",
|
|
511
|
+
"@types/react-dom": "^18.2.19",
|
|
512
|
+
},
|
|
513
|
+
}, null, 2),
|
|
514
|
+
},
|
|
515
|
+
{
|
|
516
|
+
path: "tsconfig.json",
|
|
517
|
+
content: JSON.stringify({
|
|
518
|
+
compilerOptions: {
|
|
519
|
+
target: "ES2022",
|
|
520
|
+
lib: ["dom", "dom.iterable", "esnext"],
|
|
521
|
+
allowJs: true,
|
|
522
|
+
skipLibCheck: true,
|
|
523
|
+
strict: true,
|
|
524
|
+
forceConsistentCasingInFileNames: true,
|
|
525
|
+
noEmit: true,
|
|
526
|
+
esModuleInterop: true,
|
|
527
|
+
module: "esnext",
|
|
528
|
+
moduleResolution: "bundler",
|
|
529
|
+
resolveJsonModule: true,
|
|
530
|
+
isolatedModules: true,
|
|
531
|
+
jsx: "preserve",
|
|
532
|
+
incremental: true,
|
|
533
|
+
plugins: [{ name: "next" }],
|
|
534
|
+
paths: {
|
|
535
|
+
"@/*": ["./src/*"],
|
|
536
|
+
},
|
|
537
|
+
},
|
|
538
|
+
include: ["next-env.d.ts", "**/*.ts", "**/*.tsx", ".next/types/**/*.ts"],
|
|
539
|
+
exclude: ["node_modules"],
|
|
540
|
+
}, null, 2),
|
|
541
|
+
},
|
|
542
|
+
{
|
|
543
|
+
path: "next.config.js",
|
|
544
|
+
content: `/** @type {import('next').NextConfig} */
|
|
545
|
+
const nextConfig = {}
|
|
546
|
+
|
|
547
|
+
module.exports = nextConfig
|
|
548
|
+
`,
|
|
549
|
+
},
|
|
550
|
+
{
|
|
551
|
+
path: "src/app/layout.tsx",
|
|
552
|
+
content: `export const metadata = {
|
|
553
|
+
title: '${name}',
|
|
554
|
+
description: '${description}',
|
|
555
|
+
}
|
|
556
|
+
|
|
557
|
+
export default function RootLayout({
|
|
558
|
+
children,
|
|
559
|
+
}: {
|
|
560
|
+
children: React.ReactNode
|
|
561
|
+
}) {
|
|
562
|
+
return (
|
|
563
|
+
<html lang="en">
|
|
564
|
+
<body>{children}</body>
|
|
565
|
+
</html>
|
|
566
|
+
)
|
|
567
|
+
}
|
|
568
|
+
`,
|
|
569
|
+
},
|
|
570
|
+
{
|
|
571
|
+
path: "src/app/page.tsx",
|
|
572
|
+
content: `export default function Home() {
|
|
573
|
+
return (
|
|
574
|
+
<main className="min-h-screen p-8">
|
|
575
|
+
<h1 className="text-4xl font-bold">${name}</h1>
|
|
576
|
+
<p className="mt-4 text-lg">${description}</p>
|
|
577
|
+
</main>
|
|
578
|
+
)
|
|
579
|
+
}
|
|
580
|
+
`,
|
|
581
|
+
},
|
|
582
|
+
{
|
|
583
|
+
path: "README.md",
|
|
584
|
+
content: `# ${name}
|
|
585
|
+
|
|
586
|
+
${description}
|
|
587
|
+
|
|
588
|
+
## Getting Started
|
|
589
|
+
|
|
590
|
+
\`\`\`bash
|
|
591
|
+
npm install
|
|
592
|
+
npm run dev
|
|
593
|
+
\`\`\`
|
|
594
|
+
|
|
595
|
+
Open [http://localhost:3000](http://localhost:3000) with your browser.
|
|
596
|
+
`,
|
|
597
|
+
},
|
|
598
|
+
{
|
|
599
|
+
path: "knowledge/SERVICE_SPEC.md",
|
|
600
|
+
content: `# ${name} - Service Specification
|
|
601
|
+
|
|
602
|
+
## Overview
|
|
603
|
+
|
|
604
|
+
${description}
|
|
605
|
+
|
|
606
|
+
## Responsibilities
|
|
607
|
+
|
|
608
|
+
- [ ] TODO: Define what this frontend does
|
|
609
|
+
|
|
610
|
+
## Pages/Routes
|
|
611
|
+
|
|
612
|
+
- \`/\` - Home page
|
|
613
|
+
|
|
614
|
+
## Components
|
|
615
|
+
|
|
616
|
+
- None yet (add as you build)
|
|
617
|
+
|
|
618
|
+
## Styling
|
|
619
|
+
|
|
620
|
+
- TailwindCSS (recommended - add if needed)
|
|
621
|
+
- Or CSS modules
|
|
622
|
+
|
|
623
|
+
## API Integration
|
|
624
|
+
|
|
625
|
+
- None yet (define API endpoints to connect to)
|
|
626
|
+
`,
|
|
627
|
+
},
|
|
628
|
+
],
|
|
629
|
+
instructions: `This is a Next.js web application with TypeScript.
|
|
630
|
+
|
|
631
|
+
## Core Features to Implement
|
|
632
|
+
- [ ] Design page layouts
|
|
633
|
+
- [ ] Build reusable components
|
|
634
|
+
- [ ] Connect to backend APIs
|
|
635
|
+
- [ ] Add styling (TailwindCSS recommended)
|
|
636
|
+
- [ ] Implement client-side routing
|
|
637
|
+
|
|
638
|
+
## Technical Stack
|
|
639
|
+
- **Framework:** Next.js 14 (App Router)
|
|
640
|
+
- **Language:** TypeScript
|
|
641
|
+
- **UI:** React
|
|
642
|
+
|
|
643
|
+
## Key Patterns
|
|
644
|
+
- Use Server Components by default
|
|
645
|
+
- Use Client Components only when needed (interactivity, hooks)
|
|
646
|
+
- Keep components small and focused
|
|
647
|
+
- Co-locate related files
|
|
648
|
+
`,
|
|
649
|
+
};
|
|
650
|
+
}
|
|
651
|
+
function getWorkerTemplate(name, description) {
|
|
652
|
+
return {
|
|
653
|
+
files: [
|
|
654
|
+
{
|
|
655
|
+
path: "package.json",
|
|
656
|
+
content: JSON.stringify({
|
|
657
|
+
name,
|
|
658
|
+
version: "0.1.0",
|
|
659
|
+
description,
|
|
660
|
+
type: "module",
|
|
661
|
+
scripts: {
|
|
662
|
+
dev: "tsx watch src/index.ts",
|
|
663
|
+
build: "tsc",
|
|
664
|
+
start: "node dist/index.js",
|
|
665
|
+
},
|
|
666
|
+
dependencies: {
|
|
667
|
+
bullmq: "^5.3.0",
|
|
668
|
+
ioredis: "^5.3.2",
|
|
669
|
+
},
|
|
670
|
+
devDependencies: {
|
|
671
|
+
typescript: "^5.3.3",
|
|
672
|
+
tsx: "^4.7.1",
|
|
673
|
+
"@types/node": "^20.11.17",
|
|
674
|
+
},
|
|
675
|
+
}, null, 2),
|
|
676
|
+
},
|
|
677
|
+
{
|
|
678
|
+
path: "tsconfig.json",
|
|
679
|
+
content: JSON.stringify({
|
|
680
|
+
compilerOptions: {
|
|
681
|
+
target: "ES2022",
|
|
682
|
+
module: "ES2022",
|
|
683
|
+
moduleResolution: "node",
|
|
684
|
+
outDir: "./dist",
|
|
685
|
+
rootDir: "./src",
|
|
686
|
+
strict: true,
|
|
687
|
+
esModuleInterop: true,
|
|
688
|
+
skipLibCheck: true,
|
|
689
|
+
forceConsistentCasingInFileNames: true,
|
|
690
|
+
},
|
|
691
|
+
include: ["src/**/*"],
|
|
692
|
+
exclude: ["node_modules", "dist"],
|
|
693
|
+
}, null, 2),
|
|
694
|
+
},
|
|
695
|
+
{
|
|
696
|
+
path: "src/index.ts",
|
|
697
|
+
content: `import { Worker } from 'bullmq'
|
|
698
|
+
|
|
699
|
+
const worker = new Worker('${name}', async job => {
|
|
700
|
+
console.log(\`Processing job \${job.id}:\`, job.data)
|
|
701
|
+
|
|
702
|
+
// Add job processing logic here
|
|
703
|
+
// Example: await processTask(job.data)
|
|
704
|
+
|
|
705
|
+
return { processed: true, timestamp: new Date().toISOString() }
|
|
706
|
+
}, {
|
|
707
|
+
connection: {
|
|
708
|
+
host: process.env.REDIS_HOST || 'localhost',
|
|
709
|
+
port: parseInt(process.env.REDIS_PORT || '6379', 10),
|
|
710
|
+
}
|
|
711
|
+
})
|
|
712
|
+
|
|
713
|
+
worker.on('completed', job => {
|
|
714
|
+
console.log(\`Job \${job.id} completed\`)
|
|
715
|
+
})
|
|
716
|
+
|
|
717
|
+
worker.on('failed', (job, err) => {
|
|
718
|
+
console.error(\`Job \${job?.id} failed:\`, err)
|
|
719
|
+
})
|
|
720
|
+
|
|
721
|
+
console.log('Worker started, waiting for jobs...')
|
|
722
|
+
`,
|
|
723
|
+
},
|
|
724
|
+
{
|
|
725
|
+
path: "src/jobs/example.ts",
|
|
726
|
+
content: `export async function processExampleJob(data: any) {
|
|
727
|
+
// Implement job logic here
|
|
728
|
+
console.log('Processing example job:', data)
|
|
729
|
+
|
|
730
|
+
return { success: true }
|
|
731
|
+
}
|
|
732
|
+
`,
|
|
733
|
+
},
|
|
734
|
+
{
|
|
735
|
+
path: ".env.example",
|
|
736
|
+
content: `REDIS_HOST=localhost
|
|
737
|
+
REDIS_PORT=6379
|
|
738
|
+
NODE_ENV=development
|
|
739
|
+
`,
|
|
740
|
+
},
|
|
741
|
+
{
|
|
742
|
+
path: "README.md",
|
|
743
|
+
content: `# ${name}
|
|
744
|
+
|
|
745
|
+
${description}
|
|
746
|
+
|
|
747
|
+
## Getting Started
|
|
748
|
+
|
|
749
|
+
\`\`\`bash
|
|
750
|
+
npm install
|
|
751
|
+
npm run dev
|
|
752
|
+
\`\`\`
|
|
753
|
+
|
|
754
|
+
## Requirements
|
|
755
|
+
|
|
756
|
+
- Redis server running on localhost:6379
|
|
757
|
+
|
|
758
|
+
## Job Types
|
|
759
|
+
|
|
760
|
+
- Add job types as you implement them
|
|
761
|
+
|
|
762
|
+
## Environment Variables
|
|
763
|
+
|
|
764
|
+
See \`.env.example\` for required environment variables.
|
|
765
|
+
`,
|
|
766
|
+
},
|
|
767
|
+
{
|
|
768
|
+
path: "knowledge/SERVICE_SPEC.md",
|
|
769
|
+
content: `# ${name} - Service Specification
|
|
770
|
+
|
|
771
|
+
## Overview
|
|
772
|
+
|
|
773
|
+
${description}
|
|
774
|
+
|
|
775
|
+
## Responsibilities
|
|
776
|
+
|
|
777
|
+
- [ ] TODO: Define what jobs this worker processes
|
|
778
|
+
|
|
779
|
+
## Job Types
|
|
780
|
+
|
|
781
|
+
- None yet (add as you implement)
|
|
782
|
+
|
|
783
|
+
## Dependencies
|
|
784
|
+
|
|
785
|
+
- **Redis** - Job queue backend (required)
|
|
786
|
+
|
|
787
|
+
## Environment Variables
|
|
788
|
+
|
|
789
|
+
- \`REDIS_HOST\` - Redis host (default: localhost)
|
|
790
|
+
- \`REDIS_PORT\` - Redis port (default: 6379)
|
|
791
|
+
`,
|
|
792
|
+
},
|
|
793
|
+
],
|
|
794
|
+
instructions: `This is a background job worker using BullMQ and TypeScript.
|
|
795
|
+
|
|
796
|
+
## Core Features to Implement
|
|
797
|
+
- [ ] Define job types and handlers
|
|
798
|
+
- [ ] Add error handling and retries
|
|
799
|
+
- [ ] Implement job prioritization
|
|
800
|
+
- [ ] Add monitoring/logging
|
|
801
|
+
- [ ] Write job tests
|
|
802
|
+
|
|
803
|
+
## Technical Stack
|
|
804
|
+
- **Queue:** BullMQ (Redis-based job queue)
|
|
805
|
+
- **Language:** TypeScript
|
|
806
|
+
|
|
807
|
+
## Key Patterns
|
|
808
|
+
- Keep job handlers focused and testable
|
|
809
|
+
- Use job data validation
|
|
810
|
+
- Implement proper error handling
|
|
811
|
+
- Add retry logic for transient failures
|
|
812
|
+
- Log job progress for debugging
|
|
813
|
+
`,
|
|
814
|
+
};
|
|
815
|
+
}
|
|
816
|
+
function getCLITemplate(name, description) {
|
|
817
|
+
return {
|
|
818
|
+
files: [
|
|
819
|
+
{
|
|
820
|
+
path: "package.json",
|
|
821
|
+
content: JSON.stringify({
|
|
822
|
+
name,
|
|
823
|
+
version: "0.1.0",
|
|
824
|
+
description,
|
|
825
|
+
type: "module",
|
|
826
|
+
bin: {
|
|
827
|
+
[name]: "./bin/cli.js",
|
|
828
|
+
},
|
|
829
|
+
scripts: {
|
|
830
|
+
dev: "tsx watch src/cli.ts",
|
|
831
|
+
build: "tsc && chmod +x bin/cli.js",
|
|
832
|
+
start: "node bin/cli.js",
|
|
833
|
+
},
|
|
834
|
+
dependencies: {
|
|
835
|
+
commander: "^11.1.0",
|
|
836
|
+
chalk: "^5.3.0",
|
|
837
|
+
},
|
|
838
|
+
devDependencies: {
|
|
839
|
+
typescript: "^5.3.3",
|
|
840
|
+
tsx: "^4.7.1",
|
|
841
|
+
"@types/node": "^20.11.17",
|
|
842
|
+
},
|
|
843
|
+
}, null, 2),
|
|
844
|
+
},
|
|
845
|
+
{
|
|
846
|
+
path: "tsconfig.json",
|
|
847
|
+
content: JSON.stringify({
|
|
848
|
+
compilerOptions: {
|
|
849
|
+
target: "ES2022",
|
|
850
|
+
module: "ES2022",
|
|
851
|
+
moduleResolution: "node",
|
|
852
|
+
outDir: "./bin",
|
|
853
|
+
rootDir: "./src",
|
|
854
|
+
strict: true,
|
|
855
|
+
esModuleInterop: true,
|
|
856
|
+
skipLibCheck: true,
|
|
857
|
+
forceConsistentCasingInFileNames: true,
|
|
858
|
+
},
|
|
859
|
+
include: ["src/**/*"],
|
|
860
|
+
exclude: ["node_modules", "bin"],
|
|
861
|
+
}, null, 2),
|
|
862
|
+
},
|
|
863
|
+
{
|
|
864
|
+
path: "src/cli.ts",
|
|
865
|
+
content: `#!/usr/bin/env node
|
|
866
|
+
import { Command } from 'commander'
|
|
867
|
+
import chalk from 'chalk'
|
|
868
|
+
import { helloCommand } from './commands/hello.js'
|
|
869
|
+
|
|
870
|
+
const program = new Command()
|
|
871
|
+
|
|
872
|
+
program
|
|
873
|
+
.name('${name}')
|
|
874
|
+
.description('${description}')
|
|
875
|
+
.version('0.1.0')
|
|
876
|
+
|
|
877
|
+
program
|
|
878
|
+
.command('hello')
|
|
879
|
+
.description('Say hello')
|
|
880
|
+
.argument('[name]', 'Name to greet')
|
|
881
|
+
.action(helloCommand)
|
|
882
|
+
|
|
883
|
+
program.parse()
|
|
884
|
+
`,
|
|
885
|
+
},
|
|
886
|
+
{
|
|
887
|
+
path: "src/commands/hello.ts",
|
|
888
|
+
content: `import chalk from 'chalk'
|
|
889
|
+
|
|
890
|
+
export function helloCommand(name?: string) {
|
|
891
|
+
const greeting = name ? \`Hello, \${name}!\` : 'Hello!'
|
|
892
|
+
console.log(chalk.cyan(greeting))
|
|
893
|
+
}
|
|
894
|
+
`,
|
|
895
|
+
},
|
|
896
|
+
{
|
|
897
|
+
path: "README.md",
|
|
898
|
+
content: `# ${name}
|
|
899
|
+
|
|
900
|
+
${description}
|
|
901
|
+
|
|
902
|
+
## Installation
|
|
903
|
+
|
|
904
|
+
\`\`\`bash
|
|
905
|
+
npm install -g ${name}
|
|
906
|
+
\`\`\`
|
|
907
|
+
|
|
908
|
+
## Usage
|
|
909
|
+
|
|
910
|
+
\`\`\`bash
|
|
911
|
+
${name} hello
|
|
912
|
+
${name} hello World
|
|
913
|
+
\`\`\`
|
|
914
|
+
|
|
915
|
+
## Commands
|
|
916
|
+
|
|
917
|
+
- \`hello [name]\` - Say hello
|
|
918
|
+
`,
|
|
919
|
+
},
|
|
920
|
+
{
|
|
921
|
+
path: "knowledge/SERVICE_SPEC.md",
|
|
922
|
+
content: `# ${name} - Service Specification
|
|
923
|
+
|
|
924
|
+
## Overview
|
|
925
|
+
|
|
926
|
+
${description}
|
|
927
|
+
|
|
928
|
+
## Commands
|
|
929
|
+
|
|
930
|
+
- \`hello [name]\` - Example command
|
|
931
|
+
|
|
932
|
+
## Installation
|
|
933
|
+
|
|
934
|
+
Installable globally via npm.
|
|
935
|
+
|
|
936
|
+
## Usage Patterns
|
|
937
|
+
|
|
938
|
+
Define expected CLI usage patterns here.
|
|
939
|
+
`,
|
|
940
|
+
},
|
|
941
|
+
],
|
|
942
|
+
instructions: `This is a CLI tool using Commander and TypeScript.
|
|
943
|
+
|
|
944
|
+
## Core Features to Implement
|
|
945
|
+
- [ ] Define CLI commands
|
|
946
|
+
- [ ] Add command arguments and options
|
|
947
|
+
- [ ] Implement command logic
|
|
948
|
+
- [ ] Add help text and examples
|
|
949
|
+
- [ ] Write command tests
|
|
950
|
+
|
|
951
|
+
## Technical Stack
|
|
952
|
+
- **CLI Framework:** Commander
|
|
953
|
+
- **Styling:** Chalk
|
|
954
|
+
- **Language:** TypeScript
|
|
955
|
+
|
|
956
|
+
## Key Patterns
|
|
957
|
+
- Keep commands focused (one command = one responsibility)
|
|
958
|
+
- Provide clear help text
|
|
959
|
+
- Validate inputs early
|
|
960
|
+
- Give helpful error messages
|
|
961
|
+
- Support --help and --version
|
|
962
|
+
`,
|
|
963
|
+
};
|
|
964
|
+
}
|
|
965
|
+
function getInfrastructureTemplate(name, description) {
|
|
966
|
+
return {
|
|
967
|
+
files: [
|
|
968
|
+
{
|
|
969
|
+
path: "docker-compose.yml",
|
|
970
|
+
content: `version: '3.8'
|
|
971
|
+
|
|
972
|
+
services:
|
|
973
|
+
${name}:
|
|
974
|
+
image: ${name}:latest
|
|
975
|
+
ports:
|
|
976
|
+
- "8080:8080"
|
|
977
|
+
environment:
|
|
978
|
+
- NODE_ENV=development
|
|
979
|
+
volumes:
|
|
980
|
+
- ./data:/data
|
|
981
|
+
`,
|
|
982
|
+
},
|
|
983
|
+
{
|
|
984
|
+
path: "Dockerfile",
|
|
985
|
+
content: `FROM node:20-alpine
|
|
986
|
+
|
|
987
|
+
WORKDIR /app
|
|
988
|
+
|
|
989
|
+
COPY package*.json ./
|
|
990
|
+
RUN npm ci
|
|
991
|
+
|
|
992
|
+
COPY . .
|
|
993
|
+
|
|
994
|
+
EXPOSE 8080
|
|
995
|
+
|
|
996
|
+
CMD ["npm", "start"]
|
|
997
|
+
`,
|
|
998
|
+
},
|
|
999
|
+
{
|
|
1000
|
+
path: "README.md",
|
|
1001
|
+
content: `# ${name}
|
|
1002
|
+
|
|
1003
|
+
${description}
|
|
1004
|
+
|
|
1005
|
+
## Getting Started
|
|
1006
|
+
|
|
1007
|
+
\`\`\`bash
|
|
1008
|
+
docker-compose up
|
|
1009
|
+
\`\`\`
|
|
1010
|
+
|
|
1011
|
+
## Configuration
|
|
1012
|
+
|
|
1013
|
+
Update \`docker-compose.yml\` with your configuration.
|
|
1014
|
+
`,
|
|
1015
|
+
},
|
|
1016
|
+
{
|
|
1017
|
+
path: "knowledge/SERVICE_SPEC.md",
|
|
1018
|
+
content: `# ${name} - Service Specification
|
|
1019
|
+
|
|
1020
|
+
## Overview
|
|
1021
|
+
|
|
1022
|
+
${description}
|
|
1023
|
+
|
|
1024
|
+
## Infrastructure Components
|
|
1025
|
+
|
|
1026
|
+
- [ ] TODO: Define what infrastructure this service provides
|
|
1027
|
+
|
|
1028
|
+
## Configuration
|
|
1029
|
+
|
|
1030
|
+
Document configuration options here.
|
|
1031
|
+
|
|
1032
|
+
## Deployment
|
|
1033
|
+
|
|
1034
|
+
Define deployment strategy here.
|
|
1035
|
+
`,
|
|
1036
|
+
},
|
|
1037
|
+
],
|
|
1038
|
+
instructions: `This is an infrastructure service with Docker configuration.
|
|
1039
|
+
|
|
1040
|
+
## Core Features to Implement
|
|
1041
|
+
- [ ] Define infrastructure components
|
|
1042
|
+
- [ ] Configure networking
|
|
1043
|
+
- [ ] Set up volumes and persistence
|
|
1044
|
+
- [ ] Add health checks
|
|
1045
|
+
- [ ] Document deployment process
|
|
1046
|
+
|
|
1047
|
+
## Technical Stack
|
|
1048
|
+
- **Containerization:** Docker
|
|
1049
|
+
- **Orchestration:** Docker Compose (or Kubernetes if needed)
|
|
1050
|
+
|
|
1051
|
+
## Key Patterns
|
|
1052
|
+
- Use multi-stage builds for production
|
|
1053
|
+
- Keep images small (Alpine-based)
|
|
1054
|
+
- Externalize configuration via env vars
|
|
1055
|
+
- Set up proper health checks
|
|
1056
|
+
- Document all ports and volumes
|
|
1057
|
+
`,
|
|
1058
|
+
};
|
|
1059
|
+
}
|
|
1060
|
+
function getContainerTemplate(name, description) {
|
|
1061
|
+
return {
|
|
1062
|
+
files: [
|
|
1063
|
+
{
|
|
1064
|
+
path: "Dockerfile",
|
|
1065
|
+
content: `FROM node:20-alpine
|
|
1066
|
+
|
|
1067
|
+
WORKDIR /app
|
|
1068
|
+
|
|
1069
|
+
COPY package*.json ./
|
|
1070
|
+
RUN npm ci --only=production
|
|
1071
|
+
|
|
1072
|
+
COPY . .
|
|
1073
|
+
|
|
1074
|
+
EXPOSE 3000
|
|
1075
|
+
|
|
1076
|
+
CMD ["npm", "start"]
|
|
1077
|
+
`,
|
|
1078
|
+
},
|
|
1079
|
+
{
|
|
1080
|
+
path: "package.json",
|
|
1081
|
+
content: JSON.stringify({
|
|
1082
|
+
name,
|
|
1083
|
+
version: "0.1.0",
|
|
1084
|
+
description,
|
|
1085
|
+
scripts: {
|
|
1086
|
+
start: "node index.js",
|
|
1087
|
+
},
|
|
1088
|
+
}, null, 2),
|
|
1089
|
+
},
|
|
1090
|
+
{
|
|
1091
|
+
path: "index.js",
|
|
1092
|
+
content: `console.log('Container service started')
|
|
1093
|
+
|
|
1094
|
+
// Add your service logic here
|
|
1095
|
+
`,
|
|
1096
|
+
},
|
|
1097
|
+
{
|
|
1098
|
+
path: "README.md",
|
|
1099
|
+
content: `# ${name}
|
|
1100
|
+
|
|
1101
|
+
${description}
|
|
1102
|
+
|
|
1103
|
+
## Build
|
|
1104
|
+
|
|
1105
|
+
\`\`\`bash
|
|
1106
|
+
docker build -t ${name} .
|
|
1107
|
+
\`\`\`
|
|
1108
|
+
|
|
1109
|
+
## Run
|
|
1110
|
+
|
|
1111
|
+
\`\`\`bash
|
|
1112
|
+
docker run -p 3000:3000 ${name}
|
|
1113
|
+
\`\`\`
|
|
1114
|
+
`,
|
|
1115
|
+
},
|
|
1116
|
+
{
|
|
1117
|
+
path: "knowledge/SERVICE_SPEC.md",
|
|
1118
|
+
content: `# ${name} - Service Specification
|
|
1119
|
+
|
|
1120
|
+
## Overview
|
|
1121
|
+
|
|
1122
|
+
${description}
|
|
1123
|
+
|
|
1124
|
+
## Container Configuration
|
|
1125
|
+
|
|
1126
|
+
- **Base Image:** node:20-alpine
|
|
1127
|
+
- **Exposed Ports:** 3000
|
|
1128
|
+
|
|
1129
|
+
## Environment Variables
|
|
1130
|
+
|
|
1131
|
+
- None yet (add as needed)
|
|
1132
|
+
|
|
1133
|
+
## Volumes
|
|
1134
|
+
|
|
1135
|
+
- None yet (add for persistence)
|
|
1136
|
+
`,
|
|
1137
|
+
},
|
|
1138
|
+
],
|
|
1139
|
+
instructions: `This is a containerized service with Docker.
|
|
1140
|
+
|
|
1141
|
+
## Core Features to Implement
|
|
1142
|
+
- [ ] Define service functionality
|
|
1143
|
+
- [ ] Configure container properly
|
|
1144
|
+
- [ ] Add health checks
|
|
1145
|
+
- [ ] Set up logging
|
|
1146
|
+
- [ ] Document deployment
|
|
1147
|
+
|
|
1148
|
+
## Technical Stack
|
|
1149
|
+
- **Containerization:** Docker
|
|
1150
|
+
|
|
1151
|
+
## Key Patterns
|
|
1152
|
+
- Keep container small and focused
|
|
1153
|
+
- Use .dockerignore to exclude unnecessary files
|
|
1154
|
+
- Run as non-root user
|
|
1155
|
+
- Add health checks
|
|
1156
|
+
- Log to stdout/stderr
|
|
1157
|
+
`,
|
|
1158
|
+
};
|
|
1159
|
+
}
|
|
1160
|
+
function getAgentTemplate(name, description) {
|
|
1161
|
+
const evalScript = `#!/bin/bash
|
|
1162
|
+
# Eval script for ${name}
|
|
1163
|
+
# Returns a single scalar score (higher is better)
|
|
1164
|
+
set -euo pipefail
|
|
1165
|
+
|
|
1166
|
+
cd "$(dirname "$0")/.."
|
|
1167
|
+
|
|
1168
|
+
# Run tests and count pass/fail
|
|
1169
|
+
RESULT=$(npx jest --json --silent 2>/dev/null || echo '{"numPassedTests":0,"numTotalTests":1}')
|
|
1170
|
+
PASSED=$(echo "$RESULT" | jq '.numPassedTests // 0')
|
|
1171
|
+
TOTAL=$(echo "$RESULT" | jq '.numTotalTests // 1')
|
|
1172
|
+
|
|
1173
|
+
if [ "$TOTAL" -eq 0 ]; then
|
|
1174
|
+
echo "1.0"
|
|
1175
|
+
else
|
|
1176
|
+
echo "scale=4; $PASSED / $TOTAL" | bc -l
|
|
1177
|
+
fi
|
|
1178
|
+
`;
|
|
1179
|
+
const manifestYaml = `name: ${name}
|
|
1180
|
+
version: 0.1.0
|
|
1181
|
+
description: "${description}"
|
|
1182
|
+
type: reactive
|
|
1183
|
+
|
|
1184
|
+
triggers:
|
|
1185
|
+
- pattern: "session:ended"
|
|
1186
|
+
- pattern: "eval:scored"
|
|
1187
|
+
- schedule: "0 */6 * * *"
|
|
1188
|
+
|
|
1189
|
+
capabilities:
|
|
1190
|
+
- read_context
|
|
1191
|
+
- write_journal
|
|
1192
|
+
- run_eval
|
|
1193
|
+
- modify_code
|
|
1194
|
+
|
|
1195
|
+
runtime:
|
|
1196
|
+
command: "node"
|
|
1197
|
+
args: ["dist/index.js"]
|
|
1198
|
+
cwd: "."
|
|
1199
|
+
env:
|
|
1200
|
+
NODE_ENV: "production"
|
|
1201
|
+
|
|
1202
|
+
policy:
|
|
1203
|
+
cost_limit_usd: 1.00
|
|
1204
|
+
approval_gate: auto
|
|
1205
|
+
max_concurrent: 1
|
|
1206
|
+
cooldown_seconds: 300
|
|
1207
|
+
`;
|
|
1208
|
+
return {
|
|
1209
|
+
files: [
|
|
1210
|
+
{
|
|
1211
|
+
path: "package.json",
|
|
1212
|
+
content: JSON.stringify({
|
|
1213
|
+
name,
|
|
1214
|
+
version: "0.1.0",
|
|
1215
|
+
description,
|
|
1216
|
+
type: "module",
|
|
1217
|
+
scripts: {
|
|
1218
|
+
dev: "tsx watch src/index.ts",
|
|
1219
|
+
build: "tsc",
|
|
1220
|
+
start: "node dist/index.js",
|
|
1221
|
+
test: "jest --passWithNoTests",
|
|
1222
|
+
eval: "bash eval/score.sh",
|
|
1223
|
+
},
|
|
1224
|
+
dependencies: {
|
|
1225
|
+
axios: "^1.6.0",
|
|
1226
|
+
},
|
|
1227
|
+
devDependencies: {
|
|
1228
|
+
typescript: "^5.3.3",
|
|
1229
|
+
tsx: "^4.7.1",
|
|
1230
|
+
jest: "^30.3.0",
|
|
1231
|
+
"ts-jest": "^30.0.0",
|
|
1232
|
+
"@types/jest": "^30.0.0",
|
|
1233
|
+
"@types/node": "^20.11.17",
|
|
1234
|
+
},
|
|
1235
|
+
}, null, 2),
|
|
1236
|
+
},
|
|
1237
|
+
{
|
|
1238
|
+
path: "tsconfig.json",
|
|
1239
|
+
content: JSON.stringify({
|
|
1240
|
+
compilerOptions: {
|
|
1241
|
+
target: "ES2022",
|
|
1242
|
+
module: "ES2022",
|
|
1243
|
+
moduleResolution: "node",
|
|
1244
|
+
outDir: "./dist",
|
|
1245
|
+
rootDir: "./src",
|
|
1246
|
+
strict: true,
|
|
1247
|
+
esModuleInterop: true,
|
|
1248
|
+
skipLibCheck: true,
|
|
1249
|
+
forceConsistentCasingInFileNames: true,
|
|
1250
|
+
declaration: true,
|
|
1251
|
+
},
|
|
1252
|
+
include: ["src/**/*"],
|
|
1253
|
+
exclude: ["node_modules", "dist"],
|
|
1254
|
+
}, null, 2),
|
|
1255
|
+
},
|
|
1256
|
+
{
|
|
1257
|
+
path: "jest.config.js",
|
|
1258
|
+
content: `export default {
|
|
1259
|
+
preset: "ts-jest/presets/default-esm",
|
|
1260
|
+
testEnvironment: "node",
|
|
1261
|
+
extensionsToTreatAsEsm: [".ts"],
|
|
1262
|
+
transform: { "^.+\\\\.ts$": ["ts-jest", { useESM: true }] },
|
|
1263
|
+
moduleNameMapper: { "^(\\\\.{1,2}/.*)\\\\.js$": "$1" },
|
|
1264
|
+
}
|
|
1265
|
+
`,
|
|
1266
|
+
},
|
|
1267
|
+
{
|
|
1268
|
+
path: "manifest.yaml",
|
|
1269
|
+
content: manifestYaml,
|
|
1270
|
+
},
|
|
1271
|
+
{
|
|
1272
|
+
path: "eval/score.sh",
|
|
1273
|
+
content: evalScript,
|
|
1274
|
+
},
|
|
1275
|
+
{
|
|
1276
|
+
path: "src/index.ts",
|
|
1277
|
+
content: `import { AgentLoop } from "./loop.js"
|
|
1278
|
+
|
|
1279
|
+
const agent = new AgentLoop({
|
|
1280
|
+
name: "${name}",
|
|
1281
|
+
hubUrl: process.env.CONTEXT_HUB_URL || "http://localhost:4242",
|
|
1282
|
+
})
|
|
1283
|
+
|
|
1284
|
+
agent.run().catch((err) => {
|
|
1285
|
+
console.error("Agent failed:", err)
|
|
1286
|
+
process.exit(1)
|
|
1287
|
+
})
|
|
1288
|
+
`,
|
|
1289
|
+
},
|
|
1290
|
+
{
|
|
1291
|
+
path: "src/loop.ts",
|
|
1292
|
+
content: `import { readFileSync, appendFileSync, mkdirSync, existsSync } from "fs"
|
|
1293
|
+
import { join } from "path"
|
|
1294
|
+
import { execSync } from "child_process"
|
|
1295
|
+
import axios from "axios"
|
|
1296
|
+
|
|
1297
|
+
export interface AgentLoopConfig {
|
|
1298
|
+
name: string
|
|
1299
|
+
hubUrl: string
|
|
1300
|
+
}
|
|
1301
|
+
|
|
1302
|
+
export class AgentLoop {
|
|
1303
|
+
private name: string
|
|
1304
|
+
private hubUrl: string
|
|
1305
|
+
private projectRoot: string
|
|
1306
|
+
|
|
1307
|
+
constructor(config: AgentLoopConfig) {
|
|
1308
|
+
this.name = config.name
|
|
1309
|
+
this.hubUrl = config.hubUrl
|
|
1310
|
+
this.projectRoot = process.cwd()
|
|
1311
|
+
}
|
|
1312
|
+
|
|
1313
|
+
async run(): Promise<void> {
|
|
1314
|
+
console.log(\`[\${this.name}] Starting agent loop\`)
|
|
1315
|
+
|
|
1316
|
+
const context = await this.getContext()
|
|
1317
|
+
console.log(\`[\${this.name}] Loaded \${context.length} context items\`)
|
|
1318
|
+
|
|
1319
|
+
const baseline = this.runEval()
|
|
1320
|
+
console.log(\`[\${this.name}] Baseline score: \${baseline}\`)
|
|
1321
|
+
|
|
1322
|
+
// Agent work goes here — analyze context, plan action, execute, eval
|
|
1323
|
+
await this.execute(context, baseline)
|
|
1324
|
+
|
|
1325
|
+
console.log(\`[\${this.name}] Loop complete\`)
|
|
1326
|
+
}
|
|
1327
|
+
|
|
1328
|
+
async getContext(): Promise<any[]> {
|
|
1329
|
+
try {
|
|
1330
|
+
const resp = await axios.post(\`\${this.hubUrl}/api/context\`, {
|
|
1331
|
+
query: this.name,
|
|
1332
|
+
taskType: "code",
|
|
1333
|
+
maxItems: 20,
|
|
1334
|
+
}, { timeout: 5000 })
|
|
1335
|
+
return resp.data?.items || []
|
|
1336
|
+
} catch {
|
|
1337
|
+
console.log(\`[\${this.name}] Context Hub unreachable, continuing without context\`)
|
|
1338
|
+
return []
|
|
1339
|
+
}
|
|
1340
|
+
}
|
|
1341
|
+
|
|
1342
|
+
runEval(): number {
|
|
1343
|
+
try {
|
|
1344
|
+
const result = execSync("bash eval/score.sh", {
|
|
1345
|
+
cwd: this.projectRoot,
|
|
1346
|
+
encoding: "utf-8",
|
|
1347
|
+
timeout: 60000,
|
|
1348
|
+
}).trim()
|
|
1349
|
+
return parseFloat(result) || 0
|
|
1350
|
+
} catch {
|
|
1351
|
+
return 0
|
|
1352
|
+
}
|
|
1353
|
+
}
|
|
1354
|
+
|
|
1355
|
+
async execute(context: any[], baseline: number): Promise<void> {
|
|
1356
|
+
// Override this method with your agent's logic
|
|
1357
|
+
// Example: analyze findings, generate fixes, run eval, keep or revert
|
|
1358
|
+
this.writeJournal({
|
|
1359
|
+
type: "discovery",
|
|
1360
|
+
title: \`\${this.name} loop executed\`,
|
|
1361
|
+
summary: \`Baseline score: \${baseline}. Context items: \${context.length}\`,
|
|
1362
|
+
})
|
|
1363
|
+
}
|
|
1364
|
+
|
|
1365
|
+
writeJournal(entry: { type: string; title: string; summary: string; detail?: string; files?: string[] }): void {
|
|
1366
|
+
const journalDir = join(this.projectRoot, ".jfl", "journal")
|
|
1367
|
+
if (!existsSync(journalDir)) mkdirSync(journalDir, { recursive: true })
|
|
1368
|
+
|
|
1369
|
+
let branch = "main"
|
|
1370
|
+
try {
|
|
1371
|
+
branch = execSync("git branch --show-current", { encoding: "utf-8", timeout: 3000 }).trim()
|
|
1372
|
+
} catch {}
|
|
1373
|
+
|
|
1374
|
+
const journalFile = join(journalDir, \`\${branch}.jsonl\`)
|
|
1375
|
+
const fullEntry = {
|
|
1376
|
+
v: 1,
|
|
1377
|
+
ts: new Date().toISOString(),
|
|
1378
|
+
session: branch,
|
|
1379
|
+
...entry,
|
|
1380
|
+
}
|
|
1381
|
+
appendFileSync(journalFile, JSON.stringify(fullEntry) + "\\n")
|
|
1382
|
+
}
|
|
1383
|
+
}
|
|
1384
|
+
`,
|
|
1385
|
+
},
|
|
1386
|
+
{
|
|
1387
|
+
path: "src/__tests__/loop.test.ts",
|
|
1388
|
+
content: `import { AgentLoop } from "../loop.js"
|
|
1389
|
+
|
|
1390
|
+
describe("AgentLoop", () => {
|
|
1391
|
+
it("constructs with config", () => {
|
|
1392
|
+
const agent = new AgentLoop({ name: "test-agent", hubUrl: "http://localhost:4242" })
|
|
1393
|
+
expect(agent).toBeDefined()
|
|
1394
|
+
})
|
|
1395
|
+
})
|
|
1396
|
+
`,
|
|
1397
|
+
},
|
|
1398
|
+
{
|
|
1399
|
+
path: ".env.example",
|
|
1400
|
+
content: `CONTEXT_HUB_URL=http://localhost:4242
|
|
1401
|
+
NODE_ENV=development
|
|
1402
|
+
`,
|
|
1403
|
+
},
|
|
1404
|
+
{
|
|
1405
|
+
path: "README.md",
|
|
1406
|
+
content: `# ${name}
|
|
1407
|
+
|
|
1408
|
+
${description}
|
|
1409
|
+
|
|
1410
|
+
## Getting Started
|
|
1411
|
+
|
|
1412
|
+
\`\`\`bash
|
|
1413
|
+
npm install
|
|
1414
|
+
npm run dev
|
|
1415
|
+
\`\`\`
|
|
1416
|
+
|
|
1417
|
+
## Architecture
|
|
1418
|
+
|
|
1419
|
+
This is a JFL agent service — an autonomous AI agent that integrates with JFL's context, journal, and eval systems.
|
|
1420
|
+
|
|
1421
|
+
### Key Files
|
|
1422
|
+
|
|
1423
|
+
- \`manifest.yaml\` — Agent manifest (triggers, capabilities, runtime)
|
|
1424
|
+
- \`eval/score.sh\` — Eval script that returns a scalar score
|
|
1425
|
+
- \`src/loop.ts\` — Core agent loop (context → plan → execute → eval)
|
|
1426
|
+
- \`src/index.ts\` — Entry point
|
|
1427
|
+
|
|
1428
|
+
### How It Works
|
|
1429
|
+
|
|
1430
|
+
1. **Trigger** — Agent is triggered by events or schedule (see manifest.yaml)
|
|
1431
|
+
2. **Context** — Loads project context from Context Hub
|
|
1432
|
+
3. **Execute** — Performs its task (code changes, analysis, etc.)
|
|
1433
|
+
4. **Eval** — Runs eval script to measure impact
|
|
1434
|
+
5. **Journal** — Records what happened for future sessions
|
|
1435
|
+
|
|
1436
|
+
### Eval Loop
|
|
1437
|
+
|
|
1438
|
+
The agent follows Karpathy's autoresearch pattern:
|
|
1439
|
+
- ONE metric to optimize (\`eval/score.sh\`)
|
|
1440
|
+
- Small, focused changes per round
|
|
1441
|
+
- Keep improvements, revert regressions
|
|
1442
|
+
- Experiment history informs next action
|
|
1443
|
+
|
|
1444
|
+
### Integration
|
|
1445
|
+
|
|
1446
|
+
Register with JFL:
|
|
1447
|
+
\`\`\`bash
|
|
1448
|
+
jfl onboard .
|
|
1449
|
+
\`\`\`
|
|
1450
|
+
|
|
1451
|
+
Run standalone:
|
|
1452
|
+
\`\`\`bash
|
|
1453
|
+
npm start
|
|
1454
|
+
\`\`\`
|
|
1455
|
+
|
|
1456
|
+
## Development
|
|
1457
|
+
|
|
1458
|
+
\`\`\`bash
|
|
1459
|
+
npm test # Run tests
|
|
1460
|
+
npm run eval # Run eval script
|
|
1461
|
+
npm run dev # Watch mode
|
|
1462
|
+
\`\`\`
|
|
1463
|
+
`,
|
|
1464
|
+
},
|
|
1465
|
+
],
|
|
1466
|
+
instructions: `## Agent Requirements
|
|
1467
|
+
|
|
1468
|
+
- [ ] Implement agent logic in \`src/loop.ts\` execute() method
|
|
1469
|
+
- [ ] Configure triggers in \`manifest.yaml\`
|
|
1470
|
+
- [ ] Write eval script that returns a meaningful metric
|
|
1471
|
+
- [ ] Add tests for agent logic
|
|
1472
|
+
- [ ] Test with Context Hub running: \`jfl context-hub start\`
|
|
1473
|
+
- [ ] Journal significant actions (the loop class has writeJournal())
|
|
1474
|
+
- [ ] Register with GTM: \`jfl onboard .\`
|
|
1475
|
+
|
|
1476
|
+
## Agent Design Principles
|
|
1477
|
+
|
|
1478
|
+
- **One metric**: Focus on a single scalar metric to optimize
|
|
1479
|
+
- **Small changes**: Make focused, reversible changes per round
|
|
1480
|
+
- **Eval everything**: Always run eval before and after changes
|
|
1481
|
+
- **Journal always**: Record what you did for future sessions
|
|
1482
|
+
- **Context first**: Load context before acting
|
|
1483
|
+
`,
|
|
1484
|
+
};
|
|
1485
|
+
}
|
|
1486
|
+
// ============================================================================
|
|
1487
|
+
// CLAUDE.md Generation
|
|
1488
|
+
// ============================================================================
|
|
1489
|
+
function generateClaudeMd(name, type, description, instructions) {
|
|
1490
|
+
return `# ${name} - Service Agent
|
|
1491
|
+
|
|
1492
|
+
Your context layer for building this service.
|
|
1493
|
+
|
|
1494
|
+
## What You're Building
|
|
1495
|
+
|
|
1496
|
+
**Type:** ${type}
|
|
1497
|
+
**Description:** ${description}
|
|
1498
|
+
|
|
1499
|
+
## Requirements
|
|
1500
|
+
|
|
1501
|
+
${instructions}
|
|
1502
|
+
|
|
1503
|
+
## Development Guidelines
|
|
1504
|
+
|
|
1505
|
+
### Testing Strategy
|
|
1506
|
+
- Write tests as you build
|
|
1507
|
+
- Test happy paths and error cases
|
|
1508
|
+
- Keep tests focused and fast
|
|
1509
|
+
|
|
1510
|
+
### Code Organization
|
|
1511
|
+
- Keep files small and focused
|
|
1512
|
+
- Group related code together
|
|
1513
|
+
- Use clear, descriptive names
|
|
1514
|
+
|
|
1515
|
+
## Integration with GTM
|
|
1516
|
+
|
|
1517
|
+
This service will be part of a GTM (Go-To-Market) workspace:
|
|
1518
|
+
- Will have autonomous service agent (you!)
|
|
1519
|
+
- Can @-mention peer services
|
|
1520
|
+
- Journal entries sync to GTM parent
|
|
1521
|
+
- Coordinates with other services via Service Manager
|
|
1522
|
+
|
|
1523
|
+
## Getting Started
|
|
1524
|
+
|
|
1525
|
+
1. Implement core features (see checklist above)
|
|
1526
|
+
2. Add tests
|
|
1527
|
+
3. Update knowledge docs as you build
|
|
1528
|
+
4. Test locally
|
|
1529
|
+
5. Ready to onboard to GTM: \`jfl onboard .\`
|
|
1530
|
+
|
|
1531
|
+
## Questions to Answer
|
|
1532
|
+
|
|
1533
|
+
As you build, consider:
|
|
1534
|
+
- What data models are needed?
|
|
1535
|
+
- What external APIs or services to integrate?
|
|
1536
|
+
- What environment variables are required?
|
|
1537
|
+
- What are the deployment requirements?
|
|
1538
|
+
- How will this be tested?
|
|
1539
|
+
- How will this be monitored?
|
|
1540
|
+
|
|
1541
|
+
Update this file as you answer these questions.
|
|
1542
|
+
`;
|
|
1543
|
+
}
|
|
1544
|
+
// ============================================================================
|
|
1545
|
+
// .gitignore Generation
|
|
1546
|
+
// ============================================================================
|
|
1547
|
+
function generateGitignore(type) {
|
|
1548
|
+
const base = `# Dependencies
|
|
1549
|
+
node_modules/
|
|
1550
|
+
.pnpm-store/
|
|
1551
|
+
|
|
1552
|
+
# Build output
|
|
1553
|
+
dist/
|
|
1554
|
+
bin/
|
|
1555
|
+
build/
|
|
1556
|
+
.next/
|
|
1557
|
+
|
|
1558
|
+
# Environment
|
|
1559
|
+
.env
|
|
1560
|
+
.env.local
|
|
1561
|
+
.env.*.local
|
|
1562
|
+
|
|
1563
|
+
# Logs
|
|
1564
|
+
*.log
|
|
1565
|
+
.jfl/logs/
|
|
1566
|
+
logs/
|
|
1567
|
+
|
|
1568
|
+
# OS
|
|
1569
|
+
.DS_Store
|
|
1570
|
+
Thumbs.db
|
|
1571
|
+
|
|
1572
|
+
# IDE
|
|
1573
|
+
.vscode/
|
|
1574
|
+
.idea/
|
|
1575
|
+
*.swp
|
|
1576
|
+
*.swo
|
|
1577
|
+
`;
|
|
1578
|
+
if (type === "web") {
|
|
1579
|
+
return base + `
|
|
1580
|
+
# Next.js
|
|
1581
|
+
.next/
|
|
1582
|
+
out/
|
|
1583
|
+
`;
|
|
1584
|
+
}
|
|
1585
|
+
if (type === "infrastructure" || type === "container") {
|
|
1586
|
+
return base + `
|
|
1587
|
+
# Docker
|
|
1588
|
+
*.tar
|
|
1589
|
+
`;
|
|
1590
|
+
}
|
|
1591
|
+
return base;
|
|
1592
|
+
}
|
|
1593
|
+
// ============================================================================
|
|
1594
|
+
// AI Tool Launching
|
|
1595
|
+
// ============================================================================
|
|
1596
|
+
async function launchAITool(toolName, servicePath, serviceName, serviceType, description) {
|
|
1597
|
+
switch (toolName) {
|
|
1598
|
+
case "claude":
|
|
1599
|
+
await launchClaudeCode(servicePath, serviceName);
|
|
1600
|
+
break;
|
|
1601
|
+
case "ralph":
|
|
1602
|
+
await launchRalph(servicePath, serviceName, serviceType, description);
|
|
1603
|
+
break;
|
|
1604
|
+
default:
|
|
1605
|
+
throw new Error(`Unknown AI tool: ${toolName}`);
|
|
1606
|
+
}
|
|
1607
|
+
}
|
|
1608
|
+
async function launchClaudeCode(servicePath, serviceName) {
|
|
1609
|
+
console.log(chalk.cyan(`\n🤖 Launching Claude Code...\n`));
|
|
1610
|
+
console.log(chalk.gray(`Read CLAUDE.md for service requirements\n`));
|
|
1611
|
+
// Spawn Claude in service directory
|
|
1612
|
+
const child = spawn("claude", [], {
|
|
1613
|
+
cwd: servicePath,
|
|
1614
|
+
stdio: "inherit",
|
|
1615
|
+
shell: true,
|
|
1616
|
+
});
|
|
1617
|
+
// Wait for Claude to close
|
|
1618
|
+
await new Promise((resolve) => {
|
|
1619
|
+
child.on("exit", () => resolve());
|
|
1620
|
+
});
|
|
1621
|
+
// Offer to onboard automatically
|
|
1622
|
+
console.log();
|
|
1623
|
+
const shouldOnboard = await p.confirm({
|
|
1624
|
+
message: "Onboard this service to GTM now?",
|
|
1625
|
+
initialValue: true,
|
|
1626
|
+
});
|
|
1627
|
+
if (!p.isCancel(shouldOnboard) && shouldOnboard) {
|
|
1628
|
+
try {
|
|
1629
|
+
await onboardCommand(servicePath, { skipGit: true });
|
|
1630
|
+
}
|
|
1631
|
+
catch (error) {
|
|
1632
|
+
console.log(chalk.yellow(`\n⚠️ Onboard failed: ${error.message}`));
|
|
1633
|
+
console.log(chalk.gray(`You can onboard manually later: jfl onboard ${servicePath}\n`));
|
|
1634
|
+
}
|
|
1635
|
+
}
|
|
1636
|
+
else {
|
|
1637
|
+
console.log(chalk.gray(`\nOnboard later: jfl onboard ${servicePath}\n`));
|
|
1638
|
+
}
|
|
1639
|
+
}
|
|
1640
|
+
async function launchRalph(servicePath, serviceName, serviceType, description) {
|
|
1641
|
+
// Generate PRD file for Ralph
|
|
1642
|
+
const prdPath = join(servicePath, "PRD.json");
|
|
1643
|
+
const prd = {
|
|
1644
|
+
title: `Build ${serviceName}`,
|
|
1645
|
+
description,
|
|
1646
|
+
requirements: getTypeSpecificRequirements(serviceType),
|
|
1647
|
+
techStack: getTypeSpecificStack(serviceType),
|
|
1648
|
+
acceptance_criteria: getTypeSpecificCriteria(serviceType),
|
|
1649
|
+
};
|
|
1650
|
+
writeFileSync(prdPath, JSON.stringify(prd, null, 2));
|
|
1651
|
+
console.log(chalk.cyan(`\n🤖 Launching Ralph autonomous loop...\n`));
|
|
1652
|
+
console.log(chalk.gray(`PRD generated at ${prdPath}\n`));
|
|
1653
|
+
// Spawn Ralph with PRD
|
|
1654
|
+
const child = spawn("ralph-tui", ["run", "--prd", prdPath], {
|
|
1655
|
+
cwd: servicePath,
|
|
1656
|
+
stdio: "inherit",
|
|
1657
|
+
shell: true,
|
|
1658
|
+
});
|
|
1659
|
+
await new Promise((resolve) => {
|
|
1660
|
+
child.on("exit", () => resolve());
|
|
1661
|
+
});
|
|
1662
|
+
// Offer to onboard
|
|
1663
|
+
console.log();
|
|
1664
|
+
const shouldOnboard = await p.confirm({
|
|
1665
|
+
message: "Onboard this service to GTM now?",
|
|
1666
|
+
initialValue: true,
|
|
1667
|
+
});
|
|
1668
|
+
if (!p.isCancel(shouldOnboard) && shouldOnboard) {
|
|
1669
|
+
try {
|
|
1670
|
+
await onboardCommand(servicePath, { skipGit: true });
|
|
1671
|
+
}
|
|
1672
|
+
catch (error) {
|
|
1673
|
+
console.log(chalk.yellow(`\n⚠️ Onboard failed: ${error.message}`));
|
|
1674
|
+
console.log(chalk.gray(`You can onboard manually later: jfl onboard ${servicePath}\n`));
|
|
1675
|
+
}
|
|
1676
|
+
}
|
|
1677
|
+
else {
|
|
1678
|
+
console.log(chalk.gray(`\nOnboard later: jfl onboard ${servicePath}\n`));
|
|
1679
|
+
}
|
|
1680
|
+
}
|
|
1681
|
+
function getTypeSpecificRequirements(type) {
|
|
1682
|
+
switch (type) {
|
|
1683
|
+
case "api":
|
|
1684
|
+
return [
|
|
1685
|
+
"Implement health check endpoint",
|
|
1686
|
+
"Add request validation",
|
|
1687
|
+
"Implement core API routes",
|
|
1688
|
+
"Add error handling",
|
|
1689
|
+
"Write API tests",
|
|
1690
|
+
];
|
|
1691
|
+
case "web":
|
|
1692
|
+
return [
|
|
1693
|
+
"Set up page layouts",
|
|
1694
|
+
"Build reusable components",
|
|
1695
|
+
"Add styling",
|
|
1696
|
+
"Connect to backend APIs",
|
|
1697
|
+
"Implement routing",
|
|
1698
|
+
];
|
|
1699
|
+
case "worker":
|
|
1700
|
+
return [
|
|
1701
|
+
"Define job types",
|
|
1702
|
+
"Implement job handlers",
|
|
1703
|
+
"Add error handling and retries",
|
|
1704
|
+
"Set up job monitoring",
|
|
1705
|
+
"Write job tests",
|
|
1706
|
+
];
|
|
1707
|
+
case "cli":
|
|
1708
|
+
return [
|
|
1709
|
+
"Define CLI commands",
|
|
1710
|
+
"Add command arguments/options",
|
|
1711
|
+
"Implement command logic",
|
|
1712
|
+
"Add help text",
|
|
1713
|
+
"Write command tests",
|
|
1714
|
+
];
|
|
1715
|
+
case "agent":
|
|
1716
|
+
return [
|
|
1717
|
+
"Implement agent logic in execute() method",
|
|
1718
|
+
"Configure triggers in manifest.yaml",
|
|
1719
|
+
"Write eval script returning a scalar metric",
|
|
1720
|
+
"Add tests for agent logic",
|
|
1721
|
+
"Test with Context Hub running",
|
|
1722
|
+
"Register with GTM via jfl onboard",
|
|
1723
|
+
];
|
|
1724
|
+
default:
|
|
1725
|
+
return ["Implement core functionality", "Add tests", "Document usage"];
|
|
1726
|
+
}
|
|
1727
|
+
}
|
|
1728
|
+
function getTypeSpecificStack(type) {
|
|
1729
|
+
switch (type) {
|
|
1730
|
+
case "api":
|
|
1731
|
+
return ["Fastify", "TypeScript", "Vitest"];
|
|
1732
|
+
case "web":
|
|
1733
|
+
return ["Next.js", "React", "TypeScript"];
|
|
1734
|
+
case "worker":
|
|
1735
|
+
return ["BullMQ", "TypeScript", "Redis"];
|
|
1736
|
+
case "cli":
|
|
1737
|
+
return ["Commander", "TypeScript", "Chalk"];
|
|
1738
|
+
case "agent":
|
|
1739
|
+
return ["TypeScript", "Context Hub SDK", "Jest", "Eval Scripts"];
|
|
1740
|
+
default:
|
|
1741
|
+
return ["TypeScript", "Node.js"];
|
|
1742
|
+
}
|
|
1743
|
+
}
|
|
1744
|
+
function getTypeSpecificCriteria(type) {
|
|
1745
|
+
switch (type) {
|
|
1746
|
+
case "api":
|
|
1747
|
+
return [
|
|
1748
|
+
"All endpoints return correct status codes",
|
|
1749
|
+
"Request validation works",
|
|
1750
|
+
"Error responses are consistent",
|
|
1751
|
+
"Health check returns 200",
|
|
1752
|
+
"Tests pass",
|
|
1753
|
+
];
|
|
1754
|
+
case "web":
|
|
1755
|
+
return [
|
|
1756
|
+
"Pages render correctly",
|
|
1757
|
+
"Components are reusable",
|
|
1758
|
+
"Styling is consistent",
|
|
1759
|
+
"API calls work",
|
|
1760
|
+
"Build succeeds",
|
|
1761
|
+
];
|
|
1762
|
+
case "worker":
|
|
1763
|
+
return [
|
|
1764
|
+
"Jobs process successfully",
|
|
1765
|
+
"Failed jobs retry correctly",
|
|
1766
|
+
"Worker handles shutdown gracefully",
|
|
1767
|
+
"Tests pass",
|
|
1768
|
+
];
|
|
1769
|
+
case "cli":
|
|
1770
|
+
return [
|
|
1771
|
+
"Commands execute correctly",
|
|
1772
|
+
"Help text is clear",
|
|
1773
|
+
"Error messages are helpful",
|
|
1774
|
+
"Tests pass",
|
|
1775
|
+
];
|
|
1776
|
+
case "agent":
|
|
1777
|
+
return [
|
|
1778
|
+
"Agent loop runs end-to-end",
|
|
1779
|
+
"Eval script returns valid metric",
|
|
1780
|
+
"Context Hub integration works",
|
|
1781
|
+
"Journal entries are written",
|
|
1782
|
+
"Tests pass",
|
|
1783
|
+
];
|
|
1784
|
+
default:
|
|
1785
|
+
return ["Core functionality works", "Tests pass", "Documentation is complete"];
|
|
1786
|
+
}
|
|
1787
|
+
}
|
|
1788
|
+
// ============================================================================
|
|
1789
|
+
// Manual Next Steps
|
|
1790
|
+
// ============================================================================
|
|
1791
|
+
function showManualNextSteps(location, name) {
|
|
1792
|
+
console.log(chalk.cyan("\n✓ Service scaffolded!\n"));
|
|
1793
|
+
console.log(chalk.gray("Next steps:"));
|
|
1794
|
+
console.log(chalk.gray(` 1. cd ${location}`));
|
|
1795
|
+
console.log(chalk.gray(` 2. npm install`));
|
|
1796
|
+
console.log(chalk.gray(` 3. npm run dev`));
|
|
1797
|
+
console.log(chalk.gray(` 4. Build your service`));
|
|
1798
|
+
console.log(chalk.gray(` 5. jfl onboard ${location}\n`));
|
|
1799
|
+
}
|
|
1800
|
+
//# sourceMappingURL=services-create.js.map
|