botmux 2.107.0 → 2.108.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/README.en.md +17 -14
- package/README.md +19 -14
- package/dist/adapters/backend/sandbox.d.ts +3 -1
- package/dist/adapters/backend/sandbox.d.ts.map +1 -1
- package/dist/adapters/backend/sandbox.js +19 -3
- package/dist/adapters/backend/sandbox.js.map +1 -1
- package/dist/adapters/backend/tmux-backend.d.ts.map +1 -1
- package/dist/adapters/backend/tmux-backend.js +16 -1
- package/dist/adapters/backend/tmux-backend.js.map +1 -1
- package/dist/adapters/backend/tmux-pipe-backend.d.ts +24 -15
- package/dist/adapters/backend/tmux-pipe-backend.d.ts.map +1 -1
- package/dist/adapters/backend/tmux-pipe-backend.js +75 -43
- package/dist/adapters/backend/tmux-pipe-backend.js.map +1 -1
- package/dist/adapters/cli/genius.d.ts.map +1 -1
- package/dist/adapters/cli/genius.js +9 -15
- package/dist/adapters/cli/genius.js.map +1 -1
- package/dist/adapters/cli/grok.d.ts +73 -0
- package/dist/adapters/cli/grok.d.ts.map +1 -0
- package/dist/adapters/cli/grok.js +298 -0
- package/dist/adapters/cli/grok.js.map +1 -0
- package/dist/adapters/cli/oh-my-pi.d.ts.map +1 -1
- package/dist/adapters/cli/oh-my-pi.js +133 -12
- package/dist/adapters/cli/oh-my-pi.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 +3 -1
- package/dist/adapters/cli/registry.js.map +1 -1
- package/dist/adapters/cli/shared-hints.d.ts +8 -4
- package/dist/adapters/cli/shared-hints.d.ts.map +1 -1
- package/dist/adapters/cli/shared-hints.js +8 -4
- package/dist/adapters/cli/shared-hints.js.map +1 -1
- package/dist/adapters/cli/types.d.ts +18 -16
- package/dist/adapters/cli/types.d.ts.map +1 -1
- package/dist/adapters/hook-installer.d.ts +5 -4
- package/dist/adapters/hook-installer.d.ts.map +1 -1
- package/dist/adapters/hook-installer.js +42 -0
- package/dist/adapters/hook-installer.js.map +1 -1
- package/dist/cli/send-dispatch.d.ts +21 -0
- package/dist/cli/send-dispatch.d.ts.map +1 -1
- package/dist/cli/send-dispatch.js +159 -0
- package/dist/cli/send-dispatch.js.map +1 -1
- package/dist/cli/session-list-liveness.d.ts +22 -0
- package/dist/cli/session-list-liveness.d.ts.map +1 -0
- package/dist/cli/session-list-liveness.js +22 -0
- package/dist/cli/session-list-liveness.js.map +1 -0
- package/dist/cli.d.ts.map +1 -1
- package/dist/cli.js +182 -33
- package/dist/cli.js.map +1 -1
- package/dist/core/ask-types.d.ts +4 -0
- package/dist/core/ask-types.d.ts.map +1 -1
- package/dist/core/ask-types.js +10 -0
- package/dist/core/ask-types.js.map +1 -1
- package/dist/core/cost-calculator.d.ts.map +1 -1
- package/dist/core/cost-calculator.js +35 -13
- package/dist/core/cost-calculator.js.map +1 -1
- package/dist/core/dashboard-ipc-server.d.ts.map +1 -1
- package/dist/core/dashboard-ipc-server.js +89 -16
- package/dist/core/dashboard-ipc-server.js.map +1 -1
- package/dist/core/dashboard-rows.d.ts.map +1 -1
- package/dist/core/dashboard-rows.js +6 -2
- package/dist/core/dashboard-rows.js.map +1 -1
- package/dist/core/dashboard-url.d.ts +6 -5
- package/dist/core/dashboard-url.d.ts.map +1 -1
- package/dist/core/dashboard-url.js +11 -8
- package/dist/core/dashboard-url.js.map +1 -1
- package/dist/core/maintenance.d.ts +11 -8
- package/dist/core/maintenance.d.ts.map +1 -1
- package/dist/core/maintenance.js +45 -20
- package/dist/core/maintenance.js.map +1 -1
- package/dist/core/per-bot-env.d.ts.map +1 -1
- package/dist/core/per-bot-env.js +4 -0
- package/dist/core/per-bot-env.js.map +1 -1
- package/dist/core/session-discovery.d.ts.map +1 -1
- package/dist/core/session-discovery.js +4 -0
- package/dist/core/session-discovery.js.map +1 -1
- package/dist/core/skills/cli-admin-command.d.ts.map +1 -1
- package/dist/core/skills/cli-admin-command.js +8 -2
- package/dist/core/skills/cli-admin-command.js.map +1 -1
- package/dist/core/skills/im-command.d.ts.map +1 -1
- package/dist/core/skills/im-command.js +3 -1
- package/dist/core/skills/im-command.js.map +1 -1
- package/dist/core/skills/sources.d.ts +33 -1
- package/dist/core/skills/sources.d.ts.map +1 -1
- package/dist/core/skills/sources.js +97 -0
- package/dist/core/skills/sources.js.map +1 -1
- package/dist/core/skills/types.d.ts +8 -0
- package/dist/core/skills/types.d.ts.map +1 -1
- package/dist/core/terminal-url.d.ts.map +1 -1
- package/dist/core/terminal-url.js +12 -2
- package/dist/core/terminal-url.js.map +1 -1
- package/dist/core/terminal-write-auth.d.ts +34 -0
- package/dist/core/terminal-write-auth.d.ts.map +1 -0
- package/dist/core/terminal-write-auth.js +76 -0
- package/dist/core/terminal-write-auth.js.map +1 -0
- package/dist/core/tmux-recovery.d.ts +11 -0
- package/dist/core/tmux-recovery.d.ts.map +1 -0
- package/dist/core/tmux-recovery.js +19 -0
- package/dist/core/tmux-recovery.js.map +1 -0
- package/dist/core/types.d.ts +10 -4
- package/dist/core/types.d.ts.map +1 -1
- package/dist/core/types.js.map +1 -1
- package/dist/core/update-check.d.ts +2 -2
- package/dist/core/update-check.js +2 -2
- package/dist/core/worker-pool.d.ts +3 -0
- package/dist/core/worker-pool.d.ts.map +1 -1
- package/dist/core/worker-pool.js +70 -3
- package/dist/core/worker-pool.js.map +1 -1
- package/dist/daemon.d.ts.map +1 -1
- package/dist/daemon.js +15 -8
- package/dist/daemon.js.map +1 -1
- package/dist/dashboard/auth.d.ts +1 -1
- package/dist/dashboard/auth.d.ts.map +1 -1
- package/dist/dashboard/auth.js +7 -2
- package/dist/dashboard/auth.js.map +1 -1
- package/dist/dashboard/bot-payload.d.ts +3 -0
- package/dist/dashboard/bot-payload.d.ts.map +1 -1
- package/dist/dashboard/bot-payload.js +3 -0
- package/dist/dashboard/bot-payload.js.map +1 -1
- package/dist/dashboard/connector-api.d.ts.map +1 -1
- package/dist/dashboard/connector-api.js +39 -13
- package/dist/dashboard/connector-api.js.map +1 -1
- package/dist/dashboard/history-senders.d.ts +37 -0
- package/dist/dashboard/history-senders.d.ts.map +1 -0
- package/dist/dashboard/history-senders.js +60 -0
- package/dist/dashboard/history-senders.js.map +1 -0
- package/dist/dashboard/roles-batch.d.ts +31 -0
- package/dist/dashboard/roles-batch.d.ts.map +1 -0
- package/dist/dashboard/roles-batch.js +87 -0
- package/dist/dashboard/roles-batch.js.map +1 -0
- package/dist/dashboard/settings-card-model.d.ts +4 -2
- package/dist/dashboard/settings-card-model.d.ts.map +1 -1
- package/dist/dashboard/settings-card-model.js +13 -5
- package/dist/dashboard/settings-card-model.js.map +1 -1
- package/dist/dashboard/settings-write-applier.d.ts +4 -1
- package/dist/dashboard/settings-write-applier.d.ts.map +1 -1
- package/dist/dashboard/settings-write-applier.js +6 -1
- package/dist/dashboard/settings-write-applier.js.map +1 -1
- package/dist/dashboard/skill-install-request.d.ts +4 -0
- package/dist/dashboard/skill-install-request.d.ts.map +1 -1
- package/dist/dashboard/skill-install-request.js +11 -1
- package/dist/dashboard/skill-install-request.js.map +1 -1
- package/dist/dashboard/trigger-api.d.ts +9 -1
- package/dist/dashboard/trigger-api.d.ts.map +1 -1
- package/dist/dashboard/trigger-api.js +48 -10
- package/dist/dashboard/trigger-api.js.map +1 -1
- package/dist/dashboard/web/app.d.ts.map +1 -1
- package/dist/dashboard/web/app.js +286 -271
- package/dist/dashboard/web/app.js.map +1 -1
- package/dist/dashboard/web/bot-defaults-page.d.ts +26 -0
- package/dist/dashboard/web/bot-defaults-page.d.ts.map +1 -1
- package/dist/dashboard/web/bot-defaults-page.js +1408 -12
- package/dist/dashboard/web/bot-defaults-page.js.map +1 -1
- package/dist/dashboard/web/bot-defaults.d.ts +91 -4
- package/dist/dashboard/web/bot-defaults.d.ts.map +1 -1
- package/dist/dashboard/web/bot-defaults.js +43 -2141
- package/dist/dashboard/web/bot-defaults.js.map +1 -1
- package/dist/dashboard/web/bot-onboarding.d.ts +6 -1
- package/dist/dashboard/web/bot-onboarding.d.ts.map +1 -1
- package/dist/dashboard/web/bot-onboarding.js +261 -306
- package/dist/dashboard/web/bot-onboarding.js.map +1 -1
- package/dist/dashboard/web/connectors-page.d.ts +4 -0
- package/dist/dashboard/web/connectors-page.d.ts.map +1 -1
- package/dist/dashboard/web/connectors-page.js +228 -48
- package/dist/dashboard/web/connectors-page.js.map +1 -1
- package/dist/dashboard/web/dashboard-api.d.ts +9 -0
- package/dist/dashboard/web/dashboard-api.d.ts.map +1 -0
- package/dist/dashboard/web/dashboard-api.js +18 -0
- package/dist/dashboard/web/dashboard-api.js.map +1 -0
- package/dist/dashboard/web/dashboard-components.d.ts +92 -0
- package/dist/dashboard/web/dashboard-components.d.ts.map +1 -0
- package/dist/dashboard/web/dashboard-components.js +250 -0
- package/dist/dashboard/web/dashboard-components.js.map +1 -0
- package/dist/dashboard/web/dashboard-routes.d.ts.map +1 -1
- package/dist/dashboard/web/dashboard-routes.js +30 -183
- package/dist/dashboard/web/dashboard-routes.js.map +1 -1
- package/dist/dashboard/web/floating-scrollbars.d.ts +2 -0
- package/dist/dashboard/web/floating-scrollbars.d.ts.map +1 -0
- package/dist/dashboard/web/floating-scrollbars.js +264 -0
- package/dist/dashboard/web/floating-scrollbars.js.map +1 -0
- package/dist/dashboard/web/groups-api.d.ts +36 -0
- package/dist/dashboard/web/groups-api.d.ts.map +1 -0
- package/dist/dashboard/web/groups-api.js +44 -0
- package/dist/dashboard/web/groups-api.js.map +1 -0
- package/dist/dashboard/web/groups-page.d.ts.map +1 -1
- package/dist/dashboard/web/groups-page.js +746 -15
- package/dist/dashboard/web/groups-page.js.map +1 -1
- package/dist/dashboard/web/groups.d.ts +51 -18
- package/dist/dashboard/web/groups.d.ts.map +1 -1
- package/dist/dashboard/web/groups.js +145 -1096
- package/dist/dashboard/web/groups.js.map +1 -1
- package/dist/dashboard/web/i18n.d.ts.map +1 -1
- package/dist/dashboard/web/i18n.js +545 -255
- package/dist/dashboard/web/i18n.js.map +1 -1
- package/dist/dashboard/web/insights-page.d.ts.map +1 -1
- package/dist/dashboard/web/insights-page.js +1047 -14
- package/dist/dashboard/web/insights-page.js.map +1 -1
- package/dist/dashboard/web/insights.d.ts +177 -7
- package/dist/dashboard/web/insights.d.ts.map +1 -1
- package/dist/dashboard/web/insights.js +187 -1926
- package/dist/dashboard/web/insights.js.map +1 -1
- package/dist/dashboard/web/legacy-workflow-page.d.ts +3 -0
- package/dist/dashboard/web/legacy-workflow-page.d.ts.map +1 -0
- package/dist/dashboard/web/legacy-workflow-page.js +717 -0
- package/dist/dashboard/web/legacy-workflow-page.js.map +1 -0
- package/dist/dashboard/web/monitor-room.d.ts.map +1 -1
- package/dist/dashboard/web/monitor-room.js +10 -8
- package/dist/dashboard/web/monitor-room.js.map +1 -1
- package/dist/dashboard/web/monitoring-page.d.ts.map +1 -1
- package/dist/dashboard/web/monitoring-page.js +188 -14
- package/dist/dashboard/web/monitoring-page.js.map +1 -1
- package/dist/dashboard/web/office-page.d.ts.map +1 -1
- package/dist/dashboard/web/office-page.js +11 -23
- package/dist/dashboard/web/office-page.js.map +1 -1
- package/dist/dashboard/web/overview-page.d.ts.map +1 -1
- package/dist/dashboard/web/overview-page.js +141 -147
- package/dist/dashboard/web/overview-page.js.map +1 -1
- package/dist/dashboard/web/overview.d.ts +0 -1
- package/dist/dashboard/web/overview.d.ts.map +1 -1
- package/dist/dashboard/web/overview.js +3 -275
- package/dist/dashboard/web/overview.js.map +1 -1
- package/dist/dashboard/web/preferences.d.ts +1 -6
- package/dist/dashboard/web/preferences.d.ts.map +1 -1
- package/dist/dashboard/web/preferences.js +0 -21
- package/dist/dashboard/web/preferences.js.map +1 -1
- package/dist/dashboard/web/role-batch.d.ts +9 -0
- package/dist/dashboard/web/role-batch.d.ts.map +1 -0
- package/dist/dashboard/web/role-batch.js +42 -0
- package/dist/dashboard/web/role-batch.js.map +1 -0
- package/dist/dashboard/web/roles-page.d.ts.map +1 -1
- package/dist/dashboard/web/roles-page.js +538 -13
- package/dist/dashboard/web/roles-page.js.map +1 -1
- package/dist/dashboard/web/roles.d.ts +98 -1
- package/dist/dashboard/web/roles.d.ts.map +1 -1
- package/dist/dashboard/web/roles.js +117 -903
- package/dist/dashboard/web/roles.js.map +1 -1
- package/dist/dashboard/web/schedules-page.d.ts.map +1 -1
- package/dist/dashboard/web/schedules-page.js +82 -24
- package/dist/dashboard/web/schedules-page.js.map +1 -1
- package/dist/dashboard/web/sessions-kanban.d.ts +67 -0
- package/dist/dashboard/web/sessions-kanban.d.ts.map +1 -0
- package/dist/dashboard/web/sessions-kanban.js +481 -0
- package/dist/dashboard/web/sessions-kanban.js.map +1 -0
- package/dist/dashboard/web/sessions-page.d.ts +4 -0
- package/dist/dashboard/web/sessions-page.d.ts.map +1 -1
- package/dist/dashboard/web/sessions-page.js +1633 -18
- package/dist/dashboard/web/sessions-page.js.map +1 -1
- package/dist/dashboard/web/sessions.d.ts +45 -4
- package/dist/dashboard/web/sessions.d.ts.map +1 -1
- package/dist/dashboard/web/sessions.js +53 -2535
- package/dist/dashboard/web/sessions.js.map +1 -1
- package/dist/dashboard/web/settings-page.d.ts +0 -2
- package/dist/dashboard/web/settings-page.d.ts.map +1 -1
- package/dist/dashboard/web/settings-page.js +127 -117
- package/dist/dashboard/web/settings-page.js.map +1 -1
- package/dist/dashboard/web/skills-page.d.ts +10 -1
- package/dist/dashboard/web/skills-page.d.ts.map +1 -1
- package/dist/dashboard/web/skills-page.js +235 -93
- package/dist/dashboard/web/skills-page.js.map +1 -1
- package/dist/dashboard/web/team-federation-page.d.ts.map +1 -1
- package/dist/dashboard/web/team-federation-page.js +446 -28
- package/dist/dashboard/web/team-federation-page.js.map +1 -1
- package/dist/dashboard/web/team-federation.d.ts +91 -2
- package/dist/dashboard/web/team-federation.d.ts.map +1 -1
- package/dist/dashboard/web/team-federation.js +87 -474
- package/dist/dashboard/web/team-federation.js.map +1 -1
- package/dist/dashboard/web/theme-menu.d.ts +1 -0
- package/dist/dashboard/web/theme-menu.d.ts.map +1 -1
- package/dist/dashboard/web/theme-menu.js +79 -20
- package/dist/dashboard/web/theme-menu.js.map +1 -1
- package/dist/dashboard/web/ui.d.ts +1 -2
- package/dist/dashboard/web/ui.d.ts.map +1 -1
- package/dist/dashboard/web/ui.js +8 -20
- package/dist/dashboard/web/ui.js.map +1 -1
- package/dist/dashboard/web/v3-api.d.ts +16 -0
- package/dist/dashboard/web/v3-api.d.ts.map +1 -0
- package/dist/dashboard/web/v3-api.js +21 -0
- package/dist/dashboard/web/v3-api.js.map +1 -0
- package/dist/dashboard/web/v3-components.d.ts +2 -0
- package/dist/dashboard/web/v3-components.d.ts.map +1 -0
- package/dist/dashboard/web/v3-components.js +290 -0
- package/dist/dashboard/web/v3-components.js.map +1 -0
- package/dist/dashboard/web/v3-model.d.ts +80 -0
- package/dist/dashboard/web/v3-model.d.ts.map +1 -0
- package/dist/dashboard/web/v3-model.js +240 -0
- package/dist/dashboard/web/v3-model.js.map +1 -0
- package/dist/dashboard/web/v3-page.d.ts.map +1 -1
- package/dist/dashboard/web/v3-page.js +2 -22
- package/dist/dashboard/web/v3-page.js.map +1 -1
- package/dist/dashboard/web/v3-terminal.d.ts +14 -0
- package/dist/dashboard/web/v3-terminal.d.ts.map +1 -1
- package/dist/dashboard/web/v3-terminal.js +31 -19
- package/dist/dashboard/web/v3-terminal.js.map +1 -1
- package/dist/dashboard/web/webhook-logs-page.d.ts +16 -0
- package/dist/dashboard/web/webhook-logs-page.d.ts.map +1 -0
- package/dist/dashboard/web/webhook-logs-page.js +195 -0
- package/dist/dashboard/web/webhook-logs-page.js.map +1 -0
- package/dist/dashboard/web/whiteboards-page.d.ts.map +1 -1
- package/dist/dashboard/web/whiteboards-page.js +18 -23
- package/dist/dashboard/web/whiteboards-page.js.map +1 -1
- package/dist/dashboard/web/workflow-version-switch.d.ts +8 -0
- package/dist/dashboard/web/workflow-version-switch.d.ts.map +1 -0
- package/dist/dashboard/web/workflow-version-switch.js +9 -0
- package/dist/dashboard/web/workflow-version-switch.js.map +1 -0
- package/dist/dashboard/web/workflows.d.ts +272 -1
- package/dist/dashboard/web/workflows.d.ts.map +1 -1
- package/dist/dashboard/web/workflows.js +211 -1397
- package/dist/dashboard/web/workflows.js.map +1 -1
- package/dist/dashboard/webhook-routes.d.ts.map +1 -1
- package/dist/dashboard/webhook-routes.js +92 -39
- package/dist/dashboard/webhook-routes.js.map +1 -1
- package/dist/dashboard-web/app.js +1 -65
- package/dist/dashboard-web/brand-logo.png +0 -0
- package/dist/dashboard-web/chunks/bot-defaults-page-HSQ6HR3R.js +1 -0
- package/dist/dashboard-web/chunks/chunk-6TPODDDC.js +1 -0
- package/dist/dashboard-web/chunks/chunk-73EJP2MO.js +1 -0
- package/dist/dashboard-web/chunks/chunk-BRTZFELS.js +1 -0
- package/dist/dashboard-web/chunks/chunk-EVK77ASG.js +1 -0
- package/dist/dashboard-web/chunks/chunk-R3FXBFQH.js +1 -0
- package/dist/dashboard-web/chunks/chunk-VRLL7SNU.js +1 -0
- package/dist/dashboard-web/chunks/chunk-XCPSHD3G.js +37 -0
- package/dist/dashboard-web/chunks/chunk-XJ7BGPJH.js +1 -0
- package/dist/dashboard-web/chunks/chunk-YVRWYGXR.js +1 -0
- package/dist/dashboard-web/chunks/chunk-ZJING6FY.js +66 -0
- package/dist/dashboard-web/chunks/connectors-page-ODUA5UCW.js +1 -0
- package/dist/dashboard-web/chunks/groups-page-OYX5M6NK.js +8 -0
- package/dist/dashboard-web/chunks/insights-page-YCQO6OCR.js +22 -0
- package/dist/dashboard-web/chunks/legacy-workflow-page-XJAUNONP.js +2 -0
- package/dist/dashboard-web/chunks/{monitor-room-RFX4HPS5.js → monitor-room-WTZNYAFV.js} +17 -15
- package/dist/dashboard-web/chunks/monitoring-page-R6LJUK7G.js +2 -0
- package/dist/dashboard-web/chunks/office-page-4OXK3GNR.js +1 -0
- package/dist/dashboard-web/chunks/overview-page-4MVEJY6U.js +1 -0
- package/dist/dashboard-web/chunks/roles-page-NQDW27VV.js +1 -0
- package/dist/dashboard-web/chunks/schedules-page-JRNKYHOX.js +1 -0
- package/dist/dashboard-web/chunks/sessions-page-LF7UVI7B.js +3 -0
- package/dist/dashboard-web/chunks/settings-page-WGW7KQQS.js +2 -0
- package/dist/dashboard-web/chunks/skills-page-AMD4XP3T.js +3 -0
- package/dist/dashboard-web/chunks/team-federation-page-SYG3K4GG.js +1 -0
- package/dist/dashboard-web/chunks/v3-page-6NFFWNUK.js +94 -0
- package/dist/dashboard-web/chunks/whiteboards-page-FBRUK2AS.js +1 -0
- package/dist/dashboard-web/favicon.png +0 -0
- package/dist/dashboard-web/index.html +5 -69
- package/dist/dashboard-web/style.css +18835 -7211
- package/dist/dashboard.js +150 -32
- package/dist/dashboard.js.map +1 -1
- package/dist/global-config.d.ts +2 -2
- package/dist/global-config.d.ts.map +1 -1
- package/dist/i18n/en.d.ts.map +1 -1
- package/dist/i18n/en.js +3 -0
- package/dist/i18n/en.js.map +1 -1
- package/dist/i18n/zh.d.ts.map +1 -1
- package/dist/i18n/zh.js +3 -0
- package/dist/i18n/zh.js.map +1 -1
- package/dist/im/lark/card-builder.d.ts +7 -5
- package/dist/im/lark/card-builder.d.ts.map +1 -1
- package/dist/im/lark/card-builder.js +10 -7
- 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 +25 -1
- package/dist/im/lark/card-handler.js.map +1 -1
- package/dist/im/lark/event-dispatcher.d.ts.map +1 -1
- package/dist/im/lark/event-dispatcher.js +84 -0
- package/dist/im/lark/event-dispatcher.js.map +1 -1
- package/dist/platform/binding.d.ts +9 -0
- package/dist/platform/binding.d.ts.map +1 -1
- package/dist/platform/binding.js +14 -0
- package/dist/platform/binding.js.map +1 -1
- package/dist/platform/tunnel-client.d.ts.map +1 -1
- package/dist/platform/tunnel-client.js +9 -0
- package/dist/platform/tunnel-client.js.map +1 -1
- package/dist/services/bot-config-store.d.ts +1 -1
- package/dist/services/bot-config-store.d.ts.map +1 -1
- package/dist/services/bot-config-store.js +11 -5
- package/dist/services/bot-config-store.js.map +1 -1
- package/dist/services/file-bridge-path.d.ts +8 -0
- package/dist/services/file-bridge-path.d.ts.map +1 -0
- package/dist/services/file-bridge-path.js +75 -0
- package/dist/services/file-bridge-path.js.map +1 -0
- package/dist/services/grok-paths.d.ts +27 -0
- package/dist/services/grok-paths.d.ts.map +1 -0
- package/dist/services/grok-paths.js +106 -0
- package/dist/services/grok-paths.js.map +1 -0
- package/dist/services/grok-transcript.d.ts +67 -0
- package/dist/services/grok-transcript.d.ts.map +1 -0
- package/dist/services/grok-transcript.js +630 -0
- package/dist/services/grok-transcript.js.map +1 -0
- package/dist/services/hermes-session-filter.d.ts +28 -0
- package/dist/services/hermes-session-filter.d.ts.map +1 -0
- package/dist/services/hermes-session-filter.js +53 -0
- package/dist/services/hermes-session-filter.js.map +1 -0
- package/dist/services/hermes-transcript.d.ts +3 -0
- package/dist/services/hermes-transcript.d.ts.map +1 -1
- package/dist/services/hermes-transcript.js +20 -2
- package/dist/services/hermes-transcript.js.map +1 -1
- package/dist/services/resumable-session-discovery.d.ts +3 -0
- package/dist/services/resumable-session-discovery.d.ts.map +1 -1
- package/dist/services/resumable-session-discovery.js +6 -1
- package/dist/services/resumable-session-discovery.js.map +1 -1
- package/dist/services/skill-registry-store.d.ts +9 -0
- package/dist/services/skill-registry-store.d.ts.map +1 -1
- package/dist/services/skill-registry-store.js +304 -1
- package/dist/services/skill-registry-store.js.map +1 -1
- package/dist/services/structured-bridge-clis.d.ts +29 -0
- package/dist/services/structured-bridge-clis.d.ts.map +1 -0
- package/dist/services/structured-bridge-clis.js +76 -0
- package/dist/services/structured-bridge-clis.js.map +1 -0
- package/dist/services/trigger-log-store.d.ts +59 -0
- package/dist/services/trigger-log-store.d.ts.map +1 -1
- package/dist/services/trigger-log-store.js +81 -10
- package/dist/services/trigger-log-store.js.map +1 -1
- package/dist/services/usage-ledger.d.ts +4 -1
- package/dist/services/usage-ledger.d.ts.map +1 -1
- package/dist/services/usage-ledger.js +48 -10
- package/dist/services/usage-ledger.js.map +1 -1
- package/dist/services/webhook-audit.d.ts +10 -0
- package/dist/services/webhook-audit.d.ts.map +1 -0
- package/dist/services/webhook-audit.js +116 -0
- package/dist/services/webhook-audit.js.map +1 -0
- package/dist/setup/bot-config-editor.d.ts.map +1 -1
- package/dist/setup/bot-config-editor.js +2 -0
- package/dist/setup/bot-config-editor.js.map +1 -1
- package/dist/setup/ensure-tmux.d.ts +26 -12
- package/dist/setup/ensure-tmux.d.ts.map +1 -1
- package/dist/setup/ensure-tmux.js +85 -18
- package/dist/setup/ensure-tmux.js.map +1 -1
- package/dist/skills/definitions.d.ts.map +1 -1
- package/dist/skills/definitions.js +14 -1
- package/dist/skills/definitions.js.map +1 -1
- package/dist/skills/injection-mode.d.ts +16 -0
- package/dist/skills/injection-mode.d.ts.map +1 -1
- package/dist/skills/injection-mode.js +25 -0
- package/dist/skills/injection-mode.js.map +1 -1
- package/dist/types.d.ts +9 -0
- package/dist/types.d.ts.map +1 -1
- package/dist/utils/global-install.d.ts +22 -0
- package/dist/utils/global-install.d.ts.map +1 -0
- package/dist/utils/global-install.js +106 -0
- package/dist/utils/global-install.js.map +1 -0
- package/dist/utils/install-diagnostics.d.ts +1 -1
- package/dist/utils/install-diagnostics.d.ts.map +1 -1
- package/dist/utils/install-diagnostics.js +6 -4
- package/dist/utils/install-diagnostics.js.map +1 -1
- package/dist/utils/install-info.d.ts +2 -0
- package/dist/utils/install-info.d.ts.map +1 -1
- package/dist/utils/install-info.js +10 -4
- package/dist/utils/install-info.js.map +1 -1
- package/dist/worker.js +293 -172
- package/dist/worker.js.map +1 -1
- package/dist/workflows/events/payloads.d.ts +10 -10
- package/dist/workflows/events/schema.d.ts +28 -28
- package/package.json +8 -7
- package/dist/dashboard/web/connectors.d.ts +0 -2
- package/dist/dashboard/web/connectors.d.ts.map +0 -1
- package/dist/dashboard/web/connectors.js +0 -2
- package/dist/dashboard/web/connectors.js.map +0 -1
- package/dist/dashboard/web/office.d.ts +0 -2
- package/dist/dashboard/web/office.d.ts.map +0 -1
- package/dist/dashboard/web/office.js +0 -2
- package/dist/dashboard/web/office.js.map +0 -1
- package/dist/dashboard/web/schedules.d.ts +0 -2
- package/dist/dashboard/web/schedules.d.ts.map +0 -1
- package/dist/dashboard/web/schedules.js +0 -2
- package/dist/dashboard/web/schedules.js.map +0 -1
- package/dist/dashboard/web/settings.d.ts +0 -2
- package/dist/dashboard/web/settings.d.ts.map +0 -1
- package/dist/dashboard/web/settings.js +0 -2
- package/dist/dashboard/web/settings.js.map +0 -1
- package/dist/dashboard/web/skills.d.ts +0 -2
- package/dist/dashboard/web/skills.d.ts.map +0 -1
- package/dist/dashboard/web/skills.js +0 -2
- package/dist/dashboard/web/skills.js.map +0 -1
- package/dist/dashboard/web/skin-intro.d.ts +0 -4
- package/dist/dashboard/web/skin-intro.d.ts.map +0 -1
- package/dist/dashboard/web/skin-intro.js +0 -49
- package/dist/dashboard/web/skin-intro.js.map +0 -1
- package/dist/dashboard/web/v3.d.ts +0 -3
- package/dist/dashboard/web/v3.d.ts.map +0 -1
- package/dist/dashboard/web/v3.js +0 -539
- package/dist/dashboard/web/v3.js.map +0 -1
- package/dist/dashboard/web/whiteboards.d.ts +0 -2
- package/dist/dashboard/web/whiteboards.d.ts.map +0 -1
- package/dist/dashboard/web/whiteboards.js +0 -2
- package/dist/dashboard/web/whiteboards.js.map +0 -1
- package/dist/dashboard-web/chunks/bot-defaults-page-OCIHPGEU.js +0 -438
- package/dist/dashboard-web/chunks/chunk-3N2PPQVD.js +0 -1
- package/dist/dashboard-web/chunks/chunk-3UJYRR2Q.js +0 -37
- package/dist/dashboard-web/chunks/chunk-5E3MJJL4.js +0 -1
- package/dist/dashboard-web/chunks/chunk-7SZRL6FY.js +0 -1
- package/dist/dashboard-web/chunks/chunk-JTSE5VP6.js +0 -54
- package/dist/dashboard-web/chunks/chunk-LXIK7OUJ.js +0 -1
- package/dist/dashboard-web/chunks/chunk-PE6W3C2C.js +0 -1
- package/dist/dashboard-web/chunks/chunk-QW54DWU3.js +0 -325
- package/dist/dashboard-web/chunks/connectors-IGETYWCP.js +0 -1
- package/dist/dashboard-web/chunks/groups-page-MYBS4ZYJ.js +0 -207
- package/dist/dashboard-web/chunks/insights-page-UPA32V2S.js +0 -309
- package/dist/dashboard-web/chunks/monitoring-page-7T3BESZ2.js +0 -1
- package/dist/dashboard-web/chunks/office-page-6DXYOG55.js +0 -1
- package/dist/dashboard-web/chunks/overview-page-LJSBCQW4.js +0 -1
- package/dist/dashboard-web/chunks/roles-page-ESURTVQH.js +0 -98
- package/dist/dashboard-web/chunks/schedules-LML2ISOT.js +0 -1
- package/dist/dashboard-web/chunks/sessions-YB73XOTU.js +0 -1
- package/dist/dashboard-web/chunks/sessions-page-MCO5QR7Z.js +0 -1
- package/dist/dashboard-web/chunks/settings-page-OSDKNVS3.js +0 -2
- package/dist/dashboard-web/chunks/skills-page-PXBZJ6P6.js +0 -2
- package/dist/dashboard-web/chunks/team-federation-page-TTPVHFPX.js +0 -10
- package/dist/dashboard-web/chunks/v3-page-FVPUL665.js +0 -149
- package/dist/dashboard-web/chunks/whiteboards-page-HLCTYSSV.js +0 -1
- package/dist/dashboard-web/chunks/workflows-FCPM4S4D.js +0 -184
- package/dist/dashboard-web/skins/bluearchive-hero.webp +0 -0
- package/dist/dashboard-web/skins/dragonball-goku.webp +0 -0
- package/dist/dashboard-web/skins/dragonball-wukong.webp +0 -0
- package/dist/dashboard-web/skins/genshin-breeze.webp +0 -0
- package/dist/dashboard-web/skins/ikun-hero.webp +0 -0
- package/dist/dashboard-web/skins/prts-priestess.webp +0 -0
- package/dist/dashboard-web/skins/zzz-hero.webp +0 -0
- package/dist/dashboard-web/skins/zzz-pattern.svg +0 -25
|
@@ -0,0 +1,630 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Reader for Grok Build's per-session ACP update stream.
|
|
3
|
+
*
|
|
4
|
+
* Path: `$GROK_HOME/sessions/<url-encoded-cwd>/<sessionId>/updates.jsonl`
|
|
5
|
+
*
|
|
6
|
+
* Bridge contract (same as Codex/CoCo/Pi): emit only
|
|
7
|
+
* - `user` — real user prompt (`user_message_chunk`)
|
|
8
|
+
* - `assistant_final` — the LAST contiguous run of `agent_message_chunk`s
|
|
9
|
+
* closed by `turn_completed`
|
|
10
|
+
*
|
|
11
|
+
* "Last contiguous run": grok streams progress narration between tool calls
|
|
12
|
+
* as agent_message_chunks too (most real turns carry 2–5 such groups). Codex
|
|
13
|
+
* parity is `phase=final_answer` only — the visible final reply — so any
|
|
14
|
+
* agent-message group followed by a non-message event (tool_call / thought /
|
|
15
|
+
* hook) is **dropped immediately** (buffer cleared, offset advanced). Only a
|
|
16
|
+
* group that reaches `turn_completed` without an intervening non-message
|
|
17
|
+
* event is emitted. This also keeps the 1s poller from rewinding across
|
|
18
|
+
* long tool stretches (hundreds of tool_call_update lines).
|
|
19
|
+
*
|
|
20
|
+
* Mid-turn thoughts / tool calls are ignored so the queue never closes a
|
|
21
|
+
* Lark turn on narration. Type-ahead follow-ups park until the active turn
|
|
22
|
+
* finishes (Grok queue semantics ≈ CoCo), so the transcript stays interleaved
|
|
23
|
+
* user1 → assistant_final1 → user2 → assistant_final2 — CodexBridgeQueue's
|
|
24
|
+
* HOL-block-drop still applies if a steer-like merge ever appears.
|
|
25
|
+
*/
|
|
26
|
+
import { existsSync, statSync, openSync, readSync, closeSync, readdirSync, readFileSync, readlinkSync, } from 'node:fs';
|
|
27
|
+
import { execSync } from 'node:child_process';
|
|
28
|
+
import { platform } from 'node:os';
|
|
29
|
+
import { join } from 'node:path';
|
|
30
|
+
import { encodeGrokCwd, grokSessionsRoot, grokUpdatesPath, grokSummaryPath, resolveGrokCwdBucketDir, } from './grok-paths.js';
|
|
31
|
+
import { isBotmuxInjectedPrompt } from './resumable-session-discovery.js';
|
|
32
|
+
const IS_LINUX = platform() === 'linux';
|
|
33
|
+
const SESSION_UUID_RE = /^[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}$/i;
|
|
34
|
+
const GROK_SESSIONS_ANCHOR = '/.grok/sessions/';
|
|
35
|
+
const TITLE_MAX = 80;
|
|
36
|
+
function truncateTitle(text) {
|
|
37
|
+
const norm = text.replace(/\s+/g, ' ').trim();
|
|
38
|
+
if (!norm)
|
|
39
|
+
return '';
|
|
40
|
+
return norm.length > TITLE_MAX ? `${norm.slice(0, TITLE_MAX - 1)}…` : norm;
|
|
41
|
+
}
|
|
42
|
+
function contentText(content) {
|
|
43
|
+
if (typeof content === 'string')
|
|
44
|
+
return content;
|
|
45
|
+
if (!content || typeof content !== 'object')
|
|
46
|
+
return '';
|
|
47
|
+
const c = content;
|
|
48
|
+
if (typeof c.text === 'string')
|
|
49
|
+
return c.text;
|
|
50
|
+
return '';
|
|
51
|
+
}
|
|
52
|
+
/** Locate updates.jsonl for a session id, optionally scoped to cwd. */
|
|
53
|
+
export function findGrokUpdatesBySessionId(sessionId, cwd) {
|
|
54
|
+
if (!sessionId || !SESSION_UUID_RE.test(sessionId))
|
|
55
|
+
return undefined;
|
|
56
|
+
if (cwd) {
|
|
57
|
+
const p = grokUpdatesPath(sessionId, cwd);
|
|
58
|
+
if (existsSync(p))
|
|
59
|
+
return p;
|
|
60
|
+
}
|
|
61
|
+
const root = grokSessionsRoot();
|
|
62
|
+
if (!existsSync(root))
|
|
63
|
+
return undefined;
|
|
64
|
+
let entries;
|
|
65
|
+
try {
|
|
66
|
+
entries = readdirSync(root);
|
|
67
|
+
}
|
|
68
|
+
catch {
|
|
69
|
+
return undefined;
|
|
70
|
+
}
|
|
71
|
+
for (const name of entries) {
|
|
72
|
+
if (name.endsWith('.sqlite') || name.endsWith('.lock'))
|
|
73
|
+
continue;
|
|
74
|
+
const p = join(root, name, sessionId, 'updates.jsonl');
|
|
75
|
+
if (existsSync(p))
|
|
76
|
+
return p;
|
|
77
|
+
}
|
|
78
|
+
return undefined;
|
|
79
|
+
}
|
|
80
|
+
export function findGrokSummaryBySessionId(sessionId, cwd) {
|
|
81
|
+
if (!sessionId || !SESSION_UUID_RE.test(sessionId))
|
|
82
|
+
return undefined;
|
|
83
|
+
if (cwd) {
|
|
84
|
+
const p = grokSummaryPath(sessionId, cwd);
|
|
85
|
+
if (existsSync(p))
|
|
86
|
+
return p;
|
|
87
|
+
}
|
|
88
|
+
const root = grokSessionsRoot();
|
|
89
|
+
if (!existsSync(root))
|
|
90
|
+
return undefined;
|
|
91
|
+
let entries;
|
|
92
|
+
try {
|
|
93
|
+
entries = readdirSync(root);
|
|
94
|
+
}
|
|
95
|
+
catch {
|
|
96
|
+
return undefined;
|
|
97
|
+
}
|
|
98
|
+
for (const name of entries) {
|
|
99
|
+
if (name.endsWith('.sqlite') || name.endsWith('.lock'))
|
|
100
|
+
continue;
|
|
101
|
+
const p = join(root, name, sessionId, 'summary.json');
|
|
102
|
+
if (existsSync(p))
|
|
103
|
+
return p;
|
|
104
|
+
}
|
|
105
|
+
return undefined;
|
|
106
|
+
}
|
|
107
|
+
/** True when a session dir with summary.json exists (resume preflight). */
|
|
108
|
+
export function grokSessionExists(sessionId, cwd) {
|
|
109
|
+
if (!sessionId)
|
|
110
|
+
return false;
|
|
111
|
+
try {
|
|
112
|
+
// findGrokSummaryBySessionId already prefers cwd then scans every bucket.
|
|
113
|
+
return !!findGrokSummaryBySessionId(sessionId, cwd);
|
|
114
|
+
}
|
|
115
|
+
catch {
|
|
116
|
+
return undefined;
|
|
117
|
+
}
|
|
118
|
+
}
|
|
119
|
+
/** True when the session DIRECTORY exists in any cwd bucket — regardless of
|
|
120
|
+
* summary.json. Grok creates the dir (with summary.json) at TUI startup and
|
|
121
|
+
* REFUSES `--session-id <id>` when the dir already exists ("Session ID is
|
|
122
|
+
* already in use", exit 1) — so a fresh spawn must probe the dir itself, not
|
|
123
|
+
* the resume preflight's summary.json. */
|
|
124
|
+
export function grokSessionDirExists(sessionId, cwd) {
|
|
125
|
+
if (!sessionId || !SESSION_UUID_RE.test(sessionId))
|
|
126
|
+
return false;
|
|
127
|
+
try {
|
|
128
|
+
if (cwd && existsSync(join(resolveGrokCwdBucketDir(cwd), sessionId)))
|
|
129
|
+
return true;
|
|
130
|
+
const root = grokSessionsRoot();
|
|
131
|
+
if (!existsSync(root))
|
|
132
|
+
return false;
|
|
133
|
+
for (const name of readdirSync(root)) {
|
|
134
|
+
if (name.endsWith('.sqlite') || name.endsWith('.lock'))
|
|
135
|
+
continue;
|
|
136
|
+
if (existsSync(join(root, name, sessionId)))
|
|
137
|
+
return true;
|
|
138
|
+
}
|
|
139
|
+
return false;
|
|
140
|
+
}
|
|
141
|
+
catch {
|
|
142
|
+
return false;
|
|
143
|
+
}
|
|
144
|
+
}
|
|
145
|
+
function matchGrokSessionPath(target) {
|
|
146
|
+
// Try the CONFIGURED sessions root first so a custom GROK_HOME is honored,
|
|
147
|
+
// then fall back to the default `/.grok/sessions/` anchor.
|
|
148
|
+
const root = grokSessionsRoot();
|
|
149
|
+
let base;
|
|
150
|
+
let rest;
|
|
151
|
+
if (target.startsWith(root + '/')) {
|
|
152
|
+
base = root;
|
|
153
|
+
rest = target.slice(root.length + 1);
|
|
154
|
+
}
|
|
155
|
+
else {
|
|
156
|
+
const idx = target.indexOf(GROK_SESSIONS_ANCHOR);
|
|
157
|
+
if (idx >= 0) {
|
|
158
|
+
base = target.slice(0, idx + GROK_SESSIONS_ANCHOR.length - 1);
|
|
159
|
+
rest = target.slice(idx + GROK_SESSIONS_ANCHOR.length);
|
|
160
|
+
}
|
|
161
|
+
}
|
|
162
|
+
if (!base || !rest)
|
|
163
|
+
return undefined;
|
|
164
|
+
// …/sessions/<encoded-cwd>/<sessionId>/…
|
|
165
|
+
const parts = rest.split('/').filter(Boolean);
|
|
166
|
+
if (parts.length < 2)
|
|
167
|
+
return undefined;
|
|
168
|
+
const sessionId = parts[1];
|
|
169
|
+
if (!sessionId || !SESSION_UUID_RE.test(sessionId))
|
|
170
|
+
return undefined;
|
|
171
|
+
// Prefer the session dir + updates.jsonl even if the open fd is another file.
|
|
172
|
+
const updatesPath = join(base, parts[0], sessionId, 'updates.jsonl');
|
|
173
|
+
return { sessionId, updatesPath };
|
|
174
|
+
}
|
|
175
|
+
/** Extract the grok session id from any path under the sessions root — used
|
|
176
|
+
* by the worker to detect a `/new` / `/clear` / `/resume` rotation (new
|
|
177
|
+
* session id at the same pid) and re-attach the bridge. */
|
|
178
|
+
export function grokSessionIdFromPath(path) {
|
|
179
|
+
return matchGrokSessionPath(path)?.sessionId;
|
|
180
|
+
}
|
|
181
|
+
/** Bind a live Grok pid to its session via open fds (Linux /proc or lsof). */
|
|
182
|
+
export function findGrokSessionByPid(pid) {
|
|
183
|
+
if (!Number.isInteger(pid) || pid <= 0)
|
|
184
|
+
return undefined;
|
|
185
|
+
if (IS_LINUX) {
|
|
186
|
+
const fdDir = `/proc/${pid}/fd`;
|
|
187
|
+
if (existsSync(fdDir)) {
|
|
188
|
+
let entries;
|
|
189
|
+
try {
|
|
190
|
+
entries = readdirSync(fdDir);
|
|
191
|
+
}
|
|
192
|
+
catch {
|
|
193
|
+
return undefined;
|
|
194
|
+
}
|
|
195
|
+
for (const fd of entries) {
|
|
196
|
+
let target;
|
|
197
|
+
try {
|
|
198
|
+
target = readlinkSync(join(fdDir, fd));
|
|
199
|
+
}
|
|
200
|
+
catch {
|
|
201
|
+
continue;
|
|
202
|
+
}
|
|
203
|
+
if (target.endsWith(' (deleted)'))
|
|
204
|
+
continue;
|
|
205
|
+
const hit = matchGrokSessionPath(target);
|
|
206
|
+
if (hit)
|
|
207
|
+
return hit;
|
|
208
|
+
}
|
|
209
|
+
return undefined;
|
|
210
|
+
}
|
|
211
|
+
}
|
|
212
|
+
let out;
|
|
213
|
+
try {
|
|
214
|
+
out = execSync(`lsof -p ${pid} -Fn`, {
|
|
215
|
+
encoding: 'utf-8',
|
|
216
|
+
stdio: ['pipe', 'pipe', 'pipe'],
|
|
217
|
+
});
|
|
218
|
+
}
|
|
219
|
+
catch {
|
|
220
|
+
return undefined;
|
|
221
|
+
}
|
|
222
|
+
for (const line of out.split('\n')) {
|
|
223
|
+
if (!line.startsWith('n/'))
|
|
224
|
+
continue;
|
|
225
|
+
const hit = matchGrokSessionPath(line.slice(1));
|
|
226
|
+
if (hit)
|
|
227
|
+
return hit;
|
|
228
|
+
}
|
|
229
|
+
return undefined;
|
|
230
|
+
}
|
|
231
|
+
function parseTimestampMs(obj, update) {
|
|
232
|
+
const meta = update?._meta ?? obj?.params?._meta ?? obj?._meta;
|
|
233
|
+
if (meta && typeof meta.agentTimestampMs === 'number')
|
|
234
|
+
return meta.agentTimestampMs;
|
|
235
|
+
if (typeof obj?.timestamp === 'number') {
|
|
236
|
+
// Grok uses seconds-ish unix in some builds and ms in others; treat
|
|
237
|
+
// small values as seconds.
|
|
238
|
+
return obj.timestamp < 1e12 ? obj.timestamp * 1000 : obj.timestamp;
|
|
239
|
+
}
|
|
240
|
+
return Date.now();
|
|
241
|
+
}
|
|
242
|
+
function eventUuid(path, lineStart, update, obj) {
|
|
243
|
+
const meta = update?._meta ?? obj?.params?._meta ?? obj?._meta;
|
|
244
|
+
if (meta && typeof meta.eventId === 'string' && meta.eventId)
|
|
245
|
+
return meta.eventId;
|
|
246
|
+
return `${path}:${lineStart}`;
|
|
247
|
+
}
|
|
248
|
+
/**
|
|
249
|
+
* Increment-read updates.jsonl. Agent chunks of the CURRENT contiguous group
|
|
250
|
+
* are buffered. A non-message event (tool_call / thought / hook) while a
|
|
251
|
+
* group is buffered **drops that group immediately** and advances the offset
|
|
252
|
+
* (narration cannot become the final answer — codex final_answer parity).
|
|
253
|
+
* The next agent chunk starts a fresh group; `turn_completed` emits only
|
|
254
|
+
* whatever group is still buffered. If the file ends mid-group, newOffset
|
|
255
|
+
* rewinds to the group's first chunk so the next poll re-reads it (queue
|
|
256
|
+
* dedups by uuid).
|
|
257
|
+
*/
|
|
258
|
+
export function drainGrokUpdates(path, fromOffset) {
|
|
259
|
+
if (!existsSync(path))
|
|
260
|
+
return { events: [], newOffset: 0, pendingTail: '' };
|
|
261
|
+
let size;
|
|
262
|
+
try {
|
|
263
|
+
size = statSync(path).size;
|
|
264
|
+
}
|
|
265
|
+
catch {
|
|
266
|
+
return { events: [], newOffset: fromOffset, pendingTail: '' };
|
|
267
|
+
}
|
|
268
|
+
let start = fromOffset;
|
|
269
|
+
if (size < start)
|
|
270
|
+
start = 0;
|
|
271
|
+
if (size === start)
|
|
272
|
+
return { events: [], newOffset: start, pendingTail: '' };
|
|
273
|
+
const len = size - start;
|
|
274
|
+
const buf = Buffer.alloc(len);
|
|
275
|
+
const fd = openSync(path, 'r');
|
|
276
|
+
try {
|
|
277
|
+
readSync(fd, buf, 0, len, start);
|
|
278
|
+
}
|
|
279
|
+
finally {
|
|
280
|
+
closeSync(fd);
|
|
281
|
+
}
|
|
282
|
+
const text = buf.toString('utf8');
|
|
283
|
+
const lastNl = text.lastIndexOf('\n');
|
|
284
|
+
const completeText = lastNl >= 0 ? text.slice(0, lastNl + 1) : '';
|
|
285
|
+
const pendingTail = lastNl >= 0 ? text.slice(lastNl + 1) : text;
|
|
286
|
+
// Pure partial-line window (writer mid-flush, no '\n' yet): never advance.
|
|
287
|
+
// ''.split('\n') yields [''] — treating that as a bare newline would push
|
|
288
|
+
// offset by 1 and desync the next poll so the finished line fails JSON.parse
|
|
289
|
+
// and is silently dropped (codex drainCodexRollout keeps newOffset = start).
|
|
290
|
+
if (!completeText) {
|
|
291
|
+
return { events: [], newOffset: start, pendingTail };
|
|
292
|
+
}
|
|
293
|
+
const events = [];
|
|
294
|
+
let agentParts = [];
|
|
295
|
+
let openTurnStartOffset = null;
|
|
296
|
+
let openTurnSessionId;
|
|
297
|
+
let cursor = start;
|
|
298
|
+
let lastFullyConsumedOffset = start;
|
|
299
|
+
for (const line of completeText.split('\n')) {
|
|
300
|
+
if (line.length === 0) {
|
|
301
|
+
cursor += 1; // bare \n
|
|
302
|
+
lastFullyConsumedOffset = cursor;
|
|
303
|
+
continue;
|
|
304
|
+
}
|
|
305
|
+
const lineStart = cursor;
|
|
306
|
+
const lineBytes = Buffer.byteLength(line, 'utf8') + 1; // + \n
|
|
307
|
+
cursor += lineBytes;
|
|
308
|
+
let obj;
|
|
309
|
+
try {
|
|
310
|
+
obj = JSON.parse(line);
|
|
311
|
+
}
|
|
312
|
+
catch {
|
|
313
|
+
lastFullyConsumedOffset = cursor;
|
|
314
|
+
continue;
|
|
315
|
+
}
|
|
316
|
+
const update = obj?.params?.update ?? obj?.update;
|
|
317
|
+
if (!update || typeof update !== 'object') {
|
|
318
|
+
lastFullyConsumedOffset = cursor;
|
|
319
|
+
continue;
|
|
320
|
+
}
|
|
321
|
+
const su = update.sessionUpdate;
|
|
322
|
+
const sessionId = (typeof obj?.params?.sessionId === 'string' && obj.params.sessionId)
|
|
323
|
+
|| (typeof update.sessionId === 'string' && update.sessionId)
|
|
324
|
+
|| undefined;
|
|
325
|
+
const timestampMs = parseTimestampMs(obj, update);
|
|
326
|
+
const uuid = eventUuid(path, lineStart, update, obj);
|
|
327
|
+
if (su === 'user_message_chunk') {
|
|
328
|
+
// Drop any unfinished agent buffer — a new user turn supersedes it.
|
|
329
|
+
agentParts = [];
|
|
330
|
+
openTurnStartOffset = null;
|
|
331
|
+
openTurnSessionId = undefined;
|
|
332
|
+
const textContent = contentText(update.content).trim();
|
|
333
|
+
if (textContent) {
|
|
334
|
+
events.push({
|
|
335
|
+
uuid,
|
|
336
|
+
timestampMs,
|
|
337
|
+
kind: 'user',
|
|
338
|
+
text: textContent,
|
|
339
|
+
sourceSessionId: sessionId,
|
|
340
|
+
});
|
|
341
|
+
}
|
|
342
|
+
lastFullyConsumedOffset = cursor;
|
|
343
|
+
continue;
|
|
344
|
+
}
|
|
345
|
+
if (su === 'agent_message_chunk') {
|
|
346
|
+
const chunk = contentText(update.content);
|
|
347
|
+
if (chunk) {
|
|
348
|
+
if (openTurnStartOffset === null)
|
|
349
|
+
openTurnStartOffset = lineStart;
|
|
350
|
+
if (sessionId)
|
|
351
|
+
openTurnSessionId = sessionId;
|
|
352
|
+
agentParts.push(chunk);
|
|
353
|
+
}
|
|
354
|
+
// Do not advance lastFullyConsumedOffset past open group — handled at end.
|
|
355
|
+
continue;
|
|
356
|
+
}
|
|
357
|
+
if (su === 'turn_completed') {
|
|
358
|
+
// Emit only a still-buffered (post-tool) group. Narration groups were
|
|
359
|
+
// already dropped on the tool_call/thought that followed them.
|
|
360
|
+
const finalText = agentParts.join('').trim();
|
|
361
|
+
agentParts = [];
|
|
362
|
+
openTurnStartOffset = null;
|
|
363
|
+
if (finalText) {
|
|
364
|
+
events.push({
|
|
365
|
+
uuid,
|
|
366
|
+
timestampMs,
|
|
367
|
+
kind: 'assistant_final',
|
|
368
|
+
text: finalText,
|
|
369
|
+
sourceSessionId: sessionId ?? openTurnSessionId,
|
|
370
|
+
});
|
|
371
|
+
}
|
|
372
|
+
openTurnSessionId = undefined;
|
|
373
|
+
lastFullyConsumedOffset = cursor;
|
|
374
|
+
continue;
|
|
375
|
+
}
|
|
376
|
+
// tool_call / thought / hooks / etc. — any buffered agent group is
|
|
377
|
+
// mid-turn narration and can never be the final answer. Drop it and
|
|
378
|
+
// advance past this line so the 1s poller does not rewind through
|
|
379
|
+
// hundreds of tool_call_update events every tick.
|
|
380
|
+
if (agentParts.length > 0) {
|
|
381
|
+
agentParts = [];
|
|
382
|
+
openTurnStartOffset = null;
|
|
383
|
+
openTurnSessionId = undefined;
|
|
384
|
+
}
|
|
385
|
+
lastFullyConsumedOffset = cursor;
|
|
386
|
+
}
|
|
387
|
+
// Mid-group at EOF (final reply still streaming): rewind so agent chunks
|
|
388
|
+
// are re-read next tick.
|
|
389
|
+
const newOffset = openTurnStartOffset !== null
|
|
390
|
+
? openTurnStartOffset
|
|
391
|
+
: (completeText ? start + Buffer.byteLength(completeText, 'utf8') : lastFullyConsumedOffset);
|
|
392
|
+
return { events, newOffset, pendingTail };
|
|
393
|
+
}
|
|
394
|
+
/** Current file size helper for submit-verify baseByte. */
|
|
395
|
+
export function grokFileSize(path) {
|
|
396
|
+
if (!existsSync(path))
|
|
397
|
+
return 0;
|
|
398
|
+
try {
|
|
399
|
+
return statSync(path).size;
|
|
400
|
+
}
|
|
401
|
+
catch {
|
|
402
|
+
return 0;
|
|
403
|
+
}
|
|
404
|
+
}
|
|
405
|
+
function normaliseNewlines(text) {
|
|
406
|
+
return text.replace(/\r\n/g, '\n').replace(/\r/g, '\n');
|
|
407
|
+
}
|
|
408
|
+
/**
|
|
409
|
+
* Scan the bucket-level prompt_history.jsonl from `fromByte` for a submit
|
|
410
|
+
* whose `prompt` equals `expectedText` (modulo newline normalisation — the
|
|
411
|
+
* composer stores multi-line input verbatim with `\n`). prompt_history is
|
|
412
|
+
* written AT SUBMIT TIME even while a turn is running (verified 0.2.93), so
|
|
413
|
+
* this confirms busy-turn type-ahead submits that updates.jsonl (dequeue-time
|
|
414
|
+
* user events) cannot. Returns the owning session id when found.
|
|
415
|
+
*
|
|
416
|
+
* Concurrent safety: the file is cwd-bucket shared. Two workers in the same
|
|
417
|
+
* repo can append identical prompt text under different session_ids. Callers
|
|
418
|
+
* MUST pass `preferSessionId` (from {@link findGrokSessionByPid} of their
|
|
419
|
+
* CLI pid) so we never claim another worker's line. Without a prefer id we
|
|
420
|
+
* only accept a match when all matching lines agree on a single session_id
|
|
421
|
+
* (or have no id); ambiguous multi-sid hits fail closed.
|
|
422
|
+
*/
|
|
423
|
+
export function matchGrokPromptAppend(path, fromByte, expectedText, opts) {
|
|
424
|
+
if (!expectedText || !existsSync(path))
|
|
425
|
+
return { found: false };
|
|
426
|
+
let size;
|
|
427
|
+
try {
|
|
428
|
+
size = statSync(path).size;
|
|
429
|
+
}
|
|
430
|
+
catch {
|
|
431
|
+
return { found: false };
|
|
432
|
+
}
|
|
433
|
+
const start = size < fromByte ? 0 : fromByte;
|
|
434
|
+
if (size <= start)
|
|
435
|
+
return { found: false };
|
|
436
|
+
const len = size - start;
|
|
437
|
+
const buf = Buffer.alloc(len);
|
|
438
|
+
try {
|
|
439
|
+
const fd = openSync(path, 'r');
|
|
440
|
+
try {
|
|
441
|
+
readSync(fd, buf, 0, len, start);
|
|
442
|
+
}
|
|
443
|
+
finally {
|
|
444
|
+
closeSync(fd);
|
|
445
|
+
}
|
|
446
|
+
}
|
|
447
|
+
catch {
|
|
448
|
+
return { found: false };
|
|
449
|
+
}
|
|
450
|
+
const expected = normaliseNewlines(expectedText);
|
|
451
|
+
const expectedTrimmed = expected.trim();
|
|
452
|
+
const matches = [];
|
|
453
|
+
for (const line of buf.toString('utf8').split('\n')) {
|
|
454
|
+
if (!line)
|
|
455
|
+
continue;
|
|
456
|
+
let obj;
|
|
457
|
+
try {
|
|
458
|
+
obj = JSON.parse(line);
|
|
459
|
+
}
|
|
460
|
+
catch {
|
|
461
|
+
continue;
|
|
462
|
+
} // partial tail — later poll re-reads
|
|
463
|
+
if (typeof obj?.prompt !== 'string')
|
|
464
|
+
continue;
|
|
465
|
+
const got = normaliseNewlines(obj.prompt);
|
|
466
|
+
// Exact match modulo newline normalisation; trim fallback tolerates the
|
|
467
|
+
// composer stripping leading/trailing whitespace on submit.
|
|
468
|
+
if (obj.prompt === expectedText || got === expected || got.trim() === expectedTrimmed) {
|
|
469
|
+
const sid = typeof obj.session_id === 'string' && SESSION_UUID_RE.test(obj.session_id)
|
|
470
|
+
? obj.session_id
|
|
471
|
+
: undefined;
|
|
472
|
+
matches.push({ cliSessionId: sid });
|
|
473
|
+
}
|
|
474
|
+
}
|
|
475
|
+
if (matches.length === 0)
|
|
476
|
+
return { found: false };
|
|
477
|
+
const prefer = opts?.preferSessionId?.trim();
|
|
478
|
+
if (prefer) {
|
|
479
|
+
const hit = matches.find((m) => m.cliSessionId === prefer);
|
|
480
|
+
if (hit)
|
|
481
|
+
return { found: true, cliSessionId: hit.cliSessionId };
|
|
482
|
+
// Preferred sid not among matches yet (slow append / other worker's lines
|
|
483
|
+
// only) — keep polling; never fall through to another sid.
|
|
484
|
+
return { found: false };
|
|
485
|
+
}
|
|
486
|
+
// No process binding: only safe when every match agrees on the same sid
|
|
487
|
+
// (or none). Multiple distinct sids ⇒ concurrent workers — fail closed.
|
|
488
|
+
const sids = new Set(matches.map((m) => m.cliSessionId).filter((s) => !!s));
|
|
489
|
+
if (sids.size > 1)
|
|
490
|
+
return { found: false };
|
|
491
|
+
if (sids.size === 1) {
|
|
492
|
+
const only = [...sids][0];
|
|
493
|
+
return { found: true, cliSessionId: only };
|
|
494
|
+
}
|
|
495
|
+
// Matched text but no session_id fields — confirm submit without rotation.
|
|
496
|
+
return { found: true };
|
|
497
|
+
}
|
|
498
|
+
function looksLikeBotmuxPrompt(text) {
|
|
499
|
+
return isBotmuxInjectedPrompt(text);
|
|
500
|
+
}
|
|
501
|
+
/** Head-read cap for /adopt discovery: real updates.jsonl files run to
|
|
502
|
+
* megabytes, and the first user prompt (title + botmux-filter input) sits
|
|
503
|
+
* within the first few KB after the startup hook events — never read the
|
|
504
|
+
* whole file per session just to list candidates. */
|
|
505
|
+
const DISCOVER_HEAD_BYTES = 256 * 1024;
|
|
506
|
+
/** First real user prompt from the head of updates.jsonl (bounded read). */
|
|
507
|
+
function readFirstUserChunk(path) {
|
|
508
|
+
try {
|
|
509
|
+
const size = statSync(path).size;
|
|
510
|
+
const len = Math.min(size, DISCOVER_HEAD_BYTES);
|
|
511
|
+
if (len <= 0)
|
|
512
|
+
return undefined;
|
|
513
|
+
const buf = Buffer.alloc(len);
|
|
514
|
+
const fd = openSync(path, 'r');
|
|
515
|
+
try {
|
|
516
|
+
readSync(fd, buf, 0, len, 0);
|
|
517
|
+
}
|
|
518
|
+
finally {
|
|
519
|
+
closeSync(fd);
|
|
520
|
+
}
|
|
521
|
+
for (const line of buf.toString('utf8').split('\n')) {
|
|
522
|
+
if (!line || !line.includes('user_message_chunk'))
|
|
523
|
+
continue;
|
|
524
|
+
let obj;
|
|
525
|
+
try {
|
|
526
|
+
obj = JSON.parse(line);
|
|
527
|
+
}
|
|
528
|
+
catch {
|
|
529
|
+
continue;
|
|
530
|
+
} // truncated tail line
|
|
531
|
+
const update = obj?.params?.update ?? obj?.update;
|
|
532
|
+
if (!update || update.sessionUpdate !== 'user_message_chunk')
|
|
533
|
+
continue;
|
|
534
|
+
const text = contentText(update.content).trim();
|
|
535
|
+
if (text)
|
|
536
|
+
return text;
|
|
537
|
+
}
|
|
538
|
+
}
|
|
539
|
+
catch { /* ignore */ }
|
|
540
|
+
return undefined;
|
|
541
|
+
}
|
|
542
|
+
/**
|
|
543
|
+
* Discover resumable Grok sessions for `/adopt` import.
|
|
544
|
+
* Most-recent first, capped to `limit`, excluding live ids.
|
|
545
|
+
*/
|
|
546
|
+
export async function discoverGrokSessions(limit, exclude) {
|
|
547
|
+
const root = grokSessionsRoot();
|
|
548
|
+
if (!existsSync(root) || limit <= 0)
|
|
549
|
+
return [];
|
|
550
|
+
const cands = [];
|
|
551
|
+
let cwdBuckets;
|
|
552
|
+
try {
|
|
553
|
+
cwdBuckets = readdirSync(root);
|
|
554
|
+
}
|
|
555
|
+
catch {
|
|
556
|
+
return [];
|
|
557
|
+
}
|
|
558
|
+
for (const bucket of cwdBuckets) {
|
|
559
|
+
if (bucket.endsWith('.sqlite') || bucket.endsWith('.lock'))
|
|
560
|
+
continue;
|
|
561
|
+
const bucketPath = join(root, bucket);
|
|
562
|
+
let sessionIds;
|
|
563
|
+
try {
|
|
564
|
+
sessionIds = readdirSync(bucketPath);
|
|
565
|
+
}
|
|
566
|
+
catch {
|
|
567
|
+
continue;
|
|
568
|
+
}
|
|
569
|
+
let cwd = '';
|
|
570
|
+
try {
|
|
571
|
+
cwd = decodeURIComponent(bucket);
|
|
572
|
+
}
|
|
573
|
+
catch {
|
|
574
|
+
cwd = bucket;
|
|
575
|
+
}
|
|
576
|
+
for (const sessionId of sessionIds) {
|
|
577
|
+
if (exclude?.has(sessionId))
|
|
578
|
+
continue;
|
|
579
|
+
if (!SESSION_UUID_RE.test(sessionId))
|
|
580
|
+
continue;
|
|
581
|
+
const summaryPath = join(bucketPath, sessionId, 'summary.json');
|
|
582
|
+
if (!existsSync(summaryPath))
|
|
583
|
+
continue;
|
|
584
|
+
let mtimeMs = 0;
|
|
585
|
+
try {
|
|
586
|
+
mtimeMs = statSync(summaryPath).mtimeMs;
|
|
587
|
+
}
|
|
588
|
+
catch {
|
|
589
|
+
continue;
|
|
590
|
+
}
|
|
591
|
+
let title = '';
|
|
592
|
+
let summaryCwd = cwd;
|
|
593
|
+
try {
|
|
594
|
+
const raw = JSON.parse(readFileSync(summaryPath, 'utf8'));
|
|
595
|
+
title = String(raw?.generated_title || raw?.session_summary || '').trim();
|
|
596
|
+
const infoCwd = raw?.info?.cwd;
|
|
597
|
+
if (typeof infoCwd === 'string' && infoCwd)
|
|
598
|
+
summaryCwd = infoCwd;
|
|
599
|
+
}
|
|
600
|
+
catch { /* title optional */ }
|
|
601
|
+
// Prefer first real user_message_chunk for title when summary empty;
|
|
602
|
+
// also filter botmux-spawned sessions. Bounded head read — see
|
|
603
|
+
// readFirstUserChunk.
|
|
604
|
+
const updatesPath = join(bucketPath, sessionId, 'updates.jsonl');
|
|
605
|
+
const firstPrompt = existsSync(updatesPath) ? readFirstUserChunk(updatesPath) : undefined;
|
|
606
|
+
if (firstPrompt) {
|
|
607
|
+
if (looksLikeBotmuxPrompt(firstPrompt))
|
|
608
|
+
continue;
|
|
609
|
+
if (!title)
|
|
610
|
+
title = truncateTitle(firstPrompt);
|
|
611
|
+
}
|
|
612
|
+
cands.push({
|
|
613
|
+
sessionId,
|
|
614
|
+
cwd: summaryCwd,
|
|
615
|
+
mtimeMs,
|
|
616
|
+
title: title || sessionId.slice(0, 8),
|
|
617
|
+
});
|
|
618
|
+
}
|
|
619
|
+
}
|
|
620
|
+
cands.sort((a, b) => b.mtimeMs - a.mtimeMs);
|
|
621
|
+
return cands.slice(0, limit).map((c) => ({
|
|
622
|
+
cliSessionId: c.sessionId,
|
|
623
|
+
cwd: c.cwd,
|
|
624
|
+
title: c.title,
|
|
625
|
+
lastActivityAt: Math.round(c.mtimeMs),
|
|
626
|
+
}));
|
|
627
|
+
}
|
|
628
|
+
/** Encode helper re-export for adapters that need the bucket name. */
|
|
629
|
+
export { encodeGrokCwd };
|
|
630
|
+
//# sourceMappingURL=grok-transcript.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"grok-transcript.js","sourceRoot":"","sources":["../../src/services/grok-transcript.ts"],"names":[],"mappings":"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"}
|