chainlesschain 0.166.37 → 0.166.39

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 (193) hide show
  1. package/package.json +7 -2
  2. package/scripts/governed-learning-local-attestor-service.mjs +222 -0
  3. package/scripts/governed-learning-local-attestor-trust-approval-service.mjs +338 -0
  4. package/scripts/governed-learning-local-attestor-trust-operations-service.mjs +575 -0
  5. package/scripts/governed-learning-windows-secure-pipe-broker.ps1 +375 -0
  6. package/src/assets/web-panel/assets/{AIOps-B_Nt1Qe4.js → AIOps-qWUdiFr5.js} +1 -1
  7. package/src/assets/web-panel/assets/{ActionButton-CHQbie4X.js → ActionButton-B_f7go3E.js} +1 -1
  8. package/src/assets/web-panel/assets/{Analytics-Bm9364Lw.js → Analytics-hSGFlSkB.js} +3 -3
  9. package/src/assets/web-panel/assets/{AppLayout-DTwlIh2v.js → AppLayout-CCYGgj71.js} +3 -3
  10. package/src/assets/web-panel/assets/{Artifacts-OibP0qB4.js → Artifacts-BdS1H9gq.js} +1 -1
  11. package/src/assets/web-panel/assets/{Audit-B8Fwavkg.js → Audit-Cck9IebC.js} +1 -1
  12. package/src/assets/web-panel/assets/{BackgroundAgents-p1Vb2K2B.js → BackgroundAgents-DZzoM_QS.js} +1 -1
  13. package/src/assets/web-panel/assets/{Backup-BI3QT-wI.js → Backup-D8H_QtGu.js} +1 -1
  14. package/src/assets/web-panel/assets/{BaseInput-BW_VRWWu.js → BaseInput-CTsNF_pu.js} +1 -1
  15. package/src/assets/web-panel/assets/{Chat-CUEhDQfq.js → Chat-CcEiTYY8.js} +4 -4
  16. package/src/assets/web-panel/assets/{ChatBubbleRenderer-C5UVXdVE.js → ChatBubbleRenderer-9BY1DPuc.js} +1 -1
  17. package/src/assets/web-panel/assets/{Checkbox-URYsaaxv.js → Checkbox-BPB9NNJx.js} +1 -1
  18. package/src/assets/web-panel/assets/{Codegen-DJAwC80a.js → Codegen-CKKMf7jD.js} +1 -1
  19. package/src/assets/web-panel/assets/{Col-DfRKFzc9.js → Col-DpSSB4Uu.js} +1 -1
  20. package/src/assets/web-panel/assets/{Community-GOkGHuly.js → Community-CfR6ikoH.js} +1 -1
  21. package/src/assets/web-panel/assets/{Compact-CIMs13NC.js → Compact-CqnkGGjK.js} +1 -1
  22. package/src/assets/web-panel/assets/{Compliance-BE-TQIxV.js → Compliance-9IzhdVQb.js} +1 -1
  23. package/src/assets/web-panel/assets/{Cowork-CYmbJiWw.js → Cowork-eXsgH33N.js} +4 -4
  24. package/src/assets/web-panel/assets/{Cron-Be3OIWyM.js → Cron-DvkzHFRi.js} +2 -2
  25. package/src/assets/web-panel/assets/{Crosschain-2xB2HS2D.js → Crosschain--az9d9f7.js} +1 -1
  26. package/src/assets/web-panel/assets/{DID-B_lJO2yF.js → DID-_Eb4kpnJ.js} +2 -2
  27. package/src/assets/web-panel/assets/{Dashboard-DnVWqUER.js → Dashboard-aDVisdXj.js} +2 -2
  28. package/src/assets/web-panel/assets/{Dropdown-C7ZJvHVa.js → Dropdown-oQ54XzS9.js} +1 -1
  29. package/src/assets/web-panel/assets/{EmailListRenderer-DLevT-0F.js → EmailListRenderer-BUPdMau1.js} +1 -1
  30. package/src/assets/web-panel/assets/{FamilyGuardDashboard-BwhQ5BRU.js → FamilyGuardDashboard-DtQTOCQI.js} +1 -1
  31. package/src/assets/web-panel/assets/{Federation-BkGI-Xkq.js → Federation-Cpnb3Moe.js} +1 -1
  32. package/src/assets/web-panel/assets/{FormItemContext-BgIIbMd7.js → FormItemContext-DmsrJkeU.js} +1 -1
  33. package/src/assets/web-panel/assets/{GenericCardRenderer-qL-qN8Nb.js → GenericCardRenderer-CpFDYnh3.js} +1 -1
  34. package/src/assets/web-panel/assets/{Git-BTzgrC4U.js → Git-HFG17p7Q.js} +2 -2
  35. package/src/assets/web-panel/assets/{Governance-p28vdCN4.js → Governance-D5Z5c7N8.js} +1 -1
  36. package/src/assets/web-panel/assets/{Inference-Cqephrur.js → Inference-DH159h74.js} +1 -1
  37. package/src/assets/web-panel/assets/{KnowledgeGraph-C3v5Q4Zp.js → KnowledgeGraph-DuL1pcJD.js} +1 -1
  38. package/src/assets/web-panel/assets/{Logs-T6f0w32w.js → Logs-Gqn8hFsM.js} +2 -2
  39. package/src/assets/web-panel/assets/{MarkdownRenderer-Dj5XPm3S.js → MarkdownRenderer-NHJaejHI.js} +1 -1
  40. package/src/assets/web-panel/assets/{Marketplace-ClDsvHDH.js → Marketplace-BArcWifg.js} +1 -1
  41. package/src/assets/web-panel/assets/{McpTools-C4P-_snx.js → McpTools-Q1BfBSnd.js} +2 -2
  42. package/src/assets/web-panel/assets/{Memory-BZZfG6y6.js → Memory-Cz8nRL7N.js} +2 -2
  43. package/src/assets/web-panel/assets/{MobileBridge-DpIv_BLs.js → MobileBridge-CRuxLRJw.js} +1 -1
  44. package/src/assets/web-panel/assets/{MobileProjects-Buz3NIQg.js → MobileProjects-B1CQIAGp.js} +1 -1
  45. package/src/assets/web-panel/assets/{Mtc-HS2PJB79.js → Mtc-CFhXZbPk.js} +2 -2
  46. package/src/assets/web-panel/assets/{MtcAudit-UmBrcU27.js → MtcAudit-C69LqcZ5.js} +4 -4
  47. package/src/assets/web-panel/assets/{Multisig-C00sXiZf.js → Multisig-y7yZeTTG.js} +3 -3
  48. package/src/assets/web-panel/assets/{NLProgramming-Dj1ng_ph.js → NLProgramming-DgjhoWea.js} +1 -1
  49. package/src/assets/web-panel/assets/{Notes-C4LEVKlk.js → Notes-DRc2WTDh.js} +4 -4
  50. package/src/assets/web-panel/assets/{NotificationSettings-BWXwnekv.js → NotificationSettings-CLPx24yn.js} +1 -1
  51. package/src/assets/web-panel/assets/{OrderTableRenderer-CZHfK8Nn.js → OrderTableRenderer-CMSNA4CO.js} +1 -1
  52. package/src/assets/web-panel/assets/{Organization-CFEtFPrV.js → Organization-Dm6LIyhZ.js} +4 -4
  53. package/src/assets/web-panel/assets/{Overflow-DSz4MJK1.js → Overflow-DP4DOYd-.js} +1 -1
  54. package/src/assets/web-panel/assets/{P2P-DyTEytwG.js → P2P-HFwvtFI1.js} +2 -2
  55. package/src/assets/web-panel/assets/{PdhVaultBrowser-B5QNGLVx.js → PdhVaultBrowser-D9gPfKRM.js} +3 -3
  56. package/src/assets/web-panel/assets/{Permissions-wEC_X7x4.js → Permissions-Bdtxniwh.js} +4 -4
  57. package/src/assets/web-panel/assets/{PersonalDataHub-If5GZlGZ.js → PersonalDataHub-Dgl2AbES.js} +3 -3
  58. package/src/assets/web-panel/assets/{Pipeline-LB4gqqmX.js → Pipeline-DpZrzYwK.js} +1 -1
  59. package/src/assets/web-panel/assets/{Privacy-QVLhoxcN.js → Privacy-EQ551c0t.js} +1 -1
  60. package/src/assets/web-panel/assets/{ProjectInit-FaAbTYTo.js → ProjectInit-xUSeczsM.js} +2 -2
  61. package/src/assets/web-panel/assets/{ProjectSettings-DhMeNA21.js → ProjectSettings-B66Sr_t8.js} +2 -2
  62. package/src/assets/web-panel/assets/{Projects-5L4lkWAZ.js → Projects-B4zikj95.js} +1 -1
  63. package/src/assets/web-panel/assets/{Providers-DhZFp8fO.js → Providers-DjLbqQPh.js} +1 -1
  64. package/src/assets/web-panel/assets/{QrScannerModal-BZuJ7_xi.js → QrScannerModal-KVsAQCd_.js} +1 -1
  65. package/src/assets/web-panel/assets/{QuickAsk-TXddPYYb.js → QuickAsk-C4noJXu8.js} +1 -1
  66. package/src/assets/web-panel/assets/{Recommend-DDuXIKYt.js → Recommend-Cn15clqY.js} +1 -1
  67. package/src/assets/web-panel/assets/{RemoteSession-CDrTXImv.js → RemoteSession-DdonMFwH.js} +3 -3
  68. package/src/assets/web-panel/assets/{Reputation-B2xKaKzt.js → Reputation-Bqe3NwWN.js} +1 -1
  69. package/src/assets/web-panel/assets/{Row-DzAjWAOX.js → Row-CnxBgjkD.js} +1 -1
  70. package/src/assets/web-panel/assets/{RssFeed-CKH38BLF.js → RssFeed-CSRrgZyK.js} +2 -2
  71. package/src/assets/web-panel/assets/{Search-CuPqJYoQ.js → Search-DTUYUfFx.js} +1 -1
  72. package/src/assets/web-panel/assets/{Security-DmAd2hxz.js → Security-BHExHVIm.js} +4 -4
  73. package/src/assets/web-panel/assets/{Services-Bt3nljnY.js → Services-B_IWqPes.js} +2 -2
  74. package/src/assets/web-panel/assets/{Skeleton-CP7RH093.js → Skeleton-C_oAtzmX.js} +1 -1
  75. package/src/assets/web-panel/assets/{Skills-DKNeMBTx.js → Skills-maJNokSL.js} +1 -1
  76. package/src/assets/web-panel/assets/{Sla-CbpM8Nrd.js → Sla-CMM_ZsLH.js} +1 -1
  77. package/src/assets/web-panel/assets/{SpeechSettings-DTk-vTzF.js → SpeechSettings-D7w_oNwK.js} +1 -1
  78. package/src/assets/web-panel/assets/{SyncSettings-DKiplwmc.js → SyncSettings-D0Zl3NIr.js} +2 -2
  79. package/src/assets/web-panel/assets/{Tasks-z-lOm8fx.js → Tasks-Bs0H0ctR.js} +1 -1
  80. package/src/assets/web-panel/assets/{Templates-Rb-Q0DGX.js → Templates-C6T6oCpR.js} +1 -1
  81. package/src/assets/web-panel/assets/{Tenant-C2sqDUnR.js → Tenant-ByL-kAYO.js} +1 -1
  82. package/src/assets/web-panel/assets/{Terminal-DcyzskEE.js → Terminal-6JXNhc3b.js} +2 -2
  83. package/src/assets/web-panel/assets/{TimelineRenderer-lg0Eam7N.js → TimelineRenderer-KiuUtCsl.js} +1 -1
  84. package/src/assets/web-panel/assets/{Tokens-D9USIMIA.js → Tokens-C0TWTIER.js} +1 -1
  85. package/src/assets/web-panel/assets/{Trigger-BQpaQJ5k.js → Trigger-DpC5aaJu.js} +1 -1
  86. package/src/assets/web-panel/assets/{Trust-C-Mik04s.js → Trust-lqqflCwv.js} +1 -1
  87. package/src/assets/web-panel/assets/{UkeySign-DrnZ_o56.js → UkeySign-BYSlVfBc.js} +1 -1
  88. package/src/assets/web-panel/assets/{VideoEditing-BDOsoZi0.js → VideoEditing-DX08oo_R.js} +1 -1
  89. package/src/assets/web-panel/assets/{Wallet-Ct_bleI7.js → Wallet-CcIFPvzL.js} +4 -4
  90. package/src/assets/web-panel/assets/{WebAuthn-B6b6FDao.js → WebAuthn-D8DfxfVT.js} +5 -5
  91. package/src/assets/web-panel/assets/{WorkflowEditor-ZUJMaIHr.js → WorkflowEditor-Csadpaln.js} +1 -1
  92. package/src/assets/web-panel/assets/{chat-BII20OJy.js → chat-CewHWc_T.js} +1 -1
  93. package/src/assets/web-panel/assets/{colors-DEsJRV3n.js → colors-B8at89r3.js} +1 -1
  94. package/src/assets/web-panel/assets/{compact-item-DoDYAzN9.js → compact-item-v_gxtF5-.js} +1 -1
  95. package/src/assets/web-panel/assets/{createContext-o_nofnVW.js → createContext-BOwFpJqA.js} +1 -1
  96. package/src/assets/web-panel/assets/devWarning-DenB_kSS.js +1 -0
  97. package/src/assets/web-panel/assets/{hasIn-CAsABTHC.js → hasIn-DjHUzt7E.js} +1 -1
  98. package/src/assets/web-panel/assets/{index-CeJSTcXw.js → index-1Tfwr_GA.js} +1 -1
  99. package/src/assets/web-panel/assets/{index-CVQSl1uY.js → index-5qmLo1us.js} +1 -1
  100. package/src/assets/web-panel/assets/index-B8bNwM9U.js +1 -0
  101. package/src/assets/web-panel/assets/{index-CQE-WMEU.js → index-BC20EQ7h.js} +1 -1
  102. package/src/assets/web-panel/assets/{index-DciLb_Ww.js → index-BGrmPk8T.js} +1 -1
  103. package/src/assets/web-panel/assets/{index-Bqyg3PME.js → index-BPJ7uL2Q.js} +1 -1
  104. package/src/assets/web-panel/assets/{index-DU2Rpx1m.js → index-BRNyE3Kb.js} +1 -1
  105. package/src/assets/web-panel/assets/{index-CeWJqXNX.js → index-BVPsegMN.js} +1 -1
  106. package/src/assets/web-panel/assets/{index-DWZNYecl.js → index-B_egGFcR.js} +3 -3
  107. package/src/assets/web-panel/assets/{index-TSwbtCYG.js → index-BdZLA7k9.js} +1 -1
  108. package/src/assets/web-panel/assets/{index-BrIIJ2s-.js → index-Bk_Te9OR.js} +1 -1
  109. package/src/assets/web-panel/assets/{index-D5Fd4tdL.js → index-Bz8C8VXx.js} +1 -1
  110. package/src/assets/web-panel/assets/{index-B4SfcwZA.js → index-C7MHbmwn.js} +1 -1
  111. package/src/assets/web-panel/assets/{index-Bn2ZPUXO.js → index-CFL1Hewx.js} +1 -1
  112. package/src/assets/web-panel/assets/{index-DsoFTdA2.js → index-CV1SgaBd.js} +1 -1
  113. package/src/assets/web-panel/assets/{index-B9hYHPhs.js → index-CXIPAeAB.js} +1 -1
  114. package/src/assets/web-panel/assets/{index-Dgt1mKby.js → index-Ca8YZU2B.js} +1 -1
  115. package/src/assets/web-panel/assets/{index-DRAA2McB.js → index-Caf9UjhG.js} +1 -1
  116. package/src/assets/web-panel/assets/{index-BcYbQoY7.js → index-Cb1uNDOv.js} +1 -1
  117. package/src/assets/web-panel/assets/{index-Bycj011d.js → index-CquUCUzS.js} +1 -1
  118. package/src/assets/web-panel/assets/{index-BzMA6Ra3.js → index-CwHoF-TP.js} +1 -1
  119. package/src/assets/web-panel/assets/{index-Dbb34cAr.js → index-Cxk0mCoQ.js} +1 -1
  120. package/src/assets/web-panel/assets/{index-BxT8yTwS.js → index-D3o-pacB.js} +1 -1
  121. package/src/assets/web-panel/assets/{index-DrsAF-Ar.js → index-DA3n0Y28.js} +1 -1
  122. package/src/assets/web-panel/assets/index-DC0cpgIP.js +1 -0
  123. package/src/assets/web-panel/assets/{index-B9Z75LfA.js → index-DRRK_8Eg.js} +1 -1
  124. package/src/assets/web-panel/assets/{index-kIyLNyoF.js → index-DUMvVGyf.js} +1 -1
  125. package/src/assets/web-panel/assets/{index-DQmX_-hk.js → index-DdHdbXpy.js} +1 -1
  126. package/src/assets/web-panel/assets/{index-tCeNfxv4.js → index-Ddw05Myq.js} +1 -1
  127. package/src/assets/web-panel/assets/{index-BDRh3v44.js → index-Dfrb3Prv.js} +1 -1
  128. package/src/assets/web-panel/assets/{index-Bmwo5wQG.js → index-DiKaYIdo.js} +1 -1
  129. package/src/assets/web-panel/assets/{index-C1YDdyQ1.js → index-DmZLZsyC.js} +1 -1
  130. package/src/assets/web-panel/assets/{index-Dhnau6uw.js → index-FgUrhq_H.js} +1 -1
  131. package/src/assets/web-panel/assets/{index-Cf3sFEoE.js → index-Khw7wzVk.js} +1 -1
  132. package/src/assets/web-panel/assets/{index-B0ApxOMw.js → index-San3zacc.js} +1 -1
  133. package/src/assets/web-panel/assets/{index-D_CMB_wC.js → index-coOi37of.js} +1 -1
  134. package/src/assets/web-panel/assets/{index-BnbnmRqg.js → index-hyeBuocp.js} +1 -1
  135. package/src/assets/web-panel/assets/{index-DDQzBK3l.js → index-uk59xr0W.js} +1 -1
  136. package/src/assets/web-panel/assets/{index-CE2J04dA.js → index-wjvn8-9F.js} +1 -1
  137. package/src/assets/web-panel/assets/{initDefaultProps-CNjeeoKE.js → initDefaultProps-Id2dFdjh.js} +1 -1
  138. package/src/assets/web-panel/assets/{motion-CBT8IZDm.js → motion-DRxtwxng.js} +1 -1
  139. package/src/assets/web-panel/assets/{move-h1MOxjqv.js → move-BDYvdTb6.js} +1 -1
  140. package/src/assets/web-panel/assets/{mtc-parser-C_3pqNmn.js → mtc-parser-cz8LGI8Z.js} +1 -1
  141. package/src/assets/web-panel/assets/{omit-CMUnPFDk.js → omit-DHJeh6tH.js} +1 -1
  142. package/src/assets/web-panel/assets/{pickAttrs-p8_c1xq0.js → pickAttrs-XJEQIp7e.js} +1 -1
  143. package/src/assets/web-panel/assets/{placementArrow-D6O67r23.js → placementArrow-AFcf8lEn.js} +1 -1
  144. package/src/assets/web-panel/assets/{responsiveObserve-DquhepAK.js → responsiveObserve-CDEeBxs1.js} +1 -1
  145. package/src/assets/web-panel/assets/{slide-CZ-m6gmS.js → slide-CvbVfi6T.js} +1 -1
  146. package/src/assets/web-panel/assets/{statusUtils-k9ejZFtd.js → statusUtils-DtCyuEnq.js} +1 -1
  147. package/src/assets/web-panel/assets/{styleChecker-NX6_137R.js → styleChecker--UgmTsGY.js} +1 -1
  148. package/src/assets/web-panel/assets/{useFlexGapSupport-bCqR70lP.js → useFlexGapSupport-D9i1as-Y.js} +1 -1
  149. package/src/assets/web-panel/assets/{useFs-2l0vSqyY.js → useFs-CJx3zw01.js} +1 -1
  150. package/src/assets/web-panel/assets/{usePersonalDataHub-1yccm4O7.js → usePersonalDataHub-ZsIKYdZv.js} +1 -1
  151. package/src/assets/web-panel/assets/{vnode-CxQzajDo.js → vnode-B2RGEQG4.js} +1 -1
  152. package/src/assets/web-panel/assets/{zoom-CrTKwFyb.js → zoom-ob-0px2z.js} +1 -1
  153. package/src/assets/web-panel/index.html +1 -1
  154. package/src/command-help-index.json +1 -1
  155. package/src/commands/evolution-attestor-trust.js +113 -0
  156. package/src/commands/evolution.js +2 -0
  157. package/src/commands/learning.js +34 -5
  158. package/src/data/changelog.json +26 -0
  159. package/src/lib/evolution/evolution-artifact-ports.js +21 -0
  160. package/src/lib/evolution/evolution-deployment-loader.js +56 -0
  161. package/src/lib/evolution/evolution-immutable-ledger-segment-store.js +812 -0
  162. package/src/lib/evolution/evolution-ledger-file-manifest-catalog.js +218 -0
  163. package/src/lib/evolution/evolution-ledger-manifest-catalog.js +472 -0
  164. package/src/lib/evolution/evolution-ledger-manifest-chain.js +997 -0
  165. package/src/lib/evolution/evolution-ledger-manifest-head-store.js +408 -0
  166. package/src/lib/evolution/evolution-ledger-manifest-witness-adapter.js +554 -0
  167. package/src/lib/evolution/evolution-ledger-v2-manifest-backend.js +460 -0
  168. package/src/lib/evolution/governed-skill-synthesis-attestor-ipc-endpoint.js +94 -0
  169. package/src/lib/evolution/governed-skill-synthesis-attestor-trust-approval-client.js +485 -0
  170. package/src/lib/evolution/governed-skill-synthesis-attestor-trust-ipc-capability.js +200 -0
  171. package/src/lib/evolution/governed-skill-synthesis-attestor-trust-ledger.js +1222 -0
  172. package/src/lib/evolution/governed-skill-synthesis-attestor-trust-operations-cli-host.js +802 -0
  173. package/src/lib/evolution/governed-skill-synthesis-attestor-trust-operations-client.js +445 -0
  174. package/src/lib/evolution/governed-skill-synthesis-attestor-trust-operations.js +1082 -0
  175. package/src/lib/evolution/governed-skill-synthesis-attestor-trust-operator-registry.js +1453 -0
  176. package/src/lib/evolution/governed-skill-synthesis-candidate-evaluator.js +147 -0
  177. package/src/lib/evolution/governed-skill-synthesis-cli-host.js +115 -0
  178. package/src/lib/evolution/governed-skill-synthesis-evaluation-ledger-adapter.js +715 -0
  179. package/src/lib/evolution/governed-skill-synthesis-external-attestor.js +499 -0
  180. package/src/lib/evolution/governed-skill-synthesis-model-evaluator.js +514 -0
  181. package/src/lib/evolution/governed-skill-synthesis-process-attestor-worker.mjs +208 -0
  182. package/src/lib/evolution/governed-skill-synthesis-process-attestor.js +557 -0
  183. package/src/lib/evolution/governed-skill-synthesis-process-grader-worker.mjs +143 -0
  184. package/src/lib/evolution/governed-skill-synthesis-process-grader.js +444 -0
  185. package/src/lib/evolution/governed-skill-synthesis-provider-chat.js +220 -0
  186. package/src/lib/evolution/governed-skill-synthesis-windows-secure-pipe-host.js +236 -0
  187. package/src/lib/hook-audit-store.js +68 -2
  188. package/src/lib/hooks-v2-runtime.js +52 -26
  189. package/src/lib/learning/skill-synthesizer.js +66 -5
  190. package/src/lib/remote-read-loop-guard.js +30 -3
  191. package/src/assets/web-panel/assets/devWarning-0tgDCszN.js +0 -1
  192. package/src/assets/web-panel/assets/index-CFF8XEFE.js +0 -1
  193. package/src/assets/web-panel/assets/index-DVUEISry.js +0 -1
@@ -0,0 +1,147 @@
1
+ import { types as utilTypes } from "node:util";
2
+
3
+ import {
4
+ assertEvolutionContentContainsNoKnownSecrets,
5
+ inspectEvolutionContentInjectionRisks,
6
+ } from "./evolution-evidence-projector.js";
7
+
8
+ const EVALUATORS = new WeakSet();
9
+ const OPTIONS = new Set(["maxContentBytes"]);
10
+ const REQUIRED_SECTIONS = Object.freeze([
11
+ "## Procedure",
12
+ "## Pitfalls",
13
+ "## Verification",
14
+ "## Metadata",
15
+ ]);
16
+
17
+ function reject(reason) {
18
+ return Object.freeze({ accepted: false, reason });
19
+ }
20
+
21
+ /**
22
+ * Deterministic first-pass evaluator for generated learning candidates.
23
+ * It is intentionally not an Eval Gate or an independent model grader.
24
+ */
25
+ export function createGovernedSkillSynthesisCandidateEvaluator(options = {}) {
26
+ if (
27
+ !options ||
28
+ typeof options !== "object" ||
29
+ Array.isArray(options) ||
30
+ utilTypes.isProxy(options) ||
31
+ Reflect.ownKeys(options).some((key) => {
32
+ const descriptor = Object.getOwnPropertyDescriptor(options, key);
33
+ return (
34
+ typeof key !== "string" ||
35
+ !OPTIONS.has(key) ||
36
+ !descriptor ||
37
+ !("value" in descriptor) ||
38
+ !descriptor.enumerable
39
+ );
40
+ })
41
+ ) {
42
+ throw new TypeError("learning synthesis evaluator options are invalid");
43
+ }
44
+ const maxContentBytes = options.maxContentBytes ?? 128 * 1024;
45
+ if (
46
+ !Number.isSafeInteger(maxContentBytes) ||
47
+ maxContentBytes < 1_024 ||
48
+ maxContentBytes > 1024 * 1024
49
+ ) {
50
+ throw new TypeError(
51
+ "learning synthesis evaluator maxContentBytes is invalid",
52
+ );
53
+ }
54
+
55
+ const evaluator = async (request = {}) => {
56
+ if (
57
+ !request ||
58
+ typeof request !== "object" ||
59
+ Array.isArray(request) ||
60
+ utilTypes.isProxy(request)
61
+ ) {
62
+ return reject("candidate-evaluation-request-invalid");
63
+ }
64
+ const requestDescriptors = Object.getOwnPropertyDescriptors(request);
65
+ if (
66
+ ["skillName", "content", "pattern", "trajectory"].some(
67
+ (key) =>
68
+ !requestDescriptors[key] ||
69
+ !("value" in requestDescriptors[key]) ||
70
+ !requestDescriptors[key].enumerable,
71
+ )
72
+ ) {
73
+ return reject("candidate-evaluation-request-invalid");
74
+ }
75
+ const skillName = requestDescriptors.skillName.value;
76
+ const content = requestDescriptors.content.value;
77
+ const pattern = requestDescriptors.pattern.value;
78
+ const trajectory = requestDescriptors.trajectory.value;
79
+ if (
80
+ typeof skillName !== "string" ||
81
+ !/^[a-z][a-z0-9]*(?:-[a-z0-9]+)*$/u.test(skillName)
82
+ ) {
83
+ return reject("skill-name-invalid");
84
+ }
85
+ if (
86
+ typeof content !== "string" ||
87
+ content.length === 0 ||
88
+ Buffer.byteLength(content, "utf8") > maxContentBytes
89
+ ) {
90
+ return reject("candidate-content-invalid-or-oversized");
91
+ }
92
+ if (
93
+ !pattern ||
94
+ typeof pattern !== "object" ||
95
+ Array.isArray(pattern) ||
96
+ utilTypes.isProxy(pattern) ||
97
+ pattern.name !== skillName
98
+ ) {
99
+ return reject("pattern-identity-mismatch");
100
+ }
101
+ if (
102
+ !trajectory ||
103
+ typeof trajectory !== "object" ||
104
+ !Array.isArray(trajectory.toolChain)
105
+ ) {
106
+ return reject("trajectory-evidence-invalid");
107
+ }
108
+ if (
109
+ !content.startsWith("---\n") ||
110
+ !content.includes(`\nname: ${skillName}\n`) ||
111
+ REQUIRED_SECTIONS.some((section) => !content.includes(section))
112
+ ) {
113
+ return reject("candidate-schema-incomplete");
114
+ }
115
+ const observedTools = new Set(
116
+ trajectory.toolChain
117
+ .map((step) => step?.tool)
118
+ .filter((tool) => typeof tool === "string" && tool.length > 0),
119
+ );
120
+ if (
121
+ !Array.isArray(pattern.tools) ||
122
+ pattern.tools.length === 0 ||
123
+ pattern.tools.some((tool) => !observedTools.has(tool))
124
+ ) {
125
+ return reject("candidate-tools-not-grounded-in-trajectory");
126
+ }
127
+ try {
128
+ assertEvolutionContentContainsNoKnownSecrets(content);
129
+ } catch {
130
+ return reject("candidate-secret-or-pii-detected");
131
+ }
132
+ if (inspectEvolutionContentInjectionRisks(content).length > 0) {
133
+ return reject("candidate-prompt-injection-detected");
134
+ }
135
+ return Object.freeze({
136
+ accepted: true,
137
+ reason: "deterministic-precheck-passed",
138
+ });
139
+ };
140
+ Object.freeze(evaluator);
141
+ EVALUATORS.add(evaluator);
142
+ return evaluator;
143
+ }
144
+
145
+ export function isGovernedSkillSynthesisCandidateEvaluator(value) {
146
+ return EVALUATORS.has(value);
147
+ }
@@ -0,0 +1,115 @@
1
+ import { isAbsolute } from "node:path";
2
+ import { types as utilTypes } from "node:util";
3
+
4
+ import { SkillSynthesizer } from "../learning/skill-synthesizer.js";
5
+ import { assertDistinctSkillSynthesisModelRoles } from "./governed-skill-synthesis-model-evaluator.js";
6
+
7
+ const HOSTS = new WeakSet();
8
+ const DIGEST = /^sha256:[a-f0-9]{64}$/u;
9
+
10
+ function callable(value, label) {
11
+ if (typeof value !== "function" || utilTypes.isProxy(value)) {
12
+ throw new TypeError(`${label} must be a callable deployment port`);
13
+ }
14
+ return value;
15
+ }
16
+
17
+ function absolutePath(value, label) {
18
+ if (typeof value !== "string" || !isAbsolute(value)) {
19
+ throw new TypeError(`${label} must be an absolute path`);
20
+ }
21
+ return value;
22
+ }
23
+
24
+ function descriptor(value) {
25
+ if (
26
+ !value ||
27
+ typeof value !== "object" ||
28
+ Array.isArray(value) ||
29
+ utilTypes.isProxy(value) ||
30
+ typeof value.tenantId !== "string" ||
31
+ value.tenantId.trim() === "" ||
32
+ !DIGEST.test(value.handlerArtifactDigest ?? "")
33
+ ) {
34
+ throw new TypeError("learning synthesis deployment descriptor is invalid");
35
+ }
36
+ return Object.freeze({
37
+ tenantId: value.tenantId,
38
+ handlerArtifactDigest: value.handlerArtifactDigest,
39
+ });
40
+ }
41
+
42
+ export function createGovernedSkillSynthesisCliHost({
43
+ descriptor: descriptorInput,
44
+ llmChat: llmChatInput,
45
+ candidateOutputDir: candidateOutputDirInput,
46
+ activeSkillsDirs: activeSkillsDirsInput,
47
+ evaluateCandidate: evaluateCandidateInput,
48
+ synthesis = {},
49
+ } = {}) {
50
+ const deployment = descriptor(descriptorInput);
51
+ const llmChat = callable(llmChatInput, "learning synthesis llmChat");
52
+ const evaluateCandidate = callable(
53
+ evaluateCandidateInput,
54
+ "learning synthesis evaluator",
55
+ );
56
+ assertDistinctSkillSynthesisModelRoles(evaluateCandidate, llmChat);
57
+ const candidateOutputDir = absolutePath(
58
+ candidateOutputDirInput,
59
+ "learning synthesis candidateOutputDir",
60
+ );
61
+ if (
62
+ !Array.isArray(activeSkillsDirsInput) ||
63
+ activeSkillsDirsInput.length === 0
64
+ ) {
65
+ throw new TypeError("learning synthesis activeSkillsDirs are required");
66
+ }
67
+ const activeSkillsDirs = Object.freeze(
68
+ activeSkillsDirsInput.map((value) =>
69
+ absolutePath(value, "learning synthesis activeSkillsDirs entry"),
70
+ ),
71
+ );
72
+ if (
73
+ !synthesis ||
74
+ typeof synthesis !== "object" ||
75
+ Array.isArray(synthesis) ||
76
+ utilTypes.isProxy(synthesis)
77
+ ) {
78
+ throw new TypeError("learning synthesis configuration is invalid");
79
+ }
80
+ const allowedConfigKeys = new Set(["minToolCount", "minScore", "minSimilar"]);
81
+ if (Reflect.ownKeys(synthesis).some((key) => !allowedConfigKeys.has(key))) {
82
+ throw new TypeError("learning synthesis configuration has unknown fields");
83
+ }
84
+ const config = Object.freeze({ ...synthesis });
85
+
86
+ const host = Object.freeze({
87
+ descriptor: deployment,
88
+ async synthesize({ db, trajectoryStore } = {}) {
89
+ if (!db || typeof db.prepare !== "function") {
90
+ throw new TypeError("learning synthesis database is required");
91
+ }
92
+ if (
93
+ !trajectoryStore ||
94
+ typeof trajectoryStore.findComplexUnprocessed !== "function" ||
95
+ typeof trajectoryStore.findSimilar !== "function" ||
96
+ typeof trajectoryStore.markSynthesized !== "function"
97
+ ) {
98
+ throw new TypeError("learning synthesis trajectory store is required");
99
+ }
100
+ const synthesizer = new SkillSynthesizer(db, llmChat, trajectoryStore, {
101
+ ...config,
102
+ candidateOutputDir,
103
+ activeSkillsDirs,
104
+ evaluateCandidate,
105
+ });
106
+ return synthesizer.synthesize();
107
+ },
108
+ });
109
+ HOSTS.add(host);
110
+ return host;
111
+ }
112
+
113
+ export function isGovernedSkillSynthesisCliHost(value) {
114
+ return HOSTS.has(value);
115
+ }