myagent-ai 1.11.1 → 1.12.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 (408) hide show
  1. package/agents/__pycache__/main_agent.cpython-312.pyc +0 -0
  2. package/agents/__pycache__/memory_agent.cpython-312.pyc +0 -0
  3. package/agents/main_agent.py +3 -1
  4. package/config.py +1 -0
  5. package/core/__pycache__/context_builder.cpython-312.pyc +0 -0
  6. package/core/__pycache__/output_parser.cpython-312.pyc +0 -0
  7. package/core/context_builder.py +34 -16
  8. package/memory/__pycache__/manager.cpython-312.pyc +0 -0
  9. package/package.json +1 -1
  10. package/skills/__pycache__/browser_skill.cpython-312.pyc +0 -0
  11. package/skills/__pycache__/file_skill.cpython-312.pyc +0 -0
  12. package/skills/__pycache__/registry.cpython-312.pyc +0 -0
  13. package/web/__pycache__/api_server.cpython-312.pyc +0 -0
  14. package/web/api_server.py +95 -75
  15. package/web/ui/chat/chat_main.js +4 -0
  16. package/web/ui/chat/flow_engine.js +32 -1
  17. package/web/ui/chat/groupchat.js +1 -3
  18. package/web/ui/index.html +14 -102
  19. package/skills/ASR/LICENSE.txt +0 -21
  20. package/skills/ASR/SKILL.md +0 -580
  21. package/skills/ASR/scripts/asr.ts +0 -27
  22. package/skills/LLM/LICENSE.txt +0 -21
  23. package/skills/LLM/SKILL.md +0 -856
  24. package/skills/LLM/scripts/chat.ts +0 -32
  25. package/skills/TTS/LICENSE.txt +0 -21
  26. package/skills/TTS/SKILL.md +0 -735
  27. package/skills/TTS/scripts/tts.ts +0 -25
  28. package/skills/VLM/LICENSE.txt +0 -21
  29. package/skills/VLM/SKILL.md +0 -621
  30. package/skills/VLM/scripts/vlm.ts +0 -57
  31. package/skills/agent-browser/SKILL.md +0 -327
  32. package/skills/ai-news-collectors/SKILL.md +0 -157
  33. package/skills/ai-news-collectors/_meta.json +0 -6
  34. package/skills/ai-news-collectors/references/sources.md +0 -128
  35. package/skills/aminer-open-academic/SKILL.md +0 -312
  36. package/skills/aminer-open-academic/_meta.json +0 -6
  37. package/skills/aminer-open-academic/evals/evals.json +0 -46
  38. package/skills/aminer-open-academic/references/api-catalog.md +0 -1032
  39. package/skills/aminer-open-academic/scripts/aminer_client.py +0 -875
  40. package/skills/auto-target-tracker/SKILL.md +0 -316
  41. package/skills/charts/LICENSE.txt +0 -13
  42. package/skills/charts/SKILL.md +0 -427
  43. package/skills/charts/references/_rules.md +0 -49
  44. package/skills/charts/references/d3.md +0 -199
  45. package/skills/charts/references/echarts.md +0 -651
  46. package/skills/charts/references/matplotlib.md +0 -617
  47. package/skills/charts/references/mermaid.md +0 -797
  48. package/skills/charts/references/mindmap-css.md +0 -911
  49. package/skills/charts/references/playwright-css.md +0 -801
  50. package/skills/charts/references/radial-grid.md +0 -576
  51. package/skills/charts/references/seaborn.md +0 -324
  52. package/skills/charts/setup.sh +0 -228
  53. package/skills/coding-agent/SKILL.md +0 -119
  54. package/skills/coding-agent/_meta.json +0 -6
  55. package/skills/coding-agent/criteria.md +0 -48
  56. package/skills/coding-agent/execution.md +0 -42
  57. package/skills/coding-agent/memory-template.md +0 -38
  58. package/skills/coding-agent/planning.md +0 -31
  59. package/skills/coding-agent/state.md +0 -60
  60. package/skills/coding-agent/verification.md +0 -39
  61. package/skills/contentanalysis/ExtractWisdom/SKILL.md +0 -226
  62. package/skills/contentanalysis/ExtractWisdom/Workflows/Extract.md +0 -60
  63. package/skills/contentanalysis/SKILL.md +0 -14
  64. package/skills/docx/CHANGELOG.md +0 -85
  65. package/skills/docx/LICENSE.txt +0 -13
  66. package/skills/docx/SKILL.md +0 -200
  67. package/skills/docx/docx-js.md +0 -681
  68. package/skills/docx/ooxml/schemas/ISO-IEC29500-4_2016/dml-chart.xsd +0 -1499
  69. package/skills/docx/ooxml/schemas/ISO-IEC29500-4_2016/dml-chartDrawing.xsd +0 -146
  70. package/skills/docx/ooxml/schemas/ISO-IEC29500-4_2016/dml-diagram.xsd +0 -1085
  71. package/skills/docx/ooxml/schemas/ISO-IEC29500-4_2016/dml-lockedCanvas.xsd +0 -11
  72. package/skills/docx/ooxml/schemas/ISO-IEC29500-4_2016/dml-main.xsd +0 -3081
  73. package/skills/docx/ooxml/schemas/ISO-IEC29500-4_2016/dml-picture.xsd +0 -23
  74. package/skills/docx/ooxml/schemas/ISO-IEC29500-4_2016/dml-spreadsheetDrawing.xsd +0 -185
  75. package/skills/docx/ooxml/schemas/ISO-IEC29500-4_2016/dml-wordprocessingDrawing.xsd +0 -287
  76. package/skills/docx/ooxml/schemas/ISO-IEC29500-4_2016/pml.xsd +0 -1676
  77. package/skills/docx/ooxml/schemas/ISO-IEC29500-4_2016/shared-additionalCharacteristics.xsd +0 -28
  78. package/skills/docx/ooxml/schemas/ISO-IEC29500-4_2016/shared-bibliography.xsd +0 -144
  79. package/skills/docx/ooxml/schemas/ISO-IEC29500-4_2016/shared-commonSimpleTypes.xsd +0 -174
  80. package/skills/docx/ooxml/schemas/ISO-IEC29500-4_2016/shared-customXmlDataProperties.xsd +0 -25
  81. package/skills/docx/ooxml/schemas/ISO-IEC29500-4_2016/shared-customXmlSchemaProperties.xsd +0 -18
  82. package/skills/docx/ooxml/schemas/ISO-IEC29500-4_2016/shared-documentPropertiesCustom.xsd +0 -59
  83. package/skills/docx/ooxml/schemas/ISO-IEC29500-4_2016/shared-documentPropertiesExtended.xsd +0 -56
  84. package/skills/docx/ooxml/schemas/ISO-IEC29500-4_2016/shared-documentPropertiesVariantTypes.xsd +0 -195
  85. package/skills/docx/ooxml/schemas/ISO-IEC29500-4_2016/shared-math.xsd +0 -582
  86. package/skills/docx/ooxml/schemas/ISO-IEC29500-4_2016/shared-relationshipReference.xsd +0 -25
  87. package/skills/docx/ooxml/schemas/ISO-IEC29500-4_2016/sml.xsd +0 -4439
  88. package/skills/docx/ooxml/schemas/ISO-IEC29500-4_2016/vml-main.xsd +0 -570
  89. package/skills/docx/ooxml/schemas/ISO-IEC29500-4_2016/vml-officeDrawing.xsd +0 -509
  90. package/skills/docx/ooxml/schemas/ISO-IEC29500-4_2016/vml-presentationDrawing.xsd +0 -12
  91. package/skills/docx/ooxml/schemas/ISO-IEC29500-4_2016/vml-spreadsheetDrawing.xsd +0 -108
  92. package/skills/docx/ooxml/schemas/ISO-IEC29500-4_2016/vml-wordprocessingDrawing.xsd +0 -96
  93. package/skills/docx/ooxml/schemas/ISO-IEC29500-4_2016/wml.xsd +0 -3646
  94. package/skills/docx/ooxml/schemas/ISO-IEC29500-4_2016/xml.xsd +0 -116
  95. package/skills/docx/ooxml/schemas/ecma/fouth-edition/opc-contentTypes.xsd +0 -42
  96. package/skills/docx/ooxml/schemas/ecma/fouth-edition/opc-coreProperties.xsd +0 -50
  97. package/skills/docx/ooxml/schemas/ecma/fouth-edition/opc-digSig.xsd +0 -49
  98. package/skills/docx/ooxml/schemas/ecma/fouth-edition/opc-relationships.xsd +0 -33
  99. package/skills/docx/ooxml/schemas/mce/mc.xsd +0 -75
  100. package/skills/docx/ooxml/schemas/microsoft/wml-2010.xsd +0 -560
  101. package/skills/docx/ooxml/schemas/microsoft/wml-2012.xsd +0 -67
  102. package/skills/docx/ooxml/schemas/microsoft/wml-2018.xsd +0 -14
  103. package/skills/docx/ooxml/schemas/microsoft/wml-cex-2018.xsd +0 -20
  104. package/skills/docx/ooxml/schemas/microsoft/wml-cid-2016.xsd +0 -13
  105. package/skills/docx/ooxml/schemas/microsoft/wml-sdtdatahash-2020.xsd +0 -4
  106. package/skills/docx/ooxml/schemas/microsoft/wml-symex-2015.xsd +0 -8
  107. package/skills/docx/ooxml/scripts/pack.py +0 -159
  108. package/skills/docx/ooxml/scripts/unpack.py +0 -29
  109. package/skills/docx/ooxml/scripts/validate.py +0 -69
  110. package/skills/docx/ooxml/scripts/validation/__init__.py +0 -15
  111. package/skills/docx/ooxml/scripts/validation/base.py +0 -951
  112. package/skills/docx/ooxml/scripts/validation/docx.py +0 -274
  113. package/skills/docx/ooxml/scripts/validation/pptx.py +0 -315
  114. package/skills/docx/ooxml/scripts/validation/redlining.py +0 -279
  115. package/skills/docx/ooxml.md +0 -615
  116. package/skills/docx/references/chart-templates.md +0 -386
  117. package/skills/docx/references/common-rules.md +0 -419
  118. package/skills/docx/references/decorations.md +0 -538
  119. package/skills/docx/references/design-system.md +0 -1797
  120. package/skills/docx/references/docx-js-advanced.md +0 -257
  121. package/skills/docx/references/docx-js-core.md +0 -333
  122. package/skills/docx/references/faq.md +0 -323
  123. package/skills/docx/references/math-formulas.md +0 -276
  124. package/skills/docx/references/ooxml.md +0 -222
  125. package/skills/docx/references/toc.md +0 -254
  126. package/skills/docx/routes/comment.md +0 -88
  127. package/skills/docx/routes/create.md +0 -207
  128. package/skills/docx/routes/edit.md +0 -115
  129. package/skills/docx/routes/format.md +0 -120
  130. package/skills/docx/routes/read.md +0 -114
  131. package/skills/docx/scenes/academic.md +0 -783
  132. package/skills/docx/scenes/contract.md +0 -463
  133. package/skills/docx/scenes/copywriting.md +0 -139
  134. package/skills/docx/scenes/exam.md +0 -698
  135. package/skills/docx/scenes/official-doc.md +0 -411
  136. package/skills/docx/scenes/report.md +0 -340
  137. package/skills/docx/scenes/resume.md +0 -534
  138. package/skills/docx/scripts/__init__.py +0 -1
  139. package/skills/docx/scripts/add_toc_placeholders.py +0 -749
  140. package/skills/docx/scripts/document.py +0 -1333
  141. package/skills/docx/scripts/postcheck.py +0 -807
  142. package/skills/docx/scripts/templates/comments.xml +0 -3
  143. package/skills/docx/scripts/templates/commentsExtended.xml +0 -3
  144. package/skills/docx/scripts/templates/commentsExtensible.xml +0 -3
  145. package/skills/docx/scripts/templates/commentsIds.xml +0 -3
  146. package/skills/docx/scripts/templates/people.xml +0 -3
  147. package/skills/docx/scripts/utilities.py +0 -374
  148. package/skills/docx/setup.sh +0 -177
  149. package/skills/finance/Finance_API_Doc.md +0 -445
  150. package/skills/finance/SKILL.md +0 -53
  151. package/skills/gift-evaluator/SKILL.md +0 -83
  152. package/skills/gift-evaluator/html_tools.py +0 -268
  153. package/skills/image-edit/LICENSE.txt +0 -21
  154. package/skills/image-edit/SKILL.md +0 -896
  155. package/skills/image-edit/scripts/image-edit.ts +0 -36
  156. package/skills/image-generation/LICENSE.txt +0 -21
  157. package/skills/image-generation/SKILL.md +0 -583
  158. package/skills/image-generation/scripts/image-generation.ts +0 -28
  159. package/skills/market-research-reports/SKILL.md +0 -901
  160. package/skills/market-research-reports/assets/FORMATTING_GUIDE.md +0 -428
  161. package/skills/market-research-reports/assets/market_report_template.tex +0 -1380
  162. package/skills/market-research-reports/assets/market_research.sty +0 -564
  163. package/skills/market-research-reports/references/data_analysis_patterns.md +0 -548
  164. package/skills/market-research-reports/references/report_structure_guide.md +0 -999
  165. package/skills/market-research-reports/references/visual_generation_guide.md +0 -1077
  166. package/skills/market-research-reports/scripts/generate_market_visuals.py +0 -529
  167. package/skills/marketing-mode/README.md +0 -49
  168. package/skills/marketing-mode/SKILL.md +0 -677
  169. package/skills/marketing-mode/_meta.json +0 -6
  170. package/skills/marketing-mode/mode-prompt.md +0 -39
  171. package/skills/marketing-mode/skill.json +0 -20
  172. package/skills/pdf/LICENSE.txt +0 -13
  173. package/skills/pdf/SKILL.md +0 -927
  174. package/skills/pdf/briefs/academic.md +0 -1049
  175. package/skills/pdf/briefs/creative.md +0 -770
  176. package/skills/pdf/briefs/poster.md +0 -702
  177. package/skills/pdf/briefs/process-advanced.md +0 -284
  178. package/skills/pdf/briefs/process.md +0 -319
  179. package/skills/pdf/briefs/report.md +0 -1657
  180. package/skills/pdf/configs/components.md +0 -153
  181. package/skills/pdf/configs/fonts.md +0 -93
  182. package/skills/pdf/configs/visual_framework.md +0 -263
  183. package/skills/pdf/forms.md +0 -205
  184. package/skills/pdf/reference.md +0 -765
  185. package/skills/pdf/references/resume-academic.tex +0 -130
  186. package/skills/pdf/references/resume-altacv.tex +0 -190
  187. package/skills/pdf/scripts/add_zai_metadata.py +0 -172
  188. package/skills/pdf/scripts/check_bounding_boxes.py +0 -70
  189. package/skills/pdf/scripts/check_bounding_boxes_test.py +0 -226
  190. package/skills/pdf/scripts/check_fillable_fields.py +0 -12
  191. package/skills/pdf/scripts/convert_pdf_to_images.py +0 -35
  192. package/skills/pdf/scripts/cover_validate.js +0 -367
  193. package/skills/pdf/scripts/create_validation_image.py +0 -41
  194. package/skills/pdf/scripts/design_engine.py +0 -2816
  195. package/skills/pdf/scripts/extract_form_field_info.py +0 -152
  196. package/skills/pdf/scripts/fill_fillable_fields.py +0 -114
  197. package/skills/pdf/scripts/fill_pdf_form_with_annotations.py +0 -108
  198. package/skills/pdf/scripts/html2pdf-next.js +0 -754
  199. package/skills/pdf/scripts/html2poster.js +0 -256
  200. package/skills/pdf/scripts/pdf.py +0 -2959
  201. package/skills/pdf/scripts/pdf_qa.py +0 -901
  202. package/skills/pdf/scripts/poster_validate.py +0 -1337
  203. package/skills/pdf/scripts/sanitize_code.py +0 -110
  204. package/skills/pdf/scripts/setup.sh +0 -269
  205. package/skills/pdf/scripts/tectonic +0 -0
  206. package/skills/pdf/scripts/toc_validate.py +0 -2075
  207. package/skills/pdf/typesetting/charts.md +0 -320
  208. package/skills/pdf/typesetting/cover-backgrounds.md +0 -384
  209. package/skills/pdf/typesetting/cover.md +0 -1442
  210. package/skills/pdf/typesetting/fill-engine.md +0 -527
  211. package/skills/pdf/typesetting/geometry.md +0 -142
  212. package/skills/pdf/typesetting/overflow.md +0 -630
  213. package/skills/pdf/typesetting/pagination.md +0 -367
  214. package/skills/pdf/typesetting/palette.md +0 -217
  215. package/skills/pdf/typesetting/typography.md +0 -20
  216. package/skills/podcast-generate/LICENSE.txt +0 -21
  217. package/skills/podcast-generate/SKILL.md +0 -198
  218. package/skills/podcast-generate/generate.ts +0 -661
  219. package/skills/podcast-generate/package.json +0 -30
  220. package/skills/podcast-generate/readme.md +0 -177
  221. package/skills/podcast-generate/test_data/segments.jsonl +0 -3
  222. package/skills/podcast-generate/tsconfig.json +0 -26
  223. package/skills/ppt/LICENSE.txt +0 -13
  224. package/skills/ppt/SKILL.md +0 -436
  225. package/skills/ppt/beamer.md +0 -1457
  226. package/skills/ppt/components.md +0 -1634
  227. package/skills/ppt/data-viz-components.md +0 -529
  228. package/skills/ppt/design-system.md +0 -206
  229. package/skills/ppt/html2pptx.md +0 -394
  230. package/skills/ppt/ooxml/schemas/ISO-IEC29500-4_2016/dml-chart.xsd +0 -1499
  231. package/skills/ppt/ooxml/schemas/ISO-IEC29500-4_2016/dml-chartDrawing.xsd +0 -146
  232. package/skills/ppt/ooxml/schemas/ISO-IEC29500-4_2016/dml-diagram.xsd +0 -1085
  233. package/skills/ppt/ooxml/schemas/ISO-IEC29500-4_2016/dml-lockedCanvas.xsd +0 -11
  234. package/skills/ppt/ooxml/schemas/ISO-IEC29500-4_2016/dml-main.xsd +0 -3081
  235. package/skills/ppt/ooxml/schemas/ISO-IEC29500-4_2016/dml-picture.xsd +0 -23
  236. package/skills/ppt/ooxml/schemas/ISO-IEC29500-4_2016/dml-spreadsheetDrawing.xsd +0 -185
  237. package/skills/ppt/ooxml/schemas/ISO-IEC29500-4_2016/dml-wordprocessingDrawing.xsd +0 -287
  238. package/skills/ppt/ooxml/schemas/ISO-IEC29500-4_2016/pml.xsd +0 -1676
  239. package/skills/ppt/ooxml/schemas/ISO-IEC29500-4_2016/shared-additionalCharacteristics.xsd +0 -28
  240. package/skills/ppt/ooxml/schemas/ISO-IEC29500-4_2016/shared-bibliography.xsd +0 -144
  241. package/skills/ppt/ooxml/schemas/ISO-IEC29500-4_2016/shared-commonSimpleTypes.xsd +0 -174
  242. package/skills/ppt/ooxml/schemas/ISO-IEC29500-4_2016/shared-customXmlDataProperties.xsd +0 -25
  243. package/skills/ppt/ooxml/schemas/ISO-IEC29500-4_2016/shared-customXmlSchemaProperties.xsd +0 -18
  244. package/skills/ppt/ooxml/schemas/ISO-IEC29500-4_2016/shared-documentPropertiesCustom.xsd +0 -59
  245. package/skills/ppt/ooxml/schemas/ISO-IEC29500-4_2016/shared-documentPropertiesExtended.xsd +0 -56
  246. package/skills/ppt/ooxml/schemas/ISO-IEC29500-4_2016/shared-documentPropertiesVariantTypes.xsd +0 -195
  247. package/skills/ppt/ooxml/schemas/ISO-IEC29500-4_2016/shared-math.xsd +0 -582
  248. package/skills/ppt/ooxml/schemas/ISO-IEC29500-4_2016/shared-relationshipReference.xsd +0 -25
  249. package/skills/ppt/ooxml/schemas/ISO-IEC29500-4_2016/sml.xsd +0 -4439
  250. package/skills/ppt/ooxml/schemas/ISO-IEC29500-4_2016/vml-main.xsd +0 -570
  251. package/skills/ppt/ooxml/schemas/ISO-IEC29500-4_2016/vml-officeDrawing.xsd +0 -509
  252. package/skills/ppt/ooxml/schemas/ISO-IEC29500-4_2016/vml-presentationDrawing.xsd +0 -12
  253. package/skills/ppt/ooxml/schemas/ISO-IEC29500-4_2016/vml-spreadsheetDrawing.xsd +0 -108
  254. package/skills/ppt/ooxml/schemas/ISO-IEC29500-4_2016/vml-wordprocessingDrawing.xsd +0 -96
  255. package/skills/ppt/ooxml/schemas/ISO-IEC29500-4_2016/wml.xsd +0 -3646
  256. package/skills/ppt/ooxml/schemas/ISO-IEC29500-4_2016/xml.xsd +0 -116
  257. package/skills/ppt/ooxml/schemas/ecma/fouth-edition/opc-contentTypes.xsd +0 -42
  258. package/skills/ppt/ooxml/schemas/ecma/fouth-edition/opc-coreProperties.xsd +0 -50
  259. package/skills/ppt/ooxml/schemas/ecma/fouth-edition/opc-digSig.xsd +0 -49
  260. package/skills/ppt/ooxml/schemas/ecma/fouth-edition/opc-relationships.xsd +0 -33
  261. package/skills/ppt/ooxml/schemas/mce/mc.xsd +0 -75
  262. package/skills/ppt/ooxml/schemas/microsoft/wml-2010.xsd +0 -560
  263. package/skills/ppt/ooxml/schemas/microsoft/wml-2012.xsd +0 -67
  264. package/skills/ppt/ooxml/schemas/microsoft/wml-2018.xsd +0 -14
  265. package/skills/ppt/ooxml/schemas/microsoft/wml-cex-2018.xsd +0 -20
  266. package/skills/ppt/ooxml/schemas/microsoft/wml-cid-2016.xsd +0 -13
  267. package/skills/ppt/ooxml/schemas/microsoft/wml-sdtdatahash-2020.xsd +0 -4
  268. package/skills/ppt/ooxml/schemas/microsoft/wml-symex-2015.xsd +0 -8
  269. package/skills/ppt/ooxml/scripts/pack.py +0 -159
  270. package/skills/ppt/ooxml/scripts/unpack.py +0 -29
  271. package/skills/ppt/ooxml/scripts/validate.py +0 -69
  272. package/skills/ppt/ooxml/scripts/validation/__init__.py +0 -15
  273. package/skills/ppt/ooxml/scripts/validation/base.py +0 -951
  274. package/skills/ppt/ooxml/scripts/validation/docx.py +0 -274
  275. package/skills/ppt/ooxml/scripts/validation/pptx.py +0 -315
  276. package/skills/ppt/ooxml/scripts/validation/redlining.py +0 -279
  277. package/skills/ppt/ooxml.md +0 -427
  278. package/skills/ppt/references/beamer.md +0 -721
  279. package/skills/ppt/references/latex.md +0 -342
  280. package/skills/ppt/references/paper-navbar.tex +0 -73
  281. package/skills/ppt/references/progress-navbar.tex +0 -151
  282. package/skills/ppt/scripts/html2pptx.js +0 -1329
  283. package/skills/ppt/scripts/inventory.py +0 -512
  284. package/skills/ppt/scripts/pdf.py +0 -2959
  285. package/skills/ppt/scripts/rearrange.py +0 -135
  286. package/skills/ppt/scripts/replace.py +0 -231
  287. package/skills/ppt/scripts/tectonic +0 -0
  288. package/skills/ppt/scripts/thumbnail.py +0 -352
  289. package/skills/ppt/setup.sh +0 -197
  290. package/skills/ppt/themes.md +0 -506
  291. package/skills/qingyan-research/SKILL.md +0 -294
  292. package/skills/qingyan-research/generate_html.py +0 -33
  293. package/skills/seo-content-writer/SKILL.md +0 -625
  294. package/skills/seo-content-writer/_meta.json +0 -6
  295. package/skills/seo-content-writer/references/content-structure-templates.md +0 -875
  296. package/skills/seo-content-writer/references/title-formulas.md +0 -339
  297. package/skills/skill-creator/LICENSE.txt +0 -202
  298. package/skills/skill-creator/SKILL.md +0 -485
  299. package/skills/skill-creator/agents/analyzer.md +0 -274
  300. package/skills/skill-creator/agents/comparator.md +0 -202
  301. package/skills/skill-creator/agents/grader.md +0 -223
  302. package/skills/skill-creator/assets/eval_review.html +0 -146
  303. package/skills/skill-creator/eval-viewer/generate_review.py +0 -471
  304. package/skills/skill-creator/eval-viewer/viewer.html +0 -1325
  305. package/skills/skill-creator/references/schemas.md +0 -430
  306. package/skills/skill-creator/scripts/__init__.py +0 -0
  307. package/skills/skill-creator/scripts/aggregate_benchmark.py +0 -401
  308. package/skills/skill-creator/scripts/generate_report.py +0 -326
  309. package/skills/skill-creator/scripts/improve_description.py +0 -236
  310. package/skills/skill-creator/scripts/package_skill.py +0 -136
  311. package/skills/skill-creator/scripts/quick_validate.py +0 -103
  312. package/skills/skill-creator/scripts/run_eval.py +0 -310
  313. package/skills/skill-creator/scripts/run_loop.py +0 -328
  314. package/skills/skill-creator/scripts/utils.py +0 -47
  315. package/skills/stock-analysis-skill/SKILL.md +0 -156
  316. package/skills/stock-analysis-skill/package.json +0 -21
  317. package/skills/stock-analysis-skill/src/analyzer.ts +0 -264
  318. package/skills/stock-analysis-skill/src/dataFetcher.ts +0 -130
  319. package/skills/stock-analysis-skill/src/dividend.ts +0 -226
  320. package/skills/stock-analysis-skill/src/index.ts +0 -327
  321. package/skills/stock-analysis-skill/src/rumorScanner.ts +0 -200
  322. package/skills/stock-analysis-skill/src/types.ts +0 -167
  323. package/skills/stock-analysis-skill/src/watchlist.ts +0 -308
  324. package/skills/stock-analysis-skill/tsconfig.json +0 -15
  325. package/skills/storyboard-manager/SKILL.md +0 -532
  326. package/skills/storyboard-manager/index.js +0 -9
  327. package/skills/storyboard-manager/package.json +0 -11
  328. package/skills/storyboard-manager/references/character_development.md +0 -232
  329. package/skills/storyboard-manager/references/story_structures.md +0 -148
  330. package/skills/storyboard-manager/scripts/consistency_checker.py +0 -391
  331. package/skills/storyboard-manager/scripts/timeline_tracker.py +0 -352
  332. package/skills/ui-ux-pro-max/SKILL.md +0 -43
  333. package/skills/ui-ux-pro-max/_meta.json +0 -6
  334. package/skills/ui-ux-pro-max/assets/data/charts.csv +0 -26
  335. package/skills/ui-ux-pro-max/assets/data/colors.csv +0 -97
  336. package/skills/ui-ux-pro-max/assets/data/icons.csv +0 -101
  337. package/skills/ui-ux-pro-max/assets/data/landing.csv +0 -31
  338. package/skills/ui-ux-pro-max/assets/data/products.csv +0 -97
  339. package/skills/ui-ux-pro-max/assets/data/react-performance.csv +0 -45
  340. package/skills/ui-ux-pro-max/assets/data/stacks/astro.csv +0 -54
  341. package/skills/ui-ux-pro-max/assets/data/stacks/flutter.csv +0 -53
  342. package/skills/ui-ux-pro-max/assets/data/stacks/html-tailwind.csv +0 -56
  343. package/skills/ui-ux-pro-max/assets/data/stacks/jetpack-compose.csv +0 -53
  344. package/skills/ui-ux-pro-max/assets/data/stacks/nextjs.csv +0 -53
  345. package/skills/ui-ux-pro-max/assets/data/stacks/nuxt-ui.csv +0 -51
  346. package/skills/ui-ux-pro-max/assets/data/stacks/nuxtjs.csv +0 -59
  347. package/skills/ui-ux-pro-max/assets/data/stacks/react-native.csv +0 -52
  348. package/skills/ui-ux-pro-max/assets/data/stacks/react.csv +0 -54
  349. package/skills/ui-ux-pro-max/assets/data/stacks/shadcn.csv +0 -61
  350. package/skills/ui-ux-pro-max/assets/data/stacks/svelte.csv +0 -54
  351. package/skills/ui-ux-pro-max/assets/data/stacks/swiftui.csv +0 -51
  352. package/skills/ui-ux-pro-max/assets/data/stacks/vue.csv +0 -50
  353. package/skills/ui-ux-pro-max/assets/data/styles.csv +0 -68
  354. package/skills/ui-ux-pro-max/assets/data/typography.csv +0 -58
  355. package/skills/ui-ux-pro-max/assets/data/ui-reasoning.csv +0 -101
  356. package/skills/ui-ux-pro-max/assets/data/ux-guidelines.csv +0 -100
  357. package/skills/ui-ux-pro-max/assets/data/web-interface.csv +0 -31
  358. package/skills/ui-ux-pro-max/references/upstream-README.md +0 -488
  359. package/skills/ui-ux-pro-max/references/upstream-skill-content.md +0 -288
  360. package/skills/ui-ux-pro-max/scripts/__init__.py +0 -0
  361. package/skills/ui-ux-pro-max/scripts/core.py +0 -253
  362. package/skills/ui-ux-pro-max/scripts/design_system.py +0 -1071
  363. package/skills/ui-ux-pro-max/scripts/search.py +0 -111
  364. package/skills/video-generation/LICENSE.txt +0 -21
  365. package/skills/video-generation/SKILL.md +0 -1082
  366. package/skills/video-generation/scripts/video.ts +0 -168
  367. package/skills/web-reader/LICENSE.txt +0 -21
  368. package/skills/web-reader/SKILL.md +0 -1140
  369. package/skills/web-reader/scripts/web-reader.ts +0 -37
  370. package/skills/web-search/LICENSE.txt +0 -21
  371. package/skills/web-search/SKILL.md +0 -912
  372. package/skills/web-search/scripts/web_search.ts +0 -44
  373. package/skills/web-shader-extractor/SKILL.md +0 -145
  374. package/skills/web-shader-extractor/references/config-extraction.md +0 -50
  375. package/skills/web-shader-extractor/references/encoded-definitions.md +0 -53
  376. package/skills/web-shader-extractor/references/extraction-workflow.md +0 -61
  377. package/skills/web-shader-extractor/references/porting-strategy.md +0 -164
  378. package/skills/web-shader-extractor/references/shader-injection.md +0 -126
  379. package/skills/web-shader-extractor/references/shaders-com.md +0 -190
  380. package/skills/web-shader-extractor/references/tech-signatures.md +0 -54
  381. package/skills/web-shader-extractor/references/tsl-extraction.md +0 -41
  382. package/skills/web-shader-extractor/references/unicorn-studio.md +0 -353
  383. package/skills/web-shader-extractor/scripts/fetch-rendered-dom.mjs +0 -153
  384. package/skills/web-shader-extractor/scripts/scan-bundle.sh +0 -76
  385. package/skills/writing-plans/SKILL.md +0 -113
  386. package/skills/writing-plans/_meta.json +0 -6
  387. package/skills/xlsx/LICENSE.txt +0 -13
  388. package/skills/xlsx/SKILL.md +0 -230
  389. package/skills/xlsx/engines/chart-templates.md +0 -167
  390. package/skills/xlsx/engines/chart.md +0 -87
  391. package/skills/xlsx/engines/design.md +0 -575
  392. package/skills/xlsx/engines/vba-templates.md +0 -435
  393. package/skills/xlsx/quality/pipeline.md +0 -196
  394. package/skills/xlsx/recalc.py +0 -178
  395. package/skills/xlsx/scenes/advanced.md +0 -271
  396. package/skills/xlsx/scenes/analyze-recipes.md +0 -234
  397. package/skills/xlsx/scenes/analyze.md +0 -95
  398. package/skills/xlsx/scenes/convert.md +0 -133
  399. package/skills/xlsx/scenes/create.md +0 -105
  400. package/skills/xlsx/scenes/edit-patterns.md +0 -222
  401. package/skills/xlsx/scenes/edit.md +0 -195
  402. package/skills/xlsx/scenes/finance.md +0 -318
  403. package/skills/xlsx/scenes/finance_lite.md +0 -192
  404. package/skills/xlsx/scenes/vba.md +0 -298
  405. package/skills/xlsx/setup.sh +0 -136
  406. package/skills/xlsx/templates/base.py +0 -632
  407. package/skills/xlsx/templates/palettes.py +0 -521
  408. package/skills/xlsx/xlsx.py +0 -1299
File without changes
File without changes
@@ -293,7 +293,9 @@ class MainAgent(BaseAgent):
293
293
  auto_kb_dir.mkdir(parents=True, exist_ok=True)
294
294
 
295
295
  # 使用 session_id 作为文件名(取前8位避免过长)
296
- safe_session = session_id.replace("-", "")[:8] if session_id else "default"
296
+ # 注意: session_id 可能包含 '/' (来自 agent_path "coder/python-expert"),
297
+ # 必须替换为安全字符,避免创建意外的子目录
298
+ safe_session = session_id.replace("-", "").replace("/", "_")[:12] if session_id else "default"
297
299
  kb_file = auto_kb_dir / f"{safe_session}.md"
298
300
 
299
301
  now_str = datetime.now().strftime("%Y-%m-%d %H:%M")
package/config.py CHANGED
@@ -100,6 +100,7 @@ class ModelEntry:
100
100
  input_modes: List[str] = field(default_factory=lambda: ["text"]) # 支持的输入模式: text, image, video, audio
101
101
  reasoning: bool = True # 是否支持推理(如 o1 系列)
102
102
  enabled: bool = True
103
+ is_global_fallback: bool = True # 是否作为全局兜底模型(保障系统运行的最终兜底模型)
103
104
 
104
105
 
105
106
  @dataclass
File without changes
File without changes
@@ -69,6 +69,8 @@ class ContextBuilder:
69
69
  self.skill_registry = skill_registry
70
70
  self.knowledge_base_dir = knowledge_base_dir
71
71
  self.max_dialog_chars = max_dialog_chars
72
+ # Agent 专属知识库目录(由调用方动态设置,优先于组织知识库)
73
+ self.agent_knowledge_dir: Optional[str] = None
72
74
 
73
75
  # =========================================================================
74
76
  # 公共接口
@@ -248,8 +250,9 @@ class ContextBuilder:
248
250
  """
249
251
  构建 <knowledge> 段落 —— 知识库 RAG 检索结果。
250
252
 
251
- 使用 KnowledgeRAG (TF-IDF + 余弦相似度) 检索与查询最相关的
252
- 知识片段。当 knowledge_base_dir 未设置或目录不存在时,输出占位提示。
253
+ 搜索优先级:
254
+ 1. Agent 专属知识库 (agent_knowledge_dir) —— 如果有且非空
255
+ 2. 组织知识库 (knowledge_base_dir) —— 兜底
253
256
 
254
257
  Args:
255
258
  query: 搜索查询文本(通常为 <get_knowledge> 内容或用户消息)
@@ -257,31 +260,46 @@ class ContextBuilder:
257
260
  Returns:
258
261
  <knowledge> XML 段落字符串
259
262
  """
260
- if not self.knowledge_base_dir:
263
+ # 优先搜索 Agent 专属知识库
264
+ if self.agent_knowledge_dir:
265
+ agent_result = self._search_knowledge_dir(self.agent_knowledge_dir, query, top_k=5)
266
+ if agent_result:
267
+ return agent_result
268
+
269
+ # 回退到组织知识库
270
+ if self.knowledge_base_dir:
271
+ org_result = self._search_knowledge_dir(self.knowledge_base_dir, query, top_k=5)
272
+ if org_result:
273
+ return org_result
274
+
275
+ # 都没有配置或都为空
276
+ if not self.knowledge_base_dir and not self.agent_knowledge_dir:
261
277
  return "<knowledge>\n(知识库未配置)\n</knowledge>"
278
+ return "<knowledge>\n(未找到相关知识)\n</knowledge>"
279
+
280
+ def _search_knowledge_dir(self, kb_dir: str, query: str, top_k: int = 5) -> str:
281
+ """在指定知识库目录中执行 RAG 搜索并格式化结果"""
282
+ import os as _os
262
283
 
263
284
  if not query.strip():
264
- return "<knowledge>\n(无检索关键词)\n</knowledge>"
285
+ return ""
286
+
287
+ if not kb_dir or not _os.path.isdir(kb_dir):
288
+ return ""
265
289
 
266
290
  try:
267
291
  from knowledge.rag import KnowledgeRAG
268
- import os as _os
269
-
270
- kb_path = self.knowledge_base_dir
271
- if not _os.path.isdir(kb_path):
272
- logger.debug(f"知识库目录不存在: {kb_path}")
273
- return "<knowledge>\n(知识库目录不存在)\n</knowledge>"
274
292
 
275
- rag = KnowledgeRAG(kb_dir=kb_path)
293
+ rag = KnowledgeRAG(kb_dir=kb_dir)
276
294
  rag.build_index()
277
295
 
278
296
  if rag.total_chunks == 0:
279
- return "<knowledge>\n(知识库为空,无索引内容)\n</knowledge>"
297
+ return ""
280
298
 
281
- results = rag.search(query, top_k=5)
299
+ results = rag.search(query, top_k=top_k)
282
300
 
283
301
  if not results:
284
- return "<knowledge>\n(未找到相关知识)\n</knowledge>"
302
+ return ""
285
303
 
286
304
  lines: List[str] = ["<knowledge>"]
287
305
  for i, chunk in enumerate(results, 1):
@@ -297,8 +315,8 @@ class ContextBuilder:
297
315
  return "\n".join(lines)
298
316
 
299
317
  except Exception as e:
300
- logger.warning(f"知识库 RAG 检索失败: {e}")
301
- return "<knowledge>\n(知识库检索不可用)\n</knowledge>"
318
+ logger.warning(f"知识库 RAG 检索失败 ({kb_dir}): {e}")
319
+ return ""
302
320
 
303
321
  def _build_recent_dialog(
304
322
  self,
File without changes
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "myagent-ai",
3
- "version": "1.11.1",
3
+ "version": "1.12.0",
4
4
  "description": "本地桌面端执行型AI助手 - Open Interpreter 风格 | Local Desktop Execution-Oriented AI Assistant",
5
5
  "main": "main.py",
6
6
  "bin": {
File without changes
File without changes
File without changes
File without changes
package/web/api_server.py CHANGED
@@ -2594,73 +2594,52 @@ class ApiServer:
2594
2594
  return web.json_response({"ok": True, "hot_reload": True})
2595
2595
 
2596
2596
  async def handle_test_llm(self, request):
2597
- """POST /api/llm/test - 测试 LLM 连接,支持使用请求体中的临时配置"""
2598
- print(f"handle_test_llm 被调用!", flush=True)
2597
+ """POST /api/llm/test - 独立测试指定模型连接,不使用任何兜底/fallback逻辑"""
2599
2598
  try:
2600
- # 尝试从请求体读取临时配置
2601
- temp_client = None
2602
- try:
2603
- data = await request.json()
2604
- print(f"请求数据: {data}", flush=True)
2605
- api_key = data.get("api_key", "")
2606
- base_url = data.get("base_url", "")
2607
- model = data.get("model", "")
2608
- api_type = data.get("api_type", "")
2609
- temperature = data.get("temperature", 0.1)
2610
- # 如果请求中有 provider,直接使用;否则根据 api_type 或 base_url 推断
2611
- provider = data.get("provider", "")
2612
- if not provider:
2613
- if api_type in ("openai-chat", "openai-completions"):
2614
- provider = "openai"
2615
- elif api_type == "anthropic":
2616
- provider = "anthropic"
2617
- elif api_type == "ollama":
2618
- provider = "ollama"
2619
- elif "zhipu" in base_url or "bigmodel" in base_url:
2620
- provider = "zhipu"
2621
- elif "anthropic" in base_url:
2622
- provider = "anthropic"
2623
- elif "ollama" in base_url or "localhost" in base_url or "127.0.0.1" in base_url:
2624
- provider = "ollama"
2625
- elif "dashscope" in base_url or "qwen" in base_url.lower() or "modelscope" in base_url:
2626
- provider = "custom" # DashScope/ModelScope 使用自定义 provider
2627
- else:
2628
- provider = "openai"
2629
- print(f"准备创建 temp_client: provider={provider}, api_key={api_key[:10] if api_key else 'empty'}...", flush=True)
2630
- if api_key or base_url or model:
2631
- # 使用请求体中的配置创建临时客户端测试
2632
- from core.llm import LLMClient
2633
- temp_client = LLMClient(
2634
- provider=provider,
2635
- api_key=api_key or self.core.llm.api_key if self.core.llm else "",
2636
- base_url=base_url or self.core.llm.base_url if self.core.llm else "",
2637
- model=model or self.core.llm.model if self.core.llm else "gpt-4",
2638
- temperature=temperature,
2639
- timeout=30,
2640
- max_retries=1,
2641
- )
2642
- print(f"temp_client 创建成功: {temp_client}, base_url={temp_client.base_url}", flush=True)
2599
+ data = await request.json()
2600
+ api_key = data.get("api_key", "")
2601
+ base_url = data.get("base_url", "")
2602
+ model = data.get("model", "")
2603
+ api_type = data.get("api_type", "")
2604
+ temperature = data.get("temperature", 0.1)
2605
+ provider = data.get("provider", "")
2606
+
2607
+ if not model:
2608
+ return web.json_response({"ok": False, "error": "缺少 model 参数"})
2609
+
2610
+ # 根据 api_type 或 base_url 推断 provider
2611
+ if not provider:
2612
+ if api_type == "anthropic":
2613
+ provider = "anthropic"
2614
+ elif api_type == "ollama":
2615
+ provider = "ollama"
2616
+ elif "zhipu" in base_url or "bigmodel" in base_url:
2617
+ provider = "zhipu"
2618
+ elif "anthropic" in base_url:
2619
+ provider = "anthropic"
2620
+ elif "ollama" in base_url or "localhost" in base_url or "127.0.0.1" in base_url:
2621
+ provider = "ollama"
2622
+ elif "dashscope" in base_url or "qwen" in base_url.lower() or "modelscope" in base_url:
2623
+ provider = "custom"
2643
2624
  else:
2644
- print("条件不满足,temp_client 未创建", flush=True)
2645
- except Exception as e:
2646
- print(f"创建 temp_client 异常: {e}", flush=True)
2647
- logger.warning(f"读取请求体失败: {e}")
2648
- pass # 如果没有请求体或解析失败,使用当前配置
2649
-
2650
- client = temp_client or self.core.llm
2651
- print(f"DEBUG: temp_client={temp_client is not None}, client={client}, client_type={type(client).__name__}, client_base_url={getattr(client, 'base_url', 'N/A')}", flush=True)
2652
- if not client:
2653
- print("没有 LLM 客户端", flush=True)
2654
- return web.json_response({"ok": False, "error": "没有配置 LLM 客户端"})
2655
- msg = await client.chat([Message(role="user", content="Hi, reply OK")])
2656
- print(f"TEST: msg.success={msg.success}, msg.content={repr(msg.content[:50] if msg.content else '')}, msg.error={msg.error}", flush=True)
2657
- # 必须检查 msg.success,否则即使请求失败也会返回成功
2625
+ provider = "openai"
2626
+
2627
+ # 纯粹使用请求体中的参数创建临时客户端,绝不 fallback 到全局配置
2628
+ from core.llm import LLMClient
2629
+ temp_client = LLMClient(
2630
+ provider=provider,
2631
+ api_key=api_key,
2632
+ base_url=base_url,
2633
+ model=model,
2634
+ temperature=temperature,
2635
+ timeout=30,
2636
+ max_retries=1,
2637
+ )
2638
+ msg = await temp_client.chat([Message(role="user", content="Hi, reply OK")])
2658
2639
  if not msg.success:
2659
- print(f"返回失败: {msg.error}", flush=True)
2660
2640
  return web.json_response({"ok": False, "error": msg.error or "LLM 调用失败"})
2661
2641
  return web.json_response({"ok": True, "response": msg.content[:100] if msg.content else ""})
2662
2642
  except Exception as e:
2663
- print(f"handle_test_llm 异常: {e}", flush=True)
2664
2643
  return web.json_response({"ok": False, "error": str(e)})
2665
2644
 
2666
2645
  async def handle_llm_usage(self, request):
@@ -2680,6 +2659,7 @@ class ApiServer:
2680
2659
  "input_modes": m.input_modes,
2681
2660
  "reasoning": m.reasoning,
2682
2661
  "enabled": m.enabled,
2662
+ "is_global_fallback": getattr(m, 'is_global_fallback', True),
2683
2663
  "has_api_key": bool(m.api_key),
2684
2664
  })
2685
2665
  return web.json_response(models)
@@ -2708,6 +2688,7 @@ class ApiServer:
2708
2688
  input_modes=data.get("input_modes", ["text"]),
2709
2689
  reasoning=data.get("reasoning", False),
2710
2690
  enabled=data.get("enabled", True),
2691
+ is_global_fallback=data.get("is_global_fallback", True),
2711
2692
  )
2712
2693
  self.core.config.models_library.append(entry)
2713
2694
  self.core.config_mgr.save()
@@ -2721,7 +2702,7 @@ class ApiServer:
2721
2702
  found = False
2722
2703
  for m in self.core.config.models_library:
2723
2704
  if m.id == model_id:
2724
- for k in ("name", "provider", "api_type", "model", "base_url", "max_tokens", "temperature", "context_window", "input_modes", "reasoning", "enabled"):
2705
+ for k in ("name", "provider", "api_type", "model", "base_url", "max_tokens", "temperature", "context_window", "input_modes", "reasoning", "enabled", "is_global_fallback"):
2725
2706
  if k in data:
2726
2707
  setattr(m, k, data[k])
2727
2708
  if data.get("api_key"):
@@ -3062,20 +3043,40 @@ class ApiServer:
3062
3043
  "is_backup": False,
3063
3044
  })
3064
3045
 
3065
- # 如果没有找到任何主模型配置,使用全局默认 LLM 作为 fallback
3046
+ # 如果没有找到任何主模型配置,使用模型库中标记为全局兜底的模型
3066
3047
  if not chain:
3067
- chain.append({
3068
- "id": "default",
3069
- "name": llm_defaults.model,
3070
- "provider": llm_defaults.provider,
3071
- "api_type": llm_defaults.api_type,
3072
- "model": llm_defaults.model,
3073
- "base_url": llm_defaults.base_url,
3074
- "api_key": llm_defaults.api_key,
3075
- "temperature": llm_defaults.temperature,
3076
- "max_tokens": llm_defaults.max_tokens,
3077
- "is_backup": False,
3078
- })
3048
+ fallback_model = None
3049
+ for me in self.core.config.models_library:
3050
+ if getattr(me, 'is_global_fallback', True) and me.enabled:
3051
+ fallback_model = me
3052
+ break
3053
+ if fallback_model:
3054
+ chain.append({
3055
+ "id": fallback_model.id,
3056
+ "name": fallback_model.name,
3057
+ "provider": fallback_model.provider or llm_defaults.provider,
3058
+ "api_type": getattr(fallback_model, 'api_type', '') or llm_defaults.api_type,
3059
+ "model": fallback_model.model or fallback_model.id,
3060
+ "base_url": fallback_model.base_url or llm_defaults.base_url,
3061
+ "api_key": fallback_model.api_key or llm_defaults.api_key,
3062
+ "temperature": fallback_model.temperature if fallback_model.temperature is not None else llm_defaults.temperature,
3063
+ "max_tokens": fallback_model.max_tokens if fallback_model.max_tokens else llm_defaults.max_tokens,
3064
+ "is_backup": False,
3065
+ })
3066
+ else:
3067
+ # 兜底到全局默认 LLM 配置
3068
+ chain.append({
3069
+ "id": "default",
3070
+ "name": llm_defaults.model,
3071
+ "provider": llm_defaults.provider,
3072
+ "api_type": llm_defaults.api_type,
3073
+ "model": llm_defaults.model,
3074
+ "base_url": llm_defaults.base_url,
3075
+ "api_key": llm_defaults.api_key,
3076
+ "temperature": llm_defaults.temperature,
3077
+ "max_tokens": llm_defaults.max_tokens,
3078
+ "is_backup": False,
3079
+ })
3079
3080
 
3080
3081
  # 备用模型列表
3081
3082
  backup_ids = agent_cfg.get("backup_model_ids", [])
@@ -3153,6 +3154,11 @@ class ApiServer:
3153
3154
  # 标记执行模式(传递给 MainAgent 用于增强 system prompt)
3154
3155
  if self.core.main_agent:
3155
3156
  self.core.main_agent._chat_mode = chat_mode
3157
+ # 设置 Agent 专属知识库目录
3158
+ if agent_path and self.core.main_agent and self.core.main_agent.context_builder:
3159
+ agent_kb_dir = self._get_agent_knowledge_dir(agent_path)
3160
+ if agent_kb_dir.exists() and any(agent_kb_dir.iterdir()):
3161
+ self.core.main_agent.context_builder.agent_knowledge_dir = str(agent_kb_dir)
3156
3162
 
3157
3163
  try:
3158
3164
  response = await self.core.process_message(message, session_id)
@@ -3161,6 +3167,8 @@ class ApiServer:
3161
3167
  self.core.main_agent._agent_override_prompt = None
3162
3168
  self.core.main_agent._agent_override_path = None
3163
3169
  self.core.main_agent._chat_mode = ""
3170
+ if self.core.main_agent.context_builder:
3171
+ self.core.main_agent.context_builder.agent_knowledge_dir = None
3164
3172
 
3165
3173
  # 检查是否成功(如果回复包含错误标记)
3166
3174
  if response and not response.startswith("⚠️ LLM 调用失败") and not response.startswith("❌"):
@@ -3289,6 +3297,15 @@ class ApiServer:
3289
3297
  _original_exec_mode = agent.executor.execution_mode
3290
3298
  agent.executor.set_execution_mode(_exec_mode)
3291
3299
 
3300
+ # ── 设置 Agent 专属知识库目录(优先于组织知识库)──
3301
+ if agent_path and agent.context_builder:
3302
+ agent_kb_dir = self._get_agent_knowledge_dir(agent_path)
3303
+ if agent_kb_dir.exists() and any(agent_kb_dir.iterdir()):
3304
+ agent.context_builder.agent_knowledge_dir = str(agent_kb_dir)
3305
+ logger.debug(f"[{session_id}] 使用 Agent 专属知识库: {agent_kb_dir}")
3306
+ else:
3307
+ agent.context_builder.agent_knowledge_dir = None
3308
+
3292
3309
  # Clear execution events from previous runs
3293
3310
  agent.clear_execution_events()
3294
3311
 
@@ -3370,6 +3387,9 @@ class ApiServer:
3370
3387
  # 恢复执行引擎原始模式(防止影响后续 Agent 请求)
3371
3388
  if _original_exec_mode is not None and agent.executor:
3372
3389
  agent.executor.set_execution_mode(_original_exec_mode)
3390
+ # 清理 Agent 专属知识库目录设置(防止影响其他 Agent 请求)
3391
+ if agent.context_builder:
3392
+ agent.context_builder.agent_knowledge_dir = None
3373
3393
 
3374
3394
  # V2 结束后:如果 task_list_store 中有任务,确保最终推送一次
3375
3395
  if chat_mode == "exec" and session_id in self._task_list_store:
@@ -304,6 +304,7 @@ function initChat() {
304
304
  // Enable/disable send button
305
305
  document.getElementById('userInput').addEventListener('input', function() {
306
306
  document.getElementById('sendBtn').disabled = !this.value.trim();
307
+ saveDraft();
307
308
  });
308
309
  // Load task plan if in exec mode (collapsed by default)
309
310
  if (state.chatMode === 'exec') {
@@ -1182,6 +1183,7 @@ async function selectAgent(agentPath) {
1182
1183
  // 如果 loadSessions 已经 auto-selected 了 session,UI 已由 selectSession 设置好,不再覆盖
1183
1184
 
1184
1185
  document.getElementById('userInput').focus();
1186
+ loadDraft();
1185
1187
  // Reload task plan if in exec mode
1186
1188
  if (state.chatMode === 'exec') loadTaskPlan();
1187
1189
  // Reset escalation and update exec mode UI
@@ -1668,6 +1670,7 @@ function newChat() {
1668
1670
  updateSidebarAgentIndicator();
1669
1671
  const userInput = document.getElementById('userInput');
1670
1672
  if (userInput) userInput.focus();
1673
+ loadDraft();
1671
1674
  // 移动端:新建会话后自动收起侧边栏
1672
1675
  if (isMobile()) closeMobileSidebar();
1673
1676
  }
@@ -1804,6 +1807,7 @@ async function selectSession(id) {
1804
1807
  }
1805
1808
  } catch (_) {}
1806
1809
  document.getElementById('userInput').focus();
1810
+ loadDraft();
1807
1811
  if (isMobile()) closeMobileSidebar();
1808
1812
  }
1809
1813
 
@@ -3,7 +3,36 @@
3
3
  // ── 负责消息发送、SSE 流式处理、大文本检测与分段、
4
4
  // 消息注入、执行进度轮询、输入处理等核心流程 ──
5
5
  // ══════════════════════════════════════════════════════
6
- //
6
+
7
+ // ── 输入框草稿持久化(按 agent + session 维度保存,刷新页面不丢失) ──
8
+ var _draftTimer = null;
9
+ function _draftKey() {
10
+ return 'myagent_draft_' + (state.activeAgent || 'default') + '_' + (state.activeSessionId || '__new__');
11
+ }
12
+ function saveDraft() {
13
+ if (_draftTimer) clearTimeout(_draftTimer);
14
+ _draftTimer = setTimeout(function() {
15
+ var input = document.getElementById('userInput');
16
+ if (!input) return;
17
+ var val = input.value;
18
+ if (val) { localStorage.setItem(_draftKey(), val); }
19
+ else { localStorage.removeItem(_draftKey()); }
20
+ }, 300);
21
+ }
22
+ function loadDraft() {
23
+ var input = document.getElementById('userInput');
24
+ if (!input) return;
25
+ var val = localStorage.getItem(_draftKey());
26
+ input.value = val || '';
27
+ input.style.height = 'auto';
28
+ if (input.value) autoResize(input);
29
+ document.getElementById('sendBtn').disabled = !input.value.trim();
30
+ }
31
+ function clearDraft() {
32
+ localStorage.removeItem(_draftKey());
33
+ }
34
+
35
+
7
36
  // 依赖的全局对象(由 chat_main.js 提供):
8
37
  // state, api(), toast(), escapeHtml(), renderMarkdown(),
9
38
  // renderMessages(), scrollToBottom(), formatSessionName(),
@@ -1145,6 +1174,7 @@ async function sendMessage() {
1145
1174
  input.value = '';
1146
1175
  input.style.height = 'auto';
1147
1176
  document.getElementById('sendBtn').disabled = true;
1177
+ clearDraft();
1148
1178
 
1149
1179
  // Show typing
1150
1180
  state.isGenerating = true;
@@ -1695,6 +1725,7 @@ async function handleInjectChoice(choice) {
1695
1725
  const input = document.getElementById('userInput');
1696
1726
  input.value = '';
1697
1727
  input.style.height = 'auto';
1728
+ clearDraft();
1698
1729
 
1699
1730
  try {
1700
1731
  const rawSid = state.activeSessionId ? state.activeSessionId.replace(`${state.activeAgent}_`, '') : 'web_default';
@@ -610,9 +610,7 @@ async function sendGroupChat() {
610
610
  input.value = '';
611
611
  input.style.height = 'auto';
612
612
  document.getElementById('sendBtn').disabled = true;
613
-
614
- // Show typing
615
- state.isGenerating = true;
613
+ clearDraft();
616
614
  showTypingIndicator();
617
615
  document.getElementById('sendBtn').style.display = 'none';
618
616
  document.getElementById('stopBtn').style.display = '';