@agent-native/core 0.126.0 → 0.127.3

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.
Files changed (181) hide show
  1. package/corpus/README.md +2 -2
  2. package/corpus/core/CHANGELOG.md +83 -0
  3. package/corpus/core/docs/content/external-agents-catalog.mdx +14 -11
  4. package/corpus/core/docs/content/mcp-protocol.mdx +9 -4
  5. package/corpus/core/package.json +1 -1
  6. package/corpus/core/src/a2a/index.ts +2 -0
  7. package/corpus/core/src/agent/production-agent.ts +6 -1
  8. package/corpus/core/src/agent/run-manager.ts +37 -0
  9. package/corpus/core/src/agent/run-store.ts +18 -0
  10. package/corpus/core/src/cli/template-sync.ts +96 -0
  11. package/corpus/core/src/client/MultiTabAssistantChat.tsx +75 -43
  12. package/corpus/core/src/client/agent-chat.ts +19 -1
  13. package/corpus/core/src/client/chat/tool-call-display.tsx +25 -0
  14. package/corpus/core/src/client/resources/mcp-integration-catalog.ts +23 -0
  15. package/corpus/core/src/client/settings/AgentsSection.tsx +565 -71
  16. package/corpus/core/src/client/settings/SecretsSection.tsx +71 -36
  17. package/corpus/core/src/client/use-chat-models.ts +54 -37
  18. package/corpus/core/src/localization/default-messages.ts +11 -0
  19. package/corpus/core/src/mcp/ask-app-task-handle.ts +183 -0
  20. package/corpus/core/src/mcp/builtin-tools.ts +146 -34
  21. package/corpus/core/src/server/agent-capabilities.ts +8 -1
  22. package/corpus/core/src/server/agent-chat-plugin.ts +17 -0
  23. package/corpus/core/src/server/agent-discovery.ts +1 -1
  24. package/corpus/core/src/server/agent-peer-probe.ts +133 -0
  25. package/corpus/core/src/server/builder-design-systems.ts +1 -1
  26. package/corpus/core/src/server/core-routes-plugin.ts +67 -0
  27. package/corpus/core/src/shared/mcp-embed-headers.ts +4 -0
  28. package/corpus/core/src/templates/chat/_gitignore +2 -0
  29. package/corpus/core/src/templates/workspace-core/.agents/skills/a2a-protocol/SKILL.md +159 -119
  30. package/corpus/templates/chat/_gitignore +2 -0
  31. package/corpus/templates/design/.agents/skills/design-generation/SKILL.md +23 -0
  32. package/corpus/templates/design/actions/create-file.ts +15 -0
  33. package/corpus/templates/design/actions/generate-design.ts +40 -0
  34. package/corpus/templates/design/actions/present-design-variants.ts +16 -0
  35. package/corpus/templates/design/app/hooks/use-question-flow.ts +21 -1
  36. package/corpus/templates/design/app/pages/design-editor/save-failure.ts +7 -1
  37. package/corpus/templates/design/changelog/2026-07-28-generated-designs-with-malformed-html-are-now-rejected-at-sa.md +6 -0
  38. package/corpus/templates/design/changelog/2026-07-28-the-model-you-pick-when-starting-a-new-design-is-now-used-fo.md +6 -0
  39. package/corpus/templates/design/server/source-workspace.ts +1 -0
  40. package/corpus/templates/design/shared/html-integrity.ts +608 -18
  41. package/corpus/templates/dispatch/changelog/2026-07-28-pending-apps-are-hidden-by-default-and-app-ownership-details.md +6 -0
  42. package/corpus/templates/slides/app/components/deck/DeckCard.tsx +2 -6
  43. package/corpus/templates/slides/app/components/editor/EditorSidebar.tsx +5 -1
  44. package/corpus/templates/slides/app/components/editor/EditorToolbar.tsx +5 -0
  45. package/corpus/templates/slides/app/components/editor/ExportMenu.tsx +31 -8
  46. package/corpus/templates/slides/app/components/editor/PromptDialog.tsx +15 -0
  47. package/corpus/templates/slides/app/components/presentation/PresentationView.tsx +78 -8
  48. package/corpus/templates/slides/app/components/presentation/PresenterView.tsx +179 -0
  49. package/corpus/templates/slides/app/components/presentation/present-channel.ts +15 -0
  50. package/corpus/templates/slides/app/i18n/en-US.ts +10 -1
  51. package/corpus/templates/slides/app/lib/export-google-slides-client.ts +67 -0
  52. package/corpus/templates/slides/app/lib/export-pptx-client.ts +16 -3
  53. package/corpus/templates/slides/app/pages/DeckEditor.tsx +11 -0
  54. package/corpus/templates/slides/app/pages/Presentation.tsx +11 -3
  55. package/corpus/templates/slides/changelog/2026-07-28-export-to-google-slides-now-creates-the-deck-directly-in-you.md +6 -0
  56. package/corpus/templates/slides/changelog/2026-07-28-opening-a-presentation-link-directly-no-longer-bounces-back-.md +6 -0
  57. package/corpus/templates/slides/changelog/2026-07-28-presenter-view-open-a-second-window-while-presenting-to-see-.md +6 -0
  58. package/corpus/templates/slides/server/routes/api/exports/google-slides.post.ts +90 -0
  59. package/corpus/toolkit/CHANGELOG.md +6 -0
  60. package/corpus/toolkit/package.json +1 -1
  61. package/corpus/toolkit/src/composer/TiptapComposer.tsx +143 -111
  62. package/corpus/toolkit/src/composer/runtime-adapters.tsx +2 -0
  63. package/dist/a2a/index.d.ts +2 -0
  64. package/dist/a2a/index.d.ts.map +1 -1
  65. package/dist/a2a/index.js +1 -0
  66. package/dist/a2a/index.js.map +1 -1
  67. package/dist/agent/production-agent.d.ts +2 -2
  68. package/dist/agent/production-agent.d.ts.map +1 -1
  69. package/dist/agent/production-agent.js +6 -3
  70. package/dist/agent/production-agent.js.map +1 -1
  71. package/dist/agent/run-manager.d.ts +11 -0
  72. package/dist/agent/run-manager.d.ts.map +1 -1
  73. package/dist/agent/run-manager.js +34 -1
  74. package/dist/agent/run-manager.js.map +1 -1
  75. package/dist/agent/run-store.d.ts +8 -0
  76. package/dist/agent/run-store.d.ts.map +1 -1
  77. package/dist/agent/run-store.js +16 -0
  78. package/dist/agent/run-store.js.map +1 -1
  79. package/dist/cli/template-sync.d.ts.map +1 -1
  80. package/dist/cli/template-sync.js +88 -0
  81. package/dist/cli/template-sync.js.map +1 -1
  82. package/dist/client/MultiTabAssistantChat.d.ts.map +1 -1
  83. package/dist/client/MultiTabAssistantChat.js +60 -31
  84. package/dist/client/MultiTabAssistantChat.js.map +1 -1
  85. package/dist/client/agent-chat.d.ts +6 -0
  86. package/dist/client/agent-chat.d.ts.map +1 -1
  87. package/dist/client/agent-chat.js +13 -1
  88. package/dist/client/agent-chat.js.map +1 -1
  89. package/dist/client/chat/tool-call-display.d.ts.map +1 -1
  90. package/dist/client/chat/tool-call-display.js +14 -0
  91. package/dist/client/chat/tool-call-display.js.map +1 -1
  92. package/dist/client/resources/mcp-integration-catalog.d.ts +6 -0
  93. package/dist/client/resources/mcp-integration-catalog.d.ts.map +1 -1
  94. package/dist/client/resources/mcp-integration-catalog.js +16 -0
  95. package/dist/client/resources/mcp-integration-catalog.js.map +1 -1
  96. package/dist/client/settings/AgentsSection.d.ts.map +1 -1
  97. package/dist/client/settings/AgentsSection.js +250 -30
  98. package/dist/client/settings/AgentsSection.js.map +1 -1
  99. package/dist/client/settings/SecretsSection.d.ts.map +1 -1
  100. package/dist/client/settings/SecretsSection.js +16 -2
  101. package/dist/client/settings/SecretsSection.js.map +1 -1
  102. package/dist/client/use-chat-models.d.ts.map +1 -1
  103. package/dist/client/use-chat-models.js +46 -27
  104. package/dist/client/use-chat-models.js.map +1 -1
  105. package/dist/collab/routes.d.ts +2 -2
  106. package/dist/collab/struct-routes.d.ts +1 -1
  107. package/dist/file-upload/actions/upload-image.d.ts +1 -1
  108. package/dist/localization/default-messages.d.ts +9 -0
  109. package/dist/localization/default-messages.d.ts.map +1 -1
  110. package/dist/localization/default-messages.js +9 -0
  111. package/dist/localization/default-messages.js.map +1 -1
  112. package/dist/mcp/ask-app-task-handle.d.ts +25 -0
  113. package/dist/mcp/ask-app-task-handle.d.ts.map +1 -0
  114. package/dist/mcp/ask-app-task-handle.js +136 -0
  115. package/dist/mcp/ask-app-task-handle.js.map +1 -0
  116. package/dist/mcp/builtin-tools.d.ts +3 -3
  117. package/dist/mcp/builtin-tools.d.ts.map +1 -1
  118. package/dist/mcp/builtin-tools.js +115 -38
  119. package/dist/mcp/builtin-tools.js.map +1 -1
  120. package/dist/observability/routes.d.ts +3 -3
  121. package/dist/progress/routes.d.ts +1 -1
  122. package/dist/provider-api/actions/custom-provider-registration.d.ts +4 -4
  123. package/dist/provider-api/actions/provider-api.d.ts +8 -8
  124. package/dist/resources/handlers.d.ts +1 -1
  125. package/dist/secrets/routes.d.ts +9 -9
  126. package/dist/server/agent-capabilities.d.ts +7 -1
  127. package/dist/server/agent-capabilities.d.ts.map +1 -1
  128. package/dist/server/agent-capabilities.js +1 -0
  129. package/dist/server/agent-capabilities.js.map +1 -1
  130. package/dist/server/agent-chat-plugin.d.ts +7 -0
  131. package/dist/server/agent-chat-plugin.d.ts.map +1 -1
  132. package/dist/server/agent-chat-plugin.js +16 -1
  133. package/dist/server/agent-chat-plugin.js.map +1 -1
  134. package/dist/server/agent-discovery.d.ts +1 -0
  135. package/dist/server/agent-discovery.d.ts.map +1 -1
  136. package/dist/server/agent-discovery.js +1 -1
  137. package/dist/server/agent-discovery.js.map +1 -1
  138. package/dist/server/agent-peer-probe.d.ts +37 -0
  139. package/dist/server/agent-peer-probe.d.ts.map +1 -0
  140. package/dist/server/agent-peer-probe.js +90 -0
  141. package/dist/server/agent-peer-probe.js.map +1 -0
  142. package/dist/server/builder-design-systems.js +1 -1
  143. package/dist/server/builder-design-systems.js.map +1 -1
  144. package/dist/server/core-routes-plugin.d.ts.map +1 -1
  145. package/dist/server/core-routes-plugin.js +53 -0
  146. package/dist/server/core-routes-plugin.js.map +1 -1
  147. package/dist/server/realtime-token.d.ts +1 -1
  148. package/dist/server/transcribe-voice.d.ts +1 -1
  149. package/dist/shared/mcp-embed-headers.d.ts +1 -0
  150. package/dist/shared/mcp-embed-headers.d.ts.map +1 -1
  151. package/dist/shared/mcp-embed-headers.js +4 -0
  152. package/dist/shared/mcp-embed-headers.js.map +1 -1
  153. package/dist/templates/chat/_gitignore +2 -0
  154. package/dist/templates/workspace-core/.agents/skills/a2a-protocol/SKILL.md +159 -119
  155. package/docs/content/external-agents-catalog.mdx +14 -11
  156. package/docs/content/mcp-protocol.mdx +9 -4
  157. package/package.json +2 -2
  158. package/src/a2a/index.ts +2 -0
  159. package/src/agent/production-agent.ts +6 -1
  160. package/src/agent/run-manager.ts +37 -0
  161. package/src/agent/run-store.ts +18 -0
  162. package/src/cli/template-sync.ts +96 -0
  163. package/src/client/MultiTabAssistantChat.tsx +75 -43
  164. package/src/client/agent-chat.ts +19 -1
  165. package/src/client/chat/tool-call-display.tsx +25 -0
  166. package/src/client/resources/mcp-integration-catalog.ts +23 -0
  167. package/src/client/settings/AgentsSection.tsx +565 -71
  168. package/src/client/settings/SecretsSection.tsx +71 -36
  169. package/src/client/use-chat-models.ts +54 -37
  170. package/src/localization/default-messages.ts +11 -0
  171. package/src/mcp/ask-app-task-handle.ts +183 -0
  172. package/src/mcp/builtin-tools.ts +146 -34
  173. package/src/server/agent-capabilities.ts +8 -1
  174. package/src/server/agent-chat-plugin.ts +17 -0
  175. package/src/server/agent-discovery.ts +1 -1
  176. package/src/server/agent-peer-probe.ts +133 -0
  177. package/src/server/builder-design-systems.ts +1 -1
  178. package/src/server/core-routes-plugin.ts +67 -0
  179. package/src/shared/mcp-embed-headers.ts +4 -0
  180. package/src/templates/chat/_gitignore +2 -0
  181. package/src/templates/workspace-core/.agents/skills/a2a-protocol/SKILL.md +159 -119
@@ -3,6 +3,7 @@ import { useEffect, useState } from "react";
3
3
  import { useParams, Navigate, useSearchParams } from "react-router";
4
4
 
5
5
  import PresentationView from "@/components/presentation/PresentationView";
6
+ import PresenterView from "@/components/presentation/PresenterView";
6
7
  import { useDecks } from "@/context/DeckContext";
7
8
  import type { Deck } from "@/context/DeckContext";
8
9
 
@@ -45,10 +46,14 @@ export default function Presentation() {
45
46
  };
46
47
  }, [contextDeck, id, loading]);
47
48
 
48
- if (loading || fallbackState === "loading") {
49
+ if (!id) return <Navigate to="/" replace />;
50
+ // "Not fetched yet" is not "not found": on a cold load of this URL the deck
51
+ // context is empty and the fallback fetch has not run, so redirecting on a
52
+ // falsy deck bounced every direct/presenter/share link back to the index.
53
+ if (!deck && fallbackState !== "missing") {
49
54
  return <div className="h-screen bg-black" />;
50
55
  }
51
- if (!deck || !id || fallbackState === "missing") {
56
+ if (!deck) {
52
57
  return <Navigate to="/" replace />;
53
58
  }
54
59
 
@@ -58,8 +63,11 @@ export default function Presentation() {
58
63
  ? Math.max(0, parsedSlide - 1)
59
64
  : 0;
60
65
 
66
+ const View =
67
+ searchParams.get("presenter") === "1" ? PresenterView : PresentationView;
68
+
61
69
  return (
62
- <PresentationView
70
+ <View
63
71
  slides={Array.isArray(deck.slides) ? deck.slides : []}
64
72
  deckId={id}
65
73
  startIndex={startSlide}
@@ -0,0 +1,6 @@
1
+ ---
2
+ type: improved
3
+ date: 2026-07-28
4
+ ---
5
+
6
+ Export to Google Slides now creates the deck directly in your Google Drive when your Google account is connected, instead of only downloading a PPTX to import by hand.
@@ -0,0 +1,6 @@
1
+ ---
2
+ type: fixed
3
+ date: 2026-07-28
4
+ ---
5
+
6
+ Opening a presentation link directly no longer bounces back to the deck list.
@@ -0,0 +1,6 @@
1
+ ---
2
+ type: added
3
+ date: 2026-07-28
4
+ ---
5
+
6
+ Presenter view: open a second window while presenting to see speaker notes, the next slide, and a timer, with both windows kept in sync.
@@ -0,0 +1,90 @@
1
+ import { getSession, runWithRequestContext } from "@agent-native/core/server";
2
+ import {
3
+ defineEventHandler,
4
+ readMultipartFormData,
5
+ setResponseStatus,
6
+ } from "h3";
7
+
8
+ import { getGoogleDocsAccessToken } from "../../../lib/google-docs-oauth.js";
9
+
10
+ const PPTX_CONTENT_TYPE =
11
+ "application/vnd.openxmlformats-officedocument.presentationml.presentation";
12
+ const GOOGLE_SLIDES_MIME = "application/vnd.google-apps.presentation";
13
+ const UPLOAD_URL =
14
+ "https://www.googleapis.com/upload/drive/v3/files?uploadType=multipart&fields=id,webViewLink";
15
+
16
+ /**
17
+ * Uploads a browser-generated PPTX into the user's Drive, letting Drive convert
18
+ * it to a native Google Slides deck. The PPTX comes from the client because the
19
+ * browser export renders the real slide DOM — the server-side pptxgenjs export
20
+ * is a lower-fidelity fallback and would ship a visibly worse deck to Google.
21
+ */
22
+ export default defineEventHandler(async (event) => {
23
+ const session = await getSession(event).catch(() => null);
24
+ if (!session?.email) {
25
+ setResponseStatus(event, 401);
26
+ return { error: "Unauthorized" };
27
+ }
28
+
29
+ const parts = (await readMultipartFormData(event)) ?? [];
30
+ const file = parts.find((part) => part.name === "file");
31
+ const titlePart = parts.find((part) => part.name === "title");
32
+ const title = titlePart
33
+ ? new TextDecoder().decode(titlePart.data).trim() || "Untitled deck"
34
+ : "Untitled deck";
35
+
36
+ if (!file?.data?.length) {
37
+ setResponseStatus(event, 400);
38
+ return { error: "file required" };
39
+ }
40
+
41
+ // Same request context the actions run in — Google's client credentials can
42
+ // be org-scoped vault secrets, and resolving them without the org reports the
43
+ // integration as unconfigured.
44
+ const account = await runWithRequestContext(
45
+ { userEmail: session.email, orgId: session.orgId },
46
+ () => getGoogleDocsAccessToken(session.email),
47
+ );
48
+ if (!account) {
49
+ setResponseStatus(event, 409);
50
+ return {
51
+ error: "No connected Google account.",
52
+ code: "google-not-connected",
53
+ };
54
+ }
55
+
56
+ const boundary = `an-slides-${Math.random().toString(36).slice(2)}`;
57
+ const body = new Blob([
58
+ `--${boundary}\r\nContent-Type: application/json; charset=UTF-8\r\n\r\n`,
59
+ JSON.stringify({ name: title, mimeType: GOOGLE_SLIDES_MIME }),
60
+ `\r\n--${boundary}\r\nContent-Type: ${PPTX_CONTENT_TYPE}\r\n\r\n`,
61
+ new Uint8Array(file.data),
62
+ `\r\n--${boundary}--`,
63
+ ]);
64
+
65
+ const response = await fetch(UPLOAD_URL, {
66
+ method: "POST",
67
+ headers: {
68
+ Authorization: `Bearer ${account.accessToken}`,
69
+ "Content-Type": `multipart/related; boundary=${boundary}`,
70
+ },
71
+ body,
72
+ });
73
+
74
+ const result = (await response.json().catch(() => null)) as {
75
+ id?: string;
76
+ webViewLink?: string;
77
+ error?: { message?: string };
78
+ } | null;
79
+
80
+ if (!response.ok || !result?.webViewLink) {
81
+ setResponseStatus(event, 502);
82
+ return {
83
+ error:
84
+ result?.error?.message ??
85
+ `Google Drive returned HTTP ${response.status} while creating the deck.`,
86
+ };
87
+ }
88
+
89
+ return { url: result.webViewLink, accountEmail: account.accountEmail };
90
+ });
@@ -1,5 +1,11 @@
1
1
  # @agent-native/toolkit
2
2
 
3
+ ## 0.10.9
4
+
5
+ ### Patch Changes
6
+
7
+ - cbc6936: Show only the connect actions in the composer model picker when no LLM provider is configured, instead of a list of unpickable "needs API key" models, and surface Builder connect failures instead of leaving the "Connect Builder.io" button looking dead when the popup is blocked.
8
+
3
9
  ## 0.10.8
4
10
 
5
11
  ### Patch Changes
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@agent-native/toolkit",
3
- "version": "0.10.8",
3
+ "version": "0.10.9",
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": {
@@ -839,6 +839,18 @@ export function shouldShowModelSelectorSkeleton(
839
839
  return isLoading && engineCount === 0;
840
840
  }
841
841
 
842
+ /**
843
+ * With nothing connected, every family is a dead "needs API key" row, so the
844
+ * picker shows only the connect CTAs. Never hide the list unless a CTA is
845
+ * there to replace it — an empty popover reads as more broken, not less.
846
+ */
847
+ export function shouldShowOnlyConnectPath(
848
+ showBuilderCta: boolean,
849
+ groups: ReadonlyArray<{ configured: boolean }>,
850
+ ): boolean {
851
+ return showBuilderCta && groups.every((group) => !group.configured);
852
+ }
853
+
842
854
  function friendlyModelName(model: string): string {
843
855
  if (FRIENDLY_MODEL_NAMES[model]) return FRIENDLY_MODEL_NAMES[model];
844
856
  // Claude: claude-{tier}-{major}[-minor][-dateYYYYMMDD] → Tier Major[.Minor]
@@ -1081,6 +1093,10 @@ function ModelSelector({
1081
1093
  !builderFlow.configured &&
1082
1094
  !builderFlow.envManaged &&
1083
1095
  !hasConfiguredBuilderModels;
1096
+ const onlyConnectPathAvailable = shouldShowOnlyConnectPath(
1097
+ showBuilderCta,
1098
+ providerGroups,
1099
+ );
1084
1100
  const openLlmSettings = useCallback(() => {
1085
1101
  try {
1086
1102
  window.location.hash = "llm";
@@ -1161,6 +1177,14 @@ function ModelSelector({
1161
1177
  </span>
1162
1178
  </span>
1163
1179
  </button>
1180
+ {!onConnectProvider && builderFlow.error && (
1181
+ <p
1182
+ role="alert"
1183
+ className="px-3 pb-2 ps-9 text-[11px] text-destructive"
1184
+ >
1185
+ {builderFlow.error}
1186
+ </p>
1187
+ )}
1164
1188
  <button
1165
1189
  type="button"
1166
1190
  onClick={openLlmSettings}
@@ -1181,7 +1205,9 @@ function ModelSelector({
1181
1205
  </span>
1182
1206
  </span>
1183
1207
  </button>
1184
- <div className="my-1 border-t border-border" />
1208
+ {!onlyConnectPathAvailable && (
1209
+ <div className="my-1 border-t border-border" />
1210
+ )}
1185
1211
  </>
1186
1212
  )}
1187
1213
  {imageModel && imageModel.options.length > 0 && (
@@ -1231,7 +1257,7 @@ function ModelSelector({
1231
1257
  </>
1232
1258
  )}
1233
1259
  {showModelListSkeleton && <ModelSelectorSkeleton />}
1234
- {autoModelGroup && (
1260
+ {autoModelGroup && !onlyConnectPathAvailable && (
1235
1261
  <button
1236
1262
  type="button"
1237
1263
  onClick={() => {
@@ -1248,136 +1274,142 @@ function ModelSelector({
1248
1274
  )}
1249
1275
  </button>
1250
1276
  )}
1251
- {autoModelGroup && providerGroups.length > 0 && (
1252
- <div className="my-1 border-t border-border" />
1253
- )}
1254
- {providerGroups.map((group) => {
1255
- const models = latestModelsOnly(group.models);
1256
- const groupKey = `${group.engine}:${group.label}`;
1257
- const isExpanded = expandedGroups.has(groupKey);
1258
- const ChevronIcon = isExpanded ? IconChevronDown : IconChevronRight;
1259
- return (
1260
- <div key={groupKey}>
1277
+ {autoModelGroup &&
1278
+ providerGroups.length > 0 &&
1279
+ !onlyConnectPathAvailable && (
1280
+ <div className="my-1 border-t border-border" />
1281
+ )}
1282
+ {!onlyConnectPathAvailable &&
1283
+ providerGroups.map((group) => {
1284
+ const models = latestModelsOnly(group.models);
1285
+ const groupKey = `${group.engine}:${group.label}`;
1286
+ const isExpanded = expandedGroups.has(groupKey);
1287
+ const ChevronIcon = isExpanded ? IconChevronDown : IconChevronRight;
1288
+ return (
1289
+ <div key={groupKey}>
1290
+ <div className="flex items-center hover:bg-accent/30">
1291
+ <button
1292
+ type="button"
1293
+ aria-expanded={isExpanded}
1294
+ onClick={() => toggleGroup(groupKey)}
1295
+ className="flex flex-1 min-w-0 items-center gap-1.5 px-2 py-1.5 cursor-pointer text-start"
1296
+ >
1297
+ <ChevronIcon className="h-3 w-3 shrink-0 text-muted-foreground rtl:-scale-x-100" />
1298
+ <span className="text-[11px] font-medium text-muted-foreground uppercase tracking-wide shrink-0">
1299
+ {group.label}
1300
+ </span>
1301
+ {!isExpanded && groupKey === selectedGroupKey && (
1302
+ <span className="text-[11px] text-muted-foreground/80 truncate">
1303
+ {friendlyModelName(model)}
1304
+ </span>
1305
+ )}
1306
+ </button>
1307
+ {!group.configured && (
1308
+ <button
1309
+ type="button"
1310
+ className="text-[10px] text-muted-foreground/60 hover:text-foreground cursor-pointer pe-3 py-1.5"
1311
+ onClick={() =>
1312
+ group.engine === "codex-cli" && onConnectLocalRuntime
1313
+ ? connectLocalRuntime(group.engine)
1314
+ : openLlmSettings()
1315
+ }
1316
+ >
1317
+ {group.engine === "codex-cli" && onConnectLocalRuntime
1318
+ ? "sign in"
1319
+ : "needs API key"}
1320
+ </button>
1321
+ )}
1322
+ </div>
1323
+ {isExpanded &&
1324
+ models.map((m) => (
1325
+ <button
1326
+ key={m}
1327
+ type="button"
1328
+ onClick={() => {
1329
+ if (!group.configured) {
1330
+ if (
1331
+ group.engine === "codex-cli" &&
1332
+ onConnectLocalRuntime
1333
+ ) {
1334
+ connectLocalRuntime(group.engine);
1335
+ } else {
1336
+ openLlmSettings();
1337
+ }
1338
+ return;
1339
+ }
1340
+ onChange(m, group.engine);
1341
+ const nextOptions =
1342
+ getReasoningEffortOptionsForModel(m);
1343
+ if (
1344
+ nextOptions.length > 0 &&
1345
+ !nextOptions.includes(selectedEffort)
1346
+ ) {
1347
+ onEffortChange?.(defaultEffort);
1348
+ }
1349
+ setOpen(false);
1350
+ }}
1351
+ className={`flex w-full items-center gap-3 ps-7 pe-3 py-1.5 text-start ${
1352
+ group.configured
1353
+ ? "hover:bg-accent/50"
1354
+ : "opacity-40 cursor-default"
1355
+ }`}
1356
+ >
1357
+ <span className="flex-1 min-w-0 text-[13px] text-foreground truncate">
1358
+ {friendlyModelName(m)}
1359
+ </span>
1360
+ {m === model && group.configured && (
1361
+ <IconCheck className="h-3.5 w-3.5 shrink-0 text-blue-500" />
1362
+ )}
1363
+ </button>
1364
+ ))}
1365
+ </div>
1366
+ );
1367
+ })}
1368
+ {!showModelListSkeleton &&
1369
+ !onlyConnectPathAvailable &&
1370
+ effortOptions.length > 0 && (
1371
+ <>
1372
+ <div className="my-1 border-t border-border" />
1261
1373
  <div className="flex items-center hover:bg-accent/30">
1262
1374
  <button
1263
1375
  type="button"
1264
- aria-expanded={isExpanded}
1265
- onClick={() => toggleGroup(groupKey)}
1376
+ aria-expanded={reasoningExpanded}
1377
+ onClick={() => setReasoningExpanded((prev) => !prev)}
1266
1378
  className="flex flex-1 min-w-0 items-center gap-1.5 px-2 py-1.5 cursor-pointer text-start"
1267
1379
  >
1268
- <ChevronIcon className="h-3 w-3 shrink-0 text-muted-foreground rtl:-scale-x-100" />
1380
+ {reasoningExpanded ? (
1381
+ <IconChevronDown className="h-3 w-3 shrink-0 text-muted-foreground" />
1382
+ ) : (
1383
+ <IconChevronRight className="h-3 w-3 shrink-0 text-muted-foreground rtl:-scale-x-100" />
1384
+ )}
1269
1385
  <span className="text-[11px] font-medium text-muted-foreground uppercase tracking-wide shrink-0">
1270
- {group.label}
1386
+ Reasoning
1271
1387
  </span>
1272
- {!isExpanded && groupKey === selectedGroupKey && (
1388
+ {!reasoningExpanded && (
1273
1389
  <span className="text-[11px] text-muted-foreground/80 truncate">
1274
- {friendlyModelName(model)}
1390
+ {effortLabel(selectedEffort)}
1275
1391
  </span>
1276
1392
  )}
1277
1393
  </button>
1278
- {!group.configured && (
1279
- <button
1280
- type="button"
1281
- className="text-[10px] text-muted-foreground/60 hover:text-foreground cursor-pointer pe-3 py-1.5"
1282
- onClick={() =>
1283
- group.engine === "codex-cli" && onConnectLocalRuntime
1284
- ? connectLocalRuntime(group.engine)
1285
- : openLlmSettings()
1286
- }
1287
- >
1288
- {group.engine === "codex-cli" && onConnectLocalRuntime
1289
- ? "sign in"
1290
- : "needs API key"}
1291
- </button>
1292
- )}
1293
1394
  </div>
1294
- {isExpanded &&
1295
- models.map((m) => (
1395
+ {reasoningExpanded &&
1396
+ effortOptions.map((option) => (
1296
1397
  <button
1297
- key={m}
1398
+ key={option}
1298
1399
  type="button"
1299
- onClick={() => {
1300
- if (!group.configured) {
1301
- if (
1302
- group.engine === "codex-cli" &&
1303
- onConnectLocalRuntime
1304
- ) {
1305
- connectLocalRuntime(group.engine);
1306
- } else {
1307
- openLlmSettings();
1308
- }
1309
- return;
1310
- }
1311
- onChange(m, group.engine);
1312
- const nextOptions = getReasoningEffortOptionsForModel(m);
1313
- if (
1314
- nextOptions.length > 0 &&
1315
- !nextOptions.includes(selectedEffort)
1316
- ) {
1317
- onEffortChange?.(defaultEffort);
1318
- }
1319
- setOpen(false);
1320
- }}
1321
- className={`flex w-full items-center gap-3 ps-7 pe-3 py-1.5 text-start ${
1322
- group.configured
1323
- ? "hover:bg-accent/50"
1324
- : "opacity-40 cursor-default"
1325
- }`}
1400
+ onClick={() => onEffortChange?.(option)}
1401
+ className="flex w-full items-center gap-3 ps-7 pe-3 py-1.5 text-start hover:bg-accent/50"
1326
1402
  >
1327
1403
  <span className="flex-1 min-w-0 text-[13px] text-foreground truncate">
1328
- {friendlyModelName(m)}
1404
+ {effortLabel(option)}
1329
1405
  </span>
1330
- {m === model && group.configured && (
1406
+ {option === selectedEffort && (
1331
1407
  <IconCheck className="h-3.5 w-3.5 shrink-0 text-blue-500" />
1332
1408
  )}
1333
1409
  </button>
1334
1410
  ))}
1335
- </div>
1336
- );
1337
- })}
1338
- {!showModelListSkeleton && effortOptions.length > 0 && (
1339
- <>
1340
- <div className="my-1 border-t border-border" />
1341
- <div className="flex items-center hover:bg-accent/30">
1342
- <button
1343
- type="button"
1344
- aria-expanded={reasoningExpanded}
1345
- onClick={() => setReasoningExpanded((prev) => !prev)}
1346
- className="flex flex-1 min-w-0 items-center gap-1.5 px-2 py-1.5 cursor-pointer text-start"
1347
- >
1348
- {reasoningExpanded ? (
1349
- <IconChevronDown className="h-3 w-3 shrink-0 text-muted-foreground" />
1350
- ) : (
1351
- <IconChevronRight className="h-3 w-3 shrink-0 text-muted-foreground rtl:-scale-x-100" />
1352
- )}
1353
- <span className="text-[11px] font-medium text-muted-foreground uppercase tracking-wide shrink-0">
1354
- Reasoning
1355
- </span>
1356
- {!reasoningExpanded && (
1357
- <span className="text-[11px] text-muted-foreground/80 truncate">
1358
- {effortLabel(selectedEffort)}
1359
- </span>
1360
- )}
1361
- </button>
1362
- </div>
1363
- {reasoningExpanded &&
1364
- effortOptions.map((option) => (
1365
- <button
1366
- key={option}
1367
- type="button"
1368
- onClick={() => onEffortChange?.(option)}
1369
- className="flex w-full items-center gap-3 ps-7 pe-3 py-1.5 text-start hover:bg-accent/50"
1370
- >
1371
- <span className="flex-1 min-w-0 text-[13px] text-foreground truncate">
1372
- {effortLabel(option)}
1373
- </span>
1374
- {option === selectedEffort && (
1375
- <IconCheck className="h-3.5 w-3.5 shrink-0 text-blue-500" />
1376
- )}
1377
- </button>
1378
- ))}
1379
- </>
1380
- )}
1411
+ </>
1412
+ )}
1381
1413
  </PopoverContent>
1382
1414
  </Popover>
1383
1415
  );
@@ -43,6 +43,7 @@ export interface ComposerBuilderConnectFlow {
43
43
  envManaged: boolean;
44
44
  connecting: boolean;
45
45
  statusResolved: boolean;
46
+ error: string | null;
46
47
  start: () => void;
47
48
  }
48
49
 
@@ -196,6 +197,7 @@ const fallbackBuilderFlow = {
196
197
  envManaged: false,
197
198
  connecting: false,
198
199
  statusResolved: false,
200
+ error: null,
199
201
  start: () => {},
200
202
  };
201
203
 
@@ -3,6 +3,8 @@ export type { A2ATokenPayload } from "./server.js";
3
3
  export { generateAgentCard } from "./agent-card.js";
4
4
  export { A2A_AGENT_ACTIVITY_KIND, A2A_AGENT_ACTIVITY_VERSION, MAX_A2A_ACTIVITY_REASONING_CHARS, MAX_A2A_ACTIVITY_REASONING_SEGMENTS, MAX_A2A_ACTIVITY_RESPONSE_CHARS, MAX_A2A_ACTIVITY_TOOL_CALLS, MAX_A2A_ACTIVITY_TOTAL_CHARS, MAX_A2A_ACTIVITY_TOOL_ID_CHARS, MAX_A2A_ACTIVITY_TOOL_NAME_CHARS, applyA2AAgentActivityEvent, buildA2AAgentActivityPart, buildA2AAgentActivitySnapshot, createA2AAgentActivityState, parseA2AAgentActivityPart, } from "./activity.js";
5
5
  export { A2AClient, callAction, callAgent, signA2AToken } from "./client.js";
6
+ export { resolveA2ACallerAuth } from "./caller-auth.js";
7
+ export type { A2ACallerAuth } from "./caller-auth.js";
6
8
  export { AgentInvocationError, buildAgentInvocationPrompt, invokeAgent, invokeAgentAction, looksLikeAgentUrl, resolveAgentInvocationTarget, } from "./invoke.js";
7
9
  export type { A2AConfig, A2AHandler, A2AHandlerContext, A2AHandlerResult, A2ASourceContext, AgentCard, AgentSkill, AgentCapabilities, Task, TaskState, TaskStatus, Message, Part, TextPart, FilePart, DataPart, Artifact, JsonRpcRequest, JsonRpcResponse, A2ACorrelationMetadata, A2AReadOnlyActionInvocation, A2AReadOnlyActionResult, A2AAgentActivityPhase, A2AAgentActivitySnapshot, A2AAgentActivityState, A2AAgentActivityToolCall, A2AAgentActivityToolStatus, } from "./types.js";
8
10
  export type { AgentInvocationErrorCode, AgentActionInvocationResult, AgentInvocationResult, AgentInvocationRuntime, InvokeAgentActionOptions, InvokeAgentOptions, ResolveAgentInvocationTargetOptions, ResolvedAgentInvocationTarget, } from "./invoke.js";
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/a2a/index.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,QAAQ,EAAE,cAAc,EAAE,MAAM,aAAa,CAAC;AACvD,YAAY,EAAE,eAAe,EAAE,MAAM,aAAa,CAAC;AACnD,OAAO,EAAE,iBAAiB,EAAE,MAAM,iBAAiB,CAAC;AACpD,OAAO,EACL,uBAAuB,EACvB,0BAA0B,EAC1B,gCAAgC,EAChC,mCAAmC,EACnC,+BAA+B,EAC/B,2BAA2B,EAC3B,4BAA4B,EAC5B,8BAA8B,EAC9B,gCAAgC,EAChC,0BAA0B,EAC1B,yBAAyB,EACzB,6BAA6B,EAC7B,2BAA2B,EAC3B,yBAAyB,GAC1B,MAAM,eAAe,CAAC;AAGvB,OAAO,EAAE,SAAS,EAAE,UAAU,EAAE,SAAS,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AAC7E,OAAO,EACL,oBAAoB,EACpB,0BAA0B,EAC1B,WAAW,EACX,iBAAiB,EACjB,iBAAiB,EACjB,4BAA4B,GAC7B,MAAM,aAAa,CAAC;AAGrB,YAAY,EACV,SAAS,EACT,UAAU,EACV,iBAAiB,EACjB,gBAAgB,EAChB,gBAAgB,EAChB,SAAS,EACT,UAAU,EACV,iBAAiB,EACjB,IAAI,EACJ,SAAS,EACT,UAAU,EACV,OAAO,EACP,IAAI,EACJ,QAAQ,EACR,QAAQ,EACR,QAAQ,EACR,QAAQ,EACR,cAAc,EACd,eAAe,EACf,sBAAsB,EACtB,2BAA2B,EAC3B,uBAAuB,EACvB,qBAAqB,EACrB,wBAAwB,EACxB,qBAAqB,EACrB,wBAAwB,EACxB,0BAA0B,GAC3B,MAAM,YAAY,CAAC;AACpB,YAAY,EACV,wBAAwB,EACxB,2BAA2B,EAC3B,qBAAqB,EACrB,sBAAsB,EACtB,wBAAwB,EACxB,kBAAkB,EAClB,mCAAmC,EACnC,6BAA6B,GAC9B,MAAM,aAAa,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/a2a/index.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,QAAQ,EAAE,cAAc,EAAE,MAAM,aAAa,CAAC;AACvD,YAAY,EAAE,eAAe,EAAE,MAAM,aAAa,CAAC;AACnD,OAAO,EAAE,iBAAiB,EAAE,MAAM,iBAAiB,CAAC;AACpD,OAAO,EACL,uBAAuB,EACvB,0BAA0B,EAC1B,gCAAgC,EAChC,mCAAmC,EACnC,+BAA+B,EAC/B,2BAA2B,EAC3B,4BAA4B,EAC5B,8BAA8B,EAC9B,gCAAgC,EAChC,0BAA0B,EAC1B,yBAAyB,EACzB,6BAA6B,EAC7B,2BAA2B,EAC3B,yBAAyB,GAC1B,MAAM,eAAe,CAAC;AAGvB,OAAO,EAAE,SAAS,EAAE,UAAU,EAAE,SAAS,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AAC7E,OAAO,EAAE,oBAAoB,EAAE,MAAM,kBAAkB,CAAC;AACxD,YAAY,EAAE,aAAa,EAAE,MAAM,kBAAkB,CAAC;AACtD,OAAO,EACL,oBAAoB,EACpB,0BAA0B,EAC1B,WAAW,EACX,iBAAiB,EACjB,iBAAiB,EACjB,4BAA4B,GAC7B,MAAM,aAAa,CAAC;AAGrB,YAAY,EACV,SAAS,EACT,UAAU,EACV,iBAAiB,EACjB,gBAAgB,EAChB,gBAAgB,EAChB,SAAS,EACT,UAAU,EACV,iBAAiB,EACjB,IAAI,EACJ,SAAS,EACT,UAAU,EACV,OAAO,EACP,IAAI,EACJ,QAAQ,EACR,QAAQ,EACR,QAAQ,EACR,QAAQ,EACR,cAAc,EACd,eAAe,EACf,sBAAsB,EACtB,2BAA2B,EAC3B,uBAAuB,EACvB,qBAAqB,EACrB,wBAAwB,EACxB,qBAAqB,EACrB,wBAAwB,EACxB,0BAA0B,GAC3B,MAAM,YAAY,CAAC;AACpB,YAAY,EACV,wBAAwB,EACxB,2BAA2B,EAC3B,qBAAqB,EACrB,sBAAsB,EACtB,wBAAwB,EACxB,kBAAkB,EAClB,mCAAmC,EACnC,6BAA6B,GAC9B,MAAM,aAAa,CAAC"}
package/dist/a2a/index.js CHANGED
@@ -4,5 +4,6 @@ export { generateAgentCard } from "./agent-card.js";
4
4
  export { A2A_AGENT_ACTIVITY_KIND, A2A_AGENT_ACTIVITY_VERSION, MAX_A2A_ACTIVITY_REASONING_CHARS, MAX_A2A_ACTIVITY_REASONING_SEGMENTS, MAX_A2A_ACTIVITY_RESPONSE_CHARS, MAX_A2A_ACTIVITY_TOOL_CALLS, MAX_A2A_ACTIVITY_TOTAL_CHARS, MAX_A2A_ACTIVITY_TOOL_ID_CHARS, MAX_A2A_ACTIVITY_TOOL_NAME_CHARS, applyA2AAgentActivityEvent, buildA2AAgentActivityPart, buildA2AAgentActivitySnapshot, createA2AAgentActivityState, parseA2AAgentActivityPart, } from "./activity.js";
5
5
  // Client
6
6
  export { A2AClient, callAction, callAgent, signA2AToken } from "./client.js";
7
+ export { resolveA2ACallerAuth } from "./caller-auth.js";
7
8
  export { AgentInvocationError, buildAgentInvocationPrompt, invokeAgent, invokeAgentAction, looksLikeAgentUrl, resolveAgentInvocationTarget, } from "./invoke.js";
8
9
  //# sourceMappingURL=index.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/a2a/index.ts"],"names":[],"mappings":"AAAA,oBAAoB;AACpB,OAAO,EAAE,QAAQ,EAAE,cAAc,EAAE,MAAM,aAAa,CAAC;AAEvD,OAAO,EAAE,iBAAiB,EAAE,MAAM,iBAAiB,CAAC;AACpD,OAAO,EACL,uBAAuB,EACvB,0BAA0B,EAC1B,gCAAgC,EAChC,mCAAmC,EACnC,+BAA+B,EAC/B,2BAA2B,EAC3B,4BAA4B,EAC5B,8BAA8B,EAC9B,gCAAgC,EAChC,0BAA0B,EAC1B,yBAAyB,EACzB,6BAA6B,EAC7B,2BAA2B,EAC3B,yBAAyB,GAC1B,MAAM,eAAe,CAAC;AAEvB,SAAS;AACT,OAAO,EAAE,SAAS,EAAE,UAAU,EAAE,SAAS,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AAC7E,OAAO,EACL,oBAAoB,EACpB,0BAA0B,EAC1B,WAAW,EACX,iBAAiB,EACjB,iBAAiB,EACjB,4BAA4B,GAC7B,MAAM,aAAa,CAAC","sourcesContent":["// Server (H3/Nitro)\nexport { mountA2A, verifyA2AToken } from \"./server.js\";\nexport type { A2ATokenPayload } from \"./server.js\";\nexport { generateAgentCard } from \"./agent-card.js\";\nexport {\n A2A_AGENT_ACTIVITY_KIND,\n A2A_AGENT_ACTIVITY_VERSION,\n MAX_A2A_ACTIVITY_REASONING_CHARS,\n MAX_A2A_ACTIVITY_REASONING_SEGMENTS,\n MAX_A2A_ACTIVITY_RESPONSE_CHARS,\n MAX_A2A_ACTIVITY_TOOL_CALLS,\n MAX_A2A_ACTIVITY_TOTAL_CHARS,\n MAX_A2A_ACTIVITY_TOOL_ID_CHARS,\n MAX_A2A_ACTIVITY_TOOL_NAME_CHARS,\n applyA2AAgentActivityEvent,\n buildA2AAgentActivityPart,\n buildA2AAgentActivitySnapshot,\n createA2AAgentActivityState,\n parseA2AAgentActivityPart,\n} from \"./activity.js\";\n\n// Client\nexport { A2AClient, callAction, callAgent, signA2AToken } from \"./client.js\";\nexport {\n AgentInvocationError,\n buildAgentInvocationPrompt,\n invokeAgent,\n invokeAgentAction,\n looksLikeAgentUrl,\n resolveAgentInvocationTarget,\n} from \"./invoke.js\";\n\n// Types\nexport type {\n A2AConfig,\n A2AHandler,\n A2AHandlerContext,\n A2AHandlerResult,\n A2ASourceContext,\n AgentCard,\n AgentSkill,\n AgentCapabilities,\n Task,\n TaskState,\n TaskStatus,\n Message,\n Part,\n TextPart,\n FilePart,\n DataPart,\n Artifact,\n JsonRpcRequest,\n JsonRpcResponse,\n A2ACorrelationMetadata,\n A2AReadOnlyActionInvocation,\n A2AReadOnlyActionResult,\n A2AAgentActivityPhase,\n A2AAgentActivitySnapshot,\n A2AAgentActivityState,\n A2AAgentActivityToolCall,\n A2AAgentActivityToolStatus,\n} from \"./types.js\";\nexport type {\n AgentInvocationErrorCode,\n AgentActionInvocationResult,\n AgentInvocationResult,\n AgentInvocationRuntime,\n InvokeAgentActionOptions,\n InvokeAgentOptions,\n ResolveAgentInvocationTargetOptions,\n ResolvedAgentInvocationTarget,\n} from \"./invoke.js\";\n"]}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/a2a/index.ts"],"names":[],"mappings":"AAAA,oBAAoB;AACpB,OAAO,EAAE,QAAQ,EAAE,cAAc,EAAE,MAAM,aAAa,CAAC;AAEvD,OAAO,EAAE,iBAAiB,EAAE,MAAM,iBAAiB,CAAC;AACpD,OAAO,EACL,uBAAuB,EACvB,0BAA0B,EAC1B,gCAAgC,EAChC,mCAAmC,EACnC,+BAA+B,EAC/B,2BAA2B,EAC3B,4BAA4B,EAC5B,8BAA8B,EAC9B,gCAAgC,EAChC,0BAA0B,EAC1B,yBAAyB,EACzB,6BAA6B,EAC7B,2BAA2B,EAC3B,yBAAyB,GAC1B,MAAM,eAAe,CAAC;AAEvB,SAAS;AACT,OAAO,EAAE,SAAS,EAAE,UAAU,EAAE,SAAS,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AAC7E,OAAO,EAAE,oBAAoB,EAAE,MAAM,kBAAkB,CAAC;AAExD,OAAO,EACL,oBAAoB,EACpB,0BAA0B,EAC1B,WAAW,EACX,iBAAiB,EACjB,iBAAiB,EACjB,4BAA4B,GAC7B,MAAM,aAAa,CAAC","sourcesContent":["// Server (H3/Nitro)\nexport { mountA2A, verifyA2AToken } from \"./server.js\";\nexport type { A2ATokenPayload } from \"./server.js\";\nexport { generateAgentCard } from \"./agent-card.js\";\nexport {\n A2A_AGENT_ACTIVITY_KIND,\n A2A_AGENT_ACTIVITY_VERSION,\n MAX_A2A_ACTIVITY_REASONING_CHARS,\n MAX_A2A_ACTIVITY_REASONING_SEGMENTS,\n MAX_A2A_ACTIVITY_RESPONSE_CHARS,\n MAX_A2A_ACTIVITY_TOOL_CALLS,\n MAX_A2A_ACTIVITY_TOTAL_CHARS,\n MAX_A2A_ACTIVITY_TOOL_ID_CHARS,\n MAX_A2A_ACTIVITY_TOOL_NAME_CHARS,\n applyA2AAgentActivityEvent,\n buildA2AAgentActivityPart,\n buildA2AAgentActivitySnapshot,\n createA2AAgentActivityState,\n parseA2AAgentActivityPart,\n} from \"./activity.js\";\n\n// Client\nexport { A2AClient, callAction, callAgent, signA2AToken } from \"./client.js\";\nexport { resolveA2ACallerAuth } from \"./caller-auth.js\";\nexport type { A2ACallerAuth } from \"./caller-auth.js\";\nexport {\n AgentInvocationError,\n buildAgentInvocationPrompt,\n invokeAgent,\n invokeAgentAction,\n looksLikeAgentUrl,\n resolveAgentInvocationTarget,\n} from \"./invoke.js\";\n\n// Types\nexport type {\n A2AConfig,\n A2AHandler,\n A2AHandlerContext,\n A2AHandlerResult,\n A2ASourceContext,\n AgentCard,\n AgentSkill,\n AgentCapabilities,\n Task,\n TaskState,\n TaskStatus,\n Message,\n Part,\n TextPart,\n FilePart,\n DataPart,\n Artifact,\n JsonRpcRequest,\n JsonRpcResponse,\n A2ACorrelationMetadata,\n A2AReadOnlyActionInvocation,\n A2AReadOnlyActionResult,\n A2AAgentActivityPhase,\n A2AAgentActivitySnapshot,\n A2AAgentActivityState,\n A2AAgentActivityToolCall,\n A2AAgentActivityToolStatus,\n} from \"./types.js\";\nexport type {\n AgentInvocationErrorCode,\n AgentActionInvocationResult,\n AgentInvocationResult,\n AgentInvocationRuntime,\n InvokeAgentActionOptions,\n InvokeAgentOptions,\n ResolveAgentInvocationTargetOptions,\n ResolvedAgentInvocationTarget,\n} from \"./invoke.js\";\n"]}
@@ -6,7 +6,7 @@ import { type ReasoningEffort } from "../shared/reasoning-effort.js";
6
6
  import { PROVIDER_TO_ENV } from "./engine/provider-env-vars.js";
7
7
  import type { AgentEngine, EngineTool, EngineMessage, EngineContentPart } from "./engine/types.js";
8
8
  import { type Processor } from "./processors.js";
9
- import { subscribeToRun, getActiveRunForThread, getActiveRunForThreadAsync, getRun, abortRun, abortRunDurably } from "./run-manager.js";
9
+ import { subscribeToRun, getActiveRunForThread, getActiveRunForThreadAsync, getRun, abortRun, abortRunDurably, abortTurnDurably } from "./run-manager.js";
10
10
  import type { ActiveRun } from "./run-manager.js";
11
11
  import { insertRun, isTurnAborted, markRunAborted, updateRunHeartbeat, updateRunStatusIfRunning, setRunError, setRunTerminalReason, claimBackgroundRun, readBackgroundRunClaim, recordRunDiagnostic, countRunsForTurn } from "./run-store.js";
12
12
  import type { ActionTool, AgentChatAttachment, AgentChatEvent, AgentChatReference, AgentChatStructuredMessage } from "./types.js";
@@ -1051,5 +1051,5 @@ export declare function resolveAgentRequestReasoningEffort({ model, requestEffor
1051
1051
  configuredEffort?: ReasoningEffort;
1052
1052
  }): ReasoningEffort | undefined;
1053
1053
  export declare function createProductionAgentHandler(options: ProductionAgentOptions): H3EventHandler;
1054
- export { getActiveRunForThread, getActiveRunForThreadAsync, getRun, abortRun, abortRunDurably, subscribeToRun, };
1054
+ export { getActiveRunForThread, getActiveRunForThreadAsync, getRun, abortRun, abortRunDurably, abortTurnDurably, subscribeToRun, };
1055
1055
  //# sourceMappingURL=production-agent.d.ts.map