lazycodex-ai 4.18.0 → 4.18.2

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 (147) hide show
  1. package/dist/cli/index.js +500 -158
  2. package/dist/cli-node/index.js +500 -158
  3. package/package.json +1 -1
  4. package/packages/git-bash-mcp/dist/cli.js +81 -19
  5. package/packages/lsp-daemon/dist/cli.js +3330 -764
  6. package/packages/lsp-daemon/dist/client.d.ts +105 -0
  7. package/packages/lsp-daemon/dist/client.js +5995 -0
  8. package/packages/lsp-daemon/dist/daemon-client.d.ts +12 -7
  9. package/packages/lsp-daemon/dist/daemon-client.js +139 -32
  10. package/packages/lsp-daemon/dist/daemon-server.d.ts +1 -0
  11. package/packages/lsp-daemon/dist/daemon-server.js +40 -15
  12. package/packages/lsp-daemon/dist/ensure-daemon.d.ts +10 -8
  13. package/packages/lsp-daemon/dist/ensure-daemon.js +135 -51
  14. package/packages/lsp-daemon/dist/index.d.ts +2 -2
  15. package/packages/lsp-daemon/dist/index.js +3093 -786
  16. package/packages/lsp-daemon/dist/ipc-protocol.d.ts +46 -0
  17. package/packages/lsp-daemon/dist/ipc-protocol.js +187 -0
  18. package/packages/lsp-daemon/dist/lock.js +14 -4
  19. package/packages/lsp-daemon/dist/ownership.d.ts +49 -0
  20. package/packages/lsp-daemon/dist/ownership.js +168 -0
  21. package/packages/lsp-daemon/dist/paths.d.ts +33 -9
  22. package/packages/lsp-daemon/dist/paths.js +72 -33
  23. package/packages/lsp-daemon/dist/proxy.d.ts +5 -0
  24. package/packages/lsp-daemon/dist/proxy.js +123 -16
  25. package/packages/lsp-daemon/dist/request-routing.d.ts +7 -2
  26. package/packages/lsp-daemon/dist/request-routing.js +71 -22
  27. package/packages/lsp-daemon/dist/run-daemon.js +9 -2
  28. package/packages/lsp-daemon/dist/runtime-contract.d.ts +21 -0
  29. package/packages/lsp-daemon/dist/runtime-contract.js +58 -0
  30. package/packages/lsp-daemon/dist/socket-jsonrpc.js +6 -1
  31. package/packages/lsp-daemon/package.json +12 -3
  32. package/packages/lsp-tools-mcp/dist/cli.js +2189 -454
  33. package/packages/lsp-tools-mcp/dist/lsp/manager.js +1741 -148
  34. package/packages/lsp-tools-mcp/dist/mcp.js +2206 -471
  35. package/packages/lsp-tools-mcp/dist/request-context.js +176 -6
  36. package/packages/lsp-tools-mcp/dist/tools.js +2119 -447
  37. package/packages/omo-codex/plugin/.codex-plugin/plugin.json +1 -1
  38. package/packages/omo-codex/plugin/.mcp.json +2 -1
  39. package/packages/omo-codex/plugin/components/bootstrap/hooks/hooks.json +1 -1
  40. package/packages/omo-codex/plugin/components/bootstrap/package.json +1 -1
  41. package/packages/omo-codex/plugin/components/codegraph/dist/cli.js +100 -28
  42. package/packages/omo-codex/plugin/components/codegraph/dist/serve.js +100 -28
  43. package/packages/omo-codex/plugin/components/codegraph/package.json +1 -1
  44. package/packages/omo-codex/plugin/components/codegraph/src/mcp-bridge.ts +21 -9
  45. package/packages/omo-codex/plugin/components/codegraph/test/mcp-bridge-fixtures.ts +35 -0
  46. package/packages/omo-codex/plugin/components/codegraph/test/serve-mcp-bridge-lifecycle.test.ts +69 -0
  47. package/packages/omo-codex/plugin/components/codegraph/test/serve-mcp-bridge.test.ts +57 -1
  48. package/packages/omo-codex/plugin/components/comment-checker/hooks/hooks.json +1 -1
  49. package/packages/omo-codex/plugin/components/comment-checker/package.json +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 +1 -1
  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 +1 -1
  54. package/packages/omo-codex/plugin/components/lsp/.mcp.json +2 -1
  55. package/packages/omo-codex/plugin/components/lsp/dist/.omo-runtime-manifest.json +55 -0
  56. package/packages/omo-codex/plugin/components/lsp/dist/cli.js +3033 -936
  57. package/packages/omo-codex/plugin/components/lsp/dist/codex-hook-cli.js +0 -4
  58. package/packages/omo-codex/plugin/components/lsp/dist/codex-hook.d.ts +5 -2
  59. package/packages/omo-codex/plugin/components/lsp/dist/codex-hook.js +41 -62
  60. package/packages/omo-codex/plugin/components/lsp/dist/daemon-cli-path.d.ts +1 -1
  61. package/packages/omo-codex/plugin/components/lsp/dist/daemon-cli-path.js +24 -15
  62. package/packages/omo-codex/plugin/components/lsp/dist/lsp-session-state.d.ts +3 -7
  63. package/packages/omo-codex/plugin/components/lsp/dist/lsp-session-state.js +23 -49
  64. package/packages/omo-codex/plugin/components/lsp/hooks/hooks.json +2 -2
  65. package/packages/omo-codex/plugin/components/lsp/package.json +3 -2
  66. package/packages/omo-codex/plugin/components/lsp/scripts/build-lsp-daemon.mjs +31 -1
  67. package/packages/omo-codex/plugin/components/lsp/scripts/build-lsp-daemon.test.mjs +76 -0
  68. package/packages/omo-codex/plugin/components/lsp/scripts/build-runtime.mjs +201 -0
  69. package/packages/omo-codex/plugin/components/lsp/scripts/build-runtime.test.mjs +55 -0
  70. package/packages/omo-codex/plugin/components/lsp/src/codex-hook-cli.ts +0 -4
  71. package/packages/omo-codex/plugin/components/lsp/src/codex-hook.ts +49 -71
  72. package/packages/omo-codex/plugin/components/lsp/src/daemon-cli-path.ts +26 -15
  73. package/packages/omo-codex/plugin/components/lsp/src/lsp-session-state.ts +26 -64
  74. package/packages/omo-codex/plugin/components/lsp/test/codex-hook-unavailable.test.ts +16 -17
  75. package/packages/omo-codex/plugin/components/lsp/test/codex-hook.test.ts +30 -4
  76. package/packages/omo-codex/plugin/components/lsp/test/package-smoke.test.ts +20 -5
  77. package/packages/omo-codex/plugin/components/rules/bundled-rules/hephaestus/gpt-5.5.md +1 -1
  78. package/packages/omo-codex/plugin/components/rules/bundled-rules/hephaestus/gpt-5.6.md +5 -3
  79. package/packages/omo-codex/plugin/components/rules/hooks/hooks.json +4 -4
  80. package/packages/omo-codex/plugin/components/rules/package.json +1 -1
  81. package/packages/omo-codex/plugin/components/start-work-continuation/README.md +2 -2
  82. package/packages/omo-codex/plugin/components/start-work-continuation/directive.md +3 -3
  83. package/packages/omo-codex/plugin/components/start-work-continuation/dist/cli.js +2 -2
  84. package/packages/omo-codex/plugin/components/start-work-continuation/hooks/hooks.json +2 -2
  85. package/packages/omo-codex/plugin/components/start-work-continuation/package.json +1 -1
  86. package/packages/omo-codex/plugin/components/start-work-continuation/src/boulder-reader.ts +1 -1
  87. package/packages/omo-codex/plugin/components/start-work-continuation/src/codex-hook.ts +1 -1
  88. package/packages/omo-codex/plugin/components/start-work-continuation/test/boulder-reader.test.ts +15 -1
  89. package/packages/omo-codex/plugin/components/start-work-continuation/test/codex-hook.test.ts +20 -0
  90. package/packages/omo-codex/plugin/components/teammode/hooks/hooks.json +1 -1
  91. package/packages/omo-codex/plugin/components/teammode/package.json +1 -1
  92. package/packages/omo-codex/plugin/components/telemetry/hooks/hooks.json +1 -1
  93. package/packages/omo-codex/plugin/components/telemetry/package.json +1 -1
  94. package/packages/omo-codex/plugin/components/ultrawork/directive.md +50 -33
  95. package/packages/omo-codex/plugin/components/ultrawork/hooks/hooks.json +1 -1
  96. package/packages/omo-codex/plugin/components/ultrawork/package.json +1 -1
  97. package/packages/omo-codex/plugin/components/ultrawork/skills/ultrawork/SKILL.md +50 -33
  98. package/packages/omo-codex/plugin/components/ulw-loop/directive.md +50 -33
  99. package/packages/omo-codex/plugin/components/ulw-loop/dist/cli.js +3 -3
  100. package/packages/omo-codex/plugin/components/ulw-loop/dist/stop-resume-hook.js +5 -6
  101. package/packages/omo-codex/plugin/components/ulw-loop/hooks/hooks.json +4 -4
  102. package/packages/omo-codex/plugin/components/ulw-loop/package.json +1 -1
  103. package/packages/omo-codex/plugin/components/ulw-loop/skills/ulw-loop/SKILL.md +1 -1
  104. package/packages/omo-codex/plugin/components/ulw-loop/skills/ulw-loop/references/full-workflow.md +6 -5
  105. package/packages/omo-codex/plugin/components/ulw-loop/src/stop-resume-hook.ts +5 -6
  106. package/packages/omo-codex/plugin/components/ulw-loop/test/stop-resume-hook.test.ts +2 -2
  107. package/packages/omo-codex/plugin/hooks/post-compact-resetting-git-bash-mcp-reminder.json +1 -1
  108. package/packages/omo-codex/plugin/hooks/post-compact-resetting-lsp-diagnostics-cache.json +1 -1
  109. package/packages/omo-codex/plugin/hooks/post-compact-resetting-project-rule-cache.json +1 -1
  110. package/packages/omo-codex/plugin/hooks/post-tool-use-checking-codegraph-init-guidance.json +1 -1
  111. package/packages/omo-codex/plugin/hooks/post-tool-use-checking-comments.json +1 -1
  112. package/packages/omo-codex/plugin/hooks/post-tool-use-checking-lsp-diagnostics.json +1 -1
  113. package/packages/omo-codex/plugin/hooks/post-tool-use-checking-thread-title-hygiene.json +1 -1
  114. package/packages/omo-codex/plugin/hooks/post-tool-use-matching-project-rules.json +1 -1
  115. package/packages/omo-codex/plugin/hooks/pre-tool-use-enforcing-unlimited-goal-budget.json +1 -1
  116. package/packages/omo-codex/plugin/hooks/pre-tool-use-guarding-ulw-loop-spawns.json +1 -1
  117. package/packages/omo-codex/plugin/hooks/pre-tool-use-recommending-git-bash-mcp.json +1 -1
  118. package/packages/omo-codex/plugin/hooks/session-start-checking-auto-update.json +1 -1
  119. package/packages/omo-codex/plugin/hooks/session-start-checking-bootstrap-provisioning.json +1 -1
  120. package/packages/omo-codex/plugin/hooks/session-start-checking-codegraph-bootstrap.json +1 -1
  121. package/packages/omo-codex/plugin/hooks/session-start-loading-project-rules.json +1 -1
  122. package/packages/omo-codex/plugin/hooks/session-start-recording-session-telemetry.json +1 -1
  123. package/packages/omo-codex/plugin/hooks/stop-checking-start-work-continuation.json +1 -1
  124. package/packages/omo-codex/plugin/hooks/stop-checking-ulw-loop-resume.json +1 -1
  125. package/packages/omo-codex/plugin/hooks/subagent-stop-checking-start-work-continuation.json +1 -1
  126. package/packages/omo-codex/plugin/hooks/subagent-stop-verifying-lazycodex-executor-evidence.json +1 -1
  127. package/packages/omo-codex/plugin/hooks/user-prompt-submit-checking-ultrawork-trigger.json +1 -1
  128. package/packages/omo-codex/plugin/hooks/user-prompt-submit-checking-ulw-loop-steering.json +1 -1
  129. package/packages/omo-codex/plugin/hooks/user-prompt-submit-loading-project-rules.json +1 -1
  130. package/packages/omo-codex/plugin/package-lock.json +26 -14
  131. package/packages/omo-codex/plugin/package.json +1 -1
  132. package/packages/omo-codex/plugin/scripts/build-bundled-mcp-runtimes.mjs +2 -3
  133. package/packages/omo-codex/plugin/scripts/build-components.mjs +13 -1
  134. package/packages/omo-codex/plugin/scripts/sync-skills.mjs +9 -1
  135. package/packages/omo-codex/plugin/skills/review-work/SKILL.md +7 -0
  136. package/packages/omo-codex/plugin/skills/start-work/SKILL.md +2 -1
  137. package/packages/omo-codex/plugin/skills/ultrawork/SKILL.md +50 -33
  138. package/packages/omo-codex/plugin/skills/ulw-loop/SKILL.md +1 -1
  139. package/packages/omo-codex/plugin/skills/ulw-loop/references/full-workflow.md +6 -5
  140. package/packages/omo-codex/plugin/test/aggregate-build.test.mjs +8 -0
  141. package/packages/omo-codex/plugin/test/component-bundled-cli.test.mjs +128 -15
  142. package/packages/omo-codex/plugin/test/install-time-build-runtime.test.mjs +10 -0
  143. package/packages/omo-codex/plugin/test/lsp-prebuild-layouts.test.mjs +2 -0
  144. package/packages/omo-codex/plugin/test/mcp-research-servers.test.mjs +1 -0
  145. package/packages/omo-codex/plugin/test/sync-skills-orchestration.test.mjs +7 -0
  146. package/packages/omo-codex/plugin/test/sync-skills-test-support.mjs +34 -3
  147. package/packages/omo-codex/scripts/install-dist/install-local.mjs +328 -63
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "lazycodex-ai",
3
- "version": "4.18.0",
3
+ "version": "4.18.2",
4
4
  "description": "The Best AI Agent Harness - Batteries-Included OpenCode Plugin with Multi-Model Orchestration, Parallel Background Agents, and Crafted LSP/AST Tools",
5
5
  "main": "./dist/index.js",
6
6
  "types": "dist/index.d.ts",
@@ -17,6 +17,9 @@ function errorResponse(id, code, message, data) {
17
17
  function jsonRpcId(value) {
18
18
  return typeof value === "string" || typeof value === "number" || value === null ? value : null;
19
19
  }
20
+ function messageFromError(error) {
21
+ return error instanceof Error ? error.message : String(error);
22
+ }
20
23
  // ../mcp-stdio-core/src/transport.ts
21
24
  var HEADER_SEPARATOR = Buffer.from(`\r
22
25
  \r
@@ -39,16 +42,45 @@ async function* readStdioJsonRpcMessages(input) {
39
42
  yield parseJsonPayload(trailing, "line");
40
43
  }
41
44
  }
42
- function writeStdioJsonRpcResponse(output, response, responseMode) {
45
+ async function writeStdioJsonRpcResponse(output, response, responseMode) {
43
46
  const body = JSON.stringify(response);
44
- if (responseMode === "framed") {
45
- output.write(`Content-Length: ${Buffer.byteLength(body, "utf8")}\r
47
+ const payload = responseMode === "framed" ? `Content-Length: ${Buffer.byteLength(body, "utf8")}\r
46
48
  \r
47
- ${body}`);
48
- return;
49
- }
50
- output.write(`${body}
51
- `);
49
+ ${body}` : `${body}
50
+ `;
51
+ await writeChunk(output, payload);
52
+ }
53
+ function writeChunk(output, chunk) {
54
+ return new Promise((resolve, reject) => {
55
+ let settled = false;
56
+ const onError = (error) => {
57
+ if (settled)
58
+ return;
59
+ settled = true;
60
+ reject(error);
61
+ };
62
+ output.once("error", onError);
63
+ try {
64
+ output.write(chunk, (error) => {
65
+ if (settled)
66
+ return;
67
+ settled = true;
68
+ if (error) {
69
+ queueMicrotask(() => output.removeListener("error", onError));
70
+ reject(error);
71
+ return;
72
+ }
73
+ output.removeListener("error", onError);
74
+ resolve();
75
+ });
76
+ } catch (error) {
77
+ output.removeListener("error", onError);
78
+ if (settled)
79
+ return;
80
+ settled = true;
81
+ reject(error);
82
+ }
83
+ });
52
84
  }
53
85
  function readNextMessage(buffer) {
54
86
  if (buffer.length === 0)
@@ -144,40 +176,70 @@ async function runJsonRpcStdioServer(config) {
144
176
  break;
145
177
  idleTimer.arm();
146
178
  if (message.kind === "parse_error") {
147
- handleParseError(message, config, log);
179
+ if (!await handleParseError(message, config, log))
180
+ break;
148
181
  continue;
149
182
  }
150
- await handleRequest(message, config, log);
183
+ if (!await handleRequest(message, config, log))
184
+ break;
151
185
  }
152
186
  } finally {
153
187
  idleTimer.clear();
154
188
  log("stdio_stopped");
155
189
  }
156
190
  }
157
- function handleParseError(message, config, log) {
191
+ async function handleParseError(message, config, log) {
158
192
  log("parse_error", { message: message.message });
159
193
  const response = config.parseErrorResponse?.(message.message) ?? errorResponse(null, -32700, "Parse error", message.message);
160
- if (response !== undefined) {
161
- writeStdioJsonRpcResponse(config.output, response, message.responseMode);
162
- }
194
+ if (response === undefined)
195
+ return true;
196
+ return writeResponse(response, {
197
+ output: config.output,
198
+ responseMode: message.responseMode,
199
+ log
200
+ });
163
201
  }
164
202
  async function handleRequest(message, config, log) {
165
203
  const parsed = message.payload;
166
204
  const id = isPlainRecord(parsed) ? jsonRpcId(parsed["id"]) : null;
167
205
  const method = isPlainRecord(parsed) && typeof parsed["method"] === "string" ? parsed["method"] : null;
168
206
  log("request", { id: id === null ? null : String(id), method });
207
+ let response;
169
208
  try {
170
- const response = await config.handler(parsed, config.handlerOptions);
171
- if (response === undefined)
172
- return;
173
- writeStdioJsonRpcResponse(config.output, response, message.responseMode);
174
- log("response", { id: String(response.id), method, is_error: response.error !== undefined });
209
+ response = await config.handler(parsed, config.handlerOptions);
175
210
  } catch (error) {
176
211
  if (config.onHandlerError === undefined)
177
212
  throw error;
178
213
  config.onHandlerError(error);
214
+ return true;
215
+ }
216
+ if (response === undefined)
217
+ return true;
218
+ if (!await writeResponse(response, {
219
+ output: config.output,
220
+ responseMode: message.responseMode,
221
+ log
222
+ }))
223
+ return false;
224
+ log("response", { id: String(response.id), method, is_error: response.error !== undefined });
225
+ return true;
226
+ }
227
+ async function writeResponse(response, context) {
228
+ try {
229
+ await writeStdioJsonRpcResponse(context.output, response, context.responseMode);
230
+ return true;
231
+ } catch (error) {
232
+ if (!isTerminalOutputError(error))
233
+ throw error;
234
+ context.log("output_error", { message: messageFromError(error) });
235
+ return false;
179
236
  }
180
237
  }
238
+ function isTerminalOutputError(error) {
239
+ if (!(error instanceof Error) || !("code" in error))
240
+ return false;
241
+ return error.code === "EPIPE" || error.code === "ERR_STREAM_DESTROYED" || error.code === "ERR_STREAM_WRITE_AFTER_END";
242
+ }
181
243
  function createIdleTimer(idleTimeoutMs, log, onIdleTimeout) {
182
244
  let timer = null;
183
245
  let isClosed = false;