chainlesschain 0.166.20 → 0.166.21

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 (214) hide show
  1. package/package.json +2 -2
  2. package/src/assets/web-panel/assets/{AIOps-CcJst5Zs.js → AIOps-BjMnsUci.js} +1 -1
  3. package/src/assets/web-panel/assets/{ActionButton-BpHPFKd3.js → ActionButton-DdYFP03A.js} +1 -1
  4. package/src/assets/web-panel/assets/{Analytics-DHAsASuS.js → Analytics-Bb8TuuK_.js} +3 -3
  5. package/src/assets/web-panel/assets/{AppLayout-BTKwo5RC.js → AppLayout-Kn3TIOtk.js} +5 -5
  6. package/src/assets/web-panel/assets/{Artifacts-BcCBTggA.js → Artifacts-4IxpqI_b.js} +1 -1
  7. package/src/assets/web-panel/assets/{Audit-z1JvJYbT.js → Audit-BOV2caqU.js} +1 -1
  8. package/src/assets/web-panel/assets/{BackgroundAgents-CJ7DCMDR.js → BackgroundAgents-B86k-ay4.js} +1 -1
  9. package/src/assets/web-panel/assets/{Backup-CKpxw4uw.js → Backup-C5_ie1e3.js} +1 -1
  10. package/src/assets/web-panel/assets/{BaseInput-2jI_IlUB.js → BaseInput-xpwg6QCW.js} +1 -1
  11. package/src/assets/web-panel/assets/{Chat-C_4RfBeN.js → Chat-CVZOcZau.js} +5 -5
  12. package/src/assets/web-panel/assets/ChatBubbleRenderer-D8fPYhUu.js +1 -0
  13. package/src/assets/web-panel/assets/{Checkbox-BnF4z4N1.js → Checkbox-MKTq3zdP.js} +1 -1
  14. package/src/assets/web-panel/assets/{Codegen-m_LMamhM.js → Codegen-JUk3wzep.js} +1 -1
  15. package/src/assets/web-panel/assets/{Col-DzMbA760.js → Col-JPvTA0kC.js} +1 -1
  16. package/src/assets/web-panel/assets/{Community-SScuZUcW.js → Community-Tqgl87NQ.js} +1 -1
  17. package/src/assets/web-panel/assets/{Compact-CiOHRvwQ.js → Compact-BuAFYBmN.js} +1 -1
  18. package/src/assets/web-panel/assets/{Compliance-97FzYz-6.js → Compliance-CXS9WIPZ.js} +1 -1
  19. package/src/assets/web-panel/assets/{Cowork-C0ss-SRl.js → Cowork-Ds2bFHrr.js} +2 -2
  20. package/src/assets/web-panel/assets/{Cron-CCbdc9fp.js → Cron-C_dV_OeW.js} +2 -2
  21. package/src/assets/web-panel/assets/{Crosschain-BPnabXej.js → Crosschain-BsO6tIRo.js} +1 -1
  22. package/src/assets/web-panel/assets/{DID-B65hFnHs.js → DID-rNOFqBac.js} +2 -2
  23. package/src/assets/web-panel/assets/{Dashboard-B6qR_TF2.js → Dashboard-C2fcKKVY.js} +2 -2
  24. package/src/assets/web-panel/assets/{Dropdown-6c-2Fxm-.js → Dropdown-Y7Ndr0X_.js} +1 -1
  25. package/src/assets/web-panel/assets/{EmailListRenderer-GD57mfiz.js → EmailListRenderer-DcP_uPmL.js} +1 -1
  26. package/src/assets/web-panel/assets/{FamilyGuardDashboard-B2mxG6LN.js → FamilyGuardDashboard-Cwn3gDzk.js} +1 -1
  27. package/src/assets/web-panel/assets/{Federation-cZS-uvAo.js → Federation-ClQuOsqb.js} +1 -1
  28. package/src/assets/web-panel/assets/{FormItemContext-UbSfBIe1.js → FormItemContext-DfwtmlcK.js} +1 -1
  29. package/src/assets/web-panel/assets/GenericCardRenderer-zNZhtbC5.js +1 -0
  30. package/src/assets/web-panel/assets/{Git-DAlhOiDA.js → Git-BZmdW-G5.js} +2 -2
  31. package/src/assets/web-panel/assets/{Governance-B-RRVaP8.js → Governance-CqBk4lEn.js} +1 -1
  32. package/src/assets/web-panel/assets/{Inference-DBl-pXYR.js → Inference-Dbmt3ZXk.js} +1 -1
  33. package/src/assets/web-panel/assets/{KnowledgeGraph-DjqOkvgY.js → KnowledgeGraph-hMTH6qf3.js} +1 -1
  34. package/src/assets/web-panel/assets/{Logs-CEV7AEAD.js → Logs-CkiYgiW2.js} +2 -2
  35. package/src/assets/web-panel/assets/{MarkdownRenderer-BDCxa4d1.js → MarkdownRenderer-BL1FElXg.js} +1 -1
  36. package/src/assets/web-panel/assets/{Marketplace-oRjzfmYJ.js → Marketplace-CbB6wfin.js} +1 -1
  37. package/src/assets/web-panel/assets/{McpTools-BiTnznLw.js → McpTools-BSwiFtte.js} +3 -3
  38. package/src/assets/web-panel/assets/{Memory-DR0C5K4N.js → Memory-B03PeHrz.js} +2 -2
  39. package/src/assets/web-panel/assets/{MobileBridge--oR8wEcp.js → MobileBridge-CRGrnd-X.js} +1 -1
  40. package/src/assets/web-panel/assets/{MobileProjects-DKqpYMuG.js → MobileProjects-CE_5v2kO.js} +1 -1
  41. package/src/assets/web-panel/assets/{Mtc-Dg0D6fDQ.js → Mtc-Dp11QVx1.js} +2 -2
  42. package/src/assets/web-panel/assets/{MtcAudit-D4_-yWTK.js → MtcAudit-CYu-3JBu.js} +5 -5
  43. package/src/assets/web-panel/assets/{Multisig-Coz55FxA.js → Multisig-CGyJ0Xl3.js} +3 -3
  44. package/src/assets/web-panel/assets/{NLProgramming-BWVjgW9Y.js → NLProgramming-CoWi_ov1.js} +1 -1
  45. package/src/assets/web-panel/assets/{Notes-BflVuGwr.js → Notes-CgU9DDo9.js} +3 -3
  46. package/src/assets/web-panel/assets/{NotificationSettings-CT0F_dJ7.js → NotificationSettings-DX4I2b4W.js} +1 -1
  47. package/src/assets/web-panel/assets/OrderTableRenderer-CwHc15Zs.js +1 -0
  48. package/src/assets/web-panel/assets/{Organization-CMDTM2z5.js → Organization-oopLO_tk.js} +4 -4
  49. package/src/assets/web-panel/assets/{Overflow-acKvvYpC.js → Overflow-BFVvjMyf.js} +1 -1
  50. package/src/assets/web-panel/assets/{P2P-CRq5j9Ax.js → P2P-CBy5t-Tk.js} +2 -2
  51. package/src/assets/web-panel/assets/{PdhVaultBrowser-DmtzN6Kn.js → PdhVaultBrowser--YWJNsu6.js} +4 -4
  52. package/src/assets/web-panel/assets/{Permissions-SZ-kjJDa.js → Permissions-C2dZ8scb.js} +3 -3
  53. package/src/assets/web-panel/assets/{PersonalDataHub-DXh-ZfgJ.js → PersonalDataHub-Bs3l7Hlx.js} +6 -6
  54. package/src/assets/web-panel/assets/{Pipeline-DhBU9ftP.js → Pipeline-DEBWbZuD.js} +1 -1
  55. package/src/assets/web-panel/assets/{Privacy-BgEXpO_V.js → Privacy-CjHBb6NU.js} +1 -1
  56. package/src/assets/web-panel/assets/{ProjectInit-B2DJ-dmK.js → ProjectInit-D2WipUz5.js} +2 -2
  57. package/src/assets/web-panel/assets/{ProjectSettings-ve3SocWc.js → ProjectSettings-B6WfnrGB.js} +2 -2
  58. package/src/assets/web-panel/assets/{Projects-5ZvFasSJ.js → Projects-FF_thRi6.js} +1 -1
  59. package/src/assets/web-panel/assets/{Providers-C8fcF3BK.js → Providers-CCv5M_Dv.js} +1 -1
  60. package/src/assets/web-panel/assets/{QrScannerModal-unjO8lNO.js → QrScannerModal-CGthxU54.js} +1 -1
  61. package/src/assets/web-panel/assets/{QuickAsk-BT1QtT7D.js → QuickAsk-CnPmXPFb.js} +1 -1
  62. package/src/assets/web-panel/assets/{Recommend-BSjFrY1w.js → Recommend-Df_tGEa9.js} +1 -1
  63. package/src/assets/web-panel/assets/{RemoteSession-CWV0bICg.js → RemoteSession-Z58N0Loe.js} +2 -2
  64. package/src/assets/web-panel/assets/{Reputation-BMjiMsk2.js → Reputation-CZTBQ2Vt.js} +1 -1
  65. package/src/assets/web-panel/assets/{Row-9XCY22PM.js → Row-CdK3YpCQ.js} +1 -1
  66. package/src/assets/web-panel/assets/{RssFeed-DQ9PDy7Q.js → RssFeed-CFMVT5sb.js} +3 -3
  67. package/src/assets/web-panel/assets/{Search-Boym2HwG.js → Search-DrF8RIvD.js} +1 -1
  68. package/src/assets/web-panel/assets/{Security-Gbq3lGQb.js → Security-Ddk2f2DM.js} +4 -4
  69. package/src/assets/web-panel/assets/{Services-OcUfLdnu.js → Services-CCuK-VOo.js} +2 -2
  70. package/src/assets/web-panel/assets/{Skeleton-BjTog6cA.js → Skeleton-DxCpHzeM.js} +1 -1
  71. package/src/assets/web-panel/assets/{Skills-Dny4ft_1.js → Skills-t2oTDgcv.js} +1 -1
  72. package/src/assets/web-panel/assets/{Sla-Cy_VnhpZ.js → Sla-Df63M9_R.js} +1 -1
  73. package/src/assets/web-panel/assets/{SpeechSettings-CrFuL_lp.js → SpeechSettings-l7ox6KuX.js} +1 -1
  74. package/src/assets/web-panel/assets/{SyncSettings-k-FnjuOR.js → SyncSettings-COd_tgPp.js} +2 -2
  75. package/src/assets/web-panel/assets/{Tasks-ZEqDSo0_.js → Tasks-CzDCcrik.js} +1 -1
  76. package/src/assets/web-panel/assets/{Templates-CYYksYV5.js → Templates-D-vfxTGA.js} +1 -1
  77. package/src/assets/web-panel/assets/{Tenant-BvTTRTHS.js → Tenant-BlpT_Gxc.js} +1 -1
  78. package/src/assets/web-panel/assets/{Terminal-DMOQOtkj.js → Terminal-D5rq52Hg.js} +2 -2
  79. package/src/assets/web-panel/assets/TimelineRenderer-DdoMndkK.js +1 -0
  80. package/src/assets/web-panel/assets/{Tokens-VW6Wocdp.js → Tokens-BhgBsI6g.js} +1 -1
  81. package/src/assets/web-panel/assets/{Trigger-BtOxZqP6.js → Trigger-DwwzoikZ.js} +1 -1
  82. package/src/assets/web-panel/assets/{Trust-XcGJoTQx.js → Trust-HkTpzXFb.js} +1 -1
  83. package/src/assets/web-panel/assets/{UkeySign-aASNCs5j.js → UkeySign-D9nk6Ehe.js} +1 -1
  84. package/src/assets/web-panel/assets/{VideoEditing-Bz89M52u.js → VideoEditing-BKk0rfoy.js} +1 -1
  85. package/src/assets/web-panel/assets/{Wallet-uU4dSS_N.js → Wallet-IVWIU_Lq.js} +4 -4
  86. package/src/assets/web-panel/assets/{WebAuthn-Brrroxgr.js → WebAuthn-CFTCpfsG.js} +4 -4
  87. package/src/assets/web-panel/assets/{WorkflowEditor-Cny-evI9.js → WorkflowEditor-Dnf4Obif.js} +1 -1
  88. package/src/assets/web-panel/assets/{chat-CJ5iSwWq.js → chat-D2snERdj.js} +1 -1
  89. package/src/assets/web-panel/assets/{colors-DWa-2flG.js → colors-DKEjK1N1.js} +1 -1
  90. package/src/assets/web-panel/assets/{compact-item-DFwUfptU.js → compact-item-BEDLwQdt.js} +1 -1
  91. package/src/assets/web-panel/assets/{createContext-FHWWcyeB.js → createContext-DA9iW1a0.js} +1 -1
  92. package/src/assets/web-panel/assets/devWarning-DyhgpXPf.js +1 -0
  93. package/src/assets/web-panel/assets/{hasIn-QY_TElrN.js → hasIn-5l2xEcY9.js} +1 -1
  94. package/src/assets/web-panel/assets/{index-hw1J_Oxs.js → index-5pW4t1iD.js} +1 -1
  95. package/src/assets/web-panel/assets/{index-BR4RMPnB.js → index-7P1b8HZo.js} +1 -1
  96. package/src/assets/web-panel/assets/{index-BUNwuu5v.js → index-B00GeekA.js} +1 -1
  97. package/src/assets/web-panel/assets/{index-B18zERdP.js → index-B4QYBliR.js} +1 -1
  98. package/src/assets/web-panel/assets/{index-wqiOz655.js → index-B7_W_rYd.js} +1 -1
  99. package/src/assets/web-panel/assets/{index-BQCtBurK.js → index-BO9dQjpt.js} +1 -1
  100. package/src/assets/web-panel/assets/{index-DUfILsc-.js → index-BZ5lY2zx.js} +1 -1
  101. package/src/assets/web-panel/assets/{index-DUepuy7O.js → index-B_eCoZgW.js} +1 -1
  102. package/src/assets/web-panel/assets/{index-uRUZdL7I.js → index-BgfImyZI.js} +1 -1
  103. package/src/assets/web-panel/assets/{index-CUoLd1dt.js → index-Bq5P3piS.js} +1 -1
  104. package/src/assets/web-panel/assets/{index-BiHRihC0.js → index-Bqc8tdIF.js} +1 -1
  105. package/src/assets/web-panel/assets/{index-BcVr-LOk.js → index-C7sKbM5s.js} +1 -1
  106. package/src/assets/web-panel/assets/{index-DDpXDi4J.js → index-CGlotREA.js} +1 -1
  107. package/src/assets/web-panel/assets/{index-CjejB-z9.js → index-CRPrHE7h.js} +1 -1
  108. package/src/assets/web-panel/assets/{index-D2rPJ6Sv.js → index-CX1x4AFn.js} +1 -1
  109. package/src/assets/web-panel/assets/{index-w3SdYwaC.js → index-CbTPvp2_.js} +1 -1
  110. package/src/assets/web-panel/assets/{index-D-Mhq8K6.js → index-CjWltbi_.js} +1 -1
  111. package/src/assets/web-panel/assets/index-Ck1jhFE0.js +1 -0
  112. package/src/assets/web-panel/assets/{index-Bd7McYpJ.js → index-CkMKuqUs.js} +1 -1
  113. package/src/assets/web-panel/assets/{index-BYbwQ7SP.js → index-CmruhzFi.js} +1 -1
  114. package/src/assets/web-panel/assets/{index-2ufsNuVn.js → index-Csfb-7hw.js} +1 -1
  115. package/src/assets/web-panel/assets/{index-0umhind6.js → index-CxEtQYdi.js} +1 -1
  116. package/src/assets/web-panel/assets/{index-B33frlaD.js → index-D7z4zB_a.js} +1 -1
  117. package/src/assets/web-panel/assets/{index-Dy2PnKZx.js → index-DLoalqRX.js} +1 -1
  118. package/src/assets/web-panel/assets/{index-CUiTugu3.js → index-DU2TXJu-.js} +1 -1
  119. package/src/assets/web-panel/assets/{index-CGv5In_T.js → index-DXet1xol.js} +1 -1
  120. package/src/assets/web-panel/assets/{index-DCHMVYG1.js → index-Dbd7eEex.js} +1 -1
  121. package/src/assets/web-panel/assets/{index-th467RN6.js → index-Dbkghqn_.js} +1 -1
  122. package/src/assets/web-panel/assets/{index-CkmgbT7h.js → index-Dg2a9owQ.js} +1 -1
  123. package/src/assets/web-panel/assets/{index-aTiI7lOQ.js → index-DpqtbXdE.js} +1 -1
  124. package/src/assets/web-panel/assets/{index-C5F1vwec.js → index-DqwPFbOb.js} +3 -3
  125. package/src/assets/web-panel/assets/{index-DaHvj4jA.js → index-DvV03Ayk.js} +1 -1
  126. package/src/assets/web-panel/assets/{index-BRsGZBHc.js → index-NJieh3T1.js} +1 -1
  127. package/src/assets/web-panel/assets/{index-CeGn0A4W.js → index-Td8ZwyoC.js} +1 -1
  128. package/src/assets/web-panel/assets/index-c8jJEHVs.js +1 -0
  129. package/src/assets/web-panel/assets/{index-va4Rt-yM.js → index-e-e40id6.js} +1 -1
  130. package/src/assets/web-panel/assets/{index-CKS7n6mE.js → index-fccZmC_h.js} +1 -1
  131. package/src/assets/web-panel/assets/{index-BEjwv2x6.js → index-fgYk0QXO.js} +1 -1
  132. package/src/assets/web-panel/assets/{index-Dlq-u9E4.js → index-yYEQXYaU.js} +1 -1
  133. package/src/assets/web-panel/assets/{initDefaultProps-BeSPUFDz.js → initDefaultProps-CPrcB1TC.js} +1 -1
  134. package/src/assets/web-panel/assets/{motion-Dcajvjm9.js → motion-BQ7mWRh_.js} +1 -1
  135. package/src/assets/web-panel/assets/{move-B76orau-.js → move-CzOEq99p.js} +1 -1
  136. package/src/assets/web-panel/assets/{mtc-parser-zB6yFwcX.js → mtc-parser-BlQI5jrw.js} +1 -1
  137. package/src/assets/web-panel/assets/{omit-BsbNjz8w.js → omit-DlW4gxmv.js} +1 -1
  138. package/src/assets/web-panel/assets/{pickAttrs-BiJ9tssQ.js → pickAttrs-BBYms5nP.js} +1 -1
  139. package/src/assets/web-panel/assets/{placementArrow-BdfMjMeN.js → placementArrow-az2MPJ_7.js} +1 -1
  140. package/src/assets/web-panel/assets/{responsiveObserve-rV4LGpbU.js → responsiveObserve-D1-ibEol.js} +1 -1
  141. package/src/assets/web-panel/assets/{slide-HsVw1qFQ.js → slide-DHGqa4GA.js} +1 -1
  142. package/src/assets/web-panel/assets/{statusUtils-D1ry8XPE.js → statusUtils-CYGDo6lD.js} +1 -1
  143. package/src/assets/web-panel/assets/{styleChecker-B1t6aQQ_.js → styleChecker-Cl2EM9K6.js} +1 -1
  144. package/src/assets/web-panel/assets/{useFlexGapSupport-C8qbl-9w.js → useFlexGapSupport-DdYhzuv1.js} +1 -1
  145. package/src/assets/web-panel/assets/{useFs-R7g_mYTC.js → useFs-DWumPuBW.js} +1 -1
  146. package/src/assets/web-panel/assets/{usePersonalDataHub-Cd-kCe7Z.js → usePersonalDataHub-DxAO-Aqi.js} +1 -1
  147. package/src/assets/web-panel/assets/{vnode-9WhK5UWA.js → vnode-CplsQf_N.js} +1 -1
  148. package/src/assets/web-panel/assets/{zoom-CUqppPco.js → zoom-Cw5HXNSG.js} +1 -1
  149. package/src/assets/web-panel/index.html +1 -1
  150. package/src/command-help-index.json +2 -2
  151. package/src/commands/agent.js +19 -1
  152. package/src/commands/evolution-knowledge.js +54 -0
  153. package/src/commands/evolution-workbench.js +83 -0
  154. package/src/commands/evolution.js +6 -1
  155. package/src/commands/serve.js +16 -0
  156. package/src/commands/skill.js +158 -16
  157. package/src/data/changelog.json +13 -0
  158. package/src/gateways/ws/session-protocol.js +2 -0
  159. package/src/gateways/ws/ws-agent-handler.js +124 -69
  160. package/src/gateways/ws/ws-server.js +19 -0
  161. package/src/generated/cc-agent-protocol.schema.json +7 -1
  162. package/src/harness/jsonl-session-store.js +25 -1
  163. package/src/index.js +1 -1
  164. package/src/lib/app-server/cli-agent-kernel-adapter.js +8 -0
  165. package/src/lib/app-server/graph-runtime.js +40 -1
  166. package/src/lib/app-server/server.js +181 -3
  167. package/src/lib/app-server/websocket-transport.js +2 -0
  168. package/src/lib/evolution/agent-evolution-runtime-composition-brand.js +17 -0
  169. package/src/lib/evolution/agent-evolution-runtime-composition.js +165 -1
  170. package/src/lib/evolution/controlled-skill-production-pilot.js +912 -0
  171. package/src/lib/evolution/evolution-artifact-ports.js +21 -0
  172. package/src/lib/evolution/evolution-raw-crypto-shred.js +185 -0
  173. package/src/lib/evolution/evolution-workbench-batch-executor.js +195 -0
  174. package/src/lib/evolution/evolution-workbench-cli-host.js +169 -0
  175. package/src/lib/evolution/evolution-workbench-metrics-ledger-adapter.js +648 -0
  176. package/src/lib/evolution/evolution-workbench-metrics.js +943 -0
  177. package/src/lib/evolution/evolution-workbench-projection.js +734 -0
  178. package/src/lib/evolution/evolution-workbench-version-control.js +272 -0
  179. package/src/lib/evolution/governed-knowledge-conflict-merge.js +352 -0
  180. package/src/lib/evolution/governed-knowledge-dependency-authority.js +273 -0
  181. package/src/lib/evolution/governed-knowledge-dependency-ledger-executor.js +646 -0
  182. package/src/lib/evolution/governed-knowledge-merge-ledger-executor.js +644 -0
  183. package/src/lib/evolution/governed-knowledge-merge-publisher-authority.js +282 -0
  184. package/src/lib/evolution/governed-knowledge-node-crypto-authority.js +348 -0
  185. package/src/lib/evolution/governed-knowledge-rbac-approval-authority.js +621 -0
  186. package/src/lib/evolution/governed-knowledge-review-host.js +249 -0
  187. package/src/lib/evolution/governed-knowledge-sync-ledger-adapter.js +643 -0
  188. package/src/lib/evolution/governed-knowledge-sync-merge-publisher.js +259 -0
  189. package/src/lib/evolution/governed-knowledge-sync.js +485 -0
  190. package/src/lib/evolution/governed-knowledge-trust-ledger.js +707 -0
  191. package/src/lib/evolution/governed-skill-marketplace.js +430 -0
  192. package/src/lib/evolution/governed-wiki-pruning.js +435 -0
  193. package/src/lib/evolution/skill-outcome-index-authority.js +268 -0
  194. package/src/lib/evolution/skill-outcome-source-catalog-authority.js +237 -0
  195. package/src/lib/public-ide-capability-manifest.js +4 -0
  196. package/src/lib/skill-outcome-authority.js +43 -0
  197. package/src/lib/skill-outcome-transcript-authority.js +252 -0
  198. package/src/lib/skill-retrieval-router-benchmark.js +135 -0
  199. package/src/lib/skill-retrieval-router.js +235 -0
  200. package/src/lib/skill-vector-authority.js +325 -0
  201. package/src/lib/skill-vector-process-authority.js +386 -0
  202. package/src/repl/agent-repl.js +7 -1
  203. package/src/runtime/agent-core.js +72 -6
  204. package/src/runtime/agent-runtime.js +42 -0
  205. package/src/runtime/headless-runner.js +32 -0
  206. package/src/runtime/headless-stream.js +36 -1
  207. package/src/runtime/runtime-factory.js +62 -4
  208. package/src/assets/web-panel/assets/ChatBubbleRenderer-eMmw1eZF.js +0 -1
  209. package/src/assets/web-panel/assets/GenericCardRenderer-BMAtvGt1.js +0 -1
  210. package/src/assets/web-panel/assets/OrderTableRenderer-Dyrnqy_o.js +0 -1
  211. package/src/assets/web-panel/assets/TimelineRenderer-CnudkJxk.js +0 -1
  212. package/src/assets/web-panel/assets/devWarning-DxufPwXC.js +0 -1
  213. package/src/assets/web-panel/assets/index-ZMTB9p5z.js +0 -1
  214. package/src/assets/web-panel/assets/index-_PvIDelE.js +0 -1
@@ -0,0 +1,386 @@
1
+ import { createHash } from "node:crypto";
2
+ import fs from "node:fs";
3
+ import path from "node:path";
4
+ import { types as utilTypes } from "node:util";
5
+
6
+ import { executionBroker } from "./process-execution-broker/index.js";
7
+ import { createSkillVectorAuthority } from "./skill-vector-authority.js";
8
+
9
+ export const SKILL_VECTOR_PROCESS_REQUEST_SCHEMA =
10
+ "chainlesschain.skill-vector-process-request/v1";
11
+
12
+ const DIGEST = /^sha256:[a-f0-9]{64}$/u;
13
+ const SAFE_ID = /^[A-Za-z0-9][A-Za-z0-9._:@/-]{0,255}$/u;
14
+ const WORKER_KEYS = new Set([
15
+ "arguments",
16
+ "cwd",
17
+ "entryDigest",
18
+ "entryPath",
19
+ "environment",
20
+ "executableDigest",
21
+ "executablePath",
22
+ "identity",
23
+ ]);
24
+ const DEFAULT_TIMEOUT_MS = 10_000;
25
+ const DEFAULT_MAX_INPUT_BYTES = 12 * 1024 * 1024;
26
+ const DEFAULT_MAX_OUTPUT_BYTES = 4 * 1024 * 1024;
27
+ const MAX_STDERR_BYTES = 64 * 1024;
28
+ const MAX_EXECUTABLE_BYTES = 512 * 1024 * 1024;
29
+ const MAX_ENTRY_BYTES = 16 * 1024 * 1024;
30
+ const PROCESS_DEPS = Object.freeze({
31
+ spawn: (...args) => executionBroker.spawn(...args),
32
+ });
33
+
34
+ function plainRecord(value, label, allowedKeys = null) {
35
+ if (
36
+ !value ||
37
+ typeof value !== "object" ||
38
+ Array.isArray(value) ||
39
+ utilTypes.isProxy(value) ||
40
+ ![Object.prototype, null].includes(Object.getPrototypeOf(value)) ||
41
+ (allowedKeys &&
42
+ Reflect.ownKeys(value).some(
43
+ (key) => typeof key !== "string" || !allowedKeys.has(key),
44
+ ))
45
+ ) {
46
+ throw new TypeError(`${label} is invalid`);
47
+ }
48
+ return value;
49
+ }
50
+
51
+ function identifier(value, label) {
52
+ if (typeof value !== "string" || !SAFE_ID.test(value)) {
53
+ throw new TypeError(`${label} is invalid`);
54
+ }
55
+ return value;
56
+ }
57
+
58
+ function pinnedDigest(value, label) {
59
+ if (typeof value !== "string" || !DIGEST.test(value)) {
60
+ throw new TypeError(`${label} must be sha256-bound`);
61
+ }
62
+ return value;
63
+ }
64
+
65
+ function absolutePath(value, label) {
66
+ if (
67
+ typeof value !== "string" ||
68
+ value.includes("\0") ||
69
+ !path.isAbsolute(value) ||
70
+ path.normalize(value) !== value
71
+ ) {
72
+ throw new TypeError(`${label} must be a normalized absolute path`);
73
+ }
74
+ return value;
75
+ }
76
+
77
+ function boundedInteger(value, fallback, label, maximum) {
78
+ const normalized = value === undefined ? fallback : value;
79
+ if (
80
+ !Number.isSafeInteger(normalized) ||
81
+ normalized < 1 ||
82
+ normalized > maximum
83
+ ) {
84
+ throw new TypeError(`${label} is invalid or unbounded`);
85
+ }
86
+ return normalized;
87
+ }
88
+
89
+ function normalizeArguments(value, label) {
90
+ if (value === undefined) return Object.freeze([]);
91
+ if (!Array.isArray(value) || utilTypes.isProxy(value) || value.length > 64) {
92
+ throw new TypeError(`${label} is invalid or unbounded`);
93
+ }
94
+ let bytes = 0;
95
+ const result = value.map((argument, index) => {
96
+ if (
97
+ typeof argument !== "string" ||
98
+ argument.includes("\0") ||
99
+ Buffer.byteLength(argument, "utf8") > 4096
100
+ ) {
101
+ throw new TypeError(`${label}[${index}] is invalid or unbounded`);
102
+ }
103
+ bytes += Buffer.byteLength(argument, "utf8");
104
+ return argument;
105
+ });
106
+ if (bytes > 32 * 1024) {
107
+ throw new TypeError(`${label} is invalid or unbounded`);
108
+ }
109
+ return Object.freeze(result);
110
+ }
111
+
112
+ function normalizeEnvironment(value, label) {
113
+ if (value === undefined) return Object.freeze({});
114
+ plainRecord(value, label);
115
+ const entries = Object.entries(value);
116
+ if (entries.length > 64) {
117
+ throw new TypeError(`${label} is invalid or unbounded`);
118
+ }
119
+ let bytes = 0;
120
+ const result = Object.create(null);
121
+ const normalizedKeys = new Set();
122
+ for (const [key, entry] of entries.sort(([left], [right]) =>
123
+ left.localeCompare(right),
124
+ )) {
125
+ const normalizedKey =
126
+ process.platform === "win32" ? key.toLowerCase() : key;
127
+ if (
128
+ !/^[A-Za-z_][A-Za-z0-9_]{0,127}$/u.test(key) ||
129
+ normalizedKeys.has(normalizedKey) ||
130
+ typeof entry !== "string" ||
131
+ entry.includes("\0") ||
132
+ Buffer.byteLength(entry, "utf8") > 16 * 1024
133
+ ) {
134
+ throw new TypeError(`${label}.${key} is invalid or unbounded`);
135
+ }
136
+ bytes += Buffer.byteLength(key, "utf8") + Buffer.byteLength(entry, "utf8");
137
+ normalizedKeys.add(normalizedKey);
138
+ result[key] = entry;
139
+ }
140
+ if (bytes > 32 * 1024) {
141
+ throw new TypeError(`${label} is invalid or unbounded`);
142
+ }
143
+ return Object.freeze(result);
144
+ }
145
+
146
+ function normalizeWorker(value, label) {
147
+ plainRecord(value, label, WORKER_KEYS);
148
+ return Object.freeze({
149
+ identity: identifier(value.identity, `${label}.identity`),
150
+ executablePath: absolutePath(
151
+ value.executablePath,
152
+ `${label}.executablePath`,
153
+ ),
154
+ executableDigest: pinnedDigest(
155
+ value.executableDigest,
156
+ `${label}.executableDigest`,
157
+ ),
158
+ entryPath: absolutePath(value.entryPath, `${label}.entryPath`),
159
+ entryDigest: pinnedDigest(value.entryDigest, `${label}.entryDigest`),
160
+ arguments: normalizeArguments(value.arguments, `${label}.arguments`),
161
+ cwd: absolutePath(value.cwd, `${label}.cwd`),
162
+ environment: normalizeEnvironment(
163
+ value.environment,
164
+ `${label}.environment`,
165
+ ),
166
+ });
167
+ }
168
+
169
+ function fileDigest(filePath) {
170
+ return `sha256:${createHash("sha256").update(fs.readFileSync(filePath)).digest("hex")}`;
171
+ }
172
+
173
+ function samePath(left, right) {
174
+ return process.platform === "win32"
175
+ ? left.toLowerCase() === right.toLowerCase()
176
+ : left === right;
177
+ }
178
+
179
+ function assertPinnedFile(filePath, expectedDigest, label, maximumBytes) {
180
+ const stat = fs.lstatSync(filePath);
181
+ if (
182
+ !stat.isFile() ||
183
+ stat.isSymbolicLink() ||
184
+ stat.size < 1 ||
185
+ stat.size > maximumBytes
186
+ ) {
187
+ throw new Error(`${label} is not a regular pinned file`);
188
+ }
189
+ const realPath = fs.realpathSync.native(filePath);
190
+ if (!samePath(realPath, filePath)) {
191
+ throw new Error(`${label} does not resolve to its pinned path`);
192
+ }
193
+ if (fileDigest(filePath) !== expectedDigest) {
194
+ throw new Error(`${label} digest changed`);
195
+ }
196
+ }
197
+
198
+ function assertWorkerIdentity(worker, label) {
199
+ assertPinnedFile(
200
+ worker.executablePath,
201
+ worker.executableDigest,
202
+ `${label} executable`,
203
+ MAX_EXECUTABLE_BYTES,
204
+ );
205
+ assertPinnedFile(
206
+ worker.entryPath,
207
+ worker.entryDigest,
208
+ `${label} entry`,
209
+ MAX_ENTRY_BYTES,
210
+ );
211
+ const cwd = fs.realpathSync.native(worker.cwd);
212
+ if (!samePath(cwd, worker.cwd) || !fs.statSync(cwd).isDirectory()) {
213
+ throw new Error(`${label} cwd does not resolve to its pinned directory`);
214
+ }
215
+ }
216
+
217
+ function processFailure(code) {
218
+ const error = new Error(`Skill vector process failed closed (${code})`);
219
+ error.code = code;
220
+ return error;
221
+ }
222
+
223
+ async function invokeWorker(
224
+ worker,
225
+ role,
226
+ payload,
227
+ { timeoutMs, maxInputBytes, maxOutputBytes },
228
+ ) {
229
+ assertWorkerIdentity(worker, role);
230
+ const input = Buffer.from(
231
+ `${JSON.stringify({
232
+ schema: SKILL_VECTOR_PROCESS_REQUEST_SCHEMA,
233
+ role,
234
+ payload,
235
+ })}\n`,
236
+ "utf8",
237
+ );
238
+ if (input.length > maxInputBytes) {
239
+ throw processFailure("CC_SKILL_VECTOR_PROCESS_INPUT_LIMIT");
240
+ }
241
+
242
+ const output = await new Promise((resolve, reject) => {
243
+ let settled = false;
244
+ let pendingFailure = null;
245
+ let timer = null;
246
+ let stdoutBytes = 0;
247
+ let stderrBytes = 0;
248
+ const stdout = [];
249
+ const child = PROCESS_DEPS.spawn(
250
+ worker.executablePath,
251
+ [worker.entryPath, ...worker.arguments],
252
+ {
253
+ cwd: worker.cwd,
254
+ env: { ...worker.environment },
255
+ shell: false,
256
+ windowsHide: true,
257
+ stdio: ["pipe", "pipe", "pipe"],
258
+ origin: "skill-vector-process-authority",
259
+ scope: "evolution",
260
+ policy: "allow",
261
+ auditRedactArgIndexes: worker.arguments.map((_, index) => index + 1),
262
+ },
263
+ );
264
+ const terminate = (error) => {
265
+ if (settled || pendingFailure) return;
266
+ pendingFailure = error;
267
+ if (child.exitCode === null) child.kill("SIGKILL");
268
+ };
269
+ timer = setTimeout(() => {
270
+ terminate(processFailure("CC_SKILL_VECTOR_PROCESS_TIMEOUT"));
271
+ }, timeoutMs);
272
+ timer.unref?.();
273
+ child.once("error", () => {
274
+ terminate(processFailure("CC_SKILL_VECTOR_PROCESS_SPAWN_FAILED"));
275
+ });
276
+ child.stdout.on("data", (chunk) => {
277
+ if (pendingFailure) return;
278
+ stdoutBytes += chunk.length;
279
+ if (stdoutBytes > maxOutputBytes) {
280
+ terminate(processFailure("CC_SKILL_VECTOR_PROCESS_OUTPUT_LIMIT"));
281
+ return;
282
+ }
283
+ stdout.push(chunk);
284
+ });
285
+ child.stderr.on("data", (chunk) => {
286
+ if (pendingFailure) return;
287
+ stderrBytes += chunk.length;
288
+ if (stderrBytes > MAX_STDERR_BYTES) {
289
+ terminate(processFailure("CC_SKILL_VECTOR_PROCESS_STDERR_LIMIT"));
290
+ }
291
+ });
292
+ child.once("close", (code, signal) => {
293
+ if (settled) return;
294
+ settled = true;
295
+ clearTimeout(timer);
296
+ if (pendingFailure) {
297
+ reject(pendingFailure);
298
+ return;
299
+ }
300
+ if (code !== 0 || signal !== null) {
301
+ reject(processFailure("CC_SKILL_VECTOR_PROCESS_EXITED"));
302
+ return;
303
+ }
304
+ resolve(Buffer.concat(stdout).toString("utf8"));
305
+ });
306
+ child.stdin.once("error", () => {
307
+ terminate(processFailure("CC_SKILL_VECTOR_PROCESS_STDIN_FAILED"));
308
+ });
309
+ child.stdin.end(input);
310
+ });
311
+
312
+ assertWorkerIdentity(worker, role);
313
+ const text = output.trim();
314
+ if (text === "" || Buffer.byteLength(text, "utf8") > maxOutputBytes) {
315
+ throw processFailure("CC_SKILL_VECTOR_PROCESS_EMPTY_OUTPUT");
316
+ }
317
+ try {
318
+ const parsed = JSON.parse(text);
319
+ plainRecord(parsed, `${role} process result`);
320
+ return parsed;
321
+ } catch (error) {
322
+ if (error?.code?.startsWith?.("CC_SKILL_VECTOR_")) throw error;
323
+ throw processFailure("CC_SKILL_VECTOR_PROCESS_INVALID_JSON");
324
+ }
325
+ }
326
+
327
+ /**
328
+ * Creates the existing branded vector authority over two independently pinned
329
+ * JSON worker processes. The host supplies all executable and entry digests;
330
+ * no PATH lookup, shell, inherited environment, local key or permissive
331
+ * verifier fallback is used.
332
+ */
333
+ export function createSkillVectorProcessAuthority({
334
+ tenantId,
335
+ provider: providerInput,
336
+ verifier: verifierInput,
337
+ timeoutMs: timeoutInput,
338
+ maxInputBytes: maxInputInput,
339
+ maxOutputBytes: maxOutputInput,
340
+ } = {}) {
341
+ const provider = normalizeWorker(providerInput, "provider");
342
+ const verifier = normalizeWorker(verifierInput, "verifier");
343
+ if (
344
+ provider.identity === verifier.identity ||
345
+ provider.entryDigest === verifier.entryDigest
346
+ ) {
347
+ throw new TypeError(
348
+ "Skill vector provider and verifier must be independent",
349
+ );
350
+ }
351
+ const limits = Object.freeze({
352
+ timeoutMs: boundedInteger(
353
+ timeoutInput,
354
+ DEFAULT_TIMEOUT_MS,
355
+ "timeoutMs",
356
+ 60_000,
357
+ ),
358
+ maxInputBytes: boundedInteger(
359
+ maxInputInput,
360
+ DEFAULT_MAX_INPUT_BYTES,
361
+ "maxInputBytes",
362
+ 16 * 1024 * 1024,
363
+ ),
364
+ maxOutputBytes: boundedInteger(
365
+ maxOutputInput,
366
+ DEFAULT_MAX_OUTPUT_BYTES,
367
+ "maxOutputBytes",
368
+ 8 * 1024 * 1024,
369
+ ),
370
+ });
371
+ assertWorkerIdentity(provider, "provider");
372
+ assertWorkerIdentity(verifier, "verifier");
373
+ return createSkillVectorAuthority({
374
+ tenantId,
375
+ provider: Object.freeze({
376
+ score: Object.freeze((request) =>
377
+ invokeWorker(provider, "provider", request, limits),
378
+ ),
379
+ }),
380
+ verifier: Object.freeze({
381
+ verify: Object.freeze((request) =>
382
+ invokeWorker(verifier, "verifier", request, limits),
383
+ ),
384
+ }),
385
+ });
386
+ }
@@ -739,6 +739,7 @@ export async function agentLoop(messages, options) {
739
739
  tool: event?.tool || started?.tool || "?",
740
740
  isError: Boolean(event?.error || event?.result?.error),
741
741
  skill: event?.attribution?.skill,
742
+ invocationReceipt: event?.result?.invocationReceipt,
742
743
  durationMs: started
743
744
  ? Math.max(
744
745
  0,
@@ -918,9 +919,13 @@ export async function agentLoop(messages, options) {
918
919
  : undefined,
919
920
  ...extractPluginUsageAttribution(event.result),
920
921
  durationMs,
922
+ invocationReceipt: event.result?.invocationReceipt,
921
923
  });
922
924
  } catch (_e) {
923
- if (options.persistUsageTelemetry === true) {
925
+ if (
926
+ event.result?.invocationReceipt ||
927
+ options.persistUsageTelemetry === true
928
+ ) {
924
929
  throw markRuntimeLedgerPersistenceError(_e);
925
930
  }
926
931
  // Legacy non-JSONL persistence remains best-effort.
@@ -9638,6 +9643,7 @@ async function startAgentReplInWorkspaceOwned(
9638
9643
  sessionId,
9639
9644
  persistUsageTelemetry: useJsonl,
9640
9645
  skillLoader: _replSkillLoader,
9646
+ skillOutcomeIndex: options.skillOutcomeIndex,
9641
9647
  cwd: process.cwd(),
9642
9648
  additionalDirectories,
9643
9649
  sandbox: _sandbox,
@@ -45,6 +45,12 @@ import {
45
45
  } from "../lib/lsp/workspace-roots.js";
46
46
  import { getPlanModeManager } from "../lib/plan-mode.js";
47
47
  import { CLISkillLoader } from "../lib/skill-loader.js";
48
+ import { routeSkillDescriptors } from "../lib/skill-retrieval-router.js";
49
+ import { resolveSkillOutcomeAuthority } from "../lib/skill-outcome-authority.js";
50
+ import {
51
+ captureSkillVectorAuthority,
52
+ unavailableSkillVectorEvidence,
53
+ } from "../lib/skill-vector-authority.js";
48
54
  import {
49
55
  admitSkillPrompt,
50
56
  debitSkillPromptBudget,
@@ -3549,6 +3555,8 @@ export async function executeTool(name, args, context = {}) {
3549
3555
  skillLoader,
3550
3556
  // Subagent skill capability INTERSECT — forwarded to run_skill/list_skills.
3551
3557
  skillAllowlist: context.skillAllowlist ?? null,
3558
+ skillOutcomeIndex: context.skillOutcomeIndex,
3559
+ skillVectorAuthority: context.skillVectorAuthority,
3552
3560
  cwd,
3553
3561
  parentMessages: context.parentMessages,
3554
3562
  interaction: context.interaction,
@@ -5091,6 +5099,8 @@ async function executeToolInner(
5091
5099
  {
5092
5100
  skillLoader,
5093
5101
  skillAllowlist = null,
5102
+ skillOutcomeIndex,
5103
+ skillVectorAuthority,
5094
5104
  cwd,
5095
5105
  parentMessages,
5096
5106
  interaction,
@@ -8201,14 +8211,38 @@ async function executeToolInner(
8201
8211
  (s) => s.category.toLowerCase() === args.category.toLowerCase(),
8202
8212
  );
8203
8213
  }
8214
+ let routing = null;
8215
+ let outcomeAuthority = null;
8216
+ let vector = null;
8204
8217
  if (args.query) {
8205
- const q = args.query.toLowerCase();
8206
- skills = skills.filter(
8207
- (s) =>
8208
- s.id.includes(q) ||
8209
- s.description.toLowerCase().includes(q) ||
8210
- s.category.toLowerCase().includes(q),
8218
+ outcomeAuthority = resolveSkillOutcomeAuthority(
8219
+ skillOutcomeIndex === undefined ? {} : { index: skillOutcomeIndex },
8220
+ );
8221
+ const vectorAuthority =
8222
+ skillVectorAuthority == null
8223
+ ? null
8224
+ : captureSkillVectorAuthority(skillVectorAuthority);
8225
+ vector =
8226
+ vectorAuthority === null
8227
+ ? null
8228
+ : await vectorAuthority.score({ query: args.query, skills });
8229
+ routing = routeSkillDescriptors({
8230
+ skills,
8231
+ query: args.query,
8232
+ target: { os: process.platform },
8233
+ vectorScores: vector?.scores ?? null,
8234
+ outcomeMetrics: outcomeAuthority.metrics,
8235
+ topK: Math.min(64, Math.max(1, skills.length)),
8236
+ });
8237
+ const byDigest = new Map(
8238
+ skills.map((skill) => [
8239
+ skill.executionIdentity?.contentDigest,
8240
+ skill,
8241
+ ]),
8211
8242
  );
8243
+ skills = routing.candidates
8244
+ .map(({ digest }) => byDigest.get(digest))
8245
+ .filter(Boolean);
8212
8246
  }
8213
8247
  skillLoader.recordDescriptorUse?.(skills, {
8214
8248
  sessionId,
@@ -8217,12 +8251,42 @@ async function executeToolInner(
8217
8251
  });
8218
8252
  return attachDescriptor({
8219
8253
  count: skills.length,
8254
+ ...(routing
8255
+ ? {
8256
+ routing: {
8257
+ schema: routing.schema,
8258
+ selectedDigest: routing.selected?.digest || null,
8259
+ conflicts: routing.conflicts,
8260
+ rejectedCount: routing.rejected.length,
8261
+ vectorAvailable: routing.vectorAvailable,
8262
+ vectorAuthority:
8263
+ vector?.evidence ?? unavailableSkillVectorEvidence(),
8264
+ outcomeAuthority: outcomeAuthority.evidence,
8265
+ },
8266
+ }
8267
+ : {}),
8220
8268
  skills: skills.map((s) => ({
8221
8269
  id: s.id,
8222
8270
  category: s.category,
8223
8271
  source: s.source,
8224
8272
  hasHandler: s.hasHandler,
8225
8273
  description: (s.description || "").substring(0, 80),
8274
+ ...(routing
8275
+ ? (() => {
8276
+ const candidate = routing.candidates.find(
8277
+ ({ digest }) => digest === s.executionIdentity?.contentDigest,
8278
+ );
8279
+ return candidate
8280
+ ? {
8281
+ digest: candidate.digest,
8282
+ version: candidate.version,
8283
+ contextCostTokens: candidate.contextCostTokens,
8284
+ routeScore: candidate.score,
8285
+ routeReason: candidate.reason,
8286
+ }
8287
+ : {};
8288
+ })()
8289
+ : {}),
8226
8290
  })),
8227
8291
  });
8228
8292
  }
@@ -13160,6 +13224,8 @@ export async function* agentLoop(messages, options) {
13160
13224
  const toolContext = {
13161
13225
  hookDb: hermeticExecution ? null : options.hookDb || null,
13162
13226
  skillLoader: options.skillLoader || _defaultSkillLoader,
13227
+ skillOutcomeIndex: options.skillOutcomeIndex,
13228
+ skillVectorAuthority: options.skillVectorAuthority,
13163
13229
  // Hook-envelope tracing (P2 unified event bus): every settings-hook payload
13164
13230
  // fired during this run carries trace_id = this run's id; a spawned child
13165
13231
  // loop carries parent_id = the spawning run's id (threaded by
@@ -34,6 +34,8 @@ import { registerHostHooksV2Workspace } from "../lib/hooks-v2-workspace-context.
34
34
  import { captureStructuredMemoryPolicyReceiptWriter } from "../lib/evolution/structured-memory-policy-receipt-writer.js";
35
35
  import { captureStructuredMemoryAgentControlPlane } from "../lib/evolution/structured-memory-agent-control-plane.js";
36
36
  import { captureAgentEvolutionIngress } from "../lib/evolution/agent-evolution-ingress.js";
37
+ import { captureAgentSkillOutcomeIndex } from "../lib/evolution/agent-evolution-runtime-composition-brand.js";
38
+ import { captureSkillVectorAuthority } from "../lib/skill-vector-authority.js";
37
39
 
38
40
  const {
39
41
  DEFAULT_ALLOWED_MCP_SERVER_NAMES,
@@ -69,6 +71,34 @@ export class AgentRuntime {
69
71
  deps.evolutionIngress == null
70
72
  ? null
71
73
  : captureAgentEvolutionIngress(deps.evolutionIngress);
74
+ this.skillOutcomeIndex =
75
+ deps.skillOutcomeIndex == null
76
+ ? null
77
+ : captureAgentSkillOutcomeIndex(deps.skillOutcomeIndex);
78
+ this.skillVectorAuthority =
79
+ deps.skillVectorAuthority == null
80
+ ? null
81
+ : captureSkillVectorAuthority(deps.skillVectorAuthority);
82
+ if (
83
+ this.evolutionIngress !== null &&
84
+ this.skillOutcomeIndex !== null &&
85
+ this.evolutionIngress.tenantId !== this.skillOutcomeIndex.tenantId
86
+ ) {
87
+ throw new Error(
88
+ "Agent evolution ingress and Skill outcome index must share one tenant",
89
+ );
90
+ }
91
+ const retrievalTenant =
92
+ this.evolutionIngress?.tenantId ??
93
+ this.skillOutcomeIndex?.tenantId ??
94
+ null;
95
+ if (
96
+ retrievalTenant !== null &&
97
+ this.skillVectorAuthority !== null &&
98
+ retrievalTenant !== this.skillVectorAuthority.tenantId
99
+ ) {
100
+ throw new Error("Agent retrieval authorities must share one tenant");
101
+ }
72
102
  this.structuredMemoryControlPlane =
73
103
  deps.structuredMemoryControlPlane == null
74
104
  ? null
@@ -297,6 +327,12 @@ export class AgentRuntime {
297
327
  ...(this.evolutionIngress === null
298
328
  ? {}
299
329
  : { evolutionIngress: this.evolutionIngress }),
330
+ ...(this.skillOutcomeIndex === null
331
+ ? {}
332
+ : { skillOutcomeIndex: this.skillOutcomeIndex }),
333
+ ...(this.skillVectorAuthority === null
334
+ ? {}
335
+ : { skillVectorAuthority: this.skillVectorAuthority }),
300
336
  });
301
337
  if (this.evolutionIngress !== null) {
302
338
  await this.evolutionIngress.complete();
@@ -468,6 +504,12 @@ export class AgentRuntime {
468
504
  remoteSessionPeerId,
469
505
  envelopeBus,
470
506
  evolutionCompositionFactory: this.deps.evolutionCompositionFactory,
507
+ ...(this.skillOutcomeIndex === null
508
+ ? {}
509
+ : { skillOutcomeIndex: this.skillOutcomeIndex }),
510
+ ...(this.skillVectorAuthority === null
511
+ ? {}
512
+ : { skillVectorAuthority: this.skillVectorAuthority }),
471
513
  });
472
514
 
473
515
  server.on("connection", ({ clientId, ip }) => {
@@ -121,6 +121,8 @@ import { createBackgroundPhaseReporter } from "../lib/background-phase-reporter.
121
121
  import { createBackgroundInteractionClient } from "../lib/background-interaction-resolver.js";
122
122
  import { withQuietStdout } from "./quiet-stdout.js";
123
123
  import { captureAgentEvolutionIngress } from "../lib/evolution/agent-evolution-ingress.js";
124
+ import { captureAgentSkillOutcomeIndex } from "../lib/evolution/agent-evolution-runtime-composition-brand.js";
125
+ import { captureSkillVectorAuthority } from "../lib/skill-vector-authority.js";
124
126
  import { CostBudget } from "../lib/cost-budget.js";
125
127
  import { estimateTokens } from "../harness/prompt-compressor.js";
126
128
  import {
@@ -659,6 +661,32 @@ async function runAgentHeadlessInWorkspace(
659
661
  options.evolutionIngress == null
660
662
  ? null
661
663
  : captureAgentEvolutionIngress(options.evolutionIngress);
664
+ const skillOutcomeIndex =
665
+ options.skillOutcomeIndex == null
666
+ ? null
667
+ : captureAgentSkillOutcomeIndex(options.skillOutcomeIndex);
668
+ const skillVectorAuthority =
669
+ options.skillVectorAuthority == null
670
+ ? null
671
+ : captureSkillVectorAuthority(options.skillVectorAuthority);
672
+ if (
673
+ evolutionIngress !== null &&
674
+ skillOutcomeIndex !== null &&
675
+ evolutionIngress.tenantId !== skillOutcomeIndex.tenantId
676
+ ) {
677
+ throw new TypeError(
678
+ "Agent evolution ingress and Skill outcome index must share one tenant",
679
+ );
680
+ }
681
+ const retrievalTenant =
682
+ evolutionIngress?.tenantId ?? skillOutcomeIndex?.tenantId ?? null;
683
+ if (
684
+ retrievalTenant !== null &&
685
+ skillVectorAuthority !== null &&
686
+ retrievalTenant !== skillVectorAuthority.tenantId
687
+ ) {
688
+ throw new TypeError("Agent retrieval authorities must share one tenant");
689
+ }
662
690
  const prompt = (options.prompt || "").trim();
663
691
  if (!prompt) {
664
692
  throw new Error(
@@ -2449,6 +2477,8 @@ async function runAgentHeadlessInWorkspace(
2449
2477
  apiKey,
2450
2478
  cwd,
2451
2479
  skillLoader: _runtimeSkillLoader,
2480
+ ...(skillOutcomeIndex === null ? {} : { skillOutcomeIndex }),
2481
+ ...(skillVectorAuthority === null ? {} : { skillVectorAuthority }),
2452
2482
  additionalDirectories,
2453
2483
  sandbox: options.sandbox || null,
2454
2484
  sessionId,
@@ -2605,6 +2635,7 @@ async function runAgentHeadlessInWorkspace(
2605
2635
  tool: event?.tool || started?.tool || "?",
2606
2636
  isError: Boolean(event?.error || event?.result?.error),
2607
2637
  skill: event?.attribution?.skill,
2638
+ invocationReceipt: event?.result?.invocationReceipt,
2608
2639
  durationMs: started
2609
2640
  ? Math.max(
2610
2641
  0,
@@ -3211,6 +3242,7 @@ async function runAgentHeadlessInWorkspace(
3211
3242
  plugin: settledCall.plugin || undefined,
3212
3243
  pluginVersion: settledCall.pluginVersion || undefined,
3213
3244
  durationMs: settledCall.durationMs,
3245
+ invocationReceipt: event.result?.invocationReceipt,
3214
3246
  }),
3215
3247
  );
3216
3248
  }