@agent-native/core 0.12.22 → 0.12.23

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 (66) hide show
  1. package/dist/agent/engine/ai-sdk-engine.d.ts +2 -0
  2. package/dist/agent/engine/ai-sdk-engine.d.ts.map +1 -1
  3. package/dist/agent/engine/ai-sdk-engine.js +4 -2
  4. package/dist/agent/engine/ai-sdk-engine.js.map +1 -1
  5. package/dist/agent/engine/anthropic-engine.d.ts.map +1 -1
  6. package/dist/agent/engine/anthropic-engine.js +2 -1
  7. package/dist/agent/engine/anthropic-engine.js.map +1 -1
  8. package/dist/agent/engine/builder-engine.d.ts.map +1 -1
  9. package/dist/agent/engine/builder-engine.js +117 -8
  10. package/dist/agent/engine/builder-engine.js.map +1 -1
  11. package/dist/agent/engine/registry.d.ts.map +1 -1
  12. package/dist/agent/engine/registry.js +24 -13
  13. package/dist/agent/engine/registry.js.map +1 -1
  14. package/dist/agent/production-agent.d.ts +1 -0
  15. package/dist/agent/production-agent.d.ts.map +1 -1
  16. package/dist/agent/production-agent.js +20 -10
  17. package/dist/agent/production-agent.js.map +1 -1
  18. package/dist/client/AgentPanel.js +1 -1
  19. package/dist/client/AgentPanel.js.map +1 -1
  20. package/dist/client/AssistantChat.d.ts.map +1 -1
  21. package/dist/client/AssistantChat.js +120 -5
  22. package/dist/client/AssistantChat.js.map +1 -1
  23. package/dist/client/FeedbackButton.js +1 -1
  24. package/dist/client/FeedbackButton.js.map +1 -1
  25. package/dist/client/analytics.d.ts.map +1 -1
  26. package/dist/client/analytics.js +26 -0
  27. package/dist/client/analytics.js.map +1 -1
  28. package/dist/client/components/ui/tooltip.js +1 -1
  29. package/dist/client/components/ui/tooltip.js.map +1 -1
  30. package/dist/client/composer/TiptapComposer.d.ts.map +1 -1
  31. package/dist/client/composer/TiptapComposer.js +2 -6
  32. package/dist/client/composer/TiptapComposer.js.map +1 -1
  33. package/dist/client/resources/ResourcesPanel.js +1 -1
  34. package/dist/client/resources/ResourcesPanel.js.map +1 -1
  35. package/dist/client/sse-event-processor.d.ts.map +1 -1
  36. package/dist/client/sse-event-processor.js +3 -0
  37. package/dist/client/sse-event-processor.js.map +1 -1
  38. package/dist/extensions/html-shell.d.ts.map +1 -1
  39. package/dist/extensions/html-shell.js +12 -0
  40. package/dist/extensions/html-shell.js.map +1 -1
  41. package/dist/mcp-client/errors.d.ts +2 -0
  42. package/dist/mcp-client/errors.d.ts.map +1 -0
  43. package/dist/mcp-client/errors.js +47 -0
  44. package/dist/mcp-client/errors.js.map +1 -0
  45. package/dist/mcp-client/manager.d.ts.map +1 -1
  46. package/dist/mcp-client/manager.js +44 -15
  47. package/dist/mcp-client/manager.js.map +1 -1
  48. package/dist/mcp-client/routes.d.ts +1 -2
  49. package/dist/mcp-client/routes.d.ts.map +1 -1
  50. package/dist/mcp-client/routes.js +2 -27
  51. package/dist/mcp-client/routes.js.map +1 -1
  52. package/dist/progress/store.d.ts +2 -0
  53. package/dist/progress/store.d.ts.map +1 -1
  54. package/dist/progress/store.js +44 -0
  55. package/dist/progress/store.js.map +1 -1
  56. package/dist/server/core-routes-plugin.d.ts.map +1 -1
  57. package/dist/server/core-routes-plugin.js +31 -9
  58. package/dist/server/core-routes-plugin.js.map +1 -1
  59. package/dist/server/credential-provider.d.ts +8 -0
  60. package/dist/server/credential-provider.d.ts.map +1 -1
  61. package/dist/server/credential-provider.js +29 -3
  62. package/dist/server/credential-provider.js.map +1 -1
  63. package/dist/terminal/terminal-plugin.d.ts.map +1 -1
  64. package/dist/terminal/terminal-plugin.js +4 -3
  65. package/dist/terminal/terminal-plugin.js.map +1 -1
  66. package/package.json +1 -1
@@ -1 +1 @@
1
- {"version":3,"file":"AssistantChat.d.ts","sourceRoot":"","sources":["../../src/client/AssistantChat.tsx"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"AssistantChat.d.ts","sourceRoot":"","sources":["../../src/client/AssistantChat.tsx"],"names":[],"mappings":"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"}
@@ -70,6 +70,111 @@ function getFileDataURL(file) {
70
70
  reader.readAsDataURL(file);
71
71
  });
72
72
  }
73
+ function escapeQueuedAttachmentAttribute(value) {
74
+ return value.replace(/&/g, "&").replace(/"/g, """);
75
+ }
76
+ function isTextLikeFile(file) {
77
+ if (file.type.startsWith("text/"))
78
+ return true;
79
+ if (file.type === "application/json")
80
+ return true;
81
+ return /\.(txt|md|markdown|csv|json|yaml|yml)$/i.test(file.name);
82
+ }
83
+ function textFileAttachmentEnvelope(file, text) {
84
+ const contentType = file.type || "text/plain";
85
+ return `<attachment name="${escapeQueuedAttachmentAttribute(file.name)}" contentType="${escapeQueuedAttachmentAttribute(contentType)}">\n${text}\n</attachment>`;
86
+ }
87
+ function serializeAttachmentContentPart(part) {
88
+ if (part.type === "image" && typeof part.image === "string") {
89
+ return { type: "image", image: part.image };
90
+ }
91
+ if (part.type === "text" && typeof part.text === "string") {
92
+ return { type: "text", text: part.text };
93
+ }
94
+ if (part.type === "file" && typeof part.data === "string") {
95
+ return {
96
+ type: "file",
97
+ data: part.data,
98
+ mimeType: typeof part.mimeType === "string"
99
+ ? part.mimeType
100
+ : "application/octet-stream",
101
+ ...(typeof part.filename === "string" ? { filename: part.filename } : {}),
102
+ };
103
+ }
104
+ return null;
105
+ }
106
+ async function serializeQueuedAttachments(attachments) {
107
+ const queued = [];
108
+ for (const raw of attachments ?? []) {
109
+ const attachment = raw;
110
+ const name = attachment.name || attachment.file?.name || "attachment";
111
+ const id = attachment.id || name;
112
+ const type = attachment.type || "file";
113
+ const contentType = attachment.contentType || attachment.file?.type;
114
+ if (Array.isArray(attachment.content) && attachment.content.length > 0) {
115
+ const content = attachment.content
116
+ .map((part) => serializeAttachmentContentPart(part))
117
+ .filter((part) => !!part);
118
+ if (content.length > 0) {
119
+ queued.push({
120
+ id,
121
+ type,
122
+ name,
123
+ contentType,
124
+ status: { type: "complete" },
125
+ content,
126
+ });
127
+ }
128
+ continue;
129
+ }
130
+ if (typeof File !== "undefined" && attachment.file instanceof File) {
131
+ const file = attachment.file;
132
+ if (file.type.startsWith("image/")) {
133
+ queued.push({
134
+ id,
135
+ type: "image",
136
+ name,
137
+ contentType: file.type,
138
+ status: { type: "complete" },
139
+ content: [{ type: "image", image: await getFileDataURL(file) }],
140
+ });
141
+ }
142
+ else if (isTextLikeFile(file)) {
143
+ queued.push({
144
+ id,
145
+ type: "file",
146
+ name,
147
+ contentType: file.type || "text/plain",
148
+ status: { type: "complete" },
149
+ content: [
150
+ {
151
+ type: "text",
152
+ text: textFileAttachmentEnvelope(file, await file.text()),
153
+ },
154
+ ],
155
+ });
156
+ }
157
+ else {
158
+ queued.push({
159
+ id,
160
+ type: "document",
161
+ name,
162
+ contentType: inferDocumentContentType(file),
163
+ status: { type: "complete" },
164
+ content: [
165
+ {
166
+ type: "file",
167
+ filename: file.name,
168
+ data: await getFileDataURL(file),
169
+ mimeType: inferDocumentContentType(file),
170
+ },
171
+ ],
172
+ });
173
+ }
174
+ }
175
+ }
176
+ return queued.length > 0 ? queued : undefined;
177
+ }
73
178
  // ─── Markdown Text ──────────────────────────────────────────────────────────
74
179
  const markdownStyles = `
75
180
  .agent-markdown > :first-child { margin-top: 0; }
@@ -1709,6 +1814,9 @@ const AssistantChatInner = forwardRef(function AssistantChatInner({ emptyStateTe
1709
1814
  threadRuntime.append({
1710
1815
  role: "user",
1711
1816
  content,
1817
+ ...(next.attachments && next.attachments.length > 0
1818
+ ? { attachments: next.attachments }
1819
+ : {}),
1712
1820
  ...(next.references && next.references.length > 0
1713
1821
  ? { runConfig: { custom: { references: next.references } } }
1714
1822
  : {}),
@@ -1747,7 +1855,7 @@ const AssistantChatInner = forwardRef(function AssistantChatInner({ emptyStateTe
1747
1855
  setForceStopped(false);
1748
1856
  }
1749
1857
  }, [isReconnecting, forceStopped]);
1750
- const addToQueue = useCallback((text, images, references) => {
1858
+ const addToQueue = useCallback(async (text, images, references, attachments) => {
1751
1859
  setShowContinue(false);
1752
1860
  setLoopLimitInfo(null);
1753
1861
  setRunErrorInfo(null);
@@ -1758,6 +1866,7 @@ const AssistantChatInner = forwardRef(function AssistantChatInner({ emptyStateTe
1758
1866
  // Selection context attached via Cmd+I is one-shot — clear it as soon
1759
1867
  // as the user actually sends a message so it can't be re-used.
1760
1868
  clearPendingSelection();
1869
+ const queuedAttachments = await serializeQueuedAttachments(attachments);
1761
1870
  if (isRunning) {
1762
1871
  setQueuedMessages((prev) => [
1763
1872
  ...prev,
@@ -1767,6 +1876,7 @@ const AssistantChatInner = forwardRef(function AssistantChatInner({ emptyStateTe
1767
1876
  : `q-${Date.now()}-${Math.random().toString(36).slice(2, 8)}`,
1768
1877
  text,
1769
1878
  images,
1879
+ attachments: queuedAttachments,
1770
1880
  references,
1771
1881
  },
1772
1882
  ]);
@@ -1778,7 +1888,13 @@ const AssistantChatInner = forwardRef(function AssistantChatInner({ emptyStateTe
1778
1888
  content.push({ type: "image", image: img });
1779
1889
  }
1780
1890
  }
1781
- threadRuntime.append({ role: "user", content });
1891
+ threadRuntime.append({
1892
+ role: "user",
1893
+ content,
1894
+ ...(queuedAttachments && queuedAttachments.length > 0
1895
+ ? { attachments: queuedAttachments }
1896
+ : {}),
1897
+ });
1782
1898
  }
1783
1899
  }, [isRunning, threadRuntime]);
1784
1900
  // Expose imperative handle
@@ -1979,8 +2095,7 @@ const AssistantChatInner = forwardRef(function AssistantChatInner({ emptyStateTe
1979
2095
  return (_jsx("div", { className: "flex justify-end group", children: _jsxs("div", { className: "relative max-w-[85%] rounded-lg bg-accent/50 text-foreground/60 px-3 py-2 text-sm leading-relaxed whitespace-pre-wrap break-words", children: [_jsxs("div", { className: "flex items-center gap-1.5 text-[10px] text-muted-foreground mb-1 font-medium uppercase tracking-wide", children: [_jsx(IconClock, { className: "h-3 w-3" }), "Queued"] }), displayText, msg.images && msg.images.length > 0 && (_jsx("div", { className: "flex flex-wrap gap-1.5 mt-1.5", children: msg.images.map((img, j) => (_jsx("img", { src: img, alt: "", className: "h-12 w-12 rounded object-cover border border-border/50" }, j))) })), _jsx("button", { type: "button", onClick: () => setQueuedMessages((prev) => prev.filter((m) => m.id !== msg.id)), "aria-label": "Remove from queue", className: "absolute -top-2 -right-2 flex h-5 w-5 items-center justify-center rounded-full border border-border bg-background text-muted-foreground opacity-0 group-hover:opacity-100 focus-visible:opacity-100 hover:text-foreground hover:bg-accent shadow-sm", children: _jsx(IconX, { className: "h-3 w-3" }) })] }) }, msg.id));
1980
2096
  })] })) }), showScrollToBottom && (_jsx("div", { className: "shrink-0 flex justify-center -mb-1", children: _jsx("button", { type: "button", onClick: scrollToBottom, className: "flex h-7 w-7 items-center justify-center rounded-full border border-border bg-background shadow-sm hover:bg-accent", "aria-label": "Scroll to bottom", children: _jsx(IconChevronDown, { className: "h-3.5 w-3.5 text-muted-foreground" }) }) })), composerSlot, _jsx(SelectionAttachedPill, {}), _jsx("div", { className: cn("agent-composer-area shrink-0 px-3 py-2", missingApiKey && "cursor-pointer", isComposerDisabled && "opacity-70"), onClick: missingApiKey
1981
2097
  ? () => setMissingKeyBouncePulse((p) => p + 1)
1982
- : undefined, children: _jsxs(ComposerPrimitive.Root, { className: cn("flex flex-col rounded-lg border border-input bg-background focus-within:ring-1 focus-within:ring-ring", execMode === "plan" &&
1983
- "border-amber-500/50 bg-amber-500/[0.03] focus-within:ring-amber-500/30"), children: [_jsx(ComposerAttachmentPreviewStrip, {}), _jsx(TiptapComposer, { focusRef: tiptapRef, disabled: isComposerDisabled, placeholder: missingApiKey
2098
+ : undefined, children: _jsxs(ComposerPrimitive.Root, { className: "flex flex-col rounded-lg border border-input bg-background focus-within:ring-1 focus-within:ring-ring", children: [_jsx(ComposerAttachmentPreviewStrip, {}), _jsx(TiptapComposer, { focusRef: tiptapRef, disabled: isComposerDisabled, placeholder: missingApiKey
1984
2099
  ? "Connect an AI engine above to start chatting…"
1985
2100
  : composerDisabled
1986
2101
  ? (composerDisabledPlaceholder ??
@@ -1990,7 +2105,7 @@ const AssistantChatInner = forwardRef(function AssistantChatInner({ emptyStateTe
1990
2105
  ? `${queuedMessages.length} queued — type another...`
1991
2106
  : "Queue a message..."
1992
2107
  : undefined, onSubmit: isRunning
1993
- ? (text, references) => addToQueue(text, undefined, references.length > 0 ? references : undefined)
2108
+ ? (text, references, attachments) => void addToQueue(text, undefined, references.length > 0 ? references : undefined, attachments)
1994
2109
  : undefined, onSlashCommand: onSlashCommand, execMode: execMode, onExecModeChange: onExecModeChange, planModeDisabled: planModeDisabled, planModeDisabledReason: planModeDisabledReason, selectedModel: selectedModel ?? defaultModel, selectedEffort: selectedEffort, availableModels: availableModels, onModelChange: onModelChange, onEffortChange: onEffortChange, draftScope: threadId || tabId, interceptBuildRequestsForBuilder: true, extraActionButton: showRunningInUI ? (_jsxs(Tooltip, { children: [_jsx(TooltipTrigger, { asChild: true, children: _jsx("button", { type: "button", onClick: () => {
1995
2110
  // Nuclear stop: flip forceStopped so isRunning is false
1996
2111
  // immediately. This unblocks submission even if the