@ai-zen/cli 1.0.0-alpha.20 → 1.0.0-alpha.23
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 +205 -0
- package/README.md +45 -17
- package/README.zh.md +45 -17
- package/dist/agent-creator.d.ts.map +1 -1
- package/dist/agent-creator.js +32 -10
- package/dist/agent-creator.js.map +1 -1
- package/dist/agent-switch.d.ts +61 -0
- package/dist/agent-switch.d.ts.map +1 -0
- package/dist/agent-switch.js +83 -0
- package/dist/agent-switch.js.map +1 -0
- package/dist/agents-store.d.ts +6 -1
- package/dist/agents-store.d.ts.map +1 -1
- package/dist/agents-store.js +6 -1
- package/dist/agents-store.js.map +1 -1
- package/dist/auto-migrate-confirm.d.ts.map +1 -1
- package/dist/auto-migrate-confirm.js +2 -1
- package/dist/auto-migrate-confirm.js.map +1 -1
- package/dist/config-editor.d.ts +9 -1
- package/dist/config-editor.d.ts.map +1 -1
- package/dist/config-editor.js +30 -19
- package/dist/config-editor.js.map +1 -1
- package/dist/config.d.ts +1 -1
- package/dist/config.d.ts.map +1 -1
- package/dist/config.js +29 -13
- package/dist/config.js.map +1 -1
- package/dist/conversation-commands/registry.d.ts +123 -4
- package/dist/conversation-commands/registry.d.ts.map +1 -1
- package/dist/conversation-commands/registry.js +92 -17
- package/dist/conversation-commands/registry.js.map +1 -1
- package/dist/conversation-persist-plugin.d.ts.map +1 -1
- package/dist/conversation-persist-plugin.js +6 -14
- package/dist/conversation-persist-plugin.js.map +1 -1
- package/dist/conversation-repository.d.ts +68 -14
- package/dist/conversation-repository.d.ts.map +1 -1
- package/dist/conversation-repository.js +81 -23
- package/dist/conversation-repository.js.map +1 -1
- package/dist/cwd-tracker-plugin.d.ts.map +1 -1
- package/dist/cwd-tracker-plugin.js +6 -2
- package/dist/cwd-tracker-plugin.js.map +1 -1
- package/dist/format-time.d.ts +17 -6
- package/dist/format-time.d.ts.map +1 -1
- package/dist/format-time.js +32 -14
- package/dist/format-time.js.map +1 -1
- package/dist/handoff-service.d.ts.map +1 -1
- package/dist/handoff-service.js +22 -19
- package/dist/handoff-service.js.map +1 -1
- package/dist/hook.d.ts.map +1 -1
- package/dist/hook.js +69 -15
- package/dist/hook.js.map +1 -1
- package/dist/i18n/en-wizard.d.ts +8 -0
- package/dist/i18n/en-wizard.d.ts.map +1 -0
- package/dist/i18n/en-wizard.js +290 -0
- package/dist/i18n/en-wizard.js.map +1 -0
- package/dist/i18n/en.d.ts +7 -0
- package/dist/i18n/en.d.ts.map +1 -0
- package/dist/i18n/en.js +223 -0
- package/dist/i18n/en.js.map +1 -0
- package/dist/i18n/index.d.ts +57 -0
- package/dist/i18n/index.d.ts.map +1 -0
- package/dist/i18n/index.js +109 -0
- package/dist/i18n/index.js.map +1 -0
- package/dist/i18n/preferences.d.ts +34 -0
- package/dist/i18n/preferences.d.ts.map +1 -0
- package/dist/i18n/preferences.js +69 -0
- package/dist/i18n/preferences.js.map +1 -0
- package/dist/i18n/zh-wizard.d.ts +11 -0
- package/dist/i18n/zh-wizard.d.ts.map +1 -0
- package/dist/i18n/zh-wizard.js +293 -0
- package/dist/i18n/zh-wizard.js.map +1 -0
- package/dist/i18n/zh.d.ts +10 -0
- package/dist/i18n/zh.d.ts.map +1 -0
- package/dist/i18n/zh.js +227 -0
- package/dist/i18n/zh.js.map +1 -0
- package/dist/index.js +41 -23
- package/dist/index.js.map +1 -1
- package/dist/mcp-command.d.ts +32 -0
- package/dist/mcp-command.d.ts.map +1 -0
- package/dist/mcp-command.js +37 -0
- package/dist/mcp-command.js.map +1 -0
- package/dist/mode.d.ts +31 -4
- package/dist/mode.d.ts.map +1 -1
- package/dist/mode.js +42 -7
- package/dist/mode.js.map +1 -1
- package/dist/model-switch.d.ts.map +1 -1
- package/dist/model-switch.js +5 -4
- package/dist/model-switch.js.map +1 -1
- package/dist/reasoning-effort.d.ts +23 -4
- package/dist/reasoning-effort.d.ts.map +1 -1
- package/dist/reasoning-effort.js +51 -24
- package/dist/reasoning-effort.js.map +1 -1
- package/dist/sdk-log.d.ts +23 -16
- package/dist/sdk-log.d.ts.map +1 -1
- package/dist/sdk-log.js +43 -19
- package/dist/sdk-log.js.map +1 -1
- package/dist/stdio-runner.d.ts.map +1 -1
- package/dist/stdio-runner.js +19 -19
- package/dist/stdio-runner.js.map +1 -1
- package/dist/sub-agent-guard-plugin.d.ts +5 -2
- package/dist/sub-agent-guard-plugin.d.ts.map +1 -1
- package/dist/sub-agent-guard-plugin.js +5 -2
- package/dist/sub-agent-guard-plugin.js.map +1 -1
- package/dist/tui/chat-session.d.ts +73 -0
- package/dist/tui/chat-session.d.ts.map +1 -1
- package/dist/tui/chat-session.js +167 -33
- package/dist/tui/chat-session.js.map +1 -1
- package/dist/tui/components.d.ts +43 -2
- package/dist/tui/components.d.ts.map +1 -1
- package/dist/tui/components.js +97 -4
- package/dist/tui/components.js.map +1 -1
- package/dist/tui/config-wizard/detail.d.ts +12 -6
- package/dist/tui/config-wizard/detail.d.ts.map +1 -1
- package/dist/tui/config-wizard/detail.js +33 -32
- package/dist/tui/config-wizard/detail.js.map +1 -1
- package/dist/tui/config-wizard/engine.d.ts.map +1 -1
- package/dist/tui/config-wizard/engine.js +26 -20
- package/dist/tui/config-wizard/engine.js.map +1 -1
- package/dist/tui/config-wizard/fields.d.ts.map +1 -1
- package/dist/tui/config-wizard/fields.js +176 -164
- package/dist/tui/config-wizard/fields.js.map +1 -1
- package/dist/tui/config-wizard/kv-editor.d.ts.map +1 -1
- package/dist/tui/config-wizard/kv-editor.js +9 -5
- package/dist/tui/config-wizard/kv-editor.js.map +1 -1
- package/dist/tui/config-wizard/list.d.ts.map +1 -1
- package/dist/tui/config-wizard/list.js +2 -1
- package/dist/tui/config-wizard/list.js.map +1 -1
- package/dist/tui/config-wizard/mcp-helpers.d.ts.map +1 -1
- package/dist/tui/config-wizard/mcp-helpers.js +4 -3
- package/dist/tui/config-wizard/mcp-helpers.js.map +1 -1
- package/dist/tui/config-wizard/menu.d.ts.map +1 -1
- package/dist/tui/config-wizard/menu.js +32 -19
- package/dist/tui/config-wizard/menu.js.map +1 -1
- package/dist/tui/config-wizard/prompt-editor.d.ts.map +1 -1
- package/dist/tui/config-wizard/prompt-editor.js +4 -3
- package/dist/tui/config-wizard/prompt-editor.js.map +1 -1
- package/dist/tui/config-wizard/prompt.d.ts.map +1 -1
- package/dist/tui/config-wizard/prompt.js +8 -7
- package/dist/tui/config-wizard/prompt.js.map +1 -1
- package/dist/tui/config-wizard/step-agents.d.ts.map +1 -1
- package/dist/tui/config-wizard/step-agents.js +29 -20
- package/dist/tui/config-wizard/step-agents.js.map +1 -1
- package/dist/tui/config-wizard/step-defaults.d.ts.map +1 -1
- package/dist/tui/config-wizard/step-defaults.js +21 -17
- package/dist/tui/config-wizard/step-defaults.js.map +1 -1
- package/dist/tui/config-wizard/step-endpoints.d.ts.map +1 -1
- package/dist/tui/config-wizard/step-endpoints.js +16 -6
- package/dist/tui/config-wizard/step-endpoints.js.map +1 -1
- package/dist/tui/config-wizard/step-mcp.d.ts.map +1 -1
- package/dist/tui/config-wizard/step-mcp.js +17 -19
- package/dist/tui/config-wizard/step-mcp.js.map +1 -1
- package/dist/tui/config-wizard/step-models.d.ts.map +1 -1
- package/dist/tui/config-wizard/step-models.js +41 -26
- package/dist/tui/config-wizard/step-models.js.map +1 -1
- package/dist/tui/config-wizard/step-new-endpoint.d.ts.map +1 -1
- package/dist/tui/config-wizard/step-new-endpoint.js +16 -12
- package/dist/tui/config-wizard/step-new-endpoint.js.map +1 -1
- package/dist/tui/config-wizard/step-simple.d.ts.map +1 -1
- package/dist/tui/config-wizard/step-simple.js +18 -17
- package/dist/tui/config-wizard/step-simple.js.map +1 -1
- package/dist/tui/index.d.ts +17 -1
- package/dist/tui/index.d.ts.map +1 -1
- package/dist/tui/index.js +25 -14
- package/dist/tui/index.js.map +1 -1
- package/dist/tui/input-editing.d.ts +4 -1
- package/dist/tui/input-editing.d.ts.map +1 -1
- package/dist/tui/input-editing.js +7 -3
- package/dist/tui/input-editing.js.map +1 -1
- package/dist/tui/phase.d.ts +64 -0
- package/dist/tui/phase.d.ts.map +1 -0
- package/dist/tui/phase.js +112 -0
- package/dist/tui/phase.js.map +1 -0
- package/dist/tui/screens/agent-tabs.d.ts +53 -0
- package/dist/tui/screens/agent-tabs.d.ts.map +1 -0
- package/dist/tui/screens/agent-tabs.js +81 -0
- package/dist/tui/screens/agent-tabs.js.map +1 -0
- package/dist/tui/screens/chat-commands.d.ts +54 -3
- package/dist/tui/screens/chat-commands.d.ts.map +1 -1
- package/dist/tui/screens/chat-commands.js +469 -330
- package/dist/tui/screens/chat-commands.js.map +1 -1
- package/dist/tui/screens/chat.d.ts +8 -0
- package/dist/tui/screens/chat.d.ts.map +1 -1
- package/dist/tui/screens/chat.js +263 -406
- package/dist/tui/screens/chat.js.map +1 -1
- package/dist/tui/screens/common-keys.d.ts +36 -0
- package/dist/tui/screens/common-keys.d.ts.map +1 -0
- package/dist/tui/screens/common-keys.js +67 -0
- package/dist/tui/screens/common-keys.js.map +1 -0
- package/dist/tui/screens/handoff-choice.d.ts.map +1 -1
- package/dist/tui/screens/handoff-choice.js +4 -3
- package/dist/tui/screens/handoff-choice.js.map +1 -1
- package/dist/tui/screens/index.d.ts +3 -1
- package/dist/tui/screens/index.d.ts.map +1 -1
- package/dist/tui/screens/index.js +2 -1
- package/dist/tui/screens/index.js.map +1 -1
- package/dist/tui/screens/input-row.d.ts +64 -0
- package/dist/tui/screens/input-row.d.ts.map +1 -0
- package/dist/tui/screens/input-row.js +67 -0
- package/dist/tui/screens/input-row.js.map +1 -0
- package/dist/tui/screens/input.d.ts +13 -1
- package/dist/tui/screens/input.d.ts.map +1 -1
- package/dist/tui/screens/input.js +26 -12
- package/dist/tui/screens/input.js.map +1 -1
- package/dist/tui/screens/layout.d.ts +15 -0
- package/dist/tui/screens/layout.d.ts.map +1 -1
- package/dist/tui/screens/layout.js +14 -2
- package/dist/tui/screens/layout.js.map +1 -1
- package/dist/tui/screens/lines.d.ts.map +1 -1
- package/dist/tui/screens/lines.js +6 -6
- package/dist/tui/screens/lines.js.map +1 -1
- package/dist/tui/screens/messages-view.d.ts.map +1 -1
- package/dist/tui/screens/messages-view.js +5 -4
- package/dist/tui/screens/messages-view.js.map +1 -1
- package/dist/tui/screens/notice-bar.d.ts +5 -0
- package/dist/tui/screens/notice-bar.d.ts.map +1 -0
- package/dist/tui/screens/notice-bar.js +15 -0
- package/dist/tui/screens/notice-bar.js.map +1 -0
- package/dist/tui/screens/notice.d.ts +40 -8
- package/dist/tui/screens/notice.d.ts.map +1 -1
- package/dist/tui/screens/notice.js +75 -15
- package/dist/tui/screens/notice.js.map +1 -1
- package/dist/tui/screens/overlays.d.ts.map +1 -1
- package/dist/tui/screens/overlays.js +3 -2
- package/dist/tui/screens/overlays.js.map +1 -1
- package/dist/tui/screens/splash.d.ts +1 -1
- package/dist/tui/screens/splash.d.ts.map +1 -1
- package/dist/tui/screens/splash.js +5 -2
- package/dist/tui/screens/splash.js.map +1 -1
- package/dist/tui/screens/use-chat-viewport.d.ts +22 -0
- package/dist/tui/screens/use-chat-viewport.d.ts.map +1 -0
- package/dist/tui/screens/use-chat-viewport.js +50 -0
- package/dist/tui/screens/use-chat-viewport.js.map +1 -0
- package/dist/tui/screens/use-input-editing.d.ts +44 -0
- package/dist/tui/screens/use-input-editing.d.ts.map +1 -0
- package/dist/tui/screens/use-input-editing.js +192 -0
- package/dist/tui/screens/use-input-editing.js.map +1 -0
- package/dist/tui/screens/use-overlays.d.ts +25 -0
- package/dist/tui/screens/use-overlays.d.ts.map +1 -0
- package/dist/tui/screens/use-overlays.js +32 -0
- package/dist/tui/screens/use-overlays.js.map +1 -0
- package/dist/tui/screens/use-wizard-host.d.ts +35 -0
- package/dist/tui/screens/use-wizard-host.d.ts.map +1 -0
- package/dist/tui/screens/use-wizard-host.js +103 -0
- package/dist/tui/screens/use-wizard-host.js.map +1 -0
- package/dist/tui/status-segments.d.ts +37 -0
- package/dist/tui/status-segments.d.ts.map +1 -0
- package/dist/tui/status-segments.js +166 -0
- package/dist/tui/status-segments.js.map +1 -0
- package/dist/tui/text.d.ts +8 -5
- package/dist/tui/text.d.ts.map +1 -1
- package/dist/tui/text.js +95 -35
- package/dist/tui/text.js.map +1 -1
- package/dist/tui/theme.d.ts +2 -0
- package/dist/tui/theme.d.ts.map +1 -1
- package/dist/tui/theme.js +2 -0
- package/dist/tui/theme.js.map +1 -1
- package/dist/tui/token-rate.d.ts +83 -0
- package/dist/tui/token-rate.d.ts.map +1 -0
- package/dist/tui/token-rate.js +195 -0
- package/dist/tui/token-rate.js.map +1 -0
- package/dist/types.d.ts +0 -3
- package/dist/types.d.ts.map +1 -1
- package/package.json +4 -3
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"model-switch.d.ts","sourceRoot":"","sources":["../src/model-switch.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA4BG;AAGH,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,oBAAoB,CAAC;
|
|
1
|
+
{"version":3,"file":"model-switch.d.ts","sourceRoot":"","sources":["../src/model-switch.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA4BG;AAGH,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,oBAAoB,CAAC;AAI1D,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,kBAAkB;IAClB,GAAG,CAAC,EAAE,IAAI,CAAC;CACZ;AAED,MAAM,WAAW,kBAAmB,SAAQ,eAAe;IACzD,MAAM,EAAE,OAAO,oBAAoB,EAAE,SAAS,CAAC;IAC/C,gCAAgC;IAChC,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,cAAc;IACd,OAAO,EAAE,MAAM,CAAC;CACjB;AAED,MAAM,WAAW,iBAAiB;IAChC,iBAAiB;IACjB,OAAO,EAAE,MAAM,CAAC;IAChB,oBAAoB;IACpB,UAAU,EAAE,eAAe,CAAC;CAC7B;AAED;;;;GAIG;AACH,wBAAsB,WAAW,CAAC,OAAO,EAAE,kBAAkB,GAAG,OAAO,CAAC,iBAAiB,CAAC,CA4BzF"}
|
package/dist/model-switch.js
CHANGED
|
@@ -29,6 +29,7 @@
|
|
|
29
29
|
*/
|
|
30
30
|
import { AgentRepository } from "@ai-zen/agents-sdk";
|
|
31
31
|
import { AGENTS_DIR } from "./config.js";
|
|
32
|
+
import { t } from "./i18n/index.js";
|
|
32
33
|
/**
|
|
33
34
|
* 切换模型:把目标模型写进 Agent 定义的 `modelId`,并把思考强度重置为模型默认。
|
|
34
35
|
*
|
|
@@ -40,21 +41,21 @@ export async function switchModel(options) {
|
|
|
40
41
|
const now = options.now ?? new Date();
|
|
41
42
|
const model = (config.models ?? []).find((item) => item.id === modelId);
|
|
42
43
|
if (!model)
|
|
43
|
-
throw new Error(
|
|
44
|
+
throw new Error(t("modelSwitch.err.modelMissing", { id: modelId }));
|
|
44
45
|
const readAgent = options.readAgent ?? ((id) => new AgentRepository(AGENTS_DIR).read(id));
|
|
45
46
|
const writeAgent = options.writeAgent ??
|
|
46
47
|
((definition) => new AgentRepository(AGENTS_DIR).write(definition));
|
|
47
48
|
const definition = await readAgent(agentId);
|
|
48
49
|
if (!definition)
|
|
49
|
-
throw new Error(
|
|
50
|
+
throw new Error(t("modelSwitch.err.agentMissing", { id: agentId }));
|
|
50
51
|
const next = { ...definition, modelId, updatedAt: now.toISOString() };
|
|
51
52
|
// 换模型 = 重置思考强度:旧模型的档位参数对新模型可能非法(如 GLM-5.3 不接受
|
|
52
53
|
// `thinking.disabled`),所以直接清空,让目标模型走自己的 defaultParams。
|
|
53
54
|
delete next.modelParams;
|
|
54
55
|
await writeAgent(next);
|
|
55
|
-
const resetHint = definition.modelParams ? "
|
|
56
|
+
const resetHint = definition.modelParams ? t("modelSwitch.resetHint") : "";
|
|
56
57
|
return {
|
|
57
|
-
summary:
|
|
58
|
+
summary: t("modelSwitch.summary", { name: model.name, id: model.id, agent: agentId, hint: resetHint }),
|
|
58
59
|
definition: next,
|
|
59
60
|
};
|
|
60
61
|
}
|
package/dist/model-switch.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"model-switch.js","sourceRoot":"","sources":["../src/model-switch.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA4BG;AAEH,OAAO,EAAE,eAAe,EAAE,MAAM,oBAAoB,CAAC;AAErD,OAAO,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;
|
|
1
|
+
{"version":3,"file":"model-switch.js","sourceRoot":"","sources":["../src/model-switch.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA4BG;AAEH,OAAO,EAAE,eAAe,EAAE,MAAM,oBAAoB,CAAC;AAErD,OAAO,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AACzC,OAAO,EAAE,CAAC,EAAE,MAAM,iBAAiB,CAAC;AA0BpC;;;;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,CAAC,CAAC,8BAA8B,EAAE,EAAE,EAAE,EAAE,OAAO,EAAE,CAAC,CAAC,CAAC;IAEhF,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;QAClB,CAAC,CAAC,UAA2B,EAAE,EAAE,CAAC,IAAI,eAAe,CAAC,UAAU,CAAC,CAAC,KAAK,CAAC,UAAU,CAAC,CAAC,CAAC;IAEvF,MAAM,UAAU,GAAG,MAAM,SAAS,CAAC,OAAO,CAAC,CAAC;IAC5C,IAAI,CAAC,UAAU;QAAE,MAAM,IAAI,KAAK,CAAC,CAAC,CAAC,8BAA8B,EAAE,EAAE,EAAE,EAAE,OAAO,EAAE,CAAC,CAAC,CAAC;IAErF,MAAM,IAAI,GAAoB,EAAE,GAAG,UAAU,EAAE,OAAO,EAAE,SAAS,EAAE,GAAG,CAAC,WAAW,EAAE,EAAE,CAAC;IACvF,8CAA8C;IAC9C,uDAAuD;IACvD,OAAO,IAAI,CAAC,WAAW,CAAC;IACxB,MAAM,UAAU,CAAC,IAAI,CAAC,CAAC;IAEvB,MAAM,SAAS,GAAG,UAAU,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC,CAAC,uBAAuB,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;IAC3E,OAAO;QACL,OAAO,EAAE,CAAC,CAAC,qBAAqB,EAAE,EAAE,IAAI,EAAE,KAAK,CAAC,IAAI,EAAE,EAAE,EAAE,KAAK,CAAC,EAAE,EAAE,KAAK,EAAE,OAAO,EAAE,IAAI,EAAE,SAAS,EAAE,CAAC;QACtG,UAAU,EAAE,IAAI;KACjB,CAAC;AACJ,CAAC"}
|
|
@@ -15,13 +15,14 @@
|
|
|
15
15
|
import type { AgentDefinition, AppConfig, Model } from "@ai-zen/agents-sdk";
|
|
16
16
|
import { type ReasoningPreset, type ReasoningPresets } from "./reasoning-presets.js";
|
|
17
17
|
/**
|
|
18
|
-
*
|
|
18
|
+
* 已知档位名清单。
|
|
19
19
|
*
|
|
20
20
|
* 不设成穷举映射:档位名由策略表定义(用户可自建策略、自定档位名),
|
|
21
|
-
*
|
|
21
|
+
* 未收录的名字直接显示原文,比显示「?」有用得多。
|
|
22
|
+
* 文案本身在 i18n 词典的 `effort.<档位名>` 里(中 / 英各一份)。
|
|
22
23
|
*/
|
|
23
|
-
export declare const
|
|
24
|
-
/** 档位 →
|
|
24
|
+
export declare const KNOWN_EFFORT_LEVELS: readonly string[];
|
|
25
|
+
/** 档位 → 显示文案(未收录的档位名原样显示) */
|
|
25
26
|
export declare function effortLabel(level: string): string;
|
|
26
27
|
/** 模型关联的策略 */
|
|
27
28
|
export declare function presetOf(model: Model | null | undefined, presets: ReasoningPresets): ReasoningPreset | undefined;
|
|
@@ -45,6 +46,24 @@ export declare function effectiveParams(model?: Model | null, definition?: Pick<
|
|
|
45
46
|
* - 没有任何声明 → 「默认」(跟随模型 `defaultParams`,如 DeepSeek 出厂只开思考不指定档位)
|
|
46
47
|
*/
|
|
47
48
|
export declare function describeEffort(model?: Model | null, presets?: ReasoningPresets | null, definition?: Pick<AgentDefinition, "modelParams"> | null): string;
|
|
49
|
+
/**
|
|
50
|
+
* 状态栏用的思考强度视图:文案 + 是否置灰。
|
|
51
|
+
*
|
|
52
|
+
* 合成一个对象返回,是为了让调用方**一次取全**——分成两个函数调用容易出现
|
|
53
|
+
* 「文案更新了、置灰没跟上」这种漂移。
|
|
54
|
+
*/
|
|
55
|
+
export declare function describeEffortView(model?: Model | null, presets?: ReasoningPresets | null, definition?: Pick<AgentDefinition, "modelParams"> | null): {
|
|
56
|
+
text: string;
|
|
57
|
+
dimmed: boolean;
|
|
58
|
+
};
|
|
59
|
+
/**
|
|
60
|
+
* 状态栏里思考强度是否该置灰 —— **不靠文案判断**。
|
|
61
|
+
*
|
|
62
|
+
* 旧实现是 `effort === "关" || effort === "—"`,而那两个字本身就是显示文案:
|
|
63
|
+
* 一切语言,判断就失效(英文界面下 `"off"` 永远不等于 `"关"`)。
|
|
64
|
+
* 这里改成基于档位值的语义判断:不可调档,或档位是 off / none。
|
|
65
|
+
*/
|
|
66
|
+
export declare function effortDimmed(model?: Model | null, presets?: ReasoningPresets | null, definition?: Pick<AgentDefinition, "modelParams"> | null): boolean;
|
|
48
67
|
export interface SetAgentEffortOptions {
|
|
49
68
|
config: AppConfig;
|
|
50
69
|
/** 思考策略表(`readReasoningPresets()` 的结果) */
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"reasoning-effort.d.ts","sourceRoot":"","sources":["../src/reasoning-effort.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;GAaG;AAGH,OAAO,KAAK,EAAE,eAAe,EAAE,SAAS,EAAE,KAAK,EAAE,MAAM,oBAAoB,CAAC;
|
|
1
|
+
{"version":3,"file":"reasoning-effort.d.ts","sourceRoot":"","sources":["../src/reasoning-effort.ts"],"names":[],"mappings":"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"}
|
package/dist/reasoning-effort.js
CHANGED
|
@@ -14,26 +14,28 @@
|
|
|
14
14
|
*/
|
|
15
15
|
import { AgentRepository } from "@ai-zen/agents-sdk";
|
|
16
16
|
import { AGENTS_DIR } from "./config.js";
|
|
17
|
+
import { t } from "./i18n/index.js";
|
|
17
18
|
import { levelsOf, matchLevel, ownedKeys, patchOf, presetFor, } from "./reasoning-presets.js";
|
|
18
19
|
/**
|
|
19
|
-
*
|
|
20
|
+
* 已知档位名清单。
|
|
20
21
|
*
|
|
21
22
|
* 不设成穷举映射:档位名由策略表定义(用户可自建策略、自定档位名),
|
|
22
|
-
*
|
|
23
|
+
* 未收录的名字直接显示原文,比显示「?」有用得多。
|
|
24
|
+
* 文案本身在 i18n 词典的 `effort.<档位名>` 里(中 / 英各一份)。
|
|
23
25
|
*/
|
|
24
|
-
export const
|
|
25
|
-
off
|
|
26
|
-
none
|
|
27
|
-
minimal
|
|
28
|
-
low
|
|
29
|
-
medium
|
|
30
|
-
high
|
|
31
|
-
xhigh
|
|
32
|
-
max
|
|
33
|
-
|
|
34
|
-
/** 档位 →
|
|
26
|
+
export const KNOWN_EFFORT_LEVELS = [
|
|
27
|
+
"off",
|
|
28
|
+
"none",
|
|
29
|
+
"minimal",
|
|
30
|
+
"low",
|
|
31
|
+
"medium",
|
|
32
|
+
"high",
|
|
33
|
+
"xhigh",
|
|
34
|
+
"max",
|
|
35
|
+
];
|
|
36
|
+
/** 档位 → 显示文案(未收录的档位名原样显示) */
|
|
35
37
|
export function effortLabel(level) {
|
|
36
|
-
return
|
|
38
|
+
return KNOWN_EFFORT_LEVELS.includes(level) ? t(`effort.${level}`) : level;
|
|
37
39
|
}
|
|
38
40
|
/** 模型关联的策略 */
|
|
39
41
|
export function presetOf(model, presets) {
|
|
@@ -68,14 +70,39 @@ export function effectiveParams(model, definition) {
|
|
|
68
70
|
*/
|
|
69
71
|
export function describeEffort(model, presets, definition) {
|
|
70
72
|
if (!presets || !isAdjustable(model, presets))
|
|
71
|
-
return "
|
|
73
|
+
return t("effort.unsupported");
|
|
72
74
|
const params = effectiveParams(model, definition);
|
|
73
75
|
const matched = matchLevel(presetOf(model, presets), params);
|
|
74
76
|
if (matched)
|
|
75
77
|
return effortLabel(matched);
|
|
76
78
|
return definition?.modelParams && Object.keys(definition.modelParams).length > 0
|
|
77
|
-
? "
|
|
78
|
-
: "
|
|
79
|
+
? t("effort.custom")
|
|
80
|
+
: t("effort.default");
|
|
81
|
+
}
|
|
82
|
+
/**
|
|
83
|
+
* 状态栏用的思考强度视图:文案 + 是否置灰。
|
|
84
|
+
*
|
|
85
|
+
* 合成一个对象返回,是为了让调用方**一次取全**——分成两个函数调用容易出现
|
|
86
|
+
* 「文案更新了、置灰没跟上」这种漂移。
|
|
87
|
+
*/
|
|
88
|
+
export function describeEffortView(model, presets, definition) {
|
|
89
|
+
return {
|
|
90
|
+
text: describeEffort(model, presets, definition),
|
|
91
|
+
dimmed: effortDimmed(model, presets, definition),
|
|
92
|
+
};
|
|
93
|
+
}
|
|
94
|
+
/**
|
|
95
|
+
* 状态栏里思考强度是否该置灰 —— **不靠文案判断**。
|
|
96
|
+
*
|
|
97
|
+
* 旧实现是 `effort === "关" || effort === "—"`,而那两个字本身就是显示文案:
|
|
98
|
+
* 一切语言,判断就失效(英文界面下 `"off"` 永远不等于 `"关"`)。
|
|
99
|
+
* 这里改成基于档位值的语义判断:不可调档,或档位是 off / none。
|
|
100
|
+
*/
|
|
101
|
+
export function effortDimmed(model, presets, definition) {
|
|
102
|
+
if (!presets || !isAdjustable(model, presets))
|
|
103
|
+
return true;
|
|
104
|
+
const level = matchLevel(presetOf(model, presets), effectiveParams(model, definition));
|
|
105
|
+
return level === "off" || level === "none";
|
|
79
106
|
}
|
|
80
107
|
/**
|
|
81
108
|
* 设置某 Agent 的思考档位:查表拿补丁 → 写进 `definition.modelParams`。
|
|
@@ -95,22 +122,22 @@ export async function setAgentEffort(options) {
|
|
|
95
122
|
((definition) => new AgentRepository(AGENTS_DIR).write(definition));
|
|
96
123
|
const definition = await readAgent(agentId);
|
|
97
124
|
if (!definition)
|
|
98
|
-
throw new Error(
|
|
125
|
+
throw new Error(t("effort.err.agentMissing", { id: agentId }));
|
|
99
126
|
const modelId = definition.modelId;
|
|
100
127
|
if (!modelId) {
|
|
101
|
-
throw new Error(
|
|
128
|
+
throw new Error(t("effort.err.noModel", { id: agentId }));
|
|
102
129
|
}
|
|
103
130
|
const model = (config.models ?? []).find((item) => item.id === modelId);
|
|
104
131
|
if (!model)
|
|
105
|
-
throw new Error(
|
|
132
|
+
throw new Error(t("effort.err.modelMissing", { id: modelId }));
|
|
106
133
|
const preset = presetOf(model, presets);
|
|
107
134
|
const allowed = levelsOf(preset);
|
|
108
135
|
if (allowed.length === 0) {
|
|
109
|
-
throw new Error(
|
|
136
|
+
throw new Error(t("effort.err.noPreset", { id: model.id }));
|
|
110
137
|
}
|
|
111
138
|
const patch = effort === null ? undefined : patchOf(preset, effort);
|
|
112
139
|
if (effort !== null && !patch) {
|
|
113
|
-
throw new Error(
|
|
140
|
+
throw new Error(t("effort.err.unknownLevel", { preset: model.reasoningPreset ?? "", level: effort, options: allowed.join(" / ") }));
|
|
114
141
|
}
|
|
115
142
|
// 先剔除思考相关键,再合并新补丁(`null` 即只剔除)
|
|
116
143
|
const owned = ownedKeys(presets);
|
|
@@ -127,11 +154,11 @@ export async function setAgentEffort(options) {
|
|
|
127
154
|
else
|
|
128
155
|
delete next.modelParams;
|
|
129
156
|
await writeAgent(next);
|
|
130
|
-
const label = effort === null ? "
|
|
157
|
+
const label = effort === null ? t("effort.followDefault") : t("effort.quoted", { label: effortLabel(effort) });
|
|
131
158
|
return {
|
|
132
159
|
definition: next,
|
|
133
160
|
model,
|
|
134
|
-
summary:
|
|
161
|
+
summary: t("effort.summary", { label, id: agentId, model: model.id }),
|
|
135
162
|
};
|
|
136
163
|
}
|
|
137
164
|
//# sourceMappingURL=reasoning-effort.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"reasoning-effort.js","sourceRoot":"","sources":["../src/reasoning-effort.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;GAaG;AAEH,OAAO,EAAE,eAAe,EAAE,MAAM,oBAAoB,CAAC;AAErD,OAAO,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AACzC,OAAO,EACL,QAAQ,EACR,UAAU,EACV,SAAS,EACT,OAAO,EACP,SAAS,GAGV,MAAM,wBAAwB,CAAC;AAEhC
|
|
1
|
+
{"version":3,"file":"reasoning-effort.js","sourceRoot":"","sources":["../src/reasoning-effort.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;GAaG;AAEH,OAAO,EAAE,eAAe,EAAE,MAAM,oBAAoB,CAAC;AAErD,OAAO,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AACzC,OAAO,EAAE,CAAC,EAAE,MAAM,iBAAiB,CAAC;AACpC,OAAO,EACL,QAAQ,EACR,UAAU,EACV,SAAS,EACT,OAAO,EACP,SAAS,GAGV,MAAM,wBAAwB,CAAC;AAEhC;;;;;;GAMG;AACH,MAAM,CAAC,MAAM,mBAAmB,GAAsB;IACpD,KAAK;IACL,MAAM;IACN,SAAS;IACT,KAAK;IACL,QAAQ;IACR,MAAM;IACN,OAAO;IACP,KAAK;CACN,CAAC;AAEF,6BAA6B;AAC7B,MAAM,UAAU,WAAW,CAAC,KAAa;IACvC,OAAO,mBAAmB,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,UAAU,KAAK,EAAE,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC;AAC5E,CAAC;AAED,cAAc;AACd,MAAM,UAAU,QAAQ,CACtB,KAA+B,EAC/B,OAAyB;IAEzB,OAAO,SAAS,CAAC,KAAK,EAAE,EAAE,EAAE,KAAK,EAAE,eAAe,EAAE,OAAO,CAAC,CAAC;AAC/D,CAAC;AAED,yBAAyB;AACzB,MAAM,UAAU,aAAa,CAC3B,KAAoB,EACpB,OAAiC;IAEjC,IAAI,CAAC,OAAO;QAAE,OAAO,EAAE,CAAC;IACxB,OAAO,QAAQ,CAAC,QAAQ,CAAC,KAAK,EAAE,OAAO,CAAC,CAAC,CAAC;AAC5C,CAAC;AAED,gBAAgB;AAChB,MAAM,UAAU,YAAY,CAAC,KAAoB,EAAE,OAAiC;IAClF,OAAO,aAAa,CAAC,KAAK,EAAE,OAAO,CAAC,CAAC,MAAM,GAAG,CAAC,CAAC;AAClD,CAAC;AAED;;;;;GAKG;AACH,MAAM,UAAU,eAAe,CAC7B,KAAoB,EACpB,UAAwD;IAExD,OAAO,EAAE,GAAG,CAAC,KAAK,EAAE,aAAa,IAAI,EAAE,CAAC,EAAE,GAAG,CAAC,UAAU,EAAE,WAAW,IAAI,EAAE,CAAC,EAAE,CAAC;AACjF,CAAC;AAED;;;;;;;GAOG;AACH,MAAM,UAAU,cAAc,CAC5B,KAAoB,EACpB,OAAiC,EACjC,UAAwD;IAExD,IAAI,CAAC,OAAO,IAAI,CAAC,YAAY,CAAC,KAAK,EAAE,OAAO,CAAC;QAAE,OAAO,CAAC,CAAC,oBAAoB,CAAC,CAAC;IAC9E,MAAM,MAAM,GAAG,eAAe,CAAC,KAAK,EAAE,UAAU,CAAC,CAAC;IAClD,MAAM,OAAO,GAAG,UAAU,CAAC,QAAQ,CAAC,KAAK,EAAE,OAAO,CAAC,EAAE,MAAM,CAAC,CAAC;IAC7D,IAAI,OAAO;QAAE,OAAO,WAAW,CAAC,OAAO,CAAC,CAAC;IACzC,OAAO,UAAU,EAAE,WAAW,IAAI,MAAM,CAAC,IAAI,CAAC,UAAU,CAAC,WAAW,CAAC,CAAC,MAAM,GAAG,CAAC;QAC9E,CAAC,CAAC,CAAC,CAAC,eAAe,CAAC;QACpB,CAAC,CAAC,CAAC,CAAC,gBAAgB,CAAC,CAAC;AAC1B,CAAC;AAED;;;;;GAKG;AACH,MAAM,UAAU,kBAAkB,CAChC,KAAoB,EACpB,OAAiC,EACjC,UAAwD;IAExD,OAAO;QACL,IAAI,EAAE,cAAc,CAAC,KAAK,EAAE,OAAO,EAAE,UAAU,CAAC;QAChD,MAAM,EAAE,YAAY,CAAC,KAAK,EAAE,OAAO,EAAE,UAAU,CAAC;KACjD,CAAC;AACJ,CAAC;AAED;;;;;;GAMG;AACH,MAAM,UAAU,YAAY,CAC1B,KAAoB,EACpB,OAAiC,EACjC,UAAwD;IAExD,IAAI,CAAC,OAAO,IAAI,CAAC,YAAY,CAAC,KAAK,EAAE,OAAO,CAAC;QAAE,OAAO,IAAI,CAAC;IAC3D,MAAM,KAAK,GAAG,UAAU,CAAC,QAAQ,CAAC,KAAK,EAAE,OAAO,CAAC,EAAE,eAAe,CAAC,KAAK,EAAE,UAAU,CAAC,CAAC,CAAC;IACvF,OAAO,KAAK,KAAK,KAAK,IAAI,KAAK,KAAK,MAAM,CAAC;AAC7C,CAAC;AAuBD;;;;;;;;GAQG;AACH,MAAM,CAAC,KAAK,UAAU,cAAc,CAClC,OAA8B;IAE9B,MAAM,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC;IAC5C,MAAM,OAAO,GAAG,OAAO,CAAC,OAAO,IAAI,SAAS,CAAC;IAC7C,MAAM,GAAG,GAAG,OAAO,CAAC,GAAG,IAAI,IAAI,IAAI,EAAE,CAAC;IAEtC,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;QAClB,CAAC,CAAC,UAA2B,EAAE,EAAE,CAAC,IAAI,eAAe,CAAC,UAAU,CAAC,CAAC,KAAK,CAAC,UAAU,CAAC,CAAC,CAAC;IAEvF,MAAM,UAAU,GAAG,MAAM,SAAS,CAAC,OAAO,CAAC,CAAC;IAC5C,IAAI,CAAC,UAAU;QAAE,MAAM,IAAI,KAAK,CAAC,CAAC,CAAC,yBAAyB,EAAE,EAAE,EAAE,EAAE,OAAO,EAAE,CAAC,CAAC,CAAC;IAEhF,MAAM,OAAO,GAAG,UAAU,CAAC,OAAO,CAAC;IACnC,IAAI,CAAC,OAAO,EAAE,CAAC;QACb,MAAM,IAAI,KAAK,CAAC,CAAC,CAAC,oBAAoB,EAAE,EAAE,EAAE,EAAE,OAAO,EAAE,CAAC,CAAC,CAAC;IAC5D,CAAC;IACD,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,CAAC,CAAC,yBAAyB,EAAE,EAAE,EAAE,EAAE,OAAO,EAAE,CAAC,CAAC,CAAC;IAE3E,MAAM,MAAM,GAAG,QAAQ,CAAC,KAAK,EAAE,OAAO,CAAC,CAAC;IACxC,MAAM,OAAO,GAAG,QAAQ,CAAC,MAAM,CAAC,CAAC;IACjC,IAAI,OAAO,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QACzB,MAAM,IAAI,KAAK,CAAC,CAAC,CAAC,qBAAqB,EAAE,EAAE,EAAE,EAAE,KAAK,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC;IAC9D,CAAC;IAED,MAAM,KAAK,GAAG,MAAM,KAAK,IAAI,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,OAAO,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IACpE,IAAI,MAAM,KAAK,IAAI,IAAI,CAAC,KAAK,EAAE,CAAC;QAC9B,MAAM,IAAI,KAAK,CACb,CAAC,CAAC,yBAAyB,EAAE,EAAE,MAAM,EAAE,KAAK,CAAC,eAAe,IAAI,EAAE,EAAE,KAAK,EAAE,MAAM,EAAE,OAAO,EAAE,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC,CACnH,CAAC;IACJ,CAAC;IAED,+BAA+B;IAC/B,MAAM,KAAK,GAAG,SAAS,CAAC,OAAO,CAAC,CAAC;IACjC,MAAM,MAAM,GAA4B,EAAE,CAAC;IAC3C,KAAK,MAAM,CAAC,GAAG,EAAE,KAAK,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,UAAU,CAAC,WAAW,IAAI,EAAE,CAAC,EAAE,CAAC;QACxE,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,GAAG,CAAC;YAAE,MAAM,CAAC,GAAG,CAAC,GAAG,KAAK,CAAC;IAC3C,CAAC;IACD,IAAI,KAAK;QAAE,MAAM,CAAC,MAAM,CAAC,MAAM,EAAE,KAAK,CAAC,CAAC;IAExC,MAAM,IAAI,GAAoB,EAAE,GAAG,UAAU,EAAE,SAAS,EAAE,GAAG,CAAC,WAAW,EAAE,EAAE,CAAC;IAC9E,IAAI,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,MAAM,GAAG,CAAC;QAAE,IAAI,CAAC,WAAW,GAAG,MAAM,CAAC;;QACzD,OAAO,IAAI,CAAC,WAAW,CAAC;IAE7B,MAAM,UAAU,CAAC,IAAI,CAAC,CAAC;IAEvB,MAAM,KAAK,GAAG,MAAM,KAAK,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,sBAAsB,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,eAAe,EAAE,EAAE,KAAK,EAAE,WAAW,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC;IAC/G,OAAO;QACL,UAAU,EAAE,IAAI;QAChB,KAAK;QACL,OAAO,EAAE,CAAC,CAAC,gBAAgB,EAAE,EAAE,KAAK,EAAE,EAAE,EAAE,OAAO,EAAE,KAAK,EAAE,KAAK,CAAC,EAAE,EAAE,CAAC;KACtE,CAAC;AACJ,CAAC"}
|
package/dist/sdk-log.d.ts
CHANGED
|
@@ -1,31 +1,38 @@
|
|
|
1
1
|
/**
|
|
2
|
-
* SDK 全局日志接管 ——
|
|
2
|
+
* SDK 全局日志接管 —— 把库的日志引到独立文件。
|
|
3
3
|
*
|
|
4
|
-
* 背景:SDK 的 `getLogger()`
|
|
5
|
-
*
|
|
6
|
-
* 却是灾难 ——
|
|
7
|
-
*
|
|
8
|
-
* tools / resources
|
|
4
|
+
* 背景:SDK 的 `getLogger()` 接口本身没问题,问题在**默认实现**是
|
|
5
|
+
* `console.log / console.warn / console.error`(`@ai-zen/agents-sdk` 的 `shared/logger.ts`)。
|
|
6
|
+
* 对通用库来说这是合理兜底,对 Ink TUI 却是灾难 —— 直接写 stdout 会穿到渲染区外面
|
|
7
|
+
* 把界面撕成乱码(例如 `load_mcp` 的 `log.info(JSON.stringify(manifest, null, 2))`
|
|
8
|
+
* 会把整份 tools / resources 清单砸在界面上)。
|
|
9
9
|
*
|
|
10
|
-
* 所以 TUI
|
|
11
|
-
* -
|
|
12
|
-
* -
|
|
10
|
+
* 所以 TUI 启动时用 `setLogger()` 把 SDK 的日志出口换成**落盘实现**:
|
|
11
|
+
* - 日志一律进 `~/.ai-zen/logs/sdk.log`,界面上一个字都不出现;
|
|
12
|
+
* - 单文件 2MB 上限,超出轮转为 `sdk.log.1`,不会无限膨胀;
|
|
13
|
+
* - 写失败一律吞掉,磁盘满 / 权限不足绝不能拖垮 TUI。
|
|
13
14
|
*
|
|
14
15
|
* 用法:
|
|
15
|
-
* aiz
|
|
16
|
-
* AIZ_DEBUG_SDK=
|
|
17
|
-
*
|
|
16
|
+
* aiz → 追加写到 ~/.ai-zen/logs/sdk.log(默认开)
|
|
17
|
+
* AIZ_DEBUG_SDK=0 aiz → 完全静默
|
|
18
|
+
* AIZ_SDK_LOG_FILE=/path aiz → 写到指定文件
|
|
18
19
|
*
|
|
19
|
-
* 与 `key-debug.ts` 同一套约定(环境变量开关 +
|
|
20
|
+
* 与 `key-debug.ts` 同一套约定(环境变量开关 + 固定日志文件),免得排查时记两套。
|
|
21
|
+
*
|
|
22
|
+
* ⚠️ 本模块只解决「日志往哪写」。SDK 内部若有地方绕过 `getLogger()` 直接抓 `console`
|
|
23
|
+
* (模块顶层 `const log = getLogger()` 这类快照),换 logger 是救不回来的 —— 那属于
|
|
24
|
+
* SDK 侧的接线问题,须在 SDK 里改为运行时取 logger,见对应 commit。
|
|
20
25
|
*
|
|
21
26
|
* 注意 stdio 模式不需要本模块:`stdio-runner.ts` 已把日志改道 stderr —— 那里 stdout
|
|
22
27
|
* 只留给结果,日志本身是有用的。本模块只服务「界面被占用」的 TUI。
|
|
23
28
|
*/
|
|
24
29
|
import { type Logger } from "@ai-zen/agents-sdk";
|
|
25
|
-
/** 是否把 SDK
|
|
30
|
+
/** 是否把 SDK 日志落盘(默认开启,`AIZ_DEBUG_SDK=0` 关闭) */
|
|
26
31
|
export declare const SDK_LOG_ENABLED: boolean;
|
|
27
32
|
/** 日志落盘路径(测试与用户都可能改写,故导出常量) */
|
|
28
33
|
export declare const SDK_LOG_FILE: string;
|
|
34
|
+
/** 单文件上限 2MB;超出后轮转为 `<file>.1`(只保留上一份,总量有界) */
|
|
35
|
+
export declare const MAX_LOG_BYTES: number;
|
|
29
36
|
/** 单行日志格式:`<ISO 时间> [level] message` */
|
|
30
37
|
export declare function formatSdkLogLine(level: keyof Logger, message: string, at?: Date): string;
|
|
31
38
|
/**
|
|
@@ -34,10 +41,10 @@ export declare function formatSdkLogLine(level: keyof Logger, message: string, a
|
|
|
34
41
|
* 写失败要吞掉:日志是旁路能力,磁盘满 / 权限不足时绝不能把 TUI 拖垮。
|
|
35
42
|
*/
|
|
36
43
|
export declare function createFileLogger(file: string): Logger;
|
|
37
|
-
/**
|
|
44
|
+
/** 全静默日志器(`AIZ_DEBUG_SDK=0` 时使用) */
|
|
38
45
|
export declare function createSilentLogger(): Logger;
|
|
39
46
|
/**
|
|
40
|
-
* 接管 SDK
|
|
47
|
+
* 接管 SDK 全局日志:默认落盘,`AIZ_DEBUG_SDK=0` 静默。
|
|
41
48
|
*
|
|
42
49
|
* 返回实际安装的日志器,便于测试断言 / 上层复用。
|
|
43
50
|
*/
|
package/dist/sdk-log.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"sdk-log.d.ts","sourceRoot":"","sources":["../src/sdk-log.ts"],"names":[],"mappings":"AAAA
|
|
1
|
+
{"version":3,"file":"sdk-log.d.ts","sourceRoot":"","sources":["../src/sdk-log.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;GA2BG;AAIH,OAAO,EAAa,KAAK,MAAM,EAAE,MAAM,oBAAoB,CAAC;AAO5D,8CAA8C;AAC9C,eAAO,MAAM,eAAe,SAAoC,CAAC;AAEjE,+BAA+B;AAC/B,eAAO,MAAM,YAAY,QAC4C,CAAC;AAEtE,+CAA+C;AAC/C,eAAO,MAAM,aAAa,QAAkB,CAAC;AAE7C,wCAAwC;AACxC,wBAAgB,gBAAgB,CAC9B,KAAK,EAAE,MAAM,MAAM,EACnB,OAAO,EAAE,MAAM,EACf,EAAE,GAAE,IAAiB,GACpB,MAAM,CAER;AAYD;;;;GAIG;AACH,wBAAgB,gBAAgB,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAarD;AAED,oCAAoC;AACpC,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
CHANGED
|
@@ -1,36 +1,58 @@
|
|
|
1
1
|
/**
|
|
2
|
-
* SDK 全局日志接管 ——
|
|
2
|
+
* SDK 全局日志接管 —— 把库的日志引到独立文件。
|
|
3
3
|
*
|
|
4
|
-
* 背景:SDK 的 `getLogger()`
|
|
5
|
-
*
|
|
6
|
-
* 却是灾难 ——
|
|
7
|
-
*
|
|
8
|
-
* tools / resources
|
|
4
|
+
* 背景:SDK 的 `getLogger()` 接口本身没问题,问题在**默认实现**是
|
|
5
|
+
* `console.log / console.warn / console.error`(`@ai-zen/agents-sdk` 的 `shared/logger.ts`)。
|
|
6
|
+
* 对通用库来说这是合理兜底,对 Ink TUI 却是灾难 —— 直接写 stdout 会穿到渲染区外面
|
|
7
|
+
* 把界面撕成乱码(例如 `load_mcp` 的 `log.info(JSON.stringify(manifest, null, 2))`
|
|
8
|
+
* 会把整份 tools / resources 清单砸在界面上)。
|
|
9
9
|
*
|
|
10
|
-
* 所以 TUI
|
|
11
|
-
* -
|
|
12
|
-
* -
|
|
10
|
+
* 所以 TUI 启动时用 `setLogger()` 把 SDK 的日志出口换成**落盘实现**:
|
|
11
|
+
* - 日志一律进 `~/.ai-zen/logs/sdk.log`,界面上一个字都不出现;
|
|
12
|
+
* - 单文件 2MB 上限,超出轮转为 `sdk.log.1`,不会无限膨胀;
|
|
13
|
+
* - 写失败一律吞掉,磁盘满 / 权限不足绝不能拖垮 TUI。
|
|
13
14
|
*
|
|
14
15
|
* 用法:
|
|
15
|
-
* aiz
|
|
16
|
-
* AIZ_DEBUG_SDK=
|
|
17
|
-
*
|
|
16
|
+
* aiz → 追加写到 ~/.ai-zen/logs/sdk.log(默认开)
|
|
17
|
+
* AIZ_DEBUG_SDK=0 aiz → 完全静默
|
|
18
|
+
* AIZ_SDK_LOG_FILE=/path aiz → 写到指定文件
|
|
18
19
|
*
|
|
19
|
-
* 与 `key-debug.ts` 同一套约定(环境变量开关 +
|
|
20
|
+
* 与 `key-debug.ts` 同一套约定(环境变量开关 + 固定日志文件),免得排查时记两套。
|
|
21
|
+
*
|
|
22
|
+
* ⚠️ 本模块只解决「日志往哪写」。SDK 内部若有地方绕过 `getLogger()` 直接抓 `console`
|
|
23
|
+
* (模块顶层 `const log = getLogger()` 这类快照),换 logger 是救不回来的 —— 那属于
|
|
24
|
+
* SDK 侧的接线问题,须在 SDK 里改为运行时取 logger,见对应 commit。
|
|
20
25
|
*
|
|
21
26
|
* 注意 stdio 模式不需要本模块:`stdio-runner.ts` 已把日志改道 stderr —— 那里 stdout
|
|
22
27
|
* 只留给结果,日志本身是有用的。本模块只服务「界面被占用」的 TUI。
|
|
23
28
|
*/
|
|
24
|
-
import { appendFileSync } from "node:fs";
|
|
29
|
+
import { appendFileSync, mkdirSync, renameSync, statSync } from "node:fs";
|
|
30
|
+
import { dirname, join } from "node:path";
|
|
25
31
|
import { setLogger } from "@ai-zen/agents-sdk";
|
|
26
|
-
/**
|
|
27
|
-
|
|
32
|
+
/** 共享根目录 `~/.ai-zen`(与 config.ts 的 AI_ZEN_DIR 同一约定) */
|
|
33
|
+
const AI_ZEN_DIR = process.env.AI_ZEN_DIR ||
|
|
34
|
+
join(process.env.HOME || process.env.USERPROFILE || "", ".ai-zen");
|
|
35
|
+
/** 是否把 SDK 日志落盘(默认开启,`AIZ_DEBUG_SDK=0` 关闭) */
|
|
36
|
+
export const SDK_LOG_ENABLED = process.env.AIZ_DEBUG_SDK !== "0";
|
|
28
37
|
/** 日志落盘路径(测试与用户都可能改写,故导出常量) */
|
|
29
|
-
export const SDK_LOG_FILE = process.env.AIZ_SDK_LOG_FILE || "
|
|
38
|
+
export const SDK_LOG_FILE = process.env.AIZ_SDK_LOG_FILE || join(AI_ZEN_DIR, "logs", "sdk.log");
|
|
39
|
+
/** 单文件上限 2MB;超出后轮转为 `<file>.1`(只保留上一份,总量有界) */
|
|
40
|
+
export const MAX_LOG_BYTES = 2 * 1024 * 1024;
|
|
30
41
|
/** 单行日志格式:`<ISO 时间> [level] message` */
|
|
31
42
|
export function formatSdkLogLine(level, message, at = new Date()) {
|
|
32
43
|
return `${at.toISOString()} [${level}] ${message}`;
|
|
33
44
|
}
|
|
45
|
+
/** 大小超限时把当前文件挪成 `.1`,让下一次写入从空文件开始 */
|
|
46
|
+
function rotateIfNeeded(file) {
|
|
47
|
+
try {
|
|
48
|
+
if (statSync(file).size < MAX_LOG_BYTES)
|
|
49
|
+
return;
|
|
50
|
+
renameSync(file, `${file}.1`);
|
|
51
|
+
}
|
|
52
|
+
catch {
|
|
53
|
+
/* 文件还不存在:首次写入,无需轮转 */
|
|
54
|
+
}
|
|
55
|
+
}
|
|
34
56
|
/**
|
|
35
57
|
* 落盘版日志器。
|
|
36
58
|
*
|
|
@@ -39,6 +61,8 @@ export function formatSdkLogLine(level, message, at = new Date()) {
|
|
|
39
61
|
export function createFileLogger(file) {
|
|
40
62
|
const write = (level) => (message) => {
|
|
41
63
|
try {
|
|
64
|
+
mkdirSync(dirname(file), { recursive: true });
|
|
65
|
+
rotateIfNeeded(file);
|
|
42
66
|
appendFileSync(file, `${formatSdkLogLine(level, message)}\n`);
|
|
43
67
|
}
|
|
44
68
|
catch {
|
|
@@ -47,13 +71,13 @@ export function createFileLogger(file) {
|
|
|
47
71
|
};
|
|
48
72
|
return { info: write("info"), warn: write("warn"), error: write("error") };
|
|
49
73
|
}
|
|
50
|
-
/**
|
|
74
|
+
/** 全静默日志器(`AIZ_DEBUG_SDK=0` 时使用) */
|
|
51
75
|
export function createSilentLogger() {
|
|
52
76
|
const noop = () => { };
|
|
53
77
|
return { info: noop, warn: noop, error: noop };
|
|
54
78
|
}
|
|
55
79
|
/**
|
|
56
|
-
* 接管 SDK
|
|
80
|
+
* 接管 SDK 全局日志:默认落盘,`AIZ_DEBUG_SDK=0` 静默。
|
|
57
81
|
*
|
|
58
82
|
* 返回实际安装的日志器,便于测试断言 / 上层复用。
|
|
59
83
|
*/
|
package/dist/sdk-log.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"sdk-log.js","sourceRoot":"","sources":["../src/sdk-log.ts"],"names":[],"mappings":"AAAA
|
|
1
|
+
{"version":3,"file":"sdk-log.js","sourceRoot":"","sources":["../src/sdk-log.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;GA2BG;AAEH,OAAO,EAAE,cAAc,EAAE,SAAS,EAAE,UAAU,EAAE,QAAQ,EAAE,MAAM,SAAS,CAAC;AAC1E,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AAC1C,OAAO,EAAE,SAAS,EAAe,MAAM,oBAAoB,CAAC;AAE5D,uDAAuD;AACvD,MAAM,UAAU,GACd,OAAO,CAAC,GAAG,CAAC,UAAU;IACtB,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,IAAI,IAAI,OAAO,CAAC,GAAG,CAAC,WAAW,IAAI,EAAE,EAAE,SAAS,CAAC,CAAC;AAErE,8CAA8C;AAC9C,MAAM,CAAC,MAAM,eAAe,GAAG,OAAO,CAAC,GAAG,CAAC,aAAa,KAAK,GAAG,CAAC;AAEjE,+BAA+B;AAC/B,MAAM,CAAC,MAAM,YAAY,GACvB,OAAO,CAAC,GAAG,CAAC,gBAAgB,IAAI,IAAI,CAAC,UAAU,EAAE,MAAM,EAAE,SAAS,CAAC,CAAC;AAEtE,+CAA+C;AAC/C,MAAM,CAAC,MAAM,aAAa,GAAG,CAAC,GAAG,IAAI,GAAG,IAAI,CAAC;AAE7C,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,qCAAqC;AACrC,SAAS,cAAc,CAAC,IAAY;IAClC,IAAI,CAAC;QACH,IAAI,QAAQ,CAAC,IAAI,CAAC,CAAC,IAAI,GAAG,aAAa;YAAE,OAAO;QAChD,UAAU,CAAC,IAAI,EAAE,GAAG,IAAI,IAAI,CAAC,CAAC;IAChC,CAAC;IAAC,MAAM,CAAC;QACP,sBAAsB;IACxB,CAAC;AACH,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,SAAS,CAAC,OAAO,CAAC,IAAI,CAAC,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;YAC9C,cAAc,CAAC,IAAI,CAAC,CAAC;YACrB,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,oCAAoC;AACpC,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;AAwCD,6BAA6B;AAC7B,wBAAsB,QAAQ,CAAC,OAAO,EAAE,eAAe,GAAG,OAAO,CAAC,MAAM,CAAC,CAwExE"}
|
package/dist/stdio-runner.js
CHANGED
|
@@ -15,8 +15,7 @@ import { createAgent } from "./agent-creator.js";
|
|
|
15
15
|
import { AGENTS_DIR, readConfig } from "./config.js";
|
|
16
16
|
import { CwdTrackerPlugin } from "./cwd-tracker-plugin.js";
|
|
17
17
|
import { SubAgentGuardInstallerPlugin } from "./sub-agent-guard-plugin.js";
|
|
18
|
-
import {
|
|
19
|
-
import { formatShortTime } from "./format-time.js";
|
|
18
|
+
import { generateConversationId, persistConversation } from "./conversation-repository.js";
|
|
20
19
|
/** 向 stderr 写一行(stdlib 日志统一出口) */
|
|
21
20
|
function logStderr(line) {
|
|
22
21
|
process.stderr.write(line.endsWith("\n") ? line : line + "\n");
|
|
@@ -64,9 +63,9 @@ export function extractText(content) {
|
|
|
64
63
|
if (section.type === "text")
|
|
65
64
|
parts.push(section.text);
|
|
66
65
|
else if (section.type === "image_url")
|
|
67
|
-
parts.push(`[
|
|
66
|
+
parts.push(`[Image: ${section.image_url.url}]`);
|
|
68
67
|
else if (section.type === "file")
|
|
69
|
-
parts.push(`[
|
|
68
|
+
parts.push(`[File: ${section.file_id ?? section.filename ?? "inline file"}]`);
|
|
70
69
|
}
|
|
71
70
|
return parts.join("\n");
|
|
72
71
|
}
|
|
@@ -80,16 +79,16 @@ async function resolveTarget() {
|
|
|
80
79
|
const definition = await new AgentRepository(AGENTS_DIR).read(agentId);
|
|
81
80
|
const modelId = definition?.modelId;
|
|
82
81
|
if (!modelId) {
|
|
83
|
-
throw new Error(`Agent "${agentId}"
|
|
82
|
+
throw new Error(`Agent "${agentId}" has no model bound — run \`ai\` and pick one under /config`);
|
|
84
83
|
}
|
|
85
84
|
const model = config.models.find((m) => m.id === modelId);
|
|
86
85
|
if (!model)
|
|
87
|
-
throw new Error(`
|
|
86
|
+
throw new Error(`The model "${modelId}" bound to the agent does not exist`);
|
|
88
87
|
const endpoint = config.endpoints.find((e) => e.id === model.endpointId);
|
|
89
88
|
if (!endpoint)
|
|
90
|
-
throw new Error(
|
|
89
|
+
throw new Error(`Model "${modelId}" references endpoint "${model.endpointId}", which does not exist`);
|
|
91
90
|
if (!endpoint.apiKey) {
|
|
92
|
-
throw new Error(
|
|
91
|
+
throw new Error(`Endpoint "${endpoint.name}" has no API key yet — run \`ai\` to configure it in the interactive UI`);
|
|
93
92
|
}
|
|
94
93
|
// 阈值由配置直接给出(旧字段已在 SDK 的 ConfigManager.read() 里迁移过)
|
|
95
94
|
return { modelId, agentId, tokenThresholds: model.tokenThresholds };
|
|
@@ -100,10 +99,12 @@ export async function runStdio(options) {
|
|
|
100
99
|
const stdinText = await readStdin();
|
|
101
100
|
const prompt = mergePrompt(instruction, stdinText);
|
|
102
101
|
if (!prompt.trim()) {
|
|
103
|
-
logStderr("ai:
|
|
102
|
+
logStderr("ai: no input (pass an argument or pipe text in)");
|
|
104
103
|
return 2;
|
|
105
104
|
}
|
|
106
|
-
// 保持 stdout 纯净:SDK
|
|
105
|
+
// 保持 stdout 纯净:SDK 全局日志走 setLogger 改道,
|
|
106
|
+
// 但 SDK(及第三方依赖)内部仍有**直接调用 console.log** 的地方,不经我们的 logger;
|
|
107
|
+
// 管道模式下那会把日志混进模型输出,所以这里连 console.log 一起改道。
|
|
107
108
|
const stderrLogger = (message) => logStderr(message);
|
|
108
109
|
setLogger({ info: stderrLogger, warn: stderrLogger, error: stderrLogger });
|
|
109
110
|
const originalLog = console.log;
|
|
@@ -123,22 +124,21 @@ export async function runStdio(options) {
|
|
|
123
124
|
.reverse()
|
|
124
125
|
.find((m) => m.role === AgentNS.Role.Assistant);
|
|
125
126
|
if (!lastAssistant || lastAssistant.status === AgentNS.MessageStatus.Error) {
|
|
126
|
-
logStderr("ai:
|
|
127
|
+
logStderr("ai: the model returned an error");
|
|
127
128
|
return 1;
|
|
128
129
|
}
|
|
129
130
|
if (save) {
|
|
130
|
-
|
|
131
|
-
const
|
|
132
|
-
|
|
133
|
-
id: name.replace(/[\\/:*?"<>|]/g, "_"),
|
|
131
|
+
// 会话名与 TUI 同源(避免两处拼接各自漂移)
|
|
132
|
+
const name = await persistConversation({
|
|
133
|
+
id: generateConversationId(),
|
|
134
134
|
agentId,
|
|
135
|
-
modelId,
|
|
136
135
|
messages: agent.messages,
|
|
137
136
|
cwd: process.cwd(),
|
|
138
|
-
|
|
139
|
-
|
|
137
|
+
// 一次性管道调用只归档,不改「本目录上一轮会话」指针:
|
|
138
|
+
// 否则连跑几条 `cat … | ai --save` 后,下次 `ai` 会续接到最后一条管道结果上
|
|
139
|
+
setAsLastSession: false,
|
|
140
140
|
});
|
|
141
|
-
logStderr(
|
|
141
|
+
logStderr(`Saved conversation: ${name}`);
|
|
142
142
|
}
|
|
143
143
|
// 结果:仅此一处写入 stdout
|
|
144
144
|
const text = extractText(lastAssistant.content);
|
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,eAAe,EACf,sBAAsB,EACtB,kBAAkB,EAClB,SAAS,GACV,MAAM,oBAAoB,CAAC;AAC5B,OAAO,EAAE,WAAW,EAAE,MAAM,oBAAoB,CAAC;AACjD,OAAO,EAAE,UAAU,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AACrD,OAAO,EAAE,gBAAgB,EAAE,MAAM,yBAAyB,CAAC;AAC3D,OAAO,EAAE,4BAA4B,EAAE,MAAM,6BAA6B,CAAC;AAE3E,OAAO,EAAE,sBAAsB,EAAE,
|
|
1
|
+
{"version":3,"file":"stdio-runner.js","sourceRoot":"","sources":["../src/stdio-runner.ts"],"names":[],"mappings":"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"}
|
|
@@ -21,8 +21,11 @@
|
|
|
21
21
|
* (`执行工具 X 时出错: …`),父 Agent 继续下一轮——即「软中断」:停掉越界的子 Agent,但不
|
|
22
22
|
* 终止用户对话(如需硬停,父 Agent 须设 allowJsonParseError=false)。
|
|
23
23
|
*
|
|
24
|
-
*
|
|
25
|
-
* SDK 的 `call_skill_sub_agent`(技能子 Agent
|
|
24
|
+
* 覆盖范围:core 只有两条委派路径(`AgentTool` / `AgentToolLazy`),均分发 onSubAgentStart,
|
|
25
|
+
* 故本插件对**全部**子 Agent 生效。SDK 的 `call_skill_sub_agent`(技能子 Agent)也走
|
|
26
|
+
* `AgentToolLazy`(见 `skillTools.ts`:工具由 AgentToolLazy 承载,复用统一的委派边界),
|
|
27
|
+
* 同样被覆盖——早期版本的注释说它「不分发该钩子」,那个说法在 skill 子 Agent 统一到
|
|
28
|
+
* core 委派原语之后已不成立。
|
|
26
29
|
*/
|
|
27
30
|
import type { AgentPlugin } from "@ai-zen/agents-sdk";
|
|
28
31
|
import type { SubAgentContext } from "@ai-zen/agents-core";
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"sub-agent-guard-plugin.d.ts","sourceRoot":"","sources":["../src/sub-agent-guard-plugin.ts"],"names":[],"mappings":"AAAA
|
|
1
|
+
{"version":3,"file":"sub-agent-guard-plugin.d.ts","sourceRoot":"","sources":["../src/sub-agent-guard-plugin.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA4BG;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"}
|
|
@@ -21,8 +21,11 @@
|
|
|
21
21
|
* (`执行工具 X 时出错: …`),父 Agent 继续下一轮——即「软中断」:停掉越界的子 Agent,但不
|
|
22
22
|
* 终止用户对话(如需硬停,父 Agent 须设 allowJsonParseError=false)。
|
|
23
23
|
*
|
|
24
|
-
*
|
|
25
|
-
* SDK 的 `call_skill_sub_agent`(技能子 Agent
|
|
24
|
+
* 覆盖范围:core 只有两条委派路径(`AgentTool` / `AgentToolLazy`),均分发 onSubAgentStart,
|
|
25
|
+
* 故本插件对**全部**子 Agent 生效。SDK 的 `call_skill_sub_agent`(技能子 Agent)也走
|
|
26
|
+
* `AgentToolLazy`(见 `skillTools.ts`:工具由 AgentToolLazy 承载,复用统一的委派边界),
|
|
27
|
+
* 同样被覆盖——早期版本的注释说它「不分发该钩子」,那个说法在 skill 子 Agent 统一到
|
|
28
|
+
* core 委派原语之后已不成立。
|
|
26
29
|
*/
|
|
27
30
|
import { ContextGuardPlugin } from "@ai-zen/agents-sdk";
|
|
28
31
|
/**
|