@kafca/agentdock 0.1.38 → 0.1.40

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 (50) hide show
  1. package/README.md +4 -0
  2. package/dist/renderer/assets/{Badge-PKJavQmQ.js → Badge-CmP99fZV.js} +1 -1
  3. package/dist/renderer/assets/{Chat-DWm4h9aa.js → Chat-BHxpB0Vz.js} +1 -1
  4. package/dist/renderer/assets/{ChatMarkdown-DKxW2GbO.js → ChatMarkdown-Cnhe-XvR.js} +1 -1
  5. package/dist/renderer/assets/{Config-Bqn3cy0z.js → Config-CreR5RZX.js} +1 -1
  6. package/dist/renderer/assets/{CronList-CPI_C7FW.js → CronList-OHg6JWsr.js} +1 -1
  7. package/dist/renderer/assets/{Dashboard-0e9JS5t7.js → Dashboard-C083Q4zC.js} +2 -2
  8. package/dist/renderer/assets/{EmptyState-CuA0koT7.js → EmptyState-Br-H8kqG.js} +1 -1
  9. package/dist/renderer/assets/{KnowledgeDetail-B1YSDbFa.js → KnowledgeDetail-DKhVUY4_.js} +1 -1
  10. package/dist/renderer/assets/{KnowledgeHome-KHYwWGDu.js → KnowledgeHome-BM3TMxhj.js} +1 -1
  11. package/dist/renderer/assets/{Logs-X4LJw-00.js → Logs-debYolKz.js} +1 -1
  12. package/dist/renderer/assets/{Modal-BzEv4CK6.js → Modal-BIetew5T.js} +1 -1
  13. package/dist/renderer/assets/{Page-BrZMoKtK.js → Page-183Y5-ef.js} +1 -1
  14. package/dist/renderer/assets/{ProjectDetail-DpO00Ozx.js → ProjectDetail-CB6-zRBY.js} +1 -1
  15. package/dist/renderer/assets/{ProjectList-DFtJHTic.js → ProjectList-BEUflZUB.js} +1 -1
  16. package/dist/renderer/assets/{Select-DMrwDcus.js → Select-CNIQBVMx.js} +1 -1
  17. package/dist/renderer/assets/{SessionChat-Bh9AfkK5.js → SessionChat-CLpfIftJ.js} +1 -1
  18. package/dist/renderer/assets/{SessionList-Y3gWAe96.js → SessionList-BUwfQcGl.js} +1 -1
  19. package/dist/renderer/assets/{ThreadChat-Cq0ZRNOh.js → ThreadChat-B9EcRcki.js} +1 -1
  20. package/dist/renderer/assets/{Workspace-DMSPypFO.js → Workspace-D82il8Vz.js} +1 -1
  21. package/dist/renderer/assets/{arrow-left-CgYQZlK9.js → arrow-left-T9D9J6Ln.js} +1 -1
  22. package/dist/renderer/assets/{book-open-cAfg0BWS.js → book-open-Bfdr9s70.js} +1 -1
  23. package/dist/renderer/assets/{check-BNRlfwZx.js → check-CPJsC_C4.js} +1 -1
  24. package/dist/renderer/assets/{chevron-down-B9vVz3wf.js → chevron-down-BDoIQdna.js} +1 -1
  25. package/dist/renderer/assets/{circle-TBXQ38et.js → circle-CRGTgPlR.js} +1 -1
  26. package/dist/renderer/assets/{desktop-DfkCIN1l.js → desktop-DJ_OjjxL.js} +1 -1
  27. package/dist/renderer/assets/{funnel-BdZjZcqK.js → funnel-BISvzz6U.js} +1 -1
  28. package/dist/renderer/assets/{heart-CBPXb4dq.js → heart-EllaLuEV.js} +1 -1
  29. package/dist/renderer/assets/{index-C_Yr2rQ1.js → index-Db87Dhd_.js} +1 -1
  30. package/dist/renderer/assets/{index-CXrYAFUE.js → index-YUnN4zTb.js} +2 -2
  31. package/dist/renderer/assets/{pencil-BlLIWP1h.js → pencil-w4F5pFB6.js} +1 -1
  32. package/dist/renderer/assets/{play-F-oO0VwG.js → play-CNY6DepD.js} +1 -1
  33. package/dist/renderer/assets/{plug-B5BduKTi.js → plug-DnMzECJy.js} +1 -1
  34. package/dist/renderer/assets/{plus-Bbe6vc8z.js → plus-D33HMCG5.js} +1 -1
  35. package/dist/renderer/assets/projects-DcYpVq_W.js +1 -0
  36. package/dist/renderer/assets/{save-CbX1ymi_.js → save-B0PXgtN_.js} +1 -1
  37. package/dist/renderer/assets/{search-KyB8P1Ie.js → search-zNtpxpxG.js} +1 -1
  38. package/dist/renderer/assets/{server-D2EQ0I-I.js → server-DIsU-ww0.js} +1 -1
  39. package/dist/renderer/assets/{session-utils-C4Eq8h8o.js → session-utils-CxQ3KCei.js} +1 -1
  40. package/dist/renderer/assets/{sessions-CchD99QT.js → sessions-DFDVZGz-.js} +1 -1
  41. package/dist/renderer/assets/{shield-check-BTTXqP3n.js → shield-check-5hrgmi9Y.js} +1 -1
  42. package/dist/renderer/assets/{trash-2-CDOrVaia.js → trash-2-DWftp5eL.js} +1 -1
  43. package/dist/renderer/assets/{user-BR0zEuV_.js → user-CKjiW1bV.js} +1 -1
  44. package/dist/renderer/assets/{wifi-off-W_cPAMcl.js → wifi-off-DyBtTbdO.js} +1 -1
  45. package/dist/renderer/index.html +1 -1
  46. package/dist-electron/services/local-ai-core/src/channel/lark/local-core-lark-gateway.js +8 -7
  47. package/dist-electron/services/local-ai-core/src/channel/lark/post.js +18 -0
  48. package/dist-electron/tests/integration/local-core-refactor.test.js +42 -12
  49. package/package.json +1 -1
  50. package/dist/renderer/assets/projects-CGLECySt.js +0 -1
@@ -1,4 +1,4 @@
1
- import{c as a}from"./index-CXrYAFUE.js";/**
1
+ import{c as a}from"./index-YUnN4zTb.js";/**
2
2
  * @license lucide-react v0.487.0 - ISC
3
3
  *
4
4
  * This source code is licensed under the ISC license.
@@ -1,4 +1,4 @@
1
- import{c as o}from"./index-CXrYAFUE.js";/**
1
+ import{c as o}from"./index-YUnN4zTb.js";/**
2
2
  * @license lucide-react v0.487.0 - ISC
3
3
  *
4
4
  * This source code is licensed under the ISC license.
@@ -1,4 +1,4 @@
1
- import{c as o}from"./index-CXrYAFUE.js";/**
1
+ import{c as o}from"./index-YUnN4zTb.js";/**
2
2
  * @license lucide-react v0.487.0 - ISC
3
3
  *
4
4
  * This source code is licensed under the ISC license.
@@ -1,4 +1,4 @@
1
- import{c as e}from"./index-CXrYAFUE.js";/**
1
+ import{c as e}from"./index-YUnN4zTb.js";/**
2
2
  * @license lucide-react v0.487.0 - ISC
3
3
  *
4
4
  * This source code is licensed under the ISC license.
@@ -0,0 +1 @@
1
+ import{z as t}from"./index-YUnN4zTb.js";const e=()=>t.get("/projects"),r=o=>t.get(`/projects/${o}`);export{r as g,e as l};
@@ -1,4 +1,4 @@
1
- import{c as a}from"./index-CXrYAFUE.js";/**
1
+ import{c as a}from"./index-YUnN4zTb.js";/**
2
2
  * @license lucide-react v0.487.0 - ISC
3
3
  *
4
4
  * This source code is licensed under the ISC license.
@@ -1,4 +1,4 @@
1
- import{c}from"./index-CXrYAFUE.js";/**
1
+ import{c}from"./index-YUnN4zTb.js";/**
2
2
  * @license lucide-react v0.487.0 - ISC
3
3
  *
4
4
  * This source code is licensed under the ISC license.
@@ -1,4 +1,4 @@
1
- import{c as e}from"./index-CXrYAFUE.js";/**
1
+ import{c as e}from"./index-YUnN4zTb.js";/**
2
2
  * @license lucide-react v0.487.0 - ISC
3
3
  *
4
4
  * This source code is licensed under the ISC license.
@@ -1,4 +1,4 @@
1
- import{c as o}from"./index-CXrYAFUE.js";/**
1
+ import{c as o}from"./index-YUnN4zTb.js";/**
2
2
  * @license lucide-react v0.487.0 - ISC
3
3
  *
4
4
  * This source code is licensed under the ISC license.
@@ -1 +1 @@
1
- import{z as o}from"./index-CXrYAFUE.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};
1
+ import{z as o}from"./index-YUnN4zTb.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};
@@ -1,4 +1,4 @@
1
- import{c}from"./index-CXrYAFUE.js";/**
1
+ import{c}from"./index-YUnN4zTb.js";/**
2
2
  * @license lucide-react v0.487.0 - ISC
3
3
  *
4
4
  * This source code is licensed under the ISC license.
@@ -1,4 +1,4 @@
1
- import{c as e}from"./index-CXrYAFUE.js";/**
1
+ import{c as e}from"./index-YUnN4zTb.js";/**
2
2
  * @license lucide-react v0.487.0 - ISC
3
3
  *
4
4
  * This source code is licensed under the ISC license.
@@ -1,4 +1,4 @@
1
- import{c as e}from"./index-CXrYAFUE.js";/**
1
+ import{c as e}from"./index-YUnN4zTb.js";/**
2
2
  * @license lucide-react v0.487.0 - ISC
3
3
  *
4
4
  * This source code is licensed under the ISC license.
@@ -1,4 +1,4 @@
1
- import{c as a}from"./index-CXrYAFUE.js";/**
1
+ import{c as a}from"./index-YUnN4zTb.js";/**
2
2
  * @license lucide-react v0.487.0 - ISC
3
3
  *
4
4
  * This source code is licensed under the ISC license.
@@ -5,7 +5,7 @@
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-CXrYAFUE.js"></script>
8
+ <script type="module" crossorigin src="./assets/index-YUnN4zTb.js"></script>
9
9
  <link rel="stylesheet" crossorigin href="./assets/index-CaQZSRbg.css">
10
10
  </head>
11
11
  <body class="bg-[#f5f5f7] dark:bg-[#151516]">
@@ -44,6 +44,7 @@ const file_utils_js_1 = require("../shared/file-utils.js");
44
44
  const cards_js_1 = require("./cards.js");
45
45
  const config_js_1 = require("./config.js");
46
46
  const registration_js_1 = require("./registration.js");
47
+ const post_js_1 = require("./post.js");
47
48
  const runtime_state_js_1 = require("./runtime-state.js");
48
49
  const PAIRING_EXPIRY_MS = 10 * 60 * 1000;
49
50
  const LARK_MAX_UPLOAD_FILE_SIZE = 30 * 1024 * 1024;
@@ -218,7 +219,7 @@ class LocalCoreLarkGateway extends node_events_1.EventEmitter {
218
219
  if (part.type === 'text') {
219
220
  const text = String(part.text || '').trim();
220
221
  if (text) {
221
- messageIds.push(await this.sendTextAsMessage(state, channelId, text));
222
+ messageIds.push(await this.sendTextAsPost(state, channelId, text));
222
223
  }
223
224
  continue;
224
225
  }
@@ -514,14 +515,14 @@ class LocalCoreLarkGateway extends node_events_1.EventEmitter {
514
515
  }
515
516
  if (!existingMessageId) {
516
517
  const createdId = renderedMessage.delivery === 'message' && renderedMessage.buttonRows.length === 0
517
- ? await this.sendTextAsMessage(state, route.chatId, renderedMessage.text)
518
+ ? await this.sendTextAsPost(state, route.chatId, renderedMessage.text)
518
519
  : await this.sendTextAsCard(state, route.chatId, renderedMessage.text, renderedMessage.buttonRows, sessionKey, bridgeThreadId);
519
520
  if (createdId) {
520
521
  (0, runtime_state_js_1.setLarkRenderedMessageId)(turn, renderedMessage, createdId);
521
522
  if (renderedMessage.isFinal) {
522
523
  this.options.store.updatePlatformThreadMessageId(route.workspaceId, route.chatId, route.platformUserId, createdId, routePlatformKey);
523
524
  }
524
- this.options.log?.(`localcore-lark sent new ${renderedMessage.delivery === 'message' ? 'text' : 'card'} message ${createdId} for sessionKey=${sessionKey}`);
525
+ this.options.log?.(`localcore-lark sent new ${renderedMessage.delivery === 'message' ? 'post' : 'card'} message ${createdId} for sessionKey=${sessionKey}`);
525
526
  }
526
527
  continue;
527
528
  }
@@ -1151,7 +1152,7 @@ class LocalCoreLarkGateway extends node_events_1.EventEmitter {
1151
1152
  this.options.log?.(`localcore-lark card create took ${Date.now() - startedAt}ms textBytes=${Buffer.byteLength(text || '', 'utf8')}`);
1152
1153
  return String(response?.data?.message_id || '').trim();
1153
1154
  }
1154
- async sendTextAsMessage(state, chatId, text) {
1155
+ async sendTextAsPost(state, chatId, text) {
1155
1156
  const startedAt = Date.now();
1156
1157
  const response = await state.client.im.message.create({
1157
1158
  params: {
@@ -1159,11 +1160,11 @@ class LocalCoreLarkGateway extends node_events_1.EventEmitter {
1159
1160
  },
1160
1161
  data: {
1161
1162
  receive_id: chatId,
1162
- msg_type: 'text',
1163
- content: JSON.stringify({ text }),
1163
+ msg_type: 'post',
1164
+ content: JSON.stringify((0, post_js_1.buildLarkPostContent)(text)),
1164
1165
  },
1165
1166
  });
1166
- this.options.log?.(`localcore-lark text create took ${Date.now() - startedAt}ms textBytes=${Buffer.byteLength(text || '', 'utf8')}`);
1167
+ this.options.log?.(`localcore-lark post create took ${Date.now() - startedAt}ms textBytes=${Buffer.byteLength(text || '', 'utf8')}`);
1167
1168
  return String(response?.data?.message_id || '').trim();
1168
1169
  }
1169
1170
  resolveReceiveIdType(receiveId) {
@@ -0,0 +1,18 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.buildLarkPostContent = buildLarkPostContent;
4
+ function buildLarkPostContent(markdown) {
5
+ return {
6
+ zh_cn: {
7
+ content: [[{
8
+ tag: 'md',
9
+ text: sanitizeLarkPostMarkdown(String(markdown || '').trim() || ' '),
10
+ }]],
11
+ },
12
+ };
13
+ }
14
+ function sanitizeLarkPostMarkdown(markdown) {
15
+ return markdown.replace(/\[([^\]]*)\]\(([^)]+)\)/g, (match, label, href) => {
16
+ return /^https?:\/\//i.test(href) ? match : `${label} (${href})`;
17
+ });
18
+ }
@@ -30,11 +30,34 @@ function extractLarkCreatedMessage(request) {
30
30
  return {
31
31
  msgType,
32
32
  content,
33
- text: msgType === 'interactive'
34
- ? String(content.elements?.[0]?.content || '')
35
- : String(content.text || ''),
33
+ text: extractLarkCreatedMessageText(msgType, content),
36
34
  };
37
35
  }
36
+ function extractLarkCreatedMessageText(msgType, content) {
37
+ if (msgType === 'interactive') {
38
+ return String(content.elements?.[0]?.content || '');
39
+ }
40
+ if (msgType === 'post') {
41
+ return (content.zh_cn?.content || [])
42
+ .map((line) => (Array.isArray(line) ? line : [])
43
+ .map((item) => {
44
+ return String(item?.text || item?.href || '');
45
+ })
46
+ .join(''))
47
+ .join('\n');
48
+ }
49
+ return String(content.text || '');
50
+ }
51
+ function findLarkPostMdText(content) {
52
+ for (const line of content.zh_cn?.content || []) {
53
+ for (const item of Array.isArray(line) ? line : []) {
54
+ if (item?.tag === 'md') {
55
+ return String(item.text || '');
56
+ }
57
+ }
58
+ }
59
+ return '';
60
+ }
38
61
  (0, node_test_1.default)('local core route parser separates runtime refresh and runtime detail routes', () => {
39
62
  strict_1.default.deepEqual((0, server_routes_js_1.parseLocalAiCoreRoute)('GET', '/api/local/v1/logs'), { name: 'logs.list' });
40
63
  strict_1.default.deepEqual((0, server_routes_js_1.parseLocalAiCoreRoute)('GET', '/api/local/v1/runtimes'), { name: 'runtimes.list' });
@@ -1853,6 +1876,7 @@ function extractLarkCreatedMessage(request) {
1853
1876
  messageId,
1854
1877
  msgType: message.msgType,
1855
1878
  text: message.text,
1879
+ content: message.content,
1856
1880
  });
1857
1881
  return { data: { message_id: messageId } };
1858
1882
  },
@@ -1921,13 +1945,13 @@ function extractLarkCreatedMessage(request) {
1921
1945
  replyCtx: 'run-1',
1922
1946
  content: '最终回答',
1923
1947
  });
1924
- strict_1.default.deepEqual(createdMessages.map((message) => message.msgType), ['interactive', 'text']);
1948
+ strict_1.default.deepEqual(createdMessages.map((message) => message.msgType), ['interactive', 'post']);
1925
1949
  strict_1.default.equal(createdMessages[0]?.text, '先理解问题,再检查代码');
1926
1950
  strict_1.default.equal(createdMessages[1]?.text, '最终回答');
1927
1951
  strict_1.default.equal(patchedCards.length, 0);
1928
1952
  strict_1.default.deepEqual(storedMessageIds, ['lark-msg-2']);
1929
1953
  });
1930
- (0, node_test_1.default)('lark bridge sends final reply as its own plain text message instead of streaming draft', async () => {
1954
+ (0, node_test_1.default)('lark bridge sends final reply as its own post message instead of streaming draft', async () => {
1931
1955
  const createdMessages = [];
1932
1956
  const patchedCards = [];
1933
1957
  const storedMessageIds = [];
@@ -1941,6 +1965,7 @@ function extractLarkCreatedMessage(request) {
1941
1965
  messageId,
1942
1966
  msgType: message.msgType,
1943
1967
  text: message.text,
1968
+ content: message.content,
1944
1969
  });
1945
1970
  return { data: { message_id: messageId } };
1946
1971
  },
@@ -1999,7 +2024,7 @@ function extractLarkCreatedMessage(request) {
1999
2024
  replyCtx: 'run-1',
2000
2025
  content: '真正最终回答',
2001
2026
  });
2002
- strict_1.default.deepEqual(createdMessages.map((message) => message.msgType), ['text']);
2027
+ strict_1.default.deepEqual(createdMessages.map((message) => message.msgType), ['post']);
2003
2028
  strict_1.default.deepEqual(createdMessages.map((message) => message.text), ['真正最终回答']);
2004
2029
  strict_1.default.deepEqual(patchedCards, []);
2005
2030
  strict_1.default.deepEqual(storedMessageIds, ['lark-msg-1']);
@@ -2017,6 +2042,7 @@ function extractLarkCreatedMessage(request) {
2017
2042
  messageId,
2018
2043
  msgType: message.msgType,
2019
2044
  text: message.text,
2045
+ content: message.content,
2020
2046
  });
2021
2047
  return { data: { message_id: messageId } };
2022
2048
  },
@@ -2073,11 +2099,11 @@ function extractLarkCreatedMessage(request) {
2073
2099
  replyCtx: 'run-2',
2074
2100
  content: 'second final',
2075
2101
  });
2076
- strict_1.default.deepEqual(createdMessages.map((message) => message.msgType), ['text', 'text']);
2102
+ strict_1.default.deepEqual(createdMessages.map((message) => message.msgType), ['post', 'post']);
2077
2103
  strict_1.default.deepEqual(createdMessages.map((message) => message.text), ['first final', 'second final']);
2078
2104
  strict_1.default.deepEqual(patchedCards, []);
2079
2105
  });
2080
- (0, node_test_1.default)('lark bridge sends tool and final as separate plain text messages without patching tool progress', async () => {
2106
+ (0, node_test_1.default)('lark bridge sends tool and final as separate post messages without patching tool progress', async () => {
2081
2107
  const createdMessages = [];
2082
2108
  const patchedCards = [];
2083
2109
  const storedMessageIds = [];
@@ -2091,6 +2117,7 @@ function extractLarkCreatedMessage(request) {
2091
2117
  messageId,
2092
2118
  msgType: message.msgType,
2093
2119
  text: message.text,
2120
+ content: message.content,
2094
2121
  });
2095
2122
  return { data: { message_id: messageId } };
2096
2123
  },
@@ -2163,7 +2190,7 @@ function extractLarkCreatedMessage(request) {
2163
2190
  replyCtx: 'run-1',
2164
2191
  content: '好的,文件存在,现在发送给你:已发送!`CLAUDE.md` 文件已经发出去了,请查收',
2165
2192
  });
2166
- strict_1.default.deepEqual(createdMessages.map((message) => message.msgType), ['text', 'text']);
2193
+ strict_1.default.deepEqual(createdMessages.map((message) => message.msgType), ['post', 'post']);
2167
2194
  strict_1.default.deepEqual(createdMessages.map((message) => message.text), [
2168
2195
  '🔧 bash',
2169
2196
  '好的,文件存在,现在发送给你:已发送!`CLAUDE.md` 文件已经发出去了,请查收',
@@ -2185,6 +2212,7 @@ function extractLarkCreatedMessage(request) {
2185
2212
  messageId,
2186
2213
  msgType: message.msgType,
2187
2214
  text: message.text,
2215
+ content: message.content,
2188
2216
  });
2189
2217
  return { data: { message_id: messageId } };
2190
2218
  },
@@ -2291,13 +2319,14 @@ function extractLarkCreatedMessage(request) {
2291
2319
  replyCtx: 'run-1',
2292
2320
  content: '最终回答',
2293
2321
  });
2294
- strict_1.default.deepEqual(createdMessages.map((message) => message.msgType), ['interactive', 'text', 'interactive', 'text']);
2322
+ strict_1.default.deepEqual(createdMessages.map((message) => message.msgType), ['interactive', 'post', 'interactive', 'post']);
2295
2323
  strict_1.default.deepEqual(createdMessages.map((message) => message.text), [
2296
2324
  '先理解用户需求',
2297
2325
  '🔧 Terminal\n\n```json\n{\n "command": "uname -a",\n "description": "Get system info"\n}\n```',
2298
2326
  '看到了 Linux',
2299
2327
  '最终回答',
2300
2328
  ]);
2329
+ strict_1.default.equal(findLarkPostMdText(createdMessages[1]?.content), '🔧 Terminal\n\n```json\n{\n "command": "uname -a",\n "description": "Get system info"\n}\n```');
2301
2330
  strict_1.default.deepEqual(patchedCards, []);
2302
2331
  strict_1.default.deepEqual(storedMessageIds, ['lark-msg-4']);
2303
2332
  });
@@ -2619,7 +2648,7 @@ function extractLarkCreatedMessage(request) {
2619
2648
  strict_1.default.equal(patchedCards[0]?.messageId, 'permission-msg-1');
2620
2649
  strict_1.default.match(patchedCards[0]?.card?.elements?.[0]?.content || '', /工具确认已处理/);
2621
2650
  strict_1.default.equal(createdMessages.length, 1);
2622
- strict_1.default.equal(createdMessages[0]?.msgType, 'text');
2651
+ strict_1.default.equal(createdMessages[0]?.msgType, 'post');
2623
2652
  strict_1.default.match(createdMessages[0]?.text || '', /桌面文件列表/);
2624
2653
  });
2625
2654
  (0, node_test_1.default)('lark channel sends tool name and parameters once without streaming output', async () => {
@@ -2699,10 +2728,11 @@ function extractLarkCreatedMessage(request) {
2699
2728
  },
2700
2729
  });
2701
2730
  const text = createdMessages[0]?.text || '';
2702
- strict_1.default.equal(createdMessages[0]?.msgType, 'text');
2731
+ strict_1.default.equal(createdMessages[0]?.msgType, 'post');
2703
2732
  strict_1.default.match(text, /🔧 Terminal/);
2704
2733
  strict_1.default.match(text, /```json\n{\n "command": "ls ~\/Desktop"\n}\n```/);
2705
2734
  strict_1.default.doesNotMatch(text, /参数/);
2735
+ strict_1.default.equal(findLarkPostMdText(createdMessages[0]?.content), '🔧 Terminal\n\n```json\n{\n "command": "ls ~/Desktop"\n}\n```');
2706
2736
  strict_1.default.equal(patchedCards.length, 0);
2707
2737
  strict_1.default.doesNotMatch(text, /completed/);
2708
2738
  strict_1.default.doesNotMatch(text, /secret terminal output/);
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@kafca/agentdock",
3
- "version": "0.1.38",
3
+ "version": "0.1.40",
4
4
  "license": "PolyForm-Noncommercial-1.0.0",
5
5
  "type": "module",
6
6
  "main": "dist-electron/electron/main.js",
@@ -1 +0,0 @@
1
- import{z as t}from"./index-CXrYAFUE.js";const e=()=>t.get("/projects"),r=o=>t.get(`/projects/${o}`);export{r as g,e as l};