nolo-cli 0.65.0 → 0.66.0-alpha.3
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/{_executeModel-R26QYY66.js → _executeModel-TBSKCSBE.js} +21 -21
- package/{agentDeleteCommand-6R6EXQOR.js → agentDeleteCommand-22K5XPEC.js} +11 -11
- package/{agentEmailCommands-AKENZOKO.js → agentEmailCommands-U56B5FHS.js} +26 -26
- package/{agentListCommands-XJU3JJQO.js → agentListCommands-D6JN4CL4.js} +18 -13
- package/{agentMachineCommands-V7IJDPAY.js → agentMachineCommands-KTW5UF5B.js} +12 -12
- package/{agentRecordCommands-VIEINDIV.js → agentRecordCommands-TVNB6F7R.js} +25 -25
- package/{agentRunCommand-GT5ZTYRM.js → agentRunCommand-ORQVEPWY.js} +25 -25
- package/{agentRunControl-WECMOO6O.js → agentRunControl-T44MESII.js} +1 -1
- package/{agentRuntimeLocal-HGJ4D3JF.js → agentRuntimeLocal-5ENMNOG5.js} +11 -11
- package/{agentSlice-7XJH5WQF.js → agentSlice-FYVXEVSO.js} +1 -1
- package/{appDeleteCommands-VG2UVW4T.js → appDeleteCommands-TCJYBQHN.js} +11 -11
- package/{appDeployCommands-PABMVMN2.js → appDeployCommands-2O4Y7BB3.js} +11 -11
- package/{appDeployStatusCommands-X7WEU4TU.js → appDeployStatusCommands-M6U7ZLJ7.js} +11 -11
- package/{appGetCommands-NQYXHVJL.js → appGetCommands-H2JW2R4K.js} +11 -11
- package/{appListCommands-5NGZQ6IK.js → appListCommands-MWFD4SXY.js} +11 -11
- package/{authCommand-WOTWLJNF.js → authCommand-QHMBXOOH.js} +7 -7
- package/{chatQueueReduxAdapter-F3R253JE.js → chatQueueReduxAdapter-ZFRURUPP.js} +7 -7
- package/{chunk-VAKVNHK5.js → chunk-2NVUXKVF.js} +7 -7
- package/{chunk-LJ6OKZ6D.js → chunk-2WB3CWWX.js} +17 -13
- package/{chunk-3ROJR3TG.js → chunk-4TNFXQTF.js} +7 -7
- package/{chunk-SYNKICCB.js → chunk-5RHCYQBK.js} +2 -2
- package/{chunk-22BTGNSP.js → chunk-5YIL5WDC.js} +38 -5
- package/{chunk-FKFMIBTT.js → chunk-6IT5ECCC.js} +1 -1
- package/{chunk-ZRSJ3JEH.js → chunk-AJF6YRN7.js} +5 -11
- package/{chunk-QEFJJS2I.js → chunk-AM3KKSJJ.js} +10 -9
- package/{chunk-BWIPK2PD.js → chunk-AQPKZXCQ.js} +53 -16
- package/{chunk-MXUDQZXQ.js → chunk-BNATE77Z.js} +1 -1
- package/{chunk-OOCYHKCV.js → chunk-EIBTZ5WF.js} +1 -1
- package/{chunk-45YO6H7P.js → chunk-HH65VA5U.js} +21 -0
- package/{chunk-TBHAHL33.js → chunk-JMVS6OB2.js} +16 -12
- package/{chunk-XAVSS3KE.js → chunk-KFE6BJJS.js} +8 -1
- package/{chunk-F44FAXP2.js → chunk-LNFMVJK5.js} +3 -3
- package/{chunk-3BLB7QKO.js → chunk-N2COMZCD.js} +55 -2
- package/{chunk-DWYSDNOH.js → chunk-NPZQNQFD.js} +4 -4
- package/{chunk-N6HLMLKE.js → chunk-PAETKIBR.js} +1 -1
- package/{chunk-7A3RRUCQ.js → chunk-PGX53HOY.js} +2 -2
- package/{chunk-5ZYA4JJ3.js → chunk-Q6FPSY5O.js} +2 -2
- package/{chunk-NO42UD73.js → chunk-ROXJVF7X.js} +1 -1
- package/{chunk-PQDIDWGX.js → chunk-RSDPPLSM.js} +1 -1
- package/{chunk-E3YVTQWT.js → chunk-RW76G3YN.js} +2 -2
- package/{chunk-3QGUVVX5.js → chunk-SHPRRU2W.js} +2 -2
- package/{chunk-LJKICKVC.js → chunk-SQDGTW2T.js} +2 -2
- package/{chunk-MMZ6ZTVO.js → chunk-TQC77XVE.js} +4 -3
- package/{chunk-RDBARW6T.js → chunk-VLQRD7ZJ.js} +2 -2
- package/{chunk-CQ2OZMLQ.js → chunk-WF4MZQFZ.js} +28 -24
- package/{chunk-URHZKKK7.js → chunk-WVP4TZ4A.js} +3 -3
- package/{chunk-XOKOSO35.js → chunk-Y7PULBIA.js} +1 -1
- package/{chunk-GSXDRMDO.js → chunk-YEI76VEX.js} +2 -2
- package/{chunk-QEW2MFDQ.js → chunk-ZW22L5ES.js} +1 -1
- package/{chunk-7KELZLC2.js → chunk-ZZXMGOIJ.js} +10 -10
- package/{codingSkills-TKROLCBA.js → codingSkills-DB4QPUND.js} +2 -2
- package/{contentThunks-OZPK5B4Z.js → contentThunks-NUN6NRHW.js} +8 -8
- package/{createAgentAutomationAction-LCIBGE5T.js → createAgentAutomationAction-3MOAQ3JB.js} +8 -8
- package/{createDialogAction-JPJZMHJE.js → createDialogAction-AYGXU34I.js} +10 -10
- package/{createPageAction-6P2WLNHO.js → createPageAction-Y77VWMIU.js} +8 -8
- package/{dialogCommands-HGMV4NQJ.js → dialogCommands-23KV3AP6.js} +11 -11
- package/{dialogSlice-R5RZHFTU.js → dialogSlice-FEJXMIMV.js} +7 -7
- package/{docCreateCommands-WQT5EZG2.js → docCreateCommands-7H24OAVG.js} +11 -11
- package/{docDeleteCommands-GUMELBKM.js → docDeleteCommands-FUAMVMAV.js} +11 -11
- package/{docReadCommands-T6FDDKJ3.js → docReadCommands-ZOSN3RRZ.js} +11 -11
- package/{docStore-DKWZ6XJ5.js → docStore-5LRRKLQA.js} +1 -1
- package/{docUpdateCommands-GBWGXG2G.js → docUpdateCommands-Q3FFXNVX.js} +11 -11
- package/{getPricing-NM3NUTAS.js → getPricing-JRNHI5CV.js} +3 -3
- package/{handleSendMessageAction-UQGKM4UX.js → handleSendMessageAction-YMQD6VXX.js} +7 -7
- package/index.js +52 -52
- package/{machineCommands-SCGLQQCA.js → machineCommands-O2SEOXVE.js} +25 -25
- package/{machineWsRunDispatch-EAH5VIEL.js → machineWsRunDispatch-SZ2M5MMG.js} +25 -25
- package/{models-FAMINFZ7.js → models-NBVTQACP.js} +2 -2
- package/package.json +1 -1
- package/{readlineWorkspace-7FNJDYLD.js → readlineWorkspace-EZ2IKTXS.js} +32 -28
- package/{runAgentClientLoop-Y6HWP2PT.js → runAgentClientLoop-FJFKDMVZ.js} +19 -19
- package/{spaceCommands-76ECKNFH.js → spaceCommands-7XAOMP6I.js} +11 -11
- package/{streamAgentChatTurn-6WFQJ4DY.js → streamAgentChatTurn-4O2VTVPB.js} +22 -22
- package/{tools-RR53D65Q.js → tools-CHXW6V2S.js} +14 -14
- package/{tuiSummaryLlmCaller-F3DPFFZM.js → tuiSummaryLlmCaller-D7CCLLS7.js} +5 -5
- package/{updateDialogTitleAction-WXS3AKOL.js → updateDialogTitleAction-Y4UFJSEB.js} +8 -8
|
@@ -233,11 +233,12 @@ var PLATFORM_HOSTED_ROUTING_TABLE = {
|
|
|
233
233
|
wire: "responses",
|
|
234
234
|
agentRunHosted: false
|
|
235
235
|
},
|
|
236
|
+
// DeepSeek V4 Pro -> 官方 DeepSeek Responses API(2026-09-14 起官方继续提供
|
|
237
|
+
// V4 Pro,model id 直传,不再 remap 到 flash)。
|
|
236
238
|
[PLATFORM_HOSTED_DEEPSEEK_PRO_MODEL]: {
|
|
237
239
|
endpoint: "https://api.deepseek.com/responses",
|
|
238
240
|
usageProvider: "deepseek",
|
|
239
241
|
keyName: "deepseek",
|
|
240
|
-
upstreamModelId: PLATFORM_HOSTED_DEEPSEEK_FLASH_MODEL,
|
|
241
242
|
wire: "responses",
|
|
242
243
|
agentRunHosted: false
|
|
243
244
|
}
|
|
@@ -522,6 +523,22 @@ var PLATFORM_HOSTED_DEEPSEEK_FLASH_OFF_PEAK_PRICE = {
|
|
|
522
523
|
output: toCnyCredits(4)
|
|
523
524
|
// ¥4
|
|
524
525
|
};
|
|
526
|
+
var PLATFORM_HOSTED_DEEPSEEK_PRO_PEAK_PRICE = {
|
|
527
|
+
input: toCnyCredits(9),
|
|
528
|
+
// ¥9
|
|
529
|
+
inputCacheHit: toCnyCredits(0.3),
|
|
530
|
+
// ¥0.30
|
|
531
|
+
output: toCnyCredits(27)
|
|
532
|
+
// ¥27
|
|
533
|
+
};
|
|
534
|
+
var PLATFORM_HOSTED_DEEPSEEK_PRO_OFF_PEAK_PRICE = {
|
|
535
|
+
input: toCnyCredits(4.5),
|
|
536
|
+
// ¥4.5
|
|
537
|
+
inputCacheHit: toCnyCredits(0.15),
|
|
538
|
+
// ¥0.15
|
|
539
|
+
output: toCnyCredits(13.5)
|
|
540
|
+
// ¥13.5
|
|
541
|
+
};
|
|
525
542
|
var PLATFORM_HOSTED_NEMOTRON_35_LIGHTNING_PRICE = {
|
|
526
543
|
input: toPlatformCredits(0.05),
|
|
527
544
|
inputCacheHit: toPlatformCredits(0.01),
|
|
@@ -529,8 +546,7 @@ var PLATFORM_HOSTED_NEMOTRON_35_LIGHTNING_PRICE = {
|
|
|
529
546
|
};
|
|
530
547
|
var PLATFORM_HOSTED_LEGACY_DEEPSEEK_MODELS = [
|
|
531
548
|
"deepseek-v4-flash",
|
|
532
|
-
"deepseek-v4-flash-vision-exp"
|
|
533
|
-
"deepseek-v4-pro"
|
|
549
|
+
"deepseek-v4-flash-vision-exp"
|
|
534
550
|
];
|
|
535
551
|
var isDeepSeekOffPeakBeijingTime = (nowMs = Date.now()) => {
|
|
536
552
|
const beijing = new Date(nowMs + 8 * 60 * 60 * 1e3);
|
|
@@ -540,13 +556,16 @@ var isDeepSeekOffPeakBeijingTime = (nowMs = Date.now()) => {
|
|
|
540
556
|
const isPeakWindow = beijingHour >= 9 && beijingHour < 12 || beijingHour >= 14 && beijingHour < 18;
|
|
541
557
|
return !isPeakWindow;
|
|
542
558
|
};
|
|
543
|
-
var getPlatformHostedDeepSeekV4Price = (
|
|
559
|
+
var getPlatformHostedDeepSeekV4Price = (model, nowMs = Date.now()) => {
|
|
544
560
|
const isOffPeak = isDeepSeekOffPeakBeijingTime(nowMs);
|
|
561
|
+
if (asTrimmedLowercaseString(model) === PLATFORM_HOSTED_DEEPSEEK_PRO_MODEL) {
|
|
562
|
+
return isOffPeak ? PLATFORM_HOSTED_DEEPSEEK_PRO_OFF_PEAK_PRICE : PLATFORM_HOSTED_DEEPSEEK_PRO_PEAK_PRICE;
|
|
563
|
+
}
|
|
545
564
|
return isOffPeak ? PLATFORM_HOSTED_DEEPSEEK_FLASH_OFF_PEAK_PRICE : PLATFORM_HOSTED_DEEPSEEK_FLASH_PEAK_PRICE;
|
|
546
565
|
};
|
|
547
566
|
var isPlatformHostedDeepSeekModel = (model) => {
|
|
548
567
|
const m = asTrimmedLowercaseString(model);
|
|
549
|
-
return m === PLATFORM_HOSTED_DEEPSEEK_FLASH_MODEL || PLATFORM_HOSTED_LEGACY_DEEPSEEK_MODELS.includes(m);
|
|
568
|
+
return m === PLATFORM_HOSTED_DEEPSEEK_FLASH_MODEL || m === PLATFORM_HOSTED_DEEPSEEK_PRO_MODEL || PLATFORM_HOSTED_LEGACY_DEEPSEEK_MODELS.includes(m);
|
|
550
569
|
};
|
|
551
570
|
var isPlatformHostedDeepseekModel = isPlatformHostedDeepSeekModel;
|
|
552
571
|
var isPlatformHostedDeepSeekV4Model = isPlatformHostedDeepSeekModel;
|
|
@@ -636,6 +655,19 @@ var platformHostedModels = [
|
|
|
636
655
|
supportsTool: true,
|
|
637
656
|
supportsReasoningEffort: true
|
|
638
657
|
},
|
|
658
|
+
{
|
|
659
|
+
name: PLATFORM_HOSTED_DEEPSEEK_PRO_MODEL,
|
|
660
|
+
displayName: "DeepSeek V4 Pro",
|
|
661
|
+
hasVision: false,
|
|
662
|
+
price: { ...PLATFORM_HOSTED_DEEPSEEK_PRO_PEAK_PRICE },
|
|
663
|
+
peakPrice: { ...PLATFORM_HOSTED_DEEPSEEK_PRO_PEAK_PRICE },
|
|
664
|
+
offPeakPrice: { ...PLATFORM_HOSTED_DEEPSEEK_PRO_OFF_PEAK_PRICE },
|
|
665
|
+
// 官方「输出长度 最大 384K」= 384_000(与 flash 条目同口径,非 384×1024)
|
|
666
|
+
maxOutputTokens: 384e3,
|
|
667
|
+
contextWindow: 1e6,
|
|
668
|
+
supportsTool: true,
|
|
669
|
+
supportsReasoningEffort: true
|
|
670
|
+
},
|
|
639
671
|
{
|
|
640
672
|
name: PLATFORM_HOSTED_GLM_53_FLASH_MODEL,
|
|
641
673
|
displayName: "GLM 5.3 Flash",
|
|
@@ -819,6 +851,7 @@ export {
|
|
|
819
851
|
resolveFireworksKimiModel,
|
|
820
852
|
PLATFORM_HOSTED_GLM_53_FLASH_MODEL,
|
|
821
853
|
PLATFORM_HOSTED_DEEPSEEK_FLASH_MODEL,
|
|
854
|
+
PLATFORM_HOSTED_DEEPSEEK_PRO_MODEL,
|
|
822
855
|
resolvePlatformHostedRouting,
|
|
823
856
|
NOLO_CLIENT_VERSION_HEADER,
|
|
824
857
|
CLIENT_VERSION_TOO_OLD_CODE,
|
|
@@ -5,31 +5,25 @@ import {
|
|
|
5
5
|
|
|
6
6
|
// packages/ai/tools/codeWorkDiscipline.ts
|
|
7
7
|
var CODE_WORK_DISCIPLINE_BODY = `## \u6548\u7387\u4F18\u5148\uFF08\u7701 token\uFF09
|
|
8
|
-
- \u4E0D\u590D\u8FF0\u9700\u6C42\
|
|
9
|
-
- \
|
|
10
|
-
- \u5C0F\u6539\u52A8\u8D70\u6700\u77ED\u8DEF\u5F84\uFF1A\u4F18\u5148\u7528 \`rg\` \u641C\u4EE3\u7801/\u6587\u672C\u3001\`find\`/\`fd\` \u5B9A\u4F4D\u6587\u4EF6 \u2192 readFile \u786E\u8BA4 \u2192 editFile \u7CBE\u786E\u66FF\u6362\u3002\u80FD\u4E00\u6B21\u547D\u4E2D\u5C31\u4E0D\u8981\u53CD\u590D\u8BFB\u6587\u4EF6\u3002
|
|
11
|
-
- \u5DF2\u7ECF\u77E5\u9053\u6587\u4EF6\u548C\u4F4D\u7F6E\u65F6\uFF0C\u8DF3\u8FC7\u591A\u4F59\u7684 search/read\uFF0C\u76F4\u63A5 edit\u3002
|
|
12
|
-
- \u7981\u6B62\u4E3A\u4E00\u4E2A\u5C0F\u6539\u52A8\u6574\u9875\u91CD\u5199\u6216\u8FDE\u5E26\u6539\u52A8\u672A\u547D\u4E2D\u7684\u90E8\u5206\u3002
|
|
8
|
+
- \u4E0D\u590D\u8FF0\u9700\u6C42\u3001\u4E0D\u89E3\u91CA\u300C\u6253\u7B97\u600E\u4E48\u505A\u300D\uFF0C\u76F4\u63A5\u52A8\u624B\uFF1B\u6539\u5B8C\u4E00\u4E24\u53E5\u8BDD\u8BF4\u6E05\u300C\u6539\u4E86\u4EC0\u4E48\u3001\u53BB\u54EA\u770B\u300D\u3002\u601D\u8003\u7B80\u77ED\u3002
|
|
9
|
+
- \u5C0F\u6539\u52A8\u8D70\u6700\u77ED\u8DEF\u5F84\uFF1A\`rg\` \u5B9A\u4F4D \u2192 readFile \u786E\u8BA4 \u2192 editFile \u7CBE\u786E\u66FF\u6362\uFF1B\u5DF2\u77E5\u4F4D\u7F6E\u5C31\u76F4\u63A5\u6539\uFF0C\u4E0D\u53CD\u590D\u8BFB\u6587\u4EF6\uFF0C\u4E5F\u4E0D\u987A\u624B\u91CD\u5199\u672A\u547D\u4E2D\u7684\u90E8\u5206\u3002
|
|
13
10
|
|
|
14
11
|
## \u4EE3\u7801\u4FEE\u6539\u7EAA\u5F8B
|
|
15
12
|
- \u7F16\u8F91\u524D\u5148 readFile \u786E\u8BA4\u5F53\u524D\u5185\u5BB9\uFF0C\u907F\u514D stale hash \u9519\u8BEF\u3002
|
|
16
13
|
- \u53EA\u78B0\u4EFB\u52A1\u4E66\u5217\u51FA\u7684\u6587\u4EF6\uFF1B\u6539\u5B8C\u7528 \`git status --short\` \u81EA\u67E5\uFF0C\u82E5\u6539\u5230\u6E05\u5355\u5916\u6587\u4EF6\uFF0C\u5982\u5B9E\u62A5\u544A\u3002
|
|
17
14
|
- \u4E0D\u8981 \`git add\` / \`git commit\` / \`git push\` / \`git stash\` / \`git reset\` / \`git checkout\` / \`git clean\`\u2014\u2014\u6539\u52A8\u7559\u5728\u5DE5\u4F5C\u533A\uFF0C\u63D0\u4EA4\u7531\u8C03\u7528\u65B9\u9A8C\u6536\u540E\u5904\u7406\u3002\u4ED3\u5E93\u5E38\u6709\u591A\u4E2A\u4F1A\u8BDD\u5171\u7528\u4E00\u4E2A checkout\uFF0C\u4F60\u4E00\u63D0\u4EA4\u5C31\u4F1A\u628A\u522B\u4EBA\u7684\u5728\u9014\u6587\u4EF6\u5377\u8FDB\u6765\u3002
|
|
18
15
|
- \u53EA\u8DD1\u4EFB\u52A1\u91CC\u5217\u51FA\u7684\u6D4B\u8BD5\u6587\u4EF6\uFF0C\u4E0D\u8981\u8DD1 broader \u6D4B\u8BD5\uFF08broaden \u6D4B\u8BD5\u7684\u5931\u8D25\u662F\u9884\u5B58\u7684\uFF0C\u548C\u4F60\u7684\u6539\u52A8\u65E0\u5173\uFF09\u3002
|
|
19
|
-
- \u540C\u4E00\u4E2A\u6587\u4EF6\u8BFB\u8FC7\u4E00\u6B21\u540E\u8BB0\u4F4F\u5185\u5BB9\uFF0C\u4E0D\u8981\u91CD\u590D\u8BFB\u53D6\u3002
|
|
20
|
-
- \u5982\u679C editFile \u5931\u8D25\u5E76\u63D0\u793A "expected 1 replacement but found 0"\uFF0C\u5148\u7528 \`file <path>\` \u68C0\u67E5\u662F\u5426\u6709 CRLF\u3002\u5982\u679C\u6709\uFF0C\u7528 \`tr -d '\\r' < <path> > /tmp/clean.ts && mv /tmp/clean.ts <path>\` \u8F6C\u6362\u540E\u91CD\u8BD5\u3002
|
|
21
16
|
- \u53EA\u8BFB\u4EFB\u52A1\u76F8\u5173\u7684\u6587\u4EF6\uFF0C\u4E0D\u8981 grep \u6574\u4E2A repo \u67E5\u627E\u89C4\u5219\u6216\u914D\u7F6E\u3002
|
|
22
17
|
- **\u5EFA\u8BAE\u6C47\u62A5**\uFF1A\u4EA4\u4ED8\u65F6\u628A\u8FC7\u7A0B\u4E2D\u53D1\u73B0\u7684**\u4EFB\u4F55\u503C\u5F97\u7528\u6237\u77E5\u9053\u7684\u4E8B**\u90FD\u5217\u51FA\u6765\uFF08\u9884\u5B58\u65E0\u5173\u6539\u52A8\u3001\u65E2\u6709\u6D4B\u8BD5\u9694\u79BB\u95EE\u9898\u3001\u6F5C\u5728\u98CE\u9669\u3001\u540E\u7EED\u53EF\u4F18\u5316\u70B9\u3001\u9700\u7528\u6237\u51B3\u7B56\u7684\u4E8B\u9879\uFF09\uFF0C\u4E0D\u8981\u53EA\u62A5\u300C\u505A\u5B8C\u4E86\u300D\u3002
|
|
23
18
|
|
|
24
19
|
## Review \u7EAA\u5F8B\uFF08commit \u524D\u786C\u95E8\uFF09
|
|
25
20
|
- **\u9636\u6BB5\u5212\u5206**\uFF1A\u4E25\u683C\u533A\u5206\u300C\u5B9E\u73B0/\u6784\u5EFA/\u5B89\u88C5/\u7528\u6237\u6D4B\u8BD5/\u6839\u636E\u53CD\u9988\u8FED\u4EE3\u300D\u4E0E\u300C\u51C6\u5907\u63D0\u4EA4/\u5408\u5E76\u300D\u9636\u6BB5\u3002UI/\u524D\u7AEF\u53CA\u5176\u4ED6\u9700\u7528\u6237\u9A8C\u6536\u7684\u4EFB\u52A1\uFF0C\u5728\u5B9E\u73B0\u9636\u6BB5\u4E0D\u5F97\u89E6\u53D1\u6216\u7B49\u5F85\u6700\u7EC8\u72EC\u7ACB review\uFF0C\u5E94\u5148\u4EA4\u4ED8\u53EF\u6D4B\u8BD5\u4EA7\u7269\u7B49\u5F85\u7528\u6237\u53CD\u9988\u3002
|
|
26
|
-
- \u6700\u7EC8 review \u4EC5\u5728\u7528\u6237\u660E\u786E\u786E\u8BA4\u51C6\u5907\u63D0\u4EA4/\u5408\u5E76\u65F6\u8FDB\u884C\u3002\u9664 \u22642 \u6B65\u96F6\u903B\u8F91\u98CE\u9669\u7684\u673A\u68B0\u6539\u52A8\uFF08\u9519\u522B\u5B57/\u683C\u5F0F/CSS \u5FAE\u8C03\uFF09\u5916\uFF0C\u6240\u6709\u4EE3\u7801\u53D8\u66F4 commit \u524D\u5FC5\u987B\u5148\u6D3E**\u5176\u4ED6 agent**\uFF08\u4E0D\u540C\u6A21\u578B\u5BB6\u65CF\u4F18\u5148\uFF09review \u5DE5\u4F5C\u533A diff\uFF08\`git diff\`\uFF0C\u672A\u63D0\u4EA4\u7684\u6539\u52A8\uFF09\u3002reviewer \u4E0D\u53EF\u662F\u672C\u6B21\u6539\u52A8\u7684\u4F5C\u8005\uFF08\u7F16\u6392\u8005\u4EE5\u81EA\u8EAB agent \u8EAB\u4EFD\u6D3E\u51FA\u7684\u5168\u65B0\u5B9E\u4F8B\u4E0D\u5171\u4EAB\u7F16\u6392\u8005\u4E0A\u4E0B\u6587\uFF0C\u4E0E\u4F5C\u8005\u8DE8\u6A21\u578B\u5BB6\u65CF\u65F6\u4E0D\u7B97\u300C\u81EA\u5DF1\u300D\uFF0C\u8DE8\u5BB6\u65CF\u4F18\u5148\u975E\u5F3A\u5236\uFF09\u3002\u65E0 review \u4E0D commit\u2014\u2014\u8FD9\u662F\u786C\u95E8\uFF0C\u4E0D\u662F\u5EFA\u8BAE\u3002
|
|
27
|
-
- \u6D3E\u53D1\u8D70 \`startAgentRun(agentKey, task
|
|
21
|
+
- \u6700\u7EC8 review \u4EC5\u5728\u7528\u6237\u660E\u786E\u786E\u8BA4\u51C6\u5907\u63D0\u4EA4/\u5408\u5E76\u65F6\u8FDB\u884C\uFF08\u9664\u975E\u8C03\u7528\u65B9\u660E\u786E\u8BF4\u300C\u53EA\u6539\u4E0D\u5BA1\u300D\u6216\u7528\u6237\u660E\u786E\u8DF3\u8FC7\uFF09\u3002\u9664 \u22642 \u6B65\u96F6\u903B\u8F91\u98CE\u9669\u7684\u673A\u68B0\u6539\u52A8\uFF08\u9519\u522B\u5B57/\u683C\u5F0F/CSS \u5FAE\u8C03\uFF09\u5916\uFF0C\u6240\u6709\u4EE3\u7801\u53D8\u66F4 commit \u524D\u5FC5\u987B\u5148\u6D3E**\u5176\u4ED6 agent**\uFF08\u4E0D\u540C\u6A21\u578B\u5BB6\u65CF\u4F18\u5148\uFF09review \u5DE5\u4F5C\u533A diff\uFF08\`git diff\`\uFF0C\u672A\u63D0\u4EA4\u7684\u6539\u52A8\uFF09\u3002reviewer \u4E0D\u53EF\u662F\u672C\u6B21\u6539\u52A8\u7684\u4F5C\u8005\uFF08\u7F16\u6392\u8005\u4EE5\u81EA\u8EAB agent \u8EAB\u4EFD\u6D3E\u51FA\u7684\u5168\u65B0\u5B9E\u4F8B\u4E0D\u5171\u4EAB\u7F16\u6392\u8005\u4E0A\u4E0B\u6587\uFF0C\u4E0E\u4F5C\u8005\u8DE8\u6A21\u578B\u5BB6\u65CF\u65F6\u4E0D\u7B97\u300C\u81EA\u5DF1\u300D\uFF0C\u8DE8\u5BB6\u65CF\u4F18\u5148\u975E\u5F3A\u5236\uFF09\u3002\u65E0 review \u4E0D commit\u2014\u2014\u8FD9\u662F\u786C\u95E8\uFF0C\u4E0D\u662F\u5EFA\u8BAE\u3002
|
|
22
|
+
- \u6D3E\u53D1\u8D70 \`startAgentRun(agentKey, task)\`\uFF08web/\u684C\u9762\u7AEF\u6CA1\u6709 nolo CLI\uFF0C\u6240\u6709 host \u90FD\u6709\u8FD9\u4E2A\u5DE5\u5177\uFF09\u3002
|
|
28
23
|
- task \u91CC\u5FC5\u987B\u5199\u660E\u5BA1\u67E5\u5BF9\u8C61\uFF08\`git diff\` \u770B\u5DE5\u4F5C\u533A\u6539\u52A8\uFF0C\u6216 \`git diff alpha...HEAD\` \u770B\u5DF2\u63D0\u4EA4\u6539\u52A8\uFF09\uFF0C\u5426\u5219 reviewer \u4E0D\u77E5\u9053\u5BA1\u4EC0\u4E48\u3002
|
|
29
24
|
- \u6309\u89D2\u8272\u52A0\u8F7D\u5BF9\u5E94 skill\uFF1Areviewer \u5148 \`loadSkill("coding-review")\` \u62FF\u901A\u7528\u6D41\u7A0B\uFF0C\u518D\u6309\u89D2\u8272 \`loadSkill("coding-review-<role>")\` \u62FF\u68C0\u67E5\u9879\u3002\u89D2\u8272\u6E05\u5355\uFF1Acode-quality\uFF08**\u5FC5\u8DD1**\uFF09/ architecture\uFF08**\u5355\u72EC\u6D3E\u53D1**\uFF0C\u4E2D\u7EA7\u4EE5\u4E0A\u95EE\u9898\uFF09/ security\uFF08\u6309\u9700 + \u5B89\u5168\u654F\u611F\u89E6\u53D1\u5FC5\u8DD1\uFF09/ frontend-ux\uFF08\u6D89\u53CA UI \u65F6\uFF09/ backend-data\uFF08\u6D89\u53CA server \u65F6\uFF09\u3002\u89D2\u8272\u5207\u5272\u7684\u76EE\u7684\u662F\u6CE8\u610F\u529B\u9694\u79BB\u2014\u2014\u6BCF\u4E2A\u89D2\u8272\u53EA\u76EF\u81EA\u5DF1\u7684\u68C0\u67E5\u9762\uFF0C\u6309\u9700\u542F\u7528\uFF0C\u907F\u514D\u4E00\u4E2A reviewer \u80CC\u6240\u6709\u89D2\u8272\u5BFC\u81F4\u6CE8\u610F\u529B\u7A00\u91CA\u3002
|
|
30
25
|
- Verdict \u6807\u51C6\uFF1AAPPROVE\uFF08\u65E0 CRITICAL \u6216 HIGH\uFF09\u2192 \u53EF commit\uFF1BWARNING\uFF08\u4EC5 HIGH\uFF09\u2192 \u62A5\u544A owner \u51B3\u5B9A\uFF1BBLOCK\uFF08\u6709 CRITICAL\uFF09\u2192 \u5FC5\u987B\u5148\u4FEE\u3002
|
|
31
|
-
- review \
|
|
32
|
-
- **\u63D0\u4EA4\u524D review \u5FAA\u73AF**\uFF1A\u7528\u6237\u660E\u786E\u786E\u8BA4\u51C6\u5907\u63D0\u4EA4\u540E\u8FDB\u5165 review \u5FAA\u73AF\uFF0C\u6D41\u7A0B\uFF1A\u6D3E reviewer \u5BA1\u5DE5\u4F5C\u533A diff \u2192 \u82E5\u51FA finding \u5C31\u4FEE\u590D \u2192 \u590D\u5BA1 \u2192 \u76F4\u5230 APPROVE \u624D\u63D0\u4EA4\u3002\u5B89\u5168\u5BA1\u8BA1\u6216\u7528\u6237\u660E\u786E\u8981\u6C42\u7684\u53EA\u8BFB review \u53EF\u63D0\u524D\u505A\uFF0C\u4F46\u4E0D\u5F97\u963B\u585E\u7528\u6237\u6D4B\u8BD5\u3002\u9664\u975E\u8C03\u7528\u65B9\u660E\u786E\u8BF4\u300C\u53EA\u6539\u4E0D\u5BA1\u300D\u6216\u7528\u6237\u660E\u786E\u8DF3\u8FC7\uFF0C\u5426\u5219\u63D0\u4EA4\u524D\u5FC5\u987B\u8D70\u5B8C\u6574\u5FAA\u73AF\u3002
|
|
26
|
+
- review \u662F\u591A\u8F6E\u6536\u655B\u7684\uFF1A\u6D3E reviewer \u5BA1\u5DE5\u4F5C\u533A diff \u2192 \u51FA finding \u5C31\u4FEE \u2192 \u590D\u5BA1\uFF0C\u76F4\u5230 APPROVE \u624D\u63D0\u4EA4\u3002\u6BCF\u8F6E review \u65E0\u4E0A\u4E0B\u6587\u2014\u2014reviewer \u53EA\u770B\u5F53\u524D\u5DE5\u4F5C\u533A diff\uFF0C\u4E0D\u5E26\u4E0A\u4E00\u8F6E finding \u8BB0\u5FC6\u3002
|
|
33
27
|
- \u82E5\u5904\u4E8E\u5355 Agent \u72EC\u5360\u73AF\u5883\u3001\u5176\u4ED6 agent \u4E0D\u53EF\u8FBE\u3001\u6216\u7528\u6237\u660E\u786E\u8981\u6C42\u76F4\u63A5\u63D0\u4EA4\uFF0C\u5141\u8BB8\u5E26\u539F\u56E0\u8DF3\u8FC7\uFF08commit message \u6CE8\u660E [no-review: \u539F\u56E0]\uFF09\uFF0C\u4F46\u9ED8\u8BA4\u5FC5\u987B\u6D3E review\u3002`;
|
|
34
28
|
var buildCodeWorkDiscipline = (heading) => `# ${heading}
|
|
35
29
|
|
|
@@ -7,7 +7,7 @@ import {
|
|
|
7
7
|
} from "./chunk-RJ2SAFB5.js";
|
|
8
8
|
import {
|
|
9
9
|
getModelContextWindow
|
|
10
|
-
} from "./chunk-
|
|
10
|
+
} from "./chunk-Q6FPSY5O.js";
|
|
11
11
|
import {
|
|
12
12
|
estimateTokenCount
|
|
13
13
|
} from "./chunk-PSCNXBYA.js";
|
|
@@ -18,7 +18,7 @@ import {
|
|
|
18
18
|
PLATFORM_HOSTED_KIMI_K3_MODEL,
|
|
19
19
|
isFireworksKimiModel,
|
|
20
20
|
isNoloHostedProvider
|
|
21
|
-
} from "./chunk-
|
|
21
|
+
} from "./chunk-5YIL5WDC.js";
|
|
22
22
|
import {
|
|
23
23
|
asTrimmedLowercaseString
|
|
24
24
|
} from "./chunk-QSJ3HFEF.js";
|
|
@@ -183,10 +183,10 @@ var MENU_USAGE_INSTRUCTIONS = `--- \u4EA4\u4E92\u8BF4\u660E ---
|
|
|
183
183
|
var AGENT_ORCHESTRATION_RUN_INSTRUCTIONS = `--- \u591A Agent \u7F16\u6392\uFF08\u540E\u53F0 Run\uFF09 ---
|
|
184
184
|
\u7528 startAgentRun \u542F\u52A8\u5B50 Agent\uFF08wait:false \u5F02\u6B65 fork+exec \u8FD4\u56DE runId\uFF1Bwait:true \u540C\u6B65\u7B49\u7ED3\u679C\uFF09\uFF0C\u7528 controlAgentRun \u63A7\u5236/\u8BCA\u65AD\u3002\u4F55\u65F6\u6D3E\u53D1\u89C1\u300C\u591A Agent \u534F\u4F5C\u300D\u6BB5\uFF1B\u672C\u6BB5\u53EA\u8BB2\u6D3E\u53D1\u4E4B\u540E\u7684\u76EF\u68A2\u4E0E\u6392\u9519\u3002
|
|
185
185
|
|
|
186
|
-
1. \u76EF\u68A2\uFF1A**\u5F02\u6B65\u6D3E\u53D1\u540E\u7ACB\u5373\u6536\u5C3E\uFF0C\u7B49\u7EC8\u6001\u901A\u77E5\u3002** \u4E32\u884C\u4F9D\u8D56\u4E0D\u662F\u963B\u585E\u5BF9\u8BDD\u7684\u7406\u7531\
|
|
187
|
-
2. \u7981\u6B62\u8F6E\u8BE2
|
|
186
|
+
1. \u76EF\u68A2\uFF1A**\u5F02\u6B65\u6D3E\u53D1\u540E\u7ACB\u5373\u6536\u5C3E\uFF0C\u7B49\u7EC8\u6001\u901A\u77E5\u3002** \u4E32\u884C\u4F9D\u8D56\u4E0D\u662F\u963B\u585E\u5BF9\u8BDD\u7684\u7406\u7531\u3002\u662F\u5426\u5141\u8BB8\u963B\u585E\u7B49\u5F85\u7531\u5DE5\u5177\u8868\u56DE\u7B54\uFF0C\u4E0D\u7528\u731C\u73AF\u5883\uFF1AcontrolAgentRun \u6709 wait action \u5C31\u7528\u5B83\u963B\u585E\u5230\u7EC8\u6001\uFF08\u4E0D\u8981\u81EA\u5DF1\u5FAA\u73AF wait\u2014\u2014\u90A3\u662F\u4F2A\u88C5\u6210\u7B49\u5F85\u7684\u8F6E\u8BE2\uFF09\uFF1B\u6CA1\u6709\u5C31\u6309\u5DE5\u5177\u63CF\u8FF0\u5904\u7406\uFF0C\u4E0D\u8981\u63A8\u65AD\u4E00\u5B9A\u5B58\u5728 terminal wake\u3002
|
|
187
|
+
2. \u7981\u6B62\u8F6E\u8BE2\u3001\u7981\u7A7A\u8F6C\u3001\u522B\u590D\u8FF0 status\uFF1B\u8BED\u4E49\u4EE5\u5DE5\u5177\u63CF\u8FF0\u4E3A\u51C6\u3002status \u4EC5\u7528\u4E8E\u5F02\u5E38\u8BCA\u65AD\u2014\u2014\u6000\u7591\u5361\u6B7B\u3001failed \u540E\u770B\u8BE6\u60C5/\u65E5\u5FD7\u3001\u7528\u6237\u660E\u786E\u8BE2\u95EE\u6267\u884C\u7EC6\u8282\uFF08tailLines:0 \u53EA\u770B\u6458\u8981\uFF09\uFF1B\u5B83\u4E0D\u662F stop \u524D\u7684 preflight\u3002\u5E76\u884C\uFF1A\u65E0\u6587\u4EF6\u4EA4\u96C6\u3001\u65E0\u771F\u5B9E\u6570\u636E\u4F9D\u8D56\u7684\u72EC\u7ACB\u5B50\u4EFB\u52A1\u9ED8\u8BA4\u5E76\u53D1\u6D3E\u53D1\uFF1B\u4E0D\u8981\u56E0\u5171\u7528\u540C\u4E00\u6267\u884C agent/\u901A\u9053\u800C\u81EA\u884C\u52A0\u300C\u901A\u9053\u4E32\u884C\u300D\u4FDD\u5B88\u5047\u8BBE\uFF08\u540C\u901A\u9053\u5141\u8BB8\u5E76\u53D1 fork\uFF0C\u5B9E\u4F8B\u95F4\u65E0\u4E0A\u4E0B\u6587\u5171\u4EAB\uFF09\uFF0C\u53EA\u6709\u771F\u5B9E\u6587\u4EF6/\u6570\u636E\u4F9D\u8D56\u6216 brief \u660E\u793A\u51B2\u7A81\u9762\u65F6\u624D\u4E32\u884C\u3002
|
|
188
188
|
3. \u6392\u9519\u5148\u5206\u8BCA\uFF1AagentKey \u6CA1\u7167\u6284 listAgents \u5C31\u5148\u4FEE key\uFF08\u4E0D\u7B97\u901A\u9053\u6545\u969C\uFF09\uFF1B\u62A5\u9519\u542B not found / invalid ref / Local agent config not found \u2192 \u5148 readAgent \u590D\u6838\uFF0C**\u7981\u6B62**\u636E\u6B64\u63A8\u65AD\u51ED\u8BC1\u7F3A\u5931\u6216\u901A\u9053\u5168\u6302\uFF1B\u540C\u4E00\u5DF2\u9A8C\u8BC1 key \u4ECD\u5931\u8D25\u4E14\u9519\u8BEF\u660E\u786E\u6307\u5411\u901A\u9053\uFF08429\u3001\u9274\u6743\u5931\u8D25\u3001machine offline\uFF09\u624D\u8BB0\u4E3A\u901A\u9053\u6545\u969C\u3002\u5224\u5B9A\u300C\u6D3E\u53D1\u901A\u9053\u6574\u4F53\u4E0D\u53EF\u7528\u300D\u9700 \u22652 \u4E2A\u4E0D\u540C\u5019\u9009\u5404\u81EA\u5B8C\u6210\u300C\u5DF2\u9A8C\u8BC1 key + \u4E00\u6B21\u771F\u5B9E\u6D3E\u53D1\u300D\u4E14\u5931\u8D25\uFF0C\u5019\u9009\u4E0D\u8DB3\u5C31\u5982\u5B9E\u62A5\u544A\u300C\u4EC5\u6B64\u5019\u9009\u4E14\u901A\u9053\u5931\u8D25\u300D\uFF0C\u4E0D\u5F97\u5938\u5927\u6210\u5168\u5E93\u4E0D\u53EF\u7528\u3002
|
|
189
|
-
4. \u53EA\u6709 status=failed/\u8D85\u65F6\u6216 progress \u957F\u65F6\u95F4\u65E0\u52A8\u9759\uFF08\u7591\u4F3C\u5361\u6B7B\uFF09\u624D\u62C9 tailLines:30 \u770B\u65E5\u5FD7\u3002append \u53EF\u76F4\u63A5\u8C03\u7528\u2014\u2014not found/\u5DF2\u7EC8\u6001/\u8FD0\u884C\u4E2D\u5165\u961F\u7531 executor \u81EA\u8BC1\uFF1Bstop \u53EF\u76F4\u63A5\u8C03\u7528\uFF0Cnot found/\u5DF2\u7EC8\u6001/\u8FD0\u884C\u4E2D\u7531\u63A7\u5236\u5E73\u9762\u81EA\u884C\u5904\u7406\uFF08\u5DF2\u7EC8\u6001\u539F\u6837\u8FD4\u56DE\u3001\u4E0D\u4F1A\u88AB\u8986\u76D6\uFF09\
|
|
189
|
+
4. \u53EA\u6709 status=failed/\u8D85\u65F6\u6216 progress \u957F\u65F6\u95F4\u65E0\u52A8\u9759\uFF08\u7591\u4F3C\u5361\u6B7B\uFF09\u624D\u62C9 tailLines:30 \u770B\u65E5\u5FD7\u3002append \u53EF\u76F4\u63A5\u8C03\u7528\u2014\u2014not found/\u5DF2\u7EC8\u6001/\u8FD0\u884C\u4E2D\u5165\u961F\u7531 executor \u81EA\u8BC1\uFF1Bstop \u53EF\u76F4\u63A5\u8C03\u7528\uFF0Cnot found/\u5DF2\u7EC8\u6001/\u8FD0\u884C\u4E2D\u7531\u63A7\u5236\u5E73\u9762\u81EA\u884C\u5904\u7406\uFF08\u5DF2\u7EC8\u6001\u539F\u6837\u8FD4\u56DE\u3001\u4E0D\u4F1A\u88AB\u8986\u76D6\uFF09\u3002`;
|
|
190
190
|
var AGENT_COLLABORATION_INSTRUCTIONS = `--- Agent \u7F16\u6392\u4E0E\u534F\u4F5C\uFF08\u591A Agent \u534F\u4F5C\uFF1A\u8BA1\u5212 \u2192 \u6309\u9700\u6D3E\u53D1 \u2192 \u5BA1\u67E5\uFF09 ---
|
|
191
191
|
\u4EA7\u51FA\u4F18\u5148\uFF1A\u4E0D\u4E3A\u300C\u51D1\u6570\u91CF\u300D\u6D3E\u53D1\uFF0C\u4E5F\u4E0D\u5305\u529E\u53EF\u5E76\u884C\u7684\u72EC\u7ACB\u9886\u57DF\uFF1B\u6BCF\u8F6E\u63A8\u8FDB\u5F53\u524D\u6700\u6709\u4EF7\u503C\u7684\u52A8\u4F5C\uFF0C\u62FF\u8BC1\u636E\u518D\u5224\u65AD\u3002
|
|
192
192
|
|
|
@@ -202,9 +202,10 @@ var AGENT_COLLABORATION_INSTRUCTIONS = `--- Agent \u7F16\u6392\u4E0E\u534F\u4F5C
|
|
|
202
202
|
|
|
203
203
|
**\u5206\u6863\u6807\u51C6\uFF08\u4E24\u8D26\u5224\u636E\uFF1A\u4E0A\u4E0B\u6587\u8D26 / \u5E76\u884C\u8D26\uFF1B\u6A21\u578B\u6210\u672C\u4E0D\u6784\u6210\u6D3E\u53D1\u7406\u7531\uFF09**\uFF1A
|
|
204
204
|
- **\u81EA\u5DF1\u505A**\uFF1A\u7EAF\u95EE\u7B54/\u54A8\u8BE2/\u95F2\u804A\u76F4\u63A5\u56DE\u7B54\uFF1B\u4E24\u8D26\u5747\u4E0D\u547D\u4E2D\u7684\u4E2D\u5C0F\u5B9E\u73B0\uFF08\u5178\u578B \u22643 \u4E2A\u6587\u4EF6\u30011~2 \u6B21\u9A8C\u8BC1\u5F80\u8FD4\u3001\u65E0\u5927\u8F93\u51FA\u3001\u65E0 \u22652 \u4E2A\u72EC\u7ACB\u9886\u57DF\uFF09\u76F4\u63A5\u5B8C\u6210\uFF0C\u4E0D\u58F0\u660E\u3001\u4E0D\u6D3E\u53D1\u3002
|
|
205
|
-
- **\u4E0A\u4E0B\u6587\u8D26\u547D\u4E2D \u2192 \u6D3E\u53D1**\uFF1A\u9A8C\u8BC1\u5FAA\u73AF \u22653 \u6B21\u300C\u8DD1\u547D\u4EE4\u2192\u770B\u62A5\u9519\u2192\u6539\u300D\uFF0C\u6216\u5355\u6B65\u5927\u8F93\u51FA\uFF08\u5168\u91CF typecheck \u62A5\u9519\u3001\u957F\u6D4B\u8BD5\u6808\u3001\u5927 diff\u3001\u5927\u6587\u4EF6\u8BFB\u53D6\uFF09\u2014\u2014\
|
|
205
|
+
- **\u4E0A\u4E0B\u6587\u8D26\u547D\u4E2D \u2192 \u6D3E\u53D1**\uFF1A\u9A8C\u8BC1\u5FAA\u73AF \u22653 \u6B21\u300C\u8DD1\u547D\u4EE4\u2192\u770B\u62A5\u9519\u2192\u6539\u300D\uFF0C\u6216\u5355\u6B65\u5927\u8F93\u51FA\uFF08\u5168\u91CF typecheck \u62A5\u9519\u3001\u957F\u6D4B\u8BD5\u6808\u3001\u5927 diff\u3001\u5927\u6587\u4EF6\u8BFB\u53D6\uFF09\u2014\u2014\u91CD\u590D\u9A8C\u8BC1\u5FAA\u73AF\u3001\u5927\u8F93\u51FA\u5904\u7406\u4E0E\u673A\u68B0 inventory/\u8BC1\u636E\u5B9A\u4F4D\u4EA4\u7ED9\u5B50 Agent\uFF1B\u7236 Agent \u63A5\u6536\u7ED3\u6784\u5316\u8BC1\u636E\uFF0C\u5E76\u4EB2\u81EA\u590D\u6838\u6240\u6709\u5F71\u54CD\u5173\u952E\u51B3\u7B56\u7684\u539F\u59CB\u8BC1\u636E\u3002
|
|
206
|
+
- **\u5173\u952E\u51B3\u7B56\u4E0A\u4E0B\u6587\u4E0D\u5916\u5305**\uFF1A\u4E0A\u4E0B\u6587\u8D26\u53EA\u51B3\u5B9A\u91CD\u590D\u9A8C\u8BC1\u5FAA\u73AF\u3001\u5927\u8F93\u51FA\u5904\u7406\u3001\u673A\u68B0 inventory/\u8BC1\u636E\u5B9A\u4F4D\u7684\u6D3E\u53D1\uFF1B\u6D89\u53CA\u67B6\u6784\u3001\u8BA1\u8D39\u3001\u5B89\u5168\u3001\u6743\u9650\u3001\u6570\u636E\u5B8C\u6574\u6027\u3001\u4E0D\u53EF\u9006\u8FC1\u79FB\u3001\u957F\u671F\u4EA7\u54C1\u8BED\u4E49\u65F6\uFF0C\u7F16\u6392\u8005\u5FC5\u987B\u4EB2\u81EA\u8BFB\u53D6\u8DB3\u4EE5\u51B3\u7B56\u7684\u4E00\u7EA7\u4EE3\u7801\u3001\u6B63\u5F0F\u771F\u503C\u3001\u539F\u59CB\u65E5\u5FD7\u548C\u771F\u5B9E\u6570\u636E\u8BC1\u636E\uFF1B\u5B50 Agent \u53EF\u505A\u5B9A\u4F4D\u3001\u673A\u68B0\u6536\u96C6\u3001\u72EC\u7ACB\u590D\u6838\u4E0E\u53CD\u65B9\u5BA1\u67E5\uFF0C\u4F46\u5176\u6458\u8981\u4E0D\u80FD\u66FF\u4EE3\u5173\u952E\u4E0A\u4E0B\u6587\u4EB2\u8BFB\u3002
|
|
206
207
|
- **\u5E76\u884C\u8D26\u547D\u4E2D \u2192 \u6D3E\u53D1**\uFF1A\u22652 \u4E2A\u4E92\u4E0D\u4F9D\u8D56\u7684\u72EC\u7ACB\u9886\u57DF\uFF0C\u6216\u4ED3\u5E93\u6539\u52A8\uFF0B\u9A8C\u8BC1\uFF0B\u53D1\u5E03/\u8FC1\u79FB\u957F\u94FE\u8DEF \u2192 \u6309\u9886\u57DF\u5E76\u53D1\u6D3E\u53D1\u3002
|
|
207
|
-
- \
|
|
208
|
+
- \u5B9E\u73B0\u6F14\u53D8\u4E3A\u591A\u8F6E\u9A8C\u8BC1\u5FAA\u73AF\u65F6\u7ACB\u5373\u6B62\u635F\u8F6C\u6D3E\u53D1\u3002\u7528\u6237\u660E\u786E\u8981\u6C42\u4F60\u4EB2\u81EA\u5B8C\u6210\u65F6\u6309\u7528\u6237\u8981\u6C42\u6267\u884C\uFF1B\u4EC5\u5F53\u6240\u6709\u5DF2\u9A8C\u8BC1\u6D3E\u53D1\u901A\u9053\u5747\u4E0D\u53EF\u7528\uFF08\u987B\u6709\u5F53\u6B21\u9519\u8BEF\u8BC1\u636E\uFF09\u624D\u964D\u7EA7\u81EA\u505A\u5E76\u8BF4\u660E\u3002
|
|
208
209
|
|
|
209
210
|
**\u4EFB\u52A1\u5206\u578B\u4E0E\u6536\u5DE5\u9884\u7B97\uFF08tool \u8C03\u7528\u5373\u6210\u672C\uFF0C\u9884\u7B97\u5148\u4E8E\u52E4\u594B\uFF09**\uFF1A
|
|
210
211
|
- **\u63A2\u7D22/spike \u578B**\uFF08\u8DEF\u5F84\u6216\u62A5\u9519\u672A\u77E5\u3001\u9A8C\u8BC1\u5916\u90E8\u5047\u8BBE\uFF09\uFF1Abrief \u5FC5\u987B\u5199\u5DE5\u5177\u8C03\u7528\u6216\u65F6\u95F4\u9884\u7B97\uFF08\u5982 \u2264150 \u6B21\u8C03\u7528 / \u226420 \u5206\u949F\uFF09\uFF0C\u5230\u8FBE\u9884\u7B97\u7ACB\u5373\u6536\u5DE5\uFF0C\u8F93\u51FA\u300C\u5DF2\u9A8C\u8BC1\u4E8B\u5B9E / \u5361\u70B9 / \u4E0B\u4E00\u6B65\u5EFA\u8BAE\u300D\u4E2D\u95F4\u62A5\u544A\u3002DoD \u662F\u7ED3\u8BBA\u800C\u975E\u8DD1\u901A\uFF1B\u7F16\u6392\u8005\u51ED\u62A5\u544A\u51B3\u5B9A\u7EED\u8DD1\u3001\u8F6C\u5411\u8FD8\u662F\u653E\u5F03\uFF0C\u7981\u6B62\u5355 run \u65E0\u9650\u8FED\u4EE3\u5230\u8DD1\u901A\u3002
|
|
@@ -231,12 +232,12 @@ ${AGENT_SELECTION_PRIORITY_INSTRUCTIONS}
|
|
|
231
232
|
|
|
232
233
|
**commit \u524D\u786C\u95E8\uFF08\u9636\u6BB5\u5212\u5206\u4E0E\u72EC\u7ACB\u5BA1\u67E5\uFF09**\uFF1A
|
|
233
234
|
- **\u9636\u6BB5\u533A\u5206**\uFF1A\u4E25\u683C\u533A\u5206\u300C\u5B9E\u73B0/\u6784\u5EFA/\u5B89\u88C5/\u7528\u6237\u6D4B\u8BD5/\u6839\u636E\u53CD\u9988\u8FED\u4EE3\u300D\u4E0E\u300C\u51C6\u5907\u63D0\u4EA4/\u5408\u5E76\u300D\u9636\u6BB5\u3002UI/\u524D\u7AEF\u7B49\u9700\u7528\u6237\u9A8C\u6536\u7684\u529F\u80FD\u5728\u5B9E\u73B0\u9636\u6BB5**\u4E0D\u5F97\u89E6\u53D1\u6216\u7B49\u5F85\u6700\u7EC8\u72EC\u7ACB review**\uFF0C\u5148\u4EA4\u4ED8\u53EF\u6D4B\u8BD5\u4EA7\u7269\uFF0C\u7B49\u5F85\u7528\u6237\u6D4B\u8BD5\u4E0E\u53CD\u9988\uFF1B\u5B89\u5168\u5173\u952E\u53D8\u66F4\u7684\u5FC5\u8981\u5BA1\u67E5\u4E0D\u53D7\u5F71\u54CD\uFF1B\u72EC\u7ACB\u7684\u53EA\u8BFB\u5BA1\u8BA1\u6216\u7528\u6237\u660E\u786E\u8981\u6C42\u7684\u63D0\u524D review \u53EF\u63D0\u524D\u8FDB\u884C\uFF0C\u4F46\u4E0D\u5F97\u963B\u585E\u7528\u6237\u6D4B\u8BD5\u6216\u4F5C\u4E3A\u63D0\u524D\u7684\u63D0\u4EA4\u95E8\u3002
|
|
234
|
-
- **\u6700\u7EC8\u5BA1\u67E5\u65F6\u673A**\uFF1A\u53EA\u6709\u5F53\u7528\u6237\u660E\u786E\u786E\u8BA4\u51C6\u5907\u63D0\u4EA4/\u5408\u5E76\u65F6\uFF0C\u624D\u6D3E\u53D1\u6700\u7EC8 review\u3002\u9664 \u22642 \u6B65\u96F6\u903B\u8F91\u98CE\u9669\u7684\u673A\u68B0\u6539\u52A8\u5916\uFF0C\u6240\u6709\u4EE3\u7801\u53D8\u66F4 commit \u524D\u5FC5\u987B\u5148\u6D3E\u4E0E\u6267\u884C\u8005\u4E0D\u540C\u5B9E\u4F8B\uFF08\u4E0A\u4E0B\u6587\u9694\u79BB\u5373\u53EF\uFF09\u7684 reviewer \u5BA1\u5DE5\u4F5C\u533A diff\uFF0Creviewer \u4E0D\u53EF\u662F\u672C\u6B21\u6539\u52A8\u7684\u4F5C\u8005\uFF1B\u65E0 review \u4E0D commit\u3002\u63D0\u4EA4\u524D review \u5FAA\u73AF\uFF1A\u7528\u6237\u786E\u8BA4\u51C6\u5907\u63D0\u4EA4 \u2192 startAgentRun
|
|
235
|
+
- **\u6700\u7EC8\u5BA1\u67E5\u65F6\u673A**\uFF1A\u53EA\u6709\u5F53\u7528\u6237\u660E\u786E\u786E\u8BA4\u51C6\u5907\u63D0\u4EA4/\u5408\u5E76\u65F6\uFF0C\u624D\u6D3E\u53D1\u6700\u7EC8 review\u3002\u9664 \u22642 \u6B65\u96F6\u903B\u8F91\u98CE\u9669\u7684\u673A\u68B0\u6539\u52A8\u5916\uFF0C\u6240\u6709\u4EE3\u7801\u53D8\u66F4 commit \u524D\u5FC5\u987B\u5148\u6D3E\u4E0E\u6267\u884C\u8005\u4E0D\u540C\u5B9E\u4F8B\uFF08\u4E0A\u4E0B\u6587\u9694\u79BB\u5373\u53EF\uFF09\u7684 reviewer \u5BA1\u5DE5\u4F5C\u533A diff\uFF0Creviewer \u4E0D\u53EF\u662F\u672C\u6B21\u6539\u52A8\u7684\u4F5C\u8005\uFF1B\u65E0 review \u4E0D commit\u3002\u63D0\u4EA4\u524D review \u5FAA\u73AF\uFF1A\u7528\u6237\u786E\u8BA4\u51C6\u5907\u63D0\u4EA4 \u2192 startAgentRun \u6D3E reviewer \u5BA1 diff \u2192 \u4FEE finding \u2192 \u590D\u5BA1\u76F4\u5230 APPROVE\uFF08\u65E0 CRITICAL/HIGH\uFF09\u624D\u63D0\u4EA4\uFF1BBLOCK \u5FC5\u4FEE\u3001WARNING \u62A5\u7528\u6237\u3002
|
|
235
236
|
- **review \u8BC1\u636E\u786C\u95E8**\uFF1A\u4EC5\u5F53 reviewer \u8FD4\u56DE\u53EF\u8BFB\u7684\u6700\u7EC8\u6587\u672C\u4E14\u660E\u786E\u542B APPROVE\u3001\u65E0 CRITICAL/HIGH \u624D\u7B97\u901A\u8FC7\uFF1Bdone\u3001exit 0\u3001\u7A7A dialog\u3001messagesCount=0\u3001agentReply=null\u3001\u8D85\u65F6\u5747\u89C6\u4E3A\u672A\u5BA1\u67E5\uFF0C\u4E25\u7981\u63D0\u4EA4\u3002review context contract\uFF1A\u6D3E reviewer \u524D\u6309\u6539\u52A8\u8303\u56F4\u52A0\u8F7D\u8BE5\u4ED3\u5E93\u7684\u9879\u76EE\u6307\u4EE4\uFF08AGENTS.md \u7C7B\uFF09\u3001\u5DE5\u4F5C\u6D41/\u8BA1\u5212\u6587\u6863\u3001\u547D\u4E2D\u7684 skill \u4E0E references\uFF0C\u4EE5\u53CA touched files \u7684\u5B8C\u6574 diff\uFF0Cbrief \u91CC\u5217\u51FA\u5B9E\u9645\u52A0\u8F7D\u7684 context\uFF1B\u5177\u4F53\u6E05\u5355\u4EE5\u8BE5\u4ED3\u5E93\u81EA\u5DF1\u7684 review \u89C4\u8303\u4E3A\u51C6\uFF08bun-nolo \u89C1 nolo-plan\u300C\u5408\u5E76\u95E8\u300D\u8282\uFF09\u3002\u5BA1\u67E5\u6E05\u5355\uFF1A\u53EF\u8BFB\u6027/\u53EF\u641C\u7D22\u6027\u3001\u53EF\u7EF4\u62A4\u6027/\u5220\u9664\u6210\u672C\u3001\u53EF\u7EC4\u5408\u6027/\u590D\u7528\u3001\u91CD\u590D\u5B9E\u73B0\u3001\u53EF\u5220\u9664\u4EE3\u7801\u3002\u82E5\u5904\u4E8E\u5355 Agent \u72EC\u5360\u73AF\u5883\u3001\u5176\u4ED6 agent \u4E0D\u53EF\u8FBE\u6216\u7528\u6237\u660E\u786E\u8981\u6C42\u76F4\u63A5\u63D0\u4EA4\uFF0C\u5141\u8BB8\u5E26\u539F\u56E0\u8DF3\u8FC7\uFF08commit \u6CE8\u660E [no-review: \u539F\u56E0]\uFF09\u3002\u6D89\u53CA\u4ED3\u5E93\u6587\u4EF6\u5199\u5165\u5FC5\u987B\u7528\u72EC\u7ACB worktree\u3002\u4ED3\u5E93\u7EA7 plan / review / worktree \u7EAA\u5F8B\u4EE5 AGENTS.md \u4E3A\u51C6\u3002
|
|
236
237
|
|
|
237
238
|
--- \u786E\u8BA4\u8FB9\u754C ---
|
|
238
239
|
- \u6D89\u53CA\u4E0D\u53EF\u9006\u64CD\u4F5C\uFF08\u4FEE\u6539\u6587\u4EF6\u3001\u5220\u9664\u6570\u636E\u3001\u53D1\u9001\u6D88\u606F\u3001\u751F\u6210\u6B63\u5F0F\u6587\u4EF6\u3001\u6267\u884C\u4EA4\u6613\uFF09\u6216\u9AD8\u6210\u672C\u52A8\u4F5C\uFF08\u5927\u89C4\u6A21\u91CD\u6784/\u957F\u65F6\u8FD0\u884C/\u5927\u91CF token\uFF09\u65F6\uFF0C\u4F18\u5148\u9884\u89C8\u6216\u5411\u7528\u6237\u786E\u8BA4\uFF1B\u5DE5\u5177\u8FD4\u56DE"\u9884\u89C8/\u5F85\u786E\u8BA4"\u65F6\u6682\u505C\uFF0C\u7B49\u660E\u786E\u786E\u8BA4\u518D\u7EE7\u7EED\uFF0C\u672A\u786E\u8BA4\u524D\u4E0D\u8FDE\u7EED\u53D1\u591A\u6B21\u7834\u574F\u6027\u4FEE\u6539\u3002
|
|
239
|
-
- \
|
|
240
|
+
- \u6536\u5230\u300C\u5B50\u5BF9\u8BDD\u7981\u6B62\u518D\u521B\u5EFA\u5B59\u5BF9\u8BDD\u300D\uFF1D\u4F60\u5DF2\u662F\u5B50\u5BF9\u8BDD\uFF0C\u7981\u6B62\u518D\u6D3E\u53D1\uFF0C\u628A\u7ED3\u679C\u8FD4\u56DE\u7236\u5BF9\u8BDD\u5373\u53EF\u3002`;
|
|
240
241
|
var WEBPAGE_ACCESS_INSTRUCTIONS = `--- \u7F51\u9875\u8BBF\u95EE\u80FD\u529B (Web Access) ---
|
|
241
242
|
\u83B7\u53D6\u5916\u90E8\u4FE1\u606F\u7531\u7B80\u5165\u7E41\uFF1A
|
|
242
243
|
0. \u7528\u6237\u5DF2\u7ED9\u660E\u786E URL \u2192 \u5148\u76F4\u63A5 fetch \u8FD9\u4E9B URL\uFF0C\u4E0D\u8981\u5148\u641C\u7D22\u6216\u731C\u5907\u7528\u7F51\u5740\uFF08\u6700\u9AD8\u4F18\u5148\u7EA7\u7684\u7F51\u9875\u771F\u503C\uFF09\uFF1B\u4EC5\u5F53\u6293\u53D6\u5931\u8D25\u3001\u7F3A\u5B57\u6BB5\u6216\u5185\u5BB9\u4E0D\u5339\u914D\u624D\u989D\u5916\u641C\u7D22\uFF0C\u5E76\u8BF4\u660E\u964D\u7EA7\u539F\u56E0\u3002
|
|
@@ -27,7 +27,7 @@ import {
|
|
|
27
27
|
resolveLocalUserId,
|
|
28
28
|
t,
|
|
29
29
|
toolLabel
|
|
30
|
-
} from "./chunk-
|
|
30
|
+
} from "./chunk-2WB3CWWX.js";
|
|
31
31
|
import {
|
|
32
32
|
createRunActivityTracker,
|
|
33
33
|
popSingleQueueMessage,
|
|
@@ -35,7 +35,7 @@ import {
|
|
|
35
35
|
resolveRunQueuePath,
|
|
36
36
|
settleRunTerminalAuthoritatively,
|
|
37
37
|
spawnLocalBackgroundRun
|
|
38
|
-
} from "./chunk-
|
|
38
|
+
} from "./chunk-HH65VA5U.js";
|
|
39
39
|
import {
|
|
40
40
|
readCredentialEntry,
|
|
41
41
|
recordCredentialProbe,
|
|
@@ -63,7 +63,7 @@ import {
|
|
|
63
63
|
} from "./chunk-LTRXGFMS.js";
|
|
64
64
|
import {
|
|
65
65
|
formatAgentListCard
|
|
66
|
-
} from "./chunk-
|
|
66
|
+
} from "./chunk-WF4MZQFZ.js";
|
|
67
67
|
import {
|
|
68
68
|
isTransientFetchError
|
|
69
69
|
} from "./chunk-5XTOKQLW.js";
|
|
@@ -84,12 +84,12 @@ import {
|
|
|
84
84
|
chooseMemoryOwners,
|
|
85
85
|
loadMemoryCandidatesFromDb,
|
|
86
86
|
resolveAgentMemoryPolicy
|
|
87
|
-
} from "./chunk-
|
|
87
|
+
} from "./chunk-NPZQNQFD.js";
|
|
88
88
|
import {
|
|
89
89
|
API_REPORTED_COST_MULTIPLIER,
|
|
90
90
|
normalizeUsage,
|
|
91
91
|
parseUiAskChoiceContent
|
|
92
|
-
} from "./chunk-
|
|
92
|
+
} from "./chunk-JMVS6OB2.js";
|
|
93
93
|
import {
|
|
94
94
|
isOAuthApiKeyRef
|
|
95
95
|
} from "./chunk-YYLHWIW6.js";
|
|
@@ -112,10 +112,10 @@ import {
|
|
|
112
112
|
LOCAL_AGENT_CONFIG_MISSING_CODE,
|
|
113
113
|
LOCAL_TURN_ABORTED_CODE,
|
|
114
114
|
readActionGate
|
|
115
|
-
} from "./chunk-
|
|
115
|
+
} from "./chunk-4TNFXQTF.js";
|
|
116
116
|
import {
|
|
117
117
|
resolveAgentRuntimeConfigFromRecord
|
|
118
|
-
} from "./chunk-
|
|
118
|
+
} from "./chunk-Y7PULBIA.js";
|
|
119
119
|
import {
|
|
120
120
|
createThinkParserState,
|
|
121
121
|
flushThinkParser,
|
|
@@ -123,10 +123,10 @@ import {
|
|
|
123
123
|
} from "./chunk-N7J63Q6C.js";
|
|
124
124
|
import {
|
|
125
125
|
isAntigravityOAuthAgent
|
|
126
|
-
} from "./chunk-
|
|
126
|
+
} from "./chunk-ZW22L5ES.js";
|
|
127
127
|
import {
|
|
128
128
|
resolveClientVersion
|
|
129
|
-
} from "./chunk-
|
|
129
|
+
} from "./chunk-VLQRD7ZJ.js";
|
|
130
130
|
import {
|
|
131
131
|
isQuotaExhaustedError,
|
|
132
132
|
isQuotaLimited403Body,
|
|
@@ -136,13 +136,13 @@ import {
|
|
|
136
136
|
import {
|
|
137
137
|
DEFAULT_CONTEXT_WINDOW,
|
|
138
138
|
getModelContextWindow
|
|
139
|
-
} from "./chunk-
|
|
139
|
+
} from "./chunk-Q6FPSY5O.js";
|
|
140
140
|
import {
|
|
141
141
|
clipCompactText
|
|
142
142
|
} from "./chunk-Z4QSJILV.js";
|
|
143
143
|
import {
|
|
144
144
|
findModelConfig
|
|
145
|
-
} from "./chunk-
|
|
145
|
+
} from "./chunk-TQC77XVE.js";
|
|
146
146
|
import {
|
|
147
147
|
compactWhitespace
|
|
148
148
|
} from "./chunk-DWLEOOGR.js";
|
|
@@ -167,7 +167,7 @@ import {
|
|
|
167
167
|
CLIENT_VERSION_TOO_OLD_CODE,
|
|
168
168
|
NOLO_CLIENT_VERSION_HEADER,
|
|
169
169
|
buildClientVersionUpgradeMessage
|
|
170
|
-
} from "./chunk-
|
|
170
|
+
} from "./chunk-5YIL5WDC.js";
|
|
171
171
|
import {
|
|
172
172
|
parsePositiveFiniteNumberOrFallback
|
|
173
173
|
} from "./chunk-Y5GCAMGP.js";
|
|
@@ -5176,7 +5176,7 @@ function findCollapsedPasteSpanAt(buffer, pos, opts = {}) {
|
|
|
5176
5176
|
// packages/cli/client/agentRun.ts
|
|
5177
5177
|
import { ulid } from "ulid";
|
|
5178
5178
|
async function loadRunLocalAgentTurn() {
|
|
5179
|
-
const { runLocalAgentTurn } = await import("./agentRuntimeLocal-
|
|
5179
|
+
const { runLocalAgentTurn } = await import("./agentRuntimeLocal-5ENMNOG5.js");
|
|
5180
5180
|
return runLocalAgentTurn;
|
|
5181
5181
|
}
|
|
5182
5182
|
var stripDebugNoise = (s) => s.replace(/\s*raw="[\s\S]*"/g, "").replace(/\s*raw=\S+/g, "").replace(/\s*headers=\[[^\]]*\]/g, "").replace(/\s*headers=\S+/g, "").trim();
|
|
@@ -7090,11 +7090,21 @@ async function runAgentRunCommand(args, deps) {
|
|
|
7090
7090
|
} catch {
|
|
7091
7091
|
}
|
|
7092
7092
|
};
|
|
7093
|
-
const finalizeWatchdogOutcome = async (outcome, note) => {
|
|
7093
|
+
const finalizeWatchdogOutcome = async (outcome, note, extra) => {
|
|
7094
7094
|
if (!hasRegistry) return;
|
|
7095
|
+
const currentActivity = activityTracker?.getActivity();
|
|
7096
|
+
const rawToolCount = extra?.toolCallCount ?? currentActivity?.counters?.toolCalls;
|
|
7097
|
+
const toolCallCount = typeof rawToolCount === "number" && rawToolCount > 0 ? rawToolCount : void 0;
|
|
7095
7098
|
await settleRunTerminalAuthoritatively(
|
|
7096
7099
|
childRunId,
|
|
7097
|
-
{
|
|
7100
|
+
{
|
|
7101
|
+
status: outcome.status,
|
|
7102
|
+
exitCode: outcome.exitCode,
|
|
7103
|
+
note,
|
|
7104
|
+
...extra?.failureReason ? { failureReason: extra.failureReason } : {},
|
|
7105
|
+
...toolCallCount !== void 0 ? { toolCallCount } : {},
|
|
7106
|
+
...extra?.lastAssistantText ? { lastAssistantText: extra.lastAssistantText } : {}
|
|
7107
|
+
},
|
|
7098
7108
|
{ env, homedir: deps.homedir, fs: deps.fs, now: deps.now, sleep: deps.sleep },
|
|
7099
7109
|
// Test seam: stubbed transitions keep their single-attempt semantics.
|
|
7100
7110
|
deps.transitionRunToTerminal
|
|
@@ -7119,7 +7129,11 @@ async function runAgentRunCommand(args, deps) {
|
|
|
7119
7129
|
output.write(`[nolo] local run ${note}
|
|
7120
7130
|
`);
|
|
7121
7131
|
const outcome = resolveRunOutcome({ kind: "stall" });
|
|
7122
|
-
|
|
7132
|
+
const currentActivity = activityTracker?.getActivity();
|
|
7133
|
+
await finalizeWatchdogOutcome(outcome, note, {
|
|
7134
|
+
failureReason: "stalled",
|
|
7135
|
+
toolCallCount: currentActivity?.counters?.toolCalls
|
|
7136
|
+
});
|
|
7123
7137
|
rejectOnWatchdogFailure?.(new Error(`[nolo] local run ${note}`));
|
|
7124
7138
|
exitFromWatchdog(outcome.exitCode);
|
|
7125
7139
|
}
|
|
@@ -7509,6 +7523,27 @@ async function runAgentRunCommand(args, deps) {
|
|
|
7509
7523
|
} catch (dodError) {
|
|
7510
7524
|
console.warn(`[nolo] DoD verification failed to run for ${childRunId}:`, dodError);
|
|
7511
7525
|
}
|
|
7526
|
+
let failureReason;
|
|
7527
|
+
let toolCallCount;
|
|
7528
|
+
if (outcome.status === "failed") {
|
|
7529
|
+
if (result.emptyAssistantFallbackReason === "repetition_loop" || result.emptyAssistantFallbackReason === "stagnant_tool_calls") {
|
|
7530
|
+
failureReason = "stalled";
|
|
7531
|
+
} else if (result.localError && isQuotaExhaustedError(result.localError)) {
|
|
7532
|
+
failureReason = "provider_rate_limited";
|
|
7533
|
+
} else if (result.localError) {
|
|
7534
|
+
const errMsg = toErrorMessage(result.localError).toLowerCase();
|
|
7535
|
+
if (errMsg.includes("config_unresolved") || errMsg.includes("unresolved config")) {
|
|
7536
|
+
failureReason = "config_unresolved";
|
|
7537
|
+
} else {
|
|
7538
|
+
failureReason = "provider_error";
|
|
7539
|
+
}
|
|
7540
|
+
}
|
|
7541
|
+
const currentActivity = activityTracker?.getActivity();
|
|
7542
|
+
const rawToolCount = currentActivity?.counters?.toolCalls ?? childRecordForDoD?.activity?.counters?.toolCalls;
|
|
7543
|
+
if (typeof rawToolCount === "number" && rawToolCount > 0) {
|
|
7544
|
+
toolCallCount = rawToolCount;
|
|
7545
|
+
}
|
|
7546
|
+
}
|
|
7512
7547
|
await settleRunTerminalAuthoritatively(
|
|
7513
7548
|
childRunId,
|
|
7514
7549
|
{
|
|
@@ -7519,6 +7554,8 @@ async function runAgentRunCommand(args, deps) {
|
|
|
7519
7554
|
// run 级累计的平台积分(主轮 + fallback + drain 轮):dock 行据此显示
|
|
7520
7555
|
// 「⚡ x.xx」,让派发任务的消耗可见。undefined = 全程无平台计费。
|
|
7521
7556
|
...runCreditsTotal !== void 0 ? { credits: runCreditsTotal } : {},
|
|
7557
|
+
...failureReason ? { failureReason } : {},
|
|
7558
|
+
...toolCallCount !== void 0 ? { toolCallCount } : {},
|
|
7522
7559
|
...truncationNote
|
|
7523
7560
|
},
|
|
7524
7561
|
{
|
|
@@ -908,6 +908,27 @@ function transitionRunToTerminal(runId, update, deps = {}, options = {}) {
|
|
|
908
908
|
if (update.dodResults && update.dodResults.length > 0) {
|
|
909
909
|
record2.dodResults = update.dodResults;
|
|
910
910
|
}
|
|
911
|
+
if (update.failureReason) {
|
|
912
|
+
record2.failureReason = update.failureReason;
|
|
913
|
+
} else if (update.status === "killed") {
|
|
914
|
+
record2.failureReason = "cancelled";
|
|
915
|
+
}
|
|
916
|
+
const resolvedToolCount = typeof update.toolCallCount === "number" ? update.toolCallCount : record2.activity?.counters?.toolCalls;
|
|
917
|
+
if (typeof resolvedToolCount === "number") {
|
|
918
|
+
record2.toolCallCount = resolvedToolCount;
|
|
919
|
+
}
|
|
920
|
+
if (typeof update.lastAssistantText === "string" && update.lastAssistantText) {
|
|
921
|
+
record2.lastAssistantText = update.lastAssistantText.slice(0, 2e3);
|
|
922
|
+
} else if (!record2.lastAssistantText && record2.msgFile) {
|
|
923
|
+
try {
|
|
924
|
+
const fs = deps.fs ?? nodeFs;
|
|
925
|
+
if (fs.existsSync(record2.msgFile)) {
|
|
926
|
+
const content = fs.readFileSync(record2.msgFile, "utf8");
|
|
927
|
+
if (content) record2.lastAssistantText = content.slice(0, 2e3);
|
|
928
|
+
}
|
|
929
|
+
} catch {
|
|
930
|
+
}
|
|
931
|
+
}
|
|
911
932
|
record2.endedAt = now().toISOString();
|
|
912
933
|
if (typeof update.note === "string" && update.note.trim()) {
|
|
913
934
|
record2.note = update.note.trim();
|
|
@@ -13,7 +13,7 @@ import {
|
|
|
13
13
|
} from "./chunk-AGGIDPCZ.js";
|
|
14
14
|
import {
|
|
15
15
|
runLlm
|
|
16
|
-
} from "./chunk-
|
|
16
|
+
} from "./chunk-LNFMVJK5.js";
|
|
17
17
|
import {
|
|
18
18
|
cleanupCliSessionForDialog
|
|
19
19
|
} from "./chunk-4NJEIGBQ.js";
|
|
@@ -55,7 +55,7 @@ import {
|
|
|
55
55
|
readCacheCreationInputTokens,
|
|
56
56
|
readCacheReadInputTokens,
|
|
57
57
|
resolveAutoExecutionProfile
|
|
58
|
-
} from "./chunk-
|
|
58
|
+
} from "./chunk-Q6FPSY5O.js";
|
|
59
59
|
import {
|
|
60
60
|
COMPACTION_SUMMARY_SYSTEM_PROMPT,
|
|
61
61
|
buildCompactionMetricsFromPlan,
|
|
@@ -74,7 +74,7 @@ import {
|
|
|
74
74
|
import {
|
|
75
75
|
findModelConfig,
|
|
76
76
|
getModelConfig
|
|
77
|
-
} from "./chunk-
|
|
77
|
+
} from "./chunk-TQC77XVE.js";
|
|
78
78
|
import {
|
|
79
79
|
toErrorMessage
|
|
80
80
|
} from "./chunk-HNMXYYJR.js";
|
|
@@ -83,6 +83,7 @@ import {
|
|
|
83
83
|
} from "./chunk-BYEJ7K2Z.js";
|
|
84
84
|
import {
|
|
85
85
|
PLATFORM_HOSTED_DEEPSEEK_FLASH_MODEL,
|
|
86
|
+
PLATFORM_HOSTED_DEEPSEEK_PRO_MODEL,
|
|
86
87
|
PLATFORM_HOSTED_GLM_53_FLASH_BASETEN_PRICE,
|
|
87
88
|
PLATFORM_HOSTED_GLM_53_FLASH_MODEL,
|
|
88
89
|
getPlatformHostedDeepSeekV4Price,
|
|
@@ -90,7 +91,7 @@ import {
|
|
|
90
91
|
isPlatformHostedDeepSeekV4Model,
|
|
91
92
|
isPlatformHostedImageModel,
|
|
92
93
|
isPlatformHostedOpenAIImageModel
|
|
93
|
-
} from "./chunk-
|
|
94
|
+
} from "./chunk-5YIL5WDC.js";
|
|
94
95
|
import {
|
|
95
96
|
nolotusId
|
|
96
97
|
} from "./chunk-VMWYBIXG.js";
|
|
@@ -2886,7 +2887,7 @@ var messageSlice = createSliceWithThunks({
|
|
|
2886
2887
|
runtimeOptions: args.runtimeOptions
|
|
2887
2888
|
});
|
|
2888
2889
|
if (agentKeyToUse) {
|
|
2889
|
-
const { streamAgentChatTurn } = await import("./agentSlice-
|
|
2890
|
+
const { streamAgentChatTurn } = await import("./agentSlice-FYVXEVSO.js");
|
|
2890
2891
|
await dispatch(
|
|
2891
2892
|
streamAgentChatTurn({
|
|
2892
2893
|
agentKey: agentKeyToUse,
|
|
@@ -3389,7 +3390,10 @@ var calculatePrice = ({
|
|
|
3389
3390
|
return { cost: sanitizeCost(adjusted.charge), pay: pay3 };
|
|
3390
3391
|
}
|
|
3391
3392
|
if ((provider === "nolo" || provider === "deepseek") && isPlatformHostedDeepSeekV4Model(modelName)) {
|
|
3392
|
-
const hostedModel = getModelConfig(
|
|
3393
|
+
const hostedModel = getModelConfig(
|
|
3394
|
+
"nolo",
|
|
3395
|
+
asTrimmedLowercaseString(modelName) === PLATFORM_HOSTED_DEEPSEEK_PRO_MODEL ? PLATFORM_HOSTED_DEEPSEEK_PRO_MODEL : PLATFORM_HOSTED_DEEPSEEK_FLASH_MODEL
|
|
3396
|
+
);
|
|
3393
3397
|
const costs3 = calculateBasicCost(
|
|
3394
3398
|
hostedModel,
|
|
3395
3399
|
usage,
|
|
@@ -4188,7 +4192,7 @@ var deleteDialogThunk = async (payload, thunkApi) => {
|
|
|
4188
4192
|
}
|
|
4189
4193
|
if (isCurrentDialog) {
|
|
4190
4194
|
await thunkApi.dispatch(resetMsgs());
|
|
4191
|
-
const { clearPendingAttachments: clearPendingAttachments2 } = await import("./dialogSlice-
|
|
4195
|
+
const { clearPendingAttachments: clearPendingAttachments2 } = await import("./dialogSlice-FEJXMIMV.js");
|
|
4192
4196
|
dispatch(clearPendingAttachments2());
|
|
4193
4197
|
}
|
|
4194
4198
|
return { dialogKey, isCurrentDialog, attachmentPlan };
|
|
@@ -4196,15 +4200,15 @@ var deleteDialogThunk = async (payload, thunkApi) => {
|
|
|
4196
4200
|
|
|
4197
4201
|
// packages/chat/dialog/dialogSlice.ts
|
|
4198
4202
|
var runCreateDialogAction = async (args, thunkApi) => {
|
|
4199
|
-
const { createDialogAction } = await import("./createDialogAction-
|
|
4203
|
+
const { createDialogAction } = await import("./createDialogAction-AYGXU34I.js");
|
|
4200
4204
|
return createDialogAction(args, thunkApi);
|
|
4201
4205
|
};
|
|
4202
4206
|
var runCreateAgentAutomationAction = async (args, thunkApi) => {
|
|
4203
|
-
const { createAgentAutomationAction } = await import("./createAgentAutomationAction-
|
|
4207
|
+
const { createAgentAutomationAction } = await import("./createAgentAutomationAction-3MOAQ3JB.js");
|
|
4204
4208
|
return createAgentAutomationAction(args, thunkApi);
|
|
4205
4209
|
};
|
|
4206
4210
|
var runUpdateDialogTitleAction = async (args, thunkApi) => {
|
|
4207
|
-
const { updateDialogTitleAction } = await import("./updateDialogTitleAction-
|
|
4211
|
+
const { updateDialogTitleAction } = await import("./updateDialogTitleAction-Y4UFJSEB.js");
|
|
4208
4212
|
return updateDialogTitleAction(args, thunkApi);
|
|
4209
4213
|
};
|
|
4210
4214
|
var runAddDialogAgentAction = async (args, thunkApi) => {
|
|
@@ -4228,7 +4232,7 @@ var runSetDialogExtraReferencesAction = async (args, thunkApi) => {
|
|
|
4228
4232
|
return setDialogExtraReferencesAction(args, thunkApi);
|
|
4229
4233
|
};
|
|
4230
4234
|
var runHandleSendMessageAction = async (args, thunkApi) => {
|
|
4231
|
-
const { handleSendMessageAction } = await import("./handleSendMessageAction-
|
|
4235
|
+
const { handleSendMessageAction } = await import("./handleSendMessageAction-YMQD6VXX.js");
|
|
4232
4236
|
return handleSendMessageAction(args, thunkApi);
|
|
4233
4237
|
};
|
|
4234
4238
|
function clearDialogState() {
|
|
@@ -4241,7 +4245,7 @@ var createPageAndAddReference = createAsyncThunk(
|
|
|
4241
4245
|
async (payload, { dispatch, getState, rejectWithValue }) => {
|
|
4242
4246
|
const { slateData, jsonData, title, type, fileId, groupId, dialogKey } = payload;
|
|
4243
4247
|
try {
|
|
4244
|
-
const { createDocState } = await import("./docStore-
|
|
4248
|
+
const { createDocState } = await import("./docStore-5LRRKLQA.js");
|
|
4245
4249
|
const pageKey = await createDocState(
|
|
4246
4250
|
{ slateData, title },
|
|
4247
4251
|
{ dispatch, getState }
|
|
@@ -6,8 +6,9 @@ import {
|
|
|
6
6
|
agentRecordHasConfiguredCredential
|
|
7
7
|
} from "./chunk-FHAGENAS.js";
|
|
8
8
|
import {
|
|
9
|
+
deriveCredentialGroup,
|
|
9
10
|
toSafeAgentSummary
|
|
10
|
-
} from "./chunk-
|
|
11
|
+
} from "./chunk-N2COMZCD.js";
|
|
11
12
|
import {
|
|
12
13
|
PUBLIC_AGENT_KEY_PREFIX,
|
|
13
14
|
isOwnedAgentKey,
|
|
@@ -38,6 +39,10 @@ function normalizeListedAgent(record) {
|
|
|
38
39
|
const credentialConfigured = agentRecordHasConfiguredCredential(record);
|
|
39
40
|
const credentialRef = typeof record?.credentialRef === "string" && record.credentialRef ? record.credentialRef : void 0;
|
|
40
41
|
const apiKeyRef = typeof record?.apiKeyRef === "string" && record.apiKeyRef ? record.apiKeyRef : void 0;
|
|
42
|
+
const rawCredRef = apiKeyRef || credentialRef;
|
|
43
|
+
const credInfo = deriveCredentialGroup(record?.credentialGroup ?? rawCredRef);
|
|
44
|
+
const credentialGroup = record?.credentialGroup ?? credInfo?.credentialGroup;
|
|
45
|
+
const credentialKind = record?.credentialKind ?? credInfo?.credentialKind;
|
|
41
46
|
return {
|
|
42
47
|
id: rawId,
|
|
43
48
|
privateKey,
|
|
@@ -57,6 +62,8 @@ function normalizeListedAgent(record) {
|
|
|
57
62
|
credentialConfigured,
|
|
58
63
|
credentialRef,
|
|
59
64
|
apiKeyRef,
|
|
65
|
+
...credentialGroup !== void 0 ? { credentialGroup } : {},
|
|
66
|
+
...credentialKind !== void 0 ? { credentialKind } : {},
|
|
60
67
|
...typeof record?.apiSource === "string" && record.apiSource ? { apiSource: record.apiSource } : {},
|
|
61
68
|
...typeof record?.cliProvider === "string" && record.cliProvider ? { cliProvider: record.cliProvider } : {},
|
|
62
69
|
...typeof record?.nextAvailableAt === "number" && Number.isFinite(record.nextAvailableAt) ? { nextAvailableAt: record.nextAvailableAt } : {}
|
|
@@ -304,7 +304,7 @@ var slice = createSliceWithThunks({
|
|
|
304
304
|
const overrides = {};
|
|
305
305
|
if (args.systemPromptOverride !== void 0) overrides.prompt = args.systemPromptOverride;
|
|
306
306
|
if (args.toolsOverride !== void 0) overrides.tools = args.toolsOverride;
|
|
307
|
-
const { _executeModel } = await import("./_executeModel-
|
|
307
|
+
const { _executeModel } = await import("./_executeModel-TBSKCSBE.js");
|
|
308
308
|
return _executeModel(
|
|
309
309
|
{
|
|
310
310
|
isStreaming: args.isStreaming ?? false,
|
|
@@ -325,7 +325,7 @@ var slice = createSliceWithThunks({
|
|
|
325
325
|
* - 循环直到无工具调用或触发其他运行时停止条件
|
|
326
326
|
*/
|
|
327
327
|
runAgent: create.asyncThunk(async (args, thunkApi) => {
|
|
328
|
-
const { runAgentClientLoop } = await import("./runAgentClientLoop-
|
|
328
|
+
const { runAgentClientLoop } = await import("./runAgentClientLoop-FJFKDMVZ.js");
|
|
329
329
|
const { content: loopContent, toolCallCount } = await runAgentClientLoop(
|
|
330
330
|
{
|
|
331
331
|
agentKey: args.agentKey,
|
|
@@ -341,7 +341,7 @@ var slice = createSliceWithThunks({
|
|
|
341
341
|
* 聊天轮次流式 Agent 调用
|
|
342
342
|
*/
|
|
343
343
|
streamAgentChatTurn: create.asyncThunk(async (args, thunkApi) => {
|
|
344
|
-
const { streamAgentChatTurnHandler } = await import("./streamAgentChatTurn-
|
|
344
|
+
const { streamAgentChatTurnHandler } = await import("./streamAgentChatTurn-4O2VTVPB.js");
|
|
345
345
|
return streamAgentChatTurnHandler(args, thunkApi);
|
|
346
346
|
}),
|
|
347
347
|
/**
|