@zaclinley/dsh-mailharbor 0.9.1 → 0.10.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/lib/index.js CHANGED
@@ -1716,26 +1716,28 @@ import { existsSync as existsSync4, mkdirSync as mkdirSync3, readFileSync as rea
1716
1716
  import { dirname, join as join4 } from "node:path";
1717
1717
  var TIMEOUT_MS = 9e4;
1718
1718
  var MAX_PROMPT_CHARS = 4e4;
1719
- var SUMMARY_SYSTEM = `\u4F60\u662F\u90AE\u4EF6\u52A9\u7406\uFF0C\u670D\u52A1\u4E8E\u4E2D\u6587\u7528\u6237\u3002\u8BF7\u7528\u7B80\u4F53\u4E2D\u6587\u603B\u7ED3\u90AE\u4EF6\uFF0C\u4E25\u683C\u6309\u4E0B\u9762\u56DB\u6BB5\u8F93\u51FA\uFF0C\u4F7F\u7528\u7ED9\u5B9A\u7684\u5C0F\u6807\u9898\uFF0C\u4E0D\u8981\u8F93\u51FA\u5176\u4ED6\u5185\u5BB9\uFF1A
1719
+ var SUMMARY_SYSTEM = `\u4F60\u662F\u90AE\u4EF6\u52A9\u7406\uFF0C\u670D\u52A1\u4E8E\u4E2D\u6587\u7528\u6237\u3002\u7528\u7B80\u4F53\u4E2D\u6587\uFF0C\u7B80\u6D01\u4F18\u5148\uFF0C\u603B\u957F\u4E0D\u8D85\u8FC7 180 \u5B57\u3002
1720
+
1721
+ \u4E25\u683C\u6309\u4E0B\u9762\u56DB\u4E2A\u5C0F\u6807\u9898\u8F93\u51FA\uFF0C\u4E0D\u8981\u8F93\u51FA\u5176\u4ED6\u5185\u5BB9\uFF1A
1720
1722
 
1721
1723
  \u7ED3\u8BBA
1722
- \uFF081-2 \u53E5\u8BDD\u8BF4\u660E\u8FD9\u5C01\u90AE\u4EF6\u662F\u4EC0\u4E48\u4E8B\uFF09
1724
+ \u4E00\u53E5\u8BDD\uFF08\u4E0D\u8D85\u8FC7 40 \u5B57\uFF09\u8BF4\u660E\u8FD9\u662F\u4EC0\u4E48\u90AE\u4EF6\u3001\u8C01\u8981\u505A\u4EC0\u4E48\u3002
1723
1725
 
1724
1726
  \u9700\u8981\u4F60\u505A\u4EC0\u4E48
1725
- \uFF08\u6CA1\u6709\u5C31\u5199\u300C\u65E0\u9700\u64CD\u4F5C\u300D\uFF1B\u6709\u5C31\u5217 1-3 \u6761\uFF0C\u9879\u76EE\u7B26\u53F7\uFF09
1727
+ - \u6700\u591A 3 \u6761\uFF0C\u6BCF\u6761\u4E0D\u8D85\u8FC7 20 \u5B57\uFF1B\u6CA1\u6709\u5C31\u53EA\u5199\u300C\u65E0\u9700\u64CD\u4F5C\u300D\u3002
1728
+ - \u5982\u679C\u8EAB\u4EFD\u662F\u300C\u4EC5\u6284\u9001\u300D\uFF0C\u53EA\u5199\u300C\u4F60\u53EA\u662F\u88AB\u6284\u9001\uFF0C\u901A\u5E38\u65E0\u9700\u64CD\u4F5C\u300D\u3002
1729
+ - \u5982\u679C\u8EAB\u4EFD\u662F\u300C\u53D1\u4EF6\u4EBA\u300D\uFF0C\u53EA\u5199\u300C\u8FD9\u662F\u4F60\u53D1\u51FA\u7684\u90AE\u4EF6\uFF0C\u65E0\u9700\u64CD\u4F5C\u300D\u3002
1730
+ - \u5982\u679C\u8EAB\u4EFD\u662F\u300C\u4E0D\u5728\u6536\u4EF6\u4EBA/\u6284\u9001\u5217\u8868\u300D\uFF0C\u53EA\u5199\u300C\u4F60\u4E0D\u5728\u6536\u4EF6\u4EBA\u5217\u8868\uFF0C\u901A\u5E38\u65E0\u9700\u64CD\u4F5C\u300D\u3002
1726
1731
 
1727
1732
  \u5173\u952E\u4FE1\u606F
1728
- \uFF08\u65F6\u95F4\u3001\u91D1\u989D\u3001\u4EBA\u540D\u3001\u5355\u53F7\u3001\u5730\u5740\u7B49\uFF0C\u9879\u76EE\u7B26\u53F7\uFF1B\u6CA1\u6709\u5C31\u5199\u300C\u65E0\u300D\uFF09
1733
+ - \u6700\u591A 5 \u6761\uFF0C\u6BCF\u6761\u4E0D\u8D85\u8FC7 30 \u5B57\uFF1B\u53EA\u5217\u771F\u6B63\u6709\u7528\u7684\u65F6\u95F4\u3001\u91D1\u989D\u3001\u4EBA\u540D\u3001\u5355\u53F7\u3001\u94FE\u63A5\u3002
1734
+ - \u6CA1\u6709\u5C31\u5199\u300C\u65E0\u300D\u3002
1729
1735
 
1730
1736
  \u5EFA\u8BAE\u56DE\u590D\u8981\u70B9
1731
- \uFF081-3 \u6761\u4E2D\u6587\u8981\u70B9\uFF09
1732
-
1733
- \u8EAB\u4EFD\u89C4\u5219\uFF08\u7528\u6237\u8EAB\u4EFD\u4F1A\u5199\u5728\u90AE\u4EF6\u4FE1\u606F\u91CC\uFF09\uFF1A
1734
- - \u5982\u679C\u7528\u6237\u662F\u300C\u4EC5\u6284\u9001\u300D\u6216\u300C\u4E0D\u5728\u6536\u4EF6\u4EBA/\u6284\u9001\u5217\u8868\u300D\uFF1A\u9700\u8981\u4F60\u505A\u4EC0\u4E48\u53EA\u5199\u300C\u4F60\u53EA\u662F\u88AB\u6284\u9001\uFF0C\u901A\u5E38\u65E0\u9700\u64CD\u4F5C\u300D\u8FD9\u7C7B\u7ED3\u8BBA\uFF1B\u4E0D\u8981\u8F93\u51FA\u300C\u5EFA\u8BAE\u56DE\u590D\u8981\u70B9\u300D\u8FD9\u4E00\u6BB5
1735
- - \u5982\u679C\u7528\u6237\u662F\u300C\u53D1\u4EF6\u4EBA\u300D\uFF1A\u9700\u8981\u4F60\u505A\u4EC0\u4E48\u5199\u300C\u8FD9\u662F\u4F60\u53D1\u51FA\u7684\u90AE\u4EF6\uFF0C\u65E0\u9700\u64CD\u4F5C\u300D\uFF1B\u4E0D\u8981\u8F93\u51FA\u300C\u5EFA\u8BAE\u56DE\u590D\u8981\u70B9\u300D\u8FD9\u4E00\u6BB5
1736
- - \u53EA\u6709\u300C\u76F4\u63A5\u6536\u4EF6\u4EBA\u300D\u4E14\u90AE\u4EF6\u786E\u5B9E\u8981\u6C42\u884C\u52A8\u65F6\uFF0C\u624D\u7ED9\u300C\u5EFA\u8BAE\u56DE\u590D\u8981\u70B9\u300D
1737
+ - \u53EA\u6709\u5F53\u8EAB\u4EFD\u662F\u300C\u76F4\u63A5\u6536\u4EF6\u4EBA\u300D\u4E14\u90AE\u4EF6\u660E\u786E\u8981\u6C42\u4F60\u884C\u52A8\u65F6\u624D\u8F93\u51FA\uFF1B\u6700\u591A 2 \u6761\uFF0C\u6BCF\u6761\u4E0D\u8D85\u8FC7 25 \u5B57\u3002
1738
+ - \u5176\u4ED6\u8EAB\u4EFD\u4E0D\u8981\u8F93\u51FA\u8FD9\u4E2A\u5C0F\u6807\u9898\u3002
1737
1739
 
1738
- \u53EA\u4F9D\u636E\u90AE\u4EF6\u5185\u5BB9\uFF0C\u4E0D\u8981\u7F16\u9020\uFF0C\u4E0D\u8981\u8F93\u51FA\u601D\u8003\u8FC7\u7A0B\u3002`;
1740
+ \u4E0D\u8981\u590D\u8FF0\u539F\u6587\uFF0C\u4E0D\u8981\u89E3\u91CA\uFF0C\u4E0D\u8981\u8F93\u51FA\u601D\u8003\u8FC7\u7A0B\u3002`;
1739
1741
  var REPLY_SYSTEM = (language, style) => `\u4F60\u662F\u90AE\u4EF6\u5199\u4F5C\u52A9\u7406\u3002\u6839\u636E\u539F\u59CB\u90AE\u4EF6\u548C\u7528\u6237\u7684\u8981\u6C42\uFF0C\u5199\u4E00\u5C01\u53EF\u4EE5\u76F4\u63A5\u53D1\u9001\u7684\u56DE\u590D\u6B63\u6587\u3002
1740
1742
 
1741
1743
  \u8981\u6C42\uFF1A
@@ -1966,8 +1968,9 @@ var AiService = class {
1966
1968
  }
1967
1969
  async summarize(message, email, signal) {
1968
1970
  const output = await this.complete(SUMMARY_SYSTEM, contextOf(message, email), signal);
1971
+ const compact = compactSummary(output);
1969
1972
  const role = roleOf(message, email);
1970
- return role === "to" || role === "unknown" ? output : stripReplySuggestions(output);
1973
+ return role === "to" || role === "unknown" ? compact : stripReplySuggestions(compact);
1971
1974
  }
1972
1975
  async reply(account, message, options = {}, signal) {
1973
1976
  const style = this.style(account)?.profile ?? "";
@@ -2128,6 +2131,33 @@ function parseTaskJson(text2) {
2128
2131
  }
2129
2132
  return result.slice(0, 30);
2130
2133
  }
2134
+ function compactSummary(text2) {
2135
+ const sections = [];
2136
+ let current = { title: "", lines: [] };
2137
+ for (const raw of text2.split(/\r?\n/)) {
2138
+ const line2 = raw.trim();
2139
+ const heading = /^#{0,4}\s*(结论|需要你做什么|关键信息|建议回复要点)\s*[::]?\s*$/.exec(line2);
2140
+ if (heading !== null) {
2141
+ if (current.title !== "" || current.lines.length > 0) sections.push(current);
2142
+ current = { title: heading[1] ?? "", lines: [] };
2143
+ } else if (line2 !== "") {
2144
+ current.lines.push(line2.replace(/^[-*•]\s*/, "").trim());
2145
+ }
2146
+ }
2147
+ if (current.title !== "" || current.lines.length > 0) sections.push(current);
2148
+ if (sections.length === 0) return text2.trim();
2149
+ const limits = { \u7ED3\u8BBA: 2, \u9700\u8981\u4F60\u505A\u4EC0\u4E48: 3, \u5173\u952E\u4FE1\u606F: 5, \u5EFA\u8BAE\u56DE\u590D\u8981\u70B9: 2 };
2150
+ const output = [];
2151
+ for (const section of sections) {
2152
+ if (section.title === "") continue;
2153
+ const limit = limits[section.title] ?? 3;
2154
+ const lines = section.lines.filter((line2) => line2 !== "").slice(0, limit);
2155
+ if (lines.length === 0) continue;
2156
+ output.push(`${section.title}
2157
+ ${lines.join("\n")}`);
2158
+ }
2159
+ return output.join("\n\n");
2160
+ }
2131
2161
  function stripReplySuggestions(text2) {
2132
2162
  const lines = text2.split(/\r?\n/);
2133
2163
  const index = lines.findIndex((line2) => /^#{0,4}\s*建议回复要点\s*[::]?\s*$/.test(line2.trim()));
@@ -2380,7 +2410,7 @@ ${conversation.trim()}
2380
2410
  }
2381
2411
 
2382
2412
  // src/host/version.ts
2383
- var VERSION = "0.9.1";
2413
+ var VERSION = "0.10.0";
2384
2414
 
2385
2415
  // src/host/api.ts
2386
2416
  init_smtp();