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
@@ -1,197 +0,0 @@
1
- "use strict";
2
- // /**
3
- // * 自定义 Slash Commands 加载和管理模块
4
- // */
5
- // import * as fs from 'fs';
6
- // import * as path from 'path';
7
- // import { promisify } from 'util';
8
- // import { CustomCommand, LoadCustomCommandsResult, CustomCommandFrontmatter } from '../../types/command';
9
- // import { parseMarkdownWithFrontmatter } from '../../util/frontmatter';
10
- // import { getSemaRootDir } from '../../util/savePath';
11
- // import { getOriginalCwd } from '../../util/cwd';
12
- // import { normalizeFilePath } from '../../util/file';
13
- // import { logDebug, logWarn } from '../../util/log';
14
- // const readdir = promisify(fs.readdir);
15
- // const stat = promisify(fs.stat);
16
- // const readFile = promisify(fs.readFile);
17
- // const access = promisify(fs.access);
18
- // /**
19
- // * 命令缓存
20
- // */
21
- // let cachedCommands: CustomCommand[] | null = null;
22
- // /**
23
- // * 获取自定义命令目录
24
- // */
25
- // export function getCustomCommandDirectories(): {
26
- // projectCommands: string;
27
- // userCommands: string;
28
- // } {
29
- // const projectDir = getOriginalCwd();
30
- // const userDir = getSemaRootDir();
31
- // return {
32
- // projectCommands: path.join(projectDir, '.sema', 'commands'),
33
- // userCommands: path.join(userDir, 'commands'),
34
- // };
35
- // }
36
- // /**
37
- // * 检查目录是否存在
38
- // */
39
- // async function directoryExists(dir: string): Promise<boolean> {
40
- // try {
41
- // await access(dir, fs.constants.R_OK);
42
- // const stats = await stat(dir);
43
- // return stats.isDirectory();
44
- // } catch {
45
- // return false;
46
- // }
47
- // }
48
- // /**
49
- // * 从文件路径生成命令名
50
- // * 例如:frontend/test.md → frontend:test
51
- // */
52
- // function generateCommandName(filePath: string, baseDir: string): string {
53
- // const relativePath = path.relative(baseDir, filePath);
54
- // const withoutExt = relativePath.replace(/\.md$/i, '');
55
- // // 将路径分隔符替换为冒号
56
- // return withoutExt.split(path.sep).join(':');
57
- // }
58
- // /**
59
- // * 解析命令文件
60
- // */
61
- // async function parseCommandFile(
62
- // filePath: string,
63
- // baseDir: string,
64
- // scope: 'user' | 'project'
65
- // ): Promise<CustomCommand | null> {
66
- // try {
67
- // const fileContent = await readFile(filePath, 'utf-8');
68
- // const { metadata, body } = parseMarkdownWithFrontmatter(fileContent);
69
- // const frontmatter = metadata as CustomCommandFrontmatter;
70
- // const name = generateCommandName(filePath, baseDir);
71
- // return {
72
- // name,
73
- // displayName: `/${name}`,
74
- // description: frontmatter.description || 'No description',
75
- // argumentHint: frontmatter['argument-hint'],
76
- // filePath: normalizeFilePath(filePath),
77
- // scope,
78
- // content: body.trim(),
79
- // };
80
- // } catch (error) {
81
- // logWarn(`Failed to parse command file ${filePath}: ${error}`);
82
- // return null;
83
- // }
84
- // }
85
- // /**
86
- // * 递归扫描目录中的所有 .md 文件
87
- // */
88
- // async function scanCommandFiles(
89
- // directory: string,
90
- // scope: 'user' | 'project'
91
- // ): Promise<CustomCommand[]> {
92
- // const commands: CustomCommand[] = [];
93
- // const errors: Array<{ file: string; error: string }> = [];
94
- // async function scan(dir: string): Promise<void> {
95
- // try {
96
- // const entries = await readdir(dir, { withFileTypes: true });
97
- // for (const entry of entries) {
98
- // const fullPath = path.join(dir, entry.name);
99
- // if (entry.isDirectory()) {
100
- // // 递归扫描子目录
101
- // await scan(fullPath);
102
- // } else if (entry.isFile() && entry.name.toLowerCase().endsWith('.md')) {
103
- // // 解析 .md 文件
104
- // const command = await parseCommandFile(fullPath, directory, scope);
105
- // if (command) {
106
- // commands.push(command);
107
- // } else {
108
- // errors.push({
109
- // file: fullPath,
110
- // error: 'Failed to parse command file',
111
- // });
112
- // }
113
- // }
114
- // }
115
- // } catch (error) {
116
- // logWarn(`Failed to scan directory ${dir}: ${error}`);
117
- // }
118
- // }
119
- // await scan(directory);
120
- // return commands;
121
- // }
122
- // /**
123
- // * 合并命令列表,按优先级去重
124
- // * 优先级:用户级别 > 项目级别
125
- // */
126
- // function mergeCommandsByPriority(
127
- // userCommands: CustomCommand[],
128
- // projectCommands: CustomCommand[]
129
- // ): CustomCommand[] {
130
- // const commandMap = new Map<string, CustomCommand>();
131
- // // 先添加项目级别命令
132
- // for (const cmd of projectCommands) {
133
- // commandMap.set(cmd.name, cmd);
134
- // }
135
- // // 用户级别命令会覆盖同名项目命令
136
- // for (const cmd of userCommands) {
137
- // commandMap.set(cmd.name, cmd);
138
- // }
139
- // return Array.from(commandMap.values());
140
- // }
141
- // /**
142
- // * 加载所有自定义命令
143
- // */
144
- // export async function loadCustomCommands(): Promise<LoadCustomCommandsResult> {
145
- // const dirs = getCustomCommandDirectories();
146
- // const errors: Array<{ file: string; error: string }> = [];
147
- // logDebug(`Loading custom commands from: ${JSON.stringify(dirs)}`);
148
- // // 检查目录是否存在
149
- // const [userDirExists, projectDirExists] = await Promise.all([
150
- // directoryExists(dirs.userCommands),
151
- // directoryExists(dirs.projectCommands),
152
- // ]);
153
- // // 并行扫描两个目录
154
- // const [userCommands, projectCommands] = await Promise.all([
155
- // userDirExists ? scanCommandFiles(dirs.userCommands, 'user') : Promise.resolve([]),
156
- // projectDirExists ? scanCommandFiles(dirs.projectCommands, 'project') : Promise.resolve([]),
157
- // ]);
158
- // logDebug(`Loaded ${userCommands.length} user commands, ${projectCommands.length} project commands`);
159
- // // 合并并去重
160
- // const commands = mergeCommandsByPriority(userCommands, projectCommands);
161
- // return { commands, errors };
162
- // }
163
- // /**
164
- // * 获取缓存的自定义命令列表
165
- // */
166
- // export async function getCachedCustomCommands(): Promise<CustomCommand[]> {
167
- // if (!cachedCommands) {
168
- // const result = await loadCustomCommands();
169
- // cachedCommands = result.commands;
170
- // if (result.errors.length > 0) {
171
- // logWarn(`Custom command load errors: ${JSON.stringify(result.errors)}`);
172
- // }
173
- // }
174
- // return cachedCommands;
175
- // }
176
- // /**
177
- // * 重新加载自定义命令(清除缓存)
178
- // */
179
- // export function reloadCustomCommands(): void {
180
- // cachedCommands = null;
181
- // logDebug('Custom commands cache cleared');
182
- // }
183
- // /**
184
- // * 替换命令内容中的 $ARGUMENTS 占位符
185
- // * 如果内容中没有 $ARGUMENTS,将参数追加到末尾
186
- // */
187
- // export function resolveArguments(content: string, args: string): string {
188
- // if (!args) {
189
- // return content;
190
- // }
191
- // if (content.includes('$ARGUMENTS')) {
192
- // return content.replace(/\$ARGUMENTS/g, args);
193
- // }
194
- // // 如果没有 $ARGUMENTS 占位符,追加到末尾
195
- // return `${content}\n\n${args}`;
196
- // }
197
- //# sourceMappingURL=customCommands.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"customCommands.js","sourceRoot":"","sources":["../../../src/services/command/customCommands.ts"],"names":[],"mappings":"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"}
@@ -1,18 +0,0 @@
1
- /**
2
- * 系统命令处理模块
3
- */
4
- /**
5
- * 处理系统命令(如 /clear, /compact 等)
6
- * @returns true 表示是系统命令且已处理,false 表示不是系统命令 无需进入后续步骤
7
- */
8
- export declare function handleSystemCommand(input: string): Promise<boolean>;
9
- /**
10
- * 尝试处理自定义命令
11
- * @param input 用户输入
12
- * @returns { processedInput: string, handled: boolean } 处理后的输入和是否被处理标志
13
- */
14
- export declare function tryHandleCustomCommand(input: string): Promise<{
15
- processedInput: string;
16
- handled: boolean;
17
- }>;
18
- //# sourceMappingURL=runCommand.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"runCommand.d.ts","sourceRoot":"","sources":["../../../src/services/command/runCommand.ts"],"names":[],"mappings":"AAQA;;GAEG;AAEH;;;GAGG;AACH,wBAAsB,mBAAmB,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC,CAazE;AAED;;;;GAIG;AACH,wBAAsB,sBAAsB,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO,CAAC;IACnE,cAAc,EAAE,MAAM,CAAC;IACvB,OAAO,EAAE,OAAO,CAAC;CAClB,CAAC,CA4CD"}
@@ -1,147 +0,0 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.handleSystemCommand = handleSystemCommand;
4
- exports.tryHandleCustomCommand = tryHandleCustomCommand;
5
- const log_1 = require("../../util/log");
6
- const EventSystem_1 = require("../../events/EventSystem");
7
- const StateManager_1 = require("../../manager/StateManager");
8
- const compact_1 = require("../../util/compact");
9
- const errors_1 = require("../../types/errors");
10
- /**
11
- * 系统命令处理模块
12
- */
13
- /**
14
- * 处理系统命令(如 /clear, /compact 等)
15
- * @returns true 表示是系统命令且已处理,false 表示不是系统命令 无需进入后续步骤
16
- */
17
- async function handleSystemCommand(input) {
18
- switch (input) {
19
- case '/clear':
20
- await handleClearCommand();
21
- return true;
22
- case '/compact':
23
- await handleCompactCommand();
24
- return true;
25
- default:
26
- return false;
27
- }
28
- }
29
- /**
30
- * 尝试处理自定义命令
31
- * @param input 用户输入
32
- * @returns { processedInput: string, handled: boolean } 处理后的输入和是否被处理标志
33
- */
34
- async function tryHandleCustomCommand(input) {
35
- const eventBus = EventSystem_1.EventBus.getInstance();
36
- // 支持字母、数字、下划线、连字符和冒号分隔符
37
- const customCommandMatch = input.match(/^\/([a-zA-Z0-9_-]+(?::[a-zA-Z0-9_-]+)*)(?:\s+(.*))?$/);
38
- if (!customCommandMatch) {
39
- return { processedInput: input, handled: false };
40
- }
41
- const [, commandName, args = ''] = customCommandMatch;
42
- return { processedInput: input, handled: false };
43
- // try {
44
- // const customCommands = await getCachedCustomCommands();
45
- // const command = customCommands.find(cmd => cmd.name === commandName);
46
- // if (command) {
47
- // // 找到自定义命令,替换输入内容
48
- // const processedInput = resolveArguments(command.content, args);
49
- // logInfo(`Custom command '/${commandName}' resolved, content length: ${processedInput.length}`);
50
- // // 发出自定义命令处理事件
51
- // eventBus.emit('command:custom:resolved', {
52
- // commandName,
53
- // displayName: command.displayName,
54
- // description: command.description,
55
- // scope: command.scope,
56
- // args,
57
- // originalInput: input,
58
- // processedContent: processedInput
59
- // });
60
- // return { processedInput, handled: true };
61
- // } else {
62
- // // 命令不存在,保持原输入,让 LLM 处理
63
- // logDebug(`Custom command '/${commandName}' not found, treating as normal input`);
64
- // return { processedInput: input, handled: false };
65
- // }
66
- // } catch (error) {
67
- // logWarn(`Failed to process custom command: ${error}`);
68
- // // 出错时保持原输入
69
- // return { processedInput: input, handled: false };
70
- // }
71
- }
72
- /**
73
- * 处理清空命令
74
- */
75
- async function handleClearCommand() {
76
- (0, log_1.logInfo)('执行清空命令...');
77
- const eventBus = EventSystem_1.EventBus.getInstance();
78
- const stateManager = (0, StateManager_1.getStateManager)();
79
- stateManager.setMessageHistory([]);
80
- stateManager.updateState('idle');
81
- eventBus.emit('session:cleared', {
82
- sessionId: stateManager.getSessionId()
83
- });
84
- // 清空所有状态数据
85
- stateManager.clearAllState();
86
- }
87
- /**
88
- * 处理压缩命令
89
- */
90
- async function handleCompactCommand() {
91
- (0, log_1.logInfo)('执行压缩命令...');
92
- const eventBus = EventSystem_1.EventBus.getInstance();
93
- const stateManager = (0, StateManager_1.getStateManager)();
94
- const mainAgentState = stateManager.forAgent(StateManager_1.MAIN_AGENT_ID);
95
- // 获取当前消息历史
96
- const messages = mainAgentState.getMessageHistory();
97
- // 如果消息历史为空,无需压缩
98
- if (messages.length === 0) {
99
- const errMsg = 'Empty history, skip compact';
100
- (0, log_1.logInfo)(errMsg);
101
- const compactExecData = {
102
- errMsg: errMsg,
103
- tokenBefore: 0,
104
- tokenCompact: 0,
105
- compactRate: 0
106
- };
107
- eventBus.emit('compact:exec', compactExecData);
108
- stateManager.currentAbortController = null;
109
- mainAgentState.updateState('idle');
110
- return;
111
- }
112
- // 使用共享的 AbortController,这样中断会话时可以中断压缩
113
- stateManager.currentAbortController = new AbortController();
114
- try {
115
- (0, log_1.logDebug)(`开始手动压缩,当前消息数: ${messages.length}`);
116
- // 直接执行压缩,不检查阈值
117
- const compactedMessages = await (0, compact_1.compactMessages)(messages, stateManager.currentAbortController);
118
- // 更新消息历史
119
- mainAgentState.setMessageHistory(compactedMessages);
120
- (0, log_1.logDebug)(`压缩完成,压缩后消息数: ${compactedMessages.length}`);
121
- }
122
- catch (error) {
123
- // 用户中断不作为错误处理
124
- if ((0, errors_1.isInterruptedException)(error)) {
125
- (0, log_1.logInfo)('压缩操作被用户中断');
126
- return;
127
- }
128
- const errorMsg = `压缩失败: ${error instanceof Error ? error.message : String(error)}`;
129
- (0, log_1.logError)(errorMsg);
130
- eventBus.emit('session:error', {
131
- type: 'compact_error',
132
- error: {
133
- code: 'COMPACT_FAILED',
134
- message: errorMsg,
135
- details: { error }
136
- }
137
- });
138
- }
139
- finally {
140
- // 清理共享的 AbortController
141
- stateManager.currentAbortController = null;
142
- // 确保状态恢复为 idle(无论成功、跳过还是失败)
143
- mainAgentState.updateState('idle');
144
- }
145
- (0, log_1.logDebug)('压缩命令执行完成');
146
- }
147
- //# sourceMappingURL=runCommand.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"runCommand.js","sourceRoot":"","sources":["../../../src/services/command/runCommand.ts"],"names":[],"mappings":"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"}
@@ -1,29 +0,0 @@
1
- /**
2
- * 自定义 Slash Commands 加载和管理模块
3
- */
4
- import { CustomCommand, LoadCustomCommandsResult } from '../../types/command';
5
- /**
6
- * 获取自定义命令目录
7
- */
8
- export declare function getCustomCommandDirectories(): {
9
- projectCommands: string;
10
- userCommands: string;
11
- };
12
- /**
13
- * 加载所有自定义命令
14
- */
15
- export declare function loadCustomCommands(): Promise<LoadCustomCommandsResult>;
16
- /**
17
- * 获取缓存的自定义命令列表
18
- */
19
- export declare function getCachedCustomCommands(): Promise<CustomCommand[]>;
20
- /**
21
- * 重新加载自定义命令(清除缓存)
22
- */
23
- export declare function reloadCustomCommands(): void;
24
- /**
25
- * 替换命令内容中的 $ARGUMENTS 占位符
26
- * 如果内容中没有 $ARGUMENTS,将参数追加到末尾
27
- */
28
- export declare function resolveArguments(content: string, args: string): string;
29
- //# sourceMappingURL=customCommands.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"customCommands.d.ts","sourceRoot":"","sources":["../../../src/services/plugins/customCommands.ts"],"names":[],"mappings":"AAAA;;GAEG;AAKH,OAAO,EAAE,aAAa,EAAE,wBAAwB,EAA4B,MAAM,qBAAqB,CAAC;AAiBxG;;GAEG;AACH,wBAAgB,2BAA2B,IAAI;IAC7C,eAAe,EAAE,MAAM,CAAC;IACxB,YAAY,EAAE,MAAM,CAAC;CACtB,CAQA;AA0HD;;GAEG;AACH,wBAAsB,kBAAkB,IAAI,OAAO,CAAC,wBAAwB,CAAC,CAwB5E;AAED;;GAEG;AACH,wBAAsB,uBAAuB,IAAI,OAAO,CAAC,aAAa,EAAE,CAAC,CAUxE;AAED;;GAEG;AACH,wBAAgB,oBAAoB,IAAI,IAAI,CAG3C;AAED;;;GAGG;AACH,wBAAgB,gBAAgB,CAAC,OAAO,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,GAAG,MAAM,CAWtE"}
@@ -1,227 +0,0 @@
1
- "use strict";
2
- /**
3
- * 自定义 Slash Commands 加载和管理模块
4
- */
5
- var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
6
- if (k2 === undefined) k2 = k;
7
- var desc = Object.getOwnPropertyDescriptor(m, k);
8
- if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
9
- desc = { enumerable: true, get: function() { return m[k]; } };
10
- }
11
- Object.defineProperty(o, k2, desc);
12
- }) : (function(o, m, k, k2) {
13
- if (k2 === undefined) k2 = k;
14
- o[k2] = m[k];
15
- }));
16
- var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
17
- Object.defineProperty(o, "default", { enumerable: true, value: v });
18
- }) : function(o, v) {
19
- o["default"] = v;
20
- });
21
- var __importStar = (this && this.__importStar) || (function () {
22
- var ownKeys = function(o) {
23
- ownKeys = Object.getOwnPropertyNames || function (o) {
24
- var ar = [];
25
- for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
26
- return ar;
27
- };
28
- return ownKeys(o);
29
- };
30
- return function (mod) {
31
- if (mod && mod.__esModule) return mod;
32
- var result = {};
33
- if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
34
- __setModuleDefault(result, mod);
35
- return result;
36
- };
37
- })();
38
- Object.defineProperty(exports, "__esModule", { value: true });
39
- exports.getCustomCommandDirectories = getCustomCommandDirectories;
40
- exports.loadCustomCommands = loadCustomCommands;
41
- exports.getCachedCustomCommands = getCachedCustomCommands;
42
- exports.reloadCustomCommands = reloadCustomCommands;
43
- exports.resolveArguments = resolveArguments;
44
- const fs = __importStar(require("fs"));
45
- const path = __importStar(require("path"));
46
- const util_1 = require("util");
47
- const frontmatter_1 = require("../../util/frontmatter");
48
- const savePath_1 = require("../../util/savePath");
49
- const cwd_1 = require("../../util/cwd");
50
- const file_1 = require("../../util/file");
51
- const log_1 = require("../../util/log");
52
- const readdir = (0, util_1.promisify)(fs.readdir);
53
- const stat = (0, util_1.promisify)(fs.stat);
54
- const readFile = (0, util_1.promisify)(fs.readFile);
55
- const access = (0, util_1.promisify)(fs.access);
56
- /**
57
- * 命令缓存
58
- */
59
- let cachedCommands = null;
60
- /**
61
- * 获取自定义命令目录
62
- */
63
- function getCustomCommandDirectories() {
64
- const projectDir = (0, cwd_1.getOriginalCwd)();
65
- const userDir = (0, savePath_1.getSemaRootDir)();
66
- return {
67
- projectCommands: path.join(projectDir, '.sema', 'commands'),
68
- userCommands: path.join(userDir, 'commands'),
69
- };
70
- }
71
- /**
72
- * 检查目录是否存在
73
- */
74
- async function directoryExists(dir) {
75
- try {
76
- await access(dir, fs.constants.R_OK);
77
- const stats = await stat(dir);
78
- return stats.isDirectory();
79
- }
80
- catch {
81
- return false;
82
- }
83
- }
84
- /**
85
- * 从文件路径生成命令名
86
- * 例如:frontend/test.md → frontend:test
87
- */
88
- function generateCommandName(filePath, baseDir) {
89
- const relativePath = path.relative(baseDir, filePath);
90
- const withoutExt = relativePath.replace(/\.md$/i, '');
91
- // 将路径分隔符替换为冒号
92
- return withoutExt.split(path.sep).join(':');
93
- }
94
- /**
95
- * 解析命令文件
96
- */
97
- async function parseCommandFile(filePath, baseDir, scope) {
98
- try {
99
- const fileContent = await readFile(filePath, 'utf-8');
100
- const { metadata, body } = (0, frontmatter_1.parseMarkdownWithFrontmatter)(fileContent);
101
- const frontmatter = metadata;
102
- const name = generateCommandName(filePath, baseDir);
103
- return {
104
- name,
105
- displayName: `/${name}`,
106
- description: frontmatter.description || 'No description',
107
- argumentHint: frontmatter['argument-hint'],
108
- filePath: (0, file_1.normalizeFilePath)(filePath),
109
- scope,
110
- content: body.trim(),
111
- };
112
- }
113
- catch (error) {
114
- (0, log_1.logWarn)(`Failed to parse command file ${filePath}: ${error}`);
115
- return null;
116
- }
117
- }
118
- /**
119
- * 递归扫描目录中的所有 .md 文件
120
- */
121
- async function scanCommandFiles(directory, scope) {
122
- const commands = [];
123
- const errors = [];
124
- async function scan(dir) {
125
- try {
126
- const entries = await readdir(dir, { withFileTypes: true });
127
- for (const entry of entries) {
128
- const fullPath = path.join(dir, entry.name);
129
- if (entry.isDirectory()) {
130
- // 递归扫描子目录
131
- await scan(fullPath);
132
- }
133
- else if (entry.isFile() && entry.name.toLowerCase().endsWith('.md')) {
134
- // 解析 .md 文件
135
- const command = await parseCommandFile(fullPath, directory, scope);
136
- if (command) {
137
- commands.push(command);
138
- }
139
- else {
140
- errors.push({
141
- file: fullPath,
142
- error: 'Failed to parse command file',
143
- });
144
- }
145
- }
146
- }
147
- }
148
- catch (error) {
149
- (0, log_1.logWarn)(`Failed to scan directory ${dir}: ${error}`);
150
- }
151
- }
152
- await scan(directory);
153
- return commands;
154
- }
155
- /**
156
- * 合并命令列表,按优先级去重
157
- * 优先级:用户级别 > 项目级别
158
- */
159
- function mergeCommandsByPriority(userCommands, projectCommands) {
160
- const commandMap = new Map();
161
- // 先添加项目级别命令
162
- for (const cmd of projectCommands) {
163
- commandMap.set(cmd.name, cmd);
164
- }
165
- // 用户级别命令会覆盖同名项目命令
166
- for (const cmd of userCommands) {
167
- commandMap.set(cmd.name, cmd);
168
- }
169
- return Array.from(commandMap.values());
170
- }
171
- /**
172
- * 加载所有自定义命令
173
- */
174
- async function loadCustomCommands() {
175
- const dirs = getCustomCommandDirectories();
176
- const errors = [];
177
- (0, log_1.logDebug)(`Loading custom commands from: ${JSON.stringify(dirs)}`);
178
- // 检查目录是否存在
179
- const [userDirExists, projectDirExists] = await Promise.all([
180
- directoryExists(dirs.userCommands),
181
- directoryExists(dirs.projectCommands),
182
- ]);
183
- // 并行扫描两个目录
184
- const [userCommands, projectCommands] = await Promise.all([
185
- userDirExists ? scanCommandFiles(dirs.userCommands, 'user') : Promise.resolve([]),
186
- projectDirExists ? scanCommandFiles(dirs.projectCommands, 'project') : Promise.resolve([]),
187
- ]);
188
- (0, log_1.logDebug)(`Loaded ${userCommands.length} user commands, ${projectCommands.length} project commands`);
189
- // 合并并去重
190
- const commands = mergeCommandsByPriority(userCommands, projectCommands);
191
- return { commands, errors };
192
- }
193
- /**
194
- * 获取缓存的自定义命令列表
195
- */
196
- async function getCachedCustomCommands() {
197
- if (!cachedCommands) {
198
- const result = await loadCustomCommands();
199
- cachedCommands = result.commands;
200
- if (result.errors.length > 0) {
201
- (0, log_1.logWarn)(`Custom command load errors: ${JSON.stringify(result.errors)}`);
202
- }
203
- }
204
- return cachedCommands;
205
- }
206
- /**
207
- * 重新加载自定义命令(清除缓存)
208
- */
209
- function reloadCustomCommands() {
210
- cachedCommands = null;
211
- (0, log_1.logDebug)('Custom commands cache cleared');
212
- }
213
- /**
214
- * 替换命令内容中的 $ARGUMENTS 占位符
215
- * 如果内容中没有 $ARGUMENTS,将参数追加到末尾
216
- */
217
- function resolveArguments(content, args) {
218
- if (!args) {
219
- return content;
220
- }
221
- if (content.includes('$ARGUMENTS')) {
222
- return content.replace(/\$ARGUMENTS/g, args);
223
- }
224
- // 如果没有 $ARGUMENTS 占位符,追加到末尾
225
- return `${content}\n\n${args}`;
226
- }
227
- //# sourceMappingURL=customCommands.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"customCommands.js","sourceRoot":"","sources":["../../../src/services/plugins/customCommands.ts"],"names":[],"mappings":"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"}
@@ -1,17 +0,0 @@
1
- /**
2
- * Skill 加载器
3
- *
4
- * 负责扫描目录、查找和加载 Skills
5
- * 支持项目级和全局级 Skills,项目级优先
6
- */
7
- import { Skill } from '../../types/skill';
8
- /**
9
- * 获取 Skill 搜索目录
10
- * 优先级:项目级 > 全局级
11
- */
12
- export declare function getSkillSearchDirs(workingDir: string): string[];
13
- /**
14
- * 加载所有 Skills(带缓存)
15
- */
16
- export declare const loadAllSkills: ((workingDir: string) => Skill[]) & import("lodash").MemoizedFunction;
17
- //# sourceMappingURL=skillLoader.d.ts.map