@omnicross/core 0.1.0 → 0.1.2

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 (272) hide show
  1. package/dist/ApiConverter.cjs +24 -0
  2. package/dist/ApiConverter.d.cts +82 -0
  3. package/dist/ApiConverter.d.ts +82 -0
  4. package/dist/ApiConverter.js +24 -0
  5. package/dist/BuiltinToolExecutor-BluWyeob.d.ts +81 -0
  6. package/dist/BuiltinToolExecutor-CS2WpXhM.d.cts +81 -0
  7. package/dist/CompletionService-D3a47vdU.d.cts +213 -0
  8. package/dist/CompletionService-DdWaAxq0.d.ts +213 -0
  9. package/dist/{ProviderProxy-f_8ziIhW.d.cts → ProviderProxy-C-xqrkKi.d.ts} +7 -2
  10. package/dist/{ProviderProxy-vjt8sQQk.d.ts → ProviderProxy-CnMQYN59.d.cts} +7 -2
  11. package/dist/auth/GeminiCodeAssistProjectResolver.cjs +27 -60
  12. package/dist/auth/GeminiCodeAssistProjectResolver.js +5 -9
  13. package/dist/builtin-web-fetch-77JZUZGM.cjs +100 -0
  14. package/dist/builtin-web-fetch-IGLBX2XY.js +100 -0
  15. package/dist/chunk-2DCNB7DF.cjs +514 -0
  16. package/dist/chunk-2FEVTJWG.js +4400 -0
  17. package/dist/chunk-3MEACFK3.js +193 -0
  18. package/dist/chunk-3OPYJG76.cjs +266 -0
  19. package/dist/chunk-46RLHI7D.js +0 -0
  20. package/dist/chunk-46ZIFWYG.cjs +277 -0
  21. package/dist/chunk-4NBS6KPV.cjs +43 -0
  22. package/dist/chunk-4VAVYUZS.cjs +991 -0
  23. package/dist/chunk-5ERIZW3D.js +44 -0
  24. package/dist/chunk-5HTVET6E.js +514 -0
  25. package/dist/chunk-5ZQBEOMD.js +764 -0
  26. package/dist/chunk-6VIXXLMX.cjs +14 -0
  27. package/dist/chunk-745DV5FL.js +147 -0
  28. package/dist/chunk-74TMJA7Z.js +53 -0
  29. package/dist/chunk-7VU7V2E4.js +0 -0
  30. package/dist/chunk-7YN22L2H.cjs +87 -0
  31. package/dist/chunk-A2YMUCBT.cjs +105 -0
  32. package/dist/chunk-AQ5TNQB7.js +13 -0
  33. package/dist/chunk-AVYJ4YBN.js +58 -0
  34. package/dist/chunk-C72S6TTV.cjs +49 -0
  35. package/dist/chunk-C7PSERMH.js +87 -0
  36. package/dist/chunk-CDHS2QDC.js +179 -0
  37. package/dist/chunk-DK4A7DLE.js +266 -0
  38. package/dist/chunk-DRWHTIIZ.js +13 -0
  39. package/dist/chunk-DWKQZ2SK.cjs +254 -0
  40. package/dist/chunk-E3WHL7CO.js +14 -0
  41. package/dist/chunk-EYZYXJTJ.cjs +1 -0
  42. package/dist/chunk-FMOBD2OQ.js +39 -0
  43. package/dist/chunk-FTQ7IQUC.js +991 -0
  44. package/dist/chunk-FZ46M34D.cjs +1 -0
  45. package/dist/chunk-G2FUJNA2.cjs +193 -0
  46. package/dist/chunk-G2UTNSGU.js +277 -0
  47. package/dist/chunk-GBHYAGX3.cjs +26 -0
  48. package/dist/chunk-GMMT7RVN.cjs +39 -0
  49. package/dist/chunk-H5JUT3KV.js +105 -0
  50. package/dist/chunk-HQP3K7PU.cjs +431 -0
  51. package/dist/chunk-JO5NLTLY.js +46 -0
  52. package/dist/chunk-JWC6APFQ.js +23 -0
  53. package/dist/chunk-KUU2RNG6.cjs +46 -0
  54. package/dist/chunk-LKZJEL6E.cjs +124 -0
  55. package/dist/chunk-MNYKI4CI.js +94 -0
  56. package/dist/chunk-MZNPGW5Q.js +26 -0
  57. package/dist/chunk-N3V2J5ZO.cjs +53 -0
  58. package/dist/chunk-NYUNU75A.cjs +44 -0
  59. package/dist/chunk-NZYN7C3P.cjs +179 -0
  60. package/dist/chunk-O466Y272.js +235 -0
  61. package/dist/chunk-PXUJF5HS.js +124 -0
  62. package/dist/chunk-QBZJ7P2T.cjs +13 -0
  63. package/dist/chunk-QOCNX236.js +46 -0
  64. package/dist/chunk-QXD4MV2X.cjs +23 -0
  65. package/dist/chunk-R3HK6R4B.cjs +13 -0
  66. package/dist/chunk-RSJ3TWJQ.cjs +186 -0
  67. package/dist/chunk-S4WBV25P.js +913 -0
  68. package/dist/chunk-SN3YWBX7.cjs +4400 -0
  69. package/dist/chunk-SPVWWUHX.cjs +46 -0
  70. package/dist/chunk-SUEGJ75D.cjs +764 -0
  71. package/dist/chunk-SVNDB62D.cjs +58 -0
  72. package/dist/chunk-UYPEN5XE.cjs +235 -0
  73. package/dist/chunk-V5KPWNYX.cjs +147 -0
  74. package/dist/chunk-VVEHS2LI.js +431 -0
  75. package/dist/chunk-XBSYYZIY.cjs +94 -0
  76. package/dist/chunk-YGXJGRFI.cjs +913 -0
  77. package/dist/chunk-YMFAJFQT.cjs +173 -0
  78. package/dist/chunk-Z7LUNECE.js +49 -0
  79. package/dist/chunk-Z7Y2NPHY.js +186 -0
  80. package/dist/chunk-ZJZAOKI7.js +254 -0
  81. package/dist/chunk-ZLX3KGXX.js +173 -0
  82. package/dist/chunk-ZSVQT3PW.js +43 -0
  83. package/dist/completion/ApiKeyPoolService.cjs +23 -48
  84. package/dist/completion/ApiKeyPoolService.d.cts +150 -2
  85. package/dist/completion/ApiKeyPoolService.d.ts +150 -2
  86. package/dist/completion/BuiltinToolExecutor.cjs +12 -0
  87. package/dist/completion/BuiltinToolExecutor.d.cts +4 -0
  88. package/dist/completion/BuiltinToolExecutor.d.ts +4 -0
  89. package/dist/completion/BuiltinToolExecutor.js +12 -0
  90. package/dist/completion/CompletionService.cjs +38 -0
  91. package/dist/completion/CompletionService.d.cts +22 -0
  92. package/dist/completion/CompletionService.d.ts +22 -0
  93. package/dist/completion/CompletionService.js +38 -0
  94. package/dist/completion/NativeSearchInjector.cjs +12 -0
  95. package/dist/completion/NativeSearchInjector.d.cts +42 -0
  96. package/dist/completion/NativeSearchInjector.d.ts +42 -0
  97. package/dist/completion/NativeSearchInjector.js +12 -0
  98. package/dist/completion/ProviderSearchInjector.cjs +60 -0
  99. package/dist/completion/ProviderSearchInjector.d.cts +47 -0
  100. package/dist/completion/ProviderSearchInjector.d.ts +47 -0
  101. package/dist/completion/ProviderSearchInjector.js +60 -0
  102. package/dist/completion/native-search-types.cjs +14 -0
  103. package/dist/completion/native-search-types.d.cts +3 -0
  104. package/dist/completion/native-search-types.d.ts +3 -0
  105. package/dist/completion/native-search-types.js +14 -0
  106. package/dist/completion/openrouter-headers.cjs +16 -0
  107. package/dist/completion/openrouter-headers.d.cts +44 -0
  108. package/dist/completion/openrouter-headers.d.ts +44 -0
  109. package/dist/completion/openrouter-headers.js +16 -0
  110. package/dist/completion/openrouter-models.cjs +29 -0
  111. package/dist/completion/openrouter-models.d.cts +27 -0
  112. package/dist/completion/openrouter-models.d.ts +27 -0
  113. package/dist/completion/openrouter-models.js +29 -0
  114. package/dist/completion/types.cjs +1 -0
  115. package/dist/completion/types.d.cts +3 -0
  116. package/dist/completion/types.d.ts +3 -0
  117. package/dist/completion/types.js +0 -0
  118. package/dist/completion/url-builder.cjs +24 -0
  119. package/dist/completion/url-builder.d.cts +87 -0
  120. package/dist/completion/url-builder.d.ts +87 -0
  121. package/dist/completion/url-builder.js +24 -0
  122. package/dist/completion.cjs +55 -3989
  123. package/dist/completion.d.cts +150 -8
  124. package/dist/completion.d.ts +150 -8
  125. package/dist/completion.js +63 -3953
  126. package/dist/index.cjs +197 -10428
  127. package/dist/index.d.cts +35 -91
  128. package/dist/index.d.ts +35 -91
  129. package/dist/index.js +125 -10267
  130. package/dist/logger-4GvQNzhE.d.cts +22 -0
  131. package/dist/logger-4GvQNzhE.d.ts +22 -0
  132. package/dist/outbound-api/routeResolver.cjs +11 -0
  133. package/dist/outbound-api/routeResolver.d.cts +19 -0
  134. package/dist/outbound-api/routeResolver.d.ts +19 -0
  135. package/dist/outbound-api/routeResolver.js +11 -0
  136. package/dist/outbound-api/subscriptionRegistryPort.cjs +7 -37
  137. package/dist/outbound-api/subscriptionRegistryPort.d.cts +7 -3
  138. package/dist/outbound-api/subscriptionRegistryPort.d.ts +7 -3
  139. package/dist/outbound-api/subscriptionRegistryPort.js +4 -8
  140. package/dist/outbound-api/types.cjs +1 -0
  141. package/dist/{types-CbCN2NQP.d.ts → outbound-api/types.d.cts} +18 -3
  142. package/dist/{types-CGGrKqC_.d.cts → outbound-api/types.d.ts} +18 -3
  143. package/dist/outbound-api/types.js +0 -0
  144. package/dist/outbound-api.cjs +35 -5220
  145. package/dist/outbound-api.d.cts +16 -88
  146. package/dist/outbound-api.d.ts +16 -88
  147. package/dist/outbound-api.js +54 -5193
  148. package/dist/pipeline/AuthSource.cjs +1 -0
  149. package/dist/pipeline/AuthSource.d.cts +101 -0
  150. package/dist/pipeline/AuthSource.d.ts +101 -0
  151. package/dist/pipeline/AuthSource.js +0 -0
  152. package/dist/pipeline/LlmConfigProviderAuth.cjs +8 -0
  153. package/dist/pipeline/LlmConfigProviderAuth.d.cts +87 -0
  154. package/dist/pipeline/LlmConfigProviderAuth.d.ts +87 -0
  155. package/dist/pipeline/LlmConfigProviderAuth.js +8 -0
  156. package/dist/pipeline/SubscriptionAuthSource.cjs +6 -128
  157. package/dist/pipeline/SubscriptionAuthSource.d.cts +165 -3
  158. package/dist/pipeline/SubscriptionAuthSource.d.ts +165 -3
  159. package/dist/pipeline/SubscriptionAuthSource.js +5 -99
  160. package/dist/pipeline/SubscriptionAuthStrategy.cjs +1 -18
  161. package/dist/pipeline/executeProviderCall.cjs +6 -0
  162. package/dist/pipeline/executeProviderCall.d.cts +149 -0
  163. package/dist/pipeline/executeProviderCall.d.ts +149 -0
  164. package/dist/pipeline/executeProviderCall.js +6 -0
  165. package/dist/pipeline/resolveProviderChain.cjs +6 -0
  166. package/dist/pipeline/resolveProviderChain.d.cts +58 -0
  167. package/dist/pipeline/resolveProviderChain.d.ts +58 -0
  168. package/dist/pipeline/resolveProviderChain.js +6 -0
  169. package/dist/pipeline/resolveSubscriptionChain.cjs +6 -0
  170. package/dist/pipeline/resolveSubscriptionChain.d.cts +68 -0
  171. package/dist/pipeline/resolveSubscriptionChain.d.ts +68 -0
  172. package/dist/pipeline/resolveSubscriptionChain.js +6 -0
  173. package/dist/ports/gemini-code-assist-resolver.cjs +7 -37
  174. package/dist/ports/gemini-code-assist-resolver.js +4 -8
  175. package/dist/ports/pricing-store.cjs +1 -0
  176. package/dist/ports/pricing-store.d.cts +50 -0
  177. package/dist/ports/pricing-store.d.ts +50 -0
  178. package/dist/ports/pricing-store.js +0 -0
  179. package/dist/ports/provider-config-source.cjs +1 -0
  180. package/dist/ports/provider-config-source.d.cts +51 -0
  181. package/dist/ports/provider-config-source.d.ts +51 -0
  182. package/dist/ports/provider-config-source.js +0 -0
  183. package/dist/ports/usage-event-store.cjs +1 -0
  184. package/dist/ports/usage-event-store.d.cts +29 -0
  185. package/dist/ports/usage-event-store.d.ts +29 -0
  186. package/dist/ports/usage-event-store.js +0 -0
  187. package/dist/ports/web-search-backend.cjs +1 -0
  188. package/dist/ports/web-search-backend.d.cts +29 -0
  189. package/dist/ports/web-search-backend.d.ts +29 -0
  190. package/dist/ports/web-search-backend.js +0 -0
  191. package/dist/ports.cjs +1 -18
  192. package/dist/ports.d.cts +16 -8
  193. package/dist/ports.d.ts +16 -8
  194. package/dist/provider-proxy/ProviderProxy.cjs +40 -0
  195. package/dist/provider-proxy/ProviderProxy.d.cts +17 -0
  196. package/dist/provider-proxy/ProviderProxy.d.ts +17 -0
  197. package/dist/provider-proxy/ProviderProxy.js +40 -0
  198. package/dist/provider-proxy/ingress/providerProxyShared.cjs +35 -2941
  199. package/dist/provider-proxy/ingress/providerProxyShared.d.cts +7 -3
  200. package/dist/provider-proxy/ingress/providerProxyShared.d.ts +7 -3
  201. package/dist/provider-proxy/ingress/providerProxyShared.js +41 -2914
  202. package/dist/provider-proxy/matchText.cjs +11 -72
  203. package/dist/provider-proxy/matchText.js +6 -39
  204. package/dist/provider-proxy/types.cjs +1 -18
  205. package/dist/provider-proxy/types.d.cts +407 -8
  206. package/dist/provider-proxy/types.d.ts +407 -8
  207. package/dist/provider-proxy.cjs +35 -4654
  208. package/dist/provider-proxy.d.cts +10 -6
  209. package/dist/provider-proxy.d.ts +10 -6
  210. package/dist/provider-proxy.js +39 -4627
  211. package/dist/routeResolver-BrbK6ja9.d.cts +88 -0
  212. package/dist/routeResolver-HE-ZO0fO.d.ts +88 -0
  213. package/dist/serializeError.cjs +5 -81
  214. package/dist/serializeError.js +3 -54
  215. package/dist/sse-parser.cjs +7 -455
  216. package/dist/sse-parser.js +4 -426
  217. package/dist/transformer/TransformerChainExecutor.cjs +4 -318
  218. package/dist/transformer/TransformerChainExecutor.js +4 -291
  219. package/dist/transformer/TransformerService.cjs +5 -289
  220. package/dist/transformer/TransformerService.js +3 -262
  221. package/dist/transformer/anthropicBetaInject.cjs +8 -0
  222. package/dist/transformer/anthropicBetaInject.d.cts +20 -0
  223. package/dist/transformer/anthropicBetaInject.d.ts +20 -0
  224. package/dist/transformer/anthropicBetaInject.js +8 -0
  225. package/dist/transformer/transformers/AnthropicTransformer.cjs +6 -0
  226. package/dist/transformer/transformers/AnthropicTransformer.d.cts +148 -0
  227. package/dist/transformer/transformers/AnthropicTransformer.d.ts +148 -0
  228. package/dist/transformer/transformers/AnthropicTransformer.js +6 -0
  229. package/dist/transformer/transformers/GeminiCodeAssistTransformer.cjs +4 -1106
  230. package/dist/transformer/transformers/GeminiCodeAssistTransformer.js +7 -1079
  231. package/dist/transformer/transformers/GeminiTransformer.cjs +4 -1010
  232. package/dist/transformer/transformers/GeminiTransformer.js +4 -983
  233. package/dist/transformer/transformers/OpenAIResponseTransformer.cjs +3 -535
  234. package/dist/transformer/transformers/OpenAIResponseTransformer.js +3 -510
  235. package/dist/transformer/transformers/OpenCodeGoTransformer.cjs +5 -72
  236. package/dist/transformer/transformers/OpenCodeGoTransformer.js +3 -45
  237. package/dist/transformer/transformers/ReasoningTransformer.cjs +6 -0
  238. package/dist/transformer/transformers/ReasoningTransformer.d.cts +47 -0
  239. package/dist/transformer/transformers/ReasoningTransformer.d.ts +47 -0
  240. package/dist/transformer/transformers/ReasoningTransformer.js +6 -0
  241. package/dist/transformer/transformers.cjs +39 -0
  242. package/dist/transformer/transformers.d.cts +100 -0
  243. package/dist/transformer/transformers.d.ts +100 -0
  244. package/dist/transformer/transformers.js +39 -0
  245. package/dist/transformer/types.cjs +1 -18
  246. package/dist/transformer.cjs +13 -3726
  247. package/dist/transformer.d.cts +8 -31
  248. package/dist/transformer.d.ts +8 -31
  249. package/dist/transformer.js +17 -3706
  250. package/dist/types-BScIHmPr.d.cts +153 -0
  251. package/dist/types-BScIHmPr.d.ts +153 -0
  252. package/dist/usage/pricing-engine.cjs +6 -0
  253. package/dist/usage/pricing-engine.d.cts +83 -0
  254. package/dist/usage/pricing-engine.d.ts +83 -0
  255. package/dist/usage/pricing-engine.js +6 -0
  256. package/dist/usage/usage-recorder.cjs +6 -0
  257. package/dist/usage/usage-recorder.d.cts +73 -0
  258. package/dist/usage/usage-recorder.d.ts +73 -0
  259. package/dist/usage/usage-recorder.js +6 -0
  260. package/dist/usage.cjs +11 -0
  261. package/dist/usage.d.cts +8 -0
  262. package/dist/usage.d.ts +8 -0
  263. package/dist/usage.js +11 -0
  264. package/package.json +3 -3
  265. package/dist/ApiKeyPoolService-BmMkau07.d.cts +0 -170
  266. package/dist/ApiKeyPoolService-BmMkau07.d.ts +0 -170
  267. package/dist/SubscriptionAuthSource-Cr4fVEYY.d.cts +0 -264
  268. package/dist/SubscriptionAuthSource-D89zmiSS.d.ts +0 -264
  269. package/dist/index-BTSmc9Sm.d.ts +0 -645
  270. package/dist/index-DXazdTzZ.d.cts +0 -645
  271. package/dist/types-DCzHkhJt.d.ts +0 -467
  272. package/dist/types-DZIQbgp0.d.cts +0 -467
@@ -0,0 +1,149 @@
1
+ import { TransformerChainExecutor, ChainExecutionOptions } from '../transformer/TransformerChainExecutor.js';
2
+ import { UnifiedChatRequest, LLMProvider, ResolvedTransformerChain, Transformer, RequestConfig } from '../transformer/types.js';
3
+
4
+ /**
5
+ * executeProviderCall — shared provider-request exchange core.
6
+ *
7
+ * Phase 1 of the `provider-request-pipeline` OpenSpec change (design D2/D4/D6).
8
+ *
9
+ * The three consumer paths (the wire-format proxy handler, the host engine
10
+ * adapter, TransformerHandler) each re-implemented the same middle:
11
+ *
12
+ * executor.executeRequestChain(...) → resolve URL → assemble headers
13
+ * → fetch → (optionally) executor.executeResponseChain(...)
14
+ *
15
+ * This module owns ONLY that common exchange. Every step that diverges
16
+ * between the three sites is injected via options so each call site keeps
17
+ * its CURRENT behavior verbatim:
18
+ *
19
+ * - URL building → `resolveUrl(config)`
20
+ * - header assembly → `buildHeaders(config)`
21
+ * - post-transform body mutation → `prepareBody(requestBody, config)`
22
+ * - fetch mechanism → `fetchFn(url, headers, body)`
23
+ * - endpoint transform → `endpointTransformer` (proxy = Anthropic; others omit)
24
+ * - response chain → `runResponseChain` flag + `responseChainRequest`
25
+ *
26
+ * IMPORTANT subtleties preserved verbatim:
27
+ *
28
+ * 1. The response chain's FIRST argument is the REQUEST body, NOT the
29
+ * mutated `prepareBody` output. Each site passes a DIFFERENT variable
30
+ * there today (proxy → post-transform `requestBody`; Adapter/Handler →
31
+ * the pre-transform `unifiedRequest`), so the core does not hard-code
32
+ * it — `responseChainRequest` is supplied by the caller when
33
+ * `runResponseChain` is true.
34
+ *
35
+ * 2. The engine adapter and Handler check `response.ok` on the RAW fetch response
36
+ * BEFORE running the response chain. Those sites therefore set
37
+ * `runResponseChain: false` (the default) and run `executeResponseChain`
38
+ * themselves at the call site after their `.ok` gate. The proxy uses
39
+ * `fetchWithRetry` (no raw `.ok` gate between fetch and the response
40
+ * chain) so it sets `runResponseChain: true` and lets the core run it.
41
+ *
42
+ * @module pipeline/executeProviderCall
43
+ */
44
+
45
+ /**
46
+ * Inputs for {@link executeProviderCall}. Everything that differs between
47
+ * the three ingress adapters is injected here; the core owns only the
48
+ * fixed orchestration between `executeRequestChain` and the fetch.
49
+ */
50
+ interface ProviderCallContext {
51
+ /** Shared (stateless) transformer-chain executor. */
52
+ executor: TransformerChainExecutor;
53
+ /**
54
+ * The request to send into the request chain. For the proxy this is the
55
+ * raw Anthropic wire body (decoded by `endpointTransformer`); for the
56
+ * unified ingresses this is a `UnifiedChatRequest`.
57
+ */
58
+ request: UnifiedChatRequest | Record<string, unknown>;
59
+ /** Provider config in transformer runtime shape. */
60
+ provider: LLMProvider;
61
+ /** Resolved transformer chain (provider + model transformers). */
62
+ chain: ResolvedTransformerChain;
63
+ /**
64
+ * Endpoint transformer — present only for wire-format ingress (the proxy
65
+ * passes `AnthropicTransformer`). Omitted for unified ingresses.
66
+ */
67
+ endpointTransformer?: Transformer;
68
+ /**
69
+ * 1M-context opt-in, threaded straight through to
70
+ * `executeRequestChain`'s `extendedContext` option, exactly as the call
71
+ * sites pass it today.
72
+ */
73
+ extendedContext?: ChainExecutionOptions['extendedContext'];
74
+ /**
75
+ * Build the target URL from the post-request-chain `config`. Each site
76
+ * supplies its CURRENT URL logic:
77
+ * - proxy: always `buildProviderApiUrl(...)` (ignores config.url)
78
+ * - Adapter/Handler: `config.url instanceof URL ? config.url.toString() : buildProviderApiUrl(...)`
79
+ */
80
+ resolveUrl: (config: RequestConfig) => string;
81
+ /**
82
+ * Assemble the outbound headers from the post-request-chain `config`.
83
+ * Each site supplies its CURRENT header logic:
84
+ * - proxy: getProviderHeaders + config.headers EXCLUDING AUTH_HEADER_KEYS
85
+ * - Adapter/Handler: getProviderHeaders + config.headers + OpenRouter app headers
86
+ */
87
+ buildHeaders: (config: RequestConfig) => Record<string, string>;
88
+ /**
89
+ * Post-transform / pre-fetch body mutation seam (design D4). Applied to
90
+ * the request-chain output `requestBody` immediately before fetch. The
91
+ * default is identity. NOTE: the value returned here becomes the fetched
92
+ * body ONLY — the response chain still receives the pre-mutation request
93
+ * (see `responseChainRequest`).
94
+ */
95
+ prepareBody?: (requestBody: unknown, config: RequestConfig) => unknown | Promise<unknown>;
96
+ /**
97
+ * The fetch mechanism. Each site supplies its CURRENT mechanism:
98
+ * - proxy: `this.deps.errors.fetchWithRetry(url, headers, body, model)`
99
+ * - Adapter: `fetch(url, { ..., signal: AbortSignal.timeout(...) })`
100
+ * - Handler: `fetch(url, { ... })`
101
+ */
102
+ fetchFn: (url: string, headers: Record<string, string>, body: unknown) => Promise<Response>;
103
+ /**
104
+ * When `true`, the core runs `executeResponseChain` on the fetched
105
+ * response and returns the TRANSFORMED response. When `false` (default),
106
+ * the core returns the RAW fetched response and the caller runs the
107
+ * response chain itself — this preserves call sites that gate on
108
+ * `response.ok` BEFORE the response chain (Adapter / Handler).
109
+ */
110
+ runResponseChain?: boolean;
111
+ /**
112
+ * The first argument passed to `executeResponseChain` when
113
+ * `runResponseChain` is true. This is REQUIRED in that mode because the
114
+ * sites diverge on which variable they pass (proxy → post-transform
115
+ * `requestBody`; the unified ingresses → the pre-transform request). The
116
+ * core never assumes it equals `prepareBody`'s output.
117
+ */
118
+ responseChainRequest?: UnifiedChatRequest;
119
+ }
120
+ /**
121
+ * Result of the common exchange.
122
+ *
123
+ * `response` is the TRANSFORMED response when `runResponseChain` was true,
124
+ * otherwise the RAW fetched response. The remaining fields expose the
125
+ * request-chain outputs so callers can run the response chain themselves
126
+ * (when `runResponseChain` is false) with the exact variables they used
127
+ * before, and so the wire-capture / logging hooks keep their inputs.
128
+ */
129
+ interface ProviderCallResult {
130
+ /** Transformed response (runResponseChain=true) or raw response (false). */
131
+ response: Response;
132
+ /** Request-chain output body (pre-`prepareBody`). */
133
+ requestBody: unknown;
134
+ /** Final body actually sent to `fetchFn` (post-`prepareBody`). */
135
+ finalBody: unknown;
136
+ /** Request-chain output config (headers/url/etc.). */
137
+ config: RequestConfig;
138
+ /** The resolved target URL. */
139
+ url: string;
140
+ /** The assembled outbound headers. */
141
+ headers: Record<string, string>;
142
+ }
143
+ /**
144
+ * Run the common provider-request exchange. See the module + option JSDoc
145
+ * for the precise per-site contract this preserves.
146
+ */
147
+ declare function executeProviderCall(ctx: ProviderCallContext): Promise<ProviderCallResult>;
148
+
149
+ export { type ProviderCallContext, type ProviderCallResult, executeProviderCall };
@@ -0,0 +1,6 @@
1
+ import {
2
+ executeProviderCall
3
+ } from "../chunk-JO5NLTLY.js";
4
+ export {
5
+ executeProviderCall
6
+ };
@@ -0,0 +1,6 @@
1
+ "use strict";Object.defineProperty(exports, "__esModule", {value: true});
2
+
3
+ var _chunkQXD4MV2Xcjs = require('../chunk-QXD4MV2X.cjs');
4
+
5
+
6
+ exports.resolveProviderChain = _chunkQXD4MV2Xcjs.resolveProviderChain;
@@ -0,0 +1,58 @@
1
+ import { ProviderConfigSource } from '../ports/provider-config-source.cjs';
2
+ import { Transformer } from '../transformer/types.cjs';
3
+ import '@omnicross/contracts/llm-config';
4
+ import '../transformer/TransformerService.cjs';
5
+
6
+ /**
7
+ * resolveProviderChain — shared transformer-chain resolution helper.
8
+ *
9
+ * Phase 0 of the `provider-request-pipeline` OpenSpec change.
10
+ * All three consumer paths (TransformerHandler, the host engine adapter,
11
+ * and the wire-format proxy handler) previously duplicated the same
12
+ * resolveTransformerChain + getMainTransformer + shallow-copy + unshift
13
+ * block verbatim. This module extracts that single shared helper so the
14
+ * logic lives in exactly one place.
15
+ *
16
+ * IMPORTANT: body mutations that are proxy-specific (ReasoningTransformer
17
+ * auto-inject, thinkingLevel body-inject) are NOT part of this helper —
18
+ * they remain at each call site as before.
19
+ *
20
+ * @module pipeline/resolveProviderChain
21
+ */
22
+
23
+ /** The resolved chain returned by each consumer. */
24
+ interface ResolvedProviderChain {
25
+ chain: {
26
+ providerTransformers: Transformer[];
27
+ modelTransformers: Transformer[];
28
+ };
29
+ /**
30
+ * The main transformer resolved for this provider, or `null` when none
31
+ * is configured. Callers that need the transformer name (e.g. to pass
32
+ * into `getProviderCacheCaps` as `mainTransformerName`) can read
33
+ * `mainTransformer?.name` from this field.
34
+ */
35
+ mainTransformer: Transformer | null;
36
+ /**
37
+ * `true` when there is at least one transformer in either array — used
38
+ * by callers to gate the transformer-chain path vs the direct-API
39
+ * fallback.
40
+ */
41
+ hasTransformers: boolean;
42
+ }
43
+ /**
44
+ * Resolve the full transformer chain for a provider + model combination.
45
+ *
46
+ * Semantics (identical to all three former inline copies):
47
+ * 1. Call `llmConfig.resolveTransformerChain(providerId, model)` to get the
48
+ * cached chain.
49
+ * 2. Call `llmConfig.getMainTransformer(providerId)` to get the main
50
+ * transformer (e.g. GeminiTransformer for Google providers).
51
+ * 3. Shallow-copy both arrays so the cached reference is not mutated.
52
+ * 4. `unshift` the main transformer into `providerTransformers` unless a
53
+ * transformer with the same `.name` is already present.
54
+ * 5. Compute `hasTransformers`.
55
+ */
56
+ declare function resolveProviderChain(llmConfig: ProviderConfigSource, providerId: string, model: string): Promise<ResolvedProviderChain>;
57
+
58
+ export { type ResolvedProviderChain, resolveProviderChain };
@@ -0,0 +1,58 @@
1
+ import { ProviderConfigSource } from '../ports/provider-config-source.js';
2
+ import { Transformer } from '../transformer/types.js';
3
+ import '@omnicross/contracts/llm-config';
4
+ import '../transformer/TransformerService.js';
5
+
6
+ /**
7
+ * resolveProviderChain — shared transformer-chain resolution helper.
8
+ *
9
+ * Phase 0 of the `provider-request-pipeline` OpenSpec change.
10
+ * All three consumer paths (TransformerHandler, the host engine adapter,
11
+ * and the wire-format proxy handler) previously duplicated the same
12
+ * resolveTransformerChain + getMainTransformer + shallow-copy + unshift
13
+ * block verbatim. This module extracts that single shared helper so the
14
+ * logic lives in exactly one place.
15
+ *
16
+ * IMPORTANT: body mutations that are proxy-specific (ReasoningTransformer
17
+ * auto-inject, thinkingLevel body-inject) are NOT part of this helper —
18
+ * they remain at each call site as before.
19
+ *
20
+ * @module pipeline/resolveProviderChain
21
+ */
22
+
23
+ /** The resolved chain returned by each consumer. */
24
+ interface ResolvedProviderChain {
25
+ chain: {
26
+ providerTransformers: Transformer[];
27
+ modelTransformers: Transformer[];
28
+ };
29
+ /**
30
+ * The main transformer resolved for this provider, or `null` when none
31
+ * is configured. Callers that need the transformer name (e.g. to pass
32
+ * into `getProviderCacheCaps` as `mainTransformerName`) can read
33
+ * `mainTransformer?.name` from this field.
34
+ */
35
+ mainTransformer: Transformer | null;
36
+ /**
37
+ * `true` when there is at least one transformer in either array — used
38
+ * by callers to gate the transformer-chain path vs the direct-API
39
+ * fallback.
40
+ */
41
+ hasTransformers: boolean;
42
+ }
43
+ /**
44
+ * Resolve the full transformer chain for a provider + model combination.
45
+ *
46
+ * Semantics (identical to all three former inline copies):
47
+ * 1. Call `llmConfig.resolveTransformerChain(providerId, model)` to get the
48
+ * cached chain.
49
+ * 2. Call `llmConfig.getMainTransformer(providerId)` to get the main
50
+ * transformer (e.g. GeminiTransformer for Google providers).
51
+ * 3. Shallow-copy both arrays so the cached reference is not mutated.
52
+ * 4. `unshift` the main transformer into `providerTransformers` unless a
53
+ * transformer with the same `.name` is already present.
54
+ * 5. Compute `hasTransformers`.
55
+ */
56
+ declare function resolveProviderChain(llmConfig: ProviderConfigSource, providerId: string, model: string): Promise<ResolvedProviderChain>;
57
+
58
+ export { type ResolvedProviderChain, resolveProviderChain };
@@ -0,0 +1,6 @@
1
+ import {
2
+ resolveProviderChain
3
+ } from "../chunk-JWC6APFQ.js";
4
+ export {
5
+ resolveProviderChain
6
+ };
@@ -0,0 +1,6 @@
1
+ "use strict";Object.defineProperty(exports, "__esModule", {value: true});
2
+
3
+ var _chunkNYUNU75Acjs = require('../chunk-NYUNU75A.cjs');
4
+
5
+
6
+ exports.resolveSubscriptionChain = _chunkNYUNU75Acjs.resolveSubscriptionChain;
@@ -0,0 +1,68 @@
1
+ import { TransformerService } from '../transformer/TransformerService.cjs';
2
+ import { Transformer, ResolvedTransformerChain } from '../transformer/types.cjs';
3
+ import { SubscriptionAuthProfile } from './SubscriptionAuthSource.cjs';
4
+ import '@omnicross/contracts/subscription-types';
5
+ import './AuthSource.cjs';
6
+ import './SubscriptionAuthStrategy.cjs';
7
+
8
+ /**
9
+ * resolveSubscriptionChain — shared subscription provider-chain resolver.
10
+ *
11
+ * Cross-vendor subscription "route-to" generalization (task #29). The Codex /
12
+ * OpenAI-Responses ingress subscription plan used to HARD-CODE its provider
13
+ * transformer chain to a single `OpenAIResponseTransformer`, ignoring the
14
+ * subscription profile's own `providerTransformerNames`. That only produced
15
+ * Responses-API bytes upstream — correct for the codex/ChatGPT subscription
16
+ * (whose profile chain IS `['openai-response']`), but WRONG for any
17
+ * subscription whose upstream speaks a non-Responses wire.
18
+ *
19
+ * This helper mirrors `SubscriptionDispatcher.resolveTransformers`: it resolves
20
+ * the profile's transformer NAMES into instances via the shared
21
+ * `TransformerService` (the SAME registry the Anthropic-ingress dispatcher uses),
22
+ * so the Responses ingress re-encodes Unified → the target wire exactly like the
23
+ * BYO plan's `resolveProviderChain`. The endpoint transformer stays
24
+ * `OpenAIResponseTransformer` (the ingress wire is Responses) — so the full
25
+ * exchange is:
26
+ *
27
+ * Responses → (OpenAIResponseTransformer decode) → Unified
28
+ * → (profile providerTransformers encode) → target wire → upstream
29
+ * target wire → (profile providerTransformers decode) → Unified
30
+ * → (OpenAIResponseTransformer encode) → Responses → Codex CLI
31
+ *
32
+ * BYTE-IDENTICAL codex preservation: the codex profile's
33
+ * `providerTransformerNames` is `['openai-response']`, which resolves to the
34
+ * SAME `OpenAIResponseTransformer` instance the ingress already used — so the
35
+ * codex case is unchanged. The fallback (empty/missing names) ALSO yields the
36
+ * shared `OpenAIResponseTransformer`, so a profile that omits names behaves as
37
+ * before.
38
+ *
39
+ * @module pipeline/resolveSubscriptionChain
40
+ */
41
+
42
+ /**
43
+ * Resolve a subscription profile's provider/model transformer chain.
44
+ *
45
+ * @param profile the subscription profile (carries the names).
46
+ * @param transformerService the shared registry (from `llmConfig.getTransformerService()`).
47
+ * @param fallbackEndpoint the shared `OpenAIResponseTransformer` instance,
48
+ * used when the profile declares NO provider names
49
+ * (preserves the prior hard-coded behavior).
50
+ * @param overrideNames OPTIONAL explicit provider transformer names that
51
+ * SUPERSEDE the profile's static
52
+ * `providerTransformerNames` — the opencodego zen
53
+ * seam (Phase 3) feeds the shape-resolved chain here
54
+ * (e.g. `['openai-response']` / `['gemini']`). When
55
+ * `undefined` the static field is read exactly as
56
+ * before (codex byte-identity). An explicit EMPTY
57
+ * array means "no provider chain" (the zen anthropic
58
+ * shape — though that path is same-format and never
59
+ * calls this) and falls back to `[fallbackEndpoint]`
60
+ * like the absent-names case.
61
+ *
62
+ * @returns the resolved chain. `providerTransformers` is the resolved provider
63
+ * names (or `[fallbackEndpoint]` when none declared); `modelTransformers` is the
64
+ * profile's resolved model names (usually empty).
65
+ */
66
+ declare function resolveSubscriptionChain(profile: SubscriptionAuthProfile, transformerService: TransformerService | undefined, fallbackEndpoint: Transformer, overrideNames?: readonly string[]): ResolvedTransformerChain;
67
+
68
+ export { resolveSubscriptionChain };
@@ -0,0 +1,68 @@
1
+ import { TransformerService } from '../transformer/TransformerService.js';
2
+ import { Transformer, ResolvedTransformerChain } from '../transformer/types.js';
3
+ import { SubscriptionAuthProfile } from './SubscriptionAuthSource.js';
4
+ import '@omnicross/contracts/subscription-types';
5
+ import './AuthSource.js';
6
+ import './SubscriptionAuthStrategy.js';
7
+
8
+ /**
9
+ * resolveSubscriptionChain — shared subscription provider-chain resolver.
10
+ *
11
+ * Cross-vendor subscription "route-to" generalization (task #29). The Codex /
12
+ * OpenAI-Responses ingress subscription plan used to HARD-CODE its provider
13
+ * transformer chain to a single `OpenAIResponseTransformer`, ignoring the
14
+ * subscription profile's own `providerTransformerNames`. That only produced
15
+ * Responses-API bytes upstream — correct for the codex/ChatGPT subscription
16
+ * (whose profile chain IS `['openai-response']`), but WRONG for any
17
+ * subscription whose upstream speaks a non-Responses wire.
18
+ *
19
+ * This helper mirrors `SubscriptionDispatcher.resolveTransformers`: it resolves
20
+ * the profile's transformer NAMES into instances via the shared
21
+ * `TransformerService` (the SAME registry the Anthropic-ingress dispatcher uses),
22
+ * so the Responses ingress re-encodes Unified → the target wire exactly like the
23
+ * BYO plan's `resolveProviderChain`. The endpoint transformer stays
24
+ * `OpenAIResponseTransformer` (the ingress wire is Responses) — so the full
25
+ * exchange is:
26
+ *
27
+ * Responses → (OpenAIResponseTransformer decode) → Unified
28
+ * → (profile providerTransformers encode) → target wire → upstream
29
+ * target wire → (profile providerTransformers decode) → Unified
30
+ * → (OpenAIResponseTransformer encode) → Responses → Codex CLI
31
+ *
32
+ * BYTE-IDENTICAL codex preservation: the codex profile's
33
+ * `providerTransformerNames` is `['openai-response']`, which resolves to the
34
+ * SAME `OpenAIResponseTransformer` instance the ingress already used — so the
35
+ * codex case is unchanged. The fallback (empty/missing names) ALSO yields the
36
+ * shared `OpenAIResponseTransformer`, so a profile that omits names behaves as
37
+ * before.
38
+ *
39
+ * @module pipeline/resolveSubscriptionChain
40
+ */
41
+
42
+ /**
43
+ * Resolve a subscription profile's provider/model transformer chain.
44
+ *
45
+ * @param profile the subscription profile (carries the names).
46
+ * @param transformerService the shared registry (from `llmConfig.getTransformerService()`).
47
+ * @param fallbackEndpoint the shared `OpenAIResponseTransformer` instance,
48
+ * used when the profile declares NO provider names
49
+ * (preserves the prior hard-coded behavior).
50
+ * @param overrideNames OPTIONAL explicit provider transformer names that
51
+ * SUPERSEDE the profile's static
52
+ * `providerTransformerNames` — the opencodego zen
53
+ * seam (Phase 3) feeds the shape-resolved chain here
54
+ * (e.g. `['openai-response']` / `['gemini']`). When
55
+ * `undefined` the static field is read exactly as
56
+ * before (codex byte-identity). An explicit EMPTY
57
+ * array means "no provider chain" (the zen anthropic
58
+ * shape — though that path is same-format and never
59
+ * calls this) and falls back to `[fallbackEndpoint]`
60
+ * like the absent-names case.
61
+ *
62
+ * @returns the resolved chain. `providerTransformers` is the resolved provider
63
+ * names (or `[fallbackEndpoint]` when none declared); `modelTransformers` is the
64
+ * profile's resolved model names (usually empty).
65
+ */
66
+ declare function resolveSubscriptionChain(profile: SubscriptionAuthProfile, transformerService: TransformerService | undefined, fallbackEndpoint: Transformer, overrideNames?: readonly string[]): ResolvedTransformerChain;
67
+
68
+ export { resolveSubscriptionChain };
@@ -0,0 +1,6 @@
1
+ import {
2
+ resolveSubscriptionChain
3
+ } from "../chunk-5ERIZW3D.js";
4
+ export {
5
+ resolveSubscriptionChain
6
+ };
@@ -1,38 +1,8 @@
1
- "use strict";
2
- var __defProp = Object.defineProperty;
3
- var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
4
- var __getOwnPropNames = Object.getOwnPropertyNames;
5
- var __hasOwnProp = Object.prototype.hasOwnProperty;
6
- var __export = (target, all) => {
7
- for (var name in all)
8
- __defProp(target, name, { get: all[name], enumerable: true });
9
- };
10
- var __copyProps = (to, from, except, desc) => {
11
- if (from && typeof from === "object" || typeof from === "function") {
12
- for (let key of __getOwnPropNames(from))
13
- if (!__hasOwnProp.call(to, key) && key !== except)
14
- __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
15
- }
16
- return to;
17
- };
18
- var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
1
+ "use strict";Object.defineProperty(exports, "__esModule", {value: true});
19
2
 
20
- // src/ports/gemini-code-assist-resolver.ts
21
- var gemini_code_assist_resolver_exports = {};
22
- __export(gemini_code_assist_resolver_exports, {
23
- getGeminiCodeAssistResolver: () => getGeminiCodeAssistResolver,
24
- setGeminiCodeAssistResolver: () => setGeminiCodeAssistResolver
25
- });
26
- module.exports = __toCommonJS(gemini_code_assist_resolver_exports);
27
- var resolver = null;
28
- function setGeminiCodeAssistResolver(impl) {
29
- resolver = impl;
30
- }
31
- function getGeminiCodeAssistResolver() {
32
- return resolver;
33
- }
34
- // Annotate the CommonJS export names for ESM import in node:
35
- 0 && (module.exports = {
36
- getGeminiCodeAssistResolver,
37
- setGeminiCodeAssistResolver
38
- });
3
+
4
+ var _chunkR3HK6R4Bcjs = require('../chunk-R3HK6R4B.cjs');
5
+
6
+
7
+
8
+ exports.getGeminiCodeAssistResolver = _chunkR3HK6R4Bcjs.getGeminiCodeAssistResolver; exports.setGeminiCodeAssistResolver = _chunkR3HK6R4Bcjs.setGeminiCodeAssistResolver;
@@ -1,11 +1,7 @@
1
- // src/ports/gemini-code-assist-resolver.ts
2
- var resolver = null;
3
- function setGeminiCodeAssistResolver(impl) {
4
- resolver = impl;
5
- }
6
- function getGeminiCodeAssistResolver() {
7
- return resolver;
8
- }
1
+ import {
2
+ getGeminiCodeAssistResolver,
3
+ setGeminiCodeAssistResolver
4
+ } from "../chunk-DRWHTIIZ.js";
9
5
  export {
10
6
  getGeminiCodeAssistResolver,
11
7
  setGeminiCodeAssistResolver
@@ -0,0 +1 @@
1
+ "use strict";
@@ -0,0 +1,50 @@
1
+ import { PricingEntry, PricingEntryInput, PricingResolution } from '@omnicross/contracts/pricing-types';
2
+
3
+ /**
4
+ * `PricingStore` — core-owned port for pricing-row persistence.
5
+ *
6
+ * The pricing engine performs ALL persistence through this interface; the host
7
+ * embedder supplies the implementation at bootstrap (e.g. a SQLite table or a
8
+ * JSON file store). Lookups never go through the store — the engine keeps an
9
+ * in-memory cache loaded from `getAll()`.
10
+ *
11
+ * @module ports/pricing-store
12
+ */
13
+
14
+ interface PricingStore {
15
+ /** Return every pricing row. The engine caches the full table in memory. */
16
+ getAll(): Promise<PricingEntry[]>;
17
+ /**
18
+ * Insert or update one row. When `asUserEdit` is true the store MUST mark
19
+ * the row user-edited (source 'user', `userEdited: true`, `editedAt` now),
20
+ * protecting it from auto-overwrite during subsequent source refreshes.
21
+ */
22
+ upsert(input: PricingEntryInput, asUserEdit: boolean): Promise<PricingEntry>;
23
+ /**
24
+ * Apply a batch of entries fetched from a pricing source.
25
+ *
26
+ * userEdited-conflict semantics: rows that do not exist locally, or exist
27
+ * but are NOT user-edited, are upserted (source 'litellm', not user-edited)
28
+ * and returned in `applied`. Rows whose local copy IS user-edited MUST be
29
+ * left untouched and returned in `conflicts` as `{ current, incoming }`
30
+ * pairs for per-row resolution by the user.
31
+ */
32
+ bulkApplyFromSource(entries: PricingEntryInput[]): Promise<{
33
+ applied: PricingEntry[];
34
+ conflicts: Array<{
35
+ current: PricingEntry;
36
+ incoming: PricingEntryInput;
37
+ }>;
38
+ }>;
39
+ /**
40
+ * Apply per-row conflict decisions: 'overwrite' replaces the local row with
41
+ * the incoming values (clearing the user-edited mark), 'skip' leaves it
42
+ * unchanged. Returns overwritten/skipped counts.
43
+ */
44
+ applyResolutions(resolutions: Array<{
45
+ incoming: PricingEntryInput;
46
+ action: 'overwrite' | 'skip';
47
+ }>): Promise<PricingResolution>;
48
+ }
49
+
50
+ export type { PricingStore };
@@ -0,0 +1,50 @@
1
+ import { PricingEntry, PricingEntryInput, PricingResolution } from '@omnicross/contracts/pricing-types';
2
+
3
+ /**
4
+ * `PricingStore` — core-owned port for pricing-row persistence.
5
+ *
6
+ * The pricing engine performs ALL persistence through this interface; the host
7
+ * embedder supplies the implementation at bootstrap (e.g. a SQLite table or a
8
+ * JSON file store). Lookups never go through the store — the engine keeps an
9
+ * in-memory cache loaded from `getAll()`.
10
+ *
11
+ * @module ports/pricing-store
12
+ */
13
+
14
+ interface PricingStore {
15
+ /** Return every pricing row. The engine caches the full table in memory. */
16
+ getAll(): Promise<PricingEntry[]>;
17
+ /**
18
+ * Insert or update one row. When `asUserEdit` is true the store MUST mark
19
+ * the row user-edited (source 'user', `userEdited: true`, `editedAt` now),
20
+ * protecting it from auto-overwrite during subsequent source refreshes.
21
+ */
22
+ upsert(input: PricingEntryInput, asUserEdit: boolean): Promise<PricingEntry>;
23
+ /**
24
+ * Apply a batch of entries fetched from a pricing source.
25
+ *
26
+ * userEdited-conflict semantics: rows that do not exist locally, or exist
27
+ * but are NOT user-edited, are upserted (source 'litellm', not user-edited)
28
+ * and returned in `applied`. Rows whose local copy IS user-edited MUST be
29
+ * left untouched and returned in `conflicts` as `{ current, incoming }`
30
+ * pairs for per-row resolution by the user.
31
+ */
32
+ bulkApplyFromSource(entries: PricingEntryInput[]): Promise<{
33
+ applied: PricingEntry[];
34
+ conflicts: Array<{
35
+ current: PricingEntry;
36
+ incoming: PricingEntryInput;
37
+ }>;
38
+ }>;
39
+ /**
40
+ * Apply per-row conflict decisions: 'overwrite' replaces the local row with
41
+ * the incoming values (clearing the user-edited mark), 'skip' leaves it
42
+ * unchanged. Returns overwritten/skipped counts.
43
+ */
44
+ applyResolutions(resolutions: Array<{
45
+ incoming: PricingEntryInput;
46
+ action: 'overwrite' | 'skip';
47
+ }>): Promise<PricingResolution>;
48
+ }
49
+
50
+ export type { PricingStore };
File without changes
@@ -0,0 +1 @@
1
+ "use strict";