myagent-ai 1.11.2 → 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/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/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 +76 -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/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
|
|
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", [])
|
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 = '';
|
package/web/ui/index.html
CHANGED
|
@@ -1120,47 +1120,10 @@ async function resetAgentPerms(name){
|
|
|
1120
1120
|
|
|
1121
1121
|
// ========== LLM ==========
|
|
1122
1122
|
async function renderLLM(){
|
|
1123
|
-
const [
|
|
1124
|
-
if(c.error){$('content').innerHTML='<div class="empty" style="color:var(--danger)">加载失败: '+escHtml(c.error)+'</div>';return}
|
|
1123
|
+
const [u,models]=await Promise.all([api('/api/llm/usage'),api('/api/models')]);
|
|
1125
1124
|
// 更新模型缓存
|
|
1126
1125
|
allModelsCache=Array.isArray(models)?models:[];
|
|
1127
|
-
|
|
1128
|
-
const apiTypeOpts=['openai-completions','openai-chat','anthropic','ollama'].map(t=>`<option value="${t}" ${c.api_type===t?'selected':''}>${t}</option>`).join('');
|
|
1129
|
-
const isCustomApiType=c.api_type&&!['openai-completions','openai-chat','anthropic','ollama'].includes(c.api_type);
|
|
1130
|
-
const inputModesArr=c.input_modes||['text'];
|
|
1131
|
-
const inputModesChecked=['text','image','video','audio'].map(m=>`<label style="display:inline-flex;align-items:center;gap:4px;margin-right:12px"><input type="checkbox" id="llmInputMode_${m}" value="${m}" ${inputModesArr.indexOf(m)>-1?'checked':''}>${m}</label>`).join('');
|
|
1132
|
-
let html=`<div class="card"><h3>全局模型配置</h3>
|
|
1133
|
-
<div class="form-row">
|
|
1134
|
-
<div class="form-group"><label>Provider</label><select id="llmProvider">${providerOpts}</select></div>
|
|
1135
|
-
<div class="form-group">
|
|
1136
|
-
<label>API 类型</label>
|
|
1137
|
-
<select id="llmApiTypeSelect" onchange="toggleApiTypeInput('llm')">
|
|
1138
|
-
${apiTypeOpts}
|
|
1139
|
-
<option value="custom" ${isCustomApiType?'selected':''}>custom (自定义)</option>
|
|
1140
|
-
</select>
|
|
1141
|
-
</div>
|
|
1142
|
-
</div>
|
|
1143
|
-
<div id="llmApiTypeCustomWrap" style="${isCustomApiType?'':'display:none'}" class="form-group">
|
|
1144
|
-
<label>自定义 API 类型</label>
|
|
1145
|
-
<input id="llmApiTypeCustom" value="${isCustomApiType?escHtml(c.api_type):''}" placeholder="输入自定义 API 类型">
|
|
1146
|
-
</div>
|
|
1147
|
-
<div class="form-group"><label>模型</label><input id="llmModel" value="${c.model||''}" placeholder="如 gpt-4o"></div>
|
|
1148
|
-
<div class="form-group"><label>Base URL</label><input id="llmUrl" value="${c.base_url||''}" placeholder="https://api.openai.com/v1"></div>
|
|
1149
|
-
<div class="form-group"><label>API Key</label><input id="llmKey" type="password" value="" placeholder="${c.api_key_set?'已配置(留空不修改)':'未配置'}"></div>
|
|
1150
|
-
<div class="form-row">
|
|
1151
|
-
<div class="form-group"><label>上下文窗口</label><input id="llmContextWindow" type="number" value="${c.context_window||128000}" placeholder="128000"></div>
|
|
1152
|
-
<div class="form-group"><label>最大输出</label><input id="llmMaxTokens" type="number" value="${c.max_tokens||4096}" placeholder="4096"></div>
|
|
1153
|
-
</div>
|
|
1154
|
-
<div class="form-row">
|
|
1155
|
-
<div class="form-group"><label>Temperature</label><input id="llmTemp" type="number" step="0.1" value="${c.temperature||0.7}" placeholder="0.1"></div>
|
|
1156
|
-
<div class="form-group" style="display:flex;align-items:center">
|
|
1157
|
-
<input id="llmReasoning" type="checkbox" ${c.reasoning?'checked':''} style="margin-right:6px"><label for="llmReasoning" style="margin:0">支持推理</label>
|
|
1158
|
-
</div>
|
|
1159
|
-
</div>
|
|
1160
|
-
<div class="form-group"><label>输入模式</label><div style="padding:8px 0">${inputModesChecked}</div></div>
|
|
1161
|
-
<div class="flex gap-8 mt-16"><button class="btn btn-primary" onclick="saveLLM()">保存配置</button><button class="btn btn-success" onclick="testLLM()" onmouseenter="showTestCode(event,'global')" onmouseleave="hideTestCode()">测试连接</button></div>
|
|
1162
|
-
<div id="testCodeTooltip" style="display:none;position:fixed;background:#1e1e1e;color:#d4d4d4;padding:12px;border-radius:8px;font-size:12px;font-family:Consolas,monospace;max-width:400px;z-index:9999;box-shadow:0 4px 12px rgba(0,0,0,0.3);border:1px solid #3c3c3c"><pre id="testCodeContent" style="margin:0;white-space:pre-wrap"></pre></div>
|
|
1163
|
-
</div>`;
|
|
1126
|
+
let html='';
|
|
1164
1127
|
// 用量统计
|
|
1165
1128
|
html+=`<div class="card"><h3>用量统计</h3><div class="grid" style="grid-template-columns:repeat(4,1fr)">
|
|
1166
1129
|
<div class="stat"><div class="label">调用次数</div><div class="value">${u.call_count||0}</div></div>
|
|
@@ -1179,11 +1142,12 @@ async function renderLLM(){
|
|
|
1179
1142
|
if(!modelList.length){
|
|
1180
1143
|
html+='<div class="empty">暂无自定义模型,点击上方按钮添加。</div>';
|
|
1181
1144
|
}else{
|
|
1182
|
-
html+='<table style="font-size:12px"><tr><th>ID</th><th>名称</th><th>Provider</th><th>模型</th><th>上下文</th><th>输入</th><th>推理</th><th>状态</th><th>操作</th></tr>';
|
|
1145
|
+
html+='<table style="font-size:12px"><tr><th>ID</th><th>名称</th><th>Provider</th><th>模型</th><th>上下文</th><th>输入</th><th>推理</th><th>兜底</th><th>状态</th><th>操作</th></tr>';
|
|
1183
1146
|
const providerColors={openai:'badge-green',anthropic:'badge-yellow',ollama:'badge-purple',zhipu:'badge-blue',custom:'badge-red',deepseek:'badge-blue',moonshot:'badge-purple',qwen:'badge-yellow',modelscope:'badge-purple'};
|
|
1184
1147
|
for(const m of modelList){
|
|
1185
1148
|
const badgeClass=providerColors[m.provider]||'badge-green';
|
|
1186
1149
|
const inputModes=m.input_modes?m.input_modes.join(','):'text';
|
|
1150
|
+
const isFallback=m.is_global_fallback!==false;
|
|
1187
1151
|
html+=`<tr>
|
|
1188
1152
|
<td><code>${escHtml(m.id)}</code></td>
|
|
1189
1153
|
<td>${escHtml(m.name||'')}</td>
|
|
@@ -1192,9 +1156,10 @@ async function renderLLM(){
|
|
|
1192
1156
|
<td>${(m.context_window||128000).toLocaleString()}</td>
|
|
1193
1157
|
<td>${escHtml(inputModes)}</td>
|
|
1194
1158
|
<td>${m.reasoning?'<span class="badge badge-purple">是</span>':'-'}</td>
|
|
1159
|
+
<td><span style="cursor:help" title="作为保障系统运行的最终兜底模型">${isFallback?'<span class="badge badge-green">☑</span>':'<span class="badge badge-red">☐</span>'}</span></td>
|
|
1195
1160
|
<td>${m.enabled?'<span class="badge badge-green">启用</span>':'<span class="badge badge-red">禁用</span>'}</td>
|
|
1196
1161
|
<td><button class="btn btn-sm btn-ghost" onclick="showEditModelModal('${escHtml(m.id)}')">编辑</button>
|
|
1197
|
-
<button class="btn btn-sm btn-success" onclick="testModel('${escHtml(m.id)}')"
|
|
1162
|
+
<button class="btn btn-sm btn-success" onclick="testModel('${escHtml(m.id)}')">测试</button>
|
|
1198
1163
|
<button class="btn btn-sm btn-danger" onclick="deleteModel('${escHtml(m.id)}','${escHtml(String(m.name||'').replace(/'/g,"\\'"))}')">删除</button></td></tr>`;
|
|
1199
1164
|
}
|
|
1200
1165
|
html+='</table>';
|
|
@@ -1202,70 +1167,12 @@ async function renderLLM(){
|
|
|
1202
1167
|
html+='</div>';
|
|
1203
1168
|
$('content').innerHTML=html;
|
|
1204
1169
|
}
|
|
1205
|
-
|
|
1206
|
-
const inputModes=Array.from(document.querySelectorAll('[id^="llmInputMode_"]:checked')).map(c=>c.value);
|
|
1207
|
-
const apiTypeSelect=$('llmApiTypeSelect').value;
|
|
1208
|
-
const apiType=apiTypeSelect==='custom'?($('llmApiTypeCustom').value||'custom'):apiTypeSelect;
|
|
1209
|
-
const payload={
|
|
1210
|
-
provider:$('llmProvider').value,
|
|
1211
|
-
api_type:apiType,
|
|
1212
|
-
model:$('llmModel').value,
|
|
1213
|
-
base_url:$('llmUrl').value,
|
|
1214
|
-
temperature:parseFloat($('llmTemp').value)||0.1,
|
|
1215
|
-
max_tokens:parseInt($('llmMaxTokens').value)||4096,
|
|
1216
|
-
context_window:parseInt($('llmContextWindow').value)||128000,
|
|
1217
|
-
input_modes:inputModes,
|
|
1218
|
-
reasoning:$('llmReasoning').checked
|
|
1219
|
-
};
|
|
1220
|
-
if($('llmKey').value)payload.api_key=$('llmKey').value;
|
|
1221
|
-
const r=await api('/api/llm',{method:'PUT',body:JSON.stringify(payload)});
|
|
1222
|
-
if(r.error){showToast(r.error,'danger');return}showToast('已保存','success');renderLLM();
|
|
1223
|
-
}
|
|
1224
|
-
async function testLLM(){
|
|
1225
|
-
const btn=event.target;btn.textContent='测试中...';btn.disabled=true;
|
|
1226
|
-
hideTestCode();
|
|
1227
|
-
const provider=$('llmProvider').value,model=$('llmModel').value,base_url=$('llmUrl').value;
|
|
1228
|
-
const temperature=parseFloat($('llmTemp').value)||0.1;
|
|
1229
|
-
const apiTypeSelect=$('llmApiTypeSelect').value;
|
|
1230
|
-
const api_type=apiTypeSelect==='custom'?($('llmApiTypeCustom').value||'custom'):apiTypeSelect;
|
|
1231
|
-
const r=await api('/api/llm/test',{method:'POST',body:JSON.stringify({provider,api_type,model,base_url,temperature})});btn.textContent='测试连接';btn.disabled=false;
|
|
1232
|
-
showToast(r.ok?'连接成功: '+r.response:'连接失败: '+r.error,r.ok?'success':'danger');
|
|
1233
|
-
}
|
|
1234
|
-
function showTestCode(e,type,modelId,modelName,baseUrl,provider,apiType,temperature){
|
|
1235
|
-
const tooltip=document.getElementById('testCodeTooltip');
|
|
1236
|
-
const content=document.getElementById('testCodeContent');
|
|
1237
|
-
if(!tooltip||!content)return;
|
|
1238
|
-
let code;
|
|
1239
|
-
if(type==='global'){
|
|
1240
|
-
const provider=$('llmProvider').value,model=$('llmModel').value,base_url=$('llmUrl').value;
|
|
1241
|
-
const temp=parseFloat($('llmTemp').value)||0.1;
|
|
1242
|
-
const apiTypeSelect=$('llmApiTypeSelect').value;
|
|
1243
|
-
const api_type=apiTypeSelect==='custom'?($('llmApiTypeCustom').value||'custom'):apiTypeSelect;
|
|
1244
|
-
code=`POST /api/llm/test\n\n{\n "provider": "${provider}",\n "api_type": "${api_type}",\n "model": "${model}",\n "base_url": "${base_url}",\n "temperature": ${temp}\n}`;
|
|
1245
|
-
}else{
|
|
1246
|
-
const showApiType=apiType&&apiType!=='openai-completions';
|
|
1247
|
-
const temp=temperature||0.1;
|
|
1248
|
-
|
|
1249
|
-
code=`POST /api/llm/test\n\n{\n "provider": "${provider}"${showApiType?`,\n "api_type": "${apiType}"`:''},\n "model": "${modelName}",\n "base_url": "${baseUrl}",\n "temperature": ${temp}\n}`;
|
|
1250
|
-
}
|
|
1251
|
-
content.textContent=code;
|
|
1252
|
-
tooltip.style.display='block';
|
|
1253
|
-
const rect=tooltip.getBoundingClientRect();
|
|
1254
|
-
let left=e.clientX+10,top=e.clientY+10;
|
|
1255
|
-
if(left+400>window.innerWidth)left=e.clientX-420;
|
|
1256
|
-
if(top+100>window.innerHeight)top=e.clientY-110;
|
|
1257
|
-
tooltip.style.left=left+'px';tooltip.style.top=top+'px';
|
|
1258
|
-
}
|
|
1259
|
-
function hideTestCode(){
|
|
1260
|
-
const tooltip=document.getElementById('testCodeTooltip');
|
|
1261
|
-
if(tooltip)tooltip.style.display='none';
|
|
1262
|
-
}
|
|
1170
|
+
// saveLLM / testLLM / showTestCode / hideTestCode 已移除(全局模型配置卡片已删除)
|
|
1263
1171
|
async function testModel(modelId){
|
|
1264
1172
|
const model=allModelsCache.find(m=>m.id===modelId);
|
|
1265
1173
|
if(!model){showToast('模型不存在','danger');return;}
|
|
1266
|
-
hideTestCode();
|
|
1267
1174
|
const btn=event.target;btn.textContent='测试中...';btn.disabled=true;
|
|
1268
|
-
//
|
|
1175
|
+
// 直接发送模型自身配置,使用独立的测试接口,不经过任何兜底/fallback逻辑
|
|
1269
1176
|
const payload={model:model.model,base_url:model.base_url,provider:model.provider,temperature:model.temperature||0.1,api_key:model.api_key||''};
|
|
1270
1177
|
if(model.api_type)payload.api_type=model.api_type;
|
|
1271
1178
|
const r=await api('/api/llm/test',{method:'POST',body:JSON.stringify(payload)});
|
|
@@ -1286,6 +1193,7 @@ function showAddModelModal(editId){
|
|
|
1286
1193
|
const inputModesArr=model&&model.input_modes?model.input_modes:['text'];
|
|
1287
1194
|
const reasoning=model?model.reasoning:false;
|
|
1288
1195
|
const maxTokens=model&&model.max_tokens?model.max_tokens:4096;
|
|
1196
|
+
const isFallback=model?model.is_global_fallback!==false:true;
|
|
1289
1197
|
const provOpts=['custom','openai','anthropic','ollama','zhipu','deepseek','moonshot','qwen','modelscope'].map(p=>`<option value="${p}" ${provider===p?'selected':''}>${p}</option>`).join('');
|
|
1290
1198
|
const apiTypeOpts=['openai-completions','openai-chat','anthropic','ollama'].map(t=>`<option value="${t}" ${apiType===t?'selected':''}>${t}</option>`).join('');
|
|
1291
1199
|
const isCustomApiType=apiType==='custom'||!['openai-completions','openai-chat','anthropic','ollama'].includes(apiType);
|
|
@@ -1323,6 +1231,9 @@ function showAddModelModal(editId){
|
|
|
1323
1231
|
</div>
|
|
1324
1232
|
</div>
|
|
1325
1233
|
<div class="form-group"><label>输入模式</label><div style="padding:8px 0">${inputModesChecked}</div></div>
|
|
1234
|
+
<div class="form-group" style="display:flex;align-items:center">
|
|
1235
|
+
<input id="mlGlobalFallback" type="checkbox" ${isFallback?'checked':''} style="margin-right:6px"><label for="mlGlobalFallback" style="margin:0;cursor:help" title="作为保障系统运行的最终兜底模型">全局兜底</label>
|
|
1236
|
+
</div>
|
|
1326
1237
|
<div class="flex gap-8 mt-16"><button class="btn btn-primary" onclick="doSaveModel('${escHtml(editId)}')">${isEdit?'保存':'添加'}</button><button class="btn btn-ghost" onclick="closeModal()">取消</button></div>
|
|
1327
1238
|
</div></div>`;
|
|
1328
1239
|
}
|
|
@@ -1348,7 +1259,8 @@ async function doSaveModel(editId){
|
|
|
1348
1259
|
max_tokens:parseInt($('mlMaxTokens').value)||4096,
|
|
1349
1260
|
temperature:parseFloat($('mlTemp').value)||0.1,
|
|
1350
1261
|
input_modes:inputModes,
|
|
1351
|
-
reasoning:$('mlReasoning').checked
|
|
1262
|
+
reasoning:$('mlReasoning').checked,
|
|
1263
|
+
is_global_fallback:$('mlGlobalFallback').checked
|
|
1352
1264
|
};
|
|
1353
1265
|
if($('mlApiKey').value)payload.api_key=$('mlApiKey').value;
|
|
1354
1266
|
let r;
|
package/skills/ASR/LICENSE.txt
DELETED
|
@@ -1,21 +0,0 @@
|
|
|
1
|
-
MIT License
|
|
2
|
-
|
|
3
|
-
Copyright (c) 2025 z-ai-web-dev-sdk Skills
|
|
4
|
-
|
|
5
|
-
Permission is hereby granted, free of charge, to any person obtaining a copy
|
|
6
|
-
of this software and associated documentation files (the "Software"), to deal
|
|
7
|
-
in the Software without restriction, including without limitation the rights
|
|
8
|
-
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
|
9
|
-
copies of the Software, and to permit persons to whom the Software is
|
|
10
|
-
furnished to do so, subject to the following conditions:
|
|
11
|
-
|
|
12
|
-
The above copyright notice and this permission notice shall be included in all
|
|
13
|
-
copies or substantial portions of the Software.
|
|
14
|
-
|
|
15
|
-
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
|
16
|
-
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
|
17
|
-
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
|
18
|
-
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
|
19
|
-
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
|
20
|
-
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
|
21
|
-
SOFTWARE.
|