@agent-native/core 0.35.3 → 0.37.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/cli/index.js +1 -1
- package/dist/cli/index.js.map +1 -1
- package/dist/cli/skills.d.ts.map +1 -1
- package/dist/cli/skills.js +249 -11
- package/dist/cli/skills.js.map +1 -1
- package/dist/client/AssistantChat.d.ts.map +1 -1
- package/dist/client/AssistantChat.js +25 -25
- package/dist/client/AssistantChat.js.map +1 -1
- package/dist/client/MultiTabAssistantChat.d.ts.map +1 -1
- package/dist/client/MultiTabAssistantChat.js +32 -15
- 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 +68 -24
- package/dist/client/agent-chat-adapter.js.map +1 -1
- package/dist/client/composer/ComposerPlusMenu.d.ts.map +1 -1
- package/dist/client/composer/ComposerPlusMenu.js +174 -8
- package/dist/client/composer/ComposerPlusMenu.js.map +1 -1
- package/dist/client/composer/PromptComposer.d.ts +2 -0
- package/dist/client/composer/PromptComposer.d.ts.map +1 -1
- package/dist/client/composer/PromptComposer.js +2 -2
- package/dist/client/composer/PromptComposer.js.map +1 -1
- package/dist/client/composer/TiptapComposer.js +1 -1
- package/dist/client/composer/TiptapComposer.js.map +1 -1
- package/dist/client/context-xray/ContextMeter.d.ts +2 -1
- package/dist/client/context-xray/ContextMeter.d.ts.map +1 -1
- package/dist/client/context-xray/ContextMeter.js +19 -25
- package/dist/client/context-xray/ContextMeter.js.map +1 -1
- package/dist/client/context-xray/ContextXRayPanel.d.ts +1 -3
- package/dist/client/context-xray/ContextXRayPanel.d.ts.map +1 -1
- package/dist/client/context-xray/ContextXRayPanel.js +27 -24
- package/dist/client/context-xray/ContextXRayPanel.js.map +1 -1
- package/dist/client/conversation/AgentConversation.d.ts.map +1 -1
- package/dist/client/conversation/AgentConversation.js +2 -1
- package/dist/client/conversation/AgentConversation.js.map +1 -1
- package/dist/client/dynamic-suggestions.d.ts +13 -7
- package/dist/client/dynamic-suggestions.d.ts.map +1 -1
- package/dist/client/dynamic-suggestions.js +23 -12
- package/dist/client/dynamic-suggestions.js.map +1 -1
- 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/route-state.d.ts +116 -0
- package/dist/client/route-state.d.ts.map +1 -0
- package/dist/client/route-state.js +205 -0
- package/dist/client/route-state.js.map +1 -0
- package/dist/client/sse-event-processor.d.ts +1 -0
- package/dist/client/sse-event-processor.d.ts.map +1 -1
- package/dist/client/sse-event-processor.js +62 -15
- package/dist/client/sse-event-processor.js.map +1 -1
- package/dist/client/tool-display.d.ts +4 -0
- package/dist/client/tool-display.d.ts.map +1 -0
- package/dist/client/tool-display.js +28 -0
- package/dist/client/tool-display.js.map +1 -0
- package/dist/client/use-chat-threads.d.ts.map +1 -1
- package/dist/client/use-chat-threads.js +40 -31
- package/dist/client/use-chat-threads.js.map +1 -1
- package/dist/client/use-external-value.d.ts.map +1 -1
- package/dist/client/use-external-value.js +14 -7
- package/dist/client/use-external-value.js.map +1 -1
- package/dist/extensions/html-shell.d.ts +3 -2
- package/dist/extensions/html-shell.d.ts.map +1 -1
- package/dist/extensions/html-shell.js +12 -2
- package/dist/extensions/html-shell.js.map +1 -1
- package/dist/extensions/routes.js +2 -7
- package/dist/extensions/routes.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/security-headers.d.ts +16 -19
- package/dist/server/security-headers.d.ts.map +1 -1
- package/dist/server/security-headers.js +24 -25
- package/dist/server/security-headers.js.map +1 -1
- package/dist/templates/default/AGENTS.md +7 -1
- package/dist/templates/default/app/hooks/use-navigation-state.ts +10 -76
- package/docs/content/context-awareness.md +90 -48
- package/docs/content/creating-templates.md +22 -1
- package/docs/content/external-agents.md +1 -1
- package/package.json +2 -1
- package/src/templates/default/AGENTS.md +7 -1
- package/src/templates/default/app/hooks/use-navigation-state.ts +10 -76
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"MultiTabAssistantChat.d.ts","sourceRoot":"","sources":["../../src/client/MultiTabAssistantChat.tsx"],"names":[],"mappings":"AAAA,OAAO,KAMN,MAAM,OAAO,CAAC;AAUf,OAAO,EAEL,KAAK,kBAAkB,EAExB,MAAM,oBAAoB,CAAC;AAc5B,OAAO,EAEL,KAAK,eAAe,EAErB,MAAM,uBAAuB,CAAC;AAioB/B,UAAU,OAAO;IACf,EAAE,EAAE,MAAM,CAAC;IACX,KAAK,EAAE,MAAM,CAAC;IACd,MAAM,EAAE,MAAM,GAAG,SAAS,GAAG,WAAW,CAAC;IACzC,uDAAuD;IACvD,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,qEAAqE;IACrE,YAAY,CAAC,EAAE,MAAM,CAAC;CACvB;
|
|
1
|
+
{"version":3,"file":"MultiTabAssistantChat.d.ts","sourceRoot":"","sources":["../../src/client/MultiTabAssistantChat.tsx"],"names":[],"mappings":"AAAA,OAAO,KAMN,MAAM,OAAO,CAAC;AAUf,OAAO,EAEL,KAAK,kBAAkB,EAExB,MAAM,oBAAoB,CAAC;AAc5B,OAAO,EAEL,KAAK,eAAe,EAErB,MAAM,uBAAuB,CAAC;AAioB/B,UAAU,OAAO;IACf,EAAE,EAAE,MAAM,CAAC;IACX,KAAK,EAAE,MAAM,CAAC;IACd,MAAM,EAAE,MAAM,GAAG,SAAS,GAAG,WAAW,CAAC;IACzC,uDAAuD;IACvD,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,qEAAqE;IACrE,YAAY,CAAC,EAAE,MAAM,CAAC;CACvB;AA8ED,MAAM,WAAW,gCAAgC;IAC/C,IAAI,EAAE,OAAO,EAAE,CAAC;IAChB,WAAW,EAAE,MAAM,CAAC;IACpB,qBAAqB,EAAE,MAAM,CAAC;IAC9B,cAAc,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,IAAI,CAAC;IACxC,MAAM,EAAE,MAAM,IAAI,CAAC;IACnB,QAAQ,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,IAAI,CAAC;IAClC,cAAc,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,IAAI,CAAC;IACxC,YAAY,EAAE,MAAM,IAAI,CAAC;IACzB,cAAc,EAAE,MAAM,IAAI,CAAC;IAC3B,+BAA+B;IAC/B,WAAW,CAAC,EAAE,OAAO,CAAC;IACtB,aAAa,CAAC,EAAE,MAAM,IAAI,CAAC;IAC3B,6EAA6E;IAC7E,QAAQ,EAAE,MAAM,CAAC;CAClB;AAID,MAAM,MAAM,0BAA0B,GAAG,IAAI,CAC3C,kBAAkB,EAClB,OAAO,GAAG,UAAU,CACrB,GAAG;IACF,sCAAsC;IACtC,UAAU,CAAC,EAAE,OAAO,CAAC;IACrB,iDAAiD;IACjD,YAAY,CAAC,EAAE,CAAC,KAAK,EAAE,gCAAgC,KAAK,KAAK,CAAC,SAAS,CAAC;IAC5E,2DAA2D;IAC3D,aAAa,CAAC,EAAE,CAAC,KAAK,EAAE,gCAAgC,KAAK,KAAK,CAAC,SAAS,CAAC;IAC7E,sGAAsG;IACtG,aAAa,CAAC,EAAE,OAAO,CAAC;IACxB,yFAAyF;IACzF,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,4EAA4E;IAC5E,mBAAmB,CAAC,EAAE,OAAO,CAAC;IAC9B,mEAAmE;IACnE,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB;;;;;;OAMG;IACH,KAAK,CAAC,EAAE,eAAe,GAAG,IAAI,CAAC;CAChC,CAAC;AAEF,wBAAgB,qBAAqB,CAAC,EACpC,UAAiB,EACjB,YAAY,EACZ,aAAa,EACb,aAAqB,EACrB,MAAqD,EACrD,UAAU,EACV,mBAA0B,EAC1B,YAAY,EACZ,KAAY,EACZ,GAAG,KAAK,EACT,EAAE,0BAA0B,2CAqpD5B"}
|
|
@@ -281,6 +281,7 @@ function chatTabStatusFromAgentTeamStatus(status) {
|
|
|
281
281
|
return undefined;
|
|
282
282
|
return isActiveAgentTeamStatus(status) ? "running" : "completed";
|
|
283
283
|
}
|
|
284
|
+
const STALE_THREAD_THRESHOLD_MS = 12 * 60 * 60 * 1000;
|
|
284
285
|
function runToAgentTeamTabInfo(run) {
|
|
285
286
|
if (run.sourceRecord?.type && run.sourceRecord.type !== "agent-team-task") {
|
|
286
287
|
return null;
|
|
@@ -698,11 +699,12 @@ export function MultiTabAssistantChat({ showTabBar = true, renderHeader, renderO
|
|
|
698
699
|
const threadMap = new Map(threads.map((t) => [t.id, t]));
|
|
699
700
|
// Hide tabs that have had no activity for more than 12 hours. Stale tabs
|
|
700
701
|
// are removed from the sidebar on load but remain accessible via history.
|
|
701
|
-
const STALE_THRESHOLD_MS = 12 * 60 * 60 * 1000;
|
|
702
702
|
const now = Date.now();
|
|
703
703
|
const isStale = (id) => {
|
|
704
704
|
const thread = threadMap.get(id);
|
|
705
|
-
return thread
|
|
705
|
+
return thread
|
|
706
|
+
? now - thread.updatedAt > STALE_THREAD_THRESHOLD_MS
|
|
707
|
+
: false;
|
|
706
708
|
};
|
|
707
709
|
// If the active thread is a sub-agent, switch to its parent or the most recent main thread
|
|
708
710
|
if (parentMap[activeThreadId]) {
|
|
@@ -736,11 +738,22 @@ export function MultiTabAssistantChat({ showTabBar = true, renderHeader, renderO
|
|
|
736
738
|
// Ensure active thread is always in open tabs.
|
|
737
739
|
// Use functional update to check inside the setter — avoids race with the
|
|
738
740
|
// initialization effect that may have already added the ID in the same batch.
|
|
741
|
+
//
|
|
742
|
+
// Scoped navigation can reset openTabIds from a different localStorage key
|
|
743
|
+
// without changing activeThreadId. Re-check after tab-list resets so the
|
|
744
|
+
// sidebar cannot end up with a live active thread but no mounted chat.
|
|
739
745
|
useEffect(() => {
|
|
740
|
-
if (activeThreadId)
|
|
741
|
-
|
|
746
|
+
if (!activeThreadId || openTabIds.includes(activeThreadId))
|
|
747
|
+
return;
|
|
748
|
+
if (parentMap[activeThreadId])
|
|
749
|
+
return;
|
|
750
|
+
const activeThread = threads.find((thread) => thread.id === activeThreadId);
|
|
751
|
+
if (activeThread &&
|
|
752
|
+
Date.now() - activeThread.updatedAt > STALE_THREAD_THRESHOLD_MS) {
|
|
753
|
+
return;
|
|
742
754
|
}
|
|
743
|
-
|
|
755
|
+
setOpenTabIds((prev) => prev.includes(activeThreadId) ? prev : [...prev, activeThreadId]);
|
|
756
|
+
}, [activeThreadId, openTabIds, parentMap, threads]);
|
|
744
757
|
// Ensure at least one tab is always open — auto-create if sidebar is empty.
|
|
745
758
|
// Skipped when an active thread already exists (e.g. the hook generated an
|
|
746
759
|
// optimistic id for a brand-new session); the activeThreadId effect above
|
|
@@ -1417,9 +1430,14 @@ export function MultiTabAssistantChat({ showTabBar = true, renderHeader, renderO
|
|
|
1417
1430
|
switchThread(forkedId);
|
|
1418
1431
|
return true;
|
|
1419
1432
|
}, [forkThread, switchThread]);
|
|
1420
|
-
// Build tabs from open thread IDs
|
|
1433
|
+
// Build tabs from open thread IDs. During the first thread-list fetch,
|
|
1434
|
+
// `activeThreadId` is seeded synchronously so the chat can mount before
|
|
1435
|
+
// persisted open tabs have been reconciled.
|
|
1436
|
+
const visibleOpenTabIds = activeThreadId && !openTabIds.includes(activeThreadId)
|
|
1437
|
+
? [...openTabIds, activeThreadId]
|
|
1438
|
+
: openTabIds;
|
|
1421
1439
|
const threadMap = new Map(threads.map((t) => [t.id, t]));
|
|
1422
|
-
const tabs =
|
|
1440
|
+
const tabs = visibleOpenTabIds
|
|
1423
1441
|
.filter((id) => threadMap.has(id) || id === activeThreadId)
|
|
1424
1442
|
.map((id) => {
|
|
1425
1443
|
const t = threadMap.get(id);
|
|
@@ -1438,7 +1456,7 @@ export function MultiTabAssistantChat({ showTabBar = true, renderHeader, renderO
|
|
|
1438
1456
|
};
|
|
1439
1457
|
});
|
|
1440
1458
|
// Include sub-agent tabs that aren't in threadMap yet (just created, not refreshed)
|
|
1441
|
-
for (const id of
|
|
1459
|
+
for (const id of visibleOpenTabIds) {
|
|
1442
1460
|
if (!tabs.some((t) => t.id === id)) {
|
|
1443
1461
|
tabs.push({
|
|
1444
1462
|
id,
|
|
@@ -1464,13 +1482,12 @@ export function MultiTabAssistantChat({ showTabBar = true, renderHeader, renderO
|
|
|
1464
1482
|
clearActiveTab,
|
|
1465
1483
|
showHistory,
|
|
1466
1484
|
toggleHistory: () => setShowHistory((v) => !v),
|
|
1467
|
-
tabCount:
|
|
1485
|
+
tabCount: visibleOpenTabIds.length,
|
|
1468
1486
|
};
|
|
1469
|
-
// Wait for the first thread-list pass
|
|
1470
|
-
//
|
|
1471
|
-
//
|
|
1472
|
-
|
|
1473
|
-
if (isLoading) {
|
|
1487
|
+
// Wait for the first thread-list pass only when there is no synchronously
|
|
1488
|
+
// seeded active thread. Suggestion loading and thread-list reconciliation
|
|
1489
|
+
// should not block the chat shell from mounting.
|
|
1490
|
+
if (isLoading && !activeThreadId) {
|
|
1474
1491
|
return (_jsx(ChatSkeleton, { header: renderHeader?.(headerProps), headerOnly: contentHidden }));
|
|
1475
1492
|
}
|
|
1476
1493
|
return (_jsxs("div", { className: "flex flex-1 flex-col h-full min-h-0 overflow-x-hidden", children: [_jsx("style", { dangerouslySetInnerHTML: {
|
|
@@ -1528,7 +1545,7 @@ export function MultiTabAssistantChat({ showTabBar = true, renderHeader, renderO
|
|
|
1528
1545
|
}, children: _jsx(IconX, { size: 12 }) })] }, tab.id)))] }) }))] }));
|
|
1529
1546
|
})()
|
|
1530
1547
|
: null, _jsxs("div", { className: "relative flex-1 flex flex-col min-h-0", children: [renderOverlay ? renderOverlay(headerProps) : null, !contentHidden &&
|
|
1531
|
-
(activeThreadScope && activeThreadId ? (_jsx(ScopeBadge, { scope: activeThreadScope, currentScope: scope, onDetach: handleDetachActiveThread, otherScopedThreads: otherScopedThreads, activeThreadId: activeThreadId, openTabIds: new Set(openTabIds), onSelectThread: openFromHistory })) : detachConfirmType ? (_jsx(DetachConfirmationBanner, {})) : null), showHistory && (_jsx(HistoryPopover, { threads: threads, openTabIds: new Set(openTabIds), activeThreadId: activeThreadId, currentScope: scope, onSelect: openFromHistory, onClose: () => setShowHistory(false), onSearch: searchThreads })), helpVisible && _jsx(HelpPopover, { onClose: () => setHelpVisible(false) }), [...new Set(
|
|
1548
|
+
(activeThreadScope && activeThreadId ? (_jsx(ScopeBadge, { scope: activeThreadScope, currentScope: scope, onDetach: handleDetachActiveThread, otherScopedThreads: otherScopedThreads, activeThreadId: activeThreadId, openTabIds: new Set(openTabIds), onSelectThread: openFromHistory })) : detachConfirmType ? (_jsx(DetachConfirmationBanner, {})) : null), showHistory && (_jsx(HistoryPopover, { threads: threads, openTabIds: new Set(openTabIds), activeThreadId: activeThreadId, currentScope: scope, onSelect: openFromHistory, onClose: () => setShowHistory(false), onSearch: searchThreads })), helpVisible && _jsx(HelpPopover, { onClose: () => setHelpVisible(false) }), [...new Set(visibleOpenTabIds)]
|
|
1532
1549
|
.filter((tabId) => tabId === activeThreadId || mountedTabsRef.current.has(tabId))
|
|
1533
1550
|
.map((tabId) => {
|
|
1534
1551
|
const modelSelection = resolveThreadModelSelection(tabId);
|