lody 0.97.2 → 0.99.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-Dah28phN.js → review-viewer-DDjD2VXi.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 +559 -248
- 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.99.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
|
}
|
|
@@ -118927,7 +119183,7 @@ ${value}`;
|
|
|
118927
119183
|
const installation = await this.readInstallation(name2, definition.version, platformArch);
|
|
118928
119184
|
if (!installation) return null;
|
|
118929
119185
|
if (installation.metadata.command !== archive.cmd || installation.metadata.archiveSha256 !== archive.sha256 || installation.metadata.archiveSize !== archive.size || installation.metadata.minNodeVersion !== definition.minNodeVersion) {
|
|
118930
|
-
|
|
119186
|
+
return null;
|
|
118931
119187
|
}
|
|
118932
119188
|
return installation;
|
|
118933
119189
|
}
|
|
@@ -119019,9 +119275,13 @@ ${value}`;
|
|
|
119019
119275
|
async listAvailableUpdates() {
|
|
119020
119276
|
const updates = [];
|
|
119021
119277
|
for (const name2 of MANAGED_RUNTIME_NAMES) {
|
|
119022
|
-
|
|
119023
|
-
|
|
119024
|
-
|
|
119278
|
+
try {
|
|
119279
|
+
const status = await this.getRuntimeStatus(name2);
|
|
119280
|
+
if (status.kind === "installed" && status.updateAvailable) {
|
|
119281
|
+
updates.push(name2);
|
|
119282
|
+
}
|
|
119283
|
+
} catch (error2) {
|
|
119284
|
+
this.warnCacheMaintenanceFailure(name2, "update scan", error2);
|
|
119025
119285
|
}
|
|
119026
119286
|
}
|
|
119027
119287
|
return updates;
|
|
@@ -119051,7 +119311,17 @@ ${value}`;
|
|
|
119051
119311
|
}
|
|
119052
119312
|
async prepareCache() {
|
|
119053
119313
|
for (const name2 of MANAGED_RUNTIME_NAMES) {
|
|
119054
|
-
|
|
119314
|
+
try {
|
|
119315
|
+
await this.pruneSupersededVersions(name2);
|
|
119316
|
+
} catch (error2) {
|
|
119317
|
+
this.warnCacheMaintenanceFailure(name2, "startup cache cleanup", error2);
|
|
119318
|
+
}
|
|
119319
|
+
}
|
|
119320
|
+
}
|
|
119321
|
+
warnCacheMaintenanceFailure(name2, operation, error2) {
|
|
119322
|
+
try {
|
|
119323
|
+
getLogger("managed-runtime").warn(`Skipping failed ${operation} for ${name2}: ${formatErrorWithCauses(error2)}`);
|
|
119324
|
+
} catch {
|
|
119055
119325
|
}
|
|
119056
119326
|
}
|
|
119057
119327
|
async ensureCurrentRuntime(name2, options = {}) {
|
|
@@ -119448,15 +119718,13 @@ ${value}`;
|
|
|
119448
119718
|
throw new ManagedRuntimeError(`Failed to download managed runtime ${url} (HTTP ${response2.status})`);
|
|
119449
119719
|
}
|
|
119450
119720
|
let downloadedBytes = offset2;
|
|
119451
|
-
let lastPercent = -1;
|
|
119452
119721
|
let lastEmitAtMs = 0;
|
|
119453
119722
|
const emitDownloadProgress = (force = false) => {
|
|
119454
119723
|
const percent = getDownloadPercent(downloadedBytes, archive.size);
|
|
119455
119724
|
const nowMs2 = Date.now();
|
|
119456
|
-
if (!force &&
|
|
119725
|
+
if (!force && nowMs2 - lastEmitAtMs < MANAGED_RUNTIME_PROGRESS_MIN_INTERVAL_MS) {
|
|
119457
119726
|
return;
|
|
119458
119727
|
}
|
|
119459
|
-
lastPercent = percent ?? -1;
|
|
119460
119728
|
lastEmitAtMs = nowMs2;
|
|
119461
119729
|
this.emitProgress(progressKey, {
|
|
119462
119730
|
runtimeName: name2,
|
|
@@ -129418,21 +129686,6 @@ ${incoming}`).output;
|
|
|
129418
129686
|
])
|
|
129419
129687
|
});
|
|
129420
129688
|
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
129689
|
function isRecord$2(value) {
|
|
129437
129690
|
return typeof value === "object" && value !== null;
|
|
129438
129691
|
}
|
|
@@ -129546,8 +129799,6 @@ ${incoming}`).output;
|
|
|
129546
129799
|
agentMcpCapabilities;
|
|
129547
129800
|
configOptions = [];
|
|
129548
129801
|
configOptionsListeners = /* @__PURE__ */ new Set();
|
|
129549
|
-
codexReasoningMessageId = null;
|
|
129550
|
-
codexReasoningText = "";
|
|
129551
129802
|
configOptionValues;
|
|
129552
129803
|
legacySessionModelState = null;
|
|
129553
129804
|
currentModel;
|
|
@@ -129802,40 +130053,9 @@ ${incoming}`).output;
|
|
|
129802
130053
|
if (this.handleImageGenerationNotification(notification)) {
|
|
129803
130054
|
return;
|
|
129804
130055
|
}
|
|
129805
|
-
if (this.handleCodexLiveReasoning(notification)) {
|
|
129806
|
-
return;
|
|
129807
|
-
}
|
|
129808
130056
|
this.options.onUpdateMessage(notification);
|
|
129809
130057
|
return;
|
|
129810
130058
|
}
|
|
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
130059
|
handleGoalSessionInfoUpdate(notification) {
|
|
129840
130060
|
if (notification.update.sessionUpdate !== "session_info_update") {
|
|
129841
130061
|
return;
|
|
@@ -130113,7 +130333,15 @@ ${incoming}`).output;
|
|
|
130113
130333
|
async readTextFile(params) {
|
|
130114
130334
|
this.ensureSessionMatch(params.sessionId);
|
|
130115
130335
|
const resolvedPath = this.resolvePath(params.path);
|
|
130116
|
-
|
|
130336
|
+
let content;
|
|
130337
|
+
try {
|
|
130338
|
+
content = await promises.readFile(resolvedPath, "utf8");
|
|
130339
|
+
} catch (error2) {
|
|
130340
|
+
if (error2 instanceof Error && "code" in error2 && error2.code === "ENOENT") {
|
|
130341
|
+
throw RequestError$1.resourceNotFound(resolvedPath);
|
|
130342
|
+
}
|
|
130343
|
+
throw error2;
|
|
130344
|
+
}
|
|
130117
130345
|
const sliced = sliceTextByLines(content, params.line ?? null, params.limit ?? null);
|
|
130118
130346
|
return {
|
|
130119
130347
|
content: sliced
|
|
@@ -130546,9 +130774,15 @@ ${incoming}`).output;
|
|
|
130546
130774
|
elicitation: {
|
|
130547
130775
|
form: {}
|
|
130548
130776
|
},
|
|
130549
|
-
|
|
130550
|
-
|
|
130551
|
-
|
|
130777
|
+
_meta: {
|
|
130778
|
+
...devinClientCapabilitiesMeta,
|
|
130779
|
+
lody: {
|
|
130780
|
+
elicitation: {
|
|
130781
|
+
version: 1,
|
|
130782
|
+
answerNotes: true
|
|
130783
|
+
}
|
|
130784
|
+
}
|
|
130785
|
+
}
|
|
130552
130786
|
}
|
|
130553
130787
|
}), startupAbort), this.logger, "connection.initialize", this.options.sessionId, ACP_INIT_TIMEOUT_MS$1);
|
|
130554
130788
|
} catch (error2) {
|
|
@@ -134870,6 +135104,47 @@ ${error2.message}` : execaMessage;
|
|
|
134870
135104
|
const ZSTD_SESSION_ARTIFACT = "session.jsonl.zstd";
|
|
134871
135105
|
const DSH_NODE_EXECUTABLE_ENV = "LODY_DSH_NODE_EXECUTABLE";
|
|
134872
135106
|
const DSH_NODE_ARGS_ENV = "LODY_DSH_NODE_ARGS";
|
|
135107
|
+
function resolveDeepSeekHarnessSpawn(options) {
|
|
135108
|
+
const { command: command2, args: args2, env: env2, workdir } = options;
|
|
135109
|
+
if ((options.platform ?? process.platform) !== "win32" || command2 !== "npx" || !env2[DSH_NODE_EXECUTABLE_ENV]) {
|
|
135110
|
+
return {
|
|
135111
|
+
command: command2,
|
|
135112
|
+
args: args2
|
|
135113
|
+
};
|
|
135114
|
+
}
|
|
135115
|
+
const envValue = (name2) => {
|
|
135116
|
+
const key2 = Object.keys(env2).sort().find((candidate) => candidate.toLowerCase() === name2);
|
|
135117
|
+
return key2 ? env2[key2] : void 0;
|
|
135118
|
+
};
|
|
135119
|
+
const directories = [
|
|
135120
|
+
workdir,
|
|
135121
|
+
...(envValue("path") ?? "").split(";")
|
|
135122
|
+
];
|
|
135123
|
+
const extensions = (envValue("pathext") ?? ".COM;.EXE;.BAT;.CMD").split(";");
|
|
135124
|
+
for (const directory of directories) {
|
|
135125
|
+
if (!directory) continue;
|
|
135126
|
+
for (const extension2 of extensions) {
|
|
135127
|
+
const executable = resolve$1(workdir, directory.replace(/^"|"$/g, ""), `npx${extension2.toLowerCase()}`);
|
|
135128
|
+
if (!existsSync(executable)) continue;
|
|
135129
|
+
if (/\.(exe|com)$/i.test(extension2)) return {
|
|
135130
|
+
command: executable,
|
|
135131
|
+
args: args2
|
|
135132
|
+
};
|
|
135133
|
+
const entry = join$2(dirname$1(realpathSync(executable)), "node_modules", "npm", "bin", "npx-cli.js");
|
|
135134
|
+
if (!existsSync(entry)) {
|
|
135135
|
+
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.`);
|
|
135136
|
+
}
|
|
135137
|
+
return {
|
|
135138
|
+
command: process.execPath,
|
|
135139
|
+
args: [
|
|
135140
|
+
entry,
|
|
135141
|
+
...args2
|
|
135142
|
+
]
|
|
135143
|
+
};
|
|
135144
|
+
}
|
|
135145
|
+
}
|
|
135146
|
+
throw new Error("Cannot launch DeepSeek Harness: npx was not found on PATH. Install Node.js with npm and retry.");
|
|
135147
|
+
}
|
|
134873
135148
|
function encodeBase64$1(value) {
|
|
134874
135149
|
return Buffer.from(value, "utf8").toString("base64");
|
|
134875
135150
|
}
|
|
@@ -136567,7 +136842,6 @@ ${fallbackStderrTail}` : errorMessage2;
|
|
|
136567
136842
|
terminalEnabled: options.terminalEnabled,
|
|
136568
136843
|
onStartupStage: options.onStartupStage,
|
|
136569
136844
|
onUpdateMessage: options.onUpdateMessage,
|
|
136570
|
-
onLiveReasoningStatus: options.onLiveReasoningStatus,
|
|
136571
136845
|
onRequestPermission: options.onRequestPermission,
|
|
136572
136846
|
onUsageUpdate: options.onUsageUpdate,
|
|
136573
136847
|
onContextWindowUsageUpdate: options.onContextWindowUsageUpdate,
|
|
@@ -136652,7 +136926,13 @@ ${fallbackStderrTail}` : errorMessage2;
|
|
|
136652
136926
|
args2 = args2 ?? launch.args;
|
|
136653
136927
|
}
|
|
136654
136928
|
const spawnFn = options.spawnImpl ?? spawn;
|
|
136655
|
-
|
|
136929
|
+
const executable = resolveDeepSeekHarnessSpawn({
|
|
136930
|
+
command: command2,
|
|
136931
|
+
args: args2,
|
|
136932
|
+
env: options.env,
|
|
136933
|
+
workdir: options.workdir
|
|
136934
|
+
});
|
|
136935
|
+
return spawnFn(executable.command, executable.args, {
|
|
136656
136936
|
cwd: options.workdir,
|
|
136657
136937
|
env: options.env,
|
|
136658
136938
|
stdio: [
|
|
@@ -138355,7 +138635,7 @@ ${fallbackStderrTail}` : errorMessage2;
|
|
|
138355
138635
|
const phaseToStatus = (phase, detail) => {
|
|
138356
138636
|
switch (phase ?? "thinking") {
|
|
138357
138637
|
case "thinking":
|
|
138358
|
-
return SessionStatusFactory.running(
|
|
138638
|
+
return SessionStatusFactory.running();
|
|
138359
138639
|
case "initializing":
|
|
138360
138640
|
return SessionStatusFactory.initializing(void 0, detail);
|
|
138361
138641
|
case "git-clone":
|
|
@@ -143702,9 +143982,7 @@ ${withCauses}`;
|
|
|
143702
143982
|
}
|
|
143703
143983
|
if (runtime?.promptStarted) {
|
|
143704
143984
|
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
|
-
});
|
|
143985
|
+
await self2.deps.turnFinalization.finalizeACPState(options.sessionId, options.turnId);
|
|
143708
143986
|
await self2.persistTurnDiffsAndFlushUsage(options.sessionId, options.turnId);
|
|
143709
143987
|
}));
|
|
143710
143988
|
}
|
|
@@ -143798,9 +144076,7 @@ ${withCauses}`;
|
|
|
143798
144076
|
if (options.userTurnId) {
|
|
143799
144077
|
await this.markTurnFailed(options.sessionId, options.sessionDoc, options.userTurnId);
|
|
143800
144078
|
}
|
|
143801
|
-
await this.handleTurnError(options.sessionId, options.sessionDoc, options.error
|
|
143802
|
-
providerPromptSettled: options.runtime.promptStarted && !options.runtime.promptInFlight
|
|
143803
|
-
});
|
|
144079
|
+
await this.handleTurnError(options.sessionId, options.sessionDoc, options.error);
|
|
143804
144080
|
await options.onUnhandledError?.(options.error);
|
|
143805
144081
|
}
|
|
143806
144082
|
async finalizeHaltedTurn(options) {
|
|
@@ -143846,12 +144122,10 @@ ${withCauses}`;
|
|
|
143846
144122
|
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
144123
|
});
|
|
143848
144124
|
}
|
|
143849
|
-
async handleTurnError(sessionId, sessionDoc, error2
|
|
144125
|
+
async handleTurnError(sessionId, sessionDoc, error2) {
|
|
143850
144126
|
const acpError = error2 ? parseACPError(error2) : null;
|
|
143851
144127
|
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
|
-
});
|
|
144128
|
+
await this.deps.turnFinalization.finalizeACPState(sessionId, this.currentTurnBySession.get(sessionId));
|
|
143855
144129
|
await this.persistCodeCollabTurnDiffsAfterACPFinalization(sessionId, this.currentTurnBySession.get(sessionId));
|
|
143856
144130
|
await this.deps.turnFinalization.flushSessionUsage(sessionId);
|
|
143857
144131
|
if (error2) {
|
|
@@ -145612,8 +145886,7 @@ ${withCauses}`;
|
|
|
145612
145886
|
kind: "finish-assistant",
|
|
145613
145887
|
turnId,
|
|
145614
145888
|
endedAt: getServerNow(),
|
|
145615
|
-
force: true
|
|
145616
|
-
settleContextCompactionAsFailed: true
|
|
145889
|
+
force: true
|
|
145617
145890
|
});
|
|
145618
145891
|
await this.finalizeCancelledTurn({
|
|
145619
145892
|
sessionId,
|
|
@@ -149266,9 +149539,15 @@ ${withCauses}`;
|
|
|
149266
149539
|
}
|
|
149267
149540
|
});
|
|
149268
149541
|
this.deps.logger.error(`[${spec.sourceSessionId}] Worktree session fork failed: ${publicError.detail instanceof Error ? publicError.detail.message : String(publicError.detail ?? error2)}`);
|
|
149542
|
+
return;
|
|
149269
149543
|
} finally {
|
|
149270
149544
|
this.activeOperations.delete(operation.id);
|
|
149271
149545
|
}
|
|
149546
|
+
try {
|
|
149547
|
+
await targetDoc.syncModelSummary();
|
|
149548
|
+
} catch {
|
|
149549
|
+
this.deps.logger.warn(`[${targetSessionId}] Failed to publish fork model summary`);
|
|
149550
|
+
}
|
|
149272
149551
|
}
|
|
149273
149552
|
}
|
|
149274
149553
|
const lastUserIndex = (history) => {
|
|
@@ -173352,6 +173631,17 @@ ${escapeHtmlScriptContent(VISUAL_ANNOTATION_INSPECTOR_BROWSER_SCRIPT)}
|
|
|
173352
173631
|
}
|
|
173353
173632
|
function buildLocalPreviewRequestHeaders(headers2, options) {
|
|
173354
173633
|
const proxyHeaders = new Headers(stripLocalPreviewRequestHeaders(headers2));
|
|
173634
|
+
const fetchMode = proxyHeaders.get("sec-fetch-mode");
|
|
173635
|
+
if (fetchMode === "navigate" || fetchMode === "nested-navigate") {
|
|
173636
|
+
for (const name2 of [
|
|
173637
|
+
"sec-fetch-site",
|
|
173638
|
+
"sec-fetch-mode",
|
|
173639
|
+
"sec-fetch-dest",
|
|
173640
|
+
"sec-fetch-user"
|
|
173641
|
+
]) {
|
|
173642
|
+
proxyHeaders.delete(name2);
|
|
173643
|
+
}
|
|
173644
|
+
}
|
|
173355
173645
|
if (options) {
|
|
173356
173646
|
const rewrittenReferer = rewriteLocalPreviewReferer(getHeaderValue(headers2, "referer") ?? "", {
|
|
173357
173647
|
localOrigin: options.localOrigin,
|
|
@@ -176606,7 +176896,7 @@ ${escapeHtmlScriptContent(VISUAL_ANNOTATION_INSPECTOR_BROWSER_SCRIPT)}
|
|
|
176606
176896
|
applyAcpModeAndModel: async (session2, acpConfig, context2) => await this.applyAcpModeAndModel(session2, acpConfig, context2),
|
|
176607
176897
|
createAssistantEntryForTurn: async (sessionId, sessionDoc, turnId, modelInfo, userTurnId) => await this.createAssistantEntryForTurn(sessionId, sessionDoc, turnId, modelInfo, userTurnId),
|
|
176608
176898
|
turnFinalization: {
|
|
176609
|
-
finalizeACPState: async (sessionId, turnId
|
|
176899
|
+
finalizeACPState: async (sessionId, turnId) => await this.finalizeACPState(sessionId, turnId),
|
|
176610
176900
|
persistCodeCollabTurnDiffs: async (sessionId, turnId) => await this.persistCodeCollabTurnDiffs(sessionId, turnId),
|
|
176611
176901
|
flushSessionUsage: async (sessionId) => await this.flushSessionUsage(sessionId),
|
|
176612
176902
|
syncSessionBranchName: async (sessionId, session2) => await this.turnPostProcessingService.syncSessionBranchName(sessionId, session2),
|
|
@@ -178596,9 +178886,6 @@ ${escapeHtmlScriptContent(VISUAL_ANNOTATION_INSPECTOR_BROWSER_SCRIPT)}
|
|
|
178596
178886
|
this.sessionManager.on("onACPUpdateMessage", (sessionId, update2) => {
|
|
178597
178887
|
this.enqueueACPUpdate(sessionId, update2);
|
|
178598
178888
|
});
|
|
178599
|
-
this.sessionManager.on("onCodexLiveReasoningStatus", (sessionId, label2) => {
|
|
178600
|
-
this.setSessionActivePresencePhase(sessionId, "thinking", label2 ?? void 0);
|
|
178601
|
-
});
|
|
178602
178889
|
this.sessionManager.on("onWriteTextFile", (sessionId, event) => {
|
|
178603
178890
|
this.trackCodeCollabEvidenceWrite(sessionId, this.collectCodeCollabWriteTextFileEvidence(sessionId, event));
|
|
178604
178891
|
});
|
|
@@ -180033,7 +180320,7 @@ ${escapeHtmlScriptContent(VISUAL_ANNOTATION_INSPECTOR_BROWSER_SCRIPT)}
|
|
|
180033
180320
|
this.scheduleCodeCollabTurnRetry(sessionId, turnId);
|
|
180034
180321
|
}
|
|
180035
180322
|
}
|
|
180036
|
-
async finalizeACPState(sessionId, turnId
|
|
180323
|
+
async finalizeACPState(sessionId, turnId) {
|
|
180037
180324
|
if (!turnId || this.store.getTurnId(sessionId) === turnId) {
|
|
180038
180325
|
await this.awaitTurnHistoryGate(sessionId);
|
|
180039
180326
|
}
|
|
@@ -180057,8 +180344,7 @@ ${escapeHtmlScriptContent(VISUAL_ANNOTATION_INSPECTOR_BROWSER_SCRIPT)}
|
|
|
180057
180344
|
kind: "finish-assistant",
|
|
180058
180345
|
turnId,
|
|
180059
180346
|
endedAt,
|
|
180060
|
-
permissionWaitMs
|
|
180061
|
-
settleContextCompactionAsFailed: options?.settleContextCompactionAsFailed
|
|
180347
|
+
permissionWaitMs
|
|
180062
180348
|
});
|
|
180063
180349
|
await sessionDoc.waitUntilSynced();
|
|
180064
180350
|
} catch (error2) {
|
|
@@ -181960,6 +182246,7 @@ ${escapeHtmlScriptContent(VISUAL_ANNOTATION_INSPECTOR_BROWSER_SCRIPT)}
|
|
|
181960
182246
|
};
|
|
181961
182247
|
}
|
|
181962
182248
|
async handleAgentPermissionRequest(sessionId, requestId, request2, model, agentClient) {
|
|
182249
|
+
const permissionTurnId = this.store.getTurnId(sessionId);
|
|
181963
182250
|
const isAskUserQuestionRequest = isAskUserQuestionPermissionRequest(request2);
|
|
181964
182251
|
const askUserQuestionMeta = isAskUserQuestionRequest ? parseAskUserQuestionPermissionMeta(request2._meta) : null;
|
|
181965
182252
|
const permissionTimeoutMs = typeof askUserQuestionMeta?.autoResolveAt === "number" ? Math.min(PERMISSION_REQUEST_TIMEOUT_MS, Math.max(0, askUserQuestionMeta.autoResolveAt - getServerNow())) : PERMISSION_REQUEST_TIMEOUT_MS;
|
|
@@ -182005,6 +182292,15 @@ ${escapeHtmlScriptContent(VISUAL_ANNOTATION_INSPECTOR_BROWSER_SCRIPT)}
|
|
|
182005
182292
|
let historyUserId;
|
|
182006
182293
|
let permissionRequestPersisted = false;
|
|
182007
182294
|
try {
|
|
182295
|
+
await this.awaitTurnHistoryGate(sessionId);
|
|
182296
|
+
await this.flushACPUpdatesNow(sessionId);
|
|
182297
|
+
if (this.deletedSessionIds.has(sessionId) || this.store.getTurnId(sessionId) !== permissionTurnId) {
|
|
182298
|
+
throw new Error("Permission owner changed while draining ACP history");
|
|
182299
|
+
}
|
|
182300
|
+
const acpState = this.store.get(sessionId);
|
|
182301
|
+
if (acpState.acpUpdateBuffer.length > 0 || acpState.acpFlushInFlight) {
|
|
182302
|
+
throw new Error("ACP history has not drained before permission persistence");
|
|
182303
|
+
}
|
|
182008
182304
|
permissionRequestPersisted = await ensurePermissionRequestOnToolCall(doc, requestId, request2, model);
|
|
182009
182305
|
await doc.setLastMessageAt();
|
|
182010
182306
|
const meta = await doc.getMetaState();
|
|
@@ -183257,6 +183553,8 @@ ${escapeHtmlScriptContent(VISUAL_ANNOTATION_INSPECTOR_BROWSER_SCRIPT)}
|
|
|
183257
183553
|
case "session/preview-create":
|
|
183258
183554
|
case "session/preview-revoke":
|
|
183259
183555
|
return `session:${message.sessionId}:preview`;
|
|
183556
|
+
case "machine/acp-authenticate":
|
|
183557
|
+
return message.action === "start" ? "machine:acp-authenticate:start" : "machine:acp-authenticate:control";
|
|
183260
183558
|
case "session/cancel":
|
|
183261
183559
|
return null;
|
|
183262
183560
|
default:
|
|
@@ -187316,7 +187614,13 @@ export PATH=${toSingleQuotedShellString(ghShimBinDir)}:"$PATH"
|
|
|
187316
187614
|
let agentProcessHandle;
|
|
187317
187615
|
try {
|
|
187318
187616
|
callbacks.abortSignal?.throwIfAborted();
|
|
187319
|
-
|
|
187617
|
+
const executable = resolveDeepSeekHarnessSpawn({
|
|
187618
|
+
command: callbacks.command,
|
|
187619
|
+
args: callbacks.args ?? [],
|
|
187620
|
+
env: env2,
|
|
187621
|
+
workdir: this.getWorkdir()
|
|
187622
|
+
});
|
|
187623
|
+
agentProcessHandle = await this.sandbox.spawn(executable.command, executable.args, {
|
|
187320
187624
|
cwd: this.getWorkdir(),
|
|
187321
187625
|
env: env2,
|
|
187322
187626
|
stdio: [
|
|
@@ -187405,7 +187709,6 @@ export PATH=${toSingleQuotedShellString(ghShimBinDir)}:"$PATH"
|
|
|
187405
187709
|
forkSessionTurnId: callbacks.forkSessionTurnId,
|
|
187406
187710
|
onStartupStage: callbacks.onStartupStage,
|
|
187407
187711
|
onUpdateMessage: callbacks.onUpdateMessage,
|
|
187408
|
-
onLiveReasoningStatus: callbacks.onLiveReasoningStatus,
|
|
187409
187712
|
onRequestPermission: callbacks.onRequestPermission,
|
|
187410
187713
|
onUsageUpdate: callbacks.onUsageUpdate,
|
|
187411
187714
|
onContextWindowUsageUpdate: callbacks.onContextWindowUsageUpdate,
|
|
@@ -188752,9 +189055,6 @@ export PATH=${toSingleQuotedShellString(ghShimBinDir)}:"$PATH"
|
|
|
188752
189055
|
onUpdateMessage: (update2) => {
|
|
188753
189056
|
dispatchEvent(() => this.emit("onACPUpdateMessage", sessionId, update2));
|
|
188754
189057
|
},
|
|
188755
|
-
onLiveReasoningStatus: (label2) => {
|
|
188756
|
-
dispatchEvent(() => this.emit("onCodexLiveReasoningStatus", sessionId, label2));
|
|
188757
|
-
},
|
|
188758
189058
|
onRequestPermission: (requestId, request2) => {
|
|
188759
189059
|
if (options?.allowInteractiveRequest && !options.allowInteractiveRequest()) {
|
|
188760
189060
|
return Promise.resolve({
|
|
@@ -224635,11 +224935,13 @@ ${page}${helpTipBottom}${choiceDescription}${ansiEscapes.cursorHide}`;
|
|
|
224635
224935
|
}
|
|
224636
224936
|
function toMachineListEntry(machine, onlineMachineIds) {
|
|
224637
224937
|
const legacy2 = machine;
|
|
224938
|
+
const online = onlineMachineIds?.has(machine.id) === true;
|
|
224638
224939
|
return {
|
|
224639
224940
|
...machine,
|
|
224640
224941
|
acpCapabilities: legacy2.acpCapabilities,
|
|
224641
224942
|
raceLimits: legacy2.raceLimits ?? {},
|
|
224642
|
-
online
|
|
224943
|
+
online,
|
|
224944
|
+
onlineStatus: onlineMachineIds === null ? "unknown" : online ? "online" : "offline"
|
|
224643
224945
|
};
|
|
224644
224946
|
}
|
|
224645
224947
|
function isLegacyRateLimitEntryForCliType(key2, cliType) {
|
|
@@ -224764,7 +225066,7 @@ ${page}${helpTipBottom}${choiceDescription}${ansiEscapes.cursorHide}`;
|
|
|
224764
225066
|
const row = [
|
|
224765
225067
|
machine.id,
|
|
224766
225068
|
machine.id === currentMachineId ? `${machine.name} (current)` : machine.name,
|
|
224767
|
-
machine.
|
|
225069
|
+
machine.onlineStatus,
|
|
224768
225070
|
formatMachineCli(machine)
|
|
224769
225071
|
];
|
|
224770
225072
|
if (includeAgents) {
|
|
@@ -224780,10 +225082,10 @@ ${page}${helpTipBottom}${choiceDescription}${ansiEscapes.cursorHide}`;
|
|
|
224780
225082
|
await withWorkspaceManager$1(auth, workspace, "machine", async (manager) => {
|
|
224781
225083
|
const onlineMachineIds = await manager.getOnlineMachineIds();
|
|
224782
225084
|
if (onlineMachineIds === null) {
|
|
224783
|
-
console.error(
|
|
225085
|
+
console.error('Warning: presence room unavailable; machine online status is unknown, reported as onlineStatus "unknown".');
|
|
224784
225086
|
}
|
|
224785
225087
|
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,
|
|
225088
|
+
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
225089
|
if (options.includeAgents === true) {
|
|
224788
225090
|
machines = await attachAgentConfigsToMachines(manager.repo, workspace.id, machines);
|
|
224789
225091
|
}
|
|
@@ -225561,7 +225863,7 @@ ${page}${helpTipBottom}${choiceDescription}${ansiEscapes.cursorHide}`;
|
|
|
225561
225863
|
data = createReviewBundleSnapshot(bundle);
|
|
225562
225864
|
}
|
|
225563
225865
|
const { injectReviewSnapshot } = await import("./chunks/index-VoI6Ds2-.js");
|
|
225564
|
-
const { resolveReviewViewerTemplate } = await import("./chunks/review-viewer-
|
|
225866
|
+
const { resolveReviewViewerTemplate } = await import("./chunks/review-viewer-DDjD2VXi.js").then(async (m) => {
|
|
225565
225867
|
await m.__tla;
|
|
225566
225868
|
return m;
|
|
225567
225869
|
});
|
|
@@ -245378,18 +245680,22 @@ ${prompt2}` : prompt2;
|
|
|
245378
245680
|
}
|
|
245379
245681
|
};
|
|
245380
245682
|
};
|
|
245381
|
-
const
|
|
245683
|
+
const makeMachineLivenessLookupForMcp = (manager, ctx) => {
|
|
245382
245684
|
let onlineMachineIds;
|
|
245383
245685
|
return async (machineId) => {
|
|
245384
245686
|
if (machineId === ctx.machineId) {
|
|
245385
|
-
return
|
|
245687
|
+
return "online";
|
|
245386
245688
|
}
|
|
245387
245689
|
onlineMachineIds ??= manager.getOnlineMachineIds();
|
|
245388
|
-
|
|
245690
|
+
const resolved = await onlineMachineIds;
|
|
245691
|
+
if (resolved === null) {
|
|
245692
|
+
return "unknown";
|
|
245693
|
+
}
|
|
245694
|
+
return resolved.has(machineId) ? "online" : "offline";
|
|
245389
245695
|
};
|
|
245390
245696
|
};
|
|
245391
|
-
const
|
|
245392
|
-
if (
|
|
245697
|
+
const assertMachineNotOfflineForSingleCommand = async (manager, machineId, ctx) => {
|
|
245698
|
+
if (await makeMachineLivenessLookupForMcp(manager, ctx)(machineId) === "offline") {
|
|
245393
245699
|
throw new LodyOperationStoreError("MACHINE_OFFLINE", `Target Machine is offline: ${machineId}`, true);
|
|
245394
245700
|
}
|
|
245395
245701
|
};
|
|
@@ -245551,8 +245857,12 @@ ${prompt2}` : prompt2;
|
|
|
245551
245857
|
const delegatedRequester = toDelegatedSessionRequester(invoking.identity);
|
|
245552
245858
|
const machineEntries = await listAliveDocMetas(manager, isMachineDocRoomId);
|
|
245553
245859
|
const onlineMachineIds = await manager.getOnlineMachineIds();
|
|
245554
|
-
const
|
|
245555
|
-
|
|
245860
|
+
const machineLivenessOf = (machineId) => {
|
|
245861
|
+
if (machineId === auth.machineId) return "online";
|
|
245862
|
+
if (onlineMachineIds === null) return "unknown";
|
|
245863
|
+
return onlineMachineIds.has(machineId) ? "online" : "offline";
|
|
245864
|
+
};
|
|
245865
|
+
const machineCandidates = selectMachineMetasForOptions(machineEntries.map((entry) => entry.meta), input2.machineId).filter((machine) => input2.machineId !== void 0 || machineLivenessOf(machine.id) !== "offline");
|
|
245556
245866
|
const machines = await filterAuthorizedMachinesForOptions(auth, workspaceId, machineCandidates, delegatedRequester);
|
|
245557
245867
|
const selectedMachine = selectMachineForOptions(machines, input2.machineId, currentSession.machineId);
|
|
245558
245868
|
await syncMachineFlockDocsForOptions(manager, workspaceId, [
|
|
@@ -245587,7 +245897,7 @@ ${prompt2}` : prompt2;
|
|
|
245587
245897
|
return currentLocalProjectId !== void 0 && project.id === currentLocalProjectId;
|
|
245588
245898
|
});
|
|
245589
245899
|
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,
|
|
245900
|
+
const summarizedLocalProjects = await Promise.all(localProjects.map((project) => summarizeLocalProjectForOptions(auth, workspaceId, selectedMachine, project, requesterUserId, machineLivenessOf(selectedMachine.id) !== "offline")));
|
|
245591
245901
|
const repoQuery = normalizeCliValue(input2.repoQuery)?.toLowerCase();
|
|
245592
245902
|
const repos = repoQuery ? (await listWorkspaceGitHubRepositoriesForCliToken({
|
|
245593
245903
|
token: auth.token,
|
|
@@ -245605,7 +245915,8 @@ ${prompt2}` : prompt2;
|
|
|
245605
245915
|
machines: machines.map((machine) => ({
|
|
245606
245916
|
id: machine.id,
|
|
245607
245917
|
name: machine.name,
|
|
245608
|
-
online:
|
|
245918
|
+
online: machineLivenessOf(machine.id) === "online",
|
|
245919
|
+
onlineStatus: machineLivenessOf(machine.id),
|
|
245609
245920
|
canUse: true
|
|
245610
245921
|
})),
|
|
245611
245922
|
agentConfigs: agentConfigs.map((config2) => summarizeAgentConfig(config2, acpCapabilities[getAcpCapabilityCacheKey(config2.id)])),
|
|
@@ -245641,7 +245952,7 @@ ${prompt2}` : prompt2;
|
|
|
245641
245952
|
return await withOperationStore((store) => store.snapshot(retry2));
|
|
245642
245953
|
}
|
|
245643
245954
|
const targetMachineId = resolved.input.machineId ?? currentSession.machineId;
|
|
245644
|
-
await
|
|
245955
|
+
await assertMachineNotOfflineForSingleCommand(manager, targetMachineId, ctx);
|
|
245645
245956
|
const createOptions = buildMcpCreateOptions(resolved.input, ctx);
|
|
245646
245957
|
bindMcpCreateContext(createOptions, invoking.identity, currentSession);
|
|
245647
245958
|
bindAgentRoleCreateOptions(createOptions, resolved.role);
|
|
@@ -245760,7 +246071,7 @@ ${prompt2}` : prompt2;
|
|
|
245760
246071
|
throw new LodyOperationStoreError("SESSION_NOT_FOUND", `Target Session not found: ${args2.sessionId}`, false);
|
|
245761
246072
|
}
|
|
245762
246073
|
assertDifferentMcpSession(currentSession, targetSession);
|
|
245763
|
-
await
|
|
246074
|
+
await assertMachineNotOfflineForSingleCommand(manager, targetSession.machineId, ctx);
|
|
245764
246075
|
try {
|
|
245765
246076
|
await validateSessionChatTarget({
|
|
245766
246077
|
auth,
|
|
@@ -246000,7 +246311,7 @@ ${prompt2}` : prompt2;
|
|
|
246000
246311
|
if (retry2) {
|
|
246001
246312
|
return await withOperationStore((store) => store.snapshot(retry2));
|
|
246002
246313
|
}
|
|
246003
|
-
const
|
|
246314
|
+
const machineLiveness = makeMachineLivenessLookupForMcp(manager, ctx);
|
|
246004
246315
|
const validatedItems = await mapWithConcurrency(expanded, 5, async (item, index) => {
|
|
246005
246316
|
const label2 = item.label;
|
|
246006
246317
|
if (!item.prompt) {
|
|
@@ -246031,7 +246342,7 @@ ${prompt2}` : prompt2;
|
|
|
246031
246342
|
};
|
|
246032
246343
|
}
|
|
246033
246344
|
const targetMachineId = resolved.input.machineId ?? requester.machineId;
|
|
246034
|
-
if (
|
|
246345
|
+
if (await machineLiveness(targetMachineId) === "offline") {
|
|
246035
246346
|
return {
|
|
246036
246347
|
operationItem: batchFailure("MACHINE_OFFLINE", `Target Machine is offline: ${targetMachineId}`, true, label2),
|
|
246037
246348
|
dispatchConfig: null
|
|
@@ -246166,7 +246477,7 @@ ${prompt2}` : prompt2;
|
|
|
246166
246477
|
if (retry2) {
|
|
246167
246478
|
return await withOperationStore((store) => store.snapshot(retry2));
|
|
246168
246479
|
}
|
|
246169
|
-
const
|
|
246480
|
+
const machineLiveness = makeMachineLivenessLookupForMcp(manager, ctx);
|
|
246170
246481
|
const initialItems = await mapWithConcurrency(expanded, 5, async (item) => {
|
|
246171
246482
|
if (!item.sessionId || !item.prompt) {
|
|
246172
246483
|
return batchFailure("INVALID_ITEM", "Chat item requires sessionId and prompt.", false, item.label);
|
|
@@ -246178,7 +246489,7 @@ ${prompt2}` : prompt2;
|
|
|
246178
246489
|
if (target.id === requester.id) {
|
|
246179
246490
|
return batchFailure("INVALID_ITEM", "An MCP agent cannot chat its own active Session.", false, item.label);
|
|
246180
246491
|
}
|
|
246181
|
-
if (
|
|
246492
|
+
if (await machineLiveness(target.machineId) === "offline") {
|
|
246182
246493
|
return batchFailure("MACHINE_OFFLINE", `Target Machine is offline: ${target.machineId}`, true, item.label);
|
|
246183
246494
|
}
|
|
246184
246495
|
try {
|