botmux 3.16.0 → 3.17.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/dist/.runtime-build-id +1 -1
- package/dist/adapters/backend/riff-backend.d.ts +84 -1
- package/dist/adapters/backend/riff-backend.d.ts.map +1 -1
- package/dist/adapters/backend/riff-backend.js +202 -19
- package/dist/adapters/backend/riff-backend.js.map +1 -1
- package/dist/adapters/backend/sandbox.d.ts +8 -0
- package/dist/adapters/backend/sandbox.d.ts.map +1 -1
- package/dist/adapters/backend/sandbox.js +15 -0
- package/dist/adapters/backend/sandbox.js.map +1 -1
- package/dist/adapters/backend/tmux-backend.d.ts +61 -7
- package/dist/adapters/backend/tmux-backend.d.ts.map +1 -1
- package/dist/adapters/backend/tmux-backend.js +80 -9
- package/dist/adapters/backend/tmux-backend.js.map +1 -1
- package/dist/adapters/backend/tmux-pipe-backend.d.ts +62 -4
- package/dist/adapters/backend/tmux-pipe-backend.d.ts.map +1 -1
- package/dist/adapters/backend/tmux-pipe-backend.js +240 -27
- package/dist/adapters/backend/tmux-pipe-backend.js.map +1 -1
- package/dist/adapters/cli/claude-code.d.ts.map +1 -1
- package/dist/adapters/cli/claude-code.js +4 -2
- package/dist/adapters/cli/claude-code.js.map +1 -1
- package/dist/adapters/cli/coco.d.ts.map +1 -1
- package/dist/adapters/cli/coco.js +27 -0
- package/dist/adapters/cli/coco.js.map +1 -1
- package/dist/adapters/cli/codex-app.d.ts.map +1 -1
- package/dist/adapters/cli/codex-app.js +28 -0
- package/dist/adapters/cli/codex-app.js.map +1 -1
- package/dist/adapters/cli/codex.d.ts.map +1 -1
- package/dist/adapters/cli/codex.js +51 -23
- package/dist/adapters/cli/codex.js.map +1 -1
- package/dist/adapters/cli/dsh-tui.d.ts +24 -0
- package/dist/adapters/cli/dsh-tui.d.ts.map +1 -0
- package/dist/adapters/cli/dsh-tui.js +99 -0
- package/dist/adapters/cli/dsh-tui.js.map +1 -0
- package/dist/adapters/cli/dsh.d.ts.map +1 -1
- package/dist/adapters/cli/dsh.js +15 -9
- package/dist/adapters/cli/dsh.js.map +1 -1
- package/dist/adapters/cli/fs-policy.d.ts +98 -1
- package/dist/adapters/cli/fs-policy.d.ts.map +1 -1
- package/dist/adapters/cli/fs-policy.js +182 -7
- package/dist/adapters/cli/fs-policy.js.map +1 -1
- package/dist/adapters/cli/grok.js +16 -18
- package/dist/adapters/cli/grok.js.map +1 -1
- package/dist/adapters/cli/model-catalog-json.d.ts +17 -0
- package/dist/adapters/cli/model-catalog-json.d.ts.map +1 -0
- package/dist/adapters/cli/model-catalog-json.js +43 -0
- package/dist/adapters/cli/model-catalog-json.js.map +1 -0
- package/dist/adapters/cli/oh-my-pi.d.ts +2 -0
- package/dist/adapters/cli/oh-my-pi.d.ts.map +1 -1
- package/dist/adapters/cli/oh-my-pi.js +45 -13
- package/dist/adapters/cli/oh-my-pi.js.map +1 -1
- package/dist/adapters/cli/opencode.js +1 -1
- package/dist/adapters/cli/opencode.js.map +1 -1
- package/dist/adapters/cli/registry.d.ts +2 -1
- package/dist/adapters/cli/registry.d.ts.map +1 -1
- package/dist/adapters/cli/registry.js +6 -1
- package/dist/adapters/cli/registry.js.map +1 -1
- package/dist/adapters/cli/relay.d.ts.map +1 -1
- package/dist/adapters/cli/relay.js +7 -0
- package/dist/adapters/cli/relay.js.map +1 -1
- package/dist/adapters/cli/seed.d.ts.map +1 -1
- package/dist/adapters/cli/seed.js +6 -0
- package/dist/adapters/cli/seed.js.map +1 -1
- package/dist/adapters/cli/shared-hints.d.ts.map +1 -1
- package/dist/adapters/cli/shared-hints.js +20 -14
- package/dist/adapters/cli/shared-hints.js.map +1 -1
- package/dist/adapters/cli/traex.d.ts +4 -0
- package/dist/adapters/cli/traex.d.ts.map +1 -1
- package/dist/adapters/cli/traex.js +153 -0
- package/dist/adapters/cli/traex.js.map +1 -1
- package/dist/adapters/cli/types.d.ts +42 -1
- package/dist/adapters/cli/types.d.ts.map +1 -1
- package/dist/autostart.d.ts +6 -0
- package/dist/autostart.d.ts.map +1 -1
- package/dist/autostart.js +21 -1
- package/dist/autostart.js.map +1 -1
- package/dist/bot-registry.d.ts +27 -0
- package/dist/bot-registry.d.ts.map +1 -1
- package/dist/bot-registry.js +62 -2
- package/dist/bot-registry.js.map +1 -1
- package/dist/cli/vc-agent.d.ts.map +1 -1
- package/dist/cli/vc-agent.js +21 -3
- package/dist/cli/vc-agent.js.map +1 -1
- package/dist/cli.d.ts.map +1 -1
- package/dist/cli.js +92 -1
- package/dist/cli.js.map +1 -1
- package/dist/codex-app-runner.js +28 -0
- package/dist/codex-app-runner.js.map +1 -1
- package/dist/core/bot-steer-directive.d.ts +25 -0
- package/dist/core/bot-steer-directive.d.ts.map +1 -0
- package/dist/core/bot-steer-directive.js +47 -0
- package/dist/core/bot-steer-directive.js.map +1 -0
- package/dist/core/command-handler.d.ts.map +1 -1
- package/dist/core/command-handler.js +102 -18
- package/dist/core/command-handler.js.map +1 -1
- package/dist/core/dashboard-ipc-server.d.ts.map +1 -1
- package/dist/core/dashboard-ipc-server.js +53 -13
- package/dist/core/dashboard-ipc-server.js.map +1 -1
- package/dist/core/dashboard-rows.d.ts +3 -0
- package/dist/core/dashboard-rows.d.ts.map +1 -1
- package/dist/core/dashboard-rows.js +26 -5
- package/dist/core/dashboard-rows.js.map +1 -1
- package/dist/core/dashboard-url.d.ts +10 -1
- package/dist/core/dashboard-url.d.ts.map +1 -1
- package/dist/core/dashboard-url.js +12 -2
- package/dist/core/dashboard-url.js.map +1 -1
- package/dist/core/dispatch.d.ts.map +1 -1
- package/dist/core/dispatch.js +5 -4
- package/dist/core/dispatch.js.map +1 -1
- package/dist/core/existing-app-server.d.ts +22 -0
- package/dist/core/existing-app-server.d.ts.map +1 -0
- package/dist/core/existing-app-server.js +85 -0
- package/dist/core/existing-app-server.js.map +1 -0
- package/dist/core/native-topic-id.d.ts +9 -0
- package/dist/core/native-topic-id.d.ts.map +1 -0
- package/dist/core/native-topic-id.js +14 -0
- package/dist/core/native-topic-id.js.map +1 -0
- package/dist/core/per-bot-env.d.ts.map +1 -1
- package/dist/core/per-bot-env.js +10 -0
- package/dist/core/per-bot-env.js.map +1 -1
- package/dist/core/plugins/mcp/gateway.d.ts +27 -3
- package/dist/core/plugins/mcp/gateway.d.ts.map +1 -1
- package/dist/core/plugins/mcp/gateway.js +272 -26
- package/dist/core/plugins/mcp/gateway.js.map +1 -1
- package/dist/core/plugins/mcp/host.d.ts +18 -0
- package/dist/core/plugins/mcp/host.d.ts.map +1 -1
- package/dist/core/plugins/mcp/host.js +80 -16
- package/dist/core/plugins/mcp/host.js.map +1 -1
- package/dist/core/plugins/mcp/launch-record.d.ts +14 -0
- package/dist/core/plugins/mcp/launch-record.d.ts.map +1 -0
- package/dist/core/plugins/mcp/launch-record.js +63 -0
- package/dist/core/plugins/mcp/launch-record.js.map +1 -0
- package/dist/core/session-activity.d.ts +11 -0
- package/dist/core/session-activity.d.ts.map +1 -1
- package/dist/core/session-activity.js +23 -0
- package/dist/core/session-activity.js.map +1 -1
- package/dist/core/session-group-birth.d.ts.map +1 -1
- package/dist/core/session-group-birth.js +23 -8
- package/dist/core/session-group-birth.js.map +1 -1
- package/dist/core/session-manager.d.ts +1 -4
- package/dist/core/session-manager.d.ts.map +1 -1
- package/dist/core/session-manager.js +16 -20
- package/dist/core/session-manager.js.map +1 -1
- package/dist/core/shared-adopt.d.ts +20 -0
- package/dist/core/shared-adopt.d.ts.map +1 -0
- package/dist/core/shared-adopt.js +26 -0
- package/dist/core/shared-adopt.js.map +1 -0
- package/dist/core/skills/customize-command.d.ts +7 -0
- package/dist/core/skills/customize-command.d.ts.map +1 -0
- package/dist/core/skills/customize-command.js +303 -0
- package/dist/core/skills/customize-command.js.map +1 -0
- package/dist/core/terminal-write-auth.d.ts +15 -0
- package/dist/core/terminal-write-auth.d.ts.map +1 -1
- package/dist/core/terminal-write-auth.js +15 -0
- package/dist/core/terminal-write-auth.js.map +1 -1
- package/dist/core/terminal-write-frame.d.ts +30 -0
- package/dist/core/terminal-write-frame.d.ts.map +1 -0
- package/dist/core/terminal-write-frame.js +44 -0
- package/dist/core/terminal-write-frame.js.map +1 -0
- package/dist/core/types.d.ts +14 -4
- package/dist/core/types.d.ts.map +1 -1
- package/dist/core/types.js +6 -8
- package/dist/core/types.js.map +1 -1
- package/dist/core/worker-pool.d.ts +31 -6
- package/dist/core/worker-pool.d.ts.map +1 -1
- package/dist/core/worker-pool.js +444 -102
- package/dist/core/worker-pool.js.map +1 -1
- package/dist/core/worker-startup-retry.d.ts +52 -0
- package/dist/core/worker-startup-retry.d.ts.map +1 -0
- package/dist/core/worker-startup-retry.js +68 -0
- package/dist/core/worker-startup-retry.js.map +1 -0
- package/dist/daemon.d.ts +9 -8
- package/dist/daemon.d.ts.map +1 -1
- package/dist/daemon.js +467 -171
- package/dist/daemon.js.map +1 -1
- package/dist/dashboard/autostart-api.d.ts +26 -0
- package/dist/dashboard/autostart-api.d.ts.map +1 -0
- package/dist/dashboard/autostart-api.js +88 -0
- package/dist/dashboard/autostart-api.js.map +1 -0
- package/dist/dashboard/bot-payload.d.ts +5 -0
- package/dist/dashboard/bot-payload.d.ts.map +1 -1
- package/dist/dashboard/bot-payload.js +2 -0
- package/dist/dashboard/bot-payload.js.map +1 -1
- package/dist/dashboard/control-csrf.d.ts +29 -1
- package/dist/dashboard/control-csrf.d.ts.map +1 -1
- package/dist/dashboard/control-csrf.js +49 -10
- package/dist/dashboard/control-csrf.js.map +1 -1
- package/dist/dashboard/customization-api.d.ts +23 -0
- package/dist/dashboard/customization-api.d.ts.map +1 -0
- package/dist/dashboard/customization-api.js +198 -0
- package/dist/dashboard/customization-api.js.map +1 -0
- package/dist/dashboard/debug-terminal.d.ts +13 -1
- package/dist/dashboard/debug-terminal.d.ts.map +1 -1
- package/dist/dashboard/debug-terminal.js +18 -4
- package/dist/dashboard/debug-terminal.js.map +1 -1
- package/dist/dashboard/settings-write-applier.d.ts +0 -23
- package/dist/dashboard/settings-write-applier.d.ts.map +1 -1
- package/dist/dashboard/settings-write-applier.js +7 -28
- package/dist/dashboard/settings-write-applier.js.map +1 -1
- package/dist/dashboard/terminal-control-route.d.ts +32 -0
- package/dist/dashboard/terminal-control-route.d.ts.map +1 -0
- package/dist/dashboard/terminal-control-route.js +70 -0
- package/dist/dashboard/terminal-control-route.js.map +1 -0
- package/dist/dashboard/terminal-control.d.ts +64 -13
- package/dist/dashboard/terminal-control.d.ts.map +1 -1
- package/dist/dashboard/terminal-control.js +77 -14
- package/dist/dashboard/terminal-control.js.map +1 -1
- package/dist/dashboard/terminal-front-proxy.d.ts.map +1 -1
- package/dist/dashboard/terminal-front-proxy.js +41 -9
- package/dist/dashboard/terminal-front-proxy.js.map +1 -1
- package/dist/dashboard/vc-consumer-profiles-api.d.ts +69 -18
- package/dist/dashboard/vc-consumer-profiles-api.d.ts.map +1 -1
- package/dist/dashboard/vc-consumer-profiles-api.js +149 -29
- package/dist/dashboard/vc-consumer-profiles-api.js.map +1 -1
- package/dist/dashboard/web/agent-workbench-api.d.ts +34 -2
- package/dist/dashboard/web/agent-workbench-api.d.ts.map +1 -1
- package/dist/dashboard/web/agent-workbench-api.js +39 -4
- package/dist/dashboard/web/agent-workbench-api.js.map +1 -1
- package/dist/dashboard/web/agent-workbench-appearance.d.ts +6 -3
- package/dist/dashboard/web/agent-workbench-appearance.d.ts.map +1 -1
- package/dist/dashboard/web/agent-workbench-appearance.js +7 -4
- package/dist/dashboard/web/agent-workbench-appearance.js.map +1 -1
- package/dist/dashboard/web/agent-workbench-model.d.ts +2 -0
- package/dist/dashboard/web/agent-workbench-model.d.ts.map +1 -1
- package/dist/dashboard/web/agent-workbench-model.js.map +1 -1
- package/dist/dashboard/web/agent-workbench-page.js +2 -2
- package/dist/dashboard/web/agent-workbench-page.js.map +1 -1
- package/dist/dashboard/web/agent-workbench-panes.d.ts +59 -4
- package/dist/dashboard/web/agent-workbench-panes.d.ts.map +1 -1
- package/dist/dashboard/web/agent-workbench-panes.js +493 -85
- package/dist/dashboard/web/agent-workbench-panes.js.map +1 -1
- package/dist/dashboard/web/agent-workbench-session-list.d.ts +11 -7
- package/dist/dashboard/web/agent-workbench-session-list.d.ts.map +1 -1
- package/dist/dashboard/web/agent-workbench-session-list.js +24 -31
- package/dist/dashboard/web/agent-workbench-session-list.js.map +1 -1
- package/dist/dashboard/web/agent-workbench-terminal-control.d.ts +198 -0
- package/dist/dashboard/web/agent-workbench-terminal-control.d.ts.map +1 -0
- package/dist/dashboard/web/agent-workbench-terminal-control.js +292 -0
- package/dist/dashboard/web/agent-workbench-terminal-control.js.map +1 -0
- package/dist/dashboard/web/agent-workbench-view.d.ts +3 -2
- package/dist/dashboard/web/agent-workbench-view.d.ts.map +1 -1
- package/dist/dashboard/web/agent-workbench-view.js +69 -50
- package/dist/dashboard/web/agent-workbench-view.js.map +1 -1
- package/dist/dashboard/web/app.d.ts.map +1 -1
- package/dist/dashboard/web/app.js +58 -7
- package/dist/dashboard/web/app.js.map +1 -1
- package/dist/dashboard/web/bot-defaults-page.d.ts +24 -0
- package/dist/dashboard/web/bot-defaults-page.d.ts.map +1 -1
- package/dist/dashboard/web/bot-defaults-page.js +191 -16
- package/dist/dashboard/web/bot-defaults-page.js.map +1 -1
- package/dist/dashboard/web/bot-defaults.d.ts +17 -0
- package/dist/dashboard/web/bot-defaults.d.ts.map +1 -1
- package/dist/dashboard/web/bot-defaults.js +51 -2
- package/dist/dashboard/web/bot-defaults.js.map +1 -1
- package/dist/dashboard/web/bot-onboarding.d.ts.map +1 -1
- package/dist/dashboard/web/bot-onboarding.js +32 -8
- package/dist/dashboard/web/bot-onboarding.js.map +1 -1
- package/dist/dashboard/web/confirm-modal.d.ts +35 -0
- package/dist/dashboard/web/confirm-modal.d.ts.map +1 -0
- package/dist/dashboard/web/confirm-modal.js +111 -0
- package/dist/dashboard/web/confirm-modal.js.map +1 -0
- package/dist/dashboard/web/connectors-page.d.ts.map +1 -1
- package/dist/dashboard/web/connectors-page.js +2 -1
- package/dist/dashboard/web/connectors-page.js.map +1 -1
- package/dist/dashboard/web/customization-page.d.ts +3 -0
- package/dist/dashboard/web/customization-page.d.ts.map +1 -0
- package/dist/dashboard/web/customization-page.js +315 -0
- package/dist/dashboard/web/customization-page.js.map +1 -0
- package/dist/dashboard/web/dashboard-routes.d.ts.map +1 -1
- package/dist/dashboard/web/dashboard-routes.js +1 -0
- package/dist/dashboard/web/dashboard-routes.js.map +1 -1
- package/dist/dashboard/web/groups-page.d.ts.map +1 -1
- package/dist/dashboard/web/groups-page.js +11 -9
- package/dist/dashboard/web/groups-page.js.map +1 -1
- package/dist/dashboard/web/i18n.d.ts.map +1 -1
- package/dist/dashboard/web/i18n.js +226 -42
- package/dist/dashboard/web/i18n.js.map +1 -1
- package/dist/dashboard/web/monitor-room.d.ts.map +1 -1
- package/dist/dashboard/web/monitor-room.js +3 -2
- package/dist/dashboard/web/monitor-room.js.map +1 -1
- package/dist/dashboard/web/overview-page.d.ts.map +1 -1
- package/dist/dashboard/web/overview-page.js +98 -63
- package/dist/dashboard/web/overview-page.js.map +1 -1
- package/dist/dashboard/web/roles-page.d.ts.map +1 -1
- package/dist/dashboard/web/roles-page.js +4 -3
- package/dist/dashboard/web/roles-page.js.map +1 -1
- package/dist/dashboard/web/schedules-page.d.ts.map +1 -1
- package/dist/dashboard/web/schedules-page.js +165 -18
- package/dist/dashboard/web/schedules-page.js.map +1 -1
- package/dist/dashboard/web/sessions-kanban.d.ts +2 -0
- package/dist/dashboard/web/sessions-kanban.d.ts.map +1 -1
- package/dist/dashboard/web/sessions-kanban.js +142 -24
- package/dist/dashboard/web/sessions-kanban.js.map +1 -1
- package/dist/dashboard/web/sessions-page.d.ts.map +1 -1
- package/dist/dashboard/web/sessions-page.js +177 -94
- package/dist/dashboard/web/sessions-page.js.map +1 -1
- package/dist/dashboard/web/sessions.d.ts.map +1 -1
- package/dist/dashboard/web/sessions.js +5 -4
- package/dist/dashboard/web/sessions.js.map +1 -1
- package/dist/dashboard/web/settings-page.d.ts +0 -8
- package/dist/dashboard/web/settings-page.d.ts.map +1 -1
- package/dist/dashboard/web/settings-page.js +185 -65
- package/dist/dashboard/web/settings-page.js.map +1 -1
- package/dist/dashboard/web/skills/skill-library-tab.d.ts +2 -0
- package/dist/dashboard/web/skills/skill-library-tab.d.ts.map +1 -1
- package/dist/dashboard/web/skills/skill-library-tab.js +15 -1
- package/dist/dashboard/web/skills/skill-library-tab.js.map +1 -1
- package/dist/dashboard/web/skills-page.d.ts.map +1 -1
- package/dist/dashboard/web/skills-page.js +5 -4
- package/dist/dashboard/web/skills-page.js.map +1 -1
- package/dist/dashboard/web/store.d.ts +5 -0
- package/dist/dashboard/web/store.d.ts.map +1 -1
- package/dist/dashboard/web/store.js +4 -0
- package/dist/dashboard/web/store.js.map +1 -1
- package/dist/dashboard/web/team-federation-page.d.ts.map +1 -1
- package/dist/dashboard/web/team-federation-page.js +3 -2
- package/dist/dashboard/web/team-federation-page.js.map +1 -1
- package/dist/dashboard/web/toast.d.ts +15 -0
- package/dist/dashboard/web/toast.d.ts.map +1 -0
- package/dist/dashboard/web/toast.js +70 -0
- package/dist/dashboard/web/toast.js.map +1 -0
- package/dist/dashboard/web/v3-components.d.ts.map +1 -1
- package/dist/dashboard/web/v3-components.js +2 -1
- package/dist/dashboard/web/v3-components.js.map +1 -1
- package/dist/dashboard/web/vc-consumer-profiles-section.d.ts +10 -12
- package/dist/dashboard/web/vc-consumer-profiles-section.d.ts.map +1 -1
- package/dist/dashboard/web/vc-consumer-profiles-section.js +219 -200
- package/dist/dashboard/web/vc-consumer-profiles-section.js.map +1 -1
- package/dist/dashboard/web/whiteboards-page.d.ts.map +1 -1
- package/dist/dashboard/web/whiteboards-page.js +2 -1
- package/dist/dashboard/web/whiteboards-page.js.map +1 -1
- package/dist/dashboard-web/app.js +1 -1
- package/dist/dashboard-web/chunks/agent-workbench-dock-page-LZSUOCEQ.js +1 -0
- package/dist/dashboard-web/chunks/agent-workbench-page-YONDRJU7.js +1 -0
- package/dist/dashboard-web/chunks/bot-defaults-page-X7LV6373.js +1 -0
- package/dist/dashboard-web/chunks/chunk-2PVRDXEL.js +1 -0
- package/dist/dashboard-web/chunks/chunk-53JUKBU2.js +10 -0
- package/dist/dashboard-web/chunks/{chunk-5CJMHTT4.js → chunk-5QX4OYOR.js} +1 -1
- package/dist/dashboard-web/chunks/{chunk-NACP7BMR.js → chunk-5VRVJFQR.js} +1 -1
- package/dist/dashboard-web/chunks/{chunk-FDZ7WOBW.js → chunk-6ROOZWYV.js} +1 -1
- package/dist/dashboard-web/chunks/{chunk-F6KNPF4R.js → chunk-CK22743G.js} +15 -19
- package/dist/dashboard-web/chunks/chunk-CVNIMUPY.js +25 -0
- package/dist/dashboard-web/chunks/chunk-GJC2TMWS.js +2 -0
- package/dist/dashboard-web/chunks/chunk-OT6L6G7R.js +1 -0
- package/dist/dashboard-web/chunks/chunk-QITAMHW6.js +1 -0
- package/dist/dashboard-web/chunks/chunk-RHVFZC5Z.js +1 -0
- package/dist/dashboard-web/chunks/chunk-SOBMN2VY.js +1 -0
- package/dist/dashboard-web/chunks/chunk-SZOB6VK2.js +1 -0
- package/dist/dashboard-web/chunks/chunk-XVIXNQGC.js +44 -0
- package/dist/dashboard-web/chunks/chunk-YUJF34ME.js +1 -0
- package/dist/dashboard-web/chunks/connectors-page-LB2HEJ7F.js +1 -0
- package/dist/dashboard-web/chunks/customization-page-4GXBYLG6.js +105 -0
- package/dist/dashboard-web/chunks/feedback-page-IZQ7VLDG.js +1 -0
- package/dist/dashboard-web/chunks/groups-page-4WCP5OEV.js +8 -0
- package/dist/dashboard-web/chunks/{insights-page-HJFDYR5N.js → insights-page-TXQHIPQL.js} +1 -1
- package/dist/dashboard-web/chunks/{monitor-room-V7PCP47V.js → monitor-room-VBRVWXCM.js} +8 -8
- package/dist/dashboard-web/chunks/monitoring-page-QDDZWERE.js +2 -0
- package/dist/dashboard-web/chunks/office-page-PENFNYPG.js +1 -0
- package/dist/dashboard-web/chunks/overview-page-BZQDP6MP.js +1 -0
- package/dist/dashboard-web/chunks/plugin-page-JX4GSWZS.js +1 -0
- package/dist/dashboard-web/chunks/roles-page-VPNINZNK.js +1 -0
- package/dist/dashboard-web/chunks/schedules-page-BITO6HEA.js +1 -0
- package/dist/dashboard-web/chunks/sessions-page-ZKCOVTD2.js +8 -0
- package/dist/dashboard-web/chunks/settings-page-UT6JDTS6.js +2 -0
- package/dist/dashboard-web/chunks/skills-page-GULXVAJY.js +4 -0
- package/dist/dashboard-web/chunks/team-federation-page-CUUJWGEG.js +1 -0
- package/dist/dashboard-web/chunks/v3-page-5WVJ5AUR.js +94 -0
- package/dist/dashboard-web/chunks/whiteboards-page-FZ2CME4H.js +1 -0
- package/dist/dashboard-web/design-tokens.css +236 -0
- package/dist/dashboard-web/index.html +1 -0
- package/dist/dashboard-web/style.css +1930 -114
- package/dist/dashboard.js +360 -279
- package/dist/dashboard.js.map +1 -1
- package/dist/desktop/renderer/app.js +6 -0
- package/dist/desktop/renderer/app.js.map +1 -1
- package/dist/dsh-runner.js +139 -17
- package/dist/dsh-runner.js.map +1 -1
- package/dist/global-config.d.ts +33 -2
- package/dist/global-config.d.ts.map +1 -1
- package/dist/global-config.js +62 -0
- package/dist/global-config.js.map +1 -1
- package/dist/i18n/en.d.ts.map +1 -1
- package/dist/i18n/en.js +13 -4
- package/dist/i18n/en.js.map +1 -1
- package/dist/i18n/index.d.ts +27 -3
- package/dist/i18n/index.d.ts.map +1 -1
- package/dist/i18n/index.js +33 -4
- package/dist/i18n/index.js.map +1 -1
- package/dist/i18n/zh.d.ts.map +1 -1
- package/dist/i18n/zh.js +13 -4
- package/dist/i18n/zh.js.map +1 -1
- package/dist/im/lark/card-builder.d.ts +2 -0
- package/dist/im/lark/card-builder.d.ts.map +1 -1
- package/dist/im/lark/card-builder.js +7 -4
- package/dist/im/lark/card-builder.js.map +1 -1
- package/dist/im/lark/card-handler.d.ts.map +1 -1
- package/dist/im/lark/card-handler.js +135 -20
- package/dist/im/lark/card-handler.js.map +1 -1
- package/dist/im/lark/event-dispatcher.d.ts +38 -3
- package/dist/im/lark/event-dispatcher.d.ts.map +1 -1
- package/dist/im/lark/event-dispatcher.js +163 -13
- package/dist/im/lark/event-dispatcher.js.map +1 -1
- package/dist/im/lark/v3-blocked-card-handler.d.ts.map +1 -1
- package/dist/im/lark/v3-blocked-card-handler.js +2 -1
- package/dist/im/lark/v3-blocked-card-handler.js.map +1 -1
- package/dist/im/lark/v3-blocked-card.d.ts +1 -1
- package/dist/im/lark/v3-blocked-card.d.ts.map +1 -1
- package/dist/im/lark/v3-blocked-card.js +14 -0
- package/dist/im/lark/v3-blocked-card.js.map +1 -1
- package/dist/index-core-only.js +2 -0
- package/dist/index-core-only.js.map +1 -1
- package/dist/index-daemon.js +3 -0
- package/dist/index-daemon.js.map +1 -1
- package/dist/platform/binding.d.ts +37 -0
- package/dist/platform/binding.d.ts.map +1 -1
- package/dist/platform/binding.js +15 -0
- package/dist/platform/binding.js.map +1 -1
- package/dist/services/bridge-turn-journal.d.ts +63 -0
- package/dist/services/bridge-turn-journal.d.ts.map +1 -0
- package/dist/services/bridge-turn-journal.js +149 -0
- package/dist/services/bridge-turn-journal.js.map +1 -0
- package/dist/services/bridge-turn-queue.d.ts +8 -1
- package/dist/services/bridge-turn-queue.d.ts.map +1 -1
- package/dist/services/bridge-turn-queue.js +2 -1
- package/dist/services/bridge-turn-queue.js.map +1 -1
- package/dist/services/codex-app-runner-protocol.d.ts +5 -0
- package/dist/services/codex-app-runner-protocol.d.ts.map +1 -1
- package/dist/services/codex-app-runner-protocol.js +5 -0
- package/dist/services/codex-app-runner-protocol.js.map +1 -1
- package/dist/services/customization-store.d.ts +93 -0
- package/dist/services/customization-store.d.ts.map +1 -0
- package/dist/services/customization-store.js +542 -0
- package/dist/services/customization-store.js.map +1 -0
- package/dist/services/file-bridge-path.d.ts.map +1 -1
- package/dist/services/file-bridge-path.js +3 -0
- package/dist/services/file-bridge-path.js.map +1 -1
- package/dist/services/grok-transcript.d.ts.map +1 -1
- package/dist/services/grok-transcript.js +44 -9
- package/dist/services/grok-transcript.js.map +1 -1
- package/dist/services/local-cli-opener.d.ts.map +1 -1
- package/dist/services/local-cli-opener.js +12 -3
- package/dist/services/local-cli-opener.js.map +1 -1
- package/dist/services/model-catalog.d.ts +54 -0
- package/dist/services/model-catalog.d.ts.map +1 -0
- package/dist/services/model-catalog.js +147 -0
- package/dist/services/model-catalog.js.map +1 -0
- package/dist/services/omp-transcript.d.ts +27 -0
- package/dist/services/omp-transcript.d.ts.map +1 -0
- package/dist/services/omp-transcript.js +214 -0
- package/dist/services/omp-transcript.js.map +1 -0
- package/dist/services/platform-team-store.d.ts +16 -8
- package/dist/services/platform-team-store.d.ts.map +1 -1
- package/dist/services/platform-team-store.js +17 -10
- package/dist/services/platform-team-store.js.map +1 -1
- package/dist/services/project-scanner.d.ts.map +1 -1
- package/dist/services/project-scanner.js +13 -8
- package/dist/services/project-scanner.js.map +1 -1
- package/dist/services/resumable-session-discovery.d.ts.map +1 -1
- package/dist/services/resumable-session-discovery.js +117 -35
- package/dist/services/resumable-session-discovery.js.map +1 -1
- package/dist/services/structured-bridge-clis.d.ts +5 -3
- package/dist/services/structured-bridge-clis.d.ts.map +1 -1
- package/dist/services/structured-bridge-clis.js +5 -1
- package/dist/services/structured-bridge-clis.js.map +1 -1
- package/dist/services/vc-meeting-action-gate.d.ts.map +1 -1
- package/dist/services/vc-meeting-action-gate.js +15 -4
- package/dist/services/vc-meeting-action-gate.js.map +1 -1
- package/dist/services/vc-meeting-consumer-profile-bootstrap.d.ts +46 -66
- package/dist/services/vc-meeting-consumer-profile-bootstrap.d.ts.map +1 -1
- package/dist/services/vc-meeting-consumer-profile-bootstrap.js +33 -292
- package/dist/services/vc-meeting-consumer-profile-bootstrap.js.map +1 -1
- package/dist/services/vc-meeting-consumer-profile-templates.js +3 -3
- package/dist/services/vc-meeting-consumer-profile-templates.js.map +1 -1
- package/dist/services/vc-meeting-delivery-store.d.ts +18 -0
- package/dist/services/vc-meeting-delivery-store.d.ts.map +1 -1
- package/dist/services/vc-meeting-delivery-store.js +55 -0
- package/dist/services/vc-meeting-delivery-store.js.map +1 -1
- package/dist/services/vc-meeting-send-policy.d.ts +21 -1
- package/dist/services/vc-meeting-send-policy.d.ts.map +1 -1
- package/dist/services/vc-meeting-send-policy.js +30 -2
- package/dist/services/vc-meeting-send-policy.js.map +1 -1
- package/dist/services/vc-meeting-shared-consumer-catalog-store.d.ts +78 -0
- package/dist/services/vc-meeting-shared-consumer-catalog-store.d.ts.map +1 -0
- package/dist/services/vc-meeting-shared-consumer-catalog-store.js +227 -0
- package/dist/services/vc-meeting-shared-consumer-catalog-store.js.map +1 -0
- package/dist/services/vc-meeting-shared-consumer-catalog.d.ts +53 -0
- package/dist/services/vc-meeting-shared-consumer-catalog.d.ts.map +1 -0
- package/dist/services/vc-meeting-shared-consumer-catalog.js +161 -0
- package/dist/services/vc-meeting-shared-consumer-catalog.js.map +1 -0
- package/dist/setup/bot-config-editor.d.ts.map +1 -1
- package/dist/setup/bot-config-editor.js +1 -0
- package/dist/setup/bot-config-editor.js.map +1 -1
- package/dist/setup/open-platform-automation.d.ts +20 -0
- package/dist/setup/open-platform-automation.d.ts.map +1 -1
- package/dist/setup/open-platform-automation.js +27 -0
- package/dist/setup/open-platform-automation.js.map +1 -1
- package/dist/skills/customization-bundle.d.ts +83 -0
- package/dist/skills/customization-bundle.d.ts.map +1 -0
- package/dist/skills/customization-bundle.js +214 -0
- package/dist/skills/customization-bundle.js.map +1 -0
- package/dist/skills/definitions.d.ts.map +1 -1
- package/dist/skills/definitions.js +10 -3
- package/dist/skills/definitions.js.map +1 -1
- package/dist/skills/effective-builtins.d.ts +38 -0
- package/dist/skills/effective-builtins.d.ts.map +1 -0
- package/dist/skills/effective-builtins.js +96 -0
- package/dist/skills/effective-builtins.js.map +1 -0
- package/dist/skills/injection-mode.d.ts +4 -1
- package/dist/skills/injection-mode.d.ts.map +1 -1
- package/dist/skills/injection-mode.js +11 -3
- package/dist/skills/injection-mode.js.map +1 -1
- package/dist/skills/installer.d.ts.map +1 -1
- package/dist/skills/installer.js +24 -1
- package/dist/skills/installer.js.map +1 -1
- package/dist/skills/prompt-fragments.d.ts +58 -0
- package/dist/skills/prompt-fragments.d.ts.map +1 -0
- package/dist/skills/prompt-fragments.js +88 -0
- package/dist/skills/prompt-fragments.js.map +1 -0
- package/dist/types.d.ts +51 -0
- package/dist/types.d.ts.map +1 -1
- package/dist/utils/cli-usage-limit.d.ts +50 -0
- package/dist/utils/cli-usage-limit.d.ts.map +1 -1
- package/dist/utils/cli-usage-limit.js +43 -0
- package/dist/utils/cli-usage-limit.js.map +1 -1
- package/dist/utils/idle-detector.d.ts +12 -0
- package/dist/utils/idle-detector.d.ts.map +1 -1
- package/dist/utils/idle-detector.js +88 -2
- package/dist/utils/idle-detector.js.map +1 -1
- package/dist/utils/stuck-detector.d.ts +5 -0
- package/dist/utils/stuck-detector.d.ts.map +1 -1
- package/dist/utils/stuck-detector.js +41 -0
- package/dist/utils/stuck-detector.js.map +1 -1
- package/dist/utils/usage-limit-tracker.d.ts +46 -0
- package/dist/utils/usage-limit-tracker.d.ts.map +1 -0
- package/dist/utils/usage-limit-tracker.js +91 -0
- package/dist/utils/usage-limit-tracker.js.map +1 -0
- package/dist/utils/user-token.js +1 -1
- package/dist/utils/user-token.js.map +1 -1
- package/dist/worker.js +812 -125
- package/dist/worker.js.map +1 -1
- package/dist/workflows/definition.d.ts +14 -14
- package/dist/workflows/events/payloads.d.ts +12 -12
- package/dist/workflows/events/schema.d.ts +164 -164
- package/dist/workflows/migration/v2-to-v3.js +1 -1
- package/dist/workflows/migration/v2-to-v3.js.map +1 -1
- package/dist/workflows/v3/architect.d.ts.map +1 -1
- package/dist/workflows/v3/architect.js +11 -5
- package/dist/workflows/v3/architect.js.map +1 -1
- package/dist/workflows/v3/artifact-contract-declarations.d.ts +22 -0
- package/dist/workflows/v3/artifact-contract-declarations.d.ts.map +1 -0
- package/dist/workflows/v3/artifact-contract-declarations.js +95 -0
- package/dist/workflows/v3/artifact-contract-declarations.js.map +1 -0
- package/dist/workflows/v3/contract.d.ts +1 -0
- package/dist/workflows/v3/contract.d.ts.map +1 -1
- package/dist/workflows/v3/contract.js.map +1 -1
- package/dist/workflows/v3/daemon-run.d.ts +2 -2
- package/dist/workflows/v3/daemon-run.d.ts.map +1 -1
- package/dist/workflows/v3/daemon-run.js +4 -0
- package/dist/workflows/v3/daemon-run.js.map +1 -1
- package/dist/workflows/v3/dag.d.ts +7 -0
- package/dist/workflows/v3/dag.d.ts.map +1 -1
- package/dist/workflows/v3/dag.js +69 -8
- package/dist/workflows/v3/dag.js.map +1 -1
- package/dist/workflows/v3/ephemeral-pool.js +1 -1
- package/dist/workflows/v3/ephemeral-pool.js.map +1 -1
- package/dist/workflows/v3/event-contract.d.ts +3 -1
- package/dist/workflows/v3/event-contract.d.ts.map +1 -1
- package/dist/workflows/v3/host.d.ts.map +1 -1
- package/dist/workflows/v3/host.js +5 -1
- package/dist/workflows/v3/host.js.map +1 -1
- package/dist/workflows/v3/journal.d.ts +1 -1
- package/dist/workflows/v3/journal.d.ts.map +1 -1
- package/dist/workflows/v3/journal.js.map +1 -1
- package/dist/workflows/v3/library-materialize.d.ts.map +1 -1
- package/dist/workflows/v3/library-materialize.js +9 -1
- package/dist/workflows/v3/library-materialize.js.map +1 -1
- package/dist/workflows/v3/library-schema.d.ts +3 -1
- package/dist/workflows/v3/library-schema.d.ts.map +1 -1
- package/dist/workflows/v3/library-schema.js +20 -4
- package/dist/workflows/v3/library-schema.js.map +1 -1
- package/dist/workflows/v3/library-store.d.ts.map +1 -1
- package/dist/workflows/v3/library-store.js +15 -3
- package/dist/workflows/v3/library-store.js.map +1 -1
- package/dist/workflows/v3/run-envelope.d.ts +16 -16
- package/dist/workflows/v3/shared-node-runtime.d.ts +2 -1
- package/dist/workflows/v3/shared-node-runtime.d.ts.map +1 -1
- package/dist/workflows/v3/shared-node-runtime.js +48 -7
- package/dist/workflows/v3/shared-node-runtime.js.map +1 -1
- package/package.json +2 -1
- package/dist/dashboard-web/chunks/agent-workbench-dock-page-IKAC5CFL.js +0 -1
- package/dist/dashboard-web/chunks/agent-workbench-page-M53UN5EB.js +0 -1
- package/dist/dashboard-web/chunks/bot-defaults-page-YKE5SDZF.js +0 -10
- package/dist/dashboard-web/chunks/chunk-22WIADUT.js +0 -2
- package/dist/dashboard-web/chunks/chunk-24ONYQMR.js +0 -1
- package/dist/dashboard-web/chunks/chunk-2W6SCN3M.js +0 -1
- package/dist/dashboard-web/chunks/chunk-4XNJX6B3.js +0 -1
- package/dist/dashboard-web/chunks/chunk-5THX4DI2.js +0 -66
- package/dist/dashboard-web/chunks/chunk-7SZRL6FY.js +0 -1
- package/dist/dashboard-web/chunks/chunk-AGCPF6MT.js +0 -1
- package/dist/dashboard-web/chunks/chunk-FXW3V4JR.js +0 -1
- package/dist/dashboard-web/chunks/chunk-SYC6D5XU.js +0 -1
- package/dist/dashboard-web/chunks/connectors-page-VOISXXII.js +0 -1
- package/dist/dashboard-web/chunks/feedback-page-RN6HRZMS.js +0 -1
- package/dist/dashboard-web/chunks/groups-page-UQT6DCB7.js +0 -8
- package/dist/dashboard-web/chunks/monitoring-page-NKEKVQAP.js +0 -2
- package/dist/dashboard-web/chunks/office-page-GVJF73XW.js +0 -1
- package/dist/dashboard-web/chunks/overview-page-KHLV6VTI.js +0 -1
- package/dist/dashboard-web/chunks/plugin-page-J3OF5IY4.js +0 -1
- package/dist/dashboard-web/chunks/roles-page-WQIRSOLZ.js +0 -1
- package/dist/dashboard-web/chunks/schedules-page-J2DEY2X6.js +0 -1
- package/dist/dashboard-web/chunks/sessions-page-7BQFEA5P.js +0 -8
- package/dist/dashboard-web/chunks/settings-page-BJEIOFJH.js +0 -2
- package/dist/dashboard-web/chunks/skills-page-HGIFR3IU.js +0 -4
- package/dist/dashboard-web/chunks/team-federation-page-MR5ZPL4B.js +0 -1
- package/dist/dashboard-web/chunks/v3-page-GBR5JWPE.js +0 -94
- package/dist/dashboard-web/chunks/whiteboards-page-QAZM4BN3.js +0 -1
- package/dist/services/vc-meeting-consumer-profile-store.d.ts +0 -39
- package/dist/services/vc-meeting-consumer-profile-store.d.ts.map +0 -1
- package/dist/services/vc-meeting-consumer-profile-store.js +0 -191
- package/dist/services/vc-meeting-consumer-profile-store.js.map +0 -1
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"codex-app-runner-protocol.js","sourceRoot":"","sources":["../../src/services/codex-app-runner-protocol.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,MAAM,aAAa,CAAC;AAErC,OAAO,EAAE,mBAAmB,EAAE,MAAM,mCAAmC,CAAC;AAExE,MAAM,CAAC,MAAM,sBAAsB,GAAG,qBAAqB,CAAC;
|
|
1
|
+
{"version":3,"file":"codex-app-runner-protocol.js","sourceRoot":"","sources":["../../src/services/codex-app-runner-protocol.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,93 @@
|
|
|
1
|
+
import { type Locale } from '../i18n/types.js';
|
|
2
|
+
/** One overridden built-in skill: a replacement body, and/or a disable flag.
|
|
3
|
+
* `body === undefined` + `disabled` = keep shipped body but never inject it.
|
|
4
|
+
* `body` set = inject this instead of the shipped SKILL.md. */
|
|
5
|
+
export interface BuiltinSkillOverride {
|
|
6
|
+
/** Full replacement SKILL.md (frontmatter + body). Omitted = use shipped body. */
|
|
7
|
+
body?: string;
|
|
8
|
+
/** When true the skill is not injected at all (catalog + files both skip it). */
|
|
9
|
+
disabled?: boolean;
|
|
10
|
+
/** ISO timestamp of the last edit to this entry (for history diffs / UI). */
|
|
11
|
+
updatedAt?: string;
|
|
12
|
+
}
|
|
13
|
+
/** The full current customization state. Everything is optional so an empty
|
|
14
|
+
* object is the valid "no customization" baseline. */
|
|
15
|
+
export interface CustomizationState {
|
|
16
|
+
schemaVersion: 1;
|
|
17
|
+
/** Master switch. `false` = all overrides ignored (byte-identical baseline)
|
|
18
|
+
* but retained on disk. Missing is treated as enabled (see {@link customizationEnabled}). */
|
|
19
|
+
enabled?: boolean;
|
|
20
|
+
/** Prompt-key overrides, keyed by locale then i18n key. A value replaces the
|
|
21
|
+
* shipped `t(key)` string for that locale. */
|
|
22
|
+
promptOverrides?: Partial<Record<Locale, Record<string, string>>>;
|
|
23
|
+
/** Conditional prompt lines forced on/off by the i18n key that renders them
|
|
24
|
+
* (e.g. `ai.routing.no_visible_output_ok`). Absent = follow the shipped
|
|
25
|
+
* gating logic; present = force that boolean regardless. */
|
|
26
|
+
conditionalLines?: Record<string, boolean>;
|
|
27
|
+
/** Built-in skill overrides keyed by skill name (e.g. `botmux-send`). */
|
|
28
|
+
builtinSkills?: Record<string, BuiltinSkillOverride>;
|
|
29
|
+
/** Last-modified ISO timestamp of the state as a whole. */
|
|
30
|
+
updatedAt?: string;
|
|
31
|
+
}
|
|
32
|
+
/** Metadata for one point-in-time snapshot in the history log. */
|
|
33
|
+
export interface CustomizationSnapshot {
|
|
34
|
+
id: string;
|
|
35
|
+
/** ISO time the snapshot was taken (i.e. when the *prior* state was captured). */
|
|
36
|
+
at: string;
|
|
37
|
+
/** Short human label describing the mutation that triggered this snapshot,
|
|
38
|
+
* e.g. "set ai.routing.intro (zh)" / "reset all to factory" / "import bundle". */
|
|
39
|
+
label: string;
|
|
40
|
+
/** Coarse counts of the snapshotted state, for a quick history-list summary. */
|
|
41
|
+
summary: {
|
|
42
|
+
promptKeys: number;
|
|
43
|
+
skills: number;
|
|
44
|
+
enabled: boolean;
|
|
45
|
+
};
|
|
46
|
+
}
|
|
47
|
+
/** Per-skill body cap — mirrors the spirit of role-resolver's MAX_ROLE_BYTES. */
|
|
48
|
+
export declare const MAX_SKILL_BODY_BYTES: number;
|
|
49
|
+
/** Per prompt-override value cap. Individual fragments are short; this is a
|
|
50
|
+
* generous ceiling that still stops a paste-bomb from bloating every prompt. */
|
|
51
|
+
export declare const MAX_PROMPT_OVERRIDE_BYTES: number;
|
|
52
|
+
export declare function customizationsRoot(): string;
|
|
53
|
+
/** Read the current state (short-TTL cached). Never throws — a missing or
|
|
54
|
+
* corrupt file yields the empty baseline. */
|
|
55
|
+
export declare function readCustomizationState(): CustomizationState;
|
|
56
|
+
export declare function invalidateCustomizationCache(): void;
|
|
57
|
+
/** Whether customizations are active. Missing flag = enabled (opt-out master
|
|
58
|
+
* switch); an explicit `false` disables everything. The resolution layer also
|
|
59
|
+
* consults this so a single check short-circuits all override lookups. */
|
|
60
|
+
export declare function customizationEnabled(): boolean;
|
|
61
|
+
export declare function listSnapshots(): CustomizationSnapshot[];
|
|
62
|
+
/** Read the full state stored in a snapshot (for diff preview before rollback). */
|
|
63
|
+
export declare function readSnapshotState(id: string): CustomizationState | undefined;
|
|
64
|
+
/** Read a skill body as it existed in a snapshot (mirrors {@link readSkillOverrideBody}). */
|
|
65
|
+
export declare function readSnapshotSkillBody(id: string, name: string): string | undefined;
|
|
66
|
+
/** Read the override SKILL.md body for a built-in skill, or undefined if none.
|
|
67
|
+
* Reads the .md file when the state entry has a body; the state's `body` field
|
|
68
|
+
* is a presence marker, the file is the source of truth for large text. */
|
|
69
|
+
export declare function readSkillOverrideBody(name: string): string | undefined;
|
|
70
|
+
/** Set (or clear) the master enabled flag. */
|
|
71
|
+
export declare function setCustomizationEnabled(enabled: boolean): CustomizationState;
|
|
72
|
+
/** Override (value set) or clear (value === null) a single prompt key for a locale. */
|
|
73
|
+
export declare function setPromptOverride(locale: Locale, key: string, value: string | null): CustomizationState;
|
|
74
|
+
/** Force a conditional prompt line on/off, or clear the override (follow shipped gating). */
|
|
75
|
+
export declare function setConditionalLine(key: string, value: boolean | null): CustomizationState;
|
|
76
|
+
/** Set (body != null) or clear (body === null) the override body for a built-in skill.
|
|
77
|
+
* Clearing removes the body but leaves any `disabled` flag intact. */
|
|
78
|
+
export declare function setSkillOverrideBody(name: string, body: string | null): CustomizationState;
|
|
79
|
+
/** Enable/disable injection of a built-in skill (independent of any body override). */
|
|
80
|
+
export declare function setSkillDisabled(name: string, disabled: boolean): CustomizationState;
|
|
81
|
+
/** Reset EVERYTHING to factory: clears all overrides + skill bodies. Snapshots
|
|
82
|
+
* first, so this is fully reversible via rollback. Keeps the master enabled
|
|
83
|
+
* flag (resetting content is orthogonal to the on/off switch). */
|
|
84
|
+
export declare function resetAllToFactory(): CustomizationState;
|
|
85
|
+
/** Roll the current state back to a snapshot's contents. Non-destructive: the
|
|
86
|
+
* pre-rollback state is snapshotted first, so a rollback can itself be undone
|
|
87
|
+
* by rolling forward to that new snapshot. */
|
|
88
|
+
export declare function rollbackToSnapshot(id: string): CustomizationState;
|
|
89
|
+
/** Replace the entire state atomically (used by bundle import after diff
|
|
90
|
+
* confirmation). Snapshots first. `skillBodies` maps skill name → SKILL.md so
|
|
91
|
+
* the .md files are materialised alongside the state pointers. */
|
|
92
|
+
export declare function replaceState(next: CustomizationState, skillBodies: Record<string, string>, label: string): CustomizationState;
|
|
93
|
+
//# sourceMappingURL=customization-store.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"customization-store.d.ts","sourceRoot":"","sources":["../../src/services/customization-store.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,542 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Customization store — user overrides for botmux's BUILT-IN prompts and skills.
|
|
3
|
+
*
|
|
4
|
+
* botmux ships two kinds of built-in content the model sees every session:
|
|
5
|
+
* - **Prompt fragments** — the `<botmux_routing>` / `<identity>` / skill-catalog
|
|
6
|
+
* copy, all resolved through the i18n `t(key, …, locale)` layer.
|
|
7
|
+
* - **Built-in skills** — the SKILL.md bodies in `src/skills/definitions.ts`.
|
|
8
|
+
*
|
|
9
|
+
* This store lets the user OVERRIDE either without editing shipped source, and
|
|
10
|
+
* SHARE the result. It is the single source of truth for:
|
|
11
|
+
* - per-locale prompt-key overrides (`t()` consults these first)
|
|
12
|
+
* - built-in skill body overrides + per-skill disables
|
|
13
|
+
* - a master on/off flag (disable everything without deleting it)
|
|
14
|
+
* - a snapshot history for non-destructive rollback / reset-to-factory
|
|
15
|
+
*
|
|
16
|
+
* DESIGN INVARIANTS
|
|
17
|
+
* 1. **Byte-identical when empty.** With no overrides (or master off) every
|
|
18
|
+
* resolver here returns `undefined` / the shipped default, so the prompt
|
|
19
|
+
* and skills are byte-for-byte what they were before this feature. The
|
|
20
|
+
* resolution layer (i18n `t()`, injection-mode, installer) short-circuits
|
|
21
|
+
* on `undefined`. This is the first regression red line.
|
|
22
|
+
* 2. **Non-destructive history.** Every mutation snapshots the *prior* state
|
|
23
|
+
* first, so rollback and "reset all to factory" can always be undone by
|
|
24
|
+
* rolling forward to a later snapshot — nothing is ever lost.
|
|
25
|
+
* 3. **Live.** State is read fresh (short TTL cache) so a change takes effect
|
|
26
|
+
* on the next session with no daemon restart, matching whiteboard /
|
|
27
|
+
* skillInjection semantics.
|
|
28
|
+
*
|
|
29
|
+
* Storage layout under `{dataDir}/customizations/`:
|
|
30
|
+
* state.json — the current CustomizationState (overrides + flags)
|
|
31
|
+
* skills/<name>.md — full SKILL.md body for an overridden built-in skill
|
|
32
|
+
* history/<snapshotId>/state.json + skills/*.md — a full point-in-time copy
|
|
33
|
+
* history/index.json — ordered snapshot metadata (newest first)
|
|
34
|
+
*
|
|
35
|
+
* The master enabled flag also mirrors into GlobalConfig (`customization.enabled`)
|
|
36
|
+
* so it participates in the dashboard settings surface; this store owns the rest.
|
|
37
|
+
*/
|
|
38
|
+
import { existsSync, mkdirSync, readFileSync, rmSync, cpSync, } from 'node:fs';
|
|
39
|
+
import { join } from 'node:path';
|
|
40
|
+
import { randomUUID } from 'node:crypto';
|
|
41
|
+
import { config } from '../config.js';
|
|
42
|
+
import { atomicWriteFileSync } from '../utils/atomic-write.js';
|
|
43
|
+
import { withFileLockSync } from '../utils/file-lock.js';
|
|
44
|
+
import { SUPPORTED_LOCALES } from '../i18n/types.js';
|
|
45
|
+
// ─── Paths ───────────────────────────────────────────────────────────────────
|
|
46
|
+
const SCHEMA_VERSION = 1;
|
|
47
|
+
/** Cap retained snapshots so an active editor can't grow history unbounded. */
|
|
48
|
+
const MAX_SNAPSHOTS = 50;
|
|
49
|
+
/** Per-skill body cap — mirrors the spirit of role-resolver's MAX_ROLE_BYTES. */
|
|
50
|
+
export const MAX_SKILL_BODY_BYTES = 64 * 1024;
|
|
51
|
+
/** Per prompt-override value cap. Individual fragments are short; this is a
|
|
52
|
+
* generous ceiling that still stops a paste-bomb from bloating every prompt. */
|
|
53
|
+
export const MAX_PROMPT_OVERRIDE_BYTES = 16 * 1024;
|
|
54
|
+
export function customizationsRoot() {
|
|
55
|
+
return join(config.session.dataDir, 'customizations');
|
|
56
|
+
}
|
|
57
|
+
function statePath() {
|
|
58
|
+
return join(customizationsRoot(), 'state.json');
|
|
59
|
+
}
|
|
60
|
+
function skillsDir() {
|
|
61
|
+
return join(customizationsRoot(), 'skills');
|
|
62
|
+
}
|
|
63
|
+
function skillOverridePath(name) {
|
|
64
|
+
return join(skillsDir(), `${safeSkillName(name)}.md`);
|
|
65
|
+
}
|
|
66
|
+
function historyDir() {
|
|
67
|
+
return join(customizationsRoot(), 'history');
|
|
68
|
+
}
|
|
69
|
+
function historyIndexPath() {
|
|
70
|
+
return join(historyDir(), 'index.json');
|
|
71
|
+
}
|
|
72
|
+
function snapshotDir(id) {
|
|
73
|
+
return join(historyDir(), safeSnapshotId(id));
|
|
74
|
+
}
|
|
75
|
+
// ─── Validation helpers ──────────────────────────────────────────────────────
|
|
76
|
+
/** Built-in skill names are the fixed `botmux-*` set; this guards path building
|
|
77
|
+
* against traversal even though callers pass known names. */
|
|
78
|
+
function safeSkillName(name) {
|
|
79
|
+
if (!/^[a-zA-Z0-9][a-zA-Z0-9_-]{0,63}$/.test(name))
|
|
80
|
+
throw new Error('invalid_skill_name');
|
|
81
|
+
return name;
|
|
82
|
+
}
|
|
83
|
+
function safeSnapshotId(id) {
|
|
84
|
+
if (!/^snap_[a-zA-Z0-9]{1,40}$/.test(id))
|
|
85
|
+
throw new Error('invalid_snapshot_id');
|
|
86
|
+
return id;
|
|
87
|
+
}
|
|
88
|
+
function isLocaleKey(v) {
|
|
89
|
+
return SUPPORTED_LOCALES.includes(v);
|
|
90
|
+
}
|
|
91
|
+
// ─── State read/write ────────────────────────────────────────────────────────
|
|
92
|
+
const LOCK_TIMEOUT_MS = 5_000;
|
|
93
|
+
// Short TTL so dashboard/CLI writes are picked up by the next session without a
|
|
94
|
+
// restart, but hot prompt-build paths don't re-parse the file on every t() call.
|
|
95
|
+
const READ_CACHE_TTL_MS = 2_000;
|
|
96
|
+
let readCache;
|
|
97
|
+
function ensureRoot() {
|
|
98
|
+
mkdirSync(customizationsRoot(), { recursive: true });
|
|
99
|
+
}
|
|
100
|
+
function emptyState() {
|
|
101
|
+
return { schemaVersion: SCHEMA_VERSION };
|
|
102
|
+
}
|
|
103
|
+
/** Coerce arbitrary parsed JSON into a valid CustomizationState, dropping
|
|
104
|
+
* anything malformed (same defensive spirit as global-config's readX). */
|
|
105
|
+
function coerceState(raw) {
|
|
106
|
+
if (!raw || typeof raw !== 'object')
|
|
107
|
+
return emptyState();
|
|
108
|
+
const r = raw;
|
|
109
|
+
const out = { schemaVersion: SCHEMA_VERSION };
|
|
110
|
+
if (typeof r.enabled === 'boolean')
|
|
111
|
+
out.enabled = r.enabled;
|
|
112
|
+
if (typeof r.updatedAt === 'string')
|
|
113
|
+
out.updatedAt = r.updatedAt;
|
|
114
|
+
if (r.promptOverrides && typeof r.promptOverrides === 'object') {
|
|
115
|
+
const po = {};
|
|
116
|
+
for (const [loc, map] of Object.entries(r.promptOverrides)) {
|
|
117
|
+
if (!isLocaleKey(loc) || !map || typeof map !== 'object')
|
|
118
|
+
continue;
|
|
119
|
+
const clean = {};
|
|
120
|
+
for (const [k, v] of Object.entries(map)) {
|
|
121
|
+
if (typeof v === 'string' && k)
|
|
122
|
+
clean[k] = v;
|
|
123
|
+
}
|
|
124
|
+
if (Object.keys(clean).length)
|
|
125
|
+
po[loc] = clean;
|
|
126
|
+
}
|
|
127
|
+
if (Object.keys(po).length)
|
|
128
|
+
out.promptOverrides = po;
|
|
129
|
+
}
|
|
130
|
+
if (r.conditionalLines && typeof r.conditionalLines === 'object') {
|
|
131
|
+
const cl = {};
|
|
132
|
+
for (const [k, v] of Object.entries(r.conditionalLines)) {
|
|
133
|
+
if (typeof v === 'boolean' && k)
|
|
134
|
+
cl[k] = v;
|
|
135
|
+
}
|
|
136
|
+
if (Object.keys(cl).length)
|
|
137
|
+
out.conditionalLines = cl;
|
|
138
|
+
}
|
|
139
|
+
if (r.builtinSkills && typeof r.builtinSkills === 'object') {
|
|
140
|
+
const bs = {};
|
|
141
|
+
for (const [name, ov] of Object.entries(r.builtinSkills)) {
|
|
142
|
+
if (!ov || typeof ov !== 'object')
|
|
143
|
+
continue;
|
|
144
|
+
const o = ov;
|
|
145
|
+
const entry = {};
|
|
146
|
+
if (typeof o.body === 'string')
|
|
147
|
+
entry.body = o.body;
|
|
148
|
+
if (o.disabled === true)
|
|
149
|
+
entry.disabled = true;
|
|
150
|
+
if (typeof o.updatedAt === 'string')
|
|
151
|
+
entry.updatedAt = o.updatedAt;
|
|
152
|
+
// Skip no-op entries (neither a body nor a disable) so an empty override
|
|
153
|
+
// never counts as "modified".
|
|
154
|
+
if (entry.body !== undefined || entry.disabled)
|
|
155
|
+
bs[name] = entry;
|
|
156
|
+
}
|
|
157
|
+
if (Object.keys(bs).length)
|
|
158
|
+
out.builtinSkills = bs;
|
|
159
|
+
}
|
|
160
|
+
return out;
|
|
161
|
+
}
|
|
162
|
+
/** Read the current state (short-TTL cached). Never throws — a missing or
|
|
163
|
+
* corrupt file yields the empty baseline. */
|
|
164
|
+
export function readCustomizationState() {
|
|
165
|
+
const now = Date.now();
|
|
166
|
+
if (readCache && now - readCache.at < READ_CACHE_TTL_MS)
|
|
167
|
+
return readCache.state;
|
|
168
|
+
let state = emptyState();
|
|
169
|
+
const fp = statePath();
|
|
170
|
+
if (existsSync(fp)) {
|
|
171
|
+
try {
|
|
172
|
+
state = coerceState(JSON.parse(readFileSync(fp, 'utf-8')));
|
|
173
|
+
}
|
|
174
|
+
catch {
|
|
175
|
+
state = emptyState();
|
|
176
|
+
}
|
|
177
|
+
}
|
|
178
|
+
readCache = { at: now, state };
|
|
179
|
+
return state;
|
|
180
|
+
}
|
|
181
|
+
export function invalidateCustomizationCache() {
|
|
182
|
+
readCache = undefined;
|
|
183
|
+
}
|
|
184
|
+
function writeStateUnlocked(state) {
|
|
185
|
+
ensureRoot();
|
|
186
|
+
const next = { ...state, schemaVersion: SCHEMA_VERSION, updatedAt: nowIso() };
|
|
187
|
+
atomicWriteFileSync(statePath(), JSON.stringify(next, null, 2) + '\n');
|
|
188
|
+
invalidateCustomizationCache();
|
|
189
|
+
}
|
|
190
|
+
function nowIso() {
|
|
191
|
+
return new Date().toISOString();
|
|
192
|
+
}
|
|
193
|
+
function withStateLock(fn) {
|
|
194
|
+
ensureRoot();
|
|
195
|
+
return withFileLockSync(statePath(), fn, { maxWaitMs: LOCK_TIMEOUT_MS });
|
|
196
|
+
}
|
|
197
|
+
// ─── Master enabled flag ─────────────────────────────────────────────────────
|
|
198
|
+
/** Whether customizations are active. Missing flag = enabled (opt-out master
|
|
199
|
+
* switch); an explicit `false` disables everything. The resolution layer also
|
|
200
|
+
* consults this so a single check short-circuits all override lookups. */
|
|
201
|
+
export function customizationEnabled() {
|
|
202
|
+
return readCustomizationState().enabled !== false;
|
|
203
|
+
}
|
|
204
|
+
// ─── Snapshot / history ──────────────────────────────────────────────────────
|
|
205
|
+
function readHistoryIndex() {
|
|
206
|
+
const fp = historyIndexPath();
|
|
207
|
+
if (!existsSync(fp))
|
|
208
|
+
return { schemaVersion: SCHEMA_VERSION, snapshots: [] };
|
|
209
|
+
try {
|
|
210
|
+
const parsed = JSON.parse(readFileSync(fp, 'utf-8'));
|
|
211
|
+
return {
|
|
212
|
+
schemaVersion: SCHEMA_VERSION,
|
|
213
|
+
snapshots: Array.isArray(parsed.snapshots) ? parsed.snapshots : [],
|
|
214
|
+
};
|
|
215
|
+
}
|
|
216
|
+
catch {
|
|
217
|
+
return { schemaVersion: SCHEMA_VERSION, snapshots: [] };
|
|
218
|
+
}
|
|
219
|
+
}
|
|
220
|
+
function writeHistoryIndex(index) {
|
|
221
|
+
mkdirSync(historyDir(), { recursive: true });
|
|
222
|
+
atomicWriteFileSync(historyIndexPath(), JSON.stringify(index, null, 2) + '\n');
|
|
223
|
+
}
|
|
224
|
+
function summarize(state) {
|
|
225
|
+
const promptKeys = Object.values(state.promptOverrides ?? {})
|
|
226
|
+
.reduce((n, m) => n + Object.keys(m ?? {}).length, 0)
|
|
227
|
+
+ Object.keys(state.conditionalLines ?? {}).length;
|
|
228
|
+
const skills = Object.keys(state.builtinSkills ?? {}).length;
|
|
229
|
+
return { promptKeys, skills, enabled: state.enabled !== false };
|
|
230
|
+
}
|
|
231
|
+
/** Capture the CURRENT on-disk state (+ its skill bodies) as a new snapshot.
|
|
232
|
+
* Must be called *before* a mutation writes the new state, so the snapshot
|
|
233
|
+
* preserves the prior point-in-time. Prunes to MAX_SNAPSHOTS. Best-effort:
|
|
234
|
+
* a snapshot failure never blocks the mutation itself (caller ignores throw). */
|
|
235
|
+
function snapshotCurrentUnlocked(label) {
|
|
236
|
+
const current = existsSync(statePath()) ? readStateFromDisk() : emptyState();
|
|
237
|
+
const id = `snap_${randomUUID().replace(/-/g, '').slice(0, 20)}`;
|
|
238
|
+
const dir = snapshotDir(id);
|
|
239
|
+
mkdirSync(dir, { recursive: true });
|
|
240
|
+
atomicWriteFileSync(join(dir, 'state.json'), JSON.stringify(current, null, 2) + '\n');
|
|
241
|
+
// Copy the skill override bodies so a rollback restores exact SKILL.md text,
|
|
242
|
+
// not just the state.json pointers.
|
|
243
|
+
if (existsSync(skillsDir())) {
|
|
244
|
+
try {
|
|
245
|
+
cpSync(skillsDir(), join(dir, 'skills'), { recursive: true });
|
|
246
|
+
}
|
|
247
|
+
catch { /* best-effort */ }
|
|
248
|
+
}
|
|
249
|
+
const snap = { id, at: nowIso(), label: label.slice(0, 200), summary: summarize(current) };
|
|
250
|
+
const index = readHistoryIndex();
|
|
251
|
+
index.snapshots.unshift(snap);
|
|
252
|
+
// Prune oldest beyond the cap and delete their dirs.
|
|
253
|
+
while (index.snapshots.length > MAX_SNAPSHOTS) {
|
|
254
|
+
const dropped = index.snapshots.pop();
|
|
255
|
+
if (dropped) {
|
|
256
|
+
try {
|
|
257
|
+
rmSync(snapshotDir(dropped.id), { recursive: true, force: true });
|
|
258
|
+
}
|
|
259
|
+
catch { /* ignore */ }
|
|
260
|
+
}
|
|
261
|
+
}
|
|
262
|
+
writeHistoryIndex(index);
|
|
263
|
+
return snap;
|
|
264
|
+
}
|
|
265
|
+
/** Uncached direct disk read — used inside locked sections where the TTL cache
|
|
266
|
+
* could be stale relative to a sibling process's just-committed write. */
|
|
267
|
+
function readStateFromDisk() {
|
|
268
|
+
const fp = statePath();
|
|
269
|
+
if (!existsSync(fp))
|
|
270
|
+
return emptyState();
|
|
271
|
+
try {
|
|
272
|
+
return coerceState(JSON.parse(readFileSync(fp, 'utf-8')));
|
|
273
|
+
}
|
|
274
|
+
catch {
|
|
275
|
+
return emptyState();
|
|
276
|
+
}
|
|
277
|
+
}
|
|
278
|
+
export function listSnapshots() {
|
|
279
|
+
return readHistoryIndex().snapshots;
|
|
280
|
+
}
|
|
281
|
+
/** Read the full state stored in a snapshot (for diff preview before rollback). */
|
|
282
|
+
export function readSnapshotState(id) {
|
|
283
|
+
const fp = join(snapshotDir(id), 'state.json');
|
|
284
|
+
if (!existsSync(fp))
|
|
285
|
+
return undefined;
|
|
286
|
+
try {
|
|
287
|
+
return coerceState(JSON.parse(readFileSync(fp, 'utf-8')));
|
|
288
|
+
}
|
|
289
|
+
catch {
|
|
290
|
+
return undefined;
|
|
291
|
+
}
|
|
292
|
+
}
|
|
293
|
+
/** Read a skill body as it existed in a snapshot (mirrors {@link readSkillOverrideBody}). */
|
|
294
|
+
export function readSnapshotSkillBody(id, name) {
|
|
295
|
+
const fp = join(snapshotDir(id), 'skills', `${safeSkillName(name)}.md`);
|
|
296
|
+
if (!existsSync(fp))
|
|
297
|
+
return undefined;
|
|
298
|
+
try {
|
|
299
|
+
return readFileSync(fp, 'utf-8');
|
|
300
|
+
}
|
|
301
|
+
catch {
|
|
302
|
+
return undefined;
|
|
303
|
+
}
|
|
304
|
+
}
|
|
305
|
+
// ─── Skill override bodies (stored as .md files, referenced by state) ─────────
|
|
306
|
+
/** Read the override SKILL.md body for a built-in skill, or undefined if none.
|
|
307
|
+
* Reads the .md file when the state entry has a body; the state's `body` field
|
|
308
|
+
* is a presence marker, the file is the source of truth for large text. */
|
|
309
|
+
export function readSkillOverrideBody(name) {
|
|
310
|
+
const fp = skillOverridePath(name);
|
|
311
|
+
if (!existsSync(fp))
|
|
312
|
+
return undefined;
|
|
313
|
+
try {
|
|
314
|
+
return readFileSync(fp, 'utf-8');
|
|
315
|
+
}
|
|
316
|
+
catch {
|
|
317
|
+
return undefined;
|
|
318
|
+
}
|
|
319
|
+
}
|
|
320
|
+
// ─── Mutations (each snapshots the prior state first) ─────────────────────────
|
|
321
|
+
/** Set (or clear) the master enabled flag. */
|
|
322
|
+
export function setCustomizationEnabled(enabled) {
|
|
323
|
+
return withStateLock(() => {
|
|
324
|
+
try {
|
|
325
|
+
snapshotCurrentUnlocked(enabled ? 'enable customization' : 'disable customization');
|
|
326
|
+
}
|
|
327
|
+
catch { /* best-effort */ }
|
|
328
|
+
const state = readStateFromDisk();
|
|
329
|
+
state.enabled = enabled;
|
|
330
|
+
writeStateUnlocked(state);
|
|
331
|
+
return state;
|
|
332
|
+
});
|
|
333
|
+
}
|
|
334
|
+
/** Override (value set) or clear (value === null) a single prompt key for a locale. */
|
|
335
|
+
export function setPromptOverride(locale, key, value) {
|
|
336
|
+
if (value !== null && Buffer.byteLength(value, 'utf-8') > MAX_PROMPT_OVERRIDE_BYTES) {
|
|
337
|
+
throw new Error('prompt_override_too_large');
|
|
338
|
+
}
|
|
339
|
+
return withStateLock(() => {
|
|
340
|
+
try {
|
|
341
|
+
snapshotCurrentUnlocked(`${value === null ? 'reset' : 'set'} ${key} (${locale})`);
|
|
342
|
+
}
|
|
343
|
+
catch { /* best-effort */ }
|
|
344
|
+
const state = readStateFromDisk();
|
|
345
|
+
const po = state.promptOverrides ?? {};
|
|
346
|
+
const map = { ...(po[locale] ?? {}) };
|
|
347
|
+
if (value === null)
|
|
348
|
+
delete map[key];
|
|
349
|
+
else
|
|
350
|
+
map[key] = value;
|
|
351
|
+
if (Object.keys(map).length)
|
|
352
|
+
po[locale] = map;
|
|
353
|
+
else
|
|
354
|
+
delete po[locale];
|
|
355
|
+
if (Object.keys(po).length)
|
|
356
|
+
state.promptOverrides = po;
|
|
357
|
+
else
|
|
358
|
+
delete state.promptOverrides;
|
|
359
|
+
writeStateUnlocked(state);
|
|
360
|
+
return state;
|
|
361
|
+
});
|
|
362
|
+
}
|
|
363
|
+
/** Force a conditional prompt line on/off, or clear the override (follow shipped gating). */
|
|
364
|
+
export function setConditionalLine(key, value) {
|
|
365
|
+
return withStateLock(() => {
|
|
366
|
+
try {
|
|
367
|
+
snapshotCurrentUnlocked(`${value === null ? 'reset' : 'set'} condition ${key}`);
|
|
368
|
+
}
|
|
369
|
+
catch { /* best-effort */ }
|
|
370
|
+
const state = readStateFromDisk();
|
|
371
|
+
const cl = { ...(state.conditionalLines ?? {}) };
|
|
372
|
+
if (value === null)
|
|
373
|
+
delete cl[key];
|
|
374
|
+
else
|
|
375
|
+
cl[key] = value;
|
|
376
|
+
if (Object.keys(cl).length)
|
|
377
|
+
state.conditionalLines = cl;
|
|
378
|
+
else
|
|
379
|
+
delete state.conditionalLines;
|
|
380
|
+
writeStateUnlocked(state);
|
|
381
|
+
return state;
|
|
382
|
+
});
|
|
383
|
+
}
|
|
384
|
+
/** Set (body != null) or clear (body === null) the override body for a built-in skill.
|
|
385
|
+
* Clearing removes the body but leaves any `disabled` flag intact. */
|
|
386
|
+
export function setSkillOverrideBody(name, body) {
|
|
387
|
+
const clean = safeSkillName(name);
|
|
388
|
+
if (body !== null && Buffer.byteLength(body, 'utf-8') > MAX_SKILL_BODY_BYTES) {
|
|
389
|
+
throw new Error('skill_body_too_large');
|
|
390
|
+
}
|
|
391
|
+
return withStateLock(() => {
|
|
392
|
+
try {
|
|
393
|
+
snapshotCurrentUnlocked(`${body === null ? 'reset body' : 'override body'} ${clean}`);
|
|
394
|
+
}
|
|
395
|
+
catch { /* best-effort */ }
|
|
396
|
+
const state = readStateFromDisk();
|
|
397
|
+
const bs = { ...(state.builtinSkills ?? {}) };
|
|
398
|
+
const entry = { ...(bs[clean] ?? {}) };
|
|
399
|
+
if (body === null) {
|
|
400
|
+
delete entry.body;
|
|
401
|
+
try {
|
|
402
|
+
rmSync(skillOverridePath(clean), { force: true });
|
|
403
|
+
}
|
|
404
|
+
catch { /* ignore */ }
|
|
405
|
+
}
|
|
406
|
+
else {
|
|
407
|
+
entry.body = body;
|
|
408
|
+
entry.updatedAt = nowIso();
|
|
409
|
+
mkdirSync(skillsDir(), { recursive: true });
|
|
410
|
+
atomicWriteFileSync(skillOverridePath(clean), body);
|
|
411
|
+
}
|
|
412
|
+
if (entry.body !== undefined || entry.disabled)
|
|
413
|
+
bs[clean] = entry;
|
|
414
|
+
else
|
|
415
|
+
delete bs[clean];
|
|
416
|
+
if (Object.keys(bs).length)
|
|
417
|
+
state.builtinSkills = bs;
|
|
418
|
+
else
|
|
419
|
+
delete state.builtinSkills;
|
|
420
|
+
writeStateUnlocked(state);
|
|
421
|
+
return state;
|
|
422
|
+
});
|
|
423
|
+
}
|
|
424
|
+
/** Enable/disable injection of a built-in skill (independent of any body override). */
|
|
425
|
+
export function setSkillDisabled(name, disabled) {
|
|
426
|
+
const clean = safeSkillName(name);
|
|
427
|
+
return withStateLock(() => {
|
|
428
|
+
try {
|
|
429
|
+
snapshotCurrentUnlocked(`${disabled ? 'disable' : 'enable'} skill ${clean}`);
|
|
430
|
+
}
|
|
431
|
+
catch { /* best-effort */ }
|
|
432
|
+
const state = readStateFromDisk();
|
|
433
|
+
const bs = { ...(state.builtinSkills ?? {}) };
|
|
434
|
+
const entry = { ...(bs[clean] ?? {}) };
|
|
435
|
+
if (disabled)
|
|
436
|
+
entry.disabled = true;
|
|
437
|
+
else
|
|
438
|
+
delete entry.disabled;
|
|
439
|
+
entry.updatedAt = nowIso();
|
|
440
|
+
if (entry.body !== undefined || entry.disabled)
|
|
441
|
+
bs[clean] = entry;
|
|
442
|
+
else
|
|
443
|
+
delete bs[clean];
|
|
444
|
+
if (Object.keys(bs).length)
|
|
445
|
+
state.builtinSkills = bs;
|
|
446
|
+
else
|
|
447
|
+
delete state.builtinSkills;
|
|
448
|
+
writeStateUnlocked(state);
|
|
449
|
+
return state;
|
|
450
|
+
});
|
|
451
|
+
}
|
|
452
|
+
/** Reset EVERYTHING to factory: clears all overrides + skill bodies. Snapshots
|
|
453
|
+
* first, so this is fully reversible via rollback. Keeps the master enabled
|
|
454
|
+
* flag (resetting content is orthogonal to the on/off switch). */
|
|
455
|
+
export function resetAllToFactory() {
|
|
456
|
+
return withStateLock(() => {
|
|
457
|
+
try {
|
|
458
|
+
snapshotCurrentUnlocked('reset all to factory');
|
|
459
|
+
}
|
|
460
|
+
catch { /* best-effort */ }
|
|
461
|
+
const prior = readStateFromDisk();
|
|
462
|
+
// Wipe the skill body files.
|
|
463
|
+
try {
|
|
464
|
+
rmSync(skillsDir(), { recursive: true, force: true });
|
|
465
|
+
}
|
|
466
|
+
catch { /* ignore */ }
|
|
467
|
+
const next = { schemaVersion: SCHEMA_VERSION };
|
|
468
|
+
// Preserve the master switch across a content reset.
|
|
469
|
+
if (prior.enabled !== undefined)
|
|
470
|
+
next.enabled = prior.enabled;
|
|
471
|
+
writeStateUnlocked(next);
|
|
472
|
+
return next;
|
|
473
|
+
});
|
|
474
|
+
}
|
|
475
|
+
/** Roll the current state back to a snapshot's contents. Non-destructive: the
|
|
476
|
+
* pre-rollback state is snapshotted first, so a rollback can itself be undone
|
|
477
|
+
* by rolling forward to that new snapshot. */
|
|
478
|
+
export function rollbackToSnapshot(id) {
|
|
479
|
+
const target = readSnapshotState(id);
|
|
480
|
+
if (!target)
|
|
481
|
+
throw new Error('snapshot_not_found');
|
|
482
|
+
return withStateLock(() => {
|
|
483
|
+
try {
|
|
484
|
+
snapshotCurrentUnlocked(`rollback to ${id}`);
|
|
485
|
+
}
|
|
486
|
+
catch { /* best-effort */ }
|
|
487
|
+
// Restore skill bodies from the snapshot dir.
|
|
488
|
+
try {
|
|
489
|
+
rmSync(skillsDir(), { recursive: true, force: true });
|
|
490
|
+
}
|
|
491
|
+
catch { /* ignore */ }
|
|
492
|
+
const snapSkills = join(snapshotDir(id), 'skills');
|
|
493
|
+
if (existsSync(snapSkills)) {
|
|
494
|
+
try {
|
|
495
|
+
cpSync(snapSkills, skillsDir(), { recursive: true });
|
|
496
|
+
}
|
|
497
|
+
catch { /* best-effort */ }
|
|
498
|
+
}
|
|
499
|
+
writeStateUnlocked(target);
|
|
500
|
+
return target;
|
|
501
|
+
});
|
|
502
|
+
}
|
|
503
|
+
/** Replace the entire state atomically (used by bundle import after diff
|
|
504
|
+
* confirmation). Snapshots first. `skillBodies` maps skill name → SKILL.md so
|
|
505
|
+
* the .md files are materialised alongside the state pointers. */
|
|
506
|
+
export function replaceState(next, skillBodies, label) {
|
|
507
|
+
return withStateLock(() => {
|
|
508
|
+
try {
|
|
509
|
+
snapshotCurrentUnlocked(label);
|
|
510
|
+
}
|
|
511
|
+
catch { /* best-effort */ }
|
|
512
|
+
const clean = coerceState(next);
|
|
513
|
+
// Rewrite skill body files to exactly match the incoming set.
|
|
514
|
+
try {
|
|
515
|
+
rmSync(skillsDir(), { recursive: true, force: true });
|
|
516
|
+
}
|
|
517
|
+
catch { /* ignore */ }
|
|
518
|
+
if (clean.builtinSkills) {
|
|
519
|
+
mkdirSync(skillsDir(), { recursive: true });
|
|
520
|
+
for (const [name, entry] of Object.entries(clean.builtinSkills)) {
|
|
521
|
+
if (entry.body === undefined)
|
|
522
|
+
continue;
|
|
523
|
+
const body = skillBodies[name];
|
|
524
|
+
if (typeof body === 'string') {
|
|
525
|
+
atomicWriteFileSync(skillOverridePath(name), body);
|
|
526
|
+
}
|
|
527
|
+
else {
|
|
528
|
+
// Body marked present but no text supplied — drop the marker so state
|
|
529
|
+
// never references a missing file.
|
|
530
|
+
delete entry.body;
|
|
531
|
+
if (entry.body === undefined && !entry.disabled)
|
|
532
|
+
delete clean.builtinSkills[name];
|
|
533
|
+
}
|
|
534
|
+
}
|
|
535
|
+
if (clean.builtinSkills && !Object.keys(clean.builtinSkills).length)
|
|
536
|
+
delete clean.builtinSkills;
|
|
537
|
+
}
|
|
538
|
+
writeStateUnlocked(clean);
|
|
539
|
+
return clean;
|
|
540
|
+
});
|
|
541
|
+
}
|
|
542
|
+
//# sourceMappingURL=customization-store.js.map
|