@10et/cli 1.0.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/LICENSE +21 -0
- package/README.md +79 -0
- package/clawdbot-plugin/clawdbot.plugin.json +20 -0
- package/clawdbot-plugin/index.js +555 -0
- package/clawdbot-plugin/index.ts +582 -0
- package/clawdbot-skill/README.md +328 -0
- package/clawdbot-skill/SKILL.md +59 -0
- package/clawdbot-skill/index.ts +683 -0
- package/clawdbot-skill/package.json +28 -0
- package/clawdbot-skill/skill.json +19 -0
- package/dist/commands/agent.d.ts +7 -0
- package/dist/commands/agent.d.ts.map +1 -0
- package/dist/commands/agent.js +170 -0
- package/dist/commands/agent.js.map +1 -0
- package/dist/commands/agents.d.ts +5 -0
- package/dist/commands/agents.d.ts.map +1 -0
- package/dist/commands/agents.js +400 -0
- package/dist/commands/agents.js.map +1 -0
- package/dist/commands/ci-setup.d.ts +5 -0
- package/dist/commands/ci-setup.d.ts.map +1 -0
- package/dist/commands/ci-setup.js +82 -0
- package/dist/commands/ci-setup.js.map +1 -0
- package/dist/commands/clawdbot.d.ts +11 -0
- package/dist/commands/clawdbot.d.ts.map +1 -0
- package/dist/commands/clawdbot.js +215 -0
- package/dist/commands/clawdbot.js.map +1 -0
- package/dist/commands/context-hub.d.ts +22 -0
- package/dist/commands/context-hub.d.ts.map +1 -0
- package/dist/commands/context-hub.js +3505 -0
- package/dist/commands/context-hub.js.map +1 -0
- package/dist/commands/deploy.d.ts +5 -0
- package/dist/commands/deploy.d.ts.map +1 -0
- package/dist/commands/deploy.js +371 -0
- package/dist/commands/deploy.js.map +1 -0
- package/dist/commands/digest.d.ts +12 -0
- package/dist/commands/digest.d.ts.map +1 -0
- package/dist/commands/digest.js +128 -0
- package/dist/commands/digest.js.map +1 -0
- package/dist/commands/doctor.d.ts +8 -0
- package/dist/commands/doctor.d.ts.map +1 -0
- package/dist/commands/doctor.js +265 -0
- package/dist/commands/doctor.js.map +1 -0
- package/dist/commands/eval.d.ts +46 -0
- package/dist/commands/eval.d.ts.map +1 -0
- package/dist/commands/eval.js +427 -0
- package/dist/commands/eval.js.map +1 -0
- package/dist/commands/feedback.d.ts +2 -0
- package/dist/commands/feedback.d.ts.map +1 -0
- package/dist/commands/feedback.js +179 -0
- package/dist/commands/feedback.js.map +1 -0
- package/dist/commands/findings.d.ts +13 -0
- package/dist/commands/findings.d.ts.map +1 -0
- package/dist/commands/findings.js +203 -0
- package/dist/commands/findings.js.map +1 -0
- package/dist/commands/flows.d.ts +10 -0
- package/dist/commands/flows.d.ts.map +1 -0
- package/dist/commands/flows.js +423 -0
- package/dist/commands/flows.js.map +1 -0
- package/dist/commands/gtm-process-update.d.ts +10 -0
- package/dist/commands/gtm-process-update.d.ts.map +1 -0
- package/dist/commands/gtm-process-update.js +101 -0
- package/dist/commands/gtm-process-update.js.map +1 -0
- package/dist/commands/hooks.d.ts +13 -0
- package/dist/commands/hooks.d.ts.map +1 -0
- package/dist/commands/hooks.js +304 -0
- package/dist/commands/hooks.js.map +1 -0
- package/dist/commands/hud.d.ts +4 -0
- package/dist/commands/hud.d.ts.map +1 -0
- package/dist/commands/hud.js +300 -0
- package/dist/commands/hud.js.map +1 -0
- package/dist/commands/ide.d.ts +28 -0
- package/dist/commands/ide.d.ts.map +1 -0
- package/dist/commands/ide.js +628 -0
- package/dist/commands/ide.js.map +1 -0
- package/dist/commands/improve.d.ts +11 -0
- package/dist/commands/improve.d.ts.map +1 -0
- package/dist/commands/improve.js +77 -0
- package/dist/commands/improve.js.map +1 -0
- package/dist/commands/init-from-service.d.ts +15 -0
- package/dist/commands/init-from-service.d.ts.map +1 -0
- package/dist/commands/init-from-service.js +540 -0
- package/dist/commands/init-from-service.js.map +1 -0
- package/dist/commands/init.d.ts +15 -0
- package/dist/commands/init.d.ts.map +1 -0
- package/dist/commands/init.js +940 -0
- package/dist/commands/init.js.map +1 -0
- package/dist/commands/kanban.d.ts +34 -0
- package/dist/commands/kanban.d.ts.map +1 -0
- package/dist/commands/kanban.js +225 -0
- package/dist/commands/kanban.js.map +1 -0
- package/dist/commands/linear.d.ts +41 -0
- package/dist/commands/linear.d.ts.map +1 -0
- package/dist/commands/linear.js +740 -0
- package/dist/commands/linear.js.map +1 -0
- package/dist/commands/login.d.ts +12 -0
- package/dist/commands/login.d.ts.map +1 -0
- package/dist/commands/login.js +780 -0
- package/dist/commands/login.js.map +1 -0
- package/dist/commands/memory.d.ts +38 -0
- package/dist/commands/memory.d.ts.map +1 -0
- package/dist/commands/memory.js +229 -0
- package/dist/commands/memory.js.map +1 -0
- package/dist/commands/migrate-services.d.ts +8 -0
- package/dist/commands/migrate-services.d.ts.map +1 -0
- package/dist/commands/migrate-services.js +182 -0
- package/dist/commands/migrate-services.js.map +1 -0
- package/dist/commands/migrate-tenet.d.ts +25 -0
- package/dist/commands/migrate-tenet.d.ts.map +1 -0
- package/dist/commands/migrate-tenet.js +252 -0
- package/dist/commands/migrate-tenet.js.map +1 -0
- package/dist/commands/onboard.d.ts +24 -0
- package/dist/commands/onboard.d.ts.map +1 -0
- package/dist/commands/onboard.js +873 -0
- package/dist/commands/onboard.js.map +1 -0
- package/dist/commands/openclaw.d.ts +59 -0
- package/dist/commands/openclaw.d.ts.map +1 -0
- package/dist/commands/openclaw.js +775 -0
- package/dist/commands/openclaw.js.map +1 -0
- package/dist/commands/orchestrate.d.ts +14 -0
- package/dist/commands/orchestrate.d.ts.map +1 -0
- package/dist/commands/orchestrate.js +270 -0
- package/dist/commands/orchestrate.js.map +1 -0
- package/dist/commands/organize.d.ts +16 -0
- package/dist/commands/organize.d.ts.map +1 -0
- package/dist/commands/organize.js +334 -0
- package/dist/commands/organize.js.map +1 -0
- package/dist/commands/peter.d.ts +21 -0
- package/dist/commands/peter.d.ts.map +1 -0
- package/dist/commands/peter.js +2778 -0
- package/dist/commands/peter.js.map +1 -0
- package/dist/commands/pi-fleet.d.ts +18 -0
- package/dist/commands/pi-fleet.d.ts.map +1 -0
- package/dist/commands/pi-fleet.js +382 -0
- package/dist/commands/pi-fleet.js.map +1 -0
- package/dist/commands/pi.d.ts +25 -0
- package/dist/commands/pi.d.ts.map +1 -0
- package/dist/commands/pi.js +218 -0
- package/dist/commands/pi.js.map +1 -0
- package/dist/commands/pivot.d.ts +28 -0
- package/dist/commands/pivot.d.ts.map +1 -0
- package/dist/commands/pivot.js +216 -0
- package/dist/commands/pivot.js.map +1 -0
- package/dist/commands/portfolio.d.ts +11 -0
- package/dist/commands/portfolio.d.ts.map +1 -0
- package/dist/commands/portfolio.js +239 -0
- package/dist/commands/portfolio.js.map +1 -0
- package/dist/commands/predict.d.ts +25 -0
- package/dist/commands/predict.d.ts.map +1 -0
- package/dist/commands/predict.js +234 -0
- package/dist/commands/predict.js.map +1 -0
- package/dist/commands/profile.d.ts +46 -0
- package/dist/commands/profile.d.ts.map +1 -0
- package/dist/commands/profile.js +498 -0
- package/dist/commands/profile.js.map +1 -0
- package/dist/commands/ralph.d.ts +11 -0
- package/dist/commands/ralph.d.ts.map +1 -0
- package/dist/commands/ralph.js +102 -0
- package/dist/commands/ralph.js.map +1 -0
- package/dist/commands/repair.d.ts +7 -0
- package/dist/commands/repair.d.ts.map +1 -0
- package/dist/commands/repair.js +356 -0
- package/dist/commands/repair.js.map +1 -0
- package/dist/commands/scope.d.ts +8 -0
- package/dist/commands/scope.d.ts.map +1 -0
- package/dist/commands/scope.js +503 -0
- package/dist/commands/scope.js.map +1 -0
- package/dist/commands/service-agent.d.ts +16 -0
- package/dist/commands/service-agent.d.ts.map +1 -0
- package/dist/commands/service-agent.js +375 -0
- package/dist/commands/service-agent.js.map +1 -0
- package/dist/commands/service-manager.d.ts +12 -0
- package/dist/commands/service-manager.d.ts.map +1 -0
- package/dist/commands/service-manager.js +969 -0
- package/dist/commands/service-manager.js.map +1 -0
- package/dist/commands/service-validate.d.ts +12 -0
- package/dist/commands/service-validate.d.ts.map +1 -0
- package/dist/commands/service-validate.js +619 -0
- package/dist/commands/service-validate.js.map +1 -0
- package/dist/commands/services-create.d.ts +15 -0
- package/dist/commands/services-create.d.ts.map +1 -0
- package/dist/commands/services-create.js +1800 -0
- package/dist/commands/services-create.js.map +1 -0
- package/dist/commands/services-scan.d.ts +13 -0
- package/dist/commands/services-scan.d.ts.map +1 -0
- package/dist/commands/services-scan.js +251 -0
- package/dist/commands/services-scan.js.map +1 -0
- package/dist/commands/services-sync-agents.d.ts +23 -0
- package/dist/commands/services-sync-agents.d.ts.map +1 -0
- package/dist/commands/services-sync-agents.js +207 -0
- package/dist/commands/services-sync-agents.js.map +1 -0
- package/dist/commands/services.d.ts +19 -0
- package/dist/commands/services.d.ts.map +1 -0
- package/dist/commands/services.js +906 -0
- package/dist/commands/services.js.map +1 -0
- package/dist/commands/session.d.ts +7 -0
- package/dist/commands/session.d.ts.map +1 -0
- package/dist/commands/session.js +597 -0
- package/dist/commands/session.js.map +1 -0
- package/dist/commands/setup.d.ts +12 -0
- package/dist/commands/setup.d.ts.map +1 -0
- package/dist/commands/setup.js +727 -0
- package/dist/commands/setup.js.map +1 -0
- package/dist/commands/skills.d.ts +31 -0
- package/dist/commands/skills.d.ts.map +1 -0
- package/dist/commands/skills.js +314 -0
- package/dist/commands/skills.js.map +1 -0
- package/dist/commands/start.d.ts +25 -0
- package/dist/commands/start.d.ts.map +1 -0
- package/dist/commands/start.js +251 -0
- package/dist/commands/start.js.map +1 -0
- package/dist/commands/status.d.ts +2 -0
- package/dist/commands/status.d.ts.map +1 -0
- package/dist/commands/status.js +163 -0
- package/dist/commands/status.js.map +1 -0
- package/dist/commands/synopsis.d.ts +54 -0
- package/dist/commands/synopsis.d.ts.map +1 -0
- package/dist/commands/synopsis.js +277 -0
- package/dist/commands/synopsis.js.map +1 -0
- package/dist/commands/telemetry-monitor.d.ts +11 -0
- package/dist/commands/telemetry-monitor.d.ts.map +1 -0
- package/dist/commands/telemetry-monitor.js +224 -0
- package/dist/commands/telemetry-monitor.js.map +1 -0
- package/dist/commands/telemetry-test.d.ts +11 -0
- package/dist/commands/telemetry-test.d.ts.map +1 -0
- package/dist/commands/telemetry-test.js +67 -0
- package/dist/commands/telemetry-test.js.map +1 -0
- package/dist/commands/tenet-agents.d.ts +13 -0
- package/dist/commands/tenet-agents.d.ts.map +1 -0
- package/dist/commands/tenet-agents.js +191 -0
- package/dist/commands/tenet-agents.js.map +1 -0
- package/dist/commands/tenet-setup.d.ts +20 -0
- package/dist/commands/tenet-setup.d.ts.map +1 -0
- package/dist/commands/tenet-setup.js +135 -0
- package/dist/commands/tenet-setup.js.map +1 -0
- package/dist/commands/train.d.ts +51 -0
- package/dist/commands/train.d.ts.map +1 -0
- package/dist/commands/train.js +692 -0
- package/dist/commands/train.js.map +1 -0
- package/dist/commands/update.d.ts +12 -0
- package/dist/commands/update.d.ts.map +1 -0
- package/dist/commands/update.js +559 -0
- package/dist/commands/update.js.map +1 -0
- package/dist/commands/validate-settings.d.ts +37 -0
- package/dist/commands/validate-settings.d.ts.map +1 -0
- package/dist/commands/validate-settings.js +197 -0
- package/dist/commands/validate-settings.js.map +1 -0
- package/dist/commands/verify.d.ts +14 -0
- package/dist/commands/verify.d.ts.map +1 -0
- package/dist/commands/verify.js +304 -0
- package/dist/commands/verify.js.map +1 -0
- package/dist/commands/viz.d.ts +40 -0
- package/dist/commands/viz.d.ts.map +1 -0
- package/dist/commands/viz.js +877 -0
- package/dist/commands/viz.js.map +1 -0
- package/dist/commands/voice.d.ts +409 -0
- package/dist/commands/voice.d.ts.map +1 -0
- package/dist/commands/voice.js +4765 -0
- package/dist/commands/voice.js.map +1 -0
- package/dist/commands/whoami.d.ts +2 -0
- package/dist/commands/whoami.d.ts.map +1 -0
- package/dist/commands/whoami.js +24 -0
- package/dist/commands/whoami.js.map +1 -0
- package/dist/dashboard/index.d.ts +11 -0
- package/dist/dashboard/index.d.ts.map +1 -0
- package/dist/dashboard/index.js +70 -0
- package/dist/dashboard/index.js.map +1 -0
- package/dist/dashboard-static/assets/index-BVrmW-ZI.js +154 -0
- package/dist/dashboard-static/assets/index-DtruPD44.css +1 -0
- package/dist/dashboard-static/index.html +16 -0
- package/dist/index.d.ts +4 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +1707 -0
- package/dist/index.js.map +1 -0
- package/dist/lib/advanced-setup.d.ts +78 -0
- package/dist/lib/advanced-setup.d.ts.map +1 -0
- package/dist/lib/advanced-setup.js +433 -0
- package/dist/lib/advanced-setup.js.map +1 -0
- package/dist/lib/agent-config.d.ts +86 -0
- package/dist/lib/agent-config.d.ts.map +1 -0
- package/dist/lib/agent-config.js +281 -0
- package/dist/lib/agent-config.js.map +1 -0
- package/dist/lib/agent-generator.d.ts +36 -0
- package/dist/lib/agent-generator.d.ts.map +1 -0
- package/dist/lib/agent-generator.js +400 -0
- package/dist/lib/agent-generator.js.map +1 -0
- package/dist/lib/agent-guards.d.ts +67 -0
- package/dist/lib/agent-guards.d.ts.map +1 -0
- package/dist/lib/agent-guards.js +229 -0
- package/dist/lib/agent-guards.js.map +1 -0
- package/dist/lib/agent-manifest.d.ts +35 -0
- package/dist/lib/agent-manifest.d.ts.map +1 -0
- package/dist/lib/agent-manifest.js +75 -0
- package/dist/lib/agent-manifest.js.map +1 -0
- package/dist/lib/agent-runtime-api.d.ts +32 -0
- package/dist/lib/agent-runtime-api.d.ts.map +1 -0
- package/dist/lib/agent-runtime-api.js +270 -0
- package/dist/lib/agent-runtime-api.js.map +1 -0
- package/dist/lib/agent-session.d.ts +104 -0
- package/dist/lib/agent-session.d.ts.map +1 -0
- package/dist/lib/agent-session.js +954 -0
- package/dist/lib/agent-session.js.map +1 -0
- package/dist/lib/build-supervisor.d.ts +44 -0
- package/dist/lib/build-supervisor.d.ts.map +1 -0
- package/dist/lib/build-supervisor.js +79 -0
- package/dist/lib/build-supervisor.js.map +1 -0
- package/dist/lib/connectors/index.d.ts +19 -0
- package/dist/lib/connectors/index.d.ts.map +1 -0
- package/dist/lib/connectors/index.js +23 -0
- package/dist/lib/connectors/index.js.map +1 -0
- package/dist/lib/counterfactual-engine.d.ts +136 -0
- package/dist/lib/counterfactual-engine.d.ts.map +1 -0
- package/dist/lib/counterfactual-engine.js +417 -0
- package/dist/lib/counterfactual-engine.js.map +1 -0
- package/dist/lib/counterfactual-training-bridge.d.ts +114 -0
- package/dist/lib/counterfactual-training-bridge.d.ts.map +1 -0
- package/dist/lib/counterfactual-training-bridge.js +322 -0
- package/dist/lib/counterfactual-training-bridge.js.map +1 -0
- package/dist/lib/discovery-agent.d.ts +48 -0
- package/dist/lib/discovery-agent.d.ts.map +1 -0
- package/dist/lib/discovery-agent.js +111 -0
- package/dist/lib/discovery-agent.js.map +1 -0
- package/dist/lib/domain/engine.d.ts +11 -0
- package/dist/lib/domain/engine.d.ts.map +1 -0
- package/dist/lib/domain/engine.js +23 -0
- package/dist/lib/domain/engine.js.map +1 -0
- package/dist/lib/domain/index.d.ts +3 -0
- package/dist/lib/domain/index.d.ts.map +1 -0
- package/dist/lib/domain/index.js +3 -0
- package/dist/lib/domain/index.js.map +1 -0
- package/dist/lib/domain/template-loader.d.ts +9 -0
- package/dist/lib/domain/template-loader.d.ts.map +1 -0
- package/dist/lib/domain/template-loader.js +29 -0
- package/dist/lib/domain/template-loader.js.map +1 -0
- package/dist/lib/domain/types.d.ts +29 -0
- package/dist/lib/domain/types.d.ts.map +1 -0
- package/dist/lib/domain/types.js +2 -0
- package/dist/lib/domain/types.js.map +1 -0
- package/dist/lib/dynamics-model.d.ts +107 -0
- package/dist/lib/dynamics-model.d.ts.map +1 -0
- package/dist/lib/dynamics-model.js +363 -0
- package/dist/lib/dynamics-model.js.map +1 -0
- package/dist/lib/eval-snapshot.d.ts +47 -0
- package/dist/lib/eval-snapshot.d.ts.map +1 -0
- package/dist/lib/eval-snapshot.js +326 -0
- package/dist/lib/eval-snapshot.js.map +1 -0
- package/dist/lib/eval-store.d.ts +20 -0
- package/dist/lib/eval-store.d.ts.map +1 -0
- package/dist/lib/eval-store.js +209 -0
- package/dist/lib/eval-store.js.map +1 -0
- package/dist/lib/findings-engine.d.ts +51 -0
- package/dist/lib/findings-engine.d.ts.map +1 -0
- package/dist/lib/findings-engine.js +338 -0
- package/dist/lib/findings-engine.js.map +1 -0
- package/dist/lib/flow-engine.d.ts +57 -0
- package/dist/lib/flow-engine.d.ts.map +1 -0
- package/dist/lib/flow-engine.js +717 -0
- package/dist/lib/flow-engine.js.map +1 -0
- package/dist/lib/gtm-generator.d.ts +29 -0
- package/dist/lib/gtm-generator.d.ts.map +1 -0
- package/dist/lib/gtm-generator.js +250 -0
- package/dist/lib/gtm-generator.js.map +1 -0
- package/dist/lib/hook-transformer.d.ts +11 -0
- package/dist/lib/hook-transformer.d.ts.map +1 -0
- package/dist/lib/hook-transformer.js +74 -0
- package/dist/lib/hook-transformer.js.map +1 -0
- package/dist/lib/hub-client.d.ts +81 -0
- package/dist/lib/hub-client.d.ts.map +1 -0
- package/dist/lib/hub-client.js +73 -0
- package/dist/lib/hub-client.js.map +1 -0
- package/dist/lib/hub-health.d.ts +40 -0
- package/dist/lib/hub-health.d.ts.map +1 -0
- package/dist/lib/hub-health.js +101 -0
- package/dist/lib/hub-health.js.map +1 -0
- package/dist/lib/ide-panes.d.ts +58 -0
- package/dist/lib/ide-panes.d.ts.map +1 -0
- package/dist/lib/ide-panes.js +508 -0
- package/dist/lib/ide-panes.js.map +1 -0
- package/dist/lib/invariant-monitor.d.ts +54 -0
- package/dist/lib/invariant-monitor.d.ts.map +1 -0
- package/dist/lib/invariant-monitor.js +487 -0
- package/dist/lib/invariant-monitor.js.map +1 -0
- package/dist/lib/journal-analyzer.d.ts +71 -0
- package/dist/lib/journal-analyzer.d.ts.map +1 -0
- package/dist/lib/journal-analyzer.js +306 -0
- package/dist/lib/journal-analyzer.js.map +1 -0
- package/dist/lib/kanban-github.d.ts +81 -0
- package/dist/lib/kanban-github.d.ts.map +1 -0
- package/dist/lib/kanban-github.js +318 -0
- package/dist/lib/kanban-github.js.map +1 -0
- package/dist/lib/kanban.d.ts +131 -0
- package/dist/lib/kanban.d.ts.map +1 -0
- package/dist/lib/kanban.js +340 -0
- package/dist/lib/kanban.js.map +1 -0
- package/dist/lib/kuva.d.ts +45 -0
- package/dist/lib/kuva.d.ts.map +1 -0
- package/dist/lib/kuva.js +131 -0
- package/dist/lib/kuva.js.map +1 -0
- package/dist/lib/linear-client.d.ts +73 -0
- package/dist/lib/linear-client.d.ts.map +1 -0
- package/dist/lib/linear-client.js +112 -0
- package/dist/lib/linear-client.js.map +1 -0
- package/dist/lib/linear-id-map.d.ts +20 -0
- package/dist/lib/linear-id-map.d.ts.map +1 -0
- package/dist/lib/linear-id-map.js +59 -0
- package/dist/lib/linear-id-map.js.map +1 -0
- package/dist/lib/linear-kanban.d.ts +66 -0
- package/dist/lib/linear-kanban.d.ts.map +1 -0
- package/dist/lib/linear-kanban.js +175 -0
- package/dist/lib/linear-kanban.js.map +1 -0
- package/dist/lib/linear-webhook.d.ts +50 -0
- package/dist/lib/linear-webhook.d.ts.map +1 -0
- package/dist/lib/linear-webhook.js +92 -0
- package/dist/lib/linear-webhook.js.map +1 -0
- package/dist/lib/map-event-bus.d.ts +50 -0
- package/dist/lib/map-event-bus.d.ts.map +1 -0
- package/dist/lib/map-event-bus.js +366 -0
- package/dist/lib/map-event-bus.js.map +1 -0
- package/dist/lib/memory-db.d.ts +136 -0
- package/dist/lib/memory-db.d.ts.map +1 -0
- package/dist/lib/memory-db.js +429 -0
- package/dist/lib/memory-db.js.map +1 -0
- package/dist/lib/memory-indexer.d.ts +61 -0
- package/dist/lib/memory-indexer.d.ts.map +1 -0
- package/dist/lib/memory-indexer.js +418 -0
- package/dist/lib/memory-indexer.js.map +1 -0
- package/dist/lib/memory-search.d.ts +185 -0
- package/dist/lib/memory-search.d.ts.map +1 -0
- package/dist/lib/memory-search.js +678 -0
- package/dist/lib/memory-search.js.map +1 -0
- package/dist/lib/meta-orchestrator.d.ts +141 -0
- package/dist/lib/meta-orchestrator.d.ts.map +1 -0
- package/dist/lib/meta-orchestrator.js +552 -0
- package/dist/lib/meta-orchestrator.js.map +1 -0
- package/dist/lib/model-pricing.d.ts +11 -0
- package/dist/lib/model-pricing.d.ts.map +1 -0
- package/dist/lib/model-pricing.js +27 -0
- package/dist/lib/model-pricing.js.map +1 -0
- package/dist/lib/onboarding.d.ts +40 -0
- package/dist/lib/onboarding.d.ts.map +1 -0
- package/dist/lib/onboarding.js +213 -0
- package/dist/lib/onboarding.js.map +1 -0
- package/dist/lib/openclaw-registry.d.ts +48 -0
- package/dist/lib/openclaw-registry.d.ts.map +1 -0
- package/dist/lib/openclaw-registry.js +181 -0
- package/dist/lib/openclaw-registry.js.map +1 -0
- package/dist/lib/openclaw-sdk.d.ts +115 -0
- package/dist/lib/openclaw-sdk.d.ts.map +1 -0
- package/dist/lib/openclaw-sdk.js +220 -0
- package/dist/lib/openclaw-sdk.js.map +1 -0
- package/dist/lib/peer-agent-generator.d.ts +44 -0
- package/dist/lib/peer-agent-generator.d.ts.map +1 -0
- package/dist/lib/peer-agent-generator.js +310 -0
- package/dist/lib/peer-agent-generator.js.map +1 -0
- package/dist/lib/peter-parker-bridge.d.ts +70 -0
- package/dist/lib/peter-parker-bridge.d.ts.map +1 -0
- package/dist/lib/peter-parker-bridge.js +345 -0
- package/dist/lib/peter-parker-bridge.js.map +1 -0
- package/dist/lib/peter-parker-config.d.ts +13 -0
- package/dist/lib/peter-parker-config.d.ts.map +1 -0
- package/dist/lib/peter-parker-config.js +86 -0
- package/dist/lib/peter-parker-config.js.map +1 -0
- package/dist/lib/physical-world-model.d.ts +50 -0
- package/dist/lib/physical-world-model.d.ts.map +1 -0
- package/dist/lib/physical-world-model.js +251 -0
- package/dist/lib/physical-world-model.js.map +1 -0
- package/dist/lib/pi-sky/bridge.d.ts +55 -0
- package/dist/lib/pi-sky/bridge.d.ts.map +1 -0
- package/dist/lib/pi-sky/bridge.js +264 -0
- package/dist/lib/pi-sky/bridge.js.map +1 -0
- package/dist/lib/pi-sky/cost-monitor.d.ts +21 -0
- package/dist/lib/pi-sky/cost-monitor.d.ts.map +1 -0
- package/dist/lib/pi-sky/cost-monitor.js +126 -0
- package/dist/lib/pi-sky/cost-monitor.js.map +1 -0
- package/dist/lib/pi-sky/eval-sweep.d.ts +27 -0
- package/dist/lib/pi-sky/eval-sweep.d.ts.map +1 -0
- package/dist/lib/pi-sky/eval-sweep.js +141 -0
- package/dist/lib/pi-sky/eval-sweep.js.map +1 -0
- package/dist/lib/pi-sky/event-router.d.ts +32 -0
- package/dist/lib/pi-sky/event-router.d.ts.map +1 -0
- package/dist/lib/pi-sky/event-router.js +176 -0
- package/dist/lib/pi-sky/event-router.js.map +1 -0
- package/dist/lib/pi-sky/experiment.d.ts +9 -0
- package/dist/lib/pi-sky/experiment.d.ts.map +1 -0
- package/dist/lib/pi-sky/experiment.js +83 -0
- package/dist/lib/pi-sky/experiment.js.map +1 -0
- package/dist/lib/pi-sky/index.d.ts +16 -0
- package/dist/lib/pi-sky/index.d.ts.map +1 -0
- package/dist/lib/pi-sky/index.js +16 -0
- package/dist/lib/pi-sky/index.js.map +1 -0
- package/dist/lib/pi-sky/stratus-gate.d.ts +28 -0
- package/dist/lib/pi-sky/stratus-gate.d.ts.map +1 -0
- package/dist/lib/pi-sky/stratus-gate.js +61 -0
- package/dist/lib/pi-sky/stratus-gate.js.map +1 -0
- package/dist/lib/pi-sky/swarm.d.ts +28 -0
- package/dist/lib/pi-sky/swarm.d.ts.map +1 -0
- package/dist/lib/pi-sky/swarm.js +208 -0
- package/dist/lib/pi-sky/swarm.js.map +1 -0
- package/dist/lib/pi-sky/types.d.ts +139 -0
- package/dist/lib/pi-sky/types.d.ts.map +1 -0
- package/dist/lib/pi-sky/types.js +2 -0
- package/dist/lib/pi-sky/types.js.map +1 -0
- package/dist/lib/pi-sky/voice-bridge.d.ts +20 -0
- package/dist/lib/pi-sky/voice-bridge.d.ts.map +1 -0
- package/dist/lib/pi-sky/voice-bridge.js +91 -0
- package/dist/lib/pi-sky/voice-bridge.js.map +1 -0
- package/dist/lib/planning-loop.d.ts +157 -0
- package/dist/lib/planning-loop.d.ts.map +1 -0
- package/dist/lib/planning-loop.js +537 -0
- package/dist/lib/planning-loop.js.map +1 -0
- package/dist/lib/policy-head.d.ts +53 -0
- package/dist/lib/policy-head.d.ts.map +1 -0
- package/dist/lib/policy-head.js +400 -0
- package/dist/lib/policy-head.js.map +1 -0
- package/dist/lib/predictor.d.ts +109 -0
- package/dist/lib/predictor.d.ts.map +1 -0
- package/dist/lib/predictor.js +433 -0
- package/dist/lib/predictor.js.map +1 -0
- package/dist/lib/replay-buffer.d.ts +93 -0
- package/dist/lib/replay-buffer.d.ts.map +1 -0
- package/dist/lib/replay-buffer.js +302 -0
- package/dist/lib/replay-buffer.js.map +1 -0
- package/dist/lib/resource-optimizer-middleware.d.ts +39 -0
- package/dist/lib/resource-optimizer-middleware.d.ts.map +1 -0
- package/dist/lib/resource-optimizer-middleware.js +228 -0
- package/dist/lib/resource-optimizer-middleware.js.map +1 -0
- package/dist/lib/resource-optimizer.d.ts +71 -0
- package/dist/lib/resource-optimizer.d.ts.map +1 -0
- package/dist/lib/resource-optimizer.js +228 -0
- package/dist/lib/resource-optimizer.js.map +1 -0
- package/dist/lib/rewards/index.d.ts +14 -0
- package/dist/lib/rewards/index.d.ts.map +1 -0
- package/dist/lib/rewards/index.js +15 -0
- package/dist/lib/rewards/index.js.map +1 -0
- package/dist/lib/rl-manager.d.ts +74 -0
- package/dist/lib/rl-manager.d.ts.map +1 -0
- package/dist/lib/rl-manager.js +245 -0
- package/dist/lib/rl-manager.js.map +1 -0
- package/dist/lib/sentinel-rl.d.ts +97 -0
- package/dist/lib/sentinel-rl.d.ts.map +1 -0
- package/dist/lib/sentinel-rl.js +430 -0
- package/dist/lib/sentinel-rl.js.map +1 -0
- package/dist/lib/service-analyzer.d.ts +76 -0
- package/dist/lib/service-analyzer.d.ts.map +1 -0
- package/dist/lib/service-analyzer.js +704 -0
- package/dist/lib/service-analyzer.js.map +1 -0
- package/dist/lib/service-dependencies.d.ts +44 -0
- package/dist/lib/service-dependencies.d.ts.map +1 -0
- package/dist/lib/service-dependencies.js +314 -0
- package/dist/lib/service-dependencies.js.map +1 -0
- package/dist/lib/service-detector.d.ts +61 -0
- package/dist/lib/service-detector.d.ts.map +1 -0
- package/dist/lib/service-detector.js +541 -0
- package/dist/lib/service-detector.js.map +1 -0
- package/dist/lib/service-gtm.d.ts +208 -0
- package/dist/lib/service-gtm.d.ts.map +1 -0
- package/dist/lib/service-gtm.js +1006 -0
- package/dist/lib/service-gtm.js.map +1 -0
- package/dist/lib/service-mcp-base.d.ts +103 -0
- package/dist/lib/service-mcp-base.d.ts.map +1 -0
- package/dist/lib/service-mcp-base.js +263 -0
- package/dist/lib/service-mcp-base.js.map +1 -0
- package/dist/lib/service-questionnaire.d.ts +11 -0
- package/dist/lib/service-questionnaire.d.ts.map +1 -0
- package/dist/lib/service-questionnaire.js +89 -0
- package/dist/lib/service-questionnaire.js.map +1 -0
- package/dist/lib/service-utils.d.ts +103 -0
- package/dist/lib/service-utils.d.ts.map +1 -0
- package/dist/lib/service-utils.js +385 -0
- package/dist/lib/service-utils.js.map +1 -0
- package/dist/lib/session-lock.d.ts +61 -0
- package/dist/lib/session-lock.d.ts.map +1 -0
- package/dist/lib/session-lock.js +438 -0
- package/dist/lib/session-lock.js.map +1 -0
- package/dist/lib/setup/agent-generator.d.ts +25 -0
- package/dist/lib/setup/agent-generator.d.ts.map +1 -0
- package/dist/lib/setup/agent-generator.js +444 -0
- package/dist/lib/setup/agent-generator.js.map +1 -0
- package/dist/lib/setup/context-analyzer.d.ts +16 -0
- package/dist/lib/setup/context-analyzer.d.ts.map +1 -0
- package/dist/lib/setup/context-analyzer.js +112 -0
- package/dist/lib/setup/context-analyzer.js.map +1 -0
- package/dist/lib/setup/doc-auditor.d.ts +54 -0
- package/dist/lib/setup/doc-auditor.d.ts.map +1 -0
- package/dist/lib/setup/doc-auditor.js +629 -0
- package/dist/lib/setup/doc-auditor.js.map +1 -0
- package/dist/lib/setup/domain-generator.d.ts +7 -0
- package/dist/lib/setup/domain-generator.d.ts.map +1 -0
- package/dist/lib/setup/domain-generator.js +58 -0
- package/dist/lib/setup/domain-generator.js.map +1 -0
- package/dist/lib/setup/flow-generator.d.ts +10 -0
- package/dist/lib/setup/flow-generator.d.ts.map +1 -0
- package/dist/lib/setup/flow-generator.js +113 -0
- package/dist/lib/setup/flow-generator.js.map +1 -0
- package/dist/lib/setup/invariant-bridge.d.ts +91 -0
- package/dist/lib/setup/invariant-bridge.d.ts.map +1 -0
- package/dist/lib/setup/invariant-bridge.js +384 -0
- package/dist/lib/setup/invariant-bridge.js.map +1 -0
- package/dist/lib/setup/smart-eval-generator.d.ts +38 -0
- package/dist/lib/setup/smart-eval-generator.d.ts.map +1 -0
- package/dist/lib/setup/smart-eval-generator.js +378 -0
- package/dist/lib/setup/smart-eval-generator.js.map +1 -0
- package/dist/lib/setup/smart-recommender.d.ts +63 -0
- package/dist/lib/setup/smart-recommender.d.ts.map +1 -0
- package/dist/lib/setup/smart-recommender.js +329 -0
- package/dist/lib/setup/smart-recommender.js.map +1 -0
- package/dist/lib/setup/spec-generator.d.ts +99 -0
- package/dist/lib/setup/spec-generator.d.ts.map +1 -0
- package/dist/lib/setup/spec-generator.js +784 -0
- package/dist/lib/setup/spec-generator.js.map +1 -0
- package/dist/lib/setup/starter-intelligence.d.ts +25 -0
- package/dist/lib/setup/starter-intelligence.d.ts.map +1 -0
- package/dist/lib/setup/starter-intelligence.js +309 -0
- package/dist/lib/setup/starter-intelligence.js.map +1 -0
- package/dist/lib/setup/violation-agent-generator.d.ts +32 -0
- package/dist/lib/setup/violation-agent-generator.d.ts.map +1 -0
- package/dist/lib/setup/violation-agent-generator.js +255 -0
- package/dist/lib/setup/violation-agent-generator.js.map +1 -0
- package/dist/lib/skill-generator.d.ts +21 -0
- package/dist/lib/skill-generator.d.ts.map +1 -0
- package/dist/lib/skill-generator.js +253 -0
- package/dist/lib/skill-generator.js.map +1 -0
- package/dist/lib/state-capture.d.ts +36 -0
- package/dist/lib/state-capture.d.ts.map +1 -0
- package/dist/lib/state-capture.js +541 -0
- package/dist/lib/state-capture.js.map +1 -0
- package/dist/lib/stealth-onboarding.d.ts +40 -0
- package/dist/lib/stealth-onboarding.d.ts.map +1 -0
- package/dist/lib/stealth-onboarding.js +213 -0
- package/dist/lib/stealth-onboarding.js.map +1 -0
- package/dist/lib/storage/cloud.d.ts +27 -0
- package/dist/lib/storage/cloud.d.ts.map +1 -0
- package/dist/lib/storage/cloud.js +75 -0
- package/dist/lib/storage/cloud.js.map +1 -0
- package/dist/lib/storage/index.d.ts +15 -0
- package/dist/lib/storage/index.d.ts.map +1 -0
- package/dist/lib/storage/index.js +15 -0
- package/dist/lib/storage/index.js.map +1 -0
- package/dist/lib/storage/interface.d.ts +56 -0
- package/dist/lib/storage/interface.d.ts.map +1 -0
- package/dist/lib/storage/interface.js +2 -0
- package/dist/lib/storage/interface.js.map +1 -0
- package/dist/lib/storage/local.d.ts +26 -0
- package/dist/lib/storage/local.d.ts.map +1 -0
- package/dist/lib/storage/local.js +164 -0
- package/dist/lib/storage/local.js.map +1 -0
- package/dist/lib/stratus-client.d.ts +178 -0
- package/dist/lib/stratus-client.d.ts.map +1 -0
- package/dist/lib/stratus-client.js +739 -0
- package/dist/lib/stratus-client.js.map +1 -0
- package/dist/lib/stratus-rollout-test.d.ts +10 -0
- package/dist/lib/stratus-rollout-test.d.ts.map +1 -0
- package/dist/lib/stratus-rollout-test.js +412 -0
- package/dist/lib/stratus-rollout-test.js.map +1 -0
- package/dist/lib/surface-agent.d.ts +78 -0
- package/dist/lib/surface-agent.d.ts.map +1 -0
- package/dist/lib/surface-agent.js +105 -0
- package/dist/lib/surface-agent.js.map +1 -0
- package/dist/lib/surface-coordination-example.d.ts +30 -0
- package/dist/lib/surface-coordination-example.d.ts.map +1 -0
- package/dist/lib/surface-coordination-example.js +164 -0
- package/dist/lib/surface-coordination-example.js.map +1 -0
- package/dist/lib/telemetry/physical-world-collector.d.ts +15 -0
- package/dist/lib/telemetry/physical-world-collector.d.ts.map +1 -0
- package/dist/lib/telemetry/physical-world-collector.js +177 -0
- package/dist/lib/telemetry/physical-world-collector.js.map +1 -0
- package/dist/lib/telemetry/training-bridge.d.ts +51 -0
- package/dist/lib/telemetry/training-bridge.d.ts.map +1 -0
- package/dist/lib/telemetry/training-bridge.js +185 -0
- package/dist/lib/telemetry/training-bridge.js.map +1 -0
- package/dist/lib/telemetry-agent-v2.d.ts +128 -0
- package/dist/lib/telemetry-agent-v2.d.ts.map +1 -0
- package/dist/lib/telemetry-agent-v2.js +1043 -0
- package/dist/lib/telemetry-agent-v2.js.map +1 -0
- package/dist/lib/telemetry-agent.d.ts +57 -0
- package/dist/lib/telemetry-agent.d.ts.map +1 -0
- package/dist/lib/telemetry-agent.js +289 -0
- package/dist/lib/telemetry-agent.js.map +1 -0
- package/dist/lib/telemetry-digest.d.ts +10 -0
- package/dist/lib/telemetry-digest.d.ts.map +1 -0
- package/dist/lib/telemetry-digest.js +381 -0
- package/dist/lib/telemetry-digest.js.map +1 -0
- package/dist/lib/telemetry.d.ts +37 -0
- package/dist/lib/telemetry.d.ts.map +1 -0
- package/dist/lib/telemetry.js +376 -0
- package/dist/lib/telemetry.js.map +1 -0
- package/dist/lib/tenet-board-agent.d.ts +52 -0
- package/dist/lib/tenet-board-agent.d.ts.map +1 -0
- package/dist/lib/tenet-board-agent.js +226 -0
- package/dist/lib/tenet-board-agent.js.map +1 -0
- package/dist/lib/tenet-ide-agent.d.ts +40 -0
- package/dist/lib/tenet-ide-agent.d.ts.map +1 -0
- package/dist/lib/tenet-ide-agent.js +199 -0
- package/dist/lib/tenet-ide-agent.js.map +1 -0
- package/dist/lib/text-preprocessing.d.ts +83 -0
- package/dist/lib/text-preprocessing.d.ts.map +1 -0
- package/dist/lib/text-preprocessing.js +261 -0
- package/dist/lib/text-preprocessing.js.map +1 -0
- package/dist/lib/tool-schemas.d.ts +35 -0
- package/dist/lib/tool-schemas.d.ts.map +1 -0
- package/dist/lib/tool-schemas.js +246 -0
- package/dist/lib/tool-schemas.js.map +1 -0
- package/dist/lib/training-buffer.d.ts +86 -0
- package/dist/lib/training-buffer.d.ts.map +1 -0
- package/dist/lib/training-buffer.js +139 -0
- package/dist/lib/training-buffer.js.map +1 -0
- package/dist/lib/training-tuples.d.ts +33 -0
- package/dist/lib/training-tuples.d.ts.map +1 -0
- package/dist/lib/training-tuples.js +273 -0
- package/dist/lib/training-tuples.js.map +1 -0
- package/dist/lib/trajectory-loader.d.ts +82 -0
- package/dist/lib/trajectory-loader.d.ts.map +1 -0
- package/dist/lib/trajectory-loader.js +406 -0
- package/dist/lib/trajectory-loader.js.map +1 -0
- package/dist/lib/tuple-miner.d.ts +30 -0
- package/dist/lib/tuple-miner.d.ts.map +1 -0
- package/dist/lib/tuple-miner.js +427 -0
- package/dist/lib/tuple-miner.js.map +1 -0
- package/dist/lib/vm-backend.d.ts +72 -0
- package/dist/lib/vm-backend.d.ts.map +1 -0
- package/dist/lib/vm-backend.js +175 -0
- package/dist/lib/vm-backend.js.map +1 -0
- package/dist/lib/workspace/backend.d.ts +53 -0
- package/dist/lib/workspace/backend.d.ts.map +1 -0
- package/dist/lib/workspace/backend.js +37 -0
- package/dist/lib/workspace/backend.js.map +1 -0
- package/dist/lib/workspace/cmux-adapter.d.ts +46 -0
- package/dist/lib/workspace/cmux-adapter.d.ts.map +1 -0
- package/dist/lib/workspace/cmux-adapter.js +261 -0
- package/dist/lib/workspace/cmux-adapter.js.map +1 -0
- package/dist/lib/workspace/data-pipeline.d.ts +35 -0
- package/dist/lib/workspace/data-pipeline.d.ts.map +1 -0
- package/dist/lib/workspace/data-pipeline.js +494 -0
- package/dist/lib/workspace/data-pipeline.js.map +1 -0
- package/dist/lib/workspace/engine.d.ts +65 -0
- package/dist/lib/workspace/engine.d.ts.map +1 -0
- package/dist/lib/workspace/engine.js +407 -0
- package/dist/lib/workspace/engine.js.map +1 -0
- package/dist/lib/workspace/notifications.d.ts +14 -0
- package/dist/lib/workspace/notifications.d.ts.map +1 -0
- package/dist/lib/workspace/notifications.js +41 -0
- package/dist/lib/workspace/notifications.js.map +1 -0
- package/dist/lib/workspace/sidebar-runner.d.ts +13 -0
- package/dist/lib/workspace/sidebar-runner.d.ts.map +1 -0
- package/dist/lib/workspace/sidebar-runner.js +419 -0
- package/dist/lib/workspace/sidebar-runner.js.map +1 -0
- package/dist/lib/workspace/surface-registry.d.ts +49 -0
- package/dist/lib/workspace/surface-registry.d.ts.map +1 -0
- package/dist/lib/workspace/surface-registry.js +225 -0
- package/dist/lib/workspace/surface-registry.js.map +1 -0
- package/dist/lib/workspace/surface-type.d.ts +153 -0
- package/dist/lib/workspace/surface-type.d.ts.map +1 -0
- package/dist/lib/workspace/surface-type.js +9 -0
- package/dist/lib/workspace/surface-type.js.map +1 -0
- package/dist/lib/workspace/surfaces/agent-overview.d.ts +16 -0
- package/dist/lib/workspace/surfaces/agent-overview.d.ts.map +1 -0
- package/dist/lib/workspace/surfaces/agent-overview.js +116 -0
- package/dist/lib/workspace/surfaces/agent-overview.js.map +1 -0
- package/dist/lib/workspace/surfaces/agent.d.ts +16 -0
- package/dist/lib/workspace/surfaces/agent.d.ts.map +1 -0
- package/dist/lib/workspace/surfaces/agent.js +112 -0
- package/dist/lib/workspace/surfaces/agent.js.map +1 -0
- package/dist/lib/workspace/surfaces/claude.d.ts +15 -0
- package/dist/lib/workspace/surfaces/claude.d.ts.map +1 -0
- package/dist/lib/workspace/surfaces/claude.js +23 -0
- package/dist/lib/workspace/surfaces/claude.js.map +1 -0
- package/dist/lib/workspace/surfaces/dashboard.d.ts +21 -0
- package/dist/lib/workspace/surfaces/dashboard.d.ts.map +1 -0
- package/dist/lib/workspace/surfaces/dashboard.js +32 -0
- package/dist/lib/workspace/surfaces/dashboard.js.map +1 -0
- package/dist/lib/workspace/surfaces/eval.d.ts +15 -0
- package/dist/lib/workspace/surfaces/eval.d.ts.map +1 -0
- package/dist/lib/workspace/surfaces/eval.js +42 -0
- package/dist/lib/workspace/surfaces/eval.js.map +1 -0
- package/dist/lib/workspace/surfaces/event-stream.d.ts +16 -0
- package/dist/lib/workspace/surfaces/event-stream.d.ts.map +1 -0
- package/dist/lib/workspace/surfaces/event-stream.js +40 -0
- package/dist/lib/workspace/surfaces/event-stream.js.map +1 -0
- package/dist/lib/workspace/surfaces/flow.d.ts +16 -0
- package/dist/lib/workspace/surfaces/flow.d.ts.map +1 -0
- package/dist/lib/workspace/surfaces/flow.js +49 -0
- package/dist/lib/workspace/surfaces/flow.js.map +1 -0
- package/dist/lib/workspace/surfaces/index.d.ts +19 -0
- package/dist/lib/workspace/surfaces/index.d.ts.map +1 -0
- package/dist/lib/workspace/surfaces/index.js +19 -0
- package/dist/lib/workspace/surfaces/index.js.map +1 -0
- package/dist/lib/workspace/surfaces/kanban.d.ts +15 -0
- package/dist/lib/workspace/surfaces/kanban.d.ts.map +1 -0
- package/dist/lib/workspace/surfaces/kanban.js +43 -0
- package/dist/lib/workspace/surfaces/kanban.js.map +1 -0
- package/dist/lib/workspace/surfaces/physical-world.d.ts +15 -0
- package/dist/lib/workspace/surfaces/physical-world.d.ts.map +1 -0
- package/dist/lib/workspace/surfaces/physical-world.js +37 -0
- package/dist/lib/workspace/surfaces/physical-world.js.map +1 -0
- package/dist/lib/workspace/surfaces/portfolio.d.ts +16 -0
- package/dist/lib/workspace/surfaces/portfolio.d.ts.map +1 -0
- package/dist/lib/workspace/surfaces/portfolio.js +102 -0
- package/dist/lib/workspace/surfaces/portfolio.js.map +1 -0
- package/dist/lib/workspace/surfaces/service.d.ts +16 -0
- package/dist/lib/workspace/surfaces/service.d.ts.map +1 -0
- package/dist/lib/workspace/surfaces/service.js +45 -0
- package/dist/lib/workspace/surfaces/service.js.map +1 -0
- package/dist/lib/workspace/surfaces/shell.d.ts +15 -0
- package/dist/lib/workspace/surfaces/shell.d.ts.map +1 -0
- package/dist/lib/workspace/surfaces/shell.js +19 -0
- package/dist/lib/workspace/surfaces/shell.js.map +1 -0
- package/dist/lib/workspace/surfaces/sidebar.d.ts +22 -0
- package/dist/lib/workspace/surfaces/sidebar.d.ts.map +1 -0
- package/dist/lib/workspace/surfaces/sidebar.js +94 -0
- package/dist/lib/workspace/surfaces/sidebar.js.map +1 -0
- package/dist/lib/workspace/surfaces/telemetry.d.ts +16 -0
- package/dist/lib/workspace/surfaces/telemetry.d.ts.map +1 -0
- package/dist/lib/workspace/surfaces/telemetry.js +48 -0
- package/dist/lib/workspace/surfaces/telemetry.js.map +1 -0
- package/dist/lib/workspace/surfaces/topology.d.ts +15 -0
- package/dist/lib/workspace/surfaces/topology.d.ts.map +1 -0
- package/dist/lib/workspace/surfaces/topology.js +19 -0
- package/dist/lib/workspace/surfaces/topology.js.map +1 -0
- package/dist/lib/workspace/surfaces/training.d.ts +16 -0
- package/dist/lib/workspace/surfaces/training.d.ts.map +1 -0
- package/dist/lib/workspace/surfaces/training.js +22 -0
- package/dist/lib/workspace/surfaces/training.js.map +1 -0
- package/dist/lib/workspace/tmux-adapter.d.ts +30 -0
- package/dist/lib/workspace/tmux-adapter.d.ts.map +1 -0
- package/dist/lib/workspace/tmux-adapter.js +137 -0
- package/dist/lib/workspace/tmux-adapter.js.map +1 -0
- package/dist/lib/workspace/tmux-sidebar.d.ts +14 -0
- package/dist/lib/workspace/tmux-sidebar.d.ts.map +1 -0
- package/dist/lib/workspace/tmux-sidebar.js +230 -0
- package/dist/lib/workspace/tmux-sidebar.js.map +1 -0
- package/dist/lib/world-model-store.d.ts +172 -0
- package/dist/lib/world-model-store.d.ts.map +1 -0
- package/dist/lib/world-model-store.js +487 -0
- package/dist/lib/world-model-store.js.map +1 -0
- package/dist/mcp/context-hub-mcp.d.ts +11 -0
- package/dist/mcp/context-hub-mcp.d.ts.map +1 -0
- package/dist/mcp/context-hub-mcp.js +797 -0
- package/dist/mcp/context-hub-mcp.js.map +1 -0
- package/dist/mcp/service-mcp-server.d.ts +12 -0
- package/dist/mcp/service-mcp-server.d.ts.map +1 -0
- package/dist/mcp/service-mcp-server.js +434 -0
- package/dist/mcp/service-mcp-server.js.map +1 -0
- package/dist/mcp/service-peer-mcp.d.ts +36 -0
- package/dist/mcp/service-peer-mcp.d.ts.map +1 -0
- package/dist/mcp/service-peer-mcp.js +220 -0
- package/dist/mcp/service-peer-mcp.js.map +1 -0
- package/dist/mcp/service-registry-mcp.d.ts +13 -0
- package/dist/mcp/service-registry-mcp.d.ts.map +1 -0
- package/dist/mcp/service-registry-mcp.js +330 -0
- package/dist/mcp/service-registry-mcp.js.map +1 -0
- package/dist/telegram/voice.d.ts +146 -0
- package/dist/telegram/voice.d.ts.map +1 -0
- package/dist/telegram/voice.js +351 -0
- package/dist/telegram/voice.js.map +1 -0
- package/dist/types/eval.d.ts +18 -0
- package/dist/types/eval.d.ts.map +1 -0
- package/dist/types/eval.js +5 -0
- package/dist/types/eval.js.map +1 -0
- package/dist/types/flows.d.ts +72 -0
- package/dist/types/flows.d.ts.map +1 -0
- package/dist/types/flows.js +10 -0
- package/dist/types/flows.js.map +1 -0
- package/dist/types/ide.d.ts +49 -0
- package/dist/types/ide.d.ts.map +1 -0
- package/dist/types/ide.js +5 -0
- package/dist/types/ide.js.map +1 -0
- package/dist/types/journal.d.ts +133 -0
- package/dist/types/journal.d.ts.map +1 -0
- package/dist/types/journal.js +59 -0
- package/dist/types/journal.js.map +1 -0
- package/dist/types/map.d.ts +42 -0
- package/dist/types/map.d.ts.map +1 -0
- package/dist/types/map.js +39 -0
- package/dist/types/map.js.map +1 -0
- package/dist/types/physical-world-model.d.ts +65 -0
- package/dist/types/physical-world-model.d.ts.map +1 -0
- package/dist/types/physical-world-model.js +43 -0
- package/dist/types/physical-world-model.js.map +1 -0
- package/dist/types/platform-digest.d.ts +228 -0
- package/dist/types/platform-digest.d.ts.map +1 -0
- package/dist/types/platform-digest.js +5 -0
- package/dist/types/platform-digest.js.map +1 -0
- package/dist/types/skills.d.ts +44 -0
- package/dist/types/skills.d.ts.map +1 -0
- package/dist/types/skills.js +5 -0
- package/dist/types/skills.js.map +1 -0
- package/dist/types/telemetry-digest.d.ts +75 -0
- package/dist/types/telemetry-digest.d.ts.map +1 -0
- package/dist/types/telemetry-digest.js +5 -0
- package/dist/types/telemetry-digest.js.map +1 -0
- package/dist/types/telemetry.d.ts +107 -0
- package/dist/types/telemetry.d.ts.map +1 -0
- package/dist/types/telemetry.js +5 -0
- package/dist/types/telemetry.js.map +1 -0
- package/dist/types/world-model.d.ts +478 -0
- package/dist/types/world-model.d.ts.map +1 -0
- package/dist/types/world-model.js +87 -0
- package/dist/types/world-model.js.map +1 -0
- package/dist/ui/banner.d.ts +18 -0
- package/dist/ui/banner.d.ts.map +1 -0
- package/dist/ui/banner.js +323 -0
- package/dist/ui/banner.js.map +1 -0
- package/dist/ui/context-hub-logs.d.ts +10 -0
- package/dist/ui/context-hub-logs.d.ts.map +1 -0
- package/dist/ui/context-hub-logs.js +175 -0
- package/dist/ui/context-hub-logs.js.map +1 -0
- package/dist/ui/event-dashboard.d.ts +12 -0
- package/dist/ui/event-dashboard.d.ts.map +1 -0
- package/dist/ui/event-dashboard.js +342 -0
- package/dist/ui/event-dashboard.js.map +1 -0
- package/dist/ui/index.d.ts +8 -0
- package/dist/ui/index.d.ts.map +1 -0
- package/dist/ui/index.js +8 -0
- package/dist/ui/index.js.map +1 -0
- package/dist/ui/prompts.d.ts +52 -0
- package/dist/ui/prompts.d.ts.map +1 -0
- package/dist/ui/prompts.js +72 -0
- package/dist/ui/prompts.js.map +1 -0
- package/dist/ui/service-dashboard.d.ts +11 -0
- package/dist/ui/service-dashboard.d.ts.map +1 -0
- package/dist/ui/service-dashboard.js +357 -0
- package/dist/ui/service-dashboard.js.map +1 -0
- package/dist/ui/services-manager.d.ts +11 -0
- package/dist/ui/services-manager.d.ts.map +1 -0
- package/dist/ui/services-manager.js +507 -0
- package/dist/ui/services-manager.js.map +1 -0
- package/dist/ui/theme.d.ts +82 -0
- package/dist/ui/theme.d.ts.map +1 -0
- package/dist/ui/theme.js +142 -0
- package/dist/ui/theme.js.map +1 -0
- package/dist/utils/auth-guard.d.ts +66 -0
- package/dist/utils/auth-guard.d.ts.map +1 -0
- package/dist/utils/auth-guard.js +347 -0
- package/dist/utils/auth-guard.js.map +1 -0
- package/dist/utils/auth-status.d.ts +21 -0
- package/dist/utils/auth-status.d.ts.map +1 -0
- package/dist/utils/auth-status.js +53 -0
- package/dist/utils/auth-status.js.map +1 -0
- package/dist/utils/claude-md-generator.d.ts +10 -0
- package/dist/utils/claude-md-generator.d.ts.map +1 -0
- package/dist/utils/claude-md-generator.js +215 -0
- package/dist/utils/claude-md-generator.js.map +1 -0
- package/dist/utils/context-hub-port.d.ts +33 -0
- package/dist/utils/context-hub-port.d.ts.map +1 -0
- package/dist/utils/context-hub-port.js +118 -0
- package/dist/utils/context-hub-port.js.map +1 -0
- package/dist/utils/ensure-context-hub.d.ts +20 -0
- package/dist/utils/ensure-context-hub.d.ts.map +1 -0
- package/dist/utils/ensure-context-hub.js +66 -0
- package/dist/utils/ensure-context-hub.js.map +1 -0
- package/dist/utils/ensure-project.d.ts +12 -0
- package/dist/utils/ensure-project.d.ts.map +1 -0
- package/dist/utils/ensure-project.js +81 -0
- package/dist/utils/ensure-project.js.map +1 -0
- package/dist/utils/git.d.ts +73 -0
- package/dist/utils/git.d.ts.map +1 -0
- package/dist/utils/git.js +222 -0
- package/dist/utils/git.js.map +1 -0
- package/dist/utils/github-auth.d.ts +54 -0
- package/dist/utils/github-auth.d.ts.map +1 -0
- package/dist/utils/github-auth.js +376 -0
- package/dist/utils/github-auth.js.map +1 -0
- package/dist/utils/github-repo.d.ts +30 -0
- package/dist/utils/github-repo.d.ts.map +1 -0
- package/dist/utils/github-repo.js +219 -0
- package/dist/utils/github-repo.js.map +1 -0
- package/dist/utils/jfl-config.d.ts +30 -0
- package/dist/utils/jfl-config.d.ts.map +1 -0
- package/dist/utils/jfl-config.js +153 -0
- package/dist/utils/jfl-config.js.map +1 -0
- package/dist/utils/jfl-migration.d.ts +29 -0
- package/dist/utils/jfl-migration.d.ts.map +1 -0
- package/dist/utils/jfl-migration.js +142 -0
- package/dist/utils/jfl-migration.js.map +1 -0
- package/dist/utils/jfl-paths.d.ts +71 -0
- package/dist/utils/jfl-paths.d.ts.map +1 -0
- package/dist/utils/jfl-paths.js +157 -0
- package/dist/utils/jfl-paths.js.map +1 -0
- package/dist/utils/platform-auth.d.ts +81 -0
- package/dist/utils/platform-auth.d.ts.map +1 -0
- package/dist/utils/platform-auth.js +192 -0
- package/dist/utils/platform-auth.js.map +1 -0
- package/dist/utils/project-config.d.ts +43 -0
- package/dist/utils/project-config.d.ts.map +1 -0
- package/dist/utils/project-config.js +97 -0
- package/dist/utils/project-config.js.map +1 -0
- package/dist/utils/provenance.d.ts +65 -0
- package/dist/utils/provenance.d.ts.map +1 -0
- package/dist/utils/provenance.js +213 -0
- package/dist/utils/provenance.js.map +1 -0
- package/dist/utils/settings-validator.d.ts +74 -0
- package/dist/utils/settings-validator.d.ts.map +1 -0
- package/dist/utils/settings-validator.js +241 -0
- package/dist/utils/settings-validator.js.map +1 -0
- package/dist/utils/skill-registry.d.ts +49 -0
- package/dist/utils/skill-registry.d.ts.map +1 -0
- package/dist/utils/skill-registry.js +192 -0
- package/dist/utils/skill-registry.js.map +1 -0
- package/dist/utils/tenet-env.d.ts +34 -0
- package/dist/utils/tenet-env.d.ts.map +1 -0
- package/dist/utils/tenet-env.js +42 -0
- package/dist/utils/tenet-env.js.map +1 -0
- package/dist/utils/wallet.d.ts +62 -0
- package/dist/utils/wallet.d.ts.map +1 -0
- package/dist/utils/wallet.js +253 -0
- package/dist/utils/wallet.js.map +1 -0
- package/dist/utils/x402-client.d.ts +86 -0
- package/dist/utils/x402-client.d.ts.map +1 -0
- package/dist/utils/x402-client.js +266 -0
- package/dist/utils/x402-client.js.map +1 -0
- package/package.json +105 -0
- package/packages/pi/AGENTS.md +112 -0
- package/packages/pi/assets/boot.mp3 +0 -0
- package/packages/pi/dist/agent-grid.d.ts +24 -0
- package/packages/pi/dist/agent-grid.d.ts.map +1 -0
- package/packages/pi/dist/agent-grid.js +162 -0
- package/packages/pi/dist/agent-grid.js.map +1 -0
- package/packages/pi/dist/agent-names.d.ts +43 -0
- package/packages/pi/dist/agent-names.d.ts.map +1 -0
- package/packages/pi/dist/agent-names.js +156 -0
- package/packages/pi/dist/agent-names.js.map +1 -0
- package/packages/pi/dist/autoresearch.d.ts +15 -0
- package/packages/pi/dist/autoresearch.d.ts.map +1 -0
- package/packages/pi/dist/autoresearch.js +372 -0
- package/packages/pi/dist/autoresearch.js.map +1 -0
- package/packages/pi/dist/bookmarks.d.ts +15 -0
- package/packages/pi/dist/bookmarks.d.ts.map +1 -0
- package/packages/pi/dist/bookmarks.js +77 -0
- package/packages/pi/dist/bookmarks.js.map +1 -0
- package/packages/pi/dist/context.d.ts +17 -0
- package/packages/pi/dist/context.d.ts.map +1 -0
- package/packages/pi/dist/context.js +152 -0
- package/packages/pi/dist/context.js.map +1 -0
- package/packages/pi/dist/crm-tool.d.ts +12 -0
- package/packages/pi/dist/crm-tool.d.ts.map +1 -0
- package/packages/pi/dist/crm-tool.js +58 -0
- package/packages/pi/dist/crm-tool.js.map +1 -0
- package/packages/pi/dist/eval-tool.d.ts +11 -0
- package/packages/pi/dist/eval-tool.d.ts.map +1 -0
- package/packages/pi/dist/eval-tool.js +188 -0
- package/packages/pi/dist/eval-tool.js.map +1 -0
- package/packages/pi/dist/eval.d.ts +12 -0
- package/packages/pi/dist/eval.d.ts.map +1 -0
- package/packages/pi/dist/eval.js +43 -0
- package/packages/pi/dist/eval.js.map +1 -0
- package/packages/pi/dist/footer.d.ts +20 -0
- package/packages/pi/dist/footer.d.ts.map +1 -0
- package/packages/pi/dist/footer.js +222 -0
- package/packages/pi/dist/footer.js.map +1 -0
- package/packages/pi/dist/header.d.ts +17 -0
- package/packages/pi/dist/header.d.ts.map +1 -0
- package/packages/pi/dist/header.js +156 -0
- package/packages/pi/dist/header.js.map +1 -0
- package/packages/pi/dist/hub-resolver.d.ts +11 -0
- package/packages/pi/dist/hub-resolver.d.ts.map +1 -0
- package/packages/pi/dist/hub-resolver.js +58 -0
- package/packages/pi/dist/hub-resolver.js.map +1 -0
- package/packages/pi/dist/hub-tools.d.ts +14 -0
- package/packages/pi/dist/hub-tools.d.ts.map +1 -0
- package/packages/pi/dist/hub-tools.js +266 -0
- package/packages/pi/dist/hub-tools.js.map +1 -0
- package/packages/pi/dist/hud-tool.d.ts +17 -0
- package/packages/pi/dist/hud-tool.d.ts.map +1 -0
- package/packages/pi/dist/hud-tool.js +297 -0
- package/packages/pi/dist/hud-tool.js.map +1 -0
- package/packages/pi/dist/index.d.ts +12 -0
- package/packages/pi/dist/index.d.ts.map +1 -0
- package/packages/pi/dist/index.js +556 -0
- package/packages/pi/dist/index.js.map +1 -0
- package/packages/pi/dist/jfl-resolve.d.ts +29 -0
- package/packages/pi/dist/jfl-resolve.d.ts.map +1 -0
- package/packages/pi/dist/jfl-resolve.js +89 -0
- package/packages/pi/dist/jfl-resolve.js.map +1 -0
- package/packages/pi/dist/journal.d.ts +23 -0
- package/packages/pi/dist/journal.d.ts.map +1 -0
- package/packages/pi/dist/journal.js +250 -0
- package/packages/pi/dist/journal.js.map +1 -0
- package/packages/pi/dist/map-bridge.d.ts +20 -0
- package/packages/pi/dist/map-bridge.d.ts.map +1 -0
- package/packages/pi/dist/map-bridge.js +181 -0
- package/packages/pi/dist/map-bridge.js.map +1 -0
- package/packages/pi/dist/memory-tool.d.ts +11 -0
- package/packages/pi/dist/memory-tool.d.ts.map +1 -0
- package/packages/pi/dist/memory-tool.js +162 -0
- package/packages/pi/dist/memory-tool.js.map +1 -0
- package/packages/pi/dist/notifications.d.ts +15 -0
- package/packages/pi/dist/notifications.d.ts.map +1 -0
- package/packages/pi/dist/notifications.js +65 -0
- package/packages/pi/dist/notifications.js.map +1 -0
- package/packages/pi/dist/onboarding-v1.d.ts +15 -0
- package/packages/pi/dist/onboarding-v1.d.ts.map +1 -0
- package/packages/pi/dist/onboarding-v1.js +417 -0
- package/packages/pi/dist/onboarding-v1.js.map +1 -0
- package/packages/pi/dist/onboarding-v2.d.ts +18 -0
- package/packages/pi/dist/onboarding-v2.d.ts.map +1 -0
- package/packages/pi/dist/onboarding-v2.js +402 -0
- package/packages/pi/dist/onboarding-v2.js.map +1 -0
- package/packages/pi/dist/onboarding-v3.d.ts +13 -0
- package/packages/pi/dist/onboarding-v3.d.ts.map +1 -0
- package/packages/pi/dist/onboarding-v3.js +581 -0
- package/packages/pi/dist/onboarding-v3.js.map +1 -0
- package/packages/pi/dist/peter-parker.d.ts +12 -0
- package/packages/pi/dist/peter-parker.d.ts.map +1 -0
- package/packages/pi/dist/peter-parker.js +162 -0
- package/packages/pi/dist/peter-parker.js.map +1 -0
- package/packages/pi/dist/pivot-tool.d.ts +11 -0
- package/packages/pi/dist/pivot-tool.d.ts.map +1 -0
- package/packages/pi/dist/pivot-tool.js +56 -0
- package/packages/pi/dist/pivot-tool.js.map +1 -0
- package/packages/pi/dist/policy-head-tool.d.ts +15 -0
- package/packages/pi/dist/policy-head-tool.d.ts.map +1 -0
- package/packages/pi/dist/policy-head-tool.js +220 -0
- package/packages/pi/dist/policy-head-tool.js.map +1 -0
- package/packages/pi/dist/portfolio-bridge.d.ts +12 -0
- package/packages/pi/dist/portfolio-bridge.d.ts.map +1 -0
- package/packages/pi/dist/portfolio-bridge.js +81 -0
- package/packages/pi/dist/portfolio-bridge.js.map +1 -0
- package/packages/pi/dist/service-skills.d.ts +15 -0
- package/packages/pi/dist/service-skills.d.ts.map +1 -0
- package/packages/pi/dist/service-skills.js +198 -0
- package/packages/pi/dist/service-skills.js.map +1 -0
- package/packages/pi/dist/session.d.ts +28 -0
- package/packages/pi/dist/session.d.ts.map +1 -0
- package/packages/pi/dist/session.js +649 -0
- package/packages/pi/dist/session.js.map +1 -0
- package/packages/pi/dist/shortcuts.d.ts +11 -0
- package/packages/pi/dist/shortcuts.d.ts.map +1 -0
- package/packages/pi/dist/shortcuts.js +231 -0
- package/packages/pi/dist/shortcuts.js.map +1 -0
- package/packages/pi/dist/startup-briefing.d.ts +13 -0
- package/packages/pi/dist/startup-briefing.d.ts.map +1 -0
- package/packages/pi/dist/startup-briefing.js +432 -0
- package/packages/pi/dist/startup-briefing.js.map +1 -0
- package/packages/pi/dist/stratus-bridge.d.ts +14 -0
- package/packages/pi/dist/stratus-bridge.d.ts.map +1 -0
- package/packages/pi/dist/stratus-bridge.js +104 -0
- package/packages/pi/dist/stratus-bridge.js.map +1 -0
- package/packages/pi/dist/subway-mesh.d.ts +88 -0
- package/packages/pi/dist/subway-mesh.d.ts.map +1 -0
- package/packages/pi/dist/subway-mesh.js +813 -0
- package/packages/pi/dist/subway-mesh.js.map +1 -0
- package/packages/pi/dist/synopsis-tool.d.ts +12 -0
- package/packages/pi/dist/synopsis-tool.d.ts.map +1 -0
- package/packages/pi/dist/synopsis-tool.js +84 -0
- package/packages/pi/dist/synopsis-tool.js.map +1 -0
- package/packages/pi/dist/tool-renderers.d.ts +55 -0
- package/packages/pi/dist/tool-renderers.d.ts.map +1 -0
- package/packages/pi/dist/tool-renderers.js +349 -0
- package/packages/pi/dist/tool-renderers.js.map +1 -0
- package/packages/pi/dist/training-buffer-tool.d.ts +16 -0
- package/packages/pi/dist/training-buffer-tool.d.ts.map +1 -0
- package/packages/pi/dist/training-buffer-tool.js +319 -0
- package/packages/pi/dist/training-buffer-tool.js.map +1 -0
- package/packages/pi/dist/types.d.ts +195 -0
- package/packages/pi/dist/types.d.ts.map +1 -0
- package/packages/pi/dist/types.js +11 -0
- package/packages/pi/dist/types.js.map +1 -0
- package/packages/pi/extensions/agent-grid.ts +191 -0
- package/packages/pi/extensions/agent-names.ts +178 -0
- package/packages/pi/extensions/autoresearch.ts +428 -0
- package/packages/pi/extensions/bookmarks.ts +85 -0
- package/packages/pi/extensions/context.ts +158 -0
- package/packages/pi/extensions/crm-tool.ts +61 -0
- package/packages/pi/extensions/eval-tool.ts +224 -0
- package/packages/pi/extensions/eval.ts +61 -0
- package/packages/pi/extensions/footer.ts +239 -0
- package/packages/pi/extensions/header.ts +171 -0
- package/packages/pi/extensions/hub-resolver.ts +63 -0
- package/packages/pi/extensions/hub-tools.ts +267 -0
- package/packages/pi/extensions/hud-tool.ts +294 -0
- package/packages/pi/extensions/index.ts +601 -0
- package/packages/pi/extensions/jfl-resolve.ts +98 -0
- package/packages/pi/extensions/journal.ts +309 -0
- package/packages/pi/extensions/map-bridge.ts +209 -0
- package/packages/pi/extensions/memory-tool.ts +170 -0
- package/packages/pi/extensions/notifications.ts +73 -0
- package/packages/pi/extensions/onboarding-v1.ts +455 -0
- package/packages/pi/extensions/onboarding-v2.ts +374 -0
- package/packages/pi/extensions/onboarding-v3.ts +686 -0
- package/packages/pi/extensions/peter-parker.ts +203 -0
- package/packages/pi/extensions/pivot-tool.ts +59 -0
- package/packages/pi/extensions/policy-head-tool.ts +277 -0
- package/packages/pi/extensions/portfolio-bridge.ts +89 -0
- package/packages/pi/extensions/service-skills.ts +219 -0
- package/packages/pi/extensions/session.ts +684 -0
- package/packages/pi/extensions/shortcuts.ts +259 -0
- package/packages/pi/extensions/startup-briefing.ts +482 -0
- package/packages/pi/extensions/stratus-bridge.ts +116 -0
- package/packages/pi/extensions/subway-mesh.ts +893 -0
- package/packages/pi/extensions/synopsis-tool.ts +88 -0
- package/packages/pi/extensions/tool-renderers.ts +366 -0
- package/packages/pi/extensions/training-buffer-tool.ts +376 -0
- package/packages/pi/extensions/types.ts +169 -0
- package/packages/pi/package-lock.json +346 -0
- package/packages/pi/package.json +42 -0
- package/packages/pi/skills/agent-browser/SKILL.md +116 -0
- package/packages/pi/skills/brand-architect/SKILL.md +240 -0
- package/packages/pi/skills/brand-architect/config.yaml +137 -0
- package/packages/pi/skills/campaign-hud/config.yaml +112 -0
- package/packages/pi/skills/content-creator/SKILL.md +294 -0
- package/packages/pi/skills/context/SKILL.md +65 -0
- package/packages/pi/skills/debug/MULTI_AGENT.md +360 -0
- package/packages/pi/skills/debug/SKILL.md +554 -0
- package/packages/pi/skills/end/SKILL.md +1790 -0
- package/packages/pi/skills/eval/SKILL.md +75 -0
- package/packages/pi/skills/fly-deploy/SKILL.md +676 -0
- package/packages/pi/skills/founder-video/SKILL.md +467 -0
- package/packages/pi/skills/hud/SKILL.md +160 -0
- package/packages/pi/skills/orchestrate/SKILL.md +74 -0
- package/packages/pi/skills/pi-agents/SKILL.md +78 -0
- package/packages/pi/skills/pivot/SKILL.md +91 -0
- package/packages/pi/skills/react-best-practices/AGENTS.md +2249 -0
- package/packages/pi/skills/react-best-practices/README.md +123 -0
- package/packages/pi/skills/react-best-practices/SKILL.md +125 -0
- package/packages/pi/skills/react-best-practices/metadata.json +15 -0
- package/packages/pi/skills/react-best-practices/rules/_sections.md +46 -0
- package/packages/pi/skills/react-best-practices/rules/_template.md +28 -0
- package/packages/pi/skills/react-best-practices/rules/advanced-event-handler-refs.md +55 -0
- package/packages/pi/skills/react-best-practices/rules/advanced-use-latest.md +49 -0
- package/packages/pi/skills/react-best-practices/rules/async-api-routes.md +38 -0
- package/packages/pi/skills/react-best-practices/rules/async-defer-await.md +80 -0
- package/packages/pi/skills/react-best-practices/rules/async-dependencies.md +36 -0
- package/packages/pi/skills/react-best-practices/rules/async-parallel.md +28 -0
- package/packages/pi/skills/react-best-practices/rules/async-suspense-boundaries.md +99 -0
- package/packages/pi/skills/react-best-practices/rules/bundle-barrel-imports.md +59 -0
- package/packages/pi/skills/react-best-practices/rules/bundle-conditional.md +31 -0
- package/packages/pi/skills/react-best-practices/rules/bundle-defer-third-party.md +49 -0
- package/packages/pi/skills/react-best-practices/rules/bundle-dynamic-imports.md +35 -0
- package/packages/pi/skills/react-best-practices/rules/bundle-preload.md +50 -0
- package/packages/pi/skills/react-best-practices/rules/client-event-listeners.md +74 -0
- package/packages/pi/skills/react-best-practices/rules/client-swr-dedup.md +56 -0
- package/packages/pi/skills/react-best-practices/rules/js-batch-dom-css.md +82 -0
- package/packages/pi/skills/react-best-practices/rules/js-cache-function-results.md +80 -0
- package/packages/pi/skills/react-best-practices/rules/js-cache-property-access.md +28 -0
- package/packages/pi/skills/react-best-practices/rules/js-cache-storage.md +70 -0
- package/packages/pi/skills/react-best-practices/rules/js-combine-iterations.md +32 -0
- package/packages/pi/skills/react-best-practices/rules/js-early-exit.md +50 -0
- package/packages/pi/skills/react-best-practices/rules/js-hoist-regexp.md +45 -0
- package/packages/pi/skills/react-best-practices/rules/js-index-maps.md +37 -0
- package/packages/pi/skills/react-best-practices/rules/js-length-check-first.md +49 -0
- package/packages/pi/skills/react-best-practices/rules/js-min-max-loop.md +82 -0
- package/packages/pi/skills/react-best-practices/rules/js-set-map-lookups.md +24 -0
- package/packages/pi/skills/react-best-practices/rules/js-tosorted-immutable.md +57 -0
- package/packages/pi/skills/react-best-practices/rules/rendering-activity.md +26 -0
- package/packages/pi/skills/react-best-practices/rules/rendering-animate-svg-wrapper.md +47 -0
- package/packages/pi/skills/react-best-practices/rules/rendering-conditional-render.md +40 -0
- package/packages/pi/skills/react-best-practices/rules/rendering-content-visibility.md +38 -0
- package/packages/pi/skills/react-best-practices/rules/rendering-hoist-jsx.md +46 -0
- package/packages/pi/skills/react-best-practices/rules/rendering-hydration-no-flicker.md +82 -0
- package/packages/pi/skills/react-best-practices/rules/rendering-svg-precision.md +28 -0
- package/packages/pi/skills/react-best-practices/rules/rerender-defer-reads.md +39 -0
- package/packages/pi/skills/react-best-practices/rules/rerender-dependencies.md +45 -0
- package/packages/pi/skills/react-best-practices/rules/rerender-derived-state.md +29 -0
- package/packages/pi/skills/react-best-practices/rules/rerender-functional-setstate.md +74 -0
- package/packages/pi/skills/react-best-practices/rules/rerender-lazy-state-init.md +58 -0
- package/packages/pi/skills/react-best-practices/rules/rerender-memo.md +44 -0
- package/packages/pi/skills/react-best-practices/rules/rerender-transitions.md +40 -0
- package/packages/pi/skills/react-best-practices/rules/server-after-nonblocking.md +73 -0
- package/packages/pi/skills/react-best-practices/rules/server-cache-lru.md +41 -0
- package/packages/pi/skills/react-best-practices/rules/server-cache-react.md +26 -0
- package/packages/pi/skills/react-best-practices/rules/server-parallel-fetching.md +79 -0
- package/packages/pi/skills/react-best-practices/rules/server-serialization.md +38 -0
- package/packages/pi/skills/remotion-best-practices/SKILL.md +43 -0
- package/packages/pi/skills/remotion-best-practices/rules/3d.md +86 -0
- package/packages/pi/skills/remotion-best-practices/rules/animations.md +29 -0
- package/packages/pi/skills/remotion-best-practices/rules/assets/charts-bar-chart.tsx +173 -0
- package/packages/pi/skills/remotion-best-practices/rules/assets/text-animations-typewriter.tsx +100 -0
- package/packages/pi/skills/remotion-best-practices/rules/assets/text-animations-word-highlight.tsx +108 -0
- package/packages/pi/skills/remotion-best-practices/rules/assets.md +78 -0
- package/packages/pi/skills/remotion-best-practices/rules/audio.md +172 -0
- package/packages/pi/skills/remotion-best-practices/rules/calculate-metadata.md +104 -0
- package/packages/pi/skills/remotion-best-practices/rules/can-decode.md +75 -0
- package/packages/pi/skills/remotion-best-practices/rules/charts.md +58 -0
- package/packages/pi/skills/remotion-best-practices/rules/compositions.md +146 -0
- package/packages/pi/skills/remotion-best-practices/rules/display-captions.md +126 -0
- package/packages/pi/skills/remotion-best-practices/rules/extract-frames.md +229 -0
- package/packages/pi/skills/remotion-best-practices/rules/fonts.md +152 -0
- package/packages/pi/skills/remotion-best-practices/rules/get-audio-duration.md +58 -0
- package/packages/pi/skills/remotion-best-practices/rules/get-video-dimensions.md +68 -0
- package/packages/pi/skills/remotion-best-practices/rules/get-video-duration.md +58 -0
- package/packages/pi/skills/remotion-best-practices/rules/gifs.md +138 -0
- package/packages/pi/skills/remotion-best-practices/rules/images.md +130 -0
- package/packages/pi/skills/remotion-best-practices/rules/import-srt-captions.md +67 -0
- package/packages/pi/skills/remotion-best-practices/rules/lottie.md +68 -0
- package/packages/pi/skills/remotion-best-practices/rules/measuring-dom-nodes.md +35 -0
- package/packages/pi/skills/remotion-best-practices/rules/measuring-text.md +143 -0
- package/packages/pi/skills/remotion-best-practices/rules/sequencing.md +106 -0
- package/packages/pi/skills/remotion-best-practices/rules/tailwind.md +11 -0
- package/packages/pi/skills/remotion-best-practices/rules/text-animations.md +20 -0
- package/packages/pi/skills/remotion-best-practices/rules/timing.md +179 -0
- package/packages/pi/skills/remotion-best-practices/rules/transcribe-captions.md +19 -0
- package/packages/pi/skills/remotion-best-practices/rules/transitions.md +122 -0
- package/packages/pi/skills/remotion-best-practices/rules/trimming.md +53 -0
- package/packages/pi/skills/remotion-best-practices/rules/videos.md +171 -0
- package/packages/pi/skills/search/SKILL.md +220 -0
- package/packages/pi/skills/spec/SKILL.md +377 -0
- package/packages/pi/skills/startup/SKILL.md +315 -0
- package/packages/pi/skills/subway-browser/SKILL.md +292 -0
- package/packages/pi/skills/viz/SKILL.md +204 -0
- package/packages/pi/skills/web-architect/SKILL.md +309 -0
- package/packages/pi/skills/x-algorithm/SKILL.md +305 -0
- package/packages/pi/teams/dev-team.yaml +63 -0
- package/packages/pi/teams/gtm-team.yaml +79 -0
- package/packages/pi/themes/jfl.theme.json +76 -0
- package/packages/pi/tsconfig.json +21 -0
- package/scripts/__pycache__/train-policy-head.cpython-314.pyc +0 -0
- package/scripts/collect-tuples.sh +124 -0
- package/scripts/commit-gtm.sh +56 -0
- package/scripts/commit-product.sh +68 -0
- package/scripts/context-query.sh +45 -0
- package/scripts/destroy-fleet.sh +37 -0
- package/scripts/generate-changesets.sh +113 -0
- package/scripts/jfl-ide.sh +48 -0
- package/scripts/migrate-to-branch-sessions.sh +201 -0
- package/scripts/postinstall.js +146 -0
- package/scripts/pp-branch-pr.sh +133 -0
- package/scripts/pp-branch-pr.sh.bak +115 -0
- package/scripts/session/auto-commit.sh +297 -0
- package/scripts/session/fix-tracked-logs.sh +97 -0
- package/scripts/session/jfl-doctor.sh +707 -0
- package/scripts/session/session-cleanup.sh +292 -0
- package/scripts/session/session-end.sh +198 -0
- package/scripts/session/session-init.sh +356 -0
- package/scripts/session/session-init.sh.backup +292 -0
- package/scripts/session/session-sync.sh +192 -0
- package/scripts/session/test-context-preservation.sh +160 -0
- package/scripts/session/test-critical-infrastructure.sh +293 -0
- package/scripts/session/test-experience-level.sh +336 -0
- package/scripts/session/test-session-cleanup.sh +268 -0
- package/scripts/session/test-session-sync.sh +320 -0
- package/scripts/setup-branch-protection.sh +106 -0
- package/scripts/spawn-fleet.sh +144 -0
- package/scripts/telemetry-dashboard.sh +44 -0
- package/scripts/test-map-eventbus.sh +357 -0
- package/scripts/test-onboarding.sh +121 -0
- package/scripts/test-planning-loop-e2e.ts +181 -0
- package/scripts/test-server-inference.ts +49 -0
- package/scripts/test-state-sensitivity.ts +32 -0
- package/scripts/train/requirements.txt +5 -0
- package/scripts/train/train-policy-head.py +477 -0
- package/scripts/train/v2/__pycache__/dataset.cpython-314.pyc +0 -0
- package/scripts/train/v2/__pycache__/eval.cpython-314.pyc +0 -0
- package/scripts/train/v2/__pycache__/generate_data.cpython-314.pyc +0 -0
- package/scripts/train/v2/__pycache__/infer.cpython-314.pyc +0 -0
- package/scripts/train/v2/__pycache__/model.cpython-314.pyc +0 -0
- package/scripts/train/v2/__pycache__/precompute.cpython-314.pyc +0 -0
- package/scripts/train/v2/__pycache__/train.cpython-314.pyc +0 -0
- package/scripts/train/v2/__pycache__/transform_buffer.cpython-314.pyc +0 -0
- package/scripts/train/v2/__pycache__/validate_data.cpython-314.pyc +0 -0
- package/scripts/train/v2/benchmark.py +661 -0
- package/scripts/train/v2/dataset.py +81 -0
- package/scripts/train/v2/domain.json +66 -0
- package/scripts/train/v2/eval.py +196 -0
- package/scripts/train/v2/generate_balanced.py +439 -0
- package/scripts/train/v2/generate_data.py +219 -0
- package/scripts/train/v2/generate_hard_negatives.py +219 -0
- package/scripts/train/v2/infer.py +301 -0
- package/scripts/train/v2/infer_server.py +224 -0
- package/scripts/train/v2/model.py +112 -0
- package/scripts/train/v2/online_train.py +576 -0
- package/scripts/train/v2/precompute.py +150 -0
- package/scripts/train/v2/train.py +302 -0
- package/scripts/train/v2/transform_buffer.py +227 -0
- package/scripts/train/v2/validate_data.py +115 -0
- package/scripts/train-policy-head.py +434 -0
- package/scripts/vm-swarm/README.md +301 -0
- package/scripts/vm-swarm/collect-tuples.sh +331 -0
- package/scripts/vm-swarm/create-base-template.sh +339 -0
- package/scripts/vm-swarm/kill-fleet.sh +204 -0
- package/scripts/vm-swarm/monitor-fleet.sh +346 -0
- package/scripts/vm-swarm/spawn-fleet.sh +304 -0
- package/scripts/voice-start.sh +156 -0
- package/scripts/voice-stop.sh +33 -0
- package/scripts/where-am-i.sh +78 -0
- package/templates/QUICKSTART_SKILL_TO_PRODUCT.md +242 -0
- package/templates/brand/BRAND_BRIEF.md +124 -0
- package/templates/brand/BRAND_DECISIONS.md +168 -0
- package/templates/brand/BRAND_GUIDELINES.md +251 -0
- package/templates/brand/VOICE_AND_TONE.md +146 -0
- package/templates/brand/global.css +240 -0
- package/templates/collaboration/CONTRIBUTOR.md +74 -0
- package/templates/collaboration/CRM.md +97 -0
- package/templates/collaboration/TASKS.md +83 -0
- package/templates/dating/FUNNEL.md +29 -0
- package/templates/dating/REWARDS.md +24 -0
- package/templates/dating/SIGNALS.md +18 -0
- package/templates/dating/anti_patterns.md +23 -0
- package/templates/dating/connectors/index.md +16 -0
- package/templates/dating/modes.md +21 -0
- package/templates/dating/psychology.md +18 -0
- package/templates/default/README.md +19 -0
- package/templates/service-agent/.claude/settings.json +32 -0
- package/templates/service-agent/CLAUDE.md +334 -0
- package/templates/service-agent/knowledge/ARCHITECTURE.md +115 -0
- package/templates/service-agent/knowledge/DEPLOYMENT.md +199 -0
- package/templates/service-agent/knowledge/RUNBOOK.md +412 -0
- package/templates/service-agent/knowledge/SERVICE_SPEC.md +77 -0
- package/templates/service-mcp-template.js +325 -0
- package/templates/strategic/NARRATIVE.md +114 -0
- package/templates/strategic/ROADMAP.md +128 -0
- package/templates/strategic/THESIS.md +108 -0
- package/templates/strategic/VISION.md +74 -0
|
@@ -0,0 +1,1790 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: end
|
|
3
|
+
description: End the current JFL session gracefully with automatic merge and cleanup
|
|
4
|
+
triggers:
|
|
5
|
+
- done
|
|
6
|
+
- that's it
|
|
7
|
+
- I'm finished
|
|
8
|
+
- end session
|
|
9
|
+
- /end
|
|
10
|
+
- let's wrap up
|
|
11
|
+
- all set for today
|
|
12
|
+
---
|
|
13
|
+
|
|
14
|
+
# /end - Session Reconciliation
|
|
15
|
+
|
|
16
|
+
End the current JFL session gracefully with work preservation, conflict resolution, and handoff visibility.
|
|
17
|
+
|
|
18
|
+
---
|
|
19
|
+
|
|
20
|
+
## Core Principle
|
|
21
|
+
|
|
22
|
+
**Session ending is a critical handoff point.** Poor UX here creates uncertainty ("Did my work get saved?"), risks lost work if errors aren't handled clearly, and loses context if journal entries aren't captured.
|
|
23
|
+
|
|
24
|
+
JFL's session architecture guarantees work preservation through multiple safety layers:
|
|
25
|
+
|
|
26
|
+
1. **Continuous auto-commit** - Background process commits every 2 minutes (managed by `session.ts` extension in Pi)
|
|
27
|
+
2. **session_shutdown hook** - Pi's `session_shutdown` extension handler runs cleanup when session ends
|
|
28
|
+
3. **This skill** - User-initiated clean ending with full visibility
|
|
29
|
+
|
|
30
|
+
**Note for Pi sessions:** Hook enforcement is handled by the `session_shutdown` extension (`extensions/session.ts`), not `.claude/settings.json` Stop hooks. The cleanup script and journal checks run via the Pi extension lifecycle.
|
|
31
|
+
|
|
32
|
+
**Parallel architecture (session.ts):** The `onShutdown` hook runs 4 phases concurrently:
|
|
33
|
+
- **Phase 1 (fire immediately):** Hub API end, synopsis generation, memory indexing — all start in parallel before git ops
|
|
34
|
+
- **Phase 2 (sequential):** Commit → merge (must be ordered, but uses async exec so Phase 1 tasks progress between steps)
|
|
35
|
+
- **Phase 3 (after merge):** Push + remote branch delete in single command, runs in parallel with Phase 1 collection
|
|
36
|
+
- **Phase 4 (collect):** Await all parallel tasks, show synopsis, report timing
|
|
37
|
+
|
|
38
|
+
This means the user sees "Session ended (Xs)" where X is roughly max(merge_time, push_time, synopsis_time) instead of the sum of all operations.
|
|
39
|
+
|
|
40
|
+
When you invoke `/end`, the user wants to:
|
|
41
|
+
- **Know what happened** - What commits merged? What changed?
|
|
42
|
+
- **Trust their work is saved** - No uncertainty about state
|
|
43
|
+
- **Understand next steps** - What should they or others do next?
|
|
44
|
+
- **Get handoff context** - Synopsis of work accomplished
|
|
45
|
+
|
|
46
|
+
This skill provides **comprehensive UX orchestration** around the solid `session-cleanup.sh` infrastructure. The script handles all git operations correctly - we wrap it with clear communication, pre-flight checks, and error guidance.
|
|
47
|
+
|
|
48
|
+
### What "Clean Ending" Means
|
|
49
|
+
|
|
50
|
+
A clean session end has these properties:
|
|
51
|
+
|
|
52
|
+
1. **All work committed** - No uncommitted changes left behind
|
|
53
|
+
2. **Merged to working branch** - Session branch integrated, not stranded
|
|
54
|
+
3. **Journal entry exists** - Future sessions understand what happened
|
|
55
|
+
4. **Conflicts resolved** - No manual cleanup required later
|
|
56
|
+
5. **Remote updated** - Team can see the work
|
|
57
|
+
6. **Synopsis shown** - Clear summary of accomplishments
|
|
58
|
+
|
|
59
|
+
This skill ensures all six properties are met, or guides the user to resolve issues that prevent them.
|
|
60
|
+
|
|
61
|
+
### Relationship to Other Safety Mechanisms
|
|
62
|
+
|
|
63
|
+
```
|
|
64
|
+
User working...
|
|
65
|
+
│
|
|
66
|
+
├─ Auto-commit (every 2 minutes)
|
|
67
|
+
│ └─ Prevents data loss during crashes
|
|
68
|
+
│
|
|
69
|
+
├─ Stop hook (terminal close)
|
|
70
|
+
│ └─ Automatic fallback if /end not called
|
|
71
|
+
│
|
|
72
|
+
└─ /end skill (user-initiated) ← YOU ARE HERE
|
|
73
|
+
└─ Best UX: visibility + control
|
|
74
|
+
```
|
|
75
|
+
|
|
76
|
+
**When to use each:**
|
|
77
|
+
- **Auto-commit**: Runs automatically, you don't invoke it
|
|
78
|
+
- **Stop hook**: Triggered automatically on terminal close
|
|
79
|
+
- **This skill**: User explicitly says "done" → invoke this for best experience
|
|
80
|
+
|
|
81
|
+
---
|
|
82
|
+
|
|
83
|
+
## When to Use This Skill
|
|
84
|
+
|
|
85
|
+
### Explicit Triggers (HIGH CONFIDENCE)
|
|
86
|
+
|
|
87
|
+
User says any of these phrases → **immediately invoke this skill**:
|
|
88
|
+
|
|
89
|
+
| Phrase | Confidence | Action |
|
|
90
|
+
|--------|-----------|--------|
|
|
91
|
+
| "done" | 100% | Invoke immediately |
|
|
92
|
+
| "that's it" | 100% | Invoke immediately |
|
|
93
|
+
| "I'm finished" | 100% | Invoke immediately |
|
|
94
|
+
| "end session" | 100% | Invoke immediately |
|
|
95
|
+
| "/end" | 100% | Invoke immediately |
|
|
96
|
+
| "let's wrap up" | 95% | Invoke immediately |
|
|
97
|
+
| "all set for today" | 95% | Invoke immediately |
|
|
98
|
+
| "I'm out" | 90% | Invoke immediately |
|
|
99
|
+
| "good for now" | 85% | Invoke immediately |
|
|
100
|
+
| "ship it" | 80% | Check context - might mean commit, not end |
|
|
101
|
+
|
|
102
|
+
### Implicit Triggers (CONTEXT-DEPENDENT)
|
|
103
|
+
|
|
104
|
+
User says these in a concluding context → **consider invoking**:
|
|
105
|
+
|
|
106
|
+
| Phrase | When to Invoke | When NOT to Invoke |
|
|
107
|
+
|--------|---------------|-------------------|
|
|
108
|
+
| "looks good" | After reviewing final work | After reviewing one piece of ongoing work |
|
|
109
|
+
| "perfect" | At end of conversation | In middle of iteration |
|
|
110
|
+
| "thanks" | With no pending questions | After getting help mid-session |
|
|
111
|
+
| "bye" | Clear goodbye | Just casual acknowledgment |
|
|
112
|
+
|
|
113
|
+
**Test: Is this the end of the session or just the end of a task?**
|
|
114
|
+
|
|
115
|
+
```
|
|
116
|
+
User: "Great, the auth flow works. Thanks!"
|
|
117
|
+
|
|
118
|
+
→ NOT an ending (still building, just finished one feature)
|
|
119
|
+
→ Don't invoke /end
|
|
120
|
+
|
|
121
|
+
User: "Auth flow is done. That's all I needed today."
|
|
122
|
+
|
|
123
|
+
→ IS an ending (explicit scope closure)
|
|
124
|
+
→ Invoke /end
|
|
125
|
+
```
|
|
126
|
+
|
|
127
|
+
### When NOT to Use
|
|
128
|
+
|
|
129
|
+
**Do NOT invoke this skill if:**
|
|
130
|
+
|
|
131
|
+
1. **User is continuing work** - "That's done, let's do X next"
|
|
132
|
+
2. **In middle of iteration** - "Okay that works, but change the color to blue"
|
|
133
|
+
3. **Just answered a question** - "Got it, thanks" (not ending, just acknowledging)
|
|
134
|
+
4. **Unclear intent** - If unsure, ask: "Ready to end the session, or keep going?"
|
|
135
|
+
|
|
136
|
+
---
|
|
137
|
+
|
|
138
|
+
## Pre-Flight Check
|
|
139
|
+
|
|
140
|
+
Before executing cleanup, gather complete session state. This informs what to show the user and what prompts are needed.
|
|
141
|
+
|
|
142
|
+
### Step 1: Detect Session Mode
|
|
143
|
+
|
|
144
|
+
```bash
|
|
145
|
+
# Read worktree state
|
|
146
|
+
WORKTREE_PATH=$(cat .jfl/current-worktree.txt 2>/dev/null || echo "")
|
|
147
|
+
|
|
148
|
+
if [[ "$WORKTREE_PATH" == "direct" ]]; then
|
|
149
|
+
MODE="direct"
|
|
150
|
+
LOCATION=$(pwd)
|
|
151
|
+
elif [[ -n "$WORKTREE_PATH" ]]; then
|
|
152
|
+
MODE="worktree"
|
|
153
|
+
LOCATION="$WORKTREE_PATH"
|
|
154
|
+
else
|
|
155
|
+
# Not in a session
|
|
156
|
+
MODE="none"
|
|
157
|
+
fi
|
|
158
|
+
```
|
|
159
|
+
|
|
160
|
+
**What this tells you:**
|
|
161
|
+
- `direct` → Single session, working on branch directly
|
|
162
|
+
- `worktree` → Multiple concurrent sessions, isolated worktree
|
|
163
|
+
- `none` → Not in a JFL session (shouldn't happen, but handle gracefully)
|
|
164
|
+
|
|
165
|
+
### Step 1.5: Detect Service Context
|
|
166
|
+
|
|
167
|
+
After detecting session mode, check if running in a service:
|
|
168
|
+
|
|
169
|
+
```bash
|
|
170
|
+
# Read config to detect environment
|
|
171
|
+
CONFIG_TYPE=$(jq -r '.type // "unknown"' .jfl/config.json 2>/dev/null)
|
|
172
|
+
|
|
173
|
+
if [[ "$CONFIG_TYPE" == "service" ]]; then
|
|
174
|
+
# Running in a service
|
|
175
|
+
GTM_PARENT=$(jq -r '.gtm_parent // empty' .jfl/config.json)
|
|
176
|
+
|
|
177
|
+
if [[ -z "$GTM_PARENT" ]]; then
|
|
178
|
+
echo "⚠️ Service not linked to GTM workspace"
|
|
179
|
+
echo ""
|
|
180
|
+
echo "This service can still be cleaned up, but changes won't sync to a GTM."
|
|
181
|
+
echo "To link: cd <gtm> && jfl services register $(pwd)"
|
|
182
|
+
echo ""
|
|
183
|
+
fi
|
|
184
|
+
|
|
185
|
+
SERVICE_NAME=$(jq -r '.name' .jfl/config.json)
|
|
186
|
+
SYNC_TO_GTM=true
|
|
187
|
+
echo "📡 Service context detected: $SERVICE_NAME"
|
|
188
|
+
echo " GTM parent: $GTM_PARENT"
|
|
189
|
+
else
|
|
190
|
+
# Running in GTM or standalone
|
|
191
|
+
SYNC_TO_GTM=false
|
|
192
|
+
fi
|
|
193
|
+
```
|
|
194
|
+
|
|
195
|
+
**What this tells you:**
|
|
196
|
+
- If `SYNC_TO_GTM=true`: This is a service session, sync after cleanup
|
|
197
|
+
- If `GTM_PARENT` is empty: Service exists but not linked
|
|
198
|
+
- Otherwise: Regular GTM or standalone session
|
|
199
|
+
|
|
200
|
+
### Step 1.6: Validate Service Configuration (Services Only)
|
|
201
|
+
|
|
202
|
+
If running in a service (`SYNC_TO_GTM=true`), validate configuration before ending:
|
|
203
|
+
|
|
204
|
+
```bash
|
|
205
|
+
if [[ "$SYNC_TO_GTM" == "true" ]]; then
|
|
206
|
+
echo ""
|
|
207
|
+
echo "🔍 Validating service configuration..."
|
|
208
|
+
|
|
209
|
+
# Run validation (non-blocking, just show warnings)
|
|
210
|
+
if jfl services validate --json > /tmp/validation-result.json 2>/dev/null; then
|
|
211
|
+
# Parse results
|
|
212
|
+
ERRORS=$(jq -r '.summary.errors' /tmp/validation-result.json)
|
|
213
|
+
WARNINGS=$(jq -r '.summary.warnings' /tmp/validation-result.json)
|
|
214
|
+
|
|
215
|
+
if [[ "$ERRORS" -gt 0 ]]; then
|
|
216
|
+
echo "⚠️ Service validation found $ERRORS error(s)"
|
|
217
|
+
echo ""
|
|
218
|
+
echo "Run 'jfl services validate' to see details"
|
|
219
|
+
echo "Run 'jfl services validate --fix' to auto-repair"
|
|
220
|
+
echo ""
|
|
221
|
+
|
|
222
|
+
# Ask if they want to fix before ending
|
|
223
|
+
read -p "Auto-fix issues now? (y/N) " -n 1 -r
|
|
224
|
+
echo
|
|
225
|
+
if [[ $REPLY =~ ^[Yy]$ ]]; then
|
|
226
|
+
jfl services validate --fix
|
|
227
|
+
fi
|
|
228
|
+
elif [[ "$WARNINGS" -gt 0 ]]; then
|
|
229
|
+
echo "✓ Validation passed ($WARNINGS warning(s))"
|
|
230
|
+
else
|
|
231
|
+
echo "✓ Service configuration valid"
|
|
232
|
+
fi
|
|
233
|
+
fi
|
|
234
|
+
|
|
235
|
+
rm -f /tmp/validation-result.json
|
|
236
|
+
fi
|
|
237
|
+
```
|
|
238
|
+
|
|
239
|
+
**What this does:**
|
|
240
|
+
- Validates service configuration before ending session
|
|
241
|
+
- Non-blocking: Shows warnings but doesn't prevent session end
|
|
242
|
+
- Offers to auto-fix issues if errors found
|
|
243
|
+
- Only runs for services, not GTM workspaces
|
|
244
|
+
|
|
245
|
+
**Why this matters:**
|
|
246
|
+
- Catches configuration issues before they cause problems
|
|
247
|
+
- Prevents services from ending in an invalid state
|
|
248
|
+
- Ensures hooks, journal, and GTM integration are correct
|
|
249
|
+
|
|
250
|
+
### Step 2: Get Branch Information
|
|
251
|
+
|
|
252
|
+
```bash
|
|
253
|
+
# Current session branch
|
|
254
|
+
BRANCH=$(cat .jfl/current-session-branch.txt 2>/dev/null || git branch --show-current 2>/dev/null || echo "")
|
|
255
|
+
|
|
256
|
+
# Working branch (where session merges to)
|
|
257
|
+
WORKING_BRANCH=$(jq -r '.working_branch // "main"' .jfl/config.json 2>/dev/null || echo "main")
|
|
258
|
+
|
|
259
|
+
# Verify session branch format
|
|
260
|
+
if [[ ! "$BRANCH" =~ ^session- ]]; then
|
|
261
|
+
echo "⚠ Not on a session branch (current: $BRANCH)"
|
|
262
|
+
echo "Session branches start with 'session-'"
|
|
263
|
+
echo ""
|
|
264
|
+
echo "You might already be on $WORKING_BRANCH."
|
|
265
|
+
echo "No cleanup needed."
|
|
266
|
+
exit 0
|
|
267
|
+
fi
|
|
268
|
+
```
|
|
269
|
+
|
|
270
|
+
**What this tells you:**
|
|
271
|
+
- `BRANCH` → Current session being worked on
|
|
272
|
+
- `WORKING_BRANCH` → Where work will merge (usually `main` or `develop`)
|
|
273
|
+
|
|
274
|
+
### Step 3: Check for Uncommitted Changes
|
|
275
|
+
|
|
276
|
+
```bash
|
|
277
|
+
# Check working directory and staging area
|
|
278
|
+
if ! git diff --quiet || ! git diff --cached --quiet; then
|
|
279
|
+
UNCOMMITTED=true
|
|
280
|
+
UNCOMMITTED_COUNT=$(git status --porcelain | wc -l | tr -d ' ')
|
|
281
|
+
else
|
|
282
|
+
UNCOMMITTED=false
|
|
283
|
+
UNCOMMITTED_COUNT=0
|
|
284
|
+
fi
|
|
285
|
+
```
|
|
286
|
+
|
|
287
|
+
**What this tells you:**
|
|
288
|
+
- `true` → User has uncommitted changes, need to prompt
|
|
289
|
+
- `false` → Clean working directory, can proceed
|
|
290
|
+
|
|
291
|
+
### Step 4: Check for Journal Entry
|
|
292
|
+
|
|
293
|
+
```bash
|
|
294
|
+
# Session journal file
|
|
295
|
+
JOURNAL_FILE=".jfl/journal/${BRANCH}.jsonl"
|
|
296
|
+
|
|
297
|
+
if [[ -s "$JOURNAL_FILE" ]]; then
|
|
298
|
+
JOURNAL_EXISTS=true
|
|
299
|
+
JOURNAL_ENTRY_COUNT=$(wc -l < "$JOURNAL_FILE" | tr -d ' ')
|
|
300
|
+
else
|
|
301
|
+
JOURNAL_EXISTS=false
|
|
302
|
+
JOURNAL_ENTRY_COUNT=0
|
|
303
|
+
fi
|
|
304
|
+
```
|
|
305
|
+
|
|
306
|
+
**What this tells you:**
|
|
307
|
+
- `true` → Session is documented, good handoff
|
|
308
|
+
- `false` → No journal entry, should warn user
|
|
309
|
+
|
|
310
|
+
### Step 5: Count Session Work
|
|
311
|
+
|
|
312
|
+
```bash
|
|
313
|
+
# Commits in this session (since branching from working branch)
|
|
314
|
+
COMMIT_COUNT=$(git rev-list --count $WORKING_BRANCH..HEAD 2>/dev/null || echo "0")
|
|
315
|
+
|
|
316
|
+
# Files changed in this session
|
|
317
|
+
FILES_CHANGED=$(git diff --name-only $WORKING_BRANCH..HEAD 2>/dev/null | wc -l | tr -d ' ')
|
|
318
|
+
|
|
319
|
+
# Lines changed (rough metric)
|
|
320
|
+
LINES_ADDED=$(git diff --numstat $WORKING_BRANCH..HEAD 2>/dev/null | awk '{sum+=$1} END {print sum+0}')
|
|
321
|
+
LINES_REMOVED=$(git diff --numstat $WORKING_BRANCH..HEAD 2>/dev/null | awk '{sum+=$2} END {print sum+0}')
|
|
322
|
+
```
|
|
323
|
+
|
|
324
|
+
**What this tells you:**
|
|
325
|
+
- How much work will be merged
|
|
326
|
+
- Whether session had any meaningful work
|
|
327
|
+
- Context for journal warning (lots of work, no journal = bad)
|
|
328
|
+
|
|
329
|
+
### Step 6: Calculate Session Duration
|
|
330
|
+
|
|
331
|
+
```bash
|
|
332
|
+
# First commit in session (timestamp)
|
|
333
|
+
SESSION_START=$(git log --format=%ct --reverse $WORKING_BRANCH..HEAD 2>/dev/null | head -1)
|
|
334
|
+
|
|
335
|
+
if [[ -n "$SESSION_START" ]]; then
|
|
336
|
+
NOW=$(date +%s)
|
|
337
|
+
DURATION_SECONDS=$((NOW - SESSION_START))
|
|
338
|
+
DURATION_HOURS=$((DURATION_SECONDS / 3600))
|
|
339
|
+
DURATION_MINUTES=$(((DURATION_SECONDS % 3600) / 60))
|
|
340
|
+
else
|
|
341
|
+
# No commits yet
|
|
342
|
+
DURATION_HOURS=0
|
|
343
|
+
DURATION_MINUTES=0
|
|
344
|
+
fi
|
|
345
|
+
```
|
|
346
|
+
|
|
347
|
+
**What this tells you:**
|
|
348
|
+
- How long user has been working
|
|
349
|
+
- Used for synopsis timeframe (show last N hours)
|
|
350
|
+
|
|
351
|
+
### Complete Pre-Flight Check Script
|
|
352
|
+
|
|
353
|
+
Here's the full pattern to gather all session state:
|
|
354
|
+
|
|
355
|
+
```bash
|
|
356
|
+
#!/bin/bash
|
|
357
|
+
|
|
358
|
+
# Pre-flight check - gather complete session state
|
|
359
|
+
|
|
360
|
+
echo "Gathering session state..."
|
|
361
|
+
|
|
362
|
+
# 1. Detect mode
|
|
363
|
+
WORKTREE_PATH=$(cat .jfl/current-worktree.txt 2>/dev/null || echo "")
|
|
364
|
+
if [[ "$WORKTREE_PATH" == "direct" ]]; then
|
|
365
|
+
MODE="direct"
|
|
366
|
+
elif [[ -n "$WORKTREE_PATH" ]]; then
|
|
367
|
+
MODE="worktree"
|
|
368
|
+
else
|
|
369
|
+
MODE="none"
|
|
370
|
+
fi
|
|
371
|
+
|
|
372
|
+
# 2. Get branches
|
|
373
|
+
BRANCH=$(cat .jfl/current-session-branch.txt 2>/dev/null || git branch --show-current 2>/dev/null || echo "")
|
|
374
|
+
WORKING_BRANCH=$(jq -r '.working_branch // "main"' .jfl/config.json 2>/dev/null || echo "main")
|
|
375
|
+
|
|
376
|
+
# Verify this is a session
|
|
377
|
+
if [[ ! "$BRANCH" =~ ^session- ]]; then
|
|
378
|
+
echo "⚠ Not in a JFL session"
|
|
379
|
+
exit 1
|
|
380
|
+
fi
|
|
381
|
+
|
|
382
|
+
# 3. Check uncommitted changes
|
|
383
|
+
if ! git diff --quiet || ! git diff --cached --quiet; then
|
|
384
|
+
UNCOMMITTED=true
|
|
385
|
+
UNCOMMITTED_COUNT=$(git status --porcelain | wc -l | tr -d ' ')
|
|
386
|
+
else
|
|
387
|
+
UNCOMMITTED=false
|
|
388
|
+
UNCOMMITTED_COUNT=0
|
|
389
|
+
fi
|
|
390
|
+
|
|
391
|
+
# 4. Check journal
|
|
392
|
+
JOURNAL_FILE=".jfl/journal/${BRANCH}.jsonl"
|
|
393
|
+
if [[ -s "$JOURNAL_FILE" ]]; then
|
|
394
|
+
JOURNAL_EXISTS=true
|
|
395
|
+
JOURNAL_ENTRY_COUNT=$(wc -l < "$JOURNAL_FILE" | tr -d ' ')
|
|
396
|
+
else
|
|
397
|
+
JOURNAL_EXISTS=false
|
|
398
|
+
JOURNAL_ENTRY_COUNT=0
|
|
399
|
+
fi
|
|
400
|
+
|
|
401
|
+
# 5. Count work
|
|
402
|
+
COMMIT_COUNT=$(git rev-list --count $WORKING_BRANCH..HEAD 2>/dev/null || echo "0")
|
|
403
|
+
FILES_CHANGED=$(git diff --name-only $WORKING_BRANCH..HEAD 2>/dev/null | wc -l | tr -d ' ')
|
|
404
|
+
LINES_ADDED=$(git diff --numstat $WORKING_BRANCH..HEAD 2>/dev/null | awk '{sum+=$1} END {print sum+0}')
|
|
405
|
+
LINES_REMOVED=$(git diff --numstat $WORKING_BRANCH..HEAD 2>/dev/null | awk '{sum+=$2} END {print sum+0}')
|
|
406
|
+
|
|
407
|
+
# 6. Calculate duration
|
|
408
|
+
SESSION_START=$(git log --format=%ct --reverse $WORKING_BRANCH..HEAD 2>/dev/null | head -1)
|
|
409
|
+
if [[ -n "$SESSION_START" ]]; then
|
|
410
|
+
NOW=$(date +%s)
|
|
411
|
+
DURATION_SECONDS=$((NOW - SESSION_START))
|
|
412
|
+
DURATION_HOURS=$((DURATION_SECONDS / 3600))
|
|
413
|
+
DURATION_MINUTES=$(((DURATION_SECONDS % 3600) / 60))
|
|
414
|
+
else
|
|
415
|
+
DURATION_HOURS=0
|
|
416
|
+
DURATION_MINUTES=0
|
|
417
|
+
fi
|
|
418
|
+
|
|
419
|
+
# Export for use by skill
|
|
420
|
+
echo "MODE=$MODE"
|
|
421
|
+
echo "BRANCH=$BRANCH"
|
|
422
|
+
echo "WORKING_BRANCH=$WORKING_BRANCH"
|
|
423
|
+
echo "UNCOMMITTED=$UNCOMMITTED"
|
|
424
|
+
echo "UNCOMMITTED_COUNT=$UNCOMMITTED_COUNT"
|
|
425
|
+
echo "JOURNAL_EXISTS=$JOURNAL_EXISTS"
|
|
426
|
+
echo "JOURNAL_ENTRY_COUNT=$JOURNAL_ENTRY_COUNT"
|
|
427
|
+
echo "COMMIT_COUNT=$COMMIT_COUNT"
|
|
428
|
+
echo "FILES_CHANGED=$FILES_CHANGED"
|
|
429
|
+
echo "LINES_ADDED=$LINES_ADDED"
|
|
430
|
+
echo "LINES_REMOVED=$LINES_REMOVED"
|
|
431
|
+
echo "DURATION_HOURS=$DURATION_HOURS"
|
|
432
|
+
echo "DURATION_MINUTES=$DURATION_MINUTES"
|
|
433
|
+
```
|
|
434
|
+
|
|
435
|
+
You can run this and parse the output, or inline the checks directly in your skill logic.
|
|
436
|
+
|
|
437
|
+
---
|
|
438
|
+
|
|
439
|
+
## User Experience Flows
|
|
440
|
+
|
|
441
|
+
### Scenario 1: Clean State (Happy Path)
|
|
442
|
+
|
|
443
|
+
**State:** No uncommitted changes, journal exists, clean merge expected
|
|
444
|
+
|
|
445
|
+
**What user sees:**
|
|
446
|
+
|
|
447
|
+
```
|
|
448
|
+
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
|
|
449
|
+
Ending Session
|
|
450
|
+
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
|
|
451
|
+
Session: session-goose-20260210-1430-a1b2c3
|
|
452
|
+
Mode: worktree
|
|
453
|
+
Merging to: main
|
|
454
|
+
|
|
455
|
+
Changes:
|
|
456
|
+
• 8 commits
|
|
457
|
+
• 12 files modified
|
|
458
|
+
• +234 / -67 lines
|
|
459
|
+
|
|
460
|
+
✓ Journal entry exists (3 entries)
|
|
461
|
+
✓ No uncommitted changes
|
|
462
|
+
|
|
463
|
+
Executing cleanup...
|
|
464
|
+
✓ Merged to main
|
|
465
|
+
✓ Pushed to origin
|
|
466
|
+
✓ Removed worktree
|
|
467
|
+
✓ Deleted session branch
|
|
468
|
+
|
|
469
|
+
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
|
|
470
|
+
Work Summary (2h 15m session)
|
|
471
|
+
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
|
|
472
|
+
|
|
473
|
+
[Synopsis output here...]
|
|
474
|
+
|
|
475
|
+
✓ Session ended successfully
|
|
476
|
+
```
|
|
477
|
+
|
|
478
|
+
**Implementation:**
|
|
479
|
+
|
|
480
|
+
```bash
|
|
481
|
+
# After pre-flight check shows clean state
|
|
482
|
+
|
|
483
|
+
echo ""
|
|
484
|
+
echo "━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━"
|
|
485
|
+
echo " Ending Session"
|
|
486
|
+
echo "━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━"
|
|
487
|
+
echo "Session: $BRANCH"
|
|
488
|
+
echo "Mode: $MODE"
|
|
489
|
+
echo "Merging to: $WORKING_BRANCH"
|
|
490
|
+
echo ""
|
|
491
|
+
echo "Changes:"
|
|
492
|
+
echo " • $COMMIT_COUNT commits"
|
|
493
|
+
echo " • $FILES_CHANGED files modified"
|
|
494
|
+
echo " • +$LINES_ADDED / -$LINES_REMOVED lines"
|
|
495
|
+
echo ""
|
|
496
|
+
echo "✓ Journal entry exists ($JOURNAL_ENTRY_COUNT entries)"
|
|
497
|
+
echo "✓ No uncommitted changes"
|
|
498
|
+
echo ""
|
|
499
|
+
echo "Executing cleanup..."
|
|
500
|
+
|
|
501
|
+
# Call session-cleanup.sh
|
|
502
|
+
./scripts/session/session-cleanup.sh 2>&1 | while IFS= read -r line; do
|
|
503
|
+
# Filter output to show only key steps
|
|
504
|
+
if [[ "$line" =~ ^✓ ]] || [[ "$line" =~ ^⚠ ]] || [[ "$line" =~ "Merged" ]] || [[ "$line" =~ "Pushed" ]]; then
|
|
505
|
+
echo " $line"
|
|
506
|
+
fi
|
|
507
|
+
done
|
|
508
|
+
|
|
509
|
+
EXIT_CODE=${PIPESTATUS[0]}
|
|
510
|
+
|
|
511
|
+
if [[ $EXIT_CODE -eq 0 ]]; then
|
|
512
|
+
# Show synopsis
|
|
513
|
+
echo ""
|
|
514
|
+
echo "━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━"
|
|
515
|
+
echo " Work Summary (${DURATION_HOURS}h ${DURATION_MINUTES}m session)"
|
|
516
|
+
echo "━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━"
|
|
517
|
+
jfl synopsis $((DURATION_HOURS + 1)) # Round up to next hour
|
|
518
|
+
echo ""
|
|
519
|
+
echo "✓ Session ended successfully"
|
|
520
|
+
else
|
|
521
|
+
echo ""
|
|
522
|
+
echo "⚠ Session cleanup encountered issues"
|
|
523
|
+
echo "See log: .jfl/logs/session-cleanup.log"
|
|
524
|
+
fi
|
|
525
|
+
```
|
|
526
|
+
|
|
527
|
+
### Scenario 2: Uncommitted Changes
|
|
528
|
+
|
|
529
|
+
**State:** User has uncommitted changes (forgot to commit before ending)
|
|
530
|
+
|
|
531
|
+
**What user sees:**
|
|
532
|
+
|
|
533
|
+
```
|
|
534
|
+
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
|
|
535
|
+
Uncommitted Changes Detected
|
|
536
|
+
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
|
|
537
|
+
|
|
538
|
+
You have 5 uncommitted changes:
|
|
539
|
+
|
|
540
|
+
M src/lib/auth.ts
|
|
541
|
+
M src/components/LoginForm.tsx
|
|
542
|
+
A src/lib/session-manager.ts
|
|
543
|
+
?? src/lib/types.ts
|
|
544
|
+
M README.md
|
|
545
|
+
|
|
546
|
+
Options:
|
|
547
|
+
1. Auto-commit these changes (recommended)
|
|
548
|
+
2. Show me the diff first
|
|
549
|
+
3. Discard these changes (⚠ cannot be undone)
|
|
550
|
+
4. Cancel (stay in session)
|
|
551
|
+
|
|
552
|
+
What would you like to do? [1-4]:
|
|
553
|
+
```
|
|
554
|
+
|
|
555
|
+
**Implementation:**
|
|
556
|
+
|
|
557
|
+
```bash
|
|
558
|
+
# After detecting UNCOMMITTED=true
|
|
559
|
+
|
|
560
|
+
echo ""
|
|
561
|
+
echo "━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━"
|
|
562
|
+
echo " Uncommitted Changes Detected"
|
|
563
|
+
echo "━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━"
|
|
564
|
+
echo ""
|
|
565
|
+
echo "You have $UNCOMMITTED_COUNT uncommitted changes:"
|
|
566
|
+
echo ""
|
|
567
|
+
git status --porcelain | head -10 | sed 's/^/ /'
|
|
568
|
+
if [[ $UNCOMMITTED_COUNT -gt 10 ]]; then
|
|
569
|
+
echo " ... and $((UNCOMMITTED_COUNT - 10)) more"
|
|
570
|
+
fi
|
|
571
|
+
echo ""
|
|
572
|
+
```
|
|
573
|
+
|
|
574
|
+
**Then present options to the user via AskUserQuestion tool:**
|
|
575
|
+
|
|
576
|
+
```json
|
|
577
|
+
{
|
|
578
|
+
"questions": [
|
|
579
|
+
{
|
|
580
|
+
"question": "What would you like to do with uncommitted changes?",
|
|
581
|
+
"header": "Uncommitted",
|
|
582
|
+
"multiSelect": false,
|
|
583
|
+
"options": [
|
|
584
|
+
{
|
|
585
|
+
"label": "Auto-commit (Recommended)",
|
|
586
|
+
"description": "Automatically commit all changes with message 'session: end'. Safe and fast."
|
|
587
|
+
},
|
|
588
|
+
{
|
|
589
|
+
"label": "Show diff first",
|
|
590
|
+
"description": "Review changes before deciding. Lets you see exactly what will be committed."
|
|
591
|
+
},
|
|
592
|
+
{
|
|
593
|
+
"label": "Discard changes",
|
|
594
|
+
"description": "⚠ Permanently delete uncommitted changes. Cannot be undone. Only use if you're sure."
|
|
595
|
+
},
|
|
596
|
+
{
|
|
597
|
+
"label": "Cancel",
|
|
598
|
+
"description": "Stay in the session. Commit changes manually, then run /end again."
|
|
599
|
+
}
|
|
600
|
+
]
|
|
601
|
+
}
|
|
602
|
+
]
|
|
603
|
+
}
|
|
604
|
+
```
|
|
605
|
+
|
|
606
|
+
**Handle each choice:**
|
|
607
|
+
|
|
608
|
+
**Choice 1: Auto-commit**
|
|
609
|
+
```bash
|
|
610
|
+
echo "Auto-committing changes..."
|
|
611
|
+
git add -A
|
|
612
|
+
git commit -m "session: end $(date +%Y-%m-%d\ %H:%M)"
|
|
613
|
+
echo "✓ Changes committed"
|
|
614
|
+
echo ""
|
|
615
|
+
# Continue to cleanup
|
|
616
|
+
```
|
|
617
|
+
|
|
618
|
+
**Choice 2: Show diff**
|
|
619
|
+
```bash
|
|
620
|
+
echo "Changes to be committed:"
|
|
621
|
+
echo ""
|
|
622
|
+
git diff HEAD
|
|
623
|
+
echo ""
|
|
624
|
+
echo "What now?"
|
|
625
|
+
echo " 1. Commit these changes"
|
|
626
|
+
echo " 2. Discard these changes"
|
|
627
|
+
echo " 3. Cancel"
|
|
628
|
+
# Prompt again
|
|
629
|
+
```
|
|
630
|
+
|
|
631
|
+
**Choice 3: Discard**
|
|
632
|
+
```bash
|
|
633
|
+
echo "⚠ WARNING: This will permanently delete all uncommitted changes."
|
|
634
|
+
echo ""
|
|
635
|
+
echo "Type 'discard' to confirm: "
|
|
636
|
+
# Wait for user confirmation
|
|
637
|
+
# If confirmed:
|
|
638
|
+
git reset --hard HEAD
|
|
639
|
+
git clean -fd
|
|
640
|
+
echo "✓ Changes discarded"
|
|
641
|
+
# Continue to cleanup
|
|
642
|
+
```
|
|
643
|
+
|
|
644
|
+
**Choice 4: Cancel**
|
|
645
|
+
```bash
|
|
646
|
+
echo "Session still active."
|
|
647
|
+
echo "Commit your changes, then run /end again."
|
|
648
|
+
exit 0
|
|
649
|
+
```
|
|
650
|
+
|
|
651
|
+
### Scenario 3: No Journal Entry
|
|
652
|
+
|
|
653
|
+
**State:** Session has substantial work but no journal entry
|
|
654
|
+
|
|
655
|
+
**What user sees:**
|
|
656
|
+
|
|
657
|
+
```
|
|
658
|
+
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
|
|
659
|
+
Missing Journal Entry
|
|
660
|
+
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
|
|
661
|
+
|
|
662
|
+
This session has work, but no journal entry:
|
|
663
|
+
• 8 commits
|
|
664
|
+
• 12 files changed
|
|
665
|
+
• 2h 15m duration
|
|
666
|
+
|
|
667
|
+
Journal entries help you (and others) understand what
|
|
668
|
+
happened when resuming work later.
|
|
669
|
+
|
|
670
|
+
Would you like to:
|
|
671
|
+
1. Write a quick journal entry now (30 seconds)
|
|
672
|
+
2. Skip (not recommended, but allowed)
|
|
673
|
+
|
|
674
|
+
Choice [1-2]:
|
|
675
|
+
```
|
|
676
|
+
|
|
677
|
+
**Implementation:**
|
|
678
|
+
|
|
679
|
+
```bash
|
|
680
|
+
# After detecting JOURNAL_EXISTS=false and COMMIT_COUNT > 0
|
|
681
|
+
|
|
682
|
+
echo ""
|
|
683
|
+
echo "━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━"
|
|
684
|
+
echo " Missing Journal Entry"
|
|
685
|
+
echo "━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━"
|
|
686
|
+
echo ""
|
|
687
|
+
echo "This session has work, but no journal entry:"
|
|
688
|
+
echo " • $COMMIT_COUNT commits"
|
|
689
|
+
echo " • $FILES_CHANGED files changed"
|
|
690
|
+
echo " • ${DURATION_HOURS}h ${DURATION_MINUTES}m duration"
|
|
691
|
+
echo ""
|
|
692
|
+
echo "Journal entries help you (and others) understand what"
|
|
693
|
+
echo "happened when resuming work later."
|
|
694
|
+
echo ""
|
|
695
|
+
```
|
|
696
|
+
|
|
697
|
+
**Present options:**
|
|
698
|
+
|
|
699
|
+
```json
|
|
700
|
+
{
|
|
701
|
+
"questions": [
|
|
702
|
+
{
|
|
703
|
+
"question": "Would you like to write a journal entry?",
|
|
704
|
+
"header": "Journal",
|
|
705
|
+
"multiSelect": false,
|
|
706
|
+
"options": [
|
|
707
|
+
{
|
|
708
|
+
"label": "Write entry (Recommended)",
|
|
709
|
+
"description": "Quick 30-second entry. Just a title and summary of what you did."
|
|
710
|
+
},
|
|
711
|
+
{
|
|
712
|
+
"label": "Skip",
|
|
713
|
+
"description": "Not recommended. Future sessions won't have context for this work."
|
|
714
|
+
}
|
|
715
|
+
]
|
|
716
|
+
}
|
|
717
|
+
]
|
|
718
|
+
}
|
|
719
|
+
```
|
|
720
|
+
|
|
721
|
+
**If write entry:**
|
|
722
|
+
|
|
723
|
+
Prompt for minimal info:
|
|
724
|
+
|
|
725
|
+
```
|
|
726
|
+
What did you work on? (one sentence):
|
|
727
|
+
```
|
|
728
|
+
|
|
729
|
+
Wait for user input, then write basic journal entry:
|
|
730
|
+
|
|
731
|
+
```bash
|
|
732
|
+
TITLE="$USER_INPUT"
|
|
733
|
+
SUMMARY="Session work (auto-generated)"
|
|
734
|
+
TS=$(date -u +"%Y-%m-%dT%H:%M:%S.000Z")
|
|
735
|
+
|
|
736
|
+
# Get files changed
|
|
737
|
+
FILES=$(git diff --name-only $WORKING_BRANCH..HEAD | jq -R -s -c 'split("\n") | map(select(length > 0))')
|
|
738
|
+
|
|
739
|
+
# Write entry
|
|
740
|
+
cat >> "$JOURNAL_FILE" << EOF
|
|
741
|
+
{"v":1,"ts":"$TS","session":"$BRANCH","type":"session-end","status":"complete","title":"$TITLE","summary":"$SUMMARY","files":$FILES}
|
|
742
|
+
EOF
|
|
743
|
+
|
|
744
|
+
echo "✓ Journal entry created"
|
|
745
|
+
```
|
|
746
|
+
|
|
747
|
+
**If skip:**
|
|
748
|
+
|
|
749
|
+
```bash
|
|
750
|
+
echo "⚠ Proceeding without journal entry"
|
|
751
|
+
echo "Note: This makes handoffs harder for future sessions"
|
|
752
|
+
echo ""
|
|
753
|
+
# Continue to cleanup
|
|
754
|
+
```
|
|
755
|
+
|
|
756
|
+
### Scenario 4: Merge Conflicts
|
|
757
|
+
|
|
758
|
+
**State:** Cleanup script detects conflicts that can't be auto-resolved
|
|
759
|
+
|
|
760
|
+
**What user sees:**
|
|
761
|
+
|
|
762
|
+
```
|
|
763
|
+
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
|
|
764
|
+
Merge Conflicts Detected
|
|
765
|
+
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
|
|
766
|
+
|
|
767
|
+
Conflicts in:
|
|
768
|
+
• src/lib/auth.ts
|
|
769
|
+
• src/components/LoginForm.tsx
|
|
770
|
+
|
|
771
|
+
Your session branch has been preserved: session-goose-20260210-1430-a1b2c3
|
|
772
|
+
|
|
773
|
+
To resolve manually:
|
|
774
|
+
|
|
775
|
+
1. Review changes:
|
|
776
|
+
git log main..session-goose-20260210-1430-a1b2c3
|
|
777
|
+
|
|
778
|
+
2. Merge manually:
|
|
779
|
+
git checkout main
|
|
780
|
+
git merge session-goose-20260210-1430-a1b2c3
|
|
781
|
+
|
|
782
|
+
3. Resolve conflicts in your editor
|
|
783
|
+
|
|
784
|
+
4. Complete merge:
|
|
785
|
+
git add .
|
|
786
|
+
git commit
|
|
787
|
+
git push origin main
|
|
788
|
+
|
|
789
|
+
5. Delete session branch:
|
|
790
|
+
git branch -D session-goose-20260210-1430-a1b2c3
|
|
791
|
+
|
|
792
|
+
Need help? Ask Claude to guide you through conflict resolution.
|
|
793
|
+
```
|
|
794
|
+
|
|
795
|
+
**Implementation:**
|
|
796
|
+
|
|
797
|
+
```bash
|
|
798
|
+
# session-cleanup.sh handles conflict detection
|
|
799
|
+
# If it exits with conflicts, parse output and guide user
|
|
800
|
+
|
|
801
|
+
EXIT_CODE=${PIPESTATUS[0]}
|
|
802
|
+
|
|
803
|
+
if [[ $EXIT_CODE -ne 0 ]]; then
|
|
804
|
+
# Check if conflicts were the issue
|
|
805
|
+
if grep -q "Merge conflicts remain" .jfl/logs/session-cleanup.log; then
|
|
806
|
+
echo ""
|
|
807
|
+
echo "━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━"
|
|
808
|
+
echo " Merge Conflicts Detected"
|
|
809
|
+
echo "━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━"
|
|
810
|
+
echo ""
|
|
811
|
+
echo "Conflicts in:"
|
|
812
|
+
grep "Cannot auto-resolve:" .jfl/logs/session-cleanup.log | sed 's/^.*: / • /'
|
|
813
|
+
echo ""
|
|
814
|
+
echo "Your session branch has been preserved: $BRANCH"
|
|
815
|
+
echo ""
|
|
816
|
+
echo "To resolve manually:"
|
|
817
|
+
echo ""
|
|
818
|
+
echo "1. Review changes:"
|
|
819
|
+
echo " git log $WORKING_BRANCH..$BRANCH"
|
|
820
|
+
echo ""
|
|
821
|
+
echo "2. Merge manually:"
|
|
822
|
+
echo " git checkout $WORKING_BRANCH"
|
|
823
|
+
echo " git merge $BRANCH"
|
|
824
|
+
echo ""
|
|
825
|
+
echo "3. Resolve conflicts in your editor"
|
|
826
|
+
echo ""
|
|
827
|
+
echo "4. Complete merge:"
|
|
828
|
+
echo " git add ."
|
|
829
|
+
echo " git commit"
|
|
830
|
+
echo " git push origin $WORKING_BRANCH"
|
|
831
|
+
echo ""
|
|
832
|
+
echo "5. Delete session branch:"
|
|
833
|
+
echo " git branch -D $BRANCH"
|
|
834
|
+
echo ""
|
|
835
|
+
echo "Need help? Ask Claude to guide you through conflict resolution."
|
|
836
|
+
fi
|
|
837
|
+
fi
|
|
838
|
+
```
|
|
839
|
+
|
|
840
|
+
---
|
|
841
|
+
|
|
842
|
+
## Implementation Steps
|
|
843
|
+
|
|
844
|
+
### Complete Execution Flow
|
|
845
|
+
|
|
846
|
+
Here's the full implementation pattern for the `/end` skill:
|
|
847
|
+
|
|
848
|
+
```bash
|
|
849
|
+
#!/bin/bash
|
|
850
|
+
|
|
851
|
+
# /end skill implementation
|
|
852
|
+
|
|
853
|
+
set -e
|
|
854
|
+
|
|
855
|
+
echo "━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━"
|
|
856
|
+
echo " Preparing to End Session"
|
|
857
|
+
echo "━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━"
|
|
858
|
+
echo ""
|
|
859
|
+
|
|
860
|
+
# ============================================================
|
|
861
|
+
# STEP 1: Pre-Flight Check
|
|
862
|
+
# ============================================================
|
|
863
|
+
|
|
864
|
+
echo "Running pre-flight checks..."
|
|
865
|
+
echo ""
|
|
866
|
+
|
|
867
|
+
# Detect mode
|
|
868
|
+
WORKTREE_PATH=$(cat .jfl/current-worktree.txt 2>/dev/null || echo "")
|
|
869
|
+
if [[ "$WORKTREE_PATH" == "direct" ]]; then
|
|
870
|
+
MODE="direct"
|
|
871
|
+
elif [[ -n "$WORKTREE_PATH" ]]; then
|
|
872
|
+
MODE="worktree"
|
|
873
|
+
else
|
|
874
|
+
MODE="none"
|
|
875
|
+
fi
|
|
876
|
+
|
|
877
|
+
# Get branches
|
|
878
|
+
BRANCH=$(cat .jfl/current-session-branch.txt 2>/dev/null || git branch --show-current 2>/dev/null || echo "")
|
|
879
|
+
WORKING_BRANCH=$(jq -r '.working_branch // "main"' .jfl/config.json 2>/dev/null || echo "main")
|
|
880
|
+
|
|
881
|
+
# Verify session
|
|
882
|
+
if [[ ! "$BRANCH" =~ ^session- ]]; then
|
|
883
|
+
echo "⚠ Not in a JFL session (current branch: ${BRANCH:-none})"
|
|
884
|
+
echo ""
|
|
885
|
+
echo "You might already be on $WORKING_BRANCH."
|
|
886
|
+
echo "Session branches start with 'session-'."
|
|
887
|
+
echo ""
|
|
888
|
+
echo "No cleanup needed."
|
|
889
|
+
exit 0
|
|
890
|
+
fi
|
|
891
|
+
|
|
892
|
+
# Check uncommitted
|
|
893
|
+
if ! git diff --quiet || ! git diff --cached --quiet; then
|
|
894
|
+
UNCOMMITTED=true
|
|
895
|
+
UNCOMMITTED_COUNT=$(git status --porcelain | wc -l | tr -d ' ')
|
|
896
|
+
else
|
|
897
|
+
UNCOMMITTED=false
|
|
898
|
+
UNCOMMITTED_COUNT=0
|
|
899
|
+
fi
|
|
900
|
+
|
|
901
|
+
# Check journal
|
|
902
|
+
JOURNAL_FILE=".jfl/journal/${BRANCH}.jsonl"
|
|
903
|
+
if [[ -s "$JOURNAL_FILE" ]]; then
|
|
904
|
+
JOURNAL_EXISTS=true
|
|
905
|
+
JOURNAL_ENTRY_COUNT=$(wc -l < "$JOURNAL_FILE" | tr -d ' ')
|
|
906
|
+
else
|
|
907
|
+
JOURNAL_EXISTS=false
|
|
908
|
+
JOURNAL_ENTRY_COUNT=0
|
|
909
|
+
fi
|
|
910
|
+
|
|
911
|
+
# Count work
|
|
912
|
+
COMMIT_COUNT=$(git rev-list --count $WORKING_BRANCH..HEAD 2>/dev/null || echo "0")
|
|
913
|
+
FILES_CHANGED=$(git diff --name-only $WORKING_BRANCH..HEAD 2>/dev/null | wc -l | tr -d ' ')
|
|
914
|
+
LINES_ADDED=$(git diff --numstat $WORKING_BRANCH..HEAD 2>/dev/null | awk '{sum+=$1} END {print sum+0}')
|
|
915
|
+
LINES_REMOVED=$(git diff --numstat $WORKING_BRANCH..HEAD 2>/dev/null | awk '{sum+=$2} END {print sum+0}')
|
|
916
|
+
|
|
917
|
+
# Calculate duration
|
|
918
|
+
SESSION_START=$(git log --format=%ct --reverse $WORKING_BRANCH..HEAD 2>/dev/null | head -1)
|
|
919
|
+
if [[ -n "$SESSION_START" ]]; then
|
|
920
|
+
NOW=$(date +%s)
|
|
921
|
+
DURATION_SECONDS=$((NOW - SESSION_START))
|
|
922
|
+
DURATION_HOURS=$((DURATION_SECONDS / 3600))
|
|
923
|
+
DURATION_MINUTES=$(((DURATION_SECONDS % 3600) / 60))
|
|
924
|
+
else
|
|
925
|
+
DURATION_HOURS=0
|
|
926
|
+
DURATION_MINUTES=0
|
|
927
|
+
fi
|
|
928
|
+
|
|
929
|
+
# ============================================================
|
|
930
|
+
# STEP 2: Display Session Summary
|
|
931
|
+
# ============================================================
|
|
932
|
+
|
|
933
|
+
echo "━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━"
|
|
934
|
+
echo " Session Summary"
|
|
935
|
+
echo "━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━"
|
|
936
|
+
echo "Session: $BRANCH"
|
|
937
|
+
echo "Mode: $MODE"
|
|
938
|
+
echo "Merging to: $WORKING_BRANCH"
|
|
939
|
+
echo "Duration: ${DURATION_HOURS}h ${DURATION_MINUTES}m"
|
|
940
|
+
echo ""
|
|
941
|
+
echo "Changes:"
|
|
942
|
+
echo " • $COMMIT_COUNT commits"
|
|
943
|
+
echo " • $FILES_CHANGED files modified"
|
|
944
|
+
echo " • +$LINES_ADDED / -$LINES_REMOVED lines"
|
|
945
|
+
echo ""
|
|
946
|
+
|
|
947
|
+
# ============================================================
|
|
948
|
+
# STEP 3: Handle Uncommitted Changes
|
|
949
|
+
# ============================================================
|
|
950
|
+
|
|
951
|
+
if [[ "$UNCOMMITTED" == "true" ]]; then
|
|
952
|
+
echo "━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━"
|
|
953
|
+
echo " Uncommitted Changes Detected"
|
|
954
|
+
echo "━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━"
|
|
955
|
+
echo ""
|
|
956
|
+
echo "You have $UNCOMMITTED_COUNT uncommitted changes:"
|
|
957
|
+
echo ""
|
|
958
|
+
git status --porcelain | head -10 | sed 's/^/ /'
|
|
959
|
+
if [[ $UNCOMMITTED_COUNT -gt 10 ]]; then
|
|
960
|
+
echo " ... and $((UNCOMMITTED_COUNT - 10)) more"
|
|
961
|
+
fi
|
|
962
|
+
echo ""
|
|
963
|
+
|
|
964
|
+
# Use AskUserQuestion tool here in actual implementation
|
|
965
|
+
# For script, prompt directly:
|
|
966
|
+
echo "Options:"
|
|
967
|
+
echo " 1. Auto-commit (recommended)"
|
|
968
|
+
echo " 2. Show diff first"
|
|
969
|
+
echo " 3. Discard changes (⚠ cannot undo)"
|
|
970
|
+
echo " 4. Cancel"
|
|
971
|
+
echo ""
|
|
972
|
+
read -p "Choice [1-4]: " CHOICE
|
|
973
|
+
|
|
974
|
+
case $CHOICE in
|
|
975
|
+
1)
|
|
976
|
+
echo "Auto-committing changes..."
|
|
977
|
+
git add -A
|
|
978
|
+
git commit -m "session: end $(date +%Y-%m-%d\ %H:%M)"
|
|
979
|
+
echo "✓ Changes committed"
|
|
980
|
+
echo ""
|
|
981
|
+
;;
|
|
982
|
+
2)
|
|
983
|
+
git diff HEAD
|
|
984
|
+
echo ""
|
|
985
|
+
echo "Commit these changes? [y/n]"
|
|
986
|
+
read -p "> " CONFIRM
|
|
987
|
+
if [[ "$CONFIRM" =~ ^[Yy] ]]; then
|
|
988
|
+
git add -A
|
|
989
|
+
git commit -m "session: end $(date +%Y-%m-%d\ %H:%M)"
|
|
990
|
+
echo "✓ Changes committed"
|
|
991
|
+
else
|
|
992
|
+
echo "Cancelled."
|
|
993
|
+
exit 0
|
|
994
|
+
fi
|
|
995
|
+
;;
|
|
996
|
+
3)
|
|
997
|
+
echo "⚠ WARNING: Permanently delete uncommitted changes?"
|
|
998
|
+
read -p "Type 'discard' to confirm: " CONFIRM
|
|
999
|
+
if [[ "$CONFIRM" == "discard" ]]; then
|
|
1000
|
+
git reset --hard HEAD
|
|
1001
|
+
git clean -fd
|
|
1002
|
+
echo "✓ Changes discarded"
|
|
1003
|
+
else
|
|
1004
|
+
echo "Cancelled."
|
|
1005
|
+
exit 0
|
|
1006
|
+
fi
|
|
1007
|
+
;;
|
|
1008
|
+
4)
|
|
1009
|
+
echo "Session still active."
|
|
1010
|
+
echo "Commit your changes, then run /end again."
|
|
1011
|
+
exit 0
|
|
1012
|
+
;;
|
|
1013
|
+
esac
|
|
1014
|
+
fi
|
|
1015
|
+
|
|
1016
|
+
# ============================================================
|
|
1017
|
+
# STEP 4: Handle Missing Journal
|
|
1018
|
+
# ============================================================
|
|
1019
|
+
|
|
1020
|
+
if [[ "$JOURNAL_EXISTS" == "false" ]] && [[ $COMMIT_COUNT -gt 0 ]]; then
|
|
1021
|
+
echo "━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━"
|
|
1022
|
+
echo " Missing Journal Entry"
|
|
1023
|
+
echo "━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━"
|
|
1024
|
+
echo ""
|
|
1025
|
+
echo "This session has work, but no journal entry:"
|
|
1026
|
+
echo " • $COMMIT_COUNT commits"
|
|
1027
|
+
echo " • $FILES_CHANGED files changed"
|
|
1028
|
+
echo " • ${DURATION_HOURS}h ${DURATION_MINUTES}m duration"
|
|
1029
|
+
echo ""
|
|
1030
|
+
echo "Journal entries help future sessions understand this work."
|
|
1031
|
+
echo ""
|
|
1032
|
+
echo "Options:"
|
|
1033
|
+
echo " 1. Write quick entry (30 seconds)"
|
|
1034
|
+
echo " 2. Skip (not recommended)"
|
|
1035
|
+
echo ""
|
|
1036
|
+
read -p "Choice [1-2]: " CHOICE
|
|
1037
|
+
|
|
1038
|
+
if [[ "$CHOICE" == "1" ]]; then
|
|
1039
|
+
echo ""
|
|
1040
|
+
read -p "What did you work on? (one sentence): " TITLE
|
|
1041
|
+
SUMMARY="Session work"
|
|
1042
|
+
TS=$(date -u +"%Y-%m-%dT%H:%M:%S.000Z")
|
|
1043
|
+
FILES=$(git diff --name-only $WORKING_BRANCH..HEAD | jq -R -s -c 'split("\n") | map(select(length > 0))')
|
|
1044
|
+
|
|
1045
|
+
mkdir -p .jfl/journal
|
|
1046
|
+
cat >> "$JOURNAL_FILE" << EOF
|
|
1047
|
+
{"v":1,"ts":"$TS","session":"$BRANCH","type":"session-end","status":"complete","title":"$TITLE","summary":"$SUMMARY","files":$FILES}
|
|
1048
|
+
EOF
|
|
1049
|
+
|
|
1050
|
+
echo "✓ Journal entry created"
|
|
1051
|
+
echo ""
|
|
1052
|
+
else
|
|
1053
|
+
echo "⚠ Proceeding without journal entry"
|
|
1054
|
+
echo ""
|
|
1055
|
+
fi
|
|
1056
|
+
else
|
|
1057
|
+
echo "✓ Journal entry exists ($JOURNAL_ENTRY_COUNT entries)"
|
|
1058
|
+
fi
|
|
1059
|
+
|
|
1060
|
+
if [[ "$UNCOMMITTED" == "false" ]]; then
|
|
1061
|
+
echo "✓ No uncommitted changes"
|
|
1062
|
+
fi
|
|
1063
|
+
|
|
1064
|
+
# ============================================================
|
|
1065
|
+
# STEP 5: Execute Cleanup
|
|
1066
|
+
# ============================================================
|
|
1067
|
+
|
|
1068
|
+
echo ""
|
|
1069
|
+
echo "━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━"
|
|
1070
|
+
echo " Executing Cleanup"
|
|
1071
|
+
echo "━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━"
|
|
1072
|
+
echo ""
|
|
1073
|
+
|
|
1074
|
+
# Create logs directory
|
|
1075
|
+
mkdir -p .jfl/logs
|
|
1076
|
+
|
|
1077
|
+
# Run session-cleanup.sh and capture output
|
|
1078
|
+
./scripts/session/session-cleanup.sh 2>&1 | tee .jfl/logs/session-cleanup.log | while IFS= read -r line; do
|
|
1079
|
+
# Filter to show only key steps
|
|
1080
|
+
if [[ "$line" =~ ^✓ ]] || [[ "$line" =~ ^⚠ ]] || [[ "$line" =~ "Merged" ]] || [[ "$line" =~ "Pushed" ]] || [[ "$line" =~ "Removing" ]] || [[ "$line" =~ "Deleting" ]]; then
|
|
1081
|
+
echo " $line"
|
|
1082
|
+
fi
|
|
1083
|
+
done
|
|
1084
|
+
|
|
1085
|
+
EXIT_CODE=${PIPESTATUS[0]}
|
|
1086
|
+
|
|
1087
|
+
# ============================================================
|
|
1088
|
+
# STEP 5.5: Sync to GTM (if in service)
|
|
1089
|
+
# ============================================================
|
|
1090
|
+
|
|
1091
|
+
if [[ "$SYNC_TO_GTM" == "true" && -n "$GTM_PARENT" ]]; then
|
|
1092
|
+
echo ""
|
|
1093
|
+
echo "📡 Syncing to GTM workspace..."
|
|
1094
|
+
|
|
1095
|
+
# Validate GTM parent exists
|
|
1096
|
+
if [[ ! -d "$GTM_PARENT" ]]; then
|
|
1097
|
+
echo "⚠️ GTM parent not found: $GTM_PARENT"
|
|
1098
|
+
echo "Skipping sync. Session cleaned up locally."
|
|
1099
|
+
else
|
|
1100
|
+
# Validate it's actually a GTM
|
|
1101
|
+
GTM_TYPE=$(jq -r '.type // empty' "$GTM_PARENT/.jfl/config.json" 2>/dev/null)
|
|
1102
|
+
if [[ "$GTM_TYPE" != "gtm" ]]; then
|
|
1103
|
+
echo "⚠️ Parent is not a GTM workspace (type: $GTM_TYPE)"
|
|
1104
|
+
echo "Skipping sync. Session cleaned up locally."
|
|
1105
|
+
else
|
|
1106
|
+
# 1. Sync journal entries
|
|
1107
|
+
mkdir -p "$GTM_PARENT/.jfl/journal"
|
|
1108
|
+
|
|
1109
|
+
SYNCED_COUNT=0
|
|
1110
|
+
for journal in .jfl/journal/*.jsonl; do
|
|
1111
|
+
if [[ -f "$journal" ]]; then
|
|
1112
|
+
BASENAME=$(basename "$journal")
|
|
1113
|
+
TARGET="$GTM_PARENT/.jfl/journal/service-${SERVICE_NAME}-${BASENAME}"
|
|
1114
|
+
|
|
1115
|
+
# Copy journal with preserved permissions
|
|
1116
|
+
cp "$journal" "$TARGET"
|
|
1117
|
+
((SYNCED_COUNT++))
|
|
1118
|
+
echo " ✓ Synced: $BASENAME"
|
|
1119
|
+
fi
|
|
1120
|
+
done
|
|
1121
|
+
|
|
1122
|
+
# 2. Update GTM's last_sync timestamp
|
|
1123
|
+
cd "$GTM_PARENT"
|
|
1124
|
+
TIMESTAMP=$(date -u +"%Y-%m-%dT%H:%M:%SZ")
|
|
1125
|
+
|
|
1126
|
+
# Use jq to update the timestamp (create registered_services if needed)
|
|
1127
|
+
jq --arg name "$SERVICE_NAME" \
|
|
1128
|
+
--arg ts "$TIMESTAMP" \
|
|
1129
|
+
'(.registered_services // []) |= (
|
|
1130
|
+
if any(.name == $name) then
|
|
1131
|
+
map(if .name == $name then .last_sync = $ts else . end)
|
|
1132
|
+
else
|
|
1133
|
+
. + [{"name": $name, "last_sync": $ts}]
|
|
1134
|
+
end
|
|
1135
|
+
)' \
|
|
1136
|
+
.jfl/config.json > .jfl/config.json.tmp && \
|
|
1137
|
+
mv .jfl/config.json.tmp .jfl/config.json
|
|
1138
|
+
|
|
1139
|
+
# 3. Create sync entry in GTM journal
|
|
1140
|
+
GTM_SESSION=$(git branch --show-current 2>/dev/null || echo "main")
|
|
1141
|
+
GTM_JOURNAL=".jfl/journal/${GTM_SESSION}.jsonl"
|
|
1142
|
+
|
|
1143
|
+
cat >> "$GTM_JOURNAL" << EOF
|
|
1144
|
+
{"v":1,"ts":"$TIMESTAMP","session":"$GTM_SESSION","type":"sync","title":"Service sync: $SERVICE_NAME","summary":"Synced $SYNCED_COUNT journal file(s) from $SERVICE_NAME","service":"$SERVICE_NAME","files_synced":$SYNCED_COUNT}
|
|
1145
|
+
EOF
|
|
1146
|
+
|
|
1147
|
+
echo " ✓ Updated GTM registry"
|
|
1148
|
+
echo ""
|
|
1149
|
+
echo "✅ Sync complete ($SYNCED_COUNT journal file(s) → GTM)"
|
|
1150
|
+
fi
|
|
1151
|
+
fi
|
|
1152
|
+
fi
|
|
1153
|
+
|
|
1154
|
+
# ============================================================
|
|
1155
|
+
# STEP 6: Report Results
|
|
1156
|
+
# ============================================================
|
|
1157
|
+
|
|
1158
|
+
echo ""
|
|
1159
|
+
|
|
1160
|
+
if [[ $EXIT_CODE -eq 0 ]]; then
|
|
1161
|
+
# Check if merge happened or if conflicts remained
|
|
1162
|
+
if grep -q "Merge conflicts remain" .jfl/logs/session-cleanup.log; then
|
|
1163
|
+
# Conflicts - branch preserved
|
|
1164
|
+
echo "━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━"
|
|
1165
|
+
echo " Merge Conflicts Detected"
|
|
1166
|
+
echo "━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━"
|
|
1167
|
+
echo ""
|
|
1168
|
+
echo "Conflicts in:"
|
|
1169
|
+
grep "Cannot auto-resolve:" .jfl/logs/session-cleanup.log | sed 's/^.*: / • /'
|
|
1170
|
+
echo ""
|
|
1171
|
+
echo "Your session branch has been preserved: $BRANCH"
|
|
1172
|
+
echo ""
|
|
1173
|
+
echo "To resolve manually:"
|
|
1174
|
+
echo ""
|
|
1175
|
+
echo "1. Review changes:"
|
|
1176
|
+
echo " git log $WORKING_BRANCH..$BRANCH"
|
|
1177
|
+
echo ""
|
|
1178
|
+
echo "2. Merge manually:"
|
|
1179
|
+
echo " git checkout $WORKING_BRANCH"
|
|
1180
|
+
echo " git merge $BRANCH"
|
|
1181
|
+
echo ""
|
|
1182
|
+
echo "3. Resolve conflicts in your editor"
|
|
1183
|
+
echo ""
|
|
1184
|
+
echo "4. Complete merge:"
|
|
1185
|
+
echo " git add ."
|
|
1186
|
+
echo " git commit"
|
|
1187
|
+
echo " git push origin $WORKING_BRANCH"
|
|
1188
|
+
echo ""
|
|
1189
|
+
echo "5. Delete session branch:"
|
|
1190
|
+
echo " git branch -D $BRANCH"
|
|
1191
|
+
echo ""
|
|
1192
|
+
echo "Need help? Ask Claude to guide you through conflict resolution."
|
|
1193
|
+
else
|
|
1194
|
+
# Success - show synopsis
|
|
1195
|
+
echo "✓ Session ended successfully"
|
|
1196
|
+
|
|
1197
|
+
# ============================================================
|
|
1198
|
+
# STEP 7: Show Synopsis
|
|
1199
|
+
# ============================================================
|
|
1200
|
+
|
|
1201
|
+
echo ""
|
|
1202
|
+
echo "━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━"
|
|
1203
|
+
echo " Work Summary (${DURATION_HOURS}h ${DURATION_MINUTES}m session)"
|
|
1204
|
+
echo "━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━"
|
|
1205
|
+
echo ""
|
|
1206
|
+
|
|
1207
|
+
# Round up duration for synopsis
|
|
1208
|
+
SYNOPSIS_HOURS=$((DURATION_HOURS + 1))
|
|
1209
|
+
if [[ $SYNOPSIS_HOURS -lt 1 ]]; then
|
|
1210
|
+
SYNOPSIS_HOURS=1
|
|
1211
|
+
fi
|
|
1212
|
+
|
|
1213
|
+
# Run synopsis command
|
|
1214
|
+
if command -v jfl >/dev/null 2>&1; then
|
|
1215
|
+
jfl synopsis $SYNOPSIS_HOURS 2>/dev/null || echo "Synopsis not available (jfl command not found or synopsis failed)"
|
|
1216
|
+
else
|
|
1217
|
+
echo "Synopsis not available (jfl command not in PATH)"
|
|
1218
|
+
fi
|
|
1219
|
+
|
|
1220
|
+
echo ""
|
|
1221
|
+
echo "✓ All changes merged to $WORKING_BRANCH and pushed to origin"
|
|
1222
|
+
fi
|
|
1223
|
+
else
|
|
1224
|
+
# Generic failure
|
|
1225
|
+
echo "⚠ Session cleanup encountered issues"
|
|
1226
|
+
echo ""
|
|
1227
|
+
echo "Check the log for details:"
|
|
1228
|
+
echo " cat .jfl/logs/session-cleanup.log"
|
|
1229
|
+
echo ""
|
|
1230
|
+
echo "Your session branch is preserved: $BRANCH"
|
|
1231
|
+
echo "No work has been lost."
|
|
1232
|
+
echo ""
|
|
1233
|
+
echo "Common issues:"
|
|
1234
|
+
echo " • Push failed → retry: git push origin $WORKING_BRANCH"
|
|
1235
|
+
echo " • Merge conflicts → see conflict resolution steps above"
|
|
1236
|
+
echo " • Other errors → check log and ask for help"
|
|
1237
|
+
fi
|
|
1238
|
+
|
|
1239
|
+
echo ""
|
|
1240
|
+
```
|
|
1241
|
+
|
|
1242
|
+
---
|
|
1243
|
+
|
|
1244
|
+
## Error Handling
|
|
1245
|
+
|
|
1246
|
+
### Error Pattern 1: Not in a Session
|
|
1247
|
+
|
|
1248
|
+
**Detection:**
|
|
1249
|
+
```bash
|
|
1250
|
+
if [[ ! "$BRANCH" =~ ^session- ]]; then
|
|
1251
|
+
# Not in a session
|
|
1252
|
+
fi
|
|
1253
|
+
```
|
|
1254
|
+
|
|
1255
|
+
**Message:**
|
|
1256
|
+
```
|
|
1257
|
+
⚠ Not in a JFL session
|
|
1258
|
+
|
|
1259
|
+
Current branch: main
|
|
1260
|
+
|
|
1261
|
+
You're already on your working branch.
|
|
1262
|
+
Session branches start with 'session-'.
|
|
1263
|
+
|
|
1264
|
+
No cleanup needed.
|
|
1265
|
+
```
|
|
1266
|
+
|
|
1267
|
+
**Recovery:** None needed, gracefully exit.
|
|
1268
|
+
|
|
1269
|
+
### Error Pattern 2: Cleanup Script Fails
|
|
1270
|
+
|
|
1271
|
+
**Detection:**
|
|
1272
|
+
```bash
|
|
1273
|
+
EXIT_CODE=${PIPESTATUS[0]}
|
|
1274
|
+
if [[ $EXIT_CODE -ne 0 ]]; then
|
|
1275
|
+
# Cleanup failed
|
|
1276
|
+
fi
|
|
1277
|
+
```
|
|
1278
|
+
|
|
1279
|
+
**Message:**
|
|
1280
|
+
```
|
|
1281
|
+
⚠ Session cleanup encountered issues
|
|
1282
|
+
|
|
1283
|
+
Check the log for details:
|
|
1284
|
+
cat .jfl/logs/session-cleanup.log
|
|
1285
|
+
|
|
1286
|
+
Your session branch is preserved: session-goose-20260210-1430-a1b2c3
|
|
1287
|
+
No work has been lost.
|
|
1288
|
+
|
|
1289
|
+
Common issues:
|
|
1290
|
+
• Push failed → retry: git push origin main
|
|
1291
|
+
• Merge conflicts → see conflict resolution guide
|
|
1292
|
+
• Other errors → share log with Claude for help
|
|
1293
|
+
```
|
|
1294
|
+
|
|
1295
|
+
**Recovery:** Guide user to check log, provide common solutions.
|
|
1296
|
+
|
|
1297
|
+
### Error Pattern 3: Push Fails
|
|
1298
|
+
|
|
1299
|
+
**Detection:**
|
|
1300
|
+
```bash
|
|
1301
|
+
if grep -q "Push failed" .jfl/logs/session-cleanup.log; then
|
|
1302
|
+
# Push to remote failed
|
|
1303
|
+
fi
|
|
1304
|
+
```
|
|
1305
|
+
|
|
1306
|
+
**Message:**
|
|
1307
|
+
```
|
|
1308
|
+
✓ Merged to main locally
|
|
1309
|
+
⚠ Push to origin failed
|
|
1310
|
+
|
|
1311
|
+
Your work is merged locally but not on GitHub yet.
|
|
1312
|
+
|
|
1313
|
+
To retry push:
|
|
1314
|
+
git push origin main
|
|
1315
|
+
|
|
1316
|
+
Common causes:
|
|
1317
|
+
• No network connection
|
|
1318
|
+
• Remote has new commits → fetch and merge first
|
|
1319
|
+
• Authentication issue → check git credentials
|
|
1320
|
+
```
|
|
1321
|
+
|
|
1322
|
+
**Recovery:** Provide retry command, list common causes.
|
|
1323
|
+
|
|
1324
|
+
### Error Pattern 4: Synopsis Command Fails
|
|
1325
|
+
|
|
1326
|
+
**Detection:**
|
|
1327
|
+
```bash
|
|
1328
|
+
if ! jfl synopsis $HOURS 2>/dev/null; then
|
|
1329
|
+
# Synopsis failed
|
|
1330
|
+
fi
|
|
1331
|
+
```
|
|
1332
|
+
|
|
1333
|
+
**Handling:**
|
|
1334
|
+
```bash
|
|
1335
|
+
# Don't fail the entire skill if synopsis fails
|
|
1336
|
+
jfl synopsis $HOURS 2>/dev/null || echo "Synopsis not available"
|
|
1337
|
+
```
|
|
1338
|
+
|
|
1339
|
+
**Message:**
|
|
1340
|
+
```
|
|
1341
|
+
Synopsis not available (jfl command failed)
|
|
1342
|
+
|
|
1343
|
+
But your session ended successfully:
|
|
1344
|
+
✓ Merged to main
|
|
1345
|
+
✓ Pushed to origin
|
|
1346
|
+
```
|
|
1347
|
+
|
|
1348
|
+
**Recovery:** Session end still successful, synopsis is nice-to-have.
|
|
1349
|
+
|
|
1350
|
+
### Error Pattern 5: Journal Write Fails
|
|
1351
|
+
|
|
1352
|
+
**Detection:**
|
|
1353
|
+
```bash
|
|
1354
|
+
if ! cat >> "$JOURNAL_FILE" << EOF ...; then
|
|
1355
|
+
# Journal write failed
|
|
1356
|
+
fi
|
|
1357
|
+
```
|
|
1358
|
+
|
|
1359
|
+
**Handling:**
|
|
1360
|
+
```bash
|
|
1361
|
+
# Try to write journal, but don't block session end if it fails
|
|
1362
|
+
if ! cat >> "$JOURNAL_FILE" << EOF
|
|
1363
|
+
...
|
|
1364
|
+
EOF
|
|
1365
|
+
then
|
|
1366
|
+
echo "⚠ Failed to write journal entry (file permissions?)"
|
|
1367
|
+
echo "Continuing with session end anyway..."
|
|
1368
|
+
fi
|
|
1369
|
+
```
|
|
1370
|
+
|
|
1371
|
+
**Message:**
|
|
1372
|
+
```
|
|
1373
|
+
⚠ Failed to write journal entry
|
|
1374
|
+
|
|
1375
|
+
Possible causes:
|
|
1376
|
+
• .jfl/journal/ directory doesn't exist
|
|
1377
|
+
• Permission issue
|
|
1378
|
+
|
|
1379
|
+
Session ending anyway (journal is recommended but not required).
|
|
1380
|
+
```
|
|
1381
|
+
|
|
1382
|
+
**Recovery:** Session ends, user can manually add journal later.
|
|
1383
|
+
|
|
1384
|
+
---
|
|
1385
|
+
|
|
1386
|
+
## Synopsis Integration
|
|
1387
|
+
|
|
1388
|
+
**Always run synopsis after successful session end.** This provides handoff context for future sessions.
|
|
1389
|
+
|
|
1390
|
+
### Calculating Duration
|
|
1391
|
+
|
|
1392
|
+
```bash
|
|
1393
|
+
# Get first commit timestamp in session
|
|
1394
|
+
SESSION_START=$(git log --format=%ct --reverse $WORKING_BRANCH..HEAD 2>/dev/null | head -1)
|
|
1395
|
+
|
|
1396
|
+
if [[ -n "$SESSION_START" ]]; then
|
|
1397
|
+
NOW=$(date +%s)
|
|
1398
|
+
DURATION_SECONDS=$((NOW - SESSION_START))
|
|
1399
|
+
DURATION_HOURS=$((DURATION_SECONDS / 3600))
|
|
1400
|
+
DURATION_MINUTES=$(((DURATION_SECONDS % 3600) / 60))
|
|
1401
|
+
else
|
|
1402
|
+
# No commits yet (shouldn't happen at session end, but handle gracefully)
|
|
1403
|
+
DURATION_HOURS=0
|
|
1404
|
+
DURATION_MINUTES=0
|
|
1405
|
+
fi
|
|
1406
|
+
|
|
1407
|
+
# Round up for synopsis (show at least last hour)
|
|
1408
|
+
SYNOPSIS_HOURS=$((DURATION_HOURS + 1))
|
|
1409
|
+
if [[ $SYNOPSIS_HOURS -lt 1 ]]; then
|
|
1410
|
+
SYNOPSIS_HOURS=1
|
|
1411
|
+
fi
|
|
1412
|
+
```
|
|
1413
|
+
|
|
1414
|
+
### Calling Synopsis
|
|
1415
|
+
|
|
1416
|
+
```bash
|
|
1417
|
+
echo ""
|
|
1418
|
+
echo "━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━"
|
|
1419
|
+
echo " Work Summary (${DURATION_HOURS}h ${DURATION_MINUTES}m session)"
|
|
1420
|
+
echo "━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━"
|
|
1421
|
+
echo ""
|
|
1422
|
+
|
|
1423
|
+
# Call jfl synopsis command
|
|
1424
|
+
if command -v jfl >/dev/null 2>&1; then
|
|
1425
|
+
jfl synopsis $SYNOPSIS_HOURS 2>/dev/null || {
|
|
1426
|
+
echo "Synopsis command failed"
|
|
1427
|
+
echo ""
|
|
1428
|
+
echo "Manual summary:"
|
|
1429
|
+
echo " Commits: $COMMIT_COUNT"
|
|
1430
|
+
echo " Files: $FILES_CHANGED"
|
|
1431
|
+
echo " Lines: +$LINES_ADDED / -$LINES_REMOVED"
|
|
1432
|
+
echo ""
|
|
1433
|
+
git log --oneline $WORKING_BRANCH..HEAD~10 2>/dev/null | head -10
|
|
1434
|
+
}
|
|
1435
|
+
else
|
|
1436
|
+
echo "Synopsis not available (jfl not in PATH)"
|
|
1437
|
+
echo ""
|
|
1438
|
+
echo "Manual summary:"
|
|
1439
|
+
echo " Commits: $COMMIT_COUNT"
|
|
1440
|
+
echo " Files: $FILES_CHANGED"
|
|
1441
|
+
echo " Lines: +$LINES_ADDED / -$LINES_REMOVED"
|
|
1442
|
+
echo ""
|
|
1443
|
+
echo "Recent commits:"
|
|
1444
|
+
git log --oneline $WORKING_BRANCH..HEAD~10 2>/dev/null | head -10
|
|
1445
|
+
fi
|
|
1446
|
+
```
|
|
1447
|
+
|
|
1448
|
+
### Fallback if Synopsis Unavailable
|
|
1449
|
+
|
|
1450
|
+
If `jfl synopsis` fails, show manual summary:
|
|
1451
|
+
|
|
1452
|
+
```
|
|
1453
|
+
Manual summary:
|
|
1454
|
+
Commits: 8
|
|
1455
|
+
Files: 12
|
|
1456
|
+
Lines: +234 / -67
|
|
1457
|
+
|
|
1458
|
+
Recent commits:
|
|
1459
|
+
a1b2c3d feat: add session manager
|
|
1460
|
+
e4f5g6h fix: auth token refresh
|
|
1461
|
+
i7j8k9l docs: update README
|
|
1462
|
+
m1n2o3p style: format code
|
|
1463
|
+
...
|
|
1464
|
+
```
|
|
1465
|
+
|
|
1466
|
+
---
|
|
1467
|
+
|
|
1468
|
+
## Integration Points
|
|
1469
|
+
|
|
1470
|
+
### 1. session-cleanup.sh
|
|
1471
|
+
|
|
1472
|
+
**Location:** `scripts/session/session-cleanup.sh`
|
|
1473
|
+
|
|
1474
|
+
**What it does:**
|
|
1475
|
+
- Stops background processes (auto-commit, context-hub)
|
|
1476
|
+
- Auto-commits uncommitted changes
|
|
1477
|
+
- Detects worktree vs direct mode
|
|
1478
|
+
- Pre-merge cleanup (removes session metadata)
|
|
1479
|
+
- Merges session branch to working branch with `-X ours`
|
|
1480
|
+
- Auto-resolves common conflicts (.jfl files, submodules)
|
|
1481
|
+
- Pushes to remote
|
|
1482
|
+
- Removes worktrees and deletes session branches
|
|
1483
|
+
- Notifies jfl-services API
|
|
1484
|
+
|
|
1485
|
+
**How skill uses it:**
|
|
1486
|
+
- Calls it after pre-flight checks and user prompts
|
|
1487
|
+
- Captures output to show key steps
|
|
1488
|
+
- Parses exit code and output for error handling
|
|
1489
|
+
- Logs full output to `.jfl/logs/session-cleanup.log`
|
|
1490
|
+
|
|
1491
|
+
### 2. Journal System
|
|
1492
|
+
|
|
1493
|
+
**Location:** `.jfl/journal/*.jsonl`
|
|
1494
|
+
|
|
1495
|
+
**Format:** One JSON object per line (JSONL)
|
|
1496
|
+
|
|
1497
|
+
**Example entry:**
|
|
1498
|
+
```json
|
|
1499
|
+
{
|
|
1500
|
+
"v": 1,
|
|
1501
|
+
"ts": "2026-02-10T14:30:00.000Z",
|
|
1502
|
+
"session": "session-goose-20260210-1430-a1b2c3",
|
|
1503
|
+
"type": "session-end",
|
|
1504
|
+
"status": "complete",
|
|
1505
|
+
"title": "Session management enhancements",
|
|
1506
|
+
"summary": "Enhanced /end skill with comprehensive UX",
|
|
1507
|
+
"files": ["SKILL.md", "session-cleanup.sh"]
|
|
1508
|
+
}
|
|
1509
|
+
```
|
|
1510
|
+
|
|
1511
|
+
**How skill uses it:**
|
|
1512
|
+
- Checks if file exists: `[[ -s ".jfl/journal/${BRANCH}.jsonl" ]]`
|
|
1513
|
+
- Counts entries: `wc -l < "$JOURNAL_FILE"`
|
|
1514
|
+
- Warns if missing and offers to create
|
|
1515
|
+
- Creates minimal entry if user agrees
|
|
1516
|
+
|
|
1517
|
+
### 3. Synopsis Command
|
|
1518
|
+
|
|
1519
|
+
**Location:** `src/commands/synopsis.ts` (TypeScript)
|
|
1520
|
+
|
|
1521
|
+
**Usage:** `jfl synopsis [hours] [author]`
|
|
1522
|
+
|
|
1523
|
+
**What it returns:**
|
|
1524
|
+
- Journal entries from all sessions/worktrees
|
|
1525
|
+
- Git commits from all branches
|
|
1526
|
+
- File headers (@purpose, @spec tags)
|
|
1527
|
+
- Time audit with category breakdown
|
|
1528
|
+
- Health checks and next steps
|
|
1529
|
+
|
|
1530
|
+
**How skill uses it:**
|
|
1531
|
+
- Called after successful cleanup
|
|
1532
|
+
- Duration calculated from session start time
|
|
1533
|
+
- Rounds up to next hour (e.g., 2h 15m → 3 hours)
|
|
1534
|
+
- Fallback to manual summary if command fails
|
|
1535
|
+
|
|
1536
|
+
### 4. Session State Files
|
|
1537
|
+
|
|
1538
|
+
**Location:** `.jfl/`
|
|
1539
|
+
|
|
1540
|
+
| File | Purpose |
|
|
1541
|
+
|------|---------|
|
|
1542
|
+
| `current-session-branch.txt` | Current session branch name |
|
|
1543
|
+
| `current-worktree.txt` | Worktree path or "direct" |
|
|
1544
|
+
| `config.json` | Project config (working_branch, etc.) |
|
|
1545
|
+
| `logs/session-cleanup.log` | Last cleanup output |
|
|
1546
|
+
|
|
1547
|
+
**How skill uses it:**
|
|
1548
|
+
- Reads to detect mode and branch info
|
|
1549
|
+
- Used by pre-flight check
|
|
1550
|
+
- cleanup.sh removes metadata files before merge
|
|
1551
|
+
|
|
1552
|
+
### 5. Working Branch Config
|
|
1553
|
+
|
|
1554
|
+
**Location:** `.jfl/config.json`
|
|
1555
|
+
|
|
1556
|
+
**Format:**
|
|
1557
|
+
```json
|
|
1558
|
+
{
|
|
1559
|
+
"name": "project-name",
|
|
1560
|
+
"working_branch": "develop"
|
|
1561
|
+
}
|
|
1562
|
+
```
|
|
1563
|
+
|
|
1564
|
+
**How skill uses it:**
|
|
1565
|
+
- Reads working_branch (defaults to "main")
|
|
1566
|
+
- Shows in summary: "Merging to: develop"
|
|
1567
|
+
- Passed to session-cleanup.sh
|
|
1568
|
+
|
|
1569
|
+
---
|
|
1570
|
+
|
|
1571
|
+
## Dependencies & Testing
|
|
1572
|
+
|
|
1573
|
+
### Required Commands
|
|
1574
|
+
|
|
1575
|
+
The skill requires these commands to be available:
|
|
1576
|
+
|
|
1577
|
+
| Command | Purpose | Fallback if Missing |
|
|
1578
|
+
|---------|---------|-------------------|
|
|
1579
|
+
| `git` | Version control | **REQUIRED** - skill cannot run |
|
|
1580
|
+
| `jq` | JSON parsing | Use sed/awk for simple parsing |
|
|
1581
|
+
| `jfl` | Synopsis command | Show manual summary |
|
|
1582
|
+
| `bash` | Shell execution | **REQUIRED** - skill runs in bash |
|
|
1583
|
+
|
|
1584
|
+
**Checking dependencies:**
|
|
1585
|
+
|
|
1586
|
+
```bash
|
|
1587
|
+
# Check git
|
|
1588
|
+
if ! command -v git >/dev/null 2>&1; then
|
|
1589
|
+
echo "Error: git is required"
|
|
1590
|
+
exit 1
|
|
1591
|
+
fi
|
|
1592
|
+
|
|
1593
|
+
# Check jq (optional but recommended)
|
|
1594
|
+
if ! command -v jq >/dev/null 2>&1; then
|
|
1595
|
+
echo "Warning: jq not found, using basic parsing"
|
|
1596
|
+
USE_JQ=false
|
|
1597
|
+
else
|
|
1598
|
+
USE_JQ=true
|
|
1599
|
+
fi
|
|
1600
|
+
|
|
1601
|
+
# Check jfl (optional)
|
|
1602
|
+
if ! command -v jfl >/dev/null 2>&1; then
|
|
1603
|
+
echo "Warning: jfl not found, synopsis unavailable"
|
|
1604
|
+
USE_SYNOPSIS=false
|
|
1605
|
+
else
|
|
1606
|
+
USE_SYNOPSIS=true
|
|
1607
|
+
fi
|
|
1608
|
+
```
|
|
1609
|
+
|
|
1610
|
+
### Required Files
|
|
1611
|
+
|
|
1612
|
+
| File | Purpose | What if Missing |
|
|
1613
|
+
|------|---------|----------------|
|
|
1614
|
+
| `scripts/session/session-cleanup.sh` | Core cleanup | **CRITICAL** - skill fails |
|
|
1615
|
+
| `.jfl/config.json` | Working branch | Use "main" as default |
|
|
1616
|
+
| `.jfl/current-session-branch.txt` | Session info | Read from git |
|
|
1617
|
+
|
|
1618
|
+
### Testing Checklist
|
|
1619
|
+
|
|
1620
|
+
Test these scenarios to verify the skill works correctly:
|
|
1621
|
+
|
|
1622
|
+
#### 1. Happy Path (Clean State)
|
|
1623
|
+
- [ ] No uncommitted changes
|
|
1624
|
+
- [ ] Journal entry exists
|
|
1625
|
+
- [ ] Merges cleanly to working branch
|
|
1626
|
+
- [ ] Pushes to origin successfully
|
|
1627
|
+
- [ ] Shows synopsis
|
|
1628
|
+
- [ ] Success message displayed
|
|
1629
|
+
|
|
1630
|
+
#### 2. Uncommitted Changes → Auto-commit
|
|
1631
|
+
- [ ] Make changes without committing
|
|
1632
|
+
- [ ] Choose "auto-commit" option
|
|
1633
|
+
- [ ] Changes committed automatically
|
|
1634
|
+
- [ ] Merge succeeds
|
|
1635
|
+
- [ ] Synopsis shows all work
|
|
1636
|
+
|
|
1637
|
+
#### 3. Uncommitted Changes → Show Diff
|
|
1638
|
+
- [ ] Make changes without committing
|
|
1639
|
+
- [ ] Choose "show diff" option
|
|
1640
|
+
- [ ] Diff displayed correctly
|
|
1641
|
+
- [ ] Prompted for next action
|
|
1642
|
+
- [ ] Can commit or cancel
|
|
1643
|
+
|
|
1644
|
+
#### 4. Uncommitted Changes → Discard
|
|
1645
|
+
- [ ] Make changes without committing
|
|
1646
|
+
- [ ] Choose "discard" option
|
|
1647
|
+
- [ ] Warning shown
|
|
1648
|
+
- [ ] Confirmation required
|
|
1649
|
+
- [ ] Changes discarded (verified)
|
|
1650
|
+
- [ ] Merge proceeds
|
|
1651
|
+
|
|
1652
|
+
#### 5. Uncommitted Changes → Cancel
|
|
1653
|
+
- [ ] Make changes without committing
|
|
1654
|
+
- [ ] Choose "cancel" option
|
|
1655
|
+
- [ ] Session stays active
|
|
1656
|
+
- [ ] No cleanup performed
|
|
1657
|
+
- [ ] Can continue working
|
|
1658
|
+
|
|
1659
|
+
#### 6. No Journal → Write Entry
|
|
1660
|
+
- [ ] End session without journal
|
|
1661
|
+
- [ ] Prompted to write entry
|
|
1662
|
+
- [ ] Choose "write entry"
|
|
1663
|
+
- [ ] Provide title
|
|
1664
|
+
- [ ] Entry created (verified in .jfl/journal/)
|
|
1665
|
+
- [ ] Merge proceeds
|
|
1666
|
+
|
|
1667
|
+
#### 7. No Journal → Skip
|
|
1668
|
+
- [ ] End session without journal
|
|
1669
|
+
- [ ] Prompted to write entry
|
|
1670
|
+
- [ ] Choose "skip"
|
|
1671
|
+
- [ ] Warning shown
|
|
1672
|
+
- [ ] Merge proceeds anyway
|
|
1673
|
+
|
|
1674
|
+
#### 8. Worktree Mode
|
|
1675
|
+
- [ ] Start second concurrent session (creates worktree)
|
|
1676
|
+
- [ ] Make commits in worktree
|
|
1677
|
+
- [ ] End worktree session
|
|
1678
|
+
- [ ] Worktree removed (verified)
|
|
1679
|
+
- [ ] Branch deleted
|
|
1680
|
+
- [ ] Main repo untouched
|
|
1681
|
+
|
|
1682
|
+
#### 9. Direct Mode
|
|
1683
|
+
- [ ] Start single session (no worktree)
|
|
1684
|
+
- [ ] Make commits
|
|
1685
|
+
- [ ] End session
|
|
1686
|
+
- [ ] Merges on same branch
|
|
1687
|
+
- [ ] No worktree cleanup needed
|
|
1688
|
+
|
|
1689
|
+
#### 10. Merge Conflicts
|
|
1690
|
+
- [ ] Create intentional conflict (modify same line in session and working branch)
|
|
1691
|
+
- [ ] End session
|
|
1692
|
+
- [ ] Conflicts detected
|
|
1693
|
+
- [ ] Branch preserved (not deleted)
|
|
1694
|
+
- [ ] Clear resolution guidance shown
|
|
1695
|
+
- [ ] Can resolve manually
|
|
1696
|
+
|
|
1697
|
+
#### 11. Synopsis Display
|
|
1698
|
+
- [ ] Work for 10+ minutes
|
|
1699
|
+
- [ ] Make several commits
|
|
1700
|
+
- [ ] Write journal entries
|
|
1701
|
+
- [ ] End session
|
|
1702
|
+
- [ ] Synopsis shows commits, files, journal entries
|
|
1703
|
+
- [ ] Time breakdown displayed
|
|
1704
|
+
|
|
1705
|
+
#### 12. Not in Session
|
|
1706
|
+
- [ ] Checkout main branch manually
|
|
1707
|
+
- [ ] Try to invoke /end
|
|
1708
|
+
- [ ] Graceful message shown
|
|
1709
|
+
- [ ] Explains not in session
|
|
1710
|
+
- [ ] No errors thrown
|
|
1711
|
+
|
|
1712
|
+
### Success Criteria
|
|
1713
|
+
|
|
1714
|
+
The skill is working correctly if:
|
|
1715
|
+
|
|
1716
|
+
- ✅ All 12 test scenarios pass
|
|
1717
|
+
- ✅ User always knows what's happening at each step
|
|
1718
|
+
- ✅ No work is lost in any scenario
|
|
1719
|
+
- ✅ Error messages provide clear recovery steps
|
|
1720
|
+
- ✅ Synopsis integrates cleanly after successful cleanup
|
|
1721
|
+
- ✅ Session ends in < 30 seconds (without conflicts)
|
|
1722
|
+
- ✅ Journal compliance encouraged without being blocking
|
|
1723
|
+
|
|
1724
|
+
---
|
|
1725
|
+
|
|
1726
|
+
## Notes for Claude
|
|
1727
|
+
|
|
1728
|
+
### When to Invoke This Skill
|
|
1729
|
+
|
|
1730
|
+
**Immediate invocation (HIGH CONFIDENCE):**
|
|
1731
|
+
- User says "done", "that's it", "I'm finished", "end session", "/end"
|
|
1732
|
+
- User says "wrap up", "all set", "good for now" in concluding context
|
|
1733
|
+
|
|
1734
|
+
**Check context first:**
|
|
1735
|
+
- User says "thanks", "looks good", "perfect" → Is this end of session or just task?
|
|
1736
|
+
- If unclear, ask: "Ready to end the session, or keep working?"
|
|
1737
|
+
|
|
1738
|
+
### What You Should Do
|
|
1739
|
+
|
|
1740
|
+
When you invoke this skill:
|
|
1741
|
+
|
|
1742
|
+
1. **Don't run commands yourself** - The skill script handles everything
|
|
1743
|
+
2. **Present prompts to user** - Use AskUserQuestion for uncommitted/journal decisions
|
|
1744
|
+
3. **Parse script output** - Show key steps, not full git output
|
|
1745
|
+
4. **Guide on errors** - If conflicts, walk user through resolution
|
|
1746
|
+
5. **Always show synopsis** - User chose "always show" preference
|
|
1747
|
+
|
|
1748
|
+
### What You Should NOT Do
|
|
1749
|
+
|
|
1750
|
+
- ❌ Don't manually run `git commit`, `git merge`, etc. - Let the script do it
|
|
1751
|
+
- ❌ Don't skip uncommitted change check - User must decide what to do
|
|
1752
|
+
- ❌ Don't force journal entries - Encourage but allow skip
|
|
1753
|
+
- ❌ Don't hide errors - Parse and explain clearly
|
|
1754
|
+
|
|
1755
|
+
### User Preferences (From Plan)
|
|
1756
|
+
|
|
1757
|
+
| Setting | User Choice | How to Handle |
|
|
1758
|
+
|---------|-------------|---------------|
|
|
1759
|
+
| Synopsis | Always show | Run synopsis after every session end |
|
|
1760
|
+
| Journal | Warn if missing | Prompt to write or skip, don't block |
|
|
1761
|
+
| Verbosity | Balanced | Show summary + key steps, not full output |
|
|
1762
|
+
| Auto-commit | Prompt | Ask what to do with uncommitted changes |
|
|
1763
|
+
|
|
1764
|
+
### Common User Questions
|
|
1765
|
+
|
|
1766
|
+
**"Did my work get saved?"**
|
|
1767
|
+
→ Yes! Show what merged: "✓ 8 commits, 12 files merged to main and pushed"
|
|
1768
|
+
|
|
1769
|
+
**"What if I made a mistake?"**
|
|
1770
|
+
→ On main, you can: `git revert <commit>` or `git reset --hard HEAD~1` (before push)
|
|
1771
|
+
|
|
1772
|
+
**"Can I undo the session end?"**
|
|
1773
|
+
→ If merge happened: No, but commits are on main, can revert. If conflicts: Yes, branch preserved.
|
|
1774
|
+
|
|
1775
|
+
**"Where did my session branch go?"**
|
|
1776
|
+
→ Deleted after successful merge (work is on main now). If conflicts: Preserved for manual resolution.
|
|
1777
|
+
|
|
1778
|
+
---
|
|
1779
|
+
|
|
1780
|
+
## Summary
|
|
1781
|
+
|
|
1782
|
+
This skill provides comprehensive UX orchestration for session ending:
|
|
1783
|
+
|
|
1784
|
+
1. ✅ **Pre-flight checks** - Gather complete state (mode, branches, uncommitted, journal, work stats)
|
|
1785
|
+
2. ✅ **User prompts** - Handle uncommitted changes and missing journal gracefully
|
|
1786
|
+
3. ✅ **Execute cleanup** - Call session-cleanup.sh with clear progress display
|
|
1787
|
+
4. ✅ **Error handling** - Guide user through conflicts and failures
|
|
1788
|
+
5. ✅ **Synopsis** - Always show work summary for handoff context
|
|
1789
|
+
|
|
1790
|
+
**Key principle:** Wrap solid infrastructure (session-cleanup.sh) with excellent UX.
|