@kafca/agentdock 0.1.21 → 0.1.22
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/README.md +6 -0
- package/dist/renderer/assets/{Badge-BRmQIqbd.js → Badge-B_rgzxYO.js} +1 -1
- package/dist/renderer/assets/{Chat-D94ODABB.js → Chat-CYtp6m7T.js} +1 -1
- package/dist/renderer/assets/{ChatMarkdown-DqW7OUvV.js → ChatMarkdown-DOBMwa9d.js} +1 -1
- package/dist/renderer/assets/{Config-9lgzpTCp.js → Config-DppMSPHF.js} +2 -2
- package/dist/renderer/assets/CronList-BDtB1SuA.js +1 -0
- package/dist/renderer/assets/{Dashboard-COISXbQy.js → Dashboard-iFlRnd7Y.js} +2 -2
- package/dist/renderer/assets/{EmptyState-w5-I9zg7.js → EmptyState-bKDt_T88.js} +1 -1
- package/dist/renderer/assets/{KnowledgeDetail-DVxwrTLw.js → KnowledgeDetail-CKPhKPIg.js} +2 -2
- package/dist/renderer/assets/{KnowledgeHome-BKkubcwi.js → KnowledgeHome-CFeJre6i.js} +3 -3
- package/dist/renderer/assets/Logs-CyxSVOFK.js +1 -0
- package/dist/renderer/assets/{Modal-Ceu_MP2e.js → Modal-CxPnk1Ey.js} +1 -1
- package/dist/renderer/assets/{Page-CpSczAz8.js → Page-kU9vubzj.js} +1 -1
- package/dist/renderer/assets/{ProjectDetail-FJ_bNXLF.js → ProjectDetail-D9FY9NWZ.js} +1 -1
- package/dist/renderer/assets/{ProjectList-DZKL4K9C.js → ProjectList-DIwr2TXg.js} +1 -1
- package/dist/renderer/assets/{Select-BHQk6qCU.js → Select-BaWoz5Dn.js} +2 -7
- package/dist/renderer/assets/SessionChat-Cm9CW8Zx.js +1 -0
- package/dist/renderer/assets/SessionList-UPnWlXXO.js +1 -0
- package/dist/renderer/assets/{ThreadChat-D3s4GXGh.js → ThreadChat-YvVsACW3.js} +7 -7
- package/dist/renderer/assets/{Workspace-B7looTVo.js → Workspace-ST7V8u6T.js} +2 -2
- package/dist/renderer/assets/{arrow-left-Dtal-eOi.js → arrow-left-BmZAVGV7.js} +1 -1
- package/dist/renderer/assets/{book-open-q814R_Ov.js → book-open-DZ3GXFgI.js} +1 -1
- package/dist/renderer/assets/{check-DjfCdLvw.js → check-CeVSvDCv.js} +1 -1
- package/dist/renderer/assets/chevron-down-yryuMoQ-.js +6 -0
- package/dist/renderer/assets/{circle-vfhmyE8v.js → circle-eASsFISH.js} +1 -1
- package/dist/renderer/assets/desktop-Che1cbpE.js +4 -0
- package/dist/renderer/assets/desktop-DkrP_s-b.js +1 -0
- package/dist/renderer/assets/{funnel-CUQibo1I.js → funnel-pwAe2Ixp.js} +1 -1
- package/dist/renderer/assets/{heart-DG9_b8P1.js → heart-B2Sp-bCm.js} +1 -1
- package/dist/renderer/assets/{index-Bn8ane6_.js → index-BC3MWbS1.js} +3 -3
- package/dist/renderer/assets/{index-Ds0IN5rP.js → index-Cse2Br64.js} +1 -1
- package/dist/renderer/assets/{index-3CzgyQYB.css → index-DFiJR0vv.css} +1 -1
- package/dist/renderer/assets/{pencil-Dij0LlRY.js → pencil-BfEunUF3.js} +1 -1
- package/dist/renderer/assets/{play-CPFGjIyJ.js → play-Dcs9Lj_Z.js} +1 -1
- package/dist/renderer/assets/{plug-DH3RKQyn.js → plug-B_YschQe.js} +1 -1
- package/dist/renderer/assets/{plus-afkK9_Y8.js → plus-Pqo-cXHQ.js} +1 -1
- package/dist/renderer/assets/projects-BCj0k_Gy.js +1 -0
- package/dist/renderer/assets/{save-B-cKgWcy.js → save-BKM5yi1A.js} +1 -1
- package/dist/renderer/assets/{search-DR6PeYkt.js → search-BU42h10M.js} +1 -1
- package/dist/renderer/assets/{server-BM6KOB5a.js → server-DA5t3Rtr.js} +1 -1
- package/dist/renderer/assets/{session-utils-BDuThM0a.js → session-utils-Cr9VhNSq.js} +1 -1
- package/dist/renderer/assets/{sessions-C1yKps4T.js → sessions-bvV8ZMfX.js} +1 -1
- package/dist/renderer/assets/{shield-check-BFjMG-r2.js → shield-check-BeOJKur_.js} +1 -1
- package/dist/renderer/assets/{trash-2-CW1heMCf.js → trash-2-CQ7HKO3q.js} +1 -1
- package/dist/renderer/assets/{user-r_2sHG7m.js → user-CtFjY9SV.js} +1 -1
- package/dist/renderer/assets/{wifi-off-VMUokMpE.js → wifi-off-Ci5m0ysf.js} +1 -1
- package/dist/renderer/index.html +2 -2
- package/dist-electron/electron/local-core-refactor.test.js +307 -3
- package/dist-electron/services/local-ai-core/src/{gateway → channel/lark}/local-core-lark-gateway.js +249 -8
- package/dist-electron/services/local-ai-core/src/channel/shared/file-utils.js +33 -0
- package/dist-electron/services/local-ai-core/src/{gateway → channel/weixin}/local-core-weixin-gateway.js +188 -1
- package/dist-electron/services/local-ai-core/src/cli/lac.js +41 -1
- package/dist-electron/services/local-ai-core/src/plugins/builtin/channel-lark-plugin.js +1 -1
- package/dist-electron/services/local-ai-core/src/plugins/builtin/channel-weixin-plugin.js +1 -1
- package/dist-electron/services/local-ai-core/src/runtime/local-core-controller.js +41 -0
- package/dist-electron/services/local-ai-core/src/runtime/server.js +10 -0
- package/dist-electron/shared/desktop.js +14 -1
- package/package.json +1 -1
- package/dist/renderer/assets/CronList-BYZ-x_bp.js +0 -1
- package/dist/renderer/assets/Logs-D7HxZ8Nb.js +0 -1
- package/dist/renderer/assets/SessionChat-DpgSXF3m.js +0 -1
- package/dist/renderer/assets/SessionList-CU6drQ4N.js +0 -1
- package/dist/renderer/assets/desktop-BPIxWbkM.js +0 -1
- package/dist/renderer/assets/desktop-DZHC4PDB.js +0 -3
- package/dist/renderer/assets/projects-DTDS9SnT.js +0 -1
|
@@ -1 +1 @@
|
|
|
1
|
-
import{
|
|
1
|
+
import{z as o}from"./index-BC3MWbS1.js";const i=s=>o.get(`/projects/${s}/sessions`),c=(s,e,t)=>o.get(`/projects/${s}/sessions/${e}`,{history_limit:String(t)}),r=(s,e,t)=>o.patch(`/projects/${s}/sessions/${e}`,t),a=(s,e)=>o.delete(`/projects/${s}/sessions/${e}`),p=(s,e)=>o.post(`/projects/${s}/sessions/switch`,e),$=(s,e)=>o.post(`/projects/${s}/send`,e);export{$ as a,a as d,c as g,i as l,r,p as s};
|
package/dist/renderer/index.html
CHANGED
|
@@ -5,8 +5,8 @@
|
|
|
5
5
|
<link rel="icon" type="image/svg+xml" href="./favicon.svg" />
|
|
6
6
|
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
|
|
7
7
|
<title>AgentDock</title>
|
|
8
|
-
<script type="module" crossorigin src="./assets/index-
|
|
9
|
-
<link rel="stylesheet" crossorigin href="./assets/index-
|
|
8
|
+
<script type="module" crossorigin src="./assets/index-BC3MWbS1.js"></script>
|
|
9
|
+
<link rel="stylesheet" crossorigin href="./assets/index-DFiJR0vv.css">
|
|
10
10
|
</head>
|
|
11
11
|
<body class="bg-[#f5f5f7] dark:bg-[#151516]">
|
|
12
12
|
<div id="root"></div>
|
|
@@ -14,8 +14,8 @@ const scheduled_conversation_executor_js_1 = require("../services/local-ai-core/
|
|
|
14
14
|
const scheduler_run_lifecycle_js_1 = require("../services/local-ai-core/src/scheduler/scheduler-run-lifecycle.js");
|
|
15
15
|
const lark_execution_policies_js_1 = require("../services/local-ai-core/src/scheduler/lark-execution-policies.js");
|
|
16
16
|
const local_schedule_adapter_js_1 = require("../services/local-ai-core/src/scheduler/local-schedule-adapter.js");
|
|
17
|
-
const local_core_weixin_gateway_js_1 = require("../services/local-ai-core/src/
|
|
18
|
-
const local_core_lark_gateway_js_1 = require("../services/local-ai-core/src/
|
|
17
|
+
const local_core_weixin_gateway_js_1 = require("../services/local-ai-core/src/channel/weixin/local-core-weixin-gateway.js");
|
|
18
|
+
const local_core_lark_gateway_js_1 = require("../services/local-ai-core/src/channel/lark/local-core-lark-gateway.js");
|
|
19
19
|
const local_core_acp_turn_coordinator_js_1 = require("../services/local-ai-core/src/acp/local-core-acp-turn-coordinator.js");
|
|
20
20
|
const local_core_acp_store_js_1 = require("../services/local-ai-core/src/acp/local-core-acp-store.js");
|
|
21
21
|
(0, node_test_1.default)('ACP tool call update is emitted with its pending tool name', () => {
|
|
@@ -669,6 +669,7 @@ const local_core_acp_store_js_1 = require("../services/local-ai-core/src/acp/loc
|
|
|
669
669
|
});
|
|
670
670
|
(0, node_test_1.default)('lark permission requests render as clickable card buttons', async () => {
|
|
671
671
|
const createdCards = [];
|
|
672
|
+
const patchedCards = [];
|
|
672
673
|
const threadActions = [];
|
|
673
674
|
const client = {
|
|
674
675
|
im: {
|
|
@@ -677,7 +678,12 @@ const local_core_acp_store_js_1 = require("../services/local-ai-core/src/acp/loc
|
|
|
677
678
|
createdCards.push(JSON.parse(String(request.data.content || '{}')));
|
|
678
679
|
return { data: { message_id: 'permission-msg-1' } };
|
|
679
680
|
},
|
|
680
|
-
patch: async () => {
|
|
681
|
+
patch: async (request) => {
|
|
682
|
+
patchedCards.push({
|
|
683
|
+
messageId: request.path?.message_id,
|
|
684
|
+
card: JSON.parse(String(request.data.content || '{}')),
|
|
685
|
+
});
|
|
686
|
+
},
|
|
681
687
|
},
|
|
682
688
|
},
|
|
683
689
|
};
|
|
@@ -757,13 +763,134 @@ const local_core_acp_store_js_1 = require("../services/local-ai-core/src/acp/loc
|
|
|
757
763
|
action: 'permission_response',
|
|
758
764
|
response: 'allow all',
|
|
759
765
|
thread_id: 'thread-1',
|
|
766
|
+
session_key: 'session:thread-1',
|
|
760
767
|
},
|
|
761
768
|
},
|
|
769
|
+
context: {
|
|
770
|
+
open_message_id: 'permission-msg-1',
|
|
771
|
+
},
|
|
762
772
|
},
|
|
763
773
|
});
|
|
764
774
|
strict_1.default.deepEqual(threadActions, [
|
|
765
775
|
{ threadId: 'thread-1', action: 'allow all' },
|
|
766
776
|
]);
|
|
777
|
+
strict_1.default.equal(patchedCards.length, 1);
|
|
778
|
+
strict_1.default.equal(patchedCards[0]?.messageId, 'permission-msg-1');
|
|
779
|
+
strict_1.default.match(patchedCards[0]?.card?.elements?.[0]?.content || '', /工具确认已处理/);
|
|
780
|
+
strict_1.default.equal(patchedCards[0]?.card?.elements?.some((element) => element.tag === 'action'), false);
|
|
781
|
+
});
|
|
782
|
+
(0, node_test_1.default)('lark channel folds tool result output in progress cards', async () => {
|
|
783
|
+
const createdCards = [];
|
|
784
|
+
const patchedCards = [];
|
|
785
|
+
const client = {
|
|
786
|
+
im: {
|
|
787
|
+
message: {
|
|
788
|
+
create: async (request) => {
|
|
789
|
+
createdCards.push(JSON.parse(String(request.data.content || '{}')));
|
|
790
|
+
return { data: { message_id: 'tool-msg-1' } };
|
|
791
|
+
},
|
|
792
|
+
patch: async (request) => {
|
|
793
|
+
patchedCards.push(JSON.parse(String(request.data.content || '{}')));
|
|
794
|
+
},
|
|
795
|
+
},
|
|
796
|
+
},
|
|
797
|
+
};
|
|
798
|
+
const gateway = new local_core_lark_gateway_js_1.LocalCoreLarkGateway({
|
|
799
|
+
store: {
|
|
800
|
+
getPlatformThreadBinding: () => ({
|
|
801
|
+
workspace_id: 'default',
|
|
802
|
+
platform: 'lark',
|
|
803
|
+
chat_id: 'chat-1',
|
|
804
|
+
platform_user_id: 'user-1',
|
|
805
|
+
thread_id: 'thread-1',
|
|
806
|
+
last_platform_message_id: null,
|
|
807
|
+
}),
|
|
808
|
+
},
|
|
809
|
+
readConfig: async () => null,
|
|
810
|
+
getWorkspaceRouter: () => ({}),
|
|
811
|
+
eventBus: { emit: () => { }, on: () => () => { } },
|
|
812
|
+
});
|
|
813
|
+
const internals = gateway;
|
|
814
|
+
internals.runtime.set('default', {
|
|
815
|
+
workspaceId: 'default',
|
|
816
|
+
enabled: true,
|
|
817
|
+
status: 'running',
|
|
818
|
+
connected: true,
|
|
819
|
+
appId: 'app-1',
|
|
820
|
+
client,
|
|
821
|
+
});
|
|
822
|
+
internals.threadRouting.set('session:thread-1', {
|
|
823
|
+
workspaceId: 'default',
|
|
824
|
+
platformUserId: 'user-1',
|
|
825
|
+
chatId: 'chat-1',
|
|
826
|
+
threadId: 'thread-1',
|
|
827
|
+
});
|
|
828
|
+
await gateway.onBridgeEvent({
|
|
829
|
+
type: 'reply',
|
|
830
|
+
sessionKey: 'session:thread-1',
|
|
831
|
+
replyCtx: 'run-1',
|
|
832
|
+
messageId: 'tool-1',
|
|
833
|
+
content: '🔧 Terminal: ls - completed - secret terminal output',
|
|
834
|
+
});
|
|
835
|
+
const text = createdCards[0]?.elements?.[0]?.content || patchedCards[0]?.elements?.[0]?.content || '';
|
|
836
|
+
strict_1.default.match(text, /Terminal: ls - completed/);
|
|
837
|
+
strict_1.default.doesNotMatch(text, /secret terminal output/);
|
|
838
|
+
});
|
|
839
|
+
(0, node_test_1.default)('lark card action message id can be extracted from full callback payload', async () => {
|
|
840
|
+
const patchedCards = [];
|
|
841
|
+
const threadActions = [];
|
|
842
|
+
const client = {
|
|
843
|
+
im: {
|
|
844
|
+
message: {
|
|
845
|
+
patch: async (request) => {
|
|
846
|
+
patchedCards.push({
|
|
847
|
+
messageId: request.path?.message_id,
|
|
848
|
+
card: JSON.parse(String(request.data.content || '{}')),
|
|
849
|
+
});
|
|
850
|
+
},
|
|
851
|
+
},
|
|
852
|
+
},
|
|
853
|
+
};
|
|
854
|
+
const gateway = new local_core_lark_gateway_js_1.LocalCoreLarkGateway({
|
|
855
|
+
store: {},
|
|
856
|
+
readConfig: async () => null,
|
|
857
|
+
getWorkspaceRouter: () => ({
|
|
858
|
+
sendThreadAction: async (threadId, action) => {
|
|
859
|
+
threadActions.push({ threadId, action });
|
|
860
|
+
return { runId: 'run-1' };
|
|
861
|
+
},
|
|
862
|
+
}),
|
|
863
|
+
eventBus: { emit: () => { }, on: () => () => { } },
|
|
864
|
+
});
|
|
865
|
+
const internals = gateway;
|
|
866
|
+
internals.runtime.set('default', {
|
|
867
|
+
workspaceId: 'default',
|
|
868
|
+
enabled: true,
|
|
869
|
+
status: 'running',
|
|
870
|
+
connected: true,
|
|
871
|
+
appId: 'app-1',
|
|
872
|
+
client,
|
|
873
|
+
});
|
|
874
|
+
await internals.handleCardActionEvent('default', {
|
|
875
|
+
schema: '2.0',
|
|
876
|
+
event: {
|
|
877
|
+
action: {
|
|
878
|
+
value: {
|
|
879
|
+
action: 'permission_response',
|
|
880
|
+
response: 'allow',
|
|
881
|
+
thread_id: 'thread-1',
|
|
882
|
+
},
|
|
883
|
+
},
|
|
884
|
+
},
|
|
885
|
+
event_context: {
|
|
886
|
+
open_message_id: 'permission-msg-nested',
|
|
887
|
+
},
|
|
888
|
+
});
|
|
889
|
+
strict_1.default.deepEqual(threadActions, [
|
|
890
|
+
{ threadId: 'thread-1', action: 'allow' },
|
|
891
|
+
]);
|
|
892
|
+
strict_1.default.equal(patchedCards[0]?.messageId, 'permission-msg-nested');
|
|
893
|
+
strict_1.default.equal(patchedCards[0]?.card?.elements?.some((element) => element.tag === 'action'), false);
|
|
767
894
|
});
|
|
768
895
|
(0, node_test_1.default)('lark permission requests fall back to text commands when card actions are disabled', async () => {
|
|
769
896
|
const createdCards = [];
|
|
@@ -917,6 +1044,183 @@ const local_core_acp_store_js_1 = require("../services/local-ai-core/src/acp/loc
|
|
|
917
1044
|
strict_1.default.equal(sentMessages[0]?.content?.contentParts?.[1]?.mimeType, 'image/png');
|
|
918
1045
|
strict_1.default.equal(sentMessages[0]?.content?.contentParts?.[1]?.data, pngBytes.toString('base64'));
|
|
919
1046
|
});
|
|
1047
|
+
(0, node_test_1.default)('lark channel can upload and send a local file', async () => {
|
|
1048
|
+
const tempDir = (0, node_fs_1.mkdtempSync)((0, node_path_1.join)((0, node_os_1.tmpdir)(), 'lark-file-send-'));
|
|
1049
|
+
try {
|
|
1050
|
+
const filePath = (0, node_path_1.join)(tempDir, 'report.pdf');
|
|
1051
|
+
(0, node_fs_1.writeFileSync)(filePath, 'pdf content');
|
|
1052
|
+
const uploads = [];
|
|
1053
|
+
const messages = [];
|
|
1054
|
+
const client = {
|
|
1055
|
+
im: {
|
|
1056
|
+
file: {
|
|
1057
|
+
create: async (request) => {
|
|
1058
|
+
uploads.push(request);
|
|
1059
|
+
await new Promise((resolve, reject) => {
|
|
1060
|
+
request.data.file.on('data', () => { });
|
|
1061
|
+
request.data.file.on('error', reject);
|
|
1062
|
+
request.data.file.on('end', resolve);
|
|
1063
|
+
});
|
|
1064
|
+
return { file_key: 'file-key-1' };
|
|
1065
|
+
},
|
|
1066
|
+
},
|
|
1067
|
+
message: {
|
|
1068
|
+
create: async (request) => {
|
|
1069
|
+
messages.push(request);
|
|
1070
|
+
return { data: { message_id: 'msg-file-1' } };
|
|
1071
|
+
},
|
|
1072
|
+
},
|
|
1073
|
+
},
|
|
1074
|
+
};
|
|
1075
|
+
const gateway = new local_core_lark_gateway_js_1.LocalCoreLarkGateway({
|
|
1076
|
+
store: {},
|
|
1077
|
+
readConfig: async () => null,
|
|
1078
|
+
getWorkspaceRouter: () => ({}),
|
|
1079
|
+
eventBus: { emit: () => { }, on: () => () => { } },
|
|
1080
|
+
});
|
|
1081
|
+
const internals = gateway;
|
|
1082
|
+
internals.runtime.set('default', {
|
|
1083
|
+
workspaceId: 'default',
|
|
1084
|
+
enabled: true,
|
|
1085
|
+
status: 'running',
|
|
1086
|
+
connected: true,
|
|
1087
|
+
appId: 'app-1',
|
|
1088
|
+
client,
|
|
1089
|
+
});
|
|
1090
|
+
const result = await gateway.sendFile('default', {
|
|
1091
|
+
path: filePath,
|
|
1092
|
+
channelId: 'oc_chat_1',
|
|
1093
|
+
});
|
|
1094
|
+
strict_1.default.equal(uploads.length, 1);
|
|
1095
|
+
strict_1.default.equal(uploads[0]?.data?.file_type, 'pdf');
|
|
1096
|
+
strict_1.default.equal(uploads[0]?.data?.file_name, 'report.pdf');
|
|
1097
|
+
strict_1.default.equal(messages.length, 1);
|
|
1098
|
+
strict_1.default.equal(messages[0]?.params?.receive_id_type, 'chat_id');
|
|
1099
|
+
strict_1.default.equal(messages[0]?.data?.receive_id, 'oc_chat_1');
|
|
1100
|
+
strict_1.default.equal(messages[0]?.data?.msg_type, 'file');
|
|
1101
|
+
strict_1.default.deepEqual(JSON.parse(messages[0]?.data?.content), { file_key: 'file-key-1' });
|
|
1102
|
+
strict_1.default.deepEqual(result, {
|
|
1103
|
+
platform: 'lark',
|
|
1104
|
+
workspaceId: 'default',
|
|
1105
|
+
channelId: 'oc_chat_1',
|
|
1106
|
+
messageId: 'msg-file-1',
|
|
1107
|
+
fileKey: 'file-key-1',
|
|
1108
|
+
fileName: 'report.pdf',
|
|
1109
|
+
fileSize: Buffer.byteLength('pdf content'),
|
|
1110
|
+
});
|
|
1111
|
+
}
|
|
1112
|
+
finally {
|
|
1113
|
+
(0, node_fs_1.rmSync)(tempDir, { recursive: true, force: true });
|
|
1114
|
+
}
|
|
1115
|
+
});
|
|
1116
|
+
(0, node_test_1.default)('weixin channel can encrypt, upload, and send a local file', async () => {
|
|
1117
|
+
const tempDir = (0, node_fs_1.mkdtempSync)((0, node_path_1.join)((0, node_os_1.tmpdir)(), 'weixin-file-send-'));
|
|
1118
|
+
const originalFetch = globalThis.fetch;
|
|
1119
|
+
try {
|
|
1120
|
+
const filePath = (0, node_path_1.join)(tempDir, 'report.txt');
|
|
1121
|
+
(0, node_fs_1.writeFileSync)(filePath, 'hello weixin');
|
|
1122
|
+
const uploadUrlRequests = [];
|
|
1123
|
+
const cdnUploads = [];
|
|
1124
|
+
const sentMessages = [];
|
|
1125
|
+
globalThis.fetch = (async (url, init) => {
|
|
1126
|
+
const target = String(url);
|
|
1127
|
+
if (target.endsWith('/ilink/bot/getuploadurl')) {
|
|
1128
|
+
uploadUrlRequests.push(JSON.parse(String(init?.body || '{}')));
|
|
1129
|
+
return {
|
|
1130
|
+
ok: true,
|
|
1131
|
+
json: async () => ({ ret: 0, upload_param: 'upload-param-1' }),
|
|
1132
|
+
};
|
|
1133
|
+
}
|
|
1134
|
+
if (target.includes('/upload?')) {
|
|
1135
|
+
const body = init?.body instanceof Uint8Array ? init.body : new Uint8Array();
|
|
1136
|
+
cdnUploads.push({ url: target, size: body.byteLength });
|
|
1137
|
+
return {
|
|
1138
|
+
ok: true,
|
|
1139
|
+
headers: {
|
|
1140
|
+
get: (name) => name.toLowerCase() === 'x-encrypted-param' ? 'download-param-1' : null,
|
|
1141
|
+
},
|
|
1142
|
+
};
|
|
1143
|
+
}
|
|
1144
|
+
if (target.endsWith('/ilink/bot/sendmessage')) {
|
|
1145
|
+
sentMessages.push(JSON.parse(String(init?.body || '{}')));
|
|
1146
|
+
return {
|
|
1147
|
+
ok: true,
|
|
1148
|
+
json: async () => ({ ret: 0 }),
|
|
1149
|
+
};
|
|
1150
|
+
}
|
|
1151
|
+
throw new Error(`Unexpected fetch ${target}`);
|
|
1152
|
+
});
|
|
1153
|
+
const gateway = new local_core_weixin_gateway_js_1.LocalCoreWeixinGateway({
|
|
1154
|
+
store: {
|
|
1155
|
+
getPlatformThreadBinding: () => ({
|
|
1156
|
+
workspace_id: 'default',
|
|
1157
|
+
platform: 'weixin',
|
|
1158
|
+
chat_id: 'user-1',
|
|
1159
|
+
platform_user_id: 'user-1',
|
|
1160
|
+
thread_id: 'thread-1',
|
|
1161
|
+
last_platform_message_id: 'ctx-1',
|
|
1162
|
+
}),
|
|
1163
|
+
listAuthorizedUsers: () => [],
|
|
1164
|
+
},
|
|
1165
|
+
readConfig: async () => ({
|
|
1166
|
+
projects: [{
|
|
1167
|
+
name: 'default',
|
|
1168
|
+
root: '/tmp/project',
|
|
1169
|
+
platforms: [{
|
|
1170
|
+
type: 'weixin',
|
|
1171
|
+
options: {
|
|
1172
|
+
token: 'token-1',
|
|
1173
|
+
account_id: 'account-1',
|
|
1174
|
+
base_url: 'https://weixin.example',
|
|
1175
|
+
cdn_base_url: 'https://cdn.example/c2c',
|
|
1176
|
+
},
|
|
1177
|
+
}],
|
|
1178
|
+
}],
|
|
1179
|
+
}),
|
|
1180
|
+
getWorkspaceRouter: () => ({}),
|
|
1181
|
+
eventBus: { emit: () => { }, on: () => () => { } },
|
|
1182
|
+
});
|
|
1183
|
+
const internals = gateway;
|
|
1184
|
+
internals.runtime.set('default', {
|
|
1185
|
+
workspaceId: 'default',
|
|
1186
|
+
enabled: true,
|
|
1187
|
+
status: 'running',
|
|
1188
|
+
connected: true,
|
|
1189
|
+
accountId: 'account-1',
|
|
1190
|
+
});
|
|
1191
|
+
const result = await gateway.sendFile('default', {
|
|
1192
|
+
path: filePath,
|
|
1193
|
+
channelId: 'user-1',
|
|
1194
|
+
participantId: 'user-1',
|
|
1195
|
+
});
|
|
1196
|
+
strict_1.default.equal(uploadUrlRequests.length, 1);
|
|
1197
|
+
strict_1.default.equal(uploadUrlRequests[0]?.media_type, 3);
|
|
1198
|
+
strict_1.default.equal(uploadUrlRequests[0]?.to_user_id, 'user-1');
|
|
1199
|
+
strict_1.default.equal(uploadUrlRequests[0]?.rawsize, Buffer.byteLength('hello weixin'));
|
|
1200
|
+
strict_1.default.equal(uploadUrlRequests[0]?.filesize, 16);
|
|
1201
|
+
strict_1.default.equal(cdnUploads.length, 1);
|
|
1202
|
+
strict_1.default.match(cdnUploads[0]?.url || '', /encrypted_query_param=upload-param-1/);
|
|
1203
|
+
strict_1.default.equal(cdnUploads[0]?.size, 16);
|
|
1204
|
+
strict_1.default.equal(sentMessages.length, 1);
|
|
1205
|
+
const message = sentMessages[0]?.msg;
|
|
1206
|
+
strict_1.default.equal(message?.to_user_id, 'user-1');
|
|
1207
|
+
strict_1.default.equal(message?.context_token, 'ctx-1');
|
|
1208
|
+
strict_1.default.equal(message?.item_list?.[0]?.type, 4);
|
|
1209
|
+
strict_1.default.equal(message?.item_list?.[0]?.file_item?.file_name, 'report.txt');
|
|
1210
|
+
strict_1.default.equal(message?.item_list?.[0]?.file_item?.len, String(Buffer.byteLength('hello weixin')));
|
|
1211
|
+
strict_1.default.equal(message?.item_list?.[0]?.file_item?.media?.encrypt_query_param, 'download-param-1');
|
|
1212
|
+
strict_1.default.equal(result.platform, 'weixin');
|
|
1213
|
+
strict_1.default.equal(result.channelId, 'user-1');
|
|
1214
|
+
strict_1.default.equal(result.fileName, 'report.txt');
|
|
1215
|
+
strict_1.default.equal(result.fileSize, Buffer.byteLength('hello weixin'));
|
|
1216
|
+
strict_1.default.match(result.messageId, /^openclaw-weixin-/);
|
|
1217
|
+
strict_1.default.ok(result.fileKey);
|
|
1218
|
+
}
|
|
1219
|
+
finally {
|
|
1220
|
+
globalThis.fetch = originalFetch;
|
|
1221
|
+
(0, node_fs_1.rmSync)(tempDir, { recursive: true, force: true });
|
|
1222
|
+
}
|
|
1223
|
+
});
|
|
920
1224
|
(0, node_test_1.default)('lark message callbacks acknowledge before long thread runs finish', async () => {
|
|
921
1225
|
let registeredHandlers = {};
|
|
922
1226
|
let sentMessages = 0;
|