@xopcai/xopc 0.0.103 → 0.0.104
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.md +7 -4
- package/README.zh-CN.md +7 -4
- package/dist/_virtual/_rolldown/runtime.js +2 -3
- package/dist/browser-ext/manifest.json +1 -1
- package/dist/extensions/feishu/src/adapters/cli-login.d.ts +1 -1
- package/dist/extensions/feishu/src/adapters/cli-login.js +1 -1
- package/dist/extensions/feishu/src/adapters/cli-login.js.map +1 -1
- package/dist/extensions/feishu/src/adapters/gateway-setup.d.ts +2 -0
- package/dist/extensions/feishu/src/adapters/gateway-setup.js +225 -0
- package/dist/extensions/feishu/src/adapters/gateway-setup.js.map +1 -0
- package/dist/extensions/feishu/src/index.d.ts +8 -1
- package/dist/extensions/feishu/src/index.js +14 -1
- package/dist/extensions/feishu/src/index.js.map +1 -0
- package/dist/extensions/feishu/src/outbound/outbound-adapter.js +1 -1
- package/dist/extensions/feishu/src/plugin.d.ts +2 -1
- package/dist/extensions/feishu/src/plugin.js +2 -0
- package/dist/extensions/feishu/src/plugin.js.map +1 -1
- package/dist/extensions/feishu/src/streaming/streaming-adapter.js +1 -1
- package/dist/extensions/feishu/src/transport/webhook/monitor.js +1 -1
- package/dist/extensions/feishu/xopc.extension.json +66 -1
- package/dist/extensions/telegram/src/adapters/gateway-setup.d.ts +2 -0
- package/dist/extensions/telegram/src/adapters/gateway-setup.js +146 -0
- package/dist/extensions/telegram/src/adapters/gateway-setup.js.map +1 -0
- package/dist/extensions/telegram/src/adapters/security-adapter.js +1 -1
- package/dist/extensions/telegram/src/command-handler.js +1 -2
- package/dist/extensions/telegram/src/command-handler.js.map +1 -1
- package/dist/extensions/telegram/src/config-schema.js +2 -2
- package/dist/extensions/telegram/src/config-schema.js.map +1 -1
- package/dist/extensions/telegram/src/doctor.d.ts +1 -0
- package/dist/extensions/telegram/src/doctor.js +68 -0
- package/dist/extensions/telegram/src/doctor.js.map +1 -1
- package/dist/extensions/telegram/src/index.d.ts +8 -1
- package/dist/extensions/telegram/src/index.js +15 -2
- package/dist/extensions/telegram/src/index.js.map +1 -0
- package/dist/extensions/telegram/src/plugin.d.ts +13 -5
- package/dist/extensions/telegram/src/plugin.js +32 -12
- package/dist/extensions/telegram/src/plugin.js.map +1 -1
- package/dist/extensions/telegram/src/proxy-fetch.js +22 -5
- package/dist/extensions/telegram/src/proxy-fetch.js.map +1 -1
- package/dist/extensions/telegram/xopc.extension.json +412 -5
- package/dist/extensions/weixin/src/adapters/onboard-cli.js +2 -2
- package/dist/extensions/weixin/src/adapters/onboard-cli.js.map +1 -1
- package/dist/extensions/weixin/src/api/api.js +1 -1
- package/dist/extensions/weixin/src/index.d.ts +8 -0
- package/dist/extensions/weixin/src/index.js +12 -1
- package/dist/extensions/weixin/src/index.js.map +1 -0
- package/dist/extensions/weixin/src/messaging/process-message.js +1 -1
- package/dist/extensions/weixin/src/plugin.d.ts +2 -1
- package/dist/extensions/weixin/src/plugin.js +77 -2
- package/dist/extensions/weixin/src/plugin.js.map +1 -1
- package/dist/extensions/weixin/xopc.extension.json +52 -0
- package/dist/gateway/static/root/assets/agents-CvsBrBfi.js +396 -0
- package/dist/gateway/static/root/assets/{apps-page-C5RmwmTT.js → apps-page-L-IwQTe0.js} +1 -1
- package/dist/gateway/static/root/assets/browser-BLJWD7WI.js +8 -0
- package/dist/gateway/static/root/assets/channels-settings-D95KuPeP.js +1 -0
- package/dist/gateway/static/root/assets/cron-page-CfkWXDAI.js +1 -0
- package/dist/gateway/static/root/assets/{dist-CWm8hTXZ.js → dist-C6vclgEL.js} +1 -1
- package/dist/gateway/static/root/assets/{extension-debug-page-BzYgTkS9.js → extension-debug-page-D4JYAbsX.js} +1 -1
- package/dist/gateway/static/root/assets/{extension-page-BmTZH6gL.js → extension-page-_T62gi6e.js} +1 -1
- package/dist/gateway/static/root/assets/extension-settings-page-CkJbjyM-.js +1 -0
- package/dist/gateway/static/root/assets/{fetch-CMoWY2Si.js → fetch-B5aiIguv.js} +1 -1
- package/dist/gateway/static/root/assets/gateway-startup-retry-DqmLXhs6.js +1 -0
- package/dist/gateway/static/root/assets/heartbeat-config-api-HwJV1K_Y.js +1 -0
- package/dist/gateway/static/root/assets/index-BPYKW7FB.css +1 -0
- package/dist/gateway/static/root/assets/index-DvTb6wNR.js +4845 -0
- package/dist/gateway/static/root/assets/{logs-page-BjdQjHwk.js → logs-page-DsjtTjBy.js} +2 -2
- package/dist/gateway/static/root/assets/{note-detail-page-8Er4197b.js → note-detail-page-B2V7RhgD.js} +43 -43
- package/dist/gateway/static/root/assets/{note-time-CF3vf1jm.js → note-time-BG8GCTr4.js} +1 -1
- package/dist/gateway/static/root/assets/notes-page-xrcVBQ6Z.js +1 -0
- package/dist/gateway/static/root/assets/schema-form-S-QUvhul.js +1 -0
- package/dist/gateway/static/root/assets/sessions-page-CrQer6Au.js +1 -0
- package/dist/gateway/static/root/assets/settings-advanced-gate-DujQl9c7.js +2 -0
- package/dist/gateway/static/root/assets/{settings-form-section-C7qA7y0J.js → settings-form-section-r1V7dRV6.js} +1 -1
- package/dist/gateway/static/root/assets/settings-page-C9nrONQ2.js +3 -0
- package/dist/gateway/static/root/assets/{share-preview-page-Tvr5Mtq5.js → share-preview-page-DOFy0FNt.js} +1 -1
- package/dist/gateway/static/root/assets/skills-page-DmTsrs_a.js +2 -0
- package/dist/gateway/static/root/assets/{theme-store-HTvJlFLL.js → theme-store-Bo3j5Ovv.js} +1 -1
- package/dist/gateway/static/root/assets/url-WgQIjFZu.js +3 -0
- package/dist/gateway/static/root/assets/voice-api-key-field-AjmUAlEQ.js +1 -0
- package/dist/gateway/static/root/assets/{workflow-page.utils-CeBkAjP7.js → workflow-page.utils-DLEJ92gK.js} +1 -1
- package/dist/gateway/static/root/assets/workflows-page-BnjjKrM1.js +27 -0
- package/dist/gateway/static/root/index.html +6 -5
- package/dist/package.js +1 -1
- package/dist/src/agent/agent-manager.d.ts +18 -6
- package/dist/src/agent/agent-manager.js +60 -35
- package/dist/src/agent/agent-manager.js.map +1 -1
- package/dist/src/agent/builtin-agent-ids.d.ts +2 -0
- package/dist/src/agent/builtin-agent-ids.js +17 -0
- package/dist/src/agent/builtin-agent-ids.js.map +1 -0
- package/dist/src/agent/child-agent-factory.d.ts +4 -0
- package/dist/src/agent/child-agent-factory.js +28 -8
- package/dist/src/agent/child-agent-factory.js.map +1 -1
- package/dist/src/agent/context/workspace-seed.js +1 -1
- package/dist/src/agent/context/workspace-templates/AGENTS.md +23 -184
- package/dist/src/agent/embedded/run-turn.js +8 -2
- package/dist/src/agent/embedded/run-turn.js.map +1 -1
- package/dist/src/agent/embedded/session-tool-result-guard.js +1 -1
- package/dist/src/agent/embedded/subscribe-session.js +33 -51
- package/dist/src/agent/embedded/subscribe-session.js.map +1 -1
- package/dist/src/agent/embedded/types.d.ts +36 -35
- package/dist/src/agent/fallback/candidates.js +1 -1
- package/dist/src/agent/fallback/candidates.js.map +1 -1
- package/dist/src/agent/inbound/inbound-loop.js +1 -1
- package/dist/src/agent/inbound/turn-dispatcher.d.ts +1 -0
- package/dist/src/agent/inbound/turn-dispatcher.js +24 -5
- package/dist/src/agent/inbound/turn-dispatcher.js.map +1 -1
- package/dist/src/agent/models/manager.d.ts +1 -1
- package/dist/src/agent/models/manager.js +1 -1
- package/dist/src/agent/models/manager.js.map +1 -1
- package/dist/src/agent/orchestration/run-agent-turn-with-fallbacks.d.ts +1 -1
- package/dist/src/agent/orchestration/run-agent-turn-with-fallbacks.js +1 -1
- package/dist/src/agent/orchestration/run-agent-turn-with-fallbacks.js.map +1 -1
- package/dist/src/agent/prompt/sections/tooling.js +4 -0
- package/dist/src/agent/prompt/sections/tooling.js.map +1 -1
- package/dist/src/agent/service/direct-turn-helpers.d.ts +1 -0
- package/dist/src/agent/service/direct-turn-helpers.js +1 -1
- package/dist/src/agent/service/direct-turn-helpers.js.map +1 -1
- package/dist/src/agent/service/process-direct-streaming.d.ts +1 -0
- package/dist/src/agent/service/process-direct-streaming.js +35 -18
- package/dist/src/agent/service/process-direct-streaming.js.map +1 -1
- package/dist/src/agent/service-inbound-utils.d.ts +0 -1
- package/dist/src/agent/service-inbound-utils.js +1 -17
- package/dist/src/agent/service-inbound-utils.js.map +1 -1
- package/dist/src/agent/service.d.ts +4 -4
- package/dist/src/agent/service.js +27 -15
- package/dist/src/agent/service.js.map +1 -1
- package/dist/src/agent/session/session-config-service.d.ts +1 -0
- package/dist/src/agent/session/session-config-service.js +9 -1
- package/dist/src/agent/session/session-config-service.js.map +1 -1
- package/dist/src/agent/session/session-inspector.d.ts +2 -1
- package/dist/src/agent/session/session-inspector.js +4 -0
- package/dist/src/agent/session/session-inspector.js.map +1 -1
- package/dist/src/agent/skills/config.js +1 -3
- package/dist/src/agent/skills/config.js.map +1 -1
- package/dist/src/agent/skills/format-skills-prompt.d.ts +1 -0
- package/dist/src/agent/skills/format-skills-prompt.js +3 -2
- package/dist/src/agent/skills/format-skills-prompt.js.map +1 -1
- package/dist/src/agent/skills/hub-pull.js +1 -1
- package/dist/src/agent/skills/index.js +20 -5
- package/dist/src/agent/skills/index.js.map +1 -1
- package/dist/src/agent/skills/installer.js +14 -27
- package/dist/src/agent/skills/installer.js.map +1 -1
- package/dist/src/agent/skills/marketplace/adapters/clawhub/adapter.js +11 -1
- package/dist/src/agent/skills/marketplace/adapters/clawhub/adapter.js.map +1 -1
- package/dist/src/agent/skills/marketplace/adapters/skillhub/adapter.js +18 -4
- package/dist/src/agent/skills/marketplace/adapters/skillhub/adapter.js.map +1 -1
- package/dist/src/agent/skills/marketplace/adapters/store/adapter.js +11 -2
- package/dist/src/agent/skills/marketplace/adapters/store/adapter.js.map +1 -1
- package/dist/src/agent/skills/marketplace/adapters/store/store-api-client.d.ts +2 -2
- package/dist/src/agent/skills/marketplace/adapters/store/store-api-client.js.map +1 -1
- package/dist/src/agent/skills/skill-manager.d.ts +4 -1
- package/dist/src/agent/skills/skill-manager.js +3 -3
- package/dist/src/agent/skills/skill-manager.js.map +1 -1
- package/dist/src/agent/skills/skill-view-path.d.ts +1 -17
- package/dist/src/agent/skills/skill-view-path.js +3 -66
- package/dist/src/agent/skills/skill-view-path.js.map +1 -1
- package/dist/src/agent/skills/test-framework.js +2 -3
- package/dist/src/agent/skills/test-framework.js.map +1 -1
- package/dist/src/agent/streaming/reasoning-visibility-sse.js +1 -0
- package/dist/src/agent/streaming/reasoning-visibility-sse.js.map +1 -1
- package/dist/src/agent/tool-manuals/browser.d.ts +1 -0
- package/{skills/browser/SKILL.md → dist/src/agent/tool-manuals/browser.js} +51 -54
- package/dist/src/agent/tool-manuals/browser.js.map +1 -0
- package/dist/src/agent/tool-manuals/index.d.ts +10 -0
- package/dist/src/agent/tool-manuals/index.js +28 -0
- package/dist/src/agent/tool-manuals/index.js.map +1 -0
- package/dist/src/agent/tools/browser/tool/browser-use-tool.js +1 -1
- package/dist/src/agent/tools/browser/tool/browser-use-tool.js.map +1 -1
- package/dist/src/agent/tools/factory.js +7 -5
- package/dist/src/agent/tools/factory.js.map +1 -1
- package/dist/src/agent/tools/index.d.ts +1 -0
- package/dist/src/agent/tools/index.js +5 -4
- package/dist/src/agent/tools/session-search-tool.js +1 -1
- package/dist/src/agent/tools/shell.js +1 -1
- package/dist/src/agent/tools/skills-tools.js +37 -8
- package/dist/src/agent/tools/skills-tools.js.map +1 -1
- package/dist/src/agent/tools/tool-manual-tool.d.ts +6 -0
- package/dist/src/agent/tools/tool-manual-tool.js +34 -0
- package/dist/src/agent/tools/tool-manual-tool.js.map +1 -0
- package/dist/src/agent/tools/web-extract.js +2 -2
- package/dist/src/agent/tools/web.js +1 -1
- package/dist/src/agent/workflow/catalog.d.ts +7 -2
- package/dist/src/agent/workflow/catalog.js +66 -25
- package/dist/src/agent/workflow/catalog.js.map +1 -1
- package/dist/src/agent/workflow/subagent-runner.d.ts +3 -0
- package/dist/src/agent/workflow/subagent-runner.js +50 -4
- package/dist/src/agent/workflow/subagent-runner.js.map +1 -1
- package/dist/src/agent/workflow/types.d.ts +10 -0
- package/dist/src/auth/credentials.js +10 -5
- package/dist/src/auth/credentials.js.map +1 -1
- package/dist/src/browser/actions/extension-registry-bridge.js +1 -1
- package/dist/src/browser/actions/registry.js +2 -2
- package/dist/src/browser/cdp-local-launcher.js +1 -1
- package/dist/src/browser/index.js +3 -3
- package/dist/src/browser/providers/browser-ext-install.js +1 -1
- package/dist/src/browser/providers/cloakbrowser.js +1 -1
- package/dist/src/channels/catalog/channel-catalog-service.d.ts +11 -0
- package/dist/src/channels/catalog/channel-catalog-service.js +168 -0
- package/dist/src/channels/catalog/channel-catalog-service.js.map +1 -0
- package/dist/src/channels/catalog/channel-catalog-types.d.ts +22 -0
- package/dist/src/channels/catalog/channel-catalog-types.js +1 -0
- package/dist/src/channels/dock.d.ts +0 -7
- package/dist/src/channels/dock.js +1 -21
- package/dist/src/channels/index.d.ts +1 -3
- package/dist/src/channels/index.js +1 -5
- package/dist/src/channels/lifecycle-supervisor.d.ts +1 -0
- package/dist/src/channels/lifecycle-supervisor.js +11 -0
- package/dist/src/channels/lifecycle-supervisor.js.map +1 -1
- package/dist/src/channels/manager.d.ts +1 -0
- package/dist/src/channels/manager.js +3 -0
- package/dist/src/channels/manager.js.map +1 -1
- package/dist/src/channels/pairing/pairing-channel.d.ts +2 -3
- package/dist/src/channels/pairing/pairing-messages.js +1 -1
- package/dist/src/channels/pairing/pairing-messages.js.map +1 -1
- package/dist/src/channels/pairing/pairing-service.d.ts +1 -1
- package/dist/src/channels/pairing/pairing-service.js +8 -27
- package/dist/src/channels/pairing/pairing-service.js.map +1 -1
- package/dist/src/channels/plugin-types.d.ts +3 -1
- package/dist/src/channels/plugins/types.adapters.d.ts +55 -2
- package/dist/src/channels/telegram/index.js +1 -1
- package/dist/src/chat-commands/builtins/config.js +4 -4
- package/dist/src/chat-commands/builtins/config.js.map +1 -1
- package/dist/src/chat-commands/config-paths.js +1 -1
- package/dist/src/chat-commands/config-paths.js.map +1 -1
- package/dist/src/chat-commands/context.js +1 -1
- package/dist/src/chat-commands/context.js.map +1 -1
- package/dist/src/cli/bin.js +1 -1
- package/dist/src/cli/command-manifest.js +1 -1
- package/dist/src/cli/command-manifest.js.map +1 -1
- package/dist/src/cli/commands/agent.js +2 -2
- package/dist/src/cli/commands/agent.js.map +1 -1
- package/dist/src/cli/commands/agents.js +2 -4
- package/dist/src/cli/commands/agents.js.map +1 -1
- package/dist/src/cli/commands/auth.js +1 -1
- package/dist/src/cli/commands/browser-cli-helpers.js +1 -1
- package/dist/src/cli/commands/channels.d.ts +1 -5
- package/dist/src/cli/commands/channels.js +115 -281
- package/dist/src/cli/commands/channels.js.map +1 -1
- package/dist/src/cli/commands/config.js +2 -2
- package/dist/src/cli/commands/config.js.map +1 -1
- package/dist/src/cli/commands/doctor/checks/channel-config.js +16 -69
- package/dist/src/cli/commands/doctor/checks/channel-config.js.map +1 -1
- package/dist/src/cli/commands/doctor/checks/channel-pairing-pending.js +6 -4
- package/dist/src/cli/commands/doctor/checks/channel-pairing-pending.js.map +1 -1
- package/dist/src/cli/commands/doctor/checks/channel-plugins.js +2 -2
- package/dist/src/cli/commands/doctor/checks/channel-plugins.js.map +1 -1
- package/dist/src/cli/commands/doctor/checks/database-schema.js +1 -1
- package/dist/src/cli/commands/doctor/checks/provider-auth.js +13 -9
- package/dist/src/cli/commands/doctor/checks/provider-auth.js.map +1 -1
- package/dist/src/cli/commands/extension-dev.js +2 -1
- package/dist/src/cli/commands/extension-dev.js.map +1 -1
- package/dist/src/cli/commands/extension-marketplace.js +2 -1
- package/dist/src/cli/commands/extension-marketplace.js.map +1 -1
- package/dist/src/cli/commands/extension-pack.js +2 -1
- package/dist/src/cli/commands/extension-pack.js.map +1 -1
- package/dist/src/cli/commands/models.js +7 -4
- package/dist/src/cli/commands/models.js.map +1 -1
- package/dist/src/cli/commands/onboard/channels/index.js +1 -1
- package/dist/src/cli/commands/onboard/channels/index.js.map +1 -1
- package/dist/src/cli/commands/onboard/channels/registry.d.ts +2 -1
- package/dist/src/cli/commands/onboard/channels/registry.js +32 -8
- package/dist/src/cli/commands/onboard/channels/registry.js.map +1 -1
- package/dist/src/cli/commands/onboard/model.js +8 -5
- package/dist/src/cli/commands/onboard/model.js.map +1 -1
- package/dist/src/cli/commands/onboard.js +4 -6
- package/dist/src/cli/commands/onboard.js.map +1 -1
- package/dist/src/cli/commands/setup-shared/runner.d.ts +1 -1
- package/dist/src/cli/commands/setup-shared/runner.js.map +1 -1
- package/dist/src/cli/commands/setup-shared/types.d.ts +1 -1
- package/dist/src/cli/commands/setup-shared/types.js.map +1 -1
- package/dist/src/cli/commands/tui.js +13 -5
- package/dist/src/cli/commands/tui.js.map +1 -1
- package/dist/src/cli/extension-cli-register.js +1 -1
- package/dist/src/commands/agents.config.d.ts +3 -3
- package/dist/src/commands/agents.config.js +7 -7
- package/dist/src/commands/agents.config.js.map +1 -1
- package/dist/src/config/agent-profile.d.ts +1 -1
- package/dist/src/config/agent-profile.js +6 -2
- package/dist/src/config/agent-profile.js.map +1 -1
- package/dist/src/config/agent-typed-models.d.ts +2 -2
- package/dist/src/config/agent-typed-models.js +13 -2
- package/dist/src/config/agent-typed-models.js.map +1 -1
- package/dist/src/config/index.js +3 -3
- package/dist/src/config/integration.d.ts +1 -1
- package/dist/src/config/loader.d.ts +0 -1
- package/dist/src/config/loader.js +4 -9
- package/dist/src/config/loader.js.map +1 -1
- package/dist/src/config/models-json.d.ts +6 -6
- package/dist/src/config/rules.js +2 -12
- package/dist/src/config/rules.js.map +1 -1
- package/dist/src/config/schema.d.ts +74 -47
- package/dist/src/config/schema.js +28 -66
- package/dist/src/config/schema.js.map +1 -1
- package/dist/src/config/validate-channel-configs.d.ts +0 -3
- package/dist/src/config/validate-channel-configs.js +29 -10
- package/dist/src/config/validate-channel-configs.js.map +1 -1
- package/dist/src/cron/executor.js +1 -4
- package/dist/src/cron/executor.js.map +1 -1
- package/dist/src/extensions/activation-context.js +3 -1
- package/dist/src/extensions/activation-context.js.map +1 -1
- package/dist/src/extensions/activation-planner.js +12 -0
- package/dist/src/extensions/activation-planner.js.map +1 -1
- package/dist/src/extensions/api.d.ts +5 -1
- package/dist/src/extensions/api.js +12 -0
- package/dist/src/extensions/api.js.map +1 -1
- package/dist/src/extensions/discover-extensions.js +17 -13
- package/dist/src/extensions/discover-extensions.js.map +1 -1
- package/dist/src/extensions/extension-metadata-snapshot.js +11 -5
- package/dist/src/extensions/extension-metadata-snapshot.js.map +1 -1
- package/dist/src/extensions/index.js +12 -4
- package/dist/src/extensions/index.js.map +1 -0
- package/dist/src/extensions/loader.d.ts +5 -1
- package/dist/src/extensions/loader.js +12 -11
- package/dist/src/extensions/loader.js.map +1 -1
- package/dist/src/extensions/manifest-registry.js +98 -93
- package/dist/src/extensions/manifest-registry.js.map +1 -1
- package/dist/src/extensions/normalize-manifest.js +91 -15
- package/dist/src/extensions/normalize-manifest.js.map +1 -1
- package/dist/src/extensions/sdk/index.js +1 -1
- package/dist/src/extensions/sdk/testing.js +4 -0
- package/dist/src/extensions/sdk/testing.js.map +1 -1
- package/dist/src/extensions/types/core.d.ts +32 -1
- package/dist/src/extensions/types/manifest.d.ts +60 -0
- package/dist/src/extensions/types/tui.d.ts +414 -5
- package/dist/src/gateway/agent-builtin-tools.d.ts +1 -1
- package/dist/src/gateway/agent-builtin-tools.js +16 -0
- package/dist/src/gateway/agent-builtin-tools.js.map +1 -1
- package/dist/src/gateway/agent-run-relay.d.ts +2 -3
- package/dist/src/gateway/agent-run-relay.js +10 -3
- package/dist/src/gateway/agent-run-relay.js.map +1 -1
- package/dist/src/gateway/agents-admin.d.ts +32 -19
- package/dist/src/gateway/agents-admin.js +113 -93
- package/dist/src/gateway/agents-admin.js.map +1 -1
- package/dist/src/gateway/chat-stream/mapper.d.ts +34 -0
- package/dist/src/gateway/chat-stream/mapper.js +244 -0
- package/dist/src/gateway/chat-stream/mapper.js.map +1 -0
- package/dist/src/gateway/chat-stream/protocol.d.ts +100 -0
- package/dist/src/gateway/chat-stream/protocol.js +1 -0
- package/dist/src/gateway/heartbeat/service.js +1 -1
- package/dist/src/gateway/hono/lib/agent-model.d.ts +4 -4
- package/dist/src/gateway/hono/lib/agent-model.js +13 -11
- package/dist/src/gateway/hono/lib/agent-model.js.map +1 -1
- package/dist/src/gateway/hono/lib/config-payload.d.ts +19 -7
- package/dist/src/gateway/hono/lib/config-payload.js +16 -15
- package/dist/src/gateway/hono/lib/config-payload.js.map +1 -1
- package/dist/src/gateway/hono/routes/agents.js +83 -48
- package/dist/src/gateway/hono/routes/agents.js.map +1 -1
- package/dist/src/gateway/hono/routes/channels.js +134 -214
- package/dist/src/gateway/hono/routes/channels.js.map +1 -1
- package/dist/src/gateway/hono/routes/commands-skills.js +10 -4
- package/dist/src/gateway/hono/routes/commands-skills.js.map +1 -1
- package/dist/src/gateway/hono/routes/config-patch/agents.js +26 -13
- package/dist/src/gateway/hono/routes/config-patch/agents.js.map +1 -1
- package/dist/src/gateway/hono/routes/config-patch/channels.d.ts +1 -11
- package/dist/src/gateway/hono/routes/config-patch/channels.js +18 -165
- package/dist/src/gateway/hono/routes/config-patch/channels.js.map +1 -1
- package/dist/src/gateway/hono/routes/config.js +5 -2
- package/dist/src/gateway/hono/routes/config.js.map +1 -1
- package/dist/src/gateway/hono/routes/dreaming.js +1 -1
- package/dist/src/gateway/hono/routes/lazy-bundles.js +13 -1
- package/dist/src/gateway/hono/routes/lazy-bundles.js.map +1 -1
- package/dist/src/gateway/hono/routes/public-gateway.js +2 -4
- package/dist/src/gateway/hono/routes/public-gateway.js.map +1 -1
- package/dist/src/gateway/hono/routes/sessions.js +179 -0
- package/dist/src/gateway/hono/routes/sessions.js.map +1 -1
- package/dist/src/gateway/hono/routes/tui.d.ts +3 -0
- package/dist/src/gateway/hono/routes/tui.js +16 -0
- package/dist/src/gateway/hono/routes/tui.js.map +1 -0
- package/dist/src/gateway/hono/routes/workflows.js +25 -1
- package/dist/src/gateway/hono/routes/workflows.js.map +1 -1
- package/dist/src/gateway/hono/sse.d.ts +5 -7
- package/dist/src/gateway/hono/sse.js +21 -38
- package/dist/src/gateway/hono/sse.js.map +1 -1
- package/dist/src/gateway/protocol.js.map +1 -1
- package/dist/src/gateway/service/agent-runner.d.ts +2 -4
- package/dist/src/gateway/service/agent-runner.js +1 -1
- package/dist/src/gateway/service/agent-runner.js.map +1 -1
- package/dist/src/gateway/service/marketplace-service.d.ts +4 -3
- package/dist/src/gateway/service/marketplace-service.js +7 -4
- package/dist/src/gateway/service/marketplace-service.js.map +1 -1
- package/dist/src/gateway/service/run-gateway-agent.d.ts +2 -6
- package/dist/src/gateway/service/run-gateway-agent.js +63 -36
- package/dist/src/gateway/service/run-gateway-agent.js.map +1 -1
- package/dist/src/gateway/service/sessions-api.d.ts +19 -0
- package/dist/src/gateway/service/sessions-api.js +12 -0
- package/dist/src/gateway/service/sessions-api.js.map +1 -1
- package/dist/src/gateway/service.d.ts +6 -0
- package/dist/src/gateway/service.js +73 -57
- package/dist/src/gateway/service.js.map +1 -1
- package/dist/src/heartbeat/index.js +1 -1
- package/dist/src/mcp/channel-bridge.js +1 -1
- package/dist/src/project-trust/trust-store.d.ts +30 -0
- package/dist/src/project-trust/trust-store.js +194 -0
- package/dist/src/project-trust/trust-store.js.map +1 -0
- package/dist/src/providers/index.d.ts +1 -1
- package/dist/src/providers/index.js +18 -7
- package/dist/src/providers/index.js.map +1 -1
- package/dist/src/routing/resolve-route.d.ts +0 -3
- package/dist/src/routing/resolve-route.js.map +1 -1
- package/dist/src/routing/resolve-tui-session-key.d.ts +2 -0
- package/dist/src/routing/resolve-tui-session-key.js +8 -3
- package/dist/src/routing/resolve-tui-session-key.js.map +1 -1
- package/dist/src/session/client-history.d.ts +32 -0
- package/dist/src/session/client-history.js +232 -1
- package/dist/src/session/client-history.js.map +1 -1
- package/dist/src/session/manager.d.ts +37 -4
- package/dist/src/session/manager.js +39 -15
- package/dist/src/session/manager.js.map +1 -1
- package/dist/src/session/session-context-for-llm.d.ts +93 -1
- package/dist/src/session/session-context-for-llm.js +105 -2
- package/dist/src/session/session-context-for-llm.js.map +1 -1
- package/dist/src/session/store.d.ts +37 -0
- package/dist/src/session/store.js +127 -2
- package/dist/src/session/store.js.map +1 -1
- package/dist/src/session/stored-rows-to-file-entries.js +37 -1
- package/dist/src/session/stored-rows-to-file-entries.js.map +1 -1
- package/dist/src/session/types.d.ts +14 -1
- package/dist/src/session/types.js.map +1 -1
- package/dist/src/share/share-thumbnail.js +1 -1
- package/dist/src/storage/sqlite/migrations/004_add_session_type_metadata.sql +15 -0
- package/dist/src/storage/sqlite/migrations/runner.d.ts +1 -1
- package/dist/src/storage/sqlite/migrations/runner.js +3 -3
- package/dist/src/storage/sqlite/migrations/runner.js.map +1 -1
- package/dist/src/storage/sqlite/migrations/runner.ts +1 -1
- package/dist/src/storage/sqlite/row-mappers.d.ts +14 -1
- package/dist/src/storage/sqlite/row-mappers.js +14 -1
- package/dist/src/storage/sqlite/row-mappers.js.map +1 -1
- package/dist/src/storage/sqlite/schema.js +1 -1
- package/dist/src/storage/sqlite/session-metadata.js +1 -0
- package/dist/src/storage/sqlite/session-metadata.js.map +1 -1
- package/dist/src/storage/sqlite/session-repository.js +52 -25
- package/dist/src/storage/sqlite/session-repository.js.map +1 -1
- package/dist/src/tui/backends/embedded-backend.d.ts +53 -4
- package/dist/src/tui/backends/embedded-backend.js +227 -39
- package/dist/src/tui/backends/embedded-backend.js.map +1 -1
- package/dist/src/tui/backends/gateway-sse-backend.d.ts +59 -3
- package/dist/src/tui/backends/gateway-sse-backend.js +416 -26
- package/dist/src/tui/backends/gateway-sse-backend.js.map +1 -1
- package/dist/src/tui/chat-history.d.ts +5 -1
- package/dist/src/tui/chat-history.js +78 -8
- package/dist/src/tui/chat-history.js.map +1 -1
- package/dist/src/tui/clipboard-text.d.ts +5 -0
- package/dist/src/tui/clipboard-text.js +46 -0
- package/dist/src/tui/clipboard-text.js.map +1 -0
- package/dist/src/tui/components/assistant-message.d.ts +19 -3
- package/dist/src/tui/components/assistant-message.js +115 -9
- package/dist/src/tui/components/assistant-message.js.map +1 -1
- package/dist/src/tui/components/bash-execution.d.ts +3 -2
- package/dist/src/tui/components/bash-execution.js +31 -3
- package/dist/src/tui/components/bash-execution.js.map +1 -1
- package/dist/src/tui/components/bash-summary.d.ts +23 -0
- package/dist/src/tui/components/bash-summary.js +87 -0
- package/dist/src/tui/components/bash-summary.js.map +1 -0
- package/dist/src/tui/components/branch-message-summary.d.ts +17 -0
- package/dist/src/tui/components/branch-message-summary.js +43 -0
- package/dist/src/tui/components/branch-message-summary.js.map +1 -0
- package/dist/src/tui/components/branch-summary.d.ts +13 -0
- package/dist/src/tui/components/branch-summary.js +51 -0
- package/dist/src/tui/components/branch-summary.js.map +1 -0
- package/dist/src/tui/components/chat-log.d.ts +46 -6
- package/dist/src/tui/components/chat-log.js +183 -21
- package/dist/src/tui/components/chat-log.js.map +1 -1
- package/dist/src/tui/components/compaction-summary.d.ts +13 -0
- package/dist/src/tui/components/compaction-summary.js +46 -0
- package/dist/src/tui/components/compaction-summary.js.map +1 -0
- package/dist/src/tui/components/custom-editor.d.ts +1 -0
- package/dist/src/tui/components/custom-editor.js +2 -0
- package/dist/src/tui/components/custom-editor.js.map +1 -1
- package/dist/src/tui/components/custom-message.d.ts +23 -0
- package/dist/src/tui/components/custom-message.js +65 -0
- package/dist/src/tui/components/custom-message.js.map +1 -0
- package/dist/src/tui/components/extension-dialog.d.ts +42 -0
- package/dist/src/tui/components/extension-dialog.js +127 -0
- package/dist/src/tui/components/extension-dialog.js.map +1 -0
- package/dist/src/tui/components/scoped-models-selector.d.ts +7 -2
- package/dist/src/tui/components/scoped-models-selector.js +89 -16
- package/dist/src/tui/components/scoped-models-selector.js.map +1 -1
- package/dist/src/tui/components/searchable-select-list.d.ts +30 -3
- package/dist/src/tui/components/searchable-select-list.js +82 -10
- package/dist/src/tui/components/searchable-select-list.js.map +1 -1
- package/dist/src/tui/components/session-selector.d.ts +18 -4
- package/dist/src/tui/components/session-selector.js +207 -40
- package/dist/src/tui/components/session-selector.js.map +1 -1
- package/dist/src/tui/components/settings-selector.d.ts +6 -2
- package/dist/src/tui/components/settings-selector.js +126 -7
- package/dist/src/tui/components/settings-selector.js.map +1 -1
- package/dist/src/tui/components/thinking-selector.d.ts +12 -0
- package/dist/src/tui/components/thinking-selector.js +48 -0
- package/dist/src/tui/components/thinking-selector.js.map +1 -0
- package/dist/src/tui/components/tool-execution.d.ts +57 -3
- package/dist/src/tui/components/tool-execution.js +378 -28
- package/dist/src/tui/components/tool-execution.js.map +1 -1
- package/dist/src/tui/components/tui-bottom-bar.d.ts +9 -1
- package/dist/src/tui/components/tui-bottom-bar.js +56 -11
- package/dist/src/tui/components/tui-bottom-bar.js.map +1 -1
- package/dist/src/tui/components/tui-header.d.ts +9 -2
- package/dist/src/tui/components/tui-header.js +25 -5
- package/dist/src/tui/components/tui-header.js.map +1 -1
- package/dist/src/tui/components/user-message.d.ts +4 -2
- package/dist/src/tui/components/user-message.js +42 -9
- package/dist/src/tui/components/user-message.js.map +1 -1
- package/dist/src/tui/components/visual-truncate.d.ts +11 -0
- package/dist/src/tui/components/visual-truncate.js +27 -0
- package/dist/src/tui/components/visual-truncate.js.map +1 -0
- package/dist/src/tui/extension-host/autocomplete.d.ts +43 -0
- package/dist/src/tui/extension-host/autocomplete.js +116 -0
- package/dist/src/tui/extension-host/autocomplete.js.map +1 -0
- package/dist/src/tui/extension-host/host.d.ts +31 -1
- package/dist/src/tui/extension-host/host.js +123 -6
- package/dist/src/tui/extension-host/host.js.map +1 -1
- package/dist/src/tui/extension-host/load-extensions.d.ts +6 -1
- package/dist/src/tui/extension-host/load-extensions.js +4 -3
- package/dist/src/tui/extension-host/load-extensions.js.map +1 -1
- package/dist/src/tui/extension-host/runtime-context.d.ts +21 -0
- package/dist/src/tui/extension-host/runtime-context.js +152 -0
- package/dist/src/tui/extension-host/runtime-context.js.map +1 -0
- package/dist/src/tui/extension-host/runtime.d.ts +52 -4
- package/dist/src/tui/extension-host/runtime.js +547 -85
- package/dist/src/tui/extension-host/runtime.js.map +1 -1
- package/dist/src/tui/extension-host/surface.d.ts +20 -0
- package/dist/src/tui/extension-host/surface.js +30 -6
- package/dist/src/tui/extension-host/surface.js.map +1 -1
- package/dist/src/tui/extension-host/tool-renderers.d.ts +6 -3
- package/dist/src/tui/extension-host/tool-renderers.js +43 -5
- package/dist/src/tui/extension-host/tool-renderers.js.map +1 -1
- package/dist/src/tui/format-tui-hotkeys.d.ts +12 -2
- package/dist/src/tui/format-tui-hotkeys.js +22 -5
- package/dist/src/tui/format-tui-hotkeys.js.map +1 -1
- package/dist/src/tui/tui-agent-events.d.ts +8 -6
- package/dist/src/tui/tui-agent-events.js +200 -59
- package/dist/src/tui/tui-agent-events.js.map +1 -1
- package/dist/src/tui/tui-backend.d.ts +169 -3
- package/dist/src/tui/tui-command-formatters.d.ts +76 -0
- package/dist/src/tui/tui-command-formatters.js +594 -0
- package/dist/src/tui/tui-command-formatters.js.map +1 -0
- package/dist/src/tui/tui-commands.d.ts +57 -7
- package/dist/src/tui/tui-commands.js +639 -43
- package/dist/src/tui/tui-commands.js.map +1 -1
- package/dist/src/tui/tui-context-usage.d.ts +1 -1
- package/dist/src/tui/tui-context-usage.js +9 -1
- package/dist/src/tui/tui-context-usage.js.map +1 -1
- package/dist/src/tui/tui-extension-user-message.d.ts +8 -0
- package/dist/src/tui/tui-extension-user-message.js +32 -0
- package/dist/src/tui/tui-extension-user-message.js.map +1 -0
- package/dist/src/tui/tui-follow-up-queue.d.ts +9 -0
- package/dist/src/tui/tui-follow-up-queue.js +18 -0
- package/dist/src/tui/tui-follow-up-queue.js.map +1 -0
- package/dist/src/tui/tui-local-shell.d.ts +11 -1
- package/dist/src/tui/tui-local-shell.js +50 -8
- package/dist/src/tui/tui-local-shell.js.map +1 -1
- package/dist/src/tui/tui-model-picker.d.ts +26 -0
- package/dist/src/tui/tui-model-picker.js +152 -0
- package/dist/src/tui/tui-model-picker.js.map +1 -0
- package/dist/src/tui/tui-oauth-login.d.ts +16 -0
- package/dist/src/tui/tui-oauth-login.js +189 -0
- package/dist/src/tui/tui-oauth-login.js.map +1 -0
- package/dist/src/tui/tui-overlays.d.ts +3 -3
- package/dist/src/tui/tui-overlays.js +6 -7
- package/dist/src/tui/tui-overlays.js.map +1 -1
- package/dist/src/tui/tui-picker-overlay.d.ts +27 -32
- package/dist/src/tui/tui-picker-overlay.js +340 -30
- package/dist/src/tui/tui-picker-overlay.js.map +1 -1
- package/dist/src/tui/tui-picker-services.d.ts +41 -0
- package/dist/src/tui/tui-picker-services.js +1 -0
- package/dist/src/tui/tui-run-state.d.ts +11 -0
- package/dist/src/tui/tui-run-state.js +114 -0
- package/dist/src/tui/tui-run-state.js.map +1 -0
- package/dist/src/tui/tui-runtime-hints.d.ts +4 -0
- package/dist/src/tui/tui-runtime-hints.js +18 -0
- package/dist/src/tui/tui-runtime-hints.js.map +1 -0
- package/dist/src/tui/tui-scoped-models.d.ts +1 -1
- package/dist/src/tui/tui-scoped-models.js +2 -2
- package/dist/src/tui/tui-scoped-models.js.map +1 -1
- package/dist/src/tui/tui-session-actions.d.ts +5 -3
- package/dist/src/tui/tui-session-actions.js +21 -9
- package/dist/src/tui/tui-session-actions.js.map +1 -1
- package/dist/src/tui/tui-session-format.d.ts +4 -1
- package/dist/src/tui/tui-session-format.js +17 -3
- package/dist/src/tui/tui-session-format.js.map +1 -1
- package/dist/src/tui/tui-session-snapshot.d.ts +82 -0
- package/dist/src/tui/tui-session-snapshot.js +184 -0
- package/dist/src/tui/tui-session-snapshot.js.map +1 -0
- package/dist/src/tui/tui-session-stats.d.ts +3 -0
- package/dist/src/tui/tui-session-stats.js +59 -0
- package/dist/src/tui/tui-session-stats.js.map +1 -0
- package/dist/src/tui/tui-settings.d.ts +21 -0
- package/dist/src/tui/tui-settings.js +28 -1
- package/dist/src/tui/tui-settings.js.map +1 -1
- package/dist/src/tui/tui-skills-autocomplete.js +1 -1
- package/dist/src/tui/tui-skills-autocomplete.js.map +1 -1
- package/dist/src/tui/tui-startup-resources.d.ts +3 -0
- package/dist/src/tui/tui-startup-resources.js +39 -0
- package/dist/src/tui/tui-startup-resources.js.map +1 -0
- package/dist/src/tui/tui-startup-text.d.ts +10 -0
- package/dist/src/tui/tui-startup-text.js +58 -0
- package/dist/src/tui/tui-startup-text.js.map +1 -0
- package/dist/src/tui/tui-stdio-filter.d.ts +1 -0
- package/dist/src/tui/tui-stdio-filter.js +11 -7
- package/dist/src/tui/tui-stdio-filter.js.map +1 -1
- package/dist/src/tui/tui-submit.d.ts +2 -0
- package/dist/src/tui/tui-submit.js +2 -1
- package/dist/src/tui/tui-submit.js.map +1 -1
- package/dist/src/tui/tui-tool-diff.js +61 -7
- package/dist/src/tui/tui-tool-diff.js.map +1 -1
- package/dist/src/tui/tui-tool-result.d.ts +17 -0
- package/dist/src/tui/tui-tool-result.js +74 -0
- package/dist/src/tui/tui-tool-result.js.map +1 -0
- package/dist/src/tui/tui-transcript-tree-picker.d.ts +57 -0
- package/dist/src/tui/tui-transcript-tree-picker.js +604 -0
- package/dist/src/tui/tui-transcript-tree-picker.js.map +1 -0
- package/dist/src/tui/tui-transcript-tree.d.ts +7 -0
- package/dist/src/tui/tui-transcript-tree.js +316 -0
- package/dist/src/tui/tui-transcript-tree.js.map +1 -0
- package/dist/src/tui/tui-types.d.ts +25 -34
- package/dist/src/tui/tui-types.js +12 -0
- package/dist/src/tui/tui-types.js.map +1 -1
- package/dist/src/tui/tui.js +1288 -112
- package/dist/src/tui/tui.js.map +1 -1
- package/dist/src/tui/xopc-tui-keybindings.d.ts +127 -2
- package/dist/src/tui/xopc-tui-keybindings.js +127 -2
- package/dist/src/tui/xopc-tui-keybindings.js.map +1 -1
- package/dist/src/workflows/domain/definition-utils.d.ts +2 -1
- package/dist/src/workflows/domain/definition-utils.js +18 -8
- package/dist/src/workflows/domain/definition-utils.js.map +1 -1
- package/dist/src/workflows/domain/definition.d.ts +25 -0
- package/dist/src/workflows/domain/event.d.ts +1 -0
- package/dist/src/workflows/domain/result.d.ts +15 -0
- package/dist/src/workflows/domain/run.d.ts +2 -0
- package/dist/src/workflows/domain/run.js.map +1 -1
- package/dist/src/workflows/engine/projector.js +4 -0
- package/dist/src/workflows/engine/projector.js.map +1 -1
- package/dist/src/workflows/engine/workflow-engine.d.ts +37 -1
- package/dist/src/workflows/engine/workflow-engine.js +75 -11
- package/dist/src/workflows/engine/workflow-engine.js.map +1 -1
- package/dist/src/workflows/index.d.ts +1 -0
- package/dist/src/workflows/index.js +4 -1
- package/dist/src/workflows/registry/catalog-workflow-definition-registry.d.ts +9 -0
- package/dist/src/workflows/registry/catalog-workflow-definition-registry.js +40 -0
- package/dist/src/workflows/registry/catalog-workflow-definition-registry.js.map +1 -0
- package/dist/src/workflows/registry/index.d.ts +2 -0
- package/dist/src/workflows/registry/index.js +2 -0
- package/dist/src/workflows/registry/workflow-definition-registry.d.ts +15 -0
- package/dist/src/workflows/registry/workflow-definition-registry.js +1 -0
- package/dist/src/workflows/runtime/index.d.ts +2 -0
- package/dist/src/workflows/runtime/index.js +2 -1
- package/dist/src/workflows/runtime/script-workflow-runtime.d.ts +5 -0
- package/dist/src/workflows/runtime/script-workflow-runtime.js +15 -0
- package/dist/src/workflows/runtime/script-workflow-runtime.js.map +1 -0
- package/dist/src/workflows/runtime/workflow-runtime-port.d.ts +16 -0
- package/dist/src/workflows/runtime/workflow-runtime-port.js +1 -0
- package/dist/src/workflows/service/run-view-to-snapshot.js +3 -0
- package/dist/src/workflows/service/run-view-to-snapshot.js.map +1 -1
- package/dist/src/workflows/service/workflow-run-service.d.ts +3 -0
- package/dist/src/workflows/service/workflow-run-service.js +10 -15
- package/dist/src/workflows/service/workflow-run-service.js.map +1 -1
- package/dist/src/workflows/service/workflow-session-bridge.d.ts +1 -1
- package/dist/src/workflows/service/workflow-session-bridge.js +4 -1
- package/dist/src/workflows/service/workflow-session-bridge.js.map +1 -1
- package/package.json +21 -15
- package/skills/creative/frontend-design/SKILL.md +1 -1
- package/skills/creative/theme-factory/SKILL.md +1 -1
- package/skills/documents/xlsx/SKILL.md +1 -1
- package/skills/engineering/diagnose/SKILL.md +2 -2
- package/skills/engineering/tdd/SKILL.md +1 -1
- package/skills/tools/github/SKILL.md +6 -1
- package/skills/tools/webapp-testing/SKILL.md +4 -1
- package/dist/extensions/telegram/src/adapters/config-surface.d.ts +0 -2
- package/dist/extensions/telegram/src/adapters/config-surface.js +0 -26
- package/dist/extensions/telegram/src/adapters/config-surface.js.map +0 -1
- package/dist/extensions/weixin/src/__tests__/workflow-progress.test.js +0 -158
- package/dist/extensions/weixin/src/__tests__/workflow-progress.test.js.map +0 -1
- package/dist/gateway/static/root/assets/agents-BwXkia_W.js +0 -222
- package/dist/gateway/static/root/assets/channels-settings-tlOTdaXw.js +0 -1
- package/dist/gateway/static/root/assets/channels-status-swr-D4XjqwqC.js +0 -8
- package/dist/gateway/static/root/assets/cron-api-DcmfGuj0.js +0 -1
- package/dist/gateway/static/root/assets/cron-page-CijJ4G6F.js +0 -1
- package/dist/gateway/static/root/assets/extension-settings-page-CyJk_G64.js +0 -1
- package/dist/gateway/static/root/assets/field-primitives-C4GpxsDo.js +0 -1
- package/dist/gateway/static/root/assets/heartbeat-config-api-CLD0Gpi3.js +0 -1
- package/dist/gateway/static/root/assets/index-0HmunJW9.js +0 -4845
- package/dist/gateway/static/root/assets/index-Bk75Phrd.css +0 -1
- package/dist/gateway/static/root/assets/notes-page-BBnTh0uI.js +0 -1
- package/dist/gateway/static/root/assets/sessions-page-B0riYK7j.js +0 -1
- package/dist/gateway/static/root/assets/settings-advanced-gate-DiP_WHu_.js +0 -2
- package/dist/gateway/static/root/assets/settings-page-1ZPhcCZ9.js +0 -3
- package/dist/gateway/static/root/assets/skills-page-BQ1hllKD.js +0 -2
- package/dist/gateway/static/root/assets/url-F3_D_6zZ.js +0 -3
- package/dist/gateway/static/root/assets/utils-CPr3FBh2.js +0 -1
- package/dist/gateway/static/root/assets/voice-api-key-field-BkbDl6dH.js +0 -1
- package/dist/gateway/static/root/assets/workflows-page-D059ysoF.js +0 -27
- package/dist/src/agent/embedded/map-stream-events.d.ts +0 -9
- package/dist/src/agent/embedded/map-stream-events.js +0 -63
- package/dist/src/agent/embedded/map-stream-events.js.map +0 -1
- package/dist/src/channels/dock.js.map +0 -1
- package/dist/src/channels/plugins/bundled.d.ts +0 -11
- package/dist/src/channels/plugins/bundled.js +0 -10
- package/dist/src/channels/plugins/bundled.js.map +0 -1
- package/dist/src/channels/registry.d.ts +0 -25
- package/dist/src/channels/registry.js +0 -82
- package/dist/src/channels/registry.js.map +0 -1
- package/dist/src/config/localized-text.d.ts +0 -6
- package/dist/src/config/localized-text.js +0 -42
- package/dist/src/config/localized-text.js.map +0 -1
- package/dist/src/generated/bundled-channel-plugins.d.ts +0 -10
- package/dist/src/generated/bundled-channel-plugins.js +0 -16
- package/dist/src/generated/bundled-channel-plugins.js.map +0 -1
- package/dist/src/tui/stream-assembler.d.ts +0 -22
- package/dist/src/tui/stream-assembler.js +0 -63
- package/dist/src/tui/stream-assembler.js.map +0 -1
- package/skills/browser/SKILL-zh.md +0 -188
- package/skills/business/company-values/SKILL-zh.md +0 -80
- package/skills/business/company-values/SKILL.md +0 -80
- package/skills/business/find-community/SKILL-zh.md +0 -50
- package/skills/business/find-community/SKILL.md +0 -50
- package/skills/business/first-customers/SKILL-zh.md +0 -76
- package/skills/business/first-customers/SKILL.md +0 -76
- package/skills/business/grow-sustainably/SKILL-zh.md +0 -92
- package/skills/business/grow-sustainably/SKILL.md +0 -92
- package/skills/business/marketing-plan/SKILL-zh.md +0 -100
- package/skills/business/marketing-plan/SKILL.md +0 -100
- package/skills/business/minimalist-review/SKILL-zh.md +0 -82
- package/skills/business/minimalist-review/SKILL.md +0 -82
- package/skills/business/mvp/SKILL-zh.md +0 -81
- package/skills/business/mvp/SKILL.md +0 -81
- package/skills/business/pricing/SKILL-zh.md +0 -64
- package/skills/business/pricing/SKILL.md +0 -64
- package/skills/business/processize/SKILL-zh.md +0 -91
- package/skills/business/processize/SKILL.md +0 -91
- package/skills/business/validate-idea/SKILL-zh.md +0 -68
- package/skills/business/validate-idea/SKILL.md +0 -68
- package/skills/creative/algorithmic-art/LICENSE.txt +0 -202
- package/skills/creative/algorithmic-art/SKILL-zh.md +0 -405
- package/skills/creative/algorithmic-art/SKILL.md +0 -405
- package/skills/creative/algorithmic-art/templates/generator_template.js +0 -223
- package/skills/creative/algorithmic-art/templates/viewer.html +0 -599
- package/skills/creative/frontend-design/SKILL-zh.md +0 -42
- package/skills/creative/theme-factory/SKILL-zh.md +0 -59
- package/skills/creative/web-artifacts-builder/LICENSE.txt +0 -202
- package/skills/creative/web-artifacts-builder/SKILL-zh.md +0 -74
- package/skills/creative/web-artifacts-builder/SKILL.md +0 -74
- package/skills/creative/web-artifacts-builder/scripts/bundle-artifact.sh +0 -54
- package/skills/creative/web-artifacts-builder/scripts/init-artifact.sh +0 -322
- package/skills/creative/web-artifacts-builder/scripts/shadcn-components.tar.gz +0 -0
- package/skills/documents/doc-coauthoring/SKILL-zh.md +0 -375
- package/skills/documents/doc-coauthoring/SKILL.md +0 -375
- package/skills/documents/docx/LICENSE.txt +0 -30
- package/skills/documents/docx/SKILL-zh.md +0 -590
- package/skills/documents/docx/SKILL.md +0 -590
- package/skills/documents/docx/scripts/__init__.py +0 -1
- package/skills/documents/docx/scripts/accept_changes.py +0 -135
- package/skills/documents/docx/scripts/comment.py +0 -318
- package/skills/documents/docx/scripts/office/helpers/__init__.py +0 -0
- package/skills/documents/docx/scripts/office/helpers/merge_runs.py +0 -199
- package/skills/documents/docx/scripts/office/helpers/simplify_redlines.py +0 -197
- package/skills/documents/docx/scripts/office/pack.py +0 -159
- package/skills/documents/docx/scripts/office/schemas/ISO-IEC29500-4_2016/dml-chart.xsd +0 -1499
- package/skills/documents/docx/scripts/office/schemas/ISO-IEC29500-4_2016/dml-chartDrawing.xsd +0 -146
- package/skills/documents/docx/scripts/office/schemas/ISO-IEC29500-4_2016/dml-diagram.xsd +0 -1085
- package/skills/documents/docx/scripts/office/schemas/ISO-IEC29500-4_2016/dml-lockedCanvas.xsd +0 -11
- package/skills/documents/docx/scripts/office/schemas/ISO-IEC29500-4_2016/dml-main.xsd +0 -3081
- package/skills/documents/docx/scripts/office/schemas/ISO-IEC29500-4_2016/dml-picture.xsd +0 -23
- package/skills/documents/docx/scripts/office/schemas/ISO-IEC29500-4_2016/dml-spreadsheetDrawing.xsd +0 -185
- package/skills/documents/docx/scripts/office/schemas/ISO-IEC29500-4_2016/dml-wordprocessingDrawing.xsd +0 -287
- package/skills/documents/docx/scripts/office/schemas/ISO-IEC29500-4_2016/pml.xsd +0 -1676
- package/skills/documents/docx/scripts/office/schemas/ISO-IEC29500-4_2016/shared-additionalCharacteristics.xsd +0 -28
- package/skills/documents/docx/scripts/office/schemas/ISO-IEC29500-4_2016/shared-bibliography.xsd +0 -144
- package/skills/documents/docx/scripts/office/schemas/ISO-IEC29500-4_2016/shared-commonSimpleTypes.xsd +0 -174
- package/skills/documents/docx/scripts/office/schemas/ISO-IEC29500-4_2016/shared-customXmlDataProperties.xsd +0 -25
- package/skills/documents/docx/scripts/office/schemas/ISO-IEC29500-4_2016/shared-customXmlSchemaProperties.xsd +0 -18
- package/skills/documents/docx/scripts/office/schemas/ISO-IEC29500-4_2016/shared-documentPropertiesCustom.xsd +0 -59
- package/skills/documents/docx/scripts/office/schemas/ISO-IEC29500-4_2016/shared-documentPropertiesExtended.xsd +0 -56
- package/skills/documents/docx/scripts/office/schemas/ISO-IEC29500-4_2016/shared-documentPropertiesVariantTypes.xsd +0 -195
- package/skills/documents/docx/scripts/office/schemas/ISO-IEC29500-4_2016/shared-math.xsd +0 -582
- package/skills/documents/docx/scripts/office/schemas/ISO-IEC29500-4_2016/shared-relationshipReference.xsd +0 -25
- package/skills/documents/docx/scripts/office/schemas/ISO-IEC29500-4_2016/sml.xsd +0 -4439
- package/skills/documents/docx/scripts/office/schemas/ISO-IEC29500-4_2016/vml-main.xsd +0 -570
- package/skills/documents/docx/scripts/office/schemas/ISO-IEC29500-4_2016/vml-officeDrawing.xsd +0 -509
- package/skills/documents/docx/scripts/office/schemas/ISO-IEC29500-4_2016/vml-presentationDrawing.xsd +0 -12
- package/skills/documents/docx/scripts/office/schemas/ISO-IEC29500-4_2016/vml-spreadsheetDrawing.xsd +0 -108
- package/skills/documents/docx/scripts/office/schemas/ISO-IEC29500-4_2016/vml-wordprocessingDrawing.xsd +0 -96
- package/skills/documents/docx/scripts/office/schemas/ISO-IEC29500-4_2016/wml.xsd +0 -3646
- package/skills/documents/docx/scripts/office/schemas/ISO-IEC29500-4_2016/xml.xsd +0 -116
- package/skills/documents/docx/scripts/office/schemas/ecma/fouth-edition/opc-contentTypes.xsd +0 -42
- package/skills/documents/docx/scripts/office/schemas/ecma/fouth-edition/opc-coreProperties.xsd +0 -50
- package/skills/documents/docx/scripts/office/schemas/ecma/fouth-edition/opc-digSig.xsd +0 -49
- package/skills/documents/docx/scripts/office/schemas/ecma/fouth-edition/opc-relationships.xsd +0 -33
- package/skills/documents/docx/scripts/office/schemas/mce/mc.xsd +0 -75
- package/skills/documents/docx/scripts/office/schemas/microsoft/wml-2010.xsd +0 -560
- package/skills/documents/docx/scripts/office/schemas/microsoft/wml-2012.xsd +0 -67
- package/skills/documents/docx/scripts/office/schemas/microsoft/wml-2018.xsd +0 -14
- package/skills/documents/docx/scripts/office/schemas/microsoft/wml-cex-2018.xsd +0 -20
- package/skills/documents/docx/scripts/office/schemas/microsoft/wml-cid-2016.xsd +0 -13
- package/skills/documents/docx/scripts/office/schemas/microsoft/wml-sdtdatahash-2020.xsd +0 -4
- package/skills/documents/docx/scripts/office/schemas/microsoft/wml-symex-2015.xsd +0 -8
- package/skills/documents/docx/scripts/office/soffice.py +0 -183
- package/skills/documents/docx/scripts/office/unpack.py +0 -132
- package/skills/documents/docx/scripts/office/validate.py +0 -111
- package/skills/documents/docx/scripts/office/validators/__init__.py +0 -15
- package/skills/documents/docx/scripts/office/validators/base.py +0 -847
- package/skills/documents/docx/scripts/office/validators/docx.py +0 -446
- package/skills/documents/docx/scripts/office/validators/pptx.py +0 -275
- package/skills/documents/docx/scripts/office/validators/redlining.py +0 -247
- package/skills/documents/docx/scripts/templates/comments.xml +0 -3
- package/skills/documents/docx/scripts/templates/commentsExtended.xml +0 -3
- package/skills/documents/docx/scripts/templates/commentsExtensible.xml +0 -3
- package/skills/documents/docx/scripts/templates/commentsIds.xml +0 -3
- package/skills/documents/docx/scripts/templates/people.xml +0 -3
- package/skills/documents/pdf/LICENSE.txt +0 -30
- package/skills/documents/pdf/SKILL-zh.md +0 -314
- package/skills/documents/pdf/SKILL.md +0 -314
- package/skills/documents/pdf/forms.md +0 -294
- package/skills/documents/pdf/reference.md +0 -612
- package/skills/documents/pdf/scripts/check_bounding_boxes.py +0 -65
- package/skills/documents/pdf/scripts/check_fillable_fields.py +0 -11
- package/skills/documents/pdf/scripts/convert_pdf_to_images.py +0 -33
- package/skills/documents/pdf/scripts/create_validation_image.py +0 -37
- package/skills/documents/pdf/scripts/extract_form_field_info.py +0 -122
- package/skills/documents/pdf/scripts/extract_form_structure.py +0 -115
- package/skills/documents/pdf/scripts/fill_fillable_fields.py +0 -98
- package/skills/documents/pdf/scripts/fill_pdf_form_with_annotations.py +0 -107
- package/skills/documents/pptx/LICENSE.txt +0 -30
- package/skills/documents/pptx/SKILL-zh.md +0 -232
- package/skills/documents/pptx/SKILL.md +0 -232
- package/skills/documents/pptx/editing.md +0 -205
- package/skills/documents/pptx/pptxgenjs.md +0 -420
- package/skills/documents/pptx/scripts/__init__.py +0 -0
- package/skills/documents/pptx/scripts/add_slide.py +0 -195
- package/skills/documents/pptx/scripts/clean.py +0 -286
- package/skills/documents/pptx/scripts/office/helpers/__init__.py +0 -0
- package/skills/documents/pptx/scripts/office/helpers/merge_runs.py +0 -199
- package/skills/documents/pptx/scripts/office/helpers/simplify_redlines.py +0 -197
- package/skills/documents/pptx/scripts/office/pack.py +0 -159
- package/skills/documents/pptx/scripts/office/schemas/ISO-IEC29500-4_2016/dml-chart.xsd +0 -1499
- package/skills/documents/pptx/scripts/office/schemas/ISO-IEC29500-4_2016/dml-chartDrawing.xsd +0 -146
- package/skills/documents/pptx/scripts/office/schemas/ISO-IEC29500-4_2016/dml-diagram.xsd +0 -1085
- package/skills/documents/pptx/scripts/office/schemas/ISO-IEC29500-4_2016/dml-lockedCanvas.xsd +0 -11
- package/skills/documents/pptx/scripts/office/schemas/ISO-IEC29500-4_2016/dml-main.xsd +0 -3081
- package/skills/documents/pptx/scripts/office/schemas/ISO-IEC29500-4_2016/dml-picture.xsd +0 -23
- package/skills/documents/pptx/scripts/office/schemas/ISO-IEC29500-4_2016/dml-spreadsheetDrawing.xsd +0 -185
- package/skills/documents/pptx/scripts/office/schemas/ISO-IEC29500-4_2016/dml-wordprocessingDrawing.xsd +0 -287
- package/skills/documents/pptx/scripts/office/schemas/ISO-IEC29500-4_2016/pml.xsd +0 -1676
- package/skills/documents/pptx/scripts/office/schemas/ISO-IEC29500-4_2016/shared-additionalCharacteristics.xsd +0 -28
- package/skills/documents/pptx/scripts/office/schemas/ISO-IEC29500-4_2016/shared-bibliography.xsd +0 -144
- package/skills/documents/pptx/scripts/office/schemas/ISO-IEC29500-4_2016/shared-commonSimpleTypes.xsd +0 -174
- package/skills/documents/pptx/scripts/office/schemas/ISO-IEC29500-4_2016/shared-customXmlDataProperties.xsd +0 -25
- package/skills/documents/pptx/scripts/office/schemas/ISO-IEC29500-4_2016/shared-customXmlSchemaProperties.xsd +0 -18
- package/skills/documents/pptx/scripts/office/schemas/ISO-IEC29500-4_2016/shared-documentPropertiesCustom.xsd +0 -59
- package/skills/documents/pptx/scripts/office/schemas/ISO-IEC29500-4_2016/shared-documentPropertiesExtended.xsd +0 -56
- package/skills/documents/pptx/scripts/office/schemas/ISO-IEC29500-4_2016/shared-documentPropertiesVariantTypes.xsd +0 -195
- package/skills/documents/pptx/scripts/office/schemas/ISO-IEC29500-4_2016/shared-math.xsd +0 -582
- package/skills/documents/pptx/scripts/office/schemas/ISO-IEC29500-4_2016/shared-relationshipReference.xsd +0 -25
- package/skills/documents/pptx/scripts/office/schemas/ISO-IEC29500-4_2016/sml.xsd +0 -4439
- package/skills/documents/pptx/scripts/office/schemas/ISO-IEC29500-4_2016/vml-main.xsd +0 -570
- package/skills/documents/pptx/scripts/office/schemas/ISO-IEC29500-4_2016/vml-officeDrawing.xsd +0 -509
- package/skills/documents/pptx/scripts/office/schemas/ISO-IEC29500-4_2016/vml-presentationDrawing.xsd +0 -12
- package/skills/documents/pptx/scripts/office/schemas/ISO-IEC29500-4_2016/vml-spreadsheetDrawing.xsd +0 -108
- package/skills/documents/pptx/scripts/office/schemas/ISO-IEC29500-4_2016/vml-wordprocessingDrawing.xsd +0 -96
- package/skills/documents/pptx/scripts/office/schemas/ISO-IEC29500-4_2016/wml.xsd +0 -3646
- package/skills/documents/pptx/scripts/office/schemas/ISO-IEC29500-4_2016/xml.xsd +0 -116
- package/skills/documents/pptx/scripts/office/schemas/ecma/fouth-edition/opc-contentTypes.xsd +0 -42
- package/skills/documents/pptx/scripts/office/schemas/ecma/fouth-edition/opc-coreProperties.xsd +0 -50
- package/skills/documents/pptx/scripts/office/schemas/ecma/fouth-edition/opc-digSig.xsd +0 -49
- package/skills/documents/pptx/scripts/office/schemas/ecma/fouth-edition/opc-relationships.xsd +0 -33
- package/skills/documents/pptx/scripts/office/schemas/mce/mc.xsd +0 -75
- package/skills/documents/pptx/scripts/office/schemas/microsoft/wml-2010.xsd +0 -560
- package/skills/documents/pptx/scripts/office/schemas/microsoft/wml-2012.xsd +0 -67
- package/skills/documents/pptx/scripts/office/schemas/microsoft/wml-2018.xsd +0 -14
- package/skills/documents/pptx/scripts/office/schemas/microsoft/wml-cex-2018.xsd +0 -20
- package/skills/documents/pptx/scripts/office/schemas/microsoft/wml-cid-2016.xsd +0 -13
- package/skills/documents/pptx/scripts/office/schemas/microsoft/wml-sdtdatahash-2020.xsd +0 -4
- package/skills/documents/pptx/scripts/office/schemas/microsoft/wml-symex-2015.xsd +0 -8
- package/skills/documents/pptx/scripts/office/soffice.py +0 -183
- package/skills/documents/pptx/scripts/office/unpack.py +0 -132
- package/skills/documents/pptx/scripts/office/validate.py +0 -111
- package/skills/documents/pptx/scripts/office/validators/__init__.py +0 -15
- package/skills/documents/pptx/scripts/office/validators/base.py +0 -847
- package/skills/documents/pptx/scripts/office/validators/docx.py +0 -446
- package/skills/documents/pptx/scripts/office/validators/pptx.py +0 -275
- package/skills/documents/pptx/scripts/office/validators/redlining.py +0 -247
- package/skills/documents/pptx/scripts/thumbnail.py +0 -289
- package/skills/documents/xlsx/SKILL-zh.md +0 -292
- package/skills/engineering/diagnose/SKILL-zh.md +0 -117
- package/skills/engineering/grill-with-docs/ADR-FORMAT.md +0 -47
- package/skills/engineering/grill-with-docs/CONTEXT-FORMAT.md +0 -77
- package/skills/engineering/grill-with-docs/SKILL-zh.md +0 -88
- package/skills/engineering/grill-with-docs/SKILL.md +0 -88
- package/skills/engineering/improve-codebase-architecture/DEEPENING.md +0 -37
- package/skills/engineering/improve-codebase-architecture/INTERFACE-DESIGN.md +0 -44
- package/skills/engineering/improve-codebase-architecture/LANGUAGE.md +0 -53
- package/skills/engineering/improve-codebase-architecture/SKILL-zh.md +0 -71
- package/skills/engineering/improve-codebase-architecture/SKILL.md +0 -71
- package/skills/engineering/tdd/SKILL-zh.md +0 -109
- package/skills/engineering/to-issues/SKILL-zh.md +0 -81
- package/skills/engineering/to-issues/SKILL.md +0 -81
- package/skills/engineering/to-prd/SKILL-zh.md +0 -76
- package/skills/engineering/to-prd/SKILL.md +0 -74
- package/skills/engineering/zoom-out/SKILL-zh.md +0 -7
- package/skills/engineering/zoom-out/SKILL.md +0 -7
- package/skills/tools/find-skills/SKILL-zh.md +0 -440
- package/skills/tools/github/SKILL-zh.md +0 -48
- package/skills/tools/internal-comms/LICENSE.txt +0 -202
- package/skills/tools/internal-comms/SKILL-zh.md +0 -32
- package/skills/tools/internal-comms/SKILL.md +0 -32
- package/skills/tools/internal-comms/examples/3p-updates.md +0 -47
- package/skills/tools/internal-comms/examples/company-newsletter.md +0 -65
- package/skills/tools/internal-comms/examples/faq-answers.md +0 -30
- package/skills/tools/internal-comms/examples/general-comms.md +0 -16
- package/skills/tools/skill-creator/LICENSE.txt +0 -202
- package/skills/tools/skill-creator/SKILL-zh.md +0 -483
- package/skills/tools/skill-creator/SKILL.md +0 -485
- package/skills/tools/skill-creator/agents/analyzer.md +0 -274
- package/skills/tools/skill-creator/agents/comparator.md +0 -202
- package/skills/tools/skill-creator/agents/grader.md +0 -223
- package/skills/tools/skill-creator/assets/eval_review.html +0 -146
- package/skills/tools/skill-creator/eval-viewer/generate_review.py +0 -471
- package/skills/tools/skill-creator/eval-viewer/viewer.html +0 -1325
- package/skills/tools/skill-creator/references/schemas.md +0 -430
- package/skills/tools/skill-creator/scripts/__init__.py +0 -0
- package/skills/tools/skill-creator/scripts/aggregate_benchmark.py +0 -401
- package/skills/tools/skill-creator/scripts/generate_report.py +0 -326
- package/skills/tools/skill-creator/scripts/improve_description.py +0 -247
- package/skills/tools/skill-creator/scripts/package_skill.py +0 -136
- package/skills/tools/skill-creator/scripts/quick_validate.py +0 -103
- package/skills/tools/skill-creator/scripts/run_eval.py +0 -310
- package/skills/tools/skill-creator/scripts/run_loop.py +0 -328
- package/skills/tools/skill-creator/scripts/utils.py +0 -47
- package/skills/tools/summarize/SKILL-zh.md +0 -47
- package/skills/tools/weather/SKILL-zh.md +0 -46
- package/skills/tools/weather/SKILL.md +0 -46
- package/skills/tools/webapp-testing/SKILL-zh.md +0 -96
|
@@ -0,0 +1,184 @@
|
|
|
1
|
+
import { flattenMessageContent } from "../session/client-history.js";
|
|
2
|
+
//#region src/tui/tui-session-snapshot.ts
|
|
3
|
+
var TuiSessionSnapshot = class {
|
|
4
|
+
entries = [];
|
|
5
|
+
nextId = 1;
|
|
6
|
+
constructor(getSessionKey, getCwdValue, getSessionNameValue, getSessionFileValue = () => void 0, getSessionDirValue = () => void 0) {
|
|
7
|
+
this.getSessionKey = getSessionKey;
|
|
8
|
+
this.getCwdValue = getCwdValue;
|
|
9
|
+
this.getSessionNameValue = getSessionNameValue;
|
|
10
|
+
this.getSessionFileValue = getSessionFileValue;
|
|
11
|
+
this.getSessionDirValue = getSessionDirValue;
|
|
12
|
+
}
|
|
13
|
+
replaceFromHistory(messages) {
|
|
14
|
+
this.nextId = 1;
|
|
15
|
+
let parentId = null;
|
|
16
|
+
this.entries = messages.map((message) => {
|
|
17
|
+
const entry = this.entryFromHistory(message, parentId);
|
|
18
|
+
parentId = entry.id;
|
|
19
|
+
return entry;
|
|
20
|
+
});
|
|
21
|
+
}
|
|
22
|
+
clear() {
|
|
23
|
+
this.entries = [];
|
|
24
|
+
this.nextId = 1;
|
|
25
|
+
}
|
|
26
|
+
appendMessage(role, content) {
|
|
27
|
+
this.entries.push(this.createEntry({
|
|
28
|
+
type: "message",
|
|
29
|
+
role,
|
|
30
|
+
content,
|
|
31
|
+
message: {
|
|
32
|
+
role,
|
|
33
|
+
content,
|
|
34
|
+
usage: {
|
|
35
|
+
input: 0,
|
|
36
|
+
output: 0,
|
|
37
|
+
cost: { total: 0 }
|
|
38
|
+
}
|
|
39
|
+
},
|
|
40
|
+
timestamp: Date.now()
|
|
41
|
+
}));
|
|
42
|
+
}
|
|
43
|
+
setLabel(entryId, label) {
|
|
44
|
+
const entry = this.entries.find((candidate) => candidate.id === entryId);
|
|
45
|
+
if (!entry) return;
|
|
46
|
+
const trimmed = label?.trim();
|
|
47
|
+
if (trimmed) {
|
|
48
|
+
entry.userLabel = trimmed;
|
|
49
|
+
entry.labelTimestamp = (/* @__PURE__ */ new Date()).toISOString();
|
|
50
|
+
} else {
|
|
51
|
+
delete entry.userLabel;
|
|
52
|
+
delete entry.labelTimestamp;
|
|
53
|
+
}
|
|
54
|
+
}
|
|
55
|
+
appendCustomEntry(customType, data) {
|
|
56
|
+
this.entries.push(this.createEntry({
|
|
57
|
+
type: "custom",
|
|
58
|
+
customType,
|
|
59
|
+
data,
|
|
60
|
+
display: void 0,
|
|
61
|
+
content: "",
|
|
62
|
+
timestamp: Date.now(),
|
|
63
|
+
raw: {
|
|
64
|
+
type: "custom",
|
|
65
|
+
customType,
|
|
66
|
+
data
|
|
67
|
+
}
|
|
68
|
+
}));
|
|
69
|
+
}
|
|
70
|
+
appendCustomMessage(message) {
|
|
71
|
+
this.entries.push(this.createEntry({
|
|
72
|
+
type: "custom",
|
|
73
|
+
customType: message.customType,
|
|
74
|
+
data: message.details,
|
|
75
|
+
display: message.display ?? true,
|
|
76
|
+
content: typeof message.content === "string" ? message.content : Array.isArray(message.content) ? flattenMessageContent(message.content) : "",
|
|
77
|
+
timestamp: Date.now(),
|
|
78
|
+
raw: {
|
|
79
|
+
role: "custom",
|
|
80
|
+
customType: message.customType,
|
|
81
|
+
content: message.content,
|
|
82
|
+
display: message.display ?? true,
|
|
83
|
+
details: message.details
|
|
84
|
+
}
|
|
85
|
+
}));
|
|
86
|
+
}
|
|
87
|
+
manager() {
|
|
88
|
+
return {
|
|
89
|
+
getEntries: () => [...this.entries],
|
|
90
|
+
getBranch: () => [...this.entries],
|
|
91
|
+
getLeafEntry: () => this.entries[this.entries.length - 1],
|
|
92
|
+
getLeafId: () => this.entries[this.entries.length - 1]?.id ?? null,
|
|
93
|
+
getEntry: (entryId) => this.entries.find((entry) => entry.id === entryId),
|
|
94
|
+
getLabel: (entryId) => this.entries.find((entry) => entry.id === entryId)?.userLabel,
|
|
95
|
+
getHeader: () => this.createHeader(),
|
|
96
|
+
getTree: () => this.createTree(),
|
|
97
|
+
getSessionId: () => this.getSessionKey(),
|
|
98
|
+
getSessionFile: () => this.getSessionFileValue(),
|
|
99
|
+
getSessionDir: () => this.getSessionDirValue(),
|
|
100
|
+
getSessionName: () => this.getSessionNameValue(),
|
|
101
|
+
getCwd: () => this.getCwdValue()
|
|
102
|
+
};
|
|
103
|
+
}
|
|
104
|
+
entryFromHistory(message, parentId) {
|
|
105
|
+
const type = message.kind ?? "message";
|
|
106
|
+
const role = message.role;
|
|
107
|
+
const base = {
|
|
108
|
+
id: message.id,
|
|
109
|
+
parentId,
|
|
110
|
+
type,
|
|
111
|
+
customType: message.custom?.customType,
|
|
112
|
+
data: message.custom?.details,
|
|
113
|
+
display: message.custom?.display,
|
|
114
|
+
role,
|
|
115
|
+
content: message.content,
|
|
116
|
+
timestamp: message.timestamp,
|
|
117
|
+
raw: message
|
|
118
|
+
};
|
|
119
|
+
if (type === "message") return this.createEntry({
|
|
120
|
+
...base,
|
|
121
|
+
message: {
|
|
122
|
+
role,
|
|
123
|
+
content: message.content,
|
|
124
|
+
usage: {
|
|
125
|
+
input: 0,
|
|
126
|
+
output: 0,
|
|
127
|
+
cost: { total: 0 }
|
|
128
|
+
}
|
|
129
|
+
}
|
|
130
|
+
});
|
|
131
|
+
return this.createEntry(base);
|
|
132
|
+
}
|
|
133
|
+
createHeader() {
|
|
134
|
+
const firstTimestamp = this.entries[0]?.timestamp;
|
|
135
|
+
const timestamp = typeof firstTimestamp === "number" ? new Date(firstTimestamp).toISOString() : (/* @__PURE__ */ new Date(0)).toISOString();
|
|
136
|
+
return {
|
|
137
|
+
type: "session",
|
|
138
|
+
version: 3,
|
|
139
|
+
id: this.getSessionKey(),
|
|
140
|
+
timestamp,
|
|
141
|
+
cwd: this.getCwdValue()
|
|
142
|
+
};
|
|
143
|
+
}
|
|
144
|
+
createTree() {
|
|
145
|
+
const nodeMap = /* @__PURE__ */ new Map();
|
|
146
|
+
const roots = [];
|
|
147
|
+
for (const entry of this.entries) nodeMap.set(entry.id, {
|
|
148
|
+
entry,
|
|
149
|
+
children: [],
|
|
150
|
+
label: entry.userLabel,
|
|
151
|
+
labelTimestamp: entry.labelTimestamp
|
|
152
|
+
});
|
|
153
|
+
for (const entry of this.entries) {
|
|
154
|
+
const node = nodeMap.get(entry.id);
|
|
155
|
+
if (!node) continue;
|
|
156
|
+
if (!entry.parentId || entry.parentId === entry.id) {
|
|
157
|
+
roots.push(node);
|
|
158
|
+
continue;
|
|
159
|
+
}
|
|
160
|
+
const parent = nodeMap.get(entry.parentId);
|
|
161
|
+
if (parent) parent.children.push(node);
|
|
162
|
+
else roots.push(node);
|
|
163
|
+
}
|
|
164
|
+
const stack = [...roots];
|
|
165
|
+
while (stack.length > 0) {
|
|
166
|
+
const node = stack.pop();
|
|
167
|
+
if (!node) continue;
|
|
168
|
+
node.children.sort((a, b) => (a.entry.timestamp ?? 0) - (b.entry.timestamp ?? 0));
|
|
169
|
+
stack.push(...node.children);
|
|
170
|
+
}
|
|
171
|
+
return roots;
|
|
172
|
+
}
|
|
173
|
+
createEntry(entry) {
|
|
174
|
+
return {
|
|
175
|
+
...entry,
|
|
176
|
+
id: entry.id ?? `tui:${this.nextId++}`,
|
|
177
|
+
parentId: entry.parentId ?? this.entries[this.entries.length - 1]?.id ?? null
|
|
178
|
+
};
|
|
179
|
+
}
|
|
180
|
+
};
|
|
181
|
+
//#endregion
|
|
182
|
+
export { TuiSessionSnapshot };
|
|
183
|
+
|
|
184
|
+
//# sourceMappingURL=tui-session-snapshot.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"tui-session-snapshot.js","names":[],"sources":["../../../src/tui/tui-session-snapshot.ts"],"sourcesContent":["import type { HistoryMessage } from './tui-backend.js';\nimport { flattenMessageContent } from '../session/client-history.js';\n\nexport type TuiSessionSnapshotEntryType =\n | 'message'\n | 'compaction'\n | 'context'\n | 'bash'\n | 'custom'\n | 'branch';\n\nexport interface TuiSessionSnapshotEntry {\n id: string;\n type: TuiSessionSnapshotEntryType;\n parentId: string | null;\n customType?: string;\n data?: unknown;\n display?: boolean;\n userLabel?: string;\n labelTimestamp?: string;\n role?: 'user' | 'assistant' | 'system';\n message?: {\n role: 'user' | 'assistant' | 'system';\n content: string;\n usage?: {\n input: number;\n output: number;\n cost: { total: number };\n };\n };\n content: string;\n timestamp?: number;\n raw?: HistoryMessage | Record<string, unknown>;\n}\n\nexport interface TuiSessionSnapshotHeader {\n type: 'session';\n version?: number;\n id: string;\n timestamp: string;\n cwd: string;\n parentSession?: string;\n}\n\nexport interface TuiSessionSnapshotTreeNode {\n entry: TuiSessionSnapshotEntry;\n children: TuiSessionSnapshotTreeNode[];\n label?: string;\n labelTimestamp?: string;\n}\n\nexport interface TuiReadonlySessionManager {\n getEntries(): TuiSessionSnapshotEntry[];\n getBranch(): TuiSessionSnapshotEntry[];\n getLeafEntry(): TuiSessionSnapshotEntry | undefined;\n getLeafId(): string | null;\n getEntry(entryId: string): TuiSessionSnapshotEntry | undefined;\n getLabel(entryId: string): string | undefined;\n getHeader(): TuiSessionSnapshotHeader | null;\n getTree(): TuiSessionSnapshotTreeNode[];\n getSessionId(): string;\n getSessionFile(): string | undefined;\n getSessionDir(): string | undefined;\n getSessionName(): string | undefined;\n getCwd(): string;\n}\n\nexport class TuiSessionSnapshot {\n private entries: TuiSessionSnapshotEntry[] = [];\n private nextId = 1;\n\n constructor(\n private readonly getSessionKey: () => string,\n private readonly getCwdValue: () => string,\n private readonly getSessionNameValue: () => string | undefined,\n private readonly getSessionFileValue: () => string | undefined = () => undefined,\n private readonly getSessionDirValue: () => string | undefined = () => undefined,\n ) {}\n\n replaceFromHistory(messages: HistoryMessage[]): void {\n this.nextId = 1;\n let parentId: string | null = null;\n this.entries = messages.map((message) => {\n const entry = this.entryFromHistory(message, parentId);\n parentId = entry.id;\n return entry;\n });\n }\n\n clear(): void {\n this.entries = [];\n this.nextId = 1;\n }\n\n appendMessage(role: 'user' | 'assistant' | 'system', content: string): void {\n this.entries.push(this.createEntry({\n type: 'message',\n role,\n content,\n message: {\n role,\n content,\n usage: {\n input: 0,\n output: 0,\n cost: { total: 0 },\n },\n },\n timestamp: Date.now(),\n }));\n }\n\n setLabel(entryId: string, label: string | undefined): void {\n const entry = this.entries.find((candidate) => candidate.id === entryId);\n if (!entry) return;\n const trimmed = label?.trim();\n if (trimmed) {\n entry.userLabel = trimmed;\n entry.labelTimestamp = new Date().toISOString();\n } else {\n delete entry.userLabel;\n delete entry.labelTimestamp;\n }\n }\n\n appendCustomEntry(customType: string, data?: unknown): void {\n this.entries.push(this.createEntry({\n type: 'custom',\n customType,\n data,\n display: undefined,\n content: '',\n timestamp: Date.now(),\n raw: {\n type: 'custom',\n customType,\n data,\n },\n }));\n }\n\n appendCustomMessage(message: {\n customType: string;\n content?: string | unknown[];\n display?: boolean;\n details?: unknown;\n }): void {\n this.entries.push(this.createEntry({\n type: 'custom',\n customType: message.customType,\n data: message.details,\n display: message.display ?? true,\n content: typeof message.content === 'string'\n ? message.content\n : Array.isArray(message.content)\n ? flattenMessageContent(message.content)\n : '',\n timestamp: Date.now(),\n raw: {\n role: 'custom',\n customType: message.customType,\n content: message.content,\n display: message.display ?? true,\n details: message.details,\n },\n }));\n }\n\n manager(): TuiReadonlySessionManager {\n return {\n getEntries: () => [...this.entries],\n getBranch: () => [...this.entries],\n getLeafEntry: () => this.entries[this.entries.length - 1],\n getLeafId: () => this.entries[this.entries.length - 1]?.id ?? null,\n getEntry: (entryId) => this.entries.find((entry) => entry.id === entryId),\n getLabel: (entryId) => this.entries.find((entry) => entry.id === entryId)?.userLabel,\n getHeader: () => this.createHeader(),\n getTree: () => this.createTree(),\n getSessionId: () => this.getSessionKey(),\n getSessionFile: () => this.getSessionFileValue(),\n getSessionDir: () => this.getSessionDirValue(),\n getSessionName: () => this.getSessionNameValue(),\n getCwd: () => this.getCwdValue(),\n };\n }\n\n private entryFromHistory(\n message: HistoryMessage,\n parentId: string | null,\n ): TuiSessionSnapshotEntry {\n const type = message.kind ?? 'message';\n const role = message.role;\n const base = {\n id: message.id,\n parentId,\n type,\n customType: message.custom?.customType,\n data: message.custom?.details,\n display: message.custom?.display,\n role,\n content: message.content,\n timestamp: message.timestamp,\n raw: message,\n };\n if (type === 'message') {\n return this.createEntry({\n ...base,\n message: {\n role,\n content: message.content,\n usage: {\n input: 0,\n output: 0,\n cost: { total: 0 },\n },\n },\n });\n }\n return this.createEntry(base);\n }\n\n private createHeader(): TuiSessionSnapshotHeader {\n const firstTimestamp = this.entries[0]?.timestamp;\n const timestamp = typeof firstTimestamp === 'number'\n ? new Date(firstTimestamp).toISOString()\n : new Date(0).toISOString();\n return {\n type: 'session',\n version: 3,\n id: this.getSessionKey(),\n timestamp,\n cwd: this.getCwdValue(),\n };\n }\n\n private createTree(): TuiSessionSnapshotTreeNode[] {\n const nodeMap = new Map<string, TuiSessionSnapshotTreeNode>();\n const roots: TuiSessionSnapshotTreeNode[] = [];\n for (const entry of this.entries) {\n nodeMap.set(entry.id, {\n entry,\n children: [],\n label: entry.userLabel,\n labelTimestamp: entry.labelTimestamp,\n });\n }\n for (const entry of this.entries) {\n const node = nodeMap.get(entry.id);\n if (!node) continue;\n if (!entry.parentId || entry.parentId === entry.id) {\n roots.push(node);\n continue;\n }\n const parent = nodeMap.get(entry.parentId);\n if (parent) {\n parent.children.push(node);\n } else {\n roots.push(node);\n }\n }\n const stack = [...roots];\n while (stack.length > 0) {\n const node = stack.pop();\n if (!node) continue;\n node.children.sort((a, b) => (a.entry.timestamp ?? 0) - (b.entry.timestamp ?? 0));\n stack.push(...node.children);\n }\n return roots;\n }\n\n private createEntry(\n entry: Omit<TuiSessionSnapshotEntry, 'id' | 'parentId'> & {\n id?: string;\n parentId?: string | null;\n },\n ): TuiSessionSnapshotEntry {\n return {\n ...entry,\n id: entry.id ?? `tui:${this.nextId++}`,\n parentId: entry.parentId ?? this.entries[this.entries.length - 1]?.id ?? null,\n };\n }\n}\n"],"mappings":";;AAmEA,IAAa,qBAAb,MAAgC;CAC9B,UAA6C,EAAE;CAC/C,SAAiB;CAEjB,YACE,eACA,aACA,qBACA,4BAAuE,KAAA,GACvE,2BAAsE,KAAA,GACtE;AALiB,OAAA,gBAAA;AACA,OAAA,cAAA;AACA,OAAA,sBAAA;AACA,OAAA,sBAAA;AACA,OAAA,qBAAA;;CAGnB,mBAAmB,UAAkC;AACnD,OAAK,SAAS;EACd,IAAI,WAA0B;AAC9B,OAAK,UAAU,SAAS,KAAK,YAAY;GACvC,MAAM,QAAQ,KAAK,iBAAiB,SAAS,SAAS;AACtD,cAAW,MAAM;AACjB,UAAO;IACP;;CAGJ,QAAc;AACZ,OAAK,UAAU,EAAE;AACjB,OAAK,SAAS;;CAGhB,cAAc,MAAuC,SAAuB;AAC1E,OAAK,QAAQ,KAAK,KAAK,YAAY;GACjC,MAAM;GACN;GACA;GACA,SAAS;IACP;IACA;IACA,OAAO;KACL,OAAO;KACP,QAAQ;KACR,MAAM,EAAE,OAAO,GAAG;KACnB;IACF;GACD,WAAW,KAAK,KAAK;GACtB,CAAC,CAAC;;CAGL,SAAS,SAAiB,OAAiC;EACzD,MAAM,QAAQ,KAAK,QAAQ,MAAM,cAAc,UAAU,OAAO,QAAQ;AACxE,MAAI,CAAC,MAAO;EACZ,MAAM,UAAU,OAAO,MAAM;AAC7B,MAAI,SAAS;AACX,SAAM,YAAY;AAClB,SAAM,kCAAiB,IAAI,MAAM,EAAC,aAAa;SAC1C;AACL,UAAO,MAAM;AACb,UAAO,MAAM;;;CAIjB,kBAAkB,YAAoB,MAAsB;AAC1D,OAAK,QAAQ,KAAK,KAAK,YAAY;GACjC,MAAM;GACN;GACA;GACA,SAAS,KAAA;GACT,SAAS;GACT,WAAW,KAAK,KAAK;GACrB,KAAK;IACH,MAAM;IACN;IACA;IACD;GACF,CAAC,CAAC;;CAGL,oBAAoB,SAKX;AACP,OAAK,QAAQ,KAAK,KAAK,YAAY;GACjC,MAAM;GACN,YAAY,QAAQ;GACpB,MAAM,QAAQ;GACd,SAAS,QAAQ,WAAW;GAC5B,SAAS,OAAO,QAAQ,YAAY,WAChC,QAAQ,UACR,MAAM,QAAQ,QAAQ,QAAQ,GAC5B,sBAAsB,QAAQ,QAAQ,GACtC;GACN,WAAW,KAAK,KAAK;GACrB,KAAK;IACH,MAAM;IACN,YAAY,QAAQ;IACpB,SAAS,QAAQ;IACjB,SAAS,QAAQ,WAAW;IAC5B,SAAS,QAAQ;IAClB;GACF,CAAC,CAAC;;CAGL,UAAqC;AACnC,SAAO;GACL,kBAAkB,CAAC,GAAG,KAAK,QAAQ;GACnC,iBAAiB,CAAC,GAAG,KAAK,QAAQ;GAClC,oBAAoB,KAAK,QAAQ,KAAK,QAAQ,SAAS;GACvD,iBAAiB,KAAK,QAAQ,KAAK,QAAQ,SAAS,IAAI,MAAM;GAC9D,WAAW,YAAY,KAAK,QAAQ,MAAM,UAAU,MAAM,OAAO,QAAQ;GACzE,WAAW,YAAY,KAAK,QAAQ,MAAM,UAAU,MAAM,OAAO,QAAQ,EAAE;GAC3E,iBAAiB,KAAK,cAAc;GACpC,eAAe,KAAK,YAAY;GAChC,oBAAoB,KAAK,eAAe;GACxC,sBAAsB,KAAK,qBAAqB;GAChD,qBAAqB,KAAK,oBAAoB;GAC9C,sBAAsB,KAAK,qBAAqB;GAChD,cAAc,KAAK,aAAa;GACjC;;CAGH,iBACE,SACA,UACyB;EACzB,MAAM,OAAO,QAAQ,QAAQ;EAC7B,MAAM,OAAO,QAAQ;EACrB,MAAM,OAAO;GACX,IAAI,QAAQ;GACZ;GACA;GACA,YAAY,QAAQ,QAAQ;GAC5B,MAAM,QAAQ,QAAQ;GACtB,SAAS,QAAQ,QAAQ;GACzB;GACA,SAAS,QAAQ;GACjB,WAAW,QAAQ;GACnB,KAAK;GACN;AACD,MAAI,SAAS,UACX,QAAO,KAAK,YAAY;GACtB,GAAG;GACH,SAAS;IACP;IACA,SAAS,QAAQ;IACjB,OAAO;KACL,OAAO;KACP,QAAQ;KACR,MAAM,EAAE,OAAO,GAAG;KACnB;IACF;GACF,CAAC;AAEJ,SAAO,KAAK,YAAY,KAAK;;CAG/B,eAAiD;EAC/C,MAAM,iBAAiB,KAAK,QAAQ,IAAI;EACxC,MAAM,YAAY,OAAO,mBAAmB,WACxC,IAAI,KAAK,eAAe,CAAC,aAAa,oBACtC,IAAI,KAAK,EAAE,EAAC,aAAa;AAC7B,SAAO;GACL,MAAM;GACN,SAAS;GACT,IAAI,KAAK,eAAe;GACxB;GACA,KAAK,KAAK,aAAa;GACxB;;CAGH,aAAmD;EACjD,MAAM,0BAAU,IAAI,KAAyC;EAC7D,MAAM,QAAsC,EAAE;AAC9C,OAAK,MAAM,SAAS,KAAK,QACvB,SAAQ,IAAI,MAAM,IAAI;GACpB;GACA,UAAU,EAAE;GACZ,OAAO,MAAM;GACb,gBAAgB,MAAM;GACvB,CAAC;AAEJ,OAAK,MAAM,SAAS,KAAK,SAAS;GAChC,MAAM,OAAO,QAAQ,IAAI,MAAM,GAAG;AAClC,OAAI,CAAC,KAAM;AACX,OAAI,CAAC,MAAM,YAAY,MAAM,aAAa,MAAM,IAAI;AAClD,UAAM,KAAK,KAAK;AAChB;;GAEF,MAAM,SAAS,QAAQ,IAAI,MAAM,SAAS;AAC1C,OAAI,OACF,QAAO,SAAS,KAAK,KAAK;OAE1B,OAAM,KAAK,KAAK;;EAGpB,MAAM,QAAQ,CAAC,GAAG,MAAM;AACxB,SAAO,MAAM,SAAS,GAAG;GACvB,MAAM,OAAO,MAAM,KAAK;AACxB,OAAI,CAAC,KAAM;AACX,QAAK,SAAS,MAAM,GAAG,OAAO,EAAE,MAAM,aAAa,MAAM,EAAE,MAAM,aAAa,GAAG;AACjF,SAAM,KAAK,GAAG,KAAK,SAAS;;AAE9B,SAAO;;CAGT,YACE,OAIyB;AACzB,SAAO;GACL,GAAG;GACH,IAAI,MAAM,MAAM,OAAO,KAAK;GAC5B,UAAU,MAAM,YAAY,KAAK,QAAQ,KAAK,QAAQ,SAAS,IAAI,MAAM;GAC1E"}
|
|
@@ -0,0 +1,59 @@
|
|
|
1
|
+
//#region src/tui/tui-session-stats.ts
|
|
2
|
+
function usageNumber(value) {
|
|
3
|
+
return typeof value === "number" && Number.isFinite(value) ? value : 0;
|
|
4
|
+
}
|
|
5
|
+
function usageFromRow(row) {
|
|
6
|
+
const usage = row.usage && typeof row.usage === "object" ? row.usage : {};
|
|
7
|
+
const input = usageNumber(usage.input) + usageNumber(usage.inputTokens);
|
|
8
|
+
const output = usageNumber(usage.output) + usageNumber(usage.outputTokens);
|
|
9
|
+
const cacheRead = usageNumber(usage.cacheRead) + usageNumber(usage.cacheReadTokens);
|
|
10
|
+
const cacheWrite = usageNumber(usage.cacheWrite) + usageNumber(usage.cacheWriteTokens);
|
|
11
|
+
return {
|
|
12
|
+
input,
|
|
13
|
+
output,
|
|
14
|
+
cacheRead,
|
|
15
|
+
cacheWrite,
|
|
16
|
+
total: usageNumber(usage.total) + usageNumber(usage.totalTokens) || input + output + cacheRead + cacheWrite
|
|
17
|
+
};
|
|
18
|
+
}
|
|
19
|
+
function computeTuiSessionStats(rows) {
|
|
20
|
+
const stats = {
|
|
21
|
+
totalMessages: rows.length,
|
|
22
|
+
userMessages: 0,
|
|
23
|
+
assistantMessages: 0,
|
|
24
|
+
toolCalls: 0,
|
|
25
|
+
toolResults: 0,
|
|
26
|
+
contextRows: 0,
|
|
27
|
+
tokens: {
|
|
28
|
+
input: 0,
|
|
29
|
+
output: 0,
|
|
30
|
+
cacheRead: 0,
|
|
31
|
+
cacheWrite: 0,
|
|
32
|
+
total: 0
|
|
33
|
+
}
|
|
34
|
+
};
|
|
35
|
+
for (const row of rows) {
|
|
36
|
+
const record = row;
|
|
37
|
+
if (record.kind === "context" || record.type === "compaction") {
|
|
38
|
+
stats.contextRows += 1;
|
|
39
|
+
continue;
|
|
40
|
+
}
|
|
41
|
+
const role = typeof record.role === "string" ? record.role : "";
|
|
42
|
+
if (role === "user") stats.userMessages += 1;
|
|
43
|
+
else if (role === "assistant") stats.assistantMessages += 1;
|
|
44
|
+
else if (role === "tool" || role === "toolResult") stats.toolResults += 1;
|
|
45
|
+
const toolCalls = Array.isArray(record.tool_calls) ? record.tool_calls.length : Array.isArray(record.toolCalls) ? record.toolCalls.length : 0;
|
|
46
|
+
stats.toolCalls += toolCalls;
|
|
47
|
+
const usage = usageFromRow(record);
|
|
48
|
+
stats.tokens.input += usage.input;
|
|
49
|
+
stats.tokens.output += usage.output;
|
|
50
|
+
stats.tokens.cacheRead += usage.cacheRead;
|
|
51
|
+
stats.tokens.cacheWrite += usage.cacheWrite;
|
|
52
|
+
stats.tokens.total += usage.total;
|
|
53
|
+
}
|
|
54
|
+
return stats;
|
|
55
|
+
}
|
|
56
|
+
//#endregion
|
|
57
|
+
export { computeTuiSessionStats };
|
|
58
|
+
|
|
59
|
+
//# sourceMappingURL=tui-session-stats.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"tui-session-stats.js","names":[],"sources":["../../../src/tui/tui-session-stats.ts"],"sourcesContent":["import type { TranscriptStoredRow } from '../session/session-context-for-llm.js';\n\nimport type { TuiSessionStats } from './tui-backend.js';\n\nfunction usageNumber(value: unknown): number {\n return typeof value === 'number' && Number.isFinite(value) ? value : 0;\n}\n\nfunction usageFromRow(row: Record<string, unknown>): {\n input: number;\n output: number;\n cacheRead: number;\n cacheWrite: number;\n total: number;\n} {\n const usage = row.usage && typeof row.usage === 'object'\n ? row.usage as Record<string, unknown>\n : {};\n const input = usageNumber(usage.input) + usageNumber(usage.inputTokens);\n const output = usageNumber(usage.output) + usageNumber(usage.outputTokens);\n const cacheRead = usageNumber(usage.cacheRead) + usageNumber(usage.cacheReadTokens);\n const cacheWrite = usageNumber(usage.cacheWrite) + usageNumber(usage.cacheWriteTokens);\n const explicitTotal = usageNumber(usage.total) + usageNumber(usage.totalTokens);\n return {\n input,\n output,\n cacheRead,\n cacheWrite,\n total: explicitTotal || input + output + cacheRead + cacheWrite,\n };\n}\n\nexport function computeTuiSessionStats(rows: TranscriptStoredRow[]): TuiSessionStats {\n const stats: TuiSessionStats = {\n totalMessages: rows.length,\n userMessages: 0,\n assistantMessages: 0,\n toolCalls: 0,\n toolResults: 0,\n contextRows: 0,\n tokens: {\n input: 0,\n output: 0,\n cacheRead: 0,\n cacheWrite: 0,\n total: 0,\n },\n };\n\n for (const row of rows) {\n const record = row as unknown as Record<string, unknown>;\n if (record.kind === 'context' || record.type === 'compaction') {\n stats.contextRows += 1;\n continue;\n }\n const role = typeof record.role === 'string' ? record.role : '';\n if (role === 'user') stats.userMessages += 1;\n else if (role === 'assistant') stats.assistantMessages += 1;\n else if (role === 'tool' || role === 'toolResult') stats.toolResults += 1;\n\n const toolCalls = Array.isArray(record.tool_calls)\n ? record.tool_calls.length\n : Array.isArray(record.toolCalls)\n ? record.toolCalls.length\n : 0;\n stats.toolCalls += toolCalls;\n\n const usage = usageFromRow(record);\n stats.tokens.input += usage.input;\n stats.tokens.output += usage.output;\n stats.tokens.cacheRead += usage.cacheRead;\n stats.tokens.cacheWrite += usage.cacheWrite;\n stats.tokens.total += usage.total;\n }\n\n return stats;\n}\n"],"mappings":";AAIA,SAAS,YAAY,OAAwB;AAC3C,QAAO,OAAO,UAAU,YAAY,OAAO,SAAS,MAAM,GAAG,QAAQ;;AAGvE,SAAS,aAAa,KAMpB;CACA,MAAM,QAAQ,IAAI,SAAS,OAAO,IAAI,UAAU,WAC5C,IAAI,QACJ,EAAE;CACN,MAAM,QAAQ,YAAY,MAAM,MAAM,GAAG,YAAY,MAAM,YAAY;CACvE,MAAM,SAAS,YAAY,MAAM,OAAO,GAAG,YAAY,MAAM,aAAa;CAC1E,MAAM,YAAY,YAAY,MAAM,UAAU,GAAG,YAAY,MAAM,gBAAgB;CACnF,MAAM,aAAa,YAAY,MAAM,WAAW,GAAG,YAAY,MAAM,iBAAiB;AAEtF,QAAO;EACL;EACA;EACA;EACA;EACA,OANoB,YAAY,MAAM,MAAM,GAAG,YAAY,MAAM,YAAY,IAMrD,QAAQ,SAAS,YAAY;EACtD;;AAGH,SAAgB,uBAAuB,MAA8C;CACnF,MAAM,QAAyB;EAC7B,eAAe,KAAK;EACpB,cAAc;EACd,mBAAmB;EACnB,WAAW;EACX,aAAa;EACb,aAAa;EACb,QAAQ;GACN,OAAO;GACP,QAAQ;GACR,WAAW;GACX,YAAY;GACZ,OAAO;GACR;EACF;AAED,MAAK,MAAM,OAAO,MAAM;EACtB,MAAM,SAAS;AACf,MAAI,OAAO,SAAS,aAAa,OAAO,SAAS,cAAc;AAC7D,SAAM,eAAe;AACrB;;EAEF,MAAM,OAAO,OAAO,OAAO,SAAS,WAAW,OAAO,OAAO;AAC7D,MAAI,SAAS,OAAQ,OAAM,gBAAgB;WAClC,SAAS,YAAa,OAAM,qBAAqB;WACjD,SAAS,UAAU,SAAS,aAAc,OAAM,eAAe;EAExE,MAAM,YAAY,MAAM,QAAQ,OAAO,WAAW,GAC9C,OAAO,WAAW,SAClB,MAAM,QAAQ,OAAO,UAAU,GAC7B,OAAO,UAAU,SACjB;AACN,QAAM,aAAa;EAEnB,MAAM,QAAQ,aAAa,OAAO;AAClC,QAAM,OAAO,SAAS,MAAM;AAC5B,QAAM,OAAO,UAAU,MAAM;AAC7B,QAAM,OAAO,aAAa,MAAM;AAChC,QAAM,OAAO,cAAc,MAAM;AACjC,QAAM,OAAO,SAAS,MAAM;;AAG9B,QAAO"}
|
|
@@ -1,5 +1,8 @@
|
|
|
1
1
|
export type TuiThemeId = 'auto' | 'dark' | 'light' | (string & {});
|
|
2
2
|
export type DoubleEscapeAction = 'none' | 'tree' | 'fork';
|
|
3
|
+
export type FollowUpMode = 'one-at-a-time' | 'all';
|
|
4
|
+
export type SteeringMode = 'one-at-a-time' | 'all';
|
|
5
|
+
export type TreeFilterMode = 'default' | 'no-tools' | 'user-only' | 'labeled-only' | 'all';
|
|
3
6
|
export interface TuiSettings {
|
|
4
7
|
/** `auto` follows terminal background detection; `dark`/`light` or custom theme name. */
|
|
5
8
|
theme: TuiThemeId;
|
|
@@ -9,6 +12,24 @@ export interface TuiSettings {
|
|
|
9
12
|
showTerminalProgress: boolean;
|
|
10
13
|
/** Show expanded startup hints under the header title. */
|
|
11
14
|
showStartupHints: boolean;
|
|
15
|
+
/** Render image content blocks inline when the terminal supports images. */
|
|
16
|
+
showImages: boolean;
|
|
17
|
+
/** Preferred inline image width in terminal cells. */
|
|
18
|
+
imageWidthCells: number;
|
|
19
|
+
/** Show the terminal hardware cursor at the editor cursor for IME support. */
|
|
20
|
+
showHardwareCursor: boolean;
|
|
21
|
+
/** Horizontal padding for the input editor. */
|
|
22
|
+
editorPaddingX: number;
|
|
23
|
+
/** Maximum visible autocomplete rows before the completion menu scrolls. */
|
|
24
|
+
autocompleteMaxVisible: number;
|
|
25
|
+
/** Clear empty terminal rows when rendered content shrinks. */
|
|
26
|
+
clearOnShrink: boolean;
|
|
27
|
+
/** How queued follow-up messages are delivered after an agent run ends. */
|
|
28
|
+
followUpMode: FollowUpMode;
|
|
29
|
+
/** How queued steering messages are delivered across active runs. */
|
|
30
|
+
steeringMode: SteeringMode;
|
|
31
|
+
/** Default transcript filter when opening `/tree`. */
|
|
32
|
+
treeFilterMode: TreeFilterMode;
|
|
12
33
|
}
|
|
13
34
|
export declare const DEFAULT_TUI_SETTINGS: TuiSettings;
|
|
14
35
|
/** Load persisted TUI settings from `~/.xopc/tui-settings.json`. */
|
|
@@ -10,12 +10,30 @@ const DEFAULT_TUI_SETTINGS = {
|
|
|
10
10
|
toolsExpanded: false,
|
|
11
11
|
doubleEscapeAction: "none",
|
|
12
12
|
showTerminalProgress: false,
|
|
13
|
-
showStartupHints: true
|
|
13
|
+
showStartupHints: true,
|
|
14
|
+
showImages: true,
|
|
15
|
+
imageWidthCells: 60,
|
|
16
|
+
showHardwareCursor: false,
|
|
17
|
+
editorPaddingX: 0,
|
|
18
|
+
autocompleteMaxVisible: 5,
|
|
19
|
+
clearOnShrink: false,
|
|
20
|
+
followUpMode: "one-at-a-time",
|
|
21
|
+
steeringMode: "one-at-a-time",
|
|
22
|
+
treeFilterMode: "default"
|
|
14
23
|
};
|
|
15
24
|
const SETTINGS_PATH = join(resolveStateDir(), "tui-settings.json");
|
|
16
25
|
function isDoubleEscapeAction(value) {
|
|
17
26
|
return value === "none" || value === "tree" || value === "fork";
|
|
18
27
|
}
|
|
28
|
+
function isFollowUpMode(value) {
|
|
29
|
+
return value === "one-at-a-time" || value === "all";
|
|
30
|
+
}
|
|
31
|
+
function isSteeringMode(value) {
|
|
32
|
+
return value === "one-at-a-time" || value === "all";
|
|
33
|
+
}
|
|
34
|
+
function isTreeFilterMode(value) {
|
|
35
|
+
return value === "default" || value === "no-tools" || value === "user-only" || value === "labeled-only" || value === "all";
|
|
36
|
+
}
|
|
19
37
|
function normalizeSettings(raw) {
|
|
20
38
|
const base = { ...DEFAULT_TUI_SETTINGS };
|
|
21
39
|
if (!raw || typeof raw !== "object") return base;
|
|
@@ -26,6 +44,15 @@ function normalizeSettings(raw) {
|
|
|
26
44
|
if (isDoubleEscapeAction(obj.doubleEscapeAction)) base.doubleEscapeAction = obj.doubleEscapeAction;
|
|
27
45
|
if (typeof obj.showTerminalProgress === "boolean") base.showTerminalProgress = obj.showTerminalProgress;
|
|
28
46
|
if (typeof obj.showStartupHints === "boolean") base.showStartupHints = obj.showStartupHints;
|
|
47
|
+
if (typeof obj.showImages === "boolean") base.showImages = obj.showImages;
|
|
48
|
+
if (typeof obj.imageWidthCells === "number" && Number.isFinite(obj.imageWidthCells)) base.imageWidthCells = Math.max(1, Math.floor(obj.imageWidthCells));
|
|
49
|
+
if (typeof obj.showHardwareCursor === "boolean") base.showHardwareCursor = obj.showHardwareCursor;
|
|
50
|
+
if (typeof obj.editorPaddingX === "number" && Number.isFinite(obj.editorPaddingX)) base.editorPaddingX = Math.max(0, Math.min(3, Math.floor(obj.editorPaddingX)));
|
|
51
|
+
if (typeof obj.autocompleteMaxVisible === "number" && Number.isFinite(obj.autocompleteMaxVisible)) base.autocompleteMaxVisible = Math.max(3, Math.min(20, Math.floor(obj.autocompleteMaxVisible)));
|
|
52
|
+
if (typeof obj.clearOnShrink === "boolean") base.clearOnShrink = obj.clearOnShrink;
|
|
53
|
+
if (isFollowUpMode(obj.followUpMode)) base.followUpMode = obj.followUpMode;
|
|
54
|
+
if (isSteeringMode(obj.steeringMode)) base.steeringMode = obj.steeringMode;
|
|
55
|
+
if (isTreeFilterMode(obj.treeFilterMode)) base.treeFilterMode = obj.treeFilterMode;
|
|
29
56
|
return base;
|
|
30
57
|
}
|
|
31
58
|
/** Load persisted TUI settings from `~/.xopc/tui-settings.json`. */
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"tui-settings.js","names":[],"sources":["../../../src/tui/tui-settings.ts"],"sourcesContent":["import { existsSync, mkdirSync, readFileSync, writeFileSync } from 'node:fs';\nimport { join } from 'node:path';\n\nimport { resolveStateDir } from '../config/paths.js';\n\nexport type TuiThemeId = 'auto' | 'dark' | 'light' | (string & {});\n\nexport type DoubleEscapeAction = 'none' | 'tree' | 'fork';\n\nexport interface TuiSettings {\n /** `auto` follows terminal background detection; `dark`/`light` or custom theme name. */\n theme: TuiThemeId;\n showThinking: boolean;\n toolsExpanded: boolean;\n doubleEscapeAction: DoubleEscapeAction;\n showTerminalProgress: boolean;\n /** Show expanded startup hints under the header title. */\n showStartupHints: boolean;\n}\n\nexport const DEFAULT_TUI_SETTINGS: TuiSettings = {\n theme: 'auto',\n showThinking: false,\n toolsExpanded: false,\n doubleEscapeAction: 'none',\n showTerminalProgress: false,\n showStartupHints: true,\n};\n\nconst SETTINGS_PATH = join(resolveStateDir(), 'tui-settings.json');\n\nfunction isDoubleEscapeAction(value: unknown): value is DoubleEscapeAction {\n return value === 'none' || value === 'tree' || value === 'fork';\n}\n\nfunction normalizeSettings(raw: unknown): TuiSettings {\n const base = { ...DEFAULT_TUI_SETTINGS };\n if (!raw || typeof raw !== 'object') return base;\n const obj = raw as Record<string, unknown>;\n if (typeof obj.theme === 'string' && obj.theme.trim()) {\n base.theme = obj.theme.trim();\n }\n if (typeof obj.showThinking === 'boolean') base.showThinking = obj.showThinking;\n if (typeof obj.toolsExpanded === 'boolean') base.toolsExpanded = obj.toolsExpanded;\n if (isDoubleEscapeAction(obj.doubleEscapeAction)) {\n base.doubleEscapeAction = obj.doubleEscapeAction;\n }\n if (typeof obj.showTerminalProgress === 'boolean') {\n base.showTerminalProgress = obj.showTerminalProgress;\n }\n if (typeof obj.showStartupHints === 'boolean') {\n base.showStartupHints = obj.showStartupHints;\n }\n return base;\n}\n\n/** Load persisted TUI settings from `~/.xopc/tui-settings.json`. */\nexport function loadTuiSettings(): TuiSettings {\n try {\n if (!existsSync(SETTINGS_PATH)) return { ...DEFAULT_TUI_SETTINGS };\n const raw = readFileSync(SETTINGS_PATH, 'utf8');\n return normalizeSettings(JSON.parse(raw));\n } catch {\n return { ...DEFAULT_TUI_SETTINGS };\n }\n}\n\n/** Persist TUI settings. */\nexport function saveTuiSettings(settings: TuiSettings): void {\n const dir = resolveStateDir();\n if (!existsSync(dir)) mkdirSync(dir, { recursive: true });\n writeFileSync(SETTINGS_PATH, `${JSON.stringify(settings, null, 2)}\\n`, 'utf8');\n}\n\nexport function getTuiSettingsPath(): string {\n return SETTINGS_PATH;\n}\n"],"mappings":";;;;;YAGqD;
|
|
1
|
+
{"version":3,"file":"tui-settings.js","names":[],"sources":["../../../src/tui/tui-settings.ts"],"sourcesContent":["import { existsSync, mkdirSync, readFileSync, writeFileSync } from 'node:fs';\nimport { join } from 'node:path';\n\nimport { resolveStateDir } from '../config/paths.js';\n\nexport type TuiThemeId = 'auto' | 'dark' | 'light' | (string & {});\n\nexport type DoubleEscapeAction = 'none' | 'tree' | 'fork';\nexport type FollowUpMode = 'one-at-a-time' | 'all';\nexport type SteeringMode = 'one-at-a-time' | 'all';\nexport type TreeFilterMode = 'default' | 'no-tools' | 'user-only' | 'labeled-only' | 'all';\n\nexport interface TuiSettings {\n /** `auto` follows terminal background detection; `dark`/`light` or custom theme name. */\n theme: TuiThemeId;\n showThinking: boolean;\n toolsExpanded: boolean;\n doubleEscapeAction: DoubleEscapeAction;\n showTerminalProgress: boolean;\n /** Show expanded startup hints under the header title. */\n showStartupHints: boolean;\n /** Render image content blocks inline when the terminal supports images. */\n showImages: boolean;\n /** Preferred inline image width in terminal cells. */\n imageWidthCells: number;\n /** Show the terminal hardware cursor at the editor cursor for IME support. */\n showHardwareCursor: boolean;\n /** Horizontal padding for the input editor. */\n editorPaddingX: number;\n /** Maximum visible autocomplete rows before the completion menu scrolls. */\n autocompleteMaxVisible: number;\n /** Clear empty terminal rows when rendered content shrinks. */\n clearOnShrink: boolean;\n /** How queued follow-up messages are delivered after an agent run ends. */\n followUpMode: FollowUpMode;\n /** How queued steering messages are delivered across active runs. */\n steeringMode: SteeringMode;\n /** Default transcript filter when opening `/tree`. */\n treeFilterMode: TreeFilterMode;\n}\n\nexport const DEFAULT_TUI_SETTINGS: TuiSettings = {\n theme: 'auto',\n showThinking: false,\n toolsExpanded: false,\n doubleEscapeAction: 'none',\n showTerminalProgress: false,\n showStartupHints: true,\n showImages: true,\n imageWidthCells: 60,\n showHardwareCursor: false,\n editorPaddingX: 0,\n autocompleteMaxVisible: 5,\n clearOnShrink: false,\n followUpMode: 'one-at-a-time',\n steeringMode: 'one-at-a-time',\n treeFilterMode: 'default',\n};\n\nconst SETTINGS_PATH = join(resolveStateDir(), 'tui-settings.json');\n\nfunction isDoubleEscapeAction(value: unknown): value is DoubleEscapeAction {\n return value === 'none' || value === 'tree' || value === 'fork';\n}\n\nfunction isFollowUpMode(value: unknown): value is FollowUpMode {\n return value === 'one-at-a-time' || value === 'all';\n}\n\nfunction isSteeringMode(value: unknown): value is SteeringMode {\n return value === 'one-at-a-time' || value === 'all';\n}\n\nfunction isTreeFilterMode(value: unknown): value is TreeFilterMode {\n return (\n value === 'default' ||\n value === 'no-tools' ||\n value === 'user-only' ||\n value === 'labeled-only' ||\n value === 'all'\n );\n}\n\nfunction normalizeSettings(raw: unknown): TuiSettings {\n const base = { ...DEFAULT_TUI_SETTINGS };\n if (!raw || typeof raw !== 'object') return base;\n const obj = raw as Record<string, unknown>;\n if (typeof obj.theme === 'string' && obj.theme.trim()) {\n base.theme = obj.theme.trim();\n }\n if (typeof obj.showThinking === 'boolean') base.showThinking = obj.showThinking;\n if (typeof obj.toolsExpanded === 'boolean') base.toolsExpanded = obj.toolsExpanded;\n if (isDoubleEscapeAction(obj.doubleEscapeAction)) {\n base.doubleEscapeAction = obj.doubleEscapeAction;\n }\n if (typeof obj.showTerminalProgress === 'boolean') {\n base.showTerminalProgress = obj.showTerminalProgress;\n }\n if (typeof obj.showStartupHints === 'boolean') {\n base.showStartupHints = obj.showStartupHints;\n }\n if (typeof obj.showImages === 'boolean') {\n base.showImages = obj.showImages;\n }\n if (typeof obj.imageWidthCells === 'number' && Number.isFinite(obj.imageWidthCells)) {\n base.imageWidthCells = Math.max(1, Math.floor(obj.imageWidthCells));\n }\n if (typeof obj.showHardwareCursor === 'boolean') {\n base.showHardwareCursor = obj.showHardwareCursor;\n }\n if (typeof obj.editorPaddingX === 'number' && Number.isFinite(obj.editorPaddingX)) {\n base.editorPaddingX = Math.max(0, Math.min(3, Math.floor(obj.editorPaddingX)));\n }\n if (typeof obj.autocompleteMaxVisible === 'number' && Number.isFinite(obj.autocompleteMaxVisible)) {\n base.autocompleteMaxVisible = Math.max(3, Math.min(20, Math.floor(obj.autocompleteMaxVisible)));\n }\n if (typeof obj.clearOnShrink === 'boolean') {\n base.clearOnShrink = obj.clearOnShrink;\n }\n if (isFollowUpMode(obj.followUpMode)) {\n base.followUpMode = obj.followUpMode;\n }\n if (isSteeringMode(obj.steeringMode)) {\n base.steeringMode = obj.steeringMode;\n }\n if (isTreeFilterMode(obj.treeFilterMode)) {\n base.treeFilterMode = obj.treeFilterMode;\n }\n return base;\n}\n\n/** Load persisted TUI settings from `~/.xopc/tui-settings.json`. */\nexport function loadTuiSettings(): TuiSettings {\n try {\n if (!existsSync(SETTINGS_PATH)) return { ...DEFAULT_TUI_SETTINGS };\n const raw = readFileSync(SETTINGS_PATH, 'utf8');\n return normalizeSettings(JSON.parse(raw));\n } catch {\n return { ...DEFAULT_TUI_SETTINGS };\n }\n}\n\n/** Persist TUI settings. */\nexport function saveTuiSettings(settings: TuiSettings): void {\n const dir = resolveStateDir();\n if (!existsSync(dir)) mkdirSync(dir, { recursive: true });\n writeFileSync(SETTINGS_PATH, `${JSON.stringify(settings, null, 2)}\\n`, 'utf8');\n}\n\nexport function getTuiSettingsPath(): string {\n return SETTINGS_PATH;\n}\n"],"mappings":"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"}
|
|
@@ -16,7 +16,7 @@ function createSkillsAutocompleteProvider() {
|
|
|
16
16
|
globalDir: resolveStateDir()
|
|
17
17
|
}).skills.map((skill) => ({
|
|
18
18
|
name: skill.name,
|
|
19
|
-
description: skill.description
|
|
19
|
+
description: skill.description ? `skill · ${skill.description.slice(0, 112)}` : "skill"
|
|
20
20
|
}));
|
|
21
21
|
};
|
|
22
22
|
return (query) => {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"tui-skills-autocomplete.js","names":[],"sources":["../../../src/tui/tui-skills-autocomplete.ts"],"sourcesContent":["import { resolveBundledSkillsDir, resolveStateDir } from '../config/paths.js';\nimport { getWorkspacePath, loadConfig } from '../config/index.js';\nimport { loadSkills } from '../agent/skills/index.js';\nimport type { TuiAutocompleteProvider } from '../extensions/types/tui.js';\n\n/** `@skill` autocomplete from workspace + global + bundled skill directories. */\nexport function createSkillsAutocompleteProvider(): TuiAutocompleteProvider {\n let cached: Array<{ name: string; description?: string }> | null = null;\n\n const refresh = () => {\n const config = loadConfig();\n const workspaceDir = getWorkspacePath(config);\n const result = loadSkills({\n workspaceDir,\n builtinDir: resolveBundledSkillsDir(),\n globalDir: resolveStateDir(),\n });\n cached = result.skills.map((skill) => ({\n name: skill.name,\n description: skill.description
|
|
1
|
+
{"version":3,"file":"tui-skills-autocomplete.js","names":[],"sources":["../../../src/tui/tui-skills-autocomplete.ts"],"sourcesContent":["import { resolveBundledSkillsDir, resolveStateDir } from '../config/paths.js';\nimport { getWorkspacePath, loadConfig } from '../config/index.js';\nimport { loadSkills } from '../agent/skills/index.js';\nimport type { TuiAutocompleteProvider } from '../extensions/types/tui.js';\n\n/** `@skill` autocomplete from workspace + global + bundled skill directories. */\nexport function createSkillsAutocompleteProvider(): TuiAutocompleteProvider {\n let cached: Array<{ name: string; description?: string }> | null = null;\n\n const refresh = () => {\n const config = loadConfig();\n const workspaceDir = getWorkspacePath(config);\n const result = loadSkills({\n workspaceDir,\n builtinDir: resolveBundledSkillsDir(),\n globalDir: resolveStateDir(),\n });\n cached = result.skills.map((skill) => ({\n name: skill.name,\n description: skill.description\n ? `skill · ${skill.description.slice(0, 112)}`\n : 'skill',\n }));\n };\n\n return (query) => {\n if (!cached) refresh();\n const skills = cached ?? [];\n const q = query.toLowerCase();\n const filtered = q\n ? skills.filter(\n (s) =>\n s.name.toLowerCase().includes(q) ||\n (s.description?.toLowerCase().includes(q) ?? false),\n )\n : skills;\n return filtered.slice(0, 30);\n };\n}\n\n/** Test helper — build skill list without caching. */\nexport function listSkillAutocompleteSuggestions(): Array<{ name: string; description?: string }> {\n const config = loadConfig();\n const result = loadSkills({\n workspaceDir: getWorkspacePath(config),\n builtinDir: resolveBundledSkillsDir(),\n globalDir: resolveStateDir(),\n });\n return result.skills.map((s) => ({\n name: s.name,\n description: s.description,\n }));\n}\n"],"mappings":";;;;;;;YAA8E;;AAM9E,SAAgB,mCAA4D;CAC1E,IAAI,SAA+D;CAEnE,MAAM,gBAAgB;AAQpB,WALe,WAAW;GACxB,cAFmB,iBADN,YAC6B,CAE9B;GACZ,YAAY,yBAAyB;GACrC,WAAW,iBAAiB;GAC7B,CACc,CAAC,OAAO,KAAK,WAAW;GACrC,MAAM,MAAM;GACZ,aAAa,MAAM,cACf,WAAW,MAAM,YAAY,MAAM,GAAG,IAAI,KAC1C;GACL,EAAE;;AAGL,SAAQ,UAAU;AAChB,MAAI,CAAC,OAAQ,UAAS;EACtB,MAAM,SAAS,UAAU,EAAE;EAC3B,MAAM,IAAI,MAAM,aAAa;AAQ7B,UAPiB,IACb,OAAO,QACJ,MACC,EAAE,KAAK,aAAa,CAAC,SAAS,EAAE,KAC/B,EAAE,aAAa,aAAa,CAAC,SAAS,EAAE,IAAI,OAChD,GACD,QACY,MAAM,GAAG,GAAG;;;;AAKhC,SAAgB,mCAAkF;AAOhG,QALe,WAAW;EACxB,cAAc,iBAFD,YAEwB,CAAC;EACtC,YAAY,yBAAyB;EACrC,WAAW,iBAAiB;EAC7B,CACY,CAAC,OAAO,KAAK,OAAO;EAC/B,MAAM,EAAE;EACR,aAAa,EAAE;EAChB,EAAE"}
|
|
@@ -0,0 +1,39 @@
|
|
|
1
|
+
import { resolveStateDir } from "../config/paths-state.js";
|
|
2
|
+
import { init_paths, resolveAgentProfileDir, resolveBundledSkillsDir } from "../config/paths.js";
|
|
3
|
+
import { resolveEffectiveAgentProfileForSession } from "../config/agent-profile.js";
|
|
4
|
+
import { resolveBootstrapFilesSync } from "../agent/bootstrap/bootstrap-files.js";
|
|
5
|
+
import { createWorkflowCatalog } from "../agent/workflow/catalog.js";
|
|
6
|
+
import { createSkillConfigManager, isSkillEnabled } from "../agent/skills/config.js";
|
|
7
|
+
import { listConnectorInstances } from "../connectors/instances.js";
|
|
8
|
+
import { loadSkills } from "../agent/skills/index.js";
|
|
9
|
+
import { getWorkspacePath } from "../config/workspace-path-helpers.js";
|
|
10
|
+
import "../config/index.js";
|
|
11
|
+
import { basename } from "node:path";
|
|
12
|
+
//#region src/tui/tui-startup-resources.ts
|
|
13
|
+
init_paths();
|
|
14
|
+
function uniqueSorted(values) {
|
|
15
|
+
return [...new Set([...values].map((value) => value.trim()).filter(Boolean))].sort((a, b) => a.localeCompare(b));
|
|
16
|
+
}
|
|
17
|
+
function collectTuiStartupResources(config, sessionKey) {
|
|
18
|
+
const profile = resolveEffectiveAgentProfileForSession(config, sessionKey);
|
|
19
|
+
const profileDir = resolveAgentProfileDir(config, profile.agentId);
|
|
20
|
+
const workspaceDir = profile.resolvedWorkspacePath || getWorkspacePath(config);
|
|
21
|
+
const context = uniqueSorted(resolveBootstrapFilesSync({
|
|
22
|
+
profileDir,
|
|
23
|
+
sessionKey
|
|
24
|
+
}).filter((file) => !file.missing).map((file) => file.name || basename(file.path)));
|
|
25
|
+
const skillsConfig = createSkillConfigManager(resolveStateDir()).load();
|
|
26
|
+
return {
|
|
27
|
+
context,
|
|
28
|
+
skills: uniqueSorted(loadSkills({
|
|
29
|
+
workspaceDir,
|
|
30
|
+
builtinDir: resolveBundledSkillsDir() ?? void 0
|
|
31
|
+
}).skills.filter((skill) => !skill.disableModelInvocation && isSkillEnabled(skill, skillsConfig)).map((skill) => skill.name)),
|
|
32
|
+
workflows: uniqueSorted(createWorkflowCatalog().list().map((entry) => entry.name)),
|
|
33
|
+
connectors: uniqueSorted(listConnectorInstances(config).map((instance) => instance.displayName || instance.connectorId || instance.instanceId))
|
|
34
|
+
};
|
|
35
|
+
}
|
|
36
|
+
//#endregion
|
|
37
|
+
export { collectTuiStartupResources };
|
|
38
|
+
|
|
39
|
+
//# sourceMappingURL=tui-startup-resources.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"tui-startup-resources.js","names":[],"sources":["../../../src/tui/tui-startup-resources.ts"],"sourcesContent":["import { basename } from 'node:path';\n\nimport { resolveBootstrapFilesSync } from '../agent/bootstrap/bootstrap-files.js';\nimport { loadSkills } from '../agent/skills/index.js';\nimport { isSkillEnabled, createSkillConfigManager } from '../agent/skills/config.js';\nimport { createWorkflowCatalog } from '../agent/workflow/catalog.js';\nimport { resolveEffectiveAgentProfileForSession } from '../config/agent-profile.js';\nimport { getWorkspacePath } from '../config/index.js';\nimport { resolveAgentProfileDir, resolveBundledSkillsDir, resolveStateDir } from '../config/paths.js';\nimport { listConnectorInstances } from '../connectors/instances.js';\nimport type { Config } from '../config/schema.js';\nimport type { TuiStartupResources } from './tui-backend.js';\n\nfunction uniqueSorted(values: Iterable<string>): string[] {\n return [...new Set([...values].map((value) => value.trim()).filter(Boolean))]\n .sort((a, b) => a.localeCompare(b));\n}\n\nexport function collectTuiStartupResources(config: Config, sessionKey?: string): TuiStartupResources {\n const profile = resolveEffectiveAgentProfileForSession(config, sessionKey);\n const profileDir = resolveAgentProfileDir(config, profile.agentId);\n const workspaceDir = profile.resolvedWorkspacePath || getWorkspacePath(config);\n\n const context = uniqueSorted(\n resolveBootstrapFilesSync({ profileDir, sessionKey })\n .filter((file) => !file.missing)\n .map((file) => file.name || basename(file.path)),\n );\n\n const skillsConfig = createSkillConfigManager(resolveStateDir()).load();\n const skills = uniqueSorted(\n loadSkills({\n workspaceDir,\n builtinDir: resolveBundledSkillsDir() ?? undefined,\n }).skills\n .filter((skill) => !skill.disableModelInvocation && isSkillEnabled(skill, skillsConfig))\n .map((skill) => skill.name),\n );\n\n const workflows = uniqueSorted(createWorkflowCatalog().list().map((entry) => entry.name));\n const connectors = uniqueSorted(\n listConnectorInstances(config).map((instance) => instance.displayName || instance.connectorId || instance.instanceId),\n );\n\n return { context, skills, workflows, connectors };\n}\n"],"mappings":";;;;;;;;;;;;YAQsG;AAKtG,SAAS,aAAa,QAAoC;AACxD,QAAO,CAAC,GAAG,IAAI,IAAI,CAAC,GAAG,OAAO,CAAC,KAAK,UAAU,MAAM,MAAM,CAAC,CAAC,OAAO,QAAQ,CAAC,CAAC,CAC1E,MAAM,GAAG,MAAM,EAAE,cAAc,EAAE,CAAC;;AAGvC,SAAgB,2BAA2B,QAAgB,YAA0C;CACnG,MAAM,UAAU,uCAAuC,QAAQ,WAAW;CAC1E,MAAM,aAAa,uBAAuB,QAAQ,QAAQ,QAAQ;CAClE,MAAM,eAAe,QAAQ,yBAAyB,iBAAiB,OAAO;CAE9E,MAAM,UAAU,aACd,0BAA0B;EAAE;EAAY;EAAY,CAAC,CAClD,QAAQ,SAAS,CAAC,KAAK,QAAQ,CAC/B,KAAK,SAAS,KAAK,QAAQ,SAAS,KAAK,KAAK,CAAC,CACnD;CAED,MAAM,eAAe,yBAAyB,iBAAiB,CAAC,CAAC,MAAM;AAevE,QAAO;EAAE;EAAS,QAdH,aACb,WAAW;GACT;GACA,YAAY,yBAAyB,IAAI,KAAA;GAC1C,CAAC,CAAC,OACA,QAAQ,UAAU,CAAC,MAAM,0BAA0B,eAAe,OAAO,aAAa,CAAC,CACvF,KAAK,UAAU,MAAM,KAAK,CAQP;EAAE,WALR,aAAa,uBAAuB,CAAC,MAAM,CAAC,KAAK,UAAU,MAAM,KAAK,CAKrD;EAAE,YAJlB,aACjB,uBAAuB,OAAO,CAAC,KAAK,aAAa,SAAS,eAAe,SAAS,eAAe,SAAS,WAAW,CAGxE;EAAE"}
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
import type { KeybindingsManager } from '@earendil-works/pi-tui';
|
|
2
|
+
import type { TuiStartupResources } from './tui-backend.js';
|
|
3
|
+
import type { TuiState } from './tui-types.js';
|
|
4
|
+
export declare function formatTuiStartupText(input: {
|
|
5
|
+
state: TuiState;
|
|
6
|
+
isLocal: boolean;
|
|
7
|
+
keybindings?: KeybindingsManager;
|
|
8
|
+
resources?: TuiStartupResources;
|
|
9
|
+
expanded?: boolean;
|
|
10
|
+
}): string;
|
|
@@ -0,0 +1,58 @@
|
|
|
1
|
+
import { formatKeyIds } from "./format-tui-hotkeys.js";
|
|
2
|
+
import { formatModelLabel } from "./tui-command-formatters.js";
|
|
3
|
+
//#region src/tui/tui-startup-text.ts
|
|
4
|
+
const DEFAULT_LIMIT = 6;
|
|
5
|
+
function keyLabel(keybindings, id, fallback) {
|
|
6
|
+
return keybindings ? formatKeyIds(keybindings, id, { capitalize: false }) : fallback;
|
|
7
|
+
}
|
|
8
|
+
function compactKeyLine(keybindings) {
|
|
9
|
+
return `${keyLabel(keybindings, "app.interrupt", "escape")} interrupt · ${keyLabel(keybindings, "app.clear", "ctrl+c")}/${keyLabel(keybindings, "app.exit", "ctrl+d")} clear/exit · / commands · ! bash · ${keyLabel(keybindings, "app.tools.expand", "ctrl+o")} tools`;
|
|
10
|
+
}
|
|
11
|
+
function formatResourceSection(title, values, options) {
|
|
12
|
+
const list = [...new Set((values ?? []).map((v) => v.trim()).filter(Boolean))].sort((a, b) => a.localeCompare(b));
|
|
13
|
+
const lines = [`[${title}]`];
|
|
14
|
+
if (list.length === 0) {
|
|
15
|
+
lines.push(" none");
|
|
16
|
+
return lines;
|
|
17
|
+
}
|
|
18
|
+
if (!options.expanded) {
|
|
19
|
+
const visible = list.slice(0, DEFAULT_LIMIT);
|
|
20
|
+
const suffix = list.length > visible.length ? `, ... ${list.length - visible.length} more` : "";
|
|
21
|
+
lines.push(` ${visible.join(", ")}${suffix}`);
|
|
22
|
+
return lines;
|
|
23
|
+
}
|
|
24
|
+
const visible = list.slice(0, 30);
|
|
25
|
+
for (const value of visible) lines.push(` ${value}`);
|
|
26
|
+
if (list.length > visible.length) lines.push(` ... ${list.length - visible.length} more`);
|
|
27
|
+
return lines;
|
|
28
|
+
}
|
|
29
|
+
function formatTuiStartupText(input) {
|
|
30
|
+
const expanded = input.expanded === true;
|
|
31
|
+
const lines = [];
|
|
32
|
+
if (expanded) {
|
|
33
|
+
lines.push("xopc TUI", "");
|
|
34
|
+
lines.push(`Session: ${input.state.currentSessionKey}`);
|
|
35
|
+
lines.push(`Mode: ${input.isLocal ? "local embedded" : "gateway"}`);
|
|
36
|
+
lines.push(`Model: ${formatModelLabel(input.state)}`);
|
|
37
|
+
lines.push("");
|
|
38
|
+
}
|
|
39
|
+
lines.push(compactKeyLine(input.keybindings));
|
|
40
|
+
lines.push("Press /start to show full startup help and loaded resources.");
|
|
41
|
+
lines.push("");
|
|
42
|
+
lines.push("xopc can use skills, workflows, connectors, and project context. Ask it how to automate or connect services.");
|
|
43
|
+
if (expanded) lines.push("", "Ask xopc:", " \"what workflows are available?\"", " \"use a connector to check issues or docs\"", " \"what skills can help with this task?\"");
|
|
44
|
+
lines.push("");
|
|
45
|
+
lines.push(...formatResourceSection("Context", input.resources?.context, { expanded }));
|
|
46
|
+
lines.push("");
|
|
47
|
+
lines.push(...formatResourceSection("Skills", input.resources?.skills, { expanded }));
|
|
48
|
+
lines.push("");
|
|
49
|
+
lines.push(...formatResourceSection("Workflows", input.resources?.workflows, { expanded }));
|
|
50
|
+
lines.push("");
|
|
51
|
+
lines.push(...formatResourceSection("Connectors", input.resources?.connectors, { expanded }));
|
|
52
|
+
if (expanded) lines.push("", "Useful commands:", " /help — Show all commands and shortcuts", " /workflows — List saved workflows", " /models — List available models", " /settings — Open TUI settings", " /export — Export current session");
|
|
53
|
+
return lines.join("\n");
|
|
54
|
+
}
|
|
55
|
+
//#endregion
|
|
56
|
+
export { formatTuiStartupText };
|
|
57
|
+
|
|
58
|
+
//# sourceMappingURL=tui-startup-text.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"tui-startup-text.js","names":[],"sources":["../../../src/tui/tui-startup-text.ts"],"sourcesContent":["import type { KeybindingsManager } from '@earendil-works/pi-tui';\n\nimport { formatKeyIds } from './format-tui-hotkeys.js';\nimport { formatModelLabel } from './tui-command-formatters.js';\nimport type { TuiStartupResources } from './tui-backend.js';\nimport type { TuiState } from './tui-types.js';\n\nconst DEFAULT_LIMIT = 6;\n\nfunction keyLabel(\n keybindings: KeybindingsManager | undefined,\n id: Parameters<KeybindingsManager['getKeys']>[0],\n fallback: string,\n): string {\n return keybindings ? formatKeyIds(keybindings, id, { capitalize: false }) : fallback;\n}\n\nfunction compactKeyLine(keybindings?: KeybindingsManager): string {\n const interrupt = keyLabel(keybindings, 'app.interrupt', 'escape');\n const clear = keyLabel(keybindings, 'app.clear', 'ctrl+c');\n const exit = keyLabel(keybindings, 'app.exit', 'ctrl+d');\n const tools = keyLabel(keybindings, 'app.tools.expand', 'ctrl+o');\n return `${interrupt} interrupt · ${clear}/${exit} clear/exit · / commands · ! bash · ${tools} tools`;\n}\n\nfunction formatResourceSection(\n title: string,\n values: readonly string[] | undefined,\n options: { expanded: boolean },\n): string[] {\n const list = [...new Set((values ?? []).map((v) => v.trim()).filter(Boolean))]\n .sort((a, b) => a.localeCompare(b));\n const lines = [`[${title}]`];\n if (list.length === 0) {\n lines.push(' none');\n return lines;\n }\n if (!options.expanded) {\n const visible = list.slice(0, DEFAULT_LIMIT);\n const suffix = list.length > visible.length ? `, ... ${list.length - visible.length} more` : '';\n lines.push(` ${visible.join(', ')}${suffix}`);\n return lines;\n }\n const visible = list.slice(0, 30);\n for (const value of visible) {\n lines.push(` ${value}`);\n }\n if (list.length > visible.length) {\n lines.push(` ... ${list.length - visible.length} more`);\n }\n return lines;\n}\n\nexport function formatTuiStartupText(input: {\n state: TuiState;\n isLocal: boolean;\n keybindings?: KeybindingsManager;\n resources?: TuiStartupResources;\n expanded?: boolean;\n}): string {\n const expanded = input.expanded === true;\n const lines: string[] = [];\n\n if (expanded) {\n lines.push('xopc TUI', '');\n lines.push(`Session: ${input.state.currentSessionKey}`);\n lines.push(`Mode: ${input.isLocal ? 'local embedded' : 'gateway'}`);\n lines.push(`Model: ${formatModelLabel(input.state)}`);\n lines.push('');\n }\n\n lines.push(compactKeyLine(input.keybindings));\n lines.push('Press /start to show full startup help and loaded resources.');\n lines.push('');\n lines.push(\n 'xopc can use skills, workflows, connectors, and project context. Ask it how to automate or connect services.',\n );\n\n if (expanded) {\n lines.push(\n '',\n 'Ask xopc:',\n ' \"what workflows are available?\"',\n ' \"use a connector to check issues or docs\"',\n ' \"what skills can help with this task?\"',\n );\n }\n\n lines.push('');\n lines.push(...formatResourceSection('Context', input.resources?.context, { expanded }));\n lines.push('');\n lines.push(...formatResourceSection('Skills', input.resources?.skills, { expanded }));\n lines.push('');\n lines.push(...formatResourceSection('Workflows', input.resources?.workflows, { expanded }));\n lines.push('');\n lines.push(...formatResourceSection('Connectors', input.resources?.connectors, { expanded }));\n\n if (expanded) {\n lines.push(\n '',\n 'Useful commands:',\n ' /help — Show all commands and shortcuts',\n ' /workflows — List saved workflows',\n ' /models — List available models',\n ' /settings — Open TUI settings',\n ' /export — Export current session',\n );\n }\n\n return lines.join('\\n');\n}\n"],"mappings":";;;AAOA,MAAM,gBAAgB;AAEtB,SAAS,SACP,aACA,IACA,UACQ;AACR,QAAO,cAAc,aAAa,aAAa,IAAI,EAAE,YAAY,OAAO,CAAC,GAAG;;AAG9E,SAAS,eAAe,aAA0C;AAKhE,QAAO,GAJW,SAAS,aAAa,iBAAiB,SAItC,CAAC,eAHN,SAAS,aAAa,aAAa,SAGT,CAAC,GAF5B,SAAS,aAAa,YAAY,SAEC,CAAC,sCADnC,SAAS,aAAa,oBAAoB,SACoC,CAAC;;AAG/F,SAAS,sBACP,OACA,QACA,SACU;CACV,MAAM,OAAO,CAAC,GAAG,IAAI,KAAK,UAAU,EAAE,EAAE,KAAK,MAAM,EAAE,MAAM,CAAC,CAAC,OAAO,QAAQ,CAAC,CAAC,CAC3E,MAAM,GAAG,MAAM,EAAE,cAAc,EAAE,CAAC;CACrC,MAAM,QAAQ,CAAC,IAAI,MAAM,GAAG;AAC5B,KAAI,KAAK,WAAW,GAAG;AACrB,QAAM,KAAK,SAAS;AACpB,SAAO;;AAET,KAAI,CAAC,QAAQ,UAAU;EACrB,MAAM,UAAU,KAAK,MAAM,GAAG,cAAc;EAC5C,MAAM,SAAS,KAAK,SAAS,QAAQ,SAAS,SAAS,KAAK,SAAS,QAAQ,OAAO,SAAS;AAC7F,QAAM,KAAK,KAAK,QAAQ,KAAK,KAAK,GAAG,SAAS;AAC9C,SAAO;;CAET,MAAM,UAAU,KAAK,MAAM,GAAG,GAAG;AACjC,MAAK,MAAM,SAAS,QAClB,OAAM,KAAK,KAAK,QAAQ;AAE1B,KAAI,KAAK,SAAS,QAAQ,OACxB,OAAM,KAAK,SAAS,KAAK,SAAS,QAAQ,OAAO,OAAO;AAE1D,QAAO;;AAGT,SAAgB,qBAAqB,OAM1B;CACT,MAAM,WAAW,MAAM,aAAa;CACpC,MAAM,QAAkB,EAAE;AAE1B,KAAI,UAAU;AACZ,QAAM,KAAK,YAAY,GAAG;AAC1B,QAAM,KAAK,YAAY,MAAM,MAAM,oBAAoB;AACvD,QAAM,KAAK,SAAS,MAAM,UAAU,mBAAmB,YAAY;AACnE,QAAM,KAAK,UAAU,iBAAiB,MAAM,MAAM,GAAG;AACrD,QAAM,KAAK,GAAG;;AAGhB,OAAM,KAAK,eAAe,MAAM,YAAY,CAAC;AAC7C,OAAM,KAAK,+DAA+D;AAC1E,OAAM,KAAK,GAAG;AACd,OAAM,KACJ,+GACD;AAED,KAAI,SACF,OAAM,KACJ,IACA,aACA,uCACA,iDACA,6CACD;AAGH,OAAM,KAAK,GAAG;AACd,OAAM,KAAK,GAAG,sBAAsB,WAAW,MAAM,WAAW,SAAS,EAAE,UAAU,CAAC,CAAC;AACvF,OAAM,KAAK,GAAG;AACd,OAAM,KAAK,GAAG,sBAAsB,UAAU,MAAM,WAAW,QAAQ,EAAE,UAAU,CAAC,CAAC;AACrF,OAAM,KAAK,GAAG;AACd,OAAM,KAAK,GAAG,sBAAsB,aAAa,MAAM,WAAW,WAAW,EAAE,UAAU,CAAC,CAAC;AAC3F,OAAM,KAAK,GAAG;AACd,OAAM,KAAK,GAAG,sBAAsB,cAAc,MAAM,WAAW,YAAY,EAAE,UAAU,CAAC,CAAC;AAE7F,KAAI,SACF,OAAM,KACJ,IACA,oBACA,6CACA,uCACA,qCACA,mCACA,qCACD;AAGH,QAAO,MAAM,KAAK,KAAK"}
|
|
@@ -6,6 +6,7 @@
|
|
|
6
6
|
* is active (e.g. file-only + explicit subsystem tags) instead of patching stdio here.
|
|
7
7
|
*/
|
|
8
8
|
export declare function isLikelyPinoJsonLogLine(line: string): boolean;
|
|
9
|
+
export declare function isLikelyPinoJsonLogPrefix(text: string): boolean;
|
|
9
10
|
export type TuiStdioFilterHandle = {
|
|
10
11
|
restore: () => void;
|
|
11
12
|
/** Restore native stdio writes temporarily (e.g. inherited child process). */
|
|
@@ -10,11 +10,16 @@ function isLikelyPinoJsonLogLine(line) {
|
|
|
10
10
|
const t = line.trim();
|
|
11
11
|
if (!t.startsWith("{")) return false;
|
|
12
12
|
try {
|
|
13
|
-
|
|
13
|
+
const parsed = JSON.parse(t);
|
|
14
|
+
return typeof parsed.level === "number" || typeof parsed.level === "string";
|
|
14
15
|
} catch {
|
|
15
16
|
return false;
|
|
16
17
|
}
|
|
17
18
|
}
|
|
19
|
+
function isLikelyPinoJsonLogPrefix(text) {
|
|
20
|
+
const t = text.trimStart();
|
|
21
|
+
return t.startsWith("{") && /"level"\s*:/.test(t);
|
|
22
|
+
}
|
|
18
23
|
/** Patch process stdout/stderr; call `restore()` before exiting the TUI. */
|
|
19
24
|
function installTuiStdioFilter() {
|
|
20
25
|
const originalStdoutWrite = process.stdout.write.bind(process.stdout);
|
|
@@ -43,11 +48,10 @@ function installTuiStdioFilter() {
|
|
|
43
48
|
const text = typeof chunk === "string" ? chunk : chunk instanceof Buffer ? chunk.toString() : "";
|
|
44
49
|
if (text.includes("\x1B")) {
|
|
45
50
|
let emit = takeEmitCompleteLines(buf);
|
|
46
|
-
if (buf.s.length > 0)
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
}
|
|
51
|
+
if (buf.s.length > 0) if (isLikelyPinoJsonLogPrefix(buf.s)) buf.s = "";
|
|
52
|
+
else {
|
|
53
|
+
emit += buf.s;
|
|
54
|
+
buf.s = "";
|
|
51
55
|
}
|
|
52
56
|
if (emit.length > 0) original(emit, ...rest);
|
|
53
57
|
return original(text, ...rest);
|
|
@@ -91,6 +95,6 @@ function installTuiStdioFilter() {
|
|
|
91
95
|
};
|
|
92
96
|
}
|
|
93
97
|
//#endregion
|
|
94
|
-
export { installTuiStdioFilter, isLikelyPinoJsonLogLine };
|
|
98
|
+
export { installTuiStdioFilter, isLikelyPinoJsonLogLine, isLikelyPinoJsonLogPrefix };
|
|
95
99
|
|
|
96
100
|
//# sourceMappingURL=tui-stdio-filter.js.map
|