@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
package/dist/index.js
ADDED
|
@@ -0,0 +1,1707 @@
|
|
|
1
|
+
#!/usr/bin/env node
|
|
2
|
+
;
|
|
3
|
+
globalThis.__jfl_start = Date.now();
|
|
4
|
+
/**
|
|
5
|
+
* JFL CLI - Just Fucking Launch
|
|
6
|
+
*
|
|
7
|
+
* Free tier: Works standalone with BYOAI
|
|
8
|
+
* Paid tier: Connects to platform for dashboard, integrations, hosted agents
|
|
9
|
+
*/
|
|
10
|
+
import { Command } from "commander";
|
|
11
|
+
import chalk from "chalk";
|
|
12
|
+
import { spawn } from "child_process";
|
|
13
|
+
import { readFileSync } from "fs";
|
|
14
|
+
import { join } from "path";
|
|
15
|
+
import * as path from "path";
|
|
16
|
+
import { fileURLToPath } from "url";
|
|
17
|
+
import { TENET_DEBUG } from "./utils/tenet-env.js";
|
|
18
|
+
// Lazy imports - only load when needed to reduce startup latency
|
|
19
|
+
// All commands use dynamic import() to defer loading until invoked
|
|
20
|
+
import { JFL_PATHS } from "./utils/jfl-paths.js";
|
|
21
|
+
// Telemetry loaded lazily on first track() call
|
|
22
|
+
let _telemetry;
|
|
23
|
+
async function getTelemetry() {
|
|
24
|
+
if (!_telemetry) {
|
|
25
|
+
const mod = await import("./lib/telemetry.js");
|
|
26
|
+
_telemetry = mod.telemetry;
|
|
27
|
+
}
|
|
28
|
+
return _telemetry;
|
|
29
|
+
}
|
|
30
|
+
// Migration check runs in background, doesn't block startup
|
|
31
|
+
import("./utils/jfl-migration.js").then(mod => mod.checkAndMigrate({ silent: true })).catch(() => { });
|
|
32
|
+
const program = new Command();
|
|
33
|
+
// Telemetry hooks — auto-track all commands (lazy load telemetry)
|
|
34
|
+
program.hook('preAction', async (_thisCommand, actionCommand) => {
|
|
35
|
+
;
|
|
36
|
+
actionCommand.__telemetryStart = Date.now();
|
|
37
|
+
if (TENET_DEBUG) {
|
|
38
|
+
console.error(`[timing] preAction start: ${Date.now() - globalThis.__jfl_start}ms`);
|
|
39
|
+
}
|
|
40
|
+
// ResourceOptimizer: decide() before every command (<5ms)
|
|
41
|
+
try {
|
|
42
|
+
const { resourceOptimizerPreAction, applyGuidance } = await import("./lib/resource-optimizer-middleware.js");
|
|
43
|
+
const guidance = await resourceOptimizerPreAction(actionCommand.name());
|
|
44
|
+
actionCommand.__roGuidance = guidance;
|
|
45
|
+
// Apply guidance (delay if thermal/CPU issue)
|
|
46
|
+
if (guidance.action !== "passthrough" && guidance.action !== "monitor") {
|
|
47
|
+
await applyGuidance(guidance);
|
|
48
|
+
if (guidance.delay_ms > 0) {
|
|
49
|
+
const chalk = (await import("chalk")).default;
|
|
50
|
+
console.log(chalk.yellow(` ⚡ ${guidance.reason}`));
|
|
51
|
+
}
|
|
52
|
+
}
|
|
53
|
+
}
|
|
54
|
+
catch {
|
|
55
|
+
// Never block commands for RO failures
|
|
56
|
+
}
|
|
57
|
+
if (TENET_DEBUG) {
|
|
58
|
+
console.error(`[timing] preAction end: ${Date.now() - globalThis.__jfl_start}ms`);
|
|
59
|
+
}
|
|
60
|
+
});
|
|
61
|
+
program.hook('postAction', async (_thisCommand, actionCommand) => {
|
|
62
|
+
if (TENET_DEBUG) {
|
|
63
|
+
console.error(`[timing] postAction start: ${Date.now() - globalThis.__jfl_start}ms`);
|
|
64
|
+
}
|
|
65
|
+
const start = actionCommand.__telemetryStart;
|
|
66
|
+
const commandName = actionCommand.name();
|
|
67
|
+
const durationMs = start ? Date.now() - start : undefined;
|
|
68
|
+
// Fire-and-forget: don't block CLI exit for telemetry/RO
|
|
69
|
+
// These run in background; process.on('beforeExit') flushes telemetry
|
|
70
|
+
Promise.all([
|
|
71
|
+
// ResourceOptimizer: record transition
|
|
72
|
+
import("./lib/resource-optimizer-middleware.js")
|
|
73
|
+
.then(m => m.resourceOptimizerPostAction(commandName, process.cwd()))
|
|
74
|
+
.catch(() => { }),
|
|
75
|
+
// Telemetry: track command
|
|
76
|
+
getTelemetry()
|
|
77
|
+
.then(t => t.track({
|
|
78
|
+
category: 'command',
|
|
79
|
+
event: `command:${commandName}`,
|
|
80
|
+
command: commandName,
|
|
81
|
+
duration_ms: durationMs,
|
|
82
|
+
success: true,
|
|
83
|
+
}))
|
|
84
|
+
.catch(() => { }),
|
|
85
|
+
]).catch(() => { });
|
|
86
|
+
if (TENET_DEBUG) {
|
|
87
|
+
console.error(`[timing] postAction end: ${Date.now() - globalThis.__jfl_start}ms`);
|
|
88
|
+
}
|
|
89
|
+
});
|
|
90
|
+
const HELP_GROUPS = {
|
|
91
|
+
"Getting Started": ["init", "status", "whoami", "hud", "ide", "doctor"],
|
|
92
|
+
"Daily Use": ["synopsis", "ask", "improve", "organize", "events", "voice", "kanban"],
|
|
93
|
+
"Management": ["services", "portfolio", "flows", "hooks", "scope", "memory", "eval", "findings", "viz", "telemetry", "context-hub", "skills", "ci"],
|
|
94
|
+
"Platform": ["login", "deploy", "wallet", "preferences"],
|
|
95
|
+
"Advanced": ["peter", "orchestrate", "openclaw", "ralph", "agent", "train", "setup"],
|
|
96
|
+
};
|
|
97
|
+
const HIDDEN_COMMANDS = new Set([
|
|
98
|
+
"repair", "validate-settings", "test", "brand", "content", "feedback",
|
|
99
|
+
"migrate-services", "onboard", "service-agent", "dashboard", "profile",
|
|
100
|
+
"gtm", "clawdbot", "update", "service-manager", "logout", "agents", "help",
|
|
101
|
+
]);
|
|
102
|
+
program.configureHelp({
|
|
103
|
+
formatHelp(cmd, helper) {
|
|
104
|
+
// For sub-commands, render standard Commander help so arguments/options are visible
|
|
105
|
+
if (cmd.parent !== null) {
|
|
106
|
+
const lines = [];
|
|
107
|
+
const pad = 22;
|
|
108
|
+
lines.push("");
|
|
109
|
+
lines.push(` Usage: ${helper.commandUsage(cmd)}`);
|
|
110
|
+
const desc = helper.commandDescription(cmd);
|
|
111
|
+
if (desc) {
|
|
112
|
+
lines.push("");
|
|
113
|
+
lines.push(` ${desc}`);
|
|
114
|
+
}
|
|
115
|
+
const args = helper.visibleArguments(cmd);
|
|
116
|
+
if (args.length > 0) {
|
|
117
|
+
lines.push("");
|
|
118
|
+
lines.push(" Arguments:");
|
|
119
|
+
for (const arg of args) {
|
|
120
|
+
lines.push(` ${helper.argumentTerm(arg).padEnd(pad)}${helper.argumentDescription(arg)}`);
|
|
121
|
+
}
|
|
122
|
+
}
|
|
123
|
+
const opts = helper.visibleOptions(cmd);
|
|
124
|
+
if (opts.length > 0) {
|
|
125
|
+
lines.push("");
|
|
126
|
+
lines.push(" Options:");
|
|
127
|
+
for (const opt of opts) {
|
|
128
|
+
lines.push(` ${helper.optionTerm(opt).padEnd(pad)}${helper.optionDescription(opt)}`);
|
|
129
|
+
}
|
|
130
|
+
}
|
|
131
|
+
const cmds = helper.visibleCommands(cmd);
|
|
132
|
+
if (cmds.length > 0) {
|
|
133
|
+
lines.push("");
|
|
134
|
+
lines.push(" Commands:");
|
|
135
|
+
for (const c of cmds) {
|
|
136
|
+
lines.push(` ${helper.subcommandTerm(c).padEnd(pad)}${helper.subcommandDescription(c)}`);
|
|
137
|
+
}
|
|
138
|
+
}
|
|
139
|
+
lines.push("");
|
|
140
|
+
return lines.join("\n");
|
|
141
|
+
}
|
|
142
|
+
// Root command: custom grouped format
|
|
143
|
+
const lines = [];
|
|
144
|
+
lines.push("");
|
|
145
|
+
lines.push(chalk.bold(" JFL - Just Fucking Launch"));
|
|
146
|
+
lines.push("");
|
|
147
|
+
lines.push(chalk.gray(" Your context layer. Any project. Any AI."));
|
|
148
|
+
lines.push("");
|
|
149
|
+
const allCommands = cmd.commands;
|
|
150
|
+
const commandMap = new Map();
|
|
151
|
+
for (const sub of allCommands) {
|
|
152
|
+
commandMap.set(sub.name(), sub.description());
|
|
153
|
+
}
|
|
154
|
+
for (const [group, names] of Object.entries(HELP_GROUPS)) {
|
|
155
|
+
lines.push(chalk.cyan(` ${group}`));
|
|
156
|
+
for (const name of names) {
|
|
157
|
+
const desc = commandMap.get(name);
|
|
158
|
+
if (desc) {
|
|
159
|
+
lines.push(` ${name.padEnd(18)}${desc}`);
|
|
160
|
+
}
|
|
161
|
+
}
|
|
162
|
+
lines.push("");
|
|
163
|
+
}
|
|
164
|
+
lines.push(chalk.gray(" Run jfl <command> --help for details"));
|
|
165
|
+
lines.push("");
|
|
166
|
+
return lines.join("\n");
|
|
167
|
+
},
|
|
168
|
+
});
|
|
169
|
+
function getVersion() {
|
|
170
|
+
try {
|
|
171
|
+
const pkgPath = new URL("../package.json", import.meta.url);
|
|
172
|
+
const pkg = JSON.parse(readFileSync(pkgPath, "utf-8"));
|
|
173
|
+
return pkg.version ?? "0.0.0";
|
|
174
|
+
}
|
|
175
|
+
catch {
|
|
176
|
+
return "0.0.0";
|
|
177
|
+
}
|
|
178
|
+
}
|
|
179
|
+
program
|
|
180
|
+
.name("tenet")
|
|
181
|
+
.description("TENET — The operating system for AI agent teams")
|
|
182
|
+
.version(getVersion())
|
|
183
|
+
.option("--no-update", "Skip automatic update check")
|
|
184
|
+
.action(async (options) => {
|
|
185
|
+
// Always update on session start (unless --no-update flag)
|
|
186
|
+
if (options.update !== false) {
|
|
187
|
+
const { updateCommand } = await import("./commands/update.js");
|
|
188
|
+
await updateCommand({ autoUpdate: true });
|
|
189
|
+
console.log(); // Add spacing before session starts
|
|
190
|
+
}
|
|
191
|
+
const { sessionCommand } = await import("./commands/session.js");
|
|
192
|
+
await sessionCommand({});
|
|
193
|
+
});
|
|
194
|
+
// ============================================================================
|
|
195
|
+
// FREE TIER COMMANDS (work offline/standalone)
|
|
196
|
+
// ============================================================================
|
|
197
|
+
program
|
|
198
|
+
.command("start")
|
|
199
|
+
.description("One-command activation: init → setup → launch (zero to intelligence in <2 min)")
|
|
200
|
+
.argument("[name]", "Project name or path")
|
|
201
|
+
.option("--repo <path>", "Analyze existing repo and create GTM workspace")
|
|
202
|
+
.option("--pi", "Launch Pi instead of Claude Code")
|
|
203
|
+
.option("--ci", "Deploy CI workflows (eval + review)")
|
|
204
|
+
.option("-s, --service <path...>", "Service repo paths/URLs to onboard (repeatable)")
|
|
205
|
+
.option("--no-launch", "Don't launch editor after setup")
|
|
206
|
+
.action(async (name, options) => {
|
|
207
|
+
const { startCommand } = await import("./commands/start.js");
|
|
208
|
+
await startCommand(name, options);
|
|
209
|
+
});
|
|
210
|
+
program
|
|
211
|
+
.command("init")
|
|
212
|
+
.description("Initialize a new JFL project")
|
|
213
|
+
.option("-n, --name <name>", "Project name")
|
|
214
|
+
.option("-t, --type <type>", "Workspace type: gtm, portfolio, service", "gtm")
|
|
215
|
+
.option("-d, --description <desc>", "Project description")
|
|
216
|
+
.option("-s, --service <path...>", "Service repo paths/URLs to onboard (repeatable)")
|
|
217
|
+
.option("--from-service", "Deep-analyze current directory and create GTM in sibling directory")
|
|
218
|
+
.option("--ci", "Deploy eval + review CI workflows after init")
|
|
219
|
+
.option("--no-interactive", "Skip all prompts, use defaults")
|
|
220
|
+
.option("--no-search", "Skip search setup")
|
|
221
|
+
.option("--no-services", "Skip service onboarding")
|
|
222
|
+
.option("--no-launch", "Skip launching Claude Code after init")
|
|
223
|
+
.action(async (options) => {
|
|
224
|
+
const { initCommand } = await import("./commands/init.js");
|
|
225
|
+
await initCommand(options);
|
|
226
|
+
});
|
|
227
|
+
program
|
|
228
|
+
.command("migrate")
|
|
229
|
+
.description("Migrate project from JFL to Tenet naming (.jfl/ → .tenet/, configs, scripts)")
|
|
230
|
+
.option("--dry-run", "Show what would change without making changes")
|
|
231
|
+
.option("--force", "Overwrite existing .tenet/ directory")
|
|
232
|
+
.option("--rollback", "Reverse: migrate from Tenet back to JFL")
|
|
233
|
+
.action(async (options) => {
|
|
234
|
+
const { migrateTenetCommand } = await import("./commands/migrate-tenet.js");
|
|
235
|
+
await migrateTenetCommand(options);
|
|
236
|
+
});
|
|
237
|
+
program
|
|
238
|
+
.command("repair")
|
|
239
|
+
.description("Repair a JFL project missing .jfl directory")
|
|
240
|
+
.action(async () => {
|
|
241
|
+
const { repairCommand } = await import("./commands/repair.js");
|
|
242
|
+
await repairCommand();
|
|
243
|
+
});
|
|
244
|
+
program
|
|
245
|
+
.command("validate-settings")
|
|
246
|
+
.description("Validate and repair .claude/settings.json")
|
|
247
|
+
.option("--fix", "Attempt to auto-repair common issues")
|
|
248
|
+
.option("--json", "Output in JSON format")
|
|
249
|
+
.action(async (options) => {
|
|
250
|
+
const { validateSettingsCommand } = await import("./commands/validate-settings.js");
|
|
251
|
+
await validateSettingsCommand(options);
|
|
252
|
+
});
|
|
253
|
+
program
|
|
254
|
+
.command("hud")
|
|
255
|
+
.description("Show campaign dashboard")
|
|
256
|
+
.option("-c, --compact", "Show compact one-line status")
|
|
257
|
+
.action(async (options) => {
|
|
258
|
+
const { hudCommand } = await import("./commands/hud.js");
|
|
259
|
+
await hudCommand(options);
|
|
260
|
+
});
|
|
261
|
+
program
|
|
262
|
+
.command("status")
|
|
263
|
+
.description("Show project status")
|
|
264
|
+
.action(async () => {
|
|
265
|
+
if (TENET_DEBUG) {
|
|
266
|
+
const _t = Date.now();
|
|
267
|
+
const { statusCommand } = await import("./commands/status.js");
|
|
268
|
+
console.error(`[timing] import status.js: ${Date.now() - _t}ms`);
|
|
269
|
+
const _t2 = Date.now();
|
|
270
|
+
await statusCommand();
|
|
271
|
+
console.error(`[timing] statusCommand exec: ${Date.now() - _t2}ms`);
|
|
272
|
+
}
|
|
273
|
+
else {
|
|
274
|
+
const { statusCommand } = await import("./commands/status.js");
|
|
275
|
+
await statusCommand();
|
|
276
|
+
}
|
|
277
|
+
});
|
|
278
|
+
program
|
|
279
|
+
.command("whoami")
|
|
280
|
+
.description("Print current user and project info")
|
|
281
|
+
.action(async () => {
|
|
282
|
+
const { whoamiCommand } = await import("./commands/whoami.js");
|
|
283
|
+
whoamiCommand();
|
|
284
|
+
});
|
|
285
|
+
// RL learning agents now accessible via: jfl agents rl <action>
|
|
286
|
+
// (integrated into existing agents command)
|
|
287
|
+
// IDE workspace command — uses dynamic imports to avoid linter stripping
|
|
288
|
+
const ide = program.command("ide").description("Launch smart development environment (jfl ide) or manage workspace (jfl ide <command>)");
|
|
289
|
+
ide.command("launch", { isDefault: true }).description("Launch workspace (same as 'jfl ide')").option("--json", "Output as JSON").option("--sidebar", "Include sidebar pane (20% width)").action(async (options) => { const m = await import("./commands/ide.js"); await m.ideLaunchCommand(options); });
|
|
290
|
+
ide.command("add").description("Add a surface to the workspace").argument("[name]", "Surface name (agent, built-in type, or service)").option("--row <n>", "Row index (0-based)").option("--position <n>", "Position within row (0-based)").option("--title <title>", "Custom surface title").option("--cmd <command>", "Custom surface command").action(async (name, options) => { const m = await import("./commands/ide.js"); await m.ideAddCommand(name, options); });
|
|
291
|
+
ide.command("remove").description("Remove a surface from the workspace").argument("<name>", "Surface name or title to remove").action(async (name) => { const m = await import("./commands/ide.js"); await m.ideRemoveCommand(name); });
|
|
292
|
+
ide.command("available").description("List available surface types, agents, and services").action(async () => { const m = await import("./commands/ide.js"); await m.ideAvailableCommand(); });
|
|
293
|
+
ide.command("status").description("Show current workspace layout and session state").option("--json", "Output as JSON").action(async (options) => { const m = await import("./commands/ide.js"); await m.ideStatusCommand(options); });
|
|
294
|
+
ide.command("surfaces").description("List active surfaces with live sidebar data").option("--json", "Output as JSON").action(async (options) => { const m = await import("./commands/ide.js"); await m.ideSurfacesCommand(options); });
|
|
295
|
+
ide.command("stop").description("Stop the running workspace session").action(async () => { const m = await import("./commands/ide.js"); await m.ideStopCommand(); });
|
|
296
|
+
ide.command("restart").description("Restart the workspace session").action(async () => { const m = await import("./commands/ide.js"); await m.ideRestartCommand(); });
|
|
297
|
+
ide.command("reset").description("Reset workspace to welcome state").action(async () => { const m = await import("./commands/ide.js"); await m.ideResetCommand(); });
|
|
298
|
+
ide.command("open").description("Open a child project/service in the workspace").argument("<name>", "Service or product name to open").action(async (name) => { const m = await import("./commands/ide.js"); await m.ideOpenCommand(name); });
|
|
299
|
+
ide.command("up").description("Navigate to parent project (portfolio or GTM)").action(async () => { const m = await import("./commands/ide.js"); await m.ideUpCommand(); });
|
|
300
|
+
ide.command("config").description("View or set IDE configuration").argument("[key]", "Config key (e.g., primary, backend)").argument("[value]", "Config value").action(async (key, value) => { const m = await import("./commands/ide.js"); await m.ideConfigCommand(key, value); });
|
|
301
|
+
program
|
|
302
|
+
.command("context-hub")
|
|
303
|
+
.description("Manage Context Hub daemon (unified context for AI agents)")
|
|
304
|
+
.argument("[action]", "start, stop, restart, status, ensure, ensure-all, doctor, dashboard, install-daemon, uninstall-daemon, query, serve")
|
|
305
|
+
.option("-p, --port <port>", "Port to run on (default: per-project)")
|
|
306
|
+
.option("-g, --global", "Run in global mode (serve all GTM projects)")
|
|
307
|
+
.option("-q, --quiet", "Suppress output (for daemon use)")
|
|
308
|
+
.option("--clean", "Remove stale entries (for doctor)")
|
|
309
|
+
.option("--purge", "Also delete token file (for stop)")
|
|
310
|
+
.option("--project-root <path>", "Override project root directory")
|
|
311
|
+
.allowUnknownOption()
|
|
312
|
+
.action(async (action, options) => {
|
|
313
|
+
const { contextHubCommand } = await import("./commands/context-hub.js");
|
|
314
|
+
await contextHubCommand(action, {
|
|
315
|
+
port: options.port ? parseInt(options.port, 10) : undefined,
|
|
316
|
+
global: options.global || false,
|
|
317
|
+
quiet: options.quiet || false,
|
|
318
|
+
projectRoot: options.projectRoot,
|
|
319
|
+
});
|
|
320
|
+
});
|
|
321
|
+
program
|
|
322
|
+
.command("hooks")
|
|
323
|
+
.description("Manage Claude Code HTTP hooks for Context Hub")
|
|
324
|
+
.argument("[action]", "init, status, remove")
|
|
325
|
+
.action(async (action) => {
|
|
326
|
+
const { hooksCommand } = await import("./commands/hooks.js");
|
|
327
|
+
await hooksCommand(action);
|
|
328
|
+
});
|
|
329
|
+
program
|
|
330
|
+
.command("flows")
|
|
331
|
+
.description("Manage declarative event flows")
|
|
332
|
+
.argument("[action]", "list, add, test, enable, disable, approve")
|
|
333
|
+
.argument("[name]", "Flow name (for test/enable/disable)")
|
|
334
|
+
.option("--flow <name>", "Filter approvals to a specific flow")
|
|
335
|
+
.option("--all", "Approve all pending gated executions")
|
|
336
|
+
.action(async (action, name, options) => {
|
|
337
|
+
const { flowsCommand } = await import("./commands/flows.js");
|
|
338
|
+
await flowsCommand(action, name, options);
|
|
339
|
+
});
|
|
340
|
+
program
|
|
341
|
+
.command("scope")
|
|
342
|
+
.description("View and manage service context scopes")
|
|
343
|
+
.argument("[action]", "list, set, test, viz")
|
|
344
|
+
.argument("[args...]", "Arguments for the action")
|
|
345
|
+
.action(async (action, args) => {
|
|
346
|
+
const { scopeCommand } = await import("./commands/scope.js");
|
|
347
|
+
await scopeCommand(action, ...args);
|
|
348
|
+
});
|
|
349
|
+
program
|
|
350
|
+
.command("synopsis")
|
|
351
|
+
.description("Show work summary (journal + commits + code)")
|
|
352
|
+
.argument("[hours]", "Hours to look back (default: 24)", "24")
|
|
353
|
+
.argument("[author]", "Filter by author name")
|
|
354
|
+
.action(async (hours, author) => {
|
|
355
|
+
const { synopsisCommand } = await import("./commands/synopsis.js");
|
|
356
|
+
await synopsisCommand(hours, author);
|
|
357
|
+
});
|
|
358
|
+
program
|
|
359
|
+
.command("service-manager")
|
|
360
|
+
.description("Manage Service Manager API daemon")
|
|
361
|
+
.argument("[action]", "start, stop, restart, status, serve")
|
|
362
|
+
.option("-p, --port <port>", "Port to run on (default: from config or 3402)")
|
|
363
|
+
.action(async (action, options) => {
|
|
364
|
+
const { serviceManagerCommand } = await import("./commands/service-manager.js");
|
|
365
|
+
await serviceManagerCommand(action, {
|
|
366
|
+
port: options.port ? parseInt(options.port, 10) : undefined
|
|
367
|
+
});
|
|
368
|
+
});
|
|
369
|
+
program
|
|
370
|
+
.command("services")
|
|
371
|
+
.description("Manage services across all GTM projects (interactive TUI or CLI)")
|
|
372
|
+
.argument("[action]", "create, scan, list, status, start, stop, deps, validate, sync-agents, or leave empty for TUI")
|
|
373
|
+
.argument("[service]", "Service name")
|
|
374
|
+
.option("--dry-run", "Preview what would be discovered (for scan) or preview sync changes (for sync-agents)")
|
|
375
|
+
.option("--current", "Sync only current service (for sync-agents)")
|
|
376
|
+
.option("--path <path>", "Path to scan (default: current directory)")
|
|
377
|
+
.option("--force", "Force operation (for stop with dependents)")
|
|
378
|
+
.option("--verbose", "Verbose output")
|
|
379
|
+
.option("--fix", "Auto-repair issues (for validate)")
|
|
380
|
+
.option("--json", "Output JSON (for validate)")
|
|
381
|
+
.option("--skip-ai", "Skip AI tool, just scaffold (for create)")
|
|
382
|
+
.action(async (action, service, options) => {
|
|
383
|
+
// Handle scan action
|
|
384
|
+
if (action === "scan") {
|
|
385
|
+
const { scanServices } = await import("./commands/services-scan.js");
|
|
386
|
+
await scanServices({
|
|
387
|
+
path: options.path,
|
|
388
|
+
dryRun: options.dryRun
|
|
389
|
+
});
|
|
390
|
+
return;
|
|
391
|
+
}
|
|
392
|
+
// Handle dependency actions
|
|
393
|
+
if (action === "deps" || action === "dependencies") {
|
|
394
|
+
const { buildDependencyGraph, visualizeDependencies, validateDependencies } = await import("./lib/service-dependencies.js");
|
|
395
|
+
const fs = await import("fs");
|
|
396
|
+
const servicesConfigPath = path.join(JFL_PATHS.data, "services.json");
|
|
397
|
+
const servicesConfig = JSON.parse(fs.readFileSync(servicesConfigPath, "utf-8"));
|
|
398
|
+
if (service === "validate") {
|
|
399
|
+
const result = validateDependencies(servicesConfig.services);
|
|
400
|
+
if (result.valid) {
|
|
401
|
+
console.log(chalk.green("\n✓ All dependencies valid\n"));
|
|
402
|
+
}
|
|
403
|
+
else {
|
|
404
|
+
console.log(chalk.red("\n✗ Dependency validation failed:\n"));
|
|
405
|
+
result.errors.forEach(err => console.log(chalk.red(` - ${err}`)));
|
|
406
|
+
console.log();
|
|
407
|
+
}
|
|
408
|
+
}
|
|
409
|
+
else {
|
|
410
|
+
console.log(visualizeDependencies(servicesConfig.services));
|
|
411
|
+
}
|
|
412
|
+
return;
|
|
413
|
+
}
|
|
414
|
+
// If no action, launch interactive TUI
|
|
415
|
+
if (!action) {
|
|
416
|
+
const { spawn } = await import("child_process");
|
|
417
|
+
const { fileURLToPath } = await import("url");
|
|
418
|
+
const __filename = fileURLToPath(import.meta.url);
|
|
419
|
+
const __dirname = path.dirname(__filename);
|
|
420
|
+
const tui = spawn(process.execPath, [
|
|
421
|
+
path.join(__dirname, "../dist/ui/services-manager.js")
|
|
422
|
+
], {
|
|
423
|
+
stdio: "inherit"
|
|
424
|
+
});
|
|
425
|
+
tui.on("exit", (code) => {
|
|
426
|
+
process.exit(code || 0);
|
|
427
|
+
});
|
|
428
|
+
}
|
|
429
|
+
else {
|
|
430
|
+
// CLI mode
|
|
431
|
+
const { servicesCommand } = await import("./commands/services.js");
|
|
432
|
+
await servicesCommand(action, service, {
|
|
433
|
+
fix: options.fix,
|
|
434
|
+
json: options.json,
|
|
435
|
+
dryRun: options.dryRun,
|
|
436
|
+
current: options.current,
|
|
437
|
+
skipAI: options.skipAi
|
|
438
|
+
});
|
|
439
|
+
}
|
|
440
|
+
});
|
|
441
|
+
program
|
|
442
|
+
.command("onboard")
|
|
443
|
+
.description("Onboard a service repo as a service agent")
|
|
444
|
+
.argument("<path-or-url>", "Local path to service directory, or git URL to clone")
|
|
445
|
+
.option("-n, --name <name>", "Override service name")
|
|
446
|
+
.option("-t, --type <type>", "Override service type (web, api, container, worker, cli, infrastructure, library)")
|
|
447
|
+
.option("-d, --description <desc>", "Override service description")
|
|
448
|
+
.option("--skip-git", "Skip git clone (treat URL as local path)")
|
|
449
|
+
.action(async (pathOrUrl, options) => {
|
|
450
|
+
const { onboardCommand } = await import("./commands/onboard.js");
|
|
451
|
+
await onboardCommand(pathOrUrl, options);
|
|
452
|
+
});
|
|
453
|
+
program
|
|
454
|
+
.command("orchestrate")
|
|
455
|
+
.description("Execute multi-service orchestration workflows")
|
|
456
|
+
.argument("[name]", "Orchestration name to run (omit to list available)")
|
|
457
|
+
.option("--dry-run", "Preview orchestration steps without executing")
|
|
458
|
+
.option("--list", "List available orchestrations")
|
|
459
|
+
.option("--create <name>", "Create new orchestration template")
|
|
460
|
+
.action(async (name, options) => {
|
|
461
|
+
const { orchestrate, listOrchestrations, createOrchestration } = await import("./commands/orchestrate.js");
|
|
462
|
+
if (options.list) {
|
|
463
|
+
await listOrchestrations();
|
|
464
|
+
}
|
|
465
|
+
else if (options.create) {
|
|
466
|
+
await createOrchestration(options.create);
|
|
467
|
+
}
|
|
468
|
+
else if (name) {
|
|
469
|
+
await orchestrate(name, { dryRun: options.dryRun });
|
|
470
|
+
}
|
|
471
|
+
else {
|
|
472
|
+
await listOrchestrations();
|
|
473
|
+
}
|
|
474
|
+
});
|
|
475
|
+
program
|
|
476
|
+
.command("dashboard")
|
|
477
|
+
.description("Launch interactive service monitoring dashboard")
|
|
478
|
+
.action(async () => {
|
|
479
|
+
const { startDashboard } = await import("./ui/service-dashboard.js");
|
|
480
|
+
await startDashboard();
|
|
481
|
+
});
|
|
482
|
+
program
|
|
483
|
+
.command("service-agent")
|
|
484
|
+
.description("Manage service MCP agents")
|
|
485
|
+
.argument("<action>", "init | generate | generate-all | register | unregister | list | clean")
|
|
486
|
+
.argument("[name]", "Service name (required for generate, unregister)")
|
|
487
|
+
.action(async (action, name) => {
|
|
488
|
+
const { init, generate, generateAll, register, unregister, list, clean } = await import("./commands/service-agent.js");
|
|
489
|
+
switch (action) {
|
|
490
|
+
case "init":
|
|
491
|
+
await init(name); // name is optional path
|
|
492
|
+
break;
|
|
493
|
+
case "generate":
|
|
494
|
+
if (!name) {
|
|
495
|
+
console.log(chalk.red("Error: service name required"));
|
|
496
|
+
console.log(chalk.gray("Usage: jfl service-agent generate <service-name>"));
|
|
497
|
+
process.exit(1);
|
|
498
|
+
}
|
|
499
|
+
await generate(name);
|
|
500
|
+
break;
|
|
501
|
+
case "generate-all":
|
|
502
|
+
await generateAll();
|
|
503
|
+
break;
|
|
504
|
+
case "register":
|
|
505
|
+
await register(name);
|
|
506
|
+
break;
|
|
507
|
+
case "unregister":
|
|
508
|
+
if (!name) {
|
|
509
|
+
console.log(chalk.red("Error: service name required"));
|
|
510
|
+
console.log(chalk.gray("Usage: jfl service-agent unregister <service-name>"));
|
|
511
|
+
process.exit(1);
|
|
512
|
+
}
|
|
513
|
+
await unregister(name);
|
|
514
|
+
break;
|
|
515
|
+
case "list":
|
|
516
|
+
await list();
|
|
517
|
+
break;
|
|
518
|
+
case "clean":
|
|
519
|
+
await clean();
|
|
520
|
+
break;
|
|
521
|
+
default:
|
|
522
|
+
console.log(chalk.red(`Unknown action: ${action}`));
|
|
523
|
+
console.log(chalk.gray("Available actions: init, generate, generate-all, register, unregister, list, clean"));
|
|
524
|
+
process.exit(1);
|
|
525
|
+
}
|
|
526
|
+
});
|
|
527
|
+
program
|
|
528
|
+
.command("profile [action]")
|
|
529
|
+
.description("Manage your JFL profile (stored in config)")
|
|
530
|
+
.argument("[action]", "show, edit, export, import, generate")
|
|
531
|
+
.option("-f, --file <path>", "File path for export/import/generate output")
|
|
532
|
+
.action(async (action, options) => {
|
|
533
|
+
const { profileCommand } = await import("./commands/profile.js");
|
|
534
|
+
await profileCommand(action, options);
|
|
535
|
+
});
|
|
536
|
+
program
|
|
537
|
+
.command("migrate-services")
|
|
538
|
+
.description("Migrate services from references/ to service manager")
|
|
539
|
+
.argument("[gtm-path]", "Path to GTM project (default: current directory)")
|
|
540
|
+
.action(async (gtmPath) => {
|
|
541
|
+
const { migrateServices } = await import("./commands/migrate-services.js");
|
|
542
|
+
await migrateServices(gtmPath);
|
|
543
|
+
});
|
|
544
|
+
// ============================================================================
|
|
545
|
+
// PLATFORM COMMANDS (require login for full features)
|
|
546
|
+
// ============================================================================
|
|
547
|
+
program
|
|
548
|
+
.command("login")
|
|
549
|
+
.description("Login to JFL platform")
|
|
550
|
+
.option("--platform", "Use Platform Account (recommended)")
|
|
551
|
+
.option("--x402", "Use x402 Day Pass ($5/day, crypto)")
|
|
552
|
+
.option("--solo", "Use Solo plan ($49/mo)")
|
|
553
|
+
.option("--team", "Use Team plan ($199/mo)")
|
|
554
|
+
.option("--free", "Stay on trial")
|
|
555
|
+
.option("--force", "Force re-authentication")
|
|
556
|
+
.action(async (options) => {
|
|
557
|
+
const { loginCommand } = await import("./commands/login.js");
|
|
558
|
+
await loginCommand(options);
|
|
559
|
+
});
|
|
560
|
+
program
|
|
561
|
+
.command("logout")
|
|
562
|
+
.description("Logout from JFL platform")
|
|
563
|
+
.action(async () => {
|
|
564
|
+
const { logout } = await import("./commands/login.js");
|
|
565
|
+
logout();
|
|
566
|
+
console.log(chalk.green("Logged out successfully."));
|
|
567
|
+
});
|
|
568
|
+
program
|
|
569
|
+
.command("preferences")
|
|
570
|
+
.description("Manage JFL preferences")
|
|
571
|
+
.option("--clear-ai", "Clear saved AI CLI preference")
|
|
572
|
+
.option("--no-telemetry", "Disable anonymous telemetry")
|
|
573
|
+
.option("--telemetry", "Enable anonymous telemetry")
|
|
574
|
+
.option("--show", "Show current preferences")
|
|
575
|
+
.action(async (options) => {
|
|
576
|
+
const { getConfigValue, deleteConfigKey } = await import("./utils/jfl-config.js");
|
|
577
|
+
if (options.clearAi) {
|
|
578
|
+
deleteConfigKey("aiCLI");
|
|
579
|
+
console.log(chalk.green("\n✓ Cleared AI CLI preference"));
|
|
580
|
+
console.log(chalk.gray(" Next 'jfl' will show selection menu\n"));
|
|
581
|
+
return;
|
|
582
|
+
}
|
|
583
|
+
if (options.telemetry === false) {
|
|
584
|
+
const telemetry = await getTelemetry();
|
|
585
|
+
telemetry.disable();
|
|
586
|
+
console.log(chalk.green("\n✓ Telemetry disabled"));
|
|
587
|
+
console.log(chalk.gray(" No data will be collected\n"));
|
|
588
|
+
return;
|
|
589
|
+
}
|
|
590
|
+
if (options.telemetry === true) {
|
|
591
|
+
const telemetry = await getTelemetry();
|
|
592
|
+
telemetry.enable();
|
|
593
|
+
console.log(chalk.green("\n✓ Telemetry enabled"));
|
|
594
|
+
console.log(chalk.gray(" Anonymous usage data helps improve JFL\n"));
|
|
595
|
+
return;
|
|
596
|
+
}
|
|
597
|
+
if (options.show || (!options.clearAi && options.telemetry === undefined)) {
|
|
598
|
+
const telemetry = await getTelemetry();
|
|
599
|
+
console.log(chalk.bold("\n JFL Preferences\n"));
|
|
600
|
+
console.log(chalk.gray(" AI CLI:") + " " + (getConfigValue("aiCLI") || chalk.gray("none")));
|
|
601
|
+
console.log(chalk.gray(" Projects tracked:") + " " + ((getConfigValue("projects") || []).length));
|
|
602
|
+
console.log(chalk.gray(" Telemetry:") + " " + (telemetry.isEnabled() ? chalk.green("enabled") : chalk.red("disabled")));
|
|
603
|
+
console.log();
|
|
604
|
+
console.log(chalk.gray(" To clear AI preference: jfl preferences --clear-ai"));
|
|
605
|
+
console.log(chalk.gray(" To disable telemetry: jfl preferences --no-telemetry"));
|
|
606
|
+
console.log();
|
|
607
|
+
}
|
|
608
|
+
});
|
|
609
|
+
program
|
|
610
|
+
.command("wallet")
|
|
611
|
+
.description("Show wallet and day pass status")
|
|
612
|
+
.action(async () => {
|
|
613
|
+
const { showDayPassStatus, hasWallet, getWalletAddress } = await import("./utils/auth-guard.js");
|
|
614
|
+
const address = getWalletAddress();
|
|
615
|
+
if (!address) {
|
|
616
|
+
console.log(chalk.yellow("\n⚠️ No wallet configured"));
|
|
617
|
+
console.log(chalk.gray(" Run: jfl login\n"));
|
|
618
|
+
return;
|
|
619
|
+
}
|
|
620
|
+
console.log(chalk.bold("\n💰 Wallet Status\n"));
|
|
621
|
+
console.log(chalk.gray("Address: ") + chalk.cyan(address));
|
|
622
|
+
if (!hasWallet()) {
|
|
623
|
+
console.log(chalk.yellow("Mode: View-only (cannot sign payments)"));
|
|
624
|
+
console.log(chalk.gray("Run 'jfl login' to import signing key"));
|
|
625
|
+
}
|
|
626
|
+
else {
|
|
627
|
+
console.log(chalk.green("Mode: Full (can sign payments)"));
|
|
628
|
+
}
|
|
629
|
+
console.log();
|
|
630
|
+
showDayPassStatus();
|
|
631
|
+
console.log();
|
|
632
|
+
});
|
|
633
|
+
program
|
|
634
|
+
.command("deploy")
|
|
635
|
+
.description("Deploy project to JFL platform")
|
|
636
|
+
.option("-f, --force", "Force deploy even if no changes")
|
|
637
|
+
.action(async (options) => {
|
|
638
|
+
const { deployCommand } = await import("./commands/deploy.js");
|
|
639
|
+
await deployCommand(options);
|
|
640
|
+
});
|
|
641
|
+
program
|
|
642
|
+
.command("agents")
|
|
643
|
+
.description("Manage parallel agents and RL learning agents")
|
|
644
|
+
.argument("[action]", "Action: list, create, start, stop, destroy, rl")
|
|
645
|
+
.argument("[subaction]", "For 'rl': status, dashboard, train, tune, feedback, explain")
|
|
646
|
+
.option("-n, --name <name>", "Agent name")
|
|
647
|
+
.option("-t, --task <task>", "Task for agent")
|
|
648
|
+
.option("--agent <name>", "Target specific RL agent")
|
|
649
|
+
.option("--insight-id <id>", "Insight ID for RL agent feedback")
|
|
650
|
+
.option("--feedback <type>", "RL agent feedback: helpful, not_helpful, needs_adjustment")
|
|
651
|
+
.action(async (action, subaction, options) => {
|
|
652
|
+
if (action === 'rl') {
|
|
653
|
+
const { tenentAgentsCommand } = await import("./commands/tenet-agents.js");
|
|
654
|
+
await tenentAgentsCommand(subaction, options);
|
|
655
|
+
}
|
|
656
|
+
else {
|
|
657
|
+
const { agentsCommand } = await import("./commands/agents.js");
|
|
658
|
+
await agentsCommand(action, options);
|
|
659
|
+
}
|
|
660
|
+
});
|
|
661
|
+
program
|
|
662
|
+
.command("feedback")
|
|
663
|
+
.description("Rate your JFL session")
|
|
664
|
+
.argument("[action]", "view or sync")
|
|
665
|
+
.action(async (action) => {
|
|
666
|
+
const { feedbackCommand } = await import("./commands/feedback.js");
|
|
667
|
+
await feedbackCommand(action);
|
|
668
|
+
});
|
|
669
|
+
program
|
|
670
|
+
.command("update")
|
|
671
|
+
.description("Pull latest JFL product updates")
|
|
672
|
+
.option("--dry", "Show what would be updated without making changes")
|
|
673
|
+
.option("--auto", "Auto mode: check once per 24h, skip if recently updated")
|
|
674
|
+
.action(async (options) => {
|
|
675
|
+
const { updateCommand } = await import("./commands/update.js");
|
|
676
|
+
await updateCommand({ dry: options.dry, autoUpdate: options.auto });
|
|
677
|
+
});
|
|
678
|
+
// ============================================================================
|
|
679
|
+
// SKILL MANAGEMENT (work offline)
|
|
680
|
+
// ============================================================================
|
|
681
|
+
const skills = program.command("skills").description("Manage JFL skills");
|
|
682
|
+
skills
|
|
683
|
+
.command("list")
|
|
684
|
+
.description("List installed or available skills")
|
|
685
|
+
.option("-a, --available", "Show all available skills")
|
|
686
|
+
.option("-c, --category <category>", "Filter by category (core or catalog)")
|
|
687
|
+
.option("-t, --tag <tag>", "Filter by tag")
|
|
688
|
+
.action(async (options) => {
|
|
689
|
+
const { listSkillsCommand } = await import("./commands/skills.js");
|
|
690
|
+
await listSkillsCommand(options);
|
|
691
|
+
});
|
|
692
|
+
skills
|
|
693
|
+
.command("install")
|
|
694
|
+
.description("Install skill(s)")
|
|
695
|
+
.argument("<skills...>", "Skill name(s) to install")
|
|
696
|
+
.action(async (skills) => {
|
|
697
|
+
const { installSkillCommand } = await import("./commands/skills.js");
|
|
698
|
+
await installSkillCommand(skills);
|
|
699
|
+
});
|
|
700
|
+
skills
|
|
701
|
+
.command("remove")
|
|
702
|
+
.description("Remove skill(s)")
|
|
703
|
+
.argument("<skills...>", "Skill name(s) to remove")
|
|
704
|
+
.action(async (skills) => {
|
|
705
|
+
const { removeSkillCommand } = await import("./commands/skills.js");
|
|
706
|
+
await removeSkillCommand(skills);
|
|
707
|
+
});
|
|
708
|
+
skills
|
|
709
|
+
.command("update")
|
|
710
|
+
.description("Update installed skill(s)")
|
|
711
|
+
.argument("[skill]", "Skill name to update (omit to update all)")
|
|
712
|
+
.option("--dry", "Show what would be updated without making changes")
|
|
713
|
+
.action(async (skill, options) => {
|
|
714
|
+
const { updateSkillsCommand } = await import("./commands/skills.js");
|
|
715
|
+
await updateSkillsCommand({ ...options, skillName: skill });
|
|
716
|
+
});
|
|
717
|
+
skills
|
|
718
|
+
.command("search")
|
|
719
|
+
.description("Search for skills")
|
|
720
|
+
.argument("<query>", "Search query")
|
|
721
|
+
.action(async (query) => {
|
|
722
|
+
const { searchSkillsCommand } = await import("./commands/skills.js");
|
|
723
|
+
await searchSkillsCommand(query);
|
|
724
|
+
});
|
|
725
|
+
// ============================================================================
|
|
726
|
+
// VOICE INPUT (work offline)
|
|
727
|
+
// ============================================================================
|
|
728
|
+
const voice = program.command("voice").description("Voice input for JFL");
|
|
729
|
+
voice
|
|
730
|
+
.command("model")
|
|
731
|
+
.description("Manage whisper models")
|
|
732
|
+
.argument("[action]", "list, download, or default")
|
|
733
|
+
.argument("[name]", "Model name (tiny, base, small, etc.)")
|
|
734
|
+
.option("-f, --force", "Force re-download")
|
|
735
|
+
.action(async (action, name, options) => {
|
|
736
|
+
const { voiceCommand } = await import("./commands/voice.js");
|
|
737
|
+
await voiceCommand("model", action, name, options);
|
|
738
|
+
});
|
|
739
|
+
voice
|
|
740
|
+
.command("devices")
|
|
741
|
+
.description("List audio input devices")
|
|
742
|
+
.action(async () => {
|
|
743
|
+
const { voiceCommand } = await import("./commands/voice.js");
|
|
744
|
+
await voiceCommand("devices");
|
|
745
|
+
});
|
|
746
|
+
voice
|
|
747
|
+
.command("test")
|
|
748
|
+
.description("Test voice input (record 3s and transcribe)")
|
|
749
|
+
.option("-d, --device <id>", "Device ID to use")
|
|
750
|
+
.action(async (options) => {
|
|
751
|
+
const { voiceCommand } = await import("./commands/voice.js");
|
|
752
|
+
await voiceCommand("test", undefined, undefined, {
|
|
753
|
+
device: options.device,
|
|
754
|
+
});
|
|
755
|
+
});
|
|
756
|
+
voice
|
|
757
|
+
.command("recording")
|
|
758
|
+
.description("Test recording only (no transcription)")
|
|
759
|
+
.option("-d, --device <id>", "Device ID to use")
|
|
760
|
+
.option("-t, --duration <seconds>", "Recording duration in seconds", "5")
|
|
761
|
+
.action(async (options) => {
|
|
762
|
+
const { voiceCommand } = await import("./commands/voice.js");
|
|
763
|
+
await voiceCommand("recording", undefined, undefined, {
|
|
764
|
+
device: options.device,
|
|
765
|
+
duration: parseInt(options.duration, 10),
|
|
766
|
+
});
|
|
767
|
+
});
|
|
768
|
+
voice
|
|
769
|
+
.command("setup")
|
|
770
|
+
.description("First-time setup wizard for voice input")
|
|
771
|
+
.action(async () => {
|
|
772
|
+
const { voiceCommand } = await import("./commands/voice.js");
|
|
773
|
+
await voiceCommand("setup");
|
|
774
|
+
});
|
|
775
|
+
voice
|
|
776
|
+
.command("record")
|
|
777
|
+
.description("Record voice with VAD (same as running jfl voice)")
|
|
778
|
+
.option("-d, --device <id>", "Device ID to use")
|
|
779
|
+
.action(async (options) => {
|
|
780
|
+
const { voiceCommand } = await import("./commands/voice.js");
|
|
781
|
+
await voiceCommand("record", undefined, undefined, {
|
|
782
|
+
device: options.device,
|
|
783
|
+
});
|
|
784
|
+
});
|
|
785
|
+
voice
|
|
786
|
+
.command("help")
|
|
787
|
+
.description("Show voice command help")
|
|
788
|
+
.action(async () => {
|
|
789
|
+
const { voiceCommand } = await import("./commands/voice.js");
|
|
790
|
+
await voiceCommand("help");
|
|
791
|
+
});
|
|
792
|
+
voice
|
|
793
|
+
.command("hotkey")
|
|
794
|
+
.description("Start global hotkey listener (macOS only)")
|
|
795
|
+
.option("-d, --device <id>", "Device ID to use")
|
|
796
|
+
.option("-m, --mode <mode>", "Hotkey mode: auto, tap, or hold (default: auto)")
|
|
797
|
+
.action(async (options) => {
|
|
798
|
+
const { voiceCommand } = await import("./commands/voice.js");
|
|
799
|
+
await voiceCommand("hotkey", undefined, undefined, {
|
|
800
|
+
device: options.device,
|
|
801
|
+
mode: options.mode,
|
|
802
|
+
});
|
|
803
|
+
});
|
|
804
|
+
// VS-013: Daemon commands for background hotkey listening
|
|
805
|
+
const daemon = voice
|
|
806
|
+
.command("daemon")
|
|
807
|
+
.description("Background hotkey listener daemon (macOS only)");
|
|
808
|
+
daemon
|
|
809
|
+
.command("start")
|
|
810
|
+
.description("Start hotkey listener in background")
|
|
811
|
+
.option("-m, --mode <mode>", "Hotkey mode: auto, tap, or hold (default: auto)")
|
|
812
|
+
.action(async (options) => {
|
|
813
|
+
const { voiceCommand } = await import("./commands/voice.js");
|
|
814
|
+
await voiceCommand("daemon", "start", undefined, {
|
|
815
|
+
mode: options.mode,
|
|
816
|
+
});
|
|
817
|
+
});
|
|
818
|
+
daemon
|
|
819
|
+
.command("stop")
|
|
820
|
+
.description("Stop the background daemon")
|
|
821
|
+
.action(async () => {
|
|
822
|
+
const { voiceCommand } = await import("./commands/voice.js");
|
|
823
|
+
await voiceCommand("daemon", "stop");
|
|
824
|
+
});
|
|
825
|
+
daemon
|
|
826
|
+
.command("status")
|
|
827
|
+
.description("Show daemon status and uptime")
|
|
828
|
+
.action(async () => {
|
|
829
|
+
const { voiceCommand } = await import("./commands/voice.js");
|
|
830
|
+
await voiceCommand("daemon", "status");
|
|
831
|
+
});
|
|
832
|
+
// Default daemon action (show status)
|
|
833
|
+
daemon.action(async () => {
|
|
834
|
+
const { voiceCommand } = await import("./commands/voice.js");
|
|
835
|
+
await voiceCommand("daemon", "status");
|
|
836
|
+
});
|
|
837
|
+
// Running `jfl voice` without subcommand starts recording with VAD
|
|
838
|
+
voice
|
|
839
|
+
.option("-d, --device <id>", "Device ID to use")
|
|
840
|
+
.action(async (options) => {
|
|
841
|
+
const { voiceCommand } = await import("./commands/voice.js");
|
|
842
|
+
await voiceCommand(undefined, undefined, undefined, {
|
|
843
|
+
device: options.device,
|
|
844
|
+
});
|
|
845
|
+
});
|
|
846
|
+
// ============================================================================
|
|
847
|
+
// MEMORY SYSTEM (work offline)
|
|
848
|
+
// ============================================================================
|
|
849
|
+
const memory = program.command("memory").description("Memory system management");
|
|
850
|
+
memory
|
|
851
|
+
.command("init")
|
|
852
|
+
.description("Initialize memory database")
|
|
853
|
+
.action(async () => {
|
|
854
|
+
const { memoryInitCommand } = await import("./commands/memory.js");
|
|
855
|
+
await memoryInitCommand();
|
|
856
|
+
});
|
|
857
|
+
memory
|
|
858
|
+
.command("status")
|
|
859
|
+
.description("Show memory statistics")
|
|
860
|
+
.action(async () => {
|
|
861
|
+
const { memoryStatusCommand } = await import("./commands/memory.js");
|
|
862
|
+
await memoryStatusCommand();
|
|
863
|
+
});
|
|
864
|
+
memory
|
|
865
|
+
.command("search")
|
|
866
|
+
.description("Search memories")
|
|
867
|
+
.argument("<query>", "Search query")
|
|
868
|
+
.option("-t, --type <type>", "Filter by type (feature, fix, decision, etc.)")
|
|
869
|
+
.option("-n, --max <n>", "Maximum results", "10")
|
|
870
|
+
.action(async (query, options) => {
|
|
871
|
+
const { memorySearchCommand } = await import("./commands/memory.js");
|
|
872
|
+
await memorySearchCommand(query, options);
|
|
873
|
+
});
|
|
874
|
+
memory
|
|
875
|
+
.command("index")
|
|
876
|
+
.description("Reindex journal entries")
|
|
877
|
+
.option("-f, --force", "Force full reindex")
|
|
878
|
+
.action(async (options) => {
|
|
879
|
+
const { memoryIndexCommand } = await import("./commands/memory.js");
|
|
880
|
+
await memoryIndexCommand(options);
|
|
881
|
+
});
|
|
882
|
+
// Alias: jfl ask <question> → jfl memory search <question>
|
|
883
|
+
program
|
|
884
|
+
.command("ask")
|
|
885
|
+
.description("Ask a question - searches memory system")
|
|
886
|
+
.argument("<question>", "Question to search for in memory")
|
|
887
|
+
.option("-t, --type <type>", "Filter by type (feature, fix, decision, etc.)")
|
|
888
|
+
.option("-n, --max <n>", "Maximum results", "5")
|
|
889
|
+
.action(async (question, options) => {
|
|
890
|
+
const { memorySearchCommand } = await import("./commands/memory.js");
|
|
891
|
+
await memorySearchCommand(question, options);
|
|
892
|
+
});
|
|
893
|
+
// ============================================================================
|
|
894
|
+
// SKILL SHORTCUTS (work offline)
|
|
895
|
+
// ============================================================================
|
|
896
|
+
program
|
|
897
|
+
.command("brand")
|
|
898
|
+
.description("Run brand architect skill")
|
|
899
|
+
.argument("[subcommand]", "marks, colors, typography, or full")
|
|
900
|
+
.action(async (subcommand) => {
|
|
901
|
+
console.log(chalk.cyan("Running /brand-architect..."));
|
|
902
|
+
console.log(chalk.gray("This skill runs in your Claude Code session."));
|
|
903
|
+
console.log(chalk.yellow("\nRun in Claude Code:"), "/brand-architect", subcommand || "");
|
|
904
|
+
});
|
|
905
|
+
program
|
|
906
|
+
.command("content")
|
|
907
|
+
.description("Run content creator skill")
|
|
908
|
+
.argument("<type>", "thread, post, article, or one-pager")
|
|
909
|
+
.argument("[topic]", "Topic for content")
|
|
910
|
+
.action(async (type, topic) => {
|
|
911
|
+
console.log(chalk.cyan("Running /content..."));
|
|
912
|
+
console.log(chalk.gray("This skill runs in your Claude Code session."));
|
|
913
|
+
console.log(chalk.yellow("\nRun in Claude Code:"), "/content", type, topic || "");
|
|
914
|
+
});
|
|
915
|
+
// ============================================================================
|
|
916
|
+
// RALPH TUI (autonomous task execution)
|
|
917
|
+
// ============================================================================
|
|
918
|
+
program
|
|
919
|
+
.command("ralph")
|
|
920
|
+
.description("AI agent loop orchestrator (ralph-tui)")
|
|
921
|
+
.argument("[command...]", "ralph-tui command and args")
|
|
922
|
+
.option("-h, --help", "Show ralph-tui help")
|
|
923
|
+
.allowUnknownOption()
|
|
924
|
+
.action(async (args, options) => {
|
|
925
|
+
const { ralphCommand, showRalphHelp } = await import("./commands/ralph.js");
|
|
926
|
+
if (options.help || args.length === 0) {
|
|
927
|
+
showRalphHelp();
|
|
928
|
+
return;
|
|
929
|
+
}
|
|
930
|
+
await ralphCommand(args);
|
|
931
|
+
});
|
|
932
|
+
program
|
|
933
|
+
.command("events")
|
|
934
|
+
.description("Live MAP event bus dashboard")
|
|
935
|
+
.option("-p, --pattern <pattern>", "Filter pattern (default: *)")
|
|
936
|
+
.action(async (options) => {
|
|
937
|
+
const { startEventDashboard } = await import("./ui/event-dashboard.js");
|
|
938
|
+
await startEventDashboard({ pattern: options.pattern });
|
|
939
|
+
});
|
|
940
|
+
program
|
|
941
|
+
.command("peter")
|
|
942
|
+
.description("Peter Parker - model-routed agent orchestrator")
|
|
943
|
+
.argument("[action]", "setup, run, pr, experiment, autoresearch, status, agent, or dashboard")
|
|
944
|
+
.argument("[name]", "Agent name (for agent subcommand)")
|
|
945
|
+
.option("--cost", "Cost-optimized model routing (haiku-heavy)")
|
|
946
|
+
.option("--balanced", "Balanced model routing (default)")
|
|
947
|
+
.option("--quality", "Quality-first model routing (opus-heavy)")
|
|
948
|
+
.option("-t, --task <task>", "Task to run (for run action)")
|
|
949
|
+
.option("-r, --rounds <n>", "Number of autoresearch rounds (default: 5)")
|
|
950
|
+
.option("--mode <mode>", "Experiment mode: default or autoresearch")
|
|
951
|
+
.option("--budget <amount>", "Cost budget in USD (Pi runtime: auto-downgrades model when exceeded)")
|
|
952
|
+
.option("--pi", "Force Pi runtime (default: auto-detect based on 'pi' command availability)")
|
|
953
|
+
.action(async (action, name, options) => {
|
|
954
|
+
const { peterCommand } = await import("./commands/peter.js");
|
|
955
|
+
if (name)
|
|
956
|
+
options.name = name;
|
|
957
|
+
await peterCommand(action, options);
|
|
958
|
+
});
|
|
959
|
+
// ============================================================================
|
|
960
|
+
// TEST MODE (for development)
|
|
961
|
+
// ============================================================================
|
|
962
|
+
program
|
|
963
|
+
.command("test")
|
|
964
|
+
.description("Test onboarding flow (isolated environment)")
|
|
965
|
+
.action(() => {
|
|
966
|
+
const __filename = fileURLToPath(import.meta.url);
|
|
967
|
+
const __dirname = join(__filename, "..");
|
|
968
|
+
const scriptPath = join(__dirname, "../scripts/test-onboarding.sh");
|
|
969
|
+
const test = spawn("bash", [scriptPath], {
|
|
970
|
+
stdio: "inherit",
|
|
971
|
+
});
|
|
972
|
+
test.on("error", (err) => {
|
|
973
|
+
console.log(chalk.red("\n❌ Failed to launch test mode"));
|
|
974
|
+
console.log(chalk.gray(" Make sure the test script exists at: scripts/test-onboarding.sh"));
|
|
975
|
+
});
|
|
976
|
+
});
|
|
977
|
+
// ============================================================================
|
|
978
|
+
// CLAWDBOT INTEGRATION
|
|
979
|
+
// ============================================================================
|
|
980
|
+
const clawdbot = program.command("clawdbot").description("Manage JFL plugin for Clawdbot gateway");
|
|
981
|
+
clawdbot
|
|
982
|
+
.command("setup")
|
|
983
|
+
.description("Install JFL plugin into Clawdbot and configure it")
|
|
984
|
+
.action(async () => {
|
|
985
|
+
const { clawdbotSetupCommand } = await import("./commands/clawdbot.js");
|
|
986
|
+
await clawdbotSetupCommand();
|
|
987
|
+
});
|
|
988
|
+
clawdbot
|
|
989
|
+
.command("status")
|
|
990
|
+
.description("Show JFL Clawdbot plugin installation status")
|
|
991
|
+
.action(async () => {
|
|
992
|
+
const { clawdbotStatusCommand } = await import("./commands/clawdbot.js");
|
|
993
|
+
await clawdbotStatusCommand();
|
|
994
|
+
});
|
|
995
|
+
// Default action: show status
|
|
996
|
+
clawdbot.action(async () => {
|
|
997
|
+
const { clawdbotStatusCommand } = await import("./commands/clawdbot.js");
|
|
998
|
+
await clawdbotStatusCommand();
|
|
999
|
+
});
|
|
1000
|
+
// ============================================================================
|
|
1001
|
+
// PIVOT (checkpoint + context reset)
|
|
1002
|
+
// ============================================================================
|
|
1003
|
+
program
|
|
1004
|
+
.command("pivot")
|
|
1005
|
+
.description("Checkpoint current work to journals/memory and signal context reset — same branch, no restart hooks")
|
|
1006
|
+
.option("-s, --summary <text>", "Summary of what you were working on")
|
|
1007
|
+
.option("--push", "Push to remote after pivot")
|
|
1008
|
+
.option("--json", "JSON output")
|
|
1009
|
+
.action(async (options) => {
|
|
1010
|
+
const { pivotCommand } = await import("./commands/pivot.js");
|
|
1011
|
+
await pivotCommand(options);
|
|
1012
|
+
});
|
|
1013
|
+
// ============================================================================
|
|
1014
|
+
// OPENCLAW (runtime-agnostic agent protocol)
|
|
1015
|
+
// ============================================================================
|
|
1016
|
+
const openclaw = program.command("openclaw").description("OpenClaw agent protocol - runtime-agnostic JFL integration");
|
|
1017
|
+
openclaw
|
|
1018
|
+
.command("session-start")
|
|
1019
|
+
.description("Start an agent session (branch, auto-commit, Context Hub)")
|
|
1020
|
+
.requiredOption("-a, --agent <name>", "Agent name/ID")
|
|
1021
|
+
.option("-g, --gtm <path>", "GTM workspace path")
|
|
1022
|
+
.option("--json", "Output JSON")
|
|
1023
|
+
.action(async (options) => {
|
|
1024
|
+
const { sessionStartCommand } = await import("./commands/openclaw.js");
|
|
1025
|
+
await sessionStartCommand(options);
|
|
1026
|
+
});
|
|
1027
|
+
openclaw
|
|
1028
|
+
.command("session-end")
|
|
1029
|
+
.description("End session (commit, merge, cleanup)")
|
|
1030
|
+
.option("-s, --sync", "Sync to GTM parent (for services)")
|
|
1031
|
+
.option("--json", "Output JSON")
|
|
1032
|
+
.action(async (options) => {
|
|
1033
|
+
const { sessionEndCommand } = await import("./commands/openclaw.js");
|
|
1034
|
+
await sessionEndCommand(options);
|
|
1035
|
+
});
|
|
1036
|
+
openclaw
|
|
1037
|
+
.command("heartbeat")
|
|
1038
|
+
.description("Health pulse (auto-commit, check Context Hub)")
|
|
1039
|
+
.option("--json", "Output JSON")
|
|
1040
|
+
.action(async (options) => {
|
|
1041
|
+
const { heartbeatCommand: openclawHeartbeat } = await import("./commands/openclaw.js");
|
|
1042
|
+
await openclawHeartbeat(options);
|
|
1043
|
+
});
|
|
1044
|
+
openclaw
|
|
1045
|
+
.command("context")
|
|
1046
|
+
.description("Get unified context from Context Hub")
|
|
1047
|
+
.option("-q, --query <query>", "Search query")
|
|
1048
|
+
.option("-t, --task-type <type>", "Task type (code, spec, content, strategy, general)")
|
|
1049
|
+
.option("--json", "Output JSON")
|
|
1050
|
+
.action(async (options) => {
|
|
1051
|
+
const { contextCommand } = await import("./commands/openclaw.js");
|
|
1052
|
+
await contextCommand(options);
|
|
1053
|
+
});
|
|
1054
|
+
openclaw
|
|
1055
|
+
.command("journal")
|
|
1056
|
+
.description("Write a journal entry")
|
|
1057
|
+
.requiredOption("--type <type>", "Entry type (feature, fix, decision, milestone, spec, discovery)")
|
|
1058
|
+
.requiredOption("--title <title>", "Entry title")
|
|
1059
|
+
.requiredOption("--summary <summary>", "Entry summary")
|
|
1060
|
+
.option("--detail <detail>", "Full detail")
|
|
1061
|
+
.option("--files <files>", "Comma-separated file paths")
|
|
1062
|
+
.option("--json", "Output JSON")
|
|
1063
|
+
.action(async (options) => {
|
|
1064
|
+
const { journalCommand } = await import("./commands/openclaw.js");
|
|
1065
|
+
await journalCommand(options);
|
|
1066
|
+
});
|
|
1067
|
+
openclaw
|
|
1068
|
+
.command("status")
|
|
1069
|
+
.description("Show agent session state and health")
|
|
1070
|
+
.option("--json", "Output JSON")
|
|
1071
|
+
.action(async (options) => {
|
|
1072
|
+
const { statusCommand: openclawStatus } = await import("./commands/openclaw.js");
|
|
1073
|
+
await openclawStatus(options);
|
|
1074
|
+
});
|
|
1075
|
+
openclaw
|
|
1076
|
+
.command("gtm-list")
|
|
1077
|
+
.description("List registered GTM workspaces")
|
|
1078
|
+
.option("--json", "Output JSON")
|
|
1079
|
+
.action(async (options) => {
|
|
1080
|
+
const { gtmListCommand } = await import("./commands/openclaw.js");
|
|
1081
|
+
await gtmListCommand(options);
|
|
1082
|
+
});
|
|
1083
|
+
openclaw
|
|
1084
|
+
.command("gtm-switch")
|
|
1085
|
+
.description("Switch active GTM workspace")
|
|
1086
|
+
.argument("<gtm-id>", "GTM ID to switch to")
|
|
1087
|
+
.option("--json", "Output JSON")
|
|
1088
|
+
.action(async (gtmId, options) => {
|
|
1089
|
+
const { gtmSwitchCommand } = await import("./commands/openclaw.js");
|
|
1090
|
+
await gtmSwitchCommand(gtmId, options);
|
|
1091
|
+
});
|
|
1092
|
+
openclaw
|
|
1093
|
+
.command("gtm-create")
|
|
1094
|
+
.description("Create and register a new GTM workspace")
|
|
1095
|
+
.argument("<name>", "GTM workspace name")
|
|
1096
|
+
.option("-p, --path <dir>", "Target directory")
|
|
1097
|
+
.option("--json", "Output JSON")
|
|
1098
|
+
.action(async (name, options) => {
|
|
1099
|
+
const { gtmCreateCommand } = await import("./commands/openclaw.js");
|
|
1100
|
+
await gtmCreateCommand(name, options);
|
|
1101
|
+
});
|
|
1102
|
+
openclaw
|
|
1103
|
+
.command("register")
|
|
1104
|
+
.description("Register agent with a GTM workspace")
|
|
1105
|
+
.requiredOption("-g, --gtm <path>", "GTM workspace path")
|
|
1106
|
+
.option("-a, --agent <name>", "Agent name (auto-detected from manifest)")
|
|
1107
|
+
.option("--json", "Output JSON")
|
|
1108
|
+
.action(async (options) => {
|
|
1109
|
+
const { registerCommand } = await import("./commands/openclaw.js");
|
|
1110
|
+
await registerCommand(options);
|
|
1111
|
+
});
|
|
1112
|
+
openclaw
|
|
1113
|
+
.command("tag")
|
|
1114
|
+
.description("Send message to a service agent")
|
|
1115
|
+
.argument("<service>", "Service name")
|
|
1116
|
+
.argument("<message>", "Message to send")
|
|
1117
|
+
.option("--json", "Output JSON")
|
|
1118
|
+
.action(async (service, message, options) => {
|
|
1119
|
+
const { tagCommand } = await import("./commands/openclaw.js");
|
|
1120
|
+
await tagCommand(service, message, options);
|
|
1121
|
+
});
|
|
1122
|
+
openclaw
|
|
1123
|
+
.command("install-skill")
|
|
1124
|
+
.description("Install jfl-gtm skill into OpenClaw (~/.openclaw/skills/)")
|
|
1125
|
+
.option("--dir <path>", "Custom install directory")
|
|
1126
|
+
.action(async (options) => {
|
|
1127
|
+
const { installSkillCommand } = await import("./commands/openclaw.js");
|
|
1128
|
+
await installSkillCommand(options);
|
|
1129
|
+
});
|
|
1130
|
+
// ============================================================================
|
|
1131
|
+
// CI WORKFLOWS
|
|
1132
|
+
// ============================================================================
|
|
1133
|
+
const ci = program.command("ci").description("CI/CD workflow management");
|
|
1134
|
+
ci
|
|
1135
|
+
.command("setup")
|
|
1136
|
+
.description("Deploy eval + review CI workflows to .github/workflows/")
|
|
1137
|
+
.action(async () => {
|
|
1138
|
+
const { ciSetupCommand } = await import("./commands/ci-setup.js");
|
|
1139
|
+
await ciSetupCommand();
|
|
1140
|
+
});
|
|
1141
|
+
ci.action(() => {
|
|
1142
|
+
ci.outputHelp();
|
|
1143
|
+
});
|
|
1144
|
+
// ============================================================================
|
|
1145
|
+
// EVAL FRAMEWORK
|
|
1146
|
+
// ============================================================================
|
|
1147
|
+
// Lazy command registration — modules loaded only when command is invoked
|
|
1148
|
+
// (was: registerXxxCommand eager imports adding ~200ms to startup)
|
|
1149
|
+
// --- eval ---
|
|
1150
|
+
const evalCmd = program.command("eval").description("Eval framework — track agent metrics over time");
|
|
1151
|
+
evalCmd.command("list").description("List recent eval entries").option("--agent <name>", "Filter by agent name").option("--limit <n>", "Max entries to show", "20").action(async (options) => { const m = await import("./commands/eval.js"); await m.listCommand(options); });
|
|
1152
|
+
evalCmd.command("trajectory").description("Show metric trajectory over time").requiredOption("--agent <name>", "Agent name").option("--metric <name>", "Metric to plot (default: composite)").action(async (options) => { const m = await import("./commands/eval.js"); await m.trajectoryCommand(options); });
|
|
1153
|
+
evalCmd.command("log").description("Log an eval entry").requiredOption("--agent <name>", "Agent name").requiredOption("--metrics <json>", "Metrics as JSON object").option("--composite <n>", "Composite score").option("--model-version <v>", "Model version").option("--dataset <ds>", "Dataset name").option("--run-id <id>", "Run ID").option("--notes <text>", "Notes").action(async (options) => { const m = await import("./commands/eval.js"); await m.logCommand(options); });
|
|
1154
|
+
evalCmd.command("compare").description("Compare agents side-by-side").requiredOption("--agents <list>", "Comma-separated agent names").option("--metric <name>", "Metric to compare (default: composite)").action(async (options) => { const m = await import("./commands/eval.js"); await m.compareCommand(options); });
|
|
1155
|
+
evalCmd.command("tuples").description("Extract training tuples from journals").option("--team <name>", "Filter by team").option("--since <date>", "Only tuples after this date").option("--report", "Full markdown report").action(async (options) => { const m = await import("./commands/eval.js"); await m.tuplesCommand(options); });
|
|
1156
|
+
evalCmd.command("buffer").description("View or export RL training buffer (.jfl/training-buffer.jsonl)").option("--export", "Export as JSONL for policy head training").option("--limit <n>", "Max entries to show", "10").action(async (options) => { const m = await import("./commands/eval.js"); await m.bufferCommand(options); });
|
|
1157
|
+
evalCmd.command("mine").description("Mine training tuples from journals, events, telemetry, and eval history").option("--all", "Scan all JFL projects (from ~/.config/jfl/config.json)").option("--telemetry", "Include global telemetry archive (58k+ events)").option("--dry-run", "Show what would be mined without writing").option("--dir <path>", "Specific directory to mine").action(async (options) => { const m = await import("./commands/eval.js"); await m.mineCommand(options); });
|
|
1158
|
+
evalCmd.command("train").description("Train policy head from training buffer (requires STRATUS_API_KEY)").option("--epochs <n>", "Training epochs", "50").option("--lr <rate>", "Learning rate", "0.0001").action(async (options) => { const m = await import("./commands/eval.js"); await m.trainCommand(options); });
|
|
1159
|
+
evalCmd.action(async () => { const m = await import("./commands/eval.js"); await m.listCommand({}); });
|
|
1160
|
+
// --- predict ---
|
|
1161
|
+
const predictCmd = program.command("predict").description("Predict eval score delta before executing changes (Stratus world model)");
|
|
1162
|
+
predictCmd.command("run").description("Generate a prediction for a proposed change").requiredOption("--proposal <text>", "Description of the proposed change").requiredOption("--goal <text>", "Goal expression (e.g. 'test_pass_rate > 0.9')").option("--score <n>", "Current composite score", "0").option("--type <type>", "Change type: fix, refactor, feature, config", "fix").option("--scope <scope>", "Change scope: small, medium, large", "medium").option("--files <list>", "Comma-separated affected files").option("--failing-evals <list>", "Comma-separated failing eval names").action(async (options) => { const m = await import("./commands/predict.js"); await m.predictCommand(options); });
|
|
1163
|
+
predictCmd.command("resolve").description("Resolve a prediction with actual results").requiredOption("--id <prediction_id>", "Prediction ID to resolve").requiredOption("--actual-delta <n>", "Actual score delta").requiredOption("--actual-score <n>", "Actual final score").requiredOption("--eval-run <id>", "Eval run ID").action(async (options) => { const m = await import("./commands/predict.js"); await m.resolveCommand({ resolve: options.id, actualDelta: options.actualDelta, actualScore: options.actualScore, evalRun: options.evalRun }); });
|
|
1164
|
+
predictCmd.command("accuracy").description("Show prediction accuracy statistics").action(async () => { const m = await import("./commands/predict.js"); await m.accuracyCommand(); });
|
|
1165
|
+
predictCmd.command("history").description("Show recent predictions").option("--limit <n>", "Max entries to show", "20").action(async (options) => { const m = await import("./commands/predict.js"); await m.historyCommand(options); });
|
|
1166
|
+
predictCmd.action(async () => { console.log(chalk.bold("\n Stratus Prediction Engine\n")); console.log(chalk.gray(" Commands:")); console.log(chalk.gray(' jfl predict run --proposal "..." --goal "..." Generate prediction')); console.log(chalk.gray(" jfl predict resolve --id <id> ... Resolve with actuals")); console.log(chalk.gray(" jfl predict accuracy Show accuracy stats")); console.log(chalk.gray(" jfl predict history Recent predictions")); console.log(); });
|
|
1167
|
+
// --- portfolio ---
|
|
1168
|
+
const portfolioCmd = program.command("portfolio").description("Manage portfolio of GTM workspaces");
|
|
1169
|
+
portfolioCmd.command("register <path>").description("Register a GTM workspace in this portfolio").action(async (gtmPath) => { const m = await import("./commands/portfolio.js"); await m.portfolioRegisterCommand(gtmPath); });
|
|
1170
|
+
portfolioCmd.command("list").description("List registered GTM workspaces").action(async () => { const m = await import("./commands/portfolio.js"); await m.portfolioListCommand(); });
|
|
1171
|
+
portfolioCmd.command("unregister <name>").description("Remove a GTM workspace from this portfolio").action(async (name) => { const m = await import("./commands/portfolio.js"); await m.portfolioUnregisterCommand(name); });
|
|
1172
|
+
portfolioCmd.command("status").description("Portfolio health and eval summary").action(async () => { const m = await import("./commands/portfolio.js"); await m.portfolioStatusCommand(); });
|
|
1173
|
+
portfolioCmd.command("phone-home").description("Sync this GTM's journals and activity to its portfolio parent").action(async () => { const m = await import("./commands/portfolio.js"); await m.portfolioPhoneHomeCommand(); });
|
|
1174
|
+
// --- viz ---
|
|
1175
|
+
const vizCmd = program.command("viz").description("Terminal visualizations — headless dashboard data via Context Hub");
|
|
1176
|
+
vizCmd.command("experiments").description("Show experiment runs with dot plot, sparklines, and score table").option("--agent <name>", "Filter to a specific agent").option("--json", "Output as JSON").action(async (options) => { const m = await import("./commands/viz.js"); await m.experimentsCommand(options); });
|
|
1177
|
+
vizCmd.command("leaderboard").description("Ranked agent leaderboard with sparklines and bar chart").option("--json", "Output as JSON").action(async (options) => { const m = await import("./commands/viz.js"); await m.leaderboardCommand(options); });
|
|
1178
|
+
vizCmd.command("flows").description("Flow definitions and pending executions").option("--pending", "Show only pending approval executions").option("--json", "Output as JSON").action(async (options) => { const m = await import("./commands/viz.js"); await m.flowsVizCommand(options); });
|
|
1179
|
+
vizCmd.command("events").description("Recent event stream with type coloring").option("--pattern <pattern>", "Filter events by type pattern").option("--limit <n>", "Max events to show", "20").option("--json", "Output as JSON").action(async (options) => { const m = await import("./commands/viz.js"); await m.eventsCommand(options); });
|
|
1180
|
+
vizCmd.command("status").description("Hub health, children, sources, item count").option("--json", "Output as JSON").action(async (options) => { const m = await import("./commands/viz.js"); await m.statusCommand(options); });
|
|
1181
|
+
vizCmd.command("dash").description("Composite dashboard — leaderboard, pending flows, events, status").option("--json", "Output as JSON").action(async (options) => { const m = await import("./commands/viz.js"); await m.dashCommand(options); });
|
|
1182
|
+
vizCmd.command("loop").description("Self-driving loop pipeline — detect, propose, eval, merge, learn").option("--days <n>", "Lookback period in days", "7").option("--json", "Output as JSON").action(async (options) => { const m = await import("./commands/viz.js"); await m.loopCommand(options); });
|
|
1183
|
+
vizCmd.command("learning").description("Policy head learning curve — tuples, accuracy, action rewards").option("--json", "Output as JSON").action(async (options) => { const m = await import("./commands/viz.js"); await m.learningCommand(options); });
|
|
1184
|
+
vizCmd.command("fleet").description("VM fleet status — parallel agent waves and tuple collection").option("--wave <id>", "Filter to a specific wave ID").option("--json", "Output as JSON").action(async (options) => { const m = await import("./commands/viz.js"); await m.fleetCommand(options); });
|
|
1185
|
+
vizCmd.action(async () => { const m = await import("./commands/viz.js"); await m.dashCommand({}); });
|
|
1186
|
+
// --- findings ---
|
|
1187
|
+
const findingsCmd = program.command("findings").description("Surface and fix problems automatically");
|
|
1188
|
+
findingsCmd.command("list", { isDefault: true }).description("List current findings").option("--refresh", "Re-analyze before listing").option("--all", "Include dismissed findings").action(async (options) => { const m = await import("./commands/findings.js"); await m.listCommand(options); });
|
|
1189
|
+
findingsCmd.command("fix <n>").description("Spawn an agent to fix finding #n").action(async (n) => { const m = await import("./commands/findings.js"); await m.fixCommand(n); });
|
|
1190
|
+
findingsCmd.command("dismiss <n>").description("Dismiss finding #n").action(async (n) => { const m = await import("./commands/findings.js"); await m.dismissCommand(n); });
|
|
1191
|
+
findingsCmd.command("analyze").description("Force re-analyze the project").action(async () => { const m = await import("./commands/findings.js"); await m.analyzeCommand(); });
|
|
1192
|
+
findingsCmd.action(async () => { const m = await import("./commands/findings.js"); await m.listCommand({}); });
|
|
1193
|
+
// --- verify ---
|
|
1194
|
+
program.command("verify").description("Run TLA+ model checking on system specs")
|
|
1195
|
+
.option("-s, --spec <name>", "Check a specific spec (default: all)")
|
|
1196
|
+
.option("-t, --timeout <seconds>", "TLC timeout in seconds", "120")
|
|
1197
|
+
.option("--apalache", "Use Apalache (symbolic bounded) instead of TLC")
|
|
1198
|
+
.option("-v, --verbose", "Show full TLC output")
|
|
1199
|
+
.option("--json", "Output results as JSON (pipe-friendly)")
|
|
1200
|
+
.action(async (options) => { const m = await import("./commands/verify.js"); await m.verifyCommand({ ...options, timeout: parseInt(options.timeout) }); });
|
|
1201
|
+
// ============================================================================
|
|
1202
|
+
// TELEMETRY
|
|
1203
|
+
// ============================================================================
|
|
1204
|
+
const telemetryCmd = program.command("telemetry").description("Manage anonymous usage telemetry");
|
|
1205
|
+
// Digest command registered lazily (was: registerDigestCommand)
|
|
1206
|
+
telemetryCmd
|
|
1207
|
+
.command('digest')
|
|
1208
|
+
.description('Analyze telemetry events: costs, stats, and suggestions')
|
|
1209
|
+
.option('--hours <hours>', 'Analysis period in hours', '24')
|
|
1210
|
+
.option('--format <format>', 'Output format: text or json', 'text')
|
|
1211
|
+
.option('--plots', 'Render terminal charts for key metrics')
|
|
1212
|
+
.option('--platform', 'Include platform-side data (requires network)')
|
|
1213
|
+
.action(async (options) => { const m = await import("./commands/digest.js"); await m.digestCommand(options); });
|
|
1214
|
+
telemetryCmd
|
|
1215
|
+
.command("status")
|
|
1216
|
+
.description("Show telemetry status")
|
|
1217
|
+
.action(async () => {
|
|
1218
|
+
const telemetry = await getTelemetry();
|
|
1219
|
+
const enabled = telemetry.isEnabled();
|
|
1220
|
+
const installId = telemetry.getInstallId();
|
|
1221
|
+
const queueSize = telemetry.getQueueSize();
|
|
1222
|
+
const spillover = telemetry.getSpilloverEvents();
|
|
1223
|
+
console.log(chalk.bold("\n Telemetry Status\n"));
|
|
1224
|
+
console.log(chalk.gray(" Enabled: ") + (enabled ? chalk.green("yes") : chalk.red("no")));
|
|
1225
|
+
if (enabled) {
|
|
1226
|
+
console.log(chalk.gray(" Install ID: ") + chalk.cyan(installId));
|
|
1227
|
+
console.log(chalk.gray(" Queue: ") + `${queueSize} events pending`);
|
|
1228
|
+
console.log(chalk.gray(" Spillover: ") + `${spillover.length} events on disk`);
|
|
1229
|
+
}
|
|
1230
|
+
console.log(chalk.gray("\n Disable: jfl preferences --no-telemetry"));
|
|
1231
|
+
console.log(chalk.gray(" Or set: JFL_TELEMETRY=0\n"));
|
|
1232
|
+
});
|
|
1233
|
+
telemetryCmd
|
|
1234
|
+
.command("show")
|
|
1235
|
+
.description("Show recent telemetry events from spillover queue")
|
|
1236
|
+
.action(async () => {
|
|
1237
|
+
const telemetry = await getTelemetry();
|
|
1238
|
+
const spillover = telemetry.getSpilloverEvents();
|
|
1239
|
+
if (spillover.length === 0) {
|
|
1240
|
+
console.log(chalk.gray("\n No events in spillover queue.\n"));
|
|
1241
|
+
return;
|
|
1242
|
+
}
|
|
1243
|
+
console.log(chalk.bold(`\n Last ${Math.min(spillover.length, 20)} events:\n`));
|
|
1244
|
+
for (const event of spillover.slice(-20)) {
|
|
1245
|
+
const time = event.ts.replace('T', ' ').slice(0, 19);
|
|
1246
|
+
console.log(chalk.gray(` [${time}]`) + ` ${chalk.cyan(event.event)}` + (event.duration_ms ? chalk.gray(` ${event.duration_ms}ms`) : ''));
|
|
1247
|
+
}
|
|
1248
|
+
console.log();
|
|
1249
|
+
});
|
|
1250
|
+
telemetryCmd
|
|
1251
|
+
.command("reset")
|
|
1252
|
+
.description("Reset install ID (generates new anonymous ID)")
|
|
1253
|
+
.action(async () => {
|
|
1254
|
+
const telemetry = await getTelemetry();
|
|
1255
|
+
telemetry.resetInstallId();
|
|
1256
|
+
console.log(chalk.green("\n Install ID reset. New ID: ") + chalk.cyan(telemetry.getInstallId()) + "\n");
|
|
1257
|
+
});
|
|
1258
|
+
telemetryCmd
|
|
1259
|
+
.command("track")
|
|
1260
|
+
.description("Emit a telemetry event (for shell scripts/hooks)")
|
|
1261
|
+
.requiredOption("--category <category>", "Event category (command, error, context_hub, session, performance)")
|
|
1262
|
+
.requiredOption("--event <event>", "Event name (e.g., hook:session_init)")
|
|
1263
|
+
.option("--duration <ms>", "Duration in milliseconds")
|
|
1264
|
+
.option("--success <bool>", "Whether the operation succeeded")
|
|
1265
|
+
.option("--endpoint <endpoint>", "HTTP endpoint")
|
|
1266
|
+
.option("--error-type <type>", "Error type")
|
|
1267
|
+
.option("--error-code <code>", "Error code")
|
|
1268
|
+
.allowUnknownOption()
|
|
1269
|
+
.action(async (options) => {
|
|
1270
|
+
const telemetry = await getTelemetry();
|
|
1271
|
+
telemetry.track({
|
|
1272
|
+
category: options.category,
|
|
1273
|
+
event: options.event,
|
|
1274
|
+
duration_ms: options.duration ? parseInt(options.duration, 10) : undefined,
|
|
1275
|
+
success: options.success !== undefined ? options.success === 'true' : undefined,
|
|
1276
|
+
endpoint: options.endpoint,
|
|
1277
|
+
error_type: options.errorType,
|
|
1278
|
+
error_code: options.errorCode,
|
|
1279
|
+
});
|
|
1280
|
+
await telemetry.flush();
|
|
1281
|
+
});
|
|
1282
|
+
telemetryCmd
|
|
1283
|
+
.command("monitor")
|
|
1284
|
+
.description("Monitor physical-world telemetry data in real-time")
|
|
1285
|
+
.option("--live", "Live monitoring with auto-refresh")
|
|
1286
|
+
.option("--compact", "Compact display mode")
|
|
1287
|
+
.option("--interval <seconds>", "Update interval in seconds (default: 5)", "5")
|
|
1288
|
+
.option("--filter <pattern>", "Filter events by category, event name, or content")
|
|
1289
|
+
.action(async (options) => {
|
|
1290
|
+
const { telemetryMonitorCommand } = await import("./commands/telemetry-monitor.js");
|
|
1291
|
+
await telemetryMonitorCommand(options);
|
|
1292
|
+
});
|
|
1293
|
+
telemetryCmd
|
|
1294
|
+
.command("test")
|
|
1295
|
+
.description("Generate test physical-world telemetry data (for testing)")
|
|
1296
|
+
.option("--count <n>", "Number of events to generate (default: 10)", "10")
|
|
1297
|
+
.option("--interval <ms>", "Interval between events in ms (default: 1000)", "1000")
|
|
1298
|
+
.option("--categories <list>", "Comma-separated event categories (default: command,performance,session)")
|
|
1299
|
+
.action(async (options) => {
|
|
1300
|
+
const { telemetryTestCommand } = await import("./commands/telemetry-test.js");
|
|
1301
|
+
await telemetryTestCommand(options);
|
|
1302
|
+
});
|
|
1303
|
+
// Default telemetry action
|
|
1304
|
+
telemetryCmd.action(async () => {
|
|
1305
|
+
// Show status by default
|
|
1306
|
+
const telemetry = await getTelemetry();
|
|
1307
|
+
const enabled = telemetry.isEnabled();
|
|
1308
|
+
const installId = telemetry.getInstallId();
|
|
1309
|
+
console.log(chalk.bold("\n Telemetry Status\n"));
|
|
1310
|
+
console.log(chalk.gray(" Enabled: ") + (enabled ? chalk.green("yes") : chalk.red("no")));
|
|
1311
|
+
if (enabled) {
|
|
1312
|
+
console.log(chalk.gray(" Install ID: ") + chalk.cyan(installId));
|
|
1313
|
+
}
|
|
1314
|
+
console.log(chalk.gray("\n Commands:"));
|
|
1315
|
+
console.log(" jfl telemetry status Show detailed status");
|
|
1316
|
+
console.log(" jfl telemetry show Show queued events");
|
|
1317
|
+
console.log(" jfl telemetry digest Cost and health analysis");
|
|
1318
|
+
console.log(" jfl telemetry monitor Monitor physical-world data");
|
|
1319
|
+
console.log(" jfl telemetry reset Reset install ID");
|
|
1320
|
+
console.log();
|
|
1321
|
+
});
|
|
1322
|
+
// ============================================================================
|
|
1323
|
+
// IMPROVE
|
|
1324
|
+
// ============================================================================
|
|
1325
|
+
program
|
|
1326
|
+
.command("organize")
|
|
1327
|
+
.description("Audit knowledge docs for staleness, propose updates, manage lifecycle")
|
|
1328
|
+
.option("--fix", "Generate PENDING.md with proposed updates and open questions")
|
|
1329
|
+
.option("--apply", "Apply reviewed changes from PENDING.md")
|
|
1330
|
+
.option("--archive", "Move archive-candidate docs to knowledge/archive/")
|
|
1331
|
+
.option("--days <days>", "Journal lookback period in days", "30")
|
|
1332
|
+
.action(async (options) => {
|
|
1333
|
+
const { organizeCommand } = await import("./commands/organize.js");
|
|
1334
|
+
await organizeCommand({ ...options, days: parseInt(options.days || "30") });
|
|
1335
|
+
});
|
|
1336
|
+
program
|
|
1337
|
+
.command("improve")
|
|
1338
|
+
.description("Analyze telemetry and suggest improvements")
|
|
1339
|
+
.option("--dry-run", "Preview suggestions without creating issues")
|
|
1340
|
+
.option("--auto", "Create GitHub issues for actionable suggestions")
|
|
1341
|
+
.option("--hours <hours>", "Analysis period in hours", "24")
|
|
1342
|
+
.action(async (options) => {
|
|
1343
|
+
const { improveCommand } = await import("./commands/improve.js");
|
|
1344
|
+
await improveCommand(options);
|
|
1345
|
+
});
|
|
1346
|
+
// ============================================================================
|
|
1347
|
+
// DOCTOR (unified health check)
|
|
1348
|
+
// ============================================================================
|
|
1349
|
+
program
|
|
1350
|
+
.command("doctor")
|
|
1351
|
+
.description("Check project health and auto-repair")
|
|
1352
|
+
.option("--fix", "Auto-repair fixable issues")
|
|
1353
|
+
.option("--json", "Output structured JSON (machine-readable)")
|
|
1354
|
+
.action(async (options) => {
|
|
1355
|
+
const { doctorCommand } = await import("./commands/doctor.js");
|
|
1356
|
+
await doctorCommand({ fix: options.fix, json: options.json });
|
|
1357
|
+
});
|
|
1358
|
+
// ============================================================================
|
|
1359
|
+
// TRAIN (policy head training pipeline)
|
|
1360
|
+
// ============================================================================
|
|
1361
|
+
const train = program.command("train").description("Policy head training pipeline");
|
|
1362
|
+
train
|
|
1363
|
+
.command("policy-head")
|
|
1364
|
+
.description("Train policy head (v2 transformer by default, --v1 for legacy MLP)")
|
|
1365
|
+
.option("-f, --force", "Train even if threshold not met")
|
|
1366
|
+
.option("--v1", "Use v1 MLP trainer instead of v2 transformer")
|
|
1367
|
+
.option("--epochs <n>", "Max training epochs")
|
|
1368
|
+
.option("--lr <rate>", "Learning rate")
|
|
1369
|
+
.option("--batch-size <n>", "Batch size")
|
|
1370
|
+
.option("--min-entries <n>", "Minimum entries required")
|
|
1371
|
+
.option("-o, --output <path>", "Output path for weights (v1 only)")
|
|
1372
|
+
.option("-a, --agent <name>", "Filter training data to specific agent")
|
|
1373
|
+
.action(async (options) => {
|
|
1374
|
+
const { trainPolicyHead } = await import("./commands/train.js");
|
|
1375
|
+
await trainPolicyHead(options);
|
|
1376
|
+
});
|
|
1377
|
+
train
|
|
1378
|
+
.command("transform")
|
|
1379
|
+
.description("Transform training buffer to v2 format (current_state, goal, correct_tool)")
|
|
1380
|
+
.option("--all", "Include entries where improved=false")
|
|
1381
|
+
.action(async (options) => {
|
|
1382
|
+
const { trainTransform } = await import("./commands/train.js");
|
|
1383
|
+
await trainTransform(options);
|
|
1384
|
+
});
|
|
1385
|
+
train
|
|
1386
|
+
.command("generate")
|
|
1387
|
+
.description("Generate synthetic training data for v2 policy head")
|
|
1388
|
+
.option("--goals-per-tool <n>", "Goals to generate per tool (default: 50)")
|
|
1389
|
+
.option("--states-per-goal <n>", "States to generate per goal (default: 2)")
|
|
1390
|
+
.action(async (options) => {
|
|
1391
|
+
const { trainGenerate } = await import("./commands/train.js");
|
|
1392
|
+
await trainGenerate(options);
|
|
1393
|
+
});
|
|
1394
|
+
train
|
|
1395
|
+
.command("eval")
|
|
1396
|
+
.description("Evaluate v2 policy head — per-tool accuracy report")
|
|
1397
|
+
.option("--split <name>", "Which split to evaluate: train/val/test (default: test)")
|
|
1398
|
+
.action(async (options) => {
|
|
1399
|
+
const { trainEval } = await import("./commands/train.js");
|
|
1400
|
+
await trainEval(options);
|
|
1401
|
+
});
|
|
1402
|
+
train
|
|
1403
|
+
.command("status")
|
|
1404
|
+
.description("Show training data stats, model info, and threshold")
|
|
1405
|
+
.action(async () => {
|
|
1406
|
+
const { trainStatus } = await import("./commands/train.js");
|
|
1407
|
+
await trainStatus();
|
|
1408
|
+
});
|
|
1409
|
+
train
|
|
1410
|
+
.command("export")
|
|
1411
|
+
.description("Export training data for external tools")
|
|
1412
|
+
.option("--format <fmt>", "Export format: jsonl or csv (default: jsonl)")
|
|
1413
|
+
.action(async (options) => {
|
|
1414
|
+
const { trainExport } = await import("./commands/train.js");
|
|
1415
|
+
await trainExport(options);
|
|
1416
|
+
});
|
|
1417
|
+
train
|
|
1418
|
+
.command("check")
|
|
1419
|
+
.description("Check if training threshold is met")
|
|
1420
|
+
.option("-q, --quiet", "Quiet mode — exit code only")
|
|
1421
|
+
.action(async (options) => {
|
|
1422
|
+
const { trainThresholdCheck } = await import("./commands/train.js");
|
|
1423
|
+
const ready = await trainThresholdCheck(options);
|
|
1424
|
+
if (!ready)
|
|
1425
|
+
process.exitCode = 1;
|
|
1426
|
+
});
|
|
1427
|
+
train.action(async () => {
|
|
1428
|
+
const { trainStatus } = await import("./commands/train.js");
|
|
1429
|
+
await trainStatus();
|
|
1430
|
+
});
|
|
1431
|
+
// ============================================================================
|
|
1432
|
+
// AGENT (narrowly-scoped agent scaffolding)
|
|
1433
|
+
// ============================================================================
|
|
1434
|
+
const agent = program.command("agent").description("Manage narrowly-scoped agents");
|
|
1435
|
+
agent
|
|
1436
|
+
.command("init")
|
|
1437
|
+
.description("Scaffold a new agent (manifest + policy + flows)")
|
|
1438
|
+
.argument("<name>", "Agent name (lowercase, hyphens allowed)")
|
|
1439
|
+
.option("-d, --description <desc>", "Agent description")
|
|
1440
|
+
.action(async (name, options) => {
|
|
1441
|
+
const { agentCommand } = await import("./commands/agent.js");
|
|
1442
|
+
await agentCommand("init", name, { description: options.description });
|
|
1443
|
+
});
|
|
1444
|
+
agent
|
|
1445
|
+
.command("list")
|
|
1446
|
+
.description("List registered agents")
|
|
1447
|
+
.action(async () => {
|
|
1448
|
+
const { agentCommand } = await import("./commands/agent.js");
|
|
1449
|
+
await agentCommand("list");
|
|
1450
|
+
});
|
|
1451
|
+
agent
|
|
1452
|
+
.command("status")
|
|
1453
|
+
.description("Show agent health and config")
|
|
1454
|
+
.argument("<name>", "Agent name")
|
|
1455
|
+
.action(async (name) => {
|
|
1456
|
+
const { agentCommand } = await import("./commands/agent.js");
|
|
1457
|
+
await agentCommand("status", name);
|
|
1458
|
+
});
|
|
1459
|
+
agent.action(async () => {
|
|
1460
|
+
const { agentCommand } = await import("./commands/agent.js");
|
|
1461
|
+
await agentCommand();
|
|
1462
|
+
});
|
|
1463
|
+
// ============================================================================
|
|
1464
|
+
// SETUP (auto-configure RL agents from project context)
|
|
1465
|
+
// ============================================================================
|
|
1466
|
+
program
|
|
1467
|
+
.command("setup")
|
|
1468
|
+
.description("Progressive intelligent setup - personalized RL agents based on your development patterns")
|
|
1469
|
+
.option("--dry-run", "Show recommendations without writing files")
|
|
1470
|
+
.option("-f, --force", "Proceed even if readiness check fails")
|
|
1471
|
+
.option("--from-violations", "Generate agents from TLC invariant violations")
|
|
1472
|
+
.option("--smart", "Use Stratus reasoning for agent recommendations")
|
|
1473
|
+
.action(async (options) => {
|
|
1474
|
+
const { setupCommand } = await import("./commands/setup.js");
|
|
1475
|
+
await setupCommand(options);
|
|
1476
|
+
});
|
|
1477
|
+
// ============================================================================
|
|
1478
|
+
// GTM COMMANDS
|
|
1479
|
+
// ============================================================================
|
|
1480
|
+
const gtm = program.command("gtm").description("GTM workspace management");
|
|
1481
|
+
gtm
|
|
1482
|
+
.command("process-service-update")
|
|
1483
|
+
.description("Process service sync notification (called by hooks)")
|
|
1484
|
+
.argument("[event-file]", "Path to service sync event JSON file")
|
|
1485
|
+
.action(async (eventFile) => {
|
|
1486
|
+
const { gtmProcessUpdate } = await import("./commands/gtm-process-update.js");
|
|
1487
|
+
await gtmProcessUpdate(eventFile);
|
|
1488
|
+
});
|
|
1489
|
+
// ============================================================================
|
|
1490
|
+
// PI INTEGRATION
|
|
1491
|
+
// ============================================================================
|
|
1492
|
+
const piCmd = program
|
|
1493
|
+
.command("pi")
|
|
1494
|
+
.description("Pi AI agent runtime — launch JFL with Pi extensions, multi-provider LLM, agent grid")
|
|
1495
|
+
.option("--provider <name>", "AI provider (anthropic, google, openai, openrouter)")
|
|
1496
|
+
.option("--model <id>", "Model ID or pattern (e.g. claude-opus-4-6, *sonnet*, gpt-4o)")
|
|
1497
|
+
.option("--thinking <level>", "Thinking level: off, low, medium, high, xhigh")
|
|
1498
|
+
.option("--yolo", "Skip all permission prompts (pass-through to Pi)")
|
|
1499
|
+
.option("--mode <mode>", "Pi mode: interactive (default), rpc, headless")
|
|
1500
|
+
.option("--task <task>", "Task for RPC/headless mode")
|
|
1501
|
+
.option("--onboarding <v1|v2|v3>", "Onboarding variant: v1 (minimal), v2 (cinematic), v3 (mission control)")
|
|
1502
|
+
.allowUnknownOption(true)
|
|
1503
|
+
.action(async (options, cmd) => {
|
|
1504
|
+
const { piCommand } = await import("./commands/pi.js");
|
|
1505
|
+
await piCommand(options, cmd.args);
|
|
1506
|
+
});
|
|
1507
|
+
const piAgents = piCmd.command("agents").description("Manage Pi agent team sessions");
|
|
1508
|
+
piAgents
|
|
1509
|
+
.command("run")
|
|
1510
|
+
.description("Spawn agent team as Pi RPC subprocesses")
|
|
1511
|
+
.option("--team <yaml>", "Team configuration YAML", "teams/gtm-team.yaml")
|
|
1512
|
+
.option("--dry-run", "Show what would be spawned without spawning")
|
|
1513
|
+
.action(async (options) => {
|
|
1514
|
+
const { piAgentsRunCommand } = await import("./commands/pi.js");
|
|
1515
|
+
await piAgentsRunCommand(options);
|
|
1516
|
+
});
|
|
1517
|
+
// ============================================================================
|
|
1518
|
+
const piFleet = piCmd.command("fleet").description("VM agent fleet — spawn, collect, destroy waves of autonomous agents");
|
|
1519
|
+
piFleet
|
|
1520
|
+
.command("setup")
|
|
1521
|
+
.description("Install VM backend, check boot arg, create base image")
|
|
1522
|
+
.option("--backend <name>", "VM backend: lume (default)", "lume")
|
|
1523
|
+
.option("--cpus <n>", "CPUs per VM", "4")
|
|
1524
|
+
.option("--memory <mb>", "Memory per VM in MB", "4096")
|
|
1525
|
+
.option("--skip-boot-arg", "Skip VM quota boot arg check")
|
|
1526
|
+
.action(async (options) => {
|
|
1527
|
+
const { fleetSetup } = await import("./commands/pi-fleet.js");
|
|
1528
|
+
await fleetSetup({ ...options, cpus: parseInt(options.cpus), memory: parseInt(options.memory) });
|
|
1529
|
+
});
|
|
1530
|
+
piFleet
|
|
1531
|
+
.command("spawn <count>")
|
|
1532
|
+
.description("Spawn N agent VMs for parallel autoresearch")
|
|
1533
|
+
.option("--rounds <n>", "Autoresearch rounds per agent", "5")
|
|
1534
|
+
.option("--repo <url>", "Target repo (defaults to git remote origin)")
|
|
1535
|
+
.action(async (count, options) => {
|
|
1536
|
+
const { fleetSpawn } = await import("./commands/pi-fleet.js");
|
|
1537
|
+
await fleetSpawn(parseInt(count), { ...options, rounds: parseInt(options.rounds) });
|
|
1538
|
+
});
|
|
1539
|
+
piFleet
|
|
1540
|
+
.command("status")
|
|
1541
|
+
.description("Show running agents, tuple counts, health")
|
|
1542
|
+
.action(async () => {
|
|
1543
|
+
const { fleetStatus } = await import("./commands/pi-fleet.js");
|
|
1544
|
+
await fleetStatus();
|
|
1545
|
+
});
|
|
1546
|
+
piFleet
|
|
1547
|
+
.command("collect [waveId]")
|
|
1548
|
+
.description("Pull tuples from agents, dedup, append to training buffer")
|
|
1549
|
+
.action(async (waveId) => {
|
|
1550
|
+
const { fleetCollect } = await import("./commands/pi-fleet.js");
|
|
1551
|
+
await fleetCollect(waveId);
|
|
1552
|
+
});
|
|
1553
|
+
piFleet
|
|
1554
|
+
.command("destroy [waveId]")
|
|
1555
|
+
.description("Tear down a wave of agent VMs")
|
|
1556
|
+
.action(async (waveId) => {
|
|
1557
|
+
const { fleetDestroy } = await import("./commands/pi-fleet.js");
|
|
1558
|
+
await fleetDestroy(waveId);
|
|
1559
|
+
});
|
|
1560
|
+
piFleet
|
|
1561
|
+
.command("logs <agent>")
|
|
1562
|
+
.description("Tail an agent's autoresearch log")
|
|
1563
|
+
.action(async (agent) => {
|
|
1564
|
+
const { fleetLogs } = await import("./commands/pi-fleet.js");
|
|
1565
|
+
await fleetLogs(agent);
|
|
1566
|
+
});
|
|
1567
|
+
// ============================================================================
|
|
1568
|
+
// Kanban
|
|
1569
|
+
// ============================================================================
|
|
1570
|
+
const kanban = program
|
|
1571
|
+
.command("kanban")
|
|
1572
|
+
.description("Task board — cards flow backlog → in_progress → eval → done");
|
|
1573
|
+
kanban
|
|
1574
|
+
.command("ls")
|
|
1575
|
+
.description("Show the board")
|
|
1576
|
+
.option("--json", "JSON output")
|
|
1577
|
+
.option("--column <col>", "Filter by column")
|
|
1578
|
+
.option("--scope <name>", "Filter by service scope")
|
|
1579
|
+
.option("--label <tag>", "Filter by label")
|
|
1580
|
+
.option("--compact", "Compact view")
|
|
1581
|
+
.action(async (options) => {
|
|
1582
|
+
const { kanbanLs } = await import("./commands/kanban.js");
|
|
1583
|
+
await kanbanLs(process.cwd(), options);
|
|
1584
|
+
});
|
|
1585
|
+
kanban
|
|
1586
|
+
.command("add <title>")
|
|
1587
|
+
.description("Add a card to backlog")
|
|
1588
|
+
.option("--description <desc>", "Card description")
|
|
1589
|
+
.option("--priority <n>", "Priority (higher = first)")
|
|
1590
|
+
.option("--source <src>", "Source: human, agent, setup, verify, findings")
|
|
1591
|
+
.option("--scope <name>", "Service scope (auto-detected from config)")
|
|
1592
|
+
.option("--label <tag...>", "Labels (repeatable)")
|
|
1593
|
+
.action(async (title, options) => {
|
|
1594
|
+
const { kanbanAdd } = await import("./commands/kanban.js");
|
|
1595
|
+
await kanbanAdd(process.cwd(), title, options);
|
|
1596
|
+
});
|
|
1597
|
+
kanban
|
|
1598
|
+
.command("move <id> <column>")
|
|
1599
|
+
.description("Move card to column (backlog, in_progress, eval, done)")
|
|
1600
|
+
.option("--agent <name>", "Agent performing the move")
|
|
1601
|
+
.action(async (id, column, options) => {
|
|
1602
|
+
const { kanbanMove } = await import("./commands/kanban.js");
|
|
1603
|
+
await kanbanMove(process.cwd(), id, column, options);
|
|
1604
|
+
});
|
|
1605
|
+
kanban
|
|
1606
|
+
.command("pick")
|
|
1607
|
+
.description("Pick top card from backlog (outputs title for piping)")
|
|
1608
|
+
.option("--agent <name>", "Agent picking the card")
|
|
1609
|
+
.action(async (options) => {
|
|
1610
|
+
const { kanbanPick } = await import("./commands/kanban.js");
|
|
1611
|
+
await kanbanPick(process.cwd(), options);
|
|
1612
|
+
});
|
|
1613
|
+
kanban
|
|
1614
|
+
.command("done <id>")
|
|
1615
|
+
.description("Mark card done")
|
|
1616
|
+
.option("--agent <name>", "Agent that completed it")
|
|
1617
|
+
.action(async (id, options) => {
|
|
1618
|
+
const { kanbanDone } = await import("./commands/kanban.js");
|
|
1619
|
+
await kanbanDone(process.cwd(), id, options);
|
|
1620
|
+
});
|
|
1621
|
+
kanban
|
|
1622
|
+
.command("bootstrap")
|
|
1623
|
+
.description("Create kanban labels + optional GitHub Action on the repo")
|
|
1624
|
+
.option("--workflow", "Also install the kanban GitHub Action")
|
|
1625
|
+
.action(async (options) => {
|
|
1626
|
+
const { kanbanBootstrap } = await import("./commands/kanban.js");
|
|
1627
|
+
await kanbanBootstrap(process.cwd(), options);
|
|
1628
|
+
});
|
|
1629
|
+
// ============================================================================
|
|
1630
|
+
// Linear
|
|
1631
|
+
// ============================================================================
|
|
1632
|
+
const linear = program
|
|
1633
|
+
.command("linear")
|
|
1634
|
+
.description("Sync with Linear — bidirectional issue sync (GitHub ↔ Linear)");
|
|
1635
|
+
linear
|
|
1636
|
+
.command("link")
|
|
1637
|
+
.description("Link a Linear project to this workspace")
|
|
1638
|
+
.action(async () => {
|
|
1639
|
+
const { findProjectRoot: fpr } = await import("./utils/jfl-config.js");
|
|
1640
|
+
const root = fpr(process.cwd());
|
|
1641
|
+
if (!root) {
|
|
1642
|
+
console.error(chalk.red("Not in a JFL project. Run jfl init first."));
|
|
1643
|
+
process.exit(1);
|
|
1644
|
+
}
|
|
1645
|
+
const { linearLink } = await import("./commands/linear.js");
|
|
1646
|
+
await linearLink(root);
|
|
1647
|
+
});
|
|
1648
|
+
linear
|
|
1649
|
+
.command("unlink")
|
|
1650
|
+
.description("Unlink the Linear project")
|
|
1651
|
+
.action(async () => {
|
|
1652
|
+
const { findProjectRoot: fpr } = await import("./utils/jfl-config.js");
|
|
1653
|
+
const root = fpr(process.cwd());
|
|
1654
|
+
if (!root) {
|
|
1655
|
+
console.error(chalk.red("Not in a JFL project."));
|
|
1656
|
+
process.exit(1);
|
|
1657
|
+
}
|
|
1658
|
+
const { linearUnlink } = await import("./commands/linear.js");
|
|
1659
|
+
await linearUnlink(root);
|
|
1660
|
+
});
|
|
1661
|
+
linear
|
|
1662
|
+
.command("status")
|
|
1663
|
+
.description("Show Linear sync state and mapped issues")
|
|
1664
|
+
.action(async () => {
|
|
1665
|
+
const { findProjectRoot: fpr } = await import("./utils/jfl-config.js");
|
|
1666
|
+
const root = fpr(process.cwd()) ?? process.cwd();
|
|
1667
|
+
const { linearStatus } = await import("./commands/linear.js");
|
|
1668
|
+
await linearStatus(root);
|
|
1669
|
+
});
|
|
1670
|
+
linear
|
|
1671
|
+
.command("sync")
|
|
1672
|
+
.description("Bidirectional sync: GitHub Issues ↔ Linear")
|
|
1673
|
+
.option("--direction <dir>", "Sync direction: github, linear, or both (default: both)", "both")
|
|
1674
|
+
.option("--dry-run", "Preview changes without applying them")
|
|
1675
|
+
.option("--json", "Output structured JSON (for CI and agents)")
|
|
1676
|
+
.action(async (options) => {
|
|
1677
|
+
const { findProjectRoot: fpr } = await import("./utils/jfl-config.js");
|
|
1678
|
+
const root = fpr(process.cwd());
|
|
1679
|
+
if (!root) {
|
|
1680
|
+
console.error(chalk.red("Not in a JFL project."));
|
|
1681
|
+
process.exit(1);
|
|
1682
|
+
}
|
|
1683
|
+
const { linearSync } = await import("./commands/linear.js");
|
|
1684
|
+
await linearSync(root, { direction: options.direction, dryRun: options.dryRun, json: options.json });
|
|
1685
|
+
});
|
|
1686
|
+
linear
|
|
1687
|
+
.command("bootstrap")
|
|
1688
|
+
.description("Deploy GitHub Actions sync workflow + set secrets (one-time setup)")
|
|
1689
|
+
.action(async () => {
|
|
1690
|
+
const { findProjectRoot: fpr } = await import("./utils/jfl-config.js");
|
|
1691
|
+
const root = fpr(process.cwd());
|
|
1692
|
+
if (!root) {
|
|
1693
|
+
console.error(chalk.red("Not in a JFL project."));
|
|
1694
|
+
process.exit(1);
|
|
1695
|
+
}
|
|
1696
|
+
const { linearBootstrap } = await import("./commands/linear.js");
|
|
1697
|
+
await linearBootstrap(root);
|
|
1698
|
+
});
|
|
1699
|
+
// Parse and run
|
|
1700
|
+
if (TENET_DEBUG) {
|
|
1701
|
+
console.error(`[timing] before parse: ${Date.now() - globalThis.__jfl_start}ms`);
|
|
1702
|
+
}
|
|
1703
|
+
program.parse();
|
|
1704
|
+
// Library exports
|
|
1705
|
+
export * from "./lib/domain/index.js";
|
|
1706
|
+
export * from "./lib/connectors/index.js";
|
|
1707
|
+
//# sourceMappingURL=index.js.map
|