@witqq/agent-sdk 0.8.0 → 0.9.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/{agent-DxY68NZL.d.cts → agent-C6H2CgJA.d.cts} +2 -0
- package/dist/{agent-CW9XbmG_.d.ts → agent-F7oB6eKp.d.ts} +2 -0
- package/dist/backends/claude.cjs.map +1 -1
- package/dist/backends/claude.d.cts +2 -2
- package/dist/backends/claude.d.ts +2 -2
- package/dist/backends/claude.js.map +1 -1
- package/dist/backends/copilot.cjs +8 -15
- package/dist/backends/copilot.cjs.map +1 -1
- package/dist/backends/copilot.d.cts +2 -2
- package/dist/backends/copilot.d.ts +2 -2
- package/dist/backends/copilot.js +8 -15
- package/dist/backends/copilot.js.map +1 -1
- package/dist/backends/mock-llm.cjs +719 -0
- package/dist/backends/mock-llm.cjs.map +1 -0
- package/dist/backends/mock-llm.d.cts +37 -0
- package/dist/backends/mock-llm.d.ts +37 -0
- package/dist/backends/mock-llm.js +717 -0
- package/dist/backends/mock-llm.js.map +1 -0
- package/dist/backends/vercel-ai.cjs +8 -1
- package/dist/backends/vercel-ai.cjs.map +1 -1
- package/dist/backends/vercel-ai.d.cts +2 -2
- package/dist/backends/vercel-ai.d.ts +2 -2
- package/dist/backends/vercel-ai.js +8 -1
- package/dist/backends/vercel-ai.js.map +1 -1
- package/dist/backends-Cno0gZjy.d.cts +114 -0
- package/dist/backends-Cno0gZjy.d.ts +114 -0
- package/dist/chat/accumulator.cjs.map +1 -1
- package/dist/chat/accumulator.d.cts +2 -2
- package/dist/chat/accumulator.d.ts +2 -2
- package/dist/chat/accumulator.js.map +1 -1
- package/dist/chat/backends.cjs +350 -77
- package/dist/chat/backends.cjs.map +1 -1
- package/dist/chat/backends.d.cts +7 -7
- package/dist/chat/backends.d.ts +7 -7
- package/dist/chat/backends.js +349 -78
- package/dist/chat/backends.js.map +1 -1
- package/dist/chat/context.d.cts +2 -2
- package/dist/chat/context.d.ts +2 -2
- package/dist/chat/core.cjs +35 -25
- package/dist/chat/core.cjs.map +1 -1
- package/dist/chat/core.d.cts +15 -5
- package/dist/chat/core.d.ts +15 -5
- package/dist/chat/core.js +35 -26
- package/dist/chat/core.js.map +1 -1
- package/dist/chat/events.d.cts +2 -2
- package/dist/chat/events.d.ts +2 -2
- package/dist/chat/index.cjs +418 -122
- package/dist/chat/index.cjs.map +1 -1
- package/dist/chat/index.d.cts +7 -7
- package/dist/chat/index.d.ts +7 -7
- package/dist/chat/index.js +418 -124
- package/dist/chat/index.js.map +1 -1
- package/dist/chat/react.cjs +216 -12
- package/dist/chat/react.cjs.map +1 -1
- package/dist/chat/react.d.cts +78 -4
- package/dist/chat/react.d.ts +78 -4
- package/dist/chat/react.js +215 -13
- package/dist/chat/react.js.map +1 -1
- package/dist/chat/runtime.cjs +6 -2
- package/dist/chat/runtime.cjs.map +1 -1
- package/dist/chat/runtime.d.cts +2 -2
- package/dist/chat/runtime.d.ts +2 -2
- package/dist/chat/runtime.js +6 -2
- package/dist/chat/runtime.js.map +1 -1
- package/dist/chat/server.cjs +15 -5
- package/dist/chat/server.cjs.map +1 -1
- package/dist/chat/server.d.cts +3 -3
- package/dist/chat/server.d.ts +3 -3
- package/dist/chat/server.js +15 -5
- package/dist/chat/server.js.map +1 -1
- package/dist/chat/sessions.cjs +39 -23
- package/dist/chat/sessions.cjs.map +1 -1
- package/dist/chat/sessions.d.cts +2 -2
- package/dist/chat/sessions.d.ts +2 -2
- package/dist/chat/sessions.js +40 -24
- package/dist/chat/sessions.js.map +1 -1
- package/dist/chat/sqlite.cjs +95 -0
- package/dist/chat/sqlite.cjs.map +1 -1
- package/dist/chat/sqlite.d.cts +39 -3
- package/dist/chat/sqlite.d.ts +39 -3
- package/dist/chat/sqlite.js +93 -1
- package/dist/chat/sqlite.js.map +1 -1
- package/dist/chat/state.d.cts +2 -2
- package/dist/chat/state.d.ts +2 -2
- package/dist/chat/storage.cjs +39 -23
- package/dist/chat/storage.cjs.map +1 -1
- package/dist/chat/storage.d.cts +7 -3
- package/dist/chat/storage.d.ts +7 -3
- package/dist/chat/storage.js +40 -24
- package/dist/chat/storage.js.map +1 -1
- package/dist/{in-process-transport-C1JnJGVR.d.ts → in-process-transport-7EIit9Xk.d.ts} +51 -17
- package/dist/{in-process-transport-C7DSqPyX.d.cts → in-process-transport-Ct9YcX8I.d.cts} +51 -17
- package/dist/index.cjs +14 -14
- package/dist/index.cjs.map +1 -1
- package/dist/index.d.cts +4 -2
- package/dist/index.d.ts +4 -2
- package/dist/index.js +13 -13
- package/dist/index.js.map +1 -1
- package/dist/testing.cjs +724 -0
- package/dist/testing.cjs.map +1 -1
- package/dist/testing.d.cts +14 -2
- package/dist/testing.d.ts +14 -2
- package/dist/testing.js +724 -0
- package/dist/testing.js.map +1 -1
- package/dist/{transport-Cdh3M0tS.d.cts → transport-DLWCN18G.d.cts} +1 -1
- package/dist/{transport-Ciap4PWK.d.ts → transport-DsuS-GeM.d.ts} +1 -1
- package/dist/{types-ajANVzf7.d.ts → types-DgtI1hzh.d.ts} +2 -1
- package/dist/{types-DRgd_9R7.d.cts → types-DkSXALKg.d.cts} +2 -1
- package/package.json +18 -7
- package/LICENSE +0 -21
- package/README.md +0 -1054
- package/dist/backends-BSrsBYFn.d.cts +0 -39
- package/dist/backends-BSrsBYFn.d.ts +0 -39
package/dist/chat/react.cjs
CHANGED
|
@@ -283,6 +283,9 @@ function useChat(options = {}) {
|
|
|
283
283
|
}
|
|
284
284
|
const agentEvent = chatEventToAgentEvent(event);
|
|
285
285
|
if (agentEvent) {
|
|
286
|
+
if (agentEvent.type === "error" && !agentEvent.recoverable) {
|
|
287
|
+
throw new Error(agentEvent.error || "Stream error");
|
|
288
|
+
}
|
|
286
289
|
accumulator.apply(agentEvent);
|
|
287
290
|
hasEvents = true;
|
|
288
291
|
const snapshot = accumulator.snapshot();
|
|
@@ -801,25 +804,98 @@ function useThreadSlots() {
|
|
|
801
804
|
function useOptionalThreadSlots() {
|
|
802
805
|
return react.useContext(ThreadSlotsContext);
|
|
803
806
|
}
|
|
807
|
+
function useVirtualMessages(items, options = {}) {
|
|
808
|
+
const { estimatedItemHeight = 80, overscan = 3 } = options;
|
|
809
|
+
const [scrollTop, setScrollTop] = react.useState(0);
|
|
810
|
+
const [containerHeight, setContainerHeight] = react.useState(0);
|
|
811
|
+
const containerElRef = react.useRef(null);
|
|
812
|
+
const containerRef = react.useCallback((el) => {
|
|
813
|
+
containerElRef.current = el;
|
|
814
|
+
if (el) {
|
|
815
|
+
setContainerHeight(el.clientHeight);
|
|
816
|
+
}
|
|
817
|
+
}, []);
|
|
818
|
+
react.useEffect(() => {
|
|
819
|
+
const el = containerElRef.current;
|
|
820
|
+
if (!el || typeof ResizeObserver === "undefined") return;
|
|
821
|
+
const ro = new ResizeObserver(() => {
|
|
822
|
+
setContainerHeight(el.clientHeight);
|
|
823
|
+
});
|
|
824
|
+
ro.observe(el);
|
|
825
|
+
return () => ro.disconnect();
|
|
826
|
+
}, []);
|
|
827
|
+
const onScroll = react.useCallback(
|
|
828
|
+
(event) => {
|
|
829
|
+
setScrollTop(event.currentTarget.scrollTop);
|
|
830
|
+
setContainerHeight(event.currentTarget.clientHeight);
|
|
831
|
+
},
|
|
832
|
+
[]
|
|
833
|
+
);
|
|
834
|
+
const result = react.useMemo(() => {
|
|
835
|
+
const totalCount = items.length;
|
|
836
|
+
const totalHeight = totalCount * estimatedItemHeight;
|
|
837
|
+
if (totalCount === 0 || containerHeight === 0) {
|
|
838
|
+
return {
|
|
839
|
+
visibleItems: items.slice(),
|
|
840
|
+
startIndex: 0,
|
|
841
|
+
endIndex: totalCount,
|
|
842
|
+
topSpacerHeight: 0,
|
|
843
|
+
bottomSpacerHeight: 0,
|
|
844
|
+
totalHeight
|
|
845
|
+
};
|
|
846
|
+
}
|
|
847
|
+
const rawStart = Math.floor(scrollTop / estimatedItemHeight) - overscan;
|
|
848
|
+
const startIndex = Math.max(0, rawStart);
|
|
849
|
+
const visibleCount = Math.ceil(containerHeight / estimatedItemHeight);
|
|
850
|
+
const rawEnd = Math.floor(scrollTop / estimatedItemHeight) + visibleCount + overscan;
|
|
851
|
+
const endIndex = Math.min(totalCount, rawEnd);
|
|
852
|
+
return {
|
|
853
|
+
visibleItems: items.slice(startIndex, endIndex),
|
|
854
|
+
startIndex,
|
|
855
|
+
endIndex,
|
|
856
|
+
topSpacerHeight: startIndex * estimatedItemHeight,
|
|
857
|
+
bottomSpacerHeight: (totalCount - endIndex) * estimatedItemHeight,
|
|
858
|
+
totalHeight
|
|
859
|
+
};
|
|
860
|
+
}, [items, scrollTop, containerHeight, estimatedItemHeight, overscan]);
|
|
861
|
+
return {
|
|
862
|
+
...result,
|
|
863
|
+
onScroll,
|
|
864
|
+
containerRef
|
|
865
|
+
};
|
|
866
|
+
}
|
|
804
867
|
|
|
805
868
|
// src/chat/react/Thread.ts
|
|
806
869
|
function Thread({
|
|
807
870
|
messages,
|
|
808
871
|
isGenerating,
|
|
809
872
|
autoScroll = true,
|
|
810
|
-
className
|
|
873
|
+
className,
|
|
874
|
+
virtualize
|
|
811
875
|
}) {
|
|
812
876
|
const sentinelRef = react.useRef(null);
|
|
813
877
|
const containerRef = react.useRef(null);
|
|
814
878
|
const [userScrolledUp, setUserScrolledUp] = react.useState(false);
|
|
815
879
|
const isScrollingProgrammatically = react.useRef(false);
|
|
816
|
-
const
|
|
817
|
-
|
|
818
|
-
|
|
819
|
-
|
|
820
|
-
|
|
821
|
-
|
|
822
|
-
|
|
880
|
+
const isVirtualized = virtualize != null && virtualize !== false;
|
|
881
|
+
const virtualizeOpts = virtualize === true ? {} : !isVirtualized ? false : virtualize;
|
|
882
|
+
const virtual = useVirtualMessages(
|
|
883
|
+
messages,
|
|
884
|
+
virtualizeOpts || void 0
|
|
885
|
+
);
|
|
886
|
+
const handleScroll = react.useCallback(
|
|
887
|
+
(e) => {
|
|
888
|
+
if (isVirtualized) {
|
|
889
|
+
virtual.onScroll(e);
|
|
890
|
+
}
|
|
891
|
+
if (isScrollingProgrammatically.current) return;
|
|
892
|
+
const el = containerRef.current;
|
|
893
|
+
if (!el) return;
|
|
894
|
+
const atBottom = el.scrollHeight - el.scrollTop - el.clientHeight < 1;
|
|
895
|
+
setUserScrolledUp(!atBottom);
|
|
896
|
+
},
|
|
897
|
+
[isVirtualized, virtual.onScroll]
|
|
898
|
+
);
|
|
823
899
|
const scrollToBottom = react.useCallback(() => {
|
|
824
900
|
isScrollingProgrammatically.current = true;
|
|
825
901
|
sentinelRef.current?.scrollIntoView({ behavior: "smooth" });
|
|
@@ -833,11 +909,23 @@ function Thread({
|
|
|
833
909
|
sentinelRef.current?.scrollIntoView({ behavior: "smooth" });
|
|
834
910
|
}, [messages, autoScroll, userScrolledUp]);
|
|
835
911
|
const slots = useOptionalThreadSlots();
|
|
912
|
+
const mergedRef = react.useCallback(
|
|
913
|
+
(el) => {
|
|
914
|
+
containerRef.current = el;
|
|
915
|
+
if (isVirtualized) {
|
|
916
|
+
virtual.containerRef(el);
|
|
917
|
+
}
|
|
918
|
+
},
|
|
919
|
+
[isVirtualized, virtual.containerRef]
|
|
920
|
+
);
|
|
836
921
|
const attrs = { "data-thread": "true", className };
|
|
837
922
|
if (isGenerating) {
|
|
838
923
|
attrs["data-thread-loading"] = "true";
|
|
839
924
|
}
|
|
840
|
-
|
|
925
|
+
if (virtualizeOpts) {
|
|
926
|
+
attrs["data-thread-virtualized"] = "true";
|
|
927
|
+
}
|
|
928
|
+
attrs.ref = mergedRef;
|
|
841
929
|
attrs.onScroll = handleScroll;
|
|
842
930
|
const children = [];
|
|
843
931
|
if (messages.length === 0 && !isGenerating) {
|
|
@@ -849,9 +937,21 @@ function Thread({
|
|
|
849
937
|
)
|
|
850
938
|
);
|
|
851
939
|
}
|
|
852
|
-
|
|
853
|
-
|
|
854
|
-
|
|
940
|
+
const renderMessages = virtualizeOpts ? virtual.visibleItems : messages;
|
|
941
|
+
const startOffset = virtualizeOpts ? virtual.startIndex : 0;
|
|
942
|
+
if (virtualizeOpts && virtual.topSpacerHeight > 0) {
|
|
943
|
+
children.push(
|
|
944
|
+
react.createElement("div", {
|
|
945
|
+
key: "__virtual-top",
|
|
946
|
+
"data-virtual-spacer": "top",
|
|
947
|
+
style: { height: virtual.topSpacerHeight }
|
|
948
|
+
})
|
|
949
|
+
);
|
|
950
|
+
}
|
|
951
|
+
for (let i = 0; i < renderMessages.length; i++) {
|
|
952
|
+
const msg = renderMessages[i];
|
|
953
|
+
const originalIndex = startOffset + i;
|
|
954
|
+
const content = slots?.renderMessage ? slots.renderMessage(msg, originalIndex) : react.createElement(Message, {
|
|
855
955
|
key: msg.id,
|
|
856
956
|
message: msg,
|
|
857
957
|
renderToolCall: slots?.renderToolCall,
|
|
@@ -865,6 +965,15 @@ function Thread({
|
|
|
865
965
|
)
|
|
866
966
|
);
|
|
867
967
|
}
|
|
968
|
+
if (virtualizeOpts && virtual.bottomSpacerHeight > 0) {
|
|
969
|
+
children.push(
|
|
970
|
+
react.createElement("div", {
|
|
971
|
+
key: "__virtual-bottom",
|
|
972
|
+
"data-virtual-spacer": "bottom",
|
|
973
|
+
style: { height: virtual.bottomSpacerHeight }
|
|
974
|
+
})
|
|
975
|
+
);
|
|
976
|
+
}
|
|
868
977
|
if (isGenerating) {
|
|
869
978
|
children.push(
|
|
870
979
|
react.createElement(
|
|
@@ -3543,6 +3652,99 @@ function ChatUI({ runtime, ...rest }) {
|
|
|
3543
3652
|
children: react.createElement(ChatUIInner, rest)
|
|
3544
3653
|
});
|
|
3545
3654
|
}
|
|
3655
|
+
function PermissionDialog({
|
|
3656
|
+
requests,
|
|
3657
|
+
onApprove,
|
|
3658
|
+
onDeny,
|
|
3659
|
+
onApproveAll,
|
|
3660
|
+
onDenyAll,
|
|
3661
|
+
renderArgs,
|
|
3662
|
+
className
|
|
3663
|
+
}) {
|
|
3664
|
+
if (requests.length === 0) return null;
|
|
3665
|
+
const items = requests.map(
|
|
3666
|
+
(req) => react.createElement(
|
|
3667
|
+
"div",
|
|
3668
|
+
{
|
|
3669
|
+
key: req.toolCallId,
|
|
3670
|
+
"data-permission-request": "true",
|
|
3671
|
+
"data-tool-name": req.toolName
|
|
3672
|
+
},
|
|
3673
|
+
// Tool name
|
|
3674
|
+
react.createElement(
|
|
3675
|
+
"div",
|
|
3676
|
+
{ "data-permission-tool-name": "true" },
|
|
3677
|
+
req.toolName
|
|
3678
|
+
),
|
|
3679
|
+
// Arguments display
|
|
3680
|
+
react.createElement(
|
|
3681
|
+
"div",
|
|
3682
|
+
{ "data-permission-tool-args": "true" },
|
|
3683
|
+
renderArgs ? renderArgs(req.toolArgs, req.toolName) : react.createElement("pre", null, JSON.stringify(req.toolArgs, null, 2))
|
|
3684
|
+
),
|
|
3685
|
+
// Action buttons
|
|
3686
|
+
react.createElement(
|
|
3687
|
+
"div",
|
|
3688
|
+
{ "data-permission-actions": "true" },
|
|
3689
|
+
react.createElement(
|
|
3690
|
+
"button",
|
|
3691
|
+
{
|
|
3692
|
+
type: "button",
|
|
3693
|
+
"data-action": "approve",
|
|
3694
|
+
onClick: () => onApprove(req.toolCallId),
|
|
3695
|
+
"aria-label": `Approve ${req.toolName}`
|
|
3696
|
+
},
|
|
3697
|
+
"Allow"
|
|
3698
|
+
),
|
|
3699
|
+
react.createElement(
|
|
3700
|
+
"button",
|
|
3701
|
+
{
|
|
3702
|
+
type: "button",
|
|
3703
|
+
"data-action": "deny",
|
|
3704
|
+
onClick: () => onDeny(req.toolCallId),
|
|
3705
|
+
"aria-label": `Deny ${req.toolName}`
|
|
3706
|
+
},
|
|
3707
|
+
"Deny"
|
|
3708
|
+
)
|
|
3709
|
+
)
|
|
3710
|
+
)
|
|
3711
|
+
);
|
|
3712
|
+
const bulkActions = requests.length > 1 && (onApproveAll || onDenyAll) ? react.createElement(
|
|
3713
|
+
"div",
|
|
3714
|
+
{ "data-permission-bulk-actions": "true" },
|
|
3715
|
+
onApproveAll ? react.createElement(
|
|
3716
|
+
"button",
|
|
3717
|
+
{
|
|
3718
|
+
type: "button",
|
|
3719
|
+
"data-action": "approve-all",
|
|
3720
|
+
onClick: onApproveAll,
|
|
3721
|
+
"aria-label": "Approve all tool calls"
|
|
3722
|
+
},
|
|
3723
|
+
"Allow All"
|
|
3724
|
+
) : null,
|
|
3725
|
+
onDenyAll ? react.createElement(
|
|
3726
|
+
"button",
|
|
3727
|
+
{
|
|
3728
|
+
type: "button",
|
|
3729
|
+
"data-action": "deny-all",
|
|
3730
|
+
onClick: onDenyAll,
|
|
3731
|
+
"aria-label": "Deny all tool calls"
|
|
3732
|
+
},
|
|
3733
|
+
"Deny All"
|
|
3734
|
+
) : null
|
|
3735
|
+
) : null;
|
|
3736
|
+
return react.createElement(
|
|
3737
|
+
"div",
|
|
3738
|
+
{
|
|
3739
|
+
"data-permission-dialog": "true",
|
|
3740
|
+
role: "dialog",
|
|
3741
|
+
"aria-label": "Tool permission requests",
|
|
3742
|
+
className
|
|
3743
|
+
},
|
|
3744
|
+
...items,
|
|
3745
|
+
bulkActions
|
|
3746
|
+
);
|
|
3747
|
+
}
|
|
3546
3748
|
|
|
3547
3749
|
exports.BackendSelector = BackendSelector;
|
|
3548
3750
|
exports.ChatHeader = ChatHeader;
|
|
@@ -3558,6 +3760,7 @@ exports.CopilotAuthForm = CopilotAuthForm;
|
|
|
3558
3760
|
exports.MarkdownRenderer = MarkdownRenderer;
|
|
3559
3761
|
exports.Message = Message;
|
|
3560
3762
|
exports.ModelSelector = ModelSelector;
|
|
3763
|
+
exports.PermissionDialog = PermissionDialog;
|
|
3561
3764
|
exports.ProviderModelSelector = ProviderModelSelector;
|
|
3562
3765
|
exports.ProviderSelector = ProviderSelector;
|
|
3563
3766
|
exports.ProviderSettings = ProviderSettings;
|
|
@@ -3585,5 +3788,6 @@ exports.useSSE = useSSE;
|
|
|
3585
3788
|
exports.useSessions = useSessions;
|
|
3586
3789
|
exports.useThreadSlots = useThreadSlots;
|
|
3587
3790
|
exports.useToolApproval = useToolApproval;
|
|
3791
|
+
exports.useVirtualMessages = useVirtualMessages;
|
|
3588
3792
|
//# sourceMappingURL=react.cjs.map
|
|
3589
3793
|
//# sourceMappingURL=react.cjs.map
|