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.
- package/agents/__pycache__/main_agent.cpython-312.pyc +0 -0
- package/agents/__pycache__/memory_agent.cpython-312.pyc +0 -0
- package/agents/main_agent.py +3 -1
- package/config.py +1 -0
- package/core/__pycache__/context_builder.cpython-312.pyc +0 -0
- package/core/__pycache__/output_parser.cpython-312.pyc +0 -0
- package/core/context_builder.py +34 -16
- package/memory/__pycache__/manager.cpython-312.pyc +0 -0
- package/package.json +1 -1
- package/skills/__pycache__/browser_skill.cpython-312.pyc +0 -0
- package/skills/__pycache__/file_skill.cpython-312.pyc +0 -0
- package/skills/__pycache__/registry.cpython-312.pyc +0 -0
- package/web/__pycache__/api_server.cpython-312.pyc +0 -0
- package/web/api_server.py +95 -75
- package/web/ui/chat/chat_main.js +4 -0
- package/web/ui/chat/flow_engine.js +32 -1
- package/web/ui/chat/groupchat.js +1 -3
- package/web/ui/index.html +14 -102
- package/skills/ASR/LICENSE.txt +0 -21
- package/skills/ASR/SKILL.md +0 -580
- package/skills/ASR/scripts/asr.ts +0 -27
- package/skills/LLM/LICENSE.txt +0 -21
- package/skills/LLM/SKILL.md +0 -856
- package/skills/LLM/scripts/chat.ts +0 -32
- package/skills/TTS/LICENSE.txt +0 -21
- package/skills/TTS/SKILL.md +0 -735
- package/skills/TTS/scripts/tts.ts +0 -25
- package/skills/VLM/LICENSE.txt +0 -21
- package/skills/VLM/SKILL.md +0 -621
- package/skills/VLM/scripts/vlm.ts +0 -57
- package/skills/agent-browser/SKILL.md +0 -327
- package/skills/ai-news-collectors/SKILL.md +0 -157
- package/skills/ai-news-collectors/_meta.json +0 -6
- package/skills/ai-news-collectors/references/sources.md +0 -128
- package/skills/aminer-open-academic/SKILL.md +0 -312
- package/skills/aminer-open-academic/_meta.json +0 -6
- package/skills/aminer-open-academic/evals/evals.json +0 -46
- package/skills/aminer-open-academic/references/api-catalog.md +0 -1032
- package/skills/aminer-open-academic/scripts/aminer_client.py +0 -875
- package/skills/auto-target-tracker/SKILL.md +0 -316
- package/skills/charts/LICENSE.txt +0 -13
- package/skills/charts/SKILL.md +0 -427
- package/skills/charts/references/_rules.md +0 -49
- package/skills/charts/references/d3.md +0 -199
- package/skills/charts/references/echarts.md +0 -651
- package/skills/charts/references/matplotlib.md +0 -617
- package/skills/charts/references/mermaid.md +0 -797
- package/skills/charts/references/mindmap-css.md +0 -911
- package/skills/charts/references/playwright-css.md +0 -801
- package/skills/charts/references/radial-grid.md +0 -576
- package/skills/charts/references/seaborn.md +0 -324
- package/skills/charts/setup.sh +0 -228
- package/skills/coding-agent/SKILL.md +0 -119
- package/skills/coding-agent/_meta.json +0 -6
- package/skills/coding-agent/criteria.md +0 -48
- package/skills/coding-agent/execution.md +0 -42
- package/skills/coding-agent/memory-template.md +0 -38
- package/skills/coding-agent/planning.md +0 -31
- package/skills/coding-agent/state.md +0 -60
- package/skills/coding-agent/verification.md +0 -39
- package/skills/contentanalysis/ExtractWisdom/SKILL.md +0 -226
- package/skills/contentanalysis/ExtractWisdom/Workflows/Extract.md +0 -60
- package/skills/contentanalysis/SKILL.md +0 -14
- package/skills/docx/CHANGELOG.md +0 -85
- package/skills/docx/LICENSE.txt +0 -13
- package/skills/docx/SKILL.md +0 -200
- package/skills/docx/docx-js.md +0 -681
- package/skills/docx/ooxml/schemas/ISO-IEC29500-4_2016/dml-chart.xsd +0 -1499
- package/skills/docx/ooxml/schemas/ISO-IEC29500-4_2016/dml-chartDrawing.xsd +0 -146
- package/skills/docx/ooxml/schemas/ISO-IEC29500-4_2016/dml-diagram.xsd +0 -1085
- package/skills/docx/ooxml/schemas/ISO-IEC29500-4_2016/dml-lockedCanvas.xsd +0 -11
- package/skills/docx/ooxml/schemas/ISO-IEC29500-4_2016/dml-main.xsd +0 -3081
- package/skills/docx/ooxml/schemas/ISO-IEC29500-4_2016/dml-picture.xsd +0 -23
- package/skills/docx/ooxml/schemas/ISO-IEC29500-4_2016/dml-spreadsheetDrawing.xsd +0 -185
- package/skills/docx/ooxml/schemas/ISO-IEC29500-4_2016/dml-wordprocessingDrawing.xsd +0 -287
- package/skills/docx/ooxml/schemas/ISO-IEC29500-4_2016/pml.xsd +0 -1676
- package/skills/docx/ooxml/schemas/ISO-IEC29500-4_2016/shared-additionalCharacteristics.xsd +0 -28
- package/skills/docx/ooxml/schemas/ISO-IEC29500-4_2016/shared-bibliography.xsd +0 -144
- package/skills/docx/ooxml/schemas/ISO-IEC29500-4_2016/shared-commonSimpleTypes.xsd +0 -174
- package/skills/docx/ooxml/schemas/ISO-IEC29500-4_2016/shared-customXmlDataProperties.xsd +0 -25
- package/skills/docx/ooxml/schemas/ISO-IEC29500-4_2016/shared-customXmlSchemaProperties.xsd +0 -18
- package/skills/docx/ooxml/schemas/ISO-IEC29500-4_2016/shared-documentPropertiesCustom.xsd +0 -59
- package/skills/docx/ooxml/schemas/ISO-IEC29500-4_2016/shared-documentPropertiesExtended.xsd +0 -56
- package/skills/docx/ooxml/schemas/ISO-IEC29500-4_2016/shared-documentPropertiesVariantTypes.xsd +0 -195
- package/skills/docx/ooxml/schemas/ISO-IEC29500-4_2016/shared-math.xsd +0 -582
- package/skills/docx/ooxml/schemas/ISO-IEC29500-4_2016/shared-relationshipReference.xsd +0 -25
- package/skills/docx/ooxml/schemas/ISO-IEC29500-4_2016/sml.xsd +0 -4439
- package/skills/docx/ooxml/schemas/ISO-IEC29500-4_2016/vml-main.xsd +0 -570
- package/skills/docx/ooxml/schemas/ISO-IEC29500-4_2016/vml-officeDrawing.xsd +0 -509
- package/skills/docx/ooxml/schemas/ISO-IEC29500-4_2016/vml-presentationDrawing.xsd +0 -12
- package/skills/docx/ooxml/schemas/ISO-IEC29500-4_2016/vml-spreadsheetDrawing.xsd +0 -108
- package/skills/docx/ooxml/schemas/ISO-IEC29500-4_2016/vml-wordprocessingDrawing.xsd +0 -96
- package/skills/docx/ooxml/schemas/ISO-IEC29500-4_2016/wml.xsd +0 -3646
- package/skills/docx/ooxml/schemas/ISO-IEC29500-4_2016/xml.xsd +0 -116
- package/skills/docx/ooxml/schemas/ecma/fouth-edition/opc-contentTypes.xsd +0 -42
- package/skills/docx/ooxml/schemas/ecma/fouth-edition/opc-coreProperties.xsd +0 -50
- package/skills/docx/ooxml/schemas/ecma/fouth-edition/opc-digSig.xsd +0 -49
- package/skills/docx/ooxml/schemas/ecma/fouth-edition/opc-relationships.xsd +0 -33
- package/skills/docx/ooxml/schemas/mce/mc.xsd +0 -75
- package/skills/docx/ooxml/schemas/microsoft/wml-2010.xsd +0 -560
- package/skills/docx/ooxml/schemas/microsoft/wml-2012.xsd +0 -67
- package/skills/docx/ooxml/schemas/microsoft/wml-2018.xsd +0 -14
- package/skills/docx/ooxml/schemas/microsoft/wml-cex-2018.xsd +0 -20
- package/skills/docx/ooxml/schemas/microsoft/wml-cid-2016.xsd +0 -13
- package/skills/docx/ooxml/schemas/microsoft/wml-sdtdatahash-2020.xsd +0 -4
- package/skills/docx/ooxml/schemas/microsoft/wml-symex-2015.xsd +0 -8
- package/skills/docx/ooxml/scripts/pack.py +0 -159
- package/skills/docx/ooxml/scripts/unpack.py +0 -29
- package/skills/docx/ooxml/scripts/validate.py +0 -69
- package/skills/docx/ooxml/scripts/validation/__init__.py +0 -15
- package/skills/docx/ooxml/scripts/validation/base.py +0 -951
- package/skills/docx/ooxml/scripts/validation/docx.py +0 -274
- package/skills/docx/ooxml/scripts/validation/pptx.py +0 -315
- package/skills/docx/ooxml/scripts/validation/redlining.py +0 -279
- package/skills/docx/ooxml.md +0 -615
- package/skills/docx/references/chart-templates.md +0 -386
- package/skills/docx/references/common-rules.md +0 -419
- package/skills/docx/references/decorations.md +0 -538
- package/skills/docx/references/design-system.md +0 -1797
- package/skills/docx/references/docx-js-advanced.md +0 -257
- package/skills/docx/references/docx-js-core.md +0 -333
- package/skills/docx/references/faq.md +0 -323
- package/skills/docx/references/math-formulas.md +0 -276
- package/skills/docx/references/ooxml.md +0 -222
- package/skills/docx/references/toc.md +0 -254
- package/skills/docx/routes/comment.md +0 -88
- package/skills/docx/routes/create.md +0 -207
- package/skills/docx/routes/edit.md +0 -115
- package/skills/docx/routes/format.md +0 -120
- package/skills/docx/routes/read.md +0 -114
- package/skills/docx/scenes/academic.md +0 -783
- package/skills/docx/scenes/contract.md +0 -463
- package/skills/docx/scenes/copywriting.md +0 -139
- package/skills/docx/scenes/exam.md +0 -698
- package/skills/docx/scenes/official-doc.md +0 -411
- package/skills/docx/scenes/report.md +0 -340
- package/skills/docx/scenes/resume.md +0 -534
- package/skills/docx/scripts/__init__.py +0 -1
- package/skills/docx/scripts/add_toc_placeholders.py +0 -749
- package/skills/docx/scripts/document.py +0 -1333
- package/skills/docx/scripts/postcheck.py +0 -807
- package/skills/docx/scripts/templates/comments.xml +0 -3
- package/skills/docx/scripts/templates/commentsExtended.xml +0 -3
- package/skills/docx/scripts/templates/commentsExtensible.xml +0 -3
- package/skills/docx/scripts/templates/commentsIds.xml +0 -3
- package/skills/docx/scripts/templates/people.xml +0 -3
- package/skills/docx/scripts/utilities.py +0 -374
- package/skills/docx/setup.sh +0 -177
- package/skills/finance/Finance_API_Doc.md +0 -445
- package/skills/finance/SKILL.md +0 -53
- package/skills/gift-evaluator/SKILL.md +0 -83
- package/skills/gift-evaluator/html_tools.py +0 -268
- package/skills/image-edit/LICENSE.txt +0 -21
- package/skills/image-edit/SKILL.md +0 -896
- package/skills/image-edit/scripts/image-edit.ts +0 -36
- package/skills/image-generation/LICENSE.txt +0 -21
- package/skills/image-generation/SKILL.md +0 -583
- package/skills/image-generation/scripts/image-generation.ts +0 -28
- package/skills/market-research-reports/SKILL.md +0 -901
- package/skills/market-research-reports/assets/FORMATTING_GUIDE.md +0 -428
- package/skills/market-research-reports/assets/market_report_template.tex +0 -1380
- package/skills/market-research-reports/assets/market_research.sty +0 -564
- package/skills/market-research-reports/references/data_analysis_patterns.md +0 -548
- package/skills/market-research-reports/references/report_structure_guide.md +0 -999
- package/skills/market-research-reports/references/visual_generation_guide.md +0 -1077
- package/skills/market-research-reports/scripts/generate_market_visuals.py +0 -529
- package/skills/marketing-mode/README.md +0 -49
- package/skills/marketing-mode/SKILL.md +0 -677
- package/skills/marketing-mode/_meta.json +0 -6
- package/skills/marketing-mode/mode-prompt.md +0 -39
- package/skills/marketing-mode/skill.json +0 -20
- package/skills/pdf/LICENSE.txt +0 -13
- package/skills/pdf/SKILL.md +0 -927
- package/skills/pdf/briefs/academic.md +0 -1049
- package/skills/pdf/briefs/creative.md +0 -770
- package/skills/pdf/briefs/poster.md +0 -702
- package/skills/pdf/briefs/process-advanced.md +0 -284
- package/skills/pdf/briefs/process.md +0 -319
- package/skills/pdf/briefs/report.md +0 -1657
- package/skills/pdf/configs/components.md +0 -153
- package/skills/pdf/configs/fonts.md +0 -93
- package/skills/pdf/configs/visual_framework.md +0 -263
- package/skills/pdf/forms.md +0 -205
- package/skills/pdf/reference.md +0 -765
- package/skills/pdf/references/resume-academic.tex +0 -130
- package/skills/pdf/references/resume-altacv.tex +0 -190
- package/skills/pdf/scripts/add_zai_metadata.py +0 -172
- package/skills/pdf/scripts/check_bounding_boxes.py +0 -70
- package/skills/pdf/scripts/check_bounding_boxes_test.py +0 -226
- package/skills/pdf/scripts/check_fillable_fields.py +0 -12
- package/skills/pdf/scripts/convert_pdf_to_images.py +0 -35
- package/skills/pdf/scripts/cover_validate.js +0 -367
- package/skills/pdf/scripts/create_validation_image.py +0 -41
- package/skills/pdf/scripts/design_engine.py +0 -2816
- package/skills/pdf/scripts/extract_form_field_info.py +0 -152
- package/skills/pdf/scripts/fill_fillable_fields.py +0 -114
- package/skills/pdf/scripts/fill_pdf_form_with_annotations.py +0 -108
- package/skills/pdf/scripts/html2pdf-next.js +0 -754
- package/skills/pdf/scripts/html2poster.js +0 -256
- package/skills/pdf/scripts/pdf.py +0 -2959
- package/skills/pdf/scripts/pdf_qa.py +0 -901
- package/skills/pdf/scripts/poster_validate.py +0 -1337
- package/skills/pdf/scripts/sanitize_code.py +0 -110
- package/skills/pdf/scripts/setup.sh +0 -269
- package/skills/pdf/scripts/tectonic +0 -0
- package/skills/pdf/scripts/toc_validate.py +0 -2075
- package/skills/pdf/typesetting/charts.md +0 -320
- package/skills/pdf/typesetting/cover-backgrounds.md +0 -384
- package/skills/pdf/typesetting/cover.md +0 -1442
- package/skills/pdf/typesetting/fill-engine.md +0 -527
- package/skills/pdf/typesetting/geometry.md +0 -142
- package/skills/pdf/typesetting/overflow.md +0 -630
- package/skills/pdf/typesetting/pagination.md +0 -367
- package/skills/pdf/typesetting/palette.md +0 -217
- package/skills/pdf/typesetting/typography.md +0 -20
- package/skills/podcast-generate/LICENSE.txt +0 -21
- package/skills/podcast-generate/SKILL.md +0 -198
- package/skills/podcast-generate/generate.ts +0 -661
- package/skills/podcast-generate/package.json +0 -30
- package/skills/podcast-generate/readme.md +0 -177
- package/skills/podcast-generate/test_data/segments.jsonl +0 -3
- package/skills/podcast-generate/tsconfig.json +0 -26
- package/skills/ppt/LICENSE.txt +0 -13
- package/skills/ppt/SKILL.md +0 -436
- package/skills/ppt/beamer.md +0 -1457
- package/skills/ppt/components.md +0 -1634
- package/skills/ppt/data-viz-components.md +0 -529
- package/skills/ppt/design-system.md +0 -206
- package/skills/ppt/html2pptx.md +0 -394
- package/skills/ppt/ooxml/schemas/ISO-IEC29500-4_2016/dml-chart.xsd +0 -1499
- package/skills/ppt/ooxml/schemas/ISO-IEC29500-4_2016/dml-chartDrawing.xsd +0 -146
- package/skills/ppt/ooxml/schemas/ISO-IEC29500-4_2016/dml-diagram.xsd +0 -1085
- package/skills/ppt/ooxml/schemas/ISO-IEC29500-4_2016/dml-lockedCanvas.xsd +0 -11
- package/skills/ppt/ooxml/schemas/ISO-IEC29500-4_2016/dml-main.xsd +0 -3081
- package/skills/ppt/ooxml/schemas/ISO-IEC29500-4_2016/dml-picture.xsd +0 -23
- package/skills/ppt/ooxml/schemas/ISO-IEC29500-4_2016/dml-spreadsheetDrawing.xsd +0 -185
- package/skills/ppt/ooxml/schemas/ISO-IEC29500-4_2016/dml-wordprocessingDrawing.xsd +0 -287
- package/skills/ppt/ooxml/schemas/ISO-IEC29500-4_2016/pml.xsd +0 -1676
- package/skills/ppt/ooxml/schemas/ISO-IEC29500-4_2016/shared-additionalCharacteristics.xsd +0 -28
- package/skills/ppt/ooxml/schemas/ISO-IEC29500-4_2016/shared-bibliography.xsd +0 -144
- package/skills/ppt/ooxml/schemas/ISO-IEC29500-4_2016/shared-commonSimpleTypes.xsd +0 -174
- package/skills/ppt/ooxml/schemas/ISO-IEC29500-4_2016/shared-customXmlDataProperties.xsd +0 -25
- package/skills/ppt/ooxml/schemas/ISO-IEC29500-4_2016/shared-customXmlSchemaProperties.xsd +0 -18
- package/skills/ppt/ooxml/schemas/ISO-IEC29500-4_2016/shared-documentPropertiesCustom.xsd +0 -59
- package/skills/ppt/ooxml/schemas/ISO-IEC29500-4_2016/shared-documentPropertiesExtended.xsd +0 -56
- package/skills/ppt/ooxml/schemas/ISO-IEC29500-4_2016/shared-documentPropertiesVariantTypes.xsd +0 -195
- package/skills/ppt/ooxml/schemas/ISO-IEC29500-4_2016/shared-math.xsd +0 -582
- package/skills/ppt/ooxml/schemas/ISO-IEC29500-4_2016/shared-relationshipReference.xsd +0 -25
- package/skills/ppt/ooxml/schemas/ISO-IEC29500-4_2016/sml.xsd +0 -4439
- package/skills/ppt/ooxml/schemas/ISO-IEC29500-4_2016/vml-main.xsd +0 -570
- package/skills/ppt/ooxml/schemas/ISO-IEC29500-4_2016/vml-officeDrawing.xsd +0 -509
- package/skills/ppt/ooxml/schemas/ISO-IEC29500-4_2016/vml-presentationDrawing.xsd +0 -12
- package/skills/ppt/ooxml/schemas/ISO-IEC29500-4_2016/vml-spreadsheetDrawing.xsd +0 -108
- package/skills/ppt/ooxml/schemas/ISO-IEC29500-4_2016/vml-wordprocessingDrawing.xsd +0 -96
- package/skills/ppt/ooxml/schemas/ISO-IEC29500-4_2016/wml.xsd +0 -3646
- package/skills/ppt/ooxml/schemas/ISO-IEC29500-4_2016/xml.xsd +0 -116
- package/skills/ppt/ooxml/schemas/ecma/fouth-edition/opc-contentTypes.xsd +0 -42
- package/skills/ppt/ooxml/schemas/ecma/fouth-edition/opc-coreProperties.xsd +0 -50
- package/skills/ppt/ooxml/schemas/ecma/fouth-edition/opc-digSig.xsd +0 -49
- package/skills/ppt/ooxml/schemas/ecma/fouth-edition/opc-relationships.xsd +0 -33
- package/skills/ppt/ooxml/schemas/mce/mc.xsd +0 -75
- package/skills/ppt/ooxml/schemas/microsoft/wml-2010.xsd +0 -560
- package/skills/ppt/ooxml/schemas/microsoft/wml-2012.xsd +0 -67
- package/skills/ppt/ooxml/schemas/microsoft/wml-2018.xsd +0 -14
- package/skills/ppt/ooxml/schemas/microsoft/wml-cex-2018.xsd +0 -20
- package/skills/ppt/ooxml/schemas/microsoft/wml-cid-2016.xsd +0 -13
- package/skills/ppt/ooxml/schemas/microsoft/wml-sdtdatahash-2020.xsd +0 -4
- package/skills/ppt/ooxml/schemas/microsoft/wml-symex-2015.xsd +0 -8
- package/skills/ppt/ooxml/scripts/pack.py +0 -159
- package/skills/ppt/ooxml/scripts/unpack.py +0 -29
- package/skills/ppt/ooxml/scripts/validate.py +0 -69
- package/skills/ppt/ooxml/scripts/validation/__init__.py +0 -15
- package/skills/ppt/ooxml/scripts/validation/base.py +0 -951
- package/skills/ppt/ooxml/scripts/validation/docx.py +0 -274
- package/skills/ppt/ooxml/scripts/validation/pptx.py +0 -315
- package/skills/ppt/ooxml/scripts/validation/redlining.py +0 -279
- package/skills/ppt/ooxml.md +0 -427
- package/skills/ppt/references/beamer.md +0 -721
- package/skills/ppt/references/latex.md +0 -342
- package/skills/ppt/references/paper-navbar.tex +0 -73
- package/skills/ppt/references/progress-navbar.tex +0 -151
- package/skills/ppt/scripts/html2pptx.js +0 -1329
- package/skills/ppt/scripts/inventory.py +0 -512
- package/skills/ppt/scripts/pdf.py +0 -2959
- package/skills/ppt/scripts/rearrange.py +0 -135
- package/skills/ppt/scripts/replace.py +0 -231
- package/skills/ppt/scripts/tectonic +0 -0
- package/skills/ppt/scripts/thumbnail.py +0 -352
- package/skills/ppt/setup.sh +0 -197
- package/skills/ppt/themes.md +0 -506
- package/skills/qingyan-research/SKILL.md +0 -294
- package/skills/qingyan-research/generate_html.py +0 -33
- package/skills/seo-content-writer/SKILL.md +0 -625
- package/skills/seo-content-writer/_meta.json +0 -6
- package/skills/seo-content-writer/references/content-structure-templates.md +0 -875
- package/skills/seo-content-writer/references/title-formulas.md +0 -339
- package/skills/skill-creator/LICENSE.txt +0 -202
- package/skills/skill-creator/SKILL.md +0 -485
- package/skills/skill-creator/agents/analyzer.md +0 -274
- package/skills/skill-creator/agents/comparator.md +0 -202
- package/skills/skill-creator/agents/grader.md +0 -223
- package/skills/skill-creator/assets/eval_review.html +0 -146
- package/skills/skill-creator/eval-viewer/generate_review.py +0 -471
- package/skills/skill-creator/eval-viewer/viewer.html +0 -1325
- package/skills/skill-creator/references/schemas.md +0 -430
- package/skills/skill-creator/scripts/__init__.py +0 -0
- package/skills/skill-creator/scripts/aggregate_benchmark.py +0 -401
- package/skills/skill-creator/scripts/generate_report.py +0 -326
- package/skills/skill-creator/scripts/improve_description.py +0 -236
- package/skills/skill-creator/scripts/package_skill.py +0 -136
- package/skills/skill-creator/scripts/quick_validate.py +0 -103
- package/skills/skill-creator/scripts/run_eval.py +0 -310
- package/skills/skill-creator/scripts/run_loop.py +0 -328
- package/skills/skill-creator/scripts/utils.py +0 -47
- package/skills/stock-analysis-skill/SKILL.md +0 -156
- package/skills/stock-analysis-skill/package.json +0 -21
- package/skills/stock-analysis-skill/src/analyzer.ts +0 -264
- package/skills/stock-analysis-skill/src/dataFetcher.ts +0 -130
- package/skills/stock-analysis-skill/src/dividend.ts +0 -226
- package/skills/stock-analysis-skill/src/index.ts +0 -327
- package/skills/stock-analysis-skill/src/rumorScanner.ts +0 -200
- package/skills/stock-analysis-skill/src/types.ts +0 -167
- package/skills/stock-analysis-skill/src/watchlist.ts +0 -308
- package/skills/stock-analysis-skill/tsconfig.json +0 -15
- package/skills/storyboard-manager/SKILL.md +0 -532
- package/skills/storyboard-manager/index.js +0 -9
- package/skills/storyboard-manager/package.json +0 -11
- package/skills/storyboard-manager/references/character_development.md +0 -232
- package/skills/storyboard-manager/references/story_structures.md +0 -148
- package/skills/storyboard-manager/scripts/consistency_checker.py +0 -391
- package/skills/storyboard-manager/scripts/timeline_tracker.py +0 -352
- package/skills/ui-ux-pro-max/SKILL.md +0 -43
- package/skills/ui-ux-pro-max/_meta.json +0 -6
- package/skills/ui-ux-pro-max/assets/data/charts.csv +0 -26
- package/skills/ui-ux-pro-max/assets/data/colors.csv +0 -97
- package/skills/ui-ux-pro-max/assets/data/icons.csv +0 -101
- package/skills/ui-ux-pro-max/assets/data/landing.csv +0 -31
- package/skills/ui-ux-pro-max/assets/data/products.csv +0 -97
- package/skills/ui-ux-pro-max/assets/data/react-performance.csv +0 -45
- package/skills/ui-ux-pro-max/assets/data/stacks/astro.csv +0 -54
- package/skills/ui-ux-pro-max/assets/data/stacks/flutter.csv +0 -53
- package/skills/ui-ux-pro-max/assets/data/stacks/html-tailwind.csv +0 -56
- package/skills/ui-ux-pro-max/assets/data/stacks/jetpack-compose.csv +0 -53
- package/skills/ui-ux-pro-max/assets/data/stacks/nextjs.csv +0 -53
- package/skills/ui-ux-pro-max/assets/data/stacks/nuxt-ui.csv +0 -51
- package/skills/ui-ux-pro-max/assets/data/stacks/nuxtjs.csv +0 -59
- package/skills/ui-ux-pro-max/assets/data/stacks/react-native.csv +0 -52
- package/skills/ui-ux-pro-max/assets/data/stacks/react.csv +0 -54
- package/skills/ui-ux-pro-max/assets/data/stacks/shadcn.csv +0 -61
- package/skills/ui-ux-pro-max/assets/data/stacks/svelte.csv +0 -54
- package/skills/ui-ux-pro-max/assets/data/stacks/swiftui.csv +0 -51
- package/skills/ui-ux-pro-max/assets/data/stacks/vue.csv +0 -50
- package/skills/ui-ux-pro-max/assets/data/styles.csv +0 -68
- package/skills/ui-ux-pro-max/assets/data/typography.csv +0 -58
- package/skills/ui-ux-pro-max/assets/data/ui-reasoning.csv +0 -101
- package/skills/ui-ux-pro-max/assets/data/ux-guidelines.csv +0 -100
- package/skills/ui-ux-pro-max/assets/data/web-interface.csv +0 -31
- package/skills/ui-ux-pro-max/references/upstream-README.md +0 -488
- package/skills/ui-ux-pro-max/references/upstream-skill-content.md +0 -288
- package/skills/ui-ux-pro-max/scripts/__init__.py +0 -0
- package/skills/ui-ux-pro-max/scripts/core.py +0 -253
- package/skills/ui-ux-pro-max/scripts/design_system.py +0 -1071
- package/skills/ui-ux-pro-max/scripts/search.py +0 -111
- package/skills/video-generation/LICENSE.txt +0 -21
- package/skills/video-generation/SKILL.md +0 -1082
- package/skills/video-generation/scripts/video.ts +0 -168
- package/skills/web-reader/LICENSE.txt +0 -21
- package/skills/web-reader/SKILL.md +0 -1140
- package/skills/web-reader/scripts/web-reader.ts +0 -37
- package/skills/web-search/LICENSE.txt +0 -21
- package/skills/web-search/SKILL.md +0 -912
- package/skills/web-search/scripts/web_search.ts +0 -44
- package/skills/web-shader-extractor/SKILL.md +0 -145
- package/skills/web-shader-extractor/references/config-extraction.md +0 -50
- package/skills/web-shader-extractor/references/encoded-definitions.md +0 -53
- package/skills/web-shader-extractor/references/extraction-workflow.md +0 -61
- package/skills/web-shader-extractor/references/porting-strategy.md +0 -164
- package/skills/web-shader-extractor/references/shader-injection.md +0 -126
- package/skills/web-shader-extractor/references/shaders-com.md +0 -190
- package/skills/web-shader-extractor/references/tech-signatures.md +0 -54
- package/skills/web-shader-extractor/references/tsl-extraction.md +0 -41
- package/skills/web-shader-extractor/references/unicorn-studio.md +0 -353
- package/skills/web-shader-extractor/scripts/fetch-rendered-dom.mjs +0 -153
- package/skills/web-shader-extractor/scripts/scan-bundle.sh +0 -76
- package/skills/writing-plans/SKILL.md +0 -113
- package/skills/writing-plans/_meta.json +0 -6
- package/skills/xlsx/LICENSE.txt +0 -13
- package/skills/xlsx/SKILL.md +0 -230
- package/skills/xlsx/engines/chart-templates.md +0 -167
- package/skills/xlsx/engines/chart.md +0 -87
- package/skills/xlsx/engines/design.md +0 -575
- package/skills/xlsx/engines/vba-templates.md +0 -435
- package/skills/xlsx/quality/pipeline.md +0 -196
- package/skills/xlsx/recalc.py +0 -178
- package/skills/xlsx/scenes/advanced.md +0 -271
- package/skills/xlsx/scenes/analyze-recipes.md +0 -234
- package/skills/xlsx/scenes/analyze.md +0 -95
- package/skills/xlsx/scenes/convert.md +0 -133
- package/skills/xlsx/scenes/create.md +0 -105
- package/skills/xlsx/scenes/edit-patterns.md +0 -222
- package/skills/xlsx/scenes/edit.md +0 -195
- package/skills/xlsx/scenes/finance.md +0 -318
- package/skills/xlsx/scenes/finance_lite.md +0 -192
- package/skills/xlsx/scenes/vba.md +0 -298
- package/skills/xlsx/setup.sh +0 -136
- package/skills/xlsx/templates/base.py +0 -632
- package/skills/xlsx/templates/palettes.py +0 -521
- package/skills/xlsx/xlsx.py +0 -1299
|
File without changes
|
|
File without changes
|
package/agents/main_agent.py
CHANGED
|
@@ -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
|
-
|
|
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
|
package/core/context_builder.py
CHANGED
|
@@ -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
|
-
|
|
252
|
-
|
|
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
|
-
|
|
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 "
|
|
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=
|
|
293
|
+
rag = KnowledgeRAG(kb_dir=kb_dir)
|
|
276
294
|
rag.build_index()
|
|
277
295
|
|
|
278
296
|
if rag.total_chunks == 0:
|
|
279
|
-
return "
|
|
297
|
+
return ""
|
|
280
298
|
|
|
281
|
-
results = rag.search(query, top_k=
|
|
299
|
+
results = rag.search(query, top_k=top_k)
|
|
282
300
|
|
|
283
301
|
if not results:
|
|
284
|
-
return "
|
|
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
|
|
301
|
-
return "
|
|
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
|
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 -
|
|
2598
|
-
print(f"handle_test_llm 被调用!", flush=True)
|
|
2597
|
+
"""POST /api/llm/test - 独立测试指定模型连接,不使用任何兜底/fallback逻辑"""
|
|
2599
2598
|
try:
|
|
2600
|
-
|
|
2601
|
-
|
|
2602
|
-
|
|
2603
|
-
|
|
2604
|
-
|
|
2605
|
-
|
|
2606
|
-
|
|
2607
|
-
|
|
2608
|
-
|
|
2609
|
-
|
|
2610
|
-
|
|
2611
|
-
|
|
2612
|
-
|
|
2613
|
-
|
|
2614
|
-
|
|
2615
|
-
|
|
2616
|
-
|
|
2617
|
-
|
|
2618
|
-
|
|
2619
|
-
|
|
2620
|
-
|
|
2621
|
-
|
|
2622
|
-
|
|
2623
|
-
|
|
2624
|
-
|
|
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
|
-
|
|
2645
|
-
|
|
2646
|
-
|
|
2647
|
-
|
|
2648
|
-
|
|
2649
|
-
|
|
2650
|
-
|
|
2651
|
-
|
|
2652
|
-
|
|
2653
|
-
|
|
2654
|
-
|
|
2655
|
-
|
|
2656
|
-
|
|
2657
|
-
|
|
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
|
-
#
|
|
3046
|
+
# 如果没有找到任何主模型配置,使用模型库中标记为全局兜底的模型
|
|
3066
3047
|
if not chain:
|
|
3067
|
-
|
|
3068
|
-
|
|
3069
|
-
|
|
3070
|
-
|
|
3071
|
-
|
|
3072
|
-
|
|
3073
|
-
|
|
3074
|
-
|
|
3075
|
-
|
|
3076
|
-
|
|
3077
|
-
|
|
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:
|
package/web/ui/chat/chat_main.js
CHANGED
|
@@ -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';
|
package/web/ui/chat/groupchat.js
CHANGED
|
@@ -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 = '';
|