lody 0.90.0 → 0.91.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.
package/dist/index.js CHANGED
@@ -42,7 +42,7 @@ import { performance as performance$1 } from "perf_hooks";
42
42
  import require$$0$9 from "net";
43
43
  import require$$4$2 from "tls";
44
44
  import require$$7$2, { fileURLToPath as fileURLToPath$1, pathToFileURL as pathToFileURL$1 } from "url";
45
- import { D as DEEPSEEK_HARNESS_PERMISSION_MODES, a as DEEPSEEK_HARNESS_AGENT_PRESETS, b as DEEPSEEK_HARNESS_MODELS, c as DEEPSEEK_HARNESS_REASONING_OPTIONS, A as ACP_EXTENSION_DSH_CAPABILITY_SOURCE_VERSION, d as createDeepSeekHarnessCordisConfig, e as ACP_EXTENSION_DSH_VERSION, f as ACP_EXTENSION_DSH_PROFILE_REVISION, g as ACP_EXTENSION_DSH_QUERY_PATH_ENV, h as ACP_EXTENSION_DSH_SESSION_ROOT_ENV, i as DEEPSEEK_HARNESS_NPX_PACKAGES, j as DEEPSEEK_HARNESS_VERSION, k as DEEPSEEK_HARNESS_DEFAULT_SESSION_COMPRESSION } from "./chunks/profile-CPDWaQXE.js";
45
+ import { D as DEEPSEEK_HARNESS_PERMISSION_MODES, a as DEEPSEEK_HARNESS_AGENT_PRESETS, A as ACP_EXTENSION_DSH_CAPABILITY_SOURCE_VERSION, c as createDeepSeekHarnessCordisConfig, b as ACP_EXTENSION_DSH_VERSION, d as ACP_EXTENSION_DSH_PROFILE_REVISION, e as ACP_EXTENSION_DSH_QUERY_PATH_ENV, f as ACP_EXTENSION_DSH_SESSION_ROOT_ENV, g as DEEPSEEK_HARNESS_NPX_PACKAGES, h as DEEPSEEK_HARNESS_VERSION, i as DEEPSEEK_HARNESS_DEFAULT_SESSION_COMPRESSION, j as DEEPSEEK_HARNESS_BASE_URL_ENV } from "./chunks/profile-DLuYzIs8.js";
46
46
  import assert from "assert";
47
47
  import * as fs$2 from "fs/promises";
48
48
  import fs__default$2 from "fs/promises";
@@ -4325,7 +4325,7 @@ Upgrade Node, then re-run: npx lody@latest`;
4325
4325
  }
4326
4326
  const name$2 = "lody";
4327
4327
  const name$1 = "@lody/cli-cloud";
4328
- const version$9 = "0.90.0";
4328
+ const version$9 = "0.91.0";
4329
4329
  const type$2 = "module";
4330
4330
  const scripts = {
4331
4331
  "dev": "node dev.mjs",
@@ -4703,30 +4703,6 @@ Upgrade Node, then re-run: npx lody@latest`;
4703
4703
  options: DEEPSEEK_HARNESS_AGENT_PRESETS.map((preset) => ({
4704
4704
  ...preset
4705
4705
  }))
4706
- },
4707
- {
4708
- id: "model",
4709
- name: "Model",
4710
- description: "DeepSeek model used for the session",
4711
- category: "model",
4712
- type: "select",
4713
- currentValue: "deepseek-v4-pro",
4714
- options: DEEPSEEK_HARNESS_MODELS.map((model) => ({
4715
- value: model.modelId,
4716
- name: model.name,
4717
- description: model.description
4718
- }))
4719
- },
4720
- {
4721
- id: "reasoning_effort",
4722
- name: "Reasoning effort",
4723
- description: "How much reasoning effort the model should use",
4724
- category: "thought_level",
4725
- type: "select",
4726
- currentValue: "max",
4727
- options: DEEPSEEK_HARNESS_REASONING_OPTIONS.map((option2) => ({
4728
- ...option2
4729
- }))
4730
4706
  }
4731
4707
  ];
4732
4708
  const CODEX_STATIC_MODES = [
@@ -5137,9 +5113,6 @@ Upgrade Node, then re-run: npx lody@latest`;
5137
5113
  deepseek: {
5138
5114
  modes: DEEPSEEK_HARNESS_PERMISSION_MODES.map((mode2) => ({
5139
5115
  ...mode2
5140
- })),
5141
- models: DEEPSEEK_HARNESS_MODELS.map((model) => ({
5142
- ...model
5143
5116
  }))
5144
5117
  }
5145
5118
  });
@@ -12737,6 +12710,43 @@ Requirements:
12737
12710
  name: string$1().optional(),
12738
12711
  description: string$1().optional()
12739
12712
  }).strict();
12713
+ const AcpConfigOptionValueSummarySchema = object$1({
12714
+ value: string$1(),
12715
+ name: string$1(),
12716
+ description: string$1().optional(),
12717
+ group: string$1().optional()
12718
+ }).strict();
12719
+ const AcpConfigOptionSummarySchema = object$1({
12720
+ id: string$1(),
12721
+ name: string$1(),
12722
+ description: string$1().optional(),
12723
+ category: string$1().optional(),
12724
+ type: _enum$1([
12725
+ "select",
12726
+ "boolean"
12727
+ ]),
12728
+ currentValue: AcpConfigOptionValueSchema,
12729
+ options: array$2(AcpConfigOptionValueSummarySchema)
12730
+ }).strict();
12731
+ const AcpCapabilityCacheEntrySchema = object$1({
12732
+ cliType: AgentConfigCliTypeSchema,
12733
+ agentType: string$1().trim().min(1),
12734
+ cacheVersion: number$4().optional(),
12735
+ provenance: literal$1("runtime").optional(),
12736
+ sourceVersion: string$1().optional(),
12737
+ modes: array$2(AcpModeSchema),
12738
+ models: array$2(AcpModelSchema),
12739
+ configOptions: array$2(AcpConfigOptionSummarySchema).optional(),
12740
+ modelReasoningEfforts: record$1(string$1(), array$2(string$1())).optional(),
12741
+ availableCommands: array$2(object$1({
12742
+ name: string$1(),
12743
+ description: string$1().optional()
12744
+ }).strict()).optional(),
12745
+ sessionFork: boolean().optional(),
12746
+ acknowledgedSteer: boolean().optional(),
12747
+ sessionForkWorktree: boolean().optional(),
12748
+ fetchedAt: number$4()
12749
+ }).strict();
12740
12750
  const MachineAcpAuthMethodSummarySchema = object$1({
12741
12751
  type: _enum$1([
12742
12752
  "agent",
@@ -12854,6 +12864,7 @@ Requirements:
12854
12864
  category: string$1().optional(),
12855
12865
  optionCount: number$4()
12856
12866
  })).optional(),
12867
+ capability: AcpCapabilityCacheEntrySchema.optional(),
12857
12868
  availableCommands: array$2(object$1({
12858
12869
  name: string$1(),
12859
12870
  description: string$1().optional()
@@ -13313,10 +13324,7 @@ Requirements:
13313
13324
  "browser_address",
13314
13325
  "share_action"
13315
13326
  ]),
13316
- targetClass: _enum$1([
13317
- "loopback",
13318
- "private_lan"
13319
- ]),
13327
+ targetClass: literal$1("loopback"),
13320
13328
  target: PreviewTargetSchema,
13321
13329
  confirmedByUserId: string$1().trim().min(1),
13322
13330
  confirmedAt: number$4().int().nonnegative()
@@ -14717,35 +14725,35 @@ Requirements:
14717
14725
  {
14718
14726
  id: "antigravity-acp",
14719
14727
  name: "Google Antigravity",
14720
- version: "1.0.0",
14728
+ version: "1.1.1",
14721
14729
  description: "Google\u2019s AI coding agent",
14722
14730
  icon: "https://cdn.agentclientprotocol.com/registry/v1/latest/antigravity-acp.svg",
14723
14731
  distribution: {
14724
14732
  binary: {
14725
14733
  "darwin-aarch64": {
14726
- archive: "https://dl.google.com/agy-extensions/releases/macos/agy-acp-server-agy_acp_server_20260818_01_RC01-darwin-arm64.zip",
14734
+ archive: "https://dl.google.com/agy-extensions/releases/macos/agy-acp-server-agy_acp_server_1.1.1-darwin-arm64.zip",
14727
14735
  cmd: "./agy_acp_server.par"
14728
14736
  },
14729
14737
  "linux-x86_64": {
14730
- archive: "https://dl.google.com/agy-extensions/releases/linux/agy-acp-server-agy_acp_server_20260818_01_RC01-linux-x86_64.zip",
14738
+ archive: "https://dl.google.com/agy-extensions/releases/linux/agy-acp-server-agy_acp_server_1.1.1-linux-x86_64.zip",
14731
14739
  cmd: "./agy_acp_server.par",
14732
14740
  args: [
14733
14741
  "--uid="
14734
14742
  ]
14735
14743
  },
14736
14744
  "linux-aarch64": {
14737
- archive: "https://dl.google.com/agy-extensions/releases/linux/agy-acp-server-agy_acp_server_20260818_01_RC01-linux-arm64.zip",
14745
+ archive: "https://dl.google.com/agy-extensions/releases/linux/agy-acp-server-agy_acp_server_1.1.1-linux-arm64.zip",
14738
14746
  cmd: "./agy_acp_server.par",
14739
14747
  args: [
14740
14748
  "--uid="
14741
14749
  ]
14742
14750
  },
14743
14751
  "windows-x86_64": {
14744
- archive: "https://dl.google.com/agy-extensions/releases/windows/agy-acp-server-agy_acp_server_20260818_01_RC01-windows-x86_64.zip",
14752
+ archive: "https://dl.google.com/agy-extensions/releases/windows/agy-acp-server-agy_acp_server_1.1.1-windows-x86_64.zip",
14745
14753
  cmd: "./agy_acp_server.exe"
14746
14754
  },
14747
14755
  "windows-aarch64": {
14748
- archive: "https://dl.google.com/agy-extensions/releases/windows/agy-acp-server-agy_acp_server_20260818_01_RC01-windows-arm64.zip",
14756
+ archive: "https://dl.google.com/agy-extensions/releases/windows/agy-acp-server-agy_acp_server_1.1.1-windows-arm64.zip",
14749
14757
  cmd: "./agy_acp_server.exe"
14750
14758
  }
14751
14759
  }
@@ -14784,12 +14792,12 @@ Requirements:
14784
14792
  {
14785
14793
  id: "cline",
14786
14794
  name: "Cline",
14787
- version: "3.0.60",
14795
+ version: "3.0.61",
14788
14796
  description: "Autonomous coding agent CLI - capable of creating/editing files, running commands, using the browser, and more",
14789
14797
  icon: "https://cdn.agentclientprotocol.com/registry/v1/latest/cline.svg",
14790
14798
  distribution: {
14791
14799
  npx: {
14792
- package: "cline@3.0.60",
14800
+ package: "cline@3.0.61",
14793
14801
  args: [
14794
14802
  "--acp"
14795
14803
  ]
@@ -14799,12 +14807,12 @@ Requirements:
14799
14807
  {
14800
14808
  id: "codebuddy-code",
14801
14809
  name: "Codebuddy Code",
14802
- version: "2.142.0",
14810
+ version: "2.143.1",
14803
14811
  description: "Tencent Cloud's official intelligent coding tool",
14804
14812
  icon: "https://cdn.agentclientprotocol.com/registry/v1/latest/codebuddy-code.svg",
14805
14813
  distribution: {
14806
14814
  npx: {
14807
- package: "@tencent-ai/codebuddy-code@2.142.0",
14815
+ package: "@tencent-ai/codebuddy-code@2.143.1",
14808
14816
  args: [
14809
14817
  "--acp"
14810
14818
  ]
@@ -14946,7 +14954,7 @@ Requirements:
14946
14954
  {
14947
14955
  id: "cursor",
14948
14956
  name: "Cursor",
14949
- version: "2026.08.11",
14957
+ version: "2026.08.31",
14950
14958
  description: "Cursor's coding agent",
14951
14959
  icon: "https://cdn.agentclientprotocol.com/registry/v1/latest/cursor.svg",
14952
14960
  distribution: {
@@ -14976,48 +14984,48 @@ Requirements:
14976
14984
  {
14977
14985
  id: "devin",
14978
14986
  name: "Devin",
14979
- version: "3000.6.7",
14987
+ version: "3000.6.14",
14980
14988
  description: "Devin CLI coding agent by Cognition",
14981
14989
  icon: "https://cdn.agentclientprotocol.com/registry/v1/latest/devin.svg",
14982
14990
  distribution: {
14983
14991
  binary: {
14984
14992
  "darwin-aarch64": {
14985
- archive: "https://static.devin.ai/cli/3000.6.7/devin-3000.6.7-aarch64-apple-darwin.tar.gz",
14993
+ archive: "https://static.devin.ai/cli/3000.6.14/devin-3000.6.14-aarch64-apple-darwin.tar.gz",
14986
14994
  cmd: "./bin/devin",
14987
14995
  args: [
14988
14996
  "acp"
14989
14997
  ]
14990
14998
  },
14991
14999
  "darwin-x86_64": {
14992
- archive: "https://static.devin.ai/cli/3000.6.7/devin-3000.6.7-x86_64-apple-darwin.tar.gz",
15000
+ archive: "https://static.devin.ai/cli/3000.6.14/devin-3000.6.14-x86_64-apple-darwin.tar.gz",
14993
15001
  cmd: "./bin/devin",
14994
15002
  args: [
14995
15003
  "acp"
14996
15004
  ]
14997
15005
  },
14998
15006
  "linux-aarch64": {
14999
- archive: "https://static.devin.ai/cli/3000.6.7/devin-3000.6.7-aarch64-unknown-linux.tar.gz",
15007
+ archive: "https://static.devin.ai/cli/3000.6.14/devin-3000.6.14-aarch64-unknown-linux.tar.gz",
15000
15008
  cmd: "./bin/devin",
15001
15009
  args: [
15002
15010
  "acp"
15003
15011
  ]
15004
15012
  },
15005
15013
  "linux-x86_64": {
15006
- archive: "https://static.devin.ai/cli/3000.6.7/devin-3000.6.7-x86_64-unknown-linux.tar.gz",
15014
+ archive: "https://static.devin.ai/cli/3000.6.14/devin-3000.6.14-x86_64-unknown-linux.tar.gz",
15007
15015
  cmd: "./bin/devin",
15008
15016
  args: [
15009
15017
  "acp"
15010
15018
  ]
15011
15019
  },
15012
15020
  "windows-aarch64": {
15013
- archive: "https://static.devin.ai/cli/3000.6.7/devin-3000.6.7-aarch64-pc-windows.zip",
15021
+ archive: "https://static.devin.ai/cli/3000.6.14/devin-3000.6.14-aarch64-pc-windows.zip",
15014
15022
  cmd: "./bin\\devin.exe",
15015
15023
  args: [
15016
15024
  "acp"
15017
15025
  ]
15018
15026
  },
15019
15027
  "windows-x86_64": {
15020
- archive: "https://static.devin.ai/cli/3000.6.7/devin-3000.6.7-x86_64-pc-windows.zip",
15028
+ archive: "https://static.devin.ai/cli/3000.6.14/devin-3000.6.14-x86_64-pc-windows.zip",
15021
15029
  cmd: "./bin\\devin.exe",
15022
15030
  args: [
15023
15031
  "acp"
@@ -15029,12 +15037,12 @@ Requirements:
15029
15037
  {
15030
15038
  id: "dimcode",
15031
15039
  name: "DimCode",
15032
- version: "0.3.22",
15040
+ version: "0.3.28",
15033
15041
  description: "A coding agent that puts leading models at your command.",
15034
15042
  icon: "https://cdn.agentclientprotocol.com/registry/v1/latest/dimcode.svg",
15035
15043
  distribution: {
15036
15044
  npx: {
15037
- package: "dimcode@0.3.22",
15045
+ package: "dimcode@0.3.28",
15038
15046
  args: [
15039
15047
  "acp"
15040
15048
  ]
@@ -15044,12 +15052,12 @@ Requirements:
15044
15052
  {
15045
15053
  id: "dirac",
15046
15054
  name: "Dirac",
15047
- version: "0.5.2",
15055
+ version: "0.5.6",
15048
15056
  description: "Reduces API costs by more than 50%, produces better and faster work. Uses Hash anchored parallel edits, AST manipulation and a whole lot of neat optimizations. Fully Open Source.",
15049
15057
  icon: "https://cdn.agentclientprotocol.com/registry/v1/latest/dirac.svg",
15050
15058
  distribution: {
15051
15059
  npx: {
15052
- package: "dirac-cli@0.5.2",
15060
+ package: "dirac-cli@0.5.6",
15053
15061
  args: [
15054
15062
  "--acp"
15055
15063
  ]
@@ -15059,12 +15067,12 @@ Requirements:
15059
15067
  {
15060
15068
  id: "factory-droid",
15061
15069
  name: "Factory Droid",
15062
- version: "0.208.2",
15070
+ version: "0.211.0",
15063
15071
  description: "Factory Droid - AI coding agent powered by Factory AI",
15064
15072
  icon: "https://cdn.agentclientprotocol.com/registry/v1/latest/factory-droid.svg",
15065
15073
  distribution: {
15066
15074
  npx: {
15067
- package: "droid@0.208.2",
15075
+ package: "droid@0.211.0",
15068
15076
  args: [
15069
15077
  "exec",
15070
15078
  "--output-format",
@@ -15098,12 +15106,12 @@ Requirements:
15098
15106
  {
15099
15107
  id: "gemini",
15100
15108
  name: "Gemini CLI",
15101
- version: "0.57.0",
15109
+ version: "0.58.0",
15102
15110
  description: "Google's official CLI for Gemini",
15103
15111
  icon: "https://cdn.agentclientprotocol.com/registry/v1/latest/gemini.svg",
15104
15112
  distribution: {
15105
15113
  npx: {
15106
- package: "@google/gemini-cli@0.57.0",
15114
+ package: "@google/gemini-cli@0.58.0",
15107
15115
  args: [
15108
15116
  "--acp"
15109
15117
  ]
@@ -15128,19 +15136,19 @@ Requirements:
15128
15136
  {
15129
15137
  id: "glm-acp-agent",
15130
15138
  name: "GLM Agent",
15131
- version: "1.7.0",
15139
+ version: "1.8.0",
15132
15140
  description: "ACP agent powered by Zhipu AI's GLM Coding Plan models (glm-5.1, glm-5-turbo, glm-4.7, glm-4.5-air). Supports streaming, tool calls, mid-session model switching, image input via Z.AI Coding Plan Vision MCP, and session load/fork/resume with on-disk persistence.",
15133
15141
  icon: "https://cdn.agentclientprotocol.com/registry/v1/latest/glm-acp-agent.svg",
15134
15142
  distribution: {
15135
15143
  npx: {
15136
- package: "glm-acp-agent@1.7.0"
15144
+ package: "glm-acp-agent@1.8.0"
15137
15145
  }
15138
15146
  }
15139
15147
  },
15140
15148
  {
15141
15149
  id: "goose",
15142
15150
  name: "goose",
15143
- version: "1.48.0",
15151
+ version: "1.49.0",
15144
15152
  description: "A local, extensible, open source AI agent that automates engineering tasks",
15145
15153
  icon: "https://cdn.agentclientprotocol.com/registry/v1/latest/goose.svg",
15146
15154
  distribution: {
@@ -15158,13 +15166,13 @@ Requirements:
15158
15166
  {
15159
15167
  id: "harn",
15160
15168
  name: "Harn",
15161
- version: "0.10.124",
15169
+ version: "0.10.128",
15162
15170
  description: "Harn runs .harn agent pipelines as a native ACP coding agent over stdio.",
15163
15171
  icon: "https://cdn.agentclientprotocol.com/registry/v1/latest/harn.svg",
15164
15172
  distribution: {
15165
15173
  binary: {
15166
15174
  "darwin-aarch64": {
15167
- archive: "https://github.com/burin-labs/harn/releases/download/v0.10.124/harn-aarch64-apple-darwin.tar.gz",
15175
+ archive: "https://github.com/burin-labs/harn/releases/download/v0.10.128/harn-aarch64-apple-darwin.tar.gz",
15168
15176
  cmd: "./harn",
15169
15177
  args: [
15170
15178
  "serve",
@@ -15172,7 +15180,7 @@ Requirements:
15172
15180
  ]
15173
15181
  },
15174
15182
  "darwin-x86_64": {
15175
- archive: "https://github.com/burin-labs/harn/releases/download/v0.10.124/harn-x86_64-apple-darwin.tar.gz",
15183
+ archive: "https://github.com/burin-labs/harn/releases/download/v0.10.128/harn-x86_64-apple-darwin.tar.gz",
15176
15184
  cmd: "./harn",
15177
15185
  args: [
15178
15186
  "serve",
@@ -15180,7 +15188,7 @@ Requirements:
15180
15188
  ]
15181
15189
  },
15182
15190
  "linux-aarch64": {
15183
- archive: "https://github.com/burin-labs/harn/releases/download/v0.10.124/harn-aarch64-unknown-linux-gnu.tar.gz",
15191
+ archive: "https://github.com/burin-labs/harn/releases/download/v0.10.128/harn-aarch64-unknown-linux-gnu.tar.gz",
15184
15192
  cmd: "./harn",
15185
15193
  args: [
15186
15194
  "serve",
@@ -15188,7 +15196,7 @@ Requirements:
15188
15196
  ]
15189
15197
  },
15190
15198
  "linux-x86_64": {
15191
- archive: "https://github.com/burin-labs/harn/releases/download/v0.10.124/harn-x86_64-unknown-linux-gnu.tar.gz",
15199
+ archive: "https://github.com/burin-labs/harn/releases/download/v0.10.128/harn-x86_64-unknown-linux-gnu.tar.gz",
15192
15200
  cmd: "./harn",
15193
15201
  args: [
15194
15202
  "serve",
@@ -15196,7 +15204,7 @@ Requirements:
15196
15204
  ]
15197
15205
  },
15198
15206
  "windows-x86_64": {
15199
- archive: "https://github.com/burin-labs/harn/releases/download/v0.10.124/harn-x86_64-pc-windows-msvc.zip",
15207
+ archive: "https://github.com/burin-labs/harn/releases/download/v0.10.128/harn-x86_64-pc-windows-msvc.zip",
15200
15208
  cmd: "harn.exe",
15201
15209
  args: [
15202
15210
  "serve",
@@ -15209,7 +15217,7 @@ Requirements:
15209
15217
  {
15210
15218
  id: "junie",
15211
15219
  name: "Junie",
15212
- version: "3032.2.0",
15220
+ version: "3123.3.0",
15213
15221
  description: "AI Coding Agent by JetBrains",
15214
15222
  icon: "https://cdn.agentclientprotocol.com/registry/v1/latest/junie.svg",
15215
15223
  distribution: {
@@ -15227,47 +15235,47 @@ Requirements:
15227
15235
  {
15228
15236
  id: "kilo",
15229
15237
  name: "Kilo",
15230
- version: "7.5.6",
15238
+ version: "7.5.9",
15231
15239
  description: "The open source coding agent",
15232
15240
  icon: "https://cdn.agentclientprotocol.com/registry/v1/latest/kilo.svg",
15233
15241
  distribution: {
15234
15242
  npx: {
15235
- package: "@kilocode/cli@7.5.6",
15243
+ package: "@kilocode/cli@7.5.9",
15236
15244
  args: [
15237
15245
  "acp"
15238
15246
  ]
15239
15247
  },
15240
15248
  binary: {
15241
15249
  "darwin-aarch64": {
15242
- archive: "https://github.com/Kilo-Org/kilocode/releases/download/v7.5.6/kilo-darwin-arm64.zip",
15250
+ archive: "https://github.com/Kilo-Org/kilocode/releases/download/v7.5.9/kilo-darwin-arm64.zip",
15243
15251
  cmd: "./kilo",
15244
15252
  args: [
15245
15253
  "acp"
15246
15254
  ]
15247
15255
  },
15248
15256
  "darwin-x86_64": {
15249
- archive: "https://github.com/Kilo-Org/kilocode/releases/download/v7.5.6/kilo-darwin-x64.zip",
15257
+ archive: "https://github.com/Kilo-Org/kilocode/releases/download/v7.5.9/kilo-darwin-x64.zip",
15250
15258
  cmd: "./kilo",
15251
15259
  args: [
15252
15260
  "acp"
15253
15261
  ]
15254
15262
  },
15255
15263
  "linux-aarch64": {
15256
- archive: "https://github.com/Kilo-Org/kilocode/releases/download/v7.5.6/kilo-linux-arm64.tar.gz",
15264
+ archive: "https://github.com/Kilo-Org/kilocode/releases/download/v7.5.9/kilo-linux-arm64.tar.gz",
15257
15265
  cmd: "./kilo",
15258
15266
  args: [
15259
15267
  "acp"
15260
15268
  ]
15261
15269
  },
15262
15270
  "linux-x86_64": {
15263
- archive: "https://github.com/Kilo-Org/kilocode/releases/download/v7.5.6/kilo-linux-x64.tar.gz",
15271
+ archive: "https://github.com/Kilo-Org/kilocode/releases/download/v7.5.9/kilo-linux-x64.tar.gz",
15264
15272
  cmd: "./kilo",
15265
15273
  args: [
15266
15274
  "acp"
15267
15275
  ]
15268
15276
  },
15269
15277
  "windows-x86_64": {
15270
- archive: "https://github.com/Kilo-Org/kilocode/releases/download/v7.5.6/kilo-windows-x64.zip",
15278
+ archive: "https://github.com/Kilo-Org/kilocode/releases/download/v7.5.9/kilo-windows-x64.zip",
15271
15279
  cmd: "./kilo.exe",
15272
15280
  args: [
15273
15281
  "acp"
@@ -15279,7 +15287,7 @@ Requirements:
15279
15287
  {
15280
15288
  id: "kimi",
15281
15289
  name: "Kimi CLI",
15282
- version: "1.49.0",
15290
+ version: "1.50.0",
15283
15291
  description: "Moonshot AI's coding assistant",
15284
15292
  icon: "https://cdn.agentclientprotocol.com/registry/v1/latest/kimi.svg",
15285
15293
  distribution: {
@@ -15364,7 +15372,7 @@ Requirements:
15364
15372
  {
15365
15373
  id: "opencode",
15366
15374
  name: "OpenCode",
15367
- version: "1.18.25",
15375
+ version: "1.18.27",
15368
15376
  description: "The open source coding agent",
15369
15377
  icon: "https://cdn.agentclientprotocol.com/registry/v1/latest/opencode.svg",
15370
15378
  distribution: {
@@ -15462,12 +15470,12 @@ Requirements:
15462
15470
  {
15463
15471
  id: "qwen-code",
15464
15472
  name: "Qwen Code",
15465
- version: "0.22.3",
15473
+ version: "0.23.0",
15466
15474
  description: "Alibaba's Qwen coding assistant",
15467
15475
  icon: "https://cdn.agentclientprotocol.com/registry/v1/latest/qwen-code.svg",
15468
15476
  distribution: {
15469
15477
  npx: {
15470
- package: "@qwen-code/qwen-code@0.22.3",
15478
+ package: "@qwen-code/qwen-code@0.23.0",
15471
15479
  args: [
15472
15480
  "--acp",
15473
15481
  "--experimental-skills"
@@ -23346,13 +23354,12 @@ ${context2.authorReply.trim()}
23346
23354
  ...right2
23347
23355
  ];
23348
23356
  };
23349
- const isBenchmarkingIpv4 = ([first2, second]) => first2 === 198 && (second === 18 || second === 19);
23350
23357
  const classifyIpv4 = (octets) => {
23351
23358
  const [first2, second, third, fourth] = octets;
23352
23359
  if (first2 === 127) return "loopback";
23353
23360
  if (first2 === 10 || first2 === 172 && second >= 16 && second <= 31) return "private-lan";
23354
23361
  if (first2 === 192 && second === 168) return "private-lan";
23355
- const prohibited = first2 === 0 || first2 >= 224 || first2 === 100 && second >= 64 && second <= 127 || first2 === 169 && second === 254 || first2 === 192 && second === 0 && third === 0 || first2 === 192 && second === 0 && third === 2 || isBenchmarkingIpv4(octets) || first2 === 198 && second === 51 && third === 100 || first2 === 203 && second === 0 && third === 113 || first2 === 255 && second === 255 && third === 255 && fourth === 255;
23362
+ const prohibited = first2 === 0 || first2 >= 224 || first2 === 100 && second >= 64 && second <= 127 || first2 === 169 && second === 254 || first2 === 192 && second === 0 && third === 0 || first2 === 192 && second === 0 && third === 2 || first2 === 198 && (second === 18 || second === 19) || first2 === 198 && second === 51 && third === 100 || first2 === 203 && second === 0 && third === 113 || first2 === 255 && second === 255 && third === 255 && fourth === 255;
23356
23363
  return prohibited ? "prohibited" : "public";
23357
23364
  };
23358
23365
  const mappedIpv4 = (segments) => {
@@ -23397,6 +23404,15 @@ ${context2.authorReply.trim()}
23397
23404
  plainTextBytes: 64 * 1024,
23398
23405
  maxCompressedBytes: 1024 * 1024
23399
23406
  };
23407
+ const FILE_PREVIEW_LOCAL_IPC_RESPONSE_LIMIT_BYTES = 16 * 1024 * 1024;
23408
+ const FILE_PREVIEW_LOCAL_ENVELOPE_BYTES = 64 * 1024;
23409
+ const FILE_PREVIEW_LOCAL_PAYLOAD_BUDGET_BYTES = FILE_PREVIEW_LOCAL_IPC_RESPONSE_LIMIT_BYTES - FILE_PREVIEW_LOCAL_ENVELOPE_BYTES;
23410
+ const FILE_PREVIEW_V3_LOCAL_LIMITS = {
23411
+ maxTextBytes: FILE_PREVIEW_LOCAL_PAYLOAD_BUDGET_BYTES,
23412
+ maxBinaryBytes: Math.floor(FILE_PREVIEW_LOCAL_PAYLOAD_BUDGET_BYTES * 3 / 4),
23413
+ plainTextBytes: FILE_PREVIEW_LOCAL_PAYLOAD_BUDGET_BYTES,
23414
+ maxCompressedBytes: FILE_PREVIEW_LOCAL_PAYLOAD_BUDGET_BYTES
23415
+ };
23400
23416
  const FilePreviewV3DigestSchema = string$1().regex(/^sha256:[0-9a-f]{64}$/u);
23401
23417
  const FilePreviewV3TextFormatSchema = object$1({
23402
23418
  bom: boolean().optional(),
@@ -104783,7 +104799,7 @@ ${value}`;
104783
104799
  await this.machine.init();
104784
104800
  }
104785
104801
  options.signal?.throwIfAborted();
104786
- await this.machine.updateAcpCapabilities(configId, cliType, agentType, modes, models, configOptions, availableCommands, sessionFork, sourceVersion, modelReasoningEfforts, acknowledgedSteer, options);
104802
+ return await this.machine.updateAcpCapabilities(configId, cliType, agentType, modes, models, configOptions, availableCommands, sessionFork, sourceVersion, modelReasoningEfforts, acknowledgedSteer, options);
104787
104803
  }
104788
104804
  async getAcpCapabilities(machineId, configId) {
104789
104805
  if (!this.machine) {
@@ -105962,6 +105978,7 @@ ${value}`;
105962
105978
  modes: entry.modes,
105963
105979
  models: entry.models,
105964
105980
  configOptions: entry.configOptions,
105981
+ modelReasoningEfforts: entry.modelReasoningEfforts,
105965
105982
  availableCommands: entry.availableCommands,
105966
105983
  sessionFork: entry.sessionFork,
105967
105984
  acknowledgedSteer: entry.acknowledgedSteer,
@@ -106057,7 +106074,7 @@ ${value}`;
106057
106074
  ]
106058
106075
  }))[capabilityKey];
106059
106076
  if (existing && serializeAcpCapabilityWithoutFetchTime(existing) === serializeAcpCapabilityWithoutFetchTime(entry)) {
106060
- return;
106077
+ return existing;
106061
106078
  }
106062
106079
  options.signal?.throwIfAborted();
106063
106080
  const changed = writeMachineFlockRowToFlock(handle.flock, {
@@ -106072,6 +106089,7 @@ ${value}`;
106072
106089
  await handle.syncOnce().catch(() => void 0);
106073
106090
  }
106074
106091
  }
106092
+ return entry;
106075
106093
  }
106076
106094
  async getAcpCapabilities(configId) {
106077
106095
  const key2 = getAcpCapabilityCacheKey(configId);
@@ -106478,10 +106496,7 @@ ${value}`;
106478
106496
  "browser_address",
106479
106497
  "share_action"
106480
106498
  ]),
106481
- targetClass: _enum$1([
106482
- "loopback",
106483
- "private_lan"
106484
- ]),
106499
+ targetClass: literal$1("loopback"),
106485
106500
  target: PreviewTargetSchema,
106486
106501
  confirmedByUserId: string$1().trim().min(1),
106487
106502
  confirmedAt: number$4().int().nonnegative()
@@ -126155,9 +126170,9 @@ ${error2.message}` : execaMessage;
126155
126170
  highWaterMark
126156
126171
  }));
126157
126172
  }
126158
- const version$7 = "1.6.2";
126173
+ const version$7 = "1.10.0";
126159
126174
  const dependencies$1 = {
126160
- "@openai/codex": "^0.151.0"
126175
+ "@openai/codex": "^0.153.4"
126161
126176
  };
126162
126177
  const codexPackageJson = {
126163
126178
  version: version$7,
@@ -126267,37 +126282,37 @@ ${error2.message}` : execaMessage;
126267
126282
  version: version$3,
126268
126283
  artifacts: artifacts$1
126269
126284
  };
126270
- const version$2 = "0.151.0";
126285
+ const version$2 = "0.153.4";
126271
126286
  const artifacts = {
126272
126287
  "darwin-arm64": {
126273
126288
  "fileName": "codex-package-aarch64-apple-darwin.tar.zst",
126274
- "sha256": "c7414e579bb36eba0c8f6cb45fe0ce4cd2724deeb0c3ec3a08c1babfb59ec6e6",
126275
- "size": 84213361
126289
+ "sha256": "be8a1a895533664ba6f2f11bc30ac8dae3b8ce37a152684229148ad9a8c7d269",
126290
+ "size": 80691565
126276
126291
  },
126277
126292
  "darwin-x64": {
126278
126293
  "fileName": "codex-package-x86_64-apple-darwin.tar.zst",
126279
- "sha256": "41cd66b0ba1279213d2d1e17fef0fc30421e524406cb5954d84d568688c8b118",
126280
- "size": 92568101
126294
+ "sha256": "a673331d8a21023dca1ca66443c1a41421a3105e587339ea7f81a06a56d8dd9b",
126295
+ "size": 88316449
126281
126296
  },
126282
126297
  "linux-arm64": {
126283
126298
  "fileName": "codex-package-aarch64-unknown-linux-musl.tar.zst",
126284
- "sha256": "3ae57da8bc5f8fd065f0352cc14cb10e02be779186bdac989ad0e2622d8cacbb",
126285
- "size": 89411447
126299
+ "sha256": "01ce0d1c38aca1ccc0c67f7612160cef5d820b452e1093d3a6d28597bfebfdb6",
126300
+ "size": 85851511
126286
126301
  },
126287
126302
  "linux-x64": {
126288
126303
  "fileName": "codex-package-x86_64-unknown-linux-musl.tar.zst",
126289
- "sha256": "e2dbacd77547f2d3afb3b1864f92926d936c12d8b822bbac98a766d943656494",
126290
- "size": 95540316
126304
+ "sha256": "2b5c00df5758d014c79910fdffed43f29a6cae73f37e92d5ec216543ca53e79e",
126305
+ "size": 92109110
126291
126306
  },
126292
126307
  "win32-arm64": {
126293
126308
  "fileName": "codex-package-aarch64-pc-windows-msvc.tar.zst",
126294
- "sha256": "bfd73f646fe3c3335049617e35a85e04ecf42609fc591e2b4a246e312fd41cfd",
126295
- "size": 98552597
126309
+ "sha256": "92ff19d1012c1934bb1f9c10bfe15ac9f0af308d2de15b91dfc0f59faf8a77ba",
126310
+ "size": 94420871
126296
126311
  },
126297
126312
  "win32-x64": {
126298
126313
  "fileName": "codex-package-x86_64-pc-windows-msvc.tar.zst",
126299
- "sha256": "02338bb9b9c9d991fed3d0446cfcb4d54ce9a271e70097e9f4c1e099ba304f3c",
126300
- "size": 106201360
126314
+ "sha256": "f06e52c803cb74fb5fe6d42dc0c3c53ecbbf6822ad0c9d0239a0304165209f29",
126315
+ "size": 102002466
126301
126316
  }
126302
126317
  };
126303
126318
  const codexRuntimeManifestJson = {
@@ -127679,7 +127694,8 @@ ${error2.message}` : execaMessage;
127679
127694
  return managedRuntimeVersion ? `builtin-grok-acp:${GROK_ACP_ADAPTER_VERSION}+official-grok:${managedRuntimeVersion}` : `${BUILTIN_GROK_CAPABILITY_SOURCE_VERSION}${runtimeOverrideSuffix}`;
127680
127695
  }
127681
127696
  if (input2.agentType === "deepseek") {
127682
- return DEEPSEEK_HARNESS_CAPABILITY_SOURCE_VERSION;
127697
+ const baseUrl = input2.env?.[DEEPSEEK_HARNESS_BASE_URL_ENV];
127698
+ return baseUrl?.trim() ? `${DEEPSEEK_HARNESS_CAPABILITY_SOURCE_VERSION}+endpoint:${createHash("sha256").update(baseUrl).digest("hex").slice(0, 12)}` : DEEPSEEK_HARNESS_CAPABILITY_SOURCE_VERSION;
127683
127699
  }
127684
127700
  }
127685
127701
  return `builtin:${input2.agentType}:unknown`;
@@ -129202,6 +129218,7 @@ ${fallbackStderrTail}` : errorMessage2;
129202
129218
  agentType: options.agentType,
129203
129219
  customAcp: options.customAcp,
129204
129220
  runtimeOverrides: options.runtimeOverrides,
129221
+ env: options.env,
129205
129222
  extraArgs: options.extraArgs,
129206
129223
  onManagedRuntimeProgress: options.onManagedRuntimeProgress ? (event) => {
129207
129224
  if (!options.signal?.aborted) {
@@ -137672,7 +137689,8 @@ The postId is ${normalizedFeedbackPostId}. Use the feedback-progress-reporter sk
137672
137689
  cliType: config2.agentCliType,
137673
137690
  agentType: config2.agentType,
137674
137691
  customAcp: config2.customAcp,
137675
- runtimeOverrides: config2.runtimeOverrides
137692
+ runtimeOverrides: config2.runtimeOverrides,
137693
+ env: config2.env
137676
137694
  });
137677
137695
  const existing = await this.deps.workspaceDocument.getAcpCapabilities(this.deps.machineId, agentConfigId);
137678
137696
  const availableCommands = capabilities.availableCommands !== void 0 ? capabilities.availableCommands : existing?.sourceVersion === sourceVersion ? existing.availableCommands : void 0;
@@ -137927,11 +137945,12 @@ The postId is ${normalizedFeedbackPostId}. Use the feedback-progress-reporter sk
137927
137945
  }
137928
137946
  });
137929
137947
  options.signal?.throwIfAborted();
137930
- await this.deps.workspaceDocument.updateAcpCapabilities(this.deps.machineId, message.configId, message.cliType, message.agentType, modes, models, configOptions, availableCommands, sessionFork, capabilitySourceVersion ?? getAcpCapabilitySourceVersion({
137948
+ const capability = await this.deps.workspaceDocument.updateAcpCapabilities(this.deps.machineId, message.configId, message.cliType, message.agentType, modes, models, configOptions, availableCommands, sessionFork, capabilitySourceVersion ?? getAcpCapabilitySourceVersion({
137931
137949
  cliType: message.cliType,
137932
137950
  agentType: message.agentType,
137933
137951
  customAcp: message.customAcp,
137934
- runtimeOverrides: message.runtimeOverrides
137952
+ runtimeOverrides: message.runtimeOverrides,
137953
+ env: message.env
137935
137954
  }), modelReasoningEfforts, acknowledgedSteer, {
137936
137955
  signal: options.signal
137937
137956
  });
@@ -137950,6 +137969,7 @@ The postId is ${normalizedFeedbackPostId}. Use the feedback-progress-reporter sk
137950
137969
  category: opt.category,
137951
137970
  optionCount: opt.options.length
137952
137971
  })),
137972
+ capability,
137953
137973
  availableCommands
137954
137974
  };
137955
137975
  } catch (error2) {
@@ -149909,6 +149929,11 @@ The postId is ${normalizedFeedbackPostId}. Use the feedback-progress-reporter sk
149909
149929
  }
149910
149930
  }
149911
149931
  const PRICE_DATA = {
149932
+ "gpt-6-astra": {
149933
+ inputCostPerToken: 1e-5,
149934
+ cacheReadInputTokenCost: 1e-6,
149935
+ outputCostPerToken: 5e-5
149936
+ },
149912
149937
  "gpt-5.6": {
149913
149938
  inputCostPerToken: 5e-6,
149914
149939
  cacheReadInputTokenCost: 5e-7,
@@ -161051,6 +161076,10 @@ ${entry.text}`).join("\n\n");
161051
161076
  }
161052
161077
  limits;
161053
161078
  async previewFile(request2, options = {}) {
161079
+ const limits = options.sameMachine ? {
161080
+ ...FILE_PREVIEW_V3_LOCAL_LIMITS,
161081
+ ...this.deps.limits
161082
+ } : this.limits;
161054
161083
  const workspace = await this.deps.resolveWorkspace(request2.sessionId);
161055
161084
  if (!workspace.ok) {
161056
161085
  return filePreviewV3Error(workspace.code, {
@@ -161081,7 +161110,7 @@ ${entry.text}`).join("\n\n");
161081
161110
  }
161082
161111
  const resolved = resolution.resolved;
161083
161112
  const isImageByName = isBinaryImagePath(resolved.reportedPath);
161084
- const limitBytes = Math.min(isImageByName ? this.limits.maxBinaryBytes : this.limits.maxTextBytes, request2.maxBytes ?? Number.MAX_SAFE_INTEGER);
161113
+ const limitBytes = Math.min(isImageByName ? limits.maxBinaryBytes : limits.maxTextBytes, request2.maxBytes ?? Number.MAX_SAFE_INTEGER);
161085
161114
  if (resolved.sizeBytes > limitBytes) {
161086
161115
  return filePreviewV3Error("too_large", {
161087
161116
  message: "File is too large to preview.",
@@ -161134,23 +161163,32 @@ ${entry.text}`).join("\n\n");
161134
161163
  };
161135
161164
  }
161136
161165
  if (isImageByName || hasBinaryNul(bytes)) {
161137
- return this.binaryOk(resolved, bytes, digest);
161166
+ return this.binaryOk(resolved, bytes, digest, limits, options.sameMachine === true);
161138
161167
  }
161139
161168
  let text;
161140
161169
  try {
161141
161170
  text = decodeUtf8(bytes);
161142
161171
  } catch {
161143
- return this.binaryOk(resolved, bytes, digest);
161172
+ return this.binaryOk(resolved, bytes, digest, limits, options.sameMachine === true);
161144
161173
  }
161145
161174
  let content;
161146
161175
  try {
161147
- content = await this.encodeTextContent(bytes, text);
161176
+ content = await this.encodeTextContent(bytes, text, limits);
161148
161177
  } catch (error2) {
161149
161178
  return filePreviewV3Error("too_large", {
161150
161179
  message: formatErrorMessage(error2),
161151
161180
  path: resolved.reportedPath,
161152
161181
  sizeBytes: bytes.byteLength,
161153
- limitBytes: this.limits.maxCompressedBytes
161182
+ limitBytes: limits.maxCompressedBytes
161183
+ });
161184
+ }
161185
+ const payloadOverflow = options.sameMachine ? measurePayloadOverflow(content, FILE_PREVIEW_LOCAL_PAYLOAD_BUDGET_BYTES) : null;
161186
+ if (payloadOverflow !== null) {
161187
+ return filePreviewV3Error("too_large", {
161188
+ message: "File is too large to preview.",
161189
+ path: resolved.reportedPath,
161190
+ sizeBytes: bytes.byteLength,
161191
+ limitBytes: FILE_PREVIEW_LOCAL_PAYLOAD_BUDGET_BYTES
161154
161192
  });
161155
161193
  }
161156
161194
  return {
@@ -161168,13 +161206,22 @@ ${entry.text}`).join("\n\n");
161168
161206
  readonly: true
161169
161207
  };
161170
161208
  }
161171
- binaryOk(resolved, bytes, digest) {
161172
- if (bytes.byteLength > this.limits.maxBinaryBytes) {
161209
+ binaryOk(resolved, bytes, digest, limits, sameMachine) {
161210
+ if (bytes.byteLength > limits.maxBinaryBytes) {
161173
161211
  return filePreviewV3Error("too_large", {
161174
161212
  message: "Binary file is too large to preview.",
161175
161213
  path: resolved.reportedPath,
161176
161214
  sizeBytes: bytes.byteLength,
161177
- limitBytes: this.limits.maxBinaryBytes
161215
+ limitBytes: limits.maxBinaryBytes
161216
+ });
161217
+ }
161218
+ const data = Buffer.from(bytes).toString("base64");
161219
+ if (sameMachine && data.length > FILE_PREVIEW_LOCAL_PAYLOAD_BUDGET_BYTES) {
161220
+ return filePreviewV3Error("too_large", {
161221
+ message: "Binary file is too large to preview.",
161222
+ path: resolved.reportedPath,
161223
+ sizeBytes: bytes.byteLength,
161224
+ limitBytes: FILE_PREVIEW_LOCAL_PAYLOAD_BUDGET_BYTES
161178
161225
  });
161179
161226
  }
161180
161227
  const mimeType = getImageMimeTypeForPath(resolved.reportedPath);
@@ -161189,7 +161236,7 @@ ${entry.text}`).join("\n\n");
161189
161236
  kind: "binary",
161190
161237
  content: {
161191
161238
  encoding: "base64",
161192
- data: Buffer.from(bytes).toString("base64"),
161239
+ data,
161193
161240
  rawBytes: bytes.byteLength
161194
161241
  },
161195
161242
  mimeType: mimeType ?? "application/octet-stream",
@@ -161197,8 +161244,8 @@ ${entry.text}`).join("\n\n");
161197
161244
  readonly: true
161198
161245
  };
161199
161246
  }
161200
- async encodeTextContent(bytes, text) {
161201
- if (bytes.byteLength <= this.limits.plainTextBytes) {
161247
+ async encodeTextContent(bytes, text, limits) {
161248
+ if (bytes.byteLength <= limits.plainTextBytes) {
161202
161249
  return {
161203
161250
  encoding: "utf8-plain",
161204
161251
  text,
@@ -161206,8 +161253,8 @@ ${entry.text}`).join("\n\n");
161206
161253
  };
161207
161254
  }
161208
161255
  const compressed = await gzipAsync(bytes);
161209
- if (compressed.byteLength > this.limits.maxCompressedBytes) {
161210
- throw new Error(`Compressed preview payload exceeds ${this.limits.maxCompressedBytes} bytes.`);
161256
+ if (compressed.byteLength > limits.maxCompressedBytes) {
161257
+ throw new Error(`Compressed preview payload exceeds ${limits.maxCompressedBytes} bytes.`);
161211
161258
  }
161212
161259
  return {
161213
161260
  encoding: "utf8-gzip-base64",
@@ -161217,6 +161264,10 @@ ${entry.text}`).join("\n\n");
161217
161264
  };
161218
161265
  }
161219
161266
  }
161267
+ function measurePayloadOverflow(content, budgetBytes) {
161268
+ const encodedBytes = content.encoding === "utf8-plain" ? Buffer.byteLength(JSON.stringify(content.text), "utf8") : content.data.length;
161269
+ return encodedBytes > budgetBytes ? encodedBytes - budgetBytes : null;
161270
+ }
161220
161271
  async function readFileWithinLimit(absolutePath, limitBytes) {
161221
161272
  const handle = await open(absolutePath, "r");
161222
161273
  try {
@@ -162435,10 +162486,22 @@ ${entry.text}`).join("\n\n");
162435
162486
  try {
162436
162487
  const stat2 = fs__default$1.fstatSync(fd);
162437
162488
  if (!stat2.isFile()) return null;
162438
- const buffer2 = Buffer.alloc(maxBytes + 1);
162439
- const bytesRead = fs__default$1.readSync(fd, buffer2, 0, maxBytes + 1, 0);
162489
+ const readLimit = maxBytes + 1;
162490
+ let buffer2 = Buffer.alloc(Math.max(1, Math.min(readLimit, stat2.size + 1)));
162491
+ let bytesRead = 0;
162492
+ for (; ; ) {
162493
+ if (bytesRead >= readLimit) break;
162494
+ if (bytesRead === buffer2.length) {
162495
+ const grown = Buffer.alloc(Math.min(readLimit, buffer2.length * 2));
162496
+ buffer2.copy(grown, 0, 0, bytesRead);
162497
+ buffer2 = grown;
162498
+ }
162499
+ const read = fs__default$1.readSync(fd, buffer2, bytesRead, buffer2.length - bytesRead, bytesRead);
162500
+ if (read === 0) break;
162501
+ bytesRead += read;
162502
+ }
162440
162503
  const truncated = bytesRead > maxBytes;
162441
- const safeBytes = truncated ? maxBytes : bytesRead;
162504
+ const safeBytes = Math.min(bytesRead, maxBytes);
162442
162505
  const resolvedRelativePath = toProjectRelativePath(rootRealPath, targetRealPath);
162443
162506
  if (allowBinary && isBinaryImagePath(resolvedRelativePath)) {
162444
162507
  return {
@@ -165535,7 +165598,7 @@ ${escapeHtmlScriptContent(VISUAL_ANNOTATION_INSPECTOR_BROWSER_SCRIPT)}
165535
165598
  }
165536
165599
  return trimmed2;
165537
165600
  };
165538
- const normalizeTarget = (target, policy) => {
165601
+ const normalizeTarget = (target) => {
165539
165602
  if (target.protocol !== "http" && target.protocol !== "https") {
165540
165603
  return {
165541
165604
  code: "invalid_protocol",
@@ -165559,24 +165622,17 @@ ${escapeHtmlScriptContent(VISUAL_ANNOTATION_INSPECTOR_BROWSER_SCRIPT)}
165559
165622
  retryable: false
165560
165623
  };
165561
165624
  }
165562
- if (policy === "agent-candidate" && targetClass !== "loopback") {
165625
+ if (targetClass !== "loopback") {
165563
165626
  return {
165564
165627
  code: "host_not_loopback",
165565
165628
  message: `Preview target host must be loopback, got ${target.host}.`,
165566
165629
  retryable: false
165567
165630
  };
165568
165631
  }
165569
- if (policy === "user-approved" && targetClass !== "loopback" && targetClass !== "private-lan") {
165632
+ if (host !== "localhost" && require$$0$9.isIP(host) === 0) {
165570
165633
  return {
165571
- code: "host_not_private",
165572
- message: `Managed preview only accepts loopback or private LAN targets, got ${target.host}.`,
165573
- retryable: false
165574
- };
165575
- }
165576
- if (policy === "user-approved" && targetClass === "private-lan" && require$$0$9.isIP(host) === 0) {
165577
- return {
165578
- code: "target_resolution_failed",
165579
- message: "Private LAN hostnames are not supported yet. Enter the target IP address.",
165634
+ code: "host_not_loopback",
165635
+ message: `Preview target host must be a loopback address or "localhost", got ${target.host}.`,
165580
165636
  retryable: false
165581
165637
  };
165582
165638
  }
@@ -165759,7 +165815,7 @@ ${escapeHtmlScriptContent(VISUAL_ANNOTATION_INSPECTOR_BROWSER_SCRIPT)}
165759
165815
  };
165760
165816
  }
165761
165817
  const session2 = await this.getSessionMeta(request2.sessionId);
165762
- const normalized = normalizeTarget(request2.target, "agent-candidate");
165818
+ const normalized = normalizeTarget(request2.target);
165763
165819
  const now2 = this.now();
165764
165820
  const baseCandidate = {
165765
165821
  status: "invalid",
@@ -165847,11 +165903,11 @@ ${escapeHtmlScriptContent(VISUAL_ANNOTATION_INSPECTOR_BROWSER_SCRIPT)}
165847
165903
  };
165848
165904
  return this.failCreate(request2.sessionId, failure, now2, request2.target);
165849
165905
  }
165850
- const requestedTarget = normalizeTarget(request2.target, "user-approved");
165906
+ const requestedTarget = normalizeTarget(request2.target);
165851
165907
  if (isValidationFailure(requestedTarget)) {
165852
165908
  return this.failCreate(request2.sessionId, requestedTarget, now2, request2.target);
165853
165909
  }
165854
- const approvedTarget = normalizeTarget(request2.approval.target, "user-approved");
165910
+ const approvedTarget = normalizeTarget(request2.approval.target);
165855
165911
  const actualTargetClass = classifyBrowserHostname(requestedTarget.host);
165856
165912
  const approvedTargetClass = request2.approval.targetClass.replace("_", "-");
165857
165913
  if (isValidationFailure(approvedTarget) || actualTargetClass !== approvedTargetClass || !sameTargetOrigin(approvedTarget, requestedTarget)) {
@@ -165862,7 +165918,7 @@ ${escapeHtmlScriptContent(VISUAL_ANNOTATION_INSPECTOR_BROWSER_SCRIPT)}
165862
165918
  };
165863
165919
  return this.failCreate(request2.sessionId, failure, now2, requestedTarget);
165864
165920
  }
165865
- const validation2 = await this.validateTargetForCreate(requestedTarget, "user-approved");
165921
+ const validation2 = await this.validateTargetForCreate(requestedTarget);
165866
165922
  if ("failure" in validation2) {
165867
165923
  return this.failCreate(request2.sessionId, validation2.failure, now2, requestedTarget);
165868
165924
  }
@@ -166028,7 +166084,7 @@ ${escapeHtmlScriptContent(VISUAL_ANNOTATION_INSPECTOR_BROWSER_SCRIPT)}
166028
166084
  message: "Only the session initiator can open a managed local preview."
166029
166085
  };
166030
166086
  }
166031
- const validation2 = await this.validateTargetForCreate(request2.target, "user-approved");
166087
+ const validation2 = await this.validateTargetForCreate(request2.target);
166032
166088
  if ("failure" in validation2) {
166033
166089
  return {
166034
166090
  type: "session/preview-endpoint-acquire_response",
@@ -166153,8 +166209,8 @@ ${escapeHtmlScriptContent(VISUAL_ANNOTATION_INSPECTOR_BROWSER_SCRIPT)}
166153
166209
  connection: revoked
166154
166210
  };
166155
166211
  }
166156
- async validateTargetForCreate(target, policy) {
166157
- const normalized = normalizeTarget(target, policy);
166212
+ async validateTargetForCreate(target) {
166213
+ const normalized = normalizeTarget(target);
166158
166214
  if (isValidationFailure(normalized)) {
166159
166215
  return {
166160
166216
  failure: normalized
@@ -172589,7 +172645,8 @@ ${escapeHtmlScriptContent(VISUAL_ANNOTATION_INSPECTOR_BROWSER_SCRIPT)}
172589
172645
  case "file/preview-local":
172590
172646
  await assertOwner(request2.params.sessionId);
172591
172647
  return await this.filePreviewService.previewFile(request2.params, {
172592
- allowArbitraryPaths: true
172648
+ allowArbitraryPaths: true,
172649
+ sameMachine: true
172593
172650
  });
172594
172651
  case "session/cancel": {
172595
172652
  const result = await this.executionService.cancelSession({
@@ -184787,7 +184844,8 @@ export PATH=${toSingleQuotedShellString(ghShimBinDir)}:"$PATH"
184787
184844
  cliType: config2.agentCliType,
184788
184845
  agentType: config2.agentType,
184789
184846
  customAcp: config2.customAcp,
184790
- runtimeOverrides: config2.runtimeOverrides
184847
+ runtimeOverrides: config2.runtimeOverrides,
184848
+ env: config2.env
184791
184849
  });
184792
184850
  signal.throwIfAborted();
184793
184851
  const worktreeTarget = this.resolveSessionWorktreeTarget(config2);
@@ -185114,6 +185172,7 @@ export PATH=${toSingleQuotedShellString(ghShimBinDir)}:"$PATH"
185114
185172
  agentType: config2.agentType,
185115
185173
  customAcp: config2.customAcp,
185116
185174
  runtimeOverrides: config2.runtimeOverrides,
185175
+ env: config2.env,
185117
185176
  onManagedRuntimeProgress: (event) => {
185118
185177
  config2.onPresencePhase?.("managed-runtime", formatManagedRuntimeProgressDetail(event));
185119
185178
  if (event.phase === "complete" && !managedRuntimeReadyLogged) {
@@ -222226,7 +222285,7 @@ ${page}${helpTipBottom}${choiceDescription}${ansiEscapes.cursorHide}`;
222226
222285
  data = createReviewBundleSnapshot(bundle);
222227
222286
  }
222228
222287
  const { injectReviewSnapshot } = await import("./chunks/index-VoI6Ds2-.js");
222229
- const { resolveReviewViewerTemplate } = await import("./chunks/review-viewer-CGdWKpLa.js").then(async (m) => {
222288
+ const { resolveReviewViewerTemplate } = await import("./chunks/review-viewer-BxVOWMjT.js").then(async (m) => {
222230
222289
  await m.__tla;
222231
222290
  return m;
222232
222291
  });