sema-core 1.0.11 → 1.0.13

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 (325) hide show
  1. package/README.md +6 -11
  2. package/dist/core/Conversation.d.ts +6 -1
  3. package/dist/core/Conversation.d.ts.map +1 -1
  4. package/dist/core/Conversation.js +72 -28
  5. package/dist/core/Conversation.js.map +1 -1
  6. package/dist/core/RunTools.d.ts.map +1 -1
  7. package/dist/core/RunTools.js +1 -1
  8. package/dist/core/RunTools.js.map +1 -1
  9. package/dist/core/SemaCore.d.ts +16 -0
  10. package/dist/core/SemaCore.d.ts.map +1 -1
  11. package/dist/core/SemaCore.js +30 -3
  12. package/dist/core/SemaCore.js.map +1 -1
  13. package/dist/core/SemaEngine.d.ts +2 -18
  14. package/dist/core/SemaEngine.d.ts.map +1 -1
  15. package/dist/core/SemaEngine.js +101 -131
  16. package/dist/core/SemaEngine.js.map +1 -1
  17. package/dist/events/EventSystem.d.ts.map +1 -1
  18. package/dist/events/EventSystem.js +6 -2
  19. package/dist/events/EventSystem.js.map +1 -1
  20. package/dist/events/types.d.ts +60 -13
  21. package/dist/events/types.d.ts.map +1 -1
  22. package/dist/events/types.js +0 -1
  23. package/dist/events/types.js.map +1 -1
  24. package/dist/manager/ConfManager.d.ts.map +1 -1
  25. package/dist/manager/ConfManager.js +3 -1
  26. package/dist/manager/ConfManager.js.map +1 -1
  27. package/dist/manager/CronManager.d.ts +52 -0
  28. package/dist/manager/CronManager.d.ts.map +1 -0
  29. package/dist/manager/CronManager.js +426 -0
  30. package/dist/manager/CronManager.js.map +1 -0
  31. package/dist/manager/PermissionManager.d.ts +1 -1
  32. package/dist/manager/PermissionManager.d.ts.map +1 -1
  33. package/dist/manager/PermissionManager.js +63 -12
  34. package/dist/manager/PermissionManager.js.map +1 -1
  35. package/dist/manager/StateManager.d.ts +79 -11
  36. package/dist/manager/StateManager.d.ts.map +1 -1
  37. package/dist/manager/StateManager.js +287 -4
  38. package/dist/manager/StateManager.js.map +1 -1
  39. package/dist/manager/TaskManager.d.ts +106 -0
  40. package/dist/manager/TaskManager.d.ts.map +1 -0
  41. package/dist/manager/TaskManager.js +664 -0
  42. package/dist/manager/TaskManager.js.map +1 -0
  43. package/dist/services/agents/defaultBuiltInAgentsConfs.js +3 -3
  44. package/dist/services/agents/defaultBuiltInAgentsConfs.js.map +1 -1
  45. package/dist/services/agents/systemReminder.d.ts.map +1 -1
  46. package/dist/services/agents/systemReminder.js +8 -118
  47. package/dist/services/agents/systemReminder.js.map +1 -1
  48. package/dist/services/api/adapt/anthropic.js +2 -2
  49. package/dist/services/api/adapt/anthropic.js.map +1 -1
  50. package/dist/services/api/adapt/openai.js +2 -2
  51. package/dist/services/api/adapt/openai.js.map +1 -1
  52. package/dist/services/api/adapt/util.d.ts +1 -1
  53. package/dist/services/api/adapt/util.d.ts.map +1 -1
  54. package/dist/services/api/adapt/util.js +2 -2
  55. package/dist/services/api/adapt/util.js.map +1 -1
  56. package/dist/services/api/cache.d.ts.map +1 -1
  57. package/dist/services/api/cache.js +1 -3
  58. package/dist/services/api/cache.js.map +1 -1
  59. package/dist/services/api/queryLLM.d.ts.map +1 -1
  60. package/dist/services/api/queryLLM.js +5 -0
  61. package/dist/services/api/queryLLM.js.map +1 -1
  62. package/dist/services/commands/runCommand.d.ts.map +1 -1
  63. package/dist/services/commands/runCommand.js +12 -0
  64. package/dist/services/commands/runCommand.js.map +1 -1
  65. package/dist/services/mcp/MCPManager.d.ts.map +1 -1
  66. package/dist/services/mcp/MCPManager.js +6 -1
  67. package/dist/services/mcp/MCPManager.js.map +1 -1
  68. package/dist/services/plugins/pluginsManager.d.ts.map +1 -1
  69. package/dist/services/plugins/pluginsManager.js +8 -1
  70. package/dist/services/plugins/pluginsManager.js.map +1 -1
  71. package/dist/services/rules/rulesManager.d.ts +51 -0
  72. package/dist/services/rules/rulesManager.d.ts.map +1 -0
  73. package/dist/services/rules/rulesManager.js +192 -0
  74. package/dist/services/rules/rulesManager.js.map +1 -0
  75. package/dist/tools/Agent/Agent.d.ts +19 -11
  76. package/dist/tools/Agent/Agent.d.ts.map +1 -1
  77. package/dist/tools/Agent/Agent.js +249 -72
  78. package/dist/tools/Agent/Agent.js.map +1 -1
  79. package/dist/tools/Agent/prompt.d.ts.map +1 -1
  80. package/dist/tools/Agent/prompt.js +7 -9
  81. package/dist/tools/Agent/prompt.js.map +1 -1
  82. package/dist/tools/Bash/Bash.d.ts +21 -11
  83. package/dist/tools/Bash/Bash.d.ts.map +1 -1
  84. package/dist/tools/Bash/Bash.js +74 -17
  85. package/dist/tools/Bash/Bash.js.map +1 -1
  86. package/dist/tools/Bash/prompt.d.ts.map +1 -1
  87. package/dist/tools/Bash/prompt.js +53 -70
  88. package/dist/tools/Bash/prompt.js.map +1 -1
  89. package/dist/tools/Bash/utils.d.ts +5 -1
  90. package/dist/tools/Bash/utils.d.ts.map +1 -1
  91. package/dist/tools/Bash/utils.js +24 -4
  92. package/dist/tools/Bash/utils.js.map +1 -1
  93. package/dist/tools/CronCreate/CronCreate.d.ts +68 -0
  94. package/dist/tools/CronCreate/CronCreate.d.ts.map +1 -0
  95. package/dist/tools/CronCreate/CronCreate.js +75 -0
  96. package/dist/tools/CronCreate/CronCreate.js.map +1 -0
  97. package/dist/tools/CronCreate/prompt.d.ts +3 -0
  98. package/dist/tools/CronCreate/prompt.d.ts.map +1 -0
  99. package/dist/tools/CronCreate/prompt.js +41 -0
  100. package/dist/tools/CronCreate/prompt.js.map +1 -0
  101. package/dist/tools/CronDelete/CronDelete.d.ts +45 -0
  102. package/dist/tools/CronDelete/CronDelete.d.ts.map +1 -0
  103. package/dist/tools/CronDelete/CronDelete.js +51 -0
  104. package/dist/tools/CronDelete/CronDelete.js.map +1 -0
  105. package/dist/tools/CronDelete/prompt.d.ts +3 -0
  106. package/dist/tools/CronDelete/prompt.d.ts.map +1 -0
  107. package/dist/tools/CronDelete/prompt.js +6 -0
  108. package/dist/tools/CronDelete/prompt.js.map +1 -0
  109. package/dist/tools/CronList/CronList.d.ts +33 -0
  110. package/dist/tools/CronList/CronList.d.ts.map +1 -0
  111. package/dist/tools/CronList/CronList.js +55 -0
  112. package/dist/tools/CronList/CronList.js.map +1 -0
  113. package/dist/tools/CronList/prompt.d.ts +3 -0
  114. package/dist/tools/CronList/prompt.d.ts.map +1 -0
  115. package/dist/tools/CronList/prompt.js +6 -0
  116. package/dist/tools/CronList/prompt.js.map +1 -0
  117. package/dist/tools/Edit/Edit.d.ts.map +1 -1
  118. package/dist/tools/Edit/Edit.js +7 -3
  119. package/dist/tools/Edit/Edit.js.map +1 -1
  120. package/dist/tools/Edit/utils.d.ts.map +1 -1
  121. package/dist/tools/Edit/utils.js +14 -5
  122. package/dist/tools/Edit/utils.js.map +1 -1
  123. package/dist/tools/Grep/Grep.d.ts +4 -4
  124. package/dist/tools/NotebookEdit/NotebookEdit.js +1 -1
  125. package/dist/tools/NotebookEdit/NotebookEdit.js.map +1 -1
  126. package/dist/tools/Read/Read.d.ts +74 -3
  127. package/dist/tools/Read/Read.d.ts.map +1 -1
  128. package/dist/tools/Read/Read.js +188 -18
  129. package/dist/tools/Read/Read.js.map +1 -1
  130. package/dist/tools/Read/prompt.d.ts +1 -1
  131. package/dist/tools/Read/prompt.d.ts.map +1 -1
  132. package/dist/tools/Read/prompt.js +2 -1
  133. package/dist/tools/Read/prompt.js.map +1 -1
  134. package/dist/tools/Skill/Skill.d.ts +2 -1
  135. package/dist/tools/Skill/Skill.d.ts.map +1 -1
  136. package/dist/tools/Skill/Skill.js +3 -2
  137. package/dist/tools/Skill/Skill.js.map +1 -1
  138. package/dist/tools/TaskCreate/TaskCreate.d.ts +54 -0
  139. package/dist/tools/TaskCreate/TaskCreate.d.ts.map +1 -0
  140. package/dist/tools/TaskCreate/TaskCreate.js +51 -0
  141. package/dist/tools/TaskCreate/TaskCreate.js.map +1 -0
  142. package/dist/tools/TaskCreate/prompt.d.ts +3 -0
  143. package/dist/tools/TaskCreate/prompt.d.ts.map +1 -0
  144. package/dist/tools/TaskCreate/prompt.js +45 -0
  145. package/dist/tools/TaskCreate/prompt.js.map +1 -0
  146. package/dist/tools/TaskGet/TaskGet.d.ts +34 -0
  147. package/dist/tools/TaskGet/TaskGet.d.ts.map +1 -0
  148. package/dist/tools/TaskGet/TaskGet.js +57 -0
  149. package/dist/tools/TaskGet/TaskGet.js.map +1 -0
  150. package/dist/tools/TaskGet/prompt.d.ts +3 -0
  151. package/dist/tools/TaskGet/prompt.d.ts.map +1 -0
  152. package/dist/tools/TaskGet/prompt.js +26 -0
  153. package/dist/tools/TaskGet/prompt.js.map +1 -0
  154. package/dist/tools/TaskList/TaskList.d.ts +27 -0
  155. package/dist/tools/TaskList/TaskList.d.ts.map +1 -0
  156. package/dist/tools/TaskList/TaskList.js +56 -0
  157. package/dist/tools/TaskList/TaskList.js.map +1 -0
  158. package/dist/tools/TaskList/prompt.d.ts +3 -0
  159. package/dist/tools/TaskList/prompt.d.ts.map +1 -0
  160. package/dist/tools/TaskList/prompt.js +25 -0
  161. package/dist/tools/TaskList/prompt.js.map +1 -0
  162. package/dist/tools/TaskOutput/TaskOutput.d.ts +58 -0
  163. package/dist/tools/TaskOutput/TaskOutput.d.ts.map +1 -0
  164. package/dist/tools/TaskOutput/TaskOutput.js +95 -0
  165. package/dist/tools/TaskOutput/TaskOutput.js.map +1 -0
  166. package/dist/tools/TaskStop/TaskStop.d.ts +50 -0
  167. package/dist/tools/TaskStop/TaskStop.d.ts.map +1 -0
  168. package/dist/tools/TaskStop/TaskStop.js +69 -0
  169. package/dist/tools/TaskStop/TaskStop.js.map +1 -0
  170. package/dist/tools/TaskUpdate/TaskUpdate.d.ts +88 -0
  171. package/dist/tools/TaskUpdate/TaskUpdate.d.ts.map +1 -0
  172. package/dist/tools/TaskUpdate/TaskUpdate.js +115 -0
  173. package/dist/tools/TaskUpdate/TaskUpdate.js.map +1 -0
  174. package/dist/tools/TaskUpdate/prompt.d.ts +3 -0
  175. package/dist/tools/TaskUpdate/prompt.d.ts.map +1 -0
  176. package/dist/tools/TaskUpdate/prompt.js +80 -0
  177. package/dist/tools/TaskUpdate/prompt.js.map +1 -0
  178. package/dist/tools/WebFetch/WebFetch.d.ts +62 -0
  179. package/dist/tools/WebFetch/WebFetch.d.ts.map +1 -0
  180. package/dist/tools/WebFetch/WebFetch.js +143 -0
  181. package/dist/tools/WebFetch/WebFetch.js.map +1 -0
  182. package/dist/tools/WebFetch/prompt.d.ts +4 -0
  183. package/dist/tools/WebFetch/prompt.d.ts.map +1 -0
  184. package/dist/tools/WebFetch/prompt.js +38 -0
  185. package/dist/tools/WebFetch/prompt.js.map +1 -0
  186. package/dist/tools/WebFetch/utils.d.ts +20 -0
  187. package/dist/tools/WebFetch/utils.d.ts.map +1 -0
  188. package/dist/tools/WebFetch/utils.js +223 -0
  189. package/dist/tools/WebFetch/utils.js.map +1 -0
  190. package/dist/tools/Write/Write.js +1 -1
  191. package/dist/tools/Write/Write.js.map +1 -1
  192. package/dist/tools/base/Tool.d.ts +1 -0
  193. package/dist/tools/base/Tool.d.ts.map +1 -1
  194. package/dist/tools/base/tools.d.ts +4 -2
  195. package/dist/tools/base/tools.d.ts.map +1 -1
  196. package/dist/tools/base/tools.js +61 -14
  197. package/dist/tools/base/tools.js.map +1 -1
  198. package/dist/types/cron.d.ts +21 -0
  199. package/dist/types/cron.d.ts.map +1 -0
  200. package/dist/types/cron.js +6 -0
  201. package/dist/types/cron.js.map +1 -0
  202. package/dist/types/index.d.ts +9 -1
  203. package/dist/types/index.d.ts.map +1 -1
  204. package/dist/types/index.js +4 -2
  205. package/dist/types/index.js.map +1 -1
  206. package/dist/types/rule.d.ts +8 -0
  207. package/dist/types/rule.d.ts.map +1 -0
  208. package/dist/types/rule.js +3 -0
  209. package/dist/types/rule.js.map +1 -0
  210. package/dist/types/task.d.ts +93 -0
  211. package/dist/types/task.d.ts.map +1 -0
  212. package/dist/types/task.js +3 -0
  213. package/dist/types/task.js.map +1 -0
  214. package/dist/types/todoTask.d.ts +29 -0
  215. package/dist/types/todoTask.d.ts.map +1 -0
  216. package/dist/types/todoTask.js +6 -0
  217. package/dist/types/todoTask.js.map +1 -0
  218. package/dist/util/assembleTools.d.ts +6 -0
  219. package/dist/util/assembleTools.d.ts.map +1 -0
  220. package/dist/util/assembleTools.js +17 -0
  221. package/dist/util/assembleTools.js.map +1 -0
  222. package/dist/util/btw.d.ts +6 -0
  223. package/dist/util/btw.d.ts.map +1 -0
  224. package/dist/util/btw.js +80 -0
  225. package/dist/util/btw.js.map +1 -0
  226. package/dist/util/compact.d.ts +16 -4
  227. package/dist/util/compact.d.ts.map +1 -1
  228. package/dist/util/compact.js +12 -18
  229. package/dist/util/compact.js.map +1 -1
  230. package/dist/util/cron.d.ts +17 -0
  231. package/dist/util/cron.d.ts.map +1 -0
  232. package/dist/util/cron.js +82 -0
  233. package/dist/util/cron.js.map +1 -0
  234. package/dist/util/file.d.ts +16 -0
  235. package/dist/util/file.d.ts.map +1 -1
  236. package/dist/util/file.js +55 -0
  237. package/dist/util/file.js.map +1 -1
  238. package/dist/util/fileReference.d.ts.map +1 -1
  239. package/dist/util/fileReference.js +10 -1
  240. package/dist/util/fileReference.js.map +1 -1
  241. package/dist/util/format.d.ts +6 -0
  242. package/dist/util/format.d.ts.map +1 -1
  243. package/dist/util/format.js +17 -0
  244. package/dist/util/format.js.map +1 -1
  245. package/dist/util/history.d.ts +4 -1
  246. package/dist/util/history.d.ts.map +1 -1
  247. package/dist/util/history.js +9 -5
  248. package/dist/util/history.js.map +1 -1
  249. package/dist/util/inputQueue.d.ts +19 -0
  250. package/dist/util/inputQueue.d.ts.map +1 -0
  251. package/dist/util/inputQueue.js +30 -0
  252. package/dist/util/inputQueue.js.map +1 -0
  253. package/dist/util/message.d.ts +4 -0
  254. package/dist/util/message.d.ts.map +1 -1
  255. package/dist/util/message.js +27 -0
  256. package/dist/util/message.js.map +1 -1
  257. package/dist/util/pdf.d.ts +83 -0
  258. package/dist/util/pdf.d.ts.map +1 -0
  259. package/dist/util/pdf.js +472 -0
  260. package/dist/util/pdf.js.map +1 -0
  261. package/dist/util/process.d.ts +10 -0
  262. package/dist/util/process.d.ts.map +1 -0
  263. package/dist/util/process.js +88 -0
  264. package/dist/util/process.js.map +1 -0
  265. package/dist/util/savePath.d.ts +0 -11
  266. package/dist/util/savePath.d.ts.map +1 -1
  267. package/dist/util/savePath.js +0 -17
  268. package/dist/util/savePath.js.map +1 -1
  269. package/dist/util/shell.d.ts +10 -1
  270. package/dist/util/shell.d.ts.map +1 -1
  271. package/dist/util/shell.js +89 -34
  272. package/dist/util/shell.js.map +1 -1
  273. package/dist/util/topic.d.ts +7 -0
  274. package/dist/util/topic.d.ts.map +1 -1
  275. package/dist/util/topic.js +40 -0
  276. package/dist/util/topic.js.map +1 -1
  277. package/package.json +2 -1
  278. package/dist/services/command/customCommands.d.ts +0 -1
  279. package/dist/services/command/customCommands.d.ts.map +0 -1
  280. package/dist/services/command/customCommands.js +0 -197
  281. package/dist/services/command/customCommands.js.map +0 -1
  282. package/dist/services/command/runCommand.d.ts +0 -18
  283. package/dist/services/command/runCommand.d.ts.map +0 -1
  284. package/dist/services/command/runCommand.js +0 -147
  285. package/dist/services/command/runCommand.js.map +0 -1
  286. package/dist/services/plugins/customCommands.d.ts +0 -29
  287. package/dist/services/plugins/customCommands.d.ts.map +0 -1
  288. package/dist/services/plugins/customCommands.js +0 -227
  289. package/dist/services/plugins/customCommands.js.map +0 -1
  290. package/dist/services/skill/skillLoader.d.ts +0 -17
  291. package/dist/services/skill/skillLoader.d.ts.map +0 -1
  292. package/dist/services/skill/skillLoader.js +0 -122
  293. package/dist/services/skill/skillLoader.js.map +0 -1
  294. package/dist/services/skill/skillParser.d.ts +0 -15
  295. package/dist/services/skill/skillParser.d.ts.map +0 -1
  296. package/dist/services/skill/skillParser.js +0 -66
  297. package/dist/services/skill/skillParser.js.map +0 -1
  298. package/dist/services/skill/skillRegistry.d.ts +0 -34
  299. package/dist/services/skill/skillRegistry.d.ts.map +0 -1
  300. package/dist/services/skill/skillRegistry.js +0 -98
  301. package/dist/services/skill/skillRegistry.js.map +0 -1
  302. package/dist/services/skill/skillsManager.d.ts +0 -79
  303. package/dist/services/skill/skillsManager.d.ts.map +0 -1
  304. package/dist/services/skill/skillsManager.js +0 -289
  305. package/dist/services/skill/skillsManager.js.map +0 -1
  306. package/dist/tools/Task/Task.d.ts +0 -59
  307. package/dist/tools/Task/Task.d.ts.map +0 -1
  308. package/dist/tools/Task/Task.js +0 -212
  309. package/dist/tools/Task/Task.js.map +0 -1
  310. package/dist/tools/Task/prompt.d.ts +0 -6
  311. package/dist/tools/Task/prompt.d.ts.map +0 -1
  312. package/dist/tools/Task/prompt.js +0 -75
  313. package/dist/tools/Task/prompt.js.map +0 -1
  314. package/dist/util/frontmatter.d.ts +0 -35
  315. package/dist/util/frontmatter.d.ts.map +0 -1
  316. package/dist/util/frontmatter.js +0 -119
  317. package/dist/util/frontmatter.js.map +0 -1
  318. package/dist/util/rules.d.ts +0 -6
  319. package/dist/util/rules.d.ts.map +0 -1
  320. package/dist/util/rules.js +0 -162
  321. package/dist/util/rules.js.map +0 -1
  322. package/dist/util/systemReminder.d.ts +0 -10
  323. package/dist/util/systemReminder.d.ts.map +0 -1
  324. package/dist/util/systemReminder.js +0 -177
  325. package/dist/util/systemReminder.js.map +0 -1
@@ -0,0 +1,83 @@
1
+ export declare const PDF_MAX_EXTRACT_SIZE: number;
2
+ export declare const PDF_TARGET_RAW_SIZE: number;
3
+ export declare const PDF_EXTRACT_SIZE_THRESHOLD: number;
4
+ export declare const PDF_AT_MENTION_INLINE_THRESHOLD = 10;
5
+ export declare const PDF_MAX_PAGES_PER_READ = 20;
6
+ export type PDFError = {
7
+ reason: 'empty' | 'too_large' | 'password_protected' | 'corrupted' | 'unknown' | 'unavailable' | 'python_unavailable';
8
+ message: string;
9
+ };
10
+ export type PDFResult<T> = {
11
+ success: true;
12
+ data: T;
13
+ } | {
14
+ success: false;
15
+ error: PDFError;
16
+ };
17
+ /**
18
+ * 读取 PDF 文件并返回 base64 编码的数据
19
+ * @param filePath PDF 文件路径
20
+ * @returns 包含 PDF 数据或结构化错误的结果
21
+ */
22
+ export declare function readPDF(filePath: string): Promise<PDFResult<{
23
+ type: 'pdf';
24
+ file: {
25
+ filePath: string;
26
+ base64: string;
27
+ originalSize: number;
28
+ };
29
+ }>>;
30
+ /**
31
+ * 使用 `pdfinfo` (来自 poppler-utils) 获取 PDF 文件的页数。
32
+ * 如果 pdfinfo 不可用或无法确定页数,则返回 `null`。
33
+ */
34
+ export declare function getPDFPageCount(filePath: string): Promise<number | null>;
35
+ export type PDFExtractPagesResult = {
36
+ type: 'parts';
37
+ file: {
38
+ filePath: string;
39
+ originalSize: number;
40
+ count: number;
41
+ outputDir: string;
42
+ };
43
+ };
44
+ /**
45
+ * 重置 pdftoppm 可用性缓存。仅供测试使用。
46
+ */
47
+ export declare function resetPdftoppmCache(): void;
48
+ /**
49
+ * 检查 `pdftoppm` 二进制文件 (来自 poppler-utils) 是否可用。
50
+ * 结果会在进程生命周期内缓存。
51
+ */
52
+ export declare function isPdftoppmAvailable(): Promise<boolean>;
53
+ /**
54
+ * 使用 pdftoppm 提取 PDF 页面为 JPEG 图像。
55
+ * 在输出目录中生成 page-01.jpg, page-02.jpg 等。
56
+ * 这使得可以读取大型 PDF 并适用于所有 API 提供商。
57
+ *
58
+ * @param filePath PDF 文件路径
59
+ * @param options 可选的页面范围 (从 1 开始,包含首尾)
60
+ */
61
+ export declare function extractPDFPages(filePath: string, options?: {
62
+ firstPage?: number;
63
+ lastPage?: number;
64
+ }): Promise<PDFResult<PDFExtractPagesResult>>;
65
+ /**
66
+ * 解析 PDF 页面范围字符串 (例如 "1-5", "3", "10-20")
67
+ * @param pages 页面范围字符串
68
+ * @returns 解析后的页面范围或 null (如果无效)
69
+ */
70
+ export declare function parsePDFPageRange(pages: string): {
71
+ firstPage: number;
72
+ lastPage: number;
73
+ } | null;
74
+ /**
75
+ * 检查文件扩展名是否为 PDF
76
+ */
77
+ export declare function isPDFExtension(ext: string): boolean;
78
+ /**
79
+ * 检查当前 API 是否支持 PDF
80
+ * 注意:这是一个简化版本,实际应该检查使用的模型是否支持 PDF
81
+ */
82
+ export declare function isPDFSupported(): boolean;
83
+ //# sourceMappingURL=pdf.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"pdf.d.ts","sourceRoot":"","sources":["../../src/util/pdf.ts"],"names":[],"mappings":"AAQA,eAAO,MAAM,oBAAoB,QAAoB,CAAA;AACrD,eAAO,MAAM,mBAAmB,QAAmB,CAAA;AACnD,eAAO,MAAM,0BAA0B,QAAkB,CAAA;AACzD,eAAO,MAAM,+BAA+B,KAAK,CAAA;AACjD,eAAO,MAAM,sBAAsB,KAAK,CAAA;AAExC,MAAM,MAAM,QAAQ,GAAG;IACrB,MAAM,EACF,OAAO,GACP,WAAW,GACX,oBAAoB,GACpB,WAAW,GACX,SAAS,GACT,aAAa,GACb,oBAAoB,CAAA;IACxB,OAAO,EAAE,MAAM,CAAA;CAChB,CAAA;AAED,MAAM,MAAM,SAAS,CAAC,CAAC,IACnB;IAAE,OAAO,EAAE,IAAI,CAAC;IAAC,IAAI,EAAE,CAAC,CAAA;CAAE,GAC1B;IAAE,OAAO,EAAE,KAAK,CAAC;IAAC,KAAK,EAAE,QAAQ,CAAA;CAAE,CAAA;AAEvC;;;;GAIG;AACH,wBAAsB,OAAO,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CACtD,SAAS,CAAC;IACR,IAAI,EAAE,KAAK,CAAA;IACX,IAAI,EAAE;QACJ,QAAQ,EAAE,MAAM,CAAA;QAChB,MAAM,EAAE,MAAM,CAAA;QACd,YAAY,EAAE,MAAM,CAAA;KACrB,CAAA;CACF,CAAC,CACH,CAqEA;AAED;;;GAGG;AACH,wBAAsB,eAAe,CACnC,QAAQ,EAAE,MAAM,GACf,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC,CAgBxB;AAED,MAAM,MAAM,qBAAqB,GAAG;IAClC,IAAI,EAAE,OAAO,CAAA;IACb,IAAI,EAAE;QACJ,QAAQ,EAAE,MAAM,CAAA;QAChB,YAAY,EAAE,MAAM,CAAA;QACpB,KAAK,EAAE,MAAM,CAAA;QACb,SAAS,EAAE,MAAM,CAAA;KAClB,CAAA;CACF,CAAA;AAKD;;GAEG;AACH,wBAAgB,kBAAkB,IAAI,IAAI,CAEzC;AAiCD;;;GAGG;AACH,wBAAsB,mBAAmB,IAAI,OAAO,CAAC,OAAO,CAAC,CAM5D;AA2GD;;;;;;;GAOG;AACH,wBAAsB,eAAe,CACnC,QAAQ,EAAE,MAAM,EAChB,OAAO,CAAC,EAAE;IAAE,SAAS,CAAC,EAAE,MAAM,CAAC;IAAC,QAAQ,CAAC,EAAE,MAAM,CAAA;CAAE,GAClD,OAAO,CAAC,SAAS,CAAC,qBAAqB,CAAC,CAAC,CA4J3C;AAED;;;;GAIG;AACH,wBAAgB,iBAAiB,CAAC,KAAK,EAAE,MAAM,GAAG;IAChD,SAAS,EAAE,MAAM,CAAA;IACjB,QAAQ,EAAE,MAAM,CAAA;CACjB,GAAG,IAAI,CAoBP;AAED;;GAEG;AACH,wBAAgB,cAAc,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAEnD;AAED;;;GAGG;AACH,wBAAgB,cAAc,IAAI,OAAO,CAIxC"}
@@ -0,0 +1,472 @@
1
+ "use strict";
2
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
+ if (k2 === undefined) k2 = k;
4
+ var desc = Object.getOwnPropertyDescriptor(m, k);
5
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
+ desc = { enumerable: true, get: function() { return m[k]; } };
7
+ }
8
+ Object.defineProperty(o, k2, desc);
9
+ }) : (function(o, m, k, k2) {
10
+ if (k2 === undefined) k2 = k;
11
+ o[k2] = m[k];
12
+ }));
13
+ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
14
+ Object.defineProperty(o, "default", { enumerable: true, value: v });
15
+ }) : function(o, v) {
16
+ o["default"] = v;
17
+ });
18
+ var __importStar = (this && this.__importStar) || (function () {
19
+ var ownKeys = function(o) {
20
+ ownKeys = Object.getOwnPropertyNames || function (o) {
21
+ var ar = [];
22
+ for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
23
+ return ar;
24
+ };
25
+ return ownKeys(o);
26
+ };
27
+ return function (mod) {
28
+ if (mod && mod.__esModule) return mod;
29
+ var result = {};
30
+ if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
31
+ __setModuleDefault(result, mod);
32
+ return result;
33
+ };
34
+ })();
35
+ Object.defineProperty(exports, "__esModule", { value: true });
36
+ exports.PDF_MAX_PAGES_PER_READ = exports.PDF_AT_MENTION_INLINE_THRESHOLD = exports.PDF_EXTRACT_SIZE_THRESHOLD = exports.PDF_TARGET_RAW_SIZE = exports.PDF_MAX_EXTRACT_SIZE = void 0;
37
+ exports.readPDF = readPDF;
38
+ exports.getPDFPageCount = getPDFPageCount;
39
+ exports.resetPdftoppmCache = resetPdftoppmCache;
40
+ exports.isPdftoppmAvailable = isPdftoppmAvailable;
41
+ exports.extractPDFPages = extractPDFPages;
42
+ exports.parsePDFPageRange = parsePDFPageRange;
43
+ exports.isPDFExtension = isPDFExtension;
44
+ exports.isPDFSupported = isPDFSupported;
45
+ const crypto_1 = require("crypto");
46
+ const promises_1 = require("fs/promises");
47
+ const path_1 = require("path");
48
+ const exec_1 = require("./exec");
49
+ const format_1 = require("./format");
50
+ const os = __importStar(require("os"));
51
+ // PDF 文件大小限制
52
+ exports.PDF_MAX_EXTRACT_SIZE = 100 * 1024 * 1024; // 100MB
53
+ exports.PDF_TARGET_RAW_SIZE = 20 * 1024 * 1024; // 20MB (考虑 base64 编码后约 26MB)
54
+ exports.PDF_EXTRACT_SIZE_THRESHOLD = 5 * 1024 * 1024; // 5MB
55
+ exports.PDF_AT_MENTION_INLINE_THRESHOLD = 10; // 超过 10 页需要指定页码范围
56
+ exports.PDF_MAX_PAGES_PER_READ = 20; // 每次最多读取 20 页
57
+ /**
58
+ * 读取 PDF 文件并返回 base64 编码的数据
59
+ * @param filePath PDF 文件路径
60
+ * @returns 包含 PDF 数据或结构化错误的结果
61
+ */
62
+ async function readPDF(filePath) {
63
+ try {
64
+ const stats = await Promise.resolve().then(() => __importStar(require('fs/promises'))).then(fs => fs.stat(filePath));
65
+ const originalSize = stats.size;
66
+ // 检查文件是否为空
67
+ if (originalSize === 0) {
68
+ return {
69
+ success: false,
70
+ error: { reason: 'empty', message: `PDF 文件为空: ${filePath}` },
71
+ };
72
+ }
73
+ // 检查 PDF 是否超过最大大小
74
+ // API 有 32MB 的总请求限制。base64 编码后增大约 33%,
75
+ // 因此 PDF 原始大小必须小于约 20MB 才能留出对话上下文的空间。
76
+ if (originalSize > exports.PDF_TARGET_RAW_SIZE) {
77
+ return {
78
+ success: false,
79
+ error: {
80
+ reason: 'too_large',
81
+ message: `PDF 文件超过允许的最大大小 ${(0, format_1.formatSize)(exports.PDF_TARGET_RAW_SIZE)}。`,
82
+ },
83
+ };
84
+ }
85
+ const fileBuffer = await (0, promises_1.readFile)(filePath);
86
+ // 验证 PDF 魔术字节 — 拒绝不是真正 PDF 的文件
87
+ // (例如重命名为 .pdf 的 HTML 文件)在它们进入对话上下文之前。
88
+ // 一旦无效的 PDF 文档块进入消息历史,后续的每个
89
+ // API 调用都会失败,返回 400 "The PDF specified was not valid",并且会话
90
+ // 变得无法恢复,除非使用 /clear。
91
+ const header = fileBuffer.subarray(0, 5).toString('ascii');
92
+ if (!header.startsWith('%PDF-')) {
93
+ return {
94
+ success: false,
95
+ error: {
96
+ reason: 'corrupted',
97
+ message: `文件不是有效的 PDF (缺少 %PDF- 头): ${filePath}`,
98
+ },
99
+ };
100
+ }
101
+ const base64 = fileBuffer.toString('base64');
102
+ // 注意:我们无法在不解析 PDF 的情况下检查页数
103
+ // API 会强制执行 100 页的限制,如果超过则返回错误
104
+ return {
105
+ success: true,
106
+ data: {
107
+ type: 'pdf',
108
+ file: {
109
+ filePath,
110
+ base64,
111
+ originalSize,
112
+ },
113
+ },
114
+ };
115
+ }
116
+ catch (e) {
117
+ return {
118
+ success: false,
119
+ error: {
120
+ reason: 'unknown',
121
+ message: e instanceof Error ? e.message : String(e),
122
+ },
123
+ };
124
+ }
125
+ }
126
+ /**
127
+ * 使用 `pdfinfo` (来自 poppler-utils) 获取 PDF 文件的页数。
128
+ * 如果 pdfinfo 不可用或无法确定页数,则返回 `null`。
129
+ */
130
+ async function getPDFPageCount(filePath) {
131
+ const { code, stdout } = await (0, exec_1.execFileNoThrow)('pdfinfo', [filePath], undefined, 10_000);
132
+ if (code !== 0) {
133
+ return null;
134
+ }
135
+ const match = /^Pages:\s+(\d+)/m.exec(stdout);
136
+ if (!match) {
137
+ return null;
138
+ }
139
+ const count = parseInt(match[1], 10);
140
+ return isNaN(count) ? null : count;
141
+ }
142
+ let pdftoppmAvailable;
143
+ let pythonPdfAvailable;
144
+ /**
145
+ * 重置 pdftoppm 可用性缓存。仅供测试使用。
146
+ */
147
+ function resetPdftoppmCache() {
148
+ pdftoppmAvailable = undefined;
149
+ }
150
+ /**
151
+ * 检查是否为 Windows 系统
152
+ */
153
+ function isWindows() {
154
+ return os.platform() === 'win32';
155
+ }
156
+ /**
157
+ * 检查 Python 和 PyPDF2/pypdf 是否可用
158
+ */
159
+ async function isPythonPdfAvailable() {
160
+ if (pythonPdfAvailable !== undefined)
161
+ return pythonPdfAvailable;
162
+ // 尝试导入 pypdf (优先) 或 PyPDF2
163
+ const testScript = `
164
+ try:
165
+ import pypdf
166
+ print('pypdf')
167
+ except ImportError:
168
+ try:
169
+ import PyPDF2
170
+ print('PyPDF2')
171
+ except ImportError:
172
+ exit(1)
173
+ `;
174
+ const { code } = await (0, exec_1.execFileNoThrow)('python', ['-c', testScript], undefined, 5000);
175
+ pythonPdfAvailable = code === 0;
176
+ return pythonPdfAvailable;
177
+ }
178
+ /**
179
+ * 检查 `pdftoppm` 二进制文件 (来自 poppler-utils) 是否可用。
180
+ * 结果会在进程生命周期内缓存。
181
+ */
182
+ async function isPdftoppmAvailable() {
183
+ if (pdftoppmAvailable !== undefined)
184
+ return pdftoppmAvailable;
185
+ const { code, stderr } = await (0, exec_1.execFileNoThrow)('pdftoppm', ['-v'], undefined, 5000);
186
+ // pdftoppm 将版本信息打印到 stderr 并退出 0 (或在旧版本上有时为 99)
187
+ pdftoppmAvailable = code === 0 || stderr.length > 0;
188
+ return pdftoppmAvailable;
189
+ }
190
+ /**
191
+ * 使用 Python (pypdf/PyPDF2) 提取 PDF 文本内容
192
+ */
193
+ async function extractPDFTextWithPython(filePath, options) {
194
+ try {
195
+ const pythonScript = `
196
+ import sys
197
+ import json
198
+ import io
199
+
200
+ # 强制使用 UTF-8 编码输出,避免 Windows 下 GBK 编码问题
201
+ sys.stdout = io.TextIOWrapper(sys.stdout.buffer, encoding='utf-8')
202
+ sys.stderr = io.TextIOWrapper(sys.stderr.buffer, encoding='utf-8')
203
+
204
+ try:
205
+ import pypdf as pdf_lib
206
+ except ImportError:
207
+ import PyPDF2 as pdf_lib
208
+
209
+ try:
210
+ with open(r'${filePath.replace(/\\/g, '\\\\')}', 'rb') as f:
211
+ reader = pdf_lib.PdfReader(f)
212
+ total_pages = len(reader.pages)
213
+
214
+ first_page = ${options?.firstPage ?? 1} - 1 # 转为 0 索引
215
+ last_page = ${options?.lastPage ?? 'total_pages'}
216
+ if last_page == float('inf'):
217
+ last_page = total_pages
218
+
219
+ # 限制范围
220
+ first_page = max(0, min(first_page, total_pages - 1))
221
+ last_page = min(last_page, total_pages)
222
+
223
+ pages_text = []
224
+ for i in range(first_page, last_page):
225
+ try:
226
+ text = reader.pages[i].extract_text()
227
+ pages_text.append(f"--- 第 {i + 1} 页 ---\\n{text}")
228
+ except Exception as e:
229
+ pages_text.append(f"--- 第 {i + 1} 页 (提取失败: {str(e)}) ---")
230
+
231
+ result = {
232
+ 'text': '\\n\\n'.join(pages_text),
233
+ 'pageCount': last_page - first_page,
234
+ 'totalPages': total_pages
235
+ }
236
+ print(json.dumps(result, ensure_ascii=False))
237
+ except Exception as e:
238
+ print(json.dumps({'error': str(e)}, ensure_ascii=False), file=sys.stderr)
239
+ sys.exit(1)
240
+ `;
241
+ const { code, stdout, stderr } = await (0, exec_1.execFileNoThrow)('python', ['-c', pythonScript], undefined, 120_000);
242
+ if (code !== 0) {
243
+ const errorMsg = stderr || stdout;
244
+ if (/password/i.test(errorMsg)) {
245
+ return {
246
+ success: false,
247
+ error: {
248
+ reason: 'password_protected',
249
+ message: 'PDF 受密码保护。请提供未受保护的版本。',
250
+ },
251
+ };
252
+ }
253
+ return {
254
+ success: false,
255
+ error: { reason: 'unknown', message: `Python PDF 提取失败: ${errorMsg}` },
256
+ };
257
+ }
258
+ const result = JSON.parse(stdout);
259
+ if (result.error) {
260
+ return {
261
+ success: false,
262
+ error: { reason: 'unknown', message: result.error },
263
+ };
264
+ }
265
+ return {
266
+ success: true,
267
+ data: {
268
+ text: result.text,
269
+ pageCount: result.pageCount,
270
+ },
271
+ };
272
+ }
273
+ catch (e) {
274
+ return {
275
+ success: false,
276
+ error: {
277
+ reason: 'unknown',
278
+ message: e instanceof Error ? e.message : String(e),
279
+ },
280
+ };
281
+ }
282
+ }
283
+ /**
284
+ * 使用 pdftoppm 提取 PDF 页面为 JPEG 图像。
285
+ * 在输出目录中生成 page-01.jpg, page-02.jpg 等。
286
+ * 这使得可以读取大型 PDF 并适用于所有 API 提供商。
287
+ *
288
+ * @param filePath PDF 文件路径
289
+ * @param options 可选的页面范围 (从 1 开始,包含首尾)
290
+ */
291
+ async function extractPDFPages(filePath, options) {
292
+ try {
293
+ const stats = await Promise.resolve().then(() => __importStar(require('fs/promises'))).then(fs => fs.stat(filePath));
294
+ const originalSize = stats.size;
295
+ if (originalSize === 0) {
296
+ return {
297
+ success: false,
298
+ error: { reason: 'empty', message: `PDF 文件为空: ${filePath}` },
299
+ };
300
+ }
301
+ if (originalSize > exports.PDF_MAX_EXTRACT_SIZE) {
302
+ return {
303
+ success: false,
304
+ error: {
305
+ reason: 'too_large',
306
+ message: `PDF 文件超过文本提取允许的最大大小 (${(0, format_1.formatSize)(exports.PDF_MAX_EXTRACT_SIZE)})。`,
307
+ },
308
+ };
309
+ }
310
+ // Windows 环境优先使用 Python 方案
311
+ if (isWindows()) {
312
+ const pythonAvailable = await isPythonPdfAvailable();
313
+ if (!pythonAvailable) {
314
+ return {
315
+ success: false,
316
+ error: {
317
+ reason: 'python_unavailable',
318
+ message: 'Windows 环境下需要安装 Python 和 pypdf 库来读取 PDF。请运行: pip install pypdf',
319
+ },
320
+ };
321
+ }
322
+ // 使用 Python 提取文本
323
+ const textResult = await extractPDFTextWithPython(filePath, options);
324
+ if (!textResult.success) {
325
+ return textResult;
326
+ }
327
+ // 将文本结果转换为文件形式
328
+ const uuid = (0, crypto_1.randomUUID)();
329
+ const outputDir = (0, path_1.join)(os.tmpdir(), `pdf-${uuid}`);
330
+ await (0, promises_1.mkdir)(outputDir, { recursive: true });
331
+ const textFile = (0, path_1.join)(outputDir, 'content.txt');
332
+ await (0, promises_1.writeFile)(textFile, textResult.data.text, 'utf-8');
333
+ return {
334
+ success: true,
335
+ data: {
336
+ type: 'parts',
337
+ file: {
338
+ filePath,
339
+ originalSize,
340
+ outputDir,
341
+ count: textResult.data.pageCount,
342
+ },
343
+ },
344
+ };
345
+ }
346
+ // 非 Windows 环境使用 pdftoppm
347
+ const available = await isPdftoppmAvailable();
348
+ if (!available) {
349
+ return {
350
+ success: false,
351
+ error: {
352
+ reason: 'unavailable',
353
+ message: 'pdftoppm 未安装。请安装 poppler-utils (例如 `brew install poppler` 或 `apt-get install poppler-utils`) 以启用 PDF 页面渲染。',
354
+ },
355
+ };
356
+ }
357
+ const uuid = (0, crypto_1.randomUUID)();
358
+ const outputDir = (0, path_1.join)(os.tmpdir(), `pdf-${uuid}`);
359
+ await (0, promises_1.mkdir)(outputDir, { recursive: true });
360
+ // pdftoppm 生成类似 <prefix>-01.jpg, <prefix>-02.jpg 等文件
361
+ const prefix = (0, path_1.join)(outputDir, 'page');
362
+ const args = ['-jpeg', '-r', '100'];
363
+ if (options?.firstPage) {
364
+ args.push('-f', String(options.firstPage));
365
+ }
366
+ if (options?.lastPage && options.lastPage !== Infinity) {
367
+ args.push('-l', String(options.lastPage));
368
+ }
369
+ args.push(filePath, prefix);
370
+ const { code, stderr } = await (0, exec_1.execFileNoThrow)('pdftoppm', args, undefined, 120_000);
371
+ if (code !== 0) {
372
+ if (/password/i.test(stderr)) {
373
+ return {
374
+ success: false,
375
+ error: {
376
+ reason: 'password_protected',
377
+ message: 'PDF 受密码保护。请提供未受保护的版本。',
378
+ },
379
+ };
380
+ }
381
+ if (/damaged|corrupt|invalid/i.test(stderr)) {
382
+ return {
383
+ success: false,
384
+ error: {
385
+ reason: 'corrupted',
386
+ message: 'PDF 文件已损坏或无效。',
387
+ },
388
+ };
389
+ }
390
+ return {
391
+ success: false,
392
+ error: { reason: 'unknown', message: `pdftoppm 失败: ${stderr}` },
393
+ };
394
+ }
395
+ // 读取生成的图像文件并自然排序
396
+ const entries = await (0, promises_1.readdir)(outputDir);
397
+ const imageFiles = entries.filter(f => f.endsWith('.jpg')).sort();
398
+ const pageCount = imageFiles.length;
399
+ if (pageCount === 0) {
400
+ return {
401
+ success: false,
402
+ error: {
403
+ reason: 'corrupted',
404
+ message: 'pdftoppm 未生成输出页面。PDF 可能无效。',
405
+ },
406
+ };
407
+ }
408
+ const count = imageFiles.length;
409
+ return {
410
+ success: true,
411
+ data: {
412
+ type: 'parts',
413
+ file: {
414
+ filePath,
415
+ originalSize,
416
+ outputDir,
417
+ count,
418
+ },
419
+ },
420
+ };
421
+ }
422
+ catch (e) {
423
+ return {
424
+ success: false,
425
+ error: {
426
+ reason: 'unknown',
427
+ message: e instanceof Error ? e.message : String(e),
428
+ },
429
+ };
430
+ }
431
+ }
432
+ /**
433
+ * 解析 PDF 页面范围字符串 (例如 "1-5", "3", "10-20")
434
+ * @param pages 页面范围字符串
435
+ * @returns 解析后的页面范围或 null (如果无效)
436
+ */
437
+ function parsePDFPageRange(pages) {
438
+ const trimmed = pages.trim();
439
+ // 单页: "3"
440
+ if (/^\d+$/.test(trimmed)) {
441
+ const page = parseInt(trimmed, 10);
442
+ if (page < 1)
443
+ return null;
444
+ return { firstPage: page, lastPage: page };
445
+ }
446
+ // 范围: "1-5"
447
+ const rangeMatch = /^(\d+)-(\d+)$/.exec(trimmed);
448
+ if (rangeMatch) {
449
+ const first = parseInt(rangeMatch[1], 10);
450
+ const last = parseInt(rangeMatch[2], 10);
451
+ if (first < 1 || last < first)
452
+ return null;
453
+ return { firstPage: first, lastPage: last };
454
+ }
455
+ return null;
456
+ }
457
+ /**
458
+ * 检查文件扩展名是否为 PDF
459
+ */
460
+ function isPDFExtension(ext) {
461
+ return ext.toLowerCase() === '.pdf';
462
+ }
463
+ /**
464
+ * 检查当前 API 是否支持 PDF
465
+ * 注意:这是一个简化版本,实际应该检查使用的模型是否支持 PDF
466
+ */
467
+ function isPDFSupported() {
468
+ // 假设支持 PDF (Sonnet 3.5 v2 及更高版本)
469
+ // 实际应该根据使用的模型来判断
470
+ return true;
471
+ }
472
+ //# sourceMappingURL=pdf.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"pdf.js","sourceRoot":"","sources":["../../src/util/pdf.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,10 @@
1
+ import { type ChildProcess } from 'child_process';
2
+ export declare const MAX_OUTPUT_SIZE: number;
3
+ export declare const TASK_OUTPUT_DIR: string;
4
+ export declare function ensureTaskDir(): void;
5
+ export declare function getShellForSpawn(): {
6
+ bin: string;
7
+ args: string[];
8
+ };
9
+ export declare function killProcess(proc: ChildProcess): boolean;
10
+ //# sourceMappingURL=process.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"process.d.ts","sourceRoot":"","sources":["../../src/util/process.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,KAAK,YAAY,EAAE,MAAM,eAAe,CAAA;AAKjD,eAAO,MAAM,eAAe,QAAkB,CAAA;AAE9C,eAAO,MAAM,eAAe,QAAuC,CAAA;AAGnE,wBAAgB,aAAa,SAI5B;AAGD,wBAAgB,gBAAgB,IAAI;IAAE,GAAG,EAAE,MAAM,CAAC;IAAC,IAAI,EAAE,MAAM,EAAE,CAAA;CAAE,CAOlE;AAGD,wBAAgB,WAAW,CAAC,IAAI,EAAE,YAAY,GAAG,OAAO,CAkBvD"}
@@ -0,0 +1,88 @@
1
+ "use strict";
2
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
+ if (k2 === undefined) k2 = k;
4
+ var desc = Object.getOwnPropertyDescriptor(m, k);
5
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
+ desc = { enumerable: true, get: function() { return m[k]; } };
7
+ }
8
+ Object.defineProperty(o, k2, desc);
9
+ }) : (function(o, m, k, k2) {
10
+ if (k2 === undefined) k2 = k;
11
+ o[k2] = m[k];
12
+ }));
13
+ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
14
+ Object.defineProperty(o, "default", { enumerable: true, value: v });
15
+ }) : function(o, v) {
16
+ o["default"] = v;
17
+ });
18
+ var __importStar = (this && this.__importStar) || (function () {
19
+ var ownKeys = function(o) {
20
+ ownKeys = Object.getOwnPropertyNames || function (o) {
21
+ var ar = [];
22
+ for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
23
+ return ar;
24
+ };
25
+ return ownKeys(o);
26
+ };
27
+ return function (mod) {
28
+ if (mod && mod.__esModule) return mod;
29
+ var result = {};
30
+ if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
31
+ __setModuleDefault(result, mod);
32
+ return result;
33
+ };
34
+ })();
35
+ Object.defineProperty(exports, "__esModule", { value: true });
36
+ exports.TASK_OUTPUT_DIR = exports.MAX_OUTPUT_SIZE = void 0;
37
+ exports.ensureTaskDir = ensureTaskDir;
38
+ exports.getShellForSpawn = getShellForSpawn;
39
+ exports.killProcess = killProcess;
40
+ const fs = __importStar(require("fs"));
41
+ const path = __importStar(require("path"));
42
+ const os = __importStar(require("os"));
43
+ const platform_1 = require("./platform");
44
+ const log_1 = require("./log");
45
+ // 内存输出上限 2MB
46
+ exports.MAX_OUTPUT_SIZE = 2 * 1024 * 1024;
47
+ // 任务输出目录
48
+ exports.TASK_OUTPUT_DIR = path.join(os.tmpdir(), 'sema-tasks');
49
+ // 确保任务输出目录存在
50
+ function ensureTaskDir() {
51
+ if (!fs.existsSync(exports.TASK_OUTPUT_DIR)) {
52
+ fs.mkdirSync(exports.TASK_OUTPUT_DIR, { recursive: true });
53
+ }
54
+ }
55
+ // 获取 shell 信息(用于独立 spawn 场景)
56
+ function getShellForSpawn() {
57
+ if (platform_1.IS_WIN) {
58
+ const comspec = process.env.ComSpec || 'cmd.exe';
59
+ return { bin: comspec, args: ['/c'] };
60
+ }
61
+ const bin = process.env.SHELL || '/bin/bash';
62
+ return { bin, args: ['-c'] };
63
+ }
64
+ // kill 进程(跨平台),返回是否成功
65
+ function killProcess(proc) {
66
+ if (!proc.pid)
67
+ return false;
68
+ try {
69
+ if (platform_1.IS_WIN) {
70
+ try {
71
+ const { execSync } = require('child_process');
72
+ execSync(`taskkill /f /t /pid ${proc.pid}`, { stdio: 'ignore', timeout: 5000 });
73
+ }
74
+ catch {
75
+ proc.kill('SIGTERM');
76
+ }
77
+ }
78
+ else {
79
+ proc.kill('SIGTERM');
80
+ }
81
+ return true;
82
+ }
83
+ catch (error) {
84
+ (0, log_1.logWarn)(`killProcess 失败: ${error}`);
85
+ return false;
86
+ }
87
+ }
88
+ //# sourceMappingURL=process.js.map