nolo-cli 0.54.0-alpha.1 → 0.54.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 (146) hide show
  1. package/{_executeModel-IVEOJ7L6.js → _executeModel-OPTKYHJA.js} +53 -48
  2. package/{action-IU6ON7ZB.js → action-ORXWW2ZG.js} +9 -9
  3. package/{addContentAction-5V5CCI3I.js → addContentAction-53BZ34AE.js} +9 -8
  4. package/{addDialogAgentAction-KF3KZZNZ.js → addDialogAgentAction-JRYUS54Y.js} +11 -10
  5. package/{agentDeleteCommand-D7AFLKQN.js → agentDeleteCommand-FJIWU2BS.js} +31 -29
  6. package/{agentEmailCommands-MXFZGF54.js → agentEmailCommands-CE32L43B.js} +62 -58
  7. package/{agentListCommands-MP732Q23.js → agentListCommands-VJNKULIK.js} +43 -34
  8. package/{agentMachineCommands-352JFJX4.js → agentMachineCommands-HCJ3WQXL.js} +31 -29
  9. package/agentRecordCommands-QFWERED4.js +119 -0
  10. package/{agentRunCommand-UUWJMH7J.js → agentRunCommand-G3GQMUNN.js} +70 -59
  11. package/{agentRunControl-4GHHSXFZ.js → agentRunControl-INKFDXDA.js} +3 -1
  12. package/{agentRuntimeLocal-KWBPJ53H.js → agentRuntimeLocal-K327ELSL.js} +31 -27
  13. package/{agentSlice-V742SNKC.js → agentSlice-ODKF4J6M.js} +9 -9
  14. package/{agentSuperviseCommands-VB6BUS5H.js → agentSuperviseCommands-5AR3DKNN.js} +2 -2
  15. package/{appDeleteCommands-GV4TF52A.js → appDeleteCommands-XUXMFDI4.js} +32 -30
  16. package/{appDeployCommands-EZMUPNSW.js → appDeployCommands-37F4GPCU.js} +32 -30
  17. package/{appDeployStatusCommands-AAGELKAN.js → appDeployStatusCommands-WSPU7TUK.js} +32 -30
  18. package/{appGetCommands-W37KDAON.js → appGetCommands-YLOBA3EM.js} +32 -30
  19. package/{appListCommands-IFDWBBNV.js → appListCommands-UD62R5ME.js} +32 -30
  20. package/{authCommand-5HM57KPL.js → authCommand-OK6HLHGS.js} +13 -13
  21. package/{authCommands-SBQVTD6V.js → authCommands-2DUIUEMT.js} +2 -2
  22. package/{chatQueueReduxAdapter-ZXXP6E4O.js → chatQueueReduxAdapter-TV2TUOQS.js} +28 -25
  23. package/{chunk-7CH6U3FL.js → chunk-2GRGFCF6.js} +2 -4
  24. package/{chunk-T27IEBNQ.js → chunk-2QDDKFG5.js} +74 -1
  25. package/{chunk-2JYSSXLY.js → chunk-2WBFJHQA.js} +5 -27
  26. package/{chunk-FZMM2KZC.js → chunk-3LKZRP7E.js} +2 -2
  27. package/{chunk-WUMYQ2FE.js → chunk-3Y2K5O2R.js} +64 -6
  28. package/{chunk-5XCW6RQG.js → chunk-3ZTR7ZO4.js} +1 -1
  29. package/{chunk-W6N3GLUU.js → chunk-5FCIPEKT.js} +327 -149
  30. package/{chunk-B54WOZ77.js → chunk-5UAYZEXO.js} +2 -2
  31. package/{chunk-5SXS7T5Q.js → chunk-6COJEAYH.js} +36 -105
  32. package/{chunk-PEMGYJNS.js → chunk-6HDYSFLO.js} +4 -6
  33. package/{chunk-6XIE5ZGI.js → chunk-6HIGYUBQ.js} +1 -1
  34. package/chunk-6IGD47IC.js +19 -0
  35. package/chunk-6YTOJY35.js +352 -0
  36. package/{chunk-6FGXGFAH.js → chunk-75MSWWUE.js} +1 -1
  37. package/{chunk-ALMVQQPG.js → chunk-7FAS3NEF.js} +17 -17
  38. package/{chunk-76UA7376.js → chunk-7NYDJAQ7.js} +20 -15
  39. package/{chunk-2T6XO4PK.js → chunk-A65UV3M5.js} +4 -4
  40. package/{chunk-V2IPBG5U.js → chunk-AA564GBL.js} +2 -2
  41. package/{chunk-SQTVMYMU.js → chunk-AUVFJGPC.js} +4 -4
  42. package/{chunk-HR5XDXYM.js → chunk-BBTN4NQD.js} +4 -4
  43. package/{chunk-CULR4XB4.js → chunk-BG7J6Y5X.js} +1 -1
  44. package/chunk-BY2FF2C4.js +526 -0
  45. package/{chunk-FA4SY4F5.js → chunk-BYEJ7K2Z.js} +1 -1
  46. package/chunk-BYXBJQAS.js +0 -0
  47. package/{chunk-3AOLVADY.js → chunk-DVINR3PL.js} +1 -1
  48. package/{chunk-DIQCV4FR.js → chunk-EA5OYZVD.js} +1 -1
  49. package/{chunk-RO2IUWZE.js → chunk-EICIFHVS.js} +1 -1
  50. package/chunk-EJE33XNR.js +19059 -0
  51. package/{chunk-M2CGG6VJ.js → chunk-EVBFYPDC.js} +1 -1
  52. package/{chunk-KHCLMKZZ.js → chunk-EY7V7REW.js} +280 -6
  53. package/{chunk-MC66ASS6.js → chunk-FJHMLRDQ.js} +12 -12
  54. package/{chunk-YFHUQLJF.js → chunk-GRFK2XP4.js} +2 -2
  55. package/{chunk-J3UALFHL.js → chunk-HJTAGT3W.js} +1 -1
  56. package/{chunk-J7KVJAUQ.js → chunk-HPW5MNDQ.js} +38 -99
  57. package/{chunk-H2G6JXTR.js → chunk-HQUORJTM.js} +1 -1
  58. package/{chunk-OYNDYVSE.js → chunk-JON2PHYT.js} +1 -1
  59. package/{chunk-RBJD33HM.js → chunk-JXIP6ZWH.js} +7 -7
  60. package/{chunk-PTHLNXGY.js → chunk-K4NISKOR.js} +46 -8
  61. package/{chunk-5Y5G76BJ.js → chunk-KLIBF3BY.js} +2 -2
  62. package/chunk-LRGKOI5Y.js +297 -0
  63. package/{chunk-OU7NGN5Y.js → chunk-MLEZPE3U.js} +2 -2
  64. package/{chunk-4RXXP6WD.js → chunk-MYMBBB6Q.js} +5 -64
  65. package/{chunk-ET7BXWAW.js → chunk-N4JKMCY3.js} +2 -2
  66. package/{chunk-45E65JER.js → chunk-NFLA6GSU.js} +4 -4
  67. package/{chunk-SVEUG45B.js → chunk-NHRQCXIQ.js} +0 -24
  68. package/{chunk-WJV3G7BM.js → chunk-NJUQBYFJ.js} +3 -1
  69. package/{chunk-LGUQHYAL.js → chunk-O5FLGN2L.js} +3 -2
  70. package/{chunk-Q24S4NDF.js → chunk-Q4XZVZPN.js} +1 -1
  71. package/{chunk-L3JWI7WX.js → chunk-QOKAKDPE.js} +15 -11
  72. package/{chunk-VM7K5EJL.js → chunk-RHMDMTDK.js} +2 -2
  73. package/{chunk-YZ2WE6CW.js → chunk-SAJSBPI2.js} +2 -2
  74. package/{chunk-WHVQA7PJ.js → chunk-SSXTSPSG.js} +27 -6
  75. package/chunk-SUEIAK5N.js +2574 -0
  76. package/{chunk-X7S7OFUX.js → chunk-SVC3GGUA.js} +6 -6
  77. package/{chunk-7UFH6THF.js → chunk-SVDMVX4G.js} +118 -2
  78. package/{chunk-ZMV5PCRS.js → chunk-SWJGJMTW.js} +1 -1
  79. package/{chunk-DQLYEGP7.js → chunk-SYYUU7EV.js} +2 -2
  80. package/{chunk-K7CNV7GI.js → chunk-TC6P4NDR.js} +7 -7
  81. package/{chunk-SUFDWBLV.js → chunk-TR4DXUYX.js} +1988 -452
  82. package/{chunk-BANYWEYY.js → chunk-TY3ADTX5.js} +1 -1
  83. package/chunk-UAD2WT54.js +64 -0
  84. package/{chunk-HCBQVVFZ.js → chunk-UGBHDMHI.js} +4 -4
  85. package/{chunk-R63FNYSI.js → chunk-UOWXD4VN.js} +851 -970
  86. package/{chunk-GBXR3CSM.js → chunk-UR66XPVF.js} +3 -3
  87. package/{chunk-6BYAXNH5.js → chunk-VZMUOPYG.js} +12 -2
  88. package/{chunk-RVHPY5PC.js → chunk-WQHGJHAL.js} +441 -2982
  89. package/chunk-XIJZOCSP.js +1766 -0
  90. package/{chunk-HHBXCRJS.js → chunk-XOJRZUPF.js} +4 -4
  91. package/{chunk-BKPUPZ6W.js → chunk-YBFJQC2M.js} +95 -778
  92. package/{chunk-MRWGHF56.js → chunk-YDH3FDFQ.js} +12 -356
  93. package/{chunk-SG65C33A.js → chunk-YLCUU3WM.js} +4 -4
  94. package/{chunk-XXZULHJ7.js → chunk-YQBXOHE6.js} +1 -1
  95. package/chunk-ZJ7UHBJS.js +89 -0
  96. package/{chunk-TNPCQNGQ.js → chunk-ZVOHVJI3.js} +4 -9
  97. package/{codingSkills-BYQI6EPT.js → codingSkills-BCQXRZOI.js} +3 -4
  98. package/contentThunks-KNI6VXLT.js +71 -0
  99. package/{createAgentAutomationAction-LE3ZYDT6.js → createAgentAutomationAction-OK4L33KF.js} +29 -25
  100. package/createDialogAction-JDSMY4AY.js +62 -0
  101. package/{createPageAction-X4C7K3OD.js → createPageAction-T7RA3HCG.js} +32 -28
  102. package/{dbSlice-FWF5F4L7.js → dbSlice-TVX6SN2T.js} +7 -7
  103. package/{deleteFile-NPZ64DFN.js → deleteFile-JYKRT7C3.js} +4 -4
  104. package/{dialogCommands-CP2U44A7.js → dialogCommands-UQZYWOOV.js} +33 -31
  105. package/{dialogSlice-2SH5636X.js → dialogSlice-TYW2G7IL.js} +28 -25
  106. package/{docCreateCommands-A2KIJSF7.js → docCreateCommands-OA6HZBWO.js} +37 -36
  107. package/{docDeleteCommands-NZ7XO4Z4.js → docDeleteCommands-KBB3YQI2.js} +34 -33
  108. package/{docReadCommands-VWVK4ZAR.js → docReadCommands-ZLMFVC67.js} +33 -32
  109. package/{docStore-J6GQYKHS.js → docStore-2URPBVCS.js} +9 -34
  110. package/{docUpdateCommands-YTUEC6PN.js → docUpdateCommands-HMH5KUON.js} +37 -36
  111. package/{fetchMessages-KZQVBXKY.js → fetchMessages-DRABNDPZ.js} +3 -3
  112. package/{getPricing-I53UFOPH.js → getPricing-RFOPUWHY.js} +4 -4
  113. package/{handleSendMessageAction-MD325XZS.js → handleSendMessageAction-GO53TY7U.js} +30 -27
  114. package/index.js +67 -67
  115. package/{localDialogRead-NQ33HBSI.js → localDialogRead-PUQKFI73.js} +1 -1
  116. package/{machineCommands-TCNZV2DC.js → machineCommands-RK6L7ZWL.js} +64 -60
  117. package/{machineWsRunDispatch-QSX5IWPH.js → machineWsRunDispatch-3X64DW2Z.js} +59 -55
  118. package/memberThunks-THZYZFSN.js +638 -0
  119. package/{models-E2CYP4IB.js → models-JVKUEER5.js} +2 -2
  120. package/package.json +2 -3
  121. package/{read-J7RVVCHH.js → read-K4JU4MQC.js} +4 -4
  122. package/{readDocTool-G2WBM4IH.js → readDocTool-LQGR6FUN.js} +1 -1
  123. package/{readlineWorkspace-N3RGX7EK.js → readlineWorkspace-XUFJV3RS.js} +1005 -437
  124. package/{removeDialogAgentAction-RMPISD42.js → removeDialogAgentAction-ECHCFB7N.js} +13 -12
  125. package/{runAgentClientLoop-R3NTOERA.js → runAgentClientLoop-24GQ2AW6.js} +51 -46
  126. package/{setDialogExtraReferencesAction-7BUTHDAL.js → setDialogExtraReferencesAction-KCVJNGMB.js} +10 -9
  127. package/{setPrimaryDialogAgentAction-WCYIBGZ4.js → setPrimaryDialogAgentAction-VDOBOMKC.js} +13 -12
  128. package/{settingSlice-7NN2MI6Y.js → settingSlice-VR2IJSXC.js} +8 -8
  129. package/{skillDiscovery-COX56OBO.js → skillDiscovery-2QTZINON.js} +3 -4
  130. package/{spaceCommands-RC7XMYQ7.js → spaceCommands-S5YJJXL7.js} +31 -29
  131. package/{streamAgentChatTurn-WLWEBWSF.js → streamAgentChatTurn-QHKP3ABO.js} +82 -70
  132. package/{switchDialogAgentAction-WGMMQHDI.js → switchDialogAgentAction-5L4UP7VI.js} +11 -10
  133. package/{tableCommands-P2TXJ3CF.js → tableCommands-R6WFRDYF.js} +1 -1
  134. package/{toolApiClient-B2MFXMEG.js → toolApiClient-53U4UDFF.js} +3 -2
  135. package/{tools-LSLDSUWU.js → tools-SSXSTC3O.js} +42 -38
  136. package/{tuiSummaryLlmCaller-TPBL4BV2.js → tuiSummaryLlmCaller-URFJHFC5.js} +19 -17
  137. package/{updateDialogTitleAction-4HJEARM7.js → updateDialogTitleAction-YFYAEW3T.js} +30 -26
  138. package/agentRecordCommands-G6EFHU3G.js +0 -115
  139. package/chunk-AETZ7AD6.js +0 -274
  140. package/chunk-DMCFF4KE.js +0 -435
  141. package/chunk-EUG45QJR.js +0 -6104
  142. package/chunk-J4Z6UI4C.js +0 -7076
  143. package/chunk-OFZPJ3NT.js +0 -114
  144. package/createDialogAction-2C6SR62D.js +0 -59
  145. package/spaceSlice-KBVKKO3M.js +0 -127
  146. package/{chunk-NQ4N4IGO.js → chunk-CS6TCJ7E.js} +3 -3
package/chunk-DMCFF4KE.js DELETED
@@ -1,435 +0,0 @@
1
- import {
2
- isImageUrlPart
3
- } from "./chunk-6BYAXNH5.js";
4
- import {
5
- AGENT_SELECTION_PRIORITY_INSTRUCTIONS
6
- } from "./chunk-TNPCQNGQ.js";
7
- import {
8
- canonicalizeToolNames
9
- } from "./chunk-O6OSWFZQ.js";
10
- import {
11
- PLATFORM_HOSTED_KIMI_K3_MODEL,
12
- isFireworksKimiModel,
13
- isNoloHostedProvider
14
- } from "./chunk-J7KVJAUQ.js";
15
- import {
16
- asTrimmedLowercaseString
17
- } from "./chunk-QSJ3HFEF.js";
18
- import {
19
- asTrimmedString
20
- } from "./chunk-3EUW3WEO.js";
21
-
22
- // packages/agent-runtime/identityBlock.ts
23
- var buildIdentityBlock = (input) => {
24
- const lines = [
25
- "--- \u8EAB\u4EFD\u4FE1\u606F ---",
26
- asTrimmedString(input.agentName) ? `\u540D\u79F0: ${asTrimmedString(input.agentName)}` : "",
27
- asTrimmedString(input.agentId) ? `ID: ${asTrimmedString(input.agentId)}` : "",
28
- asTrimmedString(input.model) ? `\u6A21\u578B: ${asTrimmedString(input.model)}` : ""
29
- ].filter(Boolean);
30
- return lines.join("\n");
31
- };
32
-
33
- // packages/agent-runtime/contextLayerContract.ts
34
- var buildContextLayerContractBlock = (options = {}) => {
35
- const lines = [
36
- "--- \u77E5\u8BC6\u5B58\u50A8\u7EA6\u5B9A ---",
37
- "\u4E0D\u8981\u628A\u6240\u6709\u4FE1\u606F\u585E\u8FDB\u540C\u4E00\u5C42\uFF0C\u5408\u7406\u5229\u7528\u5206\u5C42\u8FB9\u754C\uFF1A",
38
- "1. memory layer\uFF1A\u77ED\u5230\u4E2D\u671F\u3001\u53EF\u590D\u7528\u4F46\u4E0D\u5FC5\u6C38\u4E45\u6302\u8F7D\u7684\u504F\u597D\u3001\u8FD1\u671F\u5171\u8BC6\u4E0E\u7ECF\u9A8C\uFF08\u77ED\u3001\u53EF\u68C0\u7D22\u3001\u53EF\u66FF\u6362\uFF09\u3002",
39
- "2. knowledge layer\uFF1A\u7A33\u5B9A\u89C4\u5219\u3001\u957F\u671F\u6709\u6548\u4E8B\u5B9E\u4E0E\u6BCF\u8F6E\u4F9D\u8D56\u7684\u8BF4\u660E\uFF08\u901A\u8FC7 prompt / references \u81EA\u52A8\u52A0\u8F7D\uFF09\u3002",
40
- "3. doc layer\uFF1A\u9700\u8DE8\u8F6E\u6B21\u7EF4\u62A4\u7684\u5916\u90E8\u5DE5\u4F5C\u53F0\uFF08runbook\u3001mission\u3001incident\u3001checkpoint\u3001idea backlog\u3001experiment log \u7B49\uFF0C\u663E\u5F0F\u6309\u9700\u8BFB\u5199\uFF09\u3002",
41
- "",
42
- "\u5199\u5165\u539F\u5219\uFF1A\u4E34\u65F6\u6B65\u9AA4\u3001\u539F\u59CB\u957F\u65E5\u5FD7\u3001\u4E00\u6B21\u6027\u601D\u8DEF\u4E0D\u8981\u76F4\u63A5\u5199\u8FDB memory/knowledge\uFF1B\u7A33\u5B9A\u89C4\u5219\u6C89\u6DC0\u5230 knowledge\u3001\u53EF\u590D\u7528\u504F\u597D/\u5171\u8BC6\u6C89\u6DC0\u5230 memory\u3001\u8DE8\u8F6E\u63A5\u529B\u72B6\u6001/\u6587\u6863\u5199\u5165 doc\u3002"
43
- ];
44
- if (options.hasRememberMemoryTool) {
45
- lines.push(
46
- "- \u9047\u5230\u5BF9\u672A\u6765\u660E\u663E\u6709\u5E2E\u52A9\u7684\u504F\u597D/\u5171\u8BC6\u65F6\u8C03\u7528 rememberMemory\uFF08\u5199\u6210\u7B80\u6D01\u53EF\u590D\u7528\u7684\u4E00\u53E5\u8BDD\uFF1B\u7ED1\u5B9A space \u4E14\u5C5E\u5171\u4EAB\u89C4\u5219\u65F6\u4F20 scope=space\uFF0C\u8BB0\u4E3A space memory\uFF09\u3002"
47
- );
48
- }
49
- if (options.hasDocTools) {
50
- lines.push(
51
- "- \u4EFB\u52A1\u9700 24h \u8FDE\u7EED\u8FD0\u884C\u3001\u8DE8 dialog \u63A5\u529B\u6216\u5171\u8BFB\u65F6\uFF0C\u4F18\u5148\u628A mission / runbook / incident / checkpoint / idea backlog / experiment log \u5199\u5165 doc layer\u3002"
52
- );
53
- }
54
- return lines.join("\n");
55
- };
56
-
57
- // packages/agent-runtime/startupProtocol.ts
58
- var buildStartupProtocolBlock = (options = {}) => {
59
- const lines = [
60
- "--- \u542F\u52A8\u534F\u8BAE ---",
61
- "\u542F\u52A8\u987A\u5E8F\uFF1A\u5148\u8BFB policy / knowledge \u2192 \u63D0\u70BC current mission \u2192 \u5438\u6536 recent memory\uFF08\u53EA\u7559\u5BF9\u672C\u8F6E\u6709\u7528\u7684\uFF09\u2192 \u9700\u8981\u8DE8\u8F6E\u63A5\u529B\u65F6\u518D\u8BFB doc\u3002",
62
- "\u7B2C\u4E00\u6B21\u5DE5\u5177\u8C03\u7528\u524D\u5185\u5316 current_goal / constraints / missing_facts / next_action \u56DB\u9879\u5373\u53EF\u5F00\u59CB\u884C\u52A8\u3002",
63
- "\u51B3\u7B56\u89C4\u5219\uFF1Apolicy/knowledge \u591F\u5C31\u76F4\u63A5\u7B54\u4E0D\u4E71\u8C03\u5DE5\u5177\uFF1Brecent memory \u4E0E\u5F53\u524D\u8F93\u5165\u51B2\u7A81\u4EE5\u8F93\u5165\u4E3A\u51C6\uFF1B\u4F9D\u8D56\u5916\u90E8\u73AF\u5883/\u6587\u4EF6/\u4E8B\u5B9E\u5148\u9A8C\u8BC1\u518D\u884C\u52A8\u3001\u5C0F\u6B65\u63A8\u8FDB\u3002"
64
- ];
65
- if (options.hasCheckEnvTool || options.hasExecShellTool) {
66
- lines.push(
67
- "- \u4EFB\u52A1\u6D89\u53CA\u547D\u4EE4\u6267\u884C\u3001shell \u8BED\u6CD5\u3001\u8DEF\u5F84\u7EA6\u5B9A\u6216\u670D\u52A1\u72B6\u6001\u4E14\u4E8B\u5B9E\u4E0D\u660E\u786E\u65F6\uFF0C\u5148\u786E\u8BA4\u73AF\u5883\u3002"
68
- );
69
- }
70
- if (options.hasCheckEnvTool) {
71
- lines.push(
72
- "- \u73AF\u5883\u4E0D\u660E\u786E\u65F6\uFF0C\u4F18\u5148\u8C03\u7528 checkEnv({ check: 'context' })\uFF0C\u518D\u51B3\u5B9A\u540E\u7EED\u547D\u4EE4\u548C\u5DE5\u5177\u8DEF\u5F84\u3002"
73
- );
74
- }
75
- if (options.hasExecShellTool) {
76
- lines.push(
77
- "- \u6267\u884C\u547D\u4EE4\u65F6\u6839\u636E\u73AF\u5883\u9009 shell\uFF08Windows \u9ED8\u8BA4 PowerShell\uFF0CLinux/macOS \u9ED8\u8BA4 bash\uFF09\uFF1B\u6536\u96C6\u591A\u4E2A\u53EA\u8BFB\u4E8B\u5B9E\u4F18\u5148\u5408\u5E76\u4E3A\u4E00\u6B21 shell \u590D\u5408\u8C03\u7528\uFF0C\u907F\u514D\u62C6\u6210\u7EC6\u788E\u63A2\u9488\u3002"
78
- );
79
- }
80
- return lines.join("\n");
81
- };
82
-
83
- // packages/agent-runtime/runtimeGuidance.ts
84
- var normalizeToolName = (name) => name.replace(/[-_]/g, "").toLowerCase();
85
- var hasAnyTool = (normalizedTools, candidates) => candidates.some((candidate) => normalizedTools.has(normalizeToolName(candidate)));
86
- var hasAllTools = (normalizedTools, candidates) => candidates.every((candidate) => normalizedTools.has(normalizeToolName(candidate)));
87
- var buildEmailRegistrationWorkflowBlock = (enabled) => {
88
- if (!enabled) return "";
89
- return [
90
- "--- \u90AE\u7BB1\u9A8C\u8BC1\u7801\u6CE8\u518C\u6D41\u7A0B ---",
91
- "\u5F53\u7528\u6237\u8981\u6C42\u4F60\u6CE8\u518C\u7F51\u7AD9\u8D26\u53F7\u65F6\uFF0C\u53EA\u5141\u8BB8\u5904\u7406\u7528\u6237\u660E\u786E\u6307\u5B9A\u7684\u5F53\u524D\u76EE\u6807\u7F51\u7AD9\uFF0C\u4E0D\u8981\u81EA\u884C\u6269\u5C55\u5230\u5176\u4ED6\u7F51\u7AD9\u3001\u6279\u91CF\u6CE8\u518C\u6216\u89C4\u907F\u5E73\u53F0\u98CE\u63A7\u3002",
92
- "",
93
- "\u5206\u9636\u6BB5\u534F\u8BAE\uFF1Adiscover before acting -> assess supportability -> register -> verify -> closeout\u3002",
94
- "",
95
- "\u63A8\u8350\u6D41\u7A0B\uFF1A",
96
- "1. discover before acting\uFF1A\u5148\u7528 browser_openSession / browser_readContent \u9605\u8BFB\u9875\u9762\uFF0C\u786E\u8BA4\u76EE\u6807\u6CE8\u518C\u9875 URL\u3001\u8D26\u53F7\u7528\u9014\u3001\u5FC5\u586B\u9879\u548C\u505C\u6B62\u6761\u4EF6\uFF1B\u4E0D\u8981\u4E00\u6253\u5F00\u9875\u9762\u5C31\u76F2\u70B9\u6309\u94AE\u3002\u5982\u679C\u7F3A\u5C11\u76EE\u6807\u7F51\u7AD9\uFF0C\u5148\u8BE2\u95EE\u7528\u6237\u3002",
97
- "2. assess supportability\uFF1A\u5148\u5224\u65AD\u8BE5\u6D41\u7A0B\u662F\u5426\u652F\u6301\u5F53\u524D\u53D7\u63A7\u81EA\u52A8\u5316\u3002\u9047\u5230 CAPTCHA\u3001\u624B\u673A\u53F7\u9A8C\u8BC1\u3001\u652F\u4ED8\u3001\u8EAB\u4EFD/KYC\u3001OAuth-only\u3001\u670D\u52A1\u6761\u6B3E\u786E\u8BA4\u3001\u6216\u4EFB\u4F55\u770B\u8D77\u6765\u50CF\u89C4\u907F\u98CE\u63A7\u7684\u6B65\u9AA4\u65F6\uFF0C\u5FC5\u987B\u7ACB\u5373\u505C\u6B62\u5E76\u5411\u7528\u6237\u8BF4\u660E blockingReason\uFF1B\u4E0D\u8981\u786C\u95EF\u3002",
98
- "3. register\uFF1A\u53EA\u6709\u5728\u786E\u8BA4\u652F\u6301\u540E\uFF0C\u624D\u4F7F\u7528 email_provision_identity \u4E3A\u5F53\u524D agent \u751F\u6210\u53D7\u63A7\u57DF\u540D\u90AE\u7BB1\u8EAB\u4EFD\uFF0C\u518D\u4F7F\u7528 browser_openSession / browser_typeText / browser_click / browser_readContent \u586B\u5199\u5E76\u63D0\u4EA4\u6CE8\u518C\u8868\u5355\u3002",
99
- "4. verify\uFF1A\u63D0\u4EA4\u540E\u4F7F\u7528 email_wait_for \u7B49\u5F85\u8BE5 agent \u6536\u4EF6\u7BB1\u91CC\u7684\u9A8C\u8BC1\u90AE\u4EF6\uFF0C\u518D\u7528 email_extract_verification \u63D0\u53D6\u9A8C\u8BC1\u7801\u6216\u9A8C\u8BC1\u94FE\u63A5\uFF0C\u56DE\u586B\u9A8C\u8BC1\u7801\u6216\u6253\u5F00\u9A8C\u8BC1\u94FE\u63A5\u5B8C\u6210\u9A8C\u8BC1\u3002",
100
- "5. closeout\uFF1A\u65E0\u8BBA\u6210\u529F\u8FD8\u662F\u5931\u8D25\u90FD\u8981 always close sessions\uFF0C\u4E3B\u52A8\u6E05\u7406\u6D4F\u89C8\u5668\u4F1A\u8BDD\uFF08\u4F8B\u5982 browser_closeSession\uFF09\u3002\u5982\u679C\u6D41\u7A0B\u5931\u8D25\uFF0C\u5FC5\u987B\u660E\u786E failedStage \u4E0E blockingReason\uFF0C\u5E76\u8BF4\u660E\u53EF\u6062\u590D\u9009\u9879\uFF1B\u4E0D\u8981\u76F2\u76EE\u5C1D\u8BD5\u65E0\u5173\u7F51\u7AD9\u6216\u7ED5\u8FC7\u9A8C\u8BC1\u3002",
101
- "6. \u6700\u7EC8\u53EA\u5728\u5BF9\u8BDD\u4E2D\u8FD4\u56DE\u8D26\u53F7\u3001\u90AE\u7BB1\u548C\u4E00\u6B21\u6027\u751F\u6210\u7684\u5BC6\u7801\uFF1B\u4E0D\u8981\u6301\u4E45\u5316\u5BC6\u7801\uFF0C\u4E0D\u8981\u5199\u5165 agent metadata\u3001\u6570\u636E\u5E93\u3001\u6587\u6863\u6216\u8BB0\u5FC6\u3002",
102
- "",
103
- "\u5FC5\u987B\u6682\u505C\u5E76\u8BE2\u95EE\u7528\u6237\u7684\u60C5\u51B5\uFF1ACAPTCHA\u3001\u624B\u673A\u53F7\u9A8C\u8BC1\u3001\u652F\u4ED8\u3001\u8EAB\u4EFD/KYC\u3001OAuth \u6388\u6743\u3001OAuth-only\u3001\u670D\u52A1\u6761\u6B3E\u786E\u8BA4\u3001\u6216\u4EFB\u4F55\u770B\u8D77\u6765\u50CF\u89C4\u907F\u98CE\u63A7\u7684\u6B65\u9AA4\u3002",
104
- "\u5982\u679C\u6D41\u7A0B\u5931\u8D25\uFF0C\u8BF4\u660E failedStage\u3001blockingReason \u548C\u53EF\u6062\u590D\u9009\u9879\uFF0C\u4E0D\u8981\u76F2\u76EE\u5C1D\u8BD5\u65E0\u5173\u7F51\u7AD9\u6216\u7ED5\u8FC7\u9A8C\u8BC1\u3002"
105
- ].join("\n");
106
- };
107
- var resolveRuntimeGuidanceToolOptions = (tools = []) => {
108
- const normalizedTools = canonicalizeToolNames(tools);
109
- const normalizedToolSet = new Set(normalizedTools.map(normalizeToolName));
110
- const hasBrowserTools = hasAllTools(normalizedToolSet, [
111
- "browser_openSession",
112
- "browser_readContent",
113
- "browser_typeText",
114
- "browser_click",
115
- "browser_closeSession"
116
- ]);
117
- const hasBrowserProbe = hasAnyTool(normalizedToolSet, ["browser_probePage", "browserProbePage"]);
118
- const hasEmailRegistrationTools = hasAllTools(normalizedToolSet, [
119
- "email_provision_identity",
120
- "email_wait_for",
121
- "email_extract_verification"
122
- ]);
123
- return {
124
- hasCheckEnvTool: normalizedTools.includes("checkEnv"),
125
- hasExecShellTool: normalizedTools.includes("execShell"),
126
- hasRememberMemoryTool: normalizedTools.includes("rememberMemory"),
127
- hasDocTools: normalizedTools.some(
128
- (tool) => ["read", "readDoc", "readPage", "createDoc", "updateDoc"].includes(tool)
129
- ),
130
- hasBrowserTools,
131
- hasEmailRegistrationTools,
132
- // Require browser_probePage to be present before enabling email registration workflow guidance.
133
- hasEmailRegistrationWorkflow: hasBrowserTools && hasBrowserProbe && hasEmailRegistrationTools
134
- };
135
- };
136
- var buildRuntimeGuidanceBlocks = (tools = []) => {
137
- const options = resolveRuntimeGuidanceToolOptions(tools);
138
- const normalizedTools = canonicalizeToolNames(tools);
139
- return {
140
- startupProtocol: buildStartupProtocolBlock({
141
- hasCheckEnvTool: options.hasCheckEnvTool,
142
- hasExecShellTool: options.hasExecShellTool
143
- }),
144
- contextLayerContract: buildContextLayerContractBlock({
145
- hasRememberMemoryTool: options.hasRememberMemoryTool,
146
- hasDocTools: options.hasDocTools
147
- }),
148
- emailRegistrationWorkflow: buildEmailRegistrationWorkflowBlock(
149
- options.hasEmailRegistrationWorkflow
150
- )
151
- };
152
- };
153
-
154
- // packages/agent-runtime/menuUsage.ts
155
- var MENU_USAGE_INSTRUCTIONS = `--- \u4EA4\u4E92\u8BF4\u660E ---
156
- \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
157
-
158
- ## \u4F55\u65F6\u8C03\u7528 ask_user
159
- \u9ED8\u8BA4\u76F4\u63A5\u884C\u52A8\uFF08\u65E5\u5E38\u5C0F\u4E8B\uFF09\uFF1A\u95EE\u7B54\u3001\u5355\u6587\u4EF6\u5C0F\u6539\u3001\u6267\u884C\u987A\u5E8F/\u8DEF\u5F84\u9009\u62E9\u7B49\u80FD\u57FA\u4E8E\u73B0\u6709\u4E0A\u4E0B\u6587\u7ED9\u51FA\u9AD8\u8D28\u91CF\u7B54\u6848\u7684\u65E5\u5E38\u5C0F\u4E8B\uFF0C\u76F4\u63A5\u505A\uFF0C\u4E0D\u8981\u4E3A\u4E86\u95EE\u800C\u95EE\u3002\u5224\u636E\u662F**\u7528\u6237\u662F\u5426\u9700\u8981\u4E3A\u8FD9\u4E2A\u9009\u62E9\u627F\u62C5\u540E\u679C**\uFF08\u82B1\u94B1\u3001\u6CC4\u9732\u6570\u636E\u3001\u52A8\u7EBF\u4E0A\u3001\u4E0D\u53EF\u56DE\u6EDA\uFF1B\u6216\u8BE5\u9009\u62E9\u7EAF\u5C5E\u4E2A\u4EBA\u53E3\u5473\u3001\u65E0\u4ECE\u63A8\u65AD\uFF09\uFF0C\u800C\u4E0D\u662F"\u8FD9\u4E2A\u9009\u62E9\u4F1A\u4E0D\u4F1A\u5F71\u54CD\u540E\u7EED\u8D70\u5411"\u3002\u4EC5\u4E09\u79CD\u60C5\u51B5\u8C03\u7528\uFF1A1\uFF09\u9700\u6C42\u5BBD\u6CDB\u6216\u6A21\u7CCA\uFF0C\u7ED9\u51FA 2\uFF5E5 \u4E2A\u4E92\u65A5\u4E14\u90FD\u5408\u7406\u7684\u65B9\u5411\u8BA9\u7528\u6237\u5148\u9009\uFF1B2\uFF09\u5206\u53C9\u7684\u540E\u679C\u7531\u7528\u6237\u627F\u62C5\u4E14\u65E0\u6CD5\u4ECE\u4E0A\u4E0B\u6587\u63A8\u65AD\u5176\u504F\u597D\uFF1B3\uFF09\u65B0\u4F1A\u8BDD\u5F00\u5934\u9700\u8981\u6309\u7528\u6237\u753B\u50CF\u505A\u529F\u80FD\u5BFC\u822A\u6216\u5F15\u5BFC\u3002
160
-
161
- \u89C4\u6A21\u5316\u5F00\u5DE5\u5148\u786E\u8BA4\uFF1A\u4EFB\u52A1\u89C4\u6A21\u8D85\u51FA\u65E5\u5E38\u5C0F\u4E8B\uFF08\u9884\u8BA1\u4FEE\u6539 \u22653 \u4E2A\u6587\u4EF6\u3001\u65B0\u589E\u5B8C\u6574\u529F\u80FD/\u5DE5\u4F5C\u6D41\u3001\u957F\u65F6\u8FD0\u884C\u4EFB\u52A1\u3001\u4EA7\u51FA\u6B63\u5F0F\u4EA4\u4ED8\u7269\uFF09\u4E14\u7528\u6237\u53EA\u7528\u4E00\u4E24\u53E5\u8BDD\u5E26\u8FC7\u9700\u6C42\u65F6\uFF0C\u5148\u7ED9\u4E00\u6BB5\u7B80\u77ED\u8BA1\u5212\uFF08\u505A\u4EC0\u4E48 / \u4E0D\u505A\u4EC0\u4E48 / \u4EA4\u4ED8\u4EC0\u4E48\uFF09\u7B49\u7528\u6237\u786E\u8BA4\uFF0C\u6216\u7528 ask_user \u7ED9\u51FA\u65B9\u6848\u9009\u9879\u3002\u5B81\u53EF\u5F00\u5DE5\u524D\u591A\u82B1\u4E00\u8F6E\u786E\u8BA4\uFF0C\u4E0D\u8981\u4EA4\u4ED8\u540E\u8FD4\u5DE5\u3002
162
-
163
- \u4E0D\u8981\u95EE\u7684\uFF08\u5C5E\u4E8E\u4F60\u7684\u804C\u8D23\uFF0C\u95EE\u51FA\u6765\u662F\u628A\u672C\u8BE5\u4F60\u505A\u7684\u5224\u65AD\u63A8\u7ED9\u7528\u6237\uFF09\uFF1A\u5148\u505A\u54EA\u4E2A\u4EFB\u52A1\u3001\u6309\u4EC0\u4E48\u987A\u5E8F\u63A8\u8FDB\u3001\u8981\u4E0D\u8981\u987A\u624B\u4FEE\u67D0\u5904\u3001\u65E5\u5E38\u5B9E\u73B0\u7EC6\u8282\u7528\u54EA\u79CD\u5199\u6CD5\u3001\u8981\u4E0D\u8981\u518D\u68C0\u67E5\u4E00\u904D\u3002\u8FD9\u4E9B\u81EA\u5DF1\u5B9A\uFF0C\u505A\u5B8C\u5728\u56DE\u590D\u91CC\u8BF4\u660E\u7406\u7531\u5373\u53EF\u3002\u8FB9\u754C\uFF1A\u4E0A\u9762\u8FD9\u4E9B\uFF08\u5148\u505A\u54EA\u4E2A\u4EFB\u52A1\u3001\u6309\u4EC0\u4E48\u987A\u5E8F\u63A8\u8FDB\u7B49\uFF09\u5C5E\u4E8E\u987A\u5E8F\u4E0E\u8DEF\u5F84\u9009\u62E9\uFF0C\u81EA\u5B9A\u5373\u53EF\uFF1B**\u4EA4\u4ED8\u8303\u56F4\uFF08\u505A\u4EC0\u4E48\u3001\u505A\u5230\u4EC0\u4E48\u7A0B\u5EA6\u3001\u4EA4\u4ED8\u4EC0\u4E48\u4EA7\u7269\uFF09\u4E0D\u5C5E\u6B64\u7C7B**\u2014\u2014\u8303\u56F4\u6A21\u7CCA\u65F6\u8BE5\u95EE\u5C31\u95EE\u3002\u6CE8\u610F\u533A\u5206\uFF1A\u67B6\u6784\u9009\u578B\u3001\u6280\u672F\u6808\u3001\u6570\u636E\u5B58\u50A8\u65B9\u6848\u7B49\u957F\u671F\u4E14\u96BE\u56DE\u6EDA\u7684\u6280\u672F\u51B3\u7B56\u4E0D\u5728\u6B64\u5217\u2014\u2014\u5B83\u4EEC\u7684\u540E\u679C\u7531\u7528\u6237\u627F\u62C5\uFF0C\u6309\u4E0A\u8FF0\u7B2C 2 \u6761\u8BE5\u95EE\u5C31\u95EE\u3002\u7528\u6237\u76EE\u6807\u5DF2\u5177\u4F53\u6E05\u6670\u65F6\uFF0C\u5373\u4FBF\u5F62\u5F0F\u4E0A\u6EE1\u8DB3\u524D\u8FF0\u4E09\u79CD\u60C5\u51B5\u4E5F\u4F18\u5148\u76F4\u63A5\u56DE\u7B54\uFF0C\u4E0D\u5F3A\u884C\u5F39\u83DC\u5355\uFF1B\u5C31\u540C\u4E00\u4EF6\u4E8B\u7B2C\u4E8C\u6B21\u5F39\u83DC\u5355\u524D\uFF0C\u5148\u81EA\u68C0\u5224\u636E\u662F\u4E0D\u662F\u7528\u9519\u4E86\u3002
164
-
165
- ## \u8C03\u7528\u89C4\u8303
166
- - \u5148\u5728\u666E\u901A\u56DE\u590D\u6587\u672C\u91CC\u5199\u6E05\u80CC\u666F\u3001\u7406\u7531\u4E0E\u6743\u8861\u518D\u8C03\u7528\u5DE5\u5177\uFF1B\u65E0\u660E\u786E\u63A8\u8350\u9879\u65F6\uFF0C\u5FC5\u987B\u9010\u4E2A\u7B80\u8FF0\u9009\u9879\u4F18\u7F3A\u70B9\u5E2E\u52A9\u6743\u8861\uFF1B
167
- - \u6709\u63A8\u8350\u65B9\u5411\u5C31\u628A\u8BE5\u9879\u653E choices \u9996\u4F4D\u5E76\u6807 recommended: true\uFF1B
168
- - \u9009\u9879\u53EA\u627F\u8F7D\u9002\u5EA6\u4FE1\u606F\uFF1Alabel \u4E3A\u77ED\u53E5\u3001detail \u81F3\u591A\u4E00\u53E5\u8BDD\u8865\u5145\uFF0CuserMessage \u5199\u6210\u5B8C\u6574\u7684\u4E0B\u4E00\u53E5\u8BDD\uFF1B\u4E0D\u5728\u9009\u9879\u5217\u8868\u91CC\u653E"\u5176\u4ED6/Other"\uFF08\u5BA2\u6237\u7AEF\u4F1A\u81EA\u52A8\u8FFD\u52A0\u81EA\u7531\u8F93\u5165\u9000\u8DEF\uFF09\uFF1B
169
- - \u95EE\u9898\u5199\u5728 question \u5B57\u6BB5\uFF0C\u4E0D\u8981\u5728\u540C\u4E00\u8F6E assistant \u666E\u901A\u6587\u672C\u91CC\u91CD\u590D\u8FD9\u53E5\u8BDD\uFF08\u89E3\u91CA\u80CC\u666F\u2260\u91CD\u590D\u95EE\u9898\uFF09\u3002`;
170
-
171
- // packages/ai/agent/toolGuidedSections.ts
172
- var AGENT_ORCHESTRATION_RUN_INSTRUCTIONS = `--- \u591A Agent \u7F16\u6392\uFF08\u540E\u53F0 Run\uFF09 ---
173
- \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 \u89C2\u5BDF/\u505C\u6B62\uFF08wait/signal/proc \u8BED\u4E49\uFF09\u3002\u4F55\u65F6\u6D3E\u53D1\u89C1\u300C\u591A Agent \u534F\u4F5C\u300D\u6BB5\uFF1B\u672C\u6BB5\u53EA\u8BB2\u6D3E\u53D1\u4E4B\u540E\u600E\u4E48\u76EF\u3001\u600E\u4E48\u6392\u9519\u3002
174
-
175
- 1. \u76EF\u68A2\uFF1A**\u5F02\u6B65\u6D3E\u53D1\u540E\u7ACB\u5373\u6536\u5C3E\uFF0C\u7B49\u7EC8\u6001\u901A\u77E5\u3002** \u963B\u585E\u7B49\u5F85\uFF08startAgentRun wait:true / controlAgentRun wait\uFF09\u7684\u771F\u5B9E\u4EE3\u4EF7\u662F\u51BB\u7ED3\u5BF9\u8BDD\u2014\u2014\u7528\u6237\u5728\u7B49\u5F85\u671F\u95F4\u65E0\u6CD5\u63D2\u8BDD\uFF0C\u7F16\u6392\u8005\u4E5F\u65E0\u6CD5\u5E76\u884C\u63A8\u8FDB\u5176\u4ED6\u5DE5\u4F5C\uFF0C\u56E0\u6B64\u963B\u585E\u7B49\u5F85\u4EC5\u9650\u4E09\u79CD\u60C5\u51B5\uFF1A\u2460 \u9884\u8BA1 <100s \u4E14\u9A6C\u4E0A\u8981\u7528\u7ED3\u679C\u7684\u5B50\u4EFB\u52A1\uFF1B\u2461 \u7528\u6237\u660E\u786E\u8981\u6C42\u540C\u6B65\u7B49\u5F85\u6216\u6B63\u5728\u4E0E\u8BE5\u5B50\u4EFB\u52A1\u5BF9\u8BDD\uFF1B\u2462 \u73AF\u5883\u4E0D\u652F\u6301\u7EC8\u6001\u5524\u9192\uFF0C\u4E14\u5F53\u524D\u6CA1\u6709\u53EF\u5E76\u884C\u63A8\u8FDB\u7684\u5176\u4ED6\u5DE5\u4F5C\uFF08\u6B64\u65F6 startAgentRun \u76F4\u63A5 wait:true\uFF0C\u5DF2\u5F02\u6B65\u6D3E\u51FA\u7684\u7528 controlAgentRun(action:"wait", runId) \u963B\u585E\u5230\u7EC8\u6001\uFF09\u3002\u652F\u6301\u7EC8\u6001\u5524\u9192\u7684\u73AF\u5883\uFF08\u684C\u9762 TUI / web\uFF09\uFF1A\u591A\u5206\u949F\u7EA7 run \u4E00\u5F8B\u5F02\u6B65\u6D3E\u53D1\u5E76\u7ACB\u5373\u6536\u5C3E\u7ED3\u675F\u56DE\u5408\uFF08\u4E00\u53E5\u8BDD\u8BF4\u660E\u540E\u7EED\u52A8\u4F5C\u5373\u53EF\uFF09\uFF0C\u7EC8\u6001\u81EA\u52A8\u6458\u8981\u5524\u9192\u540E\u7EE7\u7EED\uFF1B\u4E32\u884C\u4F9D\u8D56\uFF08\u6267\u884C\u2192\u5BA1\u67E5\u2192\u96C6\u6210\uFF09\u4E0D\u662F\u963B\u585E\u5BF9\u8BDD\u7684\u7406\u7531\u2014\u2014\u9760 wake \u63A5\u529B\u5373\u53EF\u3002\u6CA1\u6709\u7EC8\u6001\u5524\u9192\u7684\u73AF\u5883\uFF08\u88F8 CLI\u3001\u670D\u52A1\u7AEF runtime\uFF09\u624D\u7528 wait \u963B\u585E\uFF0C\u540C\u6837\u4E0D\u8981\u81EA\u5DF1\u5FAA\u73AF\u67E5\u3002
176
- 2. \u7B49\u5F85/\u7981\u6B62\u8F6E\u8BE2/\u7981\u7A7A\u8F6C/\u522B\u590D\u8FF0 status \u7684\u8BED\u4E49\u4EE5 startAgentRun \u4E0E controlAgentRun \u5DE5\u5177\u63CF\u8FF0\u4E3A\u51C6\u3002controlAgentRun \u53EA\u5728\u300C\u7B54\u6848\u4F1A\u6539\u53D8\u4F60\u4E0B\u4E00\u6B65\u52A8\u4F5C\u300D\u65F6\u7528\uFF08\u80FD\u5426\u6C47\u603B\u3001\u8981\u4E0D\u8981\u53EB\u505C/\u8865\u6D3E\uFF09\uFF1B\u4E00\u6B21\u6027\u6B7B\u6D3B\u68C0\u67E5\u7528 status(runId, tailLines:0)\u3002\u5E76\u884C\uFF1A\u591A\u4E2A\u72EC\u7ACB\u5B50\u4EFB\u52A1\u4E00\u6B21\u6D3E\u5B8C\uFF0C\u4E4B\u540E\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\u5B83\u4EEC\u6070\u597D\u5171\u7528\u540C\u4E00\u6267\u884C agent/\u901A\u9053\u800C\u81EA\u884C\u52A0\u300C\u901A\u9053\u4E32\u884C\u300D\u7684\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\u4EFB\u52A1\u95F4\u5B58\u5728\u771F\u5B9E\u6587\u4EF6/\u6570\u636E\u4F9D\u8D56\u6216 brief \u660E\u793A\u51B2\u7A81\u9762\u65F6\u624D\u4E32\u884C\u3002
177
- 3. \u6392\u9519\uFF1A\u5148\u5206\u8BCA\u518D\u4E0B\u7ED3\u8BBA\u3002\u2460 \u590D\u6838 agentKey \u662F\u5426\u7167\u6284\u81EA listAgents\uFF08\u4E0D\u662F\u5C31\u5148\u4FEE key\uFF0C\u4E0D\u7B97\u901A\u9053\u6545\u969C\uFF09\uFF1B\u2461 \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\u2462 \u540C\u4E00\u5DF2\u9A8C\u8BC1 key \u4E0A\u4ECD\u5931\u8D25\u4E14\u9519\u8BEF\u660E\u786E\u6307\u5411\u901A\u9053\uFF08429\u3001\u9274\u6743\u5931\u8D25\u3001machine offline\uFF09\u2192 \u624D\u8BB0\u4E3A\u901A\u9053\u6545\u969C\u3002
178
- 4. \u5224\u5B9A\u300C\u6D3E\u53D1\u901A\u9053\u6574\u4F53\u4E0D\u53EF\u7528\u300D\u524D\uFF0C\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\u5019\u9009\u4E0D\u8DB3 2 \u4E2A\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\u53EA\u6709 status=failed/\u8D85\u65F6\u6216 progress \u957F\u65F6\u95F4\u6BEB\u65E0\u52A8\u9759\uFF08\u7591\u4F3C\u5361\u6B7B\uFF09\u624D\u62C9 tailLines:30 \u770B\u65E5\u5FD7\uFF1Bstop \u4E4B\u524D\u5148\u770B\u65E5\u5FD7\u786E\u8BA4\u662F\u771F\u5361\u6B7B\uFF0C\u5E76\u7528 list/status \u786E\u8BA4 run \u771F\u5B9E\u5B58\u5728\u4E14\u975E\u7EC8\u6001\u2014\u2014\u522B\u5047\u8BBE\u300C\u6D3E\u53D1\u4E86\u5C31\u5728\u8DD1\u300D\u3002`;
179
- 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 ---
180
- \u7F16\u6392\u4E0D\u662F\u76EE\u7684\uFF0C\u4EA7\u51FA\u624D\u662F\u3002**\u6309\u590D\u6742\u5EA6\u5206\u6863\u51B3\u5B9A\u8C01\u6765\u505A**\uFF1A\u4E0D\u4E3A\u300C\u51D1\u6570\u91CF\u300D\u6D3E\u53D1\uFF0C\u4E5F\u4E0D\u5305\u529E\u672C\u8BE5\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\u4E0B\u4E00\u6B65\u3002
181
-
182
- **\u5206\u6863\u6807\u51C6\uFF08\u6309\u903B\u8F91\u6B65\u9AA4\u6570\u4E0E\u89E6\u53CA\u6587\u4EF6\u6570\uFF0C\u9886\u57DF\u6570\u4F5C\u590D\u6742\u6863\u8F85\u52A9\u5224\u636E\uFF09**\uFF1A
183
- - \u7B80\u5355\uFF1A\u903B\u8F91\u6B65\u9AA4 <5 \u4E14\u53EA\u8BFB/\u641C/\u6539 \u22642 \u4E2A\u6587\u4EF6 \u2192 \u81EA\u5DF1\u505A\uFF0C\u4E0D\u6D3E\u53D1\uFF1B\u7EAF\u95EE\u7B54/\u54A8\u8BE2/\u95F2\u804A\u9ED8\u8BA4\u76F4\u63A5\u56DE\u7B54\u3001\u4E0D\u59D4\u6D3E\uFF08\u4EC5\u9700\u4E13\u804C\u80FD\u529B\u6216\u7528\u6237\u660E\u786E\u6307\u6D3E\u65F6\u624D\u59D4\u6D3E\uFF09\u3002
184
- - \u4E2D\u7B49\uFF1A\u8D85\u51FA\u7B80\u5355\u6863\u3001\u672A\u8DE8 3 \u4E2A\u72EC\u7ACB\u9886\u57DF \u2192 \u5148\u7ED9\u65B9\u6848\uFF0C\u8BA4\u53EF\u540E\u6D3E\u4F4E\u6210\u672C\u6267\u884C\u8005\uFF1B\u81EA\u5DF1\u53EA\u505A\u89C4\u5212\u3001review\u3001\u96C6\u6210\u3002
185
- - \u590D\u6742\uFF1A\u8DE8 3 \u4E2A\u4EE5\u4E0A\u72EC\u7ACB\u9886\u57DF\uFF0C\u6216\u542B\u4ED3\u5E93\u6539\u52A8\uFF0B\u9A8C\u8BC1\uFF0B\u53D1\u5E03/\u8FC1\u79FB\u957F\u94FE\u8DEF \u2192 \u4E0E\u5019\u9009\u5BF9\u9F50\u540E\u6309\u9886\u57DF\u62C6\u5206\u6D3E\u53D1\uFF0C\u9ED8\u8BA4\u81F3\u5C11\u6D3E 2 \u4E2A\u72EC\u7ACB\u5B50\u4EFB\u52A1\u6216\u5BA1\u8BA1\uFF1B\u4E0D\u6D3E\u987B\u5728\u8BA1\u5212\u91CC\u5199\u660E\u6210\u672C/\u6536\u76CA\u7406\u7531\u3002
186
- - \u964D\u7EA7\uFF1A\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\u65F6\uFF0C\u53EF\u4FDD\u7559\u539F\u59CB\u9519\u8BEF\u8BC1\u636E\u540E\u964D\u7EA7\u81EA\u884C\u5B8C\u6210\u5E76\u8BF4\u660E\u539F\u56E0\u3002
187
-
188
- **\u6D3E\u53D1\u901A\u9053**\uFF1A
189
- - \u76EE\u6807\u8BB0\u5F55\u5DF2\u58F0\u660E delegation.serverBase / runtimeServerBase \u2192 \u5DE5\u5177\u81EA\u52A8\u8DEF\u7531\u5230\u5BF9\u5E94 nolo server\uFF0C\u65E0\u9700\u91CD\u590D\u586B serverBase\uFF1B\u7528\u6237\u7ED9\u51FA\u53EF\u8BBF\u95EE\u7684 server origin \u65F6\u53EF\u4F20 serverBase \u8986\u76D6\u81EA\u52A8\u8DEF\u7531\uFF0C\u52FF\u81C6\u9020\u5730\u5740\u3001\u52FF\u628A localhost \u5F53\u8FDC\u7AEF\u673A\u5668\u3002
190
- - \u901A\u9053\u8BED\u4E49\uFF1AstartAgentRun \u5F02\u6B65\uFF08wait:false\uFF09\u53EA\u8868\u793A\u5DF2\u542F\u52A8/\u6392\u961F\uFF0C**\u4E0D\u8868\u793A\u4EFB\u52A1\u5B8C\u6210**\uFF1Bdone/failed \u540E\u7CFB\u7EDF\u7528 terminal wake \u7EE7\u7EED\u7236\u5BF9\u8BDD\uFF0C\u4F60\u518D\u8BFB child evidence \u51B3\u5B9A\u4E0B\u4E00\u6B65\u3002\u4EC5\u5F53\u9884\u8BA1 <100s \u4E14\u9A6C\u4E0A\u8981\u7528\u7ED3\u679C\u3001\u7528\u6237\u660E\u786E\u8981\u6C42\u540C\u6B65\u7B49\u5F85\uFF08\u6216\u6B63\u5728\u4E0E\u8BE5\u5B50\u4EFB\u52A1\u5BF9\u8BDD\uFF09\u3001\u6216\u73AF\u5883\u4E0D\u652F\u6301\u7EC8\u6001\u5524\u9192\u4E14\u65E0\u5E76\u884C\u5DE5\u4F5C\u65F6\uFF0C\u624D\u7528 wait:true \u540C\u6B65\u7B49\uFF08\u963B\u585E\u4F1A\u51BB\u7ED3\u5BF9\u8BDD\uFF09\uFF1B\u5426\u5219\u4E00\u5F8B\u5F02\u6B65\u6D3E\u53D1\uFF0C\u9760\u7EC8\u6001\u5524\u9192\u63A5\u529B\u3002\u8981\u8BA9\u7528\u6237\u524D\u53F0\u5B9E\u65F6\u770B\u5230\u53D1\u8A00\uFF0C\u7528 runStreamingAgent\u3002
191
- - \u591A Agent \u534F\u4F5C\u4E0D\u9650\u4E8E\u4EE3\u7801\u4EFB\u52A1\uFF1A\u6E38\u620F\u8BBE\u8BA1\u3001\u7535\u5F71\u7B56\u5212\u3001\u5199\u4F5C\u3001\u8FD0\u8425\u3001\u7814\u7A76\u7B49\u5F02\u6B65\u5206\u5DE5\u573A\u666F\u540C\u6837\u9002\u7528\u3002
192
-
193
- **\u53D1\u6563 / \u4F1A\u5546\uFF08\u7CFB\u7EDF\u7EA7\u51B3\u7B56\u673A\u5236\uFF09**\uFF1A
194
- - \u53D1\u6563\u6A21\u5F0F\uFF08Divergent Mode\uFF09\uFF1A\u521B\u610F\u63A2\u7D22/\u65B9\u6848\u679A\u4E3E/\u5F00\u653E\u5F0F\u591A\u89C6\u89D2\u5206\u6790 \u2192 \u5E76\u884C\u6D3E\u53D1\u5404\u5206\u652F\u76F4\u63A5\u56DE\u7B54\u539F\u95EE\u9898\uFF0C\u4FDD\u7559\u5F00\u653E\u6027\u4E0E\u4E0D\u540C\u6A21\u578B\u7279\u8272\u3002
195
- - \u4F1A\u5546\u6A21\u5F0F\uFF08Deliberation Mode\uFF09\uFF1A\u590D\u6742\u51B3\u7B56/\u65B9\u6848\u8BBA\u8BC1/\u98CE\u9669\u8BC4\u4F30/\u51B2\u7A81\u534F\u8C03 \u2192 \u9996\u8F6E\u72EC\u7ACB\u4F5C\u7B54\uFF08\u521D\u59CB\u5224\u65AD+\u6838\u5FC3\u7406\u7531+\u6700\u5927\u98CE\u9669\uFF09\u2192 \u4EA4\u53C9\u590D\u8BAE\uFF08\u5185\u5D4C\u4E0A\u8F6E\u8981\u70B9\u3001\u56DE\u5E94\u5206\u6B67\u4FEE\u6B63\u7ACB\u573A\uFF09\u2192 \u6309\u30101. \u5171\u8BC6 2. \u4FDD\u7559\u5206\u6B67 3. \u4E0B\u4E00\u6B65\u5EFA\u8BAE\u3011\u6536\u655B\uFF0C\u4E0D\u5F3A\u884C\u62B9\u5E73\u5408\u7406\u5206\u6B67\u3002
196
-
197
- **\u9009\u4EBA**\uFF1A\u53EA\u8BA4 listAgents \u8FD4\u56DE\u7684\u8BB0\u5F55\uFF0CagentKey \u5FC5\u987B\u539F\u6837\u590D\u5236\u5176\u5B57\u6BB5\uFF0C\u4E0D\u62FC\u63A5/\u4E0D\u63A8\u65AD/\u4E0D\u6362\u683C\u5F0F/\u4E0D\u4F20 name\uFF1B\u6362\u4EBA\u6216\u4E0A\u6B21 not found \u65F6\u91CD\u65B0 listAgents \u53D6\u6700\u65B0 key\u3002\u4EFB\u52A1\u573A\u666F\u4E0E\u6A21\u578B\u5206\u6863\uFF1A
198
- ${AGENT_SELECTION_PRIORITY_INSTRUCTIONS}
199
- - \u4E2D\u6587\u5199\u7A3F/\u957F\u6587\u521B\u4F5C/\u4F4E AI \u5473\u5185\u5BB9\uFF1A\u4F18\u5148\u9009 \`gemini-3.7-flash\`\uFF08\u884C\u6587\u81EA\u7136\u3001\u9AD8\u6027\u4EF7\u6BD4\uFF09\u6216 \`kimi-k3\`\u3002
200
- - \u9876\u6863\u6A21\u578B\uFF08Opus 5\u3001GPT-5.6 Sol \u53CA\u540C\u7EA7\uFF09\u81EA\u52A8\u59D4\u6258\u786C\u95E8\uFF1A\u4EC5\u7528\u4E8E\u590D\u6742\u67B6\u6784/\u8DE8\u57DF\u8BBE\u8BA1\u3001\u91CD\u5927\u4E8B\u6545\u3001\u5B89\u5168/\u6570\u636E\u5B8C\u6574\u6027\u9AD8\u98CE\u9669\u5206\u6790\u3001\u8FBE\u6807\u7684\u6DF1 review\uFF0C\u6216\u4F4E\u4EF7\u5019\u9009\u5DF2\u6709\u5931\u8D25\u8BC1\u636E\u540E\u7684\u5347\u7EA7\u3002\u6DF1 review \u8FBE\u6807\u7EBF\uFF1D\u6539\u52A8\u6587\u4EF6\u6570 \u2265 30 \u4E14\u89E6\u53CA\u8BA1\u8D39/\u5B89\u5168/\u6570\u636E\u5B8C\u6574\u6027/\u6838\u5FC3\u8DEF\u7531\uFF0C\u6216\u4F4E\u4EF7 reviewer \u5DF2 BLOCK/\u901A\u9053\u5931\u8D25\u3002\u666E\u901A review \u9ED8\u8BA4\u6D3E\u4F4E\u4EF7\u5019\u9009\u3002\u9009\u9876\u6863\u8981\u5728\u56DE\u590D\u91CC\u8BF4\u660E\u7406\u7531\uFF1B\u7528\u6237\u70B9\u540D\u4E0D\u53D7\u6B64\u9650\u3002
201
- - \u901A\u9053\u6392\u9664\u5224\u636E\uFF1A\u53EA\u6392\u9664\u300C\u672C\u6B21\u6539\u52A8\u7684\u4F5C\u8005\u300D\u4E0E\u300C\u5F53\u65F6\u5B9E\u6D4B\u6B7B\u56E0\u7684\u574F\u901A\u9053\u300D\uFF08\u914D\u989D\u8017\u5C3D/\u4F59\u989D\u4E0D\u8DB3/\u9650\u6D41\uFF0C\u987B\u6709\u5F53\u6B21\u9519\u8BEF\u8BC1\u636E\uFF09\u3002\u7F16\u6392\u8005\u81EA\u8EAB\u7684 agent \u8EAB\u4EFD\u6D3E\u51FA\u7684\u65B0\u5B9E\u4F8B\u4E0D\u5E26\u7F16\u6392\u8005\u4E0A\u4E0B\u6587\uFF1A\u4E0E\u4F5C\u8005\u8DE8\u6A21\u578B\u5BB6\u65CF\u65F6\u662F\u5408\u6CD5 reviewer\uFF0C\u4E14 flash \u6863\u5E38\u662F\u6700\u4FBF\u5B9C\u7684 review \u901A\u9053\uFF1B\u300C\u4E0D\u70E7\u5E73\u53F0\u79EF\u5206\u300D\u4F18\u5148\u7EA7\u5BF9\u5927\u8DD1\u91CF\u6267\u884C\u8005\u6210\u7ACB\uFF0C\u5BF9 flash \u6863 review\uFF08\u6210\u672C\u53EF\u5FFD\u7565\uFF09\u4E0D\u9002\u7528\u3002
202
- - \u4E0D\u51ED\u540D\u5B57\u7F16\u9020\u80FD\u529B\uFF0C\u4E0D\u7D22\u53D6 prompt/\u5BC6\u94A5/\u6570\u636E\u5E93 key \u6765\u9009\u4EBA\uFF1B\u6D3E\u53D1\u524D\u8DF3\u8FC7\u5DF2\u77E5\u574F\u901A\u9053\uFF08\u914D\u7F6E\u7F3A\u5931/\u533A\u57DF\u9650\u5236/\u7F51\u5173 400\uFF09\u3002
203
-
204
- **\u62C6\u5206\u4E0E\u6D3E\u53D1\u8D28\u91CF**\uFF1A\u6309\u72EC\u7ACB\u9886\u57DF\u62C6\uFF0C\u4E0D\u6309\u6587\u4EF6\u6570\u91CF\u62C6\uFF1B\u5171\u4EAB\u63A5\u53E3/\u5F3A\u987A\u5E8F\u4F9D\u8D56\u7684\u5DE5\u4F5C\u5148\u56FA\u5316\u5951\u7EA6\u518D\u6D3E\u53D1\uFF0C\u52FF\u8BA9\u591A\u4E2A Agent \u5404\u81EA\u731C\u540C\u4E00\u63A5\u53E3\u3002\u5B50\u4EFB\u52A1\u81EA\u5305\u542B\u3001\u8FB9\u754C\u6E05\u6670\uFF0C\u53EA\u4F20\u5B8C\u6210\u8BE5\u5B50\u4EFB\u52A1\u6240\u9700\u7684\u6700\u5C0F\u5DE5\u4F5C\u96C6\uFF08\u4E0A\u4E0B\u6587\u6700\u5C0F\u5316\uFF09\uFF0C\u4E25\u7981\u8F6C\u53D1\u65E0\u5173\u5386\u53F2\u4E0E\u65E5\u5FD7\uFF1B\u7236 Agent \u4FDD\u7559\u76EE\u6807\u3001\u5951\u7EA6\u3001\u96C6\u6210\u3001\u6700\u7EC8\u9A8C\u8BC1\u548C\u7528\u6237\u6C9F\u901A\u3002brief \u5BF9\u6D4B\u8BD5\u7C7B DoD \u5FC5\u987B\u9489\u6B7B\u57FA\u7EBF\u7CBE\u786E\u6570\u5B57\uFF08\u6D3E\u53D1\u524D\u4EB2\u81EA\u8DD1 bun test <scope> \u8BB0\u4E0B pass/fail\uFF0C\u5199\u660E\u65E2\u6709\u5931\u8D25\u5F52\u5C5E\uFF09\uFF0C\u9A8C\u6536\u65F6\u4EB2\u81EA\u590D\u8DD1\u5BF9\u7167\u2014\u2014fail \u8D85\u57FA\u7EBF\u5373\u6267\u884C\u8005\u5F15\u5165\u56DE\u5F52\uFF08flaky \u53E6\u884C\u7504\u522B\uFF09\uFF1B\u65E0\u6570\u5B57\u7684\u300C\u6D4B\u8BD5\u901A\u8FC7\u300D\u81EA\u8FF0\u6309\u672A\u9A8C\u8BC1\u5904\u7406\u3002
205
-
206
- **\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\uFF0Creviewer \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\uFF09\uFF1B\u5168\u90E8\u8DE8\u5BB6\u65CF\u901A\u9053\u4E0D\u53EF\u7528\u65F6\uFF0C\u540C\u6A21\u578B\u5BB6\u65CF\u7684\u6D3E\u53D1\u65B0\u5B9E\u4F8B\uFF08\u4E0A\u4E0B\u6587\u4ECD\u9694\u79BB\uFF09\u7ECF owner \u6388\u6743\u53EF\u4F5C\u964D\u7EA7 reviewer\uFF0Ctrailer \u6CE8\u660E\u5B9E\u9645\u5BA1\u67E5\u8005\u4E0E\u539F\u56E0\uFF1B\u65E0 review \u4E0D commit\u3002\u81EA\u52A8\u5FAA\u73AF\uFF1A\u6539\u5B8C \u2192 startAgentRun(ephemeral:true) \u6D3E reviewer \u5BA1 diff \u2192 \u6709 finding \u5219\u4FEE \u2192 \u590D\u5BA1\u76F4\u5230 APPROVE\uFF08\u65E0 CRITICAL/HIGH\uFF09\u624D\u63D0\u4EA4\uFF1BBLOCK \u5FC5\u4FEE\u3001WARNING \u62A5\u7528\u6237\u3002review \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\u8BFB\u53D6 AGENTS.md\u3001docs/workflow.md\u3001\u5F53\u524D plan/progress\u3001\u547D\u4E2D\u7684 SKILL.md\u3001references\u3001\u6D89\u53CA\u4EA7\u54C1\u53D6\u820D\u65F6\u7684 docs/product-positioning.md\uFF0C\u4EE5\u53CA touched files \u7684\u5B8C\u6574 diff\uFF0Cbrief \u91CC\u5217\u51FA\u5B9E\u9645\u52A0\u8F7D\u7684 context\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
207
-
208
- --- \u786E\u8BA4\u8FB9\u754C ---
209
- **\u5371\u9669 / \u4E0D\u53EF\u9006\u64CD\u4F5C**\uFF1A
210
- - \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\u7B49\uFF09**\u6216\u9AD8\u6210\u672C\u52A8\u4F5C**\uFF08\u5927\u89C4\u6A21\u91CD\u6784/\u6279\u91CF\u6539\u52A8\u3001\u957F\u65F6\u8FD0\u884C\u3001\u5927\u91CF token \u6D88\u8017\uFF09\u65F6\uFF0C\u4F18\u5148\u9884\u89C8\u6216\u5411\u7528\u6237\u786E\u8BA4\u3002
211
- - \u5DE5\u5177\u8FD4\u56DE"\u9884\u89C8"\u6216"\u5F85\u786E\u8BA4"\u72B6\u6001\u65F6\uFF0C\u6682\u505C\u8FDB\u4E00\u6B65\u81EA\u52A8\u4FEE\u6539\uFF0C\u7B49\u7528\u6237\u660E\u786E\u786E\u8BA4\u540E\u518D\u7EE7\u7EED\u3002\u4E0D\u8981\u5728\u7528\u6237\u672A\u786E\u8BA4\u524D\u8FDE\u7EED\u53D1\u51FA\u591A\u6B21\u7834\u574F\u6027\u4FEE\u6539\u3002
212
-
213
- \u81EA\u68C0\uFF1A\u5148\u5B8C\u6210\u4EFB\u52A1\u7406\u89E3\u4E0E\u5206\u6863\uFF1F\u53EA\u4FDD\u7559\u5F53\u524D\u52A8\u4F5C\u9700\u8981\u7684\u5DE5\u5177/\u5386\u53F2/\u6587\u4EF6\u5185\u5BB9\uFF1F\u6D3E\u53D1\u7684\u8BDD\u5B50\u4EFB\u52A1\u8FB9\u754C\u548C\u9A8C\u6536\u8BC1\u636E\u5199\u6E05\u4E86\u5417\uFF1F\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\uFF0C\u628A\u5DF2\u5B8C\u6210\u7684\u7ED3\u679C\u8FD4\u56DE\u7ED9\u7236\u5BF9\u8BDD\u5373\u53EF\u3002`;
214
- var WEBPAGE_ACCESS_INSTRUCTIONS = `--- \u7F51\u9875\u8BBF\u95EE\u80FD\u529B (Web Access) ---
215
- \u83B7\u53D6\u5916\u90E8\u4FE1\u606F\u65F6\u7531\u7B80\u5165\u7E41\uFF1A
216
- 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\u3002\u5B83\u4EEC\u662F\u672C\u6B21\u4EFB\u52A1\u6700\u9AD8\u4F18\u5148\u7EA7\u7684\u7F51\u9875\u771F\u503C\u3002\u4EC5\u5F53\u6293\u53D6\u5931\u8D25\u3001\u7F3A\u5B57\u6BB5\u6216\u5185\u5BB9\u4E0D\u5339\u914D\u65F6\u624D\u989D\u5916\u641C\u7D22\uFF0C\u5E76\u5728\u56DE\u590D\u4E2D\u8BF4\u660E\u964D\u7EA7\u539F\u56E0\u3002
217
- 1. \u65E0\u660E\u786E URL \u2192 \u5148\u7528 exa_search \u53D1\u73B0\u6743\u5A01\u5165\u53E3\uFF08\u5C24\u5176\u964C\u751F docs \u7AD9\uFF0C\u4E0D\u8981\u76F4\u63A5\u731C\u5B50\u8DEF\u5F84\uFF09\u3002
218
- 2. \u5DF2\u6709\u660E\u786E URL \u4E14\u9700\u5B8C\u6574\u6E32\u67D3\u5185\u5BB9 \u2192 fetchWebpage\uFF08\u652F\u6301 JS/SPA\uFF1Bdocs.* \u4F1A\u81EA\u52A8\u68C0\u67E5 /llms.txt \u5E76\u89C4\u8303\u5316 URL\uFF09\u3002
219
- 3. \u9700\u767B\u5F55/\u586B\u8868/\u591A\u6B65\u4EA4\u4E92 \u2192 browser_openSession\uFF08openSession \u62FF ID \u2192 typeText/click/readContent\uFF09\u3002
220
- 4. YouTube/\u4E9A\u9A6C\u900A/Google \u7B49\u7ED3\u6784\u5316\u6570\u636E \u2192 \u7528\u5BF9\u5E94\u4E13\u7528 Scraper \u5DE5\u5177\uFF08youtubeScraper\u3001amazonProductScraper \u7B49\uFF09\u3002
221
- 5. \u751F\u4EA7\u73AF\u5883\u4E0D\u8981\u7528 execShell \u8C03 curl/grep/sed \u7B49\u547D\u4EE4\u6293\u7F51\u9875\u6216\u622A\u53D6\u7F51\u9875\u6BB5\u843D\uFF08dev shell \u5E38\u88AB\u7981\uFF0C\u53CD\u590D\u5C1D\u8BD5\u53EA\u4F1A\u6D6A\u8D39\u56DE\u5408\uFF09\uFF1B\u4F18\u5148\u7528 fetchWebpage\u3001\u7AD9\u70B9 Markdown / llms.txt\u3001\u6216\u4E13\u7528\u6D4F\u89C8/\u641C\u7D22\u5DE5\u5177\u3002
222
- 6. \u5185\u5BB9\u8FC7\u957F\u6216\u951A\u70B9\u6BB5\u843D\u672A\u88AB\u5355\u72EC\u63D0\u53D6\u65F6\uFF0C\u5148\u627E\u8BE5\u6587\u6863\u7AD9\u7684 Markdown \u7248\u672C\u3001\u72EC\u7ACB\u9875\u9762\u3001llms.txt \u7D22\u5F15\u6216\u66F4\u5177\u4F53 URL \u518D\u7EE7\u7EED\u56DE\u7B54\u3002`;
223
- var KNOWLEDGE_MANAGEMENT_INSTRUCTIONS = `--- \u77E5\u8BC6\u7BA1\u7406 ---
224
- - references\uFF1AAgent \u914D\u7F6E\u91CC\u6BCF\u6B21\u5BF9\u8BDD\u81EA\u52A8\u6CE8\u5165\uFF08type=instruction \u8FDB prompt \u9876\u90E8\u505A\u884C\u4E3A\u89C4\u5219\uFF1Btype=knowledge \u4F5C\u53C2\u8003\u8D44\u6599\uFF1Bpage \u91CC\u7684 @mention \u53EA\u5C55\u5F00\u5143\u4FE1\u606F\uFF08\u6807\u9898+dbKey\uFF09\uFF0C\u4E0D\u9012\u5F52\u5C55\u5F00\u5185\u5BB9\uFF09\u3002
225
- - createDoc \u6587\u6863\u6309\u9700 read\uFF1A\u603B\u7D22\u5F15\u9875\u7528 @[page:PAGE-xxx|\u6807\u9898] \u6307\u5411\u7EC6\u5206\u9875\uFF1Bmention \u662F\u6307\u9488\uFF0C\u53D6\u5185\u5BB9\u5FC5\u987B read({ dbKey })\u3002\u8BFB\u53D6\u8DEF\u5F84\uFF1Aprompt/references \u6709 \u2192 \u76F4\u63A5\u7528\uFF1B\u6CA1\u6709 \u2192 read \u7D22\u5F15\u9875\u627E\u7EC6\u5206\u9875 dbKey \u2192 read \u7EC6\u5206\u9875\u53D6\u5B8C\u6574\u5185\u5BB9\u3002
226
- - \u6C89\u6DC0\u65F6\u673A\uFF1A\u7528\u6237\u7ED9\u4E86\u53EF\u590D\u7528\u4FE1\u606F / \u5B8C\u6210\u6709\u4EF7\u503C\u8C03\u7814 \u2192 createDoc\uFF08\u5E76 updateAgent \u52A0\u5165 references\uFF09\uFF1B\u7D22\u5F15\u7F3A\u5165\u53E3 \u2192 updateDoc \u8865 @mention\u3002\u4E0D\u8981\u628A\u4E00\u6B21\u6027\u5185\u5BB9\u5199\u6210\u77E5\u8BC6\u9875\u3002`;
227
- var MEMORY_CAPTURE_INSTRUCTIONS = `--- \u957F\u671F\u8BB0\u5FC6 ---
228
- \u4F60\u53EF\u7528 rememberMemory \u628A\u503C\u5F97\u957F\u671F\u4FDD\u7559\u7684\u4FE1\u606F\u5199\u6210\u4E00\u6761 episodic memory\uFF1B\u8BB0\u5F55\u8303\u56F4\u4E0E scope \u5206\u5C42\u89C4\u5219\u8BE6\u89C1 rememberMemory \u5DE5\u5177 schema\u3002
229
- - \u62FF\u4E0D\u51C6\u662F\u5426\u503C\u5F97\u8BB0\u65F6\uFF0C\u4F18\u5148\u8BB0\u4E0B\u53EF\u590D\u7528\u9879\uFF0C\u4E8B\u540E\u8FC7\u6EE4\u6BD4\u6F0F\u8BB0\u6613\u8865\u6551\u3002
230
- - \u53EC\u56DE\u7684\u8BB0\u5FC6\u5FC5\u987B\u5E26\u5B8C\u6574\u5386\u53F2\u4E0A\u4E0B\u6587\uFF08\u6765\u6E90/\u7F6E\u4FE1\u5EA6/\u53D8\u66F4\u8BB0\u5F55\uFF09\uFF0C\u7981\u6B62\u81EA\u884C\u63A8\u7406\u586B\u8865\u3002
231
- - \u65E5\u5E38\u9519\u8BEF\u8BB0\u5FC6\u4F18\u5148\u901A\u8FC7 rememberMemory \u4FEE\u6B63\u964D\u6743/\u5F52\u6863\u8986\u76D6\u800C\u975E\u7269\u7406\u5220\u9664\uFF1B\u7269\u7406\u5220\u9664\u4EC5\u5728\u7528\u6237\u660E\u786E\u8981\u6C42\u4E14\u5728\u5176\u6743\u9650\u8303\u56F4\u5185\uFF08deleteMemory\uFF09\u3002`;
232
- var SELF_UPDATE_INSTRUCTIONS = `--- Agent \u81EA\u6211\u66F4\u65B0\u80FD\u529B ---
233
-
234
- ## \u4F55\u65F6\u66F4\u65B0\u81EA\u5DF1
235
- - \u91CD\u8981\u51B3\u7B56/\u8FDB\u5EA6\u53D8\u5316 \u2192 updateDoc \u5199\u56DE\u72B6\u6001\u9875
236
- - \u503C\u5F97\u590D\u7528\u7684\u77E5\u8BC6 \u2192 createDoc \u5EFA\u7EC6\u5206\u9875\uFF0C\u518D\u6309\u9700\u8981\u66F4\u65B0\u81EA\u5DF1\u7684 references / greeting / introduction
237
- - \u5C0F\u5E45\u4F53\u9A8C\u4F18\u5316 \u2192 updateSelf \u8C03\u6574 greeting / introduction / tags
238
-
239
- ## \u66F4\u65B0\u539F\u5219
240
- - \u4F18\u5148\u5F62\u6210\u6700\u5C0F\u3001\u53EF\u89E3\u91CA\u7684\u53D8\u66F4\uFF0C\u4E0D\u8981\u4E3A\u4E86\u201C\u663E\u5F97\u5728\u8FDB\u5316\u201D\u800C\u9891\u7E41\u6539\u81EA\u5DF1
241
- - \u4F4E\u98CE\u9669\u6C89\u6DC0\u4F18\u5148\u5199\u5165 memory / doc\uFF1B\u53EA\u6709\u5F53\u8FD9\u4E9B\u77E5\u8BC6\u9700\u8981\u957F\u671F\u6539\u53D8\u4F60\u7684\u884C\u4E3A\u65B9\u5F0F\u65F6\uFF0C\u518D\u8003\u8651 updateSelf
242
- - prompt / references / tools / model \u8FD9\u7C7B\u9AD8\u5F71\u54CD\u5B57\u6BB5\uFF0C\u9ED8\u8BA4\u6309\u9700\u8981\u786E\u8BA4\u6765\u5904\u7406\uFF0C\u4E0D\u8981\u9759\u9ED8\u5927\u6539
243
- - \u5982\u679C\u5DE5\u5177\u8FD4\u56DE policy limit / ask / reject\uFF0C\u4E0D\u8981\u91CD\u590D\u5C1D\u8BD5\uFF0C\u5E94\u5148\u5411\u7528\u6237\u89E3\u91CA\u6216\u7B49\u5F85\u66F4\u9AD8\u6743\u9650\u786E\u8BA4
244
- - \u6CA1\u6709\u53D1\u751F\u5B9E\u9645\u66F4\u65B0\u65F6\uFF0C\u4E0D\u8981\u5728\u56DE\u590D\u672B\u5C3E\u989D\u5916\u6C47\u62A5\u201C\u672A\u66F4\u65B0\u201D\u72B6\u6001`;
245
- var GENERIC_AGENT_UPDATE_INSTRUCTIONS = `--- Agent \u7EF4\u62A4\u80FD\u529B ---
246
- \u4F60\u62E5\u6709 updateAgent \u6743\u9650\uFF0C\u53EF\u4EE5\u66F4\u65B0\u6307\u5B9A\u7684 Agent\u3002
247
-
248
- ## \u4F55\u65F6\u66F4\u65B0\u522B\u7684 Agent
249
- - \u7528\u6237\u660E\u786E\u8981\u6C42\u4F60\u7EF4\u62A4\u3001\u4FEE\u590D\u6216\u6279\u91CF\u8C03\u6574\u53E6\u4E00\u4E2A Agent
250
- - \u4F60\u9700\u8981\u4FEE\u6539\u7684\u76EE\u6807\u4E0D\u662F\u5F53\u524D\u6B63\u5728\u8FD0\u884C\u7684\u81EA\u5DF1
251
-
252
- ## \u66F4\u65B0\u539F\u5219
253
- - \u9ED8\u8BA4\u628A updateAgent \u5F53\u6210\u9AD8\u98CE\u9669\u7EF4\u62A4\u64CD\u4F5C\uFF0C\u4F18\u5148\u6700\u5C0F\u6539\u52A8
254
- - \u4FEE\u6539\u524D\u5148\u786E\u8BA4\u76EE\u6807 Agent \u662F\u5426\u6B63\u786E\uFF0C\u907F\u514D\u8BEF\u6539
255
- - \u5982\u679C\u5DE5\u5177\u8FD4\u56DE\u9700\u8981\u786E\u8BA4\uFF0C\u4E0D\u8981\u7ED5\u8FC7\u786E\u8BA4\u6D41\u7A0B`;
256
- var TOOL_GUIDED_SECTIONS = [
257
- {
258
- id: "agentOrchestration",
259
- triggerTools: [
260
- "runStreamingAgent",
261
- "startAgentRun",
262
- "controlAgentRun"
263
- ],
264
- build: (tools) => tools.includes("startAgentRun") || tools.includes("controlAgentRun") ? AGENT_ORCHESTRATION_RUN_INSTRUCTIONS : ""
265
- },
266
- {
267
- id: "agentCollaboration",
268
- triggerTools: [
269
- "runStreamingAgent",
270
- "startAgentRun",
271
- "controlAgentRun"
272
- ],
273
- build: () => AGENT_COLLABORATION_INSTRUCTIONS
274
- },
275
- { id: "menuUsage", triggerTools: ["ask_user"], build: () => MENU_USAGE_INSTRUCTIONS },
276
- {
277
- id: "webAccess",
278
- triggerTools: ["exa_search", "fetchWebpage", "browser_openSession", "read_x_post"],
279
- build: () => WEBPAGE_ACCESS_INSTRUCTIONS
280
- },
281
- {
282
- id: "knowledgeManagement",
283
- triggerTools: ["createDoc", "updateDoc", "read", "readDoc", "readPage"],
284
- build: () => KNOWLEDGE_MANAGEMENT_INSTRUCTIONS
285
- },
286
- { id: "memoryCapture", triggerTools: ["rememberMemory"], build: () => MEMORY_CAPTURE_INSTRUCTIONS },
287
- { id: "selfUpdate", triggerTools: ["updateSelf"], build: () => SELF_UPDATE_INSTRUCTIONS },
288
- { id: "genericAgentUpdate", triggerTools: ["updateAgent"], build: () => GENERIC_AGENT_UPDATE_INSTRUCTIONS }
289
- ];
290
- function resolveToolGuidedSections(agentTools) {
291
- const out = {};
292
- for (const section of TOOL_GUIDED_SECTIONS) {
293
- if (section.triggerTools.some((t) => agentTools.includes(t))) {
294
- out[section.id] = section.build(agentTools);
295
- } else {
296
- out[section.id] = "";
297
- }
298
- }
299
- return out;
300
- }
301
-
302
- // packages/agent-runtime/currentTimeContext.ts
303
- var pad2 = (value) => String(value).padStart(2, "0");
304
- var resolveDefaultTimeZone = () => {
305
- try {
306
- return Intl.DateTimeFormat().resolvedOptions().timeZone || "UTC";
307
- } catch {
308
- return "UTC";
309
- }
310
- };
311
- var partsForTimeZone = (date, timeZone) => {
312
- const parts = new Intl.DateTimeFormat("en-US", {
313
- timeZone,
314
- year: "numeric",
315
- month: "2-digit",
316
- day: "2-digit",
317
- hour: "2-digit",
318
- minute: "2-digit",
319
- second: "2-digit",
320
- hour12: false
321
- }).formatToParts(date);
322
- return Object.fromEntries(
323
- parts.filter((part) => part.type !== "literal").map((part) => [part.type, part.value])
324
- );
325
- };
326
- var zonedDateTime = (date, timeZone) => {
327
- const parts = partsForTimeZone(date, timeZone);
328
- return [
329
- `${parts.year}-${parts.month}-${parts.day}`,
330
- `${parts.hour}:${parts.minute}:${parts.second}`
331
- ].join(" ");
332
- };
333
- var timeZoneOffset = (date, timeZone) => {
334
- const parts = partsForTimeZone(date, timeZone);
335
- const utcMs = Date.UTC(
336
- Number(parts.year),
337
- Number(parts.month) - 1,
338
- Number(parts.day),
339
- Number(parts.hour),
340
- Number(parts.minute),
341
- Number(parts.second)
342
- );
343
- const offsetMinutes = Math.round((utcMs - date.getTime()) / 6e4);
344
- const sign = offsetMinutes >= 0 ? "+" : "-";
345
- const absolute = Math.abs(offsetMinutes);
346
- return `UTC${sign}${pad2(Math.floor(absolute / 60))}:${pad2(absolute % 60)}`;
347
- };
348
- var toHourPrecision = (dateTime) => `${dateTime.slice(0, 13)}:00`;
349
- var buildCurrentTimeBlock = (now = /* @__PURE__ */ new Date(), timeZone = resolveDefaultTimeZone()) => [
350
- "--- \u5F53\u524D\u65F6\u95F4 ---",
351
- `\u5F53\u524D\u65E5\u671F: ${zonedDateTime(now, timeZone).slice(0, 10)}`,
352
- `\u5F53\u524D\u672C\u5730\u65F6\u95F4: ${toHourPrecision(zonedDateTime(now, timeZone))}`,
353
- // hour precision — see toHourPrecision
354
- `\u672C\u5730\u65F6\u533A: ${timeZone} / ${timeZoneOffset(now, timeZone)}`,
355
- `UTC \u65F6\u95F4: ${toHourPrecision(now.toISOString())}`,
356
- // hour precision; slice keeps the "T"
357
- "\u6CE8\u610F\uFF1A\u4E0A\u9762\u7684\u65F6\u95F4\u53EA\u7CBE\u786E\u5230\u5C0F\u65F6\uFF08\u4E3A\u547D\u4E2D prompt \u7F13\u5B58\u800C\u964D\u4F4E\u7C92\u5EA6\uFF09\u3002\u9700\u8981\u7CBE\u786E\u5230\u5206\u949F\u6216\u79D2\u65F6\uFF0C\u7528 shell \u6267\u884C `date` \u83B7\u53D6\u3002",
358
- "\u5F53\u7528\u6237\u95EE\u201C\u73B0\u5728\u201D\u201C\u5F53\u524D\u65F6\u95F4\u201D\u201C\u5317\u4EAC\u65F6\u95F4\u201D\u7B49\u65F6\u95F4\u95EE\u9898\u65F6\uFF0C\u76F4\u63A5\u4F7F\u7528\u8FD9\u91CC\u7684\u5F53\u524D\u65F6\u95F4\uFF1B\u4E0D\u8981\u53EA\u56DE\u7B54\u65E5\u671F\u3002",
359
- "\u5F53\u7528\u6237\u8BF4\u201C\u4ECA\u5929\u201D\u201C\u4ECA\u65E5\u201D\u6216 today \u65F6\uFF0C\u9ED8\u8BA4\u6307\u5F53\u524D\u672C\u5730\u65E5\u671F\uFF0C\u9664\u975E\u7528\u6237\u660E\u786E\u7ED9\u51FA\u5176\u5B83\u65E5\u671F\u3002"
360
- ].join("\n");
361
-
362
- // packages/core/chat/bareImageUrlShape.ts
363
- function requiresBareImageUrl(args) {
364
- const model = asTrimmedLowercaseString(args.model);
365
- if (!model.startsWith("gpt-")) return false;
366
- const provider = asTrimmedLowercaseString(args.provider);
367
- if (provider === "opencode-go") return true;
368
- return asTrimmedLowercaseString(args.endpoint).includes("opencode.ai/zen/go");
369
- }
370
- function toBareImageUrlContent(content) {
371
- if (!Array.isArray(content)) return content;
372
- let changed = false;
373
- const parts = content.map((part) => {
374
- if (!isImageUrlPart(part)) return part;
375
- const imageUrl = part.image_url;
376
- if (!imageUrl || typeof imageUrl !== "object") return part;
377
- const url = imageUrl.url;
378
- if (typeof url !== "string" || !url) return part;
379
- changed = true;
380
- return { ...part, image_url: url };
381
- });
382
- return changed ? parts : content;
383
- }
384
- function toBareImageUrlMessages(messages) {
385
- return messages.map((message) => {
386
- const content = toBareImageUrlContent(message.content);
387
- return content === message.content ? message : { ...message, content };
388
- });
389
- }
390
-
391
- // packages/integrations/openai/providerBodyCompatibility.ts
392
- var MOONSHOT_KIMI_K3_MODEL = "kimi-k3";
393
- var isKimiK3ProviderModel = (provider, model) => {
394
- const normalizedModel = asTrimmedLowercaseString(model);
395
- if (asTrimmedLowercaseString(provider) === "moonshot") {
396
- return normalizedModel === MOONSHOT_KIMI_K3_MODEL;
397
- }
398
- return isNoloHostedProvider(provider) && normalizedModel === PLATFORM_HOSTED_KIMI_K3_MODEL;
399
- };
400
- var normalizeChatCompletionsBodyForProvider = ({
401
- body,
402
- provider,
403
- model
404
- }) => {
405
- const nextBody = { ...body, model };
406
- const normalizedProvider = asTrimmedLowercaseString(provider);
407
- if (normalizedProvider === "fireworks" && isFireworksKimiModel(model)) {
408
- delete nextBody.reasoning;
409
- delete nextBody.reasoning_effort;
410
- }
411
- if (isKimiK3ProviderModel(provider, model)) {
412
- delete nextBody.temperature;
413
- delete nextBody.top_p;
414
- delete nextBody.frequency_penalty;
415
- delete nextBody.presence_penalty;
416
- if (typeof nextBody.max_tokens === "number") {
417
- nextBody.max_completion_tokens = nextBody.max_tokens;
418
- delete nextBody.max_tokens;
419
- }
420
- }
421
- if (Array.isArray(nextBody.messages) && requiresBareImageUrl({ provider, model })) {
422
- nextBody.messages = toBareImageUrlMessages(nextBody.messages);
423
- }
424
- return nextBody;
425
- };
426
-
427
- export {
428
- buildIdentityBlock,
429
- buildRuntimeGuidanceBlocks,
430
- resolveToolGuidedSections,
431
- buildCurrentTimeBlock,
432
- requiresBareImageUrl,
433
- toBareImageUrlMessages,
434
- normalizeChatCompletionsBodyForProvider
435
- };