sema-core 1.0.2

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 (411) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +150 -0
  3. package/dist/constants/config.d.ts +20 -0
  4. package/dist/constants/config.d.ts.map +1 -0
  5. package/dist/constants/config.js +31 -0
  6. package/dist/constants/config.js.map +1 -0
  7. package/dist/constants/message.d.ts +10 -0
  8. package/dist/constants/message.d.ts.map +1 -0
  9. package/dist/constants/message.js +25 -0
  10. package/dist/constants/message.js.map +1 -0
  11. package/dist/constants/product.d.ts +5 -0
  12. package/dist/constants/product.d.ts.map +1 -0
  13. package/dist/constants/product.js +8 -0
  14. package/dist/constants/product.js.map +1 -0
  15. package/dist/core/Conversation.d.ts +16 -0
  16. package/dist/core/Conversation.d.ts.map +1 -0
  17. package/dist/core/Conversation.js +226 -0
  18. package/dist/core/Conversation.js.map +1 -0
  19. package/dist/core/RunTools.d.ts +11 -0
  20. package/dist/core/RunTools.d.ts.map +1 -0
  21. package/dist/core/RunTools.js +244 -0
  22. package/dist/core/RunTools.js.map +1 -0
  23. package/dist/core/SemaCore.d.ts +49 -0
  24. package/dist/core/SemaCore.d.ts.map +1 -0
  25. package/dist/core/SemaCore.js +94 -0
  26. package/dist/core/SemaCore.js.map +1 -0
  27. package/dist/core/SemaEngine.d.ts +54 -0
  28. package/dist/core/SemaEngine.d.ts.map +1 -0
  29. package/dist/core/SemaEngine.js +335 -0
  30. package/dist/core/SemaEngine.js.map +1 -0
  31. package/dist/events/EventSystem.d.ts +42 -0
  32. package/dist/events/EventSystem.d.ts.map +1 -0
  33. package/dist/events/EventSystem.js +134 -0
  34. package/dist/events/EventSystem.js.map +1 -0
  35. package/dist/events/types.d.ts +300 -0
  36. package/dist/events/types.d.ts.map +1 -0
  37. package/dist/events/types.js +4 -0
  38. package/dist/events/types.js.map +1 -0
  39. package/dist/index.d.ts +2 -0
  40. package/dist/index.d.ts.map +1 -0
  41. package/dist/index.js +6 -0
  42. package/dist/index.js.map +1 -0
  43. package/dist/manager/ConfManager.d.ts +76 -0
  44. package/dist/manager/ConfManager.d.ts.map +1 -0
  45. package/dist/manager/ConfManager.js +329 -0
  46. package/dist/manager/ConfManager.js.map +1 -0
  47. package/dist/manager/ModelManager.d.ts +51 -0
  48. package/dist/manager/ModelManager.d.ts.map +1 -0
  49. package/dist/manager/ModelManager.js +291 -0
  50. package/dist/manager/ModelManager.js.map +1 -0
  51. package/dist/manager/PermissionManager.d.ts +16 -0
  52. package/dist/manager/PermissionManager.d.ts.map +1 -0
  53. package/dist/manager/PermissionManager.js +308 -0
  54. package/dist/manager/PermissionManager.js.map +1 -0
  55. package/dist/manager/StateManager.d.ts +164 -0
  56. package/dist/manager/StateManager.d.ts.map +1 -0
  57. package/dist/manager/StateManager.js +357 -0
  58. package/dist/manager/StateManager.js.map +1 -0
  59. package/dist/services/agents/agentsManager.d.ts +112 -0
  60. package/dist/services/agents/agentsManager.d.ts.map +1 -0
  61. package/dist/services/agents/agentsManager.js +394 -0
  62. package/dist/services/agents/agentsManager.js.map +1 -0
  63. package/dist/services/agents/defaultBuiltInAgentsConfs.d.ts +3 -0
  64. package/dist/services/agents/defaultBuiltInAgentsConfs.d.ts.map +1 -0
  65. package/dist/services/agents/defaultBuiltInAgentsConfs.js +102 -0
  66. package/dist/services/agents/defaultBuiltInAgentsConfs.js.map +1 -0
  67. package/dist/services/agents/genSystemPrompt.d.ts +23 -0
  68. package/dist/services/agents/genSystemPrompt.d.ts.map +1 -0
  69. package/dist/services/agents/genSystemPrompt.js +189 -0
  70. package/dist/services/agents/genSystemPrompt.js.map +1 -0
  71. package/dist/services/agents/prompt.d.ts +12 -0
  72. package/dist/services/agents/prompt.d.ts.map +1 -0
  73. package/dist/services/agents/prompt.js +162 -0
  74. package/dist/services/agents/prompt.js.map +1 -0
  75. package/dist/services/api/adapt/anthropic.d.ts +10 -0
  76. package/dist/services/api/adapt/anthropic.d.ts.map +1 -0
  77. package/dist/services/api/adapt/anthropic.js +233 -0
  78. package/dist/services/api/adapt/anthropic.js.map +1 -0
  79. package/dist/services/api/adapt/openai.d.ts +8 -0
  80. package/dist/services/api/adapt/openai.d.ts.map +1 -0
  81. package/dist/services/api/adapt/openai.js +412 -0
  82. package/dist/services/api/adapt/openai.js.map +1 -0
  83. package/dist/services/api/adapt/util.d.ts +7 -0
  84. package/dist/services/api/adapt/util.d.ts.map +1 -0
  85. package/dist/services/api/adapt/util.js +24 -0
  86. package/dist/services/api/adapt/util.js.map +1 -0
  87. package/dist/services/api/apiUtil.d.ts +10 -0
  88. package/dist/services/api/apiUtil.d.ts.map +1 -0
  89. package/dist/services/api/apiUtil.js +256 -0
  90. package/dist/services/api/apiUtil.js.map +1 -0
  91. package/dist/services/api/cache.d.ts +11 -0
  92. package/dist/services/api/cache.d.ts.map +1 -0
  93. package/dist/services/api/cache.js +128 -0
  94. package/dist/services/api/cache.js.map +1 -0
  95. package/dist/services/api/queryLLM.d.ts +18 -0
  96. package/dist/services/api/queryLLM.d.ts.map +1 -0
  97. package/dist/services/api/queryLLM.js +147 -0
  98. package/dist/services/api/queryLLM.js.map +1 -0
  99. package/dist/services/command/runCommand.d.ts +18 -0
  100. package/dist/services/command/runCommand.d.ts.map +1 -0
  101. package/dist/services/command/runCommand.js +149 -0
  102. package/dist/services/command/runCommand.js.map +1 -0
  103. package/dist/services/mcp/MCPClient.d.ts +35 -0
  104. package/dist/services/mcp/MCPClient.d.ts.map +1 -0
  105. package/dist/services/mcp/MCPClient.js +166 -0
  106. package/dist/services/mcp/MCPClient.js.map +1 -0
  107. package/dist/services/mcp/MCPManager.d.ts +140 -0
  108. package/dist/services/mcp/MCPManager.d.ts.map +1 -0
  109. package/dist/services/mcp/MCPManager.js +650 -0
  110. package/dist/services/mcp/MCPManager.js.map +1 -0
  111. package/dist/services/mcp/MCPToolAdapter.d.ts +22 -0
  112. package/dist/services/mcp/MCPToolAdapter.d.ts.map +1 -0
  113. package/dist/services/mcp/MCPToolAdapter.js +177 -0
  114. package/dist/services/mcp/MCPToolAdapter.js.map +1 -0
  115. package/dist/services/plugins/customCommands.d.ts +29 -0
  116. package/dist/services/plugins/customCommands.d.ts.map +1 -0
  117. package/dist/services/plugins/customCommands.js +227 -0
  118. package/dist/services/plugins/customCommands.js.map +1 -0
  119. package/dist/services/skill/skillLoader.d.ts +17 -0
  120. package/dist/services/skill/skillLoader.d.ts.map +1 -0
  121. package/dist/services/skill/skillLoader.js +122 -0
  122. package/dist/services/skill/skillLoader.js.map +1 -0
  123. package/dist/services/skill/skillParser.d.ts +15 -0
  124. package/dist/services/skill/skillParser.d.ts.map +1 -0
  125. package/dist/services/skill/skillParser.js +66 -0
  126. package/dist/services/skill/skillParser.js.map +1 -0
  127. package/dist/services/skill/skillRegistry.d.ts +34 -0
  128. package/dist/services/skill/skillRegistry.d.ts.map +1 -0
  129. package/dist/services/skill/skillRegistry.js +98 -0
  130. package/dist/services/skill/skillRegistry.js.map +1 -0
  131. package/dist/tools/AskUserQuestion/AskUserQuestion.d.ts +179 -0
  132. package/dist/tools/AskUserQuestion/AskUserQuestion.d.ts.map +1 -0
  133. package/dist/tools/AskUserQuestion/AskUserQuestion.js +165 -0
  134. package/dist/tools/AskUserQuestion/AskUserQuestion.js.map +1 -0
  135. package/dist/tools/AskUserQuestion/prompt.d.ts +3 -0
  136. package/dist/tools/AskUserQuestion/prompt.d.ts.map +1 -0
  137. package/dist/tools/AskUserQuestion/prompt.js +17 -0
  138. package/dist/tools/AskUserQuestion/prompt.js.map +1 -0
  139. package/dist/tools/Bash/Bash.d.ts +75 -0
  140. package/dist/tools/Bash/Bash.d.ts.map +1 -0
  141. package/dist/tools/Bash/Bash.js +200 -0
  142. package/dist/tools/Bash/Bash.js.map +1 -0
  143. package/dist/tools/Bash/prompt.d.ts +8 -0
  144. package/dist/tools/Bash/prompt.d.ts.map +1 -0
  145. package/dist/tools/Bash/prompt.js +167 -0
  146. package/dist/tools/Bash/prompt.js.map +1 -0
  147. package/dist/tools/Bash/utils.d.ts +5 -0
  148. package/dist/tools/Bash/utils.d.ts.map +1 -0
  149. package/dist/tools/Bash/utils.js +21 -0
  150. package/dist/tools/Bash/utils.js.map +1 -0
  151. package/dist/tools/Edit/Edit.d.ts +110 -0
  152. package/dist/tools/Edit/Edit.d.ts.map +1 -0
  153. package/dist/tools/Edit/Edit.js +213 -0
  154. package/dist/tools/Edit/Edit.js.map +1 -0
  155. package/dist/tools/Edit/prompt.d.ts +3 -0
  156. package/dist/tools/Edit/prompt.d.ts.map +1 -0
  157. package/dist/tools/Edit/prompt.js +15 -0
  158. package/dist/tools/Edit/prompt.js.map +1 -0
  159. package/dist/tools/Edit/utils.d.ts +10 -0
  160. package/dist/tools/Edit/utils.d.ts.map +1 -0
  161. package/dist/tools/Edit/utils.js +51 -0
  162. package/dist/tools/Edit/utils.js.map +1 -0
  163. package/dist/tools/ExitPlanMode/ExitPlanMode.d.ts +42 -0
  164. package/dist/tools/ExitPlanMode/ExitPlanMode.d.ts.map +1 -0
  165. package/dist/tools/ExitPlanMode/ExitPlanMode.js +157 -0
  166. package/dist/tools/ExitPlanMode/ExitPlanMode.js.map +1 -0
  167. package/dist/tools/ExitPlanMode/prompt.d.ts +3 -0
  168. package/dist/tools/ExitPlanMode/prompt.d.ts.map +1 -0
  169. package/dist/tools/ExitPlanMode/prompt.js +28 -0
  170. package/dist/tools/ExitPlanMode/prompt.js.map +1 -0
  171. package/dist/tools/Glob/Glob.d.ts +44 -0
  172. package/dist/tools/Glob/Glob.d.ts.map +1 -0
  173. package/dist/tools/Glob/Glob.js +113 -0
  174. package/dist/tools/Glob/Glob.js.map +1 -0
  175. package/dist/tools/Glob/prompt.d.ts +3 -0
  176. package/dist/tools/Glob/prompt.d.ts.map +1 -0
  177. package/dist/tools/Glob/prompt.js +11 -0
  178. package/dist/tools/Glob/prompt.js.map +1 -0
  179. package/dist/tools/Grep/Grep.d.ts +106 -0
  180. package/dist/tools/Grep/Grep.d.ts.map +1 -0
  181. package/dist/tools/Grep/Grep.js +301 -0
  182. package/dist/tools/Grep/Grep.js.map +1 -0
  183. package/dist/tools/Grep/prompt.d.ts +3 -0
  184. package/dist/tools/Grep/prompt.d.ts.map +1 -0
  185. package/dist/tools/Grep/prompt.js +17 -0
  186. package/dist/tools/Grep/prompt.js.map +1 -0
  187. package/dist/tools/NotebookEdit/NotebookEdit.d.ts +98 -0
  188. package/dist/tools/NotebookEdit/NotebookEdit.d.ts.map +1 -0
  189. package/dist/tools/NotebookEdit/NotebookEdit.js +228 -0
  190. package/dist/tools/NotebookEdit/NotebookEdit.js.map +1 -0
  191. package/dist/tools/NotebookEdit/prompt.d.ts +3 -0
  192. package/dist/tools/NotebookEdit/prompt.d.ts.map +1 -0
  193. package/dist/tools/NotebookEdit/prompt.js +6 -0
  194. package/dist/tools/NotebookEdit/prompt.js.map +1 -0
  195. package/dist/tools/Read/Read.d.ts +107 -0
  196. package/dist/tools/Read/Read.d.ts.map +1 -0
  197. package/dist/tools/Read/Read.js +175 -0
  198. package/dist/tools/Read/Read.js.map +1 -0
  199. package/dist/tools/Read/prompt.d.ts +4 -0
  200. package/dist/tools/Read/prompt.d.ts.map +1 -0
  201. package/dist/tools/Read/prompt.js +21 -0
  202. package/dist/tools/Read/prompt.js.map +1 -0
  203. package/dist/tools/Skill/Skill.d.ts +62 -0
  204. package/dist/tools/Skill/Skill.d.ts.map +1 -0
  205. package/dist/tools/Skill/Skill.js +142 -0
  206. package/dist/tools/Skill/Skill.js.map +1 -0
  207. package/dist/tools/Skill/prompt.d.ts +3 -0
  208. package/dist/tools/Skill/prompt.d.ts.map +1 -0
  209. package/dist/tools/Skill/prompt.js +58 -0
  210. package/dist/tools/Skill/prompt.js.map +1 -0
  211. package/dist/tools/Task/Task.d.ts +59 -0
  212. package/dist/tools/Task/Task.d.ts.map +1 -0
  213. package/dist/tools/Task/Task.js +213 -0
  214. package/dist/tools/Task/Task.js.map +1 -0
  215. package/dist/tools/Task/prompt.d.ts +6 -0
  216. package/dist/tools/Task/prompt.d.ts.map +1 -0
  217. package/dist/tools/Task/prompt.js +75 -0
  218. package/dist/tools/Task/prompt.js.map +1 -0
  219. package/dist/tools/TodoWrite/TodoWrite.d.ts +92 -0
  220. package/dist/tools/TodoWrite/TodoWrite.d.ts.map +1 -0
  221. package/dist/tools/TodoWrite/TodoWrite.js +101 -0
  222. package/dist/tools/TodoWrite/TodoWrite.js.map +1 -0
  223. package/dist/tools/TodoWrite/prompt.d.ts +3 -0
  224. package/dist/tools/TodoWrite/prompt.d.ts.map +1 -0
  225. package/dist/tools/TodoWrite/prompt.js +187 -0
  226. package/dist/tools/TodoWrite/prompt.js.map +1 -0
  227. package/dist/tools/Write/Write.d.ts +77 -0
  228. package/dist/tools/Write/Write.d.ts.map +1 -0
  229. package/dist/tools/Write/Write.js +189 -0
  230. package/dist/tools/Write/Write.js.map +1 -0
  231. package/dist/tools/Write/prompt.d.ts +3 -0
  232. package/dist/tools/Write/prompt.d.ts.map +1 -0
  233. package/dist/tools/Write/prompt.js +13 -0
  234. package/dist/tools/Write/prompt.js.map +1 -0
  235. package/dist/tools/base/Tool.d.ts +36 -0
  236. package/dist/tools/base/Tool.d.ts.map +1 -0
  237. package/dist/tools/base/Tool.js +3 -0
  238. package/dist/tools/base/Tool.js.map +1 -0
  239. package/dist/tools/base/tools.d.ts +9 -0
  240. package/dist/tools/base/tools.d.ts.map +1 -0
  241. package/dist/tools/base/tools.js +105 -0
  242. package/dist/tools/base/tools.js.map +1 -0
  243. package/dist/types/agent.d.ts +30 -0
  244. package/dist/types/agent.d.ts.map +1 -0
  245. package/dist/types/agent.js +3 -0
  246. package/dist/types/agent.js.map +1 -0
  247. package/dist/types/command.d.ts +44 -0
  248. package/dist/types/command.d.ts.map +1 -0
  249. package/dist/types/command.js +6 -0
  250. package/dist/types/command.js.map +1 -0
  251. package/dist/types/config.d.ts +14 -0
  252. package/dist/types/config.d.ts.map +1 -0
  253. package/dist/types/config.js +3 -0
  254. package/dist/types/config.js.map +1 -0
  255. package/dist/types/errors.d.ts +18 -0
  256. package/dist/types/errors.d.ts.map +1 -0
  257. package/dist/types/errors.js +33 -0
  258. package/dist/types/errors.js.map +1 -0
  259. package/dist/types/index.d.ts +91 -0
  260. package/dist/types/index.d.ts.map +1 -0
  261. package/dist/types/index.js +18 -0
  262. package/dist/types/index.js.map +1 -0
  263. package/dist/types/mcp.d.ts +127 -0
  264. package/dist/types/mcp.d.ts.map +1 -0
  265. package/dist/types/mcp.js +6 -0
  266. package/dist/types/mcp.js.map +1 -0
  267. package/dist/types/message.d.ts +31 -0
  268. package/dist/types/message.d.ts.map +1 -0
  269. package/dist/types/message.js +3 -0
  270. package/dist/types/message.js.map +1 -0
  271. package/dist/types/model.d.ts +21 -0
  272. package/dist/types/model.d.ts.map +1 -0
  273. package/dist/types/model.js +3 -0
  274. package/dist/types/model.js.map +1 -0
  275. package/dist/types/notebook.d.ts +57 -0
  276. package/dist/types/notebook.d.ts.map +1 -0
  277. package/dist/types/notebook.js +3 -0
  278. package/dist/types/notebook.js.map +1 -0
  279. package/dist/types/skill.d.ts +34 -0
  280. package/dist/types/skill.d.ts.map +1 -0
  281. package/dist/types/skill.js +8 -0
  282. package/dist/types/skill.js.map +1 -0
  283. package/dist/types/uuid.d.ts +2 -0
  284. package/dist/types/uuid.d.ts.map +1 -0
  285. package/dist/types/uuid.js +3 -0
  286. package/dist/types/uuid.js.map +1 -0
  287. package/dist/util/adapter.d.ts +11 -0
  288. package/dist/util/adapter.d.ts.map +1 -0
  289. package/dist/util/adapter.js +75 -0
  290. package/dist/util/adapter.js.map +1 -0
  291. package/dist/util/agentStats.d.ts +11 -0
  292. package/dist/util/agentStats.d.ts.map +1 -0
  293. package/dist/util/agentStats.js +60 -0
  294. package/dist/util/agentStats.js.map +1 -0
  295. package/dist/util/cacheLLM.d.ts +47 -0
  296. package/dist/util/cacheLLM.d.ts.map +1 -0
  297. package/dist/util/cacheLLM.js +154 -0
  298. package/dist/util/cacheLLM.js.map +1 -0
  299. package/dist/util/commands.d.ts +16 -0
  300. package/dist/util/commands.d.ts.map +1 -0
  301. package/dist/util/commands.js +216 -0
  302. package/dist/util/commands.js.map +1 -0
  303. package/dist/util/compact.d.ts +25 -0
  304. package/dist/util/compact.d.ts.map +1 -0
  305. package/dist/util/compact.js +451 -0
  306. package/dist/util/compact.js.map +1 -0
  307. package/dist/util/cwd.d.ts +44 -0
  308. package/dist/util/cwd.d.ts.map +1 -0
  309. package/dist/util/cwd.js +84 -0
  310. package/dist/util/cwd.js.map +1 -0
  311. package/dist/util/diff.d.ts +10 -0
  312. package/dist/util/diff.d.ts.map +1 -0
  313. package/dist/util/diff.js +127 -0
  314. package/dist/util/diff.js.map +1 -0
  315. package/dist/util/directory.d.ts +37 -0
  316. package/dist/util/directory.d.ts.map +1 -0
  317. package/dist/util/directory.js +137 -0
  318. package/dist/util/directory.js.map +1 -0
  319. package/dist/util/env.d.ts +5 -0
  320. package/dist/util/env.d.ts.map +1 -0
  321. package/dist/util/env.js +39 -0
  322. package/dist/util/env.js.map +1 -0
  323. package/dist/util/exec.d.ts +6 -0
  324. package/dist/util/exec.d.ts.map +1 -0
  325. package/dist/util/exec.js +43 -0
  326. package/dist/util/exec.js.map +1 -0
  327. package/dist/util/file.d.ts +61 -0
  328. package/dist/util/file.d.ts.map +1 -0
  329. package/dist/util/file.js +365 -0
  330. package/dist/util/file.js.map +1 -0
  331. package/dist/util/filePermission.d.ts +14 -0
  332. package/dist/util/filePermission.d.ts.map +1 -0
  333. package/dist/util/filePermission.js +45 -0
  334. package/dist/util/filePermission.js.map +1 -0
  335. package/dist/util/fileReference.d.ts +40 -0
  336. package/dist/util/fileReference.d.ts.map +1 -0
  337. package/dist/util/fileReference.js +343 -0
  338. package/dist/util/fileReference.js.map +1 -0
  339. package/dist/util/format.d.ts +9 -0
  340. package/dist/util/format.d.ts.map +1 -0
  341. package/dist/util/format.js +61 -0
  342. package/dist/util/format.js.map +1 -0
  343. package/dist/util/frontmatter.d.ts +35 -0
  344. package/dist/util/frontmatter.d.ts.map +1 -0
  345. package/dist/util/frontmatter.js +119 -0
  346. package/dist/util/frontmatter.js.map +1 -0
  347. package/dist/util/git.d.ts +4 -0
  348. package/dist/util/git.d.ts.map +1 -0
  349. package/dist/util/git.js +55 -0
  350. package/dist/util/git.js.map +1 -0
  351. package/dist/util/history.d.ts +27 -0
  352. package/dist/util/history.d.ts.map +1 -0
  353. package/dist/util/history.js +248 -0
  354. package/dist/util/history.js.map +1 -0
  355. package/dist/util/log.d.ts +23 -0
  356. package/dist/util/log.d.ts.map +1 -0
  357. package/dist/util/log.js +246 -0
  358. package/dist/util/log.js.map +1 -0
  359. package/dist/util/logLLM.d.ts +20 -0
  360. package/dist/util/logLLM.d.ts.map +1 -0
  361. package/dist/util/logLLM.js +414 -0
  362. package/dist/util/logLLM.js.map +1 -0
  363. package/dist/util/message.d.ts +12 -0
  364. package/dist/util/message.d.ts.map +1 -0
  365. package/dist/util/message.js +156 -0
  366. package/dist/util/message.js.map +1 -0
  367. package/dist/util/model.d.ts +22 -0
  368. package/dist/util/model.d.ts.map +1 -0
  369. package/dist/util/model.js +61 -0
  370. package/dist/util/model.js.map +1 -0
  371. package/dist/util/notebook.d.ts +14 -0
  372. package/dist/util/notebook.d.ts.map +1 -0
  373. package/dist/util/notebook.js +104 -0
  374. package/dist/util/notebook.js.map +1 -0
  375. package/dist/util/ripgrep.d.ts +3 -0
  376. package/dist/util/ripgrep.d.ts.map +1 -0
  377. package/dist/util/ripgrep.js +187 -0
  378. package/dist/util/ripgrep.js.map +1 -0
  379. package/dist/util/rules.d.ts +6 -0
  380. package/dist/util/rules.d.ts.map +1 -0
  381. package/dist/util/rules.js +111 -0
  382. package/dist/util/rules.js.map +1 -0
  383. package/dist/util/savePath.d.ts +73 -0
  384. package/dist/util/savePath.d.ts.map +1 -0
  385. package/dist/util/savePath.js +189 -0
  386. package/dist/util/savePath.js.map +1 -0
  387. package/dist/util/secureFile.d.ts +136 -0
  388. package/dist/util/secureFile.d.ts.map +1 -0
  389. package/dist/util/secureFile.js +496 -0
  390. package/dist/util/secureFile.js.map +1 -0
  391. package/dist/util/session.d.ts +37 -0
  392. package/dist/util/session.d.ts.map +1 -0
  393. package/dist/util/session.js +120 -0
  394. package/dist/util/session.js.map +1 -0
  395. package/dist/util/shell.d.ts +40 -0
  396. package/dist/util/shell.d.ts.map +1 -0
  397. package/dist/util/shell.js +876 -0
  398. package/dist/util/shell.js.map +1 -0
  399. package/dist/util/time.d.ts +24 -0
  400. package/dist/util/time.d.ts.map +1 -0
  401. package/dist/util/time.js +53 -0
  402. package/dist/util/time.js.map +1 -0
  403. package/dist/util/tokens.d.ts +9 -0
  404. package/dist/util/tokens.d.ts.map +1 -0
  405. package/dist/util/tokens.js +79 -0
  406. package/dist/util/tokens.js.map +1 -0
  407. package/dist/util/topic.d.ts +9 -0
  408. package/dist/util/topic.d.ts.map +1 -0
  409. package/dist/util/topic.js +52 -0
  410. package/dist/util/topic.js.map +1 -0
  411. package/package.json +83 -0
@@ -0,0 +1,55 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.getGitEmail = exports.getGitStatus = exports.getIsGit = void 0;
4
+ const lodash_es_1 = require("lodash-es");
5
+ const exec_1 = require("./exec");
6
+ const log_1 = require("./log");
7
+ const cwd_1 = require("./cwd");
8
+ exports.getIsGit = (0, lodash_es_1.memoize)(async () => {
9
+ const { code } = await (0, exec_1.execFileNoThrow)('git', [
10
+ 'rev-parse',
11
+ '--is-inside-work-tree',
12
+ ], undefined, undefined, true, (0, cwd_1.getOriginalCwd)());
13
+ return code === 0;
14
+ });
15
+ exports.getGitStatus = (0, lodash_es_1.memoize)(async () => {
16
+ if (!(await (0, exports.getIsGit)())) {
17
+ return null;
18
+ }
19
+ try {
20
+ const [branch, mainBranch, status, log, authorLog] = await Promise.all([
21
+ (0, exec_1.execFileNoThrow)('git', ['branch', '--show-current'], undefined, undefined, false, (0, cwd_1.getOriginalCwd)()).then(({ stdout }) => stdout.trim()),
22
+ (0, exec_1.execFileNoThrow)('git', ['rev-parse', '--abbrev-ref', 'origin/HEAD'], undefined, undefined, false, (0, cwd_1.getOriginalCwd)()).then(({ stdout }) => stdout.replace('origin/', '').trim()),
23
+ (0, exec_1.execFileNoThrow)('git', ['status', '--short'], undefined, undefined, false, (0, cwd_1.getOriginalCwd)()).then(({ stdout }) => stdout.trim()),
24
+ (0, exec_1.execFileNoThrow)('git', ['log', '--oneline', '-n', '5'], undefined, undefined, false, (0, cwd_1.getOriginalCwd)()).then(({ stdout }) => stdout.trim()),
25
+ (0, exec_1.execFileNoThrow)('git', [
26
+ 'log',
27
+ '--oneline',
28
+ '-n',
29
+ '5',
30
+ '--author',
31
+ (await (0, exports.getGitEmail)()) || '',
32
+ ], undefined, undefined, false, (0, cwd_1.getOriginalCwd)()).then(({ stdout }) => stdout.trim()),
33
+ ]);
34
+ // Check if status has more than 200 lines
35
+ const statusLines = status.split('\n').length;
36
+ const truncatedStatus = statusLines > 200
37
+ ? status.split('\n').slice(0, 200).join('\n') +
38
+ '\n... (truncated because there are more than 200 lines. If you need more information, run "git status" using BashTool)'
39
+ : status;
40
+ return `This is the git status at the start of the conversation. Note that this status is a snapshot in time, and will not update during the conversation.\nCurrent branch: ${branch}\n\nMain branch (you will usually use this for PRs): ${mainBranch}\n\nStatus:\n${truncatedStatus || '(clean)'}\n\nRecent commits:\n${log}\n\n}`;
41
+ }
42
+ catch (error) {
43
+ (0, log_1.logError)(error);
44
+ return null;
45
+ }
46
+ });
47
+ exports.getGitEmail = (0, lodash_es_1.memoize)(async () => {
48
+ const result = await (0, exec_1.execFileNoThrow)('git', ['config', 'user.email'], undefined, undefined, true, (0, cwd_1.getOriginalCwd)());
49
+ if (result.code !== 0) {
50
+ (0, log_1.logError)(`Failed to get git email: ${result.stdout} ${result.stderr}`);
51
+ return undefined;
52
+ }
53
+ return result.stdout.trim() || undefined;
54
+ });
55
+ //# sourceMappingURL=git.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"git.js","sourceRoot":"","sources":["../../src/util/git.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,27 @@
1
+ import { Message } from '../types/message';
2
+ import { TodoItem } from '../events/types';
3
+ interface HistoryData {
4
+ messages: Message[];
5
+ todos: TodoItem[];
6
+ }
7
+ /**
8
+ * 加载历史消息和todos
9
+ * @param sessionId 会话ID
10
+ * @param projectPath 项目绝对路径
11
+ */
12
+ export declare function loadHistory(sessionId?: string, projectPath?: string): Promise<HistoryData>;
13
+ /**
14
+ * 清理旧的历史文件
15
+ * @param projectPath 项目绝对路径(可选)
16
+ */
17
+ export declare function cleanupOldHistoryFiles(projectPath?: string): Promise<void>;
18
+ /**
19
+ * 保存历史消息和todos
20
+ * @param sessionId 会话ID
21
+ * @param messages 消息列表
22
+ * @param todos Todo列表
23
+ * @param projectPath 项目绝对路径
24
+ */
25
+ export declare function saveHistory(sessionId: string, messages: Message[], todos?: TodoItem[], projectPath?: string): Promise<void>;
26
+ export type { HistoryData };
27
+ //# sourceMappingURL=history.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"history.d.ts","sourceRoot":"","sources":["../../src/util/history.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,kBAAkB,CAAC;AAC3C,OAAO,EAAE,QAAQ,EAAE,MAAM,iBAAiB,CAAC;AAiB3C,UAAU,WAAW;IACnB,QAAQ,EAAE,OAAO,EAAE,CAAC;IACpB,KAAK,EAAE,QAAQ,EAAE,CAAC;CACnB;AAyCD;;;;GAIG;AACH,wBAAsB,WAAW,CAAC,SAAS,CAAC,EAAE,MAAM,EAAE,WAAW,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,WAAW,CAAC,CAoBhG;AA6GD;;;GAGG;AACH,wBAAsB,sBAAsB,CAAC,WAAW,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAKhF;AAED;;;;;;GAMG;AACH,wBAAsB,WAAW,CAAC,SAAS,EAAE,MAAM,EAAE,QAAQ,EAAE,OAAO,EAAE,EAAE,KAAK,CAAC,EAAE,QAAQ,EAAE,EAAE,WAAW,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CA8BjI;AAGD,YAAY,EAAE,WAAW,EAAE,CAAC"}
@@ -0,0 +1,248 @@
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.loadHistory = loadHistory;
37
+ exports.cleanupOldHistoryFiles = cleanupOldHistoryFiles;
38
+ exports.saveHistory = saveHistory;
39
+ const log_1 = require("./log");
40
+ const fs = __importStar(require("fs"));
41
+ const path = __importStar(require("path"));
42
+ const savePath_1 = require("./savePath");
43
+ const config_1 = require("../constants/config");
44
+ const time_1 = require("./time");
45
+ const message_1 = require("../constants/message");
46
+ // 清理历史文件的时间间隔(毫秒)
47
+ let lastHistoryCleanupTime = 0;
48
+ /**
49
+ * 判断一条 assistant 消息是否包含有效 usage
50
+ */
51
+ function hasValidUsage(message) {
52
+ if (message.type !== 'assistant' || !('usage' in message.message))
53
+ return false;
54
+ // 排除合成消息
55
+ if (message.message.content[0]?.type === 'text' &&
56
+ message_1.SYNTHETIC_ASSISTANT_MESSAGES.has(message.message.content[0].text))
57
+ return false;
58
+ const usage = message.message.usage;
59
+ if (!usage || typeof usage !== 'object')
60
+ return false;
61
+ return ('input_tokens' in usage && 'output_tokens' in usage) ||
62
+ ('prompt_tokens' in usage && 'completion_tokens' in usage);
63
+ }
64
+ /**
65
+ * 剥离多余的 usage,只保留最后一条有效 usage 的消息
66
+ */
67
+ function stripRedundantUsage(messages) {
68
+ // 从后往前找到最后一条有效 usage 的索引
69
+ let lastUsageIndex = -1;
70
+ for (let i = messages.length - 1; i >= 0; i--) {
71
+ if (hasValidUsage(messages[i])) {
72
+ lastUsageIndex = i;
73
+ break;
74
+ }
75
+ }
76
+ return messages.map((msg, index) => {
77
+ if (index === lastUsageIndex)
78
+ return msg;
79
+ if (msg.type === 'assistant' && 'usage' in msg.message) {
80
+ const { usage, ...rest } = msg.message;
81
+ return { ...msg, message: rest };
82
+ }
83
+ return msg;
84
+ });
85
+ }
86
+ /**
87
+ * 加载历史消息和todos
88
+ * @param sessionId 会话ID
89
+ * @param projectPath 项目绝对路径
90
+ */
91
+ async function loadHistory(sessionId, projectPath) {
92
+ if (!sessionId)
93
+ return { messages: [], todos: [] };
94
+ const historyPath = (0, savePath_1.getHistoryFilePath)(sessionId, projectPath);
95
+ try {
96
+ if (fs.existsSync(historyPath)) {
97
+ const historyData = JSON.parse(fs.readFileSync(historyPath, 'utf-8'));
98
+ const messages = historyData.messages || [];
99
+ const todos = historyData.todos || [];
100
+ (0, log_1.logInfo)(`加载历史消息 ${messages.length} 条,todos ${todos.length} 项`);
101
+ return { messages, todos };
102
+ }
103
+ else {
104
+ (0, log_1.logInfo)(`未找到历史文件: ${historyPath},开始新会话`);
105
+ return { messages: [], todos: [] };
106
+ }
107
+ }
108
+ catch (error) {
109
+ (0, log_1.logWarn)(`加载历史失败: ${error instanceof Error ? error.message : String(error)}`);
110
+ return { messages: [], todos: [] };
111
+ }
112
+ }
113
+ /**
114
+ * 清理指定项目目录下的旧历史文件,只保留最新的指定数量
115
+ * @param projectHistoryDir 项目历史目录路径
116
+ */
117
+ function cleanupProjectHistoryFiles(projectHistoryDir) {
118
+ try {
119
+ if (!fs.existsSync(projectHistoryDir)) {
120
+ return;
121
+ }
122
+ const files = fs.readdirSync(projectHistoryDir);
123
+ const historyFiles = files.filter(file => file.endsWith('.json') && /^\d{4}-\d{2}-\d{2}_.+\.json$/.test(file));
124
+ if (historyFiles.length <= config_1.PER_PROJECT_HISTORY_LENGTH_LIMIT) {
125
+ return;
126
+ }
127
+ const filesWithStats = historyFiles.map(file => {
128
+ const filePath = path.join(projectHistoryDir, file);
129
+ const stats = fs.statSync(filePath);
130
+ return { name: file, path: filePath, mtime: stats.mtime };
131
+ });
132
+ filesWithStats.sort((a, b) => b.mtime.getTime() - a.mtime.getTime());
133
+ const filesToDelete = filesWithStats.slice(config_1.PER_PROJECT_HISTORY_LENGTH_LIMIT);
134
+ for (const file of filesToDelete) {
135
+ try {
136
+ fs.unlinkSync(file.path);
137
+ (0, log_1.logDebug)(`删除旧历史文件: ${file.name}`);
138
+ }
139
+ catch (deleteError) {
140
+ (0, log_1.logWarn)(`删除历史文件失败 ${file.name}: ${deleteError instanceof Error ? deleteError.message : String(deleteError)}`);
141
+ }
142
+ }
143
+ if (filesToDelete.length > 0) {
144
+ (0, log_1.logDebug)(`项目清理完成,删除了 ${filesToDelete.length} 个旧历史文件`);
145
+ }
146
+ }
147
+ catch (error) {
148
+ (0, log_1.logWarn)(`清理项目历史文件失败: ${error instanceof Error ? error.message : String(error)}`);
149
+ }
150
+ }
151
+ /**
152
+ * 清理不活跃的项目目录,只保留最新的指定数量
153
+ */
154
+ function cleanupInactiveProjects() {
155
+ const historyDir = (0, savePath_1.getHistoryDir)();
156
+ try {
157
+ if (!fs.existsSync(historyDir)) {
158
+ return;
159
+ }
160
+ const entries = fs.readdirSync(historyDir, { withFileTypes: true });
161
+ const projectDirs = entries.filter(entry => entry.isDirectory() && entry.name.startsWith('-'));
162
+ if (projectDirs.length <= config_1.PROJECT_LENGTH_LIMIT) {
163
+ return;
164
+ }
165
+ // 获取每个项目目录的最新文件修改时间
166
+ const dirsWithStats = projectDirs.map(dir => {
167
+ const dirPath = path.join(historyDir, dir.name);
168
+ let latestMtime = new Date(0);
169
+ try {
170
+ const files = fs.readdirSync(dirPath);
171
+ for (const file of files) {
172
+ if (file.endsWith('.json')) {
173
+ const stats = fs.statSync(path.join(dirPath, file));
174
+ if (stats.mtime > latestMtime) {
175
+ latestMtime = stats.mtime;
176
+ }
177
+ }
178
+ }
179
+ }
180
+ catch {
181
+ // 读取失败使用最早时间
182
+ }
183
+ return { name: dir.name, path: dirPath, mtime: latestMtime };
184
+ });
185
+ dirsWithStats.sort((a, b) => b.mtime.getTime() - a.mtime.getTime());
186
+ const dirsToDelete = dirsWithStats.slice(config_1.PROJECT_LENGTH_LIMIT);
187
+ for (const dir of dirsToDelete) {
188
+ try {
189
+ fs.rmSync(dir.path, { recursive: true, force: true });
190
+ (0, log_1.logDebug)(`删除不活跃项目历史目录: ${dir.name}`);
191
+ }
192
+ catch (deleteError) {
193
+ (0, log_1.logWarn)(`删除项目历史目录失败 ${dir.name}: ${deleteError instanceof Error ? deleteError.message : String(deleteError)}`);
194
+ }
195
+ }
196
+ if (dirsToDelete.length > 0) {
197
+ (0, log_1.logDebug)(`项目目录清理完成,删除了 ${dirsToDelete.length} 个不活跃项目`);
198
+ }
199
+ }
200
+ catch (error) {
201
+ (0, log_1.logWarn)(`清理项目目录失败: ${error instanceof Error ? error.message : String(error)}`);
202
+ }
203
+ }
204
+ /**
205
+ * 清理旧的历史文件
206
+ * @param projectPath 项目绝对路径(可选)
207
+ */
208
+ async function cleanupOldHistoryFiles(projectPath) {
209
+ if (projectPath) {
210
+ cleanupProjectHistoryFiles((0, savePath_1.getProjectHistoryDir)(projectPath));
211
+ }
212
+ cleanupInactiveProjects();
213
+ }
214
+ /**
215
+ * 保存历史消息和todos
216
+ * @param sessionId 会话ID
217
+ * @param messages 消息列表
218
+ * @param todos Todo列表
219
+ * @param projectPath 项目绝对路径
220
+ */
221
+ async function saveHistory(sessionId, messages, todos, projectPath) {
222
+ const historyDir = projectPath ? (0, savePath_1.getProjectHistoryDir)(projectPath) : (0, savePath_1.getHistoryDir)();
223
+ const historyPath = (0, savePath_1.getHistoryFilePath)(sessionId, projectPath);
224
+ try {
225
+ // 确保目录存在
226
+ if (!fs.existsSync(historyDir)) {
227
+ fs.mkdirSync(historyDir, { recursive: true });
228
+ }
229
+ const historyData = {
230
+ messages: stripRedundantUsage(messages),
231
+ todos: todos || []
232
+ };
233
+ fs.writeFileSync(historyPath, JSON.stringify(historyData, null, 2));
234
+ (0, log_1.logInfo)(`保存历史消息 ${messages.length} 条,todos ${(todos || []).length} 项到 ${historyPath}`);
235
+ // 定时清理历史文件(每小时最多执行一次)
236
+ const nowTimestamp = (0, time_1.getCurrentTimestamp)();
237
+ if (nowTimestamp - lastHistoryCleanupTime > config_1.HISTORY_CLEANUP_INTERVAL) {
238
+ lastHistoryCleanupTime = nowTimestamp;
239
+ setImmediate(() => {
240
+ cleanupOldHistoryFiles(projectPath);
241
+ });
242
+ }
243
+ }
244
+ catch (error) {
245
+ (0, log_1.logWarn)(`保存历史失败: ${error instanceof Error ? error.message : String(error)}`);
246
+ }
247
+ }
248
+ //# sourceMappingURL=history.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"history.js","sourceRoot":"","sources":["../../src/util/history.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,23 @@
1
+ export type LogLevel = 'none' | 'debug' | 'info' | 'warn' | 'error';
2
+ /**
3
+ * 设置全局日志级别
4
+ * @param level 日志级别,默认 'info'
5
+ */
6
+ export declare const setLogLevel: (level?: LogLevel) => void;
7
+ /**
8
+ * 记录 debug 级别日志
9
+ */
10
+ export declare const logDebug: (message: string) => void;
11
+ /**
12
+ * 记录 info 级别日志
13
+ */
14
+ export declare const logInfo: (message: string) => void;
15
+ /**
16
+ * 记录 warn 级别日志
17
+ */
18
+ export declare const logWarn: (warning: string) => void;
19
+ /**
20
+ * 记录 error 级别日志
21
+ */
22
+ export declare const logError: (error: unknown) => void;
23
+ //# sourceMappingURL=log.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"log.d.ts","sourceRoot":"","sources":["../../src/util/log.ts"],"names":[],"mappings":"AAMA,MAAM,MAAM,QAAQ,GAAG,MAAM,GAAG,OAAO,GAAG,MAAM,GAAG,MAAM,GAAG,OAAO,CAAC;AAkBpE;;;GAGG;AACH,eAAO,MAAM,WAAW,GAAI,QAAO,QAAiB,KAAG,IAEtD,CAAC;AAiHF;;GAEG;AACH,eAAO,MAAM,QAAQ,GAAI,SAAS,MAAM,KAAG,IAE1C,CAAC;AAEF;;GAEG;AACH,eAAO,MAAM,OAAO,GAAI,SAAS,MAAM,KAAG,IAEzC,CAAC;AAEF;;GAEG;AACH,eAAO,MAAM,OAAO,GAAI,SAAS,MAAM,KAAG,IAEzC,CAAC;AAEF;;GAEG;AACH,eAAO,MAAM,QAAQ,GAAI,OAAO,OAAO,KAAG,IAmBzC,CAAC"}
@@ -0,0 +1,246 @@
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.logError = exports.logWarn = exports.logInfo = exports.logDebug = exports.setLogLevel = void 0;
37
+ const fs = __importStar(require("fs"));
38
+ const path = __importStar(require("path"));
39
+ const time_1 = require("./time");
40
+ const config_1 = require("../constants/config");
41
+ const savePath_1 = require("./savePath");
42
+ // 日志级别优先级映射
43
+ const LOG_LEVELS = {
44
+ debug: 0,
45
+ info: 1,
46
+ warn: 2,
47
+ error: 3,
48
+ none: 999 // 最高级别,禁用所有日志
49
+ };
50
+ // 全局配置
51
+ let globalLogLevel = 'info';
52
+ // 清理日志文件的时间间隔(毫秒)
53
+ let lastCleanupTime = 0;
54
+ const CLEANUP_INTERVAL = 60 * 60 * 1000; // 1小时
55
+ /**
56
+ * 设置全局日志级别
57
+ * @param level 日志级别,默认 'info'
58
+ */
59
+ const setLogLevel = (level = 'info') => {
60
+ globalLogLevel = level;
61
+ };
62
+ exports.setLogLevel = setLogLevel;
63
+ /**
64
+ * 判断是否应该记录该级别的日志
65
+ */
66
+ const shouldLog = (level) => {
67
+ return LOG_LEVELS[level] >= LOG_LEVELS[globalLogLevel];
68
+ };
69
+ /**
70
+ * 获取当前日期的日志文件路径
71
+ */
72
+ const getLogFilePath = () => {
73
+ const dateStr = (0, time_1.getDayTimeString)(); // 只取日期部分 YYYY-MM-DD
74
+ // 如果有sessionId,则在文件名中包含它
75
+ const filename = `${dateStr}.log`;
76
+ return path.join((0, savePath_1.getLogsDir)(), filename);
77
+ };
78
+ /**
79
+ * 获取调用者信息(文件名:行号)
80
+ */
81
+ const getCallerInfo = () => {
82
+ const stack = new Error().stack;
83
+ if (!stack)
84
+ return 'unknown:0';
85
+ const lines = stack.split('\n');
86
+ // 跳过当前函数、formatMessage、writeLog和具体日志函数的调用栈
87
+ // 从调用栈看:0=Error, 1=getCallerInfo, 2=formatMessage, 3=writeLog, 4=logInfo/logWarn等, 5=实际调用者
88
+ for (let i = 5; i < lines.length; i++) {
89
+ const line = lines[i]?.trim();
90
+ if (line) {
91
+ // 主要格式: at ClassName.methodName (/path/file.js:line:column)
92
+ let match = line.match(/at .+ \(([^\/\\]+)\.js:(\d+):\d+\)/);
93
+ if (match) {
94
+ // 将.js替换为.ts显示,并提取文件名
95
+ const filename = `${match[1]}.ts`;
96
+ return `${filename}:${match[2]}`;
97
+ }
98
+ // 备用格式: at functionName (/path/file.js:line:column)
99
+ match = line.match(/at [^(]+ \(.*\/([^\/\\]+)\.js:(\d+):\d+\)/);
100
+ if (match) {
101
+ const filename = `${match[1]}.ts`;
102
+ return `${filename}:${match[2]}`;
103
+ }
104
+ // 直接格式: at /path/file.js:line:column
105
+ match = line.match(/at .*\/([^\/\\]+)\.js:(\d+):\d+/);
106
+ if (match) {
107
+ const filename = `${match[1]}.ts`;
108
+ return `${filename}:${match[2]}`;
109
+ }
110
+ }
111
+ }
112
+ return 'unknown:0';
113
+ };
114
+ /**
115
+ * 格式化日志消息
116
+ */
117
+ const formatMessage = (level, message) => {
118
+ const timestamp = (0, time_1.getTimeString)(); // 使用时分秒格式
119
+ const levelStr = level.toUpperCase();
120
+ const callerInfo = getCallerInfo();
121
+ return `[${timestamp}] [${levelStr}] [${callerInfo}]: ${message}`;
122
+ };
123
+ /**
124
+ * 写入日志到文件和控制台
125
+ */
126
+ const writeLog = (level, message, consoleMethod) => {
127
+ if (!shouldLog(level)) {
128
+ return;
129
+ }
130
+ const formattedMessage = formatMessage(level, message);
131
+ // 输出到控制台
132
+ consoleMethod(formattedMessage);
133
+ // 写入文件
134
+ try {
135
+ // 确保日志目录存在
136
+ const logsDir = (0, savePath_1.getLogsDir)();
137
+ if (!fs.existsSync(logsDir)) {
138
+ fs.mkdirSync(logsDir, { recursive: true });
139
+ }
140
+ const logFilePath = getLogFilePath();
141
+ fs.appendFileSync(logFilePath, formattedMessage + '\n', 'utf8');
142
+ // 定时清理日志文件(每小时最多执行一次)
143
+ const nowTimestamp = (0, time_1.getCurrentTimestamp)();
144
+ if (nowTimestamp - lastCleanupTime > CLEANUP_INTERVAL) {
145
+ lastCleanupTime = nowTimestamp;
146
+ // 异步执行清理,避免阻塞日志写入
147
+ setImmediate(() => {
148
+ cleanupLogFiles();
149
+ });
150
+ }
151
+ }
152
+ catch (err) {
153
+ // 避免递归调用logError,直接使用console.error
154
+ if (level !== 'error') {
155
+ console.error('日志写入失败:', err);
156
+ }
157
+ }
158
+ };
159
+ /**
160
+ * 记录 debug 级别日志
161
+ */
162
+ const logDebug = (message) => {
163
+ writeLog('debug', message, console.log);
164
+ };
165
+ exports.logDebug = logDebug;
166
+ /**
167
+ * 记录 info 级别日志
168
+ */
169
+ const logInfo = (message) => {
170
+ writeLog('info', message, console.log);
171
+ };
172
+ exports.logInfo = logInfo;
173
+ /**
174
+ * 记录 warn 级别日志
175
+ */
176
+ const logWarn = (warning) => {
177
+ writeLog('warn', warning, console.warn);
178
+ };
179
+ exports.logWarn = logWarn;
180
+ /**
181
+ * 记录 error 级别日志
182
+ */
183
+ const logError = (error) => {
184
+ if (error instanceof Error) {
185
+ // 权限中断 或 用户中断信息 不记录
186
+ if (error.message === 'Request cancelled by user' || error.message === 'Operation was interrupted by user') {
187
+ return;
188
+ }
189
+ }
190
+ let message;
191
+ if (error instanceof Error) {
192
+ message = `${error.message}\n${error.stack || ''}`;
193
+ }
194
+ else if (typeof error === 'string') {
195
+ message = error;
196
+ }
197
+ else {
198
+ message = JSON.stringify(error);
199
+ }
200
+ writeLog('error', message, console.error);
201
+ };
202
+ exports.logError = logError;
203
+ /**
204
+ * 通用文件清理函数
205
+ * @param dir 目录路径
206
+ * @param extension 文件扩展名
207
+ * @param maxFiles 最大保留文件数
208
+ * @param logType 日志类型(用于打印信息)
209
+ */
210
+ const cleanupFiles = (dir, extension, maxFiles = 30) => {
211
+ try {
212
+ if (!fs.existsSync(dir)) {
213
+ return;
214
+ }
215
+ // 读取指定扩展名的文件
216
+ const files = fs.readdirSync(dir)
217
+ .filter(file => file.endsWith(extension))
218
+ .map(file => ({
219
+ name: file,
220
+ path: path.join(dir, file),
221
+ mtime: fs.statSync(path.join(dir, file)).mtime
222
+ }))
223
+ // 按修改时间降序排序(最新的在前面)
224
+ .sort((a, b) => b.mtime.getTime() - a.mtime.getTime());
225
+ // 如果文件数量超过指定数量,删除多余的文件
226
+ if (files.length > maxFiles) {
227
+ const filesToDelete = files.slice(maxFiles);
228
+ for (const file of filesToDelete) {
229
+ try {
230
+ fs.unlinkSync(file.path);
231
+ }
232
+ catch (err) {
233
+ }
234
+ }
235
+ }
236
+ }
237
+ catch (err) {
238
+ }
239
+ };
240
+ /**
241
+ * 清理普通日志文件,只保留最近指定数量的文件(按修改时间排序)
242
+ */
243
+ const cleanupLogFiles = () => {
244
+ cleanupFiles((0, savePath_1.getLogsDir)(), '.log', config_1.SERVICE_LOG_FILES_RETAIN_COUNT);
245
+ };
246
+ //# sourceMappingURL=log.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"log.js","sourceRoot":"","sources":["../../src/util/log.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,20 @@
1
+ /**
2
+ * 记录LLM请求body到专门的日志文件
3
+ * 格式: [HH:MM:SS]${body}
4
+ * @param body 请求的JSON体
5
+ */
6
+ export declare const logLLMRequest: (body: any) => void;
7
+ /**
8
+ * 记录LLM响应到专门的日志文件
9
+ * 格式: [HH:MM:SS]${response}
10
+ * @param assistantMessage LLM响应消息
11
+ */
12
+ export declare const logLLMResponse: (assistantMessage: any) => void;
13
+ /**
14
+ * 记录事件到日志文件
15
+ * 格式: [HH:MM:SS]${event}|${data}
16
+ * @param event 事件名
17
+ * @param data 事件数据
18
+ */
19
+ export declare const logEvent: (event: string, data: any) => void;
20
+ //# sourceMappingURL=logLLM.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"logLLM.d.ts","sourceRoot":"","sources":["../../src/util/logLLM.ts"],"names":[],"mappings":"AAkDA;;;;GAIG;AACH,eAAO,MAAM,aAAa,GAAI,MAAM,GAAG,KAAG,IAsBzC,CAAC;AAEF;;;;GAIG;AACH,eAAO,MAAM,cAAc,GAAI,kBAAkB,GAAG,KAAG,IA+CtD,CAAC;AAsOF;;;;;GAKG;AACH,eAAO,MAAM,QAAQ,GAAI,OAAO,MAAM,EAAE,MAAM,GAAG,KAAG,IAoBnD,CAAC"}