@agent-native/toolkit 0.212.1 → 0.214.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/agent-native.eject.json +9 -0
- package/dist/app/agentkit/react/components.d.ts.map +1 -1
- package/dist/app/agentkit/react/components.js +10 -4
- package/dist/app/agentkit/react/components.js.map +1 -1
- package/dist/app/agentkit/react/context.d.ts +13 -1
- package/dist/app/agentkit/react/context.d.ts.map +1 -1
- package/dist/app/agentkit/react/context.js +3 -1
- package/dist/app/agentkit/react/context.js.map +1 -1
- package/dist/app/agentkit/react/index.d.ts +1 -0
- package/dist/app/agentkit/react/index.d.ts.map +1 -1
- package/dist/app/agentkit/react/index.js +1 -0
- package/dist/app/agentkit/react/index.js.map +1 -1
- package/dist/app/agentkit/react/message-content-order.d.ts +21 -0
- package/dist/app/agentkit/react/message-content-order.d.ts.map +1 -0
- package/dist/app/agentkit/react/message-content-order.js +173 -0
- package/dist/app/agentkit/react/message-content-order.js.map +1 -0
- package/dist/app/agentkit/react/root.d.ts +3 -1
- package/dist/app/agentkit/react/root.d.ts.map +1 -1
- package/dist/app/agentkit/react/root.js +2 -2
- package/dist/app/agentkit/react/root.js.map +1 -1
- package/dist/app/agentkit/react/styles.css +2 -2
- package/dist/app/chat/AgentKitAssistantChat.d.ts.map +1 -1
- package/dist/app/chat/AgentKitAssistantChat.js +7 -2
- package/dist/app/chat/AgentKitAssistantChat.js.map +1 -1
- package/dist/app/chat/AgentPanel.d.ts +14 -2
- package/dist/app/chat/AgentPanel.d.ts.map +1 -1
- package/dist/app/chat/AgentPanel.js +22 -5
- package/dist/app/chat/AgentPanel.js.map +1 -1
- package/dist/app/chat/chat/surface-types.d.ts +8 -0
- package/dist/app/chat/chat/surface-types.d.ts.map +1 -1
- package/dist/app/chat/chat/surface-types.js.map +1 -1
- package/dist/app/chat/chat/widgets/DataChartRenderer.d.ts.map +1 -1
- package/dist/app/chat/chat/widgets/DataChartRenderer.js +127 -30
- package/dist/app/chat/chat/widgets/DataChartRenderer.js.map +1 -1
- package/dist/app/chat/chat/widgets/DataChartWidget.d.ts +3 -2
- package/dist/app/chat/chat/widgets/DataChartWidget.d.ts.map +1 -1
- package/dist/app/chat/chat/widgets/DataChartWidget.js +14 -9
- package/dist/app/chat/chat/widgets/DataChartWidget.js.map +1 -1
- package/dist/app/chat/chat/widgets/DataInsightsWidget.js +1 -1
- package/dist/app/chat/chat/widgets/DataInsightsWidget.js.map +1 -1
- package/dist/app/chat/chat/widgets/DataTableWidget.d.ts +3 -2
- package/dist/app/chat/chat/widgets/DataTableWidget.d.ts.map +1 -1
- package/dist/app/chat/chat/widgets/DataTableWidget.js +10 -66
- package/dist/app/chat/chat/widgets/DataTableWidget.js.map +1 -1
- package/dist/app/chat/chat/widgets/DataWidgetDisplayControls.d.ts +11 -0
- package/dist/app/chat/chat/widgets/DataWidgetDisplayControls.d.ts.map +1 -0
- package/dist/app/chat/chat/widgets/DataWidgetDisplayControls.js +131 -0
- package/dist/app/chat/chat/widgets/DataWidgetDisplayControls.js.map +1 -0
- package/dist/app/chat/chat/widgets/builtin-tool-renderers.js +2 -2
- package/dist/app/chat/chat/widgets/builtin-tool-renderers.js.map +1 -1
- package/dist/app/chat/mcp-apps/McpAppRenderer.d.ts.map +1 -1
- package/dist/app/chat/mcp-apps/McpAppRenderer.js +6 -5
- package/dist/app/chat/mcp-apps/McpAppRenderer.js.map +1 -1
- package/dist/app/chat/mcp-apps/mcp-app-theme.d.ts +2 -0
- package/dist/app/chat/mcp-apps/mcp-app-theme.d.ts.map +1 -0
- package/dist/app/chat/mcp-apps/mcp-app-theme.js +11 -0
- package/dist/app/chat/mcp-apps/mcp-app-theme.js.map +1 -0
- package/dist/app/i18n/catalogs/ar-SA.d.ts.map +1 -1
- package/dist/app/i18n/catalogs/ar-SA.js +10 -0
- package/dist/app/i18n/catalogs/ar-SA.js.map +1 -1
- package/dist/app/i18n/catalogs/de-DE.d.ts.map +1 -1
- package/dist/app/i18n/catalogs/de-DE.js +10 -0
- package/dist/app/i18n/catalogs/de-DE.js.map +1 -1
- package/dist/app/i18n/catalogs/en-US.d.ts +10 -0
- package/dist/app/i18n/catalogs/en-US.d.ts.map +1 -1
- package/dist/app/i18n/catalogs/en-US.js +10 -0
- package/dist/app/i18n/catalogs/en-US.js.map +1 -1
- package/dist/app/i18n/catalogs/es-ES.d.ts.map +1 -1
- package/dist/app/i18n/catalogs/es-ES.js +10 -0
- package/dist/app/i18n/catalogs/es-ES.js.map +1 -1
- package/dist/app/i18n/catalogs/fr-FR.d.ts.map +1 -1
- package/dist/app/i18n/catalogs/fr-FR.js +10 -0
- package/dist/app/i18n/catalogs/fr-FR.js.map +1 -1
- package/dist/app/i18n/catalogs/hi-IN.d.ts.map +1 -1
- package/dist/app/i18n/catalogs/hi-IN.js +10 -0
- package/dist/app/i18n/catalogs/hi-IN.js.map +1 -1
- package/dist/app/i18n/catalogs/ja-JP.d.ts.map +1 -1
- package/dist/app/i18n/catalogs/ja-JP.js +10 -0
- package/dist/app/i18n/catalogs/ja-JP.js.map +1 -1
- package/dist/app/i18n/catalogs/ko-KR.d.ts.map +1 -1
- package/dist/app/i18n/catalogs/ko-KR.js +10 -0
- package/dist/app/i18n/catalogs/ko-KR.js.map +1 -1
- package/dist/app/i18n/catalogs/pt-BR.d.ts.map +1 -1
- package/dist/app/i18n/catalogs/pt-BR.js +10 -0
- package/dist/app/i18n/catalogs/pt-BR.js.map +1 -1
- package/dist/app/i18n/catalogs/zh-CN.d.ts.map +1 -1
- package/dist/app/i18n/catalogs/zh-CN.js +10 -0
- package/dist/app/i18n/catalogs/zh-CN.js.map +1 -1
- package/dist/app/i18n/catalogs/zh-TW.d.ts.map +1 -1
- package/dist/app/i18n/catalogs/zh-TW.js +10 -0
- package/dist/app/i18n/catalogs/zh-TW.js.map +1 -1
- package/dist/app/org/AuthenticationSection.d.ts +3 -0
- package/dist/app/org/AuthenticationSection.d.ts.map +1 -1
- package/dist/app/org/AuthenticationSection.js +9 -3
- package/dist/app/org/AuthenticationSection.js.map +1 -1
- package/dist/app/org/pages/OrgAuthenticationPage.d.ts.map +1 -1
- package/dist/app/org/pages/OrgAuthenticationPage.js +2 -2
- package/dist/app/org/pages/OrgAuthenticationPage.js.map +1 -1
- package/dist/app/providers/AppProviders.d.ts +2 -1
- package/dist/app/providers/AppProviders.d.ts.map +1 -1
- package/dist/app/providers/AppProviders.js +4 -3
- package/dist/app/providers/AppProviders.js.map +1 -1
- package/dist/app/providers/ThemeFamilySync.d.ts +2 -0
- package/dist/app/providers/ThemeFamilySync.d.ts.map +1 -0
- package/dist/app/providers/ThemeFamilySync.js +6 -0
- package/dist/app/providers/ThemeFamilySync.js.map +1 -0
- package/dist/app/settings/account/PreferencesSettings.d.ts.map +1 -1
- package/dist/app/settings/account/PreferencesSettings.js +2 -1
- package/dist/app/settings/account/PreferencesSettings.js.map +1 -1
- package/dist/app/settings/account/ThemeFamilySettings.d.ts +2 -0
- package/dist/app/settings/account/ThemeFamilySettings.d.ts.map +1 -0
- package/dist/app/settings/account/ThemeFamilySettings.js +31 -0
- package/dist/app/settings/account/ThemeFamilySettings.js.map +1 -0
- package/dist/app/settings/account/search-entries.d.ts.map +1 -1
- package/dist/app/settings/account/search-entries.js +6 -0
- package/dist/app/settings/account/search-entries.js.map +1 -1
- package/dist/app/shared/DefaultSpinner.d.ts.map +1 -1
- package/dist/app/shared/DefaultSpinner.js +4 -5
- package/dist/app/shared/DefaultSpinner.js.map +1 -1
- package/dist/app/shared/ErrorBoundary.d.ts +1 -0
- package/dist/app/shared/ErrorBoundary.d.ts.map +1 -1
- package/dist/app/shared/ErrorBoundary.js +27 -12
- package/dist/app/shared/ErrorBoundary.js.map +1 -1
- package/dist/app/shared/PoweredByBadge.d.ts.map +1 -1
- package/dist/app/shared/PoweredByBadge.js +8 -49
- package/dist/app/shared/PoweredByBadge.js.map +1 -1
- package/dist/app/styles/agent-conversation.css +0 -23
- package/dist/app/styles/agent-native.css +1 -1
- package/dist/app/styles/theme-families.css +66 -0
- package/dist/composer/ComposerContextBanner.d.ts +22 -0
- package/dist/composer/ComposerContextBanner.d.ts.map +1 -0
- package/dist/composer/ComposerContextBanner.js +9 -0
- package/dist/composer/ComposerContextBanner.js.map +1 -0
- package/dist/composer/ComposerModePicker.d.ts +26 -0
- package/dist/composer/ComposerModePicker.d.ts.map +1 -0
- package/dist/composer/ComposerModePicker.js +14 -0
- package/dist/composer/ComposerModePicker.js.map +1 -0
- package/dist/composer/index.d.ts +2 -0
- package/dist/composer/index.d.ts.map +1 -1
- package/dist/composer/index.js +2 -0
- package/dist/composer/index.js.map +1 -1
- package/dist/styles.css +1 -0
- package/package.json +3 -3
- package/src/app/agentkit/react/components.spec.tsx +12 -0
- package/src/app/agentkit/react/components.tsx +41 -22
- package/src/app/agentkit/react/context.tsx +17 -0
- package/src/app/agentkit/react/index.ts +1 -0
- package/src/app/agentkit/react/lifecycle.spec.tsx +116 -1
- package/src/app/agentkit/react/message-content-order.spec.ts +190 -0
- package/src/app/agentkit/react/message-content-order.ts +246 -0
- package/src/app/agentkit/react/root.tsx +4 -0
- package/src/app/agentkit/react/styles.css +2 -2
- package/src/app/chat/AgentKitAssistantChat.spec.tsx +19 -0
- package/src/app/chat/AgentKitAssistantChat.tsx +10 -1
- package/src/app/chat/AgentPanel.header.spec.ts +72 -14
- package/src/app/chat/AgentPanel.tsx +97 -53
- package/src/app/chat/chat/surface-types.ts +8 -0
- package/src/app/chat/chat/widgets/DataChartRenderer.spec.tsx +217 -0
- package/src/app/chat/chat/widgets/DataChartRenderer.tsx +306 -68
- package/src/app/chat/chat/widgets/DataChartWidget.spec.tsx +329 -0
- package/src/app/chat/chat/widgets/DataChartWidget.ssr.spec.tsx +25 -0
- package/src/app/chat/chat/widgets/DataChartWidget.tsx +48 -33
- package/src/app/chat/chat/widgets/DataInsightsWidget.tsx +2 -2
- package/src/app/chat/chat/widgets/DataTableWidget.spec.tsx +37 -3
- package/src/app/chat/chat/widgets/DataTableWidget.tsx +22 -86
- package/src/app/chat/chat/widgets/DataWidgetDisplayControls.tsx +301 -0
- package/src/app/chat/chat/widgets/builtin-tool-renderers.tsx +5 -5
- package/src/app/chat/mcp-apps/McpAppRenderer.tsx +10 -5
- package/src/app/chat/mcp-apps/mcp-app-theme.spec.ts +30 -0
- package/src/app/chat/mcp-apps/mcp-app-theme.ts +11 -0
- package/src/app/i18n/catalogs/ar-SA.ts +12 -0
- package/src/app/i18n/catalogs/de-DE.ts +13 -0
- package/src/app/i18n/catalogs/en-US.ts +12 -0
- package/src/app/i18n/catalogs/es-ES.ts +14 -0
- package/src/app/i18n/catalogs/fr-FR.ts +14 -0
- package/src/app/i18n/catalogs/hi-IN.ts +12 -0
- package/src/app/i18n/catalogs/ja-JP.ts +12 -0
- package/src/app/i18n/catalogs/ko-KR.ts +12 -0
- package/src/app/i18n/catalogs/pt-BR.ts +13 -0
- package/src/app/i18n/catalogs/zh-CN.ts +11 -0
- package/src/app/i18n/catalogs/zh-TW.ts +12 -0
- package/src/app/org/AuthenticationSection.spec.tsx +62 -0
- package/src/app/org/AuthenticationSection.tsx +47 -1
- package/src/app/org/pages/OrgAuthenticationPage.tsx +4 -0
- package/src/app/org/pages/OrgSettingsPages.spec.tsx +3 -0
- package/src/app/providers/AppProviders.spec.tsx +71 -0
- package/src/app/providers/AppProviders.tsx +10 -0
- package/src/app/providers/ThemeFamilySync.tsx +6 -0
- package/src/app/settings/account/PreferencesSettings.spec.tsx +13 -2
- package/src/app/settings/account/PreferencesSettings.tsx +8 -0
- package/src/app/settings/account/ThemeFamilySettings.tsx +61 -0
- package/src/app/settings/account/search-entries.ts +6 -0
- package/src/app/shared/DefaultSpinner.spec.tsx +14 -0
- package/src/app/shared/DefaultSpinner.tsx +4 -5
- package/src/app/shared/ErrorBoundary.spec.tsx +45 -2
- package/src/app/shared/ErrorBoundary.tsx +37 -12
- package/src/app/shared/PoweredByBadge.spec.tsx +16 -0
- package/src/app/shared/PoweredByBadge.tsx +8 -50
- package/src/app/styles/agent-conversation.css +0 -23
- package/src/app/styles/agent-native.css +1 -1
- package/src/app/styles/agent-native.spec.ts +18 -0
- package/src/app/styles/theme-families.css +66 -0
- package/src/app/styles/theme-families.spec.ts +29 -0
- package/src/composer/ComposerContextBanner.spec.tsx +74 -0
- package/src/composer/ComposerContextBanner.tsx +72 -0
- package/src/composer/ComposerModePicker.spec.tsx +101 -0
- package/src/composer/ComposerModePicker.tsx +98 -0
- package/src/composer/index.ts +9 -0
- package/src/styles.css +1 -0
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/composer/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAE,MAAM,+BAA+B,CAAC;AAC9D,OAAO,EACL,yBAAyB,EACzB,sBAAsB,GACvB,MAAM,uBAAuB,CAAC;AAC/B,OAAO,EACL,mBAAmB,EACnB,0BAA0B,EAC1B,KAAK,+BAA+B,EACpC,KAAK,2BAA2B,EAChC,6BAA6B,EAC7B,KAAK,wBAAwB,EAC7B,KAAK,uBAAuB,EAC5B,KAAK,yBAAyB,EAC9B,KAAK,2BAA2B,EAChC,KAAK,2BAA2B,EAChC,KAAK,yBAAyB,EAC9B,KAAK,4BAA4B,EACjC,KAAK,2BAA2B,EAChC,KAAK,8BAA8B,EACnC,KAAK,iCAAiC,GACvC,MAAM,0BAA0B,CAAC;AAClC,OAAO,EAAE,2BAA2B,EAAE,MAAM,kCAAkC,CAAC;AAC/E,OAAO,EACL,4BAA4B,EAC5B,mBAAmB,EACnB,4BAA4B,EAC5B,oBAAoB,EACpB,0BAA0B,EAC1B,0BAA0B,EAC1B,KAAK,uBAAuB,GAC7B,MAAM,oBAAoB,CAAC;AAC5B,YAAY,EAAE,oBAAoB,EAAE,MAAM,uBAAuB,CAAC;AAClE,OAAO,EAAE,cAAc,EAAE,MAAM,gCAAgC,CAAC;AAChE,OAAO,EAAE,gBAAgB,EAAE,MAAM,kCAAkC,CAAC;AACpE,OAAO,EACL,kBAAkB,EAClB,KAAK,uBAAuB,GAC7B,MAAM,yBAAyB,CAAC;AACjC,OAAO,EACL,kBAAkB,EAClB,qBAAqB,EACrB,wBAAwB,EACxB,KAAK,uBAAuB,EAC5B,KAAK,oBAAoB,EACzB,KAAK,mBAAmB,GACzB,MAAM,yBAAyB,CAAC;AACjC,OAAO,EACL,cAAc,EACd,wBAAwB,EACxB,8BAA8B,EAC9B,kCAAkC,EAClC,oBAAoB,EACpB,sBAAsB,EACtB,oBAAoB,EACpB,mCAAmC,EACnC,wCAAwC,EACxC,qBAAqB,EACrB,iBAAiB,EACjB,KAAK,qBAAqB,EAC1B,KAAK,oBAAoB,EACzB,KAAK,oBAAoB,EACzB,KAAK,qBAAqB,EAC1B,KAAK,qBAAqB,EAC1B,KAAK,mBAAmB,EACxB,KAAK,2BAA2B,GACjC,MAAM,qBAAqB,CAAC;AAC7B,OAAO,EACL,mBAAmB,EACnB,WAAW,EACX,0BAA0B,EAC1B,KAAK,sBAAsB,GAC5B,MAAM,sBAAsB,CAAC;AAC9B,OAAO,EACL,cAAc,EACd,KAAK,mBAAmB,EACxB,KAAK,kBAAkB,EACvB,KAAK,2BAA2B,GACjC,MAAM,qBAAqB,CAAC;AAC7B,OAAO,EACL,SAAS,EACT,KAAK,cAAc,EACnB,KAAK,gBAAgB,GACtB,MAAM,gBAAgB,CAAC;AACxB,OAAO,EACL,kBAAkB,EAClB,KAAK,uBAAuB,EAC5B,KAAK,wBAAwB,EAC7B,KAAK,yBAAyB,EAC9B,KAAK,gBAAgB,EACrB,KAAK,sBAAsB,GAC5B,MAAM,yBAAyB,CAAC;AACjC,OAAO,EAAE,mBAAmB,EAAE,MAAM,6BAA6B,CAAC;AAClE,YAAY,EAAE,2BAA2B,EAAE,MAAM,uBAAuB,CAAC;AACzE,OAAO,EACL,qBAAqB,EACrB,sBAAsB,EACtB,KAAK,qBAAqB,EAC1B,KAAK,0BAA0B,EAC/B,KAAK,2BAA2B,EAChC,KAAK,+BAA+B,EACpC,KAAK,8BAA8B,EACnC,KAAK,8BAA8B,EACnC,KAAK,sBAAsB,GAC5B,MAAM,wBAAwB,CAAC;AAChC,OAAO,EACL,0BAA0B,EAC1B,wCAAwC,EACxC,wBAAwB,EACxB,iCAAiC,EACjC,wBAAwB,EACxB,4BAA4B,EAC5B,yBAAyB,EACzB,yBAAyB,EACzB,oBAAoB,EACpB,wBAAwB,EACxB,4BAA4B,EAC5B,KAAK,oBAAoB,EACzB,KAAK,8BAA8B,EACnC,KAAK,0BAA0B,EAC/B,KAAK,uBAAuB,GAC7B,MAAM,2BAA2B,CAAC;AACnC,OAAO,EACL,mCAAmC,EACnC,kCAAkC,EAClC,+BAA+B,EAC/B,2BAA2B,EAC3B,2BAA2B,EAC3B,yBAAyB,EACzB,KAAK,qBAAqB,EAC1B,KAAK,gCAAgC,GACtC,MAAM,yBAAyB,CAAC;AACjC,OAAO,EAAE,WAAW,EAAE,KAAK,gBAAgB,EAAE,MAAM,kBAAkB,CAAC;AACtE,OAAO,EAAE,cAAc,EAAE,MAAM,qBAAqB,CAAC;AACrD,OAAO,EAAE,gBAAgB,EAAE,MAAM,yBAAyB,CAAC;AAC3D,OAAO,EACL,+BAA+B,EAC/B,0BAA0B,EAC1B,KAAK,uBAAuB,EAC5B,KAAK,iBAAiB,GACvB,MAAM,uBAAuB,CAAC;AAC/B,YAAY,EACV,0BAA0B,EAC1B,UAAU,EACV,WAAW,EACX,WAAW,EACX,gBAAgB,EAChB,sBAAsB,EACtB,SAAS,EACT,YAAY,GACb,MAAM,YAAY,CAAC"}
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/composer/index.ts"],"names":[],"mappings":"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"}
|
package/dist/composer/index.js
CHANGED
|
@@ -1,4 +1,6 @@
|
|
|
1
1
|
export { FileReference } from "./extensions/FileReference.js";
|
|
2
|
+
export { ComposerContextBanner, } from "./ComposerContextBanner.js";
|
|
3
|
+
export { ComposerModePicker, } from "./ComposerModePicker.js";
|
|
2
4
|
export { useComposerDefaultActions, mergeComposerMenuItems, } from "./ComposerPlusMenu.js";
|
|
3
5
|
export { ComposerContextMenu, ComposerContextSearchInput, getComposerContextMenuEntries, } from "./ComposerContextMenu.js";
|
|
4
6
|
export { ComposerContextPickerDialog } from "./ComposerContextPickerDialog.js";
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/composer/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAE,MAAM,+BAA+B,CAAC;AAC9D,OAAO,EACL,yBAAyB,EACzB,sBAAsB,GACvB,MAAM,uBAAuB,CAAC;AAC/B,OAAO,EACL,mBAAmB,EACnB,0BAA0B,EAG1B,6BAA6B,GAW9B,MAAM,0BAA0B,CAAC;AAClC,OAAO,EAAE,2BAA2B,EAAE,MAAM,kCAAkC,CAAC;AAC/E,OAAO,EACL,4BAA4B,EAC5B,mBAAmB,EACnB,4BAA4B,EAC5B,oBAAoB,EACpB,0BAA0B,EAC1B,0BAA0B,GAE3B,MAAM,oBAAoB,CAAC;AAE5B,OAAO,EAAE,cAAc,EAAE,MAAM,gCAAgC,CAAC;AAChE,OAAO,EAAE,gBAAgB,EAAE,MAAM,kCAAkC,CAAC;AACpE,OAAO,EACL,kBAAkB,GAEnB,MAAM,yBAAyB,CAAC;AACjC,OAAO,EACL,kBAAkB,EAClB,qBAAqB,EACrB,wBAAwB,GAIzB,MAAM,yBAAyB,CAAC;AACjC,OAAO,EACL,cAAc,EACd,wBAAwB,EACxB,8BAA8B,EAC9B,kCAAkC,EAClC,oBAAoB,EACpB,sBAAsB,EACtB,oBAAoB,EACpB,mCAAmC,EACnC,wCAAwC,EACxC,qBAAqB,EACrB,iBAAiB,GAQlB,MAAM,qBAAqB,CAAC;AAC7B,OAAO,EACL,mBAAmB,EACnB,WAAW,EACX,0BAA0B,GAE3B,MAAM,sBAAsB,CAAC;AAC9B,OAAO,EACL,cAAc,GAIf,MAAM,qBAAqB,CAAC;AAC7B,OAAO,EACL,SAAS,GAGV,MAAM,gBAAgB,CAAC;AACxB,OAAO,EACL,kBAAkB,GAMnB,MAAM,yBAAyB,CAAC;AACjC,OAAO,EAAE,mBAAmB,EAAE,MAAM,6BAA6B,CAAC;AAElE,OAAO,EACL,qBAAqB,EACrB,sBAAsB,GAQvB,MAAM,wBAAwB,CAAC;AAChC,OAAO,EACL,0BAA0B,EAC1B,wCAAwC,EACxC,wBAAwB,EACxB,iCAAiC,EACjC,wBAAwB,EACxB,4BAA4B,EAC5B,yBAAyB,EACzB,yBAAyB,EACzB,oBAAoB,EACpB,wBAAwB,EACxB,4BAA4B,GAK7B,MAAM,2BAA2B,CAAC;AACnC,OAAO,EACL,mCAAmC,EACnC,kCAAkC,EAClC,+BAA+B,EAC/B,2BAA2B,EAC3B,2BAA2B,EAC3B,yBAAyB,GAG1B,MAAM,yBAAyB,CAAC;AACjC,OAAO,EAAE,WAAW,EAAyB,MAAM,kBAAkB,CAAC;AACtE,OAAO,EAAE,cAAc,EAAE,MAAM,qBAAqB,CAAC;AACrD,OAAO,EAAE,gBAAgB,EAAE,MAAM,yBAAyB,CAAC;AAC3D,OAAO,EACL,+BAA+B,EAC/B,0BAA0B,GAG3B,MAAM,uBAAuB,CAAC"}
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/composer/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAE,MAAM,+BAA+B,CAAC;AAC9D,OAAO,EACL,qBAAqB,GAEtB,MAAM,4BAA4B,CAAC;AACpC,OAAO,EACL,kBAAkB,GAGnB,MAAM,yBAAyB,CAAC;AACjC,OAAO,EACL,yBAAyB,EACzB,sBAAsB,GACvB,MAAM,uBAAuB,CAAC;AAC/B,OAAO,EACL,mBAAmB,EACnB,0BAA0B,EAG1B,6BAA6B,GAW9B,MAAM,0BAA0B,CAAC;AAClC,OAAO,EAAE,2BAA2B,EAAE,MAAM,kCAAkC,CAAC;AAC/E,OAAO,EACL,4BAA4B,EAC5B,mBAAmB,EACnB,4BAA4B,EAC5B,oBAAoB,EACpB,0BAA0B,EAC1B,0BAA0B,GAE3B,MAAM,oBAAoB,CAAC;AAE5B,OAAO,EAAE,cAAc,EAAE,MAAM,gCAAgC,CAAC;AAChE,OAAO,EAAE,gBAAgB,EAAE,MAAM,kCAAkC,CAAC;AACpE,OAAO,EACL,kBAAkB,GAEnB,MAAM,yBAAyB,CAAC;AACjC,OAAO,EACL,kBAAkB,EAClB,qBAAqB,EACrB,wBAAwB,GAIzB,MAAM,yBAAyB,CAAC;AACjC,OAAO,EACL,cAAc,EACd,wBAAwB,EACxB,8BAA8B,EAC9B,kCAAkC,EAClC,oBAAoB,EACpB,sBAAsB,EACtB,oBAAoB,EACpB,mCAAmC,EACnC,wCAAwC,EACxC,qBAAqB,EACrB,iBAAiB,GAQlB,MAAM,qBAAqB,CAAC;AAC7B,OAAO,EACL,mBAAmB,EACnB,WAAW,EACX,0BAA0B,GAE3B,MAAM,sBAAsB,CAAC;AAC9B,OAAO,EACL,cAAc,GAIf,MAAM,qBAAqB,CAAC;AAC7B,OAAO,EACL,SAAS,GAGV,MAAM,gBAAgB,CAAC;AACxB,OAAO,EACL,kBAAkB,GAMnB,MAAM,yBAAyB,CAAC;AACjC,OAAO,EAAE,mBAAmB,EAAE,MAAM,6BAA6B,CAAC;AAElE,OAAO,EACL,qBAAqB,EACrB,sBAAsB,GAQvB,MAAM,wBAAwB,CAAC;AAChC,OAAO,EACL,0BAA0B,EAC1B,wCAAwC,EACxC,wBAAwB,EACxB,iCAAiC,EACjC,wBAAwB,EACxB,4BAA4B,EAC5B,yBAAyB,EACzB,yBAAyB,EACzB,oBAAoB,EACpB,wBAAwB,EACxB,4BAA4B,GAK7B,MAAM,2BAA2B,CAAC;AACnC,OAAO,EACL,mCAAmC,EACnC,kCAAkC,EAClC,+BAA+B,EAC/B,2BAA2B,EAC3B,2BAA2B,EAC3B,yBAAyB,GAG1B,MAAM,yBAAyB,CAAC;AACjC,OAAO,EAAE,WAAW,EAAyB,MAAM,kBAAkB,CAAC;AACtE,OAAO,EAAE,cAAc,EAAE,MAAM,qBAAqB,CAAC;AACrD,OAAO,EAAE,gBAAgB,EAAE,MAAM,yBAAyB,CAAC;AAC3D,OAAO,EACL,+BAA+B,EAC/B,0BAA0B,GAG3B,MAAM,uBAAuB,CAAC"}
|
package/dist/styles.css
CHANGED
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@agent-native/toolkit",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.214.0",
|
|
4
4
|
"description": "Reusable app-building UI and helpers for Agent-Native apps.",
|
|
5
5
|
"homepage": "https://github.com/BuilderIO/agent-native#readme",
|
|
6
6
|
"bugs": {
|
|
@@ -678,7 +678,7 @@
|
|
|
678
678
|
"y-protocols": "^1.0.7",
|
|
679
679
|
"yjs": "^13.6.33",
|
|
680
680
|
"zod": "^4.3.6",
|
|
681
|
-
"@agent-native/agentkit": "^0.
|
|
681
|
+
"@agent-native/agentkit": "^0.214.0"
|
|
682
682
|
},
|
|
683
683
|
"devDependencies": {
|
|
684
684
|
"@excalidraw/excalidraw": "0.18.1",
|
|
@@ -702,7 +702,7 @@
|
|
|
702
702
|
"typescript-7": "npm:typescript@^7.0.2",
|
|
703
703
|
"vite": "8.1.0",
|
|
704
704
|
"vitest": "^4.1.5",
|
|
705
|
-
"@agent-native/core": "^0.
|
|
705
|
+
"@agent-native/core": "^0.214.0"
|
|
706
706
|
},
|
|
707
707
|
"peerDependencies": {
|
|
708
708
|
"@agent-native/core": ">=0.205.1",
|
|
@@ -196,6 +196,18 @@ describe("AgentMessageActions layout", () => {
|
|
|
196
196
|
});
|
|
197
197
|
|
|
198
198
|
describe("AgentKitChat", () => {
|
|
199
|
+
it("keeps work-summary chevrons visible before the row is opened", () => {
|
|
200
|
+
const styles = readFileSync(
|
|
201
|
+
new URL("./styles.css", import.meta.url),
|
|
202
|
+
"utf8",
|
|
203
|
+
).replace(/\r\n/g, "\n");
|
|
204
|
+
const rule = styles.match(
|
|
205
|
+
/\.agentkit-activities-summary > \.agentkit-summary-chevron \{([^}]*)\}/,
|
|
206
|
+
)?.[1];
|
|
207
|
+
|
|
208
|
+
expect(rule).toContain("opacity: 1;");
|
|
209
|
+
});
|
|
210
|
+
|
|
199
211
|
it("renders the complete reference surface from one managed component", () => {
|
|
200
212
|
const transport: AgentTransport = {
|
|
201
213
|
async startRun() {
|
|
@@ -136,6 +136,7 @@ import {
|
|
|
136
136
|
type AgentKitSuggestionsRenderProps,
|
|
137
137
|
type AgentRunFailureRenderProps,
|
|
138
138
|
} from "./context.js";
|
|
139
|
+
import { orderMessageContent } from "./message-content-order.js";
|
|
139
140
|
import { AgentStreamingText } from "./streaming-text.js";
|
|
140
141
|
|
|
141
142
|
// AgentKit React installs without @agent-native/core, so it repeats core's
|
|
@@ -1907,7 +1908,9 @@ function AgentWorkDisclosure({
|
|
|
1907
1908
|
current?: ReactNode;
|
|
1908
1909
|
children: ReactNode;
|
|
1909
1910
|
}) {
|
|
1911
|
+
const { slots } = useAgentKit();
|
|
1910
1912
|
const [open, setOpen] = useState(false);
|
|
1913
|
+
const Summary = slots.workedForSummary;
|
|
1911
1914
|
return (
|
|
1912
1915
|
<details
|
|
1913
1916
|
className="agentkit-activities"
|
|
@@ -1924,18 +1927,30 @@ function AgentWorkDisclosure({
|
|
|
1924
1927
|
setOpen((value) => !value);
|
|
1925
1928
|
}}
|
|
1926
1929
|
>
|
|
1927
|
-
|
|
1928
|
-
|
|
1929
|
-
|
|
1930
|
-
|
|
1930
|
+
{Summary ? (
|
|
1931
|
+
<Summary
|
|
1932
|
+
label={label}
|
|
1933
|
+
running={running}
|
|
1934
|
+
expandable={expandable}
|
|
1935
|
+
open={open}
|
|
1936
|
+
current={current}
|
|
1937
|
+
/>
|
|
1938
|
+
) : (
|
|
1939
|
+
<>
|
|
1940
|
+
<IconChevronRight
|
|
1941
|
+
aria-hidden="true"
|
|
1942
|
+
className="agentkit-icon agentkit-summary-chevron"
|
|
1943
|
+
/>
|
|
1944
|
+
<span className="agentkit-activities-summary-content">
|
|
1945
|
+
{label ? (
|
|
1946
|
+
<span className="agentkit-activities-heading">
|
|
1947
|
+
<span className="agentkit-activities-label">{label}</span>
|
|
1948
|
+
</span>
|
|
1949
|
+
) : null}
|
|
1950
|
+
{current}
|
|
1931
1951
|
</span>
|
|
1932
|
-
|
|
1933
|
-
|
|
1934
|
-
</span>
|
|
1935
|
-
<IconChevronRight
|
|
1936
|
-
aria-hidden="true"
|
|
1937
|
-
className="agentkit-icon agentkit-summary-chevron"
|
|
1938
|
-
/>
|
|
1952
|
+
</>
|
|
1953
|
+
)}
|
|
1939
1954
|
</summary>
|
|
1940
1955
|
{children}
|
|
1941
1956
|
</details>
|
|
@@ -3787,7 +3802,7 @@ export function AgentMessageView({
|
|
|
3787
3802
|
value: message,
|
|
3788
3803
|
threadId,
|
|
3789
3804
|
}: AgentKitRenderProps<AgentMessage>) {
|
|
3790
|
-
const { labels, slots } = useAgentKit();
|
|
3805
|
+
const { labels, slots, resolveMessageContentOrder } = useAgentKit();
|
|
3791
3806
|
const thread = useAgentThread(threadId);
|
|
3792
3807
|
const visibleMessage = stripAgentMessageContext(message);
|
|
3793
3808
|
const Supplement = slots.messageSupplement;
|
|
@@ -3812,6 +3827,13 @@ export function AgentMessageView({
|
|
|
3812
3827
|
thread.annotationMessageIds[annotation.id] === message.id &&
|
|
3813
3828
|
!embeddedAnnotationIds.has(annotation.id),
|
|
3814
3829
|
);
|
|
3830
|
+
const orderedContent = orderMessageContent(
|
|
3831
|
+
visibleMessage,
|
|
3832
|
+
visibleMessage.parts,
|
|
3833
|
+
attachedWidgets,
|
|
3834
|
+
thread.events,
|
|
3835
|
+
resolveMessageContentOrder,
|
|
3836
|
+
);
|
|
3815
3837
|
if (
|
|
3816
3838
|
!message.parts.length &&
|
|
3817
3839
|
!attachedWidgets.length &&
|
|
@@ -3830,23 +3852,20 @@ export function AgentMessageView({
|
|
|
3830
3852
|
aria-busy={message.status === "streaming"}
|
|
3831
3853
|
>
|
|
3832
3854
|
<div className="agentkit-message-content">
|
|
3833
|
-
{
|
|
3855
|
+
{orderedContent.map((item, index) => (
|
|
3834
3856
|
<AgentMessagePartView
|
|
3835
|
-
key={
|
|
3836
|
-
value={
|
|
3857
|
+
key={item.key}
|
|
3858
|
+
value={
|
|
3859
|
+
item.type === "widget"
|
|
3860
|
+
? { type: "widget", widget: item.widget }
|
|
3861
|
+
: item.part
|
|
3862
|
+
}
|
|
3837
3863
|
threadId={threadId}
|
|
3838
3864
|
active={message.status === "streaming"}
|
|
3839
3865
|
resetKey={`${threadId}:${message.id}:${index}`}
|
|
3840
3866
|
userMessage={message.role === "user"}
|
|
3841
3867
|
/>
|
|
3842
3868
|
))}
|
|
3843
|
-
{attachedWidgets.map((widget) => (
|
|
3844
|
-
<AgentMessagePartView
|
|
3845
|
-
key={widget.id}
|
|
3846
|
-
value={{ type: "widget", widget }}
|
|
3847
|
-
threadId={threadId}
|
|
3848
|
-
/>
|
|
3849
|
-
))}
|
|
3850
3869
|
{attachedAnnotations.length ? (
|
|
3851
3870
|
<div className="agentkit-annotations">
|
|
3852
3871
|
{attachedAnnotations.map((annotation) => (
|
|
@@ -43,6 +43,8 @@ import {
|
|
|
43
43
|
type ReactNode,
|
|
44
44
|
} from "react";
|
|
45
45
|
|
|
46
|
+
import type { AgentMessageContentOrderResolver } from "./message-content-order.js";
|
|
47
|
+
|
|
46
48
|
export interface AgentKitRenderProps<T> {
|
|
47
49
|
value: T;
|
|
48
50
|
threadId: ThreadId;
|
|
@@ -79,6 +81,14 @@ export interface AgentKitSuggestionsRenderProps {
|
|
|
79
81
|
onSelect: (suggestion: AgentSuggestion) => void;
|
|
80
82
|
}
|
|
81
83
|
|
|
84
|
+
export interface AgentKitWorkedForSummaryRenderProps {
|
|
85
|
+
label: string;
|
|
86
|
+
running?: boolean;
|
|
87
|
+
expandable: boolean;
|
|
88
|
+
open: boolean;
|
|
89
|
+
current?: ReactNode;
|
|
90
|
+
}
|
|
91
|
+
|
|
82
92
|
export interface AgentConnectionErrorRenderProps {
|
|
83
93
|
error: AgentError;
|
|
84
94
|
threadId: ThreadId;
|
|
@@ -153,6 +163,8 @@ export interface AgentKitSlots {
|
|
|
153
163
|
composer?: ComponentType<{ threadId: ThreadId }>;
|
|
154
164
|
queue?: ComponentType<AgentKitQueueRenderProps>;
|
|
155
165
|
suggestions?: ComponentType<AgentKitSuggestionsRenderProps>;
|
|
166
|
+
/** Replaces the visible work-summary row while the shared disclosure owns its semantics. */
|
|
167
|
+
workedForSummary?: ComponentType<AgentKitWorkedForSummaryRenderProps>;
|
|
156
168
|
}
|
|
157
169
|
|
|
158
170
|
export interface AgentKitToolSource {
|
|
@@ -482,6 +494,7 @@ export interface AgentKitProviderProps {
|
|
|
482
494
|
) => Promise<AgentConnectionResponse>;
|
|
483
495
|
/** Receives full renderer failures while the UI shows a safe fallback. */
|
|
484
496
|
onRenderError?: (failure: AgentKitRenderFailure) => void;
|
|
497
|
+
resolveMessageContentOrder?: AgentMessageContentOrderResolver;
|
|
485
498
|
onClientEffect?: (effect: {
|
|
486
499
|
type: "client.effect" | "client.deeplink";
|
|
487
500
|
name: string;
|
|
@@ -511,6 +524,7 @@ export interface AgentKitContextValue {
|
|
|
511
524
|
loadRunUsage?: AgentKitRunUsageLoader;
|
|
512
525
|
onConnectionRequest?: AgentKitProviderProps["onConnectionRequest"];
|
|
513
526
|
onRenderError?: (failure: AgentKitRenderFailure) => void;
|
|
527
|
+
resolveMessageContentOrder?: AgentMessageContentOrderResolver;
|
|
514
528
|
registerComposerFocus: (threadId: ThreadId, focus: () => void) => () => void;
|
|
515
529
|
requestComposerFocus: (threadId: ThreadId) => void;
|
|
516
530
|
}
|
|
@@ -531,6 +545,7 @@ export function AgentKitProvider({
|
|
|
531
545
|
loadRunUsage,
|
|
532
546
|
onConnectionRequest,
|
|
533
547
|
onRenderError,
|
|
548
|
+
resolveMessageContentOrder,
|
|
534
549
|
onClientEffect,
|
|
535
550
|
children,
|
|
536
551
|
}: AgentKitProviderProps) {
|
|
@@ -597,6 +612,7 @@ export function AgentKitProvider({
|
|
|
597
612
|
loadRunUsage,
|
|
598
613
|
onConnectionRequest,
|
|
599
614
|
onRenderError,
|
|
615
|
+
resolveMessageContentOrder,
|
|
600
616
|
registerComposerFocus,
|
|
601
617
|
requestComposerFocus,
|
|
602
618
|
}),
|
|
@@ -614,6 +630,7 @@ export function AgentKitProvider({
|
|
|
614
630
|
loadRunUsage,
|
|
615
631
|
onConnectionRequest,
|
|
616
632
|
onRenderError,
|
|
633
|
+
resolveMessageContentOrder,
|
|
617
634
|
registerComposerFocus,
|
|
618
635
|
requestComposerFocus,
|
|
619
636
|
],
|
|
@@ -157,6 +157,83 @@ afterEach(async () => {
|
|
|
157
157
|
});
|
|
158
158
|
|
|
159
159
|
describe("AgentChat lifecycle", () => {
|
|
160
|
+
it("renders host-ordered text around an attached widget", async () => {
|
|
161
|
+
const threadId = "thread-host-content-order";
|
|
162
|
+
const message = {
|
|
163
|
+
id: "assistant-host-content-order",
|
|
164
|
+
role: "assistant" as const,
|
|
165
|
+
status: "complete" as const,
|
|
166
|
+
parts: [{ type: "text" as const, text: "Intro. Summary." }],
|
|
167
|
+
};
|
|
168
|
+
const widget = {
|
|
169
|
+
id: "chart-host-content-order",
|
|
170
|
+
kind: "test-chart",
|
|
171
|
+
data: {},
|
|
172
|
+
};
|
|
173
|
+
const thread = {
|
|
174
|
+
...createAgentThreadState(threadId),
|
|
175
|
+
messages: [message],
|
|
176
|
+
widgets: { [widget.id]: widget },
|
|
177
|
+
widgetMessageIds: { [widget.id]: message.id },
|
|
178
|
+
};
|
|
179
|
+
const observable = observableController({
|
|
180
|
+
connection: "connected",
|
|
181
|
+
capabilities: {},
|
|
182
|
+
capabilitiesStatus: "ready",
|
|
183
|
+
threads: { [threadId]: thread },
|
|
184
|
+
revision: 0,
|
|
185
|
+
});
|
|
186
|
+
const tree = mount();
|
|
187
|
+
|
|
188
|
+
await tree.render(
|
|
189
|
+
<AgentKitProvider
|
|
190
|
+
controller={observable.controller}
|
|
191
|
+
threadId={threadId}
|
|
192
|
+
resolveMessageContentOrder={({ parts, widgets }) => {
|
|
193
|
+
const part = parts[0];
|
|
194
|
+
const chart = widgets[0];
|
|
195
|
+
if (part?.type !== "text" || !chart) return [];
|
|
196
|
+
return [
|
|
197
|
+
{
|
|
198
|
+
key: "intro",
|
|
199
|
+
type: "part",
|
|
200
|
+
part: { ...part, text: "Intro. " },
|
|
201
|
+
},
|
|
202
|
+
{ key: chart.id, type: "widget", widget: chart },
|
|
203
|
+
{
|
|
204
|
+
key: "summary",
|
|
205
|
+
type: "part",
|
|
206
|
+
part: { ...part, text: "Summary." },
|
|
207
|
+
},
|
|
208
|
+
];
|
|
209
|
+
}}
|
|
210
|
+
registry={{
|
|
211
|
+
widgets: {
|
|
212
|
+
"test-chart": () => <span data-chart-result>Chart</span>,
|
|
213
|
+
},
|
|
214
|
+
}}
|
|
215
|
+
slots={{
|
|
216
|
+
text: ({ value }) => <span data-chat-part>{value.text}</span>,
|
|
217
|
+
}}
|
|
218
|
+
>
|
|
219
|
+
<AgentKitChat composer={false} />
|
|
220
|
+
</AgentKitProvider>,
|
|
221
|
+
);
|
|
222
|
+
|
|
223
|
+
const content = tree.container.querySelector(
|
|
224
|
+
`[data-message-id="${message.id}"] .agentkit-message-content`,
|
|
225
|
+
);
|
|
226
|
+
const renderedOrder = [...(content?.children ?? [])].map((element) =>
|
|
227
|
+
element.hasAttribute("data-chat-part")
|
|
228
|
+
? element.textContent
|
|
229
|
+
: element.hasAttribute("data-chart-result")
|
|
230
|
+
? "chart"
|
|
231
|
+
: "other",
|
|
232
|
+
);
|
|
233
|
+
expect(renderedOrder).toEqual(["Intro. ", "chart", "Summary."]);
|
|
234
|
+
await tree.unmount();
|
|
235
|
+
});
|
|
236
|
+
|
|
160
237
|
it("keeps partial transcript updates out of live announcements", async () => {
|
|
161
238
|
const threadId = "thread-accessible-transcript";
|
|
162
239
|
const thread = {
|
|
@@ -1744,6 +1821,44 @@ describe("AgentChat lifecycle", () => {
|
|
|
1744
1821
|
".agentkit-activities-summary > .agentkit-summary-chevron",
|
|
1745
1822
|
),
|
|
1746
1823
|
).not.toBeNull();
|
|
1824
|
+
await tree.render(
|
|
1825
|
+
<AgentKitProvider
|
|
1826
|
+
controller={observable.controller}
|
|
1827
|
+
threadId={threadId}
|
|
1828
|
+
registry={{
|
|
1829
|
+
activities: {
|
|
1830
|
+
reasoning: ({ value }) => (
|
|
1831
|
+
<span data-protocol-reasoning>{value.label}</span>
|
|
1832
|
+
),
|
|
1833
|
+
},
|
|
1834
|
+
}}
|
|
1835
|
+
slots={{
|
|
1836
|
+
reasoning: ({ value, active, resetKey }) => (
|
|
1837
|
+
<span data-thought={resetKey} data-active={active}>
|
|
1838
|
+
{value.text}
|
|
1839
|
+
</span>
|
|
1840
|
+
),
|
|
1841
|
+
workedForSummary: ({ label, open, current }) => (
|
|
1842
|
+
<span data-work-summary data-open={open}>
|
|
1843
|
+
<span>{label}</span>
|
|
1844
|
+
<span data-work-chevron aria-hidden="true">
|
|
1845
|
+
›
|
|
1846
|
+
</span>
|
|
1847
|
+
{current}
|
|
1848
|
+
</span>
|
|
1849
|
+
),
|
|
1850
|
+
}}
|
|
1851
|
+
>
|
|
1852
|
+
<AgentKitChat composer={false} />
|
|
1853
|
+
</AgentKitProvider>,
|
|
1854
|
+
);
|
|
1855
|
+
expect(work.querySelector("[data-work-summary]")?.textContent).toContain(
|
|
1856
|
+
"Searching documentation",
|
|
1857
|
+
);
|
|
1858
|
+
expect(work.querySelector("[data-work-chevron]")).not.toBeNull();
|
|
1859
|
+
expect(
|
|
1860
|
+
work.querySelector("[data-work-summary]")?.getAttribute("data-open"),
|
|
1861
|
+
).toBe("false");
|
|
1747
1862
|
thread = reduceAgentEvent(thread, {
|
|
1748
1863
|
...base(8, 18),
|
|
1749
1864
|
type: "message.completed",
|
|
@@ -1765,7 +1880,7 @@ describe("AgentChat lifecycle", () => {
|
|
|
1765
1880
|
await flush();
|
|
1766
1881
|
expect(tree.container.querySelector(".agentkit-activities")).toBe(work);
|
|
1767
1882
|
expect(work.open).toBe(false);
|
|
1768
|
-
expect(work.querySelector("summary")?.textContent).toBe("Worked for 18s");
|
|
1883
|
+
expect(work.querySelector("summary")?.textContent).toBe("Worked for 18s›");
|
|
1769
1884
|
expect(work.querySelector("[data-agentkit-current-activity]")).toBeNull();
|
|
1770
1885
|
expect(tree.container.querySelectorAll("article")).toHaveLength(1);
|
|
1771
1886
|
const answer = tree.container.querySelector(
|
|
@@ -0,0 +1,190 @@
|
|
|
1
|
+
import type {
|
|
2
|
+
AgentEvent,
|
|
3
|
+
AgentMessage,
|
|
4
|
+
AgentWidget,
|
|
5
|
+
} from "@agent-native/agentkit/protocol";
|
|
6
|
+
import { describe, expect, it } from "vitest";
|
|
7
|
+
|
|
8
|
+
import {
|
|
9
|
+
orderMessageContent,
|
|
10
|
+
type AgentMessageContentOrderResolver,
|
|
11
|
+
} from "./message-content-order.js";
|
|
12
|
+
|
|
13
|
+
const widget: AgentWidget = {
|
|
14
|
+
id: "chart-1",
|
|
15
|
+
kind: "core.data-chart",
|
|
16
|
+
data: { toolCallId: "tool-1" },
|
|
17
|
+
};
|
|
18
|
+
|
|
19
|
+
function event(
|
|
20
|
+
sequence: number,
|
|
21
|
+
payload: Omit<
|
|
22
|
+
AgentEvent,
|
|
23
|
+
"id" | "threadId" | "runId" | "sequence" | "occurredAt"
|
|
24
|
+
>,
|
|
25
|
+
): AgentEvent {
|
|
26
|
+
return {
|
|
27
|
+
id: `event-${sequence}`,
|
|
28
|
+
threadId: "thread-1",
|
|
29
|
+
runId: "run-1",
|
|
30
|
+
sequence,
|
|
31
|
+
occurredAt: `2026-10-21T00:00:0${sequence}.000Z`,
|
|
32
|
+
...payload,
|
|
33
|
+
} as AgentEvent;
|
|
34
|
+
}
|
|
35
|
+
|
|
36
|
+
describe("orderMessageContent", () => {
|
|
37
|
+
it("keeps an attached chart between the streamed introduction and conclusion", () => {
|
|
38
|
+
const message: AgentMessage = {
|
|
39
|
+
id: "assistant-1",
|
|
40
|
+
role: "assistant",
|
|
41
|
+
status: "complete",
|
|
42
|
+
parts: [
|
|
43
|
+
{
|
|
44
|
+
type: "text",
|
|
45
|
+
text: "Intro before chart. Conclusion after chart.",
|
|
46
|
+
format: "markdown",
|
|
47
|
+
},
|
|
48
|
+
],
|
|
49
|
+
};
|
|
50
|
+
const events: AgentEvent[] = [
|
|
51
|
+
event(1, {
|
|
52
|
+
type: "message.created",
|
|
53
|
+
message: { ...message, status: "streaming", parts: [] },
|
|
54
|
+
}),
|
|
55
|
+
event(2, {
|
|
56
|
+
type: "message.delta",
|
|
57
|
+
messageId: message.id,
|
|
58
|
+
text: "Intro before chart. ",
|
|
59
|
+
format: "markdown",
|
|
60
|
+
}),
|
|
61
|
+
event(3, { type: "widget.created", messageId: message.id, widget }),
|
|
62
|
+
event(4, {
|
|
63
|
+
type: "message.delta",
|
|
64
|
+
messageId: message.id,
|
|
65
|
+
text: "Conclusion after chart.",
|
|
66
|
+
format: "markdown",
|
|
67
|
+
}),
|
|
68
|
+
event(5, { type: "message.completed", message }),
|
|
69
|
+
];
|
|
70
|
+
|
|
71
|
+
const result = orderMessageContent(
|
|
72
|
+
message,
|
|
73
|
+
message.parts,
|
|
74
|
+
[widget],
|
|
75
|
+
events,
|
|
76
|
+
);
|
|
77
|
+
|
|
78
|
+
expect(result.map((item) => item.type)).toEqual(["part", "widget", "part"]);
|
|
79
|
+
expect(result[0]).toMatchObject({
|
|
80
|
+
type: "part",
|
|
81
|
+
part: { text: "Intro before chart. " },
|
|
82
|
+
});
|
|
83
|
+
expect(result[1]).toMatchObject({ type: "widget", widget });
|
|
84
|
+
expect(result[2]).toMatchObject({
|
|
85
|
+
type: "part",
|
|
86
|
+
part: { text: "Conclusion after chart." },
|
|
87
|
+
});
|
|
88
|
+
});
|
|
89
|
+
|
|
90
|
+
it("keeps legacy append order when streamed text cannot be matched exactly", () => {
|
|
91
|
+
const message: AgentMessage = {
|
|
92
|
+
id: "assistant-2",
|
|
93
|
+
role: "assistant",
|
|
94
|
+
parts: [{ type: "text", text: "Final answer" }],
|
|
95
|
+
};
|
|
96
|
+
|
|
97
|
+
const result = orderMessageContent(message, message.parts, [widget], []);
|
|
98
|
+
|
|
99
|
+
expect(result.map((item) => item.type)).toEqual(["part", "widget"]);
|
|
100
|
+
});
|
|
101
|
+
|
|
102
|
+
it("lets a host split text around a widget when stream order is unavailable", () => {
|
|
103
|
+
const message: AgentMessage = {
|
|
104
|
+
id: "assistant-3",
|
|
105
|
+
role: "assistant",
|
|
106
|
+
parts: [{ type: "text", text: "Intro. Summary." }],
|
|
107
|
+
};
|
|
108
|
+
const textPart = message.parts[0];
|
|
109
|
+
if (textPart?.type !== "text") throw new Error("Expected text part");
|
|
110
|
+
|
|
111
|
+
const result = orderMessageContent(
|
|
112
|
+
message,
|
|
113
|
+
message.parts,
|
|
114
|
+
[widget],
|
|
115
|
+
[],
|
|
116
|
+
({ parts, widgets }) => {
|
|
117
|
+
const part = parts[0];
|
|
118
|
+
const chart = widgets[0];
|
|
119
|
+
if (part?.type !== "text" || !chart) return [];
|
|
120
|
+
return [
|
|
121
|
+
{
|
|
122
|
+
key: "intro",
|
|
123
|
+
type: "part",
|
|
124
|
+
part: { ...part, text: "Intro. " },
|
|
125
|
+
},
|
|
126
|
+
{ key: chart.id, type: "widget", widget: chart },
|
|
127
|
+
{
|
|
128
|
+
key: "summary",
|
|
129
|
+
type: "part",
|
|
130
|
+
part: { ...part, text: "Summary." },
|
|
131
|
+
},
|
|
132
|
+
];
|
|
133
|
+
},
|
|
134
|
+
);
|
|
135
|
+
|
|
136
|
+
expect(result.map((item) => item.type)).toEqual(["part", "widget", "part"]);
|
|
137
|
+
expect(result[0]).toMatchObject({ part: { text: "Intro. " } });
|
|
138
|
+
expect(result[1]).toMatchObject({ type: "widget", widget });
|
|
139
|
+
expect(result[2]).toMatchObject({ part: { text: "Summary." } });
|
|
140
|
+
expect(textPart.text).toBe("Intro. Summary.");
|
|
141
|
+
});
|
|
142
|
+
|
|
143
|
+
it("falls back when the host ordering result drops all visible content", () => {
|
|
144
|
+
const message: AgentMessage = {
|
|
145
|
+
id: "assistant-4",
|
|
146
|
+
role: "assistant",
|
|
147
|
+
parts: [{ type: "text", text: "A saved answer" }],
|
|
148
|
+
};
|
|
149
|
+
|
|
150
|
+
const result = orderMessageContent(
|
|
151
|
+
message,
|
|
152
|
+
message.parts,
|
|
153
|
+
[widget],
|
|
154
|
+
[],
|
|
155
|
+
() => [],
|
|
156
|
+
);
|
|
157
|
+
|
|
158
|
+
expect(result).toEqual([
|
|
159
|
+
{
|
|
160
|
+
key: "assistant-4-0",
|
|
161
|
+
type: "part",
|
|
162
|
+
part: message.parts[0],
|
|
163
|
+
},
|
|
164
|
+
{ key: widget.id, type: "widget", widget },
|
|
165
|
+
]);
|
|
166
|
+
});
|
|
167
|
+
|
|
168
|
+
it("falls back when the host ordering result loses text or a widget", () => {
|
|
169
|
+
const message: AgentMessage = {
|
|
170
|
+
id: "assistant-5",
|
|
171
|
+
role: "assistant",
|
|
172
|
+
parts: [{ type: "text", text: "Visible answer" }],
|
|
173
|
+
};
|
|
174
|
+
const incompleteOrders: AgentMessageContentOrderResolver[] = [
|
|
175
|
+
() => [{ key: widget.id, type: "widget" as const, widget }],
|
|
176
|
+
({ defaultOrder }) => defaultOrder.slice(0, 1),
|
|
177
|
+
];
|
|
178
|
+
|
|
179
|
+
for (const resolveOrder of incompleteOrders) {
|
|
180
|
+
const result = orderMessageContent(
|
|
181
|
+
message,
|
|
182
|
+
message.parts,
|
|
183
|
+
[widget],
|
|
184
|
+
[],
|
|
185
|
+
resolveOrder,
|
|
186
|
+
);
|
|
187
|
+
expect(result.map((item) => item.type)).toEqual(["part", "widget"]);
|
|
188
|
+
}
|
|
189
|
+
});
|
|
190
|
+
});
|