@jsonstudio/rcc 0.89.2239 → 0.90.89

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 (338) hide show
  1. package/README.md +27 -0
  2. package/dist/build-info.js +2 -2
  3. package/dist/build-info.js.map +1 -1
  4. package/dist/cli/commands/claude.js +4 -8
  5. package/dist/cli/commands/claude.js.map +1 -1
  6. package/dist/cli/commands/codex.js +6 -3
  7. package/dist/cli/commands/codex.js.map +1 -1
  8. package/dist/cli/commands/guardian-daemon.d.ts +2 -0
  9. package/dist/cli/commands/guardian-daemon.js +299 -0
  10. package/dist/cli/commands/guardian-daemon.js.map +1 -0
  11. package/dist/cli/commands/init/camoufox.js +1 -1
  12. package/dist/cli/commands/init/camoufox.js.map +1 -1
  13. package/dist/cli/commands/launcher/index.d.ts +1 -1
  14. package/dist/cli/commands/launcher/types.d.ts +7 -1
  15. package/dist/cli/commands/launcher/utils.d.ts +4 -1
  16. package/dist/cli/commands/launcher/utils.js +18 -8
  17. package/dist/cli/commands/launcher/utils.js.map +1 -1
  18. package/dist/cli/commands/launcher-kernel.d.ts +1 -1
  19. package/dist/cli/commands/launcher-kernel.js +608 -249
  20. package/dist/cli/commands/launcher-kernel.js.map +1 -1
  21. package/dist/cli/commands/port.js +28 -8
  22. package/dist/cli/commands/port.js.map +1 -1
  23. package/dist/cli/commands/restart.d.ts +4 -0
  24. package/dist/cli/commands/restart.js +91 -42
  25. package/dist/cli/commands/restart.js.map +1 -1
  26. package/dist/cli/commands/{clock-admin.d.ts → session-admin.d.ts} +2 -2
  27. package/dist/cli/commands/{clock-admin.js → session-admin.js} +17 -17
  28. package/dist/cli/commands/session-admin.js.map +1 -0
  29. package/dist/cli/commands/{tmux-inject.d.ts → session-inject.d.ts} +2 -2
  30. package/dist/cli/commands/{tmux-inject.js → session-inject.js} +12 -12
  31. package/dist/cli/commands/session-inject.js.map +1 -0
  32. package/dist/cli/commands/start-types.d.ts +4 -0
  33. package/dist/cli/commands/start-utils.d.ts +1 -0
  34. package/dist/cli/commands/start-utils.js +3 -0
  35. package/dist/cli/commands/start-utils.js.map +1 -1
  36. package/dist/cli/commands/start.js +122 -72
  37. package/dist/cli/commands/start.js.map +1 -1
  38. package/dist/cli/commands/stop.d.ts +3 -0
  39. package/dist/cli/commands/stop.js +30 -63
  40. package/dist/cli/commands/stop.js.map +1 -1
  41. package/dist/cli/config/init-provider-catalog.js +8 -3
  42. package/dist/cli/config/init-provider-catalog.js.map +1 -1
  43. package/dist/cli/guardian/client.d.ts +38 -0
  44. package/dist/cli/guardian/client.js +237 -0
  45. package/dist/cli/guardian/client.js.map +1 -0
  46. package/dist/cli/guardian/paths.d.ts +7 -0
  47. package/dist/cli/guardian/paths.js +13 -0
  48. package/dist/cli/guardian/paths.js.map +1 -0
  49. package/dist/cli/guardian/types.d.ts +30 -0
  50. package/dist/cli/guardian/types.js +2 -0
  51. package/dist/cli/guardian/types.js.map +1 -0
  52. package/dist/cli/register/guardian-daemon-command.d.ts +2 -0
  53. package/dist/cli/register/guardian-daemon-command.js +5 -0
  54. package/dist/cli/register/guardian-daemon-command.js.map +1 -0
  55. package/dist/cli/register/session-admin-command.d.ts +3 -0
  56. package/dist/cli/register/session-admin-command.js +5 -0
  57. package/dist/cli/register/session-admin-command.js.map +1 -0
  58. package/dist/cli/register/session-inject-command.d.ts +3 -0
  59. package/dist/cli/register/session-inject-command.js +5 -0
  60. package/dist/cli/register/session-inject-command.js.map +1 -0
  61. package/dist/cli/server/port-utils.js +57 -1
  62. package/dist/cli/server/port-utils.js.map +1 -1
  63. package/dist/cli.js +52 -4
  64. package/dist/cli.js.map +1 -1
  65. package/dist/commands/oauth.js +6 -6
  66. package/dist/commands/oauth.js.map +1 -1
  67. package/dist/config/provider-v2-loader.js +18 -3
  68. package/dist/config/provider-v2-loader.js.map +1 -1
  69. package/dist/config/routecodex-config-loader.js +184 -9
  70. package/dist/config/routecodex-config-loader.js.map +1 -1
  71. package/dist/config/unified-config-paths.js +22 -0
  72. package/dist/config/unified-config-paths.js.map +1 -1
  73. package/dist/config/virtual-router-builder.js +18 -5
  74. package/dist/config/virtual-router-builder.js.map +1 -1
  75. package/dist/config/virtual-router-types.js +20 -5
  76. package/dist/config/virtual-router-types.js.map +1 -1
  77. package/dist/daemon-admin-ui/assets/index-C8vP_c5E.js +15 -0
  78. package/dist/daemon-admin-ui/assets/index-DjIoHmNv.css +1 -0
  79. package/dist/daemon-admin-ui/index.html +13 -0
  80. package/dist/docs/daemon-admin-ui.html +334 -63
  81. package/dist/index.d.ts +9 -0
  82. package/dist/index.js +268 -10
  83. package/dist/index.js.map +1 -1
  84. package/dist/manager/modules/quota/provider-key-normalization.js +1 -10
  85. package/dist/manager/modules/quota/provider-key-normalization.js.map +1 -1
  86. package/dist/manager/modules/quota/provider-quota-daemon.error-helpers.d.ts +1 -0
  87. package/dist/manager/modules/quota/provider-quota-daemon.error-helpers.js +36 -0
  88. package/dist/manager/modules/quota/provider-quota-daemon.error-helpers.js.map +1 -1
  89. package/dist/manager/modules/quota/provider-quota-daemon.events.js +89 -49
  90. package/dist/manager/modules/quota/provider-quota-daemon.events.js.map +1 -1
  91. package/dist/manager/modules/quota/provider-quota-daemon.model-backoff.js +2 -16
  92. package/dist/manager/modules/quota/provider-quota-daemon.model-backoff.js.map +1 -1
  93. package/dist/manager/modules/token/index.d.ts +1 -0
  94. package/dist/manager/modules/token/index.js +6 -1
  95. package/dist/manager/modules/token/index.js.map +1 -1
  96. package/dist/manager/types.d.ts +1 -0
  97. package/dist/modules/llmswitch/bridge/state-integrations.js +1 -1
  98. package/dist/modules/llmswitch/bridge/state-integrations.js.map +1 -1
  99. package/dist/providers/auth/antigravity-user-agent.js +78 -31
  100. package/dist/providers/auth/antigravity-user-agent.js.map +1 -1
  101. package/dist/providers/auth/gemini-cli-userinfo-helper.js +94 -63
  102. package/dist/providers/auth/gemini-cli-userinfo-helper.js.map +1 -1
  103. package/dist/providers/auth/iflow-userinfo-helper.js +1 -1
  104. package/dist/providers/auth/iflow-userinfo-helper.js.map +1 -1
  105. package/dist/providers/auth/oauth-error-message.d.ts +1 -0
  106. package/dist/providers/auth/oauth-error-message.js +44 -0
  107. package/dist/providers/auth/oauth-error-message.js.map +1 -0
  108. package/dist/providers/auth/oauth-lifecycle/error-detection.js +42 -8
  109. package/dist/providers/auth/oauth-lifecycle/error-detection.js.map +1 -1
  110. package/dist/providers/auth/oauth-lifecycle/token-io.d.ts +1 -0
  111. package/dist/providers/auth/oauth-lifecycle/token-io.js +12 -0
  112. package/dist/providers/auth/oauth-lifecycle/token-io.js.map +1 -1
  113. package/dist/providers/auth/oauth-lifecycle.js +502 -87
  114. package/dist/providers/auth/oauth-lifecycle.js.map +1 -1
  115. package/dist/providers/auth/oauth-repair-env.js +3 -5
  116. package/dist/providers/auth/oauth-repair-env.js.map +1 -1
  117. package/dist/providers/auth/oauth-utils/error-extraction.js +42 -8
  118. package/dist/providers/auth/oauth-utils/error-extraction.js.map +1 -1
  119. package/dist/providers/core/config/camoufox-actions.d.ts +31 -0
  120. package/dist/providers/core/config/camoufox-actions.js +470 -0
  121. package/dist/providers/core/config/camoufox-actions.js.map +1 -0
  122. package/dist/providers/core/config/camoufox-launcher.d.ts +3 -0
  123. package/dist/providers/core/config/camoufox-launcher.js +553 -159
  124. package/dist/providers/core/config/camoufox-launcher.js.map +1 -1
  125. package/dist/providers/core/config/oauth-flows.js +6 -44
  126. package/dist/providers/core/config/oauth-flows.js.map +1 -1
  127. package/dist/providers/core/config/provider-oauth-configs.js +51 -7
  128. package/dist/providers/core/config/provider-oauth-configs.js.map +1 -1
  129. package/dist/providers/core/config/service-profiles.js +2 -2
  130. package/dist/providers/core/config/service-profiles.js.map +1 -1
  131. package/dist/providers/core/runtime/base-provider-runtime-helpers.js +15 -2
  132. package/dist/providers/core/runtime/base-provider-runtime-helpers.js.map +1 -1
  133. package/dist/providers/core/runtime/provider-error-classifier.js +32 -15
  134. package/dist/providers/core/runtime/provider-error-classifier.js.map +1 -1
  135. package/dist/providers/core/runtime/provider-family-profile-utils.js +1 -1
  136. package/dist/providers/core/runtime/provider-family-profile-utils.js.map +1 -1
  137. package/dist/providers/core/runtime/provider-response-postprocessor.js +61 -14
  138. package/dist/providers/core/runtime/provider-response-postprocessor.js.map +1 -1
  139. package/dist/providers/core/strategies/oauth-auth-code-flow.d.ts +1 -0
  140. package/dist/providers/core/strategies/oauth-auth-code-flow.js +124 -19
  141. package/dist/providers/core/strategies/oauth-auth-code-flow.js.map +1 -1
  142. package/dist/providers/core/strategies/oauth-device-flow.js +32 -6
  143. package/dist/providers/core/strategies/oauth-device-flow.js.map +1 -1
  144. package/dist/providers/core/utils/provider-error-reporter.js +51 -0
  145. package/dist/providers/core/utils/provider-error-reporter.js.map +1 -1
  146. package/dist/providers/profile/families/iflow-profile.js +83 -10
  147. package/dist/providers/profile/families/iflow-profile.js.map +1 -1
  148. package/dist/scripts/camoufox/launch-auth.mjs +112 -5
  149. package/dist/server/handlers/config-admin-handler.js +9 -2
  150. package/dist/server/handlers/config-admin-handler.js.map +1 -1
  151. package/dist/server/handlers/handler-response-utils.js +3 -6
  152. package/dist/server/handlers/handler-response-utils.js.map +1 -1
  153. package/dist/server/handlers/handler-utils.js +14 -17
  154. package/dist/server/handlers/handler-utils.js.map +1 -1
  155. package/dist/server/handlers/logging.js +3 -4
  156. package/dist/server/handlers/logging.js.map +1 -1
  157. package/dist/server/handlers/responses-handler.js +5 -3
  158. package/dist/server/handlers/responses-handler.js.map +1 -1
  159. package/dist/server/runtime/http-server/daemon-admin/auth-handler.js +5 -3
  160. package/dist/server/runtime/http-server/daemon-admin/auth-handler.js.map +1 -1
  161. package/dist/server/runtime/http-server/daemon-admin/control-handler.js +104 -15
  162. package/dist/server/runtime/http-server/daemon-admin/control-handler.js.map +1 -1
  163. package/dist/server/runtime/http-server/daemon-admin/credentials-handler.js +2 -2
  164. package/dist/server/runtime/http-server/daemon-admin/credentials-handler.js.map +1 -1
  165. package/dist/server/runtime/http-server/daemon-admin/providers-handler-routing-utils.d.ts +24 -0
  166. package/dist/server/runtime/http-server/daemon-admin/providers-handler-routing-utils.js +316 -70
  167. package/dist/server/runtime/http-server/daemon-admin/providers-handler-routing-utils.js.map +1 -1
  168. package/dist/server/runtime/http-server/daemon-admin/providers-handler.js +190 -1
  169. package/dist/server/runtime/http-server/daemon-admin/providers-handler.js.map +1 -1
  170. package/dist/server/runtime/http-server/daemon-admin/routing-policy.d.ts +1 -1
  171. package/dist/server/runtime/http-server/daemon-admin/routing-policy.js +21 -32
  172. package/dist/server/runtime/http-server/daemon-admin/routing-policy.js.map +1 -1
  173. package/dist/server/runtime/http-server/daemon-admin/stats-handler.js +2 -0
  174. package/dist/server/runtime/http-server/daemon-admin/stats-handler.js.map +1 -1
  175. package/dist/server/runtime/http-server/daemon-admin-routes.d.ts +8 -1
  176. package/dist/server/runtime/http-server/daemon-admin-routes.js +30 -0
  177. package/dist/server/runtime/http-server/daemon-admin-routes.js.map +1 -1
  178. package/dist/server/runtime/http-server/executor/client-injection-flow.d.ts +14 -0
  179. package/dist/server/runtime/http-server/executor/client-injection-flow.js +297 -0
  180. package/dist/server/runtime/http-server/executor/client-injection-flow.js.map +1 -0
  181. package/dist/server/runtime/http-server/executor/index.d.ts +1 -1
  182. package/dist/server/runtime/http-server/executor/index.js +1 -1
  183. package/dist/server/runtime/http-server/executor/index.js.map +1 -1
  184. package/dist/server/runtime/http-server/executor/provider-response-converter.js +281 -70
  185. package/dist/server/runtime/http-server/executor/provider-response-converter.js.map +1 -1
  186. package/dist/server/runtime/http-server/executor/provider-runtime-resolver.js +8 -6
  187. package/dist/server/runtime/http-server/executor/provider-runtime-resolver.js.map +1 -1
  188. package/dist/server/runtime/http-server/executor/request-executor-core-utils.d.ts +1 -0
  189. package/dist/server/runtime/http-server/executor/request-executor-core-utils.js +12 -0
  190. package/dist/server/runtime/http-server/executor/request-executor-core-utils.js.map +1 -1
  191. package/dist/server/runtime/http-server/executor/request-retry-helpers.d.ts +1 -1
  192. package/dist/server/runtime/http-server/executor/request-retry-helpers.js +23 -19
  193. package/dist/server/runtime/http-server/executor/request-retry-helpers.js.map +1 -1
  194. package/dist/server/runtime/http-server/executor/retry-engine.d.ts +2 -2
  195. package/dist/server/runtime/http-server/executor/retry-engine.js +2 -2
  196. package/dist/server/runtime/http-server/executor/retry-engine.js.map +1 -1
  197. package/dist/server/runtime/http-server/executor/sse-error-handler.d.ts +1 -0
  198. package/dist/server/runtime/http-server/executor/sse-error-handler.js +13 -2
  199. package/dist/server/runtime/http-server/executor/sse-error-handler.js.map +1 -1
  200. package/dist/server/runtime/http-server/executor/usage-aggregator.d.ts +0 -12
  201. package/dist/server/runtime/http-server/executor/usage-aggregator.js +89 -90
  202. package/dist/server/runtime/http-server/executor/usage-aggregator.js.map +1 -1
  203. package/dist/server/runtime/http-server/executor-metadata.js +318 -17
  204. package/dist/server/runtime/http-server/executor-metadata.js.map +1 -1
  205. package/dist/server/runtime/http-server/executor-provider.d.ts +1 -0
  206. package/dist/server/runtime/http-server/executor-provider.js +5 -1
  207. package/dist/server/runtime/http-server/executor-provider.js.map +1 -1
  208. package/dist/server/runtime/http-server/executor-response.d.ts +1 -0
  209. package/dist/server/runtime/http-server/executor-response.js +52 -58
  210. package/dist/server/runtime/http-server/executor-response.js.map +1 -1
  211. package/dist/server/runtime/http-server/http-server-bootstrap.js +50 -6
  212. package/dist/server/runtime/http-server/http-server-bootstrap.js.map +1 -1
  213. package/dist/server/runtime/http-server/http-server-lifecycle.js +6 -5
  214. package/dist/server/runtime/http-server/http-server-lifecycle.js.map +1 -1
  215. package/dist/server/runtime/http-server/http-server-runtime-setup.js +1 -1
  216. package/dist/server/runtime/http-server/http-server-runtime-setup.js.map +1 -1
  217. package/dist/server/runtime/http-server/http-server-session-daemon.d.ts +6 -0
  218. package/dist/server/runtime/http-server/http-server-session-daemon.js +404 -0
  219. package/dist/server/runtime/http-server/http-server-session-daemon.js.map +1 -0
  220. package/dist/server/runtime/http-server/hub-shadow-compare.js +1 -1
  221. package/dist/server/runtime/http-server/hub-shadow-compare.js.map +1 -1
  222. package/dist/server/runtime/http-server/index.d.ts +11 -10
  223. package/dist/server/runtime/http-server/index.js +21 -20
  224. package/dist/server/runtime/http-server/index.js.map +1 -1
  225. package/dist/server/runtime/http-server/managed-process-probe.js +1 -1
  226. package/dist/server/runtime/http-server/managed-process-probe.js.map +1 -1
  227. package/dist/server/runtime/http-server/middleware.js +91 -5
  228. package/dist/server/runtime/http-server/middleware.js.map +1 -1
  229. package/dist/server/runtime/http-server/request-executor.js +19 -9
  230. package/dist/server/runtime/http-server/request-executor.js.map +1 -1
  231. package/dist/server/runtime/http-server/routes.d.ts +2 -1
  232. package/dist/server/runtime/http-server/routes.js +7 -5
  233. package/dist/server/runtime/http-server/routes.js.map +1 -1
  234. package/dist/server/runtime/http-server/{clock-client-reaper.d.ts → session-client-reaper.d.ts} +6 -6
  235. package/dist/server/runtime/http-server/{clock-client-reaper.js → session-client-reaper.js} +26 -49
  236. package/dist/server/runtime/http-server/session-client-reaper.js.map +1 -0
  237. package/dist/server/runtime/http-server/{clock-client-registry-utils.d.ts → session-client-registry-utils.d.ts} +14 -10
  238. package/dist/server/runtime/http-server/{clock-client-registry-utils.js → session-client-registry-utils.js} +77 -19
  239. package/dist/server/runtime/http-server/session-client-registry-utils.js.map +1 -0
  240. package/dist/server/runtime/http-server/{clock-client-registry.d.ts → session-client-registry.d.ts} +26 -11
  241. package/dist/server/runtime/http-server/{clock-client-registry.js → session-client-registry.js} +305 -11
  242. package/dist/server/runtime/http-server/session-client-registry.js.map +1 -0
  243. package/dist/server/runtime/http-server/{clock-client-route-utils.d.ts → session-client-route-utils.d.ts} +1 -1
  244. package/dist/server/runtime/http-server/{clock-client-route-utils.js → session-client-route-utils.js} +4 -4
  245. package/dist/server/runtime/http-server/session-client-route-utils.js.map +1 -0
  246. package/dist/server/runtime/http-server/session-client-routes.d.ts +2 -0
  247. package/dist/server/runtime/http-server/{clock-client-routes.js → session-client-routes.js} +107 -59
  248. package/dist/server/runtime/http-server/session-client-routes.js.map +1 -0
  249. package/dist/server/runtime/http-server/session-daemon-inject-config.d.ts +1 -0
  250. package/dist/server/runtime/http-server/{clock-daemon-inject-config.js → session-daemon-inject-config.js} +2 -2
  251. package/dist/server/runtime/http-server/session-daemon-inject-config.js.map +1 -0
  252. package/dist/server/runtime/http-server/session-daemon-log-throttle.d.ts +28 -0
  253. package/dist/server/runtime/http-server/session-daemon-log-throttle.js +105 -0
  254. package/dist/server/runtime/http-server/session-daemon-log-throttle.js.map +1 -0
  255. package/dist/server/runtime/http-server/session-dir.js +12 -1
  256. package/dist/server/runtime/http-server/session-dir.js.map +1 -1
  257. package/dist/server/runtime/http-server/session-scope-resolution.d.ts +14 -0
  258. package/dist/server/runtime/http-server/session-scope-resolution.js +208 -0
  259. package/dist/server/runtime/http-server/session-scope-resolution.js.map +1 -0
  260. package/dist/server/runtime/http-server/stats-manager.d.ts +35 -0
  261. package/dist/server/runtime/http-server/stats-manager.js +269 -21
  262. package/dist/server/runtime/http-server/stats-manager.js.map +1 -1
  263. package/dist/server/runtime/http-server/stopmessage-scope-rebind.d.ts +21 -0
  264. package/dist/server/runtime/http-server/stopmessage-scope-rebind.js +197 -0
  265. package/dist/server/runtime/http-server/stopmessage-scope-rebind.js.map +1 -0
  266. package/dist/server/runtime/http-server/tmux-session-probe.d.ts +10 -0
  267. package/dist/server/runtime/http-server/tmux-session-probe.js +98 -1
  268. package/dist/server/runtime/http-server/tmux-session-probe.js.map +1 -1
  269. package/dist/server-lifecycle/port-utils.d.ts +2 -1
  270. package/dist/server-lifecycle/port-utils.js +84 -4
  271. package/dist/server-lifecycle/port-utils.js.map +1 -1
  272. package/dist/token-daemon/index.d.ts +1 -0
  273. package/dist/token-daemon/index.js +17 -12
  274. package/dist/token-daemon/index.js.map +1 -1
  275. package/dist/token-daemon/token-daemon.d.ts +2 -0
  276. package/dist/token-daemon/token-daemon.js +18 -10
  277. package/dist/token-daemon/token-daemon.js.map +1 -1
  278. package/dist/utils/llms-engine-shadow.js +1 -1
  279. package/dist/utils/llms-engine-shadow.js.map +1 -1
  280. package/dist/utils/log-helpers.js +46 -0
  281. package/dist/utils/log-helpers.js.map +1 -1
  282. package/dist/utils/session-client-token.d.ts +4 -0
  283. package/dist/utils/session-client-token.js +93 -0
  284. package/dist/utils/session-client-token.js.map +1 -0
  285. package/dist/utils/session-scope-trace.d.ts +11 -0
  286. package/dist/utils/session-scope-trace.js +41 -0
  287. package/dist/utils/session-scope-trace.js.map +1 -0
  288. package/docs/CLOCK.md +0 -1
  289. package/docs/DAEMON_CONTROL_PLANE.md +1 -0
  290. package/docs/PORTS.md +2 -2
  291. package/docs/ROUTING_POLICY_SCHEMA.md +5 -3
  292. package/docs/antigravity-routing-contract.md +2 -2
  293. package/docs/daemon-admin-ui.html +334 -63
  294. package/docs/design/servertool-stopmessage-lifecycle.md +109 -0
  295. package/docs/exec-command-guard-policy.example.v1.json +7 -1
  296. package/docs/providers/antigravity-gemini-provider-compat.md +2 -2
  297. package/docs/{clock-client-daemon-design.md → session-client-daemon-design.md} +34 -34
  298. package/package.json +23 -7
  299. package/scripts/build-core.mjs +12 -0
  300. package/scripts/camoufox/launch-auth.mjs +112 -5
  301. package/scripts/ci/repo-sanity.mjs +1 -0
  302. package/scripts/compare-responses-sse.mjs +267 -0
  303. package/scripts/install-global.sh +6 -0
  304. package/scripts/install-verify.mjs +33 -16
  305. package/scripts/replay-codex-sample.mjs +52 -6
  306. package/scripts/run-bg.sh +226 -43
  307. package/scripts/run-fg-gtimeout.sh +158 -14
  308. package/scripts/tests/blackbox-rcc-vs-routecodex-antigravity.mjs +3 -3
  309. package/scripts/tests/ci-jest.mjs +9 -1
  310. package/scripts/triage-errorsamples.mjs +216 -0
  311. package/scripts/verify-codex-error-samples.mjs +92 -15
  312. package/scripts/verify-install-e2e.mjs +57 -27
  313. package/scripts/virtual-router-dryrun.mjs +7 -1
  314. package/dist/cli/commands/clock-admin.js.map +0 -1
  315. package/dist/cli/commands/tmux-inject.js.map +0 -1
  316. package/dist/cli/register/clock-admin-command.d.ts +0 -3
  317. package/dist/cli/register/clock-admin-command.js +0 -5
  318. package/dist/cli/register/clock-admin-command.js.map +0 -1
  319. package/dist/cli/register/tmux-inject-command.d.ts +0 -3
  320. package/dist/cli/register/tmux-inject-command.js +0 -5
  321. package/dist/cli/register/tmux-inject-command.js.map +0 -1
  322. package/dist/server/runtime/http-server/clock-client-reaper.js.map +0 -1
  323. package/dist/server/runtime/http-server/clock-client-registry-utils.js.map +0 -1
  324. package/dist/server/runtime/http-server/clock-client-registry.js.map +0 -1
  325. package/dist/server/runtime/http-server/clock-client-route-utils.js.map +0 -1
  326. package/dist/server/runtime/http-server/clock-client-routes.d.ts +0 -2
  327. package/dist/server/runtime/http-server/clock-client-routes.js.map +0 -1
  328. package/dist/server/runtime/http-server/clock-daemon-inject-config.d.ts +0 -1
  329. package/dist/server/runtime/http-server/clock-daemon-inject-config.js.map +0 -1
  330. package/dist/server/runtime/http-server/clock-daemon-log-throttle.d.ts +0 -12
  331. package/dist/server/runtime/http-server/clock-daemon-log-throttle.js +0 -56
  332. package/dist/server/runtime/http-server/clock-daemon-log-throttle.js.map +0 -1
  333. package/dist/server/runtime/http-server/http-server-clock-daemon.d.ts +0 -5
  334. package/dist/server/runtime/http-server/http-server-clock-daemon.js +0 -255
  335. package/dist/server/runtime/http-server/http-server-clock-daemon.js.map +0 -1
  336. package/dist/utils/clock-client-token.d.ts +0 -3
  337. package/dist/utils/clock-client-token.js +0 -54
  338. package/dist/utils/clock-client-token.js.map +0 -1
@@ -1,10 +1,10 @@
1
1
  import { cancelClockTaskSnapshot, clearClockTasksSnapshot, listClockSessionIdsSnapshot, listClockTasksSnapshot, resolveClockConfigSnapshot, scheduleClockTasksSnapshot, updateClockTaskSnapshot } from '../../../modules/llmswitch/bridge.js';
2
- import { getClockClientRegistry } from './clock-client-registry.js';
3
- import { normalizeWorkdir } from './clock-client-registry-utils.js';
2
+ import { getSessionClientRegistry } from './session-client-registry.js';
3
+ import { normalizeWorkdir } from './session-client-registry-utils.js';
4
4
  import { isLocalRequest } from './daemon-admin-routes.js';
5
- import { isTmuxSessionAlive, killManagedTmuxSession } from './tmux-session-probe.js';
6
- import { terminateManagedClientProcess } from './managed-process-probe.js';
7
- import { isClockManagedTerminationEnabled, normalizeTaskCreateItems, normalizeTaskPatch, parseBoolean, parsePositiveInt, parseString } from './clock-client-route-utils.js';
5
+ import { isTmuxSessionAlive } from './tmux-session-probe.js';
6
+ import { isSessionManagedTerminationEnabled, normalizeTaskCreateItems, normalizeTaskPatch, parseBoolean, parsePositiveInt, parseString } from './session-client-route-utils.js';
7
+ import { clearStopMessageTmuxScope, migrateStopMessageTmuxScope } from './stopmessage-scope-rebind.js';
8
8
  function rejectNonLocal(req, res) {
9
9
  if (isLocalRequest(req)) {
10
10
  return false;
@@ -12,9 +12,9 @@ function rejectNonLocal(req, res) {
12
12
  res.status(403).json({ error: { message: 'forbidden', code: 'forbidden' } });
13
13
  return true;
14
14
  }
15
- export function registerClockClientRoutes(app) {
16
- const registry = getClockClientRegistry();
17
- app.post('/daemon/clock-client/register', (req, res) => {
15
+ export function registerSessionClientRoutes(app) {
16
+ const registry = getSessionClientRegistry();
17
+ app.post('/daemon/session-client/register', (req, res) => {
18
18
  if (rejectNonLocal(req, res)) {
19
19
  return;
20
20
  }
@@ -31,6 +31,13 @@ export function registerClockClientRoutes(app) {
31
31
  const managedClientProcess = parseBoolean(body.managedClientProcess);
32
32
  const managedClientPid = parsePositiveInt(body.managedClientPid);
33
33
  const managedClientCommandHint = parseString(body.managedClientCommandHint);
34
+ const previousRecord = registry.findByDaemonId(daemonId);
35
+ const previousDaemonTmuxSessionId = parseString(previousRecord?.tmuxSessionId) ||
36
+ parseString(previousRecord?.sessionId);
37
+ const conversationSessionId = parseString(body.conversationSessionId);
38
+ const previousConversationTmuxSessionId = conversationSessionId
39
+ ? registry.resolveBoundTmuxSession(conversationSessionId)
40
+ : undefined;
34
41
  const rec = registry.register({
35
42
  daemonId,
36
43
  callbackUrl,
@@ -43,7 +50,6 @@ export function registerClockClientRoutes(app) {
43
50
  ...(managedClientPid ? { managedClientPid } : {}),
44
51
  ...(managedClientCommandHint ? { managedClientCommandHint } : {})
45
52
  });
46
- const conversationSessionId = parseString(body.conversationSessionId);
47
53
  if (conversationSessionId) {
48
54
  registry.bindConversationSession({
49
55
  conversationSessionId,
@@ -53,9 +59,23 @@ export function registerClockClientRoutes(app) {
53
59
  ...(rec.workdir ? { workdir: rec.workdir } : {})
54
60
  });
55
61
  }
62
+ const effectiveTmuxSessionId = parseString(rec.tmuxSessionId) || parseString(rec.sessionId);
63
+ const rebindOldTmuxCandidates = Array.from(new Set([previousDaemonTmuxSessionId, previousConversationTmuxSessionId]
64
+ .map((entry) => parseString(entry))
65
+ .filter((entry) => Boolean(entry))));
66
+ for (const oldTmuxSessionId of rebindOldTmuxCandidates) {
67
+ const rebindResult = migrateStopMessageTmuxScope({
68
+ oldTmuxSessionId,
69
+ newTmuxSessionId: effectiveTmuxSessionId,
70
+ reason: 'session_client_register'
71
+ });
72
+ if (rebindResult.migrated) {
73
+ console.log(`[stop_scope][rebind] stage=register daemon=${daemonId} old=${rebindResult.oldScope || 'n/a'} new=${rebindResult.newScope || 'n/a'} result=migrated`);
74
+ }
75
+ }
56
76
  res.status(200).json({ ok: true, record: rec });
57
77
  });
58
- app.post('/daemon/clock-client/heartbeat', (req, res) => {
78
+ app.post('/daemon/session-client/heartbeat', (req, res) => {
59
79
  if (rejectNonLocal(req, res)) {
60
80
  return;
61
81
  }
@@ -65,6 +85,9 @@ export function registerClockClientRoutes(app) {
65
85
  res.status(400).json({ error: { message: 'daemonId is required', code: 'bad_request' } });
66
86
  return;
67
87
  }
88
+ const previousRecord = registry.findByDaemonId(daemonId);
89
+ const previousTmuxSessionId = parseString(previousRecord?.tmuxSessionId) ||
90
+ parseString(previousRecord?.sessionId);
68
91
  const ok = registry.heartbeat(daemonId, {
69
92
  tmuxSessionId: parseString(body.tmuxSessionId) || parseString(body.sessionId),
70
93
  workdir: normalizeWorkdir(parseString(body.workdir) || parseString(body.cwd) || parseString(body.workingDirectory)),
@@ -77,9 +100,20 @@ export function registerClockClientRoutes(app) {
77
100
  res.status(404).json({ error: { message: 'daemon not found', code: 'not_found' } });
78
101
  return;
79
102
  }
103
+ const updatedRecord = registry.findByDaemonId(daemonId);
104
+ const updatedTmuxSessionId = parseString(updatedRecord?.tmuxSessionId) ||
105
+ parseString(updatedRecord?.sessionId);
106
+ const rebindResult = migrateStopMessageTmuxScope({
107
+ oldTmuxSessionId: previousTmuxSessionId,
108
+ newTmuxSessionId: updatedTmuxSessionId,
109
+ reason: 'session_client_heartbeat'
110
+ });
111
+ if (rebindResult.migrated) {
112
+ console.log(`[stop_scope][rebind] stage=heartbeat daemon=${daemonId} old=${rebindResult.oldScope || 'n/a'} new=${rebindResult.newScope || 'n/a'} result=migrated`);
113
+ }
80
114
  res.status(200).json({ ok: true });
81
115
  });
82
- app.post('/daemon/clock-client/unregister', (req, res) => {
116
+ app.post('/daemon/session-client/unregister', (req, res) => {
83
117
  if (rejectNonLocal(req, res)) {
84
118
  return;
85
119
  }
@@ -92,13 +126,13 @@ export function registerClockClientRoutes(app) {
92
126
  const ok = registry.unregister(daemonId);
93
127
  res.status(200).json({ ok });
94
128
  });
95
- app.get('/daemon/clock-client/list', (req, res) => {
129
+ app.get('/daemon/session-client/list', (req, res) => {
96
130
  if (rejectNonLocal(req, res)) {
97
131
  return;
98
132
  }
99
133
  res.status(200).json({ ok: true, records: registry.list() });
100
134
  });
101
- app.post('/daemon/clock-client/inject', async (req, res) => {
135
+ app.post('/daemon/session-client/inject', async (req, res) => {
102
136
  if (rejectNonLocal(req, res)) {
103
137
  return;
104
138
  }
@@ -137,20 +171,20 @@ export function registerClockClientRoutes(app) {
137
171
  }
138
172
  res.status(200).json({ ok: true, daemonId: result.daemonId });
139
173
  });
140
- app.get('/daemon/clock/tasks', async (req, res) => {
174
+ app.get('/daemon/session/tasks', async (req, res) => {
141
175
  if (rejectNonLocal(req, res)) {
142
176
  return;
143
177
  }
144
- const clockConfig = await resolveClockConfigSnapshot(undefined);
145
- if (!clockConfig) {
146
- res.status(500).json({ ok: false, reason: 'clock_config_unavailable' });
178
+ const sessionConfig = await resolveClockConfigSnapshot(undefined);
179
+ if (!sessionConfig) {
180
+ res.status(500).json({ ok: false, reason: 'session_config_unavailable' });
147
181
  return;
148
182
  }
149
183
  const querySessionId = parseString(req.query.sessionId);
150
184
  const sessionIds = querySessionId ? [querySessionId] : await listClockSessionIdsSnapshot();
151
185
  const sessions = [];
152
186
  for (const sessionId of sessionIds) {
153
- const tasks = await listClockTasksSnapshot({ sessionId, config: clockConfig });
187
+ const tasks = await listClockTasksSnapshot({ sessionId, config: sessionConfig });
154
188
  sessions.push({ sessionId, taskCount: tasks.length, tasks });
155
189
  }
156
190
  res.status(200).json({
@@ -159,7 +193,7 @@ export function registerClockClientRoutes(app) {
159
193
  records: registry.list()
160
194
  });
161
195
  });
162
- app.post('/daemon/clock/tasks', async (req, res) => {
196
+ app.post('/daemon/session/tasks', async (req, res) => {
163
197
  if (rejectNonLocal(req, res)) {
164
198
  return;
165
199
  }
@@ -174,19 +208,19 @@ export function registerClockClientRoutes(app) {
174
208
  res.status(400).json({ ok: false, reason: normalized.error });
175
209
  return;
176
210
  }
177
- const clockConfig = await resolveClockConfigSnapshot(undefined);
178
- if (!clockConfig) {
179
- res.status(500).json({ ok: false, reason: 'clock_config_unavailable' });
211
+ const sessionConfig = await resolveClockConfigSnapshot(undefined);
212
+ if (!sessionConfig) {
213
+ res.status(500).json({ ok: false, reason: 'session_config_unavailable' });
180
214
  return;
181
215
  }
182
216
  const scheduled = await scheduleClockTasksSnapshot({
183
217
  sessionId,
184
218
  items: normalized.items,
185
- config: clockConfig
219
+ config: sessionConfig
186
220
  });
187
221
  res.status(200).json({ ok: true, sessionId, scheduledCount: scheduled.length, scheduled });
188
222
  });
189
- app.patch('/daemon/clock/tasks', async (req, res) => {
223
+ app.patch('/daemon/session/tasks', async (req, res) => {
190
224
  if (rejectNonLocal(req, res)) {
191
225
  return;
192
226
  }
@@ -202,16 +236,16 @@ export function registerClockClientRoutes(app) {
202
236
  res.status(400).json({ ok: false, reason: normalizedPatch.error });
203
237
  return;
204
238
  }
205
- const clockConfig = await resolveClockConfigSnapshot(undefined);
206
- if (!clockConfig) {
207
- res.status(500).json({ ok: false, reason: 'clock_config_unavailable' });
239
+ const sessionConfig = await resolveClockConfigSnapshot(undefined);
240
+ if (!sessionConfig) {
241
+ res.status(500).json({ ok: false, reason: 'session_config_unavailable' });
208
242
  return;
209
243
  }
210
244
  const updated = await updateClockTaskSnapshot({
211
245
  sessionId,
212
246
  taskId,
213
247
  patch: normalizedPatch.patch,
214
- config: clockConfig
248
+ config: sessionConfig
215
249
  });
216
250
  if (!updated) {
217
251
  res.status(404).json({ ok: false, reason: 'task_not_found_or_invalid_patch' });
@@ -219,7 +253,7 @@ export function registerClockClientRoutes(app) {
219
253
  }
220
254
  res.status(200).json({ ok: true, sessionId, taskId, updated });
221
255
  });
222
- app.delete('/daemon/clock/tasks', async (req, res) => {
256
+ app.delete('/daemon/session/tasks', async (req, res) => {
223
257
  if (rejectNonLocal(req, res)) {
224
258
  return;
225
259
  }
@@ -229,79 +263,93 @@ export function registerClockClientRoutes(app) {
229
263
  res.status(400).json({ ok: false, reason: 'sessionId is required' });
230
264
  return;
231
265
  }
232
- const clockConfig = await resolveClockConfigSnapshot(undefined);
233
- if (!clockConfig) {
234
- res.status(500).json({ ok: false, reason: 'clock_config_unavailable' });
266
+ const sessionConfig = await resolveClockConfigSnapshot(undefined);
267
+ if (!sessionConfig) {
268
+ res.status(500).json({ ok: false, reason: 'session_config_unavailable' });
235
269
  return;
236
270
  }
237
271
  const taskId = parseString(body.taskId);
238
272
  if (taskId) {
239
- const removed = await cancelClockTaskSnapshot({ sessionId, taskId, config: clockConfig });
273
+ const removed = await cancelClockTaskSnapshot({ sessionId, taskId, config: sessionConfig });
240
274
  res.status(200).json({ ok: true, sessionId, taskId, removed });
241
275
  return;
242
276
  }
243
- const removedCount = await clearClockTasksSnapshot({ sessionId, config: clockConfig });
277
+ const removedCount = await clearClockTasksSnapshot({ sessionId, config: sessionConfig });
244
278
  res.status(200).json({ ok: true, sessionId, removedCount });
245
279
  });
246
- app.post('/daemon/clock/cleanup', async (req, res) => {
280
+ app.post('/daemon/session/cleanup', async (req, res) => {
247
281
  if (rejectNonLocal(req, res)) {
248
282
  return;
249
283
  }
250
284
  const body = req.body && typeof req.body === 'object' ? req.body : {};
251
285
  const mode = parseString(body.mode) || 'dead_tmux';
252
- const clockConfig = await resolveClockConfigSnapshot(undefined);
253
- if (!clockConfig) {
254
- res.status(500).json({ ok: false, reason: 'clock_config_unavailable' });
286
+ const sessionConfig = await resolveClockConfigSnapshot(undefined);
287
+ if (!sessionConfig) {
288
+ res.status(500).json({ ok: false, reason: 'session_config_unavailable' });
255
289
  return;
256
290
  }
257
291
  if (mode === 'unbind') {
258
- const conversationSessionId = parseString(body.conversationSessionId);
259
- if (!conversationSessionId) {
260
- res.status(400).json({ ok: false, reason: 'conversationSessionId is required for mode=unbind' });
292
+ const sessionScope = parseString(body.sessionScope) || parseString(body.conversationSessionId);
293
+ if (!sessionScope) {
294
+ res.status(400).json({ ok: false, reason: 'sessionScope is required for mode=unbind' });
261
295
  return;
262
296
  }
263
- const unbound = registry.unbindConversationSession(conversationSessionId);
297
+ const unbound = sessionScope.startsWith('sessiond.') || sessionScope.startsWith('tmux:')
298
+ ? registry.unbindSessionScope(sessionScope)
299
+ : registry.unbindConversationSession(sessionScope);
264
300
  const clearTasks = parseBoolean(body.clearTasks) === true;
265
301
  let cleared = 0;
266
302
  if (clearTasks) {
267
- cleared = await clearClockTasksSnapshot({ sessionId: conversationSessionId, config: clockConfig });
303
+ cleared = await clearClockTasksSnapshot({ sessionId: sessionScope, config: sessionConfig });
268
304
  }
269
- res.status(200).json({ ok: true, mode, unbound, cleared });
305
+ const clearedStopMessage = sessionScope.startsWith('tmux:')
306
+ ? clearStopMessageTmuxScope({
307
+ tmuxSessionId: sessionScope.slice('tmux:'.length),
308
+ reason: 'session_unbind'
309
+ })
310
+ : undefined;
311
+ res.status(200).json({ ok: true, mode, sessionScope, unbound, cleared, clearedStopMessage });
270
312
  return;
271
313
  }
272
314
  const modeSafe = mode.toLowerCase();
273
- const allowManagedTermination = parseBoolean(body.terminateManaged) ?? isClockManagedTerminationEnabled();
274
- const terminateHandlers = allowManagedTermination
275
- ? {
276
- terminateManagedTmuxSession: (tmuxSessionId) => killManagedTmuxSession(tmuxSessionId),
277
- terminateManagedClientProcess: (processInfo) => terminateManagedClientProcess(processInfo)
278
- }
279
- : {};
315
+ const requestedTerminateManaged = parseBoolean(body.terminateManaged) ?? isSessionManagedTerminationEnabled();
316
+ const allowManagedTermination = false;
280
317
  const cleanup = modeSafe === 'stale_heartbeat'
281
318
  ? registry.cleanupStaleHeartbeats({
282
- ...terminateHandlers,
283
319
  staleAfterMs: Number.isFinite(Number(body.staleAfterMs)) ? Number(body.staleAfterMs) : undefined
284
320
  })
285
321
  : registry.cleanupDeadTmuxSessions({
286
- isTmuxSessionAlive,
287
- ...terminateHandlers
322
+ isTmuxSessionAlive
288
323
  });
289
- const cleanupClockSessionIds = Array.from(new Set([
324
+ const cleanupSessionIds = Array.from(new Set([
290
325
  ...cleanup.removedConversationSessionIds,
291
326
  ...cleanup.removedTmuxSessionIds
292
327
  ]));
293
328
  let clearedTaskSessions = 0;
294
- for (const cleanupSessionId of cleanupClockSessionIds) {
295
- await clearClockTasksSnapshot({ sessionId: cleanupSessionId, config: clockConfig });
329
+ for (const cleanupSessionId of cleanupSessionIds) {
330
+ await clearClockTasksSnapshot({ sessionId: cleanupSessionId, config: sessionConfig });
296
331
  clearedTaskSessions += 1;
297
332
  }
333
+ let clearedStopMessageScopes = 0;
334
+ const removedTmuxIds = Array.from(new Set(cleanup.removedTmuxSessionIds));
335
+ for (const tmuxSessionId of removedTmuxIds) {
336
+ const cleared = clearStopMessageTmuxScope({
337
+ tmuxSessionId,
338
+ reason: modeSafe === 'stale_heartbeat' ? 'session_cleanup_stale' : 'session_cleanup_dead_tmux'
339
+ });
340
+ if (cleared.cleared) {
341
+ clearedStopMessageScopes += 1;
342
+ }
343
+ }
298
344
  res.status(200).json({
299
345
  ok: true,
300
346
  mode: modeSafe === 'stale_heartbeat' ? 'stale_heartbeat' : 'dead_tmux',
301
347
  terminateManaged: allowManagedTermination,
348
+ terminateManagedRequested: requestedTerminateManaged,
302
349
  cleanup,
303
- clearedTaskSessions
350
+ clearedTaskSessions,
351
+ clearedStopMessageScopes
304
352
  });
305
353
  });
306
354
  }
307
- //# sourceMappingURL=clock-client-routes.js.map
355
+ //# sourceMappingURL=session-client-routes.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"session-client-routes.js","sourceRoot":"","sources":["../../../../src/server/runtime/http-server/session-client-routes.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1 @@
1
+ export declare function toExactMatchSessionConfig(input: unknown): unknown;
@@ -1,4 +1,4 @@
1
- export function toExactMatchClockConfig(input) {
1
+ export function toExactMatchSessionConfig(input) {
2
2
  if (!input || typeof input !== 'object' || Array.isArray(input)) {
3
3
  return input;
4
4
  }
@@ -8,4 +8,4 @@ export function toExactMatchClockConfig(input) {
8
8
  dueWindowMs: 0
9
9
  };
10
10
  }
11
- //# sourceMappingURL=clock-daemon-inject-config.js.map
11
+ //# sourceMappingURL=session-daemon-inject-config.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"session-daemon-inject-config.js","sourceRoot":"","sources":["../../../../src/server/runtime/http-server/session-daemon-inject-config.ts"],"names":[],"mappings":"AAAA,MAAM,UAAU,yBAAyB,CAAC,KAAc;IACtD,IAAI,CAAC,KAAK,IAAI,OAAO,KAAK,KAAK,QAAQ,IAAI,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE,CAAC;QAChE,OAAO,KAAK,CAAC;IACf,CAAC;IACD,MAAM,MAAM,GAAG,KAAgC,CAAC;IAChD,OAAO;QACL,GAAG,MAAM;QACT,WAAW,EAAE,CAAC;KACf,CAAC;AACJ,CAAC"}
@@ -0,0 +1,28 @@
1
+ export type SessionDaemonInjectSkipLogInput = {
2
+ sessionId?: string;
3
+ injectReason?: string;
4
+ bindReason?: string;
5
+ };
6
+ export type SessionDaemonCleanupAuditLogInput = {
7
+ managedTerminationEnabled: boolean;
8
+ staleRemovedDaemonIds?: string[];
9
+ staleRemovedTmuxSessionIds?: string[];
10
+ deadRemovedDaemonIds?: string[];
11
+ deadRemovedTmuxSessionIds?: string[];
12
+ failedKillTmuxSessionIds?: string[];
13
+ failedKillManagedClientPids?: number[];
14
+ };
15
+ export declare function shouldLogSessionDaemonInjectSkip(args: {
16
+ cache: Map<string, number>;
17
+ input: SessionDaemonInjectSkipLogInput;
18
+ nowMs?: number;
19
+ maxEntries?: number;
20
+ }): boolean;
21
+ export declare function shouldLogSessionDaemonCleanupAudit(args: {
22
+ cache: Map<string, number>;
23
+ input: SessionDaemonCleanupAuditLogInput;
24
+ nowMs?: number;
25
+ maxEntries?: number;
26
+ cooldownMs?: number;
27
+ }): boolean;
28
+ export declare function shouldClearSessionTasksForInjectSkip(input: SessionDaemonInjectSkipLogInput): boolean;
@@ -0,0 +1,105 @@
1
+ const DEFAULT_SKIP_LOG_COOLDOWN_MS = 30_000;
2
+ const BENIGN_SKIP_LOG_COOLDOWN_MS = 10 * 60_000;
3
+ const CLEANUP_AUDIT_LOG_COOLDOWN_MS = 10 * 60_000;
4
+ const MAX_CACHE_ENTRIES = 2048;
5
+ function normalizeToken(value) {
6
+ if (typeof value !== 'string') {
7
+ return '';
8
+ }
9
+ return value.trim().toLowerCase();
10
+ }
11
+ function resolveCooldownMs(input) {
12
+ if (shouldClearSessionTasksForInjectSkip(input)) {
13
+ return BENIGN_SKIP_LOG_COOLDOWN_MS;
14
+ }
15
+ return DEFAULT_SKIP_LOG_COOLDOWN_MS;
16
+ }
17
+ function buildCacheKey(input) {
18
+ const sessionId = normalizeToken(input.sessionId) || 'unknown_session';
19
+ const injectReason = normalizeToken(input.injectReason) || 'unknown_inject_reason';
20
+ const bindReason = normalizeToken(input.bindReason) || 'unknown_bind_reason';
21
+ return `${sessionId}|${injectReason}|${bindReason}`;
22
+ }
23
+ function normalizeIdList(values) {
24
+ if (!Array.isArray(values) || values.length < 1) {
25
+ return '';
26
+ }
27
+ const normalized = values
28
+ .map((value) => normalizeToken(value))
29
+ .filter(Boolean)
30
+ .sort();
31
+ if (normalized.length < 1) {
32
+ return '';
33
+ }
34
+ return normalized.join(',');
35
+ }
36
+ function buildCleanupAuditCacheKey(input) {
37
+ const managedTerminationEnabled = input.managedTerminationEnabled ? '1' : '0';
38
+ const staleRemovedDaemonIds = normalizeIdList(input.staleRemovedDaemonIds);
39
+ const staleRemovedTmuxSessionIds = normalizeIdList(input.staleRemovedTmuxSessionIds);
40
+ const deadRemovedDaemonIds = normalizeIdList(input.deadRemovedDaemonIds);
41
+ const deadRemovedTmuxSessionIds = normalizeIdList(input.deadRemovedTmuxSessionIds);
42
+ const failedKillTmuxSessionIds = normalizeIdList(input.failedKillTmuxSessionIds);
43
+ const failedKillManagedClientPids = normalizeIdList(input.failedKillManagedClientPids);
44
+ return [
45
+ `managed:${managedTerminationEnabled}`,
46
+ `stale_daemon:${staleRemovedDaemonIds}`,
47
+ `stale_tmux:${staleRemovedTmuxSessionIds}`,
48
+ `dead_daemon:${deadRemovedDaemonIds}`,
49
+ `dead_tmux:${deadRemovedTmuxSessionIds}`,
50
+ `failed_tmux:${failedKillTmuxSessionIds}`,
51
+ `failed_pid:${failedKillManagedClientPids}`
52
+ ].join('|');
53
+ }
54
+ function trimCache(cache, maxEntries) {
55
+ if (cache.size <= maxEntries) {
56
+ return;
57
+ }
58
+ const overflow = cache.size - maxEntries;
59
+ let removed = 0;
60
+ for (const key of cache.keys()) {
61
+ cache.delete(key);
62
+ removed += 1;
63
+ if (removed >= overflow) {
64
+ break;
65
+ }
66
+ }
67
+ }
68
+ export function shouldLogSessionDaemonInjectSkip(args) {
69
+ const nowMs = typeof args.nowMs === 'number' && Number.isFinite(args.nowMs) ? args.nowMs : Date.now();
70
+ const maxEntries = typeof args.maxEntries === 'number' && Number.isFinite(args.maxEntries) && args.maxEntries > 0
71
+ ? Math.floor(args.maxEntries)
72
+ : MAX_CACHE_ENTRIES;
73
+ const key = buildCacheKey(args.input);
74
+ const cooldownMs = resolveCooldownMs(args.input);
75
+ const lastMs = args.cache.get(key);
76
+ if (typeof lastMs === 'number' && Number.isFinite(lastMs) && nowMs - lastMs < cooldownMs) {
77
+ return false;
78
+ }
79
+ args.cache.set(key, nowMs);
80
+ trimCache(args.cache, maxEntries);
81
+ return true;
82
+ }
83
+ export function shouldLogSessionDaemonCleanupAudit(args) {
84
+ const nowMs = typeof args.nowMs === 'number' && Number.isFinite(args.nowMs) ? args.nowMs : Date.now();
85
+ const maxEntries = typeof args.maxEntries === 'number' && Number.isFinite(args.maxEntries) && args.maxEntries > 0
86
+ ? Math.floor(args.maxEntries)
87
+ : MAX_CACHE_ENTRIES;
88
+ const cooldownMs = typeof args.cooldownMs === 'number' && Number.isFinite(args.cooldownMs) && args.cooldownMs >= 0
89
+ ? Math.floor(args.cooldownMs)
90
+ : CLEANUP_AUDIT_LOG_COOLDOWN_MS;
91
+ const key = buildCleanupAuditCacheKey(args.input);
92
+ const lastMs = args.cache.get(key);
93
+ if (typeof lastMs === 'number' && Number.isFinite(lastMs) && nowMs - lastMs < cooldownMs) {
94
+ return false;
95
+ }
96
+ args.cache.set(key, nowMs);
97
+ trimCache(args.cache, maxEntries);
98
+ return true;
99
+ }
100
+ export function shouldClearSessionTasksForInjectSkip(input) {
101
+ const injectReason = normalizeToken(input.injectReason);
102
+ const bindReason = normalizeToken(input.bindReason);
103
+ return injectReason === 'no_matching_tmux_session_daemon' && bindReason === 'no_binding_candidate';
104
+ }
105
+ //# sourceMappingURL=session-daemon-log-throttle.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"session-daemon-log-throttle.js","sourceRoot":"","sources":["../../../../src/server/runtime/http-server/session-daemon-log-throttle.ts"],"names":[],"mappings":"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"}
@@ -7,6 +7,17 @@ function sanitizeSegment(value) {
7
7
  .replace(/_+/g, '_')
8
8
  .replace(/^_+|_+$/g, '');
9
9
  }
10
+ function normalizeSessionDirEnvValue(raw) {
11
+ const normalized = String(raw || '').trim();
12
+ if (!normalized) {
13
+ return '';
14
+ }
15
+ const lowered = normalized.toLowerCase();
16
+ if (lowered === 'undefined' || lowered === 'null') {
17
+ return '';
18
+ }
19
+ return normalized;
20
+ }
10
21
  export function resolveServerScopedSessionDir(serverId) {
11
22
  try {
12
23
  const home = os.homedir();
@@ -24,7 +35,7 @@ export function resolveServerScopedSessionDir(serverId) {
24
35
  }
25
36
  }
26
37
  export function ensureServerScopedSessionDir(serverId) {
27
- const existing = String(process.env.ROUTECODEX_SESSION_DIR || '').trim();
38
+ const existing = normalizeSessionDirEnvValue(process.env.ROUTECODEX_SESSION_DIR);
28
39
  const resolved = resolveServerScopedSessionDir(serverId);
29
40
  if (!resolved) {
30
41
  return existing || null;
@@ -1 +1 @@
1
- {"version":3,"file":"session-dir.js","sourceRoot":"","sources":["../../../../src/server/runtime/http-server/session-dir.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,SAAS,CAAC;AACzB,OAAO,IAAI,MAAM,WAAW,CAAC;AAE7B,SAAS,eAAe,CAAC,KAAa;IACpC,OAAO,MAAM,CAAC,KAAK,IAAI,EAAE,CAAC;SACvB,IAAI,EAAE;SACN,OAAO,CAAC,kBAAkB,EAAE,GAAG,CAAC;SAChC,OAAO,CAAC,KAAK,EAAE,GAAG,CAAC;SACnB,OAAO,CAAC,UAAU,EAAE,EAAE,CAAC,CAAC;AAC7B,CAAC;AAED,MAAM,UAAU,6BAA6B,CAAC,QAAgB;IAC5D,IAAI,CAAC;QACH,MAAM,IAAI,GAAG,EAAE,CAAC,OAAO,EAAE,CAAC;QAC1B,IAAI,CAAC,IAAI,EAAE,CAAC;YACV,OAAO,IAAI,CAAC;QACd,CAAC;QACD,MAAM,IAAI,GAAG,eAAe,CAAC,QAAQ,CAAC,CAAC;QACvC,IAAI,CAAC,IAAI,EAAE,CAAC;YACV,OAAO,IAAI,CAAC;QACd,CAAC;QACD,OAAO,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE,aAAa,EAAE,UAAU,EAAE,IAAI,CAAC,CAAC;IAC1D,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,IAAI,CAAC;IACd,CAAC;AACH,CAAC;AAED,MAAM,UAAU,4BAA4B,CAAC,QAAgB;IAC3D,MAAM,QAAQ,GAAG,MAAM,CAAC,OAAO,CAAC,GAAG,CAAC,sBAAsB,IAAI,EAAE,CAAC,CAAC,IAAI,EAAE,CAAC;IACzE,MAAM,QAAQ,GAAG,6BAA6B,CAAC,QAAQ,CAAC,CAAC;IACzD,IAAI,CAAC,QAAQ,EAAE,CAAC;QACd,OAAO,QAAQ,IAAI,IAAI,CAAC;IAC1B,CAAC;IAED,wFAAwF;IACxF,gGAAgG;IAChG,uFAAuF;IACvF,8DAA8D;IAC9D,IAAI,QAAQ,EAAE,CAAC;QACb,IAAI,CAAC;YACH,MAAM,IAAI,GAAG,EAAE,CAAC,OAAO,EAAE,CAAC;YAC1B,MAAM,IAAI,GAAG,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE,aAAa,EAAE,UAAU,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;YACpE,MAAM,kBAAkB,GAAG,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC;YAClD,MAAM,kBAAkB,GAAG,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC;YAClD,MAAM,cAAc,GAAG,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;YAEtD,MAAM,WAAW,GACf,OAAO,CAAC,cAAc,CAAC;gBACvB,CAAC,kBAAkB,KAAK,cAAc,IAAI,kBAAkB,CAAC,UAAU,CAAC,GAAG,cAAc,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC;YAE3G,IAAI,CAAC,WAAW,EAAE,CAAC;gBACjB,OAAO,QAAQ,CAAC;YAClB,CAAC;YAED,IAAI,kBAAkB,KAAK,kBAAkB,EAAE,CAAC;gBAC9C,OAAO,QAAQ,CAAC;YAClB,CAAC;QACH,CAAC;QAAC,MAAM,CAAC;YACP,OAAO,QAAQ,CAAC;QAClB,CAAC;IACH,CAAC;IACD,OAAO,CAAC,GAAG,CAAC,sBAAsB,GAAG,QAAQ,CAAC;IAC9C,OAAO,QAAQ,CAAC;AAClB,CAAC"}
1
+ {"version":3,"file":"session-dir.js","sourceRoot":"","sources":["../../../../src/server/runtime/http-server/session-dir.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,14 @@
1
+ type SessionScopeResolutionArgs = {
2
+ userMeta: Record<string, unknown>;
3
+ bodyMeta: Record<string, unknown>;
4
+ headers?: Record<string, unknown>;
5
+ clientHeaders?: Record<string, string>;
6
+ daemonId?: string;
7
+ resolveTmuxSessionIdFromDaemon?: (daemonId: string | undefined) => string | undefined;
8
+ };
9
+ export type TmuxSessionResolution = {
10
+ tmuxSessionId?: string;
11
+ source: 'metadata' | 'body_metadata' | 'headers_or_api_key' | 'registry_by_daemon' | 'registry_by_binding' | 'none';
12
+ };
13
+ export declare function resolveTmuxSessionIdAndSource(args: SessionScopeResolutionArgs): TmuxSessionResolution;
14
+ export {};