oh-my-opencode 5.0.0-beta.13 → 5.0.0-beta.14
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
|
@@ -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;
|
|
@@ -3022,18 +2992,17 @@ import { homedir } from "node:os";
|
|
|
3022
2992
|
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";
|
|
3023
2993
|
|
|
3024
2994
|
class LspRequestContextParseError extends Error {
|
|
3025
|
-
code;
|
|
3026
|
-
name = "LspRequestContextParseError";
|
|
3027
2995
|
constructor(code, message) {
|
|
3028
2996
|
super(message);
|
|
3029
2997
|
this.code = code;
|
|
2998
|
+
this.name = "LspRequestContextParseError";
|
|
3030
2999
|
}
|
|
3031
3000
|
}
|
|
3032
3001
|
|
|
3033
3002
|
class LspRequestContextUnavailableError extends Error {
|
|
3034
|
-
name = "LspRequestContextUnavailableError";
|
|
3035
3003
|
constructor() {
|
|
3036
3004
|
super("LSP request context is required. Standalone MCP startup must install one with runWithRequestContext(createStandaloneMcpRequestContext()).");
|
|
3005
|
+
this.name = "LspRequestContextUnavailableError";
|
|
3037
3006
|
}
|
|
3038
3007
|
}
|
|
3039
3008
|
var storage = new AsyncLocalStorage;
|
|
@@ -3191,7 +3160,6 @@ function isPlainRecord(value) {
|
|
|
3191
3160
|
|
|
3192
3161
|
// src/daemon-request-error.ts
|
|
3193
3162
|
class DaemonRequestError extends Error {
|
|
3194
|
-
requestWritten;
|
|
3195
3163
|
constructor(message, requestWritten) {
|
|
3196
3164
|
super(message);
|
|
3197
3165
|
this.name = "DaemonRequestError";
|
|
@@ -3214,7 +3182,6 @@ class DaemonRequestCancelledError extends DaemonRequestError {
|
|
|
3214
3182
|
}
|
|
3215
3183
|
|
|
3216
3184
|
class DaemonRequestTimedOutError extends DaemonRequestError {
|
|
3217
|
-
timeoutMs;
|
|
3218
3185
|
constructor(requestWritten, timeoutMs) {
|
|
3219
3186
|
super("daemon request timed out", requestWritten);
|
|
3220
3187
|
this.name = "DaemonRequestTimedOutError";
|
|
@@ -3293,14 +3260,12 @@ var PROTOCOL_ERROR_CODE = -32002;
|
|
|
3293
3260
|
var AUTH_TOKEN_BYTES = 32;
|
|
3294
3261
|
|
|
3295
3262
|
class UnsafePrivateDirectoryError extends Error {
|
|
3296
|
-
path;
|
|
3297
|
-
reason;
|
|
3298
|
-
name = "UnsafePrivateDirectoryError";
|
|
3299
|
-
code = "unsafe_private_directory";
|
|
3300
3263
|
constructor(path, reason) {
|
|
3301
3264
|
super(`unsafe private directory ${path}: ${reason}`);
|
|
3302
3265
|
this.path = path;
|
|
3303
3266
|
this.reason = reason;
|
|
3267
|
+
this.name = "UnsafePrivateDirectoryError";
|
|
3268
|
+
this.code = "unsafe_private_directory";
|
|
3304
3269
|
}
|
|
3305
3270
|
}
|
|
3306
3271
|
function authEnvelope(token) {
|
|
@@ -3484,20 +3449,18 @@ var OMO_LSP_DAEMON_VERSION = "OMO_LSP_DAEMON_VERSION";
|
|
|
3484
3449
|
var DAEMON_VERSION_PATTERN = /^[A-Za-z0-9][A-Za-z0-9._+-]{0,127}$/;
|
|
3485
3450
|
|
|
3486
3451
|
class InvalidRuntimeOverrideError extends Error {
|
|
3487
|
-
code = "invalid_runtime_override";
|
|
3488
|
-
reason;
|
|
3489
3452
|
constructor(reason, message) {
|
|
3490
3453
|
super(message);
|
|
3454
|
+
this.code = "invalid_runtime_override";
|
|
3491
3455
|
this.name = "InvalidRuntimeOverrideError";
|
|
3492
3456
|
this.reason = reason;
|
|
3493
3457
|
}
|
|
3494
3458
|
}
|
|
3495
3459
|
|
|
3496
3460
|
class InvalidDaemonVersionError extends Error {
|
|
3497
|
-
code = "invalid_daemon_version";
|
|
3498
|
-
version;
|
|
3499
3461
|
constructor(version) {
|
|
3500
3462
|
super("LSP daemon version must match [A-Za-z0-9][A-Za-z0-9._+-]{0,127}");
|
|
3463
|
+
this.code = "invalid_daemon_version";
|
|
3501
3464
|
this.name = "InvalidDaemonVersionError";
|
|
3502
3465
|
this.version = version;
|
|
3503
3466
|
}
|
|
@@ -3543,10 +3506,9 @@ var requireFromHere = createRequire(import.meta.url);
|
|
|
3543
3506
|
var MAX_SOCKET_PATH_LENGTH = 100;
|
|
3544
3507
|
|
|
3545
3508
|
class InvalidDaemonDirectoryError extends Error {
|
|
3546
|
-
code = "invalid_daemon_directory";
|
|
3547
|
-
directory;
|
|
3548
3509
|
constructor(directory) {
|
|
3549
3510
|
super(`${OMO_LSP_DAEMON_DIR} must be an absolute path`);
|
|
3511
|
+
this.code = "invalid_daemon_directory";
|
|
3550
3512
|
this.name = "InvalidDaemonDirectoryError";
|
|
3551
3513
|
this.directory = directory;
|
|
3552
3514
|
}
|
|
@@ -3741,7 +3703,8 @@ function spawnDaemonProcess(paths) {
|
|
|
3741
3703
|
try {
|
|
3742
3704
|
const child = spawn2(resolveDaemonNodeExecutable(), [paths.cliPath, "daemon"], {
|
|
3743
3705
|
detached: true,
|
|
3744
|
-
stdio: ["ignore", logFd, logFd]
|
|
3706
|
+
stdio: ["ignore", logFd, logFd],
|
|
3707
|
+
windowsHide: true
|
|
3745
3708
|
});
|
|
3746
3709
|
child.once("spawn", () => closeSync2(logFd));
|
|
3747
3710
|
child.once("error", (error) => {
|
|
@@ -5863,7 +5826,10 @@ function requestedProtocolVersion(params) {
|
|
|
5863
5826
|
var CONTEXT_KEY = "_context";
|
|
5864
5827
|
|
|
5865
5828
|
class InvalidDaemonRequestError extends Error {
|
|
5866
|
-
|
|
5829
|
+
constructor() {
|
|
5830
|
+
super(...arguments);
|
|
5831
|
+
this.name = "InvalidDaemonRequestError";
|
|
5832
|
+
}
|
|
5867
5833
|
}
|
|
5868
5834
|
function extractRequestContext(raw) {
|
|
5869
5835
|
if (!isPlainRecord(raw) || raw["method"] !== "tools/call")
|
|
@@ -6256,20 +6222,20 @@ function projectRootFromOpenCodeConfigPath(path2) {
|
|
|
6256
6222
|
return dirname10(configDir);
|
|
6257
6223
|
}
|
|
6258
6224
|
export {
|
|
6259
|
-
|
|
6260
|
-
runMcpStdioProxy,
|
|
6261
|
-
resolveDaemonRuntime,
|
|
6262
|
-
probeDaemon,
|
|
6263
|
-
ensureDaemonRunning,
|
|
6264
|
-
disposeDefaultLspManager,
|
|
6265
|
-
daemonPaths,
|
|
6266
|
-
currentRequestContext,
|
|
6267
|
-
callToolViaDaemon,
|
|
6268
|
-
callDiagnosticsViaDaemon,
|
|
6269
|
-
OMO_LSP_DAEMON_VERSION,
|
|
6270
|
-
OMO_LSP_DAEMON_DIR,
|
|
6271
|
-
OMO_LSP_DAEMON_CLI,
|
|
6272
|
-
InvalidRuntimeOverrideError,
|
|
6225
|
+
InvalidDaemonDirectoryError,
|
|
6273
6226
|
InvalidDaemonVersionError,
|
|
6274
|
-
|
|
6227
|
+
InvalidRuntimeOverrideError,
|
|
6228
|
+
OMO_LSP_DAEMON_CLI,
|
|
6229
|
+
OMO_LSP_DAEMON_DIR,
|
|
6230
|
+
OMO_LSP_DAEMON_VERSION,
|
|
6231
|
+
callDiagnosticsViaDaemon,
|
|
6232
|
+
callToolViaDaemon,
|
|
6233
|
+
currentRequestContext,
|
|
6234
|
+
daemonPaths,
|
|
6235
|
+
disposeDefaultLspManager,
|
|
6236
|
+
ensureDaemonRunning,
|
|
6237
|
+
probeDaemon,
|
|
6238
|
+
resolveDaemonRuntime,
|
|
6239
|
+
runMcpStdioProxy,
|
|
6240
|
+
validateDaemonVersion
|
|
6275
6241
|
};
|
|
@@ -149,7 +149,7 @@ function defaultReadProcFile(path) {
|
|
|
149
149
|
}
|
|
150
150
|
function defaultExecuteForStdout(file, args) {
|
|
151
151
|
return new Promise((resolve) => {
|
|
152
|
-
execFile(file, [...args], { encoding: "utf8", maxBuffer: 1024 * 1024, timeout: 1_000 }, (error, stdout) => {
|
|
152
|
+
execFile(file, [...args], { encoding: "utf8", maxBuffer: 1024 * 1024, timeout: 1_000, windowsHide: true }, (error, stdout) => {
|
|
153
153
|
if (error !== null) {
|
|
154
154
|
resolve(null);
|
|
155
155
|
return;
|