opencode-feishu 1.3.1 → 1.3.3
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/index.js +55 -51
- package/dist/index.js.map +1 -1
- package/package.json +1 -1
package/dist/index.js
CHANGED
|
@@ -112767,55 +112767,6 @@ async function sendCardMessage(client, chatId, cardId) {
|
|
|
112767
112767
|
);
|
|
112768
112768
|
}
|
|
112769
112769
|
|
|
112770
|
-
// src/feishu/markdown.ts
|
|
112771
|
-
var MAX_CARD_BYTES = 28 * 1024;
|
|
112772
|
-
var TRUNCATION_SUFFIX = "\n\n*\u5185\u5BB9\u8FC7\u957F\uFF0C\u5DF2\u622A\u65AD*";
|
|
112773
|
-
var TRUNCATION_SUFFIX_BYTES = new TextEncoder().encode(TRUNCATION_SUFFIX).length;
|
|
112774
|
-
var CODE_FENCE_BYTES = 4;
|
|
112775
|
-
var HTML_TAG_RE = /<\/?\w+(?:\s[^>]*)?\/?>/g;
|
|
112776
|
-
function cleanMarkdown(text) {
|
|
112777
|
-
let result = text.replace(/<br\s*\/?>/gi, "\n");
|
|
112778
|
-
const { segments, codeBlocks } = extractCodeBlocks(result);
|
|
112779
|
-
result = segments.map((seg) => seg.replace(HTML_TAG_RE, "")).join("\0");
|
|
112780
|
-
let idx = 0;
|
|
112781
|
-
result = result.replace(/\0/g, () => codeBlocks[idx++] ?? "");
|
|
112782
|
-
result = closeCodeBlocks(result);
|
|
112783
|
-
return result;
|
|
112784
|
-
}
|
|
112785
|
-
function truncateMarkdown(text, limit = MAX_CARD_BYTES) {
|
|
112786
|
-
const bytes = new TextEncoder().encode(text);
|
|
112787
|
-
if (bytes.length <= limit) return text;
|
|
112788
|
-
const effectiveLimit = limit - TRUNCATION_SUFFIX_BYTES - CODE_FENCE_BYTES;
|
|
112789
|
-
if (effectiveLimit <= 0) return TRUNCATION_SUFFIX;
|
|
112790
|
-
const truncated = new TextDecoder().decode(bytes.slice(0, effectiveLimit));
|
|
112791
|
-
const lastNewline = truncated.lastIndexOf("\n");
|
|
112792
|
-
const cutPoint = lastNewline > effectiveLimit * 0.8 ? lastNewline : truncated.length;
|
|
112793
|
-
let result = truncated.slice(0, cutPoint);
|
|
112794
|
-
result = closeCodeBlocks(result);
|
|
112795
|
-
return result + TRUNCATION_SUFFIX;
|
|
112796
|
-
}
|
|
112797
|
-
function extractCodeBlocks(text) {
|
|
112798
|
-
const segments = [];
|
|
112799
|
-
const codeBlocks = [];
|
|
112800
|
-
const re = /```[\s\S]*?```/g;
|
|
112801
|
-
let lastIndex = 0;
|
|
112802
|
-
let match;
|
|
112803
|
-
while ((match = re.exec(text)) !== null) {
|
|
112804
|
-
segments.push(text.slice(lastIndex, match.index));
|
|
112805
|
-
codeBlocks.push(match[0]);
|
|
112806
|
-
lastIndex = match.index + match[0].length;
|
|
112807
|
-
}
|
|
112808
|
-
segments.push(text.slice(lastIndex));
|
|
112809
|
-
return { segments, codeBlocks };
|
|
112810
|
-
}
|
|
112811
|
-
function closeCodeBlocks(text) {
|
|
112812
|
-
const matches = text.match(/```/g);
|
|
112813
|
-
if (matches && matches.length % 2 !== 0) {
|
|
112814
|
-
return text + "\n```";
|
|
112815
|
-
}
|
|
112816
|
-
return text;
|
|
112817
|
-
}
|
|
112818
|
-
|
|
112819
112770
|
// src/tools/send-card.ts
|
|
112820
112771
|
var z2 = tool.schema;
|
|
112821
112772
|
var TEMPLATE_COLORS = ["blue", "green", "orange", "red", "purple", "grey"];
|
|
@@ -112842,10 +112793,14 @@ function createSendCardTool(deps) {
|
|
|
112842
112793
|
async execute(args, context) {
|
|
112843
112794
|
const chatId = getChatIdBySession(context.sessionID);
|
|
112844
112795
|
if (!chatId) {
|
|
112796
|
+
deps.log("warn", "Agent \u5361\u7247\u53D1\u9001\u8DF3\u8FC7\uFF1AsessionID \u65E0\u98DE\u4E66\u804A\u5929\u6620\u5C04", {
|
|
112797
|
+
sessionId: context.sessionID,
|
|
112798
|
+
title: args.title
|
|
112799
|
+
});
|
|
112845
112800
|
return "\u9519\u8BEF\uFF1A\u5F53\u524D\u4F1A\u8BDD\u4E0D\u5173\u8054\u98DE\u4E66\u804A\u5929\uFF0C\u65E0\u6CD5\u53D1\u9001\u5361\u7247";
|
|
112846
112801
|
}
|
|
112847
112802
|
const chatInfo = getChatInfoBySession(context.sessionID);
|
|
112848
|
-
const card = buildCardFromDSL(args, chatId, chatInfo?.chatType ?? "p2p");
|
|
112803
|
+
const card = { type: "card_kit", data: buildCardFromDSL(args, chatId, chatInfo?.chatType ?? "p2p") };
|
|
112849
112804
|
const result = await sendInteractiveCard(deps.feishuClient, chatId, card);
|
|
112850
112805
|
if (result.ok) {
|
|
112851
112806
|
deps.log("info", "Agent \u5361\u7247\u5DF2\u53D1\u9001", {
|
|
@@ -112904,7 +112859,7 @@ function buildCardFromDSL(args, chatId, chatType) {
|
|
|
112904
112859
|
default:
|
|
112905
112860
|
return {
|
|
112906
112861
|
tag: "markdown",
|
|
112907
|
-
content:
|
|
112862
|
+
content: s.content ?? ""
|
|
112908
112863
|
};
|
|
112909
112864
|
}
|
|
112910
112865
|
}).filter(Boolean)
|
|
@@ -113927,6 +113882,55 @@ async function getOrCreateSession(client, sessionKey, directory) {
|
|
|
113927
113882
|
return session;
|
|
113928
113883
|
}
|
|
113929
113884
|
|
|
113885
|
+
// src/feishu/markdown.ts
|
|
113886
|
+
var MAX_CARD_BYTES = 28 * 1024;
|
|
113887
|
+
var TRUNCATION_SUFFIX = "\n\n*\u5185\u5BB9\u8FC7\u957F\uFF0C\u5DF2\u622A\u65AD*";
|
|
113888
|
+
var TRUNCATION_SUFFIX_BYTES = new TextEncoder().encode(TRUNCATION_SUFFIX).length;
|
|
113889
|
+
var CODE_FENCE_BYTES = 4;
|
|
113890
|
+
var HTML_TAG_RE = /<\/?\w+(?:\s[^>]*)?\/?>/g;
|
|
113891
|
+
function cleanMarkdown(text) {
|
|
113892
|
+
let result = text.replace(/<br\s*\/?>/gi, "\n");
|
|
113893
|
+
const { segments, codeBlocks } = extractCodeBlocks(result);
|
|
113894
|
+
result = segments.map((seg) => seg.replace(HTML_TAG_RE, "")).join("\0");
|
|
113895
|
+
let idx = 0;
|
|
113896
|
+
result = result.replace(/\0/g, () => codeBlocks[idx++] ?? "");
|
|
113897
|
+
result = closeCodeBlocks(result);
|
|
113898
|
+
return result;
|
|
113899
|
+
}
|
|
113900
|
+
function truncateMarkdown(text, limit = MAX_CARD_BYTES) {
|
|
113901
|
+
const bytes = new TextEncoder().encode(text);
|
|
113902
|
+
if (bytes.length <= limit) return text;
|
|
113903
|
+
const effectiveLimit = limit - TRUNCATION_SUFFIX_BYTES - CODE_FENCE_BYTES;
|
|
113904
|
+
if (effectiveLimit <= 0) return TRUNCATION_SUFFIX;
|
|
113905
|
+
const truncated = new TextDecoder().decode(bytes.slice(0, effectiveLimit));
|
|
113906
|
+
const lastNewline = truncated.lastIndexOf("\n");
|
|
113907
|
+
const cutPoint = lastNewline > effectiveLimit * 0.8 ? lastNewline : truncated.length;
|
|
113908
|
+
let result = truncated.slice(0, cutPoint);
|
|
113909
|
+
result = closeCodeBlocks(result);
|
|
113910
|
+
return result + TRUNCATION_SUFFIX;
|
|
113911
|
+
}
|
|
113912
|
+
function extractCodeBlocks(text) {
|
|
113913
|
+
const segments = [];
|
|
113914
|
+
const codeBlocks = [];
|
|
113915
|
+
const re = /```[\s\S]*?```/g;
|
|
113916
|
+
let lastIndex = 0;
|
|
113917
|
+
let match;
|
|
113918
|
+
while ((match = re.exec(text)) !== null) {
|
|
113919
|
+
segments.push(text.slice(lastIndex, match.index));
|
|
113920
|
+
codeBlocks.push(match[0]);
|
|
113921
|
+
lastIndex = match.index + match[0].length;
|
|
113922
|
+
}
|
|
113923
|
+
segments.push(text.slice(lastIndex));
|
|
113924
|
+
return { segments, codeBlocks };
|
|
113925
|
+
}
|
|
113926
|
+
function closeCodeBlocks(text) {
|
|
113927
|
+
const matches = text.match(/```/g);
|
|
113928
|
+
if (matches && matches.length % 2 !== 0) {
|
|
113929
|
+
return text + "\n```";
|
|
113930
|
+
}
|
|
113931
|
+
return text;
|
|
113932
|
+
}
|
|
113933
|
+
|
|
113930
113934
|
// src/feishu/streaming-card.ts
|
|
113931
113935
|
var StreamingCard = class {
|
|
113932
113936
|
constructor(cardkit, feishuClient, chatId, log) {
|