nolo-cli 0.65.0 → 0.66.0-alpha.2

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.
Files changed (76) hide show
  1. package/{_executeModel-R26QYY66.js → _executeModel-FIWTVU3A.js} +21 -21
  2. package/{agentDeleteCommand-6R6EXQOR.js → agentDeleteCommand-2L2IHCNI.js} +11 -11
  3. package/{agentEmailCommands-AKENZOKO.js → agentEmailCommands-QVKPWFUJ.js} +26 -26
  4. package/{agentListCommands-XJU3JJQO.js → agentListCommands-N5GDSFYM.js} +18 -13
  5. package/{agentMachineCommands-V7IJDPAY.js → agentMachineCommands-GOLJW4U5.js} +12 -12
  6. package/{agentRecordCommands-VIEINDIV.js → agentRecordCommands-VU3IKYKX.js} +25 -25
  7. package/{agentRunCommand-GT5ZTYRM.js → agentRunCommand-NRS5Z2H6.js} +25 -25
  8. package/{agentRunControl-WECMOO6O.js → agentRunControl-T44MESII.js} +1 -1
  9. package/{agentRuntimeLocal-HGJ4D3JF.js → agentRuntimeLocal-7OO6AW2D.js} +11 -11
  10. package/{agentSlice-7XJH5WQF.js → agentSlice-PS4PXWGK.js} +1 -1
  11. package/{appDeleteCommands-VG2UVW4T.js → appDeleteCommands-KY5FQZ6V.js} +11 -11
  12. package/{appDeployCommands-PABMVMN2.js → appDeployCommands-6ZMG2KK4.js} +11 -11
  13. package/{appDeployStatusCommands-X7WEU4TU.js → appDeployStatusCommands-MVEBIK32.js} +11 -11
  14. package/{appGetCommands-NQYXHVJL.js → appGetCommands-T3EKMNGI.js} +11 -11
  15. package/{appListCommands-5NGZQ6IK.js → appListCommands-RUFZFTUF.js} +11 -11
  16. package/{authCommand-WOTWLJNF.js → authCommand-QHMBXOOH.js} +7 -7
  17. package/{chatQueueReduxAdapter-F3R253JE.js → chatQueueReduxAdapter-33RTTNSP.js} +7 -7
  18. package/{chunk-BWIPK2PD.js → chunk-4Y4FN2LO.js} +53 -16
  19. package/{chunk-LJ6OKZ6D.js → chunk-55QEURAR.js} +17 -13
  20. package/{chunk-7KELZLC2.js → chunk-5BJ6YU5G.js} +10 -10
  21. package/{chunk-22BTGNSP.js → chunk-5YIL5WDC.js} +38 -5
  22. package/{chunk-FKFMIBTT.js → chunk-6IT5ECCC.js} +1 -1
  23. package/{chunk-NO42UD73.js → chunk-747NDZ5B.js} +1 -1
  24. package/{chunk-ZRSJ3JEH.js → chunk-AJF6YRN7.js} +5 -11
  25. package/{chunk-N6HLMLKE.js → chunk-B2BF4MPL.js} +1 -1
  26. package/{chunk-MXUDQZXQ.js → chunk-BNATE77Z.js} +1 -1
  27. package/{chunk-QEFJJS2I.js → chunk-CTYGL4ST.js} +8 -8
  28. package/{chunk-3ROJR3TG.js → chunk-H5X7CHZ7.js} +7 -7
  29. package/{chunk-45YO6H7P.js → chunk-HH65VA5U.js} +21 -0
  30. package/{chunk-VAKVNHK5.js → chunk-IZPSDMML.js} +7 -7
  31. package/{chunk-XAVSS3KE.js → chunk-KFE6BJJS.js} +8 -1
  32. package/{chunk-3BLB7QKO.js → chunk-N2COMZCD.js} +55 -2
  33. package/{chunk-SYNKICCB.js → chunk-OGYAS6L4.js} +2 -2
  34. package/{chunk-DWYSDNOH.js → chunk-OUZQS7HJ.js} +4 -4
  35. package/{chunk-F44FAXP2.js → chunk-PBD6MZSF.js} +3 -3
  36. package/{chunk-7A3RRUCQ.js → chunk-PGX53HOY.js} +2 -2
  37. package/{chunk-OOCYHKCV.js → chunk-PLHF5L4X.js} +1 -1
  38. package/{chunk-5ZYA4JJ3.js → chunk-Q6FPSY5O.js} +2 -2
  39. package/{chunk-PQDIDWGX.js → chunk-RSDPPLSM.js} +1 -1
  40. package/{chunk-E3YVTQWT.js → chunk-RW76G3YN.js} +2 -2
  41. package/{chunk-3QGUVVX5.js → chunk-SHPRRU2W.js} +2 -2
  42. package/{chunk-LJKICKVC.js → chunk-SQDGTW2T.js} +2 -2
  43. package/{chunk-MMZ6ZTVO.js → chunk-TQC77XVE.js} +4 -3
  44. package/{chunk-CQ2OZMLQ.js → chunk-V6J56AWD.js} +28 -24
  45. package/{chunk-URHZKKK7.js → chunk-VBMG2KME.js} +3 -3
  46. package/{chunk-RDBARW6T.js → chunk-VLQRD7ZJ.js} +2 -2
  47. package/{chunk-TBHAHL33.js → chunk-VTTBOV4G.js} +16 -12
  48. package/{chunk-GSXDRMDO.js → chunk-W7YUBKTY.js} +2 -2
  49. package/{chunk-XOKOSO35.js → chunk-Y7PULBIA.js} +1 -1
  50. package/{chunk-QEW2MFDQ.js → chunk-ZW22L5ES.js} +1 -1
  51. package/{codingSkills-TKROLCBA.js → codingSkills-DB4QPUND.js} +2 -2
  52. package/{contentThunks-OZPK5B4Z.js → contentThunks-V3J2MQ4F.js} +8 -8
  53. package/{createAgentAutomationAction-LCIBGE5T.js → createAgentAutomationAction-Z7ZGVMC4.js} +8 -8
  54. package/{createDialogAction-JPJZMHJE.js → createDialogAction-OMUP4F64.js} +10 -10
  55. package/{createPageAction-6P2WLNHO.js → createPageAction-WA3GXFVF.js} +8 -8
  56. package/{dialogCommands-HGMV4NQJ.js → dialogCommands-XUUKQIDU.js} +11 -11
  57. package/{dialogSlice-R5RZHFTU.js → dialogSlice-RG72CSE7.js} +7 -7
  58. package/{docCreateCommands-WQT5EZG2.js → docCreateCommands-7MJN7XQJ.js} +11 -11
  59. package/{docDeleteCommands-GUMELBKM.js → docDeleteCommands-GOGPGPHN.js} +11 -11
  60. package/{docReadCommands-T6FDDKJ3.js → docReadCommands-VVCG7D7A.js} +11 -11
  61. package/{docStore-DKWZ6XJ5.js → docStore-REBBJ26A.js} +1 -1
  62. package/{docUpdateCommands-GBWGXG2G.js → docUpdateCommands-WV5XALDB.js} +11 -11
  63. package/{getPricing-NM3NUTAS.js → getPricing-JRNHI5CV.js} +3 -3
  64. package/{handleSendMessageAction-UQGKM4UX.js → handleSendMessageAction-QFLWVH6S.js} +7 -7
  65. package/index.js +52 -52
  66. package/{machineCommands-SCGLQQCA.js → machineCommands-XCKQBA7O.js} +25 -25
  67. package/{machineWsRunDispatch-EAH5VIEL.js → machineWsRunDispatch-BFBMKHS2.js} +25 -25
  68. package/{models-FAMINFZ7.js → models-NBVTQACP.js} +2 -2
  69. package/package.json +1 -1
  70. package/{readlineWorkspace-7FNJDYLD.js → readlineWorkspace-TVRHMQYP.js} +32 -28
  71. package/{runAgentClientLoop-Y6HWP2PT.js → runAgentClientLoop-5YFXYEBP.js} +19 -19
  72. package/{spaceCommands-76ECKNFH.js → spaceCommands-3GWFIK3N.js} +11 -11
  73. package/{streamAgentChatTurn-6WFQJ4DY.js → streamAgentChatTurn-5UBPDCFQ.js} +22 -22
  74. package/{tools-RR53D65Q.js → tools-TEYPTVPC.js} +14 -14
  75. package/{tuiSummaryLlmCaller-F3DPFFZM.js → tuiSummaryLlmCaller-D7CCLLS7.js} +5 -5
  76. package/{updateDialogTitleAction-WXS3AKOL.js → updateDialogTitleAction-CTTQA4RH.js} +8 -8
@@ -4,7 +4,7 @@ import {
4
4
  refreshAntigravityOAuthToken,
5
5
  refreshOpenAiCodexToken,
6
6
  xaiRefresh
7
- } from "./chunk-MXUDQZXQ.js";
7
+ } from "./chunk-BNATE77Z.js";
8
8
  import {
9
9
  defaultLoopbackRequest
10
10
  } from "./chunk-EADNWBAZ.js";
@@ -24,7 +24,7 @@ import {
24
24
  terminateRunProcess,
25
25
  transitionRunToTerminal,
26
26
  withQueueLock
27
- } from "./chunk-45YO6H7P.js";
27
+ } from "./chunk-HH65VA5U.js";
28
28
  import {
29
29
  clearCredentialAvailability,
30
30
  markCredentialUnavailable,
@@ -55,7 +55,7 @@ import {
55
55
  import {
56
56
  inlineImageUrlsForCustomProvider,
57
57
  prepareTools
58
- } from "./chunk-SYNKICCB.js";
58
+ } from "./chunk-OGYAS6L4.js";
59
59
  import {
60
60
  getServerProviderSecret
61
61
  } from "./chunk-HS7MLR74.js";
@@ -72,7 +72,7 @@ import {
72
72
  rememberMemoryFunctionSchema,
73
73
  resolveAgentRequiredPackIds,
74
74
  setTodoListFunc
75
- } from "./chunk-CQ2OZMLQ.js";
75
+ } from "./chunk-V6J56AWD.js";
76
76
  import {
77
77
  fetchWithTransientRetry,
78
78
  isTransientFetchError
@@ -96,13 +96,13 @@ import {
96
96
  prepareTokenUsageData,
97
97
  resolveBuiltinPlatformAgentConfig,
98
98
  runKeyed
99
- } from "./chunk-TBHAHL33.js";
99
+ } from "./chunk-VTTBOV4G.js";
100
100
  import {
101
101
  BUILTIN_TITLE_LLM_CONFIG
102
102
  } from "./chunk-EVBFYPDC.js";
103
103
  import {
104
104
  fetchServerSyncedCredential
105
- } from "./chunk-F44FAXP2.js";
105
+ } from "./chunk-PBD6MZSF.js";
106
106
  import {
107
107
  require_date_fns
108
108
  } from "./chunk-M76ECQRD.js";
@@ -118,7 +118,7 @@ import {
118
118
  applySystemBuiltinSkillFilter,
119
119
  expandEnabledPacks,
120
120
  resolveEffectiveEnabledPacks
121
- } from "./chunk-ZRSJ3JEH.js";
121
+ } from "./chunk-AJF6YRN7.js";
122
122
  import {
123
123
  DEFAULT_HYBRID_READ_TIMEOUT_MS,
124
124
  Duration_exports,
@@ -154,7 +154,7 @@ import {
154
154
  resolveOpenAiCompatibleProviderConfig,
155
155
  shouldUseGeminiNativeToolRoute,
156
156
  summarizeToolArguments
157
- } from "./chunk-3ROJR3TG.js";
157
+ } from "./chunk-H5X7CHZ7.js";
158
158
  import {
159
159
  PlatformStreamInterruptedError,
160
160
  buildPlatformChatCompletionRequest,
@@ -166,11 +166,11 @@ import {
166
166
  readSseDataValues,
167
167
  resolvePlatformChatProviderConfig,
168
168
  shouldUsePlatformChatProvider
169
- } from "./chunk-7A3RRUCQ.js";
169
+ } from "./chunk-PGX53HOY.js";
170
170
  import {
171
171
  resolveAgentRuntimeConfigFromRecord,
172
172
  resolveHistoricalToolContentCap
173
- } from "./chunk-XOKOSO35.js";
173
+ } from "./chunk-Y7PULBIA.js";
174
174
  import {
175
175
  collectStablePromptPrefix,
176
176
  convertMessagesToResponsesInput,
@@ -179,10 +179,10 @@ import {
179
179
  } from "./chunk-XTJTN3RW.js";
180
180
  import {
181
181
  isAntigravityOAuthAgent
182
- } from "./chunk-QEW2MFDQ.js";
182
+ } from "./chunk-ZW22L5ES.js";
183
183
  import {
184
184
  resolvePlatformAuthToken
185
- } from "./chunk-RDBARW6T.js";
185
+ } from "./chunk-VLQRD7ZJ.js";
186
186
  import {
187
187
  buildNoloWorkspaceOpenAiTools,
188
188
  parseNoloWorkspaceToolArguments,
@@ -209,7 +209,7 @@ import {
209
209
  } from "./chunk-PSCNXBYA.js";
210
210
  import {
211
211
  isAdaptiveThinkingModelId
212
- } from "./chunk-MMZ6ZTVO.js";
212
+ } from "./chunk-TQC77XVE.js";
213
213
  import {
214
214
  compactWhitespace
215
215
  } from "./chunk-DWLEOOGR.js";
@@ -10778,6 +10778,9 @@ function buildRunStatusPayload(reconciled, deps, opts = {}) {
10778
10778
  startedAt: reconciled.startedAt,
10779
10779
  endedAt: reconciled.endedAt ?? null,
10780
10780
  exitCode: reconciled.exitCode ?? null,
10781
+ ...reconciled.failureReason ? { failureReason: reconciled.failureReason } : {},
10782
+ ...typeof reconciled.toolCallCount === "number" ? { toolCallCount: reconciled.toolCallCount } : {},
10783
+ ...reconciled.lastAssistantText ? { lastAssistantText: reconciled.lastAssistantText } : {},
10781
10784
  // Non-ephemeral runs expose dialogId so the caller can read the
10782
10785
  // agent's actual output via `nolo dialog read <dialogId>`. Ephemeral
10783
10786
  // runs do not persist a dialog (their ephemeral dialogId is synthetic)
@@ -10803,6 +10806,7 @@ function buildRunStatusPayload(reconciled, deps, opts = {}) {
10803
10806
  startedAt: readTimestamp(reconciled.startedAt),
10804
10807
  finishedAt: readTimestamp(reconciled.endedAt)
10805
10808
  },
10809
+ ...typeof reconciled.toolCallCount === "number" ? { toolCallCount: reconciled.toolCallCount } : {},
10806
10810
  logLines,
10807
10811
  labels
10808
10812
  })
@@ -8,7 +8,7 @@ import {
8
8
  clipMultilineText,
9
9
  fetchAndSerializeTable,
10
10
  resolveBuiltinSkillPage
11
- } from "./chunk-CQ2OZMLQ.js";
11
+ } from "./chunk-V6J56AWD.js";
12
12
  import {
13
13
  isGatewayHttpStatus
14
14
  } from "./chunk-NF64D32W.js";
@@ -29,25 +29,25 @@ import {
29
29
  } from "./chunk-MEYIRKDN.js";
30
30
  import {
31
31
  fetchAndCacheMessages
32
- } from "./chunk-TBHAHL33.js";
32
+ } from "./chunk-VTTBOV4G.js";
33
33
  import {
34
34
  shouldUseServerProxy
35
35
  } from "./chunk-YYLHWIW6.js";
36
36
  import {
37
37
  fetchServerSyncedCredential
38
- } from "./chunk-F44FAXP2.js";
38
+ } from "./chunk-PBD6MZSF.js";
39
39
  import {
40
40
  buildSkillGuidancePromptBlock,
41
41
  extractRuntimePageCapabilities,
42
42
  resolveSkillGraphFromRoots
43
- } from "./chunk-E3YVTQWT.js";
43
+ } from "./chunk-RW76G3YN.js";
44
44
  import {
45
45
  buildIdentityBlock,
46
46
  buildRuntimeGuidanceBlocks,
47
47
  compileContextLayers,
48
48
  normalizeChatCompletionsBodyForProvider,
49
49
  resolveToolGuidedSections
50
- } from "./chunk-QEFJJS2I.js";
50
+ } from "./chunk-CTYGL4ST.js";
51
51
  import {
52
52
  convertMessagesToResponsesInput,
53
53
  getUsageRequestOptions,
@@ -57,15 +57,15 @@ import {
57
57
  import {
58
58
  ANTIGRAVITY_CLOUD_CODE_BASE_URL,
59
59
  isAntigravityOAuthAgent
60
- } from "./chunk-QEW2MFDQ.js";
60
+ } from "./chunk-ZW22L5ES.js";
61
61
  import {
62
62
  buildProviderAuthHeaders
63
- } from "./chunk-RDBARW6T.js";
63
+ } from "./chunk-VLQRD7ZJ.js";
64
64
  import {
65
65
  isOpenAiResponsesModel,
66
66
  resolvePlatformChatCompletionsEndpoint,
67
67
  resolvePlatformResponsesEndpoint
68
- } from "./chunk-LJKICKVC.js";
68
+ } from "./chunk-SQDGTW2T.js";
69
69
  import {
70
70
  estimateTokenCount
71
71
  } from "./chunk-PSCNXBYA.js";
@@ -73,7 +73,7 @@ import {
73
73
  clampReasoningEffort,
74
74
  getModelConfig,
75
75
  isModelSupportReasoningEffort
76
- } from "./chunk-MMZ6ZTVO.js";
76
+ } from "./chunk-TQC77XVE.js";
77
77
  import {
78
78
  createFileCredentialBroker
79
79
  } from "./chunk-3JQ2NRYU.js";
@@ -92,7 +92,7 @@ import {
92
92
  isDeepInfraKimiModel,
93
93
  isFireworksKimiModel,
94
94
  resolveFireworksKimiModel
95
- } from "./chunk-22BTGNSP.js";
95
+ } from "./chunk-5YIL5WDC.js";
96
96
  import {
97
97
  createSpaceKey
98
98
  } from "./chunk-UAD2WT54.js";
@@ -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 = (_model, nowMs = Date.now()) => {
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,
@@ -4,7 +4,7 @@ import {
4
4
  openrouterModels,
5
5
  platformHostedModels,
6
6
  zaiModels
7
- } from "./chunk-22BTGNSP.js";
7
+ } from "./chunk-5YIL5WDC.js";
8
8
 
9
9
  // packages/ai/llm/modelAbility.ts
10
10
  var MODEL_ABILITY_TABLE = {
@@ -1,7 +1,7 @@
1
1
  import {
2
2
  fetchReferenceContents,
3
3
  resolveReferenceAssets
4
- } from "./chunk-7KELZLC2.js";
4
+ } from "./chunk-5BJ6YU5G.js";
5
5
 
6
6
  // packages/ai/agent/fetchAgentContexts.ts
7
7
  async function fetchAgentContexts(references, dispatch) {
@@ -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\uFF0C\u4E0D\u89E3\u91CA\u300C\u6253\u7B97\u600E\u4E48\u505A\u300D\uFF0C\u76F4\u63A5\u52A8\u624B\u3002\u6539\u5B8C\u53EA\u7528\u4E00\u4E24\u53E5\u8BDD\u8BF4\u6E05\u300C\u6539\u4E86\u4EC0\u4E48\u3001\u53BB\u54EA\u770B\u300D\u3002
9
- - \u601D\u8003\u7B80\u77ED\uFF1A\u5B9A\u4F4D\u95EE\u9898\u5373\u53EF\uFF0C\u4E0D\u505A\u957F\u7BC7\u63A8\u6F14\u3002
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, { ephemeral: true })\`\uFF08web/\u684C\u9762\u7AEF\u6CA1\u6709 nolo CLI\uFF0C\u6240\u6709 host \u90FD\u6709\u8FD9\u4E2A\u5DE5\u5177\uFF09\u3002ephemeral \u8BA9 review \u5B8C\u6210\u540E\u4E0D\u7559 dialog \u8BB0\u5F55\u3002
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 \u53EF\u80FD\u591A\u8F6E\u6536\u655B\uFF08\u6709 finding\u2192\u4FEE\u2192\u518D\u5BA1\u2192\u76F4\u5230 APPROVE\uFF09\u3002\u6BCF\u8F6E review \u662F\u65E0\u4E0A\u4E0B\u6587\u7684\u2014\u2014reviewer \u53EA\u770B\u5F53\u524D\u5DE5\u4F5C\u533A diff\uFF0C\u4E0D\u5E26\u4E0A\u4E00\u8F6E finding \u8BB0\u5FC6\u3002
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
 
@@ -6,7 +6,7 @@ import {
6
6
  import {
7
7
  deleteDialog,
8
8
  toast
9
- } from "./chunk-TBHAHL33.js";
9
+ } from "./chunk-VTTBOV4G.js";
10
10
  import {
11
11
  require_date_fns
12
12
  } from "./chunk-M76ECQRD.js";
@@ -11,7 +11,7 @@ import {
11
11
  getAntigravityUserAgent,
12
12
  normalizeAntigravityTokenPayload,
13
13
  refreshAntigravityToken
14
- } from "./chunk-QEW2MFDQ.js";
14
+ } from "./chunk-ZW22L5ES.js";
15
15
  import {
16
16
  writeOAuthCredential
17
17
  } from "./chunk-ONXOABJR.js";
@@ -7,7 +7,7 @@ import {
7
7
  } from "./chunk-RJ2SAFB5.js";
8
8
  import {
9
9
  getModelContextWindow
10
- } from "./chunk-5ZYA4JJ3.js";
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-22BTGNSP.js";
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\u2014\u2014\u7531\u5BBF\u4E3B\u80FD\u529B\u51B3\u5B9A\u5982\u4F55\u63A5\u529B\u3002\u662F\u5426\u5141\u8BB8\u963B\u585E\u7B49\u5F85\uFF0C\u7531\u5DE5\u5177\u8868\u81EA\u5DF1\u56DE\u7B54\uFF0C\u4E0D\u7528\u4F60\u731C\u6D4B\u73AF\u5883\uFF1AcontrolAgentRun \u7684 action \u91CC\u6709 wait \u5C31\u53EF\u4EE5\u7528\u5B83\u963B\u585E\u5230\u7EC8\u6001\uFF08\u540C\u6837\u4E0D\u8981\u81EA\u5DF1\u5FAA\u73AF wait\uFF0C\u90A3\u662F\u4F2A\u88C5\u6210\u7B49\u5F85\u7684\u8F6E\u8BE2\uFF09\uFF1B\u6CA1\u6709 wait \u65F6\u6309\u5DE5\u5177\u63CF\u8FF0\u5904\u7406\uFF0C\u4E0D\u8981\u636E\u6B64\u63A8\u65AD\u4E00\u5B9A\u5B58\u5728 terminal wake\uFF0C\u6D3E\u53D1\u5B8C\u76F4\u63A5\u6536\u5C3E\u3002
187
- 2. \u7981\u6B62\u8F6E\u8BE2/\u7981\u7A7A\u8F6C/\u522B\u590D\u8FF0 status\uFF0C\u8BED\u4E49\u4EE5\u4E24\u4E2A\u5DE5\u5177\u7684\u63CF\u8FF0\u4E3A\u51C6\u3002\u6B63\u5E38\u540E\u53F0 run \u6D3E\u53D1\u540E\u6536\u5C3E\uFF0C\u80FD\u5426\u6C47\u603B\u3001\u8981\u4E0D\u8981\u7EE7\u7EED\u7531\u5BBF\u4E3B\u7EC8\u6001\u901A\u77E5\u51B3\u5B9A\uFF0C\u4E0D\u8981\u7528\u4E3B\u52A8 status \u5224\u65AD\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\u72B6\u6001\u6458\u8981\uFF09\u3002\u5E76\u884C\uFF1A\u72EC\u7ACB\u5B50\u4EFB\u52A1\u4E00\u6B21\u6D3E\u5B8C\uFF0C\u7B49\u5404\u81EA\u7EC8\u6001\u9010\u4E2A\u6C47\u603B\u3002\u65E0\u6587\u4EF6\u4EA4\u96C6\u3001\u65E0\u771F\u5B9E\u6570\u636E\u4F9D\u8D56\u7684\u4EFB\u52A1\u9ED8\u8BA4\u5E76\u53D1\u6D3E\u53D1\u2014\u2014\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 \u591A\u5B9E\u4F8B\uFF0C\u5B9E\u4F8B\u95F4\u65E0\u4E0A\u4E0B\u6587\u5171\u4EAB\uFF09\uFF1B\u53EA\u6709\u771F\u5B9E\u6587\u4EF6/\u6570\u636E\u4F9D\u8D56\u6216 brief \u660E\u793A\u51B2\u7A81\u9762\u65F6\u624D\u4E32\u884C\u3002
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\uFF1Bstatus \u4EC5\u7528\u4E8E\u5F02\u5E38\u8BCA\u65AD\uFF0C\u4E0D\u662F stop \u524D mandatory preflight\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\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
 
@@ -204,7 +204,7 @@ var AGENT_COLLABORATION_INSTRUCTIONS = `--- Agent \u7F16\u6392\u4E0E\u534F\u4F5C
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
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\u6574\u4F53\u4EA4\u7ED9\u5B50 agent \u72EC\u7ACB\u4E0A\u4E0B\u6587\uFF0C\u7236 agent \u53EA\u6536\u7ED3\u8BBA\u3002
206
206
  - **\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
- - \u4E24\u8D26\u5747\u4E0D\u547D\u4E2D\u4E0D\u51D1\u6570\u6D3E\u53D1\uFF1B\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
207
+ - \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
208
 
209
209
  **\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
210
  - **\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 +231,12 @@ ${AGENT_SELECTION_PRIORITY_INSTRUCTIONS}
231
231
 
232
232
  **commit \u524D\u786C\u95E8\uFF08\u9636\u6BB5\u5212\u5206\u4E0E\u72EC\u7ACB\u5BA1\u67E5\uFF09**\uFF1A
233
233
  - **\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(ephemeral:true) \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
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 \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
235
  - **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
236
 
237
237
  --- \u786E\u8BA4\u8FB9\u754C ---
238
238
  - \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
- - \u81EA\u68C0\uFF1A\u5206\u6863\u5B8C\u6210\u4E86\u5417\uFF1F\u53EA\u4FDD\u7559\u5F53\u524D\u52A8\u4F5C\u9700\u8981\u7684\u5DE5\u5177/\u5386\u53F2/\u6587\u4EF6\u5185\u5BB9\uFF1F\u6D3E\u53D1\u7684\u5B50\u4EFB\u52A1\u8FB9\u754C\u548C\u9A8C\u6536\u8BC1\u636E\u5199\u6E05\u4E86\u5417\uFF1F\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`;
239
+ - \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
240
  var WEBPAGE_ACCESS_INSTRUCTIONS = `--- \u7F51\u9875\u8BBF\u95EE\u80FD\u529B (Web Access) ---
241
241
  \u83B7\u53D6\u5916\u90E8\u4FE1\u606F\u7531\u7B80\u5165\u7E41\uFF1A
242
242
  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
@@ -8,7 +8,7 @@ import {
8
8
  readSseFrames,
9
9
  streamSseDataValues,
10
10
  throwIfChatCompletionStreamFailed
11
- } from "./chunk-7A3RRUCQ.js";
11
+ } from "./chunk-PGX53HOY.js";
12
12
  import {
13
13
  clipToolText,
14
14
  hasImageInRuntimeMessages,
@@ -16,7 +16,7 @@ import {
16
16
  resolveHistoricalToolContentCap,
17
17
  resolveToolOutputProfile,
18
18
  stripImagePartsFromMessages
19
- } from "./chunk-XOKOSO35.js";
19
+ } from "./chunk-Y7PULBIA.js";
20
20
  import {
21
21
  downgradeUnparsableToolCalls,
22
22
  hasParsableObjectArguments,
@@ -39,7 +39,7 @@ import {
39
39
  requiresBareImageUrl,
40
40
  resolveToolGuidedSections,
41
41
  toBareImageUrlMessages
42
- } from "./chunk-QEFJJS2I.js";
42
+ } from "./chunk-CTYGL4ST.js";
43
43
  import {
44
44
  convertMessagesToResponsesInput,
45
45
  extractReasoningFromResponseOutput,
@@ -54,11 +54,11 @@ import {
54
54
  getAntigravityUserAgent,
55
55
  readAntigravityProjectId,
56
56
  resolveAntigravityCloudCodeBaseUrl
57
- } from "./chunk-QEW2MFDQ.js";
57
+ } from "./chunk-ZW22L5ES.js";
58
58
  import {
59
59
  buildProviderAuthHeaders,
60
60
  buildProviderExecutionPlan
61
- } from "./chunk-RDBARW6T.js";
61
+ } from "./chunk-VLQRD7ZJ.js";
62
62
  import {
63
63
  NOLO_WORKSPACE_TOOL_NAMES,
64
64
  applyToolSurfaceConstraints,
@@ -80,7 +80,7 @@ import {
80
80
  resolveEmptyAssistantFallbackMessage,
81
81
  resolveEmptyAssistantOutcome,
82
82
  resolveTruncatedReasoningTailLog
83
- } from "./chunk-5ZYA4JJ3.js";
83
+ } from "./chunk-Q6FPSY5O.js";
84
84
  import {
85
85
  COMPACTION_SUMMARY_SCHEMA_VERSION,
86
86
  COMPACTION_SUMMARY_SYSTEM_PROMPT,
@@ -19217,7 +19217,7 @@ function buildLoadSkillExecutor(args2) {
19217
19217
  const { resolveSkillByName } = await import("./skillDiscovery-CYUCJMAG.js");
19218
19218
  const resolved = resolveSkillByName(args2.cwd, name);
19219
19219
  if (!resolved) {
19220
- const { resolveCodingBuiltinSlug, buildCodingSkillContentBySlug } = await import("./codingSkills-TKROLCBA.js");
19220
+ const { resolveCodingBuiltinSlug, buildCodingSkillContentBySlug } = await import("./codingSkills-DB4QPUND.js");
19221
19221
  const builtinSlug = resolveCodingBuiltinSlug(name);
19222
19222
  if (builtinSlug) {
19223
19223
  const body = buildCodingSkillContentBySlug(builtinSlug);
@@ -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();
@@ -5,14 +5,14 @@ import {
5
5
  inlineImageUrlsForCustomProvider,
6
6
  prepareTools,
7
7
  shouldInlineImageUrlsForAgent
8
- } from "./chunk-SYNKICCB.js";
8
+ } from "./chunk-OGYAS6L4.js";
9
9
  import {
10
10
  INVALID_TOOL_ARGS_REPLACEMENT,
11
11
  buildInvalidToolCallSelfHealResult,
12
12
  parseToolCallArguments,
13
13
  performFetchRequest,
14
14
  sanitizeOutboundMessages
15
- } from "./chunk-7KELZLC2.js";
15
+ } from "./chunk-5BJ6YU5G.js";
16
16
  import {
17
17
  createSSEParser,
18
18
  createToolRunId,
@@ -23,7 +23,7 @@ import {
23
23
  toolRunSetPending,
24
24
  toolRunStarted,
25
25
  toolRunSucceeded
26
- } from "./chunk-CQ2OZMLQ.js";
26
+ } from "./chunk-V6J56AWD.js";
27
27
  import {
28
28
  getPublicImageAgentMode
29
29
  } from "./chunk-VIDPVFP3.js";
@@ -35,10 +35,10 @@ import {
35
35
  messageStreamEnd,
36
36
  messageStreaming,
37
37
  updateToolMessage
38
- } from "./chunk-TBHAHL33.js";
38
+ } from "./chunk-VTTBOV4G.js";
39
39
  import {
40
40
  streamAgentChatTurn
41
- } from "./chunk-F44FAXP2.js";
41
+ } from "./chunk-PBD6MZSF.js";
42
42
  import {
43
43
  addActiveController,
44
44
  removeActiveController,
@@ -56,10 +56,10 @@ import {
56
56
  import {
57
57
  EMPTY_ASSISTANT_REPAIR_PROMPT,
58
58
  getModelInfo
59
- } from "./chunk-5ZYA4JJ3.js";
59
+ } from "./chunk-Q6FPSY5O.js";
60
60
  import {
61
61
  getApiEndpoint
62
- } from "./chunk-MMZ6ZTVO.js";
62
+ } from "./chunk-TQC77XVE.js";
63
63
  import {
64
64
  toErrorMessage
65
65
  } from "./chunk-HNMXYYJR.js";
@@ -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-3BLB7QKO.js";
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 } : {}