@xopcai/xopc 0.0.117 → 0.0.119
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 +26 -24
- package/README.zh-CN.md +46 -42
- package/dist/browser-ext/manifest.json +1 -1
- package/dist/extensions/telegram/xopc.extension.json +1 -1
- package/dist/gateway/static/root/assets/{agent-avatar-dicebear-BBLhJ2C6.js → agent-avatar-dicebear-CU8J6zou.js} +1 -1
- package/dist/gateway/static/root/assets/agents-B0hkpLhP.js +2 -0
- package/dist/gateway/static/root/assets/app-management-settings-panel-B9vfYoEr.js +1 -0
- package/dist/gateway/static/root/assets/appearance-settings-ClOzIO24.js +1 -0
- package/dist/gateway/static/root/assets/{apps-page-DdDx0V4z.js → apps-page-DU0dz9Zo.js} +1 -1
- package/dist/gateway/static/root/assets/{archive-plugin-DZsVqMhU.js → archive-plugin-BkVIgZzA.js} +1 -1
- package/dist/gateway/static/root/assets/{attachment-load-CIol6JWX.js → attachment-load-CaCMWh1D.js} +1 -1
- package/dist/gateway/static/root/assets/automation-suggestion-card-DhGDpKP3.js +1 -0
- package/dist/gateway/static/root/assets/automations-page-CTedroVo.js +1 -0
- package/dist/gateway/static/root/assets/{binary-plugins-B3UauMfp.js → binary-plugins-B4TO_bsn.js} +1 -1
- package/dist/gateway/static/root/assets/{block-editor-2HJoFchH.js → block-editor-DJRWwWNI.js} +6 -6
- package/dist/gateway/static/root/assets/browser-settings-page-FCDwOOBK.js +8 -0
- package/dist/gateway/static/root/assets/capability-presets-api-Befi89CL.js +1 -0
- package/dist/gateway/static/root/assets/capability-presets-settings-panel-_G8eb2vJ.js +1 -0
- package/dist/gateway/static/root/assets/channel-recipient-api-BNSuJb5f.js +1 -0
- package/dist/gateway/static/root/assets/channels-settings-C3d5JBJX.js +1 -0
- package/dist/gateway/static/root/assets/cn-BQ_8x0bT.js +1 -0
- package/dist/gateway/static/root/assets/connectors-page-yaUNvt5u.js +2 -0
- package/dist/gateway/static/root/assets/cron-expression-B3B1eqnr.js +2 -0
- package/dist/gateway/static/root/assets/dreaming-settings-DNrdg1Ve.js +1 -0
- package/dist/gateway/static/root/assets/{extension-debug-page-DX5WRE_t.js → extension-debug-page-DYh402XV.js} +1 -1
- package/dist/gateway/static/root/assets/{extension-page-Buah7Bw-.js → extension-page-Cr_TizrN.js} +1 -1
- package/dist/gateway/static/root/assets/{extension-settings-page-DuroLVnf.js → extension-settings-page-BU1KoKRj.js} +1 -1
- package/dist/gateway/static/root/assets/{fetch-B5zdl27C.js → fetch-Y7AEX4H3.js} +1 -1
- package/dist/gateway/static/root/assets/format-cron-label-arqgGlVV.js +1 -0
- package/dist/gateway/static/root/assets/{gateway-config-api-gT4ZhE7h.js → gateway-config-api-RbMmAOpX.js} +1 -1
- package/dist/gateway/static/root/assets/gateway-settings-C79wkXef.js +1 -0
- package/dist/gateway/static/root/assets/{gateway-startup-retry-B3kL8KGY.js → gateway-startup-retry-DiD_Tx4N.js} +1 -1
- package/dist/gateway/static/root/assets/goal-detail-page-9paXuHdo.js +1 -0
- package/dist/gateway/static/root/assets/{goals-config-api-AR-fVh0P.js → goals-config-api-DqxVi0p5.js} +1 -1
- package/dist/gateway/static/root/assets/{goals-page-Cpb21ezg.js → goals-page-CS0R-Af2.js} +2 -2
- package/dist/gateway/static/root/assets/goals-settings-CSuzZ8Ae.js +1 -0
- package/dist/gateway/static/root/assets/heartbeat-settings-DXPaYJm3.js +1 -0
- package/dist/gateway/static/root/assets/index-BoKafJIZ.js +191 -0
- package/dist/gateway/static/root/assets/index-CArhCcYn.css +1 -0
- package/dist/gateway/static/root/assets/keyboard-shortcuts-settings-Dvg53qnd.js +1 -0
- package/dist/gateway/static/root/assets/{logs-page-DefCgF4o.js → logs-page-DLXPcksQ.js} +2 -2
- package/dist/gateway/static/root/assets/{markdown-split-ChbR9LGO.js → markdown-split-CpHxbtWJ.js} +1 -1
- package/dist/gateway/static/root/assets/{media-plugins-B82oP80n.js → media-plugins-SFPQRSxq.js} +1 -1
- package/dist/gateway/static/root/assets/messages-CrDHEbss.js +3 -0
- package/dist/gateway/static/root/assets/models-hub-panel-BDF2iyRk.js +2 -0
- package/dist/gateway/static/root/assets/note-detail-page-CSb_hwig.js +2 -0
- package/dist/gateway/static/root/assets/{note-image-lightbox-CDknITM3.js → note-image-lightbox-BUYURRgn.js} +1 -1
- package/dist/gateway/static/root/assets/notes-page-BsIBSFyZ.js +1 -0
- package/dist/gateway/static/root/assets/{preview-open-alternatives-DV3xQsWB.js → preview-open-alternatives-BHz9iWYA.js} +1 -1
- package/dist/gateway/static/root/assets/remote-access-hub-CwzSovcS.js +1 -0
- package/dist/gateway/static/root/assets/{save-bar-controls-BODCXnvY.js → save-bar-controls-CefkOlRg.js} +1 -1
- package/dist/gateway/static/root/assets/schedule-field-CmTRoOcE.js +1 -0
- package/dist/gateway/static/root/assets/{schema-form-qtfEI6QM.js → schema-form-FMKv1vGu.js} +1 -1
- package/dist/gateway/static/root/assets/sessions-page-PHmX-NmA.js +1 -0
- package/dist/gateway/static/root/assets/settings-advanced-gate-BRAeKJN4.js +1 -0
- package/dist/gateway/static/root/assets/{settings-collapsible-section-BHZKjVcS.js → settings-collapsible-section-BouO6JTi.js} +1 -1
- package/dist/gateway/static/root/assets/{settings-form-section-5i35D-J1.js → settings-form-section-D-4lBl6X.js} +1 -1
- package/dist/gateway/static/root/assets/settings-page-KKrbFjy8.js +1 -0
- package/dist/gateway/static/root/assets/settings-page-layout-BJ4Gsef5.js +1 -0
- package/dist/gateway/static/root/assets/setup-status-panel-CrUjHPQo.js +1 -0
- package/dist/gateway/static/root/assets/{share-preview-page-B0H63tDv.js → share-preview-page-BDy2btRN.js} +1 -1
- package/dist/gateway/static/root/assets/shares-settings-B18OBmH5.js +1 -0
- package/dist/gateway/static/root/assets/skill-reload-api-C28-2uKQ.js +1 -0
- package/dist/gateway/static/root/assets/skills-page-Bm2ebkwl.js +2 -0
- package/dist/gateway/static/root/assets/system-settings-panel-CRngrlnZ.js +1 -0
- package/dist/gateway/static/root/assets/typed-models-lib-BltBc0b-.js +1 -0
- package/dist/gateway/static/root/assets/{use-channel-catalog-BCjP_VHb.js → use-channel-catalog-CjN-51e6.js} +1 -1
- package/dist/gateway/static/root/assets/user-profile-settings-panel-DJ1dKwZy.js +1 -0
- package/dist/gateway/static/root/assets/utils-B5M5-YvK.js +1 -0
- package/dist/gateway/static/root/assets/voice-api-key-field-CeEevm7z.js +1 -0
- package/dist/gateway/static/root/assets/{voice-player-store-BlF9V05n.js → voice-player-store-B7ykUlHM.js} +1 -1
- package/dist/gateway/static/root/assets/workflow-run-setup-panel-C4PzUQjB.js +3 -0
- package/dist/gateway/static/root/assets/workflows-page-BL84_-Ky.js +18 -0
- package/dist/gateway/static/root/index.html +6 -7
- package/dist/package.js +1 -1
- package/dist/src/agent/agent-manager.d.ts +4 -5
- package/dist/src/agent/agent-manager.js +6 -9
- package/dist/src/agent/agent-manager.js.map +1 -1
- package/dist/src/agent/agent-scope.js +0 -2
- package/dist/src/agent/agent-scope.js.map +1 -1
- package/dist/src/agent/background-review/prompts.d.ts +2 -2
- package/dist/src/agent/background-review/prompts.js +2 -2
- package/dist/src/agent/background-review/prompts.js.map +1 -1
- package/dist/src/agent/background-review/settings.d.ts +1 -1
- package/dist/src/agent/background-review/settings.js +7 -8
- package/dist/src/agent/background-review/settings.js.map +1 -1
- package/dist/src/agent/bootstrap/bootstrap-cache.d.ts +1 -0
- package/dist/src/agent/bootstrap/bootstrap-cache.js +4 -3
- package/dist/src/agent/bootstrap/bootstrap-cache.js.map +1 -1
- package/dist/src/agent/bootstrap/bootstrap-files.d.ts +4 -0
- package/dist/src/agent/bootstrap/bootstrap-files.js +4 -3
- package/dist/src/agent/bootstrap/bootstrap-files.js.map +1 -1
- package/dist/src/agent/bootstrap/filter-bootstrap-files.js +4 -2
- package/dist/src/agent/bootstrap/filter-bootstrap-files.js.map +1 -1
- package/dist/src/agent/bootstrap/load-bootstrap-files.d.ts +2 -1
- package/dist/src/agent/bootstrap/load-bootstrap-files.js +17 -16
- package/dist/src/agent/bootstrap/load-bootstrap-files.js.map +1 -1
- package/dist/src/agent/bootstrap/types.d.ts +1 -1
- package/dist/src/agent/context/workspace-templates/AGENTS.md +1 -1
- package/dist/src/agent/context/workspace.d.ts +4 -2
- package/dist/src/agent/context/workspace.js +5 -4
- package/dist/src/agent/context/workspace.js.map +1 -1
- package/dist/src/agent/embedded/run-for-session.js +106 -15
- package/dist/src/agent/embedded/run-for-session.js.map +1 -1
- package/dist/src/agent/fallback/candidates.d.ts +0 -8
- package/dist/src/agent/fallback/candidates.js +10 -11
- package/dist/src/agent/fallback/candidates.js.map +1 -1
- package/dist/src/agent/index.js +1 -1
- package/dist/src/agent/lifecycle/handlers/compaction.d.ts +1 -3
- package/dist/src/agent/lifecycle/handlers/compaction.js +1 -16
- package/dist/src/agent/lifecycle/handlers/compaction.js.map +1 -1
- package/dist/src/agent/lifecycle/progress.d.ts +0 -1
- package/dist/src/agent/lifecycle/progress.js +1 -6
- package/dist/src/agent/lifecycle/progress.js.map +1 -1
- package/dist/src/agent/lifecycle/timeout-wrapper.d.ts +1 -2
- package/dist/src/agent/lifecycle/timeout-wrapper.js +1 -7
- package/dist/src/agent/lifecycle/timeout-wrapper.js.map +1 -1
- package/dist/src/agent/memory/builtin-memory-store.d.ts +4 -2
- package/dist/src/agent/memory/builtin-memory-store.js +11 -6
- package/dist/src/agent/memory/builtin-memory-store.js.map +1 -1
- package/dist/src/agent/memory/builtin-provider.js +36 -7
- package/dist/src/agent/memory/builtin-provider.js.map +1 -1
- package/dist/src/agent/memory/candidate-extractor.d.ts +6 -0
- package/dist/src/agent/memory/candidate-extractor.js +60 -0
- package/dist/src/agent/memory/candidate-extractor.js.map +1 -0
- package/dist/src/agent/memory/manager.d.ts +2 -1
- package/dist/src/agent/memory/manager.js +27 -3
- package/dist/src/agent/memory/manager.js.map +1 -1
- package/dist/src/agent/memory/memory-config.js +3 -0
- package/dist/src/agent/memory/memory-config.js.map +1 -1
- package/dist/src/agent/memory/prefetch-coordinator.js.map +1 -1
- package/dist/src/agent/memory/types.d.ts +27 -4
- package/dist/src/agent/middleware/self-verify.d.ts +0 -1
- package/dist/src/agent/middleware/self-verify.js +0 -2
- package/dist/src/agent/middleware/self-verify.js.map +1 -1
- package/dist/src/agent/models/index.d.ts +1 -1
- package/dist/src/agent/models/manager.d.ts +4 -20
- package/dist/src/agent/models/manager.js +9 -126
- package/dist/src/agent/models/manager.js.map +1 -1
- package/dist/src/agent/orchestration/agent-orchestrator.d.ts +0 -4
- package/dist/src/agent/orchestration/agent-orchestrator.js +1 -9
- package/dist/src/agent/orchestration/agent-orchestrator.js.map +1 -1
- package/dist/src/agent/prompt/memory/index.d.ts +4 -2
- package/dist/src/agent/prompt/memory/index.js +18 -12
- package/dist/src/agent/prompt/memory/index.js.map +1 -1
- package/dist/src/agent/prompt/sections/memory-skills.js +1 -1
- package/dist/src/agent/prompt/sections/memory-skills.js.map +1 -1
- package/dist/src/agent/prompt/sections/tooling.js +2 -2
- package/dist/src/agent/prompt/sections/tooling.js.map +1 -1
- package/dist/src/agent/prompt/service-prompt-builder.d.ts +0 -1
- package/dist/src/agent/prompt/service-prompt-builder.js +4 -31
- package/dist/src/agent/prompt/service-prompt-builder.js.map +1 -1
- package/dist/src/agent/prompt/subagent-context.js +1 -1
- package/dist/src/agent/prompt/subagent-context.js.map +1 -1
- package/dist/src/agent/prompt/types.d.ts +1 -1
- package/dist/src/agent/reply/post-compaction-context.js +1 -3
- package/dist/src/agent/reply/post-compaction-context.js.map +1 -1
- package/dist/src/agent/reply/startup-context.js +1 -5
- package/dist/src/agent/reply/startup-context.js.map +1 -1
- package/dist/src/agent/service.d.ts +4 -12
- package/dist/src/agent/service.js +10 -48
- package/dist/src/agent/service.js.map +1 -1
- package/dist/src/agent/service.types.d.ts +2 -2
- package/dist/src/agent/session/session-config-service.d.ts +11 -11
- package/dist/src/agent/session/session-config-service.js +14 -14
- package/dist/src/agent/session/session-config-service.js.map +1 -1
- package/dist/src/agent/session/session-inspector.js +3 -2
- package/dist/src/agent/session/session-inspector.js.map +1 -1
- package/dist/src/agent/starter-agents.js +12 -12
- package/dist/src/agent/starter-agents.js.map +1 -1
- package/dist/src/agent/tools/automation-tool.d.ts +14 -0
- package/dist/src/agent/tools/automation-tool.js +102 -0
- package/dist/src/agent/tools/automation-tool.js.map +1 -0
- package/dist/src/agent/tools/curated-memory-tool.js +57 -2
- package/dist/src/agent/tools/curated-memory-tool.js.map +1 -1
- package/dist/src/agent/tools/delegate-tool.js +1 -1
- package/dist/src/agent/tools/delegate-tool.js.map +1 -1
- package/dist/src/agent/tools/factory.d.ts +3 -3
- package/dist/src/agent/tools/factory.js +2 -2
- package/dist/src/agent/tools/factory.js.map +1 -1
- package/dist/src/agent/tools/index.d.ts +1 -1
- package/dist/src/agent/tools/index.js +2 -2
- package/dist/src/agent/tools/web-extract.js +6 -8
- package/dist/src/agent/tools/web-extract.js.map +1 -1
- package/dist/src/agent-manifest/index.js +2 -2
- package/dist/src/agent-manifest/resolver.d.ts +4 -2
- package/dist/src/agent-manifest/resolver.js +6 -3
- package/dist/src/agent-manifest/resolver.js.map +1 -1
- package/dist/src/agent-manifest/schema.d.ts +238 -0
- package/dist/src/agent-manifest/schema.js +16 -5
- package/dist/src/agent-manifest/schema.js.map +1 -1
- package/dist/src/agent-manifest/validator.d.ts +3 -2
- package/dist/src/agent-manifest/validator.js +2 -1
- package/dist/src/agent-manifest/validator.js.map +1 -1
- package/dist/src/ai-assist/text-assist.d.ts +1 -1
- package/dist/src/ai-assist/text-assist.js +56 -0
- package/dist/src/ai-assist/text-assist.js.map +1 -1
- package/dist/src/auth/profiles/store.js.map +1 -1
- package/dist/src/automations/api/routes.d.ts +3 -0
- package/dist/src/automations/api/routes.js +193 -0
- package/dist/src/automations/api/routes.js.map +1 -0
- package/dist/src/automations/domain/index.d.ts +3 -0
- package/dist/src/automations/domain/index.js +3 -0
- package/dist/src/automations/domain/schedule.d.ts +4 -0
- package/dist/src/automations/domain/schedule.js +37 -0
- package/dist/src/automations/domain/schedule.js.map +1 -0
- package/dist/src/automations/domain/types.d.ts +160 -0
- package/dist/src/automations/domain/validation.d.ts +370 -0
- package/dist/src/automations/domain/validation.js +149 -0
- package/dist/src/automations/domain/validation.js.map +1 -0
- package/dist/src/automations/draft/automation-draft-prompt.d.ts +26 -0
- package/dist/src/automations/draft/automation-draft-prompt.js +127 -0
- package/dist/src/automations/draft/automation-draft-prompt.js.map +1 -0
- package/dist/src/automations/draft/automation-draft-service.d.ts +12 -0
- package/dist/src/automations/draft/automation-draft-service.js +135 -0
- package/dist/src/automations/draft/automation-draft-service.js.map +1 -0
- package/dist/src/automations/draft/automation-draft-validator.d.ts +99 -0
- package/dist/src/automations/draft/automation-draft-validator.js +105 -0
- package/dist/src/automations/draft/automation-draft-validator.js.map +1 -0
- package/dist/src/automations/draft/automation-draft.types.d.ts +40 -0
- package/dist/src/automations/draft/index.d.ts +3 -0
- package/dist/src/automations/draft/index.js +3 -0
- package/dist/src/automations/index.d.ts +3 -0
- package/dist/src/automations/index.js +8 -0
- package/dist/src/automations/product-events.d.ts +5 -0
- package/dist/src/automations/product-events.js +21 -0
- package/dist/src/automations/product-events.js.map +1 -0
- package/dist/src/automations/service/action-executor.d.ts +9 -0
- package/dist/src/automations/service/action-executor.js +157 -0
- package/dist/src/automations/service/action-executor.js.map +1 -0
- package/dist/src/automations/service/automation-service.d.ts +54 -0
- package/dist/src/automations/service/automation-service.js +404 -0
- package/dist/src/automations/service/automation-service.js.map +1 -0
- package/dist/src/automations/service/index.d.ts +2 -0
- package/dist/src/automations/service/index.js +3 -0
- package/dist/src/automations/storage/automation-repository.d.ts +6 -0
- package/dist/src/automations/storage/automation-repository.js +61 -0
- package/dist/src/automations/storage/automation-repository.js.map +1 -0
- package/dist/src/automations/storage/automation-run-repository.d.ts +17 -0
- package/dist/src/automations/storage/automation-run-repository.js +130 -0
- package/dist/src/automations/storage/automation-run-repository.js.map +1 -0
- package/dist/src/automations/storage/index.d.ts +2 -0
- package/dist/src/automations/storage/index.js +3 -0
- package/dist/src/channels/pipeline.d.ts +1 -1
- package/dist/src/channels/pipeline.js.map +1 -1
- package/dist/src/channels/plugin-types.d.ts +3 -0
- package/dist/src/chat-commands/agent-edit.js +0 -1
- package/dist/src/chat-commands/agent-edit.js.map +1 -1
- package/dist/src/chat-commands/builtins/model.js +2 -2
- package/dist/src/chat-commands/builtins/model.js.map +1 -1
- package/dist/src/chat-commands/builtins/thinking.js.map +1 -1
- package/dist/src/cli/command-catalog.js +0 -39
- package/dist/src/cli/command-catalog.js.map +1 -1
- package/dist/src/cli/command-loaders.js +0 -1
- package/dist/src/cli/command-loaders.js.map +1 -1
- package/dist/src/cli/command-manifest.d.ts +1 -1
- package/dist/src/cli/command-manifest.js +1 -5
- package/dist/src/cli/command-manifest.js.map +1 -1
- package/dist/src/cli/commands/agents.js +7 -6
- package/dist/src/cli/commands/agents.js.map +1 -1
- package/dist/src/cli/commands/doctor/checks/database-schema.js +1 -1
- package/dist/src/cli/commands/doctor/checks/{cron-health.d.ts → migrations.d.ts} +1 -1
- package/dist/src/cli/commands/doctor/checks/migrations.js +40 -0
- package/dist/src/cli/commands/doctor/checks/migrations.js.map +1 -0
- package/dist/src/cli/commands/doctor/checks/provider-auth.js +1 -0
- package/dist/src/cli/commands/doctor/checks/provider-auth.js.map +1 -1
- package/dist/src/cli/commands/doctor/checks/workspace-status.js +0 -1
- package/dist/src/cli/commands/doctor/checks/workspace-status.js.map +1 -1
- package/dist/src/cli/commands/doctor/flow.js +2 -2
- package/dist/src/cli/commands/doctor/flow.js.map +1 -1
- package/dist/src/cli/commands/gateway/call.js +2 -2
- package/dist/src/cli/commands/gateway/call.js.map +1 -1
- package/dist/src/cli/commands/gateway/lifecycle.js +1 -1
- package/dist/src/cli/commands/gateway/run-foreground.js +4 -2
- package/dist/src/cli/commands/gateway/run-foreground.js.map +1 -1
- package/dist/src/cli/commands/init.js +33 -14
- package/dist/src/cli/commands/init.js.map +1 -1
- package/dist/src/cli/commands/models.js +13 -31
- package/dist/src/cli/commands/models.js.map +1 -1
- package/dist/src/cli/commands/onboard/model.js +17 -10
- package/dist/src/cli/commands/onboard/model.js.map +1 -1
- package/dist/src/cli/commands/onboard.js +2 -2
- package/dist/src/cli/commands/onboard.js.map +1 -1
- package/dist/src/cli/commands/tui.js +26 -4
- package/dist/src/cli/commands/tui.js.map +1 -1
- package/dist/src/cli/index.d.ts +1 -0
- package/dist/src/cli/index.js +10 -5
- package/dist/src/cli/index.js.map +1 -1
- package/dist/src/cli/registry.js +1 -1
- package/dist/src/cli/registry.js.map +1 -1
- package/dist/src/cli/templates.d.ts +1 -1
- package/dist/src/cli/templates.js +1 -11
- package/dist/src/cli/templates.js.map +1 -1
- package/dist/src/cli/utils/init-workspace-core.js +2 -0
- package/dist/src/cli/utils/init-workspace-core.js.map +1 -1
- package/dist/src/commands/agents.config.d.ts +9 -0
- package/dist/src/commands/agents.config.js +42 -12
- package/dist/src/commands/agents.config.js.map +1 -1
- package/dist/src/config/agent-profile.js +5 -3
- package/dist/src/config/agent-profile.js.map +1 -1
- package/dist/src/config/agent-typed-models.js +3 -5
- package/dist/src/config/agent-typed-models.js.map +1 -1
- package/dist/src/config/config-surface.d.ts +3 -0
- package/dist/src/config/index.d.ts +0 -1
- package/dist/src/config/index.js +3 -3
- package/dist/src/config/index.js.map +1 -1
- package/dist/src/config/paths.d.ts +8 -10
- package/dist/src/config/paths.js +16 -16
- package/dist/src/config/paths.js.map +1 -1
- package/dist/src/config/profile.js +0 -1
- package/dist/src/config/profile.js.map +1 -1
- package/dist/src/config/rules.js +0 -5
- package/dist/src/config/rules.js.map +1 -1
- package/dist/src/config/schema.d.ts +45 -44
- package/dist/src/config/schema.js +68 -52
- package/dist/src/config/schema.js.map +1 -1
- package/dist/src/config/web-patch.d.ts +0 -12
- package/dist/src/config/web-patch.js +2 -29
- package/dist/src/config/web-patch.js.map +1 -1
- package/dist/src/extensions/api.d.ts +2 -0
- package/dist/src/extensions/api.js +10 -0
- package/dist/src/extensions/api.js.map +1 -1
- package/dist/src/extensions/extension-registry-impl.d.ts +4 -1
- package/dist/src/extensions/extension-registry-impl.js +8 -0
- package/dist/src/extensions/extension-registry-impl.js.map +1 -1
- package/dist/src/extensions/loader.d.ts +3 -3
- package/dist/src/extensions/loader.js +3 -3
- package/dist/src/extensions/loader.js.map +1 -1
- package/dist/src/extensions/sdk/testing.d.ts +2 -0
- package/dist/src/extensions/sdk/testing.js +7 -0
- package/dist/src/extensions/sdk/testing.js.map +1 -1
- package/dist/src/extensions/types/core.d.ts +10 -1
- package/dist/src/extensions/types/index.d.ts +1 -1
- package/dist/src/extensions/types/{phase4.d.ts → registration.d.ts} +2 -2
- package/dist/src/gateway/agent-builtin-tools.d.ts +1 -1
- package/dist/src/gateway/agent-builtin-tools.js +1 -1
- package/dist/src/gateway/agent-builtin-tools.js.map +1 -1
- package/dist/src/gateway/agents-admin.d.ts +8 -0
- package/dist/src/gateway/agents-admin.js +63 -34
- package/dist/src/gateway/agents-admin.js.map +1 -1
- package/dist/src/gateway/capability-presets-admin.d.ts +1 -0
- package/dist/src/gateway/capability-presets-admin.js +19 -10
- package/dist/src/gateway/capability-presets-admin.js.map +1 -1
- package/dist/src/gateway/chat-stream/mapper.js +9 -2
- package/dist/src/gateway/chat-stream/mapper.js.map +1 -1
- package/dist/src/gateway/dreaming-automation-reconciler.d.ts +11 -0
- package/dist/src/gateway/dreaming-automation-reconciler.js +105 -0
- package/dist/src/gateway/dreaming-automation-reconciler.js.map +1 -0
- package/dist/src/gateway/global-defaults-admin.d.ts +36 -0
- package/dist/src/gateway/global-defaults-admin.js +146 -0
- package/dist/src/gateway/global-defaults-admin.js.map +1 -0
- package/dist/src/gateway/heartbeat/service.d.ts +0 -2
- package/dist/src/gateway/heartbeat/service.js +0 -7
- package/dist/src/gateway/heartbeat/service.js.map +1 -1
- package/dist/src/gateway/hono/lib/config-payload.d.ts +5 -6
- package/dist/src/gateway/hono/lib/config-payload.js +2 -2
- package/dist/src/gateway/hono/lib/config-payload.js.map +1 -1
- package/dist/src/gateway/hono/routes/agents.js +33 -1
- package/dist/src/gateway/hono/routes/agents.js.map +1 -1
- package/dist/src/gateway/hono/routes/commands-skills.js +4 -5
- package/dist/src/gateway/hono/routes/commands-skills.js.map +1 -1
- package/dist/src/gateway/hono/routes/config-patch/misc.d.ts +1 -1
- package/dist/src/gateway/hono/routes/config-patch/misc.js +12 -6
- package/dist/src/gateway/hono/routes/config-patch/misc.js.map +1 -1
- package/dist/src/gateway/hono/routes/dreaming.js +27 -37
- package/dist/src/gateway/hono/routes/dreaming.js.map +1 -1
- package/dist/src/gateway/hono/routes/global-defaults.d.ts +3 -0
- package/dist/src/gateway/hono/routes/global-defaults.js +61 -0
- package/dist/src/gateway/hono/routes/global-defaults.js.map +1 -0
- package/dist/src/gateway/hono/routes/home.d.ts +2 -2
- package/dist/src/gateway/hono/routes/home.js +34 -25
- package/dist/src/gateway/hono/routes/home.js.map +1 -1
- package/dist/src/gateway/hono/routes/lazy-bundles.js +21 -9
- package/dist/src/gateway/hono/routes/lazy-bundles.js.map +1 -1
- package/dist/src/gateway/hono/routes/memory.js +75 -4
- package/dist/src/gateway/hono/routes/memory.js.map +1 -1
- package/dist/src/gateway/hono/routes/migrations.d.ts +3 -0
- package/dist/src/gateway/hono/routes/migrations.js +35 -0
- package/dist/src/gateway/hono/routes/migrations.js.map +1 -0
- package/dist/src/gateway/hono/routes/models.js +1 -1
- package/dist/src/gateway/hono/routes/public-gateway.js +2 -1
- package/dist/src/gateway/hono/routes/public-gateway.js.map +1 -1
- package/dist/src/gateway/hono/routes/sessions.js +14 -0
- package/dist/src/gateway/hono/routes/sessions.js.map +1 -1
- package/dist/src/gateway/run-loop.js +2 -0
- package/dist/src/gateway/run-loop.js.map +1 -1
- package/dist/src/gateway/security/operator-scopes.js +5 -1
- package/dist/src/gateway/security/operator-scopes.js.map +1 -1
- package/dist/src/gateway/service/config-coordinator.d.ts +4 -4
- package/dist/src/gateway/service/config-coordinator.js +14 -8
- package/dist/src/gateway/service/config-coordinator.js.map +1 -1
- package/dist/src/gateway/service/marketplace-service.d.ts +4 -4
- package/dist/src/gateway/service/marketplace-service.js +11 -7
- package/dist/src/gateway/service/marketplace-service.js.map +1 -1
- package/dist/src/gateway/service/sessions-api.d.ts +2 -1
- package/dist/src/gateway/service/sessions-api.js +6 -1
- package/dist/src/gateway/service/sessions-api.js.map +1 -1
- package/dist/src/gateway/service.d.ts +7 -3
- package/dist/src/gateway/service.js +61 -27
- package/dist/src/gateway/service.js.map +1 -1
- package/dist/src/goals/goal-service.js +45 -4
- package/dist/src/goals/goal-service.js.map +1 -1
- package/dist/src/infra/update-restart.js +1 -1
- package/dist/src/migrations/config/default-capability-preset.d.ts +10 -0
- package/dist/src/migrations/config/default-capability-preset.js +135 -0
- package/dist/src/migrations/config/default-capability-preset.js.map +1 -0
- package/dist/src/migrations/index.d.ts +4 -0
- package/dist/src/migrations/index.js +4 -0
- package/dist/src/migrations/registry.d.ts +8 -0
- package/dist/src/migrations/registry.js +18 -0
- package/dist/src/migrations/registry.js.map +1 -0
- package/dist/src/migrations/runner.d.ts +17 -0
- package/dist/src/migrations/runner.js +191 -0
- package/dist/src/migrations/runner.js.map +1 -0
- package/dist/src/migrations/types.d.ts +34 -0
- package/dist/src/notes/service.js +27 -2
- package/dist/src/notes/service.js.map +1 -1
- package/dist/src/providers/index.d.ts +4 -5
- package/dist/src/providers/index.js +16 -16
- package/dist/src/providers/index.js.map +1 -1
- package/dist/src/providers/model-registry.d.ts +0 -1
- package/dist/src/providers/model-registry.js +0 -3
- package/dist/src/providers/model-registry.js.map +1 -1
- package/dist/src/routing/resolve-tui-session-key.d.ts +3 -0
- package/dist/src/routing/resolve-tui-session-key.js +14 -3
- package/dist/src/routing/resolve-tui-session-key.js.map +1 -1
- package/dist/src/session/session-workspace.js +2 -7
- package/dist/src/session/session-workspace.js.map +1 -1
- package/dist/src/session/store.js +0 -5
- package/dist/src/session/store.js.map +1 -1
- package/dist/src/session/transcript-outline.d.ts +47 -0
- package/dist/src/session/transcript-outline.js +481 -0
- package/dist/src/session/transcript-outline.js.map +1 -0
- package/dist/src/storage/sqlite/index.d.ts +1 -3
- package/dist/src/storage/sqlite/index.js +2 -4
- package/dist/src/storage/sqlite/memory-index-repository.d.ts +1 -0
- package/dist/src/storage/sqlite/memory-index-repository.js +15 -14
- package/dist/src/storage/sqlite/memory-index-repository.js.map +1 -1
- package/dist/src/storage/sqlite/memory-records-repository.d.ts +44 -1
- package/dist/src/storage/sqlite/memory-records-repository.js +164 -20
- package/dist/src/storage/sqlite/memory-records-repository.js.map +1 -1
- package/dist/src/storage/sqlite/migrations/014_memory_record_governance.sql +10 -0
- package/dist/src/storage/sqlite/migrations/015_memory_trace_feedback.sql +4 -0
- package/dist/src/storage/sqlite/migrations/016_automations.sql +47 -0
- package/dist/src/storage/sqlite/migrations/017_automation_run_events.sql +14 -0
- package/dist/src/storage/sqlite/migrations/018_automation_safety.sql +1 -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/schema.js +1 -1
- package/dist/src/storage/sqlite/schema.sql +56 -46
- package/dist/src/tui/backends/embedded-backend.d.ts +9 -0
- package/dist/src/tui/backends/embedded-backend.js +55 -27
- package/dist/src/tui/backends/embedded-backend.js.map +1 -1
- package/dist/src/tui/backends/gateway-sse-backend.d.ts +4 -0
- package/dist/src/tui/backends/gateway-sse-backend.js +30 -3
- package/dist/src/tui/backends/gateway-sse-backend.js.map +1 -1
- package/dist/src/tui/components/tui-header.d.ts +0 -1
- package/dist/src/tui/components/tui-header.js +3 -8
- package/dist/src/tui/components/tui-header.js.map +1 -1
- package/dist/src/tui/tui-backend.d.ts +4 -0
- package/dist/src/tui/tui-commands.d.ts +5 -0
- package/dist/src/tui/tui-commands.js +43 -0
- package/dist/src/tui/tui-commands.js.map +1 -1
- package/dist/src/tui/tui-startup-resources.js +2 -1
- package/dist/src/tui/tui-startup-resources.js.map +1 -1
- package/dist/src/tui/tui-startup-text.js +12 -12
- package/dist/src/tui/tui-startup-text.js.map +1 -1
- package/dist/src/tui/tui-transcript-tree.d.ts +1 -1
- package/dist/src/tui/tui-transcript-tree.js +17 -257
- package/dist/src/tui/tui-transcript-tree.js.map +1 -1
- package/dist/src/tui/tui-types.d.ts +2 -0
- package/dist/src/tui/tui-types.js.map +1 -1
- package/dist/src/tui/tui.js +11 -3
- package/dist/src/tui/tui.js.map +1 -1
- package/dist/src/workflows/domain/index.js +1 -1
- package/dist/src/workflows/domain/run.d.ts +7 -7
- package/dist/src/workflows/domain/run.js.map +1 -1
- package/dist/src/workflows/index.js +2 -2
- package/dist/src/workflows/service/workflow-run-service.d.ts +2 -0
- package/dist/src/workflows/service/workflow-run-service.js +31 -9
- package/dist/src/workflows/service/workflow-run-service.js.map +1 -1
- package/dist/src/workflows/service/workflow-run-service.types.d.ts +1 -1
- package/package.json +4 -2
- package/dist/gateway/static/root/assets/agents-C6xgagZd.js +0 -71
- package/dist/gateway/static/root/assets/app-management-settings-panel-CBpLONvG.js +0 -1
- package/dist/gateway/static/root/assets/appearance-settings-CGcc54yj.js +0 -1
- package/dist/gateway/static/root/assets/browser-settings-page-CUOO-PQk.js +0 -8
- package/dist/gateway/static/root/assets/capability-presets-api-XQoMTI0A.js +0 -1
- package/dist/gateway/static/root/assets/capability-presets-settings-panel-CfqF-kGr.js +0 -1
- package/dist/gateway/static/root/assets/channels-settings-BYyRzsex.js +0 -1
- package/dist/gateway/static/root/assets/cn-JdwAhgNB.js +0 -1
- package/dist/gateway/static/root/assets/connectors-page-DIvEz4NX.js +0 -2
- package/dist/gateway/static/root/assets/createLucideIcon-DPHK1VkS.js +0 -1
- package/dist/gateway/static/root/assets/cron-api-R41aQCX9.js +0 -1
- package/dist/gateway/static/root/assets/cron-dreaming-jobs-nCMWCf0p.js +0 -1
- package/dist/gateway/static/root/assets/cron-page-D97nFqQD.js +0 -3
- package/dist/gateway/static/root/assets/dreaming-settings-Bceaw1PG.js +0 -1
- package/dist/gateway/static/root/assets/format-cron-label-BsotZDO5.js +0 -2
- package/dist/gateway/static/root/assets/format-interval-label-Dn_QKIqb.js +0 -1
- package/dist/gateway/static/root/assets/gateway-settings-iISWAZRm.js +0 -1
- package/dist/gateway/static/root/assets/goal-detail-page-DCUROLMQ.js +0 -1
- package/dist/gateway/static/root/assets/goals-settings-CPAuFwoD.js +0 -1
- package/dist/gateway/static/root/assets/heartbeat-config-api-D7bKFEeO.js +0 -1
- package/dist/gateway/static/root/assets/heartbeat-settings-CC69vNx0.js +0 -1
- package/dist/gateway/static/root/assets/index-CwhK8qCh.js +0 -122
- package/dist/gateway/static/root/assets/index-CyfhARL-.css +0 -1
- package/dist/gateway/static/root/assets/interval-presets-0DtsnxE0.js +0 -1
- package/dist/gateway/static/root/assets/keyboard-shortcuts-settings-BPREtN8B.js +0 -1
- package/dist/gateway/static/root/assets/messages-Cf1O9JB0.js +0 -3
- package/dist/gateway/static/root/assets/models-hub-panel-DmKiIihT.js +0 -2
- package/dist/gateway/static/root/assets/note-detail-page-CxxfLRJZ.js +0 -2
- package/dist/gateway/static/root/assets/notes-page-X2slSx7V.js +0 -1
- package/dist/gateway/static/root/assets/remote-access-hub-BvmUWqgu.js +0 -1
- package/dist/gateway/static/root/assets/schedule-field-CgJSCD3B.js +0 -1
- package/dist/gateway/static/root/assets/sessions-page-B0yESuuL.js +0 -1
- package/dist/gateway/static/root/assets/settings-advanced-gate-q2M8RKOo.js +0 -1
- package/dist/gateway/static/root/assets/settings-page-CGozabLD.js +0 -1
- package/dist/gateway/static/root/assets/setup-status-panel-FoOSe6nU.js +0 -1
- package/dist/gateway/static/root/assets/shares-settings-Cy5zWyYQ.js +0 -1
- package/dist/gateway/static/root/assets/skill-reload-api-DaZNFro9.js +0 -1
- package/dist/gateway/static/root/assets/skills-page-CnwtUzvw.js +0 -2
- package/dist/gateway/static/root/assets/system-settings-panel-DXs2VmBt.js +0 -1
- package/dist/gateway/static/root/assets/typed-models-lib-4gPuydz_.js +0 -1
- package/dist/gateway/static/root/assets/voice-api-key-field-DvKiOglO.js +0 -1
- package/dist/gateway/static/root/assets/workflows-page-CAVZcONQ.js +0 -18
- package/dist/src/agent/context/workspace-templates/USER.md +0 -24
- package/dist/src/agent/fallback/error.d.ts +0 -22
- package/dist/src/agent/fallback/error.js +0 -32
- package/dist/src/agent/fallback/error.js.map +0 -1
- package/dist/src/agent/fallback/index.d.ts +0 -5
- package/dist/src/agent/fallback/index.js +0 -9
- package/dist/src/agent/fallback/index.js.map +0 -1
- package/dist/src/agent/orchestration/run-agent-turn-with-fallbacks.d.ts +0 -29
- package/dist/src/agent/orchestration/run-agent-turn-with-fallbacks.js +0 -76
- package/dist/src/agent/orchestration/run-agent-turn-with-fallbacks.js.map +0 -1
- package/dist/src/agent/service/reconcile-dreaming-cron.d.ts +0 -6
- package/dist/src/agent/service/reconcile-dreaming-cron.js +0 -84
- package/dist/src/agent/service/reconcile-dreaming-cron.js.map +0 -1
- package/dist/src/agent/tools/cronjob-tool.d.ts +0 -29
- package/dist/src/agent/tools/cronjob-tool.js +0 -274
- package/dist/src/agent/tools/cronjob-tool.js.map +0 -1
- package/dist/src/cli/commands/cron-cli.d.ts +0 -2
- package/dist/src/cli/commands/cron-cli.js +0 -15
- package/dist/src/cli/commands/cron-cli.js.map +0 -1
- package/dist/src/cli/commands/cron.d.ts +0 -4
- package/dist/src/cli/commands/cron.js +0 -188
- package/dist/src/cli/commands/cron.js.map +0 -1
- package/dist/src/cli/commands/doctor/checks/cron-health.js +0 -35
- package/dist/src/cli/commands/doctor/checks/cron-health.js.map +0 -1
- package/dist/src/cron/execution-types.d.ts +0 -42
- package/dist/src/cron/executor.d.ts +0 -67
- package/dist/src/cron/executor.js +0 -669
- package/dist/src/cron/executor.js.map +0 -1
- package/dist/src/cron/index.d.ts +0 -7
- package/dist/src/cron/index.js +0 -7
- package/dist/src/cron/job-content.d.ts +0 -5
- package/dist/src/cron/job-content.js +0 -15
- package/dist/src/cron/job-content.js.map +0 -1
- package/dist/src/cron/run-log-store.d.ts +0 -12
- package/dist/src/cron/run-log-store.js +0 -58
- package/dist/src/cron/run-log-store.js.map +0 -1
- package/dist/src/cron/schedule.d.ts +0 -10
- package/dist/src/cron/schedule.js +0 -85
- package/dist/src/cron/schedule.js.map +0 -1
- package/dist/src/cron/service.d.ts +0 -58
- package/dist/src/cron/service.js +0 -419
- package/dist/src/cron/service.js.map +0 -1
- package/dist/src/cron/types.d.ts +0 -183
- package/dist/src/cron/validation.d.ts +0 -500
- package/dist/src/cron/validation.js +0 -192
- package/dist/src/cron/validation.js.map +0 -1
- package/dist/src/cron/workflow-run-completion.d.ts +0 -23
- package/dist/src/cron/workflow-run-completion.js +0 -72
- package/dist/src/cron/workflow-run-completion.js.map +0 -1
- package/dist/src/extensions/types/phase4.js +0 -1
- package/dist/src/gateway/hono/routes/cron.d.ts +0 -3
- package/dist/src/gateway/hono/routes/cron.js +0 -109
- package/dist/src/gateway/hono/routes/cron.js.map +0 -1
- package/dist/src/storage/sqlite/cron-job-repository.d.ts +0 -6
- package/dist/src/storage/sqlite/cron-job-repository.js +0 -70
- package/dist/src/storage/sqlite/cron-job-repository.js.map +0 -1
- package/dist/src/storage/sqlite/cron-run-repository.d.ts +0 -5
- package/dist/src/storage/sqlite/cron-run-repository.js +0 -96
- package/dist/src/storage/sqlite/cron-run-repository.js.map +0 -1
- /package/dist/src/{cron → automations/domain}/types.js +0 -0
- /package/dist/src/{config/defaults.d.ts → automations/draft/automation-draft.types.js} +0 -0
- /package/dist/src/{config/defaults.js → extensions/types/registration.js} +0 -0
- /package/dist/src/{cron/execution-types.js → migrations/types.js} +0 -0
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import { buildTranscriptOutline } from "../session/transcript-outline.js";
|
|
2
2
|
//#region src/tui/tui-transcript-tree.ts
|
|
3
3
|
const TRANSCRIPT_ROW_ID_RE = /^row-(\d+)$/;
|
|
4
4
|
function transcriptTreeEntryIdToRowNumber(entryId) {
|
|
@@ -7,263 +7,23 @@ function transcriptTreeEntryIdToRowNumber(entryId) {
|
|
|
7
7
|
const row = Number.parseInt(match[1], 10);
|
|
8
8
|
return Number.isFinite(row) && row > 0 ? row : null;
|
|
9
9
|
}
|
|
10
|
-
function asRecord(value) {
|
|
11
|
-
return value && typeof value === "object" ? value : null;
|
|
12
|
-
}
|
|
13
|
-
function stringValue(value) {
|
|
14
|
-
return typeof value === "string" && value.trim() ? value.trim() : void 0;
|
|
15
|
-
}
|
|
16
|
-
function truncateText(text, max = 96) {
|
|
17
|
-
const normalized = text.replace(/\s+/g, " ").trim();
|
|
18
|
-
if (normalized.length <= max) return normalized;
|
|
19
|
-
return `${normalized.slice(0, Math.max(0, max - 3)).trimEnd()}...`;
|
|
20
|
-
}
|
|
21
|
-
function contentPreview(content) {
|
|
22
|
-
return truncateText(contentText(content));
|
|
23
|
-
}
|
|
24
|
-
function contentText(content) {
|
|
25
|
-
if (typeof content === "string") return content;
|
|
26
|
-
if (!Array.isArray(content)) return "";
|
|
27
|
-
const parts = [];
|
|
28
|
-
for (const block of content) {
|
|
29
|
-
if (typeof block === "string") {
|
|
30
|
-
parts.push(block);
|
|
31
|
-
continue;
|
|
32
|
-
}
|
|
33
|
-
const obj = asRecord(block);
|
|
34
|
-
if (!obj) continue;
|
|
35
|
-
const type = stringValue(obj.type);
|
|
36
|
-
if (type === "text") parts.push(stringValue(obj.text) ?? "");
|
|
37
|
-
else if (type === "toolCall") parts.push(formatToolCallPreview(stringValue(obj.name) ?? stringValue(obj.toolName) ?? "tool", asRecord(obj.arguments) ?? asRecord(obj.args) ?? {}));
|
|
38
|
-
else if (type === "image" || type === "image_url") parts.push("[image]");
|
|
39
|
-
else if (type) parts.push(`[${type}]`);
|
|
40
|
-
}
|
|
41
|
-
return parts.filter(Boolean).join(" ");
|
|
42
|
-
}
|
|
43
|
-
function formatToolCallPreview(name, args) {
|
|
44
|
-
const path = stringValue(args.path) ?? stringValue(args.file_path) ?? "";
|
|
45
|
-
if (name === "read" || name === "read_file") {
|
|
46
|
-
const offset = typeof args.offset === "number" ? args.offset : void 0;
|
|
47
|
-
const limit = typeof args.limit === "number" ? args.limit : void 0;
|
|
48
|
-
let display = path;
|
|
49
|
-
if (offset !== void 0 || limit !== void 0) {
|
|
50
|
-
const start = offset ?? 1;
|
|
51
|
-
const end = limit !== void 0 ? start + limit - 1 : void 0;
|
|
52
|
-
display += `:${start}${end !== void 0 ? `-${end}` : ""}`;
|
|
53
|
-
}
|
|
54
|
-
return `[read: ${display || "file"}]`;
|
|
55
|
-
}
|
|
56
|
-
if (name === "write" || name === "write_file") return `[write: ${path || "file"}]`;
|
|
57
|
-
if (name === "edit") return `[edit: ${path || "file"}]`;
|
|
58
|
-
if (name === "bash" || name === "shell") return `[bash: ${truncateText((stringValue(args.command) ?? "").replace(/[\n\t]/g, " ").trim(), 53)}]`;
|
|
59
|
-
if (name === "grep") return `[grep: /${stringValue(args.pattern) ?? ""}/ in ${path || "."}]`;
|
|
60
|
-
if (name === "find") return `[find: ${stringValue(args.pattern) ?? ""} in ${path || "."}]`;
|
|
61
|
-
if (name === "ls") return `[ls: ${path || "."}]`;
|
|
62
|
-
const argsText = JSON.stringify(args);
|
|
63
|
-
return `[${name}: ${argsText.length > 40 ? `${argsText.slice(0, 40)}...` : argsText}]`;
|
|
64
|
-
}
|
|
65
|
-
function collectToolCallDisplays(content) {
|
|
66
|
-
if (!Array.isArray(content)) return [];
|
|
67
|
-
const calls = [];
|
|
68
|
-
for (const block of content) {
|
|
69
|
-
const obj = asRecord(block);
|
|
70
|
-
if (!obj || stringValue(obj.type) !== "toolCall") continue;
|
|
71
|
-
const id = stringValue(obj.id) ?? stringValue(obj.toolCallId) ?? stringValue(obj.tool_call_id) ?? stringValue(obj.tool_call_id$);
|
|
72
|
-
if (!id) continue;
|
|
73
|
-
const name = stringValue(obj.name) ?? stringValue(obj.toolName) ?? "tool";
|
|
74
|
-
calls.push({
|
|
75
|
-
id,
|
|
76
|
-
name,
|
|
77
|
-
preview: formatToolCallPreview(name, asRecord(obj.arguments) ?? asRecord(obj.args) ?? {})
|
|
78
|
-
});
|
|
79
|
-
}
|
|
80
|
-
return calls;
|
|
81
|
-
}
|
|
82
|
-
function rowToolCallId(row) {
|
|
83
|
-
const record = asRecord(row);
|
|
84
|
-
return stringValue(record?.toolCallId) ?? stringValue(record?.tool_call_id) ?? stringValue(record?.tool_call_id$);
|
|
85
|
-
}
|
|
86
|
-
function rowCreatedAt(row) {
|
|
87
|
-
const record = asRecord(row);
|
|
88
|
-
return stringValue(record?.createdAt) ?? stringValue(record?.timestamp);
|
|
89
|
-
}
|
|
90
|
-
function messageLabel(row) {
|
|
91
|
-
const role = stringValue(row.role) ?? "message";
|
|
92
|
-
if (role === "tool" || role === "toolResult") return `tool:${stringValue(row.toolName) ?? "result"}`;
|
|
93
|
-
return role;
|
|
94
|
-
}
|
|
95
|
-
function rowPreview(row) {
|
|
96
|
-
if (isTranscriptContextEntry(row)) return truncateText(row.text ?? JSON.stringify(row.data ?? {}));
|
|
97
|
-
if (isTranscriptLabelEntry(row)) return truncateText(row.label ? `label: ${row.label}` : "label cleared");
|
|
98
|
-
if (isTranscriptMetadataEntry(row)) {
|
|
99
|
-
if (row.type === "model_change") return truncateText([row.provider, row.modelId].filter(Boolean).join("/") || "model changed");
|
|
100
|
-
if (row.type === "thinking_level_change") return truncateText(row.thinkingLevel ? `thinking: ${row.thinkingLevel}` : "thinking changed");
|
|
101
|
-
return truncateText(row.name ? `title: ${row.name}` : "title cleared");
|
|
102
|
-
}
|
|
103
|
-
if (isTranscriptBashExecutionEntry(row)) return truncateText(row.command ?? "bash");
|
|
104
|
-
if (isTranscriptCustomMessageEntry(row)) {
|
|
105
|
-
const record = asRecord(row);
|
|
106
|
-
const customType = stringValue(record?.customType) ?? "custom";
|
|
107
|
-
const preview = contentPreview(record?.content);
|
|
108
|
-
return truncateText(preview ? `${customType}: ${preview}` : customType);
|
|
109
|
-
}
|
|
110
|
-
if (isTranscriptSummaryMessageEntry(row)) {
|
|
111
|
-
if (row.role === "branchSummary") return truncateText(row.summary ?? "branch summary");
|
|
112
|
-
return truncateText(row.summary ?? "compaction checkpoint");
|
|
113
|
-
}
|
|
114
|
-
const record = asRecord(row);
|
|
115
|
-
if (record?.type === "compaction") return truncateText(stringValue(record.summary) ?? "compaction checkpoint");
|
|
116
|
-
const preview = contentPreview(record?.content);
|
|
117
|
-
if (record?.role === "assistant" && !preview) {
|
|
118
|
-
if (record.stopReason === "aborted") return "(aborted)";
|
|
119
|
-
const errorMessage = stringValue(record.errorMessage);
|
|
120
|
-
if (errorMessage) return truncateText(errorMessage, 80);
|
|
121
|
-
}
|
|
122
|
-
return preview;
|
|
123
|
-
}
|
|
124
|
-
function rowContentText(row) {
|
|
125
|
-
if (isTranscriptContextEntry(row)) return row.text;
|
|
126
|
-
if (isTranscriptLabelEntry(row)) return row.label;
|
|
127
|
-
if (isTranscriptMetadataEntry(row)) {
|
|
128
|
-
if (row.type === "model_change") return [row.provider, row.modelId].filter(Boolean).join("/") || void 0;
|
|
129
|
-
if (row.type === "thinking_level_change") return row.thinkingLevel;
|
|
130
|
-
return row.name;
|
|
131
|
-
}
|
|
132
|
-
if (isTranscriptBashExecutionEntry(row)) return row.command;
|
|
133
|
-
if (isTranscriptCustomMessageEntry(row)) {
|
|
134
|
-
const record = asRecord(row);
|
|
135
|
-
return contentText(record?.content).trim() || stringValue(record?.customType);
|
|
136
|
-
}
|
|
137
|
-
if (isTranscriptSummaryMessageEntry(row)) return row.summary;
|
|
138
|
-
const record = asRecord(row);
|
|
139
|
-
if (record?.type === "compaction") return stringValue(record.summary);
|
|
140
|
-
const text = contentText(record?.content).trim();
|
|
141
|
-
return text ? text : void 0;
|
|
142
|
-
}
|
|
143
10
|
function buildTuiTranscriptTree(rows) {
|
|
144
|
-
|
|
145
|
-
|
|
146
|
-
|
|
147
|
-
|
|
148
|
-
|
|
149
|
-
|
|
150
|
-
|
|
151
|
-
|
|
152
|
-
|
|
153
|
-
|
|
154
|
-
|
|
155
|
-
|
|
156
|
-
|
|
157
|
-
|
|
158
|
-
|
|
159
|
-
|
|
160
|
-
parentId = currentTurnId;
|
|
161
|
-
depth = currentTurnId ? 1 : 0;
|
|
162
|
-
} else if (asRecord(row)?.type === "compaction") {
|
|
163
|
-
label = "compaction";
|
|
164
|
-
parentId = currentTurnId;
|
|
165
|
-
depth = currentTurnId ? 1 : 0;
|
|
166
|
-
} else if (isTranscriptLabelEntry(row)) {
|
|
167
|
-
label = row.label ? `label:${row.label}` : "label:cleared";
|
|
168
|
-
parentId = currentTurnId;
|
|
169
|
-
depth = currentTurnId ? 1 : 0;
|
|
170
|
-
if (row.targetId) labelChanges.push({
|
|
171
|
-
targetId: row.targetId,
|
|
172
|
-
label: row.label,
|
|
173
|
-
timestamp: typeof row.timestamp === "string" ? row.timestamp : void 0
|
|
174
|
-
});
|
|
175
|
-
} else if (isTranscriptMetadataEntry(row)) {
|
|
176
|
-
label = row.type;
|
|
177
|
-
parentId = currentTurnId;
|
|
178
|
-
depth = currentTurnId ? 1 : 0;
|
|
179
|
-
} else if (isTranscriptBashExecutionEntry(row)) {
|
|
180
|
-
label = "bashExecution";
|
|
181
|
-
parentId = currentTurnId;
|
|
182
|
-
depth = currentTurnId ? 1 : 0;
|
|
183
|
-
} else if (isTranscriptCustomMessageEntry(row)) {
|
|
184
|
-
label = `custom:${stringValue(record?.customType) ?? "message"}`;
|
|
185
|
-
parentId = currentTurnId;
|
|
186
|
-
depth = currentTurnId ? 1 : 0;
|
|
187
|
-
} else if (isTranscriptSummaryMessageEntry(row)) {
|
|
188
|
-
label = row.role === "branchSummary" ? "branch_summary" : "compaction";
|
|
189
|
-
parentId = currentTurnId;
|
|
190
|
-
depth = currentTurnId ? 1 : 0;
|
|
191
|
-
} else {
|
|
192
|
-
const message = row;
|
|
193
|
-
role = stringValue(message.role);
|
|
194
|
-
label = messageLabel(message);
|
|
195
|
-
if (role === "tool" || role === "toolResult") {
|
|
196
|
-
const toolCallId = rowToolCallId(row);
|
|
197
|
-
const toolCall = toolCallId ? toolCallsById.get(toolCallId) : void 0;
|
|
198
|
-
if (toolCall) {
|
|
199
|
-
label = `tool:${toolCall.name}`;
|
|
200
|
-
toolCallPreview = toolCall.preview;
|
|
201
|
-
}
|
|
202
|
-
}
|
|
203
|
-
if (role === "user" || !currentTurnId) {
|
|
204
|
-
turn += 1;
|
|
205
|
-
currentTurnId = id;
|
|
206
|
-
depth = 0;
|
|
207
|
-
} else {
|
|
208
|
-
parentId = currentTurnId;
|
|
209
|
-
depth = 1;
|
|
210
|
-
}
|
|
211
|
-
}
|
|
212
|
-
const entry = {
|
|
213
|
-
id,
|
|
214
|
-
depth,
|
|
215
|
-
label,
|
|
216
|
-
turn,
|
|
217
|
-
preview: rowPreview(row),
|
|
218
|
-
contentText: rowContentText(row),
|
|
219
|
-
createdAt: rowCreatedAt(row)
|
|
220
|
-
};
|
|
221
|
-
if (parentId) entry.parentId = parentId;
|
|
222
|
-
if (role) entry.role = role;
|
|
223
|
-
if (toolCallPreview) entry.toolCallPreview = toolCallPreview;
|
|
224
|
-
entries.push(entry);
|
|
225
|
-
byOriginalId.set(id, entry);
|
|
226
|
-
const originalId = stringValue(record?.id);
|
|
227
|
-
if (originalId) byOriginalId.set(originalId, entry);
|
|
228
|
-
for (const toolCall of collectToolCallDisplays(record?.content)) toolCallsById.set(toolCall.id, {
|
|
229
|
-
name: toolCall.name,
|
|
230
|
-
preview: toolCall.preview
|
|
231
|
-
});
|
|
232
|
-
});
|
|
233
|
-
for (const change of labelChanges) {
|
|
234
|
-
const target = byOriginalId.get(change.targetId);
|
|
235
|
-
if (!target) continue;
|
|
236
|
-
if (change.label?.trim()) {
|
|
237
|
-
target.userLabel = change.label.trim();
|
|
238
|
-
target.labelTimestamp = change.timestamp;
|
|
239
|
-
} else {
|
|
240
|
-
delete target.userLabel;
|
|
241
|
-
delete target.labelTimestamp;
|
|
242
|
-
}
|
|
243
|
-
}
|
|
244
|
-
markCurrentTranscriptPath(entries);
|
|
245
|
-
return entries;
|
|
246
|
-
}
|
|
247
|
-
function markCurrentTranscriptPath(entries) {
|
|
248
|
-
const currentLeaf = [...entries].reverse().find(isCurrentLeafCandidate) ?? entries.at(-1);
|
|
249
|
-
if (!currentLeaf) return;
|
|
250
|
-
const byId = new Map(entries.map((entry) => [entry.id, entry]));
|
|
251
|
-
currentLeaf.isCurrentLeaf = true;
|
|
252
|
-
let currentId = currentLeaf.id;
|
|
253
|
-
while (currentId) {
|
|
254
|
-
const entry = byId.get(currentId);
|
|
255
|
-
if (!entry) break;
|
|
256
|
-
entry.isOnActivePath = true;
|
|
257
|
-
currentId = entry.parentId;
|
|
258
|
-
}
|
|
259
|
-
}
|
|
260
|
-
function isCurrentLeafCandidate(entry) {
|
|
261
|
-
if (entry.label === "context") return false;
|
|
262
|
-
if (entry.label === "model_change") return false;
|
|
263
|
-
if (entry.label === "thinking_level_change") return false;
|
|
264
|
-
if (entry.label === "session_info") return false;
|
|
265
|
-
if (entry.label.startsWith("label:")) return false;
|
|
266
|
-
return true;
|
|
11
|
+
return buildTranscriptOutline(rows).map((entry) => ({
|
|
12
|
+
id: entry.id,
|
|
13
|
+
...entry.parentId ? { parentId: entry.parentId } : {},
|
|
14
|
+
depth: entry.depth,
|
|
15
|
+
label: entry.label,
|
|
16
|
+
...entry.role ? { role: entry.role } : {},
|
|
17
|
+
...entry.userLabel ? { userLabel: entry.userLabel } : {},
|
|
18
|
+
...entry.labelTimestamp ? { labelTimestamp: entry.labelTimestamp } : {},
|
|
19
|
+
turn: entry.turn,
|
|
20
|
+
...entry.preview ? { preview: entry.preview } : {},
|
|
21
|
+
...entry.contentText ? { contentText: entry.contentText } : {},
|
|
22
|
+
...entry.toolCallPreview ? { toolCallPreview: entry.toolCallPreview } : {},
|
|
23
|
+
...entry.createdAt ? { createdAt: entry.createdAt } : {},
|
|
24
|
+
...entry.isOnActivePath ? { isOnActivePath: entry.isOnActivePath } : {},
|
|
25
|
+
...entry.isCurrentLeaf ? { isCurrentLeaf: entry.isCurrentLeaf } : {}
|
|
26
|
+
}));
|
|
267
27
|
}
|
|
268
28
|
function filterTuiTranscriptTreeEntries(entries, mode) {
|
|
269
29
|
if (mode === "all") return entries;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"tui-transcript-tree.js","names":[],"sources":["../../../src/tui/tui-transcript-tree.ts"],"sourcesContent":["import type { AgentMessage } from '@earendil-works/pi-agent-core';\n\nimport {\n isTranscriptBashExecutionEntry,\n isTranscriptContextEntry,\n isTranscriptCustomMessageEntry,\n isTranscriptLabelEntry,\n isTranscriptMetadataEntry,\n isTranscriptSummaryMessageEntry,\n type TranscriptStoredRow,\n} from '../session/session-context-for-llm.js';\nimport type { TuiTranscriptTreeEntry } from './tui-backend.js';\nimport type { TreeFilterMode } from './tui-settings.js';\n\nconst TRANSCRIPT_ROW_ID_RE = /^row-(\\d+)$/;\n\nexport function transcriptTreeEntryIdToRowNumber(entryId: string): number | null {\n const match = TRANSCRIPT_ROW_ID_RE.exec(entryId.trim());\n if (!match) return null;\n const row = Number.parseInt(match[1], 10);\n return Number.isFinite(row) && row > 0 ? row : null;\n}\n\nfunction asRecord(value: unknown): Record<string, unknown> | null {\n return value && typeof value === 'object' ? (value as Record<string, unknown>) : null;\n}\n\nfunction stringValue(value: unknown): string | undefined {\n return typeof value === 'string' && value.trim() ? value.trim() : undefined;\n}\n\nfunction truncateText(text: string, max = 96): string {\n const normalized = text.replace(/\\s+/g, ' ').trim();\n if (normalized.length <= max) return normalized;\n return `${normalized.slice(0, Math.max(0, max - 3)).trimEnd()}...`;\n}\n\nfunction contentPreview(content: unknown): string {\n return truncateText(contentText(content));\n}\n\nfunction contentText(content: unknown): string {\n if (typeof content === 'string') {\n return content;\n }\n if (!Array.isArray(content)) {\n return '';\n }\n const parts: string[] = [];\n for (const block of content) {\n if (typeof block === 'string') {\n parts.push(block);\n continue;\n }\n const obj = asRecord(block);\n if (!obj) continue;\n const type = stringValue(obj.type);\n if (type === 'text') {\n parts.push(stringValue(obj.text) ?? '');\n } else if (type === 'toolCall') {\n parts.push(formatToolCallPreview(\n stringValue(obj.name) ?? stringValue(obj.toolName) ?? 'tool',\n asRecord(obj.arguments) ?? asRecord(obj.args) ?? {},\n ));\n } else if (type === 'image' || type === 'image_url') {\n parts.push('[image]');\n } else if (type) {\n parts.push(`[${type}]`);\n }\n }\n return parts.filter(Boolean).join(' ');\n}\n\nfunction formatToolCallPreview(name: string, args: Record<string, unknown>): string {\n const path = stringValue(args.path) ?? stringValue(args.file_path) ?? '';\n if (name === 'read' || name === 'read_file') {\n const offset = typeof args.offset === 'number' ? args.offset : undefined;\n const limit = typeof args.limit === 'number' ? args.limit : undefined;\n let display = path;\n if (offset !== undefined || limit !== undefined) {\n const start = offset ?? 1;\n const end = limit !== undefined ? start + limit - 1 : undefined;\n display += `:${start}${end !== undefined ? `-${end}` : ''}`;\n }\n return `[read: ${display || 'file'}]`;\n }\n if (name === 'write' || name === 'write_file') return `[write: ${path || 'file'}]`;\n if (name === 'edit') return `[edit: ${path || 'file'}]`;\n if (name === 'bash' || name === 'shell') {\n const rawCommand = stringValue(args.command) ?? '';\n const command = rawCommand.replace(/[\\n\\t]/g, ' ').trim();\n return `[bash: ${truncateText(command, 53)}]`;\n }\n if (name === 'grep') {\n const pattern = stringValue(args.pattern) ?? '';\n return `[grep: /${pattern}/ in ${path || '.'}]`;\n }\n if (name === 'find') {\n const pattern = stringValue(args.pattern) ?? '';\n return `[find: ${pattern} in ${path || '.'}]`;\n }\n if (name === 'ls') return `[ls: ${path || '.'}]`;\n const argsText = JSON.stringify(args);\n const truncatedArgs = argsText.length > 40 ? `${argsText.slice(0, 40)}...` : argsText;\n return `[${name}: ${truncatedArgs}]`;\n}\n\ninterface ToolCallDisplay {\n name: string;\n preview: string;\n}\n\nfunction collectToolCallDisplays(content: unknown): Array<{ id: string } & ToolCallDisplay> {\n if (!Array.isArray(content)) return [];\n const calls: Array<{ id: string } & ToolCallDisplay> = [];\n for (const block of content) {\n const obj = asRecord(block);\n if (!obj || stringValue(obj.type) !== 'toolCall') continue;\n const id =\n stringValue(obj.id) ??\n stringValue(obj.toolCallId) ??\n stringValue(obj.tool_call_id) ??\n stringValue(obj.tool_call_id$);\n if (!id) continue;\n const name = stringValue(obj.name) ?? stringValue(obj.toolName) ?? 'tool';\n calls.push({\n id,\n name,\n preview: formatToolCallPreview(name, asRecord(obj.arguments) ?? asRecord(obj.args) ?? {}),\n });\n }\n return calls;\n}\n\nfunction rowToolCallId(row: unknown): string | undefined {\n const record = asRecord(row);\n return (\n stringValue(record?.toolCallId) ??\n stringValue(record?.tool_call_id) ??\n stringValue(record?.tool_call_id$)\n );\n}\n\nfunction rowCreatedAt(row: TranscriptStoredRow): string | undefined {\n const record = asRecord(row);\n return stringValue(record?.createdAt) ?? stringValue(record?.timestamp);\n}\n\nfunction messageLabel(row: AgentMessage): string {\n const role = stringValue((row as { role?: unknown }).role) ?? 'message';\n if (role === 'tool' || role === 'toolResult') {\n return `tool:${stringValue((row as { toolName?: unknown }).toolName) ?? 'result'}`;\n }\n return role;\n}\n\nfunction rowPreview(row: TranscriptStoredRow): string {\n if (isTranscriptContextEntry(row)) {\n return truncateText(row.text ?? JSON.stringify(row.data ?? {}));\n }\n if (isTranscriptLabelEntry(row)) {\n return truncateText(row.label ? `label: ${row.label}` : 'label cleared');\n }\n if (isTranscriptMetadataEntry(row)) {\n if (row.type === 'model_change') {\n return truncateText([row.provider, row.modelId].filter(Boolean).join('/') || 'model changed');\n }\n if (row.type === 'thinking_level_change') {\n return truncateText(row.thinkingLevel ? `thinking: ${row.thinkingLevel}` : 'thinking changed');\n }\n return truncateText(row.name ? `title: ${row.name}` : 'title cleared');\n }\n if (isTranscriptBashExecutionEntry(row)) {\n return truncateText(row.command ?? 'bash');\n }\n if (isTranscriptCustomMessageEntry(row)) {\n const record = asRecord(row);\n const customType = stringValue(record?.customType) ?? 'custom';\n const preview = contentPreview(record?.content);\n return truncateText(preview ? `${customType}: ${preview}` : customType);\n }\n if (isTranscriptSummaryMessageEntry(row)) {\n if (row.role === 'branchSummary') {\n return truncateText(row.summary ?? 'branch summary');\n }\n return truncateText(row.summary ?? 'compaction checkpoint');\n }\n const record = asRecord(row);\n if (record?.type === 'compaction') {\n return truncateText(stringValue(record.summary) ?? 'compaction checkpoint');\n }\n const preview = contentPreview(record?.content);\n if (record?.role === 'assistant' && !preview) {\n if (record.stopReason === 'aborted') {\n return '(aborted)';\n }\n const errorMessage = stringValue(record.errorMessage);\n if (errorMessage) {\n return truncateText(errorMessage, 80);\n }\n }\n return preview;\n}\n\nfunction rowContentText(row: TranscriptStoredRow): string | undefined {\n if (isTranscriptContextEntry(row)) {\n return row.text;\n }\n if (isTranscriptLabelEntry(row)) {\n return row.label;\n }\n if (isTranscriptMetadataEntry(row)) {\n if (row.type === 'model_change') {\n return [row.provider, row.modelId].filter(Boolean).join('/') || undefined;\n }\n if (row.type === 'thinking_level_change') {\n return row.thinkingLevel;\n }\n return row.name;\n }\n if (isTranscriptBashExecutionEntry(row)) {\n return row.command;\n }\n if (isTranscriptCustomMessageEntry(row)) {\n const record = asRecord(row);\n return contentText(record?.content).trim() || stringValue(record?.customType);\n }\n if (isTranscriptSummaryMessageEntry(row)) {\n return row.summary;\n }\n const record = asRecord(row);\n if (record?.type === 'compaction') {\n return stringValue(record.summary);\n }\n const text = contentText(record?.content).trim();\n return text ? text : undefined;\n}\n\nexport function buildTuiTranscriptTree(rows: TranscriptStoredRow[]): TuiTranscriptTreeEntry[] {\n const entries: TuiTranscriptTreeEntry[] = [];\n const byOriginalId = new Map<string, TuiTranscriptTreeEntry>();\n const toolCallsById = new Map<string, ToolCallDisplay>();\n const labelChanges: Array<{ targetId: string; label?: string; timestamp?: string }> = [];\n let currentTurnId: string | undefined;\n let turn = 0;\n\n rows.forEach((row, index) => {\n const id = `row-${index + 1}`;\n const record = asRecord(row);\n let parentId: string | undefined;\n let depth = 0;\n let label = 'entry';\n let role: string | undefined;\n let toolCallPreview: string | undefined;\n\n if (isTranscriptContextEntry(row)) {\n label = 'context';\n parentId = currentTurnId;\n depth = currentTurnId ? 1 : 0;\n } else if ((asRecord(row)?.type) === 'compaction') {\n label = 'compaction';\n parentId = currentTurnId;\n depth = currentTurnId ? 1 : 0;\n } else if (isTranscriptLabelEntry(row)) {\n label = row.label ? `label:${row.label}` : 'label:cleared';\n parentId = currentTurnId;\n depth = currentTurnId ? 1 : 0;\n if (row.targetId) {\n labelChanges.push({\n targetId: row.targetId,\n label: row.label,\n timestamp: typeof row.timestamp === 'string' ? row.timestamp : undefined,\n });\n }\n } else if (isTranscriptMetadataEntry(row)) {\n label = row.type;\n parentId = currentTurnId;\n depth = currentTurnId ? 1 : 0;\n } else if (isTranscriptBashExecutionEntry(row)) {\n label = 'bashExecution';\n parentId = currentTurnId;\n depth = currentTurnId ? 1 : 0;\n } else if (isTranscriptCustomMessageEntry(row)) {\n label = `custom:${stringValue(record?.customType) ?? 'message'}`;\n parentId = currentTurnId;\n depth = currentTurnId ? 1 : 0;\n } else if (isTranscriptSummaryMessageEntry(row)) {\n label = row.role === 'branchSummary' ? 'branch_summary' : 'compaction';\n parentId = currentTurnId;\n depth = currentTurnId ? 1 : 0;\n } else {\n const message = row as AgentMessage;\n role = stringValue((message as { role?: unknown }).role);\n label = messageLabel(message);\n if (role === 'tool' || role === 'toolResult') {\n const toolCallId = rowToolCallId(row);\n const toolCall = toolCallId ? toolCallsById.get(toolCallId) : undefined;\n if (toolCall) {\n label = `tool:${toolCall.name}`;\n toolCallPreview = toolCall.preview;\n }\n }\n if (role === 'user' || !currentTurnId) {\n turn += 1;\n currentTurnId = id;\n depth = 0;\n } else {\n parentId = currentTurnId;\n depth = 1;\n }\n }\n\n const entry: TuiTranscriptTreeEntry = {\n id,\n depth,\n label,\n turn,\n preview: rowPreview(row),\n contentText: rowContentText(row),\n createdAt: rowCreatedAt(row),\n };\n if (parentId) entry.parentId = parentId;\n if (role) entry.role = role;\n if (toolCallPreview) entry.toolCallPreview = toolCallPreview;\n entries.push(entry);\n\n byOriginalId.set(id, entry);\n const originalId = stringValue(record?.id);\n if (originalId) {\n byOriginalId.set(originalId, entry);\n }\n\n for (const toolCall of collectToolCallDisplays(record?.content)) {\n toolCallsById.set(toolCall.id, { name: toolCall.name, preview: toolCall.preview });\n }\n });\n\n for (const change of labelChanges) {\n const target = byOriginalId.get(change.targetId);\n if (!target) continue;\n if (change.label?.trim()) {\n target.userLabel = change.label.trim();\n target.labelTimestamp = change.timestamp;\n } else {\n delete target.userLabel;\n delete target.labelTimestamp;\n }\n }\n\n markCurrentTranscriptPath(entries);\n\n return entries;\n}\n\nfunction markCurrentTranscriptPath(entries: TuiTranscriptTreeEntry[]): void {\n const currentLeaf = [...entries].reverse().find(isCurrentLeafCandidate) ?? entries.at(-1);\n if (!currentLeaf) return;\n\n const byId = new Map(entries.map((entry) => [entry.id, entry]));\n currentLeaf.isCurrentLeaf = true;\n let currentId: string | undefined = currentLeaf.id;\n while (currentId) {\n const entry = byId.get(currentId);\n if (!entry) break;\n entry.isOnActivePath = true;\n currentId = entry.parentId;\n }\n}\n\nfunction isCurrentLeafCandidate(entry: TuiTranscriptTreeEntry): boolean {\n if (entry.label === 'context') return false;\n if (entry.label === 'model_change') return false;\n if (entry.label === 'thinking_level_change') return false;\n if (entry.label === 'session_info') return false;\n if (entry.label.startsWith('label:')) return false;\n return true;\n}\n\nexport function filterTuiTranscriptTreeEntries(\n entries: TuiTranscriptTreeEntry[],\n mode: TreeFilterMode,\n): TuiTranscriptTreeEntry[] {\n if (mode === 'all') return entries;\n return entries.filter((entry) => {\n if (!entry.isCurrentLeaf && isEmptyAssistantTreeEntry(entry)) {\n return false;\n }\n if (mode === 'user-only') {\n return entry.role === 'user';\n }\n if (mode === 'labeled-only') {\n return Boolean(entry.userLabel);\n }\n const isTool = entry.role === 'tool' || entry.role === 'toolResult' || entry.label.startsWith('tool:');\n const isBookkeeping =\n entry.label === 'context' ||\n entry.label === 'model_change' ||\n entry.label === 'thinking_level_change' ||\n entry.label === 'session_info' ||\n entry.label.startsWith('custom:') ||\n entry.label.startsWith('label:');\n if (mode === 'no-tools') {\n return !isTool && !isBookkeeping;\n }\n return !isBookkeeping;\n });\n}\n\nfunction isEmptyAssistantTreeEntry(entry: TuiTranscriptTreeEntry): boolean {\n if (entry.role !== 'assistant') return false;\n const preview = entry.preview?.trim();\n if (!preview) return true;\n return /^(?:\\[[^\\]]+\\]\\s*)+$/.test(preview);\n}\n\nexport function formatTuiTranscriptTreeEntryDisplayText(entry: TuiTranscriptTreeEntry): string {\n const preview = entry.preview?.trim();\n const toolCallPreview = entry.toolCallPreview?.trim();\n const role = entry.role?.trim() || entry.label;\n if (!preview) {\n if (role === 'assistant') return 'assistant: (no content)';\n if (role === 'tool' || role === 'toolResult' || entry.label.startsWith('tool:')) {\n return `[${formatTuiTranscriptToolDisplayName(entry.label)}]`;\n }\n return entry.label;\n }\n if (role === 'user' || role === 'assistant') {\n return `${role}: ${preview}`;\n }\n if (role === 'bashExecution' || entry.label === 'bashExecution') {\n return `[bash]: ${preview}`;\n }\n if (role === 'tool' || role === 'toolResult' || entry.label.startsWith('tool:')) {\n if (toolCallPreview) return toolCallPreview;\n return `[${formatTuiTranscriptToolDisplayName(entry.label)}]`;\n }\n if (entry.label === 'model_change') {\n const model = preview.includes('/') ? (preview.split('/').pop() ?? preview) : preview;\n return `[model: ${model}]`;\n }\n if (entry.label === 'thinking_level_change') {\n return `[${preview}]`;\n }\n if (entry.label === 'session_info') {\n return `[${preview}]`;\n }\n if (entry.label.startsWith('label:')) {\n return `[${preview}]`;\n }\n if (entry.label === 'compaction') {\n return `[compaction: ${preview}]`;\n }\n if (entry.label === 'branch_summary') {\n return `[branch summary]: ${preview}`;\n }\n if (entry.label.startsWith('custom:')) {\n return `[${entry.label}]${preview ? `: ${preview}` : ''}`;\n }\n return `${entry.label}: ${preview}`;\n}\n\nfunction formatTuiTranscriptToolDisplayName(label: string): string {\n return label.startsWith('tool:') ? label.slice('tool:'.length) || 'tool' : label;\n}\n"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"tui-transcript-tree.js","names":[],"sources":["../../../src/tui/tui-transcript-tree.ts"],"sourcesContent":["import type { TranscriptStoredRow } from '../session/session-context-for-llm.js';\nimport { buildTranscriptOutline } from '../session/transcript-outline.js';\nimport type { TuiTranscriptTreeEntry } from './tui-backend.js';\nimport type { TreeFilterMode } from './tui-settings.js';\n\nconst TRANSCRIPT_ROW_ID_RE = /^row-(\\d+)$/;\n\nexport function transcriptTreeEntryIdToRowNumber(entryId: string): number | null {\n const match = TRANSCRIPT_ROW_ID_RE.exec(entryId.trim());\n if (!match) return null;\n const row = Number.parseInt(match[1], 10);\n return Number.isFinite(row) && row > 0 ? row : null;\n}\n\nexport function buildTuiTranscriptTree(rows: TranscriptStoredRow[]): TuiTranscriptTreeEntry[] {\n return buildTranscriptOutline(rows).map((entry) => ({\n id: entry.id,\n ...(entry.parentId ? { parentId: entry.parentId } : {}),\n depth: entry.depth,\n label: entry.label,\n ...(entry.role ? { role: entry.role } : {}),\n ...(entry.userLabel ? { userLabel: entry.userLabel } : {}),\n ...(entry.labelTimestamp ? { labelTimestamp: entry.labelTimestamp } : {}),\n turn: entry.turn,\n ...(entry.preview ? { preview: entry.preview } : {}),\n ...(entry.contentText ? { contentText: entry.contentText } : {}),\n ...(entry.toolCallPreview ? { toolCallPreview: entry.toolCallPreview } : {}),\n ...(entry.createdAt ? { createdAt: entry.createdAt } : {}),\n ...(entry.isOnActivePath ? { isOnActivePath: entry.isOnActivePath } : {}),\n ...(entry.isCurrentLeaf ? { isCurrentLeaf: entry.isCurrentLeaf } : {}),\n }));\n}\n\nexport function filterTuiTranscriptTreeEntries(\n entries: TuiTranscriptTreeEntry[],\n mode: TreeFilterMode,\n): TuiTranscriptTreeEntry[] {\n if (mode === 'all') return entries;\n return entries.filter((entry) => {\n if (!entry.isCurrentLeaf && isEmptyAssistantTreeEntry(entry)) {\n return false;\n }\n if (mode === 'user-only') {\n return entry.role === 'user';\n }\n if (mode === 'labeled-only') {\n return Boolean(entry.userLabel);\n }\n const isTool = entry.role === 'tool' || entry.role === 'toolResult' || entry.label.startsWith('tool:');\n const isBookkeeping =\n entry.label === 'context' ||\n entry.label === 'model_change' ||\n entry.label === 'thinking_level_change' ||\n entry.label === 'session_info' ||\n entry.label.startsWith('custom:') ||\n entry.label.startsWith('label:');\n if (mode === 'no-tools') {\n return !isTool && !isBookkeeping;\n }\n return !isBookkeeping;\n });\n}\n\nfunction isEmptyAssistantTreeEntry(entry: TuiTranscriptTreeEntry): boolean {\n if (entry.role !== 'assistant') return false;\n const preview = entry.preview?.trim();\n if (!preview) return true;\n return /^(?:\\[[^\\]]+\\]\\s*)+$/.test(preview);\n}\n\nexport function formatTuiTranscriptTreeEntryDisplayText(entry: TuiTranscriptTreeEntry): string {\n const preview = entry.preview?.trim();\n const toolCallPreview = entry.toolCallPreview?.trim();\n const role = entry.role?.trim() || entry.label;\n if (!preview) {\n if (role === 'assistant') return 'assistant: (no content)';\n if (role === 'tool' || role === 'toolResult' || entry.label.startsWith('tool:')) {\n return `[${formatTuiTranscriptToolDisplayName(entry.label)}]`;\n }\n return entry.label;\n }\n if (role === 'user' || role === 'assistant') {\n return `${role}: ${preview}`;\n }\n if (role === 'bashExecution' || entry.label === 'bashExecution') {\n return `[bash]: ${preview}`;\n }\n if (role === 'tool' || role === 'toolResult' || entry.label.startsWith('tool:')) {\n if (toolCallPreview) return toolCallPreview;\n return `[${formatTuiTranscriptToolDisplayName(entry.label)}]`;\n }\n if (entry.label === 'model_change') {\n const model = preview.includes('/') ? (preview.split('/').pop() ?? preview) : preview;\n return `[model: ${model}]`;\n }\n if (entry.label === 'thinking_level_change') {\n return `[${preview}]`;\n }\n if (entry.label === 'session_info') {\n return `[${preview}]`;\n }\n if (entry.label.startsWith('label:')) {\n return `[${preview}]`;\n }\n if (entry.label === 'compaction') {\n return `[compaction: ${preview}]`;\n }\n if (entry.label === 'branch_summary') {\n return `[branch summary]: ${preview}`;\n }\n if (entry.label.startsWith('custom:')) {\n return `[${entry.label}]${preview ? `: ${preview}` : ''}`;\n }\n return `${entry.label}: ${preview}`;\n}\n\nfunction formatTuiTranscriptToolDisplayName(label: string): string {\n return label.startsWith('tool:') ? label.slice('tool:'.length) || 'tool' : label;\n}\n"],"mappings":"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"}
|
|
@@ -6,6 +6,8 @@ export interface TuiOptions {
|
|
|
6
6
|
token?: string;
|
|
7
7
|
/** Session key to resume. */
|
|
8
8
|
session?: string;
|
|
9
|
+
/** Agent id for a fresh TUI session. */
|
|
10
|
+
agentId?: string;
|
|
9
11
|
/** Thinking level override. */
|
|
10
12
|
thinking?: string;
|
|
11
13
|
/** Single message to send on start, then stay open. */
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"tui-types.js","names":[],"sources":["../../../src/tui/tui-types.ts"],"sourcesContent":["/** TUI configuration options passed from CLI. */\nexport interface TuiOptions {\n /** Connect to a running gateway instead of embedded mode. */\n url?: string;\n /** Gateway bearer token. */\n token?: string;\n /** Session key to resume. */\n session?: string;\n /** Thinking level override. */\n thinking?: string;\n /** Single message to send on start, then stay open. */\n message?: string;\n /** Workspace directory for the new TUI session. */\n workdir?: string;\n /** Use the launch directory as the new TUI session workspace when no workdir is set. */\n useStartupCwd?: boolean;\n /** Run in embedded (local) mode — no gateway required. */\n local?: boolean;\n /** Theme id: `auto`, `dark`, `light`, or custom name under `~/.xopc/themes/`. */\n theme?: string;\n}\n\nexport type TuiExitReason = 'exit' | 'signal';\n\nexport interface TuiResult {\n exitReason: TuiExitReason;\n}\n\n/** Parsed SSE event from the stream. */\nexport interface ParsedSSEEvent {\n event: string;\n data: string;\n id?: string;\n}\n\n/** Activity status for the TUI status bar. */\nexport type ActivityStatus =\n | 'idle'\n | 'sending'\n | 'waiting'\n | 'streaming'\n | 'running'\n | 'compacting'\n | 'stalled'\n | 'recovering'\n | 'aborting';\n\nexport type TuiEventSource = 'agent-response' | 'agent-resume' | 'broadcast' | 'embedded' | 'unknown';\n\nexport type TuiRunPhase =\n | 'idle'\n | 'sending'\n | 'waiting'\n | 'streaming'\n | 'tool'\n | 'progress'\n | 'stalled'\n | 'recovering'\n | 'aborting';\n\nexport interface TuiRunStatus {\n phase: TuiRunPhase;\n runId: string | null;\n directStreamRunId: string | null;\n lastCompletedRunId: string | null;\n source: TuiEventSource;\n lastEvent: string | null;\n lastActivityAt: number | null;\n stalledAt: number | null;\n recoveredAt: number | null;\n}\n\n/** Session metadata shown in the TUI footer. */\nexport interface SessionInfo {\n model?: string;\n modelProvider?: string;\n thinkingLevel?: string;\n reasoningLevel?: string;\n verboseLevel?: string;\n contextTokens?: number | null;\n totalTokens?: number | null;\n contextWindow?: number | null;\n contextUsagePercent?: number | null;\n displayName?: string;\n effectiveWorkspacePath?: string;\n workingDirectoryLocked?: boolean;\n}\n\n/** Mutable state bag for the TUI runtime. */\nexport interface TuiState {\n currentSessionKey: string;\n activeRunId: string | null;\n isConnected: boolean;\n activityStatus: ActivityStatus;\n runStatus: TuiRunStatus;\n connectionStatus: string;\n sessionInfo: SessionInfo;\n autoMessageSent: boolean;\n historyLoaded: boolean;\n toolsExpanded: boolean;\n showThinking: boolean;\n /** Last Ctrl+C timestamp for double-press exit (see `resolveCtrlCAction`). */\n lastCtrlCAt: number;\n exitRequested: boolean;\n /** Queued via Alt+Enter while a run is active; flushed FIFO when the run ends. */\n messageFollowUpQueue: string[];\n /** Queued Enter-while-busy steering messages after the first in-flight steer. */\n steeringQueue: string[];\n /** Ctrl+P cycle filter; `null` = all models from catalog. */\n scopedModelRefs: string[] | null;\n /** Last Escape timestamp for double-press actions. */\n lastEscapeAt: number;\n /** Human-readable progress from SSE `progress` events. */\n progressMessage: string | null;\n /** Session compaction in flight (local /compact handler). */\n isCompacting: boolean;\n /** Messages queued while compacting. */\n compactionQueue: string[];\n}\n\nexport function createInitialState(sessionKey: string): TuiState {\n return {\n currentSessionKey: sessionKey,\n activeRunId: null,\n isConnected: false,\n activityStatus: 'idle',\n runStatus: {\n phase: 'idle',\n runId: null,\n directStreamRunId: null,\n lastCompletedRunId: null,\n source: 'unknown',\n lastEvent: null,\n lastActivityAt: null,\n stalledAt: null,\n recoveredAt: null,\n },\n connectionStatus: 'connecting',\n sessionInfo: {},\n autoMessageSent: false,\n historyLoaded: false,\n toolsExpanded: false,\n showThinking: false,\n lastCtrlCAt: 0,\n exitRequested: false,\n messageFollowUpQueue: [],\n steeringQueue: [],\n scopedModelRefs: null,\n lastEscapeAt: 0,\n progressMessage: null,\n isCompacting: false,\n compactionQueue: [],\n };\n}\n"],"mappings":";
|
|
1
|
+
{"version":3,"file":"tui-types.js","names":[],"sources":["../../../src/tui/tui-types.ts"],"sourcesContent":["/** TUI configuration options passed from CLI. */\nexport interface TuiOptions {\n /** Connect to a running gateway instead of embedded mode. */\n url?: string;\n /** Gateway bearer token. */\n token?: string;\n /** Session key to resume. */\n session?: string;\n /** Agent id for a fresh TUI session. */\n agentId?: string;\n /** Thinking level override. */\n thinking?: string;\n /** Single message to send on start, then stay open. */\n message?: string;\n /** Workspace directory for the new TUI session. */\n workdir?: string;\n /** Use the launch directory as the new TUI session workspace when no workdir is set. */\n useStartupCwd?: boolean;\n /** Run in embedded (local) mode — no gateway required. */\n local?: boolean;\n /** Theme id: `auto`, `dark`, `light`, or custom name under `~/.xopc/themes/`. */\n theme?: string;\n}\n\nexport type TuiExitReason = 'exit' | 'signal';\n\nexport interface TuiResult {\n exitReason: TuiExitReason;\n}\n\n/** Parsed SSE event from the stream. */\nexport interface ParsedSSEEvent {\n event: string;\n data: string;\n id?: string;\n}\n\n/** Activity status for the TUI status bar. */\nexport type ActivityStatus =\n | 'idle'\n | 'sending'\n | 'waiting'\n | 'streaming'\n | 'running'\n | 'compacting'\n | 'stalled'\n | 'recovering'\n | 'aborting';\n\nexport type TuiEventSource = 'agent-response' | 'agent-resume' | 'broadcast' | 'embedded' | 'unknown';\n\nexport type TuiRunPhase =\n | 'idle'\n | 'sending'\n | 'waiting'\n | 'streaming'\n | 'tool'\n | 'progress'\n | 'stalled'\n | 'recovering'\n | 'aborting';\n\nexport interface TuiRunStatus {\n phase: TuiRunPhase;\n runId: string | null;\n directStreamRunId: string | null;\n lastCompletedRunId: string | null;\n source: TuiEventSource;\n lastEvent: string | null;\n lastActivityAt: number | null;\n stalledAt: number | null;\n recoveredAt: number | null;\n}\n\n/** Session metadata shown in the TUI footer. */\nexport interface SessionInfo {\n model?: string;\n modelProvider?: string;\n thinkingLevel?: string;\n reasoningLevel?: string;\n verboseLevel?: string;\n contextTokens?: number | null;\n totalTokens?: number | null;\n contextWindow?: number | null;\n contextUsagePercent?: number | null;\n displayName?: string;\n effectiveWorkspacePath?: string;\n workingDirectoryLocked?: boolean;\n}\n\n/** Mutable state bag for the TUI runtime. */\nexport interface TuiState {\n currentSessionKey: string;\n activeRunId: string | null;\n isConnected: boolean;\n activityStatus: ActivityStatus;\n runStatus: TuiRunStatus;\n connectionStatus: string;\n sessionInfo: SessionInfo;\n autoMessageSent: boolean;\n historyLoaded: boolean;\n toolsExpanded: boolean;\n showThinking: boolean;\n /** Last Ctrl+C timestamp for double-press exit (see `resolveCtrlCAction`). */\n lastCtrlCAt: number;\n exitRequested: boolean;\n /** Queued via Alt+Enter while a run is active; flushed FIFO when the run ends. */\n messageFollowUpQueue: string[];\n /** Queued Enter-while-busy steering messages after the first in-flight steer. */\n steeringQueue: string[];\n /** Ctrl+P cycle filter; `null` = all models from catalog. */\n scopedModelRefs: string[] | null;\n /** Last Escape timestamp for double-press actions. */\n lastEscapeAt: number;\n /** Human-readable progress from SSE `progress` events. */\n progressMessage: string | null;\n /** Session compaction in flight (local /compact handler). */\n isCompacting: boolean;\n /** Messages queued while compacting. */\n compactionQueue: string[];\n}\n\nexport function createInitialState(sessionKey: string): TuiState {\n return {\n currentSessionKey: sessionKey,\n activeRunId: null,\n isConnected: false,\n activityStatus: 'idle',\n runStatus: {\n phase: 'idle',\n runId: null,\n directStreamRunId: null,\n lastCompletedRunId: null,\n source: 'unknown',\n lastEvent: null,\n lastActivityAt: null,\n stalledAt: null,\n recoveredAt: null,\n },\n connectionStatus: 'connecting',\n sessionInfo: {},\n autoMessageSent: false,\n historyLoaded: false,\n toolsExpanded: false,\n showThinking: false,\n lastCtrlCAt: 0,\n exitRequested: false,\n messageFollowUpQueue: [],\n steeringQueue: [],\n scopedModelRefs: null,\n lastEscapeAt: 0,\n progressMessage: null,\n isCompacting: false,\n compactionQueue: [],\n };\n}\n"],"mappings":";AA0HA,SAAgB,mBAAmB,YAA8B;AAC/D,QAAO;EACL,mBAAmB;EACnB,aAAa;EACb,aAAa;EACb,gBAAgB;EAChB,WAAW;GACT,OAAO;GACP,OAAO;GACP,mBAAmB;GACnB,oBAAoB;GACpB,QAAQ;GACR,WAAW;GACX,gBAAgB;GAChB,WAAW;GACX,aAAa;GACd;EACD,kBAAkB;EAClB,aAAa,EAAE;EACf,iBAAiB;EACjB,eAAe;EACf,eAAe;EACf,cAAc;EACd,aAAa;EACb,eAAe;EACf,sBAAsB,EAAE;EACxB,eAAe,EAAE;EACjB,iBAAiB;EACjB,cAAc;EACd,iBAAiB;EACjB,cAAc;EACd,iBAAiB,EAAE;EACpB"}
|
package/dist/src/tui/tui.js
CHANGED
|
@@ -9,10 +9,11 @@ import { getAllModels, getAllProviders, getApiKey, init_providers, isProviderCon
|
|
|
9
9
|
import { renderWorkflowFinalSummary, renderWorkflowPanel } from "../agent/workflow/snapshot.js";
|
|
10
10
|
import { runViewToSnapshot } from "../workflows/service/run-view-to-snapshot.js";
|
|
11
11
|
import { ProjectTrustStore, hasTrustRequiringProjectResources } from "../project-trust/trust-store.js";
|
|
12
|
+
import { ensureStarterAgentsInitialized } from "../agent/starter-agents.js";
|
|
12
13
|
import "../config/index.js";
|
|
14
|
+
import { MAX_WEBCHAT_ATTACHMENT_FILE_BYTES } from "../gateway/chat-limits.js";
|
|
13
15
|
import { isTerminalWorkflowRunStatus } from "../workflows/domain/run.js";
|
|
14
16
|
import "../workflows/domain/index.js";
|
|
15
|
-
import { MAX_WEBCHAT_ATTACHMENT_FILE_BYTES } from "../gateway/chat-limits.js";
|
|
16
17
|
import { resolveTuiSessionKey, resolveTuiStartupSessionKey } from "../routing/resolve-tui-session-key.js";
|
|
17
18
|
import { applyThemeById, getBashExcludeBorderColor, getBashModeBorderColor, getCustomThemesDir, getThemeExports, getThinkingBorderColor, initTuiTheme, listAvailableThemeIds, resolveThemePalette } from "./theme-manager.js";
|
|
18
19
|
import { editorTheme, theme } from "./theme.js";
|
|
@@ -175,10 +176,12 @@ async function runTui(opts) {
|
|
|
175
176
|
const stdioFilter = installTuiStdioFilter();
|
|
176
177
|
const restoreStdio = () => stdioFilter.restore();
|
|
177
178
|
const isLocalMode = opts.local === true;
|
|
178
|
-
const
|
|
179
|
+
const loadedConfig = loadConfig();
|
|
180
|
+
const config = isLocalMode ? ensureStarterAgentsInitialized(loadedConfig).config : loadedConfig;
|
|
179
181
|
const startup = resolveTuiStartupSessionKey({
|
|
180
182
|
cfg: config,
|
|
181
183
|
sessionOption: opts.session,
|
|
184
|
+
agentOption: opts.agentId,
|
|
182
185
|
cwd: process.cwd()
|
|
183
186
|
});
|
|
184
187
|
let currentAgentId = startup.agentId;
|
|
@@ -225,6 +228,7 @@ async function runTui(opts) {
|
|
|
225
228
|
sendMessage: (message, options) => sendExtensionMessage(message, options)
|
|
226
229
|
});
|
|
227
230
|
const client = isLocalMode ? new EmbeddedBackend({
|
|
231
|
+
config,
|
|
228
232
|
extensionRegistry,
|
|
229
233
|
implicitTrustedWorkspace,
|
|
230
234
|
isWorkspaceTrusted: () => projectTrustSessionDecision
|
|
@@ -1618,6 +1622,7 @@ async function runTui(opts) {
|
|
|
1618
1622
|
switchModel: switchCurrentModel,
|
|
1619
1623
|
listSessions: () => client.listSessions(),
|
|
1620
1624
|
listAgents: () => client.listAgents(),
|
|
1625
|
+
setTuiDefaultAgent: (agentId) => client.setTuiDefaultAgent?.(agentId) ?? Promise.reject(/* @__PURE__ */ new Error("Not available")),
|
|
1621
1626
|
switchAgentSession,
|
|
1622
1627
|
getSessionStats: () => client.getSessionStats(state.currentSessionKey),
|
|
1623
1628
|
getStartupResources: () => startupResources,
|
|
@@ -1976,9 +1981,12 @@ async function runTui(opts) {
|
|
|
1976
1981
|
}
|
|
1977
1982
|
await refreshSessionInfoWithBorder();
|
|
1978
1983
|
await refreshModelChoices();
|
|
1979
|
-
await refreshStartupResources();
|
|
1980
1984
|
await loadSessionHistory({ merge: true });
|
|
1981
1985
|
showStartupCardOnce();
|
|
1986
|
+
refreshStartupResources().then(() => {
|
|
1987
|
+
updateFooter();
|
|
1988
|
+
tui.requestRender();
|
|
1989
|
+
});
|
|
1982
1990
|
if (state.activeRunId) recoverActiveRunFromHistory("broadcast reconnect");
|
|
1983
1991
|
updateHeader();
|
|
1984
1992
|
updateFooter();
|