nolo-cli 0.74.0-alpha.1 → 0.74.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 (86) hide show
  1. package/{_executeModel-YEVZAJYX.js → _executeModel-IULR47HG.js} +20 -20
  2. package/{agentDeleteCommand-FSIMTL4K.js → agentDeleteCommand-2S4WCDQC.js} +16 -15
  3. package/{agentEmailCommands-HQT4EUOA.js → agentEmailCommands-V3ADGHX7.js} +30 -28
  4. package/{agentListCommands-2YWZYH52.js → agentListCommands-EPK3S274.js} +18 -17
  5. package/{agentMachineCommands-3TR7DVYO.js → agentMachineCommands-XMZWK7P3.js} +16 -15
  6. package/{agentRecordCommands-TRUY7Z6N.js → agentRecordCommands-WFPWLWOF.js} +29 -27
  7. package/{agentRunCommand-EHJOESHA.js → agentRunCommand-VUWNWC7C.js} +29 -27
  8. package/{agentRuntimeLocal-O6DZDTK4.js → agentRuntimeLocal-YRONTDLM.js} +15 -14
  9. package/{agentSlice-RRZS2UII.js → agentSlice-2P7OJFES.js} +1 -1
  10. package/{appDeleteCommands-HIJNWSK7.js → appDeleteCommands-YS7UGMP3.js} +17 -16
  11. package/{appDeployCommands-XULV2ZN6.js → appDeployCommands-XIE5Z4BE.js} +17 -16
  12. package/{appDeployStatusCommands-ETY4Z7K6.js → appDeployStatusCommands-54UDVYET.js} +17 -16
  13. package/{appGetCommands-M253LKDA.js → appGetCommands-6XYLBCRN.js} +17 -16
  14. package/{appListCommands-XYFXJMNP.js → appListCommands-VEGH7SF5.js} +17 -16
  15. package/{authCommand-EVGFLAHO.js → authCommand-JIEOFHXW.js} +84 -9
  16. package/{chatQueueReduxAdapter-LSBTGZW2.js → chatQueueReduxAdapter-GPYCH5Z2.js} +5 -5
  17. package/chromeCommands-VOIRNJBL.js +499 -0
  18. package/chromeOpsCommands-M7DPCX2T.js +258 -0
  19. package/{chunk-FARB62OB.js → chunk-3VPDELAP.js} +42 -31
  20. package/{chunk-CS36XM4N.js → chunk-4SZ37KLL.js} +21 -9
  21. package/{chunk-FPTQQSS6.js → chunk-73BR2IQT.js} +23 -2
  22. package/{chunk-PYXL2CJL.js → chunk-7FWPLK4M.js} +1 -1
  23. package/{chunk-DSRXPQWA.js → chunk-7QVPPOEC.js} +1 -1
  24. package/{chunk-KIS76A2P.js → chunk-AX7RMXSH.js} +1 -1
  25. package/{chunk-OXY5PKLG.js → chunk-BKJO7LDP.js} +2 -2
  26. package/{chunk-Q6FF2MCK.js → chunk-BOYUESO7.js} +1 -1
  27. package/{chunk-GBPZKFYK.js → chunk-BZNGCVAW.js} +1 -1
  28. package/{chunk-EXMHJN7C.js → chunk-CADAR6QU.js} +1 -1
  29. package/{chunk-2QDDKFG5.js → chunk-CQ3WA2NE.js} +77 -0
  30. package/{chunk-B62OSA77.js → chunk-D6XYLSOS.js} +1 -1
  31. package/{chunk-TI4CCL34.js → chunk-DM4FBSWG.js} +3 -3
  32. package/{chunk-JWO3RQSH.js → chunk-DUJWWUGV.js} +1 -1
  33. package/{chunk-XGZM6BTX.js → chunk-EBKMQULC.js} +66 -120
  34. package/{chunk-ZLPA7K55.js → chunk-ETLZZQJE.js} +2 -2
  35. package/chunk-FMODTASJ.js +109 -0
  36. package/{chunk-T7PQFKJU.js → chunk-FNGAF7C4.js} +2 -2
  37. package/{chunk-MYU3MJCF.js → chunk-GCJ3IS5M.js} +0 -1
  38. package/{chunk-XPQJXIF5.js → chunk-GHEJJGJI.js} +125 -25
  39. package/{chunk-DFY6PUV4.js → chunk-HTMVBPOF.js} +7 -7
  40. package/{chunk-VOEW2KF3.js → chunk-IDGYOD2O.js} +59 -55
  41. package/{chunk-YCDWJX45.js → chunk-KC5FAHVS.js} +1 -1
  42. package/{chunk-2JCTE5UN.js → chunk-KEZNSFGD.js} +3 -3
  43. package/{chunk-I4UWPYBH.js → chunk-KRMWO2NN.js} +2 -2
  44. package/{chunk-PGSKWZCB.js → chunk-LHDV2QUI.js} +1 -1
  45. package/{chunk-UJ63UXGE.js → chunk-MXUSPS2N.js} +289 -2
  46. package/{chunk-3IT2PFHL.js → chunk-NB5SIWC4.js} +1 -1
  47. package/{chunk-HXAINXPQ.js → chunk-NFT2AOK5.js} +2 -2
  48. package/{chunk-AUKZOZFG.js → chunk-NRALD3CC.js} +2 -2
  49. package/{chunk-CJ23A7U4.js → chunk-PF6O3GR3.js} +533 -57
  50. package/{chunk-K7AG465Q.js → chunk-PZCTYKGU.js} +3 -1
  51. package/chunk-QCZX4FTW.js +242 -0
  52. package/{chunk-QBA5KMJI.js → chunk-RZOJRTKR.js} +29 -15
  53. package/{chunk-OH5WRY7G.js → chunk-T25L377S.js} +18 -6
  54. package/{chunk-CMH2SYHX.js → chunk-TMPLPCVX.js} +1 -1
  55. package/{chunk-3U3EA3BO.js → chunk-U7YP7ECK.js} +3 -3
  56. package/{chunk-AWPU7GXU.js → chunk-URWDSZRW.js} +2 -2
  57. package/{chunk-Q4OT2DC7.js → chunk-WL2RKIBF.js} +1 -1
  58. package/{chunk-IDZTNRP2.js → chunk-X7HHHIOZ.js} +10 -2
  59. package/{chunk-57VRXRLF.js → chunk-Y3NZYLPG.js} +1 -1
  60. package/{chunk-V3ZKNK5D.js → chunk-ZVN6I33J.js} +5 -5
  61. package/{codingSkills-E6KSDNSJ.js → codingSkills-7S6523WH.js} +2 -2
  62. package/{contentThunks-476Y6CFR.js → contentThunks-THSCADSK.js} +6 -6
  63. package/{createAgentAutomationAction-DN4SFTP5.js → createAgentAutomationAction-WGN3UQ5A.js} +6 -6
  64. package/{createDialogAction-2GS4JCMU.js → createDialogAction-3EN2NLH7.js} +8 -8
  65. package/{createPageAction-44WTUMZ5.js → createPageAction-4VK473QV.js} +6 -6
  66. package/{dialogCommands-PE5FEFJ5.js → dialogCommands-PS4NWYY7.js} +17 -16
  67. package/{dialogSlice-7HEVCJFT.js → dialogSlice-CLV7SVOZ.js} +5 -5
  68. package/{docCreateCommands-IPDFZVPG.js → docCreateCommands-4KANZJR6.js} +16 -15
  69. package/{docDeleteCommands-VQ4Y66CM.js → docDeleteCommands-F2S2TRUF.js} +17 -16
  70. package/{docReadCommands-PD33VV27.js → docReadCommands-B2WDPZQE.js} +16 -15
  71. package/{docStore-LJ7KNKFB.js → docStore-TDLCHWPF.js} +1 -1
  72. package/{docUpdateCommands-CGUQ2JY3.js → docUpdateCommands-E7TKHRIO.js} +16 -15
  73. package/{getPricing-HRMSOF3E.js → getPricing-QVTUQQTM.js} +2 -2
  74. package/{handleSendMessageAction-ETA5QZIN.js → handleSendMessageAction-AHL3ZHE4.js} +5 -5
  75. package/index.js +118 -54
  76. package/{machineCommands-INAP62WH.js → machineCommands-OTABVXOA.js} +28 -26
  77. package/{machineWsRunDispatch-MT7VRNKX.js → machineWsRunDispatch-V4EVQSMZ.js} +28 -26
  78. package/package.json +1 -1
  79. package/{readlineWorkspace-5TV6ES57.js → readlineWorkspace-IIT3FQ6I.js} +439 -117
  80. package/{runAgentClientLoop-2PGZSCET.js → runAgentClientLoop-7TQM7IAR.js} +18 -18
  81. package/{spaceCommands-Y47DDAQD.js → spaceCommands-FSYH7AL4.js} +16 -15
  82. package/{streamAgentChatTurn-I6FUM6RV.js → streamAgentChatTurn-6EF6TVFK.js} +22 -22
  83. package/{tools-KU4X5HGZ.js → tools-R3QNWWTD.js} +15 -13
  84. package/{tuiSummaryLlmCaller-J5BEPLW5.js → tuiSummaryLlmCaller-PWOXTCBF.js} +5 -5
  85. package/{updateCommands-AJYSD73Y.js → updateCommands-Y363MC3L.js} +2 -2
  86. package/{updateDialogTitleAction-E3SNB75W.js → updateDialogTitleAction-F3EUOWOB.js} +6 -6
@@ -4,7 +4,12 @@ import {
4
4
  refreshAntigravityOAuthToken,
5
5
  refreshOpenAiCodexToken,
6
6
  xaiRefresh
7
- } from "./chunk-GBPZKFYK.js";
7
+ } from "./chunk-BZNGCVAW.js";
8
+ import {
9
+ createChromeConnectorClient,
10
+ createVerifiedChromeConnectorClient,
11
+ executeChromeConnectorTool
12
+ } from "./chunk-QCZX4FTW.js";
8
13
  import {
9
14
  defaultLoopbackRequest
10
15
  } from "./chunk-EADNWBAZ.js";
@@ -35,7 +40,7 @@ import {
35
40
  } from "./chunk-DWUCB2A3.js";
36
41
  import {
37
42
  buildLocalAgentLookupKeys
38
- } from "./chunk-Q6FF2MCK.js";
43
+ } from "./chunk-BOYUESO7.js";
39
44
  import {
40
45
  LOCAL_CODEX_AGENT_ID,
41
46
  LOCAL_CODEX_AGENT_KEY,
@@ -55,11 +60,12 @@ import {
55
60
  import {
56
61
  inlineImageUrlsForCustomProvider,
57
62
  prepareTools
58
- } from "./chunk-I4UWPYBH.js";
63
+ } from "./chunk-KRMWO2NN.js";
59
64
  import {
60
65
  getServerProviderSecret
61
66
  } from "./chunk-HS7MLR74.js";
62
67
  import {
68
+ CHROME_CONNECTOR_TOOL_NAMES,
63
69
  CONTROL_AGENT_RUN_ACTIONS,
64
70
  buildControlAgentRunFunctionSchema,
65
71
  buildStartAgentRunFunctionSchema,
@@ -72,7 +78,7 @@ import {
72
78
  rememberMemoryFunctionSchema,
73
79
  resolveAgentRequiredPackIds,
74
80
  setTodoListFunc
75
- } from "./chunk-QBA5KMJI.js";
81
+ } from "./chunk-RZOJRTKR.js";
76
82
  import {
77
83
  fetchWithTransientRetry,
78
84
  isTransientFetchError
@@ -95,13 +101,13 @@ import {
95
101
  prepareTokenUsageData,
96
102
  resolveBuiltinPlatformAgentConfig,
97
103
  runKeyed
98
- } from "./chunk-VOEW2KF3.js";
104
+ } from "./chunk-IDGYOD2O.js";
99
105
  import {
100
106
  BUILTIN_TITLE_LLM_CONFIG
101
107
  } from "./chunk-EVBFYPDC.js";
102
108
  import {
103
109
  fetchServerSyncedCredential
104
- } from "./chunk-TI4CCL34.js";
110
+ } from "./chunk-DM4FBSWG.js";
105
111
  import {
106
112
  require_date_fns
107
113
  } from "./chunk-M76ECQRD.js";
@@ -117,7 +123,7 @@ import {
117
123
  applySystemBuiltinSkillFilter,
118
124
  expandEnabledPacks,
119
125
  resolveEffectiveEnabledPacks
120
- } from "./chunk-MYU3MJCF.js";
126
+ } from "./chunk-GCJ3IS5M.js";
121
127
  import {
122
128
  DEFAULT_HYBRID_READ_TIMEOUT_MS,
123
129
  Duration_exports,
@@ -133,6 +139,7 @@ import {
133
139
  buildLocalWorkspaceToolset,
134
140
  buildNoloWorkspaceCliToolExecutors,
135
141
  codexStreamFailureStatus,
142
+ createDevinProvider,
136
143
  createHybridRecordStore,
137
144
  createLocalWorkspaceToolExecutors,
138
145
  evaluateFileWritePolicy,
@@ -153,7 +160,7 @@ import {
153
160
  resolveOpenAiCompatibleProviderConfig,
154
161
  shouldUseGeminiNativeToolRoute,
155
162
  summarizeToolArguments
156
- } from "./chunk-CJ23A7U4.js";
163
+ } from "./chunk-PF6O3GR3.js";
157
164
  import {
158
165
  PlatformStreamInterruptedError,
159
166
  buildPlatformChatCompletionRequest,
@@ -165,40 +172,43 @@ import {
165
172
  readSseDataValues,
166
173
  resolvePlatformChatProviderConfig,
167
174
  shouldUsePlatformChatProvider
168
- } from "./chunk-HXAINXPQ.js";
175
+ } from "./chunk-NFT2AOK5.js";
176
+ import {
177
+ isDevinOAuthAgent
178
+ } from "./chunk-FMODTASJ.js";
169
179
  import {
170
180
  resolveAgentRuntimeConfigFromRecord,
171
181
  resolveHistoricalToolContentCap
172
- } from "./chunk-KIS76A2P.js";
182
+ } from "./chunk-AX7RMXSH.js";
173
183
  import {
174
184
  collectStablePromptPrefix,
175
185
  convertMessagesToResponsesInput,
176
186
  stablePromptCacheKey,
177
187
  toResponsesTools
178
188
  } from "./chunk-PUOC4YRO.js";
179
- import {
180
- isAntigravityOAuthAgent
181
- } from "./chunk-PGSKWZCB.js";
182
- import {
183
- resolvePlatformAuthToken
184
- } from "./chunk-CMH2SYHX.js";
185
189
  import {
186
190
  buildNoloWorkspaceOpenAiTools,
187
191
  parseNoloWorkspaceToolArguments,
188
192
  resolveRuntimeToolSurfaceForAgent
189
- } from "./chunk-V3ZKNK5D.js";
193
+ } from "./chunk-ZVN6I33J.js";
190
194
  import {
191
195
  mergeAvailabilityDeadline,
192
196
  resolveAvailabilityAction,
193
197
  resolveCooldownGate
194
198
  } from "./chunk-CJCJF5XB.js";
199
+ import {
200
+ isAntigravityOAuthAgent
201
+ } from "./chunk-LHDV2QUI.js";
202
+ import {
203
+ resolvePlatformAuthToken
204
+ } from "./chunk-TMPLPCVX.js";
195
205
  import {
196
206
  buildDialogFallbackTitleFromUserInput,
197
207
  normalizeDialogTitle
198
208
  } from "./chunk-2MBTWINN.js";
199
209
  import {
200
210
  normalizeUsage
201
- } from "./chunk-DSRXPQWA.js";
211
+ } from "./chunk-7QVPPOEC.js";
202
212
  import {
203
213
  clipCompactText,
204
214
  createProviderCallTimingTracker,
@@ -211,7 +221,7 @@ import {
211
221
  } from "./chunk-PSCNXBYA.js";
212
222
  import {
213
223
  isAdaptiveThinkingModelId
214
- } from "./chunk-UJ63UXGE.js";
224
+ } from "./chunk-MXUSPS2N.js";
215
225
  import {
216
226
  compactWhitespace
217
227
  } from "./chunk-DWLEOOGR.js";
@@ -383,17 +393,17 @@ function newlineHint(platform = process.platform) {
383
393
  var WELCOME_TIPS = {
384
394
  en: [
385
395
  `Tip: ${newlineHint()} for a newline; /help lists all commands.`,
386
- "Tip: paste a screenshot or drag an image into the terminal \u2014 nolo can see it.",
396
+ "Tip: drag an image file into the terminal \u2014 nolo sees it. A plain path works too.",
387
397
  "Tip: /doc attach <doc> brings a doc into this conversation's context.",
388
398
  "Tip: /theme switches colors; terminal mode follows your terminal's day/night.",
389
399
  "Tip: /history resumes a recent dialog; /agents lists your agents."
390
400
  ],
391
401
  zh: [
392
402
  `\u63D0\u793A\uFF1A${newlineHint()} \u6362\u884C\uFF1B/help \u5217\u51FA\u5168\u90E8\u547D\u4EE4\u3002`,
393
- "\u63D0\u793A\uFF1A\u76F4\u63A5\u7C98\u8D34\u622A\u56FE\u6216\u628A\u56FE\u7247\u62D6\u8FDB\u7EC8\u7AEF\uFF0Cnolo \u770B\u5F97\u61C2\u3002",
394
- "\u63D0\u793A\uFF1A/doc attach <doc> \u628A\u6587\u6863\u6302\u8FDB\u5F53\u524D\u5BF9\u8BDD\u7684\u4E0A\u4E0B\u6587\u3002",
395
- "\u63D0\u793A\uFF1A/theme \u5207\u6362\u914D\u8272\uFF1Bterminal \u6A21\u5F0F\u8DDF\u968F\u7EC8\u7AEF\u7684\u65E5\u591C\u4E3B\u9898\u3002",
396
- "\u63D0\u793A\uFF1A/history \u56DE\u5230\u6700\u8FD1\u5BF9\u8BDD\uFF1B/agents \u67E5\u770B\u53EF\u7528 Agent\u3002"
403
+ "\u63D0\u793A\uFF1A\u628A\u56FE\u7247\u6587\u4EF6\u62D6\u8FDB\u7EC8\u7AEF\u6700\u7701\u4E8B\uFF1B\u4E5F\u80FD\u76F4\u63A5\u8F93\u5165\u56FE\u7247\u8DEF\u5F84\u3002",
404
+ "\u63D0\u793A\uFF1A/doc attach <doc> \u628A\u6587\u6863\u6302\u8FDB\u5F53\u524D\u5BF9\u8BDD\u4E0A\u4E0B\u6587\u3002",
405
+ "\u63D0\u793A\uFF1A/theme \u5207\u6362\u914D\u8272\uFF1B\u65E5\u591C\u95F4\u8DDF\u968F\u7EC8\u7AEF\u4E3B\u9898\u3002",
406
+ "\u63D0\u793A\uFF1A/history \u6062\u590D\u6700\u8FD1\u5BF9\u8BDD\uFF1B/agents \u5217\u51FA\u4F60\u7684\u667A\u80FD\u4F53\u3002"
397
407
  ]
398
408
  };
399
409
  function dailyWelcomeTip(now = Date.now()) {
@@ -910,6 +920,23 @@ var STRINGS = {
910
920
  en: "Agents:",
911
921
  zh: "\u667A\u80FD\u4F53\uFF1A"
912
922
  },
923
+ // --- Paste / clipboard ------------------------------------------------
924
+ pasteUsage: {
925
+ en: "Usage: /paste (no arguments). Reads your clipboard now: an image becomes an attachment, text lands in the draft. Tip: dragging an image file onto the terminal is the most reliable way to attach a picture.",
926
+ zh: "\u7528\u6CD5\uFF1A/paste\uFF08\u65E0\u53C2\u6570\uFF09\u3002\u7ACB\u5373\u8BFB\u53D6\u526A\u8D34\u677F\uFF1A\u56FE\u7247\u53D8\u9644\u4EF6\uFF0C\u6587\u672C\u8FDB\u8349\u7A3F\u3002\u63D0\u793A\uFF1A\u628A\u56FE\u7247\u6587\u4EF6\u62D6\u8FDB\u7EC8\u7AEF\u662F\u9644\u4E0A\u56FE\u7247\u6700\u53EF\u9760\u7684\u65B9\u5F0F\u3002"
927
+ },
928
+ pasteTextInserted: {
929
+ en: "Pasted {0} characters from the clipboard into the draft.",
930
+ zh: "\u5DF2\u4ECE\u526A\u8D34\u677F\u7C98\u8D34 {0} \u4E2A\u5B57\u7B26\u5230\u8349\u7A3F\u3002"
931
+ },
932
+ pasteStaleDropped: {
933
+ en: "[nolo] Discarded a clipboard read that finished after the draft changed.",
934
+ zh: "[nolo] \u526A\u8D34\u677F\u8BFB\u53D6\u5B8C\u6210\u65F6\u8349\u7A3F\u5DF2\u53D8\u5316\uFF0C\u7ED3\u679C\u5DF2\u4E22\u5F03\u3002"
935
+ },
936
+ pasteFilePathHint: {
937
+ en: "file reference (path only, content not read): {0}",
938
+ zh: "\u6587\u4EF6\u5F15\u7528\uFF08\u4EC5\u8DEF\u5F84\uFF0C\u672A\u8BFB\u53D6\u5185\u5BB9\uFF09\uFF1A{0}"
939
+ },
913
940
  agentsTip: {
914
941
  en: "Tip: run /switch for the full picker, or /switch list for your private agents too.",
915
942
  zh: "\u63D0\u793A\uFF1A\u7528 /switch \u6253\u5F00\u5B8C\u6574\u9009\u62E9\u5668\uFF0C\u6216 /switch list \u8FDE\u4F60\u7684\u79C1\u6709\u667A\u80FD\u4F53\u4E00\u8D77\u5217\u51FA\u3002"
@@ -931,6 +958,9 @@ var STRINGS = {
931
958
  " /resume <dialogId> Resume a dialog directly by id",
932
959
  " /lang <zh|en> Switch interface language",
933
960
  ' /copy [all] Copy the last reply (or the full conversation with "all") to the clipboard',
961
+ " /paste Read the clipboard now (image \u2192 attachment, text \u2192 draft)",
962
+ " Drag a file in Drop an image file on the terminal to attach it; other files stay paths",
963
+ " Shift+Enter / Ctrl+J Insert a newline in the draft",
934
964
  " /mouse <on|off> Toggle mouse mode (off = drag to select text)",
935
965
  " /auto <on|off> Toggle permission auto-approve (skip destructive-shell, external-file & file-write confirms)",
936
966
  " /math <on|off> Toggle math formula rendering (Unicode transcription)",
@@ -969,6 +999,9 @@ var STRINGS = {
969
999
  " /resume <dialogId> \u6309 id \u76F4\u63A5\u6062\u590D\u5BF9\u8BDD",
970
1000
  " /lang <zh|en> \u5207\u6362\u754C\u9762\u8BED\u8A00",
971
1001
  " /copy [all] \u590D\u5236\u6700\u540E\u4E00\u6761\u56DE\u590D\u5230\u526A\u8D34\u677F\uFF08\u52A0 all \u590D\u5236\u5B8C\u6574\u5BF9\u8BDD\uFF09",
1002
+ " /paste \u7ACB\u5373\u8BFB\u526A\u8D34\u677F\uFF08\u56FE\u7247\u2192\u9644\u4EF6\uFF0C\u6587\u672C\u2192\u8349\u7A3F\uFF09",
1003
+ " \u62D6\u5165\u6587\u4EF6 \u628A\u56FE\u7247\u6587\u4EF6\u62D6\u8FDB\u7EC8\u7AEF\u5373\u6210\u4E3A\u9644\u4EF6\uFF1B\u5176\u4ED6\u6587\u4EF6\u53EA\u7559\u8DEF\u5F84",
1004
+ " Shift+Enter / Ctrl+J \u5728\u8349\u7A3F\u91CC\u6362\u884C",
972
1005
  " /mouse <on|off> \u5207\u6362\u9F20\u6807\u6A21\u5F0F\uFF08off \u540E\u53EF\u76F4\u63A5\u62D6\u9009\u6587\u672C\uFF09",
973
1006
  " /auto <on|off> \u5207\u6362\u6743\u9650\u81EA\u52A8\u5316\uFF08\u81EA\u52A8\u653E\u884C\u7834\u574F\u6027 shell\u3001\u5916\u90E8\u6587\u4EF6\u4E0E\u5199\u6587\u4EF6\u786E\u8BA4\uFF09",
974
1007
  " /math <on|off> \u5207\u6362\u6570\u5B66\u516C\u5F0F\u6E32\u67D3\uFF08Unicode \u8F6C\u5199\uFF09",
@@ -1672,6 +1705,17 @@ var LOCAL_SERVER_MEMORY_TOOL_NAME_SET = new Set(
1672
1705
  );
1673
1706
 
1674
1707
  // packages/cli/client/localRuntimeTools.ts
1708
+ var CLI_CHROME_CONNECTOR_TOOL_NAME_SET = new Set(
1709
+ CHROME_CONNECTOR_TOOL_NAMES
1710
+ );
1711
+ function filterCliChromeConnectorToolNames(toolNames) {
1712
+ return (toolNames ?? []).filter(
1713
+ (name) => CLI_CHROME_CONNECTOR_TOOL_NAME_SET.has(name)
1714
+ );
1715
+ }
1716
+ function buildCliChromeConnectorOpenAiTools(args) {
1717
+ return prepareTools(filterCliChromeConnectorToolNames(args.toolNames));
1718
+ }
1675
1719
  function buildOpenAiTools(args) {
1676
1720
  const toolset = buildLocalWorkspaceToolsetForEnv(args);
1677
1721
  const workspaceToolNames = toolset.toolNames;
@@ -1719,6 +1763,7 @@ function buildOpenAiTools(args) {
1719
1763
  toolNames: args.effectiveToolNames ?? workspaceToolNames,
1720
1764
  exposeShellTools: toolset.exposeShellTools
1721
1765
  }),
1766
+ ...buildCliChromeConnectorOpenAiTools({ toolNames: args.toolNames }),
1722
1767
  ...buildServerPlatformOpenAiTools({ toolNames: args.toolNames }),
1723
1768
  ...buildNoloWorkspaceOpenAiTools({ toolNames: args.toolNames }),
1724
1769
  ...buildOrchestrationOpenAiTools({
@@ -9270,6 +9315,39 @@ var resolveCursorTransport = async (ctx) => {
9270
9315
  return null;
9271
9316
  };
9272
9317
 
9318
+ // packages/cli/client/providerResolution/devinTransport.ts
9319
+ var resolveDevinTransport = async (ctx) => {
9320
+ const { agentConfig, apiKeyRefResolver } = ctx;
9321
+ if (isDevinOAuthAgent(agentConfig)) {
9322
+ const accessToken = await apiKeyRefResolver("devin");
9323
+ if (!accessToken) {
9324
+ throw new Error(
9325
+ 'OAuth credential for "devin" not found locally. Run `nolo auth devin`.'
9326
+ );
9327
+ }
9328
+ const model = agentConfig.model || "swe-2-max";
9329
+ logLocalRuntimeDiagnostic("provider.selected", {
9330
+ agentKey: agentConfig.key,
9331
+ transport: "devin-connect",
9332
+ provider: "devin",
9333
+ model,
9334
+ hasApiKey: true
9335
+ });
9336
+ const devinProvider = createDevinProvider({
9337
+ token: accessToken,
9338
+ model,
9339
+ fetchImpl: ctx.fetchImpl
9340
+ });
9341
+ return {
9342
+ model,
9343
+ complete: async (messages, options) => {
9344
+ return devinProvider.complete(messages, options);
9345
+ }
9346
+ };
9347
+ }
9348
+ return null;
9349
+ };
9350
+
9273
9351
  // packages/cli/client/providerResolution/directOpenAiCompatibleTransport.ts
9274
9352
  var resolveDirectOpenAiCompatibleTransport = async (ctx) => {
9275
9353
  const { agentConfig, deps, fetchImpl, loopbackRequest, additionalToolNames, buildProviderOpenAiTools, recordLocalAvailability, apiKeyRefResolver, credentialBroker, syncFetcher, serverUrl, authToken } = ctx;
@@ -9663,6 +9741,7 @@ var TRANSPORTS = [
9663
9741
  resolveAnthropicOAuthTransport,
9664
9742
  resolveCodexOAuthTransport,
9665
9743
  resolveCursorTransport,
9744
+ resolveDevinTransport,
9666
9745
  resolveGeminiNativeToolTransport,
9667
9746
  resolvePlatformProxyTransport,
9668
9747
  // 兜底必须留在最后。
@@ -11317,6 +11396,19 @@ function createCliControlAgentRunExecutor(deps = {}) {
11317
11396
  };
11318
11397
  }
11319
11398
 
11399
+ // packages/cli/client/cliChromeConnectorToolExecutors.ts
11400
+ function buildCliChromeConnectorToolExecutors(args) {
11401
+ const client = createVerifiedChromeConnectorClient({
11402
+ client: args?.client ?? createChromeConnectorClient()
11403
+ });
11404
+ return Object.fromEntries(
11405
+ CHROME_CONNECTOR_TOOL_NAMES.map((toolName) => [
11406
+ toolName,
11407
+ (call) => executeChromeConnectorTool({ client, call })
11408
+ ])
11409
+ );
11410
+ }
11411
+
11320
11412
  // packages/cli/client/cliLocalToolExecutors.ts
11321
11413
  var MAX_PASTED_TEXT_LINES_PER_READ = 200;
11322
11414
  var PASTED_TEXT_EXPLICIT_OVERSHOOT_LINES = 20;
@@ -11603,6 +11695,12 @@ function buildLocalToolExecutors(args) {
11603
11695
  };
11604
11696
  },
11605
11697
  ...args.pastedTextStore ? { readPastedText: createReadPastedTextExecutor(args.pastedTextStore) } : {},
11698
+ // Nolo Browser Connector: the CLI drives the user's real Chrome through the same verified
11699
+ // client + executor as the desktop runtime (before this, every chrome_* call answered
11700
+ // "only executable in the Nolo desktop local runtime").
11701
+ ...buildCliChromeConnectorToolExecutors(
11702
+ args.chromeConnectorClient ? { client: args.chromeConnectorClient } : {}
11703
+ ),
11606
11704
  ...args.localToolExecutors ?? {}
11607
11705
  };
11608
11706
  }
@@ -11619,7 +11717,7 @@ var REFRESH_BY_PROVIDER = {
11619
11717
  cursor: cursorRefresh
11620
11718
  };
11621
11719
  function isOAuthProvider(value) {
11622
- return value === "chatgpt" || value === "xai" || value === "antigravity" || value === "claude" || value === "cursor";
11720
+ return value === "chatgpt" || value === "xai" || value === "antigravity" || value === "claude" || value === "cursor" || value === "devin";
11623
11721
  }
11624
11722
  function createOAuthApiKeyRefResolver(options = {}) {
11625
11723
  return async (ref, opts) => {
@@ -12435,6 +12533,7 @@ function createCliLocalRuntimeAdapter(deps) {
12435
12533
  workspaceRoot,
12436
12534
  env: deps.env,
12437
12535
  fetchImpl,
12536
+ ...deps.chromeConnectorClient ? { chromeConnectorClient: deps.chromeConnectorClient } : {},
12438
12537
  localToolExecutors: deps.localToolExecutors,
12439
12538
  readXPost: deps.readXPost,
12440
12539
  readXhsProfile: deps.readXhsProfile,
@@ -12511,6 +12610,7 @@ function createCliLocalRuntimeAdapter(deps) {
12511
12610
  workspaceRoot,
12512
12611
  env: deps.env,
12513
12612
  fetchImpl,
12613
+ ...deps.chromeConnectorClient ? { chromeConnectorClient: deps.chromeConnectorClient } : {},
12514
12614
  localToolExecutors: deps.localToolExecutors,
12515
12615
  readXPost: deps.readXPost,
12516
12616
  readXhsProfile: deps.readXhsProfile,
@@ -5,14 +5,14 @@ import {
5
5
  inlineImageUrlsForCustomProvider,
6
6
  prepareTools,
7
7
  shouldInlineImageUrlsForAgent
8
- } from "./chunk-I4UWPYBH.js";
8
+ } from "./chunk-KRMWO2NN.js";
9
9
  import {
10
10
  INVALID_TOOL_ARGS_REPLACEMENT,
11
11
  buildInvalidToolCallSelfHealResult,
12
12
  parseToolCallArguments,
13
13
  performFetchRequest,
14
14
  sanitizeOutboundMessages
15
- } from "./chunk-CS36XM4N.js";
15
+ } from "./chunk-4SZ37KLL.js";
16
16
  import {
17
17
  createSSEParser,
18
18
  createToolRunId,
@@ -23,7 +23,7 @@ import {
23
23
  toolRunSetPending,
24
24
  toolRunStarted,
25
25
  toolRunSucceeded
26
- } from "./chunk-QBA5KMJI.js";
26
+ } from "./chunk-RZOJRTKR.js";
27
27
  import {
28
28
  getPublicImageAgentMode
29
29
  } from "./chunk-VIDPVFP3.js";
@@ -35,10 +35,10 @@ import {
35
35
  messageStreamEnd,
36
36
  messageStreaming,
37
37
  updateToolMessage
38
- } from "./chunk-VOEW2KF3.js";
38
+ } from "./chunk-IDGYOD2O.js";
39
39
  import {
40
40
  streamAgentChatTurn
41
- } from "./chunk-TI4CCL34.js";
41
+ } from "./chunk-DM4FBSWG.js";
42
42
  import {
43
43
  addActiveController,
44
44
  removeActiveController,
@@ -56,10 +56,10 @@ import {
56
56
  import {
57
57
  EMPTY_ASSISTANT_REPAIR_PROMPT,
58
58
  getModelInfo
59
- } from "./chunk-DSRXPQWA.js";
59
+ } from "./chunk-7QVPPOEC.js";
60
60
  import {
61
61
  getApiEndpoint
62
- } from "./chunk-UJ63UXGE.js";
62
+ } from "./chunk-MXUSPS2N.js";
63
63
  import {
64
64
  toErrorMessage
65
65
  } from "./chunk-HNMXYYJR.js";