chainlesschain 0.166.100 → 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 (187) hide show
  1. package/package.json +3 -3
  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-Cd4iUOPt.js → AIOps-CyHIMEd8.js} +1 -1
  5. package/src/assets/web-panel/assets/{ActionButton--ucr-zko.js → ActionButton-vuNxDpHm.js} +1 -1
  6. package/src/assets/web-panel/assets/{Analytics-DbejYMWk.js → Analytics-D0quEM0q.js} +3 -3
  7. package/src/assets/web-panel/assets/{AppLayout-CLgKxeGw.js → AppLayout-xRSVpbCs.js} +5 -5
  8. package/src/assets/web-panel/assets/{Artifacts-CTT5BIL5.js → Artifacts-ktfVAZBC.js} +1 -1
  9. package/src/assets/web-panel/assets/{Audit-DP-WBWe9.js → Audit-UJW6maH4.js} +1 -1
  10. package/src/assets/web-panel/assets/{BackgroundAgents-B6VqheJk.js → BackgroundAgents-BYrfdCoT.js} +1 -1
  11. package/src/assets/web-panel/assets/{Backup-VWJK5zim.js → Backup-IBgsJ7BK.js} +1 -1
  12. package/src/assets/web-panel/assets/{BaseInput-YGFO9RHd.js → BaseInput-BmP8_zxy.js} +1 -1
  13. package/src/assets/web-panel/assets/{Chat-CVfydnCd.js → Chat-urkw8_BF.js} +5 -5
  14. package/src/assets/web-panel/assets/{ChatBubbleRenderer-BICpB-qU.js → ChatBubbleRenderer-Cw44zZbh.js} +1 -1
  15. package/src/assets/web-panel/assets/{Checkbox-Bd5vKRMk.js → Checkbox-CYboo-__.js} +1 -1
  16. package/src/assets/web-panel/assets/{Codegen-DHNgPHvg.js → Codegen-DaqR_Ay8.js} +1 -1
  17. package/src/assets/web-panel/assets/{Col-CA2BYQ8T.js → Col-04BSIj_z.js} +1 -1
  18. package/src/assets/web-panel/assets/{Community-DnKJ-qpI.js → Community-DxFk7Trv.js} +1 -1
  19. package/src/assets/web-panel/assets/{Compact-C9BZ8t4r.js → Compact-mjgWlMCB.js} +1 -1
  20. package/src/assets/web-panel/assets/{Compliance-ByyQ2FOl.js → Compliance-CC5ee7QV.js} +1 -1
  21. package/src/assets/web-panel/assets/{Cowork-rXTwXE_c.js → Cowork-BK4BhHZd.js} +2 -2
  22. package/src/assets/web-panel/assets/{Cron-BuW-HODy.js → Cron-CP6jAxq0.js} +2 -2
  23. package/src/assets/web-panel/assets/{Crosschain-OudNtbYW.js → Crosschain-DJPaViZS.js} +1 -1
  24. package/src/assets/web-panel/assets/{DID-BQ6BxYNN.js → DID-BTLxkuOj.js} +2 -2
  25. package/src/assets/web-panel/assets/{Dashboard-Cz5HG8tz.js → Dashboard-Djkiqh3d.js} +2 -2
  26. package/src/assets/web-panel/assets/{Dropdown-BzclHOVv.js → Dropdown-t_eUhqom.js} +1 -1
  27. package/src/assets/web-panel/assets/{EmailListRenderer-CbJETFdy.js → EmailListRenderer-7w6USx_J.js} +1 -1
  28. package/src/assets/web-panel/assets/{EvolutionSettings-Dx_pJG3d.js → EvolutionSettings-mU5IHEk5.js} +1 -1
  29. package/src/assets/web-panel/assets/{FamilyGuardDashboard-6JCS1MNg.js → FamilyGuardDashboard-BCh-VBBC.js} +1 -1
  30. package/src/assets/web-panel/assets/{Federation-BrPkMYaf.js → Federation-Be_VpjI2.js} +1 -1
  31. package/src/assets/web-panel/assets/{FormItemContext-Bhc9pobs.js → FormItemContext-D_lzQ7PI.js} +1 -1
  32. package/src/assets/web-panel/assets/{GenericCardRenderer-BxOh07uQ.js → GenericCardRenderer-LYu3KapV.js} +1 -1
  33. package/src/assets/web-panel/assets/{Git-D_idoujr.js → Git-BBeF-PP4.js} +2 -2
  34. package/src/assets/web-panel/assets/{Governance-ZGfIRE-x.js → Governance-CoF8Kzg7.js} +1 -1
  35. package/src/assets/web-panel/assets/{Inference-DpAmcwbw.js → Inference-C4DLMnXS.js} +1 -1
  36. package/src/assets/web-panel/assets/{KnowledgeGraph-D1S1UTgP.js → KnowledgeGraph-B2mlNewk.js} +1 -1
  37. package/src/assets/web-panel/assets/{Logs-2sc8V5XV.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-0xlFUKbe.js → Marketplace-BqDzTew_.js} +1 -1
  40. package/src/assets/web-panel/assets/{McpTools-D25eJLGm.js → McpTools-BbwSbDN9.js} +3 -3
  41. package/src/assets/web-panel/assets/{Memory-BLRGd9hM.js → Memory-DAaTWgrm.js} +2 -2
  42. package/src/assets/web-panel/assets/{MobileBridge-zpFINGzn.js → MobileBridge-BjbTGxoR.js} +1 -1
  43. package/src/assets/web-panel/assets/{MobileProjects-Cbyd-8kx.js → MobileProjects-DMODOBr-.js} +1 -1
  44. package/src/assets/web-panel/assets/{Mtc-DgXgUlHc.js → Mtc-DT9N2rCs.js} +2 -2
  45. package/src/assets/web-panel/assets/{MtcAudit-DzcL-dKH.js → MtcAudit-DagMfUVv.js} +2 -2
  46. package/src/assets/web-panel/assets/{Multisig-C3OrZ6VN.js → Multisig-C1BKP6nM.js} +3 -3
  47. package/src/assets/web-panel/assets/{NLProgramming-Bqp_vWA7.js → NLProgramming-B5LFh72i.js} +1 -1
  48. package/src/assets/web-panel/assets/{Notes-Dyn45-Ht.js → Notes-Q77V3ltW.js} +3 -3
  49. package/src/assets/web-panel/assets/{NotificationSettings-CLjafGZr.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-5gr9hyLm.js → Organization-QL3NZ7uW.js} +4 -4
  52. package/src/assets/web-panel/assets/{Overflow-BRdU02hT.js → Overflow-B_gqOKho.js} +1 -1
  53. package/src/assets/web-panel/assets/{P2P-DIi7fzh6.js → P2P-BBJubU8Z.js} +2 -2
  54. package/src/assets/web-panel/assets/{PdhVaultBrowser-BCbS1KpA.js → PdhVaultBrowser-CFnGd-2E.js} +3 -3
  55. package/src/assets/web-panel/assets/{Permissions-BjeP9VtA.js → Permissions-BKkznIUM.js} +4 -4
  56. package/src/assets/web-panel/assets/{PersonalDataHub-y8PXOQUc.js → PersonalDataHub-DYK7ZAcd.js} +4 -4
  57. package/src/assets/web-panel/assets/{Pipeline-B0fL5uxY.js → Pipeline-CoeKpjoN.js} +1 -1
  58. package/src/assets/web-panel/assets/{Privacy-C8jCDn8Z.js → Privacy-Diw4G-92.js} +1 -1
  59. package/src/assets/web-panel/assets/{ProjectInit-B_L6Dc6V.js → ProjectInit-CHBOFkma.js} +2 -2
  60. package/src/assets/web-panel/assets/{ProjectSettings-Bb1CYbZh.js → ProjectSettings-BJIsgdOf.js} +2 -2
  61. package/src/assets/web-panel/assets/{Projects-CUSV10Cn.js → Projects-GJjItXIk.js} +1 -1
  62. package/src/assets/web-panel/assets/{Providers-mBSTDJ0E.js → Providers-o8QCimor.js} +1 -1
  63. package/src/assets/web-panel/assets/{QrScannerModal-CHxgalvt.js → QrScannerModal-z2W-zvhW.js} +1 -1
  64. package/src/assets/web-panel/assets/{QuickAsk-DI9KIMEV.js → QuickAsk-_yubhsna.js} +1 -1
  65. package/src/assets/web-panel/assets/{Recommend-B5_zW1JH.js → Recommend-CucgJwih.js} +1 -1
  66. package/src/assets/web-panel/assets/{RemoteSession-BkH4bmM5.js → RemoteSession-EzfIIRg1.js} +2 -2
  67. package/src/assets/web-panel/assets/{Reputation-DJrAqwAq.js → Reputation-_shttE67.js} +1 -1
  68. package/src/assets/web-panel/assets/{Row-xZ3MAM34.js → Row-DQA_S8-9.js} +1 -1
  69. package/src/assets/web-panel/assets/{RssFeed-CCsrLLiu.js → RssFeed-BOqWawXT.js} +3 -3
  70. package/src/assets/web-panel/assets/{Search-CTCRKvaP.js → Search-Dx1v2xOq.js} +1 -1
  71. package/src/assets/web-panel/assets/{Security-D7joyfp2.js → Security-Bt4HHsT4.js} +4 -4
  72. package/src/assets/web-panel/assets/{Services-oqHPmTG4.js → Services-sruHiQ-r.js} +2 -2
  73. package/src/assets/web-panel/assets/{Skeleton-BR_32bTG.js → Skeleton-CiBxvmOJ.js} +1 -1
  74. package/src/assets/web-panel/assets/{Skills-BoRz9mln.js → Skills-De9qKODU.js} +1 -1
  75. package/src/assets/web-panel/assets/{Sla-UAGUHZ9b.js → Sla-B_6yn8Wp.js} +1 -1
  76. package/src/assets/web-panel/assets/{SpeechSettings-DeP_rMgv.js → SpeechSettings-C2CafExS.js} +1 -1
  77. package/src/assets/web-panel/assets/{SyncSettings-CSzzMmeA.js → SyncSettings-Dhh3Qmb0.js} +2 -2
  78. package/src/assets/web-panel/assets/{Tasks-CcqOLsLB.js → Tasks-Mvo5mTWm.js} +1 -1
  79. package/src/assets/web-panel/assets/{Templates-cDbkGSDG.js → Templates-D7WVTQQy.js} +1 -1
  80. package/src/assets/web-panel/assets/{Tenant-DmOy58cq.js → Tenant-7ur9Yfxd.js} +1 -1
  81. package/src/assets/web-panel/assets/{Terminal-CsRZH5vr.js → Terminal-BgzrOA6k.js} +2 -2
  82. package/src/assets/web-panel/assets/{TimelineRenderer-BgJrk6HG.js → TimelineRenderer-Dco20pT1.js} +1 -1
  83. package/src/assets/web-panel/assets/{Tokens-CCQglKDE.js → Tokens-hN6qBPag.js} +1 -1
  84. package/src/assets/web-panel/assets/{Trigger-t-Gt3oBY.js → Trigger-C4f_twAM.js} +1 -1
  85. package/src/assets/web-panel/assets/{Trust-DQgu2kI0.js → Trust-Wf1SMypp.js} +1 -1
  86. package/src/assets/web-panel/assets/{UkeySign-Cod2WUGj.js → UkeySign-DUXSyg3N.js} +1 -1
  87. package/src/assets/web-panel/assets/{VideoEditing-SGN5zaVK.js → VideoEditing-BvqsJaL0.js} +1 -1
  88. package/src/assets/web-panel/assets/{Wallet-CnLEL-LD.js → Wallet-CgAbcjKl.js} +3 -3
  89. package/src/assets/web-panel/assets/{WebAuthn-C2keUpD6.js → WebAuthn-DaLT0W3s.js} +2 -2
  90. package/src/assets/web-panel/assets/{WorkflowEditor-B1GvrwWJ.js → WorkflowEditor-CQqAXoaS.js} +1 -1
  91. package/src/assets/web-panel/assets/{chat-1E9_P_qY.js → chat-BhlohFTB.js} +1 -1
  92. package/src/assets/web-panel/assets/{colors-DuU6Os4q.js → colors-D7HqXIL8.js} +1 -1
  93. package/src/assets/web-panel/assets/{compact-item-C5NfOAcM.js → compact-item-Bqk4FCLY.js} +1 -1
  94. package/src/assets/web-panel/assets/{createContext-D4Fxz9qQ.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-C6C49iFk.js → hasIn-CDY0pFi2.js} +1 -1
  97. package/src/assets/web-panel/assets/{index-DP2DCKD-.js → index-1HBam9t1.js} +1 -1
  98. package/src/assets/web-panel/assets/{index-B-bb-R99.js → index-6f6n0KFR.js} +1 -1
  99. package/src/assets/web-panel/assets/{index-BmvU4Tp_.js → index-B8L3_-sG.js} +1 -1
  100. package/src/assets/web-panel/assets/{index-BsH8mFp4.js → index-BHGOdvOQ.js} +1 -1
  101. package/src/assets/web-panel/assets/{index-BVE2wCeb.js → index-BNrvBWDS.js} +1 -1
  102. package/src/assets/web-panel/assets/{index-CJS6GTpv.js → index-BPmRkxeX.js} +1 -1
  103. package/src/assets/web-panel/assets/{index-C7mh6xlu.js → index-BXRooi-O.js} +1 -1
  104. package/src/assets/web-panel/assets/{index-BZKRZYTX.js → index-BiLu-ImR.js} +1 -1
  105. package/src/assets/web-panel/assets/{index-jFg3CPlQ.js → index-BuKGuH_y.js} +1 -1
  106. package/src/assets/web-panel/assets/{index-BULggEX6.js → index-BxXFRLTZ.js} +1 -1
  107. package/src/assets/web-panel/assets/{index-DPzunJER.js → index-BxYO6nde.js} +1 -1
  108. package/src/assets/web-panel/assets/{index-AO6iDCSL.js → index-C02yDu4f.js} +1 -1
  109. package/src/assets/web-panel/assets/{index-BU5mPkNX.js → index-C3opQg47.js} +1 -1
  110. package/src/assets/web-panel/assets/{index-DSypQU1h.js → index-C9mvnSii.js} +1 -1
  111. package/src/assets/web-panel/assets/{index-DZgT7pH-.js → index-CVrwozwH.js} +1 -1
  112. package/src/assets/web-panel/assets/{index-CpiOzt7U.js → index-CYcjOnDX.js} +1 -1
  113. package/src/assets/web-panel/assets/{index-BlHkc48f.js → index-Cf1ha8l0.js} +1 -1
  114. package/src/assets/web-panel/assets/{index-CXb8gEWh.js → index-Chxt0t-A.js} +1 -1
  115. package/src/assets/web-panel/assets/{index-HQXFl8fh.js → index-CkjgSHVz.js} +1 -1
  116. package/src/assets/web-panel/assets/{index-DpaGe-dr.js → index-CkqBoCiu.js} +3 -3
  117. package/src/assets/web-panel/assets/{index-C2nO02uW.js → index-CqK0J4Sj.js} +1 -1
  118. package/src/assets/web-panel/assets/{index-Bu6qMjf4.js → index-CrsM-oiD.js} +1 -1
  119. package/src/assets/web-panel/assets/{index-Bk-paNL3.js → index-Cur88hoN.js} +1 -1
  120. package/src/assets/web-panel/assets/{index-CXn-e3ki.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-CDVwN9Sv.js → index-DEzL7s7P.js} +1 -1
  123. package/src/assets/web-panel/assets/{index-B_ON9La1.js → index-DGKRAO61.js} +1 -1
  124. package/src/assets/web-panel/assets/{index-CQJoh5rw.js → index-DPBoWNwq.js} +1 -1
  125. package/src/assets/web-panel/assets/{index-cnDfwWU5.js → index-DRcDWMwP.js} +1 -1
  126. package/src/assets/web-panel/assets/{index-BBVqlelF.js → index-DmKdCWq1.js} +1 -1
  127. package/src/assets/web-panel/assets/{index-BYg1dtne.js → index-DpI1LqJX.js} +1 -1
  128. package/src/assets/web-panel/assets/{index-B5lzRoHp.js → index-DuMt3ewl.js} +1 -1
  129. package/src/assets/web-panel/assets/{index-gh11zJ9h.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-D1TXgNPA.js → index-XErJQ1yF.js} +1 -1
  132. package/src/assets/web-panel/assets/{index-DFK6PTGJ.js → index-aBHlgMrq.js} +1 -1
  133. package/src/assets/web-panel/assets/{index-Dh-vezHe.js → index-e9oCy7_4.js} +1 -1
  134. package/src/assets/web-panel/assets/{index-bW6vfpLH.js → index-lBAbMOzg.js} +1 -1
  135. package/src/assets/web-panel/assets/{index-lNmDaf3J.js → index-o_lc3eww.js} +1 -1
  136. package/src/assets/web-panel/assets/{initDefaultProps-3DSfnIpD.js → initDefaultProps-CIeEUxIN.js} +1 -1
  137. package/src/assets/web-panel/assets/{motion-DxGLmgA0.js → motion-IPIj1ZtP.js} +1 -1
  138. package/src/assets/web-panel/assets/{move-DrlLG6m5.js → move-BfSeXZ-f.js} +1 -1
  139. package/src/assets/web-panel/assets/{mtc-parser-BITbrJSb.js → mtc-parser-DX03-Xp4.js} +1 -1
  140. package/src/assets/web-panel/assets/{omit-D7k5vIbk.js → omit-z9EannfX.js} +1 -1
  141. package/src/assets/web-panel/assets/{pickAttrs-BJSvYFWo.js → pickAttrs-DXKmRkqZ.js} +1 -1
  142. package/src/assets/web-panel/assets/{placementArrow-Bf4to1jA.js → placementArrow-k2HV7cIU.js} +1 -1
  143. package/src/assets/web-panel/assets/{responsiveObserve-BXzeyzTa.js → responsiveObserve-bX7CsyWy.js} +1 -1
  144. package/src/assets/web-panel/assets/{slide-DLzNUNdj.js → slide-NskjQLbJ.js} +1 -1
  145. package/src/assets/web-panel/assets/{statusUtils-wBBnrRm_.js → statusUtils-B3IoG-Er.js} +1 -1
  146. package/src/assets/web-panel/assets/{styleChecker-BnmJzXNr.js → styleChecker-DHv_UilX.js} +1 -1
  147. package/src/assets/web-panel/assets/{useFlexGapSupport-DrN8MrJb.js → useFlexGapSupport-DEqGB5Ng.js} +1 -1
  148. package/src/assets/web-panel/assets/{useFs-dnkYGkjY.js → useFs-Bl9CbrqZ.js} +1 -1
  149. package/src/assets/web-panel/assets/{usePersonalDataHub-k_xkv7-k.js → usePersonalDataHub-O-Ukv93M.js} +1 -1
  150. package/src/assets/web-panel/assets/{vnode-B-v8PXpK.js → vnode-hGCHTaZt.js} +1 -1
  151. package/src/assets/web-panel/assets/{zoom-Coue8wAK.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/commands/eval.js +11 -8
  156. package/src/data/changelog.json +26 -0
  157. package/src/harness/provider-backed-compaction.js +13 -5
  158. package/src/lib/config-schema.js +18 -5
  159. package/src/lib/context-memory-kernel/live-compaction.js +142 -61
  160. package/src/lib/context-memory-kernel/memory-query-index.js +5 -2
  161. package/src/lib/context-memory-kernel/runtime.js +4 -0
  162. package/src/lib/context-memory-kernel/segmented-memory-port.js +28 -3
  163. package/src/lib/context-source-ledger.js +52 -9
  164. package/src/lib/formal-budget-authority.js +533 -0
  165. package/src/lib/formal-budget-contract.js +609 -0
  166. package/src/lib/formal-budget-transport.js +345 -0
  167. package/src/lib/goal-condition-engine.js +25 -2
  168. package/src/lib/llm-config-defaults.js +10 -4
  169. package/src/lib/llm-pricing.js +16 -4
  170. package/src/lib/model-capabilities.js +26 -0
  171. package/src/lib/model-catalog-review.js +18 -1
  172. package/src/lib/model-context-catalog.js +41 -1
  173. package/src/lib/openai-responses.js +8 -0
  174. package/src/lib/skill-retrieval-router.js +1 -0
  175. package/src/lib/usage-pricing-context.js +33 -2
  176. package/src/repl/agent-repl.js +247 -153
  177. package/src/runtime/agent-core.js +371 -97
  178. package/src/runtime/coding-agent-contract-shared.cjs +14 -1
  179. package/src/runtime/headless-runner.js +1 -0
  180. package/src/runtime/headless-stream.js +137 -4
  181. package/src/runtime/mcp-tool-search.js +0 -0
  182. package/src/runtime/provider-stream-state.js +14 -1
  183. package/src/assets/web-panel/assets/MarkdownRenderer-575jjYE6.js +0 -1
  184. package/src/assets/web-panel/assets/OrderTableRenderer-Bx8wMauC.js +0 -1
  185. package/src/assets/web-panel/assets/devWarning-zDWbYMr7.js +0 -1
  186. package/src/assets/web-panel/assets/index-BPBsZZnT.js +0 -1
  187. package/src/assets/web-panel/assets/index-CtGQDg7m.js +0 -1
@@ -308,6 +308,10 @@ export function registerAgentCommand(program, dependencies = {}) {
308
308
  "LLM provider (ollama, openai, volcengine, deepseek, ...)",
309
309
  )
310
310
  .option("--base-url <url>", "API base URL")
311
+ .option(
312
+ "--service-tier <tier>",
313
+ "Reviewed provider service tier (standard, fast, flex, ultrafast)",
314
+ )
311
315
  .option("--api-key <key>", "API key")
312
316
  .option(
313
317
  "--think [level]",
@@ -769,8 +773,9 @@ export function registerAgentCommand(program, dependencies = {}) {
769
773
  // --capabilities: print the machine-readable manifest and exit — no
770
774
  // config, no bootstrap, no network (gap-analysis 2026-07-11 快速收益 #6).
771
775
  if (options.capabilities) {
772
- const { buildAgentCapabilities } =
773
- await import("../lib/headless-manifest.js");
776
+ const { buildAgentCapabilities } = await import(
777
+ "../lib/headless-manifest.js"
778
+ );
774
779
  console.log(JSON.stringify(buildAgentCapabilities(), null, 2));
775
780
  return;
776
781
  }
@@ -789,8 +794,9 @@ export function registerAgentCommand(program, dependencies = {}) {
789
794
  let toolAdmission = null;
790
795
  if (process.env.CC_TOOL_ADMISSION) {
791
796
  try {
792
- const { parseToolAdmissionConfig } =
793
- await import("../lib/agent-tool-admission.js");
797
+ const { parseToolAdmissionConfig } = await import(
798
+ "../lib/agent-tool-admission.js"
799
+ );
794
800
  toolAdmission = parseToolAdmissionConfig(
795
801
  process.env.CC_TOOL_ADMISSION,
796
802
  );
@@ -878,8 +884,9 @@ export function registerAgentCommand(program, dependencies = {}) {
878
884
  // screen readers (mono theme + no repainting status line). Applied
879
885
  // before anything renders.
880
886
  {
881
- const { screenReaderRequested, applyScreenReaderMode } =
882
- await import("../lib/accessibility.js");
887
+ const { screenReaderRequested, applyScreenReaderMode } = await import(
888
+ "../lib/accessibility.js"
889
+ );
883
890
  if (screenReaderRequested(options)) {
884
891
  applyScreenReaderMode();
885
892
  }
@@ -912,8 +919,9 @@ export function registerAgentCommand(program, dependencies = {}) {
912
919
  };
913
920
  if (options.worktree !== undefined || backgroundRequested) {
914
921
  try {
915
- const { resolveBackgroundWorktreePolicy } =
916
- await import("../lib/background-worktree-policy.js");
922
+ const { resolveBackgroundWorktreePolicy } = await import(
923
+ "../lib/background-worktree-policy.js"
924
+ );
917
925
  worktreeDecision = resolveBackgroundWorktreePolicy({
918
926
  background: backgroundRequested,
919
927
  worktree: options.worktree,
@@ -965,8 +973,9 @@ export function registerAgentCommand(program, dependencies = {}) {
965
973
  };
966
974
  if (worktreeDecision.enabled) {
967
975
  try {
968
- const { setupAgentWorktree, finishAgentWorktree } =
969
- await import("../lib/agent-worktree.js");
976
+ const { setupAgentWorktree, finishAgentWorktree } = await import(
977
+ "../lib/agent-worktree.js"
978
+ );
970
979
  _finishAgentWorktreeFn = finishAgentWorktree;
971
980
  const detectedRepoRoot = worktreeDecision.repoRoot || invocationCwd;
972
981
  const worktreeCwd =
@@ -994,8 +1003,9 @@ export function registerAgentCommand(program, dependencies = {}) {
994
1003
  const { loadHooks } = await import("../lib/settings-hooks.cjs");
995
1004
  _worktreeSettingsHooks =
996
1005
  loadHooks({ cwd: _worktree.repoRoot }).hooks || null;
997
- const { runWorktreeCreateHooks, dispatchAsyncHooks } =
998
- await import("../lib/settings-hook-events.js");
1006
+ const { runWorktreeCreateHooks, dispatchAsyncHooks } = await import(
1007
+ "../lib/settings-hook-events.js"
1008
+ );
999
1009
  await runWorktreeCreateHooks(_worktreeSettingsHooks, {
1000
1010
  worktreePath: _worktree.path,
1001
1011
  branch: _worktree.branch,
@@ -1003,8 +1013,9 @@ export function registerAgentCommand(program, dependencies = {}) {
1003
1013
  cwd: _worktree.path,
1004
1014
  });
1005
1015
  if (!_worktreeAsyncSupervisor) {
1006
- const { AsyncHookSupervisor } =
1007
- await import("../lib/async-hook-supervisor.js");
1016
+ const { AsyncHookSupervisor } = await import(
1017
+ "../lib/async-hook-supervisor.js"
1018
+ );
1008
1019
  _worktreeAsyncSupervisor = new AsyncHookSupervisor({
1009
1020
  persistStats: true,
1010
1021
  });
@@ -1089,8 +1100,9 @@ export function registerAgentCommand(program, dependencies = {}) {
1089
1100
  // Claude-Code parity: auto-checkpoint defaults ON inside a git repo
1090
1101
  // (shadow-commit engine, zero working-tree touch); explicit
1091
1102
  // --checkpoint / --no-checkpoint always wins.
1092
- const { resolveAutoCheckpoint } =
1093
- await import("../lib/auto-checkpoint-default.js");
1103
+ const { resolveAutoCheckpoint } = await import(
1104
+ "../lib/auto-checkpoint-default.js"
1105
+ );
1094
1106
  const autoCheckpoint = resolveAutoCheckpoint({
1095
1107
  flagValue: options.checkpoint,
1096
1108
  flagSource: command?.getOptionValueSource?.("checkpoint"),
@@ -1118,8 +1130,9 @@ export function registerAgentCommand(program, dependencies = {}) {
1118
1130
  options.outputFormat !== "text" ||
1119
1131
  !process.stdin.isTTY;
1120
1132
  if (headlessIntent) {
1121
- const { getLastLogicalSessionId } =
1122
- await import("../lib/session-transcript-migration.js");
1133
+ const { getLastLogicalSessionId } = await import(
1134
+ "../lib/session-transcript-migration.js"
1135
+ );
1123
1136
  const database =
1124
1137
  sessionBootstrapContext.db?.getDatabase?.() ||
1125
1138
  sessionBootstrapContext.db?.getDb?.() ||
@@ -1127,8 +1140,9 @@ export function registerAgentCommand(program, dependencies = {}) {
1127
1140
  options.session = getLastLogicalSessionId(database);
1128
1141
  } else {
1129
1142
  // Interactive: picker across both stores (agent REPL rebuilds either).
1130
- const { pickRecentSession } =
1131
- await import("../lib/session-picker.js");
1143
+ const { pickRecentSession } = await import(
1144
+ "../lib/session-picker.js"
1145
+ );
1132
1146
  const picked = await pickRecentSession(sessionBootstrapContext, {
1133
1147
  message: "Resume which agent session?",
1134
1148
  });
@@ -1154,8 +1168,9 @@ export function registerAgentCommand(program, dependencies = {}) {
1154
1168
  // diagnostics belong on stderr; stdout may already be reserved for a
1155
1169
  // JSON/NDJSON protocol selected by this command.
1156
1170
  await withQuietStdout(async () => {
1157
- const { sessionHasPersistedEvidence } =
1158
- await import("../harness/jsonl-session-store.js");
1171
+ const { sessionHasPersistedEvidence } = await import(
1172
+ "../harness/jsonl-session-store.js"
1173
+ );
1159
1174
  if (!sessionHasPersistedEvidence(options.session)) {
1160
1175
  const [{ bootstrap }, { ensureCanonicalSessionFromDatabase }] =
1161
1176
  await Promise.all([
@@ -1185,8 +1200,9 @@ export function registerAgentCommand(program, dependencies = {}) {
1185
1200
  // a no-op (silent) for a fresh run.
1186
1201
  if (options.forkSession && options.session) {
1187
1202
  const store = await import("../harness/jsonl-session-store.js");
1188
- const { applyForkSession } =
1189
- await import("../runtime/headless-runner.js");
1203
+ const { applyForkSession } = await import(
1204
+ "../runtime/headless-runner.js"
1205
+ );
1190
1206
  const fork = applyForkSession(
1191
1207
  {
1192
1208
  forkSession: true,
@@ -1259,8 +1275,9 @@ export function registerAgentCommand(program, dependencies = {}) {
1259
1275
  let settingsSandbox = null;
1260
1276
  let managedSettingsSandbox = null;
1261
1277
  try {
1262
- const { loadSettingsConfig } =
1263
- await import("../lib/settings-loader.cjs");
1278
+ const { loadSettingsConfig } = await import(
1279
+ "../lib/settings-loader.cjs"
1280
+ );
1264
1281
  const sc = loadSettingsConfig({
1265
1282
  cwd: process.cwd(),
1266
1283
  settingsFile: options.settings || null,
@@ -1451,8 +1468,9 @@ export function registerAgentCommand(program, dependencies = {}) {
1451
1468
  // never pollutes spawned-bin test stderr.
1452
1469
  if (!process.env.VITEST && !process.env.VITEST_WORKER_ID) {
1453
1470
  try {
1454
- const { maybeWarnDeprecatedModel } =
1455
- await import("../lib/model-deprecation.js");
1471
+ const { maybeWarnDeprecatedModel } = await import(
1472
+ "../lib/model-deprecation.js"
1473
+ );
1456
1474
  maybeWarnDeprecatedModel({ model: options.model });
1457
1475
  } catch {
1458
1476
  /* fail-open: a deprecation notice must never affect the run */
@@ -1536,8 +1554,9 @@ export function registerAgentCommand(program, dependencies = {}) {
1536
1554
  ) {
1537
1555
  decisionConfig = Object.freeze({ mode: "off" });
1538
1556
  } else {
1539
- const { resolveHeadlessSkillDecisionOptions } =
1540
- await import("../runtime/headless-runner.js");
1557
+ const { resolveHeadlessSkillDecisionOptions } = await import(
1558
+ "../runtime/headless-runner.js"
1559
+ );
1541
1560
  decisionConfig = resolveHeadlessSkillDecisionOptions(options);
1542
1561
  }
1543
1562
  } catch (error) {
@@ -1599,8 +1618,9 @@ export function registerAgentCommand(program, dependencies = {}) {
1599
1618
  process.exit(1);
1600
1619
  return;
1601
1620
  }
1602
- const { runAgentHeadlessStream } =
1603
- await import("../runtime/headless-stream.js");
1621
+ const { runAgentHeadlessStream } = await import(
1622
+ "../runtime/headless-stream.js"
1623
+ );
1604
1624
  const { parseToolList, validateHeadlessInvocationOptions } =
1605
1625
  await import("../runtime/headless-runner.js");
1606
1626
  const cwd = process.cwd();
@@ -1859,8 +1879,9 @@ export function registerAgentCommand(program, dependencies = {}) {
1859
1879
  // presenting a fresh conversation as a successful resume.
1860
1880
  if (resumeRequested && options.session) {
1861
1881
  const hasPersistedEvidence = await withQuietStdout(async () => {
1862
- const { sessionHasPersistedEvidence } =
1863
- await import("../harness/jsonl-session-store.js");
1882
+ const { sessionHasPersistedEvidence } = await import(
1883
+ "../harness/jsonl-session-store.js"
1884
+ );
1864
1885
  return sessionHasPersistedEvidence(options.session);
1865
1886
  });
1866
1887
  if (!hasPersistedEvidence) {
@@ -1870,14 +1891,16 @@ export function registerAgentCommand(program, dependencies = {}) {
1870
1891
  );
1871
1892
  }
1872
1893
  }
1873
- const { runAgentHeadless, parseToolList } =
1874
- await import("../runtime/headless-runner.js");
1894
+ const { runAgentHeadless, parseToolList } = await import(
1895
+ "../runtime/headless-runner.js"
1896
+ );
1875
1897
  // --goal-condition: validate the spec up front so a bad prefix fails
1876
1898
  // fast (before any model call) with a clear message.
1877
1899
  if (options.goalCondition) {
1878
1900
  try {
1879
- const { parseGoalCondition } =
1880
- await import("../lib/goal-condition-engine.js");
1901
+ const { parseGoalCondition } = await import(
1902
+ "../lib/goal-condition-engine.js"
1903
+ );
1881
1904
  parseGoalCondition(options.goalCondition);
1882
1905
  } catch (e) {
1883
1906
  process.stderr.write(`--goal-condition: ${e.message}\n`);
@@ -1896,8 +1919,9 @@ export function registerAgentCommand(program, dependencies = {}) {
1896
1919
  : null;
1897
1920
  let evolutionComposition;
1898
1921
  try {
1899
- const { validateHeadlessInvocationOptions } =
1900
- await import("../runtime/headless-runner.js");
1922
+ const { validateHeadlessInvocationOptions } = await import(
1923
+ "../runtime/headless-runner.js"
1924
+ );
1901
1925
  validateHeadlessInvocationOptions({
1902
1926
  outputFormat: options.outputFormat,
1903
1927
  permissionMode: options.permissionMode,
@@ -20,7 +20,7 @@ import {
20
20
  persistVerify01Receipts,
21
21
  } from "../lib/eval/verify01-execution.js";
22
22
  import executionBroker from "../lib/process-execution-broker/index.js";
23
- import { BUILT_IN_PROVIDERS } from "../lib/llm-providers.js";
23
+ import { requireFormalBudgetRuntime } from "../lib/formal-budget-transport.js";
24
24
  import {
25
25
  TelemetryRecorder,
26
26
  formatTelemetry,
@@ -117,6 +117,9 @@ function makeHeadlessRunAgent(opts = {}) {
117
117
  throw new Error(
118
118
  "VERIFY01 provider/model binding differs from the launcher",
119
119
  );
120
+ // A valid task binding is not paid execution admission. Until every paid
121
+ // route and credential boundary is covered, refuse before spawning a child.
122
+ if (binding) requireFormalBudgetRuntime();
120
123
  const inherited = { ...process.env, ...(opts.env || {}) };
121
124
  const environmentValue = (name) => {
122
125
  if (process.platform !== "win32") return inherited[name];
@@ -127,11 +130,10 @@ function makeHeadlessRunAgent(opts = {}) {
127
130
  .find((candidate) => candidate.toLowerCase() === name.toLowerCase());
128
131
  return key === undefined ? undefined : inherited[key];
129
132
  };
130
- const providerKey = BUILT_IN_PROVIDERS[binding?.provider]?.apiKeyEnv;
131
- // Formal children retain platform plumbing and only the selected provider's
132
- // credential (or the explicitly selected generic CC_API_KEY). Hooks,
133
- // fallback configuration, NODE_OPTIONS and unrelated account tokens are
134
- // excluded. Normal, non-formal Eval retains its existing environment.
133
+ // Formal children retain platform plumbing and the isolated task binding.
134
+ // Provider credentials belong to the trusted budget host. Hooks, fallback
135
+ // configuration, NODE_OPTIONS and account tokens are excluded. This alone
136
+ // does not enforce OS egress; paid launch remains refused above.
135
137
  const childEnvironment = binding
136
138
  ? {
137
139
  ...Object.fromEntries(
@@ -147,8 +149,6 @@ function makeHeadlessRunAgent(opts = {}) {
147
149
  "LANG",
148
150
  "LC_ALL",
149
151
  "LC_CTYPE",
150
- "CC_API_KEY",
151
- ...(providerKey ? [providerKey] : []),
152
152
  ]
153
153
  .map((key) => [key, environmentValue(key)])
154
154
  .filter(([, value]) => value !== undefined),
@@ -462,6 +462,9 @@ export function registerEvalCommand(program, { logger } = {}) {
462
462
  throw new Error(
463
463
  "frozen suite comparison is bound by its plan; --comparison-context cannot override it",
464
464
  );
465
+ // Refuse before task setup, workspace creation or raw receipt writes.
466
+ // Dry runs remain offline harness diagnostics, never observations.
467
+ if (tasks.verification && !options.dryRun) requireFormalBudgetRuntime();
465
468
  comparison =
466
469
  tasks.verification?.comparison ||
467
470
  createEvalComparison({
@@ -1,6 +1,32 @@
1
1
  {
2
2
  "source": "CHANGELOG.md",
3
3
  "releases": [
4
+ {
5
+ "productVersion": null,
6
+ "cliVersion": "0.166.102",
7
+ "cliVersions": ["0.166.102"],
8
+ "date": null,
9
+ "title": "",
10
+ "sections": [
11
+ {
12
+ "heading": "Fixed - cc CLI 0.166.102: restore session pricing validation",
13
+ "body": "- Accept the reviewed Priority and Ultrafast pricing terms when validating the\n built-in model catalog, restoring session observability, budget and Eval\n projections while continuing to reject unknown tiers and invalid multipliers.\n- Make the model-switch warning regression insensitive to source formatting.\n- Publish Personal Data Hub 0.4.65 with source snapshots in answer citations\n before CLI 0.166.102, then pair VS Code 0.37.146 and JetBrains 0.4.164 after\n the exact release commit passes its complete Actions gates."
14
+ }
15
+ ]
16
+ },
17
+ {
18
+ "productVersion": null,
19
+ "cliVersion": "0.166.101",
20
+ "cliVersions": ["0.166.101"],
21
+ "date": null,
22
+ "title": "",
23
+ "sections": [
24
+ {
25
+ "heading": "Fixed - cc CLI 0.166.101: preserve context, usage and task outcomes during compaction",
26
+ "body": "- Restore VS Code composer drafts after reset, session resume and closing the\n last tab, with retry controls for failed loads. Align LLM connection tests\n with the chat CLI and distinguish missing dependencies from provider errors.\n- Upgrade Context Memory Kernel to 0.1.10. Abort compaction with\n `context_over_budget` when planning would empty a nonempty context or discard\n a newly derived summary, including when summarizer fallback is enabled.\n- Preserve the original session context and head on rejection while retaining\n settled provider usage. Keep summary trust and selection budgets unchanged.\n- Propagate validated provider receipts before accounting. Mark rejected\n workflow compaction as failed, uncertain commits as requiring reconciliation,\n and interrupted ordinary tasks as incomplete.\n- Account for completed compaction usage once when canonical planning rejects\n its summary; stop on unknown usage or failed settlement without a paid retry.\n- Pair VS Code 0.37.145 and JetBrains 0.4.163 with CLI 0.166.101 after child\n package publication, public CLI verification and the final commit's complete\n Actions release gates. Formal evaluation and native/durable acceptance retain\n their separate evidence and unfinished status."
27
+ }
28
+ ]
29
+ },
4
30
  {
5
31
  "productVersion": null,
6
32
  "cliVersion": "0.166.100",
@@ -151,10 +151,16 @@ export async function compactConversationWithProvider(messages, options = {}) {
151
151
  }
152
152
  chatFn = chatWithTools;
153
153
  }
154
- const invokeProviderCall = async (call) => {
155
- const callId = safeUsageCallId(await options.onProviderCallStart?.());
154
+ const invokeProviderCall = async (call, deferUntilAdmission = false) => {
155
+ let callId = null;
156
+ const start = async () => {
157
+ callId = safeUsageCallId(await options.onProviderCallStart?.());
158
+ };
159
+ // Only the captured canonical transport can attest that request admission
160
+ // completed. Custom adapters keep the conservative pre-call boundary.
161
+ if (!deferUntilAdmission) await start();
156
162
  try {
157
- return attachProviderCallId(await call(), callId);
163
+ return attachProviderCallId(await call(start), callId);
158
164
  } catch (error) {
159
165
  attachProviderCallIdToError(error, callId);
160
166
  throw error;
@@ -167,7 +173,7 @@ export async function compactConversationWithProvider(messages, options = {}) {
167
173
  if (typeof chatFn !== "function") {
168
174
  throw new Error("provider adapter unavailable");
169
175
  }
170
- return invokeProviderCall(async () => {
176
+ return invokeProviderCall(async (start) => {
171
177
  const response = await chatFn([{ role: "user", content: prompt }], {
172
178
  ...(options.chatOptions || {}),
173
179
  ...(evolutionIngress === null ? {} : { evolutionIngress }),
@@ -184,6 +190,8 @@ export async function compactConversationWithProvider(messages, options = {}) {
184
190
  onToken: undefined,
185
191
  onStall: undefined,
186
192
  onStreamRetry: undefined,
193
+ onProviderCallStart:
194
+ evolutionIngress === null ? undefined : start,
187
195
  maxOutputTokens,
188
196
  });
189
197
  return {
@@ -198,7 +206,7 @@ export async function compactConversationWithProvider(messages, options = {}) {
198
206
  ? { usageLedgerSettled: true }
199
207
  : {}),
200
208
  };
201
- });
209
+ }, evolutionIngress !== null);
202
210
  };
203
211
 
204
212
  const compressor =
@@ -69,6 +69,19 @@ const DESCRIPTORS = [
69
69
  default: DEFAULT_CONFIG.llm.model,
70
70
  description: "Default model id",
71
71
  }),
72
+ descriptor("llm.serviceTier", "string", {
73
+ enum: [
74
+ "standard",
75
+ "default",
76
+ "auto",
77
+ "fast",
78
+ "priority",
79
+ "flex",
80
+ "ultrafast",
81
+ ],
82
+ description:
83
+ "Requested live service tier; model and endpoint support are checked before dispatch",
84
+ }),
72
85
  descriptor("llm.visionModel", ["string", "null"], {
73
86
  description: "Model used for image turns",
74
87
  }),
@@ -502,11 +515,11 @@ function valueIssue(key, code, message) {
502
515
  function isPersistedSecretRef(value) {
503
516
  return Boolean(
504
517
  value &&
505
- typeof value === "object" &&
506
- !Array.isArray(value) &&
507
- Object.keys(value).length === 1 &&
508
- typeof value.__cc_secret_ref === "string" &&
509
- value.__cc_secret_ref.length > 0,
518
+ typeof value === "object" &&
519
+ !Array.isArray(value) &&
520
+ Object.keys(value).length === 1 &&
521
+ typeof value.__cc_secret_ref === "string" &&
522
+ value.__cc_secret_ref.length > 0,
510
523
  );
511
524
  }
512
525