bazilion 0.6.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/README.md +4 -4
- package/dist/cli.js +104 -35
- package/dist/cli.js.map +1 -1
- package/dist/daemon.js +349 -29
- package/dist/daemon.js.map +1 -1
- package/dist/web/client/assets/AgentAvatar-JYijLvZ2.js +1 -0
- package/dist/web/client/assets/AgentTabs-DioGqUVR.js +1 -0
- package/dist/web/client/assets/Button-ByiV6fpd.js +1 -0
- package/dist/web/client/assets/ChatPane-DzEgOEqS.js +74 -0
- package/dist/web/client/assets/ConfigTabs-pY-V0Rie.js +1 -0
- package/dist/web/client/assets/FieldRow-CNKma5LE.js +1 -0
- package/dist/web/client/assets/MembersEditor-C6UpqDdV.js +1 -0
- package/dist/web/client/assets/SpawnTeamModal-BEkNCKXm.js +1 -0
- package/dist/web/client/assets/TemplatesTabs-UM04RMO9.js +1 -0
- package/dist/web/client/assets/_id-BNJapCT4.js +1 -0
- package/dist/web/client/assets/_id-CjGoV8Mr.js +1 -0
- package/dist/web/client/assets/_id-DehuCHUw.js +1 -0
- package/dist/web/client/assets/_id-Dz9fjcCM.js +1 -0
- package/dist/web/client/assets/agents-M6omAXcZ.js +1 -0
- package/dist/web/client/assets/config-DIuEc5bm.js +3 -0
- package/dist/web/client/assets/groups-DpE2d2zZ.js +1 -0
- package/dist/web/client/assets/inbox-BPnLsRNf.js +1 -0
- package/dist/web/client/assets/index-MAJuXnie.js +12 -0
- package/dist/web/client/assets/jsx-runtime-DGeXAQPT.js +1 -0
- package/dist/web/client/assets/login-CawJX16E.js +1 -0
- package/dist/web/client/assets/mcp-DIrh9-v_.js +1 -0
- package/dist/web/client/assets/memory-BpHbdKsd.js +1 -0
- package/dist/web/client/assets/preload-helper-CvnapA2_.js +1 -0
- package/dist/web/client/assets/profile-groups-ByoKak0c.js +1 -0
- package/dist/web/client/assets/profiles-BEjv8LGo.js +1 -0
- package/dist/web/client/assets/routes-D2COHy7v.js +1 -0
- package/dist/web/client/assets/services-D212jSK_.js +1 -0
- package/dist/web/client/assets/skills-Da0MURjY.js +1 -0
- package/dist/web/client/assets/styles-BgE5bCHA.css +2 -0
- package/dist/web/client/assets/telegram-Czh2MdVm.js +1 -0
- package/dist/web/client/assets/tokens-E_JvO5JN.js +1 -0
- package/dist/web/client/assets/triggers-BBRZQOm7.js +1 -0
- package/dist/web/client/assets/welcome-Dn-zvmBE.js +1 -0
- package/dist/web/server/assets/{_id-C78M9_j9.js → _id-BKev9H1p.js} +2 -2
- package/dist/web/server/assets/{_id-Dc8P9sy2.js → _id-BNwlbWHP.js} +1 -1
- package/dist/web/server/assets/{_id-GJk3EYTT.js → _id-BdRiQb2H.js} +42 -5
- package/dist/web/server/assets/{_id-CrQbC5L8.js → _id-BqnDy_Ca.js} +2 -2
- package/dist/web/server/assets/{_id-CHNm7EAd.js → _id-CRqqi8IE.js} +1 -1
- package/dist/web/server/assets/{_id-Bm4-_AP-.js → _id-CXg-Blec.js} +1 -1
- package/dist/web/server/assets/{_id-BZ-YCWSw.js → _id-CnQflrRv.js} +2 -2
- package/dist/web/server/assets/{_id-DF3pfi9M.js → _id-D8duqgd5.js} +1 -1
- package/dist/web/server/assets/{_id-pd4S7LTi.js → _id-DDixKEud.js} +1 -1
- package/dist/web/server/assets/{_id-CvIGhq4U.js → _id-DUIrFV3G.js} +2 -2
- package/dist/web/server/assets/{_id-CGZbudCl.js → _id-D_Ew11ED.js} +1 -1
- package/dist/web/server/assets/{_id-Crcw2HhT.js → _id-Sjw0zhA6.js} +1 -1
- package/dist/web/server/assets/{_tanstack-start-manifest_v-CPyKYMJg.js → _tanstack-start-manifest_v-D9FLKShQ.js} +45 -41
- package/dist/web/server/assets/{agents-70EwQJR6.js → agents-C7SBPN0M.js} +1 -1
- package/dist/web/server/assets/{agents-K4Smhnq3.js → agents-ChcAJUI5.js} +2 -2
- package/dist/web/server/assets/{agents-Ds4lcREv.js → agents-k5QURC4I.js} +1 -1
- package/dist/web/server/assets/{auth-DpAGLHpA.js → auth-DzRAMwVt.js} +1 -1
- package/dist/web/server/assets/{config-DxCGYgR9.js → config-Bq3o924J.js} +2 -2
- package/dist/web/server/assets/{config-CMXUx_IF.js → config-CHaCv89D.js} +1 -1
- package/dist/web/server/assets/{config-DQbCsY_l.js → config-CdVjqjin.js} +18 -9
- package/dist/web/server/assets/{createServerRpc-CBTntoKx.js → createServerRpc-CeKECg65.js} +1 -1
- package/dist/web/server/assets/{createSsrRpc-DHBVUN8O.js → createSsrRpc-ZBGxhl8t.js} +1 -1
- package/dist/web/server/assets/{empty-plugin-adapters-Bos_V2s-.js → empty-plugin-adapters-DKUlnwwl.js} +1 -1
- package/dist/web/server/assets/{groups-Cms8cvH5.js → groups-CbSwND2r.js} +2 -2
- package/dist/web/server/assets/{groups-CXVew7BP.js → groups-CeRRlZaZ.js} +1 -1
- package/dist/web/server/assets/{groups-Dmcvw5ya.js → groups-pk4CYSuf.js} +1 -1
- package/dist/web/server/assets/{inbox-0QfwsrGo.js → inbox-Bxb3W04M.js} +2 -2
- package/dist/web/server/assets/{inbox-B7UWoICA.js → inbox-CkiSvD14.js} +1 -1
- package/dist/web/server/assets/{inbox-8HybA2Ws.js → inbox-DU27iHv_.js} +1 -1
- package/dist/web/server/assets/{mcp-DIa0kIOf.js → mcp-BU_kKENi.js} +1 -1
- package/dist/web/server/assets/{mcp-DsTjY3uz.js → mcp-BsFKEoXt.js} +1 -1
- package/dist/web/server/assets/{mcp-42BrkI1I.js → mcp-CKqwG4mt.js} +2 -2
- package/dist/web/server/assets/{memory-Dr0lOM2y.js → memory-BaYnfm7K.js} +1 -1
- package/dist/web/server/assets/{memory-BfrMp8iY.js → memory-CQaqWnyM.js} +1 -1
- package/dist/web/server/assets/{memory-EEgLDfCj.js → memory-Ns2-Z31p.js} +2 -2
- package/dist/web/server/assets/{profile-groups-C5isDI2t.js → profile-groups-CiU06yN1.js} +1 -1
- package/dist/web/server/assets/{profile-groups-B_kIT6BU.js → profile-groups-D21MYoLM.js} +1 -1
- package/dist/web/server/assets/{profile-groups-BW5gU-fG.js → profile-groups-aoJleXHP.js} +2 -2
- package/dist/web/server/assets/{profiles-BbPTpmyq.js → profiles-C6a3RKgu.js} +1 -1
- package/dist/web/server/assets/{profiles-Cy5auEj8.js → profiles-CZ5NkmVw.js} +2 -2
- package/dist/web/server/assets/{profiles-BP1v-jna.js → profiles-LxcC_L6n.js} +1 -1
- package/dist/web/server/assets/{router-CL100-Ly.js → router-BrDascdO.js} +21 -21
- package/dist/web/server/assets/{routes-D2H1Hnoh.js → routes-C61gBiXa.js} +1 -1
- package/dist/web/server/assets/{routes-Dzk8jvIo.js → routes-Ce2VWrU9.js} +1 -1
- package/dist/web/server/assets/{routes-CzJLQxcS.js → routes-V9URcp1v.js} +2 -2
- package/dist/web/server/assets/{services-DFenjiw0.js → services-B91w2f-X.js} +1 -1
- package/dist/web/server/assets/{services-DEgYsWJ4.js → services-Ccc5s2bS.js} +2 -2
- package/dist/web/server/assets/{services-Bgj6M2gC.js → services-DhRiNeq0.js} +1 -1
- package/dist/web/server/assets/{skills-BASIP_rT.js → skills-CFIWVg32.js} +1 -1
- package/dist/web/server/assets/{skills-DZXN680t.js → skills-D89ND2kR.js} +67 -7
- package/dist/web/server/assets/{skills-C-JPRCHh.js → skills-l2cyQ3zS.js} +2 -2
- package/dist/web/server/assets/start-CYDpZ6cb.js +4 -0
- package/dist/web/server/assets/{telegram-sUckI94O.js → telegram-BdaUIjvs.js} +1 -1
- package/dist/web/server/assets/{telegram-BbvqVWxa.js → telegram-DfAddLdv.js} +1 -1
- package/dist/web/server/assets/{telegram-Bq49AtnP.js → telegram-T3l9KtiE.js} +2 -2
- package/dist/web/server/assets/{tokens-Dwn00iV7.js → tokens-BCz3PSoT.js} +1 -1
- package/dist/web/server/assets/{tokens-CImgxhDI.js → tokens-CkKqrtk-.js} +1 -1
- package/dist/web/server/assets/{tokens-BERRE0wB.js → tokens-DdpnfV_Y.js} +2 -2
- package/dist/web/server/assets/{triggers-TyIjwSYn.js → triggers-BcH_6PW1.js} +1 -1
- package/dist/web/server/assets/{triggers-DtexqbNH.js → triggers-BcTTwMfy.js} +2 -2
- package/dist/web/server/assets/{triggers-_iSeahif.js → triggers-BzJG1nN5.js} +1 -1
- package/dist/web/server/assets/{welcome-BkQ9NC5K.js → welcome-CP4CZ9B6.js} +13 -9
- package/dist/web/server/server.js +94 -82
- package/dist/worker.js +65 -2
- package/dist/worker.js.map +1 -1
- package/package.json +17 -17
- package/dist/web/client/assets/AgentAvatar-Cq7PVBE_.js +0 -1
- package/dist/web/client/assets/AgentTabs-M5K8emJ8.js +0 -1
- package/dist/web/client/assets/Button-BefUtjMZ.js +0 -1
- package/dist/web/client/assets/ChatPane-C8zQfpzH.js +0 -74
- package/dist/web/client/assets/ConfigTabs-DRqAymcN.js +0 -1
- package/dist/web/client/assets/FieldRow-BqWnxZiX.js +0 -1
- package/dist/web/client/assets/MembersEditor-B-47GLUb.js +0 -1
- package/dist/web/client/assets/SpawnTeamModal-DiiC7Nc0.js +0 -1
- package/dist/web/client/assets/TemplatesTabs-DB4KERTQ.js +0 -1
- package/dist/web/client/assets/_id-B7gv1aPQ.js +0 -1
- package/dist/web/client/assets/_id-C7d1AqS0.js +0 -1
- package/dist/web/client/assets/_id-DhiwjC8u.js +0 -1
- package/dist/web/client/assets/_id-p8lUuNFm.js +0 -1
- package/dist/web/client/assets/agents-v8G-wt0M.js +0 -1
- package/dist/web/client/assets/config-BdmYpS_y.js +0 -3
- package/dist/web/client/assets/groups-DiY_ExGM.js +0 -1
- package/dist/web/client/assets/inbox-DtfVx246.js +0 -1
- package/dist/web/client/assets/index-BQUL6oyH.js +0 -12
- package/dist/web/client/assets/login-CVS70W9g.js +0 -1
- package/dist/web/client/assets/mcp-BDLQq8OZ.js +0 -1
- package/dist/web/client/assets/memory-6GGuAXwx.js +0 -1
- package/dist/web/client/assets/profile-groups-BA8rwZMA.js +0 -1
- package/dist/web/client/assets/profiles-C0aAcPZg.js +0 -1
- package/dist/web/client/assets/routes-DgAhnKFw.js +0 -1
- package/dist/web/client/assets/services-BZ86QEah.js +0 -1
- package/dist/web/client/assets/skills-mv_NNNwo.js +0 -1
- package/dist/web/client/assets/styles-CmqUskDu.css +0 -2
- package/dist/web/client/assets/telegram-5f9WXs3x.js +0 -1
- package/dist/web/client/assets/tokens-DHiYsFUh.js +0 -1
- package/dist/web/client/assets/triggers-CjC8Ljrz.js +0 -1
- package/dist/web/client/assets/welcome-C-Cu-ziL.js +0 -1
- package/dist/web/server/assets/start-cOXH7eTI.js +0 -4
package/dist/daemon.js
CHANGED
|
@@ -12518,11 +12518,11 @@ var require_util = __commonJS({
|
|
|
12518
12518
|
return false;
|
|
12519
12519
|
}
|
|
12520
12520
|
exports.schemaHasRules = schemaHasRules;
|
|
12521
|
-
function schemaHasRulesButRef(schema,
|
|
12521
|
+
function schemaHasRulesButRef(schema, RULES2) {
|
|
12522
12522
|
if (typeof schema == "boolean")
|
|
12523
12523
|
return !schema;
|
|
12524
12524
|
for (const key2 in schema)
|
|
12525
|
-
if (key2 !== "$ref" &&
|
|
12525
|
+
if (key2 !== "$ref" && RULES2.all[key2])
|
|
12526
12526
|
return true;
|
|
12527
12527
|
return false;
|
|
12528
12528
|
}
|
|
@@ -13916,17 +13916,17 @@ var require_validate = __commonJS({
|
|
|
13916
13916
|
}
|
|
13917
13917
|
function schemaKeywords(it, types, typeErrors, errsCount) {
|
|
13918
13918
|
const { gen, schema, data, allErrors, opts, self } = it;
|
|
13919
|
-
const { RULES } = self;
|
|
13920
|
-
if (schema.$ref && (opts.ignoreKeywordsWithRef || !(0, util_1.schemaHasRulesButRef)(schema,
|
|
13921
|
-
gen.block(() => keywordCode(it, "$ref",
|
|
13919
|
+
const { RULES: RULES2 } = self;
|
|
13920
|
+
if (schema.$ref && (opts.ignoreKeywordsWithRef || !(0, util_1.schemaHasRulesButRef)(schema, RULES2))) {
|
|
13921
|
+
gen.block(() => keywordCode(it, "$ref", RULES2.all.$ref.definition));
|
|
13922
13922
|
return;
|
|
13923
13923
|
}
|
|
13924
13924
|
if (!opts.jtd)
|
|
13925
13925
|
checkStrictTypes(it, types);
|
|
13926
13926
|
gen.block(() => {
|
|
13927
|
-
for (const group of
|
|
13927
|
+
for (const group of RULES2.rules)
|
|
13928
13928
|
groupKeywords(group);
|
|
13929
|
-
groupKeywords(
|
|
13929
|
+
groupKeywords(RULES2.post);
|
|
13930
13930
|
});
|
|
13931
13931
|
function groupKeywords(group) {
|
|
13932
13932
|
if (!(0, applicability_1.shouldUseGroup)(schema, group))
|
|
@@ -15715,10 +15715,10 @@ var require_core = __commonJS({
|
|
|
15715
15715
|
}
|
|
15716
15716
|
// Remove keyword
|
|
15717
15717
|
removeKeyword(keyword) {
|
|
15718
|
-
const { RULES } = this;
|
|
15719
|
-
delete
|
|
15720
|
-
delete
|
|
15721
|
-
for (const group of
|
|
15718
|
+
const { RULES: RULES2 } = this;
|
|
15719
|
+
delete RULES2.keywords[keyword];
|
|
15720
|
+
delete RULES2.all[keyword];
|
|
15721
|
+
for (const group of RULES2.rules) {
|
|
15722
15722
|
const i = group.rules.findIndex((rule) => rule.keyword === keyword);
|
|
15723
15723
|
if (i >= 0)
|
|
15724
15724
|
group.rules.splice(i, 1);
|
|
@@ -15886,9 +15886,9 @@ var require_core = __commonJS({
|
|
|
15886
15886
|
}
|
|
15887
15887
|
var KEYWORD_NAME = /^[a-z_$][a-z0-9_$:-]*$/i;
|
|
15888
15888
|
function checkKeyword(keyword, def) {
|
|
15889
|
-
const { RULES } = this;
|
|
15889
|
+
const { RULES: RULES2 } = this;
|
|
15890
15890
|
(0, util_1.eachItem)(keyword, (kwd) => {
|
|
15891
|
-
if (
|
|
15891
|
+
if (RULES2.keywords[kwd])
|
|
15892
15892
|
throw new Error(`Keyword ${kwd} is already defined`);
|
|
15893
15893
|
if (!KEYWORD_NAME.test(kwd))
|
|
15894
15894
|
throw new Error(`Keyword ${kwd} has invalid name`);
|
|
@@ -15904,13 +15904,13 @@ var require_core = __commonJS({
|
|
|
15904
15904
|
const post = definition === null || definition === void 0 ? void 0 : definition.post;
|
|
15905
15905
|
if (dataType && post)
|
|
15906
15906
|
throw new Error('keyword with "post" flag cannot have "type"');
|
|
15907
|
-
const { RULES } = this;
|
|
15908
|
-
let ruleGroup = post ?
|
|
15907
|
+
const { RULES: RULES2 } = this;
|
|
15908
|
+
let ruleGroup = post ? RULES2.post : RULES2.rules.find(({ type: t }) => t === dataType);
|
|
15909
15909
|
if (!ruleGroup) {
|
|
15910
15910
|
ruleGroup = { type: dataType, rules: [] };
|
|
15911
|
-
|
|
15911
|
+
RULES2.rules.push(ruleGroup);
|
|
15912
15912
|
}
|
|
15913
|
-
|
|
15913
|
+
RULES2.keywords[keyword] = true;
|
|
15914
15914
|
if (!definition)
|
|
15915
15915
|
return;
|
|
15916
15916
|
const rule = {
|
|
@@ -15925,7 +15925,7 @@ var require_core = __commonJS({
|
|
|
15925
15925
|
addBeforeRule.call(this, ruleGroup, rule, definition.before);
|
|
15926
15926
|
else
|
|
15927
15927
|
ruleGroup.rules.push(rule);
|
|
15928
|
-
|
|
15928
|
+
RULES2.all[keyword] = rule;
|
|
15929
15929
|
(_a3 = definition.implements) === null || _a3 === void 0 ? void 0 : _a3.forEach((kwd) => this.addKeyword(kwd));
|
|
15930
15930
|
}
|
|
15931
15931
|
function addBeforeRule(ruleGroup, rule, before) {
|
|
@@ -20747,9 +20747,16 @@ var SERVICES = [
|
|
|
20747
20747
|
id: "moonshotai",
|
|
20748
20748
|
displayName: "Moonshot AI",
|
|
20749
20749
|
category: "provider",
|
|
20750
|
-
hint: "Kimi K2/K2.5/K2.6 \xB7 platform.moonshot.ai",
|
|
20750
|
+
hint: "Kimi K2/K2.5/K2.6/K2.7 \xB7 platform.moonshot.ai",
|
|
20751
20751
|
fields: [{ envVar: "MOONSHOT_API_KEY", kind: "secret", label: "API key" }]
|
|
20752
20752
|
},
|
|
20753
|
+
{
|
|
20754
|
+
id: "moonshotai-cn",
|
|
20755
|
+
displayName: "Moonshot AI (CN)",
|
|
20756
|
+
category: "provider",
|
|
20757
|
+
hint: "Kimi models via the China endpoint \xB7 platform.moonshot.cn",
|
|
20758
|
+
fields: [{ envVar: "MOONSHOT_CN_API_KEY", kind: "secret", label: "API key" }]
|
|
20759
|
+
},
|
|
20753
20760
|
{
|
|
20754
20761
|
id: "kimi-coding",
|
|
20755
20762
|
displayName: "Kimi Coding",
|
|
@@ -20761,9 +20768,16 @@ var SERVICES = [
|
|
|
20761
20768
|
id: "minimax",
|
|
20762
20769
|
displayName: "MiniMax",
|
|
20763
20770
|
category: "provider",
|
|
20764
|
-
hint: "MiniMax M2 family \xB7 platform.minimaxi.com",
|
|
20771
|
+
hint: "MiniMax M2/M3 family \xB7 platform.minimaxi.com",
|
|
20765
20772
|
fields: [{ envVar: "MINIMAX_API_KEY", kind: "secret", label: "API key" }]
|
|
20766
20773
|
},
|
|
20774
|
+
{
|
|
20775
|
+
id: "minimax-cn",
|
|
20776
|
+
displayName: "MiniMax (CN)",
|
|
20777
|
+
category: "provider",
|
|
20778
|
+
hint: "MiniMax M2/M3 family via the China endpoint",
|
|
20779
|
+
fields: [{ envVar: "MINIMAX_CN_API_KEY", kind: "secret", label: "API key" }]
|
|
20780
|
+
},
|
|
20767
20781
|
{
|
|
20768
20782
|
id: "xiaomi",
|
|
20769
20783
|
displayName: "Xiaomi MiMo",
|
|
@@ -20771,12 +20785,54 @@ var SERVICES = [
|
|
|
20771
20785
|
hint: "API billing endpoint \xB7 platform.xiaomimimo.com",
|
|
20772
20786
|
fields: [{ envVar: "XIAOMI_API_KEY", kind: "secret", label: "API key" }]
|
|
20773
20787
|
},
|
|
20788
|
+
{
|
|
20789
|
+
id: "xiaomi-token-plan-ams",
|
|
20790
|
+
displayName: "Xiaomi MiMo Token Plan (AMS)",
|
|
20791
|
+
category: "provider",
|
|
20792
|
+
hint: "MiMo token-plan endpoint in Amsterdam",
|
|
20793
|
+
fields: [{ envVar: "XIAOMI_TOKEN_PLAN_AMS_API_KEY", kind: "secret", label: "API key" }]
|
|
20794
|
+
},
|
|
20795
|
+
{
|
|
20796
|
+
id: "xiaomi-token-plan-cn",
|
|
20797
|
+
displayName: "Xiaomi MiMo Token Plan (CN)",
|
|
20798
|
+
category: "provider",
|
|
20799
|
+
hint: "MiMo token-plan endpoint in China",
|
|
20800
|
+
fields: [{ envVar: "XIAOMI_TOKEN_PLAN_CN_API_KEY", kind: "secret", label: "API key" }]
|
|
20801
|
+
},
|
|
20802
|
+
{
|
|
20803
|
+
id: "xiaomi-token-plan-sgp",
|
|
20804
|
+
displayName: "Xiaomi MiMo Token Plan (SGP)",
|
|
20805
|
+
category: "provider",
|
|
20806
|
+
hint: "MiMo token-plan endpoint in Singapore",
|
|
20807
|
+
fields: [{ envVar: "XIAOMI_TOKEN_PLAN_SGP_API_KEY", kind: "secret", label: "API key" }]
|
|
20808
|
+
},
|
|
20809
|
+
{
|
|
20810
|
+
id: "ant-ling",
|
|
20811
|
+
displayName: "Ant Ling",
|
|
20812
|
+
category: "provider",
|
|
20813
|
+
hint: "Ling/Ring models \xB7 api.ant-ling.com",
|
|
20814
|
+
fields: [{ envVar: "ANT_LING_API_KEY", kind: "secret", label: "API key" }]
|
|
20815
|
+
},
|
|
20816
|
+
{
|
|
20817
|
+
id: "nvidia",
|
|
20818
|
+
displayName: "NVIDIA NIM",
|
|
20819
|
+
category: "provider",
|
|
20820
|
+
hint: "NVIDIA hosted models \xB7 build.nvidia.com",
|
|
20821
|
+
fields: [{ envVar: "NVIDIA_API_KEY", kind: "secret", label: "API key" }]
|
|
20822
|
+
},
|
|
20774
20823
|
{
|
|
20775
20824
|
id: "zai",
|
|
20776
20825
|
displayName: "zAI",
|
|
20777
20826
|
category: "provider",
|
|
20778
20827
|
fields: [{ envVar: "ZAI_API_KEY", kind: "secret", label: "API key" }]
|
|
20779
20828
|
},
|
|
20829
|
+
{
|
|
20830
|
+
id: "zai-coding-cn",
|
|
20831
|
+
displayName: "zAI Coding (CN)",
|
|
20832
|
+
category: "provider",
|
|
20833
|
+
hint: "GLM coding endpoint \xB7 open.bigmodel.cn",
|
|
20834
|
+
fields: [{ envVar: "ZAI_CODING_CN_API_KEY", kind: "secret", label: "API key" }]
|
|
20835
|
+
},
|
|
20780
20836
|
{
|
|
20781
20837
|
id: "huggingface",
|
|
20782
20838
|
displayName: "Hugging Face",
|
|
@@ -20835,6 +20891,13 @@ var SERVICES = [
|
|
|
20835
20891
|
hint: "OpenAI-compatible proxy from the OpenCode CLI",
|
|
20836
20892
|
fields: [{ envVar: "OPENCODE_API_KEY", kind: "secret", label: "API key" }]
|
|
20837
20893
|
},
|
|
20894
|
+
{
|
|
20895
|
+
id: "opencode-go",
|
|
20896
|
+
displayName: "OpenCode Go",
|
|
20897
|
+
category: "provider",
|
|
20898
|
+
hint: "OpenCode hosted Go endpoint",
|
|
20899
|
+
fields: [{ envVar: "OPENCODE_GO_API_KEY", kind: "secret", label: "API key" }]
|
|
20900
|
+
},
|
|
20838
20901
|
{
|
|
20839
20902
|
id: "lmstudio",
|
|
20840
20903
|
displayName: "LM Studio",
|
|
@@ -21675,7 +21738,74 @@ function parseSkillFile(path) {
|
|
|
21675
21738
|
return parseSkillContent(raw);
|
|
21676
21739
|
}
|
|
21677
21740
|
|
|
21741
|
+
// ../daemon/src/core/skills/scan.ts
|
|
21742
|
+
var SECRET_ENV_RE = /\b(ANTHROPIC_API_KEY|OPENAI_API_KEY|OPENAI_CODEX_OAUTH|GEMINI_API_KEY|GOOGLE_API_KEY|AWS_ACCESS_KEY_ID|AWS_SECRET_ACCESS_KEY|AZURE_OPENAI_API_KEY|MISTRAL_API_KEY|GROQ_API_KEY|BRAVE_API_KEY|SEARXNG_URL)\b/i;
|
|
21743
|
+
var SENSITIVE_PATH_RE = /(~\/\.(ssh|aws|gnupg|config)|\b(auth\.json|bazilion\.db)\b)/i;
|
|
21744
|
+
var SECRET_TARGET_RE = /(secret|credential|token|api[-_\s]?key|env(?:ironment)?(?: variable)?|private key|ssh key|auth\.json|bazilion\.db|~\/\.(ssh|aws|gnupg))/i;
|
|
21745
|
+
var EXFIL_VERB_RE = /(exfiltrat|send|upload|post|curl|webhook|pastebin|remote server|external server|http endpoint)/i;
|
|
21746
|
+
var UNICODE_STEALTH_RE = /[\u200B-\u200F\u202A-\u202E\u2060-\u206F\uFEFF]/;
|
|
21747
|
+
var RULES = [
|
|
21748
|
+
{
|
|
21749
|
+
code: "sensitive-reference",
|
|
21750
|
+
severity: "danger",
|
|
21751
|
+
message: "Mentions a sensitive path, database, auth file, or credential environment variable.",
|
|
21752
|
+
test: (line) => SENSITIVE_PATH_RE.test(line) || SECRET_ENV_RE.test(line)
|
|
21753
|
+
},
|
|
21754
|
+
{
|
|
21755
|
+
code: "secret-exfiltration",
|
|
21756
|
+
severity: "danger",
|
|
21757
|
+
message: "Combines secret/env/file access with exfiltration-style language.",
|
|
21758
|
+
test: (line) => SECRET_TARGET_RE.test(line) && EXFIL_VERB_RE.test(line)
|
|
21759
|
+
},
|
|
21760
|
+
{
|
|
21761
|
+
code: "instruction-hijack",
|
|
21762
|
+
severity: "danger",
|
|
21763
|
+
message: "Contains instruction-hijacking language such as ignoring prior instructions.",
|
|
21764
|
+
test: (line) => /ignore (all )?(previous|prior|system|developer|user) instructions/i.test(line) || /override (the )?(system|developer) (prompt|instructions)/i.test(line) || /bypass (safety|security|policy|guardrails)/i.test(line) || /you are now (root|unrestricted|in developer mode)/i.test(line)
|
|
21765
|
+
},
|
|
21766
|
+
{
|
|
21767
|
+
code: "unicode-stealth",
|
|
21768
|
+
severity: "warning",
|
|
21769
|
+
message: "Contains zero-width, bidi, or byte-order characters that can hide prompt text.",
|
|
21770
|
+
test: (line) => UNICODE_STEALTH_RE.test(line)
|
|
21771
|
+
}
|
|
21772
|
+
];
|
|
21773
|
+
function addFinding(findings, seen, finding) {
|
|
21774
|
+
const key2 = `${finding.code}:${finding.line ?? 0}`;
|
|
21775
|
+
if (seen.has(key2)) return;
|
|
21776
|
+
seen.add(key2);
|
|
21777
|
+
findings.push(finding);
|
|
21778
|
+
}
|
|
21779
|
+
function scanSkillContent(raw) {
|
|
21780
|
+
const findings = [];
|
|
21781
|
+
const seen = /* @__PURE__ */ new Set();
|
|
21782
|
+
const lines = raw.split(/\r?\n/);
|
|
21783
|
+
lines.forEach((line, index) => {
|
|
21784
|
+
for (const rule of RULES) {
|
|
21785
|
+
if (!rule.test(line)) continue;
|
|
21786
|
+
addFinding(findings, seen, {
|
|
21787
|
+
code: rule.code,
|
|
21788
|
+
severity: rule.severity,
|
|
21789
|
+
message: rule.message,
|
|
21790
|
+
line: index + 1
|
|
21791
|
+
});
|
|
21792
|
+
}
|
|
21793
|
+
});
|
|
21794
|
+
return findings;
|
|
21795
|
+
}
|
|
21796
|
+
|
|
21678
21797
|
// ../daemon/src/core/skills/import.ts
|
|
21798
|
+
var SkillScanBlockedError = class extends Error {
|
|
21799
|
+
findings;
|
|
21800
|
+
constructor(findings) {
|
|
21801
|
+
const names = Object.keys(findings).sort();
|
|
21802
|
+
super(
|
|
21803
|
+
`skill scan blocked import: ${names.join(", ")} ${names.length === 1 ? "has" : "have"} findings (rerun with --force to confirm)`
|
|
21804
|
+
);
|
|
21805
|
+
this.name = "SkillScanBlockedError";
|
|
21806
|
+
this.findings = findings;
|
|
21807
|
+
}
|
|
21808
|
+
};
|
|
21679
21809
|
function extractZipSafely(zipPath) {
|
|
21680
21810
|
const root = mkdtempSync(join10(tmpdir(), "bazilion-skill-zip-"));
|
|
21681
21811
|
try {
|
|
@@ -21742,8 +21872,14 @@ function importSkillsFromDir(paths, source, input) {
|
|
|
21742
21872
|
if (candidates.length === 0) {
|
|
21743
21873
|
throw new Error(`no skills found in ${source}`);
|
|
21744
21874
|
}
|
|
21875
|
+
const findingsBySkill = {};
|
|
21745
21876
|
for (const c of candidates) {
|
|
21746
|
-
parseSkillFile(join10(c.dir, "SKILL.md"));
|
|
21877
|
+
const parsed = parseSkillFile(join10(c.dir, "SKILL.md"));
|
|
21878
|
+
const findings = scanSkillContent(parsed.raw);
|
|
21879
|
+
if (findings.length > 0) findingsBySkill[c.name] = findings;
|
|
21880
|
+
}
|
|
21881
|
+
if (Object.keys(findingsBySkill).length > 0 && !input.force) {
|
|
21882
|
+
throw new SkillScanBlockedError(findingsBySkill);
|
|
21747
21883
|
}
|
|
21748
21884
|
const imported = [];
|
|
21749
21885
|
const skipped = [];
|
|
@@ -21752,14 +21888,19 @@ function importSkillsFromDir(paths, source, input) {
|
|
|
21752
21888
|
if (existsSync8(target) && !input.force) {
|
|
21753
21889
|
skipped.push({
|
|
21754
21890
|
name: c.name,
|
|
21755
|
-
reason: "already exists (use --force to overwrite)"
|
|
21891
|
+
reason: "already exists (use --force to overwrite)",
|
|
21892
|
+
findings: findingsBySkill[c.name]
|
|
21756
21893
|
});
|
|
21757
21894
|
continue;
|
|
21758
21895
|
}
|
|
21759
21896
|
cpSync(c.dir, target, { recursive: true, force: !!input.force });
|
|
21760
21897
|
imported.push(c.name);
|
|
21761
21898
|
}
|
|
21762
|
-
return {
|
|
21899
|
+
return {
|
|
21900
|
+
imported,
|
|
21901
|
+
skipped,
|
|
21902
|
+
findings: Object.keys(findingsBySkill).length > 0 ? findingsBySkill : void 0
|
|
21903
|
+
};
|
|
21763
21904
|
}
|
|
21764
21905
|
|
|
21765
21906
|
// ../daemon/src/core/skills/resolve.ts
|
|
@@ -22488,10 +22629,25 @@ function loadProviderConfigFromEnv(env = process.env, oauth) {
|
|
|
22488
22629
|
if (env.FIREWORKS_API_KEY) config2.fireworks = { apiKey: env.FIREWORKS_API_KEY };
|
|
22489
22630
|
if (env.TOGETHER_API_KEY) config2.together = { apiKey: env.TOGETHER_API_KEY };
|
|
22490
22631
|
if (env.MOONSHOT_API_KEY) config2.moonshotai = { apiKey: env.MOONSHOT_API_KEY };
|
|
22632
|
+
if (env.MOONSHOT_CN_API_KEY) config2.moonshotaiCn = { apiKey: env.MOONSHOT_CN_API_KEY };
|
|
22491
22633
|
if (env.KIMI_API_KEY) config2.kimiCoding = { apiKey: env.KIMI_API_KEY };
|
|
22492
22634
|
if (env.MINIMAX_API_KEY) config2.minimax = { apiKey: env.MINIMAX_API_KEY };
|
|
22635
|
+
if (env.MINIMAX_CN_API_KEY) config2.minimaxCn = { apiKey: env.MINIMAX_CN_API_KEY };
|
|
22493
22636
|
if (env.XIAOMI_API_KEY) config2.xiaomi = { apiKey: env.XIAOMI_API_KEY };
|
|
22637
|
+
if (env.XIAOMI_TOKEN_PLAN_AMS_API_KEY) {
|
|
22638
|
+
config2.xiaomiTokenPlanAms = { apiKey: env.XIAOMI_TOKEN_PLAN_AMS_API_KEY };
|
|
22639
|
+
}
|
|
22640
|
+
if (env.XIAOMI_TOKEN_PLAN_CN_API_KEY) {
|
|
22641
|
+
config2.xiaomiTokenPlanCn = { apiKey: env.XIAOMI_TOKEN_PLAN_CN_API_KEY };
|
|
22642
|
+
}
|
|
22643
|
+
if (env.XIAOMI_TOKEN_PLAN_SGP_API_KEY) {
|
|
22644
|
+
config2.xiaomiTokenPlanSgp = { apiKey: env.XIAOMI_TOKEN_PLAN_SGP_API_KEY };
|
|
22645
|
+
}
|
|
22646
|
+
if (env.ANT_LING_API_KEY) config2.antLing = { apiKey: env.ANT_LING_API_KEY };
|
|
22647
|
+
if (env.NVIDIA_API_KEY) config2.nvidia = { apiKey: env.NVIDIA_API_KEY };
|
|
22494
22648
|
if (env.OPENCODE_API_KEY) config2.opencode = { apiKey: env.OPENCODE_API_KEY };
|
|
22649
|
+
if (env.OPENCODE_GO_API_KEY) config2.opencodeGo = { apiKey: env.OPENCODE_GO_API_KEY };
|
|
22650
|
+
if (env.ZAI_CODING_CN_API_KEY) config2.zaiCodingCn = { apiKey: env.ZAI_CODING_CN_API_KEY };
|
|
22495
22651
|
if (env.COPILOT_GITHUB_TOKEN) config2.githubCopilot = { apiKey: env.COPILOT_GITHUB_TOKEN };
|
|
22496
22652
|
if (env.CLOUDFLARE_API_KEY && env.CLOUDFLARE_ACCOUNT_ID) {
|
|
22497
22653
|
config2.cloudflareWorkersAi = {
|
|
@@ -22704,6 +22860,16 @@ var PROVIDERS = {
|
|
|
22704
22860
|
}),
|
|
22705
22861
|
hint: "MOONSHOT_API_KEY"
|
|
22706
22862
|
},
|
|
22863
|
+
"moonshotai-cn": {
|
|
22864
|
+
configured: (c) => !!c.moonshotaiCn,
|
|
22865
|
+
build: (c) => piProvider({
|
|
22866
|
+
providerName: "moonshotai-cn",
|
|
22867
|
+
fallbackApi: "openai-completions",
|
|
22868
|
+
apiKey: c.moonshotaiCn?.apiKey,
|
|
22869
|
+
baseUrl: c.moonshotaiCn?.baseURL
|
|
22870
|
+
}),
|
|
22871
|
+
hint: "MOONSHOT_CN_API_KEY"
|
|
22872
|
+
},
|
|
22707
22873
|
"kimi-coding": {
|
|
22708
22874
|
configured: (c) => !!c.kimiCoding,
|
|
22709
22875
|
build: (c) => piProvider({
|
|
@@ -22724,6 +22890,16 @@ var PROVIDERS = {
|
|
|
22724
22890
|
}),
|
|
22725
22891
|
hint: "MINIMAX_API_KEY"
|
|
22726
22892
|
},
|
|
22893
|
+
"minimax-cn": {
|
|
22894
|
+
configured: (c) => !!c.minimaxCn,
|
|
22895
|
+
build: (c) => piProvider({
|
|
22896
|
+
providerName: "minimax-cn",
|
|
22897
|
+
fallbackApi: "anthropic-messages",
|
|
22898
|
+
apiKey: c.minimaxCn?.apiKey,
|
|
22899
|
+
baseUrl: c.minimaxCn?.baseURL
|
|
22900
|
+
}),
|
|
22901
|
+
hint: "MINIMAX_CN_API_KEY"
|
|
22902
|
+
},
|
|
22727
22903
|
xiaomi: {
|
|
22728
22904
|
configured: (c) => !!c.xiaomi,
|
|
22729
22905
|
build: (c) => piProvider({
|
|
@@ -22734,6 +22910,56 @@ var PROVIDERS = {
|
|
|
22734
22910
|
}),
|
|
22735
22911
|
hint: "XIAOMI_API_KEY"
|
|
22736
22912
|
},
|
|
22913
|
+
"xiaomi-token-plan-ams": {
|
|
22914
|
+
configured: (c) => !!c.xiaomiTokenPlanAms,
|
|
22915
|
+
build: (c) => piProvider({
|
|
22916
|
+
providerName: "xiaomi-token-plan-ams",
|
|
22917
|
+
fallbackApi: "openai-completions",
|
|
22918
|
+
apiKey: c.xiaomiTokenPlanAms?.apiKey,
|
|
22919
|
+
baseUrl: c.xiaomiTokenPlanAms?.baseURL
|
|
22920
|
+
}),
|
|
22921
|
+
hint: "XIAOMI_TOKEN_PLAN_AMS_API_KEY"
|
|
22922
|
+
},
|
|
22923
|
+
"xiaomi-token-plan-cn": {
|
|
22924
|
+
configured: (c) => !!c.xiaomiTokenPlanCn,
|
|
22925
|
+
build: (c) => piProvider({
|
|
22926
|
+
providerName: "xiaomi-token-plan-cn",
|
|
22927
|
+
fallbackApi: "openai-completions",
|
|
22928
|
+
apiKey: c.xiaomiTokenPlanCn?.apiKey,
|
|
22929
|
+
baseUrl: c.xiaomiTokenPlanCn?.baseURL
|
|
22930
|
+
}),
|
|
22931
|
+
hint: "XIAOMI_TOKEN_PLAN_CN_API_KEY"
|
|
22932
|
+
},
|
|
22933
|
+
"xiaomi-token-plan-sgp": {
|
|
22934
|
+
configured: (c) => !!c.xiaomiTokenPlanSgp,
|
|
22935
|
+
build: (c) => piProvider({
|
|
22936
|
+
providerName: "xiaomi-token-plan-sgp",
|
|
22937
|
+
fallbackApi: "openai-completions",
|
|
22938
|
+
apiKey: c.xiaomiTokenPlanSgp?.apiKey,
|
|
22939
|
+
baseUrl: c.xiaomiTokenPlanSgp?.baseURL
|
|
22940
|
+
}),
|
|
22941
|
+
hint: "XIAOMI_TOKEN_PLAN_SGP_API_KEY"
|
|
22942
|
+
},
|
|
22943
|
+
"ant-ling": {
|
|
22944
|
+
configured: (c) => !!c.antLing,
|
|
22945
|
+
build: (c) => piProvider({
|
|
22946
|
+
providerName: "ant-ling",
|
|
22947
|
+
fallbackApi: "openai-completions",
|
|
22948
|
+
apiKey: c.antLing?.apiKey,
|
|
22949
|
+
baseUrl: c.antLing?.baseURL
|
|
22950
|
+
}),
|
|
22951
|
+
hint: "ANT_LING_API_KEY"
|
|
22952
|
+
},
|
|
22953
|
+
nvidia: {
|
|
22954
|
+
configured: (c) => !!c.nvidia,
|
|
22955
|
+
build: (c) => piProvider({
|
|
22956
|
+
providerName: "nvidia",
|
|
22957
|
+
fallbackApi: "openai-completions",
|
|
22958
|
+
apiKey: c.nvidia?.apiKey,
|
|
22959
|
+
baseUrl: c.nvidia?.baseURL
|
|
22960
|
+
}),
|
|
22961
|
+
hint: "NVIDIA_API_KEY"
|
|
22962
|
+
},
|
|
22737
22963
|
opencode: {
|
|
22738
22964
|
configured: (c) => !!c.opencode,
|
|
22739
22965
|
build: (c) => piProvider({
|
|
@@ -22744,6 +22970,26 @@ var PROVIDERS = {
|
|
|
22744
22970
|
}),
|
|
22745
22971
|
hint: "OPENCODE_API_KEY"
|
|
22746
22972
|
},
|
|
22973
|
+
"opencode-go": {
|
|
22974
|
+
configured: (c) => !!c.opencodeGo,
|
|
22975
|
+
build: (c) => piProvider({
|
|
22976
|
+
providerName: "opencode-go",
|
|
22977
|
+
fallbackApi: "openai-completions",
|
|
22978
|
+
apiKey: c.opencodeGo?.apiKey,
|
|
22979
|
+
baseUrl: c.opencodeGo?.baseURL
|
|
22980
|
+
}),
|
|
22981
|
+
hint: "OPENCODE_GO_API_KEY"
|
|
22982
|
+
},
|
|
22983
|
+
"zai-coding-cn": {
|
|
22984
|
+
configured: (c) => !!c.zaiCodingCn,
|
|
22985
|
+
build: (c) => piProvider({
|
|
22986
|
+
providerName: "zai-coding-cn",
|
|
22987
|
+
fallbackApi: "openai-completions",
|
|
22988
|
+
apiKey: c.zaiCodingCn?.apiKey,
|
|
22989
|
+
baseUrl: c.zaiCodingCn?.baseURL
|
|
22990
|
+
}),
|
|
22991
|
+
hint: "ZAI_CODING_CN_API_KEY"
|
|
22992
|
+
},
|
|
22747
22993
|
"github-copilot": {
|
|
22748
22994
|
configured: (c) => !!c.githubCopilot,
|
|
22749
22995
|
build: (c) => piProvider({
|
|
@@ -24425,6 +24671,22 @@ function liveEndpointFor(providerName, env) {
|
|
|
24425
24671
|
return "https://api.x.ai/v1";
|
|
24426
24672
|
case "mistral":
|
|
24427
24673
|
return "https://api.mistral.ai/v1";
|
|
24674
|
+
case "ant-ling":
|
|
24675
|
+
return "https://api.ant-ling.com/v1";
|
|
24676
|
+
case "moonshotai-cn":
|
|
24677
|
+
return "https://api.moonshot.cn/v1";
|
|
24678
|
+
case "nvidia":
|
|
24679
|
+
return "https://integrate.api.nvidia.com/v1";
|
|
24680
|
+
case "opencode-go":
|
|
24681
|
+
return "https://opencode.ai/zen/go/v1";
|
|
24682
|
+
case "xiaomi-token-plan-ams":
|
|
24683
|
+
return "https://token-plan-ams.xiaomimimo.com/v1";
|
|
24684
|
+
case "xiaomi-token-plan-cn":
|
|
24685
|
+
return "https://token-plan-cn.xiaomimimo.com/v1";
|
|
24686
|
+
case "xiaomi-token-plan-sgp":
|
|
24687
|
+
return "https://token-plan-sgp.xiaomimimo.com/v1";
|
|
24688
|
+
case "zai-coding-cn":
|
|
24689
|
+
return "https://open.bigmodel.cn/api/coding/paas/v4";
|
|
24428
24690
|
default:
|
|
24429
24691
|
return null;
|
|
24430
24692
|
}
|
|
@@ -24470,6 +24732,22 @@ function apiKeyFor(providerName, env) {
|
|
|
24470
24732
|
return env.XAI_API_KEY;
|
|
24471
24733
|
case "mistral":
|
|
24472
24734
|
return env.MISTRAL_API_KEY;
|
|
24735
|
+
case "ant-ling":
|
|
24736
|
+
return env.ANT_LING_API_KEY;
|
|
24737
|
+
case "moonshotai-cn":
|
|
24738
|
+
return env.MOONSHOT_CN_API_KEY;
|
|
24739
|
+
case "nvidia":
|
|
24740
|
+
return env.NVIDIA_API_KEY;
|
|
24741
|
+
case "opencode-go":
|
|
24742
|
+
return env.OPENCODE_GO_API_KEY;
|
|
24743
|
+
case "xiaomi-token-plan-ams":
|
|
24744
|
+
return env.XIAOMI_TOKEN_PLAN_AMS_API_KEY;
|
|
24745
|
+
case "xiaomi-token-plan-cn":
|
|
24746
|
+
return env.XIAOMI_TOKEN_PLAN_CN_API_KEY;
|
|
24747
|
+
case "xiaomi-token-plan-sgp":
|
|
24748
|
+
return env.XIAOMI_TOKEN_PLAN_SGP_API_KEY;
|
|
24749
|
+
case "zai-coding-cn":
|
|
24750
|
+
return env.ZAI_CODING_CN_API_KEY;
|
|
24473
24751
|
default:
|
|
24474
24752
|
return void 0;
|
|
24475
24753
|
}
|
|
@@ -25510,7 +25788,7 @@ function shouldNotifyInboundThrottle(agentId) {
|
|
|
25510
25788
|
return true;
|
|
25511
25789
|
}
|
|
25512
25790
|
|
|
25513
|
-
// ../../node_modules/.pnpm/marked@18.0.
|
|
25791
|
+
// ../../node_modules/.pnpm/marked@18.0.5/node_modules/marked/lib/marked.esm.js
|
|
25514
25792
|
function M() {
|
|
25515
25793
|
return { async: false, breaks: false, extensions: null, gfm: true, hooks: null, pedantic: false, renderer: null, silent: false, tokenizer: null, walkTokens: null };
|
|
25516
25794
|
}
|
|
@@ -25554,15 +25832,15 @@ var F = /^([^\n]+(?:\n(?!hr|heading|lheading|blockquote|fences|list|html|table|
|
|
|
25554
25832
|
var $e = /^[^\n]+/;
|
|
25555
25833
|
var U = /(?!\s*\])(?:\\[\s\S]|[^\[\]\\])+/;
|
|
25556
25834
|
var Le = d(/^ {0,3}\[(label)\]: *(?:\n[ \t]*)?([^<\s][^\s]*|<.*?>)(?:(?: +(?:\n[ \t]*)?| *\n[ \t]*)(title))? *(?:\n+|$)/).replace("label", U).replace("title", /(?:"(?:\\"?|[^"\\])*"|'[^'\n]*(?:\n[^'\n]+)*\n?'|\([^()]*\))/).getRegex();
|
|
25557
|
-
var _e = d(/^(bull)([ \t][^\n]
|
|
25835
|
+
var _e = d(/^(bull)([ \t][^\n]*?)?(?:\n|$)/).replace(/bull/g, j).getRegex();
|
|
25558
25836
|
var H = "address|article|aside|base|basefont|blockquote|body|caption|center|col|colgroup|dd|details|dialog|dir|div|dl|dt|fieldset|figcaption|figure|footer|form|frame|frameset|h[1-6]|head|header|hr|html|iframe|legend|li|link|main|menu|menuitem|meta|nav|noframes|ol|optgroup|option|p|param|search|section|summary|table|tbody|td|tfoot|th|thead|title|tr|track|ul";
|
|
25559
25837
|
var K = /<!--(?:-?>|[\s\S]*?(?:-->|$))/;
|
|
25560
25838
|
var ze = d("^ {0,3}(?:<(script|pre|style|textarea)[\\s>][\\s\\S]*?(?:</\\1>[^\\n]*\\n+|$)|comment[^\\n]*(\\n+|$)|<\\?[\\s\\S]*?(?:\\?>\\n*|$)|<![A-Z][\\s\\S]*?(?:>\\n*|$)|<!\\[CDATA\\[[\\s\\S]*?(?:\\]\\]>\\n*|$)|</?(tag)(?: +|\\n|/?>)[\\s\\S]*?(?:(?:\\n[ ]*)+\\n|$)|<(?!script|pre|style|textarea)([a-z][\\w-]*)(?:attribute)*? */?>(?=[ \\t]*(?:\\n|$))[\\s\\S]*?(?:(?:\\n[ ]*)+\\n|$)|</(?!script|pre|style|textarea)[a-z][\\w-]*\\s*>(?=[ \\t]*(?:\\n|$))[\\s\\S]*?(?:(?:\\n[ ]*)+\\n|$))", "i").replace("comment", K).replace("tag", H).replace("attribute", / +[a-zA-Z:_][\w.:-]*(?: *= *"[^"\n]*"| *= *'[^'\n]*'| *= *[^\s"'=<>`]+)?/).getRegex();
|
|
25561
|
-
var le = d(F).replace("hr", B).replace("heading", " {0,3}#{1,6}(?:\\s|$)").replace("|lheading", "").replace("|table", "").replace("blockquote", " {0,3}>").replace("fences", " {0,3}(?:`{3,}(?=[^`\\n]*\\n)|~{3,})[^\\n]*\\n").replace("list", " {0,3}(?:[*+-]|1[.)])[ \\t]").replace("html", "</?(?:tag)(?: +|\\n|/?>)|<(?:script|pre|style|textarea|!--)").replace("tag", H).getRegex();
|
|
25839
|
+
var le = d(F).replace("hr", B).replace("heading", " {0,3}#{1,6}(?:\\s|$)").replace("|lheading", "").replace("|table", "").replace("blockquote", " {0,3}>").replace("fences", " {0,3}(?:`{3,}(?=[^`\\n]*\\n)|~{3,})[^\\n]*\\n").replace("list", " {0,3}(?:[*+-]|1[.)])[ \\t]+[^ \\t\\n]").replace("html", "</?(?:tag)(?: +|\\n|/?>)|<(?:script|pre|style|textarea|!--)").replace("tag", H).getRegex();
|
|
25562
25840
|
var Me = d(/^( {0,3}> ?(paragraph|[^\n]*)(?:\n|$))+/).replace("paragraph", le).getRegex();
|
|
25563
25841
|
var W = { blockquote: Me, code: we, def: Le, fences: ye, heading: Pe, hr: B, html: ze, lheading: ae, list: _e, newline: Oe, paragraph: le, table: _, text: $e };
|
|
25564
25842
|
var se = d("^ *([^\\n ].*)\\n {0,3}((?:\\| *)?:?-+:? *(?:\\| *:?-+:? *)*(?:\\| *)?)(?:\\n((?:(?! *\\n|hr|heading|blockquote|code|fences|list|html).*(?:\\n|$))*)\\n*|$)").replace("hr", B).replace("heading", " {0,3}#{1,6}(?:\\s|$)").replace("blockquote", " {0,3}>").replace("code", "(?: {4}| {0,3} )[^\\n]").replace("fences", " {0,3}(?:`{3,}(?=[^`\\n]*\\n)|~{3,})[^\\n]*\\n").replace("list", " {0,3}(?:[*+-]|1[.)])[ \\t]").replace("html", "</?(?:tag)(?: +|\\n|/?>)|<(?:script|pre|style|textarea|!--)").replace("tag", H).getRegex();
|
|
25565
|
-
var Ee = { ...W, lheading: Se, table: se, paragraph: d(F).replace("hr", B).replace("heading", " {0,3}#{1,6}(?:\\s|$)").replace("|lheading", "").replace("table", se).replace("blockquote", " {0,3}>").replace("fences", " {0,3}(?:`{3,}(?=[^`\\n]*\\n)|~{3,})[^\\n]*\\n").replace("list", " {0,3}(?:[*+-]|1[.)])[ \\t]").replace("html", "</?(?:tag)(?: +|\\n|/?>)|<(?:script|pre|style|textarea|!--)").replace("tag", H).getRegex() };
|
|
25843
|
+
var Ee = { ...W, lheading: Se, table: se, paragraph: d(F).replace("hr", B).replace("heading", " {0,3}#{1,6}(?:\\s|$)").replace("|lheading", "").replace("table", se).replace("blockquote", " {0,3}>").replace("fences", " {0,3}(?:`{3,}(?=[^`\\n]*\\n)|~{3,})[^\\n]*\\n").replace("list", " {0,3}(?:[*+-]|1[.)])[ \\t]+[^ \\t\\n]").replace("html", "</?(?:tag)(?: +|\\n|/?>)|<(?:script|pre|style|textarea|!--)").replace("tag", H).getRegex() };
|
|
25566
25844
|
var Ie = { ...W, html: d(`^ *(?:comment *(?:\\n|\\s*$)|<(tag)[\\s\\S]+?</\\1> *(?:\\n{2,}|\\s*$)|<tag(?:"[^"]*"|'[^']*'|\\s[^'"/>\\s]*)*?/?> *(?:\\n{2,}|\\s*$))`).replace("comment", K).replace(/tag/g, "(?!(?:a|em|strong|small|s|cite|q|dfn|abbr|data|time|code|var|samp|kbd|sub|sup|i|b|u|mark|ruby|rt|rp|bdi|bdo|span|br|wbr|ins|del|img)\\b)\\w+(?!:|[^\\w\\s@]*@)\\b").getRegex(), def: /^ *\[([^\]]+)\]: *<?([^\s>]+)>?(?: +(["(][^\n]+[")]))? *(?:\n+|$)/, heading: /^(#{1,6})(.*)(?:\n+|$)/, fences: _, lheading: /^(.+?)\n {0,3}(=+|-+) *(?:\n+|$)/, paragraph: d(F).replace("hr", B).replace("heading", ` *#{1,6} *[^
|
|
25567
25845
|
]`).replace("lheading", ae).replace("|table", "").replace("blockquote", " {0,3}>").replace("|fences", "").replace("|list", "").replace("|html", "").replace("|tag", "").getRegex() };
|
|
25568
25846
|
var Ae = /^\\([!"#$%&'()*+,\-./:;<=>?@\[\]\\^_`{|}~])/;
|
|
@@ -29758,7 +30036,8 @@ agentsRouter.get("/:id/skills", (c) => {
|
|
|
29758
30036
|
name: s.name,
|
|
29759
30037
|
description: s.parsed.frontmatter.description,
|
|
29760
30038
|
source: meta2?.source ?? null,
|
|
29761
|
-
importedAt: meta2?.importedAt ?? null
|
|
30039
|
+
importedAt: meta2?.importedAt ?? null,
|
|
30040
|
+
scanFindings: scanSkillContent(s.parsed.raw)
|
|
29762
30041
|
};
|
|
29763
30042
|
}),
|
|
29764
30043
|
missing: set.missing
|
|
@@ -29773,6 +30052,24 @@ agentsRouter.post("/:id/skills", async (c) => {
|
|
|
29773
30052
|
const { db, paths, authToken } = getCtx();
|
|
29774
30053
|
const agent = agents_exports.get(db, c.req.param("id"));
|
|
29775
30054
|
if (!agent) return c.json({ error: `agent not found: ${c.req.param("id")}` }, 404);
|
|
30055
|
+
const discovered = discoverSkills(paths).find((s) => s.name === body.skill);
|
|
30056
|
+
if (discovered) {
|
|
30057
|
+
try {
|
|
30058
|
+
const parsed = parseSkillFile(discovered.skillFile);
|
|
30059
|
+
const findings = scanSkillContent(parsed.raw);
|
|
30060
|
+
if (findings.length > 0 && !body.allowFindings) {
|
|
30061
|
+
return c.json(
|
|
30062
|
+
{
|
|
30063
|
+
error: `skill scan blocked attach: ${body.skill} has findings`,
|
|
30064
|
+
code: "skill_scan_blocked",
|
|
30065
|
+
findings
|
|
30066
|
+
},
|
|
30067
|
+
400
|
|
30068
|
+
);
|
|
30069
|
+
}
|
|
30070
|
+
} catch {
|
|
30071
|
+
}
|
|
30072
|
+
}
|
|
29776
30073
|
agents_exports.attachSkill(db, agent.id, body.skill);
|
|
29777
30074
|
return c.body(null, 204);
|
|
29778
30075
|
});
|
|
@@ -31291,6 +31588,7 @@ skillsRouter.get("/", (c) => {
|
|
|
31291
31588
|
try {
|
|
31292
31589
|
const parsed = parseSkillFile(s.skillFile);
|
|
31293
31590
|
entry.description = parsed.frontmatter.description;
|
|
31591
|
+
entry.scanFindings = scanSkillContent(parsed.raw);
|
|
31294
31592
|
} catch (err) {
|
|
31295
31593
|
entry.parseError = err.message;
|
|
31296
31594
|
}
|
|
@@ -31321,14 +31619,36 @@ skillsRouter.post("/import", async (c) => {
|
|
|
31321
31619
|
for (const name of result.imported) {
|
|
31322
31620
|
skillMeta_exports.upsert(db, { name, source: input.sourceLabel, importedAt: now });
|
|
31323
31621
|
}
|
|
31324
|
-
const res = {
|
|
31622
|
+
const res = {
|
|
31623
|
+
imported: result.imported,
|
|
31624
|
+
skipped: result.skipped,
|
|
31625
|
+
findings: result.findings
|
|
31626
|
+
};
|
|
31325
31627
|
return c.json(res);
|
|
31326
31628
|
} catch (err) {
|
|
31629
|
+
if (err instanceof SkillScanBlockedError) {
|
|
31630
|
+
return c.json(
|
|
31631
|
+
{
|
|
31632
|
+
error: err.message,
|
|
31633
|
+
code: "skill_scan_blocked",
|
|
31634
|
+
findings: flattenFindings(err.findings)
|
|
31635
|
+
},
|
|
31636
|
+
400
|
|
31637
|
+
);
|
|
31638
|
+
}
|
|
31327
31639
|
return c.json({ error: err.message }, 400);
|
|
31328
31640
|
} finally {
|
|
31329
31641
|
if (input.tempZipPath) rmSync10(input.tempZipPath, { recursive: true, force: true });
|
|
31330
31642
|
}
|
|
31331
31643
|
});
|
|
31644
|
+
function flattenFindings(findings) {
|
|
31645
|
+
return Object.entries(findings).flatMap(
|
|
31646
|
+
([name, items]) => items.map((item) => ({
|
|
31647
|
+
...item,
|
|
31648
|
+
message: `${name}: ${item.message}`
|
|
31649
|
+
}))
|
|
31650
|
+
);
|
|
31651
|
+
}
|
|
31332
31652
|
async function parseImportInput(request) {
|
|
31333
31653
|
const contentType = request.headers.get("content-type") ?? "";
|
|
31334
31654
|
if (contentType.startsWith("multipart/form-data")) {
|