chainlesschain 0.166.101 → 0.166.102

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 (182) hide show
  1. package/package.json +2 -2
  2. package/src/assets/linux-subreaper/linux-arm64/manifest.json +1 -1
  3. package/src/assets/linux-subreaper/linux-x64/manifest.json +1 -1
  4. package/src/assets/web-panel/assets/{AIOps-BjBS_29I.js → AIOps-CyHIMEd8.js} +1 -1
  5. package/src/assets/web-panel/assets/{ActionButton-CUnnQUaj.js → ActionButton-vuNxDpHm.js} +1 -1
  6. package/src/assets/web-panel/assets/{Analytics-BqYZxgnY.js → Analytics-D0quEM0q.js} +3 -3
  7. package/src/assets/web-panel/assets/{AppLayout-m8B886ka.js → AppLayout-xRSVpbCs.js} +3 -3
  8. package/src/assets/web-panel/assets/{Artifacts-JEOxU3Ug.js → Artifacts-ktfVAZBC.js} +1 -1
  9. package/src/assets/web-panel/assets/{Audit-DAXS5c9J.js → Audit-UJW6maH4.js} +1 -1
  10. package/src/assets/web-panel/assets/{BackgroundAgents-e3a9XHw3.js → BackgroundAgents-BYrfdCoT.js} +1 -1
  11. package/src/assets/web-panel/assets/{Backup-D3Qmp68h.js → Backup-IBgsJ7BK.js} +1 -1
  12. package/src/assets/web-panel/assets/{BaseInput-C7CXyiUl.js → BaseInput-BmP8_zxy.js} +1 -1
  13. package/src/assets/web-panel/assets/{Chat-2AHlAGi8.js → Chat-urkw8_BF.js} +6 -6
  14. package/src/assets/web-panel/assets/{ChatBubbleRenderer-D3KsyCUV.js → ChatBubbleRenderer-Cw44zZbh.js} +1 -1
  15. package/src/assets/web-panel/assets/{Checkbox-YfBuQlBH.js → Checkbox-CYboo-__.js} +1 -1
  16. package/src/assets/web-panel/assets/{Codegen-DCCQDfTL.js → Codegen-DaqR_Ay8.js} +1 -1
  17. package/src/assets/web-panel/assets/{Col-03i2WfrV.js → Col-04BSIj_z.js} +1 -1
  18. package/src/assets/web-panel/assets/{Community-CJQIpng6.js → Community-DxFk7Trv.js} +1 -1
  19. package/src/assets/web-panel/assets/{Compact-CCtcQ2pq.js → Compact-mjgWlMCB.js} +1 -1
  20. package/src/assets/web-panel/assets/{Compliance-Vxl7ZszJ.js → Compliance-CC5ee7QV.js} +1 -1
  21. package/src/assets/web-panel/assets/{Cowork-DN-BwA8I.js → Cowork-BK4BhHZd.js} +2 -2
  22. package/src/assets/web-panel/assets/{Cron-Dc2Q46X7.js → Cron-CP6jAxq0.js} +2 -2
  23. package/src/assets/web-panel/assets/{Crosschain-CQCblsl-.js → Crosschain-DJPaViZS.js} +1 -1
  24. package/src/assets/web-panel/assets/{DID-YYvqUR8C.js → DID-BTLxkuOj.js} +2 -2
  25. package/src/assets/web-panel/assets/{Dashboard-Cafy3DZT.js → Dashboard-Djkiqh3d.js} +2 -2
  26. package/src/assets/web-panel/assets/{Dropdown-BOyYpIpv.js → Dropdown-t_eUhqom.js} +1 -1
  27. package/src/assets/web-panel/assets/{EmailListRenderer-B7NYjc1j.js → EmailListRenderer-7w6USx_J.js} +1 -1
  28. package/src/assets/web-panel/assets/{EvolutionSettings-C5wfxztf.js → EvolutionSettings-mU5IHEk5.js} +1 -1
  29. package/src/assets/web-panel/assets/{FamilyGuardDashboard-aA7KnDGK.js → FamilyGuardDashboard-BCh-VBBC.js} +1 -1
  30. package/src/assets/web-panel/assets/{Federation-DlgXUu1L.js → Federation-Be_VpjI2.js} +1 -1
  31. package/src/assets/web-panel/assets/{FormItemContext-B5YsrLDg.js → FormItemContext-D_lzQ7PI.js} +1 -1
  32. package/src/assets/web-panel/assets/{GenericCardRenderer-DaWojPFw.js → GenericCardRenderer-LYu3KapV.js} +1 -1
  33. package/src/assets/web-panel/assets/{Git-dkhh6Fx2.js → Git-BBeF-PP4.js} +2 -2
  34. package/src/assets/web-panel/assets/{Governance-Cz6vmkjc.js → Governance-CoF8Kzg7.js} +1 -1
  35. package/src/assets/web-panel/assets/{Inference-DWt0hbh8.js → Inference-C4DLMnXS.js} +1 -1
  36. package/src/assets/web-panel/assets/{KnowledgeGraph-BZJ0Z-nL.js → KnowledgeGraph-B2mlNewk.js} +1 -1
  37. package/src/assets/web-panel/assets/{Logs-BaBBmL1A.js → Logs-DMZ_44Ya.js} +2 -2
  38. package/src/assets/web-panel/assets/MarkdownRenderer-Ck7Iv_9e.js +1 -0
  39. package/src/assets/web-panel/assets/{Marketplace-ct8sgQ0s.js → Marketplace-BqDzTew_.js} +1 -1
  40. package/src/assets/web-panel/assets/{McpTools-CXKCRGYQ.js → McpTools-BbwSbDN9.js} +3 -3
  41. package/src/assets/web-panel/assets/{Memory-O7ZwlS6a.js → Memory-DAaTWgrm.js} +2 -2
  42. package/src/assets/web-panel/assets/{MobileBridge-By12C-eC.js → MobileBridge-BjbTGxoR.js} +1 -1
  43. package/src/assets/web-panel/assets/{MobileProjects-Ba-EVdex.js → MobileProjects-DMODOBr-.js} +1 -1
  44. package/src/assets/web-panel/assets/{Mtc-g-932zV2.js → Mtc-DT9N2rCs.js} +2 -2
  45. package/src/assets/web-panel/assets/{MtcAudit-BW8hB0ly.js → MtcAudit-DagMfUVv.js} +4 -4
  46. package/src/assets/web-panel/assets/{Multisig-zspLaMbT.js → Multisig-C1BKP6nM.js} +3 -3
  47. package/src/assets/web-panel/assets/{NLProgramming-dJeUPDoq.js → NLProgramming-B5LFh72i.js} +1 -1
  48. package/src/assets/web-panel/assets/{Notes-C4msiRQL.js → Notes-Q77V3ltW.js} +3 -3
  49. package/src/assets/web-panel/assets/{NotificationSettings-MOCHM-qg.js → NotificationSettings-HxdpNIBs.js} +1 -1
  50. package/src/assets/web-panel/assets/OrderTableRenderer-Dc0DpvBH.js +1 -0
  51. package/src/assets/web-panel/assets/{Organization-DOZurBfk.js → Organization-QL3NZ7uW.js} +4 -4
  52. package/src/assets/web-panel/assets/{Overflow-qOT9BhUp.js → Overflow-B_gqOKho.js} +1 -1
  53. package/src/assets/web-panel/assets/{P2P-BMoy7Eo4.js → P2P-BBJubU8Z.js} +2 -2
  54. package/src/assets/web-panel/assets/{PdhVaultBrowser-ByyV1q-D.js → PdhVaultBrowser-CFnGd-2E.js} +3 -3
  55. package/src/assets/web-panel/assets/{Permissions-6Qyro4ye.js → Permissions-BKkznIUM.js} +4 -4
  56. package/src/assets/web-panel/assets/{PersonalDataHub-DR3DRNSX.js → PersonalDataHub-DYK7ZAcd.js} +4 -4
  57. package/src/assets/web-panel/assets/{Pipeline-Cr6TTdud.js → Pipeline-CoeKpjoN.js} +1 -1
  58. package/src/assets/web-panel/assets/{Privacy-B70otG0l.js → Privacy-Diw4G-92.js} +1 -1
  59. package/src/assets/web-panel/assets/{ProjectInit-BHCqxoSk.js → ProjectInit-CHBOFkma.js} +2 -2
  60. package/src/assets/web-panel/assets/{ProjectSettings-B80GZpZk.js → ProjectSettings-BJIsgdOf.js} +2 -2
  61. package/src/assets/web-panel/assets/Projects-GJjItXIk.js +1 -0
  62. package/src/assets/web-panel/assets/{Providers-dsVTimHa.js → Providers-o8QCimor.js} +1 -1
  63. package/src/assets/web-panel/assets/{QrScannerModal-DRJ8YepZ.js → QrScannerModal-z2W-zvhW.js} +1 -1
  64. package/src/assets/web-panel/assets/{QuickAsk-BSXdEjIB.js → QuickAsk-_yubhsna.js} +1 -1
  65. package/src/assets/web-panel/assets/{Recommend-CQLJGyKC.js → Recommend-CucgJwih.js} +1 -1
  66. package/src/assets/web-panel/assets/{RemoteSession-BF9WUFVZ.js → RemoteSession-EzfIIRg1.js} +2 -2
  67. package/src/assets/web-panel/assets/{Reputation-Cy9o5tvW.js → Reputation-_shttE67.js} +1 -1
  68. package/src/assets/web-panel/assets/{Row-BP346_3b.js → Row-DQA_S8-9.js} +1 -1
  69. package/src/assets/web-panel/assets/{RssFeed-BKulxXf3.js → RssFeed-BOqWawXT.js} +3 -3
  70. package/src/assets/web-panel/assets/{Search-EemQj2Dv.js → Search-Dx1v2xOq.js} +1 -1
  71. package/src/assets/web-panel/assets/{Security-DcWPAwwk.js → Security-Bt4HHsT4.js} +3 -3
  72. package/src/assets/web-panel/assets/{Services-Bltqciay.js → Services-sruHiQ-r.js} +2 -2
  73. package/src/assets/web-panel/assets/{Skeleton-BwRyOGY8.js → Skeleton-CiBxvmOJ.js} +1 -1
  74. package/src/assets/web-panel/assets/{Skills-D98qlvpJ.js → Skills-De9qKODU.js} +1 -1
  75. package/src/assets/web-panel/assets/{Sla-BUTtBMY0.js → Sla-B_6yn8Wp.js} +1 -1
  76. package/src/assets/web-panel/assets/{SpeechSettings-C7kcY_98.js → SpeechSettings-C2CafExS.js} +1 -1
  77. package/src/assets/web-panel/assets/{SyncSettings-Bsk6lKvT.js → SyncSettings-Dhh3Qmb0.js} +2 -2
  78. package/src/assets/web-panel/assets/{Tasks-DvSrtz0P.js → Tasks-Mvo5mTWm.js} +1 -1
  79. package/src/assets/web-panel/assets/{Templates-BUM6LwPs.js → Templates-D7WVTQQy.js} +1 -1
  80. package/src/assets/web-panel/assets/{Tenant-D9TkOm7z.js → Tenant-7ur9Yfxd.js} +1 -1
  81. package/src/assets/web-panel/assets/{Terminal-CP8ZVErN.js → Terminal-BgzrOA6k.js} +2 -2
  82. package/src/assets/web-panel/assets/{TimelineRenderer-V3SoKZ1T.js → TimelineRenderer-Dco20pT1.js} +1 -1
  83. package/src/assets/web-panel/assets/{Tokens-CCRlUTOA.js → Tokens-hN6qBPag.js} +1 -1
  84. package/src/assets/web-panel/assets/{Trigger-CznUcPme.js → Trigger-C4f_twAM.js} +1 -1
  85. package/src/assets/web-panel/assets/{Trust-D1GIk_NF.js → Trust-Wf1SMypp.js} +1 -1
  86. package/src/assets/web-panel/assets/{UkeySign-DHtvtyC-.js → UkeySign-DUXSyg3N.js} +1 -1
  87. package/src/assets/web-panel/assets/{VideoEditing-CVxdaJIq.js → VideoEditing-BvqsJaL0.js} +1 -1
  88. package/src/assets/web-panel/assets/{Wallet-D221OjyE.js → Wallet-CgAbcjKl.js} +4 -4
  89. package/src/assets/web-panel/assets/{WebAuthn-Cw0-ESsq.js → WebAuthn-DaLT0W3s.js} +2 -2
  90. package/src/assets/web-panel/assets/{WorkflowEditor-ZYScrBx3.js → WorkflowEditor-CQqAXoaS.js} +1 -1
  91. package/src/assets/web-panel/assets/{chat-BU0e1obR.js → chat-BhlohFTB.js} +1 -1
  92. package/src/assets/web-panel/assets/{colors-gzYweuha.js → colors-D7HqXIL8.js} +1 -1
  93. package/src/assets/web-panel/assets/{compact-item-ChAXal_k.js → compact-item-Bqk4FCLY.js} +1 -1
  94. package/src/assets/web-panel/assets/{createContext-of3FolD7.js → createContext-CEmWrWf0.js} +1 -1
  95. package/src/assets/web-panel/assets/devWarning-YPX_TU7w.js +1 -0
  96. package/src/assets/web-panel/assets/{hasIn-4PsK_Kx8.js → hasIn-CDY0pFi2.js} +1 -1
  97. package/src/assets/web-panel/assets/{index-1dzYRBbg.js → index-1HBam9t1.js} +1 -1
  98. package/src/assets/web-panel/assets/{index-CHv_63Cp.js → index-6f6n0KFR.js} +1 -1
  99. package/src/assets/web-panel/assets/{index-DjRAIRX7.js → index-B8L3_-sG.js} +1 -1
  100. package/src/assets/web-panel/assets/{index-Cn1clrxx.js → index-BHGOdvOQ.js} +1 -1
  101. package/src/assets/web-panel/assets/{index-cFkMIx1x.js → index-BNrvBWDS.js} +1 -1
  102. package/src/assets/web-panel/assets/{index-BfI4dXbi.js → index-BPmRkxeX.js} +1 -1
  103. package/src/assets/web-panel/assets/{index-CO2owKe0.js → index-BXRooi-O.js} +1 -1
  104. package/src/assets/web-panel/assets/{index-DEzjUgkl.js → index-BiLu-ImR.js} +1 -1
  105. package/src/assets/web-panel/assets/{index-DZ0oKtBg.js → index-BuKGuH_y.js} +1 -1
  106. package/src/assets/web-panel/assets/{index-D1PGrfHE.js → index-BxXFRLTZ.js} +1 -1
  107. package/src/assets/web-panel/assets/{index-B5L7zddz.js → index-BxYO6nde.js} +1 -1
  108. package/src/assets/web-panel/assets/{index-CyDQNprx.js → index-C02yDu4f.js} +1 -1
  109. package/src/assets/web-panel/assets/{index-Ef5YkVAn.js → index-C3opQg47.js} +1 -1
  110. package/src/assets/web-panel/assets/{index-CGFL59q4.js → index-C9mvnSii.js} +1 -1
  111. package/src/assets/web-panel/assets/{index-D_5LTPMH.js → index-CVrwozwH.js} +1 -1
  112. package/src/assets/web-panel/assets/{index-DJVrzXtk.js → index-CYcjOnDX.js} +1 -1
  113. package/src/assets/web-panel/assets/{index-Bftq5rJR.js → index-Cf1ha8l0.js} +1 -1
  114. package/src/assets/web-panel/assets/{index-DEXBckNR.js → index-Chxt0t-A.js} +1 -1
  115. package/src/assets/web-panel/assets/{index-By-pper5.js → index-CkjgSHVz.js} +1 -1
  116. package/src/assets/web-panel/assets/{index-Dy0ojH6G.js → index-CkqBoCiu.js} +3 -3
  117. package/src/assets/web-panel/assets/{index-Cx4Z6nUl.js → index-CqK0J4Sj.js} +1 -1
  118. package/src/assets/web-panel/assets/{index-Djfgsjfy.js → index-CrsM-oiD.js} +1 -1
  119. package/src/assets/web-panel/assets/{index-BdxRVNPY.js → index-Cur88hoN.js} +1 -1
  120. package/src/assets/web-panel/assets/{index-D_9k680X.js → index-D0nfNmbq.js} +1 -1
  121. package/src/assets/web-panel/assets/index-D53szVZQ.js +1 -0
  122. package/src/assets/web-panel/assets/{index-DsoV9rzn.js → index-DEzL7s7P.js} +1 -1
  123. package/src/assets/web-panel/assets/{index-wo0De0iG.js → index-DGKRAO61.js} +1 -1
  124. package/src/assets/web-panel/assets/{index-E8oDMSAo.js → index-DPBoWNwq.js} +1 -1
  125. package/src/assets/web-panel/assets/{index-CCLsbul3.js → index-DRcDWMwP.js} +1 -1
  126. package/src/assets/web-panel/assets/{index-BOeX7BzS.js → index-DmKdCWq1.js} +1 -1
  127. package/src/assets/web-panel/assets/{index-CxzBcXOa.js → index-DpI1LqJX.js} +1 -1
  128. package/src/assets/web-panel/assets/{index-DEB5fQqG.js → index-DuMt3ewl.js} +1 -1
  129. package/src/assets/web-panel/assets/{index-CeEE_SGZ.js → index-Dwob5XoD.js} +1 -1
  130. package/src/assets/web-panel/assets/index-Ub2nJbV2.js +1 -0
  131. package/src/assets/web-panel/assets/{index-Wr91cnWr.js → index-XErJQ1yF.js} +1 -1
  132. package/src/assets/web-panel/assets/{index-D_ialOHx.js → index-aBHlgMrq.js} +1 -1
  133. package/src/assets/web-panel/assets/{index-D-Zss5KL.js → index-e9oCy7_4.js} +1 -1
  134. package/src/assets/web-panel/assets/{index-DDYj14Q4.js → index-lBAbMOzg.js} +1 -1
  135. package/src/assets/web-panel/assets/{index-yMf7zmWv.js → index-o_lc3eww.js} +1 -1
  136. package/src/assets/web-panel/assets/{initDefaultProps-D0Bx6pgr.js → initDefaultProps-CIeEUxIN.js} +1 -1
  137. package/src/assets/web-panel/assets/{motion-BnLuJqJ5.js → motion-IPIj1ZtP.js} +1 -1
  138. package/src/assets/web-panel/assets/{move-Bxpq9xgR.js → move-BfSeXZ-f.js} +1 -1
  139. package/src/assets/web-panel/assets/{mtc-parser-BdmrNhOs.js → mtc-parser-DX03-Xp4.js} +1 -1
  140. package/src/assets/web-panel/assets/{omit-tjJD34BZ.js → omit-z9EannfX.js} +1 -1
  141. package/src/assets/web-panel/assets/{pickAttrs-CMFzLt7b.js → pickAttrs-DXKmRkqZ.js} +1 -1
  142. package/src/assets/web-panel/assets/{placementArrow-BZf6O3cd.js → placementArrow-k2HV7cIU.js} +1 -1
  143. package/src/assets/web-panel/assets/{responsiveObserve-DFDLazsV.js → responsiveObserve-bX7CsyWy.js} +1 -1
  144. package/src/assets/web-panel/assets/{slide-CMbTvp4Y.js → slide-NskjQLbJ.js} +1 -1
  145. package/src/assets/web-panel/assets/{statusUtils-FOan8MI7.js → statusUtils-B3IoG-Er.js} +1 -1
  146. package/src/assets/web-panel/assets/{styleChecker-DTABspd4.js → styleChecker-DHv_UilX.js} +1 -1
  147. package/src/assets/web-panel/assets/{useFlexGapSupport-CNHXWBpY.js → useFlexGapSupport-DEqGB5Ng.js} +1 -1
  148. package/src/assets/web-panel/assets/{useFs-5K-c_RoL.js → useFs-Bl9CbrqZ.js} +1 -1
  149. package/src/assets/web-panel/assets/{usePersonalDataHub-Di0hL4G-.js → usePersonalDataHub-O-Ukv93M.js} +1 -1
  150. package/src/assets/web-panel/assets/{vnode-DTyDv4ja.js → vnode-hGCHTaZt.js} +1 -1
  151. package/src/assets/web-panel/assets/{zoom-ontRt8ft.js → zoom-BWhIVeKQ.js} +1 -1
  152. package/src/assets/web-panel/index.html +1 -1
  153. package/src/command-help-index.json +1 -1
  154. package/src/commands/agent.js +64 -40
  155. package/src/data/changelog.json +13 -0
  156. package/src/lib/config-schema.js +18 -5
  157. package/src/lib/context-memory-kernel/memory-query-index.js +5 -2
  158. package/src/lib/context-memory-kernel/runtime.js +4 -0
  159. package/src/lib/context-memory-kernel/segmented-memory-port.js +28 -3
  160. package/src/lib/context-source-ledger.js +52 -9
  161. package/src/lib/goal-condition-engine.js +25 -2
  162. package/src/lib/llm-config-defaults.js +10 -4
  163. package/src/lib/llm-pricing.js +16 -4
  164. package/src/lib/model-capabilities.js +26 -0
  165. package/src/lib/model-catalog-review.js +18 -1
  166. package/src/lib/model-context-catalog.js +41 -1
  167. package/src/lib/openai-responses.js +8 -0
  168. package/src/lib/skill-retrieval-router.js +1 -0
  169. package/src/lib/usage-pricing-context.js +33 -2
  170. package/src/repl/agent-repl.js +247 -153
  171. package/src/runtime/agent-core.js +198 -87
  172. package/src/runtime/coding-agent-contract-shared.cjs +14 -1
  173. package/src/runtime/headless-runner.js +1 -0
  174. package/src/runtime/headless-stream.js +1 -0
  175. package/src/runtime/mcp-tool-search.js +0 -0
  176. package/src/runtime/provider-stream-state.js +14 -1
  177. package/src/assets/web-panel/assets/MarkdownRenderer-C1yByobo.js +0 -1
  178. package/src/assets/web-panel/assets/OrderTableRenderer-CX0T66NM.js +0 -1
  179. package/src/assets/web-panel/assets/Projects-cq-b9-fQ.js +0 -1
  180. package/src/assets/web-panel/assets/devWarning-Pa13TVrO.js +0 -1
  181. package/src/assets/web-panel/assets/index-BhQg-v6V.js +0 -1
  182. package/src/assets/web-panel/assets/index-DUD5o-vW.js +0 -1
@@ -263,6 +263,10 @@ export function resolveModelCapabilityProfile({
263
263
  const profile = {
264
264
  schema: PROFILE_SCHEMA,
265
265
  catalogVersion: MODEL_CAPABILITY_CATALOG_VERSION,
266
+ reviewedAt: documented ? documented.reviewedAt || "2026-10-05" : null,
267
+ supportedServiceTiers: documented?.serviceTiers
268
+ ? [...documented.serviceTiers]
269
+ : ["standard"],
266
270
  profileId: `model-capability-v1:${identityDigest.slice(7, 39)}`,
267
271
  provider: selectedProvider || "unknown",
268
272
  model: selectedModel,
@@ -288,3 +292,25 @@ export function resolveModelCapabilityProfile({
288
292
  profile.digest = canonicalDigest(profile, PROFILE_SCHEMA);
289
293
  return deepFreeze(profile);
290
294
  }
295
+
296
+ /** Resolve a requested live tier without certifying account availability. */
297
+ export function resolveModelServiceTier(profile, serviceTier) {
298
+ const requested = serviceTier ?? "standard";
299
+ if (
300
+ typeof requested !== "string" ||
301
+ !profile?.supportedServiceTiers?.includes(requested)
302
+ ) {
303
+ throw Object.assign(
304
+ new RangeError(
305
+ `Unsupported service tier ${String(requested)} for ${profile?.provider || "unknown"}/${profile?.model || "unknown"}`,
306
+ ),
307
+ { code: "CC_MODEL_SERVICE_TIER_UNSUPPORTED" },
308
+ );
309
+ }
310
+ return Object.freeze({
311
+ requestedServiceTier: requested,
312
+ requestServiceTier: requested === "standard" ? null : requested,
313
+ effectiveServiceTier: null,
314
+ accountVerified: false,
315
+ });
316
+ }
@@ -65,8 +65,12 @@ export function reviewModelCatalog(review, snapshots = {}) {
65
65
  "runtimeProtocol",
66
66
  "contextWindowTokens",
67
67
  "advertisedMaxOutputTokens",
68
+ "reviewedAt",
68
69
  ]) {
69
- if (Object.hasOwn(expected, field) && actual[field] !== expected[field])
70
+ if (
71
+ Object.hasOwn(expected, field) &&
72
+ !isDeepStrictEqual(actual[field], expected[field])
73
+ )
70
74
  mismatches.push({
71
75
  model: expected.model,
72
76
  field,
@@ -80,6 +84,19 @@ export function reviewModelCatalog(review, snapshots = {}) {
80
84
  field: "official-source",
81
85
  actual: null,
82
86
  });
87
+ if (
88
+ Object.hasOwn(expected, "supportedServiceTiers") &&
89
+ !isDeepStrictEqual(
90
+ actual.supportedServiceTiers,
91
+ expected.supportedServiceTiers,
92
+ )
93
+ )
94
+ mismatches.push({
95
+ model: expected.model,
96
+ field: "supportedServiceTiers",
97
+ expected: expected.supportedServiceTiers,
98
+ actual: actual.supportedServiceTiers,
99
+ });
83
100
  for (const field of ["in", "out"]) {
84
101
  if (rate?.[field] !== expected.pricing[field])
85
102
  mismatches.push({
@@ -45,7 +45,7 @@ export const CONTEXT_WINDOWS = Object.freeze({
45
45
  }),
46
46
  });
47
47
 
48
- export const MODEL_CAPABILITY_CATALOG_VERSION = "2026-10-05";
48
+ export const MODEL_CAPABILITY_CATALOG_VERSION = "2026-10-15";
49
49
 
50
50
  // Explicit ownership prevents a model name served by an unrelated provider
51
51
  // from silently inheriting another provider's catalog window.
@@ -86,6 +86,26 @@ export const LEGACY_MODEL_PROVIDERS = Object.freeze({
86
86
  // named models, not endpoint access, account entitlement, or a live CLI run.
87
87
  export const DOCUMENTED_OPENAI_MODELS = Object.freeze({
88
88
  "gpt-6.1-sol": Object.freeze({
89
+ reviewedAt: "2026-10-15",
90
+ serviceTiers: Object.freeze([
91
+ "standard",
92
+ "default",
93
+ "auto",
94
+ "fast",
95
+ "priority",
96
+ "flex",
97
+ "ultrafast",
98
+ ]),
99
+ serviceMultipliers: Object.freeze({
100
+ standard: 1,
101
+ default: 1,
102
+ auto: 1,
103
+ batch: 0.5,
104
+ flex: 0.5,
105
+ fast: 2,
106
+ priority: 2,
107
+ ultrafast: 6,
108
+ }),
89
109
  contextWindowTokens: 1050000,
90
110
  advertisedMaxOutputTokens: 128000,
91
111
  requiresResponsesForTools: true,
@@ -106,6 +126,26 @@ export const DOCUMENTED_OPENAI_MODELS = Object.freeze({
106
126
  ]),
107
127
  }),
108
128
  "gpt-6-astra": Object.freeze({
129
+ reviewedAt: "2026-10-15",
130
+ serviceTiers: Object.freeze([
131
+ "standard",
132
+ "default",
133
+ "auto",
134
+ "fast",
135
+ "priority",
136
+ "flex",
137
+ "ultrafast",
138
+ ]),
139
+ serviceMultipliers: Object.freeze({
140
+ standard: 1,
141
+ default: 1,
142
+ auto: 1,
143
+ batch: 0.5,
144
+ flex: 0.5,
145
+ fast: 2,
146
+ priority: 2,
147
+ ultrafast: 6,
148
+ }),
109
149
  contextWindowTokens: 1050000,
110
150
  advertisedMaxOutputTokens: 128000,
111
151
  requiresResponsesForTools: true,
@@ -1,3 +1,5 @@
1
+ import { resolveModelServiceTier } from "./model-capabilities.js";
2
+
1
3
  const RESPONSES_FAILURE_CODE = "CC_OPENAI_RESPONSES_FAILED";
2
4
  const MAX_REASONING_ITEMS = 16;
3
5
  const MAX_REASONING_SUMMARY_CHARS = 8_192;
@@ -177,7 +179,12 @@ export function createOpenAIResponsesBody({
177
179
  reasoning = null,
178
180
  stream = false,
179
181
  modelProfile = null,
182
+ serviceTier = null,
180
183
  }) {
184
+ const tier =
185
+ serviceTier == null
186
+ ? null
187
+ : resolveModelServiceTier(modelProfile, serviceTier).requestServiceTier;
181
188
  if (
182
189
  modelProfile?.advertisedMaxOutputTokens != null &&
183
190
  maxOutputTokens > modelProfile.advertisedMaxOutputTokens
@@ -195,6 +202,7 @@ export function createOpenAIResponsesBody({
195
202
  ...(maxOutputTokens ? { max_output_tokens: maxOutputTokens } : {}),
196
203
  ...(reasoning ? { reasoning } : {}),
197
204
  ...(stream ? { stream: true } : {}),
205
+ ...(tier ? { service_tier: tier } : {}),
198
206
  };
199
207
  }
200
208
 
@@ -248,6 +248,7 @@ export function routeSkillDescriptors({
248
248
  schema: SKILL_RETRIEVAL_RESULT_SCHEMA,
249
249
  query: query.trim(),
250
250
  selected: returned.length > 0 && !topConflict ? returned[0] : null,
251
+ matchedCount: candidates.length,
251
252
  candidates: Object.freeze(returned.map(Object.freeze)),
252
253
  conflicts: Object.freeze(conflicts.map(Object.freeze)),
253
254
  rejected: Object.freeze(rejected.map(Object.freeze)),
@@ -4,6 +4,38 @@ import {
4
4
  GPT6_PRICING_TERMS,
5
5
  } from "./model-context-catalog.js";
6
6
 
7
+ const KNOWN_SERVICE_TIERS = new Set([
8
+ ...Object.keys(GPT6_PRICING_TERMS.serviceMultipliers),
9
+ ...Object.values(DOCUMENTED_OPENAI_MODELS).flatMap((model) =>
10
+ Object.keys(model.serviceMultipliers || {}),
11
+ ),
12
+ ]);
13
+
14
+ /** Preserve response-envelope pricing labels, rejecting conflicting evidence. */
15
+ export function projectEnvelopePricingContext(usage = {}, envelope = {}) {
16
+ const input = { ...usage };
17
+ for (const key of ["service_tier", "regional_processing", "inference_geo"]) {
18
+ if (!Object.hasOwn(envelope, key)) continue;
19
+ if (Object.hasOwn(input, key) && input[key] !== envelope[key])
20
+ input.pricingContextInvalid = true;
21
+ input[key] = envelope[key];
22
+ }
23
+ return projectUsagePricingContext(input);
24
+ }
25
+
26
+ /** Requested paid tiers require actual response evidence for settlement. */
27
+ export function preserveRequestedServiceTierEvidence(usage, requested) {
28
+ if (
29
+ usage &&
30
+ requested != null &&
31
+ requested !== "standard" &&
32
+ (!usage.service_tier || usage.service_tier === "auto")
33
+ ) {
34
+ return { ...usage, pricingContextInvalid: true };
35
+ }
36
+ return usage;
37
+ }
38
+
7
39
  /** Keep TTL evidence distinct from the aggregate cache-write count. */
8
40
  export function projectCacheCreationUsage(usage = {}) {
9
41
  if (usage.cacheCreationInvalid === true)
@@ -62,8 +94,7 @@ export function projectUsagePricingContext(usage = {}) {
62
94
  const value = Object.hasOwn(usage, key) ? usage[key] : usage[alias];
63
95
  if (key === "service_tier") {
64
96
  projected[key] =
65
- typeof value === "string" &&
66
- Object.hasOwn(GPT6_PRICING_TERMS.serviceMultipliers, value)
97
+ typeof value === "string" && KNOWN_SERVICE_TIERS.has(value)
67
98
  ? value
68
99
  : "unknown";
69
100
  } else {