@agent-native/core 0.101.6 → 0.101.10
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 +1 -1
- package/corpus/core/CHANGELOG.md +28 -0
- package/corpus/core/docs/content/deployment.mdx +9 -7
- package/corpus/core/docs/content/locales/ar-SA/deployment.mdx +9 -7
- package/corpus/core/docs/content/locales/de-DE/deployment.mdx +9 -7
- package/corpus/core/docs/content/locales/es-ES/deployment.mdx +9 -7
- package/corpus/core/docs/content/locales/fr-FR/deployment.mdx +9 -7
- package/corpus/core/docs/content/locales/hi-IN/deployment.mdx +9 -7
- package/corpus/core/docs/content/locales/ja-JP/deployment.mdx +9 -7
- package/corpus/core/docs/content/locales/ko-KR/deployment.mdx +9 -7
- package/corpus/core/docs/content/locales/pt-BR/deployment.mdx +9 -7
- package/corpus/core/docs/content/locales/zh-CN/deployment.mdx +9 -7
- package/corpus/core/docs/content/locales/zh-TW/deployment.mdx +9 -7
- package/corpus/core/package.json +1 -1
- package/corpus/core/src/a2a/artifact-response.ts +255 -12
- package/corpus/core/src/agent/thread-data-builder.ts +84 -11
- package/corpus/core/src/client/review/ReviewCommentComposer.tsx +9 -1
- package/corpus/core/src/client/review/ReviewThreadPanel.tsx +17 -2
- package/corpus/core/src/client/settings/SettingsPanel.tsx +41 -21
- package/corpus/core/src/client/settings/useBuilderStatus.ts +28 -9
- package/corpus/core/src/client/setup-connections/BuilderConnectCard.tsx +2 -7
- package/corpus/core/src/integrations/a2a-continuation-processor.ts +99 -7
- package/corpus/core/src/integrations/adapters/discord.ts +3 -1
- package/corpus/core/src/integrations/adapters/email.ts +4 -1
- package/corpus/core/src/integrations/adapters/google-docs.ts +4 -1
- package/corpus/core/src/integrations/adapters/microsoft-teams.ts +3 -1
- package/corpus/core/src/integrations/adapters/slack.ts +38 -9
- package/corpus/core/src/integrations/adapters/telegram.ts +32 -10
- package/corpus/core/src/integrations/adapters/whatsapp.ts +5 -1
- package/corpus/core/src/integrations/index.ts +1 -0
- package/corpus/core/src/integrations/types.ts +9 -2
- package/corpus/core/src/integrations/webhook-handler.ts +69 -45
- package/corpus/core/src/server/agent-chat/action-filters-a2a.ts +1 -0
- package/corpus/core/src/server/auth.ts +25 -1
- package/corpus/core/src/server/builder-browser.ts +353 -1
- package/corpus/core/src/server/core-routes-plugin.ts +601 -223
- package/corpus/templates/calendar/app/components/calendar/DayView.tsx +80 -1
- package/corpus/templates/calendar/app/components/calendar/EventCard.tsx +28 -3
- package/corpus/templates/calendar/app/components/calendar/EventDetailPanel.tsx +5 -1
- package/corpus/templates/calendar/app/components/calendar/EventDetailPopover.tsx +30 -3
- package/corpus/templates/calendar/app/components/calendar/OutOfOfficeEvent.tsx +196 -0
- package/corpus/templates/calendar/app/components/calendar/WeekView.tsx +115 -1
- package/corpus/templates/calendar/app/lib/out-of-office.ts +45 -0
- package/corpus/templates/calendar/changelog/2026-07-14-out-of-office-blocks-now-sit-behind-meetings-and-event-stack.md +6 -0
- package/corpus/templates/content/.agents/skills/content/SKILL.md +31 -0
- package/corpus/templates/content/.agents/skills/document-editing/SKILL.md +35 -21
- package/corpus/templates/content/AGENTS.md +32 -9
- package/corpus/templates/content/actions/_builder-cms-intent-lookup.ts +87 -0
- package/corpus/templates/content/actions/_builder-cms-read-client.ts +173 -25
- package/corpus/templates/content/actions/_builder-cms-source-adapter.ts +1 -0
- package/corpus/templates/content/actions/_builder-cms-write-adapter.ts +427 -18
- package/corpus/templates/content/actions/_builder-cms-write-client.ts +17 -73
- package/corpus/templates/content/actions/_builder-cms-write-settings.ts +27 -7
- package/corpus/templates/content/actions/_builder-source-execution-claim.ts +124 -0
- package/corpus/templates/content/actions/_builder-source-execution-preservation.ts +21 -0
- package/corpus/templates/content/actions/_builder-source-timings.ts +57 -0
- package/corpus/templates/content/actions/_database-source-utils.ts +1071 -170
- package/corpus/templates/content/actions/_database-utils.ts +104 -13
- package/corpus/templates/content/actions/_local-file-documents.ts +53 -1
- package/corpus/templates/content/actions/_preview-document-draft.ts +31 -0
- package/corpus/templates/content/actions/_property-utils.ts +7 -1
- package/corpus/templates/content/actions/cancel-prepared-builder-source-update.ts +309 -0
- package/corpus/templates/content/actions/configure-document-property.ts +11 -0
- package/corpus/templates/content/actions/create-content-database.ts +11 -0
- package/corpus/templates/content/actions/create-document.ts +9 -0
- package/corpus/templates/content/actions/create-inline-content-database.ts +3 -0
- package/corpus/templates/content/actions/execute-builder-source-batch.ts +120 -49
- package/corpus/templates/content/actions/execute-builder-source-execution.ts +608 -264
- package/corpus/templates/content/actions/export-content-source.ts +1 -0
- package/corpus/templates/content/actions/get-content-database.ts +13 -1
- package/corpus/templates/content/actions/get-document.ts +12 -2
- package/corpus/templates/content/actions/get-preview-document-draft.ts +26 -0
- package/corpus/templates/content/actions/import-content-source.ts +6 -0
- package/corpus/templates/content/actions/list-documents.ts +3 -0
- package/corpus/templates/content/actions/materialize-builder-required-fields.ts +550 -0
- package/corpus/templates/content/actions/prepare-builder-source-execution.ts +112 -65
- package/corpus/templates/content/actions/prepare-builder-source-review.ts +463 -170
- package/corpus/templates/content/actions/preview-builder-source-review.ts +99 -0
- package/corpus/templates/content/actions/pull-document.ts +2 -0
- package/corpus/templates/content/actions/search-documents.ts +5 -1
- package/corpus/templates/content/actions/set-content-database-source-write-mode.ts +2 -2
- package/corpus/templates/content/actions/update-document.ts +16 -1
- package/corpus/templates/content/actions/update-preview-document-draft.ts +153 -0
- package/corpus/templates/content/actions/view-screen.ts +15 -2
- package/corpus/templates/content/app/components/editor/DescriptionField.tsx +121 -0
- package/corpus/templates/content/app/components/editor/DocumentEditor.tsx +14 -0
- package/corpus/templates/content/app/components/editor/DocumentProperties.tsx +250 -49
- package/corpus/templates/content/app/components/editor/VisualEditor.tsx +57 -5
- package/corpus/templates/content/app/components/editor/body-hydration.ts +27 -0
- package/corpus/templates/content/app/components/editor/database/DatabaseView.tsx +2414 -589
- package/corpus/templates/content/app/components/editor/database/settings.tsx +13 -10
- package/corpus/templates/content/app/components/editor/database-sources/BuilderSourceReviewDialog.tsx +358 -75
- package/corpus/templates/content/app/components/editor/previewDocumentSaveController.ts +124 -29
- package/corpus/templates/content/app/components/editor/previewDocumentSaveRegistry.ts +2 -0
- package/corpus/templates/content/app/global.css +18 -1
- package/corpus/templates/content/app/hooks/use-content-database.ts +68 -0
- package/corpus/templates/content/app/hooks/use-documents.ts +53 -4
- package/corpus/templates/content/app/i18n/zh-TW.ts +30 -0
- package/corpus/templates/content/app/i18n-data.ts +339 -0
- package/corpus/templates/content/changelog/2026-07-10-builder-backed-preview-edits-are-preserved-when-article-bodi.md +6 -0
- package/corpus/templates/content/changelog/2026-07-10-builder-cms-sources-can-now-be-enabled-for-guarded-staged-or.md +6 -0
- package/corpus/templates/content/changelog/2026-07-13-builder-connection-setup-is-now-available-directly-from-conn.md +6 -0
- package/corpus/templates/content/changelog/2026-07-13-builder-reviews-now-hide-already-applied-writes-detect-nativ.md +6 -0
- package/corpus/templates/content/changelog/2026-07-13-required-builder-publishing-fields-can-now-be-added-directly.md +6 -0
- package/corpus/templates/content/changelog/2026-07-13-you-can-now-cancel-a-prepared-builder-update-safely-before-i.md +6 -0
- package/corpus/templates/content/changelog/2026-07-14-builder-account-connection-now-remains-available-when-branch.md +6 -0
- package/corpus/templates/content/changelog/2026-07-14-builder-backed-articles-now-preserve-fifth-and-sixth-level-h.md +6 -0
- package/corpus/templates/content/changelog/2026-07-14-builder-sources-now-review-and-publish-rich-article-updates-.md +6 -0
- package/corpus/templates/content/changelog/2026-07-14-builder-writes-now-stop-retries-when-reconciliation-is-needed.md +6 -0
- package/corpus/templates/content/changelog/2026-07-14-file-and-media-links-now-validate-before-saving.md +6 -0
- package/corpus/templates/content/changelog/2026-07-14-pages-and-databases-can-describe-themselves-with-guidance-fo.md +6 -0
- package/corpus/templates/content/changelog/2026-07-14-slack-follow-ups-now-retain-created-content-identity-and-per.md +6 -0
- package/corpus/templates/content/parity/matrix.md +27 -25
- package/corpus/templates/content/parity/matrix.ts +50 -2
- package/corpus/templates/content/server/db/schema.ts +51 -0
- package/corpus/templates/content/server/lib/document-context.ts +76 -0
- package/corpus/templates/content/server/lib/public-documents.ts +3 -0
- package/corpus/templates/content/server/plugins/auth.ts +1 -0
- package/corpus/templates/content/server/plugins/db.ts +59 -0
- package/corpus/templates/content/server/routes/api/document-agent-context.json.get.ts +5 -0
- package/corpus/templates/content/shared/api.ts +87 -1
- package/corpus/templates/content/shared/builder-mdx.ts +705 -15
- package/corpus/templates/content/shared/content-source.ts +7 -0
- package/corpus/templates/content/shared/nfm.ts +3 -3
- package/corpus/templates/content/shared/properties.ts +2 -0
- package/corpus/templates/design/app/components/design/ReadOnlyDesignBanner.tsx +52 -7
- package/corpus/templates/design/app/components/design/ReviewCommentsPanel.tsx +36 -4
- package/corpus/templates/design/app/components/visual-editor/ReviewCanvasPins.tsx +4 -1
- package/corpus/templates/design/app/i18n/ar-SA.ts +1 -0
- package/corpus/templates/design/app/i18n/de-DE.ts +1 -0
- package/corpus/templates/design/app/i18n/en-US.ts +1 -0
- package/corpus/templates/design/app/i18n/es-ES.ts +1 -0
- package/corpus/templates/design/app/i18n/fr-FR.ts +1 -0
- package/corpus/templates/design/app/i18n/hi-IN.ts +1 -0
- package/corpus/templates/design/app/i18n/ja-JP.ts +1 -0
- package/corpus/templates/design/app/i18n/ko-KR.ts +1 -0
- package/corpus/templates/design/app/i18n/pt-BR.ts +1 -0
- package/corpus/templates/design/app/i18n/zh-CN.ts +1 -0
- package/corpus/templates/design/app/i18n/zh-TW.ts +1 -0
- package/corpus/templates/design/app/pages/design-editor/selection-state.ts +8 -0
- package/corpus/templates/design/app/pages/design-editor/tool-state.ts +11 -0
- package/corpus/templates/design/changelog/2026-07-14-reviewers-can-now-pin-comments-from-the-canvas-toolbar-targe.md +6 -0
- package/corpus/templates/design/changelog/2026-07-15-viewer-comment-controls-now-sit-inside-the-read-only-notice-.md +6 -0
- package/corpus/templates/design/shared/review-anchor.ts +48 -0
- package/corpus/templates/plan/server/plan-mdx.ts +53 -7
- package/dist/a2a/artifact-response.d.ts +15 -0
- package/dist/a2a/artifact-response.d.ts.map +1 -1
- package/dist/a2a/artifact-response.js +204 -5
- package/dist/a2a/artifact-response.js.map +1 -1
- package/dist/agent/thread-data-builder.d.ts +6 -0
- package/dist/agent/thread-data-builder.d.ts.map +1 -1
- package/dist/agent/thread-data-builder.js +71 -8
- package/dist/agent/thread-data-builder.js.map +1 -1
- package/dist/client/review/ReviewCommentComposer.d.ts +2 -1
- package/dist/client/review/ReviewCommentComposer.d.ts.map +1 -1
- package/dist/client/review/ReviewCommentComposer.js +3 -3
- package/dist/client/review/ReviewCommentComposer.js.map +1 -1
- package/dist/client/review/ReviewThreadPanel.d.ts +9 -1
- package/dist/client/review/ReviewThreadPanel.d.ts.map +1 -1
- package/dist/client/review/ReviewThreadPanel.js +6 -4
- package/dist/client/review/ReviewThreadPanel.js.map +1 -1
- package/dist/client/settings/SettingsPanel.d.ts +3 -0
- package/dist/client/settings/SettingsPanel.d.ts.map +1 -1
- package/dist/client/settings/SettingsPanel.js +11 -4
- package/dist/client/settings/SettingsPanel.js.map +1 -1
- package/dist/client/settings/useBuilderStatus.d.ts +8 -4
- package/dist/client/settings/useBuilderStatus.d.ts.map +1 -1
- package/dist/client/settings/useBuilderStatus.js +19 -6
- package/dist/client/settings/useBuilderStatus.js.map +1 -1
- package/dist/client/setup-connections/BuilderConnectCard.d.ts.map +1 -1
- package/dist/client/setup-connections/BuilderConnectCard.js +2 -5
- package/dist/client/setup-connections/BuilderConnectCard.js.map +1 -1
- package/dist/collab/awareness.d.ts +2 -2
- package/dist/collab/awareness.d.ts.map +1 -1
- package/dist/integrations/a2a-continuation-processor.d.ts.map +1 -1
- package/dist/integrations/a2a-continuation-processor.js +72 -6
- package/dist/integrations/a2a-continuation-processor.js.map +1 -1
- package/dist/integrations/adapters/discord.d.ts.map +1 -1
- package/dist/integrations/adapters/discord.js +1 -0
- package/dist/integrations/adapters/discord.js.map +1 -1
- package/dist/integrations/adapters/email.d.ts.map +1 -1
- package/dist/integrations/adapters/email.js +2 -0
- package/dist/integrations/adapters/email.js.map +1 -1
- package/dist/integrations/adapters/google-docs.d.ts.map +1 -1
- package/dist/integrations/adapters/google-docs.js +2 -0
- package/dist/integrations/adapters/google-docs.js.map +1 -1
- package/dist/integrations/adapters/microsoft-teams.d.ts.map +1 -1
- package/dist/integrations/adapters/microsoft-teams.js +1 -0
- package/dist/integrations/adapters/microsoft-teams.js.map +1 -1
- package/dist/integrations/adapters/slack.d.ts.map +1 -1
- package/dist/integrations/adapters/slack.js +21 -6
- package/dist/integrations/adapters/slack.js.map +1 -1
- package/dist/integrations/adapters/telegram.d.ts.map +1 -1
- package/dist/integrations/adapters/telegram.js +11 -2
- package/dist/integrations/adapters/telegram.js.map +1 -1
- package/dist/integrations/adapters/whatsapp.d.ts.map +1 -1
- package/dist/integrations/adapters/whatsapp.js +3 -0
- package/dist/integrations/adapters/whatsapp.js.map +1 -1
- package/dist/integrations/index.d.ts +1 -1
- package/dist/integrations/index.d.ts.map +1 -1
- package/dist/integrations/index.js.map +1 -1
- package/dist/integrations/types.d.ts +8 -2
- package/dist/integrations/types.d.ts.map +1 -1
- package/dist/integrations/types.js.map +1 -1
- package/dist/integrations/webhook-handler.d.ts.map +1 -1
- package/dist/integrations/webhook-handler.js +40 -43
- package/dist/integrations/webhook-handler.js.map +1 -1
- package/dist/observability/routes.d.ts +5 -5
- package/dist/provider-api/corpus-jobs.d.ts +2 -2
- package/dist/secrets/routes.d.ts +9 -9
- package/dist/server/agent-chat/action-filters-a2a.d.ts.map +1 -1
- package/dist/server/agent-chat/action-filters-a2a.js +1 -0
- package/dist/server/agent-chat/action-filters-a2a.js.map +1 -1
- package/dist/server/auth.d.ts +1 -0
- package/dist/server/auth.d.ts.map +1 -1
- package/dist/server/auth.js +19 -2
- package/dist/server/auth.js.map +1 -1
- package/dist/server/builder-browser.d.ts +78 -0
- package/dist/server/builder-browser.d.ts.map +1 -1
- package/dist/server/builder-browser.js +246 -1
- package/dist/server/builder-browser.js.map +1 -1
- package/dist/server/core-routes-plugin.d.ts +41 -0
- package/dist/server/core-routes-plugin.d.ts.map +1 -1
- package/dist/server/core-routes-plugin.js +260 -14
- package/dist/server/core-routes-plugin.js.map +1 -1
- package/docs/content/deployment.mdx +9 -7
- package/docs/content/locales/ar-SA/deployment.mdx +9 -7
- package/docs/content/locales/de-DE/deployment.mdx +9 -7
- package/docs/content/locales/es-ES/deployment.mdx +9 -7
- package/docs/content/locales/fr-FR/deployment.mdx +9 -7
- package/docs/content/locales/hi-IN/deployment.mdx +9 -7
- package/docs/content/locales/ja-JP/deployment.mdx +9 -7
- package/docs/content/locales/ko-KR/deployment.mdx +9 -7
- package/docs/content/locales/pt-BR/deployment.mdx +9 -7
- package/docs/content/locales/zh-CN/deployment.mdx +9 -7
- package/docs/content/locales/zh-TW/deployment.mdx +9 -7
- package/package.json +2 -2
|
@@ -1,3 +1,88 @@
|
|
|
1
|
+
import { createHmac, timingSafeEqual } from "node:crypto";
|
|
2
|
+
const ARTIFACT_IDENTITY_WRITE_TOOLS = new Set([
|
|
3
|
+
"save-monitor",
|
|
4
|
+
"create-form",
|
|
5
|
+
"submit-content-database-form",
|
|
6
|
+
"add-database-item",
|
|
7
|
+
"create-document",
|
|
8
|
+
"update-document",
|
|
9
|
+
"create-deck",
|
|
10
|
+
"duplicate-deck",
|
|
11
|
+
"add-slide",
|
|
12
|
+
"update-dashboard",
|
|
13
|
+
"rename-dashboard",
|
|
14
|
+
"save-analysis",
|
|
15
|
+
"generate-image",
|
|
16
|
+
"edit-image",
|
|
17
|
+
"refine-image",
|
|
18
|
+
"restyle-image",
|
|
19
|
+
"save-generated-image",
|
|
20
|
+
"save-generated-asset",
|
|
21
|
+
"export-image",
|
|
22
|
+
"export-asset",
|
|
23
|
+
"generate-image-batch",
|
|
24
|
+
"create-design",
|
|
25
|
+
"generate-design",
|
|
26
|
+
"create-file",
|
|
27
|
+
"duplicate-design",
|
|
28
|
+
]);
|
|
29
|
+
const PERSISTED_ARTIFACT_MARKER = "agent-native:persisted-artifacts=";
|
|
30
|
+
const PERSISTED_ARTIFACT_MARKER_PATTERN = /\s*<!--\s*agent-native:persisted-artifacts=[A-Za-z0-9_-]+\.[a-f0-9]{64}\s*-->/g;
|
|
31
|
+
const ARTIFACT_RESOURCE_TYPES = new Set([
|
|
32
|
+
"document",
|
|
33
|
+
"deck",
|
|
34
|
+
"dashboard",
|
|
35
|
+
"analysis",
|
|
36
|
+
"image",
|
|
37
|
+
"design",
|
|
38
|
+
"monitor",
|
|
39
|
+
"form",
|
|
40
|
+
]);
|
|
41
|
+
function persistedArtifactIdentitiesFromMarker(result) {
|
|
42
|
+
const secret = process.env.A2A_SECRET;
|
|
43
|
+
if (!secret)
|
|
44
|
+
return [];
|
|
45
|
+
const match = result.match(/<!--\s*agent-native:persisted-artifacts=([A-Za-z0-9_-]+)\.([a-f0-9]{64})\s*-->/);
|
|
46
|
+
if (!match)
|
|
47
|
+
return [];
|
|
48
|
+
try {
|
|
49
|
+
const payload = match[1];
|
|
50
|
+
const expected = createHmac("sha256", secret).update(payload).digest();
|
|
51
|
+
const supplied = Buffer.from(match[2], "hex");
|
|
52
|
+
if (supplied.length !== expected.length ||
|
|
53
|
+
!timingSafeEqual(supplied, expected)) {
|
|
54
|
+
return [];
|
|
55
|
+
}
|
|
56
|
+
const parsed = JSON.parse(Buffer.from(payload, "base64url").toString());
|
|
57
|
+
if (!Array.isArray(parsed))
|
|
58
|
+
return [];
|
|
59
|
+
return parsed
|
|
60
|
+
.slice(0, 12)
|
|
61
|
+
.filter((identity) => {
|
|
62
|
+
const item = asRecord(identity);
|
|
63
|
+
return (!!item &&
|
|
64
|
+
ARTIFACT_RESOURCE_TYPES.has(item.resourceType) &&
|
|
65
|
+
typeof item.id === "string" &&
|
|
66
|
+
typeof item.sourceAction === "string");
|
|
67
|
+
});
|
|
68
|
+
}
|
|
69
|
+
catch {
|
|
70
|
+
return [];
|
|
71
|
+
}
|
|
72
|
+
}
|
|
73
|
+
function withPersistedArtifactMarker(text, toolResults) {
|
|
74
|
+
const identities = extractA2AArtifactIdentities(toolResults).slice(0, 12);
|
|
75
|
+
const secret = process.env.A2A_SECRET;
|
|
76
|
+
if (identities.length === 0 || !secret)
|
|
77
|
+
return text;
|
|
78
|
+
const payload = Buffer.from(JSON.stringify(identities)).toString("base64url");
|
|
79
|
+
const signature = createHmac("sha256", secret).update(payload).digest("hex");
|
|
80
|
+
const marker = `<!-- ${PERSISTED_ARTIFACT_MARKER}${payload}.${signature} -->`;
|
|
81
|
+
return text ? `${text}\n\n${marker}` : marker;
|
|
82
|
+
}
|
|
83
|
+
export function stripA2APersistedArtifactMarkers(text) {
|
|
84
|
+
return text.replace(PERSISTED_ARTIFACT_MARKER_PATTERN, "").trim();
|
|
85
|
+
}
|
|
1
86
|
function asRecord(value) {
|
|
2
87
|
return value && typeof value === "object" && !Array.isArray(value)
|
|
3
88
|
? value
|
|
@@ -450,13 +535,22 @@ function collectArtifacts(results) {
|
|
|
450
535
|
continue;
|
|
451
536
|
}
|
|
452
537
|
if (toolResult.tool === "generate-image" ||
|
|
538
|
+
toolResult.tool === "edit-image" ||
|
|
453
539
|
toolResult.tool === "refine-image" ||
|
|
540
|
+
toolResult.tool === "restyle-image" ||
|
|
454
541
|
toolResult.tool === "get-asset" ||
|
|
455
542
|
toolResult.tool === "save-generated-image" ||
|
|
543
|
+
toolResult.tool === "save-generated-asset" ||
|
|
456
544
|
toolResult.tool === "export-image") {
|
|
457
545
|
addImageArtifact(images, parsed);
|
|
458
546
|
continue;
|
|
459
547
|
}
|
|
548
|
+
if (toolResult.tool === "export-asset") {
|
|
549
|
+
if (stringValue(parsed.artifactType) === "image") {
|
|
550
|
+
addImageArtifact(images, parsed);
|
|
551
|
+
}
|
|
552
|
+
continue;
|
|
553
|
+
}
|
|
460
554
|
if (toolResult.tool === "generate-image-batch") {
|
|
461
555
|
if (Array.isArray(parsed.images)) {
|
|
462
556
|
for (const item of parsed.images) {
|
|
@@ -553,6 +647,107 @@ function collectArtifacts(results) {
|
|
|
553
647
|
forms: [...forms.values()],
|
|
554
648
|
};
|
|
555
649
|
}
|
|
650
|
+
/**
|
|
651
|
+
* Extract a compact, verified identity ledger from successful artifact tools.
|
|
652
|
+
* The ledger deliberately excludes raw tool results so it is safe to retain in
|
|
653
|
+
* long-lived thread context and stable even when a resource is later renamed.
|
|
654
|
+
*/
|
|
655
|
+
export function extractA2AArtifactIdentities(results) {
|
|
656
|
+
const identities = new Map();
|
|
657
|
+
const remember = (identity) => {
|
|
658
|
+
identities.set(`${identity.resourceType}:${identity.id}`, identity);
|
|
659
|
+
};
|
|
660
|
+
for (const result of results) {
|
|
661
|
+
if (result.tool === "call-agent") {
|
|
662
|
+
for (const identity of persistedArtifactIdentitiesFromMarker(result.result)) {
|
|
663
|
+
remember({ ...identity, sourceAction: "call-agent" });
|
|
664
|
+
}
|
|
665
|
+
continue;
|
|
666
|
+
}
|
|
667
|
+
if (!ARTIFACT_IDENTITY_WRITE_TOOLS.has(result.tool))
|
|
668
|
+
continue;
|
|
669
|
+
const artifacts = collectArtifacts([result]);
|
|
670
|
+
for (const document of artifacts.documents) {
|
|
671
|
+
remember({
|
|
672
|
+
resourceType: "document",
|
|
673
|
+
id: document.id,
|
|
674
|
+
sourceAction: result.tool,
|
|
675
|
+
titleAtAction: document.title,
|
|
676
|
+
url: document.url,
|
|
677
|
+
});
|
|
678
|
+
}
|
|
679
|
+
for (const deck of artifacts.decks) {
|
|
680
|
+
remember({
|
|
681
|
+
resourceType: "deck",
|
|
682
|
+
id: deck.id,
|
|
683
|
+
sourceAction: result.tool,
|
|
684
|
+
url: deck.url,
|
|
685
|
+
});
|
|
686
|
+
}
|
|
687
|
+
for (const dashboard of artifacts.dashboards) {
|
|
688
|
+
remember({
|
|
689
|
+
resourceType: "dashboard",
|
|
690
|
+
id: dashboard.id,
|
|
691
|
+
sourceAction: result.tool,
|
|
692
|
+
titleAtAction: dashboard.title,
|
|
693
|
+
url: dashboard.url,
|
|
694
|
+
});
|
|
695
|
+
}
|
|
696
|
+
for (const analysis of artifacts.analyses) {
|
|
697
|
+
remember({
|
|
698
|
+
resourceType: "analysis",
|
|
699
|
+
id: analysis.id,
|
|
700
|
+
sourceAction: result.tool,
|
|
701
|
+
titleAtAction: analysis.title,
|
|
702
|
+
url: analysis.url,
|
|
703
|
+
});
|
|
704
|
+
}
|
|
705
|
+
for (const image of artifacts.images) {
|
|
706
|
+
remember({
|
|
707
|
+
resourceType: "image",
|
|
708
|
+
id: image.id,
|
|
709
|
+
sourceAction: result.tool,
|
|
710
|
+
titleAtAction: image.title,
|
|
711
|
+
url: image.url,
|
|
712
|
+
});
|
|
713
|
+
}
|
|
714
|
+
for (const design of artifacts.designShells) {
|
|
715
|
+
remember({
|
|
716
|
+
resourceType: "design",
|
|
717
|
+
id: design.id,
|
|
718
|
+
sourceAction: result.tool,
|
|
719
|
+
titleAtAction: design.title,
|
|
720
|
+
});
|
|
721
|
+
}
|
|
722
|
+
for (const design of artifacts.generatedDesigns) {
|
|
723
|
+
remember({
|
|
724
|
+
resourceType: "design",
|
|
725
|
+
id: design.id,
|
|
726
|
+
sourceAction: result.tool,
|
|
727
|
+
url: design.url,
|
|
728
|
+
});
|
|
729
|
+
}
|
|
730
|
+
for (const monitor of artifacts.monitors) {
|
|
731
|
+
remember({
|
|
732
|
+
resourceType: "monitor",
|
|
733
|
+
id: monitor.id,
|
|
734
|
+
sourceAction: result.tool,
|
|
735
|
+
titleAtAction: monitor.name,
|
|
736
|
+
url: monitor.url,
|
|
737
|
+
});
|
|
738
|
+
}
|
|
739
|
+
for (const form of artifacts.forms) {
|
|
740
|
+
remember({
|
|
741
|
+
resourceType: "form",
|
|
742
|
+
id: form.id,
|
|
743
|
+
sourceAction: result.tool,
|
|
744
|
+
titleAtAction: form.title,
|
|
745
|
+
url: form.url,
|
|
746
|
+
});
|
|
747
|
+
}
|
|
748
|
+
}
|
|
749
|
+
return [...identities.values()];
|
|
750
|
+
}
|
|
556
751
|
function parseDownstreamArtifactBlock(result) {
|
|
557
752
|
const artifacts = [];
|
|
558
753
|
for (const line of downstreamArtifactLines(result)) {
|
|
@@ -857,6 +1052,9 @@ function formatUnverifiedArtifactMessage(refs, documents, decks, dashboards, ana
|
|
|
857
1052
|
export function appendA2AArtifactLinks(responseText, toolResults, options = {}) {
|
|
858
1053
|
const baseUrl = normalizeBaseUrl(options.baseUrl);
|
|
859
1054
|
const includeReferencedArtifacts = options.includeReferencedArtifacts ?? false;
|
|
1055
|
+
const finalize = (value) => options.includePersistedArtifactMarker
|
|
1056
|
+
? withPersistedArtifactMarker(value, toolResults)
|
|
1057
|
+
: value;
|
|
860
1058
|
const { documents, decks, dashboards, analyses, images, designShells, generatedDesigns, monitors, forms, } = collectArtifacts(toolResults);
|
|
861
1059
|
const generatedDesignIds = new Set(generatedDesigns.map((design) => design.id));
|
|
862
1060
|
const incompleteShells = designShells.filter((shell) => !generatedDesignIds.has(shell.id));
|
|
@@ -866,11 +1064,11 @@ export function appendA2AArtifactLinks(responseText, toolResults, options = {})
|
|
|
866
1064
|
!responseAlreadyWarnsIncompleteDesign(text) &&
|
|
867
1065
|
(incompleteShells.some((shell) => responseMentionsDesignShell(text, shell)) ||
|
|
868
1066
|
/\b(?:done|created|ready|here(?:'s| is)|complete|finished)\b/i.test(text))) {
|
|
869
|
-
return formatIncompleteDesignMessage(incompleteShells);
|
|
1067
|
+
return finalize(formatIncompleteDesignMessage(incompleteShells));
|
|
870
1068
|
}
|
|
871
1069
|
const unverifiedRefs = findUnverifiedArtifactReferences(text, baseUrl, documents, decks, dashboards, analyses, images, generatedDesigns);
|
|
872
1070
|
if (unverifiedRefs.length > 0) {
|
|
873
|
-
return formatUnverifiedArtifactMessage(unverifiedRefs, documents, decks, dashboards, analyses, images, generatedDesigns, baseUrl);
|
|
1071
|
+
return finalize(formatUnverifiedArtifactMessage(unverifiedRefs, documents, decks, dashboards, analyses, images, generatedDesigns, baseUrl));
|
|
874
1072
|
}
|
|
875
1073
|
const missingLines = [];
|
|
876
1074
|
for (const document of documents) {
|
|
@@ -927,10 +1125,11 @@ export function appendA2AArtifactLinks(responseText, toolResults, options = {})
|
|
|
927
1125
|
missingLines.push(formatFormLine(form));
|
|
928
1126
|
}
|
|
929
1127
|
}
|
|
930
|
-
if (missingLines.length === 0)
|
|
931
|
-
return text;
|
|
1128
|
+
if (missingLines.length === 0) {
|
|
1129
|
+
return finalize(text);
|
|
1130
|
+
}
|
|
932
1131
|
const artifactBlock = `Artifacts:\n${missingLines.join("\n")}`;
|
|
933
|
-
return text ? `${text}\n\n${artifactBlock}` : artifactBlock;
|
|
1132
|
+
return finalize(text ? `${text}\n\n${artifactBlock}` : artifactBlock);
|
|
934
1133
|
}
|
|
935
1134
|
export function buildA2ARecoverableArtifactMessage(toolResults, options = {}) {
|
|
936
1135
|
const baseUrl = normalizeBaseUrl(options.baseUrl);
|