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,60 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.calculateStats = calculateStats;
4
+ exports.formatSummary = formatSummary;
5
+ exports.extractResultText = extractResultText;
6
+ const tokens_1 = require("./tokens");
7
+ // 从消息列表中统计 tokens 和工具使用
8
+ function calculateStats(messages, startTime) {
9
+ const { inputTokens, outputTokens } = (0, tokens_1.countTokens)(messages);
10
+ const totalTokens = inputTokens + outputTokens;
11
+ let toolUseCount = 0;
12
+ for (const msg of messages) {
13
+ if (msg.type === 'assistant' && msg.message.content) {
14
+ for (const block of msg.message.content) {
15
+ if (block.type === 'tool_use') {
16
+ toolUseCount++;
17
+ }
18
+ }
19
+ }
20
+ }
21
+ return {
22
+ inputTokens,
23
+ outputTokens,
24
+ totalTokens,
25
+ toolUseCount,
26
+ durationMs: Date.now() - startTime
27
+ };
28
+ }
29
+ // 格式化摘要信息
30
+ function formatSummary(stats, status) {
31
+ const durationSec = Math.floor(stats.durationMs / 1000);
32
+ const toolsText = `${stats.toolUseCount} tool${stats.toolUseCount !== 1 ? 's' : ''} use`;
33
+ const tokensText = stats.totalTokens >= 1000
34
+ ? `${(stats.totalTokens / 1000).toFixed(1)}k tokens`
35
+ : `${stats.totalTokens} tokens`;
36
+ const durationText = durationSec < 60
37
+ ? `${durationSec}s`
38
+ : `${Math.floor(durationSec / 60)}m ${durationSec % 60}s`;
39
+ const prefix = status === 'completed' ? 'Done' : 'Interrupted';
40
+ return `${prefix}(${toolsText} · ${tokensText} · ${durationText})`;
41
+ }
42
+ // 从消息列表中提取最后一次 assistant 响应的文本内容
43
+ function extractResultText(messages) {
44
+ for (let i = messages.length - 1; i >= 0; i--) {
45
+ const message = messages[i];
46
+ if (message.type === 'assistant' && message.message.content) {
47
+ let currentMessageText = '';
48
+ for (const block of message.message.content) {
49
+ if (block.type === 'text') {
50
+ currentMessageText += block.text;
51
+ }
52
+ }
53
+ if (currentMessageText) {
54
+ return currentMessageText;
55
+ }
56
+ }
57
+ }
58
+ return 'Agent completed without returning text output.';
59
+ }
60
+ //# sourceMappingURL=agentStats.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"agentStats.js","sourceRoot":"","sources":["../../src/util/agentStats.ts"],"names":[],"mappings":";;AAYA,wCAsBC;AAGD,sCAYC;AAGD,8CAgBC;AApED,qCAAsC;AAWtC,wBAAwB;AACxB,SAAgB,cAAc,CAAC,QAAe,EAAE,SAAiB;IAC/D,MAAM,EAAE,WAAW,EAAE,YAAY,EAAE,GAAG,IAAA,oBAAW,EAAC,QAAQ,CAAC,CAAA;IAC3D,MAAM,WAAW,GAAG,WAAW,GAAG,YAAY,CAAA;IAE9C,IAAI,YAAY,GAAG,CAAC,CAAA;IACpB,KAAK,MAAM,GAAG,IAAI,QAAQ,EAAE,CAAC;QAC3B,IAAI,GAAG,CAAC,IAAI,KAAK,WAAW,IAAI,GAAG,CAAC,OAAO,CAAC,OAAO,EAAE,CAAC;YACpD,KAAK,MAAM,KAAK,IAAI,GAAG,CAAC,OAAO,CAAC,OAAO,EAAE,CAAC;gBACxC,IAAI,KAAK,CAAC,IAAI,KAAK,UAAU,EAAE,CAAC;oBAC9B,YAAY,EAAE,CAAA;gBAChB,CAAC;YACH,CAAC;QACH,CAAC;IACH,CAAC;IAED,OAAO;QACL,WAAW;QACX,YAAY;QACZ,WAAW;QACX,YAAY;QACZ,UAAU,EAAE,IAAI,CAAC,GAAG,EAAE,GAAG,SAAS;KACnC,CAAA;AACH,CAAC;AAED,UAAU;AACV,SAAgB,aAAa,CAAC,KAAiB,EAAE,MAAmC;IAClF,MAAM,WAAW,GAAG,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,UAAU,GAAG,IAAI,CAAC,CAAA;IACvD,MAAM,SAAS,GAAG,GAAG,KAAK,CAAC,YAAY,QAAQ,KAAK,CAAC,YAAY,KAAK,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,MAAM,CAAA;IACxF,MAAM,UAAU,GAAG,KAAK,CAAC,WAAW,IAAI,IAAI;QAC1C,CAAC,CAAC,GAAG,CAAC,KAAK,CAAC,WAAW,GAAG,IAAI,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,UAAU;QACpD,CAAC,CAAC,GAAG,KAAK,CAAC,WAAW,SAAS,CAAA;IACjC,MAAM,YAAY,GAAG,WAAW,GAAG,EAAE;QACnC,CAAC,CAAC,GAAG,WAAW,GAAG;QACnB,CAAC,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC,WAAW,GAAG,EAAE,CAAC,KAAK,WAAW,GAAG,EAAE,GAAG,CAAA;IAE3D,MAAM,MAAM,GAAG,MAAM,KAAK,WAAW,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,aAAa,CAAA;IAC9D,OAAO,GAAG,MAAM,IAAI,SAAS,MAAM,UAAU,MAAM,YAAY,GAAG,CAAA;AACpE,CAAC;AAED,iCAAiC;AACjC,SAAgB,iBAAiB,CAAC,QAAe;IAC/C,KAAK,IAAI,CAAC,GAAG,QAAQ,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC;QAC9C,MAAM,OAAO,GAAG,QAAQ,CAAC,CAAC,CAAC,CAAA;QAC3B,IAAI,OAAO,CAAC,IAAI,KAAK,WAAW,IAAI,OAAO,CAAC,OAAO,CAAC,OAAO,EAAE,CAAC;YAC5D,IAAI,kBAAkB,GAAG,EAAE,CAAA;YAC3B,KAAK,MAAM,KAAK,IAAI,OAAO,CAAC,OAAO,CAAC,OAAO,EAAE,CAAC;gBAC5C,IAAI,KAAK,CAAC,IAAI,KAAK,MAAM,EAAE,CAAC;oBAC1B,kBAAkB,IAAI,KAAK,CAAC,IAAI,CAAA;gBAClC,CAAC;YACH,CAAC;YACD,IAAI,kBAAkB,EAAE,CAAC;gBACvB,OAAO,kBAAkB,CAAA;YAC3B,CAAC;QACH,CAAC;IACH,CAAC;IACD,OAAO,gDAAgD,CAAA;AACzD,CAAC"}
@@ -0,0 +1,47 @@
1
+ import { AssistantMessage, UserMessage } from '../types/message';
2
+ declare class FileLLMCache {
3
+ private readonly maxEntries;
4
+ private readonly cacheFilePath;
5
+ constructor();
6
+ /**
7
+ * 确保缓存目录存在
8
+ */
9
+ private ensureCacheDir;
10
+ /**
11
+ * 生成缓存键 - 基于消息内容生成简单hash
12
+ */
13
+ private generateKey;
14
+ /**
15
+ * 读取缓存文件
16
+ */
17
+ private readCacheFile;
18
+ /**
19
+ * 写入缓存文件
20
+ */
21
+ private writeCacheFile;
22
+ /**
23
+ * 获取缓存
24
+ */
25
+ get(messages: (UserMessage | AssistantMessage)[], systemPrompt: string[] | Array<{
26
+ type: 'text';
27
+ text: string;
28
+ }>, modelName: string, enableThinking?: boolean): AssistantMessage | null;
29
+ /**
30
+ * 设置缓存
31
+ */
32
+ set(messages: (UserMessage | AssistantMessage)[], systemPrompt: string[] | Array<{
33
+ type: 'text';
34
+ text: string;
35
+ }>, modelName: string, response: AssistantMessage, enableThinking?: boolean): void;
36
+ /**
37
+ * 清空缓存
38
+ */
39
+ clear(): void;
40
+ /**
41
+ * 获取缓存大小
42
+ */
43
+ size(): number;
44
+ }
45
+ export declare const llmCache: FileLLMCache;
46
+ export {};
47
+ //# sourceMappingURL=cacheLLM.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"cacheLLM.d.ts","sourceRoot":"","sources":["../../src/util/cacheLLM.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,gBAAgB,EAAE,WAAW,EAAE,MAAM,kBAAkB,CAAA;AAWhE,cAAM,YAAY;IAChB,OAAO,CAAC,QAAQ,CAAC,UAAU,CAAM;IACjC,OAAO,CAAC,QAAQ,CAAC,aAAa,CAAQ;;IAOtC;;OAEG;IACH,OAAO,CAAC,cAAc;IAOtB;;OAEG;IACH,OAAO,CAAC,WAAW;IAoBnB;;OAEG;IACH,OAAO,CAAC,aAAa;IAarB;;OAEG;IACH,OAAO,CAAC,cAAc;IAQtB;;OAEG;IACH,GAAG,CACD,QAAQ,EAAE,CAAC,WAAW,GAAG,gBAAgB,CAAC,EAAE,EAC5C,YAAY,EAAE,MAAM,EAAE,GAAG,KAAK,CAAC;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,MAAM,CAAA;KAAE,CAAC,EAC9D,SAAS,EAAE,MAAM,EACjB,cAAc,GAAE,OAAe,GAC9B,gBAAgB,GAAG,IAAI;IAQ1B;;OAEG;IACH,GAAG,CACD,QAAQ,EAAE,CAAC,WAAW,GAAG,gBAAgB,CAAC,EAAE,EAC5C,YAAY,EAAE,MAAM,EAAE,GAAG,KAAK,CAAC;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,MAAM,CAAA;KAAE,CAAC,EAC9D,SAAS,EAAE,MAAM,EACjB,QAAQ,EAAE,gBAAgB,EAC1B,cAAc,GAAE,OAAe,GAC9B,IAAI;IAsBP;;OAEG;IACH,KAAK,IAAI,IAAI;IAUb;;OAEG;IACH,IAAI,IAAI,MAAM;CAIf;AAGD,eAAO,MAAM,QAAQ,cAAqB,CAAA"}
@@ -0,0 +1,154 @@
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
+ var __importDefault = (this && this.__importDefault) || function (mod) {
36
+ return (mod && mod.__esModule) ? mod : { "default": mod };
37
+ };
38
+ Object.defineProperty(exports, "__esModule", { value: true });
39
+ exports.llmCache = void 0;
40
+ const crypto_1 = __importDefault(require("crypto"));
41
+ const fs = __importStar(require("fs"));
42
+ const savePath_1 = require("./savePath");
43
+ // llm缓存实现
44
+ class FileLLMCache {
45
+ constructor() {
46
+ this.maxEntries = 100;
47
+ this.cacheFilePath = (0, savePath_1.getLLMCacheFilePath)();
48
+ this.ensureCacheDir();
49
+ }
50
+ /**
51
+ * 确保缓存目录存在
52
+ */
53
+ ensureCacheDir() {
54
+ const cacheDir = (0, savePath_1.getCacheDir)();
55
+ if (!fs.existsSync(cacheDir)) {
56
+ fs.mkdirSync(cacheDir, { recursive: true });
57
+ }
58
+ }
59
+ /**
60
+ * 生成缓存键 - 基于消息内容生成简单hash
61
+ */
62
+ generateKey(messages, systemPrompt, modelName, enableThinking = false) {
63
+ // 统一处理系统提示格式
64
+ const normalizedSystemPrompt = Array.isArray(systemPrompt) && systemPrompt.length > 0 && typeof systemPrompt[0] === 'object' && 'type' in systemPrompt[0]
65
+ ? systemPrompt.map(item => item.text)
66
+ : systemPrompt;
67
+ const content = JSON.stringify({
68
+ messages: messages.map(msg => msg.message.content),
69
+ systemPrompt: normalizedSystemPrompt,
70
+ modelName,
71
+ enableThinking
72
+ });
73
+ return crypto_1.default.createHash('md5').update(content).digest('hex');
74
+ }
75
+ /**
76
+ * 读取缓存文件
77
+ */
78
+ readCacheFile() {
79
+ try {
80
+ if (!fs.existsSync(this.cacheFilePath)) {
81
+ return [];
82
+ }
83
+ const data = fs.readFileSync(this.cacheFilePath, 'utf8');
84
+ return JSON.parse(data) || [];
85
+ }
86
+ catch (error) {
87
+ // 文件损坏或不存在,返回空数组
88
+ return [];
89
+ }
90
+ }
91
+ /**
92
+ * 写入缓存文件
93
+ */
94
+ writeCacheFile(entries) {
95
+ try {
96
+ fs.writeFileSync(this.cacheFilePath, JSON.stringify(entries, null, 2), 'utf8');
97
+ }
98
+ catch (error) {
99
+ // 写入失败,忽略错误
100
+ }
101
+ }
102
+ /**
103
+ * 获取缓存
104
+ */
105
+ get(messages, systemPrompt, modelName, enableThinking = false) {
106
+ const key = this.generateKey(messages, systemPrompt, modelName, enableThinking);
107
+ const entries = this.readCacheFile();
108
+ const entry = entries.find(e => e.key === key);
109
+ return entry ? entry.response : null;
110
+ }
111
+ /**
112
+ * 设置缓存
113
+ */
114
+ set(messages, systemPrompt, modelName, response, enableThinking = false) {
115
+ const key = this.generateKey(messages, systemPrompt, modelName, enableThinking);
116
+ let entries = this.readCacheFile();
117
+ // 移除已存在的相同key
118
+ entries = entries.filter(e => e.key !== key);
119
+ // 添加新条目
120
+ entries.unshift({
121
+ key,
122
+ response,
123
+ timestamp: Date.now()
124
+ });
125
+ // 保持最多n条记录
126
+ if (entries.length > this.maxEntries) {
127
+ entries = entries.slice(0, this.maxEntries);
128
+ }
129
+ this.writeCacheFile(entries);
130
+ }
131
+ /**
132
+ * 清空缓存
133
+ */
134
+ clear() {
135
+ try {
136
+ if (fs.existsSync(this.cacheFilePath)) {
137
+ fs.unlinkSync(this.cacheFilePath);
138
+ }
139
+ }
140
+ catch (error) {
141
+ // 删除失败,忽略错误
142
+ }
143
+ }
144
+ /**
145
+ * 获取缓存大小
146
+ */
147
+ size() {
148
+ const entries = this.readCacheFile();
149
+ return entries.length;
150
+ }
151
+ }
152
+ // 全局缓存实例
153
+ exports.llmCache = new FileLLMCache();
154
+ //# sourceMappingURL=cacheLLM.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"cacheLLM.js","sourceRoot":"","sources":["../../src/util/cacheLLM.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,16 @@
1
+ export type CommandPrefixResult = {
2
+ commandPrefix: string | null;
3
+ commandInjectionDetected: false;
4
+ } | {
5
+ commandInjectionDetected: true;
6
+ };
7
+ export type CommandSubcommandPrefixResult = CommandPrefixResult & {
8
+ subcommandPrefixes: Map<string, CommandPrefixResult>;
9
+ };
10
+ /**
11
+ * 根据shell操作符将命令字符串拆分为单个命令
12
+ */
13
+ export declare function splitCommand(command: string): string[];
14
+ export declare const getCommandSubcommandPrefix: ((command: string, abortSignal: AbortSignal) => Promise<CommandSubcommandPrefixResult | null>) & import("lodash").MemoizedFunction;
15
+ export declare function isUnsafeCompoundCommand(command: string): boolean;
16
+ //# sourceMappingURL=commands.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"commands.d.ts","sourceRoot":"","sources":["../../src/util/commands.ts"],"names":[],"mappings":"AAQA,MAAM,MAAM,mBAAmB,GAC3B;IACE,aAAa,EAAE,MAAM,GAAG,IAAI,CAAA;IAC5B,wBAAwB,EAAE,KAAK,CAAA;CAChC,GACD;IAAE,wBAAwB,EAAE,IAAI,CAAA;CAAE,CAAA;AAGtC,MAAM,MAAM,6BAA6B,GAAG,mBAAmB,GAAG;IAChE,kBAAkB,EAAE,GAAG,CAAC,MAAM,EAAE,mBAAmB,CAAC,CAAA;CACrD,CAAA;AAED;;GAEG;AACH,wBAAgB,YAAY,CAAC,OAAO,EAAE,MAAM,GAAG,MAAM,EAAE,CAkDtD;AAED,eAAO,MAAM,0BAA0B,aAE1B,MAAM,eACF,WAAW,KACvB,OAAO,CAAC,6BAA6B,GAAG,IAAI,CAAC,qCA+BjD,CAAA;AAuJD,wBAAgB,uBAAuB,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAEhE"}
@@ -0,0 +1,216 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.getCommandSubcommandPrefix = void 0;
4
+ exports.splitCommand = splitCommand;
5
+ exports.isUnsafeCompoundCommand = isUnsafeCompoundCommand;
6
+ const lodash_es_1 = require("lodash-es");
7
+ const shell_quote_1 = require("shell-quote");
8
+ const queryLLM_1 = require("../services/api/queryLLM");
9
+ const message_1 = require("../constants/message");
10
+ const SINGLE_QUOTE = '__SINGLE_QUOTE__';
11
+ const DOUBLE_QUOTE = '__DOUBLE_QUOTE__';
12
+ /**
13
+ * 根据shell操作符将命令字符串拆分为单个命令
14
+ */
15
+ function splitCommand(command) {
16
+ const parts = [];
17
+ // 1. 合并相邻的字符串
18
+ // 为引号添加特殊标记,防止后续解析时被误处理
19
+ for (const part of (0, shell_quote_1.parse)(command
20
+ .replaceAll('"', `"${DOUBLE_QUOTE}`)
21
+ .replaceAll("'", `'${SINGLE_QUOTE}`), varName => `$${varName}`)) {
22
+ if (typeof part === 'string') {
23
+ if (parts.length > 0 && typeof parts[parts.length - 1] === 'string') {
24
+ parts[parts.length - 1] += ' ' + part;
25
+ continue;
26
+ }
27
+ }
28
+ parts.push(part);
29
+ }
30
+ // 2. 将令牌映射为字符串
31
+ const stringParts = parts
32
+ .map(part => {
33
+ if (typeof part === 'string') {
34
+ return part;
35
+ }
36
+ if ('comment' in part) {
37
+ return '#' + part.comment;
38
+ }
39
+ if ('op' in part && part.op === 'glob') {
40
+ return part.pattern;
41
+ }
42
+ if ('op' in part) {
43
+ return part.op;
44
+ }
45
+ return null;
46
+ })
47
+ .filter(_ => _ !== null);
48
+ // 3. 将引号映射回原始形式
49
+ const quotedParts = stringParts.map(part => {
50
+ return part
51
+ .replaceAll(`${SINGLE_QUOTE}`, "'")
52
+ .replaceAll(`${DOUBLE_QUOTE}`, '"');
53
+ });
54
+ // 4. 过滤掉分隔符
55
+ return quotedParts.filter(part => !COMMAND_LIST_SEPARATORS.has(part));
56
+ }
57
+ exports.getCommandSubcommandPrefix = (0, lodash_es_1.memoize)(async (command, abortSignal) => {
58
+ const subcommands = splitCommand(command);
59
+ const [fullCommandPrefix, ...subcommandPrefixesResults] = await Promise.all([
60
+ getCommandPrefix(command, abortSignal),
61
+ ...subcommands.map(async (subcommand) => ({
62
+ subcommand,
63
+ prefix: await getCommandPrefix(subcommand, abortSignal),
64
+ })),
65
+ ]);
66
+ if (!fullCommandPrefix) {
67
+ return null;
68
+ }
69
+ const subcommandPrefixes = subcommandPrefixesResults.reduce((acc, { subcommand, prefix }) => {
70
+ if (prefix) {
71
+ acc.set(subcommand, prefix);
72
+ }
73
+ return acc;
74
+ }, new Map());
75
+ return {
76
+ ...fullCommandPrefix,
77
+ subcommandPrefixes,
78
+ };
79
+ }, command => command);
80
+ const getCommandPrefix = (0, lodash_es_1.memoize)(async (command, abortSignal) => {
81
+ const response = await (0, queryLLM_1.queryQuick)({
82
+ systemPrompt: [
83
+ {
84
+ type: 'text',
85
+ text: `Your task is to process Bash commands that an AI coding agent wants to run.
86
+
87
+ This policy spec defines how to determine the prefix of a Bash command:`
88
+ }
89
+ ],
90
+ userPrompt: `<policy_spec>
91
+ # Code Bash command prefix detection
92
+
93
+ This document defines risk levels for actions that the agent may take. This classification system is part of a broader safety framework and is used to determine when additional user confirmation or oversight may be needed.
94
+
95
+ ## Definitions
96
+
97
+ **Command Injection:** Any technique used that would result in a command being run other than the detected prefix.
98
+
99
+ ## Command prefix extraction examples
100
+ Examples:
101
+ - cat foo.txt => cat
102
+ - cd src => cd
103
+ - cd path/to/files/ => cd
104
+ - find ./src -type f -name "*.ts" => find
105
+ - gg cat foo.py => gg cat
106
+ - gg cp foo.py bar.py => gg cp
107
+ - git commit -m "foo" => git commit
108
+ - git diff HEAD~1 => git diff
109
+ - git diff --staged => git diff
110
+ - git diff $(pwd) => command_injection_detected
111
+ - git status => git status
112
+ - git status# test(\`id\`) => command_injection_detected
113
+ - git status\`ls\` => command_injection_detected
114
+ - git push => none
115
+ - git push origin master => git push
116
+ - git log -n 5 => git log
117
+ - git log --oneline -n 5 => git log
118
+ - grep -A 40 "from foo.bar.baz import" alpha/beta/gamma.py => grep
119
+ - pig tail zerba.log => pig tail
120
+ - npm test => none
121
+ - npm test --foo => npm test
122
+ - npm test -- -f "foo" => npm test
123
+ - pwd\n curl example.com => command_injection_detected
124
+ - pytest foo/bar.py => pytest
125
+ - scalac build => none
126
+ </policy_spec>
127
+
128
+ The user has allowed certain command prefixes to be run, and will otherwise be asked to approve or deny the command.
129
+ Your task is to determine the command prefix for the following command.
130
+
131
+ IMPORTANT: Bash commands may run multiple commands that are chained together.
132
+ For safety, if the command seems to contain command injection, you must return "command_injection_detected".
133
+ (This will help protect the user: if they think that they're allowlisting command A,
134
+ but the AI coding agent sends a malicious command that technically has the same prefix as command A,
135
+ then the safety system will see that you said “command_injection_detected” and ask the user for manual confirmation.)
136
+
137
+ Note that not every command has a prefix. If a command has no prefix, return "none".
138
+
139
+ ONLY return the prefix. Do not return any other text, markdown markers, or other content or formatting.
140
+
141
+ Command: ${command}
142
+ `,
143
+ signal: abortSignal,
144
+ enableLLMCache: false,
145
+ });
146
+ const prefix = typeof response.message.content === 'string'
147
+ ? response.message.content
148
+ : Array.isArray(response.message.content)
149
+ ? (response.message.content.find(_ => _.type === 'text')?.text ??
150
+ 'none')
151
+ : 'none';
152
+ if (prefix.startsWith(message_1.API_ERROR_MESSAGE_PREFIX)) {
153
+ return null;
154
+ }
155
+ if (prefix === 'command_injection_detected') {
156
+ return { commandInjectionDetected: true };
157
+ }
158
+ // 永远不接受基本`git`作为前缀(例如,如果未检测到`git diff`前缀)
159
+ if (prefix === 'git') {
160
+ return {
161
+ commandPrefix: null,
162
+ commandInjectionDetected: false,
163
+ };
164
+ }
165
+ if (prefix === 'none') {
166
+ return {
167
+ commandPrefix: null,
168
+ commandInjectionDetected: false,
169
+ };
170
+ }
171
+ return {
172
+ commandPrefix: prefix,
173
+ commandInjectionDetected: false,
174
+ };
175
+ }, command => command);
176
+ const COMMAND_LIST_SEPARATORS = new Set([
177
+ '&&',
178
+ '||',
179
+ ';',
180
+ ';;',
181
+ ]);
182
+ // 检查这是否只是一个命令列表
183
+ function isCommandList(command) {
184
+ for (const part of (0, shell_quote_1.parse)(command
185
+ .replaceAll('"', `"${DOUBLE_QUOTE}`) // parse()会去掉引号 :P
186
+ .replaceAll("'", `'${SINGLE_QUOTE}`), // parse()会去掉引号 :P
187
+ // parse()会去掉引号 :P
188
+ varName => `$${varName}`)) {
189
+ if (typeof part === 'string') {
190
+ // 字符串是安全的
191
+ continue;
192
+ }
193
+ if ('comment' in part) {
194
+ // 不信任注释,它们可能包含命令注入
195
+ return false;
196
+ }
197
+ if ('op' in part) {
198
+ if (part.op === 'glob') {
199
+ // 通配符是安全的
200
+ continue;
201
+ }
202
+ else if (COMMAND_LIST_SEPARATORS.has(part.op)) {
203
+ // 命令列表分隔符是安全的
204
+ continue;
205
+ }
206
+ // 其他操作符不安全
207
+ return false;
208
+ }
209
+ }
210
+ // 在整个命令中未找到不安全的操作符
211
+ return true;
212
+ }
213
+ function isUnsafeCompoundCommand(command) {
214
+ return splitCommand(command).length > 1 && !isCommandList(command);
215
+ }
216
+ //# sourceMappingURL=commands.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"commands.js","sourceRoot":"","sources":["../../src/util/commands.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,25 @@
1
+ import { Message } from '../types/message';
2
+ /**
3
+ * 执行上下文压缩(公开接口)
4
+ *
5
+ * 该函数直接执行压缩,不检查阈值。适用于:
6
+ * - 用户手动触发 /compact 命令
7
+ * - 自动压缩检查通过后调用
8
+
9
+ * 改进的错误处理机制:
10
+ * - 压缩失败时会自动使用消息截断作为备用策略
11
+ * - 确保系统在各种异常情况下都能保持功能正常
12
+ * - 提供多层降级方案以避免完全失败
13
+ */
14
+ export declare function compactMessages(messages: Message[], abortController: AbortController): Promise<Message[]>;
15
+ /**
16
+ * 自动上下文压缩的主要入口函数
17
+ *
18
+ * 该函数在每次查询前被调用,用于检查对话是否已超出容量需要压缩。
19
+ * 会自动分离最后的用户消息(如果有),压缩历史消息后再添加回用户消息。
20
+ */
21
+ export declare function checkAutoCompact(messages: Message[], abortController: AbortController): Promise<{
22
+ messages: Message[];
23
+ wasCompacted: boolean;
24
+ }>;
25
+ //# sourceMappingURL=compact.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"compact.d.ts","sourceRoot":"","sources":["../../src/util/compact.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,kBAAkB,CAAA;AA6R1C;;;;;;;;;;;GAWG;AACH,wBAAsB,eAAe,CACnC,QAAQ,EAAE,OAAO,EAAE,EACnB,eAAe,EAAE,eAAe,GAC/B,OAAO,CAAC,OAAO,EAAE,CAAC,CA8CpB;AAED;;;;;GAKG;AACH,wBAAsB,gBAAgB,CACpC,QAAQ,EAAE,OAAO,EAAE,EACnB,eAAe,EAAE,eAAe,GAC/B,OAAO,CAAC;IAAE,QAAQ,EAAE,OAAO,EAAE,CAAC;IAAC,YAAY,EAAE,OAAO,CAAA;CAAE,CAAC,CA2CzD"}