@agent-native/core 0.95.0 → 0.96.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/corpus/README.md +2 -2
- package/corpus/core/CHANGELOG.md +35 -0
- package/corpus/core/docs/content/locales/ar-SA/template-design.mdx +13 -0
- package/corpus/core/docs/content/locales/de-DE/template-design.mdx +18 -0
- package/corpus/core/docs/content/locales/es-ES/template-design.mdx +16 -0
- package/corpus/core/docs/content/locales/fr-FR/template-design.mdx +17 -0
- package/corpus/core/docs/content/locales/hi-IN/template-design.mdx +16 -0
- package/corpus/core/docs/content/locales/ja-JP/template-design.mdx +17 -0
- package/corpus/core/docs/content/locales/ko-KR/template-design.mdx +15 -0
- package/corpus/core/docs/content/locales/pt-BR/template-design.mdx +16 -0
- package/corpus/core/docs/content/locales/zh-CN/template-design.mdx +11 -0
- package/corpus/core/docs/content/locales/zh-TW/template-design.mdx +12 -0
- package/corpus/core/docs/content/template-design.mdx +16 -0
- package/corpus/core/package.json +4 -2
- package/corpus/core/src/a2a/client.ts +11 -1
- package/corpus/core/src/agent/production-agent.ts +107 -27
- package/corpus/core/src/agent/thread-data-builder.ts +48 -22
- package/corpus/core/src/chat-threads/store.ts +20 -1
- package/corpus/core/src/cli/code-agent-executor.ts +1 -0
- package/corpus/core/src/cli/code-agent-runs.ts +14 -0
- package/corpus/core/src/client/AgentPanel.tsx +32 -25
- package/corpus/core/src/client/AssistantChat.tsx +286 -45
- package/corpus/core/src/client/MultiTabAssistantChat.tsx +141 -90
- package/corpus/core/src/client/chat/ChatHistoryList.tsx +404 -0
- package/corpus/core/src/client/chat/index.ts +6 -0
- package/corpus/core/src/client/chat/tool-call-display.tsx +38 -4
- package/corpus/core/src/client/chat/use-reconnect-reader-owner.ts +28 -0
- package/corpus/core/src/client/code-agent-chat-adapter.ts +72 -4
- package/corpus/core/src/client/composer/RealtimeVoiceMode.tsx +52 -11
- package/corpus/core/src/client/composer/TiptapComposer.tsx +157 -20
- package/corpus/core/src/client/composer/VoiceButton.tsx +28 -0
- package/corpus/core/src/client/composer/useRealtimeVoiceMode.tsx +5 -0
- package/corpus/core/src/client/conversation/code-agent-transcript.ts +4 -5
- package/corpus/core/src/client/guided-questions.tsx +11 -2
- package/corpus/core/src/client/index.ts +11 -0
- package/corpus/core/src/client/integrations/IntegrationsPanel.tsx +6 -7
- package/corpus/core/src/client/sse-event-processor.ts +90 -21
- package/corpus/core/src/client/use-chat-threads.ts +10 -1
- package/corpus/core/src/client/voice-provider-status.ts +44 -0
- package/corpus/core/src/code-agents/transcript-normalizer.ts +76 -0
- package/corpus/core/src/connections/catalog.ts +2 -2
- package/corpus/core/src/deploy/build.ts +12 -8
- package/corpus/core/src/integrations/a2a-continuation-processor.ts +35 -5
- package/corpus/core/src/integrations/adapters/slack.ts +74 -21
- package/corpus/core/src/integrations/catalog.ts +2 -2
- package/corpus/core/src/integrations/webhook-handler.ts +14 -0
- package/corpus/core/src/localization/default-messages.ts +6 -0
- package/corpus/core/src/observability/hosted-model-experiment.ts +118 -0
- package/corpus/core/src/observability/routes.ts +17 -0
- package/corpus/core/src/observability/store.ts +4 -1
- package/corpus/core/src/observability/traces.ts +41 -2
- package/corpus/core/src/scripts/agent-engines/list-agent-engines.ts +19 -1
- package/corpus/core/src/scripts/call-agent.ts +53 -3
- package/corpus/core/src/scripts/chat/search-chats.ts +11 -8
- package/corpus/core/src/secrets/register-framework-secrets.ts +1 -1
- package/corpus/core/src/server/agent-chat-plugin.ts +41 -6
- package/corpus/core/src/server/auth.ts +1 -1
- package/corpus/core/src/server/core-routes-plugin.ts +15 -0
- package/corpus/core/src/server/credential-provider.ts +7 -3
- package/corpus/core/src/server/realtime-voice.ts +71 -24
- package/corpus/core/src/server/voice-providers-status.ts +4 -3
- package/corpus/core/src/shared/cache-control.ts +4 -4
- package/corpus/core/src/styles/agent-native.css +1 -0
- package/corpus/core/src/styles/chat-history-list.css +313 -0
- package/corpus/core/src/templates/workspace-core/.agents/skills/observability/SKILL.md +20 -0
- package/corpus/core/src/templates/workspace-core/.agents/skills/voice-transcription/SKILL.md +8 -4
- package/corpus/core/src/vite/client.ts +1 -0
- package/corpus/templates/analytics/AGENTS.md +7 -0
- package/corpus/templates/analytics/actions/bigquery.ts +26 -2
- package/corpus/templates/analytics/actions/data-source-status.ts +18 -0
- package/corpus/templates/analytics/app/components/layout/Sidebar.tsx +5 -4
- package/corpus/templates/analytics/app/global.css +10 -0
- package/corpus/templates/analytics/app/lib/data-sources.ts +5 -4
- package/corpus/templates/analytics/app/pages/Ask.tsx +25 -2
- package/corpus/templates/analytics/changelog/2026-07-10-analytics-answers-simple-time-bounded-metrics-without-unnece.md +6 -0
- package/corpus/templates/analytics/changelog/2026-07-10-analytics-chat-reliably-uses-connected-data-sources-across-s.md +6 -0
- package/corpus/templates/analytics/changelog/2026-07-10-chat-threads-now-stay-clear-of-top-actions-and-fade-smoothly.md +6 -0
- package/corpus/templates/analytics/changelog/2026-07-10-context-chips-can-now-be-selected-and-removed-one-at-a-time-.md +6 -0
- package/corpus/templates/analytics/changelog/2026-07-10-slack-token-setup-marked-legacy.md +6 -0
- package/corpus/templates/analytics/changelog/2026-07-10-the-ask-composer-no-longer-carries-dashboard-or-panel-contex.md +6 -0
- package/corpus/templates/analytics/changelog/2026-07-10-the-ask-section-stays-highlighted-while-its-chat-history-is-.md +6 -0
- package/corpus/templates/analytics/server/lib/bigquery.ts +90 -14
- package/corpus/templates/analytics/server/lib/credential-keys.ts +6 -2
- package/corpus/templates/analytics/server/plugins/agent-chat.ts +82 -7
- package/corpus/templates/brain/changelog/2026-07-10-slack-backfill-token-marked-legacy.md +6 -0
- package/corpus/templates/brain/server/register-secrets.ts +2 -2
- package/corpus/templates/clips/app/components/library/library-layout.tsx +7 -1
- package/corpus/templates/clips/app/components/library/page-header.tsx +19 -3
- package/corpus/templates/clips/app/routes/_app.library._index.tsx +16 -12
- package/corpus/templates/clips/changelog/2026-07-10-new-recording-appears-once-when-the-library-sidebar-is-open.md +6 -0
- package/corpus/templates/clips/changelog/2026-07-10-slack-token-fallback-guidance.md +6 -0
- package/corpus/templates/clips/server/register-secrets.ts +1 -1
- package/corpus/templates/content/app/components/editor/DocumentEditor.tsx +0 -66
- package/corpus/templates/content/app/routes/_app.local-files.tsx +7 -47
- package/corpus/templates/content/changelog/2026-07-10-local-folders-now-wait-for-an-explicit-pull-before-content-r.md +6 -0
- package/corpus/templates/content/package.json +1 -1
- package/corpus/templates/design/actions/generate-design.ts +128 -31
- package/corpus/templates/design/actions/present-design-variants.ts +37 -9
- package/corpus/templates/design/app/components/design/DesignCanvas.tsx +9 -3
- package/corpus/templates/design/app/components/design/MultiScreenCanvas.tsx +32 -10
- package/corpus/templates/design/app/components/design/QuestionFlow.tsx +2 -2
- package/corpus/templates/design/app/components/design/TweaksPanel.tsx +9 -1
- package/corpus/templates/design/app/components/design/bridge/editor-chrome.bridge.ts +7 -5
- package/corpus/templates/design/app/components/design/multi-screen/types.ts +3 -0
- package/corpus/templates/design/app/global.css +10 -0
- package/corpus/templates/design/app/hooks/use-question-flow.ts +9 -2
- package/corpus/templates/design/app/i18n/zh-TW.ts +1 -0
- package/corpus/templates/design/app/i18n-data.ts +21 -11
- package/corpus/templates/design/changelog/2026-07-10-editor-panels-are-easier-to-distinguish-and-design-intake-qu.md +6 -0
- package/corpus/templates/design/changelog/2026-07-10-interact-mode-now-stays-on-the-full-canvas-matches-edit-visu.md +6 -0
- package/corpus/templates/design/changelog/2026-07-10-new-web-designs-open-at-desktop-size-and-adapt-across-mobile.md +6 -0
- package/corpus/templates/design/changelog/2026-07-10-tweaks-now-link-to-full-documentation.md +6 -0
- package/corpus/templates/design/server/plugins/agent-chat.ts +2 -0
- package/corpus/templates/mail/app/i18n/ar-SA.ts +3 -3
- package/corpus/templates/mail/app/i18n/de-DE.ts +3 -3
- package/corpus/templates/mail/app/i18n/en-US.ts +4 -3
- package/corpus/templates/mail/app/i18n/es-ES.ts +3 -3
- package/corpus/templates/mail/app/i18n/fr-FR.ts +3 -3
- package/corpus/templates/mail/app/i18n/hi-IN.ts +3 -3
- package/corpus/templates/mail/app/i18n/ja-JP.ts +3 -3
- package/corpus/templates/mail/app/i18n/ko-KR.ts +3 -3
- package/corpus/templates/mail/app/i18n/pt-BR.ts +3 -3
- package/corpus/templates/mail/app/i18n/zh-CN.ts +3 -3
- package/corpus/templates/mail/app/i18n/zh-TW.ts +3 -3
- package/corpus/templates/mail/changelog/2026-07-10-slack-intake-marked-legacy.md +6 -0
- package/corpus/templates/mail/server/lib/env-config.ts +5 -4
- package/corpus/templates/plan/package.json +1 -1
- package/dist/a2a/client.d.ts +7 -0
- package/dist/a2a/client.d.ts.map +1 -1
- package/dist/a2a/client.js +2 -1
- package/dist/a2a/client.js.map +1 -1
- package/dist/agent/production-agent.d.ts +6 -0
- package/dist/agent/production-agent.d.ts.map +1 -1
- package/dist/agent/production-agent.js +83 -26
- package/dist/agent/production-agent.js.map +1 -1
- package/dist/agent/thread-data-builder.d.ts +1 -0
- package/dist/agent/thread-data-builder.d.ts.map +1 -1
- package/dist/agent/thread-data-builder.js +42 -23
- package/dist/agent/thread-data-builder.js.map +1 -1
- package/dist/chat-threads/store.d.ts +10 -0
- package/dist/chat-threads/store.d.ts.map +1 -1
- package/dist/chat-threads/store.js +6 -0
- package/dist/chat-threads/store.js.map +1 -1
- package/dist/cli/code-agent-executor.d.ts.map +1 -1
- package/dist/cli/code-agent-executor.js +1 -0
- package/dist/cli/code-agent-executor.js.map +1 -1
- package/dist/cli/code-agent-runs.d.ts +12 -0
- package/dist/cli/code-agent-runs.d.ts.map +1 -1
- package/dist/cli/code-agent-runs.js +1 -0
- package/dist/cli/code-agent-runs.js.map +1 -1
- package/dist/client/AgentPanel.d.ts.map +1 -1
- package/dist/client/AgentPanel.js +3 -3
- package/dist/client/AgentPanel.js.map +1 -1
- package/dist/client/AssistantChat.d.ts +14 -1
- package/dist/client/AssistantChat.d.ts.map +1 -1
- package/dist/client/AssistantChat.js +207 -32
- package/dist/client/AssistantChat.js.map +1 -1
- package/dist/client/MultiTabAssistantChat.d.ts.map +1 -1
- package/dist/client/MultiTabAssistantChat.js +83 -10
- package/dist/client/MultiTabAssistantChat.js.map +1 -1
- package/dist/client/chat/ChatHistoryList.d.ts +88 -0
- package/dist/client/chat/ChatHistoryList.d.ts.map +1 -0
- package/dist/client/chat/ChatHistoryList.js +83 -0
- package/dist/client/chat/ChatHistoryList.js.map +1 -0
- package/dist/client/chat/index.d.ts +1 -0
- package/dist/client/chat/index.d.ts.map +1 -1
- package/dist/client/chat/index.js +1 -0
- package/dist/client/chat/index.js.map +1 -1
- package/dist/client/chat/tool-call-display.d.ts +13 -1
- package/dist/client/chat/tool-call-display.d.ts.map +1 -1
- package/dist/client/chat/tool-call-display.js +11 -3
- package/dist/client/chat/tool-call-display.js.map +1 -1
- package/dist/client/chat/use-reconnect-reader-owner.d.ts +11 -0
- package/dist/client/chat/use-reconnect-reader-owner.d.ts.map +1 -0
- package/dist/client/chat/use-reconnect-reader-owner.js +21 -0
- package/dist/client/chat/use-reconnect-reader-owner.js.map +1 -0
- package/dist/client/code-agent-chat-adapter.d.ts +17 -1
- package/dist/client/code-agent-chat-adapter.d.ts.map +1 -1
- package/dist/client/code-agent-chat-adapter.js +47 -3
- package/dist/client/code-agent-chat-adapter.js.map +1 -1
- package/dist/client/composer/RealtimeVoiceMode.d.ts +11 -1
- package/dist/client/composer/RealtimeVoiceMode.d.ts.map +1 -1
- package/dist/client/composer/RealtimeVoiceMode.js +5 -3
- package/dist/client/composer/RealtimeVoiceMode.js.map +1 -1
- package/dist/client/composer/TiptapComposer.d.ts +25 -2
- package/dist/client/composer/TiptapComposer.d.ts.map +1 -1
- package/dist/client/composer/TiptapComposer.js +96 -5
- package/dist/client/composer/TiptapComposer.js.map +1 -1
- package/dist/client/composer/VoiceButton.d.ts.map +1 -1
- package/dist/client/composer/VoiceButton.js +21 -1
- package/dist/client/composer/VoiceButton.js.map +1 -1
- package/dist/client/composer/useRealtimeVoiceMode.d.ts.map +1 -1
- package/dist/client/composer/useRealtimeVoiceMode.js +5 -0
- package/dist/client/composer/useRealtimeVoiceMode.js.map +1 -1
- package/dist/client/conversation/code-agent-transcript.d.ts +2 -0
- package/dist/client/conversation/code-agent-transcript.d.ts.map +1 -1
- package/dist/client/conversation/code-agent-transcript.js +3 -5
- package/dist/client/conversation/code-agent-transcript.js.map +1 -1
- package/dist/client/guided-questions.d.ts.map +1 -1
- package/dist/client/guided-questions.js +7 -2
- package/dist/client/guided-questions.js.map +1 -1
- package/dist/client/index.d.ts +3 -1
- package/dist/client/index.d.ts.map +1 -1
- package/dist/client/index.js +3 -1
- package/dist/client/index.js.map +1 -1
- package/dist/client/integrations/IntegrationsPanel.d.ts.map +1 -1
- package/dist/client/integrations/IntegrationsPanel.js +5 -7
- package/dist/client/integrations/IntegrationsPanel.js.map +1 -1
- package/dist/client/sse-event-processor.d.ts.map +1 -1
- package/dist/client/sse-event-processor.js +67 -20
- package/dist/client/sse-event-processor.js.map +1 -1
- package/dist/client/use-chat-threads.d.ts.map +1 -1
- package/dist/client/use-chat-threads.js +9 -1
- package/dist/client/use-chat-threads.js.map +1 -1
- package/dist/client/voice-provider-status.d.ts +10 -0
- package/dist/client/voice-provider-status.d.ts.map +1 -0
- package/dist/client/voice-provider-status.js +32 -0
- package/dist/client/voice-provider-status.js.map +1 -0
- package/dist/code-agents/transcript-normalizer.d.ts +29 -0
- package/dist/code-agents/transcript-normalizer.d.ts.map +1 -1
- package/dist/code-agents/transcript-normalizer.js +55 -0
- package/dist/code-agents/transcript-normalizer.js.map +1 -1
- package/dist/collab/struct-routes.d.ts +1 -1
- package/dist/connections/catalog.d.ts +2 -2
- package/dist/connections/catalog.js +2 -2
- package/dist/connections/catalog.js.map +1 -1
- package/dist/deploy/build.d.ts.map +1 -1
- package/dist/deploy/build.js +12 -8
- package/dist/deploy/build.js.map +1 -1
- package/dist/integrations/a2a-continuation-processor.d.ts.map +1 -1
- package/dist/integrations/a2a-continuation-processor.js +25 -5
- package/dist/integrations/a2a-continuation-processor.js.map +1 -1
- package/dist/integrations/adapters/slack.d.ts.map +1 -1
- package/dist/integrations/adapters/slack.js +55 -21
- package/dist/integrations/adapters/slack.js.map +1 -1
- package/dist/integrations/catalog.js +2 -2
- package/dist/integrations/catalog.js.map +1 -1
- package/dist/integrations/webhook-handler.d.ts.map +1 -1
- package/dist/integrations/webhook-handler.js +11 -0
- package/dist/integrations/webhook-handler.js.map +1 -1
- package/dist/localization/default-messages.d.ts +5 -0
- package/dist/localization/default-messages.d.ts.map +1 -1
- package/dist/localization/default-messages.js +5 -0
- package/dist/localization/default-messages.js.map +1 -1
- package/dist/observability/hosted-model-experiment.d.ts +39 -0
- package/dist/observability/hosted-model-experiment.d.ts.map +1 -0
- package/dist/observability/hosted-model-experiment.js +90 -0
- package/dist/observability/hosted-model-experiment.js.map +1 -0
- package/dist/observability/routes.d.ts.map +1 -1
- package/dist/observability/routes.js +16 -0
- package/dist/observability/routes.js.map +1 -1
- package/dist/observability/store.d.ts.map +1 -1
- package/dist/observability/store.js +4 -1
- package/dist/observability/store.js.map +1 -1
- package/dist/observability/traces.d.ts +6 -0
- package/dist/observability/traces.d.ts.map +1 -1
- package/dist/observability/traces.js +28 -2
- package/dist/observability/traces.js.map +1 -1
- package/dist/provider-api/corpus-jobs.d.ts +2 -2
- package/dist/scripts/agent-engines/list-agent-engines.d.ts.map +1 -1
- package/dist/scripts/agent-engines/list-agent-engines.js +19 -1
- package/dist/scripts/agent-engines/list-agent-engines.js.map +1 -1
- package/dist/scripts/call-agent.d.ts.map +1 -1
- package/dist/scripts/call-agent.js +43 -3
- package/dist/scripts/call-agent.js.map +1 -1
- package/dist/scripts/chat/search-chats.d.ts +1 -1
- package/dist/scripts/chat/search-chats.d.ts.map +1 -1
- package/dist/scripts/chat/search-chats.js +11 -8
- package/dist/scripts/chat/search-chats.js.map +1 -1
- package/dist/secrets/register-framework-secrets.js +1 -1
- package/dist/secrets/register-framework-secrets.js.map +1 -1
- package/dist/server/agent-chat-plugin.d.ts +11 -0
- package/dist/server/agent-chat-plugin.d.ts.map +1 -1
- package/dist/server/agent-chat-plugin.js +27 -6
- package/dist/server/agent-chat-plugin.js.map +1 -1
- package/dist/server/auth.js +1 -1
- package/dist/server/auth.js.map +1 -1
- package/dist/server/core-routes-plugin.d.ts +3 -0
- package/dist/server/core-routes-plugin.d.ts.map +1 -1
- package/dist/server/core-routes-plugin.js +13 -0
- package/dist/server/core-routes-plugin.js.map +1 -1
- package/dist/server/credential-provider.d.ts +5 -3
- package/dist/server/credential-provider.d.ts.map +1 -1
- package/dist/server/credential-provider.js +7 -3
- package/dist/server/credential-provider.js.map +1 -1
- package/dist/server/realtime-voice.d.ts.map +1 -1
- package/dist/server/realtime-voice.js +55 -21
- package/dist/server/realtime-voice.js.map +1 -1
- package/dist/server/voice-providers-status.d.ts.map +1 -1
- package/dist/server/voice-providers-status.js +2 -3
- package/dist/server/voice-providers-status.js.map +1 -1
- package/dist/shared/cache-control.d.ts +6 -6
- package/dist/shared/cache-control.d.ts.map +1 -1
- package/dist/shared/cache-control.js +3 -3
- package/dist/shared/cache-control.js.map +1 -1
- package/dist/styles/agent-native.css +1 -0
- package/dist/styles/chat-history-list.css +313 -0
- package/dist/templates/workspace-core/.agents/skills/observability/SKILL.md +20 -0
- package/dist/templates/workspace-core/.agents/skills/voice-transcription/SKILL.md +8 -4
- package/dist/vite/client.d.ts.map +1 -1
- package/dist/vite/client.js +1 -0
- package/dist/vite/client.js.map +1 -1
- package/docs/content/locales/ar-SA/template-design.mdx +13 -0
- package/docs/content/locales/de-DE/template-design.mdx +18 -0
- package/docs/content/locales/es-ES/template-design.mdx +16 -0
- package/docs/content/locales/fr-FR/template-design.mdx +17 -0
- package/docs/content/locales/hi-IN/template-design.mdx +16 -0
- package/docs/content/locales/ja-JP/template-design.mdx +17 -0
- package/docs/content/locales/ko-KR/template-design.mdx +15 -0
- package/docs/content/locales/pt-BR/template-design.mdx +16 -0
- package/docs/content/locales/zh-CN/template-design.mdx +11 -0
- package/docs/content/locales/zh-TW/template-design.mdx +12 -0
- package/docs/content/template-design.mdx +16 -0
- package/package.json +4 -2
- package/src/templates/workspace-core/.agents/skills/observability/SKILL.md +20 -0
- package/src/templates/workspace-core/.agents/skills/voice-transcription/SKILL.md +8 -4
|
@@ -77,7 +77,15 @@ export function TweaksPanelContent({
|
|
|
77
77
|
data-tweaks-help
|
|
78
78
|
className="mt-2 border-t border-border/60 pt-2 !text-[10px] leading-relaxed text-muted-foreground/70"
|
|
79
79
|
>
|
|
80
|
-
{t("designEditor.tweaksHelp")}
|
|
80
|
+
{t("designEditor.tweaksHelp")}{" "}
|
|
81
|
+
<a
|
|
82
|
+
href="/docs/template-design#tweaks"
|
|
83
|
+
target="_blank"
|
|
84
|
+
rel="noreferrer"
|
|
85
|
+
className="font-medium text-foreground/80 underline-offset-2 hover:text-foreground hover:underline"
|
|
86
|
+
>
|
|
87
|
+
{t("designEditor.tweaksDocs")}
|
|
88
|
+
</a>
|
|
81
89
|
</p>
|
|
82
90
|
</div>
|
|
83
91
|
);
|
|
@@ -910,10 +910,12 @@ declare var __RUNTIME_LAYER_SNAPSHOT_ENABLED__: boolean;
|
|
|
910
910
|
|
|
911
911
|
function selectionTargetForHit(hit: Element | null): Element | null {
|
|
912
912
|
if (!hit || isDocumentRootElement(hit)) return hit;
|
|
913
|
-
|
|
914
|
-
|
|
915
|
-
|
|
916
|
-
|
|
913
|
+
// Select the deepest element under the pointer on the first click. The
|
|
914
|
+
// bridge can mint a pending node id and build a source-equivalent selector
|
|
915
|
+
// for id-less descendants, so climbing to the nearest tagged ancestor is
|
|
916
|
+
// no longer necessary and makes ordinary list labels select their parent
|
|
917
|
+
// container instead.
|
|
918
|
+
return hit;
|
|
917
919
|
}
|
|
918
920
|
|
|
919
921
|
function freshRuntimeNodeId(prefix: string): string {
|
|
@@ -1929,7 +1931,7 @@ declare var __RUNTIME_LAYER_SNAPSHOT_ENABLED__: boolean;
|
|
|
1929
1931
|
var transformBadge = document.createElement("div");
|
|
1930
1932
|
transformBadge.setAttribute("data-agent-native-transform-badge", "");
|
|
1931
1933
|
transformBadge.style.cssText =
|
|
1932
|
-
"position:fixed;z-index:100000;display:none;pointer-events:none;border:1px solid
|
|
1934
|
+
"position:fixed;z-index:100000;display:none;pointer-events:none;border:1px solid rgba(255,255,255,0.16);border-radius:4px;background:rgba(24,24,27,0.96);color:rgba(255,255,255,0.96);font:11px/1.4 ui-monospace,SFMono-Regular,Menlo,monospace;padding:3px 5px;box-shadow:0 8px 20px rgba(0,0,0,0.28);";
|
|
1933
1935
|
document.body.appendChild(transformBadge);
|
|
1934
1936
|
|
|
1935
1937
|
var spacingBadge = document.createElement("div");
|
|
@@ -130,6 +130,9 @@ export interface MultiScreenCanvasProps {
|
|
|
130
130
|
* transformed directly from the overview canvas. */
|
|
131
131
|
lockedScreenIds?: ReadonlySet<string> | readonly string[];
|
|
132
132
|
fullViewScreenIds?: string[];
|
|
133
|
+
/** Lets every live frame receive native pointer interaction while the
|
|
134
|
+
* overview camera and frame chrome remain available. */
|
|
135
|
+
interactMode?: boolean;
|
|
133
136
|
activeScreenHasHoveredChild?: boolean;
|
|
134
137
|
hoveredChildScreenId?: string | null;
|
|
135
138
|
directlyHoveredScreenId?: string | null;
|
|
@@ -84,6 +84,11 @@
|
|
|
84
84
|
--design-editor-panel-raised-bg: hsl(var(--secondary));
|
|
85
85
|
--design-editor-control-bg: hsl(var(--muted));
|
|
86
86
|
--design-editor-control-border: hsl(var(--border));
|
|
87
|
+
--design-editor-question-option-bg: color-mix(
|
|
88
|
+
in srgb,
|
|
89
|
+
var(--design-editor-control-bg) 58%,
|
|
90
|
+
transparent
|
|
91
|
+
);
|
|
87
92
|
--design-editor-canvas-bg: hsl(0 0% 92%);
|
|
88
93
|
--design-editor-skeleton-canvas-bg: hsl(0 0% 92%);
|
|
89
94
|
--design-editor-skeleton-panel-ghost-bg: color-mix(
|
|
@@ -162,6 +167,11 @@
|
|
|
162
167
|
--design-editor-panel-raised-bg: hsl(0 0% 18%);
|
|
163
168
|
--design-editor-control-bg: hsl(0 0% 18%);
|
|
164
169
|
--design-editor-control-border: hsl(0 0% 24%);
|
|
170
|
+
--design-editor-question-option-bg: color-mix(
|
|
171
|
+
in srgb,
|
|
172
|
+
var(--design-editor-control-bg) 58%,
|
|
173
|
+
transparent
|
|
174
|
+
);
|
|
165
175
|
--design-editor-canvas-bg: hsl(0 0% 10%);
|
|
166
176
|
--design-editor-skeleton-canvas-bg: hsl(0 0% 11%);
|
|
167
177
|
}
|
|
@@ -16,6 +16,9 @@ function designQuestionsStateKey(designId: string | undefined): string {
|
|
|
16
16
|
return designId ? `show-questions:${designId}` : "show-questions";
|
|
17
17
|
}
|
|
18
18
|
|
|
19
|
+
const RESPONSIVE_GENERATION_REQUIREMENTS =
|
|
20
|
+
'Responsive behavior is mandatory for every web design. Read the form-factor answer above: for Desktop or Both/responsive, call generate-design with `primaryViewport: "desktop"` and a 1440x1024 canvas frame; use `primaryViewport: "mobile"` only for an explicitly mobile-primary choice. Use mobile-first responsive CSS, then take desktop and mobile screenshots and fix any overflow before reporting the design complete.';
|
|
21
|
+
|
|
19
22
|
/**
|
|
20
23
|
* Polls design-scoped question state. When the agent writes structured
|
|
21
24
|
* questions, the editor surfaces a full-canvas overlay for only this design.
|
|
@@ -40,6 +43,8 @@ export function useQuestionFlow(
|
|
|
40
43
|
"Answers:",
|
|
41
44
|
formattedAnswers,
|
|
42
45
|
"",
|
|
46
|
+
RESPONSIVE_GENERATION_REQUIREMENTS,
|
|
47
|
+
"",
|
|
43
48
|
designId
|
|
44
49
|
? 'Now continue the design. Honor any answer about variations: if the user asked to explore options, call present-design-variants with 2-5 concise directions using label, description, accentColor, and feature bullets; omit large content HTML when needed because the action can render compact representative screens - wait for their chat pick, delete each unchosen variant screen at most once, call get-design-snapshot exactly once with fileId for the kept screen, then call edit-design exactly once on that same fileId in a bounded pass. Use mode "replace-file" when expanding the representative placeholder into a complete but compact product UI in the chosen direction. Prioritize the primary workflow and render secondary details as visible controls, states, or affordances if the feature list is too large for one reliable edit. Do not repeat delete/snapshot cycles. Do not call generate-design after a variant pick. Stop after the first successful edit-design save. Otherwise call generate-design with one complete, renderable index.html first. Do not ask another question unless a required decision is still genuinely missing.'
|
|
45
50
|
: "Now continue the design. Honor any answer about variations: use variants only if requested; otherwise generate one polished direction.",
|
|
@@ -89,6 +94,8 @@ export function useQuestionFlow(
|
|
|
89
94
|
"Answers:",
|
|
90
95
|
formattedAnswers,
|
|
91
96
|
"",
|
|
97
|
+
RESPONSIVE_GENERATION_REQUIREMENTS,
|
|
98
|
+
"",
|
|
92
99
|
designId
|
|
93
100
|
? 'Now continue the design. Honor any answer about variations: if the user asked to explore options, call present-design-variants with 2-5 concise directions using label, description, accentColor, and feature bullets; omit large content HTML when needed because the action can render compact representative screens - wait for their chat pick, delete each unchosen variant screen at most once, call get-design-snapshot exactly once with fileId for the kept screen, then call edit-design exactly once on that same fileId in a bounded pass. Use mode "replace-file" when expanding the representative placeholder into a complete but compact product UI in the chosen direction. Prioritize the primary workflow and render secondary details as visible controls, states, or affordances if the feature list is too large for one reliable edit. Do not repeat delete/snapshot cycles. Do not call generate-design after a variant pick. Stop after the first successful edit-design save. Otherwise call generate-design with one complete, renderable index.html first. Do not ask another question unless a required decision is still genuinely missing.'
|
|
94
101
|
: "Now continue the design. Honor any answer about variations: use variants only if requested; otherwise generate one polished direction.",
|
|
@@ -105,8 +112,8 @@ export function useQuestionFlow(
|
|
|
105
112
|
sendContinuation(
|
|
106
113
|
"Skip the questions — decide for me.",
|
|
107
114
|
designId
|
|
108
|
-
? `The user skipped the pre-generation questions for design ${designId}. Proceed with reasonable defaults. Generate one polished first direction unless the original prompt explicitly requested options.`
|
|
109
|
-
:
|
|
115
|
+
? `The user skipped the pre-generation questions for design ${designId}. Proceed with reasonable defaults. ${RESPONSIVE_GENERATION_REQUIREMENTS} Generate one polished first direction unless the original prompt explicitly requested options.`
|
|
116
|
+
: `The user skipped the pre-generation questions. Proceed with reasonable defaults. ${RESPONSIVE_GENERATION_REQUIREMENTS} Generate one polished first direction unless the original prompt explicitly requested options.`,
|
|
110
117
|
);
|
|
111
118
|
}, [designId, sendContinuation]);
|
|
112
119
|
|
|
@@ -846,6 +846,7 @@ const enUS = {
|
|
|
846
846
|
closeTweaks: "Close tweaks",
|
|
847
847
|
tweaksHelp:
|
|
848
848
|
"Tweaks are breakpoint- and state-specific visual overrides layered on the base design. Reset a control to return to the inherited value.",
|
|
849
|
+
tweaksDocs: "Learn more.",
|
|
849
850
|
noTweakControls: "No tweak controls yet.",
|
|
850
851
|
extensions: "Extensions",
|
|
851
852
|
addExtension: "Extension",
|
|
@@ -1041,7 +1042,7 @@ const enUS = {
|
|
|
1041
1042
|
multiScreenCanvas: {
|
|
1042
1043
|
duplicate: "Duplicate",
|
|
1043
1044
|
fork: "Fork",
|
|
1044
|
-
fullView: "
|
|
1045
|
+
fullView: "Full view",
|
|
1045
1046
|
preview: "Preview",
|
|
1046
1047
|
openAndDuplicate: "Select {{display}}. Use Interact for focused scrolling.",
|
|
1047
1048
|
openAndPreview: "Select {{display}}. Use Interact for focused scrolling.",
|
|
@@ -5339,6 +5340,7 @@ const designRawLiteralOverrides = {
|
|
|
5339
5340
|
addTweaks: "添加调整",
|
|
5340
5341
|
addTweakControls: "添加调整控件",
|
|
5341
5342
|
closeTweaks: "关闭调整",
|
|
5343
|
+
tweaksDocs: "了解详情。",
|
|
5342
5344
|
noTweakControls: "还没有调整控件。",
|
|
5343
5345
|
extensions: "扩展",
|
|
5344
5346
|
addExtension: "扩展",
|
|
@@ -5494,6 +5496,7 @@ const designRawLiteralOverrides = {
|
|
|
5494
5496
|
addTweaks: "Agregar ajustes",
|
|
5495
5497
|
addTweakControls: "Agregar controles de ajuste",
|
|
5496
5498
|
closeTweaks: "Cerrar ajustes",
|
|
5499
|
+
tweaksDocs: "Más información.",
|
|
5497
5500
|
noTweakControls: "Aún no hay controles de ajuste.",
|
|
5498
5501
|
extensions: "Extensiones",
|
|
5499
5502
|
addExtension: "Extensión",
|
|
@@ -5654,6 +5657,7 @@ const designRawLiteralOverrides = {
|
|
|
5654
5657
|
addTweaks: "Ajouter des ajustements",
|
|
5655
5658
|
addTweakControls: "Ajouter des contrôles de réglage",
|
|
5656
5659
|
closeTweaks: "Fermer les réglages",
|
|
5660
|
+
tweaksDocs: "En savoir plus.",
|
|
5657
5661
|
noTweakControls: "Pas encore de contrôles de réglage.",
|
|
5658
5662
|
extensions: "Extensions",
|
|
5659
5663
|
addExtension: "Extension",
|
|
@@ -5814,6 +5818,7 @@ const designRawLiteralOverrides = {
|
|
|
5814
5818
|
addTweaks: "Fügen Sie Optimierungen hinzu",
|
|
5815
5819
|
addTweakControls: "Fügen Sie Optimierungssteuerelemente hinzu",
|
|
5816
5820
|
closeTweaks: "Enge Optimierungen",
|
|
5821
|
+
tweaksDocs: "Mehr erfahren.",
|
|
5817
5822
|
noTweakControls: "Noch keine Optimierungssteuerung.",
|
|
5818
5823
|
extensions: "Erweiterungen",
|
|
5819
5824
|
addExtension: "Erweiterung",
|
|
@@ -5975,6 +5980,7 @@ const designRawLiteralOverrides = {
|
|
|
5975
5980
|
addTweaks: "微調整を追加する",
|
|
5976
5981
|
addTweakControls: "微調整コントロールを追加する",
|
|
5977
5982
|
closeTweaks: "微調整を閉じる",
|
|
5983
|
+
tweaksDocs: "詳細を見る。",
|
|
5978
5984
|
noTweakControls: "まだ調整コントロールはありません。",
|
|
5979
5985
|
extensions: "拡張機能",
|
|
5980
5986
|
addExtension: "拡張機能",
|
|
@@ -6131,6 +6137,7 @@ const designRawLiteralOverrides = {
|
|
|
6131
6137
|
addTweaks: "조정 추가",
|
|
6132
6138
|
addTweakControls: "조정 컨트롤 추가",
|
|
6133
6139
|
closeTweaks: "조정 닫기",
|
|
6140
|
+
tweaksDocs: "자세히 알아보기.",
|
|
6134
6141
|
noTweakControls: "아직 조정 컨트롤이 없습니다.",
|
|
6135
6142
|
extensions: "확장",
|
|
6136
6143
|
addExtension: "확장",
|
|
@@ -6286,6 +6293,7 @@ const designRawLiteralOverrides = {
|
|
|
6286
6293
|
addTweaks: "Adicionar ajustes",
|
|
6287
6294
|
addTweakControls: "Adicionar controles de ajuste",
|
|
6288
6295
|
closeTweaks: "Fechar ajustes",
|
|
6296
|
+
tweaksDocs: "Saiba mais.",
|
|
6289
6297
|
noTweakControls: "Nenhum controle de ajuste ainda.",
|
|
6290
6298
|
extensions: "Extensões",
|
|
6291
6299
|
addExtension: "Extensão",
|
|
@@ -6446,6 +6454,7 @@ const designRawLiteralOverrides = {
|
|
|
6446
6454
|
addTweaks: "बदलाव जोड़ें",
|
|
6447
6455
|
addTweakControls: "ट्विक नियंत्रण जोड़ें",
|
|
6448
6456
|
closeTweaks: "बदलाव बंद करें",
|
|
6457
|
+
tweaksDocs: "और जानें।",
|
|
6449
6458
|
noTweakControls: "अभी तक कोई ट्विक नियंत्रण नहीं है.",
|
|
6450
6459
|
extensions: "एक्सटेंशन",
|
|
6451
6460
|
addExtension: "एक्सटेंशन",
|
|
@@ -6601,6 +6610,7 @@ const designRawLiteralOverrides = {
|
|
|
6601
6610
|
addTweaks: "أضف تعديلات",
|
|
6602
6611
|
addTweakControls: "إضافة الضوابط القرص",
|
|
6603
6612
|
closeTweaks: "إغلاق القرص",
|
|
6613
|
+
tweaksDocs: "معرفة المزيد.",
|
|
6604
6614
|
noTweakControls: "لا توجد ضوابط قرص حتى الآن.",
|
|
6605
6615
|
extensions: "الإضافات",
|
|
6606
6616
|
addExtension: "إضافة",
|
|
@@ -7709,7 +7719,7 @@ const designModeFeatureOverrides = {
|
|
|
7709
7719
|
multiScreenCanvas: {
|
|
7710
7720
|
duplicate: "複製",
|
|
7711
7721
|
fork: "分支",
|
|
7712
|
-
fullView: "
|
|
7722
|
+
fullView: "完整檢視",
|
|
7713
7723
|
preview: "預覽",
|
|
7714
7724
|
openAndDuplicate: "選取 {{display}}。使用互動模式進行聚焦捲動。",
|
|
7715
7725
|
openAndPreview: "選取 {{display}}。使用互動模式進行聚焦捲動。",
|
|
@@ -7873,7 +7883,7 @@ const designModeFeatureOverrides = {
|
|
|
7873
7883
|
multiScreenCanvas: {
|
|
7874
7884
|
duplicate: "复制",
|
|
7875
7885
|
fork: "分支",
|
|
7876
|
-
fullView: "
|
|
7886
|
+
fullView: "完整视图",
|
|
7877
7887
|
preview: "预览",
|
|
7878
7888
|
openAndDuplicate: "选择 {{display}}。使用互动模式进行聚焦滚动。",
|
|
7879
7889
|
openAndPreview: "选择 {{display}}。使用互动模式进行聚焦滚动。",
|
|
@@ -8038,7 +8048,7 @@ const designModeFeatureOverrides = {
|
|
|
8038
8048
|
multiScreenCanvas: {
|
|
8039
8049
|
duplicate: "Duplicar",
|
|
8040
8050
|
fork: "Bifurcar",
|
|
8041
|
-
fullView: "
|
|
8051
|
+
fullView: "Vista completa",
|
|
8042
8052
|
preview: "Vista previa",
|
|
8043
8053
|
openAndDuplicate:
|
|
8044
8054
|
"Selecciona {{display}}. Usa Interactuar para desplazamiento enfocado.",
|
|
@@ -8224,7 +8234,7 @@ const designModeFeatureOverrides = {
|
|
|
8224
8234
|
multiScreenCanvas: {
|
|
8225
8235
|
duplicate: "Dupliquer",
|
|
8226
8236
|
fork: "Créer une branche",
|
|
8227
|
-
fullView: "
|
|
8237
|
+
fullView: "Vue complète",
|
|
8228
8238
|
preview: "Aperçu",
|
|
8229
8239
|
openAndDuplicate:
|
|
8230
8240
|
"Sélectionner {{display}}. Utilisez Interagir pour le défilement ciblé.",
|
|
@@ -8407,7 +8417,7 @@ const designModeFeatureOverrides = {
|
|
|
8407
8417
|
multiScreenCanvas: {
|
|
8408
8418
|
duplicate: "Duplizieren",
|
|
8409
8419
|
fork: "Abzweigen",
|
|
8410
|
-
fullView: "
|
|
8420
|
+
fullView: "Vollansicht",
|
|
8411
8421
|
preview: "Vorschau",
|
|
8412
8422
|
openAndDuplicate:
|
|
8413
8423
|
"{{display}} auswählen. Verwenden Sie Interagieren zum fokussierten Scrollen.",
|
|
@@ -8595,7 +8605,7 @@ const designModeFeatureOverrides = {
|
|
|
8595
8605
|
multiScreenCanvas: {
|
|
8596
8606
|
duplicate: "複製",
|
|
8597
8607
|
fork: "分岐",
|
|
8598
|
-
fullView: "
|
|
8608
|
+
fullView: "全体表示",
|
|
8599
8609
|
preview: "プレビュー",
|
|
8600
8610
|
openAndDuplicate:
|
|
8601
8611
|
"{{display}} を選択します。集中してスクロールするには操作モードを使用。",
|
|
@@ -8778,7 +8788,7 @@ const designModeFeatureOverrides = {
|
|
|
8778
8788
|
multiScreenCanvas: {
|
|
8779
8789
|
duplicate: "복제",
|
|
8780
8790
|
fork: "분기",
|
|
8781
|
-
fullView: "
|
|
8791
|
+
fullView: "전체 보기",
|
|
8782
8792
|
preview: "미리보기",
|
|
8783
8793
|
openAndDuplicate:
|
|
8784
8794
|
"{{display}} 선택. 집중 스크롤에는 상호작용 모드를 사용하세요.",
|
|
@@ -8958,7 +8968,7 @@ const designModeFeatureOverrides = {
|
|
|
8958
8968
|
multiScreenCanvas: {
|
|
8959
8969
|
duplicate: "Duplicar",
|
|
8960
8970
|
fork: "Ramificar",
|
|
8961
|
-
fullView: "
|
|
8971
|
+
fullView: "Vista completa",
|
|
8962
8972
|
preview: "Prévia",
|
|
8963
8973
|
openAndDuplicate:
|
|
8964
8974
|
"Selecione {{display}}. Use Interagir para rolagem focada.",
|
|
@@ -9138,7 +9148,7 @@ const designModeFeatureOverrides = {
|
|
|
9138
9148
|
multiScreenCanvas: {
|
|
9139
9149
|
duplicate: "डुप्लिकेट",
|
|
9140
9150
|
fork: "फोर्क",
|
|
9141
|
-
fullView: "
|
|
9151
|
+
fullView: "पूर्ण दृश्य",
|
|
9142
9152
|
preview: "पूर्वावलोकन",
|
|
9143
9153
|
openAndDuplicate:
|
|
9144
9154
|
"{{display}} चुनें। केंद्रित स्क्रॉलिंग के लिए इंटरैक्ट मोड का उपयोग करें।",
|
|
@@ -9318,7 +9328,7 @@ const designModeFeatureOverrides = {
|
|
|
9318
9328
|
multiScreenCanvas: {
|
|
9319
9329
|
duplicate: "تكرار",
|
|
9320
9330
|
fork: "تفريع",
|
|
9321
|
-
fullView: "
|
|
9331
|
+
fullView: "عرض كامل",
|
|
9322
9332
|
preview: "معاينة",
|
|
9323
9333
|
openAndDuplicate: "حدد {{display}}. استخدم وضع التفاعل للتمرير المركّز.",
|
|
9324
9334
|
openAndPreview: "حدد {{display}}. استخدم وضع التفاعل للتمرير المركّز.",
|
|
@@ -54,6 +54,8 @@ export default createAgentChatPlugin({
|
|
|
54
54
|
|
|
55
55
|
When the user asks for a new design and the current navigation view is list, settings, design-systems, or otherwise has no designId, create a new design first. Do not reuse, delete screens from, or edit a previous design unless the user explicitly names that design or the current navigation state is an editor/present view with that designId.
|
|
56
56
|
|
|
57
|
+
Every web design must be responsive. Use mobile-first CSS, a viewport meta tag, and responsive layout changes for narrow widths; never ship a fixed-width desktop shell. Desktop is the default primary artboard: use a 1440×1024 canvas frame (or primaryViewport "desktop") unless the user explicitly asks for a mobile- or tablet-primary design. After generation, inspect desktop and mobile screenshots and correct overflow or broken reflow before reporting completion.
|
|
58
|
+
|
|
57
59
|
When the user asks to start from a template, call list-design-templates and then create-design-from-template. The copied files and canvas dimensions are already the starting point. If the user also supplied a prompt, call get-design-snapshot once and refine unlocked content with edit-design; do not call generate-design or replace the template with a fresh screen. Layers marked data-agent-native-locked="true" and their descendants must remain byte-for-byte unchanged. Ask the user to unlock one explicitly if they want it changed.
|
|
58
60
|
|
|
59
61
|
When the user asks you to refine an existing design, call view-screen if the open design is unclear, then read the live current file with get-design-snapshot before editing. For small localized changes, call edit-design with exact search/replace edits. For broad copy-only changes such as translating all visible text, call edit-design in replace-file mode with the complete updated file content from the snapshot so the HTML structure, scripts, styles, and tweaks are preserved without dozens of fragile search blocks. Do not claim the design is updated until the mutating action succeeds.
|
|
@@ -515,10 +515,10 @@ const messages = {
|
|
|
515
515
|
slackUpdateFailed: "فشل تحديث استقبال Slack",
|
|
516
516
|
slackConfigured: "تم تكوين بيانات اعتماد Slack.",
|
|
517
517
|
slackNeedsCredentials:
|
|
518
|
-
"
|
|
519
|
-
slackIntake: "استقبال Slack",
|
|
518
|
+
"يتطلب الاستقبال المخصص القديم SLACK_BOT_TOKEN وSLACK_SIGNING_SECRET. لأتمتة مراسلة Slack الجديدة، اربط مساحة عمل في الإعدادات > المراسلة.",
|
|
519
|
+
slackIntake: "استقبال Slack (قديم)",
|
|
520
520
|
slackDescription:
|
|
521
|
-
"
|
|
521
|
+
"تكامل مخصص قديم يتيح لأعضاء المؤسسة وضع مسودات البريد في قائمة الانتظار من Slack.",
|
|
522
522
|
enabled: "ممكّن",
|
|
523
523
|
disable: "تعطيل",
|
|
524
524
|
enable: "تمكين",
|
|
@@ -523,10 +523,10 @@ const messages = {
|
|
|
523
523
|
slackUpdateFailed: "Slack-Eingang konnte nicht aktualisiert werden",
|
|
524
524
|
slackConfigured: "Slack-Anmeldedaten sind konfiguriert.",
|
|
525
525
|
slackNeedsCredentials:
|
|
526
|
-
"
|
|
527
|
-
slackIntake: "Slack-Eingang",
|
|
526
|
+
"Der alte benutzerdefinierte Eingang benötigt SLACK_BOT_TOKEN und SLACK_SIGNING_SECRET. Verbinde für neue Slack-Nachrichtenautomatisierungen einen Workspace unter Einstellungen > Messaging.",
|
|
527
|
+
slackIntake: "Slack-Eingang (veraltet)",
|
|
528
528
|
slackDescription:
|
|
529
|
-
"
|
|
529
|
+
"Veraltete benutzerdefinierte Integration, mit der Organisationsmitglieder E-Mail-Entwürfe aus Slack einreihen können.",
|
|
530
530
|
enabled: "Aktiviert",
|
|
531
531
|
disable: "Deaktivieren",
|
|
532
532
|
enable: "Aktivieren",
|
|
@@ -513,9 +513,10 @@ const messages = {
|
|
|
513
513
|
slackUpdateFailed: "Failed to update Slack intake",
|
|
514
514
|
slackConfigured: "Slack credentials are configured.",
|
|
515
515
|
slackNeedsCredentials:
|
|
516
|
-
"
|
|
517
|
-
slackIntake: "Slack Intake",
|
|
518
|
-
slackDescription:
|
|
516
|
+
"Legacy custom intake requires SLACK_BOT_TOKEN and SLACK_SIGNING_SECRET. For new Slack messaging automations, connect a workspace in Settings > Messaging.",
|
|
517
|
+
slackIntake: "Slack Intake (legacy)",
|
|
518
|
+
slackDescription:
|
|
519
|
+
"Legacy custom integration that lets organization members queue email drafts from Slack.",
|
|
519
520
|
enabled: "Enabled",
|
|
520
521
|
disable: "Disable",
|
|
521
522
|
enable: "Enable",
|
|
@@ -522,10 +522,10 @@ const messages = {
|
|
|
522
522
|
slackUpdateFailed: "No se pudo actualizar la entrada de Slack",
|
|
523
523
|
slackConfigured: "Las credenciales de Slack están configuradas.",
|
|
524
524
|
slackNeedsCredentials:
|
|
525
|
-
"
|
|
526
|
-
slackIntake: "Entrada de Slack",
|
|
525
|
+
"La entrada personalizada antigua requiere SLACK_BOT_TOKEN y SLACK_SIGNING_SECRET. Para nuevas automatizaciones de mensajería de Slack, conecta un espacio de trabajo en Configuración > Mensajería.",
|
|
526
|
+
slackIntake: "Entrada de Slack (antigua)",
|
|
527
527
|
slackDescription:
|
|
528
|
-
"
|
|
528
|
+
"Integración personalizada antigua que permite poner borradores de correo en cola desde Slack.",
|
|
529
529
|
enabled: "Activado",
|
|
530
530
|
disable: "Desactivar",
|
|
531
531
|
enable: "Activar",
|
|
@@ -523,10 +523,10 @@ const messages = {
|
|
|
523
523
|
slackUpdateFailed: "Échec de la mise à jour de l’entrée Slack",
|
|
524
524
|
slackConfigured: "Les identifiants Slack sont configurés.",
|
|
525
525
|
slackNeedsCredentials:
|
|
526
|
-
"
|
|
527
|
-
slackIntake: "Entrée Slack",
|
|
526
|
+
"L’entrée personnalisée héritée nécessite SLACK_BOT_TOKEN et SLACK_SIGNING_SECRET. Pour les nouvelles automatisations de messagerie Slack, connectez un espace de travail dans Paramètres > Messagerie.",
|
|
527
|
+
slackIntake: "Entrée Slack (héritée)",
|
|
528
528
|
slackDescription:
|
|
529
|
-
"
|
|
529
|
+
"Intégration personnalisée héritée permettant de mettre en file des brouillons depuis Slack.",
|
|
530
530
|
enabled: "Activé",
|
|
531
531
|
disable: "Désactiver",
|
|
532
532
|
enable: "Activer",
|
|
@@ -516,10 +516,10 @@ const messages = {
|
|
|
516
516
|
slackUpdateFailed: "Slack intake update करने में विफल",
|
|
517
517
|
slackConfigured: "Slack credentials configured हैं।",
|
|
518
518
|
slackNeedsCredentials:
|
|
519
|
-
"
|
|
520
|
-
slackIntake: "Slack intake",
|
|
519
|
+
"Legacy custom intake के लिए SLACK_BOT_TOKEN और SLACK_SIGNING_SECRET आवश्यक हैं। नए Slack messaging automations के लिए Settings > Messaging में workspace connect करें।",
|
|
520
|
+
slackIntake: "Slack intake (legacy)",
|
|
521
521
|
slackDescription:
|
|
522
|
-
"
|
|
522
|
+
"Legacy custom integration जो organization members को Slack से email drafts queue करने देता है।",
|
|
523
523
|
enabled: "सक्षम",
|
|
524
524
|
disable: "अक्षम करें",
|
|
525
525
|
enable: "सक्षम करें",
|
|
@@ -516,10 +516,10 @@ const messages = {
|
|
|
516
516
|
slackUpdateFailed: "Slack 取り込みを更新できませんでした",
|
|
517
517
|
slackConfigured: "Slack 認証情報は設定済みです。",
|
|
518
518
|
slackNeedsCredentials:
|
|
519
|
-
"
|
|
520
|
-
slackIntake: "Slack
|
|
519
|
+
"従来のカスタム取り込みには SLACK_BOT_TOKEN と SLACK_SIGNING_SECRET が必要です。新しい Slack メッセージ自動化では、設定 > メッセージングでワークスペースを接続してください。",
|
|
520
|
+
slackIntake: "Slack 取り込み(レガシー)",
|
|
521
521
|
slackDescription:
|
|
522
|
-
"組織メンバーが Slack
|
|
522
|
+
"組織メンバーが Slack からメール下書きをキューに入れられる従来のカスタム連携です。",
|
|
523
523
|
enabled: "有効",
|
|
524
524
|
disable: "無効化",
|
|
525
525
|
enable: "有効化",
|
|
@@ -517,10 +517,10 @@ const messages = {
|
|
|
517
517
|
slackUpdateFailed: "Slack 수신 설정을 업데이트하지 못했습니다",
|
|
518
518
|
slackConfigured: "Slack 자격 증명이 구성되었습니다.",
|
|
519
519
|
slackNeedsCredentials:
|
|
520
|
-
"
|
|
521
|
-
slackIntake: "Slack 수신",
|
|
520
|
+
"레거시 사용자 지정 수신에는 SLACK_BOT_TOKEN 및 SLACK_SIGNING_SECRET이 필요합니다. 새 Slack 메시징 자동화는 설정 > 메시징에서 워크스페이스를 연결하세요.",
|
|
521
|
+
slackIntake: "Slack 수신(레거시)",
|
|
522
522
|
slackDescription:
|
|
523
|
-
"조직 구성원이 Slack에서 이메일 초안을 대기열에 추가할 수
|
|
523
|
+
"조직 구성원이 Slack에서 이메일 초안을 대기열에 추가할 수 있는 레거시 사용자 지정 통합입니다.",
|
|
524
524
|
enabled: "활성화됨",
|
|
525
525
|
disable: "비활성화",
|
|
526
526
|
enable: "활성화",
|
|
@@ -521,10 +521,10 @@ const messages = {
|
|
|
521
521
|
slackUpdateFailed: "Falha ao atualizar entrada do Slack",
|
|
522
522
|
slackConfigured: "As credenciais do Slack estão configuradas.",
|
|
523
523
|
slackNeedsCredentials:
|
|
524
|
-
"
|
|
525
|
-
slackIntake: "Entrada do Slack",
|
|
524
|
+
"A entrada personalizada legada requer SLACK_BOT_TOKEN e SLACK_SIGNING_SECRET. Para novas automações de mensagens do Slack, conecte um workspace em Configurações > Mensagens.",
|
|
525
|
+
slackIntake: "Entrada do Slack (legada)",
|
|
526
526
|
slackDescription:
|
|
527
|
-
"
|
|
527
|
+
"Integração personalizada legada que permite colocar rascunhos de email na fila pelo Slack.",
|
|
528
528
|
enabled: "Ativado",
|
|
529
529
|
disable: "Desativar",
|
|
530
530
|
enable: "Ativar",
|
|
@@ -505,9 +505,9 @@ const messages = {
|
|
|
505
505
|
slackUpdateFailed: "更新 Slack 收件入口失败",
|
|
506
506
|
slackConfigured: "Slack 凭据已配置。",
|
|
507
507
|
slackNeedsCredentials:
|
|
508
|
-
"
|
|
509
|
-
slackIntake: "Slack
|
|
510
|
-
slackDescription: "允许组织成员从 Slack
|
|
508
|
+
"旧版自定义收件入口需要 SLACK_BOT_TOKEN 和 SLACK_SIGNING_SECRET。新的 Slack 消息自动化请在设置 > 消息中连接工作区。",
|
|
509
|
+
slackIntake: "Slack 收件入口(旧版)",
|
|
510
|
+
slackDescription: "允许组织成员从 Slack 排队邮件草稿的旧版自定义集成。",
|
|
511
511
|
enabled: "已启用",
|
|
512
512
|
disable: "停用",
|
|
513
513
|
enable: "启用",
|
|
@@ -502,9 +502,9 @@ const messages = {
|
|
|
502
502
|
slackUpdateFailed: "更新 Slack 收件入口失敗",
|
|
503
503
|
slackConfigured: "Slack 憑證已設定。",
|
|
504
504
|
slackNeedsCredentials:
|
|
505
|
-
"
|
|
506
|
-
slackIntake: "Slack
|
|
507
|
-
slackDescription: "允許組織成員從 Slack
|
|
505
|
+
"舊版自訂收件入口需要 SLACK_BOT_TOKEN 和 SLACK_SIGNING_SECRET。新的 Slack 訊息自動化請在設定 > 訊息中連接工作區。",
|
|
506
|
+
slackIntake: "Slack 收件入口(舊版)",
|
|
507
|
+
slackDescription: "允許組織成員從 Slack 排隊郵件草稿的舊版自訂整合。",
|
|
508
508
|
enabled: "已啟用",
|
|
509
509
|
disable: "停用",
|
|
510
510
|
enable: "啟用",
|
|
@@ -9,16 +9,17 @@ export const envKeys: EnvKeyConfig[] = [
|
|
|
9
9
|
},
|
|
10
10
|
{
|
|
11
11
|
key: "SLACK_BOT_TOKEN",
|
|
12
|
-
label: "Slack Bot Token",
|
|
12
|
+
label: "Slack Bot Token (legacy intake)",
|
|
13
13
|
required: false,
|
|
14
14
|
helpText:
|
|
15
|
-
"
|
|
15
|
+
"Legacy single-workspace token for custom Slack draft intake. New messaging automations should connect Slack in Settings > Messaging. Needs chat:write and users:read.email.",
|
|
16
16
|
},
|
|
17
17
|
{
|
|
18
18
|
key: "SLACK_SIGNING_SECRET",
|
|
19
|
-
label: "Slack Signing Secret",
|
|
19
|
+
label: "Slack Signing Secret (legacy intake)",
|
|
20
20
|
required: false,
|
|
21
|
-
helpText:
|
|
21
|
+
helpText:
|
|
22
|
+
"Used only to verify webhooks for the legacy custom Slack draft intake.",
|
|
22
23
|
},
|
|
23
24
|
{
|
|
24
25
|
key: "ANTHROPIC_API_KEY",
|
|
@@ -77,7 +77,7 @@
|
|
|
77
77
|
"@react-router/fs-routes": "^8.1.0",
|
|
78
78
|
"@tailwindcss/typography": "^0.5.20",
|
|
79
79
|
"@tailwindcss/vite": "catalog:",
|
|
80
|
-
"@tanstack/react-query": "
|
|
80
|
+
"@tanstack/react-query": "5.101.2",
|
|
81
81
|
"@types/node": "^24.2.1",
|
|
82
82
|
"@types/react": "catalog:",
|
|
83
83
|
"@types/react-dom": "catalog:",
|
package/dist/a2a/client.d.ts
CHANGED
|
@@ -114,6 +114,13 @@ export declare function callAgent(url: string, text: string, opts?: {
|
|
|
114
114
|
timeoutMs?: number;
|
|
115
115
|
/** Poll interval for async calls. Primarily useful for tests/retries. */
|
|
116
116
|
pollIntervalMs?: number;
|
|
117
|
+
/**
|
|
118
|
+
* Return receiver-verified artifact text from the last polled task when
|
|
119
|
+
* the call times out. Defaults to true for backwards compatibility.
|
|
120
|
+
* Callers that can continue polling the remote task separately should set
|
|
121
|
+
* this to false so the A2ATaskTimeoutError (and its taskId) is preserved.
|
|
122
|
+
*/
|
|
123
|
+
returnRecoverableArtifactsOnTimeout?: boolean;
|
|
117
124
|
/**
|
|
118
125
|
* Called with each successfully polled task while an async call is still
|
|
119
126
|
* in flight (see `A2AClient.sendAndWait`). Fires once per real poll
|
package/dist/a2a/client.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"client.d.ts","sourceRoot":"","sources":["../../src/a2a/client.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"client.d.ts","sourceRoot":"","sources":["../../src/a2a/client.ts"],"names":[],"mappings":"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"}
|
package/dist/a2a/client.js
CHANGED
|
@@ -450,7 +450,8 @@ export async function callAgent(url, text, opts) {
|
|
|
450
450
|
return "";
|
|
451
451
|
}
|
|
452
452
|
catch (err) {
|
|
453
|
-
if (
|
|
453
|
+
if (opts?.returnRecoverableArtifactsOnTimeout !== false &&
|
|
454
|
+
err instanceof A2ATaskTimeoutError) {
|
|
454
455
|
const recoverableText = extractRecoverableArtifactText(err.lastTask);
|
|
455
456
|
if (recoverableText)
|
|
456
457
|
return recoverableText;
|