@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,12 +1,11 @@
1
- import { getClockClientRegistry } from './clock-client-registry.js';
2
- import { isTmuxSessionAlive, killManagedTmuxSession } from './tmux-session-probe.js';
3
- import { terminateManagedClientProcess } from './managed-process-probe.js';
1
+ import { getSessionClientRegistry } from './session-client-registry.js';
2
+ import { isTmuxSessionAlive } from './tmux-session-probe.js';
4
3
  import { logProcessLifecycle } from '../../../utils/process-lifecycle-logger.js';
5
4
  const DEFAULT_REAPER_INTERVAL_MS = 5 * 60 * 1000; // 5 minutes
6
5
  const DEFAULT_GRACE_PERIOD_MS = 30 * 1000; // 30 seconds grace before killing
7
6
  function readReaperIntervalFromEnv() {
8
- const raw = String(process.env.ROUTECODEX_CLOCK_REAPER_INTERVAL_MS
9
- ?? process.env.RCC_CLOCK_REAPER_INTERVAL_MS
7
+ const raw = String(process.env.ROUTECODEX_SESSION_REAPER_INTERVAL_MS
8
+ ?? process.env.RCC_SESSION_REAPER_INTERVAL_MS
10
9
  ?? '').trim();
11
10
  const parsed = Number(raw);
12
11
  if (Number.isFinite(parsed) && parsed >= 1000) {
@@ -15,8 +14,8 @@ function readReaperIntervalFromEnv() {
15
14
  return DEFAULT_REAPER_INTERVAL_MS;
16
15
  }
17
16
  function readGracePeriodFromEnv() {
18
- const raw = String(process.env.ROUTECODEX_CLOCK_REAPER_GRACE_MS
19
- ?? process.env.RCC_CLOCK_REAPER_GRACE_MS
17
+ const raw = String(process.env.ROUTECODEX_SESSION_REAPER_GRACE_MS
18
+ ?? process.env.RCC_SESSION_REAPER_GRACE_MS
20
19
  ?? '').trim();
21
20
  const parsed = Number(raw);
22
21
  if (Number.isFinite(parsed) && parsed >= 0) {
@@ -24,24 +23,9 @@ function readGracePeriodFromEnv() {
24
23
  }
25
24
  return DEFAULT_GRACE_PERIOD_MS;
26
25
  }
27
- function isManagedTerminationEnabled() {
28
- const raw = String(process.env.ROUTECODEX_CLOCK_REAPER_TERMINATE_MANAGED
29
- ?? process.env.RCC_CLOCK_REAPER_TERMINATE_MANAGED
30
- ?? '').trim().toLowerCase();
31
- if (!raw) {
32
- return false;
33
- }
34
- if (raw === '1' || raw === 'true' || raw === 'yes' || raw === 'on') {
35
- return true;
36
- }
37
- if (raw === '0' || raw === 'false' || raw === 'no' || raw === 'off') {
38
- return false;
39
- }
40
- return false;
41
- }
42
26
  function shouldLogStaleOnlyCleanup() {
43
- const raw = String(process.env.ROUTECODEX_CLOCK_REAPER_LOG_STALE_ONLY
44
- ?? process.env.RCC_CLOCK_REAPER_LOG_STALE_ONLY
27
+ const raw = String(process.env.ROUTECODEX_SESSION_REAPER_LOG_STALE_ONLY
28
+ ?? process.env.RCC_SESSION_REAPER_LOG_STALE_ONLY
45
29
  ?? '').trim().toLowerCase();
46
30
  if (!raw) {
47
31
  return false;
@@ -54,7 +38,7 @@ function shouldLogStaleOnlyCleanup() {
54
38
  }
55
39
  return false;
56
40
  }
57
- export class ClockReaper {
41
+ export class SessionReaper {
58
42
  timer = null;
59
43
  intervalMs;
60
44
  gracePeriodMs;
@@ -63,7 +47,7 @@ export class ClockReaper {
63
47
  constructor(config) {
64
48
  this.intervalMs = config?.intervalMs ?? readReaperIntervalFromEnv();
65
49
  this.gracePeriodMs = config?.gracePeriodMs ?? readGracePeriodFromEnv();
66
- this.enableManagedTermination = config?.enableManagedTermination ?? isManagedTerminationEnabled();
50
+ this.enableManagedTermination = false;
67
51
  this.logStaleOnlyCleanup = shouldLogStaleOnlyCleanup();
68
52
  }
69
53
  start() {
@@ -73,8 +57,8 @@ export class ClockReaper {
73
57
  this.timer = setInterval(() => {
74
58
  void this.runCleanup().catch((err) => {
75
59
  logProcessLifecycle({
76
- event: 'clock_reaper_error',
77
- source: 'clock-client-reaper',
60
+ event: 'session_reaper_error',
61
+ source: 'session-client-reaper',
78
62
  details: { error: err instanceof Error ? err.message : String(err) }
79
63
  });
80
64
  });
@@ -84,8 +68,8 @@ export class ClockReaper {
84
68
  this.timer.unref();
85
69
  }
86
70
  logProcessLifecycle({
87
- event: 'clock_reaper_started',
88
- source: 'clock-client-reaper',
71
+ event: 'session_reaper_started',
72
+ source: 'session-client-reaper',
89
73
  details: {
90
74
  intervalMs: this.intervalMs,
91
75
  gracePeriodMs: this.gracePeriodMs,
@@ -100,25 +84,18 @@ export class ClockReaper {
100
84
  clearInterval(this.timer);
101
85
  this.timer = null;
102
86
  logProcessLifecycle({
103
- event: 'clock_reaper_stopped',
104
- source: 'clock-client-reaper',
87
+ event: 'session_reaper_stopped',
88
+ source: 'session-client-reaper',
105
89
  details: {}
106
90
  });
107
91
  }
108
92
  }
109
93
  async runCleanup() {
110
- const registry = getClockClientRegistry();
94
+ const registry = getSessionClientRegistry();
111
95
  const now = Date.now();
112
- const terminateHandlers = this.enableManagedTermination
113
- ? {
114
- terminateManagedTmuxSession: (tmuxSessionId) => killManagedTmuxSession(tmuxSessionId),
115
- terminateManagedClientProcess: (processInfo) => terminateManagedClientProcess(processInfo)
116
- }
117
- : {};
118
96
  // 先清理僵死 tmux 会话
119
97
  const deadTmuxResult = registry.cleanupDeadTmuxSessions({
120
- isTmuxSessionAlive,
121
- ...terminateHandlers
98
+ isTmuxSessionAlive
122
99
  });
123
100
  // 再清理心跳过期的客户端(但不终止进程,仅移除记录)
124
101
  const staleResult = registry.cleanupStaleHeartbeats({
@@ -142,8 +119,8 @@ export class ClockReaper {
142
119
  return;
143
120
  }
144
121
  logProcessLifecycle({
145
- event: 'clock_reaper_cleanup',
146
- source: 'clock-client-reaper',
122
+ event: 'session_reaper_cleanup',
123
+ source: 'session-client-reaper',
147
124
  details: {
148
125
  result: hasStaleOnlyCleanup ? 'stale_only_cleanup' : 'cleanup_performed',
149
126
  deadTmuxRemoved: deadTmuxResult.removedTmuxSessionIds.length,
@@ -169,20 +146,20 @@ export class ClockReaper {
169
146
  }
170
147
  // 单例
171
148
  let globalReaper = null;
172
- export function getClockReaper(config) {
149
+ export function getSessionReaper(config) {
173
150
  if (!globalReaper) {
174
- globalReaper = new ClockReaper(config);
151
+ globalReaper = new SessionReaper(config);
175
152
  }
176
153
  return globalReaper;
177
154
  }
178
- export function startClockReaper(config) {
179
- const reaper = getClockReaper(config);
155
+ export function startSessionReaper(config) {
156
+ const reaper = getSessionReaper(config);
180
157
  reaper.start();
181
158
  }
182
- export function stopClockReaper() {
159
+ export function stopSessionReaper() {
183
160
  if (globalReaper) {
184
161
  globalReaper.stop();
185
162
  globalReaper = null;
186
163
  }
187
164
  }
188
- //# sourceMappingURL=clock-client-reaper.js.map
165
+ //# sourceMappingURL=session-client-reaper.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"session-client-reaper.js","sourceRoot":"","sources":["../../../../src/server/runtime/http-server/session-client-reaper.ts"],"names":[],"mappings":"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"}
@@ -1,4 +1,4 @@
1
- export type ClockClientRecord = {
1
+ export type SessionClientRecord = {
2
2
  daemonId: string;
3
3
  tmuxSessionId?: string;
4
4
  sessionId?: string;
@@ -16,27 +16,30 @@ export type ClockClientRecord = {
16
16
  lastInjectAtMs?: number;
17
17
  lastError?: string;
18
18
  };
19
- export type ClockClientInjectArgs = {
19
+ export type SessionClientInjectArgs = {
20
20
  tmuxSessionId?: string;
21
+ tmuxTarget?: string;
21
22
  sessionId?: string;
22
23
  workdir?: string;
24
+ clientType?: string;
25
+ tmuxOnly?: boolean;
23
26
  text: string;
24
27
  requestId?: string;
25
28
  source?: string;
26
29
  };
27
- export type ClockClientInjectResult = {
30
+ export type SessionClientInjectResult = {
28
31
  ok: boolean;
29
32
  daemonId?: string;
30
33
  reason?: string;
31
34
  };
32
- export type ClockConversationBindArgs = {
35
+ export type SessionConversationBindArgs = {
33
36
  conversationSessionId: string;
34
37
  tmuxSessionId?: string;
35
38
  daemonId?: string;
36
39
  clientType?: string;
37
40
  workdir?: string;
38
41
  };
39
- export type ClockCleanupResult = {
42
+ export type SessionCleanupResult = {
40
43
  removedDaemonIds: string[];
41
44
  removedTmuxSessionIds: string[];
42
45
  removedConversationSessionIds: string[];
@@ -47,7 +50,7 @@ export type ClockCleanupResult = {
47
50
  failedKillManagedClientPids: number[];
48
51
  skippedKillManagedClientPids: number[];
49
52
  };
50
- export type ClockStaleCleanupResult = ClockCleanupResult & {
53
+ export type SessionStaleCleanupResult = SessionCleanupResult & {
51
54
  staleAfterMs: number;
52
55
  };
53
56
  type ManagedProcessInfo = {
@@ -58,6 +61,7 @@ type ManagedProcessInfo = {
58
61
  };
59
62
  export declare function normalizeString(value: unknown): string | undefined;
60
63
  export declare function normalizeWorkdir(value: unknown): string | undefined;
64
+ export declare function isWorkdirCompatible(recordWorkdirRaw: unknown, hintWorkdirRaw: unknown): boolean;
61
65
  export declare function resolveHeartbeatTtlMs(): number;
62
66
  export declare function resolveManagedTmuxSessionState(args: {
63
67
  previousManagedTmuxSession?: boolean;
@@ -70,18 +74,18 @@ export declare function resolveManagedClientProcessState(args: {
70
74
  export declare function normalizePositiveInt(value: unknown): number | undefined;
71
75
  export declare function removeConversationMappingsByTmuxSession(conversationToTmuxSession: Map<string, string>, tmuxSessionIdRaw: string): string[];
72
76
  export declare function cleanupStaleHeartbeatsFromRegistry(args: {
73
- records: Map<string, ClockClientRecord>;
77
+ records: Map<string, SessionClientRecord>;
74
78
  conversationToTmuxSession: Map<string, string>;
75
79
  nowMs?: number;
76
80
  staleAfterMs?: number;
77
81
  terminateManagedTmuxSession?: (tmuxSessionId: string) => boolean;
78
82
  terminateManagedClientProcess?: (processInfo: ManagedProcessInfo) => boolean;
79
- }): ClockStaleCleanupResult;
83
+ }): SessionStaleCleanupResult;
80
84
  export declare function cleanupDeadTmuxSessionsFromRegistry(args: {
81
- records: Map<string, ClockClientRecord>;
85
+ records: Map<string, SessionClientRecord>;
82
86
  conversationToTmuxSession: Map<string, string>;
83
87
  isTmuxSessionAlive: (tmuxSessionId: string) => boolean;
84
88
  terminateManagedTmuxSession?: (tmuxSessionId: string) => boolean;
85
89
  terminateManagedClientProcess?: (processInfo: ManagedProcessInfo) => boolean;
86
- }): ClockCleanupResult;
90
+ }): SessionCleanupResult;
87
91
  export {};
@@ -24,9 +24,30 @@ export function normalizeWorkdir(value) {
24
24
  }
25
25
  return resolved;
26
26
  }
27
+ function isSameOrDescendantPath(parentDir, childDir) {
28
+ const relative = path.relative(parentDir, childDir);
29
+ if (!relative) {
30
+ return true;
31
+ }
32
+ if (relative === '..') {
33
+ return false;
34
+ }
35
+ if (relative.startsWith(`..${path.sep}`)) {
36
+ return false;
37
+ }
38
+ return !path.isAbsolute(relative);
39
+ }
40
+ export function isWorkdirCompatible(recordWorkdirRaw, hintWorkdirRaw) {
41
+ const recordWorkdir = normalizeWorkdir(recordWorkdirRaw);
42
+ const hintWorkdir = normalizeWorkdir(hintWorkdirRaw);
43
+ if (!recordWorkdir || !hintWorkdir) {
44
+ return false;
45
+ }
46
+ return isSameOrDescendantPath(recordWorkdir, hintWorkdir) || isSameOrDescendantPath(hintWorkdir, recordWorkdir);
47
+ }
27
48
  export function resolveHeartbeatTtlMs() {
28
- const raw = String(process.env.ROUTECODEX_CLOCK_CLIENT_HEARTBEAT_TTL_MS
29
- || process.env.RCC_CLOCK_CLIENT_HEARTBEAT_TTL_MS
49
+ const raw = String(process.env.ROUTECODEX_SESSION_CLIENT_HEARTBEAT_TTL_MS
50
+ || process.env.RCC_SESSION_CLIENT_HEARTBEAT_TTL_MS
30
51
  || '').trim();
31
52
  const parsed = raw ? Number.parseInt(raw, 10) : NaN;
32
53
  if (Number.isFinite(parsed) && parsed >= 5_000) {
@@ -79,6 +100,22 @@ export function removeConversationMappingsByTmuxSession(conversationToTmuxSessio
79
100
  }
80
101
  return removed;
81
102
  }
103
+ function hasOtherDaemonForTmuxSession(args) {
104
+ const targetTmuxSessionId = normalizeString(args.tmuxSessionId);
105
+ if (!targetTmuxSessionId) {
106
+ return false;
107
+ }
108
+ for (const [daemonId, record] of args.records.entries()) {
109
+ if (daemonId === args.daemonId) {
110
+ continue;
111
+ }
112
+ const recordTmuxSessionId = normalizeString(record.tmuxSessionId) ?? normalizeString(record.sessionId);
113
+ if (recordTmuxSessionId === targetTmuxSessionId) {
114
+ return true;
115
+ }
116
+ }
117
+ return false;
118
+ }
82
119
  export function cleanupStaleHeartbeatsFromRegistry(args) {
83
120
  const nowMs = Number.isFinite(args.nowMs) ? Math.floor(args.nowMs) : Date.now();
84
121
  const staleAfterMs = Number.isFinite(args.staleAfterMs)
@@ -98,6 +135,9 @@ export function cleanupStaleHeartbeatsFromRegistry(args) {
98
135
  continue;
99
136
  }
100
137
  const tmuxSessionId = normalizeString(record.tmuxSessionId) ?? normalizeString(record.sessionId);
138
+ const hasSharedTmuxPeer = tmuxSessionId
139
+ ? hasOtherDaemonForTmuxSession({ records: args.records, daemonId, tmuxSessionId })
140
+ : false;
101
141
  if (tmuxSessionId) {
102
142
  // Guardrail: stale heartbeat cleanup must never terminate tmux sessions.
103
143
  skippedKillTmuxSessionIds.push(tmuxSessionId);
@@ -114,16 +154,18 @@ export function cleanupStaleHeartbeatsFromRegistry(args) {
114
154
  const conversationSessionIds = Array.isArray(record.conversationSessionIds)
115
155
  ? record.conversationSessionIds.filter((item) => normalizeString(item))
116
156
  : [];
117
- for (const conversationSessionId of conversationSessionIds) {
118
- const mapped = args.conversationToTmuxSession.get(conversationSessionId);
119
- if (mapped && (!tmuxSessionId || mapped === tmuxSessionId)) {
120
- args.conversationToTmuxSession.delete(conversationSessionId);
121
- removedConversationSessionIdsSet.add(conversationSessionId);
157
+ if (!hasSharedTmuxPeer) {
158
+ for (const conversationSessionId of conversationSessionIds) {
159
+ const mapped = args.conversationToTmuxSession.get(conversationSessionId);
160
+ if (mapped && (!tmuxSessionId || mapped === tmuxSessionId)) {
161
+ args.conversationToTmuxSession.delete(conversationSessionId);
162
+ removedConversationSessionIdsSet.add(conversationSessionId);
163
+ }
122
164
  }
123
- }
124
- if (tmuxSessionId) {
125
- for (const conversationSessionId of removeConversationMappingsByTmuxSession(args.conversationToTmuxSession, tmuxSessionId)) {
126
- removedConversationSessionIdsSet.add(conversationSessionId);
165
+ if (tmuxSessionId) {
166
+ for (const conversationSessionId of removeConversationMappingsByTmuxSession(args.conversationToTmuxSession, tmuxSessionId)) {
167
+ removedConversationSessionIdsSet.add(conversationSessionId);
168
+ }
127
169
  }
128
170
  }
129
171
  args.records.delete(daemonId);
@@ -156,7 +198,21 @@ export function cleanupDeadTmuxSessionsFromRegistry(args) {
156
198
  const killedProcessOnce = new Set();
157
199
  const processKillOutcome = new Map();
158
200
  for (const [daemonId, record] of args.records.entries()) {
201
+ const tmuxTarget = normalizeString(record.tmuxTarget);
202
+ // Process-managed records without tmux target are non-tmux clients.
203
+ // Skip dead-tmux cleanup for these records to avoid terminating
204
+ // foreground-managed client processes by mistake.
205
+ if (record.managedClientProcess && !record.managedTmuxSession && !tmuxTarget) {
206
+ const managedClientPid = normalizePositiveInt(record.managedClientPid);
207
+ if (managedClientPid) {
208
+ skippedKillManagedClientPids.push(managedClientPid);
209
+ }
210
+ continue;
211
+ }
159
212
  const tmuxSessionId = normalizeString(record.tmuxSessionId) ?? normalizeString(record.sessionId);
213
+ const hasSharedTmuxPeer = tmuxSessionId
214
+ ? hasOtherDaemonForTmuxSession({ records: args.records, daemonId, tmuxSessionId })
215
+ : false;
160
216
  if (!tmuxSessionId) {
161
217
  continue;
162
218
  }
@@ -249,16 +305,18 @@ export function cleanupDeadTmuxSessionsFromRegistry(args) {
249
305
  const conversationSessionIds = Array.isArray(record.conversationSessionIds)
250
306
  ? record.conversationSessionIds.filter((item) => normalizeString(item))
251
307
  : [];
252
- for (const conversationSessionId of conversationSessionIds) {
253
- const mapped = args.conversationToTmuxSession.get(conversationSessionId);
254
- if (mapped === tmuxSessionId) {
255
- args.conversationToTmuxSession.delete(conversationSessionId);
308
+ if (!hasSharedTmuxPeer) {
309
+ for (const conversationSessionId of conversationSessionIds) {
310
+ const mapped = args.conversationToTmuxSession.get(conversationSessionId);
311
+ if (mapped === tmuxSessionId) {
312
+ args.conversationToTmuxSession.delete(conversationSessionId);
313
+ removedConversationSessionIdsSet.add(conversationSessionId);
314
+ }
315
+ }
316
+ for (const conversationSessionId of removeConversationMappingsByTmuxSession(args.conversationToTmuxSession, tmuxSessionId)) {
256
317
  removedConversationSessionIdsSet.add(conversationSessionId);
257
318
  }
258
319
  }
259
- for (const conversationSessionId of removeConversationMappingsByTmuxSession(args.conversationToTmuxSession, tmuxSessionId)) {
260
- removedConversationSessionIdsSet.add(conversationSessionId);
261
- }
262
320
  args.records.delete(daemonId);
263
321
  }
264
322
  return {
@@ -273,4 +331,4 @@ export function cleanupDeadTmuxSessionsFromRegistry(args) {
273
331
  skippedKillManagedClientPids
274
332
  };
275
333
  }
276
- //# sourceMappingURL=clock-client-registry-utils.js.map
334
+ //# sourceMappingURL=session-client-registry-utils.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"session-client-registry-utils.js","sourceRoot":"","sources":["../../../../src/server/runtime/http-server/session-client-registry-utils.ts"],"names":[],"mappings":"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"}
@@ -1,7 +1,13 @@
1
- import type { ClockCleanupResult, ClockClientInjectArgs, ClockClientInjectResult, ClockClientRecord, ClockConversationBindArgs, ClockStaleCleanupResult } from './clock-client-registry-utils.js';
2
- export declare class ClockClientRegistry {
1
+ import type { SessionCleanupResult, SessionClientInjectArgs, SessionClientInjectResult, SessionClientRecord, SessionConversationBindArgs, SessionStaleCleanupResult } from './session-client-registry-utils.js';
2
+ export declare class SessionClientRegistry {
3
3
  private readonly records;
4
4
  private readonly conversationToTmuxSession;
5
+ private bindingsLoaded;
6
+ private bindingsStorePath;
7
+ private normalizeSessionDirEnvValue;
8
+ private resolveBindingsStorePath;
9
+ private ensureConversationBindingsLoaded;
10
+ private persistConversationBindings;
5
11
  register(input: {
6
12
  daemonId: string;
7
13
  callbackUrl: string;
@@ -14,7 +20,7 @@ export declare class ClockClientRegistry {
14
20
  managedClientProcess?: boolean;
15
21
  managedClientPid?: number;
16
22
  managedClientCommandHint?: string;
17
- }): ClockClientRecord;
23
+ }): SessionClientRecord;
18
24
  heartbeat(daemonId: string, input?: {
19
25
  tmuxSessionId?: string;
20
26
  workdir?: string;
@@ -24,13 +30,19 @@ export declare class ClockClientRegistry {
24
30
  managedClientCommandHint?: string;
25
31
  }): boolean;
26
32
  unregister(daemonId: string): boolean;
27
- list(): ClockClientRecord[];
28
- findByDaemonId(daemonIdRaw: string): ClockClientRecord | undefined;
33
+ list(): SessionClientRecord[];
34
+ findByDaemonId(daemonIdRaw: string): SessionClientRecord | undefined;
29
35
  unbindConversationSession(conversationSessionIdRaw: string): {
30
36
  ok: boolean;
31
37
  removed: boolean;
32
38
  daemonIds: string[];
33
39
  };
40
+ unbindSessionScope(scopeRaw: string): {
41
+ ok: boolean;
42
+ removed: boolean;
43
+ daemonIds: string[];
44
+ tmuxSessionIds: string[];
45
+ };
34
46
  cleanupStaleHeartbeats(args?: {
35
47
  nowMs?: number;
36
48
  staleAfterMs?: number;
@@ -41,7 +53,7 @@ export declare class ClockClientRegistry {
41
53
  commandHint?: string;
42
54
  clientType?: string;
43
55
  }) => boolean;
44
- }): ClockStaleCleanupResult;
56
+ }): SessionStaleCleanupResult;
45
57
  cleanupDeadTmuxSessions(args: {
46
58
  isTmuxSessionAlive: (tmuxSessionId: string) => boolean;
47
59
  terminateManagedTmuxSession?: (tmuxSessionId: string) => boolean;
@@ -51,18 +63,21 @@ export declare class ClockClientRegistry {
51
63
  commandHint?: string;
52
64
  clientType?: string;
53
65
  }) => boolean;
54
- }): ClockCleanupResult;
66
+ }): SessionCleanupResult;
55
67
  private isAlive;
56
68
  private pickAliveCandidates;
57
69
  private resolveNoBindingReason;
58
- bindConversationSession(args: ClockConversationBindArgs): {
70
+ bindConversationSession(args: SessionConversationBindArgs): {
59
71
  ok: boolean;
60
72
  reason?: string;
61
73
  daemonId?: string;
62
74
  tmuxSessionId?: string;
63
75
  };
76
+ resolveBoundTmuxSession(conversationSessionIdRaw: string): string | undefined;
77
+ resolveBoundWorkdir(conversationSessionIdRaw: string): string | undefined;
64
78
  private resolveInjectTmuxSessionId;
65
- inject(args: ClockClientInjectArgs): Promise<ClockClientInjectResult>;
79
+ inject(args: SessionClientInjectArgs): Promise<SessionClientInjectResult>;
66
80
  }
67
- export declare function getClockClientRegistry(): ClockClientRegistry;
68
- export declare function injectClockClientPrompt(args: ClockClientInjectArgs): Promise<void>;
81
+ export declare function getSessionClientRegistry(): SessionClientRegistry;
82
+ export declare function injectSessionClientPromptWithResult(args: SessionClientInjectArgs): Promise<SessionClientInjectResult>;
83
+ export declare function injectSessionClientPrompt(args: SessionClientInjectArgs): Promise<void>;