@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
package/dist/server/auth.js
CHANGED
|
@@ -1,116 +1,156 @@
|
|
|
1
1
|
import crypto from "node:crypto";
|
|
2
|
-
import fs from "node:fs";
|
|
3
2
|
import path from "node:path";
|
|
4
|
-
|
|
5
|
-
|
|
3
|
+
// Lazy fs — loaded via dynamic import() on first use.
|
|
4
|
+
// Avoids static require() which crashes on CF Workers.
|
|
5
|
+
let _fs;
|
|
6
|
+
async function getFs() {
|
|
7
|
+
if (!_fs) {
|
|
8
|
+
_fs = await import("node:fs");
|
|
9
|
+
}
|
|
10
|
+
return _fs;
|
|
11
|
+
}
|
|
12
|
+
import { defineEventHandler, getMethod, getQuery, setResponseHeader, setResponseStatus, getCookie, setCookie, deleteCookie, } from "h3";
|
|
13
|
+
// In h3 v2, `event.req` IS the web Request — no conversion needed.
|
|
14
|
+
function toWebRequest(event) {
|
|
15
|
+
return event.req;
|
|
16
|
+
}
|
|
17
|
+
import { getDbExec, isPostgres, intType } from "../db/client.js";
|
|
18
|
+
import { getBetterAuth, getBetterAuthSync } from "./better-auth-instance.js";
|
|
19
|
+
import { getOnboardingHtml } from "./onboarding-html.js";
|
|
20
|
+
import { migrateLocalUserData } from "./local-migration.js";
|
|
21
|
+
import { readBody } from "../server/h3-helpers.js";
|
|
6
22
|
// ---------------------------------------------------------------------------
|
|
7
23
|
// Constants
|
|
8
24
|
// ---------------------------------------------------------------------------
|
|
9
25
|
const COOKIE_NAME = "an_session";
|
|
10
26
|
const DEFAULT_MAX_AGE = 60 * 60 * 24 * 30; // 30 days
|
|
11
27
|
// ---------------------------------------------------------------------------
|
|
12
|
-
//
|
|
28
|
+
// AUTH_MODE detection
|
|
13
29
|
// ---------------------------------------------------------------------------
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
30
|
+
/**
|
|
31
|
+
* Check if the app is in local-only mode (no auth).
|
|
32
|
+
*
|
|
33
|
+
* Returns true when:
|
|
34
|
+
* - AUTH_MODE=local is explicitly set (escape hatch)
|
|
35
|
+
* - In dev environment (NODE_ENV=development) with no explicit auth token
|
|
36
|
+
* configured (no ACCESS_TOKEN, no BYOA). This makes dev "just work"
|
|
37
|
+
* without requiring auth setup, while still respecting auth when configured.
|
|
38
|
+
*
|
|
39
|
+
* NOTE: GOOGLE_CLIENT_ID is intentionally NOT checked here — it is used for
|
|
40
|
+
* Google Calendar / Gmail API access as well as Google Sign-In, and its
|
|
41
|
+
* presence alone should not force authentication. Only ACCESS_TOKEN/ACCESS_TOKENS
|
|
42
|
+
* (explicit token-based auth) or a custom getSession (BYOA) signal that the
|
|
43
|
+
* developer has explicitly opted into requiring authentication.
|
|
44
|
+
*
|
|
45
|
+
* BYOA (customGetSession) opts out of dev auto-local — templates that provide
|
|
46
|
+
* their own auth (e.g. Supabase) shouldn't be silently bypassed in dev.
|
|
47
|
+
*/
|
|
48
|
+
function isLocalMode() {
|
|
49
|
+
if (process.env.AUTH_MODE === "local")
|
|
50
|
+
return true;
|
|
51
|
+
// Default to local mode in dev when no explicit auth is configured
|
|
52
|
+
if (isDevEnvironment() &&
|
|
53
|
+
!process.env.ACCESS_TOKEN &&
|
|
54
|
+
!process.env.ACCESS_TOKENS &&
|
|
55
|
+
!customGetSession) {
|
|
56
|
+
return true;
|
|
57
|
+
}
|
|
58
|
+
return false;
|
|
59
|
+
}
|
|
60
|
+
/**
|
|
61
|
+
* Check if we're in a development/test environment.
|
|
62
|
+
* Used for cookie security settings, not for auth bypass.
|
|
63
|
+
*/
|
|
64
|
+
function isDevEnvironment() {
|
|
65
|
+
const env = process.env.NODE_ENV;
|
|
66
|
+
return env === "development" || env === "test";
|
|
67
|
+
}
|
|
68
|
+
// ---------------------------------------------------------------------------
|
|
69
|
+
// ACCESS_TOKEN resolution
|
|
70
|
+
// ---------------------------------------------------------------------------
|
|
71
|
+
function getAccessTokens() {
|
|
72
|
+
const single = process.env.ACCESS_TOKEN;
|
|
73
|
+
const multi = process.env.ACCESS_TOKENS;
|
|
74
|
+
const tokens = [];
|
|
75
|
+
if (single)
|
|
76
|
+
tokens.push(single);
|
|
77
|
+
if (multi) {
|
|
78
|
+
for (const t of multi.split(",")) {
|
|
79
|
+
const trimmed = t.trim();
|
|
80
|
+
if (trimmed && !tokens.includes(trimmed))
|
|
81
|
+
tokens.push(trimmed);
|
|
39
82
|
}
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
83
|
+
}
|
|
84
|
+
return tokens;
|
|
85
|
+
}
|
|
86
|
+
function safeTokenMatch(input, tokens) {
|
|
87
|
+
const inputBuf = Buffer.from(input);
|
|
88
|
+
for (const token of tokens) {
|
|
89
|
+
const tokenBuf = Buffer.from(token);
|
|
90
|
+
if (inputBuf.length === tokenBuf.length &&
|
|
91
|
+
crypto.timingSafeEqual(inputBuf, tokenBuf)) {
|
|
92
|
+
return true;
|
|
49
93
|
}
|
|
50
|
-
_sessionClient = createClient({
|
|
51
|
-
url,
|
|
52
|
-
authToken: process.env.DATABASE_AUTH_TOKEN,
|
|
53
|
-
});
|
|
54
94
|
}
|
|
55
|
-
return
|
|
95
|
+
return false;
|
|
56
96
|
}
|
|
97
|
+
// ---------------------------------------------------------------------------
|
|
98
|
+
// Legacy session store — kept for backward compat (addSession/getSessionEmail)
|
|
99
|
+
// Used by google-oauth.ts for mobile deep linking session creation.
|
|
100
|
+
// ---------------------------------------------------------------------------
|
|
101
|
+
let _sessionInitPromise;
|
|
102
|
+
let sessionMaxAge = DEFAULT_MAX_AGE;
|
|
57
103
|
async function ensureSessionTable() {
|
|
58
|
-
if (
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
104
|
+
if (!_sessionInitPromise) {
|
|
105
|
+
_sessionInitPromise = (async () => {
|
|
106
|
+
const client = getDbExec();
|
|
107
|
+
await client.execute(`
|
|
108
|
+
CREATE TABLE IF NOT EXISTS sessions (
|
|
109
|
+
token TEXT PRIMARY KEY,
|
|
110
|
+
email TEXT,
|
|
111
|
+
created_at ${intType()} NOT NULL
|
|
112
|
+
)
|
|
113
|
+
`);
|
|
114
|
+
try {
|
|
115
|
+
await client.execute(`ALTER TABLE sessions ADD COLUMN email TEXT`);
|
|
116
|
+
}
|
|
117
|
+
catch {
|
|
118
|
+
// Column already exists
|
|
119
|
+
}
|
|
120
|
+
})();
|
|
74
121
|
}
|
|
75
|
-
|
|
76
|
-
}
|
|
77
|
-
async function pruneExpiredSessions() {
|
|
78
|
-
await ensureSessionTable();
|
|
79
|
-
const client = getSessionClient();
|
|
80
|
-
const cutoff = Date.now() - sessionMaxAge * 1000;
|
|
81
|
-
await client.execute({
|
|
82
|
-
sql: `DELETE FROM sessions WHERE created_at < ?`,
|
|
83
|
-
args: [cutoff],
|
|
84
|
-
});
|
|
122
|
+
return _sessionInitPromise;
|
|
85
123
|
}
|
|
86
124
|
/**
|
|
87
|
-
* Create a new session
|
|
88
|
-
*
|
|
125
|
+
* Create a new session in the legacy sessions table.
|
|
126
|
+
* Used by google-oauth.ts for mobile deep linking.
|
|
89
127
|
*/
|
|
90
128
|
export async function addSession(token, email) {
|
|
91
129
|
await ensureSessionTable();
|
|
92
|
-
const client =
|
|
130
|
+
const client = getDbExec();
|
|
93
131
|
await client.execute({
|
|
94
|
-
sql:
|
|
132
|
+
sql: isPostgres()
|
|
133
|
+
? `INSERT INTO sessions (token, email, created_at) VALUES (?, ?, ?) ON CONFLICT (token) DO UPDATE SET email=EXCLUDED.email, created_at=EXCLUDED.created_at`
|
|
134
|
+
: `INSERT OR REPLACE INTO sessions (token, email, created_at) VALUES (?, ?, ?)`,
|
|
95
135
|
args: [token, email ?? null, Date.now()],
|
|
96
136
|
});
|
|
97
137
|
}
|
|
98
|
-
/** Remove a session
|
|
138
|
+
/** Remove a session from the legacy sessions table. */
|
|
99
139
|
export async function removeSession(token) {
|
|
100
140
|
await ensureSessionTable();
|
|
101
|
-
const client =
|
|
141
|
+
const client = getDbExec();
|
|
102
142
|
await client.execute({
|
|
103
143
|
sql: `DELETE FROM sessions WHERE token = ?`,
|
|
104
144
|
args: [token],
|
|
105
145
|
});
|
|
106
146
|
}
|
|
107
147
|
/**
|
|
108
|
-
* Look up the email associated with a session token.
|
|
148
|
+
* Look up the email associated with a legacy session token.
|
|
109
149
|
* Returns null if the session doesn't exist, is expired, or has no email.
|
|
110
150
|
*/
|
|
111
151
|
export async function getSessionEmail(token) {
|
|
112
152
|
await ensureSessionTable();
|
|
113
|
-
const client =
|
|
153
|
+
const client = getDbExec();
|
|
114
154
|
const { rows } = await client.execute({
|
|
115
155
|
sql: `SELECT email, created_at FROM sessions WHERE token = ?`,
|
|
116
156
|
args: [token],
|
|
@@ -127,96 +167,209 @@ export async function getSessionEmail(token) {
|
|
|
127
167
|
}
|
|
128
168
|
return rows[0].email ?? null;
|
|
129
169
|
}
|
|
130
|
-
async function hasSession(token) {
|
|
131
|
-
await ensureSessionTable();
|
|
132
|
-
const client = getSessionClient();
|
|
133
|
-
const { rows } = await client.execute({
|
|
134
|
-
sql: `SELECT created_at FROM sessions WHERE token = ?`,
|
|
135
|
-
args: [token],
|
|
136
|
-
});
|
|
137
|
-
if (rows.length === 0)
|
|
138
|
-
return false;
|
|
139
|
-
const createdAt = rows[0].created_at;
|
|
140
|
-
if (Date.now() - createdAt > sessionMaxAge * 1000) {
|
|
141
|
-
await client.execute({
|
|
142
|
-
sql: `DELETE FROM sessions WHERE token = ?`,
|
|
143
|
-
args: [token],
|
|
144
|
-
});
|
|
145
|
-
return false;
|
|
146
|
-
}
|
|
147
|
-
return true;
|
|
148
|
-
}
|
|
149
170
|
// ---------------------------------------------------------------------------
|
|
150
|
-
//
|
|
171
|
+
// getSession — the auth contract
|
|
151
172
|
// ---------------------------------------------------------------------------
|
|
152
|
-
|
|
153
|
-
|
|
154
|
-
|
|
155
|
-
|
|
156
|
-
|
|
157
|
-
|
|
158
|
-
|
|
159
|
-
|
|
160
|
-
|
|
161
|
-
|
|
162
|
-
|
|
163
|
-
|
|
164
|
-
|
|
165
|
-
|
|
173
|
+
let customGetSession = null;
|
|
174
|
+
let authDisabledMode = false;
|
|
175
|
+
let _authGuardConfig = null;
|
|
176
|
+
/**
|
|
177
|
+
* Module-level auth guard function. Set by autoMountAuth() when auth is active.
|
|
178
|
+
* Called by the server middleware to enforce auth on ALL requests (not just
|
|
179
|
+
* /_agent-native/* routes).
|
|
180
|
+
*/
|
|
181
|
+
let _authGuardFn = null;
|
|
182
|
+
/**
|
|
183
|
+
* Run the auth guard on an event. Returns a Response/object to block the
|
|
184
|
+
* request (login page or 401), or undefined to allow it through.
|
|
185
|
+
*
|
|
186
|
+
* Called by the default server middleware (server/middleware/auth.ts) to
|
|
187
|
+
* enforce auth on page routes and API routes — not just framework routes.
|
|
188
|
+
*/
|
|
189
|
+
export async function runAuthGuard(event) {
|
|
190
|
+
if (!_authGuardFn)
|
|
191
|
+
return; // Auth not mounted (local mode, etc.)
|
|
192
|
+
return _authGuardFn(event);
|
|
166
193
|
}
|
|
194
|
+
const LOCAL_SESSION = { email: "local@localhost" };
|
|
167
195
|
// ---------------------------------------------------------------------------
|
|
168
|
-
//
|
|
196
|
+
// Auth guard factory
|
|
169
197
|
// ---------------------------------------------------------------------------
|
|
170
|
-
|
|
171
|
-
|
|
172
|
-
|
|
173
|
-
|
|
174
|
-
|
|
198
|
+
/**
|
|
199
|
+
* Create an auth guard function that checks session and blocks
|
|
200
|
+
* unauthenticated requests. Returns the login HTML for page routes
|
|
201
|
+
* or a 401 JSON response for API routes.
|
|
202
|
+
*
|
|
203
|
+
* Reads loginHtml and publicPaths from _authGuardConfig on every request
|
|
204
|
+
* so that a custom plugin can update them after the default has already
|
|
205
|
+
* installed this middleware (the production race condition fix).
|
|
206
|
+
*/
|
|
207
|
+
function createAuthGuardFn() {
|
|
208
|
+
return async (event) => {
|
|
209
|
+
const config = _authGuardConfig;
|
|
210
|
+
if (!config)
|
|
211
|
+
return;
|
|
212
|
+
const { loginHtml, publicPaths } = config;
|
|
213
|
+
const url = event.node?.req?.url ?? event.path ?? "/";
|
|
214
|
+
const p = url.split("?")[0];
|
|
215
|
+
// Skip auth routes (all /_agent-native/auth/* and /_agent-native/google/*)
|
|
216
|
+
if (p.startsWith("/_agent-native/auth/") ||
|
|
217
|
+
p.startsWith("/_agent-native/google/")) {
|
|
218
|
+
return;
|
|
219
|
+
}
|
|
220
|
+
// Skip static assets (Vite chunks, fonts, images, etc.)
|
|
221
|
+
if (p.startsWith("/assets/") ||
|
|
222
|
+
p.startsWith("/_build/") ||
|
|
223
|
+
p.endsWith(".js") ||
|
|
224
|
+
p.endsWith(".css") ||
|
|
225
|
+
p.endsWith(".map") ||
|
|
226
|
+
p.endsWith(".ico") ||
|
|
227
|
+
p.endsWith(".png") ||
|
|
228
|
+
p.endsWith(".svg") ||
|
|
229
|
+
p.endsWith(".woff2") ||
|
|
230
|
+
p.endsWith(".woff")) {
|
|
231
|
+
return;
|
|
232
|
+
}
|
|
233
|
+
if (isPublicPath(url, publicPaths))
|
|
234
|
+
return;
|
|
235
|
+
const session = await getSession(event);
|
|
236
|
+
if (session)
|
|
237
|
+
return;
|
|
238
|
+
if (p.startsWith("/api/") || p.startsWith("/_agent-native/")) {
|
|
239
|
+
setResponseStatus(event, 401);
|
|
240
|
+
return { error: "Unauthorized" };
|
|
241
|
+
}
|
|
242
|
+
return new Response(loginHtml, {
|
|
243
|
+
status: 200,
|
|
244
|
+
headers: { "Content-Type": "text/html; charset=utf-8" },
|
|
245
|
+
});
|
|
246
|
+
};
|
|
247
|
+
}
|
|
248
|
+
/**
|
|
249
|
+
* Map a Better Auth session to our AuthSession type.
|
|
250
|
+
*/
|
|
251
|
+
function mapBetterAuthSession(baSession) {
|
|
252
|
+
return {
|
|
253
|
+
email: baSession.user.email,
|
|
254
|
+
userId: baSession.user.id,
|
|
255
|
+
token: baSession.session?.token,
|
|
256
|
+
orgId: baSession.session?.activeOrganizationId ?? undefined,
|
|
257
|
+
};
|
|
175
258
|
}
|
|
176
|
-
// ---------------------------------------------------------------------------
|
|
177
|
-
// getSession — the auth contract
|
|
178
|
-
// ---------------------------------------------------------------------------
|
|
179
|
-
let customGetSession = null;
|
|
180
|
-
let authDisabledMode = false;
|
|
181
|
-
const DEV_SESSION = { email: "local@localhost" };
|
|
182
259
|
/**
|
|
183
260
|
* Get the current auth session for a request.
|
|
184
261
|
*
|
|
185
|
-
*
|
|
186
|
-
*
|
|
187
|
-
*
|
|
262
|
+
* Resolution chain:
|
|
263
|
+
* 1. AUTH_MODE=local → local@localhost (explicit escape hatch)
|
|
264
|
+
* 2. AUTH_DISABLED=true → local@localhost (infrastructure auth)
|
|
265
|
+
* 3. ACCESS_TOKEN → check legacy cookie-based token sessions
|
|
266
|
+
* 4. BYOA custom getSession → delegate to template callback
|
|
267
|
+
* 5. Better Auth → check session via Better Auth API (cookie or Bearer)
|
|
268
|
+
* 6. Legacy cookie → check an_session cookie in legacy sessions table
|
|
269
|
+
* 7. Mobile _session query param → promote to cookie
|
|
188
270
|
*/
|
|
189
271
|
export async function getSession(event) {
|
|
190
|
-
|
|
191
|
-
|
|
192
|
-
|
|
193
|
-
|
|
194
|
-
|
|
195
|
-
|
|
196
|
-
|
|
197
|
-
|
|
198
|
-
|
|
272
|
+
// 1. AUTH_MODE=local — explicit local-only mode
|
|
273
|
+
if (isLocalMode() || authDisabledMode) {
|
|
274
|
+
// Check for a real session cookie first (e.g. from Google OAuth)
|
|
275
|
+
try {
|
|
276
|
+
const cookie = getCookie(event, COOKIE_NAME);
|
|
277
|
+
if (cookie) {
|
|
278
|
+
const email = await getSessionEmail(cookie);
|
|
279
|
+
if (email)
|
|
280
|
+
return { email, token: cookie };
|
|
281
|
+
}
|
|
282
|
+
}
|
|
283
|
+
catch {
|
|
284
|
+
// DB not ready yet
|
|
285
|
+
}
|
|
286
|
+
// Also try Better Auth session (for users who created an account then went local)
|
|
287
|
+
try {
|
|
288
|
+
const ba = getBetterAuthSync();
|
|
289
|
+
if (ba) {
|
|
290
|
+
const baSession = await ba.api.getSession({
|
|
291
|
+
headers: event.headers,
|
|
292
|
+
});
|
|
293
|
+
if (baSession?.user?.email) {
|
|
294
|
+
return mapBetterAuthSession(baSession);
|
|
295
|
+
}
|
|
296
|
+
}
|
|
297
|
+
}
|
|
298
|
+
catch {
|
|
299
|
+
// Better Auth not initialized yet
|
|
300
|
+
}
|
|
301
|
+
return LOCAL_SESSION;
|
|
302
|
+
}
|
|
303
|
+
// 2. ACCESS_TOKEN check (programmatic/agent access)
|
|
304
|
+
const accessTokens = getAccessTokens();
|
|
305
|
+
if (accessTokens.length > 0) {
|
|
306
|
+
const cookie = getCookie(event, COOKIE_NAME);
|
|
307
|
+
if (cookie) {
|
|
308
|
+
const email = await getSessionEmail(cookie);
|
|
309
|
+
if (email)
|
|
310
|
+
return { email, token: cookie };
|
|
311
|
+
}
|
|
312
|
+
}
|
|
313
|
+
// 3. BYOA custom getSession
|
|
314
|
+
if (customGetSession) {
|
|
315
|
+
const session = await customGetSession(event);
|
|
316
|
+
if (session)
|
|
317
|
+
return session;
|
|
318
|
+
// Fall through to mobile _session check
|
|
319
|
+
}
|
|
320
|
+
else {
|
|
321
|
+
// 4. Better Auth session (cookie or Bearer token)
|
|
322
|
+
try {
|
|
323
|
+
const ba = getBetterAuthSync();
|
|
324
|
+
if (ba) {
|
|
325
|
+
const baSession = await ba.api.getSession({
|
|
326
|
+
headers: event.headers,
|
|
327
|
+
});
|
|
328
|
+
if (baSession?.user?.email) {
|
|
329
|
+
return mapBetterAuthSession(baSession);
|
|
330
|
+
}
|
|
331
|
+
}
|
|
332
|
+
}
|
|
333
|
+
catch {
|
|
334
|
+
// Better Auth not ready
|
|
335
|
+
}
|
|
336
|
+
// 5. Legacy cookie fallback (for sessions created before migration)
|
|
337
|
+
const cookie = getCookie(event, COOKIE_NAME);
|
|
338
|
+
if (cookie) {
|
|
339
|
+
const email = await getSessionEmail(cookie);
|
|
340
|
+
if (email)
|
|
341
|
+
return { email, token: cookie };
|
|
342
|
+
}
|
|
343
|
+
}
|
|
344
|
+
// 6. Mobile WebView bridge — _session query param
|
|
345
|
+
const qToken = getQuery(event)?._session;
|
|
346
|
+
if (qToken) {
|
|
347
|
+
const email = await getSessionEmail(qToken);
|
|
348
|
+
if (email) {
|
|
349
|
+
setCookie(event, COOKIE_NAME, qToken, {
|
|
350
|
+
httpOnly: true,
|
|
351
|
+
secure: !isDevEnvironment(),
|
|
352
|
+
sameSite: "lax",
|
|
353
|
+
path: "/",
|
|
354
|
+
maxAge: sessionMaxAge,
|
|
355
|
+
});
|
|
356
|
+
setResponseHeader(event, "Referrer-Policy", "no-referrer");
|
|
357
|
+
return { email, token: qToken };
|
|
358
|
+
}
|
|
199
359
|
}
|
|
200
360
|
return null;
|
|
201
361
|
}
|
|
202
362
|
// ---------------------------------------------------------------------------
|
|
203
|
-
//
|
|
363
|
+
// Public path matching
|
|
204
364
|
// ---------------------------------------------------------------------------
|
|
205
|
-
function
|
|
206
|
-
const
|
|
207
|
-
|
|
208
|
-
const tokenBuf = Buffer.from(token);
|
|
209
|
-
if (inputBuf.length === tokenBuf.length &&
|
|
210
|
-
crypto.timingSafeEqual(inputBuf, tokenBuf)) {
|
|
211
|
-
return true;
|
|
212
|
-
}
|
|
213
|
-
}
|
|
214
|
-
return false;
|
|
365
|
+
function isPublicPath(url, publicPaths) {
|
|
366
|
+
const p = url.split("?")[0];
|
|
367
|
+
return publicPaths.some((pp) => p === pp || p.startsWith(pp + "/"));
|
|
215
368
|
}
|
|
216
369
|
// ---------------------------------------------------------------------------
|
|
217
|
-
// Login page HTML
|
|
370
|
+
// Login page HTML (ACCESS_TOKEN mode)
|
|
218
371
|
// ---------------------------------------------------------------------------
|
|
219
|
-
const
|
|
372
|
+
const TOKEN_LOGIN_HTML = `<!DOCTYPE html>
|
|
220
373
|
<html lang="en">
|
|
221
374
|
<head>
|
|
222
375
|
<meta charset="UTF-8">
|
|
@@ -252,7 +405,6 @@ const LOGIN_HTML = `<!DOCTYPE html>
|
|
|
252
405
|
color: #e5e5e5;
|
|
253
406
|
font-size: 0.9375rem;
|
|
254
407
|
outline: none;
|
|
255
|
-
transition: border-color 0.15s;
|
|
256
408
|
}
|
|
257
409
|
input:focus { border-color: rgba(255,255,255,0.3); }
|
|
258
410
|
button {
|
|
@@ -266,7 +418,6 @@ const LOGIN_HTML = `<!DOCTYPE html>
|
|
|
266
418
|
font-size: 0.9375rem;
|
|
267
419
|
font-weight: 500;
|
|
268
420
|
cursor: pointer;
|
|
269
|
-
transition: opacity 0.15s;
|
|
270
421
|
}
|
|
271
422
|
button:hover { opacity: 0.85; }
|
|
272
423
|
.error { margin-top: 0.75rem; font-size: 0.8125rem; color: #f87171; display: none; }
|
|
@@ -287,7 +438,7 @@ const LOGIN_HTML = `<!DOCTYPE html>
|
|
|
287
438
|
document.getElementById('form').addEventListener('submit', async (e) => {
|
|
288
439
|
e.preventDefault();
|
|
289
440
|
const token = document.getElementById('token').value;
|
|
290
|
-
const res = await fetch('/
|
|
441
|
+
const res = await fetch('/_agent-native/auth/login', {
|
|
291
442
|
method: 'POST',
|
|
292
443
|
headers: { 'Content-Type': 'application/json' },
|
|
293
444
|
body: JSON.stringify({ token }),
|
|
@@ -302,25 +453,259 @@ const LOGIN_HTML = `<!DOCTYPE html>
|
|
|
302
453
|
</body>
|
|
303
454
|
</html>`;
|
|
304
455
|
// ---------------------------------------------------------------------------
|
|
305
|
-
//
|
|
456
|
+
// setAuthModeLocal — write AUTH_MODE=local to .env for the escape hatch
|
|
306
457
|
// ---------------------------------------------------------------------------
|
|
307
|
-
|
|
308
|
-
|
|
309
|
-
|
|
310
|
-
|
|
311
|
-
|
|
312
|
-
|
|
313
|
-
|
|
314
|
-
|
|
315
|
-
|
|
458
|
+
async function setAuthModeLocal() {
|
|
459
|
+
try {
|
|
460
|
+
const fs = await getFs();
|
|
461
|
+
const envPath = path.resolve(process.cwd(), ".env");
|
|
462
|
+
let content = "";
|
|
463
|
+
try {
|
|
464
|
+
content = fs.readFileSync(envPath, "utf-8");
|
|
465
|
+
}
|
|
466
|
+
catch {
|
|
467
|
+
// .env doesn't exist yet
|
|
468
|
+
}
|
|
469
|
+
if (content.includes("AUTH_MODE=")) {
|
|
470
|
+
content = content.replace(/AUTH_MODE=.*/g, "AUTH_MODE=local");
|
|
471
|
+
}
|
|
472
|
+
else {
|
|
473
|
+
content = content.trimEnd() + "\nAUTH_MODE=local\n";
|
|
474
|
+
}
|
|
475
|
+
fs.writeFileSync(envPath, content, "utf-8");
|
|
476
|
+
process.env.AUTH_MODE = "local";
|
|
477
|
+
return true;
|
|
478
|
+
}
|
|
479
|
+
catch {
|
|
480
|
+
return false;
|
|
481
|
+
}
|
|
316
482
|
}
|
|
317
|
-
function
|
|
318
|
-
|
|
319
|
-
|
|
483
|
+
async function removeAuthModeLocal() {
|
|
484
|
+
try {
|
|
485
|
+
const fs = await getFs();
|
|
486
|
+
const envPath = path.resolve(process.cwd(), ".env");
|
|
487
|
+
let content = "";
|
|
488
|
+
try {
|
|
489
|
+
content = fs.readFileSync(envPath, "utf-8");
|
|
490
|
+
}
|
|
491
|
+
catch {
|
|
492
|
+
return true; // No .env file means nothing to remove
|
|
493
|
+
}
|
|
494
|
+
// Remove AUTH_MODE=local line entirely
|
|
495
|
+
content = content
|
|
496
|
+
.split("\n")
|
|
497
|
+
.filter((line) => !line.match(/^\s*AUTH_MODE\s*=/))
|
|
498
|
+
.join("\n");
|
|
499
|
+
fs.writeFileSync(envPath, content, "utf-8");
|
|
500
|
+
delete process.env.AUTH_MODE;
|
|
501
|
+
return true;
|
|
502
|
+
}
|
|
503
|
+
catch {
|
|
504
|
+
return false;
|
|
505
|
+
}
|
|
320
506
|
}
|
|
321
|
-
|
|
322
|
-
|
|
323
|
-
|
|
507
|
+
// ---------------------------------------------------------------------------
|
|
508
|
+
// mountBetterAuthRoutes — Better Auth powered auth with backward-compat routes
|
|
509
|
+
// ---------------------------------------------------------------------------
|
|
510
|
+
async function mountBetterAuthRoutes(app, options) {
|
|
511
|
+
const publicPaths = [...(options.publicPaths ?? [])];
|
|
512
|
+
// The A2A agent card is part of an open protocol — other agents must be
|
|
513
|
+
// able to discover it without auth. Same for favicons and similar probes.
|
|
514
|
+
for (const pp of ["/.well-known", "/favicon.ico", "/favicon.png"]) {
|
|
515
|
+
if (!publicPaths.includes(pp))
|
|
516
|
+
publicPaths.push(pp);
|
|
517
|
+
}
|
|
518
|
+
// Auto-add Google OAuth routes when credentials are configured
|
|
519
|
+
if (process.env.GOOGLE_CLIENT_ID && process.env.GOOGLE_CLIENT_SECRET) {
|
|
520
|
+
for (const gp of [
|
|
521
|
+
"/_agent-native/google/callback",
|
|
522
|
+
"/_agent-native/google/auth-url",
|
|
523
|
+
]) {
|
|
524
|
+
if (!publicPaths.includes(gp))
|
|
525
|
+
publicPaths.push(gp);
|
|
526
|
+
}
|
|
527
|
+
}
|
|
528
|
+
const accessTokens = getAccessTokens();
|
|
529
|
+
// Initialize Better Auth
|
|
530
|
+
const auth = await getBetterAuth(options.betterAuth);
|
|
531
|
+
// Mount Better Auth catch-all handler at /_agent-native/auth/ba/*
|
|
532
|
+
app.use("/_agent-native/auth/ba", defineEventHandler(async (event) => {
|
|
533
|
+
const response = await auth.handler(toWebRequest(event));
|
|
534
|
+
return response;
|
|
535
|
+
}));
|
|
536
|
+
// POST /_agent-native/auth/local-mode — switch to local mode (onboarding escape hatch)
|
|
537
|
+
// Only available in dev — production requires real accounts for usage tracking.
|
|
538
|
+
app.use("/_agent-native/auth/local-mode", defineEventHandler(async (event) => {
|
|
539
|
+
if (getMethod(event) !== "POST") {
|
|
540
|
+
setResponseStatus(event, 405);
|
|
541
|
+
return { error: "Method not allowed" };
|
|
542
|
+
}
|
|
543
|
+
if (!isDevEnvironment()) {
|
|
544
|
+
setResponseStatus(event, 403);
|
|
545
|
+
return {
|
|
546
|
+
error: "Local mode is not available in production. Create an account to continue.",
|
|
547
|
+
};
|
|
548
|
+
}
|
|
549
|
+
const ok = await setAuthModeLocal();
|
|
550
|
+
if (!ok) {
|
|
551
|
+
setResponseStatus(event, 500);
|
|
552
|
+
return { error: "Failed to set AUTH_MODE=local in .env" };
|
|
553
|
+
}
|
|
554
|
+
return { ok: true };
|
|
555
|
+
}));
|
|
556
|
+
// POST /_agent-native/auth/exit-local-mode — switch back to real auth
|
|
557
|
+
app.use("/_agent-native/auth/exit-local-mode", defineEventHandler(async (event) => {
|
|
558
|
+
if (getMethod(event) !== "POST") {
|
|
559
|
+
setResponseStatus(event, 405);
|
|
560
|
+
return { error: "Method not allowed" };
|
|
561
|
+
}
|
|
562
|
+
const ok = await removeAuthModeLocal();
|
|
563
|
+
if (!ok) {
|
|
564
|
+
setResponseStatus(event, 500);
|
|
565
|
+
return { error: "Failed to remove AUTH_MODE from .env" };
|
|
566
|
+
}
|
|
567
|
+
return { ok: true };
|
|
568
|
+
}));
|
|
569
|
+
// Backward-compat: POST /_agent-native/auth/login
|
|
570
|
+
app.use("/_agent-native/auth/login", defineEventHandler(async (event) => {
|
|
571
|
+
if (getMethod(event) !== "POST") {
|
|
572
|
+
setResponseStatus(event, 405);
|
|
573
|
+
return { error: "Method not allowed" };
|
|
574
|
+
}
|
|
575
|
+
const body = await readBody(event);
|
|
576
|
+
// Legacy ACCESS_TOKEN login
|
|
577
|
+
if (body?.token &&
|
|
578
|
+
typeof body.token === "string" &&
|
|
579
|
+
accessTokens.length > 0) {
|
|
580
|
+
if (!safeTokenMatch(body.token, accessTokens)) {
|
|
581
|
+
setResponseStatus(event, 401);
|
|
582
|
+
return { error: "Invalid token" };
|
|
583
|
+
}
|
|
584
|
+
const sessionToken = crypto.randomBytes(32).toString("hex");
|
|
585
|
+
await addSession(sessionToken, "user");
|
|
586
|
+
setCookie(event, COOKIE_NAME, sessionToken, {
|
|
587
|
+
httpOnly: true,
|
|
588
|
+
secure: !isDevEnvironment(),
|
|
589
|
+
sameSite: "lax",
|
|
590
|
+
path: "/",
|
|
591
|
+
maxAge: sessionMaxAge,
|
|
592
|
+
});
|
|
593
|
+
return { ok: true };
|
|
594
|
+
}
|
|
595
|
+
// Email/password login via Better Auth
|
|
596
|
+
const email = body?.email?.trim?.()?.toLowerCase?.();
|
|
597
|
+
const password = body?.password;
|
|
598
|
+
if (!email || !password) {
|
|
599
|
+
setResponseStatus(event, 400);
|
|
600
|
+
return { error: "Email and password are required" };
|
|
601
|
+
}
|
|
602
|
+
try {
|
|
603
|
+
const result = await auth.api.signInEmail({
|
|
604
|
+
body: { email, password },
|
|
605
|
+
});
|
|
606
|
+
if (result?.token) {
|
|
607
|
+
setCookie(event, COOKIE_NAME, result.token, {
|
|
608
|
+
httpOnly: true,
|
|
609
|
+
secure: !isDevEnvironment(),
|
|
610
|
+
sameSite: "lax",
|
|
611
|
+
path: "/",
|
|
612
|
+
maxAge: sessionMaxAge,
|
|
613
|
+
});
|
|
614
|
+
await addSession(result.token, email);
|
|
615
|
+
}
|
|
616
|
+
return { ok: true };
|
|
617
|
+
}
|
|
618
|
+
catch (e) {
|
|
619
|
+
setResponseStatus(event, 401);
|
|
620
|
+
return { error: e?.message || "Invalid email or password" };
|
|
621
|
+
}
|
|
622
|
+
}));
|
|
623
|
+
// Backward-compat: POST /_agent-native/auth/register
|
|
624
|
+
app.use("/_agent-native/auth/register", defineEventHandler(async (event) => {
|
|
625
|
+
if (getMethod(event) !== "POST") {
|
|
626
|
+
setResponseStatus(event, 405);
|
|
627
|
+
return { error: "Method not allowed" };
|
|
628
|
+
}
|
|
629
|
+
const body = await readBody(event);
|
|
630
|
+
const email = body?.email?.trim?.()?.toLowerCase?.();
|
|
631
|
+
const password = body?.password;
|
|
632
|
+
if (!email || typeof email !== "string" || !email.includes("@")) {
|
|
633
|
+
setResponseStatus(event, 400);
|
|
634
|
+
return { error: "Valid email is required" };
|
|
635
|
+
}
|
|
636
|
+
if (!password || typeof password !== "string" || password.length < 8) {
|
|
637
|
+
setResponseStatus(event, 400);
|
|
638
|
+
return { error: "Password must be at least 8 characters" };
|
|
639
|
+
}
|
|
640
|
+
try {
|
|
641
|
+
await auth.api.signUpEmail({
|
|
642
|
+
body: { email, password, name: email.split("@")[0] },
|
|
643
|
+
});
|
|
644
|
+
return { ok: true };
|
|
645
|
+
}
|
|
646
|
+
catch (e) {
|
|
647
|
+
setResponseStatus(event, 409);
|
|
648
|
+
return { error: e?.message || "Registration failed" };
|
|
649
|
+
}
|
|
650
|
+
}));
|
|
651
|
+
// Backward-compat: POST /_agent-native/auth/logout
|
|
652
|
+
app.use("/_agent-native/auth/logout", defineEventHandler(async (event) => {
|
|
653
|
+
const cookie = getCookie(event, COOKIE_NAME);
|
|
654
|
+
if (cookie)
|
|
655
|
+
await removeSession(cookie);
|
|
656
|
+
deleteCookie(event, COOKIE_NAME, { path: "/" });
|
|
657
|
+
try {
|
|
658
|
+
await auth.api.signOut({ headers: event.headers });
|
|
659
|
+
}
|
|
660
|
+
catch {
|
|
661
|
+
// Ignore if no Better Auth session
|
|
662
|
+
}
|
|
663
|
+
return { ok: true };
|
|
664
|
+
}));
|
|
665
|
+
// GET /_agent-native/auth/session
|
|
666
|
+
app.use("/_agent-native/auth/session", defineEventHandler(async (event) => {
|
|
667
|
+
if (getMethod(event) !== "GET") {
|
|
668
|
+
setResponseStatus(event, 405);
|
|
669
|
+
return { error: "Method not allowed" };
|
|
670
|
+
}
|
|
671
|
+
const session = await getSession(event);
|
|
672
|
+
return session ?? { error: "Not authenticated" };
|
|
673
|
+
}));
|
|
674
|
+
// POST /_agent-native/auth/migrate-local-data — move local-mode data to
|
|
675
|
+
// the currently signed-in account. Called by the UI after a user upgrades
|
|
676
|
+
// from local mode to a real account so they don't lose their data.
|
|
677
|
+
app.use("/_agent-native/auth/migrate-local-data", defineEventHandler(async (event) => {
|
|
678
|
+
if (getMethod(event) !== "POST") {
|
|
679
|
+
setResponseStatus(event, 405);
|
|
680
|
+
return { error: "Method not allowed" };
|
|
681
|
+
}
|
|
682
|
+
const session = await getSession(event);
|
|
683
|
+
if (!session?.email || session.email === "local@localhost") {
|
|
684
|
+
setResponseStatus(event, 401);
|
|
685
|
+
return { error: "Not authenticated as a real account" };
|
|
686
|
+
}
|
|
687
|
+
try {
|
|
688
|
+
const result = await migrateLocalUserData(session.email);
|
|
689
|
+
return { ok: true, ...result };
|
|
690
|
+
}
|
|
691
|
+
catch (e) {
|
|
692
|
+
setResponseStatus(event, 500);
|
|
693
|
+
return { error: e?.message || "Migration failed" };
|
|
694
|
+
}
|
|
695
|
+
}));
|
|
696
|
+
// Auth guard — stored both in framework middleware registry AND in
|
|
697
|
+
// _authGuardFn so the server middleware can enforce it on ALL routes.
|
|
698
|
+
const loginHtml = options.loginHtml ?? getOnboardingHtml({ googleOnly: options.googleOnly });
|
|
699
|
+
_authGuardConfig = { loginHtml, publicPaths };
|
|
700
|
+
const guardFn = createAuthGuardFn();
|
|
701
|
+
_authGuardFn = guardFn;
|
|
702
|
+
app.use(defineEventHandler(guardFn));
|
|
703
|
+
}
|
|
704
|
+
// ---------------------------------------------------------------------------
|
|
705
|
+
// mountTokenOnlyRoutes — ACCESS_TOKEN-only auth (no Better Auth)
|
|
706
|
+
// ---------------------------------------------------------------------------
|
|
707
|
+
function mountTokenOnlyRoutes(app, accessTokens, publicPaths = []) {
|
|
708
|
+
app.use("/_agent-native/auth/login", defineEventHandler(async (event) => {
|
|
324
709
|
if (getMethod(event) !== "POST") {
|
|
325
710
|
setResponseStatus(event, 405);
|
|
326
711
|
return { error: "Method not allowed" };
|
|
@@ -333,26 +718,24 @@ function mountAuthRoutes(app, accessTokens, publicPaths = []) {
|
|
|
333
718
|
return { error: "Invalid token" };
|
|
334
719
|
}
|
|
335
720
|
const sessionToken = crypto.randomBytes(32).toString("hex");
|
|
336
|
-
await addSession(sessionToken);
|
|
721
|
+
await addSession(sessionToken, "user");
|
|
337
722
|
setCookie(event, COOKIE_NAME, sessionToken, {
|
|
338
723
|
httpOnly: true,
|
|
339
|
-
secure:
|
|
724
|
+
secure: !isDevEnvironment(),
|
|
340
725
|
sameSite: "lax",
|
|
341
726
|
path: "/",
|
|
342
727
|
maxAge: sessionMaxAge,
|
|
343
728
|
});
|
|
344
729
|
return { ok: true };
|
|
345
730
|
}));
|
|
346
|
-
|
|
347
|
-
app.use("/api/auth/logout", defineEventHandler(async (event) => {
|
|
731
|
+
app.use("/_agent-native/auth/logout", defineEventHandler(async (event) => {
|
|
348
732
|
const cookie = getCookie(event, COOKIE_NAME);
|
|
349
733
|
if (cookie)
|
|
350
734
|
await removeSession(cookie);
|
|
351
735
|
deleteCookie(event, COOKIE_NAME, { path: "/" });
|
|
352
736
|
return { ok: true };
|
|
353
737
|
}));
|
|
354
|
-
|
|
355
|
-
app.use("/api/auth/session", defineEventHandler(async (event) => {
|
|
738
|
+
app.use("/_agent-native/auth/session", defineEventHandler(async (event) => {
|
|
356
739
|
if (getMethod(event) !== "GET") {
|
|
357
740
|
setResponseStatus(event, 405);
|
|
358
741
|
return { error: "Method not allowed" };
|
|
@@ -360,68 +743,86 @@ function mountAuthRoutes(app, accessTokens, publicPaths = []) {
|
|
|
360
743
|
const session = await getSession(event);
|
|
361
744
|
return session ?? { error: "Not authenticated" };
|
|
362
745
|
}));
|
|
363
|
-
|
|
364
|
-
|
|
365
|
-
|
|
366
|
-
|
|
367
|
-
|
|
368
|
-
|
|
369
|
-
|
|
370
|
-
|
|
371
|
-
|
|
372
|
-
|
|
373
|
-
|
|
374
|
-
|
|
375
|
-
return;
|
|
746
|
+
_authGuardConfig = { loginHtml: TOKEN_LOGIN_HTML, publicPaths };
|
|
747
|
+
const guardFn = createAuthGuardFn();
|
|
748
|
+
_authGuardFn = guardFn;
|
|
749
|
+
app.use(defineEventHandler(guardFn));
|
|
750
|
+
}
|
|
751
|
+
// ---------------------------------------------------------------------------
|
|
752
|
+
// mountLocalModeRoutes — stub routes for AUTH_MODE=local
|
|
753
|
+
// ---------------------------------------------------------------------------
|
|
754
|
+
function mountLocalModeRoutes(app) {
|
|
755
|
+
app.use("/_agent-native/auth/session", defineEventHandler(async (event) => {
|
|
756
|
+
if (getMethod(event) !== "GET") {
|
|
757
|
+
setResponseStatus(event, 405);
|
|
758
|
+
return { error: "Method not allowed" };
|
|
376
759
|
}
|
|
377
|
-
|
|
378
|
-
|
|
379
|
-
|
|
380
|
-
|
|
760
|
+
return await getSession(event);
|
|
761
|
+
}));
|
|
762
|
+
app.use("/_agent-native/auth/login", defineEventHandler(() => ({ ok: true })));
|
|
763
|
+
app.use("/_agent-native/auth/logout", defineEventHandler(() => ({ ok: true })));
|
|
764
|
+
// Allow exiting local mode to switch to real auth
|
|
765
|
+
app.use("/_agent-native/auth/exit-local-mode", defineEventHandler(async (event) => {
|
|
766
|
+
if (getMethod(event) !== "POST") {
|
|
767
|
+
setResponseStatus(event, 405);
|
|
768
|
+
return { error: "Method not allowed" };
|
|
381
769
|
}
|
|
382
|
-
|
|
383
|
-
if (
|
|
384
|
-
setResponseStatus(event,
|
|
385
|
-
return { error: "
|
|
770
|
+
const ok = await removeAuthModeLocal();
|
|
771
|
+
if (!ok) {
|
|
772
|
+
setResponseStatus(event, 500);
|
|
773
|
+
return { error: "Failed to remove AUTH_MODE from .env" };
|
|
386
774
|
}
|
|
387
|
-
|
|
388
|
-
setResponseHeader(event, "Content-Type", "text/html");
|
|
389
|
-
return LOGIN_HTML;
|
|
775
|
+
return { ok: true };
|
|
390
776
|
}));
|
|
391
777
|
}
|
|
392
778
|
// ---------------------------------------------------------------------------
|
|
393
779
|
// autoMountAuth — the recommended entry point
|
|
394
780
|
// ---------------------------------------------------------------------------
|
|
395
781
|
/**
|
|
396
|
-
* Automatically configure auth based on
|
|
782
|
+
* Automatically configure auth based on environment and configuration:
|
|
397
783
|
*
|
|
398
|
-
* - **
|
|
399
|
-
*
|
|
400
|
-
*
|
|
401
|
-
* - **
|
|
402
|
-
*
|
|
403
|
-
*
|
|
404
|
-
*
|
|
405
|
-
* - **Production without tokens and AUTH_DISABLED !== "true"**: Refuses to
|
|
406
|
-
* start. Logs a clear error explaining what to do.
|
|
407
|
-
*
|
|
408
|
-
* - **Production with AUTH_DISABLED=true**: Auth is skipped (for apps behind
|
|
409
|
-
* infrastructure-level auth like Cloudflare Access or a VPN).
|
|
784
|
+
* - **AUTH_MODE=local**: Auth bypassed. `getSession()` returns `{ email: "local@localhost" }`.
|
|
785
|
+
* This is the explicit escape hatch for solo local development.
|
|
786
|
+
* - **BYOA (custom getSession)**: Template-provided auth callback handles everything.
|
|
787
|
+
* - **AUTH_DISABLED=true**: Auth bypassed (for infrastructure-level auth like Cloudflare Access).
|
|
788
|
+
* - **ACCESS_TOKEN/ACCESS_TOKENS**: Simple token-based auth.
|
|
789
|
+
* - **Default**: Better Auth with email/password, social providers, organizations, and JWT.
|
|
790
|
+
* Users see an onboarding page to create an account on first visit.
|
|
410
791
|
*
|
|
411
792
|
* Returns true if auth was mounted, false if skipped.
|
|
412
793
|
*/
|
|
413
|
-
export function autoMountAuth(app, options = {}) {
|
|
414
|
-
//
|
|
415
|
-
//
|
|
794
|
+
export async function autoMountAuth(app, options = {}) {
|
|
795
|
+
// If auth is already mounted (e.g., default plugin ran before custom plugin),
|
|
796
|
+
// don't re-mount routes — but DO update the live config if custom options
|
|
797
|
+
// like googleOnly or loginHtml were provided. This fixes the production race
|
|
798
|
+
// where the default plugin (no googleOnly) mounts first, and the template's
|
|
799
|
+
// custom auth plugin runs later. Because createAuthGuardFn() reads from
|
|
800
|
+
// _authGuardConfig on every request, updating it here takes effect immediately.
|
|
801
|
+
if (_authGuardFn) {
|
|
802
|
+
if (_authGuardConfig) {
|
|
803
|
+
if (options.googleOnly || options.loginHtml) {
|
|
804
|
+
_authGuardConfig.loginHtml =
|
|
805
|
+
options.loginHtml ??
|
|
806
|
+
getOnboardingHtml({ googleOnly: options.googleOnly });
|
|
807
|
+
}
|
|
808
|
+
if (options.publicPaths) {
|
|
809
|
+
_authGuardConfig.publicPaths = [
|
|
810
|
+
...(_authGuardConfig.publicPaths ?? []),
|
|
811
|
+
...options.publicPaths,
|
|
812
|
+
];
|
|
813
|
+
}
|
|
814
|
+
}
|
|
815
|
+
return true;
|
|
816
|
+
}
|
|
416
817
|
if (!app) {
|
|
417
|
-
if (
|
|
818
|
+
if (isLocalMode() || isDevEnvironment()) {
|
|
418
819
|
authDisabledMode = false;
|
|
419
820
|
customGetSession = null;
|
|
420
821
|
return false;
|
|
421
822
|
}
|
|
422
823
|
throw new Error("autoMountAuth: H3 app is required. In Nitro plugins, pass nitroApp.h3App.");
|
|
423
824
|
}
|
|
424
|
-
// Reset globals
|
|
825
|
+
// Reset globals
|
|
425
826
|
customGetSession = null;
|
|
426
827
|
authDisabledMode = false;
|
|
427
828
|
sessionMaxAge = options.maxAge ?? DEFAULT_MAX_AGE;
|
|
@@ -429,25 +830,17 @@ export function autoMountAuth(app, options = {}) {
|
|
|
429
830
|
if (options.getSession) {
|
|
430
831
|
customGetSession = options.getSession;
|
|
431
832
|
}
|
|
432
|
-
//
|
|
433
|
-
if (
|
|
434
|
-
|
|
435
|
-
|
|
436
|
-
|
|
437
|
-
|
|
438
|
-
return { error: "Method not allowed" };
|
|
439
|
-
}
|
|
440
|
-
return DEV_SESSION;
|
|
441
|
-
}));
|
|
442
|
-
// Mount no-op login/logout so client code doesn't break
|
|
443
|
-
app.use("/api/auth/login", defineEventHandler(() => ({ ok: true })));
|
|
444
|
-
app.use("/api/auth/logout", defineEventHandler(() => ({ ok: true })));
|
|
833
|
+
// AUTH_MODE=local — explicit local-only mode (escape hatch)
|
|
834
|
+
if (isLocalMode()) {
|
|
835
|
+
mountLocalModeRoutes(app);
|
|
836
|
+
// Still init Better Auth in background so users can create accounts later
|
|
837
|
+
getBetterAuth(options.betterAuth).catch(() => { });
|
|
838
|
+
console.log("[agent-native] Auth mode: local (no auth required).");
|
|
445
839
|
return false;
|
|
446
840
|
}
|
|
447
|
-
// BYOA
|
|
841
|
+
// BYOA — custom getSession provider
|
|
448
842
|
if (customGetSession) {
|
|
449
|
-
|
|
450
|
-
app.use("/api/auth/session", defineEventHandler(async (event) => {
|
|
843
|
+
app.use("/_agent-native/auth/session", defineEventHandler(async (event) => {
|
|
451
844
|
if (getMethod(event) !== "GET") {
|
|
452
845
|
setResponseStatus(event, 405);
|
|
453
846
|
return { error: "Method not allowed" };
|
|
@@ -455,80 +848,64 @@ export function autoMountAuth(app, options = {}) {
|
|
|
455
848
|
const session = await getSession(event);
|
|
456
849
|
return session ?? { error: "Not authenticated" };
|
|
457
850
|
}));
|
|
458
|
-
app.use("/
|
|
459
|
-
app.use("/
|
|
851
|
+
app.use("/_agent-native/auth/login", defineEventHandler(() => ({ ok: true })));
|
|
852
|
+
app.use("/_agent-native/auth/logout", defineEventHandler(async (event) => {
|
|
460
853
|
const cookie = getCookie(event, COOKIE_NAME);
|
|
461
854
|
if (cookie)
|
|
462
855
|
await removeSession(cookie);
|
|
463
856
|
deleteCookie(event, COOKIE_NAME, { path: "/" });
|
|
464
857
|
return { ok: true };
|
|
465
858
|
}));
|
|
466
|
-
|
|
467
|
-
|
|
468
|
-
|
|
469
|
-
|
|
470
|
-
|
|
471
|
-
const p = url.split("?")[0];
|
|
472
|
-
if (p === "/api/auth/login" ||
|
|
473
|
-
p === "/api/auth/logout" ||
|
|
474
|
-
p === "/api/auth/session") {
|
|
475
|
-
return;
|
|
476
|
-
}
|
|
477
|
-
// Skip public paths
|
|
478
|
-
if (isPublicPath(url, publicPaths)) {
|
|
479
|
-
return;
|
|
480
|
-
}
|
|
481
|
-
const session = await getSession(event);
|
|
482
|
-
if (session)
|
|
483
|
-
return;
|
|
484
|
-
if (p.startsWith("/api/")) {
|
|
485
|
-
setResponseStatus(event, 401);
|
|
486
|
-
return { error: "Unauthorized" };
|
|
487
|
-
}
|
|
488
|
-
setResponseStatus(event, 200);
|
|
489
|
-
setResponseHeader(event, "Content-Type", "text/html");
|
|
490
|
-
return byoaLoginHtml;
|
|
491
|
-
}));
|
|
859
|
+
const byoaLoginHtml = options.loginHtml ?? TOKEN_LOGIN_HTML;
|
|
860
|
+
_authGuardConfig = { loginHtml: byoaLoginHtml, publicPaths };
|
|
861
|
+
const guardFn = createAuthGuardFn();
|
|
862
|
+
_authGuardFn = guardFn;
|
|
863
|
+
app.use(defineEventHandler(guardFn));
|
|
492
864
|
console.log("[agent-native] Auth enabled — custom getSession provider.");
|
|
493
865
|
return true;
|
|
494
866
|
}
|
|
495
|
-
//
|
|
867
|
+
// AUTH_DISABLED — skip auth (infrastructure-level auth)
|
|
868
|
+
if (process.env.AUTH_DISABLED === "true") {
|
|
869
|
+
authDisabledMode = true;
|
|
870
|
+
console.warn("[agent-native] AUTH_DISABLED=true — running without auth. " +
|
|
871
|
+
"Ensure this app is behind infrastructure-level auth (Cloudflare Access, VPN, etc.).");
|
|
872
|
+
mountLocalModeRoutes(app);
|
|
873
|
+
return false;
|
|
874
|
+
}
|
|
875
|
+
// ACCESS_TOKEN-only mode
|
|
496
876
|
const tokens = getAccessTokens();
|
|
497
|
-
if (tokens.length
|
|
498
|
-
|
|
499
|
-
|
|
500
|
-
|
|
501
|
-
|
|
502
|
-
|
|
503
|
-
|
|
504
|
-
|
|
505
|
-
|
|
506
|
-
|
|
507
|
-
|
|
508
|
-
|
|
509
|
-
|
|
510
|
-
|
|
511
|
-
|
|
512
|
-
|
|
513
|
-
|
|
514
|
-
}
|
|
515
|
-
|
|
516
|
-
|
|
517
|
-
|
|
518
|
-
|
|
519
|
-
" ERROR: Running in production without authentication.\n\n" +
|
|
520
|
-
" Set ACCESS_TOKEN=<your-secret> to enable auth, or\n" +
|
|
521
|
-
" set AUTH_DISABLED=true if this app is behind infrastructure auth.\n\n" +
|
|
522
|
-
" For multi-user access: ACCESS_TOKENS=token1,token2,token3\n" +
|
|
523
|
-
"=".repeat(70) +
|
|
524
|
-
"\n";
|
|
525
|
-
console.error(msg);
|
|
526
|
-
process.exit(1);
|
|
877
|
+
if (tokens.length > 0) {
|
|
878
|
+
mountTokenOnlyRoutes(app, tokens, publicPaths);
|
|
879
|
+
console.log(`[agent-native] Auth enabled — ${tokens.length} access token(s) configured.`);
|
|
880
|
+
return true;
|
|
881
|
+
}
|
|
882
|
+
// Default: Better Auth (account-first)
|
|
883
|
+
try {
|
|
884
|
+
await mountBetterAuthRoutes(app, options);
|
|
885
|
+
console.log("[agent-native] Auth enabled — Better Auth (accounts + organizations).");
|
|
886
|
+
}
|
|
887
|
+
catch (err) {
|
|
888
|
+
console.error("[agent-native] Failed to initialize Better Auth:", err);
|
|
889
|
+
// CRITICAL: Even if Better Auth fails, register the auth guard so
|
|
890
|
+
// unauthenticated users can't access the app. They'll see the login
|
|
891
|
+
// page but won't be able to sign in until the DB is available.
|
|
892
|
+
const loginHtml = options.loginHtml ??
|
|
893
|
+
getOnboardingHtml({ googleOnly: options.googleOnly });
|
|
894
|
+
_authGuardConfig = { loginHtml, publicPaths };
|
|
895
|
+
const guardFn = createAuthGuardFn();
|
|
896
|
+
_authGuardFn = guardFn;
|
|
897
|
+
app.use(defineEventHandler(guardFn));
|
|
898
|
+
console.log("[agent-native] Auth guard registered despite init failure — app is locked.");
|
|
527
899
|
}
|
|
528
|
-
// Production with tokens — mount auth
|
|
529
|
-
pruneExpiredSessions().catch(() => { });
|
|
530
|
-
mountAuthRoutes(app, tokens, publicPaths);
|
|
531
|
-
console.log(`[agent-native] Auth enabled — ${tokens.length} access token(s) configured.`);
|
|
532
900
|
return true;
|
|
533
901
|
}
|
|
902
|
+
// ---------------------------------------------------------------------------
|
|
903
|
+
// Deprecated — kept for backward compat
|
|
904
|
+
// ---------------------------------------------------------------------------
|
|
905
|
+
/**
|
|
906
|
+
* @deprecated Use `autoMountAuth(app, options?)` instead.
|
|
907
|
+
*/
|
|
908
|
+
export function mountAuthMiddleware(app, accessToken) {
|
|
909
|
+
mountTokenOnlyRoutes(app, [accessToken]);
|
|
910
|
+
}
|
|
534
911
|
//# sourceMappingURL=auth.js.map
|