@agent-native/core 0.12.30 → 0.12.31
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/dist/agent/run-manager.d.ts.map +1 -1
- package/dist/agent/run-manager.js +21 -5
- package/dist/agent/run-manager.js.map +1 -1
- package/dist/client/AgentPanel.d.ts.map +1 -1
- package/dist/client/AgentPanel.js +10 -3
- package/dist/client/AgentPanel.js.map +1 -1
- package/dist/client/AssistantChat.d.ts.map +1 -1
- package/dist/client/AssistantChat.js +77 -20
- package/dist/client/AssistantChat.js.map +1 -1
- package/dist/client/MultiTabAssistantChat.d.ts.map +1 -1
- package/dist/client/MultiTabAssistantChat.js +9 -8
- package/dist/client/MultiTabAssistantChat.js.map +1 -1
- package/dist/client/agent-chat-adapter.d.ts.map +1 -1
- package/dist/client/agent-chat-adapter.js +23 -4
- package/dist/client/agent-chat-adapter.js.map +1 -1
- package/dist/client/composer/TiptapComposer.js +1 -1
- package/dist/client/composer/TiptapComposer.js.map +1 -1
- package/dist/client/dev-overlay/DevOverlay.d.ts.map +1 -1
- package/dist/client/dev-overlay/DevOverlay.js +5 -1
- package/dist/client/dev-overlay/DevOverlay.js.map +1 -1
- package/dist/client/guided-questions.d.ts +77 -0
- package/dist/client/guided-questions.d.ts.map +1 -0
- package/dist/client/guided-questions.js +295 -0
- package/dist/client/guided-questions.js.map +1 -0
- package/dist/client/index.d.ts +1 -0
- package/dist/client/index.d.ts.map +1 -1
- package/dist/client/index.js +1 -0
- package/dist/client/index.js.map +1 -1
- package/dist/client/org/OrgSwitcher.d.ts.map +1 -1
- package/dist/client/org/OrgSwitcher.js +8 -1
- package/dist/client/org/OrgSwitcher.js.map +1 -1
- package/dist/client/settings/SettingsPanel.d.ts +3 -1
- package/dist/client/settings/SettingsPanel.d.ts.map +1 -1
- package/dist/client/settings/SettingsPanel.js +78 -12
- package/dist/client/settings/SettingsPanel.js.map +1 -1
- package/dist/client/settings/SettingsSection.d.ts +2 -1
- package/dist/client/settings/SettingsSection.d.ts.map +1 -1
- package/dist/client/settings/SettingsSection.js +2 -2
- package/dist/client/settings/SettingsSection.js.map +1 -1
- package/dist/client/sharing/ShareButton.d.ts +4 -0
- package/dist/client/sharing/ShareButton.d.ts.map +1 -1
- package/dist/client/sharing/ShareButton.js +76 -32
- package/dist/client/sharing/ShareButton.js.map +1 -1
- package/dist/client/sharing/ShareButton.spec.js +54 -7
- package/dist/client/sharing/ShareButton.spec.js.map +1 -1
- package/dist/client/use-db-sync.d.ts +12 -2
- package/dist/client/use-db-sync.d.ts.map +1 -1
- package/dist/client/use-db-sync.js +195 -53
- package/dist/client/use-db-sync.js.map +1 -1
- package/dist/server/core-routes-plugin.js +2 -2
- package/dist/server/core-routes-plugin.js.map +1 -1
- package/dist/server/index.d.ts +2 -1
- package/dist/server/index.d.ts.map +1 -1
- package/dist/server/index.js +2 -1
- package/dist/server/index.js.map +1 -1
- package/dist/server/poll-events.d.ts +12 -0
- package/dist/server/poll-events.d.ts.map +1 -0
- package/dist/server/poll-events.js +41 -0
- package/dist/server/poll-events.js.map +1 -0
- package/dist/server/poll.d.ts +4 -0
- package/dist/server/poll.d.ts.map +1 -1
- package/dist/server/poll.js +19 -12
- package/dist/server/poll.js.map +1 -1
- package/dist/templates/default/react-router.config.ts +1 -0
- package/package.json +1 -1
- package/src/templates/default/react-router.config.ts +1 -0
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"AssistantChat.d.ts","sourceRoot":"","sources":["../../src/client/AssistantChat.tsx"],"names":[],"mappings":"AAAA,OAAO,KAQN,MAAM,OAAO,CAAC;AA4Bf,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,+BAA+B,CAAC;
|
|
1
|
+
{"version":3,"file":"AssistantChat.d.ts","sourceRoot":"","sources":["../../src/client/AssistantChat.tsx"],"names":[],"mappings":"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"}
|
|
@@ -563,25 +563,75 @@ function ComposerAttachmentPreviewStrip() {
|
|
|
563
563
|
// can stop spinning when the user clicks stop. `thread.isRunning` alone misses
|
|
564
564
|
// the force-stopped case; `part.result === undefined` alone ignores stop.
|
|
565
565
|
const ChatRunningContext = React.createContext(false);
|
|
566
|
-
|
|
567
|
-
|
|
568
|
-
|
|
569
|
-
|
|
570
|
-
|
|
566
|
+
function stringifyToolValue(value, pretty = false) {
|
|
567
|
+
if (typeof value === "string")
|
|
568
|
+
return value;
|
|
569
|
+
try {
|
|
570
|
+
return JSON.stringify(value, null, pretty ? 2 : 0);
|
|
571
|
+
}
|
|
572
|
+
catch {
|
|
573
|
+
return String(value ?? "");
|
|
574
|
+
}
|
|
575
|
+
}
|
|
576
|
+
function toolArgsPreview(args) {
|
|
577
|
+
return Object.entries(args)
|
|
578
|
+
.map(([key, value]) => {
|
|
579
|
+
const singleLine = stringifyToolValue(value).replace(/\s+/g, " ").trim();
|
|
580
|
+
const preview = singleLine.length > 96 ? `${singleLine.slice(0, 96)}...` : singleLine;
|
|
581
|
+
return `${key}=${preview}`;
|
|
582
|
+
})
|
|
583
|
+
.join(", ");
|
|
584
|
+
}
|
|
585
|
+
function toolArgsDisplayText(args) {
|
|
586
|
+
const entries = Object.entries(args);
|
|
587
|
+
if (entries.length === 1) {
|
|
588
|
+
const [key, value] = entries[0];
|
|
589
|
+
return `${key}=\n${stringifyToolValue(value, true)}`;
|
|
590
|
+
}
|
|
591
|
+
return JSON.stringify(args, null, 2);
|
|
592
|
+
}
|
|
593
|
+
function toolArgsCopyText(args) {
|
|
594
|
+
const entries = Object.entries(args);
|
|
595
|
+
if (entries.length === 1 && typeof entries[0][1] === "string") {
|
|
596
|
+
return entries[0][1];
|
|
597
|
+
}
|
|
598
|
+
return JSON.stringify(args, null, 2);
|
|
599
|
+
}
|
|
571
600
|
function ToolCallDisplay({ toolName, argsText, args, result, isRunning, }) {
|
|
572
601
|
const streamRef = useRef(null);
|
|
573
602
|
const isAgentCall = toolName.startsWith("agent:");
|
|
574
603
|
const [expanded, setExpanded] = useState(isAgentCall);
|
|
604
|
+
const [copiedSection, setCopiedSection] = useState(null);
|
|
605
|
+
const copyResetRef = useRef(null);
|
|
575
606
|
const agentName = isAgentCall ? toolName.slice(6) : null;
|
|
576
607
|
const isAgentError = isAgentCall && result === "Error calling agent";
|
|
577
608
|
const agentStreamText = isAgentCall ? (argsText ?? "") : "";
|
|
578
609
|
const hasStreamText = agentStreamText.length > 0;
|
|
610
|
+
const hasArgs = !isAgentCall && Object.keys(args).length > 0;
|
|
579
611
|
// NOTE: All hooks must be above any conditional returns
|
|
580
612
|
useEffect(() => {
|
|
581
613
|
if (isAgentCall && isRunning && streamRef.current) {
|
|
582
614
|
streamRef.current.scrollTop = streamRef.current.scrollHeight;
|
|
583
615
|
}
|
|
584
616
|
}, [agentStreamText, isAgentCall, isRunning]);
|
|
617
|
+
useEffect(() => {
|
|
618
|
+
return () => {
|
|
619
|
+
if (copyResetRef.current)
|
|
620
|
+
clearTimeout(copyResetRef.current);
|
|
621
|
+
};
|
|
622
|
+
}, []);
|
|
623
|
+
const copyToolDetail = useCallback(async (section, text) => {
|
|
624
|
+
try {
|
|
625
|
+
await navigator.clipboard.writeText(text);
|
|
626
|
+
setCopiedSection(section);
|
|
627
|
+
if (copyResetRef.current)
|
|
628
|
+
clearTimeout(copyResetRef.current);
|
|
629
|
+
copyResetRef.current = setTimeout(() => setCopiedSection(null), 1200);
|
|
630
|
+
}
|
|
631
|
+
catch {
|
|
632
|
+
// Clipboard failures should not interrupt chat rendering.
|
|
633
|
+
}
|
|
634
|
+
}, []);
|
|
585
635
|
// Render connect-builder as ConnectBuilderCard once the result is available
|
|
586
636
|
if (toolName === "connect-builder" && result) {
|
|
587
637
|
try {
|
|
@@ -620,11 +670,10 @@ function ToolCallDisplay({ toolName, argsText, args, result, isRunning, }) {
|
|
|
620
670
|
// Fall through to default pill rendering
|
|
621
671
|
}
|
|
622
672
|
}
|
|
623
|
-
const argsStr = isAgentCall
|
|
624
|
-
|
|
625
|
-
|
|
626
|
-
|
|
627
|
-
.join(", ");
|
|
673
|
+
const argsStr = isAgentCall ? "" : toolArgsPreview(args);
|
|
674
|
+
const inputDisplay = hasArgs ? toolArgsDisplayText(args) : "";
|
|
675
|
+
const inputCopy = hasArgs ? toolArgsCopyText(args) : "";
|
|
676
|
+
const resultDisplay = result !== undefined ? stringifyToolValue(result, true) : "";
|
|
628
677
|
const displayName = isAgentCall
|
|
629
678
|
? isRunning
|
|
630
679
|
? `Asking ${agentName}...`
|
|
@@ -632,13 +681,13 @@ function ToolCallDisplay({ toolName, argsText, args, result, isRunning, }) {
|
|
|
632
681
|
? `Error asking ${agentName}`
|
|
633
682
|
: `Asked ${agentName}`
|
|
634
683
|
: toolName;
|
|
635
|
-
const canExpand = isAgentCall
|
|
684
|
+
const canExpand = isAgentCall
|
|
685
|
+
? hasStreamText
|
|
686
|
+
: hasArgs || result !== undefined;
|
|
636
687
|
const isExpanded = isAgentCall ? hasStreamText && expanded : expanded;
|
|
637
|
-
return (_jsxs("div", { className: "my-1 overflow-hidden", children: [_jsxs("button", { onClick: () => canExpand && setExpanded(!isExpanded), className: cn("flex items-center gap-2 rounded-md px-2.5 py-1.5 text-xs font-mono w-full text-left overflow-hidden", isRunning
|
|
688
|
+
return (_jsxs("div", { className: "my-1 overflow-hidden", children: [_jsxs("button", { onClick: () => canExpand && setExpanded(!isExpanded), "aria-expanded": canExpand ? isExpanded : undefined, className: cn("flex items-center gap-2 rounded-md px-2.5 py-1.5 text-xs font-mono w-full text-left overflow-hidden", isRunning
|
|
638
689
|
? "bg-muted text-muted-foreground"
|
|
639
|
-
: "bg-muted text-muted-foreground hover:bg-accent"), children: [_jsx("span", { className: "shrink-0", children: isRunning ? (_jsx(IconLoader2, { className: "h-3 w-3 animate-spin" })) : isAgentError ? (_jsx(IconCircleX, { className: "h-3 w-3 text-destructive" })) : result !== undefined ? (_jsx(IconCheck, { className: "h-3 w-3 text-emerald-500" })) : (_jsx(IconSquareFilled, { className: "h-3 w-3 text-muted-foreground" })) }), _jsxs("span", { className: "truncate min-w-0", children: [_jsx("span", { className: "font-medium", children: displayName }), argsStr && _jsxs("span", { className: "opacity-60 ml-1", children: ["(", argsStr, ")"] })] }), canExpand &&
|
|
640
|
-
? result
|
|
641
|
-
: JSON.stringify(result, null, 2) }))] }));
|
|
690
|
+
: "bg-muted text-muted-foreground hover:bg-accent"), children: [_jsx("span", { className: "shrink-0", children: isRunning ? (_jsx(IconLoader2, { className: "h-3 w-3 animate-spin" })) : isAgentError ? (_jsx(IconCircleX, { className: "h-3 w-3 text-destructive" })) : result !== undefined ? (_jsx(IconCheck, { className: "h-3 w-3 text-emerald-500" })) : (_jsx(IconSquareFilled, { className: "h-3 w-3 text-muted-foreground" })) }), _jsxs("span", { className: "truncate min-w-0", children: [_jsx("span", { className: "font-medium", children: displayName }), argsStr && _jsxs("span", { className: "opacity-60 ml-1", children: ["(", argsStr, ")"] })] }), canExpand && (_jsx(IconChevronDown, { className: cn("ml-auto h-3 w-3 shrink-0 opacity-40", isExpanded && "rotate-180") }))] }), isExpanded && isAgentCall && hasStreamText && (_jsx("div", { ref: streamRef, className: "mt-1 rounded-md bg-muted/50 px-3 py-2 text-xs text-muted-foreground break-words max-h-48 overflow-y-auto agent-markdown prose prose-sm prose-invert max-w-none", children: _jsx(ReactMarkdown, { remarkPlugins: [remarkGfm], components: markdownComponents, children: agentStreamText }) })), isExpanded && !isAgentCall && (hasArgs || result !== undefined) && (_jsxs("div", { className: "mt-1 space-y-2 rounded-md bg-muted/50 px-3 py-2 text-xs text-muted-foreground", children: [hasArgs && (_jsxs("div", { children: [_jsxs("div", { className: "mb-1 flex items-center justify-between gap-2", children: [_jsx("span", { className: "font-medium text-foreground/80", children: "Input" }), _jsxs("button", { type: "button", onClick: () => copyToolDetail("input", inputCopy), className: "inline-flex h-6 items-center gap-1 rounded-md px-1.5 font-sans text-[11px] text-muted-foreground hover:bg-background/80 hover:text-foreground", children: [_jsx(IconCopy, { size: 12 }), copiedSection === "input" ? "Copied" : "Copy"] })] }), _jsx("pre", { className: "max-h-64 overflow-auto whitespace-pre-wrap break-words rounded-md border border-border/50 bg-background/60 p-2 font-mono text-[11px] leading-relaxed", children: inputDisplay })] })), result !== undefined && (_jsxs("div", { children: [_jsxs("div", { className: "mb-1 flex items-center justify-between gap-2", children: [_jsx("span", { className: "font-medium text-foreground/80", children: "Result" }), _jsxs("button", { type: "button", onClick: () => copyToolDetail("result", resultDisplay), className: "inline-flex h-6 items-center gap-1 rounded-md px-1.5 font-sans text-[11px] text-muted-foreground hover:bg-background/80 hover:text-foreground", children: [_jsx(IconCopy, { size: 12 }), copiedSection === "result" ? "Copied" : "Copy"] })] }), _jsx("pre", { className: "max-h-64 overflow-auto whitespace-pre-wrap break-words rounded-md border border-border/50 bg-background/60 p-2 font-mono text-[11px] leading-relaxed", children: resultDisplay })] }))] }))] }));
|
|
642
691
|
}
|
|
643
692
|
function ToolCallFallback({ toolName, args, argsText, result, }) {
|
|
644
693
|
const chatRunning = React.useContext(ChatRunningContext);
|
|
@@ -1036,6 +1085,11 @@ function getRunErrorMetadata(message) {
|
|
|
1036
1085
|
...(runError.recoverable ? { recoverable: true } : {}),
|
|
1037
1086
|
};
|
|
1038
1087
|
}
|
|
1088
|
+
function getRequestModeMetadata(message) {
|
|
1089
|
+
const meta = message?.metadata;
|
|
1090
|
+
const requestMode = meta?.custom?.requestMode ?? meta?.requestMode;
|
|
1091
|
+
return requestMode === "act" || requestMode === "plan" ? requestMode : null;
|
|
1092
|
+
}
|
|
1039
1093
|
function isBuilderReconnectRunError(info) {
|
|
1040
1094
|
const code = (info.errorCode ?? "").toLowerCase();
|
|
1041
1095
|
const message = info.message.toLowerCase();
|
|
@@ -2093,12 +2147,15 @@ const AssistantChatInner = forwardRef(function AssistantChatInner({ emptyStateTe
|
|
|
2093
2147
|
}
|
|
2094
2148
|
return "";
|
|
2095
2149
|
}, [messages]);
|
|
2096
|
-
const
|
|
2150
|
+
const latestMessage = messages[messages.length - 1];
|
|
2151
|
+
const latestMessageRole = latestMessage?.role;
|
|
2152
|
+
const latestAssistantWasPlan = latestMessageRole === "assistant" &&
|
|
2153
|
+
getRequestModeMetadata(latestMessage) === "plan";
|
|
2097
2154
|
const showPlanModeCallout = execMode === "plan" &&
|
|
2098
2155
|
!planModeDisabled &&
|
|
2099
2156
|
!isComposerDisabled &&
|
|
2100
2157
|
!showRunningInUI;
|
|
2101
|
-
const canImplementPlan = showPlanModeCallout &&
|
|
2158
|
+
const canImplementPlan = showPlanModeCallout && latestAssistantWasPlan;
|
|
2102
2159
|
const handleImplementPlan = useCallback(() => {
|
|
2103
2160
|
onExecModeChange?.("build");
|
|
2104
2161
|
void addToQueue("Implement the plan.", undefined, undefined, undefined, "act");
|
|
@@ -2161,12 +2218,12 @@ const AssistantChatInner = forwardRef(function AssistantChatInner({ emptyStateTe
|
|
|
2161
2218
|
addToQueue("Continue from where you left off.");
|
|
2162
2219
|
} })), shouldShowRunError && visibleRunError && (_jsx(RunErrorRecoveryCard, { info: visibleRunError, onContinue: () => {
|
|
2163
2220
|
setRunErrorInfo(null);
|
|
2164
|
-
addToQueue("Continue from where you stopped. Use the partial work above, verify what succeeded, and finish the original request. Prefer dedicated app actions over raw database edits when they exist.");
|
|
2221
|
+
addToQueue("Continue from where you stopped. Use the partial work above, verify what succeeded, and finish the original request. Do not rerun the exact same failed tool input unless the failure was transient or the user explicitly asked for an exact rerun. Prefer dedicated app actions over raw database edits when they exist.");
|
|
2165
2222
|
}, onRetry: () => {
|
|
2166
2223
|
setRunErrorInfo(null);
|
|
2167
2224
|
addToQueue(lastUserText
|
|
2168
|
-
? `Retry the previous request from a clean approach.
|
|
2169
|
-
: "Retry the previous request from a clean approach.");
|
|
2225
|
+
? `Retry the previous request from a clean approach. Do not rerun the exact same failed tool input unless the failure was transient or the user explicitly asked for an exact rerun. If a provider query failed because of schema, syntax, or type mismatch, diagnose the error and adjust the query first.\n\nOriginal request:\n\n${lastUserText}`
|
|
2226
|
+
: "Retry the previous request from a clean approach. Do not rerun the exact same failed tool input unless the failure was transient or the user explicitly asked for an exact rerun. If a provider query failed because of schema, syntax, or type mismatch, diagnose the error and adjust the query first.");
|
|
2170
2227
|
}, onFork: onForkChat, onDismiss: () => {
|
|
2171
2228
|
if (visibleRunErrorKey) {
|
|
2172
2229
|
setDismissedRunErrorKey(visibleRunErrorKey);
|