oh-my-opencode 5.0.0-beta.13 → 5.0.0-beta.15
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/README.ja.md +25 -21
- package/README.ko.md +25 -21
- package/README.md +26 -22
- package/README.ru.md +24 -20
- package/README.zh-cn.md +25 -21
- package/dist/cli/index.js +12628 -13558
- package/dist/cli-node/index.js +12628 -13558
- package/dist/features/btw-side/tui-controller-types.d.ts +5 -0
- package/dist/features/btw-side/tui-controller.d.ts +8 -3
- package/dist/features/btw-side/tui-escape-return.d.ts +12 -0
- package/dist/features/btw-side/tui-keymap.d.ts +8 -1
- package/dist/features/btw-side/tui-picker-options.d.ts +20 -0
- package/dist/features/btw-side/tui-picker.d.ts +9 -0
- package/dist/features/btw-side/tui-session-catalog.d.ts +35 -0
- package/dist/features/btw-side/tui-side-start.d.ts +1 -1
- package/dist/features/opengateway-provider/index.d.ts +13 -0
- package/dist/index.js +8462 -6318
- package/dist/skills/frontend/SKILL.md +1 -0
- package/dist/skills/frontend/references/design/print-paged-media.md +76 -0
- package/dist/skills/ulw-research/SKILL.md +1 -1
- package/dist/skills/visual-qa/SKILL.md +3 -2
- package/dist/tui.js +3993 -5513
- package/package.json +22 -22
- package/packages/git-bash-mcp/package.json +1 -1
- package/packages/lsp-daemon/dist/cli.js +81 -113
- package/packages/lsp-daemon/dist/client.js +82 -117
- package/packages/lsp-daemon/dist/ensure-daemon.js +1 -0
- package/packages/lsp-daemon/dist/index.js +88 -122
- package/packages/lsp-daemon/dist/version-reap.js +1 -1
- package/packages/lsp-tools-mcp/dist/cli.js +62 -93
- package/packages/lsp-tools-mcp/dist/lsp/manager.js +62 -92
- package/packages/lsp-tools-mcp/dist/mcp.js +64 -95
- package/packages/lsp-tools-mcp/dist/request-context.js +11 -12
- package/packages/lsp-tools-mcp/dist/tools.js +73 -104
- package/packages/omo-codex/plugin/.codex-plugin/plugin.json +1 -1
- package/packages/omo-codex/plugin/components/bootstrap/dist/cli.js +30 -29
- 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/bootstrap/src/hook.ts +1 -0
- package/packages/omo-codex/plugin/components/codegraph/dist/cli.js +81 -64
- package/packages/omo-codex/plugin/components/codegraph/dist/serve.js +81 -65
- package/packages/omo-codex/plugin/components/codegraph/package.json +4 -4
- package/packages/omo-codex/plugin/components/codegraph/src/mcp-bridge.ts +1 -0
- package/packages/omo-codex/plugin/components/codegraph/src/session-start-hook-runtime.ts +1 -0
- package/packages/omo-codex/plugin/components/comment-checker/dist/cli.js +2 -1
- package/packages/omo-codex/plugin/components/comment-checker/hooks/hooks.json +1 -1
- package/packages/omo-codex/plugin/components/comment-checker/package.json +5 -5
- package/packages/omo-codex/plugin/components/comment-checker/src/runner.ts +1 -0
- package/packages/omo-codex/plugin/components/git-bash/AGENTS.md +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 +3 -4
- 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 +5 -5
- package/packages/omo-codex/plugin/components/lsp/dist/.omo-runtime-manifest.json +3 -3
- package/packages/omo-codex/plugin/components/lsp/dist/cli.js +70 -107
- package/packages/omo-codex/plugin/components/lsp/hooks/hooks.json +2 -2
- package/packages/omo-codex/plugin/components/lsp/package.json +5 -5
- package/packages/omo-codex/plugin/components/lsp/src/cli.ts +1 -1
- package/packages/omo-codex/plugin/components/rules/dist/cli.js +14 -12
- package/packages/omo-codex/plugin/components/rules/hooks/hooks.json +4 -4
- package/packages/omo-codex/plugin/components/rules/package.json +7 -7
- 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 +5 -5
- package/packages/omo-codex/plugin/components/teammode/hooks/hooks.json +1 -1
- package/packages/omo-codex/plugin/components/teammode/package.json +5 -5
- package/packages/omo-codex/plugin/components/telemetry/dist/cli.js +25 -25
- package/packages/omo-codex/plugin/components/telemetry/dist/posthog.js +31 -31
- package/packages/omo-codex/plugin/components/telemetry/hooks/hooks.json +1 -1
- package/packages/omo-codex/plugin/components/telemetry/package.json +5 -5
- package/packages/omo-codex/plugin/components/ultrawork/hooks/hooks.json +1 -1
- package/packages/omo-codex/plugin/components/ultrawork/package.json +5 -5
- package/packages/omo-codex/plugin/components/ulw-loop/dist/cli.js +1 -3
- package/packages/omo-codex/plugin/components/ulw-loop/dist/paths.js +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 +5 -5
- package/packages/omo-codex/plugin/components/ulw-loop/src/paths.ts +1 -1
- package/packages/omo-codex/plugin/components/ulw-loop/test/cli-create-goals.test.ts +25 -0
- package/packages/omo-codex/plugin/components/ulw-loop/test/paths.test.ts +9 -0
- package/packages/omo-codex/plugin/components/ulw-loop/vitest.config.ts +1 -0
- 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 +661 -375
- package/packages/omo-codex/plugin/package.json +1 -1
- package/packages/omo-codex/plugin/shared/package.json +2 -3
- package/packages/omo-codex/plugin/skills/frontend/SKILL.md +1 -0
- package/packages/omo-codex/plugin/skills/frontend/references/design/print-paged-media.md +76 -0
- package/packages/omo-codex/plugin/skills/ulw-research/SKILL.md +1 -1
- package/packages/omo-codex/plugin/skills/visual-qa/SKILL.md +3 -2
- package/packages/omo-codex/scripts/install-dist/install-local.mjs +53 -53
- package/packages/shared-skills/skills/frontend/SKILL.md +1 -0
- package/packages/shared-skills/skills/frontend/references/design/print-paged-media.md +76 -0
- package/packages/shared-skills/skills/ulw-research/SKILL.md +1 -1
- package/packages/shared-skills/skills/visual-qa/SKILL.md +3 -2
- package/script/qa/web-terminal-visual-qa.mjs +2 -0
- package/script/qa/xterm-live-terminal.mjs +18 -2
|
@@ -31,22 +31,15 @@ var STOP_SIGKILL_GRACE_MS = 1000;
|
|
|
31
31
|
|
|
32
32
|
// ../lsp-core/src/lsp/errors.ts
|
|
33
33
|
class LspConnectionClosedError extends Error {
|
|
34
|
-
serverId;
|
|
35
|
-
root;
|
|
36
|
-
name = "LspConnectionClosedError";
|
|
37
34
|
constructor(serverId, root, message) {
|
|
38
35
|
super(message ?? `LSP connection closed for ${serverId} at ${root}`);
|
|
39
36
|
this.serverId = serverId;
|
|
40
37
|
this.root = root;
|
|
38
|
+
this.name = "LspConnectionClosedError";
|
|
41
39
|
}
|
|
42
40
|
}
|
|
43
41
|
|
|
44
42
|
class LspProcessExitedError extends Error {
|
|
45
|
-
serverId;
|
|
46
|
-
root;
|
|
47
|
-
exitCode;
|
|
48
|
-
stderrTail;
|
|
49
|
-
name = "LspProcessExitedError";
|
|
50
43
|
constructor(serverId, root, exitCode, stderrTail) {
|
|
51
44
|
const stderrSuffix = stderrTail ? `
|
|
52
45
|
stderr tail: ${stderrTail}` : "";
|
|
@@ -55,46 +48,49 @@ stderr tail: ${stderrTail}` : "";
|
|
|
55
48
|
this.root = root;
|
|
56
49
|
this.exitCode = exitCode;
|
|
57
50
|
this.stderrTail = stderrTail;
|
|
51
|
+
this.name = "LspProcessExitedError";
|
|
58
52
|
}
|
|
59
53
|
}
|
|
60
54
|
|
|
61
55
|
class LspRequestTimeoutError extends Error {
|
|
62
|
-
method;
|
|
63
|
-
stderrTail;
|
|
64
|
-
name = "LspRequestTimeoutError";
|
|
65
56
|
constructor(method, stderrTail) {
|
|
66
57
|
const stderrSuffix = stderrTail ? `
|
|
67
58
|
recent stderr: ${stderrTail}` : "";
|
|
68
59
|
super(`LSP request timeout (method: ${method})${stderrSuffix}`);
|
|
69
60
|
this.method = method;
|
|
70
61
|
this.stderrTail = stderrTail;
|
|
62
|
+
this.name = "LspRequestTimeoutError";
|
|
71
63
|
}
|
|
72
64
|
}
|
|
73
65
|
|
|
74
66
|
class LspInvalidPathError extends Error {
|
|
75
|
-
|
|
67
|
+
constructor() {
|
|
68
|
+
super(...arguments);
|
|
69
|
+
this.name = "LspInvalidPathError";
|
|
70
|
+
}
|
|
76
71
|
}
|
|
77
72
|
|
|
78
73
|
class LspServerLookupError extends Error {
|
|
79
|
-
lookup;
|
|
80
|
-
name = "LspServerLookupError";
|
|
81
74
|
constructor(message, lookup) {
|
|
82
75
|
super(message);
|
|
83
76
|
this.lookup = lookup;
|
|
77
|
+
this.name = "LspServerLookupError";
|
|
84
78
|
}
|
|
85
79
|
}
|
|
86
80
|
|
|
87
81
|
class LspServerInitializingError extends Error {
|
|
88
|
-
originalError;
|
|
89
|
-
name = "LspServerInitializingError";
|
|
90
82
|
constructor(originalError) {
|
|
91
83
|
super(`LSP server is still initializing. Please retry in a few seconds. Original error: ${originalError.message}`);
|
|
92
84
|
this.originalError = originalError;
|
|
85
|
+
this.name = "LspServerInitializingError";
|
|
93
86
|
}
|
|
94
87
|
}
|
|
95
88
|
|
|
96
89
|
class LspProcessSpawnError extends Error {
|
|
97
|
-
|
|
90
|
+
constructor() {
|
|
91
|
+
super(...arguments);
|
|
92
|
+
this.name = "LspProcessSpawnError";
|
|
93
|
+
}
|
|
98
94
|
}
|
|
99
95
|
function isLspDeadConnectionError(err) {
|
|
100
96
|
return err instanceof LspConnectionClosedError || err instanceof LspProcessExitedError;
|
|
@@ -110,20 +106,31 @@ var METHOD_NOT_FOUND = -32601;
|
|
|
110
106
|
var INTERNAL_ERROR = -32603;
|
|
111
107
|
|
|
112
108
|
class JsonRpcConnection {
|
|
113
|
-
reader;
|
|
114
|
-
writer;
|
|
115
|
-
pendingRequests = new Map;
|
|
116
|
-
notificationHandlers = new Map;
|
|
117
|
-
requestHandlers = new Map;
|
|
118
|
-
closeHandlers = [];
|
|
119
|
-
errorHandlers = [];
|
|
120
|
-
inputBuffer = Buffer.alloc(0);
|
|
121
|
-
nextRequestId = 1;
|
|
122
|
-
listening = false;
|
|
123
|
-
disposed = false;
|
|
124
109
|
constructor(reader, writer) {
|
|
125
110
|
this.reader = reader;
|
|
126
111
|
this.writer = writer;
|
|
112
|
+
this.pendingRequests = new Map;
|
|
113
|
+
this.notificationHandlers = new Map;
|
|
114
|
+
this.requestHandlers = new Map;
|
|
115
|
+
this.closeHandlers = [];
|
|
116
|
+
this.errorHandlers = [];
|
|
117
|
+
this.inputBuffer = Buffer.alloc(0);
|
|
118
|
+
this.nextRequestId = 1;
|
|
119
|
+
this.listening = false;
|
|
120
|
+
this.disposed = false;
|
|
121
|
+
this.handleData = (chunk) => {
|
|
122
|
+
const chunkBuffer = Buffer.isBuffer(chunk) ? chunk : Buffer.from(chunk, "utf8");
|
|
123
|
+
this.inputBuffer = Buffer.concat([this.inputBuffer, chunkBuffer]);
|
|
124
|
+
this.drainInputBuffer();
|
|
125
|
+
};
|
|
126
|
+
this.handleClose = () => {
|
|
127
|
+
for (const handler of this.closeHandlers) {
|
|
128
|
+
handler();
|
|
129
|
+
}
|
|
130
|
+
};
|
|
131
|
+
this.handleStreamError = (error) => {
|
|
132
|
+
this.emitError(error);
|
|
133
|
+
};
|
|
127
134
|
}
|
|
128
135
|
listen() {
|
|
129
136
|
if (this.listening)
|
|
@@ -244,19 +251,6 @@ class JsonRpcConnection {
|
|
|
244
251
|
this.notificationHandlers.clear();
|
|
245
252
|
this.requestHandlers.clear();
|
|
246
253
|
}
|
|
247
|
-
handleData = (chunk) => {
|
|
248
|
-
const chunkBuffer = Buffer.isBuffer(chunk) ? chunk : Buffer.from(chunk, "utf8");
|
|
249
|
-
this.inputBuffer = Buffer.concat([this.inputBuffer, chunkBuffer]);
|
|
250
|
-
this.drainInputBuffer();
|
|
251
|
-
};
|
|
252
|
-
handleClose = () => {
|
|
253
|
-
for (const handler of this.closeHandlers) {
|
|
254
|
-
handler();
|
|
255
|
-
}
|
|
256
|
-
};
|
|
257
|
-
handleStreamError = (error) => {
|
|
258
|
-
this.emitError(error);
|
|
259
|
-
};
|
|
260
254
|
drainInputBuffer() {
|
|
261
255
|
while (true) {
|
|
262
256
|
const headerEnd = this.inputBuffer.indexOf(HEADER_SEPARATOR);
|
|
@@ -604,31 +598,25 @@ function isPosition(value) {
|
|
|
604
598
|
|
|
605
599
|
// ../lsp-core/src/lsp/transport.ts
|
|
606
600
|
class LspClientNotStartedError extends Error {
|
|
607
|
-
serverId;
|
|
608
|
-
root;
|
|
609
|
-
name = "LspClientNotStartedError";
|
|
610
601
|
constructor(serverId, root) {
|
|
611
602
|
super("LSP client not started");
|
|
612
603
|
this.serverId = serverId;
|
|
613
604
|
this.root = root;
|
|
605
|
+
this.name = "LspClientNotStartedError";
|
|
614
606
|
}
|
|
615
607
|
}
|
|
616
608
|
|
|
617
609
|
class LspClientTransport {
|
|
618
|
-
root;
|
|
619
|
-
server;
|
|
620
|
-
proc = null;
|
|
621
|
-
connection = null;
|
|
622
|
-
stderrBuffer = [];
|
|
623
|
-
processExited = false;
|
|
624
|
-
diagnosticsStore = new Map;
|
|
625
|
-
requestTimeoutMs;
|
|
626
|
-
initializeTimeoutMs;
|
|
627
|
-
workspaceApplyEditHandler = null;
|
|
628
|
-
diagnosticPullSupported = false;
|
|
629
610
|
constructor(root, server, timeouts = {}) {
|
|
630
611
|
this.root = root;
|
|
631
612
|
this.server = server;
|
|
613
|
+
this.proc = null;
|
|
614
|
+
this.connection = null;
|
|
615
|
+
this.stderrBuffer = [];
|
|
616
|
+
this.processExited = false;
|
|
617
|
+
this.diagnosticsStore = new Map;
|
|
618
|
+
this.workspaceApplyEditHandler = null;
|
|
619
|
+
this.diagnosticPullSupported = false;
|
|
632
620
|
this.requestTimeoutMs = timeouts.requestTimeoutMs ?? REQUEST_TIMEOUT_MS;
|
|
633
621
|
this.initializeTimeoutMs = timeouts.initializeTimeoutMs ?? INIT_TIMEOUT_MS;
|
|
634
622
|
}
|
|
@@ -1135,16 +1123,12 @@ function movedPath(candidate, oldPath, newPath) {
|
|
|
1135
1123
|
}
|
|
1136
1124
|
|
|
1137
1125
|
class WorkspaceDocumentState {
|
|
1138
|
-
sendNotification;
|
|
1139
|
-
clearDiagnostics;
|
|
1140
|
-
openDocuments = new Map;
|
|
1141
|
-
openByUri = new Map;
|
|
1142
|
-
openPromises = new Map;
|
|
1143
|
-
now;
|
|
1144
|
-
versionlessPublishQuiescenceMs;
|
|
1145
1126
|
constructor(sendNotification, clearDiagnostics, options = {}) {
|
|
1146
1127
|
this.sendNotification = sendNotification;
|
|
1147
1128
|
this.clearDiagnostics = clearDiagnostics;
|
|
1129
|
+
this.openDocuments = new Map;
|
|
1130
|
+
this.openByUri = new Map;
|
|
1131
|
+
this.openPromises = new Map;
|
|
1148
1132
|
this.now = options.now ?? (() => Date.now());
|
|
1149
1133
|
this.versionlessPublishQuiescenceMs = options.versionlessPublishQuiescenceMs ?? DEFAULT_VERSIONLESS_PUBLISH_QUIESCENCE_MS;
|
|
1150
1134
|
}
|
|
@@ -1408,13 +1392,11 @@ import { dirname, isAbsolute, relative as relative2, resolve as resolve2 } from
|
|
|
1408
1392
|
import { fileURLToPath } from "node:url";
|
|
1409
1393
|
|
|
1410
1394
|
class WorkspaceEditPathError extends Error {
|
|
1411
|
-
path;
|
|
1412
|
-
detail;
|
|
1413
|
-
name = "WorkspaceEditPathError";
|
|
1414
1395
|
constructor(path, detail) {
|
|
1415
1396
|
super(`${detail}: ${path}`);
|
|
1416
1397
|
this.path = path;
|
|
1417
1398
|
this.detail = detail;
|
|
1399
|
+
this.name = "WorkspaceEditPathError";
|
|
1418
1400
|
}
|
|
1419
1401
|
}
|
|
1420
1402
|
function isPathInsideWorkspace(filePath, workspaceRoot) {
|
|
@@ -1706,13 +1688,11 @@ function canonicalFingerprint(operations) {
|
|
|
1706
1688
|
|
|
1707
1689
|
// ../lsp-core/src/lsp/workspace-edit-types.ts
|
|
1708
1690
|
class WorkspaceEditValidationError extends Error {
|
|
1709
|
-
changeIndex;
|
|
1710
|
-
detail;
|
|
1711
|
-
name = "WorkspaceEditValidationError";
|
|
1712
1691
|
constructor(changeIndex, detail) {
|
|
1713
1692
|
super(`change ${changeIndex}: ${detail}`);
|
|
1714
1693
|
this.changeIndex = changeIndex;
|
|
1715
1694
|
this.detail = detail;
|
|
1695
|
+
this.name = "WorkspaceEditValidationError";
|
|
1716
1696
|
}
|
|
1717
1697
|
}
|
|
1718
1698
|
|
|
@@ -2210,10 +2190,9 @@ function simulateDelete(operation, virtual) {
|
|
|
2210
2190
|
import { existsSync as existsSync4, lstatSync as lstatSync3, readdirSync as readdirSync2 } from "node:fs";
|
|
2211
2191
|
import { dirname as dirname3, resolve as resolve4 } from "node:path";
|
|
2212
2192
|
class WorkspaceSnapshotBuilder {
|
|
2213
|
-
workspaceRoot;
|
|
2214
|
-
snapshots = new Map;
|
|
2215
2193
|
constructor(workspaceRoot) {
|
|
2216
2194
|
this.workspaceRoot = workspaceRoot;
|
|
2195
|
+
this.snapshots = new Map;
|
|
2217
2196
|
}
|
|
2218
2197
|
build(operations) {
|
|
2219
2198
|
this.add(this.workspaceRoot, false);
|
|
@@ -2257,8 +2236,10 @@ function snapshotOperations(operations, workspaceRoot) {
|
|
|
2257
2236
|
|
|
2258
2237
|
// ../lsp-core/src/lsp/workspace-edit-plan.ts
|
|
2259
2238
|
class PlanPathIndex {
|
|
2260
|
-
|
|
2261
|
-
|
|
2239
|
+
constructor() {
|
|
2240
|
+
this.firstChangeByPath = new Map;
|
|
2241
|
+
this.reportedPathByCanonical = new Map;
|
|
2242
|
+
}
|
|
2262
2243
|
build(operations) {
|
|
2263
2244
|
for (const operation of operations) {
|
|
2264
2245
|
switch (operation.kind) {
|
|
@@ -2347,14 +2328,11 @@ function isRecord3(value) {
|
|
|
2347
2328
|
}
|
|
2348
2329
|
|
|
2349
2330
|
class WorkspaceMutationController {
|
|
2350
|
-
workspaceRoot;
|
|
2351
|
-
documents;
|
|
2352
|
-
activeLease = null;
|
|
2353
|
-
nextLeaseId = 1;
|
|
2354
|
-
io;
|
|
2355
2331
|
constructor(workspaceRoot, documents) {
|
|
2356
2332
|
this.workspaceRoot = workspaceRoot;
|
|
2357
2333
|
this.documents = documents;
|
|
2334
|
+
this.activeLease = null;
|
|
2335
|
+
this.nextLeaseId = 1;
|
|
2358
2336
|
}
|
|
2359
2337
|
setIo(io) {
|
|
2360
2338
|
this.io = io;
|
|
@@ -2467,12 +2445,9 @@ var DIAGNOSTICS_FRESHNESS_TIMEOUT_MS = 3000;
|
|
|
2467
2445
|
var VERSIONLESS_PUBLISH_QUIESCENCE_MS = 250;
|
|
2468
2446
|
|
|
2469
2447
|
class LspClient extends LspClientConnection {
|
|
2470
|
-
diagnosticPullErrors = [];
|
|
2471
|
-
documents;
|
|
2472
|
-
workspaceMutations;
|
|
2473
|
-
diagnosticsFreshnessTimeoutMs;
|
|
2474
2448
|
constructor(root, server, options = {}) {
|
|
2475
2449
|
super(root, server, options);
|
|
2450
|
+
this.diagnosticPullErrors = [];
|
|
2476
2451
|
this.diagnosticsFreshnessTimeoutMs = options.diagnosticsFreshnessTimeoutMs ?? DIAGNOSTICS_FRESHNESS_TIMEOUT_MS;
|
|
2477
2452
|
this.documents = new WorkspaceDocumentState((method, params) => this.sendNotification(method, params), (uri) => this.diagnosticsStore.delete(uri), {
|
|
2478
2453
|
versionlessPublishQuiescenceMs: options.versionlessPublishQuiescenceMs ?? VERSIONLESS_PUBLISH_QUIESCENCE_MS
|
|
@@ -2772,16 +2747,11 @@ function awaitWithSignal(promise, signal) {
|
|
|
2772
2747
|
}
|
|
2773
2748
|
|
|
2774
2749
|
class LspManager {
|
|
2775
|
-
clients = new Map;
|
|
2776
|
-
reaperHandle = null;
|
|
2777
|
-
signalDisposer = null;
|
|
2778
|
-
disposed = false;
|
|
2779
|
-
idleTimeoutMs;
|
|
2780
|
-
initTimeoutMs;
|
|
2781
|
-
reaperIntervalMs;
|
|
2782
|
-
clientFactory;
|
|
2783
|
-
now;
|
|
2784
2750
|
constructor(options = {}) {
|
|
2751
|
+
this.clients = new Map;
|
|
2752
|
+
this.reaperHandle = null;
|
|
2753
|
+
this.signalDisposer = null;
|
|
2754
|
+
this.disposed = false;
|
|
2785
2755
|
this.idleTimeoutMs = options.idleTimeoutMs ?? IDLE_TIMEOUT_MS;
|
|
2786
2756
|
this.initTimeoutMs = options.initTimeoutMs ?? INIT_TIMEOUT_MS;
|
|
2787
2757
|
this.reaperIntervalMs = options.reaperIntervalMs ?? REAPER_INTERVAL_MS;
|
|
@@ -3334,18 +3304,17 @@ import { homedir } from "node:os";
|
|
|
3334
3304
|
import { basename as basename2, delimiter as delimiter2, dirname as dirname4, isAbsolute as isAbsolute2, join as join2, relative as relative4, resolve as resolve6 } from "node:path";
|
|
3335
3305
|
|
|
3336
3306
|
class LspRequestContextParseError extends Error {
|
|
3337
|
-
code;
|
|
3338
|
-
name = "LspRequestContextParseError";
|
|
3339
3307
|
constructor(code, message) {
|
|
3340
3308
|
super(message);
|
|
3341
3309
|
this.code = code;
|
|
3310
|
+
this.name = "LspRequestContextParseError";
|
|
3342
3311
|
}
|
|
3343
3312
|
}
|
|
3344
3313
|
|
|
3345
3314
|
class LspRequestContextUnavailableError extends Error {
|
|
3346
|
-
name = "LspRequestContextUnavailableError";
|
|
3347
3315
|
constructor() {
|
|
3348
3316
|
super("LSP request context is required. Standalone MCP startup must install one with runWithRequestContext(createStandaloneMcpRequestContext()).");
|
|
3317
|
+
this.name = "LspRequestContextUnavailableError";
|
|
3349
3318
|
}
|
|
3350
3319
|
}
|
|
3351
3320
|
var storage = new AsyncLocalStorage;
|
|
@@ -29,22 +29,15 @@ var STOP_SIGKILL_GRACE_MS = 1000;
|
|
|
29
29
|
|
|
30
30
|
// ../lsp-core/src/lsp/errors.ts
|
|
31
31
|
class LspConnectionClosedError extends Error {
|
|
32
|
-
serverId;
|
|
33
|
-
root;
|
|
34
|
-
name = "LspConnectionClosedError";
|
|
35
32
|
constructor(serverId, root, message) {
|
|
36
33
|
super(message ?? `LSP connection closed for ${serverId} at ${root}`);
|
|
37
34
|
this.serverId = serverId;
|
|
38
35
|
this.root = root;
|
|
36
|
+
this.name = "LspConnectionClosedError";
|
|
39
37
|
}
|
|
40
38
|
}
|
|
41
39
|
|
|
42
40
|
class LspProcessExitedError extends Error {
|
|
43
|
-
serverId;
|
|
44
|
-
root;
|
|
45
|
-
exitCode;
|
|
46
|
-
stderrTail;
|
|
47
|
-
name = "LspProcessExitedError";
|
|
48
41
|
constructor(serverId, root, exitCode, stderrTail) {
|
|
49
42
|
const stderrSuffix = stderrTail ? `
|
|
50
43
|
stderr tail: ${stderrTail}` : "";
|
|
@@ -53,46 +46,49 @@ stderr tail: ${stderrTail}` : "";
|
|
|
53
46
|
this.root = root;
|
|
54
47
|
this.exitCode = exitCode;
|
|
55
48
|
this.stderrTail = stderrTail;
|
|
49
|
+
this.name = "LspProcessExitedError";
|
|
56
50
|
}
|
|
57
51
|
}
|
|
58
52
|
|
|
59
53
|
class LspRequestTimeoutError extends Error {
|
|
60
|
-
method;
|
|
61
|
-
stderrTail;
|
|
62
|
-
name = "LspRequestTimeoutError";
|
|
63
54
|
constructor(method, stderrTail) {
|
|
64
55
|
const stderrSuffix = stderrTail ? `
|
|
65
56
|
recent stderr: ${stderrTail}` : "";
|
|
66
57
|
super(`LSP request timeout (method: ${method})${stderrSuffix}`);
|
|
67
58
|
this.method = method;
|
|
68
59
|
this.stderrTail = stderrTail;
|
|
60
|
+
this.name = "LspRequestTimeoutError";
|
|
69
61
|
}
|
|
70
62
|
}
|
|
71
63
|
|
|
72
64
|
class LspInvalidPathError extends Error {
|
|
73
|
-
|
|
65
|
+
constructor() {
|
|
66
|
+
super(...arguments);
|
|
67
|
+
this.name = "LspInvalidPathError";
|
|
68
|
+
}
|
|
74
69
|
}
|
|
75
70
|
|
|
76
71
|
class LspServerLookupError extends Error {
|
|
77
|
-
lookup;
|
|
78
|
-
name = "LspServerLookupError";
|
|
79
72
|
constructor(message, lookup) {
|
|
80
73
|
super(message);
|
|
81
74
|
this.lookup = lookup;
|
|
75
|
+
this.name = "LspServerLookupError";
|
|
82
76
|
}
|
|
83
77
|
}
|
|
84
78
|
|
|
85
79
|
class LspServerInitializingError extends Error {
|
|
86
|
-
originalError;
|
|
87
|
-
name = "LspServerInitializingError";
|
|
88
80
|
constructor(originalError) {
|
|
89
81
|
super(`LSP server is still initializing. Please retry in a few seconds. Original error: ${originalError.message}`);
|
|
90
82
|
this.originalError = originalError;
|
|
83
|
+
this.name = "LspServerInitializingError";
|
|
91
84
|
}
|
|
92
85
|
}
|
|
93
86
|
|
|
94
87
|
class LspProcessSpawnError extends Error {
|
|
95
|
-
|
|
88
|
+
constructor() {
|
|
89
|
+
super(...arguments);
|
|
90
|
+
this.name = "LspProcessSpawnError";
|
|
91
|
+
}
|
|
96
92
|
}
|
|
97
93
|
function isLspDeadConnectionError(err) {
|
|
98
94
|
return err instanceof LspConnectionClosedError || err instanceof LspProcessExitedError;
|
|
@@ -108,20 +104,31 @@ var METHOD_NOT_FOUND = -32601;
|
|
|
108
104
|
var INTERNAL_ERROR = -32603;
|
|
109
105
|
|
|
110
106
|
class JsonRpcConnection {
|
|
111
|
-
reader;
|
|
112
|
-
writer;
|
|
113
|
-
pendingRequests = new Map;
|
|
114
|
-
notificationHandlers = new Map;
|
|
115
|
-
requestHandlers = new Map;
|
|
116
|
-
closeHandlers = [];
|
|
117
|
-
errorHandlers = [];
|
|
118
|
-
inputBuffer = Buffer.alloc(0);
|
|
119
|
-
nextRequestId = 1;
|
|
120
|
-
listening = false;
|
|
121
|
-
disposed = false;
|
|
122
107
|
constructor(reader, writer) {
|
|
123
108
|
this.reader = reader;
|
|
124
109
|
this.writer = writer;
|
|
110
|
+
this.pendingRequests = new Map;
|
|
111
|
+
this.notificationHandlers = new Map;
|
|
112
|
+
this.requestHandlers = new Map;
|
|
113
|
+
this.closeHandlers = [];
|
|
114
|
+
this.errorHandlers = [];
|
|
115
|
+
this.inputBuffer = Buffer.alloc(0);
|
|
116
|
+
this.nextRequestId = 1;
|
|
117
|
+
this.listening = false;
|
|
118
|
+
this.disposed = false;
|
|
119
|
+
this.handleData = (chunk) => {
|
|
120
|
+
const chunkBuffer = Buffer.isBuffer(chunk) ? chunk : Buffer.from(chunk, "utf8");
|
|
121
|
+
this.inputBuffer = Buffer.concat([this.inputBuffer, chunkBuffer]);
|
|
122
|
+
this.drainInputBuffer();
|
|
123
|
+
};
|
|
124
|
+
this.handleClose = () => {
|
|
125
|
+
for (const handler of this.closeHandlers) {
|
|
126
|
+
handler();
|
|
127
|
+
}
|
|
128
|
+
};
|
|
129
|
+
this.handleStreamError = (error) => {
|
|
130
|
+
this.emitError(error);
|
|
131
|
+
};
|
|
125
132
|
}
|
|
126
133
|
listen() {
|
|
127
134
|
if (this.listening)
|
|
@@ -242,19 +249,6 @@ class JsonRpcConnection {
|
|
|
242
249
|
this.notificationHandlers.clear();
|
|
243
250
|
this.requestHandlers.clear();
|
|
244
251
|
}
|
|
245
|
-
handleData = (chunk) => {
|
|
246
|
-
const chunkBuffer = Buffer.isBuffer(chunk) ? chunk : Buffer.from(chunk, "utf8");
|
|
247
|
-
this.inputBuffer = Buffer.concat([this.inputBuffer, chunkBuffer]);
|
|
248
|
-
this.drainInputBuffer();
|
|
249
|
-
};
|
|
250
|
-
handleClose = () => {
|
|
251
|
-
for (const handler of this.closeHandlers) {
|
|
252
|
-
handler();
|
|
253
|
-
}
|
|
254
|
-
};
|
|
255
|
-
handleStreamError = (error) => {
|
|
256
|
-
this.emitError(error);
|
|
257
|
-
};
|
|
258
252
|
drainInputBuffer() {
|
|
259
253
|
while (true) {
|
|
260
254
|
const headerEnd = this.inputBuffer.indexOf(HEADER_SEPARATOR);
|
|
@@ -602,31 +596,25 @@ function isPosition(value) {
|
|
|
602
596
|
|
|
603
597
|
// ../lsp-core/src/lsp/transport.ts
|
|
604
598
|
class LspClientNotStartedError extends Error {
|
|
605
|
-
serverId;
|
|
606
|
-
root;
|
|
607
|
-
name = "LspClientNotStartedError";
|
|
608
599
|
constructor(serverId, root) {
|
|
609
600
|
super("LSP client not started");
|
|
610
601
|
this.serverId = serverId;
|
|
611
602
|
this.root = root;
|
|
603
|
+
this.name = "LspClientNotStartedError";
|
|
612
604
|
}
|
|
613
605
|
}
|
|
614
606
|
|
|
615
607
|
class LspClientTransport {
|
|
616
|
-
root;
|
|
617
|
-
server;
|
|
618
|
-
proc = null;
|
|
619
|
-
connection = null;
|
|
620
|
-
stderrBuffer = [];
|
|
621
|
-
processExited = false;
|
|
622
|
-
diagnosticsStore = new Map;
|
|
623
|
-
requestTimeoutMs;
|
|
624
|
-
initializeTimeoutMs;
|
|
625
|
-
workspaceApplyEditHandler = null;
|
|
626
|
-
diagnosticPullSupported = false;
|
|
627
608
|
constructor(root, server, timeouts = {}) {
|
|
628
609
|
this.root = root;
|
|
629
610
|
this.server = server;
|
|
611
|
+
this.proc = null;
|
|
612
|
+
this.connection = null;
|
|
613
|
+
this.stderrBuffer = [];
|
|
614
|
+
this.processExited = false;
|
|
615
|
+
this.diagnosticsStore = new Map;
|
|
616
|
+
this.workspaceApplyEditHandler = null;
|
|
617
|
+
this.diagnosticPullSupported = false;
|
|
630
618
|
this.requestTimeoutMs = timeouts.requestTimeoutMs ?? REQUEST_TIMEOUT_MS;
|
|
631
619
|
this.initializeTimeoutMs = timeouts.initializeTimeoutMs ?? INIT_TIMEOUT_MS;
|
|
632
620
|
}
|
|
@@ -1133,16 +1121,12 @@ function movedPath(candidate, oldPath, newPath) {
|
|
|
1133
1121
|
}
|
|
1134
1122
|
|
|
1135
1123
|
class WorkspaceDocumentState {
|
|
1136
|
-
sendNotification;
|
|
1137
|
-
clearDiagnostics;
|
|
1138
|
-
openDocuments = new Map;
|
|
1139
|
-
openByUri = new Map;
|
|
1140
|
-
openPromises = new Map;
|
|
1141
|
-
now;
|
|
1142
|
-
versionlessPublishQuiescenceMs;
|
|
1143
1124
|
constructor(sendNotification, clearDiagnostics, options = {}) {
|
|
1144
1125
|
this.sendNotification = sendNotification;
|
|
1145
1126
|
this.clearDiagnostics = clearDiagnostics;
|
|
1127
|
+
this.openDocuments = new Map;
|
|
1128
|
+
this.openByUri = new Map;
|
|
1129
|
+
this.openPromises = new Map;
|
|
1146
1130
|
this.now = options.now ?? (() => Date.now());
|
|
1147
1131
|
this.versionlessPublishQuiescenceMs = options.versionlessPublishQuiescenceMs ?? DEFAULT_VERSIONLESS_PUBLISH_QUIESCENCE_MS;
|
|
1148
1132
|
}
|
|
@@ -1406,13 +1390,11 @@ import { dirname, isAbsolute, relative as relative2, resolve as resolve2 } from
|
|
|
1406
1390
|
import { fileURLToPath } from "node:url";
|
|
1407
1391
|
|
|
1408
1392
|
class WorkspaceEditPathError extends Error {
|
|
1409
|
-
path;
|
|
1410
|
-
detail;
|
|
1411
|
-
name = "WorkspaceEditPathError";
|
|
1412
1393
|
constructor(path, detail) {
|
|
1413
1394
|
super(`${detail}: ${path}`);
|
|
1414
1395
|
this.path = path;
|
|
1415
1396
|
this.detail = detail;
|
|
1397
|
+
this.name = "WorkspaceEditPathError";
|
|
1416
1398
|
}
|
|
1417
1399
|
}
|
|
1418
1400
|
function isPathInsideWorkspace(filePath, workspaceRoot) {
|
|
@@ -1704,13 +1686,11 @@ function canonicalFingerprint(operations) {
|
|
|
1704
1686
|
|
|
1705
1687
|
// ../lsp-core/src/lsp/workspace-edit-types.ts
|
|
1706
1688
|
class WorkspaceEditValidationError extends Error {
|
|
1707
|
-
changeIndex;
|
|
1708
|
-
detail;
|
|
1709
|
-
name = "WorkspaceEditValidationError";
|
|
1710
1689
|
constructor(changeIndex, detail) {
|
|
1711
1690
|
super(`change ${changeIndex}: ${detail}`);
|
|
1712
1691
|
this.changeIndex = changeIndex;
|
|
1713
1692
|
this.detail = detail;
|
|
1693
|
+
this.name = "WorkspaceEditValidationError";
|
|
1714
1694
|
}
|
|
1715
1695
|
}
|
|
1716
1696
|
|
|
@@ -2208,10 +2188,9 @@ function simulateDelete(operation, virtual) {
|
|
|
2208
2188
|
import { existsSync as existsSync4, lstatSync as lstatSync3, readdirSync as readdirSync2 } from "node:fs";
|
|
2209
2189
|
import { dirname as dirname3, resolve as resolve4 } from "node:path";
|
|
2210
2190
|
class WorkspaceSnapshotBuilder {
|
|
2211
|
-
workspaceRoot;
|
|
2212
|
-
snapshots = new Map;
|
|
2213
2191
|
constructor(workspaceRoot) {
|
|
2214
2192
|
this.workspaceRoot = workspaceRoot;
|
|
2193
|
+
this.snapshots = new Map;
|
|
2215
2194
|
}
|
|
2216
2195
|
build(operations) {
|
|
2217
2196
|
this.add(this.workspaceRoot, false);
|
|
@@ -2255,8 +2234,10 @@ function snapshotOperations(operations, workspaceRoot) {
|
|
|
2255
2234
|
|
|
2256
2235
|
// ../lsp-core/src/lsp/workspace-edit-plan.ts
|
|
2257
2236
|
class PlanPathIndex {
|
|
2258
|
-
|
|
2259
|
-
|
|
2237
|
+
constructor() {
|
|
2238
|
+
this.firstChangeByPath = new Map;
|
|
2239
|
+
this.reportedPathByCanonical = new Map;
|
|
2240
|
+
}
|
|
2260
2241
|
build(operations) {
|
|
2261
2242
|
for (const operation of operations) {
|
|
2262
2243
|
switch (operation.kind) {
|
|
@@ -2345,14 +2326,11 @@ function isRecord3(value) {
|
|
|
2345
2326
|
}
|
|
2346
2327
|
|
|
2347
2328
|
class WorkspaceMutationController {
|
|
2348
|
-
workspaceRoot;
|
|
2349
|
-
documents;
|
|
2350
|
-
activeLease = null;
|
|
2351
|
-
nextLeaseId = 1;
|
|
2352
|
-
io;
|
|
2353
2329
|
constructor(workspaceRoot, documents) {
|
|
2354
2330
|
this.workspaceRoot = workspaceRoot;
|
|
2355
2331
|
this.documents = documents;
|
|
2332
|
+
this.activeLease = null;
|
|
2333
|
+
this.nextLeaseId = 1;
|
|
2356
2334
|
}
|
|
2357
2335
|
setIo(io) {
|
|
2358
2336
|
this.io = io;
|
|
@@ -2465,12 +2443,9 @@ var DIAGNOSTICS_FRESHNESS_TIMEOUT_MS = 3000;
|
|
|
2465
2443
|
var VERSIONLESS_PUBLISH_QUIESCENCE_MS = 250;
|
|
2466
2444
|
|
|
2467
2445
|
class LspClient extends LspClientConnection {
|
|
2468
|
-
diagnosticPullErrors = [];
|
|
2469
|
-
documents;
|
|
2470
|
-
workspaceMutations;
|
|
2471
|
-
diagnosticsFreshnessTimeoutMs;
|
|
2472
2446
|
constructor(root, server, options = {}) {
|
|
2473
2447
|
super(root, server, options);
|
|
2448
|
+
this.diagnosticPullErrors = [];
|
|
2474
2449
|
this.diagnosticsFreshnessTimeoutMs = options.diagnosticsFreshnessTimeoutMs ?? DIAGNOSTICS_FRESHNESS_TIMEOUT_MS;
|
|
2475
2450
|
this.documents = new WorkspaceDocumentState((method, params) => this.sendNotification(method, params), (uri) => this.diagnosticsStore.delete(uri), {
|
|
2476
2451
|
versionlessPublishQuiescenceMs: options.versionlessPublishQuiescenceMs ?? VERSIONLESS_PUBLISH_QUIESCENCE_MS
|
|
@@ -2770,16 +2745,11 @@ function awaitWithSignal(promise, signal) {
|
|
|
2770
2745
|
}
|
|
2771
2746
|
|
|
2772
2747
|
class LspManager {
|
|
2773
|
-
clients = new Map;
|
|
2774
|
-
reaperHandle = null;
|
|
2775
|
-
signalDisposer = null;
|
|
2776
|
-
disposed = false;
|
|
2777
|
-
idleTimeoutMs;
|
|
2778
|
-
initTimeoutMs;
|
|
2779
|
-
reaperIntervalMs;
|
|
2780
|
-
clientFactory;
|
|
2781
|
-
now;
|
|
2782
2748
|
constructor(options = {}) {
|
|
2749
|
+
this.clients = new Map;
|
|
2750
|
+
this.reaperHandle = null;
|
|
2751
|
+
this.signalDisposer = null;
|
|
2752
|
+
this.disposed = false;
|
|
2783
2753
|
this.idleTimeoutMs = options.idleTimeoutMs ?? IDLE_TIMEOUT_MS;
|
|
2784
2754
|
this.initTimeoutMs = options.initTimeoutMs ?? INIT_TIMEOUT_MS;
|
|
2785
2755
|
this.reaperIntervalMs = options.reaperIntervalMs ?? REAPER_INTERVAL_MS;
|
|
@@ -3011,7 +2981,7 @@ async function disposeDefaultLspManager() {
|
|
|
3011
2981
|
}
|
|
3012
2982
|
}
|
|
3013
2983
|
export {
|
|
3014
|
-
|
|
2984
|
+
LspManager,
|
|
3015
2985
|
disposeDefaultLspManager,
|
|
3016
|
-
|
|
2986
|
+
getLspManager
|
|
3017
2987
|
};
|