@agent-native/core 0.118.1 → 0.119.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/corpus/README.md +2 -2
- package/corpus/core/CHANGELOG.md +19 -0
- package/corpus/core/docs/content/a2a-protocol.mdx +15 -0
- package/corpus/core/docs/content/template-chat.mdx +1 -1
- package/corpus/core/docs/content/template-plan.mdx +3 -3
- package/corpus/core/package.json +1 -1
- package/corpus/core/src/a2a/activity.ts +371 -0
- package/corpus/core/src/a2a/client.ts +3 -1
- package/corpus/core/src/a2a/index.ts +21 -0
- package/corpus/core/src/a2a/types.ts +8 -0
- package/corpus/core/src/agent/model-config.ts +19 -23
- package/corpus/core/src/agent/production-agent.ts +167 -100
- package/corpus/core/src/agent/types.ts +16 -1
- package/corpus/core/src/client/chat/tool-call-display.tsx +190 -35
- package/corpus/core/src/client/chat-model-groups.ts +67 -27
- package/corpus/core/src/client/sharing/ShareButton.tsx +1 -27
- package/corpus/core/src/client/sharing/ShareDialog.tsx +0 -16
- package/corpus/core/src/client/sharing/useShareButtonController.ts +0 -7
- package/corpus/core/src/client/sharing/useShareDialogController.ts +0 -2
- package/corpus/core/src/client/sse-event-processor.ts +85 -1
- package/corpus/core/src/ingestion/figma-node-to-html.ts +20 -99
- package/corpus/core/src/ingestion/figma-paint-math.ts +371 -0
- package/corpus/core/src/ingestion/index.ts +20 -0
- package/corpus/core/src/localization/default-messages.ts +6 -0
- package/corpus/core/src/scripts/agent-engines/list-agent-engines.ts +1 -18
- package/corpus/core/src/scripts/call-agent.ts +49 -6
- package/corpus/core/src/server/agent-chat-plugin.ts +50 -10
- package/corpus/core/src/templates/workspace-core/.agents/skills/a2a-protocol/SKILL.md +16 -0
- package/corpus/templates/assets/app/routes/library.tsx +17 -9
- package/corpus/templates/clips/changelog/2026-07-23-fixed-recordings-failing-to-save-with-a-cancelled-or-cleanup.md +6 -0
- package/corpus/templates/clips/server/plugins/db.ts +9 -1
- package/corpus/templates/design/AGENTS.md +18 -5
- package/corpus/templates/design/FIGMA_INTEROPERABILITY.md +25 -12
- package/corpus/templates/design/actions/hydrate-figma-paste-images.ts +115 -0
- package/corpus/templates/design/actions/import-figma-clipboard.ts +83 -18
- package/corpus/templates/design/actions/import-figma-frame.ts +34 -21
- package/corpus/templates/design/app/components/design/DesignCanvas.tsx +28 -1
- package/corpus/templates/design/app/components/design/DesignImportPanel.tsx +106 -11
- package/corpus/templates/design/app/components/design/FigmaHydrationDialog.tsx +273 -0
- package/corpus/templates/design/app/components/design/MultiScreenCanvas.tsx +7 -7
- package/corpus/templates/design/app/components/design/bridge/editor-chrome.bridge.ts +57 -9
- package/corpus/templates/design/app/components/design/design-canvas/iframe-events.ts +10 -0
- package/corpus/templates/design/app/components/design/multi-screen/board-surface-html.ts +8 -1
- package/corpus/templates/design/app/components/design/multi-screen/types.ts +3 -0
- package/corpus/templates/design/app/i18n-data.ts +150 -2
- package/corpus/templates/design/app/lib/design-file-upload.ts +85 -0
- package/corpus/templates/design/app/lib/design-import.ts +19 -1
- package/corpus/templates/design/app/lib/figma-clipboard.ts +110 -10
- package/corpus/templates/design/changelog/2026-07-20-paste-figma-frames-directly-onto-the-canvas-no-token-needed.md +6 -0
- package/corpus/templates/design/changelog/2026-07-21-fig-upload-frame-url-and-rate-limit-errors.md +5 -0
- package/corpus/templates/design/changelog/2026-07-22-connecting-a-figma-token-now-actually-fills-in-a-pasted-desi.md +6 -0
- package/corpus/templates/design/changelog/2026-07-22-figma-line-arrow-vectors-and-stroked-icons-now-render-instea.md +6 -0
- package/corpus/templates/design/changelog/2026-07-22-fill-a-no-token-figma-paste-s-images-by-dropping-the-origina.md +6 -0
- package/corpus/templates/design/changelog/2026-07-22-imported-and-pasted-figma-frames-now-render-faithfully-fixed.md +6 -0
- package/corpus/templates/design/server/handlers/import-design-file.ts +50 -0
- package/corpus/templates/design/server/lib/fig-file-decoder.ts +90 -49
- package/corpus/templates/design/server/lib/fig-file-import.ts +19 -5
- package/corpus/templates/design/server/lib/fig-file-to-html.ts +583 -78
- package/corpus/templates/design/server/lib/figma-clipboard-local-decode.ts +238 -0
- package/corpus/templates/design/server/lib/figma-image-hydration.ts +389 -0
- package/corpus/templates/design/server/lib/figma-node-import.ts +136 -36
- package/corpus/templates/design/server/register-secrets.ts +14 -2
- package/dist/a2a/activity.d.ts +50 -0
- package/dist/a2a/activity.d.ts.map +1 -0
- package/dist/a2a/activity.js +236 -0
- package/dist/a2a/activity.js.map +1 -0
- package/dist/a2a/client.d.ts +2 -0
- package/dist/a2a/client.d.ts.map +1 -1
- package/dist/a2a/client.js +1 -1
- package/dist/a2a/client.js.map +1 -1
- package/dist/a2a/index.d.ts +2 -1
- package/dist/a2a/index.d.ts.map +1 -1
- package/dist/a2a/index.js +1 -0
- package/dist/a2a/index.js.map +1 -1
- package/dist/a2a/types.d.ts +1 -0
- package/dist/a2a/types.d.ts.map +1 -1
- package/dist/a2a/types.js.map +1 -1
- package/dist/agent/engine/anthropic-engine.d.ts +1 -1
- package/dist/agent/engine/builder-engine.d.ts +2 -2
- package/dist/agent/engine/builder-engine.d.ts.map +1 -1
- package/dist/agent/model-config.d.ts +16 -16
- package/dist/agent/model-config.d.ts.map +1 -1
- package/dist/agent/model-config.js +19 -23
- package/dist/agent/model-config.js.map +1 -1
- package/dist/agent/production-agent.d.ts +26 -0
- package/dist/agent/production-agent.d.ts.map +1 -1
- package/dist/agent/production-agent.js +137 -80
- package/dist/agent/production-agent.js.map +1 -1
- package/dist/agent/types.d.ts +10 -0
- package/dist/agent/types.d.ts.map +1 -1
- package/dist/agent/types.js.map +1 -1
- package/dist/client/chat/tool-call-display.d.ts.map +1 -1
- package/dist/client/chat/tool-call-display.js +63 -14
- package/dist/client/chat/tool-call-display.js.map +1 -1
- package/dist/client/chat-model-groups.d.ts.map +1 -1
- package/dist/client/chat-model-groups.js +44 -21
- package/dist/client/chat-model-groups.js.map +1 -1
- package/dist/client/sharing/ShareButton.d.ts +1 -1
- package/dist/client/sharing/ShareButton.d.ts.map +1 -1
- package/dist/client/sharing/ShareButton.js +3 -4
- package/dist/client/sharing/ShareButton.js.map +1 -1
- package/dist/client/sharing/ShareDialog.d.ts.map +1 -1
- package/dist/client/sharing/ShareDialog.js +1 -2
- package/dist/client/sharing/ShareDialog.js.map +1 -1
- package/dist/client/sharing/useShareButtonController.d.ts +0 -1
- package/dist/client/sharing/useShareButtonController.d.ts.map +1 -1
- package/dist/client/sharing/useShareButtonController.js +0 -6
- package/dist/client/sharing/useShareButtonController.js.map +1 -1
- package/dist/client/sharing/useShareDialogController.d.ts +0 -1
- package/dist/client/sharing/useShareDialogController.d.ts.map +1 -1
- package/dist/client/sharing/useShareDialogController.js +0 -1
- package/dist/client/sharing/useShareDialogController.js.map +1 -1
- package/dist/client/sse-event-processor.d.ts +12 -0
- package/dist/client/sse-event-processor.d.ts.map +1 -1
- package/dist/client/sse-event-processor.js +63 -1
- package/dist/client/sse-event-processor.js.map +1 -1
- package/dist/collab/routes.d.ts +1 -1
- package/dist/ingestion/figma-node-to-html.d.ts.map +1 -1
- package/dist/ingestion/figma-node-to-html.js +14 -88
- package/dist/ingestion/figma-node-to-html.js.map +1 -1
- package/dist/ingestion/figma-paint-math.d.ts +157 -0
- package/dist/ingestion/figma-paint-math.d.ts.map +1 -0
- package/dist/ingestion/figma-paint-math.js +274 -0
- package/dist/ingestion/figma-paint-math.js.map +1 -0
- package/dist/ingestion/index.d.ts +1 -0
- package/dist/ingestion/index.d.ts.map +1 -1
- package/dist/ingestion/index.js +1 -0
- package/dist/ingestion/index.js.map +1 -1
- package/dist/localization/default-messages.d.ts +6 -0
- package/dist/localization/default-messages.d.ts.map +1 -1
- package/dist/localization/default-messages.js +6 -0
- package/dist/localization/default-messages.js.map +1 -1
- package/dist/notifications/routes.d.ts +2 -2
- package/dist/observability/routes.d.ts +5 -5
- package/dist/progress/routes.d.ts +1 -1
- package/dist/provider-api/actions/custom-provider-registration.d.ts +12 -12
- package/dist/provider-api/actions/provider-api.d.ts +7 -7
- package/dist/resources/handlers.d.ts +1 -1
- package/dist/scripts/agent-engines/list-agent-engines.d.ts.map +1 -1
- package/dist/scripts/agent-engines/list-agent-engines.js +1 -18
- package/dist/scripts/agent-engines/list-agent-engines.js.map +1 -1
- package/dist/scripts/call-agent.d.ts.map +1 -1
- package/dist/scripts/call-agent.js +49 -6
- package/dist/scripts/call-agent.js.map +1 -1
- package/dist/secrets/routes.d.ts +3 -3
- package/dist/server/agent-chat-plugin.d.ts.map +1 -1
- package/dist/server/agent-chat-plugin.js +38 -10
- package/dist/server/agent-chat-plugin.js.map +1 -1
- package/dist/server/agent-engine-api-key-route.d.ts +1 -1
- package/dist/server/realtime-token.d.ts +1 -1
- package/dist/server/transcribe-voice.d.ts +1 -1
- package/dist/templates/workspace-core/.agents/skills/a2a-protocol/SKILL.md +16 -0
- package/docs/content/a2a-protocol.mdx +15 -0
- package/docs/content/template-chat.mdx +1 -1
- package/docs/content/template-plan.mdx +3 -3
- package/package.json +1 -1
- package/src/a2a/activity.ts +371 -0
- package/src/a2a/client.ts +3 -1
- package/src/a2a/index.ts +21 -0
- package/src/a2a/types.ts +8 -0
- package/src/agent/model-config.ts +19 -23
- package/src/agent/production-agent.ts +167 -100
- package/src/agent/types.ts +16 -1
- package/src/client/chat/tool-call-display.tsx +190 -35
- package/src/client/chat-model-groups.ts +67 -27
- package/src/client/sharing/ShareButton.tsx +1 -27
- package/src/client/sharing/ShareDialog.tsx +0 -16
- package/src/client/sharing/useShareButtonController.ts +0 -7
- package/src/client/sharing/useShareDialogController.ts +0 -2
- package/src/client/sse-event-processor.ts +85 -1
- package/src/ingestion/figma-node-to-html.ts +20 -99
- package/src/ingestion/figma-paint-math.ts +371 -0
- package/src/ingestion/index.ts +20 -0
- package/src/localization/default-messages.ts +6 -0
- package/src/scripts/agent-engines/list-agent-engines.ts +1 -18
- package/src/scripts/call-agent.ts +49 -6
- package/src/server/agent-chat-plugin.ts +50 -10
- package/src/templates/workspace-core/.agents/skills/a2a-protocol/SKILL.md +16 -0
- package/corpus/core/src/observability/hosted-model-experiment.ts +0 -118
- package/dist/observability/hosted-model-experiment.d.ts +0 -39
- package/dist/observability/hosted-model-experiment.d.ts.map +0 -1
- package/dist/observability/hosted-model-experiment.js +0 -90
- package/dist/observability/hosted-model-experiment.js.map +0 -1
- package/src/observability/hosted-model-experiment.ts +0 -118
|
@@ -36,6 +36,8 @@ const MAX_FIGMA_IMAGE_BYTES = 15 * 1024 * 1024;
|
|
|
36
36
|
const MAX_TOTAL_FIGMA_IMAGE_BYTES = 64 * 1024 * 1024;
|
|
37
37
|
const MAX_FIGMA_IMAGE_REFERENCES = 256;
|
|
38
38
|
const MAX_FIGMA_IMAGE_IDS_PER_REQUEST = 50;
|
|
39
|
+
// Figma's `/images` endpoint takes ids in the query string; cap the batch by
|
|
40
|
+
// both count and URL length so a complex frame's ids are fetched in full.
|
|
39
41
|
const MAX_FIGMA_IMAGE_IDS_QUERY_CHARS = 1_800;
|
|
40
42
|
const MAX_CONCURRENT_FIGMA_IMAGE_UPLOADS = 4;
|
|
41
43
|
const FIGMA_IMAGE_FETCH_TIMEOUT_MS = 20_000;
|
|
@@ -415,6 +417,7 @@ type FigmaProviderEnvelope = {
|
|
|
415
417
|
ok?: boolean;
|
|
416
418
|
status?: number;
|
|
417
419
|
statusText?: string;
|
|
420
|
+
headers?: Record<string, string>;
|
|
418
421
|
json?: unknown;
|
|
419
422
|
text?: string;
|
|
420
423
|
truncated?: boolean;
|
|
@@ -422,6 +425,46 @@ type FigmaProviderEnvelope = {
|
|
|
422
425
|
};
|
|
423
426
|
};
|
|
424
427
|
|
|
428
|
+
export type FigmaRateLimitError = Error & {
|
|
429
|
+
statusCode: 429;
|
|
430
|
+
retryAfterSeconds?: number;
|
|
431
|
+
figmaPlanTier?: string;
|
|
432
|
+
figmaRateLimitType?: "low" | "high";
|
|
433
|
+
figmaUpgradeUrl?: string;
|
|
434
|
+
};
|
|
435
|
+
|
|
436
|
+
const FIGMA_PLAN_TIERS = new Set([
|
|
437
|
+
"enterprise",
|
|
438
|
+
"org",
|
|
439
|
+
"pro",
|
|
440
|
+
"starter",
|
|
441
|
+
"student",
|
|
442
|
+
]);
|
|
443
|
+
|
|
444
|
+
export function isFigmaRateLimitError(
|
|
445
|
+
err: unknown,
|
|
446
|
+
): err is FigmaRateLimitError {
|
|
447
|
+
return (
|
|
448
|
+
err instanceof Error && (err as { statusCode?: unknown }).statusCode === 429
|
|
449
|
+
);
|
|
450
|
+
}
|
|
451
|
+
|
|
452
|
+
function figmaUpgradeUrl(value: string | undefined): string | undefined {
|
|
453
|
+
if (!value) return undefined;
|
|
454
|
+
try {
|
|
455
|
+
const url = new URL(value);
|
|
456
|
+
if (
|
|
457
|
+
url.protocol === "https:" &&
|
|
458
|
+
(url.hostname === "figma.com" || url.hostname.endsWith(".figma.com"))
|
|
459
|
+
) {
|
|
460
|
+
return value;
|
|
461
|
+
}
|
|
462
|
+
} catch {
|
|
463
|
+
return undefined;
|
|
464
|
+
}
|
|
465
|
+
return undefined;
|
|
466
|
+
}
|
|
467
|
+
|
|
425
468
|
export function providerJson(envelope: unknown, label: string): unknown {
|
|
426
469
|
const response = (envelope as FigmaProviderEnvelope | null)?.response;
|
|
427
470
|
if (!response) throw new Error(`Figma ${label} response was empty.`);
|
|
@@ -431,11 +474,41 @@ export function providerJson(envelope: unknown, label: string): unknown {
|
|
|
431
474
|
);
|
|
432
475
|
}
|
|
433
476
|
if (response.ok === false) {
|
|
477
|
+
const jsonBody = response.json as {
|
|
478
|
+
message?: string;
|
|
479
|
+
error?: string;
|
|
480
|
+
} | null;
|
|
434
481
|
const detail =
|
|
435
482
|
(typeof response.text === "string" && response.text.trim()) ||
|
|
483
|
+
(typeof jsonBody?.message === "string" && jsonBody.message) ||
|
|
436
484
|
response.statusText ||
|
|
437
485
|
`HTTP ${response.status ?? "error"}`;
|
|
438
|
-
|
|
486
|
+
const err = new Error(`Figma ${label} request failed: ${detail}`);
|
|
487
|
+
if (response.status === 429) {
|
|
488
|
+
const rateLimitError = err as FigmaRateLimitError;
|
|
489
|
+
rateLimitError.statusCode = 429;
|
|
490
|
+
|
|
491
|
+
const retryAfterHeader = response.headers?.["retry-after"];
|
|
492
|
+
if (retryAfterHeader) {
|
|
493
|
+
rateLimitError.retryAfterSeconds = parseInt(retryAfterHeader, 10);
|
|
494
|
+
}
|
|
495
|
+
|
|
496
|
+
const planTier = response.headers?.["x-figma-plan-tier"];
|
|
497
|
+
if (planTier && FIGMA_PLAN_TIERS.has(planTier)) {
|
|
498
|
+
rateLimitError.figmaPlanTier = planTier;
|
|
499
|
+
}
|
|
500
|
+
|
|
501
|
+
const rateLimitType = response.headers?.["x-figma-rate-limit-type"];
|
|
502
|
+
if (rateLimitType === "low" || rateLimitType === "high") {
|
|
503
|
+
rateLimitError.figmaRateLimitType = rateLimitType;
|
|
504
|
+
}
|
|
505
|
+
|
|
506
|
+
const upgradeUrl = figmaUpgradeUrl(
|
|
507
|
+
response.headers?.["x-figma-upgrade-link"],
|
|
508
|
+
);
|
|
509
|
+
if (upgradeUrl) rateLimitError.figmaUpgradeUrl = upgradeUrl;
|
|
510
|
+
}
|
|
511
|
+
throw err;
|
|
439
512
|
}
|
|
440
513
|
return response.json;
|
|
441
514
|
}
|
|
@@ -567,47 +640,39 @@ async function fetchFallbackImageUrls(
|
|
|
567
640
|
nodeIds: string[],
|
|
568
641
|
): Promise<Record<string, string>> {
|
|
569
642
|
if (nodeIds.length === 0) return {};
|
|
570
|
-
const
|
|
643
|
+
const result: Record<string, string> = {};
|
|
644
|
+
const fetchBatch = async (ids: string[]) => {
|
|
645
|
+
if (ids.length === 0) return;
|
|
646
|
+
const envelope = await figmaGet(`/images/${fileKey}`, {
|
|
647
|
+
ids: ids.join(","),
|
|
648
|
+
format: "png",
|
|
649
|
+
scale: 2,
|
|
650
|
+
});
|
|
651
|
+
const json = providerJson(envelope, "images") as {
|
|
652
|
+
images?: Record<string, string | null | undefined>;
|
|
653
|
+
};
|
|
654
|
+
for (const [id, url] of Object.entries(json.images ?? {})) {
|
|
655
|
+
if (typeof url === "string" && url) result[id] = url;
|
|
656
|
+
}
|
|
657
|
+
};
|
|
658
|
+
// Batch over the full ID list by count and query length so complex frames
|
|
659
|
+
// don't silently drop layers beyond the first request.
|
|
571
660
|
let batch: string[] = [];
|
|
572
661
|
let queryChars = 0;
|
|
573
662
|
for (const nodeId of nodeIds) {
|
|
574
|
-
|
|
575
|
-
throw new Error("A Figma image fallback node id was unexpectedly long.");
|
|
576
|
-
}
|
|
577
|
-
const addedChars = nodeId.length + (batch.length > 0 ? 1 : 0);
|
|
663
|
+
const addedChars = nodeId.length + 1;
|
|
578
664
|
if (
|
|
579
665
|
batch.length >= MAX_FIGMA_IMAGE_IDS_PER_REQUEST ||
|
|
580
666
|
queryChars + addedChars > MAX_FIGMA_IMAGE_IDS_QUERY_CHARS
|
|
581
667
|
) {
|
|
582
|
-
|
|
668
|
+
await fetchBatch(batch);
|
|
583
669
|
batch = [];
|
|
584
670
|
queryChars = 0;
|
|
585
671
|
}
|
|
586
672
|
batch.push(nodeId);
|
|
587
|
-
queryChars +=
|
|
588
|
-
}
|
|
589
|
-
if (batch.length > 0) batches.push(batch);
|
|
590
|
-
|
|
591
|
-
const responses = await mapWithConcurrency(
|
|
592
|
-
batches,
|
|
593
|
-
MAX_CONCURRENT_FIGMA_IMAGE_UPLOADS,
|
|
594
|
-
async (ids) => {
|
|
595
|
-
const envelope = await figmaGet(`/images/${fileKey}`, {
|
|
596
|
-
ids: ids.join(","),
|
|
597
|
-
format: "png",
|
|
598
|
-
scale: 2,
|
|
599
|
-
});
|
|
600
|
-
return providerJson(envelope, "images") as {
|
|
601
|
-
images?: Record<string, string | null | undefined>;
|
|
602
|
-
};
|
|
603
|
-
},
|
|
604
|
-
);
|
|
605
|
-
const result: Record<string, string> = {};
|
|
606
|
-
for (const response of responses) {
|
|
607
|
-
for (const [id, url] of Object.entries(response.images ?? {})) {
|
|
608
|
-
if (typeof url === "string" && url) result[id] = url;
|
|
609
|
-
}
|
|
673
|
+
queryChars += addedChars;
|
|
610
674
|
}
|
|
675
|
+
await fetchBatch(batch);
|
|
611
676
|
return result;
|
|
612
677
|
}
|
|
613
678
|
|
|
@@ -628,6 +693,34 @@ async function fetchImageFillUrls(
|
|
|
628
693
|
return result;
|
|
629
694
|
}
|
|
630
695
|
|
|
696
|
+
/**
|
|
697
|
+
* Fetch CDN URLs for the given image-fill hex hashes via Figma's
|
|
698
|
+
* `/files/:key/images` endpoint, then mirror them to durable storage.
|
|
699
|
+
* Returns a Map from hex hash to durable URL. Hashes that Figma cannot
|
|
700
|
+
* resolve (deleted images, permission gaps) are omitted from the result.
|
|
701
|
+
*
|
|
702
|
+
* Used by `hydrate-figma-paste-images` to fill in `about:blank` placeholders
|
|
703
|
+
* that the local-kiwi clipboard decode path leaves behind.
|
|
704
|
+
*/
|
|
705
|
+
export async function resolveImageFillRefs(
|
|
706
|
+
fileKey: string,
|
|
707
|
+
hexHashes: string[],
|
|
708
|
+
): Promise<Map<string, string>> {
|
|
709
|
+
if (hexHashes.length === 0) return new Map();
|
|
710
|
+
const cdnUrls = await fetchImageFillUrls(fileKey, hexHashes);
|
|
711
|
+
const cdnUrlList = Object.values(cdnUrls).filter(
|
|
712
|
+
(u): u is string => typeof u === "string" && u.length > 0,
|
|
713
|
+
);
|
|
714
|
+
if (cdnUrlList.length === 0) return new Map();
|
|
715
|
+
const durableMap = await mirrorFigmaImageUrls(cdnUrlList);
|
|
716
|
+
const result = new Map<string, string>();
|
|
717
|
+
for (const [hash, cdnUrl] of Object.entries(cdnUrls)) {
|
|
718
|
+
const durableUrl = durableMap.get(cdnUrl);
|
|
719
|
+
if (durableUrl) result.set(hash, durableUrl);
|
|
720
|
+
}
|
|
721
|
+
return result;
|
|
722
|
+
}
|
|
723
|
+
|
|
631
724
|
export function sanitizeTitle(
|
|
632
725
|
name: string | undefined,
|
|
633
726
|
fallback: string,
|
|
@@ -673,7 +766,11 @@ export async function buildScreenFilesFromFigmaNodes(
|
|
|
673
766
|
source?: (nodeId: string, node: FigmaNode) => Record<string, unknown>;
|
|
674
767
|
sourceLabel?: (nodeId: string, node: FigmaNode) => string;
|
|
675
768
|
} = {},
|
|
676
|
-
): Promise<{
|
|
769
|
+
): Promise<{
|
|
770
|
+
files: ImportedDesignFile[];
|
|
771
|
+
fidelityEntries: FidelityEntry[];
|
|
772
|
+
missingImageFillCount: number;
|
|
773
|
+
}> {
|
|
677
774
|
const entries = Object.entries(nodesById);
|
|
678
775
|
const fallbackNodeIds = new Set<string>();
|
|
679
776
|
const imageFillRefs = new Set<string>();
|
|
@@ -696,16 +793,16 @@ export async function buildScreenFilesFromFigmaNodes(
|
|
|
696
793
|
(nodeId) => !fallbackImageUrls[nodeId],
|
|
697
794
|
);
|
|
698
795
|
if (missingFallbackNodeIds.length > 0) {
|
|
699
|
-
|
|
700
|
-
`
|
|
796
|
+
console.warn(
|
|
797
|
+
`[figma-import] ${missingFallbackNodeIds.length} fallback layer(s) could not be rendered and will be omitted (${missingFallbackNodeIds.slice(0, 5).join(", ")}${missingFallbackNodeIds.length > 5 ? ", …" : ""}).`,
|
|
701
798
|
);
|
|
702
799
|
}
|
|
703
800
|
const missingImageFillRefs = Array.from(imageFillRefs).filter(
|
|
704
801
|
(imageRef) => !imageFillUrls[imageRef],
|
|
705
802
|
);
|
|
706
803
|
if (missingImageFillRefs.length > 0) {
|
|
707
|
-
|
|
708
|
-
`
|
|
804
|
+
console.warn(
|
|
805
|
+
`[figma-import] ${missingImageFillRefs.length} image fill ref(s) could not be resolved (likely from a component library file); those fills will be omitted.`,
|
|
709
806
|
);
|
|
710
807
|
}
|
|
711
808
|
const durableUrls = await mirrorFigmaImageUrls([
|
|
@@ -763,5 +860,8 @@ export async function buildScreenFilesFromFigmaNodes(
|
|
|
763
860
|
});
|
|
764
861
|
}
|
|
765
862
|
|
|
766
|
-
|
|
863
|
+
const finalMissingCount = missingImageFillRefs.filter(
|
|
864
|
+
(r) => !imageFillUrls[r],
|
|
865
|
+
).length;
|
|
866
|
+
return { files, fidelityEntries, missingImageFillCount: finalMissingCount };
|
|
767
867
|
}
|
|
@@ -65,7 +65,18 @@ registerRequiredSecret({
|
|
|
65
65
|
"User-Agent": "AgentNative/1.0",
|
|
66
66
|
},
|
|
67
67
|
});
|
|
68
|
-
|
|
68
|
+
console.log("[figma-validator] GET /v1/me status:", res.status);
|
|
69
|
+
if (res.ok) {
|
|
70
|
+
console.log("[figma-validator] token accepted");
|
|
71
|
+
return true;
|
|
72
|
+
}
|
|
73
|
+
let body = "";
|
|
74
|
+
try {
|
|
75
|
+
body = await res.text();
|
|
76
|
+
} catch {
|
|
77
|
+
/* ignore */
|
|
78
|
+
}
|
|
79
|
+
console.log("[figma-validator] Figma error body:", body);
|
|
69
80
|
if (res.status === 401 || res.status === 403) {
|
|
70
81
|
return {
|
|
71
82
|
ok: false,
|
|
@@ -73,7 +84,8 @@ registerRequiredSecret({
|
|
|
73
84
|
};
|
|
74
85
|
}
|
|
75
86
|
return { ok: false, error: `Figma returned ${res.status}.` };
|
|
76
|
-
} catch {
|
|
87
|
+
} catch (err) {
|
|
88
|
+
console.log("[figma-validator] fetch threw:", err);
|
|
77
89
|
return {
|
|
78
90
|
ok: false,
|
|
79
91
|
error: "Could not reach Figma. Check your network and try again.",
|
|
@@ -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"]}
|
package/dist/a2a/client.d.ts
CHANGED
|
@@ -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;
|
package/dist/a2a/client.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"client.d.ts","sourceRoot":"","sources":["../../src/a2a/client.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"client.d.ts","sourceRoot":"","sources":["../../src/a2a/client.ts"],"names":[],"mappings":"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"}
|
package/dist/a2a/client.js
CHANGED
|
@@ -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)
|