@agent-native/core 0.4.5 → 0.6.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +15 -43
- package/dist/a2a/agent-card.d.ts.map +1 -1
- package/dist/a2a/agent-card.js +12 -1
- package/dist/a2a/agent-card.js.map +1 -1
- package/dist/a2a/client.d.ts +18 -0
- package/dist/a2a/client.d.ts.map +1 -1
- package/dist/a2a/client.js +62 -4
- package/dist/a2a/client.js.map +1 -1
- package/dist/a2a/handlers.d.ts +6 -3
- package/dist/a2a/handlers.d.ts.map +1 -1
- package/dist/a2a/handlers.js +45 -39
- package/dist/a2a/handlers.js.map +1 -1
- package/dist/a2a/index.d.ts +2 -2
- package/dist/a2a/index.d.ts.map +1 -1
- package/dist/a2a/index.js +3 -3
- package/dist/a2a/index.js.map +1 -1
- package/dist/a2a/server.d.ts +11 -2
- package/dist/a2a/server.d.ts.map +1 -1
- package/dist/a2a/server.js +99 -14
- package/dist/a2a/server.js.map +1 -1
- package/dist/a2a/task-store.d.ts +6 -6
- package/dist/a2a/task-store.d.ts.map +1 -1
- package/dist/a2a/task-store.js +102 -42
- package/dist/a2a/task-store.js.map +1 -1
- package/dist/a2a/types.d.ts +3 -0
- package/dist/a2a/types.d.ts.map +1 -1
- package/dist/action.d.ts +80 -0
- package/dist/action.d.ts.map +1 -0
- package/dist/action.js +232 -0
- package/dist/action.js.map +1 -0
- package/dist/agent/engine/ai-sdk-engine.d.ts +24 -0
- package/dist/agent/engine/ai-sdk-engine.d.ts.map +1 -0
- package/dist/agent/engine/ai-sdk-engine.js +302 -0
- package/dist/agent/engine/ai-sdk-engine.js.map +1 -0
- package/dist/agent/engine/anthropic-engine.d.ts +24 -0
- package/dist/agent/engine/anthropic-engine.d.ts.map +1 -0
- package/dist/agent/engine/anthropic-engine.js +169 -0
- package/dist/agent/engine/anthropic-engine.js.map +1 -0
- package/dist/agent/engine/builtin.d.ts +12 -0
- package/dist/agent/engine/builtin.d.ts.map +1 -0
- package/dist/agent/engine/builtin.js +72 -0
- package/dist/agent/engine/builtin.js.map +1 -0
- package/dist/agent/engine/index.d.ts +9 -0
- package/dist/agent/engine/index.d.ts.map +1 -0
- package/dist/agent/engine/index.js +8 -0
- package/dist/agent/engine/index.js.map +1 -0
- package/dist/agent/engine/registry.d.ts +61 -0
- package/dist/agent/engine/registry.d.ts.map +1 -0
- package/dist/agent/engine/registry.js +101 -0
- package/dist/agent/engine/registry.js.map +1 -0
- package/dist/agent/engine/translate-ai-sdk.d.ts +20 -0
- package/dist/agent/engine/translate-ai-sdk.d.ts.map +1 -0
- package/dist/agent/engine/translate-ai-sdk.js +174 -0
- package/dist/agent/engine/translate-ai-sdk.js.map +1 -0
- package/dist/agent/engine/translate-anthropic.d.ts +23 -0
- package/dist/agent/engine/translate-anthropic.d.ts.map +1 -0
- package/dist/agent/engine/translate-anthropic.js +140 -0
- package/dist/agent/engine/translate-anthropic.js.map +1 -0
- package/dist/agent/engine/types.d.ts +168 -0
- package/dist/agent/engine/types.d.ts.map +1 -0
- package/dist/agent/engine/types.js +13 -0
- package/dist/agent/engine/types.js.map +1 -0
- package/dist/agent/index.d.ts +2 -2
- package/dist/agent/index.d.ts.map +1 -1
- package/dist/agent/index.js.map +1 -1
- package/dist/agent/production-agent.d.ts +69 -7
- package/dist/agent/production-agent.d.ts.map +1 -1
- package/dist/agent/production-agent.js +480 -127
- package/dist/agent/production-agent.js.map +1 -1
- package/dist/agent/run-manager.d.ts +43 -0
- package/dist/agent/run-manager.d.ts.map +1 -0
- package/dist/agent/run-manager.js +364 -0
- package/dist/agent/run-manager.js.map +1 -0
- package/dist/agent/run-store.d.ts +26 -0
- package/dist/agent/run-store.d.ts.map +1 -0
- package/dist/agent/run-store.js +145 -0
- package/dist/agent/run-store.js.map +1 -0
- package/dist/agent/thread-data-builder.d.ts +31 -0
- package/dist/agent/thread-data-builder.d.ts.map +1 -0
- package/dist/agent/thread-data-builder.js +91 -0
- package/dist/agent/thread-data-builder.js.map +1 -0
- package/dist/agent/types.d.ts +73 -1
- package/dist/agent/types.d.ts.map +1 -1
- package/dist/application-state/emitter.d.ts +3 -2
- package/dist/application-state/emitter.d.ts.map +1 -1
- package/dist/application-state/emitter.js +14 -4
- package/dist/application-state/emitter.js.map +1 -1
- package/dist/application-state/handlers.d.ts +8 -8
- package/dist/application-state/handlers.d.ts.map +1 -1
- package/dist/application-state/handlers.js +15 -17
- package/dist/application-state/handlers.js.map +1 -1
- package/dist/application-state/script-helpers.d.ts +1 -1
- package/dist/application-state/script-helpers.d.ts.map +1 -1
- package/dist/application-state/script-helpers.js +56 -8
- package/dist/application-state/script-helpers.js.map +1 -1
- package/dist/application-state/store.d.ts +4 -3
- package/dist/application-state/store.d.ts.map +1 -1
- package/dist/application-state/store.js +31 -59
- package/dist/application-state/store.js.map +1 -1
- package/dist/chat-threads/emitter.d.ts +9 -0
- package/dist/chat-threads/emitter.d.ts.map +1 -0
- package/dist/chat-threads/emitter.js +14 -0
- package/dist/chat-threads/emitter.js.map +1 -0
- package/dist/chat-threads/store.d.ts +42 -0
- package/dist/chat-threads/store.d.ts.map +1 -0
- package/dist/chat-threads/store.js +156 -0
- package/dist/chat-threads/store.js.map +1 -0
- package/dist/cli/create.d.ts +8 -2
- package/dist/cli/create.d.ts.map +1 -1
- package/dist/cli/create.js +288 -47
- package/dist/cli/create.js.map +1 -1
- package/dist/cli/index.js +49 -9
- package/dist/cli/index.js.map +1 -1
- package/dist/cli/setup-agents.d.ts +11 -0
- package/dist/cli/setup-agents.d.ts.map +1 -0
- package/dist/cli/setup-agents.js +123 -0
- package/dist/cli/setup-agents.js.map +1 -0
- package/dist/client/AgentPanel.d.ts +13 -2
- package/dist/client/AgentPanel.d.ts.map +1 -1
- package/dist/client/AgentPanel.js +771 -38
- package/dist/client/AgentPanel.js.map +1 -1
- package/dist/client/AgentTaskCard.d.ts +12 -0
- package/dist/client/AgentTaskCard.d.ts.map +1 -0
- package/dist/client/AgentTaskCard.js +146 -0
- package/dist/client/AgentTaskCard.js.map +1 -0
- package/dist/client/AssistantChat.d.ts +36 -3
- package/dist/client/AssistantChat.d.ts.map +1 -1
- package/dist/client/AssistantChat.js +838 -86
- package/dist/client/AssistantChat.js.map +1 -1
- package/dist/client/ClientOnly.d.ts +14 -0
- package/dist/client/ClientOnly.d.ts.map +1 -0
- package/dist/client/ClientOnly.js +17 -0
- package/dist/client/ClientOnly.js.map +1 -0
- package/dist/client/CommandMenu.d.ts +71 -0
- package/dist/client/CommandMenu.d.ts.map +1 -0
- package/dist/client/CommandMenu.js +257 -0
- package/dist/client/CommandMenu.js.map +1 -0
- package/dist/client/DefaultSpinner.d.ts +7 -0
- package/dist/client/DefaultSpinner.d.ts.map +1 -0
- package/dist/client/DefaultSpinner.js +28 -0
- package/dist/client/DefaultSpinner.js.map +1 -0
- package/dist/client/MultiTabAssistantChat.d.ts +40 -2
- package/dist/client/MultiTabAssistantChat.d.ts.map +1 -1
- package/dist/client/MultiTabAssistantChat.js +630 -59
- package/dist/client/MultiTabAssistantChat.js.map +1 -1
- package/dist/client/PoweredByBadge.d.ts.map +1 -1
- package/dist/client/PoweredByBadge.js +4 -3
- package/dist/client/PoweredByBadge.js.map +1 -1
- package/dist/client/Turnstile.d.ts.map +1 -1
- package/dist/client/Turnstile.js +2 -3
- package/dist/client/Turnstile.js.map +1 -1
- package/dist/client/active-run-state.d.ts +10 -0
- package/dist/client/active-run-state.d.ts.map +1 -0
- package/dist/client/active-run-state.js +32 -0
- package/dist/client/active-run-state.js.map +1 -0
- package/dist/client/agent-chat-adapter.d.ts +2 -1
- package/dist/client/agent-chat-adapter.d.ts.map +1 -1
- package/dist/client/agent-chat-adapter.js +145 -130
- package/dist/client/agent-chat-adapter.js.map +1 -1
- package/dist/client/agent-chat.d.ts +14 -1
- package/dist/client/agent-chat.d.ts.map +1 -1
- package/dist/client/agent-chat.js +6 -4
- package/dist/client/agent-chat.js.map +1 -1
- package/dist/client/components/ApiKeySettings.d.ts +2 -2
- package/dist/client/components/ApiKeySettings.js +4 -4
- package/dist/client/components/ApiKeySettings.js.map +1 -1
- package/dist/client/components/CodeAgentIndicator.d.ts +14 -0
- package/dist/client/components/CodeAgentIndicator.d.ts.map +1 -0
- package/dist/client/components/CodeAgentIndicator.js +29 -0
- package/dist/client/components/CodeAgentIndicator.js.map +1 -0
- package/dist/client/components/CodeRequiredDialog.d.ts.map +1 -1
- package/dist/client/components/CodeRequiredDialog.js +4 -3
- package/dist/client/components/CodeRequiredDialog.js.map +1 -1
- package/dist/client/composer/MentionPopover.d.ts +29 -0
- package/dist/client/composer/MentionPopover.d.ts.map +1 -0
- package/dist/client/composer/MentionPopover.js +160 -0
- package/dist/client/composer/MentionPopover.js.map +1 -0
- package/dist/client/composer/TiptapComposer.d.ts +26 -0
- package/dist/client/composer/TiptapComposer.d.ts.map +1 -0
- package/dist/client/composer/TiptapComposer.js +545 -0
- package/dist/client/composer/TiptapComposer.js.map +1 -0
- package/dist/client/composer/extensions/FileReference.d.ts +3 -0
- package/dist/client/composer/extensions/FileReference.d.ts.map +1 -0
- package/dist/client/composer/extensions/FileReference.js +36 -0
- package/dist/client/composer/extensions/FileReference.js.map +1 -0
- package/dist/client/composer/extensions/MentionReference.d.ts +3 -0
- package/dist/client/composer/extensions/MentionReference.d.ts.map +1 -0
- package/dist/client/composer/extensions/MentionReference.js +63 -0
- package/dist/client/composer/extensions/MentionReference.js.map +1 -0
- package/dist/client/composer/extensions/SkillReference.d.ts +3 -0
- package/dist/client/composer/extensions/SkillReference.d.ts.map +1 -0
- package/dist/client/composer/extensions/SkillReference.js +40 -0
- package/dist/client/composer/extensions/SkillReference.js.map +1 -0
- package/dist/client/composer/index.d.ts +8 -0
- package/dist/client/composer/index.d.ts.map +1 -0
- package/dist/client/composer/index.js +7 -0
- package/dist/client/composer/index.js.map +1 -0
- package/dist/client/composer/types.d.ts +37 -0
- package/dist/client/composer/types.d.ts.map +1 -0
- package/dist/client/composer/types.js +2 -0
- package/dist/client/composer/types.js.map +1 -0
- package/dist/client/composer/use-file-search.d.ts +6 -0
- package/dist/client/composer/use-file-search.d.ts.map +1 -0
- package/dist/client/composer/use-file-search.js +40 -0
- package/dist/client/composer/use-file-search.js.map +1 -0
- package/dist/client/composer/use-mention-search.d.ts +6 -0
- package/dist/client/composer/use-mention-search.d.ts.map +1 -0
- package/dist/client/composer/use-mention-search.js +72 -0
- package/dist/client/composer/use-mention-search.js.map +1 -0
- package/dist/client/composer/use-skills.d.ts +7 -0
- package/dist/client/composer/use-skills.d.ts.map +1 -0
- package/dist/client/composer/use-skills.js +38 -0
- package/dist/client/composer/use-skills.js.map +1 -0
- package/dist/client/frame-protocol.d.ts +54 -0
- package/dist/client/frame-protocol.d.ts.map +1 -0
- package/dist/client/frame-protocol.js +9 -0
- package/dist/client/frame-protocol.js.map +1 -0
- package/dist/client/frame.d.ts +56 -0
- package/dist/client/frame.d.ts.map +1 -0
- package/dist/client/{harness.js → frame.js} +49 -26
- package/dist/client/frame.js.map +1 -0
- package/dist/client/index.d.ts +15 -6
- package/dist/client/index.d.ts.map +1 -1
- package/dist/client/index.js +13 -5
- package/dist/client/index.js.map +1 -1
- package/dist/client/integrations/IntegrationCard.d.ts +6 -0
- package/dist/client/integrations/IntegrationCard.d.ts.map +1 -0
- package/dist/client/integrations/IntegrationCard.js +45 -0
- package/dist/client/integrations/IntegrationCard.js.map +1 -0
- package/dist/client/integrations/IntegrationsPanel.d.ts +2 -0
- package/dist/client/integrations/IntegrationsPanel.d.ts.map +1 -0
- package/dist/client/integrations/IntegrationsPanel.js +149 -0
- package/dist/client/integrations/IntegrationsPanel.js.map +1 -0
- package/dist/client/integrations/index.d.ts +4 -0
- package/dist/client/integrations/index.d.ts.map +1 -0
- package/dist/client/integrations/index.js +3 -0
- package/dist/client/integrations/index.js.map +1 -0
- package/dist/client/integrations/useIntegrationStatus.d.ts +15 -0
- package/dist/client/integrations/useIntegrationStatus.d.ts.map +1 -0
- package/dist/client/integrations/useIntegrationStatus.js +37 -0
- package/dist/client/integrations/useIntegrationStatus.js.map +1 -0
- package/dist/client/org/InvitationBanner.d.ts +9 -0
- package/dist/client/org/InvitationBanner.d.ts.map +1 -0
- package/dist/client/org/InvitationBanner.js +17 -0
- package/dist/client/org/InvitationBanner.js.map +1 -0
- package/dist/client/org/OrgSwitcher.d.ts +14 -0
- package/dist/client/org/OrgSwitcher.d.ts.map +1 -0
- package/dist/client/org/OrgSwitcher.js +51 -0
- package/dist/client/org/OrgSwitcher.js.map +1 -0
- package/dist/client/org/TeamPage.d.ts +23 -0
- package/dist/client/org/TeamPage.d.ts.map +1 -0
- package/dist/client/org/TeamPage.js +145 -0
- package/dist/client/org/TeamPage.js.map +1 -0
- package/dist/client/org/hooks.d.ts +14 -0
- package/dist/client/org/hooks.d.ts.map +1 -0
- package/dist/client/org/hooks.js +101 -0
- package/dist/client/org/hooks.js.map +1 -0
- package/dist/client/org/index.d.ts +6 -0
- package/dist/client/org/index.d.ts.map +1 -0
- package/dist/client/org/index.js +6 -0
- package/dist/client/org/index.js.map +1 -0
- package/dist/client/resources/ResourceEditor.d.ts +14 -0
- package/dist/client/resources/ResourceEditor.d.ts.map +1 -0
- package/dist/client/resources/ResourceEditor.js +932 -0
- package/dist/client/resources/ResourceEditor.js.map +1 -0
- package/dist/client/resources/ResourceTree.d.ts +17 -0
- package/dist/client/resources/ResourceTree.d.ts.map +1 -0
- package/dist/client/resources/ResourceTree.js +137 -0
- package/dist/client/resources/ResourceTree.js.map +1 -0
- package/dist/client/resources/ResourcesPanel.d.ts +2 -0
- package/dist/client/resources/ResourcesPanel.d.ts.map +1 -0
- package/dist/client/resources/ResourcesPanel.js +366 -0
- package/dist/client/resources/ResourcesPanel.js.map +1 -0
- package/dist/client/resources/index.d.ts +5 -0
- package/dist/client/resources/index.d.ts.map +1 -0
- package/dist/client/resources/index.js +5 -0
- package/dist/client/resources/index.js.map +1 -0
- package/dist/client/resources/use-resources.d.ts +55 -0
- package/dist/client/resources/use-resources.d.ts.map +1 -0
- package/dist/client/resources/use-resources.js +102 -0
- package/dist/client/resources/use-resources.js.map +1 -0
- package/dist/client/sse-event-processor.d.ts +58 -0
- package/dist/client/sse-event-processor.d.ts.map +1 -0
- package/dist/client/sse-event-processor.js +300 -0
- package/dist/client/sse-event-processor.js.map +1 -0
- package/dist/client/terminal/AgentTerminal.d.ts +5 -5
- package/dist/client/terminal/AgentTerminal.d.ts.map +1 -1
- package/dist/client/terminal/AgentTerminal.js +25 -20
- package/dist/client/terminal/AgentTerminal.js.map +1 -1
- package/dist/client/use-action.d.ts +51 -0
- package/dist/client/use-action.d.ts.map +1 -0
- package/dist/client/use-action.js +102 -0
- package/dist/client/use-action.js.map +1 -0
- package/dist/client/use-agent-chat.d.ts +1 -1
- package/dist/client/use-agent-chat.d.ts.map +1 -1
- package/dist/client/use-agent-chat.js +3 -3
- package/dist/client/use-agent-chat.js.map +1 -1
- package/dist/client/use-avatar.d.ts +15 -0
- package/dist/client/use-avatar.d.ts.map +1 -0
- package/dist/client/use-avatar.js +116 -0
- package/dist/client/use-avatar.js.map +1 -0
- package/dist/client/use-chat-threads.d.ts +36 -0
- package/dist/client/use-chat-threads.d.ts.map +1 -0
- package/dist/client/use-chat-threads.js +191 -0
- package/dist/client/use-chat-threads.js.map +1 -0
- package/dist/client/use-db-sync.d.ts +35 -0
- package/dist/client/use-db-sync.d.ts.map +1 -0
- package/dist/client/use-db-sync.js +74 -0
- package/dist/client/use-db-sync.js.map +1 -0
- package/dist/client/use-dev-mode.d.ts +4 -2
- package/dist/client/use-dev-mode.d.ts.map +1 -1
- package/dist/client/use-dev-mode.js +41 -12
- package/dist/client/use-dev-mode.js.map +1 -1
- package/dist/client/use-send-to-agent-chat.d.ts +7 -4
- package/dist/client/use-send-to-agent-chat.d.ts.map +1 -1
- package/dist/client/use-send-to-agent-chat.js +31 -10
- package/dist/client/use-send-to-agent-chat.js.map +1 -1
- package/dist/client/use-session.d.ts +1 -1
- package/dist/client/use-session.js +2 -2
- package/dist/client/use-session.js.map +1 -1
- package/dist/client/useProductionAgent.d.ts +1 -1
- package/dist/client/useProductionAgent.d.ts.map +1 -1
- package/dist/client/useProductionAgent.js +38 -3
- package/dist/client/useProductionAgent.js.map +1 -1
- package/dist/collab/awareness.d.ts +41 -0
- package/dist/collab/awareness.d.ts.map +1 -0
- package/dist/collab/awareness.js +82 -0
- package/dist/collab/awareness.js.map +1 -0
- package/dist/collab/client.d.ts +49 -0
- package/dist/collab/client.d.ts.map +1 -0
- package/dist/collab/client.js +250 -0
- package/dist/collab/client.js.map +1 -0
- package/dist/collab/emitter.d.ts +12 -0
- package/dist/collab/emitter.d.ts.map +1 -0
- package/dist/collab/emitter.js +16 -0
- package/dist/collab/emitter.js.map +1 -0
- package/dist/collab/index.d.ts +7 -0
- package/dist/collab/index.d.ts.map +1 -0
- package/dist/collab/index.js +14 -0
- package/dist/collab/index.js.map +1 -0
- package/dist/collab/routes.d.ts +69 -0
- package/dist/collab/routes.d.ts.map +1 -0
- package/dist/collab/routes.js +98 -0
- package/dist/collab/routes.js.map +1 -0
- package/dist/collab/storage.d.ts +18 -0
- package/dist/collab/storage.d.ts.map +1 -0
- package/dist/collab/storage.js +94 -0
- package/dist/collab/storage.js.map +1 -0
- package/dist/collab/text-to-yjs.d.ts +23 -0
- package/dist/collab/text-to-yjs.d.ts.map +1 -0
- package/dist/collab/text-to-yjs.js +63 -0
- package/dist/collab/text-to-yjs.js.map +1 -0
- package/dist/collab/xml-ops.d.ts +20 -0
- package/dist/collab/xml-ops.d.ts.map +1 -0
- package/dist/collab/xml-ops.js +59 -0
- package/dist/collab/xml-ops.js.map +1 -0
- package/dist/collab/ydoc-manager.d.ts +52 -0
- package/dist/collab/ydoc-manager.d.ts.map +1 -0
- package/dist/collab/ydoc-manager.js +154 -0
- package/dist/collab/ydoc-manager.js.map +1 -0
- package/dist/credentials/index.d.ts +18 -0
- package/dist/credentials/index.d.ts.map +1 -0
- package/dist/credentials/index.js +32 -0
- package/dist/credentials/index.js.map +1 -0
- package/dist/db/client.d.ts +45 -0
- package/dist/db/client.d.ts.map +1 -0
- package/dist/db/client.js +289 -0
- package/dist/db/client.js.map +1 -0
- package/dist/db/create-get-db.d.ts.map +1 -1
- package/dist/db/create-get-db.js +103 -16
- package/dist/db/create-get-db.js.map +1 -1
- package/dist/db/index.d.ts +10 -6
- package/dist/db/index.d.ts.map +1 -1
- package/dist/db/index.js +10 -4
- package/dist/db/index.js.map +1 -1
- package/dist/db/migrations.d.ts +9 -1
- package/dist/db/migrations.d.ts.map +1 -1
- package/dist/db/migrations.js +67 -41
- package/dist/db/migrations.js.map +1 -1
- package/dist/db/schema.d.ts +52 -0
- package/dist/db/schema.d.ts.map +1 -0
- package/dist/db/schema.js +72 -0
- package/dist/db/schema.js.map +1 -0
- package/dist/deploy/build.js +636 -42
- package/dist/deploy/build.js.map +1 -1
- package/dist/deploy/route-discovery.d.ts +25 -3
- package/dist/deploy/route-discovery.d.ts.map +1 -1
- package/dist/deploy/route-discovery.js +135 -24
- package/dist/deploy/route-discovery.js.map +1 -1
- package/dist/index.browser.d.ts +3 -1
- package/dist/index.browser.d.ts.map +1 -1
- package/dist/index.browser.js +5 -1
- package/dist/index.browser.js.map +1 -1
- package/dist/index.d.ts +4 -3
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +3 -2
- package/dist/index.js.map +1 -1
- package/dist/integrations/adapters/slack.d.ts +10 -0
- package/dist/integrations/adapters/slack.d.ts.map +1 -0
- package/dist/integrations/adapters/slack.js +215 -0
- package/dist/integrations/adapters/slack.js.map +1 -0
- package/dist/integrations/adapters/telegram.d.ts +12 -0
- package/dist/integrations/adapters/telegram.d.ts.map +1 -0
- package/dist/integrations/adapters/telegram.js +184 -0
- package/dist/integrations/adapters/telegram.js.map +1 -0
- package/dist/integrations/adapters/whatsapp.d.ts +14 -0
- package/dist/integrations/adapters/whatsapp.d.ts.map +1 -0
- package/dist/integrations/adapters/whatsapp.js +205 -0
- package/dist/integrations/adapters/whatsapp.js.map +1 -0
- package/dist/integrations/config-store.d.ts +24 -0
- package/dist/integrations/config-store.d.ts.map +1 -0
- package/dist/integrations/config-store.js +92 -0
- package/dist/integrations/config-store.js.map +1 -0
- package/dist/integrations/index.d.ts +8 -0
- package/dist/integrations/index.d.ts.map +1 -0
- package/dist/integrations/index.js +10 -0
- package/dist/integrations/index.js.map +1 -0
- package/dist/integrations/plugin.d.ts +20 -0
- package/dist/integrations/plugin.d.ts.map +1 -0
- package/dist/integrations/plugin.js +213 -0
- package/dist/integrations/plugin.js.map +1 -0
- package/dist/integrations/thread-mapping-store.d.ts +25 -0
- package/dist/integrations/thread-mapping-store.d.ts.map +1 -0
- package/dist/integrations/thread-mapping-store.js +95 -0
- package/dist/integrations/thread-mapping-store.js.map +1 -0
- package/dist/integrations/types.d.ts +111 -0
- package/dist/integrations/types.d.ts.map +1 -0
- package/dist/integrations/types.js +2 -0
- package/dist/integrations/types.js.map +1 -0
- package/dist/integrations/webhook-handler.d.ts +31 -0
- package/dist/integrations/webhook-handler.d.ts.map +1 -0
- package/dist/integrations/webhook-handler.js +210 -0
- package/dist/integrations/webhook-handler.js.map +1 -0
- package/dist/jobs/cron.d.ts +14 -0
- package/dist/jobs/cron.d.ts.map +1 -0
- package/dist/jobs/cron.js +100 -0
- package/dist/jobs/cron.js.map +1 -0
- package/dist/jobs/index.d.ts +4 -0
- package/dist/jobs/index.d.ts.map +1 -0
- package/dist/jobs/index.js +4 -0
- package/dist/jobs/index.js.map +1 -0
- package/dist/jobs/scheduler.d.ts +29 -0
- package/dist/jobs/scheduler.d.ts.map +1 -0
- package/dist/jobs/scheduler.js +205 -0
- package/dist/jobs/scheduler.js.map +1 -0
- package/dist/jobs/tools.d.ts +3 -0
- package/dist/jobs/tools.d.ts.map +1 -0
- package/dist/jobs/tools.js +192 -0
- package/dist/jobs/tools.js.map +1 -0
- package/dist/mcp/index.d.ts +3 -0
- package/dist/mcp/index.d.ts.map +1 -0
- package/dist/mcp/index.js +2 -0
- package/dist/mcp/index.js.map +1 -0
- package/dist/mcp/server.d.ts +26 -0
- package/dist/mcp/server.d.ts.map +1 -0
- package/dist/mcp/server.js +182 -0
- package/dist/mcp/server.js.map +1 -0
- package/dist/oauth-tokens/index.d.ts +1 -1
- package/dist/oauth-tokens/index.d.ts.map +1 -1
- package/dist/oauth-tokens/index.js +1 -1
- package/dist/oauth-tokens/index.js.map +1 -1
- package/dist/oauth-tokens/store.d.ts +5 -0
- package/dist/oauth-tokens/store.d.ts.map +1 -1
- package/dist/oauth-tokens/store.js +67 -82
- package/dist/oauth-tokens/store.js.map +1 -1
- package/dist/org/context.d.ts +11 -0
- package/dist/org/context.d.ts.map +1 -0
- package/dist/org/context.js +61 -0
- package/dist/org/context.js.map +1 -0
- package/dist/org/handlers.d.ts +66 -0
- package/dist/org/handlers.d.ts.map +1 -0
- package/dist/org/handlers.js +306 -0
- package/dist/org/handlers.js.map +1 -0
- package/dist/org/index.d.ts +7 -0
- package/dist/org/index.d.ts.map +1 -0
- package/dist/org/index.js +11 -0
- package/dist/org/index.js.map +1 -0
- package/dist/org/migrations.d.ts +10 -0
- package/dist/org/migrations.d.ts.map +1 -0
- package/dist/org/migrations.js +39 -0
- package/dist/org/migrations.js.map +1 -0
- package/dist/org/plugin.d.ts +26 -0
- package/dist/org/plugin.d.ts.map +1 -0
- package/dist/org/plugin.js +94 -0
- package/dist/org/plugin.js.map +1 -0
- package/dist/org/schema.d.ts +301 -0
- package/dist/org/schema.d.ts.map +1 -0
- package/dist/org/schema.js +23 -0
- package/dist/org/schema.js.map +1 -0
- package/dist/org/types.d.ts +42 -0
- package/dist/org/types.d.ts.map +1 -0
- package/dist/org/types.js +5 -0
- package/dist/org/types.js.map +1 -0
- package/dist/resources/emitter.d.ts +13 -0
- package/dist/resources/emitter.d.ts.map +1 -0
- package/dist/resources/emitter.js +32 -0
- package/dist/resources/emitter.js.map +1 -0
- package/dist/resources/handlers.d.ts +54 -0
- package/dist/resources/handlers.d.ts.map +1 -0
- package/dist/resources/handlers.js +292 -0
- package/dist/resources/handlers.js.map +1 -0
- package/dist/resources/index.d.ts +5 -0
- package/dist/resources/index.d.ts.map +1 -0
- package/dist/resources/index.js +5 -0
- package/dist/resources/index.js.map +1 -0
- package/dist/resources/script-helpers.d.ts +24 -0
- package/dist/resources/script-helpers.d.ts.map +1 -0
- package/dist/resources/script-helpers.js +36 -0
- package/dist/resources/script-helpers.js.map +1 -0
- package/dist/resources/store.d.ts +40 -0
- package/dist/resources/store.d.ts.map +1 -0
- package/dist/resources/store.js +497 -0
- package/dist/resources/store.js.map +1 -0
- package/dist/scripts/agent-engines/list-agent-engines.d.ts +7 -0
- package/dist/scripts/agent-engines/list-agent-engines.d.ts.map +1 -0
- package/dist/scripts/agent-engines/list-agent-engines.js +42 -0
- package/dist/scripts/agent-engines/list-agent-engines.js.map +1 -0
- package/dist/scripts/agent-engines/set-agent-engine.d.ts +7 -0
- package/dist/scripts/agent-engines/set-agent-engine.d.ts.map +1 -0
- package/dist/scripts/agent-engines/set-agent-engine.js +57 -0
- package/dist/scripts/agent-engines/set-agent-engine.js.map +1 -0
- package/dist/scripts/agent-engines/test-agent-engine.d.ts +7 -0
- package/dist/scripts/agent-engines/test-agent-engine.d.ts.map +1 -0
- package/dist/scripts/agent-engines/test-agent-engine.js +102 -0
- package/dist/scripts/agent-engines/test-agent-engine.js.map +1 -0
- package/dist/scripts/call-agent.d.ts +5 -0
- package/dist/scripts/call-agent.d.ts.map +1 -0
- package/dist/scripts/call-agent.js +111 -0
- package/dist/scripts/call-agent.js.map +1 -0
- package/dist/scripts/chat/index.d.ts +2 -0
- package/dist/scripts/chat/index.d.ts.map +1 -0
- package/dist/scripts/chat/index.js +5 -0
- package/dist/scripts/chat/index.js.map +1 -0
- package/dist/scripts/chat/open-chat.d.ts +11 -0
- package/dist/scripts/chat/open-chat.d.ts.map +1 -0
- package/dist/scripts/chat/open-chat.js +48 -0
- package/dist/scripts/chat/open-chat.js.map +1 -0
- package/dist/scripts/chat/search-chats.d.ts +10 -0
- package/dist/scripts/chat/search-chats.d.ts.map +1 -0
- package/dist/scripts/chat/search-chats.js +89 -0
- package/dist/scripts/chat/search-chats.js.map +1 -0
- package/dist/scripts/core-scripts.d.ts.map +1 -1
- package/dist/scripts/core-scripts.js +4 -0
- package/dist/scripts/core-scripts.js.map +1 -1
- package/dist/scripts/db/check-scoping.d.ts +14 -0
- package/dist/scripts/db/check-scoping.d.ts.map +1 -0
- package/dist/scripts/db/check-scoping.js +174 -0
- package/dist/scripts/db/check-scoping.js.map +1 -0
- package/dist/scripts/db/exec.d.ts +7 -2
- package/dist/scripts/db/exec.d.ts.map +1 -1
- package/dist/scripts/db/exec.js +143 -36
- package/dist/scripts/db/exec.js.map +1 -1
- package/dist/scripts/db/index.d.ts.map +1 -1
- package/dist/scripts/db/index.js +2 -0
- package/dist/scripts/db/index.js.map +1 -1
- package/dist/scripts/db/patch.d.ts +50 -0
- package/dist/scripts/db/patch.d.ts.map +1 -0
- package/dist/scripts/db/patch.js +392 -0
- package/dist/scripts/db/patch.js.map +1 -0
- package/dist/scripts/db/query.d.ts +7 -2
- package/dist/scripts/db/query.d.ts.map +1 -1
- package/dist/scripts/db/query.js +89 -45
- package/dist/scripts/db/query.js.map +1 -1
- package/dist/scripts/db/schema.d.ts +2 -2
- package/dist/scripts/db/schema.d.ts.map +1 -1
- package/dist/scripts/db/schema.js +145 -6
- package/dist/scripts/db/schema.js.map +1 -1
- package/dist/scripts/db/scoping.d.ts +42 -0
- package/dist/scripts/db/scoping.d.ts.map +1 -0
- package/dist/scripts/db/scoping.js +216 -0
- package/dist/scripts/db/scoping.js.map +1 -0
- package/dist/scripts/dev/index.d.ts +2 -2
- package/dist/scripts/dev/index.d.ts.map +1 -1
- package/dist/scripts/dev/index.js +65 -2
- package/dist/scripts/dev/index.js.map +1 -1
- package/dist/scripts/dev/list-files.d.ts +2 -2
- package/dist/scripts/dev/read-file.d.ts +2 -2
- package/dist/scripts/dev/read-file.js +1 -1
- package/dist/scripts/dev/read-file.js.map +1 -1
- package/dist/scripts/dev/search-files.d.ts +2 -2
- package/dist/scripts/dev/search-files.js +1 -1
- package/dist/scripts/dev/search-files.js.map +1 -1
- package/dist/scripts/dev/shell.d.ts +2 -2
- package/dist/scripts/dev/shell.js +1 -1
- package/dist/scripts/dev/shell.js.map +1 -1
- package/dist/scripts/dev/write-file.d.ts +2 -2
- package/dist/scripts/dev/write-file.js +1 -1
- package/dist/scripts/dev/write-file.js.map +1 -1
- package/dist/scripts/parse-args.d.ts +14 -0
- package/dist/scripts/parse-args.d.ts.map +1 -0
- package/dist/scripts/parse-args.js +45 -0
- package/dist/scripts/parse-args.js.map +1 -0
- package/dist/scripts/resources/delete.d.ts +10 -0
- package/dist/scripts/resources/delete.d.ts.map +1 -0
- package/dist/scripts/resources/delete.js +38 -0
- package/dist/scripts/resources/delete.js.map +1 -0
- package/dist/scripts/resources/index.d.ts +2 -0
- package/dist/scripts/resources/index.d.ts.map +1 -0
- package/dist/scripts/resources/index.js +8 -0
- package/dist/scripts/resources/index.js.map +1 -0
- package/dist/scripts/resources/list.d.ts +10 -0
- package/dist/scripts/resources/list.d.ts.map +1 -0
- package/dist/scripts/resources/list.js +57 -0
- package/dist/scripts/resources/list.js.map +1 -0
- package/dist/scripts/resources/migrate-learnings.d.ts +10 -0
- package/dist/scripts/resources/migrate-learnings.d.ts.map +1 -0
- package/dist/scripts/resources/migrate-learnings.js +23 -0
- package/dist/scripts/resources/migrate-learnings.js.map +1 -0
- package/dist/scripts/resources/read.d.ts +10 -0
- package/dist/scripts/resources/read.d.ts.map +1 -0
- package/dist/scripts/resources/read.js +59 -0
- package/dist/scripts/resources/read.js.map +1 -0
- package/dist/scripts/resources/write.d.ts +10 -0
- package/dist/scripts/resources/write.d.ts.map +1 -0
- package/dist/scripts/resources/write.js +67 -0
- package/dist/scripts/resources/write.js.map +1 -0
- package/dist/scripts/runner.d.ts +7 -7
- package/dist/scripts/runner.d.ts.map +1 -1
- package/dist/scripts/runner.js +78 -29
- package/dist/scripts/runner.js.map +1 -1
- package/dist/scripts/utils.d.ts +5 -10
- package/dist/scripts/utils.d.ts.map +1 -1
- package/dist/scripts/utils.js +7 -43
- package/dist/scripts/utils.js.map +1 -1
- package/dist/server/action-discovery.d.ts +40 -0
- package/dist/server/action-discovery.d.ts.map +1 -0
- package/dist/server/action-discovery.js +257 -0
- package/dist/server/action-discovery.js.map +1 -0
- package/dist/server/action-routes.d.ts +15 -0
- package/dist/server/action-routes.d.ts.map +1 -0
- package/dist/server/action-routes.js +105 -0
- package/dist/server/action-routes.js.map +1 -0
- package/dist/server/agent-chat-plugin.d.ts +32 -23
- package/dist/server/agent-chat-plugin.d.ts.map +1 -1
- package/dist/server/agent-chat-plugin.js +1983 -39
- package/dist/server/agent-chat-plugin.js.map +1 -1
- package/dist/server/agent-discovery.d.ts +21 -0
- package/dist/server/agent-discovery.d.ts.map +1 -0
- package/dist/server/agent-discovery.js +197 -0
- package/dist/server/agent-discovery.js.map +1 -0
- package/dist/server/agent-teams.d.ts +70 -0
- package/dist/server/agent-teams.d.ts.map +1 -0
- package/dist/server/agent-teams.js +367 -0
- package/dist/server/agent-teams.js.map +1 -0
- package/dist/server/agents-bundle.d.ts +87 -0
- package/dist/server/agents-bundle.d.ts.map +1 -0
- package/dist/server/agents-bundle.js +231 -0
- package/dist/server/agents-bundle.js.map +1 -0
- package/dist/server/auth-plugin.d.ts +5 -0
- package/dist/server/auth-plugin.d.ts.map +1 -1
- package/dist/server/auth-plugin.js +13 -3
- package/dist/server/auth-plugin.js.map +1 -1
- package/dist/server/auth.d.ts +54 -31
- package/dist/server/auth.d.ts.map +1 -1
- package/dist/server/auth.js +671 -294
- package/dist/server/auth.js.map +1 -1
- package/dist/server/better-auth-instance.d.ts +72 -0
- package/dist/server/better-auth-instance.d.ts.map +1 -0
- package/dist/server/better-auth-instance.js +144 -0
- package/dist/server/better-auth-instance.js.map +1 -0
- package/dist/server/collab-plugin.d.ts +29 -0
- package/dist/server/collab-plugin.d.ts.map +1 -0
- package/dist/server/collab-plugin.js +85 -0
- package/dist/server/collab-plugin.js.map +1 -0
- package/dist/server/core-routes-plugin.d.ts +54 -0
- package/dist/server/core-routes-plugin.d.ts.map +1 -0
- package/dist/server/core-routes-plugin.js +195 -0
- package/dist/server/core-routes-plugin.js.map +1 -0
- package/dist/server/create-server.d.ts +5 -5
- package/dist/server/create-server.d.ts.map +1 -1
- package/dist/server/create-server.js +44 -21
- package/dist/server/create-server.js.map +1 -1
- package/dist/server/framework-request-handler.d.ts +47 -0
- package/dist/server/framework-request-handler.d.ts.map +1 -0
- package/dist/server/framework-request-handler.js +168 -0
- package/dist/server/framework-request-handler.js.map +1 -0
- package/dist/server/google-auth-plugin.d.ts +4 -0
- package/dist/server/google-auth-plugin.d.ts.map +1 -1
- package/dist/server/google-auth-plugin.js +16 -15
- package/dist/server/google-auth-plugin.js.map +1 -1
- package/dist/server/google-oauth.d.ts +72 -0
- package/dist/server/google-oauth.d.ts.map +1 -0
- package/dist/server/google-oauth.js +209 -0
- package/dist/server/google-oauth.js.map +1 -0
- package/dist/server/h3-helpers.d.ts +23 -0
- package/dist/server/h3-helpers.d.ts.map +1 -0
- package/dist/server/h3-helpers.js +37 -0
- package/dist/server/h3-helpers.js.map +1 -0
- package/dist/server/index.d.ts +17 -5
- package/dist/server/index.d.ts.map +1 -1
- package/dist/server/index.js +19 -4
- package/dist/server/index.js.map +1 -1
- package/dist/server/local-migration.d.ts +32 -0
- package/dist/server/local-migration.d.ts.map +1 -0
- package/dist/server/local-migration.js +205 -0
- package/dist/server/local-migration.js.map +1 -0
- package/dist/server/oauth-helpers.d.ts +14 -0
- package/dist/server/oauth-helpers.d.ts.map +1 -0
- package/dist/server/oauth-helpers.js +23 -0
- package/dist/server/oauth-helpers.js.map +1 -0
- package/dist/server/onboarding-html.d.ts +24 -0
- package/dist/server/onboarding-html.d.ts.map +1 -0
- package/dist/server/onboarding-html.js +347 -0
- package/dist/server/onboarding-html.js.map +1 -0
- package/dist/server/poll.d.ts +45 -0
- package/dist/server/poll.d.ts.map +1 -0
- package/dist/server/poll.js +96 -0
- package/dist/server/poll.js.map +1 -0
- package/dist/server/resources-plugin.d.ts +27 -0
- package/dist/server/resources-plugin.d.ts.map +1 -0
- package/dist/server/resources-plugin.js +75 -0
- package/dist/server/resources-plugin.js.map +1 -0
- package/dist/server/schema-prompt.d.ts +16 -0
- package/dist/server/schema-prompt.d.ts.map +1 -0
- package/dist/server/schema-prompt.js +275 -0
- package/dist/server/schema-prompt.js.map +1 -0
- package/dist/server/script-discovery.d.ts +6 -0
- package/dist/server/script-discovery.d.ts.map +1 -0
- package/dist/server/script-discovery.js +6 -0
- package/dist/server/script-discovery.js.map +1 -0
- package/dist/server/sse.d.ts +4 -21
- package/dist/server/sse.d.ts.map +1 -1
- package/dist/server/sse.js +2 -30
- package/dist/server/sse.js.map +1 -1
- package/dist/server/ssr-handler.d.ts +6 -0
- package/dist/server/ssr-handler.d.ts.map +1 -0
- package/dist/server/ssr-handler.js +55 -0
- package/dist/server/ssr-handler.js.map +1 -0
- package/dist/settings/handlers.d.ts +6 -6
- package/dist/settings/handlers.d.ts.map +1 -1
- package/dist/settings/handlers.js +9 -6
- package/dist/settings/handlers.js.map +1 -1
- package/dist/settings/index.d.ts +2 -1
- package/dist/settings/index.d.ts.map +1 -1
- package/dist/settings/index.js +2 -0
- package/dist/settings/index.js.map +1 -1
- package/dist/settings/org-settings.d.ts +22 -0
- package/dist/settings/org-settings.d.ts.map +1 -0
- package/dist/settings/org-settings.js +45 -0
- package/dist/settings/org-settings.js.map +1 -0
- package/dist/settings/store.d.ts +6 -2
- package/dist/settings/store.d.ts.map +1 -1
- package/dist/settings/store.js +26 -63
- package/dist/settings/store.js.map +1 -1
- package/dist/settings/user-settings.d.ts +3 -2
- package/dist/settings/user-settings.d.ts.map +1 -1
- package/dist/settings/user-settings.js +5 -5
- package/dist/settings/user-settings.js.map +1 -1
- package/dist/shared/agent-chat.d.ts +5 -5
- package/dist/shared/agent-chat.d.ts.map +1 -1
- package/dist/shared/agent-chat.js +8 -8
- package/dist/shared/agent-chat.js.map +1 -1
- package/dist/shared/agent-env.d.ts +1 -1
- package/dist/shared/agent-env.js +1 -1
- package/dist/shared/runtime.d.ts +14 -0
- package/dist/shared/runtime.d.ts.map +1 -0
- package/dist/shared/runtime.js +25 -0
- package/dist/shared/runtime.js.map +1 -0
- package/dist/tailwind.preset.d.ts +7 -6
- package/dist/tailwind.preset.d.ts.map +1 -1
- package/dist/tailwind.preset.js +18 -1
- package/dist/tailwind.preset.js.map +1 -1
- package/dist/templates/default/.agents/skills/actions/SKILL.md +142 -0
- package/dist/templates/default/.agents/skills/agent-engines/SKILL.md +127 -0
- package/dist/templates/default/.agents/skills/capture-learnings/SKILL.md +50 -0
- package/dist/templates/default/.agents/skills/create-skill/SKILL.md +167 -0
- package/dist/templates/default/.agents/skills/delegate-to-agent/SKILL.md +90 -0
- package/dist/templates/default/.agents/skills/frontend-design/SKILL.md +69 -0
- package/dist/templates/default/.agents/skills/real-time-collab/SKILL.md +183 -0
- package/dist/templates/default/.agents/skills/real-time-sync/SKILL.md +112 -0
- package/dist/templates/default/.agents/skills/security/SKILL.md +108 -0
- package/dist/templates/default/.agents/skills/self-modifying-code/SKILL.md +79 -0
- package/{src/templates/default/.agents/skills/files-as-database → dist/templates/default/.agents/skills/storing-data}/SKILL.md +2 -2
- package/dist/templates/default/.claude/settings.json +100 -0
- package/dist/templates/default/.env.example +5 -0
- package/dist/templates/default/.prettierrc +5 -0
- package/dist/templates/default/AGENTS.md +110 -0
- package/dist/templates/default/DEVELOPING.md +117 -0
- package/dist/templates/default/_gitignore +37 -0
- package/{src/templates/default/scripts → dist/templates/default/actions}/hello.ts +1 -1
- package/dist/templates/default/actions/navigate.ts +53 -0
- package/dist/templates/default/actions/view-screen.ts +39 -0
- package/dist/templates/default/app/entry.client.tsx +4 -0
- package/dist/templates/default/app/entry.server.tsx +56 -0
- package/dist/templates/default/app/global.css +95 -0
- package/dist/templates/default/app/lib/utils.ts +1 -0
- package/dist/templates/default/app/root.tsx +107 -0
- package/dist/templates/default/app/routes/_index.tsx +62 -0
- package/dist/templates/default/app/routes.ts +4 -0
- package/dist/templates/default/app/vite-env.d.ts +6 -0
- package/dist/templates/default/components.json +20 -0
- package/dist/templates/default/data/.gitkeep +0 -0
- package/dist/templates/default/data/sync-config.json +1 -0
- package/dist/templates/default/learnings.defaults.md +5 -0
- package/dist/templates/default/learnings.md +0 -0
- package/dist/templates/default/package.json +46 -0
- package/dist/templates/default/postcss.config.js +6 -0
- package/dist/templates/default/public/icon-180.svg +4 -0
- package/dist/templates/default/public/icon-192.svg +4 -0
- package/dist/templates/default/public/icon-512.svg +4 -0
- package/dist/templates/default/public/manifest.json +13 -0
- package/dist/templates/default/react-router.config.ts +6 -0
- package/dist/templates/default/server/middleware/auth.ts +15 -0
- package/dist/templates/default/server/plugins/.gitkeep +0 -0
- package/dist/templates/default/server/routes/[...page].get.ts +5 -0
- package/dist/templates/default/server/routes/api/hello.get.ts +5 -0
- package/dist/templates/default/shared/api.ts +6 -0
- package/dist/templates/default/ssr-entry.ts +20 -0
- package/dist/templates/default/tailwind.config.ts +7 -0
- package/dist/templates/default/tsconfig.json +11 -0
- package/dist/templates/default/vite.config.ts +6 -0
- package/dist/templates/templates/default/.agents/skills/actions/SKILL.md +142 -0
- package/dist/templates/templates/default/.agents/skills/agent-engines/SKILL.md +127 -0
- package/dist/templates/templates/default/.agents/skills/capture-learnings/SKILL.md +50 -0
- package/dist/templates/templates/default/.agents/skills/create-skill/SKILL.md +167 -0
- package/dist/templates/templates/default/.agents/skills/delegate-to-agent/SKILL.md +90 -0
- package/dist/templates/templates/default/.agents/skills/frontend-design/SKILL.md +69 -0
- package/dist/templates/templates/default/.agents/skills/real-time-collab/SKILL.md +183 -0
- package/dist/templates/templates/default/.agents/skills/real-time-sync/SKILL.md +112 -0
- package/dist/templates/templates/default/.agents/skills/security/SKILL.md +108 -0
- package/dist/templates/templates/default/.agents/skills/self-modifying-code/SKILL.md +79 -0
- package/dist/templates/templates/default/.agents/skills/storing-data/SKILL.md +110 -0
- package/dist/templates/templates/default/.claude/settings.json +100 -0
- package/dist/templates/templates/default/.env.example +5 -0
- package/dist/templates/templates/default/.ignore +0 -0
- package/dist/templates/templates/default/.prettierrc +5 -0
- package/dist/templates/templates/default/AGENTS.md +110 -0
- package/dist/templates/templates/default/DEVELOPING.md +117 -0
- package/dist/templates/templates/default/_gitignore +37 -0
- package/dist/templates/templates/default/actions/hello.ts +20 -0
- package/dist/templates/templates/default/actions/navigate.ts +53 -0
- package/dist/templates/templates/default/actions/run.ts +2 -0
- package/dist/templates/templates/default/actions/view-screen.ts +39 -0
- package/dist/templates/templates/default/app/entry.client.tsx +4 -0
- package/dist/templates/templates/default/app/entry.server.tsx +56 -0
- package/dist/templates/templates/default/app/global.css +95 -0
- package/dist/templates/templates/default/app/lib/utils.ts +1 -0
- package/dist/templates/templates/default/app/root.tsx +107 -0
- package/dist/templates/templates/default/app/routes/_index.tsx +62 -0
- package/dist/templates/templates/default/app/routes.ts +4 -0
- package/dist/templates/templates/default/app/vite-env.d.ts +6 -0
- package/dist/templates/templates/default/components.json +20 -0
- package/dist/templates/templates/default/data/.gitkeep +0 -0
- package/dist/templates/templates/default/data/sync-config.json +1 -0
- package/dist/templates/templates/default/learnings.defaults.md +5 -0
- package/dist/templates/templates/default/learnings.md +0 -0
- package/dist/templates/templates/default/package.json +46 -0
- package/dist/templates/templates/default/postcss.config.js +6 -0
- package/dist/templates/templates/default/public/icon-180.svg +4 -0
- package/dist/templates/templates/default/public/icon-192.svg +4 -0
- package/dist/templates/templates/default/public/icon-512.svg +4 -0
- package/dist/templates/templates/default/public/manifest.json +13 -0
- package/dist/templates/templates/default/react-router.config.ts +6 -0
- package/dist/templates/templates/default/server/middleware/auth.ts +15 -0
- package/dist/templates/templates/default/server/plugins/.gitkeep +0 -0
- package/dist/templates/templates/default/server/routes/[...page].get.ts +5 -0
- package/dist/templates/templates/default/server/routes/api/hello.get.ts +5 -0
- package/dist/templates/templates/default/shared/api.ts +6 -0
- package/dist/templates/templates/default/ssr-entry.ts +20 -0
- package/dist/templates/templates/default/tailwind.config.ts +7 -0
- package/dist/templates/templates/default/tsconfig.json +11 -0
- package/dist/templates/templates/default/vite.config.ts +6 -0
- package/dist/terminal/cli-registry.d.ts +2 -2
- package/dist/terminal/cli-registry.d.ts.map +1 -1
- package/dist/terminal/cli-registry.js +8 -8
- package/dist/terminal/cli-registry.js.map +1 -1
- package/dist/terminal/pty-server.d.ts +1 -1
- package/dist/terminal/pty-server.d.ts.map +1 -1
- package/dist/terminal/pty-server.js +94 -18
- package/dist/terminal/pty-server.js.map +1 -1
- package/dist/terminal/terminal-plugin.d.ts +1 -10
- package/dist/terminal/terminal-plugin.d.ts.map +1 -1
- package/dist/terminal/terminal-plugin.js +77 -28
- package/dist/terminal/terminal-plugin.js.map +1 -1
- package/dist/usage/store.d.ts +29 -0
- package/dist/usage/store.d.ts.map +1 -0
- package/dist/usage/store.js +102 -0
- package/dist/usage/store.js.map +1 -0
- package/dist/vite/action-types-plugin.d.ts +13 -0
- package/dist/vite/action-types-plugin.d.ts.map +1 -0
- package/dist/vite/action-types-plugin.js +132 -0
- package/dist/vite/action-types-plugin.js.map +1 -0
- package/dist/vite/agents-bundle-plugin.d.ts +3 -0
- package/dist/vite/agents-bundle-plugin.d.ts.map +1 -0
- package/dist/vite/agents-bundle-plugin.js +87 -0
- package/dist/vite/agents-bundle-plugin.js.map +1 -0
- package/dist/vite/client.d.ts +5 -0
- package/dist/vite/client.d.ts.map +1 -1
- package/dist/vite/client.js +310 -19
- package/dist/vite/client.js.map +1 -1
- package/dist/vite/index.d.ts +2 -1
- package/dist/vite/index.d.ts.map +1 -1
- package/dist/vite/index.js +2 -1
- package/dist/vite/index.js.map +1 -1
- package/package.json +78 -14
- package/src/templates/default/.agents/skills/actions/SKILL.md +142 -0
- package/src/templates/default/.agents/skills/agent-engines/SKILL.md +127 -0
- package/src/templates/default/.agents/skills/create-skill/SKILL.md +1 -1
- package/src/templates/default/.agents/skills/delegate-to-agent/SKILL.md +1 -1
- package/src/templates/default/.agents/skills/real-time-collab/SKILL.md +183 -0
- package/src/templates/default/.agents/skills/real-time-sync/SKILL.md +112 -0
- package/src/templates/default/.agents/skills/security/SKILL.md +108 -0
- package/src/templates/default/.agents/skills/storing-data/SKILL.md +110 -0
- package/src/templates/default/.claude/settings.json +13 -0
- package/src/templates/default/AGENTS.md +72 -164
- package/src/templates/default/DEVELOPING.md +117 -0
- package/src/templates/default/actions/hello.ts +20 -0
- package/src/templates/default/actions/navigate.ts +53 -0
- package/src/templates/default/actions/run.ts +2 -0
- package/src/templates/default/actions/view-screen.ts +39 -0
- package/src/templates/default/app/global.css +2 -2
- package/src/templates/default/app/root.tsx +19 -16
- package/src/templates/default/app/routes/_index.tsx +1 -1
- package/src/templates/default/package.json +6 -2
- package/src/templates/default/server/middleware/auth.ts +15 -0
- package/src/templates/default/server/plugins/.gitkeep +0 -0
- package/src/templates/default/server/routes/[...page].get.ts +2 -9
- package/src/templates/default/ssr-entry.ts +20 -0
- package/dist/a2a/middleware.d.ts +0 -3
- package/dist/a2a/middleware.d.ts.map +0 -1
- package/dist/a2a/middleware.js +0 -36
- package/dist/a2a/middleware.js.map +0 -1
- package/dist/adapters/convex/adapter.d.ts +0 -24
- package/dist/adapters/convex/adapter.d.ts.map +0 -1
- package/dist/adapters/convex/adapter.js +0 -125
- package/dist/adapters/convex/adapter.js.map +0 -1
- package/dist/adapters/convex/index.d.ts +0 -4
- package/dist/adapters/convex/index.d.ts.map +0 -1
- package/dist/adapters/convex/index.js +0 -3
- package/dist/adapters/convex/index.js.map +0 -1
- package/dist/adapters/drizzle/adapter.d.ts +0 -36
- package/dist/adapters/drizzle/adapter.d.ts.map +0 -1
- package/dist/adapters/drizzle/adapter.js +0 -210
- package/dist/adapters/drizzle/adapter.js.map +0 -1
- package/dist/adapters/drizzle/index.d.ts +0 -3
- package/dist/adapters/drizzle/index.d.ts.map +0 -1
- package/dist/adapters/drizzle/index.js +0 -3
- package/dist/adapters/drizzle/index.js.map +0 -1
- package/dist/adapters/drizzle/schema.d.ts +0 -146
- package/dist/adapters/drizzle/schema.d.ts.map +0 -1
- package/dist/adapters/drizzle/schema.js +0 -20
- package/dist/adapters/drizzle/schema.js.map +0 -1
- package/dist/adapters/firestore/adapter.d.ts +0 -48
- package/dist/adapters/firestore/adapter.d.ts.map +0 -1
- package/dist/adapters/firestore/adapter.js +0 -62
- package/dist/adapters/firestore/adapter.js.map +0 -1
- package/dist/adapters/firestore/index.d.ts +0 -4
- package/dist/adapters/firestore/index.d.ts.map +0 -1
- package/dist/adapters/firestore/index.js +0 -3
- package/dist/adapters/firestore/index.js.map +0 -1
- package/dist/adapters/supabase/adapter.d.ts +0 -43
- package/dist/adapters/supabase/adapter.d.ts.map +0 -1
- package/dist/adapters/supabase/adapter.js +0 -137
- package/dist/adapters/supabase/adapter.js.map +0 -1
- package/dist/adapters/supabase/index.d.ts +0 -3
- package/dist/adapters/supabase/index.d.ts.map +0 -1
- package/dist/adapters/supabase/index.js +0 -3
- package/dist/adapters/supabase/index.js.map +0 -1
- package/dist/adapters/sync/config.d.ts +0 -40
- package/dist/adapters/sync/config.d.ts.map +0 -1
- package/dist/adapters/sync/config.js +0 -209
- package/dist/adapters/sync/config.js.map +0 -1
- package/dist/adapters/sync/create-file-sync.d.ts +0 -32
- package/dist/adapters/sync/create-file-sync.d.ts.map +0 -1
- package/dist/adapters/sync/create-file-sync.js +0 -218
- package/dist/adapters/sync/create-file-sync.js.map +0 -1
- package/dist/adapters/sync/file-sync.d.ts +0 -94
- package/dist/adapters/sync/file-sync.d.ts.map +0 -1
- package/dist/adapters/sync/file-sync.js +0 -671
- package/dist/adapters/sync/file-sync.js.map +0 -1
- package/dist/adapters/sync/index.d.ts +0 -6
- package/dist/adapters/sync/index.d.ts.map +0 -1
- package/dist/adapters/sync/index.js +0 -6
- package/dist/adapters/sync/index.js.map +0 -1
- package/dist/adapters/sync/merge.d.ts +0 -21
- package/dist/adapters/sync/merge.d.ts.map +0 -1
- package/dist/adapters/sync/merge.js +0 -132
- package/dist/adapters/sync/merge.js.map +0 -1
- package/dist/adapters/sync/types.d.ts +0 -62
- package/dist/adapters/sync/types.d.ts.map +0 -1
- package/dist/adapters/sync/types.js +0 -23
- package/dist/adapters/sync/types.js.map +0 -1
- package/dist/client/harness.d.ts +0 -48
- package/dist/client/harness.d.ts.map +0 -1
- package/dist/client/harness.js.map +0 -1
- package/dist/client/use-file-sync-status.d.ts +0 -21
- package/dist/client/use-file-sync-status.d.ts.map +0 -1
- package/dist/client/use-file-sync-status.js +0 -65
- package/dist/client/use-file-sync-status.js.map +0 -1
- package/dist/client/use-file-watcher.d.ts +0 -23
- package/dist/client/use-file-watcher.d.ts.map +0 -1
- package/dist/client/use-file-watcher.js +0 -50
- package/dist/client/use-file-watcher.js.map +0 -1
- package/dist/server/default-watcher.d.ts +0 -17
- package/dist/server/default-watcher.d.ts.map +0 -1
- package/dist/server/default-watcher.js +0 -37
- package/dist/server/default-watcher.js.map +0 -1
- package/dist/server/file-sync-plugin.d.ts +0 -7
- package/dist/server/file-sync-plugin.d.ts.map +0 -1
- package/dist/server/file-sync-plugin.js +0 -38
- package/dist/server/file-sync-plugin.js.map +0 -1
- package/dist/vite/dev-api-server.d.ts +0 -10
- package/dist/vite/dev-api-server.d.ts.map +0 -1
- package/dist/vite/dev-api-server.js +0 -160
- package/dist/vite/dev-api-server.js.map +0 -1
- package/src/templates/default/.agents/skills/scripts/SKILL.md +0 -121
- package/src/templates/default/.agents/skills/sse-file-watcher/SKILL.md +0 -80
- package/src/templates/default/server/plugins/agent-chat.ts +0 -1
- package/src/templates/default/server/plugins/auth.ts +0 -1
- package/src/templates/default/server/plugins/file-sync.ts +0 -1
- package/src/templates/default/server/plugins/terminal.ts +0 -1
- package/src/templates/default/server/routes/api/events.get.ts +0 -3
- package/src/templates/default/server/routes/api/file-sync/status.get.ts +0 -4
- /package/{src/templates/default/application-state/.gitkeep → dist/templates/default/.ignore} +0 -0
- /package/{src/templates/default/scripts → dist/templates/default/actions}/run.ts +0 -0
|
@@ -1,33 +1,299 @@
|
|
|
1
|
-
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
1
|
+
import { jsx as _jsx, jsxs as _jsxs, Fragment as _Fragment } from "react/jsx-runtime";
|
|
2
2
|
import { useState, useRef, useEffect, useCallback } from "react";
|
|
3
|
+
import { IconX, IconPlus, IconHistory, IconSearch } from "@tabler/icons-react";
|
|
3
4
|
import { AssistantChat, } from "./AssistantChat.js";
|
|
4
|
-
import {
|
|
5
|
-
import {
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
5
|
+
import { getFrameOrigin } from "./frame.js";
|
|
6
|
+
import { cn } from "./utils.js";
|
|
7
|
+
import { useChatThreads } from "./use-chat-threads.js";
|
|
8
|
+
// ─── Skeleton Loader ─────────────────────────────────────────────────────────
|
|
9
|
+
function ChatSkeleton() {
|
|
10
|
+
return (_jsxs("div", { className: "flex flex-1 flex-col h-full min-h-0", children: [_jsxs("div", { className: "flex items-center h-8 px-2 border-b border-border shrink-0 gap-2", children: [_jsx("div", { className: "h-4 w-12 rounded bg-muted animate-pulse" }), _jsxs("div", { className: "ml-auto flex gap-1", children: [_jsx("div", { className: "h-5 w-5 rounded bg-muted animate-pulse" }), _jsx("div", { className: "h-5 w-5 rounded bg-muted animate-pulse" })] })] }), _jsxs("div", { className: "flex-1 flex flex-col gap-3 p-4", children: [_jsx("div", { className: "flex justify-center py-8", children: _jsx("div", { className: "h-10 w-10 rounded-full bg-muted animate-pulse" }) }), _jsx("div", { className: "h-3 w-32 rounded bg-muted animate-pulse mx-auto" })] })] }));
|
|
9
11
|
}
|
|
10
|
-
|
|
11
|
-
function
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
12
|
+
// ─── History Popover ─────────────────────────────────────────────────────────
|
|
13
|
+
function HistoryPopover({ threads, openTabIds, onSelect, onClose, onSearch, }) {
|
|
14
|
+
const [search, setSearch] = useState("");
|
|
15
|
+
const [searchResults, setSearchResults] = useState(null);
|
|
16
|
+
const [isSearching, setIsSearching] = useState(false);
|
|
17
|
+
const inputRef = useRef(null);
|
|
18
|
+
const debounceRef = useRef();
|
|
19
|
+
useEffect(() => {
|
|
20
|
+
inputRef.current?.focus();
|
|
21
|
+
}, []);
|
|
22
|
+
useEffect(() => {
|
|
23
|
+
const handler = (e) => {
|
|
24
|
+
if (e.key === "Escape")
|
|
25
|
+
onClose();
|
|
26
|
+
};
|
|
27
|
+
window.addEventListener("keydown", handler);
|
|
28
|
+
return () => window.removeEventListener("keydown", handler);
|
|
29
|
+
}, [onClose]);
|
|
30
|
+
// Debounced server-side search
|
|
31
|
+
const searchIdRef = useRef(0);
|
|
32
|
+
useEffect(() => {
|
|
33
|
+
if (debounceRef.current)
|
|
34
|
+
clearTimeout(debounceRef.current);
|
|
35
|
+
const q = search.trim();
|
|
36
|
+
if (!q) {
|
|
37
|
+
searchIdRef.current++;
|
|
38
|
+
setSearchResults(null);
|
|
39
|
+
setIsSearching(false);
|
|
40
|
+
return;
|
|
41
|
+
}
|
|
42
|
+
setIsSearching(true);
|
|
43
|
+
const id = ++searchIdRef.current;
|
|
44
|
+
debounceRef.current = setTimeout(async () => {
|
|
45
|
+
if (onSearch) {
|
|
46
|
+
const results = await onSearch(q);
|
|
47
|
+
if (id !== searchIdRef.current)
|
|
48
|
+
return;
|
|
49
|
+
setSearchResults(results);
|
|
50
|
+
}
|
|
51
|
+
else {
|
|
52
|
+
// Fallback to client-side filtering
|
|
53
|
+
setSearchResults(null);
|
|
54
|
+
}
|
|
55
|
+
setIsSearching(false);
|
|
56
|
+
}, 250);
|
|
57
|
+
return () => {
|
|
58
|
+
if (debounceRef.current)
|
|
59
|
+
clearTimeout(debounceRef.current);
|
|
60
|
+
};
|
|
61
|
+
}, [search, onSearch]);
|
|
62
|
+
// Only show threads not currently open as tabs
|
|
63
|
+
const closedThreads = threads.filter((t) => !openTabIds.has(t.id) && t.messageCount > 0);
|
|
64
|
+
const filtered = search.trim()
|
|
65
|
+
? (searchResults ?? closedThreads).filter((t) => t.messageCount > 0)
|
|
66
|
+
: closedThreads;
|
|
67
|
+
const formatTime = (ts) => {
|
|
68
|
+
const d = new Date(ts);
|
|
69
|
+
const now = new Date();
|
|
70
|
+
const diffMs = now.getTime() - d.getTime();
|
|
71
|
+
const diffDays = Math.floor(diffMs / 86400000);
|
|
72
|
+
if (diffDays === 0)
|
|
73
|
+
return d.toLocaleTimeString([], { hour: "numeric", minute: "2-digit" });
|
|
74
|
+
if (diffDays === 1)
|
|
75
|
+
return "Yesterday";
|
|
76
|
+
if (diffDays < 7)
|
|
77
|
+
return d.toLocaleDateString([], { weekday: "short" });
|
|
78
|
+
return d.toLocaleDateString([], { month: "short", day: "numeric" });
|
|
16
79
|
};
|
|
80
|
+
return (_jsxs(_Fragment, { children: [_jsx("div", { className: "fixed inset-0 z-40", onClick: onClose }), _jsxs("div", { className: "absolute right-2 top-0 z-50 w-72 rounded-lg border border-border bg-popover shadow-lg", children: [_jsxs("div", { className: "flex items-center gap-2 px-3 py-2 border-b border-border", children: [_jsx(IconSearch, { size: 13 }), _jsx("input", { ref: inputRef, type: "text", value: search, onChange: (e) => setSearch(e.target.value), placeholder: "Search past chats...", className: "flex-1 bg-transparent text-xs text-foreground placeholder:text-muted-foreground outline-none" })] }), _jsx("div", { className: "max-h-64 overflow-y-auto py-1", children: isSearching ? (_jsx("div", { className: "px-3 py-4 text-xs text-muted-foreground text-center", children: "Searching..." })) : filtered.length === 0 ? (_jsx("div", { className: "px-3 py-4 text-xs text-muted-foreground text-center", children: search ? "No matching chats" : "No past chats" })) : (filtered.map((thread) => (_jsxs("button", { onClick: () => {
|
|
81
|
+
onSelect(thread.id);
|
|
82
|
+
onClose();
|
|
83
|
+
}, className: "w-full px-3 py-2 text-left hover:bg-accent/50", children: [_jsxs("div", { className: "flex items-baseline justify-between gap-2", children: [_jsx("span", { className: "text-xs font-medium text-foreground truncate", children: thread.title || thread.preview || "Chat" }), _jsx("span", { className: "text-[10px] text-muted-foreground shrink-0", children: formatTime(thread.updatedAt) })] }), thread.preview && thread.title !== thread.preview && (_jsx("div", { className: "text-[11px] text-muted-foreground truncate mt-0.5", children: thread.preview }))] }, thread.id)))) })] })] }));
|
|
84
|
+
}
|
|
85
|
+
// ─── Help Popover ────────────────────────────────────────────────────────────
|
|
86
|
+
function HelpPopover({ onClose }) {
|
|
87
|
+
useEffect(() => {
|
|
88
|
+
const handler = (e) => {
|
|
89
|
+
if (e.key === "Escape")
|
|
90
|
+
onClose();
|
|
91
|
+
};
|
|
92
|
+
window.addEventListener("keydown", handler);
|
|
93
|
+
return () => window.removeEventListener("keydown", handler);
|
|
94
|
+
}, [onClose]);
|
|
95
|
+
const commands = [
|
|
96
|
+
{
|
|
97
|
+
name: "/clear",
|
|
98
|
+
description: "Start a new chat (keeps current chat in history)",
|
|
99
|
+
},
|
|
100
|
+
{ name: "/new", description: "Same as /clear" },
|
|
101
|
+
{ name: "/history", description: "Browse and search past chats" },
|
|
102
|
+
{ name: "/help", description: "Show this list of commands" },
|
|
103
|
+
{ name: "@", description: "Mention files, agents, or resources" },
|
|
104
|
+
];
|
|
105
|
+
return (_jsxs(_Fragment, { children: [_jsx("div", { className: "fixed inset-0 z-40", onClick: onClose }), _jsxs("div", { className: "absolute right-2 top-0 z-50 w-72 rounded-lg border border-border bg-popover shadow-lg", children: [_jsxs("div", { className: "flex items-center justify-between px-3 py-2 border-b border-border", children: [_jsx("span", { className: "text-xs font-medium text-foreground", children: "Available Commands" }), _jsx("button", { onClick: onClose, className: "flex h-5 w-5 items-center justify-center rounded text-muted-foreground hover:text-foreground", children: _jsx(IconX, { size: 12 }) })] }), _jsx("div", { className: "py-1", children: commands.map((cmd) => (_jsxs("div", { className: "px-3 py-1.5", children: [_jsx("div", { className: "text-xs font-medium text-foreground", children: cmd.name }), _jsx("div", { className: "text-[11px] text-muted-foreground", children: cmd.description })] }, cmd.name))) })] })] }));
|
|
17
106
|
}
|
|
18
|
-
export function MultiTabAssistantChat(props) {
|
|
19
|
-
const
|
|
20
|
-
|
|
21
|
-
const
|
|
22
|
-
|
|
107
|
+
export function MultiTabAssistantChat({ showTabBar = true, renderHeader, renderOverlay, contentHidden = false, apiUrl = "/_agent-native/agent-chat", storageKey, ...props }) {
|
|
108
|
+
const { threads, activeThreadId, isLoading, createThread, switchThread, deleteThread, saveThreadData, generateTitle, searchThreads, refreshThreads, } = useChatThreads(apiUrl, storageKey);
|
|
109
|
+
// Namespace all localStorage keys by storageKey when provided (for per-app isolation in frame)
|
|
110
|
+
const keyPrefix = storageKey ? `:${storageKey}` : "";
|
|
111
|
+
// Track which tabs have been focused at least once (lazy mount for sub-agent tabs)
|
|
112
|
+
const mountedTabsRef = useRef(new Set());
|
|
113
|
+
const activeThreadIdRef = useRef(activeThreadId);
|
|
114
|
+
activeThreadIdRef.current = activeThreadId;
|
|
115
|
+
// Mark the active tab as mounted so it persists when switched away
|
|
116
|
+
if (activeThreadId)
|
|
117
|
+
mountedTabsRef.current.add(activeThreadId);
|
|
23
118
|
const chatRefs = useRef(new Map());
|
|
24
119
|
const pendingSends = useRef(new Map());
|
|
120
|
+
const [runningThreads, setRunningThreads] = useState(new Set());
|
|
121
|
+
const [showHistory, setShowHistory] = useState(false);
|
|
122
|
+
const newThreadIds = useRef(new Set());
|
|
123
|
+
// Parent-child thread mapping — persisted to localStorage.
|
|
124
|
+
// Maps childThreadId → parentThreadId for sub-agent tabs.
|
|
125
|
+
const PARENT_MAP_KEY = `agent-chat-parent-map${keyPrefix}`;
|
|
126
|
+
const [parentMap, setParentMap] = useState(() => {
|
|
127
|
+
try {
|
|
128
|
+
const saved = localStorage.getItem(PARENT_MAP_KEY);
|
|
129
|
+
if (saved)
|
|
130
|
+
return JSON.parse(saved);
|
|
131
|
+
}
|
|
132
|
+
catch { }
|
|
133
|
+
return {};
|
|
134
|
+
});
|
|
135
|
+
// Persist parent map to localStorage
|
|
136
|
+
useEffect(() => {
|
|
137
|
+
try {
|
|
138
|
+
localStorage.setItem(PARENT_MAP_KEY, JSON.stringify(parentMap));
|
|
139
|
+
}
|
|
140
|
+
catch { }
|
|
141
|
+
}, [parentMap, PARENT_MAP_KEY]);
|
|
142
|
+
// Sub-agent display names — persisted to localStorage.
|
|
143
|
+
// Maps childThreadId → short name (e.g. "Research", "Draft email").
|
|
144
|
+
const SUB_AGENT_NAMES_KEY = `agent-chat-sub-agent-names${keyPrefix}`;
|
|
145
|
+
const [subAgentNames, setSubAgentNames] = useState(() => {
|
|
146
|
+
try {
|
|
147
|
+
const saved = localStorage.getItem(SUB_AGENT_NAMES_KEY);
|
|
148
|
+
if (saved)
|
|
149
|
+
return JSON.parse(saved);
|
|
150
|
+
}
|
|
151
|
+
catch { }
|
|
152
|
+
return {};
|
|
153
|
+
});
|
|
154
|
+
useEffect(() => {
|
|
155
|
+
try {
|
|
156
|
+
localStorage.setItem(SUB_AGENT_NAMES_KEY, JSON.stringify(subAgentNames));
|
|
157
|
+
}
|
|
158
|
+
catch { }
|
|
159
|
+
}, [subAgentNames, SUB_AGENT_NAMES_KEY]);
|
|
160
|
+
// Open tabs — persisted to localStorage so they survive refresh.
|
|
161
|
+
const OPEN_TABS_KEY = `agent-chat-open-tabs${keyPrefix}`;
|
|
162
|
+
const [openTabIds, setOpenTabIds] = useState(() => {
|
|
163
|
+
try {
|
|
164
|
+
const saved = localStorage.getItem(OPEN_TABS_KEY);
|
|
165
|
+
if (saved) {
|
|
166
|
+
const parsed = JSON.parse(saved);
|
|
167
|
+
if (Array.isArray(parsed) && parsed.length > 0) {
|
|
168
|
+
// Mark restored tabs as mounted
|
|
169
|
+
for (const id of parsed)
|
|
170
|
+
mountedTabsRef.current.add(id);
|
|
171
|
+
return parsed;
|
|
172
|
+
}
|
|
173
|
+
}
|
|
174
|
+
}
|
|
175
|
+
catch { }
|
|
176
|
+
return [];
|
|
177
|
+
});
|
|
178
|
+
const initializedRef = useRef(false);
|
|
179
|
+
// Persist open tab IDs to localStorage (exclude sub-agent tabs — they're session-only)
|
|
180
|
+
useEffect(() => {
|
|
181
|
+
const mainTabs = openTabIds.filter((id) => !parentMap[id]);
|
|
182
|
+
if (mainTabs.length > 0) {
|
|
183
|
+
try {
|
|
184
|
+
localStorage.setItem(OPEN_TABS_KEY, JSON.stringify(mainTabs));
|
|
185
|
+
}
|
|
186
|
+
catch { }
|
|
187
|
+
}
|
|
188
|
+
}, [openTabIds, parentMap, OPEN_TABS_KEY]);
|
|
189
|
+
// Initialize open tabs once threads load — validate saved tabs still exist
|
|
190
|
+
useEffect(() => {
|
|
191
|
+
if (initializedRef.current || !activeThreadId || threads.length === 0)
|
|
192
|
+
return;
|
|
193
|
+
initializedRef.current = true;
|
|
194
|
+
const threadIds = new Set(threads.map((t) => t.id));
|
|
195
|
+
// If the active thread is a sub-agent, switch to its parent or the most recent main thread
|
|
196
|
+
if (parentMap[activeThreadId]) {
|
|
197
|
+
const parent = parentMap[activeThreadId];
|
|
198
|
+
if (parent && threadIds.has(parent)) {
|
|
199
|
+
switchThread(parent);
|
|
200
|
+
}
|
|
201
|
+
else {
|
|
202
|
+
// Fall back to most recent main thread
|
|
203
|
+
const mainThread = threads.find((t) => !parentMap[t.id]);
|
|
204
|
+
if (mainThread)
|
|
205
|
+
switchThread(mainThread.id);
|
|
206
|
+
}
|
|
207
|
+
}
|
|
208
|
+
setOpenTabIds((prev) => {
|
|
209
|
+
// Filter out any saved tabs that no longer exist, and any sub-agent tabs
|
|
210
|
+
const valid = prev.filter((id) => threadIds.has(id) && !parentMap[id]);
|
|
211
|
+
// Ensure active thread is included (only if it's not a sub-agent)
|
|
212
|
+
if (!parentMap[activeThreadId] && !valid.includes(activeThreadId)) {
|
|
213
|
+
valid.push(activeThreadId);
|
|
214
|
+
}
|
|
215
|
+
return valid.length > 0 ? valid : [activeThreadId];
|
|
216
|
+
});
|
|
217
|
+
}, [activeThreadId, threads, parentMap, switchThread]);
|
|
218
|
+
// Ensure active thread is always in open tabs.
|
|
219
|
+
// Use functional update to check inside the setter — avoids race with the
|
|
220
|
+
// initialization effect that may have already added the ID in the same batch.
|
|
221
|
+
useEffect(() => {
|
|
222
|
+
if (activeThreadId) {
|
|
223
|
+
setOpenTabIds((prev) => prev.includes(activeThreadId) ? prev : [...prev, activeThreadId]);
|
|
224
|
+
}
|
|
225
|
+
}, [activeThreadId]);
|
|
226
|
+
// Ensure at least one tab is always open — auto-create if sidebar is empty
|
|
227
|
+
const autoCreatingRef = useRef(false);
|
|
228
|
+
useEffect(() => {
|
|
229
|
+
if (isLoading || autoCreatingRef.current)
|
|
230
|
+
return;
|
|
231
|
+
if (openTabIds.length === 0) {
|
|
232
|
+
autoCreatingRef.current = true;
|
|
233
|
+
createThread().then((id) => {
|
|
234
|
+
autoCreatingRef.current = false;
|
|
235
|
+
if (id) {
|
|
236
|
+
newThreadIds.current.add(id);
|
|
237
|
+
setOpenTabIds([id]);
|
|
238
|
+
}
|
|
239
|
+
});
|
|
240
|
+
}
|
|
241
|
+
}, [isLoading, openTabIds, createThread]);
|
|
242
|
+
// Focus the composer when switching tabs
|
|
243
|
+
useEffect(() => {
|
|
244
|
+
if (!activeThreadId)
|
|
245
|
+
return;
|
|
246
|
+
// Small delay to ensure the tab is visible before focusing
|
|
247
|
+
const t = setTimeout(() => {
|
|
248
|
+
chatRefs.current.get(activeThreadId)?.focusComposer();
|
|
249
|
+
}, 50);
|
|
250
|
+
return () => clearTimeout(t);
|
|
251
|
+
}, [activeThreadId]);
|
|
252
|
+
// Ref callback: scroll the active tab into view in the overflow container.
|
|
253
|
+
// Uses getBoundingClientRect for reliable positioning regardless of offsetParent.
|
|
254
|
+
const activeTabRefCb = useCallback((el) => {
|
|
255
|
+
if (!el)
|
|
256
|
+
return;
|
|
257
|
+
const container = el.parentElement;
|
|
258
|
+
if (!container)
|
|
259
|
+
return;
|
|
260
|
+
requestAnimationFrame(() => {
|
|
261
|
+
const containerRect = container.getBoundingClientRect();
|
|
262
|
+
const tabRect = el.getBoundingClientRect();
|
|
263
|
+
if (tabRect.left < containerRect.left) {
|
|
264
|
+
container.scrollLeft += tabRect.left - containerRect.left;
|
|
265
|
+
}
|
|
266
|
+
else if (tabRect.right > containerRect.right) {
|
|
267
|
+
container.scrollLeft += tabRect.right - containerRect.right;
|
|
268
|
+
}
|
|
269
|
+
});
|
|
270
|
+
}, []);
|
|
271
|
+
const [messageCounts, setMessageCounts] = useState(() => Object.fromEntries(threads.map((t) => [t.id, t.messageCount ?? 0])));
|
|
272
|
+
// Sync message counts from threads when they load
|
|
273
|
+
useEffect(() => {
|
|
274
|
+
if (threads.length > 0) {
|
|
275
|
+
setMessageCounts((prev) => {
|
|
276
|
+
const next = { ...prev };
|
|
277
|
+
for (const t of threads) {
|
|
278
|
+
if (!(t.id in next)) {
|
|
279
|
+
next[t.id] = t.messageCount ?? 0;
|
|
280
|
+
}
|
|
281
|
+
}
|
|
282
|
+
return next;
|
|
283
|
+
});
|
|
284
|
+
}
|
|
285
|
+
}, [threads]);
|
|
25
286
|
// Listen for builder.submitChat postMessages
|
|
26
287
|
useEffect(() => {
|
|
288
|
+
const execModeKey = `agent-native-exec-mode${keyPrefix}`;
|
|
289
|
+
const PLAN_MODE_INSTRUCTION = `PLAN MODE ACTIVE: Before making any changes, you MUST:\n` +
|
|
290
|
+
`1. Explore the codebase to understand what's needed\n` +
|
|
291
|
+
`2. Write a plan to \`.builder/plans/YYYY-MM-DD-<topic>.md\`\n` +
|
|
292
|
+
`3. Present your approach clearly and wait for the user's explicit approval\n` +
|
|
293
|
+
`Do NOT edit any files, run any scripts, or make any changes until the user says to proceed.`;
|
|
27
294
|
const handler = (event) => {
|
|
28
|
-
// Only accept messages from same origin or known harness
|
|
29
295
|
if (event.origin !== window.location.origin &&
|
|
30
|
-
event.origin !==
|
|
296
|
+
event.origin !== getFrameOrigin()) {
|
|
31
297
|
return;
|
|
32
298
|
}
|
|
33
299
|
if (event.data?.type !== "builder.submitChat")
|
|
@@ -35,31 +301,45 @@ export function MultiTabAssistantChat(props) {
|
|
|
35
301
|
const message = event.data.data?.message;
|
|
36
302
|
if (!message)
|
|
37
303
|
return;
|
|
38
|
-
const
|
|
304
|
+
const context = event.data.data?.context;
|
|
305
|
+
const isPlanMode = (() => {
|
|
306
|
+
try {
|
|
307
|
+
return localStorage.getItem(execModeKey) === "plan";
|
|
308
|
+
}
|
|
309
|
+
catch {
|
|
310
|
+
return false;
|
|
311
|
+
}
|
|
312
|
+
})();
|
|
313
|
+
const baseMessage = context
|
|
314
|
+
? `${message}\n\n<context>\n${context}\n</context>`
|
|
315
|
+
: message;
|
|
316
|
+
const fullMessage = isPlanMode
|
|
317
|
+
? `${PLAN_MODE_INSTRUCTION}\n\n${baseMessage}`
|
|
318
|
+
: baseMessage;
|
|
319
|
+
const currentTabId = activeThreadIdRef.current;
|
|
320
|
+
if (!currentTabId)
|
|
321
|
+
return;
|
|
39
322
|
const activeRef = chatRefs.current.get(currentTabId);
|
|
40
323
|
if (activeRef) {
|
|
41
|
-
|
|
42
|
-
activeRef.sendMessage(message);
|
|
324
|
+
activeRef.sendMessage(fullMessage);
|
|
43
325
|
}
|
|
44
326
|
else {
|
|
45
|
-
|
|
46
|
-
pendingSends.current.set(currentTabId, message);
|
|
327
|
+
pendingSends.current.set(currentTabId, fullMessage);
|
|
47
328
|
}
|
|
48
329
|
};
|
|
49
330
|
window.addEventListener("message", handler);
|
|
50
331
|
return () => window.removeEventListener("message", handler);
|
|
51
|
-
}, []);
|
|
332
|
+
}, [keyPrefix]);
|
|
52
333
|
// Process pending sends when refs mount
|
|
53
334
|
useEffect(() => {
|
|
54
335
|
for (const [tabId, message] of pendingSends.current) {
|
|
55
336
|
const ref = chatRefs.current.get(tabId);
|
|
56
337
|
if (ref) {
|
|
57
|
-
// Small delay to let the runtime initialise
|
|
58
338
|
setTimeout(() => ref.sendMessage(message), 50);
|
|
59
339
|
pendingSends.current.delete(tabId);
|
|
60
340
|
}
|
|
61
341
|
}
|
|
62
|
-
}, [
|
|
342
|
+
}, [openTabIds]);
|
|
63
343
|
// Listen for chatRunning completion events
|
|
64
344
|
useEffect(() => {
|
|
65
345
|
const handler = (e) => {
|
|
@@ -69,47 +349,338 @@ export function MultiTabAssistantChat(props) {
|
|
|
69
349
|
const { isRunning, tabId } = detail;
|
|
70
350
|
if (!tabId)
|
|
71
351
|
return;
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
352
|
+
setRunningThreads((prev) => {
|
|
353
|
+
const next = new Set(prev);
|
|
354
|
+
if (isRunning) {
|
|
355
|
+
next.add(tabId);
|
|
356
|
+
}
|
|
357
|
+
else {
|
|
358
|
+
next.delete(tabId);
|
|
359
|
+
}
|
|
360
|
+
return next;
|
|
361
|
+
});
|
|
81
362
|
};
|
|
82
|
-
window.addEventListener("builder.
|
|
83
|
-
return () => window.removeEventListener("builder.
|
|
363
|
+
window.addEventListener("builder.chatRunning", handler);
|
|
364
|
+
return () => window.removeEventListener("builder.chatRunning", handler);
|
|
84
365
|
}, []);
|
|
366
|
+
const addTab = useCallback(async () => {
|
|
367
|
+
const id = await createThread();
|
|
368
|
+
if (id) {
|
|
369
|
+
newThreadIds.current.add(id);
|
|
370
|
+
}
|
|
371
|
+
}, [createThread]);
|
|
85
372
|
const closeTab = useCallback((tabId) => {
|
|
86
|
-
|
|
87
|
-
if (prev.length <= 1)
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
373
|
+
setOpenTabIds((prev) => {
|
|
374
|
+
if (prev.length <= 1) {
|
|
375
|
+
// Last tab — create a new one and replace the old tab atomically
|
|
376
|
+
createThread().then((newId) => {
|
|
377
|
+
if (newId) {
|
|
378
|
+
newThreadIds.current.add(newId);
|
|
379
|
+
setOpenTabIds([newId]);
|
|
380
|
+
}
|
|
381
|
+
});
|
|
382
|
+
return prev; // Keep old tab until new one is ready
|
|
383
|
+
}
|
|
384
|
+
const next = prev.filter((id) => id !== tabId);
|
|
385
|
+
if (tabId === activeThreadIdRef.current && next.length > 0) {
|
|
386
|
+
const idx = prev.indexOf(tabId);
|
|
387
|
+
switchThread(next[Math.min(idx, next.length - 1)]);
|
|
94
388
|
}
|
|
95
389
|
return next;
|
|
96
390
|
});
|
|
97
391
|
chatRefs.current.delete(tabId);
|
|
98
392
|
pendingSends.current.delete(tabId);
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
|
|
393
|
+
newThreadIds.current.delete(tabId);
|
|
394
|
+
// Clean up parent map and sub-agent names
|
|
395
|
+
setParentMap((prev) => {
|
|
396
|
+
if (!(tabId in prev))
|
|
397
|
+
return prev;
|
|
398
|
+
const { [tabId]: _, ...rest } = prev;
|
|
399
|
+
return rest;
|
|
400
|
+
});
|
|
401
|
+
setSubAgentNames((prev) => {
|
|
402
|
+
if (!(tabId in prev))
|
|
403
|
+
return prev;
|
|
404
|
+
const { [tabId]: _, ...rest } = prev;
|
|
405
|
+
return rest;
|
|
406
|
+
});
|
|
407
|
+
}, [switchThread, createThread]);
|
|
408
|
+
const closeOtherTabs = useCallback((tabId) => {
|
|
409
|
+
setOpenTabIds([tabId]);
|
|
410
|
+
if (activeThreadIdRef.current !== tabId) {
|
|
411
|
+
switchThread(tabId);
|
|
412
|
+
}
|
|
413
|
+
// Clean up refs for closed tabs
|
|
414
|
+
for (const key of chatRefs.current.keys()) {
|
|
415
|
+
if (key !== tabId) {
|
|
416
|
+
chatRefs.current.delete(key);
|
|
417
|
+
pendingSends.current.delete(key);
|
|
418
|
+
newThreadIds.current.delete(key);
|
|
419
|
+
}
|
|
420
|
+
}
|
|
421
|
+
// Clean up parent map and sub-agent names — only keep entries for the surviving tab
|
|
422
|
+
setParentMap((prev) => {
|
|
423
|
+
if (tabId in prev)
|
|
424
|
+
return { [tabId]: prev[tabId] };
|
|
425
|
+
return {};
|
|
426
|
+
});
|
|
427
|
+
setSubAgentNames((prev) => {
|
|
428
|
+
if (tabId in prev)
|
|
429
|
+
return { [tabId]: prev[tabId] };
|
|
430
|
+
return {};
|
|
431
|
+
});
|
|
432
|
+
}, [switchThread]);
|
|
433
|
+
const closeAllTabs = useCallback(async () => {
|
|
434
|
+
const id = await createThread();
|
|
435
|
+
if (id) {
|
|
436
|
+
newThreadIds.current.add(id);
|
|
437
|
+
setOpenTabIds([id]);
|
|
438
|
+
switchThread(id);
|
|
439
|
+
// Clean up all old refs
|
|
440
|
+
chatRefs.current.clear();
|
|
441
|
+
pendingSends.current.clear();
|
|
442
|
+
setParentMap({});
|
|
443
|
+
setSubAgentNames({});
|
|
444
|
+
}
|
|
445
|
+
}, [createThread, switchThread]);
|
|
446
|
+
const clearActiveTab = useCallback(() => {
|
|
447
|
+
addTab();
|
|
448
|
+
}, [addTab]);
|
|
449
|
+
const openFromHistory = useCallback((threadId) => {
|
|
450
|
+
if (!openTabIds.includes(threadId)) {
|
|
451
|
+
setOpenTabIds((prev) => [...prev, threadId]);
|
|
452
|
+
}
|
|
453
|
+
switchThread(threadId);
|
|
454
|
+
}, [openTabIds, switchThread]);
|
|
455
|
+
// Listen for agent-task-open events (from AgentTaskCard "Open" button)
|
|
456
|
+
useEffect(() => {
|
|
457
|
+
function handleOpenTask(e) {
|
|
458
|
+
const detail = e.detail;
|
|
459
|
+
const threadId = detail?.threadId;
|
|
460
|
+
if (!threadId)
|
|
461
|
+
return;
|
|
462
|
+
// The current active thread is the parent that spawned this sub-agent
|
|
463
|
+
const parentId = activeThreadIdRef.current;
|
|
464
|
+
if (parentId && parentId !== threadId) {
|
|
465
|
+
setParentMap((prev) => prev[threadId] === parentId
|
|
466
|
+
? prev
|
|
467
|
+
: { ...prev, [threadId]: parentId });
|
|
468
|
+
}
|
|
469
|
+
// Store the sub-agent name/description for the tab label
|
|
470
|
+
const name = detail.name || detail.description || "";
|
|
471
|
+
if (name) {
|
|
472
|
+
setSubAgentNames((prev) => prev[threadId] === name ? prev : { ...prev, [threadId]: name });
|
|
473
|
+
}
|
|
474
|
+
// Refresh thread list so the new sub-agent thread appears with its title
|
|
475
|
+
refreshThreads();
|
|
476
|
+
// Open the sub-agent thread as a tab — insert after parent for visual grouping
|
|
477
|
+
if (!openTabIds.includes(threadId)) {
|
|
478
|
+
setOpenTabIds((prev) => {
|
|
479
|
+
if (parentId) {
|
|
480
|
+
const parentIdx = prev.indexOf(parentId);
|
|
481
|
+
if (parentIdx !== -1) {
|
|
482
|
+
// Insert after the parent (and any existing children of that parent)
|
|
483
|
+
const next = [...prev];
|
|
484
|
+
let insertIdx = parentIdx + 1;
|
|
485
|
+
// Skip past any existing children of the same parent
|
|
486
|
+
while (insertIdx < next.length &&
|
|
487
|
+
parentMap[next[insertIdx]] === parentId) {
|
|
488
|
+
insertIdx++;
|
|
489
|
+
}
|
|
490
|
+
next.splice(insertIdx, 0, threadId);
|
|
491
|
+
return next;
|
|
109
492
|
}
|
|
110
|
-
|
|
111
|
-
|
|
493
|
+
}
|
|
494
|
+
return [...prev, threadId];
|
|
495
|
+
});
|
|
496
|
+
}
|
|
497
|
+
switchThread(threadId);
|
|
498
|
+
}
|
|
499
|
+
window.addEventListener("agent-task-open", handleOpenTask);
|
|
500
|
+
return () => window.removeEventListener("agent-task-open", handleOpenTask);
|
|
501
|
+
}, [openTabIds, switchThread, refreshThreads, parentMap]);
|
|
502
|
+
// Watch for agent-issued chat-command in application-state
|
|
503
|
+
const lastChatCommandRef = useRef(0);
|
|
504
|
+
useEffect(() => {
|
|
505
|
+
let stopped = false;
|
|
506
|
+
let timer = null;
|
|
507
|
+
async function pollChatCommand() {
|
|
508
|
+
if (stopped)
|
|
509
|
+
return;
|
|
510
|
+
try {
|
|
511
|
+
const res = await fetch("/_agent-native/application-state/chat-command");
|
|
512
|
+
if (res.ok) {
|
|
513
|
+
const data = await res.json();
|
|
514
|
+
if (data?.value?.command === "open-thread" &&
|
|
515
|
+
data.value.threadId &&
|
|
516
|
+
data.value.timestamp > lastChatCommandRef.current) {
|
|
517
|
+
lastChatCommandRef.current = data.value.timestamp;
|
|
518
|
+
const threadId = data.value.threadId;
|
|
519
|
+
// Open the thread as a tab and focus it
|
|
520
|
+
if (!openTabIds.includes(threadId)) {
|
|
521
|
+
setOpenTabIds((prev) => [...prev, threadId]);
|
|
112
522
|
}
|
|
113
|
-
|
|
523
|
+
switchThread(threadId);
|
|
524
|
+
// Clear the command
|
|
525
|
+
fetch("/_agent-native/application-state/chat-command", {
|
|
526
|
+
method: "DELETE",
|
|
527
|
+
}).catch(() => { });
|
|
528
|
+
}
|
|
529
|
+
}
|
|
530
|
+
}
|
|
531
|
+
catch { }
|
|
532
|
+
if (!stopped) {
|
|
533
|
+
timer = setTimeout(pollChatCommand, 2000);
|
|
534
|
+
}
|
|
535
|
+
}
|
|
536
|
+
pollChatCommand();
|
|
537
|
+
return () => {
|
|
538
|
+
stopped = true;
|
|
539
|
+
if (timer)
|
|
540
|
+
clearTimeout(timer);
|
|
541
|
+
};
|
|
542
|
+
}, [openTabIds, switchThread]);
|
|
543
|
+
const handleGenerateTitle = useCallback((threadId, message) => {
|
|
544
|
+
generateTitle(threadId, message).then((title) => {
|
|
545
|
+
if (title) {
|
|
546
|
+
// Persist the generated title to the server
|
|
547
|
+
saveThreadData(threadId, {
|
|
548
|
+
threadData: "",
|
|
549
|
+
title,
|
|
550
|
+
preview: message.slice(0, 120),
|
|
551
|
+
});
|
|
552
|
+
}
|
|
553
|
+
});
|
|
554
|
+
}, [generateTitle, saveThreadData]);
|
|
555
|
+
const handleSaveThread = useCallback((threadId, data) => {
|
|
556
|
+
saveThreadData(threadId, data);
|
|
557
|
+
}, [saveThreadData]);
|
|
558
|
+
// ─── Slash command handler ──────────────────────────────────────────
|
|
559
|
+
const [helpVisible, setHelpVisible] = useState(false);
|
|
560
|
+
const handleSlashCommand = useCallback((command) => {
|
|
561
|
+
switch (command) {
|
|
562
|
+
case "clear":
|
|
563
|
+
case "new":
|
|
564
|
+
addTab();
|
|
565
|
+
break;
|
|
566
|
+
case "history":
|
|
567
|
+
setShowHistory(true);
|
|
568
|
+
break;
|
|
569
|
+
case "help":
|
|
570
|
+
setHelpVisible(true);
|
|
571
|
+
break;
|
|
572
|
+
}
|
|
573
|
+
}, [addTab]);
|
|
574
|
+
// Build tabs from open thread IDs
|
|
575
|
+
const threadMap = new Map(threads.map((t) => [t.id, t]));
|
|
576
|
+
const tabs = openTabIds
|
|
577
|
+
.filter((id) => threadMap.has(id) || id === activeThreadId)
|
|
578
|
+
.map((id) => {
|
|
579
|
+
const t = threadMap.get(id);
|
|
580
|
+
return {
|
|
581
|
+
id,
|
|
582
|
+
label: t?.title || t?.preview?.slice(0, 30) || "New chat",
|
|
583
|
+
status: runningThreads.has(id)
|
|
584
|
+
? "running"
|
|
585
|
+
: (messageCounts[id] ?? t?.messageCount ?? 0) > 0
|
|
586
|
+
? "completed"
|
|
587
|
+
: "idle",
|
|
588
|
+
parentThreadId: parentMap[id],
|
|
589
|
+
subAgentName: subAgentNames[id],
|
|
590
|
+
};
|
|
591
|
+
});
|
|
592
|
+
// Include sub-agent tabs that aren't in threadMap yet (just created, not refreshed)
|
|
593
|
+
for (const id of openTabIds) {
|
|
594
|
+
if (!tabs.some((t) => t.id === id)) {
|
|
595
|
+
tabs.push({
|
|
596
|
+
id,
|
|
597
|
+
label: subAgentNames[id] || (parentMap[id] ? "Sub-agent..." : "New chat"),
|
|
598
|
+
status: "running",
|
|
599
|
+
parentThreadId: parentMap[id],
|
|
600
|
+
subAgentName: subAgentNames[id],
|
|
601
|
+
});
|
|
602
|
+
}
|
|
603
|
+
}
|
|
604
|
+
const headerProps = {
|
|
605
|
+
tabs,
|
|
606
|
+
activeTabId: activeThreadId ?? "",
|
|
607
|
+
activeTabMessageCount: activeThreadId
|
|
608
|
+
? (messageCounts[activeThreadId] ?? 0)
|
|
609
|
+
: 0,
|
|
610
|
+
setActiveTabId: switchThread,
|
|
611
|
+
addTab,
|
|
612
|
+
closeTab,
|
|
613
|
+
closeOtherTabs,
|
|
614
|
+
closeAllTabs,
|
|
615
|
+
clearActiveTab,
|
|
616
|
+
showHistory,
|
|
617
|
+
toggleHistory: () => setShowHistory((v) => !v),
|
|
618
|
+
tabCount: openTabIds.length,
|
|
619
|
+
};
|
|
620
|
+
if (isLoading) {
|
|
621
|
+
return _jsx(ChatSkeleton, {});
|
|
622
|
+
}
|
|
623
|
+
return (_jsxs("div", { className: "flex flex-1 flex-col h-full min-h-0 overflow-x-hidden", children: [_jsx("style", { dangerouslySetInnerHTML: {
|
|
624
|
+
__html: ".agent-tab-close{opacity:0}.agent-tab:hover .agent-tab-close{opacity:1}",
|
|
625
|
+
} }), renderHeader
|
|
626
|
+
? renderHeader(headerProps)
|
|
627
|
+
: showTabBar
|
|
628
|
+
? (() => {
|
|
629
|
+
const activeTab = tabs.find((t) => t.id === activeThreadId);
|
|
630
|
+
const focusParentId = activeTab?.parentThreadId || activeThreadId;
|
|
631
|
+
const childTabs = tabs.filter((t) => t.parentThreadId === focusParentId);
|
|
632
|
+
const hasSubTabs = childTabs.length > 0;
|
|
633
|
+
const mainTabs = tabs.filter((t) => !t.parentThreadId);
|
|
634
|
+
return (_jsxs(_Fragment, { children: [_jsxs("div", { className: "flex items-center px-1 py-1 border-b border-border shrink-0 gap-0.5", children: [_jsx("div", { className: "flex items-center gap-0.5 min-w-0 overflow-x-auto scrollbar-none flex-1", children: mainTabs.map((tab) => {
|
|
635
|
+
const isActive = tab.id === activeThreadId ||
|
|
636
|
+
(tab.id === focusParentId &&
|
|
637
|
+
activeTab?.parentThreadId === tab.id);
|
|
638
|
+
return (_jsxs("button", { ref: isActive ? activeTabRefCb : undefined, onClick: () => switchThread(tab.id), className: cn("agent-tab relative flex items-center gap-1 px-2.5 py-1.5 rounded-md text-[11px] font-medium shrink-0 max-w-[130px]", isActive
|
|
639
|
+
? "bg-accent text-foreground"
|
|
640
|
+
: "text-muted-foreground hover:text-foreground hover:bg-accent"), children: [_jsx("span", { className: "truncate pr-1", children: tab.label }), tab.status === "running" && (_jsx("span", { className: "w-1.5 h-1.5 rounded-full bg-muted-foreground/50 shrink-0 animate-pulse" })), _jsx("span", { role: "button", onClick: (e) => {
|
|
641
|
+
e.stopPropagation();
|
|
642
|
+
closeTab(tab.id);
|
|
643
|
+
}, className: "agent-tab-close flex items-center justify-end text-muted-foreground hover:!text-foreground", style: {
|
|
644
|
+
position: "absolute",
|
|
645
|
+
right: 0,
|
|
646
|
+
top: 0,
|
|
647
|
+
bottom: 0,
|
|
648
|
+
width: 28,
|
|
649
|
+
paddingRight: 6,
|
|
650
|
+
borderRadius: "0 6px 6px 0",
|
|
651
|
+
background: "linear-gradient(to right, transparent, hsl(var(--accent)) 40%)",
|
|
652
|
+
}, children: _jsx(IconX, { size: 8 }) })] }, tab.id));
|
|
653
|
+
}) }), _jsxs("div", { className: "flex items-center gap-px shrink-0 ml-auto", children: [_jsx("button", { onClick: addTab, className: "flex h-6 w-6 items-center justify-center rounded text-muted-foreground/60 hover:text-foreground hover:bg-accent/50", title: "New chat", children: _jsx(IconPlus, { size: 12 }) }), _jsx("button", { onClick: () => setShowHistory(!showHistory), className: cn("flex h-6 w-6 items-center justify-center rounded text-muted-foreground/60 hover:text-foreground hover:bg-accent/50", showHistory && "bg-accent text-foreground"), title: "Chat history", children: _jsx(IconHistory, { size: 12 }) })] })] }), hasSubTabs && (_jsx("div", { className: "flex items-center px-1 py-0.5 border-b border-border shrink-0 gap-0.5 bg-muted/30", children: _jsxs("div", { className: "flex items-center gap-0.5 min-w-0 overflow-x-auto scrollbar-none flex-1", children: [_jsx("button", { onClick: () => switchThread(focusParentId), className: cn("flex shrink-0 items-center gap-1 rounded-md px-2 py-1 text-[10px] font-medium cursor-pointer", activeThreadId === focusParentId
|
|
654
|
+
? "bg-accent text-foreground"
|
|
655
|
+
: "text-muted-foreground hover:bg-accent hover:text-foreground"), children: "Main" }), childTabs.map((tab) => (_jsxs("button", { ref: tab.id === activeThreadId
|
|
656
|
+
? activeTabRefCb
|
|
657
|
+
: undefined, onClick: () => switchThread(tab.id), className: cn("agent-tab relative flex shrink-0 items-center gap-1 rounded-md px-2 py-1 text-[10px] font-medium cursor-pointer max-w-[130px]", tab.id === activeThreadId
|
|
658
|
+
? "bg-accent text-foreground"
|
|
659
|
+
: "text-muted-foreground hover:bg-accent hover:text-foreground"), children: [_jsx("span", { className: "truncate pr-1", children: tab.subAgentName || tab.label }), tab.status === "running" && (_jsx("span", { className: "w-1 h-1 rounded-full bg-muted-foreground/50 shrink-0 animate-pulse" })), _jsx("span", { role: "button", onClick: (e) => {
|
|
660
|
+
e.stopPropagation();
|
|
661
|
+
closeTab(tab.id);
|
|
662
|
+
}, className: "agent-tab-close flex items-center justify-end text-muted-foreground hover:!text-foreground", style: {
|
|
663
|
+
position: "absolute",
|
|
664
|
+
right: 0,
|
|
665
|
+
top: 0,
|
|
666
|
+
bottom: 0,
|
|
667
|
+
width: 24,
|
|
668
|
+
paddingRight: 4,
|
|
669
|
+
borderRadius: "0 6px 6px 0",
|
|
670
|
+
background: "linear-gradient(to right, transparent, hsl(var(--accent)) 40%)",
|
|
671
|
+
}, children: _jsx(IconX, { size: 8 }) })] }, tab.id)))] }) }))] }));
|
|
672
|
+
})()
|
|
673
|
+
: null, _jsxs("div", { className: "relative flex-1 flex flex-col min-h-0", children: [renderOverlay ? renderOverlay(headerProps) : null, showHistory && (_jsx(HistoryPopover, { threads: threads, openTabIds: new Set(openTabIds), onSelect: openFromHistory, onClose: () => setShowHistory(false), onSearch: searchThreads })), helpVisible && _jsx(HelpPopover, { onClose: () => setHelpVisible(false) }), [...new Set(openTabIds)]
|
|
674
|
+
.filter((tabId) => tabId === activeThreadId || mountedTabsRef.current.has(tabId))
|
|
675
|
+
.map((tabId) => (_jsx("div", { className: "flex-1 min-h-0", style: {
|
|
676
|
+
display: contentHidden || tabId !== activeThreadId ? "none" : "flex",
|
|
677
|
+
}, children: _jsx(AssistantChat, { ...props, ref: (handle) => {
|
|
678
|
+
if (handle) {
|
|
679
|
+
chatRefs.current.set(tabId, handle);
|
|
680
|
+
}
|
|
681
|
+
else {
|
|
682
|
+
chatRefs.current.delete(tabId);
|
|
683
|
+
}
|
|
684
|
+
}, threadId: tabId, tabId: tabId, apiUrl: apiUrl, isNewThread: newThreadIds.current.has(tabId), onMessageCountChange: (count) => setMessageCounts((prev) => prev[tabId] === count ? prev : { ...prev, [tabId]: count }), onSaveThread: handleSaveThread, onGenerateTitle: handleGenerateTitle, onSlashCommand: handleSlashCommand }) }, tabId)))] })] }));
|
|
114
685
|
}
|
|
115
686
|
//# sourceMappingURL=MultiTabAssistantChat.js.map
|