@zhushanwen/zcode-subagent-cli 0.7.0 → 0.8.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/{chunk-33XN65H4.js → chunk-REEFBX67.js} +266 -77
- package/dist/index.cjs +266 -77
- package/dist/index.d.cts +12 -3
- package/dist/index.d.ts +12 -3
- package/dist/index.js +1 -1
- package/dist/main.cjs +266 -77
- package/dist/main.js +1 -1
- package/package.json +1 -1
|
@@ -567,21 +567,6 @@ function locateZcodeBuiltinCatalog(sources) {
|
|
|
567
567
|
}
|
|
568
568
|
return void 0;
|
|
569
569
|
}
|
|
570
|
-
function resolveZcodeMinimalReasoningLevel(modelRef, sources) {
|
|
571
|
-
const catalogPath = locateZcodeBuiltinCatalog(sources);
|
|
572
|
-
if (catalogPath === void 0) return void 0;
|
|
573
|
-
let parsed;
|
|
574
|
-
try {
|
|
575
|
-
parsed = JSON.parse(fs2.readFileSync(catalogPath, "utf8"));
|
|
576
|
-
} catch {
|
|
577
|
-
return void 0;
|
|
578
|
-
}
|
|
579
|
-
const modelId = modelShort(modelRef);
|
|
580
|
-
const rules = parsed["config"];
|
|
581
|
-
const modelRules = isRecord(rules) && isRecord(rules["modelConfigRules"]) ? rules["modelConfigRules"]["modelRules"] : void 0;
|
|
582
|
-
if (!Array.isArray(modelRules)) return void 0;
|
|
583
|
-
return lastMatchingReasoningValues(modelRules, modelId)?.[0];
|
|
584
|
-
}
|
|
585
570
|
function lastMatchingReasoningValues(modelRules, modelId) {
|
|
586
571
|
let values;
|
|
587
572
|
for (const rule of modelRules) {
|
|
@@ -590,7 +575,7 @@ function lastMatchingReasoningValues(modelRules, modelId) {
|
|
|
590
575
|
if (typeof match !== "string") continue;
|
|
591
576
|
let re;
|
|
592
577
|
try {
|
|
593
|
-
re = new RegExp(match);
|
|
578
|
+
re = new RegExp(match, "i");
|
|
594
579
|
} catch {
|
|
595
580
|
continue;
|
|
596
581
|
}
|
|
@@ -602,6 +587,21 @@ function lastMatchingReasoningValues(modelRules, modelId) {
|
|
|
602
587
|
}
|
|
603
588
|
return values;
|
|
604
589
|
}
|
|
590
|
+
function resolveZcodeReasoningValues(modelRef, sources) {
|
|
591
|
+
const catalogPath = locateZcodeBuiltinCatalog(sources);
|
|
592
|
+
if (catalogPath === void 0) return void 0;
|
|
593
|
+
let parsed;
|
|
594
|
+
try {
|
|
595
|
+
parsed = JSON.parse(fs2.readFileSync(catalogPath, "utf8"));
|
|
596
|
+
} catch {
|
|
597
|
+
return void 0;
|
|
598
|
+
}
|
|
599
|
+
const modelId = modelShort(modelRef);
|
|
600
|
+
const rules = parsed["config"];
|
|
601
|
+
const modelRules = isRecord(rules) && isRecord(rules["modelConfigRules"]) ? rules["modelConfigRules"]["modelRules"] : void 0;
|
|
602
|
+
if (!Array.isArray(modelRules)) return void 0;
|
|
603
|
+
return lastMatchingReasoningValues(modelRules, modelId);
|
|
604
|
+
}
|
|
605
605
|
function defaultProviderForShortName(conf, withKey) {
|
|
606
606
|
const ordered = conf.order.find((id) => {
|
|
607
607
|
const entry = conf.providers.get(id);
|
|
@@ -610,6 +610,49 @@ function defaultProviderForShortName(conf, withKey) {
|
|
|
610
610
|
if (ordered !== void 0) return ordered;
|
|
611
611
|
return withKey[0][0];
|
|
612
612
|
}
|
|
613
|
+
function resolveAccountModelRef(wanted, wantedProvider, sources) {
|
|
614
|
+
const catalogPath = locateZcodeBuiltinCatalog(sources);
|
|
615
|
+
if (catalogPath === void 0) {
|
|
616
|
+
throw new ZcodePrepareError(
|
|
617
|
+
"model_not_available",
|
|
618
|
+
`account \u6A21\u578B "${wanted}" \u65E0\u6CD5\u6821\u9A8C\uFF1A\u5185\u5EFA\u76EE\u5F55\u5B9A\u4F4D\u5931\u8D25\uFF08ZCODE_BUILTIN_PROVIDER_CONFIG_FILE \u4E0E runtime/provider \u626B\u63CF\u5747\u672A\u547D\u4E2D\uFF09\u3002`
|
|
619
|
+
);
|
|
620
|
+
}
|
|
621
|
+
let catalog;
|
|
622
|
+
try {
|
|
623
|
+
catalog = JSON.parse(fs2.readFileSync(catalogPath, "utf8"));
|
|
624
|
+
} catch (err) {
|
|
625
|
+
throw new ZcodePrepareError(
|
|
626
|
+
"model_not_available",
|
|
627
|
+
`account \u6A21\u578B "${wanted}" \u65E0\u6CD5\u6821\u9A8C\uFF1A\u5185\u5EFA\u76EE\u5F55\u4E0D\u53EF\u8BFB\uFF08${err instanceof Error ? err.message : String(err)}\uFF09\u3002`
|
|
628
|
+
);
|
|
629
|
+
}
|
|
630
|
+
const accountRule = findAccountProviderRule(catalog, wantedProvider);
|
|
631
|
+
if (accountRule === void 0) {
|
|
632
|
+
throw new ZcodePrepareError(
|
|
633
|
+
"model_not_available",
|
|
634
|
+
`\u672A\u77E5 account provider "${wantedProvider}"\uFF08\u5185\u5EFA\u76EE\u5F55\u65E0\u6B64\u89C4\u5219\uFF09\u3002\u6062\u590D\u6307\u5F15\uFF1A\u6539\u7528\u76EE\u5F55\u5185 account:* \u89C4\u5219\uFF08\u5982 account:zai-individual-coding-plan / account:bigmodel-individual-coding-plan\uFF09\u3002`
|
|
635
|
+
);
|
|
636
|
+
}
|
|
637
|
+
assertAccountModelKnown(accountRule, wanted, wantedProvider);
|
|
638
|
+
return wanted;
|
|
639
|
+
}
|
|
640
|
+
function findAccountProviderRule(catalog, wantedProvider) {
|
|
641
|
+
const catalogRules = isRecord(catalog) && isRecord(catalog["config"]) && isRecord(catalog["config"]["providerConfigRules"]) ? catalog["config"]["providerConfigRules"]["providerRules"] : void 0;
|
|
642
|
+
const accountRule = Array.isArray(catalogRules) ? catalogRules.find((r) => isRecord(r) && r["providerId"] === wantedProvider) : void 0;
|
|
643
|
+
return isRecord(accountRule) ? accountRule : void 0;
|
|
644
|
+
}
|
|
645
|
+
function assertAccountModelKnown(accountRule, wanted, wantedProvider) {
|
|
646
|
+
const accountConfig = isRecord(accountRule["config"]) ? accountRule["config"] : {};
|
|
647
|
+
const modelIds = accountConfig["builtinModelIds"] ?? accountConfig["personalModelIds"];
|
|
648
|
+
const short = modelShort(wanted);
|
|
649
|
+
if (Array.isArray(modelIds) && modelIds.length > 0 && !modelIds.includes(short)) {
|
|
650
|
+
throw new ZcodePrepareError(
|
|
651
|
+
"model_not_available",
|
|
652
|
+
`\u672A\u77E5\u6A21\u578B "${short}"\uFF08account provider ${wantedProvider} \u4E0B\u53EF\u7528: ${modelIds.join(", ")}\uFF09\u3002`
|
|
653
|
+
);
|
|
654
|
+
}
|
|
655
|
+
}
|
|
613
656
|
function resolveZcodeModelRef(requested, sources) {
|
|
614
657
|
const { conf, sourceDesc } = readPersonalProviderView(sources);
|
|
615
658
|
const withKey = [...conf.providers.entries()].filter(([, e]) => hasApiKey(e));
|
|
@@ -622,6 +665,10 @@ function resolveZcodeModelRef(requested, sources) {
|
|
|
622
665
|
);
|
|
623
666
|
}
|
|
624
667
|
if (wanted === void 0) return "";
|
|
668
|
+
const wantedProvider = wanted.includes("/") ? providerOf(wanted) : void 0;
|
|
669
|
+
if (wantedProvider !== void 0 && wantedProvider.startsWith("account:")) {
|
|
670
|
+
return resolveAccountModelRef(wanted, wantedProvider, sources);
|
|
671
|
+
}
|
|
625
672
|
const provider = wanted.includes("/") ? providerOf(wanted) : defaultProviderForShortName(conf, withKey);
|
|
626
673
|
const short = modelShort(wanted);
|
|
627
674
|
const entry = conf.providers.get(provider);
|
|
@@ -708,7 +755,7 @@ function injectedConfigText() {
|
|
|
708
755
|
let v2 = {};
|
|
709
756
|
try { v2 = JSON.parse(readOrig(V2_PATH, 'utf8')); }
|
|
710
757
|
catch (err) {
|
|
711
|
-
// ENOENT = \u684C\u9762\u7AEF\u672A\u767B\u5F55\uFF08\u6B63\u5E38 no-patch\uFF0C\
|
|
758
|
+
// ENOENT = \u684C\u9762\u7AEF\u672A\u767B\u5F55\uFF08\u6B63\u5E38 no-patch\uFF0C\u4E0D\u6784\u6210\u9519\u8BEF\uFF1B\u8DF3\u8FC7\u51B3\u7B56\u7531\u5B89\u88C5\u95E8\u65E5\u5FD7\u627F\u8F7D\uFF09\uFF1B\u5176\u4ED6\u5931\u8D25\uFF08JSON \u635F\u574F/\u6743\u9650\uFF09
|
|
712
759
|
// \u51FA\u58F0\u2014\u2014\u5426\u5219\u6392\u969C\u4F1A\u88AB\u539F\u751F\u300C\u8BF7\u767B\u5F55\u300D\u62A5\u9519\u8BEF\u5BFC\uFF0C\u4E0E\u771F\u56E0\uFF08\u6587\u4EF6\u635F\u574F\uFF09\u4E0D\u7B26
|
|
713
760
|
if (!err || err.code !== 'ENOENT') {
|
|
714
761
|
process.stderr.write('[zcode-launcher] v2 config \u8BFB\u53D6\u5931\u8D25(' + ((err && err.code) || (err && err.message) || 'unknown') + '): ' + V2_PATH + '\u2014\u2014\u51ED\u636E\u6CE8\u5165\u672A\u751F\u6548\\n');
|
|
@@ -863,60 +910,72 @@ if (!CLI_PATH) {
|
|
|
863
910
|
process.exit(2);
|
|
864
911
|
}
|
|
865
912
|
|
|
866
|
-
|
|
867
|
-
|
|
868
|
-
|
|
869
|
-
|
|
870
|
-
|
|
871
|
-
|
|
872
|
-
|
|
873
|
-
|
|
874
|
-
|
|
875
|
-
|
|
876
|
-
|
|
877
|
-
|
|
878
|
-
|
|
879
|
-
|
|
880
|
-
|
|
881
|
-
|
|
882
|
-
|
|
883
|
-
|
|
884
|
-
|
|
885
|
-
|
|
886
|
-
|
|
887
|
-
|
|
888
|
-
|
|
889
|
-
|
|
890
|
-
|
|
891
|
-
|
|
892
|
-
|
|
893
|
-
|
|
894
|
-
|
|
895
|
-
|
|
896
|
-
|
|
897
|
-
|
|
898
|
-
|
|
899
|
-
|
|
900
|
-
|
|
901
|
-
|
|
902
|
-
|
|
903
|
-
|
|
904
|
-
|
|
905
|
-
|
|
906
|
-
|
|
907
|
-
|
|
908
|
-
|
|
909
|
-
|
|
910
|
-
|
|
911
|
-
|
|
912
|
-
|
|
913
|
+
// [2026-10-13 account \u76F4\u901A] \u5185\u5EFA\u76EE\u5F55\u8BFB\u53D6\u62E6\u622A\uFF1A\u7ED9 zhipu-account \u6761\u76EE\u6CE8\u5165 entitled:true\u3002
|
|
914
|
+
// app-server \u6CE8\u518C\u8868\u88C5\u8F7D\u5224\u636E = access.entitled === true\uFF0C\u5916\u90E8 spawn \u4ECE\u76EE\u5F55\u6784\u5EFA\u7684\u8D26\u53F7
|
|
915
|
+
// \u6761\u76EE\u9ED8\u8BA4\u975E entitled\uFF08YXe \u786C\u7F16\u7801 !1\uFF09\u2192 plan \u5BB6\u65CF\u5F15\u7528\u4E00\u5F8B\u300C\u4E0D\u5B58\u5728 Model\u300D\u3002\u7528\u6237\u88C1\u51B3\uFF1A
|
|
916
|
+
// zai \u7CFB\u8D70 account provider \u914D\u7F6E\u5E76\u7ED5\u8FC7\u8BE5\u9650\u5236\u2014\u2014patch \u53EA\u53D1\u751F\u5728\u672C wrapper \u7684\u8BFB\u53D6\u8FD4\u56DE\u503C\uFF0C
|
|
917
|
+
// ZCode.app \u78C1\u76D8\u6587\u4EF6\u96F6\u89E6\u78B0\u3002null = \u76EE\u5F55\u65E0 zhipu-account \u6761\u76EE\uFF08\u65E0\u9700 patch\uFF09\u3002
|
|
918
|
+
// \u672C\u51FD\u6570\u5FC5\u987B\u4EE5\u5B9A\u4F4D\u540E\u7684\u771F\u5B9E\u8DEF\u5F84\u8C03\u7528\uFF08\u5B89\u88C5\u95E8\u4F20 CATALOG_PATH\uFF09\u2014\u2014\u65E0\u53C2\u8C03\u7528\u4F1A\u5728\u8BFB\u6587\u4EF6
|
|
919
|
+
// \u65F6\u629B\u9519\u88AB catch \u6052\u8FD4 null\uFF0C\u66FE\u81F4\u7EAF account \u5BBF\u4E3B\u8865\u4E01\u5C42\u9759\u9ED8\u4E0D\u5B89\u88C5\uFF08\u89C1\u5B89\u88C5\u95E8\u5904\u6CE8\u91CA\uFF09\u3002
|
|
920
|
+
let CATALOG_PATH = process.env.ZCODE_BUILTIN_PROVIDER_CONFIG_FILE || null;
|
|
921
|
+
const __catalogPatchCache = new Map();
|
|
922
|
+
// \u8DF3\u8FC7\u51B3\u7B56\u5F52\u56E0\uFF082026-10 \u5BA1\u67E5\u8865\uFF09\uFF1AcatalogPatchText \u628A\u300C\u65E0\u6761\u76EE\u9700\u8865\u300D\u4E0E\u300C\u8BFB\u53D6/\u89E3\u6790\u5931\u8D25
|
|
923
|
+
// \uFF08\u6587\u4EF6\u7F3A\u5931/\u635F\u574F\uFF09\u300D\u90FD\u6298\u6210 null\uFF0C\u8DF3\u8FC7\u65E5\u5FD7\u82E5\u4E0D\u533A\u5206\u4F1A\u628A\u635F\u574F\u6001\u8BEF\u62A5\u6210\u300C\u65E0\u6761\u76EE\u300D\uFF0C\u6392\u969C\u88AB\u8BEF\u5BFC
|
|
924
|
+
const __catalogPatchStatus = new Map(); // path -> 'no-entries' | 'unreadable'
|
|
925
|
+
function catalogPatchText(path) {
|
|
926
|
+
if (__catalogPatchCache.has(path)) return __catalogPatchCache.get(path);
|
|
927
|
+
let result = null;
|
|
928
|
+
try {
|
|
929
|
+
const readOrig = fs.__origReadFileSync || fs.readFileSync;
|
|
930
|
+
const parsed = JSON.parse(readOrig(path, 'utf8'));
|
|
931
|
+
const rules = parsed && parsed.config && parsed.config.providerConfigRules
|
|
932
|
+
&& Array.isArray(parsed.config.providerConfigRules.providerRules)
|
|
933
|
+
? parsed.config.providerConfigRules.providerRules : null;
|
|
934
|
+
let touched = 0;
|
|
935
|
+
if (rules) for (const rule of rules) {
|
|
936
|
+
const acc = rule && rule.config && rule.config.access;
|
|
937
|
+
if (acc && acc.type === 'zhipu-account' && acc.entitled !== true) { acc.entitled = true; touched++; }
|
|
938
|
+
}
|
|
939
|
+
result = touched > 0 ? JSON.stringify(parsed) : null;
|
|
940
|
+
__catalogPatchStatus.set(path, 'no-entries');
|
|
941
|
+
} catch { result = null; __catalogPatchStatus.set(path, 'unreadable'); }
|
|
942
|
+
__catalogPatchCache.set(path, result);
|
|
943
|
+
return result;
|
|
944
|
+
}
|
|
945
|
+
|
|
946
|
+
// [2026-10-13 account \u76F4\u901A\u2461] CLI bundle \u6E90\u7801\u5185\u5B58\u8865\u4E01\uFF1A\u5916\u90E8 spawn \u7684\u8D26\u53F7\u6761\u76EE\u6784\u5EFA
|
|
947
|
+
// \u786C\u7F16\u7801 entitled:!1\uFF08YXe\uFF09\uFF0C\u6570\u636E\u9762\u6CE8\u5165\uFF08\u76EE\u5F55 entitled \u5B57\u6BB5\uFF09\u88AB\u5176\u65E0\u89C6\u2014\u2014\u6309\u7528\u6237\u88C1\u51B3
|
|
948
|
+
// \u6539 zcode \u6E90\u7801\u7ED5\u8FC7\uFF1A\u62E6\u622A CLI bundle \u6E90\u7801\u8BFB\u53D6\uFF0C\u5185\u5B58\u66FF\u6362\u8BE5\u5B57\u9762\u91CF\u4E3A !0\uFF08ZCode.app
|
|
949
|
+
// \u78C1\u76D8\u6587\u4EF6\u96F6\u89E6\u78B0\uFF1B\u951A\u4E32\u542B ]]:[] \u5C3E\u7F00\u552F\u4E00\u547D\u4E2D YXe \u6784\u9020\uFF0C\u53E6\u4E00\u5904\u540C\u540D\u6761\u4EF6\u903B\u8F91\u4E0D\u53D7\u5F71\u54CD\uFF09\u3002
|
|
950
|
+
// \u951A\u4E0D\u547D\u4E2D\uFF08\u4E0A\u6E38\u6DF7\u6DC6\u5F62\u6001\u53D8\u5316\uFF09\u2192 \u539F\u6587\u900F\u51FA\uFF1A\u4EC5 account \u5BB6\u65CF\u7EE7\u7EED\u88AB\u62D2\uFF0C\u4E2A\u4EBA provider
|
|
951
|
+
// \u4E0D\u53D7\u5F71\u54CD\u3002
|
|
952
|
+
const __cliPatchCache = new Map();
|
|
953
|
+
function patchedCliSource(path) {
|
|
954
|
+
if (__cliPatchCache.has(path)) return __cliPatchCache.get(path);
|
|
955
|
+
let result = null;
|
|
956
|
+
try {
|
|
957
|
+
const readOrig = fs.__origReadFileSync || fs.readFileSync;
|
|
958
|
+
const src = readOrig(path, 'utf8');
|
|
959
|
+
// \u7248\u672C\u9C81\u68D2\u951A\uFF082026-10-13 \u4FEE\u8BA2\uFF09\uFF1Aminified \u6807\u8BC6\u7B26\uFF08Uk/I3 \u7B49\uFF09\u968F zcode \u91CD\u65B0\u6253\u5305
|
|
960
|
+
// \u6F02\u79FB\uFF0C\u5C5E\u6027\u540D\uFF08zcodeBuiltinProviders / zhipu-account / entitled\uFF09\u662F\u6570\u636E/\u5951\u7EA6
|
|
961
|
+
// \u771F\u540D\u4E0D\u88AB\u6DF7\u6DC6\u2014\u2014\u4EE5\u5C5E\u6027\u540D\u5B9A\u4F4D + 600 \u5B57\u7B26\u7A97\u53E3\u5185\u628A\u8D26\u53F7\u6761\u76EE\u6784\u5EFA\u7684 entitled:!1
|
|
962
|
+
// \u7FFB\u8F6C\u4E3A !0\u3002\u7A97\u53E3\u96F6\u547D\u4E2D = \u4E0A\u6E38\u5F62\u6001\u6F02\u79FB \u2192 \u539F\u6587\u900F\u51FA + stderr warn\uFF08\u6F02\u79FB\u53EF\u89C1\uFF0C
|
|
963
|
+
// \u8FDB app-server stderr \u65E5\u5FD7\uFF09\uFF0C\u4E2A\u4EBA provider \u4E0D\u53D7\u5F71\u54CD\u3002
|
|
964
|
+
const anchorIdx = src.indexOf('zcodeBuiltinProviders.entries()');
|
|
965
|
+
if (anchorIdx >= 0) {
|
|
966
|
+
const window = src.slice(anchorIdx, Math.min(src.length, anchorIdx + 600));
|
|
967
|
+
if (window.indexOf('zhipu-account') >= 0 && window.indexOf('entitled:!1') >= 0) {
|
|
968
|
+
result = src.slice(0, anchorIdx)
|
|
969
|
+
+ window.split('entitled:!1').join('entitled:!0')
|
|
970
|
+
+ src.slice(anchorIdx + 600);
|
|
971
|
+
}
|
|
913
972
|
}
|
|
914
|
-
if (
|
|
915
|
-
|
|
916
|
-
return fs.__origExistsSync.call(fs, PI_SYNCED_PATH);
|
|
973
|
+
if (result === null) {
|
|
974
|
+
process.stderr.write('[zcode-launcher] account bypass: CLI bundle anchor not found (zcode upstream shape drifted?) - account family stays gated, personal providers unaffected\\n');
|
|
917
975
|
}
|
|
918
|
-
|
|
919
|
-
|
|
976
|
+
} catch { result = null; }
|
|
977
|
+
__cliPatchCache.set(path, result);
|
|
978
|
+
return result;
|
|
920
979
|
}
|
|
921
980
|
|
|
922
981
|
// \u5185\u5EFA provider \u914D\u7F6E\u5B9A\u4F4D\uFF08\u6F02\u79FB\u9762\u2461\uFF09\uFF1A3.12.x \u8D77\u914D\u7F6E\u6587\u4EF6\u632A\u4F4D + CLI \u4F9D\u8D56\u5BBF\u4E3B\u6CE8\u5165
|
|
@@ -925,6 +984,11 @@ if (text !== null) {
|
|
|
925
984
|
// <plat>-<arch> \u4F18\u5148\uFF0CRust arch \u53D8\u4F53\u5982 darwin-aarch64 \u5B57\u5178\u5E8F\u8DDF\u540E\uFF09\xD7 \u7248\u672C\u76EE\u5F55
|
|
926
985
|
// \uFF08semver \u6700\u5927\uFF09\u7684 endpoint-*/zcode-builtin.json \u2192 \u90FD\u627E\u4E0D\u5230\u5219\u4E0D\u8BBE\u952E\uFF0C\u8BA9 CLI
|
|
927
986
|
// \u539F\u751F\u62A5\u9519\u900F\u51FA\uFF08\u9519\u8BEF\u6587\u6848\u542B\u6062\u590D\u6307\u5F15\uFF09\u3002
|
|
987
|
+
// [\u4F4D\u7F6E\uFF1A\u5B89\u88C5\u95E8\u4E4B\u524D] \u5B9A\u4F4D/env \u63A8\u5BFC\u5FC5\u987B\u5148\u4E8E\u5B89\u88C5\u95E8\u5224\u5B9A\u5B8C\u6210\u2014\u2014catalogPatchText
|
|
988
|
+
// \u9700\u8981\u5B9A\u4F4D\u540E\u7684\u771F\u5B9E\u8DEF\u5F84\u53C2\u4E0E\u95E8\u5224\u5B9A\u3002\u66FE\u56E0\u95E8\u5148\u4E8E\u5B9A\u4F4D\u6267\u884C\u4E14\u65E0\u53C2\u8C03\u7528\uFF0C
|
|
989
|
+
// fs.readFileSync(undefined) \u629B\u9519\u88AB catch \u6052\u8FD4 null \u2192 \u95E8\u9000\u5316\u4E3A text!==null\uFF0C
|
|
990
|
+
// \u7EAF account \u5BBF\u4E3B\uFF08v2 \u65E0\u51ED\u636E\u6761\u76EE \u2192 text=null\uFF09\u4E0B\u8865\u4E01\u5C42\u9759\u9ED8\u4E0D\u5B89\u88C5\u3001account
|
|
991
|
+
// \u76F4\u901A\u6574\u4F53\u5931\u6548\u4E14\u96F6\u65E5\u5FD7\uFF082026-10 \u56DE\u5F52\u4FEE\u590D\uFF09\u3002
|
|
928
992
|
if (!process.env.ZCODE_BUILTIN_PROVIDER_CONFIG_FILE) {
|
|
929
993
|
let located = null;
|
|
930
994
|
try {
|
|
@@ -966,6 +1030,7 @@ if (!process.env.ZCODE_BUILTIN_PROVIDER_CONFIG_FILE) {
|
|
|
966
1030
|
}
|
|
967
1031
|
} catch { /* provider \u76EE\u5F55\u7F3A\u5931/\u4E0D\u53EF\u8BFB \u2192 \u4E0D\u8BBE\u952E */ }
|
|
968
1032
|
if (located) process.env.ZCODE_BUILTIN_PROVIDER_CONFIG_FILE = located;
|
|
1033
|
+
CATALOG_PATH = process.env.ZCODE_BUILTIN_PROVIDER_CONFIG_FILE || null;
|
|
969
1034
|
// endpoint origin \u5BF9\u9F50\uFF082026-09-29 \u8FC1\u79FB\u540C\u6B65\uFF09\uFF1ACLI \u6309 ZCODE_BASE_URL \u6D3E\u751F active
|
|
970
1035
|
// \u76EE\u5F55\u8DEF\u5F84\uFF08sha256(origin) \u524D\u7F00\uFF09\uFF1BGUI \u5B89\u88C5\u7684\u76EE\u5F55\u5728 refresh \u63A7\u5236\u6587\u4EF6\u7684 endpointKey
|
|
971
1036
|
// \u4E0B\uFF08\u5982 https://zcode.z.ai\uFF09\uFF0C\u4E0E CLI \u7F3A\u7701 origin\uFF08bigmodel.cn\uFF09\u4E0D\u540C\u2014\u2014\u4E0D\u6CE8\u5165\u5219
|
|
@@ -985,6 +1050,115 @@ if (!process.env.ZCODE_BUILTIN_PROVIDER_CONFIG_FILE) {
|
|
|
985
1050
|
}
|
|
986
1051
|
}
|
|
987
1052
|
|
|
1053
|
+
// \u5B89\u88C5\u95E8\uFF1A\u4EFB\u4E00 patch \u6E90\u53EF\u7528\u5373\u5B89\u88C5\u62E6\u622A\u5C42\uFF1B\u51B3\u7B56\u4E24\u6001\u90FD\u51FA\u58F0\uFF08\u88C5\u4E86\u54EA\u4E9B patch / \u4E3A\u4F55
|
|
1054
|
+
// \u8DF3\u8FC7\uFF09\u2014\u2014\u8865\u4E01\u5C42\u7684\u5931\u6548\u5F62\u6001\u662F\u9759\u9ED8\u7684\uFF08account \u76F4\u901A\u5931\u6548 = plan \u5BB6\u65CF\u62A5\u300C\u4E0D\u5B58\u5728
|
|
1055
|
+
// Model\u300D\u800C\u65E0\u4EFB\u4F55\u65E5\u5FD7\uFF09\uFF0C\u8DF3\u8FC7\u540C\u6837\u5FC5\u987B\u7559\u75D5\u3002
|
|
1056
|
+
const text = injectedConfigText();
|
|
1057
|
+
const catalogPatch = CATALOG_PATH !== null ? catalogPatchText(CATALOG_PATH) : null;
|
|
1058
|
+
if (text !== null || catalogPatch !== null) {
|
|
1059
|
+
process.stderr.write('[zcode-launcher] \u8865\u4E01\u5C42\u5DF2\u5B89\u88C5: cli-config-inject=' + (text !== null ? 'on' : 'off')
|
|
1060
|
+
+ ', catalog-entitled=' + (catalogPatch !== null ? 'on' : 'off')
|
|
1061
|
+
+ ', provider-merge=' + (PI_SYNCED_PATH ? 'armed' : 'off') + ', cli-source-bypass=armed\\n');
|
|
1062
|
+
// encoding \u5F52\u4E00\uFF08Node \u522B\u540D\u9762\uFF09\uFF1A'utf8'/'utf-8'/\u5927\u5C0F\u5199\u53D8\u4F53\u7EDF\u4E00\u6309 string \u8FD4\u56DE\u2014\u2014
|
|
1063
|
+
// \u771F\u5B9E bundle \u7684 config \u8BFB\u53D6\u6070\u7528 'utf-8' \u5F62\u6001\uFF0C\u4EC5\u5339\u914D 'utf8' \u4F1A\u9519\u56DE Buffer
|
|
1064
|
+
// \uFF08\u5F53\u4E0B\u6E38\u4E0D\u53EA JSON.parse \u800C\u505A\u5B57\u7B26\u4E32\u8FD0\u7B97\u65F6\u5373 TypeError\uFF09
|
|
1065
|
+
// shape \u540C\u65F6\u670D\u52A1\u56DB\u5904 patch \u6E90\uFF08config / provider merge / \u5185\u5EFA\u76EE\u5F55 / \u2014\u2014encoding \u5F52\u4E00
|
|
1066
|
+
// \u8BED\u4E49\u76F8\u540C\uFF0C\u5355\u526F\u672C\uFF1A\u76EE\u5F55\u6761\u76EE\u66FE\u53E6\u6301\u9010\u5B57\u91CD\u590D\u526F\u672C catalogShape\uFF0C\u5DF2\u5E76\u56DE\u672C\u51FD\u6570\uFF09
|
|
1067
|
+
const shape = (args, value) => {
|
|
1068
|
+
const enc = args[0];
|
|
1069
|
+
const e = typeof enc === 'string' ? enc
|
|
1070
|
+
: (enc && typeof enc === 'object' && typeof enc.encoding === 'string' ? enc.encoding : undefined);
|
|
1071
|
+
if (e !== undefined && String(e).toLowerCase().replace(/-/g, '') === 'utf8') return value;
|
|
1072
|
+
return Buffer.from(value);
|
|
1073
|
+
};
|
|
1074
|
+
fs.__origReadFileSync = fs.readFileSync;
|
|
1075
|
+
fs.readFileSync = function (p, ...rest) {
|
|
1076
|
+
if (typeof p === 'string' && p === CONFIG_PATH) {
|
|
1077
|
+
const cur = injectedConfigText();
|
|
1078
|
+
if (cur !== null) return shape(rest, cur);
|
|
1079
|
+
}
|
|
1080
|
+
// D3 \u6362\u8F68\uFF1ARegistry \u76F4\u8BFB\u771F\u5B9E provider_config.json \u2192 merge(\u771F\u5B9E, \u526F\u672C) \u89C6\u56FE
|
|
1081
|
+
if (typeof p === 'string' && p === REAL_PROVIDER_CONFIG_PATH) {
|
|
1082
|
+
const cur = mergedProviderConfigText();
|
|
1083
|
+
if (cur !== null) return shape(rest, cur);
|
|
1084
|
+
}
|
|
1085
|
+
// account \u76F4\u901A\uFF1A\u5185\u5EFA\u76EE\u5F55\u8BFB\u53D6 \u2192 zhipu-account \u6CE8\u5165 entitled:true\u3002\u6309\u6587\u4EF6\u540D\u5339\u914D
|
|
1086
|
+
// \uFF08app-server \u6309 ZCODE_BASE_URL \u81EA\u6D3E\u751F endpoint \u76EE\u5F55\uFF0C\u8BFB\u8DEF\u5F84\u2260env \u5B9A\u4F4D\u8DEF\u5F84\uFF09\u3002
|
|
1087
|
+
if (typeof p === 'string' && p.endsWith('zcode-builtin.json')) {
|
|
1088
|
+
const cur = catalogPatchText(p);
|
|
1089
|
+
if (cur !== null) return shape(rest, cur);
|
|
1090
|
+
}
|
|
1091
|
+
// account \u76F4\u901A\u2461\uFF1ACLI bundle \u6E90\u7801 \u2192 YXe entitled:!1 \u5185\u5B58\u7FFB\u8F6C\u4E3A !0
|
|
1092
|
+
if (typeof p === 'string' && p === CLI_PATH) {
|
|
1093
|
+
const cur = patchedCliSource(p);
|
|
1094
|
+
if (cur !== null) return cur;
|
|
1095
|
+
}
|
|
1096
|
+
return fs.__origReadFileSync.call(fs, p, ...rest);
|
|
1097
|
+
};
|
|
1098
|
+
fs.promises.__origReadFile = fs.promises.readFile;
|
|
1099
|
+
fs.promises.readFile = function (p, ...rest) {
|
|
1100
|
+
if (typeof p === 'string' && p === CONFIG_PATH) {
|
|
1101
|
+
const cur = injectedConfigText();
|
|
1102
|
+
if (cur !== null) return Promise.resolve(shape(rest, cur));
|
|
1103
|
+
}
|
|
1104
|
+
if (typeof p === 'string' && p === REAL_PROVIDER_CONFIG_PATH) {
|
|
1105
|
+
const cur = mergedProviderConfigText();
|
|
1106
|
+
if (cur !== null) return Promise.resolve(shape(rest, cur));
|
|
1107
|
+
}
|
|
1108
|
+
if (typeof p === 'string' && p.endsWith('zcode-builtin.json')) {
|
|
1109
|
+
const cur = catalogPatchText(p);
|
|
1110
|
+
if (cur !== null) return Promise.resolve(shape(rest, cur));
|
|
1111
|
+
}
|
|
1112
|
+
if (typeof p === 'string' && p === CLI_PATH) {
|
|
1113
|
+
const cur = patchedCliSource(p);
|
|
1114
|
+
if (cur !== null) return Promise.resolve(cur);
|
|
1115
|
+
}
|
|
1116
|
+
return fs.promises.__origReadFile.call(fs.promises, p, ...rest);
|
|
1117
|
+
};
|
|
1118
|
+
// [account \u76F4\u901A\u2461 \u8F7D\u4F53] .js \u6269\u5C55\u5904\u7406\u5668\u6302\u94A9\uFF1ANode \u5BF9 CJS \u5165\u53E3\u6E90\u7801\u7684\u8BFB\u53D6\u8D70\u539F\u751F
|
|
1119
|
+
// internalModuleReadFile \u901A\u9053\uFF0Cfs \u7334\u8865\u4E01\u4E0D\u53EF\u89C1\u2014\u2014CLI bundle \u6E90\u7801\u8865\u4E01\u6539\u5728\u6269\u5C55
|
|
1120
|
+
// \u5904\u7406\u5668\u5C42\u62E6\u622A\uFF08\u4EC5\u547D\u4E2D CLI_PATH\uFF1B\u5176\u4F59\u6587\u4EF6\u5168\u6743\u59D4\u6258\u539F handler\uFF0C\u96F6\u989D\u5916\u5F00\u9500\uFF09\u3002
|
|
1121
|
+
const __Module = require('node:module');
|
|
1122
|
+
const __origJsHandler = __Module._extensions['.js'];
|
|
1123
|
+
__Module._extensions['.js'] = function (mod, filename) {
|
|
1124
|
+
if (CLI_PATH && filename === CLI_PATH) {
|
|
1125
|
+
const patched = patchedCliSource(filename);
|
|
1126
|
+
if (patched !== null) {
|
|
1127
|
+
let src = patched.charCodeAt(0) === 0xfeff ? patched.slice(1) : patched;
|
|
1128
|
+
if (src.startsWith('#!')) src = src.slice(src.indexOf('\\n') + 1);
|
|
1129
|
+
return mod._compile(src, filename);
|
|
1130
|
+
}
|
|
1131
|
+
}
|
|
1132
|
+
return __origJsHandler(mod, filename);
|
|
1133
|
+
};
|
|
1134
|
+
|
|
1135
|
+
// existsSync \u62E6\u622A\uFF1A\u771F\u5B9E bundle \u7684\u7528\u6237 config \u8BFB\u53D6\uFF08loadFileConfig\uFF09\u4EE5 existsSync
|
|
1136
|
+
// \u4E3A\u77ED\u8DEF\u95E8\u2014\u2014\u6587\u4EF6\u4E0D\u5B58\u5728\u65F6\u8FD4\u56DE\u7A7A config \u4E14 readFileSync \u4E0D\u88AB\u8C03\u7528\uFF0CGUI-only
|
|
1137
|
+
// \u767B\u5F55\u5BBF\u4E3B\uFF08cli/config.json \u4ECE\u672A\u88AB CLI \u4FA7\u5199\u8FC7\uFF09\u4E0A\u6CE8\u5165\u53EA\u6302\u5728\u8BFB\u53D6\u9762 = \u4E0D\u53EF\u89C1\u3002
|
|
1138
|
+
// D3 \u6362\u8F68\uFF1A\u771F\u5B9E provider_config.json \u7684\u5B58\u5728\u6027 = \u771F\u5B9E\u6216\u526F\u672C\u4EFB\u4E00\u5B58\u5728\u5373 true
|
|
1139
|
+
//\uFF08\u771F\u5B9E\u7F3A\u5931 + \u526F\u672C\u5B58\u5728\u65F6 Registry \u7684 existsSync \u95E8\u4E0D\u5F97\u62E6\u6389 merge \u89C6\u56FE\u8BFB\u53D6\uFF09
|
|
1140
|
+
fs.__origExistsSync = fs.existsSync;
|
|
1141
|
+
fs.existsSync = function (p) {
|
|
1142
|
+
if (typeof p === 'string' && p === CONFIG_PATH) {
|
|
1143
|
+
const cur = injectedConfigText();
|
|
1144
|
+
if (cur !== null) return true;
|
|
1145
|
+
}
|
|
1146
|
+
if (typeof p === 'string' && p === REAL_PROVIDER_CONFIG_PATH && PI_SYNCED_PATH) {
|
|
1147
|
+
if (fs.__origExistsSync.call(fs, REAL_PROVIDER_CONFIG_PATH)) return true;
|
|
1148
|
+
return fs.__origExistsSync.call(fs, PI_SYNCED_PATH);
|
|
1149
|
+
}
|
|
1150
|
+
return fs.__origExistsSync.call(fs, p);
|
|
1151
|
+
};
|
|
1152
|
+
} else {
|
|
1153
|
+
process.stderr.write('[zcode-launcher] \u8865\u4E01\u5C42\u672A\u5B89\u88C5(\u8DF3\u8FC7): \u65E0\u51ED\u636E\u53EF\u6CE8\u5165(v2 config \u65E0 provider \u6761\u76EE)'
|
|
1154
|
+
+ (CATALOG_PATH !== null
|
|
1155
|
+
? (__catalogPatchStatus.get(CATALOG_PATH) === 'unreadable'
|
|
1156
|
+
? '; \u5185\u5EFA\u76EE\u5F55\u5DF2\u5B9A\u4F4D\u4F46 catalog \u8BFB\u53D6/\u89E3\u6790\u5931\u8D25(\u6587\u4EF6\u7F3A\u5931\u6216\u635F\u574F\uFF0C\u6392\u969C\u5165\u53E3: zcode-builtin.json\u2014\u2014\u975E\u300C\u65E0\u6761\u76EE\u300D)'
|
|
1157
|
+
: '; \u5185\u5EFA\u76EE\u5F55\u5DF2\u5B9A\u4F4D\u4F46\u65E0 zhipu-account \u6761\u76EE\u9700\u8865(\u76EE\u5F55\u8BFB\u53D6\u539F\u751F\u900F\u51FA)')
|
|
1158
|
+
: '; \u5185\u5EFA\u76EE\u5F55\u672A\u5B9A\u4F4D(env \u672A\u8BBE\u4E14\u81EA\u5B9A\u4F4D\u672A\u547D\u4E2D)')
|
|
1159
|
+
+ '\\n');
|
|
1160
|
+
}
|
|
1161
|
+
|
|
988
1162
|
// \u4E0A\u6E38 provider bootstrap \u4EE5 argv[1] \u4E3A\u5165\u53E3\u951A\uFF0C\u4ECE\u8BE5\u8DEF\u5F84\u90BB\u8FD1\u5B9A\u4F4D CLI \u5185\u5EFA
|
|
989
1163
|
// provider \u914D\u7F6E\u2014\u2014wrapper \u5F62\u6001\u4E0B argv[1] = \u672C wrapper \u843D\u76D8\u8DEF\u5F84\uFF0Cbootstrap \u4F1A\u5728
|
|
990
1164
|
// wrapper \u90BB\u57DF\u627E provider \u914D\u7F6E\u800C\u5931\u8D25\uFF08\u771F\u673A\u62A5\u300C\u65E0\u6CD5\u5B9A\u4F4D CLI ZCode Built-in Provider
|
|
@@ -2158,6 +2332,7 @@ function maybeSweepExpiredZcodeSessions(dbPath, opts = {}) {
|
|
|
2158
2332
|
var logger4 = getLogger4("subagents");
|
|
2159
2333
|
var PROBE_VERSION_TIMEOUT_MS = 15e3;
|
|
2160
2334
|
var COMMON_THOUGHT_LEVELS = ["low", "high", "max"];
|
|
2335
|
+
var OFF_FAMILY_THINKING_LEVELS = /* @__PURE__ */ new Set(["off", "minimal"]);
|
|
2161
2336
|
var ZcodeEngine = class {
|
|
2162
2337
|
id = ZCODE_ENGINE_ID;
|
|
2163
2338
|
deps;
|
|
@@ -2370,7 +2545,7 @@ var ZcodeEngine = class {
|
|
|
2370
2545
|
*/
|
|
2371
2546
|
async attemptAppServerTurn(task, ctx, modelRef, cwd, prompt, opts = {}) {
|
|
2372
2547
|
const rt = this.ensureAppServerRuntime();
|
|
2373
|
-
const reasoningLevel = modelRef !== void 0 && modelRef !== "" ? this.
|
|
2548
|
+
const reasoningLevel = modelRef !== void 0 && modelRef !== "" ? this.reasoningLevelFor(modelRef, task.thinkingLevel) : void 0;
|
|
2374
2549
|
const createParams = buildAppServerCreateParams(task, modelRef, cwd, reasoningLevel);
|
|
2375
2550
|
let currentSessionId;
|
|
2376
2551
|
let signalSessionCreated;
|
|
@@ -2667,16 +2842,30 @@ var ZcodeEngine = class {
|
|
|
2667
2842
|
listModels() {
|
|
2668
2843
|
return listZcodeModels(this.deps.sources);
|
|
2669
2844
|
}
|
|
2670
|
-
/**
|
|
2845
|
+
/** 模型 reasoning 值域缓存(目录 modelRules 值域;per-modelRef 记忆化——
|
|
2671
2846
|
* 目录文件在引擎进程生命周期内视为静态,重复 run 不重读)。 */
|
|
2672
2847
|
reasoningMemo = /* @__PURE__ */ new Map();
|
|
2673
|
-
|
|
2848
|
+
/**
|
|
2849
|
+
* create 帧模型 reasoning 档择选(目录值域域内择档;2026-10-13 探针实测驱动):
|
|
2850
|
+
* - 无 thinkingLevel:目录值域首值(最小档,现状保形——轻推理默认);
|
|
2851
|
+
* - off 族(off/minimal,显式禁思考/最省):恒值域首值(最小档)——绝不落
|
|
2852
|
+
* 非最小档末值回退(那是「请求思考」档位的回退,off 族落之即意图反转);
|
|
2853
|
+
* - 其余 thinkingLevel:精确命中值域 → 用之;值域无精确名 → 取非最小档末值
|
|
2854
|
+
* (请求了思考 = reasoning 开;plan 网关对部分模型拒收 disabled——目录域含
|
|
2855
|
+
* disabled 但服务端只认非最小档,域与接受面漂移时显式意图走非最小档)。
|
|
2856
|
+
*/
|
|
2857
|
+
reasoningLevelFor(modelRef, thinkingLevel) {
|
|
2674
2858
|
const memoKey = `${locateZcodeBuiltinCatalog(this.deps.sources) ?? "none"}|${modelRef}`;
|
|
2675
|
-
const
|
|
2676
|
-
|
|
2677
|
-
|
|
2678
|
-
|
|
2679
|
-
|
|
2859
|
+
const memoHit = this.reasoningMemo.get(memoKey);
|
|
2860
|
+
const domain = memoHit !== void 0 || this.reasoningMemo.has(memoKey) ? memoHit : resolveZcodeReasoningValues(modelRef, this.deps.sources);
|
|
2861
|
+
this.reasoningMemo.set(memoKey, domain);
|
|
2862
|
+
if (domain === void 0 || domain.length === 0) return void 0;
|
|
2863
|
+
const requested = thinkingLevel?.trim();
|
|
2864
|
+
if (requested === void 0 || requested === "") return domain[0];
|
|
2865
|
+
if (domain.includes(requested)) return requested;
|
|
2866
|
+
if (OFF_FAMILY_THINKING_LEVELS.has(requested)) return domain[0];
|
|
2867
|
+
const nonMinimal = domain.slice(1);
|
|
2868
|
+
return nonMinimal.length > 0 ? nonMinimal[nonMinimal.length - 1] : domain[0];
|
|
2680
2869
|
}
|
|
2681
2870
|
/**
|
|
2682
2871
|
* [u-h2 D2-2] 派发同步期 model 校验:委托 resolveZcodeModelRef(与 run prepare 期
|