dsh-mcmp 2.2.2 → 2.2.3
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/README.md +1 -1
- package/lib/index.js +28 -6
- package/package.json +1 -1
package/README.md
CHANGED
|
@@ -43,7 +43,7 @@ DeepSeek Harness **持久化 Cordis 插件**:面向全国大学生数学建模
|
|
|
43
43
|
- `/loopbegin` —— 默认 1 轮
|
|
44
44
|
- `/loopbegin --round=3` —— 3 轮外循环(上限 10)
|
|
45
45
|
- `/loopbegin --from 题目.txt` —— 从文件读取赛题(支持含空格/中文的文件名,如 `--from 2024 年高教社杯全国大学生数学建模竞赛题目.md`,也可用 `--from=文件` 形式)
|
|
46
|
-
- `/loopbegin --model glm-vision/glm-4.7-Flash` ——
|
|
46
|
+
- `/loopbegin --model glm-vision/glm-4.7-Flash` —— 可选显式覆盖(也可用 `--provider 提供商 --model 模型` 分拆形式)。**默认不需要此参数**:流水线子任务的模型**强制跟随你在对话右下角选择的模型**(每次启动时读取当前选择);若无法读取(未安装默认模型服务),兜底使用 `deepseek-official/deepseek-v4-flash`(high 推理由 deepseek 提供商默认提供)
|
|
47
47
|
3. **查看进度**:右下角浮动面板(百分比、步骤打点、日志、文件)+ 聊天区工作流卡片。
|
|
48
48
|
|
|
49
49
|
辅助命令:`/loopstatus`(查看进度)、`/loopabort`(中止,已产出成果保留)、`/loopreset`(清空状态与断点续跑记录,下次 `/loopbegin` 从头全新开始;等价于面板「重置(全新开始)」按钮)。
|
package/lib/index.js
CHANGED
|
@@ -35,6 +35,26 @@ export function apply(ctx) {
|
|
|
35
35
|
// 全流水线缺陷台账:跨步骤错误登记、裁决与向上修复的唯一权威文件
|
|
36
36
|
const LEDGER = '00_缺陷与裁决台账.md'
|
|
37
37
|
|
|
38
|
+
// 子任务模型路由解析:
|
|
39
|
+
// 1) 显式 --model 覆盖(优先级最高)
|
|
40
|
+
// 2) 父对话当前选择的模型(右下角模型选择器 → agent-default-model 设置)
|
|
41
|
+
// 3) 兜底:DeepSeek V4 Flash(high 推理由 deepseek 提供商默认提供)
|
|
42
|
+
// 无论哪种情况,都强制把 agentOptions 传给每个子任务,
|
|
43
|
+
// 避免子任务继承父会话"创建时固化"的模型选项(聊天里切换模型不生效的老问题)。
|
|
44
|
+
const FALLBACK_MODEL = { provider: 'deepseek-official', model: 'deepseek-v4-flash' }
|
|
45
|
+
function resolveForcedModel() {
|
|
46
|
+
try {
|
|
47
|
+
const adm = ctx.get('agentDefaultModel')
|
|
48
|
+
if (adm && typeof adm.currentSelection === 'function') {
|
|
49
|
+
const sel = adm.currentSelection()
|
|
50
|
+
if (sel && typeof sel.provider === 'string' && sel.provider && typeof sel.model === 'string' && sel.model) {
|
|
51
|
+
return { provider: sel.provider, model: sel.model }
|
|
52
|
+
}
|
|
53
|
+
}
|
|
54
|
+
} catch (err) { /* ignore */ }
|
|
55
|
+
return { ...FALLBACK_MODEL }
|
|
56
|
+
}
|
|
57
|
+
|
|
38
58
|
// ---------- 识图能力探测(宿主侧,仅供参考;以子智能体自检为准) ----------
|
|
39
59
|
function detectVision() {
|
|
40
60
|
// 1) 宿主服务:常见的识图服务键
|
|
@@ -562,9 +582,9 @@ export function apply(ctx) {
|
|
|
562
582
|
if (!Number.isSafeInteger(rounds) || rounds < 1) rounds = 1
|
|
563
583
|
if (rounds > 10) return { kind: 'error', text: '--round 最大为 10。每轮 19 次迭代、每次迭代启动一个专家子智能体,轮数过大会非常耗时。' }
|
|
564
584
|
const fresh = /(?:^|\s)--fresh\b/i.test(raw)
|
|
565
|
-
//
|
|
566
|
-
//
|
|
567
|
-
let
|
|
585
|
+
// 子任务模型:默认强制跟随父对话当前选择的模型(右下角模型选择器);
|
|
586
|
+
// 可选 --model 提供商/模型 显式覆盖;无法读取时兜底 DeepSeek V4 Flash。
|
|
587
|
+
let explicitAgentOptions = undefined
|
|
568
588
|
{
|
|
569
589
|
const mProvider = /(?:^|\s)--provider\s*[=:]?\s*([A-Za-z0-9._\-]+)/i.exec(raw)
|
|
570
590
|
const mModel = /(?:^|\s)--model\s*[=:]?\s*([A-Za-z0-9._\-]+(?:\/[A-Za-z0-9._\-]+)?)/i.exec(raw)
|
|
@@ -572,9 +592,9 @@ export function apply(ctx) {
|
|
|
572
592
|
const rawModel = mModel[1]
|
|
573
593
|
const slash = rawModel.indexOf('/')
|
|
574
594
|
if (slash >= 0) {
|
|
575
|
-
|
|
595
|
+
explicitAgentOptions = { provider: rawModel.slice(0, slash), model: rawModel.slice(slash + 1) }
|
|
576
596
|
} else if (mProvider) {
|
|
577
|
-
|
|
597
|
+
explicitAgentOptions = { provider: mProvider[1], model: rawModel }
|
|
578
598
|
} else {
|
|
579
599
|
return { kind: 'error', text: '--model 需要指定提供商/模型,例如 --model glm-vision/glm-4.7-Flash;也可配合 --provider 提供商 --model 模型 使用。' }
|
|
580
600
|
}
|
|
@@ -582,6 +602,7 @@ export function apply(ctx) {
|
|
|
582
602
|
return { kind: 'error', text: '--provider 必须配合 --model 使用,例如 --provider glm-vision --model glm-4.7-Flash。' }
|
|
583
603
|
}
|
|
584
604
|
}
|
|
605
|
+
const agentOptions = explicitAgentOptions || resolveForcedModel()
|
|
585
606
|
// --from 路径:允许含空格,遇到下一个 -- 标志或行尾即结束,避免吞掉后面的 --round/--fresh
|
|
586
607
|
const mFrom = /(?:^|\s)--from(?:=)?\s*([^\r\n]+?)(?=\s+--|\r?$)/i.exec(raw)
|
|
587
608
|
let problem = null
|
|
@@ -635,7 +656,8 @@ export function apply(ctx) {
|
|
|
635
656
|
pushLog('流水线已启动: ' + rounds + ' 轮 × 19 次迭代,输出目录 ' + wsDir + (resumeCount > 0 ? '(断点续跑:跳过已完成的 ' + resumeCount + ' 次迭代)' : '') + '(关闭本聊天窗口不影响后台执行)')
|
|
636
657
|
if (vision) pushLog('识图能力探测: ' + (vision.source === 'service' ? '检测到识图服务 ' + vision.key : '检测到识图工具 ' + (vision.tools || []).join(',')) + '(S5 将自动调用)')
|
|
637
658
|
else pushLog('识图能力探测:未检测到独立识图插件,S5 将让子智能体自检(无识图则走脚本分析)')
|
|
638
|
-
if (
|
|
659
|
+
if (explicitAgentOptions) pushLog('子任务模型路由:强制 ' + agentOptions.provider + '/' + agentOptions.model + '(--model 显式覆盖)')
|
|
660
|
+
else pushLog('子任务模型路由:跟随父对话当前选择 ' + agentOptions.provider + '/' + agentOptions.model + ' (无法读取时兜底 deepseek-official/deepseek-v4-flash)')
|
|
639
661
|
refreshFiles()
|
|
640
662
|
void runPipeline(runId, session, agent, args, controller).catch((err) => {
|
|
641
663
|
pushLog('流水线异常: ' + String((err && err.message) || err))
|
package/package.json
CHANGED