@jsonstudio/rcc 0.90.814 → 0.90.876

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 (221) hide show
  1. package/README.md +8 -0
  2. package/configsamples/provider-default/ali-coding-plan/config.v2.json +76 -0
  3. package/configsamples/provider-default/antigravity/config.v2.json +142 -0
  4. package/configsamples/provider-default/ark-coding-plan/config.v2.json +64 -0
  5. package/configsamples/provider-default/crs/config.v2.json +54 -0
  6. package/configsamples/provider-default/deepseek-web/config.v2.json +56 -0
  7. package/configsamples/provider-default/gemini/config.v2.json +43 -0
  8. package/configsamples/provider-default/gemini-cli/config.v2.json +45 -0
  9. package/configsamples/provider-default/gemini-native/config.v2.json +208 -0
  10. package/configsamples/provider-default/glm/config.v2.json +33 -0
  11. package/configsamples/provider-default/glm-anthropic/config.v2.json +29 -0
  12. package/configsamples/provider-default/kimi/config.v2.json +25 -0
  13. package/configsamples/provider-default/lmstudio/config.v2.json +79 -0
  14. package/configsamples/provider-default/lmstudio-proxy/config.v2.json +78 -0
  15. package/configsamples/provider-default/manifest.json +31 -0
  16. package/configsamples/provider-default/meituan/config.v2.json +20 -0
  17. package/configsamples/provider-default/mimo/config.v2.json +26 -0
  18. package/configsamples/provider-default/modelscope/config.v2.json +81 -0
  19. package/configsamples/provider-default/my-openai/config.v2.json +20 -0
  20. package/configsamples/provider-default/nvidia/config.v2.json +32 -0
  21. package/configsamples/provider-default/opencode-zen-free/config.v2.json +56 -0
  22. package/configsamples/provider-default/openrouter/config.v2.json +210 -0
  23. package/configsamples/provider-default/qwen/config.v2.json +38 -0
  24. package/configsamples/provider-default/qwenchat/config.v2.json +53 -0
  25. package/configsamples/provider-default/tab/config.v2.json +26 -0
  26. package/configsamples/provider-default/tabglm/config.v2.json +77 -0
  27. package/dist/build-info.js +2 -2
  28. package/dist/cli/commands/config.d.ts +5 -0
  29. package/dist/cli/commands/config.js +369 -1
  30. package/dist/cli/commands/config.js.map +1 -1
  31. package/dist/cli/commands/examples.js +3 -0
  32. package/dist/cli/commands/examples.js.map +1 -1
  33. package/dist/cli/commands/init.js +25 -1
  34. package/dist/cli/commands/init.js.map +1 -1
  35. package/dist/cli/commands/launcher-kernel.js +122 -46
  36. package/dist/cli/commands/launcher-kernel.js.map +1 -1
  37. package/dist/cli/commands/start.js +60 -3
  38. package/dist/cli/commands/start.js.map +1 -1
  39. package/dist/cli/config/bundled-provider-pack.d.ts +20 -0
  40. package/dist/cli/config/bundled-provider-pack.js +146 -0
  41. package/dist/cli/config/bundled-provider-pack.js.map +1 -0
  42. package/dist/cli/register/status-config-commands.d.ts +2 -0
  43. package/dist/cli/register/status-config-commands.js.map +1 -1
  44. package/dist/cli.js +81 -28
  45. package/dist/cli.js.map +1 -1
  46. package/dist/debug/snapshot-store.js +2 -1
  47. package/dist/debug/snapshot-store.js.map +1 -1
  48. package/dist/index.js +23 -14
  49. package/dist/index.js.map +1 -1
  50. package/dist/manager/modules/quota/provider-quota-daemon.model-backoff.js +1 -1
  51. package/dist/manager/modules/quota/provider-quota-daemon.model-backoff.js.map +1 -1
  52. package/dist/manager/quota/provider-quota-center.js +1 -1
  53. package/dist/manager/quota/provider-quota-center.js.map +1 -1
  54. package/dist/manager/storage/file-store.js +10 -0
  55. package/dist/manager/storage/file-store.js.map +1 -1
  56. package/dist/modules/llmswitch/bridge/snapshot-recorder-runtime.js +18 -1
  57. package/dist/modules/llmswitch/bridge/snapshot-recorder-runtime.js.map +1 -1
  58. package/dist/modules/llmswitch/bridge/snapshot-recorder.js +132 -51
  59. package/dist/modules/llmswitch/bridge/snapshot-recorder.js.map +1 -1
  60. package/dist/provider-sdk/provider-runtime-inference.js +2 -2
  61. package/dist/provider-sdk/provider-runtime-inference.js.map +1 -1
  62. package/dist/providers/auth/deepseek-account-token-acquirer.js +32 -3
  63. package/dist/providers/auth/deepseek-account-token-acquirer.js.map +1 -1
  64. package/dist/providers/core/api/provider-types.d.ts +11 -0
  65. package/dist/providers/core/config/service-profiles.js +1 -1
  66. package/dist/providers/core/runtime/deepseek-http-provider.d.ts +2 -0
  67. package/dist/providers/core/runtime/deepseek-http-provider.js +31 -1
  68. package/dist/providers/core/runtime/deepseek-http-provider.js.map +1 -1
  69. package/dist/providers/core/runtime/qwenchat-http-provider-helpers.d.ts +3 -2
  70. package/dist/providers/core/runtime/qwenchat-http-provider-helpers.js +513 -96
  71. package/dist/providers/core/runtime/qwenchat-http-provider-helpers.js.map +1 -1
  72. package/dist/providers/core/runtime/standard-tool-text-harvest.d.ts +8 -0
  73. package/dist/providers/core/runtime/standard-tool-text-harvest.js +24 -0
  74. package/dist/providers/core/runtime/standard-tool-text-harvest.js.map +1 -0
  75. package/dist/providers/core/runtime/standard-tool-text-request-transform.d.ts +4 -1
  76. package/dist/providers/core/runtime/standard-tool-text-request-transform.js +129 -3
  77. package/dist/providers/core/runtime/standard-tool-text-request-transform.js.map +1 -1
  78. package/dist/providers/core/utils/snapshot-writer.js +5 -2
  79. package/dist/providers/core/utils/snapshot-writer.js.map +1 -1
  80. package/dist/providers/profile/provider-profile-loader.js +52 -1
  81. package/dist/providers/profile/provider-profile-loader.js.map +1 -1
  82. package/dist/providers/profile/provider-profile.d.ts +3 -0
  83. package/dist/server/handlers/handler-response-utils.js +1 -0
  84. package/dist/server/handlers/handler-response-utils.js.map +1 -1
  85. package/dist/server/handlers/images-handler.d.ts +9 -0
  86. package/dist/server/handlers/images-handler.js +258 -0
  87. package/dist/server/handlers/images-handler.js.map +1 -0
  88. package/dist/server/handlers/types.d.ts +7 -0
  89. package/dist/server/runtime/http-server/antigravity-startup-tasks.d.ts +3 -0
  90. package/dist/server/runtime/http-server/antigravity-startup-tasks.js +16 -0
  91. package/dist/server/runtime/http-server/antigravity-startup-tasks.js.map +1 -1
  92. package/dist/server/runtime/http-server/daemon-admin/auth-handler.js +3 -18
  93. package/dist/server/runtime/http-server/daemon-admin/auth-handler.js.map +1 -1
  94. package/dist/server/runtime/http-server/daemon-admin/providers-handler-utils.d.ts +7 -0
  95. package/dist/server/runtime/http-server/daemon-admin/providers-handler-utils.js +17 -0
  96. package/dist/server/runtime/http-server/daemon-admin/providers-handler-utils.js.map +1 -1
  97. package/dist/server/runtime/http-server/daemon-admin/providers-handler.js +50 -17
  98. package/dist/server/runtime/http-server/daemon-admin/providers-handler.js.map +1 -1
  99. package/dist/server/runtime/http-server/daemon-admin-routes.js +32 -2
  100. package/dist/server/runtime/http-server/daemon-admin-routes.js.map +1 -1
  101. package/dist/server/runtime/http-server/executor/provider-response-converter.js +42 -13
  102. package/dist/server/runtime/http-server/executor/provider-response-converter.js.map +1 -1
  103. package/dist/server/runtime/http-server/executor/provider-response-utils.js +41 -3
  104. package/dist/server/runtime/http-server/executor/provider-response-utils.js.map +1 -1
  105. package/dist/server/runtime/http-server/executor/usage-aggregator.js +7 -7
  106. package/dist/server/runtime/http-server/executor/usage-aggregator.js.map +1 -1
  107. package/dist/server/runtime/http-server/executor/usage-logger.d.ts +9 -0
  108. package/dist/server/runtime/http-server/executor/usage-logger.js +35 -2
  109. package/dist/server/runtime/http-server/executor/usage-logger.js.map +1 -1
  110. package/dist/server/runtime/http-server/executor-metadata.js +12 -4
  111. package/dist/server/runtime/http-server/executor-metadata.js.map +1 -1
  112. package/dist/server/runtime/http-server/executor-pipeline.js +24 -15
  113. package/dist/server/runtime/http-server/executor-pipeline.js.map +1 -1
  114. package/dist/server/runtime/http-server/executor-provider.d.ts +6 -1
  115. package/dist/server/runtime/http-server/executor-provider.js +137 -5
  116. package/dist/server/runtime/http-server/executor-provider.js.map +1 -1
  117. package/dist/server/runtime/http-server/http-server-bootstrap.js +6 -0
  118. package/dist/server/runtime/http-server/http-server-bootstrap.js.map +1 -1
  119. package/dist/server/runtime/http-server/http-server-lifecycle.js +23 -15
  120. package/dist/server/runtime/http-server/http-server-lifecycle.js.map +1 -1
  121. package/dist/server/runtime/http-server/http-server-runtime-providers.js +14 -4
  122. package/dist/server/runtime/http-server/http-server-runtime-providers.js.map +1 -1
  123. package/dist/server/runtime/http-server/http-server-runtime-setup.js +83 -1
  124. package/dist/server/runtime/http-server/http-server-runtime-setup.js.map +1 -1
  125. package/dist/server/runtime/http-server/hub-shadow-compare.js +2 -41
  126. package/dist/server/runtime/http-server/hub-shadow-compare.js.map +1 -1
  127. package/dist/server/runtime/http-server/provider-routing-scope.d.ts +9 -0
  128. package/dist/server/runtime/http-server/provider-routing-scope.js +20 -0
  129. package/dist/server/runtime/http-server/provider-routing-scope.js.map +1 -0
  130. package/dist/server/runtime/http-server/provider-traffic-governor.d.ts +67 -0
  131. package/dist/server/runtime/http-server/provider-traffic-governor.js +467 -0
  132. package/dist/server/runtime/http-server/provider-traffic-governor.js.map +1 -0
  133. package/dist/server/runtime/http-server/request-executor.d.ts +8 -0
  134. package/dist/server/runtime/http-server/request-executor.js +446 -21
  135. package/dist/server/runtime/http-server/request-executor.js.map +1 -1
  136. package/dist/server/runtime/http-server/routes.js +13 -0
  137. package/dist/server/runtime/http-server/routes.js.map +1 -1
  138. package/dist/server/runtime/http-server/session-client-registry.js +30 -4
  139. package/dist/server/runtime/http-server/session-client-registry.js.map +1 -1
  140. package/dist/server/runtime/http-server/session-client-route-utils.d.ts +7 -0
  141. package/dist/server/runtime/http-server/session-client-route-utils.js +38 -0
  142. package/dist/server/runtime/http-server/session-client-route-utils.js.map +1 -1
  143. package/dist/server/runtime/http-server/session-client-routes.js +12 -2
  144. package/dist/server/runtime/http-server/session-client-routes.js.map +1 -1
  145. package/dist/server/utils/request-id-manager.js +42 -5
  146. package/dist/server/utils/request-id-manager.js.map +1 -1
  147. package/dist/server/utils/stage-logger.d.ts +1 -0
  148. package/dist/server/utils/stage-logger.js +27 -0
  149. package/dist/server/utils/stage-logger.js.map +1 -1
  150. package/dist/utils/errorsamples.js +3 -1
  151. package/dist/utils/errorsamples.js.map +1 -1
  152. package/dist/utils/sensitive-redaction.d.ts +1 -0
  153. package/dist/utils/sensitive-redaction.js +122 -0
  154. package/dist/utils/sensitive-redaction.js.map +1 -0
  155. package/dist/utils/snapshot-writer.js +162 -2
  156. package/dist/utils/snapshot-writer.js.map +1 -1
  157. package/docs/INSTALLATION_AND_QUICKSTART.md +14 -1
  158. package/docs/PORTS.md +12 -0
  159. package/docs/lmstudio-tool-calling.md +25 -0
  160. package/node_modules/@jsonstudio/llms/dist/conversion/compat/actions/qwenchat-web-request.d.ts +3 -0
  161. package/node_modules/@jsonstudio/llms/dist/conversion/compat/actions/qwenchat-web-request.js +62 -0
  162. package/node_modules/@jsonstudio/llms/dist/conversion/compat/profiles/chat-qwenchat-web.json +47 -0
  163. package/node_modules/@jsonstudio/llms/dist/conversion/hub/node-support.js +5 -2
  164. package/node_modules/@jsonstudio/llms/dist/conversion/hub/operation-table/operation-table-runner.js +68 -7
  165. package/node_modules/@jsonstudio/llms/dist/conversion/hub/operation-table/semantic-mappers/anthropic-mapper-from-chat.js +138 -3
  166. package/node_modules/@jsonstudio/llms/dist/conversion/hub/pipeline/hub-pipeline-chat-process-request-utils.js +24 -0
  167. package/node_modules/@jsonstudio/llms/dist/conversion/hub/pipeline/hub-pipeline-execute-chat-process-entry.js +7 -1
  168. package/node_modules/@jsonstudio/llms/dist/conversion/hub/pipeline/hub-pipeline-execute-request-stage.js +7 -0
  169. package/node_modules/@jsonstudio/llms/dist/conversion/hub/pipeline/hub-pipeline-heavy-input-fastpath.d.ts +24 -0
  170. package/node_modules/@jsonstudio/llms/dist/conversion/hub/pipeline/hub-pipeline-heavy-input-fastpath.js +203 -0
  171. package/node_modules/@jsonstudio/llms/dist/conversion/hub/pipeline/hub-pipeline-route-and-outbound.js +17 -12
  172. package/node_modules/@jsonstudio/llms/dist/conversion/hub/pipeline/hub-stage-timing.d.ts +11 -0
  173. package/node_modules/@jsonstudio/llms/dist/conversion/hub/pipeline/hub-stage-timing.js +82 -1
  174. package/node_modules/@jsonstudio/llms/dist/conversion/hub/pipeline/stages/req_inbound/req_inbound_stage2_semantic_map/index.js +47 -14
  175. package/node_modules/@jsonstudio/llms/dist/conversion/hub/pipeline/stages/req_outbound/req_outbound_stage1_semantic_map/index.js +43 -0
  176. package/node_modules/@jsonstudio/llms/dist/conversion/hub/pipeline/stages/resp_outbound/resp_outbound_stage1_client_remap/client-remap-protocol-switch.js +222 -19
  177. package/node_modules/@jsonstudio/llms/dist/conversion/hub/policy/policy-engine.js +2 -2
  178. package/node_modules/@jsonstudio/llms/dist/conversion/hub/process/chat-process-pending-tool-sync.js +24 -7
  179. package/node_modules/@jsonstudio/llms/dist/conversion/hub/response/provider-response.js +90 -1
  180. package/node_modules/@jsonstudio/llms/dist/conversion/hub/snapshot-recorder.d.ts +1 -0
  181. package/node_modules/@jsonstudio/llms/dist/conversion/hub/snapshot-recorder.js +252 -1
  182. package/node_modules/@jsonstudio/llms/dist/conversion/responses/responses-openai-bridge/utils.js +5 -3
  183. package/node_modules/@jsonstudio/llms/dist/conversion/responses/responses-openai-bridge.js +44 -4
  184. package/node_modules/@jsonstudio/llms/dist/conversion/shared/anthropic-message-utils-openai-request.d.ts +3 -1
  185. package/node_modules/@jsonstudio/llms/dist/conversion/shared/anthropic-message-utils-openai-request.js +20 -23
  186. package/node_modules/@jsonstudio/llms/dist/conversion/shared/tool-governor.js +68 -30
  187. package/node_modules/@jsonstudio/llms/dist/conversion/snapshot-utils.js +194 -10
  188. package/node_modules/@jsonstudio/llms/dist/native/router_hotpath_napi.node +0 -0
  189. package/node_modules/@jsonstudio/llms/dist/quota/quota-state.js +2 -2
  190. package/node_modules/@jsonstudio/llms/dist/router/virtual-router/engine/routing-state/store.js +35 -2
  191. package/node_modules/@jsonstudio/llms/dist/router/virtual-router/engine.js +9 -9
  192. package/node_modules/@jsonstudio/llms/dist/router/virtual-router/sticky-session-store.js +104 -18
  193. package/node_modules/@jsonstudio/llms/dist/servertool/engine.js +79 -32
  194. package/node_modules/@jsonstudio/llms/dist/servertool/handlers/vision.js +49 -0
  195. package/node_modules/@jsonstudio/llms/dist/servertool/pending-session.js +48 -2
  196. package/node_modules/@jsonstudio/llms/dist/servertool/server-side-tools.js +14 -1
  197. package/node_modules/@jsonstudio/llms/dist/servertool/types.d.ts +1 -0
  198. package/node_modules/@jsonstudio/llms/package.json +1 -1
  199. package/node_modules/ajv/dist/compile/jtd/serialize.js +9 -2
  200. package/node_modules/ajv/dist/compile/jtd/serialize.js.map +1 -1
  201. package/node_modules/ajv/dist/core.d.ts +1 -0
  202. package/node_modules/ajv/dist/core.js.map +1 -1
  203. package/node_modules/ajv/dist/vocabularies/validation/pattern.js +13 -4
  204. package/node_modules/ajv/dist/vocabularies/validation/pattern.js.map +1 -1
  205. package/node_modules/ajv/lib/compile/jtd/serialize.ts +13 -2
  206. package/node_modules/ajv/lib/core.ts +1 -0
  207. package/node_modules/ajv/lib/vocabularies/validation/pattern.ts +15 -4
  208. package/node_modules/ajv/package.json +2 -1
  209. package/package.json +15 -10
  210. package/scripts/ci/repo-sanity.mjs +23 -2
  211. package/scripts/ci/secrets-check.mjs +48 -0
  212. package/scripts/ci/silent-failure-audit.mjs +192 -0
  213. package/scripts/mock-provider/run-regressions.mjs +1 -0
  214. package/scripts/monitor/memory-guard.mjs +207 -0
  215. package/scripts/pack-mode.mjs +32 -36
  216. package/scripts/publish-rcc.mjs +38 -60
  217. package/scripts/tests/apply-patch-loop.mjs +1 -0
  218. package/scripts/tests/blackbox-rcc-vs-routecodex-antigravity.mjs +2 -0
  219. package/scripts/tools-dev/responses-debug-client/src/index.ts +8 -3
  220. package/scripts/verify-e2e-toolcall.mjs +1 -0
  221. package/scripts/verify-install-e2e.mjs +2 -1
@@ -50,6 +50,18 @@ function resolveExitGracePeriodMs(env) {
50
50
  }
51
51
  return Math.floor(parsed);
52
52
  }
53
+ function logLauncherNonBlocking(stage, error, details) {
54
+ const message = error instanceof Error ? error.message : String(error ?? 'unknown');
55
+ logProcessLifecycle({
56
+ event: 'launcher_non_blocking_error',
57
+ source: 'cli.launcher.kernel',
58
+ details: {
59
+ stage,
60
+ message,
61
+ ...(details ?? {})
62
+ }
63
+ });
64
+ }
53
65
  function resolveLauncherConfigPath(ctx, fsImpl, pathImpl, options) {
54
66
  let configPath = typeof options.config === 'string' && options.config.trim() ? options.config.trim() : '';
55
67
  if (!configPath) {
@@ -107,7 +119,8 @@ function readProcessPpidAndCommand(pid) {
107
119
  command: match[2] || ''
108
120
  };
109
121
  }
110
- catch {
122
+ catch (error) {
123
+ logLauncherNonBlocking('read_process_ppid_and_command', error, { pid });
111
124
  return { ppid: null, command: '' };
112
125
  }
113
126
  }
@@ -230,7 +243,8 @@ async function checkServerReady(ctx, serverUrl, apiKey, timeoutMs = 2500) {
230
243
  }
231
244
  }
232
245
  }
233
- catch {
246
+ catch (error) {
247
+ logLauncherNonBlocking('check_server_ready_probe_target', error, { target, attempt });
234
248
  // try next target
235
249
  }
236
250
  }
@@ -260,7 +274,8 @@ function resolveServerProbeTargets(serverUrl) {
260
274
  pushTarget(loopback.toString());
261
275
  }
262
276
  }
263
- catch {
277
+ catch (error) {
278
+ logLauncherNonBlocking('resolve_server_probe_targets_parse_url', error, { serverUrl });
264
279
  // ignore invalid URL parse; keep original
265
280
  }
266
281
  return out;
@@ -273,11 +288,17 @@ async function probeServerState(ctx, url, headers, timeoutMs) {
273
288
  signal: controller.signal,
274
289
  method: 'GET',
275
290
  headers
276
- }).catch(() => null);
291
+ }).catch((error) => {
292
+ logLauncherNonBlocking('probe_server_state_fetch', error, { url });
293
+ return null;
294
+ });
277
295
  if (!response || !response.ok) {
278
296
  return { ok: false, body: null };
279
297
  }
280
- const body = await response.json().catch(() => null);
298
+ const body = await response.json().catch((error) => {
299
+ logLauncherNonBlocking('probe_server_state_parse_json', error, { url });
300
+ return null;
301
+ });
281
302
  return { ok: true, body };
282
303
  }
283
304
  finally {
@@ -304,7 +325,8 @@ function rotateLogFile(fsImpl, filePath, maxBytes = 8 * 1024 * 1024, maxBackups
304
325
  fsImpl.renameSync(from, to);
305
326
  }
306
327
  }
307
- catch {
328
+ catch (error) {
329
+ logLauncherNonBlocking('rotate_log_file_rotate_backup', error, { from, to });
308
330
  // ignore
309
331
  }
310
332
  }
@@ -313,13 +335,15 @@ function rotateLogFile(fsImpl, filePath, maxBytes = 8 * 1024 * 1024, maxBackups
313
335
  try {
314
336
  fsImpl.unlinkSync(firstBackup);
315
337
  }
316
- catch {
338
+ catch (error) {
339
+ logLauncherNonBlocking('rotate_log_file_remove_first_backup', error, { firstBackup });
317
340
  // ignore
318
341
  }
319
342
  }
320
343
  fsImpl.renameSync(filePath, firstBackup);
321
344
  }
322
- catch {
345
+ catch (error) {
346
+ logLauncherNonBlocking('rotate_log_file', error, { filePath });
323
347
  // ignore rotation failures
324
348
  }
325
349
  }
@@ -421,7 +445,8 @@ async function ensureServerReady(ctx, fsImpl, pathImpl, spinner, options, resolv
421
445
  try {
422
446
  serverProcess.unref?.();
423
447
  }
424
- catch {
448
+ catch (error) {
449
+ logLauncherNonBlocking('ensure_server_ready_unref_child', error, { port: resolved.port, logPath });
425
450
  // ignore
426
451
  }
427
452
  }
@@ -446,7 +471,8 @@ async function ensureServerReady(ctx, fsImpl, pathImpl, spinner, options, resolv
446
471
  try {
447
472
  fsImpl.closeSync(logFd);
448
473
  }
449
- catch {
474
+ catch (error) {
475
+ logLauncherNonBlocking('ensure_server_ready_close_log_fd', error, { port: resolved.port, logPath });
450
476
  // ignore
451
477
  }
452
478
  }
@@ -487,7 +513,8 @@ function resolveWorkingDirectory(ctx, fsImpl, pathImpl, requested) {
487
513
  try {
488
514
  return pathImpl.resolve(getCwd());
489
515
  }
490
- catch {
516
+ catch (error) {
517
+ logLauncherNonBlocking('resolve_working_directory_primary_cwd', error);
491
518
  // Fallback for cases like: EPERM: operation not permitted, uv_cwd
492
519
  // (current shell directory deleted/inaccessible).
493
520
  const fallbackCandidates = [
@@ -496,7 +523,8 @@ function resolveWorkingDirectory(ctx, fsImpl, pathImpl, requested) {
496
523
  try {
497
524
  return ctx.homedir();
498
525
  }
499
- catch {
526
+ catch (error) {
527
+ logLauncherNonBlocking('resolve_working_directory_homedir_candidate', error);
500
528
  return '';
501
529
  }
502
530
  })(),
@@ -512,7 +540,8 @@ function resolveWorkingDirectory(ctx, fsImpl, pathImpl, requested) {
512
540
  return resolved;
513
541
  }
514
542
  }
515
- catch {
543
+ catch (error) {
544
+ logLauncherNonBlocking('resolve_working_directory_candidate', error, { candidate });
516
545
  // try next fallback
517
546
  }
518
547
  }
@@ -524,7 +553,8 @@ function isTmuxAvailable(spawnSyncImpl = spawnSync) {
524
553
  const result = spawnSyncImpl('tmux', ['-V'], { encoding: 'utf8' });
525
554
  return result.status === 0;
526
555
  }
527
- catch {
556
+ catch (error) {
557
+ logLauncherNonBlocking('is_tmux_available', error);
528
558
  return false;
529
559
  }
530
560
  }
@@ -541,7 +571,8 @@ function resolveCurrentTmuxTarget(env, spawnSyncImpl = spawnSync) {
541
571
  const target = String(result.stdout || '').trim();
542
572
  return target || null;
543
573
  }
544
- catch {
574
+ catch (error) {
575
+ logLauncherNonBlocking('resolve_current_tmux_target', error);
545
576
  return null;
546
577
  }
547
578
  }
@@ -582,7 +613,8 @@ function isReusableTmuxPaneTarget(spawnSyncImpl, tmuxTarget, cwd) {
582
613
  const normalizedPanePath = normalizePathForComparison(String(panePath || '').trim());
583
614
  return isReusableIdlePaneCommand(String(command || '').trim()) && normalizedPanePath === expectedCwd;
584
615
  }
585
- catch {
616
+ catch (error) {
617
+ logLauncherNonBlocking('is_reusable_tmux_pane_target', error, { tmuxTarget: normalizedTarget });
586
618
  return false;
587
619
  }
588
620
  }
@@ -675,7 +707,8 @@ function normalizePathForComparison(candidate) {
675
707
  }
676
708
  return resolved;
677
709
  }
678
- catch {
710
+ catch (error) {
711
+ logLauncherNonBlocking('normalize_path_for_comparison', error, { candidate: raw });
679
712
  return raw;
680
713
  }
681
714
  }
@@ -686,7 +719,8 @@ function resolveManagedTmuxSessionBaseName(cwd) {
686
719
  const resolved = path.resolve(rawCwd || '.').replace(/[\\/]+$/, '');
687
720
  baseCandidate = path.basename(resolved);
688
721
  }
689
- catch {
722
+ catch (error) {
723
+ logLauncherNonBlocking('resolve_managed_tmux_session_base_name', error, { cwd: rawCwd });
690
724
  baseCandidate = rawCwd;
691
725
  }
692
726
  const normalizedBase = normalizeSessionToken(baseCandidate)
@@ -703,7 +737,8 @@ function tmuxSessionExists(spawnSyncImpl, sessionName) {
703
737
  const result = spawnSyncImpl('tmux', ['has-session', '-t', sessionName], { encoding: 'utf8' });
704
738
  return result.status === 0;
705
739
  }
706
- catch {
740
+ catch (error) {
741
+ logLauncherNonBlocking('tmux_session_exists', error, { sessionName });
707
742
  return false;
708
743
  }
709
744
  }
@@ -725,25 +760,29 @@ function requestManagedTmuxSessionExit(spawnSyncImpl, sessionName) {
725
760
  try {
726
761
  spawnSyncImpl('tmux', ['send-keys', '-t', target, '-X', 'cancel'], { encoding: 'utf8' });
727
762
  }
728
- catch {
763
+ catch (error) {
764
+ logLauncherNonBlocking('request_managed_tmux_session_exit_cancel', error, { sessionName: target });
729
765
  // ignore
730
766
  }
731
767
  try {
732
768
  spawnSyncImpl('tmux', ['send-keys', '-t', target, 'C-c'], { encoding: 'utf8' });
733
769
  }
734
- catch {
770
+ catch (error) {
771
+ logLauncherNonBlocking('request_managed_tmux_session_exit_ctrl_c', error, { sessionName: target });
735
772
  // ignore
736
773
  }
737
774
  try {
738
775
  spawnSyncImpl('tmux', ['send-keys', '-t', target, '-l', '--', 'exit'], { encoding: 'utf8' });
739
776
  }
740
- catch {
777
+ catch (error) {
778
+ logLauncherNonBlocking('request_managed_tmux_session_exit_literal_exit', error, { sessionName: target });
741
779
  // ignore
742
780
  }
743
781
  try {
744
782
  sendTmuxSubmitKey(spawnSyncImpl, target);
745
783
  }
746
- catch {
784
+ catch (error) {
785
+ logLauncherNonBlocking('request_managed_tmux_session_exit_submit', error, { sessionName: target });
747
786
  // ignore
748
787
  }
749
788
  }
@@ -761,7 +800,8 @@ function createManagedTmuxSession(args) {
761
800
  continue;
762
801
  }
763
802
  }
764
- catch {
803
+ catch (error) {
804
+ logLauncherNonBlocking('create_managed_tmux_session_new_session', error, { sessionName });
765
805
  continue;
766
806
  }
767
807
  const tmuxTarget = `${sessionName}:0.0`;
@@ -771,7 +811,8 @@ function createManagedTmuxSession(args) {
771
811
  encoding: 'utf8'
772
812
  });
773
813
  }
774
- catch {
814
+ catch (error) {
815
+ logLauncherNonBlocking('create_managed_tmux_session_tune_default_terminal', error, { sessionName });
775
816
  // best-effort only
776
817
  }
777
818
  try {
@@ -779,7 +820,8 @@ function createManagedTmuxSession(args) {
779
820
  encoding: 'utf8'
780
821
  });
781
822
  }
782
- catch {
823
+ catch (error) {
824
+ logLauncherNonBlocking('create_managed_tmux_session_tune_terminal_features', error, { sessionName });
783
825
  // best-effort only
784
826
  }
785
827
  }
@@ -790,7 +832,8 @@ function createManagedTmuxSession(args) {
790
832
  // summaries readable (Codex styles reasoning as dim+italic).
791
833
  spawnSyncImpl('tmux', ['set-option', '-t', sessionName, '-ga', 'terminal-overrides', ',*:sitm@:ritm@'], { encoding: 'utf8' });
792
834
  }
793
- catch {
835
+ catch (error) {
836
+ logLauncherNonBlocking('create_managed_tmux_session_disable_italic', error, { sessionName });
794
837
  // best-effort only
795
838
  }
796
839
  }
@@ -800,7 +843,8 @@ function createManagedTmuxSession(args) {
800
843
  // Disable standout-related capabilities for managed codex sessions when requested.
801
844
  spawnSyncImpl('tmux', ['set-option', '-t', sessionName, '-ga', 'terminal-overrides', ',*:smso@:rmso@:rev@'], { encoding: 'utf8' });
802
845
  }
803
- catch {
846
+ catch (error) {
847
+ logLauncherNonBlocking('create_managed_tmux_session_disable_standout', error, { sessionName });
804
848
  // best-effort only
805
849
  }
806
850
  }
@@ -863,7 +907,8 @@ function launchCommandInTmuxPane(args) {
863
907
  return true;
864
908
  }
865
909
  }
866
- catch {
910
+ catch (error) {
911
+ logLauncherNonBlocking('launch_command_in_tmux_pane_respawn', error, { tmuxTarget });
867
912
  // fallback to send-keys injection
868
913
  }
869
914
  try {
@@ -879,7 +924,8 @@ function launchCommandInTmuxPane(args) {
879
924
  const submit = sendTmuxSubmitKey(spawnSyncImpl, tmuxTarget, commandName);
880
925
  return submit.ok;
881
926
  }
882
- catch {
927
+ catch (error) {
928
+ logLauncherNonBlocking('launch_command_in_tmux_pane_send_keys', error, { tmuxTarget });
883
929
  return false;
884
930
  }
885
931
  }
@@ -898,7 +944,8 @@ function readJsonBody(req) {
898
944
  const payload = JSON.parse(Buffer.concat(chunks).toString('utf8'));
899
945
  resolve(payload && typeof payload === 'object' && !Array.isArray(payload) ? payload : {});
900
946
  }
901
- catch {
947
+ catch (error) {
948
+ logLauncherNonBlocking('read_json_body_parse', error);
902
949
  resolve({});
903
950
  }
904
951
  });
@@ -926,7 +973,8 @@ async function startSessionClientService(args) {
926
973
  try {
927
974
  return `sessiond_${crypto.randomUUID()}`;
928
975
  }
929
- catch {
976
+ catch (error) {
977
+ logLauncherNonBlocking('start_session_client_service_daemon_id', error);
930
978
  return `sessiond_${Date.now()}_${Math.random().toString(16).slice(2)}`;
931
979
  }
932
980
  })();
@@ -991,12 +1039,16 @@ async function startSessionClientService(args) {
991
1039
  }
992
1040
  resolve(address.port);
993
1041
  });
994
- }).catch(() => 0);
1042
+ }).catch((error) => {
1043
+ logLauncherNonBlocking('start_session_client_service_listen', error);
1044
+ return 0;
1045
+ });
995
1046
  if (!port) {
996
1047
  try {
997
1048
  server.close();
998
1049
  }
999
- catch {
1050
+ catch (error) {
1051
+ logLauncherNonBlocking('start_session_client_service_close_on_port_failure', error, { daemonId });
1000
1052
  // ignore
1001
1053
  }
1002
1054
  return null;
@@ -1030,7 +1082,11 @@ async function startSessionClientService(args) {
1030
1082
  try {
1031
1083
  abortController.abort();
1032
1084
  }
1033
- catch {
1085
+ catch (error) {
1086
+ logLauncherNonBlocking('start_session_client_service_abort_control_request', error, {
1087
+ daemonId,
1088
+ pathSuffix
1089
+ });
1034
1090
  // ignore abort failures
1035
1091
  }
1036
1092
  }, controlRequestTimeoutMs)
@@ -1050,7 +1106,11 @@ async function startSessionClientService(args) {
1050
1106
  });
1051
1107
  return { ok: response.ok, status: response.status };
1052
1108
  }
1053
- catch {
1109
+ catch (error) {
1110
+ logLauncherNonBlocking('start_session_client_service_post', error, {
1111
+ daemonId,
1112
+ pathSuffix
1113
+ });
1054
1114
  return { ok: false, status: 0 };
1055
1115
  }
1056
1116
  finally {
@@ -1119,7 +1179,8 @@ async function startSessionClientService(args) {
1119
1179
  try {
1120
1180
  server.close();
1121
1181
  }
1122
- catch {
1182
+ catch (error) {
1183
+ logLauncherNonBlocking('start_session_client_service_close_on_register_failure', error, { daemonId });
1123
1184
  // ignore
1124
1185
  }
1125
1186
  }
@@ -1144,7 +1205,8 @@ async function startSessionClientService(args) {
1144
1205
  try {
1145
1206
  server?.close(() => resolve());
1146
1207
  }
1147
- catch {
1208
+ catch (error) {
1209
+ logLauncherNonBlocking('start_session_client_service_stop_close', error, { daemonId });
1148
1210
  resolve();
1149
1211
  }
1150
1212
  });
@@ -1391,7 +1453,8 @@ export function createLauncherCommand(program, ctx, spec) {
1391
1453
  `daemon=${parsedDaemonId} tmux=${parsedTmuxSessionId} tmuxTarget=${tmuxTarget || 'none'}` +
1392
1454
  (verbose ? ` managedTmux=${managedTmuxSession ? 'yes' : 'no'} serverStarted=${ensureResult?.started ? 'yes' : 'no'}` : ''));
1393
1455
  }
1394
- catch {
1456
+ catch (error) {
1457
+ logLauncherNonBlocking('session_scope_trace_launch', error, { commandName: spec.commandName });
1395
1458
  // best-effort diagnostics only
1396
1459
  }
1397
1460
  }
@@ -1567,7 +1630,10 @@ export function createLauncherCommand(program, ctx, spec) {
1567
1630
  try {
1568
1631
  await sessionClientService?.stop();
1569
1632
  }
1570
- catch {
1633
+ catch (error) {
1634
+ logLauncherNonBlocking('finalize_tool_termination_stop_session_client_service', error, {
1635
+ commandName: spec.commandName
1636
+ });
1571
1637
  // ignore
1572
1638
  }
1573
1639
  try {
@@ -1575,7 +1641,10 @@ export function createLauncherCommand(program, ctx, spec) {
1575
1641
  managedTmuxSession.stop();
1576
1642
  }
1577
1643
  }
1578
- catch {
1644
+ catch (error) {
1645
+ logLauncherNonBlocking('finalize_tool_termination_stop_managed_tmux', error, {
1646
+ commandName: spec.commandName
1647
+ });
1579
1648
  // ignore
1580
1649
  }
1581
1650
  try {
@@ -1585,7 +1654,10 @@ export function createLauncherCommand(program, ctx, spec) {
1585
1654
  targetPid: toolProcess.pid ?? null
1586
1655
  });
1587
1656
  }
1588
- catch {
1657
+ catch (error) {
1658
+ logLauncherNonBlocking('finalize_tool_termination_report_lifecycle', error, {
1659
+ commandName: spec.commandName
1660
+ });
1589
1661
  // ignore lifecycle logging errors in exit path
1590
1662
  }
1591
1663
  const forcedExitCode = options?.forceExitCode;
@@ -1644,7 +1716,8 @@ export function createLauncherCommand(program, ctx, spec) {
1644
1716
  try {
1645
1717
  ctx.logger.error(error instanceof Error ? error.message : String(error));
1646
1718
  }
1647
- catch {
1719
+ catch (error) {
1720
+ logLauncherNonBlocking('shutdown_log_lifecycle_error', error, { commandName: spec.commandName, signal });
1648
1721
  // ignore
1649
1722
  }
1650
1723
  }
@@ -1653,7 +1726,8 @@ export function createLauncherCommand(program, ctx, spec) {
1653
1726
  managedTmuxSession.stop();
1654
1727
  }
1655
1728
  }
1656
- catch {
1729
+ catch (error) {
1730
+ logLauncherNonBlocking('shutdown_stop_managed_tmux', error, { commandName: spec.commandName, signal });
1657
1731
  // ignore
1658
1732
  }
1659
1733
  };
@@ -1669,7 +1743,8 @@ export function createLauncherCommand(program, ctx, spec) {
1669
1743
  try {
1670
1744
  ctx.logger.error(`Failed to launch ${spec.displayName} (${resolvedBinary}): ${error instanceof Error ? error.message : String(error)}`);
1671
1745
  }
1672
- catch {
1746
+ catch (innerError) {
1747
+ logLauncherNonBlocking('tool_process_error_log_to_logger', innerError, { commandName: spec.commandName });
1673
1748
  // ignore
1674
1749
  }
1675
1750
  try {
@@ -1678,7 +1753,8 @@ export function createLauncherCommand(program, ctx, spec) {
1678
1753
  targetPid: toolProcess.pid ?? null
1679
1754
  });
1680
1755
  }
1681
- catch {
1756
+ catch (innerError) {
1757
+ logLauncherNonBlocking('tool_process_error_report_lifecycle', innerError, { commandName: spec.commandName });
1682
1758
  // ignore lifecycle logging errors for terminal error path
1683
1759
  }
1684
1760
  await finalizeToolTermination({ forceExitCode: 1 });