oh-my-opencode 5.0.0-beta.4 → 5.0.0-beta.6
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/cli/index.js +496 -377
- package/dist/cli-node/index.js +496 -377
- package/dist/index.js +1136 -1104
- package/dist/skills/coding-agent-sessions/SKILL.md +3 -2
- package/dist/skills/coding-agent-sessions/references/all-platforms.md +1 -1
- package/dist/skills/coding-agent-sessions/references/senpi.md +4 -4
- package/dist/skills/coding-agent-sessions/scripts/agent_sessions/pi_family.py +1 -1
- package/dist/tui.js +20 -1
- package/package.json +15 -14
- package/packages/lsp-core/src/lsp/client-wrapper.test.ts +60 -7
- package/packages/lsp-core/src/lsp/client-wrapper.ts +69 -16
- package/packages/lsp-core/src/lsp/workspace-edit-adversarial.test.ts +20 -1
- package/packages/lsp-core/src/tools/diagnostics.ts +3 -3
- package/packages/lsp-core/src/tools/navigation.ts +4 -2
- package/packages/lsp-core/src/tools/rename.ts +4 -2
- package/packages/lsp-core/src/tools/symbols.ts +1 -1
- package/packages/lsp-daemon/dist/cli.js +83 -29
- package/packages/lsp-daemon/dist/client.js +76 -22
- package/packages/lsp-daemon/dist/index.js +81 -27
- package/packages/lsp-tools-mcp/dist/cli.js +76 -22
- package/packages/lsp-tools-mcp/dist/mcp.js +76 -22
- package/packages/lsp-tools-mcp/dist/tools.js +76 -22
- package/packages/omo-codex/plugin/.codex-plugin/plugin.json +1 -1
- package/packages/omo-codex/plugin/components/bootstrap/hooks/hooks.json +1 -1
- package/packages/omo-codex/plugin/components/bootstrap/package.json +1 -1
- package/packages/omo-codex/plugin/components/codegraph/dist/cli.js +14 -1
- package/packages/omo-codex/plugin/components/codegraph/dist/serve.js +14 -1
- package/packages/omo-codex/plugin/components/codegraph/package.json +1 -1
- package/packages/omo-codex/plugin/components/comment-checker/hooks/hooks.json +1 -1
- package/packages/omo-codex/plugin/components/comment-checker/package.json +1 -1
- package/packages/omo-codex/plugin/components/git-bash/hooks/hooks.json +2 -2
- package/packages/omo-codex/plugin/components/git-bash/package.json +1 -1
- package/packages/omo-codex/plugin/components/lazycodex-executor-verify/hooks/hooks.json +1 -1
- package/packages/omo-codex/plugin/components/lazycodex-executor-verify/package.json +1 -1
- package/packages/omo-codex/plugin/components/lsp/dist/.omo-runtime-manifest.json +3 -3
- package/packages/omo-codex/plugin/components/lsp/dist/cli.js +83 -29
- package/packages/omo-codex/plugin/components/lsp/hooks/hooks.json +2 -2
- package/packages/omo-codex/plugin/components/lsp/package.json +1 -1
- package/packages/omo-codex/plugin/components/rules/hooks/hooks.json +4 -4
- package/packages/omo-codex/plugin/components/rules/package.json +1 -1
- package/packages/omo-codex/plugin/components/start-work-continuation/hooks/hooks.json +2 -2
- package/packages/omo-codex/plugin/components/start-work-continuation/package.json +1 -1
- package/packages/omo-codex/plugin/components/teammode/hooks/hooks.json +1 -1
- package/packages/omo-codex/plugin/components/teammode/package.json +1 -1
- package/packages/omo-codex/plugin/components/telemetry/dist/cli.js +24 -12
- package/packages/omo-codex/plugin/components/telemetry/dist/posthog.js +24 -12
- package/packages/omo-codex/plugin/components/telemetry/hooks/hooks.json +1 -1
- package/packages/omo-codex/plugin/components/telemetry/package.json +1 -1
- package/packages/omo-codex/plugin/components/ultrawork/hooks/hooks.json +1 -1
- package/packages/omo-codex/plugin/components/ultrawork/package.json +1 -1
- package/packages/omo-codex/plugin/components/ulw-loop/hooks/hooks.json +4 -4
- package/packages/omo-codex/plugin/components/ulw-loop/package.json +1 -1
- package/packages/omo-codex/plugin/hooks/post-compact-resetting-git-bash-mcp-reminder.json +1 -1
- package/packages/omo-codex/plugin/hooks/post-compact-resetting-lsp-diagnostics-cache.json +1 -1
- package/packages/omo-codex/plugin/hooks/post-compact-resetting-project-rule-cache.json +1 -1
- package/packages/omo-codex/plugin/hooks/post-tool-use-checking-codegraph-init-guidance.json +1 -1
- package/packages/omo-codex/plugin/hooks/post-tool-use-checking-comments.json +1 -1
- package/packages/omo-codex/plugin/hooks/post-tool-use-checking-lsp-diagnostics.json +1 -1
- package/packages/omo-codex/plugin/hooks/post-tool-use-checking-thread-title-hygiene.json +1 -1
- package/packages/omo-codex/plugin/hooks/post-tool-use-matching-project-rules.json +1 -1
- package/packages/omo-codex/plugin/hooks/pre-tool-use-enforcing-unlimited-goal-budget.json +1 -1
- package/packages/omo-codex/plugin/hooks/pre-tool-use-guarding-ulw-loop-spawns.json +1 -1
- package/packages/omo-codex/plugin/hooks/pre-tool-use-recommending-git-bash-mcp.json +1 -1
- package/packages/omo-codex/plugin/hooks/session-start-checking-auto-update.json +1 -1
- package/packages/omo-codex/plugin/hooks/session-start-checking-bootstrap-provisioning.json +1 -1
- package/packages/omo-codex/plugin/hooks/session-start-checking-codegraph-bootstrap.json +1 -1
- package/packages/omo-codex/plugin/hooks/session-start-loading-project-rules.json +1 -1
- package/packages/omo-codex/plugin/hooks/session-start-recording-session-telemetry.json +1 -1
- package/packages/omo-codex/plugin/hooks/stop-checking-start-work-continuation.json +1 -1
- package/packages/omo-codex/plugin/hooks/stop-checking-ulw-loop-resume.json +1 -1
- package/packages/omo-codex/plugin/hooks/subagent-stop-checking-start-work-continuation.json +1 -1
- package/packages/omo-codex/plugin/hooks/subagent-stop-verifying-lazycodex-executor-evidence.json +1 -1
- package/packages/omo-codex/plugin/hooks/user-prompt-submit-checking-ultrawork-trigger.json +1 -1
- package/packages/omo-codex/plugin/hooks/user-prompt-submit-checking-ulw-loop-steering.json +1 -1
- package/packages/omo-codex/plugin/hooks/user-prompt-submit-loading-project-rules.json +1 -1
- package/packages/omo-codex/plugin/package-lock.json +13 -13
- package/packages/omo-codex/plugin/package.json +1 -1
- package/packages/omo-codex/plugin/skills/coding-agent-sessions/SKILL.md +3 -2
- package/packages/omo-codex/plugin/skills/coding-agent-sessions/references/all-platforms.md +1 -1
- package/packages/omo-codex/plugin/skills/coding-agent-sessions/references/senpi.md +4 -4
- package/packages/omo-codex/plugin/skills/coding-agent-sessions/scripts/agent_sessions/pi_family.py +1 -1
- package/packages/omo-codex/scripts/install-dist/install-local.mjs +39 -16
- package/packages/shared-skills/skills/coding-agent-sessions/SKILL.md +3 -2
- package/packages/shared-skills/skills/coding-agent-sessions/references/all-platforms.md +1 -1
- package/packages/shared-skills/skills/coding-agent-sessions/references/senpi.md +4 -4
- package/packages/shared-skills/skills/coding-agent-sessions/scripts/agent_sessions/pi_family.py +1 -1
|
@@ -3320,8 +3320,8 @@ function createIdleTimer(idleTimeoutMs, log, onTimeout) {
|
|
|
3320
3320
|
};
|
|
3321
3321
|
}
|
|
3322
3322
|
// ../lsp-core/src/lsp/client-wrapper.ts
|
|
3323
|
-
import { existsSync as existsSync9, statSync as statSync3 } from "node:fs";
|
|
3324
|
-
import { dirname as dirname6, join as join4, resolve as resolve7 } from "node:path";
|
|
3323
|
+
import { existsSync as existsSync9, realpathSync as realpathSync4, statSync as statSync3 } from "node:fs";
|
|
3324
|
+
import { basename as basename3, dirname as dirname6, join as join4, resolve as resolve7 } from "node:path";
|
|
3325
3325
|
|
|
3326
3326
|
// ../lsp-core/src/request-context.ts
|
|
3327
3327
|
import { AsyncLocalStorage } from "node:async_hooks";
|
|
@@ -4031,32 +4031,86 @@ function isDirectoryPath(filePath) {
|
|
|
4031
4031
|
}
|
|
4032
4032
|
}
|
|
4033
4033
|
function findWorkspaceRoot(filePath) {
|
|
4034
|
-
const
|
|
4034
|
+
const cwd = contextCwd();
|
|
4035
|
+
const abs = resolveReadablePathInsideContext(filePath);
|
|
4035
4036
|
let dir = abs;
|
|
4036
4037
|
if (!isDirectoryPath(dir)) {
|
|
4037
4038
|
dir = dirname6(dir);
|
|
4038
4039
|
}
|
|
4039
|
-
|
|
4040
|
-
while (dir
|
|
4041
|
-
|
|
4042
|
-
|
|
4043
|
-
|
|
4040
|
+
const fallbackRoot = nearestExistingDirectoryInsideContext(dir, cwd) ?? cwd;
|
|
4041
|
+
while (isPathInside(cwd, dir)) {
|
|
4042
|
+
const canonicalDir = existingDirectoryInsideContext(dir, cwd);
|
|
4043
|
+
if (canonicalDir !== undefined) {
|
|
4044
|
+
for (const marker of WORKSPACE_MARKERS) {
|
|
4045
|
+
if (existsSync9(join4(dir, marker))) {
|
|
4046
|
+
return canonicalDir;
|
|
4047
|
+
}
|
|
4044
4048
|
}
|
|
4045
4049
|
}
|
|
4046
|
-
|
|
4050
|
+
if (dir === cwd)
|
|
4051
|
+
break;
|
|
4047
4052
|
dir = dirname6(dir);
|
|
4048
4053
|
}
|
|
4049
|
-
return
|
|
4054
|
+
return fallbackRoot;
|
|
4050
4055
|
}
|
|
4051
|
-
function
|
|
4056
|
+
function resolveReadablePathInsideContext(filePath) {
|
|
4052
4057
|
const cwd = contextCwd();
|
|
4053
4058
|
const abs = resolve7(cwd, filePath);
|
|
4059
|
+
if (isPathInside(cwd, abs))
|
|
4060
|
+
return abs;
|
|
4061
|
+
const rebased = rebaseThroughCanonicalAncestor(abs, cwd);
|
|
4062
|
+
if (rebased !== undefined)
|
|
4063
|
+
return rebased;
|
|
4064
|
+
const canonical = canonicalizeExistingOrNearestAncestor(abs);
|
|
4065
|
+
if (isPathInside(cwd, canonical))
|
|
4066
|
+
return canonical;
|
|
4067
|
+
throw new LspInvalidPathError(`LSP file path must be inside request cwd: ${filePath}`);
|
|
4068
|
+
}
|
|
4069
|
+
function resolvePathInsideContext(filePath) {
|
|
4070
|
+
const cwd = contextCwd();
|
|
4071
|
+
const abs = resolveReadablePathInsideContext(filePath);
|
|
4054
4072
|
const canonical = canonicalizeExistingOrNearestAncestor(abs);
|
|
4055
4073
|
if (!isPathInside(cwd, canonical)) {
|
|
4056
4074
|
throw new LspInvalidPathError(`LSP file path must be inside request cwd: ${filePath}`);
|
|
4057
4075
|
}
|
|
4058
4076
|
return canonical;
|
|
4059
4077
|
}
|
|
4078
|
+
function rebaseThroughCanonicalAncestor(path, cwd) {
|
|
4079
|
+
let current = path;
|
|
4080
|
+
const suffix = [];
|
|
4081
|
+
while (true) {
|
|
4082
|
+
if (existsSync9(current)) {
|
|
4083
|
+
const canonical = realpathSync4(current);
|
|
4084
|
+
if (isPathInside(cwd, canonical))
|
|
4085
|
+
return suffix.length === 0 ? canonical : join4(canonical, ...suffix);
|
|
4086
|
+
}
|
|
4087
|
+
const parent = dirname6(current);
|
|
4088
|
+
if (parent === current)
|
|
4089
|
+
return;
|
|
4090
|
+
suffix.unshift(basename3(current));
|
|
4091
|
+
current = parent;
|
|
4092
|
+
}
|
|
4093
|
+
}
|
|
4094
|
+
function existingDirectoryInsideContext(directory, cwd) {
|
|
4095
|
+
if (!existsSync9(directory))
|
|
4096
|
+
return;
|
|
4097
|
+
const canonical = realpathSync4(directory);
|
|
4098
|
+
if (!statSync3(canonical).isDirectory())
|
|
4099
|
+
return;
|
|
4100
|
+
return isPathInside(cwd, canonical) ? canonical : undefined;
|
|
4101
|
+
}
|
|
4102
|
+
function nearestExistingDirectoryInsideContext(directory, cwd) {
|
|
4103
|
+
let current = directory;
|
|
4104
|
+
while (isPathInside(cwd, current)) {
|
|
4105
|
+
const canonical = existingDirectoryInsideContext(current, cwd);
|
|
4106
|
+
if (canonical !== undefined)
|
|
4107
|
+
return canonical;
|
|
4108
|
+
if (current === cwd)
|
|
4109
|
+
return;
|
|
4110
|
+
current = dirname6(current);
|
|
4111
|
+
}
|
|
4112
|
+
return;
|
|
4113
|
+
}
|
|
4060
4114
|
function formatServerLookupError(result) {
|
|
4061
4115
|
if (result.status === "not_installed") {
|
|
4062
4116
|
return formatNotInstalled(result);
|
|
@@ -4127,7 +4181,7 @@ function formatNotInstalled(result) {
|
|
|
4127
4181
|
].join(`
|
|
4128
4182
|
`);
|
|
4129
4183
|
}
|
|
4130
|
-
var
|
|
4184
|
+
var READ_ONLY_TOOLS = new Set([
|
|
4131
4185
|
"diagnostics",
|
|
4132
4186
|
"definition",
|
|
4133
4187
|
"references",
|
|
@@ -4136,7 +4190,7 @@ var READ_ONLY_RETRY_TOOLS = new Set([
|
|
|
4136
4190
|
"prepareRename"
|
|
4137
4191
|
]);
|
|
4138
4192
|
async function withLspClient(filePath, fn, toolName, options = {}) {
|
|
4139
|
-
const absPath = resolvePathInsideContext(filePath);
|
|
4193
|
+
const absPath = READ_ONLY_TOOLS.has(toolName) ? resolveReadablePathInsideContext(filePath) : resolvePathInsideContext(filePath);
|
|
4140
4194
|
if (isDirectoryPath(absPath)) {
|
|
4141
4195
|
throw new LspInvalidPathError("Directory paths are not supported by this LSP tool. " + "Use lsp.diagnostics with a directory path for directory diagnostics.");
|
|
4142
4196
|
}
|
|
@@ -4151,9 +4205,9 @@ async function withLspClient(filePath, fn, toolName, options = {}) {
|
|
|
4151
4205
|
const acquireAndCall = async (allowRetry) => {
|
|
4152
4206
|
const client = await manager2.getClient(root, server2, options.signal);
|
|
4153
4207
|
try {
|
|
4154
|
-
return await fn(client, root);
|
|
4208
|
+
return await fn(client, root, absPath);
|
|
4155
4209
|
} catch (err) {
|
|
4156
|
-
if (allowRetry &&
|
|
4210
|
+
if (allowRetry && READ_ONLY_TOOLS.has(toolName) && isLspDeadConnectionError(err)) {
|
|
4157
4211
|
manager2.invalidateClient(root, server2.id, client);
|
|
4158
4212
|
return acquireAndCall(false);
|
|
4159
4213
|
}
|
|
@@ -4608,7 +4662,7 @@ async function executeLspDiagnostics(params, signal) {
|
|
|
4608
4662
|
const filePath = requireString(params, "filePath");
|
|
4609
4663
|
const severity = severityFilter(params);
|
|
4610
4664
|
try {
|
|
4611
|
-
const absPath =
|
|
4665
|
+
const absPath = resolveReadablePathInsideContext(filePath);
|
|
4612
4666
|
if (isDirectoryPath(absPath)) {
|
|
4613
4667
|
const extension = inferExtensionFromDirectory(absPath);
|
|
4614
4668
|
if (!extension) {
|
|
@@ -4637,7 +4691,7 @@ async function executeLspDiagnostics(params, signal) {
|
|
|
4637
4691
|
};
|
|
4638
4692
|
return text(output2.output, details2);
|
|
4639
4693
|
}
|
|
4640
|
-
const result = await withLspClient(filePath, async (client) => client.diagnostics(
|
|
4694
|
+
const result = await withLspClient(filePath, async (client, _workspaceRoot, resolvedFilePath) => client.diagnostics(resolvedFilePath, signal), "diagnostics", clientOptions(signal));
|
|
4641
4695
|
if (result.transientError) {
|
|
4642
4696
|
const message = result.transientError.message;
|
|
4643
4697
|
const details2 = {
|
|
@@ -4712,7 +4766,7 @@ async function executeLspGotoDefinition(params, signal) {
|
|
|
4712
4766
|
const line = requireNumber(params, "line");
|
|
4713
4767
|
const character = requireNumber(params, "character");
|
|
4714
4768
|
try {
|
|
4715
|
-
const result = await withLspClient(filePath, async (client) => client.definition(
|
|
4769
|
+
const result = await withLspClient(filePath, async (client, _workspaceRoot, resolvedFilePath) => client.definition(resolvedFilePath, line, character, signal), "definition", clientOptions(signal));
|
|
4716
4770
|
const locations = !result ? [] : Array.isArray(result) ? result : [result];
|
|
4717
4771
|
const details = { filePath, line, character, locations };
|
|
4718
4772
|
if (locations.length === 0)
|
|
@@ -4737,7 +4791,7 @@ async function executeLspFindReferences(params, signal) {
|
|
|
4737
4791
|
const character = requireNumber(params, "character");
|
|
4738
4792
|
const includeDeclaration = optionalBoolean(params, "includeDeclaration") ?? true;
|
|
4739
4793
|
try {
|
|
4740
|
-
const result = await withLspClient(filePath, async (client) => client.references(
|
|
4794
|
+
const result = await withLspClient(filePath, async (client, _workspaceRoot, resolvedFilePath) => client.references(resolvedFilePath, line, character, includeDeclaration, signal), "references", clientOptions(signal));
|
|
4741
4795
|
const references = Array.isArray(result) ? result : [];
|
|
4742
4796
|
const total = references.length;
|
|
4743
4797
|
const truncated = total > DEFAULT_MAX_REFERENCES;
|
|
@@ -4779,7 +4833,7 @@ async function executeLspPrepareRename(params, signal) {
|
|
|
4779
4833
|
const line = requireNumber(params, "line");
|
|
4780
4834
|
const character = requireNumber(params, "character");
|
|
4781
4835
|
try {
|
|
4782
|
-
const result = await withLspClient(filePath, async (client) => client.prepareRename(
|
|
4836
|
+
const result = await withLspClient(filePath, async (client, _workspaceRoot, resolvedFilePath) => client.prepareRename(resolvedFilePath, line, character, signal), "prepareRename", clientOptions(signal));
|
|
4783
4837
|
const details = { filePath, line, character, result };
|
|
4784
4838
|
return text(formatPrepareRenameResult(result), details);
|
|
4785
4839
|
} catch (error) {
|
|
@@ -4800,7 +4854,7 @@ async function executeLspRename(params, signal) {
|
|
|
4800
4854
|
const character = requireNumber(params, "character");
|
|
4801
4855
|
const newName = requireString(params, "newName");
|
|
4802
4856
|
try {
|
|
4803
|
-
const result = await withLspClient(filePath, async (client) => client.rename(
|
|
4857
|
+
const result = await withLspClient(filePath, async (client, _workspaceRoot, resolvedFilePath) => client.rename(resolvedFilePath, line, character, newName, signal), "rename", clientOptions(signal));
|
|
4804
4858
|
const details = { filePath, line, character, newName, apply: result.apply, edit: result.edit };
|
|
4805
4859
|
return text(formatApplyResult(result.apply), details, !result.apply.success);
|
|
4806
4860
|
} catch (error) {
|
|
@@ -4880,7 +4934,7 @@ async function executeLspSymbols(params, signal) {
|
|
|
4880
4934
|
const symbols2 = await withLspClient(filePath, async (client) => client.workspaceSymbols(query, signal), "workspaceSymbols", clientOptions(signal));
|
|
4881
4935
|
return formatSymbolsResult(filePath, scope, symbols2, limit, query);
|
|
4882
4936
|
}
|
|
4883
|
-
const symbols = await withLspClient(filePath, async (client) => client.documentSymbols(
|
|
4937
|
+
const symbols = await withLspClient(filePath, async (client, _workspaceRoot, resolvedFilePath) => client.documentSymbols(resolvedFilePath, signal), "documentSymbols", clientOptions(signal));
|
|
4884
4938
|
return formatSymbolsResult(filePath, scope, symbols, limit);
|
|
4885
4939
|
} catch (error) {
|
|
4886
4940
|
const query = optionalString(params, "query");
|
|
@@ -306,8 +306,8 @@ function createIdleTimer(idleTimeoutMs, log, onTimeout) {
|
|
|
306
306
|
};
|
|
307
307
|
}
|
|
308
308
|
// ../lsp-core/src/lsp/client-wrapper.ts
|
|
309
|
-
import { existsSync as existsSync9, statSync as statSync3 } from "node:fs";
|
|
310
|
-
import { dirname as dirname6, join as join4, resolve as resolve7 } from "node:path";
|
|
309
|
+
import { existsSync as existsSync9, realpathSync as realpathSync4, statSync as statSync3 } from "node:fs";
|
|
310
|
+
import { basename as basename3, dirname as dirname6, join as join4, resolve as resolve7 } from "node:path";
|
|
311
311
|
|
|
312
312
|
// ../lsp-core/src/request-context.ts
|
|
313
313
|
import { AsyncLocalStorage } from "node:async_hooks";
|
|
@@ -4030,32 +4030,86 @@ function isDirectoryPath(filePath) {
|
|
|
4030
4030
|
}
|
|
4031
4031
|
}
|
|
4032
4032
|
function findWorkspaceRoot(filePath) {
|
|
4033
|
-
const
|
|
4033
|
+
const cwd = contextCwd();
|
|
4034
|
+
const abs = resolveReadablePathInsideContext(filePath);
|
|
4034
4035
|
let dir = abs;
|
|
4035
4036
|
if (!isDirectoryPath(dir)) {
|
|
4036
4037
|
dir = dirname6(dir);
|
|
4037
4038
|
}
|
|
4038
|
-
|
|
4039
|
-
while (dir
|
|
4040
|
-
|
|
4041
|
-
|
|
4042
|
-
|
|
4039
|
+
const fallbackRoot = nearestExistingDirectoryInsideContext(dir, cwd) ?? cwd;
|
|
4040
|
+
while (isPathInside(cwd, dir)) {
|
|
4041
|
+
const canonicalDir = existingDirectoryInsideContext(dir, cwd);
|
|
4042
|
+
if (canonicalDir !== undefined) {
|
|
4043
|
+
for (const marker of WORKSPACE_MARKERS) {
|
|
4044
|
+
if (existsSync9(join4(dir, marker))) {
|
|
4045
|
+
return canonicalDir;
|
|
4046
|
+
}
|
|
4043
4047
|
}
|
|
4044
4048
|
}
|
|
4045
|
-
|
|
4049
|
+
if (dir === cwd)
|
|
4050
|
+
break;
|
|
4046
4051
|
dir = dirname6(dir);
|
|
4047
4052
|
}
|
|
4048
|
-
return
|
|
4053
|
+
return fallbackRoot;
|
|
4049
4054
|
}
|
|
4050
|
-
function
|
|
4055
|
+
function resolveReadablePathInsideContext(filePath) {
|
|
4051
4056
|
const cwd = contextCwd();
|
|
4052
4057
|
const abs = resolve7(cwd, filePath);
|
|
4058
|
+
if (isPathInside(cwd, abs))
|
|
4059
|
+
return abs;
|
|
4060
|
+
const rebased = rebaseThroughCanonicalAncestor(abs, cwd);
|
|
4061
|
+
if (rebased !== undefined)
|
|
4062
|
+
return rebased;
|
|
4063
|
+
const canonical = canonicalizeExistingOrNearestAncestor(abs);
|
|
4064
|
+
if (isPathInside(cwd, canonical))
|
|
4065
|
+
return canonical;
|
|
4066
|
+
throw new LspInvalidPathError(`LSP file path must be inside request cwd: ${filePath}`);
|
|
4067
|
+
}
|
|
4068
|
+
function resolvePathInsideContext(filePath) {
|
|
4069
|
+
const cwd = contextCwd();
|
|
4070
|
+
const abs = resolveReadablePathInsideContext(filePath);
|
|
4053
4071
|
const canonical = canonicalizeExistingOrNearestAncestor(abs);
|
|
4054
4072
|
if (!isPathInside(cwd, canonical)) {
|
|
4055
4073
|
throw new LspInvalidPathError(`LSP file path must be inside request cwd: ${filePath}`);
|
|
4056
4074
|
}
|
|
4057
4075
|
return canonical;
|
|
4058
4076
|
}
|
|
4077
|
+
function rebaseThroughCanonicalAncestor(path, cwd) {
|
|
4078
|
+
let current = path;
|
|
4079
|
+
const suffix = [];
|
|
4080
|
+
while (true) {
|
|
4081
|
+
if (existsSync9(current)) {
|
|
4082
|
+
const canonical = realpathSync4(current);
|
|
4083
|
+
if (isPathInside(cwd, canonical))
|
|
4084
|
+
return suffix.length === 0 ? canonical : join4(canonical, ...suffix);
|
|
4085
|
+
}
|
|
4086
|
+
const parent = dirname6(current);
|
|
4087
|
+
if (parent === current)
|
|
4088
|
+
return;
|
|
4089
|
+
suffix.unshift(basename3(current));
|
|
4090
|
+
current = parent;
|
|
4091
|
+
}
|
|
4092
|
+
}
|
|
4093
|
+
function existingDirectoryInsideContext(directory, cwd) {
|
|
4094
|
+
if (!existsSync9(directory))
|
|
4095
|
+
return;
|
|
4096
|
+
const canonical = realpathSync4(directory);
|
|
4097
|
+
if (!statSync3(canonical).isDirectory())
|
|
4098
|
+
return;
|
|
4099
|
+
return isPathInside(cwd, canonical) ? canonical : undefined;
|
|
4100
|
+
}
|
|
4101
|
+
function nearestExistingDirectoryInsideContext(directory, cwd) {
|
|
4102
|
+
let current = directory;
|
|
4103
|
+
while (isPathInside(cwd, current)) {
|
|
4104
|
+
const canonical = existingDirectoryInsideContext(current, cwd);
|
|
4105
|
+
if (canonical !== undefined)
|
|
4106
|
+
return canonical;
|
|
4107
|
+
if (current === cwd)
|
|
4108
|
+
return;
|
|
4109
|
+
current = dirname6(current);
|
|
4110
|
+
}
|
|
4111
|
+
return;
|
|
4112
|
+
}
|
|
4059
4113
|
function formatServerLookupError(result) {
|
|
4060
4114
|
if (result.status === "not_installed") {
|
|
4061
4115
|
return formatNotInstalled(result);
|
|
@@ -4126,7 +4180,7 @@ function formatNotInstalled(result) {
|
|
|
4126
4180
|
].join(`
|
|
4127
4181
|
`);
|
|
4128
4182
|
}
|
|
4129
|
-
var
|
|
4183
|
+
var READ_ONLY_TOOLS = new Set([
|
|
4130
4184
|
"diagnostics",
|
|
4131
4185
|
"definition",
|
|
4132
4186
|
"references",
|
|
@@ -4135,7 +4189,7 @@ var READ_ONLY_RETRY_TOOLS = new Set([
|
|
|
4135
4189
|
"prepareRename"
|
|
4136
4190
|
]);
|
|
4137
4191
|
async function withLspClient(filePath, fn, toolName, options = {}) {
|
|
4138
|
-
const absPath = resolvePathInsideContext(filePath);
|
|
4192
|
+
const absPath = READ_ONLY_TOOLS.has(toolName) ? resolveReadablePathInsideContext(filePath) : resolvePathInsideContext(filePath);
|
|
4139
4193
|
if (isDirectoryPath(absPath)) {
|
|
4140
4194
|
throw new LspInvalidPathError("Directory paths are not supported by this LSP tool. " + "Use lsp.diagnostics with a directory path for directory diagnostics.");
|
|
4141
4195
|
}
|
|
@@ -4150,9 +4204,9 @@ async function withLspClient(filePath, fn, toolName, options = {}) {
|
|
|
4150
4204
|
const acquireAndCall = async (allowRetry) => {
|
|
4151
4205
|
const client = await manager.getClient(root, server2, options.signal);
|
|
4152
4206
|
try {
|
|
4153
|
-
return await fn(client, root);
|
|
4207
|
+
return await fn(client, root, absPath);
|
|
4154
4208
|
} catch (err) {
|
|
4155
|
-
if (allowRetry &&
|
|
4209
|
+
if (allowRetry && READ_ONLY_TOOLS.has(toolName) && isLspDeadConnectionError(err)) {
|
|
4156
4210
|
manager.invalidateClient(root, server2.id, client);
|
|
4157
4211
|
return acquireAndCall(false);
|
|
4158
4212
|
}
|
|
@@ -4607,7 +4661,7 @@ async function executeLspDiagnostics(params, signal) {
|
|
|
4607
4661
|
const filePath = requireString(params, "filePath");
|
|
4608
4662
|
const severity = severityFilter(params);
|
|
4609
4663
|
try {
|
|
4610
|
-
const absPath =
|
|
4664
|
+
const absPath = resolveReadablePathInsideContext(filePath);
|
|
4611
4665
|
if (isDirectoryPath(absPath)) {
|
|
4612
4666
|
const extension = inferExtensionFromDirectory(absPath);
|
|
4613
4667
|
if (!extension) {
|
|
@@ -4636,7 +4690,7 @@ async function executeLspDiagnostics(params, signal) {
|
|
|
4636
4690
|
};
|
|
4637
4691
|
return text(output2.output, details2);
|
|
4638
4692
|
}
|
|
4639
|
-
const result = await withLspClient(filePath, async (client) => client.diagnostics(
|
|
4693
|
+
const result = await withLspClient(filePath, async (client, _workspaceRoot, resolvedFilePath) => client.diagnostics(resolvedFilePath, signal), "diagnostics", clientOptions(signal));
|
|
4640
4694
|
if (result.transientError) {
|
|
4641
4695
|
const message = result.transientError.message;
|
|
4642
4696
|
const details2 = {
|
|
@@ -4711,7 +4765,7 @@ async function executeLspGotoDefinition(params, signal) {
|
|
|
4711
4765
|
const line = requireNumber(params, "line");
|
|
4712
4766
|
const character = requireNumber(params, "character");
|
|
4713
4767
|
try {
|
|
4714
|
-
const result = await withLspClient(filePath, async (client) => client.definition(
|
|
4768
|
+
const result = await withLspClient(filePath, async (client, _workspaceRoot, resolvedFilePath) => client.definition(resolvedFilePath, line, character, signal), "definition", clientOptions(signal));
|
|
4715
4769
|
const locations = !result ? [] : Array.isArray(result) ? result : [result];
|
|
4716
4770
|
const details = { filePath, line, character, locations };
|
|
4717
4771
|
if (locations.length === 0)
|
|
@@ -4736,7 +4790,7 @@ async function executeLspFindReferences(params, signal) {
|
|
|
4736
4790
|
const character = requireNumber(params, "character");
|
|
4737
4791
|
const includeDeclaration = optionalBoolean(params, "includeDeclaration") ?? true;
|
|
4738
4792
|
try {
|
|
4739
|
-
const result = await withLspClient(filePath, async (client) => client.references(
|
|
4793
|
+
const result = await withLspClient(filePath, async (client, _workspaceRoot, resolvedFilePath) => client.references(resolvedFilePath, line, character, includeDeclaration, signal), "references", clientOptions(signal));
|
|
4740
4794
|
const references = Array.isArray(result) ? result : [];
|
|
4741
4795
|
const total = references.length;
|
|
4742
4796
|
const truncated = total > DEFAULT_MAX_REFERENCES;
|
|
@@ -4778,7 +4832,7 @@ async function executeLspPrepareRename(params, signal) {
|
|
|
4778
4832
|
const line = requireNumber(params, "line");
|
|
4779
4833
|
const character = requireNumber(params, "character");
|
|
4780
4834
|
try {
|
|
4781
|
-
const result = await withLspClient(filePath, async (client) => client.prepareRename(
|
|
4835
|
+
const result = await withLspClient(filePath, async (client, _workspaceRoot, resolvedFilePath) => client.prepareRename(resolvedFilePath, line, character, signal), "prepareRename", clientOptions(signal));
|
|
4782
4836
|
const details = { filePath, line, character, result };
|
|
4783
4837
|
return text(formatPrepareRenameResult(result), details);
|
|
4784
4838
|
} catch (error) {
|
|
@@ -4799,7 +4853,7 @@ async function executeLspRename(params, signal) {
|
|
|
4799
4853
|
const character = requireNumber(params, "character");
|
|
4800
4854
|
const newName = requireString(params, "newName");
|
|
4801
4855
|
try {
|
|
4802
|
-
const result = await withLspClient(filePath, async (client) => client.rename(
|
|
4856
|
+
const result = await withLspClient(filePath, async (client, _workspaceRoot, resolvedFilePath) => client.rename(resolvedFilePath, line, character, newName, signal), "rename", clientOptions(signal));
|
|
4803
4857
|
const details = { filePath, line, character, newName, apply: result.apply, edit: result.edit };
|
|
4804
4858
|
return text(formatApplyResult(result.apply), details, !result.apply.success);
|
|
4805
4859
|
} catch (error) {
|
|
@@ -4879,7 +4933,7 @@ async function executeLspSymbols(params, signal) {
|
|
|
4879
4933
|
const symbols2 = await withLspClient(filePath, async (client) => client.workspaceSymbols(query, signal), "workspaceSymbols", clientOptions(signal));
|
|
4880
4934
|
return formatSymbolsResult(filePath, scope, symbols2, limit, query);
|
|
4881
4935
|
}
|
|
4882
|
-
const symbols = await withLspClient(filePath, async (client) => client.documentSymbols(
|
|
4936
|
+
const symbols = await withLspClient(filePath, async (client, _workspaceRoot, resolvedFilePath) => client.documentSymbols(resolvedFilePath, signal), "documentSymbols", clientOptions(signal));
|
|
4883
4937
|
return formatSymbolsResult(filePath, scope, symbols, limit);
|
|
4884
4938
|
} catch (error) {
|
|
4885
4939
|
const query = optionalString(params, "query");
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
// ../lsp-core/src/lsp/client-wrapper.ts
|
|
2
|
-
import { existsSync as existsSync9, statSync as statSync3 } from "node:fs";
|
|
3
|
-
import { dirname as dirname6, join as join4, resolve as resolve7 } from "node:path";
|
|
2
|
+
import { existsSync as existsSync9, realpathSync as realpathSync4, statSync as statSync3 } from "node:fs";
|
|
3
|
+
import { basename as basename3, dirname as dirname6, join as join4, resolve as resolve7 } from "node:path";
|
|
4
4
|
|
|
5
5
|
// ../lsp-core/src/request-context.ts
|
|
6
6
|
import { AsyncLocalStorage } from "node:async_hooks";
|
|
@@ -3723,32 +3723,86 @@ function isDirectoryPath(filePath) {
|
|
|
3723
3723
|
}
|
|
3724
3724
|
}
|
|
3725
3725
|
function findWorkspaceRoot(filePath) {
|
|
3726
|
-
const
|
|
3726
|
+
const cwd = contextCwd();
|
|
3727
|
+
const abs = resolveReadablePathInsideContext(filePath);
|
|
3727
3728
|
let dir = abs;
|
|
3728
3729
|
if (!isDirectoryPath(dir)) {
|
|
3729
3730
|
dir = dirname6(dir);
|
|
3730
3731
|
}
|
|
3731
|
-
|
|
3732
|
-
while (dir
|
|
3733
|
-
|
|
3734
|
-
|
|
3735
|
-
|
|
3732
|
+
const fallbackRoot = nearestExistingDirectoryInsideContext(dir, cwd) ?? cwd;
|
|
3733
|
+
while (isPathInside(cwd, dir)) {
|
|
3734
|
+
const canonicalDir = existingDirectoryInsideContext(dir, cwd);
|
|
3735
|
+
if (canonicalDir !== undefined) {
|
|
3736
|
+
for (const marker of WORKSPACE_MARKERS) {
|
|
3737
|
+
if (existsSync9(join4(dir, marker))) {
|
|
3738
|
+
return canonicalDir;
|
|
3739
|
+
}
|
|
3736
3740
|
}
|
|
3737
3741
|
}
|
|
3738
|
-
|
|
3742
|
+
if (dir === cwd)
|
|
3743
|
+
break;
|
|
3739
3744
|
dir = dirname6(dir);
|
|
3740
3745
|
}
|
|
3741
|
-
return
|
|
3746
|
+
return fallbackRoot;
|
|
3742
3747
|
}
|
|
3743
|
-
function
|
|
3748
|
+
function resolveReadablePathInsideContext(filePath) {
|
|
3744
3749
|
const cwd = contextCwd();
|
|
3745
3750
|
const abs = resolve7(cwd, filePath);
|
|
3751
|
+
if (isPathInside(cwd, abs))
|
|
3752
|
+
return abs;
|
|
3753
|
+
const rebased = rebaseThroughCanonicalAncestor(abs, cwd);
|
|
3754
|
+
if (rebased !== undefined)
|
|
3755
|
+
return rebased;
|
|
3756
|
+
const canonical = canonicalizeExistingOrNearestAncestor(abs);
|
|
3757
|
+
if (isPathInside(cwd, canonical))
|
|
3758
|
+
return canonical;
|
|
3759
|
+
throw new LspInvalidPathError(`LSP file path must be inside request cwd: ${filePath}`);
|
|
3760
|
+
}
|
|
3761
|
+
function resolvePathInsideContext(filePath) {
|
|
3762
|
+
const cwd = contextCwd();
|
|
3763
|
+
const abs = resolveReadablePathInsideContext(filePath);
|
|
3746
3764
|
const canonical = canonicalizeExistingOrNearestAncestor(abs);
|
|
3747
3765
|
if (!isPathInside(cwd, canonical)) {
|
|
3748
3766
|
throw new LspInvalidPathError(`LSP file path must be inside request cwd: ${filePath}`);
|
|
3749
3767
|
}
|
|
3750
3768
|
return canonical;
|
|
3751
3769
|
}
|
|
3770
|
+
function rebaseThroughCanonicalAncestor(path, cwd) {
|
|
3771
|
+
let current = path;
|
|
3772
|
+
const suffix = [];
|
|
3773
|
+
while (true) {
|
|
3774
|
+
if (existsSync9(current)) {
|
|
3775
|
+
const canonical = realpathSync4(current);
|
|
3776
|
+
if (isPathInside(cwd, canonical))
|
|
3777
|
+
return suffix.length === 0 ? canonical : join4(canonical, ...suffix);
|
|
3778
|
+
}
|
|
3779
|
+
const parent = dirname6(current);
|
|
3780
|
+
if (parent === current)
|
|
3781
|
+
return;
|
|
3782
|
+
suffix.unshift(basename3(current));
|
|
3783
|
+
current = parent;
|
|
3784
|
+
}
|
|
3785
|
+
}
|
|
3786
|
+
function existingDirectoryInsideContext(directory, cwd) {
|
|
3787
|
+
if (!existsSync9(directory))
|
|
3788
|
+
return;
|
|
3789
|
+
const canonical = realpathSync4(directory);
|
|
3790
|
+
if (!statSync3(canonical).isDirectory())
|
|
3791
|
+
return;
|
|
3792
|
+
return isPathInside(cwd, canonical) ? canonical : undefined;
|
|
3793
|
+
}
|
|
3794
|
+
function nearestExistingDirectoryInsideContext(directory, cwd) {
|
|
3795
|
+
let current = directory;
|
|
3796
|
+
while (isPathInside(cwd, current)) {
|
|
3797
|
+
const canonical = existingDirectoryInsideContext(current, cwd);
|
|
3798
|
+
if (canonical !== undefined)
|
|
3799
|
+
return canonical;
|
|
3800
|
+
if (current === cwd)
|
|
3801
|
+
return;
|
|
3802
|
+
current = dirname6(current);
|
|
3803
|
+
}
|
|
3804
|
+
return;
|
|
3805
|
+
}
|
|
3752
3806
|
function formatServerLookupError(result) {
|
|
3753
3807
|
if (result.status === "not_installed") {
|
|
3754
3808
|
return formatNotInstalled(result);
|
|
@@ -3819,7 +3873,7 @@ function formatNotInstalled(result) {
|
|
|
3819
3873
|
].join(`
|
|
3820
3874
|
`);
|
|
3821
3875
|
}
|
|
3822
|
-
var
|
|
3876
|
+
var READ_ONLY_TOOLS = new Set([
|
|
3823
3877
|
"diagnostics",
|
|
3824
3878
|
"definition",
|
|
3825
3879
|
"references",
|
|
@@ -3828,7 +3882,7 @@ var READ_ONLY_RETRY_TOOLS = new Set([
|
|
|
3828
3882
|
"prepareRename"
|
|
3829
3883
|
]);
|
|
3830
3884
|
async function withLspClient(filePath, fn, toolName, options = {}) {
|
|
3831
|
-
const absPath = resolvePathInsideContext(filePath);
|
|
3885
|
+
const absPath = READ_ONLY_TOOLS.has(toolName) ? resolveReadablePathInsideContext(filePath) : resolvePathInsideContext(filePath);
|
|
3832
3886
|
if (isDirectoryPath(absPath)) {
|
|
3833
3887
|
throw new LspInvalidPathError("Directory paths are not supported by this LSP tool. " + "Use lsp.diagnostics with a directory path for directory diagnostics.");
|
|
3834
3888
|
}
|
|
@@ -3843,9 +3897,9 @@ async function withLspClient(filePath, fn, toolName, options = {}) {
|
|
|
3843
3897
|
const acquireAndCall = async (allowRetry) => {
|
|
3844
3898
|
const client = await manager.getClient(root, server, options.signal);
|
|
3845
3899
|
try {
|
|
3846
|
-
return await fn(client, root);
|
|
3900
|
+
return await fn(client, root, absPath);
|
|
3847
3901
|
} catch (err) {
|
|
3848
|
-
if (allowRetry &&
|
|
3902
|
+
if (allowRetry && READ_ONLY_TOOLS.has(toolName) && isLspDeadConnectionError(err)) {
|
|
3849
3903
|
manager.invalidateClient(root, server.id, client);
|
|
3850
3904
|
return acquireAndCall(false);
|
|
3851
3905
|
}
|
|
@@ -4300,7 +4354,7 @@ async function executeLspDiagnostics(params, signal) {
|
|
|
4300
4354
|
const filePath = requireString(params, "filePath");
|
|
4301
4355
|
const severity = severityFilter(params);
|
|
4302
4356
|
try {
|
|
4303
|
-
const absPath =
|
|
4357
|
+
const absPath = resolveReadablePathInsideContext(filePath);
|
|
4304
4358
|
if (isDirectoryPath(absPath)) {
|
|
4305
4359
|
const extension = inferExtensionFromDirectory(absPath);
|
|
4306
4360
|
if (!extension) {
|
|
@@ -4329,7 +4383,7 @@ async function executeLspDiagnostics(params, signal) {
|
|
|
4329
4383
|
};
|
|
4330
4384
|
return text(output2.output, details2);
|
|
4331
4385
|
}
|
|
4332
|
-
const result = await withLspClient(filePath, async (client) => client.diagnostics(
|
|
4386
|
+
const result = await withLspClient(filePath, async (client, _workspaceRoot, resolvedFilePath) => client.diagnostics(resolvedFilePath, signal), "diagnostics", clientOptions(signal));
|
|
4333
4387
|
if (result.transientError) {
|
|
4334
4388
|
const message = result.transientError.message;
|
|
4335
4389
|
const details2 = {
|
|
@@ -4404,7 +4458,7 @@ async function executeLspGotoDefinition(params, signal) {
|
|
|
4404
4458
|
const line = requireNumber(params, "line");
|
|
4405
4459
|
const character = requireNumber(params, "character");
|
|
4406
4460
|
try {
|
|
4407
|
-
const result = await withLspClient(filePath, async (client) => client.definition(
|
|
4461
|
+
const result = await withLspClient(filePath, async (client, _workspaceRoot, resolvedFilePath) => client.definition(resolvedFilePath, line, character, signal), "definition", clientOptions(signal));
|
|
4408
4462
|
const locations = !result ? [] : Array.isArray(result) ? result : [result];
|
|
4409
4463
|
const details = { filePath, line, character, locations };
|
|
4410
4464
|
if (locations.length === 0)
|
|
@@ -4429,7 +4483,7 @@ async function executeLspFindReferences(params, signal) {
|
|
|
4429
4483
|
const character = requireNumber(params, "character");
|
|
4430
4484
|
const includeDeclaration = optionalBoolean(params, "includeDeclaration") ?? true;
|
|
4431
4485
|
try {
|
|
4432
|
-
const result = await withLspClient(filePath, async (client) => client.references(
|
|
4486
|
+
const result = await withLspClient(filePath, async (client, _workspaceRoot, resolvedFilePath) => client.references(resolvedFilePath, line, character, includeDeclaration, signal), "references", clientOptions(signal));
|
|
4433
4487
|
const references = Array.isArray(result) ? result : [];
|
|
4434
4488
|
const total = references.length;
|
|
4435
4489
|
const truncated = total > DEFAULT_MAX_REFERENCES;
|
|
@@ -4471,7 +4525,7 @@ async function executeLspPrepareRename(params, signal) {
|
|
|
4471
4525
|
const line = requireNumber(params, "line");
|
|
4472
4526
|
const character = requireNumber(params, "character");
|
|
4473
4527
|
try {
|
|
4474
|
-
const result = await withLspClient(filePath, async (client) => client.prepareRename(
|
|
4528
|
+
const result = await withLspClient(filePath, async (client, _workspaceRoot, resolvedFilePath) => client.prepareRename(resolvedFilePath, line, character, signal), "prepareRename", clientOptions(signal));
|
|
4475
4529
|
const details = { filePath, line, character, result };
|
|
4476
4530
|
return text(formatPrepareRenameResult(result), details);
|
|
4477
4531
|
} catch (error) {
|
|
@@ -4492,7 +4546,7 @@ async function executeLspRename(params, signal) {
|
|
|
4492
4546
|
const character = requireNumber(params, "character");
|
|
4493
4547
|
const newName = requireString(params, "newName");
|
|
4494
4548
|
try {
|
|
4495
|
-
const result = await withLspClient(filePath, async (client) => client.rename(
|
|
4549
|
+
const result = await withLspClient(filePath, async (client, _workspaceRoot, resolvedFilePath) => client.rename(resolvedFilePath, line, character, newName, signal), "rename", clientOptions(signal));
|
|
4496
4550
|
const details = { filePath, line, character, newName, apply: result.apply, edit: result.edit };
|
|
4497
4551
|
return text(formatApplyResult(result.apply), details, !result.apply.success);
|
|
4498
4552
|
} catch (error) {
|
|
@@ -4572,7 +4626,7 @@ async function executeLspSymbols(params, signal) {
|
|
|
4572
4626
|
const symbols2 = await withLspClient(filePath, async (client) => client.workspaceSymbols(query, signal), "workspaceSymbols", clientOptions(signal));
|
|
4573
4627
|
return formatSymbolsResult(filePath, scope, symbols2, limit, query);
|
|
4574
4628
|
}
|
|
4575
|
-
const symbols = await withLspClient(filePath, async (client) => client.documentSymbols(
|
|
4629
|
+
const symbols = await withLspClient(filePath, async (client, _workspaceRoot, resolvedFilePath) => client.documentSymbols(resolvedFilePath, signal), "documentSymbols", clientOptions(signal));
|
|
4576
4630
|
return formatSymbolsResult(filePath, scope, symbols, limit);
|
|
4577
4631
|
} catch (error) {
|
|
4578
4632
|
const query = optionalString(params, "query");
|
|
@@ -8,7 +8,7 @@
|
|
|
8
8
|
"command": "node \"${PLUGIN_ROOT}/components/bootstrap/dist/cli.js\" hook session-start",
|
|
9
9
|
"commandWindows": "powershell -NoProfile -ExecutionPolicy Bypass -File \"${PLUGIN_ROOT}\\components\\bootstrap\\scripts\\bootstrap.ps1\"",
|
|
10
10
|
"timeout": 30,
|
|
11
|
-
"statusMessage": "(OmO 5.0.0-beta.
|
|
11
|
+
"statusMessage": "(OmO 5.0.0-beta.6) Checking Bootstrap Provisioning"
|
|
12
12
|
}
|
|
13
13
|
]
|
|
14
14
|
}
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@sisyphuslabs/codex-bootstrap",
|
|
3
|
-
"version": "5.0.0-beta.
|
|
3
|
+
"version": "5.0.0-beta.6",
|
|
4
4
|
"description": "Codex SessionStart bootstrap component that provisions LazyCodex runtime dependencies from a detached worker.",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"private": true,
|