@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.
- package/README.md +8 -0
- package/configsamples/provider-default/ali-coding-plan/config.v2.json +76 -0
- package/configsamples/provider-default/antigravity/config.v2.json +142 -0
- package/configsamples/provider-default/ark-coding-plan/config.v2.json +64 -0
- package/configsamples/provider-default/crs/config.v2.json +54 -0
- package/configsamples/provider-default/deepseek-web/config.v2.json +56 -0
- package/configsamples/provider-default/gemini/config.v2.json +43 -0
- package/configsamples/provider-default/gemini-cli/config.v2.json +45 -0
- package/configsamples/provider-default/gemini-native/config.v2.json +208 -0
- package/configsamples/provider-default/glm/config.v2.json +33 -0
- package/configsamples/provider-default/glm-anthropic/config.v2.json +29 -0
- package/configsamples/provider-default/kimi/config.v2.json +25 -0
- package/configsamples/provider-default/lmstudio/config.v2.json +79 -0
- package/configsamples/provider-default/lmstudio-proxy/config.v2.json +78 -0
- package/configsamples/provider-default/manifest.json +31 -0
- package/configsamples/provider-default/meituan/config.v2.json +20 -0
- package/configsamples/provider-default/mimo/config.v2.json +26 -0
- package/configsamples/provider-default/modelscope/config.v2.json +81 -0
- package/configsamples/provider-default/my-openai/config.v2.json +20 -0
- package/configsamples/provider-default/nvidia/config.v2.json +32 -0
- package/configsamples/provider-default/opencode-zen-free/config.v2.json +56 -0
- package/configsamples/provider-default/openrouter/config.v2.json +210 -0
- package/configsamples/provider-default/qwen/config.v2.json +38 -0
- package/configsamples/provider-default/qwenchat/config.v2.json +53 -0
- package/configsamples/provider-default/tab/config.v2.json +26 -0
- package/configsamples/provider-default/tabglm/config.v2.json +77 -0
- package/dist/build-info.js +2 -2
- package/dist/cli/commands/config.d.ts +5 -0
- package/dist/cli/commands/config.js +369 -1
- package/dist/cli/commands/config.js.map +1 -1
- package/dist/cli/commands/examples.js +3 -0
- package/dist/cli/commands/examples.js.map +1 -1
- package/dist/cli/commands/init.js +25 -1
- package/dist/cli/commands/init.js.map +1 -1
- package/dist/cli/commands/launcher-kernel.js +122 -46
- package/dist/cli/commands/launcher-kernel.js.map +1 -1
- package/dist/cli/commands/start.js +60 -3
- package/dist/cli/commands/start.js.map +1 -1
- package/dist/cli/config/bundled-provider-pack.d.ts +20 -0
- package/dist/cli/config/bundled-provider-pack.js +146 -0
- package/dist/cli/config/bundled-provider-pack.js.map +1 -0
- package/dist/cli/register/status-config-commands.d.ts +2 -0
- package/dist/cli/register/status-config-commands.js.map +1 -1
- package/dist/cli.js +81 -28
- package/dist/cli.js.map +1 -1
- package/dist/debug/snapshot-store.js +2 -1
- package/dist/debug/snapshot-store.js.map +1 -1
- package/dist/index.js +23 -14
- package/dist/index.js.map +1 -1
- package/dist/manager/modules/quota/provider-quota-daemon.model-backoff.js +1 -1
- package/dist/manager/modules/quota/provider-quota-daemon.model-backoff.js.map +1 -1
- package/dist/manager/quota/provider-quota-center.js +1 -1
- package/dist/manager/quota/provider-quota-center.js.map +1 -1
- package/dist/manager/storage/file-store.js +10 -0
- package/dist/manager/storage/file-store.js.map +1 -1
- package/dist/modules/llmswitch/bridge/snapshot-recorder-runtime.js +18 -1
- package/dist/modules/llmswitch/bridge/snapshot-recorder-runtime.js.map +1 -1
- package/dist/modules/llmswitch/bridge/snapshot-recorder.js +132 -51
- package/dist/modules/llmswitch/bridge/snapshot-recorder.js.map +1 -1
- package/dist/provider-sdk/provider-runtime-inference.js +2 -2
- package/dist/provider-sdk/provider-runtime-inference.js.map +1 -1
- package/dist/providers/auth/deepseek-account-token-acquirer.js +32 -3
- package/dist/providers/auth/deepseek-account-token-acquirer.js.map +1 -1
- package/dist/providers/core/api/provider-types.d.ts +11 -0
- package/dist/providers/core/config/service-profiles.js +1 -1
- package/dist/providers/core/runtime/deepseek-http-provider.d.ts +2 -0
- package/dist/providers/core/runtime/deepseek-http-provider.js +31 -1
- package/dist/providers/core/runtime/deepseek-http-provider.js.map +1 -1
- package/dist/providers/core/runtime/qwenchat-http-provider-helpers.d.ts +3 -2
- package/dist/providers/core/runtime/qwenchat-http-provider-helpers.js +513 -96
- package/dist/providers/core/runtime/qwenchat-http-provider-helpers.js.map +1 -1
- package/dist/providers/core/runtime/standard-tool-text-harvest.d.ts +8 -0
- package/dist/providers/core/runtime/standard-tool-text-harvest.js +24 -0
- package/dist/providers/core/runtime/standard-tool-text-harvest.js.map +1 -0
- package/dist/providers/core/runtime/standard-tool-text-request-transform.d.ts +4 -1
- package/dist/providers/core/runtime/standard-tool-text-request-transform.js +129 -3
- package/dist/providers/core/runtime/standard-tool-text-request-transform.js.map +1 -1
- package/dist/providers/core/utils/snapshot-writer.js +5 -2
- package/dist/providers/core/utils/snapshot-writer.js.map +1 -1
- package/dist/providers/profile/provider-profile-loader.js +52 -1
- package/dist/providers/profile/provider-profile-loader.js.map +1 -1
- package/dist/providers/profile/provider-profile.d.ts +3 -0
- package/dist/server/handlers/handler-response-utils.js +1 -0
- package/dist/server/handlers/handler-response-utils.js.map +1 -1
- package/dist/server/handlers/images-handler.d.ts +9 -0
- package/dist/server/handlers/images-handler.js +258 -0
- package/dist/server/handlers/images-handler.js.map +1 -0
- package/dist/server/handlers/types.d.ts +7 -0
- package/dist/server/runtime/http-server/antigravity-startup-tasks.d.ts +3 -0
- package/dist/server/runtime/http-server/antigravity-startup-tasks.js +16 -0
- package/dist/server/runtime/http-server/antigravity-startup-tasks.js.map +1 -1
- package/dist/server/runtime/http-server/daemon-admin/auth-handler.js +3 -18
- package/dist/server/runtime/http-server/daemon-admin/auth-handler.js.map +1 -1
- package/dist/server/runtime/http-server/daemon-admin/providers-handler-utils.d.ts +7 -0
- package/dist/server/runtime/http-server/daemon-admin/providers-handler-utils.js +17 -0
- package/dist/server/runtime/http-server/daemon-admin/providers-handler-utils.js.map +1 -1
- package/dist/server/runtime/http-server/daemon-admin/providers-handler.js +50 -17
- package/dist/server/runtime/http-server/daemon-admin/providers-handler.js.map +1 -1
- package/dist/server/runtime/http-server/daemon-admin-routes.js +32 -2
- package/dist/server/runtime/http-server/daemon-admin-routes.js.map +1 -1
- package/dist/server/runtime/http-server/executor/provider-response-converter.js +42 -13
- package/dist/server/runtime/http-server/executor/provider-response-converter.js.map +1 -1
- package/dist/server/runtime/http-server/executor/provider-response-utils.js +41 -3
- package/dist/server/runtime/http-server/executor/provider-response-utils.js.map +1 -1
- package/dist/server/runtime/http-server/executor/usage-aggregator.js +7 -7
- package/dist/server/runtime/http-server/executor/usage-aggregator.js.map +1 -1
- package/dist/server/runtime/http-server/executor/usage-logger.d.ts +9 -0
- package/dist/server/runtime/http-server/executor/usage-logger.js +35 -2
- package/dist/server/runtime/http-server/executor/usage-logger.js.map +1 -1
- package/dist/server/runtime/http-server/executor-metadata.js +12 -4
- package/dist/server/runtime/http-server/executor-metadata.js.map +1 -1
- package/dist/server/runtime/http-server/executor-pipeline.js +24 -15
- package/dist/server/runtime/http-server/executor-pipeline.js.map +1 -1
- package/dist/server/runtime/http-server/executor-provider.d.ts +6 -1
- package/dist/server/runtime/http-server/executor-provider.js +137 -5
- package/dist/server/runtime/http-server/executor-provider.js.map +1 -1
- package/dist/server/runtime/http-server/http-server-bootstrap.js +6 -0
- package/dist/server/runtime/http-server/http-server-bootstrap.js.map +1 -1
- package/dist/server/runtime/http-server/http-server-lifecycle.js +23 -15
- package/dist/server/runtime/http-server/http-server-lifecycle.js.map +1 -1
- package/dist/server/runtime/http-server/http-server-runtime-providers.js +14 -4
- package/dist/server/runtime/http-server/http-server-runtime-providers.js.map +1 -1
- package/dist/server/runtime/http-server/http-server-runtime-setup.js +83 -1
- package/dist/server/runtime/http-server/http-server-runtime-setup.js.map +1 -1
- package/dist/server/runtime/http-server/hub-shadow-compare.js +2 -41
- package/dist/server/runtime/http-server/hub-shadow-compare.js.map +1 -1
- package/dist/server/runtime/http-server/provider-routing-scope.d.ts +9 -0
- package/dist/server/runtime/http-server/provider-routing-scope.js +20 -0
- package/dist/server/runtime/http-server/provider-routing-scope.js.map +1 -0
- package/dist/server/runtime/http-server/provider-traffic-governor.d.ts +67 -0
- package/dist/server/runtime/http-server/provider-traffic-governor.js +467 -0
- package/dist/server/runtime/http-server/provider-traffic-governor.js.map +1 -0
- package/dist/server/runtime/http-server/request-executor.d.ts +8 -0
- package/dist/server/runtime/http-server/request-executor.js +446 -21
- package/dist/server/runtime/http-server/request-executor.js.map +1 -1
- package/dist/server/runtime/http-server/routes.js +13 -0
- package/dist/server/runtime/http-server/routes.js.map +1 -1
- package/dist/server/runtime/http-server/session-client-registry.js +30 -4
- package/dist/server/runtime/http-server/session-client-registry.js.map +1 -1
- package/dist/server/runtime/http-server/session-client-route-utils.d.ts +7 -0
- package/dist/server/runtime/http-server/session-client-route-utils.js +38 -0
- package/dist/server/runtime/http-server/session-client-route-utils.js.map +1 -1
- package/dist/server/runtime/http-server/session-client-routes.js +12 -2
- package/dist/server/runtime/http-server/session-client-routes.js.map +1 -1
- package/dist/server/utils/request-id-manager.js +42 -5
- package/dist/server/utils/request-id-manager.js.map +1 -1
- package/dist/server/utils/stage-logger.d.ts +1 -0
- package/dist/server/utils/stage-logger.js +27 -0
- package/dist/server/utils/stage-logger.js.map +1 -1
- package/dist/utils/errorsamples.js +3 -1
- package/dist/utils/errorsamples.js.map +1 -1
- package/dist/utils/sensitive-redaction.d.ts +1 -0
- package/dist/utils/sensitive-redaction.js +122 -0
- package/dist/utils/sensitive-redaction.js.map +1 -0
- package/dist/utils/snapshot-writer.js +162 -2
- package/dist/utils/snapshot-writer.js.map +1 -1
- package/docs/INSTALLATION_AND_QUICKSTART.md +14 -1
- package/docs/PORTS.md +12 -0
- package/docs/lmstudio-tool-calling.md +25 -0
- package/node_modules/@jsonstudio/llms/dist/conversion/compat/actions/qwenchat-web-request.d.ts +3 -0
- package/node_modules/@jsonstudio/llms/dist/conversion/compat/actions/qwenchat-web-request.js +62 -0
- package/node_modules/@jsonstudio/llms/dist/conversion/compat/profiles/chat-qwenchat-web.json +47 -0
- package/node_modules/@jsonstudio/llms/dist/conversion/hub/node-support.js +5 -2
- package/node_modules/@jsonstudio/llms/dist/conversion/hub/operation-table/operation-table-runner.js +68 -7
- package/node_modules/@jsonstudio/llms/dist/conversion/hub/operation-table/semantic-mappers/anthropic-mapper-from-chat.js +138 -3
- package/node_modules/@jsonstudio/llms/dist/conversion/hub/pipeline/hub-pipeline-chat-process-request-utils.js +24 -0
- package/node_modules/@jsonstudio/llms/dist/conversion/hub/pipeline/hub-pipeline-execute-chat-process-entry.js +7 -1
- package/node_modules/@jsonstudio/llms/dist/conversion/hub/pipeline/hub-pipeline-execute-request-stage.js +7 -0
- package/node_modules/@jsonstudio/llms/dist/conversion/hub/pipeline/hub-pipeline-heavy-input-fastpath.d.ts +24 -0
- package/node_modules/@jsonstudio/llms/dist/conversion/hub/pipeline/hub-pipeline-heavy-input-fastpath.js +203 -0
- package/node_modules/@jsonstudio/llms/dist/conversion/hub/pipeline/hub-pipeline-route-and-outbound.js +17 -12
- package/node_modules/@jsonstudio/llms/dist/conversion/hub/pipeline/hub-stage-timing.d.ts +11 -0
- package/node_modules/@jsonstudio/llms/dist/conversion/hub/pipeline/hub-stage-timing.js +82 -1
- package/node_modules/@jsonstudio/llms/dist/conversion/hub/pipeline/stages/req_inbound/req_inbound_stage2_semantic_map/index.js +47 -14
- package/node_modules/@jsonstudio/llms/dist/conversion/hub/pipeline/stages/req_outbound/req_outbound_stage1_semantic_map/index.js +43 -0
- package/node_modules/@jsonstudio/llms/dist/conversion/hub/pipeline/stages/resp_outbound/resp_outbound_stage1_client_remap/client-remap-protocol-switch.js +222 -19
- package/node_modules/@jsonstudio/llms/dist/conversion/hub/policy/policy-engine.js +2 -2
- package/node_modules/@jsonstudio/llms/dist/conversion/hub/process/chat-process-pending-tool-sync.js +24 -7
- package/node_modules/@jsonstudio/llms/dist/conversion/hub/response/provider-response.js +90 -1
- package/node_modules/@jsonstudio/llms/dist/conversion/hub/snapshot-recorder.d.ts +1 -0
- package/node_modules/@jsonstudio/llms/dist/conversion/hub/snapshot-recorder.js +252 -1
- package/node_modules/@jsonstudio/llms/dist/conversion/responses/responses-openai-bridge/utils.js +5 -3
- package/node_modules/@jsonstudio/llms/dist/conversion/responses/responses-openai-bridge.js +44 -4
- package/node_modules/@jsonstudio/llms/dist/conversion/shared/anthropic-message-utils-openai-request.d.ts +3 -1
- package/node_modules/@jsonstudio/llms/dist/conversion/shared/anthropic-message-utils-openai-request.js +20 -23
- package/node_modules/@jsonstudio/llms/dist/conversion/shared/tool-governor.js +68 -30
- package/node_modules/@jsonstudio/llms/dist/conversion/snapshot-utils.js +194 -10
- package/node_modules/@jsonstudio/llms/dist/native/router_hotpath_napi.node +0 -0
- package/node_modules/@jsonstudio/llms/dist/quota/quota-state.js +2 -2
- package/node_modules/@jsonstudio/llms/dist/router/virtual-router/engine/routing-state/store.js +35 -2
- package/node_modules/@jsonstudio/llms/dist/router/virtual-router/engine.js +9 -9
- package/node_modules/@jsonstudio/llms/dist/router/virtual-router/sticky-session-store.js +104 -18
- package/node_modules/@jsonstudio/llms/dist/servertool/engine.js +79 -32
- package/node_modules/@jsonstudio/llms/dist/servertool/handlers/vision.js +49 -0
- package/node_modules/@jsonstudio/llms/dist/servertool/pending-session.js +48 -2
- package/node_modules/@jsonstudio/llms/dist/servertool/server-side-tools.js +14 -1
- package/node_modules/@jsonstudio/llms/dist/servertool/types.d.ts +1 -0
- package/node_modules/@jsonstudio/llms/package.json +1 -1
- package/node_modules/ajv/dist/compile/jtd/serialize.js +9 -2
- package/node_modules/ajv/dist/compile/jtd/serialize.js.map +1 -1
- package/node_modules/ajv/dist/core.d.ts +1 -0
- package/node_modules/ajv/dist/core.js.map +1 -1
- package/node_modules/ajv/dist/vocabularies/validation/pattern.js +13 -4
- package/node_modules/ajv/dist/vocabularies/validation/pattern.js.map +1 -1
- package/node_modules/ajv/lib/compile/jtd/serialize.ts +13 -2
- package/node_modules/ajv/lib/core.ts +1 -0
- package/node_modules/ajv/lib/vocabularies/validation/pattern.ts +15 -4
- package/node_modules/ajv/package.json +2 -1
- package/package.json +15 -10
- package/scripts/ci/repo-sanity.mjs +23 -2
- package/scripts/ci/secrets-check.mjs +48 -0
- package/scripts/ci/silent-failure-audit.mjs +192 -0
- package/scripts/mock-provider/run-regressions.mjs +1 -0
- package/scripts/monitor/memory-guard.mjs +207 -0
- package/scripts/pack-mode.mjs +32 -36
- package/scripts/publish-rcc.mjs +38 -60
- package/scripts/tests/apply-patch-loop.mjs +1 -0
- package/scripts/tests/blackbox-rcc-vs-routecodex-antigravity.mjs +2 -0
- package/scripts/tools-dev/responses-debug-client/src/index.ts +8 -3
- package/scripts/verify-e2e-toolcall.mjs +1 -0
- 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(() =>
|
|
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(() =>
|
|
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(() =>
|
|
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 });
|