@agent-native/core 0.92.12 → 0.94.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/corpus/README.md +2 -2
- package/corpus/core/CHANGELOG.md +64 -0
- package/corpus/core/docs/content/a2a-protocol.mdx +21 -5
- package/corpus/core/docs/content/actions.mdx +9 -23
- package/corpus/core/docs/content/agent-mentions.mdx +31 -29
- package/corpus/core/docs/content/agent-native-toolkit.mdx +15 -6
- package/corpus/core/docs/content/agent-surfaces.mdx +9 -13
- package/corpus/core/docs/content/agent-teams.mdx +1 -0
- package/corpus/core/docs/content/authentication.mdx +10 -3
- package/corpus/core/docs/content/automation-connectors.mdx +123 -0
- package/corpus/core/docs/content/automations.mdx +17 -3
- package/corpus/core/docs/content/blueprint-installer.mdx +11 -4
- package/corpus/core/docs/content/cli-adapters.mdx +9 -6
- package/corpus/core/docs/content/client.mdx +16 -0
- package/corpus/core/docs/content/cloneable-saas.mdx +14 -11
- package/corpus/core/docs/content/code-agents-ui.mdx +65 -0
- package/corpus/core/docs/content/components.mdx +30 -14
- package/corpus/core/docs/content/context-awareness.mdx +27 -15
- package/corpus/core/docs/content/creating-templates.mdx +15 -9
- package/corpus/core/docs/content/cross-app-sso.mdx +16 -6
- package/corpus/core/docs/content/data-programs.mdx +1 -1
- package/corpus/core/docs/content/database.mdx +17 -5
- package/corpus/core/docs/content/deployment.mdx +19 -18
- package/corpus/core/docs/content/dispatch.mdx +6 -2
- package/corpus/core/docs/content/drop-in-agent.mdx +10 -4
- package/corpus/core/docs/content/durable-background-runs.mdx +9 -5
- package/corpus/core/docs/content/durable-resume.mdx +9 -4
- package/corpus/core/docs/content/embedding-sdk.mdx +26 -8
- package/corpus/core/docs/content/evals.mdx +3 -5
- package/corpus/core/docs/content/extensions.mdx +23 -2
- package/corpus/core/docs/content/external-agents.mdx +25 -34
- package/corpus/core/docs/content/faq.mdx +8 -0
- package/corpus/core/docs/content/file-uploads.mdx +12 -3
- package/corpus/core/docs/content/frames.mdx +16 -0
- package/corpus/core/docs/content/generative-ui.mdx +1 -1
- package/corpus/core/docs/content/getting-started.mdx +34 -21
- package/corpus/core/docs/content/harness-agents.mdx +8 -4
- package/corpus/core/docs/content/human-approval.mdx +8 -3
- package/corpus/core/docs/content/internationalization.mdx +9 -4
- package/corpus/core/docs/content/key-concepts.mdx +13 -20
- package/corpus/core/docs/content/local-file-mode.mdx +14 -8
- package/corpus/core/docs/content/locales/ar-SA/actions.mdx +2 -2
- package/corpus/core/docs/content/locales/ar-SA/agent-native-toolkit.mdx +2 -2
- package/corpus/core/docs/content/locales/ar-SA/agent-surfaces.mdx +8 -10
- package/corpus/core/docs/content/locales/ar-SA/agent-teams.mdx +1 -0
- package/corpus/core/docs/content/locales/ar-SA/authentication.mdx +1 -1
- package/corpus/core/docs/content/locales/ar-SA/components.mdx +11 -1
- package/corpus/core/docs/content/locales/ar-SA/creating-templates.mdx +3 -7
- package/corpus/core/docs/content/locales/ar-SA/cross-app-sso.mdx +16 -6
- package/corpus/core/docs/content/locales/ar-SA/deployment.mdx +8 -0
- package/corpus/core/docs/content/locales/ar-SA/extensions.mdx +8 -0
- package/corpus/core/docs/content/locales/ar-SA/external-agents.mdx +2 -7
- package/corpus/core/docs/content/locales/ar-SA/key-concepts.mdx +13 -20
- package/corpus/core/docs/content/locales/ar-SA/messaging.mdx +84 -15
- package/corpus/core/docs/content/locales/ar-SA/multi-tenancy.mdx +5 -5
- package/corpus/core/docs/content/locales/ar-SA/notifications.mdx +18 -10
- package/corpus/core/docs/content/locales/ar-SA/processors.mdx +11 -5
- package/corpus/core/docs/content/locales/ar-SA/server.mdx +17 -10
- package/corpus/core/docs/content/locales/ar-SA/sharing.mdx +10 -10
- package/corpus/core/docs/content/locales/ar-SA/skills-guide.mdx +34 -17
- package/corpus/core/docs/content/locales/ar-SA/template-assets.mdx +16 -13
- package/corpus/core/docs/content/locales/ar-SA/template-brain.mdx +3 -1
- package/corpus/core/docs/content/locales/ar-SA/template-clips.mdx +4 -3
- package/corpus/core/docs/content/locales/ar-SA/template-design.mdx +4 -1
- package/corpus/core/docs/content/locales/ar-SA/template-dispatch.mdx +5 -1
- package/corpus/core/docs/content/locales/ar-SA/template-mail.mdx +8 -0
- package/corpus/core/docs/content/locales/ar-SA/tracking.mdx +9 -6
- package/corpus/core/docs/content/locales/ar-SA/using-your-agent.mdx +0 -7
- package/corpus/core/docs/content/locales/ar-SA/voice-input.mdx +6 -0
- package/corpus/core/docs/content/locales/ar-SA/workspace-connections.mdx +9 -2
- package/corpus/core/docs/content/locales/ar-SA/workspace.mdx +19 -18
- package/corpus/core/docs/content/locales/de-DE/actions.mdx +2 -2
- package/corpus/core/docs/content/locales/de-DE/agent-native-toolkit.mdx +2 -2
- package/corpus/core/docs/content/locales/de-DE/agent-surfaces.mdx +8 -10
- package/corpus/core/docs/content/locales/de-DE/agent-teams.mdx +1 -0
- package/corpus/core/docs/content/locales/de-DE/authentication.mdx +1 -1
- package/corpus/core/docs/content/locales/de-DE/components.mdx +11 -1
- package/corpus/core/docs/content/locales/de-DE/creating-templates.mdx +3 -7
- package/corpus/core/docs/content/locales/de-DE/cross-app-sso.mdx +16 -6
- package/corpus/core/docs/content/locales/de-DE/deployment.mdx +8 -0
- package/corpus/core/docs/content/locales/de-DE/extensions.mdx +10 -0
- package/corpus/core/docs/content/locales/de-DE/external-agents.mdx +3 -7
- package/corpus/core/docs/content/locales/de-DE/key-concepts.mdx +13 -20
- package/corpus/core/docs/content/locales/de-DE/messaging.mdx +92 -15
- package/corpus/core/docs/content/locales/de-DE/multi-tenancy.mdx +5 -5
- package/corpus/core/docs/content/locales/de-DE/notifications.mdx +18 -10
- package/corpus/core/docs/content/locales/de-DE/processors.mdx +11 -5
- package/corpus/core/docs/content/locales/de-DE/server.mdx +18 -10
- package/corpus/core/docs/content/locales/de-DE/sharing.mdx +10 -10
- package/corpus/core/docs/content/locales/de-DE/skills-guide.mdx +34 -17
- package/corpus/core/docs/content/locales/de-DE/template-assets.mdx +16 -13
- package/corpus/core/docs/content/locales/de-DE/template-brain.mdx +3 -1
- package/corpus/core/docs/content/locales/de-DE/template-clips.mdx +4 -3
- package/corpus/core/docs/content/locales/de-DE/template-design.mdx +4 -1
- package/corpus/core/docs/content/locales/de-DE/template-dispatch.mdx +5 -1
- package/corpus/core/docs/content/locales/de-DE/template-mail.mdx +8 -0
- package/corpus/core/docs/content/locales/de-DE/tracking.mdx +9 -6
- package/corpus/core/docs/content/locales/de-DE/using-your-agent.mdx +0 -7
- package/corpus/core/docs/content/locales/de-DE/voice-input.mdx +6 -0
- package/corpus/core/docs/content/locales/de-DE/workspace-connections.mdx +9 -2
- package/corpus/core/docs/content/locales/de-DE/workspace.mdx +19 -18
- package/corpus/core/docs/content/locales/es-ES/actions.mdx +2 -2
- package/corpus/core/docs/content/locales/es-ES/agent-native-toolkit.mdx +2 -2
- package/corpus/core/docs/content/locales/es-ES/agent-surfaces.mdx +8 -10
- package/corpus/core/docs/content/locales/es-ES/agent-teams.mdx +1 -0
- package/corpus/core/docs/content/locales/es-ES/authentication.mdx +1 -1
- package/corpus/core/docs/content/locales/es-ES/components.mdx +11 -1
- package/corpus/core/docs/content/locales/es-ES/creating-templates.mdx +3 -7
- package/corpus/core/docs/content/locales/es-ES/cross-app-sso.mdx +16 -6
- package/corpus/core/docs/content/locales/es-ES/deployment.mdx +8 -0
- package/corpus/core/docs/content/locales/es-ES/extensions.mdx +10 -0
- package/corpus/core/docs/content/locales/es-ES/external-agents.mdx +3 -7
- package/corpus/core/docs/content/locales/es-ES/key-concepts.mdx +13 -20
- package/corpus/core/docs/content/locales/es-ES/messaging.mdx +91 -15
- package/corpus/core/docs/content/locales/es-ES/multi-tenancy.mdx +5 -5
- package/corpus/core/docs/content/locales/es-ES/notifications.mdx +18 -10
- package/corpus/core/docs/content/locales/es-ES/processors.mdx +11 -5
- package/corpus/core/docs/content/locales/es-ES/server.mdx +17 -10
- package/corpus/core/docs/content/locales/es-ES/sharing.mdx +10 -10
- package/corpus/core/docs/content/locales/es-ES/skills-guide.mdx +34 -17
- package/corpus/core/docs/content/locales/es-ES/template-assets.mdx +16 -13
- package/corpus/core/docs/content/locales/es-ES/template-brain.mdx +3 -1
- package/corpus/core/docs/content/locales/es-ES/template-clips.mdx +4 -3
- package/corpus/core/docs/content/locales/es-ES/template-design.mdx +4 -1
- package/corpus/core/docs/content/locales/es-ES/template-dispatch.mdx +5 -1
- package/corpus/core/docs/content/locales/es-ES/template-mail.mdx +8 -0
- package/corpus/core/docs/content/locales/es-ES/tracking.mdx +9 -6
- package/corpus/core/docs/content/locales/es-ES/using-your-agent.mdx +0 -7
- package/corpus/core/docs/content/locales/es-ES/voice-input.mdx +6 -0
- package/corpus/core/docs/content/locales/es-ES/workspace-connections.mdx +9 -2
- package/corpus/core/docs/content/locales/es-ES/workspace.mdx +19 -18
- package/corpus/core/docs/content/locales/fr-FR/actions.mdx +2 -2
- package/corpus/core/docs/content/locales/fr-FR/agent-native-toolkit.mdx +2 -2
- package/corpus/core/docs/content/locales/fr-FR/agent-surfaces.mdx +8 -10
- package/corpus/core/docs/content/locales/fr-FR/agent-teams.mdx +1 -0
- package/corpus/core/docs/content/locales/fr-FR/authentication.mdx +1 -1
- package/corpus/core/docs/content/locales/fr-FR/components.mdx +11 -1
- package/corpus/core/docs/content/locales/fr-FR/creating-templates.mdx +3 -7
- package/corpus/core/docs/content/locales/fr-FR/cross-app-sso.mdx +16 -6
- package/corpus/core/docs/content/locales/fr-FR/deployment.mdx +8 -0
- package/corpus/core/docs/content/locales/fr-FR/extensions.mdx +10 -0
- package/corpus/core/docs/content/locales/fr-FR/external-agents.mdx +3 -7
- package/corpus/core/docs/content/locales/fr-FR/key-concepts.mdx +13 -20
- package/corpus/core/docs/content/locales/fr-FR/messaging.mdx +91 -15
- package/corpus/core/docs/content/locales/fr-FR/multi-tenancy.mdx +5 -5
- package/corpus/core/docs/content/locales/fr-FR/notifications.mdx +18 -10
- package/corpus/core/docs/content/locales/fr-FR/processors.mdx +11 -5
- package/corpus/core/docs/content/locales/fr-FR/server.mdx +17 -10
- package/corpus/core/docs/content/locales/fr-FR/sharing.mdx +10 -10
- package/corpus/core/docs/content/locales/fr-FR/skills-guide.mdx +34 -17
- package/corpus/core/docs/content/locales/fr-FR/template-assets.mdx +16 -13
- package/corpus/core/docs/content/locales/fr-FR/template-brain.mdx +3 -1
- package/corpus/core/docs/content/locales/fr-FR/template-clips.mdx +4 -3
- package/corpus/core/docs/content/locales/fr-FR/template-design.mdx +4 -1
- package/corpus/core/docs/content/locales/fr-FR/template-dispatch.mdx +5 -1
- package/corpus/core/docs/content/locales/fr-FR/template-mail.mdx +8 -0
- package/corpus/core/docs/content/locales/fr-FR/tracking.mdx +9 -6
- package/corpus/core/docs/content/locales/fr-FR/using-your-agent.mdx +0 -7
- package/corpus/core/docs/content/locales/fr-FR/voice-input.mdx +6 -0
- package/corpus/core/docs/content/locales/fr-FR/workspace-connections.mdx +9 -2
- package/corpus/core/docs/content/locales/fr-FR/workspace.mdx +19 -18
- package/corpus/core/docs/content/locales/hi-IN/actions.mdx +2 -2
- package/corpus/core/docs/content/locales/hi-IN/agent-native-toolkit.mdx +2 -2
- package/corpus/core/docs/content/locales/hi-IN/agent-surfaces.mdx +8 -10
- package/corpus/core/docs/content/locales/hi-IN/agent-teams.mdx +1 -0
- package/corpus/core/docs/content/locales/hi-IN/authentication.mdx +1 -1
- package/corpus/core/docs/content/locales/hi-IN/components.mdx +11 -1
- package/corpus/core/docs/content/locales/hi-IN/creating-templates.mdx +3 -7
- package/corpus/core/docs/content/locales/hi-IN/cross-app-sso.mdx +16 -6
- package/corpus/core/docs/content/locales/hi-IN/deployment.mdx +8 -0
- package/corpus/core/docs/content/locales/hi-IN/extensions.mdx +8 -0
- package/corpus/core/docs/content/locales/hi-IN/external-agents.mdx +2 -7
- package/corpus/core/docs/content/locales/hi-IN/key-concepts.mdx +13 -20
- package/corpus/core/docs/content/locales/hi-IN/messaging.mdx +81 -15
- package/corpus/core/docs/content/locales/hi-IN/multi-tenancy.mdx +5 -5
- package/corpus/core/docs/content/locales/hi-IN/notifications.mdx +18 -10
- package/corpus/core/docs/content/locales/hi-IN/processors.mdx +11 -5
- package/corpus/core/docs/content/locales/hi-IN/server.mdx +17 -10
- package/corpus/core/docs/content/locales/hi-IN/sharing.mdx +10 -10
- package/corpus/core/docs/content/locales/hi-IN/skills-guide.mdx +34 -17
- package/corpus/core/docs/content/locales/hi-IN/template-assets.mdx +16 -13
- package/corpus/core/docs/content/locales/hi-IN/template-brain.mdx +3 -1
- package/corpus/core/docs/content/locales/hi-IN/template-clips.mdx +4 -3
- package/corpus/core/docs/content/locales/hi-IN/template-design.mdx +4 -1
- package/corpus/core/docs/content/locales/hi-IN/template-dispatch.mdx +5 -1
- package/corpus/core/docs/content/locales/hi-IN/template-mail.mdx +8 -0
- package/corpus/core/docs/content/locales/hi-IN/tracking.mdx +9 -6
- package/corpus/core/docs/content/locales/hi-IN/using-your-agent.mdx +0 -7
- package/corpus/core/docs/content/locales/hi-IN/voice-input.mdx +6 -0
- package/corpus/core/docs/content/locales/hi-IN/workspace-connections.mdx +9 -2
- package/corpus/core/docs/content/locales/hi-IN/workspace.mdx +19 -18
- package/corpus/core/docs/content/locales/ja-JP/actions.mdx +2 -2
- package/corpus/core/docs/content/locales/ja-JP/agent-native-toolkit.mdx +2 -2
- package/corpus/core/docs/content/locales/ja-JP/agent-surfaces.mdx +8 -10
- package/corpus/core/docs/content/locales/ja-JP/agent-teams.mdx +1 -0
- package/corpus/core/docs/content/locales/ja-JP/authentication.mdx +1 -1
- package/corpus/core/docs/content/locales/ja-JP/components.mdx +11 -1
- package/corpus/core/docs/content/locales/ja-JP/creating-templates.mdx +3 -7
- package/corpus/core/docs/content/locales/ja-JP/cross-app-sso.mdx +16 -6
- package/corpus/core/docs/content/locales/ja-JP/deployment.mdx +8 -0
- package/corpus/core/docs/content/locales/ja-JP/extensions.mdx +9 -0
- package/corpus/core/docs/content/locales/ja-JP/external-agents.mdx +2 -7
- package/corpus/core/docs/content/locales/ja-JP/key-concepts.mdx +13 -20
- package/corpus/core/docs/content/locales/ja-JP/messaging.mdx +81 -15
- package/corpus/core/docs/content/locales/ja-JP/multi-tenancy.mdx +5 -5
- package/corpus/core/docs/content/locales/ja-JP/notifications.mdx +18 -10
- package/corpus/core/docs/content/locales/ja-JP/processors.mdx +11 -5
- package/corpus/core/docs/content/locales/ja-JP/server.mdx +17 -10
- package/corpus/core/docs/content/locales/ja-JP/sharing.mdx +10 -10
- package/corpus/core/docs/content/locales/ja-JP/skills-guide.mdx +34 -17
- package/corpus/core/docs/content/locales/ja-JP/template-assets.mdx +16 -13
- package/corpus/core/docs/content/locales/ja-JP/template-brain.mdx +3 -1
- package/corpus/core/docs/content/locales/ja-JP/template-clips.mdx +4 -4
- package/corpus/core/docs/content/locales/ja-JP/template-design.mdx +4 -1
- package/corpus/core/docs/content/locales/ja-JP/template-dispatch.mdx +5 -1
- package/corpus/core/docs/content/locales/ja-JP/template-mail.mdx +8 -0
- package/corpus/core/docs/content/locales/ja-JP/tracking.mdx +9 -6
- package/corpus/core/docs/content/locales/ja-JP/using-your-agent.mdx +0 -7
- package/corpus/core/docs/content/locales/ja-JP/voice-input.mdx +6 -0
- package/corpus/core/docs/content/locales/ja-JP/workspace-connections.mdx +9 -2
- package/corpus/core/docs/content/locales/ja-JP/workspace.mdx +19 -18
- package/corpus/core/docs/content/locales/ko-KR/actions.mdx +2 -2
- package/corpus/core/docs/content/locales/ko-KR/agent-native-toolkit.mdx +2 -2
- package/corpus/core/docs/content/locales/ko-KR/agent-surfaces.mdx +8 -10
- package/corpus/core/docs/content/locales/ko-KR/agent-teams.mdx +1 -0
- package/corpus/core/docs/content/locales/ko-KR/authentication.mdx +1 -1
- package/corpus/core/docs/content/locales/ko-KR/components.mdx +11 -1
- package/corpus/core/docs/content/locales/ko-KR/creating-templates.mdx +3 -7
- package/corpus/core/docs/content/locales/ko-KR/cross-app-sso.mdx +16 -6
- package/corpus/core/docs/content/locales/ko-KR/deployment.mdx +8 -0
- package/corpus/core/docs/content/locales/ko-KR/extensions.mdx +8 -0
- package/corpus/core/docs/content/locales/ko-KR/external-agents.mdx +2 -7
- package/corpus/core/docs/content/locales/ko-KR/key-concepts.mdx +13 -20
- package/corpus/core/docs/content/locales/ko-KR/messaging.mdx +80 -15
- package/corpus/core/docs/content/locales/ko-KR/multi-tenancy.mdx +5 -5
- package/corpus/core/docs/content/locales/ko-KR/notifications.mdx +18 -10
- package/corpus/core/docs/content/locales/ko-KR/processors.mdx +11 -5
- package/corpus/core/docs/content/locales/ko-KR/server.mdx +17 -10
- package/corpus/core/docs/content/locales/ko-KR/sharing.mdx +10 -10
- package/corpus/core/docs/content/locales/ko-KR/skills-guide.mdx +34 -17
- package/corpus/core/docs/content/locales/ko-KR/template-assets.mdx +16 -13
- package/corpus/core/docs/content/locales/ko-KR/template-brain.mdx +3 -1
- package/corpus/core/docs/content/locales/ko-KR/template-clips.mdx +4 -4
- package/corpus/core/docs/content/locales/ko-KR/template-design.mdx +4 -1
- package/corpus/core/docs/content/locales/ko-KR/template-dispatch.mdx +5 -1
- package/corpus/core/docs/content/locales/ko-KR/template-mail.mdx +8 -0
- package/corpus/core/docs/content/locales/ko-KR/tracking.mdx +9 -6
- package/corpus/core/docs/content/locales/ko-KR/using-your-agent.mdx +0 -7
- package/corpus/core/docs/content/locales/ko-KR/voice-input.mdx +6 -0
- package/corpus/core/docs/content/locales/ko-KR/workspace-connections.mdx +9 -2
- package/corpus/core/docs/content/locales/ko-KR/workspace.mdx +19 -18
- package/corpus/core/docs/content/locales/pt-BR/actions.mdx +2 -2
- package/corpus/core/docs/content/locales/pt-BR/agent-native-toolkit.mdx +2 -2
- package/corpus/core/docs/content/locales/pt-BR/agent-surfaces.mdx +8 -10
- package/corpus/core/docs/content/locales/pt-BR/agent-teams.mdx +1 -0
- package/corpus/core/docs/content/locales/pt-BR/authentication.mdx +1 -1
- package/corpus/core/docs/content/locales/pt-BR/components.mdx +11 -1
- package/corpus/core/docs/content/locales/pt-BR/creating-templates.mdx +3 -7
- package/corpus/core/docs/content/locales/pt-BR/cross-app-sso.mdx +16 -6
- package/corpus/core/docs/content/locales/pt-BR/deployment.mdx +8 -0
- package/corpus/core/docs/content/locales/pt-BR/extensions.mdx +9 -0
- package/corpus/core/docs/content/locales/pt-BR/external-agents.mdx +3 -7
- package/corpus/core/docs/content/locales/pt-BR/key-concepts.mdx +13 -20
- package/corpus/core/docs/content/locales/pt-BR/messaging.mdx +88 -15
- package/corpus/core/docs/content/locales/pt-BR/multi-tenancy.mdx +5 -5
- package/corpus/core/docs/content/locales/pt-BR/notifications.mdx +18 -10
- package/corpus/core/docs/content/locales/pt-BR/processors.mdx +11 -5
- package/corpus/core/docs/content/locales/pt-BR/server.mdx +17 -10
- package/corpus/core/docs/content/locales/pt-BR/sharing.mdx +10 -10
- package/corpus/core/docs/content/locales/pt-BR/skills-guide.mdx +34 -17
- package/corpus/core/docs/content/locales/pt-BR/template-assets.mdx +16 -13
- package/corpus/core/docs/content/locales/pt-BR/template-brain.mdx +3 -1
- package/corpus/core/docs/content/locales/pt-BR/template-clips.mdx +4 -3
- package/corpus/core/docs/content/locales/pt-BR/template-design.mdx +4 -1
- package/corpus/core/docs/content/locales/pt-BR/template-dispatch.mdx +5 -1
- package/corpus/core/docs/content/locales/pt-BR/template-mail.mdx +8 -0
- package/corpus/core/docs/content/locales/pt-BR/tracking.mdx +9 -6
- package/corpus/core/docs/content/locales/pt-BR/using-your-agent.mdx +0 -7
- package/corpus/core/docs/content/locales/pt-BR/voice-input.mdx +6 -0
- package/corpus/core/docs/content/locales/pt-BR/workspace-connections.mdx +9 -2
- package/corpus/core/docs/content/locales/pt-BR/workspace.mdx +19 -18
- package/corpus/core/docs/content/locales/zh-CN/actions.mdx +2 -2
- package/corpus/core/docs/content/locales/zh-CN/agent-native-toolkit.mdx +2 -2
- package/corpus/core/docs/content/locales/zh-CN/agent-surfaces.mdx +8 -10
- package/corpus/core/docs/content/locales/zh-CN/agent-teams.mdx +1 -0
- package/corpus/core/docs/content/locales/zh-CN/authentication.mdx +1 -1
- package/corpus/core/docs/content/locales/zh-CN/components.mdx +11 -1
- package/corpus/core/docs/content/locales/zh-CN/creating-templates.mdx +3 -7
- package/corpus/core/docs/content/locales/zh-CN/cross-app-sso.mdx +16 -6
- package/corpus/core/docs/content/locales/zh-CN/deployment.mdx +8 -0
- package/corpus/core/docs/content/locales/zh-CN/extensions.mdx +6 -0
- package/corpus/core/docs/content/locales/zh-CN/external-agents.mdx +2 -7
- package/corpus/core/docs/content/locales/zh-CN/key-concepts.mdx +13 -20
- package/corpus/core/docs/content/locales/zh-CN/messaging.mdx +78 -15
- package/corpus/core/docs/content/locales/zh-CN/multi-tenancy.mdx +5 -5
- package/corpus/core/docs/content/locales/zh-CN/notifications.mdx +18 -10
- package/corpus/core/docs/content/locales/zh-CN/processors.mdx +11 -5
- package/corpus/core/docs/content/locales/zh-CN/server.mdx +16 -10
- package/corpus/core/docs/content/locales/zh-CN/sharing.mdx +10 -10
- package/corpus/core/docs/content/locales/zh-CN/skills-guide.mdx +34 -17
- package/corpus/core/docs/content/locales/zh-CN/template-assets.mdx +16 -13
- package/corpus/core/docs/content/locales/zh-CN/template-brain.mdx +3 -1
- package/corpus/core/docs/content/locales/zh-CN/template-clips.mdx +4 -4
- package/corpus/core/docs/content/locales/zh-CN/template-design.mdx +4 -1
- package/corpus/core/docs/content/locales/zh-CN/template-dispatch.mdx +5 -1
- package/corpus/core/docs/content/locales/zh-CN/template-mail.mdx +8 -0
- package/corpus/core/docs/content/locales/zh-CN/tracking.mdx +9 -6
- package/corpus/core/docs/content/locales/zh-CN/using-your-agent.mdx +0 -7
- package/corpus/core/docs/content/locales/zh-CN/voice-input.mdx +6 -0
- package/corpus/core/docs/content/locales/zh-CN/workspace-connections.mdx +9 -2
- package/corpus/core/docs/content/locales/zh-CN/workspace.mdx +19 -18
- package/corpus/core/docs/content/locales/zh-TW/actions.mdx +2 -2
- package/corpus/core/docs/content/locales/zh-TW/agent-native-toolkit.mdx +2 -2
- package/corpus/core/docs/content/locales/zh-TW/agent-surfaces.mdx +8 -10
- package/corpus/core/docs/content/locales/zh-TW/agent-teams.mdx +1 -0
- package/corpus/core/docs/content/locales/zh-TW/authentication.mdx +1 -1
- package/corpus/core/docs/content/locales/zh-TW/components.mdx +11 -1
- package/corpus/core/docs/content/locales/zh-TW/creating-templates.mdx +3 -7
- package/corpus/core/docs/content/locales/zh-TW/cross-app-sso.mdx +16 -6
- package/corpus/core/docs/content/locales/zh-TW/deployment.mdx +8 -0
- package/corpus/core/docs/content/locales/zh-TW/extensions.mdx +6 -0
- package/corpus/core/docs/content/locales/zh-TW/external-agents.mdx +2 -7
- package/corpus/core/docs/content/locales/zh-TW/key-concepts.mdx +13 -20
- package/corpus/core/docs/content/locales/zh-TW/messaging.mdx +78 -15
- package/corpus/core/docs/content/locales/zh-TW/multi-tenancy.mdx +5 -5
- package/corpus/core/docs/content/locales/zh-TW/notifications.mdx +18 -10
- package/corpus/core/docs/content/locales/zh-TW/processors.mdx +11 -5
- package/corpus/core/docs/content/locales/zh-TW/server.mdx +16 -10
- package/corpus/core/docs/content/locales/zh-TW/sharing.mdx +10 -10
- package/corpus/core/docs/content/locales/zh-TW/skills-guide.mdx +34 -17
- package/corpus/core/docs/content/locales/zh-TW/template-assets.mdx +16 -13
- package/corpus/core/docs/content/locales/zh-TW/template-brain.mdx +3 -1
- package/corpus/core/docs/content/locales/zh-TW/template-clips.mdx +4 -4
- package/corpus/core/docs/content/locales/zh-TW/template-design.mdx +4 -1
- package/corpus/core/docs/content/locales/zh-TW/template-dispatch.mdx +5 -1
- package/corpus/core/docs/content/locales/zh-TW/template-mail.mdx +8 -0
- package/corpus/core/docs/content/locales/zh-TW/tracking.mdx +9 -6
- package/corpus/core/docs/content/locales/zh-TW/using-your-agent.mdx +0 -7
- package/corpus/core/docs/content/locales/zh-TW/voice-input.mdx +6 -0
- package/corpus/core/docs/content/locales/zh-TW/workspace-connections.mdx +9 -2
- package/corpus/core/docs/content/locales/zh-TW/workspace.mdx +19 -18
- package/corpus/core/docs/content/mcp-apps.mdx +14 -32
- package/corpus/core/docs/content/mcp-clients.mdx +48 -54
- package/corpus/core/docs/content/mcp-protocol.mdx +25 -10
- package/corpus/core/docs/content/messaging.mdx +238 -48
- package/corpus/core/docs/content/multi-app-workspace.mdx +11 -96
- package/corpus/core/docs/content/multi-tenancy.mdx +5 -5
- package/corpus/core/docs/content/native-chat-ui.mdx +4 -4
- package/corpus/core/docs/content/notifications.mdx +19 -12
- package/corpus/core/docs/content/observability.mdx +2 -4
- package/corpus/core/docs/content/observational-memory.mdx +7 -3
- package/corpus/core/docs/content/onboarding.mdx +9 -2
- package/corpus/core/docs/content/plan-plugin.mdx +10 -2
- package/corpus/core/docs/content/pr-visual-recap.mdx +1 -1
- package/corpus/core/docs/content/processors.mdx +11 -5
- package/corpus/core/docs/content/pure-agent-apps.mdx +5 -1
- package/corpus/core/docs/content/real-time-collaboration.mdx +30 -67
- package/corpus/core/docs/content/recurring-jobs.mdx +8 -6
- package/corpus/core/docs/content/routing.mdx +3 -4
- package/corpus/core/docs/content/sandbox-adapters.mdx +30 -53
- package/corpus/core/docs/content/security.mdx +8 -0
- package/corpus/core/docs/content/server.mdx +17 -10
- package/corpus/core/docs/content/sharing.mdx +10 -10
- package/corpus/core/docs/content/skills-guide.mdx +35 -16
- package/corpus/core/docs/content/template-analytics.mdx +11 -8
- package/corpus/core/docs/content/template-assets.mdx +16 -13
- package/corpus/core/docs/content/template-brain.mdx +3 -1
- package/corpus/core/docs/content/template-calendar.mdx +12 -4
- package/corpus/core/docs/content/template-chat.mdx +4 -4
- package/corpus/core/docs/content/template-clips.mdx +6 -3
- package/corpus/core/docs/content/template-content.mdx +23 -18
- package/corpus/core/docs/content/template-design.mdx +7 -1
- package/corpus/core/docs/content/template-dispatch.mdx +5 -1
- package/corpus/core/docs/content/template-mail.mdx +14 -2
- package/corpus/core/docs/content/template-plan.mdx +22 -15
- package/corpus/core/docs/content/template-slides.mdx +11 -3
- package/corpus/core/docs/content/toolkit-agent-ux.mdx +46 -3
- package/corpus/core/docs/content/toolkit-collaboration.mdx +58 -4
- package/corpus/core/docs/content/toolkit-command-navigation.mdx +8 -2
- package/corpus/core/docs/content/toolkit-comments-review.mdx +10 -2
- package/corpus/core/docs/content/toolkit-history.mdx +8 -3
- package/corpus/core/docs/content/toolkit-observability.mdx +48 -2
- package/corpus/core/docs/content/toolkit-org-team.mdx +8 -2
- package/corpus/core/docs/content/toolkit-resources.mdx +45 -2
- package/corpus/core/docs/content/toolkit-settings.mdx +8 -2
- package/corpus/core/docs/content/toolkit-setup-connections.mdx +7 -2
- package/corpus/core/docs/content/toolkit-sharing.mdx +46 -3
- package/corpus/core/docs/content/toolkit-ui.mdx +82 -11
- package/corpus/core/docs/content/tracking.mdx +10 -8
- package/corpus/core/docs/content/using-your-agent.mdx +0 -12
- package/corpus/core/docs/content/voice-input.mdx +7 -1
- package/corpus/core/docs/content/what-is-agent-native.mdx +7 -8
- package/corpus/core/docs/content/workspace-connections.mdx +16 -23
- package/corpus/core/docs/content/workspace-management.mdx +16 -4
- package/corpus/core/docs/content/workspace.mdx +19 -18
- package/corpus/core/package.json +5 -1
- package/corpus/core/src/a2a/artifact-response.ts +131 -2
- package/corpus/core/src/a2a/client.ts +10 -0
- package/corpus/core/src/a2a/handlers.ts +40 -76
- package/corpus/core/src/a2a/types.ts +2 -0
- package/corpus/core/src/agent/context-xray/tokenize.ts +6 -1
- package/corpus/core/src/agent/durable-background.ts +24 -0
- package/corpus/core/src/agent/engine/ai-sdk-engine.ts +9 -5
- package/corpus/core/src/agent/engine/anthropic-engine.ts +2 -4
- package/corpus/core/src/agent/engine/builder-engine.ts +5 -7
- package/corpus/core/src/agent/engine/index.ts +1 -0
- package/corpus/core/src/agent/engine/registry.ts +40 -0
- package/corpus/core/src/agent/harness/ai-sdk-adapter.ts +6 -1
- package/corpus/core/src/agent/harness/background.ts +96 -19
- package/corpus/core/src/agent/harness/index.ts +11 -0
- package/corpus/core/src/agent/harness/lifecycle.ts +498 -0
- package/corpus/core/src/agent/harness/runner.ts +38 -0
- package/corpus/core/src/agent/harness/store.ts +22 -3
- package/corpus/core/src/agent/model-config.ts +4 -1
- package/corpus/core/src/agent/production-agent.ts +205 -9
- package/corpus/core/src/agent/run-manager.ts +135 -11
- package/corpus/core/src/agent/run-store.ts +225 -15
- package/corpus/core/src/agent/types.ts +23 -0
- package/corpus/core/src/application-state/index.ts +1 -0
- package/corpus/core/src/application-state/store.ts +32 -0
- package/corpus/core/src/audit/record.ts +31 -0
- package/corpus/core/src/audit/store.ts +69 -3
- package/corpus/core/src/audit/types.ts +13 -0
- package/corpus/core/src/automation/index.ts +802 -0
- package/corpus/core/src/cli/code-agent-connector.ts +263 -8
- package/corpus/core/src/cli/code-agent-executor.ts +15 -1
- package/corpus/core/src/cli/create.ts +12 -5
- package/corpus/core/src/cli/design-connect.ts +596 -36
- package/corpus/core/src/client/AgentPanel.tsx +92 -44
- package/corpus/core/src/client/AssistantChat.tsx +324 -149
- package/corpus/core/src/client/MultiTabAssistantChat.tsx +36 -40
- package/corpus/core/src/client/RunStuckBanner.tsx +69 -20
- package/corpus/core/src/client/agent-chat-adapter.ts +54 -5
- package/corpus/core/src/client/appearance.ts +8 -5
- package/corpus/core/src/client/automation.ts +22 -0
- package/corpus/core/src/client/chat/connectors.ts +293 -29
- package/corpus/core/src/client/chat/message-components.tsx +23 -1
- package/corpus/core/src/client/chat/run-recovery.tsx +67 -50
- package/corpus/core/src/client/chat/runtime.ts +126 -25
- package/corpus/core/src/client/chat/tool-call-display.tsx +45 -4
- package/corpus/core/src/client/composer/RealtimeVoiceMode.tsx +294 -0
- package/corpus/core/src/client/composer/TiptapComposer.tsx +29 -20
- package/corpus/core/src/client/composer/VoiceButton.tsx +20 -0
- package/corpus/core/src/client/composer/index.ts +22 -0
- package/corpus/core/src/client/composer/useRealtimeVoiceMode.tsx +640 -0
- package/corpus/core/src/client/guided-questions.tsx +12 -3
- package/corpus/core/src/client/index.ts +48 -0
- package/corpus/core/src/client/integrations/api.ts +295 -0
- package/corpus/core/src/client/integrations/index.ts +26 -0
- package/corpus/core/src/client/settings/DemoModeSection.tsx +4 -3
- package/corpus/core/src/client/settings/SettingsPanel.tsx +4 -0
- package/corpus/core/src/client/settings/SettingsTabsPage.tsx +95 -37
- package/corpus/core/src/client/transcription/use-live-transcription.ts +68 -5
- package/corpus/core/src/client/use-chat-models.ts +17 -17
- package/corpus/core/src/client/use-db-sync.ts +108 -7
- package/corpus/core/src/client/use-run-stuck-detection.ts +41 -3
- package/corpus/core/src/code-agents/background-controller.ts +18 -0
- package/corpus/core/src/collab/ydoc-manager.ts +41 -6
- package/corpus/core/src/db/migrations.ts +17 -1
- package/corpus/core/src/demo/fetch-interceptor.ts +16 -11
- package/corpus/core/src/deploy/build.ts +59 -3
- package/corpus/core/src/deploy/workspace-deploy.ts +37 -2
- package/corpus/core/src/file-upload/types.ts +2 -0
- package/corpus/core/src/index.ts +37 -0
- package/corpus/core/src/integrations/a2a-continuations-store.ts +6 -4
- package/corpus/core/src/integrations/adapters/discord.ts +362 -0
- package/corpus/core/src/integrations/adapters/index.ts +29 -0
- package/corpus/core/src/integrations/adapters/microsoft-teams.ts +411 -0
- package/corpus/core/src/integrations/adapters/slack.ts +900 -27
- package/corpus/core/src/integrations/adapters/telegram.ts +54 -15
- package/corpus/core/src/integrations/adapters/whatsapp.ts +41 -17
- package/corpus/core/src/integrations/awaiting-input-store.ts +130 -0
- package/corpus/core/src/integrations/catalog.ts +571 -0
- package/corpus/core/src/integrations/computer-supervision-store.ts +423 -0
- package/corpus/core/src/integrations/computer-supervision.ts +213 -0
- package/corpus/core/src/integrations/controls-store.ts +187 -0
- package/corpus/core/src/integrations/index.ts +129 -1
- package/corpus/core/src/integrations/installations-store.ts +677 -0
- package/corpus/core/src/integrations/integration-memory.ts +187 -0
- package/corpus/core/src/integrations/pending-tasks-retry-job.ts +6 -6
- package/corpus/core/src/integrations/pending-tasks-store.ts +83 -5
- package/corpus/core/src/integrations/plugin.ts +916 -49
- package/corpus/core/src/integrations/remote-commands-store.ts +334 -3
- package/corpus/core/src/integrations/remote-devices-store.ts +68 -9
- package/corpus/core/src/integrations/remote-json-safety.ts +127 -0
- package/corpus/core/src/integrations/remote-run-events-store.ts +104 -19
- package/corpus/core/src/integrations/remote-types.ts +66 -3
- package/corpus/core/src/integrations/scope-store.ts +498 -0
- package/corpus/core/src/integrations/slack-manifest.ts +78 -0
- package/corpus/core/src/integrations/slack-oauth.ts +343 -0
- package/corpus/core/src/integrations/types.ts +179 -0
- package/corpus/core/src/integrations/usage-budget-store.ts +906 -0
- package/corpus/core/src/integrations/webhook-handler.ts +723 -53
- package/corpus/core/src/jobs/scheduler.ts +100 -2
- package/corpus/core/src/jobs/tools.ts +45 -9
- package/corpus/core/src/localization/default-messages.ts +28 -0
- package/corpus/core/src/mcp-client/config.ts +48 -2
- package/corpus/core/src/mcp-client/index.ts +35 -2
- package/corpus/core/src/mcp-client/tool-policy.ts +182 -0
- package/corpus/core/src/provider-api/index.ts +72 -1
- package/corpus/core/src/resources/handlers.ts +88 -14
- package/corpus/core/src/resources/script-helpers.ts +36 -7
- package/corpus/core/src/resources/store.ts +59 -52
- package/corpus/core/src/scripts/call-agent.ts +107 -1
- package/corpus/core/src/secrets/register-framework-secrets.ts +27 -4
- package/corpus/core/src/server/agent-chat-plugin.ts +356 -127
- package/corpus/core/src/server/auth.ts +10 -14
- package/corpus/core/src/server/builder-design-systems.ts +16 -1
- package/corpus/core/src/server/edge.ts +18 -0
- package/corpus/core/src/server/index.ts +42 -0
- package/corpus/core/src/server/realtime-voice.ts +590 -0
- package/corpus/core/src/server/request-context.ts +18 -0
- package/corpus/core/src/server/social-og-image.ts +3 -2
- package/corpus/core/src/shared/reasoning-effort.ts +61 -19
- package/corpus/core/src/styles/agent-conversation.css +17 -0
- package/corpus/core/src/styles/agent-native.css +62 -44
- package/corpus/core/src/templates/default/.agents/skills/capture-learnings/SKILL.md +22 -9
- package/corpus/core/src/templates/default/AGENTS.md +7 -3
- package/corpus/core/src/templates/workspace-core/.agents/skills/authentication/SKILL.md +1 -1
- package/corpus/core/src/templates/workspace-core/.agents/skills/capture-learnings/SKILL.md +22 -9
- package/corpus/core/src/templates/workspace-core/.agents/skills/extension-points/SKILL.md +6 -3
- package/corpus/core/src/templates/workspace-core/.agents/skills/extensions/SKILL.md +25 -0
- package/corpus/core/src/templates/workspace-core/.agents/skills/integration-webhooks/SKILL.md +15 -0
- package/corpus/core/src/templates/workspace-core/.agents/skills/voice-transcription/SKILL.md +39 -5
- package/corpus/core/src/templates/workspace-core/AGENTS.md +3 -2
- package/corpus/core/src/usage/store.ts +37 -2
- package/corpus/templates/analytics/.agents/skills/capture-learnings/SKILL.md +22 -9
- package/corpus/templates/analytics/.agents/skills/provider-api/SKILL.md +23 -0
- package/corpus/templates/analytics/.builder/skills/provider-api/SKILL.md +15 -0
- package/corpus/templates/analytics/actions/save-monitor.ts +25 -2
- package/corpus/templates/analytics/app/lib/data-sources.ts +28 -0
- package/corpus/templates/analytics/changelog/2026-07-10-agent-created-uptime-monitors-now-return-a-direct-link-to-th.md +6 -0
- package/corpus/templates/analytics/changelog/2026-07-10-dashboard-email-reports-still-arrive-when-screenshot-capture-temporarily-fails.md +6 -0
- package/corpus/templates/analytics/server/jobs/dashboard-report.ts +3 -7
- package/corpus/templates/analytics/server/lib/credential-keys.ts +12 -0
- package/corpus/templates/analytics/server/lib/dashboard-report.ts +5 -1
- package/corpus/templates/analytics/server/lib/provider-credentials.ts +2 -0
- package/corpus/templates/analytics/server/routes/api/test-connection.post.ts +16 -0
- package/corpus/templates/assets/.agents/skills/capture-learnings/SKILL.md +22 -9
- package/corpus/templates/brain/.agents/skills/capture-learnings/SKILL.md +22 -9
- package/corpus/templates/brain/app/lib/settings-navigation.ts +22 -0
- package/corpus/templates/brain/app/routes/settings.tsx +367 -252
- package/corpus/templates/brain/changelog/2026-07-10-brain-settings-now-separate-assistant-behavior-publishing-re.md +6 -0
- package/corpus/templates/brain/changelog/2026-07-10-organization-settings-now-opens-directly-from-the-workspace-.md +6 -0
- package/corpus/templates/calendar/.agents/skills/capture-learnings/SKILL.md +22 -9
- package/corpus/templates/calendar/.agents/skills/event-management/SKILL.md +36 -4
- package/corpus/templates/calendar/AGENTS.md +4 -0
- package/corpus/templates/calendar/actions/create-event.ts +7 -19
- package/corpus/templates/calendar/actions/delete-event.ts +10 -3
- package/corpus/templates/calendar/actions/rsvp-event.ts +1 -1
- package/corpus/templates/calendar/actions/update-event.ts +4 -3
- package/corpus/templates/calendar/app/components/calendar/CommandPalette.tsx +98 -108
- package/corpus/templates/calendar/app/components/calendar/CreateEventDialog.tsx +100 -13
- package/corpus/templates/calendar/app/components/calendar/DayView.tsx +12 -4
- package/corpus/templates/calendar/app/components/calendar/EventAttendeesSection.tsx +97 -90
- package/corpus/templates/calendar/app/components/calendar/EventDetailPanel.tsx +3 -3
- package/corpus/templates/calendar/app/components/calendar/EventDetailPopover.tsx +86 -8
- package/corpus/templates/calendar/app/components/calendar/EventDialog.tsx +3 -1
- package/corpus/templates/calendar/app/components/calendar/WeekView.tsx +12 -4
- package/corpus/templates/calendar/app/hooks/use-events.ts +1 -0
- package/corpus/templates/calendar/app/lib/event-account-selection.ts +36 -0
- package/corpus/templates/calendar/app/lib/event-form-initialization.ts +21 -0
- package/corpus/templates/calendar/app/lib/event-mutation-inputs.ts +18 -0
- package/corpus/templates/calendar/app/pages/CalendarView.tsx +119 -26
- package/corpus/templates/calendar/changelog/2026-07-10-choose-which-connected-google-account-receives-a-new-event-w.md +6 -0
- package/corpus/templates/calendar/changelog/2026-07-10-event-guest-details-and-option-menus-now-use-valid-accessibl.md +6 -0
- package/corpus/templates/calendar/changelog/2026-07-10-natural-language-event-phrases-stay-available-as-quick-creat.md +6 -0
- package/corpus/templates/calendar/server/db/schema.ts +2 -0
- package/corpus/templates/calendar/server/handlers/bookings.ts +43 -6
- package/corpus/templates/calendar/server/handlers/events.ts +28 -9
- package/corpus/templates/calendar/server/lib/google-calendar.ts +66 -38
- package/corpus/templates/calendar/server/plugins/db.ts +5 -0
- package/corpus/templates/chat/.agents/skills/capture-learnings/SKILL.md +22 -9
- package/corpus/templates/chat/changelog/2026-07-10-chat-now-makes-ai-connection-setup-clear-without-shifting-th.md +6 -0
- package/corpus/templates/clips/.agents/skills/ai-video-tools/SKILL.md +12 -3
- package/corpus/templates/clips/.agents/skills/capture-learnings/SKILL.md +22 -9
- package/corpus/templates/clips/.agents/skills/meetings/SKILL.md +1 -1
- package/corpus/templates/clips/.agents/skills/recording/SKILL.md +17 -1
- package/corpus/templates/clips/.agents/skills/video-sharing/SKILL.md +8 -0
- package/corpus/templates/clips/AGENTS.md +12 -5
- package/corpus/templates/clips/actions/finalize-recording.ts +63 -23
- package/corpus/templates/clips/actions/get-recording-player-data.ts +6 -2
- package/corpus/templates/clips/actions/lib/ensure-seekable-video.ts +72 -9
- package/corpus/templates/clips/actions/list-recordings.ts +19 -3
- package/corpus/templates/clips/actions/navigate.ts +2 -0
- package/corpus/templates/clips/actions/regenerate-title.ts +53 -7
- package/corpus/templates/clips/actions/reprocess-recording.ts +20 -6
- package/corpus/templates/clips/actions/request-transcript.ts +168 -72
- package/corpus/templates/clips/actions/save-browser-transcript.ts +11 -9
- package/corpus/templates/clips/actions/view-screen.ts +57 -5
- package/corpus/templates/clips/app/components/layout/Header.tsx +1 -0
- package/corpus/templates/clips/app/components/library/empty-state.tsx +2 -0
- package/corpus/templates/clips/app/components/library/library-grid.tsx +69 -42
- package/corpus/templates/clips/app/components/library/library-layout.tsx +15 -1
- package/corpus/templates/clips/app/components/library/recording-card.tsx +81 -68
- package/corpus/templates/clips/app/components/library/search-bar.tsx +4 -3
- package/corpus/templates/clips/app/components/player/comments-panel.tsx +101 -53
- package/corpus/templates/clips/app/components/player/delete-recording-menu.tsx +9 -3
- package/corpus/templates/clips/app/components/player/playback-comment-overlay.tsx +102 -0
- package/corpus/templates/clips/app/components/player/share-dialog.tsx +1 -1
- package/corpus/templates/clips/app/components/player/video-player.tsx +10 -1
- package/corpus/templates/clips/app/hooks/use-auto-title.ts +14 -0
- package/corpus/templates/clips/app/hooks/use-library.ts +1 -1
- package/corpus/templates/clips/app/hooks/use-navigation-state.ts +10 -2
- package/corpus/templates/clips/app/i18n/ar-SA.ts +7 -1
- package/corpus/templates/clips/app/i18n/de-DE.ts +7 -1
- package/corpus/templates/clips/app/i18n/en-US.ts +7 -1
- package/corpus/templates/clips/app/i18n/es-ES.ts +7 -1
- package/corpus/templates/clips/app/i18n/fr-FR.ts +7 -1
- package/corpus/templates/clips/app/i18n/hi-IN.ts +7 -1
- package/corpus/templates/clips/app/i18n/ja-JP.ts +7 -1
- package/corpus/templates/clips/app/i18n/ko-KR.ts +7 -1
- package/corpus/templates/clips/app/i18n/pt-BR.ts +7 -1
- package/corpus/templates/clips/app/i18n/zh-CN.ts +8 -1
- package/corpus/templates/clips/app/i18n/zh-TW.ts +8 -1
- package/corpus/templates/clips/app/lib/recording-visibility.ts +70 -0
- package/corpus/templates/clips/app/routes/_app.shared.tsx +20 -0
- package/corpus/templates/clips/app/routes/download.tsx +24 -8
- package/corpus/templates/clips/app/routes/embed.$shareId.tsx +2 -0
- package/corpus/templates/clips/app/routes/r.$recordingId.tsx +115 -2
- package/corpus/templates/clips/app/routes/record.tsx +62 -0
- package/corpus/templates/clips/app/routes/share.$shareId.tsx +25 -16
- package/corpus/templates/clips/changelog/2026-07-10-clips-desktop-is-now-available-for-linux-with-appimage-debia.md +6 -0
- package/corpus/templates/clips/changelog/2026-07-10-clips-downloads-updates-sooner-in-the-background-and-offers-.md +6 -0
- package/corpus/templates/clips/changelog/2026-07-10-clips-shared-with-you-now-appear-in-a-searchable-shared-with.md +6 -0
- package/corpus/templates/clips/changelog/2026-07-10-clips-with-missing-mobile-video-frames-can-be-repaired-witho.md +6 -0
- package/corpus/templates/clips/changelog/2026-07-10-comment-replies-now-open-inline-and-focus-immediately-while-.md +6 -0
- package/corpus/templates/clips/changelog/2026-07-10-dismissed-upload-warnings-now-keep-recordings-in-clip-drafts.md +6 -0
- package/corpus/templates/clips/changelog/2026-07-10-dragging-the-meeting-recorder-no-longer-opens-the-expanded.md +6 -0
- package/corpus/templates/clips/changelog/2026-07-10-finishing-meeting-notes-no-longer-opens-your-browser.md +6 -0
- package/corpus/templates/clips/changelog/2026-07-10-meeting-recordings-now-keep-microphone-audio-and-recover-tra.md +6 -0
- package/corpus/templates/clips/changelog/2026-07-10-mobile-camera-recordings-pause-while-backgrounded.md +6 -0
- package/corpus/templates/clips/changelog/2026-07-10-mp4-downloads-now-show-progress-immediately-after-the-option.md +6 -0
- package/corpus/templates/clips/changelog/2026-07-10-recording-pages-now-open-as-soon-as-you-stop-with-a-share-li.md +6 -0
- package/corpus/templates/clips/changelog/2026-07-10-recording-pause-and-resume-controls-now-respond-reliably-on-.md +6 -0
- package/corpus/templates/clips/changelog/2026-07-10-recordings-now-seek-smoothly-downloads-use-the-correct-file-.md +6 -0
- package/corpus/templates/clips/changelog/2026-07-10-s3-compatible-storage-now-saves-hosted-recordings-without-re.md +6 -0
- package/corpus/templates/clips/changelog/2026-07-10-starting-and-joining-a-meeting-now-closes-the-desktop-popover.md +6 -0
- package/corpus/templates/clips/changelog/2026-07-10-timestamped-comments-now-appear-over-the-video-as-playback-r.md +6 -0
- package/corpus/templates/clips/changelog/2026-07-10-transcript-backed-titles-and-summaries-now-finish-after-recording.md +6 -0
- package/corpus/templates/clips/changelog/2026-07-10-zoom-meetings-now-open-directly-in-the-desktop-app.md +6 -0
- package/corpus/templates/clips/chrome-extension/src/overlay.ts +49 -7
- package/corpus/templates/clips/desktop/README.md +22 -6
- package/corpus/templates/clips/desktop/package.json +1 -1
- package/corpus/templates/clips/desktop/src/app.tsx +102 -61
- package/corpus/templates/clips/desktop/src/components/ReadinessPanel.tsx +15 -9
- package/corpus/templates/clips/desktop/src/hooks/useMeetingTranscription.ts +8 -14
- package/corpus/templates/clips/desktop/src/lib/finalization-guard.ts +22 -0
- package/corpus/templates/clips/desktop/src/lib/meeting-join-url.ts +33 -0
- package/corpus/templates/clips/desktop/src/lib/pause-transition.ts +79 -0
- package/corpus/templates/clips/desktop/src/lib/permissions.ts +3 -1
- package/corpus/templates/clips/desktop/src/lib/pill-interaction.ts +19 -0
- package/corpus/templates/clips/desktop/src/lib/recorder.ts +187 -159
- package/corpus/templates/clips/desktop/src/lib/transcription-engine.ts +3 -2
- package/corpus/templates/clips/desktop/src/lib/updater.ts +26 -4
- package/corpus/templates/clips/desktop/src/overlays/finalizing.tsx +4 -8
- package/corpus/templates/clips/desktop/src/overlays/meeting-notification.tsx +3 -2
- package/corpus/templates/clips/desktop/src/overlays/recording-pill.tsx +32 -6
- package/corpus/templates/clips/desktop/src/overlays/toolbar.tsx +50 -5
- package/corpus/templates/clips/desktop/src/styles.css +11 -19
- package/corpus/templates/clips/desktop/src-tauri/Cargo.toml +1 -1
- package/corpus/templates/clips/desktop/src-tauri/src/clips/mod.rs +2 -2
- package/corpus/templates/clips/desktop/src-tauri/src/lib.rs +2 -1
- package/corpus/templates/clips/desktop/src-tauri/src/native_screen.rs +121 -4
- package/corpus/templates/clips/desktop/src-tauri/src/native_speech.rs +97 -17
- package/corpus/templates/clips/desktop/src-tauri/src/permission_status.rs +11 -7
- package/corpus/templates/clips/desktop/src-tauri/src/whisper_speech.rs +80 -5
- package/corpus/templates/clips/desktop/src-tauri/tauri.conf.json +1 -1
- package/corpus/templates/clips/desktop/src-tauri/tauri.linux.conf.json +11 -0
- package/corpus/templates/clips/netlify.toml +3 -0
- package/corpus/templates/clips/server/lib/post-finalize-dispatch.ts +106 -0
- package/corpus/templates/clips/server/lib/public-agent-context.ts +9 -1
- package/corpus/templates/clips/server/lib/resumable-upload-provider.ts +52 -0
- package/corpus/templates/clips/server/lib/s3-upload-provider.ts +433 -85
- package/corpus/templates/clips/server/lib/video-remux.ts +114 -0
- package/corpus/templates/clips/server/routes/api/_agent-native-background/post-finalize-worker.post.ts +109 -0
- package/corpus/templates/clips/server/routes/api/clips-updater.json.get.ts +22 -11
- package/corpus/templates/clips/server/routes/api/public-recording.get.ts +4 -2
- package/corpus/templates/clips/server/routes/api/uploads/[recordingId]/abort.post.ts +47 -5
- package/corpus/templates/clips/server/routes/api/uploads/[recordingId]/chunk.post.ts +10 -2
- package/corpus/templates/clips/shared/share-loader-response.ts +12 -0
- package/corpus/templates/clips/shared/transcript-status.ts +40 -0
- package/corpus/templates/clips/vitest.config.ts +23 -0
- package/corpus/templates/content/.agents/skills/capture-learnings/SKILL.md +22 -9
- package/corpus/templates/content/.agents/skills/content/SKILL.md +57 -5
- package/corpus/templates/content/AGENTS.md +65 -55
- package/corpus/templates/content/actions/_builder-cms-read-client.ts +10 -16
- package/corpus/templates/content/actions/_database-source-utils.ts +58 -11
- package/corpus/templates/content/actions/_property-utils.ts +30 -2
- package/corpus/templates/content/actions/add-content-database-source-field-property.ts +312 -114
- package/corpus/templates/content/actions/submit-content-database-form.ts +497 -0
- package/corpus/templates/content/actions/update-content-database-view.ts +8 -1
- package/corpus/templates/content/actions/view-screen.ts +4 -1
- package/corpus/templates/content/agent-native.app-skill.json +1 -1
- package/corpus/templates/content/app/components/editor/DocumentEditor.tsx +28 -9
- package/corpus/templates/content/app/components/editor/database/DatabaseView.tsx +250 -64
- package/corpus/templates/content/app/components/editor/database/FormView.tsx +460 -0
- package/corpus/templates/content/app/components/editor/database/navigation-state.ts +3 -0
- package/corpus/templates/content/app/components/editor/database/settings.tsx +30 -37
- package/corpus/templates/content/app/components/editor/database/shared.tsx +2 -0
- package/corpus/templates/content/app/components/editor/database/view-config.ts +29 -1
- package/corpus/templates/content/app/components/ui/textarea.tsx +1 -0
- package/corpus/templates/content/app/hooks/use-content-database.ts +22 -0
- package/corpus/templates/content/app/i18n/zh-TW.ts +21 -0
- package/corpus/templates/content/app/i18n-data.ts +225 -0
- package/corpus/templates/content/changelog/2026-07-10-builder-backed-properties-now-load-current-source-values-as-.md +6 -0
- package/corpus/templates/content/changelog/2026-07-10-builder-database-refreshes-now-stay-explicit-and-accurate.md +6 -0
- package/corpus/templates/content/changelog/2026-07-10-database-form-views-now-collect-ordered-required-answers-and.md +6 -0
- package/corpus/templates/content/changelog/2026-07-10-database-tables-now-use-a-quieter-more-compact-layout-with-c.md +6 -0
- package/corpus/templates/content/changelog/2026-07-10-open-documents-no-longer-make-constant-background-requests-w.md +6 -0
- package/corpus/templates/content/changelog/2026-07-10-slack-intake-routes-to-content-database-forms.md +6 -0
- package/corpus/templates/content/parity/matrix.md +1 -0
- package/corpus/templates/content/parity/matrix.ts +18 -0
- package/corpus/templates/content/shared/api.ts +27 -1
- package/corpus/templates/content/shared/database-form.ts +53 -0
- package/corpus/templates/design/.agents/skills/capture-learnings/SKILL.md +22 -9
- package/corpus/templates/design/.agents/skills/design-generation/SKILL.md +26 -0
- package/corpus/templates/design/.agents/skills/design-systems/SKILL.md +106 -16
- package/corpus/templates/design/AGENTS.md +79 -18
- package/corpus/templates/design/DESIGN.md +1 -1
- package/corpus/templates/design/DEVELOPING.md +1 -1
- package/corpus/templates/design/FIGMA_INTEROPERABILITY.md +116 -0
- package/corpus/templates/design/actions/create-design-from-template.ts +220 -0
- package/corpus/templates/design/actions/create-design-system.ts +92 -16
- package/corpus/templates/design/actions/delete-design-template.ts +28 -0
- package/corpus/templates/design/actions/delete-file.ts +7 -0
- package/corpus/templates/design/actions/edit-design.ts +3 -0
- package/corpus/templates/design/actions/export-design-as-figma-svg.ts +137 -5
- package/corpus/templates/design/actions/export-pdf.ts +1 -1
- package/corpus/templates/design/actions/generate-design.ts +3 -0
- package/corpus/templates/design/actions/get-design-snapshot.ts +9 -0
- package/corpus/templates/design/actions/get-figma-connection-status.ts +26 -0
- package/corpus/templates/design/actions/get-figma-design-context.ts +138 -0
- package/corpus/templates/design/actions/get-figma-styles.ts +2 -2
- package/corpus/templates/design/actions/import-figma-clipboard.ts +112 -16
- package/corpus/templates/design/actions/import-figma-frame.ts +15 -4
- package/corpus/templates/design/actions/index-design-system-with-builder.ts +4 -0
- package/corpus/templates/design/actions/list-design-templates.ts +118 -0
- package/corpus/templates/design/actions/navigate.ts +16 -2
- package/corpus/templates/design/actions/provider-api-request.ts +11 -1
- package/corpus/templates/design/actions/save-design-as-template.ts +156 -0
- package/corpus/templates/design/actions/set-active-breakpoint.ts +13 -4
- package/corpus/templates/design/actions/take-design-screenshot.ts +73 -3
- package/corpus/templates/design/actions/update-file.ts +39 -22
- package/corpus/templates/design/actions/view-screen.ts +36 -1
- package/corpus/templates/design/actions/write-local-file.ts +50 -38
- package/corpus/templates/design/app/components/design/AutoLayoutSuggestionDialog.tsx +151 -0
- package/corpus/templates/design/app/components/design/CanvasContextMenu.tsx +20 -0
- package/corpus/templates/design/app/components/design/DesignCanvas.tsx +383 -29
- package/corpus/templates/design/app/components/design/DesignEditorSkeleton.tsx +3 -3
- package/corpus/templates/design/app/components/design/DesignImportPanel.tsx +384 -9
- package/corpus/templates/design/app/components/design/EditPanel.tsx +105 -32
- package/corpus/templates/design/app/components/design/MultiScreenCanvas.tsx +131 -46
- package/corpus/templates/design/app/components/design/TweaksPanel.tsx +6 -0
- package/corpus/templates/design/app/components/design/bridge/editor-chrome.bridge.ts +545 -54
- package/corpus/templates/design/app/components/design/bridge/embedded-wheel.bridge.ts +40 -0
- package/corpus/templates/design/app/components/design/code-workbench/CodeWorkbench.tsx +1 -0
- package/corpus/templates/design/app/components/design/code-workbench/explorer/ExplorerView.tsx +1 -0
- package/corpus/templates/design/app/components/design/code-workbench/explorer/FileTree.tsx +5 -1
- package/corpus/templates/design/app/components/design/code-workbench/workspace/create-providers.ts +2 -0
- package/corpus/templates/design/app/components/design/code-workbench/workspace/localhost-provider.ts +3 -1
- package/corpus/templates/design/app/components/design/code-workbench/workspace/types.ts +2 -0
- package/corpus/templates/design/app/components/design/edit-panel/element-identity.ts +19 -0
- package/corpus/templates/design/app/components/design/edit-panel/frame-presets-panel.tsx +1 -0
- package/corpus/templates/design/app/components/design/edit-panel/interaction-state-helpers.ts +27 -0
- package/corpus/templates/design/app/components/design/inspector/InteractionStatePanel.tsx +137 -81
- package/corpus/templates/design/app/components/design/inspector/frame-size-presets.ts +25 -5
- package/corpus/templates/design/app/components/design/multi-screen/chrome-transitions.ts +1 -1
- package/corpus/templates/design/app/components/design/multi-screen/frame-geometry.ts +350 -3
- package/corpus/templates/design/app/components/design/multi-screen/overview-layout.ts +13 -0
- package/corpus/templates/design/app/components/design/multi-screen/types.ts +22 -1
- package/corpus/templates/design/app/components/design/types.ts +4 -0
- package/corpus/templates/design/app/components/design-system/ProductionDesignSystemShowcase.tsx +208 -0
- package/corpus/templates/design/app/components/editor/FigmaLinkComposerBubble.tsx +321 -0
- package/corpus/templates/design/app/components/editor/PromptDialog.tsx +24 -4
- package/corpus/templates/design/app/components/layout/Layout.tsx +16 -2
- package/corpus/templates/design/app/components/layout/Sidebar.tsx +2 -0
- package/corpus/templates/design/app/components/templates/TemplatePreview.tsx +72 -0
- package/corpus/templates/design/app/global.css +2 -35
- package/corpus/templates/design/app/hooks/use-navigation-state.ts +10 -0
- package/corpus/templates/design/app/i18n/zh-TW.ts +127 -5
- package/corpus/templates/design/app/i18n-breakpoints.ts +209 -0
- package/corpus/templates/design/app/i18n-data.ts +1317 -59
- package/corpus/templates/design/app/i18n-template-feature.ts +458 -0
- package/corpus/templates/design/app/lib/clipboard-content-lineage.ts +64 -0
- package/corpus/templates/design/app/lib/design-clipboard-managed-styles.ts +247 -0
- package/corpus/templates/design/app/lib/design-clipboard.ts +259 -0
- package/corpus/templates/design/app/lib/design-file-upload.ts +87 -0
- package/corpus/templates/design/app/lib/design-import.ts +198 -13
- package/corpus/templates/design/app/lib/desktop-design-preview.ts +423 -0
- package/corpus/templates/design/app/lib/figma-clipboard.ts +74 -8
- package/corpus/templates/design/app/lib/figma-connection.ts +161 -0
- package/corpus/templates/design/app/lib/figma-svg-copy.ts +814 -22
- package/corpus/templates/design/app/lib/figma-url.ts +77 -0
- package/corpus/templates/design/app/lib/pending-generation.ts +35 -0
- package/corpus/templates/design/app/pages/DesignSystems.tsx +236 -177
- package/corpus/templates/design/app/pages/Index.tsx +38 -0
- package/corpus/templates/design/app/pages/Templates.tsx +498 -0
- package/corpus/templates/design/app/pages/design-editor/auto-layout-suggestion.ts +328 -0
- package/corpus/templates/design/app/pages/design-editor/clone-idrefs.ts +113 -0
- package/corpus/templates/design/app/pages/design-editor/created-screen-navigation.ts +55 -0
- package/corpus/templates/design/app/pages/design-editor/editor-session.ts +32 -0
- package/corpus/templates/design/app/pages/design-editor/editor-state.ts +49 -2
- package/corpus/templates/design/app/pages/design-editor/export-capture.ts +296 -0
- package/corpus/templates/design/app/pages/design-editor/history.ts +101 -2
- package/corpus/templates/design/app/pages/design-editor/latest-write-queue.ts +56 -0
- package/corpus/templates/design/app/pages/design-editor/layout-operations.ts +28 -1
- package/corpus/templates/design/app/pages/design-editor/overview-camera.ts +34 -0
- package/corpus/templates/design/app/pages/design-editor/pending-edits.ts +202 -6
- package/corpus/templates/design/app/pages/design-editor/pending-structure-verification.ts +92 -0
- package/corpus/templates/design/app/pages/design-editor/performance-buffer-guard.ts +80 -0
- package/corpus/templates/design/app/pages/design-editor/save-failure.ts +58 -0
- package/corpus/templates/design/app/routes/templates.tsx +4 -6
- package/corpus/templates/design/changelog/2026-07-10-app-workspaces-now-use-clean-borderless-main-surfaces-throug.md +6 -0
- package/corpus/templates/design/changelog/2026-07-10-ask-chat-what-s-in-a-figma-file-or-frame-structure-screensho.md +6 -0
- package/corpus/templates/design/changelog/2026-07-10-canvas-edits-now-reject-malformed-html-before-it-can-corrupt.md +6 -0
- package/corpus/templates/design/changelog/2026-07-10-complex-designs-now-export-as-valid-secure-svgs-and-crisp-ra.md +6 -0
- package/corpus/templates/design/changelog/2026-07-10-complex-figma-masks-arcs-rich-text-transformed-images-and-ad.md +6 -0
- package/corpus/templates/design/changelog/2026-07-10-concurrent-agent-and-artboard-edits-no-longer-show-misleadin.md +6 -0
- package/corpus/templates/design/changelog/2026-07-10-copied-layers-paste-across-designs-and-browser-tabs.md +6 -0
- package/corpus/templates/design/changelog/2026-07-10-copy-and-download-editable-figma-svg.md +6 -0
- package/corpus/templates/design/changelog/2026-07-10-copying-design-text-now-pastes-readable-text-into-other-apps.md +6 -0
- package/corpus/templates/design/changelog/2026-07-10-deleted-screens-can-be-restored-with-undo-and-removed-again-.md +6 -0
- package/corpus/templates/design/changelog/2026-07-10-design-changes-now-save-before-switching-apps-and-retry-when.md +6 -0
- package/corpus/templates/design/changelog/2026-07-10-design-stays-usable-on-phones-by-keeping-editor-panels-and-f.md +6 -0
- package/corpus/templates/design/changelog/2026-07-10-designs-with-html-examples-inside-alpine-attributes-or-comme.md +6 -0
- package/corpus/templates/design/changelog/2026-07-10-download-all-screens-as-one-multi-page-pdf-from-the-overview.md +6 -0
- package/corpus/templates/design/changelog/2026-07-10-duplicated-layers-now-keep-labels-aria-relationships-fragmen.md +6 -0
- package/corpus/templates/design/changelog/2026-07-10-fig-import-results-stay-compact.md +6 -0
- package/corpus/templates/design/changelog/2026-07-10-figma-imports-now-load-real-fonts-fix-rotated-gradient-dashe.md +6 -0
- package/corpus/templates/design/changelog/2026-07-10-figma-links-in-chat-and-the-import-tab-now-offer-secure-one-.md +6 -0
- package/corpus/templates/design/changelog/2026-07-10-fixed-cmd-z-not-restoring-content-after-an-agent-driven-desi.md +6 -0
- package/corpus/templates/design/changelog/2026-07-10-fixed-download-pdf-being-unreachable-from-the-export-panel-e.md +6 -0
- package/corpus/templates/design/changelog/2026-07-10-fixed-dragging-a-layer-out-of-an-auto-layout-row-column-no-l.md +6 -0
- package/corpus/templates/design/changelog/2026-07-10-fixed-figma-svg-export-text-wrapping-sizing-and-inner-layer.md +6 -0
- package/corpus/templates/design/changelog/2026-07-10-fixed-hiding-or-locking-one-layer-no-longer-hides-or-blocks-.md +6 -0
- package/corpus/templates/design/changelog/2026-07-10-fixed-png-screenshots-of-tall-screens-being-cropped-to-one-v.md +6 -0
- package/corpus/templates/design/changelog/2026-07-10-fixed-png-svg-exports-capturing-broken-layout-when-webfonts-.md +6 -0
- package/corpus/templates/design/changelog/2026-07-10-frame-tool-now-offers-standard-ad-unit-size-presets-medium-r.md +6 -0
- package/corpus/templates/design/changelog/2026-07-10-full-view-controls-stay-within-their-frame-instead-of-coveri.md +6 -0
- package/corpus/templates/design/changelog/2026-07-10-hover-focus-focus-visible-pressed-and-disabled-states-now-pr.md +6 -0
- package/corpus/templates/design/changelog/2026-07-10-interactive-designs-no-longer-appear-blank-in-the-canvas-whe.md +6 -0
- package/corpus/templates/design/changelog/2026-07-10-layer-drops-now-land-in-the-intended-grid-row-stay-visually-.md +6 -0
- package/corpus/templates/design/changelog/2026-07-10-local-code-workspaces-now-keep-unsaved-edits-across-panel-sw.md +6 -0
- package/corpus/templates/design/changelog/2026-07-10-local-visual-editing-now-keeps-authenticated-sessions-shared.md +6 -0
- package/corpus/templates/design/changelog/2026-07-10-long-overview-editing-sessions-lots-of-pan-zoom-screen-switc.md +6 -0
- package/corpus/templates/design/changelog/2026-07-10-long-running-agent-work-no-longer-shows-a-premature-stuck-wa.md +6 -0
- package/corpus/templates/design/changelog/2026-07-10-managed-figma-connections-are-recognized-automatically.md +6 -0
- package/corpus/templates/design/changelog/2026-07-10-new-designs-can-open-directly-in-the-editor-without-a-pr.md +6 -0
- package/corpus/templates/design/changelog/2026-07-10-new-screens-are-selected-and-revealed-immediately.md +6 -0
- package/corpus/templates/design/changelog/2026-07-10-new-text-layers-undo-as-one-safe-creation.md +6 -0
- package/corpus/templates/design/changelog/2026-07-10-preview-and-apply-inferred-auto-layout-without-changing-yo.md +5 -0
- package/corpus/templates/design/changelog/2026-07-10-print-pdf-exports-and-paper-size-presets-letter-a4-now-match.md +6 -0
- package/corpus/templates/design/changelog/2026-07-10-rapid-breakpoint-and-edit-scope-changes-no-longer-jump-back-.md +6 -0
- package/corpus/templates/design/changelog/2026-07-10-responsive-breakpoint-previews-stay-visible-while-panning-ac.md +6 -0
- package/corpus/templates/design/changelog/2026-07-10-responsive-frame-editing.md +6 -0
- package/corpus/templates/design/changelog/2026-07-10-reusable-design-templates.md +6 -0
- package/corpus/templates/design/changelog/2026-07-10-rich-design-clipboard-markers-are-now-accepted-only-from-the.md +6 -0
- package/corpus/templates/design/changelog/2026-07-10-screen-overview-frames-now-use-a-clearer-interact-action-wit.md +6 -0
- package/corpus/templates/design/changelog/2026-07-10-start-designs-from-source-linked-material-3-carbon-or-primer.md +6 -0
- package/corpus/templates/design/changelog/2026-07-10-tweaks-guidance.md +6 -0
- package/corpus/templates/design/changelog/2026-07-10-uploaded-fig-files-can-now-become-editable-design-screens-wi.md +6 -0
- package/corpus/templates/design/e2e/helpers.ts +18 -7
- package/corpus/templates/design/package.json +2 -0
- package/corpus/templates/design/scripts/qa-figma-stress-import.ts +96 -0
- package/corpus/templates/design/server/db/index.ts +10 -0
- package/corpus/templates/design/server/db/schema.ts +44 -0
- package/corpus/templates/design/server/handlers/import-design-file.ts +114 -80
- package/corpus/templates/design/server/handlers/index-design-system-with-builder.ts +19 -6
- package/corpus/templates/design/server/lib/design-export.ts +240 -3
- package/corpus/templates/design/server/lib/design-template-data.ts +89 -0
- package/corpus/templates/design/server/lib/design-to-figma-svg.ts +250 -26
- package/corpus/templates/design/server/lib/fig-file-decoder.ts +839 -0
- package/corpus/templates/design/server/lib/fig-file-import.ts +287 -0
- package/corpus/templates/design/server/lib/fig-file-limits.ts +3 -0
- package/corpus/templates/design/server/lib/fig-file-to-html.ts +2568 -0
- package/corpus/templates/design/server/lib/figma-design-context.ts +359 -0
- package/corpus/templates/design/server/lib/figma-node-import.ts +478 -22
- package/corpus/templates/design/server/lib/figma-node-to-html.ts +554 -29
- package/corpus/templates/design/server/lib/local-figma-qa-upload.ts +112 -0
- package/corpus/templates/design/server/lib/verify-write-grant.ts +16 -2
- package/corpus/templates/design/server/lib/visible-clipboard-html.ts +13 -3
- package/corpus/templates/design/server/plugins/agent-chat.ts +7 -0
- package/corpus/templates/design/server/plugins/db.ts +42 -0
- package/corpus/templates/design/server/plugins/local-figma-qa-upload.ts +7 -0
- package/corpus/templates/design/server/register-secrets.ts +8 -8
- package/corpus/templates/design/server/routes/api/qa-figma-import-assets/[assetId].get.ts +46 -0
- package/corpus/templates/design/server/source-workspace.ts +131 -13
- package/corpus/templates/design/shared/code-layer.ts +105 -28
- package/corpus/templates/design/shared/design-system-templates.ts +301 -0
- package/corpus/templates/design/shared/design-template-presets.ts +195 -0
- package/corpus/templates/design/shared/figma-url.ts +8 -0
- package/corpus/templates/design/shared/html-integrity.ts +401 -0
- package/corpus/templates/design/shared/interaction-states.ts +318 -23
- package/corpus/templates/design/shared/locked-layers.ts +151 -0
- package/corpus/templates/dispatch/.agents/skills/capture-learnings/SKILL.md +22 -9
- package/corpus/templates/dispatch/AGENTS.md +10 -2
- package/corpus/templates/dispatch/actions/view-screen.ts +11 -0
- package/corpus/templates/dispatch/app/hooks/use-navigation-state.ts +13 -0
- package/corpus/templates/dispatch/app/i18n/zh-TW.ts +51 -0
- package/corpus/templates/dispatch/app/i18n-data.ts +572 -1
- package/corpus/templates/dispatch/app/routes/operations.tsx +1 -0
- package/corpus/templates/dispatch/changelog/2026-07-10-connect-slack-workspaces-with-oauth-and-manage-channel-ident.md +6 -0
- package/corpus/templates/dispatch/changelog/2026-07-10-dispatch-now-has-a-cleaner-chat-history-and-quieter-sidebar-.md +6 -0
- package/corpus/templates/dispatch/changelog/2026-07-10-microsoft-teams-bots-and-discord-slash-commands-can-now-conn.md +6 -0
- package/corpus/templates/dispatch/changelog/2026-07-10-operations-console-brings-agent-monitoring-and-database-inspection-tog.md +6 -0
- package/corpus/templates/dispatch/changelog/2026-07-10-slack-and-telegram-now-route-uptime-monitor-requests-to-anal.md +6 -0
- package/corpus/templates/forms/.agents/skills/capture-learnings/SKILL.md +22 -9
- package/corpus/templates/forms/.agents/skills/form-publishing/SKILL.md +7 -0
- package/corpus/templates/forms/AGENTS.md +4 -0
- package/corpus/templates/forms/actions/create-form.ts +44 -7
- package/corpus/templates/forms/actions/lib/assert-publishable-form.ts +38 -0
- package/corpus/templates/forms/actions/patch-form-fields.ts +4 -0
- package/corpus/templates/forms/actions/update-form.ts +2 -36
- package/corpus/templates/forms/app/i18n/ar-SA.ts +3 -0
- package/corpus/templates/forms/app/i18n/de-DE.ts +3 -0
- package/corpus/templates/forms/app/i18n/en-US.ts +3 -0
- package/corpus/templates/forms/app/i18n/es-ES.ts +3 -0
- package/corpus/templates/forms/app/i18n/fr-FR.ts +3 -0
- package/corpus/templates/forms/app/i18n/hi-IN.ts +3 -0
- package/corpus/templates/forms/app/i18n/ja-JP.ts +3 -0
- package/corpus/templates/forms/app/i18n/ko-KR.ts +3 -0
- package/corpus/templates/forms/app/i18n/pt-BR.ts +3 -0
- package/corpus/templates/forms/app/i18n/zh-CN.ts +2 -0
- package/corpus/templates/forms/app/i18n/zh-TW.ts +3 -0
- package/corpus/templates/forms/app/pages/FormBuilderPage.tsx +17 -0
- package/corpus/templates/forms/changelog/2026-07-10-agent-created-published-forms-now-return-the-anonymous-publi.md +6 -0
- package/corpus/templates/forms/changelog/2026-07-10-published-forms-can-no-longer-be-edited-into-an-unusable-emp.md +6 -0
- package/corpus/templates/forms/server/handlers/submissions.ts +4 -3
- package/corpus/templates/forms/server/plugins/agent-chat.ts +1 -0
- package/corpus/templates/forms/shared/types.ts +5 -0
- package/corpus/templates/mail/.agents/skills/capture-learnings/SKILL.md +22 -9
- package/corpus/templates/mail/actions/get-integration-statuses.ts +36 -0
- package/corpus/templates/mail/app/components/email/EmailThread.tsx +3 -2
- package/corpus/templates/mail/app/components/email/IntegrationsSidebar.tsx +3 -3
- package/corpus/templates/mail/app/components/layout/AppLayout.tsx +2 -2
- package/corpus/templates/mail/app/hooks/use-apollo.ts +5 -71
- package/corpus/templates/mail/app/hooks/use-draft-queue.ts +1 -1
- package/corpus/templates/mail/app/hooks/use-integrations.ts +51 -48
- package/corpus/templates/mail/app/lib/integration-status.ts +31 -0
- package/corpus/templates/mail/app/lib/sync-invalidation.ts +5 -0
- package/corpus/templates/mail/app/pages/SettingsPage.tsx +3 -0
- package/corpus/templates/mail/app/root.tsx +22 -12
- package/corpus/templates/mail/changelog/2026-07-10-email-content-backgrounds-now-blend-cleanly-with-dark-mode.md +6 -0
- package/corpus/templates/mail/changelog/2026-07-10-mail-navigation-now-uses-a-clean-borderless-drawer.md +6 -0
- package/corpus/templates/mail/changelog/2026-07-10-mail-settings-now-group-drafting-automation-and-connected-se.md +6 -0
- package/corpus/templates/mail/changelog/2026-07-10-organization-settings-now-opens-directly-from-the-workspace-.md +6 -0
- package/corpus/templates/plan/.agents/skills/capture-learnings/SKILL.md +22 -9
- package/corpus/templates/plan/app/lib/plan-local-bridge.ts +4 -1
- package/corpus/templates/plan/changelog/2026-07-10-local-plans-now-keep-valid-content-visible-when-one-generate.md +6 -0
- package/corpus/templates/plan/server/lib/local-plan-files.ts +4 -1
- package/corpus/templates/slides/.agents/skills/capture-learnings/SKILL.md +22 -9
- package/dist/a2a/artifact-response.d.ts.map +1 -1
- package/dist/a2a/artifact-response.js +88 -2
- package/dist/a2a/artifact-response.js.map +1 -1
- package/dist/a2a/client.d.ts +9 -0
- package/dist/a2a/client.d.ts.map +1 -1
- package/dist/a2a/client.js +1 -0
- package/dist/a2a/client.js.map +1 -1
- package/dist/a2a/handlers.d.ts.map +1 -1
- package/dist/a2a/handlers.js +24 -69
- package/dist/a2a/handlers.js.map +1 -1
- package/dist/a2a/types.d.ts +2 -0
- package/dist/a2a/types.d.ts.map +1 -1
- package/dist/a2a/types.js.map +1 -1
- package/dist/agent/context-xray/tokenize.d.ts.map +1 -1
- package/dist/agent/context-xray/tokenize.js +6 -1
- package/dist/agent/context-xray/tokenize.js.map +1 -1
- package/dist/agent/durable-background.d.ts +11 -0
- package/dist/agent/durable-background.d.ts.map +1 -1
- package/dist/agent/durable-background.js +17 -0
- package/dist/agent/durable-background.js.map +1 -1
- package/dist/agent/engine/ai-sdk-engine.d.ts.map +1 -1
- package/dist/agent/engine/ai-sdk-engine.js +8 -3
- package/dist/agent/engine/ai-sdk-engine.js.map +1 -1
- package/dist/agent/engine/anthropic-engine.d.ts.map +1 -1
- package/dist/agent/engine/anthropic-engine.js +2 -4
- package/dist/agent/engine/anthropic-engine.js.map +1 -1
- package/dist/agent/engine/builder-engine.d.ts +1 -1
- package/dist/agent/engine/builder-engine.d.ts.map +1 -1
- package/dist/agent/engine/builder-engine.js +2 -3
- package/dist/agent/engine/builder-engine.js.map +1 -1
- package/dist/agent/engine/index.d.ts +1 -1
- package/dist/agent/engine/index.d.ts.map +1 -1
- package/dist/agent/engine/index.js +1 -1
- package/dist/agent/engine/index.js.map +1 -1
- package/dist/agent/engine/registry.d.ts +13 -0
- package/dist/agent/engine/registry.d.ts.map +1 -1
- package/dist/agent/engine/registry.js +33 -0
- package/dist/agent/engine/registry.js.map +1 -1
- package/dist/agent/harness/ai-sdk-adapter.d.ts.map +1 -1
- package/dist/agent/harness/ai-sdk-adapter.js +3 -1
- package/dist/agent/harness/ai-sdk-adapter.js.map +1 -1
- package/dist/agent/harness/background.d.ts +9 -9
- package/dist/agent/harness/background.d.ts.map +1 -1
- package/dist/agent/harness/background.js +77 -19
- package/dist/agent/harness/background.js.map +1 -1
- package/dist/agent/harness/index.d.ts +1 -0
- package/dist/agent/harness/index.d.ts.map +1 -1
- package/dist/agent/harness/index.js +1 -0
- package/dist/agent/harness/index.js.map +1 -1
- package/dist/agent/harness/lifecycle.d.ts +45 -0
- package/dist/agent/harness/lifecycle.d.ts.map +1 -0
- package/dist/agent/harness/lifecycle.js +318 -0
- package/dist/agent/harness/lifecycle.js.map +1 -0
- package/dist/agent/harness/runner.d.ts.map +1 -1
- package/dist/agent/harness/runner.js +29 -1
- package/dist/agent/harness/runner.js.map +1 -1
- package/dist/agent/harness/store.d.ts +2 -0
- package/dist/agent/harness/store.d.ts.map +1 -1
- package/dist/agent/harness/store.js +17 -3
- package/dist/agent/harness/store.js.map +1 -1
- package/dist/agent/model-config.d.ts +2 -2
- package/dist/agent/model-config.d.ts.map +1 -1
- package/dist/agent/model-config.js +4 -1
- package/dist/agent/model-config.js.map +1 -1
- package/dist/agent/production-agent.d.ts +40 -2
- package/dist/agent/production-agent.d.ts.map +1 -1
- package/dist/agent/production-agent.js +150 -9
- package/dist/agent/production-agent.js.map +1 -1
- package/dist/agent/run-manager.d.ts +44 -2
- package/dist/agent/run-manager.d.ts.map +1 -1
- package/dist/agent/run-manager.js +90 -9
- package/dist/agent/run-manager.js.map +1 -1
- package/dist/agent/run-store.d.ts +109 -0
- package/dist/agent/run-store.d.ts.map +1 -1
- package/dist/agent/run-store.js +206 -15
- package/dist/agent/run-store.js.map +1 -1
- package/dist/agent/types.d.ts +22 -0
- package/dist/agent/types.d.ts.map +1 -1
- package/dist/agent/types.js.map +1 -1
- package/dist/application-state/index.d.ts +1 -1
- package/dist/application-state/index.d.ts.map +1 -1
- package/dist/application-state/index.js +1 -1
- package/dist/application-state/index.js.map +1 -1
- package/dist/application-state/store.d.ts +6 -0
- package/dist/application-state/store.d.ts.map +1 -1
- package/dist/application-state/store.js +31 -0
- package/dist/application-state/store.js.map +1 -1
- package/dist/audit/record.d.ts.map +1 -1
- package/dist/audit/record.js +29 -0
- package/dist/audit/record.js.map +1 -1
- package/dist/audit/store.d.ts.map +1 -1
- package/dist/audit/store.js +62 -3
- package/dist/audit/store.js.map +1 -1
- package/dist/audit/types.d.ts +13 -0
- package/dist/audit/types.d.ts.map +1 -1
- package/dist/audit/types.js.map +1 -1
- package/dist/automation/index.d.ts +193 -0
- package/dist/automation/index.d.ts.map +1 -0
- package/dist/automation/index.js +464 -0
- package/dist/automation/index.js.map +1 -0
- package/dist/cli/code-agent-connector.d.ts +9 -0
- package/dist/cli/code-agent-connector.d.ts.map +1 -1
- package/dist/cli/code-agent-connector.js +212 -10
- package/dist/cli/code-agent-connector.js.map +1 -1
- package/dist/cli/code-agent-executor.d.ts +2 -0
- package/dist/cli/code-agent-executor.d.ts.map +1 -1
- package/dist/cli/code-agent-executor.js +8 -1
- package/dist/cli/code-agent-executor.js.map +1 -1
- package/dist/cli/create.d.ts.map +1 -1
- package/dist/cli/create.js +10 -3
- package/dist/cli/create.js.map +1 -1
- package/dist/cli/design-connect.d.ts.map +1 -1
- package/dist/cli/design-connect.js +492 -35
- package/dist/cli/design-connect.js.map +1 -1
- package/dist/client/AgentPanel.d.ts +7 -1
- package/dist/client/AgentPanel.d.ts.map +1 -1
- package/dist/client/AgentPanel.js +38 -13
- package/dist/client/AgentPanel.js.map +1 -1
- package/dist/client/AssistantChat.d.ts +21 -0
- package/dist/client/AssistantChat.d.ts.map +1 -1
- package/dist/client/AssistantChat.js +147 -49
- package/dist/client/AssistantChat.js.map +1 -1
- package/dist/client/MultiTabAssistantChat.d.ts.map +1 -1
- package/dist/client/MultiTabAssistantChat.js +17 -38
- package/dist/client/MultiTabAssistantChat.js.map +1 -1
- package/dist/client/RunStuckBanner.d.ts +14 -1
- package/dist/client/RunStuckBanner.d.ts.map +1 -1
- package/dist/client/RunStuckBanner.js +35 -7
- package/dist/client/RunStuckBanner.js.map +1 -1
- package/dist/client/agent-chat-adapter.d.ts +4 -1
- package/dist/client/agent-chat-adapter.d.ts.map +1 -1
- package/dist/client/agent-chat-adapter.js +49 -4
- package/dist/client/agent-chat-adapter.js.map +1 -1
- package/dist/client/appearance.d.ts +4 -2
- package/dist/client/appearance.d.ts.map +1 -1
- package/dist/client/appearance.js +8 -5
- package/dist/client/appearance.js.map +1 -1
- package/dist/client/automation.d.ts +14 -0
- package/dist/client/automation.d.ts.map +1 -0
- package/dist/client/automation.js +9 -0
- package/dist/client/automation.js.map +1 -0
- package/dist/client/chat/connectors.d.ts.map +1 -1
- package/dist/client/chat/connectors.js +206 -28
- package/dist/client/chat/connectors.js.map +1 -1
- package/dist/client/chat/message-components.d.ts.map +1 -1
- package/dist/client/chat/message-components.js +17 -1
- package/dist/client/chat/message-components.js.map +1 -1
- package/dist/client/chat/run-recovery.d.ts +4 -0
- package/dist/client/chat/run-recovery.d.ts.map +1 -1
- package/dist/client/chat/run-recovery.js +12 -10
- package/dist/client/chat/run-recovery.js.map +1 -1
- package/dist/client/chat/runtime.d.ts.map +1 -1
- package/dist/client/chat/runtime.js +84 -24
- package/dist/client/chat/runtime.js.map +1 -1
- package/dist/client/chat/tool-call-display.d.ts +8 -1
- package/dist/client/chat/tool-call-display.d.ts.map +1 -1
- package/dist/client/chat/tool-call-display.js +21 -3
- package/dist/client/chat/tool-call-display.js.map +1 -1
- package/dist/client/composer/RealtimeVoiceMode.d.ts +54 -0
- package/dist/client/composer/RealtimeVoiceMode.d.ts.map +1 -0
- package/dist/client/composer/RealtimeVoiceMode.js +63 -0
- package/dist/client/composer/RealtimeVoiceMode.js.map +1 -0
- package/dist/client/composer/TiptapComposer.d.ts +1 -0
- package/dist/client/composer/TiptapComposer.d.ts.map +1 -1
- package/dist/client/composer/TiptapComposer.js +25 -20
- package/dist/client/composer/TiptapComposer.js.map +1 -1
- package/dist/client/composer/VoiceButton.d.ts.map +1 -1
- package/dist/client/composer/VoiceButton.js +9 -0
- package/dist/client/composer/VoiceButton.js.map +1 -1
- package/dist/client/composer/index.d.ts +2 -0
- package/dist/client/composer/index.d.ts.map +1 -1
- package/dist/client/composer/index.js +2 -0
- package/dist/client/composer/index.js.map +1 -1
- package/dist/client/composer/useRealtimeVoiceMode.d.ts +56 -0
- package/dist/client/composer/useRealtimeVoiceMode.d.ts.map +1 -0
- package/dist/client/composer/useRealtimeVoiceMode.js +492 -0
- package/dist/client/composer/useRealtimeVoiceMode.js.map +1 -0
- package/dist/client/guided-questions.d.ts.map +1 -1
- package/dist/client/guided-questions.js +7 -2
- package/dist/client/guided-questions.js.map +1 -1
- package/dist/client/index.d.ts +3 -1
- package/dist/client/index.d.ts.map +1 -1
- package/dist/client/index.js +3 -1
- package/dist/client/index.js.map +1 -1
- package/dist/client/integrations/api.d.ts +115 -0
- package/dist/client/integrations/api.d.ts.map +1 -0
- package/dist/client/integrations/api.js +123 -0
- package/dist/client/integrations/api.js.map +1 -0
- package/dist/client/integrations/index.d.ts +1 -0
- package/dist/client/integrations/index.d.ts.map +1 -1
- package/dist/client/integrations/index.js +1 -0
- package/dist/client/integrations/index.js.map +1 -1
- package/dist/client/settings/DemoModeSection.d.ts.map +1 -1
- package/dist/client/settings/DemoModeSection.js +4 -3
- package/dist/client/settings/DemoModeSection.js.map +1 -1
- package/dist/client/settings/SettingsPanel.d.ts.map +1 -1
- package/dist/client/settings/SettingsPanel.js +4 -0
- package/dist/client/settings/SettingsPanel.js.map +1 -1
- package/dist/client/settings/SettingsTabsPage.d.ts +10 -3
- package/dist/client/settings/SettingsTabsPage.d.ts.map +1 -1
- package/dist/client/settings/SettingsTabsPage.js +49 -11
- package/dist/client/settings/SettingsTabsPage.js.map +1 -1
- package/dist/client/transcription/use-live-transcription.d.ts.map +1 -1
- package/dist/client/transcription/use-live-transcription.js +59 -5
- package/dist/client/transcription/use-live-transcription.js.map +1 -1
- package/dist/client/use-chat-models.d.ts.map +1 -1
- package/dist/client/use-chat-models.js +6 -14
- package/dist/client/use-chat-models.js.map +1 -1
- package/dist/client/use-db-sync.d.ts.map +1 -1
- package/dist/client/use-db-sync.js +87 -7
- package/dist/client/use-db-sync.js.map +1 -1
- package/dist/client/use-run-stuck-detection.d.ts +16 -1
- package/dist/client/use-run-stuck-detection.d.ts.map +1 -1
- package/dist/client/use-run-stuck-detection.js +23 -4
- package/dist/client/use-run-stuck-detection.js.map +1 -1
- package/dist/code-agents/background-controller.d.ts +1 -1
- package/dist/code-agents/background-controller.d.ts.map +1 -1
- package/dist/code-agents/background-controller.js +17 -1
- package/dist/code-agents/background-controller.js.map +1 -1
- package/dist/collab/routes.d.ts +1 -1
- package/dist/collab/ydoc-manager.d.ts +9 -1
- package/dist/collab/ydoc-manager.d.ts.map +1 -1
- package/dist/collab/ydoc-manager.js +30 -6
- package/dist/collab/ydoc-manager.js.map +1 -1
- package/dist/db/migrations.d.ts.map +1 -1
- package/dist/db/migrations.js +4 -2
- package/dist/db/migrations.js.map +1 -1
- package/dist/demo/fetch-interceptor.d.ts +5 -1
- package/dist/demo/fetch-interceptor.d.ts.map +1 -1
- package/dist/demo/fetch-interceptor.js +16 -12
- package/dist/demo/fetch-interceptor.js.map +1 -1
- package/dist/deploy/build.d.ts.map +1 -1
- package/dist/deploy/build.js +49 -4
- package/dist/deploy/build.js.map +1 -1
- package/dist/deploy/workspace-deploy.d.ts.map +1 -1
- package/dist/deploy/workspace-deploy.js +31 -2
- package/dist/deploy/workspace-deploy.js.map +1 -1
- package/dist/file-upload/types.d.ts +2 -0
- package/dist/file-upload/types.d.ts.map +1 -1
- package/dist/file-upload/types.js.map +1 -1
- package/dist/index.d.ts +2 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +2 -0
- package/dist/index.js.map +1 -1
- package/dist/integrations/a2a-continuations-store.d.ts.map +1 -1
- package/dist/integrations/a2a-continuations-store.js +6 -4
- package/dist/integrations/a2a-continuations-store.js.map +1 -1
- package/dist/integrations/adapters/discord.d.ts +3 -0
- package/dist/integrations/adapters/discord.d.ts.map +1 -0
- package/dist/integrations/adapters/discord.js +261 -0
- package/dist/integrations/adapters/discord.js.map +1 -0
- package/dist/integrations/adapters/index.d.ts +4 -0
- package/dist/integrations/adapters/index.d.ts.map +1 -0
- package/dist/integrations/adapters/index.js +26 -0
- package/dist/integrations/adapters/index.js.map +1 -0
- package/dist/integrations/adapters/microsoft-teams.d.ts +5 -0
- package/dist/integrations/adapters/microsoft-teams.d.ts.map +1 -0
- package/dist/integrations/adapters/microsoft-teams.js +295 -0
- package/dist/integrations/adapters/microsoft-teams.js.map +1 -0
- package/dist/integrations/adapters/slack.d.ts +10 -2
- package/dist/integrations/adapters/slack.d.ts.map +1 -1
- package/dist/integrations/adapters/slack.js +772 -27
- package/dist/integrations/adapters/slack.js.map +1 -1
- package/dist/integrations/adapters/telegram.d.ts +0 -2
- package/dist/integrations/adapters/telegram.d.ts.map +1 -1
- package/dist/integrations/adapters/telegram.js +49 -15
- package/dist/integrations/adapters/telegram.js.map +1 -1
- package/dist/integrations/adapters/whatsapp.d.ts +0 -2
- package/dist/integrations/adapters/whatsapp.d.ts.map +1 -1
- package/dist/integrations/adapters/whatsapp.js +40 -17
- package/dist/integrations/adapters/whatsapp.js.map +1 -1
- package/dist/integrations/awaiting-input-store.d.ts +27 -0
- package/dist/integrations/awaiting-input-store.d.ts.map +1 -0
- package/dist/integrations/awaiting-input-store.js +112 -0
- package/dist/integrations/awaiting-input-store.js.map +1 -0
- package/dist/integrations/catalog.d.ts +75 -0
- package/dist/integrations/catalog.d.ts.map +1 -0
- package/dist/integrations/catalog.js +451 -0
- package/dist/integrations/catalog.js.map +1 -0
- package/dist/integrations/computer-supervision-store.d.ts +65 -0
- package/dist/integrations/computer-supervision-store.d.ts.map +1 -0
- package/dist/integrations/computer-supervision-store.js +296 -0
- package/dist/integrations/computer-supervision-store.js.map +1 -0
- package/dist/integrations/computer-supervision.d.ts +11 -0
- package/dist/integrations/computer-supervision.d.ts.map +1 -0
- package/dist/integrations/computer-supervision.js +160 -0
- package/dist/integrations/computer-supervision.js.map +1 -0
- package/dist/integrations/controls-store.d.ts +44 -0
- package/dist/integrations/controls-store.d.ts.map +1 -0
- package/dist/integrations/controls-store.js +129 -0
- package/dist/integrations/controls-store.js.map +1 -0
- package/dist/integrations/index.d.ts +19 -4
- package/dist/integrations/index.d.ts.map +1 -1
- package/dist/integrations/index.js +14 -2
- package/dist/integrations/index.js.map +1 -1
- package/dist/integrations/installations-store.d.ts +112 -0
- package/dist/integrations/installations-store.d.ts.map +1 -0
- package/dist/integrations/installations-store.js +493 -0
- package/dist/integrations/installations-store.js.map +1 -0
- package/dist/integrations/integration-memory.d.ts +24 -0
- package/dist/integrations/integration-memory.d.ts.map +1 -0
- package/dist/integrations/integration-memory.js +136 -0
- package/dist/integrations/integration-memory.js.map +1 -0
- package/dist/integrations/pending-tasks-retry-job.d.ts.map +1 -1
- package/dist/integrations/pending-tasks-retry-job.js +6 -5
- package/dist/integrations/pending-tasks-retry-job.js.map +1 -1
- package/dist/integrations/pending-tasks-store.d.ts +17 -0
- package/dist/integrations/pending-tasks-store.d.ts.map +1 -1
- package/dist/integrations/pending-tasks-store.js +71 -5
- package/dist/integrations/pending-tasks-store.js.map +1 -1
- package/dist/integrations/plugin.d.ts.map +1 -1
- package/dist/integrations/plugin.js +725 -38
- package/dist/integrations/plugin.js.map +1 -1
- package/dist/integrations/remote-commands-store.d.ts +15 -1
- package/dist/integrations/remote-commands-store.d.ts.map +1 -1
- package/dist/integrations/remote-commands-store.js +273 -3
- package/dist/integrations/remote-commands-store.js.map +1 -1
- package/dist/integrations/remote-devices-store.d.ts +4 -3
- package/dist/integrations/remote-devices-store.d.ts.map +1 -1
- package/dist/integrations/remote-devices-store.js +49 -2
- package/dist/integrations/remote-devices-store.js.map +1 -1
- package/dist/integrations/remote-json-safety.d.ts +6 -0
- package/dist/integrations/remote-json-safety.d.ts.map +1 -0
- package/dist/integrations/remote-json-safety.js +114 -0
- package/dist/integrations/remote-json-safety.js.map +1 -0
- package/dist/integrations/remote-run-events-store.d.ts +11 -1
- package/dist/integrations/remote-run-events-store.d.ts.map +1 -1
- package/dist/integrations/remote-run-events-store.js +85 -17
- package/dist/integrations/remote-run-events-store.js.map +1 -1
- package/dist/integrations/remote-types.d.ts +54 -3
- package/dist/integrations/remote-types.d.ts.map +1 -1
- package/dist/integrations/remote-types.js.map +1 -1
- package/dist/integrations/scope-store.d.ts +65 -0
- package/dist/integrations/scope-store.d.ts.map +1 -0
- package/dist/integrations/scope-store.js +361 -0
- package/dist/integrations/scope-store.js.map +1 -0
- package/dist/integrations/slack-manifest.d.ts +66 -0
- package/dist/integrations/slack-manifest.d.ts.map +1 -0
- package/dist/integrations/slack-manifest.js +70 -0
- package/dist/integrations/slack-manifest.js.map +1 -0
- package/dist/integrations/slack-oauth.d.ts +99 -0
- package/dist/integrations/slack-oauth.d.ts.map +1 -0
- package/dist/integrations/slack-oauth.js +226 -0
- package/dist/integrations/slack-oauth.js.map +1 -0
- package/dist/integrations/types.d.ts +144 -0
- package/dist/integrations/types.d.ts.map +1 -1
- package/dist/integrations/types.js +16 -1
- package/dist/integrations/types.js.map +1 -1
- package/dist/integrations/usage-budget-store.d.ts +84 -0
- package/dist/integrations/usage-budget-store.d.ts.map +1 -0
- package/dist/integrations/usage-budget-store.js +650 -0
- package/dist/integrations/usage-budget-store.js.map +1 -0
- package/dist/integrations/webhook-handler.d.ts +4 -0
- package/dist/integrations/webhook-handler.d.ts.map +1 -1
- package/dist/integrations/webhook-handler.js +548 -51
- package/dist/integrations/webhook-handler.js.map +1 -1
- package/dist/jobs/scheduler.d.ts +6 -0
- package/dist/jobs/scheduler.d.ts.map +1 -1
- package/dist/jobs/scheduler.js +83 -4
- package/dist/jobs/scheduler.js.map +1 -1
- package/dist/jobs/tools.d.ts.map +1 -1
- package/dist/jobs/tools.js +43 -11
- package/dist/jobs/tools.js.map +1 -1
- package/dist/localization/default-messages.d.ts +26 -0
- package/dist/localization/default-messages.d.ts.map +1 -1
- package/dist/localization/default-messages.js +26 -0
- package/dist/localization/default-messages.js.map +1 -1
- package/dist/mcp-client/config.d.ts.map +1 -1
- package/dist/mcp-client/config.js +44 -3
- package/dist/mcp-client/config.js.map +1 -1
- package/dist/mcp-client/index.d.ts +6 -1
- package/dist/mcp-client/index.d.ts.map +1 -1
- package/dist/mcp-client/index.js +11 -3
- package/dist/mcp-client/index.js.map +1 -1
- package/dist/mcp-client/tool-policy.d.ts +24 -0
- package/dist/mcp-client/tool-policy.d.ts.map +1 -0
- package/dist/mcp-client/tool-policy.js +139 -0
- package/dist/mcp-client/tool-policy.js.map +1 -0
- package/dist/observability/routes.d.ts +1 -1
- package/dist/progress/routes.d.ts +1 -1
- package/dist/provider-api/index.d.ts +4 -4
- package/dist/provider-api/index.d.ts.map +1 -1
- package/dist/provider-api/index.js +72 -1
- package/dist/provider-api/index.js.map +1 -1
- package/dist/resources/handlers.d.ts.map +1 -1
- package/dist/resources/handlers.js +57 -15
- package/dist/resources/handlers.js.map +1 -1
- package/dist/resources/script-helpers.d.ts.map +1 -1
- package/dist/resources/script-helpers.js +34 -8
- package/dist/resources/script-helpers.js.map +1 -1
- package/dist/resources/store.d.ts +10 -0
- package/dist/resources/store.d.ts.map +1 -1
- package/dist/resources/store.js +54 -47
- package/dist/resources/store.js.map +1 -1
- package/dist/scripts/call-agent.d.ts.map +1 -1
- package/dist/scripts/call-agent.js +106 -1
- package/dist/scripts/call-agent.js.map +1 -1
- package/dist/secrets/register-framework-secrets.d.ts +3 -4
- package/dist/secrets/register-framework-secrets.d.ts.map +1 -1
- package/dist/secrets/register-framework-secrets.js +25 -4
- package/dist/secrets/register-framework-secrets.js.map +1 -1
- package/dist/secrets/routes.d.ts +9 -9
- package/dist/server/agent-chat-plugin.d.ts +15 -4
- package/dist/server/agent-chat-plugin.d.ts.map +1 -1
- package/dist/server/agent-chat-plugin.js +300 -118
- package/dist/server/agent-chat-plugin.js.map +1 -1
- package/dist/server/auth.d.ts.map +1 -1
- package/dist/server/auth.js +10 -14
- package/dist/server/auth.js.map +1 -1
- package/dist/server/builder-design-systems.d.ts +3 -1
- package/dist/server/builder-design-systems.d.ts.map +1 -1
- package/dist/server/builder-design-systems.js +9 -2
- package/dist/server/builder-design-systems.js.map +1 -1
- package/dist/server/edge.d.ts +1 -1
- package/dist/server/edge.d.ts.map +1 -1
- package/dist/server/edge.js +1 -1
- package/dist/server/edge.js.map +1 -1
- package/dist/server/index.d.ts +4 -2
- package/dist/server/index.d.ts.map +1 -1
- package/dist/server/index.js +4 -2
- package/dist/server/index.js.map +1 -1
- package/dist/server/realtime-voice.d.ts +53 -0
- package/dist/server/realtime-voice.d.ts.map +1 -0
- package/dist/server/realtime-voice.js +404 -0
- package/dist/server/realtime-voice.js.map +1 -0
- package/dist/server/request-context.d.ts +18 -0
- package/dist/server/request-context.d.ts.map +1 -1
- package/dist/server/request-context.js.map +1 -1
- package/dist/server/social-og-image.d.ts.map +1 -1
- package/dist/server/social-og-image.js +3 -2
- package/dist/server/social-og-image.js.map +1 -1
- package/dist/server/transcribe-voice.d.ts +1 -1
- package/dist/shared/reasoning-effort.d.ts +20 -0
- package/dist/shared/reasoning-effort.d.ts.map +1 -1
- package/dist/shared/reasoning-effort.js +52 -18
- package/dist/shared/reasoning-effort.js.map +1 -1
- package/dist/styles/agent-conversation.css +17 -0
- package/dist/styles/agent-native.css +62 -44
- package/dist/templates/default/.agents/skills/capture-learnings/SKILL.md +22 -9
- package/dist/templates/default/AGENTS.md +7 -3
- package/dist/templates/workspace-core/.agents/skills/authentication/SKILL.md +1 -1
- package/dist/templates/workspace-core/.agents/skills/capture-learnings/SKILL.md +22 -9
- package/dist/templates/workspace-core/.agents/skills/extension-points/SKILL.md +6 -3
- package/dist/templates/workspace-core/.agents/skills/extensions/SKILL.md +25 -0
- package/dist/templates/workspace-core/.agents/skills/integration-webhooks/SKILL.md +15 -0
- package/dist/templates/workspace-core/.agents/skills/voice-transcription/SKILL.md +39 -5
- package/dist/templates/workspace-core/AGENTS.md +3 -2
- package/dist/usage/store.d.ts +7 -0
- package/dist/usage/store.d.ts.map +1 -1
- package/dist/usage/store.js +24 -3
- package/dist/usage/store.js.map +1 -1
- package/docs/content/a2a-protocol.mdx +21 -5
- package/docs/content/actions.mdx +9 -23
- package/docs/content/agent-mentions.mdx +31 -29
- package/docs/content/agent-native-toolkit.mdx +15 -6
- package/docs/content/agent-surfaces.mdx +9 -13
- package/docs/content/agent-teams.mdx +1 -0
- package/docs/content/authentication.mdx +10 -3
- package/docs/content/automation-connectors.mdx +123 -0
- package/docs/content/automations.mdx +17 -3
- package/docs/content/blueprint-installer.mdx +11 -4
- package/docs/content/cli-adapters.mdx +9 -6
- package/docs/content/client.mdx +16 -0
- package/docs/content/cloneable-saas.mdx +14 -11
- package/docs/content/code-agents-ui.mdx +65 -0
- package/docs/content/components.mdx +30 -14
- package/docs/content/context-awareness.mdx +27 -15
- package/docs/content/creating-templates.mdx +15 -9
- package/docs/content/cross-app-sso.mdx +16 -6
- package/docs/content/data-programs.mdx +1 -1
- package/docs/content/database.mdx +17 -5
- package/docs/content/deployment.mdx +19 -18
- package/docs/content/dispatch.mdx +6 -2
- package/docs/content/drop-in-agent.mdx +10 -4
- package/docs/content/durable-background-runs.mdx +9 -5
- package/docs/content/durable-resume.mdx +9 -4
- package/docs/content/embedding-sdk.mdx +26 -8
- package/docs/content/evals.mdx +3 -5
- package/docs/content/extensions.mdx +23 -2
- package/docs/content/external-agents.mdx +25 -34
- package/docs/content/faq.mdx +8 -0
- package/docs/content/file-uploads.mdx +12 -3
- package/docs/content/frames.mdx +16 -0
- package/docs/content/generative-ui.mdx +1 -1
- package/docs/content/getting-started.mdx +34 -21
- package/docs/content/harness-agents.mdx +8 -4
- package/docs/content/human-approval.mdx +8 -3
- package/docs/content/internationalization.mdx +9 -4
- package/docs/content/key-concepts.mdx +13 -20
- package/docs/content/local-file-mode.mdx +14 -8
- package/docs/content/locales/ar-SA/actions.mdx +2 -2
- package/docs/content/locales/ar-SA/agent-native-toolkit.mdx +2 -2
- package/docs/content/locales/ar-SA/agent-surfaces.mdx +8 -10
- package/docs/content/locales/ar-SA/agent-teams.mdx +1 -0
- package/docs/content/locales/ar-SA/authentication.mdx +1 -1
- package/docs/content/locales/ar-SA/components.mdx +11 -1
- package/docs/content/locales/ar-SA/creating-templates.mdx +3 -7
- package/docs/content/locales/ar-SA/cross-app-sso.mdx +16 -6
- package/docs/content/locales/ar-SA/deployment.mdx +8 -0
- package/docs/content/locales/ar-SA/extensions.mdx +8 -0
- package/docs/content/locales/ar-SA/external-agents.mdx +2 -7
- package/docs/content/locales/ar-SA/key-concepts.mdx +13 -20
- package/docs/content/locales/ar-SA/messaging.mdx +84 -15
- package/docs/content/locales/ar-SA/multi-tenancy.mdx +5 -5
- package/docs/content/locales/ar-SA/notifications.mdx +18 -10
- package/docs/content/locales/ar-SA/processors.mdx +11 -5
- package/docs/content/locales/ar-SA/server.mdx +17 -10
- package/docs/content/locales/ar-SA/sharing.mdx +10 -10
- package/docs/content/locales/ar-SA/skills-guide.mdx +34 -17
- package/docs/content/locales/ar-SA/template-assets.mdx +16 -13
- package/docs/content/locales/ar-SA/template-brain.mdx +3 -1
- package/docs/content/locales/ar-SA/template-clips.mdx +4 -3
- package/docs/content/locales/ar-SA/template-design.mdx +4 -1
- package/docs/content/locales/ar-SA/template-dispatch.mdx +5 -1
- package/docs/content/locales/ar-SA/template-mail.mdx +8 -0
- package/docs/content/locales/ar-SA/tracking.mdx +9 -6
- package/docs/content/locales/ar-SA/using-your-agent.mdx +0 -7
- package/docs/content/locales/ar-SA/voice-input.mdx +6 -0
- package/docs/content/locales/ar-SA/workspace-connections.mdx +9 -2
- package/docs/content/locales/ar-SA/workspace.mdx +19 -18
- package/docs/content/locales/de-DE/actions.mdx +2 -2
- package/docs/content/locales/de-DE/agent-native-toolkit.mdx +2 -2
- package/docs/content/locales/de-DE/agent-surfaces.mdx +8 -10
- package/docs/content/locales/de-DE/agent-teams.mdx +1 -0
- package/docs/content/locales/de-DE/authentication.mdx +1 -1
- package/docs/content/locales/de-DE/components.mdx +11 -1
- package/docs/content/locales/de-DE/creating-templates.mdx +3 -7
- package/docs/content/locales/de-DE/cross-app-sso.mdx +16 -6
- package/docs/content/locales/de-DE/deployment.mdx +8 -0
- package/docs/content/locales/de-DE/extensions.mdx +10 -0
- package/docs/content/locales/de-DE/external-agents.mdx +3 -7
- package/docs/content/locales/de-DE/key-concepts.mdx +13 -20
- package/docs/content/locales/de-DE/messaging.mdx +92 -15
- package/docs/content/locales/de-DE/multi-tenancy.mdx +5 -5
- package/docs/content/locales/de-DE/notifications.mdx +18 -10
- package/docs/content/locales/de-DE/processors.mdx +11 -5
- package/docs/content/locales/de-DE/server.mdx +18 -10
- package/docs/content/locales/de-DE/sharing.mdx +10 -10
- package/docs/content/locales/de-DE/skills-guide.mdx +34 -17
- package/docs/content/locales/de-DE/template-assets.mdx +16 -13
- package/docs/content/locales/de-DE/template-brain.mdx +3 -1
- package/docs/content/locales/de-DE/template-clips.mdx +4 -3
- package/docs/content/locales/de-DE/template-design.mdx +4 -1
- package/docs/content/locales/de-DE/template-dispatch.mdx +5 -1
- package/docs/content/locales/de-DE/template-mail.mdx +8 -0
- package/docs/content/locales/de-DE/tracking.mdx +9 -6
- package/docs/content/locales/de-DE/using-your-agent.mdx +0 -7
- package/docs/content/locales/de-DE/voice-input.mdx +6 -0
- package/docs/content/locales/de-DE/workspace-connections.mdx +9 -2
- package/docs/content/locales/de-DE/workspace.mdx +19 -18
- package/docs/content/locales/es-ES/actions.mdx +2 -2
- package/docs/content/locales/es-ES/agent-native-toolkit.mdx +2 -2
- package/docs/content/locales/es-ES/agent-surfaces.mdx +8 -10
- package/docs/content/locales/es-ES/agent-teams.mdx +1 -0
- package/docs/content/locales/es-ES/authentication.mdx +1 -1
- package/docs/content/locales/es-ES/components.mdx +11 -1
- package/docs/content/locales/es-ES/creating-templates.mdx +3 -7
- package/docs/content/locales/es-ES/cross-app-sso.mdx +16 -6
- package/docs/content/locales/es-ES/deployment.mdx +8 -0
- package/docs/content/locales/es-ES/extensions.mdx +10 -0
- package/docs/content/locales/es-ES/external-agents.mdx +3 -7
- package/docs/content/locales/es-ES/key-concepts.mdx +13 -20
- package/docs/content/locales/es-ES/messaging.mdx +91 -15
- package/docs/content/locales/es-ES/multi-tenancy.mdx +5 -5
- package/docs/content/locales/es-ES/notifications.mdx +18 -10
- package/docs/content/locales/es-ES/processors.mdx +11 -5
- package/docs/content/locales/es-ES/server.mdx +17 -10
- package/docs/content/locales/es-ES/sharing.mdx +10 -10
- package/docs/content/locales/es-ES/skills-guide.mdx +34 -17
- package/docs/content/locales/es-ES/template-assets.mdx +16 -13
- package/docs/content/locales/es-ES/template-brain.mdx +3 -1
- package/docs/content/locales/es-ES/template-clips.mdx +4 -3
- package/docs/content/locales/es-ES/template-design.mdx +4 -1
- package/docs/content/locales/es-ES/template-dispatch.mdx +5 -1
- package/docs/content/locales/es-ES/template-mail.mdx +8 -0
- package/docs/content/locales/es-ES/tracking.mdx +9 -6
- package/docs/content/locales/es-ES/using-your-agent.mdx +0 -7
- package/docs/content/locales/es-ES/voice-input.mdx +6 -0
- package/docs/content/locales/es-ES/workspace-connections.mdx +9 -2
- package/docs/content/locales/es-ES/workspace.mdx +19 -18
- package/docs/content/locales/fr-FR/actions.mdx +2 -2
- package/docs/content/locales/fr-FR/agent-native-toolkit.mdx +2 -2
- package/docs/content/locales/fr-FR/agent-surfaces.mdx +8 -10
- package/docs/content/locales/fr-FR/agent-teams.mdx +1 -0
- package/docs/content/locales/fr-FR/authentication.mdx +1 -1
- package/docs/content/locales/fr-FR/components.mdx +11 -1
- package/docs/content/locales/fr-FR/creating-templates.mdx +3 -7
- package/docs/content/locales/fr-FR/cross-app-sso.mdx +16 -6
- package/docs/content/locales/fr-FR/deployment.mdx +8 -0
- package/docs/content/locales/fr-FR/extensions.mdx +10 -0
- package/docs/content/locales/fr-FR/external-agents.mdx +3 -7
- package/docs/content/locales/fr-FR/key-concepts.mdx +13 -20
- package/docs/content/locales/fr-FR/messaging.mdx +91 -15
- package/docs/content/locales/fr-FR/multi-tenancy.mdx +5 -5
- package/docs/content/locales/fr-FR/notifications.mdx +18 -10
- package/docs/content/locales/fr-FR/processors.mdx +11 -5
- package/docs/content/locales/fr-FR/server.mdx +17 -10
- package/docs/content/locales/fr-FR/sharing.mdx +10 -10
- package/docs/content/locales/fr-FR/skills-guide.mdx +34 -17
- package/docs/content/locales/fr-FR/template-assets.mdx +16 -13
- package/docs/content/locales/fr-FR/template-brain.mdx +3 -1
- package/docs/content/locales/fr-FR/template-clips.mdx +4 -3
- package/docs/content/locales/fr-FR/template-design.mdx +4 -1
- package/docs/content/locales/fr-FR/template-dispatch.mdx +5 -1
- package/docs/content/locales/fr-FR/template-mail.mdx +8 -0
- package/docs/content/locales/fr-FR/tracking.mdx +9 -6
- package/docs/content/locales/fr-FR/using-your-agent.mdx +0 -7
- package/docs/content/locales/fr-FR/voice-input.mdx +6 -0
- package/docs/content/locales/fr-FR/workspace-connections.mdx +9 -2
- package/docs/content/locales/fr-FR/workspace.mdx +19 -18
- package/docs/content/locales/hi-IN/actions.mdx +2 -2
- package/docs/content/locales/hi-IN/agent-native-toolkit.mdx +2 -2
- package/docs/content/locales/hi-IN/agent-surfaces.mdx +8 -10
- package/docs/content/locales/hi-IN/agent-teams.mdx +1 -0
- package/docs/content/locales/hi-IN/authentication.mdx +1 -1
- package/docs/content/locales/hi-IN/components.mdx +11 -1
- package/docs/content/locales/hi-IN/creating-templates.mdx +3 -7
- package/docs/content/locales/hi-IN/cross-app-sso.mdx +16 -6
- package/docs/content/locales/hi-IN/deployment.mdx +8 -0
- package/docs/content/locales/hi-IN/extensions.mdx +8 -0
- package/docs/content/locales/hi-IN/external-agents.mdx +2 -7
- package/docs/content/locales/hi-IN/key-concepts.mdx +13 -20
- package/docs/content/locales/hi-IN/messaging.mdx +81 -15
- package/docs/content/locales/hi-IN/multi-tenancy.mdx +5 -5
- package/docs/content/locales/hi-IN/notifications.mdx +18 -10
- package/docs/content/locales/hi-IN/processors.mdx +11 -5
- package/docs/content/locales/hi-IN/server.mdx +17 -10
- package/docs/content/locales/hi-IN/sharing.mdx +10 -10
- package/docs/content/locales/hi-IN/skills-guide.mdx +34 -17
- package/docs/content/locales/hi-IN/template-assets.mdx +16 -13
- package/docs/content/locales/hi-IN/template-brain.mdx +3 -1
- package/docs/content/locales/hi-IN/template-clips.mdx +4 -3
- package/docs/content/locales/hi-IN/template-design.mdx +4 -1
- package/docs/content/locales/hi-IN/template-dispatch.mdx +5 -1
- package/docs/content/locales/hi-IN/template-mail.mdx +8 -0
- package/docs/content/locales/hi-IN/tracking.mdx +9 -6
- package/docs/content/locales/hi-IN/using-your-agent.mdx +0 -7
- package/docs/content/locales/hi-IN/voice-input.mdx +6 -0
- package/docs/content/locales/hi-IN/workspace-connections.mdx +9 -2
- package/docs/content/locales/hi-IN/workspace.mdx +19 -18
- package/docs/content/locales/ja-JP/actions.mdx +2 -2
- package/docs/content/locales/ja-JP/agent-native-toolkit.mdx +2 -2
- package/docs/content/locales/ja-JP/agent-surfaces.mdx +8 -10
- package/docs/content/locales/ja-JP/agent-teams.mdx +1 -0
- package/docs/content/locales/ja-JP/authentication.mdx +1 -1
- package/docs/content/locales/ja-JP/components.mdx +11 -1
- package/docs/content/locales/ja-JP/creating-templates.mdx +3 -7
- package/docs/content/locales/ja-JP/cross-app-sso.mdx +16 -6
- package/docs/content/locales/ja-JP/deployment.mdx +8 -0
- package/docs/content/locales/ja-JP/extensions.mdx +9 -0
- package/docs/content/locales/ja-JP/external-agents.mdx +2 -7
- package/docs/content/locales/ja-JP/key-concepts.mdx +13 -20
- package/docs/content/locales/ja-JP/messaging.mdx +81 -15
- package/docs/content/locales/ja-JP/multi-tenancy.mdx +5 -5
- package/docs/content/locales/ja-JP/notifications.mdx +18 -10
- package/docs/content/locales/ja-JP/processors.mdx +11 -5
- package/docs/content/locales/ja-JP/server.mdx +17 -10
- package/docs/content/locales/ja-JP/sharing.mdx +10 -10
- package/docs/content/locales/ja-JP/skills-guide.mdx +34 -17
- package/docs/content/locales/ja-JP/template-assets.mdx +16 -13
- package/docs/content/locales/ja-JP/template-brain.mdx +3 -1
- package/docs/content/locales/ja-JP/template-clips.mdx +4 -4
- package/docs/content/locales/ja-JP/template-design.mdx +4 -1
- package/docs/content/locales/ja-JP/template-dispatch.mdx +5 -1
- package/docs/content/locales/ja-JP/template-mail.mdx +8 -0
- package/docs/content/locales/ja-JP/tracking.mdx +9 -6
- package/docs/content/locales/ja-JP/using-your-agent.mdx +0 -7
- package/docs/content/locales/ja-JP/voice-input.mdx +6 -0
- package/docs/content/locales/ja-JP/workspace-connections.mdx +9 -2
- package/docs/content/locales/ja-JP/workspace.mdx +19 -18
- package/docs/content/locales/ko-KR/actions.mdx +2 -2
- package/docs/content/locales/ko-KR/agent-native-toolkit.mdx +2 -2
- package/docs/content/locales/ko-KR/agent-surfaces.mdx +8 -10
- package/docs/content/locales/ko-KR/agent-teams.mdx +1 -0
- package/docs/content/locales/ko-KR/authentication.mdx +1 -1
- package/docs/content/locales/ko-KR/components.mdx +11 -1
- package/docs/content/locales/ko-KR/creating-templates.mdx +3 -7
- package/docs/content/locales/ko-KR/cross-app-sso.mdx +16 -6
- package/docs/content/locales/ko-KR/deployment.mdx +8 -0
- package/docs/content/locales/ko-KR/extensions.mdx +8 -0
- package/docs/content/locales/ko-KR/external-agents.mdx +2 -7
- package/docs/content/locales/ko-KR/key-concepts.mdx +13 -20
- package/docs/content/locales/ko-KR/messaging.mdx +80 -15
- package/docs/content/locales/ko-KR/multi-tenancy.mdx +5 -5
- package/docs/content/locales/ko-KR/notifications.mdx +18 -10
- package/docs/content/locales/ko-KR/processors.mdx +11 -5
- package/docs/content/locales/ko-KR/server.mdx +17 -10
- package/docs/content/locales/ko-KR/sharing.mdx +10 -10
- package/docs/content/locales/ko-KR/skills-guide.mdx +34 -17
- package/docs/content/locales/ko-KR/template-assets.mdx +16 -13
- package/docs/content/locales/ko-KR/template-brain.mdx +3 -1
- package/docs/content/locales/ko-KR/template-clips.mdx +4 -4
- package/docs/content/locales/ko-KR/template-design.mdx +4 -1
- package/docs/content/locales/ko-KR/template-dispatch.mdx +5 -1
- package/docs/content/locales/ko-KR/template-mail.mdx +8 -0
- package/docs/content/locales/ko-KR/tracking.mdx +9 -6
- package/docs/content/locales/ko-KR/using-your-agent.mdx +0 -7
- package/docs/content/locales/ko-KR/voice-input.mdx +6 -0
- package/docs/content/locales/ko-KR/workspace-connections.mdx +9 -2
- package/docs/content/locales/ko-KR/workspace.mdx +19 -18
- package/docs/content/locales/pt-BR/actions.mdx +2 -2
- package/docs/content/locales/pt-BR/agent-native-toolkit.mdx +2 -2
- package/docs/content/locales/pt-BR/agent-surfaces.mdx +8 -10
- package/docs/content/locales/pt-BR/agent-teams.mdx +1 -0
- package/docs/content/locales/pt-BR/authentication.mdx +1 -1
- package/docs/content/locales/pt-BR/components.mdx +11 -1
- package/docs/content/locales/pt-BR/creating-templates.mdx +3 -7
- package/docs/content/locales/pt-BR/cross-app-sso.mdx +16 -6
- package/docs/content/locales/pt-BR/deployment.mdx +8 -0
- package/docs/content/locales/pt-BR/extensions.mdx +9 -0
- package/docs/content/locales/pt-BR/external-agents.mdx +3 -7
- package/docs/content/locales/pt-BR/key-concepts.mdx +13 -20
- package/docs/content/locales/pt-BR/messaging.mdx +88 -15
- package/docs/content/locales/pt-BR/multi-tenancy.mdx +5 -5
- package/docs/content/locales/pt-BR/notifications.mdx +18 -10
- package/docs/content/locales/pt-BR/processors.mdx +11 -5
- package/docs/content/locales/pt-BR/server.mdx +17 -10
- package/docs/content/locales/pt-BR/sharing.mdx +10 -10
- package/docs/content/locales/pt-BR/skills-guide.mdx +34 -17
- package/docs/content/locales/pt-BR/template-assets.mdx +16 -13
- package/docs/content/locales/pt-BR/template-brain.mdx +3 -1
- package/docs/content/locales/pt-BR/template-clips.mdx +4 -3
- package/docs/content/locales/pt-BR/template-design.mdx +4 -1
- package/docs/content/locales/pt-BR/template-dispatch.mdx +5 -1
- package/docs/content/locales/pt-BR/template-mail.mdx +8 -0
- package/docs/content/locales/pt-BR/tracking.mdx +9 -6
- package/docs/content/locales/pt-BR/using-your-agent.mdx +0 -7
- package/docs/content/locales/pt-BR/voice-input.mdx +6 -0
- package/docs/content/locales/pt-BR/workspace-connections.mdx +9 -2
- package/docs/content/locales/pt-BR/workspace.mdx +19 -18
- package/docs/content/locales/zh-CN/actions.mdx +2 -2
- package/docs/content/locales/zh-CN/agent-native-toolkit.mdx +2 -2
- package/docs/content/locales/zh-CN/agent-surfaces.mdx +8 -10
- package/docs/content/locales/zh-CN/agent-teams.mdx +1 -0
- package/docs/content/locales/zh-CN/authentication.mdx +1 -1
- package/docs/content/locales/zh-CN/components.mdx +11 -1
- package/docs/content/locales/zh-CN/creating-templates.mdx +3 -7
- package/docs/content/locales/zh-CN/cross-app-sso.mdx +16 -6
- package/docs/content/locales/zh-CN/deployment.mdx +8 -0
- package/docs/content/locales/zh-CN/extensions.mdx +6 -0
- package/docs/content/locales/zh-CN/external-agents.mdx +2 -7
- package/docs/content/locales/zh-CN/key-concepts.mdx +13 -20
- package/docs/content/locales/zh-CN/messaging.mdx +78 -15
- package/docs/content/locales/zh-CN/multi-tenancy.mdx +5 -5
- package/docs/content/locales/zh-CN/notifications.mdx +18 -10
- package/docs/content/locales/zh-CN/processors.mdx +11 -5
- package/docs/content/locales/zh-CN/server.mdx +16 -10
- package/docs/content/locales/zh-CN/sharing.mdx +10 -10
- package/docs/content/locales/zh-CN/skills-guide.mdx +34 -17
- package/docs/content/locales/zh-CN/template-assets.mdx +16 -13
- package/docs/content/locales/zh-CN/template-brain.mdx +3 -1
- package/docs/content/locales/zh-CN/template-clips.mdx +4 -4
- package/docs/content/locales/zh-CN/template-design.mdx +4 -1
- package/docs/content/locales/zh-CN/template-dispatch.mdx +5 -1
- package/docs/content/locales/zh-CN/template-mail.mdx +8 -0
- package/docs/content/locales/zh-CN/tracking.mdx +9 -6
- package/docs/content/locales/zh-CN/using-your-agent.mdx +0 -7
- package/docs/content/locales/zh-CN/voice-input.mdx +6 -0
- package/docs/content/locales/zh-CN/workspace-connections.mdx +9 -2
- package/docs/content/locales/zh-CN/workspace.mdx +19 -18
- package/docs/content/locales/zh-TW/actions.mdx +2 -2
- package/docs/content/locales/zh-TW/agent-native-toolkit.mdx +2 -2
- package/docs/content/locales/zh-TW/agent-surfaces.mdx +8 -10
- package/docs/content/locales/zh-TW/agent-teams.mdx +1 -0
- package/docs/content/locales/zh-TW/authentication.mdx +1 -1
- package/docs/content/locales/zh-TW/components.mdx +11 -1
- package/docs/content/locales/zh-TW/creating-templates.mdx +3 -7
- package/docs/content/locales/zh-TW/cross-app-sso.mdx +16 -6
- package/docs/content/locales/zh-TW/deployment.mdx +8 -0
- package/docs/content/locales/zh-TW/extensions.mdx +6 -0
- package/docs/content/locales/zh-TW/external-agents.mdx +2 -7
- package/docs/content/locales/zh-TW/key-concepts.mdx +13 -20
- package/docs/content/locales/zh-TW/messaging.mdx +78 -15
- package/docs/content/locales/zh-TW/multi-tenancy.mdx +5 -5
- package/docs/content/locales/zh-TW/notifications.mdx +18 -10
- package/docs/content/locales/zh-TW/processors.mdx +11 -5
- package/docs/content/locales/zh-TW/server.mdx +16 -10
- package/docs/content/locales/zh-TW/sharing.mdx +10 -10
- package/docs/content/locales/zh-TW/skills-guide.mdx +34 -17
- package/docs/content/locales/zh-TW/template-assets.mdx +16 -13
- package/docs/content/locales/zh-TW/template-brain.mdx +3 -1
- package/docs/content/locales/zh-TW/template-clips.mdx +4 -4
- package/docs/content/locales/zh-TW/template-design.mdx +4 -1
- package/docs/content/locales/zh-TW/template-dispatch.mdx +5 -1
- package/docs/content/locales/zh-TW/template-mail.mdx +8 -0
- package/docs/content/locales/zh-TW/tracking.mdx +9 -6
- package/docs/content/locales/zh-TW/using-your-agent.mdx +0 -7
- package/docs/content/locales/zh-TW/voice-input.mdx +6 -0
- package/docs/content/locales/zh-TW/workspace-connections.mdx +9 -2
- package/docs/content/locales/zh-TW/workspace.mdx +19 -18
- package/docs/content/mcp-apps.mdx +14 -32
- package/docs/content/mcp-clients.mdx +48 -54
- package/docs/content/mcp-protocol.mdx +25 -10
- package/docs/content/messaging.mdx +238 -48
- package/docs/content/multi-app-workspace.mdx +11 -96
- package/docs/content/multi-tenancy.mdx +5 -5
- package/docs/content/native-chat-ui.mdx +4 -4
- package/docs/content/notifications.mdx +19 -12
- package/docs/content/observability.mdx +2 -4
- package/docs/content/observational-memory.mdx +7 -3
- package/docs/content/onboarding.mdx +9 -2
- package/docs/content/plan-plugin.mdx +10 -2
- package/docs/content/pr-visual-recap.mdx +1 -1
- package/docs/content/processors.mdx +11 -5
- package/docs/content/pure-agent-apps.mdx +5 -1
- package/docs/content/real-time-collaboration.mdx +30 -67
- package/docs/content/recurring-jobs.mdx +8 -6
- package/docs/content/routing.mdx +3 -4
- package/docs/content/sandbox-adapters.mdx +30 -53
- package/docs/content/security.mdx +8 -0
- package/docs/content/server.mdx +17 -10
- package/docs/content/sharing.mdx +10 -10
- package/docs/content/skills-guide.mdx +35 -16
- package/docs/content/template-analytics.mdx +11 -8
- package/docs/content/template-assets.mdx +16 -13
- package/docs/content/template-brain.mdx +3 -1
- package/docs/content/template-calendar.mdx +12 -4
- package/docs/content/template-chat.mdx +4 -4
- package/docs/content/template-clips.mdx +6 -3
- package/docs/content/template-content.mdx +23 -18
- package/docs/content/template-design.mdx +7 -1
- package/docs/content/template-dispatch.mdx +5 -1
- package/docs/content/template-mail.mdx +14 -2
- package/docs/content/template-plan.mdx +22 -15
- package/docs/content/template-slides.mdx +11 -3
- package/docs/content/toolkit-agent-ux.mdx +46 -3
- package/docs/content/toolkit-collaboration.mdx +58 -4
- package/docs/content/toolkit-command-navigation.mdx +8 -2
- package/docs/content/toolkit-comments-review.mdx +10 -2
- package/docs/content/toolkit-history.mdx +8 -3
- package/docs/content/toolkit-observability.mdx +48 -2
- package/docs/content/toolkit-org-team.mdx +8 -2
- package/docs/content/toolkit-resources.mdx +45 -2
- package/docs/content/toolkit-settings.mdx +8 -2
- package/docs/content/toolkit-setup-connections.mdx +7 -2
- package/docs/content/toolkit-sharing.mdx +46 -3
- package/docs/content/toolkit-ui.mdx +82 -11
- package/docs/content/tracking.mdx +10 -8
- package/docs/content/using-your-agent.mdx +0 -12
- package/docs/content/voice-input.mdx +7 -1
- package/docs/content/what-is-agent-native.mdx +7 -8
- package/docs/content/workspace-connections.mdx +16 -23
- package/docs/content/workspace-management.mdx +16 -4
- package/docs/content/workspace.mdx +19 -18
- package/package.json +5 -1
- package/src/templates/default/.agents/skills/capture-learnings/SKILL.md +22 -9
- package/src/templates/default/AGENTS.md +7 -3
- package/src/templates/workspace-core/.agents/skills/authentication/SKILL.md +1 -1
- package/src/templates/workspace-core/.agents/skills/capture-learnings/SKILL.md +22 -9
- package/src/templates/workspace-core/.agents/skills/extension-points/SKILL.md +6 -3
- package/src/templates/workspace-core/.agents/skills/extensions/SKILL.md +25 -0
- package/src/templates/workspace-core/.agents/skills/integration-webhooks/SKILL.md +15 -0
- package/src/templates/workspace-core/.agents/skills/voice-transcription/SKILL.md +39 -5
- package/src/templates/workspace-core/AGENTS.md +3 -2
- package/corpus/core/docs/content/locales/ar-SA/migration-workbench.mdx +0 -76
- package/corpus/core/docs/content/locales/de-DE/migration-workbench.mdx +0 -76
- package/corpus/core/docs/content/locales/es-ES/migration-workbench.mdx +0 -76
- package/corpus/core/docs/content/locales/fr-FR/migration-workbench.mdx +0 -76
- package/corpus/core/docs/content/locales/hi-IN/migration-workbench.mdx +0 -74
- package/corpus/core/docs/content/locales/ja-JP/migration-workbench.mdx +0 -76
- package/corpus/core/docs/content/locales/ko-KR/migration-workbench.mdx +0 -74
- package/corpus/core/docs/content/locales/pt-BR/migration-workbench.mdx +0 -76
- package/corpus/core/docs/content/locales/zh-CN/migration-workbench.mdx +0 -74
- package/corpus/core/docs/content/locales/zh-TW/migration-workbench.mdx +0 -74
- package/corpus/core/docs/content/migration-workbench.mdx +0 -74
- package/corpus/core/docs/content/toolkit-app-adapters.mdx +0 -55
- package/corpus/core/docs/content/toolkit-collaboration-ui.mdx +0 -60
- package/corpus/core/docs/content/toolkit-sharing-ui.mdx +0 -45
- package/corpus/core/docs/content/toolkit-shell-hooks.mdx +0 -36
- package/docs/content/locales/ar-SA/migration-workbench.mdx +0 -76
- package/docs/content/locales/de-DE/migration-workbench.mdx +0 -76
- package/docs/content/locales/es-ES/migration-workbench.mdx +0 -76
- package/docs/content/locales/fr-FR/migration-workbench.mdx +0 -76
- package/docs/content/locales/hi-IN/migration-workbench.mdx +0 -74
- package/docs/content/locales/ja-JP/migration-workbench.mdx +0 -76
- package/docs/content/locales/ko-KR/migration-workbench.mdx +0 -74
- package/docs/content/locales/pt-BR/migration-workbench.mdx +0 -76
- package/docs/content/locales/zh-CN/migration-workbench.mdx +0 -74
- package/docs/content/locales/zh-TW/migration-workbench.mdx +0 -74
- package/docs/content/migration-workbench.mdx +0 -74
- package/docs/content/toolkit-app-adapters.mdx +0 -55
- package/docs/content/toolkit-collaboration-ui.mdx +0 -60
- package/docs/content/toolkit-sharing-ui.mdx +0 -45
- package/docs/content/toolkit-shell-hooks.mdx +0 -36
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"MultiTabAssistantChat.js","sourceRoot":"","sources":["../../src/client/MultiTabAssistantChat.tsx"],"names":[],"mappings":"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","sourcesContent":["import {\n IconX,\n IconPlus,\n IconHistory,\n IconSearch,\n IconLink,\n IconLinkOff,\n IconCheck,\n} from \"@tabler/icons-react\";\nimport React, {\n useState,\n useRef,\n useEffect,\n useCallback,\n useMemo,\n} from \"react\";\n\nimport { DEFAULT_MODEL } from \"../agent/default-model.js\";\nimport {\n getReasoningEffortOptionsForModel,\n isReasoningEffort,\n type ReasoningEffort,\n} from \"../shared/reasoning-effort.js\";\nimport {\n AGENT_CHAT_CLEAR_CONTEXT_MESSAGE_TYPE,\n AGENT_CHAT_REMOVE_CONTEXT_MESSAGE_TYPE,\n AGENT_CHAT_SET_CONTEXT_MESSAGE_TYPE,\n appendAgentChatContextToMessage,\n claimAgentChatOpenRequest,\n claimAgentChatSubmit,\n drainBufferedAgentChatOpenRequests,\n drainBufferedAgentChatSubmits,\n isAgentChatSubmitCancelled,\n normalizeAgentChatContextItem,\n parseSubmitChatMessage,\n reportAgentChatSubmitResult,\n type AgentChatContextItem,\n} from \"./agent-chat.js\";\nimport { agentNativePath, appPath } from \"./api-path.js\";\nimport {\n AssistantChat,\n type AssistantChatProps,\n type AssistantChatHandle,\n} from \"./AssistantChat.js\";\nimport {\n buildChatModelGroups,\n type EngineModelGroup,\n} from \"./chat-model-groups.js\";\nimport {\n Popover,\n PopoverAnchor,\n PopoverContent,\n PopoverTrigger,\n} from \"./components/ui/popover.js\";\nimport {\n Tooltip,\n TooltipContent,\n TooltipProvider,\n TooltipTrigger,\n} from \"./components/ui/tooltip.js\";\nimport { isTrustedFrameMessage } from \"./frame.js\";\nimport { KeepTabOpenNotice } from \"./KeepTabOpenNotice.js\";\nimport { RunStuckBanner } from \"./RunStuckBanner.js\";\nimport { callAction } from \"./use-action.js\";\nimport {\n useChatThreads,\n type ChatThreadScope,\n type ChatThreadSummary,\n} from \"./use-chat-threads.js\";\nimport { cn } from \"./utils.js\";\n\ninterface ModelSelection {\n model: string;\n engine?: string;\n effort?: ReasoningEffort;\n}\n\ninterface PendingSend {\n message: string;\n images?: string[];\n submit: boolean;\n trackInRunsTray?: boolean;\n requestMode?: \"act\" | \"plan\";\n /** Correlates with `AGENT_CHAT_SUBMIT_RESULT_EVENT` — see agent-chat.ts. */\n submitMessageId?: string;\n}\n\n/**\n * A send queued until its target thread is ready. `threadId: null` targets the\n * first thread to become active (cold start); a concrete id is a thread whose\n * chat ref hasn't mounted yet. Drained by the flush effect.\n */\ninterface PendingDelivery {\n threadId: string | null;\n send: PendingSend;\n}\n\n/** The single path that hands a queued send to a mounted chat ref. */\nfunction deliverPendingSend(ref: AssistantChatHandle, send: PendingSend): void {\n if (isAgentChatSubmitCancelled(send.submitMessageId)) return;\n if (!send.submit) {\n ref.prefillMessage(send.message);\n return;\n }\n if (send.trackInRunsTray || send.requestMode || send.submitMessageId) {\n ref.sendMessage(send.message, send.images, {\n ...(send.trackInRunsTray ? { trackInRunsTray: true } : {}),\n ...(send.requestMode ? { requestMode: send.requestMode } : {}),\n ...(send.submitMessageId\n ? { submitMessageId: send.submitMessageId }\n : {}),\n });\n } else {\n ref.sendMessage(send.message, send.images);\n }\n}\n\nconst MODEL_SELECTION_STORAGE_KEY = \"agent-native:chat-models:selection\";\n\nfunction readStoredModelSelection(key: string): ModelSelection | undefined {\n if (typeof window === \"undefined\") return undefined;\n try {\n const raw = window.localStorage.getItem(key);\n if (!raw) return undefined;\n const parsed = JSON.parse(raw) as Partial<ModelSelection>;\n if (typeof parsed.model !== \"string\" || !parsed.model.trim()) {\n return undefined;\n }\n const selection: ModelSelection = {\n model: parsed.model,\n effort: isReasoningEffort(parsed.effort) ? parsed.effort : \"auto\",\n };\n if (typeof parsed.engine === \"string\") selection.engine = parsed.engine;\n return selection;\n } catch {\n return undefined;\n }\n}\n\nfunction writeStoredModelSelection(key: string, selection: ModelSelection) {\n if (typeof window === \"undefined\") return;\n try {\n window.localStorage.setItem(key, JSON.stringify(selection));\n } catch {}\n}\n\nfunction resolveModelSelection(\n selection: ModelSelection | undefined,\n groups: EngineModelGroup[],\n): ModelSelection | undefined {\n if (!selection?.model) return undefined;\n if (groups.length === 0) {\n const requestedEffort = selection.effort ?? \"auto\";\n const effortOptions = getReasoningEffortOptionsForModel(selection.model);\n return {\n model: selection.model,\n effort:\n requestedEffort === \"auto\" || effortOptions.includes(requestedEffort)\n ? requestedEffort\n : \"auto\",\n };\n }\n const preferredGroup = groups.find(\n (group) =>\n group.engine === selection.engine &&\n group.models.includes(selection.model),\n );\n const fallbackGroup = groups.find((group) =>\n group.models.includes(selection.model),\n );\n if (groups.length > 0 && !preferredGroup && !fallbackGroup) {\n return undefined;\n }\n const engine =\n preferredGroup?.engine ?? fallbackGroup?.engine ?? selection.engine;\n if (!engine && groups.length > 0) return undefined;\n\n const requestedEffort = selection.effort ?? \"auto\";\n const effortOptions = getReasoningEffortOptionsForModel(selection.model);\n const effort =\n requestedEffort === \"auto\" || effortOptions.includes(requestedEffort)\n ? requestedEffort\n : \"auto\";\n const resolved: ModelSelection = { model: selection.model, effort };\n if (engine) resolved.engine = engine;\n return resolved;\n}\n\n// ─── Skeleton Loader ─────────────────────────────────────────────────────────\n\nfunction ChatSkeleton({\n header,\n headerOnly = false,\n}: {\n header?: React.ReactNode;\n headerOnly?: boolean;\n}) {\n return (\n <div\n className={cn(\n \"flex flex-col min-h-0\",\n headerOnly ? \"shrink-0\" : \"flex-1 h-full\",\n )}\n >\n {header ?? (\n <div className=\"flex items-center px-1 py-1 border-b border-border shrink-0 gap-0.5\">\n <div className=\"h-[22px] w-20 rounded-md bg-muted animate-pulse\" />\n <div className=\"ms-auto flex gap-0.5\">\n <div className=\"h-[22px] w-[22px] rounded-md bg-muted animate-pulse\" />\n <div className=\"h-[22px] w-[22px] rounded-md bg-muted animate-pulse\" />\n </div>\n </div>\n )}\n {!headerOnly && (\n <div className=\"flex-1 flex flex-col gap-3 p-4\">\n <div className=\"flex justify-center py-8\">\n <div className=\"h-10 w-10 rounded-full bg-muted animate-pulse\" />\n </div>\n <div className=\"h-3 w-32 rounded bg-muted animate-pulse mx-auto\" />\n </div>\n )}\n </div>\n );\n}\n\n// ─── Scope Badge ─────────────────────────────────────────────────────────────\n\nfunction formatScopeType(type: string) {\n return type.replace(/[-_]+/g, \" \");\n}\n\nfunction indefiniteArticleFor(value: string) {\n return /^[aeiou]/i.test(value.trim()) ? \"an\" : \"a\";\n}\n\nfunction getScopeCopy(scope: ChatThreadScope, isCurrentScope: boolean) {\n const type = formatScopeType(scope.type);\n const fallbackObject = isCurrentScope\n ? `this ${type}`\n : `${indefiniteArticleFor(type)} ${type}`;\n const objectLabel = scope.label || fallbackObject;\n return {\n objectLabel,\n chipLabel:\n scope.label || (isCurrentScope ? `this ${type}` : `${type} context`),\n };\n}\n\n/**\n * Compact context tab above the composer. Click → popover with related chats\n * and the remove-context action. It stays attached to the chat field so scoped\n * context is visible right where the next message will be composed.\n */\nfunction ScopeBadge({\n scope,\n currentScope,\n onDetach,\n otherScopedThreads,\n activeThreadId,\n openTabIds,\n onSelectThread,\n}: {\n scope: ChatThreadScope;\n currentScope?: ChatThreadScope | null;\n onDetach: () => void;\n /** Other threads scoped to the same resource (excluding the active one),\n * pre-sorted most-recent-first. The chip popover lists these so the user\n * can hop between this resource's chats without opening the full history. */\n otherScopedThreads: ChatThreadSummary[];\n activeThreadId: string;\n openTabIds: Set<string>;\n onSelectThread: (id: string) => void;\n}) {\n const [open, setOpen] = useState(false);\n const isCurrentScope = Boolean(\n currentScope &&\n currentScope.type === scope.type &&\n currentScope.id === scope.id,\n );\n const hasDifferentCurrentScope = Boolean(currentScope && !isCurrentScope);\n const { objectLabel, chipLabel } = getScopeCopy(scope, isCurrentScope);\n const heading = `Using ${chipLabel}`;\n const detailSuffix = hasDifferentCurrentScope\n ? \"Start a new chat to use the current page.\"\n : isCurrentScope\n ? \"New chats here keep this context.\"\n : \"Start a new chat for a general conversation.\";\n const otherCount = otherScopedThreads.length;\n return (\n <div className=\"agent-scope-badge-wrapper relative z-[1] -mb-2 flex shrink-0 items-end justify-center px-3 pt-1 text-[11px] text-muted-foreground\">\n <Popover open={open} onOpenChange={setOpen}>\n <PopoverTrigger asChild>\n <button\n type=\"button\"\n className=\"inline-flex h-7 min-w-0 max-w-full cursor-pointer items-center gap-1.5 rounded-t-lg border border-b-0 border-input bg-background px-3 text-muted-foreground transition-colors hover:bg-accent hover:text-foreground sm:max-w-72\"\n aria-label={heading}\n >\n <IconLink size={11} className=\"shrink-0 opacity-70\" />\n <span className=\"min-w-0 truncate\">{heading}</span>\n {otherCount > 0 && (\n <span\n className=\"ms-0.5 shrink-0 rounded-full bg-muted px-1.5 py-px text-[10px] leading-none text-muted-foreground\"\n aria-label={`${otherCount} other chats for ${objectLabel}`}\n >\n +{otherCount}\n </span>\n )}\n </button>\n </PopoverTrigger>\n <PopoverContent align=\"center\" side=\"top\" className=\"w-72 p-0\">\n <p className=\"px-3 pt-2 pb-1.5 text-[11px] text-muted-foreground\">\n This chat can see{\" \"}\n <span className=\"text-foreground\">{objectLabel}</span>.{\" \"}\n {detailSuffix}\n </p>\n {otherCount > 0 && (\n <div className=\"border-t border-border\">\n <div className=\"px-3 pt-1.5 pb-1 text-[10px] uppercase tracking-wider text-muted-foreground/70\">\n Chats for {objectLabel}\n </div>\n <div className=\"max-h-56 overflow-y-auto pb-1\">\n {otherScopedThreads.map((thread) =>\n renderThreadRow(\n thread,\n activeThreadId,\n openTabIds,\n formatThreadTime,\n onSelectThread,\n () => setOpen(false),\n ),\n )}\n </div>\n </div>\n )}\n <div className=\"border-t border-border p-1\">\n <button\n type=\"button\"\n onClick={() => {\n setOpen(false);\n onDetach();\n }}\n className=\"flex w-full items-center gap-2 rounded px-2 py-1.5 text-xs text-foreground hover:bg-accent cursor-pointer\"\n >\n <IconLinkOff size={13} />\n <span>Remove context</span>\n </button>\n </div>\n </PopoverContent>\n </Popover>\n </div>\n );\n}\n\n/**\n * Thin confirmation banner shown briefly after detach. The chip itself\n * unmounts the moment scope clears on the active thread, so this banner\n * holds the visual feedback long enough for the user to register what\n * just happened and learn where the chat went (History popover).\n */\nfunction DetachConfirmationBanner() {\n return (\n <div className=\"agent-scope-badge-wrapper relative z-[1] -mb-2 flex shrink-0 items-end justify-center px-3 pt-1 text-[11px] text-muted-foreground\">\n <span className=\"inline-flex h-7 min-w-0 max-w-full items-center gap-1.5 rounded-t-lg border border-b-0 border-input bg-background px-3 text-foreground shadow-[0_-8px_24px_hsl(var(--background)/0.72)] sm:max-w-80\">\n <IconCheck size={11} className=\"shrink-0 opacity-80\" />\n <span className=\"min-w-0 truncate\">\n Context removed. Find this chat in History.\n </span>\n </span>\n </div>\n );\n}\n\n// ─── History Popover ─────────────────────────────────────────────────────────\n\nfunction formatThreadTime(ts: number): string {\n const d = new Date(ts);\n const now = new Date();\n const diffMs = now.getTime() - d.getTime();\n const diffDays = Math.floor(diffMs / 86400000);\n if (diffDays === 0)\n return d.toLocaleTimeString([], { hour: \"numeric\", minute: \"2-digit\" });\n if (diffDays === 1) return \"Yesterday\";\n if (diffDays < 7) return d.toLocaleDateString([], { weekday: \"short\" });\n return d.toLocaleDateString([], { month: \"short\", day: \"numeric\" });\n}\n\nfunction renderThreadRow(\n thread: ChatThreadSummary,\n activeThreadId: string | null,\n openTabIds: Set<string>,\n formatTime: (ts: number) => string,\n onSelect: (id: string) => void,\n onClose: () => void,\n) {\n const isActive = thread.id === activeThreadId;\n return (\n <button\n key={thread.id}\n onClick={() => {\n onSelect(thread.id);\n onClose();\n }}\n className={cn(\n \"w-full px-3 py-2 text-start hover:bg-accent/50 cursor-pointer\",\n isActive && \"bg-accent/30\",\n )}\n >\n <div className=\"flex items-baseline justify-between gap-2\">\n <span className=\"text-xs font-medium text-foreground truncate\">\n {thread.title || thread.preview || \"Chat\"}\n </span>\n <span className=\"text-[10px] text-muted-foreground shrink-0\">\n {isActive\n ? \"Active\"\n : openTabIds.has(thread.id)\n ? \"Open\"\n : formatTime(thread.updatedAt)}\n </span>\n </div>\n {thread.preview && thread.title !== thread.preview && (\n <div className=\"text-[11px] text-muted-foreground truncate mt-0.5\">\n {thread.preview}\n </div>\n )}\n {thread.scope?.label && (\n <div className=\"mt-0.5 text-[10px] text-muted-foreground/70 truncate\">\n {thread.scope.label}\n </div>\n )}\n </button>\n );\n}\n\nfunction HistoryPopover({\n threads,\n openTabIds,\n activeThreadId,\n currentScope,\n hasMoreThreads = false,\n isLoadingMoreThreads = false,\n loadError,\n onSelect,\n onClose,\n onLoadMore,\n onSearch,\n}: {\n threads: ChatThreadSummary[];\n openTabIds: Set<string>;\n activeThreadId: string | null;\n currentScope?: ChatThreadScope | null;\n hasMoreThreads?: boolean;\n isLoadingMoreThreads?: boolean;\n loadError?: string | null;\n onSelect: (id: string) => void;\n onClose: () => void;\n onLoadMore?: () => void;\n onSearch?: (query: string) => Promise<ChatThreadSummary[]>;\n}) {\n const [search, setSearch] = useState(\"\");\n const [searchResults, setSearchResults] = useState<\n ChatThreadSummary[] | null\n >(null);\n const [isSearching, setIsSearching] = useState(false);\n const inputRef = useRef<HTMLInputElement>(null);\n const debounceRef = useRef<ReturnType<typeof setTimeout>>(undefined);\n\n useEffect(() => {\n inputRef.current?.focus();\n }, []);\n\n // Debounced server-side search\n const searchIdRef = useRef(0);\n useEffect(() => {\n if (debounceRef.current) clearTimeout(debounceRef.current);\n const q = search.trim();\n if (!q) {\n searchIdRef.current++;\n setSearchResults(null);\n setIsSearching(false);\n return;\n }\n setIsSearching(true);\n const id = ++searchIdRef.current;\n debounceRef.current = setTimeout(async () => {\n if (onSearch) {\n const results = await onSearch(q);\n if (id !== searchIdRef.current) return;\n setSearchResults(results);\n } else {\n // Fallback to client-side filtering\n setSearchResults(null);\n }\n setIsSearching(false);\n }, 250);\n return () => {\n if (debounceRef.current) clearTimeout(debounceRef.current);\n };\n }, [search, onSearch]);\n\n // Hide empty threads from the history list — except the currently-active\n // one. The active thread always belongs in the list so the user can see\n // they're in it (the previous filter dropped a brand-new chat the user\n // had just opened, making them think their chat had vanished).\n const visibleThreads = threads.filter(\n (t) => t.messageCount > 0 || t.id === activeThreadId,\n );\n\n const filtered = search.trim()\n ? (searchResults ?? visibleThreads).filter(\n (t) => t.messageCount > 0 || t.id === activeThreadId,\n )\n : visibleThreads;\n\n // When scope is set we split history into two sections so the user can\n // see \"this deck's chats\" first without losing access to general /\n // other-deck chats. Section labels intentionally use the current\n // resource type (deck/design/dashboard) instead of a generic phrase.\n const sectionedThreads = currentScope\n ? {\n scoped: filtered.filter(\n (t) =>\n t.scope?.type === currentScope.type &&\n t.scope?.id === currentScope.id,\n ),\n other: filtered.filter(\n (t) =>\n !t.scope ||\n t.scope.type !== currentScope.type ||\n t.scope.id !== currentScope.id,\n ),\n }\n : null;\n\n return (\n <Popover open onOpenChange={(open) => !open && onClose()}>\n <PopoverAnchor asChild>\n <span aria-hidden className=\"absolute end-2 top-0 h-px w-px\" />\n </PopoverAnchor>\n <PopoverContent\n align=\"end\"\n side=\"bottom\"\n sideOffset={0}\n onOpenAutoFocus={(event) => {\n event.preventDefault();\n inputRef.current?.focus();\n }}\n className=\"w-72 rounded-lg p-0\"\n >\n <div className=\"flex items-center gap-2 px-3 py-2 border-b border-border\">\n <IconSearch size={13} />\n <input\n ref={inputRef}\n type=\"text\"\n value={search}\n onChange={(e) => setSearch(e.target.value)}\n placeholder=\"Search chats...\"\n className=\"flex-1 bg-transparent text-xs text-foreground placeholder:text-muted-foreground outline-none\"\n />\n </div>\n <div className=\"max-h-64 overflow-y-auto py-1\">\n {loadError && !search.trim() ? (\n <div className=\"px-3 py-4 text-xs text-amber-500 text-center\">\n {loadError}\n </div>\n ) : isSearching ? (\n <div className=\"px-3 py-4 text-xs text-muted-foreground text-center\">\n Searching...\n </div>\n ) : filtered.length === 0 ? (\n <div className=\"px-3 py-4 text-xs text-muted-foreground text-center\">\n {search ? \"No matching chats\" : \"No chats yet\"}\n </div>\n ) : sectionedThreads ? (\n <>\n {sectionedThreads.scoped.length > 0 && (\n <>\n <div className=\"px-3 pt-1.5 pb-1 text-[10px] uppercase tracking-wider text-muted-foreground/70\">\n This {currentScope!.type}\n </div>\n {sectionedThreads.scoped.map((thread) =>\n renderThreadRow(\n thread,\n activeThreadId,\n openTabIds,\n formatThreadTime,\n onSelect,\n onClose,\n ),\n )}\n </>\n )}\n {sectionedThreads.other.length > 0 && (\n <>\n <div className=\"px-3 pt-2 pb-1 text-[10px] uppercase tracking-wider text-muted-foreground/70\">\n All chats\n </div>\n {sectionedThreads.other.map((thread) =>\n renderThreadRow(\n thread,\n activeThreadId,\n openTabIds,\n formatThreadTime,\n onSelect,\n onClose,\n ),\n )}\n </>\n )}\n </>\n ) : (\n filtered.map((thread) =>\n renderThreadRow(\n thread,\n activeThreadId,\n openTabIds,\n formatThreadTime,\n onSelect,\n onClose,\n ),\n )\n )}\n {!search.trim() && hasMoreThreads && (\n <button\n type=\"button\"\n onClick={() => onLoadMore?.()}\n disabled={isLoadingMoreThreads}\n className=\"mx-1 mt-1 flex w-[calc(100%-0.5rem)] items-center justify-center rounded-md px-3 py-2 text-xs text-muted-foreground hover:bg-accent hover:text-foreground disabled:cursor-default disabled:opacity-60\"\n >\n {isLoadingMoreThreads ? \"Loading...\" : \"Load older chats\"}\n </button>\n )}\n </div>\n </PopoverContent>\n </Popover>\n );\n}\n\n// ─── Help Popover ────────────────────────────────────────────────────────────\n\nfunction HelpPopover({ onClose }: { onClose: () => void }) {\n useEffect(() => {\n const handler = (e: KeyboardEvent) => {\n if (e.key === \"Escape\") onClose();\n };\n window.addEventListener(\"keydown\", handler);\n return () => window.removeEventListener(\"keydown\", handler);\n }, [onClose]);\n\n const commands = [\n {\n name: \"/clear\",\n description: \"Start a new chat (keeps current chat in history)\",\n },\n { name: \"/new\", description: \"Same as /clear\" },\n { name: \"/history\", description: \"Browse all chats\" },\n { name: \"/plan\", description: \"Switch to read-only planning\" },\n { name: \"/act\", description: \"Switch back to acting\" },\n { name: \"/help\", description: \"Show this list of commands\" },\n { name: \"@\", description: \"Mention files, agents, or resources\" },\n ];\n\n return (\n <>\n <div className=\"fixed inset-0 z-40\" onClick={onClose} />\n <div className=\"absolute end-2 top-0 z-50 w-72 rounded-lg border border-border bg-popover shadow-lg\">\n <div className=\"flex items-center justify-between px-3 py-2 border-b border-border\">\n <span className=\"text-xs font-medium text-foreground\">\n Available Commands\n </span>\n <button\n onClick={onClose}\n aria-label=\"Close help\"\n className=\"flex h-5 w-5 items-center justify-center rounded text-muted-foreground hover:text-foreground\"\n >\n <IconX size={12} />\n </button>\n </div>\n <div className=\"py-1\">\n {commands.map((cmd) => (\n <div key={cmd.name} className=\"px-3 py-1.5\">\n <div className=\"text-xs font-medium text-foreground\">\n {cmd.name}\n </div>\n <div className=\"text-[11px] text-muted-foreground\">\n {cmd.description}\n </div>\n </div>\n ))}\n </div>\n </div>\n </>\n );\n}\n\n// ─── Types ──────────────────────────────────────────────────────────────────\n\nexport interface ChatTab {\n id: string;\n label: string;\n status: \"idle\" | \"running\" | \"completed\";\n /** If this tab is a sub-agent, the parent thread ID */\n parentThreadId?: string;\n /** Short name for sub-agent tabs (e.g. \"Research\", \"Draft email\") */\n subAgentName?: string;\n}\n\ntype AgentTeamRunStatus =\n | \"queued\"\n | \"running\"\n | \"paused\"\n | \"needs-approval\"\n | \"completed\"\n | \"errored\"\n | \"unknown\";\n\ninterface AgentTeamRunSummary {\n title?: string;\n status?: AgentTeamRunStatus;\n sourceRecord?: {\n type?: string;\n threadId?: unknown;\n parentThreadId?: unknown;\n name?: unknown;\n };\n metadata?: Record<string, unknown>;\n}\n\ninterface AgentTeamTabInfo {\n threadId: string;\n parentThreadId: string;\n name: string;\n status: AgentTeamRunStatus;\n}\n\nfunction readString(value: unknown): string {\n return typeof value === \"string\" ? value.trim() : \"\";\n}\n\nfunction requestModeFromExecMode(\n value: AssistantChatProps[\"execMode\"],\n): \"act\" | \"plan\" | undefined {\n if (value === \"plan\") return \"plan\";\n if (value === \"build\") return \"act\";\n return undefined;\n}\n\nfunction isActiveAgentTeamStatus(status?: AgentTeamRunStatus): boolean {\n return (\n status === \"queued\" ||\n status === \"running\" ||\n status === \"paused\" ||\n status === \"needs-approval\"\n );\n}\n\nfunction chatTabStatusFromAgentTeamStatus(\n status?: AgentTeamRunStatus,\n): ChatTab[\"status\"] | undefined {\n if (!status) return undefined;\n return isActiveAgentTeamStatus(status) ? \"running\" : \"completed\";\n}\n\nconst STALE_THREAD_THRESHOLD_MS = 12 * 60 * 60 * 1000;\nconst DEFAULT_THREAD_URL_PARAM = \"thread\";\nconst THREAD_URL_CHANGED_EVENT = \"agent-chat:url-thread-changed\";\nconst hasOwn = Object.prototype.hasOwnProperty;\n\n// The history patch is installed once and shared via a ref count so that\n// multiple synced chats (or a remount) don't restore a stale `pushState`\n// reference and silently drop a wrapper installed by another instance.\nlet historyPatchRefCount = 0;\nlet restoreHistoryPatch: (() => void) | null = null;\n\nfunction installHistoryThreadUrlPatch(): () => void {\n if (typeof window === \"undefined\") return () => {};\n historyPatchRefCount += 1;\n if (historyPatchRefCount === 1) {\n const originalPushState = window.history.pushState;\n const originalReplaceState = window.history.replaceState;\n const dispatchUrlChange = () => {\n window.dispatchEvent(new Event(THREAD_URL_CHANGED_EVENT));\n };\n window.history.pushState = function pushState(...args) {\n const result = originalPushState.apply(this, args);\n dispatchUrlChange();\n return result;\n };\n window.history.replaceState = function replaceState(...args) {\n const result = originalReplaceState.apply(this, args);\n dispatchUrlChange();\n return result;\n };\n restoreHistoryPatch = () => {\n window.history.pushState = originalPushState;\n window.history.replaceState = originalReplaceState;\n };\n }\n return () => {\n historyPatchRefCount = Math.max(0, historyPatchRefCount - 1);\n if (historyPatchRefCount === 0) {\n restoreHistoryPatch?.();\n restoreHistoryPatch = null;\n }\n };\n}\n\nexport interface ChatThreadUrlSyncOptions {\n /** Query-string parameter used by the generic URL adapter. Default: `thread`. */\n paramName?: string;\n /**\n * Route-owned thread id. Pass `null` for the create route and a string for\n * thread routes like `/chat/:threadId`.\n */\n routeThreadId?: string | null;\n /** Build the URL path for a thread id, or for create mode when id is null. */\n getPath?: (threadId: string | null) => string;\n /** Optional router navigation callback used with `getPath`. */\n navigate?: (path: string, options?: { replace?: boolean }) => void;\n}\n\nfunction normalizeUrlThreadId(value: string | null | undefined): string | null {\n if (typeof value !== \"string\") return null;\n const trimmed = value.trim();\n return trimmed || null;\n}\n\nfunction resolveThreadUrlSync(\n value: MultiTabAssistantChatProps[\"threadUrlSync\"],\n): {\n enabled: boolean;\n paramName: string;\n routeThreadId?: string | null;\n getPath?: (threadId: string | null) => string;\n navigate?: (path: string, options?: { replace?: boolean }) => void;\n} {\n if (!value) return { enabled: false, paramName: DEFAULT_THREAD_URL_PARAM };\n if (value === true) {\n return { enabled: true, paramName: DEFAULT_THREAD_URL_PARAM };\n }\n return {\n enabled: true,\n paramName: value.paramName?.trim() || DEFAULT_THREAD_URL_PARAM,\n ...(hasOwn.call(value, \"routeThreadId\")\n ? { routeThreadId: normalizeUrlThreadId(value.routeThreadId) }\n : {}),\n ...(value.getPath ? { getPath: value.getPath } : {}),\n ...(value.navigate ? { navigate: value.navigate } : {}),\n };\n}\n\nfunction readUrlThreadId(paramName: string): string | null {\n if (typeof window === \"undefined\") return null;\n try {\n const params = new URLSearchParams(window.location.search);\n return normalizeUrlThreadId(\n params.get(paramName) ??\n (paramName === DEFAULT_THREAD_URL_PARAM\n ? params.get(\"threadId\")\n : null),\n );\n } catch {\n return null;\n }\n}\n\nfunction runToAgentTeamTabInfo(\n run: AgentTeamRunSummary,\n): AgentTeamTabInfo | null {\n if (run.sourceRecord?.type && run.sourceRecord.type !== \"agent-team-task\") {\n return null;\n }\n const metadata = run.metadata ?? {};\n const threadId =\n readString(run.sourceRecord?.threadId) || readString(metadata.threadId);\n const parentThreadId =\n readString(run.sourceRecord?.parentThreadId) ||\n readString(metadata.parentThreadId);\n if (!threadId || !parentThreadId || threadId === parentThreadId) return null;\n const name =\n readString(run.sourceRecord?.name) ||\n readString(metadata.name) ||\n readString(run.title) ||\n \"Sub-agent\";\n return {\n threadId,\n parentThreadId,\n name,\n status: run.status ?? \"unknown\",\n };\n}\n\nexport interface MultiTabAssistantChatHeaderProps {\n tabs: ChatTab[];\n activeTabId: string;\n activeTabMessageCount: number;\n setActiveTabId: (tabId: string) => void;\n addTab: () => void;\n closeTab: (tabId: string) => void;\n closeOtherTabs: (tabId: string) => void;\n closeAllTabs: () => void;\n clearActiveTab: () => void;\n /** Open the history popover */\n showHistory?: boolean;\n toggleHistory?: () => void;\n /** Number of open tabs (useful for triggering scroll on tab count change) */\n tabCount: number;\n}\n\n// ─── Component ──────────────────────────────────────────────────────────────\n\nexport type MultiTabAssistantChatProps = Omit<\n AssistantChatProps,\n \"tabId\" | \"threadId\"\n> & {\n /** Show the tab bar. Default: true */\n showTabBar?: boolean;\n /** Optional custom single-row header renderer */\n renderHeader?: (props: MultiTabAssistantChatHeaderProps) => React.ReactNode;\n /** Optional overlay actions renderer for the active tab */\n renderOverlay?: (props: MultiTabAssistantChatHeaderProps) => React.ReactNode;\n /** Hide the chat content while keeping the header visible. Used when CLI/resources mode is active. */\n contentHidden?: boolean;\n /** Namespace for localStorage keys — used to isolate chat state per app in the frame. */\n storageKey?: string;\n /** Restore the previously active thread and open tabs from localStorage. */\n restoreActiveThread?: boolean;\n /** Stable browser tab id used for tab-scoped app-state context. */\n browserTabId?: string;\n /**\n * Keep the active thread in URL state. `true` uses the generic `?thread=id`\n * adapter; passing `routeThreadId` + `getPath` lets an app bind chats to\n * route params such as `/chat/:threadId`.\n */\n threadUrlSync?: boolean | ChatThreadUrlSyncOptions;\n /**\n * Bind new chats to a resource (deck, design, dashboard, etc.). When set,\n * new chats automatically inherit this scope and scoped chats tuck away when\n * the user leaves the resource. General chats remain visible across resource\n * navigation, and the user can detach a scoped chat via the scope chip above\n * the composer.\n */\n scope?: ChatThreadScope | null;\n /** Show the compact scope chip above the composer. Default: true. */\n showScopeBadge?: boolean;\n};\n\nexport function MultiTabAssistantChat({\n showTabBar = true,\n renderHeader,\n renderOverlay,\n contentHidden = false,\n apiUrl = agentNativePath(\"/_agent-native/agent-chat\"),\n storageKey,\n restoreActiveThread = true,\n browserTabId,\n threadUrlSync = false,\n scope = null,\n showScopeBadge = true,\n ...props\n}: MultiTabAssistantChatProps) {\n const {\n enabled: threadUrlSyncEnabled,\n paramName: threadUrlParamName,\n routeThreadId,\n getPath: getThreadPath,\n navigate: navigateThreadUrl,\n } = resolveThreadUrlSync(threadUrlSync);\n const threadRouteControlsActiveThread =\n threadUrlSyncEnabled &&\n threadUrlSync !== true &&\n typeof threadUrlSync === \"object\" &&\n hasOwn.call(threadUrlSync, \"routeThreadId\");\n const [urlThreadId, setUrlThreadId] = useState<string | null>(() =>\n threadUrlSyncEnabled\n ? threadRouteControlsActiveThread\n ? (routeThreadId ?? null)\n : readUrlThreadId(threadUrlParamName)\n : null,\n );\n const urlThreadIdRef = useRef(urlThreadId);\n urlThreadIdRef.current = urlThreadId;\n\n useEffect(() => {\n if (!threadUrlSyncEnabled || threadRouteControlsActiveThread) return;\n const update = () => setUrlThreadId(readUrlThreadId(threadUrlParamName));\n const uninstallHistoryPatch = installHistoryThreadUrlPatch();\n update();\n window.addEventListener(\"popstate\", update);\n window.addEventListener(THREAD_URL_CHANGED_EVENT, update);\n return () => {\n uninstallHistoryPatch();\n window.removeEventListener(\"popstate\", update);\n window.removeEventListener(THREAD_URL_CHANGED_EVENT, update);\n };\n }, [\n threadRouteControlsActiveThread,\n threadUrlParamName,\n threadUrlSyncEnabled,\n ]);\n\n useEffect(() => {\n if (!threadUrlSyncEnabled || !threadRouteControlsActiveThread) return;\n setUrlThreadId(routeThreadId ?? null);\n }, [routeThreadId, threadRouteControlsActiveThread, threadUrlSyncEnabled]);\n\n const writeThreadUrl = useCallback(\n (threadId: string | null, options: { replace?: boolean } = {}): void => {\n if (!threadUrlSyncEnabled || typeof window === \"undefined\") return;\n try {\n const normalizedThreadId = normalizeUrlThreadId(threadId);\n let next: string;\n if (getThreadPath) {\n next = getThreadPath(normalizedThreadId);\n } else {\n const url = new URL(window.location.href);\n if (normalizedThreadId) {\n url.searchParams.set(threadUrlParamName, normalizedThreadId);\n } else {\n url.searchParams.delete(threadUrlParamName);\n }\n if (threadUrlParamName !== \"threadId\") {\n url.searchParams.delete(\"threadId\");\n }\n next = `${url.pathname}${url.search}${url.hash}`;\n }\n const current = `${window.location.pathname}${window.location.search}${window.location.hash}`;\n if (next === current) {\n setUrlThreadId(normalizedThreadId);\n return;\n }\n if (getThreadPath && navigateThreadUrl) {\n navigateThreadUrl(next, { replace: options.replace === true });\n setUrlThreadId(normalizedThreadId);\n return;\n }\n const method = options.replace ? \"replaceState\" : \"pushState\";\n // `getThreadPath` returns a router-local path (no app basename). When we\n // fall back to the raw History API instead of a router navigate, resolve\n // the basename so deep-link reloads work in mounted apps.\n const historyTarget = getThreadPath ? appPath(next) : next;\n window.history[method](window.history.state, \"\", historyTarget);\n setUrlThreadId(normalizedThreadId);\n window.dispatchEvent(new Event(THREAD_URL_CHANGED_EVENT));\n const popstate =\n typeof PopStateEvent === \"function\"\n ? new PopStateEvent(\"popstate\", { state: window.history.state })\n : new Event(\"popstate\");\n window.dispatchEvent(popstate);\n } catch {}\n },\n [\n getThreadPath,\n navigateThreadUrl,\n threadUrlParamName,\n threadUrlSyncEnabled,\n ],\n );\n\n const {\n threads,\n activeThreadId,\n isLoading,\n createThread,\n switchThread: switchThreadState,\n detachThread,\n forkThread,\n saveThreadData,\n generateTitle,\n searchThreads,\n loadMoreThreads,\n refreshThreads,\n hasMoreThreads,\n isLoadingMoreThreads,\n threadsLoadError,\n isNewThread,\n } = useChatThreads(apiUrl, storageKey, scope, {\n restoreActiveThread,\n routeThreadId: threadUrlSyncEnabled ? urlThreadId : undefined,\n });\n\n const switchThread = useCallback(\n (threadId: string, options: { replace?: boolean } = {}) => {\n switchThreadState(threadId);\n writeThreadUrl(threadId, options);\n },\n [switchThreadState, writeThreadUrl],\n );\n\n // Namespace all localStorage keys by storageKey when provided (for per-app isolation in frame)\n const keyPrefix = storageKey ? `:${storageKey}` : \"\";\n const modelSelectionKey = `${MODEL_SELECTION_STORAGE_KEY}${keyPrefix}`;\n\n // Track which tabs have been focused at least once (lazy mount for sub-agent tabs)\n const mountedTabsRef = useRef<Set<string>>(new Set());\n const activeThreadIdRef = useRef(activeThreadId);\n activeThreadIdRef.current = activeThreadId;\n // Mark the active tab as mounted so it persists when switched away\n if (activeThreadId) mountedTabsRef.current.add(activeThreadId);\n const chatRefs = useRef<Map<string, AssistantChatHandle>>(new Map());\n // Sends queued until their target thread is ready (see PendingDelivery).\n const pendingDeliveries = useRef<PendingDelivery[]>([]);\n const pendingContextItems = useRef<Map<string, AgentChatContextItem[]>>(\n new Map(),\n );\n const [runningThreads, setRunningThreads] = useState<Set<string>>(new Set());\n const [showHistory, setShowHistory] = useState(false);\n const newThreadIds = useRef<Set<string>>(new Set());\n\n // ─── Model state ─────────────────────────────────────────────────────────\n const [availableModels, setAvailableModels] = useState<EngineModelGroup[]>(\n [],\n );\n const [defaultModel, setDefaultModel] = useState<string>(DEFAULT_MODEL);\n const threadModelRef = useRef<\n Map<string, { model: string; engine?: string; effort?: ReasoningEffort }>\n >(new Map());\n const [persistedModelSelection, setPersistedModelSelection] = useState<\n ModelSelection | undefined\n >(() => readStoredModelSelection(modelSelectionKey));\n const [modelSelectionVersion, setModelSelectionVersion] = useState(0);\n\n useEffect(() => {\n setPersistedModelSelection(readStoredModelSelection(modelSelectionKey));\n }, [modelSelectionKey]);\n\n const bumpModelSelectionVersion = useCallback(() => {\n setModelSelectionVersion((version) => version + 1);\n }, []);\n const postMessageSubmissionsDisabled = props.composerDisabled === true;\n\n const setContextInTab = useCallback(\n (\n threadId: string,\n item: AgentChatContextItem,\n options?: { focus?: boolean },\n ) => {\n const ref = chatRefs.current.get(threadId);\n if (ref) {\n ref.setComposerContextItem(item, options);\n return;\n }\n const existing = pendingContextItems.current.get(threadId) ?? [];\n const index = existing.findIndex((current) => current.key === item.key);\n const next =\n index === -1\n ? [...existing, item]\n : existing.map((current, currentIndex) =>\n currentIndex === index ? item : current,\n );\n pendingContextItems.current.set(threadId, next);\n },\n [],\n );\n\n const removeContextInTab = useCallback((threadId: string, key: string) => {\n const ref = chatRefs.current.get(threadId);\n if (ref) {\n ref.removeComposerContextItem(key);\n return;\n }\n const existing = pendingContextItems.current.get(threadId);\n if (!existing) return;\n const next = existing.filter((item) => item.key !== key);\n if (next.length === 0) {\n pendingContextItems.current.delete(threadId);\n } else {\n pendingContextItems.current.set(threadId, next);\n }\n }, []);\n\n const clearContextInTab = useCallback((threadId: string) => {\n const ref = chatRefs.current.get(threadId);\n if (ref) {\n ref.clearComposerContextItems();\n return;\n }\n pendingContextItems.current.delete(threadId);\n }, []);\n\n const resolveThreadModelSelection = useCallback(\n (threadId: string) =>\n resolveModelSelection(\n threadModelRef.current.get(threadId) ?? persistedModelSelection,\n availableModels,\n ),\n [availableModels, persistedModelSelection, modelSelectionVersion],\n );\n\n const persistModelSelection = useCallback(\n (selection: ModelSelection) => {\n setPersistedModelSelection(selection);\n writeStoredModelSelection(modelSelectionKey, selection);\n },\n [modelSelectionKey],\n );\n\n const handleModelChange = useCallback(\n (model: string, engine: string) => {\n const threadId = activeThreadIdRef.current;\n if (!threadId) return;\n const existing = threadModelRef.current.get(threadId);\n const existingEffort = existing?.effort ?? \"auto\";\n const effortOptions = getReasoningEffortOptionsForModel(model);\n const effort =\n existingEffort === \"auto\" || effortOptions.includes(existingEffort)\n ? existingEffort\n : \"auto\";\n const selection = { model, engine, effort };\n threadModelRef.current.set(threadId, selection);\n persistModelSelection(selection);\n bumpModelSelectionVersion();\n },\n [bumpModelSelectionVersion, persistModelSelection],\n );\n\n const handleEffortChange = useCallback(\n (effort: ReasoningEffort) => {\n const threadId = activeThreadIdRef.current;\n if (!threadId) return;\n const existing = resolveThreadModelSelection(threadId);\n const model = existing?.model ?? defaultModel;\n const engine =\n existing?.engine ??\n availableModels.find((group) => group.models.includes(model))?.engine ??\n availableModels[0]?.engine;\n const selection: ModelSelection = { model, effort };\n if (engine) selection.engine = engine;\n threadModelRef.current.set(threadId, selection);\n persistModelSelection(selection);\n bumpModelSelectionVersion();\n },\n [\n availableModels,\n bumpModelSelectionVersion,\n defaultModel,\n persistModelSelection,\n resolveThreadModelSelection,\n ],\n );\n\n const refreshEngines = useCallback(() => {\n Promise.all([\n callAction(\"manage-agent-engine\" as any, { action: \"list\" } as any).catch(\n () => null,\n ),\n fetch(agentNativePath(\"/_agent-native/env-status\"))\n .then((r) => (r.ok ? r.json() : []))\n .catch(() => []),\n fetch(agentNativePath(\"/_agent-native/builder/status\"))\n .then((r) => (r.ok ? r.json() : null))\n .catch(() => null),\n ])\n .then(([enginesData, envKeys, builderStatus]) => {\n if (!enginesData?.engines) return;\n const configuredKeys = new Set(\n (envKeys as Array<{ key: string; configured: boolean }>)\n .filter((k) => k.configured)\n .map((k) => k.key),\n );\n const builderConnected = builderStatus?.configured === true;\n const currentEngineName: string | undefined =\n enginesData.current?.engine;\n const currentModel: string | undefined = enginesData.current?.model;\n\n const groups = buildChatModelGroups({\n engines: enginesData.engines,\n configuredKeys,\n builderConnected,\n currentEngineName,\n currentModel,\n });\n setAvailableModels(groups);\n setDefaultModel(currentModel ?? DEFAULT_MODEL);\n })\n .catch(() => {});\n }, []);\n\n useEffect(() => {\n refreshEngines();\n window.addEventListener(\"agent-engine:configured-changed\", refreshEngines);\n return () =>\n window.removeEventListener(\n \"agent-engine:configured-changed\",\n refreshEngines,\n );\n }, [refreshEngines]);\n\n // Parent-child thread mapping — persisted to localStorage.\n // Maps childThreadId → parentThreadId for sub-agent tabs.\n const PARENT_MAP_KEY = `agent-chat-parent-map${keyPrefix}`;\n const [parentMap, setParentMap] = useState<Record<string, string>>(() => {\n try {\n const saved = localStorage.getItem(PARENT_MAP_KEY);\n if (saved) return JSON.parse(saved);\n } catch {}\n return {};\n });\n const parentMapRef = useRef(parentMap);\n parentMapRef.current = parentMap;\n const dismissedSubAgentTabsRef = useRef<Set<string>>(new Set());\n\n // Persist parent map to localStorage\n useEffect(() => {\n try {\n localStorage.setItem(PARENT_MAP_KEY, JSON.stringify(parentMap));\n } catch {}\n }, [parentMap, PARENT_MAP_KEY]);\n\n // Sub-agent display names — persisted to localStorage.\n // Maps childThreadId → short name (e.g. \"Research\", \"Draft email\").\n const SUB_AGENT_NAMES_KEY = `agent-chat-sub-agent-names${keyPrefix}`;\n const [subAgentNames, setSubAgentNames] = useState<Record<string, string>>(\n () => {\n try {\n const saved = localStorage.getItem(SUB_AGENT_NAMES_KEY);\n if (saved) return JSON.parse(saved);\n } catch {}\n return {};\n },\n );\n const subAgentNamesRef = useRef(subAgentNames);\n subAgentNamesRef.current = subAgentNames;\n const [subAgentStatuses, setSubAgentStatuses] = useState<\n Record<string, AgentTeamRunStatus>\n >({});\n\n useEffect(() => {\n try {\n localStorage.setItem(SUB_AGENT_NAMES_KEY, JSON.stringify(subAgentNames));\n } catch {}\n }, [subAgentNames, SUB_AGENT_NAMES_KEY]);\n\n // Open tabs — persisted to localStorage so they survive refresh.\n // Per-scope: when scope changes (e.g. user navigates from Deck A to Deck\n // B), the tab bar reflects whichever tabs they had open for *that*\n // resource. We do not bleed deck A's tabs into deck B's view.\n const scopeKeyPart = scope ? `:scope:${scope.type}:${scope.id}` : \"\";\n const OPEN_TABS_KEY = `agent-chat-open-tabs${keyPrefix}${scopeKeyPart}`;\n const [openTabIds, setOpenTabIds] = useState<string[]>(() => {\n if (!restoreActiveThread && activeThreadId) {\n for (const id of [activeThreadId]) mountedTabsRef.current.add(id);\n return [activeThreadId];\n }\n try {\n const saved = localStorage.getItem(OPEN_TABS_KEY);\n if (saved) {\n const parsed = JSON.parse(saved);\n if (Array.isArray(parsed) && parsed.length > 0) {\n // Mark restored tabs as mounted\n for (const id of parsed) mountedTabsRef.current.add(id);\n return parsed;\n }\n }\n } catch {}\n return [];\n });\n const openTabIdsRef = useRef(openTabIds);\n openTabIdsRef.current = openTabIds;\n const initializedRef = useRef(false);\n\n // Rehydrate open tabs when the scope flips. Mirrors `persistedKeyRef` in\n // `useChatThreads`: on a scope change we need to read the new key BEFORE\n // the persistence effect writes the current (now-wrong) tab list under\n // that new key.\n const openTabsKeyRef = useRef(OPEN_TABS_KEY);\n useEffect(() => {\n if (openTabsKeyRef.current === OPEN_TABS_KEY) return;\n openTabsKeyRef.current = OPEN_TABS_KEY;\n initializedRef.current = false;\n if (!restoreActiveThread) {\n setOpenTabIds(activeThreadId ? [activeThreadId] : []);\n return;\n }\n try {\n const saved = localStorage.getItem(OPEN_TABS_KEY);\n if (saved) {\n const parsed = JSON.parse(saved);\n if (Array.isArray(parsed)) {\n for (const id of parsed) mountedTabsRef.current.add(id);\n setOpenTabIds(parsed);\n return;\n }\n }\n } catch {}\n setOpenTabIds([]);\n }, [OPEN_TABS_KEY, activeThreadId, restoreActiveThread]);\n\n // Look up the active thread's actual scope from the list — when the\n // user opens a chat from history that was scoped to a different\n // resource, the badge should advertise that thread's binding, not\n // necessarily the resource currently in the viewport. When the thread\n // and the live prop refer to the same resource, prefer the prop's\n // label so a rename or a deferred deck-title load shows up in the UI\n // without waiting on the next persistence cycle.\n const activeThreadScope = useMemo<ChatThreadScope | null>(() => {\n if (!activeThreadId) return null;\n const t = threads.find((x) => x.id === activeThreadId);\n const stored = t?.scope ?? null;\n if (!stored) return null;\n if (scope && stored.type === scope.type && stored.id === scope.id) {\n return { ...stored, label: scope.label || stored.label };\n }\n return stored;\n }, [threads, activeThreadId, scope?.type, scope?.id, scope?.label]);\n\n // Brief confirmation banner shown after detach. The chip itself disappears\n // the instant scope clears, which the user described as \"nothing different\n // happened.\" We hold the confirmation in the same slot for ~2s so the\n // detach is visually acknowledged and the user is pointed at History.\n const [detachConfirmType, setDetachConfirmType] = useState<string | null>(\n null,\n );\n const detachTimerRef = useRef<ReturnType<typeof setTimeout> | null>(null);\n useEffect(() => {\n return () => {\n if (detachTimerRef.current) clearTimeout(detachTimerRef.current);\n };\n }, []);\n const handleDetachActiveThread = useCallback(() => {\n if (!activeThreadId || !activeThreadScope) return;\n const type = activeThreadScope.type;\n setDetachConfirmType(type);\n if (detachTimerRef.current) clearTimeout(detachTimerRef.current);\n detachTimerRef.current = setTimeout(() => setDetachConfirmType(null), 2200);\n detachThread(activeThreadId);\n }, [activeThreadId, activeThreadScope, detachThread]);\n\n // Other chats scoped to the active thread's resource (excluding the active\n // thread itself). Sorted most-recent-first to match user expectation in the\n // chip popover and empty-state addon.\n const otherScopedThreads = useMemo<ChatThreadSummary[]>(() => {\n if (!activeThreadScope) return [];\n return threads\n .filter(\n (t) =>\n t.id !== activeThreadId &&\n t.scope?.type === activeThreadScope.type &&\n t.scope?.id === activeThreadScope.id,\n )\n .sort((a, b) => b.updatedAt - a.updatedAt);\n }, [threads, activeThreadId, activeThreadScope]);\n\n // Persist open tab IDs to localStorage (exclude sub-agent tabs — they're session-only)\n useEffect(() => {\n if (openTabsKeyRef.current !== OPEN_TABS_KEY) return;\n const mainTabs = openTabIds.filter((id) => !parentMap[id]);\n if (mainTabs.length > 0) {\n try {\n localStorage.setItem(OPEN_TABS_KEY, JSON.stringify(mainTabs));\n } catch {}\n }\n }, [openTabIds, parentMap, OPEN_TABS_KEY]);\n\n // Initialize open tabs once threads load — validate saved tabs still exist\n useEffect(() => {\n if (initializedRef.current || !activeThreadId || threads.length === 0)\n return;\n initializedRef.current = true;\n const threadIds = new Set(threads.map((t) => t.id));\n const threadMap = new Map(threads.map((t) => [t.id, t]));\n\n // Hide tabs that have had no activity for more than 12 hours. Stale tabs\n // are removed from the sidebar on load but remain accessible via history.\n const now = Date.now();\n const isStale = (id: string) => {\n const thread = threadMap.get(id);\n return thread\n ? now - thread.updatedAt > STALE_THREAD_THRESHOLD_MS\n : false;\n };\n\n // If the active thread is a sub-agent, switch to its parent or the most recent main thread\n if (parentMap[activeThreadId]) {\n const parent = parentMap[activeThreadId];\n if (parent && threadIds.has(parent)) {\n switchThread(parent);\n } else {\n // Fall back to most recent main thread\n const mainThread = threads.find((t) => !parentMap[t.id]);\n if (mainThread) switchThread(mainThread.id);\n }\n }\n\n setOpenTabIds((prev) => {\n // Filter out tabs that no longer exist, sub-agent tabs, or stale tabs (>12h inactive)\n const valid = prev.filter(\n (id) => threadIds.has(id) && !parentMap[id] && !isStale(id),\n );\n // Ensure active thread is included (only if it's not a sub-agent and not stale)\n if (\n !parentMap[activeThreadId] &&\n !valid.includes(activeThreadId) &&\n !isStale(activeThreadId)\n ) {\n valid.push(activeThreadId);\n }\n return valid;\n });\n\n // If active thread is stale, start fresh\n if (!parentMap[activeThreadId] && isStale(activeThreadId)) {\n createThread().then((id) => {\n if (id) writeThreadUrl(null);\n });\n }\n }, [\n activeThreadId,\n threads,\n parentMap,\n switchThread,\n createThread,\n writeThreadUrl,\n ]);\n\n // Ensure active thread is always in open tabs.\n // Use functional update to check inside the setter — avoids race with the\n // initialization effect that may have already added the ID in the same batch.\n //\n // Scoped navigation can reset openTabIds from a different localStorage key\n // without changing activeThreadId. Re-check after tab-list resets so the\n // sidebar cannot end up with a live active thread but no mounted chat.\n useEffect(() => {\n if (!activeThreadId || openTabIds.includes(activeThreadId)) return;\n if (parentMap[activeThreadId]) return;\n\n const activeThread = threads.find((thread) => thread.id === activeThreadId);\n if (\n activeThread &&\n Date.now() - activeThread.updatedAt > STALE_THREAD_THRESHOLD_MS\n ) {\n return;\n }\n\n setOpenTabIds((prev) =>\n prev.includes(activeThreadId) ? prev : [...prev, activeThreadId],\n );\n }, [activeThreadId, openTabIds, parentMap, threads]);\n\n // Ensure at least one tab is always open — auto-create if sidebar is empty.\n // Skipped when an active thread already exists (e.g. the hook generated an\n // optimistic id for a brand-new session); the activeThreadId effect above\n // adds it to openTabIds without spinning up a duplicate thread.\n const autoCreatingRef = useRef(false);\n useEffect(() => {\n if (isLoading || autoCreatingRef.current) return;\n if (openTabIds.length === 0 && !activeThreadId) {\n autoCreatingRef.current = true;\n createThread().then((id) => {\n autoCreatingRef.current = false;\n if (id) {\n newThreadIds.current.add(id);\n setOpenTabIds([id]);\n writeThreadUrl(null, { replace: true });\n }\n });\n }\n }, [isLoading, openTabIds, activeThreadId, createThread, writeThreadUrl]);\n\n useEffect(() => {\n let stopped = false;\n let timer: ReturnType<typeof setTimeout> | null = null;\n const runsUrl = `${apiUrl.replace(/\\/$/, \"\")}/runs/list?goalId=agent-team`;\n\n async function hydrateAgentTeamTabs() {\n try {\n const res = await fetch(runsUrl);\n if (res.ok) {\n const data = (await res.json()) as { runs?: AgentTeamRunSummary[] };\n const infos = Array.isArray(data.runs)\n ? data.runs\n .map(runToAgentTeamTabInfo)\n .filter((info): info is AgentTeamTabInfo => Boolean(info))\n : [];\n\n setSubAgentStatuses((prev) => {\n let changed = false;\n const next: Record<string, AgentTeamRunStatus> = {};\n for (const info of infos) {\n next[info.threadId] = info.status;\n if (prev[info.threadId] !== info.status) changed = true;\n }\n if (Object.keys(prev).length !== Object.keys(next).length) {\n changed = true;\n }\n return changed ? next : prev;\n });\n\n const openSet = new Set(openTabIdsRef.current);\n const candidates = infos.filter(\n (info) =>\n !dismissedSubAgentTabsRef.current.has(info.threadId) &&\n (openSet.has(info.parentThreadId) || openSet.has(info.threadId)),\n );\n\n if (candidates.length > 0) {\n const shouldRefreshThreads = candidates.some(\n (info) =>\n !openSet.has(info.threadId) && openSet.has(info.parentThreadId),\n );\n const candidateParents = new Map(\n candidates.map((info) => [info.threadId, info.parentThreadId]),\n );\n setParentMap((prev) => {\n let next = prev;\n for (const info of candidates) {\n if (next[info.threadId] === info.parentThreadId) continue;\n next =\n next === prev\n ? { ...prev, [info.threadId]: info.parentThreadId }\n : { ...next, [info.threadId]: info.parentThreadId };\n }\n return next;\n });\n setSubAgentNames((prev) => {\n let next = prev;\n for (const info of candidates) {\n if (!info.name || next[info.threadId] === info.name) continue;\n next =\n next === prev\n ? { ...prev, [info.threadId]: info.name }\n : { ...next, [info.threadId]: info.name };\n }\n return next;\n });\n\n setOpenTabIds((prev) => {\n let next = prev;\n for (const info of candidates) {\n if (next.includes(info.threadId)) continue;\n const parentIdx = next.indexOf(info.parentThreadId);\n if (parentIdx === -1) continue;\n if (next === prev) next = [...prev];\n let insertIdx = parentIdx + 1;\n while (insertIdx < next.length) {\n const siblingParent =\n parentMapRef.current[next[insertIdx]] ||\n candidateParents.get(next[insertIdx]);\n if (siblingParent !== info.parentThreadId) break;\n insertIdx++;\n }\n next.splice(insertIdx, 0, info.threadId);\n }\n return next;\n });\n if (shouldRefreshThreads) {\n refreshThreads();\n }\n }\n }\n } catch {\n // Best effort: task cards and manual history still work if this poll fails.\n } finally {\n if (!stopped) {\n timer = setTimeout(hydrateAgentTeamTabs, 3000);\n }\n }\n }\n\n hydrateAgentTeamTabs();\n return () => {\n stopped = true;\n if (timer) clearTimeout(timer);\n };\n }, [apiUrl, refreshThreads]);\n\n // Focus the composer when switching tabs\n useEffect(() => {\n if (!activeThreadId) return;\n // Small delay to ensure the tab is visible before focusing\n const t = setTimeout(() => {\n chatRefs.current.get(activeThreadId)?.focusComposer();\n }, 50);\n return () => clearTimeout(t);\n }, [activeThreadId]);\n\n // Ref callback: scroll the active tab into view in the overflow container.\n // Uses getBoundingClientRect for reliable positioning regardless of offsetParent.\n // A margin keeps the active tab from sitting flush against either container\n // edge — at the right edge it was landing directly under the +/history/menu\n // buttons, which visually clipped the tab label.\n const activeTabRefCb = useCallback((el: HTMLElement | null) => {\n if (!el) return;\n const container = el.parentElement;\n if (!container) return;\n const MARGIN = 24;\n requestAnimationFrame(() => {\n const containerRect = container.getBoundingClientRect();\n const tabRect = el.getBoundingClientRect();\n if (tabRect.left < containerRect.left + MARGIN) {\n container.scrollLeft += tabRect.left - containerRect.left - MARGIN;\n } else if (tabRect.right > containerRect.right - MARGIN) {\n container.scrollLeft += tabRect.right - containerRect.right + MARGIN;\n }\n });\n }, []);\n\n const [messageCounts, setMessageCounts] = useState<Record<string, number>>(\n () => Object.fromEntries(threads.map((t) => [t.id, t.messageCount ?? 0])),\n );\n\n // Sync message counts from threads when they load\n useEffect(() => {\n if (threads.length > 0) {\n setMessageCounts((prev) => {\n const next = { ...prev };\n for (const t of threads) {\n if (!(t.id in next)) {\n next[t.id] = t.messageCount ?? 0;\n }\n }\n return next;\n });\n }\n }, [threads]);\n\n // Listen for builder.submitChat postMessages\n useEffect(() => {\n const handler = (event: MessageEvent) => {\n if (!isTrustedFrameMessage(event)) return;\n if (event.data?.type === AGENT_CHAT_SET_CONTEXT_MESSAGE_TYPE) {\n const item = normalizeAgentChatContextItem(event.data.data);\n if (!item) return;\n const openSidebar = event.data.data?.openSidebar as boolean | undefined;\n if (openSidebar !== false) {\n window.dispatchEvent(new CustomEvent(\"agent-panel:open\"));\n }\n if (postMessageSubmissionsDisabled) return;\n const currentTabId = activeThreadIdRef.current;\n if (!currentTabId) return;\n // Focus defaults to true; a caller opts out with `focus: false` for\n // passive context (e.g. a canvas selection) so staging never steals\n // focus from an in-progress inline editor.\n const focus = (event.data.data?.focus as boolean | undefined) !== false;\n setContextInTab(currentTabId, item, { focus });\n return;\n }\n if (event.data?.type === AGENT_CHAT_REMOVE_CONTEXT_MESSAGE_TYPE) {\n const key =\n typeof event.data.data?.key === \"string\"\n ? event.data.data.key.trim()\n : \"\";\n if (!key) return;\n const openSidebar = event.data.data?.openSidebar as boolean | undefined;\n if (openSidebar === true) {\n window.dispatchEvent(new CustomEvent(\"agent-panel:open\"));\n }\n if (postMessageSubmissionsDisabled) return;\n const currentTabId = activeThreadIdRef.current;\n if (!currentTabId) return;\n removeContextInTab(currentTabId, key);\n return;\n }\n if (event.data?.type === AGENT_CHAT_CLEAR_CONTEXT_MESSAGE_TYPE) {\n const openSidebar = event.data.data?.openSidebar as boolean | undefined;\n if (openSidebar === true) {\n window.dispatchEvent(new CustomEvent(\"agent-panel:open\"));\n }\n if (postMessageSubmissionsDisabled) return;\n const currentTabId = activeThreadIdRef.current;\n if (!currentTabId) return;\n clearContextInTab(currentTabId);\n return;\n }\n const parsed = parseSubmitChatMessage(event);\n if (!parsed) return;\n // Dedup the live post against the cold-start replay; first one wins.\n if (!claimAgentChatSubmit(parsed.submitMessageId)) return;\n const {\n message,\n context,\n openSidebar,\n model,\n effort,\n newTab,\n background,\n submit,\n images,\n submitMessageId,\n } = parsed;\n const requestedTabId = parsed.tabId;\n const requestMode =\n parsed.requestMode ?? requestModeFromExecMode(props.execMode);\n\n // Make sure the sidebar is visible to show the response, unless the\n // caller explicitly opted out or it's a background send.\n if (openSidebar !== false && !background) {\n window.dispatchEvent(new CustomEvent(\"agent-panel:open\"));\n }\n if (postMessageSubmissionsDisabled) {\n reportAgentChatSubmitResult(\n submitMessageId,\n false,\n \"composer-disabled\",\n );\n return;\n }\n\n // Plan mode is sent as request metadata by the chat adapter. Keep the\n // user-visible message clean so mode instructions never enter history.\n const fullMessage = context\n ? appendAgentChatContextToMessage(message, context)\n : message;\n\n const send: PendingSend = {\n message: fullMessage,\n images,\n submit,\n ...(background ? { trackInRunsTray: true } : {}),\n ...(requestMode ? { requestMode } : {}),\n ...(submitMessageId ? { submitMessageId } : {}),\n };\n\n const sendToTab = (threadId: string) => {\n if (isAgentChatSubmitCancelled(submitMessageId)) return;\n // If a model override was specified, apply it only if we recognize it\n if (model) {\n const matchedGroup = availableModels.find((g) =>\n g.models.includes(model),\n );\n if (matchedGroup) {\n const requestedEffort = isReasoningEffort(effort) ? effort : \"auto\";\n const effortOptions = getReasoningEffortOptionsForModel(model);\n const selectedEffort =\n requestedEffort === \"auto\" ||\n effortOptions.includes(requestedEffort)\n ? requestedEffort\n : \"auto\";\n threadModelRef.current.set(threadId, {\n model,\n engine: matchedGroup.engine,\n effort: selectedEffort,\n });\n bumpModelSelectionVersion();\n }\n }\n\n const ref = chatRefs.current.get(threadId);\n if (ref) {\n deliverPendingSend(ref, send);\n } else {\n pendingDeliveries.current.push({ threadId, send });\n }\n };\n\n if (newTab) {\n const previousTabId = activeThreadIdRef.current;\n createThread(requestedTabId)\n .then((newId) => {\n if (isAgentChatSubmitCancelled(submitMessageId)) return;\n if (!newId) {\n reportAgentChatSubmitResult(\n submitMessageId,\n false,\n \"thread-create-failed\",\n );\n return;\n }\n newThreadIds.current.add(newId);\n if (background) {\n mountedTabsRef.current.add(newId);\n }\n setOpenTabIds((prev) =>\n prev.includes(newId) ? prev : [...prev, newId],\n );\n if (!background) {\n writeThreadUrl(newId);\n }\n sendToTab(newId);\n if (background && previousTabId) {\n switchThreadState(previousTabId);\n }\n })\n .catch(() => {\n reportAgentChatSubmitResult(\n submitMessageId,\n false,\n \"thread-create-failed\",\n );\n });\n } else {\n const currentTabId = activeThreadIdRef.current;\n if (currentTabId) {\n sendToTab(currentTabId);\n } else {\n // Cold start: no thread yet. Queue for the first active thread (the\n // bootstrap effect creates it) rather than racing a second create.\n pendingDeliveries.current.push({ threadId: null, send });\n }\n }\n };\n window.addEventListener(\"message\", handler);\n return () => window.removeEventListener(\"message\", handler);\n }, [\n availableModels,\n bumpModelSelectionVersion,\n clearContextInTab,\n createThread,\n postMessageSubmissionsDisabled,\n props.execMode,\n removeContextInTab,\n setContextInTab,\n switchThread,\n switchThreadState,\n writeThreadUrl,\n ]);\n\n // Replay submits posted before this lazy panel's listener attached. Dedup in\n // the handler keeps a live + replayed message single.\n useEffect(() => {\n const buffered = drainBufferedAgentChatSubmits();\n for (const data of buffered) {\n window.dispatchEvent(\n new MessageEvent(\"message\", {\n data: { type: \"agentNative.submitChat\", data },\n origin: window.location.origin,\n }),\n );\n }\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, []);\n\n // Flush queued context items and sends once their thread's ref is mounted\n // (re-runs on ref mount via openTabIds and on cold-start target via\n // activeThreadId).\n useEffect(() => {\n for (const [tabId, items] of pendingContextItems.current) {\n const ref = chatRefs.current.get(tabId);\n if (!ref) continue;\n for (const item of items) ref.setComposerContextItem(item);\n pendingContextItems.current.delete(tabId);\n }\n\n if (pendingDeliveries.current.length === 0) return;\n const active = activeThreadIdRef.current;\n const remaining: PendingDelivery[] = [];\n for (const delivery of pendingDeliveries.current) {\n if (isAgentChatSubmitCancelled(delivery.send.submitMessageId)) continue;\n const threadId = delivery.threadId ?? active ?? null;\n const ref = threadId ? chatRefs.current.get(threadId) : null;\n if (threadId && ref) {\n const { send } = delivery;\n setTimeout(() => deliverPendingSend(ref, send), 50);\n } else {\n // Not ready — keep it, pinning the resolved threadId once known.\n remaining.push(threadId ? { threadId, send: delivery.send } : delivery);\n }\n }\n pendingDeliveries.current = remaining;\n }, [openTabIds, activeThreadId]);\n\n // Listen for chatRunning completion events\n useEffect(() => {\n const handler = (e: Event) => {\n const detail = (e as CustomEvent).detail;\n if (!detail) return;\n const { isRunning, tabId } = detail;\n if (!tabId) return;\n\n setRunningThreads((prev) => {\n const next = new Set(prev);\n if (isRunning) {\n next.add(tabId);\n } else {\n next.delete(tabId);\n }\n return next;\n });\n };\n window.addEventListener(\"agentNative.chatRunning\", handler);\n return () => window.removeEventListener(\"agentNative.chatRunning\", handler);\n }, []);\n\n const addTab = useCallback(async () => {\n const id = await createThread();\n if (id) {\n newThreadIds.current.add(id);\n writeThreadUrl(null);\n }\n return id;\n }, [createThread, writeThreadUrl]);\n\n const cleanupClosedTab = useCallback((tabId: string) => {\n if (parentMapRef.current[tabId]) {\n dismissedSubAgentTabsRef.current.add(tabId);\n }\n chatRefs.current.delete(tabId);\n pendingDeliveries.current = pendingDeliveries.current.filter(\n (d) => d.threadId !== tabId,\n );\n pendingContextItems.current.delete(tabId);\n newThreadIds.current.delete(tabId);\n threadModelRef.current.delete(tabId);\n // Clean up parent map and sub-agent names\n setParentMap((prev) => {\n if (!(tabId in prev)) return prev;\n const { [tabId]: _, ...rest } = prev;\n return rest;\n });\n setSubAgentNames((prev) => {\n if (!(tabId in prev)) return prev;\n const { [tabId]: _, ...rest } = prev;\n return rest;\n });\n setSubAgentStatuses((prev) => {\n if (!(tabId in prev)) return prev;\n const { [tabId]: _, ...rest } = prev;\n return rest;\n });\n }, []);\n\n const closeTab = useCallback(\n (tabId: string) => {\n setOpenTabIds((prev) => {\n if (prev.length <= 1) {\n // Last tab — create a new one and replace the old tab atomically\n createThread().then((newId) => {\n if (newId) {\n newThreadIds.current.add(newId);\n setOpenTabIds([newId]);\n writeThreadUrl(null);\n }\n });\n return prev; // Keep old tab until new one is ready\n }\n const next = prev.filter((id) => id !== tabId);\n if (tabId === activeThreadIdRef.current && next.length > 0) {\n const idx = prev.indexOf(tabId);\n switchThread(next[Math.min(idx, next.length - 1)]);\n }\n return next;\n });\n cleanupClosedTab(tabId);\n },\n [switchThread, createThread, cleanupClosedTab, writeThreadUrl],\n );\n\n const closeOtherTabs = useCallback(\n (tabId: string) => {\n for (const id of openTabIdsRef.current) {\n if (id !== tabId && parentMapRef.current[id]) {\n dismissedSubAgentTabsRef.current.add(id);\n }\n }\n setOpenTabIds([tabId]);\n if (activeThreadIdRef.current !== tabId) {\n switchThread(tabId);\n }\n // Clean up refs for closed tabs\n for (const key of chatRefs.current.keys()) {\n if (key !== tabId) {\n if (parentMapRef.current[key]) {\n dismissedSubAgentTabsRef.current.add(key);\n }\n chatRefs.current.delete(key);\n pendingDeliveries.current = pendingDeliveries.current.filter(\n (d) => d.threadId !== key,\n );\n pendingContextItems.current.delete(key);\n newThreadIds.current.delete(key);\n threadModelRef.current.delete(key);\n }\n }\n // Clean up parent map and sub-agent names — only keep entries for the surviving tab\n setParentMap((prev) => {\n if (tabId in prev) return { [tabId]: prev[tabId] };\n return {};\n });\n setSubAgentNames((prev) => {\n if (tabId in prev) return { [tabId]: prev[tabId] };\n return {};\n });\n setSubAgentStatuses((prev) => {\n if (tabId in prev) return { [tabId]: prev[tabId] };\n return {};\n });\n },\n [switchThread],\n );\n\n const closeAllTabs = useCallback(async () => {\n const id = await createThread();\n if (id) {\n newThreadIds.current.add(id);\n setOpenTabIds([id]);\n switchThreadState(id);\n writeThreadUrl(null);\n dismissedSubAgentTabsRef.current.clear();\n // Clean up all old refs\n chatRefs.current.clear();\n pendingDeliveries.current = [];\n pendingContextItems.current.clear();\n threadModelRef.current.clear();\n setParentMap({});\n setSubAgentNames({});\n setSubAgentStatuses({});\n }\n }, [createThread, switchThreadState, writeThreadUrl]);\n\n // Keyboard shortcuts dispatched from AgentPanel based on the active mode\n useEffect(() => {\n const handleCloseCurrent = () => {\n const id = activeThreadIdRef.current;\n if (id) closeTab(id);\n };\n const handleCloseAll = () => {\n void closeAllTabs();\n };\n const handleNewChat = () => {\n void addTab();\n };\n window.addEventListener(\"agent-chat:close-current-tab\", handleCloseCurrent);\n window.addEventListener(\"agent-chat:close-all-tabs\", handleCloseAll);\n window.addEventListener(\"agent-chat:new-chat\", handleNewChat);\n return () => {\n window.removeEventListener(\n \"agent-chat:close-current-tab\",\n handleCloseCurrent,\n );\n window.removeEventListener(\"agent-chat:close-all-tabs\", handleCloseAll);\n window.removeEventListener(\"agent-chat:new-chat\", handleNewChat);\n };\n }, [closeTab, closeAllTabs, addTab]);\n\n useEffect(() => {\n const handleOpenThread = (event: Event) => {\n const detail = (event as CustomEvent).detail as\n | { threadId?: unknown; newThread?: unknown; openRequestId?: unknown }\n | undefined;\n const threadId =\n typeof detail?.threadId === \"string\" ? detail.threadId : \"\";\n if (!detail || !threadId) return;\n if (!claimAgentChatOpenRequest(detail.openRequestId)) return;\n\n if (detail?.newThread === true) {\n newThreadIds.current.add(threadId);\n void createThread(threadId).then((createdId) => {\n if (!createdId) return;\n setOpenTabIds((prev) =>\n prev.includes(createdId) ? prev : [...prev, createdId],\n );\n writeThreadUrl(null);\n });\n return;\n }\n setOpenTabIds((prev) =>\n prev.includes(threadId) ? prev : [...prev, threadId],\n );\n switchThread(threadId);\n };\n\n window.addEventListener(\"agent-chat:open-thread\", handleOpenThread);\n return () =>\n window.removeEventListener(\"agent-chat:open-thread\", handleOpenThread);\n }, [createThread, switchThread, writeThreadUrl]);\n\n const clearActiveTab = useCallback(() => {\n const tabIdToClear = activeThreadIdRef.current;\n void addTab().then((newTabId) => {\n if (!tabIdToClear || !newTabId || tabIdToClear === newTabId) return;\n setOpenTabIds((prev) => {\n const next = prev.filter((id) => id !== tabIdToClear);\n return next.includes(newTabId) ? next : [...next, newTabId];\n });\n cleanupClosedTab(tabIdToClear);\n });\n }, [addTab, cleanupClosedTab]);\n\n const openFromHistory = useCallback(\n (threadId: string) => {\n if (!openTabIds.includes(threadId)) {\n setOpenTabIds((prev) => [...prev, threadId]);\n }\n switchThread(threadId);\n },\n [openTabIds, switchThread],\n );\n\n // Listen for agent-task-open events (from AgentTaskCard \"Open\" button)\n useEffect(() => {\n function handleOpenTask(e: Event) {\n const detail = (e as CustomEvent).detail;\n const threadId = detail?.threadId;\n if (!threadId) return;\n if (!claimAgentChatOpenRequest(detail.openRequestId)) return;\n dismissedSubAgentTabsRef.current.delete(threadId);\n // Prefer an explicit parent (RunsTray/background hydration knows it);\n // inline task cards fall back to the active orchestrator thread.\n const explicitParentId =\n typeof detail?.parentThreadId === \"string\"\n ? detail.parentThreadId.trim()\n : \"\";\n const parentId = explicitParentId || activeThreadIdRef.current;\n if (parentId && parentId !== threadId) {\n setParentMap((prev) =>\n prev[threadId] === parentId\n ? prev\n : { ...prev, [threadId]: parentId },\n );\n }\n // Store the sub-agent name/description for the tab label\n const name = detail.name || detail.description || \"\";\n if (name) {\n setSubAgentNames((prev) =>\n prev[threadId] === name ? prev : { ...prev, [threadId]: name },\n );\n }\n // Refresh thread list so the new sub-agent thread appears with its title\n refreshThreads();\n // Open the sub-agent thread as a tab — insert after parent for visual grouping\n if (!openTabIds.includes(threadId)) {\n setOpenTabIds((prev) => {\n if (parentId) {\n const parentIdx = prev.indexOf(parentId);\n if (parentIdx !== -1) {\n // Insert after the parent (and any existing children of that parent)\n const next = [...prev];\n let insertIdx = parentIdx + 1;\n // Skip past any existing children of the same parent\n while (\n insertIdx < next.length &&\n parentMap[next[insertIdx]] === parentId\n ) {\n insertIdx++;\n }\n next.splice(insertIdx, 0, threadId);\n return next;\n }\n }\n return [...prev, threadId];\n });\n }\n switchThread(threadId);\n }\n window.addEventListener(\"agent-task-open\", handleOpenTask);\n return () => window.removeEventListener(\"agent-task-open\", handleOpenTask);\n }, [openTabIds, switchThread, refreshThreads, parentMap]);\n\n // Replay thread/task opens requested before this lazy panel's listeners\n // attached. Live events claim their id; replay drains only unclaimed requests.\n useEffect(() => {\n const buffered = drainBufferedAgentChatOpenRequests();\n for (const request of buffered) {\n window.dispatchEvent(\n new CustomEvent(request.eventType, { detail: request.detail }),\n );\n }\n }, []);\n\n // Watch for agent-issued chat-command in application-state\n const lastChatCommandRef = useRef(0);\n useEffect(() => {\n let stopped = false;\n let timer: ReturnType<typeof setTimeout> | null = null;\n\n async function pollChatCommand() {\n if (stopped) return;\n try {\n const res = await fetch(\n agentNativePath(\"/_agent-native/application-state/chat-command\"),\n );\n if (res.ok) {\n const data = await res.json();\n if (\n data?.value?.command === \"open-thread\" &&\n data.value.threadId &&\n data.value.timestamp > lastChatCommandRef.current\n ) {\n lastChatCommandRef.current = data.value.timestamp;\n const threadId = data.value.threadId as string;\n // Open the thread as a tab and focus it\n if (!openTabIds.includes(threadId)) {\n setOpenTabIds((prev) => [...prev, threadId]);\n }\n switchThread(threadId);\n // Clear the command\n fetch(\n agentNativePath(\"/_agent-native/application-state/chat-command\"),\n {\n method: \"DELETE\",\n headers: { \"X-Agent-Native-CSRF\": \"1\" },\n },\n ).catch(() => {});\n }\n }\n } catch {}\n if (!stopped) {\n timer = setTimeout(pollChatCommand, 2000);\n }\n }\n\n pollChatCommand();\n return () => {\n stopped = true;\n if (timer) clearTimeout(timer);\n };\n }, [openTabIds, switchThread]);\n\n const handleGenerateTitle = useCallback(\n (threadId: string, message: string) => {\n generateTitle(threadId, message).then((title) => {\n if (title) {\n // Persist the generated title to the server\n saveThreadData(threadId, {\n threadData: \"\",\n title,\n preview: message.slice(0, 120),\n titleSource: \"generated\",\n });\n }\n });\n },\n [generateTitle, saveThreadData],\n );\n\n const handleSaveThread = useCallback(\n (\n threadId: string,\n data: {\n threadData: string;\n title: string;\n preview: string;\n messageCount: number;\n },\n ) => {\n saveThreadData(threadId, data);\n if (\n data.messageCount > 0 &&\n threadId === activeThreadIdRef.current &&\n urlThreadIdRef.current !== threadId\n ) {\n writeThreadUrl(threadId);\n }\n },\n [saveThreadData, writeThreadUrl],\n );\n\n // ─── Slash command handler ──────────────────────────────────────────\n const [helpVisible, setHelpVisible] = useState(false);\n\n const handleSlashCommand = useCallback(\n (command: string) => {\n switch (command) {\n case \"clear\":\n case \"new\":\n addTab();\n break;\n case \"history\":\n setShowHistory(true);\n break;\n case \"plan\":\n props.onExecModeChange?.(\"plan\");\n break;\n case \"act\":\n props.onExecModeChange?.(\"build\");\n break;\n case \"help\":\n setHelpVisible(true);\n break;\n }\n },\n [addTab, props.onExecModeChange],\n );\n\n const handleForkChat = useCallback(\n async (sourceThreadId: string) => {\n const sourceSnapshot =\n chatRefs.current.get(sourceThreadId)?.exportThreadSnapshot() ?? null;\n const forkedId = await forkThread(sourceThreadId, sourceSnapshot);\n if (!forkedId) return false;\n setOpenTabIds((prev) => {\n const idx = prev.indexOf(sourceThreadId);\n if (idx !== -1) {\n const next = [...prev];\n next.splice(idx + 1, 0, forkedId);\n return next;\n }\n return [...prev, forkedId];\n });\n switchThread(forkedId);\n return true;\n },\n [forkThread, switchThread],\n );\n\n // Build tabs from open thread IDs. During the first thread-list fetch,\n // `activeThreadId` is seeded synchronously so the chat can mount before\n // persisted open tabs have been reconciled.\n const visibleOpenTabIds =\n activeThreadId && !openTabIds.includes(activeThreadId)\n ? [...openTabIds, activeThreadId]\n : openTabIds;\n const threadMap = new Map(threads.map((t) => [t.id, t]));\n const tabs: ChatTab[] = visibleOpenTabIds\n .filter((id) => threadMap.has(id) || id === activeThreadId)\n .map((id) => {\n const t = threadMap.get(id);\n const agentTeamStatus = chatTabStatusFromAgentTeamStatus(\n subAgentStatuses[id],\n );\n return {\n id,\n label: t?.title || t?.preview?.slice(0, 30) || \"New chat\",\n status:\n agentTeamStatus ??\n (runningThreads.has(id)\n ? (\"running\" as const)\n : (messageCounts[id] ?? t?.messageCount ?? 0) > 0\n ? (\"completed\" as const)\n : (\"idle\" as const)),\n parentThreadId: parentMap[id],\n subAgentName: subAgentNames[id],\n };\n });\n\n // Include sub-agent tabs that aren't in threadMap yet (just created, not refreshed)\n for (const id of visibleOpenTabIds) {\n if (!tabs.some((t) => t.id === id)) {\n tabs.push({\n id,\n label:\n subAgentNames[id] || (parentMap[id] ? \"Sub-agent...\" : \"New chat\"),\n status:\n chatTabStatusFromAgentTeamStatus(subAgentStatuses[id]) ??\n (\"running\" as const),\n parentThreadId: parentMap[id],\n subAgentName: subAgentNames[id],\n });\n }\n }\n\n const headerProps: MultiTabAssistantChatHeaderProps = {\n tabs,\n activeTabId: activeThreadId ?? \"\",\n activeTabMessageCount: activeThreadId\n ? (messageCounts[activeThreadId] ?? 0)\n : 0,\n setActiveTabId: switchThread,\n addTab,\n closeTab,\n closeOtherTabs,\n closeAllTabs,\n clearActiveTab,\n showHistory,\n toggleHistory: () => setShowHistory((v) => !v),\n tabCount: visibleOpenTabIds.length,\n };\n\n // Wait for the first thread-list pass only when there is no synchronously\n // seeded active thread. Suggestion loading and thread-list reconciliation\n // should not block the chat shell from mounting.\n if (isLoading && !activeThreadId) {\n return (\n <ChatSkeleton\n header={renderHeader?.(headerProps)}\n headerOnly={contentHidden}\n />\n );\n }\n\n return (\n <div className=\"flex flex-1 flex-col h-full min-h-0 overflow-x-hidden\">\n {/* Tailwind group-hover/tab doesn't work in core package — inject directly */}\n <style\n dangerouslySetInnerHTML={{\n __html:\n \".agent-tab-close{opacity:0}.agent-tab:hover .agent-tab-close{opacity:1}\" +\n \".agent-tabs-scroll{scrollbar-width:none;-ms-overflow-style:none;}\" +\n \".agent-tabs-scroll::-webkit-scrollbar{display:none;}\",\n }}\n />\n {renderHeader\n ? renderHeader(headerProps)\n : showTabBar\n ? (() => {\n const activeTab = tabs.find((t) => t.id === activeThreadId);\n const focusParentId = activeTab?.parentThreadId || activeThreadId;\n const childTabs = tabs.filter(\n (t) => t.parentThreadId === focusParentId,\n );\n const hasSubTabs = childTabs.length > 0;\n const mainTabs = tabs.filter((t) => !t.parentThreadId);\n\n return (\n <>\n <div className=\"flex items-center px-1 py-1 border-b border-border shrink-0 gap-0.5\">\n <div className=\"agent-tabs-scroll flex items-center gap-0.5 min-w-0 overflow-x-auto flex-1\">\n {mainTabs.map((tab) => {\n const isActive =\n tab.id === activeThreadId ||\n (tab.id === focusParentId &&\n activeTab?.parentThreadId === tab.id);\n return (\n <div\n key={tab.id}\n ref={isActive ? activeTabRefCb : undefined}\n className={cn(\n \"agent-tab relative flex items-center rounded-md text-[11px] font-medium shrink-0 max-w-[130px]\",\n isActive\n ? \"bg-accent text-foreground ring-1 ring-inset ring-border/60 shadow-sm\"\n : \"text-muted-foreground hover:text-foreground hover:bg-accent/50\",\n )}\n >\n <button\n type=\"button\"\n onClick={() => switchThread(tab.id)}\n className=\"flex items-center gap-1 px-2.5 py-1.5 min-w-0 flex-1 text-start\"\n >\n <span className=\"truncate pe-1\">{tab.label}</span>\n {tab.status === \"running\" && (\n <span className=\"w-1.5 h-1.5 rounded-full bg-muted-foreground/50 shrink-0 animate-pulse\" />\n )}\n </button>\n <button\n type=\"button\"\n aria-label=\"Close tab\"\n onClick={(e) => {\n e.stopPropagation();\n e.preventDefault();\n closeTab(tab.id);\n }}\n className=\"agent-tab-close flex items-center justify-end text-muted-foreground hover:!text-foreground\"\n style={{\n position: \"absolute\",\n right: 0,\n top: 0,\n bottom: 0,\n width: 28,\n paddingRight: 6,\n borderRadius: \"0 6px 6px 0\",\n background:\n \"linear-gradient(to right, transparent, hsl(var(--accent)) 40%)\",\n }}\n >\n <IconX size={12} />\n </button>\n </div>\n );\n })}\n </div>\n <TooltipProvider delayDuration={200}>\n <div className=\"flex items-center gap-px shrink-0 ms-auto\">\n <Tooltip>\n <TooltipTrigger asChild>\n <button\n onClick={addTab}\n aria-label=\"New chat\"\n className=\"flex h-6 w-6 items-center justify-center rounded text-muted-foreground/60 hover:text-foreground hover:bg-accent/50\"\n >\n <IconPlus size={12} />\n </button>\n </TooltipTrigger>\n <TooltipContent>New chat</TooltipContent>\n </Tooltip>\n <Tooltip>\n <TooltipTrigger asChild>\n <button\n onClick={() => setShowHistory(!showHistory)}\n aria-label=\"All chats\"\n className={cn(\n \"flex h-6 w-6 items-center justify-center rounded text-muted-foreground/60 hover:text-foreground hover:bg-accent/50\",\n showHistory && \"bg-accent text-foreground\",\n )}\n >\n <IconHistory size={12} />\n </button>\n </TooltipTrigger>\n <TooltipContent>All chats</TooltipContent>\n </Tooltip>\n </div>\n </TooltipProvider>\n </div>\n {hasSubTabs && (\n <div className=\"flex items-center px-1 py-0.5 border-b border-border shrink-0 gap-0.5 bg-muted/30\">\n <div className=\"agent-tabs-scroll flex items-center gap-0.5 min-w-0 overflow-x-auto flex-1\">\n <button\n onClick={() => switchThread(focusParentId!)}\n className={cn(\n \"flex shrink-0 items-center gap-1 rounded-md px-2 py-1 text-[10px] font-medium cursor-pointer\",\n activeThreadId === focusParentId\n ? \"bg-accent text-foreground\"\n : \"text-muted-foreground hover:bg-accent hover:text-foreground\",\n )}\n >\n Main\n </button>\n {childTabs.map((tab) => (\n <div\n key={tab.id}\n ref={\n tab.id === activeThreadId\n ? activeTabRefCb\n : undefined\n }\n className={cn(\n \"agent-tab relative flex shrink-0 items-center rounded-md text-[10px] font-medium max-w-[130px]\",\n tab.id === activeThreadId\n ? \"bg-accent text-foreground\"\n : \"text-muted-foreground hover:bg-accent hover:text-foreground\",\n )}\n >\n <button\n type=\"button\"\n onClick={() => switchThread(tab.id)}\n className=\"flex items-center gap-1 px-2 py-1 min-w-0 flex-1 text-start\"\n >\n <span className=\"truncate pe-1\">\n {tab.subAgentName || tab.label}\n </span>\n {tab.status === \"running\" && (\n <span className=\"w-1 h-1 rounded-full bg-muted-foreground/50 shrink-0 animate-pulse\" />\n )}\n </button>\n <button\n type=\"button\"\n aria-label=\"Close tab\"\n onClick={(e) => {\n e.stopPropagation();\n e.preventDefault();\n closeTab(tab.id);\n }}\n className=\"agent-tab-close flex items-center justify-end text-muted-foreground hover:!text-foreground\"\n style={{\n position: \"absolute\",\n right: 0,\n top: 0,\n bottom: 0,\n width: 24,\n paddingRight: 4,\n borderRadius: \"0 6px 6px 0\",\n background:\n \"linear-gradient(to right, transparent, hsl(var(--accent)) 40%)\",\n }}\n >\n <IconX size={12} />\n </button>\n </div>\n ))}\n </div>\n </div>\n )}\n </>\n );\n })()\n : null}\n\n {/* Chat content with optional overlay */}\n <div className=\"relative flex-1 flex flex-col min-h-0\">\n {renderOverlay ? renderOverlay(headerProps) : null}\n\n {/* History popover — rendered inside relative container so positioning works */}\n {showHistory && (\n <HistoryPopover\n threads={threads}\n openTabIds={new Set(openTabIds)}\n activeThreadId={activeThreadId}\n currentScope={scope}\n hasMoreThreads={hasMoreThreads}\n isLoadingMoreThreads={isLoadingMoreThreads}\n loadError={threadsLoadError}\n onSelect={openFromHistory}\n onClose={() => setShowHistory(false)}\n onLoadMore={loadMoreThreads}\n onSearch={searchThreads}\n />\n )}\n\n {/* Help popover — shown by /help slash command */}\n {helpVisible && <HelpPopover onClose={() => setHelpVisible(false)} />}\n\n {/* Render tabs that have been activated at least once, hide inactive ones to preserve state.\n Sub-agent tabs are only mounted when first focused — prevents stale restore from running\n while the component is display:none before the user switches to it. */}\n {[...new Set(visibleOpenTabIds)]\n .filter(\n (tabId) =>\n tabId === activeThreadId || mountedTabsRef.current.has(tabId),\n )\n .map((tabId) => {\n const modelSelection = resolveThreadModelSelection(tabId);\n const tabThread = threads.find((thread) => thread.id === tabId);\n const tabScope =\n tabThread?.scope ??\n (tabId === activeThreadId ? activeThreadScope : null);\n const tabDynamicSuggestions =\n tabId === activeThreadId && !contentHidden\n ? props.dynamicSuggestions\n : false;\n const scopeComposerSlot =\n showScopeBadge && tabId === activeThreadId && !contentHidden ? (\n tabScope && activeThreadId ? (\n <ScopeBadge\n scope={tabScope}\n currentScope={scope}\n onDetach={handleDetachActiveThread}\n otherScopedThreads={otherScopedThreads}\n activeThreadId={activeThreadId}\n openTabIds={new Set(openTabIds)}\n onSelectThread={openFromHistory}\n />\n ) : detachConfirmType ? (\n <DetachConfirmationBanner />\n ) : null\n ) : null;\n const composerSlot =\n scopeComposerSlot || props.composerSlot ? (\n <>\n {props.composerSlot}\n {scopeComposerSlot}\n </>\n ) : undefined;\n return (\n <div\n key={tabId}\n className=\"flex-1 min-h-0 flex-col\"\n style={{\n display:\n contentHidden || tabId !== activeThreadId ? \"none\" : \"flex\",\n }}\n >\n <KeepTabOpenNotice\n threadId={tabId}\n enabled={tabId === activeThreadId}\n apiUrl={apiUrl}\n />\n <RunStuckBanner\n threadId={tabId}\n enabled={tabId === activeThreadId}\n apiUrl={apiUrl}\n autoRetry\n autoRetryOwnerId={browserTabId}\n onRetry={() => {\n const handle = chatRefs.current.get(tabId);\n handle?.sendRecoveryMessage(\n \"Continue from where you left off and finish my last request. Do not repeat completed work.\",\n \"continue\",\n );\n }}\n />\n <AssistantChat\n {...props}\n dynamicSuggestions={tabDynamicSuggestions}\n emptyStateText={\n tabScope?.label && tabId === activeThreadId\n ? `Ask about ${tabScope.label}`\n : props.emptyStateText\n }\n ref={(handle) => {\n if (handle) {\n chatRefs.current.set(tabId, handle);\n } else {\n chatRefs.current.delete(tabId);\n }\n }}\n threadId={tabId}\n tabId={tabId}\n browserTabId={browserTabId}\n contextScope={tabScope}\n isActiveComposer={tabId === activeThreadId}\n apiUrl={apiUrl}\n isNewThread={\n newThreadIds.current.has(tabId) || isNewThread(tabId)\n }\n onMessageCountChange={(count) =>\n setMessageCounts((prev) =>\n prev[tabId] === count\n ? prev\n : { ...prev, [tabId]: count },\n )\n }\n onSaveThread={handleSaveThread}\n onGenerateTitle={handleGenerateTitle}\n onSlashCommand={handleSlashCommand}\n selectedModel={modelSelection?.model}\n selectedEngine={modelSelection?.engine}\n selectedEffort={modelSelection?.effort ?? \"auto\"}\n composerSlot={composerSlot}\n defaultModel={defaultModel}\n availableModels={availableModels}\n onModelChange={handleModelChange}\n onEffortChange={handleEffortChange}\n onForkChat={() => handleForkChat(tabId)}\n // Sub-agent tabs are read-only: sending a new message from the\n // sub-agent tab would start a fresh run on that thread and kill\n // the in-flight team chunk. Disable the composer and show a\n // hint so users know to send via the orchestrator chat instead.\n composerDisabled={Boolean(parentMap[tabId])}\n composerDisabledPlaceholder={\n parentMap[tabId]\n ? \"Send messages to the orchestrator chat — this sub-agent runs automatically\"\n : undefined\n }\n />\n </div>\n );\n })}\n </div>\n </div>\n );\n}\n"]}
|
|
1
|
+
{"version":3,"file":"MultiTabAssistantChat.js","sourceRoot":"","sources":["../../src/client/MultiTabAssistantChat.tsx"],"names":[],"mappings":"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","sourcesContent":["import {\n IconX,\n IconPlus,\n IconHistory,\n IconSearch,\n IconLink,\n IconLinkOff,\n IconCheck,\n} from \"@tabler/icons-react\";\nimport React, {\n useState,\n useRef,\n useEffect,\n useCallback,\n useMemo,\n} from \"react\";\n\nimport { DEFAULT_MODEL } from \"../agent/default-model.js\";\nimport {\n DEFAULT_REASONING_EFFORT,\n isReasoningEffort,\n resolveReasoningEffortSelection,\n type ReasoningEffort,\n} from \"../shared/reasoning-effort.js\";\nimport {\n AGENT_CHAT_CLEAR_CONTEXT_MESSAGE_TYPE,\n AGENT_CHAT_REMOVE_CONTEXT_MESSAGE_TYPE,\n AGENT_CHAT_SET_CONTEXT_MESSAGE_TYPE,\n appendAgentChatContextToMessage,\n claimAgentChatOpenRequest,\n claimAgentChatSubmit,\n drainBufferedAgentChatOpenRequests,\n drainBufferedAgentChatSubmits,\n isAgentChatSubmitCancelled,\n normalizeAgentChatContextItem,\n parseSubmitChatMessage,\n reportAgentChatSubmitResult,\n type AgentChatContextItem,\n} from \"./agent-chat.js\";\nimport { agentNativePath, appPath } from \"./api-path.js\";\nimport {\n AssistantChat,\n type AssistantChatProps,\n type AssistantChatHandle,\n} from \"./AssistantChat.js\";\nimport {\n buildChatModelGroups,\n type EngineModelGroup,\n} from \"./chat-model-groups.js\";\nimport {\n Popover,\n PopoverAnchor,\n PopoverContent,\n PopoverTrigger,\n} from \"./components/ui/popover.js\";\nimport {\n Tooltip,\n TooltipContent,\n TooltipProvider,\n TooltipTrigger,\n} from \"./components/ui/tooltip.js\";\nimport { isTrustedFrameMessage } from \"./frame.js\";\nimport { KeepTabOpenNotice } from \"./KeepTabOpenNotice.js\";\nimport { RunStuckBanner } from \"./RunStuckBanner.js\";\nimport { callAction } from \"./use-action.js\";\nimport { useChangeVersion } from \"./use-change-version.js\";\nimport {\n useChatThreads,\n type ChatThreadScope,\n type ChatThreadSummary,\n} from \"./use-chat-threads.js\";\nimport { cn } from \"./utils.js\";\n\ninterface ModelSelection {\n model: string;\n engine?: string;\n effort?: ReasoningEffort;\n}\n\ninterface PendingSend {\n message: string;\n images?: string[];\n submit: boolean;\n trackInRunsTray?: boolean;\n requestMode?: \"act\" | \"plan\";\n /** Correlates with `AGENT_CHAT_SUBMIT_RESULT_EVENT` — see agent-chat.ts. */\n submitMessageId?: string;\n}\n\n/**\n * A send queued until its target thread is ready. `threadId: null` targets the\n * first thread to become active (cold start); a concrete id is a thread whose\n * chat ref hasn't mounted yet. Drained by the flush effect.\n */\ninterface PendingDelivery {\n threadId: string | null;\n send: PendingSend;\n}\n\n/** The single path that hands a queued send to a mounted chat ref. */\nfunction deliverPendingSend(ref: AssistantChatHandle, send: PendingSend): void {\n if (isAgentChatSubmitCancelled(send.submitMessageId)) return;\n if (!send.submit) {\n ref.prefillMessage(send.message);\n return;\n }\n if (send.trackInRunsTray || send.requestMode || send.submitMessageId) {\n ref.sendMessage(send.message, send.images, {\n ...(send.trackInRunsTray ? { trackInRunsTray: true } : {}),\n ...(send.requestMode ? { requestMode: send.requestMode } : {}),\n ...(send.submitMessageId\n ? { submitMessageId: send.submitMessageId }\n : {}),\n });\n } else {\n ref.sendMessage(send.message, send.images);\n }\n}\n\nconst MODEL_SELECTION_STORAGE_KEY = \"agent-native:chat-models:selection\";\n\nfunction readStoredModelSelection(key: string): ModelSelection | undefined {\n if (typeof window === \"undefined\") return undefined;\n try {\n const raw = window.localStorage.getItem(key);\n if (!raw) return undefined;\n const parsed = JSON.parse(raw) as Partial<ModelSelection>;\n if (typeof parsed.model !== \"string\" || !parsed.model.trim()) {\n return undefined;\n }\n const selection: ModelSelection = {\n model: parsed.model,\n effort: resolveReasoningEffortSelection(\n parsed.model,\n isReasoningEffort(parsed.effort) ? parsed.effort : undefined,\n ),\n };\n if (typeof parsed.engine === \"string\") selection.engine = parsed.engine;\n return selection;\n } catch {\n return undefined;\n }\n}\n\nfunction writeStoredModelSelection(key: string, selection: ModelSelection) {\n if (typeof window === \"undefined\") return;\n try {\n window.localStorage.setItem(key, JSON.stringify(selection));\n } catch {}\n}\n\nfunction resolveModelSelection(\n selection: ModelSelection | undefined,\n groups: EngineModelGroup[],\n): ModelSelection | undefined {\n if (!selection?.model) return undefined;\n if (groups.length === 0) {\n return {\n model: selection.model,\n effort: resolveReasoningEffortSelection(\n selection.model,\n selection.effort,\n ),\n };\n }\n const preferredGroup = groups.find(\n (group) =>\n group.engine === selection.engine &&\n group.models.includes(selection.model),\n );\n const fallbackGroup = groups.find((group) =>\n group.models.includes(selection.model),\n );\n if (groups.length > 0 && !preferredGroup && !fallbackGroup) {\n return undefined;\n }\n const engine =\n preferredGroup?.engine ?? fallbackGroup?.engine ?? selection.engine;\n if (!engine && groups.length > 0) return undefined;\n\n const effort = resolveReasoningEffortSelection(\n selection.model,\n selection.effort,\n );\n const resolved: ModelSelection = { model: selection.model, effort };\n if (engine) resolved.engine = engine;\n return resolved;\n}\n\n// ─── Skeleton Loader ─────────────────────────────────────────────────────────\n\nfunction ChatSkeleton({\n header,\n headerOnly = false,\n}: {\n header?: React.ReactNode;\n headerOnly?: boolean;\n}) {\n return (\n <div\n className={cn(\n \"flex flex-col min-h-0\",\n headerOnly ? \"shrink-0\" : \"flex-1 h-full\",\n )}\n >\n {header ?? (\n <div className=\"flex items-center px-1 py-1 border-b border-border shrink-0 gap-0.5\">\n <div className=\"h-[22px] w-20 rounded-md bg-muted animate-pulse\" />\n <div className=\"ms-auto flex gap-0.5\">\n <div className=\"h-[22px] w-[22px] rounded-md bg-muted animate-pulse\" />\n <div className=\"h-[22px] w-[22px] rounded-md bg-muted animate-pulse\" />\n </div>\n </div>\n )}\n {!headerOnly && (\n <div className=\"flex-1 flex flex-col gap-3 p-4\">\n <div className=\"flex justify-center py-8\">\n <div className=\"h-10 w-10 rounded-full bg-muted animate-pulse\" />\n </div>\n <div className=\"h-3 w-32 rounded bg-muted animate-pulse mx-auto\" />\n </div>\n )}\n </div>\n );\n}\n\n// ─── Scope Badge ─────────────────────────────────────────────────────────────\n\nfunction formatScopeType(type: string) {\n return type.replace(/[-_]+/g, \" \");\n}\n\nfunction indefiniteArticleFor(value: string) {\n return /^[aeiou]/i.test(value.trim()) ? \"an\" : \"a\";\n}\n\nfunction getScopeCopy(scope: ChatThreadScope, isCurrentScope: boolean) {\n const type = formatScopeType(scope.type);\n const fallbackObject = isCurrentScope\n ? `this ${type}`\n : `${indefiniteArticleFor(type)} ${type}`;\n const objectLabel = scope.label || fallbackObject;\n return {\n objectLabel,\n chipLabel:\n scope.label || (isCurrentScope ? `this ${type}` : `${type} context`),\n };\n}\n\n/**\n * Compact context tab above the composer. Click → popover with related chats\n * and the remove-context action. It stays attached to the chat field so scoped\n * context is visible right where the next message will be composed.\n */\nfunction ScopeBadge({\n scope,\n currentScope,\n onDetach,\n otherScopedThreads,\n activeThreadId,\n openTabIds,\n onSelectThread,\n}: {\n scope: ChatThreadScope;\n currentScope?: ChatThreadScope | null;\n onDetach: () => void;\n /** Other threads scoped to the same resource (excluding the active one),\n * pre-sorted most-recent-first. The chip popover lists these so the user\n * can hop between this resource's chats without opening the full history. */\n otherScopedThreads: ChatThreadSummary[];\n activeThreadId: string;\n openTabIds: Set<string>;\n onSelectThread: (id: string) => void;\n}) {\n const [open, setOpen] = useState(false);\n const isCurrentScope = Boolean(\n currentScope &&\n currentScope.type === scope.type &&\n currentScope.id === scope.id,\n );\n const hasDifferentCurrentScope = Boolean(currentScope && !isCurrentScope);\n const { objectLabel, chipLabel } = getScopeCopy(scope, isCurrentScope);\n const heading = `Using ${chipLabel}`;\n const detailSuffix = hasDifferentCurrentScope\n ? \"Start a new chat to use the current page.\"\n : isCurrentScope\n ? \"New chats here keep this context.\"\n : \"Start a new chat for a general conversation.\";\n const otherCount = otherScopedThreads.length;\n return (\n <div className=\"agent-scope-badge-wrapper relative z-[1] -mb-2 flex shrink-0 items-end justify-center px-3 pt-1 text-[11px] text-muted-foreground\">\n <Popover open={open} onOpenChange={setOpen}>\n <PopoverTrigger asChild>\n <button\n type=\"button\"\n className=\"inline-flex h-7 min-w-0 max-w-full cursor-pointer items-center gap-1.5 rounded-t-lg border border-b-0 border-input bg-background px-3 text-muted-foreground transition-colors hover:bg-accent hover:text-foreground sm:max-w-72\"\n aria-label={heading}\n >\n <IconLink size={11} className=\"shrink-0 opacity-70\" />\n <span className=\"min-w-0 truncate\">{heading}</span>\n {otherCount > 0 && (\n <span\n className=\"ms-0.5 shrink-0 rounded-full bg-muted px-1.5 py-px text-[10px] leading-none text-muted-foreground\"\n aria-label={`${otherCount} other chats for ${objectLabel}`}\n >\n +{otherCount}\n </span>\n )}\n </button>\n </PopoverTrigger>\n <PopoverContent align=\"center\" side=\"top\" className=\"w-72 p-0\">\n <p className=\"px-3 pt-2 pb-1.5 text-[11px] text-muted-foreground\">\n This chat can see{\" \"}\n <span className=\"text-foreground\">{objectLabel}</span>.{\" \"}\n {detailSuffix}\n </p>\n {otherCount > 0 && (\n <div className=\"border-t border-border\">\n <div className=\"px-3 pt-1.5 pb-1 text-[10px] uppercase tracking-wider text-muted-foreground/70\">\n Chats for {objectLabel}\n </div>\n <div className=\"max-h-56 overflow-y-auto pb-1\">\n {otherScopedThreads.map((thread) =>\n renderThreadRow(\n thread,\n activeThreadId,\n openTabIds,\n formatThreadTime,\n onSelectThread,\n () => setOpen(false),\n ),\n )}\n </div>\n </div>\n )}\n <div className=\"border-t border-border p-1\">\n <button\n type=\"button\"\n onClick={() => {\n setOpen(false);\n onDetach();\n }}\n className=\"flex w-full items-center gap-2 rounded px-2 py-1.5 text-xs text-foreground hover:bg-accent cursor-pointer\"\n >\n <IconLinkOff size={13} />\n <span>Remove context</span>\n </button>\n </div>\n </PopoverContent>\n </Popover>\n </div>\n );\n}\n\n/**\n * Thin confirmation banner shown briefly after detach. The chip itself\n * unmounts the moment scope clears on the active thread, so this banner\n * holds the visual feedback long enough for the user to register what\n * just happened and learn where the chat went (History popover).\n */\nfunction DetachConfirmationBanner() {\n return (\n <div className=\"agent-scope-badge-wrapper relative z-[1] -mb-2 flex shrink-0 items-end justify-center px-3 pt-1 text-[11px] text-muted-foreground\">\n <span className=\"inline-flex h-7 min-w-0 max-w-full items-center gap-1.5 rounded-t-lg border border-b-0 border-input bg-background px-3 text-foreground shadow-[0_-8px_24px_hsl(var(--background)/0.72)] sm:max-w-80\">\n <IconCheck size={11} className=\"shrink-0 opacity-80\" />\n <span className=\"min-w-0 truncate\">\n Context removed. Find this chat in History.\n </span>\n </span>\n </div>\n );\n}\n\n// ─── History Popover ─────────────────────────────────────────────────────────\n\nfunction formatThreadTime(ts: number): string {\n const d = new Date(ts);\n const now = new Date();\n const diffMs = now.getTime() - d.getTime();\n const diffDays = Math.floor(diffMs / 86400000);\n if (diffDays === 0)\n return d.toLocaleTimeString([], { hour: \"numeric\", minute: \"2-digit\" });\n if (diffDays === 1) return \"Yesterday\";\n if (diffDays < 7) return d.toLocaleDateString([], { weekday: \"short\" });\n return d.toLocaleDateString([], { month: \"short\", day: \"numeric\" });\n}\n\nfunction renderThreadRow(\n thread: ChatThreadSummary,\n activeThreadId: string | null,\n openTabIds: Set<string>,\n formatTime: (ts: number) => string,\n onSelect: (id: string) => void,\n onClose: () => void,\n) {\n const isActive = thread.id === activeThreadId;\n return (\n <button\n key={thread.id}\n onClick={() => {\n onSelect(thread.id);\n onClose();\n }}\n className={cn(\n \"w-full px-3 py-2 text-start hover:bg-accent/50 cursor-pointer\",\n isActive && \"bg-accent/30\",\n )}\n >\n <div className=\"flex items-baseline justify-between gap-2\">\n <span className=\"text-xs font-medium text-foreground truncate\">\n {thread.title || thread.preview || \"Chat\"}\n </span>\n <span className=\"text-[10px] text-muted-foreground shrink-0\">\n {isActive\n ? \"Active\"\n : openTabIds.has(thread.id)\n ? \"Open\"\n : formatTime(thread.updatedAt)}\n </span>\n </div>\n {thread.preview && thread.title !== thread.preview && (\n <div className=\"text-[11px] text-muted-foreground truncate mt-0.5\">\n {thread.preview}\n </div>\n )}\n {thread.scope?.label && (\n <div className=\"mt-0.5 text-[10px] text-muted-foreground/70 truncate\">\n {thread.scope.label}\n </div>\n )}\n </button>\n );\n}\n\nfunction HistoryPopover({\n threads,\n openTabIds,\n activeThreadId,\n currentScope,\n hasMoreThreads = false,\n isLoadingMoreThreads = false,\n loadError,\n onSelect,\n onClose,\n onLoadMore,\n onSearch,\n}: {\n threads: ChatThreadSummary[];\n openTabIds: Set<string>;\n activeThreadId: string | null;\n currentScope?: ChatThreadScope | null;\n hasMoreThreads?: boolean;\n isLoadingMoreThreads?: boolean;\n loadError?: string | null;\n onSelect: (id: string) => void;\n onClose: () => void;\n onLoadMore?: () => void;\n onSearch?: (query: string) => Promise<ChatThreadSummary[]>;\n}) {\n const [search, setSearch] = useState(\"\");\n const [searchResults, setSearchResults] = useState<\n ChatThreadSummary[] | null\n >(null);\n const [isSearching, setIsSearching] = useState(false);\n const inputRef = useRef<HTMLInputElement>(null);\n const debounceRef = useRef<ReturnType<typeof setTimeout>>(undefined);\n\n useEffect(() => {\n inputRef.current?.focus();\n }, []);\n\n // Debounced server-side search\n const searchIdRef = useRef(0);\n useEffect(() => {\n if (debounceRef.current) clearTimeout(debounceRef.current);\n const q = search.trim();\n if (!q) {\n searchIdRef.current++;\n setSearchResults(null);\n setIsSearching(false);\n return;\n }\n setIsSearching(true);\n const id = ++searchIdRef.current;\n debounceRef.current = setTimeout(async () => {\n if (onSearch) {\n const results = await onSearch(q);\n if (id !== searchIdRef.current) return;\n setSearchResults(results);\n } else {\n // Fallback to client-side filtering\n setSearchResults(null);\n }\n setIsSearching(false);\n }, 250);\n return () => {\n if (debounceRef.current) clearTimeout(debounceRef.current);\n };\n }, [search, onSearch]);\n\n // Hide empty threads from the history list — except the currently-active\n // one. The active thread always belongs in the list so the user can see\n // they're in it (the previous filter dropped a brand-new chat the user\n // had just opened, making them think their chat had vanished).\n const visibleThreads = threads.filter(\n (t) => t.messageCount > 0 || t.id === activeThreadId,\n );\n\n const filtered = search.trim()\n ? (searchResults ?? visibleThreads).filter(\n (t) => t.messageCount > 0 || t.id === activeThreadId,\n )\n : visibleThreads;\n\n // When scope is set we split history into two sections so the user can\n // see \"this deck's chats\" first without losing access to general /\n // other-deck chats. Section labels intentionally use the current\n // resource type (deck/design/dashboard) instead of a generic phrase.\n const sectionedThreads = currentScope\n ? {\n scoped: filtered.filter(\n (t) =>\n t.scope?.type === currentScope.type &&\n t.scope?.id === currentScope.id,\n ),\n other: filtered.filter(\n (t) =>\n !t.scope ||\n t.scope.type !== currentScope.type ||\n t.scope.id !== currentScope.id,\n ),\n }\n : null;\n\n return (\n <Popover open onOpenChange={(open) => !open && onClose()}>\n <PopoverAnchor asChild>\n <span aria-hidden className=\"absolute end-2 top-0 h-px w-px\" />\n </PopoverAnchor>\n <PopoverContent\n align=\"end\"\n side=\"bottom\"\n sideOffset={0}\n onOpenAutoFocus={(event) => {\n event.preventDefault();\n inputRef.current?.focus();\n }}\n className=\"w-72 rounded-lg p-0\"\n >\n <div className=\"flex items-center gap-2 px-3 py-2 border-b border-border\">\n <IconSearch size={13} />\n <input\n ref={inputRef}\n type=\"text\"\n value={search}\n onChange={(e) => setSearch(e.target.value)}\n placeholder=\"Search chats...\"\n className=\"flex-1 bg-transparent text-xs text-foreground placeholder:text-muted-foreground outline-none\"\n />\n </div>\n <div className=\"max-h-64 overflow-y-auto py-1\">\n {loadError && !search.trim() ? (\n <div className=\"px-3 py-4 text-xs text-amber-500 text-center\">\n {loadError}\n </div>\n ) : isSearching ? (\n <div className=\"px-3 py-4 text-xs text-muted-foreground text-center\">\n Searching...\n </div>\n ) : filtered.length === 0 ? (\n <div className=\"px-3 py-4 text-xs text-muted-foreground text-center\">\n {search ? \"No matching chats\" : \"No chats yet\"}\n </div>\n ) : sectionedThreads ? (\n <>\n {sectionedThreads.scoped.length > 0 && (\n <>\n <div className=\"px-3 pt-1.5 pb-1 text-[10px] uppercase tracking-wider text-muted-foreground/70\">\n This {currentScope!.type}\n </div>\n {sectionedThreads.scoped.map((thread) =>\n renderThreadRow(\n thread,\n activeThreadId,\n openTabIds,\n formatThreadTime,\n onSelect,\n onClose,\n ),\n )}\n </>\n )}\n {sectionedThreads.other.length > 0 && (\n <>\n <div className=\"px-3 pt-2 pb-1 text-[10px] uppercase tracking-wider text-muted-foreground/70\">\n All chats\n </div>\n {sectionedThreads.other.map((thread) =>\n renderThreadRow(\n thread,\n activeThreadId,\n openTabIds,\n formatThreadTime,\n onSelect,\n onClose,\n ),\n )}\n </>\n )}\n </>\n ) : (\n filtered.map((thread) =>\n renderThreadRow(\n thread,\n activeThreadId,\n openTabIds,\n formatThreadTime,\n onSelect,\n onClose,\n ),\n )\n )}\n {!search.trim() && hasMoreThreads && (\n <button\n type=\"button\"\n onClick={() => onLoadMore?.()}\n disabled={isLoadingMoreThreads}\n className=\"mx-1 mt-1 flex w-[calc(100%-0.5rem)] items-center justify-center rounded-md px-3 py-2 text-xs text-muted-foreground hover:bg-accent hover:text-foreground disabled:cursor-default disabled:opacity-60\"\n >\n {isLoadingMoreThreads ? \"Loading...\" : \"Load older chats\"}\n </button>\n )}\n </div>\n </PopoverContent>\n </Popover>\n );\n}\n\n// ─── Help Popover ────────────────────────────────────────────────────────────\n\nfunction HelpPopover({ onClose }: { onClose: () => void }) {\n useEffect(() => {\n const handler = (e: KeyboardEvent) => {\n if (e.key === \"Escape\") onClose();\n };\n window.addEventListener(\"keydown\", handler);\n return () => window.removeEventListener(\"keydown\", handler);\n }, [onClose]);\n\n const commands = [\n {\n name: \"/clear\",\n description: \"Start a new chat (keeps current chat in history)\",\n },\n { name: \"/new\", description: \"Same as /clear\" },\n { name: \"/history\", description: \"Browse all chats\" },\n { name: \"/plan\", description: \"Switch to read-only planning\" },\n { name: \"/act\", description: \"Switch back to acting\" },\n { name: \"/help\", description: \"Show this list of commands\" },\n { name: \"@\", description: \"Mention files, agents, or resources\" },\n ];\n\n return (\n <>\n <div className=\"fixed inset-0 z-40\" onClick={onClose} />\n <div className=\"absolute end-2 top-0 z-50 w-72 rounded-lg border border-border bg-popover shadow-lg\">\n <div className=\"flex items-center justify-between px-3 py-2 border-b border-border\">\n <span className=\"text-xs font-medium text-foreground\">\n Available Commands\n </span>\n <button\n onClick={onClose}\n aria-label=\"Close help\"\n className=\"flex h-5 w-5 items-center justify-center rounded text-muted-foreground hover:text-foreground\"\n >\n <IconX size={12} />\n </button>\n </div>\n <div className=\"py-1\">\n {commands.map((cmd) => (\n <div key={cmd.name} className=\"px-3 py-1.5\">\n <div className=\"text-xs font-medium text-foreground\">\n {cmd.name}\n </div>\n <div className=\"text-[11px] text-muted-foreground\">\n {cmd.description}\n </div>\n </div>\n ))}\n </div>\n </div>\n </>\n );\n}\n\n// ─── Types ──────────────────────────────────────────────────────────────────\n\nexport interface ChatTab {\n id: string;\n label: string;\n status: \"idle\" | \"running\" | \"completed\";\n /** If this tab is a sub-agent, the parent thread ID */\n parentThreadId?: string;\n /** Short name for sub-agent tabs (e.g. \"Research\", \"Draft email\") */\n subAgentName?: string;\n}\n\ntype AgentTeamRunStatus =\n | \"queued\"\n | \"running\"\n | \"paused\"\n | \"needs-approval\"\n | \"completed\"\n | \"errored\"\n | \"unknown\";\n\ninterface AgentTeamRunSummary {\n title?: string;\n status?: AgentTeamRunStatus;\n sourceRecord?: {\n type?: string;\n threadId?: unknown;\n parentThreadId?: unknown;\n name?: unknown;\n };\n metadata?: Record<string, unknown>;\n}\n\ninterface AgentTeamTabInfo {\n threadId: string;\n parentThreadId: string;\n name: string;\n status: AgentTeamRunStatus;\n}\n\nfunction readString(value: unknown): string {\n return typeof value === \"string\" ? value.trim() : \"\";\n}\n\nfunction requestModeFromExecMode(\n value: AssistantChatProps[\"execMode\"],\n): \"act\" | \"plan\" | undefined {\n if (value === \"plan\") return \"plan\";\n if (value === \"build\") return \"act\";\n return undefined;\n}\n\nfunction isActiveAgentTeamStatus(status?: AgentTeamRunStatus): boolean {\n return (\n status === \"queued\" ||\n status === \"running\" ||\n status === \"paused\" ||\n status === \"needs-approval\"\n );\n}\n\nfunction chatTabStatusFromAgentTeamStatus(\n status?: AgentTeamRunStatus,\n): ChatTab[\"status\"] | undefined {\n if (!status) return undefined;\n return isActiveAgentTeamStatus(status) ? \"running\" : \"completed\";\n}\n\nconst STALE_THREAD_THRESHOLD_MS = 12 * 60 * 60 * 1000;\nconst DEFAULT_THREAD_URL_PARAM = \"thread\";\nconst THREAD_URL_CHANGED_EVENT = \"agent-chat:url-thread-changed\";\nconst hasOwn = Object.prototype.hasOwnProperty;\n\n// The history patch is installed once and shared via a ref count so that\n// multiple synced chats (or a remount) don't restore a stale `pushState`\n// reference and silently drop a wrapper installed by another instance.\nlet historyPatchRefCount = 0;\nlet restoreHistoryPatch: (() => void) | null = null;\n\nfunction installHistoryThreadUrlPatch(): () => void {\n if (typeof window === \"undefined\") return () => {};\n historyPatchRefCount += 1;\n if (historyPatchRefCount === 1) {\n const originalPushState = window.history.pushState;\n const originalReplaceState = window.history.replaceState;\n const dispatchUrlChange = () => {\n window.dispatchEvent(new Event(THREAD_URL_CHANGED_EVENT));\n };\n window.history.pushState = function pushState(...args) {\n const result = originalPushState.apply(this, args);\n dispatchUrlChange();\n return result;\n };\n window.history.replaceState = function replaceState(...args) {\n const result = originalReplaceState.apply(this, args);\n dispatchUrlChange();\n return result;\n };\n restoreHistoryPatch = () => {\n window.history.pushState = originalPushState;\n window.history.replaceState = originalReplaceState;\n };\n }\n return () => {\n historyPatchRefCount = Math.max(0, historyPatchRefCount - 1);\n if (historyPatchRefCount === 0) {\n restoreHistoryPatch?.();\n restoreHistoryPatch = null;\n }\n };\n}\n\nexport interface ChatThreadUrlSyncOptions {\n /** Query-string parameter used by the generic URL adapter. Default: `thread`. */\n paramName?: string;\n /**\n * Route-owned thread id. Pass `null` for the create route and a string for\n * thread routes like `/chat/:threadId`.\n */\n routeThreadId?: string | null;\n /** Build the URL path for a thread id, or for create mode when id is null. */\n getPath?: (threadId: string | null) => string;\n /** Optional router navigation callback used with `getPath`. */\n navigate?: (path: string, options?: { replace?: boolean }) => void;\n}\n\nfunction normalizeUrlThreadId(value: string | null | undefined): string | null {\n if (typeof value !== \"string\") return null;\n const trimmed = value.trim();\n return trimmed || null;\n}\n\nfunction resolveThreadUrlSync(\n value: MultiTabAssistantChatProps[\"threadUrlSync\"],\n): {\n enabled: boolean;\n paramName: string;\n routeThreadId?: string | null;\n getPath?: (threadId: string | null) => string;\n navigate?: (path: string, options?: { replace?: boolean }) => void;\n} {\n if (!value) return { enabled: false, paramName: DEFAULT_THREAD_URL_PARAM };\n if (value === true) {\n return { enabled: true, paramName: DEFAULT_THREAD_URL_PARAM };\n }\n return {\n enabled: true,\n paramName: value.paramName?.trim() || DEFAULT_THREAD_URL_PARAM,\n ...(hasOwn.call(value, \"routeThreadId\")\n ? { routeThreadId: normalizeUrlThreadId(value.routeThreadId) }\n : {}),\n ...(value.getPath ? { getPath: value.getPath } : {}),\n ...(value.navigate ? { navigate: value.navigate } : {}),\n };\n}\n\nfunction readUrlThreadId(paramName: string): string | null {\n if (typeof window === \"undefined\") return null;\n try {\n const params = new URLSearchParams(window.location.search);\n return normalizeUrlThreadId(\n params.get(paramName) ??\n (paramName === DEFAULT_THREAD_URL_PARAM\n ? params.get(\"threadId\")\n : null),\n );\n } catch {\n return null;\n }\n}\n\nfunction runToAgentTeamTabInfo(\n run: AgentTeamRunSummary,\n): AgentTeamTabInfo | null {\n if (run.sourceRecord?.type && run.sourceRecord.type !== \"agent-team-task\") {\n return null;\n }\n const metadata = run.metadata ?? {};\n const threadId =\n readString(run.sourceRecord?.threadId) || readString(metadata.threadId);\n const parentThreadId =\n readString(run.sourceRecord?.parentThreadId) ||\n readString(metadata.parentThreadId);\n if (!threadId || !parentThreadId || threadId === parentThreadId) return null;\n const name =\n readString(run.sourceRecord?.name) ||\n readString(metadata.name) ||\n readString(run.title) ||\n \"Sub-agent\";\n return {\n threadId,\n parentThreadId,\n name,\n status: run.status ?? \"unknown\",\n };\n}\n\nexport interface MultiTabAssistantChatHeaderProps {\n tabs: ChatTab[];\n activeTabId: string;\n activeTabMessageCount: number;\n setActiveTabId: (tabId: string) => void;\n addTab: () => void;\n closeTab: (tabId: string) => void;\n closeOtherTabs: (tabId: string) => void;\n closeAllTabs: () => void;\n clearActiveTab: () => void;\n /** Open the history popover */\n showHistory?: boolean;\n toggleHistory?: () => void;\n /** Number of open tabs (useful for triggering scroll on tab count change) */\n tabCount: number;\n}\n\n// ─── Component ──────────────────────────────────────────────────────────────\n\nexport type MultiTabAssistantChatProps = Omit<\n AssistantChatProps,\n \"tabId\" | \"threadId\"\n> & {\n /** Show the tab bar. Default: true */\n showTabBar?: boolean;\n /** Optional custom single-row header renderer */\n renderHeader?: (props: MultiTabAssistantChatHeaderProps) => React.ReactNode;\n /** Optional overlay actions renderer for the active tab */\n renderOverlay?: (props: MultiTabAssistantChatHeaderProps) => React.ReactNode;\n /** Hide the chat content while keeping the header visible. Used when CLI/resources mode is active. */\n contentHidden?: boolean;\n /** Namespace for localStorage keys — used to isolate chat state per app in the frame. */\n storageKey?: string;\n /** Restore the previously active thread and open tabs from localStorage. */\n restoreActiveThread?: boolean;\n /** Stable browser tab id used for tab-scoped app-state context. */\n browserTabId?: string;\n /**\n * Keep the active thread in URL state. `true` uses the generic `?thread=id`\n * adapter; passing `routeThreadId` + `getPath` lets an app bind chats to\n * route params such as `/chat/:threadId`.\n */\n threadUrlSync?: boolean | ChatThreadUrlSyncOptions;\n /**\n * Bind new chats to a resource (deck, design, dashboard, etc.). When set,\n * new chats automatically inherit this scope and scoped chats tuck away when\n * the user leaves the resource. General chats remain visible across resource\n * navigation, and the user can detach a scoped chat via the scope chip above\n * the composer.\n */\n scope?: ChatThreadScope | null;\n /** Show the compact scope chip above the composer. Default: true. */\n showScopeBadge?: boolean;\n};\n\nexport function MultiTabAssistantChat({\n showTabBar = true,\n renderHeader,\n renderOverlay,\n contentHidden = false,\n apiUrl = agentNativePath(\"/_agent-native/agent-chat\"),\n storageKey,\n restoreActiveThread = true,\n browserTabId,\n threadUrlSync = false,\n scope = null,\n showScopeBadge = true,\n ...props\n}: MultiTabAssistantChatProps) {\n const {\n enabled: threadUrlSyncEnabled,\n paramName: threadUrlParamName,\n routeThreadId,\n getPath: getThreadPath,\n navigate: navigateThreadUrl,\n } = resolveThreadUrlSync(threadUrlSync);\n const threadRouteControlsActiveThread =\n threadUrlSyncEnabled &&\n threadUrlSync !== true &&\n typeof threadUrlSync === \"object\" &&\n hasOwn.call(threadUrlSync, \"routeThreadId\");\n const [urlThreadId, setUrlThreadId] = useState<string | null>(() =>\n threadUrlSyncEnabled\n ? threadRouteControlsActiveThread\n ? (routeThreadId ?? null)\n : readUrlThreadId(threadUrlParamName)\n : null,\n );\n const urlThreadIdRef = useRef(urlThreadId);\n urlThreadIdRef.current = urlThreadId;\n\n useEffect(() => {\n if (!threadUrlSyncEnabled || threadRouteControlsActiveThread) return;\n const update = () => setUrlThreadId(readUrlThreadId(threadUrlParamName));\n const uninstallHistoryPatch = installHistoryThreadUrlPatch();\n update();\n window.addEventListener(\"popstate\", update);\n window.addEventListener(THREAD_URL_CHANGED_EVENT, update);\n return () => {\n uninstallHistoryPatch();\n window.removeEventListener(\"popstate\", update);\n window.removeEventListener(THREAD_URL_CHANGED_EVENT, update);\n };\n }, [\n threadRouteControlsActiveThread,\n threadUrlParamName,\n threadUrlSyncEnabled,\n ]);\n\n useEffect(() => {\n if (!threadUrlSyncEnabled || !threadRouteControlsActiveThread) return;\n setUrlThreadId(routeThreadId ?? null);\n }, [routeThreadId, threadRouteControlsActiveThread, threadUrlSyncEnabled]);\n\n const writeThreadUrl = useCallback(\n (threadId: string | null, options: { replace?: boolean } = {}): void => {\n if (!threadUrlSyncEnabled || typeof window === \"undefined\") return;\n try {\n const normalizedThreadId = normalizeUrlThreadId(threadId);\n let next: string;\n if (getThreadPath) {\n next = getThreadPath(normalizedThreadId);\n } else {\n const url = new URL(window.location.href);\n if (normalizedThreadId) {\n url.searchParams.set(threadUrlParamName, normalizedThreadId);\n } else {\n url.searchParams.delete(threadUrlParamName);\n }\n if (threadUrlParamName !== \"threadId\") {\n url.searchParams.delete(\"threadId\");\n }\n next = `${url.pathname}${url.search}${url.hash}`;\n }\n const current = `${window.location.pathname}${window.location.search}${window.location.hash}`;\n if (next === current) {\n setUrlThreadId(normalizedThreadId);\n return;\n }\n if (getThreadPath && navigateThreadUrl) {\n navigateThreadUrl(next, { replace: options.replace === true });\n setUrlThreadId(normalizedThreadId);\n return;\n }\n const method = options.replace ? \"replaceState\" : \"pushState\";\n // `getThreadPath` returns a router-local path (no app basename). When we\n // fall back to the raw History API instead of a router navigate, resolve\n // the basename so deep-link reloads work in mounted apps.\n const historyTarget = getThreadPath ? appPath(next) : next;\n window.history[method](window.history.state, \"\", historyTarget);\n setUrlThreadId(normalizedThreadId);\n window.dispatchEvent(new Event(THREAD_URL_CHANGED_EVENT));\n const popstate =\n typeof PopStateEvent === \"function\"\n ? new PopStateEvent(\"popstate\", { state: window.history.state })\n : new Event(\"popstate\");\n window.dispatchEvent(popstate);\n } catch {}\n },\n [\n getThreadPath,\n navigateThreadUrl,\n threadUrlParamName,\n threadUrlSyncEnabled,\n ],\n );\n\n const {\n threads,\n activeThreadId,\n isLoading,\n createThread,\n switchThread: switchThreadState,\n detachThread,\n forkThread,\n saveThreadData,\n generateTitle,\n searchThreads,\n loadMoreThreads,\n refreshThreads,\n hasMoreThreads,\n isLoadingMoreThreads,\n threadsLoadError,\n isNewThread,\n } = useChatThreads(apiUrl, storageKey, scope, {\n restoreActiveThread,\n routeThreadId: threadUrlSyncEnabled ? urlThreadId : undefined,\n });\n\n const switchThread = useCallback(\n (threadId: string, options: { replace?: boolean } = {}) => {\n switchThreadState(threadId);\n writeThreadUrl(threadId, options);\n },\n [switchThreadState, writeThreadUrl],\n );\n\n // Namespace all localStorage keys by storageKey when provided (for per-app isolation in frame)\n const keyPrefix = storageKey ? `:${storageKey}` : \"\";\n const modelSelectionKey = `${MODEL_SELECTION_STORAGE_KEY}${keyPrefix}`;\n\n // Track which tabs have been focused at least once (lazy mount for sub-agent tabs)\n const mountedTabsRef = useRef<Set<string>>(new Set());\n const activeThreadIdRef = useRef(activeThreadId);\n activeThreadIdRef.current = activeThreadId;\n // Mark the active tab as mounted so it persists when switched away\n if (activeThreadId) mountedTabsRef.current.add(activeThreadId);\n const chatRefs = useRef<Map<string, AssistantChatHandle>>(new Map());\n // Sends queued until their target thread is ready (see PendingDelivery).\n const pendingDeliveries = useRef<PendingDelivery[]>([]);\n const pendingContextItems = useRef<Map<string, AgentChatContextItem[]>>(\n new Map(),\n );\n const [runningThreads, setRunningThreads] = useState<Set<string>>(new Set());\n const [showHistory, setShowHistory] = useState(false);\n const newThreadIds = useRef<Set<string>>(new Set());\n\n // ─── Model state ─────────────────────────────────────────────────────────\n const [availableModels, setAvailableModels] = useState<EngineModelGroup[]>(\n [],\n );\n const [defaultModel, setDefaultModel] = useState<string>(DEFAULT_MODEL);\n const threadModelRef = useRef<\n Map<string, { model: string; engine?: string; effort?: ReasoningEffort }>\n >(new Map());\n const [persistedModelSelection, setPersistedModelSelection] = useState<\n ModelSelection | undefined\n >(() => readStoredModelSelection(modelSelectionKey));\n const [modelSelectionVersion, setModelSelectionVersion] = useState(0);\n\n useEffect(() => {\n setPersistedModelSelection(readStoredModelSelection(modelSelectionKey));\n }, [modelSelectionKey]);\n\n const bumpModelSelectionVersion = useCallback(() => {\n setModelSelectionVersion((version) => version + 1);\n }, []);\n const postMessageSubmissionsDisabled = props.composerDisabled === true;\n\n const setContextInTab = useCallback(\n (\n threadId: string,\n item: AgentChatContextItem,\n options?: { focus?: boolean },\n ) => {\n const ref = chatRefs.current.get(threadId);\n if (ref) {\n ref.setComposerContextItem(item, options);\n return;\n }\n const existing = pendingContextItems.current.get(threadId) ?? [];\n const index = existing.findIndex((current) => current.key === item.key);\n const next =\n index === -1\n ? [...existing, item]\n : existing.map((current, currentIndex) =>\n currentIndex === index ? item : current,\n );\n pendingContextItems.current.set(threadId, next);\n },\n [],\n );\n\n const removeContextInTab = useCallback((threadId: string, key: string) => {\n const ref = chatRefs.current.get(threadId);\n if (ref) {\n ref.removeComposerContextItem(key);\n return;\n }\n const existing = pendingContextItems.current.get(threadId);\n if (!existing) return;\n const next = existing.filter((item) => item.key !== key);\n if (next.length === 0) {\n pendingContextItems.current.delete(threadId);\n } else {\n pendingContextItems.current.set(threadId, next);\n }\n }, []);\n\n const clearContextInTab = useCallback((threadId: string) => {\n const ref = chatRefs.current.get(threadId);\n if (ref) {\n ref.clearComposerContextItems();\n return;\n }\n pendingContextItems.current.delete(threadId);\n }, []);\n\n const resolveThreadModelSelection = useCallback(\n (threadId: string) =>\n resolveModelSelection(\n threadModelRef.current.get(threadId) ?? persistedModelSelection,\n availableModels,\n ),\n [availableModels, persistedModelSelection, modelSelectionVersion],\n );\n\n const persistModelSelection = useCallback(\n (selection: ModelSelection) => {\n setPersistedModelSelection(selection);\n writeStoredModelSelection(modelSelectionKey, selection);\n },\n [modelSelectionKey],\n );\n\n const handleModelChange = useCallback(\n (model: string, engine: string) => {\n const threadId = activeThreadIdRef.current;\n if (!threadId) return;\n const existing = threadModelRef.current.get(threadId);\n const effort = resolveReasoningEffortSelection(model, existing?.effort);\n const selection = { model, engine, effort };\n threadModelRef.current.set(threadId, selection);\n persistModelSelection(selection);\n bumpModelSelectionVersion();\n },\n [bumpModelSelectionVersion, persistModelSelection],\n );\n\n const handleEffortChange = useCallback(\n (effort: ReasoningEffort) => {\n const threadId = activeThreadIdRef.current;\n if (!threadId) return;\n const existing = resolveThreadModelSelection(threadId);\n const model = existing?.model ?? defaultModel;\n const engine =\n existing?.engine ??\n availableModels.find((group) => group.models.includes(model))?.engine ??\n availableModels[0]?.engine;\n const selection: ModelSelection = { model, effort };\n if (engine) selection.engine = engine;\n threadModelRef.current.set(threadId, selection);\n persistModelSelection(selection);\n bumpModelSelectionVersion();\n },\n [\n availableModels,\n bumpModelSelectionVersion,\n defaultModel,\n persistModelSelection,\n resolveThreadModelSelection,\n ],\n );\n\n const refreshEngines = useCallback(() => {\n Promise.all([\n callAction(\"manage-agent-engine\" as any, { action: \"list\" } as any).catch(\n () => null,\n ),\n fetch(agentNativePath(\"/_agent-native/env-status\"))\n .then((r) => (r.ok ? r.json() : []))\n .catch(() => []),\n fetch(agentNativePath(\"/_agent-native/builder/status\"))\n .then((r) => (r.ok ? r.json() : null))\n .catch(() => null),\n ])\n .then(([enginesData, envKeys, builderStatus]) => {\n if (!enginesData?.engines) return;\n const configuredKeys = new Set(\n (envKeys as Array<{ key: string; configured: boolean }>)\n .filter((k) => k.configured)\n .map((k) => k.key),\n );\n const builderConnected = builderStatus?.configured === true;\n const currentEngineName: string | undefined =\n enginesData.current?.engine;\n const currentModel: string | undefined = enginesData.current?.model;\n\n const groups = buildChatModelGroups({\n engines: enginesData.engines,\n configuredKeys,\n builderConnected,\n currentEngineName,\n currentModel,\n });\n setAvailableModels(groups);\n setDefaultModel(currentModel ?? DEFAULT_MODEL);\n })\n .catch(() => {});\n }, []);\n\n useEffect(() => {\n refreshEngines();\n window.addEventListener(\"agent-engine:configured-changed\", refreshEngines);\n return () =>\n window.removeEventListener(\n \"agent-engine:configured-changed\",\n refreshEngines,\n );\n }, [refreshEngines]);\n\n // Parent-child thread mapping — persisted to localStorage.\n // Maps childThreadId → parentThreadId for sub-agent tabs.\n const PARENT_MAP_KEY = `agent-chat-parent-map${keyPrefix}`;\n const [parentMap, setParentMap] = useState<Record<string, string>>(() => {\n try {\n const saved = localStorage.getItem(PARENT_MAP_KEY);\n if (saved) return JSON.parse(saved);\n } catch {}\n return {};\n });\n const parentMapRef = useRef(parentMap);\n parentMapRef.current = parentMap;\n const dismissedSubAgentTabsRef = useRef<Set<string>>(new Set());\n\n // Persist parent map to localStorage\n useEffect(() => {\n try {\n localStorage.setItem(PARENT_MAP_KEY, JSON.stringify(parentMap));\n } catch {}\n }, [parentMap, PARENT_MAP_KEY]);\n\n // Sub-agent display names — persisted to localStorage.\n // Maps childThreadId → short name (e.g. \"Research\", \"Draft email\").\n const SUB_AGENT_NAMES_KEY = `agent-chat-sub-agent-names${keyPrefix}`;\n const [subAgentNames, setSubAgentNames] = useState<Record<string, string>>(\n () => {\n try {\n const saved = localStorage.getItem(SUB_AGENT_NAMES_KEY);\n if (saved) return JSON.parse(saved);\n } catch {}\n return {};\n },\n );\n const subAgentNamesRef = useRef(subAgentNames);\n subAgentNamesRef.current = subAgentNames;\n const [subAgentStatuses, setSubAgentStatuses] = useState<\n Record<string, AgentTeamRunStatus>\n >({});\n\n useEffect(() => {\n try {\n localStorage.setItem(SUB_AGENT_NAMES_KEY, JSON.stringify(subAgentNames));\n } catch {}\n }, [subAgentNames, SUB_AGENT_NAMES_KEY]);\n\n // Open tabs — persisted to localStorage so they survive refresh.\n // Per-scope: when scope changes (e.g. user navigates from Deck A to Deck\n // B), the tab bar reflects whichever tabs they had open for *that*\n // resource. We do not bleed deck A's tabs into deck B's view.\n const scopeKeyPart = scope ? `:scope:${scope.type}:${scope.id}` : \"\";\n const OPEN_TABS_KEY = `agent-chat-open-tabs${keyPrefix}${scopeKeyPart}`;\n const [openTabIds, setOpenTabIds] = useState<string[]>(() => {\n if (!restoreActiveThread && activeThreadId) {\n for (const id of [activeThreadId]) mountedTabsRef.current.add(id);\n return [activeThreadId];\n }\n try {\n const saved = localStorage.getItem(OPEN_TABS_KEY);\n if (saved) {\n const parsed = JSON.parse(saved);\n if (Array.isArray(parsed) && parsed.length > 0) {\n // Mark restored tabs as mounted\n for (const id of parsed) mountedTabsRef.current.add(id);\n return parsed;\n }\n }\n } catch {}\n return [];\n });\n const openTabIdsRef = useRef(openTabIds);\n openTabIdsRef.current = openTabIds;\n const initializedRef = useRef(false);\n\n // Rehydrate open tabs when the scope flips. Mirrors `persistedKeyRef` in\n // `useChatThreads`: on a scope change we need to read the new key BEFORE\n // the persistence effect writes the current (now-wrong) tab list under\n // that new key.\n const openTabsKeyRef = useRef(OPEN_TABS_KEY);\n useEffect(() => {\n if (openTabsKeyRef.current === OPEN_TABS_KEY) return;\n openTabsKeyRef.current = OPEN_TABS_KEY;\n initializedRef.current = false;\n if (!restoreActiveThread) {\n setOpenTabIds(activeThreadId ? [activeThreadId] : []);\n return;\n }\n try {\n const saved = localStorage.getItem(OPEN_TABS_KEY);\n if (saved) {\n const parsed = JSON.parse(saved);\n if (Array.isArray(parsed)) {\n for (const id of parsed) mountedTabsRef.current.add(id);\n setOpenTabIds(parsed);\n return;\n }\n }\n } catch {}\n setOpenTabIds([]);\n }, [OPEN_TABS_KEY, activeThreadId, restoreActiveThread]);\n\n // Look up the active thread's actual scope from the list — when the\n // user opens a chat from history that was scoped to a different\n // resource, the badge should advertise that thread's binding, not\n // necessarily the resource currently in the viewport. When the thread\n // and the live prop refer to the same resource, prefer the prop's\n // label so a rename or a deferred deck-title load shows up in the UI\n // without waiting on the next persistence cycle.\n const activeThreadScope = useMemo<ChatThreadScope | null>(() => {\n if (!activeThreadId) return null;\n const t = threads.find((x) => x.id === activeThreadId);\n const stored = t?.scope ?? null;\n if (!stored) return null;\n if (scope && stored.type === scope.type && stored.id === scope.id) {\n return { ...stored, label: scope.label || stored.label };\n }\n return stored;\n }, [threads, activeThreadId, scope?.type, scope?.id, scope?.label]);\n\n // Brief confirmation banner shown after detach. The chip itself disappears\n // the instant scope clears, which the user described as \"nothing different\n // happened.\" We hold the confirmation in the same slot for ~2s so the\n // detach is visually acknowledged and the user is pointed at History.\n const [detachConfirmType, setDetachConfirmType] = useState<string | null>(\n null,\n );\n const detachTimerRef = useRef<ReturnType<typeof setTimeout> | null>(null);\n useEffect(() => {\n return () => {\n if (detachTimerRef.current) clearTimeout(detachTimerRef.current);\n };\n }, []);\n const handleDetachActiveThread = useCallback(() => {\n if (!activeThreadId || !activeThreadScope) return;\n const type = activeThreadScope.type;\n setDetachConfirmType(type);\n if (detachTimerRef.current) clearTimeout(detachTimerRef.current);\n detachTimerRef.current = setTimeout(() => setDetachConfirmType(null), 2200);\n detachThread(activeThreadId);\n }, [activeThreadId, activeThreadScope, detachThread]);\n\n // Other chats scoped to the active thread's resource (excluding the active\n // thread itself). Sorted most-recent-first to match user expectation in the\n // chip popover and empty-state addon.\n const otherScopedThreads = useMemo<ChatThreadSummary[]>(() => {\n if (!activeThreadScope) return [];\n return threads\n .filter(\n (t) =>\n t.id !== activeThreadId &&\n t.scope?.type === activeThreadScope.type &&\n t.scope?.id === activeThreadScope.id,\n )\n .sort((a, b) => b.updatedAt - a.updatedAt);\n }, [threads, activeThreadId, activeThreadScope]);\n\n // Persist open tab IDs to localStorage (exclude sub-agent tabs — they're session-only)\n useEffect(() => {\n if (openTabsKeyRef.current !== OPEN_TABS_KEY) return;\n const mainTabs = openTabIds.filter((id) => !parentMap[id]);\n if (mainTabs.length > 0) {\n try {\n localStorage.setItem(OPEN_TABS_KEY, JSON.stringify(mainTabs));\n } catch {}\n }\n }, [openTabIds, parentMap, OPEN_TABS_KEY]);\n\n // Initialize open tabs once threads load — validate saved tabs still exist\n useEffect(() => {\n if (initializedRef.current || !activeThreadId || threads.length === 0)\n return;\n initializedRef.current = true;\n const threadIds = new Set(threads.map((t) => t.id));\n const threadMap = new Map(threads.map((t) => [t.id, t]));\n\n // Hide tabs that have had no activity for more than 12 hours. Stale tabs\n // are removed from the sidebar on load but remain accessible via history.\n const now = Date.now();\n const isStale = (id: string) => {\n const thread = threadMap.get(id);\n return thread\n ? now - thread.updatedAt > STALE_THREAD_THRESHOLD_MS\n : false;\n };\n\n // If the active thread is a sub-agent, switch to its parent or the most recent main thread\n if (parentMap[activeThreadId]) {\n const parent = parentMap[activeThreadId];\n if (parent && threadIds.has(parent)) {\n switchThread(parent);\n } else {\n // Fall back to most recent main thread\n const mainThread = threads.find((t) => !parentMap[t.id]);\n if (mainThread) switchThread(mainThread.id);\n }\n }\n\n setOpenTabIds((prev) => {\n // Filter out tabs that no longer exist, sub-agent tabs, or stale tabs (>12h inactive)\n const valid = prev.filter(\n (id) => threadIds.has(id) && !parentMap[id] && !isStale(id),\n );\n // Ensure active thread is included (only if it's not a sub-agent and not stale)\n if (\n !parentMap[activeThreadId] &&\n !valid.includes(activeThreadId) &&\n !isStale(activeThreadId)\n ) {\n valid.push(activeThreadId);\n }\n return valid;\n });\n\n // If active thread is stale, start fresh\n if (!parentMap[activeThreadId] && isStale(activeThreadId)) {\n createThread().then((id) => {\n if (id) writeThreadUrl(null);\n });\n }\n }, [\n activeThreadId,\n threads,\n parentMap,\n switchThread,\n createThread,\n writeThreadUrl,\n ]);\n\n // Ensure active thread is always in open tabs.\n // Use functional update to check inside the setter — avoids race with the\n // initialization effect that may have already added the ID in the same batch.\n //\n // Scoped navigation can reset openTabIds from a different localStorage key\n // without changing activeThreadId. Re-check after tab-list resets so the\n // sidebar cannot end up with a live active thread but no mounted chat.\n useEffect(() => {\n if (!activeThreadId || openTabIds.includes(activeThreadId)) return;\n if (parentMap[activeThreadId]) return;\n\n const activeThread = threads.find((thread) => thread.id === activeThreadId);\n if (\n activeThread &&\n Date.now() - activeThread.updatedAt > STALE_THREAD_THRESHOLD_MS\n ) {\n return;\n }\n\n setOpenTabIds((prev) =>\n prev.includes(activeThreadId) ? prev : [...prev, activeThreadId],\n );\n }, [activeThreadId, openTabIds, parentMap, threads]);\n\n // Ensure at least one tab is always open — auto-create if sidebar is empty.\n // Skipped when an active thread already exists (e.g. the hook generated an\n // optimistic id for a brand-new session); the activeThreadId effect above\n // adds it to openTabIds without spinning up a duplicate thread.\n const autoCreatingRef = useRef(false);\n useEffect(() => {\n if (isLoading || autoCreatingRef.current) return;\n if (openTabIds.length === 0 && !activeThreadId) {\n autoCreatingRef.current = true;\n createThread().then((id) => {\n autoCreatingRef.current = false;\n if (id) {\n newThreadIds.current.add(id);\n setOpenTabIds([id]);\n writeThreadUrl(null, { replace: true });\n }\n });\n }\n }, [isLoading, openTabIds, activeThreadId, createThread, writeThreadUrl]);\n\n useEffect(() => {\n let stopped = false;\n let timer: ReturnType<typeof setTimeout> | null = null;\n const runsUrl = `${apiUrl.replace(/\\/$/, \"\")}/runs/list?goalId=agent-team`;\n\n async function hydrateAgentTeamTabs() {\n try {\n const res = await fetch(runsUrl);\n if (res.ok) {\n const data = (await res.json()) as { runs?: AgentTeamRunSummary[] };\n const infos = Array.isArray(data.runs)\n ? data.runs\n .map(runToAgentTeamTabInfo)\n .filter((info): info is AgentTeamTabInfo => Boolean(info))\n : [];\n\n setSubAgentStatuses((prev) => {\n let changed = false;\n const next: Record<string, AgentTeamRunStatus> = {};\n for (const info of infos) {\n next[info.threadId] = info.status;\n if (prev[info.threadId] !== info.status) changed = true;\n }\n if (Object.keys(prev).length !== Object.keys(next).length) {\n changed = true;\n }\n return changed ? next : prev;\n });\n\n const openSet = new Set(openTabIdsRef.current);\n const candidates = infos.filter(\n (info) =>\n !dismissedSubAgentTabsRef.current.has(info.threadId) &&\n (openSet.has(info.parentThreadId) || openSet.has(info.threadId)),\n );\n\n if (candidates.length > 0) {\n const shouldRefreshThreads = candidates.some(\n (info) =>\n !openSet.has(info.threadId) && openSet.has(info.parentThreadId),\n );\n const candidateParents = new Map(\n candidates.map((info) => [info.threadId, info.parentThreadId]),\n );\n setParentMap((prev) => {\n let next = prev;\n for (const info of candidates) {\n if (next[info.threadId] === info.parentThreadId) continue;\n next =\n next === prev\n ? { ...prev, [info.threadId]: info.parentThreadId }\n : { ...next, [info.threadId]: info.parentThreadId };\n }\n return next;\n });\n setSubAgentNames((prev) => {\n let next = prev;\n for (const info of candidates) {\n if (!info.name || next[info.threadId] === info.name) continue;\n next =\n next === prev\n ? { ...prev, [info.threadId]: info.name }\n : { ...next, [info.threadId]: info.name };\n }\n return next;\n });\n\n setOpenTabIds((prev) => {\n let next = prev;\n for (const info of candidates) {\n if (next.includes(info.threadId)) continue;\n const parentIdx = next.indexOf(info.parentThreadId);\n if (parentIdx === -1) continue;\n if (next === prev) next = [...prev];\n let insertIdx = parentIdx + 1;\n while (insertIdx < next.length) {\n const siblingParent =\n parentMapRef.current[next[insertIdx]] ||\n candidateParents.get(next[insertIdx]);\n if (siblingParent !== info.parentThreadId) break;\n insertIdx++;\n }\n next.splice(insertIdx, 0, info.threadId);\n }\n return next;\n });\n if (shouldRefreshThreads) {\n refreshThreads();\n }\n }\n }\n } catch {\n // Best effort: task cards and manual history still work if this poll fails.\n } finally {\n if (!stopped) {\n timer = setTimeout(hydrateAgentTeamTabs, 3000);\n }\n }\n }\n\n hydrateAgentTeamTabs();\n return () => {\n stopped = true;\n if (timer) clearTimeout(timer);\n };\n }, [apiUrl, refreshThreads]);\n\n // Focus the composer when switching tabs\n useEffect(() => {\n if (!activeThreadId) return;\n // Small delay to ensure the tab is visible before focusing\n const t = setTimeout(() => {\n chatRefs.current.get(activeThreadId)?.focusComposer();\n }, 50);\n return () => clearTimeout(t);\n }, [activeThreadId]);\n\n // Ref callback: scroll the active tab into view in the overflow container.\n // Uses getBoundingClientRect for reliable positioning regardless of offsetParent.\n // A margin keeps the active tab from sitting flush against either container\n // edge — at the right edge it was landing directly under the +/history/menu\n // buttons, which visually clipped the tab label.\n const activeTabRefCb = useCallback((el: HTMLElement | null) => {\n if (!el) return;\n const container = el.parentElement;\n if (!container) return;\n const MARGIN = 24;\n requestAnimationFrame(() => {\n const containerRect = container.getBoundingClientRect();\n const tabRect = el.getBoundingClientRect();\n if (tabRect.left < containerRect.left + MARGIN) {\n container.scrollLeft += tabRect.left - containerRect.left - MARGIN;\n } else if (tabRect.right > containerRect.right - MARGIN) {\n container.scrollLeft += tabRect.right - containerRect.right + MARGIN;\n }\n });\n }, []);\n\n const [messageCounts, setMessageCounts] = useState<Record<string, number>>(\n () => Object.fromEntries(threads.map((t) => [t.id, t.messageCount ?? 0])),\n );\n\n // Sync message counts from threads when they load\n useEffect(() => {\n if (threads.length > 0) {\n setMessageCounts((prev) => {\n const next = { ...prev };\n for (const t of threads) {\n if (!(t.id in next)) {\n next[t.id] = t.messageCount ?? 0;\n }\n }\n return next;\n });\n }\n }, [threads]);\n\n // Listen for builder.submitChat postMessages\n useEffect(() => {\n const handler = (event: MessageEvent) => {\n if (!isTrustedFrameMessage(event)) return;\n if (event.data?.type === AGENT_CHAT_SET_CONTEXT_MESSAGE_TYPE) {\n const item = normalizeAgentChatContextItem(event.data.data);\n if (!item) return;\n const openSidebar = event.data.data?.openSidebar as boolean | undefined;\n if (openSidebar !== false) {\n window.dispatchEvent(new CustomEvent(\"agent-panel:open\"));\n }\n if (postMessageSubmissionsDisabled) return;\n const currentTabId = activeThreadIdRef.current;\n if (!currentTabId) return;\n // Focus defaults to true; a caller opts out with `focus: false` for\n // passive context (e.g. a canvas selection) so staging never steals\n // focus from an in-progress inline editor.\n const focus = (event.data.data?.focus as boolean | undefined) !== false;\n setContextInTab(currentTabId, item, { focus });\n return;\n }\n if (event.data?.type === AGENT_CHAT_REMOVE_CONTEXT_MESSAGE_TYPE) {\n const key =\n typeof event.data.data?.key === \"string\"\n ? event.data.data.key.trim()\n : \"\";\n if (!key) return;\n const openSidebar = event.data.data?.openSidebar as boolean | undefined;\n if (openSidebar === true) {\n window.dispatchEvent(new CustomEvent(\"agent-panel:open\"));\n }\n if (postMessageSubmissionsDisabled) return;\n const currentTabId = activeThreadIdRef.current;\n if (!currentTabId) return;\n removeContextInTab(currentTabId, key);\n return;\n }\n if (event.data?.type === AGENT_CHAT_CLEAR_CONTEXT_MESSAGE_TYPE) {\n const openSidebar = event.data.data?.openSidebar as boolean | undefined;\n if (openSidebar === true) {\n window.dispatchEvent(new CustomEvent(\"agent-panel:open\"));\n }\n if (postMessageSubmissionsDisabled) return;\n const currentTabId = activeThreadIdRef.current;\n if (!currentTabId) return;\n clearContextInTab(currentTabId);\n return;\n }\n const parsed = parseSubmitChatMessage(event);\n if (!parsed) return;\n // Dedup the live post against the cold-start replay; first one wins.\n if (!claimAgentChatSubmit(parsed.submitMessageId)) return;\n const {\n message,\n context,\n openSidebar,\n model,\n effort,\n newTab,\n background,\n submit,\n images,\n submitMessageId,\n } = parsed;\n const requestedTabId = parsed.tabId;\n const requestMode =\n parsed.requestMode ?? requestModeFromExecMode(props.execMode);\n\n // Make sure the sidebar is visible to show the response, unless the\n // caller explicitly opted out or it's a background send.\n if (openSidebar !== false && !background) {\n window.dispatchEvent(new CustomEvent(\"agent-panel:open\"));\n }\n if (postMessageSubmissionsDisabled) {\n reportAgentChatSubmitResult(\n submitMessageId,\n false,\n \"composer-disabled\",\n );\n return;\n }\n\n // Plan mode is sent as request metadata by the chat adapter. Keep the\n // user-visible message clean so mode instructions never enter history.\n const fullMessage = context\n ? appendAgentChatContextToMessage(message, context)\n : message;\n\n const send: PendingSend = {\n message: fullMessage,\n images,\n submit,\n ...(background ? { trackInRunsTray: true } : {}),\n ...(requestMode ? { requestMode } : {}),\n ...(submitMessageId ? { submitMessageId } : {}),\n };\n\n const sendToTab = (threadId: string) => {\n if (isAgentChatSubmitCancelled(submitMessageId)) return;\n // If a model override was specified, apply it only if we recognize it\n if (model) {\n const matchedGroup = availableModels.find((g) =>\n g.models.includes(model),\n );\n if (matchedGroup) {\n const selectedEffort = resolveReasoningEffortSelection(\n model,\n isReasoningEffort(effort) ? effort : undefined,\n );\n threadModelRef.current.set(threadId, {\n model,\n engine: matchedGroup.engine,\n effort: selectedEffort,\n });\n bumpModelSelectionVersion();\n }\n }\n\n const ref = chatRefs.current.get(threadId);\n if (ref) {\n deliverPendingSend(ref, send);\n } else {\n pendingDeliveries.current.push({ threadId, send });\n }\n };\n\n if (newTab) {\n const previousTabId = activeThreadIdRef.current;\n createThread(requestedTabId)\n .then((newId) => {\n if (isAgentChatSubmitCancelled(submitMessageId)) return;\n if (!newId) {\n reportAgentChatSubmitResult(\n submitMessageId,\n false,\n \"thread-create-failed\",\n );\n return;\n }\n newThreadIds.current.add(newId);\n if (background) {\n mountedTabsRef.current.add(newId);\n }\n setOpenTabIds((prev) =>\n prev.includes(newId) ? prev : [...prev, newId],\n );\n if (!background) {\n writeThreadUrl(newId);\n }\n sendToTab(newId);\n if (background && previousTabId) {\n switchThreadState(previousTabId);\n }\n })\n .catch(() => {\n reportAgentChatSubmitResult(\n submitMessageId,\n false,\n \"thread-create-failed\",\n );\n });\n } else {\n const currentTabId = activeThreadIdRef.current;\n if (currentTabId) {\n sendToTab(currentTabId);\n } else {\n // Cold start: no thread yet. Queue for the first active thread (the\n // bootstrap effect creates it) rather than racing a second create.\n pendingDeliveries.current.push({ threadId: null, send });\n }\n }\n };\n window.addEventListener(\"message\", handler);\n return () => window.removeEventListener(\"message\", handler);\n }, [\n availableModels,\n bumpModelSelectionVersion,\n clearContextInTab,\n createThread,\n postMessageSubmissionsDisabled,\n props.execMode,\n removeContextInTab,\n setContextInTab,\n switchThread,\n switchThreadState,\n writeThreadUrl,\n ]);\n\n // Replay submits posted before this lazy panel's listener attached. Dedup in\n // the handler keeps a live + replayed message single.\n useEffect(() => {\n const buffered = drainBufferedAgentChatSubmits();\n for (const data of buffered) {\n window.dispatchEvent(\n new MessageEvent(\"message\", {\n data: { type: \"agentNative.submitChat\", data },\n origin: window.location.origin,\n }),\n );\n }\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, []);\n\n // Flush queued context items and sends once their thread's ref is mounted\n // (re-runs on ref mount via openTabIds and on cold-start target via\n // activeThreadId).\n useEffect(() => {\n for (const [tabId, items] of pendingContextItems.current) {\n const ref = chatRefs.current.get(tabId);\n if (!ref) continue;\n for (const item of items) ref.setComposerContextItem(item);\n pendingContextItems.current.delete(tabId);\n }\n\n if (pendingDeliveries.current.length === 0) return;\n const active = activeThreadIdRef.current;\n const remaining: PendingDelivery[] = [];\n for (const delivery of pendingDeliveries.current) {\n if (isAgentChatSubmitCancelled(delivery.send.submitMessageId)) continue;\n const threadId = delivery.threadId ?? active ?? null;\n const ref = threadId ? chatRefs.current.get(threadId) : null;\n if (threadId && ref) {\n const { send } = delivery;\n setTimeout(() => deliverPendingSend(ref, send), 50);\n } else {\n // Not ready — keep it, pinning the resolved threadId once known.\n remaining.push(threadId ? { threadId, send: delivery.send } : delivery);\n }\n }\n pendingDeliveries.current = remaining;\n }, [openTabIds, activeThreadId]);\n\n // Listen for chatRunning completion events\n useEffect(() => {\n const handler = (e: Event) => {\n const detail = (e as CustomEvent).detail;\n if (!detail) return;\n const { isRunning, tabId } = detail;\n if (!tabId) return;\n\n setRunningThreads((prev) => {\n const next = new Set(prev);\n if (isRunning) {\n next.add(tabId);\n } else {\n next.delete(tabId);\n }\n return next;\n });\n };\n window.addEventListener(\"agentNative.chatRunning\", handler);\n return () => window.removeEventListener(\"agentNative.chatRunning\", handler);\n }, []);\n\n const addTab = useCallback(async () => {\n const id = await createThread();\n if (id) {\n newThreadIds.current.add(id);\n writeThreadUrl(null);\n }\n return id;\n }, [createThread, writeThreadUrl]);\n\n const cleanupClosedTab = useCallback((tabId: string) => {\n if (parentMapRef.current[tabId]) {\n dismissedSubAgentTabsRef.current.add(tabId);\n }\n chatRefs.current.delete(tabId);\n pendingDeliveries.current = pendingDeliveries.current.filter(\n (d) => d.threadId !== tabId,\n );\n pendingContextItems.current.delete(tabId);\n newThreadIds.current.delete(tabId);\n threadModelRef.current.delete(tabId);\n // Clean up parent map and sub-agent names\n setParentMap((prev) => {\n if (!(tabId in prev)) return prev;\n const { [tabId]: _, ...rest } = prev;\n return rest;\n });\n setSubAgentNames((prev) => {\n if (!(tabId in prev)) return prev;\n const { [tabId]: _, ...rest } = prev;\n return rest;\n });\n setSubAgentStatuses((prev) => {\n if (!(tabId in prev)) return prev;\n const { [tabId]: _, ...rest } = prev;\n return rest;\n });\n }, []);\n\n const closeTab = useCallback(\n (tabId: string) => {\n setOpenTabIds((prev) => {\n if (prev.length <= 1) {\n // Last tab — create a new one and replace the old tab atomically\n createThread().then((newId) => {\n if (newId) {\n newThreadIds.current.add(newId);\n setOpenTabIds([newId]);\n writeThreadUrl(null);\n }\n });\n return prev; // Keep old tab until new one is ready\n }\n const next = prev.filter((id) => id !== tabId);\n if (tabId === activeThreadIdRef.current && next.length > 0) {\n const idx = prev.indexOf(tabId);\n switchThread(next[Math.min(idx, next.length - 1)]);\n }\n return next;\n });\n cleanupClosedTab(tabId);\n },\n [switchThread, createThread, cleanupClosedTab, writeThreadUrl],\n );\n\n const closeOtherTabs = useCallback(\n (tabId: string) => {\n for (const id of openTabIdsRef.current) {\n if (id !== tabId && parentMapRef.current[id]) {\n dismissedSubAgentTabsRef.current.add(id);\n }\n }\n setOpenTabIds([tabId]);\n if (activeThreadIdRef.current !== tabId) {\n switchThread(tabId);\n }\n // Clean up refs for closed tabs\n for (const key of chatRefs.current.keys()) {\n if (key !== tabId) {\n if (parentMapRef.current[key]) {\n dismissedSubAgentTabsRef.current.add(key);\n }\n chatRefs.current.delete(key);\n pendingDeliveries.current = pendingDeliveries.current.filter(\n (d) => d.threadId !== key,\n );\n pendingContextItems.current.delete(key);\n newThreadIds.current.delete(key);\n threadModelRef.current.delete(key);\n }\n }\n // Clean up parent map and sub-agent names — only keep entries for the surviving tab\n setParentMap((prev) => {\n if (tabId in prev) return { [tabId]: prev[tabId] };\n return {};\n });\n setSubAgentNames((prev) => {\n if (tabId in prev) return { [tabId]: prev[tabId] };\n return {};\n });\n setSubAgentStatuses((prev) => {\n if (tabId in prev) return { [tabId]: prev[tabId] };\n return {};\n });\n },\n [switchThread],\n );\n\n const closeAllTabs = useCallback(async () => {\n const id = await createThread();\n if (id) {\n newThreadIds.current.add(id);\n setOpenTabIds([id]);\n switchThreadState(id);\n writeThreadUrl(null);\n dismissedSubAgentTabsRef.current.clear();\n // Clean up all old refs\n chatRefs.current.clear();\n pendingDeliveries.current = [];\n pendingContextItems.current.clear();\n threadModelRef.current.clear();\n setParentMap({});\n setSubAgentNames({});\n setSubAgentStatuses({});\n }\n }, [createThread, switchThreadState, writeThreadUrl]);\n\n // Keyboard shortcuts dispatched from AgentPanel based on the active mode\n useEffect(() => {\n const handleCloseCurrent = () => {\n const id = activeThreadIdRef.current;\n if (id) closeTab(id);\n };\n const handleCloseAll = () => {\n void closeAllTabs();\n };\n const handleNewChat = () => {\n void addTab();\n };\n window.addEventListener(\"agent-chat:close-current-tab\", handleCloseCurrent);\n window.addEventListener(\"agent-chat:close-all-tabs\", handleCloseAll);\n window.addEventListener(\"agent-chat:new-chat\", handleNewChat);\n return () => {\n window.removeEventListener(\n \"agent-chat:close-current-tab\",\n handleCloseCurrent,\n );\n window.removeEventListener(\"agent-chat:close-all-tabs\", handleCloseAll);\n window.removeEventListener(\"agent-chat:new-chat\", handleNewChat);\n };\n }, [closeTab, closeAllTabs, addTab]);\n\n useEffect(() => {\n const handleOpenThread = (event: Event) => {\n const detail = (event as CustomEvent).detail as\n | { threadId?: unknown; newThread?: unknown; openRequestId?: unknown }\n | undefined;\n const threadId =\n typeof detail?.threadId === \"string\" ? detail.threadId : \"\";\n if (!detail || !threadId) return;\n if (!claimAgentChatOpenRequest(detail.openRequestId)) return;\n\n if (detail?.newThread === true) {\n newThreadIds.current.add(threadId);\n void createThread(threadId).then((createdId) => {\n if (!createdId) return;\n setOpenTabIds((prev) =>\n prev.includes(createdId) ? prev : [...prev, createdId],\n );\n writeThreadUrl(null);\n });\n return;\n }\n setOpenTabIds((prev) =>\n prev.includes(threadId) ? prev : [...prev, threadId],\n );\n switchThread(threadId);\n };\n\n window.addEventListener(\"agent-chat:open-thread\", handleOpenThread);\n return () =>\n window.removeEventListener(\"agent-chat:open-thread\", handleOpenThread);\n }, [createThread, switchThread, writeThreadUrl]);\n\n const clearActiveTab = useCallback(() => {\n const tabIdToClear = activeThreadIdRef.current;\n void addTab().then((newTabId) => {\n if (!tabIdToClear || !newTabId || tabIdToClear === newTabId) return;\n setOpenTabIds((prev) => {\n const next = prev.filter((id) => id !== tabIdToClear);\n return next.includes(newTabId) ? next : [...next, newTabId];\n });\n cleanupClosedTab(tabIdToClear);\n });\n }, [addTab, cleanupClosedTab]);\n\n const openFromHistory = useCallback(\n (threadId: string) => {\n if (!openTabIds.includes(threadId)) {\n setOpenTabIds((prev) => [...prev, threadId]);\n }\n switchThread(threadId);\n },\n [openTabIds, switchThread],\n );\n\n // Listen for agent-task-open events (from AgentTaskCard \"Open\" button)\n useEffect(() => {\n function handleOpenTask(e: Event) {\n const detail = (e as CustomEvent).detail;\n const threadId = detail?.threadId;\n if (!threadId) return;\n if (!claimAgentChatOpenRequest(detail.openRequestId)) return;\n dismissedSubAgentTabsRef.current.delete(threadId);\n // Prefer an explicit parent (RunsTray/background hydration knows it);\n // inline task cards fall back to the active orchestrator thread.\n const explicitParentId =\n typeof detail?.parentThreadId === \"string\"\n ? detail.parentThreadId.trim()\n : \"\";\n const parentId = explicitParentId || activeThreadIdRef.current;\n if (parentId && parentId !== threadId) {\n setParentMap((prev) =>\n prev[threadId] === parentId\n ? prev\n : { ...prev, [threadId]: parentId },\n );\n }\n // Store the sub-agent name/description for the tab label\n const name = detail.name || detail.description || \"\";\n if (name) {\n setSubAgentNames((prev) =>\n prev[threadId] === name ? prev : { ...prev, [threadId]: name },\n );\n }\n // Refresh thread list so the new sub-agent thread appears with its title\n refreshThreads();\n // Open the sub-agent thread as a tab — insert after parent for visual grouping\n if (!openTabIds.includes(threadId)) {\n setOpenTabIds((prev) => {\n if (parentId) {\n const parentIdx = prev.indexOf(parentId);\n if (parentIdx !== -1) {\n // Insert after the parent (and any existing children of that parent)\n const next = [...prev];\n let insertIdx = parentIdx + 1;\n // Skip past any existing children of the same parent\n while (\n insertIdx < next.length &&\n parentMap[next[insertIdx]] === parentId\n ) {\n insertIdx++;\n }\n next.splice(insertIdx, 0, threadId);\n return next;\n }\n }\n return [...prev, threadId];\n });\n }\n switchThread(threadId);\n }\n window.addEventListener(\"agent-task-open\", handleOpenTask);\n return () => window.removeEventListener(\"agent-task-open\", handleOpenTask);\n }, [openTabIds, switchThread, refreshThreads, parentMap]);\n\n // Replay thread/task opens requested before this lazy panel's listeners\n // attached. Live events claim their id; replay drains only unclaimed requests.\n useEffect(() => {\n const buffered = drainBufferedAgentChatOpenRequests();\n for (const request of buffered) {\n window.dispatchEvent(\n new CustomEvent(request.eventType, { detail: request.detail }),\n );\n }\n }, []);\n\n // Watch for agent-issued chat-command in application-state. The shared\n // DB-sync transport advances this key-specific version, so the command gets\n // one initial read and one read per actual write instead of a 2s loop.\n const lastChatCommandRef = useRef(0);\n const chatCommandVersion = useChangeVersion(\"app-state:chat-command\");\n useEffect(() => {\n let stopped = false;\n\n async function readChatCommand() {\n if (stopped) return;\n try {\n const res = await fetch(\n agentNativePath(\"/_agent-native/application-state/chat-command\"),\n );\n if (res.ok) {\n const data = await res.json();\n if (\n data?.value?.command === \"open-thread\" &&\n data.value.threadId &&\n data.value.timestamp > lastChatCommandRef.current\n ) {\n lastChatCommandRef.current = data.value.timestamp;\n const threadId = data.value.threadId as string;\n // Open the thread as a tab and focus it\n setOpenTabIds((prev) =>\n prev.includes(threadId) ? prev : [...prev, threadId],\n );\n switchThread(threadId);\n // Clear the command\n fetch(\n agentNativePath(\"/_agent-native/application-state/chat-command\"),\n {\n method: \"DELETE\",\n headers: { \"X-Agent-Native-CSRF\": \"1\" },\n },\n ).catch(() => {});\n }\n }\n } catch {}\n }\n\n void readChatCommand();\n return () => {\n stopped = true;\n };\n }, [chatCommandVersion, switchThread]);\n\n const handleGenerateTitle = useCallback(\n (threadId: string, message: string) => {\n generateTitle(threadId, message).then((title) => {\n if (title) {\n // Persist the generated title to the server\n saveThreadData(threadId, {\n threadData: \"\",\n title,\n preview: message.slice(0, 120),\n titleSource: \"generated\",\n });\n }\n });\n },\n [generateTitle, saveThreadData],\n );\n\n const handleSaveThread = useCallback(\n (\n threadId: string,\n data: {\n threadData: string;\n title: string;\n preview: string;\n messageCount: number;\n },\n ) => {\n saveThreadData(threadId, data);\n if (\n data.messageCount > 0 &&\n threadId === activeThreadIdRef.current &&\n urlThreadIdRef.current !== threadId\n ) {\n writeThreadUrl(threadId);\n }\n },\n [saveThreadData, writeThreadUrl],\n );\n\n // ─── Slash command handler ──────────────────────────────────────────\n const [helpVisible, setHelpVisible] = useState(false);\n\n const handleSlashCommand = useCallback(\n (command: string) => {\n switch (command) {\n case \"clear\":\n case \"new\":\n addTab();\n break;\n case \"history\":\n setShowHistory(true);\n break;\n case \"plan\":\n props.onExecModeChange?.(\"plan\");\n break;\n case \"act\":\n props.onExecModeChange?.(\"build\");\n break;\n case \"help\":\n setHelpVisible(true);\n break;\n }\n },\n [addTab, props.onExecModeChange],\n );\n\n const handleForkChat = useCallback(\n async (sourceThreadId: string) => {\n const sourceSnapshot =\n chatRefs.current.get(sourceThreadId)?.exportThreadSnapshot() ?? null;\n const forkedId = await forkThread(sourceThreadId, sourceSnapshot);\n if (!forkedId) return false;\n setOpenTabIds((prev) => {\n const idx = prev.indexOf(sourceThreadId);\n if (idx !== -1) {\n const next = [...prev];\n next.splice(idx + 1, 0, forkedId);\n return next;\n }\n return [...prev, forkedId];\n });\n switchThread(forkedId);\n return true;\n },\n [forkThread, switchThread],\n );\n\n // Build tabs from open thread IDs. During the first thread-list fetch,\n // `activeThreadId` is seeded synchronously so the chat can mount before\n // persisted open tabs have been reconciled.\n const visibleOpenTabIds =\n activeThreadId && !openTabIds.includes(activeThreadId)\n ? [...openTabIds, activeThreadId]\n : openTabIds;\n const threadMap = new Map(threads.map((t) => [t.id, t]));\n const tabs: ChatTab[] = visibleOpenTabIds\n .filter((id) => threadMap.has(id) || id === activeThreadId)\n .map((id) => {\n const t = threadMap.get(id);\n const agentTeamStatus = chatTabStatusFromAgentTeamStatus(\n subAgentStatuses[id],\n );\n return {\n id,\n label: t?.title || t?.preview?.slice(0, 30) || \"New chat\",\n status:\n agentTeamStatus ??\n (runningThreads.has(id)\n ? (\"running\" as const)\n : (messageCounts[id] ?? t?.messageCount ?? 0) > 0\n ? (\"completed\" as const)\n : (\"idle\" as const)),\n parentThreadId: parentMap[id],\n subAgentName: subAgentNames[id],\n };\n });\n\n // Include sub-agent tabs that aren't in threadMap yet (just created, not refreshed)\n for (const id of visibleOpenTabIds) {\n if (!tabs.some((t) => t.id === id)) {\n tabs.push({\n id,\n label:\n subAgentNames[id] || (parentMap[id] ? \"Sub-agent...\" : \"New chat\"),\n status:\n chatTabStatusFromAgentTeamStatus(subAgentStatuses[id]) ??\n (\"running\" as const),\n parentThreadId: parentMap[id],\n subAgentName: subAgentNames[id],\n });\n }\n }\n\n const headerProps: MultiTabAssistantChatHeaderProps = {\n tabs,\n activeTabId: activeThreadId ?? \"\",\n activeTabMessageCount: activeThreadId\n ? (messageCounts[activeThreadId] ?? 0)\n : 0,\n setActiveTabId: switchThread,\n addTab,\n closeTab,\n closeOtherTabs,\n closeAllTabs,\n clearActiveTab,\n showHistory,\n toggleHistory: () => setShowHistory((v) => !v),\n tabCount: visibleOpenTabIds.length,\n };\n\n // Wait for the first thread-list pass only when there is no synchronously\n // seeded active thread. Suggestion loading and thread-list reconciliation\n // should not block the chat shell from mounting.\n if (isLoading && !activeThreadId) {\n return (\n <ChatSkeleton\n header={renderHeader?.(headerProps)}\n headerOnly={contentHidden}\n />\n );\n }\n\n return (\n <div className=\"flex flex-1 flex-col h-full min-h-0 overflow-x-hidden\">\n {/* Tailwind group-hover/tab doesn't work in core package — inject directly */}\n <style\n dangerouslySetInnerHTML={{\n __html:\n \".agent-tab-close{opacity:0}.agent-tab:hover .agent-tab-close{opacity:1}\" +\n \".agent-tabs-scroll{scrollbar-width:none;-ms-overflow-style:none;}\" +\n \".agent-tabs-scroll::-webkit-scrollbar{display:none;}\",\n }}\n />\n {renderHeader\n ? renderHeader(headerProps)\n : showTabBar\n ? (() => {\n const activeTab = tabs.find((t) => t.id === activeThreadId);\n const focusParentId = activeTab?.parentThreadId || activeThreadId;\n const childTabs = tabs.filter(\n (t) => t.parentThreadId === focusParentId,\n );\n const hasSubTabs = childTabs.length > 0;\n const mainTabs = tabs.filter((t) => !t.parentThreadId);\n\n return (\n <>\n <div className=\"flex items-center px-1 py-1 border-b border-border shrink-0 gap-0.5\">\n <div className=\"agent-tabs-scroll flex items-center gap-0.5 min-w-0 overflow-x-auto flex-1\">\n {mainTabs.map((tab) => {\n const isActive =\n tab.id === activeThreadId ||\n (tab.id === focusParentId &&\n activeTab?.parentThreadId === tab.id);\n return (\n <div\n key={tab.id}\n ref={isActive ? activeTabRefCb : undefined}\n className={cn(\n \"agent-tab relative flex items-center rounded-md text-[11px] font-medium shrink-0 max-w-[130px]\",\n isActive\n ? \"bg-accent text-foreground ring-1 ring-inset ring-border/60 shadow-sm\"\n : \"text-muted-foreground hover:text-foreground hover:bg-accent/50\",\n )}\n >\n <button\n type=\"button\"\n onClick={() => switchThread(tab.id)}\n className=\"flex items-center gap-1 px-2.5 py-1.5 min-w-0 flex-1 text-start\"\n >\n <span className=\"truncate pe-1\">{tab.label}</span>\n {tab.status === \"running\" && (\n <span className=\"w-1.5 h-1.5 rounded-full bg-muted-foreground/50 shrink-0 animate-pulse\" />\n )}\n </button>\n <button\n type=\"button\"\n aria-label=\"Close tab\"\n onClick={(e) => {\n e.stopPropagation();\n e.preventDefault();\n closeTab(tab.id);\n }}\n className=\"agent-tab-close flex items-center justify-end text-muted-foreground hover:!text-foreground\"\n style={{\n position: \"absolute\",\n right: 0,\n top: 0,\n bottom: 0,\n width: 28,\n paddingRight: 6,\n borderRadius: \"0 6px 6px 0\",\n background:\n \"linear-gradient(to right, transparent, hsl(var(--accent)) 40%)\",\n }}\n >\n <IconX size={12} />\n </button>\n </div>\n );\n })}\n </div>\n <TooltipProvider delayDuration={200}>\n <div className=\"flex items-center gap-px shrink-0 ms-auto\">\n <Tooltip>\n <TooltipTrigger asChild>\n <button\n onClick={addTab}\n aria-label=\"New chat\"\n className=\"flex h-6 w-6 items-center justify-center rounded text-muted-foreground/60 hover:text-foreground hover:bg-accent/50\"\n >\n <IconPlus size={12} />\n </button>\n </TooltipTrigger>\n <TooltipContent>New chat</TooltipContent>\n </Tooltip>\n <Tooltip>\n <TooltipTrigger asChild>\n <button\n onClick={() => setShowHistory(!showHistory)}\n aria-label=\"All chats\"\n className={cn(\n \"flex h-6 w-6 items-center justify-center rounded text-muted-foreground/60 hover:text-foreground hover:bg-accent/50\",\n showHistory && \"bg-accent text-foreground\",\n )}\n >\n <IconHistory size={12} />\n </button>\n </TooltipTrigger>\n <TooltipContent>All chats</TooltipContent>\n </Tooltip>\n </div>\n </TooltipProvider>\n </div>\n {hasSubTabs && (\n <div className=\"flex items-center px-1 py-0.5 border-b border-border shrink-0 gap-0.5 bg-muted/30\">\n <div className=\"agent-tabs-scroll flex items-center gap-0.5 min-w-0 overflow-x-auto flex-1\">\n <button\n onClick={() => switchThread(focusParentId!)}\n className={cn(\n \"flex shrink-0 items-center gap-1 rounded-md px-2 py-1 text-[10px] font-medium cursor-pointer\",\n activeThreadId === focusParentId\n ? \"bg-accent text-foreground\"\n : \"text-muted-foreground hover:bg-accent hover:text-foreground\",\n )}\n >\n Main\n </button>\n {childTabs.map((tab) => (\n <div\n key={tab.id}\n ref={\n tab.id === activeThreadId\n ? activeTabRefCb\n : undefined\n }\n className={cn(\n \"agent-tab relative flex shrink-0 items-center rounded-md text-[10px] font-medium max-w-[130px]\",\n tab.id === activeThreadId\n ? \"bg-accent text-foreground\"\n : \"text-muted-foreground hover:bg-accent hover:text-foreground\",\n )}\n >\n <button\n type=\"button\"\n onClick={() => switchThread(tab.id)}\n className=\"flex items-center gap-1 px-2 py-1 min-w-0 flex-1 text-start\"\n >\n <span className=\"truncate pe-1\">\n {tab.subAgentName || tab.label}\n </span>\n {tab.status === \"running\" && (\n <span className=\"w-1 h-1 rounded-full bg-muted-foreground/50 shrink-0 animate-pulse\" />\n )}\n </button>\n <button\n type=\"button\"\n aria-label=\"Close tab\"\n onClick={(e) => {\n e.stopPropagation();\n e.preventDefault();\n closeTab(tab.id);\n }}\n className=\"agent-tab-close flex items-center justify-end text-muted-foreground hover:!text-foreground\"\n style={{\n position: \"absolute\",\n right: 0,\n top: 0,\n bottom: 0,\n width: 24,\n paddingRight: 4,\n borderRadius: \"0 6px 6px 0\",\n background:\n \"linear-gradient(to right, transparent, hsl(var(--accent)) 40%)\",\n }}\n >\n <IconX size={12} />\n </button>\n </div>\n ))}\n </div>\n </div>\n )}\n </>\n );\n })()\n : null}\n\n {/* Chat content with optional overlay */}\n <div className=\"relative flex-1 flex flex-col min-h-0\">\n {renderOverlay ? renderOverlay(headerProps) : null}\n\n {/* History popover — rendered inside relative container so positioning works */}\n {showHistory && (\n <HistoryPopover\n threads={threads}\n openTabIds={new Set(openTabIds)}\n activeThreadId={activeThreadId}\n currentScope={scope}\n hasMoreThreads={hasMoreThreads}\n isLoadingMoreThreads={isLoadingMoreThreads}\n loadError={threadsLoadError}\n onSelect={openFromHistory}\n onClose={() => setShowHistory(false)}\n onLoadMore={loadMoreThreads}\n onSearch={searchThreads}\n />\n )}\n\n {/* Help popover — shown by /help slash command */}\n {helpVisible && <HelpPopover onClose={() => setHelpVisible(false)} />}\n\n {/* Render tabs that have been activated at least once, hide inactive ones to preserve state.\n Sub-agent tabs are only mounted when first focused — prevents stale restore from running\n while the component is display:none before the user switches to it. */}\n {[...new Set(visibleOpenTabIds)]\n .filter(\n (tabId) =>\n tabId === activeThreadId || mountedTabsRef.current.has(tabId),\n )\n .map((tabId) => {\n const modelSelection = resolveThreadModelSelection(tabId);\n const tabThread = threads.find((thread) => thread.id === tabId);\n const tabScope =\n tabThread?.scope ??\n (tabId === activeThreadId ? activeThreadScope : null);\n const tabDynamicSuggestions =\n tabId === activeThreadId && !contentHidden\n ? props.dynamicSuggestions\n : false;\n const scopeComposerSlot =\n showScopeBadge && tabId === activeThreadId && !contentHidden ? (\n tabScope && activeThreadId ? (\n <ScopeBadge\n scope={tabScope}\n currentScope={scope}\n onDetach={handleDetachActiveThread}\n otherScopedThreads={otherScopedThreads}\n activeThreadId={activeThreadId}\n openTabIds={new Set(openTabIds)}\n onSelectThread={openFromHistory}\n />\n ) : detachConfirmType ? (\n <DetachConfirmationBanner />\n ) : null\n ) : null;\n const composerSlot =\n scopeComposerSlot || props.composerSlot ? (\n <>\n {props.composerSlot}\n {scopeComposerSlot}\n </>\n ) : undefined;\n return (\n <div\n key={tabId}\n className=\"flex-1 min-h-0 flex-col\"\n style={{\n display:\n contentHidden || tabId !== activeThreadId ? \"none\" : \"flex\",\n }}\n >\n <KeepTabOpenNotice\n threadId={tabId}\n enabled={tabId === activeThreadId}\n apiUrl={apiUrl}\n />\n <RunStuckBanner\n threadId={tabId}\n enabled={tabId === activeThreadId}\n apiUrl={apiUrl}\n autoRetry\n autoRetryOwnerId={browserTabId}\n hasInFlightWork={() =>\n chatRefs.current.get(tabId)?.hasInFlightWork() ?? false\n }\n onRetry={() => {\n const handle = chatRefs.current.get(tabId);\n handle?.sendRecoveryMessage(\n \"Continue from where you left off and finish my last request. Do not repeat completed work.\",\n \"continue\",\n );\n }}\n />\n <AssistantChat\n {...props}\n dynamicSuggestions={tabDynamicSuggestions}\n emptyStateText={\n tabScope?.label && tabId === activeThreadId\n ? `Ask about ${tabScope.label}`\n : props.emptyStateText\n }\n ref={(handle) => {\n if (handle) {\n chatRefs.current.set(tabId, handle);\n } else {\n chatRefs.current.delete(tabId);\n }\n }}\n threadId={tabId}\n tabId={tabId}\n browserTabId={browserTabId}\n contextScope={tabScope}\n isActiveComposer={tabId === activeThreadId}\n apiUrl={apiUrl}\n isNewThread={\n newThreadIds.current.has(tabId) || isNewThread(tabId)\n }\n onMessageCountChange={(count) =>\n setMessageCounts((prev) =>\n prev[tabId] === count\n ? prev\n : { ...prev, [tabId]: count },\n )\n }\n onSaveThread={handleSaveThread}\n onGenerateTitle={handleGenerateTitle}\n onSlashCommand={handleSlashCommand}\n selectedModel={modelSelection?.model}\n selectedEngine={modelSelection?.engine}\n selectedEffort={\n modelSelection?.effort ?? DEFAULT_REASONING_EFFORT\n }\n composerSlot={composerSlot}\n defaultModel={defaultModel}\n availableModels={availableModels}\n onModelChange={handleModelChange}\n onEffortChange={handleEffortChange}\n onForkChat={() => handleForkChat(tabId)}\n // Sub-agent tabs are read-only: sending a new message from the\n // sub-agent tab would start a fresh run on that thread and kill\n // the in-flight team chunk. Disable the composer and show a\n // hint so users know to send via the orchestrator chat instead.\n composerDisabled={Boolean(parentMap[tabId])}\n composerDisabledPlaceholder={\n parentMap[tabId]\n ? \"Send messages to the orchestrator chat — this sub-agent runs automatically\"\n : undefined\n }\n />\n </div>\n );\n })}\n </div>\n </div>\n );\n}\n"]}
|