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.
- package/README.md +22 -0
- package/package.json +1 -1
- package/src/assets/web-panel/.build-hash +1 -1
- package/src/assets/web-panel/assets/{AIOps-BLGEffkh.js → AIOps-CBFnwYRX.js} +1 -1
- package/src/assets/web-panel/assets/{ActionButton-Cz1z2VGD.js → ActionButton-Sl4eXWpR.js} +1 -1
- package/src/assets/web-panel/assets/{Analytics-C3j9cf6q.js → Analytics-DB0lD9Kb.js} +3 -3
- package/src/assets/web-panel/assets/{AppLayout-BR9ERuCA.js → AppLayout-j77EmkRK.js} +3 -3
- package/src/assets/web-panel/assets/{Artifacts-CozJCm4y.js → Artifacts-CU3izCW9.js} +1 -1
- package/src/assets/web-panel/assets/{Audit-DC5g9Ra2.js → Audit-C44fSibb.js} +1 -1
- package/src/assets/web-panel/assets/{BackgroundAgents-B1zrQ0dW.js → BackgroundAgents-pM_NnJW3.js} +1 -1
- package/src/assets/web-panel/assets/{Backup-ChVnfjpm.js → Backup-AOHXqhxN.js} +1 -1
- package/src/assets/web-panel/assets/{BaseInput-8_vLQsLf.js → BaseInput-DaYc8oA_.js} +1 -1
- package/src/assets/web-panel/assets/{Chat-Dct9bm6L.js → Chat-CmlCAXxW.js} +5 -5
- package/src/assets/web-panel/assets/{ChatBubbleRenderer-BvoSsCKh.js → ChatBubbleRenderer-CkCSkJDJ.js} +1 -1
- package/src/assets/web-panel/assets/{Checkbox-DZQIsCIC.js → Checkbox-DISI7iaA.js} +1 -1
- package/src/assets/web-panel/assets/{Codegen-CdzHxmnq.js → Codegen-BYpeKUpf.js} +1 -1
- package/src/assets/web-panel/assets/{Col-DdAN8LeW.js → Col-Dk6VwWGq.js} +1 -1
- package/src/assets/web-panel/assets/{Community-CNgjT9MA.js → Community-BDyTedMu.js} +1 -1
- package/src/assets/web-panel/assets/{Compact-BtQiX6G-.js → Compact-CTNlGM9X.js} +1 -1
- package/src/assets/web-panel/assets/{Compliance-OGX5ma3j.js → Compliance-C_tw3IdT.js} +1 -1
- package/src/assets/web-panel/assets/{Cowork-CgugQnGM.js → Cowork-cduHWEmo.js} +3 -3
- package/src/assets/web-panel/assets/{Cron-Bpg7cPFD.js → Cron-Dqotjv-s.js} +2 -2
- package/src/assets/web-panel/assets/{Crosschain-D1hsuswf.js → Crosschain-ByW7RsJQ.js} +1 -1
- package/src/assets/web-panel/assets/{DID-miDRsMBw.js → DID-BI-lafPj.js} +2 -2
- package/src/assets/web-panel/assets/{Dashboard-CGcl8htP.js → Dashboard-8m50TRZL.js} +2 -2
- package/src/assets/web-panel/assets/{Dropdown-BFaxTdVE.js → Dropdown-CN3hmRTc.js} +1 -1
- package/src/assets/web-panel/assets/{EmailListRenderer-BQdGLZIO.js → EmailListRenderer-t0lzxsDT.js} +1 -1
- package/src/assets/web-panel/assets/EvolutionSettings-DabpA3cQ.js +1 -0
- package/src/assets/web-panel/assets/{FamilyGuardDashboard-c1WVC_--.js → FamilyGuardDashboard-BYN4UshY.js} +1 -1
- package/src/assets/web-panel/assets/{Federation-DyAcFrQY.js → Federation-n44OtIXp.js} +1 -1
- package/src/assets/web-panel/assets/{FormItemContext-CfwpfD2B.js → FormItemContext-B-WXDu_I.js} +1 -1
- package/src/assets/web-panel/assets/{GenericCardRenderer-DkJcbBpS.js → GenericCardRenderer-Bm7v-mTf.js} +1 -1
- package/src/assets/web-panel/assets/{Git-DgYIrPJh.js → Git-BMIS6sbo.js} +2 -2
- package/src/assets/web-panel/assets/{Governance-BF1tYPJ6.js → Governance-B1EhHobE.js} +1 -1
- package/src/assets/web-panel/assets/{Inference-BFkwRIrU.js → Inference-Dy_HJWHo.js} +1 -1
- package/src/assets/web-panel/assets/{KnowledgeGraph-DpCoqhBa.js → KnowledgeGraph-BVdfUbZy.js} +1 -1
- package/src/assets/web-panel/assets/{Logs-DU2qAJmD.js → Logs-Dph_oLQk.js} +2 -2
- package/src/assets/web-panel/assets/MarkdownRenderer-CNHYqcxm.js +1 -0
- package/src/assets/web-panel/assets/{Marketplace-Dz9NUrfo.js → Marketplace-Bw4HWORj.js} +1 -1
- package/src/assets/web-panel/assets/{McpTools-B67I3d5v.js → McpTools-Be6DPfA1.js} +2 -2
- package/src/assets/web-panel/assets/{Memory-crkElJSy.js → Memory-DlvLafC9.js} +2 -2
- package/src/assets/web-panel/assets/{MobileBridge-BO20VbdX.js → MobileBridge-Upc_Jwlt.js} +1 -1
- package/src/assets/web-panel/assets/{MobileProjects-Ba-3gZZd.js → MobileProjects-I17jrUbY.js} +1 -1
- package/src/assets/web-panel/assets/{Mtc-BAHZM084.js → Mtc-DyBzY0GH.js} +2 -2
- package/src/assets/web-panel/assets/{MtcAudit-CL3DzajL.js → MtcAudit-2-7xAwEo.js} +2 -2
- package/src/assets/web-panel/assets/{Multisig-BSWWzvWH.js → Multisig-DtUZpFmZ.js} +3 -3
- package/src/assets/web-panel/assets/{NLProgramming-fnxqXM_3.js → NLProgramming-iInH7jBr.js} +1 -1
- package/src/assets/web-panel/assets/{Notes-qUZPIQXT.js → Notes-BO3Z3vaS.js} +3 -3
- package/src/assets/web-panel/assets/{NotificationSettings-x9Xrixqu.js → NotificationSettings-ClX_0jFE.js} +1 -1
- package/src/assets/web-panel/assets/{OrderTableRenderer-BtMtQUt7.js → OrderTableRenderer-Czw742w4.js} +1 -1
- package/src/assets/web-panel/assets/{Organization-C946Hzna.js → Organization-BATEx24i.js} +4 -4
- package/src/assets/web-panel/assets/{Overflow-BYf8KIts.js → Overflow-B_PXMNia.js} +1 -1
- package/src/assets/web-panel/assets/{P2P-Cbqf5dnv.js → P2P-BSiE8PqT.js} +2 -2
- package/src/assets/web-panel/assets/PdhVaultBrowser-BbklUgZY.js +7 -0
- package/src/assets/web-panel/assets/{Permissions-CZBw45EW.js → Permissions-B7bpflT_.js} +3 -3
- package/src/assets/web-panel/assets/{PersonalDataHub-BKwUAt43.js → PersonalDataHub-BWZS4BLy.js} +4 -4
- package/src/assets/web-panel/assets/{Pipeline-DmFD2QW4.js → Pipeline-DP2YSs6H.js} +1 -1
- package/src/assets/web-panel/assets/{Privacy-KpuwWvt5.js → Privacy-DB9ptoH0.js} +1 -1
- package/src/assets/web-panel/assets/{ProjectInit-Bt8UheX6.js → ProjectInit-BAfePyYk.js} +2 -2
- package/src/assets/web-panel/assets/{ProjectSettings-2ZeAn9CP.js → ProjectSettings-BEXn4Cm3.js} +2 -2
- package/src/assets/web-panel/assets/{Projects-zBuet8Zs.js → Projects-BzSs0rzn.js} +1 -1
- package/src/assets/web-panel/assets/{Providers-DcEAnw6L.js → Providers-CRX9TdRO.js} +1 -1
- package/src/assets/web-panel/assets/{QrScannerModal-qF7liYG9.js → QrScannerModal-DUWcSY5L.js} +1 -1
- package/src/assets/web-panel/assets/{QuickAsk-qiESlVBJ.js → QuickAsk-Cgo3Z_hs.js} +1 -1
- package/src/assets/web-panel/assets/{Recommend-Bk-cQyi9.js → Recommend-Dcinx0IW.js} +1 -1
- package/src/assets/web-panel/assets/{RemoteSession-CwrekErS.js → RemoteSession-BMZzTnAN.js} +2 -2
- package/src/assets/web-panel/assets/{Reputation-Bmw_UQtW.js → Reputation-BdZzpOp9.js} +1 -1
- package/src/assets/web-panel/assets/{Row-CPdqZIUX.js → Row-DqM8GVcx.js} +1 -1
- package/src/assets/web-panel/assets/{RssFeed-D_W-xxvS.js → RssFeed-Soj_QBK3.js} +2 -2
- package/src/assets/web-panel/assets/{Search-Hu0oDFj_.js → Search-Cn2es0-v.js} +1 -1
- package/src/assets/web-panel/assets/{Security-DeRxUwmq.js → Security-t7C4hz3n.js} +4 -4
- package/src/assets/web-panel/assets/{Services-CsNmHFkf.js → Services-ChF-e_Uf.js} +2 -2
- package/src/assets/web-panel/assets/{Skeleton-gv_Vz0tN.js → Skeleton-BiPIyK-2.js} +1 -1
- package/src/assets/web-panel/assets/{Skills-Dgg-_rCB.js → Skills-HgkKJenJ.js} +1 -1
- package/src/assets/web-panel/assets/{Sla-Bpu-bsEJ.js → Sla-BSfluv_k.js} +1 -1
- package/src/assets/web-panel/assets/{SpeechSettings-CrhleHuF.js → SpeechSettings-Sm0Gz9tM.js} +1 -1
- package/src/assets/web-panel/assets/{SyncSettings-JHjUN6I9.js → SyncSettings-DlhBMnfU.js} +2 -2
- package/src/assets/web-panel/assets/{Tasks-DKRWKkl9.js → Tasks-C7OUvsnp.js} +1 -1
- package/src/assets/web-panel/assets/{Templates-leiWntLq.js → Templates-CrMtw87y.js} +1 -1
- package/src/assets/web-panel/assets/{Tenant--1bYulvn.js → Tenant-DSNSB6j5.js} +1 -1
- package/src/assets/web-panel/assets/{Terminal-C0y6FvSS.js → Terminal-Cmh78FQg.js} +2 -2
- package/src/assets/web-panel/assets/{TimelineRenderer-CQK4PVv4.js → TimelineRenderer-BE8b8lHR.js} +1 -1
- package/src/assets/web-panel/assets/{Tokens-DbIvF-DV.js → Tokens-BrtgdIvJ.js} +1 -1
- package/src/assets/web-panel/assets/{Trigger-CkXJ2vuq.js → Trigger-HCmaoKDp.js} +1 -1
- package/src/assets/web-panel/assets/{Trust-B02WXJPw.js → Trust-GASQ4F-2.js} +1 -1
- package/src/assets/web-panel/assets/{UkeySign-VPMkfzmw.js → UkeySign-B8kSzWGr.js} +1 -1
- package/src/assets/web-panel/assets/{VideoEditing-C5ezUnah.js → VideoEditing-Nn-clhv5.js} +1 -1
- package/src/assets/web-panel/assets/{Wallet-CYfvYRrY.js → Wallet-DdYMKTYk.js} +4 -4
- package/src/assets/web-panel/assets/{WebAuthn-DtKl-kpr.js → WebAuthn-xJXUr_eK.js} +4 -4
- package/src/assets/web-panel/assets/{WorkflowEditor-DACITF-u.js → WorkflowEditor-CbSa87av.js} +1 -1
- package/src/assets/web-panel/assets/{chat-qnygfnLi.js → chat-CVrNLGUV.js} +1 -1
- package/src/assets/web-panel/assets/{colors-D4mISLBD.js → colors-e2veLfIA.js} +1 -1
- package/src/assets/web-panel/assets/{compact-item-BBPfxYGL.js → compact-item-CNd7nhUq.js} +1 -1
- package/src/assets/web-panel/assets/{createContext-Byx4ndHp.js → createContext-DEudTVqv.js} +1 -1
- package/src/assets/web-panel/assets/devWarning-DW7he-SA.js +1 -0
- package/src/assets/web-panel/assets/{hasIn-CGjLkkn3.js → hasIn-BlSAFZa3.js} +1 -1
- package/src/assets/web-panel/assets/{index-B8UpadHC.js → index-0y7tHZdT.js} +1 -1
- package/src/assets/web-panel/assets/{index-B9jH-h4X.js → index-4ZT0vIJt.js} +1 -1
- package/src/assets/web-panel/assets/{index-DboTeuPF.js → index-7-7rr4Mf.js} +1 -1
- package/src/assets/web-panel/assets/{index-BxQF1wCU.js → index-B1C1wS5c.js} +1 -1
- package/src/assets/web-panel/assets/{index-Dzni_5Qw.js → index-BG-VNepa.js} +1 -1
- package/src/assets/web-panel/assets/{index-BNe2lCk6.js → index-BMIhGZUR.js} +1 -1
- package/src/assets/web-panel/assets/{index-CFMWjuav.js → index-BRNCKg4q.js} +1 -1
- package/src/assets/web-panel/assets/{index-BN7_TSgU.js → index-B_UNX_xq.js} +1 -1
- package/src/assets/web-panel/assets/{index-Dmfe0L2Z.js → index-BmVFeSEq.js} +1 -1
- package/src/assets/web-panel/assets/{index-D_g9mA1N.js → index-Bp4Gcn9u.js} +1 -1
- package/src/assets/web-panel/assets/{index-CZjNamSU.js → index-BpH6T1gA.js} +1 -1
- package/src/assets/web-panel/assets/{index-BklGH3YI.js → index-BptI9bLu.js} +1 -1
- package/src/assets/web-panel/assets/{index-xzRKTy0R.js → index-Bqeb4jnC.js} +1 -1
- package/src/assets/web-panel/assets/{index-Y7el_3WS.js → index-Bwtt-0CQ.js} +1 -1
- package/src/assets/web-panel/assets/{index-ByA1NyFP.js → index-C4h_Bvd2.js} +1 -1
- package/src/assets/web-panel/assets/{index-CsVuQsY1.js → index-C6zGNZ5H.js} +1 -1
- package/src/assets/web-panel/assets/{index-CMj8qmpX.js → index-CHMrAZiR.js} +1 -1
- package/src/assets/web-panel/assets/{index-CVUJjQAT.js → index-CK6Rb66R.js} +1 -1
- package/src/assets/web-panel/assets/{index-CWhI8G14.js → index-CU4Y4VVN.js} +1 -1
- package/src/assets/web-panel/assets/{index-C3abGsSW.js → index-CWuv47z0.js} +1 -1
- package/src/assets/web-panel/assets/{index-J5JkStvY.js → index-CYNoXhxl.js} +1 -1
- package/src/assets/web-panel/assets/{index-C9tcHs46.js → index-CgVwz2jD.js} +1 -1
- package/src/assets/web-panel/assets/{index-lKJWAmd4.js → index-ClROBPWd.js} +1 -1
- package/src/assets/web-panel/assets/{index-O09jXbir.js → index-D7yJceTZ.js} +1 -1
- package/src/assets/web-panel/assets/{index-c_tBkIlU.js → index-DFv-nsIT.js} +1 -1
- package/src/assets/web-panel/assets/{index-B_fHPZ8E.js → index-DFzvcZ3Q.js} +1 -1
- package/src/assets/web-panel/assets/{index-CydHMjwc.js → index-DJ5gsewX.js} +1 -1
- package/src/assets/web-panel/assets/{index-CoA8WsVr.js → index-DVORJydf.js} +1 -1
- package/src/assets/web-panel/assets/{index-BmKYaaGP.js → index-D_D7lcnQ.js} +1 -1
- package/src/assets/web-panel/assets/{index-BzeBBAl5.js → index-DtrqgNBl.js} +1 -1
- package/src/assets/web-panel/assets/{index-DH6iC5b2.js → index-DwjWRUTf.js} +1 -1
- package/src/assets/web-panel/assets/{index-CD5Btq6p.js → index-DyFZ7gDd.js} +1 -1
- package/src/assets/web-panel/assets/{index-DfgpKd64.js → index-Ec6VBiV-.js} +1 -1
- package/src/assets/web-panel/assets/index-IkoHuWRe.js +1 -0
- package/src/assets/web-panel/assets/{index-Ne8UGllV.js → index-Jk99aZIr.js} +3 -3
- package/src/assets/web-panel/assets/{index-DZXhKAk9.js → index-Lm9pm1zm.js} +1 -1
- package/src/assets/web-panel/assets/{index-CmHE-lY_.js → index-MuTb62K6.js} +1 -1
- package/src/assets/web-panel/assets/index-MwqsDbb1.js +1 -0
- package/src/assets/web-panel/assets/{index-Cpg3AWRy.js → index-hzUfIn4u.js} +1 -1
- package/src/assets/web-panel/assets/{initDefaultProps-XuhfEIhB.js → initDefaultProps-C6fpNcA5.js} +1 -1
- package/src/assets/web-panel/assets/{motion-Cbxh6AxO.js → motion-Bjh9Come.js} +1 -1
- package/src/assets/web-panel/assets/{move-C7IEnFly.js → move-DFa4ul-_.js} +1 -1
- package/src/assets/web-panel/assets/{mtc-parser-lLADx4LL.js → mtc-parser-KoYqA_e5.js} +1 -1
- package/src/assets/web-panel/assets/{omit-mIbic_k-.js → omit-ByTjP-wG.js} +1 -1
- package/src/assets/web-panel/assets/{pickAttrs-_xIYEqu3.js → pickAttrs-CG_rmTxx.js} +1 -1
- package/src/assets/web-panel/assets/{placementArrow-ClB-E0ny.js → placementArrow-LDePZ8V9.js} +1 -1
- package/src/assets/web-panel/assets/{responsiveObserve-D36Bg2ut.js → responsiveObserve-DZFzH4RR.js} +1 -1
- package/src/assets/web-panel/assets/{slide-CUuO08Bl.js → slide-DfXQyTvD.js} +1 -1
- package/src/assets/web-panel/assets/{statusUtils-BKahwLbv.js → statusUtils-CuhqsJfO.js} +1 -1
- package/src/assets/web-panel/assets/{styleChecker-2pT-T8vy.js → styleChecker-qqVjJw5u.js} +1 -1
- package/src/assets/web-panel/assets/{useFlexGapSupport-DyH5g7Rg.js → useFlexGapSupport-BPxnCxcb.js} +1 -1
- package/src/assets/web-panel/assets/{useFs-CTOauB3X.js → useFs-D11NLCjV.js} +1 -1
- package/src/assets/web-panel/assets/{usePersonalDataHub-B02JYIMe.js → usePersonalDataHub-HbZVcaCX.js} +1 -1
- package/src/assets/web-panel/assets/{vnode-Do22wQrc.js → vnode-CZHQlfTu.js} +1 -1
- package/src/assets/web-panel/assets/{zoom-BfnL7rit.js → zoom-CV3rUknJ.js} +1 -1
- package/src/assets/web-panel/index.html +1 -1
- package/src/commands/context.js +31 -11
- package/src/commands/evolution-deployment.js +70 -0
- package/src/data/changelog.json +65 -0
- package/src/gateways/ws/evolution-deployment-topic-handlers.js +20 -0
- package/src/harness/prompt-compressor.js +12 -4
- package/src/lib/evolution/evolution-deployment-config.js +16 -1
- package/src/lib/evolution/evolution-deployment-profile.js +102 -58
- package/src/lib/evolution/evolution-test-deployment.js +386 -0
- package/src/lib/model-context-window.js +3 -2
- package/src/lib/runtime-usage-ledger.js +5 -0
- package/src/repl/agent-repl.js +19 -4
- package/src/runtime/agent-core.js +13 -0
- package/src/runtime/headless-runner.js +4 -0
- package/src/runtime/headless-stream.js +9 -1
- package/src/assets/web-panel/assets/EvolutionSettings-bMvgBk6r.js +0 -1
- package/src/assets/web-panel/assets/MarkdownRenderer-QWv7UJLq.js +0 -1
- package/src/assets/web-panel/assets/PdhVaultBrowser-rmxp0cuF.js +0 -7
- package/src/assets/web-panel/assets/devWarning-DBy6gsuI.js +0 -1
- package/src/assets/web-panel/assets/index-BfEDXk_E.js +0 -1
- package/src/assets/web-panel/assets/index-CrxUwNM8.js +0 -1
package/src/data/changelog.json
CHANGED
|
@@ -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(
|
|
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
|
-
|
|
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
|
-
: "
|
|
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/
|
|
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
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
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
|
-
|
|
108
|
-
|
|
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(
|
|
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(
|
|
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(
|
|
255
|
-
|
|
256
|
-
|
|
257
|
-
|
|
258
|
-
|
|
259
|
-
Object.
|
|
260
|
-
|
|
261
|
-
|
|
262
|
-
|
|
263
|
-
trustRootDigest
|
|
264
|
-
|
|
265
|
-
|
|
266
|
-
|
|
267
|
-
|
|
268
|
-
|
|
269
|
-
|
|
270
|
-
|
|
271
|
-
|
|
272
|
-
|
|
273
|
-
|
|
274
|
-
|
|
275
|
-
|
|
276
|
-
|
|
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 =
|
|
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`,
|