@caoxupei/ai-agent-cli 1.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (393) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +350 -0
  3. package/bin/ai-agent-cli.js +14 -0
  4. package/dist/adapters/anthropic.d.ts +15 -0
  5. package/dist/adapters/anthropic.d.ts.map +1 -0
  6. package/dist/adapters/anthropic.js +83 -0
  7. package/dist/adapters/anthropic.js.map +1 -0
  8. package/dist/adapters/base.d.ts +45 -0
  9. package/dist/adapters/base.d.ts.map +1 -0
  10. package/dist/adapters/base.js +27 -0
  11. package/dist/adapters/base.js.map +1 -0
  12. package/dist/adapters/factory.d.ts +17 -0
  13. package/dist/adapters/factory.d.ts.map +1 -0
  14. package/dist/adapters/factory.js +34 -0
  15. package/dist/adapters/factory.js.map +1 -0
  16. package/dist/adapters/gemini.d.ts +16 -0
  17. package/dist/adapters/gemini.d.ts.map +1 -0
  18. package/dist/adapters/gemini.js +164 -0
  19. package/dist/adapters/gemini.js.map +1 -0
  20. package/dist/adapters/openai.d.ts +15 -0
  21. package/dist/adapters/openai.d.ts.map +1 -0
  22. package/dist/adapters/openai.js +175 -0
  23. package/dist/adapters/openai.js.map +1 -0
  24. package/dist/commands/skillCommands.d.ts +21 -0
  25. package/dist/commands/skillCommands.d.ts.map +1 -0
  26. package/dist/commands/skillCommands.js +320 -0
  27. package/dist/commands/skillCommands.js.map +1 -0
  28. package/dist/config/Config.d.ts +35 -0
  29. package/dist/config/Config.d.ts.map +1 -0
  30. package/dist/config/Config.js +108 -0
  31. package/dist/config/Config.js.map +1 -0
  32. package/dist/config/types.d.ts +48 -0
  33. package/dist/config/types.d.ts.map +1 -0
  34. package/dist/config/types.js +32 -0
  35. package/dist/config/types.js.map +1 -0
  36. package/dist/core/agents.d.ts +32 -0
  37. package/dist/core/agents.d.ts.map +1 -0
  38. package/dist/core/agents.js +93 -0
  39. package/dist/core/agents.js.map +1 -0
  40. package/dist/core/constants.d.ts +97 -0
  41. package/dist/core/constants.d.ts.map +1 -0
  42. package/dist/core/constants.js +119 -0
  43. package/dist/core/constants.js.map +1 -0
  44. package/dist/core/loop.d.ts +33 -0
  45. package/dist/core/loop.d.ts.map +1 -0
  46. package/dist/core/loop.js +134 -0
  47. package/dist/core/loop.js.map +1 -0
  48. package/dist/core/outputStyles.d.ts +50 -0
  49. package/dist/core/outputStyles.d.ts.map +1 -0
  50. package/dist/core/outputStyles.js +165 -0
  51. package/dist/core/outputStyles.js.map +1 -0
  52. package/dist/core/planMode.d.ts +40 -0
  53. package/dist/core/planMode.d.ts.map +1 -0
  54. package/dist/core/planMode.js +143 -0
  55. package/dist/core/planMode.js.map +1 -0
  56. package/dist/core/projectContext.d.ts +68 -0
  57. package/dist/core/projectContext.d.ts.map +1 -0
  58. package/dist/core/projectContext.js +183 -0
  59. package/dist/core/projectContext.js.map +1 -0
  60. package/dist/core/prompts.d.ts +26 -0
  61. package/dist/core/prompts.d.ts.map +1 -0
  62. package/dist/core/prompts.js +267 -0
  63. package/dist/core/prompts.js.map +1 -0
  64. package/dist/core/reminder.d.ts +72 -0
  65. package/dist/core/reminder.d.ts.map +1 -0
  66. package/dist/core/reminder.js +152 -0
  67. package/dist/core/reminder.js.map +1 -0
  68. package/dist/core/theme.d.ts +35 -0
  69. package/dist/core/theme.d.ts.map +1 -0
  70. package/dist/core/theme.js +56 -0
  71. package/dist/core/theme.js.map +1 -0
  72. package/dist/core/types.d.ts +55 -0
  73. package/dist/core/types.d.ts.map +1 -0
  74. package/dist/core/types.js +5 -0
  75. package/dist/core/types.js.map +1 -0
  76. package/dist/core/ui/Banner.d.ts +47 -0
  77. package/dist/core/ui/Banner.d.ts.map +1 -0
  78. package/dist/core/ui/Banner.js +122 -0
  79. package/dist/core/ui/Banner.js.map +1 -0
  80. package/dist/core/ui/Input.d.ts +51 -0
  81. package/dist/core/ui/Input.d.ts.map +1 -0
  82. package/dist/core/ui/Input.js +322 -0
  83. package/dist/core/ui/Input.js.map +1 -0
  84. package/dist/core/ui/Logo.d.ts +21 -0
  85. package/dist/core/ui/Logo.d.ts.map +1 -0
  86. package/dist/core/ui/Logo.js +31 -0
  87. package/dist/core/ui/Logo.js.map +1 -0
  88. package/dist/core/ui/Messages.d.ts +45 -0
  89. package/dist/core/ui/Messages.d.ts.map +1 -0
  90. package/dist/core/ui/Messages.js +76 -0
  91. package/dist/core/ui/Messages.js.map +1 -0
  92. package/dist/core/ui/Spinner.d.ts +29 -0
  93. package/dist/core/ui/Spinner.d.ts.map +1 -0
  94. package/dist/core/ui/Spinner.js +64 -0
  95. package/dist/core/ui/Spinner.js.map +1 -0
  96. package/dist/core/ui/ToolDisplay.d.ts +49 -0
  97. package/dist/core/ui/ToolDisplay.d.ts.map +1 -0
  98. package/dist/core/ui/ToolDisplay.js +99 -0
  99. package/dist/core/ui/ToolDisplay.js.map +1 -0
  100. package/dist/core/ui/index.d.ts +16 -0
  101. package/dist/core/ui/index.d.ts.map +1 -0
  102. package/dist/core/ui/index.js +17 -0
  103. package/dist/core/ui/index.js.map +1 -0
  104. package/dist/core/ui/utils.d.ts +28 -0
  105. package/dist/core/ui/utils.d.ts.map +1 -0
  106. package/dist/core/ui/utils.js +76 -0
  107. package/dist/core/ui/utils.js.map +1 -0
  108. package/dist/entrypoints/cli.d.ts +5 -0
  109. package/dist/entrypoints/cli.d.ts.map +1 -0
  110. package/dist/entrypoints/cli.js +199 -0
  111. package/dist/entrypoints/cli.js.map +1 -0
  112. package/dist/entrypoints/index.d.ts +18 -0
  113. package/dist/entrypoints/index.d.ts.map +1 -0
  114. package/dist/entrypoints/index.js +21 -0
  115. package/dist/entrypoints/index.js.map +1 -0
  116. package/dist/index.d.ts +9 -0
  117. package/dist/index.d.ts.map +1 -0
  118. package/dist/index.js +14 -0
  119. package/dist/index.js.map +1 -0
  120. package/dist/services/ai/adapters/anthropic.d.ts +15 -0
  121. package/dist/services/ai/adapters/anthropic.d.ts.map +1 -0
  122. package/dist/services/ai/adapters/anthropic.js +83 -0
  123. package/dist/services/ai/adapters/anthropic.js.map +1 -0
  124. package/dist/services/ai/adapters/base.d.ts +47 -0
  125. package/dist/services/ai/adapters/base.d.ts.map +1 -0
  126. package/dist/services/ai/adapters/base.js +24 -0
  127. package/dist/services/ai/adapters/base.js.map +1 -0
  128. package/dist/services/ai/adapters/factory.d.ts +17 -0
  129. package/dist/services/ai/adapters/factory.d.ts.map +1 -0
  130. package/dist/services/ai/adapters/factory.js +34 -0
  131. package/dist/services/ai/adapters/factory.js.map +1 -0
  132. package/dist/services/ai/adapters/gemini.d.ts +16 -0
  133. package/dist/services/ai/adapters/gemini.d.ts.map +1 -0
  134. package/dist/services/ai/adapters/gemini.js +164 -0
  135. package/dist/services/ai/adapters/gemini.js.map +1 -0
  136. package/dist/services/ai/adapters/openai.d.ts +15 -0
  137. package/dist/services/ai/adapters/openai.d.ts.map +1 -0
  138. package/dist/services/ai/adapters/openai.js +175 -0
  139. package/dist/services/ai/adapters/openai.js.map +1 -0
  140. package/dist/services/ai/index.d.ts +10 -0
  141. package/dist/services/ai/index.d.ts.map +1 -0
  142. package/dist/services/ai/index.js +11 -0
  143. package/dist/services/ai/index.js.map +1 -0
  144. package/dist/services/config/Config.d.ts +41 -0
  145. package/dist/services/config/Config.d.ts.map +1 -0
  146. package/dist/services/config/Config.js +131 -0
  147. package/dist/services/config/Config.js.map +1 -0
  148. package/dist/services/config/configStore.d.ts +42 -0
  149. package/dist/services/config/configStore.d.ts.map +1 -0
  150. package/dist/services/config/configStore.js +77 -0
  151. package/dist/services/config/configStore.js.map +1 -0
  152. package/dist/services/config/index.d.ts +7 -0
  153. package/dist/services/config/index.d.ts.map +1 -0
  154. package/dist/services/config/index.js +6 -0
  155. package/dist/services/config/index.js.map +1 -0
  156. package/dist/services/config/setup.d.ts +13 -0
  157. package/dist/services/config/setup.d.ts.map +1 -0
  158. package/dist/services/config/setup.js +157 -0
  159. package/dist/services/config/setup.js.map +1 -0
  160. package/dist/services/config/types.d.ts +56 -0
  161. package/dist/services/config/types.d.ts.map +1 -0
  162. package/dist/services/config/types.js +32 -0
  163. package/dist/services/config/types.js.map +1 -0
  164. package/dist/services/customCommands.d.ts +37 -0
  165. package/dist/services/customCommands.d.ts.map +1 -0
  166. package/dist/services/customCommands.js +453 -0
  167. package/dist/services/customCommands.js.map +1 -0
  168. package/dist/services/index.d.ts +7 -0
  169. package/dist/services/index.d.ts.map +1 -0
  170. package/dist/services/index.js +10 -0
  171. package/dist/services/index.js.map +1 -0
  172. package/dist/services/skillMarketplace.d.ts +74 -0
  173. package/dist/services/skillMarketplace.d.ts.map +1 -0
  174. package/dist/services/skillMarketplace.js +486 -0
  175. package/dist/services/skillMarketplace.js.map +1 -0
  176. package/dist/services/system/index.d.ts +6 -0
  177. package/dist/services/system/index.d.ts.map +1 -0
  178. package/dist/services/system/index.js +6 -0
  179. package/dist/services/system/index.js.map +1 -0
  180. package/dist/services/system/security.d.ts +30 -0
  181. package/dist/services/system/security.d.ts.map +1 -0
  182. package/dist/services/system/security.js +124 -0
  183. package/dist/services/system/security.js.map +1 -0
  184. package/dist/tools/agent/index.d.ts +6 -0
  185. package/dist/tools/agent/index.d.ts.map +1 -0
  186. package/dist/tools/agent/index.js +6 -0
  187. package/dist/tools/agent/index.js.map +1 -0
  188. package/dist/tools/agent/planMode.d.ts +12 -0
  189. package/dist/tools/agent/planMode.d.ts.map +1 -0
  190. package/dist/tools/agent/planMode.js +23 -0
  191. package/dist/tools/agent/planMode.js.map +1 -0
  192. package/dist/tools/agent/task.d.ts +10 -0
  193. package/dist/tools/agent/task.d.ts.map +1 -0
  194. package/dist/tools/agent/task.js +127 -0
  195. package/dist/tools/agent/task.js.map +1 -0
  196. package/dist/tools/ai/index.d.ts +5 -0
  197. package/dist/tools/ai/index.d.ts.map +1 -0
  198. package/dist/tools/ai/index.js +5 -0
  199. package/dist/tools/ai/index.js.map +1 -0
  200. package/dist/tools/ai/skill.d.ts +78 -0
  201. package/dist/tools/ai/skill.d.ts.map +1 -0
  202. package/dist/tools/ai/skill.js +315 -0
  203. package/dist/tools/ai/skill.js.map +1 -0
  204. package/dist/tools/askQuestion.d.ts +25 -0
  205. package/dist/tools/askQuestion.d.ts.map +1 -0
  206. package/dist/tools/askQuestion.js +99 -0
  207. package/dist/tools/askQuestion.js.map +1 -0
  208. package/dist/tools/bash.d.ts +11 -0
  209. package/dist/tools/bash.d.ts.map +1 -0
  210. package/dist/tools/bash.js +58 -0
  211. package/dist/tools/bash.js.map +1 -0
  212. package/dist/tools/definitions.d.ts +26 -0
  213. package/dist/tools/definitions.d.ts.map +1 -0
  214. package/dist/tools/definitions.js +599 -0
  215. package/dist/tools/definitions.js.map +1 -0
  216. package/dist/tools/dispatcher.d.ts +38 -0
  217. package/dist/tools/dispatcher.d.ts.map +1 -0
  218. package/dist/tools/dispatcher.js +75 -0
  219. package/dist/tools/dispatcher.js.map +1 -0
  220. package/dist/tools/fileOps.d.ts +16 -0
  221. package/dist/tools/fileOps.d.ts.map +1 -0
  222. package/dist/tools/fileOps.js +115 -0
  223. package/dist/tools/fileOps.js.map +1 -0
  224. package/dist/tools/filesystem/bash.d.ts +11 -0
  225. package/dist/tools/filesystem/bash.d.ts.map +1 -0
  226. package/dist/tools/filesystem/bash.js +58 -0
  227. package/dist/tools/filesystem/bash.js.map +1 -0
  228. package/dist/tools/filesystem/fileOps.d.ts +16 -0
  229. package/dist/tools/filesystem/fileOps.d.ts.map +1 -0
  230. package/dist/tools/filesystem/fileOps.js +115 -0
  231. package/dist/tools/filesystem/fileOps.js.map +1 -0
  232. package/dist/tools/filesystem/index.d.ts +1 -0
  233. package/dist/tools/filesystem/index.d.ts.map +1 -0
  234. package/dist/tools/filesystem/index.js +2 -0
  235. package/dist/tools/filesystem/index.js.map +1 -0
  236. package/dist/tools/glob.d.ts +18 -0
  237. package/dist/tools/glob.d.ts.map +1 -0
  238. package/dist/tools/glob.js +63 -0
  239. package/dist/tools/glob.js.map +1 -0
  240. package/dist/tools/grep.d.ts +26 -0
  241. package/dist/tools/grep.d.ts.map +1 -0
  242. package/dist/tools/grep.js +137 -0
  243. package/dist/tools/grep.js.map +1 -0
  244. package/dist/tools/index.d.ts +13 -0
  245. package/dist/tools/index.d.ts.map +1 -0
  246. package/dist/tools/index.js +14 -0
  247. package/dist/tools/index.js.map +1 -0
  248. package/dist/tools/interaction/askQuestion.d.ts +25 -0
  249. package/dist/tools/interaction/askQuestion.d.ts.map +1 -0
  250. package/dist/tools/interaction/askQuestion.js +99 -0
  251. package/dist/tools/interaction/askQuestion.js.map +1 -0
  252. package/dist/tools/interaction/index.d.ts +6 -0
  253. package/dist/tools/interaction/index.d.ts.map +1 -0
  254. package/dist/tools/interaction/index.js +6 -0
  255. package/dist/tools/interaction/index.js.map +1 -0
  256. package/dist/tools/interaction/todo.d.ts +36 -0
  257. package/dist/tools/interaction/todo.d.ts.map +1 -0
  258. package/dist/tools/interaction/todo.js +137 -0
  259. package/dist/tools/interaction/todo.js.map +1 -0
  260. package/dist/tools/network/index.d.ts +6 -0
  261. package/dist/tools/network/index.d.ts.map +1 -0
  262. package/dist/tools/network/index.js +6 -0
  263. package/dist/tools/network/index.js.map +1 -0
  264. package/dist/tools/network/webFetch.d.ts +8 -0
  265. package/dist/tools/network/webFetch.d.ts.map +1 -0
  266. package/dist/tools/network/webFetch.js +87 -0
  267. package/dist/tools/network/webFetch.js.map +1 -0
  268. package/dist/tools/network/webSearch.d.ts +8 -0
  269. package/dist/tools/network/webSearch.d.ts.map +1 -0
  270. package/dist/tools/network/webSearch.js +84 -0
  271. package/dist/tools/network/webSearch.js.map +1 -0
  272. package/dist/tools/planMode.d.ts +12 -0
  273. package/dist/tools/planMode.d.ts.map +1 -0
  274. package/dist/tools/planMode.js +23 -0
  275. package/dist/tools/planMode.js.map +1 -0
  276. package/dist/tools/search/glob.d.ts +18 -0
  277. package/dist/tools/search/glob.d.ts.map +1 -0
  278. package/dist/tools/search/glob.js +63 -0
  279. package/dist/tools/search/glob.js.map +1 -0
  280. package/dist/tools/search/grep.d.ts +26 -0
  281. package/dist/tools/search/grep.d.ts.map +1 -0
  282. package/dist/tools/search/grep.js +137 -0
  283. package/dist/tools/search/grep.js.map +1 -0
  284. package/dist/tools/search/index.d.ts +6 -0
  285. package/dist/tools/search/index.d.ts.map +1 -0
  286. package/dist/tools/search/index.js +6 -0
  287. package/dist/tools/search/index.js.map +1 -0
  288. package/dist/tools/skill.d.ts +41 -0
  289. package/dist/tools/skill.d.ts.map +1 -0
  290. package/dist/tools/skill.js +149 -0
  291. package/dist/tools/skill.js.map +1 -0
  292. package/dist/tools/system/index.d.ts +6 -0
  293. package/dist/tools/system/index.d.ts.map +1 -0
  294. package/dist/tools/system/index.js +6 -0
  295. package/dist/tools/system/index.js.map +1 -0
  296. package/dist/tools/task.d.ts +10 -0
  297. package/dist/tools/task.d.ts.map +1 -0
  298. package/dist/tools/task.js +127 -0
  299. package/dist/tools/task.js.map +1 -0
  300. package/dist/tools/todo.d.ts +36 -0
  301. package/dist/tools/todo.d.ts.map +1 -0
  302. package/dist/tools/todo.js +137 -0
  303. package/dist/tools/todo.js.map +1 -0
  304. package/dist/tools/types.d.ts +139 -0
  305. package/dist/tools/types.d.ts.map +1 -0
  306. package/dist/tools/types.js +5 -0
  307. package/dist/tools/types.js.map +1 -0
  308. package/dist/tools/webFetch.d.ts +8 -0
  309. package/dist/tools/webFetch.d.ts.map +1 -0
  310. package/dist/tools/webFetch.js +87 -0
  311. package/dist/tools/webFetch.js.map +1 -0
  312. package/dist/tools/webSearch.d.ts +8 -0
  313. package/dist/tools/webSearch.d.ts.map +1 -0
  314. package/dist/tools/webSearch.js +84 -0
  315. package/dist/tools/webSearch.js.map +1 -0
  316. package/dist/ui/Banner.d.ts +47 -0
  317. package/dist/ui/Banner.d.ts.map +1 -0
  318. package/dist/ui/Banner.js +122 -0
  319. package/dist/ui/Banner.js.map +1 -0
  320. package/dist/ui/Input.d.ts +42 -0
  321. package/dist/ui/Input.d.ts.map +1 -0
  322. package/dist/ui/Input.js +270 -0
  323. package/dist/ui/Input.js.map +1 -0
  324. package/dist/ui/Logo.d.ts +21 -0
  325. package/dist/ui/Logo.d.ts.map +1 -0
  326. package/dist/ui/Logo.js +31 -0
  327. package/dist/ui/Logo.js.map +1 -0
  328. package/dist/ui/Messages.d.ts +45 -0
  329. package/dist/ui/Messages.d.ts.map +1 -0
  330. package/dist/ui/Messages.js +76 -0
  331. package/dist/ui/Messages.js.map +1 -0
  332. package/dist/ui/Spinner.d.ts +29 -0
  333. package/dist/ui/Spinner.d.ts.map +1 -0
  334. package/dist/ui/Spinner.js +64 -0
  335. package/dist/ui/Spinner.js.map +1 -0
  336. package/dist/ui/ToolDisplay.d.ts +49 -0
  337. package/dist/ui/ToolDisplay.d.ts.map +1 -0
  338. package/dist/ui/ToolDisplay.js +99 -0
  339. package/dist/ui/ToolDisplay.js.map +1 -0
  340. package/dist/ui/components/Banner.d.ts +46 -0
  341. package/dist/ui/components/Banner.d.ts.map +1 -0
  342. package/dist/ui/components/Banner.js +121 -0
  343. package/dist/ui/components/Banner.js.map +1 -0
  344. package/dist/ui/components/Input.d.ts +51 -0
  345. package/dist/ui/components/Input.d.ts.map +1 -0
  346. package/dist/ui/components/Input.js +322 -0
  347. package/dist/ui/components/Input.js.map +1 -0
  348. package/dist/ui/components/Logo.d.ts +21 -0
  349. package/dist/ui/components/Logo.d.ts.map +1 -0
  350. package/dist/ui/components/Logo.js +31 -0
  351. package/dist/ui/components/Logo.js.map +1 -0
  352. package/dist/ui/components/Messages.d.ts +45 -0
  353. package/dist/ui/components/Messages.d.ts.map +1 -0
  354. package/dist/ui/components/Messages.js +76 -0
  355. package/dist/ui/components/Messages.js.map +1 -0
  356. package/dist/ui/components/Spinner.d.ts +29 -0
  357. package/dist/ui/components/Spinner.d.ts.map +1 -0
  358. package/dist/ui/components/Spinner.js +64 -0
  359. package/dist/ui/components/Spinner.js.map +1 -0
  360. package/dist/ui/components/ToolDisplay.d.ts +49 -0
  361. package/dist/ui/components/ToolDisplay.d.ts.map +1 -0
  362. package/dist/ui/components/ToolDisplay.js +99 -0
  363. package/dist/ui/components/ToolDisplay.js.map +1 -0
  364. package/dist/ui/index.d.ts +16 -0
  365. package/dist/ui/index.d.ts.map +1 -0
  366. package/dist/ui/index.js +17 -0
  367. package/dist/ui/index.js.map +1 -0
  368. package/dist/ui/theme.d.ts +34 -0
  369. package/dist/ui/theme.d.ts.map +1 -0
  370. package/dist/ui/theme.js +55 -0
  371. package/dist/ui/theme.js.map +1 -0
  372. package/dist/ui/utils.d.ts +28 -0
  373. package/dist/ui/utils.d.ts.map +1 -0
  374. package/dist/ui/utils.js +76 -0
  375. package/dist/ui/utils.js.map +1 -0
  376. package/dist/utils/fs/index.d.ts +24 -0
  377. package/dist/utils/fs/index.d.ts.map +1 -0
  378. package/dist/utils/fs/index.js +50 -0
  379. package/dist/utils/fs/index.js.map +1 -0
  380. package/dist/utils/index.d.ts +7 -0
  381. package/dist/utils/index.d.ts.map +1 -0
  382. package/dist/utils/index.js +10 -0
  383. package/dist/utils/index.js.map +1 -0
  384. package/dist/utils/security.d.ts +26 -0
  385. package/dist/utils/security.d.ts.map +1 -0
  386. package/dist/utils/security.js +123 -0
  387. package/dist/utils/security.js.map +1 -0
  388. package/dist/utils/text/index.d.ts +28 -0
  389. package/dist/utils/text/index.d.ts.map +1 -0
  390. package/dist/utils/text/index.js +51 -0
  391. package/dist/utils/text/index.js.map +1 -0
  392. package/package.json +84 -0
  393. package/skills/web-dev/SKILL.md +91 -0
@@ -0,0 +1,165 @@
1
+ /**
2
+ * 输出风格系统
3
+ * 支持多种响应风格切换,包括默认、解释型、学习型
4
+ */
5
+ import fs from 'fs-extra';
6
+ import path from 'node:path';
7
+ /**
8
+ * 当前输出风格(默认为 default)
9
+ */
10
+ let currentOutputStyle = 'default';
11
+ /**
12
+ * 内置输出风格
13
+ */
14
+ const OUTPUT_STYLES = {
15
+ default: {
16
+ name: 'default',
17
+ description: '默认风格,极简回复',
18
+ prompt: '',
19
+ keepCodingInstructions: true,
20
+ },
21
+ explanatory: {
22
+ name: 'explanatory',
23
+ description: '解释型风格,提供教育性见解和实现选择说明',
24
+ prompt: `# 输出风格: 解释型
25
+
26
+ 你是一个帮助用户完成软件工程任务的交互式 CLI 工具。除了软件工程任务,你还应该在过程中提供关于代码库的教育性见解。
27
+
28
+ 你应该清晰且具有教育性,在保持专注于任务的同时提供有用的解释。平衡教育内容和任务完成。提供见解时,可以超出典型的长度限制,但要保持专注和相关。
29
+
30
+ ## 见解
31
+
32
+ 为了鼓励学习,在编写代码前后,始终使用以下格式提供关于实现选择的简短教育性解释:
33
+
34
+ \`💡 见解 ─────────────────────────────────────\`
35
+ [2-3 个关键教育要点]
36
+ \`─────────────────────────────────────────────────\`
37
+
38
+ 这些见解应该包含在对话中,而不是代码库中。你应该主要关注特定于代码库或你刚写的代码的有趣见解,而不是一般的编程概念。`,
39
+ keepCodingInstructions: true,
40
+ },
41
+ learning: {
42
+ name: 'learning',
43
+ description: '学习型风格,暂停让用户编写小段代码进行实践',
44
+ prompt: `# 输出风格: 学习型
45
+
46
+ 你是一个帮助用户完成软件工程任务的交互式 CLI 工具。除了软件工程任务,你还应该通过实践和教育性见解帮助用户更多地了解代码库。
47
+
48
+ 你应该协作且鼓励。通过请求用户输入有意义的设计决策来平衡任务完成和学习,同时自己处理常规实现。
49
+
50
+ ## 请求用户贡献
51
+
52
+ 为了鼓励学习,当生成 20+ 行涉及以下内容的代码时,请用户贡献 2-10 行代码:
53
+ - 设计决策(错误处理、数据结构)
54
+ - 有多种有效方法的业务逻辑
55
+ - 关键算法或接口定义
56
+
57
+ ### 请求格式
58
+
59
+ \`\`\`
60
+ 📝 **动手学习**
61
+ **背景:** [已构建的内容以及为什么这个决策很重要]
62
+ **你的任务:** [文件中的具体函数/部分,提及文件和 TODO(human) 但不包含行号]
63
+ **指导:** [需要考虑的权衡和约束]
64
+ \`\`\`
65
+
66
+ ### 关键指南
67
+
68
+ - 将贡献定位为有价值的设计决策,而不是繁忙的工作
69
+ - 你必须先使用编辑工具在代码库中添加 TODO(human) 部分,然后再发出动手学习请求
70
+ - 确保代码中只有一个 TODO(human) 部分
71
+ - 发出动手学习请求后不要采取任何行动或输出任何内容。等待用户实现后再继续。
72
+
73
+ ### 贡献后
74
+
75
+ 分享一个将他们的代码与更广泛的模式或系统效果联系起来的见解。避免赞美或重复。
76
+
77
+ ## 见解
78
+
79
+ 在编写代码前后,始终使用以下格式提供关于实现选择的简短教育性解释:
80
+
81
+ \`💡 见解 ─────────────────────────────────────\`
82
+ [2-3 个关键教育要点]
83
+ \`─────────────────────────────────────────────────\``,
84
+ keepCodingInstructions: true,
85
+ },
86
+ };
87
+ /**
88
+ * 获取当前输出风格
89
+ */
90
+ export function getCurrentOutputStyle() {
91
+ return currentOutputStyle;
92
+ }
93
+ /**
94
+ * 设置当前输出风格
95
+ */
96
+ export function setCurrentOutputStyle(style) {
97
+ if (!(style in OUTPUT_STYLES)) {
98
+ throw new Error(`未知的输出风格: ${style}`);
99
+ }
100
+ currentOutputStyle = style;
101
+ }
102
+ /**
103
+ * 获取当前输出风格的提示词
104
+ */
105
+ export function getOutputStylePrompt() {
106
+ const style = OUTPUT_STYLES[currentOutputStyle];
107
+ return style.prompt;
108
+ }
109
+ /**
110
+ * 获取当前输出风格定义
111
+ */
112
+ export function getCurrentOutputStyleDefinition() {
113
+ return OUTPUT_STYLES[currentOutputStyle];
114
+ }
115
+ /**
116
+ * 获取所有可用的输出风格
117
+ */
118
+ export function getAvailableOutputStyles() {
119
+ return Object.values(OUTPUT_STYLES);
120
+ }
121
+ /**
122
+ * 列出输出风格(用于显示)
123
+ */
124
+ export function listOutputStyles() {
125
+ return Object.values(OUTPUT_STYLES)
126
+ .map(style => `- ${style.name}: ${style.description}`)
127
+ .join('\n');
128
+ }
129
+ /**
130
+ * 从项目配置加载输出风格
131
+ */
132
+ export function loadOutputStyleFromConfig(workdir) {
133
+ const configPath = path.join(workdir, '.ai-agent', 'settings.json');
134
+ if (fs.existsSync(configPath)) {
135
+ try {
136
+ const config = fs.readJsonSync(configPath);
137
+ if (config.outputStyle && config.outputStyle in OUTPUT_STYLES) {
138
+ currentOutputStyle = config.outputStyle;
139
+ }
140
+ }
141
+ catch {
142
+ // 忽略配置读取错误
143
+ }
144
+ }
145
+ }
146
+ /**
147
+ * 保存输出风格到项目配置
148
+ */
149
+ export function saveOutputStyleToConfig(workdir, style) {
150
+ const configDir = path.join(workdir, '.ai-agent');
151
+ const configPath = path.join(configDir, 'settings.json');
152
+ fs.ensureDirSync(configDir);
153
+ let config = {};
154
+ if (fs.existsSync(configPath)) {
155
+ try {
156
+ config = fs.readJsonSync(configPath);
157
+ }
158
+ catch {
159
+ // 忽略读取错误,使用空配置
160
+ }
161
+ }
162
+ config.outputStyle = style;
163
+ fs.writeJsonSync(configPath, config, { spaces: 2 });
164
+ }
165
+ //# sourceMappingURL=outputStyles.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"outputStyles.js","sourceRoot":"","sources":["../../src/core/outputStyles.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,40 @@
1
+ /**
2
+ * 规划模式管理器
3
+ *
4
+ * 规划模式允许代理在执行前先探索和设计实现方案
5
+ */
6
+ /**
7
+ * 规划模式管理器
8
+ */
9
+ export declare class PlanModeManager {
10
+ private state;
11
+ private workdir;
12
+ constructor(workdir: string);
13
+ /**
14
+ * 进入规划模式
15
+ */
16
+ enterPlanMode(taskDescription: string): string;
17
+ /**
18
+ * 退出规划模式
19
+ */
20
+ exitPlanMode(): {
21
+ success: boolean;
22
+ plan: string;
23
+ error?: string;
24
+ };
25
+ /**
26
+ * 检查是否在规划模式中
27
+ */
28
+ isInPlanMode(): boolean;
29
+ /**
30
+ * 获取计划文件路径
31
+ */
32
+ getPlanFilePath(): string | null;
33
+ /**
34
+ * 获取任务描述
35
+ */
36
+ getTaskDescription(): string | null;
37
+ }
38
+ export declare function getPlanModeManager(workdir?: string): PlanModeManager;
39
+ export declare function resetPlanModeManager(): void;
40
+ //# sourceMappingURL=planMode.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"planMode.d.ts","sourceRoot":"","sources":["../../src/core/planMode.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAeH;;GAEG;AACH,qBAAa,eAAe;IAC1B,OAAO,CAAC,KAAK,CAA8B;IAC3C,OAAO,CAAC,OAAO,CAAS;gBAEZ,OAAO,EAAE,MAAM;IAI3B;;OAEG;IACH,aAAa,CAAC,eAAe,EAAE,MAAM,GAAG,MAAM;IAgD9C;;OAEG;IACH,YAAY,IAAI;QAAE,OAAO,EAAE,OAAO,CAAC;QAAC,IAAI,EAAE,MAAM,CAAC;QAAC,KAAK,CAAC,EAAE,MAAM,CAAA;KAAE;IA8ClE;;OAEG;IACH,YAAY,IAAI,OAAO;IAIvB;;OAEG;IACH,eAAe,IAAI,MAAM,GAAG,IAAI;IAIhC;;OAEG;IACH,kBAAkB,IAAI,MAAM,GAAG,IAAI;CAGpC;AAOD,wBAAgB,kBAAkB,CAAC,OAAO,CAAC,EAAE,MAAM,GAAG,eAAe,CAQpE;AAED,wBAAgB,oBAAoB,IAAI,IAAI,CAE3C"}
@@ -0,0 +1,143 @@
1
+ /**
2
+ * 规划模式管理器
3
+ *
4
+ * 规划模式允许代理在执行前先探索和设计实现方案
5
+ */
6
+ import path from 'node:path';
7
+ import fs from 'fs-extra';
8
+ /**
9
+ * 规划模式管理器
10
+ */
11
+ export class PlanModeManager {
12
+ state = null;
13
+ workdir;
14
+ constructor(workdir) {
15
+ this.workdir = workdir;
16
+ }
17
+ /**
18
+ * 进入规划模式
19
+ */
20
+ enterPlanMode(taskDescription) {
21
+ if (this.state?.isActive) {
22
+ return '错误: 已经处于规划模式中';
23
+ }
24
+ const planFilePath = path.join(this.workdir, '.ai-agent-plan.md');
25
+ this.state = {
26
+ isActive: true,
27
+ planFilePath,
28
+ taskDescription,
29
+ startTime: Date.now(),
30
+ };
31
+ // 创建初始计划文件
32
+ const initialContent = `# 实现计划
33
+
34
+ ## 任务描述
35
+ ${taskDescription}
36
+
37
+ ## 分析
38
+ (在这里记录你的分析...)
39
+
40
+ ## 实现步骤
41
+ 1. (步骤1)
42
+ 2. (步骤2)
43
+ ...
44
+
45
+ ## 风险和注意事项
46
+ - (风险1)
47
+ - (风险2)
48
+ `;
49
+ fs.writeFileSync(planFilePath, initialContent, 'utf-8');
50
+ return `已进入规划模式!
51
+
52
+ **规划文件**: ${planFilePath}
53
+
54
+ **你现在可以**:
55
+ - 使用 read_file, glob, grep 等工具探索代码库
56
+ - 在规划文件中记录你的分析和计划
57
+ - 使用 write_file 或 edit_file 更新计划文件
58
+ - 完成后使用 ExitPlanMode 工具提交计划
59
+
60
+ **注意**: 规划模式下不应执行实际的代码修改,只做探索和规划。`;
61
+ }
62
+ /**
63
+ * 退出规划模式
64
+ */
65
+ exitPlanMode() {
66
+ if (!this.state?.isActive) {
67
+ return {
68
+ success: false,
69
+ plan: '',
70
+ error: '错误: 当前不在规划模式中',
71
+ };
72
+ }
73
+ // 读取计划文件
74
+ let planContent = '';
75
+ try {
76
+ if (fs.existsSync(this.state.planFilePath)) {
77
+ planContent = fs.readFileSync(this.state.planFilePath, 'utf-8');
78
+ }
79
+ else {
80
+ return {
81
+ success: false,
82
+ plan: '',
83
+ error: '错误: 计划文件不存在',
84
+ };
85
+ }
86
+ }
87
+ catch (error) {
88
+ return {
89
+ success: false,
90
+ plan: '',
91
+ error: `错误: 无法读取计划文件: ${error}`,
92
+ };
93
+ }
94
+ const elapsed = (Date.now() - this.state.startTime) / 1000;
95
+ // 清除状态
96
+ this.state = null;
97
+ return {
98
+ success: true,
99
+ plan: `规划完成!(用时 ${elapsed.toFixed(1)}s)
100
+
101
+ ${planContent}
102
+
103
+ ---
104
+
105
+ 请审阅上述计划。如果同意,我将开始实施。`,
106
+ };
107
+ }
108
+ /**
109
+ * 检查是否在规划模式中
110
+ */
111
+ isInPlanMode() {
112
+ return this.state?.isActive ?? false;
113
+ }
114
+ /**
115
+ * 获取计划文件路径
116
+ */
117
+ getPlanFilePath() {
118
+ return this.state?.planFilePath ?? null;
119
+ }
120
+ /**
121
+ * 获取任务描述
122
+ */
123
+ getTaskDescription() {
124
+ return this.state?.taskDescription ?? null;
125
+ }
126
+ }
127
+ /**
128
+ * 全局实例
129
+ */
130
+ let planModeManagerInstance = null;
131
+ export function getPlanModeManager(workdir) {
132
+ if (!planModeManagerInstance && workdir) {
133
+ planModeManagerInstance = new PlanModeManager(workdir);
134
+ }
135
+ if (!planModeManagerInstance) {
136
+ throw new Error('PlanModeManager 未初始化');
137
+ }
138
+ return planModeManagerInstance;
139
+ }
140
+ export function resetPlanModeManager() {
141
+ planModeManagerInstance = null;
142
+ }
143
+ //# sourceMappingURL=planMode.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"planMode.js","sourceRoot":"","sources":["../../src/core/planMode.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,68 @@
1
+ /**
2
+ * 项目上下文管理
3
+ * 提供项目级别的记忆系统,存储常用命令、代码风格偏好等
4
+ */
5
+ /**
6
+ * 项目上下文接口
7
+ */
8
+ export interface ProjectContext {
9
+ /** 常用命令 */
10
+ commands?: {
11
+ build?: string;
12
+ test?: string;
13
+ lint?: string;
14
+ typecheck?: string;
15
+ dev?: string;
16
+ [key: string]: string | undefined;
17
+ };
18
+ /** 代码风格偏好 */
19
+ codeStyle?: {
20
+ naming?: string;
21
+ preferredLibraries?: string[];
22
+ conventions?: string[];
23
+ };
24
+ /** 代码库信息 */
25
+ codebaseInfo?: string;
26
+ /** 自定义内容 */
27
+ customContent?: string;
28
+ }
29
+ /**
30
+ * 项目上下文管理器
31
+ */
32
+ export declare class ProjectContextManager {
33
+ private workdir;
34
+ private projectFilePath;
35
+ private context;
36
+ constructor(workdir: string);
37
+ /**
38
+ * 加载项目上下文
39
+ */
40
+ load(): ProjectContext | null;
41
+ /**
42
+ * 解析项目文件内容
43
+ */
44
+ private parseProjectFile;
45
+ /**
46
+ * 生成项目上下文的提示词
47
+ */
48
+ getContextPrompt(): string | null;
49
+ /**
50
+ * 检查项目文件是否存在
51
+ */
52
+ exists(): boolean;
53
+ /**
54
+ * 创建初始项目文件
55
+ */
56
+ createInitialFile(): void;
57
+ /**
58
+ * 添加命令到项目文件
59
+ */
60
+ addCommand(name: string, command: string): void;
61
+ /**
62
+ * 获取特定命令
63
+ */
64
+ getCommand(name: string): string | undefined;
65
+ }
66
+ export declare function getProjectContextManager(workdir?: string): ProjectContextManager;
67
+ export declare function resetProjectContextManager(): void;
68
+ //# sourceMappingURL=projectContext.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"projectContext.d.ts","sourceRoot":"","sources":["../../src/core/projectContext.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAMH;;GAEG;AACH,MAAM,WAAW,cAAc;IAC7B,WAAW;IACX,QAAQ,CAAC,EAAE;QACT,KAAK,CAAC,EAAE,MAAM,CAAC;QACf,IAAI,CAAC,EAAE,MAAM,CAAC;QACd,IAAI,CAAC,EAAE,MAAM,CAAC;QACd,SAAS,CAAC,EAAE,MAAM,CAAC;QACnB,GAAG,CAAC,EAAE,MAAM,CAAC;QACb,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,GAAG,SAAS,CAAC;KACnC,CAAC;IACF,aAAa;IACb,SAAS,CAAC,EAAE;QACV,MAAM,CAAC,EAAE,MAAM,CAAC;QAChB,kBAAkB,CAAC,EAAE,MAAM,EAAE,CAAC;QAC9B,WAAW,CAAC,EAAE,MAAM,EAAE,CAAC;KACxB,CAAC;IACF,YAAY;IACZ,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,YAAY;IACZ,aAAa,CAAC,EAAE,MAAM,CAAC;CACxB;AAED;;GAEG;AACH,qBAAa,qBAAqB;IAChC,OAAO,CAAC,OAAO,CAAS;IACxB,OAAO,CAAC,eAAe,CAAS;IAChC,OAAO,CAAC,OAAO,CAA+B;gBAElC,OAAO,EAAE,MAAM;IAK3B;;OAEG;IACH,IAAI,IAAI,cAAc,GAAG,IAAI;IAc7B;;OAEG;IACH,OAAO,CAAC,gBAAgB;IAoCxB;;OAEG;IACH,gBAAgB,IAAI,MAAM,GAAG,IAAI;IAsCjC;;OAEG;IACH,MAAM,IAAI,OAAO;IAIjB;;OAEG;IACH,iBAAiB,IAAI,IAAI;IAyBzB;;OAEG;IACH,UAAU,CAAC,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,GAAG,IAAI;IAwB/C;;OAEG;IACH,UAAU,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,GAAG,SAAS;CAI7C;AAOD,wBAAgB,wBAAwB,CAAC,OAAO,CAAC,EAAE,MAAM,GAAG,qBAAqB,CAQhF;AAED,wBAAgB,0BAA0B,IAAI,IAAI,CAEjD"}
@@ -0,0 +1,183 @@
1
+ /**
2
+ * 项目上下文管理
3
+ * 提供项目级别的记忆系统,存储常用命令、代码风格偏好等
4
+ */
5
+ import fs from 'fs-extra';
6
+ import path from 'node:path';
7
+ import { PROJECT_FILE } from './constants.js';
8
+ /**
9
+ * 项目上下文管理器
10
+ */
11
+ export class ProjectContextManager {
12
+ workdir;
13
+ projectFilePath;
14
+ context = null;
15
+ constructor(workdir) {
16
+ this.workdir = workdir;
17
+ this.projectFilePath = path.join(workdir, PROJECT_FILE);
18
+ }
19
+ /**
20
+ * 加载项目上下文
21
+ */
22
+ load() {
23
+ if (!fs.existsSync(this.projectFilePath)) {
24
+ return null;
25
+ }
26
+ try {
27
+ const content = fs.readFileSync(this.projectFilePath, 'utf-8');
28
+ this.context = this.parseProjectFile(content);
29
+ return this.context;
30
+ }
31
+ catch {
32
+ return null;
33
+ }
34
+ }
35
+ /**
36
+ * 解析项目文件内容
37
+ */
38
+ parseProjectFile(content) {
39
+ const context = {};
40
+ // 解析命令部分
41
+ const commandsMatch = content.match(/## 常用命令\n([\s\S]*?)(?=\n## |$)/);
42
+ if (commandsMatch) {
43
+ context.commands = {};
44
+ const lines = commandsMatch[1].trim().split('\n');
45
+ for (const line of lines) {
46
+ const match = line.match(/^- \*\*(\w+)\*\*:\s*`(.+)`/);
47
+ if (match) {
48
+ context.commands[match[1].toLowerCase()] = match[2];
49
+ }
50
+ }
51
+ }
52
+ // 解析代码风格部分
53
+ const styleMatch = content.match(/## 代码风格\n([\s\S]*?)(?=\n## |$)/);
54
+ if (styleMatch) {
55
+ context.codeStyle = {
56
+ conventions: styleMatch[1].trim().split('\n').filter(l => l.startsWith('- ')).map(l => l.slice(2)),
57
+ };
58
+ }
59
+ // 解析代码库信息部分
60
+ const infoMatch = content.match(/## 代码库信息\n([\s\S]*?)(?=\n## |$)/);
61
+ if (infoMatch) {
62
+ context.codebaseInfo = infoMatch[1].trim();
63
+ }
64
+ // 保存原始内容
65
+ context.customContent = content;
66
+ return context;
67
+ }
68
+ /**
69
+ * 生成项目上下文的提示词
70
+ */
71
+ getContextPrompt() {
72
+ const context = this.context || this.load();
73
+ if (!context) {
74
+ return null;
75
+ }
76
+ const sections = ['# 项目上下文\n'];
77
+ // 添加命令信息
78
+ if (context.commands && Object.keys(context.commands).length > 0) {
79
+ sections.push('## 常用命令\n');
80
+ for (const [name, cmd] of Object.entries(context.commands)) {
81
+ if (cmd) {
82
+ sections.push(`- **${name}**: \`${cmd}\``);
83
+ }
84
+ }
85
+ sections.push('');
86
+ }
87
+ // 添加代码风格信息
88
+ if (context.codeStyle?.conventions?.length) {
89
+ sections.push('## 代码风格\n');
90
+ for (const convention of context.codeStyle.conventions) {
91
+ sections.push(`- ${convention}`);
92
+ }
93
+ sections.push('');
94
+ }
95
+ // 添加代码库信息
96
+ if (context.codebaseInfo) {
97
+ sections.push('## 代码库信息\n');
98
+ sections.push(context.codebaseInfo);
99
+ sections.push('');
100
+ }
101
+ return sections.join('\n');
102
+ }
103
+ /**
104
+ * 检查项目文件是否存在
105
+ */
106
+ exists() {
107
+ return fs.existsSync(this.projectFilePath);
108
+ }
109
+ /**
110
+ * 创建初始项目文件
111
+ */
112
+ createInitialFile() {
113
+ const initialContent = `# ${path.basename(this.workdir)} 项目配置
114
+
115
+ ## 常用命令
116
+
117
+ - **build**: \`npm run build\`
118
+ - **test**: \`npm test\`
119
+ - **lint**: \`npm run lint\`
120
+ - **dev**: \`npm run dev\`
121
+
122
+ ## 代码风格
123
+
124
+ - 使用 TypeScript
125
+ - 使用 ESLint 进行代码检查
126
+ - 使用 Prettier 进行代码格式化
127
+
128
+ ## 代码库信息
129
+
130
+ (在这里添加关于代码库结构和组织的有用信息)
131
+ `;
132
+ fs.ensureDirSync(path.dirname(this.projectFilePath));
133
+ fs.writeFileSync(this.projectFilePath, initialContent, 'utf-8');
134
+ }
135
+ /**
136
+ * 添加命令到项目文件
137
+ */
138
+ addCommand(name, command) {
139
+ if (!this.exists()) {
140
+ this.createInitialFile();
141
+ }
142
+ let content = fs.readFileSync(this.projectFilePath, 'utf-8');
143
+ // 检查命令是否已存在
144
+ const commandRegex = new RegExp(`^- \\*\\*${name}\\*\\*:.*$`, 'm');
145
+ if (commandRegex.test(content)) {
146
+ // 更新现有命令
147
+ content = content.replace(commandRegex, `- **${name}**: \`${command}\``);
148
+ }
149
+ else {
150
+ // 添加新命令
151
+ const insertPoint = content.indexOf('## 代码风格');
152
+ if (insertPoint > 0) {
153
+ content = content.slice(0, insertPoint) + `- **${name}**: \`${command}\`\n\n` + content.slice(insertPoint);
154
+ }
155
+ }
156
+ fs.writeFileSync(this.projectFilePath, content, 'utf-8');
157
+ this.context = null; // 清除缓存
158
+ }
159
+ /**
160
+ * 获取特定命令
161
+ */
162
+ getCommand(name) {
163
+ const context = this.context || this.load();
164
+ return context?.commands?.[name.toLowerCase()];
165
+ }
166
+ }
167
+ /**
168
+ * 全局实例
169
+ */
170
+ let projectContextInstance = null;
171
+ export function getProjectContextManager(workdir) {
172
+ if (!projectContextInstance && workdir) {
173
+ projectContextInstance = new ProjectContextManager(workdir);
174
+ }
175
+ if (!projectContextInstance) {
176
+ throw new Error('ProjectContextManager 未初始化');
177
+ }
178
+ return projectContextInstance;
179
+ }
180
+ export function resetProjectContextManager() {
181
+ projectContextInstance = null;
182
+ }
183
+ //# sourceMappingURL=projectContext.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"projectContext.js","sourceRoot":"","sources":["../../src/core/projectContext.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,26 @@
1
+ /**
2
+ * 系统提示词生成 - 模块化设计
3
+ * 将提示词拆分为可组合的模块,支持动态组装
4
+ */
5
+ import type { AgentType } from './types.js';
6
+ type OutputStyleName = 'default' | 'explanatory' | 'learning';
7
+ export declare function getCurrentOutputStyle(): OutputStyleName;
8
+ export declare function setOutputStyle(style: OutputStyleName): void;
9
+ /**
10
+ * 获取环境信息
11
+ */
12
+ export declare function getEnvInfo(workdir: string): string;
13
+ /**
14
+ * 创建系统提示词(模块化组合)
15
+ */
16
+ export declare function createSystemPrompt(workdir: string, skillDescriptions: string, agentDescriptions: string): string;
17
+ /**
18
+ * 创建子代理的系统提示词
19
+ */
20
+ export declare function createSubagentSystemPrompt(workdir: string, agentType: AgentType, taskDescription: string): string;
21
+ /**
22
+ * 获取代理类型描述(用于系统提示词)
23
+ */
24
+ export declare function getAgentDescriptions(): string;
25
+ export {};
26
+ //# sourceMappingURL=prompts.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"prompts.d.ts","sourceRoot":"","sources":["../../src/core/prompts.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAGH,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,YAAY,CAAC;AAI5C,KAAK,eAAe,GAAG,SAAS,GAAG,aAAa,GAAG,UAAU,CAAC;AAG9D,wBAAgB,qBAAqB,IAAI,eAAe,CAEvD;AAED,wBAAgB,cAAc,CAAC,KAAK,EAAE,eAAe,GAAG,IAAI,CAE3D;AA2CD;;GAEG;AACH,wBAAgB,UAAU,CAAC,OAAO,EAAE,MAAM,GAAG,MAAM,CAOlD;AA+JD;;GAEG;AACH,wBAAgB,kBAAkB,CAChC,OAAO,EAAE,MAAM,EACf,iBAAiB,EAAE,MAAM,EACzB,iBAAiB,EAAE,MAAM,GACxB,MAAM,CAuCR;AAED;;GAEG;AACH,wBAAgB,0BAA0B,CACxC,OAAO,EAAE,MAAM,EACf,SAAS,EAAE,SAAS,EACpB,eAAe,EAAE,MAAM,GACtB,MAAM,CAWR;AAED;;GAEG;AACH,wBAAgB,oBAAoB,IAAI,MAAM,CAE7C"}