nolo-cli 0.105.0-alpha.3 → 0.105.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 +1 -1
- package/{_executeModel-4W7C3ACS.js → _executeModel-JXG5TLPE.js} +75 -68
- package/action-GVA5ARSJ.js +20 -0
- package/{addContentAction-O7R66HEX.js → addContentAction-J3DLDV64.js} +12 -11
- package/{addDialogAgentAction-74OA7KYP.js → addDialogAgentAction-PHIXJCF2.js} +18 -19
- package/{agentDeleteCommand-YB3S2LPY.js → agentDeleteCommand-2AWJGHXG.js} +117 -42
- package/{agentEmailCommands-J6YBHL42.js → agentEmailCommands-VV5OSILE.js} +98 -88
- package/agentListCommands-OQMRBDWP.js +742 -0
- package/{agentMachineCommands-2RWGEBA3.js → agentMachineCommands-3VLLR6RL.js} +48 -43
- package/{agentProviderCommands-GNPTL5XR.js → agentProviderCommands-XPJYZSCE.js} +97 -2
- package/{agentPullCommand-O5MPVJ5E.js → agentPullCommand-B4T2DJ5H.js} +1 -1
- package/agentRecordCommands-GPIARVOW.js +138 -0
- package/agentRunCommand-LRJTZ7IM.js +167 -0
- package/{agentRunControl-AVJR4JW4.js → agentRunControl-3HWA2LLQ.js} +2 -2
- package/{agentRuntimeLocal-FRUE5P2V.js → agentRuntimeLocal-PV6AZOEU.js} +44 -39
- package/{agentSlice-6LBOYNKN.js → agentSlice-6R3JKS6I.js} +14 -13
- package/{appDeleteCommands-JPWTSFID.js → appDeleteCommands-WEX73P5R.js} +46 -41
- package/{appDeployCommands-YCVY2UYO.js → appDeployCommands-7BAXWA4M.js} +46 -41
- package/{appDeployStatusCommands-JMCEIKTI.js → appDeployStatusCommands-EJ6A2U4X.js} +46 -41
- package/{appGetCommands-EXWT3QAE.js → appGetCommands-SB355OEX.js} +46 -41
- package/{appListCommands-PKRLSWRE.js → appListCommands-TSZDPIKJ.js} +46 -41
- package/{authCommand-F4EFRRX6.js → authCommand-5PB3YRVV.js} +118 -24
- package/{authCommands-RGOGCPP6.js → authCommands-5RTUDYZW.js} +7 -5
- package/{builtinSkillRegistry-FUAVTRVZ.js → builtinSkillRegistry-SBBWTANC.js} +10 -8
- package/{chromeCommands-FZYAU75D.js → chromeCommands-AU5ZJXBG.js} +289 -37
- package/{chromeOpsCommands-62P2Q2YB.js → chromeOpsCommands-ZYTCMNHG.js} +156 -22
- package/{chunk-6OZ36FXI.js → chunk-27ONFIEY.js} +22 -4
- package/{chunk-JEDZAO7L.js → chunk-2SYTUTLI.js} +257 -37
- package/{chunk-HVURBGF3.js → chunk-2U3NHADM.js} +6 -6
- package/{chunk-53HEEOTT.js → chunk-2WJ57RJA.js} +83 -16
- package/{chunk-OIVSQH2O.js → chunk-3BXNTXYI.js} +299 -5
- package/{chunk-V4MJDUSR.js → chunk-3F424ASC.js} +2 -2
- package/{chunk-HJUYAD4A.js → chunk-3Q7NEHAR.js} +5 -5
- package/chunk-44CU7CKA.js +13545 -0
- package/{chunk-EYAQT56M.js → chunk-4DPP773Q.js} +2 -2
- package/chunk-4LCOCOR5.js +50 -0
- package/{chunk-JPGCXHNM.js → chunk-4LKMZ3RR.js} +1 -1
- package/{chunk-2GRGFCF6.js → chunk-4VJAC32I.js} +2 -1
- package/{chunk-6D6VBVEW.js → chunk-4W24JM32.js} +80 -14
- package/{chunk-H62HCIUP.js → chunk-4WMMIL66.js} +35 -22
- package/{chunk-MC4XLIJ7.js → chunk-523DITKR.js} +1 -1
- package/{chunk-ZCYXJSTU.js → chunk-54VPQTOA.js} +66 -94
- package/{chunk-E4MARS3Q.js → chunk-5GVBDNTO.js} +1 -1
- package/chunk-5MMAK75Q.js +15 -0
- package/{chunk-7S4YWN7P.js → chunk-5UUIGN6I.js} +4 -4
- package/{chunk-42V6BK2E.js → chunk-62IL3KQV.js} +4 -34
- package/{chunk-GQBOR3G6.js → chunk-7KVZ5LDQ.js} +2 -2
- package/chunk-A4SQRTZ6.js +15 -0
- package/{chunk-L5UXH3B2.js → chunk-AFH5QC6R.js} +58 -9
- package/{chunk-AEOE4Z6Q.js → chunk-AFSY3ZMB.js} +39 -15
- package/chunk-AGIM7IMJ.js +147 -0
- package/{chunk-5UTFL4QJ.js → chunk-AOTBKDRK.js} +7 -0
- package/{chunk-NA35QHCF.js → chunk-AWVP7PPG.js} +1 -1
- package/{chunk-EEGDMATE.js → chunk-B7APRSPS.js} +86 -81
- package/{chunk-W324THOB.js → chunk-BB7LVBTS.js} +20 -11
- package/{chunk-6YTOJY35.js → chunk-BZ7NPA6G.js} +35 -2
- package/{chunk-5H7KJX7J.js → chunk-CFHWVEUJ.js} +5 -5
- package/chunk-CHOZJMJS.js +78 -0
- package/{chunk-ETI2NYVF.js → chunk-CNA27EMD.js} +4 -4
- package/{chunk-ACTMNVHM.js → chunk-CYSYR67N.js} +1 -1
- package/{chunk-WV42OMV7.js → chunk-D2GQE6AF.js} +8 -8
- package/{chunk-GBRG75BQ.js → chunk-D2MDMY2M.js} +1 -0
- package/{chunk-Q554LLSI.js → chunk-DMXLXZKL.js} +1 -1
- package/chunk-DZ7R5V3Y.js +164 -0
- package/{chunk-3VNWWVKB.js → chunk-E3YWHWCR.js} +50 -18
- package/{chunk-KQ4ONNQD.js → chunk-EKPKW6RM.js} +155 -8
- package/{chunk-2J5Y72GY.js → chunk-EP7BWZ4B.js} +1 -1
- package/{chunk-ABQYVJBJ.js → chunk-EV235ILT.js} +5 -5
- package/{chunk-TRV2MIDW.js → chunk-EXAJ6DCR.js} +1 -0
- package/{chunk-3ZW5ZJMM.js → chunk-FGSJ3YMD.js} +23 -28
- package/{chunk-2F7RJC6L.js → chunk-FOXQ7BAB.js} +1 -1
- package/{chunk-SH43IESU.js → chunk-GGC55Q32.js} +199 -29
- package/chunk-GMZLP5DV.js +82 -0
- package/{chunk-DHDMC6FO.js → chunk-GSKPJIHY.js} +14 -9
- package/{chunk-FDTR4QJ6.js → chunk-H6A6X4EK.js} +32 -1
- package/{chunk-DVINR3PL.js → chunk-HDLLCBRF.js} +1 -1
- package/{chunk-QOKAKDPE.js → chunk-HIM3FCLF.js} +0 -1
- package/{chunk-ONXOABJR.js → chunk-HNGRBWYF.js} +3 -0
- package/{chunk-VLTIYV3X.js → chunk-HP57OUJO.js} +4 -4
- package/{chunk-NXUYQBDZ.js → chunk-HYXABXCZ.js} +29 -78
- package/{chunk-DNCEALKX.js → chunk-IEJ5YDA4.js} +22 -29
- package/{chunk-O6OSWFZQ.js → chunk-IHPDK6UD.js} +6 -0
- package/{chunk-BP4XNZRM.js → chunk-JIXGJTBU.js} +4 -4
- package/{chunk-GPCZ7UXG.js → chunk-K6U4NKFJ.js} +1 -1
- package/{chunk-Z77CRGTW.js → chunk-KA5O5KQL.js} +1 -1
- package/{chunk-4OEFYTWL.js → chunk-L5WOICCV.js} +67 -48
- package/{chunk-LS2ZANRJ.js → chunk-LOCNXNOU.js} +1 -1
- package/chunk-LWLNLZC5.js +265 -0
- package/{chunk-H66KLASO.js → chunk-LWXE6IFU.js} +567 -519
- package/{chunk-PUOC4YRO.js → chunk-M7VLQGQP.js} +11 -0
- package/chunk-NKWIS6G2.js +442 -0
- package/{chunk-BFU6C242.js → chunk-NMFV26UG.js} +1 -1
- package/{chunk-DJWMIXDZ.js → chunk-NSAFG343.js} +10 -10
- package/{chunk-UKZDAFYT.js → chunk-NSBID7PR.js} +6 -10
- package/{chunk-U7ISRJQO.js → chunk-NTR4SD3P.js} +845 -240
- package/{chunk-FZGV4FGK.js → chunk-NUHHBEJC.js} +378 -187
- package/chunk-NWENLDMM.js +42 -0
- package/chunk-O7SVKKLY.js +875 -0
- package/chunk-OCZKATRC.js +129 -0
- package/{chunk-VMFTFOWF.js → chunk-OKGVNZTL.js} +35 -8
- package/{chunk-KQHGZWSV.js → chunk-OXME3PEE.js} +1 -1
- package/{chunk-JRQFUXY7.js → chunk-P5GCTVGV.js} +99 -22
- package/{chunk-PQFHGD77.js → chunk-QKTESDWK.js} +161 -14
- package/{chunk-U3JZVWIB.js → chunk-QMXJ5KDJ.js} +68 -46
- package/{chunk-GEPUP7OO.js → chunk-QYUBY3OZ.js} +3 -3
- package/{chunk-3BMYXEUW.js → chunk-R5AJODNI.js} +1 -1
- package/{chunk-J4MOO56S.js → chunk-RILRSUGC.js} +10 -2
- package/{chunk-OEVAY4J6.js → chunk-RWX7AY7J.js} +18 -20
- package/{chunk-YY7I6GQ3.js → chunk-S2NSK7AZ.js} +11 -9
- package/{chunk-IIVGDG4I.js → chunk-SJKULPGX.js} +13 -7
- package/{chunk-BYMV6QZG.js → chunk-TNIX77YM.js} +4 -0
- package/chunk-TY3TIUJK.js +89 -0
- package/{chunk-I3TQJXQ7.js → chunk-U3C3IA32.js} +9 -2
- package/{chunk-UZGQNTVW.js → chunk-UA324D4O.js} +8 -6
- package/{chunk-YYLHWIW6.js → chunk-UKZX3NHN.js} +1 -1
- package/chunk-UWXDA7L5.js +8005 -0
- package/{chunk-3DII57IT.js → chunk-VCAQFMVN.js} +1 -1
- package/chunk-VIWDGTDA.js +8 -0
- package/chunk-VJVNU77E.js +83 -0
- package/{chunk-A6FMKU7M.js → chunk-VVJ2ENLY.js} +47 -67
- package/{chunk-UKWGR5SS.js → chunk-VY6VFGKR.js} +194 -1144
- package/{chunk-QDSINZM3.js → chunk-WJ3B6FX6.js} +1 -14
- package/{chunk-Q67DOFOO.js → chunk-Y3PMXGLH.js} +2 -0
- package/chunk-YK5MHOWM.js +915 -0
- package/chunk-YV25TM3R.js +780 -0
- package/{chunk-TOP2VXOR.js → chunk-YVU4XVJD.js} +5 -5
- package/{chunk-HVP6P5FV.js → chunk-Z5NGE5DH.js} +29 -9
- package/{chunk-LC43IGO4.js → chunk-ZBHR642M.js} +704 -950
- package/chunk-ZRAU6T47.js +56 -0
- package/{chunk-XPVRVN4U.js → chunk-ZSUDOTPL.js} +19 -17
- package/commandRegistry-QU62WJQX.js +833 -0
- package/{contentThunks-LXOZUD2Y.js → contentThunks-VGV3JJVB.js} +37 -35
- package/{cooldownCommands-REAWYVTY.js → cooldownCommands-ZLEPIB4A.js} +2 -2
- package/{createAgentAutomationAction-M5NDEIC6.js → createAgentAutomationAction-ZNVLI4WV.js} +39 -37
- package/createDialogAction-TTUA46DT.js +69 -0
- package/{createPageAction-WY5ZKP2M.js → createPageAction-KUFSC5XW.js} +46 -43
- package/{chunk-OWS6OYF4.js → cursorProvider-YGGNMVWX.js} +2751 -10172
- package/{dbSlice-XVWBAGYN.js → dbSlice-MYEETO73.js} +11 -10
- package/{deleteFile-YG6QMJLU.js → deleteFile-KESP65GC.js} +7 -6
- package/{dialogCommands-YVMHDEOX.js → dialogCommands-DRDPEOTL.js} +49 -45
- package/{dialogSlice-HSGREZGA.js → dialogSlice-V2SVSTIV.js} +41 -34
- package/{dist-VODFSGNG.js → dist-NJC2W7I4.js} +61 -54
- package/{docCreateCommands-7UTWDYJU.js → docCreateCommands-M26CFDDQ.js} +48 -43
- package/{docDeleteCommands-GG6BJ4PS.js → docDeleteCommands-LRZHCKVX.js} +49 -44
- package/{docReadCommands-QHMQVSLP.js → docReadCommands-6QJSISHK.js} +47 -42
- package/{docStore-IIS36NGG.js → docStore-4RWAFNDM.js} +16 -12
- package/{docUpdateCommands-QPL6IVUK.js → docUpdateCommands-W4KU4U5T.js} +48 -43
- package/{fetchMessages-EIU7UFFK.js → fetchMessages-3PXAHKCR.js} +5 -5
- package/{getPricing-LUSEABA6.js → getPricing-NMMFT3YI.js} +4 -4
- package/{handleSendMessageAction-FEHCWMN2.js → handleSendMessageAction-VEWLGB5Z.js} +107 -41
- package/index.js +87 -884
- package/{lib-FRRS27KN.js → lib-PU2G2MSO.js} +523 -191
- package/{localDialogRead-BTFJ4V2I.js → localDialogRead-UYCKO7YZ.js} +2 -2
- package/{localRuntimeAuthority-6IR6BBXE.js → localRuntimeAuthority-TU6OBC76.js} +9 -6
- package/{localRuntimeDb-SYQGUF4U.js → localRuntimeDb-VKWVOPPI.js} +1 -1
- package/{machineCommands-ERCXIPJC.js → machineCommands-AEHHCJEW.js} +92 -82
- package/machineWsRunDispatch-MY2KHS36.js +154 -0
- package/{memberThunks-QGFLFVCI.js → memberThunks-EE6TI3TV.js} +20 -18
- package/{models-T3SG6MJ5.js → models-ZPU5EDF4.js} +2 -2
- package/oauthTokenStore-ITEB663N.js +23 -0
- package/package.json +1 -1
- package/pdf-U6KSUEZZ.js +26435 -0
- package/processSpawn-SOAV3FEV.js +11 -0
- package/profileConfig-ZGOFORWV.js +43 -0
- package/{providerPresetApply-FG6NZ57W.js → providerPresetApply-TEBH7FDX.js} +7 -7
- package/{providerRegistry-757OWH3O.js → providerRegistry-CBJLNCET.js} +11 -7
- package/{read-COE3ZYR6.js → read-PJIT2YEJ.js} +7 -6
- package/{readDocTool-5USN4A6V.js → readDocTool-DRSXHGNL.js} +5 -3
- package/{readlineWorkspace-VXWM4UYD.js → readlineWorkspace-7Q6MITLV.js} +2593 -2029
- package/{removeDialogAgentAction-IX3MN2ZO.js → removeDialogAgentAction-IN4WUKJJ.js} +21 -25
- package/{runAgentClientLoop-UY76PPZM.js → runAgentClientLoop-H2JALUVD.js} +76 -70
- package/{runtimeDoctorCommands-X6WDBEQX.js → runtimeDoctorCommands-PIVSBZRZ.js} +4 -4
- package/runtimeModeArgs-2Y7BALTO.js +31 -0
- package/{setDialogExtraReferencesAction-X4HCPNZL.js → setDialogExtraReferencesAction-VDRF7LPK.js} +15 -13
- package/{setPrimaryDialogAgentAction-4GMIQLOD.js → setPrimaryDialogAgentAction-RO6LIWJ4.js} +22 -26
- package/{chunk-AFUORTY4.js → settingThunks-3OPOLOIA.js} +226 -940
- package/{skillDiscovery-CYUCJMAG.js → skillDiscovery-ZBU76COE.js} +3 -3
- package/{slateUtils-RIZES3PV.js → slateUtils-NGV2NMKM.js} +1 -1
- package/{spaceCommands-BMXKR7H6.js → spaceCommands-UBLL5EF2.js} +51 -46
- package/{streamAgentChatTurn-3YVIO4KE.js → streamAgentChatTurn-FFJWW3FD.js} +214 -108
- package/{switchDialogAgentAction-N52LRPA3.js → switchDialogAgentAction-MVF2JNE7.js} +18 -19
- package/{tableCommands-O6NWHFKV.js → tableCommands-6U4BMLRR.js} +10 -10
- package/{toolApiClient-QVJ6HDNN.js → toolApiClient-EJT6TMFG.js} +3 -3
- package/tools-AZRYLYNK.js +116 -0
- package/{tuiSummaryLlmCaller-WFRWERGK.js → tuiSummaryLlmCaller-7S5HJ3MT.js} +25 -22
- package/{updateCommands-2M74UL7P.js → updateCommands-4EHDLF5J.js} +3 -3
- package/{updateDialogTitleAction-GF5T3VMK.js → updateDialogTitleAction-5WXTRUJM.js} +82 -44
- package/action-YVYQEAAV.js +0 -31
- package/agentListCommands-3GWH4E4G.js +0 -410
- package/agentRecordCommands-UOF6YM5M.js +0 -128
- package/agentRunCommand-AVBWVTAJ.js +0 -156
- package/browser-image-compression-MFDTD7K6.js +0 -1763
- package/chatQueueReduxAdapter-WFROMKD3.js +0 -186
- package/chunk-CQ3WA2NE.js +0 -299
- package/chunk-FQUHIG5X.js +0 -20782
- package/chunk-M76ECQRD.js +0 -13658
- package/chunk-MEYIRKDN.js +0 -8967
- package/chunk-Q5FJJ6XI.js +0 -103
- package/chunk-S7Z2HMCN.js +0 -25
- package/chunk-Y5GCAMGP.js +0 -9
- package/chunk-YPREESF4.js +0 -225
- package/createDialogAction-TDFOINOY.js +0 -65
- package/machineWsRunDispatch-OVA3G76V.js +0 -144
- package/settingSlice-ZQZVUPKK.js +0 -204
- package/syncMapping-N6RGXGBW.js +0 -437
- package/tools-Q6IBBG33.js +0 -110
- package/{chunk-X7HHHIOZ.js → chunk-Y6ROFCZO.js} +0 -0
- package/{db-WK5MDZVN.js → db-VQSAOWAO.js} +1 -1
|
@@ -0,0 +1,129 @@
|
|
|
1
|
+
// packages/ai/chat/parseApiError.ts
|
|
2
|
+
var CONTEXT_OVERFLOW_ACTIONS = [
|
|
3
|
+
"compact-and-retry",
|
|
4
|
+
"new-dialog",
|
|
5
|
+
"switch-model",
|
|
6
|
+
"retry"
|
|
7
|
+
];
|
|
8
|
+
var CONTEXT_TOO_LARGE_ACTIONS = [
|
|
9
|
+
"new-dialog",
|
|
10
|
+
"switch-model",
|
|
11
|
+
"retry"
|
|
12
|
+
];
|
|
13
|
+
var truncateErrorMessage = (message, maxChars = 320) => message.length <= maxChars ? message : `${message.slice(0, maxChars)}\u2026`;
|
|
14
|
+
var isContextOverflowText = (message) => /maximum context|context (length|window|overflow|limit)|context_length_exceed\w*|requested about .*tokens|too many tokens|prompt is too long|exceeds? (the )?(model|max)/i.test(
|
|
15
|
+
message
|
|
16
|
+
);
|
|
17
|
+
function classifyApiError(input) {
|
|
18
|
+
const { status, message, body, code } = input;
|
|
19
|
+
const errorMessage = message;
|
|
20
|
+
let defaultMessage = `\u72B6\u6001\u7801 ${status} ${input.statusText ?? ""}`;
|
|
21
|
+
switch (status) {
|
|
22
|
+
case 400:
|
|
23
|
+
if (isContextOverflowText(errorMessage) || isContextOverflowText(body) || code === "UPSTREAM_400") {
|
|
24
|
+
return {
|
|
25
|
+
kind: "context_overflow",
|
|
26
|
+
message: "\u4E0A\u4E0B\u6587\u8FC7\u957F\uFF1A\u672C\u8F6E\u6D88\u606F\u6216\u5DE5\u5177\u7ED3\u679C\u592A\u5927\u3002\u8BF7\u7F29\u5C0F\u8303\u56F4\uFF0C\u6216\u5148\u8BFB\u53D6\u66F4\u5C0F\u7247\u6BB5\u540E\u518D\u7EE7\u7EED\u3002",
|
|
27
|
+
code,
|
|
28
|
+
status,
|
|
29
|
+
retryable: true,
|
|
30
|
+
actions: [...CONTEXT_OVERFLOW_ACTIONS]
|
|
31
|
+
};
|
|
32
|
+
}
|
|
33
|
+
if (code === "MISSING_PROVIDER_API_KEY") {
|
|
34
|
+
return {
|
|
35
|
+
kind: "generic",
|
|
36
|
+
message: truncateErrorMessage(errorMessage),
|
|
37
|
+
code,
|
|
38
|
+
status,
|
|
39
|
+
retryable: false
|
|
40
|
+
};
|
|
41
|
+
}
|
|
42
|
+
if (errorMessage && errorMessage !== defaultMessage) {
|
|
43
|
+
return {
|
|
44
|
+
kind: "generic",
|
|
45
|
+
message: `\u8BF7\u6C42\u53C2\u6570\u9519\u8BEF: ${truncateErrorMessage(errorMessage)}`,
|
|
46
|
+
code,
|
|
47
|
+
status,
|
|
48
|
+
retryable: false
|
|
49
|
+
};
|
|
50
|
+
}
|
|
51
|
+
return { kind: "generic", message: "\u8BF7\u6C42\u53C2\u6570\u9519\u8BEF\uFF0C\u8BF7\u68C0\u67E5\u8F93\u5165", code, status, retryable: false };
|
|
52
|
+
case 413:
|
|
53
|
+
return {
|
|
54
|
+
kind: "context_too_large",
|
|
55
|
+
message: "\u8BF7\u6C42\u5185\u5BB9\u8FC7\u5927\uFF1A\u8BF7\u51CF\u5C11\u4E00\u6B21\u53D1\u9001\u7684\u6D88\u606F\u3001\u6587\u4EF6\u6216\u5DE5\u5177\u7ED3\u679C\u3002",
|
|
56
|
+
code,
|
|
57
|
+
status,
|
|
58
|
+
retryable: true,
|
|
59
|
+
actions: [...CONTEXT_TOO_LARGE_ACTIONS]
|
|
60
|
+
};
|
|
61
|
+
case 401:
|
|
62
|
+
return {
|
|
63
|
+
kind: "auth",
|
|
64
|
+
message: code === "AUTH_TOKEN_EXPIRED" ? "\u767B\u5F55\u72B6\u6001\u5DF2\u8FC7\u671F\uFF0C\u8BF7\u5148\u767B\u51FA\u540E\u91CD\u65B0\u767B\u5F55" : code === "AUTH_ACCOUNT_INVALID" ? "\u8D26\u6237\u65E0\u6548\u6216\u5DF2\u88AB\u505C\u7528\uFF0C\u8BF7\u8054\u7CFB\u7BA1\u7406\u5458" : code === "AUTH_NO_TOKEN" ? "\u672A\u68C0\u6D4B\u5230\u767B\u5F55\u72B6\u6001\uFF0C\u8BF7\u5148\u767B\u5F55" : code === "AUTH_INVALID_TOKEN" ? "\u767B\u5F55\u51ED\u8BC1\u65E0\u6548\uFF0C\u8BF7\u5148\u767B\u51FA\u540E\u91CD\u65B0\u767B\u5F55" : code === "AUTH_TOKEN_NOT_ACTIVE" ? "\u4EE4\u724C\u5C1A\u672A\u751F\u6548\uFF0C\u8BF7\u7A0D\u540E\u518D\u8BD5" : errorMessage && errorMessage !== `\u72B6\u6001\u7801 401 Unauthorized` ? `\u8BA4\u8BC1\u9519\u8BEF: ${truncateErrorMessage(errorMessage)}` : "\u8EAB\u4EFD\u9A8C\u8BC1\u5931\u8D25\uFF0C\u8BF7\u5148\u767B\u51FA\u540E\u91CD\u65B0\u767B\u5F55",
|
|
65
|
+
code,
|
|
66
|
+
status,
|
|
67
|
+
retryable: true,
|
|
68
|
+
actions: ["retry"]
|
|
69
|
+
};
|
|
70
|
+
case 503:
|
|
71
|
+
return {
|
|
72
|
+
kind: "server",
|
|
73
|
+
message: errorMessage && errorMessage !== `\u72B6\u6001\u7801 503 Service Unavailable` ? truncateErrorMessage(errorMessage) : "\u670D\u52A1\u6682\u65F6\u4E0D\u53EF\u7528\uFF0C\u8BF7\u7A0D\u540E\u518D\u8BD5",
|
|
74
|
+
code,
|
|
75
|
+
status,
|
|
76
|
+
retryable: true,
|
|
77
|
+
actions: ["retry"]
|
|
78
|
+
};
|
|
79
|
+
case 504:
|
|
80
|
+
return {
|
|
81
|
+
kind: "timeout",
|
|
82
|
+
message: "\u8BF7\u6C42\u8D85\u65F6\uFF0C\u8BF7\u7A0D\u540E\u518D\u8BD5",
|
|
83
|
+
code,
|
|
84
|
+
status,
|
|
85
|
+
retryable: true,
|
|
86
|
+
actions: ["retry"]
|
|
87
|
+
};
|
|
88
|
+
default:
|
|
89
|
+
return {
|
|
90
|
+
kind: "generic",
|
|
91
|
+
message: `API\u8BF7\u6C42\u5931\u8D25: ${truncateErrorMessage(errorMessage)}`,
|
|
92
|
+
code,
|
|
93
|
+
status,
|
|
94
|
+
retryable: true,
|
|
95
|
+
actions: ["retry"]
|
|
96
|
+
};
|
|
97
|
+
}
|
|
98
|
+
}
|
|
99
|
+
async function parseApiErrorInfo(response) {
|
|
100
|
+
const errorBody = await response.text();
|
|
101
|
+
let errorMessage = `\u72B6\u6001\u7801 ${response.status} ${response.statusText}`;
|
|
102
|
+
let errorCode = `E${response.status}`;
|
|
103
|
+
try {
|
|
104
|
+
const errorJson = JSON.parse(errorBody);
|
|
105
|
+
errorMessage = errorJson?.error?.message || errorJson?.message || errorJson?.msg || errorBody || errorMessage;
|
|
106
|
+
errorCode = errorJson?.error?.code || errorJson?.code || errorCode;
|
|
107
|
+
} catch (_e) {
|
|
108
|
+
if (errorBody) {
|
|
109
|
+
errorMessage = errorBody;
|
|
110
|
+
}
|
|
111
|
+
}
|
|
112
|
+
return classifyApiError({
|
|
113
|
+
status: response.status,
|
|
114
|
+
statusText: response.statusText,
|
|
115
|
+
message: errorMessage,
|
|
116
|
+
body: errorBody,
|
|
117
|
+
code: errorCode
|
|
118
|
+
});
|
|
119
|
+
}
|
|
120
|
+
async function parseApiError(response) {
|
|
121
|
+
return (await parseApiErrorInfo(response)).message;
|
|
122
|
+
}
|
|
123
|
+
|
|
124
|
+
export {
|
|
125
|
+
CONTEXT_OVERFLOW_ACTIONS,
|
|
126
|
+
CONTEXT_TOO_LARGE_ACTIONS,
|
|
127
|
+
isContextOverflowText,
|
|
128
|
+
parseApiError
|
|
129
|
+
};
|
|
@@ -2390,6 +2390,11 @@ var require_rambda = __commonJS({
|
|
|
2390
2390
|
}
|
|
2391
2391
|
});
|
|
2392
2392
|
|
|
2393
|
+
// packages/core/toTrimmedString.ts
|
|
2394
|
+
function toTrimmedString(value) {
|
|
2395
|
+
return typeof value === "string" ? value.trim() : value == null ? "" : String(value).trim();
|
|
2396
|
+
}
|
|
2397
|
+
|
|
2393
2398
|
// packages/core/stringArray.ts
|
|
2394
2399
|
function asNonEmptyStringArray(value) {
|
|
2395
2400
|
if (!Array.isArray(value)) return [];
|
|
@@ -2401,11 +2406,6 @@ function asTrimmedNonEmptyStringArray(value) {
|
|
|
2401
2406
|
return asNonEmptyStringArray(value).map((item) => item.trim());
|
|
2402
2407
|
}
|
|
2403
2408
|
|
|
2404
|
-
// packages/core/toTrimmedString.ts
|
|
2405
|
-
function toTrimmedString(value) {
|
|
2406
|
-
return typeof value === "string" ? value.trim() : value == null ? "" : String(value).trim();
|
|
2407
|
-
}
|
|
2408
|
-
|
|
2409
2409
|
// packages/database/utils/ulid.ts
|
|
2410
2410
|
import { monotonicFactory } from "ulid";
|
|
2411
2411
|
var prng = () => Math.random();
|
|
@@ -2717,8 +2717,9 @@ var metaKey = Object.assign(
|
|
|
2717
2717
|
var DB_PREFIX = {
|
|
2718
2718
|
USER: "user:"
|
|
2719
2719
|
};
|
|
2720
|
+
var USER_SETTINGS_KEY_SUFFIX = `${SEPARATOR2}settings`;
|
|
2720
2721
|
var createUserKey = {
|
|
2721
|
-
settings: (userId) =>
|
|
2722
|
+
settings: (userId) => `${userId}${USER_SETTINGS_KEY_SUFFIX}`,
|
|
2722
2723
|
profile: (userId) => createKey(userId, "profile")
|
|
2723
2724
|
};
|
|
2724
2725
|
var createUserPreferenceKey = {
|
|
@@ -2763,6 +2764,22 @@ var createTokenKey = {
|
|
|
2763
2764
|
record: (0, import_rambda.curry)(
|
|
2764
2765
|
(userId, timestamp) => createKey("token", userId, timestamp.toString())
|
|
2765
2766
|
),
|
|
2767
|
+
/**
|
|
2768
|
+
* 单次计费记录:`token/<user>/<timestamp>/<chargeId>`。
|
|
2769
|
+
*
|
|
2770
|
+
* 与 `record` 的唯一区别是把「本次计费自己的唯一 id」作为额外一段拼在末尾
|
|
2771
|
+
* —— 同一用户同一毫秒内的两笔合法计费因此各占一个 key,不再互相覆盖,
|
|
2772
|
+
* 也不会共用同一个账本 txId / 幂等键(`token-<tokenKey>` / `token:<tokenKey>`)
|
|
2773
|
+
* 而被账本判为 duplicate 静默漏扣。
|
|
2774
|
+
*
|
|
2775
|
+
* 兼容性:timestamp 仍是第二段且保持首位排序,因此
|
|
2776
|
+
* - `rangeOfUser(userId)`(usage/统计等读取路径用的全前缀范围)照常覆盖;
|
|
2777
|
+
* - `range(userId, ts)` 的 `token/<user>/<ts>` … `token/<user>/<ts+1d>`
|
|
2778
|
+
* 区间同样覆盖新 key(`<ts>-xxx` > `<ts>` 且 < `<ts+1>`),历史数据
|
|
2779
|
+
* 与新数据可以在同一区间里混扫。
|
|
2780
|
+
* 幂等键的稳定性由调用方决定:需要「重试同一笔」时传稳定的 chargeId。
|
|
2781
|
+
*/
|
|
2782
|
+
recordForCharge: (userId, timestamp, chargeId) => createKey("token", userId, timestamp.toString(), encodeURIComponent(chargeId)),
|
|
2766
2783
|
/** Server provider-call record: retry-stable even when the retry clock changes. */
|
|
2767
2784
|
recordForStableCall: (userId, callId) => createKey("token", userId, "call", encodeURIComponent(callId)),
|
|
2768
2785
|
/** Server provider-call failure audit record: preserved separately from retry success in a collision-free namespace. */
|
|
@@ -2787,6 +2804,16 @@ var createTokenStatsKey = Object.assign(
|
|
|
2787
2804
|
})
|
|
2788
2805
|
}
|
|
2789
2806
|
);
|
|
2807
|
+
var createTokenStatsAppliedKey = Object.assign(
|
|
2808
|
+
(userId, chargeKey) => createKey("token", "charge-stats", userId, encodeURIComponent(chargeKey)),
|
|
2809
|
+
{
|
|
2810
|
+
/** 某个用户的全部计费幂等标记范围:token-charge-stats-<userId>-* */
|
|
2811
|
+
rangeOfUser: (userId) => ({
|
|
2812
|
+
start: createKey("token", "charge-stats", userId, ""),
|
|
2813
|
+
end: createKey("token", "charge-stats", userId, "\uFFFF")
|
|
2814
|
+
})
|
|
2815
|
+
}
|
|
2816
|
+
);
|
|
2790
2817
|
var DIALOG_AGENT_LIST_INDEX_PREFIX = "dialogidx";
|
|
2791
2818
|
var DIALOG_LIST_TIMESTAMP_MAX = 9999999999999;
|
|
2792
2819
|
function parseDialogUpdatedAtMs(value) {
|
|
@@ -3177,10 +3204,10 @@ var sanitizeShareData = (data) => {
|
|
|
3177
3204
|
};
|
|
3178
3205
|
|
|
3179
3206
|
export {
|
|
3180
|
-
asNonEmptyStringArray,
|
|
3181
|
-
asTrimmedNonEmptyStringArray,
|
|
3182
3207
|
ulid,
|
|
3183
3208
|
toTrimmedString,
|
|
3209
|
+
asNonEmptyStringArray,
|
|
3210
|
+
asTrimmedNonEmptyStringArray,
|
|
3184
3211
|
toNonEmptyString,
|
|
3185
3212
|
extractAgentInfo,
|
|
3186
3213
|
extractCoverImage,
|
|
@@ -6,20 +6,20 @@ import {
|
|
|
6
6
|
buildBuiltinObjectSkillDbKey,
|
|
7
7
|
buildBuiltinObjectSkillPageContent,
|
|
8
8
|
buildCodeWorkDiscipline
|
|
9
|
-
} from "./chunk-
|
|
9
|
+
} from "./chunk-GSKPJIHY.js";
|
|
10
10
|
import {
|
|
11
11
|
buildSkillDocMarkdown,
|
|
12
12
|
resolvePageSkillMetadata
|
|
13
|
-
} from "./chunk-
|
|
14
|
-
import {
|
|
15
|
-
canonicalizeToolNames
|
|
16
|
-
} from "./chunk-O6OSWFZQ.js";
|
|
13
|
+
} from "./chunk-DMXLXZKL.js";
|
|
17
14
|
import {
|
|
18
15
|
nolotusId
|
|
19
|
-
} from "./chunk-
|
|
16
|
+
} from "./chunk-A4SQRTZ6.js";
|
|
17
|
+
import {
|
|
18
|
+
canonicalizeToolNames
|
|
19
|
+
} from "./chunk-IHPDK6UD.js";
|
|
20
20
|
import {
|
|
21
21
|
asNonEmptyStringArray
|
|
22
|
-
} from "./chunk-
|
|
22
|
+
} from "./chunk-OKGVNZTL.js";
|
|
23
23
|
import {
|
|
24
24
|
asOptionalTrimmedString
|
|
25
25
|
} from "./chunk-G3SUCT4W.js";
|
|
@@ -242,7 +242,7 @@ var CODING_SKILL_SEEDS = [
|
|
|
242
242
|
"## \u6D41\u7A0B",
|
|
243
243
|
"1. Gather\uFF1A\u8BFB spec \u7ED9\u7684\u5BA1\u67E5\u547D\u4EE4\uFF08`git diff` \u6216 `git diff alpha...HEAD`\uFF09\uFF0C\u62FF\u5230 diff\uFF1B\u65E0\u6539\u52A8\u76F4\u63A5 Clean review\u3002",
|
|
244
244
|
"2. Scope\uFF1A\u786E\u8BA4\u6539\u52A8\u8303\u56F4\uFF0C\u53EA\u5BA1 diff \u89E6\u53CA\u7684\u6587\u4EF6\uFF0C\u5F04\u6E05\u5BF9\u5E94\u4EC0\u4E48\u529F\u80FD/\u4FEE\u590D\u3002",
|
|
245
|
-
"3. Context\uFF1A\u4E0D\u8981\u53EA\u770B hunk\uFF1B\u8BFB\u5468\u56F4\u5B9E\u73B0\u3001imports\u3001\u8C03\u7528\u65B9\u3002",
|
|
245
|
+
"3. Context\uFF1A\u4E0D\u8981\u53EA\u770B hunk\uFF1B\u8BFB\u5468\u56F4\u5B9E\u73B0\u3001imports\u3001\u8C03\u7528\u65B9\u3002**\u4EE3\u7801\u771F\u503C\u4F18\u5148**\uFF1Areview brief\u3001prompt\u3001\u6CE8\u91CA\u548C\u6D4B\u8BD5\u540D\u4E0D\u662F\u5B9E\u73B0\u771F\u503C\uFF1B\u6D89\u53CA\u884C\u4E3A\u5951\u7EA6\u65F6\u4EE5\u5B9E\u9645\u5B9E\u73B0\u3001\u7C7B\u578B\u548C\u53EF\u6267\u884C\u6D4B\u8BD5\u4E3A\u51C6\uFF0C\u51B2\u7A81\u5FC5\u987B\u62A5\u544A\uFF0C\u672A\u7ECF\u9A8C\u8BC1\u4E0D\u5F97 APPROVE\u3002",
|
|
246
246
|
"4. Checklist\uFF1A\u6309\u89D2\u8272\u4ECE CRITICAL \u2192 LOW\uFF1B\u53EA\u62A5 >80% \u6709\u628A\u63E1\u7684\u771F\u5B9E\u95EE\u9898\u3002",
|
|
247
247
|
"5. Report\uFF1A\u4EA7\u51FA finding \u8868 + Verdict\uFF1B\u540C\u7C7B\u95EE\u9898\u5408\u5E76\u3002",
|
|
248
248
|
"",
|
|
@@ -252,8 +252,15 @@ var CODING_SKILL_SEEDS = [
|
|
|
252
252
|
"\u4EFB\u4E00\u7B54\u300C\u5426\u300D\u6216\u300C\u4E0D\u786E\u5B9A\u300D\u5219\u964D\u7EA7\u6216\u4E22\u5F03\uFF1A",
|
|
253
253
|
"1. \u80FD\u5F15\u7528\u786E\u5207\u884C\u53F7\uFF1F\uFF08\u6A21\u7CCA\u53D1\u73B0\u4E0D actionable\uFF09",
|
|
254
254
|
"2. \u80FD\u63CF\u8FF0\u5177\u4F53\u5931\u8D25\u6A21\u5F0F\uFF1F\uFF08\u547D\u540D\u8F93\u5165\u3001\u72B6\u6001\u3001\u574F\u7ED3\u679C\uFF1B\u8BF4\u4E0D\u51FA\u89E6\u53D1\u6761\u4EF6 = \u6A21\u5F0F\u5339\u914D\uFF09",
|
|
255
|
-
"3. \
|
|
256
|
-
"4. \
|
|
255
|
+
"3. \u8BFB\u8FC7\u5468\u56F4\u4E0A\u4E0B\u6587\uFF1F\uFF08\u67E5\u8FC7\u8C03\u7528\u65B9\u3001imports\u3001\u6D4B\u8BD5\uFF1B\u5F88\u591A\u8868\u9762\u95EE\u9898\u4E0A\u4E00\u5C42\u5DF2\u5904\u7406\u6216\u6709\u7C7B\u578B guard\uFF09",
|
|
256
|
+
"4. \u4E25\u91CD\u5EA6\u7AD9\u5F97\u4F4F\uFF1F\uFF08\u7F3A JSDoc \u6C38\u8FDC\u4E0D\u662F HIGH\uFF1B\u6D4B\u8BD5 fixture \u91CC\u7684 `any` \u6C38\u8FDC\u4E0D\u662F CRITICAL\uFF1B\u4E25\u91CD\u5EA6\u81A8\u80C0\u6BD4\u6F0F\u62A5\u66F4\u4F24\u4FE1\u4EFB\uFF09",
|
|
257
|
+
"\u53E6\u6709\u5224\u65AD\u6807\u5C3A\u2014\u2014**\u8FD9\u4E2A\u56E2\u961F\u7684\u9AD8\u7EA7\u5DE5\u7A0B\u5E08\u771F\u4F1A\u5728 review \u91CC\u6539\u8FD9\u4E2A\u5417?** \u4E0D\u4F1A\u5C31\u8DF3\u8FC7\u3002\u6BCF\u6761 finding \u9644\u4EE3\u7801\u7EA7\u4FEE\u590D\u5EFA\u8BAE\uFF08Fix\uFF09\uFF0C\u4E0D\u662F\u9AD8\u5C42\u5EFA\u8BAE\u3002",
|
|
258
|
+
"",
|
|
259
|
+
"### HIGH / CRITICAL \u5FC5\u987B\u5E26\u8BC1\u636E",
|
|
260
|
+
"\u7F3A\u4EFB\u4E00\u6761\u5219\u964D\u7EA7\u5230 MEDIUM \u6216\u4E22\u5F03\uFF1A\u2460 \u786E\u5207\u4EE3\u7801\u7247\u6BB5 + \u884C\u53F7\uFF1B\u2461 \u5177\u4F53\u5931\u8D25\u573A\u666F\uFF08\u4EC0\u4E48\u8F93\u5165 \u2192 \u4EC0\u4E48\u72B6\u6001 \u2192 \u4EC0\u4E48\u574F\u7ED3\u679C\uFF09\uFF1B\u2462 \u4E3A\u4EC0\u4E48\u73B0\u6709\u9632\u62A4\uFF08\u7C7B\u578B\u7CFB\u7EDF/\u6821\u9A8C/\u6846\u67B6\u9ED8\u8BA4\uFF09\u6321\u4E0D\u4F4F\u3002",
|
|
261
|
+
"",
|
|
262
|
+
"### \u96F6\u53D1\u73B0\u662F\u5408\u6CD5\u7ED3\u679C",
|
|
263
|
+
"\u5E72\u51C0\u7684 review \u662F\u6709\u6548\u7684 review\uFF1Adiff \u5C0F\u3001\u7C7B\u578B\u5B8C\u5907\u3001\u6709\u6D4B\u8BD5\u3001\u9075\u5FAA\u9879\u76EE\u6A21\u5F0F\u65F6\uFF0C\u6B63\u786E\u8F93\u51FA\u662F\u96F6 finding + `Clean review`\u3002\u4E0D\u8981\u4E3A\u8BC1\u660E\u8DD1\u8FC7\u800C\u5236\u9020 finding\u3001\u586B\u5145\u5F0F nitpick \u6216\u65E0\u89E6\u53D1\u6761\u4EF6\u7684\u5047\u8BBE\u6027 edge case\u3002",
|
|
257
264
|
"",
|
|
258
265
|
"## \u5047\u9633\u6027\u6E05\u5355\uFF08\u8FD9\u4E9B\u4E0D\u62A5\uFF09",
|
|
259
266
|
"- \u300C\u8003\u8651\u52A0\u9519\u8BEF\u5904\u7406\u300D\uFF1A\u5148\u67E5\u8C03\u7528\u65B9/\u6846\u67B6\u662F\u5426\u5DF2\u5904\u7406\u3002",
|
|
@@ -1112,9 +1119,72 @@ function buildSearchSpaceSkillContentBySlug(slug) {
|
|
|
1112
1119
|
});
|
|
1113
1120
|
}
|
|
1114
1121
|
|
|
1122
|
+
// packages/ai/skills/autoReviewSkill.ts
|
|
1123
|
+
var AUTO_REVIEW_SKILL_SLUGS = ["auto-review"];
|
|
1124
|
+
function deterministicId6(prefix, seed) {
|
|
1125
|
+
let h = 2166136261;
|
|
1126
|
+
for (let i = 0; i < seed.length; i++) {
|
|
1127
|
+
h ^= seed.charCodeAt(i);
|
|
1128
|
+
h = h * 16777619 >>> 0;
|
|
1129
|
+
}
|
|
1130
|
+
const suffix = h.toString(36).toUpperCase().padStart(14, "0");
|
|
1131
|
+
return (prefix + suffix).slice(0, 26);
|
|
1132
|
+
}
|
|
1133
|
+
function buildAutoReviewSkillId(slug) {
|
|
1134
|
+
return deterministicId6("01SK", slug);
|
|
1135
|
+
}
|
|
1136
|
+
function buildAutoReviewSkillPageKey(userId, slug) {
|
|
1137
|
+
return `page-${userId}-${buildAutoReviewSkillId(slug)}`;
|
|
1138
|
+
}
|
|
1139
|
+
function buildAutoReviewSkillConfig(slug) {
|
|
1140
|
+
return {
|
|
1141
|
+
version: "0.1",
|
|
1142
|
+
kind: "skill",
|
|
1143
|
+
id: buildAutoReviewSkillId(slug),
|
|
1144
|
+
name: "\u81EA\u52A8\u5BA1\u67E5\u5408\u5E76\uFF08auto-review\uFF09",
|
|
1145
|
+
triggerMode: "explicit",
|
|
1146
|
+
description: "\u6539\u52A8\u5B8C\u6210\u540E\u81EA\u52A8\u8D70\u5B8C\u300C\u72EC\u7ACB reviewer \u5BA1\u67E5 \u2192 \u4FEE\u590D \u2192 \u63D0\u4EA4 \u2192 \u5408\u5E76\u5230\u672C\u5730\u96C6\u6210\u5206\u652F\u300D\u3002\u5F00\u542F\u5373\u6388\u6743 review \u901A\u8FC7\u540E\u81EA\u52A8\u63D0\u4EA4\u4E0E\u672C\u5730\u5408\u5E76\uFF0C\u4F46\u7EDD\u4E0D\u81EA\u52A8 push\u3001\u4E0D\u5408\u5E76\u8FDC\u7AEF\u6216\u4E3B\u5E72\u3001\u4E0D\u53D1\u5E03\u3002\u89E6\u53D1\u8BCD\uFF1Aauto-review\u3001\u81EA\u52A8\u5BA1\u67E5\u3001review \u540E\u81EA\u52A8\u5408\u5E76\u3001\u5BA1\u5B8C\u76F4\u63A5\u63D0\u4EA4\u5408\u5E76\u3001auto review\u3002\u4E0D\u9002\u7528\uFF1A\u53EA\u8BFB\u4EFB\u52A1\u3001\u7528\u6237\u8981\u5148\u9A8C\u6536\u6548\u679C\u7684\u6539\u52A8\uFF08\u5148\u4EA4\u4ED8\u4EA7\u7269\u7B49\u53CD\u9988\uFF09\u3002"
|
|
1147
|
+
};
|
|
1148
|
+
}
|
|
1149
|
+
var BODY = [
|
|
1150
|
+
"\u4F60\u662F\u300C\u81EA\u52A8\u5BA1\u67E5\u5408\u5E76\u300D\u6D41\u7A0B\u7684\u6267\u884C\u8005\uFF1A\u6539\u52A8\u505A\u5B8C\u540E\uFF0C\u4E0D\u7B49\u7528\u6237\u9010\u6B65\u70B9\u5934\uFF0C\u81EA\u5DF1\u628A\u5BA1\u67E5\u3001\u63D0\u4EA4\u3001\u672C\u5730\u5408\u5E76\u8D70\u5B8C\u3002",
|
|
1151
|
+
"",
|
|
1152
|
+
"## \u5F00\u542F\u6761\u4EF6\u4E0E\u8FB9\u754C",
|
|
1153
|
+
"- \u4EC5\u5728\u7528\u6237\u663E\u5F0F\u5F00\u542F\uFF08\u8BF4 auto-review / \u81EA\u52A8\u5BA1\u67E5\u5408\u5E76\uFF09\u540E\u4F7F\u7528\uFF1B\u5F00\u542F\u53EA\u6388\u6743**\u672C\u5730\u63D0\u4EA4\u4E0E\u672C\u5730\u96C6\u6210\u5206\u652F\u5408\u5E76**\u3002",
|
|
1154
|
+
"- \u6C38\u8FDC\u9700\u8981\u5F53\u6B21\u660E\u786E\u6279\u51C6\uFF1A`git push`\u3001\u5408\u5E76\u5230\u8FDC\u7AEF\u6216\u4E3B\u5E72\u5206\u652F\u3001\u53D1\u5E03/\u90E8\u7F72\u3001\u56DE\u6EDA\u3002\u5F00\u542F\u672C skill \u4E0D\u653E\u5BBD\u8FD9\u4E9B\u3002",
|
|
1155
|
+
"- \u9700\u8981\u7528\u6237\u4EB2\u81EA\u9A8C\u6536\u7684\u6539\u52A8\uFF08UI\u3001\u4F53\u9A8C\u7C7B\uFF09\uFF1A\u5148\u4EA4\u4ED8\u53EF\u6D4B\u8BD5\u4EA7\u7269\u5E76\u505C\u4E0B\uFF0C\u7B49\u7528\u6237\u786E\u8BA4\u300C\u53EF\u4EE5\u300D\u518D\u8FDB\u5165\u4E0B\u9762\u6D41\u7A0B\u3002",
|
|
1156
|
+
"",
|
|
1157
|
+
"## \u6D41\u7A0B",
|
|
1158
|
+
"1. **\u9694\u79BB**\uFF1A\u6539\u52A8\u5E94\u5DF2\u5728\u72EC\u7ACB worktree/\u5206\u652F\u91CC\uFF08\u89C1 `worktree-isolation`\uFF09\uFF1B\u4E0D\u5728\u5C31\u5148\u5EFA\u3002",
|
|
1159
|
+
"2. **\u6D3E reviewer**\uFF1A\u4E0E\u4F5C\u8005\u4E0D\u540C\u7684 agent \u5B9E\u4F8B\uFF0C\u53EA\u8BFB\u5BA1 diff\uFF0C\u53EA\u4F20 worktree \u8DEF\u5F84\u4E0E\u6587\u4EF6\u6E05\u5355\uFF0C\u4E0D\u5185\u5D4C diff\u3002brief \u8981\u6C42\u6700\u7EC8\u6587\u672C\u542B Verdict\uFF08APPROVE / WARNING / BLOCK\uFF09\u4E0E\u5E26\u884C\u53F7\u7684 finding\u3002",
|
|
1160
|
+
"3. **\u5224\u5B9A**\uFF1A",
|
|
1161
|
+
" - \u6700\u7EC8\u6587\u672C\u542B\u660E\u786E APPROVE \u4E14\u65E0 CRITICAL/HIGH \u2192 \u7EE7\u7EED\uFF1B",
|
|
1162
|
+
" - BLOCK \u2192 \u4FEE\u590D\u540E\u590D\u5BA1\uFF0C\u5FAA\u73AF\u76F4\u5230 APPROVE\uFF1B",
|
|
1163
|
+
" - WARNING\uFF08\u6709 HIGH\uFF09\u2192 \u505C\u4E0B\uFF0C\u628A finding \u62A5\u7ED9\u7528\u6237\u51B3\u5B9A\uFF0C\u4E0D\u81EA\u52A8\u5408\u5E76\uFF1B",
|
|
1164
|
+
" - \u7A7A\u56DE\u590D\u3001\u8D85\u65F6\u3001\u53EA\u8BF4\u300C\u6211\u5148\u68C0\u67E5\u300D\u90FD\u4E0D\u662F\u5BA1\u67E5\u8BC1\u636E\uFF1A\u6700\u591A\u91CD\u8BD5\u4E00\u6B21\uFF0C\u4ECD\u65E0\u7ED3\u8BBA\u5C31\u62A5\u544A `review incomplete`\uFF0C\u4EA4\u7528\u6237\u5904\u7406\u3002",
|
|
1165
|
+
"4. **\u63D0\u4EA4**\uFF1A\u6309\u9879\u76EE\u7684\u63D0\u4EA4\u89C4\u8303\u5199 message\uFF1B\u5982\u5B9E\u8BB0\u5F55\u8C01\u5BA1\u7684\u3001\u7ED3\u8BBA\u662F\u4EC0\u4E48\u3002\u65E0 review \u4E0D\u63D0\u4EA4\uFF08\u22642 \u6B65\u96F6\u903B\u8F91\u98CE\u9669\u7684\u673A\u68B0\u6539\u52A8\u9664\u5916\uFF0C\u987B\u5728 message \u6CE8\u660E\u539F\u56E0\uFF09\u3002",
|
|
1166
|
+
"5. **\u5408\u5E76**\uFF1A\u5728\u4E3B\u4ED3\u7528 `git merge --no-ff <\u5206\u652F>` \u5408\u5E76\u5230\u672C\u5730\u96C6\u6210\u5206\u652F\uFF0C\u4FDD\u7559\u5206\u652F\u5386\u53F2\u3002",
|
|
1167
|
+
"6. **\u6E05\u7406**\uFF1A\u5408\u5E76\u6210\u529F\u540E\uFF0C\u4E3B\u52A8\u5217\u51FA\u672C\u6B21\u4EA7\u751F\u7684\u5F85\u6E05\u7406\u8D44\u6E90\u6E05\u5355\uFF08\u786E\u5207\u7684 worktree \u76F8\u5BF9\u8DEF\u5F84\u4E0E\u5206\u652F\u540D\u79F0\uFF09\uFF1B\u83B7\u5F97\u7528\u6237\u660E\u786E\u786E\u8BA4\u540E\uFF0C\u6267\u884C `git worktree remove <worktreePath>` \u4E0E `git branch -d <branchName>` \u5B8C\u6210\u6E05\u7406\u95ED\u73AF\uFF1B\u4E25\u7981\u9759\u9ED8\u5220\u9664\u6216\u5148\u5220\u540E\u62A5\u3002",
|
|
1168
|
+
"7. **\u6536\u5C3E**\uFF1A\u6C47\u62A5 commit\u3001\u5408\u5E76\u4E0E\u6E05\u7406\u7ED3\u679C\u3001reviewer \u4E0E Verdict\u3001\u672A\u5904\u7406\u7684 WARNING\u3002\u5230\u6B64\u4E3A\u6B62\uFF0C\u4E0D push\u3002",
|
|
1169
|
+
"",
|
|
1170
|
+
"## \u9009 reviewer",
|
|
1171
|
+
"- \u6309\u5E73\u53F0\u9009\u4EBA\u5951\u7EA6\uFF1A\u6536\u85CF\u7684\u79C1\u6709\u8BA2\u9605/\u81EA\u5E26 key agent \u4F18\u5148\uFF0C\u5176\u6B21\u5176\u4ED6\u6536\u85CF\uFF0C\u518D\u5176\u6B21\u672A\u6536\u85CF\u7684\u79C1\u6709 agent\uFF1B\u4F4E\u4EF7\u80DC\u4EFB\u8005\u5373\u53EF\u3002\u53EA\u6709\u67B6\u6784/\u8BA1\u8D39/\u5B89\u5168/\u6570\u636E\u5B8C\u6574\u6027\u9AD8\u98CE\u9669\u6539\u52A8\u624D\u7528\u9876\u6863\u3002",
|
|
1172
|
+
"- \u4F1A\u6D88\u8017\u5E73\u53F0\u79EF\u5206\u7684 agent \u5FC5\u987B\u5148\u5F81\u5F97\u7528\u6237\u5F53\u6B21\u540C\u610F\u3002",
|
|
1173
|
+
"",
|
|
1174
|
+
"## Boundaries",
|
|
1175
|
+
"- \u4E0D\u66FF\u4EE3 reviewer \u4FA7\u7684\u8D28\u91CF\u95E8\uFF0C\u4E5F\u4E0D\u66FF\u4EE3\u6D4B\u8BD5\uFF1B\u6D4B\u8BD5\u6CA1\u8DD1\u8FC7\u4E0D\u8981\u5408\u5E76\u3002",
|
|
1176
|
+
"- \u4E0D\u4F2A\u9020 review \u8BC1\u636E\uFF1B\u4E0D\u7528 `--no-verify` \u7ED5\u8FC7\u63D0\u4EA4\u6216\u5408\u5E76\u94A9\u5B50\u3002"
|
|
1177
|
+
].join("\n");
|
|
1178
|
+
function buildAutoReviewSkillContentBySlug(slug) {
|
|
1179
|
+
return buildSkillDocMarkdown({
|
|
1180
|
+
body: BODY,
|
|
1181
|
+
skillConfig: buildAutoReviewSkillConfig(slug)
|
|
1182
|
+
});
|
|
1183
|
+
}
|
|
1184
|
+
|
|
1115
1185
|
// packages/ai/skills/worktreeSkill.ts
|
|
1116
1186
|
var WORKTREE_SKILL_SLUGS = ["worktree-isolation"];
|
|
1117
|
-
function
|
|
1187
|
+
function deterministicId7(prefix, seed) {
|
|
1118
1188
|
let h = 2166136261;
|
|
1119
1189
|
for (let i = 0; i < seed.length; i++) {
|
|
1120
1190
|
h ^= seed.charCodeAt(i);
|
|
@@ -1127,7 +1197,7 @@ function normalizeSkillSeed6(input) {
|
|
|
1127
1197
|
return input.trim().toLowerCase().replace(/[^a-z0-9\u4e00-\u9fa5]+/g, "-").replace(/^-+|-+$/g, "");
|
|
1128
1198
|
}
|
|
1129
1199
|
function buildWorktreeSkillId(slug) {
|
|
1130
|
-
return
|
|
1200
|
+
return deterministicId7("01SK", normalizeSkillSeed6(slug) || slug);
|
|
1131
1201
|
}
|
|
1132
1202
|
function buildWorktreeSkillPageKey(userId, slug) {
|
|
1133
1203
|
return `page-${userId}-${buildWorktreeSkillId(slug)}`;
|
|
@@ -1194,7 +1264,7 @@ function buildWorktreeSkillContentBySlug(slug) {
|
|
|
1194
1264
|
|
|
1195
1265
|
// packages/ai/skills/systematicInvestigationSkill.ts
|
|
1196
1266
|
var SYSTEMATIC_INVESTIGATION_SKILL_SLUGS = ["systematic-investigation"];
|
|
1197
|
-
function
|
|
1267
|
+
function deterministicId8(prefix, seed) {
|
|
1198
1268
|
let h = 2166136261;
|
|
1199
1269
|
for (let i = 0; i < seed.length; i++) {
|
|
1200
1270
|
h ^= seed.charCodeAt(i);
|
|
@@ -1207,7 +1277,7 @@ function normalizeSkillSeed7(input) {
|
|
|
1207
1277
|
return input.trim().toLowerCase().replace(/[^a-z0-9\u4e00-\u9fa5]+/g, "-").replace(/^-+|-+$/g, "");
|
|
1208
1278
|
}
|
|
1209
1279
|
function buildSystematicinvestigationSkillId(slug) {
|
|
1210
|
-
return
|
|
1280
|
+
return deterministicId8("01SK", normalizeSkillSeed7(slug) || slug);
|
|
1211
1281
|
}
|
|
1212
1282
|
function buildSystematicinvestigationSkillPageKey(userId, slug) {
|
|
1213
1283
|
return `page-${userId}-${buildSystematicinvestigationSkillId(slug)}`;
|
|
@@ -1231,7 +1301,7 @@ function buildSystematicinvestigationSkillContentBySlug(slug) {
|
|
|
1231
1301
|
|
|
1232
1302
|
// packages/ai/skills/showMeSkill.ts
|
|
1233
1303
|
var SHOW_ME_SKILL_SLUGS = ["show-me"];
|
|
1234
|
-
function
|
|
1304
|
+
function deterministicId9(prefix, seed) {
|
|
1235
1305
|
let h = 2166136261;
|
|
1236
1306
|
for (let i = 0; i < seed.length; i++) {
|
|
1237
1307
|
h ^= seed.charCodeAt(i);
|
|
@@ -1244,7 +1314,7 @@ function normalizeSkillSeed8(input) {
|
|
|
1244
1314
|
return input.trim().toLowerCase().replace(/[^a-z0-9\u4e00-\u9fa5]+/g, "-").replace(/^-+|-+$/g, "");
|
|
1245
1315
|
}
|
|
1246
1316
|
function buildShowmeSkillId(slug) {
|
|
1247
|
-
return
|
|
1317
|
+
return deterministicId9("01SK", normalizeSkillSeed8(slug) || slug);
|
|
1248
1318
|
}
|
|
1249
1319
|
function buildShowmeSkillPageKey(userId, slug) {
|
|
1250
1320
|
return `page-${userId}-${buildShowmeSkillId(slug)}`;
|
|
@@ -1268,7 +1338,7 @@ function buildShowmeSkillContentBySlug(slug) {
|
|
|
1268
1338
|
|
|
1269
1339
|
// packages/ai/skills/cavemanSkill.ts
|
|
1270
1340
|
var CAVEMAN_SKILL_SLUGS = ["caveman"];
|
|
1271
|
-
function
|
|
1341
|
+
function deterministicId10(prefix, seed) {
|
|
1272
1342
|
let h = 2166136261;
|
|
1273
1343
|
for (let i = 0; i < seed.length; i++) {
|
|
1274
1344
|
h ^= seed.charCodeAt(i);
|
|
@@ -1281,7 +1351,7 @@ function normalizeSkillSeed9(input) {
|
|
|
1281
1351
|
return input.trim().toLowerCase().replace(/[^a-z0-9\u4e00-\u9fa5]+/g, "-").replace(/^-+|-+$/g, "");
|
|
1282
1352
|
}
|
|
1283
1353
|
function buildCavemanSkillId(slug) {
|
|
1284
|
-
return
|
|
1354
|
+
return deterministicId10("01SK", normalizeSkillSeed9(slug) || slug);
|
|
1285
1355
|
}
|
|
1286
1356
|
function buildCavemanSkillPageKey(userId, slug) {
|
|
1287
1357
|
return `page-${userId}-${buildCavemanSkillId(slug)}`;
|
|
@@ -1305,7 +1375,7 @@ function buildCavemanSkillContentBySlug(slug) {
|
|
|
1305
1375
|
|
|
1306
1376
|
// packages/ai/skills/skillCreatorSkill.ts
|
|
1307
1377
|
var SKILL_CREATOR_SKILL_SLUGS = ["skill-creator"];
|
|
1308
|
-
function
|
|
1378
|
+
function deterministicId11(prefix, seed) {
|
|
1309
1379
|
let h = 2166136261;
|
|
1310
1380
|
for (let i = 0; i < seed.length; i++) {
|
|
1311
1381
|
h ^= seed.charCodeAt(i);
|
|
@@ -1318,7 +1388,7 @@ function normalizeSkillSeed10(input) {
|
|
|
1318
1388
|
return input.trim().toLowerCase().replace(/[^a-z0-9\u4e00-\u9fa5]+/g, "-").replace(/^-+|-+$/g, "");
|
|
1319
1389
|
}
|
|
1320
1390
|
function buildSkillCreatorSkillId(slug) {
|
|
1321
|
-
return
|
|
1391
|
+
return deterministicId11("01SK", normalizeSkillSeed10(slug) || slug);
|
|
1322
1392
|
}
|
|
1323
1393
|
function buildSkillCreatorSkillPageKey(userId, slug) {
|
|
1324
1394
|
return `page-${userId}-${buildSkillCreatorSkillId(slug)}`;
|
|
@@ -1342,7 +1412,7 @@ function buildSkillCreatorSkillContentBySlug(slug) {
|
|
|
1342
1412
|
|
|
1343
1413
|
// packages/ai/skills/agentProviderSetupSkill.ts
|
|
1344
1414
|
var AGENT_PROVIDER_SETUP_SKILL_SLUGS = ["agent-provider-setup"];
|
|
1345
|
-
function
|
|
1415
|
+
function deterministicId12(prefix, seed) {
|
|
1346
1416
|
let h = 2166136261;
|
|
1347
1417
|
for (let i = 0; i < seed.length; i++) {
|
|
1348
1418
|
h ^= seed.charCodeAt(i);
|
|
@@ -1355,7 +1425,7 @@ function normalizeSkillSeed11(input) {
|
|
|
1355
1425
|
return input.trim().toLowerCase().replace(/[^a-z0-9\u4e00-\u9fa5]+/g, "-").replace(/^-+|-+$/g, "");
|
|
1356
1426
|
}
|
|
1357
1427
|
function buildAgentProviderSetupSkillId(slug) {
|
|
1358
|
-
return
|
|
1428
|
+
return deterministicId12("01SK", normalizeSkillSeed11(slug) || slug);
|
|
1359
1429
|
}
|
|
1360
1430
|
function buildAgentProviderSetupSkillPageKey(userId, slug) {
|
|
1361
1431
|
return `page-${userId}-${buildAgentProviderSetupSkillId(slug)}`;
|
|
@@ -1486,6 +1556,13 @@ var SOURCES = [
|
|
|
1486
1556
|
buildConfig: buildSearchSpaceSkillConfig,
|
|
1487
1557
|
buildContent: buildSearchSpaceSkillContentBySlug
|
|
1488
1558
|
},
|
|
1559
|
+
{
|
|
1560
|
+
slugs: AUTO_REVIEW_SKILL_SLUGS,
|
|
1561
|
+
buildSkillId: buildAutoReviewSkillId,
|
|
1562
|
+
buildPageKey: buildAutoReviewSkillPageKey,
|
|
1563
|
+
buildConfig: buildAutoReviewSkillConfig,
|
|
1564
|
+
buildContent: buildAutoReviewSkillContentBySlug
|
|
1565
|
+
},
|
|
1489
1566
|
{
|
|
1490
1567
|
slugs: WORKTREE_SKILL_SLUGS,
|
|
1491
1568
|
buildSkillId: buildWorktreeSkillId,
|