@agent-native/core 0.118.1 → 0.119.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.
Files changed (131) hide show
  1. package/corpus/README.md +1 -1
  2. package/corpus/core/CHANGELOG.md +11 -0
  3. package/corpus/core/docs/content/a2a-protocol.mdx +15 -0
  4. package/corpus/core/docs/content/template-chat.mdx +1 -1
  5. package/corpus/core/docs/content/template-plan.mdx +3 -3
  6. package/corpus/core/package.json +1 -1
  7. package/corpus/core/src/a2a/activity.ts +371 -0
  8. package/corpus/core/src/a2a/client.ts +3 -1
  9. package/corpus/core/src/a2a/index.ts +21 -0
  10. package/corpus/core/src/a2a/types.ts +8 -0
  11. package/corpus/core/src/agent/model-config.ts +19 -23
  12. package/corpus/core/src/agent/production-agent.ts +167 -100
  13. package/corpus/core/src/agent/types.ts +16 -1
  14. package/corpus/core/src/client/chat/tool-call-display.tsx +190 -35
  15. package/corpus/core/src/client/chat-model-groups.ts +67 -27
  16. package/corpus/core/src/client/sharing/ShareButton.tsx +1 -27
  17. package/corpus/core/src/client/sharing/ShareDialog.tsx +0 -16
  18. package/corpus/core/src/client/sharing/useShareButtonController.ts +0 -7
  19. package/corpus/core/src/client/sharing/useShareDialogController.ts +0 -2
  20. package/corpus/core/src/client/sse-event-processor.ts +85 -1
  21. package/corpus/core/src/localization/default-messages.ts +6 -0
  22. package/corpus/core/src/scripts/agent-engines/list-agent-engines.ts +1 -18
  23. package/corpus/core/src/scripts/call-agent.ts +49 -6
  24. package/corpus/core/src/server/agent-chat-plugin.ts +50 -10
  25. package/corpus/core/src/templates/workspace-core/.agents/skills/a2a-protocol/SKILL.md +16 -0
  26. package/corpus/templates/clips/changelog/2026-07-23-fixed-recordings-failing-to-save-with-a-cancelled-or-cleanup.md +6 -0
  27. package/corpus/templates/clips/server/plugins/db.ts +9 -1
  28. package/dist/a2a/activity.d.ts +50 -0
  29. package/dist/a2a/activity.d.ts.map +1 -0
  30. package/dist/a2a/activity.js +236 -0
  31. package/dist/a2a/activity.js.map +1 -0
  32. package/dist/a2a/client.d.ts +2 -0
  33. package/dist/a2a/client.d.ts.map +1 -1
  34. package/dist/a2a/client.js +1 -1
  35. package/dist/a2a/client.js.map +1 -1
  36. package/dist/a2a/index.d.ts +2 -1
  37. package/dist/a2a/index.d.ts.map +1 -1
  38. package/dist/a2a/index.js +1 -0
  39. package/dist/a2a/index.js.map +1 -1
  40. package/dist/a2a/types.d.ts +1 -0
  41. package/dist/a2a/types.d.ts.map +1 -1
  42. package/dist/a2a/types.js.map +1 -1
  43. package/dist/agent/engine/anthropic-engine.d.ts +1 -1
  44. package/dist/agent/engine/builder-engine.d.ts +2 -2
  45. package/dist/agent/engine/builder-engine.d.ts.map +1 -1
  46. package/dist/agent/model-config.d.ts +16 -16
  47. package/dist/agent/model-config.d.ts.map +1 -1
  48. package/dist/agent/model-config.js +19 -23
  49. package/dist/agent/model-config.js.map +1 -1
  50. package/dist/agent/production-agent.d.ts +26 -0
  51. package/dist/agent/production-agent.d.ts.map +1 -1
  52. package/dist/agent/production-agent.js +137 -80
  53. package/dist/agent/production-agent.js.map +1 -1
  54. package/dist/agent/types.d.ts +10 -0
  55. package/dist/agent/types.d.ts.map +1 -1
  56. package/dist/agent/types.js.map +1 -1
  57. package/dist/client/chat/tool-call-display.d.ts.map +1 -1
  58. package/dist/client/chat/tool-call-display.js +63 -14
  59. package/dist/client/chat/tool-call-display.js.map +1 -1
  60. package/dist/client/chat-model-groups.d.ts.map +1 -1
  61. package/dist/client/chat-model-groups.js +44 -21
  62. package/dist/client/chat-model-groups.js.map +1 -1
  63. package/dist/client/sharing/ShareButton.d.ts +1 -1
  64. package/dist/client/sharing/ShareButton.d.ts.map +1 -1
  65. package/dist/client/sharing/ShareButton.js +3 -4
  66. package/dist/client/sharing/ShareButton.js.map +1 -1
  67. package/dist/client/sharing/ShareDialog.d.ts.map +1 -1
  68. package/dist/client/sharing/ShareDialog.js +1 -2
  69. package/dist/client/sharing/ShareDialog.js.map +1 -1
  70. package/dist/client/sharing/useShareButtonController.d.ts +0 -1
  71. package/dist/client/sharing/useShareButtonController.d.ts.map +1 -1
  72. package/dist/client/sharing/useShareButtonController.js +0 -6
  73. package/dist/client/sharing/useShareButtonController.js.map +1 -1
  74. package/dist/client/sharing/useShareDialogController.d.ts +0 -1
  75. package/dist/client/sharing/useShareDialogController.d.ts.map +1 -1
  76. package/dist/client/sharing/useShareDialogController.js +0 -1
  77. package/dist/client/sharing/useShareDialogController.js.map +1 -1
  78. package/dist/client/sse-event-processor.d.ts +12 -0
  79. package/dist/client/sse-event-processor.d.ts.map +1 -1
  80. package/dist/client/sse-event-processor.js +63 -1
  81. package/dist/client/sse-event-processor.js.map +1 -1
  82. package/dist/collab/awareness.d.ts +2 -2
  83. package/dist/collab/awareness.d.ts.map +1 -1
  84. package/dist/collab/routes.d.ts +1 -1
  85. package/dist/collab/struct-routes.d.ts +1 -1
  86. package/dist/localization/default-messages.d.ts +6 -0
  87. package/dist/localization/default-messages.d.ts.map +1 -1
  88. package/dist/localization/default-messages.js +6 -0
  89. package/dist/localization/default-messages.js.map +1 -1
  90. package/dist/notifications/routes.d.ts +2 -2
  91. package/dist/observability/routes.d.ts +1 -1
  92. package/dist/scripts/agent-engines/list-agent-engines.d.ts.map +1 -1
  93. package/dist/scripts/agent-engines/list-agent-engines.js +1 -18
  94. package/dist/scripts/agent-engines/list-agent-engines.js.map +1 -1
  95. package/dist/scripts/call-agent.d.ts.map +1 -1
  96. package/dist/scripts/call-agent.js +49 -6
  97. package/dist/scripts/call-agent.js.map +1 -1
  98. package/dist/server/agent-chat-plugin.d.ts.map +1 -1
  99. package/dist/server/agent-chat-plugin.js +38 -10
  100. package/dist/server/agent-chat-plugin.js.map +1 -1
  101. package/dist/server/agent-engine-api-key-route.d.ts +1 -1
  102. package/dist/templates/workspace-core/.agents/skills/a2a-protocol/SKILL.md +16 -0
  103. package/docs/content/a2a-protocol.mdx +15 -0
  104. package/docs/content/template-chat.mdx +1 -1
  105. package/docs/content/template-plan.mdx +3 -3
  106. package/package.json +1 -1
  107. package/src/a2a/activity.ts +371 -0
  108. package/src/a2a/client.ts +3 -1
  109. package/src/a2a/index.ts +21 -0
  110. package/src/a2a/types.ts +8 -0
  111. package/src/agent/model-config.ts +19 -23
  112. package/src/agent/production-agent.ts +167 -100
  113. package/src/agent/types.ts +16 -1
  114. package/src/client/chat/tool-call-display.tsx +190 -35
  115. package/src/client/chat-model-groups.ts +67 -27
  116. package/src/client/sharing/ShareButton.tsx +1 -27
  117. package/src/client/sharing/ShareDialog.tsx +0 -16
  118. package/src/client/sharing/useShareButtonController.ts +0 -7
  119. package/src/client/sharing/useShareDialogController.ts +0 -2
  120. package/src/client/sse-event-processor.ts +85 -1
  121. package/src/localization/default-messages.ts +6 -0
  122. package/src/scripts/agent-engines/list-agent-engines.ts +1 -18
  123. package/src/scripts/call-agent.ts +49 -6
  124. package/src/server/agent-chat-plugin.ts +50 -10
  125. package/src/templates/workspace-core/.agents/skills/a2a-protocol/SKILL.md +16 -0
  126. package/corpus/core/src/observability/hosted-model-experiment.ts +0 -118
  127. package/dist/observability/hosted-model-experiment.d.ts +0 -39
  128. package/dist/observability/hosted-model-experiment.d.ts.map +0 -1
  129. package/dist/observability/hosted-model-experiment.js +0 -90
  130. package/dist/observability/hosted-model-experiment.js.map +0 -1
  131. package/src/observability/hosted-model-experiment.ts +0 -118
@@ -13,6 +13,11 @@ import {
13
13
  type H3Event,
14
14
  } from "h3";
15
15
 
16
+ import {
17
+ applyA2AAgentActivityEvent,
18
+ buildA2AAgentActivityPart,
19
+ createA2AAgentActivityState,
20
+ } from "../a2a/activity.js";
16
21
  import {
17
22
  appendA2AArtifactLinks,
18
23
  buildA2ARecoverableArtifactMessage,
@@ -400,6 +405,8 @@ export function createSerializedA2ATaskStatusWriter(
400
405
  };
401
406
  }
402
407
 
408
+ const A2A_ACTIVITY_CHECKPOINT_MIN_INTERVAL_MS = 2_000;
409
+
403
410
  export async function resolveA2ARecoverableArtifactSecret(
404
411
  orgId: string | null | undefined = getRequestOrgId(),
405
412
  ): Promise<string | undefined> {
@@ -1656,10 +1663,36 @@ export function createAgentChatPlugin(
1656
1663
  const a2aEvents: AgentChatEvent[] = [];
1657
1664
  const a2aToolResults: A2AToolResultSummary[] = [];
1658
1665
  let lastRecoverableArtifactText = "";
1666
+ let activityState = createA2AAgentActivityState();
1667
+ let lastActivityCheckpointAt = 0;
1659
1668
  const recoverableArtifactSecret =
1660
1669
  await resolveA2ARecoverableArtifactSecret();
1661
1670
  const recoverableArtifactStatusWriter =
1662
1671
  createSerializedA2ATaskStatusWriter(context.taskId);
1672
+ const activityStatusMessage = (): A2AMessage => ({
1673
+ role: "agent",
1674
+ ...(lastRecoverableArtifactText
1675
+ ? { metadata: { agentNativeRecoverableArtifacts: true } }
1676
+ : {}),
1677
+ parts: [
1678
+ buildA2AAgentActivityPart(activityState),
1679
+ ...(lastRecoverableArtifactText
1680
+ ? [{ type: "text" as const, text: lastRecoverableArtifactText }]
1681
+ : []),
1682
+ ],
1683
+ });
1684
+ const checkpointActivity = (force = false) => {
1685
+ const now = Date.now();
1686
+ if (
1687
+ !force &&
1688
+ now - lastActivityCheckpointAt <
1689
+ A2A_ACTIVITY_CHECKPOINT_MIN_INTERVAL_MS
1690
+ ) {
1691
+ return;
1692
+ }
1693
+ lastActivityCheckpointAt = now;
1694
+ recoverableArtifactStatusWriter.enqueue(activityStatusMessage());
1695
+ };
1663
1696
  const controller = new AbortController();
1664
1697
  const correlation = sanitizeA2ACorrelationMetadata(context.metadata);
1665
1698
  const telemetryThreadId =
@@ -1697,6 +1730,12 @@ export function createAgentChatPlugin(
1697
1730
  turnId: context.taskId,
1698
1731
  send: (event) => {
1699
1732
  a2aEvents.push(event);
1733
+ const nextActivityState = applyA2AAgentActivityEvent(
1734
+ activityState,
1735
+ event,
1736
+ );
1737
+ const activityChanged = nextActivityState !== activityState;
1738
+ activityState = nextActivityState;
1700
1739
  if (event.type === "tool_start") {
1701
1740
  console.log(`[A2A] Tool call: ${event.tool}`);
1702
1741
  } else if (event.type === "tool_done") {
@@ -1727,22 +1766,20 @@ export function createAgentChatPlugin(
1727
1766
  recoverableArtifactText !== lastRecoverableArtifactText
1728
1767
  ) {
1729
1768
  lastRecoverableArtifactText = recoverableArtifactText;
1730
- recoverableArtifactStatusWriter.enqueue({
1731
- role: "agent",
1732
- metadata: { agentNativeRecoverableArtifacts: true },
1733
- parts: [
1734
- {
1735
- type: "text",
1736
- text: recoverableArtifactText,
1737
- },
1738
- ],
1739
- });
1740
1769
  }
1741
1770
  } else if (event.type === "error") {
1742
1771
  console.error(`[A2A] Error: ${event.error}`);
1743
1772
  } else if (event.type === "done") {
1744
1773
  console.log(`[A2A] Done. Events: ${a2aEvents.length}`);
1745
1774
  }
1775
+ if (activityChanged) {
1776
+ checkpointActivity(
1777
+ event.type === "tool_start" ||
1778
+ event.type === "tool_done" ||
1779
+ event.type === "error" ||
1780
+ event.type === "done",
1781
+ );
1782
+ }
1746
1783
  },
1747
1784
  signal: controller.signal,
1748
1785
  },
@@ -1779,6 +1816,7 @@ export function createAgentChatPlugin(
1779
1816
 
1780
1817
  // The continuation can observe terminal output immediately, so make
1781
1818
  // its latest mutation checkpoint durable first.
1819
+ checkpointActivity(true);
1782
1820
  await recoverableArtifactStatusWriter.flush();
1783
1821
 
1784
1822
  const approval = [...a2aEvents]
@@ -1817,6 +1855,7 @@ export function createAgentChatPlugin(
1817
1855
  },
1818
1856
  },
1819
1857
  parts: [
1858
+ buildA2AAgentActivityPart(activityState),
1820
1859
  {
1821
1860
  type: "text" as const,
1822
1861
  text:
@@ -1851,6 +1890,7 @@ export function createAgentChatPlugin(
1851
1890
  yield {
1852
1891
  role: "agent" as const,
1853
1892
  parts: [
1893
+ buildA2AAgentActivityPart(activityState),
1854
1894
  {
1855
1895
  type: "text" as const,
1856
1896
  text: finalText || "(no response)",
@@ -195,6 +195,22 @@ for await (const update of client.stream({
195
195
  }
196
196
  ```
197
197
 
198
+ ### Agent activity in delegated chat
199
+
200
+ Agent Native peers attach a bounded `data` part with
201
+ `kind: "agent-native/agent-activity"` to in-progress and terminal task status
202
+ messages. It contains the same user-visible reasoning summaries shown in the
203
+ receiving app, tool names and completion states, elapsed time, and progressive
204
+ response text. It never includes tool inputs, tool results, credentials, or
205
+ hidden provider reasoning.
206
+
207
+ `call-agent` reads this optional part while it polls an asynchronous task and
208
+ renders the remote work as a nested agent run. Unknown A2A peers do not need to
209
+ implement the extension: their ordinary status and final text still render in
210
+ the same nested block. Treat activity data as untrusted presentation content;
211
+ never use it for identity, authorization, approval, routing, or artifact
212
+ validation.
213
+
198
214
  ### Carrying explicit chat authorization
199
215
 
200
216
  When the authenticated caller has an exact consequential action that the user
@@ -0,0 +1,6 @@
1
+ ---
2
+ type: fixed
3
+ date: 2026-07-23
4
+ ---
5
+
6
+ Fixed recordings failing to save with a "cancelled" or "cleanup window" error during upload
@@ -1333,8 +1333,16 @@ async function sweepOrphanedResumableSessions(): Promise<void> {
1333
1333
  if (!key.startsWith(prefix)) continue;
1334
1334
  const recordingId = key.slice(prefix.length);
1335
1335
  if (!recordingId) continue;
1336
+ // `application_state.updated_at` is epoch-ms (a JS number on SQLite, a
1337
+ // BIGINT string on Postgres), but the staleness cutoffs below are ISO-8601.
1338
+ // Normalize to ISO before comparing — a raw epoch-ms value ("1753…") always
1339
+ // sorts lexically below any "2…" ISO date, which would flag every live
1340
+ // upload as stale and force-fail it.
1341
+ const sessionUpdatedAtMs = Number(row.updated_at);
1336
1342
  const sessionUpdatedAt =
1337
- typeof row.updated_at === "string" ? row.updated_at : "";
1343
+ Number.isFinite(sessionUpdatedAtMs) && sessionUpdatedAtMs > 0
1344
+ ? new Date(sessionUpdatedAtMs).toISOString()
1345
+ : "";
1338
1346
 
1339
1347
  let shouldSweep = false;
1340
1348
  try {
@@ -0,0 +1,50 @@
1
+ import type { AgentChatEvent } from "../agent/types.js";
2
+ import type { DataPart, Part } from "./types.js";
3
+ export declare const A2A_AGENT_ACTIVITY_KIND = "agent-native/agent-activity";
4
+ export declare const A2A_AGENT_ACTIVITY_VERSION = 1;
5
+ export declare const MAX_A2A_ACTIVITY_REASONING_CHARS = 32768;
6
+ export declare const MAX_A2A_ACTIVITY_RESPONSE_CHARS = 32768;
7
+ export declare const MAX_A2A_ACTIVITY_TOTAL_CHARS = 98304;
8
+ export declare const MAX_A2A_ACTIVITY_REASONING_SEGMENTS = 128;
9
+ export declare const MAX_A2A_ACTIVITY_TOOL_CALLS = 64;
10
+ export declare const MAX_A2A_ACTIVITY_TOOL_NAME_CHARS = 96;
11
+ export declare const MAX_A2A_ACTIVITY_TOOL_ID_CHARS = 128;
12
+ export type A2AAgentActivityPhase = "reasoning" | "tool" | "responding" | "complete" | "error";
13
+ export type A2AAgentActivityToolStatus = "running" | "completed" | "failed";
14
+ export interface A2AAgentActivityToolCall {
15
+ name: string;
16
+ id?: string;
17
+ status: A2AAgentActivityToolStatus;
18
+ }
19
+ export interface A2AAgentActivitySnapshot extends Record<string, unknown> {
20
+ kind: typeof A2A_AGENT_ACTIVITY_KIND;
21
+ version: typeof A2A_AGENT_ACTIVITY_VERSION;
22
+ sequence: number;
23
+ startedAt: number;
24
+ updatedAt: number;
25
+ durationMs: number;
26
+ activePhase: A2AAgentActivityPhase;
27
+ reasoning: string[];
28
+ toolCalls: A2AAgentActivityToolCall[];
29
+ responseText?: string;
30
+ }
31
+ export interface A2AAgentActivityState {
32
+ sequence: number;
33
+ startedAt: number;
34
+ updatedAt: number;
35
+ activePhase: A2AAgentActivityPhase;
36
+ reasoning: string[];
37
+ toolCalls: A2AAgentActivityToolCall[];
38
+ responseText: string;
39
+ }
40
+ export declare function createA2AAgentActivityState(startedAt?: number): A2AAgentActivityState;
41
+ /**
42
+ * Converts internal loop events into a bounded activity snapshot. It carries
43
+ * only reasoning text already emitted to the local chat, never tool inputs or
44
+ * results.
45
+ */
46
+ export declare function applyA2AAgentActivityEvent(state: A2AAgentActivityState, event: AgentChatEvent, updatedAt?: number): A2AAgentActivityState;
47
+ export declare function buildA2AAgentActivitySnapshot(state: A2AAgentActivityState): A2AAgentActivitySnapshot;
48
+ export declare function buildA2AAgentActivityPart(state: A2AAgentActivityState): DataPart;
49
+ export declare function parseA2AAgentActivityPart(part: Part | unknown): A2AAgentActivitySnapshot | null;
50
+ //# sourceMappingURL=activity.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"activity.d.ts","sourceRoot":"","sources":["../../src/a2a/activity.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,mBAAmB,CAAC;AACxD,OAAO,KAAK,EAAE,QAAQ,EAAE,IAAI,EAAE,MAAM,YAAY,CAAC;AAEjD,eAAO,MAAM,uBAAuB,gCAAgC,CAAC;AACrE,eAAO,MAAM,0BAA0B,IAAI,CAAC;AAC5C,eAAO,MAAM,gCAAgC,QAAS,CAAC;AACvD,eAAO,MAAM,+BAA+B,QAAS,CAAC;AACtD,eAAO,MAAM,4BAA4B,QAAS,CAAC;AACnD,eAAO,MAAM,mCAAmC,MAAM,CAAC;AACvD,eAAO,MAAM,2BAA2B,KAAK,CAAC;AAC9C,eAAO,MAAM,gCAAgC,KAAK,CAAC;AACnD,eAAO,MAAM,8BAA8B,MAAM,CAAC;AAElD,MAAM,MAAM,qBAAqB,GAC7B,WAAW,GACX,MAAM,GACN,YAAY,GACZ,UAAU,GACV,OAAO,CAAC;AAEZ,MAAM,MAAM,0BAA0B,GAAG,SAAS,GAAG,WAAW,GAAG,QAAQ,CAAC;AAE5E,MAAM,WAAW,wBAAwB;IACvC,IAAI,EAAE,MAAM,CAAC;IACb,EAAE,CAAC,EAAE,MAAM,CAAC;IACZ,MAAM,EAAE,0BAA0B,CAAC;CACpC;AAED,MAAM,WAAW,wBAAyB,SAAQ,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC;IACvE,IAAI,EAAE,OAAO,uBAAuB,CAAC;IACrC,OAAO,EAAE,OAAO,0BAA0B,CAAC;IAC3C,QAAQ,EAAE,MAAM,CAAC;IACjB,SAAS,EAAE,MAAM,CAAC;IAClB,SAAS,EAAE,MAAM,CAAC;IAClB,UAAU,EAAE,MAAM,CAAC;IACnB,WAAW,EAAE,qBAAqB,CAAC;IACnC,SAAS,EAAE,MAAM,EAAE,CAAC;IACpB,SAAS,EAAE,wBAAwB,EAAE,CAAC;IACtC,YAAY,CAAC,EAAE,MAAM,CAAC;CACvB;AAED,MAAM,WAAW,qBAAqB;IACpC,QAAQ,EAAE,MAAM,CAAC;IACjB,SAAS,EAAE,MAAM,CAAC;IAClB,SAAS,EAAE,MAAM,CAAC;IAClB,WAAW,EAAE,qBAAqB,CAAC;IACnC,SAAS,EAAE,MAAM,EAAE,CAAC;IACpB,SAAS,EAAE,wBAAwB,EAAE,CAAC;IACtC,YAAY,EAAE,MAAM,CAAC;CACtB;AAED,wBAAgB,2BAA2B,CACzC,SAAS,SAAa,GACrB,qBAAqB,CAUvB;AAED;;;;GAIG;AACH,wBAAgB,0BAA0B,CACxC,KAAK,EAAE,qBAAqB,EAC5B,KAAK,EAAE,cAAc,EACrB,SAAS,SAAa,GACrB,qBAAqB,CAkDvB;AAED,wBAAgB,6BAA6B,CAC3C,KAAK,EAAE,qBAAqB,GAC3B,wBAAwB,CAa1B;AAED,wBAAgB,yBAAyB,CACvC,KAAK,EAAE,qBAAqB,GAC3B,QAAQ,CAEV;AAED,wBAAgB,yBAAyB,CACvC,IAAI,EAAE,IAAI,GAAG,OAAO,GACnB,wBAAwB,GAAG,IAAI,CAyBjC"}
@@ -0,0 +1,236 @@
1
+ import { sanitizeToolErrorText } from "../agent/tool-error-redaction.js";
2
+ export const A2A_AGENT_ACTIVITY_KIND = "agent-native/agent-activity";
3
+ export const A2A_AGENT_ACTIVITY_VERSION = 1;
4
+ export const MAX_A2A_ACTIVITY_REASONING_CHARS = 32_768;
5
+ export const MAX_A2A_ACTIVITY_RESPONSE_CHARS = 32_768;
6
+ export const MAX_A2A_ACTIVITY_TOTAL_CHARS = 98_304;
7
+ export const MAX_A2A_ACTIVITY_REASONING_SEGMENTS = 128;
8
+ export const MAX_A2A_ACTIVITY_TOOL_CALLS = 64;
9
+ export const MAX_A2A_ACTIVITY_TOOL_NAME_CHARS = 96;
10
+ export const MAX_A2A_ACTIVITY_TOOL_ID_CHARS = 128;
11
+ export function createA2AAgentActivityState(startedAt = Date.now()) {
12
+ return {
13
+ sequence: 0,
14
+ startedAt,
15
+ updatedAt: startedAt,
16
+ activePhase: "reasoning",
17
+ reasoning: [],
18
+ toolCalls: [],
19
+ responseText: "",
20
+ };
21
+ }
22
+ /**
23
+ * Converts internal loop events into a bounded activity snapshot. It carries
24
+ * only reasoning text already emitted to the local chat, never tool inputs or
25
+ * results.
26
+ */
27
+ export function applyA2AAgentActivityEvent(state, event, updatedAt = Date.now()) {
28
+ const next = { ...state, updatedAt: normalizeTimestamp(updatedAt) };
29
+ let changed = false;
30
+ switch (event.type) {
31
+ case "thinking":
32
+ next.activePhase = "reasoning";
33
+ next.reasoning = appendBoundedSegment(next.reasoning, event.text, MAX_A2A_ACTIVITY_REASONING_CHARS, next.toolCalls.length);
34
+ changed = true;
35
+ break;
36
+ case "tool_start":
37
+ next.activePhase = "tool";
38
+ next.responseText = "";
39
+ next.toolCalls = appendToolCall(next.toolCalls, toolFromEvent(event));
40
+ changed = true;
41
+ break;
42
+ case "tool_done":
43
+ next.activePhase = "tool";
44
+ next.toolCalls = settleToolCall(next.toolCalls, toolFromEvent(event));
45
+ changed = true;
46
+ break;
47
+ case "text":
48
+ next.activePhase = "responding";
49
+ next.responseText = appendBoundedText(next.responseText, event.text, MAX_A2A_ACTIVITY_RESPONSE_CHARS);
50
+ changed = true;
51
+ break;
52
+ case "done":
53
+ next.activePhase = "complete";
54
+ changed = true;
55
+ break;
56
+ case "error":
57
+ next.activePhase = "error";
58
+ changed = true;
59
+ break;
60
+ case "clear":
61
+ next.responseText = "";
62
+ changed = true;
63
+ break;
64
+ }
65
+ return changed ? { ...next, sequence: state.sequence + 1 } : state;
66
+ }
67
+ export function buildA2AAgentActivitySnapshot(state) {
68
+ return {
69
+ kind: A2A_AGENT_ACTIVITY_KIND,
70
+ version: A2A_AGENT_ACTIVITY_VERSION,
71
+ sequence: state.sequence,
72
+ startedAt: state.startedAt,
73
+ updatedAt: state.updatedAt,
74
+ durationMs: Math.max(0, state.updatedAt - state.startedAt),
75
+ activePhase: state.activePhase,
76
+ reasoning: state.reasoning,
77
+ toolCalls: state.toolCalls,
78
+ ...(state.responseText ? { responseText: state.responseText } : {}),
79
+ };
80
+ }
81
+ export function buildA2AAgentActivityPart(state) {
82
+ return { type: "data", data: buildA2AAgentActivitySnapshot(state) };
83
+ }
84
+ export function parseA2AAgentActivityPart(part) {
85
+ if (!part || typeof part !== "object")
86
+ return null;
87
+ const candidate = part;
88
+ if (candidate.type !== "data" || !isRecord(candidate.data))
89
+ return null;
90
+ const data = candidate.data;
91
+ if (data.kind !== A2A_AGENT_ACTIVITY_KIND ||
92
+ data.version !== A2A_AGENT_ACTIVITY_VERSION ||
93
+ !isSafeInteger(data.sequence) ||
94
+ !isSafeInteger(data.startedAt) ||
95
+ !isSafeInteger(data.updatedAt) ||
96
+ !isSafeInteger(data.durationMs) ||
97
+ !isPhase(data.activePhase) ||
98
+ data.updatedAt < data.startedAt ||
99
+ data.durationMs !== data.updatedAt - data.startedAt ||
100
+ !isSafeReasoning(data.reasoning) ||
101
+ !isSafeToolCalls(data.toolCalls) ||
102
+ (data.responseText !== undefined &&
103
+ !isSafeText(data.responseText, MAX_A2A_ACTIVITY_RESPONSE_CHARS)) ||
104
+ activityCharacterCount(data) > MAX_A2A_ACTIVITY_TOTAL_CHARS) {
105
+ return null;
106
+ }
107
+ return data;
108
+ }
109
+ function toolFromEvent(event) {
110
+ const id = sanitizeToolId(event.id);
111
+ return {
112
+ name: sanitizeToolName(event.tool),
113
+ ...(id ? { id } : {}),
114
+ status: event.type === "tool_start"
115
+ ? "running"
116
+ : event.isError
117
+ ? "failed"
118
+ : "completed",
119
+ };
120
+ }
121
+ function appendBoundedText(current, addition, maxChars) {
122
+ return sanitizeText(`${current}${addition}`, maxChars);
123
+ }
124
+ function appendBoundedSegment(current, addition, maxChars, precedingToolCount) {
125
+ const used = current.reduce((total, text) => total + text.length, 0);
126
+ if (used >= maxChars ||
127
+ current.length >= MAX_A2A_ACTIVITY_REASONING_SEGMENTS) {
128
+ return current;
129
+ }
130
+ const text = sanitizeText(addition, maxChars - used);
131
+ if (!text)
132
+ return current;
133
+ const next = [...current];
134
+ while (next.length < precedingToolCount &&
135
+ next.length < MAX_A2A_ACTIVITY_REASONING_SEGMENTS) {
136
+ next.push("");
137
+ }
138
+ if (next.length === precedingToolCount) {
139
+ return [...next, text];
140
+ }
141
+ next[precedingToolCount] = `${next[precedingToolCount] ?? ""}${text}`;
142
+ return next;
143
+ }
144
+ function appendToolCall(current, tool) {
145
+ return current.length < MAX_A2A_ACTIVITY_TOOL_CALLS
146
+ ? [...current, tool]
147
+ : current;
148
+ }
149
+ function settleToolCall(current, tool) {
150
+ for (let index = current.length - 1; index >= 0; index -= 1) {
151
+ const existing = current[index];
152
+ if ((tool.id && tool.id === existing.id) ||
153
+ (!tool.id && tool.name === existing.name)) {
154
+ return current.map((value, itemIndex) => itemIndex === index ? tool : value);
155
+ }
156
+ }
157
+ return appendToolCall(current, tool);
158
+ }
159
+ function sanitizeText(value, maxChars) {
160
+ return sanitizeToolErrorText(value)
161
+ .replace(/\r\n?/g, "\n")
162
+ .replace(/[\u0000-\u0008\u000b\u000c\u000e-\u001f\u007f]/g, "")
163
+ .slice(0, maxChars);
164
+ }
165
+ function sanitizeToolName(value) {
166
+ return sanitizeText(value, MAX_A2A_ACTIVITY_TOOL_NAME_CHARS) || "tool";
167
+ }
168
+ function sanitizeToolId(value) {
169
+ const sanitized = value
170
+ ? sanitizeText(value, MAX_A2A_ACTIVITY_TOOL_ID_CHARS)
171
+ : "";
172
+ return sanitized || undefined;
173
+ }
174
+ function normalizeTimestamp(value) {
175
+ return isSafeInteger(value) ? value : Date.now();
176
+ }
177
+ function isRecord(value) {
178
+ return !!value && typeof value === "object" && !Array.isArray(value);
179
+ }
180
+ function isSafeInteger(value) {
181
+ return typeof value === "number" && Number.isSafeInteger(value) && value >= 0;
182
+ }
183
+ function isPhase(value) {
184
+ return ["reasoning", "tool", "responding", "complete", "error"].includes(value);
185
+ }
186
+ function isSafeReasoning(value) {
187
+ return (Array.isArray(value) &&
188
+ value.length <= MAX_A2A_ACTIVITY_REASONING_SEGMENTS &&
189
+ value.reduce((total, text) => total + (typeof text === "string" ? text.length : Infinity), 0) <= MAX_A2A_ACTIVITY_REASONING_CHARS &&
190
+ value.every((text) => isSafeText(text, MAX_A2A_ACTIVITY_REASONING_CHARS)));
191
+ }
192
+ function isSafeToolCalls(value) {
193
+ return (Array.isArray(value) &&
194
+ value.length <= MAX_A2A_ACTIVITY_TOOL_CALLS &&
195
+ value.every(isSafeToolCall));
196
+ }
197
+ function isSafeToolCall(value) {
198
+ if (!isRecord(value) || !isSafeToolName(value.name))
199
+ return false;
200
+ return ((value.id === undefined || isSafeToolId(value.id)) &&
201
+ (value.status === "running" ||
202
+ value.status === "completed" ||
203
+ value.status === "failed"));
204
+ }
205
+ function isSafeText(value, maxChars) {
206
+ return (typeof value === "string" &&
207
+ value.length <= maxChars &&
208
+ value === sanitizeText(value, maxChars));
209
+ }
210
+ function isSafeToolName(value) {
211
+ return (typeof value === "string" &&
212
+ value.length <= MAX_A2A_ACTIVITY_TOOL_NAME_CHARS &&
213
+ value === sanitizeToolName(value));
214
+ }
215
+ function isSafeToolId(value) {
216
+ return (typeof value === "string" &&
217
+ value.length <= MAX_A2A_ACTIVITY_TOOL_ID_CHARS &&
218
+ value === sanitizeToolId(value));
219
+ }
220
+ function activityCharacterCount(data) {
221
+ const reasoning = Array.isArray(data.reasoning)
222
+ ? data.reasoning.reduce((total, text) => total + (typeof text === "string" ? text.length : 0), 0)
223
+ : 0;
224
+ const response = typeof data.responseText === "string" ? data.responseText.length : 0;
225
+ const tools = Array.isArray(data.toolCalls)
226
+ ? data.toolCalls.reduce((total, tool) => {
227
+ if (!isRecord(tool))
228
+ return total;
229
+ return (total +
230
+ (typeof tool.name === "string" ? tool.name.length : 0) +
231
+ (typeof tool.id === "string" ? tool.id.length : 0));
232
+ }, 0)
233
+ : 0;
234
+ return reasoning + response + tools;
235
+ }
236
+ //# sourceMappingURL=activity.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"activity.js","sourceRoot":"","sources":["../../src/a2a/activity.ts"],"names":[],"mappings":"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","sourcesContent":["import { sanitizeToolErrorText } from \"../agent/tool-error-redaction.js\";\nimport type { AgentChatEvent } from \"../agent/types.js\";\nimport type { DataPart, Part } from \"./types.js\";\n\nexport const A2A_AGENT_ACTIVITY_KIND = \"agent-native/agent-activity\";\nexport const A2A_AGENT_ACTIVITY_VERSION = 1;\nexport const MAX_A2A_ACTIVITY_REASONING_CHARS = 32_768;\nexport const MAX_A2A_ACTIVITY_RESPONSE_CHARS = 32_768;\nexport const MAX_A2A_ACTIVITY_TOTAL_CHARS = 98_304;\nexport const MAX_A2A_ACTIVITY_REASONING_SEGMENTS = 128;\nexport const MAX_A2A_ACTIVITY_TOOL_CALLS = 64;\nexport const MAX_A2A_ACTIVITY_TOOL_NAME_CHARS = 96;\nexport const MAX_A2A_ACTIVITY_TOOL_ID_CHARS = 128;\n\nexport type A2AAgentActivityPhase =\n | \"reasoning\"\n | \"tool\"\n | \"responding\"\n | \"complete\"\n | \"error\";\n\nexport type A2AAgentActivityToolStatus = \"running\" | \"completed\" | \"failed\";\n\nexport interface A2AAgentActivityToolCall {\n name: string;\n id?: string;\n status: A2AAgentActivityToolStatus;\n}\n\nexport interface A2AAgentActivitySnapshot extends Record<string, unknown> {\n kind: typeof A2A_AGENT_ACTIVITY_KIND;\n version: typeof A2A_AGENT_ACTIVITY_VERSION;\n sequence: number;\n startedAt: number;\n updatedAt: number;\n durationMs: number;\n activePhase: A2AAgentActivityPhase;\n reasoning: string[];\n toolCalls: A2AAgentActivityToolCall[];\n responseText?: string;\n}\n\nexport interface A2AAgentActivityState {\n sequence: number;\n startedAt: number;\n updatedAt: number;\n activePhase: A2AAgentActivityPhase;\n reasoning: string[];\n toolCalls: A2AAgentActivityToolCall[];\n responseText: string;\n}\n\nexport function createA2AAgentActivityState(\n startedAt = Date.now(),\n): A2AAgentActivityState {\n return {\n sequence: 0,\n startedAt,\n updatedAt: startedAt,\n activePhase: \"reasoning\",\n reasoning: [],\n toolCalls: [],\n responseText: \"\",\n };\n}\n\n/**\n * Converts internal loop events into a bounded activity snapshot. It carries\n * only reasoning text already emitted to the local chat, never tool inputs or\n * results.\n */\nexport function applyA2AAgentActivityEvent(\n state: A2AAgentActivityState,\n event: AgentChatEvent,\n updatedAt = Date.now(),\n): A2AAgentActivityState {\n const next = { ...state, updatedAt: normalizeTimestamp(updatedAt) };\n let changed = false;\n\n switch (event.type) {\n case \"thinking\":\n next.activePhase = \"reasoning\";\n next.reasoning = appendBoundedSegment(\n next.reasoning,\n event.text,\n MAX_A2A_ACTIVITY_REASONING_CHARS,\n next.toolCalls.length,\n );\n changed = true;\n break;\n case \"tool_start\":\n next.activePhase = \"tool\";\n next.responseText = \"\";\n next.toolCalls = appendToolCall(next.toolCalls, toolFromEvent(event));\n changed = true;\n break;\n case \"tool_done\":\n next.activePhase = \"tool\";\n next.toolCalls = settleToolCall(next.toolCalls, toolFromEvent(event));\n changed = true;\n break;\n case \"text\":\n next.activePhase = \"responding\";\n next.responseText = appendBoundedText(\n next.responseText,\n event.text,\n MAX_A2A_ACTIVITY_RESPONSE_CHARS,\n );\n changed = true;\n break;\n case \"done\":\n next.activePhase = \"complete\";\n changed = true;\n break;\n case \"error\":\n next.activePhase = \"error\";\n changed = true;\n break;\n case \"clear\":\n next.responseText = \"\";\n changed = true;\n break;\n }\n\n return changed ? { ...next, sequence: state.sequence + 1 } : state;\n}\n\nexport function buildA2AAgentActivitySnapshot(\n state: A2AAgentActivityState,\n): A2AAgentActivitySnapshot {\n return {\n kind: A2A_AGENT_ACTIVITY_KIND,\n version: A2A_AGENT_ACTIVITY_VERSION,\n sequence: state.sequence,\n startedAt: state.startedAt,\n updatedAt: state.updatedAt,\n durationMs: Math.max(0, state.updatedAt - state.startedAt),\n activePhase: state.activePhase,\n reasoning: state.reasoning,\n toolCalls: state.toolCalls,\n ...(state.responseText ? { responseText: state.responseText } : {}),\n };\n}\n\nexport function buildA2AAgentActivityPart(\n state: A2AAgentActivityState,\n): DataPart {\n return { type: \"data\", data: buildA2AAgentActivitySnapshot(state) };\n}\n\nexport function parseA2AAgentActivityPart(\n part: Part | unknown,\n): A2AAgentActivitySnapshot | null {\n if (!part || typeof part !== \"object\") return null;\n const candidate = part as { type?: unknown; data?: unknown };\n if (candidate.type !== \"data\" || !isRecord(candidate.data)) return null;\n const data = candidate.data;\n if (\n data.kind !== A2A_AGENT_ACTIVITY_KIND ||\n data.version !== A2A_AGENT_ACTIVITY_VERSION ||\n !isSafeInteger(data.sequence) ||\n !isSafeInteger(data.startedAt) ||\n !isSafeInteger(data.updatedAt) ||\n !isSafeInteger(data.durationMs) ||\n !isPhase(data.activePhase) ||\n data.updatedAt < data.startedAt ||\n data.durationMs !== data.updatedAt - data.startedAt ||\n !isSafeReasoning(data.reasoning) ||\n !isSafeToolCalls(data.toolCalls) ||\n (data.responseText !== undefined &&\n !isSafeText(data.responseText, MAX_A2A_ACTIVITY_RESPONSE_CHARS)) ||\n activityCharacterCount(data) > MAX_A2A_ACTIVITY_TOTAL_CHARS\n ) {\n return null;\n }\n\n return data as unknown as A2AAgentActivitySnapshot;\n}\n\nfunction toolFromEvent(\n event: Extract<AgentChatEvent, { type: \"tool_start\" | \"tool_done\" }>,\n): A2AAgentActivityToolCall {\n const id = sanitizeToolId(event.id);\n return {\n name: sanitizeToolName(event.tool),\n ...(id ? { id } : {}),\n status:\n event.type === \"tool_start\"\n ? \"running\"\n : event.isError\n ? \"failed\"\n : \"completed\",\n };\n}\n\nfunction appendBoundedText(\n current: string,\n addition: string,\n maxChars: number,\n) {\n return sanitizeText(`${current}${addition}`, maxChars);\n}\n\nfunction appendBoundedSegment(\n current: string[],\n addition: string,\n maxChars: number,\n precedingToolCount: number,\n): string[] {\n const used = current.reduce((total, text) => total + text.length, 0);\n if (\n used >= maxChars ||\n current.length >= MAX_A2A_ACTIVITY_REASONING_SEGMENTS\n ) {\n return current;\n }\n const text = sanitizeText(addition, maxChars - used);\n if (!text) return current;\n const next = [...current];\n while (\n next.length < precedingToolCount &&\n next.length < MAX_A2A_ACTIVITY_REASONING_SEGMENTS\n ) {\n next.push(\"\");\n }\n if (next.length === precedingToolCount) {\n return [...next, text];\n }\n next[precedingToolCount] = `${next[precedingToolCount] ?? \"\"}${text}`;\n return next;\n}\n\nfunction appendToolCall(\n current: A2AAgentActivityToolCall[],\n tool: A2AAgentActivityToolCall,\n): A2AAgentActivityToolCall[] {\n return current.length < MAX_A2A_ACTIVITY_TOOL_CALLS\n ? [...current, tool]\n : current;\n}\n\nfunction settleToolCall(\n current: A2AAgentActivityToolCall[],\n tool: A2AAgentActivityToolCall,\n): A2AAgentActivityToolCall[] {\n for (let index = current.length - 1; index >= 0; index -= 1) {\n const existing = current[index];\n if (\n (tool.id && tool.id === existing.id) ||\n (!tool.id && tool.name === existing.name)\n ) {\n return current.map((value, itemIndex) =>\n itemIndex === index ? tool : value,\n );\n }\n }\n return appendToolCall(current, tool);\n}\n\nfunction sanitizeText(value: string, maxChars: number): string {\n return sanitizeToolErrorText(value)\n .replace(/\\r\\n?/g, \"\\n\")\n .replace(/[\\u0000-\\u0008\\u000b\\u000c\\u000e-\\u001f\\u007f]/g, \"\")\n .slice(0, maxChars);\n}\n\nfunction sanitizeToolName(value: string): string {\n return sanitizeText(value, MAX_A2A_ACTIVITY_TOOL_NAME_CHARS) || \"tool\";\n}\n\nfunction sanitizeToolId(value: string | undefined): string | undefined {\n const sanitized = value\n ? sanitizeText(value, MAX_A2A_ACTIVITY_TOOL_ID_CHARS)\n : \"\";\n return sanitized || undefined;\n}\n\nfunction normalizeTimestamp(value: number): number {\n return isSafeInteger(value) ? value : Date.now();\n}\n\nfunction isRecord(value: unknown): value is Record<string, unknown> {\n return !!value && typeof value === \"object\" && !Array.isArray(value);\n}\n\nfunction isSafeInteger(value: unknown): value is number {\n return typeof value === \"number\" && Number.isSafeInteger(value) && value >= 0;\n}\n\nfunction isPhase(value: unknown): value is A2AAgentActivityPhase {\n return [\"reasoning\", \"tool\", \"responding\", \"complete\", \"error\"].includes(\n value as string,\n );\n}\n\nfunction isSafeReasoning(value: unknown): value is string[] {\n return (\n Array.isArray(value) &&\n value.length <= MAX_A2A_ACTIVITY_REASONING_SEGMENTS &&\n value.reduce(\n (total, text) =>\n total + (typeof text === \"string\" ? text.length : Infinity),\n 0,\n ) <= MAX_A2A_ACTIVITY_REASONING_CHARS &&\n value.every((text) => isSafeText(text, MAX_A2A_ACTIVITY_REASONING_CHARS))\n );\n}\n\nfunction isSafeToolCalls(value: unknown): value is A2AAgentActivityToolCall[] {\n return (\n Array.isArray(value) &&\n value.length <= MAX_A2A_ACTIVITY_TOOL_CALLS &&\n value.every(isSafeToolCall)\n );\n}\n\nfunction isSafeToolCall(value: unknown): value is A2AAgentActivityToolCall {\n if (!isRecord(value) || !isSafeToolName(value.name)) return false;\n return (\n (value.id === undefined || isSafeToolId(value.id)) &&\n (value.status === \"running\" ||\n value.status === \"completed\" ||\n value.status === \"failed\")\n );\n}\n\nfunction isSafeText(value: unknown, maxChars: number): value is string {\n return (\n typeof value === \"string\" &&\n value.length <= maxChars &&\n value === sanitizeText(value, maxChars)\n );\n}\n\nfunction isSafeToolName(value: unknown): value is string {\n return (\n typeof value === \"string\" &&\n value.length <= MAX_A2A_ACTIVITY_TOOL_NAME_CHARS &&\n value === sanitizeToolName(value)\n );\n}\n\nfunction isSafeToolId(value: unknown): value is string {\n return (\n typeof value === \"string\" &&\n value.length <= MAX_A2A_ACTIVITY_TOOL_ID_CHARS &&\n value === sanitizeToolId(value)\n );\n}\n\nfunction activityCharacterCount(data: Record<string, unknown>): number {\n const reasoning = Array.isArray(data.reasoning)\n ? data.reasoning.reduce(\n (total, text) => total + (typeof text === \"string\" ? text.length : 0),\n 0,\n )\n : 0;\n const response =\n typeof data.responseText === \"string\" ? data.responseText.length : 0;\n const tools = Array.isArray(data.toolCalls)\n ? data.toolCalls.reduce((total, tool) => {\n if (!isRecord(tool)) return total;\n return (\n total +\n (typeof tool.name === \"string\" ? tool.name.length : 0) +\n (typeof tool.id === \"string\" ? tool.id.length : 0)\n );\n }, 0)\n : 0;\n return reasoning + response + tools;\n}\n"]}
@@ -128,6 +128,8 @@ export declare class A2AClient {
128
128
  */
129
129
  export declare function callAgent(url: string, text: string, opts?: {
130
130
  apiKey?: string;
131
+ /** Additional transport metadata. Receivers must not use it as identity. */
132
+ metadata?: Record<string, unknown>;
131
133
  contextId?: string;
132
134
  userEmail?: string;
133
135
  orgDomain?: string;
@@ -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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"}
@@ -454,7 +454,7 @@ function isA2AAuthRejectionResponse(status, text) {
454
454
  * identity (instead of blindly trusting metadata).
455
455
  */
456
456
  export async function callAgent(url, text, opts) {
457
- const metadata = {};
457
+ const metadata = { ...opts?.metadata };
458
458
  if (opts?.userEmail)
459
459
  metadata.userEmail = opts.userEmail;
460
460
  if (opts?.orgDomain)