lody 0.97.1 → 0.98.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/chunks/{index-5o35kMTc.js → index-DGod--yP.js} +880 -709
- package/dist/chunks/{package-CZY_YQI4.js → package-BdifTDFO.js} +1 -1
- package/dist/chunks/{acp-DCoAUZc7.js → profile-BmD8b-zH.js} +434 -36
- package/dist/chunks/{review-viewer-Bf0L8T_A.js → review-viewer-wpzL1tfQ.js} +4 -5
- package/dist/chunks/{runtime-manifest-DqfOlvSw.js → runtime-manifest-DZsDOOW3.js} +1 -1
- package/dist/claude-acp.js +12689 -7932
- package/dist/codex-acp.js +1 -1
- package/dist/deepseek-acp.js +352 -166
- package/dist/grok-acp.js +236 -32
- package/dist/index.js +540 -243
- package/package.json +1 -1
- package/dist/chunks/profile-DQaC7SJZ.js +0 -430
package/dist/index.js
CHANGED
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
import * as path$1 from "path";
|
|
3
3
|
import path__default$1, { posix, dirname, sep, isAbsolute as isAbsolute$1, relative, parse as parse$4, resolve as resolve$2 } from "path";
|
|
4
4
|
import * as fs$1 from "node:fs";
|
|
5
|
-
import fs__default, { createReadStream, existsSync, createWriteStream, rmSync, readdirSync, readFileSync, mkdirSync as mkdirSync$2, chmodSync, watch, promises as promises$1,
|
|
5
|
+
import fs__default, { createReadStream, existsSync, createWriteStream, realpathSync, rmSync, readdirSync, readFileSync, mkdirSync as mkdirSync$2, chmodSync, watch, promises as promises$1, unlinkSync as unlinkSync$1, accessSync as accessSync$1, constants as constants$9, writeSync } from "node:fs";
|
|
6
6
|
import * as readline$1 from "node:readline";
|
|
7
7
|
import readline__default, { createInterface } from "node:readline";
|
|
8
8
|
import require$$5$4, { AsyncLocalStorage, AsyncResource } from "node:async_hooks";
|
|
@@ -37,7 +37,7 @@ import Qt__default, { readFile, readdir, rm, mkdir as mkdir$1, mkdtemp, chmod, w
|
|
|
37
37
|
import zlib__default, { gzip, gunzip as gunzip$1, gunzipSync, brotliDecompressSync } from "node:zlib";
|
|
38
38
|
import require$$1$7, { exec, execFile as execFile$1, spawn as spawn$2 } from "child_process";
|
|
39
39
|
import { c as createPlanModeConfigOption, L as LODY_PLAN_MODE_CONFIG_ID } from "./chunks/plan-mode-BLOER-fv.js";
|
|
40
|
-
import { D as DEEPSEEK_HARNESS_PERMISSION_MODES, a as DEEPSEEK_HARNESS_AGENT_PRESETS, A as ACP_EXTENSION_DSH_CAPABILITY_SOURCE_VERSION, c as createDeepSeekHarnessProfileFiles, b as DEEPSEEK_HARNESS_PROFILE_NAME, d as DEEPSEEK_HARNESS_PROFILE_FILENAMES, e as ACP_EXTENSION_DSH_QUERY_PATH_ENV, f as ACP_EXTENSION_DSH_SESSION_ROOT_ENV, g as createDeepSeekHarnessNpxSpecifiers, h as DEEPSEEK_HARNESS_DEFAULT_SESSION_COMPRESSION, i as DEEPSEEK_HARNESS_VERSION, j as DEEPSEEK_HARNESS_BASE_URL_ENV } from "./chunks/profile-
|
|
40
|
+
import { D as DEEPSEEK_HARNESS_PERMISSION_MODES, a as DEEPSEEK_HARNESS_AGENT_PRESETS, R as RequestError$1, C as ClientSideConnection, P as PROTOCOL_VERSION, A as ACP_EXTENSION_DSH_CAPABILITY_SOURCE_VERSION, c as createDeepSeekHarnessProfileFiles, b as DEEPSEEK_HARNESS_PROFILE_NAME, d as DEEPSEEK_HARNESS_PROFILE_FILENAMES, e as ACP_EXTENSION_DSH_QUERY_PATH_ENV, f as ACP_EXTENSION_DSH_SESSION_ROOT_ENV, g as createDeepSeekHarnessNpxSpecifiers, h as DEEPSEEK_HARNESS_DEFAULT_SESSION_COMPRESSION, i as DEEPSEEK_HARNESS_VERSION, j as DEEPSEEK_HARNESS_BASE_URL_ENV, n as ndJsonStream, k as client$2, m as methods$1 } from "./chunks/profile-BmD8b-zH.js";
|
|
41
41
|
import { i as imports, _ as __wbg_set_wasm$1, r as rawWasm, L as LoroDoc, E as EphemeralStoreWasm, U as UndoManager, a as isValidContainerId, c as callPendingEvents$3, b as LoroTree, d as LoroText, e as LoroMovableList, f as LoroList, g as LoroMap, V as VersionVector, h as __vite__initWasm, j as decodeImportBlobMeta, __tla as __tla_0 } from "./chunks/loro_wasm_bg-Dz8BnaUI.js";
|
|
42
42
|
import { performance as performance$1 } from "perf_hooks";
|
|
43
43
|
import require$$0$a from "net";
|
|
@@ -64,9 +64,8 @@ import require$$1$6 from "node:dns";
|
|
|
64
64
|
import { C as CodeCollabV2FileIndexRequestSchema, a as CodeCollabV2OpenTextRequestSchema, b as CodeCollabV2RefreshTextRequestSchema, c as CodeCollabV2SaveTextRequestSchema, d as CodeCollabV2OpenCurrentDiffRequestSchema, e as CodeCollabV2OpenAllChangesDiffRequestSchema, f as CodeCollabV2OpenTurnDiffRequestSchema, g as CodeCollabV2InitDirectoryRequestSchema, h as CodeCollabV2FileIndexSnapshotSchema, i as CodeCollabV2OpenTextOkSchema, j as CodeCollabV2RefreshTextResponseSchema, k as CodeCollabV2SaveTextResponseSchema, l as CodeCollabV2OpenCurrentDiffResponseSchema, m as CodeCollabV2OpenAllChangesDiffResponseSchema, n as CodeCollabV2OpenTurnDiffResponseSchema, o as CodeCollabV2InitDirectoryOkSchema, p as CodeCollabV2LspUnsupportedSchema, q as CodeCollabV2ErrorSchema, r as CodeCollabV2RpcContentEnvelopeSchema, s as deriveCodeCollabV2ContentKeyId, t as CodeCollabV2ErrorCodeSchema, u as CodeCollabV2RpcResponseSchema, v as deriveCodeCollabV2ContentKeyBytes, w as readCodeCollabFileIndexSignalFromFlock, x as writeCodeCollabFileIndexSignalToFlock, y as writeCodeCollabFileIndexToFlock, z as buildCodeCollabFileIndexState, A as CODE_COLLAB_V2_TEXT_LIMITS, B as CODE_COLLAB_V2_ALL_CHANGES_DIFF_LIMITS, D as computeAllChanges, E as codeCollabFileIndexStatesEqual, F as scanGitDirectoryEntries, G as closeDirectoryQuietly } from "./chunks/directory-handle-35P9qcGk.js";
|
|
65
65
|
import { finished, pipeline } from "node:stream/promises";
|
|
66
66
|
import { StringDecoder } from "node:string_decoder";
|
|
67
|
-
import { p as packageJson } from "./chunks/package-
|
|
68
|
-
import { r as runtimeManifest } from "./chunks/runtime-manifest-
|
|
69
|
-
import { R as RequestError$1, C as ClientSideConnection, P as PROTOCOL_VERSION, n as ndJsonStream, c as client$2, m as methods$1 } from "./chunks/acp-DCoAUZc7.js";
|
|
67
|
+
import { p as packageJson } from "./chunks/package-BdifTDFO.js";
|
|
68
|
+
import { r as runtimeManifest } from "./chunks/runtime-manifest-DZsDOOW3.js";
|
|
70
69
|
import { L as LODY_EXTENSION_METHODS, n as normalizeLodyExtensionMethod } from "./chunks/methods-CvEDMahD.js";
|
|
71
70
|
import { AsyncLocalStorage as AsyncLocalStorage$1 } from "async_hooks";
|
|
72
71
|
import { createRequire } from "module";
|
|
@@ -4326,7 +4325,7 @@ Upgrade Node, then re-run: npx lody@latest`;
|
|
|
4326
4325
|
}
|
|
4327
4326
|
const name$2 = "lody";
|
|
4328
4327
|
const name$1 = "@lody/cli-cloud";
|
|
4329
|
-
const version$a = "0.
|
|
4328
|
+
const version$a = "0.98.0";
|
|
4330
4329
|
const type$2 = "module";
|
|
4331
4330
|
const scripts = {
|
|
4332
4331
|
"dev": "node dev.mjs",
|
|
@@ -16190,15 +16189,12 @@ Requirements:
|
|
|
16190
16189
|
type: "idle"
|
|
16191
16190
|
};
|
|
16192
16191
|
},
|
|
16193
|
-
running(activity
|
|
16194
|
-
return {
|
|
16192
|
+
running(activity) {
|
|
16193
|
+
return activity ? {
|
|
16195
16194
|
type: "running",
|
|
16196
|
-
|
|
16197
|
-
|
|
16198
|
-
|
|
16199
|
-
...detail !== void 0 ? {
|
|
16200
|
-
detail
|
|
16201
|
-
} : {}
|
|
16195
|
+
activity
|
|
16196
|
+
} : {
|
|
16197
|
+
type: "running"
|
|
16202
16198
|
};
|
|
16203
16199
|
},
|
|
16204
16200
|
requestPermission() {
|
|
@@ -16612,12 +16608,12 @@ Requirements:
|
|
|
16612
16608
|
{
|
|
16613
16609
|
id: "cline",
|
|
16614
16610
|
name: "Cline",
|
|
16615
|
-
version: "3.0.
|
|
16611
|
+
version: "3.0.62",
|
|
16616
16612
|
description: "Autonomous coding agent CLI - capable of creating/editing files, running commands, using the browser, and more",
|
|
16617
16613
|
icon: "https://cdn.agentclientprotocol.com/registry/v1/latest/cline.svg",
|
|
16618
16614
|
distribution: {
|
|
16619
16615
|
npx: {
|
|
16620
|
-
package: "cline@3.0.
|
|
16616
|
+
package: "cline@3.0.62",
|
|
16621
16617
|
args: [
|
|
16622
16618
|
"--acp"
|
|
16623
16619
|
]
|
|
@@ -16627,12 +16623,12 @@ Requirements:
|
|
|
16627
16623
|
{
|
|
16628
16624
|
id: "codebuddy-code",
|
|
16629
16625
|
name: "Codebuddy Code",
|
|
16630
|
-
version: "2.
|
|
16626
|
+
version: "2.155.0",
|
|
16631
16627
|
description: "Tencent Cloud's official intelligent coding tool",
|
|
16632
16628
|
icon: "https://cdn.agentclientprotocol.com/registry/v1/latest/codebuddy-code.svg",
|
|
16633
16629
|
distribution: {
|
|
16634
16630
|
npx: {
|
|
16635
|
-
package: "@tencent-ai/codebuddy-code@2.
|
|
16631
|
+
package: "@tencent-ai/codebuddy-code@2.155.0",
|
|
16636
16632
|
args: [
|
|
16637
16633
|
"--acp"
|
|
16638
16634
|
]
|
|
@@ -16774,7 +16770,7 @@ Requirements:
|
|
|
16774
16770
|
{
|
|
16775
16771
|
id: "cursor",
|
|
16776
16772
|
name: "Cursor",
|
|
16777
|
-
version: "2026.09.
|
|
16773
|
+
version: "2026.09.15",
|
|
16778
16774
|
description: "Cursor's coding agent",
|
|
16779
16775
|
icon: "https://cdn.agentclientprotocol.com/registry/v1/latest/cursor.svg",
|
|
16780
16776
|
distribution: {
|
|
@@ -16804,48 +16800,48 @@ Requirements:
|
|
|
16804
16800
|
{
|
|
16805
16801
|
id: "devin",
|
|
16806
16802
|
name: "Devin",
|
|
16807
|
-
version: "3000.10.
|
|
16803
|
+
version: "3000.10.31",
|
|
16808
16804
|
description: "Devin CLI coding agent by Cognition",
|
|
16809
16805
|
icon: "https://cdn.agentclientprotocol.com/registry/v1/latest/devin.svg",
|
|
16810
16806
|
distribution: {
|
|
16811
16807
|
binary: {
|
|
16812
16808
|
"darwin-aarch64": {
|
|
16813
|
-
archive: "https://static.devin.ai/cli/3000.10.
|
|
16809
|
+
archive: "https://static.devin.ai/cli/3000.10.31/devin-3000.10.31-aarch64-apple-darwin.tar.gz",
|
|
16814
16810
|
cmd: "./bin/devin",
|
|
16815
16811
|
args: [
|
|
16816
16812
|
"acp"
|
|
16817
16813
|
]
|
|
16818
16814
|
},
|
|
16819
16815
|
"darwin-x86_64": {
|
|
16820
|
-
archive: "https://static.devin.ai/cli/3000.10.
|
|
16816
|
+
archive: "https://static.devin.ai/cli/3000.10.31/devin-3000.10.31-x86_64-apple-darwin.tar.gz",
|
|
16821
16817
|
cmd: "./bin/devin",
|
|
16822
16818
|
args: [
|
|
16823
16819
|
"acp"
|
|
16824
16820
|
]
|
|
16825
16821
|
},
|
|
16826
16822
|
"linux-aarch64": {
|
|
16827
|
-
archive: "https://static.devin.ai/cli/3000.10.
|
|
16823
|
+
archive: "https://static.devin.ai/cli/3000.10.31/devin-3000.10.31-aarch64-unknown-linux.tar.gz",
|
|
16828
16824
|
cmd: "./bin/devin",
|
|
16829
16825
|
args: [
|
|
16830
16826
|
"acp"
|
|
16831
16827
|
]
|
|
16832
16828
|
},
|
|
16833
16829
|
"linux-x86_64": {
|
|
16834
|
-
archive: "https://static.devin.ai/cli/3000.10.
|
|
16830
|
+
archive: "https://static.devin.ai/cli/3000.10.31/devin-3000.10.31-x86_64-unknown-linux.tar.gz",
|
|
16835
16831
|
cmd: "./bin/devin",
|
|
16836
16832
|
args: [
|
|
16837
16833
|
"acp"
|
|
16838
16834
|
]
|
|
16839
16835
|
},
|
|
16840
16836
|
"windows-aarch64": {
|
|
16841
|
-
archive: "https://static.devin.ai/cli/3000.10.
|
|
16837
|
+
archive: "https://static.devin.ai/cli/3000.10.31/devin-3000.10.31-aarch64-pc-windows.zip",
|
|
16842
16838
|
cmd: "./bin\\devin.exe",
|
|
16843
16839
|
args: [
|
|
16844
16840
|
"acp"
|
|
16845
16841
|
]
|
|
16846
16842
|
},
|
|
16847
16843
|
"windows-x86_64": {
|
|
16848
|
-
archive: "https://static.devin.ai/cli/3000.10.
|
|
16844
|
+
archive: "https://static.devin.ai/cli/3000.10.31/devin-3000.10.31-x86_64-pc-windows.zip",
|
|
16849
16845
|
cmd: "./bin\\devin.exe",
|
|
16850
16846
|
args: [
|
|
16851
16847
|
"acp"
|
|
@@ -16857,12 +16853,12 @@ Requirements:
|
|
|
16857
16853
|
{
|
|
16858
16854
|
id: "dimcode",
|
|
16859
16855
|
name: "DimCode",
|
|
16860
|
-
version: "0.5.
|
|
16856
|
+
version: "0.5.6",
|
|
16861
16857
|
description: "A coding agent that puts leading models at your command.",
|
|
16862
16858
|
icon: "https://cdn.agentclientprotocol.com/registry/v1/latest/dimcode.svg",
|
|
16863
16859
|
distribution: {
|
|
16864
16860
|
npx: {
|
|
16865
|
-
package: "dimcode@0.5.
|
|
16861
|
+
package: "dimcode@0.5.6",
|
|
16866
16862
|
args: [
|
|
16867
16863
|
"acp"
|
|
16868
16864
|
]
|
|
@@ -16872,12 +16868,12 @@ Requirements:
|
|
|
16872
16868
|
{
|
|
16873
16869
|
id: "dirac",
|
|
16874
16870
|
name: "Dirac",
|
|
16875
|
-
version: "0.5.
|
|
16871
|
+
version: "0.5.13",
|
|
16876
16872
|
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.",
|
|
16877
16873
|
icon: "https://cdn.agentclientprotocol.com/registry/v1/latest/dirac.svg",
|
|
16878
16874
|
distribution: {
|
|
16879
16875
|
npx: {
|
|
16880
|
-
package: "dirac-cli@0.5.
|
|
16876
|
+
package: "dirac-cli@0.5.13",
|
|
16881
16877
|
args: [
|
|
16882
16878
|
"--acp"
|
|
16883
16879
|
]
|
|
@@ -16887,12 +16883,12 @@ Requirements:
|
|
|
16887
16883
|
{
|
|
16888
16884
|
id: "factory-droid",
|
|
16889
16885
|
name: "Factory Droid",
|
|
16890
|
-
version: "0.
|
|
16886
|
+
version: "0.223.0",
|
|
16891
16887
|
description: "Factory Droid - AI coding agent powered by Factory AI",
|
|
16892
16888
|
icon: "https://cdn.agentclientprotocol.com/registry/v1/latest/factory-droid.svg",
|
|
16893
16889
|
distribution: {
|
|
16894
16890
|
npx: {
|
|
16895
|
-
package: "droid@0.
|
|
16891
|
+
package: "droid@0.223.0",
|
|
16896
16892
|
args: [
|
|
16897
16893
|
"exec",
|
|
16898
16894
|
"--output-format",
|
|
@@ -16926,12 +16922,12 @@ Requirements:
|
|
|
16926
16922
|
{
|
|
16927
16923
|
id: "gemini",
|
|
16928
16924
|
name: "Gemini CLI",
|
|
16929
|
-
version: "0.
|
|
16925
|
+
version: "0.60.0",
|
|
16930
16926
|
description: "Google's official CLI for Gemini",
|
|
16931
16927
|
icon: "https://cdn.agentclientprotocol.com/registry/v1/latest/gemini.svg",
|
|
16932
16928
|
distribution: {
|
|
16933
16929
|
npx: {
|
|
16934
|
-
package: "@google/gemini-cli@0.
|
|
16930
|
+
package: "@google/gemini-cli@0.60.0",
|
|
16935
16931
|
args: [
|
|
16936
16932
|
"--acp"
|
|
16937
16933
|
]
|
|
@@ -16941,12 +16937,12 @@ Requirements:
|
|
|
16941
16937
|
{
|
|
16942
16938
|
id: "github-copilot-cli",
|
|
16943
16939
|
name: "GitHub Copilot",
|
|
16944
|
-
version: "1.0.
|
|
16940
|
+
version: "1.0.86",
|
|
16945
16941
|
description: "GitHub's AI pair programmer",
|
|
16946
16942
|
icon: "https://cdn.agentclientprotocol.com/registry/v1/latest/github-copilot-cli.svg",
|
|
16947
16943
|
distribution: {
|
|
16948
16944
|
npx: {
|
|
16949
|
-
package: "@github/copilot@1.0.
|
|
16945
|
+
package: "@github/copilot@1.0.86",
|
|
16950
16946
|
args: [
|
|
16951
16947
|
"--acp"
|
|
16952
16948
|
]
|
|
@@ -16956,19 +16952,19 @@ Requirements:
|
|
|
16956
16952
|
{
|
|
16957
16953
|
id: "glm-acp-agent",
|
|
16958
16954
|
name: "GLM Agent",
|
|
16959
|
-
version: "1.
|
|
16955
|
+
version: "1.11.0",
|
|
16960
16956
|
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.",
|
|
16961
16957
|
icon: "https://cdn.agentclientprotocol.com/registry/v1/latest/glm-acp-agent.svg",
|
|
16962
16958
|
distribution: {
|
|
16963
16959
|
npx: {
|
|
16964
|
-
package: "glm-acp-agent@1.
|
|
16960
|
+
package: "glm-acp-agent@1.11.0"
|
|
16965
16961
|
}
|
|
16966
16962
|
}
|
|
16967
16963
|
},
|
|
16968
16964
|
{
|
|
16969
16965
|
id: "goose",
|
|
16970
16966
|
name: "goose",
|
|
16971
|
-
version: "1.
|
|
16967
|
+
version: "1.51.0",
|
|
16972
16968
|
description: "A local, extensible, open source AI agent that automates engineering tasks",
|
|
16973
16969
|
icon: "https://cdn.agentclientprotocol.com/registry/v1/latest/goose.svg",
|
|
16974
16970
|
distribution: {
|
|
@@ -16986,13 +16982,13 @@ Requirements:
|
|
|
16986
16982
|
{
|
|
16987
16983
|
id: "harn",
|
|
16988
16984
|
name: "Harn",
|
|
16989
|
-
version: "0.10.
|
|
16985
|
+
version: "0.10.139",
|
|
16990
16986
|
description: "Harn runs .harn agent pipelines as a native ACP coding agent over stdio.",
|
|
16991
16987
|
icon: "https://cdn.agentclientprotocol.com/registry/v1/latest/harn.svg",
|
|
16992
16988
|
distribution: {
|
|
16993
16989
|
binary: {
|
|
16994
16990
|
"darwin-aarch64": {
|
|
16995
|
-
archive: "https://github.com/burin-labs/harn/releases/download/v0.10.
|
|
16991
|
+
archive: "https://github.com/burin-labs/harn/releases/download/v0.10.139/harn-aarch64-apple-darwin.tar.gz",
|
|
16996
16992
|
cmd: "./harn",
|
|
16997
16993
|
args: [
|
|
16998
16994
|
"serve",
|
|
@@ -17000,7 +16996,7 @@ Requirements:
|
|
|
17000
16996
|
]
|
|
17001
16997
|
},
|
|
17002
16998
|
"darwin-x86_64": {
|
|
17003
|
-
archive: "https://github.com/burin-labs/harn/releases/download/v0.10.
|
|
16999
|
+
archive: "https://github.com/burin-labs/harn/releases/download/v0.10.139/harn-x86_64-apple-darwin.tar.gz",
|
|
17004
17000
|
cmd: "./harn",
|
|
17005
17001
|
args: [
|
|
17006
17002
|
"serve",
|
|
@@ -17008,7 +17004,7 @@ Requirements:
|
|
|
17008
17004
|
]
|
|
17009
17005
|
},
|
|
17010
17006
|
"linux-aarch64": {
|
|
17011
|
-
archive: "https://github.com/burin-labs/harn/releases/download/v0.10.
|
|
17007
|
+
archive: "https://github.com/burin-labs/harn/releases/download/v0.10.139/harn-aarch64-unknown-linux-gnu.tar.gz",
|
|
17012
17008
|
cmd: "./harn",
|
|
17013
17009
|
args: [
|
|
17014
17010
|
"serve",
|
|
@@ -17016,7 +17012,7 @@ Requirements:
|
|
|
17016
17012
|
]
|
|
17017
17013
|
},
|
|
17018
17014
|
"linux-x86_64": {
|
|
17019
|
-
archive: "https://github.com/burin-labs/harn/releases/download/v0.10.
|
|
17015
|
+
archive: "https://github.com/burin-labs/harn/releases/download/v0.10.139/harn-x86_64-unknown-linux-gnu.tar.gz",
|
|
17020
17016
|
cmd: "./harn",
|
|
17021
17017
|
args: [
|
|
17022
17018
|
"serve",
|
|
@@ -17024,7 +17020,7 @@ Requirements:
|
|
|
17024
17020
|
]
|
|
17025
17021
|
},
|
|
17026
17022
|
"windows-x86_64": {
|
|
17027
|
-
archive: "https://github.com/burin-labs/harn/releases/download/v0.10.
|
|
17023
|
+
archive: "https://github.com/burin-labs/harn/releases/download/v0.10.139/harn-x86_64-pc-windows-msvc.zip",
|
|
17028
17024
|
cmd: "harn.exe",
|
|
17029
17025
|
args: [
|
|
17030
17026
|
"serve",
|
|
@@ -17037,7 +17033,7 @@ Requirements:
|
|
|
17037
17033
|
{
|
|
17038
17034
|
id: "junie",
|
|
17039
17035
|
name: "Junie",
|
|
17040
|
-
version: "
|
|
17036
|
+
version: "3331.4.0",
|
|
17041
17037
|
description: "AI Coding Agent by JetBrains",
|
|
17042
17038
|
icon: "https://cdn.agentclientprotocol.com/registry/v1/latest/junie.svg",
|
|
17043
17039
|
distribution: {
|
|
@@ -17055,47 +17051,47 @@ Requirements:
|
|
|
17055
17051
|
{
|
|
17056
17052
|
id: "kilo",
|
|
17057
17053
|
name: "Kilo",
|
|
17058
|
-
version: "7.
|
|
17054
|
+
version: "7.7.5",
|
|
17059
17055
|
description: "The open source coding agent",
|
|
17060
17056
|
icon: "https://cdn.agentclientprotocol.com/registry/v1/latest/kilo.svg",
|
|
17061
17057
|
distribution: {
|
|
17062
17058
|
npx: {
|
|
17063
|
-
package: "@kilocode/cli@7.
|
|
17059
|
+
package: "@kilocode/cli@7.7.5",
|
|
17064
17060
|
args: [
|
|
17065
17061
|
"acp"
|
|
17066
17062
|
]
|
|
17067
17063
|
},
|
|
17068
17064
|
binary: {
|
|
17069
17065
|
"darwin-aarch64": {
|
|
17070
|
-
archive: "https://github.com/Kilo-Org/kilocode/releases/download/v7.
|
|
17066
|
+
archive: "https://github.com/Kilo-Org/kilocode/releases/download/v7.7.5/kilo-darwin-arm64.zip",
|
|
17071
17067
|
cmd: "./kilo",
|
|
17072
17068
|
args: [
|
|
17073
17069
|
"acp"
|
|
17074
17070
|
]
|
|
17075
17071
|
},
|
|
17076
17072
|
"darwin-x86_64": {
|
|
17077
|
-
archive: "https://github.com/Kilo-Org/kilocode/releases/download/v7.
|
|
17073
|
+
archive: "https://github.com/Kilo-Org/kilocode/releases/download/v7.7.5/kilo-darwin-x64.zip",
|
|
17078
17074
|
cmd: "./kilo",
|
|
17079
17075
|
args: [
|
|
17080
17076
|
"acp"
|
|
17081
17077
|
]
|
|
17082
17078
|
},
|
|
17083
17079
|
"linux-aarch64": {
|
|
17084
|
-
archive: "https://github.com/Kilo-Org/kilocode/releases/download/v7.
|
|
17080
|
+
archive: "https://github.com/Kilo-Org/kilocode/releases/download/v7.7.5/kilo-linux-arm64.tar.gz",
|
|
17085
17081
|
cmd: "./kilo",
|
|
17086
17082
|
args: [
|
|
17087
17083
|
"acp"
|
|
17088
17084
|
]
|
|
17089
17085
|
},
|
|
17090
17086
|
"linux-x86_64": {
|
|
17091
|
-
archive: "https://github.com/Kilo-Org/kilocode/releases/download/v7.
|
|
17087
|
+
archive: "https://github.com/Kilo-Org/kilocode/releases/download/v7.7.5/kilo-linux-x64.tar.gz",
|
|
17092
17088
|
cmd: "./kilo",
|
|
17093
17089
|
args: [
|
|
17094
17090
|
"acp"
|
|
17095
17091
|
]
|
|
17096
17092
|
},
|
|
17097
17093
|
"windows-x86_64": {
|
|
17098
|
-
archive: "https://github.com/Kilo-Org/kilocode/releases/download/v7.
|
|
17094
|
+
archive: "https://github.com/Kilo-Org/kilocode/releases/download/v7.7.5/kilo-windows-x64.zip",
|
|
17099
17095
|
cmd: "./kilo.exe",
|
|
17100
17096
|
args: [
|
|
17101
17097
|
"acp"
|
|
@@ -17107,13 +17103,13 @@ Requirements:
|
|
|
17107
17103
|
{
|
|
17108
17104
|
id: "kimchi",
|
|
17109
17105
|
name: "Kimchi",
|
|
17110
|
-
version: "1.1.
|
|
17106
|
+
version: "1.1.26",
|
|
17111
17107
|
description: "Coding agent powered by multi-model orchestration",
|
|
17112
17108
|
icon: "https://cdn.agentclientprotocol.com/registry/v1/latest/kimchi.svg",
|
|
17113
17109
|
distribution: {
|
|
17114
17110
|
binary: {
|
|
17115
17111
|
"darwin-aarch64": {
|
|
17116
|
-
archive: "https://github.com/getkimchi/kimchi/releases/download/v1.1.
|
|
17112
|
+
archive: "https://github.com/getkimchi/kimchi/releases/download/v1.1.26/kimchi_darwin_arm64.tar.gz",
|
|
17117
17113
|
cmd: "./bin/kimchi",
|
|
17118
17114
|
args: [
|
|
17119
17115
|
"--mode",
|
|
@@ -17121,7 +17117,7 @@ Requirements:
|
|
|
17121
17117
|
]
|
|
17122
17118
|
},
|
|
17123
17119
|
"darwin-x86_64": {
|
|
17124
|
-
archive: "https://github.com/getkimchi/kimchi/releases/download/v1.1.
|
|
17120
|
+
archive: "https://github.com/getkimchi/kimchi/releases/download/v1.1.26/kimchi_darwin_amd64.tar.gz",
|
|
17125
17121
|
cmd: "./bin/kimchi",
|
|
17126
17122
|
args: [
|
|
17127
17123
|
"--mode",
|
|
@@ -17129,7 +17125,7 @@ Requirements:
|
|
|
17129
17125
|
]
|
|
17130
17126
|
},
|
|
17131
17127
|
"linux-aarch64": {
|
|
17132
|
-
archive: "https://github.com/getkimchi/kimchi/releases/download/v1.1.
|
|
17128
|
+
archive: "https://github.com/getkimchi/kimchi/releases/download/v1.1.26/kimchi_linux_arm64.tar.gz",
|
|
17133
17129
|
cmd: "./bin/kimchi",
|
|
17134
17130
|
args: [
|
|
17135
17131
|
"--mode",
|
|
@@ -17137,7 +17133,7 @@ Requirements:
|
|
|
17137
17133
|
]
|
|
17138
17134
|
},
|
|
17139
17135
|
"linux-x86_64": {
|
|
17140
|
-
archive: "https://github.com/getkimchi/kimchi/releases/download/v1.1.
|
|
17136
|
+
archive: "https://github.com/getkimchi/kimchi/releases/download/v1.1.26/kimchi_linux_amd64.tar.gz",
|
|
17141
17137
|
cmd: "./bin/kimchi",
|
|
17142
17138
|
args: [
|
|
17143
17139
|
"--mode",
|
|
@@ -17145,7 +17141,7 @@ Requirements:
|
|
|
17145
17141
|
]
|
|
17146
17142
|
},
|
|
17147
17143
|
"windows-x86_64": {
|
|
17148
|
-
archive: "https://github.com/getkimchi/kimchi/releases/download/v1.1.
|
|
17144
|
+
archive: "https://github.com/getkimchi/kimchi/releases/download/v1.1.26/kimchi_windows_amd64.zip",
|
|
17149
17145
|
cmd: "./bin/kimchi.exe",
|
|
17150
17146
|
args: [
|
|
17151
17147
|
"--mode",
|
|
@@ -17243,12 +17239,12 @@ Requirements:
|
|
|
17243
17239
|
{
|
|
17244
17240
|
id: "nova",
|
|
17245
17241
|
name: "Nova",
|
|
17246
|
-
version: "1.1.
|
|
17242
|
+
version: "1.1.45",
|
|
17247
17243
|
description: "Nova by Compass AI - a fully-fledged software engineer at your command",
|
|
17248
17244
|
icon: "https://cdn.agentclientprotocol.com/registry/v1/latest/nova.svg",
|
|
17249
17245
|
distribution: {
|
|
17250
17246
|
npx: {
|
|
17251
|
-
package: "@compass-ai/nova@1.1.
|
|
17247
|
+
package: "@compass-ai/nova@1.1.45",
|
|
17252
17248
|
args: [
|
|
17253
17249
|
"acp"
|
|
17254
17250
|
]
|
|
@@ -17258,7 +17254,7 @@ Requirements:
|
|
|
17258
17254
|
{
|
|
17259
17255
|
id: "opencode",
|
|
17260
17256
|
name: "OpenCode",
|
|
17261
|
-
version: "1.18.
|
|
17257
|
+
version: "1.18.31",
|
|
17262
17258
|
description: "The open source coding agent",
|
|
17263
17259
|
icon: "https://cdn.agentclientprotocol.com/registry/v1/latest/opencode.svg",
|
|
17264
17260
|
distribution: {
|
|
@@ -17344,12 +17340,12 @@ Requirements:
|
|
|
17344
17340
|
{
|
|
17345
17341
|
id: "qwen-code",
|
|
17346
17342
|
name: "Qwen Code",
|
|
17347
|
-
version: "0.
|
|
17343
|
+
version: "0.24.1",
|
|
17348
17344
|
description: "Alibaba's Qwen coding assistant",
|
|
17349
17345
|
icon: "https://cdn.agentclientprotocol.com/registry/v1/latest/qwen-code.svg",
|
|
17350
17346
|
distribution: {
|
|
17351
17347
|
npx: {
|
|
17352
|
-
package: "@qwen-code/qwen-code@0.
|
|
17348
|
+
package: "@qwen-code/qwen-code@0.24.1",
|
|
17353
17349
|
args: [
|
|
17354
17350
|
"--acp",
|
|
17355
17351
|
"--experimental-skills"
|
|
@@ -17374,36 +17370,36 @@ Requirements:
|
|
|
17374
17370
|
{
|
|
17375
17371
|
id: "sigit",
|
|
17376
17372
|
name: "siGit Code",
|
|
17377
|
-
version: "1.5.
|
|
17373
|
+
version: "1.5.10",
|
|
17378
17374
|
description: "Local-first coding agent. Runs entirely on your machine with optional on-device LLM inference via Onde.",
|
|
17379
17375
|
icon: "https://cdn.agentclientprotocol.com/registry/v1/latest/sigit.svg",
|
|
17380
17376
|
distribution: {
|
|
17381
17377
|
npx: {
|
|
17382
|
-
package: "@smbcloud/sigit@1.5.
|
|
17378
|
+
package: "@smbcloud/sigit@1.5.10"
|
|
17383
17379
|
},
|
|
17384
17380
|
binary: {
|
|
17385
17381
|
"darwin-aarch64": {
|
|
17386
|
-
archive: "https://github.com/getsigit/sigit/releases/download/v1.5.
|
|
17382
|
+
archive: "https://github.com/getsigit/sigit/releases/download/v1.5.10/sigit-macos-arm64.tar.gz",
|
|
17387
17383
|
cmd: "./sigit"
|
|
17388
17384
|
},
|
|
17389
17385
|
"darwin-x86_64": {
|
|
17390
|
-
archive: "https://github.com/getsigit/sigit/releases/download/v1.5.
|
|
17386
|
+
archive: "https://github.com/getsigit/sigit/releases/download/v1.5.10/sigit-macos-amd64.tar.gz",
|
|
17391
17387
|
cmd: "./sigit"
|
|
17392
17388
|
},
|
|
17393
17389
|
"linux-aarch64": {
|
|
17394
|
-
archive: "https://github.com/getsigit/sigit/releases/download/v1.5.
|
|
17390
|
+
archive: "https://github.com/getsigit/sigit/releases/download/v1.5.10/sigit-linux-arm64",
|
|
17395
17391
|
cmd: "./sigit-linux-arm64"
|
|
17396
17392
|
},
|
|
17397
17393
|
"linux-x86_64": {
|
|
17398
|
-
archive: "https://github.com/getsigit/sigit/releases/download/v1.5.
|
|
17394
|
+
archive: "https://github.com/getsigit/sigit/releases/download/v1.5.10/sigit-linux-amd64",
|
|
17399
17395
|
cmd: "./sigit-linux-amd64"
|
|
17400
17396
|
},
|
|
17401
17397
|
"windows-aarch64": {
|
|
17402
|
-
archive: "https://github.com/getsigit/sigit/releases/download/v1.5.
|
|
17398
|
+
archive: "https://github.com/getsigit/sigit/releases/download/v1.5.10/sigit-win-arm64.exe",
|
|
17403
17399
|
cmd: "./sigit-win-arm64.exe"
|
|
17404
17400
|
},
|
|
17405
17401
|
"windows-x86_64": {
|
|
17406
|
-
archive: "https://github.com/getsigit/sigit/releases/download/v1.5.
|
|
17402
|
+
archive: "https://github.com/getsigit/sigit/releases/download/v1.5.10/sigit-win-amd64.exe",
|
|
17407
17403
|
cmd: "./sigit-win-amd64.exe"
|
|
17408
17404
|
}
|
|
17409
17405
|
}
|
|
@@ -19740,6 +19736,7 @@ ${outputTail}` : blockTail.output;
|
|
|
19740
19736
|
if (lody) {
|
|
19741
19737
|
const parsed = parseLodyElicitationPermissionMeta(lody);
|
|
19742
19738
|
if (parsed) return parsed;
|
|
19739
|
+
if (isRecord$b(lody.elicitation) && lody.elicitation.version === 1) return null;
|
|
19743
19740
|
}
|
|
19744
19741
|
const claudeCode = getClaudeCodeMeta(meta);
|
|
19745
19742
|
if (claudeCode) {
|
|
@@ -19777,6 +19774,8 @@ ${outputTail}` : blockTail.output;
|
|
|
19777
19774
|
return null;
|
|
19778
19775
|
}
|
|
19779
19776
|
if (!Array.isArray(rawQuestion.options)) return null;
|
|
19777
|
+
const note = rawQuestion.note;
|
|
19778
|
+
if (note !== void 0 && (!isRecord$b(note) || typeof note.fieldId !== "string" || !note.fieldId.trim() || note.title !== void 0 && typeof note.title !== "string" || note.description !== void 0 && typeof note.description !== "string" || note.isSecret !== void 0 && typeof note.isSecret !== "boolean")) return null;
|
|
19780
19779
|
const options = [];
|
|
19781
19780
|
for (const rawOption of rawQuestion.options) {
|
|
19782
19781
|
if (!isRecord$b(rawOption) || typeof rawOption.label !== "string") return null;
|
|
@@ -19798,15 +19797,40 @@ ${outputTail}` : blockTail.output;
|
|
|
19798
19797
|
header: rawQuestion.header,
|
|
19799
19798
|
options,
|
|
19800
19799
|
multiSelect: rawQuestion.multiSelect === true,
|
|
19801
|
-
...rawQuestion.allowCustomAnswer ===
|
|
19802
|
-
allowCustomAnswer:
|
|
19800
|
+
...typeof rawQuestion.allowCustomAnswer === "boolean" ? {
|
|
19801
|
+
allowCustomAnswer: rawQuestion.allowCustomAnswer
|
|
19803
19802
|
} : {},
|
|
19804
19803
|
...rawQuestion.isSecret === true ? {
|
|
19805
19804
|
isSecret: true
|
|
19805
|
+
} : {},
|
|
19806
|
+
...isRecord$b(note) ? {
|
|
19807
|
+
note: {
|
|
19808
|
+
fieldId: note.fieldId,
|
|
19809
|
+
...typeof note.title === "string" ? {
|
|
19810
|
+
title: note.title
|
|
19811
|
+
} : {},
|
|
19812
|
+
...typeof note.description === "string" ? {
|
|
19813
|
+
description: note.description
|
|
19814
|
+
} : {},
|
|
19815
|
+
...note.isSecret === true ? {
|
|
19816
|
+
isSecret: true
|
|
19817
|
+
} : {}
|
|
19818
|
+
}
|
|
19806
19819
|
} : {}
|
|
19807
19820
|
});
|
|
19808
19821
|
}
|
|
19809
|
-
return questions;
|
|
19822
|
+
return hasValidNoteKeys(questions) ? questions : null;
|
|
19823
|
+
}
|
|
19824
|
+
function hasValidNoteKeys(questions) {
|
|
19825
|
+
if (!questions.some((question) => question.note)) return true;
|
|
19826
|
+
const used = new Set(questions.map((question) => question.id));
|
|
19827
|
+
if (used.size !== questions.length || questions.some((question) => !question.id?.trim())) return false;
|
|
19828
|
+
for (const question of questions) {
|
|
19829
|
+
if (!question.note) continue;
|
|
19830
|
+
if (!question.note.fieldId.trim() || used.has(question.note.fieldId)) return false;
|
|
19831
|
+
used.add(question.note.fieldId);
|
|
19832
|
+
}
|
|
19833
|
+
return true;
|
|
19810
19834
|
}
|
|
19811
19835
|
function parseClaudeAskUserQuestionPermissionMeta(claudeCode) {
|
|
19812
19836
|
const raw2 = claudeCode.askUserQuestion;
|
|
@@ -19942,7 +19966,7 @@ ${outputTail}` : blockTail.output;
|
|
|
19942
19966
|
return elicitation && isRecord$b(elicitation.answers) ? elicitation.answers : null;
|
|
19943
19967
|
};
|
|
19944
19968
|
function extractAskUserQuestionAnswersFromOutcome(meta, outcome) {
|
|
19945
|
-
if (!outcome || !isRecord$b(outcome._meta)) return null;
|
|
19969
|
+
if (!outcome || !isRecord$b(outcome._meta) || !hasValidNoteKeys(meta.questions)) return null;
|
|
19946
19970
|
const answerSources = [
|
|
19947
19971
|
{
|
|
19948
19972
|
source: "lody",
|
|
@@ -19959,8 +19983,12 @@ ${outputTail}` : blockTail.output;
|
|
|
19959
19983
|
];
|
|
19960
19984
|
const answerSource = answerSources.find(({ answers }) => answers !== null);
|
|
19961
19985
|
if (!answerSource?.answers) return null;
|
|
19962
|
-
const result =
|
|
19986
|
+
const result = /* @__PURE__ */ Object.create(null);
|
|
19963
19987
|
for (const [index, question] of meta.questions.entries()) {
|
|
19988
|
+
if (question.note && answerSource.source === "lody") {
|
|
19989
|
+
const note = answerSource.answers[question.note.fieldId];
|
|
19990
|
+
if (typeof note === "string" && note.trim()) result[question.note.fieldId] = note;
|
|
19991
|
+
}
|
|
19964
19992
|
const key2 = getAskUserQuestionAnswerKey(meta.questions, index);
|
|
19965
19993
|
const sourceKey = answerSource.source === "claude" ? getAskUserQuestionAnswerKey(meta.questions.map(({ id: _id, ...item }) => item), index) : key2;
|
|
19966
19994
|
const raw2 = answerSource.answers[sourceKey];
|
|
@@ -20030,20 +20058,37 @@ ${outputTail}` : blockTail.output;
|
|
|
20030
20058
|
const entries = Object.entries(schema2.properties);
|
|
20031
20059
|
const requestMeta = getLodyElicitationMeta(request2._meta);
|
|
20032
20060
|
const customFieldKeyByQuestionId = /* @__PURE__ */ new Map();
|
|
20061
|
+
const noteFieldKeyByQuestionId = /* @__PURE__ */ new Map();
|
|
20062
|
+
const associatedFields = /* @__PURE__ */ new Set();
|
|
20033
20063
|
for (const [key2, prop] of entries) {
|
|
20034
20064
|
if (!isRecord$b(prop)) continue;
|
|
20065
|
+
const rawMeta = getLodyMeta(prop._meta)?.elicitation;
|
|
20066
|
+
if (isRecord$b(rawMeta) && rawMeta.noteFor !== void 0 && rawMeta.version !== 1) return null;
|
|
20035
20067
|
const meta = getLodyElicitationMeta(prop._meta);
|
|
20036
|
-
if (
|
|
20037
|
-
|
|
20038
|
-
|
|
20039
|
-
|
|
20040
|
-
|
|
20041
|
-
|
|
20068
|
+
if (!meta || meta.noteFor === void 0 && meta.customAnswerFor === void 0) continue;
|
|
20069
|
+
if (meta.noteFor !== void 0 && meta.customAnswerFor !== void 0) return null;
|
|
20070
|
+
const target = meta.noteFor ?? meta.customAnswerFor;
|
|
20071
|
+
const fields = meta.noteFor !== void 0 ? noteFieldKeyByQuestionId : customFieldKeyByQuestionId;
|
|
20072
|
+
if (typeof target !== "string" || !target.trim() || !key2.trim() || key2 === target || !isFreeTextProperty(prop) || fields.has(target)) return null;
|
|
20073
|
+
if (meta.noteFor !== void 0 && Array.isArray(schema2.required) && schema2.required.includes(key2)) return null;
|
|
20074
|
+
fields.set(target, key2);
|
|
20075
|
+
associatedFields.add(key2);
|
|
20076
|
+
}
|
|
20077
|
+
const isLodyForm = requestMeta !== null || associatedFields.size > 0;
|
|
20078
|
+
const questionEntries = entries.filter(([key2, prop]) => {
|
|
20042
20079
|
if (!isRecord$b(prop)) return false;
|
|
20043
|
-
if (
|
|
20080
|
+
if (associatedFields.has(key2)) return false;
|
|
20044
20081
|
return isQuestionProperty(prop) || isLodyForm && isFreeTextProperty(prop);
|
|
20045
20082
|
});
|
|
20046
20083
|
if (questionEntries.length === 0) return null;
|
|
20084
|
+
const questionIds = new Set(questionEntries.map(([key2]) => key2));
|
|
20085
|
+
for (const target of [
|
|
20086
|
+
...customFieldKeyByQuestionId.keys(),
|
|
20087
|
+
...noteFieldKeyByQuestionId.keys()
|
|
20088
|
+
]) {
|
|
20089
|
+
if (!questionIds.has(target)) return null;
|
|
20090
|
+
}
|
|
20091
|
+
if (associatedFields.size > 0 && questionEntries.some(([key2]) => !key2.trim())) return null;
|
|
20047
20092
|
const singleQuestion = questionEntries.length === 1;
|
|
20048
20093
|
const allowCustomAnswer = isLodyForm ? questionEntries.some(([key2, prop]) => isRecord$b(prop) && (getEnumOptionSource(prop) === null || customFieldKeyByQuestionId.has(key2))) : entries.some(([, prop]) => isFreeTextProperty(prop));
|
|
20049
20094
|
const message = typeof request2.message === "string" ? request2.message : "";
|
|
@@ -20055,6 +20100,8 @@ ${outputTail}` : blockTail.output;
|
|
|
20055
20100
|
const source = getEnumOptionSource(prop);
|
|
20056
20101
|
const header = typeof prop.title === "string" ? prop.title : "";
|
|
20057
20102
|
const description2 = typeof prop.description === "string" ? prop.description : "";
|
|
20103
|
+
const noteFieldId = noteFieldKeyByQuestionId.get(key2);
|
|
20104
|
+
const noteProp = noteFieldId === void 0 ? void 0 : schema2.properties[noteFieldId];
|
|
20058
20105
|
const question = singleQuestion ? message || description2 || header : description2 || message || header;
|
|
20059
20106
|
questions.push({
|
|
20060
20107
|
...isLodyForm ? {
|
|
@@ -20064,11 +20111,25 @@ ${outputTail}` : blockTail.output;
|
|
|
20064
20111
|
header,
|
|
20065
20112
|
options: source ? parseElicitationOptions(source) : [],
|
|
20066
20113
|
multiSelect: isMultiSelectProperty(prop),
|
|
20067
|
-
...isLodyForm
|
|
20068
|
-
allowCustomAnswer:
|
|
20114
|
+
...isLodyForm ? {
|
|
20115
|
+
allowCustomAnswer: source === null || customFieldKeyByQuestionId.has(key2)
|
|
20069
20116
|
} : {},
|
|
20070
20117
|
...isLodyForm && getLodyElicitationMeta(prop._meta)?.secret === true ? {
|
|
20071
20118
|
isSecret: true
|
|
20119
|
+
} : {},
|
|
20120
|
+
...noteFieldId !== void 0 && isRecord$b(noteProp) ? {
|
|
20121
|
+
note: {
|
|
20122
|
+
fieldId: noteFieldId,
|
|
20123
|
+
...typeof noteProp.title === "string" ? {
|
|
20124
|
+
title: noteProp.title
|
|
20125
|
+
} : {},
|
|
20126
|
+
...typeof noteProp.description === "string" ? {
|
|
20127
|
+
description: noteProp.description
|
|
20128
|
+
} : {},
|
|
20129
|
+
...getLodyElicitationMeta(noteProp._meta)?.secret === true ? {
|
|
20130
|
+
isSecret: true
|
|
20131
|
+
} : {}
|
|
20132
|
+
}
|
|
20072
20133
|
} : {}
|
|
20073
20134
|
});
|
|
20074
20135
|
fieldKeys.push(key2);
|
|
@@ -20107,15 +20168,18 @@ ${outputTail}` : blockTail.output;
|
|
|
20107
20168
|
content: {}
|
|
20108
20169
|
};
|
|
20109
20170
|
}
|
|
20110
|
-
const content =
|
|
20111
|
-
elicitation.meta.questions.forEach((
|
|
20171
|
+
const content = /* @__PURE__ */ Object.create(null);
|
|
20172
|
+
elicitation.meta.questions.forEach((question, index) => {
|
|
20173
|
+
if (question.note) {
|
|
20174
|
+
const note = answers[question.note.fieldId];
|
|
20175
|
+
if (typeof note === "string") content[question.note.fieldId] = note;
|
|
20176
|
+
}
|
|
20112
20177
|
const fieldKey = elicitation.fieldKeys[index];
|
|
20113
20178
|
if (!fieldKey) return;
|
|
20114
20179
|
const value = answers[getAskUserQuestionAnswerKey(elicitation.meta.questions, index)];
|
|
20115
20180
|
if (value === void 0) return;
|
|
20116
20181
|
const customFieldKey = elicitation.customFieldKeys?.[index];
|
|
20117
|
-
const
|
|
20118
|
-
const isCustomValue = typeof value === "string" && selectedQuestion !== void 0 && selectedQuestion.options.length > 0 && !selectedQuestion.options.some((option2) => option2.label === value);
|
|
20182
|
+
const isCustomValue = typeof value === "string" && question.options.length > 0 && !question.options.some((option2) => option2.label === value);
|
|
20119
20183
|
content[isCustomValue && customFieldKey ? customFieldKey : fieldKey] = value;
|
|
20120
20184
|
});
|
|
20121
20185
|
return {
|
|
@@ -22504,6 +22568,7 @@ ${tailedOutput}` : null;
|
|
|
22504
22568
|
const LODY_PRESENCE_CHANNEL = "presence";
|
|
22505
22569
|
const LODY_PRESENCE_TTL_MS = 9e4;
|
|
22506
22570
|
const LODY_PRESENCE_HEARTBEAT_MS = 3e4;
|
|
22571
|
+
const LODY_PRESENCE_DETAIL_MAX_LENGTH = 280;
|
|
22507
22572
|
const omitNullValues = (value) => {
|
|
22508
22573
|
if (typeof value !== "object" || value === null || Array.isArray(value)) return value;
|
|
22509
22574
|
const out = {};
|
|
@@ -22518,8 +22583,7 @@ ${tailedOutput}` : null;
|
|
|
22518
22583
|
type: literal$1("running"),
|
|
22519
22584
|
activity: _enum$1([
|
|
22520
22585
|
"image_generation"
|
|
22521
|
-
]).optional()
|
|
22522
|
-
detail: string$1().min(1).max(280).optional()
|
|
22586
|
+
]).optional()
|
|
22523
22587
|
}),
|
|
22524
22588
|
object$1({
|
|
22525
22589
|
type: literal$1("requestPermission")
|
|
@@ -22532,7 +22596,7 @@ ${tailedOutput}` : null;
|
|
|
22532
22596
|
"acp",
|
|
22533
22597
|
"resuming"
|
|
22534
22598
|
]).optional(),
|
|
22535
|
-
detail: string$1().optional()
|
|
22599
|
+
detail: string$1().max(LODY_PRESENCE_DETAIL_MAX_LENGTH).optional()
|
|
22536
22600
|
})
|
|
22537
22601
|
]));
|
|
22538
22602
|
const PresenceInstanceIdSchema = string$1().min(1).transform((value) => {
|
|
@@ -23353,7 +23417,8 @@ ${tailedOutput}` : null;
|
|
|
23353
23417
|
"something to ask about each time. Skip it only when the user interrupts you or asks",
|
|
23354
23418
|
"for something that overrides it \u2014 in that case say so instead of pushing silently."
|
|
23355
23419
|
].join(" ");
|
|
23356
|
-
const
|
|
23420
|
+
const GH_AUTH_INSTRUCTION = "Use `gh` from the current PATH. `gh` signs in with the GitHub login saved on this machine, which sandboxed commands usually cannot read, so run the `gh` commands that talk to GitHub outside the sandbox (request approval if your tool requires it). Ask the user to log in only if authentication still fails there. Verify that the pushed commit matches the PR head, then report the PR URL.";
|
|
23421
|
+
const CREATE_PR_BASE_PROMPT = `Create a PR for the current worktree (a regular PR, not a draft). ${GH_AUTH_INSTRUCTION}`;
|
|
23357
23422
|
const withPrBranchUpkeep = (basePrompt, upkeep) => `${basePrompt}
|
|
23358
23423
|
|
|
23359
23424
|
${upkeep}`;
|
|
@@ -65740,8 +65805,35 @@ ${this.stack.split("\n").slice(1).join("\n")}` : this.toString();
|
|
|
65740
65805
|
}
|
|
65741
65806
|
return [];
|
|
65742
65807
|
}
|
|
65808
|
+
const settleContextCompactionMarkers = (items2) => {
|
|
65809
|
+
let lastMarkerIndex = -1;
|
|
65810
|
+
for (let i2 = items2.length - 1; i2 >= 0; i2--) {
|
|
65811
|
+
const item = items2[i2];
|
|
65812
|
+
if (item?.type === "tool_call" && item.activityKind === "context_compaction") {
|
|
65813
|
+
lastMarkerIndex = i2;
|
|
65814
|
+
break;
|
|
65815
|
+
}
|
|
65816
|
+
}
|
|
65817
|
+
if (lastMarkerIndex < 0) return void 0;
|
|
65818
|
+
let changed = false;
|
|
65819
|
+
const settled = [];
|
|
65820
|
+
for (let i2 = 0; i2 < items2.length; i2++) {
|
|
65821
|
+
const item = items2[i2];
|
|
65822
|
+
if (!item) continue;
|
|
65823
|
+
if (item.type !== "tool_call" || item.activityKind !== "context_compaction" || item.status !== "pending" && item.status !== "in_progress") {
|
|
65824
|
+
settled.push(item);
|
|
65825
|
+
continue;
|
|
65826
|
+
}
|
|
65827
|
+
changed = true;
|
|
65828
|
+
if (i2 === lastMarkerIndex) settled.push({
|
|
65829
|
+
...item,
|
|
65830
|
+
status: "failed"
|
|
65831
|
+
});
|
|
65832
|
+
}
|
|
65833
|
+
return changed ? settled : void 0;
|
|
65834
|
+
};
|
|
65743
65835
|
const markAssistantTurnFinished = (history, options) => {
|
|
65744
|
-
const { turnId, endedAt, permissionWaitMs
|
|
65836
|
+
const { turnId, endedAt, permissionWaitMs } = options;
|
|
65745
65837
|
for (let i2 = history.length - 1; i2 >= 0; i2--) {
|
|
65746
65838
|
const entry = history[i2];
|
|
65747
65839
|
if (entry && entry.role === "assistant" && (!turnId || entry.id === turnId)) {
|
|
@@ -65755,19 +65847,9 @@ ${this.stack.split("\n").slice(1).join("\n")}` : this.toString();
|
|
|
65755
65847
|
};
|
|
65756
65848
|
}
|
|
65757
65849
|
}
|
|
65758
|
-
if (
|
|
65759
|
-
|
|
65760
|
-
|
|
65761
|
-
if (item.type !== "tool_call" || item.activityKind !== "context_compaction" || item.status !== "pending" && item.status !== "in_progress") {
|
|
65762
|
-
return item;
|
|
65763
|
-
}
|
|
65764
|
-
changed = true;
|
|
65765
|
-
return {
|
|
65766
|
-
...item,
|
|
65767
|
-
status: "failed"
|
|
65768
|
-
};
|
|
65769
|
-
});
|
|
65770
|
-
if (changed) entry.items = items2;
|
|
65850
|
+
if (entry.items) {
|
|
65851
|
+
const settled = settleContextCompactionMarkers(entry.items);
|
|
65852
|
+
if (settled) entry.items = settled;
|
|
65771
65853
|
}
|
|
65772
65854
|
if (entry.finished === true && !options.force) break;
|
|
65773
65855
|
entry.finished = true;
|
|
@@ -66619,6 +66701,18 @@ ${this.stack.split("\n").slice(1).join("\n")}` : this.toString();
|
|
|
66619
66701
|
state: "invalid"
|
|
66620
66702
|
};
|
|
66621
66703
|
};
|
|
66704
|
+
const readField = (value, key2) => {
|
|
66705
|
+
if (isContainer(value)) return value.kind() === "Map" ? value.get(key2) : void 0;
|
|
66706
|
+
return value && typeof value === "object" && !Array.isArray(value) ? value[key2] : void 0;
|
|
66707
|
+
};
|
|
66708
|
+
const readString$1 = (value) => {
|
|
66709
|
+
if (typeof value === "string") return value;
|
|
66710
|
+
return isContainer(value) && value.kind() === "Text" ? value.toString() : void 0;
|
|
66711
|
+
};
|
|
66712
|
+
const readLength = (value) => {
|
|
66713
|
+
if (Array.isArray(value)) return value.length;
|
|
66714
|
+
return isContainer(value) && value.kind() === "List" ? value.length : 0;
|
|
66715
|
+
};
|
|
66622
66716
|
function createLoroSessionData(options) {
|
|
66623
66717
|
const { sessionId, doc } = options;
|
|
66624
66718
|
const writer = options.writer ?? createHistoryWriter(doc);
|
|
@@ -66811,6 +66905,20 @@ ${this.stack.split("\n").slice(1).join("\n")}` : this.toString();
|
|
|
66811
66905
|
count() {
|
|
66812
66906
|
return list2.length;
|
|
66813
66907
|
},
|
|
66908
|
+
readModelSummaryAt(position) {
|
|
66909
|
+
if (position < 0 || position >= list2.length) return void 0;
|
|
66910
|
+
const value = list2.get(position);
|
|
66911
|
+
const model = readField(value, "modelInfo");
|
|
66912
|
+
return {
|
|
66913
|
+
role: readString$1(readField(value, "role")),
|
|
66914
|
+
modelInfo: {
|
|
66915
|
+
modelId: readString$1(readField(model, "modelId")),
|
|
66916
|
+
name: readString$1(readField(model, "name"))
|
|
66917
|
+
},
|
|
66918
|
+
itemCount: readLength(readField(value, "items")),
|
|
66919
|
+
planCount: readLength(readField(value, "plan"))
|
|
66920
|
+
};
|
|
66921
|
+
},
|
|
66814
66922
|
readAt(position) {
|
|
66815
66923
|
return readSlot(list2, position);
|
|
66816
66924
|
},
|
|
@@ -83572,6 +83680,7 @@ ${val.stack}`;
|
|
|
83572
83680
|
machineKey = null;
|
|
83573
83681
|
sessionKeys = /* @__PURE__ */ new Map();
|
|
83574
83682
|
machineHeartbeatSeq = 0;
|
|
83683
|
+
heartbeatDeliveryProbe = null;
|
|
83575
83684
|
sessionPresenceSeq = 0;
|
|
83576
83685
|
started = false;
|
|
83577
83686
|
stopped = false;
|
|
@@ -83797,7 +83906,54 @@ ${val.stack}`;
|
|
|
83797
83906
|
updatedAt: getServerNow()
|
|
83798
83907
|
};
|
|
83799
83908
|
this.writeLocalOrigin(this.machineKey, state2);
|
|
83800
|
-
this.options.logger.debug(`[${this.options.workspaceId}] Loro presence machine heartbeat written (seq=${seq2} updatedAt=${state2.updatedAt})`);
|
|
83909
|
+
this.options.logger.debug(`[${this.options.workspaceId}] Loro presence machine heartbeat written (seq=${seq2} updatedAt=${state2.updatedAt})${this.describePresenceWriteQueue()}`);
|
|
83910
|
+
this.observeHeartbeatDelivery(seq2, state2.updatedAt);
|
|
83911
|
+
}
|
|
83912
|
+
describePresenceWriteQueue() {
|
|
83913
|
+
const subscription = this.subscription;
|
|
83914
|
+
if (!subscription) return "";
|
|
83915
|
+
const parts2 = [
|
|
83916
|
+
`queued=${subscription.pendingLocalCount}`,
|
|
83917
|
+
`room=${subscription.status}`
|
|
83918
|
+
];
|
|
83919
|
+
const { lastLocalAppendAtMs } = subscription;
|
|
83920
|
+
if (lastLocalAppendAtMs !== void 0) {
|
|
83921
|
+
parts2.push(`sinceLastAppendMs=${Math.max(0, Date.now() - lastLocalAppendAtMs)}`);
|
|
83922
|
+
}
|
|
83923
|
+
const { lastWriteError } = subscription;
|
|
83924
|
+
if (lastWriteError) {
|
|
83925
|
+
parts2.push(`writeError=${lastWriteError.code}`, `writeErrorRetryable=${lastWriteError.retryable}`);
|
|
83926
|
+
}
|
|
83927
|
+
const unacked = this.heartbeatDeliveryProbe;
|
|
83928
|
+
if (unacked) {
|
|
83929
|
+
parts2.push(`unackedHeartbeatSeq=${unacked.seq}`, `unackedForMs=${Math.max(0, getServerNow() - unacked.enqueuedAtMs)}`);
|
|
83930
|
+
}
|
|
83931
|
+
return ` ${parts2.join(" ")}`;
|
|
83932
|
+
}
|
|
83933
|
+
observeHeartbeatDelivery(seq2, enqueuedAtMs) {
|
|
83934
|
+
const subscription = this.subscription;
|
|
83935
|
+
if (!subscription || this.heartbeatDeliveryProbe) return;
|
|
83936
|
+
const queuedAhead = Math.max(0, subscription.pendingLocalCount - 1);
|
|
83937
|
+
const probe = {
|
|
83938
|
+
seq: seq2,
|
|
83939
|
+
enqueuedAtMs
|
|
83940
|
+
};
|
|
83941
|
+
this.heartbeatDeliveryProbe = probe;
|
|
83942
|
+
void subscription.waitUntilSynced().then(() => {
|
|
83943
|
+
const ageAtSendMs = Math.max(0, getServerNow() - enqueuedAtMs);
|
|
83944
|
+
const detail = `[${this.options.workspaceId}] Loro presence machine heartbeat delivered (seq=${seq2} queuedAhead=${queuedAhead} ageAtSendMs=${ageAtSendMs})`;
|
|
83945
|
+
if (ageAtSendMs >= LODY_PRESENCE_TTL_MS) {
|
|
83946
|
+
this.options.logger.warn(`${detail}: older than the ${LODY_PRESENCE_TTL_MS}ms freshness window on arrival, so readers still report this machine offline`);
|
|
83947
|
+
return;
|
|
83948
|
+
}
|
|
83949
|
+
this.options.logger.debug(detail);
|
|
83950
|
+
}).catch((error2) => {
|
|
83951
|
+
this.options.logger.debug(`[${this.options.workspaceId}] Loro presence machine heartbeat delivery unobserved (seq=${seq2} queuedAhead=${queuedAhead}): ${formatErrorMessage(error2)}`);
|
|
83952
|
+
}).finally(() => {
|
|
83953
|
+
if (this.heartbeatDeliveryProbe === probe) {
|
|
83954
|
+
this.heartbeatDeliveryProbe = null;
|
|
83955
|
+
}
|
|
83956
|
+
});
|
|
83801
83957
|
}
|
|
83802
83958
|
setSessionPresence(args2) {
|
|
83803
83959
|
if (this.stopped) return;
|
|
@@ -84105,6 +84261,73 @@ ${val.stack}`;
|
|
|
84105
84261
|
}
|
|
84106
84262
|
};
|
|
84107
84263
|
};
|
|
84264
|
+
function projectAssistantModel(entry) {
|
|
84265
|
+
if (!entry.items?.length && !entry.plan?.length) return void 0;
|
|
84266
|
+
const value = entry.modelInfo;
|
|
84267
|
+
const model = value && typeof value === "object" && !Array.isArray(value) ? value : {};
|
|
84268
|
+
const modelId = typeof model.modelId === "string" ? model.modelId.trim() : "";
|
|
84269
|
+
const name2 = typeof model.name === "string" ? model.name.trim() : "";
|
|
84270
|
+
return {
|
|
84271
|
+
...modelId ? {
|
|
84272
|
+
modelId
|
|
84273
|
+
} : {},
|
|
84274
|
+
...name2 ? {
|
|
84275
|
+
name: name2
|
|
84276
|
+
} : {}
|
|
84277
|
+
};
|
|
84278
|
+
}
|
|
84279
|
+
function latestSessionModelFromReader(history) {
|
|
84280
|
+
for (let index = history.count() - 1; index >= 0; index--) {
|
|
84281
|
+
const summary2 = history.readModelSummaryAt(index);
|
|
84282
|
+
if (summary2?.role !== "assistant") continue;
|
|
84283
|
+
const model = projectAssistantModel({
|
|
84284
|
+
modelInfo: summary2.modelInfo,
|
|
84285
|
+
items: {
|
|
84286
|
+
length: summary2.itemCount
|
|
84287
|
+
},
|
|
84288
|
+
plan: {
|
|
84289
|
+
length: summary2.planCount
|
|
84290
|
+
}
|
|
84291
|
+
});
|
|
84292
|
+
if (model !== void 0) return model;
|
|
84293
|
+
}
|
|
84294
|
+
return null;
|
|
84295
|
+
}
|
|
84296
|
+
function attachSessionModelSummary(source, publish2, onError) {
|
|
84297
|
+
let disposed = false;
|
|
84298
|
+
let running2;
|
|
84299
|
+
let dirty = false;
|
|
84300
|
+
const sync2 = () => {
|
|
84301
|
+
dirty = true;
|
|
84302
|
+
if (running2 || disposed) return running2 ?? Promise.resolve();
|
|
84303
|
+
running2 = Promise.resolve().then(async () => {
|
|
84304
|
+
while (dirty) {
|
|
84305
|
+
if (disposed) break;
|
|
84306
|
+
dirty = false;
|
|
84307
|
+
const model = source.latestModel();
|
|
84308
|
+
await publish2(model, () => !disposed);
|
|
84309
|
+
}
|
|
84310
|
+
}).catch(onError).finally(() => {
|
|
84311
|
+
running2 = void 0;
|
|
84312
|
+
if (dirty && !disposed) void sync2();
|
|
84313
|
+
});
|
|
84314
|
+
return running2;
|
|
84315
|
+
};
|
|
84316
|
+
const unsubscribe = source.subscribe(() => {
|
|
84317
|
+
void sync2();
|
|
84318
|
+
});
|
|
84319
|
+
return {
|
|
84320
|
+
sync: sync2,
|
|
84321
|
+
flush: async () => {
|
|
84322
|
+
await sync2();
|
|
84323
|
+
for (let pending2 = running2; pending2; pending2 = running2) await pending2;
|
|
84324
|
+
},
|
|
84325
|
+
dispose: () => {
|
|
84326
|
+
disposed = true;
|
|
84327
|
+
unsubscribe();
|
|
84328
|
+
}
|
|
84329
|
+
};
|
|
84330
|
+
}
|
|
84108
84331
|
const STREAMS_TRANSPORT_ID = "streams";
|
|
84109
84332
|
const isRecoverableStreamsRoomStatus = (status) => status === "disconnected" || status === "error";
|
|
84110
84333
|
function streamsRoomBinding(sub) {
|
|
@@ -107853,6 +108076,7 @@ ${value}`;
|
|
|
107853
108076
|
detachDocRoomStatusListener = null;
|
|
107854
108077
|
docRoomStatusListeners = /* @__PURE__ */ new Set();
|
|
107855
108078
|
historyAutoReadHandle = null;
|
|
108079
|
+
modelSummary = null;
|
|
107856
108080
|
destroyed = false;
|
|
107857
108081
|
sessionDataInstance = null;
|
|
107858
108082
|
get isDestroyed() {
|
|
@@ -107861,6 +108085,8 @@ ${value}`;
|
|
|
107861
108085
|
remoteSyncReady = Promise.resolve();
|
|
107862
108086
|
roomId = "";
|
|
107863
108087
|
composeSessionData(doc, initialState) {
|
|
108088
|
+
this.modelSummary?.dispose();
|
|
108089
|
+
this.modelSummary = null;
|
|
107864
108090
|
this.historyAutoReadHandle?.dispose();
|
|
107865
108091
|
this.historyAutoReadHandle = null;
|
|
107866
108092
|
this.mirror?.dispose();
|
|
@@ -107908,6 +108134,30 @@ ${value}`;
|
|
|
107908
108134
|
if (this.historyAutoReadHandle) return;
|
|
107909
108135
|
this.historyAutoReadHandle = attachAutoMarkLatestUserHistoryAsRead(this.sessionData, (id2) => this.agentWrites.markTurnSeen(id2));
|
|
107910
108136
|
}
|
|
108137
|
+
attachModelSummary() {
|
|
108138
|
+
if (this.modelSummary) return;
|
|
108139
|
+
this.modelSummary = attachSessionModelSummary({
|
|
108140
|
+
subscribe: (listener) => {
|
|
108141
|
+
const observation = this.sessionData.history.observe(() => listener());
|
|
108142
|
+
return () => observation.unsubscribe();
|
|
108143
|
+
},
|
|
108144
|
+
latestModel: () => latestSessionModelFromReader(this.sessionData.history)
|
|
108145
|
+
}, async (lastModel, active2) => {
|
|
108146
|
+
const current2 = await this.repo.getDocMeta(this.roomId);
|
|
108147
|
+
const meta = current2?.meta;
|
|
108148
|
+
if (!active2() || !current2 || isLoroRepoDocDeleted(current2) || meta?.id !== this.sessionId) return false;
|
|
108149
|
+
if (JSON.stringify(meta.lastModel) !== JSON.stringify(lastModel)) {
|
|
108150
|
+
await this.repo.upsertDocMeta(this.roomId, {
|
|
108151
|
+
lastModel
|
|
108152
|
+
});
|
|
108153
|
+
}
|
|
108154
|
+
return true;
|
|
108155
|
+
}, () => this.logger.warn(`[${this.sessionId}] Failed to publish model summary; retry on next history change`));
|
|
108156
|
+
if (this.sessionData.history.count() > 0) void this.modelSummary.sync();
|
|
108157
|
+
}
|
|
108158
|
+
async syncModelSummary() {
|
|
108159
|
+
await this.modelSummary?.flush();
|
|
108160
|
+
}
|
|
107911
108161
|
get sessionData() {
|
|
107912
108162
|
if (!this.sessionDataInstance) throw new Error("SessionDocument not initialized");
|
|
107913
108163
|
return this.sessionDataInstance;
|
|
@@ -107934,6 +108184,7 @@ ${value}`;
|
|
|
107934
108184
|
this.composeSessionData(this.handle.doc);
|
|
107935
108185
|
if (!options.skipAutoRead) {
|
|
107936
108186
|
this.attachAutoRead();
|
|
108187
|
+
this.attachModelSummary();
|
|
107937
108188
|
await this.markLatestUserHistoryAsSeenIfNeeded();
|
|
107938
108189
|
}
|
|
107939
108190
|
this.remoteSyncReady = this.startDocRoomSync();
|
|
@@ -107999,6 +108250,7 @@ ${value}`;
|
|
|
107999
108250
|
this.detachDocRoomStatusListener = null;
|
|
108000
108251
|
this.composeSessionData(this.handle.doc, initialState);
|
|
108001
108252
|
this.attachAutoRead();
|
|
108253
|
+
this.attachModelSummary();
|
|
108002
108254
|
}
|
|
108003
108255
|
async startDocRoomSync() {
|
|
108004
108256
|
const MAX_JOIN_RETRIES = 8;
|
|
@@ -108646,7 +108898,10 @@ ${value}`;
|
|
|
108646
108898
|
if (!this.mirror) {
|
|
108647
108899
|
return;
|
|
108648
108900
|
}
|
|
108901
|
+
await this.modelSummary?.flush();
|
|
108649
108902
|
this.destroyed = true;
|
|
108903
|
+
this.modelSummary?.dispose();
|
|
108904
|
+
this.modelSummary = null;
|
|
108650
108905
|
this.historyAutoReadHandle?.dispose();
|
|
108651
108906
|
this.historyAutoReadHandle = null;
|
|
108652
108907
|
const status = await this.getStatus();
|
|
@@ -118253,7 +118508,7 @@ ${value}`;
|
|
|
118253
118508
|
highWaterMark
|
|
118254
118509
|
}));
|
|
118255
118510
|
}
|
|
118256
|
-
const version$8 = "1.
|
|
118511
|
+
const version$8 = "1.12.0";
|
|
118257
118512
|
const dependencies$1 = {
|
|
118258
118513
|
"@openai/codex": "^0.154.0"
|
|
118259
118514
|
};
|
|
@@ -118402,12 +118657,12 @@ ${value}`;
|
|
|
118402
118657
|
version: version$3,
|
|
118403
118658
|
artifacts
|
|
118404
118659
|
};
|
|
118405
|
-
const version$2 = "0.
|
|
118660
|
+
const version$2 = "2.0.0-lody.604d581e5552";
|
|
118406
118661
|
const minNodeVersion$1 = "22.19.0";
|
|
118407
118662
|
const artifact$1 = {
|
|
118408
|
-
"fileName": "lody-kimi-code-0.
|
|
118409
|
-
"sha256": "
|
|
118410
|
-
"size":
|
|
118663
|
+
"fileName": "lody-kimi-code-2.0.0-lody.604d581e5552-89c4a571d63be816.tar.zst",
|
|
118664
|
+
"sha256": "89c4a571d63be816cacbd42f63e0930b55081f8d955032c87d187fe5be72affe",
|
|
118665
|
+
"size": 3276949,
|
|
118411
118666
|
"compression": "zstd",
|
|
118412
118667
|
"cmd": "package/dist/main.mjs"
|
|
118413
118668
|
};
|
|
@@ -118419,9 +118674,9 @@ ${value}`;
|
|
|
118419
118674
|
const version$1 = "0.1.0-lody.d91f9db0c6dc";
|
|
118420
118675
|
const minNodeVersion = "22.19.0";
|
|
118421
118676
|
const artifact = {
|
|
118422
|
-
"fileName": "lody-pi-0.1.0-lody.d91f9db0c6dc-
|
|
118423
|
-
"sha256": "
|
|
118424
|
-
"size":
|
|
118677
|
+
"fileName": "lody-pi-0.1.0-lody.d91f9db0c6dc-a77777e554326765.tar.zst",
|
|
118678
|
+
"sha256": "a77777e554326765defdaee121971979814a59c6e936be325468e4eff7f3437e",
|
|
118679
|
+
"size": 39451191,
|
|
118425
118680
|
"compression": "zstd",
|
|
118426
118681
|
"cmd": "package/dist/index.js"
|
|
118427
118682
|
};
|
|
@@ -118431,6 +118686,7 @@ ${value}`;
|
|
|
118431
118686
|
artifact
|
|
118432
118687
|
};
|
|
118433
118688
|
const COMPLETE_MARKER$1 = ".lody-complete";
|
|
118689
|
+
const MANAGED_RUNTIME_PROGRESS_MIN_INTERVAL_MS = 500;
|
|
118434
118690
|
function managedRuntimeAbortError(signal) {
|
|
118435
118691
|
return signal.reason instanceof Error ? signal.reason : new DOMException("Managed runtime extraction was cancelled", "AbortError");
|
|
118436
118692
|
}
|
|
@@ -118655,57 +118911,57 @@ ${value}`;
|
|
|
118655
118911
|
platforms: {
|
|
118656
118912
|
"darwin-arm64": {
|
|
118657
118913
|
fileName: `xai-official-grok-darwin-arm64-${GROK_BUILD_RUNTIME_VERSION}.tar.zst`,
|
|
118658
|
-
sha256: "
|
|
118659
|
-
size:
|
|
118914
|
+
sha256: "70aababd9c901d91f3565e19f7f389a8670c05ad819e41c2946d775f8ecee8e6",
|
|
118915
|
+
size: 50707087,
|
|
118660
118916
|
compression: "zstd",
|
|
118661
118917
|
cmd: "grok",
|
|
118662
|
-
executableSha256: "
|
|
118663
|
-
executableSize:
|
|
118918
|
+
executableSha256: "9cd26b579840f0f5c9148a8059ad651904c08b41b7f2ef0b4ec04b9ba898844e",
|
|
118919
|
+
executableSize: 143016096
|
|
118664
118920
|
},
|
|
118665
118921
|
"darwin-x64": {
|
|
118666
118922
|
fileName: `xai-official-grok-darwin-x64-${GROK_BUILD_RUNTIME_VERSION}.tar.zst`,
|
|
118667
|
-
sha256: "
|
|
118668
|
-
size:
|
|
118923
|
+
sha256: "cfd7f9165f06808e766088571c7e29ee3afcb4a33af6eb5e1bec704712a2b1b1",
|
|
118924
|
+
size: 55658803,
|
|
118669
118925
|
compression: "zstd",
|
|
118670
118926
|
cmd: "grok",
|
|
118671
|
-
executableSha256: "
|
|
118672
|
-
executableSize:
|
|
118927
|
+
executableSha256: "4125f6a9a7524396430f8904a0855100d12a921fcfca4f4380853a39f4ff1d03",
|
|
118928
|
+
executableSize: 160175824
|
|
118673
118929
|
},
|
|
118674
118930
|
"linux-arm64": {
|
|
118675
118931
|
fileName: `xai-official-grok-linux-arm64-${GROK_BUILD_RUNTIME_VERSION}.tar.zst`,
|
|
118676
|
-
sha256: "
|
|
118677
|
-
size:
|
|
118932
|
+
sha256: "c1af4513ad7bc0e9d7d4f59540e0a76f7f57f38f1940bc17c9886824532e485a",
|
|
118933
|
+
size: 52918676,
|
|
118678
118934
|
compression: "zstd",
|
|
118679
118935
|
cmd: "grok",
|
|
118680
|
-
executableSha256: "
|
|
118681
|
-
executableSize:
|
|
118936
|
+
executableSha256: "39ab87666877d64ef3a40aa60fbe0c3b6a6acd7001b78fe60e2c76bb6cfc4a94",
|
|
118937
|
+
executableSize: 136090504
|
|
118682
118938
|
},
|
|
118683
118939
|
"linux-x64": {
|
|
118684
118940
|
fileName: `xai-official-grok-linux-x64-${GROK_BUILD_RUNTIME_VERSION}.tar.zst`,
|
|
118685
|
-
sha256: "
|
|
118686
|
-
size:
|
|
118941
|
+
sha256: "565d2463ca2411bdcfe84a6a0dc5e388ed1347004e5e9e6cbb800339a4d5ca5b",
|
|
118942
|
+
size: 55948155,
|
|
118687
118943
|
compression: "zstd",
|
|
118688
118944
|
cmd: "grok",
|
|
118689
|
-
executableSha256: "
|
|
118690
|
-
executableSize:
|
|
118945
|
+
executableSha256: "be5905e107d2b8b5f3c142d21ecfe4c8fd32a913d2fd551b788707930c4dc80d",
|
|
118946
|
+
executableSize: 163035648
|
|
118691
118947
|
},
|
|
118692
118948
|
"win32-arm64": {
|
|
118693
118949
|
fileName: `xai-official-grok-win32-arm64-${GROK_BUILD_RUNTIME_VERSION}.tar.zst`,
|
|
118694
|
-
sha256: "
|
|
118695
|
-
size:
|
|
118950
|
+
sha256: "d8b9ef499ce54510c49c1104d0f42ec6573828f4a10f019d8ba4518831eaa7c5",
|
|
118951
|
+
size: 49392602,
|
|
118696
118952
|
compression: "zstd",
|
|
118697
118953
|
cmd: "grok.exe",
|
|
118698
|
-
executableSha256: "
|
|
118699
|
-
executableSize:
|
|
118954
|
+
executableSha256: "2a633b50420838ba0b31bdbaf9137f4ee8726f1ce4d8e9af21b11af1579909b7",
|
|
118955
|
+
executableSize: 130797568
|
|
118700
118956
|
},
|
|
118701
118957
|
"win32-x64": {
|
|
118702
118958
|
fileName: `xai-official-grok-win32-x64-${GROK_BUILD_RUNTIME_VERSION}.tar.zst`,
|
|
118703
|
-
sha256: "
|
|
118704
|
-
size:
|
|
118959
|
+
sha256: "353d0f9a88cb88f341983da031026a13b9a80ffb2cc43596945b80e1aa5121aa",
|
|
118960
|
+
size: 52683977,
|
|
118705
118961
|
compression: "zstd",
|
|
118706
118962
|
cmd: "grok.exe",
|
|
118707
|
-
executableSha256: "
|
|
118708
|
-
executableSize:
|
|
118963
|
+
executableSha256: "c5035f11c15e939cd02e61134b6622c92c09ae522932ace725e3cee0ff2b434c",
|
|
118964
|
+
executableSize: 151283712
|
|
118709
118965
|
}
|
|
118710
118966
|
}
|
|
118711
118967
|
}
|
|
@@ -119448,15 +119704,13 @@ ${value}`;
|
|
|
119448
119704
|
throw new ManagedRuntimeError(`Failed to download managed runtime ${url} (HTTP ${response2.status})`);
|
|
119449
119705
|
}
|
|
119450
119706
|
let downloadedBytes = offset2;
|
|
119451
|
-
let lastPercent = -1;
|
|
119452
119707
|
let lastEmitAtMs = 0;
|
|
119453
119708
|
const emitDownloadProgress = (force = false) => {
|
|
119454
119709
|
const percent = getDownloadPercent(downloadedBytes, archive.size);
|
|
119455
119710
|
const nowMs2 = Date.now();
|
|
119456
|
-
if (!force &&
|
|
119711
|
+
if (!force && nowMs2 - lastEmitAtMs < MANAGED_RUNTIME_PROGRESS_MIN_INTERVAL_MS) {
|
|
119457
119712
|
return;
|
|
119458
119713
|
}
|
|
119459
|
-
lastPercent = percent ?? -1;
|
|
119460
119714
|
lastEmitAtMs = nowMs2;
|
|
119461
119715
|
this.emitProgress(progressKey, {
|
|
119462
119716
|
runtimeName: name2,
|
|
@@ -129418,21 +129672,6 @@ ${incoming}`).output;
|
|
|
129418
129672
|
])
|
|
129419
129673
|
});
|
|
129420
129674
|
const IMAGE_GENERATION_REVISED_PROMPT_PREFIX = "Revised prompt: ";
|
|
129421
|
-
const MAX_LIVE_REASONING_LABEL_LENGTH = 280;
|
|
129422
|
-
const latestCodexReasoningSummaryLine = (text) => {
|
|
129423
|
-
for (const rawLine of text.split(/\r?\n/u).reverse()) {
|
|
129424
|
-
let line3 = rawLine.trim();
|
|
129425
|
-
if (!line3 || line3.startsWith("<!--")) continue;
|
|
129426
|
-
line3 = line3.replace(/^#+\s*/u, "").trim();
|
|
129427
|
-
if (line3.startsWith("**")) {
|
|
129428
|
-
const closing = line3.indexOf("**", 2);
|
|
129429
|
-
if (closing < 0) continue;
|
|
129430
|
-
line3 = `${line3.slice(2, closing)}${line3.slice(closing + 2)}`.trim();
|
|
129431
|
-
}
|
|
129432
|
-
if (line3) return line3.slice(0, MAX_LIVE_REASONING_LABEL_LENGTH);
|
|
129433
|
-
}
|
|
129434
|
-
return null;
|
|
129435
|
-
};
|
|
129436
129675
|
function isRecord$2(value) {
|
|
129437
129676
|
return typeof value === "object" && value !== null;
|
|
129438
129677
|
}
|
|
@@ -129546,8 +129785,6 @@ ${incoming}`).output;
|
|
|
129546
129785
|
agentMcpCapabilities;
|
|
129547
129786
|
configOptions = [];
|
|
129548
129787
|
configOptionsListeners = /* @__PURE__ */ new Set();
|
|
129549
|
-
codexReasoningMessageId = null;
|
|
129550
|
-
codexReasoningText = "";
|
|
129551
129788
|
configOptionValues;
|
|
129552
129789
|
legacySessionModelState = null;
|
|
129553
129790
|
currentModel;
|
|
@@ -129802,40 +130039,9 @@ ${incoming}`).output;
|
|
|
129802
130039
|
if (this.handleImageGenerationNotification(notification)) {
|
|
129803
130040
|
return;
|
|
129804
130041
|
}
|
|
129805
|
-
if (this.handleCodexLiveReasoning(notification)) {
|
|
129806
|
-
return;
|
|
129807
|
-
}
|
|
129808
130042
|
this.options.onUpdateMessage(notification);
|
|
129809
130043
|
return;
|
|
129810
130044
|
}
|
|
129811
|
-
handleCodexLiveReasoning(notification) {
|
|
129812
|
-
if (!this.isCodexAgent()) return false;
|
|
129813
|
-
const { update: update2 } = notification;
|
|
129814
|
-
if (update2.sessionUpdate === "agent_thought_chunk") {
|
|
129815
|
-
if (update2.content.type !== "text") return true;
|
|
129816
|
-
const messageId = update2.messageId ?? "__current__";
|
|
129817
|
-
if (this.codexReasoningMessageId !== messageId) {
|
|
129818
|
-
this.codexReasoningMessageId = messageId;
|
|
129819
|
-
this.codexReasoningText = "";
|
|
129820
|
-
}
|
|
129821
|
-
this.codexReasoningText += update2.content.text;
|
|
129822
|
-
this.options.onLiveReasoningStatus?.(latestCodexReasoningSummaryLine(this.codexReasoningText));
|
|
129823
|
-
return true;
|
|
129824
|
-
}
|
|
129825
|
-
switch (update2.sessionUpdate) {
|
|
129826
|
-
case "agent_message_chunk":
|
|
129827
|
-
case "tool_call":
|
|
129828
|
-
case "tool_call_update":
|
|
129829
|
-
case "plan":
|
|
129830
|
-
if (this.codexReasoningMessageId !== null) {
|
|
129831
|
-
this.codexReasoningMessageId = null;
|
|
129832
|
-
this.codexReasoningText = "";
|
|
129833
|
-
this.options.onLiveReasoningStatus?.(null);
|
|
129834
|
-
}
|
|
129835
|
-
break;
|
|
129836
|
-
}
|
|
129837
|
-
return false;
|
|
129838
|
-
}
|
|
129839
130045
|
handleGoalSessionInfoUpdate(notification) {
|
|
129840
130046
|
if (notification.update.sessionUpdate !== "session_info_update") {
|
|
129841
130047
|
return;
|
|
@@ -130113,7 +130319,15 @@ ${incoming}`).output;
|
|
|
130113
130319
|
async readTextFile(params) {
|
|
130114
130320
|
this.ensureSessionMatch(params.sessionId);
|
|
130115
130321
|
const resolvedPath = this.resolvePath(params.path);
|
|
130116
|
-
|
|
130322
|
+
let content;
|
|
130323
|
+
try {
|
|
130324
|
+
content = await promises.readFile(resolvedPath, "utf8");
|
|
130325
|
+
} catch (error2) {
|
|
130326
|
+
if (error2 instanceof Error && "code" in error2 && error2.code === "ENOENT") {
|
|
130327
|
+
throw RequestError$1.resourceNotFound(resolvedPath);
|
|
130328
|
+
}
|
|
130329
|
+
throw error2;
|
|
130330
|
+
}
|
|
130117
130331
|
const sliced = sliceTextByLines(content, params.line ?? null, params.limit ?? null);
|
|
130118
130332
|
return {
|
|
130119
130333
|
content: sliced
|
|
@@ -130546,9 +130760,15 @@ ${incoming}`).output;
|
|
|
130546
130760
|
elicitation: {
|
|
130547
130761
|
form: {}
|
|
130548
130762
|
},
|
|
130549
|
-
|
|
130550
|
-
|
|
130551
|
-
|
|
130763
|
+
_meta: {
|
|
130764
|
+
...devinClientCapabilitiesMeta,
|
|
130765
|
+
lody: {
|
|
130766
|
+
elicitation: {
|
|
130767
|
+
version: 1,
|
|
130768
|
+
answerNotes: true
|
|
130769
|
+
}
|
|
130770
|
+
}
|
|
130771
|
+
}
|
|
130552
130772
|
}
|
|
130553
130773
|
}), startupAbort), this.logger, "connection.initialize", this.options.sessionId, ACP_INIT_TIMEOUT_MS$1);
|
|
130554
130774
|
} catch (error2) {
|
|
@@ -134870,6 +135090,47 @@ ${error2.message}` : execaMessage;
|
|
|
134870
135090
|
const ZSTD_SESSION_ARTIFACT = "session.jsonl.zstd";
|
|
134871
135091
|
const DSH_NODE_EXECUTABLE_ENV = "LODY_DSH_NODE_EXECUTABLE";
|
|
134872
135092
|
const DSH_NODE_ARGS_ENV = "LODY_DSH_NODE_ARGS";
|
|
135093
|
+
function resolveDeepSeekHarnessSpawn(options) {
|
|
135094
|
+
const { command: command2, args: args2, env: env2, workdir } = options;
|
|
135095
|
+
if ((options.platform ?? process.platform) !== "win32" || command2 !== "npx" || !env2[DSH_NODE_EXECUTABLE_ENV]) {
|
|
135096
|
+
return {
|
|
135097
|
+
command: command2,
|
|
135098
|
+
args: args2
|
|
135099
|
+
};
|
|
135100
|
+
}
|
|
135101
|
+
const envValue = (name2) => {
|
|
135102
|
+
const key2 = Object.keys(env2).sort().find((candidate) => candidate.toLowerCase() === name2);
|
|
135103
|
+
return key2 ? env2[key2] : void 0;
|
|
135104
|
+
};
|
|
135105
|
+
const directories = [
|
|
135106
|
+
workdir,
|
|
135107
|
+
...(envValue("path") ?? "").split(";")
|
|
135108
|
+
];
|
|
135109
|
+
const extensions = (envValue("pathext") ?? ".COM;.EXE;.BAT;.CMD").split(";");
|
|
135110
|
+
for (const directory of directories) {
|
|
135111
|
+
if (!directory) continue;
|
|
135112
|
+
for (const extension2 of extensions) {
|
|
135113
|
+
const executable = resolve$1(workdir, directory.replace(/^"|"$/g, ""), `npx${extension2.toLowerCase()}`);
|
|
135114
|
+
if (!existsSync(executable)) continue;
|
|
135115
|
+
if (/\.(exe|com)$/i.test(extension2)) return {
|
|
135116
|
+
command: executable,
|
|
135117
|
+
args: args2
|
|
135118
|
+
};
|
|
135119
|
+
const entry = join$2(dirname$1(realpathSync(executable)), "node_modules", "npm", "bin", "npx-cli.js");
|
|
135120
|
+
if (!existsSync(entry)) {
|
|
135121
|
+
throw new Error(`Cannot launch DeepSeek Harness without cmd.exe: npm's npx-cli.js is missing beside ${executable}. Install Node.js with npm and retry.`);
|
|
135122
|
+
}
|
|
135123
|
+
return {
|
|
135124
|
+
command: process.execPath,
|
|
135125
|
+
args: [
|
|
135126
|
+
entry,
|
|
135127
|
+
...args2
|
|
135128
|
+
]
|
|
135129
|
+
};
|
|
135130
|
+
}
|
|
135131
|
+
}
|
|
135132
|
+
throw new Error("Cannot launch DeepSeek Harness: npx was not found on PATH. Install Node.js with npm and retry.");
|
|
135133
|
+
}
|
|
134873
135134
|
function encodeBase64$1(value) {
|
|
134874
135135
|
return Buffer.from(value, "utf8").toString("base64");
|
|
134875
135136
|
}
|
|
@@ -136567,7 +136828,6 @@ ${fallbackStderrTail}` : errorMessage2;
|
|
|
136567
136828
|
terminalEnabled: options.terminalEnabled,
|
|
136568
136829
|
onStartupStage: options.onStartupStage,
|
|
136569
136830
|
onUpdateMessage: options.onUpdateMessage,
|
|
136570
|
-
onLiveReasoningStatus: options.onLiveReasoningStatus,
|
|
136571
136831
|
onRequestPermission: options.onRequestPermission,
|
|
136572
136832
|
onUsageUpdate: options.onUsageUpdate,
|
|
136573
136833
|
onContextWindowUsageUpdate: options.onContextWindowUsageUpdate,
|
|
@@ -136652,7 +136912,13 @@ ${fallbackStderrTail}` : errorMessage2;
|
|
|
136652
136912
|
args2 = args2 ?? launch.args;
|
|
136653
136913
|
}
|
|
136654
136914
|
const spawnFn = options.spawnImpl ?? spawn;
|
|
136655
|
-
|
|
136915
|
+
const executable = resolveDeepSeekHarnessSpawn({
|
|
136916
|
+
command: command2,
|
|
136917
|
+
args: args2,
|
|
136918
|
+
env: options.env,
|
|
136919
|
+
workdir: options.workdir
|
|
136920
|
+
});
|
|
136921
|
+
return spawnFn(executable.command, executable.args, {
|
|
136656
136922
|
cwd: options.workdir,
|
|
136657
136923
|
env: options.env,
|
|
136658
136924
|
stdio: [
|
|
@@ -138355,7 +138621,7 @@ ${fallbackStderrTail}` : errorMessage2;
|
|
|
138355
138621
|
const phaseToStatus = (phase, detail) => {
|
|
138356
138622
|
switch (phase ?? "thinking") {
|
|
138357
138623
|
case "thinking":
|
|
138358
|
-
return SessionStatusFactory.running(
|
|
138624
|
+
return SessionStatusFactory.running();
|
|
138359
138625
|
case "initializing":
|
|
138360
138626
|
return SessionStatusFactory.initializing(void 0, detail);
|
|
138361
138627
|
case "git-clone":
|
|
@@ -143702,9 +143968,7 @@ ${withCauses}`;
|
|
|
143702
143968
|
}
|
|
143703
143969
|
if (runtime?.promptStarted) {
|
|
143704
143970
|
yield* self2.ignoreWithWarning(options.sessionId, "Failed to settle context compaction after cancelled ACP prompt stopped", self2.tryPromise(async () => {
|
|
143705
|
-
await self2.deps.turnFinalization.finalizeACPState(options.sessionId, options.turnId
|
|
143706
|
-
settleContextCompactionAsFailed: true
|
|
143707
|
-
});
|
|
143971
|
+
await self2.deps.turnFinalization.finalizeACPState(options.sessionId, options.turnId);
|
|
143708
143972
|
await self2.persistTurnDiffsAndFlushUsage(options.sessionId, options.turnId);
|
|
143709
143973
|
}));
|
|
143710
143974
|
}
|
|
@@ -143798,9 +144062,7 @@ ${withCauses}`;
|
|
|
143798
144062
|
if (options.userTurnId) {
|
|
143799
144063
|
await this.markTurnFailed(options.sessionId, options.sessionDoc, options.userTurnId);
|
|
143800
144064
|
}
|
|
143801
|
-
await this.handleTurnError(options.sessionId, options.sessionDoc, options.error
|
|
143802
|
-
providerPromptSettled: options.runtime.promptStarted && !options.runtime.promptInFlight
|
|
143803
|
-
});
|
|
144065
|
+
await this.handleTurnError(options.sessionId, options.sessionDoc, options.error);
|
|
143804
144066
|
await options.onUnhandledError?.(options.error);
|
|
143805
144067
|
}
|
|
143806
144068
|
async finalizeHaltedTurn(options) {
|
|
@@ -143846,12 +144108,10 @@ ${withCauses}`;
|
|
|
143846
144108
|
onRetry: (attempt, maxAttempts) => this.deps.logger.debug(`Local project ${localProjectId} not visible in machine Flock yet; pulling machine Flock and retrying (attempt ${attempt}/${maxAttempts})`)
|
|
143847
144109
|
});
|
|
143848
144110
|
}
|
|
143849
|
-
async handleTurnError(sessionId, sessionDoc, error2
|
|
144111
|
+
async handleTurnError(sessionId, sessionDoc, error2) {
|
|
143850
144112
|
const acpError = error2 ? parseACPError(error2) : null;
|
|
143851
144113
|
const providerDisconnected = error2 ? isAgentDisconnectedError(error2) : false;
|
|
143852
|
-
await this.deps.turnFinalization.finalizeACPState(sessionId, this.currentTurnBySession.get(sessionId)
|
|
143853
|
-
settleContextCompactionAsFailed: options?.providerPromptSettled === true || acpError !== null || providerDisconnected
|
|
143854
|
-
});
|
|
144114
|
+
await this.deps.turnFinalization.finalizeACPState(sessionId, this.currentTurnBySession.get(sessionId));
|
|
143855
144115
|
await this.persistCodeCollabTurnDiffsAfterACPFinalization(sessionId, this.currentTurnBySession.get(sessionId));
|
|
143856
144116
|
await this.deps.turnFinalization.flushSessionUsage(sessionId);
|
|
143857
144117
|
if (error2) {
|
|
@@ -145612,8 +145872,7 @@ ${withCauses}`;
|
|
|
145612
145872
|
kind: "finish-assistant",
|
|
145613
145873
|
turnId,
|
|
145614
145874
|
endedAt: getServerNow(),
|
|
145615
|
-
force: true
|
|
145616
|
-
settleContextCompactionAsFailed: true
|
|
145875
|
+
force: true
|
|
145617
145876
|
});
|
|
145618
145877
|
await this.finalizeCancelledTurn({
|
|
145619
145878
|
sessionId,
|
|
@@ -149266,9 +149525,15 @@ ${withCauses}`;
|
|
|
149266
149525
|
}
|
|
149267
149526
|
});
|
|
149268
149527
|
this.deps.logger.error(`[${spec.sourceSessionId}] Worktree session fork failed: ${publicError.detail instanceof Error ? publicError.detail.message : String(publicError.detail ?? error2)}`);
|
|
149528
|
+
return;
|
|
149269
149529
|
} finally {
|
|
149270
149530
|
this.activeOperations.delete(operation.id);
|
|
149271
149531
|
}
|
|
149532
|
+
try {
|
|
149533
|
+
await targetDoc.syncModelSummary();
|
|
149534
|
+
} catch {
|
|
149535
|
+
this.deps.logger.warn(`[${targetSessionId}] Failed to publish fork model summary`);
|
|
149536
|
+
}
|
|
149272
149537
|
}
|
|
149273
149538
|
}
|
|
149274
149539
|
const lastUserIndex = (history) => {
|
|
@@ -173352,6 +173617,17 @@ ${escapeHtmlScriptContent(VISUAL_ANNOTATION_INSPECTOR_BROWSER_SCRIPT)}
|
|
|
173352
173617
|
}
|
|
173353
173618
|
function buildLocalPreviewRequestHeaders(headers2, options) {
|
|
173354
173619
|
const proxyHeaders = new Headers(stripLocalPreviewRequestHeaders(headers2));
|
|
173620
|
+
const fetchMode = proxyHeaders.get("sec-fetch-mode");
|
|
173621
|
+
if (fetchMode === "navigate" || fetchMode === "nested-navigate") {
|
|
173622
|
+
for (const name2 of [
|
|
173623
|
+
"sec-fetch-site",
|
|
173624
|
+
"sec-fetch-mode",
|
|
173625
|
+
"sec-fetch-dest",
|
|
173626
|
+
"sec-fetch-user"
|
|
173627
|
+
]) {
|
|
173628
|
+
proxyHeaders.delete(name2);
|
|
173629
|
+
}
|
|
173630
|
+
}
|
|
173355
173631
|
if (options) {
|
|
173356
173632
|
const rewrittenReferer = rewriteLocalPreviewReferer(getHeaderValue(headers2, "referer") ?? "", {
|
|
173357
173633
|
localOrigin: options.localOrigin,
|
|
@@ -176606,7 +176882,7 @@ ${escapeHtmlScriptContent(VISUAL_ANNOTATION_INSPECTOR_BROWSER_SCRIPT)}
|
|
|
176606
176882
|
applyAcpModeAndModel: async (session2, acpConfig, context2) => await this.applyAcpModeAndModel(session2, acpConfig, context2),
|
|
176607
176883
|
createAssistantEntryForTurn: async (sessionId, sessionDoc, turnId, modelInfo, userTurnId) => await this.createAssistantEntryForTurn(sessionId, sessionDoc, turnId, modelInfo, userTurnId),
|
|
176608
176884
|
turnFinalization: {
|
|
176609
|
-
finalizeACPState: async (sessionId, turnId
|
|
176885
|
+
finalizeACPState: async (sessionId, turnId) => await this.finalizeACPState(sessionId, turnId),
|
|
176610
176886
|
persistCodeCollabTurnDiffs: async (sessionId, turnId) => await this.persistCodeCollabTurnDiffs(sessionId, turnId),
|
|
176611
176887
|
flushSessionUsage: async (sessionId) => await this.flushSessionUsage(sessionId),
|
|
176612
176888
|
syncSessionBranchName: async (sessionId, session2) => await this.turnPostProcessingService.syncSessionBranchName(sessionId, session2),
|
|
@@ -178596,9 +178872,6 @@ ${escapeHtmlScriptContent(VISUAL_ANNOTATION_INSPECTOR_BROWSER_SCRIPT)}
|
|
|
178596
178872
|
this.sessionManager.on("onACPUpdateMessage", (sessionId, update2) => {
|
|
178597
178873
|
this.enqueueACPUpdate(sessionId, update2);
|
|
178598
178874
|
});
|
|
178599
|
-
this.sessionManager.on("onCodexLiveReasoningStatus", (sessionId, label2) => {
|
|
178600
|
-
this.setSessionActivePresencePhase(sessionId, "thinking", label2 ?? void 0);
|
|
178601
|
-
});
|
|
178602
178875
|
this.sessionManager.on("onWriteTextFile", (sessionId, event) => {
|
|
178603
178876
|
this.trackCodeCollabEvidenceWrite(sessionId, this.collectCodeCollabWriteTextFileEvidence(sessionId, event));
|
|
178604
178877
|
});
|
|
@@ -180033,7 +180306,7 @@ ${escapeHtmlScriptContent(VISUAL_ANNOTATION_INSPECTOR_BROWSER_SCRIPT)}
|
|
|
180033
180306
|
this.scheduleCodeCollabTurnRetry(sessionId, turnId);
|
|
180034
180307
|
}
|
|
180035
180308
|
}
|
|
180036
|
-
async finalizeACPState(sessionId, turnId
|
|
180309
|
+
async finalizeACPState(sessionId, turnId) {
|
|
180037
180310
|
if (!turnId || this.store.getTurnId(sessionId) === turnId) {
|
|
180038
180311
|
await this.awaitTurnHistoryGate(sessionId);
|
|
180039
180312
|
}
|
|
@@ -180057,8 +180330,7 @@ ${escapeHtmlScriptContent(VISUAL_ANNOTATION_INSPECTOR_BROWSER_SCRIPT)}
|
|
|
180057
180330
|
kind: "finish-assistant",
|
|
180058
180331
|
turnId,
|
|
180059
180332
|
endedAt,
|
|
180060
|
-
permissionWaitMs
|
|
180061
|
-
settleContextCompactionAsFailed: options?.settleContextCompactionAsFailed
|
|
180333
|
+
permissionWaitMs
|
|
180062
180334
|
});
|
|
180063
180335
|
await sessionDoc.waitUntilSynced();
|
|
180064
180336
|
} catch (error2) {
|
|
@@ -181960,6 +182232,7 @@ ${escapeHtmlScriptContent(VISUAL_ANNOTATION_INSPECTOR_BROWSER_SCRIPT)}
|
|
|
181960
182232
|
};
|
|
181961
182233
|
}
|
|
181962
182234
|
async handleAgentPermissionRequest(sessionId, requestId, request2, model, agentClient) {
|
|
182235
|
+
const permissionTurnId = this.store.getTurnId(sessionId);
|
|
181963
182236
|
const isAskUserQuestionRequest = isAskUserQuestionPermissionRequest(request2);
|
|
181964
182237
|
const askUserQuestionMeta = isAskUserQuestionRequest ? parseAskUserQuestionPermissionMeta(request2._meta) : null;
|
|
181965
182238
|
const permissionTimeoutMs = typeof askUserQuestionMeta?.autoResolveAt === "number" ? Math.min(PERMISSION_REQUEST_TIMEOUT_MS, Math.max(0, askUserQuestionMeta.autoResolveAt - getServerNow())) : PERMISSION_REQUEST_TIMEOUT_MS;
|
|
@@ -182005,6 +182278,15 @@ ${escapeHtmlScriptContent(VISUAL_ANNOTATION_INSPECTOR_BROWSER_SCRIPT)}
|
|
|
182005
182278
|
let historyUserId;
|
|
182006
182279
|
let permissionRequestPersisted = false;
|
|
182007
182280
|
try {
|
|
182281
|
+
await this.awaitTurnHistoryGate(sessionId);
|
|
182282
|
+
await this.flushACPUpdatesNow(sessionId);
|
|
182283
|
+
if (this.deletedSessionIds.has(sessionId) || this.store.getTurnId(sessionId) !== permissionTurnId) {
|
|
182284
|
+
throw new Error("Permission owner changed while draining ACP history");
|
|
182285
|
+
}
|
|
182286
|
+
const acpState = this.store.get(sessionId);
|
|
182287
|
+
if (acpState.acpUpdateBuffer.length > 0 || acpState.acpFlushInFlight) {
|
|
182288
|
+
throw new Error("ACP history has not drained before permission persistence");
|
|
182289
|
+
}
|
|
182008
182290
|
permissionRequestPersisted = await ensurePermissionRequestOnToolCall(doc, requestId, request2, model);
|
|
182009
182291
|
await doc.setLastMessageAt();
|
|
182010
182292
|
const meta = await doc.getMetaState();
|
|
@@ -183257,6 +183539,8 @@ ${escapeHtmlScriptContent(VISUAL_ANNOTATION_INSPECTOR_BROWSER_SCRIPT)}
|
|
|
183257
183539
|
case "session/preview-create":
|
|
183258
183540
|
case "session/preview-revoke":
|
|
183259
183541
|
return `session:${message.sessionId}:preview`;
|
|
183542
|
+
case "machine/acp-authenticate":
|
|
183543
|
+
return message.action === "start" ? "machine:acp-authenticate:start" : "machine:acp-authenticate:control";
|
|
183260
183544
|
case "session/cancel":
|
|
183261
183545
|
return null;
|
|
183262
183546
|
default:
|
|
@@ -187316,7 +187600,13 @@ export PATH=${toSingleQuotedShellString(ghShimBinDir)}:"$PATH"
|
|
|
187316
187600
|
let agentProcessHandle;
|
|
187317
187601
|
try {
|
|
187318
187602
|
callbacks.abortSignal?.throwIfAborted();
|
|
187319
|
-
|
|
187603
|
+
const executable = resolveDeepSeekHarnessSpawn({
|
|
187604
|
+
command: callbacks.command,
|
|
187605
|
+
args: callbacks.args ?? [],
|
|
187606
|
+
env: env2,
|
|
187607
|
+
workdir: this.getWorkdir()
|
|
187608
|
+
});
|
|
187609
|
+
agentProcessHandle = await this.sandbox.spawn(executable.command, executable.args, {
|
|
187320
187610
|
cwd: this.getWorkdir(),
|
|
187321
187611
|
env: env2,
|
|
187322
187612
|
stdio: [
|
|
@@ -187405,7 +187695,6 @@ export PATH=${toSingleQuotedShellString(ghShimBinDir)}:"$PATH"
|
|
|
187405
187695
|
forkSessionTurnId: callbacks.forkSessionTurnId,
|
|
187406
187696
|
onStartupStage: callbacks.onStartupStage,
|
|
187407
187697
|
onUpdateMessage: callbacks.onUpdateMessage,
|
|
187408
|
-
onLiveReasoningStatus: callbacks.onLiveReasoningStatus,
|
|
187409
187698
|
onRequestPermission: callbacks.onRequestPermission,
|
|
187410
187699
|
onUsageUpdate: callbacks.onUsageUpdate,
|
|
187411
187700
|
onContextWindowUsageUpdate: callbacks.onContextWindowUsageUpdate,
|
|
@@ -188752,9 +189041,6 @@ export PATH=${toSingleQuotedShellString(ghShimBinDir)}:"$PATH"
|
|
|
188752
189041
|
onUpdateMessage: (update2) => {
|
|
188753
189042
|
dispatchEvent(() => this.emit("onACPUpdateMessage", sessionId, update2));
|
|
188754
189043
|
},
|
|
188755
|
-
onLiveReasoningStatus: (label2) => {
|
|
188756
|
-
dispatchEvent(() => this.emit("onCodexLiveReasoningStatus", sessionId, label2));
|
|
188757
|
-
},
|
|
188758
189044
|
onRequestPermission: (requestId, request2) => {
|
|
188759
189045
|
if (options?.allowInteractiveRequest && !options.allowInteractiveRequest()) {
|
|
188760
189046
|
return Promise.resolve({
|
|
@@ -224635,11 +224921,13 @@ ${page}${helpTipBottom}${choiceDescription}${ansiEscapes.cursorHide}`;
|
|
|
224635
224921
|
}
|
|
224636
224922
|
function toMachineListEntry(machine, onlineMachineIds) {
|
|
224637
224923
|
const legacy2 = machine;
|
|
224924
|
+
const online = onlineMachineIds?.has(machine.id) === true;
|
|
224638
224925
|
return {
|
|
224639
224926
|
...machine,
|
|
224640
224927
|
acpCapabilities: legacy2.acpCapabilities,
|
|
224641
224928
|
raceLimits: legacy2.raceLimits ?? {},
|
|
224642
|
-
online
|
|
224929
|
+
online,
|
|
224930
|
+
onlineStatus: onlineMachineIds === null ? "unknown" : online ? "online" : "offline"
|
|
224643
224931
|
};
|
|
224644
224932
|
}
|
|
224645
224933
|
function isLegacyRateLimitEntryForCliType(key2, cliType) {
|
|
@@ -224764,7 +225052,7 @@ ${page}${helpTipBottom}${choiceDescription}${ansiEscapes.cursorHide}`;
|
|
|
224764
225052
|
const row = [
|
|
224765
225053
|
machine.id,
|
|
224766
225054
|
machine.id === currentMachineId ? `${machine.name} (current)` : machine.name,
|
|
224767
|
-
machine.
|
|
225055
|
+
machine.onlineStatus,
|
|
224768
225056
|
formatMachineCli(machine)
|
|
224769
225057
|
];
|
|
224770
225058
|
if (includeAgents) {
|
|
@@ -224780,10 +225068,10 @@ ${page}${helpTipBottom}${choiceDescription}${ansiEscapes.cursorHide}`;
|
|
|
224780
225068
|
await withWorkspaceManager$1(auth, workspace, "machine", async (manager) => {
|
|
224781
225069
|
const onlineMachineIds = await manager.getOnlineMachineIds();
|
|
224782
225070
|
if (onlineMachineIds === null) {
|
|
224783
|
-
console.error(
|
|
225071
|
+
console.error('Warning: presence room unavailable; machine online status is unknown, reported as onlineStatus "unknown".');
|
|
224784
225072
|
}
|
|
224785
225073
|
const onlineIds = onlineMachineIds ?? /* @__PURE__ */ new Set();
|
|
224786
|
-
let machines = sortMachineMetas((await listAliveDocMetas(manager, isMachineDocRoomId)).map((entry) => entry.meta), onlineIds, auth.machineId).map((machine) => toMachineListEntry(machine,
|
|
225074
|
+
let machines = sortMachineMetas((await listAliveDocMetas(manager, isMachineDocRoomId)).map((entry) => entry.meta), onlineIds, auth.machineId).map((machine) => toMachineListEntry(machine, onlineMachineIds)).filter((machine) => !options.onlineOnly || machine.online);
|
|
224787
225075
|
if (options.includeAgents === true) {
|
|
224788
225076
|
machines = await attachAgentConfigsToMachines(manager.repo, workspace.id, machines);
|
|
224789
225077
|
}
|
|
@@ -225561,7 +225849,7 @@ ${page}${helpTipBottom}${choiceDescription}${ansiEscapes.cursorHide}`;
|
|
|
225561
225849
|
data = createReviewBundleSnapshot(bundle);
|
|
225562
225850
|
}
|
|
225563
225851
|
const { injectReviewSnapshot } = await import("./chunks/index-VoI6Ds2-.js");
|
|
225564
|
-
const { resolveReviewViewerTemplate } = await import("./chunks/review-viewer-
|
|
225852
|
+
const { resolveReviewViewerTemplate } = await import("./chunks/review-viewer-wpzL1tfQ.js").then(async (m) => {
|
|
225565
225853
|
await m.__tla;
|
|
225566
225854
|
return m;
|
|
225567
225855
|
});
|
|
@@ -245378,18 +245666,22 @@ ${prompt2}` : prompt2;
|
|
|
245378
245666
|
}
|
|
245379
245667
|
};
|
|
245380
245668
|
};
|
|
245381
|
-
const
|
|
245669
|
+
const makeMachineLivenessLookupForMcp = (manager, ctx) => {
|
|
245382
245670
|
let onlineMachineIds;
|
|
245383
245671
|
return async (machineId) => {
|
|
245384
245672
|
if (machineId === ctx.machineId) {
|
|
245385
|
-
return
|
|
245673
|
+
return "online";
|
|
245386
245674
|
}
|
|
245387
245675
|
onlineMachineIds ??= manager.getOnlineMachineIds();
|
|
245388
|
-
|
|
245676
|
+
const resolved = await onlineMachineIds;
|
|
245677
|
+
if (resolved === null) {
|
|
245678
|
+
return "unknown";
|
|
245679
|
+
}
|
|
245680
|
+
return resolved.has(machineId) ? "online" : "offline";
|
|
245389
245681
|
};
|
|
245390
245682
|
};
|
|
245391
|
-
const
|
|
245392
|
-
if (
|
|
245683
|
+
const assertMachineNotOfflineForSingleCommand = async (manager, machineId, ctx) => {
|
|
245684
|
+
if (await makeMachineLivenessLookupForMcp(manager, ctx)(machineId) === "offline") {
|
|
245393
245685
|
throw new LodyOperationStoreError("MACHINE_OFFLINE", `Target Machine is offline: ${machineId}`, true);
|
|
245394
245686
|
}
|
|
245395
245687
|
};
|
|
@@ -245551,8 +245843,12 @@ ${prompt2}` : prompt2;
|
|
|
245551
245843
|
const delegatedRequester = toDelegatedSessionRequester(invoking.identity);
|
|
245552
245844
|
const machineEntries = await listAliveDocMetas(manager, isMachineDocRoomId);
|
|
245553
245845
|
const onlineMachineIds = await manager.getOnlineMachineIds();
|
|
245554
|
-
const
|
|
245555
|
-
|
|
245846
|
+
const machineLivenessOf = (machineId) => {
|
|
245847
|
+
if (machineId === auth.machineId) return "online";
|
|
245848
|
+
if (onlineMachineIds === null) return "unknown";
|
|
245849
|
+
return onlineMachineIds.has(machineId) ? "online" : "offline";
|
|
245850
|
+
};
|
|
245851
|
+
const machineCandidates = selectMachineMetasForOptions(machineEntries.map((entry) => entry.meta), input2.machineId).filter((machine) => input2.machineId !== void 0 || machineLivenessOf(machine.id) !== "offline");
|
|
245556
245852
|
const machines = await filterAuthorizedMachinesForOptions(auth, workspaceId, machineCandidates, delegatedRequester);
|
|
245557
245853
|
const selectedMachine = selectMachineForOptions(machines, input2.machineId, currentSession.machineId);
|
|
245558
245854
|
await syncMachineFlockDocsForOptions(manager, workspaceId, [
|
|
@@ -245587,7 +245883,7 @@ ${prompt2}` : prompt2;
|
|
|
245587
245883
|
return currentLocalProjectId !== void 0 && project.id === currentLocalProjectId;
|
|
245588
245884
|
});
|
|
245589
245885
|
const localProjects = (await filterAuthorizedLocalProjectsForOptions(auth, workspaceId, selectedMachine.id, localProjectCandidates, delegatedRequester)).slice(0, MAX_MCP_CREATE_OPTION_MATCHES);
|
|
245590
|
-
const summarizedLocalProjects = await Promise.all(localProjects.map((project) => summarizeLocalProjectForOptions(auth, workspaceId, selectedMachine, project, requesterUserId,
|
|
245886
|
+
const summarizedLocalProjects = await Promise.all(localProjects.map((project) => summarizeLocalProjectForOptions(auth, workspaceId, selectedMachine, project, requesterUserId, machineLivenessOf(selectedMachine.id) !== "offline")));
|
|
245591
245887
|
const repoQuery = normalizeCliValue(input2.repoQuery)?.toLowerCase();
|
|
245592
245888
|
const repos = repoQuery ? (await listWorkspaceGitHubRepositoriesForCliToken({
|
|
245593
245889
|
token: auth.token,
|
|
@@ -245605,7 +245901,8 @@ ${prompt2}` : prompt2;
|
|
|
245605
245901
|
machines: machines.map((machine) => ({
|
|
245606
245902
|
id: machine.id,
|
|
245607
245903
|
name: machine.name,
|
|
245608
|
-
online:
|
|
245904
|
+
online: machineLivenessOf(machine.id) === "online",
|
|
245905
|
+
onlineStatus: machineLivenessOf(machine.id),
|
|
245609
245906
|
canUse: true
|
|
245610
245907
|
})),
|
|
245611
245908
|
agentConfigs: agentConfigs.map((config2) => summarizeAgentConfig(config2, acpCapabilities[getAcpCapabilityCacheKey(config2.id)])),
|
|
@@ -245641,7 +245938,7 @@ ${prompt2}` : prompt2;
|
|
|
245641
245938
|
return await withOperationStore((store) => store.snapshot(retry2));
|
|
245642
245939
|
}
|
|
245643
245940
|
const targetMachineId = resolved.input.machineId ?? currentSession.machineId;
|
|
245644
|
-
await
|
|
245941
|
+
await assertMachineNotOfflineForSingleCommand(manager, targetMachineId, ctx);
|
|
245645
245942
|
const createOptions = buildMcpCreateOptions(resolved.input, ctx);
|
|
245646
245943
|
bindMcpCreateContext(createOptions, invoking.identity, currentSession);
|
|
245647
245944
|
bindAgentRoleCreateOptions(createOptions, resolved.role);
|
|
@@ -245760,7 +246057,7 @@ ${prompt2}` : prompt2;
|
|
|
245760
246057
|
throw new LodyOperationStoreError("SESSION_NOT_FOUND", `Target Session not found: ${args2.sessionId}`, false);
|
|
245761
246058
|
}
|
|
245762
246059
|
assertDifferentMcpSession(currentSession, targetSession);
|
|
245763
|
-
await
|
|
246060
|
+
await assertMachineNotOfflineForSingleCommand(manager, targetSession.machineId, ctx);
|
|
245764
246061
|
try {
|
|
245765
246062
|
await validateSessionChatTarget({
|
|
245766
246063
|
auth,
|
|
@@ -246000,7 +246297,7 @@ ${prompt2}` : prompt2;
|
|
|
246000
246297
|
if (retry2) {
|
|
246001
246298
|
return await withOperationStore((store) => store.snapshot(retry2));
|
|
246002
246299
|
}
|
|
246003
|
-
const
|
|
246300
|
+
const machineLiveness = makeMachineLivenessLookupForMcp(manager, ctx);
|
|
246004
246301
|
const validatedItems = await mapWithConcurrency(expanded, 5, async (item, index) => {
|
|
246005
246302
|
const label2 = item.label;
|
|
246006
246303
|
if (!item.prompt) {
|
|
@@ -246031,7 +246328,7 @@ ${prompt2}` : prompt2;
|
|
|
246031
246328
|
};
|
|
246032
246329
|
}
|
|
246033
246330
|
const targetMachineId = resolved.input.machineId ?? requester.machineId;
|
|
246034
|
-
if (
|
|
246331
|
+
if (await machineLiveness(targetMachineId) === "offline") {
|
|
246035
246332
|
return {
|
|
246036
246333
|
operationItem: batchFailure("MACHINE_OFFLINE", `Target Machine is offline: ${targetMachineId}`, true, label2),
|
|
246037
246334
|
dispatchConfig: null
|
|
@@ -246166,7 +246463,7 @@ ${prompt2}` : prompt2;
|
|
|
246166
246463
|
if (retry2) {
|
|
246167
246464
|
return await withOperationStore((store) => store.snapshot(retry2));
|
|
246168
246465
|
}
|
|
246169
|
-
const
|
|
246466
|
+
const machineLiveness = makeMachineLivenessLookupForMcp(manager, ctx);
|
|
246170
246467
|
const initialItems = await mapWithConcurrency(expanded, 5, async (item) => {
|
|
246171
246468
|
if (!item.sessionId || !item.prompt) {
|
|
246172
246469
|
return batchFailure("INVALID_ITEM", "Chat item requires sessionId and prompt.", false, item.label);
|
|
@@ -246178,7 +246475,7 @@ ${prompt2}` : prompt2;
|
|
|
246178
246475
|
if (target.id === requester.id) {
|
|
246179
246476
|
return batchFailure("INVALID_ITEM", "An MCP agent cannot chat its own active Session.", false, item.label);
|
|
246180
246477
|
}
|
|
246181
|
-
if (
|
|
246478
|
+
if (await machineLiveness(target.machineId) === "offline") {
|
|
246182
246479
|
return batchFailure("MACHINE_OFFLINE", `Target Machine is offline: ${target.machineId}`, true, item.label);
|
|
246183
246480
|
}
|
|
246184
246481
|
try {
|