@ai-zen/cli 1.0.0-alpha.13 → 1.0.0-alpha.15
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/CHANGELOG.md +68 -0
- package/README.md +71 -2
- package/README.zh.md +71 -2
- package/dist/agent-creator.d.ts.map +1 -1
- package/dist/agent-creator.js +4 -1
- package/dist/agent-creator.js.map +1 -1
- package/dist/auto-migrate-confirm.d.ts +2 -2
- package/dist/auto-migrate-confirm.d.ts.map +1 -1
- package/dist/auto-migrate-confirm.js +2 -2
- package/dist/auto-migrate-confirm.js.map +1 -1
- package/dist/config-editor.d.ts.map +1 -1
- package/dist/config-editor.js +2 -1
- package/dist/config-editor.js.map +1 -1
- package/dist/config.d.ts +8 -1
- package/dist/config.d.ts.map +1 -1
- package/dist/config.js +10 -0
- package/dist/config.js.map +1 -1
- package/dist/conversation-commands/registry.d.ts.map +1 -1
- package/dist/conversation-commands/registry.js +2 -0
- package/dist/conversation-commands/registry.js.map +1 -1
- package/dist/handoff-service.js +3 -3
- package/dist/handoff-service.js.map +1 -1
- package/dist/model-switch.d.ts +59 -0
- package/dist/model-switch.d.ts.map +1 -0
- package/dist/model-switch.js +62 -0
- package/dist/model-switch.js.map +1 -0
- package/dist/reasoning-effort.d.ts +62 -0
- package/dist/reasoning-effort.d.ts.map +1 -0
- package/dist/reasoning-effort.js +98 -0
- package/dist/reasoning-effort.js.map +1 -0
- package/dist/sdk-log.d.ts +48 -0
- package/dist/sdk-log.d.ts.map +1 -0
- package/dist/sdk-log.js +67 -0
- package/dist/sdk-log.js.map +1 -0
- package/dist/stdio-runner.d.ts.map +1 -1
- package/dist/stdio-runner.js +6 -7
- package/dist/stdio-runner.js.map +1 -1
- package/dist/sub-agent-guard-plugin.d.ts +5 -5
- package/dist/sub-agent-guard-plugin.d.ts.map +1 -1
- package/dist/sub-agent-guard-plugin.js +7 -7
- package/dist/sub-agent-guard-plugin.js.map +1 -1
- package/dist/tui/chat-session.d.ts +3 -1
- package/dist/tui/chat-session.d.ts.map +1 -1
- package/dist/tui/chat-session.js +13 -15
- package/dist/tui/chat-session.js.map +1 -1
- package/dist/tui/components.d.ts +3 -1
- package/dist/tui/components.d.ts.map +1 -1
- package/dist/tui/components.js +3 -3
- package/dist/tui/components.js.map +1 -1
- package/dist/tui/config-wizard/engine.js +1 -1
- package/dist/tui/config-wizard/engine.js.map +1 -1
- package/dist/tui/config-wizard/fields.d.ts +3 -1
- package/dist/tui/config-wizard/fields.d.ts.map +1 -1
- package/dist/tui/config-wizard/fields.js +58 -6
- package/dist/tui/config-wizard/fields.js.map +1 -1
- package/dist/tui/config-wizard/types.d.ts +7 -1
- package/dist/tui/config-wizard/types.d.ts.map +1 -1
- package/dist/tui/index.d.ts.map +1 -1
- package/dist/tui/index.js +21 -1
- package/dist/tui/index.js.map +1 -1
- package/dist/tui/input-editing.d.ts +49 -0
- package/dist/tui/input-editing.d.ts.map +1 -0
- package/dist/tui/input-editing.js +87 -0
- package/dist/tui/input-editing.js.map +1 -0
- package/dist/tui/key-debug.d.ts +62 -0
- package/dist/tui/key-debug.d.ts.map +1 -0
- package/dist/tui/key-debug.js +92 -0
- package/dist/tui/key-debug.js.map +1 -0
- package/dist/tui/screens/chat-commands.d.ts +2 -0
- package/dist/tui/screens/chat-commands.d.ts.map +1 -1
- package/dist/tui/screens/chat-commands.js +140 -1
- package/dist/tui/screens/chat-commands.js.map +1 -1
- package/dist/tui/screens/chat.d.ts +2 -0
- package/dist/tui/screens/chat.d.ts.map +1 -1
- package/dist/tui/screens/chat.js +287 -17
- package/dist/tui/screens/chat.js.map +1 -1
- package/dist/tui/screens/index.d.ts +1 -1
- package/dist/tui/screens/index.d.ts.map +1 -1
- package/dist/tui/screens/index.js +1 -1
- package/dist/tui/screens/index.js.map +1 -1
- package/dist/tui/screens/input.d.ts +35 -0
- package/dist/tui/screens/input.d.ts.map +1 -1
- package/dist/tui/screens/input.js +66 -0
- package/dist/tui/screens/input.js.map +1 -1
- package/package.json +2 -2
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"registry.js","sourceRoot":"","sources":["../../src/conversation-commands/registry.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAYH,wBAAwB;AACxB,MAAM,CAAC,MAAM,gBAAgB,GAA2B;IACtD,EAAE,IAAI,EAAE,MAAM,EAAE,WAAW,EAAE,QAAQ,EAAE;IACvC,EAAE,IAAI,EAAE,MAAM,EAAE,WAAW,EAAE,kBAAkB,EAAE;IACjD,EAAE,IAAI,EAAE,KAAK,EAAE,WAAW,EAAE,YAAY,EAAE;IAC1C,EAAE,IAAI,EAAE,MAAM,EAAE,WAAW,EAAE,cAAc,EAAE;IAC7C,EAAE,IAAI,EAAE,QAAQ,EAAE,WAAW,EAAE,cAAc,EAAE;IAC/C,EAAE,IAAI,EAAE,OAAO,EAAE,WAAW,EAAE,IAAI,EAAE;IACpC,EAAE,IAAI,EAAE,QAAQ,EAAE,WAAW,EAAE,qBAAqB,EAAE;IACtD,EAAE,IAAI,EAAE,KAAK,EAAE,WAAW,EAAE,iBAAiB,EAAE;IAC/C,EAAE,IAAI,EAAE,SAAS,EAAE,WAAW,EAAE,iBAAiB,EAAE;IACnD,EAAE,IAAI,EAAE,SAAS,EAAE,OAAO,EAAE,CAAC,WAAW,CAAC,EAAE,WAAW,EAAE,kBAAkB,EAAE;IAC5E,EAAE,IAAI,EAAE,MAAM,EAAE,WAAW,EAAE,OAAO,EAAE;IACtC,0CAA0C;IAC1C,EAAE,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,CAAC,MAAM,CAAC,EAAE,WAAW,EAAE,eAAe,EAAE;CAClE,CAAC;AAYF,wBAAwB;AACxB,MAAM,UAAU,eAAe;IAC7B,OAAO,gBAAgB,CAAC,GAAG,CAAC,CAAC,OAAO,EAAE,EAAE;QACtC,MAAM,KAAK,GAAG,CAAC,OAAO,CAAC,IAAI,EAAE,GAAG,CAAC,OAAO,CAAC,OAAO,IAAI,EAAE,CAAC,CAAC,CAAC;QACzD,OAAO;YACL,KAAK;YACL,KAAK,EAAE,KAAK,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,IAAI,EAAE,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC;YAChD,WAAW,EAAE,OAAO,CAAC,WAAW;SACjC,CAAC;IACJ,CAAC,CAAC,CAAC;AACL,CAAC;AAED;;;GAGG;AACH,MAAM,CAAC,MAAM,mBAAmB,GAC9B,IAAI,CAAC,GAAG,CAAC,GAAG,eAAe,EAAE,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,GAAG,CAAC,CAAC;AAEtE;;;GAGG;AACH,MAAM,UAAU,iBAAiB,CAAC,OAAe;IAC/C,MAAM,UAAU,GAAG,OAAO,CAAC,IAAI,EAAE,CAAC,WAAW,EAAE,CAAC;IAChD,IAAI,CAAC,UAAU;QAAE,OAAO,eAAe,EAAE,CAAC;IAE1C,OAAO,eAAe,EAAE,CAAC,MAAM,CAAC,CAAC,IAAI,EAAE,EAAE,CACvC,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,UAAU,CAAC,UAAU,CAAC,CAAC,CACvD,CAAC;AACJ,CAAC;AAED,+BAA+B;AAC/B,MAAM,UAAU,eAAe;IAC7B,MAAM,KAAK,GAAG,IAAI,GAAG,EAAU,CAAC;IAChC,KAAK,MAAM,IAAI,IAAI,eAAe,EAAE,EAAE,CAAC;QACrC,KAAK,MAAM,IAAI,IAAI,IAAI,CAAC,KAAK;YAAE,KAAK,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;IACjD,CAAC;IACD,OAAO,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,IAAI,EAAE,CAAC;AAClC,CAAC"}
|
|
1
|
+
{"version":3,"file":"registry.js","sourceRoot":"","sources":["../../src/conversation-commands/registry.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAYH,wBAAwB;AACxB,MAAM,CAAC,MAAM,gBAAgB,GAA2B;IACtD,EAAE,IAAI,EAAE,MAAM,EAAE,WAAW,EAAE,QAAQ,EAAE;IACvC,EAAE,IAAI,EAAE,MAAM,EAAE,WAAW,EAAE,kBAAkB,EAAE;IACjD,EAAE,IAAI,EAAE,KAAK,EAAE,WAAW,EAAE,YAAY,EAAE;IAC1C,EAAE,IAAI,EAAE,MAAM,EAAE,WAAW,EAAE,cAAc,EAAE;IAC7C,EAAE,IAAI,EAAE,QAAQ,EAAE,WAAW,EAAE,cAAc,EAAE;IAC/C,EAAE,IAAI,EAAE,OAAO,EAAE,WAAW,EAAE,IAAI,EAAE;IACpC,EAAE,IAAI,EAAE,QAAQ,EAAE,WAAW,EAAE,qBAAqB,EAAE;IACtD,EAAE,IAAI,EAAE,OAAO,EAAE,WAAW,EAAE,mBAAmB,EAAE;IACnD,EAAE,IAAI,EAAE,OAAO,EAAE,OAAO,EAAE,CAAC,QAAQ,CAAC,EAAE,WAAW,EAAE,gBAAgB,EAAE;IACrE,EAAE,IAAI,EAAE,KAAK,EAAE,WAAW,EAAE,iBAAiB,EAAE;IAC/C,EAAE,IAAI,EAAE,SAAS,EAAE,WAAW,EAAE,iBAAiB,EAAE;IACnD,EAAE,IAAI,EAAE,SAAS,EAAE,OAAO,EAAE,CAAC,WAAW,CAAC,EAAE,WAAW,EAAE,kBAAkB,EAAE;IAC5E,EAAE,IAAI,EAAE,MAAM,EAAE,WAAW,EAAE,OAAO,EAAE;IACtC,0CAA0C;IAC1C,EAAE,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,CAAC,MAAM,CAAC,EAAE,WAAW,EAAE,eAAe,EAAE;CAClE,CAAC;AAYF,wBAAwB;AACxB,MAAM,UAAU,eAAe;IAC7B,OAAO,gBAAgB,CAAC,GAAG,CAAC,CAAC,OAAO,EAAE,EAAE;QACtC,MAAM,KAAK,GAAG,CAAC,OAAO,CAAC,IAAI,EAAE,GAAG,CAAC,OAAO,CAAC,OAAO,IAAI,EAAE,CAAC,CAAC,CAAC;QACzD,OAAO;YACL,KAAK;YACL,KAAK,EAAE,KAAK,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,IAAI,EAAE,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC;YAChD,WAAW,EAAE,OAAO,CAAC,WAAW;SACjC,CAAC;IACJ,CAAC,CAAC,CAAC;AACL,CAAC;AAED;;;GAGG;AACH,MAAM,CAAC,MAAM,mBAAmB,GAC9B,IAAI,CAAC,GAAG,CAAC,GAAG,eAAe,EAAE,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,GAAG,CAAC,CAAC;AAEtE;;;GAGG;AACH,MAAM,UAAU,iBAAiB,CAAC,OAAe;IAC/C,MAAM,UAAU,GAAG,OAAO,CAAC,IAAI,EAAE,CAAC,WAAW,EAAE,CAAC;IAChD,IAAI,CAAC,UAAU;QAAE,OAAO,eAAe,EAAE,CAAC;IAE1C,OAAO,eAAe,EAAE,CAAC,MAAM,CAAC,CAAC,IAAI,EAAE,EAAE,CACvC,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,UAAU,CAAC,UAAU,CAAC,CAAC,CACvD,CAAC;AACJ,CAAC;AAED,+BAA+B;AAC/B,MAAM,UAAU,eAAe;IAC7B,MAAM,KAAK,GAAG,IAAI,GAAG,EAAU,CAAC;IAChC,KAAK,MAAM,IAAI,IAAI,eAAe,EAAE,EAAE,CAAC;QACrC,KAAK,MAAM,IAAI,IAAI,IAAI,CAAC,KAAK;YAAE,KAAK,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;IACjD,CAAC;IACD,OAAO,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,IAAI,EAAE,CAAC;AAClC,CAAC"}
|
package/dist/handoff-service.js
CHANGED
|
@@ -27,9 +27,9 @@ export function createHandoffService(ctx, options = {}) {
|
|
|
27
27
|
// 交接模板的唯一真相源:磁盘上的 handoff Skill(出厂随 SDK 释放,可被项目级覆盖)
|
|
28
28
|
skillDirs: listSkillDirs(),
|
|
29
29
|
onBeforeHandoff: (hctx) => {
|
|
30
|
-
const isAuto = hctx.promptTokens != null && hctx.
|
|
30
|
+
const isAuto = hctx.promptTokens != null && hctx.handoffTokens != null;
|
|
31
31
|
if (isAuto) {
|
|
32
|
-
log(`📋 检测到上下文即将超限(${hctx.promptTokens}/${hctx.
|
|
32
|
+
log(`📋 检测到上下文即将超限(${hctx.promptTokens}/${hctx.handoffTokens} tokens),正在交接(${describeMode(hctx.requestedMode)})…`);
|
|
33
33
|
}
|
|
34
34
|
else {
|
|
35
35
|
log(`📋 正在编写任务交接文档(${describeMode(hctx.requestedMode)})…`);
|
|
@@ -50,7 +50,7 @@ export function createHandoffService(ctx, options = {}) {
|
|
|
50
50
|
onMigrated: async (hctx) => {
|
|
51
51
|
// 清空「最近一次用量」:prune 已把上下文物理重置(仅留系统提示 + 交接断点),
|
|
52
52
|
// 但 lastUsage 仍是迁移前/交接回合的 prompt_tokens。若不清理,下一次发送时
|
|
53
|
-
// ContextGuardPlugin(`onInnerLoopStart` 以
|
|
53
|
+
// ContextGuardPlugin(`onInnerLoopStart` 以 tokenThresholds.guard 为硬上限)会拿这个
|
|
54
54
|
// 陈旧值判定,立即抛出「上下文严重超限」而中断——用户表现为「迁移完成后第一条
|
|
55
55
|
// 消息就被总上下文保护插件拦截」。置空后护栏首轮无据可查而放行,待下一次响应
|
|
56
56
|
// 以真实(已大幅缩小的)用量回填。
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"handoff-service.js","sourceRoot":"","sources":["../src/handoff-service.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,cAAc,GAGf,MAAM,oBAAoB,CAAC;AAC5B,OAAO,EACL,gBAAgB,EAChB,sBAAsB,EACtB,sBAAsB,GACvB,MAAM,8BAA8B,CAAC;AACtC,OAAO,EAAE,gBAAgB,EAAE,MAAM,sBAAsB,CAAC;AACxD,OAAO,EAAE,oBAAoB,EAAE,MAAM,aAAa,CAAC;AACnD,OAAO,EAAE,aAAa,EAAE,MAAM,oBAAoB,CAAC;AAGnD,uBAAuB;AACvB,MAAM,UAAU,YAAY,CAAC,IAAiB;IAC5C,OAAO,IAAI,KAAK,MAAM,CAAC,CAAC,CAAC,aAAa,CAAC,CAAC,CAAC,MAAM,CAAC;AAClD,CAAC;AAED;;;;;;;;GAQG;AACH,MAAM,UAAU,oBAAoB,CAClC,GAAwB,EACxB,UAII,EAAE;IAEN,6DAA6D;IAC7D,MAAM,GAAG,GAAG,OAAO,CAAC,GAAG,IAAI,CAAC,GAAG,EAAE,GAAE,CAAC,CAAC,CAAC;IAEtC,OAAO,IAAI,cAAc,CAAC;QACxB,uBAAuB;QACvB,UAAU,EAAE,OAAO,CAAC,UAAU,IAAI,oBAAoB;QACtD,yCAAyC;QACzC,QAAQ,EAAE,OAAO;QACjB,oDAAoD;QACpD,SAAS,EAAE,aAAa,EAAE;QAC1B,eAAe,EAAE,CAAC,IAAoB,EAAE,EAAE;YACxC,MAAM,MAAM,GAAG,IAAI,CAAC,YAAY,IAAI,IAAI,IAAI,IAAI,CAAC,
|
|
1
|
+
{"version":3,"file":"handoff-service.js","sourceRoot":"","sources":["../src/handoff-service.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,cAAc,GAGf,MAAM,oBAAoB,CAAC;AAC5B,OAAO,EACL,gBAAgB,EAChB,sBAAsB,EACtB,sBAAsB,GACvB,MAAM,8BAA8B,CAAC;AACtC,OAAO,EAAE,gBAAgB,EAAE,MAAM,sBAAsB,CAAC;AACxD,OAAO,EAAE,oBAAoB,EAAE,MAAM,aAAa,CAAC;AACnD,OAAO,EAAE,aAAa,EAAE,MAAM,oBAAoB,CAAC;AAGnD,uBAAuB;AACvB,MAAM,UAAU,YAAY,CAAC,IAAiB;IAC5C,OAAO,IAAI,KAAK,MAAM,CAAC,CAAC,CAAC,aAAa,CAAC,CAAC,CAAC,MAAM,CAAC;AAClD,CAAC;AAED;;;;;;;;GAQG;AACH,MAAM,UAAU,oBAAoB,CAClC,GAAwB,EACxB,UAII,EAAE;IAEN,6DAA6D;IAC7D,MAAM,GAAG,GAAG,OAAO,CAAC,GAAG,IAAI,CAAC,GAAG,EAAE,GAAE,CAAC,CAAC,CAAC;IAEtC,OAAO,IAAI,cAAc,CAAC;QACxB,uBAAuB;QACvB,UAAU,EAAE,OAAO,CAAC,UAAU,IAAI,oBAAoB;QACtD,yCAAyC;QACzC,QAAQ,EAAE,OAAO;QACjB,oDAAoD;QACpD,SAAS,EAAE,aAAa,EAAE;QAC1B,eAAe,EAAE,CAAC,IAAoB,EAAE,EAAE;YACxC,MAAM,MAAM,GAAG,IAAI,CAAC,YAAY,IAAI,IAAI,IAAI,IAAI,CAAC,aAAa,IAAI,IAAI,CAAC;YACvE,IAAI,MAAM,EAAE,CAAC;gBACX,GAAG,CACD,iBAAiB,IAAI,CAAC,YAAY,IAAI,IAAI,CAAC,aAAa,iBAAiB,YAAY,CAAC,IAAI,CAAC,aAAa,CAAC,IAAI,CAC9G,CAAC;YACJ,CAAC;iBAAM,CAAC;gBACN,GAAG,CAAC,iBAAiB,YAAY,CAAC,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,CAAC;YAC7D,CAAC;QACH,CAAC;QACD,SAAS,EAAE,KAAK,EAAE,IAAoB,EAAE,EAAE;YACxC,0BAA0B;YAC1B,IAAI,IAAI,CAAC,IAAI,KAAK,IAAI,CAAC,aAAa,EAAE,CAAC;gBACrC,GAAG,CAAC,MAAM,YAAY,CAAC,IAAI,CAAC,aAAa,CAAC,cAAc,YAAY,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;YACrF,CAAC;YACD,GAAG,CAAC,WAAW,IAAI,CAAC,WAAW,EAAE,CAAC,CAAC;YAEnC,mCAAmC;YACnC,IAAI,IAAI,CAAC,SAAS,EAAE,CAAC;gBACnB,MAAM,gBAAgB,CAAC,GAAG,CAAC,CAAC;gBAC5B,GAAG,CAAC,YAAY,GAAG,CAAC,WAAW,EAAE,CAAC,CAAC;YACrC,CAAC;QACH,CAAC;QACD,UAAU,EAAE,KAAK,EAAE,IAAoB,EAAE,EAAE;YACzC,6CAA6C;YAC7C,oDAAoD;YACpD,0EAA0E;YAC1E,yCAAyC;YACzC,wCAAwC;YACxC,mBAAmB;YACnB,IAAI,CAAC,KAAK,CAAC,SAAS,GAAG,SAAS,CAAC;YAEjC,wBAAwB;YACxB,MAAM,EAAE,GAAG,sBAAsB,EAAE,CAAC;YACpC,GAAG,CAAC,SAAS,GAAG,EAAE,CAAC;YACnB,GAAG,CAAC,WAAW,GAAG,EAAE,CAAC;YAErB,GAAG,CAAC,sBAAsB,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,MAAM,OAAO,CAAC,CAAC;YAC7D,GAAG,CAAC,4BAA4B,CAAC,CAAC;YAElC,uCAAuC;YACvC,iEAAiE;YACjE,mCAAmC;YACnC,IAAI,CAAC;gBACH,MAAM,QAAQ,GAAG,MAAM,sBAAsB,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;gBACvD,MAAM,GAAG,GAAG,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE,CAAC;gBACrC,MAAM,sBAAsB,CAAC,KAAK,CAAC;oBACjC,EAAE;oBACF,OAAO,EAAE,GAAG,CAAC,OAAO,IAAI,SAAS;oBACjC,OAAO,EAAE,GAAG,CAAC,OAAO;oBACpB,QAAQ,EAAE,IAAI,CAAC,KAAK,CAAC,QAAQ;oBAC7B,GAAG,EAAE,OAAO,CAAC,GAAG,EAAE;oBAClB,SAAS,EAAE,QAAQ,EAAE,SAAS,IAAI,GAAG;oBACrC,SAAS,EAAE,GAAG;iBACf,CAAC,CAAC;gBACH,MAAM,gBAAgB,CAAC,OAAO,CAAC,GAAG,EAAE,EAAE,EAAE,CAAC,CAAC;YAC5C,CAAC;YAAC,OAAO,GAAQ,EAAE,CAAC;gBAClB,GAAG,CAAC,gBAAgB,GAAG,EAAE,OAAO,IAAI,GAAG,EAAE,CAAC,CAAC;YAC7C,CAAC;QACH,CAAC;KACF,CAAC,CAAC;AACL,CAAC"}
|
|
@@ -0,0 +1,59 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* 模型切换 —— `/model` 的写配置策略(纯逻辑,可单测)
|
|
3
|
+
*
|
|
4
|
+
* 会话用哪个模型,取决于**两处配置的优先级**(见 `tui/index.tsx` 的 `resolveTarget()`):
|
|
5
|
+
* 1. Agent 定义里的 `modelId`(显式绑定)
|
|
6
|
+
* 2. `config.json` 的 `defaultModel`(未绑定时兜底)
|
|
7
|
+
*
|
|
8
|
+
* 所以切换时必须写到「真正生效的那一处」,否则会出现「提示已切换、实际没变」:
|
|
9
|
+
* - Agent 显式绑定过模型 → 改 `agents/<id>.json` 的 `modelId`
|
|
10
|
+
* - Agent 没绑(用默认模型)→ 改 `config.json` 的 `defaultModel`
|
|
11
|
+
*
|
|
12
|
+
* 注意 **Agent 定义的其它字段不可丢**:SDK 初始化时只同步出厂提示词,
|
|
13
|
+
* 其余字段(权限、`custom` 等)以用户文件为准,因此写入是「读 → 改一个字段 → 写回」。
|
|
14
|
+
*/
|
|
15
|
+
import type { AgentDefinition, AppConfig } from "@ai-zen/agents-sdk";
|
|
16
|
+
/** 写入目标:Agent 定义(显式绑定)/ 全局默认模型 */
|
|
17
|
+
export type ModelWriteTarget = "agent" | "default";
|
|
18
|
+
/**
|
|
19
|
+
* 由 Agent 定义判定写入目标。
|
|
20
|
+
*
|
|
21
|
+
* 判据是 `modelId` 是否**已存在**,而不是它等不等于某个值:
|
|
22
|
+
* 只有显式绑过模型的 Agent 才该被改定义;没绑的 Agent 走默认模型,
|
|
23
|
+
* 此时改定义等于凭空给它加一条绑定,会掩盖「默认模型」这一层语义。
|
|
24
|
+
*/
|
|
25
|
+
export declare function resolveModelWriteTarget(definition?: Pick<AgentDefinition, "modelId"> | null): ModelWriteTarget;
|
|
26
|
+
export interface SwitchModelDeps {
|
|
27
|
+
/** 读 Agent 定义(默认:`~/.ai-zen/agents/<id>.json`) */
|
|
28
|
+
readAgent?: (agentId: string) => Promise<AgentDefinition | null>;
|
|
29
|
+
/** 写 Agent 定义 */
|
|
30
|
+
writeAgent?: (definition: AgentDefinition) => Promise<void>;
|
|
31
|
+
/** 写全局配置 */
|
|
32
|
+
saveConfig?: (config: AppConfig) => Promise<void>;
|
|
33
|
+
/** 当前时间(测试可固定) */
|
|
34
|
+
now?: Date;
|
|
35
|
+
}
|
|
36
|
+
export interface SwitchModelOptions extends SwitchModelDeps {
|
|
37
|
+
config: AppConfig;
|
|
38
|
+
/** 当前会话的 Agent(缺省视为 default) */
|
|
39
|
+
agentId?: string;
|
|
40
|
+
/** 目标模型 id */
|
|
41
|
+
modelId: string;
|
|
42
|
+
}
|
|
43
|
+
export interface SwitchModelResult {
|
|
44
|
+
/** 实际写入的位置 */
|
|
45
|
+
target: ModelWriteTarget;
|
|
46
|
+
/** 面向用户的一句话结果 */
|
|
47
|
+
summary: string;
|
|
48
|
+
/** 变更后的配置(`target === "default"` 时为新对象,否则原样返回) */
|
|
49
|
+
config: AppConfig;
|
|
50
|
+
/** 变更后的 Agent 定义(`target === "agent"` 时有值) */
|
|
51
|
+
definition?: AgentDefinition;
|
|
52
|
+
}
|
|
53
|
+
/**
|
|
54
|
+
* 切换模型并写入配置。
|
|
55
|
+
*
|
|
56
|
+
* 抛错场景:模型不存在、Agent 定义缺失(显式绑定的 Agent 却读不到文件)。
|
|
57
|
+
*/
|
|
58
|
+
export declare function switchModel(options: SwitchModelOptions): Promise<SwitchModelResult>;
|
|
59
|
+
//# sourceMappingURL=model-switch.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"model-switch.d.ts","sourceRoot":"","sources":["../src/model-switch.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;GAaG;AAGH,OAAO,KAAK,EAAE,eAAe,EAAE,SAAS,EAAE,MAAM,oBAAoB,CAAC;AAGrE,kCAAkC;AAClC,MAAM,MAAM,gBAAgB,GAAG,OAAO,GAAG,SAAS,CAAC;AAEnD;;;;;;GAMG;AACH,wBAAgB,uBAAuB,CACrC,UAAU,CAAC,EAAE,IAAI,CAAC,eAAe,EAAE,SAAS,CAAC,GAAG,IAAI,GACnD,gBAAgB,CAElB;AAED,MAAM,WAAW,eAAe;IAC9B,kDAAkD;IAClD,SAAS,CAAC,EAAE,CAAC,OAAO,EAAE,MAAM,KAAK,OAAO,CAAC,eAAe,GAAG,IAAI,CAAC,CAAC;IACjE,iBAAiB;IACjB,UAAU,CAAC,EAAE,CAAC,UAAU,EAAE,eAAe,KAAK,OAAO,CAAC,IAAI,CAAC,CAAC;IAC5D,YAAY;IACZ,UAAU,CAAC,EAAE,CAAC,MAAM,EAAE,SAAS,KAAK,OAAO,CAAC,IAAI,CAAC,CAAC;IAClD,kBAAkB;IAClB,GAAG,CAAC,EAAE,IAAI,CAAC;CACZ;AAED,MAAM,WAAW,kBAAmB,SAAQ,eAAe;IACzD,MAAM,EAAE,SAAS,CAAC;IAClB,gCAAgC;IAChC,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,cAAc;IACd,OAAO,EAAE,MAAM,CAAC;CACjB;AAED,MAAM,WAAW,iBAAiB;IAChC,cAAc;IACd,MAAM,EAAE,gBAAgB,CAAC;IACzB,iBAAiB;IACjB,OAAO,EAAE,MAAM,CAAC;IAChB,kDAAkD;IAClD,MAAM,EAAE,SAAS,CAAC;IAClB,8CAA8C;IAC9C,UAAU,CAAC,EAAE,eAAe,CAAC;CAC9B;AAED;;;;GAIG;AACH,wBAAsB,WAAW,CAAC,OAAO,EAAE,kBAAkB,GAAG,OAAO,CAAC,iBAAiB,CAAC,CAmCzF"}
|
|
@@ -0,0 +1,62 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* 模型切换 —— `/model` 的写配置策略(纯逻辑,可单测)
|
|
3
|
+
*
|
|
4
|
+
* 会话用哪个模型,取决于**两处配置的优先级**(见 `tui/index.tsx` 的 `resolveTarget()`):
|
|
5
|
+
* 1. Agent 定义里的 `modelId`(显式绑定)
|
|
6
|
+
* 2. `config.json` 的 `defaultModel`(未绑定时兜底)
|
|
7
|
+
*
|
|
8
|
+
* 所以切换时必须写到「真正生效的那一处」,否则会出现「提示已切换、实际没变」:
|
|
9
|
+
* - Agent 显式绑定过模型 → 改 `agents/<id>.json` 的 `modelId`
|
|
10
|
+
* - Agent 没绑(用默认模型)→ 改 `config.json` 的 `defaultModel`
|
|
11
|
+
*
|
|
12
|
+
* 注意 **Agent 定义的其它字段不可丢**:SDK 初始化时只同步出厂提示词,
|
|
13
|
+
* 其余字段(权限、`custom` 等)以用户文件为准,因此写入是「读 → 改一个字段 → 写回」。
|
|
14
|
+
*/
|
|
15
|
+
import { AgentRepository } from "@ai-zen/agents-sdk";
|
|
16
|
+
import { AGENTS_DIR, saveConfig } from "./config.js";
|
|
17
|
+
/**
|
|
18
|
+
* 由 Agent 定义判定写入目标。
|
|
19
|
+
*
|
|
20
|
+
* 判据是 `modelId` 是否**已存在**,而不是它等不等于某个值:
|
|
21
|
+
* 只有显式绑过模型的 Agent 才该被改定义;没绑的 Agent 走默认模型,
|
|
22
|
+
* 此时改定义等于凭空给它加一条绑定,会掩盖「默认模型」这一层语义。
|
|
23
|
+
*/
|
|
24
|
+
export function resolveModelWriteTarget(definition) {
|
|
25
|
+
return definition?.modelId ? "agent" : "default";
|
|
26
|
+
}
|
|
27
|
+
/**
|
|
28
|
+
* 切换模型并写入配置。
|
|
29
|
+
*
|
|
30
|
+
* 抛错场景:模型不存在、Agent 定义缺失(显式绑定的 Agent 却读不到文件)。
|
|
31
|
+
*/
|
|
32
|
+
export async function switchModel(options) {
|
|
33
|
+
const { config, modelId } = options;
|
|
34
|
+
const agentId = options.agentId || "default";
|
|
35
|
+
const now = options.now ?? new Date();
|
|
36
|
+
const model = (config.models ?? []).find((item) => item.id === modelId);
|
|
37
|
+
if (!model)
|
|
38
|
+
throw new Error(`模型 "${modelId}" 不存在`);
|
|
39
|
+
const readAgent = options.readAgent ?? ((id) => new AgentRepository(AGENTS_DIR).read(id));
|
|
40
|
+
const writeAgent = options.writeAgent ?? ((definition) => new AgentRepository(AGENTS_DIR).write(definition));
|
|
41
|
+
const save = options.saveConfig ?? saveConfig;
|
|
42
|
+
const definition = await readAgent(agentId);
|
|
43
|
+
const target = resolveModelWriteTarget(definition);
|
|
44
|
+
if (target === "agent" && definition) {
|
|
45
|
+
const next = { ...definition, modelId, updatedAt: now.toISOString() };
|
|
46
|
+
await writeAgent(next);
|
|
47
|
+
return {
|
|
48
|
+
target,
|
|
49
|
+
summary: `已切换模型:${model.name}(${model.id})· 已写入 Agent「${agentId}」的绑定模型`,
|
|
50
|
+
config,
|
|
51
|
+
definition: next,
|
|
52
|
+
};
|
|
53
|
+
}
|
|
54
|
+
const nextConfig = { ...config, defaultModel: modelId };
|
|
55
|
+
await save(nextConfig);
|
|
56
|
+
return {
|
|
57
|
+
target,
|
|
58
|
+
summary: `已切换模型:${model.name}(${model.id})· 已写入默认模型配置`,
|
|
59
|
+
config: nextConfig,
|
|
60
|
+
};
|
|
61
|
+
}
|
|
62
|
+
//# sourceMappingURL=model-switch.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"model-switch.js","sourceRoot":"","sources":["../src/model-switch.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;GAaG;AAEH,OAAO,EAAE,eAAe,EAAE,MAAM,oBAAoB,CAAC;AAErD,OAAO,EAAE,UAAU,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AAKrD;;;;;;GAMG;AACH,MAAM,UAAU,uBAAuB,CACrC,UAAoD;IAEpD,OAAO,UAAU,EAAE,OAAO,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,SAAS,CAAC;AACnD,CAAC;AAgCD;;;;GAIG;AACH,MAAM,CAAC,KAAK,UAAU,WAAW,CAAC,OAA2B;IAC3D,MAAM,EAAE,MAAM,EAAE,OAAO,EAAE,GAAG,OAAO,CAAC;IACpC,MAAM,OAAO,GAAG,OAAO,CAAC,OAAO,IAAI,SAAS,CAAC;IAC7C,MAAM,GAAG,GAAG,OAAO,CAAC,GAAG,IAAI,IAAI,IAAI,EAAE,CAAC;IAEtC,MAAM,KAAK,GAAG,CAAC,MAAM,CAAC,MAAM,IAAI,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,EAAE,KAAK,OAAO,CAAC,CAAC;IACxE,IAAI,CAAC,KAAK;QAAE,MAAM,IAAI,KAAK,CAAC,OAAO,OAAO,OAAO,CAAC,CAAC;IAEnD,MAAM,SAAS,GACb,OAAO,CAAC,SAAS,IAAI,CAAC,CAAC,EAAU,EAAE,EAAE,CAAC,IAAI,eAAe,CAAC,UAAU,CAAC,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC,CAAC;IAClF,MAAM,UAAU,GACd,OAAO,CAAC,UAAU,IAAI,CAAC,CAAC,UAA2B,EAAE,EAAE,CAAC,IAAI,eAAe,CAAC,UAAU,CAAC,CAAC,KAAK,CAAC,UAAU,CAAC,CAAC,CAAC;IAC7G,MAAM,IAAI,GAAG,OAAO,CAAC,UAAU,IAAI,UAAU,CAAC;IAE9C,MAAM,UAAU,GAAG,MAAM,SAAS,CAAC,OAAO,CAAC,CAAC;IAC5C,MAAM,MAAM,GAAG,uBAAuB,CAAC,UAAU,CAAC,CAAC;IAEnD,IAAI,MAAM,KAAK,OAAO,IAAI,UAAU,EAAE,CAAC;QACrC,MAAM,IAAI,GAAoB,EAAE,GAAG,UAAU,EAAE,OAAO,EAAE,SAAS,EAAE,GAAG,CAAC,WAAW,EAAE,EAAE,CAAC;QACvF,MAAM,UAAU,CAAC,IAAI,CAAC,CAAC;QACvB,OAAO;YACL,MAAM;YACN,OAAO,EAAE,SAAS,KAAK,CAAC,IAAI,IAAI,KAAK,CAAC,EAAE,gBAAgB,OAAO,QAAQ;YACvE,MAAM;YACN,UAAU,EAAE,IAAI;SACjB,CAAC;IACJ,CAAC;IAED,MAAM,UAAU,GAAc,EAAE,GAAG,MAAM,EAAE,YAAY,EAAE,OAAO,EAAE,CAAC;IACnE,MAAM,IAAI,CAAC,UAAU,CAAC,CAAC;IACvB,OAAO;QACL,MAAM;QACN,OAAO,EAAE,SAAS,KAAK,CAAC,IAAI,IAAI,KAAK,CAAC,EAAE,cAAc;QACtD,MAAM,EAAE,UAAU;KACnB,CAAC;AACJ,CAAC"}
|
|
@@ -0,0 +1,62 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* 思考档位(reasoning level)—— CLI 侧读写
|
|
3
|
+
*
|
|
4
|
+
* 分三层,边界很硬:
|
|
5
|
+
* - **协议差异在策略表**(`.ai-zen/reasoning-presets.json`):档位名与请求参数的对应关系,
|
|
6
|
+
* 由表声明,`Model.reasoningPreset` 引用。SDK 不猜、CLI 更不该猜。
|
|
7
|
+
* - **档位值存在 Agent**(`AgentDefinition.reasoningEffort`):同一个模型可以给编程 / 小说 /
|
|
8
|
+
* 闲聊三个 Agent 配不同强度,而模型自身的 `defaultParams` 不动。
|
|
9
|
+
* - **本模块只管 UI 语义**:列出可选档位、把档位名翻成中文、写回 Agent 定义。
|
|
10
|
+
*
|
|
11
|
+
* 参数怎么落到 `thinking` / `reasoning_effort` 由 SDK 的 `resolveModelParams()` 在
|
|
12
|
+
* `createModel` 阶段决定 —— CLI 一个厂商键名都不该知道。
|
|
13
|
+
*/
|
|
14
|
+
import type { AgentDefinition, AppConfig, Model, ReasoningPresets } from "@ai-zen/agents-sdk";
|
|
15
|
+
/**
|
|
16
|
+
* 已知档位的中文标签。
|
|
17
|
+
*
|
|
18
|
+
* 不设成穷举映射:档位名由策略表定义(用户可以自建策略、甚至自定档位名),
|
|
19
|
+
* 未知名字直接显示原文,比显示「?」有用得多。
|
|
20
|
+
*/
|
|
21
|
+
export declare const EFFORT_LABELS: Record<string, string>;
|
|
22
|
+
/** 档位 → 显示文案(未知档位名原样显示) */
|
|
23
|
+
export declare function effortLabel(level: string): string;
|
|
24
|
+
/** 一档都用不了的模型(未关联策略,或策略里一个档位都没有) */
|
|
25
|
+
export declare function isAdjustable(model?: Model | null, presets?: ReasoningPresets | null): boolean;
|
|
26
|
+
/** 可选档位(顺序 = 策略表声明顺序,含 `off` —— 它只是表里的一行) */
|
|
27
|
+
export declare function effortChoices(model?: Model | null, presets?: ReasoningPresets | null): string[];
|
|
28
|
+
/**
|
|
29
|
+
* 状态栏文案。
|
|
30
|
+
*
|
|
31
|
+
* - 模型不可调档 → `—`
|
|
32
|
+
* - Agent 显式声明了档位 → 「低」「中」「高」…(按 `EFFORT_LABELS`)
|
|
33
|
+
* - 可调但没声明 → 「默认」(跟随模型 `defaultParams`,如 DeepSeek 出厂就是「开思考但未指定档位」)
|
|
34
|
+
*/
|
|
35
|
+
export declare function describeEffort(model?: Model | null, presets?: ReasoningPresets | null, definition?: Pick<AgentDefinition, "reasoningEffort"> | null): string;
|
|
36
|
+
export interface SetAgentEffortOptions {
|
|
37
|
+
config: AppConfig;
|
|
38
|
+
/** 思考策略表(`readReasoningPresets()` 的结果) */
|
|
39
|
+
presets: ReasoningPresets;
|
|
40
|
+
/** 目标 Agent(缺省 default) */
|
|
41
|
+
agentId?: string;
|
|
42
|
+
/** 目标档位;`null` 表示清除声明、恢复跟随模型默认 */
|
|
43
|
+
effort: string | null;
|
|
44
|
+
/** 注入用(测试) */
|
|
45
|
+
readAgent?: (agentId: string) => Promise<AgentDefinition | null>;
|
|
46
|
+
writeAgent?: (definition: AgentDefinition) => Promise<void>;
|
|
47
|
+
now?: Date;
|
|
48
|
+
}
|
|
49
|
+
export interface SetAgentEffortResult {
|
|
50
|
+
definition: AgentDefinition;
|
|
51
|
+
/** 生效模型 */
|
|
52
|
+
model: Model;
|
|
53
|
+
summary: string;
|
|
54
|
+
}
|
|
55
|
+
/**
|
|
56
|
+
* 设置某 Agent 的思考档位并写入其定义文件。
|
|
57
|
+
*
|
|
58
|
+
* 抛错场景:Agent 不存在、Agent 未绑定可用模型、模型未关联策略、档位不在策略表里。
|
|
59
|
+
* 这些都属于「用户明确要求了一件做不到的事」,宁可报错也不要静默降级。
|
|
60
|
+
*/
|
|
61
|
+
export declare function setAgentEffort(options: SetAgentEffortOptions): Promise<SetAgentEffortResult>;
|
|
62
|
+
//# sourceMappingURL=reasoning-effort.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"reasoning-effort.d.ts","sourceRoot":"","sources":["../src/reasoning-effort.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;GAYG;AAGH,OAAO,KAAK,EACV,eAAe,EACf,SAAS,EACT,KAAK,EACL,gBAAgB,EACjB,MAAM,oBAAoB,CAAC;AAI5B;;;;;GAKG;AACH,eAAO,MAAM,aAAa,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAShD,CAAC;AAEF,2BAA2B;AAC3B,wBAAgB,WAAW,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,CAEjD;AAED,mCAAmC;AACnC,wBAAgB,YAAY,CAAC,KAAK,CAAC,EAAE,KAAK,GAAG,IAAI,EAAE,OAAO,CAAC,EAAE,gBAAgB,GAAG,IAAI,GAAG,OAAO,CAE7F;AAED,6CAA6C;AAC7C,wBAAgB,aAAa,CAAC,KAAK,CAAC,EAAE,KAAK,GAAG,IAAI,EAAE,OAAO,CAAC,EAAE,gBAAgB,GAAG,IAAI,GAAG,MAAM,EAAE,CAE/F;AAED;;;;;;GAMG;AACH,wBAAgB,cAAc,CAC5B,KAAK,CAAC,EAAE,KAAK,GAAG,IAAI,EACpB,OAAO,CAAC,EAAE,gBAAgB,GAAG,IAAI,EACjC,UAAU,CAAC,EAAE,IAAI,CAAC,eAAe,EAAE,iBAAiB,CAAC,GAAG,IAAI,GAC3D,MAAM,CAIR;AAED,MAAM,WAAW,qBAAqB;IACpC,MAAM,EAAE,SAAS,CAAC;IAClB,0CAA0C;IAC1C,OAAO,EAAE,gBAAgB,CAAC;IAC1B,2BAA2B;IAC3B,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,kCAAkC;IAClC,MAAM,EAAE,MAAM,GAAG,IAAI,CAAC;IACtB,cAAc;IACd,SAAS,CAAC,EAAE,CAAC,OAAO,EAAE,MAAM,KAAK,OAAO,CAAC,eAAe,GAAG,IAAI,CAAC,CAAC;IACjE,UAAU,CAAC,EAAE,CAAC,UAAU,EAAE,eAAe,KAAK,OAAO,CAAC,IAAI,CAAC,CAAC;IAC5D,GAAG,CAAC,EAAE,IAAI,CAAC;CACZ;AAED,MAAM,WAAW,oBAAoB;IACnC,UAAU,EAAE,eAAe,CAAC;IAC5B,WAAW;IACX,KAAK,EAAE,KAAK,CAAC;IACb,OAAO,EAAE,MAAM,CAAC;CACjB;AAED;;;;;GAKG;AACH,wBAAsB,cAAc,CAClC,OAAO,EAAE,qBAAqB,GAC7B,OAAO,CAAC,oBAAoB,CAAC,CA0C/B"}
|
|
@@ -0,0 +1,98 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* 思考档位(reasoning level)—— CLI 侧读写
|
|
3
|
+
*
|
|
4
|
+
* 分三层,边界很硬:
|
|
5
|
+
* - **协议差异在策略表**(`.ai-zen/reasoning-presets.json`):档位名与请求参数的对应关系,
|
|
6
|
+
* 由表声明,`Model.reasoningPreset` 引用。SDK 不猜、CLI 更不该猜。
|
|
7
|
+
* - **档位值存在 Agent**(`AgentDefinition.reasoningEffort`):同一个模型可以给编程 / 小说 /
|
|
8
|
+
* 闲聊三个 Agent 配不同强度,而模型自身的 `defaultParams` 不动。
|
|
9
|
+
* - **本模块只管 UI 语义**:列出可选档位、把档位名翻成中文、写回 Agent 定义。
|
|
10
|
+
*
|
|
11
|
+
* 参数怎么落到 `thinking` / `reasoning_effort` 由 SDK 的 `resolveModelParams()` 在
|
|
12
|
+
* `createModel` 阶段决定 —— CLI 一个厂商键名都不该知道。
|
|
13
|
+
*/
|
|
14
|
+
import { AgentRepository } from "@ai-zen/agents-sdk";
|
|
15
|
+
import { modelLevels, resolveReasoningEffort } from "@ai-zen/agents-sdk";
|
|
16
|
+
import { AGENTS_DIR } from "./config.js";
|
|
17
|
+
/**
|
|
18
|
+
* 已知档位的中文标签。
|
|
19
|
+
*
|
|
20
|
+
* 不设成穷举映射:档位名由策略表定义(用户可以自建策略、甚至自定档位名),
|
|
21
|
+
* 未知名字直接显示原文,比显示「?」有用得多。
|
|
22
|
+
*/
|
|
23
|
+
export const EFFORT_LABELS = {
|
|
24
|
+
off: "关",
|
|
25
|
+
none: "关",
|
|
26
|
+
minimal: "极低",
|
|
27
|
+
low: "低",
|
|
28
|
+
medium: "中",
|
|
29
|
+
high: "高",
|
|
30
|
+
xhigh: "极高",
|
|
31
|
+
max: "最高",
|
|
32
|
+
};
|
|
33
|
+
/** 档位 → 显示文案(未知档位名原样显示) */
|
|
34
|
+
export function effortLabel(level) {
|
|
35
|
+
return EFFORT_LABELS[level] ?? level;
|
|
36
|
+
}
|
|
37
|
+
/** 一档都用不了的模型(未关联策略,或策略里一个档位都没有) */
|
|
38
|
+
export function isAdjustable(model, presets) {
|
|
39
|
+
return modelLevels(model, presets).length > 0;
|
|
40
|
+
}
|
|
41
|
+
/** 可选档位(顺序 = 策略表声明顺序,含 `off` —— 它只是表里的一行) */
|
|
42
|
+
export function effortChoices(model, presets) {
|
|
43
|
+
return modelLevels(model, presets);
|
|
44
|
+
}
|
|
45
|
+
/**
|
|
46
|
+
* 状态栏文案。
|
|
47
|
+
*
|
|
48
|
+
* - 模型不可调档 → `—`
|
|
49
|
+
* - Agent 显式声明了档位 → 「低」「中」「高」…(按 `EFFORT_LABELS`)
|
|
50
|
+
* - 可调但没声明 → 「默认」(跟随模型 `defaultParams`,如 DeepSeek 出厂就是「开思考但未指定档位」)
|
|
51
|
+
*/
|
|
52
|
+
export function describeEffort(model, presets, definition) {
|
|
53
|
+
if (!isAdjustable(model, presets))
|
|
54
|
+
return "—";
|
|
55
|
+
const effective = resolveReasoningEffort(model, presets, definition);
|
|
56
|
+
return effective ? effortLabel(effective) : "默认";
|
|
57
|
+
}
|
|
58
|
+
/**
|
|
59
|
+
* 设置某 Agent 的思考档位并写入其定义文件。
|
|
60
|
+
*
|
|
61
|
+
* 抛错场景:Agent 不存在、Agent 未绑定可用模型、模型未关联策略、档位不在策略表里。
|
|
62
|
+
* 这些都属于「用户明确要求了一件做不到的事」,宁可报错也不要静默降级。
|
|
63
|
+
*/
|
|
64
|
+
export async function setAgentEffort(options) {
|
|
65
|
+
const { config, presets, effort } = options;
|
|
66
|
+
const agentId = options.agentId || "default";
|
|
67
|
+
const now = options.now ?? new Date();
|
|
68
|
+
const readAgent = options.readAgent ?? ((id) => new AgentRepository(AGENTS_DIR).read(id));
|
|
69
|
+
const writeAgent = options.writeAgent ??
|
|
70
|
+
((definition) => new AgentRepository(AGENTS_DIR).write(definition));
|
|
71
|
+
const definition = await readAgent(agentId);
|
|
72
|
+
if (!definition)
|
|
73
|
+
throw new Error(`Agent "${agentId}" 不存在`);
|
|
74
|
+
const modelId = definition.modelId ?? config.defaultModel;
|
|
75
|
+
const model = (config.models ?? []).find((item) => item.id === modelId);
|
|
76
|
+
if (!model)
|
|
77
|
+
throw new Error(`模型 "${modelId}" 不存在,请先用 /model 或 /config 检查`);
|
|
78
|
+
const allowed = effortChoices(model, presets);
|
|
79
|
+
if (allowed.length === 0) {
|
|
80
|
+
throw new Error(`模型 "${model.id}" 未关联可用的思考策略(reasoningPreset),无法设置思考强度`);
|
|
81
|
+
}
|
|
82
|
+
if (effort !== null && !allowed.includes(effort)) {
|
|
83
|
+
throw new Error(`策略 "${model.reasoningPreset}" 没有档位 "${effort}"(可选:${allowed.join(" / ")})`);
|
|
84
|
+
}
|
|
85
|
+
const next = { ...definition, updatedAt: now.toISOString() };
|
|
86
|
+
if (effort === null)
|
|
87
|
+
delete next.reasoningEffort;
|
|
88
|
+
else
|
|
89
|
+
next.reasoningEffort = effort;
|
|
90
|
+
await writeAgent(next);
|
|
91
|
+
const label = effort === null ? "跟随模型默认" : `「${effortLabel(effort)}」`;
|
|
92
|
+
return {
|
|
93
|
+
definition: next,
|
|
94
|
+
model,
|
|
95
|
+
summary: `思考强度已设为 ${label} · 写入 Agent「${agentId}」(模型 ${model.id})`,
|
|
96
|
+
};
|
|
97
|
+
}
|
|
98
|
+
//# sourceMappingURL=reasoning-effort.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"reasoning-effort.js","sourceRoot":"","sources":["../src/reasoning-effort.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,48 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* SDK 全局日志接管 —— 关掉库自带的 `console` 兜底。
|
|
3
|
+
*
|
|
4
|
+
* 背景:SDK 的 `getLogger()` 默认实现是 `console.log / console.warn / console.error`
|
|
5
|
+
* (`@ai-zen/agents-sdk` 的 `shared/logger.ts`)。对通用库来说这是合理兜底,对 Ink TUI
|
|
6
|
+
* 却是灾难 —— `console.log` 直接写 stdout,会穿到 Ink 的渲染区外面把界面撕成乱码。
|
|
7
|
+
* 例如 `load_mcp` 有一行 `log.info(JSON.stringify(manifest, null, 2))`,未接管时整份
|
|
8
|
+
* tools / resources 清单会砸在界面上。
|
|
9
|
+
*
|
|
10
|
+
* 所以 TUI 启动第一件事就是接管:
|
|
11
|
+
* - 默认**全部丢弃**(界面上不该出现库的内部日志,用户也读不懂);
|
|
12
|
+
* - 需要排查时用 `AIZ_DEBUG_SDK=1` 落盘,既不污染渲染也不丢信息。
|
|
13
|
+
*
|
|
14
|
+
* 用法:
|
|
15
|
+
* aiz → SDK 日志静默
|
|
16
|
+
* AIZ_DEBUG_SDK=1 aiz → 追加写到 <tmp>/aiz-sdk.log
|
|
17
|
+
* AIZ_DEBUG_SDK=1 AIZ_SDK_LOG_FILE=/path aiz → 写到指定文件
|
|
18
|
+
*
|
|
19
|
+
* 与 `key-debug.ts` 同一套约定(环境变量开关 + tmp 下日志文件),免得排查时记两套。
|
|
20
|
+
*
|
|
21
|
+
* 注意 stdio 模式不需要本模块:`stdio-runner.ts` 已把日志改道 stderr —— 那里 stdout
|
|
22
|
+
* 只留给结果,日志本身是有用的。本模块只服务「界面被占用」的 TUI。
|
|
23
|
+
*/
|
|
24
|
+
import { type Logger } from "@ai-zen/agents-sdk";
|
|
25
|
+
/** 是否把 SDK 日志落盘(默认关闭) */
|
|
26
|
+
export declare const SDK_LOG_ENABLED: boolean;
|
|
27
|
+
/** 日志落盘路径(测试与用户都可能改写,故导出常量) */
|
|
28
|
+
export declare const SDK_LOG_FILE: string;
|
|
29
|
+
/** 单行日志格式:`<ISO 时间> [level] message` */
|
|
30
|
+
export declare function formatSdkLogLine(level: keyof Logger, message: string, at?: Date): string;
|
|
31
|
+
/**
|
|
32
|
+
* 落盘版日志器。
|
|
33
|
+
*
|
|
34
|
+
* 写失败要吞掉:日志是旁路能力,磁盘满 / 权限不足时绝不能把 TUI 拖垮。
|
|
35
|
+
*/
|
|
36
|
+
export declare function createFileLogger(file: string): Logger;
|
|
37
|
+
/** 全静默日志器(TUI 默认) */
|
|
38
|
+
export declare function createSilentLogger(): Logger;
|
|
39
|
+
/**
|
|
40
|
+
* 接管 SDK 全局日志:默认静默,`AIZ_DEBUG_SDK=1` 时改为落盘。
|
|
41
|
+
*
|
|
42
|
+
* 返回实际安装的日志器,便于测试断言 / 上层复用。
|
|
43
|
+
*/
|
|
44
|
+
export declare function installSdkLogger(options?: {
|
|
45
|
+
enabled?: boolean;
|
|
46
|
+
file?: string;
|
|
47
|
+
}): Logger;
|
|
48
|
+
//# sourceMappingURL=sdk-log.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"sdk-log.d.ts","sourceRoot":"","sources":["../src/sdk-log.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;GAsBG;AAGH,OAAO,EAAa,KAAK,MAAM,EAAE,MAAM,oBAAoB,CAAC;AAE5D,yBAAyB;AACzB,eAAO,MAAM,eAAe,SAAoC,CAAC;AAEjE,+BAA+B;AAC/B,eAAO,MAAM,YAAY,QAAqD,CAAC;AAE/E,wCAAwC;AACxC,wBAAgB,gBAAgB,CAC9B,KAAK,EAAE,MAAM,MAAM,EACnB,OAAO,EAAE,MAAM,EACf,EAAE,GAAE,IAAiB,GACpB,MAAM,CAER;AAED;;;;GAIG;AACH,wBAAgB,gBAAgB,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAWrD;AAED,qBAAqB;AACrB,wBAAgB,kBAAkB,IAAI,MAAM,CAG3C;AAED;;;;GAIG;AACH,wBAAgB,gBAAgB,CAC9B,OAAO,GAAE;IAAE,OAAO,CAAC,EAAE,OAAO,CAAC;IAAC,IAAI,CAAC,EAAE,MAAM,CAAA;CAAO,GACjD,MAAM,CAMR"}
|
package/dist/sdk-log.js
ADDED
|
@@ -0,0 +1,67 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* SDK 全局日志接管 —— 关掉库自带的 `console` 兜底。
|
|
3
|
+
*
|
|
4
|
+
* 背景:SDK 的 `getLogger()` 默认实现是 `console.log / console.warn / console.error`
|
|
5
|
+
* (`@ai-zen/agents-sdk` 的 `shared/logger.ts`)。对通用库来说这是合理兜底,对 Ink TUI
|
|
6
|
+
* 却是灾难 —— `console.log` 直接写 stdout,会穿到 Ink 的渲染区外面把界面撕成乱码。
|
|
7
|
+
* 例如 `load_mcp` 有一行 `log.info(JSON.stringify(manifest, null, 2))`,未接管时整份
|
|
8
|
+
* tools / resources 清单会砸在界面上。
|
|
9
|
+
*
|
|
10
|
+
* 所以 TUI 启动第一件事就是接管:
|
|
11
|
+
* - 默认**全部丢弃**(界面上不该出现库的内部日志,用户也读不懂);
|
|
12
|
+
* - 需要排查时用 `AIZ_DEBUG_SDK=1` 落盘,既不污染渲染也不丢信息。
|
|
13
|
+
*
|
|
14
|
+
* 用法:
|
|
15
|
+
* aiz → SDK 日志静默
|
|
16
|
+
* AIZ_DEBUG_SDK=1 aiz → 追加写到 <tmp>/aiz-sdk.log
|
|
17
|
+
* AIZ_DEBUG_SDK=1 AIZ_SDK_LOG_FILE=/path aiz → 写到指定文件
|
|
18
|
+
*
|
|
19
|
+
* 与 `key-debug.ts` 同一套约定(环境变量开关 + tmp 下日志文件),免得排查时记两套。
|
|
20
|
+
*
|
|
21
|
+
* 注意 stdio 模式不需要本模块:`stdio-runner.ts` 已把日志改道 stderr —— 那里 stdout
|
|
22
|
+
* 只留给结果,日志本身是有用的。本模块只服务「界面被占用」的 TUI。
|
|
23
|
+
*/
|
|
24
|
+
import { appendFileSync } from "node:fs";
|
|
25
|
+
import { setLogger } from "@ai-zen/agents-sdk";
|
|
26
|
+
/** 是否把 SDK 日志落盘(默认关闭) */
|
|
27
|
+
export const SDK_LOG_ENABLED = process.env.AIZ_DEBUG_SDK === "1";
|
|
28
|
+
/** 日志落盘路径(测试与用户都可能改写,故导出常量) */
|
|
29
|
+
export const SDK_LOG_FILE = process.env.AIZ_SDK_LOG_FILE || "/tmp/aiz-sdk.log";
|
|
30
|
+
/** 单行日志格式:`<ISO 时间> [level] message` */
|
|
31
|
+
export function formatSdkLogLine(level, message, at = new Date()) {
|
|
32
|
+
return `${at.toISOString()} [${level}] ${message}`;
|
|
33
|
+
}
|
|
34
|
+
/**
|
|
35
|
+
* 落盘版日志器。
|
|
36
|
+
*
|
|
37
|
+
* 写失败要吞掉:日志是旁路能力,磁盘满 / 权限不足时绝不能把 TUI 拖垮。
|
|
38
|
+
*/
|
|
39
|
+
export function createFileLogger(file) {
|
|
40
|
+
const write = (level) => (message) => {
|
|
41
|
+
try {
|
|
42
|
+
appendFileSync(file, `${formatSdkLogLine(level, message)}\n`);
|
|
43
|
+
}
|
|
44
|
+
catch {
|
|
45
|
+
/* 诊断失败绝不能影响主流程 */
|
|
46
|
+
}
|
|
47
|
+
};
|
|
48
|
+
return { info: write("info"), warn: write("warn"), error: write("error") };
|
|
49
|
+
}
|
|
50
|
+
/** 全静默日志器(TUI 默认) */
|
|
51
|
+
export function createSilentLogger() {
|
|
52
|
+
const noop = () => { };
|
|
53
|
+
return { info: noop, warn: noop, error: noop };
|
|
54
|
+
}
|
|
55
|
+
/**
|
|
56
|
+
* 接管 SDK 全局日志:默认静默,`AIZ_DEBUG_SDK=1` 时改为落盘。
|
|
57
|
+
*
|
|
58
|
+
* 返回实际安装的日志器,便于测试断言 / 上层复用。
|
|
59
|
+
*/
|
|
60
|
+
export function installSdkLogger(options = {}) {
|
|
61
|
+
const enabled = options.enabled ?? SDK_LOG_ENABLED;
|
|
62
|
+
const file = options.file ?? SDK_LOG_FILE;
|
|
63
|
+
const logger = enabled ? createFileLogger(file) : createSilentLogger();
|
|
64
|
+
setLogger(logger);
|
|
65
|
+
return logger;
|
|
66
|
+
}
|
|
67
|
+
//# sourceMappingURL=sdk-log.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"sdk-log.js","sourceRoot":"","sources":["../src/sdk-log.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;GAsBG;AAEH,OAAO,EAAE,cAAc,EAAE,MAAM,SAAS,CAAC;AACzC,OAAO,EAAE,SAAS,EAAe,MAAM,oBAAoB,CAAC;AAE5D,yBAAyB;AACzB,MAAM,CAAC,MAAM,eAAe,GAAG,OAAO,CAAC,GAAG,CAAC,aAAa,KAAK,GAAG,CAAC;AAEjE,+BAA+B;AAC/B,MAAM,CAAC,MAAM,YAAY,GAAG,OAAO,CAAC,GAAG,CAAC,gBAAgB,IAAI,kBAAkB,CAAC;AAE/E,wCAAwC;AACxC,MAAM,UAAU,gBAAgB,CAC9B,KAAmB,EACnB,OAAe,EACf,KAAW,IAAI,IAAI,EAAE;IAErB,OAAO,GAAG,EAAE,CAAC,WAAW,EAAE,KAAK,KAAK,KAAK,OAAO,EAAE,CAAC;AACrD,CAAC;AAED;;;;GAIG;AACH,MAAM,UAAU,gBAAgB,CAAC,IAAY;IAC3C,MAAM,KAAK,GACT,CAAC,KAAmB,EAAE,EAAE,CACxB,CAAC,OAAe,EAAQ,EAAE;QACxB,IAAI,CAAC;YACH,cAAc,CAAC,IAAI,EAAE,GAAG,gBAAgB,CAAC,KAAK,EAAE,OAAO,CAAC,IAAI,CAAC,CAAC;QAChE,CAAC;QAAC,MAAM,CAAC;YACP,kBAAkB;QACpB,CAAC;IACH,CAAC,CAAC;IACJ,OAAO,EAAE,IAAI,EAAE,KAAK,CAAC,MAAM,CAAC,EAAE,IAAI,EAAE,KAAK,CAAC,MAAM,CAAC,EAAE,KAAK,EAAE,KAAK,CAAC,OAAO,CAAC,EAAE,CAAC;AAC7E,CAAC;AAED,qBAAqB;AACrB,MAAM,UAAU,kBAAkB;IAChC,MAAM,IAAI,GAAG,GAAS,EAAE,GAAE,CAAC,CAAC;IAC5B,OAAO,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC;AACjD,CAAC;AAED;;;;GAIG;AACH,MAAM,UAAU,gBAAgB,CAC9B,UAAgD,EAAE;IAElD,MAAM,OAAO,GAAG,OAAO,CAAC,OAAO,IAAI,eAAe,CAAC;IACnD,MAAM,IAAI,GAAG,OAAO,CAAC,IAAI,IAAI,YAAY,CAAC;IAC1C,MAAM,MAAM,GAAG,OAAO,CAAC,CAAC,CAAC,gBAAgB,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,kBAAkB,EAAE,CAAC;IACvE,SAAS,CAAC,MAAM,CAAC,CAAC;IAClB,OAAO,MAAM,CAAC;AAChB,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"stdio-runner.d.ts","sourceRoot":"","sources":["../src/stdio-runner.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AAEH,OAAO,EAAE,OAAO,EAAE,MAAM,qBAAqB,CAAC;
|
|
1
|
+
{"version":3,"file":"stdio-runner.d.ts","sourceRoot":"","sources":["../src/stdio-runner.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AAEH,OAAO,EAAE,OAAO,EAAE,MAAM,qBAAqB,CAAC;AAc9C,MAAM,WAAW,eAAe;IAC9B,qCAAqC;IACrC,WAAW,EAAE,MAAM,CAAC;IACpB,6BAA6B;IAC7B,IAAI,EAAE,OAAO,CAAC;CACf;AAOD;;;GAGG;AACH,wBAAsB,SAAS,IAAI,OAAO,CAAC,MAAM,CAAC,CAWjD;AAED;;;;GAIG;AACH,wBAAgB,WAAW,CAAC,WAAW,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,MAAM,CAMtE;AAED,oCAAoC;AACpC,wBAAgB,WAAW,CAAC,OAAO,EAAE,OAAO,CAAC,cAAc,GAAG,SAAS,GAAG,MAAM,CAY/E;AAkCD,6BAA6B;AAC7B,wBAAsB,QAAQ,CAAC,OAAO,EAAE,eAAe,GAAG,OAAO,CAAC,MAAM,CAAC,CAuExE"}
|
package/dist/stdio-runner.js
CHANGED
|
@@ -88,9 +88,8 @@ async function resolveTarget() {
|
|
|
88
88
|
if (!endpoint.apiKey) {
|
|
89
89
|
throw new Error(`端点 "${endpoint.name}" 的 API Key 未设置,请先运行 \`ai\` 进入交互界面配置`);
|
|
90
90
|
}
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
return { modelId, agentId: config.defaultAgent ?? "default", maxTokens };
|
|
91
|
+
// 阈值由配置直接给出(旧字段已在 SDK 的 ConfigManager.read() 里迁移过)
|
|
92
|
+
return { modelId, agentId: config.defaultAgent ?? "default", tokenThresholds: model.tokenThresholds };
|
|
94
93
|
}
|
|
95
94
|
/** 运行一次纯 stdio 对话,返回进程退出码 */
|
|
96
95
|
export async function runStdio(options) {
|
|
@@ -107,13 +106,13 @@ export async function runStdio(options) {
|
|
|
107
106
|
const originalLog = console.log;
|
|
108
107
|
console.log = (...args) => logStderr(args.map((a) => String(a)).join(" "));
|
|
109
108
|
try {
|
|
110
|
-
const { modelId, agentId,
|
|
109
|
+
const { modelId, agentId, tokenThresholds } = await resolveTarget();
|
|
111
110
|
const agent = await createAgent({ agentId });
|
|
112
111
|
agent.use(new CwdTrackerPlugin());
|
|
113
112
|
agent.use(new AutoRefreshToolsPlugin());
|
|
114
|
-
if (
|
|
115
|
-
agent.use(new ContextGuardPlugin({
|
|
116
|
-
agent.use(new SubAgentGuardInstallerPlugin({
|
|
113
|
+
if (tokenThresholds) {
|
|
114
|
+
agent.use(new ContextGuardPlugin({ guardTokens: tokenThresholds.guard }));
|
|
115
|
+
agent.use(new SubAgentGuardInstallerPlugin({ guardTokens: tokenThresholds.guard }));
|
|
117
116
|
}
|
|
118
117
|
await agent.init();
|
|
119
118
|
const messages = await agent.send(prompt);
|
package/dist/stdio-runner.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"stdio-runner.js","sourceRoot":"","sources":["../src/stdio-runner.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AAEH,OAAO,EAAE,OAAO,EAAE,MAAM,qBAAqB,CAAC;AAC9C,OAAO,EACL,sBAAsB,EACtB,kBAAkB,EAClB,SAAS,GACV,MAAM,oBAAoB,CAAC;AAC5B,OAAO,EAAE,WAAW,EAAE,MAAM,oBAAoB,CAAC;AACjD,OAAO,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AACzC,OAAO,EAAE,gBAAgB,EAAE,MAAM,yBAAyB,CAAC;AAC3D,OAAO,EAAE,4BAA4B,EAAE,MAAM,6BAA6B,CAAC;
|
|
1
|
+
{"version":3,"file":"stdio-runner.js","sourceRoot":"","sources":["../src/stdio-runner.ts"],"names":[],"mappings":"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"}
|
|
@@ -12,8 +12,8 @@
|
|
|
12
12
|
* init)。
|
|
13
13
|
*
|
|
14
14
|
* 约束口径(与主 Agent 一致,仅此一项):把主 Agent 同款的 `ContextGuardPlugin` 装到子 Agent 上
|
|
15
|
-
* ——
|
|
16
|
-
*
|
|
15
|
+
* —— 同一个 `guardTokens`(当前模型的 `tokenThresholds.guard`),使「请求前用量超过硬线即中断」
|
|
16
|
+
* 对子 Agent 同样成立。
|
|
17
17
|
* **不设**轮次上限,**不设**工具调用次数上限。
|
|
18
18
|
*
|
|
19
19
|
* 中断语义:抛错即结束子 Agent 的 run;异常经 `AgentTool` 的 finally(分发 onSubAgentEnd)
|
|
@@ -27,8 +27,8 @@
|
|
|
27
27
|
import type { AgentPlugin } from "@ai-zen/agents-sdk";
|
|
28
28
|
import type { SubAgentContext } from "@ai-zen/agents-core";
|
|
29
29
|
export interface SubAgentGuardOptions {
|
|
30
|
-
/**
|
|
31
|
-
|
|
30
|
+
/** 强行阻断阈值;与主 Agent 同源(当前模型的 `tokenThresholds.guard`) */
|
|
31
|
+
guardTokens: number;
|
|
32
32
|
}
|
|
33
33
|
/**
|
|
34
34
|
* 子 Agent 护栏安装器(装在**宿主 Agent** 上)。
|
|
@@ -38,7 +38,7 @@ export interface SubAgentGuardOptions {
|
|
|
38
38
|
* 由 `ContextGuardPlugin` 按阈值决定。
|
|
39
39
|
*/
|
|
40
40
|
export declare class SubAgentGuardInstallerPlugin implements AgentPlugin {
|
|
41
|
-
private readonly
|
|
41
|
+
private readonly guardTokens;
|
|
42
42
|
constructor(options: SubAgentGuardOptions);
|
|
43
43
|
onSubAgentStart({ subAgent }: SubAgentContext): void;
|
|
44
44
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"sub-agent-guard-plugin.d.ts","sourceRoot":"","sources":["../src/sub-agent-guard-plugin.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;GAyBG;AAGH,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,oBAAoB,CAAC;AACtD,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,qBAAqB,CAAC;AAE3D,MAAM,WAAW,oBAAoB;IACnC,
|
|
1
|
+
{"version":3,"file":"sub-agent-guard-plugin.d.ts","sourceRoot":"","sources":["../src/sub-agent-guard-plugin.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;GAyBG;AAGH,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,oBAAoB,CAAC;AACtD,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,qBAAqB,CAAC;AAE3D,MAAM,WAAW,oBAAoB;IACnC,wDAAwD;IACxD,WAAW,EAAE,MAAM,CAAC;CACrB;AAED;;;;;;GAMG;AACH,qBAAa,4BAA6B,YAAW,WAAW;IAC9D,OAAO,CAAC,QAAQ,CAAC,WAAW,CAAS;gBAEzB,OAAO,EAAE,oBAAoB;IAIzC,eAAe,CAAC,EAAE,QAAQ,EAAE,EAAE,eAAe,GAAG,IAAI;CASrD"}
|
|
@@ -12,8 +12,8 @@
|
|
|
12
12
|
* init)。
|
|
13
13
|
*
|
|
14
14
|
* 约束口径(与主 Agent 一致,仅此一项):把主 Agent 同款的 `ContextGuardPlugin` 装到子 Agent 上
|
|
15
|
-
* ——
|
|
16
|
-
*
|
|
15
|
+
* —— 同一个 `guardTokens`(当前模型的 `tokenThresholds.guard`),使「请求前用量超过硬线即中断」
|
|
16
|
+
* 对子 Agent 同样成立。
|
|
17
17
|
* **不设**轮次上限,**不设**工具调用次数上限。
|
|
18
18
|
*
|
|
19
19
|
* 中断语义:抛错即结束子 Agent 的 run;异常经 `AgentTool` 的 finally(分发 onSubAgentEnd)
|
|
@@ -33,15 +33,15 @@ import { ContextGuardPlugin } from "@ai-zen/agents-sdk";
|
|
|
33
33
|
* 由 `ContextGuardPlugin` 按阈值决定。
|
|
34
34
|
*/
|
|
35
35
|
export class SubAgentGuardInstallerPlugin {
|
|
36
|
-
|
|
36
|
+
guardTokens;
|
|
37
37
|
constructor(options) {
|
|
38
|
-
this.
|
|
38
|
+
this.guardTokens = options.guardTokens;
|
|
39
39
|
}
|
|
40
40
|
onSubAgentStart({ subAgent }) {
|
|
41
|
-
// 与主 Agent
|
|
42
|
-
subAgent.use(new ContextGuardPlugin({
|
|
41
|
+
// 与主 Agent 完全同款:同一个 guardTokens 绝对阈值
|
|
42
|
+
subAgent.use(new ContextGuardPlugin({ guardTokens: this.guardTokens }));
|
|
43
43
|
// 传染到孙级:子 Agent 若再委派,其子 Agent 同样被安插
|
|
44
|
-
subAgent.use(new SubAgentGuardInstallerPlugin({
|
|
44
|
+
subAgent.use(new SubAgentGuardInstallerPlugin({ guardTokens: this.guardTokens }));
|
|
45
45
|
}
|
|
46
46
|
}
|
|
47
47
|
//# sourceMappingURL=sub-agent-guard-plugin.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"sub-agent-guard-plugin.js","sourceRoot":"","sources":["../src/sub-agent-guard-plugin.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;GAyBG;AAEH,OAAO,EAAE,kBAAkB,EAAE,MAAM,oBAAoB,CAAC;AASxD;;;;;;GAMG;AACH,MAAM,OAAO,4BAA4B;IACtB,
|
|
1
|
+
{"version":3,"file":"sub-agent-guard-plugin.js","sourceRoot":"","sources":["../src/sub-agent-guard-plugin.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;GAyBG;AAEH,OAAO,EAAE,kBAAkB,EAAE,MAAM,oBAAoB,CAAC;AASxD;;;;;;GAMG;AACH,MAAM,OAAO,4BAA4B;IACtB,WAAW,CAAS;IAErC,YAAY,OAA6B;QACvC,IAAI,CAAC,WAAW,GAAG,OAAO,CAAC,WAAW,CAAC;IACzC,CAAC;IAED,eAAe,CAAC,EAAE,QAAQ,EAAmB;QAC3C,qCAAqC;QACrC,QAAQ,CAAC,GAAG,CAAC,IAAI,kBAAkB,CAAC,EAAE,WAAW,EAAE,IAAI,CAAC,WAAW,EAAE,CAAC,CAAC,CAAC;QAExE,oCAAoC;QACpC,QAAQ,CAAC,GAAG,CACV,IAAI,4BAA4B,CAAC,EAAE,WAAW,EAAE,IAAI,CAAC,WAAW,EAAE,CAAC,CACpE,CAAC;IACJ,CAAC;CACF"}
|