chainlesschain 0.166.48 → 0.166.56

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 (172) hide show
  1. package/README.md +22 -0
  2. package/package.json +1 -1
  3. package/src/assets/web-panel/.build-hash +1 -1
  4. package/src/assets/web-panel/assets/{AIOps-BLGEffkh.js → AIOps-CBFnwYRX.js} +1 -1
  5. package/src/assets/web-panel/assets/{ActionButton-Cz1z2VGD.js → ActionButton-Sl4eXWpR.js} +1 -1
  6. package/src/assets/web-panel/assets/{Analytics-C3j9cf6q.js → Analytics-DB0lD9Kb.js} +3 -3
  7. package/src/assets/web-panel/assets/{AppLayout-BR9ERuCA.js → AppLayout-j77EmkRK.js} +3 -3
  8. package/src/assets/web-panel/assets/{Artifacts-CozJCm4y.js → Artifacts-CU3izCW9.js} +1 -1
  9. package/src/assets/web-panel/assets/{Audit-DC5g9Ra2.js → Audit-C44fSibb.js} +1 -1
  10. package/src/assets/web-panel/assets/{BackgroundAgents-B1zrQ0dW.js → BackgroundAgents-pM_NnJW3.js} +1 -1
  11. package/src/assets/web-panel/assets/{Backup-ChVnfjpm.js → Backup-AOHXqhxN.js} +1 -1
  12. package/src/assets/web-panel/assets/{BaseInput-8_vLQsLf.js → BaseInput-DaYc8oA_.js} +1 -1
  13. package/src/assets/web-panel/assets/{Chat-Dct9bm6L.js → Chat-CmlCAXxW.js} +5 -5
  14. package/src/assets/web-panel/assets/{ChatBubbleRenderer-BvoSsCKh.js → ChatBubbleRenderer-CkCSkJDJ.js} +1 -1
  15. package/src/assets/web-panel/assets/{Checkbox-DZQIsCIC.js → Checkbox-DISI7iaA.js} +1 -1
  16. package/src/assets/web-panel/assets/{Codegen-CdzHxmnq.js → Codegen-BYpeKUpf.js} +1 -1
  17. package/src/assets/web-panel/assets/{Col-DdAN8LeW.js → Col-Dk6VwWGq.js} +1 -1
  18. package/src/assets/web-panel/assets/{Community-CNgjT9MA.js → Community-BDyTedMu.js} +1 -1
  19. package/src/assets/web-panel/assets/{Compact-BtQiX6G-.js → Compact-CTNlGM9X.js} +1 -1
  20. package/src/assets/web-panel/assets/{Compliance-OGX5ma3j.js → Compliance-C_tw3IdT.js} +1 -1
  21. package/src/assets/web-panel/assets/{Cowork-CgugQnGM.js → Cowork-cduHWEmo.js} +3 -3
  22. package/src/assets/web-panel/assets/{Cron-Bpg7cPFD.js → Cron-Dqotjv-s.js} +2 -2
  23. package/src/assets/web-panel/assets/{Crosschain-D1hsuswf.js → Crosschain-ByW7RsJQ.js} +1 -1
  24. package/src/assets/web-panel/assets/{DID-miDRsMBw.js → DID-BI-lafPj.js} +2 -2
  25. package/src/assets/web-panel/assets/{Dashboard-CGcl8htP.js → Dashboard-8m50TRZL.js} +2 -2
  26. package/src/assets/web-panel/assets/{Dropdown-BFaxTdVE.js → Dropdown-CN3hmRTc.js} +1 -1
  27. package/src/assets/web-panel/assets/{EmailListRenderer-BQdGLZIO.js → EmailListRenderer-t0lzxsDT.js} +1 -1
  28. package/src/assets/web-panel/assets/EvolutionSettings-DabpA3cQ.js +1 -0
  29. package/src/assets/web-panel/assets/{FamilyGuardDashboard-c1WVC_--.js → FamilyGuardDashboard-BYN4UshY.js} +1 -1
  30. package/src/assets/web-panel/assets/{Federation-DyAcFrQY.js → Federation-n44OtIXp.js} +1 -1
  31. package/src/assets/web-panel/assets/{FormItemContext-CfwpfD2B.js → FormItemContext-B-WXDu_I.js} +1 -1
  32. package/src/assets/web-panel/assets/{GenericCardRenderer-DkJcbBpS.js → GenericCardRenderer-Bm7v-mTf.js} +1 -1
  33. package/src/assets/web-panel/assets/{Git-DgYIrPJh.js → Git-BMIS6sbo.js} +2 -2
  34. package/src/assets/web-panel/assets/{Governance-BF1tYPJ6.js → Governance-B1EhHobE.js} +1 -1
  35. package/src/assets/web-panel/assets/{Inference-BFkwRIrU.js → Inference-Dy_HJWHo.js} +1 -1
  36. package/src/assets/web-panel/assets/{KnowledgeGraph-DpCoqhBa.js → KnowledgeGraph-BVdfUbZy.js} +1 -1
  37. package/src/assets/web-panel/assets/{Logs-DU2qAJmD.js → Logs-Dph_oLQk.js} +2 -2
  38. package/src/assets/web-panel/assets/MarkdownRenderer-CNHYqcxm.js +1 -0
  39. package/src/assets/web-panel/assets/{Marketplace-Dz9NUrfo.js → Marketplace-Bw4HWORj.js} +1 -1
  40. package/src/assets/web-panel/assets/{McpTools-B67I3d5v.js → McpTools-Be6DPfA1.js} +2 -2
  41. package/src/assets/web-panel/assets/{Memory-crkElJSy.js → Memory-DlvLafC9.js} +2 -2
  42. package/src/assets/web-panel/assets/{MobileBridge-BO20VbdX.js → MobileBridge-Upc_Jwlt.js} +1 -1
  43. package/src/assets/web-panel/assets/{MobileProjects-Ba-3gZZd.js → MobileProjects-I17jrUbY.js} +1 -1
  44. package/src/assets/web-panel/assets/{Mtc-BAHZM084.js → Mtc-DyBzY0GH.js} +2 -2
  45. package/src/assets/web-panel/assets/{MtcAudit-CL3DzajL.js → MtcAudit-2-7xAwEo.js} +2 -2
  46. package/src/assets/web-panel/assets/{Multisig-BSWWzvWH.js → Multisig-DtUZpFmZ.js} +3 -3
  47. package/src/assets/web-panel/assets/{NLProgramming-fnxqXM_3.js → NLProgramming-iInH7jBr.js} +1 -1
  48. package/src/assets/web-panel/assets/{Notes-qUZPIQXT.js → Notes-BO3Z3vaS.js} +3 -3
  49. package/src/assets/web-panel/assets/{NotificationSettings-x9Xrixqu.js → NotificationSettings-ClX_0jFE.js} +1 -1
  50. package/src/assets/web-panel/assets/{OrderTableRenderer-BtMtQUt7.js → OrderTableRenderer-Czw742w4.js} +1 -1
  51. package/src/assets/web-panel/assets/{Organization-C946Hzna.js → Organization-BATEx24i.js} +4 -4
  52. package/src/assets/web-panel/assets/{Overflow-BYf8KIts.js → Overflow-B_PXMNia.js} +1 -1
  53. package/src/assets/web-panel/assets/{P2P-Cbqf5dnv.js → P2P-BSiE8PqT.js} +2 -2
  54. package/src/assets/web-panel/assets/PdhVaultBrowser-BbklUgZY.js +7 -0
  55. package/src/assets/web-panel/assets/{Permissions-CZBw45EW.js → Permissions-B7bpflT_.js} +3 -3
  56. package/src/assets/web-panel/assets/{PersonalDataHub-BKwUAt43.js → PersonalDataHub-BWZS4BLy.js} +4 -4
  57. package/src/assets/web-panel/assets/{Pipeline-DmFD2QW4.js → Pipeline-DP2YSs6H.js} +1 -1
  58. package/src/assets/web-panel/assets/{Privacy-KpuwWvt5.js → Privacy-DB9ptoH0.js} +1 -1
  59. package/src/assets/web-panel/assets/{ProjectInit-Bt8UheX6.js → ProjectInit-BAfePyYk.js} +2 -2
  60. package/src/assets/web-panel/assets/{ProjectSettings-2ZeAn9CP.js → ProjectSettings-BEXn4Cm3.js} +2 -2
  61. package/src/assets/web-panel/assets/{Projects-zBuet8Zs.js → Projects-BzSs0rzn.js} +1 -1
  62. package/src/assets/web-panel/assets/{Providers-DcEAnw6L.js → Providers-CRX9TdRO.js} +1 -1
  63. package/src/assets/web-panel/assets/{QrScannerModal-qF7liYG9.js → QrScannerModal-DUWcSY5L.js} +1 -1
  64. package/src/assets/web-panel/assets/{QuickAsk-qiESlVBJ.js → QuickAsk-Cgo3Z_hs.js} +1 -1
  65. package/src/assets/web-panel/assets/{Recommend-Bk-cQyi9.js → Recommend-Dcinx0IW.js} +1 -1
  66. package/src/assets/web-panel/assets/{RemoteSession-CwrekErS.js → RemoteSession-BMZzTnAN.js} +2 -2
  67. package/src/assets/web-panel/assets/{Reputation-Bmw_UQtW.js → Reputation-BdZzpOp9.js} +1 -1
  68. package/src/assets/web-panel/assets/{Row-CPdqZIUX.js → Row-DqM8GVcx.js} +1 -1
  69. package/src/assets/web-panel/assets/{RssFeed-D_W-xxvS.js → RssFeed-Soj_QBK3.js} +2 -2
  70. package/src/assets/web-panel/assets/{Search-Hu0oDFj_.js → Search-Cn2es0-v.js} +1 -1
  71. package/src/assets/web-panel/assets/{Security-DeRxUwmq.js → Security-t7C4hz3n.js} +4 -4
  72. package/src/assets/web-panel/assets/{Services-CsNmHFkf.js → Services-ChF-e_Uf.js} +2 -2
  73. package/src/assets/web-panel/assets/{Skeleton-gv_Vz0tN.js → Skeleton-BiPIyK-2.js} +1 -1
  74. package/src/assets/web-panel/assets/{Skills-Dgg-_rCB.js → Skills-HgkKJenJ.js} +1 -1
  75. package/src/assets/web-panel/assets/{Sla-Bpu-bsEJ.js → Sla-BSfluv_k.js} +1 -1
  76. package/src/assets/web-panel/assets/{SpeechSettings-CrhleHuF.js → SpeechSettings-Sm0Gz9tM.js} +1 -1
  77. package/src/assets/web-panel/assets/{SyncSettings-JHjUN6I9.js → SyncSettings-DlhBMnfU.js} +2 -2
  78. package/src/assets/web-panel/assets/{Tasks-DKRWKkl9.js → Tasks-C7OUvsnp.js} +1 -1
  79. package/src/assets/web-panel/assets/{Templates-leiWntLq.js → Templates-CrMtw87y.js} +1 -1
  80. package/src/assets/web-panel/assets/{Tenant--1bYulvn.js → Tenant-DSNSB6j5.js} +1 -1
  81. package/src/assets/web-panel/assets/{Terminal-C0y6FvSS.js → Terminal-Cmh78FQg.js} +2 -2
  82. package/src/assets/web-panel/assets/{TimelineRenderer-CQK4PVv4.js → TimelineRenderer-BE8b8lHR.js} +1 -1
  83. package/src/assets/web-panel/assets/{Tokens-DbIvF-DV.js → Tokens-BrtgdIvJ.js} +1 -1
  84. package/src/assets/web-panel/assets/{Trigger-CkXJ2vuq.js → Trigger-HCmaoKDp.js} +1 -1
  85. package/src/assets/web-panel/assets/{Trust-B02WXJPw.js → Trust-GASQ4F-2.js} +1 -1
  86. package/src/assets/web-panel/assets/{UkeySign-VPMkfzmw.js → UkeySign-B8kSzWGr.js} +1 -1
  87. package/src/assets/web-panel/assets/{VideoEditing-C5ezUnah.js → VideoEditing-Nn-clhv5.js} +1 -1
  88. package/src/assets/web-panel/assets/{Wallet-CYfvYRrY.js → Wallet-DdYMKTYk.js} +4 -4
  89. package/src/assets/web-panel/assets/{WebAuthn-DtKl-kpr.js → WebAuthn-xJXUr_eK.js} +4 -4
  90. package/src/assets/web-panel/assets/{WorkflowEditor-DACITF-u.js → WorkflowEditor-CbSa87av.js} +1 -1
  91. package/src/assets/web-panel/assets/{chat-qnygfnLi.js → chat-CVrNLGUV.js} +1 -1
  92. package/src/assets/web-panel/assets/{colors-D4mISLBD.js → colors-e2veLfIA.js} +1 -1
  93. package/src/assets/web-panel/assets/{compact-item-BBPfxYGL.js → compact-item-CNd7nhUq.js} +1 -1
  94. package/src/assets/web-panel/assets/{createContext-Byx4ndHp.js → createContext-DEudTVqv.js} +1 -1
  95. package/src/assets/web-panel/assets/devWarning-DW7he-SA.js +1 -0
  96. package/src/assets/web-panel/assets/{hasIn-CGjLkkn3.js → hasIn-BlSAFZa3.js} +1 -1
  97. package/src/assets/web-panel/assets/{index-B8UpadHC.js → index-0y7tHZdT.js} +1 -1
  98. package/src/assets/web-panel/assets/{index-B9jH-h4X.js → index-4ZT0vIJt.js} +1 -1
  99. package/src/assets/web-panel/assets/{index-DboTeuPF.js → index-7-7rr4Mf.js} +1 -1
  100. package/src/assets/web-panel/assets/{index-BxQF1wCU.js → index-B1C1wS5c.js} +1 -1
  101. package/src/assets/web-panel/assets/{index-Dzni_5Qw.js → index-BG-VNepa.js} +1 -1
  102. package/src/assets/web-panel/assets/{index-BNe2lCk6.js → index-BMIhGZUR.js} +1 -1
  103. package/src/assets/web-panel/assets/{index-CFMWjuav.js → index-BRNCKg4q.js} +1 -1
  104. package/src/assets/web-panel/assets/{index-BN7_TSgU.js → index-B_UNX_xq.js} +1 -1
  105. package/src/assets/web-panel/assets/{index-Dmfe0L2Z.js → index-BmVFeSEq.js} +1 -1
  106. package/src/assets/web-panel/assets/{index-D_g9mA1N.js → index-Bp4Gcn9u.js} +1 -1
  107. package/src/assets/web-panel/assets/{index-CZjNamSU.js → index-BpH6T1gA.js} +1 -1
  108. package/src/assets/web-panel/assets/{index-BklGH3YI.js → index-BptI9bLu.js} +1 -1
  109. package/src/assets/web-panel/assets/{index-xzRKTy0R.js → index-Bqeb4jnC.js} +1 -1
  110. package/src/assets/web-panel/assets/{index-Y7el_3WS.js → index-Bwtt-0CQ.js} +1 -1
  111. package/src/assets/web-panel/assets/{index-ByA1NyFP.js → index-C4h_Bvd2.js} +1 -1
  112. package/src/assets/web-panel/assets/{index-CsVuQsY1.js → index-C6zGNZ5H.js} +1 -1
  113. package/src/assets/web-panel/assets/{index-CMj8qmpX.js → index-CHMrAZiR.js} +1 -1
  114. package/src/assets/web-panel/assets/{index-CVUJjQAT.js → index-CK6Rb66R.js} +1 -1
  115. package/src/assets/web-panel/assets/{index-CWhI8G14.js → index-CU4Y4VVN.js} +1 -1
  116. package/src/assets/web-panel/assets/{index-C3abGsSW.js → index-CWuv47z0.js} +1 -1
  117. package/src/assets/web-panel/assets/{index-J5JkStvY.js → index-CYNoXhxl.js} +1 -1
  118. package/src/assets/web-panel/assets/{index-C9tcHs46.js → index-CgVwz2jD.js} +1 -1
  119. package/src/assets/web-panel/assets/{index-lKJWAmd4.js → index-ClROBPWd.js} +1 -1
  120. package/src/assets/web-panel/assets/{index-O09jXbir.js → index-D7yJceTZ.js} +1 -1
  121. package/src/assets/web-panel/assets/{index-c_tBkIlU.js → index-DFv-nsIT.js} +1 -1
  122. package/src/assets/web-panel/assets/{index-B_fHPZ8E.js → index-DFzvcZ3Q.js} +1 -1
  123. package/src/assets/web-panel/assets/{index-CydHMjwc.js → index-DJ5gsewX.js} +1 -1
  124. package/src/assets/web-panel/assets/{index-CoA8WsVr.js → index-DVORJydf.js} +1 -1
  125. package/src/assets/web-panel/assets/{index-BmKYaaGP.js → index-D_D7lcnQ.js} +1 -1
  126. package/src/assets/web-panel/assets/{index-BzeBBAl5.js → index-DtrqgNBl.js} +1 -1
  127. package/src/assets/web-panel/assets/{index-DH6iC5b2.js → index-DwjWRUTf.js} +1 -1
  128. package/src/assets/web-panel/assets/{index-CD5Btq6p.js → index-DyFZ7gDd.js} +1 -1
  129. package/src/assets/web-panel/assets/{index-DfgpKd64.js → index-Ec6VBiV-.js} +1 -1
  130. package/src/assets/web-panel/assets/index-IkoHuWRe.js +1 -0
  131. package/src/assets/web-panel/assets/{index-Ne8UGllV.js → index-Jk99aZIr.js} +3 -3
  132. package/src/assets/web-panel/assets/{index-DZXhKAk9.js → index-Lm9pm1zm.js} +1 -1
  133. package/src/assets/web-panel/assets/{index-CmHE-lY_.js → index-MuTb62K6.js} +1 -1
  134. package/src/assets/web-panel/assets/index-MwqsDbb1.js +1 -0
  135. package/src/assets/web-panel/assets/{index-Cpg3AWRy.js → index-hzUfIn4u.js} +1 -1
  136. package/src/assets/web-panel/assets/{initDefaultProps-XuhfEIhB.js → initDefaultProps-C6fpNcA5.js} +1 -1
  137. package/src/assets/web-panel/assets/{motion-Cbxh6AxO.js → motion-Bjh9Come.js} +1 -1
  138. package/src/assets/web-panel/assets/{move-C7IEnFly.js → move-DFa4ul-_.js} +1 -1
  139. package/src/assets/web-panel/assets/{mtc-parser-lLADx4LL.js → mtc-parser-KoYqA_e5.js} +1 -1
  140. package/src/assets/web-panel/assets/{omit-mIbic_k-.js → omit-ByTjP-wG.js} +1 -1
  141. package/src/assets/web-panel/assets/{pickAttrs-_xIYEqu3.js → pickAttrs-CG_rmTxx.js} +1 -1
  142. package/src/assets/web-panel/assets/{placementArrow-ClB-E0ny.js → placementArrow-LDePZ8V9.js} +1 -1
  143. package/src/assets/web-panel/assets/{responsiveObserve-D36Bg2ut.js → responsiveObserve-DZFzH4RR.js} +1 -1
  144. package/src/assets/web-panel/assets/{slide-CUuO08Bl.js → slide-DfXQyTvD.js} +1 -1
  145. package/src/assets/web-panel/assets/{statusUtils-BKahwLbv.js → statusUtils-CuhqsJfO.js} +1 -1
  146. package/src/assets/web-panel/assets/{styleChecker-2pT-T8vy.js → styleChecker-qqVjJw5u.js} +1 -1
  147. package/src/assets/web-panel/assets/{useFlexGapSupport-DyH5g7Rg.js → useFlexGapSupport-BPxnCxcb.js} +1 -1
  148. package/src/assets/web-panel/assets/{useFs-CTOauB3X.js → useFs-D11NLCjV.js} +1 -1
  149. package/src/assets/web-panel/assets/{usePersonalDataHub-B02JYIMe.js → usePersonalDataHub-HbZVcaCX.js} +1 -1
  150. package/src/assets/web-panel/assets/{vnode-Do22wQrc.js → vnode-CZHQlfTu.js} +1 -1
  151. package/src/assets/web-panel/assets/{zoom-BfnL7rit.js → zoom-CV3rUknJ.js} +1 -1
  152. package/src/assets/web-panel/index.html +1 -1
  153. package/src/commands/context.js +31 -11
  154. package/src/commands/evolution-deployment.js +70 -0
  155. package/src/data/changelog.json +65 -0
  156. package/src/gateways/ws/evolution-deployment-topic-handlers.js +20 -0
  157. package/src/harness/prompt-compressor.js +12 -4
  158. package/src/lib/evolution/evolution-deployment-config.js +16 -1
  159. package/src/lib/evolution/evolution-deployment-profile.js +102 -58
  160. package/src/lib/evolution/evolution-test-deployment.js +386 -0
  161. package/src/lib/model-context-window.js +3 -2
  162. package/src/lib/runtime-usage-ledger.js +5 -0
  163. package/src/repl/agent-repl.js +19 -4
  164. package/src/runtime/agent-core.js +13 -0
  165. package/src/runtime/headless-runner.js +4 -0
  166. package/src/runtime/headless-stream.js +9 -1
  167. package/src/assets/web-panel/assets/EvolutionSettings-bMvgBk6r.js +0 -1
  168. package/src/assets/web-panel/assets/MarkdownRenderer-QWv7UJLq.js +0 -1
  169. package/src/assets/web-panel/assets/PdhVaultBrowser-rmxp0cuF.js +0 -7
  170. package/src/assets/web-panel/assets/devWarning-DBy6gsuI.js +0 -1
  171. package/src/assets/web-panel/assets/index-BfEDXk_E.js +0 -1
  172. package/src/assets/web-panel/assets/index-CrxUwNM8.js +0 -1
@@ -1,6 +1,71 @@
1
1
  {
2
2
  "source": "CHANGELOG.md",
3
3
  "releases": [
4
+ {
5
+ "productVersion": null,
6
+ "cliVersion": "0.166.56",
7
+ "cliVersions": ["0.166.56"],
8
+ "date": null,
9
+ "title": "",
10
+ "sections": [
11
+ {
12
+ "heading": "Fixed - cc CLI 0.166.56: stabilize the OIDC release gates",
13
+ "body": "- Keep the root lockfile's CLI package version aligned with the publishable CLI\n package so the cross-platform release contract remains valid.\n- Allow the REPL host's module-isolation failure test enough time on saturated\n hosted runners without relaxing any failure-path assertion."
14
+ }
15
+ ]
16
+ },
17
+ {
18
+ "productVersion": null,
19
+ "cliVersion": "0.166.54",
20
+ "cliVersions": ["0.166.54"],
21
+ "date": null,
22
+ "title": "",
23
+ "sections": [
24
+ {
25
+ "heading": "Fixed - cc CLI 0.166.54: canonicalize TEST deployment paths on macOS",
26
+ "body": "- Resolve generated credential directories and saved credential files to their\n physical paths so macOS `/var` and `/private/var` aliases do not break TEST\n deployment refresh or formal-certificate replacement.\n- Keep deployment profile path assertions portable while preserving real-path\n verification before any private key is reused."
27
+ }
28
+ ]
29
+ },
30
+ {
31
+ "productVersion": null,
32
+ "cliVersion": "0.166.53",
33
+ "cliVersions": ["0.166.53"],
34
+ "date": null,
35
+ "title": "",
36
+ "sections": [
37
+ {
38
+ "heading": "Added - cc CLI 0.166.53: one-click TEST deployment for governed Skill evolution",
39
+ "body": "- Add `cc evolution deployment init-test` to generate a local Ed25519 test key,\n sign the deployment descriptor, and enable it through the normal descriptor\n verification and profile write path, without OpenSSL or bypassing governance.\n- Add `cc evolution deployment replace-test` to rotate a test deployment into the\n formal descriptor and trust root using a constrained root-rotation proof.\n- Keep `deploymentMode: test` and the red TEST badge visible in status and UI;\n `init-test` refuses to overwrite an existing managed profile or to run while\n `CHAINLESSCHAIN_EVOLUTION_DEPLOYMENT_*` environment overrides are present.\n- Surface the same one-click generate/refresh and replace flows in the VS Code\n and JetBrains Configure Skill Evolution views and in `cc ui` settings."
40
+ }
41
+ ]
42
+ },
43
+ {
44
+ "productVersion": null,
45
+ "cliVersion": "0.166.52",
46
+ "cliVersions": ["0.166.52"],
47
+ "date": null,
48
+ "title": "",
49
+ "sections": [
50
+ {
51
+ "heading": "Fixed - cc CLI 0.166.52: wait for authoritative release gates",
52
+ "body": "- Give the exact-SHA npm release gate enough time for the full Linux, Windows,\n and macOS CLI matrix to finish when hosted runners are queued.\n- Prevent IDE release tags from scheduling a redundant CLI CI matrix for the\n same commit, preserving runner capacity for the authoritative release gate."
53
+ }
54
+ ]
55
+ },
56
+ {
57
+ "productVersion": null,
58
+ "cliVersion": "0.166.51",
59
+ "cliVersions": ["0.166.51"],
60
+ "date": null,
61
+ "title": "",
62
+ "sections": [
63
+ {
64
+ "heading": "Fixed - cc CLI 0.166.51: report the active model context accurately",
65
+ "body": "- Resolve the context window from the exact provider, endpoint, and explicit\n override used for a request, so the planner, auto-compactor, session report,\n REPL, and IDE panel share one capacity value.\n- Keep large-window conversations under a token budget rather than compacting\n solely after 50 short messages; retain the count guard for smaller windows.\n- Carry the main model request's context window and cache counters through the\n stream and session ledger, excluding sub-agent and compaction requests from\n the primary context indicator.\n- Label transcript-derived context figures as estimates and retain cache-read\n and cache-write usage in the completed chat status.\n- Keep semantic-compaction boundary fixtures explicit about their bounded\n synthetic request window, so they continue to verify compaction settlement\n rather than inheriting a provider default."
66
+ }
67
+ ]
68
+ },
4
69
  {
5
70
  "productVersion": null,
6
71
  "cliVersion": "0.166.48",
@@ -3,6 +3,10 @@ import {
3
3
  getEvolutionDeploymentStatus,
4
4
  setEvolutionDeploymentEnabled,
5
5
  } from "../../lib/evolution/evolution-deployment-config.js";
6
+ import {
7
+ initializeEvolutionTestDeployment,
8
+ replaceEvolutionTestDeployment,
9
+ } from "../../lib/evolution/evolution-test-deployment.js";
6
10
 
7
11
  function assertSecureControl(context) {
8
12
  const server = context?.server;
@@ -30,6 +34,8 @@ export function createEvolutionDeploymentTopicHandlers(options = {}) {
30
34
  const getStatus = options.getStatus || getEvolutionDeploymentStatus;
31
35
  const configure = options.configure || configureEvolutionDeployment;
32
36
  const setEnabled = options.setEnabled || setEvolutionDeploymentEnabled;
37
+ const initTest = options.initTest || initializeEvolutionTestDeployment;
38
+ const replaceTest = options.replaceTest || replaceEvolutionTestDeployment;
33
39
  return {
34
40
  "evolution.deployment.status": async (_frame, context) => {
35
41
  assertSecureControl(context);
@@ -43,6 +49,20 @@ export function createEvolutionDeploymentTopicHandlers(options = {}) {
43
49
  enabled: true,
44
50
  });
45
51
  },
52
+ "evolution.deployment.init-test": async (frame, context) => {
53
+ assertSecureControl(context);
54
+ return initTest({
55
+ modulePath: requiredPath(frame?.modulePath, "modulePath"),
56
+ enabled: true,
57
+ });
58
+ },
59
+ "evolution.deployment.replace-test": async (frame, context) => {
60
+ assertSecureControl(context);
61
+ return replaceTest({
62
+ descriptorPath: requiredPath(frame?.descriptorPath, "descriptorPath"),
63
+ trustRootPath: requiredPath(frame?.trustRootPath, "trustRootPath"),
64
+ });
65
+ },
46
66
  "evolution.deployment.set-enabled": async (frame, context) => {
47
67
  assertSecureControl(context);
48
68
  if (typeof frame?.enabled !== "boolean")
@@ -315,7 +315,11 @@ export class PromptCompressor {
315
315
  !options.maxMessages &&
316
316
  !options.maxTokens
317
317
  ) {
318
- const ctxWindow = getContextWindow(options.model, options.provider);
318
+ const ctxWindow = getContextWindow(
319
+ options.model,
320
+ options.provider,
321
+ options,
322
+ );
319
323
  const adaptive = adaptiveThresholds(ctxWindow);
320
324
  this.maxMessages = adaptive.maxMessages;
321
325
  this.maxTokens = adaptive.maxTokens;
@@ -337,8 +341,8 @@ export class PromptCompressor {
337
341
  );
338
342
  }
339
343
 
340
- adaptToModel(model, provider) {
341
- const ctxWindow = getContextWindow(model, provider);
344
+ adaptToModel(model, provider, options = {}) {
345
+ const ctxWindow = getContextWindow(model, provider, options);
342
346
  const adaptive = adaptiveThresholds(ctxWindow);
343
347
  this.maxMessages = adaptive.maxMessages;
344
348
  this.maxTokens = adaptive.maxTokens;
@@ -483,8 +487,12 @@ export class PromptCompressor {
483
487
  }
484
488
 
485
489
  shouldAutoCompact(messages) {
490
+ // Large adaptive windows use token pressure, not an arbitrary 50-message
491
+ // trigger. Small local models and explicit fixed limits retain their
492
+ // count-based policy; maxMessages remains a compaction target in all modes.
486
493
  return (
487
- messages.length > this.maxMessages ||
494
+ ((!this._adaptive || this._contextWindow < 128000) &&
495
+ messages.length > this.maxMessages) ||
488
496
  estimateMessagesTokens(messages) > this.maxTokens
489
497
  );
490
498
  }
@@ -80,7 +80,7 @@ export function assessEvolutionDeploymentReadiness(
80
80
  : "no enabled signed Evolution deployment",
81
81
  disabled
82
82
  ? "review the saved signed deployment, then run cc evolution deployment enable"
83
- : "configure a signed descriptor and trust root with cc evolution deployment configure --descriptor <path> --trust-root <path>",
83
+ : "before production, run cc evolution deployment init-test --module <absolute-path>; otherwise configure a signed descriptor and trust root",
84
84
  );
85
85
  }
86
86
  if (missingCommands.length > 0) {
@@ -126,6 +126,10 @@ export async function getEvolutionDeploymentStatus(options = {}) {
126
126
  fromEnvironment || (saved.profile?.enabled ? saved.profile : null);
127
127
  const base = {
128
128
  source,
129
+ deploymentMode:
130
+ source === "environment"
131
+ ? "external"
132
+ : saved.profile?.deploymentMode || "none",
129
133
  effectiveEnabled: source !== "none",
130
134
  profileEnabled: saved.profile?.enabled === true,
131
135
  profilePath: saved.filePath,
@@ -183,6 +187,8 @@ export async function configureEvolutionDeployment(
183
187
  rootRotationPath = null,
184
188
  revocationPath = null,
185
189
  enabled = true,
190
+ deploymentMode,
191
+ testPrivateKeyPath,
186
192
  },
187
193
  options = {},
188
194
  ) {
@@ -239,6 +245,11 @@ export async function configureEvolutionDeployment(
239
245
  verified.descriptor.revision,
240
246
  ),
241
247
  };
248
+ const preserveTestMode =
249
+ deploymentMode === undefined &&
250
+ current?.deploymentMode === "test" &&
251
+ current.descriptorPath === verified.descriptorPath &&
252
+ current.trustRootPath === verified.trustRootPath;
242
253
  return {
243
254
  enabled: enabled === true,
244
255
  descriptorPath: verified.descriptorPath,
@@ -246,6 +257,10 @@ export async function configureEvolutionDeployment(
246
257
  revisionFloors,
247
258
  activeTrustRootDigest: verified.descriptor.trustRootDigest,
248
259
  revokedDescriptorRevisions,
260
+ deploymentMode: preserveTestMode ? "test" : deploymentMode || "managed",
261
+ testPrivateKeyPath: preserveTestMode
262
+ ? current.testPrivateKeyPath
263
+ : testPrivateKeyPath || null,
249
264
  };
250
265
  }, options);
251
266
  return getEvolutionDeploymentStatus(options);
@@ -1,11 +1,6 @@
1
1
  import { randomUUID } from "node:crypto";
2
2
  import { readFile } from "node:fs/promises";
3
- import {
4
- readFileSync,
5
- renameSync,
6
- unlinkSync,
7
- writeFileSync,
8
- } from "node:fs";
3
+ import { readFileSync, renameSync, unlinkSync, writeFileSync } from "node:fs";
9
4
  import { dirname, isAbsolute, join } from "node:path";
10
5
  import { resolveConfigDataRoot } from "../paths.js";
11
6
  import {
@@ -16,7 +11,7 @@ import {
16
11
  import { withFileLock } from "../with-file-lock.js";
17
12
 
18
13
  export const EVOLUTION_DEPLOYMENT_PROFILE_SCHEMA =
19
- "chainlesschain.evolution-deployment-profile/v4";
14
+ "chainlesschain.evolution-deployment-profile/v5";
20
15
 
21
16
  const LEGACY_EVOLUTION_DEPLOYMENT_PROFILE_SCHEMA =
22
17
  "chainlesschain.evolution-deployment-profile/v1";
@@ -24,6 +19,8 @@ const PREVIOUS_EVOLUTION_DEPLOYMENT_PROFILE_SCHEMA =
24
19
  "chainlesschain.evolution-deployment-profile/v2";
25
20
  const PRIOR_EVOLUTION_DEPLOYMENT_PROFILE_SCHEMA =
26
21
  "chainlesschain.evolution-deployment-profile/v3";
22
+ const LAST_EVOLUTION_DEPLOYMENT_PROFILE_SCHEMA =
23
+ "chainlesschain.evolution-deployment-profile/v4";
27
24
  const DIGEST = /^sha256:[a-f0-9]{64}$/u;
28
25
  const MAX_TRUST_ROOT_REVISION_FLOORS = 64;
29
26
 
@@ -47,6 +44,8 @@ function normalizeProfile(value) {
47
44
  PREVIOUS_EVOLUTION_DEPLOYMENT_PROFILE_SCHEMA,
48
45
  PRIOR_EVOLUTION_DEPLOYMENT_PROFILE_SCHEMA,
49
46
  ].includes(value.schema);
47
+ const beforeDeploymentMode =
48
+ legacy || value.schema === LAST_EVOLUTION_DEPLOYMENT_PROFILE_SCHEMA;
50
49
  const expected =
51
50
  value.schema === LEGACY_EVOLUTION_DEPLOYMENT_PROFILE_SCHEMA
52
51
  ? ["descriptorPath", "enabled", "schema", "trustRootPath"]
@@ -58,31 +57,44 @@ function normalizeProfile(value) {
58
57
  "schema",
59
58
  "trustRootPath",
60
59
  ]
61
- : value.schema === PRIOR_EVOLUTION_DEPLOYMENT_PROFILE_SCHEMA
62
- ? [
63
- "activeTrustRootDigest",
64
- "descriptorPath",
65
- "enabled",
66
- "revisionFloors",
67
- "schema",
68
- "trustRootPath",
69
- ]
70
- : [
71
- "activeTrustRootDigest",
72
- "descriptorPath",
73
- "enabled",
74
- "revisionFloors",
75
- "revokedDescriptorRevisions",
76
- "schema",
77
- "trustRootPath",
78
- ];
60
+ : value.schema === PRIOR_EVOLUTION_DEPLOYMENT_PROFILE_SCHEMA
61
+ ? [
62
+ "activeTrustRootDigest",
63
+ "descriptorPath",
64
+ "enabled",
65
+ "revisionFloors",
66
+ "schema",
67
+ "trustRootPath",
68
+ ]
69
+ : value.schema === LAST_EVOLUTION_DEPLOYMENT_PROFILE_SCHEMA
70
+ ? [
71
+ "activeTrustRootDigest",
72
+ "descriptorPath",
73
+ "enabled",
74
+ "revisionFloors",
75
+ "revokedDescriptorRevisions",
76
+ "schema",
77
+ "trustRootPath",
78
+ ]
79
+ : [
80
+ "activeTrustRootDigest",
81
+ "deploymentMode",
82
+ "descriptorPath",
83
+ "enabled",
84
+ "revisionFloors",
85
+ "revokedDescriptorRevisions",
86
+ "schema",
87
+ "testPrivateKeyPath",
88
+ "trustRootPath",
89
+ ];
79
90
  if (JSON.stringify(keys) !== JSON.stringify(expected.sort()))
80
91
  throw new TypeError("evolution deployment profile has unexpected fields");
81
92
  if (
82
93
  value.schema !== EVOLUTION_DEPLOYMENT_PROFILE_SCHEMA &&
83
94
  value.schema !== LEGACY_EVOLUTION_DEPLOYMENT_PROFILE_SCHEMA &&
84
95
  value.schema !== PREVIOUS_EVOLUTION_DEPLOYMENT_PROFILE_SCHEMA &&
85
- value.schema !== PRIOR_EVOLUTION_DEPLOYMENT_PROFILE_SCHEMA
96
+ value.schema !== PRIOR_EVOLUTION_DEPLOYMENT_PROFILE_SCHEMA &&
97
+ value.schema !== LAST_EVOLUTION_DEPLOYMENT_PROFILE_SCHEMA
86
98
  )
87
99
  throw new TypeError("evolution deployment profile schema is invalid");
88
100
  if (typeof value.enabled !== "boolean")
@@ -103,10 +115,30 @@ function normalizeProfile(value) {
103
115
  const activeTrustRootDigest = legacy
104
116
  ? null
105
117
  : normalizeTrustRootDigest(value.activeTrustRootDigest);
106
- const revokedDescriptorRevisions =
107
- value.schema === EVOLUTION_DEPLOYMENT_PROFILE_SCHEMA
108
- ? normalizeRevokedDescriptorRevisions(value.revokedDescriptorRevisions)
109
- : {};
118
+ const revokedDescriptorRevisions = [
119
+ EVOLUTION_DEPLOYMENT_PROFILE_SCHEMA,
120
+ LAST_EVOLUTION_DEPLOYMENT_PROFILE_SCHEMA,
121
+ ].includes(value.schema)
122
+ ? normalizeRevokedDescriptorRevisions(value.revokedDescriptorRevisions)
123
+ : {};
124
+ const deploymentMode = beforeDeploymentMode
125
+ ? "managed"
126
+ : value.deploymentMode;
127
+ if (!["managed", "test"].includes(deploymentMode))
128
+ throw new TypeError("evolution deployment profile mode is invalid");
129
+ const testPrivateKeyPath = beforeDeploymentMode
130
+ ? null
131
+ : value.testPrivateKeyPath;
132
+ if (
133
+ (deploymentMode === "test" &&
134
+ (typeof testPrivateKeyPath !== "string" ||
135
+ !isAbsolute(testPrivateKeyPath))) ||
136
+ (deploymentMode === "managed" && testPrivateKeyPath !== null)
137
+ ) {
138
+ throw new TypeError(
139
+ "evolution deployment profile test private key path is invalid",
140
+ );
141
+ }
110
142
  return Object.freeze({
111
143
  schema: EVOLUTION_DEPLOYMENT_PROFILE_SCHEMA,
112
144
  enabled: value.enabled,
@@ -115,6 +147,8 @@ function normalizeProfile(value) {
115
147
  revisionFloors,
116
148
  activeTrustRootDigest,
117
149
  revokedDescriptorRevisions,
150
+ deploymentMode,
151
+ testPrivateKeyPath,
118
152
  });
119
153
  }
120
154
 
@@ -156,12 +190,16 @@ function normalizeTrustRootDigest(value) {
156
190
 
157
191
  function normalizeRevisionFloors(value) {
158
192
  if (!value || typeof value !== "object" || Array.isArray(value))
159
- throw new TypeError("evolution deployment profile revisionFloors is invalid");
193
+ throw new TypeError(
194
+ "evolution deployment profile revisionFloors is invalid",
195
+ );
160
196
  const entries = Object.entries(value).sort(([left], [right]) =>
161
197
  left.localeCompare(right),
162
198
  );
163
199
  if (entries.length > MAX_TRUST_ROOT_REVISION_FLOORS)
164
- throw new TypeError("evolution deployment profile revisionFloors is too large");
200
+ throw new TypeError(
201
+ "evolution deployment profile revisionFloors is too large",
202
+ );
165
203
  for (const [trustRootDigest, revision] of entries) {
166
204
  if (!DIGEST.test(trustRootDigest))
167
205
  throw new TypeError(
@@ -228,6 +266,8 @@ function profileFromInput(input) {
228
266
  revisionFloors: input?.revisionFloors || {},
229
267
  activeTrustRootDigest: input?.activeTrustRootDigest,
230
268
  revokedDescriptorRevisions: input?.revokedDescriptorRevisions || {},
269
+ deploymentMode: input?.deploymentMode || "managed",
270
+ testPrivateKeyPath: input?.testPrivateKeyPath || null,
231
271
  });
232
272
  }
233
273
 
@@ -251,29 +291,34 @@ export async function readEvolutionDeploymentProfile(options = {}) {
251
291
 
252
292
  export async function writeEvolutionDeploymentProfile(input, options = {}) {
253
293
  const proposed = profileFromInput(input);
254
- return updateEvolutionDeploymentProfile((current) => ({
255
- ...proposed,
256
- // This lower-level writer cannot authenticate a descriptor, so it never
257
- // lowers or erases a floor established by configureEvolutionDeployment().
258
- revisionFloors: Object.fromEntries(
259
- Object.keys({
260
- ...(current?.revisionFloors || {}),
261
- ...proposed.revisionFloors,
262
- }).map((trustRootDigest) => [
263
- trustRootDigest,
264
- Math.max(
265
- current?.revisionFloors?.[trustRootDigest] || 0,
266
- proposed.revisionFloors[trustRootDigest] || 0,
267
- ),
268
- ]),
269
- ),
270
- activeTrustRootDigest:
271
- proposed.activeTrustRootDigest || current?.activeTrustRootDigest,
272
- revokedDescriptorRevisions: {
273
- ...(current?.revokedDescriptorRevisions || {}),
274
- ...(proposed.revokedDescriptorRevisions || {}),
275
- },
276
- }), options);
294
+ return updateEvolutionDeploymentProfile(
295
+ (current) => ({
296
+ ...proposed,
297
+ // This lower-level writer cannot authenticate a descriptor, so it never
298
+ // lowers or erases a floor established by configureEvolutionDeployment().
299
+ revisionFloors: Object.fromEntries(
300
+ Object.keys({
301
+ ...(current?.revisionFloors || {}),
302
+ ...proposed.revisionFloors,
303
+ }).map((trustRootDigest) => [
304
+ trustRootDigest,
305
+ Math.max(
306
+ current?.revisionFloors?.[trustRootDigest] || 0,
307
+ proposed.revisionFloors[trustRootDigest] || 0,
308
+ ),
309
+ ]),
310
+ ),
311
+ activeTrustRootDigest:
312
+ proposed.activeTrustRootDigest || current?.activeTrustRootDigest,
313
+ revokedDescriptorRevisions: {
314
+ ...(current?.revokedDescriptorRevisions || {}),
315
+ ...(proposed.revokedDescriptorRevisions || {}),
316
+ },
317
+ deploymentMode: proposed.deploymentMode,
318
+ testPrivateKeyPath: proposed.testPrivateKeyPath,
319
+ }),
320
+ options,
321
+ );
277
322
  }
278
323
 
279
324
  /**
@@ -335,9 +380,8 @@ export function assertEvolutionDeploymentDescriptorNotRevoked(
335
380
  profile,
336
381
  descriptor,
337
382
  ) {
338
- const revoked = profile?.revokedDescriptorRevisions?.[
339
- descriptor?.trustRootDigest
340
- ];
383
+ const revoked =
384
+ profile?.revokedDescriptorRevisions?.[descriptor?.trustRootDigest];
341
385
  if (!revoked?.includes(descriptor?.revision)) return;
342
386
  const error = new Error(
343
387
  `evolution deployment descriptor revision ${descriptor.revision} is revoked`,