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.
Files changed (116) hide show
  1. package/README.ja.md +25 -21
  2. package/README.ko.md +25 -21
  3. package/README.md +26 -22
  4. package/README.ru.md +24 -20
  5. package/README.zh-cn.md +25 -21
  6. package/dist/cli/index.js +12628 -13558
  7. package/dist/cli-node/index.js +12628 -13558
  8. package/dist/features/btw-side/tui-controller-types.d.ts +5 -0
  9. package/dist/features/btw-side/tui-controller.d.ts +8 -3
  10. package/dist/features/btw-side/tui-escape-return.d.ts +12 -0
  11. package/dist/features/btw-side/tui-keymap.d.ts +8 -1
  12. package/dist/features/btw-side/tui-picker-options.d.ts +20 -0
  13. package/dist/features/btw-side/tui-picker.d.ts +9 -0
  14. package/dist/features/btw-side/tui-session-catalog.d.ts +35 -0
  15. package/dist/features/btw-side/tui-side-start.d.ts +1 -1
  16. package/dist/features/opengateway-provider/index.d.ts +13 -0
  17. package/dist/index.js +8462 -6318
  18. package/dist/skills/frontend/SKILL.md +1 -0
  19. package/dist/skills/frontend/references/design/print-paged-media.md +76 -0
  20. package/dist/skills/ulw-research/SKILL.md +1 -1
  21. package/dist/skills/visual-qa/SKILL.md +3 -2
  22. package/dist/tui.js +3993 -5513
  23. package/package.json +22 -22
  24. package/packages/git-bash-mcp/package.json +1 -1
  25. package/packages/lsp-daemon/dist/cli.js +81 -113
  26. package/packages/lsp-daemon/dist/client.js +82 -117
  27. package/packages/lsp-daemon/dist/ensure-daemon.js +1 -0
  28. package/packages/lsp-daemon/dist/index.js +88 -122
  29. package/packages/lsp-daemon/dist/version-reap.js +1 -1
  30. package/packages/lsp-tools-mcp/dist/cli.js +62 -93
  31. package/packages/lsp-tools-mcp/dist/lsp/manager.js +62 -92
  32. package/packages/lsp-tools-mcp/dist/mcp.js +64 -95
  33. package/packages/lsp-tools-mcp/dist/request-context.js +11 -12
  34. package/packages/lsp-tools-mcp/dist/tools.js +73 -104
  35. package/packages/omo-codex/plugin/.codex-plugin/plugin.json +1 -1
  36. package/packages/omo-codex/plugin/components/bootstrap/dist/cli.js +30 -29
  37. package/packages/omo-codex/plugin/components/bootstrap/hooks/hooks.json +1 -1
  38. package/packages/omo-codex/plugin/components/bootstrap/package.json +1 -1
  39. package/packages/omo-codex/plugin/components/bootstrap/src/hook.ts +1 -0
  40. package/packages/omo-codex/plugin/components/codegraph/dist/cli.js +81 -64
  41. package/packages/omo-codex/plugin/components/codegraph/dist/serve.js +81 -65
  42. package/packages/omo-codex/plugin/components/codegraph/package.json +4 -4
  43. package/packages/omo-codex/plugin/components/codegraph/src/mcp-bridge.ts +1 -0
  44. package/packages/omo-codex/plugin/components/codegraph/src/session-start-hook-runtime.ts +1 -0
  45. package/packages/omo-codex/plugin/components/comment-checker/dist/cli.js +2 -1
  46. package/packages/omo-codex/plugin/components/comment-checker/hooks/hooks.json +1 -1
  47. package/packages/omo-codex/plugin/components/comment-checker/package.json +5 -5
  48. package/packages/omo-codex/plugin/components/comment-checker/src/runner.ts +1 -0
  49. package/packages/omo-codex/plugin/components/git-bash/AGENTS.md +1 -1
  50. package/packages/omo-codex/plugin/components/git-bash/hooks/hooks.json +2 -2
  51. package/packages/omo-codex/plugin/components/git-bash/package.json +3 -4
  52. package/packages/omo-codex/plugin/components/lazycodex-executor-verify/hooks/hooks.json +1 -1
  53. package/packages/omo-codex/plugin/components/lazycodex-executor-verify/package.json +5 -5
  54. package/packages/omo-codex/plugin/components/lsp/dist/.omo-runtime-manifest.json +3 -3
  55. package/packages/omo-codex/plugin/components/lsp/dist/cli.js +70 -107
  56. package/packages/omo-codex/plugin/components/lsp/hooks/hooks.json +2 -2
  57. package/packages/omo-codex/plugin/components/lsp/package.json +5 -5
  58. package/packages/omo-codex/plugin/components/lsp/src/cli.ts +1 -1
  59. package/packages/omo-codex/plugin/components/rules/dist/cli.js +14 -12
  60. package/packages/omo-codex/plugin/components/rules/hooks/hooks.json +4 -4
  61. package/packages/omo-codex/plugin/components/rules/package.json +7 -7
  62. package/packages/omo-codex/plugin/components/start-work-continuation/hooks/hooks.json +2 -2
  63. package/packages/omo-codex/plugin/components/start-work-continuation/package.json +5 -5
  64. package/packages/omo-codex/plugin/components/teammode/hooks/hooks.json +1 -1
  65. package/packages/omo-codex/plugin/components/teammode/package.json +5 -5
  66. package/packages/omo-codex/plugin/components/telemetry/dist/cli.js +25 -25
  67. package/packages/omo-codex/plugin/components/telemetry/dist/posthog.js +31 -31
  68. package/packages/omo-codex/plugin/components/telemetry/hooks/hooks.json +1 -1
  69. package/packages/omo-codex/plugin/components/telemetry/package.json +5 -5
  70. package/packages/omo-codex/plugin/components/ultrawork/hooks/hooks.json +1 -1
  71. package/packages/omo-codex/plugin/components/ultrawork/package.json +5 -5
  72. package/packages/omo-codex/plugin/components/ulw-loop/dist/cli.js +1 -3
  73. package/packages/omo-codex/plugin/components/ulw-loop/dist/paths.js +1 -1
  74. package/packages/omo-codex/plugin/components/ulw-loop/hooks/hooks.json +4 -4
  75. package/packages/omo-codex/plugin/components/ulw-loop/package.json +5 -5
  76. package/packages/omo-codex/plugin/components/ulw-loop/src/paths.ts +1 -1
  77. package/packages/omo-codex/plugin/components/ulw-loop/test/cli-create-goals.test.ts +25 -0
  78. package/packages/omo-codex/plugin/components/ulw-loop/test/paths.test.ts +9 -0
  79. package/packages/omo-codex/plugin/components/ulw-loop/vitest.config.ts +1 -0
  80. package/packages/omo-codex/plugin/hooks/post-compact-resetting-git-bash-mcp-reminder.json +1 -1
  81. package/packages/omo-codex/plugin/hooks/post-compact-resetting-lsp-diagnostics-cache.json +1 -1
  82. package/packages/omo-codex/plugin/hooks/post-compact-resetting-project-rule-cache.json +1 -1
  83. package/packages/omo-codex/plugin/hooks/post-tool-use-checking-codegraph-init-guidance.json +1 -1
  84. package/packages/omo-codex/plugin/hooks/post-tool-use-checking-comments.json +1 -1
  85. package/packages/omo-codex/plugin/hooks/post-tool-use-checking-lsp-diagnostics.json +1 -1
  86. package/packages/omo-codex/plugin/hooks/post-tool-use-checking-thread-title-hygiene.json +1 -1
  87. package/packages/omo-codex/plugin/hooks/post-tool-use-matching-project-rules.json +1 -1
  88. package/packages/omo-codex/plugin/hooks/pre-tool-use-enforcing-unlimited-goal-budget.json +1 -1
  89. package/packages/omo-codex/plugin/hooks/pre-tool-use-guarding-ulw-loop-spawns.json +1 -1
  90. package/packages/omo-codex/plugin/hooks/pre-tool-use-recommending-git-bash-mcp.json +1 -1
  91. package/packages/omo-codex/plugin/hooks/session-start-checking-auto-update.json +1 -1
  92. package/packages/omo-codex/plugin/hooks/session-start-checking-bootstrap-provisioning.json +1 -1
  93. package/packages/omo-codex/plugin/hooks/session-start-checking-codegraph-bootstrap.json +1 -1
  94. package/packages/omo-codex/plugin/hooks/session-start-loading-project-rules.json +1 -1
  95. package/packages/omo-codex/plugin/hooks/session-start-recording-session-telemetry.json +1 -1
  96. package/packages/omo-codex/plugin/hooks/stop-checking-start-work-continuation.json +1 -1
  97. package/packages/omo-codex/plugin/hooks/stop-checking-ulw-loop-resume.json +1 -1
  98. package/packages/omo-codex/plugin/hooks/subagent-stop-checking-start-work-continuation.json +1 -1
  99. package/packages/omo-codex/plugin/hooks/subagent-stop-verifying-lazycodex-executor-evidence.json +1 -1
  100. package/packages/omo-codex/plugin/hooks/user-prompt-submit-checking-ultrawork-trigger.json +1 -1
  101. package/packages/omo-codex/plugin/hooks/user-prompt-submit-checking-ulw-loop-steering.json +1 -1
  102. package/packages/omo-codex/plugin/hooks/user-prompt-submit-loading-project-rules.json +1 -1
  103. package/packages/omo-codex/plugin/package-lock.json +661 -375
  104. package/packages/omo-codex/plugin/package.json +1 -1
  105. package/packages/omo-codex/plugin/shared/package.json +2 -3
  106. package/packages/omo-codex/plugin/skills/frontend/SKILL.md +1 -0
  107. package/packages/omo-codex/plugin/skills/frontend/references/design/print-paged-media.md +76 -0
  108. package/packages/omo-codex/plugin/skills/ulw-research/SKILL.md +1 -1
  109. package/packages/omo-codex/plugin/skills/visual-qa/SKILL.md +3 -2
  110. package/packages/omo-codex/scripts/install-dist/install-local.mjs +53 -53
  111. package/packages/shared-skills/skills/frontend/SKILL.md +1 -0
  112. package/packages/shared-skills/skills/frontend/references/design/print-paged-media.md +76 -0
  113. package/packages/shared-skills/skills/ulw-research/SKILL.md +1 -1
  114. package/packages/shared-skills/skills/visual-qa/SKILL.md +3 -2
  115. package/script/qa/web-terminal-visual-qa.mjs +2 -0
  116. 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
- name = "LspInvalidPathError";
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
- name = "LspProcessSpawnError";
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
- firstChangeByPath = new Map;
2261
- reportedPathByCanonical = new Map;
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
- name = "LspInvalidPathError";
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
- name = "LspProcessSpawnError";
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
- firstChangeByPath = new Map;
2259
- reportedPathByCanonical = new Map;
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
- getLspManager,
2984
+ LspManager,
3015
2985
  disposeDefaultLspManager,
3016
- LspManager
2986
+ getLspManager
3017
2987
  };