nolo-cli 0.54.0 → 0.61.0-alpha.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (154) hide show
  1. package/README.md +3 -3
  2. package/{_executeModel-OPTKYHJA.js → _executeModel-CKT6RGTL.js} +48 -45
  3. package/{action-ORXWW2ZG.js → action-76JX3JX3.js} +7 -6
  4. package/{addContentAction-53BZ34AE.js → addContentAction-V3NAZRTJ.js} +6 -5
  5. package/{addDialogAgentAction-JRYUS54Y.js → addDialogAgentAction-RZOAF46K.js} +5 -4
  6. package/{agentDeleteCommand-FJIWU2BS.js → agentDeleteCommand-VN7NPXQ4.js} +30 -27
  7. package/{agentEmailCommands-CE32L43B.js → agentEmailCommands-F2TNAV4A.js} +59 -56
  8. package/{agentGrantCommands-2LEZDADN.js → agentGrantCommands-R3VQEZJR.js} +1 -1
  9. package/{agentListCommands-VJNKULIK.js → agentListCommands-OSM2ANI3.js} +61 -31
  10. package/{agentMachineCommands-HCJ3WQXL.js → agentMachineCommands-MTPWYVRV.js} +31 -28
  11. package/{agentPullCommand-M552CYSI.js → agentPullCommand-N7L2CT7L.js} +2 -2
  12. package/{agentRecordCommands-QFWERED4.js → agentRecordCommands-VWAWTVVC.js} +57 -54
  13. package/{agentRunCommand-G3GQMUNN.js → agentRunCommand-PLZOBNVK.js} +61 -58
  14. package/{agentRunControl-INKFDXDA.js → agentRunControl-WECMOO6O.js} +11 -6
  15. package/{agentRuntimeLocal-K327ELSL.js → agentRuntimeLocal-XCJLRWQE.js} +26 -23
  16. package/{agentSlice-ODKF4J6M.js → agentSlice-F6DOP4IW.js} +8 -7
  17. package/{appDeleteCommands-XUXMFDI4.js → appDeleteCommands-3BCFTRFJ.js} +30 -27
  18. package/{appDeployCommands-37F4GPCU.js → appDeployCommands-B4GMHCYA.js} +30 -27
  19. package/{appDeployStatusCommands-WSPU7TUK.js → appDeployStatusCommands-4MN36WIG.js} +30 -27
  20. package/{appGetCommands-YLOBA3EM.js → appGetCommands-4GJIEUAX.js} +30 -27
  21. package/{appListCommands-UD62R5ME.js → appListCommands-CHU53GSX.js} +30 -27
  22. package/{authCommand-OK6HLHGS.js → authCommand-WOTWLJNF.js} +35 -29
  23. package/{authCommands-2DUIUEMT.js → authCommands-ILTBI6JV.js} +7 -5
  24. package/{chatQueueReduxAdapter-TV2TUOQS.js → chatQueueReduxAdapter-HNSQXNIR.js} +20 -18
  25. package/{chunk-HPW5MNDQ.js → chunk-22BTGNSP.js} +113 -57
  26. package/{chunk-TR4DXUYX.js → chunk-2HPRMEEZ.js} +1180 -736
  27. package/{chunk-UNZDCI3O.js → chunk-2KDR4CWE.js} +35 -4
  28. package/{chunk-3ZTR7ZO4.js → chunk-2PGGC63K.js} +1 -1
  29. package/{chunk-JXIP6ZWH.js → chunk-37QVS7BU.js} +18 -5
  30. package/{chunk-EA5OYZVD.js → chunk-37XDGCY7.js} +1 -1
  31. package/chunk-3BLB7QKO.js +433 -0
  32. package/{chunk-CS6TCJ7E.js → chunk-3JQ2NRYU.js} +30 -7
  33. package/{chunk-RHMDMTDK.js → chunk-3JWKQDA4.js} +2 -2
  34. package/{chunk-3LKZRP7E.js → chunk-3QGUVVX5.js} +2 -2
  35. package/{chunk-SSXTSPSG.js → chunk-45YO6H7P.js} +71 -30
  36. package/{chunk-EJE33XNR.js → chunk-4C4ST2YE.js} +1521 -565
  37. package/{chunk-YLCUU3WM.js → chunk-4NJEIGBQ.js} +5 -5
  38. package/{chunk-K4NISKOR.js → chunk-5ZYA4JJ3.js} +47 -17
  39. package/{chunk-3Y2K5O2R.js → chunk-7A3RRUCQ.js} +125 -40
  40. package/{chunk-5FCIPEKT.js → chunk-7O7KH4X5.js} +1051 -926
  41. package/{chunk-6HDYSFLO.js → chunk-7UF7CQ6B.js} +3 -3
  42. package/{chunk-SUEIAK5N.js → chunk-AQMVUA7N.js} +1 -0
  43. package/{chunk-WQHGJHAL.js → chunk-AVE2YR4F.js} +732 -726
  44. package/{chunk-6COJEAYH.js → chunk-B7DXRX7F.js} +44 -37
  45. package/chunk-BFU6C242.js +66 -0
  46. package/{chunk-IA3A5373.js → chunk-C3FZR5EC.js} +1 -1
  47. package/{chunk-IWUMSAQF.js → chunk-CJCJF5XB.js} +26 -3
  48. package/{chunk-UGBHDMHI.js → chunk-CP7VIDZ7.js} +1 -1
  49. package/{chunk-JON2PHYT.js → chunk-CTCW7U7N.js} +1 -1
  50. package/{chunk-YBFJQC2M.js → chunk-D5XKNNUV.js} +65 -42
  51. package/{chunk-7NYDJAQ7.js → chunk-DNNSCSA2.js} +5 -5
  52. package/{chunk-NI2BS6UD.js → chunk-DWUCB2A3.js} +1 -1
  53. package/{chunk-AA564GBL.js → chunk-DZZL7UBV.js} +1 -1
  54. package/{chunk-75MSWWUE.js → chunk-E6RGHPDR.js} +5 -3
  55. package/chunk-EDKF7RX4.js +30 -0
  56. package/{chunk-FJHMLRDQ.js → chunk-ES6CVKVD.js} +21 -27
  57. package/{chunk-SYYUU7EV.js → chunk-FHAGENAS.js} +2 -3
  58. package/{chunk-NJUQBYFJ.js → chunk-FKFMIBTT.js} +3 -1
  59. package/{chunk-INZZJSQF.js → chunk-FZGV4FGK.js} +24 -12
  60. package/{chunk-YQBXOHE6.js → chunk-GAL47RNP.js} +1 -1
  61. package/{chunk-UOWXD4VN.js → chunk-HBPV76EK.js} +335 -243
  62. package/{chunk-MLEZPE3U.js → chunk-HLU5Q2GV.js} +4 -4
  63. package/{chunk-TC6P4NDR.js → chunk-HQP7HJDL.js} +6 -6
  64. package/{chunk-7FAS3NEF.js → chunk-IYCUMIYS.js} +19 -15
  65. package/{chunk-AUVFJGPC.js → chunk-JX5PJCWS.js} +7 -5
  66. package/{chunk-LYGNQHUW.js → chunk-JYYZCK2Z.js} +2 -4
  67. package/{chunk-XOJRZUPF.js → chunk-KWSQR2KK.js} +14 -29
  68. package/{chunk-2WBFJHQA.js → chunk-L7B47JXR.js} +34 -39
  69. package/{chunk-EICIFHVS.js → chunk-LAFC3B2I.js} +1 -1
  70. package/{chunk-N4JKMCY3.js → chunk-LJKICKVC.js} +2 -2
  71. package/chunk-M3JEW6N6.js +193 -0
  72. package/{chunk-LRGKOI5Y.js → chunk-MBOEV4L2.js} +7 -3
  73. package/{chunk-SVDMVX4G.js → chunk-MMZ6ZTVO.js} +112 -73
  74. package/{chunk-JDSUTNYY.js → chunk-MP64VFGD.js} +2 -2
  75. package/{chunk-NFLA6GSU.js → chunk-MXUDQZXQ.js} +44 -5
  76. package/chunk-N4G4PKQ6.js +23 -0
  77. package/{chunk-KXKQO4Q6.js → chunk-NTW5GWDM.js} +58 -1
  78. package/chunk-ONXOABJR.js +215 -0
  79. package/{chunk-TY3ADTX5.js → chunk-OZX2IPKM.js} +7 -2
  80. package/{chunk-Q4XZVZPN.js → chunk-P7OOB7QP.js} +1 -1
  81. package/{chunk-XIJZOCSP.js → chunk-PEZJEQAO.js} +1 -1
  82. package/{chunk-SWJGJMTW.js → chunk-PQDIDWGX.js} +1 -1
  83. package/chunk-PSCNXBYA.js +11 -0
  84. package/{chunk-BY2FF2C4.js → chunk-QEFJJS2I.js} +55 -73
  85. package/{chunk-BG7J6Y5X.js → chunk-QEW2MFDQ.js} +1 -1
  86. package/{chunk-KLIBF3BY.js → chunk-RDBARW6T.js} +8 -3
  87. package/{chunk-ZVOHVJI3.js → chunk-RJ2SAFB5.js} +82 -35
  88. package/{chunk-MYMBBB6Q.js → chunk-RVWRKFUB.js} +5 -3
  89. package/{chunk-43CXXVJD.js → chunk-RXX4GDIH.js} +1 -1
  90. package/chunk-SEJ5OS6F.js +49 -0
  91. package/{chunk-SAJSBPI2.js → chunk-SOJM57FX.js} +5 -2
  92. package/{chunk-EKLRRZIN.js → chunk-SPAQ4PVV.js} +0 -5
  93. package/{chunk-L7NG2M6H.js → chunk-TRV2MIDW.js} +89 -74
  94. package/{chunk-5UAYZEXO.js → chunk-UZPQSVM6.js} +1 -1
  95. package/{chunk-SVC3GGUA.js → chunk-VMWYBIXG.js} +7 -5
  96. package/{chunk-ZHXJ6M7T.js → chunk-W7XHHYWM.js} +4 -0
  97. package/{chunk-UR66XPVF.js → chunk-XAVSS3KE.js} +21 -3
  98. package/{chunk-A65UV3M5.js → chunk-XOKOSO35.js} +10 -19
  99. package/{chunk-VZMUOPYG.js → chunk-XTJTN3RW.js} +46 -3
  100. package/{chunk-T5HJEUQN.js → chunk-YCDWJX45.js} +1 -1
  101. package/{chunk-BBTN4NQD.js → chunk-Z4QSJILV.js} +85 -13
  102. package/{chunk-O5FLGN2L.js → chunk-ZRSJ3JEH.js} +6 -2
  103. package/{cliExecutor-BBUVQU4L.js → cliExecutor-HG3S345O.js} +1 -1
  104. package/{codingSkills-BCQXRZOI.js → codingSkills-VDXQYWX4.js} +2 -2
  105. package/{contentThunks-KNI6VXLT.js → contentThunks-7YG2ZYQC.js} +21 -19
  106. package/{cooldownCommands-GI5NNWGL.js → cooldownCommands-BSCH2W7P.js} +2 -2
  107. package/{createAgentAutomationAction-OK4L33KF.js → createAgentAutomationAction-PJQSCAIO.js} +23 -21
  108. package/{createDialogAction-JDSMY4AY.js → createDialogAction-SFEJX6SP.js} +23 -21
  109. package/{createPageAction-T7RA3HCG.js → createPageAction-B7WRHOQO.js} +24 -22
  110. package/{dbSlice-TVX6SN2T.js → dbSlice-IBVOBVMS.js} +5 -4
  111. package/{deleteFile-JYKRT7C3.js → deleteFile-FWP2PSBG.js} +3 -2
  112. package/{dialogCommands-UQZYWOOV.js → dialogCommands-VL2X22QC.js} +30 -27
  113. package/{dialogSlice-TYW2G7IL.js → dialogSlice-ANMACABO.js} +20 -18
  114. package/{docCreateCommands-OA6HZBWO.js → docCreateCommands-ITLGZ5YI.js} +29 -26
  115. package/{docDeleteCommands-KBB3YQI2.js → docDeleteCommands-LH3YNL4C.js} +30 -27
  116. package/{docReadCommands-ZLMFVC67.js → docReadCommands-YAJ77F36.js} +29 -26
  117. package/{docStore-2URPBVCS.js → docStore-D4HGHPWI.js} +6 -5
  118. package/{docUpdateCommands-HMH5KUON.js → docUpdateCommands-DQBOMH2G.js} +29 -26
  119. package/{getPricing-RFOPUWHY.js → getPricing-NM3NUTAS.js} +4 -4
  120. package/handleSendMessageAction-DF2OABGW.js +675 -0
  121. package/index.js +79 -88
  122. package/{lib-2ZTNRXR4.js → lib-FRRS27KN.js} +63 -28
  123. package/{localRuntimeAuthority-KQDAE64E.js → localRuntimeAuthority-R5UBODT3.js} +6 -4
  124. package/{localRuntimeDb-PF7CFKDL.js → localRuntimeDb-P37ZTX55.js} +1 -1
  125. package/{machineCommands-RK6L7ZWL.js → machineCommands-JXDYQ5LB.js} +296 -79
  126. package/{machineWsRunDispatch-3X64DW2Z.js → machineWsRunDispatch-3QHI7JX5.js} +55 -52
  127. package/{memberThunks-THZYZFSN.js → memberThunks-VZI6G7YZ.js} +10 -8
  128. package/{models-JVKUEER5.js → models-FAMINFZ7.js} +2 -2
  129. package/package.json +3 -2
  130. package/{read-K4JU4MQC.js → read-2BYWW7AA.js} +3 -2
  131. package/{readDocTool-LQGR6FUN.js → readDocTool-LC3A7QTB.js} +1 -1
  132. package/{readlineWorkspace-XUFJV3RS.js → readlineWorkspace-KVZTEAHB.js} +4365 -2795
  133. package/{removeDialogAgentAction-ECHCFB7N.js → removeDialogAgentAction-SFYZXHNK.js} +8 -7
  134. package/{runAgentClientLoop-24GQ2AW6.js → runAgentClientLoop-KGTEL7ZP.js} +49 -45
  135. package/{runtimeDoctorCommands-JKTTN723.js → runtimeDoctorCommands-CROTMULY.js} +7 -5
  136. package/{setDialogExtraReferencesAction-KCVJNGMB.js → setDialogExtraReferencesAction-Q32RGFTA.js} +6 -5
  137. package/{setPrimaryDialogAgentAction-VDOBOMKC.js → setPrimaryDialogAgentAction-BFYJHUJS.js} +8 -7
  138. package/{settingSlice-VR2IJSXC.js → settingSlice-IRUU4VFB.js} +6 -5
  139. package/{skillDiscovery-2QTZINON.js → skillDiscovery-NTRLM6KP.js} +1 -1
  140. package/{spaceCommands-S5YJJXL7.js → spaceCommands-KNAYWMCZ.js} +33 -215
  141. package/{streamAgentChatTurn-QHKP3ABO.js → streamAgentChatTurn-FLYPTXKZ.js} +105 -73
  142. package/{switchDialogAgentAction-5L4UP7VI.js → switchDialogAgentAction-L2KOKCGG.js} +5 -4
  143. package/{tableCommands-R6WFRDYF.js → tableCommands-SUNTHAYX.js} +1 -1
  144. package/{toolApiClient-53U4UDFF.js → toolApiClient-VGYUB4P5.js} +2 -1
  145. package/{tools-SSXSTC3O.js → tools-CVLUXK6P.js} +37 -34
  146. package/{tuiSummaryLlmCaller-URFJHFC5.js → tuiSummaryLlmCaller-F3DPFFZM.js} +15 -13
  147. package/{updateCommands-IYKLF3JX.js → updateCommands-AJYSD73Y.js} +2 -2
  148. package/{updateDialogTitleAction-YFYAEW3T.js → updateDialogTitleAction-HWJIZEIV.js} +23 -21
  149. package/agentSuperviseCommands-5AR3DKNN.js +0 -640
  150. package/chunk-6IGD47IC.js +0 -19
  151. package/chunk-FD36SCCD.js +0 -105
  152. package/chunk-GRFK2XP4.js +0 -230
  153. package/chunk-HJTAGT3W.js +0 -370
  154. package/handleSendMessageAction-GO53TY7U.js +0 -409
@@ -1,12 +1,16 @@
1
1
  import {
2
- isImageUrlPart
3
- } from "./chunk-VZMUOPYG.js";
2
+ isImageUrlPart,
3
+ isOllamaEndpoint
4
+ } from "./chunk-XTJTN3RW.js";
4
5
  import {
5
6
  AGENT_SELECTION_PRIORITY_INSTRUCTIONS
6
- } from "./chunk-ZVOHVJI3.js";
7
+ } from "./chunk-RJ2SAFB5.js";
8
+ import {
9
+ getModelContextWindow
10
+ } from "./chunk-5ZYA4JJ3.js";
7
11
  import {
8
12
  estimateTokenCount
9
- } from "./chunk-BBTN4NQD.js";
13
+ } from "./chunk-PSCNXBYA.js";
10
14
  import {
11
15
  canonicalizeToolNames
12
16
  } from "./chunk-O6OSWFZQ.js";
@@ -14,7 +18,7 @@ import {
14
18
  PLATFORM_HOSTED_KIMI_K3_MODEL,
15
19
  isFireworksKimiModel,
16
20
  isNoloHostedProvider
17
- } from "./chunk-HPW5MNDQ.js";
21
+ } from "./chunk-22BTGNSP.js";
18
22
  import {
19
23
  asTrimmedLowercaseString
20
24
  } from "./chunk-QSJ3HFEF.js";
@@ -79,6 +83,9 @@ var buildStartupProtocolBlock = (options = {}) => {
79
83
  lines.push(
80
84
  "- \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"
81
85
  );
86
+ lines.push(
87
+ "- \u9700\u8981\u5F53\u524D\u7CBE\u786E\u65F6\u95F4\uFF08\u5206\u949F/\u79D2\uFF09\u65F6\uFF0C\u901A\u8FC7 shell `date` \u83B7\u53D6\uFF0C\u4E0D\u8981\u51ED\u8BB0\u5FC6\u6216\u4F30\u7B97\u3002"
88
+ );
82
89
  }
83
90
  return lines.join("\n");
84
91
  };
@@ -174,12 +181,12 @@ var MENU_USAGE_INSTRUCTIONS = `--- \u4EA4\u4E92\u8BF4\u660E ---
174
181
 
175
182
  // packages/ai/agent/toolGuidedSections.ts
176
183
  var AGENT_ORCHESTRATION_RUN_INSTRUCTIONS = `--- \u591A Agent \u7F16\u6392\uFF08\u540E\u53F0 Run\uFF09 ---
177
- \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\u3002\u4F55\u65F6\u6D3E\u53D1\u89C1\u300C\u591A Agent \u534F\u4F5C\u300D\u6BB5\uFF1B\u672C\u6BB5\u53EA\u8BB2\u6D3E\u53D1\u4E4B\u540E\u7684\u76EF\u68A2\u4E0E\u6392\u9519\u3002
184
+ \u7528 startAgentRun \u542F\u52A8\u5B50 Agent\uFF08wait:false \u5F02\u6B65 fork+exec \u8FD4\u56DE runId\uFF1Bwait:true \u540C\u6B65\u7B49\u7ED3\u679C\uFF09\uFF0C\u7528 controlAgentRun \u63A7\u5236/\u8BCA\u65AD\u3002\u4F55\u65F6\u6D3E\u53D1\u89C1\u300C\u591A Agent \u534F\u4F5C\u300D\u6BB5\uFF1B\u672C\u6BB5\u53EA\u8BB2\u6D3E\u53D1\u4E4B\u540E\u7684\u76EF\u68A2\u4E0E\u6392\u9519\u3002
178
185
 
179
- 1. \u76EF\u68A2\uFF1A**\u5F02\u6B65\u6D3E\u53D1\u540E\u7ACB\u5373\u6536\u5C3E\uFF0C\u7B49\u7EC8\u6001\u901A\u77E5\u3002** \u4E32\u884C\u4F9D\u8D56\u4E0D\u662F\u963B\u585E\u5BF9\u8BDD\u7684\u7406\u7531\u2014\u2014\u9760 wake \u63A5\u529B\u3002\u662F\u5426\u5141\u8BB8\u963B\u585E\u7B49\u5F85\uFF0C\u7531\u5DE5\u5177\u8868\u81EA\u5DF1\u56DE\u7B54\uFF0C\u4E0D\u7528\u4F60\u5224\u65AD\u73AF\u5883\uFF1AcontrolAgentRun \u7684 action \u91CC\u6709 wait \u5C31\u8BF4\u660E\u8FD9\u91CC\u6CA1\u6709\u7EC8\u6001\u5524\u9192\u901A\u9053\uFF0C\u53EF\u4EE5\u7528\u5B83\u963B\u585E\u5230\u7EC8\u6001\uFF08\u540C\u6837\u4E0D\u8981\u81EA\u5DF1\u5FAA\u73AF wait\uFF0C\u90A3\u662F\u4F2A\u88C5\u6210\u7B49\u5F85\u7684\u8F6E\u8BE2\uFF09\uFF1B\u6CA1\u6709 wait \u5C31\u8BF4\u660E run \u5230\u7EC8\u6001\u4F1A\u81EA\u52A8\u628A\u5BF9\u8BDD\u63A5\u56DE\u6765\uFF0C\u6D3E\u53D1\u5B8C\u76F4\u63A5\u6536\u5C3E\u3002
180
- 2. \u7981\u6B62\u8F6E\u8BE2/\u7981\u7A7A\u8F6C/\u522B\u590D\u8FF0 status\uFF0C\u8BED\u4E49\u4EE5\u4E24\u4E2A\u5DE5\u5177\u7684\u63CF\u8FF0\u4E3A\u51C6\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\u72EC\u7ACB\u5B50\u4EFB\u52A1\u4E00\u6B21\u6D3E\u5B8C\uFF0C\u7B49\u5404\u81EA\u7EC8\u6001\u9010\u4E2A\u6C47\u603B\u3002\u65E0\u6587\u4EF6\u4EA4\u96C6\u3001\u65E0\u771F\u5B9E\u6570\u636E\u4F9D\u8D56\u7684\u4EFB\u52A1\u9ED8\u8BA4\u5E76\u53D1\u6D3E\u53D1\u2014\u2014\u4E0D\u8981\u56E0\u5171\u7528\u540C\u4E00\u6267\u884C agent/\u901A\u9053\u800C\u81EA\u884C\u52A0\u300C\u901A\u9053\u4E32\u884C\u300D\u4FDD\u5B88\u5047\u8BBE\uFF08\u540C\u901A\u9053\u5141\u8BB8\u5E76\u53D1 fork \u591A\u5B9E\u4F8B\uFF0C\u5B9E\u4F8B\u95F4\u65E0\u4E0A\u4E0B\u6587\u5171\u4EAB\uFF09\uFF1B\u53EA\u6709\u771F\u5B9E\u6587\u4EF6/\u6570\u636E\u4F9D\u8D56\u6216 brief \u660E\u793A\u51B2\u7A81\u9762\u65F6\u624D\u4E32\u884C\u3002
186
+ 1. \u76EF\u68A2\uFF1A**\u5F02\u6B65\u6D3E\u53D1\u540E\u7ACB\u5373\u6536\u5C3E\uFF0C\u7B49\u7EC8\u6001\u901A\u77E5\u3002** \u4E32\u884C\u4F9D\u8D56\u4E0D\u662F\u963B\u585E\u5BF9\u8BDD\u7684\u7406\u7531\u2014\u2014\u7531\u5BBF\u4E3B\u80FD\u529B\u51B3\u5B9A\u5982\u4F55\u63A5\u529B\u3002\u662F\u5426\u5141\u8BB8\u963B\u585E\u7B49\u5F85\uFF0C\u7531\u5DE5\u5177\u8868\u81EA\u5DF1\u56DE\u7B54\uFF0C\u4E0D\u7528\u4F60\u731C\u6D4B\u73AF\u5883\uFF1AcontrolAgentRun \u7684 action \u91CC\u6709 wait \u5C31\u53EF\u4EE5\u7528\u5B83\u963B\u585E\u5230\u7EC8\u6001\uFF08\u540C\u6837\u4E0D\u8981\u81EA\u5DF1\u5FAA\u73AF wait\uFF0C\u90A3\u662F\u4F2A\u88C5\u6210\u7B49\u5F85\u7684\u8F6E\u8BE2\uFF09\uFF1B\u6CA1\u6709 wait \u65F6\u6309\u5DE5\u5177\u63CF\u8FF0\u5904\u7406\uFF0C\u4E0D\u8981\u636E\u6B64\u63A8\u65AD\u4E00\u5B9A\u5B58\u5728 terminal wake\uFF0C\u6D3E\u53D1\u5B8C\u76F4\u63A5\u6536\u5C3E\u3002
187
+ 2. \u7981\u6B62\u8F6E\u8BE2/\u7981\u7A7A\u8F6C/\u522B\u590D\u8FF0 status\uFF0C\u8BED\u4E49\u4EE5\u4E24\u4E2A\u5DE5\u5177\u7684\u63CF\u8FF0\u4E3A\u51C6\u3002\u6B63\u5E38\u540E\u53F0 run \u6D3E\u53D1\u540E\u6536\u5C3E\uFF0C\u80FD\u5426\u6C47\u603B\u3001\u8981\u4E0D\u8981\u7EE7\u7EED\u7531\u5BBF\u4E3B\u7EC8\u6001\u901A\u77E5\u51B3\u5B9A\uFF0C\u4E0D\u8981\u7528\u4E3B\u52A8 status \u5224\u65AD\u3002status \u4EC5\u7528\u4E8E\u5F02\u5E38\u8BCA\u65AD\u2014\u2014\u6000\u7591\u5361\u6B7B\u3001failed \u540E\u770B\u8BE6\u60C5/\u65E5\u5FD7\u3001\u7528\u6237\u660E\u786E\u8BE2\u95EE\u6267\u884C\u7EC6\u8282\uFF08tailLines:0 \u53EA\u770B\u72B6\u6001\u6458\u8981\uFF09\u3002\u5E76\u884C\uFF1A\u72EC\u7ACB\u5B50\u4EFB\u52A1\u4E00\u6B21\u6D3E\u5B8C\uFF0C\u7B49\u5404\u81EA\u7EC8\u6001\u9010\u4E2A\u6C47\u603B\u3002\u65E0\u6587\u4EF6\u4EA4\u96C6\u3001\u65E0\u771F\u5B9E\u6570\u636E\u4F9D\u8D56\u7684\u4EFB\u52A1\u9ED8\u8BA4\u5E76\u53D1\u6D3E\u53D1\u2014\u2014\u4E0D\u8981\u56E0\u5171\u7528\u540C\u4E00\u6267\u884C agent/\u901A\u9053\u800C\u81EA\u884C\u52A0\u300C\u901A\u9053\u4E32\u884C\u300D\u4FDD\u5B88\u5047\u8BBE\uFF08\u540C\u901A\u9053\u5141\u8BB8\u5E76\u53D1 fork \u591A\u5B9E\u4F8B\uFF0C\u5B9E\u4F8B\u95F4\u65E0\u4E0A\u4E0B\u6587\u5171\u4EAB\uFF09\uFF1B\u53EA\u6709\u771F\u5B9E\u6587\u4EF6/\u6570\u636E\u4F9D\u8D56\u6216 brief \u660E\u793A\u51B2\u7A81\u9762\u65F6\u624D\u4E32\u884C\u3002
181
188
  3. \u6392\u9519\u5148\u5206\u8BCA\uFF1AagentKey \u6CA1\u7167\u6284 listAgents \u5C31\u5148\u4FEE key\uFF08\u4E0D\u7B97\u901A\u9053\u6545\u969C\uFF09\uFF1B\u62A5\u9519\u542B not found / invalid ref / Local agent config not found \u2192 \u5148 readAgent \u590D\u6838\uFF0C**\u7981\u6B62**\u636E\u6B64\u63A8\u65AD\u51ED\u8BC1\u7F3A\u5931\u6216\u901A\u9053\u5168\u6302\uFF1B\u540C\u4E00\u5DF2\u9A8C\u8BC1 key \u4ECD\u5931\u8D25\u4E14\u9519\u8BEF\u660E\u786E\u6307\u5411\u901A\u9053\uFF08429\u3001\u9274\u6743\u5931\u8D25\u3001machine offline\uFF09\u624D\u8BB0\u4E3A\u901A\u9053\u6545\u969C\u3002\u5224\u5B9A\u300C\u6D3E\u53D1\u901A\u9053\u6574\u4F53\u4E0D\u53EF\u7528\u300D\u9700 \u22652 \u4E2A\u4E0D\u540C\u5019\u9009\u5404\u81EA\u5B8C\u6210\u300C\u5DF2\u9A8C\u8BC1 key + \u4E00\u6B21\u771F\u5B9E\u6D3E\u53D1\u300D\u4E14\u5931\u8D25\uFF0C\u5019\u9009\u4E0D\u8DB3\u5C31\u5982\u5B9E\u62A5\u544A\u300C\u4EC5\u6B64\u5019\u9009\u4E14\u901A\u9053\u5931\u8D25\u300D\uFF0C\u4E0D\u5F97\u5938\u5927\u6210\u5168\u5E93\u4E0D\u53EF\u7528\u3002
182
- 4. \u53EA\u6709 status=failed/\u8D85\u65F6\u6216 progress \u957F\u65F6\u95F4\u65E0\u52A8\u9759\uFF08\u7591\u4F3C\u5361\u6B7B\uFF09\u624D\u62C9 tailLines:30 \u770B\u65E5\u5FD7\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\uFF0C\u522B\u5047\u8BBE\u300C\u6D3E\u53D1\u4E86\u5C31\u5728\u8DD1\u300D\u3002`;
189
+ 4. \u53EA\u6709 status=failed/\u8D85\u65F6\u6216 progress \u957F\u65F6\u95F4\u65E0\u52A8\u9759\uFF08\u7591\u4F3C\u5361\u6B7B\uFF09\u624D\u62C9 tailLines:30 \u770B\u65E5\u5FD7\u3002append \u53EF\u76F4\u63A5\u8C03\u7528\u2014\u2014not found/\u5DF2\u7EC8\u6001/\u8FD0\u884C\u4E2D\u5165\u961F\u7531 executor \u81EA\u8BC1\uFF1Bstop \u53EF\u76F4\u63A5\u8C03\u7528\uFF0Cnot found/\u5DF2\u7EC8\u6001/\u8FD0\u884C\u4E2D\u7531\u63A7\u5236\u5E73\u9762\u81EA\u884C\u5904\u7406\uFF08\u5DF2\u7EC8\u6001\u539F\u6837\u8FD4\u56DE\u3001\u4E0D\u4F1A\u88AB\u8986\u76D6\uFF09\uFF1Bstatus \u4EC5\u7528\u4E8E\u5F02\u5E38\u8BCA\u65AD\uFF0C\u4E0D\u662F stop \u524D mandatory preflight\u3002`;
183
190
  var AGENT_COLLABORATION_INSTRUCTIONS = `--- Agent \u7F16\u6392\u4E0E\u534F\u4F5C\uFF08\u591A Agent \u534F\u4F5C\uFF1A\u8BA1\u5212 \u2192 \u6309\u9700\u6D3E\u53D1 \u2192 \u5BA1\u67E5\uFF09 ---
184
191
  \u4EA7\u51FA\u4F18\u5148\uFF1A\u4E0D\u4E3A\u300C\u51D1\u6570\u91CF\u300D\u6D3E\u53D1\uFF0C\u4E5F\u4E0D\u5305\u529E\u53EF\u5E76\u884C\u7684\u72EC\u7ACB\u9886\u57DF\uFF1B\u6BCF\u8F6E\u63A8\u8FDB\u5F53\u524D\u6700\u6709\u4EF7\u503C\u7684\u52A8\u4F5C\uFF0C\u62FF\u8BC1\u636E\u518D\u5224\u65AD\u3002
185
192
 
@@ -199,6 +206,11 @@ var AGENT_COLLABORATION_INSTRUCTIONS = `--- Agent \u7F16\u6392\u4E0E\u534F\u4F5C
199
206
  - **\u5E76\u884C\u8D26\u547D\u4E2D \u2192 \u6D3E\u53D1**\uFF1A\u22652 \u4E2A\u4E92\u4E0D\u4F9D\u8D56\u7684\u72EC\u7ACB\u9886\u57DF\uFF0C\u6216\u4ED3\u5E93\u6539\u52A8\uFF0B\u9A8C\u8BC1\uFF0B\u53D1\u5E03/\u8FC1\u79FB\u957F\u94FE\u8DEF \u2192 \u6309\u9886\u57DF\u5E76\u53D1\u6D3E\u53D1\u3002
200
207
  - \u4E24\u8D26\u5747\u4E0D\u547D\u4E2D\u4E0D\u51D1\u6570\u6D3E\u53D1\uFF1B\u5B9E\u73B0\u6F14\u53D8\u4E3A\u591A\u8F6E\u9A8C\u8BC1\u5FAA\u73AF\u65F6\u7ACB\u5373\u6B62\u635F\u8F6C\u6D3E\u53D1\u3002\u7528\u6237\u660E\u786E\u8981\u6C42\u4F60\u4EB2\u81EA\u5B8C\u6210\u65F6\u6309\u7528\u6237\u8981\u6C42\u6267\u884C\uFF1B\u4EC5\u5F53\u6240\u6709\u5DF2\u9A8C\u8BC1\u6D3E\u53D1\u901A\u9053\u5747\u4E0D\u53EF\u7528\uFF08\u987B\u6709\u5F53\u6B21\u9519\u8BEF\u8BC1\u636E\uFF09\u624D\u964D\u7EA7\u81EA\u505A\u5E76\u8BF4\u660E\u3002
201
208
 
209
+ **\u4EFB\u52A1\u5206\u578B\u4E0E\u6536\u5DE5\u9884\u7B97\uFF08tool \u8C03\u7528\u5373\u6210\u672C\uFF0C\u9884\u7B97\u5148\u4E8E\u52E4\u594B\uFF09**\uFF1A
210
+ - **\u63A2\u7D22/spike \u578B**\uFF08\u8DEF\u5F84\u6216\u62A5\u9519\u672A\u77E5\u3001\u9A8C\u8BC1\u5916\u90E8\u5047\u8BBE\uFF09\uFF1Abrief \u5FC5\u987B\u5199\u5DE5\u5177\u8C03\u7528\u6216\u65F6\u95F4\u9884\u7B97\uFF08\u5982 \u2264150 \u6B21\u8C03\u7528 / \u226420 \u5206\u949F\uFF09\uFF0C\u5230\u8FBE\u9884\u7B97\u7ACB\u5373\u6536\u5DE5\uFF0C\u8F93\u51FA\u300C\u5DF2\u9A8C\u8BC1\u4E8B\u5B9E / \u5361\u70B9 / \u4E0B\u4E00\u6B65\u5EFA\u8BAE\u300D\u4E2D\u95F4\u62A5\u544A\u3002DoD \u662F\u7ED3\u8BBA\u800C\u975E\u8DD1\u901A\uFF1B\u7F16\u6392\u8005\u51ED\u62A5\u544A\u51B3\u5B9A\u7EED\u8DD1\u3001\u8F6C\u5411\u8FD8\u662F\u653E\u5F03\uFF0C\u7981\u6B62\u5355 run \u65E0\u9650\u8FED\u4EE3\u5230\u8DD1\u901A\u3002
211
+ - **\u6267\u884C\u578B**\uFF08\u8DEF\u5F84\u5DF2\u77E5\u7684\u660E\u786E\u6539\u52A8\uFF09\uFF1A\u53EF\u5355 run \u5B8C\u6210\uFF0C\u4F46 diff \u4E00\u6210\u578B\u7ACB\u5373\u6D3E\u72EC\u7ACB review\uFF0C\u4E0D\u628A review \u5806\u5230\u5168\u90E8\u5B8C\u5DE5\u540E\u3002
212
+ - **\u957F\u94FE\u578B**\uFF08\u8FC1\u79FB / \u53D1\u5E03 / \u591A\u9636\u6BB5\u4EFB\u52A1\uFF09\uFF1A\u62CD\u5E73\u4E3A\u300C\u4FA6\u5BDF \u2192 \u65B9\u6848 \u2192 \u6267\u884C \u2192 \u9A8C\u8BC1\u300D\u6241\u5E73\u9636\u6BB5\uFF0C\u6BCF\u9636\u6BB5\u72EC\u7ACB run\u3001\u72EC\u7ACB\u5BA1\u67E5\uFF1B\u7981\u6B62\u4E00\u4E2A run \u4ECE\u5934\u625B\u5230\u5C3E\u3002
213
+
202
214
  **\u6D3E\u53D1\u901A\u9053**\uFF1A
203
215
  - \u76EE\u6807\u8BB0\u5F55\u58F0\u660E\u4E86 delegation.serverBase / runtimeServerBase \u2192 \u81EA\u52A8\u8DEF\u7531\uFF0C\u65E0\u9700\u91CD\u590D\u586B\uFF1B\u7528\u6237\u7ED9\u51FA\u53EF\u8BBF\u95EE origin \u65F6\u53EF\u4F20 serverBase \u8986\u76D6\u3002\u52FF\u81C6\u9020\u5730\u5740\u3001\u52FF\u628A localhost \u5F53\u8FDC\u7AEF\u673A\u5668\u3002
204
216
  - startAgentRun \u8FD4\u56DE runId \u53EA\u662F\u5DF2\u542F\u52A8\u4E0D\u8868\u793A\u5B8C\u6210\uFF1Bdone/failed \u540E\u9760 terminal wake \u7EE7\u7EED\u7236\u5BF9\u8BDD\uFF0C\u8BFB child evidence \u51B3\u5B9A\u4E0B\u4E00\u6B65\u3002\u80FD\u4E0D\u80FD\u540C\u6B65\u7B49\u5F85\u770B\u5DE5\u5177\u8868\u7ED9\u4E86\u4EC0\u4E48\u53C2\u6570/\u52A8\u4F5C\uFF08\u89C1\u300C\u591A Agent \u7F16\u6392\u300D\u6BB5\uFF09\uFF0C\u6CA1\u7ED9\u5C31\u662F\u5F02\u6B65\u6D3E\u53D1\u7ACB\u5373\u6536\u5C3E\u3002\u8981\u524D\u53F0\u5B9E\u65F6\u53D1\u8A00\u7528 runStreamingAgent\u3002
@@ -208,9 +220,9 @@ var AGENT_COLLABORATION_INSTRUCTIONS = `--- Agent \u7F16\u6392\u4E0E\u534F\u4F5C
208
220
  - \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
209
221
  - \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\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
210
222
 
211
- **\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\uFF1Bnot found \u65F6\u91CD\u65B0 listAgents \u53D6\u6700\u65B0 key\u3002
223
+ **\u9009\u4EBA**\uFF1A\u53EA\u8BA4 listAgents \u8FD4\u56DE\u7684\u8BB0\u5F55\uFF08\u9ED8\u8BA4\u4F18\u5148\u4ECE preferred \u53D1\u73B0\uFF09\uFF0CagentKey \u5FC5\u987B\u539F\u6837\u590D\u5236\u5176\u5B57\u6BB5\uFF0C\u4E0D\u62FC\u63A5/\u4E0D\u63A8\u65AD/\u4E0D\u6362\u683C\u5F0F/\u4E0D\u4F20 name\uFF1Bnot found \u65F6\u91CD\u65B0 listAgents \u53D6\u6700\u65B0 key\u3002
212
224
  ${AGENT_SELECTION_PRIORITY_INSTRUCTIONS}
213
- - \u6A21\u578B\u5206\u6863\uFF1A\u4E2D\u6587\u5199\u7A3F/\u957F\u6587/\u4F4E AI \u5473\u4F18\u5148 \`gemini-3.7-flash\`\uFF08\u884C\u6587\u81EA\u7136\u3001\u9AD8\u6027\u4EF7\u6BD4\uFF09\u6216 \`kimi-k3\`\u3002\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\uFF1B\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\uFF1B\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
225
+ - \u6A21\u578B\u5206\u6863\uFF1A\u4E2D\u6587\u5199\u7A3F/\u957F\u6587/\u4F4E AI \u5473\u4F18\u5148 \`gemini-3.8-flash\`\uFF08\u884C\u6587\u81EA\u7136\u3001\u9AD8\u6027\u4EF7\u6BD4\uFF09\u6216 \`kimi-k3\`\u3002\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\uFF1B\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\uFF1B\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
214
226
  - \u901A\u9053\u6392\u9664\uFF1A\u53EA\u6392\u9664\u300C\u672C\u6B21\u6539\u52A8\u4F5C\u8005\u300D\u4E0E\u300C\u6709\u5F53\u6B21\u9519\u8BEF\u8BC1\u636E\u7684\u574F\u901A\u9053\u300D\uFF08\u914D\u989D\u8017\u5C3D/\u4F59\u989D\u4E0D\u8DB3/\u9650\u6D41\uFF09\u3002\u4E0E\u6267\u884C\u8005\u4E0D\u540C\u5B9E\u4F8B\u5373\u4E3A\u5408\u6CD5 reviewer\uFF08flash \u6863 review \u6210\u672C\u53EF\u5FFD\u7565\uFF09\u3002\u4E0D\u51ED\u540D\u5B57\u7F16\u9020\u80FD\u529B\uFF0C\u4E0D\u7D22\u53D6 prompt/\u5BC6\u94A5/\u6570\u636E\u5E93 key\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
215
227
 
216
228
  **\u62C6\u5206\u4E0E brief**\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\u5148\u56FA\u5316\u5951\u7EA6\u518D\u6D3E\u53D1\uFF0C\u52FF\u8BA9\u591A\u65B9\u5404\u81EA\u731C\u540C\u4E00\u63A5\u53E3\u3002\u5B50\u4EFB\u52A1\u81EA\u5305\u542B\u3001\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\u4E0E\u7528\u6237\u6C9F\u901A\u3002\u6D4B\u8BD5\u7C7B DoD \u5FC5\u987B\u9489\u6B7B\u57FA\u7EBF\u7CBE\u786E\u6570\u5B57\uFF08\u6D3E\u53D1\u524D\u4EB2\u81EA\u8DD1\u6D4B\u8BD5\u8BB0\u4E0B pass/fail \u4E0E\u65E2\u6709\u5931\u8D25\u5F52\u5C5E\uFF09\uFF0C\u9A8C\u6536\u4EB2\u81EA\u590D\u8DD1\u5BF9\u7167\u2014\u2014\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\u6309\u672A\u9A8C\u8BC1\u5904\u7406\u3002
@@ -261,6 +273,14 @@ var TOOL_ROUND_ECONOMY_INSTRUCTIONS = `--- \u5DE5\u5177\u8F6E\u6B21\u7ECF\u6D4E\
261
273
  - \u53EA\u6709\u300C\u4E0B\u4E00\u6B65\u8981\u505A\u4EC0\u4E48\u53D6\u51B3\u4E8E\u4E0A\u4E00\u6B65\u7684\u7ED3\u679C\u300D\u65F6\u624D\u5206\u8F6E\u3002
262
274
  - \u4E00\u6B21\u8C03\u7528\u91CC\u80FD\u8868\u8FBE\u7684\u5C31\u522B\u62C6\u6210\u591A\u6B21\uFF1A\u7528 glob \u7684\u82B1\u62EC\u53F7\u7EC4\u4E00\u6B21\u5339\u914D\u591A\u79CD\u540E\u7F00\u3001\u7528\u4E00\u6761\u547D\u4EE4\u4EE3\u66FF\u4E09\u6761\u3001\u6309\u9700\u8981\u7684\u884C\u8303\u56F4\u8BFB\u6587\u4EF6\u800C\u4E0D\u662F\u5148\u5168\u8BFB\u518D\u56DE\u5934\u627E\u3002
263
275
  - \u7B49\u5F85\u7C7B\u5DE5\u5177\uFF08taskWait \u7B49\uFF09\u6309\u9884\u8BA1\u8017\u65F6\u4E00\u6B21\u7ED9\u8DB3\u9884\u7B97\uFF0C\u4E0D\u8981\u7528\u77ED\u8D85\u65F6\u53CD\u590D\u7EED\u7B49\u2014\u2014\u90A3\u662F\u628A\u5FAA\u73AF\u653E\u5728\u4E86\u6700\u8D35\u7684\u5730\u65B9\u3002`;
276
+ var PRIVILEGE_ESCALATION_INSTRUCTIONS = `--- \u6743\u9650\u63D0\u5347 ---
277
+ \u547D\u4EE4\u5931\u8D25\u4E14\u539F\u56E0\u6307\u5411\u6743\u9650\u4E0D\u8DB3\uFF08sudo: \u9700\u8981\u5BC6\u7801 / Permission denied / EACCES / Operation not permitted\uFF09\u65F6\uFF0C\u4F18\u5148\u628A\u300C\u8F93\u5BC6\u7801\u300D\u8FD9\u4E00\u6B65\u4EA4\u8FD8\u7ED9\u7528\u6237\u7684\u56FE\u5F62\u6388\u6743\u901A\u9053\uFF0C\u800C\u4E0D\u662F\u628A sudo \u547D\u4EE4\u629B\u56DE\u7ED9\u7528\u6237\u624B\u6284\uFF1A
278
+ 1. \u684C\u9762\u4F1A\u8BDD\uFF08Linux \u6709 DISPLAY/WAYLAND_DISPLAY\uFF09\u76F4\u63A5\u8DD1 \`pkexec <\u547D\u4EE4>\`\uFF1Apolkit \u4F1A\u5728\u7528\u6237\u5C4F\u5E55\u5F39 GUI \u5BC6\u7801\u6846\u3002\u5F39\u4E4B\u524D\u5148\u4E00\u53E5\u8BDD\u8BF4\u660E\u8981\u505A\u4EC0\u4E48\u3001\u4E3A\u4F55\u9700\u8981 root\uFF0C\u907F\u514D\u51ED\u7A7A\u5F39\u7A97\uFF1B\u590D\u6742\u547D\u4EE4\u5148\u5199\u6210\u811A\u672C\u518D \`pkexec bash /tmp/xxx.sh\`\u3002
279
+ 2. pkexec \u4E0D\u53EF\u7528\u6216\u975E\u56FE\u5F62\u4F1A\u8BDD\u65F6\u6309\u4EE3\u4EF7\u5347\u5E8F\u964D\u7EA7\uFF1A
280
+ - \u7528\u6237\u7EA7\u7B49\u4EF7\u65B9\u6848\u5148\u884C\uFF1Asystemctl --user set-property\u3001\u65E0\u7279\u6743\u914D\u7F6E\u8DEF\u5F84\u3001setcap\u3001\u628A\u7528\u6237\u52A0\u5165\u6240\u9700\u7EC4\uFF08\u91CD\u65B0\u767B\u5F55\u751F\u6548\uFF09\u7B49\u2014\u2014\u5F88\u591A\u300C\u5FC5\u987B root\u300D\u5176\u5B9E\u6709 user \u7EA7\u7B49\u4EF7\u7269\u3002
281
+ - \u786E\u5B9E\u7ED5\u4E0D\u5F00\uFF1A\u7ED9\u51FA\u4E00\u6761\u53EF\u76F4\u63A5\u7C98\u8D34\u7684\u547D\u4EE4\uFF08\u591A\u6B65\u5408\u5E76\u6210\u4E00\u6761\uFF09\uFF0C\u4E00\u6B21\u6027\u8BF4\u6E05\u526F\u4F5C\u7528\uFF0C\u7B49\u7528\u6237\u56DE\u62A5\u7ED3\u679C\u518D\u7EE7\u7EED\uFF1B\u4E0D\u8981\u8BA9\u7528\u6237\u6765\u56DE\u8DD1\u591A\u6B65\u3001\u4E0D\u8981\u91CD\u590D\u7D22\u8981\u3002
282
+ 3. Windows \u7528 \`Start-Process -Verb RunAs\`\uFF08UAC \u5F39\u7A97\uFF09\u3001macOS \u7528 \`osascript ... with administrator privileges\`\uFF0C\u4EA4\u4E92\u539F\u5219\u76F8\u540C\uFF1A\u5F39\u7A97\u524D\u5148\u8BF4\u660E\u3001\u5931\u8D25\u540E\u4E0D\u91CD\u590D\u6253\u6270\u3002
283
+ 4. \u7981\u6B62\u9759\u9ED8\u7ED5\u8FC7\uFF1A\u4E0D\u91CD\u8BD5\u540C\u4E00\u7279\u6743\u547D\u4EE4\u8D4C\u8FD0\u6C14\u3001\u4E0D\u7528\u7BA1\u9053/\u73AF\u5883\u53D8\u91CF\u5582\u5BC6\u7801\u7ED9 sudo\u3001\u4E0D\u4FEE\u6539 polkit/sudoers \u653E\u5BBD\u6388\u6743\u3002`;
264
284
  var TOOL_GUIDED_SECTIONS = [
265
285
  {
266
286
  id: "toolRoundEconomy",
@@ -268,6 +288,11 @@ var TOOL_GUIDED_SECTIONS = [
268
288
  triggerAnyTool: true,
269
289
  build: () => TOOL_ROUND_ECONOMY_INSTRUCTIONS
270
290
  },
291
+ {
292
+ id: "privilegeEscalation",
293
+ triggerTools: ["execShell"],
294
+ build: () => PRIVILEGE_ESCALATION_INSTRUCTIONS
295
+ },
271
296
  {
272
297
  id: "agentOrchestration",
273
298
  triggerTools: [
@@ -302,6 +327,7 @@ var TOOL_GUIDED_SECTIONS = [
302
327
  ];
303
328
  var TOOL_GUIDED_SECTION_ORDER = [
304
329
  "toolRoundEconomy",
330
+ "privilegeEscalation",
305
331
  "agentOrchestration",
306
332
  "agentCollaboration",
307
333
  "webAccess",
@@ -323,66 +349,6 @@ function resolveToolGuidedSections(agentTools) {
323
349
  return out;
324
350
  }
325
351
 
326
- // packages/agent-runtime/currentTimeContext.ts
327
- var pad2 = (value) => String(value).padStart(2, "0");
328
- var resolveDefaultTimeZone = () => {
329
- try {
330
- return Intl.DateTimeFormat().resolvedOptions().timeZone || "UTC";
331
- } catch {
332
- return "UTC";
333
- }
334
- };
335
- var partsForTimeZone = (date, timeZone) => {
336
- const parts = new Intl.DateTimeFormat("en-US", {
337
- timeZone,
338
- year: "numeric",
339
- month: "2-digit",
340
- day: "2-digit",
341
- hour: "2-digit",
342
- minute: "2-digit",
343
- second: "2-digit",
344
- hour12: false
345
- }).formatToParts(date);
346
- return Object.fromEntries(
347
- parts.filter((part) => part.type !== "literal").map((part) => [part.type, part.value])
348
- );
349
- };
350
- var zonedDateTime = (date, timeZone) => {
351
- const parts = partsForTimeZone(date, timeZone);
352
- return [
353
- `${parts.year}-${parts.month}-${parts.day}`,
354
- `${parts.hour}:${parts.minute}:${parts.second}`
355
- ].join(" ");
356
- };
357
- var timeZoneOffset = (date, timeZone) => {
358
- const parts = partsForTimeZone(date, timeZone);
359
- const utcMs = Date.UTC(
360
- Number(parts.year),
361
- Number(parts.month) - 1,
362
- Number(parts.day),
363
- Number(parts.hour),
364
- Number(parts.minute),
365
- Number(parts.second)
366
- );
367
- const offsetMinutes = Math.round((utcMs - date.getTime()) / 6e4);
368
- const sign = offsetMinutes >= 0 ? "+" : "-";
369
- const absolute = Math.abs(offsetMinutes);
370
- return `UTC${sign}${pad2(Math.floor(absolute / 60))}:${pad2(absolute % 60)}`;
371
- };
372
- var toHourPrecision = (dateTime) => `${dateTime.slice(0, 13)}:00`;
373
- var buildCurrentTimeBlock = (now = /* @__PURE__ */ new Date(), timeZone = resolveDefaultTimeZone()) => [
374
- "--- \u5F53\u524D\u65F6\u95F4 ---",
375
- `\u5F53\u524D\u65E5\u671F: ${zonedDateTime(now, timeZone).slice(0, 10)}`,
376
- `\u5F53\u524D\u672C\u5730\u65F6\u95F4: ${toHourPrecision(zonedDateTime(now, timeZone))}`,
377
- // hour precision — see toHourPrecision
378
- `\u672C\u5730\u65F6\u533A: ${timeZone} / ${timeZoneOffset(now, timeZone)}`,
379
- `UTC \u65F6\u95F4: ${toHourPrecision(now.toISOString())}`,
380
- // hour precision; slice keeps the "T"
381
- "\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",
382
- "\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",
383
- "\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"
384
- ].join("\n");
385
-
386
352
  // packages/ai/agent/contextCompiler.ts
387
353
  function createHash(_algo) {
388
354
  let buf = "";
@@ -484,10 +450,16 @@ var isKimiK3ProviderModel = (provider, model) => {
484
450
  }
485
451
  return isNoloHostedProvider(provider) && normalizedModel === PLATFORM_HOSTED_KIMI_K3_MODEL;
486
452
  };
453
+ var isOllamaProviderOrEndpoint = (provider, endpoint) => {
454
+ const p = asTrimmedLowercaseString(provider);
455
+ if (p === "ollama" || p === "ollama-cloud") return true;
456
+ return isOllamaEndpoint(endpoint);
457
+ };
487
458
  var normalizeChatCompletionsBodyForProvider = ({
488
459
  body,
489
460
  provider,
490
- model
461
+ model,
462
+ endpoint
491
463
  }) => {
492
464
  const nextBody = { ...body, model };
493
465
  const normalizedProvider = asTrimmedLowercaseString(provider);
@@ -505,6 +477,17 @@ var normalizeChatCompletionsBodyForProvider = ({
505
477
  delete nextBody.max_tokens;
506
478
  }
507
479
  }
480
+ if (isOllamaProviderOrEndpoint(provider, endpoint)) {
481
+ const existingNumCtx = nextBody.options?.num_ctx ?? nextBody.num_ctx;
482
+ if (existingNumCtx === void 0) {
483
+ const cw = getModelContextWindow(model);
484
+ const safeNumCtx = typeof cw === "number" && cw > 0 ? cw === 256e3 ? 32768 : Math.min(cw, 131072) : 32768;
485
+ nextBody.options = {
486
+ ...nextBody.options,
487
+ num_ctx: safeNumCtx
488
+ };
489
+ }
490
+ }
508
491
  if (Array.isArray(nextBody.messages) && requiresBareImageUrl({ provider, model })) {
509
492
  nextBody.messages = toBareImageUrlMessages(nextBody.messages);
510
493
  }
@@ -516,7 +499,6 @@ export {
516
499
  buildRuntimeGuidanceBlocks,
517
500
  TOOL_GUIDED_SECTION_ORDER,
518
501
  resolveToolGuidedSections,
519
- buildCurrentTimeBlock,
520
502
  hashStablePrefixContent,
521
503
  estimateContextTokens,
522
504
  compileContextLayers,
@@ -1,6 +1,6 @@
1
1
  import {
2
2
  trimTrailingSlash
3
- } from "./chunk-KLIBF3BY.js";
3
+ } from "./chunk-RDBARW6T.js";
4
4
  import {
5
5
  toErrorMessage
6
6
  } from "./chunk-HNMXYYJR.js";
@@ -3,12 +3,15 @@ import {
3
3
  resolvePlatformChatCompletionsEndpoint,
4
4
  resolvePlatformHostedCredentialProvider,
5
5
  resolvePlatformResponsesEndpoint
6
- } from "./chunk-N4JKMCY3.js";
6
+ } from "./chunk-LJKICKVC.js";
7
+ import {
8
+ CLI_PROVIDER_VALUES
9
+ } from "./chunk-W7XHHYWM.js";
7
10
  import {
8
11
  CLIENT_VERSION_TOO_OLD_CODE,
9
12
  buildClientVersionGateErrorDetail,
10
13
  evaluatePlatformHostedClientVersionGate
11
- } from "./chunk-HPW5MNDQ.js";
14
+ } from "./chunk-22BTGNSP.js";
12
15
  import {
13
16
  asTrimmedLowercaseString
14
17
  } from "./chunk-QSJ3HFEF.js";
@@ -110,7 +113,9 @@ function hasDirectOpenAiCompatibleProvider(env) {
110
113
  );
111
114
  }
112
115
  function resolveAgentProviderMode(agentConfig) {
113
- if (agentConfig.apiSource === "cli" || agentConfig.provider === "cli" || agentConfig.cliProvider) {
116
+ const cliProviderName = asTrimmedLowercaseString(agentConfig.cliProvider);
117
+ const hasRealCliProvider = Boolean(cliProviderName && CLI_PROVIDER_VALUES.includes(cliProviderName)) || asTrimmedLowercaseString(agentConfig.provider) === "cli";
118
+ if (agentConfig.apiSource === "cli" || hasRealCliProvider && agentConfig.apiSource !== "platform") {
114
119
  return "cli";
115
120
  }
116
121
  if (agentConfig.apiSource === "custom" || agentConfig.customProviderUrl) {
@@ -20,20 +20,6 @@ import {
20
20
  asOptionalTrimmedString
21
21
  } from "./chunk-G3SUCT4W.js";
22
22
 
23
- // packages/agent-runtime/agentRecordKeys.ts
24
- function buildAgentRuntimeAgentLookupKeys(args) {
25
- if (/^agent(-pub)?-/.test(args.agentRef)) {
26
- return [args.agentRef];
27
- }
28
- return [
29
- ownedAgentKey(args.userId, args.agentRef),
30
- publicAgentKey(args.agentRef)
31
- ];
32
- }
33
- function shouldFetchAgentRuntimeRecordRemotely(dbKey) {
34
- return /^agent(-pub)?-/.test(dbKey);
35
- }
36
-
37
23
  // packages/agent-runtime/runtimeToolSurface.ts
38
24
  var DEFAULT_PRIVATE_NOLO_WORKSPACE_TOOLS = [
39
25
  "listDialogs",
@@ -51,6 +37,25 @@ var DEFAULT_PRIVATE_NOLO_WORKSPACE_TOOLS = [
51
37
  "cliWhoami",
52
38
  "cliDoctor"
53
39
  ];
40
+ var DEFAULT_SUBTASK_REFERENCE_NOLO_WORKSPACE_TOOLS = [
41
+ "readDialog",
42
+ "queryDialogsBySubjectRef",
43
+ "readDoc",
44
+ "queryTableRows"
45
+ ];
46
+ function applyToolSurfaceConstraints(surface, constraints) {
47
+ const allowed = constraints.allowedToolNames == null ? null : new Set(asTrimmedNonEmptyStringArray(constraints.allowedToolNames));
48
+ const blocked = new Set(asTrimmedNonEmptyStringArray(constraints.blockedToolNames ?? []));
49
+ const narrow = (names) => names.filter(
50
+ (name) => (allowed === null || allowed.has(name)) && !blocked.has(name)
51
+ );
52
+ return {
53
+ ...surface,
54
+ explicitToolNames: narrow(surface.explicitToolNames),
55
+ injectedToolNames: narrow(surface.injectedToolNames),
56
+ finalToolNames: narrow(surface.finalToolNames)
57
+ };
58
+ }
54
59
  function uniqueToolNames(values) {
55
60
  return [...new Set(asTrimmedNonEmptyStringArray(values))];
56
61
  }
@@ -75,21 +80,29 @@ function explicitOnlyReason(args) {
75
80
  function resolveRuntimeToolSurface(args) {
76
81
  const explicitToolNames = uniqueToolNames(args.explicitToolNames ?? []);
77
82
  if (canInjectPrivateDefaults(args)) {
78
- const injectedToolNames = [...DEFAULT_PRIVATE_NOLO_WORKSPACE_TOOLS];
83
+ const baseInjected = args.injectPrivateDefaults === false ? args.defaultInjectedToolNames ?? DEFAULT_SUBTASK_REFERENCE_NOLO_WORKSPACE_TOOLS : args.defaultInjectedToolNames ?? DEFAULT_PRIVATE_NOLO_WORKSPACE_TOOLS;
84
+ const injectedToolNames2 = uniqueToolNames([
85
+ ...baseInjected,
86
+ ...args.additionalRequiredToolNames ?? []
87
+ ]);
79
88
  return {
80
89
  explicitToolNames,
81
- injectedToolNames,
90
+ injectedToolNames: injectedToolNames2,
82
91
  finalToolNames: uniqueToolNames([
83
92
  ...explicitToolNames,
84
- ...injectedToolNames
93
+ ...injectedToolNames2
85
94
  ]),
86
95
  auditReason: "private-authenticated-defaults"
87
96
  };
88
97
  }
98
+ const injectedToolNames = uniqueToolNames(args.additionalRequiredToolNames ?? []);
89
99
  return {
90
100
  explicitToolNames,
91
- injectedToolNames: [],
92
- finalToolNames: explicitToolNames,
101
+ injectedToolNames,
102
+ finalToolNames: uniqueToolNames([
103
+ ...explicitToolNames,
104
+ ...injectedToolNames
105
+ ]),
93
106
  auditReason: explicitOnlyReason(args)
94
107
  };
95
108
  }
@@ -116,7 +129,10 @@ function resolveRuntimeToolSurfaceForAgent(args) {
116
129
  agentOwnerId: inferredOwnerId,
117
130
  invocationVisibility: visibility,
118
131
  runtimeHost: args.runtimeHost,
119
- trustedPrivateInvocation: args.trustedPrivateInvocation
132
+ trustedPrivateInvocation: args.trustedPrivateInvocation,
133
+ injectPrivateDefaults: args.injectPrivateDefaults,
134
+ defaultInjectedToolNames: args.defaultInjectedToolNames,
135
+ additionalRequiredToolNames: args.additionalRequiredToolNames
120
136
  });
121
137
  }
122
138
  var SECRET_FIELD_NAMES = [
@@ -146,6 +162,20 @@ function redactAgentRecordForWorkspaceTool(record) {
146
162
  return redacted;
147
163
  }
148
164
 
165
+ // packages/agent-runtime/agentRecordKeys.ts
166
+ function buildAgentRuntimeAgentLookupKeys(args) {
167
+ if (/^agent(-pub)?-/.test(args.agentRef)) {
168
+ return [args.agentRef];
169
+ }
170
+ return [
171
+ ownedAgentKey(args.userId, args.agentRef),
172
+ publicAgentKey(args.agentRef)
173
+ ];
174
+ }
175
+ function shouldFetchAgentRuntimeRecordRemotely(dbKey) {
176
+ return /^agent(-pub)?-/.test(dbKey);
177
+ }
178
+
149
179
  // packages/ai/agent/agentSelectionPriority.ts
150
180
  function parseAgentTimestamp(value) {
151
181
  if (typeof value === "number" && Number.isFinite(value)) return value;
@@ -181,16 +211,26 @@ function compareAgentSelection(left, right) {
181
211
  const rightUpdated = parseAgentTimestamp(right.updatedAt ?? right.createdAt);
182
212
  return rightUpdated - leftUpdated;
183
213
  }
184
- var AGENT_SELECTION_PRIORITY_INSTRUCTIONS = ` - \u4F18\u5148\u7EA7\u5951\u7EA6\uFF08\u4E0E\u5217\u8868\u6392\u5E8F\u771F\u503C\u4E25\u683C\u4E00\u81F4\uFF09\uFF1A
185
- 1. \u6536\u85CF\u7684 OAuth / \u81EA\u5B9A\u4E49 Agent\uFF08isFavorite=true \u4E14 isOAuth=true \u6216 apiSource="custom"\uFF1A\u79C1\u6709\u8BA2\u9605/\u51ED\u636E\u4F18\u5148\uFF0C\u4E0D\u70E7\u5E73\u53F0 credits\uFF09
186
- 2. \u5176\u4ED6\u6536\u85CF Agent\uFF08isFavorite=true\uFF09
187
- 3. \u672A\u6536\u85CF\u7684 OAuth / \u81EA\u5B9A\u4E49 Agent\uFF08isOAuth=true \u6216 apiSource="custom"\uFF09
188
- 4. \u5176\u4ED6\u81EA\u5EFA Agent\uFF08isOwned=true\uFF09
189
- 5. \u516C\u5F00 / \u5E73\u53F0 Agent\uFF08apiSource="platform" \u6216\u793E\u533A\u516C\u5F00\uFF09
190
- \u540C\u6863\u4F4D\u4E0B\u6536\u85CF\u9879\u6309\u6700\u8FD1\u6536\u85CF\uFF08favoritedAt\uFF09\u4F18\u5148\uFF0C\u5176\u4F59\u6309\u6700\u8FD1\u66F4\u65B0\uFF08updatedAt\uFF09\u4F18\u5148\u3002
191
- - \u6536\u85CF\u4F18\u5148\u786C\u95E8\uFF08\u7528\u6237\u94A6\u5B9A\uFF0C\u8986\u76D6\u9876\u6863\u6210\u672C\u95E8\uFF09\uFF1A\u7981\u6B62\u5728\u6536\u85CF Agent \u53EF\u7528\u65F6\u6D3E\u5E73\u53F0\u901A\u9053\u3002\u6536\u85CF\u7684 OAuth/\u81EA\u5B9A\u4E49 Agent \u8D70\u7528\u6237\u79C1\u6709\u8BA2\u9605/\u51ED\u636E\uFF0C\u5373\u4F7F\u662F\u9876\u6863\u6A21\u578B\uFF08Opus\u3001GPT-5.6 \u7EA7\uFF09\u4E5F\u4E0D\u6784\u6210\u6210\u672C\u56DE\u907F\u7406\u7531\u3002\u6BCF\u6B21 startAgentRun \u90FD\u521B\u5EFA\u72EC\u7ACB\u7684 run/dialog\uFF1B\u5E76\u884C\u6D3E\u53D1\u65F6\u5FC5\u987B\u7528\u5404\u81EA\u7684 runId\uFF0C\u5E76\u7528 batchId \u7BA1\u7406\u6279\u6B21\uFF0C\u907F\u514D\u7F16\u6392\u5C42\u6DF7\u6DC6\u7ED3\u679C\u3002\u4EC5\u5F53\u6536\u85CF Agent \u786E\u8BA4\u4E0D\u53EF\u7528\u540E\u624D\u5141\u8BB8\u6D3E\u5E73\u53F0 Agent\uFF0C\u4E14\u5FC5\u987B\u5F53\u6B21\u544A\u77E5\u7528\u6237\u5C06\u6D88\u8017\u5E73\u53F0\u79EF\u5206\u3002
214
+ var AGENT_SELECTION_PRIORITY_INSTRUCTIONS = ` - \u4F18\u5148\u7EA7\u5951\u7EA6\uFF1A\u4E24\u9636\u6BB5\u53D1\u73B0\u4E0E\u9009\u4EBA\u5951\u7EA6\uFF08listAgents \u9ED8\u8BA4 scope="preferred"\uFF09\uFF1A
215
+ 1. \u9996\u8F6E\u53D1\u73B0\uFF1A\u9ED8\u8BA4\u8C03\u7528 listAgents()\uFF08\u5373 scope="preferred"\uFF09\uFF0C\u4EC5\u53D1\u73B0\u7528\u6237\u5DF2\u6709\u5173\u7CFB\u7684 preferred Agent\uFF08\u6536\u85CF\u3001\u81EA\u6709\u3001OAuth \u8BA2\u9605\u3001\u81EA\u5B9A\u4E49 API\u3001\u672C\u5730 Agent\uFF09\u3002
216
+ 2. \u6210\u672C\u5F52\u5C5E\u8BC6\u522B\uFF1A\u6839\u636E billingSource \u660E\u786E\u5224\u5B9A\uFF08user_subscription\uFF1A\u7528\u6237\u8BA2\u9605/OAuth\uFF1Buser_api\uFF1A\u7528\u6237\u81EA\u5B9A\u4E49 API\uFF1Blocal\uFF1A\u672C\u5730\u8FD0\u884C\uFF1Bplatform_credits\uFF1A\u5E73\u53F0\u79EF\u5206\uFF09\u3002
217
+ 3. \u4F18\u5148\u7EA7\u6392\u5E8F\uFF08\u4E0E\u5217\u8868\u6392\u5E8F\u771F\u503C\u4E00\u81F4\uFF09\uFF1A
218
+ (1) \u6536\u85CF\u7684 OAuth / \u81EA\u5B9A\u4E49 Agent\uFF08billingSource="user_subscription" \u6216 "user_api"\uFF0CisFavorite=true\uFF1A\u79C1\u6709\u8BA2\u9605/\u51ED\u636E\u4F18\u5148\uFF09
219
+ (2) \u5176\u4ED6\u6536\u85CF Agent\uFF08isFavorite=true\uFF09
220
+ (3) \u672A\u6536\u85CF\u7684 OAuth / \u81EA\u5B9A\u4E49 Agent\uFF08billingSource="user_subscription" \u6216 "user_api"\uFF09
221
+ (4) \u5176\u4ED6\u81EA\u5EFA Agent\uFF08isOwned=true\uFF09
222
+ (5) \u516C\u5F00 / \u5E73\u53F0 Agent\uFF08billingSource="platform_credits" \u6216\u793E\u533A\u516C\u5F00\uFF09
223
+ \u540C\u6863\u4F4D\u4E0B\u6536\u85CF\u9879\u6309\u6700\u8FD1\u6536\u85CF\uFF08favoritedAt\uFF09\u4F18\u5148\uFF0C\u5176\u4F59\u6309\u6700\u8FD1\u66F4\u65B0\uFF08updatedAt\uFF09\u4F18\u5148\u3002
224
+ 4. \u516C\u5F00 Agent \u53D1\u73B0\uFF1A\u4EC5\u5F53 preferred \u5217\u8868\u4E2D\u6CA1\u6709\u9002\u5408\u4E14\u53EF\u7528\u7684\u5019\u9009\uFF0C\u6216\u7528\u6237\u660E\u786E\u8981\u6C42\u63A2\u7D22\u516C\u5F00 Agent \u65F6\uFF0C\u624D\u663E\u5F0F\u8C03\u7528 listAgents({ scope: "public" })\u3002\u516C\u5F00 Agent \u53EF\u80FD\u6D88\u8017 platform_credits\uFF0C\u5FC5\u987B\u5728\u83B7\u5F97\u7528\u6237\u660E\u786E\u6263\u8D39\u6388\u6743\u540E\u624D\u80FD\u8C03\u7528\u3002
225
+ - \u6536\u85CF\u4F18\u5148\u786C\u95E8\uFF08\u7528\u6237\u94A6\u5B9A\uFF0C\u8986\u76D6\u9876\u6863\u6210\u672C\u95E8\uFF09\uFF1A\u5F53\u5B58\u5728\u53EF\u7528\u4E14\u9002\u5408\u4EFB\u52A1\u7684\u6536\u85CF user_subscription / user_api / local Agent \u65F6\uFF0C\u7981\u6B62\u6539\u6D3E platform_credits\u3002favorite + platform_credits \u53EA\u8868\u793A\u7528\u6237\u8868\u8FBE\u8FC7\u504F\u597D\u5E76\u56E0\u6B64\u8FDB\u5165 preferred discovery\uFF0C\u4E0D\u4EE3\u8868\u514D\u8D39\u6216\u514D\u6388\u6743\uFF1B\u4F7F\u7528\u5B83\u4ECD\u987B\u9075\u5B88\u5E73\u53F0\u79EF\u5206\u6263\u8D39\u544A\u77E5/\u6388\u6743\u89C4\u5219\u3002\u6BCF\u6B21 startAgentRun \u90FD\u521B\u5EFA\u72EC\u7ACB\u7684 run/dialog\uFF1B\u5E76\u884C\u6D3E\u53D1\u65F6\u5FC5\u987B\u7528\u5404\u81EA\u7684 runId\uFF0C\u5E76\u7528 batchId \u7BA1\u7406\u6279\u6B21\uFF0C\u907F\u514D\u7F16\u6392\u5C42\u6DF7\u6DC6\u7ED3\u679C\u3002\u4EC5\u5F53\u6536\u85CF Agent \u786E\u8BA4\u4E0D\u53EF\u7528\u540E\u624D\u5141\u8BB8\u6D3E\u5E73\u53F0 Agent\uFF0C\u4E14\u5FC5\u987B\u5F53\u6B21\u544A\u77E5\u7528\u6237\u5C06\u6D88\u8017\u5E73\u53F0\u79EF\u5206\u3002
192
226
  - \u5339\u914D\u53C2\u8003\uFF1A\u6309\u4EFB\u52A1\u6240\u9700\u80FD\u529B\u7B5B tools \u5B57\u6BB5\uFF1B\u540C\u6863\u5019\u9009\u4F18\u5148\u6210\u672C\u4F4E\uFF08\u4F4E inputPrice\uFF09\u6216\u8D70\u7528\u6237\u79C1\u6709\u51ED\u636E\u7684\u901A\u9053\u3002tools \u5B57\u6BB5\u53EA\u53CD\u6620\u989D\u5916\u80FD\u529B\uFF0C\u4E0D\u53CD\u6620 coding \u80FD\u529B\u2014\u2014\u4EE3\u7801\u5DE5\u5177\u7531 host \u81EA\u52A8\u6CE8\u5165\uFF0Ctools=[] \u4E0D\u4EE3\u8868\u4E0D\u80FD\u5199\u4EE3\u7801\uFF0C\u4E0D\u8981\u636E\u6B64\u6392\u9664\u5019\u9009\u3002
193
- - 429 \u9650\u6D41\u4E0E\u77E5\u60C5\u6743\u5951\u7EA6\uFF1A\u4EFB\u4F55\u7528\u6237\u79C1\u6709\u51ED\u636E\u4E0E\u81EA\u5EFA Agent\uFF08isOwned=true\u3001isOAuth=true \u6216 apiSource="custom" \u4E4B\u4E00\uFF09\u51FA\u73B0\u5728 listAgents \u7684 unavailableAgents\uFF08429 \u51B7\u5374\u671F\uFF09\u4E2D\u65F6\uFF0C\u7981\u6B62\u9759\u9ED8\u8DF3\u8FC7\uFF1B\u6539\u6D3E\u5E73\u53F0 Agent\uFF08\u6D88\u8017\u5E73\u53F0\u79EF\u5206\uFF09\u524D\u5FC5\u987B\u5728\u56DE\u590D\u4E2D\u544A\u77E5\u7528\u6237\uFF1A\u54EA\u4E2A\u8BA2\u9605/\u81EA\u5EFA agent \u9650\u6D41\u3001\u9884\u8BA1\u4F55\u65F6\u6062\u590D\uFF08nextAvailableAt\uFF09\u3001\u672C\u6B21\u5C06\u6263\u5E73\u53F0\u79EF\u5206\uFF1B\u4EFB\u52A1\u4E0D\u7D27\u6025\u5EFA\u8BAE\u7B49\u6062\u590D\u6216\u8BE2\u95EE\u7528\u6237\u3002`;
227
+ - isOwned=true\u3001isOAuth=true \u6216 apiSource="custom" \u7684\u5019\u9009\u6309\u4F18\u5148\u7EA7\u5951\u7EA6\u5904\u7406\u3002
228
+ - qualityContext \u662F task-domain-specific supporting evidence\uFF1A\u53EA\u5728\u5339\u914D\u7684 task domain \u5185\u3001suitable candidates \u4E2D\uFF0C\u5E76\u4E14\u4ECD\u6392\u5728\u73B0\u6709\u4F18\u5148\u7EA7 / \u6210\u672C / \u53EF\u7528\u6027\u89C4\u5219\u4E4B\u540E\u53C2\u8003\u3002
229
+ \u6BCF\u884C\u5F62\u5982 \`dimension [direction] (benchmark version): model=score\`\u3002\u6BCF\u4E2A dimension\uFF08preference / rubric / slop / repetition / length / task_success \u7B49\uFF09\u90FD\u662F\u4E00\u6761\u72EC\u7ACB evidence\uFF0C\u4E0D\u662F\u603B\u5206\u7684\u4E00\u90E8\u5206\u3002
230
+ direction \u53EA\u662F\u6307\u6807\u65B9\u5411\uFF1Ahigher_better \u8D8A\u9AD8\u8D8A\u597D\uFF0Clower_better \u8D8A\u4F4E\u8D8A\u597D\uFF0Cneutral \u53EA\u63CF\u8FF0\u884C\u4E3A\u7279\u5F81\uFF08\u5982\u8F93\u51FA\u957F\u5EA6\uFF09\uFF0C\u4E0D\u4EE3\u8868\u4F18\u52A3\u3002
231
+ \u7981\u6B62\u628A\u4E0D\u540C dimension \u76F8\u52A0 / \u5E73\u5747 / \u5F52\u4E00\u5316\uFF0C\u6216\u751F\u6210 overall score / winner / rank\uFF1B\u7981\u6B62\u8DE8 benchmark identity \u6BD4\u8F83 raw score\uFF1B\u540C\u4E00 dimension \u5185\u53EA\u6BD4\u8F83\u540C\u4E00\u884C\u7684\u540C\u7C7B benchmark evidence\u3002
232
+ \u672A\u5217\u51FA\u7684 model \u6216 dimension \u8868\u793A\u6CA1\u6709 curated evidence\uFF1A\u4E0D\u662F 0\uFF0C\u4E5F\u4E0D\u662F\u8F83\u5F31\u3002\u54EA\u4E9B dimension \u66F4\u91CD\u8981\u7531\u5F53\u524D\u4EFB\u52A1\u51B3\u5B9A\uFF0C\u4E0D\u8981\u5199\u6B7B\u6743\u91CD\u3002
233
+ - 429 \u9650\u6D41\u4E0E\u77E5\u60C5\u6743\u5951\u7EA6\uFF1A\u4EFB\u4F55\u7528\u6237\u79C1\u6709\u51ED\u636E\u4E0E\u81EA\u5EFA Agent\uFF08billingSource \u4E3A user_subscription / user_api / local\uFF0C\u6216 isOwned=true\uFF09\u51FA\u73B0\u5728 listAgents \u7684 unavailableAgents\uFF08429 \u51B7\u5374\u671F\uFF09\u4E2D\u65F6\uFF0C\u7981\u6B62\u9759\u9ED8\u8DF3\u8FC7\uFF1B\u6539\u6D3E\u5E73\u53F0 Agent\uFF08\u6D88\u8017\u5E73\u53F0\u79EF\u5206\uFF09\u524D\u5FC5\u987B\u5728\u56DE\u590D\u4E2D\u544A\u77E5\u7528\u6237\uFF1A\u54EA\u4E2A\u8BA2\u9605/\u81EA\u5EFA agent \u9650\u6D41\u3001\u9884\u8BA1\u4F55\u65F6\u6062\u590D\uFF08nextAvailableAt\uFF09\u3001\u672C\u6B21\u5C06\u6263\u5E73\u53F0\u79EF\u5206\uFF1B\u4EFB\u52A1\u4E0D\u7D27\u6025\u5EFA\u8BAE\u7B49\u6062\u590D\u6216\u8BE2\u95EE\u7528\u6237\u3002`;
194
234
 
195
235
  // packages/agent-runtime/noloWorkspaceTools.ts
196
236
  var NOLO_WORKSPACE_TOOL_NAMES = [
@@ -273,10 +313,12 @@ function buildNoloWorkspaceOpenAiTools(args) {
273
313
  description: "Confirmed dialog ids or dbKeys to delete."
274
314
  }
275
315
  }, ["query"]);
276
- add("listAgents", "List the current user's agents with runnable agentKey for delegation. Copy the agentKey verbatim; do not infer it from the display name. Agents currently rate-limited (429) are hidden by default and summarized in `unavailableAgents` with `unavailableCount`; pass showUnavailable: true to include them in `agents`.", {
277
- space: stringToolParam("Optional space id or URL."),
278
- publicOnly: { type: "boolean", description: "Only show public agents." },
279
- showUnavailable: { type: "boolean", description: "Include agents currently rate-limited (429). Default false." }
316
+ add("listAgents", "List agents for delegation. Default scope='preferred' returns the user's favorites, owned, OAuth, custom API, and local agents only; scope='public' discovers shared/marketplace agents; scope='all' returns their deduplicated union. Public agents may consume platform credits. Copy the agentKey verbatim; use the runnable agentKey exactly and do not infer it from the display name. publicOnly is deprecated compatibility for scope='public'. Rate-limited agents are hidden unless showUnavailable is true.", {
317
+ scope: { type: "string", enum: ["preferred", "public", "all"], description: "Discovery scope; preferred is the default and does not load the public marketplace." },
318
+ publicOnly: { type: "boolean", description: "Deprecated compatibility alias for scope='public'." },
319
+ showUnavailable: { type: "boolean", description: "Include agents currently rate-limited (429). Default false." },
320
+ verbose: { type: "boolean", description: "Return full safe-summary details when supported." },
321
+ space: stringToolParam("Optional space id or URL.")
280
322
  });
281
323
  add("readAgent", "Read one agent's full config by exact agentKey returned by listAgents (agent-<userId>-<id> or agent-pub-<id>); do not use the display name.", {
282
324
  agent: stringToolParam("Exact agentKey from listAgents (preferred; copy verbatim; plain id or URL are compatibility fallbacks).")
@@ -600,7 +642,11 @@ function buildNoloWorkspaceCommandArgs(call) {
600
642
  const cliArgs = ["agent", "list"];
601
643
  const space = noloStringArg(args.space);
602
644
  if (space) cliArgs.push("--space", space);
645
+ const scope = noloStringArg(args.scope);
646
+ if (scope) cliArgs.push("--scope", scope);
603
647
  if (args.publicOnly === true) cliArgs.push("--public-only");
648
+ if (args.showUnavailable === true) cliArgs.push("--show-unavailable");
649
+ if (args.verbose === true) cliArgs.push("--verbose");
604
650
  cliArgs.push("--json", "--safe");
605
651
  return cliArgs;
606
652
  }
@@ -666,12 +712,13 @@ function buildNoloWorkspaceCommandArgs(call) {
666
712
  }
667
713
 
668
714
  export {
715
+ applyToolSurfaceConstraints,
716
+ resolveRuntimeToolSurfaceForAgent,
717
+ redactAgentRecordForWorkspaceTool,
669
718
  compareAgentSelection,
670
719
  AGENT_SELECTION_PRIORITY_INSTRUCTIONS,
671
720
  buildAgentRuntimeAgentLookupKeys,
672
721
  shouldFetchAgentRuntimeRecordRemotely,
673
- resolveRuntimeToolSurfaceForAgent,
674
- redactAgentRecordForWorkspaceTool,
675
722
  NOLO_WORKSPACE_TOOL_NAMES,
676
723
  buildNoloWorkspaceOpenAiTools,
677
724
  noloPositiveIntegerString,
@@ -4,12 +4,14 @@ import {
4
4
  import {
5
5
  patch,
6
6
  read
7
- } from "./chunk-7NYDJAQ7.js";
7
+ } from "./chunk-DNNSCSA2.js";
8
8
  import {
9
9
  DEVICE_LOCAL_OWNER_ID,
10
- isDeviceLocalSpaceBody,
10
+ isDeviceLocalSpaceBody
11
+ } from "./chunk-KWSQR2KK.js";
12
+ import {
11
13
  selectIdentityUserId
12
- } from "./chunk-XOJRZUPF.js";
14
+ } from "./chunk-SEJ5OS6F.js";
13
15
 
14
16
  // packages/create/space/utils/permissions.ts
15
17
  var checkSpaceMembership = (spaceData, userId) => {
@@ -4,7 +4,7 @@ import {
4
4
 
5
5
  // packages/cli/agentCommandSupport.ts
6
6
  async function getDefaultCliDb() {
7
- const { getDefaultCliLocalRuntimeDb } = await import("./localRuntimeDb-PF7CFKDL.js");
7
+ const { getDefaultCliLocalRuntimeDb } = await import("./localRuntimeDb-P37ZTX55.js");
8
8
  return getDefaultCliLocalRuntimeDb();
9
9
  }
10
10
  function createNullCliDb() {
@@ -0,0 +1,49 @@
1
+ // packages/identity/sessionSource.ts
2
+ var IDENTITY_SESSION_READER = Symbol.for(
3
+ "nolo.identity.sessionReader"
4
+ );
5
+ var moduleFallbackReader = null;
6
+ function getBoundSessionSnapshot() {
7
+ return moduleFallbackReader?.() ?? null;
8
+ }
9
+ function getSessionSnapshotForState(state) {
10
+ const reader = state?.[IDENTITY_SESSION_READER];
11
+ if (typeof reader === "function") {
12
+ return reader();
13
+ }
14
+ return getBoundSessionSnapshot();
15
+ }
16
+
17
+ // packages/identity/selectors.local.ts
18
+ var LOCAL_USER_ID = (typeof process !== "undefined" ? process.env?.NOLO_LOCAL_USER_ID : void 0) || (typeof process !== "undefined" ? process.env?.NOLO_USER_ID : void 0) || "local";
19
+ var LOCAL_USER = {
20
+ userId: LOCAL_USER_ID,
21
+ username: "Local User"
22
+ };
23
+ var selectIdentityUserId = (state) => {
24
+ const snapshot = getSessionSnapshotForState(state);
25
+ if (snapshot) return snapshot.activeAccountId ?? void 0;
26
+ return LOCAL_USER_ID;
27
+ };
28
+ var selectIdentityToken = (state) => {
29
+ return getSessionSnapshotForState(state)?.activeToken ?? void 0;
30
+ };
31
+ var selectIdentityUser = (state) => {
32
+ const snapshot = getSessionSnapshotForState(state);
33
+ if (snapshot) {
34
+ const active = snapshot.accounts.find(
35
+ (account) => account.userId === snapshot.activeAccountId
36
+ );
37
+ return active ?? null;
38
+ }
39
+ return LOCAL_USER;
40
+ };
41
+ var selectIdentityUserBalance = (state) => void 0;
42
+
43
+ export {
44
+ getSessionSnapshotForState,
45
+ selectIdentityUserId,
46
+ selectIdentityToken,
47
+ selectIdentityUser,
48
+ selectIdentityUserBalance
49
+ };
@@ -1,10 +1,13 @@
1
1
  import {
2
2
  getRuntimeServerContext,
3
3
  scheduleDeleteReplication
4
- } from "./chunk-XOJRZUPF.js";
4
+ } from "./chunk-KWSQR2KK.js";
5
5
  import {
6
6
  fetchFromClientDb
7
7
  } from "./chunk-QOKAKDPE.js";
8
+ import {
9
+ selectIdentityToken
10
+ } from "./chunk-SEJ5OS6F.js";
8
11
  import {
9
12
  buildTombstoneRecord
10
13
  } from "./chunk-GBRG75BQ.js";
@@ -191,7 +194,7 @@ var removeAction = async (payload, thunkApi) => {
191
194
  preferredServerOrigin,
192
195
  currentServer,
193
196
  syncServers,
194
- hasToken: Boolean(state?.auth?.currentToken)
197
+ hasToken: Boolean(selectIdentityToken(state))
195
198
  });
196
199
  const localData = await fetchFromClientDb(clientDb, dbKey);
197
200
  const hadLocalData = Boolean(localData);
@@ -10,8 +10,6 @@ import {
10
10
  var CURRENT_OPERATOR_USER_ID = "0e95801d90";
11
11
  var NOLO_DEFAULT_AGENT_ID = "01NOLOAPPBLD000000019KCKT0";
12
12
  var NOLO_DEFAULT_AGENT_KEY = publicAgentKey(NOLO_DEFAULT_AGENT_ID);
13
- var NOLO_PROJECT_MANAGER_AGENT_ID = "01NOLOPROJMGR00000000MSVGG";
14
- var NOLO_PROJECT_MANAGER_AGENT_KEY = ownedAgentKey(CURRENT_OPERATOR_USER_ID, NOLO_PROJECT_MANAGER_AGENT_ID);
15
13
  var NOLO_FRONTEND_AGENT_ID = "01FRONTENDAG0000000115N4E1";
16
14
  var NOLO_FRONTEND_AGENT_KEY = ownedAgentKey(CURRENT_OPERATOR_USER_ID, NOLO_FRONTEND_AGENT_ID);
17
15
  var LOCAL_CODEX_AGENT_ID = "01LOCALCODEXCLI000000NEW";
@@ -27,8 +25,6 @@ var AGENT_ALIAS_TO_KEY = {
27
25
  "frontend agent": NOLO_FRONTEND_AGENT_KEY,
28
26
  "\u524D\u7AEFagent": NOLO_FRONTEND_AGENT_KEY,
29
27
  "\u524D\u7AEF agent": NOLO_FRONTEND_AGENT_KEY,
30
- "project-manager": NOLO_PROJECT_MANAGER_AGENT_KEY,
31
- pm: NOLO_PROJECT_MANAGER_AGENT_KEY,
32
28
  // Explicit local CLI agents. These are ordinary private agent records that
33
29
  // run through the current computer local runtime when unbound.
34
30
  "local-codex": LOCAL_CODEX_AGENT_KEY,
@@ -55,7 +51,6 @@ function isLocalCliAgentKey(agentKey) {
55
51
  export {
56
52
  NOLO_DEFAULT_AGENT_ID,
57
53
  NOLO_DEFAULT_AGENT_KEY,
58
- NOLO_PROJECT_MANAGER_AGENT_KEY,
59
54
  LOCAL_CODEX_AGENT_ID,
60
55
  LOCAL_CODEX_AGENT_KEY,
61
56
  resolveCliAgentKeyInput,