@jsonstudio/llms 0.6.2172 → 0.6.3214

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 (524) hide show
  1. package/README.md +2 -0
  2. package/dist/conversion/args-mapping.js +8 -0
  3. package/dist/conversion/bridge-actions.js +367 -0
  4. package/dist/conversion/bridge-id-utils.js +13 -0
  5. package/dist/conversion/{shared/bridge-instructions.js → bridge-instructions.js} +2 -1
  6. package/dist/conversion/{shared/bridge-message-utils.d.ts → bridge-message-utils.d.ts} +1 -1
  7. package/dist/conversion/{shared/bridge-message-utils.js → bridge-message-utils.js} +5 -150
  8. package/dist/conversion/{shared/bridge-metadata.d.ts → bridge-metadata.d.ts} +1 -0
  9. package/dist/conversion/bridge-metadata.js +5 -0
  10. package/dist/conversion/bridge-policies.js +11 -0
  11. package/dist/conversion/codecs/gemini-openai-codec.js +27 -8
  12. package/dist/conversion/codecs/responses-openai-codec.js +1 -1
  13. package/dist/conversion/{shared/compaction-detect.d.ts → compaction-detect.d.ts} +1 -1
  14. package/dist/conversion/compaction-detect.js +4 -0
  15. package/dist/conversion/compat/actions/apply-patch-fixer.js +2 -2
  16. package/dist/conversion/compat/actions/deepseek-web-response.d.ts +0 -1
  17. package/dist/conversion/compat/actions/deepseek-web-response.js +15 -405
  18. package/dist/conversion/compat/actions/harvest-tool-calls-from-text.js +1 -1
  19. package/dist/conversion/compat/actions/lmstudio-responses-fc-ids.js +1 -1
  20. package/dist/conversion/compat/actions/qwen-transform.js +74 -2
  21. package/dist/conversion/compat/actions/snapshot.js +1 -1
  22. package/dist/conversion/compat/antigravity-session-signature.js +71 -1
  23. package/dist/conversion/compat/profiles/chat-deepseek-web.json +0 -22
  24. package/dist/conversion/compat/profiles/chat-gemini-cli.json +0 -7
  25. package/dist/conversion/compat/profiles/chat-gemini.json +0 -6
  26. package/dist/conversion/compat/profiles/chat-glm.json +251 -72
  27. package/dist/conversion/compat/profiles/chat-iflow.json +174 -39
  28. package/dist/conversion/compat/profiles/chat-lmstudio.json +43 -14
  29. package/dist/conversion/hub/core/detour-registry.d.ts +2 -0
  30. package/dist/conversion/hub/core/hub-context.d.ts +3 -1
  31. package/dist/conversion/hub/core/index.d.ts +1 -0
  32. package/dist/conversion/hub/core/stage-driver.js +2 -0
  33. package/dist/conversion/hub/format-adapters/anthropic-format-adapter.js +15 -4
  34. package/dist/conversion/hub/format-adapters/chat-format-adapter.js +15 -4
  35. package/dist/conversion/hub/format-adapters/gemini-format-adapter.js +15 -4
  36. package/dist/conversion/hub/format-adapters/responses-format-adapter.js +15 -4
  37. package/dist/conversion/hub/hub-feature.js +3 -2
  38. package/dist/conversion/hub/node-support.js +9 -4
  39. package/dist/conversion/hub/operation-table/operation-table-runner.js +12 -8
  40. package/dist/conversion/hub/operation-table/semantic-mappers/anthropic-mapper.js +3 -3
  41. package/dist/conversion/hub/operation-table/semantic-mappers/chat-mapper.js +16 -13
  42. package/dist/conversion/hub/operation-table/semantic-mappers/gemini-mapper.js +6 -10
  43. package/dist/conversion/hub/operation-table/semantic-mappers/responses-mapper.js +21 -73
  44. package/dist/conversion/hub/ops/operations.js +2 -121
  45. package/dist/conversion/hub/pipeline/compat/compat-engine.js +6 -0
  46. package/dist/conversion/hub/pipeline/compat/compat-pipeline-executor.d.ts +1 -1
  47. package/dist/conversion/hub/pipeline/compat/compat-pipeline-executor.js +33 -1042
  48. package/dist/conversion/hub/pipeline/compat/compat-profile-resolver.js +2 -0
  49. package/dist/conversion/hub/pipeline/compat/compat-profile-store.js +2 -0
  50. package/dist/conversion/hub/pipeline/compat/compat-types.d.ts +14 -17
  51. package/dist/conversion/hub/pipeline/compat/native-adapter-context.d.ts +3 -0
  52. package/dist/conversion/hub/pipeline/compat/native-adapter-context.js +39 -0
  53. package/dist/conversion/hub/pipeline/hub-pipeline.d.ts +1 -0
  54. package/dist/conversion/hub/pipeline/hub-pipeline.js +165 -265
  55. package/dist/conversion/hub/pipeline/session-identifiers.js +6 -196
  56. package/dist/conversion/hub/pipeline/stages/req_inbound/req_inbound_stage1_format_parse/index.d.ts +1 -2
  57. package/dist/conversion/hub/pipeline/stages/req_inbound/req_inbound_stage1_format_parse/index.js +37 -1
  58. package/dist/conversion/hub/pipeline/stages/req_inbound/req_inbound_stage2_semantic_map/index.d.ts +1 -1
  59. package/dist/conversion/hub/pipeline/stages/req_inbound/req_inbound_stage2_semantic_map/index.js +69 -81
  60. package/dist/conversion/hub/pipeline/stages/req_inbound/req_inbound_stage2_semantic_map/semantic-lift.d.ts +14 -0
  61. package/dist/conversion/hub/pipeline/stages/req_inbound/req_inbound_stage2_semantic_map/semantic-lift.js +24 -0
  62. package/dist/conversion/hub/pipeline/stages/req_inbound/req_inbound_stage3_context_capture/archive/shell-like-tool-call-normalization-fallback.d.ts +2 -0
  63. package/dist/conversion/hub/pipeline/stages/req_inbound/req_inbound_stage3_context_capture/archive/shell-like-tool-call-normalization-fallback.js +157 -0
  64. package/dist/conversion/hub/pipeline/stages/req_inbound/req_inbound_stage3_context_capture/context-capture-orchestration.d.ts +16 -0
  65. package/dist/conversion/hub/pipeline/stages/req_inbound/req_inbound_stage3_context_capture/context-capture-orchestration.js +29 -0
  66. package/dist/conversion/hub/pipeline/stages/req_inbound/req_inbound_stage3_context_capture/context-factories.js +3 -1
  67. package/dist/conversion/hub/pipeline/stages/req_inbound/req_inbound_stage3_context_capture/index.d.ts +2 -15
  68. package/dist/conversion/hub/pipeline/stages/req_inbound/req_inbound_stage3_context_capture/index.js +8 -595
  69. package/dist/conversion/hub/pipeline/stages/req_inbound/req_inbound_stage3_context_capture/responses-context-snapshot.d.ts +8 -0
  70. package/dist/conversion/hub/pipeline/stages/req_inbound/req_inbound_stage3_context_capture/responses-context-snapshot.js +28 -0
  71. package/dist/conversion/hub/pipeline/stages/req_inbound/req_inbound_stage3_context_capture/tool-output-diagnostics.d.ts +2 -0
  72. package/dist/conversion/hub/pipeline/stages/req_inbound/req_inbound_stage3_context_capture/tool-output-diagnostics.js +4 -0
  73. package/dist/conversion/hub/pipeline/stages/req_inbound/req_inbound_stage3_context_capture/tool-output-snapshot.d.ts +10 -0
  74. package/dist/conversion/hub/pipeline/stages/req_inbound/req_inbound_stage3_context_capture/tool-output-snapshot.js +12 -0
  75. package/dist/conversion/hub/pipeline/stages/req_outbound/req_outbound_stage1_semantic_map/context-merge.d.ts +3 -0
  76. package/dist/conversion/hub/pipeline/stages/req_outbound/req_outbound_stage1_semantic_map/context-merge.js +30 -0
  77. package/dist/conversion/hub/pipeline/stages/req_outbound/req_outbound_stage1_semantic_map/index.js +9 -129
  78. package/dist/conversion/hub/pipeline/stages/req_outbound/req_outbound_stage2_format_build/index.d.ts +1 -4
  79. package/dist/conversion/hub/pipeline/stages/req_outbound/req_outbound_stage2_format_build/index.js +9 -26
  80. package/dist/conversion/hub/pipeline/stages/req_outbound/req_outbound_stage3_compat/index.js +32 -14
  81. package/dist/conversion/hub/pipeline/stages/req_process/req_process_stage1_tool_governance/index.d.ts +2 -2
  82. package/dist/conversion/hub/pipeline/stages/req_process/req_process_stage1_tool_governance/index.js +48 -8
  83. package/dist/conversion/hub/pipeline/stages/req_process/req_process_stage2_route_select/index.js +20 -3
  84. package/dist/conversion/hub/pipeline/stages/resp_inbound/resp_inbound_stage1_sse_decode/index.js +11 -199
  85. package/dist/conversion/hub/pipeline/stages/resp_inbound/resp_inbound_stage1_sse_decode/stream-json-sniffer.d.ts +3 -0
  86. package/dist/conversion/hub/pipeline/stages/resp_inbound/resp_inbound_stage1_sse_decode/stream-json-sniffer.js +81 -0
  87. package/dist/conversion/hub/pipeline/stages/resp_inbound/resp_inbound_stage2_format_parse/index.d.ts +1 -2
  88. package/dist/conversion/hub/pipeline/stages/resp_inbound/resp_inbound_stage2_format_parse/index.js +36 -1
  89. package/dist/conversion/hub/pipeline/stages/resp_inbound/resp_inbound_stage3_semantic_map/index.js +3 -1
  90. package/dist/conversion/hub/pipeline/stages/resp_outbound/resp_outbound_stage1_client_remap/chat-process-semantics-bridge.d.ts +6 -0
  91. package/dist/conversion/hub/pipeline/stages/resp_outbound/resp_outbound_stage1_client_remap/chat-process-semantics-bridge.js +17 -0
  92. package/dist/conversion/hub/pipeline/stages/resp_outbound/resp_outbound_stage1_client_remap/client-remap-protocol-switch.d.ts +9 -0
  93. package/dist/conversion/hub/pipeline/stages/resp_outbound/resp_outbound_stage1_client_remap/client-remap-protocol-switch.js +28 -0
  94. package/dist/conversion/hub/pipeline/stages/resp_outbound/resp_outbound_stage1_client_remap/index.d.ts +1 -2
  95. package/dist/conversion/hub/pipeline/stages/resp_outbound/resp_outbound_stage1_client_remap/index.js +14 -102
  96. package/dist/conversion/hub/pipeline/stages/resp_outbound/resp_outbound_stage2_sse_stream/index.js +3 -1
  97. package/dist/conversion/hub/pipeline/stages/resp_process/resp_process_stage1_tool_governance/index.js +54 -39
  98. package/dist/conversion/hub/pipeline/stages/resp_process/resp_process_stage2_finalize/index.js +18 -5
  99. package/dist/conversion/hub/pipeline/stages/resp_process/resp_process_stage3_servertool_orchestration/index.d.ts +11 -1
  100. package/dist/conversion/hub/pipeline/stages/resp_process/resp_process_stage3_servertool_orchestration/index.js +10 -32
  101. package/dist/conversion/hub/pipeline/stages/utils.js +17 -1
  102. package/dist/conversion/hub/pipeline/target-utils.js +14 -91
  103. package/dist/conversion/hub/pipelines/inbound.js +3 -1
  104. package/dist/conversion/hub/pipelines/outbound.js +2 -0
  105. package/dist/conversion/hub/policy/policy-engine.js +9 -3
  106. package/dist/conversion/hub/policy/protocol-spec.js +21 -149
  107. package/dist/conversion/hub/process/chat-process-anthropic-alias.d.ts +2 -0
  108. package/dist/conversion/hub/process/chat-process-anthropic-alias.js +36 -0
  109. package/dist/conversion/hub/process/chat-process-clock-directive-parser.d.ts +5 -0
  110. package/dist/conversion/hub/process/chat-process-clock-directive-parser.js +48 -0
  111. package/dist/conversion/hub/process/chat-process-clock-directives.d.ts +24 -0
  112. package/dist/conversion/hub/process/chat-process-clock-directives.js +98 -0
  113. package/dist/conversion/hub/process/chat-process-clock-reminder-directives.d.ts +8 -0
  114. package/dist/conversion/hub/process/chat-process-clock-reminder-directives.js +42 -0
  115. package/dist/conversion/hub/process/chat-process-clock-reminder-finalize.d.ts +14 -0
  116. package/dist/conversion/hub/process/chat-process-clock-reminder-finalize.js +10 -0
  117. package/dist/conversion/hub/process/chat-process-clock-reminder-messages.d.ts +5 -0
  118. package/dist/conversion/hub/process/chat-process-clock-reminder-messages.js +10 -0
  119. package/dist/conversion/hub/process/chat-process-clock-reminder-orchestration.d.ts +30 -0
  120. package/dist/conversion/hub/process/chat-process-clock-reminder-orchestration.js +68 -0
  121. package/dist/conversion/hub/process/chat-process-clock-reminder-time-tag.d.ts +9 -0
  122. package/dist/conversion/hub/process/chat-process-clock-reminder-time-tag.js +18 -0
  123. package/dist/conversion/hub/process/chat-process-clock-reminders.d.ts +2 -0
  124. package/dist/conversion/hub/process/chat-process-clock-reminders.js +104 -0
  125. package/dist/conversion/hub/process/chat-process-clock-tool-schemas.d.ts +3 -0
  126. package/dist/conversion/hub/process/chat-process-clock-tool-schemas.js +233 -0
  127. package/dist/conversion/hub/process/chat-process-clock-tools.d.ts +6 -0
  128. package/dist/conversion/hub/process/chat-process-clock-tools.js +41 -0
  129. package/dist/conversion/hub/process/chat-process-continue-execution.d.ts +11 -0
  130. package/dist/conversion/hub/process/chat-process-continue-execution.js +82 -0
  131. package/dist/conversion/hub/process/chat-process-governance-context.d.ts +15 -0
  132. package/dist/conversion/hub/process/chat-process-governance-context.js +7 -0
  133. package/dist/conversion/hub/process/chat-process-governance-finalize.d.ts +16 -0
  134. package/dist/conversion/hub/process/chat-process-governance-finalize.js +11 -0
  135. package/dist/conversion/hub/process/chat-process-governance-orchestration.d.ts +9 -0
  136. package/dist/conversion/hub/process/chat-process-governance-orchestration.js +47 -0
  137. package/dist/conversion/hub/process/chat-process-governed-control-ops.d.ts +8 -0
  138. package/dist/conversion/hub/process/chat-process-governed-control-ops.js +5 -0
  139. package/dist/conversion/hub/process/chat-process-governed-filter-call.d.ts +12 -0
  140. package/dist/conversion/hub/process/chat-process-governed-filter-call.js +18 -0
  141. package/dist/conversion/hub/process/chat-process-governed-merge.d.ts +8 -0
  142. package/dist/conversion/hub/process/chat-process-governed-merge.js +11 -0
  143. package/dist/conversion/hub/process/chat-process-media.d.ts +3 -0
  144. package/dist/conversion/hub/process/chat-process-media.js +18 -0
  145. package/dist/conversion/hub/process/chat-process-node-result.d.ts +23 -0
  146. package/dist/conversion/hub/process/chat-process-node-result.js +24 -0
  147. package/dist/conversion/hub/process/chat-process-pending-tool-sync.d.ts +14 -0
  148. package/dist/conversion/hub/process/chat-process-pending-tool-sync.js +52 -0
  149. package/dist/conversion/hub/process/chat-process-post-governed-normalization.d.ts +8 -0
  150. package/dist/conversion/hub/process/chat-process-post-governed-normalization.js +16 -0
  151. package/dist/conversion/hub/process/chat-process-review.d.ts +2 -0
  152. package/dist/conversion/hub/process/chat-process-review.js +8 -0
  153. package/dist/conversion/hub/process/chat-process-servertool-orchestration.d.ts +8 -0
  154. package/dist/conversion/hub/process/chat-process-servertool-orchestration.js +22 -0
  155. package/dist/conversion/hub/process/chat-process-tool-normalization.d.ts +2 -0
  156. package/dist/conversion/hub/process/chat-process-tool-normalization.js +4 -0
  157. package/dist/conversion/hub/process/chat-process-web-search-intent.d.ts +12 -0
  158. package/dist/conversion/hub/process/chat-process-web-search-intent.js +13 -0
  159. package/dist/conversion/hub/process/chat-process-web-search-tool-schema.d.ts +3 -0
  160. package/dist/conversion/hub/process/chat-process-web-search-tool-schema.js +4 -0
  161. package/dist/conversion/hub/process/chat-process-web-search.d.ts +8 -0
  162. package/dist/conversion/hub/process/chat-process-web-search.js +26 -0
  163. package/dist/conversion/hub/process/chat-process.d.ts +2 -19
  164. package/dist/conversion/hub/process/chat-process.js +12 -1701
  165. package/dist/conversion/hub/process/client-inject-readiness.d.ts +1 -0
  166. package/dist/conversion/hub/process/client-inject-readiness.js +4 -0
  167. package/dist/conversion/hub/registry.js +5 -2
  168. package/dist/conversion/hub/response/chat-response-utils.js +5 -86
  169. package/dist/conversion/hub/response/provider-response.d.ts +9 -0
  170. package/dist/conversion/hub/response/provider-response.js +20 -26
  171. package/dist/conversion/hub/response/response-mappers.js +25 -27
  172. package/dist/conversion/hub/response/response-runtime.js +30 -98
  173. package/dist/conversion/hub/semantic-mappers/anthropic-mapper.d.ts +1 -0
  174. package/dist/conversion/hub/semantic-mappers/anthropic-mapper.js +1 -0
  175. package/dist/conversion/hub/semantic-mappers/chat-mapper.d.ts +1 -0
  176. package/dist/conversion/hub/semantic-mappers/chat-mapper.js +1 -0
  177. package/dist/conversion/hub/semantic-mappers/gemini-mapper.d.ts +1 -0
  178. package/dist/conversion/hub/semantic-mappers/gemini-mapper.js +1 -0
  179. package/dist/conversion/hub/semantic-mappers/responses-mapper.d.ts +1 -0
  180. package/dist/conversion/hub/semantic-mappers/responses-mapper.js +1 -0
  181. package/dist/conversion/hub/snapshot-recorder.js +11 -4
  182. package/dist/conversion/hub/standardized-bridge.js +11 -288
  183. package/dist/conversion/hub/tool-governance/engine.d.ts +8 -0
  184. package/dist/conversion/hub/tool-governance/engine.js +25 -63
  185. package/dist/conversion/hub/tool-governance/rules.js +73 -69
  186. package/dist/conversion/hub/tool-session-compat.d.ts +2 -2
  187. package/dist/conversion/hub/tool-session-compat.js +17 -231
  188. package/dist/conversion/hub/tool-surface/tool-surface-engine.js +6 -4
  189. package/dist/conversion/index.d.ts +1 -2
  190. package/dist/conversion/index.js +1 -2
  191. package/dist/conversion/jsonish.js +20 -0
  192. package/dist/conversion/mcp-injection.js +7 -0
  193. package/dist/conversion/media.js +4 -0
  194. package/dist/conversion/{shared/metadata-passthrough.d.ts → metadata-passthrough.d.ts} +1 -1
  195. package/dist/conversion/metadata-passthrough.js +20 -0
  196. package/dist/conversion/payload-budget.js +47 -0
  197. package/dist/conversion/protocol-field-allowlists.d.ts +7 -0
  198. package/dist/conversion/protocol-field-allowlists.js +9 -0
  199. package/dist/conversion/{shared/protocol-state.d.ts → protocol-state.d.ts} +2 -2
  200. package/dist/conversion/protocol-state.js +27 -0
  201. package/dist/conversion/{shared/errors.d.ts → provider-protocol-error.d.ts} +0 -3
  202. package/dist/conversion/provider-protocol-error.js +25 -0
  203. package/dist/conversion/responses/responses-host-policy.js +2 -12
  204. package/dist/conversion/responses/responses-openai-bridge/response-payload.js +14 -87
  205. package/dist/conversion/responses/responses-openai-bridge/types.d.ts +2 -1
  206. package/dist/conversion/responses/responses-openai-bridge.d.ts +1 -1
  207. package/dist/conversion/responses/responses-openai-bridge.js +62 -62
  208. package/dist/conversion/{shared/runtime-metadata.d.ts → runtime-metadata.d.ts} +1 -1
  209. package/dist/conversion/runtime-metadata.js +31 -0
  210. package/dist/conversion/shared/anthropic-message-utils.js +170 -21
  211. package/dist/conversion/shared/chat-envelope-validator.js +2 -126
  212. package/dist/conversion/shared/chat-output-normalizer.js +2 -54
  213. package/dist/conversion/shared/chat-request-filters.d.ts +3 -4
  214. package/dist/conversion/shared/chat-request-filters.js +22 -78
  215. package/dist/conversion/shared/gemini-tool-utils.d.ts +1 -1
  216. package/dist/conversion/shared/gemini-tool-utils.js +9 -524
  217. package/dist/conversion/shared/openai-finalizer.js +3 -1
  218. package/dist/conversion/shared/openai-message-normalize.js +13 -285
  219. package/dist/conversion/shared/output-content-normalizer.js +9 -112
  220. package/dist/conversion/shared/reasoning-mapping.js +2 -6
  221. package/dist/conversion/shared/reasoning-normalizer.js +10 -1
  222. package/dist/conversion/shared/reasoning-tool-normalizer.js +14 -126
  223. package/dist/conversion/shared/reasoning-tool-parser.js +4 -87
  224. package/dist/conversion/shared/reasoning-utils.js +7 -8
  225. package/dist/conversion/shared/responses-conversation-store.js +5 -83
  226. package/dist/conversion/shared/responses-output-builder.js +63 -55
  227. package/dist/conversion/shared/responses-reasoning-registry.d.ts +14 -2
  228. package/dist/conversion/shared/responses-reasoning-registry.js +41 -7
  229. package/dist/conversion/shared/responses-request-adapter.d.ts +7 -1
  230. package/dist/conversion/shared/responses-request-adapter.js +14 -1
  231. package/dist/conversion/shared/responses-response-utils.js +103 -14
  232. package/dist/conversion/shared/responses-tool-utils.d.ts +1 -0
  233. package/dist/conversion/shared/responses-tool-utils.js +91 -15
  234. package/dist/conversion/shared/streaming-text-extractor.js +2 -7
  235. package/dist/conversion/shared/text-markup-normalizer/normalize.d.ts +2 -2
  236. package/dist/conversion/shared/text-markup-normalizer/normalize.js +43 -17
  237. package/dist/conversion/shared/text-markup-normalizer.d.ts +3 -2
  238. package/dist/conversion/shared/text-markup-normalizer.js +2 -1
  239. package/dist/conversion/shared/thought-signature-validator.js +3 -2
  240. package/dist/conversion/shared/tool-argument-repairer.js +2 -2
  241. package/dist/conversion/shared/tool-call-id-manager.js +5 -7
  242. package/dist/conversion/shared/tool-call-utils.js +3 -45
  243. package/dist/conversion/shared/tool-filter-pipeline.js +5 -100
  244. package/dist/conversion/shared/tool-governor.d.ts +6 -0
  245. package/dist/conversion/shared/tool-governor.js +45 -127
  246. package/dist/conversion/shared/tool-harvester.js +2 -8
  247. package/dist/conversion/shared/tool-mapping.d.ts +1 -1
  248. package/dist/conversion/shared/tool-mapping.js +2 -5
  249. package/dist/conversion/shared/tooling.d.ts +0 -4
  250. package/dist/conversion/shared/tooling.js +18 -0
  251. package/dist/conversion/{shared/snapshot-utils.d.ts → snapshot-utils.d.ts} +11 -0
  252. package/dist/conversion/{shared/snapshot-utils.js → snapshot-utils.js} +14 -23
  253. package/dist/conversion/{shared → types}/bridge-message-types.d.ts +2 -0
  254. package/dist/conversion/types/text-markup-normalizer.d.ts +13 -0
  255. package/dist/filters/special/request-tools-normalize.js +1 -1
  256. package/dist/filters/special/response-tool-text-canonicalize.js +2 -2
  257. package/dist/native/router_hotpath_napi.node +0 -0
  258. package/dist/quota/quota-manager.js +31 -59
  259. package/dist/quota/quota-state.js +14 -7
  260. package/dist/router/virtual-router/bootstrap/profile-builder.d.ts +1 -0
  261. package/dist/router/virtual-router/bootstrap/profile-builder.js +13 -0
  262. package/dist/router/virtual-router/bootstrap/provider-normalization.d.ts +2 -0
  263. package/dist/router/virtual-router/bootstrap/provider-normalization.js +4 -1
  264. package/dist/router/virtual-router/bootstrap/streaming-helpers.d.ts +7 -0
  265. package/dist/router/virtual-router/bootstrap/streaming-helpers.js +44 -0
  266. package/dist/router/virtual-router/bootstrap.js +2 -0
  267. package/dist/router/virtual-router/engine/provider-key/parse.d.ts +1 -6
  268. package/dist/router/virtual-router/engine/provider-key/parse.js +1 -43
  269. package/dist/router/virtual-router/engine/routing-state/store.d.ts +1 -2
  270. package/dist/router/virtual-router/engine/routing-state/store.js +50 -14
  271. package/dist/router/virtual-router/engine-legacy/config.d.ts +11 -0
  272. package/dist/router/virtual-router/engine-legacy/config.js +108 -0
  273. package/dist/router/virtual-router/engine-legacy/direct-model.d.ts +10 -0
  274. package/dist/router/virtual-router/engine-legacy/direct-model.js +38 -0
  275. package/dist/router/virtual-router/engine-legacy/health.d.ts +13 -0
  276. package/dist/router/virtual-router/engine-legacy/health.js +104 -0
  277. package/dist/router/virtual-router/engine-legacy/helpers.d.ts +16 -0
  278. package/dist/router/virtual-router/engine-legacy/helpers.js +226 -0
  279. package/dist/router/virtual-router/engine-legacy/route-finalize.d.ts +9 -0
  280. package/dist/router/virtual-router/engine-legacy/route-finalize.js +84 -0
  281. package/dist/router/virtual-router/engine-legacy/route-selection.d.ts +17 -0
  282. package/dist/router/virtual-router/engine-legacy/route-selection.js +205 -0
  283. package/dist/router/virtual-router/engine-legacy/route-state-allowlist.d.ts +3 -0
  284. package/dist/router/virtual-router/engine-legacy/route-state-allowlist.js +36 -0
  285. package/dist/router/virtual-router/engine-legacy/route-state.d.ts +12 -0
  286. package/dist/router/virtual-router/engine-legacy/route-state.js +386 -0
  287. package/dist/router/virtual-router/engine-legacy/route-utils.d.ts +19 -0
  288. package/dist/router/virtual-router/engine-legacy/route-utils.js +212 -0
  289. package/dist/router/virtual-router/engine-legacy/routing.d.ts +8 -0
  290. package/dist/router/virtual-router/engine-legacy/routing.js +8 -0
  291. package/dist/router/virtual-router/engine-legacy/selection-core.d.ts +28 -0
  292. package/dist/router/virtual-router/engine-legacy/selection-core.js +112 -0
  293. package/dist/router/virtual-router/engine-legacy/selection-state.d.ts +16 -0
  294. package/dist/router/virtual-router/engine-legacy/selection-state.js +187 -0
  295. package/dist/router/virtual-router/engine-legacy/state-accessors.d.ts +21 -0
  296. package/dist/router/virtual-router/engine-legacy/state-accessors.js +118 -0
  297. package/dist/router/virtual-router/engine-legacy.d.ts +123 -0
  298. package/dist/router/virtual-router/engine-legacy.js +194 -0
  299. package/dist/router/virtual-router/engine-logging.d.ts +2 -0
  300. package/dist/router/virtual-router/engine-logging.js +11 -5
  301. package/dist/router/virtual-router/engine-selection/alias-selection.js +45 -83
  302. package/dist/router/virtual-router/engine-selection/key-parsing.js +9 -26
  303. package/dist/router/virtual-router/engine-selection/native-chat-process-clock-directive-parser.d.ts +20 -0
  304. package/dist/router/virtual-router/engine-selection/native-chat-process-clock-directive-parser.js +163 -0
  305. package/dist/router/virtual-router/engine-selection/native-chat-process-clock-reminder-directives.d.ts +7 -0
  306. package/dist/router/virtual-router/engine-selection/native-chat-process-clock-reminder-directives.js +103 -0
  307. package/dist/router/virtual-router/engine-selection/native-chat-process-clock-reminder-orchestration-semantics.d.ts +10 -0
  308. package/dist/router/virtual-router/engine-selection/native-chat-process-clock-reminder-orchestration-semantics.js +110 -0
  309. package/dist/router/virtual-router/engine-selection/native-chat-process-clock-reminder-semantics.d.ts +8 -0
  310. package/dist/router/virtual-router/engine-selection/native-chat-process-clock-reminder-semantics.js +281 -0
  311. package/dist/router/virtual-router/engine-selection/native-chat-process-clock-reminder-time-tag-semantics.d.ts +1 -0
  312. package/dist/router/virtual-router/engine-selection/native-chat-process-clock-reminder-time-tag-semantics.js +25 -0
  313. package/dist/router/virtual-router/engine-selection/native-chat-process-clock-reminders-semantics.d.ts +4 -0
  314. package/dist/router/virtual-router/engine-selection/native-chat-process-clock-reminders-semantics.js +44 -0
  315. package/dist/router/virtual-router/engine-selection/native-chat-process-clock-tool-schema-semantics.d.ts +2 -0
  316. package/dist/router/virtual-router/engine-selection/native-chat-process-clock-tool-schema-semantics.js +62 -0
  317. package/dist/router/virtual-router/engine-selection/native-chat-process-governance-semantics.d.ts +40 -0
  318. package/dist/router/virtual-router/engine-selection/native-chat-process-governance-semantics.js +484 -0
  319. package/dist/router/virtual-router/engine-selection/native-chat-process-governed-filter-semantics.d.ts +9 -0
  320. package/dist/router/virtual-router/engine-selection/native-chat-process-governed-filter-semantics.js +64 -0
  321. package/dist/router/virtual-router/engine-selection/native-chat-process-node-result-semantics.d.ts +5 -0
  322. package/dist/router/virtual-router/engine-selection/native-chat-process-node-result-semantics.js +163 -0
  323. package/dist/router/virtual-router/engine-selection/native-chat-process-post-governed-normalization-semantics.d.ts +1 -0
  324. package/dist/router/virtual-router/engine-selection/native-chat-process-post-governed-normalization-semantics.js +49 -0
  325. package/dist/router/virtual-router/engine-selection/native-chat-process-servertool-orchestration-semantics.d.ts +30 -0
  326. package/dist/router/virtual-router/engine-selection/native-chat-process-servertool-orchestration-semantics.js +446 -0
  327. package/dist/router/virtual-router/engine-selection/native-chat-process-web-search-intent-semantics.d.ts +1 -0
  328. package/dist/router/virtual-router/engine-selection/native-chat-process-web-search-intent-semantics.js +49 -0
  329. package/dist/router/virtual-router/engine-selection/native-chat-request-filter-semantics.d.ts +1 -0
  330. package/dist/router/virtual-router/engine-selection/native-chat-request-filter-semantics.js +54 -0
  331. package/dist/router/virtual-router/engine-selection/native-hub-bridge-action-semantics.d.ts +134 -0
  332. package/dist/router/virtual-router/engine-selection/native-hub-bridge-action-semantics.js +729 -0
  333. package/dist/router/virtual-router/engine-selection/native-hub-bridge-policy-semantics.d.ts +72 -0
  334. package/dist/router/virtual-router/engine-selection/native-hub-bridge-policy-semantics.js +405 -0
  335. package/dist/router/virtual-router/engine-selection/native-hub-pipeline-edge-stage-semantics.d.ts +18 -0
  336. package/dist/router/virtual-router/engine-selection/native-hub-pipeline-edge-stage-semantics.js +317 -0
  337. package/dist/router/virtual-router/engine-selection/native-hub-pipeline-governance-semantics.d.ts +22 -0
  338. package/dist/router/virtual-router/engine-selection/native-hub-pipeline-governance-semantics.js +154 -0
  339. package/dist/router/virtual-router/engine-selection/native-hub-pipeline-inbound-outbound-semantics.d.ts +22 -0
  340. package/dist/router/virtual-router/engine-selection/native-hub-pipeline-inbound-outbound-semantics.js +426 -0
  341. package/dist/router/virtual-router/engine-selection/native-hub-pipeline-orchestration-semantics.d.ts +57 -0
  342. package/dist/router/virtual-router/engine-selection/native-hub-pipeline-orchestration-semantics.js +705 -0
  343. package/dist/router/virtual-router/engine-selection/native-hub-pipeline-req-inbound-semantics.d.ts +46 -0
  344. package/dist/router/virtual-router/engine-selection/native-hub-pipeline-req-inbound-semantics.js +503 -0
  345. package/dist/router/virtual-router/engine-selection/native-hub-pipeline-req-outbound-semantics.d.ts +146 -0
  346. package/dist/router/virtual-router/engine-selection/native-hub-pipeline-req-outbound-semantics.js +570 -0
  347. package/dist/router/virtual-router/engine-selection/native-hub-pipeline-req-process-semantics.d.ts +25 -0
  348. package/dist/router/virtual-router/engine-selection/native-hub-pipeline-req-process-semantics.js +148 -0
  349. package/dist/router/virtual-router/engine-selection/native-hub-pipeline-resp-semantics.d.ts +25 -0
  350. package/dist/router/virtual-router/engine-selection/native-hub-pipeline-resp-semantics.js +637 -0
  351. package/dist/router/virtual-router/engine-selection/native-hub-pipeline-session-identifiers-semantics.d.ts +11 -0
  352. package/dist/router/virtual-router/engine-selection/native-hub-pipeline-session-identifiers-semantics.js +207 -0
  353. package/dist/router/virtual-router/engine-selection/native-hub-pipeline-target-semantics.d.ts +3 -0
  354. package/dist/router/virtual-router/engine-selection/native-hub-pipeline-target-semantics.js +128 -0
  355. package/dist/router/virtual-router/engine-selection/native-router-hotpath-analysis.d.ts +57 -0
  356. package/dist/router/virtual-router/engine-selection/native-router-hotpath-analysis.js +217 -0
  357. package/dist/router/virtual-router/engine-selection/native-router-hotpath-loader.d.ts +5 -0
  358. package/dist/router/virtual-router/engine-selection/native-router-hotpath-loader.js +320 -0
  359. package/dist/router/virtual-router/engine-selection/native-router-hotpath-policy.d.ts +5 -0
  360. package/dist/router/virtual-router/engine-selection/native-router-hotpath-policy.js +18 -0
  361. package/dist/router/virtual-router/engine-selection/native-router-hotpath-quota-buckets.d.ts +25 -0
  362. package/dist/router/virtual-router/engine-selection/native-router-hotpath-quota-buckets.js +85 -0
  363. package/dist/router/virtual-router/engine-selection/native-router-hotpath.d.ts +59 -0
  364. package/dist/router/virtual-router/engine-selection/native-router-hotpath.js +117 -0
  365. package/dist/router/virtual-router/engine-selection/native-shared-conversion-semantics.d.ts +151 -0
  366. package/dist/router/virtual-router/engine-selection/native-shared-conversion-semantics.js +1371 -0
  367. package/dist/router/virtual-router/engine-selection/native-snapshot-hooks.d.ts +2 -0
  368. package/dist/router/virtual-router/engine-selection/native-snapshot-hooks.js +69 -0
  369. package/dist/router/virtual-router/engine-selection/native-virtual-router-alias-selection-semantics.d.ts +16 -0
  370. package/dist/router/virtual-router/engine-selection/native-virtual-router-alias-selection-semantics.js +96 -0
  371. package/dist/router/virtual-router/engine-selection/native-virtual-router-engine-proxy.d.ts +16 -0
  372. package/dist/router/virtual-router/engine-selection/native-virtual-router-engine-proxy.js +14 -0
  373. package/dist/router/virtual-router/engine-selection/native-virtual-router-routing-instructions-semantics.d.ts +2 -0
  374. package/dist/router/virtual-router/engine-selection/native-virtual-router-routing-instructions-semantics.js +86 -0
  375. package/dist/router/virtual-router/engine-selection/native-virtual-router-stop-message-actions-semantics.d.ts +6 -0
  376. package/dist/router/virtual-router/engine-selection/native-virtual-router-stop-message-actions-semantics.js +85 -0
  377. package/dist/router/virtual-router/engine-selection/native-virtual-router-stop-message-semantics.d.ts +9 -0
  378. package/dist/router/virtual-router/engine-selection/native-virtual-router-stop-message-semantics.js +70 -0
  379. package/dist/router/virtual-router/engine-selection/native-virtual-router-stop-message-state-semantics.d.ts +2 -0
  380. package/dist/router/virtual-router/engine-selection/native-virtual-router-stop-message-state-semantics.js +76 -0
  381. package/dist/router/virtual-router/engine-selection/route-utils.js +1 -1
  382. package/dist/router/virtual-router/engine-selection/tier-selection-antigravity-session-lease.d.ts +10 -0
  383. package/dist/router/virtual-router/engine-selection/tier-selection-antigravity-session-lease.js +231 -0
  384. package/dist/router/virtual-router/engine-selection/tier-selection-antigravity-target-split.d.ts +4 -0
  385. package/dist/router/virtual-router/engine-selection/tier-selection-antigravity-target-split.js +43 -0
  386. package/dist/router/virtual-router/engine-selection/tier-selection-quota-integration.d.ts +27 -0
  387. package/dist/router/virtual-router/engine-selection/tier-selection-quota-integration.js +216 -0
  388. package/dist/router/virtual-router/engine-selection/tier-selection-select.d.ts +1 -1
  389. package/dist/router/virtual-router/engine-selection/tier-selection-select.js +128 -129
  390. package/dist/router/virtual-router/engine-selection/tier-selection.js +2 -265
  391. package/dist/router/virtual-router/engine.d.ts +22 -105
  392. package/dist/router/virtual-router/engine.js +274 -1632
  393. package/dist/router/virtual-router/features.js +2 -2
  394. package/dist/router/virtual-router/load-balancer.d.ts +8 -0
  395. package/dist/router/virtual-router/load-balancer.js +65 -2
  396. package/dist/router/virtual-router/provider-registry.js +2 -0
  397. package/dist/router/virtual-router/routing-instructions/clean.d.ts +3 -0
  398. package/dist/router/virtual-router/routing-instructions/clean.js +34 -0
  399. package/dist/router/virtual-router/routing-instructions/parse.d.ts +18 -0
  400. package/dist/router/virtual-router/routing-instructions/parse.js +377 -0
  401. package/dist/router/virtual-router/routing-instructions/state.d.ts +4 -0
  402. package/dist/router/virtual-router/routing-instructions/state.js +245 -0
  403. package/dist/router/virtual-router/routing-instructions/types.d.ts +70 -0
  404. package/dist/router/virtual-router/routing-instructions/types.js +2 -0
  405. package/dist/router/virtual-router/routing-instructions.d.ts +5 -91
  406. package/dist/router/virtual-router/routing-instructions.js +4 -628
  407. package/dist/router/virtual-router/routing-stop-message-actions.js +91 -112
  408. package/dist/router/virtual-router/routing-stop-message-parser.js +9 -132
  409. package/dist/router/virtual-router/routing-stop-message-state-codec.d.ts +1 -0
  410. package/dist/router/virtual-router/routing-stop-message-state-codec.js +58 -71
  411. package/dist/router/virtual-router/sticky-session-store.d.ts +4 -0
  412. package/dist/router/virtual-router/sticky-session-store.js +23 -83
  413. package/dist/router/virtual-router/stop-message-file-resolver.d.ts +1 -0
  414. package/dist/router/virtual-router/stop-message-file-resolver.js +10 -0
  415. package/dist/router/virtual-router/stop-message-state-sync.d.ts +1 -1
  416. package/dist/router/virtual-router/stop-message-state-sync.js +3 -7
  417. package/dist/router/virtual-router/token-counter.js +0 -9
  418. package/dist/router/virtual-router/tool-signals.js +21 -3
  419. package/dist/router/virtual-router/types.d.ts +13 -7
  420. package/dist/servertool/clock/config.js +23 -51
  421. package/dist/servertool/clock/io.js +1 -0
  422. package/dist/servertool/clock/session-scope.d.ts +2 -2
  423. package/dist/servertool/clock/session-scope.js +29 -40
  424. package/dist/servertool/engine.d.ts +9 -0
  425. package/dist/servertool/engine.js +267 -79
  426. package/dist/servertool/handlers/antigravity-thought-signature-bootstrap.js +3 -3
  427. package/dist/servertool/handlers/clock-auto.js +1 -1
  428. package/dist/servertool/handlers/clock.js +2 -2
  429. package/dist/servertool/handlers/compaction-detect.d.ts +1 -1
  430. package/dist/servertool/handlers/compaction-detect.js +1 -1
  431. package/dist/servertool/handlers/continue-execution.js +8 -4
  432. package/dist/servertool/handlers/followup-request-builder.js +18 -1
  433. package/dist/servertool/handlers/gemini-empty-reply-continue.js +8 -2
  434. package/dist/servertool/handlers/iflow-model-error-retry.js +1 -1
  435. package/dist/servertool/handlers/recursive-detection-guard.js +1 -1
  436. package/dist/servertool/handlers/review.d.ts +1 -0
  437. package/dist/servertool/handlers/review.js +180 -0
  438. package/dist/servertool/handlers/stop-message-auto/blocked-report.js +59 -1
  439. package/dist/servertool/handlers/stop-message-auto/iflow-followup.d.ts +23 -2
  440. package/dist/servertool/handlers/stop-message-auto/iflow-followup.js +398 -90
  441. package/dist/servertool/handlers/stop-message-auto/routing-state.d.ts +5 -15
  442. package/dist/servertool/handlers/stop-message-auto/routing-state.js +29 -55
  443. package/dist/servertool/handlers/stop-message-auto/runtime-utils.d.ts +6 -0
  444. package/dist/servertool/handlers/stop-message-auto/runtime-utils.js +36 -62
  445. package/dist/servertool/handlers/stop-message-auto.js +393 -77
  446. package/dist/servertool/handlers/vision.js +1 -1
  447. package/dist/servertool/handlers/web-search.js +1 -1
  448. package/dist/servertool/reenter-backend.js +1 -1
  449. package/dist/servertool/server-side-tools.d.ts +1 -0
  450. package/dist/servertool/server-side-tools.js +92 -54
  451. package/dist/servertool/stop-gateway-context.js +1 -1
  452. package/dist/servertool/stop-message-compare-context.js +1 -1
  453. package/dist/servertool/types.d.ts +17 -0
  454. package/dist/sse/json-to-sse/event-generators/responses.d.ts +4 -0
  455. package/dist/sse/json-to-sse/event-generators/responses.js +95 -1
  456. package/dist/sse/json-to-sse/sequencers/responses-sequencer.js +6 -4
  457. package/dist/sse/sse-to-json/builders/response-builder.d.ts +8 -0
  458. package/dist/sse/sse-to-json/builders/response-builder.js +162 -4
  459. package/dist/sse/sse-to-json/responses-sse-to-json-converter.js +2 -0
  460. package/dist/sse/types/responses-types.d.ts +6 -2
  461. package/dist/tools/apply-patch/patch-text/normalize.js +11 -0
  462. package/dist/tools/apply-patch/structured/coercion.js +5 -0
  463. package/dist/tools/args-json.js +29 -0
  464. package/dist/tools/exec-command/validator.d.ts +4 -1
  465. package/dist/tools/exec-command/validator.js +87 -3
  466. package/dist/tools/tool-registry.d.ts +7 -1
  467. package/dist/tools/tool-registry.js +3 -2
  468. package/package.json +121 -10
  469. package/dist/conversion/shared/args-mapping.js +0 -221
  470. package/dist/conversion/shared/bridge-actions.js +0 -881
  471. package/dist/conversion/shared/bridge-id-utils.js +0 -79
  472. package/dist/conversion/shared/bridge-metadata.js +0 -1
  473. package/dist/conversion/shared/bridge-policies.js +0 -195
  474. package/dist/conversion/shared/compaction-detect.js +0 -59
  475. package/dist/conversion/shared/errors.js +0 -31
  476. package/dist/conversion/shared/jsonish.js +0 -177
  477. package/dist/conversion/shared/mcp-injection.js +0 -173
  478. package/dist/conversion/shared/media.js +0 -9
  479. package/dist/conversion/shared/metadata-passthrough.js +0 -57
  480. package/dist/conversion/shared/payload-budget.js +0 -248
  481. package/dist/conversion/shared/protocol-field-allowlists.d.ts +0 -7
  482. package/dist/conversion/shared/protocol-field-allowlists.js +0 -149
  483. package/dist/conversion/shared/protocol-state.js +0 -23
  484. package/dist/conversion/shared/runtime-metadata.js +0 -23
  485. package/dist/conversion/shared/snapshot-hooks.d.ts +0 -11
  486. package/dist/conversion/shared/snapshot-hooks.js +0 -503
  487. package/dist/conversion/shared/text-markup-normalizer/extractors-apply-patch.d.ts +0 -2
  488. package/dist/conversion/shared/text-markup-normalizer/extractors-apply-patch.js +0 -129
  489. package/dist/conversion/shared/text-markup-normalizer/extractors-json.d.ts +0 -4
  490. package/dist/conversion/shared/text-markup-normalizer/extractors-json.js +0 -637
  491. package/dist/conversion/shared/text-markup-normalizer/extractors-shared.d.ts +0 -21
  492. package/dist/conversion/shared/text-markup-normalizer/extractors-shared.js +0 -177
  493. package/dist/conversion/shared/text-markup-normalizer/extractors-transcript.d.ts +0 -5
  494. package/dist/conversion/shared/text-markup-normalizer/extractors-transcript.js +0 -385
  495. package/dist/conversion/shared/text-markup-normalizer/extractors-xml.d.ts +0 -10
  496. package/dist/conversion/shared/text-markup-normalizer/extractors-xml.js +0 -602
  497. package/dist/conversion/shared/text-markup-normalizer/extractors.d.ts +0 -5
  498. package/dist/conversion/shared/text-markup-normalizer/extractors.js +0 -4
  499. package/dist/conversion/shared/tool-canonicalizer.d.ts +0 -2
  500. package/dist/conversion/shared/tool-canonicalizer.js +0 -42
  501. package/dist/servertool/handlers/stop-message-stage-policy/bd-runtime.d.ts +0 -18
  502. package/dist/servertool/handlers/stop-message-stage-policy/bd-runtime.js +0 -398
  503. package/dist/servertool/handlers/stop-message-stage-policy/decision.d.ts +0 -9
  504. package/dist/servertool/handlers/stop-message-stage-policy/decision.js +0 -127
  505. package/dist/servertool/handlers/stop-message-stage-policy/observation.d.ts +0 -2
  506. package/dist/servertool/handlers/stop-message-stage-policy/observation.js +0 -179
  507. package/dist/servertool/handlers/stop-message-stage-policy/templates.d.ts +0 -4
  508. package/dist/servertool/handlers/stop-message-stage-policy/templates.js +0 -96
  509. package/dist/servertool/handlers/stop-message-stage-policy/text-utils.d.ts +0 -9
  510. package/dist/servertool/handlers/stop-message-stage-policy/text-utils.js +0 -89
  511. package/dist/servertool/handlers/stop-message-stage-policy/types.d.ts +0 -59
  512. package/dist/servertool/handlers/stop-message-stage-policy.d.ts +0 -3
  513. package/dist/servertool/handlers/stop-message-stage-policy.js +0 -2
  514. /package/dist/conversion/{shared/args-mapping.d.ts → args-mapping.d.ts} +0 -0
  515. /package/dist/conversion/{shared/bridge-actions.d.ts → bridge-actions.d.ts} +0 -0
  516. /package/dist/conversion/{shared/bridge-id-utils.d.ts → bridge-id-utils.d.ts} +0 -0
  517. /package/dist/conversion/{shared/bridge-instructions.d.ts → bridge-instructions.d.ts} +0 -0
  518. /package/dist/conversion/{shared/bridge-policies.d.ts → bridge-policies.d.ts} +0 -0
  519. /package/dist/conversion/{shared/jsonish.d.ts → jsonish.d.ts} +0 -0
  520. /package/dist/conversion/{shared/mcp-injection.d.ts → mcp-injection.d.ts} +0 -0
  521. /package/dist/conversion/{shared/media.d.ts → media.d.ts} +0 -0
  522. /package/dist/conversion/{shared/payload-budget.d.ts → payload-budget.d.ts} +0 -0
  523. /package/dist/conversion/{shared → types}/bridge-message-types.js +0 -0
  524. /package/dist/{servertool/handlers/stop-message-stage-policy/types.js → conversion/types/text-markup-normalizer.js} +0 -0
@@ -1,6 +1,6 @@
1
1
  import { runServerSideToolEngine } from './server-side-tools.js';
2
- import { ProviderProtocolError } from '../conversion/shared/errors.js';
3
- import { ensureRuntimeMetadata, readRuntimeMetadata } from '../conversion/shared/runtime-metadata.js';
2
+ import { ProviderProtocolError } from '../conversion/provider-protocol-error.js';
3
+ import { ensureRuntimeMetadata, readRuntimeMetadata } from '../conversion/runtime-metadata.js';
4
4
  import { createHash } from 'node:crypto';
5
5
  import { loadRoutingInstructionStateSync, saveRoutingInstructionStateSync } from '../router/virtual-router/sticky-session-store.js';
6
6
  import { deserializeRoutingInstructionState, serializeRoutingInstructionState } from '../router/virtual-router/routing-instructions.js';
@@ -312,6 +312,7 @@ export async function runServerToolOrchestration(options) {
312
312
  return 'unknown';
313
313
  const mapping = {
314
314
  continue_execution_flow: 'continue_execution',
315
+ review_flow: 'review',
315
316
  stop_message_flow: 'stop_message_auto',
316
317
  empty_reply_continue: 'empty_reply_continue',
317
318
  apply_patch_guard: 'apply_patch_guard',
@@ -429,6 +430,31 @@ export async function runServerToolOrchestration(options) {
429
430
  catch {
430
431
  // best-effort only
431
432
  }
433
+ if (event.hookId === 'stop_message_auto' && event.result === 'miss') {
434
+ const compareContext = readStopMessageCompareContext(options.adapterContext);
435
+ const summary = formatStopMessageCompareContext(compareContext);
436
+ try {
437
+ // eslint-disable-next-line no-console
438
+ console.log(`${BLUE}[servertool][stop_compare] requestId=${options.requestId} stage=miss flow=none ${summary}${RESET}`);
439
+ }
440
+ catch {
441
+ // best-effort logging
442
+ }
443
+ const compareResult = compareContext
444
+ ? `${compareContext.decision}_${compareContext.reason.toLowerCase().replace(/[^a-z0-9]+/g, '_') || 'unknown'}`
445
+ : 'unknown_no_context';
446
+ appendServerToolProgressFileEvent({
447
+ requestId: options.requestId,
448
+ flowId: 'none',
449
+ tool: 'stop_message_auto',
450
+ stage: 'compare',
451
+ result: compareResult,
452
+ message: summary,
453
+ step: 2,
454
+ entryEndpoint: options.entryEndpoint,
455
+ providerProtocol: options.providerProtocol
456
+ });
457
+ }
432
458
  };
433
459
  const logStopCompare = (stage, flowId) => {
434
460
  const compareContext = readStopMessageCompareContext(options.adapterContext);
@@ -495,13 +521,28 @@ export async function runServerToolOrchestration(options) {
495
521
  providerProtocol: options.providerProtocol,
496
522
  providerInvoker: options.providerInvoker,
497
523
  reenterPipeline: options.reenterPipeline,
524
+ clientInjectDispatch: options.clientInjectDispatch,
498
525
  onAutoHookTrace: logAutoHookTrace
499
526
  };
500
- const engineResult = await withTimeout(runServerSideToolEngine(engineOptions), effectiveServerToolTimeoutMs, () => createServerToolTimeoutError({
527
+ const runEngine = async (overrides) => withTimeout(runServerSideToolEngine({
528
+ ...engineOptions,
529
+ ...overrides
530
+ }), effectiveServerToolTimeoutMs, () => createServerToolTimeoutError({
501
531
  requestId: options.requestId,
502
532
  phase: 'engine',
503
533
  timeoutMs: effectiveServerToolTimeoutMs || serverToolTimeoutMs
504
534
  }));
535
+ // StopMessage owns a dedicated orchestration skeleton:
536
+ // same trigger/processing semantics as before, but isolated from the generic servertool queue.
537
+ let engineResult = await runEngine({
538
+ disableToolCallHandlers: true,
539
+ includeAutoHookIds: ['stop_message_auto']
540
+ });
541
+ if (engineResult.mode === 'passthrough' || !engineResult.execution) {
542
+ engineResult = await runEngine({
543
+ excludeAutoHookIds: ['stop_message_auto']
544
+ });
545
+ }
505
546
  if (engineResult.mode === 'passthrough' || !engineResult.execution) {
506
547
  const skipReason = engineResult.mode === 'passthrough' ? 'passthrough' : 'no_execution';
507
548
  if (stopSignal.observed) {
@@ -583,7 +624,7 @@ export async function runServerToolOrchestration(options) {
583
624
  flowId: engineResult.execution.flowId
584
625
  };
585
626
  }
586
- if (!engineResult.execution.followup || !options.reenterPipeline) {
627
+ if (!engineResult.execution.followup) {
587
628
  logProgress(5, totalSteps, 'completed (no followup)', { flowId });
588
629
  return {
589
630
  chat: engineResult.finalChatResponse,
@@ -594,6 +635,7 @@ export async function runServerToolOrchestration(options) {
594
635
  const isStopMessageFlow = engineResult.execution.flowId === 'stop_message_flow';
595
636
  const isClockHoldFlow = engineResult.execution.flowId === 'clock_hold_flow';
596
637
  const isContinueExecutionFlow = engineResult.execution.flowId === 'continue_execution_flow';
638
+ const isReviewFlow = engineResult.execution.flowId === 'review_flow';
597
639
  const isEmptyReplyContinue = engineResult.execution.flowId === 'empty_reply_continue';
598
640
  const isApplyPatchGuard = engineResult.execution.flowId === 'apply_patch_guard';
599
641
  const isExecCommandGuard = engineResult.execution.flowId === 'exec_command_guard';
@@ -602,7 +644,9 @@ export async function runServerToolOrchestration(options) {
602
644
  // ServerTool followups must not inherit or inject any routeHint; always route fresh.
603
645
  const preserveRouteHint = false;
604
646
  const followupPlan = engineResult.execution.followup;
605
- const followupEntryEndpoint = engineResult.execution.followup.entryEndpoint ||
647
+ const followupEntryEndpoint = ('entryEndpoint' in engineResult.execution.followup
648
+ ? engineResult.execution.followup.entryEndpoint
649
+ : undefined) ||
606
650
  options.entryEndpoint ||
607
651
  '/v1/chat/completions';
608
652
  const followupPayloadRaw = (() => {
@@ -629,7 +673,12 @@ export async function runServerToolOrchestration(options) {
629
673
  }
630
674
  return null;
631
675
  })();
632
- if (!followupPayloadRaw) {
676
+ const metadataOnlyFollowup = !followupPayloadRaw &&
677
+ Boolean(followupPlan &&
678
+ typeof followupPlan === 'object' &&
679
+ !Array.isArray(followupPlan) &&
680
+ Object.prototype.hasOwnProperty.call(followupPlan, 'metadata'));
681
+ if (!followupPayloadRaw && !metadataOnlyFollowup) {
633
682
  logProgress(5, totalSteps, 'completed (missing followup payload)', { flowId });
634
683
  return {
635
684
  chat: engineResult.finalChatResponse,
@@ -637,7 +686,13 @@ export async function runServerToolOrchestration(options) {
637
686
  flowId: engineResult.execution.flowId
638
687
  };
639
688
  }
640
- const loopState = buildServerToolLoopState(options.adapterContext, engineResult.execution.flowId, followupPayloadRaw, engineResult.finalChatResponse);
689
+ const loopPayload = followupPayloadRaw ||
690
+ (engineResult.execution.flowId === 'stop_message_flow'
691
+ ? buildStopMessageLoopPayload(options.adapterContext)
692
+ : null);
693
+ const loopState = loopPayload
694
+ ? buildServerToolLoopState(options.adapterContext, engineResult.execution.flowId, loopPayload, engineResult.finalChatResponse)
695
+ : null;
641
696
  const stopMessageReservation = null;
642
697
  if (applyAutoLimit && loopState && typeof loopState.repeatCount === 'number' && loopState.repeatCount >= 3) {
643
698
  logProgress(5, totalSteps, 'completed (auto limit hit)', { flowId });
@@ -712,7 +767,7 @@ export async function runServerToolOrchestration(options) {
712
767
  // For stateful auto-followups (e.g. stop_message_flow / clock_hold_flow / continue_execution_flow),
713
768
  // keep the same providerKey/alias.
714
769
  // Otherwise the followup requestId suffix would cause round-robin alias switching and compatibility drift.
715
- if (isStopMessageFlow || isClockHoldFlow || isContinueExecutionFlow) {
770
+ if (isStopMessageFlow || isClockHoldFlow || isContinueExecutionFlow || isReviewFlow) {
716
771
  const providerKeyRaw = options.adapterContext.providerKey;
717
772
  const providerKey = typeof providerKeyRaw === 'string' && providerKeyRaw.trim().length ? providerKeyRaw.trim() : '';
718
773
  if (providerKey) {
@@ -722,9 +777,121 @@ export async function runServerToolOrchestration(options) {
722
777
  const retryEmptyFollowupOnce = isStopMessageFlow || isEmptyReplyContinue;
723
778
  const maxAttempts = retryEmptyFollowupOnce ? 2 : 1;
724
779
  const followupRequestId = buildFollowupRequestId(options.requestId, engineResult.execution.followup.requestIdSuffix);
780
+ const clientInjectOnlyRaw = metadata.clientInjectOnly;
781
+ const clientInjectOnly = clientInjectOnlyRaw === true ||
782
+ (typeof clientInjectOnlyRaw === 'string' && clientInjectOnlyRaw.trim().toLowerCase() === 'true');
783
+ if (clientInjectOnly) {
784
+ if (!options.clientInjectDispatch) {
785
+ const wrapped = new ProviderProtocolError('[servertool] client inject dispatcher unavailable', {
786
+ code: 'SERVERTOOL_FOLLOWUP_FAILED',
787
+ category: 'INTERNAL_ERROR',
788
+ details: {
789
+ flowId: engineResult.execution.flowId,
790
+ requestId: options.requestId,
791
+ upstreamCode: 'client_inject_failed',
792
+ reason: 'client_inject_dispatcher_unavailable'
793
+ }
794
+ });
795
+ wrapped.status = 502;
796
+ throw wrapped;
797
+ }
798
+ const disconnectWatcher = createClientDisconnectWatcher({
799
+ adapterContext: options.adapterContext,
800
+ requestId: options.requestId,
801
+ flowId: engineResult.execution.flowId
802
+ });
803
+ try {
804
+ const injectFollowupBody = isStopMessageFlow
805
+ ? {}
806
+ : (followupPayloadRaw && typeof followupPayloadRaw === 'object' && !Array.isArray(followupPayloadRaw)
807
+ ? coerceFollowupPayloadStream(followupPayloadRaw, metadata.stream === true)
808
+ : {});
809
+ if (isStopMessageFlow && shouldInjectStopLoopWarning && loopState) {
810
+ injectFollowupBody.messages = [];
811
+ appendStopMessageLoopWarning(injectFollowupBody, loopState.stopPairRepeatCount ?? STOP_MESSAGE_LOOP_WARN_THRESHOLD);
812
+ }
813
+ const dispatchResult = await withTimeout(Promise.race([
814
+ options.clientInjectDispatch({
815
+ entryEndpoint: followupEntryEndpoint,
816
+ requestId: followupRequestId,
817
+ body: injectFollowupBody,
818
+ metadata
819
+ }),
820
+ disconnectWatcher.promise
821
+ ]), followupTimeoutMs, () => createServerToolTimeoutError({
822
+ requestId: options.requestId,
823
+ phase: 'followup',
824
+ timeoutMs: followupTimeoutMs,
825
+ flowId: engineResult.execution.flowId
826
+ }));
827
+ if (!dispatchResult || dispatchResult.ok !== true) {
828
+ const wrapped = new ProviderProtocolError('[servertool.inject] client injection failed', {
829
+ code: 'SERVERTOOL_FOLLOWUP_FAILED',
830
+ details: {
831
+ flowId: engineResult.execution.flowId,
832
+ requestId: options.requestId,
833
+ upstreamCode: 'client_inject_failed',
834
+ reason: dispatchResult && typeof dispatchResult.reason === 'string' && dispatchResult.reason.trim()
835
+ ? dispatchResult.reason.trim()
836
+ : 'client_inject_not_handled'
837
+ }
838
+ });
839
+ wrapped.status = 502;
840
+ throw wrapped;
841
+ }
842
+ disconnectWatcher.cancel();
843
+ const decorated = decorateFinalChatWithServerToolContext(engineResult.finalChatResponse, engineResult.execution);
844
+ logProgress(5, totalSteps, 'completed (client inject only)', { flowId });
845
+ return {
846
+ chat: decorated,
847
+ executed: true,
848
+ flowId: engineResult.execution.flowId
849
+ };
850
+ }
851
+ catch (error) {
852
+ disconnectWatcher.cancel();
853
+ if (isServerToolClientDisconnectedError(error) || isAdapterClientDisconnected(options.adapterContext)) {
854
+ logProgress(5, totalSteps, 'completed (client disconnected)', { flowId });
855
+ return {
856
+ chat: engineResult.finalChatResponse,
857
+ executed: true,
858
+ flowId: engineResult.execution.flowId
859
+ };
860
+ }
861
+ if (isStopMessageFlow) {
862
+ disableStopMessageAfterFailedFollowup(options.adapterContext, stopMessageReservation);
863
+ logProgress(5, totalSteps, 'failed (stopMessage client inject failed; state cleared)', { flowId });
864
+ throw error;
865
+ }
866
+ throw error;
867
+ }
868
+ }
869
+ if (!options.reenterPipeline) {
870
+ const wrapped = new ProviderProtocolError('[servertool] followup requires reenter pipeline', {
871
+ code: 'SERVERTOOL_FOLLOWUP_FAILED',
872
+ category: 'INTERNAL_ERROR',
873
+ details: {
874
+ flowId: engineResult.execution.flowId,
875
+ requestId: options.requestId,
876
+ reason: 'reenter_pipeline_unavailable'
877
+ }
878
+ });
879
+ wrapped.status = 502;
880
+ throw wrapped;
881
+ }
882
+ if (!followupPayloadRaw) {
883
+ const decorated = decorateFinalChatWithServerToolContext(engineResult.finalChatResponse, engineResult.execution);
884
+ logProgress(5, totalSteps, 'completed (metadata-only followup without payload)', { flowId });
885
+ return {
886
+ chat: decorated,
887
+ executed: true,
888
+ flowId: engineResult.execution.flowId
889
+ };
890
+ }
891
+ // Build followup payload for non-client-inject flows
725
892
  let followupPayload = coerceFollowupPayloadStream(followupPayloadRaw, metadata.stream === true);
726
- if (shouldInjectStopLoopWarning) {
727
- appendStopMessageLoopWarning(followupPayload, loopState?.stopPairRepeatCount ?? STOP_MESSAGE_LOOP_WARN_THRESHOLD);
893
+ if (shouldInjectStopLoopWarning && loopState) {
894
+ appendStopMessageLoopWarning(followupPayload, loopState.stopPairRepeatCount ?? STOP_MESSAGE_LOOP_WARN_THRESHOLD);
728
895
  }
729
896
  followupPayload = applyHubFollowupPolicyShadow({
730
897
  requestId: followupRequestId,
@@ -819,6 +986,11 @@ export async function runServerToolOrchestration(options) {
819
986
  }
820
987
  lastError = error;
821
988
  if (attempt >= maxAttempts) {
989
+ if (isStopMessageFlow) {
990
+ disableStopMessageAfterFailedFollowup(options.adapterContext, stopMessageReservation);
991
+ logProgress(5, totalSteps, 'failed (stopMessage followup failed; state cleared)', { flowId, attempt });
992
+ throw error;
993
+ }
822
994
  const wrapped = new ProviderProtocolError(`[servertool] Followup failed for flow ${engineResult.execution.flowId ?? 'unknown'} ` +
823
995
  `(attempt ${attempt}/${maxAttempts})`, {
824
996
  code: 'SERVERTOOL_FOLLOWUP_FAILED',
@@ -840,18 +1012,8 @@ export async function runServerToolOrchestration(options) {
840
1012
  : undefined;
841
1013
  if (retryEmptyFollowupOnce && (!followupBody || isEmptyClientResponsePayload(followupBody))) {
842
1014
  if (isStopMessageFlow) {
843
- // 对 stopMessage:先清理状态,避免后续请求继续触发失败循环;
844
- // 若原始响应可用则回退原始响应,否则显式抛错,避免“静默空响应”。
845
1015
  disableStopMessageAfterFailedFollowup(options.adapterContext, stopMessageReservation);
846
- const fallbackOriginal = engineResult.finalChatResponse;
847
- if (fallbackOriginal && !isEmptyClientResponsePayload(fallbackOriginal)) {
848
- logProgress(5, totalSteps, 'completed (stopMessage followup empty; fallback to original)', { flowId });
849
- return {
850
- chat: fallbackOriginal,
851
- executed: true,
852
- flowId: engineResult.execution.flowId
853
- };
854
- }
1016
+ logProgress(5, totalSteps, 'failed (stopMessage followup empty; state cleared)', { flowId });
855
1017
  throw createEmptyFollowupError({
856
1018
  flowId: engineResult.execution.flowId,
857
1019
  requestId: options.requestId,
@@ -976,6 +1138,8 @@ function disableStopMessageAfterFailedFollowup(adapterContext, reservation) {
976
1138
  state.stopMessageSource = undefined;
977
1139
  state.stopMessageUpdatedAt = now;
978
1140
  state.stopMessageLastUsedAt = now;
1141
+ state.stopMessageAiSeedPrompt = undefined;
1142
+ state.stopMessageAiHistory = undefined;
979
1143
  saveRoutingInstructionStateSync(key, state);
980
1144
  }
981
1145
  catch {
@@ -988,67 +1152,49 @@ function resolveStickyKeyFromAdapterContext(adapterContext) {
988
1152
  }
989
1153
  const record = adapterContext;
990
1154
  const runtime = readRuntimeMetadata(record);
991
- const providerProtocol = readTextFromAny(record.providerProtocol) ||
992
- readTextFromAny(runtime?.providerProtocol) ||
993
- readTextFromAny(record.provider_protocol) ||
994
- readTextFromAny(runtime?.provider_protocol);
995
- if (providerProtocol.trim().toLowerCase() === 'openai-responses') {
996
- const previousRequestId = resolveResponsesResumePreviousRequestId(record, runtime);
997
- if (previousRequestId) {
998
- return previousRequestId;
1155
+ const explicitScope = readTextFromAny(runtime?.stopMessageClientInjectSessionScope) ||
1156
+ readTextFromAny(runtime?.stopMessageClientInjectScope) ||
1157
+ readTextFromAny(record.stopMessageClientInjectSessionScope) ||
1158
+ readTextFromAny(record.stopMessageClientInjectScope);
1159
+ if (explicitScope &&
1160
+ (explicitScope.startsWith('tmux:') || explicitScope.startsWith('session:') || explicitScope.startsWith('conversation:'))) {
1161
+ return explicitScope;
1162
+ }
1163
+ const metadata = asRecord(record.metadata);
1164
+ const tmuxSessionId = readTextFromAny(record.clientTmuxSessionId) ||
1165
+ readTextFromAny(record.client_tmux_session_id) ||
1166
+ readTextFromAny(record.tmuxSessionId) ||
1167
+ readTextFromAny(record.tmux_session_id) ||
1168
+ readTextFromAny(runtime?.clientTmuxSessionId) ||
1169
+ readTextFromAny(runtime?.client_tmux_session_id) ||
1170
+ readTextFromAny(runtime?.tmuxSessionId) ||
1171
+ readTextFromAny(runtime?.tmux_session_id) ||
1172
+ readTextFromAny(metadata?.clientTmuxSessionId) ||
1173
+ readTextFromAny(metadata?.client_tmux_session_id) ||
1174
+ readTextFromAny(metadata?.tmuxSessionId) ||
1175
+ readTextFromAny(metadata?.tmux_session_id);
1176
+ if (!tmuxSessionId) {
1177
+ const sessionId = readTextFromAny(record.sessionId) ||
1178
+ readTextFromAny(record.session_id) ||
1179
+ readTextFromAny(runtime?.sessionId) ||
1180
+ readTextFromAny(runtime?.session_id) ||
1181
+ readTextFromAny(metadata?.sessionId) ||
1182
+ readTextFromAny(metadata?.session_id);
1183
+ if (sessionId) {
1184
+ return `session:${sessionId}`;
999
1185
  }
1000
- const requestId = resolveStickyRequestId(record, runtime);
1001
- if (requestId) {
1002
- return requestId;
1003
- }
1004
- }
1005
- const sessionId = readTextFromAny(record.sessionId) ||
1006
- readTextFromAny(record.session_id) ||
1007
- readTextFromAny(runtime?.sessionId) ||
1008
- readTextFromAny(runtime?.session_id);
1009
- const conversationId = readTextFromAny(record.conversationId) ||
1010
- readTextFromAny(record.conversation_id) ||
1011
- readTextFromAny(runtime?.conversationId) ||
1012
- readTextFromAny(runtime?.conversation_id);
1013
- if (sessionId) {
1014
- return `session:${sessionId}`;
1015
- }
1016
- if (conversationId) {
1017
- return `conversation:${conversationId}`;
1018
- }
1019
- const requestId = resolveStickyRequestId(record, runtime);
1020
- return requestId || undefined;
1021
- }
1022
- function resolveStickyRequestId(context, runtime) {
1023
- return (readTextFromAny(context.requestId) ||
1024
- readTextFromAny(context.request_id) ||
1025
- readTextFromAny(runtime?.requestId) ||
1026
- readTextFromAny(runtime?.request_id));
1027
- }
1028
- function resolveResponsesResumePreviousRequestId(context, runtime) {
1029
- const contextMetadata = asRecord(context.metadata);
1030
- const contextMetadataContext = asRecord(contextMetadata?.context);
1031
- const originalRequest = asRecord(context.originalRequest);
1032
- const originalMetadata = asRecord(originalRequest?.metadata);
1033
- const candidates = [
1034
- context.responsesResume,
1035
- contextMetadata?.responsesResume,
1036
- contextMetadataContext?.responsesResume,
1037
- originalRequest?.responsesResume,
1038
- originalMetadata?.responsesResume,
1039
- runtime?.responsesResume
1040
- ];
1041
- for (const candidate of candidates) {
1042
- const resume = asRecord(candidate);
1043
- if (!resume) {
1044
- continue;
1045
- }
1046
- const previousRequestId = readTextFromAny(resume.previousRequestId) || readTextFromAny(resume.previous_request_id);
1047
- if (previousRequestId) {
1048
- return previousRequestId;
1186
+ const conversationId = readTextFromAny(record.conversationId) ||
1187
+ readTextFromAny(record.conversation_id) ||
1188
+ readTextFromAny(runtime?.conversationId) ||
1189
+ readTextFromAny(runtime?.conversation_id) ||
1190
+ readTextFromAny(metadata?.conversationId) ||
1191
+ readTextFromAny(metadata?.conversation_id);
1192
+ if (conversationId) {
1193
+ return `conversation:${conversationId}`;
1049
1194
  }
1195
+ return undefined;
1050
1196
  }
1051
- return '';
1197
+ return `tmux:${tmuxSessionId}`;
1052
1198
  }
1053
1199
  function asRecord(value) {
1054
1200
  if (!value || typeof value !== 'object' || Array.isArray(value)) {
@@ -1219,6 +1365,48 @@ function buildServerToolLoopState(adapterContext, flowId, payload, response) {
1219
1365
  }
1220
1366
  return base;
1221
1367
  }
1368
+ function resolveCapturedChatRequest(adapterContext) {
1369
+ if (!adapterContext || typeof adapterContext !== 'object') {
1370
+ return null;
1371
+ }
1372
+ const record = adapterContext;
1373
+ const direct = record.capturedChatRequest;
1374
+ if (direct && typeof direct === 'object' && !Array.isArray(direct)) {
1375
+ return direct;
1376
+ }
1377
+ const rt = readRuntimeMetadata(record);
1378
+ const runtimeCaptured = rt && typeof rt === 'object' && !Array.isArray(rt)
1379
+ ? rt.capturedChatRequest
1380
+ : undefined;
1381
+ if (runtimeCaptured && typeof runtimeCaptured === 'object' && !Array.isArray(runtimeCaptured)) {
1382
+ return runtimeCaptured;
1383
+ }
1384
+ const originalRequest = record.originalRequest;
1385
+ if (originalRequest && typeof originalRequest === 'object' && !Array.isArray(originalRequest)) {
1386
+ return originalRequest;
1387
+ }
1388
+ return null;
1389
+ }
1390
+ function buildStopMessageLoopPayload(adapterContext) {
1391
+ const captured = resolveCapturedChatRequest(adapterContext);
1392
+ const seed = extractCapturedChatSeed(captured);
1393
+ if (!seed || !Array.isArray(seed.messages) || seed.messages.length === 0) {
1394
+ return null;
1395
+ }
1396
+ const payload = {
1397
+ messages: seed.messages
1398
+ };
1399
+ if (seed.model) {
1400
+ payload.model = seed.model;
1401
+ }
1402
+ if (Array.isArray(seed.tools) && seed.tools.length > 0) {
1403
+ payload.tools = seed.tools;
1404
+ }
1405
+ if (seed.parameters && typeof seed.parameters === 'object' && !Array.isArray(seed.parameters)) {
1406
+ payload.parameters = seed.parameters;
1407
+ }
1408
+ return payload;
1409
+ }
1222
1410
  function readServerToolLoopState(adapterContext) {
1223
1411
  if (!adapterContext || typeof adapterContext !== 'object') {
1224
1412
  return null;
@@ -1,6 +1,6 @@
1
1
  import { registerServerToolHandler } from '../registry.js';
2
2
  import { extractCapturedChatSeed } from './followup-request-builder.js';
3
- import { ensureRuntimeMetadata, readRuntimeMetadata } from '../../conversion/shared/runtime-metadata.js';
3
+ import { ensureRuntimeMetadata, readRuntimeMetadata } from '../../conversion/runtime-metadata.js';
4
4
  import { cloneJson } from '../server-side-tools.js';
5
5
  const FLOW_ID = 'antigravity_thought_signature_bootstrap';
6
6
  function readProviderKey(adapterContext) {
@@ -57,7 +57,7 @@ function buildClockToolSchema() {
57
57
  type: 'function',
58
58
  function: {
59
59
  name: 'clock',
60
- description: 'Time + Alarm for this session. Use get/schedule/update/list/cancel/clear. Scheduled reminders will be injected into future requests.',
60
+ description: 'Time + Alarm for this session. If waiting longer than 2 minutes is required, call clock.schedule now (do not only promise to wait). Format example: {"action":"schedule","items":[{"dueAt":"<ISO8601>","task":"<exact follow-up action>","tool":"<tool-name-or-empty>","arguments":"<json-string-or-{}>"}],"taskId":""}. Use get/schedule/update/list/cancel/clear. Scheduled reminders will be injected into future requests.',
61
61
  strict: true,
62
62
  parameters: {
63
63
  type: 'object',
@@ -65,7 +65,7 @@ function buildClockToolSchema() {
65
65
  action: {
66
66
  type: 'string',
67
67
  enum: ['get', 'schedule', 'update', 'list', 'cancel', 'clear'],
68
- description: 'Get current time, or schedule/update/list/cancel/clear session-scoped reminders.'
68
+ description: 'Get current time, or schedule/update/list/cancel/clear session-scoped reminders. If waiting longer than 2 minutes is required, use action="schedule" immediately.'
69
69
  },
70
70
  items: {
71
71
  type: 'array',
@@ -1,6 +1,6 @@
1
1
  import { registerServerToolHandler } from '../registry.js';
2
2
  import { extractCapturedChatSeed } from './followup-request-builder.js';
3
- import { readRuntimeMetadata } from '../../conversion/shared/runtime-metadata.js';
3
+ import { readRuntimeMetadata } from '../../conversion/runtime-metadata.js';
4
4
  import { findNextUndeliveredDueAtMs, listClockTasks, reserveDueTasksForRequest, resolveClockConfig, startClockDaemonIfNeeded } from '../clock/task-store.js';
5
5
  import { nowMs } from '../clock/state.js';
6
6
  import { logClock } from '../clock/log.js';
@@ -1,7 +1,7 @@
1
1
  import { registerServerToolHandler } from '../registry.js';
2
2
  import { cloneJson } from '../server-side-tools.js';
3
3
  import { extractCapturedChatSeed } from './followup-request-builder.js';
4
- import { ensureRuntimeMetadata, readRuntimeMetadata } from '../../conversion/shared/runtime-metadata.js';
4
+ import { ensureRuntimeMetadata, readRuntimeMetadata } from '../../conversion/runtime-metadata.js';
5
5
  import { cancelClockTask, clearClockTasks, listClockTasks, resolveClockConfig, parseDueAtMs, scheduleClockTasks, startClockDaemonIfNeeded, updateClockTask } from '../clock/task-store.js';
6
6
  import { getClockTimeSnapshot } from '../clock/ntp.js';
7
7
  import { nowMs } from '../clock/state.js';
@@ -385,7 +385,7 @@ const handler = async (ctx) => {
385
385
  return respond({
386
386
  ok: false,
387
387
  action,
388
- message: 'clock requires session scope (sessionId/conversationId or clockDaemonId).'
388
+ message: 'clock requires tmux session scope (clientTmuxSessionId/tmuxSessionId).'
389
389
  });
390
390
  }
391
391
  if (action === 'list') {
@@ -1 +1 @@
1
- export { isCompactionRequest } from '../../conversion/shared/compaction-detect.js';
1
+ export { isCompactionRequest } from '../../conversion/compaction-detect.js';
@@ -1 +1 @@
1
- export { isCompactionRequest } from '../../conversion/shared/compaction-detect.js';
1
+ export { isCompactionRequest } from '../../conversion/compaction-detect.js';
@@ -54,7 +54,7 @@ const handler = async (ctx) => {
54
54
  }
55
55
  const parsed = parseToolArguments(toolCall);
56
56
  const reason = normalizeReason(parsed);
57
- const followupText = '继续执行当前任务,不要中断到总结/汇报。仅在任务真正完成后再给最终总结。该工具用于避免打断会话并提高执行效率。';
57
+ const followupText = '继续执行当前任务。强制规则:凡是“仅汇报进度”或“准备 stop/end_turn”,都必须先调用 CONTINUE execution(continue_execution,可传 {"reason":"progress_update"})。进度汇报顺序必须是:1) 先调 continue_execution;2) 最多 5 行简短汇报;3) 立即继续真实动作。进度汇报后禁止 finish_reason=stop/end_turn;仅在任务真正完成后才允许最终总结。';
58
58
  return {
59
59
  flowId: FLOW_ID,
60
60
  finalize: async () => {
@@ -64,7 +64,7 @@ const handler = async (ctx) => {
64
64
  noop: true,
65
65
  action: 'continue_execution',
66
66
  ...(reason ? { reason } : {}),
67
- message: 'No-op acknowledged. Continue execution without pausing for status summaries or ending turn early. If you were about to stop/end_turn, emit continue_execution first; server auto-followup keeps execution moving.'
67
+ message: 'No-op acknowledged. continue_execution is mandatory before progress-only summaries or stop/end_turn. Do not emit finish_reason=stop/end_turn for progress-only updates. After summary, continue real actions immediately; server auto-followup keeps execution moving.'
68
68
  });
69
69
  return {
70
70
  chatResponse: patched,
@@ -78,9 +78,13 @@ const handler = async (ctx) => {
78
78
  { op: 'preserve_tools' },
79
79
  { op: 'ensure_standard_tools' },
80
80
  { op: 'append_assistant_message', required: true },
81
- { op: 'append_tool_messages_from_tool_outputs', required: true },
82
- { op: 'append_user_text', text: followupText }
81
+ { op: 'append_tool_messages_from_tool_outputs', required: true }
83
82
  ]
83
+ },
84
+ metadata: {
85
+ clientInjectOnly: true,
86
+ clientInjectText: '继续执行',
87
+ clientInjectSource: 'servertool.continue_execution'
84
88
  }
85
89
  }
86
90
  }
@@ -331,7 +331,7 @@ function buildStandardFollowupTools() {
331
331
  type: 'function',
332
332
  function: {
333
333
  name: 'continue_execution',
334
- description: 'No-op control tool. Use this before summaries or before ending the turn. If you are about to return stop/end_turn, emit continue_execution first instead of ending directly. Keep it lightweight; server auto-followup continues execution.',
334
+ description: 'No-op control tool for progress reporting without interrupting execution. Mandatory rule: if you are giving a progress-only update or are about to stop/end_turn, you MUST call continue_execution first (example arguments: {"reason":"progress_update"}). Required sequence: (1) call continue_execution, (2) provide a brief progress summary (<=5 lines), (3) immediately continue real actions. Do NOT emit finish_reason=stop/end_turn for progress-only updates. Only stop when the overall goal is complete. If waiting longer than 2 minutes is needed, use clock.schedule instead.',
335
335
  parameters: {
336
336
  type: 'object',
337
337
  properties: {},
@@ -340,6 +340,23 @@ function buildStandardFollowupTools() {
340
340
  }
341
341
  }
342
342
  },
343
+ {
344
+ type: 'function',
345
+ function: {
346
+ name: 'review',
347
+ description: 'Independent reviewer handoff. Use when you need an external evidence-based code review before claiming completion. The review result will be injected back to client as next-step guidance. Do not stop immediately after this tool.',
348
+ parameters: {
349
+ type: 'object',
350
+ properties: {
351
+ goal: { type: 'string' },
352
+ context: { type: 'string' },
353
+ focus: { type: 'string' }
354
+ },
355
+ required: ['goal', 'context', 'focus'],
356
+ additionalProperties: false
357
+ }
358
+ }
359
+ },
343
360
  {
344
361
  type: 'function',
345
362
  function: {
@@ -1,7 +1,7 @@
1
1
  import { registerServerToolHandler } from '../registry.js';
2
2
  import { isCompactionRequest } from './compaction-detect.js';
3
3
  import { extractCapturedChatSeed } from './followup-request-builder.js';
4
- import { ensureRuntimeMetadata, readRuntimeMetadata } from '../../conversion/shared/runtime-metadata.js';
4
+ import { ensureRuntimeMetadata, readRuntimeMetadata } from '../../conversion/runtime-metadata.js';
5
5
  const FLOW_ID = 'empty_reply_continue';
6
6
  const MAX_TOOL_HINTS = 24;
7
7
  const handler = async (ctx) => {
@@ -186,11 +186,17 @@ function extractResponsesOutputText(base) {
186
186
  const pType = typeof part.type === 'string'
187
187
  ? String(part.type).trim().toLowerCase()
188
188
  : '';
189
- if (pType === 'output_text') {
189
+ if (pType === 'output_text' || pType === 'text' || pType === 'input_text') {
190
190
  const text = typeof part.text === 'string' ? String(part.text) : '';
191
191
  if (text.trim().length)
192
192
  chunks.push(text.trim());
193
+ continue;
193
194
  }
195
+ const fallback = typeof part.content === 'string'
196
+ ? String(part.content).trim()
197
+ : '';
198
+ if (fallback.length)
199
+ chunks.push(fallback);
194
200
  }
195
201
  }
196
202
  return chunks.join('\n').trim();
@@ -1,7 +1,7 @@
1
1
  import { registerServerToolHandler } from '../registry.js';
2
2
  import { isCompactionRequest } from './compaction-detect.js';
3
3
  import { extractCapturedChatSeed } from './followup-request-builder.js';
4
- import { readRuntimeMetadata } from '../../conversion/shared/runtime-metadata.js';
4
+ import { readRuntimeMetadata } from '../../conversion/runtime-metadata.js';
5
5
  const FLOW_ID = 'iflow_model_error_retry';
6
6
  const handler = async (ctx) => {
7
7
  if (!ctx.capabilities.reenterPipeline) {
@@ -1,7 +1,7 @@
1
1
  import { createHash } from 'node:crypto';
2
2
  import { registerServerToolHandler } from '../registry.js';
3
3
  import { cloneJson } from '../server-side-tools.js';
4
- import { readRuntimeMetadata } from '../../conversion/shared/runtime-metadata.js';
4
+ import { readRuntimeMetadata } from '../../conversion/runtime-metadata.js';
5
5
  import { extractCapturedChatSeed } from './followup-request-builder.js';
6
6
  const FLOW_ID = 'recursive_detection_guard';
7
7
  const CONSECUTIVE_TRIGGER_COUNT = 10;
@@ -0,0 +1 @@
1
+ export {};