@jsonstudio/llms 0.6.2172 → 0.6.2979

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 (362) hide show
  1. package/README.md +2 -0
  2. package/dist/conversion/compat/antigravity-session-signature.js +35 -1
  3. package/dist/conversion/compat/profiles/chat-gemini-cli.json +0 -7
  4. package/dist/conversion/compat/profiles/chat-gemini.json +0 -6
  5. package/dist/conversion/hub/core/detour-registry.d.ts +2 -0
  6. package/dist/conversion/hub/core/hub-context.d.ts +3 -1
  7. package/dist/conversion/hub/core/index.d.ts +1 -0
  8. package/dist/conversion/hub/core/stage-driver.js +2 -0
  9. package/dist/conversion/hub/format-adapters/anthropic-format-adapter.js +15 -4
  10. package/dist/conversion/hub/format-adapters/chat-format-adapter.js +15 -4
  11. package/dist/conversion/hub/format-adapters/gemini-format-adapter.js +15 -4
  12. package/dist/conversion/hub/format-adapters/responses-format-adapter.js +15 -4
  13. package/dist/conversion/hub/hub-feature.js +3 -2
  14. package/dist/conversion/hub/node-support.js +9 -4
  15. package/dist/conversion/hub/operation-table/operation-table-runner.js +10 -6
  16. package/dist/conversion/hub/operation-table/semantic-mappers/anthropic-mapper.js +2 -2
  17. package/dist/conversion/hub/operation-table/semantic-mappers/chat-mapper.js +10 -10
  18. package/dist/conversion/hub/operation-table/semantic-mappers/gemini-mapper.js +4 -8
  19. package/dist/conversion/hub/operation-table/semantic-mappers/responses-mapper.js +19 -65
  20. package/dist/conversion/hub/ops/operations.js +2 -121
  21. package/dist/conversion/hub/pipeline/compat/compat-engine.js +6 -0
  22. package/dist/conversion/hub/pipeline/compat/compat-pipeline-executor.d.ts +1 -1
  23. package/dist/conversion/hub/pipeline/compat/compat-pipeline-executor.js +33 -1042
  24. package/dist/conversion/hub/pipeline/compat/compat-profile-resolver.js +2 -0
  25. package/dist/conversion/hub/pipeline/compat/compat-profile-store.js +2 -0
  26. package/dist/conversion/hub/pipeline/compat/compat-types.d.ts +14 -17
  27. package/dist/conversion/hub/pipeline/compat/native-adapter-context.d.ts +3 -0
  28. package/dist/conversion/hub/pipeline/compat/native-adapter-context.js +39 -0
  29. package/dist/conversion/hub/pipeline/hub-pipeline.js +115 -262
  30. package/dist/conversion/hub/pipeline/session-identifiers.js +6 -196
  31. package/dist/conversion/hub/pipeline/stages/req_inbound/req_inbound_stage1_format_parse/index.d.ts +1 -2
  32. package/dist/conversion/hub/pipeline/stages/req_inbound/req_inbound_stage1_format_parse/index.js +37 -1
  33. package/dist/conversion/hub/pipeline/stages/req_inbound/req_inbound_stage2_semantic_map/index.js +12 -86
  34. package/dist/conversion/hub/pipeline/stages/req_inbound/req_inbound_stage2_semantic_map/semantic-lift.d.ts +14 -0
  35. package/dist/conversion/hub/pipeline/stages/req_inbound/req_inbound_stage2_semantic_map/semantic-lift.js +24 -0
  36. package/dist/conversion/hub/pipeline/stages/req_inbound/req_inbound_stage3_context_capture/archive/shell-like-tool-call-normalization-fallback.d.ts +2 -0
  37. package/dist/conversion/hub/pipeline/stages/req_inbound/req_inbound_stage3_context_capture/archive/shell-like-tool-call-normalization-fallback.js +157 -0
  38. package/dist/conversion/hub/pipeline/stages/req_inbound/req_inbound_stage3_context_capture/context-capture-orchestration.d.ts +16 -0
  39. package/dist/conversion/hub/pipeline/stages/req_inbound/req_inbound_stage3_context_capture/context-capture-orchestration.js +29 -0
  40. package/dist/conversion/hub/pipeline/stages/req_inbound/req_inbound_stage3_context_capture/context-factories.js +3 -1
  41. package/dist/conversion/hub/pipeline/stages/req_inbound/req_inbound_stage3_context_capture/index.d.ts +2 -15
  42. package/dist/conversion/hub/pipeline/stages/req_inbound/req_inbound_stage3_context_capture/index.js +8 -595
  43. package/dist/conversion/hub/pipeline/stages/req_inbound/req_inbound_stage3_context_capture/responses-context-snapshot.d.ts +8 -0
  44. package/dist/conversion/hub/pipeline/stages/req_inbound/req_inbound_stage3_context_capture/responses-context-snapshot.js +28 -0
  45. package/dist/conversion/hub/pipeline/stages/req_inbound/req_inbound_stage3_context_capture/tool-output-diagnostics.d.ts +2 -0
  46. package/dist/conversion/hub/pipeline/stages/req_inbound/req_inbound_stage3_context_capture/tool-output-diagnostics.js +4 -0
  47. package/dist/conversion/hub/pipeline/stages/req_inbound/req_inbound_stage3_context_capture/tool-output-snapshot.d.ts +10 -0
  48. package/dist/conversion/hub/pipeline/stages/req_inbound/req_inbound_stage3_context_capture/tool-output-snapshot.js +12 -0
  49. package/dist/conversion/hub/pipeline/stages/req_outbound/req_outbound_stage1_semantic_map/context-merge.d.ts +3 -0
  50. package/dist/conversion/hub/pipeline/stages/req_outbound/req_outbound_stage1_semantic_map/context-merge.js +30 -0
  51. package/dist/conversion/hub/pipeline/stages/req_outbound/req_outbound_stage1_semantic_map/index.js +9 -129
  52. package/dist/conversion/hub/pipeline/stages/req_outbound/req_outbound_stage2_format_build/index.d.ts +1 -4
  53. package/dist/conversion/hub/pipeline/stages/req_outbound/req_outbound_stage2_format_build/index.js +9 -26
  54. package/dist/conversion/hub/pipeline/stages/req_outbound/req_outbound_stage3_compat/index.js +32 -14
  55. package/dist/conversion/hub/pipeline/stages/req_process/req_process_stage1_tool_governance/index.d.ts +2 -2
  56. package/dist/conversion/hub/pipeline/stages/req_process/req_process_stage1_tool_governance/index.js +48 -8
  57. package/dist/conversion/hub/pipeline/stages/req_process/req_process_stage2_route_select/index.js +18 -3
  58. package/dist/conversion/hub/pipeline/stages/resp_inbound/resp_inbound_stage1_sse_decode/index.js +10 -198
  59. package/dist/conversion/hub/pipeline/stages/resp_inbound/resp_inbound_stage1_sse_decode/stream-json-sniffer.d.ts +3 -0
  60. package/dist/conversion/hub/pipeline/stages/resp_inbound/resp_inbound_stage1_sse_decode/stream-json-sniffer.js +81 -0
  61. package/dist/conversion/hub/pipeline/stages/resp_inbound/resp_inbound_stage2_format_parse/index.d.ts +1 -2
  62. package/dist/conversion/hub/pipeline/stages/resp_inbound/resp_inbound_stage2_format_parse/index.js +36 -1
  63. package/dist/conversion/hub/pipeline/stages/resp_inbound/resp_inbound_stage3_semantic_map/index.js +3 -1
  64. package/dist/conversion/hub/pipeline/stages/resp_outbound/resp_outbound_stage1_client_remap/chat-process-semantics-bridge.d.ts +6 -0
  65. package/dist/conversion/hub/pipeline/stages/resp_outbound/resp_outbound_stage1_client_remap/chat-process-semantics-bridge.js +17 -0
  66. package/dist/conversion/hub/pipeline/stages/resp_outbound/resp_outbound_stage1_client_remap/client-remap-protocol-switch.d.ts +9 -0
  67. package/dist/conversion/hub/pipeline/stages/resp_outbound/resp_outbound_stage1_client_remap/client-remap-protocol-switch.js +28 -0
  68. package/dist/conversion/hub/pipeline/stages/resp_outbound/resp_outbound_stage1_client_remap/index.d.ts +1 -2
  69. package/dist/conversion/hub/pipeline/stages/resp_outbound/resp_outbound_stage1_client_remap/index.js +14 -102
  70. package/dist/conversion/hub/pipeline/stages/resp_outbound/resp_outbound_stage2_sse_stream/index.js +3 -1
  71. package/dist/conversion/hub/pipeline/stages/resp_process/resp_process_stage1_tool_governance/index.js +12 -10
  72. package/dist/conversion/hub/pipeline/stages/resp_process/resp_process_stage2_finalize/index.js +6 -5
  73. package/dist/conversion/hub/pipeline/stages/resp_process/resp_process_stage3_servertool_orchestration/index.d.ts +11 -1
  74. package/dist/conversion/hub/pipeline/stages/resp_process/resp_process_stage3_servertool_orchestration/index.js +10 -32
  75. package/dist/conversion/hub/pipeline/stages/utils.js +17 -1
  76. package/dist/conversion/hub/pipeline/target-utils.js +14 -91
  77. package/dist/conversion/hub/pipelines/inbound.js +3 -1
  78. package/dist/conversion/hub/pipelines/outbound.js +2 -0
  79. package/dist/conversion/hub/policy/policy-engine.js +9 -3
  80. package/dist/conversion/hub/policy/protocol-spec.js +20 -148
  81. package/dist/conversion/hub/process/chat-process-anthropic-alias.d.ts +2 -0
  82. package/dist/conversion/hub/process/chat-process-anthropic-alias.js +36 -0
  83. package/dist/conversion/hub/process/chat-process-clock-directive-parser.d.ts +5 -0
  84. package/dist/conversion/hub/process/chat-process-clock-directive-parser.js +48 -0
  85. package/dist/conversion/hub/process/chat-process-clock-directives.d.ts +24 -0
  86. package/dist/conversion/hub/process/chat-process-clock-directives.js +98 -0
  87. package/dist/conversion/hub/process/chat-process-clock-reminder-directives.d.ts +8 -0
  88. package/dist/conversion/hub/process/chat-process-clock-reminder-directives.js +42 -0
  89. package/dist/conversion/hub/process/chat-process-clock-reminder-finalize.d.ts +14 -0
  90. package/dist/conversion/hub/process/chat-process-clock-reminder-finalize.js +10 -0
  91. package/dist/conversion/hub/process/chat-process-clock-reminder-messages.d.ts +5 -0
  92. package/dist/conversion/hub/process/chat-process-clock-reminder-messages.js +10 -0
  93. package/dist/conversion/hub/process/chat-process-clock-reminder-orchestration.d.ts +30 -0
  94. package/dist/conversion/hub/process/chat-process-clock-reminder-orchestration.js +68 -0
  95. package/dist/conversion/hub/process/chat-process-clock-reminder-time-tag.d.ts +9 -0
  96. package/dist/conversion/hub/process/chat-process-clock-reminder-time-tag.js +18 -0
  97. package/dist/conversion/hub/process/chat-process-clock-reminders.d.ts +2 -0
  98. package/dist/conversion/hub/process/chat-process-clock-reminders.js +104 -0
  99. package/dist/conversion/hub/process/chat-process-clock-tool-schemas.d.ts +3 -0
  100. package/dist/conversion/hub/process/chat-process-clock-tool-schemas.js +233 -0
  101. package/dist/conversion/hub/process/chat-process-clock-tools.d.ts +6 -0
  102. package/dist/conversion/hub/process/chat-process-clock-tools.js +41 -0
  103. package/dist/conversion/hub/process/chat-process-continue-execution.d.ts +11 -0
  104. package/dist/conversion/hub/process/chat-process-continue-execution.js +82 -0
  105. package/dist/conversion/hub/process/chat-process-governance-context.d.ts +15 -0
  106. package/dist/conversion/hub/process/chat-process-governance-context.js +7 -0
  107. package/dist/conversion/hub/process/chat-process-governance-finalize.d.ts +16 -0
  108. package/dist/conversion/hub/process/chat-process-governance-finalize.js +11 -0
  109. package/dist/conversion/hub/process/chat-process-governance-orchestration.d.ts +9 -0
  110. package/dist/conversion/hub/process/chat-process-governance-orchestration.js +47 -0
  111. package/dist/conversion/hub/process/chat-process-governed-control-ops.d.ts +8 -0
  112. package/dist/conversion/hub/process/chat-process-governed-control-ops.js +5 -0
  113. package/dist/conversion/hub/process/chat-process-governed-filter-call.d.ts +12 -0
  114. package/dist/conversion/hub/process/chat-process-governed-filter-call.js +18 -0
  115. package/dist/conversion/hub/process/chat-process-governed-merge.d.ts +8 -0
  116. package/dist/conversion/hub/process/chat-process-governed-merge.js +11 -0
  117. package/dist/conversion/hub/process/chat-process-media.d.ts +3 -0
  118. package/dist/conversion/hub/process/chat-process-media.js +18 -0
  119. package/dist/conversion/hub/process/chat-process-node-result.d.ts +23 -0
  120. package/dist/conversion/hub/process/chat-process-node-result.js +24 -0
  121. package/dist/conversion/hub/process/chat-process-pending-tool-sync.d.ts +14 -0
  122. package/dist/conversion/hub/process/chat-process-pending-tool-sync.js +52 -0
  123. package/dist/conversion/hub/process/chat-process-post-governed-normalization.d.ts +8 -0
  124. package/dist/conversion/hub/process/chat-process-post-governed-normalization.js +16 -0
  125. package/dist/conversion/hub/process/chat-process-review.d.ts +2 -0
  126. package/dist/conversion/hub/process/chat-process-review.js +8 -0
  127. package/dist/conversion/hub/process/chat-process-servertool-orchestration.d.ts +8 -0
  128. package/dist/conversion/hub/process/chat-process-servertool-orchestration.js +22 -0
  129. package/dist/conversion/hub/process/chat-process-tool-normalization.d.ts +2 -0
  130. package/dist/conversion/hub/process/chat-process-tool-normalization.js +4 -0
  131. package/dist/conversion/hub/process/chat-process-web-search-intent.d.ts +12 -0
  132. package/dist/conversion/hub/process/chat-process-web-search-intent.js +13 -0
  133. package/dist/conversion/hub/process/chat-process-web-search-tool-schema.d.ts +3 -0
  134. package/dist/conversion/hub/process/chat-process-web-search-tool-schema.js +4 -0
  135. package/dist/conversion/hub/process/chat-process-web-search.d.ts +8 -0
  136. package/dist/conversion/hub/process/chat-process-web-search.js +26 -0
  137. package/dist/conversion/hub/process/chat-process.d.ts +2 -19
  138. package/dist/conversion/hub/process/chat-process.js +12 -1701
  139. package/dist/conversion/hub/process/client-inject-readiness.d.ts +1 -0
  140. package/dist/conversion/hub/process/client-inject-readiness.js +4 -0
  141. package/dist/conversion/hub/registry.js +5 -2
  142. package/dist/conversion/hub/response/chat-response-utils.js +5 -86
  143. package/dist/conversion/hub/response/provider-response.d.ts +9 -0
  144. package/dist/conversion/hub/response/provider-response.js +6 -21
  145. package/dist/conversion/hub/response/response-mappers.js +2 -26
  146. package/dist/conversion/hub/response/response-runtime.js +2 -93
  147. package/dist/conversion/hub/semantic-mappers/anthropic-mapper.d.ts +1 -0
  148. package/dist/conversion/hub/semantic-mappers/anthropic-mapper.js +1 -0
  149. package/dist/conversion/hub/semantic-mappers/chat-mapper.d.ts +1 -0
  150. package/dist/conversion/hub/semantic-mappers/chat-mapper.js +1 -0
  151. package/dist/conversion/hub/semantic-mappers/gemini-mapper.d.ts +1 -0
  152. package/dist/conversion/hub/semantic-mappers/gemini-mapper.js +1 -0
  153. package/dist/conversion/hub/semantic-mappers/responses-mapper.d.ts +1 -0
  154. package/dist/conversion/hub/semantic-mappers/responses-mapper.js +1 -0
  155. package/dist/conversion/hub/snapshot-recorder.js +10 -3
  156. package/dist/conversion/hub/standardized-bridge.js +11 -288
  157. package/dist/conversion/hub/tool-governance/engine.js +5 -0
  158. package/dist/conversion/hub/tool-governance/rules.js +10 -10
  159. package/dist/conversion/hub/tool-session-compat.d.ts +2 -2
  160. package/dist/conversion/hub/tool-session-compat.js +17 -231
  161. package/dist/conversion/hub/tool-surface/tool-surface-engine.js +5 -3
  162. package/dist/conversion/responses/responses-host-policy.js +2 -12
  163. package/dist/conversion/responses/responses-openai-bridge/response-payload.js +6 -82
  164. package/dist/conversion/responses/responses-openai-bridge/types.d.ts +1 -0
  165. package/dist/conversion/responses/responses-openai-bridge.js +21 -54
  166. package/dist/conversion/shared/anthropic-message-utils.js +151 -13
  167. package/dist/conversion/shared/args-mapping.js +2 -146
  168. package/dist/conversion/shared/bridge-actions.js +203 -718
  169. package/dist/conversion/shared/bridge-id-utils.js +5 -71
  170. package/dist/conversion/shared/bridge-instructions.js +2 -1
  171. package/dist/conversion/shared/bridge-message-types.d.ts +2 -0
  172. package/dist/conversion/shared/bridge-message-utils.js +1 -2
  173. package/dist/conversion/shared/bridge-metadata.d.ts +1 -0
  174. package/dist/conversion/shared/bridge-metadata.js +4 -0
  175. package/dist/conversion/shared/bridge-policies.js +5 -189
  176. package/dist/conversion/shared/chat-envelope-validator.js +2 -126
  177. package/dist/conversion/shared/chat-output-normalizer.js +2 -54
  178. package/dist/conversion/shared/compaction-detect.js +2 -57
  179. package/dist/conversion/shared/gemini-tool-utils.js +9 -524
  180. package/dist/conversion/shared/jsonish.js +3 -160
  181. package/dist/conversion/shared/mcp-injection.js +3 -169
  182. package/dist/conversion/shared/media.js +2 -7
  183. package/dist/conversion/shared/metadata-passthrough.js +9 -46
  184. package/dist/conversion/shared/openai-finalizer.js +2 -1
  185. package/dist/conversion/shared/openai-message-normalize.js +11 -283
  186. package/dist/conversion/shared/output-content-normalizer.js +9 -112
  187. package/dist/conversion/shared/payload-budget.js +2 -85
  188. package/dist/conversion/shared/protocol-state.js +11 -7
  189. package/dist/conversion/shared/reasoning-mapping.js +2 -6
  190. package/dist/conversion/shared/reasoning-normalizer.js +4 -1
  191. package/dist/conversion/shared/reasoning-tool-normalizer.js +14 -126
  192. package/dist/conversion/shared/reasoning-tool-parser.js +4 -87
  193. package/dist/conversion/shared/reasoning-utils.js +2 -6
  194. package/dist/conversion/shared/responses-conversation-store.js +4 -82
  195. package/dist/conversion/shared/responses-output-builder.js +11 -47
  196. package/dist/conversion/shared/responses-reasoning-registry.js +7 -1
  197. package/dist/conversion/shared/responses-request-adapter.d.ts +7 -1
  198. package/dist/conversion/shared/responses-request-adapter.js +14 -1
  199. package/dist/conversion/shared/responses-response-utils.js +6 -7
  200. package/dist/conversion/shared/responses-tool-utils.d.ts +1 -0
  201. package/dist/conversion/shared/responses-tool-utils.js +90 -14
  202. package/dist/conversion/shared/runtime-metadata.js +13 -5
  203. package/dist/conversion/shared/streaming-text-extractor.js +2 -7
  204. package/dist/conversion/shared/text-markup-normalizer/normalize.d.ts +1 -1
  205. package/dist/conversion/shared/text-markup-normalizer/normalize.js +43 -17
  206. package/dist/conversion/shared/text-markup-normalizer.d.ts +1 -0
  207. package/dist/conversion/shared/text-markup-normalizer.js +1 -0
  208. package/dist/conversion/shared/thought-signature-validator.js +3 -2
  209. package/dist/conversion/shared/tool-argument-repairer.js +2 -2
  210. package/dist/conversion/shared/tool-call-id-manager.js +5 -7
  211. package/dist/conversion/shared/tool-call-utils.js +3 -45
  212. package/dist/conversion/shared/tool-canonicalizer.js +25 -29
  213. package/dist/conversion/shared/tool-filter-pipeline.js +4 -99
  214. package/dist/conversion/shared/tool-governor.d.ts +6 -0
  215. package/dist/conversion/shared/tool-governor.js +43 -125
  216. package/dist/conversion/shared/tool-harvester.js +2 -8
  217. package/dist/conversion/shared/tool-mapping.js +2 -5
  218. package/dist/conversion/shared/tooling.d.ts +0 -4
  219. package/dist/conversion/shared/tooling.js +18 -0
  220. package/dist/native/router_hotpath_napi.node +0 -0
  221. package/dist/router/virtual-router/engine/provider-key/parse.d.ts +1 -6
  222. package/dist/router/virtual-router/engine/provider-key/parse.js +1 -43
  223. package/dist/router/virtual-router/engine/routing-state/store.js +48 -12
  224. package/dist/router/virtual-router/engine-logging.js +4 -3
  225. package/dist/router/virtual-router/engine-selection/alias-selection.js +45 -83
  226. package/dist/router/virtual-router/engine-selection/key-parsing.js +9 -23
  227. package/dist/router/virtual-router/engine-selection/native-chat-process-clock-directive-parser.d.ts +20 -0
  228. package/dist/router/virtual-router/engine-selection/native-chat-process-clock-directive-parser.js +163 -0
  229. package/dist/router/virtual-router/engine-selection/native-chat-process-clock-reminder-directives.d.ts +7 -0
  230. package/dist/router/virtual-router/engine-selection/native-chat-process-clock-reminder-directives.js +103 -0
  231. package/dist/router/virtual-router/engine-selection/native-chat-process-clock-reminder-orchestration-semantics.d.ts +10 -0
  232. package/dist/router/virtual-router/engine-selection/native-chat-process-clock-reminder-orchestration-semantics.js +110 -0
  233. package/dist/router/virtual-router/engine-selection/native-chat-process-clock-reminder-semantics.d.ts +8 -0
  234. package/dist/router/virtual-router/engine-selection/native-chat-process-clock-reminder-semantics.js +281 -0
  235. package/dist/router/virtual-router/engine-selection/native-chat-process-clock-reminder-time-tag-semantics.d.ts +1 -0
  236. package/dist/router/virtual-router/engine-selection/native-chat-process-clock-reminder-time-tag-semantics.js +25 -0
  237. package/dist/router/virtual-router/engine-selection/native-chat-process-clock-reminders-semantics.d.ts +4 -0
  238. package/dist/router/virtual-router/engine-selection/native-chat-process-clock-reminders-semantics.js +44 -0
  239. package/dist/router/virtual-router/engine-selection/native-chat-process-clock-tool-schema-semantics.d.ts +2 -0
  240. package/dist/router/virtual-router/engine-selection/native-chat-process-clock-tool-schema-semantics.js +62 -0
  241. package/dist/router/virtual-router/engine-selection/native-chat-process-governance-semantics.d.ts +40 -0
  242. package/dist/router/virtual-router/engine-selection/native-chat-process-governance-semantics.js +484 -0
  243. package/dist/router/virtual-router/engine-selection/native-chat-process-governed-filter-semantics.d.ts +9 -0
  244. package/dist/router/virtual-router/engine-selection/native-chat-process-governed-filter-semantics.js +64 -0
  245. package/dist/router/virtual-router/engine-selection/native-chat-process-node-result-semantics.d.ts +5 -0
  246. package/dist/router/virtual-router/engine-selection/native-chat-process-node-result-semantics.js +163 -0
  247. package/dist/router/virtual-router/engine-selection/native-chat-process-post-governed-normalization-semantics.d.ts +1 -0
  248. package/dist/router/virtual-router/engine-selection/native-chat-process-post-governed-normalization-semantics.js +49 -0
  249. package/dist/router/virtual-router/engine-selection/native-chat-process-servertool-orchestration-semantics.d.ts +30 -0
  250. package/dist/router/virtual-router/engine-selection/native-chat-process-servertool-orchestration-semantics.js +446 -0
  251. package/dist/router/virtual-router/engine-selection/native-chat-process-web-search-intent-semantics.d.ts +1 -0
  252. package/dist/router/virtual-router/engine-selection/native-chat-process-web-search-intent-semantics.js +49 -0
  253. package/dist/router/virtual-router/engine-selection/native-hub-bridge-action-semantics.d.ts +134 -0
  254. package/dist/router/virtual-router/engine-selection/native-hub-bridge-action-semantics.js +729 -0
  255. package/dist/router/virtual-router/engine-selection/native-hub-bridge-policy-semantics.d.ts +62 -0
  256. package/dist/router/virtual-router/engine-selection/native-hub-bridge-policy-semantics.js +338 -0
  257. package/dist/router/virtual-router/engine-selection/native-hub-pipeline-edge-stage-semantics.d.ts +18 -0
  258. package/dist/router/virtual-router/engine-selection/native-hub-pipeline-edge-stage-semantics.js +317 -0
  259. package/dist/router/virtual-router/engine-selection/native-hub-pipeline-inbound-outbound-semantics.d.ts +22 -0
  260. package/dist/router/virtual-router/engine-selection/native-hub-pipeline-inbound-outbound-semantics.js +426 -0
  261. package/dist/router/virtual-router/engine-selection/native-hub-pipeline-orchestration-semantics.d.ts +57 -0
  262. package/dist/router/virtual-router/engine-selection/native-hub-pipeline-orchestration-semantics.js +705 -0
  263. package/dist/router/virtual-router/engine-selection/native-hub-pipeline-req-inbound-semantics.d.ts +46 -0
  264. package/dist/router/virtual-router/engine-selection/native-hub-pipeline-req-inbound-semantics.js +503 -0
  265. package/dist/router/virtual-router/engine-selection/native-hub-pipeline-req-outbound-semantics.d.ts +146 -0
  266. package/dist/router/virtual-router/engine-selection/native-hub-pipeline-req-outbound-semantics.js +570 -0
  267. package/dist/router/virtual-router/engine-selection/native-hub-pipeline-req-process-semantics.d.ts +25 -0
  268. package/dist/router/virtual-router/engine-selection/native-hub-pipeline-req-process-semantics.js +148 -0
  269. package/dist/router/virtual-router/engine-selection/native-hub-pipeline-resp-semantics.d.ts +25 -0
  270. package/dist/router/virtual-router/engine-selection/native-hub-pipeline-resp-semantics.js +637 -0
  271. package/dist/router/virtual-router/engine-selection/native-hub-pipeline-session-identifiers-semantics.d.ts +11 -0
  272. package/dist/router/virtual-router/engine-selection/native-hub-pipeline-session-identifiers-semantics.js +207 -0
  273. package/dist/router/virtual-router/engine-selection/native-hub-pipeline-target-semantics.d.ts +3 -0
  274. package/dist/router/virtual-router/engine-selection/native-hub-pipeline-target-semantics.js +128 -0
  275. package/dist/router/virtual-router/engine-selection/native-router-hotpath-analysis.d.ts +57 -0
  276. package/dist/router/virtual-router/engine-selection/native-router-hotpath-analysis.js +217 -0
  277. package/dist/router/virtual-router/engine-selection/native-router-hotpath-loader.d.ts +5 -0
  278. package/dist/router/virtual-router/engine-selection/native-router-hotpath-loader.js +284 -0
  279. package/dist/router/virtual-router/engine-selection/native-router-hotpath-policy.d.ts +5 -0
  280. package/dist/router/virtual-router/engine-selection/native-router-hotpath-policy.js +18 -0
  281. package/dist/router/virtual-router/engine-selection/native-router-hotpath-quota-buckets.d.ts +25 -0
  282. package/dist/router/virtual-router/engine-selection/native-router-hotpath-quota-buckets.js +85 -0
  283. package/dist/router/virtual-router/engine-selection/native-router-hotpath.d.ts +59 -0
  284. package/dist/router/virtual-router/engine-selection/native-router-hotpath.js +117 -0
  285. package/dist/router/virtual-router/engine-selection/native-shared-conversion-semantics.d.ts +76 -0
  286. package/dist/router/virtual-router/engine-selection/native-shared-conversion-semantics.js +1166 -0
  287. package/dist/router/virtual-router/engine-selection/native-virtual-router-alias-selection-semantics.d.ts +16 -0
  288. package/dist/router/virtual-router/engine-selection/native-virtual-router-alias-selection-semantics.js +96 -0
  289. package/dist/router/virtual-router/engine-selection/native-virtual-router-stop-message-actions-semantics.d.ts +6 -0
  290. package/dist/router/virtual-router/engine-selection/native-virtual-router-stop-message-actions-semantics.js +85 -0
  291. package/dist/router/virtual-router/engine-selection/native-virtual-router-stop-message-semantics.d.ts +9 -0
  292. package/dist/router/virtual-router/engine-selection/native-virtual-router-stop-message-semantics.js +70 -0
  293. package/dist/router/virtual-router/engine-selection/native-virtual-router-stop-message-state-semantics.d.ts +2 -0
  294. package/dist/router/virtual-router/engine-selection/native-virtual-router-stop-message-state-semantics.js +76 -0
  295. package/dist/router/virtual-router/engine-selection/route-utils.js +1 -1
  296. package/dist/router/virtual-router/engine-selection/tier-selection-antigravity-session-lease.d.ts +10 -0
  297. package/dist/router/virtual-router/engine-selection/tier-selection-antigravity-session-lease.js +231 -0
  298. package/dist/router/virtual-router/engine-selection/tier-selection-antigravity-target-split.d.ts +4 -0
  299. package/dist/router/virtual-router/engine-selection/tier-selection-antigravity-target-split.js +43 -0
  300. package/dist/router/virtual-router/engine-selection/tier-selection-quota-integration.d.ts +27 -0
  301. package/dist/router/virtual-router/engine-selection/tier-selection-quota-integration.js +116 -0
  302. package/dist/router/virtual-router/engine-selection/tier-selection-select.d.ts +1 -1
  303. package/dist/router/virtual-router/engine-selection/tier-selection-select.js +29 -129
  304. package/dist/router/virtual-router/engine-selection/tier-selection.js +2 -265
  305. package/dist/router/virtual-router/engine.js +258 -249
  306. package/dist/router/virtual-router/features.js +2 -2
  307. package/dist/router/virtual-router/routing-instructions.d.ts +5 -7
  308. package/dist/router/virtual-router/routing-instructions.js +93 -66
  309. package/dist/router/virtual-router/routing-stop-message-actions.js +91 -112
  310. package/dist/router/virtual-router/routing-stop-message-parser.js +9 -132
  311. package/dist/router/virtual-router/routing-stop-message-state-codec.d.ts +1 -0
  312. package/dist/router/virtual-router/routing-stop-message-state-codec.js +58 -71
  313. package/dist/router/virtual-router/sticky-session-store.js +4 -2
  314. package/dist/router/virtual-router/stop-message-file-resolver.d.ts +1 -0
  315. package/dist/router/virtual-router/stop-message-file-resolver.js +10 -0
  316. package/dist/router/virtual-router/stop-message-state-sync.d.ts +1 -1
  317. package/dist/router/virtual-router/stop-message-state-sync.js +3 -7
  318. package/dist/router/virtual-router/token-counter.js +0 -9
  319. package/dist/router/virtual-router/types.d.ts +9 -7
  320. package/dist/servertool/clock/config.js +23 -51
  321. package/dist/servertool/clock/io.js +1 -0
  322. package/dist/servertool/clock/session-scope.d.ts +2 -2
  323. package/dist/servertool/clock/session-scope.js +5 -47
  324. package/dist/servertool/engine.d.ts +9 -0
  325. package/dist/servertool/engine.js +196 -79
  326. package/dist/servertool/handlers/antigravity-thought-signature-bootstrap.js +2 -2
  327. package/dist/servertool/handlers/clock.js +1 -1
  328. package/dist/servertool/handlers/continue-execution.js +8 -4
  329. package/dist/servertool/handlers/followup-request-builder.js +18 -1
  330. package/dist/servertool/handlers/gemini-empty-reply-continue.js +7 -1
  331. package/dist/servertool/handlers/review.js +180 -0
  332. package/dist/servertool/handlers/stop-message-auto/blocked-report.js +59 -1
  333. package/dist/servertool/handlers/stop-message-auto/iflow-followup.d.ts +23 -2
  334. package/dist/servertool/handlers/stop-message-auto/iflow-followup.js +397 -89
  335. package/dist/servertool/handlers/stop-message-auto/routing-state.d.ts +5 -15
  336. package/dist/servertool/handlers/stop-message-auto/routing-state.js +29 -55
  337. package/dist/servertool/handlers/stop-message-auto/runtime-utils.d.ts +6 -0
  338. package/dist/servertool/handlers/stop-message-auto/runtime-utils.js +35 -61
  339. package/dist/servertool/handlers/stop-message-auto.js +392 -76
  340. package/dist/servertool/server-side-tools.d.ts +1 -0
  341. package/dist/servertool/server-side-tools.js +90 -52
  342. package/dist/servertool/types.d.ts +17 -0
  343. package/dist/tools/apply-patch/patch-text/normalize.js +11 -0
  344. package/dist/tools/exec-command/validator.d.ts +4 -1
  345. package/dist/tools/exec-command/validator.js +87 -3
  346. package/dist/tools/tool-registry.d.ts +7 -1
  347. package/dist/tools/tool-registry.js +3 -2
  348. package/package.json +115 -7
  349. package/dist/servertool/handlers/stop-message-stage-policy/bd-runtime.d.ts +0 -18
  350. package/dist/servertool/handlers/stop-message-stage-policy/bd-runtime.js +0 -398
  351. package/dist/servertool/handlers/stop-message-stage-policy/decision.d.ts +0 -9
  352. package/dist/servertool/handlers/stop-message-stage-policy/decision.js +0 -127
  353. package/dist/servertool/handlers/stop-message-stage-policy/observation.d.ts +0 -2
  354. package/dist/servertool/handlers/stop-message-stage-policy/observation.js +0 -179
  355. package/dist/servertool/handlers/stop-message-stage-policy/templates.d.ts +0 -4
  356. package/dist/servertool/handlers/stop-message-stage-policy/templates.js +0 -96
  357. package/dist/servertool/handlers/stop-message-stage-policy/text-utils.d.ts +0 -9
  358. package/dist/servertool/handlers/stop-message-stage-policy/text-utils.js +0 -89
  359. package/dist/servertool/handlers/stop-message-stage-policy/types.d.ts +0 -59
  360. package/dist/servertool/handlers/stop-message-stage-policy.d.ts +0 -3
  361. package/dist/servertool/handlers/stop-message-stage-policy.js +0 -2
  362. /package/dist/servertool/handlers/{stop-message-stage-policy/types.js → review.d.ts} +0 -0
@@ -1,54 +1,13 @@
1
+ import { deserializeStopMessageStateWithNative, serializeStopMessageStateWithNative } from './engine-selection/native-virtual-router-stop-message-state-semantics.js';
1
2
  export const DEFAULT_STOP_MESSAGE_MAX_REPEATS = 10;
2
3
  export function serializeStopMessageState(state) {
3
- return {
4
- ...(typeof state.stopMessageSource === 'string' && state.stopMessageSource.trim()
5
- ? { stopMessageSource: state.stopMessageSource }
6
- : {}),
7
- ...(typeof state.stopMessageText === 'string' && state.stopMessageText.trim()
8
- ? { stopMessageText: state.stopMessageText }
9
- : {}),
10
- ...(typeof state.stopMessageMaxRepeats === 'number' && Number.isFinite(state.stopMessageMaxRepeats)
11
- ? { stopMessageMaxRepeats: state.stopMessageMaxRepeats }
12
- : {}),
13
- ...(typeof state.stopMessageUsed === 'number' && Number.isFinite(state.stopMessageUsed)
14
- ? { stopMessageUsed: state.stopMessageUsed }
15
- : {}),
16
- ...(typeof state.stopMessageUpdatedAt === 'number' && Number.isFinite(state.stopMessageUpdatedAt)
17
- ? { stopMessageUpdatedAt: state.stopMessageUpdatedAt }
18
- : {}),
19
- ...(typeof state.stopMessageLastUsedAt === 'number' && Number.isFinite(state.stopMessageLastUsedAt)
20
- ? { stopMessageLastUsedAt: state.stopMessageLastUsedAt }
21
- : {}),
22
- ...(typeof state.stopMessageStage === 'string' && state.stopMessageStage.trim()
23
- ? { stopMessageStage: state.stopMessageStage.trim() }
24
- : {}),
25
- ...(typeof state.stopMessageStageMode === 'string' && state.stopMessageStageMode.trim()
26
- ? { stopMessageStageMode: state.stopMessageStageMode.trim() }
27
- : {}),
28
- ...(typeof state.stopMessageObservationHash === 'string' && state.stopMessageObservationHash.trim()
29
- ? { stopMessageObservationHash: state.stopMessageObservationHash.trim() }
30
- : {}),
31
- ...(typeof state.stopMessageObservationStableCount === 'number' && Number.isFinite(state.stopMessageObservationStableCount)
32
- ? { stopMessageObservationStableCount: Math.max(0, Math.floor(state.stopMessageObservationStableCount)) }
33
- : {}),
34
- ...(typeof state.stopMessageBdWorkState === 'string' && state.stopMessageBdWorkState.trim()
35
- ? { stopMessageBdWorkState: state.stopMessageBdWorkState.trim() }
36
- : {}),
37
- ...(typeof state.stopMessageAssignedIssueId === 'string' && state.stopMessageAssignedIssueId.trim()
38
- ? { stopMessageAssignedIssueId: state.stopMessageAssignedIssueId.trim() }
39
- : {}),
40
- ...(typeof state.stopMessageAssignedIssueSource === 'string' &&
41
- (state.stopMessageAssignedIssueSource === 'in_progress' ||
42
- state.stopMessageAssignedIssueSource === 'ready' ||
43
- state.stopMessageAssignedIssueSource === 'open')
44
- ? { stopMessageAssignedIssueSource: state.stopMessageAssignedIssueSource }
45
- : {}),
46
- ...(typeof state.stopMessageNoTaskSummaryUsed === 'boolean'
47
- ? { stopMessageNoTaskSummaryUsed: state.stopMessageNoTaskSummaryUsed }
48
- : {})
49
- };
4
+ return serializeStopMessageStateWithNative(state);
50
5
  }
51
6
  export function deserializeStopMessageState(data, state) {
7
+ const patch = deserializeStopMessageStateWithNative(data, state);
8
+ deserializeStopMessageStateFallback(patch, state);
9
+ }
10
+ function deserializeStopMessageStateFallback(data, state) {
52
11
  if (typeof data.stopMessageSource === 'string' && data.stopMessageSource.trim()) {
53
12
  state.stopMessageSource = data.stopMessageSource.trim();
54
13
  }
@@ -68,39 +27,28 @@ export function deserializeStopMessageState(data, state) {
68
27
  if (typeof data.stopMessageLastUsedAt === 'number' && Number.isFinite(data.stopMessageLastUsedAt)) {
69
28
  state.stopMessageLastUsedAt = data.stopMessageLastUsedAt;
70
29
  }
71
- if (typeof data.stopMessageStage === 'string' && data.stopMessageStage.trim()) {
72
- state.stopMessageStage = data.stopMessageStage.trim();
73
- }
74
30
  if (typeof data.stopMessageStageMode === 'string' && data.stopMessageStageMode.trim()) {
75
31
  const normalized = normalizeStopMessageStageMode(data.stopMessageStageMode);
76
32
  if (normalized) {
77
33
  state.stopMessageStageMode = normalized;
78
34
  }
79
35
  }
80
- // Keep stopMessage mode state armed consistently across old/new snapshots.
81
- if (!hasPersistedMaxRepeats) {
82
- ensureStopMessageModeMaxRepeats(state);
83
- }
84
- if (typeof data.stopMessageObservationHash === 'string' && data.stopMessageObservationHash.trim()) {
85
- state.stopMessageObservationHash = data.stopMessageObservationHash.trim();
86
- }
87
- if (typeof data.stopMessageObservationStableCount === 'number' && Number.isFinite(data.stopMessageObservationStableCount)) {
88
- state.stopMessageObservationStableCount = Math.max(0, Math.floor(data.stopMessageObservationStableCount));
89
- }
90
- if (typeof data.stopMessageBdWorkState === 'string' && data.stopMessageBdWorkState.trim()) {
91
- state.stopMessageBdWorkState = data.stopMessageBdWorkState.trim();
36
+ if (typeof data.stopMessageAiMode === 'string' && data.stopMessageAiMode.trim()) {
37
+ const normalizedAiMode = normalizeStopMessageAiMode(data.stopMessageAiMode);
38
+ if (normalizedAiMode) {
39
+ state.stopMessageAiMode = normalizedAiMode;
40
+ }
92
41
  }
93
- if (typeof data.stopMessageAssignedIssueId === 'string' && data.stopMessageAssignedIssueId.trim()) {
94
- state.stopMessageAssignedIssueId = data.stopMessageAssignedIssueId.trim();
42
+ if (typeof data.stopMessageAiSeedPrompt === 'string' && data.stopMessageAiSeedPrompt.trim()) {
43
+ state.stopMessageAiSeedPrompt = data.stopMessageAiSeedPrompt.trim();
95
44
  }
96
- if (typeof data.stopMessageAssignedIssueSource === 'string') {
97
- const source = data.stopMessageAssignedIssueSource.trim().toLowerCase();
98
- if (source === 'in_progress' || source === 'ready' || source === 'open') {
99
- state.stopMessageAssignedIssueSource = source;
100
- }
45
+ const history = normalizeStopMessageAiHistoryEntries(data.stopMessageAiHistory);
46
+ if (history.length > 0) {
47
+ state.stopMessageAiHistory = history;
101
48
  }
102
- if (typeof data.stopMessageNoTaskSummaryUsed === 'boolean') {
103
- state.stopMessageNoTaskSummaryUsed = data.stopMessageNoTaskSummaryUsed;
49
+ // Keep stopMessage mode state armed consistently across old/new snapshots.
50
+ if (!hasPersistedMaxRepeats) {
51
+ ensureStopMessageModeMaxRepeats(state);
104
52
  }
105
53
  }
106
54
  export function normalizeStopMessageStageMode(value) {
@@ -132,3 +80,42 @@ export function ensureStopMessageModeMaxRepeats(state) {
132
80
  state.stopMessageMaxRepeats = DEFAULT_STOP_MESSAGE_MAX_REPEATS;
133
81
  return true;
134
82
  }
83
+ export function normalizeStopMessageAiMode(value) {
84
+ if (typeof value !== 'string') {
85
+ return undefined;
86
+ }
87
+ const normalized = value.trim().toLowerCase();
88
+ if (normalized === 'on' || normalized === 'off') {
89
+ return normalized;
90
+ }
91
+ return undefined;
92
+ }
93
+ function normalizeStopMessageAiHistoryEntries(value) {
94
+ if (!Array.isArray(value)) {
95
+ return [];
96
+ }
97
+ const out = [];
98
+ for (const item of value) {
99
+ if (!item || typeof item !== 'object' || Array.isArray(item)) {
100
+ continue;
101
+ }
102
+ const record = item;
103
+ const normalized = {};
104
+ if (typeof record.ts === 'number' && Number.isFinite(record.ts)) {
105
+ normalized.ts = Math.floor(record.ts);
106
+ }
107
+ if (typeof record.round === 'number' && Number.isFinite(record.round)) {
108
+ normalized.round = Math.max(0, Math.floor(record.round));
109
+ }
110
+ for (const key of ['assistantText', 'reasoningText', 'responseExcerpt', 'followupText']) {
111
+ const raw = record[key];
112
+ if (typeof raw === 'string' && raw.trim()) {
113
+ normalized[key] = raw.trim();
114
+ }
115
+ }
116
+ if (Object.keys(normalized).length > 0) {
117
+ out.push(normalized);
118
+ }
119
+ }
120
+ return out.slice(-8);
121
+ }
@@ -6,7 +6,9 @@ const pendingWrites = new Map();
6
6
  function isPersistentKey(key) {
7
7
  if (!key)
8
8
  return false;
9
- return key.startsWith('session:') || key.startsWith('conversation:');
9
+ return key.startsWith('session:')
10
+ || key.startsWith('conversation:')
11
+ || key.startsWith('tmux:');
10
12
  }
11
13
  function resolveRoutecodexUserDir() {
12
14
  try {
@@ -77,7 +79,7 @@ function keyToFilename(key) {
77
79
  if (idx <= 0 || idx === key.length - 1) {
78
80
  return null;
79
81
  }
80
- const scope = key.substring(0, idx); // "session" | "conversation"
82
+ const scope = key.substring(0, idx); // "session" | "conversation" | "tmux"
81
83
  const rawId = key.substring(idx + 1);
82
84
  const safeId = rawId.replace(/[^a-zA-Z0-9_.-]/g, '_');
83
85
  return `${scope}-${safeId}.json`;
@@ -1 +1,2 @@
1
+ export declare function isStopMessageFileReference(raw: string): boolean;
1
2
  export declare function resolveStopMessageText(raw: string): string;
@@ -41,6 +41,16 @@ function resolveStopMessageFilePath(raw) {
41
41
  }
42
42
  return abs;
43
43
  }
44
+ export function isStopMessageFileReference(raw) {
45
+ let text = typeof raw === 'string' ? raw.trim() : '';
46
+ if (!text) {
47
+ return false;
48
+ }
49
+ if (text.startsWith('<') && text.endsWith('>') && text.length >= 3) {
50
+ text = text.slice(1, -1).trim();
51
+ }
52
+ return /^file:\/\//i.test(text);
53
+ }
44
54
  export function resolveStopMessageText(raw) {
45
55
  const abs = resolveStopMessageFilePath(raw);
46
56
  if (!abs) {
@@ -1,5 +1,5 @@
1
1
  import type { RoutingInstructionState } from './routing-instructions.js';
2
- type StopMessageSubset = Pick<RoutingInstructionState, 'stopMessageSource' | 'stopMessageText' | 'stopMessageMaxRepeats' | 'stopMessageUsed' | 'stopMessageStage' | 'stopMessageStageMode' | 'stopMessageObservationHash' | 'stopMessageObservationStableCount' | 'stopMessageBdWorkState' | 'stopMessageAssignedIssueId' | 'stopMessageAssignedIssueSource' | 'stopMessageNoTaskSummaryUsed' | 'stopMessageUpdatedAt' | 'stopMessageLastUsedAt'>;
2
+ type StopMessageSubset = Pick<RoutingInstructionState, 'stopMessageSource' | 'stopMessageText' | 'stopMessageMaxRepeats' | 'stopMessageUsed' | 'stopMessageStageMode' | 'stopMessageAiMode' | 'stopMessageAiSeedPrompt' | 'stopMessageAiHistory' | 'stopMessageUpdatedAt' | 'stopMessageLastUsedAt'>;
3
3
  /**
4
4
  * Decide whether we should overwrite in-memory stopMessage fields with persisted ones.
5
5
  *
@@ -41,14 +41,10 @@ export function mergeStopMessageFromPersisted(existing, persisted) {
41
41
  stopMessageText: persisted.stopMessageText,
42
42
  stopMessageMaxRepeats: persisted.stopMessageMaxRepeats,
43
43
  stopMessageUsed: persisted.stopMessageUsed,
44
- stopMessageStage: persisted.stopMessageStage,
45
44
  stopMessageStageMode: persisted.stopMessageStageMode,
46
- stopMessageObservationHash: persisted.stopMessageObservationHash,
47
- stopMessageObservationStableCount: persisted.stopMessageObservationStableCount,
48
- stopMessageBdWorkState: persisted.stopMessageBdWorkState,
49
- stopMessageAssignedIssueId: persisted.stopMessageAssignedIssueId,
50
- stopMessageAssignedIssueSource: persisted.stopMessageAssignedIssueSource,
51
- stopMessageNoTaskSummaryUsed: persisted.stopMessageNoTaskSummaryUsed,
45
+ stopMessageAiMode: persisted.stopMessageAiMode,
46
+ stopMessageAiSeedPrompt: persisted.stopMessageAiSeedPrompt,
47
+ stopMessageAiHistory: persisted.stopMessageAiHistory,
52
48
  stopMessageUpdatedAt: persisted.stopMessageUpdatedAt,
53
49
  stopMessageLastUsedAt: persisted.stopMessageLastUsedAt
54
50
  };
@@ -36,9 +36,6 @@ export function countRequestTokens(request) {
36
36
  if (request.parameters) {
37
37
  total += encodeText(JSON.stringify(request.parameters), encoder);
38
38
  }
39
- if (request.metadata) {
40
- total += encodeText(JSON.stringify(request.metadata), encoder);
41
- }
42
39
  return total;
43
40
  }
44
41
  function countMessageTokens(message, encoder) {
@@ -50,15 +47,9 @@ function countMessageTokens(message, encoder) {
50
47
  total += encodeText(JSON.stringify(call ?? {}), encoder);
51
48
  }
52
49
  }
53
- if (Array.isArray(message.metadata?.toolRuns)) {
54
- total += encodeText(JSON.stringify(message.metadata?.toolRuns), encoder);
55
- }
56
50
  if (message.name) {
57
51
  total += encodeText(message.name, encoder);
58
52
  }
59
- if (message.metadata) {
60
- total += encodeText(JSON.stringify(message.metadata), encoder);
61
- }
62
53
  if (message.tool_call_id) {
63
54
  total += encodeText(message.tool_call_id, encoder);
64
55
  }
@@ -370,6 +370,12 @@ export interface RouterMetadataInput {
370
370
  excludedProviderKeys?: string[];
371
371
  sessionId?: string;
372
372
  conversationId?: string;
373
+ clientTmuxSessionId?: string;
374
+ client_tmux_session_id?: string;
375
+ tmuxSessionId?: string;
376
+ tmux_session_id?: string;
377
+ stopMessageClientInjectSessionScope?: string;
378
+ stopMessageClientInjectScope?: string;
373
379
  responsesResume?: {
374
380
  previousRequestId?: string;
375
381
  restoredFromResponseId?: string;
@@ -471,14 +477,10 @@ export interface StopMessageStateSnapshot {
471
477
  stopMessageUsed?: number;
472
478
  stopMessageUpdatedAt?: number;
473
479
  stopMessageLastUsedAt?: number;
474
- stopMessageStage?: string;
475
480
  stopMessageStageMode?: 'on' | 'off' | 'auto';
476
- stopMessageObservationHash?: string;
477
- stopMessageObservationStableCount?: number;
478
- stopMessageBdWorkState?: string;
479
- stopMessageAssignedIssueId?: string;
480
- stopMessageAssignedIssueSource?: 'in_progress' | 'ready' | 'open';
481
- stopMessageNoTaskSummaryUsed?: boolean;
481
+ stopMessageAiMode?: 'on' | 'off';
482
+ stopMessageAiSeedPrompt?: string;
483
+ stopMessageAiHistory?: Array<Record<string, unknown>>;
482
484
  }
483
485
  export interface PreCommandStateSnapshot {
484
486
  preCommandScriptPath: string;
@@ -1,3 +1,4 @@
1
+ import { resolveClockConfigWithNative } from '../../router/virtual-router/engine-selection/native-chat-process-clock-reminder-semantics.js';
1
2
  export const CLOCK_CONFIG_DEFAULTS = {
2
3
  retentionMs: 20 * 60_000,
3
4
  dueWindowMs: 0,
@@ -5,56 +6,30 @@ export const CLOCK_CONFIG_DEFAULTS = {
5
6
  holdNonStreaming: true,
6
7
  holdMaxMs: 60_000
7
8
  };
8
- function parseBooleanWithDefault(value, fallback) {
9
- if (value === undefined) {
10
- return fallback;
11
- }
12
- if (typeof value === 'boolean') {
13
- return value;
14
- }
15
- if (typeof value === 'number') {
16
- if (value === 1)
17
- return true;
18
- if (value === 0)
19
- return false;
20
- return fallback;
21
- }
22
- if (typeof value === 'string') {
23
- const normalized = value.trim().toLowerCase();
24
- if (normalized === 'true' || normalized === '1' || normalized === 'yes' || normalized === 'on') {
25
- return true;
26
- }
27
- if (normalized === 'false' || normalized === '0' || normalized === 'no' || normalized === 'off') {
28
- return false;
29
- }
30
- }
31
- return fallback;
32
- }
33
- export function normalizeClockConfig(raw) {
34
- if (!raw || typeof raw !== 'object' || Array.isArray(raw)) {
9
+ function toClockConfigSnapshot(value) {
10
+ if (!value) {
35
11
  return null;
36
12
  }
37
- const record = raw;
38
- const enabled = record.enabled === true ||
39
- (typeof record.enabled === 'string' && record.enabled.trim().toLowerCase() === 'true') ||
40
- (typeof record.enabled === 'number' && record.enabled === 1);
41
- if (!enabled) {
13
+ if (value.enabled !== true ||
14
+ typeof value.retentionMs !== 'number' ||
15
+ typeof value.dueWindowMs !== 'number' ||
16
+ typeof value.tickMs !== 'number' ||
17
+ typeof value.holdNonStreaming !== 'boolean' ||
18
+ typeof value.holdMaxMs !== 'number') {
42
19
  return null;
43
20
  }
44
- const retentionMs = typeof record.retentionMs === 'number' && Number.isFinite(record.retentionMs) && record.retentionMs >= 0
45
- ? Math.floor(record.retentionMs)
46
- : CLOCK_CONFIG_DEFAULTS.retentionMs;
47
- const dueWindowMs = typeof record.dueWindowMs === 'number' && Number.isFinite(record.dueWindowMs) && record.dueWindowMs >= 0
48
- ? Math.floor(record.dueWindowMs)
49
- : CLOCK_CONFIG_DEFAULTS.dueWindowMs;
50
- const tickMs = typeof record.tickMs === 'number' && Number.isFinite(record.tickMs) && record.tickMs >= 0
51
- ? Math.floor(record.tickMs)
52
- : CLOCK_CONFIG_DEFAULTS.tickMs;
53
- const holdNonStreaming = parseBooleanWithDefault(record.holdNonStreaming, CLOCK_CONFIG_DEFAULTS.holdNonStreaming);
54
- const holdMaxMs = typeof record.holdMaxMs === 'number' && Number.isFinite(record.holdMaxMs) && record.holdMaxMs >= 0
55
- ? Math.floor(record.holdMaxMs)
56
- : CLOCK_CONFIG_DEFAULTS.holdMaxMs;
57
- return { enabled: true, retentionMs, dueWindowMs, tickMs, holdNonStreaming, holdMaxMs };
21
+ return {
22
+ enabled: true,
23
+ retentionMs: value.retentionMs,
24
+ dueWindowMs: value.dueWindowMs,
25
+ tickMs: value.tickMs,
26
+ holdNonStreaming: value.holdNonStreaming,
27
+ holdMaxMs: value.holdMaxMs
28
+ };
29
+ }
30
+ export function normalizeClockConfig(raw) {
31
+ const resolved = resolveClockConfigWithNative(raw, false);
32
+ return toClockConfigSnapshot(resolved);
58
33
  }
59
34
  /**
60
35
  * Resolve the effective clock config for a request/session.
@@ -64,13 +39,10 @@ export function normalizeClockConfig(raw) {
64
39
  * - If the config is explicitly present but disabled/invalid -> return null.
65
40
  */
66
41
  export function resolveClockConfig(raw) {
67
- const normalized = normalizeClockConfig(raw);
42
+ const resolved = resolveClockConfigWithNative(raw, raw === undefined);
43
+ const normalized = toClockConfigSnapshot(resolved);
68
44
  if (normalized) {
69
45
  return normalized;
70
46
  }
71
- // Important: only default-enable when the config is absent, not when it's explicitly disabled.
72
- if (raw === undefined) {
73
- return normalizeClockConfig({ enabled: true });
74
- }
75
47
  return null;
76
48
  }
@@ -6,6 +6,7 @@ export async function readJsonFile(filePath) {
6
6
  }
7
7
  export async function writeJsonFileAtomic(filePath, value) {
8
8
  const dir = path.dirname(filePath);
9
+ await fs.mkdir(dir, { recursive: true });
9
10
  const tmp = path.join(dir, `.tmp_${path.basename(filePath)}_${process.pid}_${Date.now()}_${Math.random().toString(16).slice(2)}`);
10
11
  const payload = JSON.stringify(value, null, 2);
11
12
  await fs.writeFile(tmp, payload, 'utf8');
@@ -1,3 +1,3 @@
1
- export declare function buildClockSessionScopeFromDaemonId(daemonId: string): string;
2
- export declare function extractClockDaemonIdFromSessionScope(sessionScope: string): string | null;
1
+ export declare function buildClockSessionScopeFromDaemonId(_daemonId: string): string;
2
+ export declare function extractClockDaemonIdFromSessionScope(_sessionScope: string): string | null;
3
3
  export declare function resolveClockSessionScope(primary?: Record<string, unknown> | null, fallback?: Record<string, unknown> | null): string | null;
@@ -1,52 +1,10 @@
1
- const CLOCK_DAEMON_SESSION_PREFIX = 'clockd.';
2
- function readToken(value) {
3
- return typeof value === 'string' && value.trim().length ? value.trim() : '';
4
- }
5
- function readRecordToken(record, keys) {
6
- if (!record) {
7
- return '';
8
- }
9
- for (const key of keys) {
10
- const value = readToken(record[key]);
11
- if (value) {
12
- return value;
13
- }
14
- }
1
+ import { resolveClockSessionScopeWithNative } from '../../router/virtual-router/engine-selection/native-chat-process-clock-reminder-semantics.js';
2
+ export function buildClockSessionScopeFromDaemonId(_daemonId) {
15
3
  return '';
16
4
  }
17
- export function buildClockSessionScopeFromDaemonId(daemonId) {
18
- const normalized = readToken(daemonId);
19
- if (!normalized) {
20
- return '';
21
- }
22
- return `${CLOCK_DAEMON_SESSION_PREFIX}${normalized}`;
23
- }
24
- export function extractClockDaemonIdFromSessionScope(sessionScope) {
25
- const normalized = readToken(sessionScope);
26
- if (!normalized.startsWith(CLOCK_DAEMON_SESSION_PREFIX)) {
27
- return null;
28
- }
29
- const daemonId = normalized.slice(CLOCK_DAEMON_SESSION_PREFIX.length).trim();
30
- return daemonId || null;
5
+ export function extractClockDaemonIdFromSessionScope(_sessionScope) {
6
+ return null;
31
7
  }
32
8
  export function resolveClockSessionScope(primary, fallback) {
33
- const daemonId = readRecordToken(primary, ['clockDaemonId', 'clockClientDaemonId', 'clock_daemon_id', 'clock_client_daemon_id']) ||
34
- readRecordToken(fallback, ['clockDaemonId', 'clockClientDaemonId', 'clock_daemon_id', 'clock_client_daemon_id']);
35
- if (daemonId) {
36
- const daemonScope = buildClockSessionScopeFromDaemonId(daemonId);
37
- if (daemonScope) {
38
- return daemonScope;
39
- }
40
- }
41
- const sessionId = readRecordToken(primary, ['sessionId', 'session_id']) ||
42
- readRecordToken(fallback, ['sessionId', 'session_id']);
43
- if (sessionId) {
44
- return sessionId;
45
- }
46
- const conversationId = readRecordToken(primary, ['conversationId', 'conversation_id']) ||
47
- readRecordToken(fallback, ['conversationId', 'conversation_id']);
48
- if (conversationId) {
49
- return conversationId;
50
- }
51
- return null;
9
+ return resolveClockSessionScopeWithNative(primary, fallback);
52
10
  }
@@ -19,6 +19,15 @@ export interface ServerToolOrchestrationOptions {
19
19
  __sse_responses?: unknown;
20
20
  format?: string;
21
21
  }>;
22
+ clientInjectDispatch?: (options: {
23
+ entryEndpoint: string;
24
+ requestId: string;
25
+ body?: JsonObject;
26
+ metadata?: JsonObject;
27
+ }) => Promise<{
28
+ ok: boolean;
29
+ reason?: string;
30
+ }>;
22
31
  providerInvoker?: ProviderInvoker;
23
32
  }
24
33
  export interface ServerToolOrchestrationResult {