chainlesschain 0.166.45 → 0.166.47

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 (230) hide show
  1. package/README.md +6 -4
  2. package/package.json +3 -1
  3. package/src/assets/web-panel/assets/{AIOps-CrMhYNeH.js → AIOps-CDpT0WXV.js} +1 -1
  4. package/src/assets/web-panel/assets/{ActionButton-DLY5blZ3.js → ActionButton-BNfUljWx.js} +1 -1
  5. package/src/assets/web-panel/assets/{Analytics-C0NhKQB0.js → Analytics-C9323DEx.js} +3 -3
  6. package/src/assets/web-panel/assets/{AppLayout-DLyepgMq.js → AppLayout-CRrjb2db.js} +5 -5
  7. package/src/assets/web-panel/assets/{Artifacts-Depk01Sa.js → Artifacts-Db-DGqJS.js} +1 -1
  8. package/src/assets/web-panel/assets/{Audit-jKe6NQ3J.js → Audit-CJdHRJ0W.js} +1 -1
  9. package/src/assets/web-panel/assets/{BackgroundAgents-CG4GKT9s.js → BackgroundAgents-_RSCnTYs.js} +1 -1
  10. package/src/assets/web-panel/assets/{Backup-DYWCkzwM.js → Backup-8GFQi-dM.js} +1 -1
  11. package/src/assets/web-panel/assets/{BaseInput-xm5vodmJ.js → BaseInput-C87NtgUZ.js} +1 -1
  12. package/src/assets/web-panel/assets/{Chat-B20_PNd3.js → Chat-DcTMWS8G.js} +5 -5
  13. package/src/assets/web-panel/assets/{ChatBubbleRenderer-D4d-eh0F.js → ChatBubbleRenderer-5ZDPTW_H.js} +1 -1
  14. package/src/assets/web-panel/assets/{Checkbox-CfgwkV_r.js → Checkbox-DM9EmYee.js} +1 -1
  15. package/src/assets/web-panel/assets/{Codegen-DbnoWI44.js → Codegen-M2YqDRNN.js} +1 -1
  16. package/src/assets/web-panel/assets/{Col-CfzzhgGw.js → Col-oB1LLxyf.js} +1 -1
  17. package/src/assets/web-panel/assets/{Community-BU7mGM8p.js → Community-TcVZK5tF.js} +1 -1
  18. package/src/assets/web-panel/assets/{Compact-DpYim0an.js → Compact-XKmq-3K_.js} +1 -1
  19. package/src/assets/web-panel/assets/{Compliance-BNJcO6ra.js → Compliance-C6CBiDRy.js} +1 -1
  20. package/src/assets/web-panel/assets/{Cowork-CecZ-pWj.js → Cowork-Dz9CGqXH.js} +4 -4
  21. package/src/assets/web-panel/assets/{Cron-BG_C1fe3.js → Cron-CxJDgDVL.js} +2 -2
  22. package/src/assets/web-panel/assets/{Crosschain-BAeILQLL.js → Crosschain-DMP0JsaQ.js} +1 -1
  23. package/src/assets/web-panel/assets/{DID-CYqOEkXi.js → DID-I5IQeogb.js} +2 -2
  24. package/src/assets/web-panel/assets/{Dashboard-BYU8wmL1.js → Dashboard-BfLW2MXj.js} +2 -2
  25. package/src/assets/web-panel/assets/{Dropdown-DYlJeTTa.js → Dropdown-BK8EjAlh.js} +1 -1
  26. package/src/assets/web-panel/assets/{EmailListRenderer-C0M6py3K.js → EmailListRenderer-C3iqSv5I.js} +1 -1
  27. package/src/assets/web-panel/assets/EvolutionSettings-BJmBzpW6.js +1 -0
  28. package/src/assets/web-panel/assets/{FamilyGuardDashboard-Du90iDch.js → FamilyGuardDashboard-T19rnqm-.js} +1 -1
  29. package/src/assets/web-panel/assets/{Federation-DkFp_hzB.js → Federation-CozrbPMy.js} +1 -1
  30. package/src/assets/web-panel/assets/{FormItemContext-BGgtGTfG.js → FormItemContext-k1dCLNNJ.js} +1 -1
  31. package/src/assets/web-panel/assets/{GenericCardRenderer-BIDsSCei.js → GenericCardRenderer-DbaW_Jvt.js} +1 -1
  32. package/src/assets/web-panel/assets/{Git--d3Te93J.js → Git-CQHRyEIt.js} +2 -2
  33. package/src/assets/web-panel/assets/{Governance-CZwD0vmO.js → Governance-BMJYZgMy.js} +1 -1
  34. package/src/assets/web-panel/assets/{Inference-DiDcSFEW.js → Inference-B7mpNU7V.js} +1 -1
  35. package/src/assets/web-panel/assets/{KnowledgeGraph-Bi0hSfzg.js → KnowledgeGraph-Br0Blg6B.js} +1 -1
  36. package/src/assets/web-panel/assets/{Logs-C8NHSc0K.js → Logs-HIdk0S6M.js} +2 -2
  37. package/src/assets/web-panel/assets/{MarkdownRenderer-DfDuADqF.js → MarkdownRenderer-HxeocBHy.js} +1 -1
  38. package/src/assets/web-panel/assets/{Marketplace-D6kD0bNf.js → Marketplace-Bkfq69UP.js} +1 -1
  39. package/src/assets/web-panel/assets/{McpTools-mTSamCr5.js → McpTools-dtmx0bHO.js} +3 -3
  40. package/src/assets/web-panel/assets/{Memory-YQBXfLjU.js → Memory-CrRlOuEf.js} +2 -2
  41. package/src/assets/web-panel/assets/{MobileBridge-D2awuupp.js → MobileBridge-D4ZIZiAH.js} +1 -1
  42. package/src/assets/web-panel/assets/{MobileProjects-Bl7lZc_-.js → MobileProjects-C90Rw7GE.js} +1 -1
  43. package/src/assets/web-panel/assets/{Mtc-CBqjLK2Q.js → Mtc-CC6k_uh4.js} +5 -5
  44. package/src/assets/web-panel/assets/{MtcAudit-C4poRInZ.js → MtcAudit-T_CUIYUy.js} +2 -2
  45. package/src/assets/web-panel/assets/{Multisig-C_J0zXYZ.js → Multisig-N_e0RRWk.js} +3 -3
  46. package/src/assets/web-panel/assets/{NLProgramming-Ci43sWOU.js → NLProgramming-Iq3VzEv0.js} +1 -1
  47. package/src/assets/web-panel/assets/{Notes-DN7A-GFZ.js → Notes-B5sKJUJt.js} +4 -4
  48. package/src/assets/web-panel/assets/{NotificationSettings-D5jNm71V.js → NotificationSettings-K8UVp8qQ.js} +1 -1
  49. package/src/assets/web-panel/assets/{OrderTableRenderer-C9UsPOG8.js → OrderTableRenderer-BWNyM-6m.js} +1 -1
  50. package/src/assets/web-panel/assets/{Organization-BapYMJrP.js → Organization-DMO1NJxI.js} +4 -4
  51. package/src/assets/web-panel/assets/{Overflow-BwxwjhFw.js → Overflow-BBY6b31Z.js} +1 -1
  52. package/src/assets/web-panel/assets/{P2P-TObXXOu3.js → P2P-DmsL0y0v.js} +2 -2
  53. package/src/assets/web-panel/assets/{PdhVaultBrowser-UwJvMbFO.js → PdhVaultBrowser-C65AX_RY.js} +3 -3
  54. package/src/assets/web-panel/assets/{Permissions-Damnxv-O.js → Permissions-CWcpRtWa.js} +4 -4
  55. package/src/assets/web-panel/assets/{PersonalDataHub-d_7jlBb-.js → PersonalDataHub--ZNDIdsn.js} +3 -3
  56. package/src/assets/web-panel/assets/{Pipeline-DA87VjLw.js → Pipeline-DCdj5NGb.js} +1 -1
  57. package/src/assets/web-panel/assets/{Privacy-DzO_UvWn.js → Privacy-BRKu7Q3E.js} +1 -1
  58. package/src/assets/web-panel/assets/{ProjectInit-CwqECDhs.js → ProjectInit-BJ7ozIAb.js} +2 -2
  59. package/src/assets/web-panel/assets/{ProjectSettings-CT5YdIl6.js → ProjectSettings-B2cVLiXW.js} +2 -2
  60. package/src/assets/web-panel/assets/{Projects-D3KdZPCv.js → Projects-Ce9r_W-p.js} +1 -1
  61. package/src/assets/web-panel/assets/{Providers-BjBIS8kk.js → Providers-BDespvGZ.js} +1 -1
  62. package/src/assets/web-panel/assets/{QrScannerModal-mMFqiKkI.js → QrScannerModal-BUNO4fDU.js} +1 -1
  63. package/src/assets/web-panel/assets/{QuickAsk-BwGi9ZU1.js → QuickAsk-D2TUqeBV.js} +1 -1
  64. package/src/assets/web-panel/assets/{Recommend-BY65SR5s.js → Recommend-BNNQPHBH.js} +1 -1
  65. package/src/assets/web-panel/assets/{RemoteSession-BGsVH_XU.js → RemoteSession-D2t1V_Cm.js} +2 -2
  66. package/src/assets/web-panel/assets/{Reputation-DpPbxSgI.js → Reputation-DVK5hEqI.js} +1 -1
  67. package/src/assets/web-panel/assets/{Row-B5YBYoVz.js → Row-BB9RTwmE.js} +1 -1
  68. package/src/assets/web-panel/assets/{RssFeed-DvM5jaoh.js → RssFeed-DmEO7liZ.js} +2 -2
  69. package/src/assets/web-panel/assets/{Search-6RX39EPO.js → Search-UwEYjnDB.js} +1 -1
  70. package/src/assets/web-panel/assets/{Security-Beal-7cM.js → Security-DebqSsMp.js} +4 -4
  71. package/src/assets/web-panel/assets/{Services-D6rjVLe-.js → Services-CuuPts3C.js} +2 -2
  72. package/src/assets/web-panel/assets/{Skeleton-Dur7R7vz.js → Skeleton-DbWpmbgf.js} +1 -1
  73. package/src/assets/web-panel/assets/{Skills-D1QkGwMk.js → Skills-BaK7SxzT.js} +1 -1
  74. package/src/assets/web-panel/assets/{Sla-3ObrX8Es.js → Sla-BFHv51Jb.js} +1 -1
  75. package/src/assets/web-panel/assets/{SpeechSettings-DG_KAiH1.js → SpeechSettings-B9b1R6uK.js} +1 -1
  76. package/src/assets/web-panel/assets/{SyncSettings-BaHq0SJ2.js → SyncSettings-BnO0CN02.js} +2 -2
  77. package/src/assets/web-panel/assets/{Tasks-BDpAkBAB.js → Tasks-Dy01Vq49.js} +1 -1
  78. package/src/assets/web-panel/assets/{Templates-tYdoRd-c.js → Templates-BCy2AMHc.js} +1 -1
  79. package/src/assets/web-panel/assets/{Tenant-yGS5zIQ1.js → Tenant-4Tx9y_Y1.js} +1 -1
  80. package/src/assets/web-panel/assets/{Terminal-B3QbmVFa.js → Terminal-CPOoUH8J.js} +2 -2
  81. package/src/assets/web-panel/assets/{TimelineRenderer-B_7Pr5dS.js → TimelineRenderer-C85GlJzu.js} +1 -1
  82. package/src/assets/web-panel/assets/{Tokens-DPvpDa53.js → Tokens-_xneFBGF.js} +1 -1
  83. package/src/assets/web-panel/assets/{Trigger-DcSAD0GZ.js → Trigger-BizG4rTr.js} +1 -1
  84. package/src/assets/web-panel/assets/{Trust-BBzEq-uy.js → Trust-Dh8EIn3n.js} +1 -1
  85. package/src/assets/web-panel/assets/{UkeySign-Dssav7-5.js → UkeySign-C5NWoHWQ.js} +1 -1
  86. package/src/assets/web-panel/assets/{VideoEditing-CPOZf4yi.js → VideoEditing-0YfrySL6.js} +1 -1
  87. package/src/assets/web-panel/assets/{Wallet-BzBVRXEq.js → Wallet-BZVH8Ags.js} +4 -4
  88. package/src/assets/web-panel/assets/{WebAuthn-DdSGaCCh.js → WebAuthn-kNofa6vm.js} +4 -4
  89. package/src/assets/web-panel/assets/{WorkflowEditor-CKjBFoSs.js → WorkflowEditor-BNO34_j0.js} +1 -1
  90. package/src/assets/web-panel/assets/{chat-B9aMGLg0.js → chat-ifQ2FlwD.js} +1 -1
  91. package/src/assets/web-panel/assets/{colors-GFCMctSV.js → colors-1TL8H6EH.js} +1 -1
  92. package/src/assets/web-panel/assets/{compact-item-BqSDFAYJ.js → compact-item-DBfRjs_T.js} +1 -1
  93. package/src/assets/web-panel/assets/{createContext-BwUm3Ffp.js → createContext-Bs6V4iBf.js} +1 -1
  94. package/src/assets/web-panel/assets/devWarning-BHnbnuYL.js +1 -0
  95. package/src/assets/web-panel/assets/{hasIn-DN1kMJOT.js → hasIn-Bz6LMY_0.js} +1 -1
  96. package/src/assets/web-panel/assets/{index-B4dI_csl.js → index--WvT2Il3.js} +1 -1
  97. package/src/assets/web-panel/assets/{index-B7Yu5wwV.js → index-84mi5rsv.js} +1 -1
  98. package/src/assets/web-panel/assets/{index-DAK28GY8.js → index-B5SJCUZ7.js} +1 -1
  99. package/src/assets/web-panel/assets/{index-CmEHzOsw.js → index-B6RClMZl.js} +1 -1
  100. package/src/assets/web-panel/assets/{index-By9GbJhu.js → index-BB1Af7Fv.js} +1 -1
  101. package/src/assets/web-panel/assets/{index-7W1e9Vi4.js → index-BQL_tldd.js} +1 -1
  102. package/src/assets/web-panel/assets/{index-BDL2MwxN.js → index-BXJXMaZe.js} +1 -1
  103. package/src/assets/web-panel/assets/{index-CEMl-Qte.js → index-BhPDhmvN.js} +1 -1
  104. package/src/assets/web-panel/assets/{index-BCnbC2z7.js → index-BiZ7Nz5-.js} +1 -1
  105. package/src/assets/web-panel/assets/{index-Cwih67e8.js → index-BoCTDcn6.js} +1 -1
  106. package/src/assets/web-panel/assets/{index-DI90Wo_P.js → index-BxqC3LiO.js} +1 -1
  107. package/src/assets/web-panel/assets/{index-THsr_UUJ.js → index-C6c0j-Ki.js} +1 -1
  108. package/src/assets/web-panel/assets/{index-PKwZkQDC.js → index-C7d6QlfR.js} +1 -1
  109. package/src/assets/web-panel/assets/{index-rCTtYCGu.js → index-C9QYxq61.js} +1 -1
  110. package/src/assets/web-panel/assets/{index-Ci0zIpSX.js → index-CBh48_Mh.js} +1 -1
  111. package/src/assets/web-panel/assets/{index-tMF_deZb.js → index-CNKHoXWI.js} +1 -1
  112. package/src/assets/web-panel/assets/{index-B9Pe-EyB.js → index-CXVBQ82k.js} +3 -3
  113. package/src/assets/web-panel/assets/{index-B4MfxM5W.js → index-CXtiLagi.js} +1 -1
  114. package/src/assets/web-panel/assets/{index-DaFr7XB1.js → index-Cn7EIWmI.js} +1 -1
  115. package/src/assets/web-panel/assets/index-CsRz9-ZH.js +1 -0
  116. package/src/assets/web-panel/assets/{index-D8jcp9Rj.js → index-CtB45Hok.js} +1 -1
  117. package/src/assets/web-panel/assets/{index-Cli0VREv.js → index-Cu_V6ZJH.js} +1 -1
  118. package/src/assets/web-panel/assets/{index-DO-IKERp.js → index-Cykt9BbN.js} +1 -1
  119. package/src/assets/web-panel/assets/{index-y7cfh9rP.js → index-DDhy4eCS.js} +1 -1
  120. package/src/assets/web-panel/assets/{index-CH2wK5dx.js → index-DEPPzM8I.js} +1 -1
  121. package/src/assets/web-panel/assets/{index-BeycSy7n.js → index-DMVktlxG.js} +1 -1
  122. package/src/assets/web-panel/assets/{index-BwssFWI1.js → index-DOww5Qny.js} +1 -1
  123. package/src/assets/web-panel/assets/{index-PJt1Zrx2.js → index-DWPp-d07.js} +1 -1
  124. package/src/assets/web-panel/assets/index-DnjMFf3m.js +1 -0
  125. package/src/assets/web-panel/assets/{index-BPGlcDvs.js → index-DvM2xBUA.js} +1 -1
  126. package/src/assets/web-panel/assets/{index-BL_0ndQc.js → index-EK3XtMxA.js} +1 -1
  127. package/src/assets/web-panel/assets/{index-DnJt9DaX.js → index-XJIV7HEw.js} +1 -1
  128. package/src/assets/web-panel/assets/{index-BpiR6uzH.js → index-cNwsev6n.js} +1 -1
  129. package/src/assets/web-panel/assets/{index-bwb4cg_D.js → index-f_7L9GvP.js} +1 -1
  130. package/src/assets/web-panel/assets/{index-DbDhKroq.js → index-lUL3bD2z.js} +1 -1
  131. package/src/assets/web-panel/assets/{index-DvvJWwT8.js → index-pOUFfRdN.js} +1 -1
  132. package/src/assets/web-panel/assets/{index-BBMW8bQO.js → index-rGhS02f8.js} +1 -1
  133. package/src/assets/web-panel/assets/{index-CRikhGgx.js → index-vHtnQsnV.js} +1 -1
  134. package/src/assets/web-panel/assets/{index-BHUxz4dy.js → index-vb1XIxEB.js} +1 -1
  135. package/src/assets/web-panel/assets/{initDefaultProps-B6e5CZ5p.js → initDefaultProps-DpRIjwTt.js} +1 -1
  136. package/src/assets/web-panel/assets/{motion-riMM1KfJ.js → motion-CG4_9o-Z.js} +1 -1
  137. package/src/assets/web-panel/assets/{move-C1NSDMjc.js → move-Dku1fXtf.js} +1 -1
  138. package/src/assets/web-panel/assets/{mtc-parser-Bibuny9B.js → mtc-parser-BvAVeX-3.js} +1 -1
  139. package/src/assets/web-panel/assets/{omit-Cmf6FoRn.js → omit-DFu0x78D.js} +1 -1
  140. package/src/assets/web-panel/assets/{pickAttrs-BSsYBUCY.js → pickAttrs-CmI-FNcK.js} +1 -1
  141. package/src/assets/web-panel/assets/{placementArrow-gSB7-GAS.js → placementArrow-CGERYewB.js} +1 -1
  142. package/src/assets/web-panel/assets/{responsiveObserve-qaqttvKa.js → responsiveObserve-D7G8bF5J.js} +1 -1
  143. package/src/assets/web-panel/assets/{slide-RX2gxl3k.js → slide-B2sXwWXy.js} +1 -1
  144. package/src/assets/web-panel/assets/{statusUtils-DEJmkhqw.js → statusUtils-DI5yh0n3.js} +1 -1
  145. package/src/assets/web-panel/assets/{styleChecker-CIWmJ78O.js → styleChecker-deGJ5dp_.js} +1 -1
  146. package/src/assets/web-panel/assets/{useFlexGapSupport-D-UPSQBE.js → useFlexGapSupport-OqHBXEmi.js} +1 -1
  147. package/src/assets/web-panel/assets/{useFs-9QFtqADc.js → useFs-Dqgx0Qv_.js} +1 -1
  148. package/src/assets/web-panel/assets/{usePersonalDataHub-DM6kyift.js → usePersonalDataHub-Be-lveh2.js} +1 -1
  149. package/src/assets/web-panel/assets/{vnode-C-q6FNSJ.js → vnode-CFxB876W.js} +1 -1
  150. package/src/assets/web-panel/assets/{zoom-D4WJY2m8.js → zoom-BFOYrl4e.js} +1 -1
  151. package/src/assets/web-panel/index.html +1 -1
  152. package/src/command-help-index.json +3 -3
  153. package/src/commands/agent.js +11 -7
  154. package/src/commands/background-session.js +31 -3
  155. package/src/commands/chat.js +5 -1
  156. package/src/commands/eval.js +86 -28
  157. package/src/commands/llm.js +104 -1
  158. package/src/commands/plugin.js +130 -1
  159. package/src/commands/sandbox.js +121 -2
  160. package/src/commands/serve.js +11 -2
  161. package/src/commands/skill.js +29 -0
  162. package/src/data/changelog.json +26 -0
  163. package/src/gateways/ws/session-protocol.js +13 -0
  164. package/src/gateways/ws/ws-agent-handler.js +17 -0
  165. package/src/gateways/ws/ws-server.js +3 -0
  166. package/src/gateways/ws/ws-session-state.js +131 -0
  167. package/src/generated/cc-agent-protocol.schema.json +4 -0
  168. package/src/lazy-dispatch.js +8 -1
  169. package/src/lib/agent-sandbox.js +337 -53
  170. package/src/lib/app-server/cli-agent-kernel-adapter.js +28 -0
  171. package/src/lib/app-server/server.js +93 -0
  172. package/src/lib/background-agent-keeper-client.js +2 -0
  173. package/src/lib/background-agent-keeper-protocol.js +7 -0
  174. package/src/lib/background-agent-supervisor.js +194 -47
  175. package/src/lib/codex-app-server-adapter.js +81 -27
  176. package/src/lib/context-memory-kernel/durable-memory-port.js +31 -8
  177. package/src/lib/context-memory-kernel/provider-context.js +53 -19
  178. package/src/lib/deferred-question-context.js +122 -0
  179. package/src/lib/eval/evidence.js +202 -64
  180. package/src/lib/eval/plugin-suite.js +917 -0
  181. package/src/lib/eval/runner.js +10 -3
  182. package/src/lib/evolution/agent-evolution-ingress.js +60 -8
  183. package/src/lib/evolution/agent-evolution-runtime-composition.js +236 -1
  184. package/src/lib/evolution/agent-model-projection.js +97 -1
  185. package/src/lib/evolution/evidence-backed-wiki-maintainer.js +154 -1
  186. package/src/lib/evolution/evolution-artifact-ports.js +6 -0
  187. package/src/lib/evolution/evolution-deployment-loader.js +188 -10
  188. package/src/lib/evolution/evolution-eval-gate.js +8 -0
  189. package/src/lib/evolution/evolution-eval-runtime-composition.js +255 -0
  190. package/src/lib/evolution/evolution-evidence-artifact-adapter.js +58 -2
  191. package/src/lib/evolution/evolution-ledger-file-backend.js +23 -2
  192. package/src/lib/evolution/evolution-ledger-manifest-chain.js +223 -7
  193. package/src/lib/evolution/evolution-ledger-v2-journal.js +525 -0
  194. package/src/lib/evolution/evolution-ledger-v2-manifest-backend.js +46 -2
  195. package/src/lib/evolution/evolution-ledger.js +57 -1
  196. package/src/lib/evolution/evolution-run-ledger-adapter.js +93 -0
  197. package/src/lib/evolution/evolution-run-wiki-evidence-resolver.js +259 -0
  198. package/src/lib/evolution/governed-hub-llm.js +238 -5
  199. package/src/lib/evolution/governed-hub-resolver.js +82 -4
  200. package/src/lib/evolution/governed-hub-skill.js +11 -5
  201. package/src/lib/evolution/governed-skill-synthesis-provider-chat.js +10 -1
  202. package/src/lib/evolution/skill-runtime-revalidation-ledger-adapter.js +254 -0
  203. package/src/lib/evolution/skill-runtime-revalidation.js +530 -0
  204. package/src/lib/evolution/skill-target-matrix-eval.js +4 -4
  205. package/src/lib/evolution/wiki-evidence-commit-guard.js +366 -0
  206. package/src/lib/evolution/wiki-informed-skill-proposer.js +13 -1
  207. package/src/lib/goal-context.js +14 -5
  208. package/src/lib/interaction-adapter.js +166 -1
  209. package/src/lib/model-capabilities.js +271 -0
  210. package/src/lib/model-context-catalog.js +105 -0
  211. package/src/lib/model-context-window.js +4 -49
  212. package/src/lib/openai-responses.js +428 -0
  213. package/src/lib/plugin-runtime/scopes.js +7 -1
  214. package/src/lib/remote-read-loop-guard.js +2 -2
  215. package/src/lib/runtime-usage-ledger.js +16 -0
  216. package/src/lib/skill-loader.js +12 -0
  217. package/src/lib/with-file-lock.js +3 -1
  218. package/src/repl/agent-repl.js +6 -2
  219. package/src/runtime/agent-core.js +357 -44
  220. package/src/runtime/agent-runtime.js +7 -0
  221. package/src/runtime/coding-agent-contract-shared.cjs +13 -1
  222. package/src/runtime/headless-runner.js +4 -1
  223. package/src/runtime/headless-stream.js +133 -44
  224. package/src/runtime/runtime-factory.js +26 -2
  225. package/src/workers/background-agent-keeper.js +23 -13
  226. package/src/workers/background-agent-worker.js +27 -13
  227. package/src/assets/web-panel/assets/EvolutionSettings-_QnjPFZJ.js +0 -1
  228. package/src/assets/web-panel/assets/devWarning-LxtRBsCm.js +0 -1
  229. package/src/assets/web-panel/assets/index-36hxBH-o.js +0 -1
  230. package/src/assets/web-panel/assets/index-C0b78zWZ.js +0 -1
@@ -10,14 +10,22 @@ export const EVAL_EXECUTION_PROTOCOL = "cc-agent-stream-json/v1";
10
10
  const DIGEST = /^sha256:[a-f0-9]{64}$/u;
11
11
  const MAX_HISTORY_BYTES = 16 * 1024 * 1024;
12
12
  const CONTEXT_KEYS = [
13
- "schema", "provider", "model", "modelRevision", "environmentDigest",
14
- "permissionDigest", "inferenceDigest",
13
+ "schema",
14
+ "provider",
15
+ "model",
16
+ "modelRevision",
17
+ "environmentDigest",
18
+ "permissionDigest",
19
+ "inferenceDigest",
15
20
  ];
16
21
 
17
22
  function canonical(value) {
18
23
  if (Array.isArray(value)) return `[${value.map(canonical).join(",")}]`;
19
24
  if (value && typeof value === "object") {
20
- return `{${Object.keys(value).sort().map((key) => `${JSON.stringify(key)}:${canonical(value[key])}`).join(",")}}`;
25
+ return `{${Object.keys(value)
26
+ .sort()
27
+ .map((key) => `${JSON.stringify(key)}:${canonical(value[key])}`)
28
+ .join(",")}}`;
21
29
  }
22
30
  return JSON.stringify(value);
23
31
  }
@@ -27,46 +35,81 @@ export function evalDigest(value) {
27
35
  }
28
36
 
29
37
  function nonempty(value) {
30
- return typeof value === "string" && value.trim().length > 0 && value.length <= 1024;
38
+ return (
39
+ typeof value === "string" && value.trim().length > 0 && value.length <= 1024
40
+ );
31
41
  }
32
42
 
33
43
  /** These are operator declarations, not observed provider state or PKI proofs. */
34
44
  export function validateComparisonContext(value, { provider, model } = {}) {
35
- if (!value || typeof value !== "object" || Array.isArray(value) ||
36
- Object.keys(value).length !== CONTEXT_KEYS.length ||
37
- Object.keys(value).some((key) => !CONTEXT_KEYS.includes(key)) ||
38
- value.schema !== EVAL_CONTEXT_SCHEMA ||
39
- ![value.provider, value.model, value.modelRevision].every(nonempty) ||
40
- ![value.environmentDigest, value.permissionDigest, value.inferenceDigest].every((v) => DIGEST.test(v || ""))) {
41
- throw new Error("comparison context requires its v1 schema, provider, model, modelRevision and environment/permission/inference sha256 digests");
45
+ if (
46
+ !value ||
47
+ typeof value !== "object" ||
48
+ Array.isArray(value) ||
49
+ Object.keys(value).length !== CONTEXT_KEYS.length ||
50
+ Object.keys(value).some((key) => !CONTEXT_KEYS.includes(key)) ||
51
+ value.schema !== EVAL_CONTEXT_SCHEMA ||
52
+ ![value.provider, value.model, value.modelRevision].every(nonempty) ||
53
+ ![
54
+ value.environmentDigest,
55
+ value.permissionDigest,
56
+ value.inferenceDigest,
57
+ ].every((v) => DIGEST.test(v || ""))
58
+ ) {
59
+ throw new Error(
60
+ "comparison context requires its v1 schema, provider, model, modelRevision and environment/permission/inference sha256 digests",
61
+ );
42
62
  }
43
- if ((provider !== undefined && value.provider !== provider) ||
44
- (model !== undefined && value.model !== model)) {
45
- throw new Error("comparison context must match explicit --provider and --model");
63
+ if (
64
+ (provider !== undefined && value.provider !== provider) ||
65
+ (model !== undefined && value.model !== model)
66
+ ) {
67
+ throw new Error(
68
+ "comparison context must match explicit --provider and --model",
69
+ );
46
70
  }
47
71
  return { ...value };
48
72
  }
49
73
 
50
74
  export function readComparisonContext(file, selection) {
75
+ if (fs.statSync(file).size > 16 * 1024)
76
+ throw new Error("comparison context exceeds its size limit");
51
77
  const bytes = fs.readFileSync(file);
52
78
  if (bytes.length === 0 || bytes.length > 16 * 1024) {
53
79
  throw new Error("comparison context exceeds its size limit");
54
80
  }
55
- return validateComparisonContext(JSON.parse(bytes.toString("utf8")), selection);
81
+ return validateComparisonContext(
82
+ JSON.parse(bytes.toString("utf8")),
83
+ selection,
84
+ );
56
85
  }
57
86
 
58
- export function createEvalComparison({ suite, corpusDigest, provider, model, context,
59
- platform = process.platform, arch = process.arch, node = process.version } = {}) {
87
+ export function createEvalComparison({
88
+ suite,
89
+ corpusDigest,
90
+ provider,
91
+ model,
92
+ context,
93
+ platform = process.platform,
94
+ arch = process.arch,
95
+ node = process.version,
96
+ } = {}) {
60
97
  if (!context) return null;
61
98
  if (!nonempty(provider) || !nonempty(model)) {
62
- throw new Error("--comparison-context requires explicit --provider and --model");
99
+ throw new Error(
100
+ "--comparison-context requires explicit --provider and --model",
101
+ );
63
102
  }
64
- if (!nonempty(suite) || !DIGEST.test(corpusDigest || "")) throw new Error("eval corpus identity is required");
103
+ if (!nonempty(suite) || !DIGEST.test(corpusDigest || ""))
104
+ throw new Error("eval corpus identity is required");
65
105
  const declared = validateComparisonContext(context, { provider, model });
66
106
  return {
67
107
  schema: EVAL_COMPARISON_SCHEMA,
68
108
  basis: "local-runtime-and-operator-declarations",
69
- suite, corpusDigest, provider, model,
109
+ suite,
110
+ corpusDigest,
111
+ provider,
112
+ model,
70
113
  runtime: { platform, arch, node },
71
114
  permissionMode: "acceptEdits",
72
115
  executionProtocol: EVAL_EXECUTION_PROTOCOL,
@@ -74,21 +117,39 @@ export function createEvalComparison({ suite, corpusDigest, provider, model, con
74
117
  };
75
118
  }
76
119
 
77
- export function createEvalHistoryRecord(summary, {
78
- comparison = null, dryRun = false, label = null,
79
- ranAt = new Date().toISOString(), runId = randomUUID(),
80
- } = {}) {
120
+ export function createEvalHistoryRecord(
121
+ summary,
122
+ {
123
+ comparison = null,
124
+ dryRun = false,
125
+ label = null,
126
+ ranAt = new Date().toISOString(),
127
+ runId = randomUUID(),
128
+ } = {},
129
+ ) {
81
130
  return {
82
- schema: EVAL_HISTORY_SCHEMA, runId, ranAt, label, dryRun, comparison,
83
- passed: summary.passed, failed: summary.failed, total: summary.total,
84
- passRate: summary.passRate, unrelatedChangeRate: summary.unrelatedChangeRate,
131
+ schema: EVAL_HISTORY_SCHEMA,
132
+ runId,
133
+ ranAt,
134
+ label,
135
+ dryRun,
136
+ comparison,
137
+ passed: summary.passed,
138
+ failed: summary.failed,
139
+ total: summary.total,
140
+ passRate: summary.passRate,
141
+ unrelatedChangeRate: summary.unrelatedChangeRate,
85
142
  results: summary.results.map((result) => ({
86
- id: result.id, pass: result.pass,
143
+ id: result.id,
144
+ pass: result.pass,
87
145
  artifactCheckPassed: result.artifactCheckPassed,
88
146
  executionSucceeded: result.executionSucceeded,
89
147
  agentOk: result.agentOk,
90
148
  executionEvidence: result.executionEvidence,
91
- error: result.error == null ? null : redactSecrets(String(result.error)).slice(0, 2048),
149
+ error:
150
+ result.error == null
151
+ ? null
152
+ : redactSecrets(String(result.error)).slice(0, 2048),
92
153
  detail: redactSecrets(String(result.detail || "")).slice(0, 2048),
93
154
  ms: result.ms,
94
155
  changedFiles: result.changedFiles,
@@ -99,7 +160,8 @@ export function createEvalHistoryRecord(summary, {
99
160
 
100
161
  /** Diagnostic callers may inspect valid rows, but must keep parse issues. */
101
162
  export function parseEvalHistory(text) {
102
- const runs = [], issues = [];
163
+ const runs = [],
164
+ issues = [];
103
165
  if (Buffer.byteLength(text, "utf8") > MAX_HISTORY_BYTES) {
104
166
  return { runs, issues: [{ code: "history_too_large" }] };
105
167
  }
@@ -107,7 +169,8 @@ export function parseEvalHistory(text) {
107
169
  if (!line.trim()) return;
108
170
  try {
109
171
  const value = JSON.parse(line);
110
- if (!value || typeof value !== "object" || Array.isArray(value)) throw new Error("not a record");
172
+ if (!value || typeof value !== "object" || Array.isArray(value))
173
+ throw new Error("not a record");
111
174
  runs.push(value);
112
175
  } catch {
113
176
  issues.push({ code: "invalid_history_record", line: index + 1 });
@@ -127,25 +190,46 @@ export function readEvalHistory(file) {
127
190
  function validateComparison(value) {
128
191
  try {
129
192
  const rebuilt = createEvalComparison({
130
- suite: value?.suite, corpusDigest: value?.corpusDigest,
131
- provider: value?.provider, model: value?.model, context: value?.declared,
132
- platform: value?.runtime?.platform, arch: value?.runtime?.arch, node: value?.runtime?.node,
193
+ suite: value?.suite,
194
+ corpusDigest: value?.corpusDigest,
195
+ provider: value?.provider,
196
+ model: value?.model,
197
+ context: value?.declared,
198
+ platform: value?.runtime?.platform,
199
+ arch: value?.runtime?.arch,
200
+ node: value?.runtime?.node,
133
201
  });
134
- return rebuilt && Object.values(value.runtime).every(nonempty) && canonical(rebuilt) === canonical(value);
135
- } catch { return false; }
202
+ return (
203
+ rebuilt &&
204
+ Object.values(value.runtime).every(nonempty) &&
205
+ canonical(rebuilt) === canonical(value)
206
+ );
207
+ } catch {
208
+ return false;
209
+ }
136
210
  }
137
211
 
138
212
  function recordIssues(record, now, maxAgeMs) {
139
- if (!record || typeof record !== "object" || Array.isArray(record)) return ["invalid_history_record"];
213
+ if (!record || typeof record !== "object" || Array.isArray(record))
214
+ return ["invalid_history_record"];
140
215
  const issues = [];
141
- if (record.schema !== EVAL_HISTORY_SCHEMA || !nonempty(record.runId)) issues.push("legacy_or_missing_run_identity");
216
+ if (record.schema !== EVAL_HISTORY_SCHEMA || !nonempty(record.runId))
217
+ issues.push("legacy_or_missing_run_identity");
142
218
  if (record.dryRun !== false) issues.push("dry_run_or_missing_execution_mode");
143
219
  const epoch = Date.parse(record.ranAt);
144
- if (typeof record.ranAt !== "string" || !Number.isFinite(epoch) ||
145
- new Date(epoch).toISOString() !== record.ranAt || epoch > now || now - epoch > maxAgeMs) issues.push("invalid_or_expired_evidence");
146
- if (!validateComparison(record.comparison)) issues.push("missing_comparison_identity");
220
+ if (
221
+ typeof record.ranAt !== "string" ||
222
+ !Number.isFinite(epoch) ||
223
+ new Date(epoch).toISOString() !== record.ranAt ||
224
+ epoch > now ||
225
+ now - epoch > maxAgeMs
226
+ )
227
+ issues.push("invalid_or_expired_evidence");
228
+ if (!validateComparison(record.comparison))
229
+ issues.push("missing_comparison_identity");
147
230
  const results = record.results;
148
- if (!Array.isArray(results) || results.length === 0) return [...issues, "missing_task_results"];
231
+ if (!Array.isArray(results) || results.length === 0)
232
+ return [...issues, "missing_task_results"];
149
233
  const ids = new Set();
150
234
  let passed = 0;
151
235
  for (const result of results) {
@@ -155,16 +239,34 @@ function recordIssues(record, now, maxAgeMs) {
155
239
  }
156
240
  ids.add(result.id);
157
241
  const execution = result.executionEvidence;
158
- if (typeof result.pass !== "boolean" || typeof result.artifactCheckPassed !== "boolean" ||
159
- typeof result.executionSucceeded !== "boolean" || result.agentOk !== result.executionSucceeded ||
160
- result.pass !== (result.artifactCheckPassed && result.executionSucceeded)) issues.push("inconsistent_task_verdict");
161
- if (!result.executionSucceeded || result.error !== null ||
162
- execution?.protocol !== EVAL_EXECUTION_PROTOCOL || execution.exitCode !== 0 ||
163
- execution.signal !== null || execution.terminalVerified !== true) issues.push("execution_not_successful");
242
+ if (
243
+ typeof result.pass !== "boolean" ||
244
+ typeof result.artifactCheckPassed !== "boolean" ||
245
+ typeof result.executionSucceeded !== "boolean" ||
246
+ result.agentOk !== result.executionSucceeded ||
247
+ result.pass !== (result.artifactCheckPassed && result.executionSucceeded)
248
+ )
249
+ issues.push("inconsistent_task_verdict");
250
+ if (
251
+ !result.executionSucceeded ||
252
+ result.error !== null ||
253
+ execution?.protocol !== EVAL_EXECUTION_PROTOCOL ||
254
+ execution.exitCode !== 0 ||
255
+ execution.signal !== null ||
256
+ execution.terminalVerified !== true
257
+ )
258
+ issues.push("execution_not_successful");
259
+ if (execution?.observedFallback !== false)
260
+ issues.push("fallback_or_missing_model_continuity");
164
261
  if (result.pass === true) passed += 1;
165
262
  }
166
- if (record.total !== results.length || record.passed !== passed ||
167
- record.failed !== results.length - passed || record.passRate !== passed / results.length) issues.push("inconsistent_task_totals");
263
+ if (
264
+ record.total !== results.length ||
265
+ record.passed !== passed ||
266
+ record.failed !== results.length - passed ||
267
+ record.passRate !== passed / results.length
268
+ )
269
+ issues.push("inconsistent_task_totals");
168
270
  return issues;
169
271
  }
170
272
 
@@ -173,31 +275,67 @@ function recordIssues(record, now, maxAgeMs) {
173
275
  * declarations, edited JSONL, hidden holdouts, or production release authority.
174
276
  * Append order selects the pair; timestamps cannot silently select older rows.
175
277
  */
176
- export function evaluateStrictEvalGate({ runs = [], issues = [] } = {}, {
177
- now = Date.now(), maxAgeMs = 7 * 24 * 60 * 60 * 1000, regressionThreshold = 0,
178
- } = {}) {
278
+ export function evaluateStrictEvalGate(
279
+ { runs = [], issues = [] } = {},
280
+ {
281
+ now = Date.now(),
282
+ maxAgeMs = 7 * 24 * 60 * 60 * 1000,
283
+ regressionThreshold = 0,
284
+ } = {},
285
+ ) {
179
286
  const reasons = issues.map((issue) => issue.code);
180
- if (!Number.isFinite(now) || !Number.isFinite(maxAgeMs) || maxAgeMs <= 0 ||
181
- !Number.isFinite(regressionThreshold) || regressionThreshold < 0 || regressionThreshold > 1) reasons.push("invalid_gate_options");
287
+ if (
288
+ !Number.isFinite(now) ||
289
+ !Number.isFinite(maxAgeMs) ||
290
+ maxAgeMs <= 0 ||
291
+ !Number.isFinite(regressionThreshold) ||
292
+ regressionThreshold < 0 ||
293
+ regressionThreshold > 1
294
+ )
295
+ reasons.push("invalid_gate_options");
182
296
  if (!Array.isArray(runs) || runs.length < 2) reasons.push("missing_baseline");
183
297
  const pair = Array.isArray(runs) ? runs.slice(-2) : [];
184
- for (const record of pair) reasons.push(...recordIssues(record, now, maxAgeMs));
298
+ for (const record of pair)
299
+ reasons.push(...recordIssues(record, now, maxAgeMs));
185
300
  if (pair.length === 2) {
186
301
  const [baseline, candidate] = pair;
187
- if (baseline?.runId === candidate?.runId || Date.parse(baseline?.ranAt) >= Date.parse(candidate?.ranAt)) reasons.push("duplicate_or_unordered_runs");
188
- if (canonical(baseline?.comparison) !== canonical(candidate?.comparison)) reasons.push("comparison_identity_changed");
189
- const ids = (record) => (Array.isArray(record?.results) ? record.results : []).map((r) => r?.id).sort();
190
- if (canonical(ids(baseline)) !== canonical(ids(candidate))) reasons.push("task_population_changed");
302
+ if (
303
+ baseline?.runId === candidate?.runId ||
304
+ Date.parse(baseline?.ranAt) >= Date.parse(candidate?.ranAt)
305
+ )
306
+ reasons.push("duplicate_or_unordered_runs");
307
+ if (canonical(baseline?.comparison) !== canonical(candidate?.comparison))
308
+ reasons.push("comparison_identity_changed");
309
+ const ids = (record) =>
310
+ (Array.isArray(record?.results) ? record.results : [])
311
+ .map((r) => r?.id)
312
+ .sort();
313
+ if (canonical(ids(baseline)) !== canonical(ids(candidate)))
314
+ reasons.push("task_population_changed");
191
315
  }
192
316
  const uniqueReasons = [...new Set(reasons)];
193
317
  const base = {
194
- scope: "local-eval-comparison", productionAttested: false,
318
+ scope: "local-eval-comparison",
319
+ productionAttested: false,
195
320
  baselineRunId: pair.length === 2 ? pair[0]?.runId || null : null,
196
321
  candidateRunId: pair.at(-1)?.runId || null,
197
322
  };
198
- if (uniqueReasons.length) return { ...base, status: "INSUFFICIENT_EVIDENCE", passed: false, reasons: uniqueReasons };
323
+ if (uniqueReasons.length)
324
+ return {
325
+ ...base,
326
+ status: "INSUFFICIENT_EVIDENCE",
327
+ passed: false,
328
+ reasons: uniqueReasons,
329
+ };
199
330
  const trend = computeTrend(pair, { regressionThreshold });
200
331
  const failed = trend.regressed || pair[1].passed !== pair[1].total;
201
- return { ...base, status: failed ? "FAIL" : "PASS", passed: !failed,
202
- reasons: failed ? [trend.regressed ? "task_regression" : "candidate_tasks_failed"] : [], trend };
332
+ return {
333
+ ...base,
334
+ status: failed ? "FAIL" : "PASS",
335
+ passed: !failed,
336
+ reasons: failed
337
+ ? [trend.regressed ? "task_regression" : "candidate_tasks_failed"]
338
+ : [],
339
+ trend,
340
+ };
203
341
  }