nolo-cli 0.16.0-alpha.9 → 0.17.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (127) hide show
  1. package/{_executeModel-ABTND4KZ.js → _executeModel-WPNX5DH4.js} +46 -41
  2. package/{action-F5JACQBG.js → action-LT7BRFLK.js} +10 -9
  3. package/{addContentAction-AQXEYRBE.js → addContentAction-PL3KKBDH.js} +9 -8
  4. package/{addDialogAgentAction-EJHHJZWW.js → addDialogAgentAction-FCMSKYAF.js} +8 -7
  5. package/{agentDeleteCommand-ARMAV46L.js → agentDeleteCommand-L3357EFL.js} +28 -26
  6. package/{agentEmailCommands-BKPZP4UP.js → agentEmailCommands-N65AVLEI.js} +58 -53
  7. package/{agentListCommands-5J7RRXUO.js → agentListCommands-CH27FTI2.js} +27 -25
  8. package/{agentMachineCommands-VXWJXXPF.js → agentMachineCommands-PPK5HJZB.js} +26 -24
  9. package/{agentPullCommand-6HWUT3SW.js → agentPullCommand-ZZGU5KOY.js} +4 -4
  10. package/{agentRecordCommands-INDJINPN.js → agentRecordCommands-HTVXD4TT.js} +53 -48
  11. package/{agentRunCommand-KBN6HBY4.js → agentRunCommand-MGLVJUA5.js} +59 -51
  12. package/{agentRunControl-6ADXVYMR.js → agentRunControl-P75VPTGS.js} +24 -1
  13. package/{agentRuntimeLocal-AH2RYWGP.js → agentRuntimeLocal-QUTBSY3I.js} +22 -20
  14. package/{agentSlice-R4PELU57.js → agentSlice-DOGRCMWK.js} +9 -8
  15. package/{appDeleteCommands-FRWMPQNS.js → appDeleteCommands-FEEVXUBG.js} +25 -23
  16. package/{appDeployCommands-IRF3T35Z.js → appDeployCommands-C4HCGC4B.js} +25 -23
  17. package/{appDeployStatusCommands-ADFERYPU.js → appDeployStatusCommands-IR5ZUZBQ.js} +25 -23
  18. package/{appGetCommands-FTEOXWMS.js → appGetCommands-6RJGZ66Z.js} +25 -23
  19. package/{appListCommands-WBY7UWYD.js → appListCommands-VMTF5YZF.js} +25 -23
  20. package/{authCommand-QU5BXRBH.js → authCommand-WJZPOLSS.js} +13 -12
  21. package/{authCommands-YXGOXNBZ.js → authCommands-XTBV7OFZ.js} +6 -5
  22. package/{chunk-XPC5C7BK.js → chunk-3ND52WIL.js} +2 -2
  23. package/{chunk-SOTZ6RDN.js → chunk-3Q7WHGCB.js} +1 -1
  24. package/{chunk-WVDAUR2S.js → chunk-45BY7RLP.js} +2 -8
  25. package/{chunk-KKY4B2Q2.js → chunk-4PWB7JRR.js} +4 -1
  26. package/{chunk-6N4KODMN.js → chunk-4T5F7YZQ.js} +1 -1
  27. package/chunk-7BUYEZ6U.js +671 -0
  28. package/{chunk-AS3ZQ3O2.js → chunk-7OBMZCRD.js} +1 -1
  29. package/{chunk-4N7QA72L.js → chunk-AAODAAUQ.js} +1 -1
  30. package/{chunk-QLUFR47U.js → chunk-AL2V7U3E.js} +1 -1
  31. package/{chunk-MTU75CZ2.js → chunk-B5TOXZAK.js} +1 -1
  32. package/{chunk-VK2HVKAO.js → chunk-BT6K76S7.js} +192 -249
  33. package/{chunk-G63IH3ZK.js → chunk-CEFXYF66.js} +1 -1
  34. package/{chunk-RLCXU7A5.js → chunk-D3HVJJIA.js} +1 -1
  35. package/{chunk-B4KT7RN2.js → chunk-DKZFOK24.js} +18 -89
  36. package/chunk-DL6EPNIK.js +50 -0
  37. package/{chunk-OELQ67TN.js → chunk-EGPCU42M.js} +57 -7
  38. package/{chunk-IWLUTMYX.js → chunk-ELT65PZW.js} +2 -2
  39. package/chunk-FKXFCYVO.js +221 -0
  40. package/{chunk-5Y5KEB7V.js → chunk-FPKLD4KB.js} +4 -4
  41. package/{chunk-FMYTM25W.js → chunk-FVIPEIVX.js} +10 -3
  42. package/{chunk-66X4VSRC.js → chunk-HQPG2PIV.js} +41 -1
  43. package/{chunk-ZPPTWRPT.js → chunk-HV2A3B4W.js} +1 -1
  44. package/{chunk-ASZ2C44S.js → chunk-IOOMJJ4Z.js} +1 -1
  45. package/{setDialogExtraReferencesAction-LR6MSIXO.js → chunk-JLA4FXYC.js} +2 -17
  46. package/{chunk-IFPY2BIE.js → chunk-JP7REMYP.js} +18 -0
  47. package/{chunk-R6ALN5F5.js → chunk-L2MLZQXU.js} +3 -3
  48. package/{chunk-HSLJ7QER.js → chunk-L6NVTGI7.js} +1 -1
  49. package/{chunk-BHVBFI6B.js → chunk-MD3V54DA.js} +6 -6
  50. package/{chunk-ZVDRAEZL.js → chunk-MUCU6ATG.js} +1 -1
  51. package/{chunk-KFHN5NGJ.js → chunk-MVQ4TBSD.js} +1 -1
  52. package/{chunk-7HECYFOI.js → chunk-NEKFSXOP.js} +316 -212
  53. package/{chunk-LSHKV3S7.js → chunk-NVB267BZ.js} +397 -324
  54. package/{chunk-SGRDLYRZ.js → chunk-NYUXSXLY.js} +33 -14
  55. package/{chunk-PEDT43JF.js → chunk-PZCBZO4J.js} +2 -2
  56. package/{chunk-LZYEWFPK.js → chunk-QCJITMYO.js} +16 -10
  57. package/{chunk-OOSFSFMA.js → chunk-R5V5G73M.js} +2 -0
  58. package/{chunk-QLWU2KOT.js → chunk-RG2U2MTJ.js} +1 -1
  59. package/{chunk-2XA3QGOH.js → chunk-RRGVDPH3.js} +3 -3
  60. package/{chunk-EABWT43X.js → chunk-RVOUXDFU.js} +5 -5
  61. package/{chunk-JTINRTBT.js → chunk-SKDNBYZK.js} +2 -2
  62. package/{chunk-BG7AP3Q7.js → chunk-SNZV4QCE.js} +34 -18
  63. package/{chunk-KMQPSTMJ.js → chunk-TRT4I4UD.js} +2 -2
  64. package/{chunk-MYMMNKYL.js → chunk-TSIYZBTH.js} +156 -6
  65. package/{chunk-J3VQSU5W.js → chunk-UB4RYYNQ.js} +1 -1
  66. package/{chunk-YJKXGHJ6.js → chunk-UGUW3FHG.js} +4 -4
  67. package/{chunk-XECKIDGJ.js → chunk-UZY4BEBR.js} +938 -91
  68. package/chunk-V5R4NZP2.js +78 -0
  69. package/{chunk-GWESD7AS.js → chunk-VDNQF5VI.js} +6 -6
  70. package/{chunk-ZVC2PCZN.js → chunk-VGMJ6PDJ.js} +5 -5
  71. package/{chunk-W4NVOSFF.js → chunk-WFHXMLHZ.js} +1 -1
  72. package/{chunk-H33743XH.js → chunk-WJRJDX2W.js} +1 -1
  73. package/chunk-X4Q4UZEY.js +26 -0
  74. package/{chunk-RPDGJO4D.js → chunk-XHG22OEX.js} +4 -4
  75. package/{chunk-DVRHHFEA.js → chunk-XMLRJUU5.js} +1 -1
  76. package/{chunk-3S2VOMIF.js → chunk-XRZJGPFI.js} +7 -7
  77. package/{chunk-AFNJWHKL.js → chunk-YLRTBX4Y.js} +26 -14
  78. package/{chunk-4EME3YTO.js → chunk-YXTRNO5W.js} +3 -3
  79. package/{chunk-VAT72PDP.js → chunk-ZJZCMKOR.js} +103 -174
  80. package/{chunk-F6JSVFHX.js → chunk-ZVOZH2HW.js} +1 -1
  81. package/chunk-ZZ2MH7LE.js +84 -0
  82. package/{cliExecutor-K3F7DMRO.js → cliExecutor-DNE7TCC4.js} +2 -2
  83. package/codingSkills-36KN5NQT.js +48 -0
  84. package/{createAgentAutomationAction-3KKRAYGE.js → createAgentAutomationAction-PMOLEPGJ.js} +18 -17
  85. package/{createDialogAction-S7NMQ4TZ.js → createDialogAction-DPRTYNAK.js} +20 -19
  86. package/{createPageAction-2EFBT4LQ.js → createPageAction-JGZK3WAM.js} +24 -23
  87. package/{dbSlice-7KQH6GOU.js → dbSlice-CGSRFJN3.js} +8 -7
  88. package/{deleteFile-WPWVZE4B.js → deleteFile-WDZ3VM7B.js} +3 -3
  89. package/{dialogCommands-J7XFIQRD.js → dialogCommands-XED6DKLV.js} +26 -24
  90. package/{dialogSlice-LNRRBUIC.js → dialogSlice-KO4NRNKC.js} +18 -17
  91. package/{docCreateCommands-MKO5WB34.js → docCreateCommands-P6DYWHH3.js} +24 -22
  92. package/{docDeleteCommands-RCBHRKUE.js → docDeleteCommands-KUWXAMSN.js} +25 -23
  93. package/{docReadCommands-66527P4G.js → docReadCommands-ECW55TKB.js} +24 -22
  94. package/{docStore-67MYPX7P.js → docStore-6KMERNUY.js} +19 -18
  95. package/{docUpdateCommands-UT5HSLOJ.js → docUpdateCommands-5J4BTJQN.js} +24 -22
  96. package/{fetchMessages-KTNM7QAR.js → fetchMessages-BMGVZVSE.js} +4 -3
  97. package/{getPricing-P4XRJRZB.js → getPricing-RYY6OBA4.js} +2 -2
  98. package/{handleSendMessageAction-VZ7226PB.js → handleSendMessageAction-R3ZHTVU4.js} +19 -18
  99. package/index.js +68 -68
  100. package/{localDialogRead-2VRI24F4.js → localDialogRead-HQZPVIE3.js} +1 -1
  101. package/{localRuntimeDb-LGDF6FQP.js → localRuntimeDb-THJZGAOJ.js} +1 -1
  102. package/{machineCommands-ATA7OSBJ.js → machineCommands-JF2YL34J.js} +59 -54
  103. package/{machineWsRunDispatch-ZDCZ645H.js → machineWsRunDispatch-ON4AEOJL.js} +51 -46
  104. package/package.json +1 -1
  105. package/queryRunOverlay-O4LOMMPO.js +161 -0
  106. package/{read-CN3TNXIP.js → read-3FMPZPER.js} +3 -3
  107. package/{readDocTool-WF3675ED.js → readDocTool-VSYHKK3V.js} +1 -1
  108. package/{readlineWorkspace-UUNABTLB.js → readlineWorkspace-SUCINTL7.js} +302 -134
  109. package/{removeDialogAgentAction-YDHBFEGI.js → removeDialogAgentAction-OAGA2G3U.js} +10 -9
  110. package/{runAgentClientLoop-2A577WBM.js → runAgentClientLoop-OBD2AVEL.js} +41 -36
  111. package/runOverlayPresentation-ZO4VCWEU.js +11 -0
  112. package/{runtimeDoctorCommands-THIHX2SY.js → runtimeDoctorCommands-E2OUORHK.js} +6 -6
  113. package/setDialogExtraReferencesAction-JZEXA5SL.js +27 -0
  114. package/{setPrimaryDialogAgentAction-IIVDCY5C.js → setPrimaryDialogAgentAction-4ZUQQKDG.js} +26 -17
  115. package/{settingSlice-O23YDK2O.js → settingSlice-7MNKHZ6R.js} +9 -8
  116. package/{skillDiscovery-6M2BZUFN.js → skillDiscovery-KJWT7JBU.js} +3 -3
  117. package/{spaceCommands-UNZVR2OS.js → spaceCommands-32NTNLHS.js} +27 -25
  118. package/{spaceSlice-MC7FYPMZ.js → spaceSlice-P7VOXLY6.js} +18 -17
  119. package/{streamAgentChatTurn-IEKPNM33.js → streamAgentChatTurn-UHEMNI3X.js} +91 -48
  120. package/{tableCommands-3P7MJ3PF.js → tableCommands-BEQAGE4I.js} +1 -1
  121. package/{tools-E6FHKTCF.js → tools-BMXIXHMB.js} +31 -26
  122. package/{tuiSummaryLlmCaller-QHPDD4WP.js → tuiSummaryLlmCaller-VUNVBRX3.js} +3 -3
  123. package/types-ZSTJ7MPR.js +7 -0
  124. package/{updateDialogTitleAction-SQJEEW2K.js → updateDialogTitleAction-LJBDYZLH.js} +21 -20
  125. package/{chunk-O4BU24WZ.js → chunk-6Y7A3OQQ.js} +3 -3
  126. package/{chunk-CMKUBIGW.js → chunk-X7W4TNB4.js} +3 -3
  127. package/{localRuntimeAuthority-TEGCOWX4.js → localRuntimeAuthority-4IXJCHZ7.js} +3 -3
@@ -1,12 +1,12 @@
1
1
  import {
2
2
  ANTIGRAVITY_CLOUD_CODE_BASE_URL,
3
3
  isAntigravityOAuthAgent
4
- } from "./chunk-HSLJ7QER.js";
4
+ } from "./chunk-L6NVTGI7.js";
5
5
  import {
6
6
  clipMultilineText,
7
7
  fetchAndSerializeTable,
8
8
  waitForAbortableDelay
9
- } from "./chunk-7HECYFOI.js";
9
+ } from "./chunk-NEKFSXOP.js";
10
10
  import {
11
11
  createDrainExhaustedResponse,
12
12
  isCoreDrainingBody,
@@ -16,27 +16,29 @@ import {
16
16
  } from "./chunk-RQSOAMPJ.js";
17
17
  import {
18
18
  slateToSimplifiedMarkdown
19
- } from "./chunk-6N4KODMN.js";
19
+ } from "./chunk-4T5F7YZQ.js";
20
20
  import {
21
21
  extractCategorizedMentions
22
22
  } from "./chunk-VP4WJWKW.js";
23
- import {
24
- resolvePageSkillMetadata
25
- } from "./chunk-VC6OZXO5.js";
26
23
  import {
27
24
  fetchAndCacheMessages,
28
25
  shouldUseServerProxy
29
- } from "./chunk-LSHKV3S7.js";
26
+ } from "./chunk-NVB267BZ.js";
30
27
  import {
31
28
  fetchServerSyncedCredential
32
- } from "./chunk-BHVBFI6B.js";
29
+ } from "./chunk-MD3V54DA.js";
30
+ import {
31
+ buildSkillGuidancePromptBlock,
32
+ extractRuntimePageCapabilities,
33
+ resolveSkillGraphFromRoots
34
+ } from "./chunk-7BUYEZ6U.js";
33
35
  import {
34
36
  buildCurrentTimeBlock,
35
37
  buildIdentityBlock,
36
38
  buildRuntimeGuidanceBlocks,
37
39
  requiresBareImageUrl,
38
40
  toBareImageUrlMessages
39
- } from "./chunk-ASZ2C44S.js";
41
+ } from "./chunk-IOOMJJ4Z.js";
40
42
  import {
41
43
  convertMessagesToResponsesInput,
42
44
  preserveAgentStateFields
@@ -46,54 +48,51 @@ import {
46
48
  isOpenAiResponsesModel,
47
49
  resolvePlatformChatCompletionsEndpoint,
48
50
  resolvePlatformResponsesEndpoint
49
- } from "./chunk-ZVDRAEZL.js";
50
- import {
51
- canonicalizeToolNames
52
- } from "./chunk-B4KT7RN2.js";
51
+ } from "./chunk-MUCU6ATG.js";
53
52
  import {
54
53
  estimateTokenCount
55
- } from "./chunk-OELQ67TN.js";
54
+ } from "./chunk-EGPCU42M.js";
55
+ import {
56
+ createFileCredentialBroker
57
+ } from "./chunk-5CS33IBL.js";
56
58
  import {
57
59
  clampReasoningEffort,
58
60
  getModelConfig,
59
61
  isModelSupportReasoningEffort
60
- } from "./chunk-66X4VSRC.js";
62
+ } from "./chunk-HQPG2PIV.js";
61
63
  import {
62
- createFileCredentialBroker
63
- } from "./chunk-5CS33IBL.js";
64
+ toErrorMessage
65
+ } from "./chunk-HNMXYYJR.js";
66
+ import {
67
+ createSpaceKey
68
+ } from "./chunk-ELT65PZW.js";
64
69
  import {
65
70
  MEMORY_USE_GUIDANCE,
66
71
  wrapHistoricalSummaryWithReplayGuard
67
- } from "./chunk-KKY4B2Q2.js";
72
+ } from "./chunk-4PWB7JRR.js";
73
+ import {
74
+ canonicalizeToolNames
75
+ } from "./chunk-ZZ2MH7LE.js";
68
76
  import {
69
77
  extractCustomId
70
78
  } from "./chunk-DFFIZ25G.js";
71
- import {
72
- toErrorMessage
73
- } from "./chunk-HNMXYYJR.js";
74
79
  import {
75
80
  isDeepInfraKimiModel,
76
81
  isFireworksKimiModel,
77
82
  resolveFireworksKimiModel
78
83
  } from "./chunk-O6W2O2DA.js";
79
- import {
80
- createSpaceKey
81
- } from "./chunk-IWLUTMYX.js";
82
84
  import {
83
85
  read
84
- } from "./chunk-3S2VOMIF.js";
85
- import {
86
- asNonEmptyStringArray
87
- } from "./chunk-I42VC5KR.js";
86
+ } from "./chunk-XRZJGPFI.js";
88
87
  import {
89
88
  asTrimmedLowercaseString
90
89
  } from "./chunk-QSJ3HFEF.js";
91
90
  import {
92
91
  getRuntimeServerContext
93
- } from "./chunk-DVRHHFEA.js";
92
+ } from "./chunk-XMLRJUU5.js";
94
93
  import {
95
94
  isAbortError
96
- } from "./chunk-OOSFSFMA.js";
95
+ } from "./chunk-R5V5G73M.js";
97
96
  import {
98
97
  asTrimmedString
99
98
  } from "./chunk-3EUW3WEO.js";
@@ -107,126 +106,6 @@ import {
107
106
  asOptionalTrimmedString
108
107
  } from "./chunk-G3SUCT4W.js";
109
108
 
110
- // packages/ai/skills/referenceRuntime.ts
111
- var joinUniqueStrings = (...groups) => Array.from(new Set(groups.flatMap((items) => asNonEmptyStringArray(items))));
112
- var extractRuntimePageCapabilities = (content) => {
113
- const meta = resolvePageSkillMetadata(content);
114
- const directTools = asNonEmptyStringArray(content?.tools);
115
- const skillConfig = meta?.skillConfig;
116
- const skillTools = skillConfig?.toolNames ?? [];
117
- const softSkillHints = asNonEmptyStringArray([
118
- skillConfig?.name,
119
- ...meta?.recommendedSkills ?? []
120
- ]);
121
- return {
122
- directTools,
123
- hardSkillKeys: meta?.requiredSkills ?? [],
124
- softSkillKeys: meta?.recommendedSkills ?? [],
125
- hardSkillTools: meta?.kind === "skill" ? skillTools : [],
126
- softSkillHints,
127
- promptPatches: skillConfig?.promptPatch ? [skillConfig.promptPatch] : [],
128
- shouldUpgradeReference: directTools.length > 0 || meta?.kind === "skill" || !!skillConfig?.promptPatch
129
- };
130
- };
131
- var buildSkillGuidancePromptBlock = (options) => {
132
- const title = asOptionalTrimmedString(options.title) ?? "--- \u6280\u80FD\u63D0\u793A ---";
133
- const recommendedSkillHints = joinUniqueStrings(options.recommendedSkillHints);
134
- const skillPromptPatches = joinUniqueStrings(options.skillPromptPatches);
135
- if (recommendedSkillHints.length === 0 && skillPromptPatches.length === 0) {
136
- return "";
137
- }
138
- return [
139
- title,
140
- recommendedSkillHints.length > 0 ? `\u4EE5\u4E0B\u6280\u80FD\u4E0E\u5F53\u524D\u4EFB\u52A1\u66F4\u76F8\u5173\uFF0C\u53EF\u4F18\u5148\u8003\u8651\uFF1A${recommendedSkillHints.join("\u3001")}` : "",
141
- ...skillPromptPatches
142
- ].filter(Boolean).join("\n");
143
- };
144
- var buildIdentifierCandidates = (identifier, contentByKey) => {
145
- const trimmed = identifier.trim();
146
- if (!trimmed || contentByKey.has(trimmed)) return trimmed;
147
- const candidateToKey = /* @__PURE__ */ new Map();
148
- for (const [key, page] of Array.from(contentByKey.entries())) {
149
- const meta = resolvePageSkillMetadata(page);
150
- for (const value of [key, page?.dbKey, page?.title, meta?.skillConfig?.id, meta?.skillConfig?.name]) {
151
- const trimmedValue = asOptionalTrimmedString(value);
152
- if (trimmedValue) {
153
- candidateToKey.set(trimmedValue, key);
154
- }
155
- }
156
- }
157
- return candidateToKey.get(trimmed) ?? trimmed;
158
- };
159
- async function resolveSkillGraphFromRoots(options) {
160
- const contentByKey = new Map(options.contentByKey ?? []);
161
- const requiredTools = /* @__PURE__ */ new Set();
162
- const recommendedTools = /* @__PURE__ */ new Set();
163
- const recommendedSkillHints = /* @__PURE__ */ new Set();
164
- const skillPromptPatches = /* @__PURE__ */ new Set();
165
- const visits = [];
166
- const visited = /* @__PURE__ */ new Set();
167
- const loadPageCached = async (identifier) => {
168
- const resolvedIdentifier = buildIdentifierCandidates(identifier, contentByKey);
169
- if (!resolvedIdentifier) return null;
170
- if (contentByKey.has(resolvedIdentifier)) {
171
- return contentByKey.get(resolvedIdentifier) ?? null;
172
- }
173
- const page = await options.loadPage(resolvedIdentifier);
174
- if (page) {
175
- contentByKey.set(resolvedIdentifier, page);
176
- if (page.dbKey) {
177
- contentByKey.set(page.dbKey, page);
178
- }
179
- }
180
- return page ?? null;
181
- };
182
- const visit = async (identifier, mode, sourceLabel) => {
183
- const page = await loadPageCached(identifier);
184
- if (!page?.dbKey) return;
185
- const visitKey = `${mode}:${page.dbKey}`;
186
- if (visited.has(visitKey)) return;
187
- visited.add(visitKey);
188
- const meta = resolvePageSkillMetadata(page);
189
- const directTools = canonicalizeToolNames(page.tools ?? []);
190
- const skillTools = canonicalizeToolNames(meta?.skillConfig?.toolNames ?? []);
191
- const mergedTools = joinUniqueStrings(directTools, skillTools);
192
- visits.push({
193
- dbKey: page.dbKey,
194
- title: page.title,
195
- mode,
196
- sourceLabel,
197
- meta
198
- });
199
- if (mode === "required") {
200
- mergedTools.forEach((toolName) => requiredTools.add(toolName));
201
- if (meta?.skillConfig?.promptPatch) {
202
- skillPromptPatches.add(meta.skillConfig.promptPatch);
203
- }
204
- } else {
205
- mergedTools.forEach((toolName) => recommendedTools.add(toolName));
206
- if (meta?.skillConfig?.name) {
207
- recommendedSkillHints.add(meta.skillConfig.name);
208
- }
209
- }
210
- const nextHard = meta?.requiredSkills ?? meta?.skillConfig?.requiredSkills ?? [];
211
- const nextSoft = meta?.recommendedSkills ?? meta?.skillConfig?.recommendedSkills ?? [];
212
- if (mode === "required") {
213
- await Promise.all(nextHard.map((childKey) => visit(childKey, "required", page.dbKey)));
214
- await Promise.all(nextSoft.map((childKey) => visit(childKey, "recommended", page.dbKey)));
215
- return;
216
- }
217
- await Promise.all([...nextHard, ...nextSoft].map((childKey) => visit(childKey, "recommended", page.dbKey)));
218
- };
219
- await Promise.all(options.roots.map((root) => visit(root.identifier, root.mode, root.sourceLabel)));
220
- return {
221
- requiredTools: Array.from(requiredTools),
222
- recommendedTools: Array.from(recommendedTools),
223
- recommendedSkillHints: Array.from(recommendedSkillHints),
224
- skillPromptPatches: Array.from(skillPromptPatches),
225
- contentByKey,
226
- visits
227
- };
228
- }
229
-
230
109
  // packages/ai/agent/referenceUtils.ts
231
110
  function mergeReferences(base, extra) {
232
111
  const safeBase = Array.isArray(base) ? base : [];
@@ -761,38 +640,63 @@ var CONTEXT_USAGE_INSTRUCTIONS = `\u53C2\u8003\u8D44\u6599\u4F7F\u7528\u8BF4\u66
761
640
  - \u5F53\u901A\u7528\u6307\u4EE4\u4E0E\u66F4\u5177\u4F53\u7684"\u6309 Agent / \u6309\u6587\u6863"\u7684\u89C4\u5219\u53D1\u751F\u51B2\u7A81\u65F6\uFF0C\u5FC5\u987B\u4F18\u5148\u9075\u5B88\u66F4\u5177\u4F53\u3001\u4F18\u5148\u7EA7\u66F4\u9AD8\u7684\u89C4\u5219\u3002`;
762
641
  var AGENT_ORCHESTRATION_RUN_INSTRUCTIONS = `--- \u591A Agent \u7F16\u6392\uFF08\u540E\u53F0 Run\uFF09 ---
763
642
  \u4F60\u53EF\u7528 startAgentRun \u540E\u53F0\u542F\u52A8\u5B50 Agent\uFF08fork+exec\uFF0C\u8FD4\u56DE runId\uFF09\uFF0C\u7528 controlAgentRun \u89C2\u5BDF/\u505C\u6B62\uFF08wait+signal+proc\uFF09\u3002\u6838\u5FC3\u7EAA\u5F8B\uFF08\u53CD\u9762\u6559\u6750\uFF1A\u5B50\u4EE3\u7406\u5D29\u6E83/\u6302\u8D77\u800C\u7F16\u6392\u5668\u6BEB\u65E0\u5BDF\u89C9\uFF09\uFF1A
764
- 1. \u5148\u53D1\u73B0\u518D\u6D3E\u53D1\u3002\u8C03\u7528 listAgents \u8BFB\u53D6\u5B89\u5168\u6458\u8981\u3002\u9009\u4EBA\u6309\u4F18\u5148\u7EA7\uFF1A\u7279\u5B9A\u5DE5\u5177\u9700\u6C42 \u2192 \u4EFB\u52A1\u6863\u4E0E\u6210\u672C/\u80FD\u529B\u5339\u914D \u2192 \u80DC\u4EFB\u8005\u4E2D\u7684 isFavorite \u2192 modelAbility / inputPrice/outputPrice\u3002
765
- - \u6D3E\u53D1\u524D\u5148\u5224\u65AD"\u8BE5\u4E0D\u8BE5\u6D3E\u53D1"\uFF1A\u7236 agent \u8F6E\u8BE2 + \u4E0A\u4E0B\u6587\u4F20\u9012\u672C\u8EAB\u6709\u6210\u672C\uFF0C\u5B50\u4EE3\u7406\u5355\u4EF7\u4F4E\u4E0D\u7B49\u4E8E\u603B\u6210\u672C\u66F4\u4F4E\u3002\u5C0F\u4EFB\u52A1\u76F4\u63A5\u505A\uFF1B\u53EA\u6709\u4EFB\u52A1\u5927\u5230\u5355 agent \u88C5\u4E0D\u4E0B\u3001\u6216\u53EF\u5E76\u884C\u7701\u65F6\u95F4\uFF0C\u7F16\u6392\u624D\u5212\u7B97\u3002
766
- - \u5148\u4F30\u4EFB\u52A1\u6863\uFF1A\u5FAE/\u7B80\u5355\uFF08\u22642 \u6B65\u3001\u6587\u6848\u3001\u5355\u70B9 polish\uFF09\uFF5C\u4E2D\uFF08\u591A\u6587\u4EF6\u8BFB\u6539\u9A8C\uFF09\uFF5C\u9AD8\uFF08\u67B6\u6784\u3001\u6DF1 review\u3001\u9AD8\u98CE\u9669\u63A8\u7406\uFF09\u3002
643
+ 1. \u5148\u53D1\u73B0\u518D\u6D3E\u53D1\u3002\u8C03\u7528 listAgents\u3002**\u8FD4\u56DE\u7684 agents \u6570\u7EC4\u91CC\u6BCF\u4E2A\u6761\u76EE\u76F4\u63A5\u7ED9\u51FA\u53EF\u6D3E\u53D1\u7684 agentKey\u3001\u4EF7\u683C\u3001tools\u3001\u4EE5\u53CA isOwned/isFavorite \u6807\u8BB0\u2014\u2014\u9009\u4EBA\u552F\u4E00\u4F9D\u636E\u5C31\u662F\u8FD9\u6761\u8BB0\u5F55\uFF0C\u76F4\u63A5\u4ECE agentKey \u5B57\u6BB5\u53D6\u503C\uFF0C\u4E0D\u8981\u624B\u5DE5\u62FC\u63A5\u6216\u63A8\u65AD\u3002** \u9009\u4EBA\u4F18\u5148\u7EA7\uFF1A\u7279\u5B9A\u5DE5\u5177\u9700\u6C42\uFF08\u770B tools \u662F\u5426\u8986\u76D6\uFF09\u2192 \u81EA\u5EFA agent \u4F18\u5148\uFF08isOwned=true\uFF0C\u8D70\u7528\u6237\u81EA\u5DF1\u914D\u989D\u4E0D\u82B1\u5E73\u53F0 credits\uFF09\u2192 \u6210\u672C/\u80FD\u529B\u5339\u914D\uFF08\u770B inputPrice\uFF09\u2192 \u80DC\u4EFB\u8005\u4E2D isFavorite \u2192 modelAbility\u3002
644
+ - \u6D3E\u53D1\u65F6**\u539F\u6837\u590D\u5236\u8BE5\u6761\u8BB0\u5F55\u7684 agentKey** \u4F20\u7ED9 startAgentRun / callAgent\uFF0C\u4E0D\u62FC\u63A5\u3001\u4E0D\u63A8\u65AD\u3001\u4E0D\u6362\u683C\u5F0F\u3002
645
+ - \u6D3E\u53D1\u524D\u5148\u5224\u65AD"\u62C6\u4E0D\u62C6"\uFF1A\u672C\u7CFB\u7EDF\u9ED8\u8BA4\u5E76\u53D1\u3002\u51E1\u662F\u80FD\u62C6\u6210\u591A\u4E2A\u81EA\u5305\u542B\u5B50\u4EFB\u52A1\u7684\uFF0C\u5C31**\u5E76\u884C\u6D3E\u53D1**\uFF08\u4E00\u6B21 startAgentRun \u591A\u4E2A\uFF09\uFF0C\u4E0D\u8981\u81EA\u5DF1\u95F7\u5934\u4E32\u884C\u505A\u3002\u53EA\u6709\u5355\u4E2A\u539F\u5B50\u4EFB\u52A1\uFF08\u65E0\u6CD5\u62C6\u5206\u3001\u5FC5\u987B\u4E00\u6B65\u5B8C\u6210\uFF09\u624D\u81EA\u5DF1\u76F4\u63A5\u505A\u3002
646
+ - \u5148\u4F30\u4EFB\u52A1\u6863\uFF1A\u5FAE/\u7B80\u5355\uFF08\u22642 \u6B65\u3001\u6587\u6848\u3001\u5355\u70B9 polish\uFF09\uFF5C\u4E2D\uFF08\u591A\u6587\u4EF6\u8BFB\u6539\u9A8C\uFF09\uFF5C\u9AD8\uFF08\u67B6\u6784\u3001\u6DF1 review\u3001\u9AD8\u98CE\u9669\u63A8\u7406\uFF09\u3002\u591A\u8DEF\u72EC\u7ACB\u5B50\u4EFB\u52A1\u4F18\u5148\u5E76\u884C\uFF0C\u800C\u4E0D\u662F\u9010\u8DEF\u7B49\u5F85\u3002
767
647
  - \u81EA\u52A8\u59D4\u6258\u7684\u9AD8\u7AEF\u6A21\u578B\u786C\u95E8\uFF1AOpus 5\u3001GPT-5.6 Sol \u53CA\u540C\u7EA7\u9876\u6863\u4EC5\u7528\u4E8E\u590D\u6742\u67B6\u6784/\u8DE8\u57DF\u8BBE\u8BA1\u3001\u91CD\u5927\u4E8B\u6545\u6216\u5B89\u5168/\u6570\u636E\u5B8C\u6574\u6027\u9AD8\u98CE\u9669\u5206\u6790\u3001\u6DF1 review\uFF08\u89C1\u4E0B\u91CF\u5316\u95E8\u69DB\uFF09\u3001\u6216\u4F4E\u4EF7\u80DC\u4EFB\u6A21\u578B\u5DF2\u6709\u5931\u8D25\u8BC1\u636E\u540E\u5347\u7EA7\u3002\u5FAE\u5C0F\u3001\u7B80\u5355\u548C\u666E\u901A\u4E2D\u7B49\u4EFB\u52A1\u7981\u6B62\u81EA\u52A8\u9009\u62E9\uFF1B\u7528\u6237\u660E\u786E\u70B9\u540D\u4F7F\u7528\u4E0D\u53D7\u6B64\u81EA\u52A8\u59D4\u6258\u9650\u5236\u3002
768
- - \u6DF1 review \u91CF\u5316\u95E8\u69DB\uFF08\u8FBE\u5230\u624D\u5141\u8BB8\u9876\u6863\uFF09\uFF1A\u6539\u52A8\u6587\u4EF6\u6570 \u2265 30 \u4E14\u6D89\u53CA\u8BA1\u8D39/\u5B89\u5168/\u6570\u636E\u5B8C\u6574\u6027/\u6838\u5FC3\u8DEF\u7531\u5173\u952E\u8DEF\u5F84\uFF1B\u6216\u4F4E\u4EF7 reviewer \u5DF2\u7ED9\u51FA BLOCK/\u901A\u9053\u5931\u8D25\u540E\u7684\u5347\u7EA7\u3002\u666E\u901A review \u9ED8\u8BA4\u6D3E\u4E2D\u6863\u4F4E\u4EF7\u6A21\u578B\uFF08\u5982 DeepSeek V4 Flash\u3001agy-flash\u3001GLM \u7B49\uFF09\uFF0C\u4E0D\u6D3E\u9876\u6863\u3002
769
- - \u9009\u62E9\u9876\u6863\u524D\u5FC5\u987B\u5728\u56DE\u590D\u4E2D\u7B80\u8FF0\u590D\u6742\u6027\u7406\u7531\uFF08\u5F15\u7528\u91CF\u5316\u95E8\u69DB\uFF09\uFF1B\u5931\u8D25\u5347\u7EA7\u5FC5\u987B\u6307\u51FA\u4F4E\u4EF7\u5019\u9009\u7684\u5177\u4F53\u5931\u8D25\u8BC1\u636E\u3002\u7981\u6B62\u51ED\u540D\u5B57\u7F16\u9020\u7EC6\u80FD\u529B\uFF0C\u4F46\u5141\u8BB8\u7528\u4EF7\u683C\u3001modelAbility \u53CA\u660E\u663E\u9876\u6863\u65CF\u7CFB\u505A\u7C97\u6863\u4F4D\u5339\u914D\u3002
648
+ - \u6DF1 review \u91CF\u5316\u95E8\u69DB\uFF08\u8FBE\u5230\u624D\u5141\u8BB8\u9876\u6863\uFF09\uFF1A\u6539\u52A8\u6587\u4EF6\u6570 \u2265 30 \u4E14\u6D89\u53CA\u8BA1\u8D39/\u5B89\u5168/\u6570\u636E\u5B8C\u6574\u6027/\u6838\u5FC3\u8DEF\u7531\u5173\u952E\u8DEF\u5F84\uFF1B\u6216\u4F4E\u4EF7 reviewer \u5DF2\u7ED9\u51FA BLOCK/\u901A\u9053\u5931\u8D25\u540E\u7684\u5347\u7EA7\u3002\u666E\u901A review \u9ED8\u8BA4\u6D3E\u4E2D\u6863\u4F4E\u4EF7\u6A21\u578B\uFF0C**\u5E73\u53F0 DeepSeek V4 Flash \u662F\u9ED8\u8BA4\u4F18\u5148\u7684 reviewer \u5019\u9009\u4E4B\u4E00**\uFF08\u5E73\u53F0\u516C\u5F00 agent\u3001\u7A33\u5B9A\u53EF\u7528\u3001\u4F4E\u6210\u672C\u3001\u4E14\u4E0E\u7F16\u6392\u8005/\u9876\u6863\u5206\u5C5E\u4E0D\u540C\u6A21\u578B\u5BB6\u65CF\uFF0C\u5929\u7136\u6EE1\u8DB3"reviewer \u4E0D\u53EF\u662F\u81EA\u5DF1 + \u4E0D\u540C\u5BB6\u65CF\u4F18\u5148"\uFF09\uFF0C\u5176\u6B21\u662F agy-flash\u3001GLM \u7B49\u4E2D\u6863\u4F4E\u4EF7\u5019\u9009\uFF1B\u53EA\u6709\u4E0A\u8FF0\u4F4E\u4EF7\u901A\u9053\u90FD\u4E0D\u53EF\u7528/\u5DF2\u7ED9\u51FA\u5931\u8D25\u8BC1\u636E\u624D\u6D3E\u9876\u6863\u3002
649
+ - \u9009\u62E9\u9876\u6863\u524D\u5FC5\u987B\u5728\u56DE\u590D\u4E2D\u7B80\u8FF0\u590D\u6742\u6027\u7406\u7531\uFF08\u5F15\u7528\u91CF\u5316\u95E8\u69DB\uFF09\uFF1B\u5931\u8D25\u5347\u7EA7\u5FC5\u987B\u6307\u51FA\u4F4E\u4EF7\u5019\u9009\u7684\u5177\u4F53\u5931\u8D25\u8BC1\u636E\u3002\u7981\u6B62\u51ED\u540D\u5B57\u7F16\u9020\u7EC6\u80FD\u529B\uFF1B\u4EF7\u683C\u3001modelAbility \u53CA\u660E\u663E\u9876\u6863\u65CF\u7CFB\u4ECE\u5361\u7247\u53D6\u5373\u53EF\uFF0C\u4E0D\u51ED\u7A7A\u731C\u3002
770
650
  - \u901A\u9053\u9884\u68C0\uFF1A\u6D3E\u53D1\u524D\u8DF3\u8FC7\u5DF2\u77E5\u574F\u901A\u9053\uFF08\u914D\u7F6E\u7F3A\u5931/\u533A\u57DF\u9650\u5236/\u7F51\u5173 400 \u7684 provider\uFF09\uFF0C\u907F\u514D\u6D6A\u8D39\u8F6E\u8BE2\u56DE\u5408\u3002
771
- 2. coding \u662F\u9ED8\u8BA4\u80FD\u529B\u3002tools \u53EA\u7528\u4E8E\u6D4F\u89C8\u5668\u3001\u56FE\u7247\u3001\u8868\u683C\u3001\u90AE\u4EF6\u3001\u6570\u636E\u5E93\u7B49\u7279\u5B9A\u5DE5\u5177\u4EFB\u52A1\uFF1B\u4E0D\u8981\u56E0\u4E3A coding agent \u7684 tools \u6458\u8981\u4E3A\u7A7A\u5C31\u6DD8\u6C70\u5B83\u3002
772
- 3. listAgents \u8FD4\u56DE\u7684 id\u3001publicKey\u3001handle \u53EA\u662F\u5019\u9009\u6807\u8BC6\u3002\u9009\u4E2D\u540E\u4F18\u5148\u8C03\u7528 readAgent \u89E3\u6790\u53EF\u8FD0\u884C\u7684 agentKey\uFF0C\u518D\u628A\u8BE5 agentKey \u4F20\u7ED9 startAgentRun\uFF1B\u4E0D\u8981\u51ED\u5C55\u793A\u540D\u79F0\u6216 id \u731C key\uFF0C\u4E5F\u4E0D\u8981\u7D22\u53D6 prompt\u3001\u5BC6\u94A5\u6216\u6570\u636E\u5E93 key \u6765\u9009\u4EBA\u3002\u6CA1\u6709 readAgent \u65F6\u53EA\u80FD\u4F7F\u7528\u5DF2\u6709\u4E0A\u4E0B\u6587\u4E2D\u660E\u786E\u7684 agentKey\u3002
651
+ - \u7701\u94B1\u4F18\u5148\uFF1A\u540C\u7B49\u80DC\u4EFB\u4E0B\u4F18\u5148\u6D3E\u53D1**\u81EA\u5EFA agent**\uFF08isOwned=true\uFF0C\u81EA\u5DF1\u521B\u5EFA\u3001\u7528\u81EA\u5DF1\u7684 API key \u6216\u81EA\u5DF1\u7684 OAuth \u51ED\u8BC1\uFF09\u2014\u2014\u8FD9\u7C7B\u6D3E\u53D1\u8D70\u7528\u6237\u81EA\u5DF1\u7684\u914D\u989D\uFF0C\u4E0D\u6D88\u8017\u5E73\u53F0 credits\uFF1B\u5176\u6B21\u662F apiSource="custom" \u7684 agent\u3002\u4EC5\u5F53\u81EA\u5EFA/custom \u65E0\u80DC\u4EFB\u5019\u9009\u65F6\u624D\u6D3E\u53D1 apiSource="platform" \u7684 agent\u3002\u4ECE agents \u8BB0\u5F55\u7684 isOwned / apiSource / isFavorite \u5B57\u6BB5\u76F4\u63A5\u5224\u65AD\uFF0C\u4E0D\u8981\u731C\u3002
652
+ 2. **coding \u662F\u9ED8\u8BA4\u80FD\u529B\u2014\u2014\u684C\u9762\u7AEF\u548C CLI \u8FD0\u884C\u65F6\u9ED8\u8BA4\u62E5\u6709\u5168\u90E8\u4EE3\u7801\u5DE5\u5177\uFF08writeFile\u3001editFile\u3001execBash\u3001applyEdit\u3001gitCommit \u7B49\uFF09\uFF0C"tools" \u5B57\u6BB5\u53EA\u53CD\u6620\u989D\u5916\u80FD\u529B\uFF08\u6D4F\u89C8\u5668\u3001\u56FE\u7247\u3001\u8868\u683C\u3001\u90AE\u4EF6\u3001\u6570\u636E\u5E93\u7B49\uFF09**\u3002\u4E0D\u8981\u56E0\u4E3A coding agent \u7684 tools \u6458\u8981\u4E3A\u7A7A\u5C31\u5224\u5B9A\u5B83\u4E0D\u80FD\u5199\u4EE3\u7801\uFF1B\u4E5F\u4E0D\u8981\u56E0\u4E3A\u67D0\u4E2A agent \u6709 writeFile \u5C31\u8BEF\u8BFB\u6210\u5B83\u300C\u989D\u5916\u300D\u62E5\u6709\u8BE5\u5DE5\u5177\uFF0C\u90A3\u53EA\u662F\u9ED8\u8BA4\u57FA\u7EBF\u7684\u4E00\u90E8\u5206\u3002\u9009\u4EBA\u65F6\u53EA\u4EE5\u5DE5\u5177\u80FD\u529B\u662F\u5426\u8986\u76D6\u4EFB\u52A1\u4E3A\u51C6\uFF0C\u4E0D\u4EE5 tools \u5217\u8868\u957F\u77ED\u8BBA\u80DC\u4EFB\u3002
653
+ 3. **agentKey \u53EA\u63A5\u53D7 listAgents \u8FD4\u56DE\u7684\u7CBE\u786E dbKey \u5B57\u6BB5\uFF08owned: agent-<userId>-<id>\uFF1Bpublic: agent-pub-<id>\uFF09\uFF0C\u4E0D\u652F\u6301 alias/handle/bare id**\u3002listAgents \u6BCF\u4E2A\u6761\u76EE\u8FD4\u56DE\u53EF\u8FD0\u884C\u7684 agentKey\uFF0C\u76F4\u63A5\u7167\u6284\u4F20\u7ED9 startAgentRun / callAgent \u5373\u53EF\uFF1BreadAgent \u4E5F\u8FD4\u56DE\u540C\u6837\u7684 agentKey\u3002readAgent \u53EA\u7528\u4E8E\u786E\u8BA4\u67D0 agent \u7684\u5B8C\u6574\u80FD\u529B/\u914D\u7F6E\uFF08\u5982\u662F\u5426\u9700\u8981\u9876\u6863\u3001\u51ED\u8BC1\u662F\u5426\u5DF2\u914D\uFF09\u3002
654
+ - \u4E25\u7981\u624B\u5DE5\u62FC\u63A5 "agent-<userId>-<id>"\uFF1AdbKey \u672B\u6BB5\u53EF\u80FD\u662F alias/handle \u800C\u975E id\u3002\u5FC5\u987B\u7528 listAgents / readAgent \u8FD4\u56DE\u7684 agentKey\uFF0C\u4E0D\u5F97\u81EA\u884C\u62FC\u3002
655
+ - \u6362\u4EBA\u3001\u6362\u5019\u9009\u3001\u6216\u4E0A\u6B21 key \u6D3E\u53D1\u62A5 not found \u65F6\uFF0C\u91CD\u65B0\u7528 listAgents / readAgent \u62FF\u6700\u65B0 key\uFF0C\u4E0D\u5F97\u5957\u7528\u4E0A\u4E00\u4E2A key \u7684\u62FC\u63A5\u683C\u5F0F\u3002
656
+ - \u5931\u8D25\u75C7\u72B6\uFF1A\u51FA\u73B0\u300Cagent not found\u300D\u300CLocal agent config not found: \u2026\u300D\u65F6\uFF0C\u5148\u590D\u6838 key \u662F\u5426\u7167\u6284\u81EA listAgents / readAgent\uFF08\u4E0D\u8981\u624B\u5DE5\u62FC\u3001\u4E0D\u8981\u4F20 name\uFF09\uFF0C\u7981\u6B62\u636E\u6B64\u63A8\u65AD\u51ED\u8BC1\u7F3A\u5931\u3001\u672C\u5730\u914D\u7F6E\u6587\u4EF6\u4E22\u5931\u6216\u901A\u9053\u5168\u6302\u3002
657
+ - \u4E0D\u8981\u7D22\u53D6 prompt\u3001\u5BC6\u94A5\u6216\u6570\u636E\u5E93 key \u6765\u9009\u4EBA\u3002
773
658
  4. \u6D3E\u53D1\u540E\u8F7B\u8F6E\u8BE2\u3002startAgentRun \u62FF\u5230 runId \u540E\uFF0C\u7528 controlAgentRun(action:"status", runId, tailLines:0) \u8F6E\u8BE2\u2014\u2014tailLines:0 \u53EA\u8FD4\u56DE\u72B6\u6001\u6458\u8981\uFF08\u4E0D\u62C9\u65E5\u5FD7\uFF09\uFF0C\u7701 token\u3002\u6BCF\u6B21\u8F6E\u8BE2 = \u7236 agent \u591A\u4E00\u4E2A turn = \u5168\u524D\u7F00\u91CD\u65B0\u8BA1\u4EF7\uFF0C\u6240\u4EE5\u95F4\u9694\u4E0D\u8981\u592A\u5BC6\uFF08\u5EFA\u8BAE 10\u201315s\uFF09\uFF0C\u4E0D\u8981 5s \u4E00\u6B21\u3002\u591A\u4E2A\u72EC\u7ACB\u5B50\u4EFB\u52A1\u4F18\u5148\u5E76\u884C\u6D3E\u53D1\uFF08\u4E00\u6B21 startAgentRun \u591A\u4E2A\uFF09\uFF0C\u7236 agent 1 \u4E2A turn \u6D3E\u53D1 + 1 \u4E2A turn \u6536\u96C6\u7ED3\u679C\uFF0C\u800C\u975E\u4E32\u884C\u7B49\u5F85 N \u4E2A turn\u3002
774
659
  5. \u5F02\u5E38\u624D\u62C9\u65E5\u5FD7\u3002tailLines:0 \u663E\u793A running \u4E14\u8FDB\u5EA6\u6B63\u5E38 \u2192 \u7EE7\u7EED\u8F7B\u8F6E\u8BE2\uFF1B\u53EA\u6709 status=failed/\u8D85\u65F6/\u7591\u4F3C\u5361\u6B7B\u624D controlAgentRun(action:"status", runId, tailLines:30) \u62C9\u65E5\u5FD7\u8BCA\u65AD\u3002\u6B63\u5E38\u5B8C\u6210\u7684\u5B50 agent \u770B\u72B6\u6001\u6458\u8981\u5373\u53EF\uFF0C\u4E0D\u5FC5\u62C9\u5B8C\u6574\u65E5\u5FD7\u3002
775
- 6. stop \u524D\u5148\u770B\u65E5\u5FD7\u3002\u7528 status(tailLines:30) \u5224\u65AD\u662F\u771F\u5361\u6B7B\u8FD8\u662F\u6B63\u5E38\u8DD1\uFF0C\u786E\u8BA4\u9700\u8981\u53EB\u505C\u518D controlAgentRun(action:"stop", runId)\uFF1B\u7528 list/status \u786E\u8BA4 run \u771F\u5B9E\u5B58\u5728\u4E14\u975E\u7EC8\u6001\uFF0C\u522B\u5047\u8BBE"\u6D3E\u53D1\u4E86\u5C31\u5728\u8DD1"\u3002
660
+ 6. **\u6D3E\u53D1\u5931\u8D25\u5148\u5206\u8BCA\uFF0C\u518D\u4E0B\u7ED3\u8BBA**\u3002\u987A\u5E8F\uFF1A
661
+ \u2460 \u786E\u8BA4\u672C\u6B21 agentKey \u662F\u7167\u6284 listAgents / readAgent \u8FD4\u56DE\u7684\u7CBE\u786E dbKey\uFF08\u5426\u5219\u5148\u4FEE\u6B63 key\uFF0C\u4E0D\u7B97\u901A\u9053\u6545\u969C\uFF09\uFF1B
662
+ \u2461 \u62A5\u9519\u50CF not found / invalid ref / Local agent config not found \u2192 \u4E00\u5F8B\u5148 readAgent \u590D\u6838\uFF0C\u7981\u6B62\u636E\u6B64\u63A8\u65AD\u73AF\u5883/\u51ED\u8BC1/\u901A\u9053\u5168\u6302\uFF1B
663
+ \u2462 \u540C\u4E00\u5DF2\u9A8C\u8BC1 agentKey \u4E0A\u4ECD\u5931\u8D25\uFF0C\u4E14\u9519\u8BEF\u660E\u786E\u6307\u5411\u901A\u9053\uFF08429\u3001\u9274\u6743\u5931\u8D25\u3001machine offline\uFF09\u2192 \u8BB0\u4E3A\u8BE5\u901A\u9053\u6545\u969C\u3002
664
+ - \u5224\u5B9A\u300C\u6D3E\u53D1\u901A\u9053\u6574\u4F53\u4E0D\u53EF\u7528\u300D\u524D\uFF1A\u81F3\u5C11\u5BF9 2 \u4E2A\u4E0D\u540C\u5019\u9009\u5404\u5B8C\u6210\u300C\u5DF2\u9A8C\u8BC1 key + \u4E00\u6B21\u771F\u5B9E\u6D3E\u53D1\u300D\uFF1B\u82E5\u5019\u9009\u4E0D\u8DB3 2 \u4E2A\uFF0C\u5219\u5728\u552F\u4E00\u5019\u9009\u4E0A\u5B8C\u6210 key \u590D\u6838\u540E\uFF0C\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\uFF0C\u4E5F\u4E0D\u5F97\u64C5\u81EA\u6539\u505A\u672C\u8BE5\u6D3E\u53D1\u7684\u4E8B\u3002
665
+ - \u4E0D\u8981\u7528\u300C\u4E0D\u540C provider \u5BB6\u65CF\u300D\u4F5C\u4E3A\u786C\u95E8\u69DB\uFF1B\u6709\u591A\u5BB6\u624D\u6362\uFF0C\u6CA1\u6709\u5C31\u505C\u3002
666
+ 7. stop \u524D\u5148\u770B\u65E5\u5FD7\u3002\u7528 status(tailLines:30) \u5224\u65AD\u662F\u771F\u5361\u6B7B\u8FD8\u662F\u6B63\u5E38\u8DD1\uFF0C\u786E\u8BA4\u9700\u8981\u53EB\u505C\u518D controlAgentRun(action:"stop", runId)\uFF1B\u7528 list/status \u786E\u8BA4 run \u771F\u5B9E\u5B58\u5728\u4E14\u975E\u7EC8\u6001\uFF0C\u522B\u5047\u8BBE"\u6D3E\u53D1\u4E86\u5C31\u5728\u8DD1"\u3002
776
667
  \u5DE5\u5177\u9009\u62E9\uFF1A\u5B50\u4EFB\u52A1 <100s \u4E14\u8981\u7ACB\u5373\u62FF\u7ED3\u679C \u2192 callAgent\uFF08\u540C\u6B65\uFF09\uFF1B\u957F\u4EFB\u52A1 / \u5E76\u884C / \u9700\u8981\u89C2\u5BDF\u6216\u53EB\u505C \u2192 startAgentRun\uFF08\u672C\u6BB5\uFF09\u3002`;
777
- var AGENT_COLLABORATION_INSTRUCTIONS = `--- \u591A Agent \u534F\u4F5C\uFF08\u8BA1\u5212 \u2192 \u6D3E\u53D1 \u2192 \u5BA1\u67E5\uFF09 ---
778
- \u7528\u5B50\u4EE3\u7406\u5B8C\u6210\u4E2D\u5927\u578B\u4EFB\u52A1\u65F6\uFF0C\u6309\u4E09\u6BB5\u7EAA\u5F8B\u6267\u884C\uFF1A
779
- 1. \u8BA1\u5212\u5148\u884C\uFF1A\u52A8\u624B\u524D\u5148\u60F3\u6E05\u695A\u76EE\u6807\u3001\u8FB9\u754C\u3001\u9A8C\u8BC1\u65B9\u5F0F\u548C\u505C\u6B62\u6761\u4EF6\uFF1B\u9884\u8BA1 3 \u6B65\u4EE5\u4E0A\uFF08\u8BFB\u6539\u9A8C\u3001\u591A\u6587\u4EF6\u3001\u4EFB\u4F55\u6D3E\u53D1\uFF09\u5148\u5B9A\u8BA1\u5212\uFF0C\u518D\u51B3\u5B9A\u81EA\u5DF1\u505A\u5B8C\u8FD8\u662F\u6D3E\u53D1\u3002
780
- - \u6D3E\u53D1\u524D\u505A\u6210\u672C\u6743\u8861\uFF1A\u7236 agent \u8F6E\u8BE2\u3001\u4E0A\u4E0B\u6587\u4F20\u9012\u3001\u534F\u8C03\u5F00\u9500\u672C\u8EAB\u8981\u6D88\u8017 token\uFF1B\u5B50\u4EE3\u7406\u66F4\u4FBF\u5B9C\u4E0D\u7B49\u4E8E\u7F16\u6392\u4E00\u5B9A\u66F4\u7701\u3002\u7B80\u5355/\u4E2D\u7B49\u4EFB\u52A1\u7528\u5F3A\u6A21\u578B\u76F4\u63A5\u505A\uFF0C\u5F80\u5F80\u6BD4"\u5F3A\u6A21\u578B\u6307\u6325 + \u5F31\u6A21\u578B\u5B9E\u73B0"\u66F4\u7701\uFF08\u5B9E\u6D4B\uFF1A\u6307\u6325+\u5B9E\u73B0\u7684\u53CC\u5C42 credits \u5E38\u8D85\u8FC7\u5355\u5C42\u5F3A\u6A21\u578B\u76F4\u505A\uFF09\u3002\u53EA\u6709\u4EFB\u52A1\u8DB3\u591F\u5927\uFF08\u591A\u6587\u4EF6\u6DF1\u6539\u3001\u53EF\u5E76\u884C\u3001\u5355 agent \u4E0A\u4E0B\u6587\u88C5\u4E0D\u4E0B\uFF09\u65F6\uFF0C\u7F16\u6392\u7684\u62C6\u5206\u6536\u76CA\u624D\u660E\u663E\u8D85\u8FC7\u534F\u8C03\u6210\u672C\u3002
781
- 2. \u6D3E\u53D1\u539F\u5219\uFF1A\u5B50\u4EFB\u52A1\u81EA\u5305\u542B\u3001\u8FB9\u754C\u6E05\u6670\u3001\u80FD\u5E76\u884C\u5219\u5E76\u884C\uFF1B\u7ED9\u6267\u884C\u8005\u5199\u6E05\u4EFB\u52A1\u3001\u9A8C\u6536\u548C\u7981\u533A\uFF0C\u4E0D\u4F20\u65E0\u5173\u5386\u53F2\u3002\u6D3E\u53D1\u540E\u8F6E\u8BE2\u7ED3\u679C\uFF0C\u4E0D\u5047\u8BBE\u6210\u529F\u3002
782
- 3. \u72EC\u7ACB\u5BA1\u67E5\uFF08commit \u524D\u786C\u95E8\uFF09\uFF1A\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**\u5176\u4ED6 agent**\uFF08\u4E0D\u540C\u6A21\u578B\u5BB6\u65CF\u4F18\u5148\uFF09review\u3002reviewer \u4E0D\u53EF\u662F\u81EA\u5DF1\u3002\u65E0 review \u4E0D commit\u2014\u2014\u8FD9\u662F\u786C\u95E8\uFF0C\u4E0D\u662F\u5EFA\u8BAE\u3002\u8BE6\u7EC6\u6D41\u7A0B\uFF08\u591A\u8F6E\u65E0\u4E0A\u4E0B\u6587 review\u3001\u901A\u8FC7\u6761\u4EF6\u3001ephemeral \u6D3E\u53D1\u3001\u9003\u9038\u673A\u5236\uFF09\u89C1 nolo-commit skill \u7684\u63D0\u4EA4\u524D\u81EA\u68C0\u7B2C 0 \u9879\u3002
783
- \u6700\u5C0F\u5B9E\u73B0\uFF1A\u80FD\u5220\u89E3\u51B3\u5C31\u4E0D\u52A0\uFF0C\u80FD\u590D\u7528\u5C31\u4E0D\u65B0\u5EFA\uFF1B\u65B0\u62BD\u8C61\u524D\u5148\u641C\u5DF2\u6709\u5B9E\u73B0\u3002\u4E0D\u8981\u4E3A\u4E86\u663E\u5F97\u5FD9\u788C\u800C\u6D3E\u53D1\u6216\u8FC7\u5EA6\u8BBE\u8BA1\u3002`;
668
+ var AGENT_COLLABORATION_INSTRUCTIONS = `--- \u591A Agent \u534F\u4F5C\uFF08\u8BA1\u5212 \u2192 \u5E76\u53D1\u6D3E\u53D1 \u2192 \u5BA1\u67E5\uFF09 ---
669
+ \u672C\u7CFB\u7EDF\u5929\u751F\u591A agent\u3001\u591A review\uFF1A**\u9ED8\u8BA4\u5E76\u53D1\u4F7F\u7528\u591A\u4E2A agent \u540C\u65F6\u5904\u7406\u591A\u4EF6\u4E8B**\uFF0C\u800C\u4E0D\u662F\u4E32\u884C\u81EA\u5DF1\u6162\u6162\u505A\u3002\u6309\u4EE5\u4E0B\u7EAA\u5F8B\u6267\u884C\uFF1A
670
+ 1. \u8BA1\u5212\u5148\u884C\uFF1A\u52A8\u624B\u524D\u5148\u60F3\u6E05\u695A\u76EE\u6807\u3001\u8FB9\u754C\u3001\u9A8C\u8BC1\u65B9\u5F0F\u548C\u505C\u6B62\u6761\u4EF6\uFF1B\u9884\u8BA1 3 \u6B65\u4EE5\u4E0A\uFF08\u8BFB\u6539\u9A8C\u3001\u591A\u6587\u4EF6\u3001\u4EFB\u4F55\u6D3E\u53D1\uFF09\u5148\u5B9A\u8BA1\u5212\u3002
671
+ - **\u9ED8\u8BA4\u5E76\u53D1\u62C6\u5206**\uFF1A\u628A\u4EFB\u52A1\u62C6\u6210\u81EA\u5305\u542B\u3001\u8FB9\u754C\u6E05\u6670\u3001\u4E92\u4E0D\u4F9D\u8D56\u7684\u5B50\u4EFB\u52A1\uFF0C**\u540C\u65F6**\uFF08\u4E00\u6B21 startAgentRun \u591A\u4E2A\uFF09\u6D3E\u7ED9\u4E0D\u540C agent \u5E76\u884C\u6267\u884C\uFF0C\u7236 agent \u7528\u4E00\u4E2A turn \u6D3E\u53D1 + \u4E00\u4E2A turn \u6536\u96C6\u7ED3\u679C\uFF0C\u800C\u4E0D\u662F\u4E32\u884C\u7B49\u5F85 N \u4E2A turn\u3002
672
+ - \u80FD\u62C6\u5C31\u62C6\uFF1A\u591A\u4E2A\u72EC\u7ACB\u4E8B\u9879\uFF08\u591A\u6587\u4EF6\u6539\u52A8\u3001\u591A\u6A21\u5757\u5206\u6790\u3001\u591A\u7EC4\u7814\u7A76\u3001\u591A\u8DEF review\uFF09**\u4F18\u5148\u5E76\u884C**\uFF0C\u800C\u4E0D\u662F\u81EA\u5DF1\u9010\u4E2A\u505A\u6216\u4E32\u884C\u6D3E\u53D1\u3002\u7236 agent \u662F\u534F\u8C03\u8005\uFF0C\u4E0D\u662F\u6267\u884C\u8005\u3002
673
+ - **\u5E76\u53D1 \u2260 \u6D6A\u8D39\u94B1**\uFF1A\u5E76\u53D1\u4E0B\u4F9D\u7136\u7701\u94B1\u2014\u2014\u6BCF\u4E2A\u5B50 agent \u7528**\u4FBF\u5B9C\u80DC\u4EFB**\u7684\u6A21\u578B\uFF08\u4F18\u5148\u81EA\u5EFA agent \u8D70\u7528\u6237\u81EA\u5DF1\u7684 API/OAuth\u3001\u4F18\u5148\u4F4E\u4EF7\u80DC\u4EFB\u5019\u9009\uFF0C\u4E0D\u6D3E\u9876\u6863\u505A\u666E\u901A\u5B50\u4EFB\u52A1\uFF09\uFF0C\u7236 agent \u8D1F\u8D23\u591A\u8BFB\u6C47\u603B\uFF0C\u628A\u5E76\u53D1\u5E26\u6765\u7684\u541E\u5410\u4F18\u52BF\u8F6C\u5316\u4E3A\u6210\u672C/\u65F6\u95F4\u53CC\u8D62\u3002\u5E76\u884C\u8BA9\u6BCF\u4E2A\u5B50 agent \u4E0A\u4E0B\u6587\u805A\u7126\u3001\u4E92\u4E0D\u6C61\u67D3\uFF0C\u6BD4\u7236 agent \u81EA\u5DF1\u80CC\u5168\u90E8\u4E0A\u4E0B\u6587\u4E32\u884C\u505A\u66F4\u7701\u3001\u66F4\u5FEB\u3002
674
+ 2. **\u7F16\u6392\u8005\u53EA\u8BFB\u4E0D\u5199\uFF08\u786C\u95E8\uFF09**\uFF1A\u4F5C\u4E3A\u7F16\u6392\u8005\uFF0C\u4F60\u7684\u4EA7\u51FA\u662F\u8BA1\u5212\u3001\u6D3E\u53D1\u3001\u6C47\u603B\u548C\u9A8C\u6536\u3002**\u4EFB\u4F55\u5BF9\u4ED3\u5E93\u6587\u4EF6\u7684\u6301\u4E45\u5316\u5199\u5165\uFF08writeFile / editFile\uFF0C\u65E0\u8BBA\u4EE3\u7801\u3001\u914D\u7F6E\u3001\u6587\u6863\u3001\u6837\u5F0F\u3001\u811A\u672C\u8FD8\u662F\u6570\u636E\uFF09\u4E00\u5F8B\u6D3E\u53D1\u7ED9\u5B50 agent**\u2014\u2014\u5224\u5B9A\u770B\u7684\u662F"\u662F\u5426\u5199\u5165\u4ED3\u5E93\u6587\u4EF6"\uFF0C\u4E0D\u662F"\u7B97\u4E0D\u7B97\u4EE3\u7801"\u3002
675
+ - \u5141\u8BB8\u81EA\u5199\u7684\u4F8B\u5916**\u4EC5\u9650\u4E09\u79CD**\uFF1A\u2460\u5355\u6587\u4EF6\u4E14 \u22645 \u884C\u7684\u673A\u68B0\u6539\u52A8\uFF08typo\u3001\u5E38\u91CF\u503C\u3001\u5BFC\u5165\u884C\u3001\u7248\u672C\u53F7\u7B49\u65E0\u903B\u8F91\u5224\u65AD\u7684\u7F16\u8F91\uFF09\uFF1B\u2461\u6240\u6709\u6D3E\u53D1\u901A\u9053\u5747\u5DF2\u5B9E\u6D4B\u4E0D\u53EF\u7528\uFF08\u4EC5\u9650 429/\u9274\u6743\u5931\u8D25/\u670D\u52A1\u5B95\u673A\u7B49\u7CFB\u7EDF\u7EA7\u6545\u969C\uFF0C\u987B\u9644\u539F\u59CB\u62A5\u9519\uFF1B\u5B50 agent \u7ED3\u679C\u4E0D\u8FBE\u9884\u671F**\u4E0D\u7B97**\u901A\u9053\u5931\u8D25\uFF0C\u5E94\u4FEE\u6B63 task \u540E\u91CD\u6D3E\uFF09\uFF1B\u2462\u7528\u6237\u660E\u786E\u8981\u6C42\u4F60\u4EB2\u81EA\u505A\uFF08\u987B\u5F15\u7528\u7528\u6237\u539F\u8BDD\uFF09\u3002\u4F7F\u7528\u4F8B\u5916\u5FC5\u987B\u5728\u56DE\u590D\u4E2D\u5199\u660E\u5C5E\u4E8E\u54EA\u4E00\u6761\u5E76\u7ED9\u51FA\u4F9D\u636E\uFF0C**\u6CA1\u5199 = \u8FDD\u89C4**\u3002
676
+ - **\u63A2\u9488\u8C41\u514D**\uFF1A\u4E3A\u8BCA\u65AD\u6216\u9A8C\u8BC1\u6267\u884C\u7684\u4E00\u6B21\u6027 shell \u547D\u4EE4\u3001\u4E0D\u5199\u5165\u4ED3\u5E93\u7684\u4E34\u65F6\u811A\u672C\uFF08\u5982 /tmp \u4E0B\u7684\u63A2\u9488\uFF09\u4E0D\u53D7\u672C\u6761\u9650\u5236\u2014\u2014\u9F13\u52B1\u4F60\u5145\u5206\u9A8C\u8BC1\u3002
677
+ - \u7981\u62C6\u5206\u7ED5\u8FC7\uFF1A\u4E0D\u5F97\u628A\u540C\u4E00\u76EE\u6807\u7684\u6539\u52A8\u62C6\u6210\u591A\u4E2A"\u22645 \u884C"\u5206\u6B65\u81EA\u5199\uFF1B\u53EA\u8981\u540C\u4E00\u76EE\u6807\u7D2F\u8BA1 >5 \u884C\u6216\u6D89\u53CA\u903B\u8F91\u5224\u65AD\uFF0C\u5373\u5FC5\u987B\u6D3E\u53D1\u3002
678
+ - **\u7981\u6B62\u7528"\u8FD9\u662F\u539F\u5B50\u4EFB\u52A1/\u4E0D\u53EF\u62C6"\u7ED9\u81EA\u5DF1\u514D\u8D23**\u3002\u4E0D\u53EF\u62C6\u53EA\u8BF4\u660E\u5B83\u662F**\u4E00\u4E2A**\u5B50\u4EFB\u52A1\uFF0C\u4E0D\u8BF4\u660E\u5B83\u8BE5\u7531**\u4F60**\u6765\u505A\u2014\u2014\u5355\u4E2A\u5B50\u4EFB\u52A1\u540C\u6837\u5E94\u8BE5\u6D3E\u53D1\u3002
679
+ - **\u8B66\u60D5"\u4E0A\u4E0B\u6587\u5DF2\u5728\u624B"\u6ED1\u5761**\uFF1A\u8BFB\u5B8C\u6587\u4EF6\u540E\u4F1A\u5929\u7136\u4EA7\u751F"\u6211\u5DF2\u7ECF\u61C2\u4E86\uFF0C\u81EA\u5DF1\u5199\u66F4\u5FEB"\u7684\u51B2\u52A8\uFF0C\u8FD9\u662F\u6700\u5E38\u89C1\u7684\u8FDD\u89C4\u8DEF\u5F84\u3002\u4F60\u80FD\u7ED9 reviewer \u8D34\u51E0\u767E\u884C\u6750\u6599\uFF0C\u5C31\u80FD\u7ED9\u6267\u884C\u8005\u8D34\u540C\u6837\u7684\u6750\u6599\u3002
680
+ - \u6B63\u786E\u52A8\u4F5C\uFF1A\u628A\u5DF2\u8BFB\u5230\u7684\u5173\u952E\u7247\u6BB5\u3001\u7EA6\u675F\u3001\u9A8C\u6536\u6807\u51C6\u5199\u8FDB task\uFF0C\u7528 startAgentRun \u6D3E\u7ED9\u6267\u884C\u8005\uFF0C\u7136\u540E\u8F6E\u8BE2\u3001\u9A8C\u6536\u3001\u6C47\u603B\u3002
681
+ 3. \u6D3E\u53D1\u539F\u5219\uFF1A\u5B50\u4EFB\u52A1\u81EA\u5305\u542B\u3001\u8FB9\u754C\u6E05\u6670\uFF1B**\u7ED9\u6267\u884C\u8005\u5199\u6E05\u4EFB\u52A1\u3001\u9A8C\u6536\u548C\u7981\u533A\uFF0C\u4FDD\u8BC1\u4EFB\u52A1\u786E\u5B9A\u6027**\uFF08\u7ED3\u679C\u53EF\u6838\u5BF9\u3001\u4E0D\u4F20\u65E0\u5173\u5386\u53F2\u3001\u660E\u786E\u5B8C\u6210\u6761\u4EF6\uFF09\uFF0C\u6D3E\u53D1\u540E\u8F7B\u8F6E\u8BE2\u7ED3\u679C\uFF0C\u4E0D\u5047\u8BBE\u6210\u529F\u3002
682
+ 4. \u72EC\u7ACB\u5BA1\u67E5\uFF08commit \u524D\u786C\u95E8\uFF09\uFF1A\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**\u5176\u4ED6 agent**\uFF08\u4E0D\u540C\u6A21\u578B\u5BB6\u65CF\u4F18\u5148\uFF09review\u3002reviewer \u4E0D\u53EF\u662F\u81EA\u5DF1\u3002\u65E0 review \u4E0D commit\u2014\u2014\u8FD9\u662F\u786C\u95E8\uFF0C\u4E0D\u662F\u5EFA\u8BAE\u3002\u591A\u4E2A\u72EC\u7ACB\u6539\u52A8\u9762\u4F18\u5148\u5E76\u884C\u6D3E\u591A\u4E2A reviewer \u5404\u5BA1\u5404\u7684\u3002\u8BE6\u7EC6\u6D41\u7A0B\u89C1 coding-review\uFF08\u4EE3\u7801\u5C42\uFF09\u7684 Dispatch \u89C4\u8303\u3002
683
+ \u6700\u5C0F\u5B9E\u73B0\uFF1A\u80FD\u5220\u89E3\u51B3\u5C31\u4E0D\u52A0\uFF0C\u80FD\u590D\u7528\u5C31\u4E0D\u65B0\u5EFA\uFF1B\u65B0\u62BD\u8C61\u524D\u5148\u641C\u5DF2\u6709\u5B9E\u73B0\u3002**\u4E0D\u8981\u56E0\u4E3A"\u89C9\u5F97\u6D3E\u53D1\u663E\u5F97\u5FD9"\u5C31\u81EA\u5DF1\u95F7\u5934\u4E32\u884C\u505A\u2014\u2014\u5E76\u53D1\u662F\u672C\u7CFB\u7EDF\u7684\u9ED8\u8BA4\u5DE5\u4F5C\u65B9\u5F0F\uFF1B\u5E76\u53D1\u65F6\u4F9D\u7136\u8981\u7701\u94B1\u3001\u8981\u7ED9\u786E\u5B9A\u6027\u4EFB\u52A1\u3001\u8981\u7236 agent \u6C47\u603B\u3002**
684
+ \u81EA\u68C0\uFF08\u56DE\u590D\u524D\u95EE\u81EA\u5DF1\uFF09\uFF1A\u8FD9\u4E00\u8F6E\u6211\u662F\u5426\u4EB2\u624B\u5199\u4E86\u8D85\u51FA\u8C41\u514D\u8303\u56F4\u7684\u4EE3\u7801\uFF1F\u5982\u679C\u662F\uFF0C\u5E94\u5F53\u6D3E\u53D1\u800C\u975E\u81EA\u5199\uFF1B\u5DF2\u7ECF\u5199\u4E86\u5C31\u5982\u5B9E\u8BF4\u660E\u5E76\u7EA0\u6B63\uFF0C\u4E0D\u8981\u4E8B\u540E\u7F16\u9020"\u539F\u5B50\u4EFB\u52A1""\u91CD\u4F20\u6210\u672C\u9AD8"\u4E4B\u7C7B\u7684\u7406\u7531\u3002
685
+
686
+ \u82E5\u6536\u5230\u300C\u5B50\u5BF9\u8BDD\u7981\u6B62\u518D\u521B\u5EFA\u5B59\u5BF9\u8BDD\u300D\u9519\u8BEF\uFF0C\u8BF4\u660E\u4F60\u5DF2\u662F\u5B50\u5BF9\u8BDD\uFF0C\u7981\u6B62\u518D\u6D3E\u53D1\u3002\u5C06\u5DF2\u5B8C\u6210\u7684\u7ED3\u679C\u8FD4\u56DE\u7ED9\u7236\u5BF9\u8BDD\u5373\u53EF\u3002`;
784
687
  var MENU_USAGE_INSTRUCTIONS = `--- \u4EA4\u4E92\u8BF4\u660E ---
785
688
  \u6240\u6709\u7528\u6237\u8F93\u5165\u5747\u4E3A\u7EAF\u6587\u672C\u6D88\u606F\uFF0C\u76F4\u63A5\u7406\u89E3\u5373\u53EF\uFF0C\u4E0D\u8981\u5728\u56DE\u590D\u4E2D\u63D0\u53CA\u6309\u94AE\u3001\u83DC\u5355\u3001\u754C\u9762\u7B49 UI \u5143\u7D20\u3002
786
689
 
787
- ## \u4F55\u65F6\u8C03\u7528 ui_ask_choice
788
- \u9ED8\u8BA4\u503E\u5411"\u76F4\u63A5\u884C\u52A8"\uFF1A\u5F53\u4F60\u80FD\u57FA\u4E8E\u73B0\u6709\u4E0A\u4E0B\u6587\u7ED9\u51FA\u9AD8\u8D28\u91CF\u7B54\u6848\u6216\u6267\u884C\u65F6\uFF0C\u4F18\u5148\u76F4\u63A5\u505A\uFF0C\u4E0D\u8981\u4E3A\u4E86\u95EE\u800C\u95EE\u3002\u4EC5\u5728\u4EE5\u4E0B\u60C5\u51B5\u8C03\u7528 ui_ask_choice\uFF1A
690
+ ## \u4F55\u65F6\u8C03\u7528 ask_user
691
+ \u9ED8\u8BA4\u503E\u5411"\u76F4\u63A5\u884C\u52A8"\uFF1A\u5F53\u4F60\u80FD\u57FA\u4E8E\u73B0\u6709\u4E0A\u4E0B\u6587\u7ED9\u51FA\u9AD8\u8D28\u91CF\u7B54\u6848\u6216\u6267\u884C\u65F6\uFF0C\u4F18\u5148\u76F4\u63A5\u505A\uFF0C\u4E0D\u8981\u4E3A\u4E86\u95EE\u800C\u95EE\u3002\u4EC5\u5728\u4EE5\u4E0B\u60C5\u51B5\u8C03\u7528 ask_user\uFF1A
789
692
  1\uFF09\u7528\u6237\u9700\u6C42\u5BBD\u6CDB\u6216\u6A21\u7CCA\uFF0C\u4E14\u4F60\u80FD\u7ED9\u51FA 2\uFF5E5 \u4E2A\u4E92\u65A5\u3001\u90FD\u5408\u7406\u7684\u65B9\u5411\u5019\u9009\u2014\u2014\u8BA9\u7528\u6237\u5148\u9009\u4E00\u4E2A\u65B9\u5411\u518D\u6DF1\u5165\uFF1B
790
693
  2\uFF09\u8BA1\u5212/\u6D41\u7A0B\u5230\u4E86\u771F\u6B63\u7684\u5206\u652F\u8282\u70B9\uFF0C\u4E0D\u540C\u9009\u62E9\u4F1A\u5BFC\u81F4\u663E\u8457\u4E0D\u540C\u7684\u6210\u672C\u3001\u9690\u79C1\u6216\u7ED3\u679C\u8D70\u5411\uFF0C\u4E14\u4F60\u65E0\u6CD5\u4ECE\u4E0A\u4E0B\u6587\u63A8\u65AD\u7528\u6237\u504F\u597D\uFF1B
791
694
  3\uFF09\u65B0\u4F1A\u8BDD\u5F00\u5934\uFF0C\u6839\u636E\u7528\u6237\u753B\u50CF\u7ED9\u51FA\u82E5\u5E72"\u63A5\u4E0B\u6765\u53EF\u4EE5\u5C1D\u8BD5\u7684\u4E8B\u60C5"\u4F5C\u4E3A\u529F\u80FD\u5BFC\u822A\u6216\u4F7F\u7528\u5F15\u5BFC\u3002
792
695
 
793
- ## \u8C03\u7528 ui_ask_choice \u7684\u89C4\u8303
696
+ ## \u8C03\u7528 ask_user \u7684\u89C4\u8303
794
697
  - \u8C03\u7528\u524D\u5FC5\u987B\u5148\u5728\u666E\u901A\u56DE\u590D\u6587\u672C\u91CC\u5199\u6E05\u80CC\u666F\u3001\u7406\u7531\u6216\u6743\u8861\uFF08\u5148\u89E3\u91CA\uFF0C\u518D\u8C03\u7528\u5DE5\u5177\uFF09\uFF1B
795
- - \u63D0\u4F9B 2\uFF5E5 \u4E2A\u4E92\u65A5\u9009\u9879\uFF1B\u5982\u679C\u4F60\u6709\u63A8\u8350\u65B9\u5411\uFF0C\u628A\u5B83\u653E\u5728 choices \u7684\u7B2C\u4E00\u4F4D\uFF1B
698
+ - \u63D0\u4F9B 2\uFF5E5 \u4E2A\u4E92\u65A5\u9009\u9879\uFF1B\u5982\u679C\u4F60\u6709\u63A8\u8350\u65B9\u5411\uFF0C\u628A\u5B83\u653E\u5728 choices \u7684\u7B2C\u4E00\u4F4D\uFF0C\u5E76\u7ED9\u8BE5\u9009\u9879\u6807 recommended: true\uFF1B
699
+ - \u82E5\u6CA1\u6709\u660E\u786E\u7684\u63A8\u8350\u9879\uFF0C\u5FC5\u987B\u5728\u8C03\u7528\u524D\u7684\u666E\u901A\u56DE\u590D\u6587\u672C\u91CC\u7B80\u8981\u8BF4\u660E\u6BCF\u4E2A\u9009\u9879\u7684\u4F18\u7F3A\u70B9\uFF08\u6216\u5404\u9009\u9879\u7684\u5173\u952E\u5DEE\u5F02\uFF09\uFF0C\u5E2E\u52A9\u7528\u6237\u6743\u8861\uFF0C\u800C\u4E0D\u662F\u53EA\u5217\u51FA\u9009\u9879\u5C31\u5B8C\u4E8B\uFF1B
796
700
  - \u9009\u9879\u53EA\u627F\u8F7D\u9002\u5EA6\u4FE1\u606F\uFF1Alabel \u4E3A\u7B80\u77ED\u6309\u94AE\u6587\u6848\uFF1Bdetail \u4E3A\u53EF\u9009\u3001\u81F3\u591A\u4E00\u53E5\u8BDD\u7684\u7B80\u77ED\u8865\u5145\uFF1B\u7981\u6B62\u628A\u957F\u6BB5\u89E3\u91CA\u6216\u6743\u8861\u585E\u8FDB choices/detail\uFF1B
797
701
  - \u6BCF\u4E2A\u9009\u9879\u7684 userMessage \u5199\u6210\u5B8C\u6574\u7684\u4E0B\u4E00\u53E5\u8BDD\uFF0C\u65B9\u4FBF\u7528\u6237\u70B9\u51FB\u540E\u4E0A\u4E0B\u6587\u8FDE\u8D2F\uFF1B
798
702
  - \u4E0D\u8981\u5728\u9009\u9879\u5217\u8868\u91CC\u653E"\u5176\u4ED6/Other"\u2014\u2014\u5BA2\u6237\u7AEF\u4F1A\u81EA\u52A8\u4E3A\u7528\u6237\u8FFD\u52A0\u81EA\u7531\u8F93\u5165\u7684\u9000\u8DEF\uFF1B
@@ -844,7 +748,19 @@ var MEMORY_CAPTURE_INSTRUCTIONS = `--- \u957F\u671F\u8BB0\u5FC6 ---
844
748
  - \u7528\u6237\u4E2A\u4EBA\u8EAB\u4EFD\u6216\u7EAF\u4E2A\u4EBA\u504F\u597D \u2192 scope=auto\uFF08\u9ED8\u8BA4\u8BB0\u5230\u7528\u6237\uFF0C\u6240\u6709 Agent \u90FD\u80FD\u53EC\u56DE\uFF09
845
749
  - \u4E0E\u5F53\u524D Agent \u6302\u94A9\u7684\u6709\u6548\u505A\u6CD5 \u2192 scope=auto\uFF08runtime \u81EA\u52A8\u628A subject \u6807\u8BB0\u4E3A\u5F53\u524D Agent\uFF0C\u53EA\u6709\u8FD9\u4E2A Agent \u53EC\u56DE\uFF09
846
750
  - \u5F53\u524D\u4EFB\u52A1\u7684\u4E34\u65F6\u8FDB\u5EA6 \u2192 \u4E0D\u8C03\u7528\uFF0C\u8D70\u5BF9\u8BDD\u4E0A\u4E0B\u6587
847
- - \u65B9\u5F0F\uFF1A\u5199\u6210\u7B80\u77ED\u53EF\u590D\u7528\u7684\u62BD\u8C61\uFF08\u201C\u8BE5\u7528\u6237\u5728\u67D0\u573A\u666F\u901A\u5E38\u600E\u4E48\u9009/\u600E\u4E48\u534F\u4F5C\u201D\uFF09\uFF0C\u4E0D\u8981\u590D\u5236\u6574\u6BB5\u5BF9\u8BDD\u3002\u9ED8\u8BA4\u9759\u9ED8\u6267\u884C\uFF0C\u9664\u975E\u7528\u6237\u5728\u8BA8\u8BBA\u8BB0\u5FC6\u672C\u8EAB\u3002\u62FF\u4E0D\u51C6\u662F\u5426\u503C\u5F97\u8BB0\u65F6\uFF0C\u4F18\u5148\u8BB0\u4E0B\u53EF\u590D\u7528\u7684\u504F\u597D\u6216\u534F\u4F5C\u7EA6\u5B9A\u2014\u2014\u4E8B\u540E\u8FC7\u6EE4\u6BD4\u6F0F\u8BB0\u66F4\u6613\u8865\u6551\uFF1B\u4F46\u7EAF\u4E00\u6B21\u6027\u4EFB\u52A1\u7EC6\u8282\u3001\u5F88\u5FEB\u8FC7\u671F\u7684\u4E8B\u5B9E\u4ECD\u4E0D\u8981\u8BB0\u3002`;
751
+ - \u65B9\u5F0F\uFF1A\u5199\u6210\u7B80\u77ED\u53EF\u590D\u7528\u7684\u62BD\u8C61\uFF08\u201C\u8BE5\u7528\u6237\u5728\u67D0\u573A\u666F\u901A\u5E38\u600E\u4E48\u9009/\u600E\u4E48\u534F\u4F5C\u201D\uFF09\uFF0C\u4E0D\u8981\u590D\u5236\u6574\u6BB5\u5BF9\u8BDD\u3002\u9ED8\u8BA4\u9759\u9ED8\u6267\u884C\uFF0C\u9664\u975E\u7528\u6237\u5728\u8BA8\u8BBA\u8BB0\u5FC6\u672C\u8EAB\u3002\u62FF\u4E0D\u51C6\u662F\u5426\u503C\u5F97\u8BB0\u65F6\uFF0C\u4F18\u5148\u8BB0\u4E0B\u53EF\u590D\u7528\u7684\u504F\u597D\u6216\u534F\u4F5C\u7EA6\u5B9A\u2014\u2014\u4E8B\u540E\u8FC7\u6EE4\u6BD4\u6F0F\u8BB0\u66F4\u6613\u8865\u6551\uFF1B\u4F46\u7EAF\u4E00\u6B21\u6027\u4EFB\u52A1\u7EC6\u8282\u3001\u5F88\u5FEB\u8FC7\u671F\u7684\u4E8B\u5B9E\u4ECD\u4E0D\u8981\u8BB0\u3002
752
+
753
+ \u3010\u5173\u952E\u89C4\u5219\u3011\u8BB0\u5FC6\u4E0D\u53EF\u7269\u7406\u5220\u9664\uFF0C\u53EA\u80FD\u964D\u7EA7/\u5F52\u6863/\u6807\u6CE8\u3002
754
+ \u7269\u7406\u5220\u9664\u5207\u65AD\u89E3\u91CA\u94FE\u2014\u2014\u7CFB\u7EDF\u65E0\u6CD5\u56DE\u7B54"\u4E3A\u4EC0\u4E48\u53D8\u4E86"\u3001"\u66FE\u7ECF\u4FE1\u4EC0\u4E48"\u3002
755
+ \u9519\u8BEF\u7684\u8BB0\u5FC6\u5E94\u901A\u8FC7 rememberMemory \u4FEE\u6B63\u5E76\u964D\u6743\uFF08\u964D\u4F4E\u7F6E\u4FE1\u5EA6\uFF09\uFF0C\u800C\u4E0D\u662F\u5220\u9664\u3002
756
+
757
+ \u3010\u7F6E\u4FE1\u5EA6\u6765\u6E90\u3011\u6BCF\u6761\u8BB0\u5FC6\u5FC5\u987B\u6807\u6CE8\u6765\u6E90\uFF08\u4F9B\u53EC\u56DE\u65F6\u5224\u65AD\u53EF\u4FE1\u5EA6\uFF09\uFF1A
758
+ - verified\uFF1A\u5DE5\u5177/\u547D\u4EE4\u5B9E\u6D4B\u9A8C\u8BC1\u8FC7\uFF08\u9AD8\u7F6E\u4FE1\u5EA6\uFF09
759
+ - stated\uFF1A\u7528\u6237\u660E\u786E\u9648\u8FF0\uFF08\u4E2D\u9AD8\u7F6E\u4FE1\u5EA6\uFF09
760
+ - inferred\uFF1A\u6A21\u578B\u63A8\u65AD/\u51ED\u5370\u8C61\uFF0C\u672A\u9A8C\u8BC1\uFF08\u4F4E\u7F6E\u4FE1\u5EA6\u2014\u2014\u5BB9\u6613\u7F16\u9020\uFF0C\u4F18\u5148\u6807\u8BB0\u5B58\u7591\uFF09
761
+ \u8C03\u7528\u65F6\u5C3D\u91CF\u660E\u786E\u6765\u6E90\uFF0C\u65E0\u6CD5\u5224\u65AD\u7684\u4FDD\u5B88\u6807 inferred\u3002
762
+
763
+ \u3010\u53EC\u56DE\u89C4\u5219\u3011\u53EC\u56DE\u7684\u8BB0\u5FC6\u5FC5\u987B\u5E26\u5B8C\u6574\u5386\u53F2\u4E0A\u4E0B\u6587\uFF08\u6765\u6E90\u3001\u7F6E\u4FE1\u5EA6\u3001\u53D8\u66F4\u8BB0\u5F55\uFF09\uFF0C\u7981\u6B62\u81EA\u884C\u63A8\u7406\u586B\u8865\u3002`;
848
764
  var SELF_UPDATE_INSTRUCTIONS = `--- Agent \u81EA\u6211\u66F4\u65B0\u80FD\u529B ---
849
765
 
850
766
  ## \u4F55\u65F6\u66F4\u65B0\u81EA\u5DF1
@@ -896,7 +812,7 @@ var TOOL_GUIDED_SECTIONS = [
896
812
  ],
897
813
  build: () => AGENT_COLLABORATION_INSTRUCTIONS
898
814
  },
899
- { id: "menuUsage", triggerTools: ["ui_ask_choice"], build: () => MENU_USAGE_INSTRUCTIONS },
815
+ { id: "menuUsage", triggerTools: ["ask_user"], build: () => MENU_USAGE_INSTRUCTIONS },
900
816
  {
901
817
  id: "webAccess",
902
818
  triggerTools: ["exa_search", "fetchWebpage", "browser_openSession", "read_x_post"],
@@ -1498,7 +1414,7 @@ var generateRequestBody = ({
1498
1414
  // packages/ai/chat/serverProxyRetry.ts
1499
1415
  var DEFAULT_SERVER_PROXY_RETRY_AFTER_MS = 1500;
1500
1416
  var MAX_SERVER_PROXY_RETRIES = 2;
1501
- var MAX_STATUS_RETRIES = 1;
1417
+ var MAX_STATUS_RETRIES = 3;
1502
1418
  var MAX_SERVER_DRAIN_STATUS_RETRIES = 30;
1503
1419
  var readRetryableResponseBody = async (response) => {
1504
1420
  try {
@@ -1529,7 +1445,8 @@ var waitForServerProxyRetry = async (retryAfterMs, signal) => {
1529
1445
  var performServerProxyFetchWithRetry = async ({
1530
1446
  execute,
1531
1447
  signal,
1532
- logPrefix = "[fetchWithServerProxy]"
1448
+ logPrefix = "[fetchWithServerProxy]",
1449
+ onRetry
1533
1450
  }) => {
1534
1451
  let networkRetries = 0;
1535
1452
  let statusRetries = 0;
@@ -1548,6 +1465,11 @@ var performServerProxyFetchWithRetry = async ({
1548
1465
  console.warn(
1549
1466
  `${logPrefix} \u68C0\u6D4B\u5230${response.status}\u72B6\u6001\uFF0C${retryAfterMs}ms\u540E\u91CD\u8BD5...`
1550
1467
  );
1468
+ onRetry?.({
1469
+ attempt: statusRetries,
1470
+ maxAttempts: maxStatusRetries,
1471
+ delayMs: retryAfterMs
1472
+ });
1551
1473
  await waitForServerProxyRetry(retryAfterMs, signal);
1552
1474
  continue;
1553
1475
  }
@@ -1564,6 +1486,11 @@ var performServerProxyFetchWithRetry = async ({
1564
1486
  `${logPrefix} \u68C0\u6D4B\u5230\u7F51\u7EDC\u77AC\u65AD\uFF0C${retryDelay}ms\u540E\u91CD\u8BD5(\u7B2C${networkRetries}\u6B21)...`,
1565
1487
  error
1566
1488
  );
1489
+ onRetry?.({
1490
+ attempt: networkRetries,
1491
+ maxAttempts: MAX_SERVER_PROXY_RETRIES,
1492
+ delayMs: retryDelay
1493
+ });
1567
1494
  await waitForServerProxyRetry(retryDelay, signal);
1568
1495
  continue;
1569
1496
  }
@@ -1667,12 +1594,14 @@ var fetchWithServerProxy = async ({
1667
1594
  agentConfig,
1668
1595
  token,
1669
1596
  signal,
1670
- dialogId
1597
+ dialogId,
1598
+ onRetry
1671
1599
  }) => {
1672
1600
  try {
1673
1601
  const payload = buildProxyPayload(bodyData, api, agentConfig, dialogId);
1674
1602
  return await performServerProxyFetchWithRetry({
1675
1603
  signal,
1604
+ onRetry,
1676
1605
  execute: () => fetch(`${currentServer}${API_ENDPOINTS.CHAT}`, {
1677
1606
  method: "POST",
1678
1607
  headers: {
@@ -2,7 +2,7 @@ import {
2
2
  deleteDbRecord,
3
3
  queryUserRecords,
4
4
  readDbRecord
5
- } from "./chunk-FMYTM25W.js";
5
+ } from "./chunk-FVIPEIVX.js";
6
6
  import {
7
7
  mergeAndDedupUserData
8
8
  } from "./chunk-KQHGZWSV.js";
@@ -0,0 +1,84 @@
1
+ // packages/agent-runtime/toolNameAliases.ts
2
+ var LEGACY_TOOL_NAME_ALIASES = {
3
+ createPage: "createDoc",
4
+ updatePage: "updateDoc",
5
+ update_page: "updateDoc",
6
+ create_page: "createDoc",
7
+ fetchwebpage: "fetchWebpage",
8
+ fetch_webpage: "fetchWebpage",
9
+ "fetch-page": "fetchWebpage",
10
+ exasearch: "exa_search",
11
+ "exa-search": "exa_search",
12
+ exa_search: "exa_search",
13
+ firecrawlscrape: "firecrawl_scrape",
14
+ "firecrawl-scrape": "firecrawl_scrape",
15
+ firecrawl_scrape: "firecrawl_scrape",
16
+ firecrawlsearch: "firecrawl_search",
17
+ "firecrawl-search": "firecrawl_search",
18
+ firecrawl_search: "firecrawl_search",
19
+ readDoc: "readDoc",
20
+ readpage: "readDoc",
21
+ read_page: "readDoc",
22
+ read_doc: "readDoc",
23
+ createdoc: "createDoc",
24
+ updateDocTool: "updateDoc",
25
+ terminalCommand: "execShell",
26
+ terminal_command: "execShell",
27
+ runCommand: "execShell",
28
+ run_command: "execShell",
29
+ runInBash: "execShell",
30
+ run_in_bash: "execShell",
31
+ executeCommand: "execShell",
32
+ execute_command: "execShell",
33
+ // Codex CLI 风格工具名 → nolo 原生工具名
34
+ bash: "execShell",
35
+ shell: "execShell",
36
+ read: "readFile",
37
+ edit: "editFile",
38
+ write: "writeFile",
39
+ glob: "globFiles",
40
+ grep: "searchFiles",
41
+ // 联网搜索别名
42
+ web_search: "exa_search",
43
+ websearch: "exa_search",
44
+ search_web: "exa_search",
45
+ searchweb: "exa_search",
46
+ webfetch: "fetchWebpage",
47
+ web_fetch: "fetchWebpage",
48
+ fetchweb: "fetchWebpage",
49
+ fetch_web: "fetchWebpage",
50
+ // 模型偶尔会把 loadSkill 幻觉成 readSkill(参数风格 name= 一致),
51
+ // 规范化到 loadSkill,避免 localToolPolicy 把这种调用直接拦死。
52
+ readSkill: "loadSkill"
53
+ };
54
+ var normalizeToolName = (name) => name.replace(/[-_]/g, "").toLowerCase();
55
+ var canonicalizeToolName = (rawName) => {
56
+ const trimmedName = rawName.trim();
57
+ if (!trimmedName) return rawName;
58
+ if (LEGACY_TOOL_NAME_ALIASES[trimmedName]) {
59
+ return LEGACY_TOOL_NAME_ALIASES[trimmedName];
60
+ }
61
+ const normalizedRawName = normalizeToolName(trimmedName);
62
+ const matchedAlias = Object.entries(LEGACY_TOOL_NAME_ALIASES).find(
63
+ ([alias]) => normalizeToolName(alias) === normalizedRawName
64
+ );
65
+ return matchedAlias?.[1] ?? trimmedName;
66
+ };
67
+ var canonicalizeToolNames = (toolNames) => Array.from(
68
+ new Set(
69
+ toolNames.filter((toolName) => typeof toolName === "string").map(canonicalizeToolName)
70
+ )
71
+ );
72
+ var prioritizeToolNames = (toolNames, preferredToolNames) => {
73
+ const canonicalTools = canonicalizeToolNames(toolNames);
74
+ const preferred = new Set(canonicalizeToolNames(preferredToolNames));
75
+ const prioritized = canonicalTools.filter((toolName) => preferred.has(toolName));
76
+ const remaining = canonicalTools.filter((toolName) => !preferred.has(toolName));
77
+ return [...prioritized, ...remaining];
78
+ };
79
+
80
+ export {
81
+ canonicalizeToolName,
82
+ canonicalizeToolNames,
83
+ prioritizeToolNames
84
+ };
@@ -12,11 +12,11 @@ import {
12
12
  isBufferedCliStreamingProvider,
13
13
  materializeCliImageInputs,
14
14
  startCliSession
15
- } from "./chunk-CMKUBIGW.js";
16
- import "./chunk-JBTJAPUF.js";
15
+ } from "./chunk-X7W4TNB4.js";
17
16
  import {
18
17
  buildCliPrompt
19
18
  } from "./chunk-ATNTHIZI.js";
19
+ import "./chunk-JBTJAPUF.js";
20
20
  import "./chunk-4VNS5WPM.js";
21
21
  export {
22
22
  CLI_PROBE_BINARIES,
@@ -0,0 +1,48 @@
1
+ import {
2
+ CODING_COMPILED_EFFECTIVE_TOOLS,
3
+ CODING_ROOT_SKILL_ID,
4
+ CODING_ROOT_SKILL_REFERENCE,
5
+ CODING_ROOT_SKILL_SLUG,
6
+ CODING_SKILL_SEEDS,
7
+ CODING_SKILL_SLUGS,
8
+ buildCodingRootSkillReference,
9
+ buildCodingSkillConfig,
10
+ buildCodingSkillContentByKey,
11
+ buildCodingSkillContentBySlug,
12
+ buildCodingSkillId,
13
+ buildCodingSkillPageKey,
14
+ buildCodingSkillPageRecords,
15
+ collectCodingReachableSkillSlugs,
16
+ compileCodingEffectivePromptPatches,
17
+ compileCodingEffectiveTools,
18
+ ensureCodingSkills,
19
+ resolveCodingBuiltinSlug,
20
+ resolveCodingEffectiveTools
21
+ } from "./chunk-7BUYEZ6U.js";
22
+ import "./chunk-VC6OZXO5.js";
23
+ import "./chunk-WZSRQNQG.js";
24
+ import "./chunk-ZZ2MH7LE.js";
25
+ import "./chunk-I42VC5KR.js";
26
+ import "./chunk-G3SUCT4W.js";
27
+ import "./chunk-4VNS5WPM.js";
28
+ export {
29
+ CODING_COMPILED_EFFECTIVE_TOOLS,
30
+ CODING_ROOT_SKILL_ID,
31
+ CODING_ROOT_SKILL_REFERENCE,
32
+ CODING_ROOT_SKILL_SLUG,
33
+ CODING_SKILL_SEEDS,
34
+ CODING_SKILL_SLUGS,
35
+ buildCodingRootSkillReference,
36
+ buildCodingSkillConfig,
37
+ buildCodingSkillContentByKey,
38
+ buildCodingSkillContentBySlug,
39
+ buildCodingSkillId,
40
+ buildCodingSkillPageKey,
41
+ buildCodingSkillPageRecords,
42
+ collectCodingReachableSkillSlugs,
43
+ compileCodingEffectivePromptPatches,
44
+ compileCodingEffectiveTools,
45
+ ensureCodingSkills,
46
+ resolveCodingBuiltinSlug,
47
+ resolveCodingEffectiveTools
48
+ };