nolo-cli 0.171.0-alpha.1 → 0.171.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 (102) hide show
  1. package/{_executeModel-YJW2HPFY.js → _executeModel-7J6IIHWQ.js} +29 -29
  2. package/{agentDeleteCommand-O3EG3HS4.js → agentDeleteCommand-F66NIWCF.js} +37 -37
  3. package/{agentEmailCommands-AIWZNMRW.js → agentEmailCommands-M4SHODDA.js} +41 -41
  4. package/{agentListCommands-377PQ6K4.js → agentListCommands-4BBFWXHX.js} +25 -25
  5. package/{agentMachineCommands-TYL7KKSL.js → agentMachineCommands-R55P5SZY.js} +21 -21
  6. package/{agentProviderCommands-TWVILNAN.js → agentProviderCommands-4USYTCL3.js} +2 -2
  7. package/{agentRecordCommands-YPRND72K.js → agentRecordCommands-PDWACZFR.js} +37 -37
  8. package/{agentRunCommand-T7AQKKH5.js → agentRunCommand-U2F74LTS.js} +38 -38
  9. package/{agentRunControl-SBHIICUQ.js → agentRunControl-EI3BGJFM.js} +5 -5
  10. package/{agentRuntimeLocal-7ZE2ZQAL.js → agentRuntimeLocal-7EZYBR6X.js} +19 -19
  11. package/{agentSlice-BHH2DZKN.js → agentSlice-UN7ZHCAM.js} +3 -3
  12. package/{appDeleteCommands-LHOX4HM3.js → appDeleteCommands-WS3UFMCB.js} +22 -22
  13. package/{appDeployCommands-A6CQQTI3.js → appDeployCommands-W5B7I73P.js} +22 -22
  14. package/{appDeployStatusCommands-7TTNQODL.js → appDeployStatusCommands-UEHNV2GU.js} +22 -22
  15. package/{appGetCommands-22F4E37N.js → appGetCommands-XJOBVREN.js} +22 -22
  16. package/{appListCommands-WCDOJUVV.js → appListCommands-BISQV6BQ.js} +22 -22
  17. package/{authCommand-BSOLJFPV.js → authCommand-H35CPF25.js} +12 -12
  18. package/{builtinSkillRegistry-V76JTNCJ.js → builtinSkillRegistry-LJV7FHNI.js} +2 -2
  19. package/{chunk-22FIHMYU.js → chunk-2AZSL4GL.js} +3 -3
  20. package/{chunk-6OYC7NDH.js → chunk-2DXGW4UO.js} +37 -160
  21. package/{chunk-UPC23AAN.js → chunk-3ELX6JK5.js} +10 -10
  22. package/{chunk-7CDMXZJA.js → chunk-3USFOET4.js} +3 -3
  23. package/{chunk-EPMWJ7X7.js → chunk-45IOFLGH.js} +11 -11
  24. package/{chunk-UIVOLTFM.js → chunk-46OQD3AP.js} +4 -4
  25. package/{chunk-GC64WGMD.js → chunk-6EQD4AQL.js} +1 -1
  26. package/{chunk-TWJYVVUB.js → chunk-6MXCQLLB.js} +74 -321
  27. package/{chunk-72T5DXRH.js → chunk-7NKZA46B.js} +4 -4
  28. package/{chunk-K2NTGYVK.js → chunk-7VWWGKEQ.js} +3 -3
  29. package/{chunk-XHR22EKE.js → chunk-ASSNAASW.js} +5 -5
  30. package/{chunk-JHXY4H3P.js → chunk-BSKTDOGA.js} +56 -56
  31. package/{chunk-X2Q5GT5J.js → chunk-CEQFVBI2.js} +3 -3
  32. package/{chunk-AUGBRK3P.js → chunk-CEXJ6Y3C.js} +1 -2
  33. package/{chunk-MIME4XKU.js → chunk-CMRP4XHV.js} +12 -12
  34. package/{chunk-Q7UPF643.js → chunk-DHNQA4VI.js} +1 -1
  35. package/{chunk-7L2HZQNN.js → chunk-DI7ZFGDQ.js} +2 -2
  36. package/{chunk-OQ3DOBYB.js → chunk-EWO77ZGF.js} +3 -3
  37. package/{chunk-AGAB26VE.js → chunk-FQU23S3P.js} +11 -11
  38. package/{chunk-HLAL63BZ.js → chunk-FYYSDHVQ.js} +1 -1
  39. package/{chunk-AJ52EA72.js → chunk-G3VYRPTV.js} +4 -4
  40. package/{chunk-O3FUFEUI.js → chunk-HEC32F3G.js} +1 -1
  41. package/{chunk-WPOSH6PA.js → chunk-HZMWJUSD.js} +2 -2
  42. package/{chunk-KNDA4K34.js → chunk-I7S63QUU.js} +1 -1
  43. package/{chunk-CAAH5LNN.js → chunk-IMMA7QFE.js} +2 -2
  44. package/{chunk-EWLPIR2S.js → chunk-IOFLVIKF.js} +1 -1
  45. package/{chunk-APB44JID.js → chunk-JPPQ3GUO.js} +3 -3
  46. package/{chunk-OPNHKULV.js → chunk-KJETBEEN.js} +1 -1
  47. package/{chunk-XWX5ZGWR.js → chunk-KMDDG73K.js} +1 -1
  48. package/{chunk-SUBKVXFM.js → chunk-LEZLJTQ4.js} +1 -1
  49. package/{chunk-W6E5IXIP.js → chunk-MFVOJ6KF.js} +3 -3
  50. package/{chunk-CEYUVQYU.js → chunk-O2AY3CVI.js} +16 -16
  51. package/{chunk-I2QHI2XM.js → chunk-PIG2IUVZ.js} +2 -2
  52. package/{chunk-ZJ66I757.js → chunk-QW6SSF7V.js} +15 -15
  53. package/{chunk-6OC2YMGH.js → chunk-SAZSXMTR.js} +4 -4
  54. package/{chunk-3LNVSFTH.js → chunk-SH3XD4E2.js} +1 -2
  55. package/{chunk-TSCI6X6C.js → chunk-SQX235S2.js} +1 -1
  56. package/{chunk-RATR6VCP.js → chunk-TOUKACDK.js} +1 -1
  57. package/{chunk-BQSW7453.js → chunk-URO44BCD.js} +1 -1
  58. package/{chunk-CI5DVWU7.js → chunk-URW5UM6Y.js} +1 -1
  59. package/{chunk-TVGX5QIN.js → chunk-V7PCFWX3.js} +2 -2
  60. package/{chunk-BJWOOJX5.js → chunk-WC7UXON2.js} +36 -89
  61. package/{chunk-P4V35AFD.js → chunk-WLPUUBFR.js} +3 -3
  62. package/{chunk-DWQD3JTX.js → chunk-WVREKHHJ.js} +3 -3
  63. package/{chunk-SC5TDLTP.js → chunk-XITIONPS.js} +6 -6
  64. package/{chunk-7MBN2JZ5.js → chunk-XLBQQ5SB.js} +4 -4
  65. package/{chunk-TYQZRSL6.js → chunk-XLQFVHNX.js} +1 -1
  66. package/{chunk-WXOKJP3W.js → chunk-YCRROBDY.js} +1 -2
  67. package/{chunk-C2OYZYJ7.js → chunk-Z6HR75HX.js} +3 -3
  68. package/{chunk-TDNAAXUQ.js → chunk-ZPKUJROL.js} +2 -2
  69. package/{commandRegistry-EAPXP4BC.js → commandRegistry-HI2DPDAH.js} +61 -61
  70. package/{contentThunks-SJAKJV4V.js → contentThunks-OO3MJAED.js} +11 -11
  71. package/{createAgentAutomationAction-IBSAZBSP.js → createAgentAutomationAction-F3O6FJ5W.js} +11 -11
  72. package/{createDialogAction-MQDTLASD.js → createDialogAction-UBQKDUK5.js} +13 -13
  73. package/{createPageAction-EOPBBQMH.js → createPageAction-RDEDO4GF.js} +11 -11
  74. package/{dialogCommands-SV4M5HAV.js → dialogCommands-P5HSDZ7T.js} +23 -23
  75. package/{dialogSlice-6CC3YDDL.js → dialogSlice-WZCWWYR3.js} +10 -10
  76. package/{docCreateCommands-UC2CPMH7.js → docCreateCommands-B2M3MGX7.js} +21 -21
  77. package/{docDeleteCommands-SRPTGMZ2.js → docDeleteCommands-NHCUX4XL.js} +22 -22
  78. package/{docReadCommands-U3TDUPOY.js → docReadCommands-FOLST4JD.js} +21 -21
  79. package/{docStore-RSBDE3UH.js → docStore-PTSCGC6T.js} +1 -1
  80. package/{docUpdateCommands-G5J5UKGP.js → docUpdateCommands-YZT2PQP2.js} +21 -21
  81. package/{getPricing-2UPNNW3Y.js → getPricing-XQ3N3RBP.js} +3 -3
  82. package/{handleSendMessageAction-EM43KNSP.js → handleSendMessageAction-3YMQS6XO.js} +23 -23
  83. package/index.js +47 -22
  84. package/{localRuntimeAdapter-N5WDXYSY.js → localRuntimeAdapter-ZIAOTUBE.js} +35 -35
  85. package/{machineCommands-L34XTTLG.js → machineCommands-3LSEP24P.js} +36 -36
  86. package/{machineWsRunDispatch-IKI7FGKI.js → machineWsRunDispatch-7A3TSH4Q.js} +36 -36
  87. package/{models-UUNO6DOL.js → models-PZQC7VV4.js} +2 -2
  88. package/package.json +1 -1
  89. package/{providerPresetApply-5K4PBX4J.js → providerPresetApply-PKUOHQJT.js} +6 -6
  90. package/{providerRegistry-K5MSZ3Y5.js → providerRegistry-HNQLIFN2.js} +6 -6
  91. package/{readlineWorkspace-ZANIHEDR.js → readlineWorkspace-67ZVVHVC.js} +43 -43
  92. package/{runAgentClientLoop-HPF2WFFQ.js → runAgentClientLoop-F6EQK26A.js} +27 -27
  93. package/{runtimeDoctorCommands-DXJH5HIB.js → runtimeDoctorCommands-LYMJEM4F.js} +6 -6
  94. package/{secretCommands-7S6REMJV.js → secretCommands-DNY56NSU.js} +2 -2
  95. package/{spaceCommands-6KPBWGGE.js → spaceCommands-XESXH5CW.js} +21 -21
  96. package/{streamAgentChatTurn-3SNWCCK2.js → streamAgentChatTurn-KXELVHFR.js} +33 -33
  97. package/{tools-7SMCO2GW.js → tools-FMNDEVTZ.js} +21 -21
  98. package/{tuiSummaryLlmCaller-H6WX54WY.js → tuiSummaryLlmCaller-FQOEF4IE.js} +8 -8
  99. package/{updateCommands-C56QMWHF.js → updateCommands-BXGFH4VX.js} +1 -1
  100. package/{updateDialogTitleAction-XIMLNROU.js → updateDialogTitleAction-65R3Y22L.js} +11 -11
  101. package/{chunk-5KTQVMCX.js → chunk-CGFNDIKK.js} +0 -0
  102. package/{chunk-76YUTLOT.js → chunk-UHTDNB5Y.js} +3 -3
@@ -2,7 +2,7 @@ import {
2
2
  DEVIN_CONNECT_URL,
3
3
  parseSseDataLineJson,
4
4
  parseSseDataLineObject
5
- } from "./chunk-XWX5ZGWR.js";
5
+ } from "./chunk-KMDDG73K.js";
6
6
  import {
7
7
  applyChatCompletionDelta,
8
8
  applyResponsesToolEvent,
@@ -11,7 +11,7 @@ import {
11
11
  flushChatCompletionStream,
12
12
  providerHttpFailure,
13
13
  throwIfChatCompletionStreamFailed
14
- } from "./chunk-72T5DXRH.js";
14
+ } from "./chunk-7NKZA46B.js";
15
15
  import {
16
16
  readSseFrames
17
17
  } from "./chunk-HNUWUO75.js";
@@ -23,16 +23,15 @@ import {
23
23
  EXECUTION_BACKEND_KINDS
24
24
  } from "./chunk-PWTNI4N7.js";
25
25
  import {
26
- IMAGE_OMITTED_PLACEHOLDER,
27
26
  hasImageInRuntimeMessages,
28
27
  stripImagePartsFromMessages
29
- } from "./chunk-AUGBRK3P.js";
28
+ } from "./chunk-CEXJ6Y3C.js";
30
29
  import {
31
30
  clipToolText,
32
31
  resolveAgentImageInputSupport,
33
32
  resolveHistoricalToolContentCap,
34
33
  resolveToolOutputProfile
35
- } from "./chunk-JHXY4H3P.js";
34
+ } from "./chunk-BSKTDOGA.js";
36
35
  import {
37
36
  applyShapingCounts,
38
37
  attachProjectionFacts,
@@ -67,7 +66,7 @@ import {
67
66
  hashStablePrefixContent,
68
67
  resolveResponseGuidelines,
69
68
  resolveToolGuidedSections
70
- } from "./chunk-RATR6VCP.js";
69
+ } from "./chunk-TOUKACDK.js";
71
70
  import {
72
71
  classifyUnparsableToolArgs,
73
72
  collectStablePromptPrefix,
@@ -91,7 +90,7 @@ import {
91
90
  toOpenAiCompatibleMessages,
92
91
  toResponsesTools,
93
92
  transferDowngradedToolTurnOrigin
94
- } from "./chunk-7L2HZQNN.js";
93
+ } from "./chunk-DI7ZFGDQ.js";
95
94
  import {
96
95
  BRIDGE_STREAM_MAX_CHARS,
97
96
  CLI_NOLO_WORKSPACE_TOOL_NAMES,
@@ -126,7 +125,7 @@ import {
126
125
  resolveEmptyAssistantFallbackMessage,
127
126
  resolveEmptyAssistantOutcome,
128
127
  resolveTruncatedReasoningTailLog
129
- } from "./chunk-O3FUFEUI.js";
128
+ } from "./chunk-HEC32F3G.js";
130
129
  import {
131
130
  COMPACTION_SUMMARY_SCHEMA_VERSION,
132
131
  COMPACTION_SUMMARY_SYSTEM_PROMPT,
@@ -149,7 +148,7 @@ import {
149
148
  sha256Hex,
150
149
  truncateToolOutputForContext,
151
150
  withProviderCallTimingFields
152
- } from "./chunk-XHR22EKE.js";
151
+ } from "./chunk-ASSNAASW.js";
153
152
  import {
154
153
  clipCompactText
155
154
  } from "./chunk-5MMAK75Q.js";
@@ -159,9 +158,6 @@ import {
159
158
  import {
160
159
  isAbortError
161
160
  } from "./chunk-7DPNBQSV.js";
162
- import {
163
- resolveNoloStateDir
164
- } from "./chunk-ZWQUWF6W.js";
165
161
  import {
166
162
  buildDialogSummaryLayer
167
163
  } from "./chunk-VEA7H5FG.js";
@@ -191,7 +187,7 @@ import {
191
187
  import {
192
188
  buildProviderAuthHeaders,
193
189
  buildProviderExecutionPlan
194
- } from "./chunk-I2QHI2XM.js";
190
+ } from "./chunk-PIG2IUVZ.js";
195
191
  import {
196
192
  isRecord
197
193
  } from "./chunk-KUG52IAP.js";
@@ -210,6 +206,9 @@ import {
210
206
  import {
211
207
  asTrimmedLowercaseString
212
208
  } from "./chunk-QSJ3HFEF.js";
209
+ import {
210
+ resolveNoloStateDir
211
+ } from "./chunk-ZWQUWF6W.js";
213
212
  import {
214
213
  __export
215
214
  } from "./chunk-4VNS5WPM.js";
@@ -12504,32 +12503,6 @@ function createLoopTiming() {
12504
12503
  return { mark, flush: flush2 };
12505
12504
  }
12506
12505
 
12507
- // packages/agent-runtime/toolImages.ts
12508
- import { createHash } from "node:crypto";
12509
- var TOOL_IMAGES = Symbol("runtime-only-tool-images");
12510
- function toolImages(message) {
12511
- return message[TOOL_IMAGES] ?? [];
12512
- }
12513
- function withoutToolImages(message) {
12514
- if (!(TOOL_IMAGES in message)) return message;
12515
- const { [TOOL_IMAGES]: _images, ...textOnly } = message;
12516
- return textOnly;
12517
- }
12518
- function createToolImageLedger() {
12519
- const seen = /* @__PURE__ */ new Set();
12520
- return (images) => (images ?? []).filter((image) => {
12521
- const hash2 = createHash("sha256").update(Buffer.from(image.dataBase64, "base64")).digest("hex");
12522
- if (seen.has(hash2)) return false;
12523
- seen.add(hash2);
12524
- return true;
12525
- });
12526
- }
12527
- function omitToolImages(message, reason, placeholder = `[image omitted: ${reason}]`) {
12528
- if (!toolImages(message).length) return message;
12529
- return { ...withoutToolImages(message), content: `${message.content ?? ""}
12530
- ${placeholder}` };
12531
- }
12532
-
12533
12506
  // packages/agent-runtime/toolCallPairing.ts
12534
12507
  function readToolCallId(message) {
12535
12508
  if (typeof message.tool_call_id === "string" && message.tool_call_id) {
@@ -12632,7 +12605,7 @@ function sanitizeToolCallPairing(messages) {
12632
12605
  }
12633
12606
 
12634
12607
  // packages/agent-runtime/toolSpillStore.ts
12635
- import { createHash as createHash2 } from "node:crypto";
12608
+ import { createHash } from "node:crypto";
12636
12609
  import { existsSync, mkdirSync, readdirSync, renameSync, statSync, unlinkSync, utimesSync, writeFileSync } from "node:fs";
12637
12610
  import { isAbsolute, join as join2, relative } from "node:path";
12638
12611
  var DEFAULT_MAX_SPILL_DIR_BYTES = 50 * 1024 * 1024;
@@ -12724,7 +12697,7 @@ function spillToolOutput(options) {
12724
12697
  maxTotalBytes: options.maxRetentionBytes,
12725
12698
  throttleMs: SPILL_CLEANUP_THROTTLE_MS
12726
12699
  });
12727
- const hash2 = createHash2("sha256").update(content).digest("hex").slice(0, 12);
12700
+ const hash2 = createHash("sha256").update(content).digest("hex").slice(0, 12);
12728
12701
  const safeToolName = (options.toolName || "tool").replace(/[^a-zA-Z0-9_-]/g, "_").slice(0, 24);
12729
12702
  const fileName = `spill-${safeToolName}-${hash2}.log`;
12730
12703
  const spillPath = join2(spillDir, fileName);
@@ -13197,7 +13170,7 @@ function prepareHistoryForNextTurn(history, contextReferenceResolver) {
13197
13170
  function filterImagePartsFromMessages(messages, supportsImages) {
13198
13171
  if (supportsImages) return messages;
13199
13172
  return stripImagePartsFromMessages(messages).map(
13200
- (stripped, index) => omitToolImages(transferDowngradedToolTurnOrigin(messages[index], stripped), "model has no vision", IMAGE_OMITTED_PLACEHOLDER)
13173
+ (stripped, index) => transferDowngradedToolTurnOrigin(messages[index], stripped)
13201
13174
  );
13202
13175
  }
13203
13176
  var MODEL_PROJECTED_USER_PART_TYPES = /* @__PURE__ */ new Set(["attachment", "media_job"]);
@@ -13289,7 +13262,7 @@ ${args2.input}` : [
13289
13262
  }
13290
13263
 
13291
13264
  // packages/agent-runtime/toolArgsTruncationPolicy.ts
13292
- import { createHash as createHash3 } from "node:crypto";
13265
+ import { createHash as createHash2 } from "node:crypto";
13293
13266
  var TRUNCATION_TAIL_DROP_ALLOWED_TOOLS = /* @__PURE__ */ new Set([
13294
13267
  "ask_user"
13295
13268
  ]);
@@ -13320,7 +13293,7 @@ function buildToolArgsDiagnosticLine(args2) {
13320
13293
  const { toolName, raw, outcome, context: context3 } = args2;
13321
13294
  const env = args2.env ?? process.env;
13322
13295
  const scan2 = scanTruncation(raw);
13323
- const sha = createHash3("sha256").update(raw).digest("hex").slice(0, 12);
13296
+ const sha = createHash2("sha256").update(raw).digest("hex").slice(0, 12);
13324
13297
  const parts2 = [
13325
13298
  `[tool-args-diag] ${toolName} ${outcome}`,
13326
13299
  `len=${raw.length}`,
@@ -13923,7 +13896,7 @@ async function evaluateCapabilityPolicy(capability, normalizedInput, ctx) {
13923
13896
  }
13924
13897
 
13925
13898
  // packages/agent-runtime/capabilities/execShellCapability.ts
13926
- import { createHash as createHash4 } from "node:crypto";
13899
+ import { createHash as createHash3 } from "node:crypto";
13927
13900
 
13928
13901
  // packages/agent-runtime/execShellCompletionWarnings.ts
13929
13902
  var BG_ESCAPE_WORD_PATTERN = /(?:^|[\s;|(&/\\])(nohup|disown|setsid|start-process)(?=$|[\s;|)&])/i;
@@ -15599,7 +15572,7 @@ function execShellExecutionBinding(input, ctx) {
15599
15572
  confirmed: ctx.confirmed,
15600
15573
  enableDestructiveShellGuard: ctx.enableDestructiveShellGuard,
15601
15574
  blockDestructiveWithoutConfirmation: ctx.blockDestructiveWithoutConfirmation,
15602
- envDigest: createHash4("sha256").update(JSON.stringify(process.env)).digest("hex")
15575
+ envDigest: createHash3("sha256").update(JSON.stringify(process.env)).digest("hex")
15603
15576
  });
15604
15577
  }
15605
15578
  var execShellCapability = {
@@ -15732,75 +15705,8 @@ async function invokeCapability(capabilityOrName, input, ctx = {}) {
15732
15705
 
15733
15706
  // packages/agent-runtime/localWorkspaceTools.ts
15734
15707
  import { existsSync as existsSync4 } from "node:fs";
15735
- import { createHash as createHash5 } from "node:crypto";
15736
-
15737
- // packages/agent-runtime/readImage.ts
15738
- import { readFile } from "node:fs/promises";
15739
- import { extname } from "node:path";
15740
- var MAX_IMAGE_BASE64_BYTES = 2 * 1024 * 1024;
15741
- var MAX_IMAGE_EDGE = 1568;
15742
- var MIME_BY_EXTENSION = {
15743
- ".png": "image/png",
15744
- ".jpg": "image/jpeg",
15745
- ".jpeg": "image/jpeg",
15746
- ".webp": "image/webp",
15747
- ".gif": "image/gif"
15748
- };
15749
- function detectMime(bytes) {
15750
- if (bytes.subarray(0, 8).equals(Buffer.from([137, 80, 78, 71, 13, 10, 26, 10]))) return "image/png";
15751
- if (bytes[0] === 255 && bytes[1] === 216 && bytes[2] === 255) return "image/jpeg";
15752
- if (["GIF87a", "GIF89a"].includes(bytes.toString("ascii", 0, 6))) return "image/gif";
15753
- if (bytes.toString("ascii", 0, 4) === "RIFF" && bytes.toString("ascii", 8, 12) === "WEBP") return "image/webp";
15754
- }
15755
- async function readLocalImage(path, options) {
15756
- const limit = options?.maxBase64Bytes ?? MAX_IMAGE_BASE64_BYTES;
15757
- const expected = MIME_BY_EXTENSION[extname(path).toLowerCase()];
15758
- if (!expected) throw new Error("read_image: unsupported image extension (PNG/JPEG/WebP/GIF only)");
15759
- const bytes = await readFile(path);
15760
- if (detectMime(bytes) !== expected) throw new Error("read_image: image extension and magic bytes do not match");
15761
- const { default: sharp } = await import("./dist-Q2JSMAKA.js");
15762
- const image = sharp(bytes, { limitInputPixels: 4e7, animated: false });
15763
- const meta = await image.metadata();
15764
- if (!meta.width || !meta.height) throw new Error("read_image: invalid image dimensions");
15765
- const encoded = (length) => 4 * Math.ceil(length / 3);
15766
- let output = bytes;
15767
- let mimeType = expected;
15768
- let width = meta.width;
15769
- let height = meta.height;
15770
- if (Math.max(width, height) > MAX_IMAGE_EDGE || encoded(output.length) > limit) {
15771
- const resized = await image.rotate().resize({ width: MAX_IMAGE_EDGE, height: MAX_IMAGE_EDGE, fit: "inside", withoutEnlargement: true }).jpeg({ quality: 80 }).toBuffer({ resolveWithObject: true });
15772
- output = resized.data;
15773
- width = resized.info.width;
15774
- height = resized.info.height;
15775
- mimeType = "image/jpeg";
15776
- }
15777
- while (encoded(output.length) > limit) {
15778
- const current = encoded(output.length);
15779
- if (width === 1 && height === 1) {
15780
- throw new Error(
15781
- `read_image: compressed image ${width}x${height}, ${output.length} bytes (${current} base64 bytes) still exceeds ${limit} base64 bytes`
15782
- );
15783
- }
15784
- const scale = Math.min(0.9, Math.sqrt(limit / current) * 0.95);
15785
- const resized = await image.clone().rotate().resize({
15786
- width: Math.max(1, Math.floor(width * scale)),
15787
- height: Math.max(1, Math.floor(height * scale)),
15788
- fit: "inside",
15789
- withoutEnlargement: true
15790
- }).jpeg({ quality: 80 }).toBuffer({ resolveWithObject: true });
15791
- output = resized.data;
15792
- width = resized.info.width;
15793
- height = resized.info.height;
15794
- mimeType = "image/jpeg";
15795
- }
15796
- return {
15797
- content: `[image ${width}x${height} ${output.length} bytes \u2192 ${path}]`,
15798
- images: [{ mimeType, dataBase64: output.toString("base64") }]
15799
- };
15800
- }
15801
-
15802
- // packages/agent-runtime/localWorkspaceTools.ts
15803
- import { lstat, mkdir, readdir as readdir2, readFile as readFile4, realpath, stat as stat3, writeFile } from "node:fs/promises";
15708
+ import { createHash as createHash4 } from "node:crypto";
15709
+ import { lstat, mkdir, readdir as readdir2, readFile as readFile3, realpath, stat as stat3, writeFile } from "node:fs/promises";
15804
15710
  import { homedir } from "node:os";
15805
15711
  import { dirname as dirname2, isAbsolute as isAbsolute2, relative as relative3, resolve as resolve4, sep } from "node:path";
15806
15712
  import { spawn as spawnChildProcess3 } from "node:child_process";
@@ -15838,15 +15744,15 @@ function isLineRangeCovered(request3, covered) {
15838
15744
  }
15839
15745
 
15840
15746
  // packages/agent-runtime/fileTextSearch.ts
15841
- import { readdir, readFile as readFile3, stat as stat2 } from "node:fs/promises";
15747
+ import { readdir, readFile as readFile2, stat as stat2 } from "node:fs/promises";
15842
15748
  import { basename, relative as relative2, resolve as resolve3 } from "node:path";
15843
15749
  import { spawn as spawnChildProcess2 } from "node:child_process";
15844
15750
 
15845
15751
  // packages/agent-runtime/gitignore.ts
15846
- import { readFile as readFile2, stat } from "node:fs/promises";
15752
+ import { readFile, stat } from "node:fs/promises";
15847
15753
  import { resolve as resolve2 } from "node:path";
15848
15754
  async function readRootGitignorePatterns(workspaceRoot) {
15849
- const content = await readFile2(resolve2(workspaceRoot, ".gitignore"), "utf8").catch(() => null);
15755
+ const content = await readFile(resolve2(workspaceRoot, ".gitignore"), "utf8").catch(() => null);
15850
15756
  if (content === null) return [];
15851
15757
  return content.split(/\r?\n/).map((line) => line.trim()).filter((line) => line && !line.startsWith("#") && !line.startsWith("!")).flatMap((line) => {
15852
15758
  const unanchored = line.replace(/^\//, "");
@@ -15926,7 +15832,7 @@ async function decorate(root, raw, context3, absolute = false) {
15926
15832
  let lines = cache.get(x.file);
15927
15833
  if (!lines) {
15928
15834
  try {
15929
- lines = (await readFile3(x.file, "utf8")).split(/\r\n|\r|\n/);
15835
+ lines = (await readFile2(x.file, "utf8")).split(/\r\n|\r|\n/);
15930
15836
  } catch {
15931
15837
  continue;
15932
15838
  }
@@ -15955,7 +15861,7 @@ function globMatch(pattern, value) {
15955
15861
  const r = new RegExp(`^${source}$`);
15956
15862
  return r.test(value) || r.test(basename(value));
15957
15863
  }
15958
- var defaultReadTextFile = (filePath) => readFile3(filePath, "utf8").catch(() => "");
15864
+ var defaultReadTextFile = (filePath) => readFile2(filePath, "utf8").catch(() => "");
15959
15865
  async function jsSearch(o, targetPath) {
15960
15866
  const max4 = o.maxResults ?? Number.MAX_SAFE_INTEGER;
15961
15867
  const excludes = o.exclude ?? [];
@@ -16315,7 +16221,6 @@ function runTasks(args2) {
16315
16221
  // packages/agent-runtime/localWorkspaceToolDefs.ts
16316
16222
  var WORKSPACE_TOOL_NAMES = [
16317
16223
  "readFile",
16318
- "read_image",
16319
16224
  "writeFile",
16320
16225
  "editFile",
16321
16226
  "globFiles",
@@ -16621,16 +16526,6 @@ function buildTaskStopTool() {
16621
16526
  };
16622
16527
  }
16623
16528
  function buildWorkspaceToolDefinition(toolName) {
16624
- if (toolName === "read_image") {
16625
- return {
16626
- type: "function",
16627
- function: {
16628
- name: "read_image",
16629
- description: "Read one local PNG/JPEG/WebP/GIF image. Long edges above 1568px are resized to JPEG q80. Maximum encoded base64 size is 2MiB.",
16630
- parameters: { type: "object", properties: { path: buildWorkspacePathProperty() }, required: ["path"], additionalProperties: false }
16631
- }
16632
- };
16633
- }
16634
16529
  if (toolName === "readFile") {
16635
16530
  return buildReadWorkspaceFileTool();
16636
16531
  }
@@ -17027,7 +16922,7 @@ function readVisualStateCaptureArgs(args2) {
17027
16922
  }
17028
16923
  async function readWorkspacePackageScripts(workspaceRoot) {
17029
16924
  try {
17030
- const raw = await readFile4(resolve4(workspaceRoot, "package.json"), "utf8");
16925
+ const raw = await readFile3(resolve4(workspaceRoot, "package.json"), "utf8");
17031
16926
  const parsed = JSON.parse(raw);
17032
16927
  const scripts = parsed && typeof parsed === "object" && parsed.scripts && typeof parsed.scripts === "object" ? Object.keys(parsed.scripts).sort() : [];
17033
16928
  return { scripts };
@@ -17212,7 +17107,7 @@ async function readFileTool(args2) {
17212
17107
  allowRuntimeOwnedSpill: true,
17213
17108
  ...args2.confirmExternalFileAccess ? { confirmExternalFileAccess: args2.confirmExternalFileAccess } : {}
17214
17109
  });
17215
- const content = await readFile4(absolutePath, "utf8");
17110
+ const content = await readFile3(absolutePath, "utf8");
17216
17111
  const activity = extractActivity(parsed);
17217
17112
  const sliced = sliceReadFileContent({
17218
17113
  content,
@@ -17230,7 +17125,7 @@ async function readFileTool(args2) {
17230
17125
  const force = parsed.force === true;
17231
17126
  const ledger = args2.readLedger;
17232
17127
  const requestRange = { startLine: sliced.startLine, endLine: sliced.endLine };
17233
- const fingerprint = createHash5("sha1").update(content).digest("hex").slice(0, 20);
17128
+ const fingerprint = createHash4("sha1").update(content).digest("hex").slice(0, 20);
17234
17129
  let entry = ledger?.get(relativePath);
17235
17130
  if (entry && entry.fingerprint !== fingerprint) {
17236
17131
  entry = void 0;
@@ -17405,7 +17300,7 @@ async function editFileTool(args2) {
17405
17300
  requestedPath,
17406
17301
  ...args2.confirmExternalFileAccess ? { confirmExternalFileAccess: args2.confirmExternalFileAccess } : {}
17407
17302
  });
17408
- const content = await readFile4(absolutePath, "utf8");
17303
+ const content = await readFile3(absolutePath, "utf8");
17409
17304
  const { count: replacementCount, result: nextContent } = countAndReplaceEolTolerant({
17410
17305
  content,
17411
17306
  oldText,
@@ -18098,16 +17993,6 @@ function createLocalWorkspaceToolExecutors(args2) {
18098
17993
  ...fileAccess,
18099
17994
  ...args2.resolveRipgrepBinary ? { resolveRipgrepBinary: args2.resolveRipgrepBinary } : {}
18100
17995
  }),
18101
- read_image: async (call) => {
18102
- const parsed = parseWorkspaceToolArguments(call.arguments);
18103
- if (Object.keys(parsed).some((key) => key !== "path")) throw new Error("read_image accepts exactly one path");
18104
- const absolutePath = await resolveLocalWorkspaceToolPath({
18105
- workspaceRoot: args2.workspaceRoot,
18106
- requestedPath: requireWorkspaceToolPath(parsed),
18107
- ...fileAccess
18108
- });
18109
- return readLocalImage(absolutePath);
18110
- },
18111
17996
  readFile: (call) => readFileTool({
18112
17997
  call,
18113
17998
  workspaceRoot: args2.workspaceRoot,
@@ -18318,7 +18203,6 @@ var NEVER_LOCAL_TOOLS = /* @__PURE__ */ new Set([
18318
18203
  ]);
18319
18204
  var DEFAULT_LOCAL_TOOLS = /* @__PURE__ */ new Set([
18320
18205
  "readFile",
18321
- "read_image",
18322
18206
  "writeFile",
18323
18207
  "editFile",
18324
18208
  "globFiles",
@@ -18879,13 +18763,13 @@ function createTurnTranscript(args2) {
18879
18763
  pushTool: (msg) => {
18880
18764
  const capped = cap(msg);
18881
18765
  working.push(capped);
18882
- raw.push(withoutToolImages(capped));
18766
+ raw.push(capped);
18883
18767
  },
18884
18768
  popLast: () => {
18885
18769
  raw.pop();
18886
18770
  return working.pop();
18887
18771
  },
18888
- persisted: (persistedInput, persistedInputReference) => applyPersistedTurnInput(raw.map(withoutToolImages), persistedInput, persistedInputReference)
18772
+ persisted: (persistedInput, persistedInputReference) => applyPersistedTurnInput(raw, persistedInput, persistedInputReference)
18889
18773
  };
18890
18774
  }
18891
18775
 
@@ -19600,8 +19484,8 @@ function createTurnCompactionController(args2) {
19600
19484
  }
19601
19485
 
19602
19486
  // packages/agent-runtime/providerCallTelemetry.ts
19603
- import { createHash as createHash6 } from "node:crypto";
19604
- var shortHash = (value) => createHash6("sha1").update(value).digest("hex").slice(0, 12);
19487
+ import { createHash as createHash5 } from "node:crypto";
19488
+ var shortHash = (value) => createHash5("sha1").update(value).digest("hex").slice(0, 12);
19605
19489
  var hashMessage = (message) => {
19606
19490
  let text2;
19607
19491
  try {
@@ -19684,7 +19568,6 @@ function buildRoundBudgetWarningPrompt(threshold) {
19684
19568
  }
19685
19569
  var CONCURRENT_READONLY_TOOLS = /* @__PURE__ */ new Set([
19686
19570
  "readFile",
19687
- "read_image",
19688
19571
  "read_file",
19689
19572
  "readWorkspaceFile",
19690
19573
  "globFiles",
@@ -20166,7 +20049,6 @@ async function runLocalAgentTurn(input) {
20166
20049
  ...msg,
20167
20050
  content: truncateToolOutputForContext(msg.content, contextWindow)
20168
20051
  } : msg;
20169
- const acceptToolImages = createToolImageLedger();
20170
20052
  const transcript = createTurnTranscript({
20171
20053
  initialWorking: messages,
20172
20054
  prefixCount,
@@ -20347,9 +20229,6 @@ async function runLocalAgentTurn(input) {
20347
20229
  providerName: agentConfig.provider,
20348
20230
  model: provider.model
20349
20231
  });
20350
- transcript.replaceWorkingHistory(transcript.working().map(
20351
- (message) => omitToolImages(message, "already sent this turn")
20352
- ));
20353
20232
  loopTiming.mark("llmCall", round);
20354
20233
  usageLedger.recordProviderCall({
20355
20234
  usage: result4.usage,
@@ -20534,7 +20413,6 @@ ${reasoningTailLog}
20534
20413
  }),
20535
20414
  tool_call_id: toolCall.id,
20536
20415
  toolName,
20537
- [TOOL_IMAGES]: acceptToolImages(toolResult.images),
20538
20416
  ...observedMetadata ? { tool_result_metadata: observedMetadata } : {}
20539
20417
  });
20540
20418
  };
@@ -22067,7 +21945,7 @@ function buildLoadSkillExecutor(args2) {
22067
21945
  const { resolveSkillByName } = await import("./skillDiscovery-QC35EQY4.js");
22068
21946
  const resolved = resolveSkillByName(args2.cwd, name);
22069
21947
  if (!resolved) {
22070
- const { resolveBuiltinSkillByName } = await import("./builtinSkillRegistry-V76JTNCJ.js");
21948
+ const { resolveBuiltinSkillByName } = await import("./builtinSkillRegistry-LJV7FHNI.js");
22071
21949
  const builtin = resolveBuiltinSkillByName(name);
22072
21950
  if (builtin) {
22073
21951
  return {
@@ -22126,14 +22004,14 @@ Available skills: ${available.join(", ")}`;
22126
22004
  }
22127
22005
 
22128
22006
  // packages/agent-runtime/sessionIdentity.ts
22129
- import { createHash as createHash7 } from "node:crypto";
22007
+ import { createHash as createHash6 } from "node:crypto";
22130
22008
  var SALT = "nolo-session-identity-v1";
22131
22009
  function isStableSessionIdentityEnabled(env = process.env) {
22132
22010
  const v = env.NOLO_STABLE_SESSION_IDENTITY?.trim().toLowerCase();
22133
22011
  return !(v === "0" || v === "false" || v === "off");
22134
22012
  }
22135
22013
  function deriveStableUuid(sessionKey, purpose) {
22136
- const h = createHash7("sha256").update(`${SALT}\0${purpose}\0${sessionKey}`).digest();
22014
+ const h = createHash6("sha256").update(`${SALT}\0${purpose}\0${sessionKey}`).digest();
22137
22015
  h[6] = h[6] & 15 | 80;
22138
22016
  h[8] = h[8] & 63 | 128;
22139
22017
  const x = h.subarray(0, 16).toString("hex");
@@ -22755,7 +22633,6 @@ export {
22755
22633
  Duration_exports,
22756
22634
  Exit_exports,
22757
22635
  Effect_exports,
22758
- toolImages,
22759
22636
  formatToolOverflowMarker,
22760
22637
  isDestructiveShellCommand,
22761
22638
  evaluateShellCommandPolicy,
@@ -3,13 +3,13 @@ import {
3
3
  } from "./chunk-HS7MLR74.js";
4
4
  import {
5
5
  performServerProxyFetchWithRetry
6
- } from "./chunk-X2Q5GT5J.js";
6
+ } from "./chunk-CEQFVBI2.js";
7
7
  import {
8
8
  fetchServerSyncedCredential
9
- } from "./chunk-7MBN2JZ5.js";
9
+ } from "./chunk-XLBQQ5SB.js";
10
10
  import {
11
11
  buildSkillGuidancePromptBlock
12
- } from "./chunk-3LNVSFTH.js";
12
+ } from "./chunk-SH3XD4E2.js";
13
13
  import {
14
14
  CREDENTIAL_HYGIENE_RULE,
15
15
  DELETE_SAFETY_RED_LINE,
@@ -23,7 +23,7 @@ import {
23
23
  compileContextLayers,
24
24
  detectDispatchIntentFromMessages,
25
25
  resolveToolGuidedSections
26
- } from "./chunk-RATR6VCP.js";
26
+ } from "./chunk-TOUKACDK.js";
27
27
  import {
28
28
  convertMessagesToResponsesInput,
29
29
  getUsageRequestOptions,
@@ -32,14 +32,14 @@ import {
32
32
  resolveReasoningReplayOptions,
33
33
  shouldStripReasoningContentForOutbound,
34
34
  stablePromptCacheKey
35
- } from "./chunk-7L2HZQNN.js";
35
+ } from "./chunk-DI7ZFGDQ.js";
36
36
  import {
37
37
  resolveAgentCallPlan,
38
38
  resolveClientWire
39
- } from "./chunk-6OC2YMGH.js";
39
+ } from "./chunk-SAZSXMTR.js";
40
40
  import {
41
41
  createFileCredentialBroker
42
- } from "./chunk-76YUTLOT.js";
42
+ } from "./chunk-UHTDNB5Y.js";
43
43
  import {
44
44
  MEMORY_USE_GUIDANCE,
45
45
  buildUserResponseLanguageContext,
@@ -53,12 +53,12 @@ import {
53
53
  } from "./chunk-LCBAMY2M.js";
54
54
  import {
55
55
  buildProviderAuthHeaders
56
- } from "./chunk-I2QHI2XM.js";
56
+ } from "./chunk-PIG2IUVZ.js";
57
57
  import {
58
58
  clampReasoningEffort,
59
59
  getModelConfig,
60
60
  isModelSupportReasoningEffort
61
- } from "./chunk-GC64WGMD.js";
61
+ } from "./chunk-6EQD4AQL.js";
62
62
  import {
63
63
  isRecord
64
64
  } from "./chunk-KUG52IAP.js";
@@ -79,7 +79,7 @@ import {
79
79
  isFireworksKimiModel,
80
80
  isPlatformMimoProviderModel,
81
81
  resolveFireworksKimiModel
82
- } from "./chunk-5KTQVMCX.js";
82
+ } from "./chunk-CGFNDIKK.js";
83
83
 
84
84
  // packages/agent-runtime/responsesConversationState.ts
85
85
  function supportsResponsesConversationState(agent) {
@@ -1,10 +1,10 @@
1
1
  import {
2
2
  fetchReferenceContents,
3
3
  resolveReferenceAssets
4
- } from "./chunk-X2Q5GT5J.js";
4
+ } from "./chunk-CEQFVBI2.js";
5
5
  import {
6
6
  updateTokensAction
7
- } from "./chunk-MIME4XKU.js";
7
+ } from "./chunk-CMRP4XHV.js";
8
8
  import {
9
9
  applyUpdateTokensFulfilled
10
10
  } from "./chunk-OWYYDMGJ.js";
@@ -12,7 +12,7 @@ import {
12
12
  extractReasoningFromResponseOutput,
13
13
  extractTextFromResponseOutput,
14
14
  extractToolCallsFromResponseOutput
15
- } from "./chunk-7L2HZQNN.js";
15
+ } from "./chunk-DI7ZFGDQ.js";
16
16
  import {
17
17
  isRecord
18
18
  } from "./chunk-KUG52IAP.js";
@@ -7,7 +7,7 @@ import {
7
7
  mergeReferences,
8
8
  resolveReferenceAssets,
9
9
  resolveToolsFromKeys
10
- } from "./chunk-X2Q5GT5J.js";
10
+ } from "./chunk-CEQFVBI2.js";
11
11
  import {
12
12
  UI_CARD_ENVELOPE_MAX_BYTES,
13
13
  getAllToolRuns,
@@ -20,7 +20,7 @@ import {
20
20
  selectSpaceContextLevel,
21
21
  selectUserTonePreset,
22
22
  uiCardFallback
23
- } from "./chunk-P4V35AFD.js";
23
+ } from "./chunk-WLPUUBFR.js";
24
24
  import {
25
25
  resolveToolBaseUrl
26
26
  } from "./chunk-MYOH447Z.js";
@@ -29,18 +29,18 @@ import {
29
29
  getModelPricing,
30
30
  getPrices,
31
31
  hasExplicitAgentPricing
32
- } from "./chunk-TDNAAXUQ.js";
32
+ } from "./chunk-ZPKUJROL.js";
33
33
  import {
34
34
  getDocState
35
- } from "./chunk-WPOSH6PA.js";
35
+ } from "./chunk-HZMWJUSD.js";
36
36
  import {
37
37
  getTableState
38
- } from "./chunk-BQSW7453.js";
38
+ } from "./chunk-URO44BCD.js";
39
39
  import {
40
40
  PERSONALIZATION_DIALOG_CATEGORY,
41
41
  buildPersonalizationDialogPolicyContext,
42
42
  selectAllMsgs
43
- } from "./chunk-MIME4XKU.js";
43
+ } from "./chunk-CMRP4XHV.js";
44
44
  import {
45
45
  getCurrentSpaceIdRaw,
46
46
  getViewMode
@@ -66,21 +66,21 @@ import {
66
66
  expandEnabledPackPromptPatches,
67
67
  expandEnabledPacks,
68
68
  resolveEffectiveEnabledPacks
69
- } from "./chunk-WXOKJP3W.js";
69
+ } from "./chunk-YCRROBDY.js";
70
70
  import {
71
71
  projectToolMessageContent
72
- } from "./chunk-JHXY4H3P.js";
72
+ } from "./chunk-BSKTDOGA.js";
73
73
  import {
74
74
  attachmentKind,
75
75
  normalizeAttachmentPart
76
76
  } from "./chunk-WJZOQR2J.js";
77
77
  import {
78
78
  extractReferenceKeysFromMessage
79
- } from "./chunk-O3FUFEUI.js";
79
+ } from "./chunk-HEC32F3G.js";
80
80
  import {
81
81
  getModelContextWindow,
82
82
  planContextUsage
83
- } from "./chunk-XHR22EKE.js";
83
+ } from "./chunk-ASSNAASW.js";
84
84
  import {
85
85
  asRecordOrEmpty
86
86
  } from "./chunk-KX6YBIHG.js";
@@ -113,7 +113,7 @@ import {
113
113
  import {
114
114
  getModelConfig,
115
115
  getProviderByModelName
116
- } from "./chunk-GC64WGMD.js";
116
+ } from "./chunk-6EQD4AQL.js";
117
117
  import {
118
118
  isRecord
119
119
  } from "./chunk-KUG52IAP.js";
@@ -1,12 +1,12 @@
1
1
  import {
2
2
  addContentToSpace
3
- } from "./chunk-BQSW7453.js";
3
+ } from "./chunk-URO44BCD.js";
4
4
  import {
5
5
  format,
6
6
  prepareAndPersistMessage,
7
7
  uiAskChoiceFunc,
8
8
  uiAskChoiceFunctionSchema
9
- } from "./chunk-MIME4XKU.js";
9
+ } from "./chunk-CMRP4XHV.js";
10
10
  import {
11
11
  formatISO
12
12
  } from "./chunk-ZRAU6T47.js";
@@ -25,7 +25,7 @@ import {
25
25
  } from "./chunk-PXYBUFDB.js";
26
26
  import {
27
27
  buildBuiltinObjectSkillReference
28
- } from "./chunk-WXOKJP3W.js";
28
+ } from "./chunk-YCRROBDY.js";
29
29
  import {
30
30
  extractCustomId
31
31
  } from "./chunk-M2EJHDJP.js";
@@ -52,7 +52,7 @@ import {
52
52
  import {
53
53
  PLATFORM_HOSTED_DEEPSEEK_FLASH_MODEL,
54
54
  PLATFORM_HOSTED_KIMI_PROVIDER
55
- } from "./chunk-5KTQVMCX.js";
55
+ } from "./chunk-CGFNDIKK.js";
56
56
 
57
57
  // packages/chat/dialog/objectAssistantRegistry.ts
58
58
  var OBJECT_ASSISTANT_TO_SKILL = {