chainlesschain 0.166.15 → 0.166.17

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 (202) hide show
  1. package/README.md +3 -3
  2. package/completions/_cc +1 -1
  3. package/completions/cc.bash +1 -1
  4. package/completions/cc.fish +1 -1
  5. package/completions/cc.ps1 +1 -1
  6. package/package.json +2 -2
  7. package/src/assets/web-panel/assets/{AIOps-To-6rimH.js → AIOps-CVW2n2rh.js} +1 -1
  8. package/src/assets/web-panel/assets/{ActionButton-CpdCnTv3.js → ActionButton-DtuM163O.js} +1 -1
  9. package/src/assets/web-panel/assets/{Analytics-DK7VNES_.js → Analytics-BXvl_qHu.js} +3 -3
  10. package/src/assets/web-panel/assets/{AppLayout-NZ5FvhCx.js → AppLayout-VDBTFKOp.js} +5 -5
  11. package/src/assets/web-panel/assets/{Artifacts-NXceQPmN.js → Artifacts-BNz2xCiG.js} +1 -1
  12. package/src/assets/web-panel/assets/{Audit-B2d64DH2.js → Audit-DTu9Hn9P.js} +1 -1
  13. package/src/assets/web-panel/assets/{BackgroundAgents-ByYgvEVY.js → BackgroundAgents-D2OCPzLe.js} +1 -1
  14. package/src/assets/web-panel/assets/{Backup-BXvQLDvN.js → Backup-C9M-vG7G.js} +1 -1
  15. package/src/assets/web-panel/assets/{BaseInput-C4GZk-As.js → BaseInput-BUkCNiUQ.js} +1 -1
  16. package/src/assets/web-panel/assets/{Chat-CvPuohL8.js → Chat-OJ2ajF7l.js} +5 -5
  17. package/src/assets/web-panel/assets/{ChatBubbleRenderer-DTftcclX.js → ChatBubbleRenderer-BdZt76Ab.js} +1 -1
  18. package/src/assets/web-panel/assets/{Checkbox-C8dQGIqD.js → Checkbox-C1gXKDsc.js} +1 -1
  19. package/src/assets/web-panel/assets/{Codegen-DRM6S1W4.js → Codegen-BXbznLg7.js} +1 -1
  20. package/src/assets/web-panel/assets/{Col-BDM8l-r5.js → Col-CbCq5N0i.js} +1 -1
  21. package/src/assets/web-panel/assets/{Community-Bvmfi1fX.js → Community-V8Ks6Yun.js} +1 -1
  22. package/src/assets/web-panel/assets/{Compact-DGQTCima.js → Compact-DkeHQTpQ.js} +1 -1
  23. package/src/assets/web-panel/assets/{Compliance-D_0C-2P6.js → Compliance-JeLKwn4Q.js} +1 -1
  24. package/src/assets/web-panel/assets/{Cowork-3C_q99ok.js → Cowork-azfetcBz.js} +3 -3
  25. package/src/assets/web-panel/assets/{Cron-CIiMQ1Hl.js → Cron-Q691i_Gp.js} +2 -2
  26. package/src/assets/web-panel/assets/{Crosschain-peebGnES.js → Crosschain-BLjDRbr_.js} +1 -1
  27. package/src/assets/web-panel/assets/{DID-OkX4KB9T.js → DID-D8ptXplK.js} +2 -2
  28. package/src/assets/web-panel/assets/{Dashboard-D9lm0Wxa.js → Dashboard-Ctj2VVZL.js} +2 -2
  29. package/src/assets/web-panel/assets/{Dropdown-CitActXx.js → Dropdown-D8VgkMJ8.js} +1 -1
  30. package/src/assets/web-panel/assets/EmailListRenderer-CQPe5S6q.js +1 -0
  31. package/src/assets/web-panel/assets/{FamilyGuardDashboard-CBWAi8XL.js → FamilyGuardDashboard-ySA-7SiN.js} +1 -1
  32. package/src/assets/web-panel/assets/{Federation-afj8jDcp.js → Federation-1PMD-fBf.js} +1 -1
  33. package/src/assets/web-panel/assets/{FormItemContext-Dabt59KY.js → FormItemContext-C_jr6U4Q.js} +1 -1
  34. package/src/assets/web-panel/assets/{GenericCardRenderer-BQpXA9kj.js → GenericCardRenderer-Bu3bKf2B.js} +1 -1
  35. package/src/assets/web-panel/assets/{Git-D2p2Moo1.js → Git-Dv4Fa_T5.js} +2 -2
  36. package/src/assets/web-panel/assets/{Governance-DkFfPykv.js → Governance-DOEy1n1k.js} +1 -1
  37. package/src/assets/web-panel/assets/{Inference-C1DKpeN2.js → Inference-DkvqzWcJ.js} +1 -1
  38. package/src/assets/web-panel/assets/{KnowledgeGraph-CjfVg4oQ.js → KnowledgeGraph-DdUJK949.js} +1 -1
  39. package/src/assets/web-panel/assets/{Logs-D-zMvdSf.js → Logs-CRelcdUZ.js} +2 -2
  40. package/src/assets/web-panel/assets/{MarkdownRenderer-jzEpGkbc.js → MarkdownRenderer-0AHbbTA4.js} +1 -1
  41. package/src/assets/web-panel/assets/{Marketplace-DfAjJLyS.js → Marketplace-BuuBKsev.js} +1 -1
  42. package/src/assets/web-panel/assets/{McpTools-BGDHQES1.js → McpTools-DlgpEmA1.js} +3 -3
  43. package/src/assets/web-panel/assets/{Memory-BYqrGAPS.js → Memory-DTfdqUGy.js} +2 -2
  44. package/src/assets/web-panel/assets/{MobileBridge-CQ6FEtty.js → MobileBridge-CXLE5ZFO.js} +1 -1
  45. package/src/assets/web-panel/assets/{MobileProjects-BpMvh5JW.js → MobileProjects-Dz25OB0n.js} +1 -1
  46. package/src/assets/web-panel/assets/{Mtc-CWH25SrU.js → Mtc-kEL0fhgD.js} +2 -2
  47. package/src/assets/web-panel/assets/{MtcAudit-D6DiLmei.js → MtcAudit-BE4UvFJU.js} +2 -2
  48. package/src/assets/web-panel/assets/{Multisig-BSxRN4jD.js → Multisig-CSApSn8c.js} +3 -3
  49. package/src/assets/web-panel/assets/{NLProgramming-C0FDPKT4.js → NLProgramming-D11FpKWx.js} +1 -1
  50. package/src/assets/web-panel/assets/{Notes-VKR78bH-.js → Notes-CDL-D2CS.js} +3 -3
  51. package/src/assets/web-panel/assets/{NotificationSettings-DLSklSZB.js → NotificationSettings-C0Q6lO-c.js} +1 -1
  52. package/src/assets/web-panel/assets/OrderTableRenderer-ZRE0OKbj.js +1 -0
  53. package/src/assets/web-panel/assets/{Organization-BB3pB27e.js → Organization-Dc-maVAq.js} +4 -4
  54. package/src/assets/web-panel/assets/{Overflow-Cr7bzwcs.js → Overflow-B5mUpSvi.js} +1 -1
  55. package/src/assets/web-panel/assets/{P2P-D1fkMMzI.js → P2P-TjXV53wq.js} +2 -2
  56. package/src/assets/web-panel/assets/PdhVaultBrowser-DvV2btIr.js +7 -0
  57. package/src/assets/web-panel/assets/{Permissions-c3Ijv0v4.js → Permissions-DKRzQ2O6.js} +4 -4
  58. package/src/assets/web-panel/assets/{PersonalDataHub-BJwbh3P2.js → PersonalDataHub-Dx2eqft8.js} +4 -4
  59. package/src/assets/web-panel/assets/{Pipeline-C4fhXafB.js → Pipeline-CnYZMB5p.js} +1 -1
  60. package/src/assets/web-panel/assets/{Privacy-DzSx3CD-.js → Privacy-BonKpPnp.js} +1 -1
  61. package/src/assets/web-panel/assets/{ProjectInit-D9fL5fED.js → ProjectInit-DWO0Du3J.js} +2 -2
  62. package/src/assets/web-panel/assets/{ProjectSettings-CB5FVrOR.js → ProjectSettings-C9jqyYRv.js} +2 -2
  63. package/src/assets/web-panel/assets/{Projects-DWhwdgfY.js → Projects-CYpKwXbz.js} +1 -1
  64. package/src/assets/web-panel/assets/{Providers-B9ZH4faS.js → Providers-CW-fkwJq.js} +1 -1
  65. package/src/assets/web-panel/assets/{QrScannerModal-BLKDHT8_.js → QrScannerModal-Cw0J3Zud.js} +1 -1
  66. package/src/assets/web-panel/assets/{QuickAsk-D1oYUcSY.js → QuickAsk-BH4A4IpR.js} +1 -1
  67. package/src/assets/web-panel/assets/{Recommend-CC2nmrOD.js → Recommend-CDwMwJus.js} +1 -1
  68. package/src/assets/web-panel/assets/{RemoteSession-qW9QF4-r.js → RemoteSession-DKIPwzTf.js} +2 -2
  69. package/src/assets/web-panel/assets/{Reputation-BDWqfzcr.js → Reputation-CklDj7qS.js} +1 -1
  70. package/src/assets/web-panel/assets/{Row-BBV2iCjT.js → Row-DJWZKsH0.js} +1 -1
  71. package/src/assets/web-panel/assets/{RssFeed-CcwrNwZB.js → RssFeed-BfSLCewo.js} +3 -3
  72. package/src/assets/web-panel/assets/{Search-Dr6fZ0D_.js → Search-B0IST--x.js} +1 -1
  73. package/src/assets/web-panel/assets/{Security-BPzaoCU6.js → Security-h1sYNWtt.js} +4 -4
  74. package/src/assets/web-panel/assets/{Services-BoKUU1I_.js → Services-Gh0-oxI_.js} +2 -2
  75. package/src/assets/web-panel/assets/{Skeleton-C8lT8GUg.js → Skeleton-CNDV_jOs.js} +1 -1
  76. package/src/assets/web-panel/assets/{Skills-DPpWeicz.js → Skills-ByCLTh1n.js} +1 -1
  77. package/src/assets/web-panel/assets/{Sla-UiijzpMU.js → Sla-BfyrJTJz.js} +1 -1
  78. package/src/assets/web-panel/assets/{SpeechSettings-DoofrLwS.js → SpeechSettings-BQzo9kNX.js} +1 -1
  79. package/src/assets/web-panel/assets/{SyncSettings-DXnyfTDw.js → SyncSettings-B6fS6z_1.js} +2 -2
  80. package/src/assets/web-panel/assets/{Tasks-g_WHjKeg.js → Tasks-C-uKCP-l.js} +1 -1
  81. package/src/assets/web-panel/assets/{Templates-DRuCh9g2.js → Templates-D6oDy7wL.js} +1 -1
  82. package/src/assets/web-panel/assets/{Tenant-QHIq1pH1.js → Tenant-D3LT2wNQ.js} +1 -1
  83. package/src/assets/web-panel/assets/{Terminal-G0fuI216.js → Terminal-BteLcv_O.js} +2 -2
  84. package/src/assets/web-panel/assets/{TimelineRenderer-4MT7SpGk.js → TimelineRenderer-DHHuxfqH.js} +1 -1
  85. package/src/assets/web-panel/assets/{Tokens-B5xT5umA.js → Tokens-BRQeykXw.js} +1 -1
  86. package/src/assets/web-panel/assets/{Trigger-D7HPbNgc.js → Trigger-p2XaFWEu.js} +1 -1
  87. package/src/assets/web-panel/assets/{Trust-CxH69dU5.js → Trust-BxadBMft.js} +1 -1
  88. package/src/assets/web-panel/assets/{UkeySign-CPPosveH.js → UkeySign-DRBP7LDk.js} +1 -1
  89. package/src/assets/web-panel/assets/{VideoEditing-Du5lGwAt.js → VideoEditing-CZ3NZkh7.js} +1 -1
  90. package/src/assets/web-panel/assets/{Wallet-BBIGNESK.js → Wallet-C3NTBN7G.js} +4 -4
  91. package/src/assets/web-panel/assets/{WebAuthn-Cc3HSGmv.js → WebAuthn-C7LVgMlb.js} +5 -5
  92. package/src/assets/web-panel/assets/{WorkflowEditor-DBoVPNCh.js → WorkflowEditor-0_Iveog7.js} +1 -1
  93. package/src/assets/web-panel/assets/{chat-DHcjgiem.js → chat-DzzluYo3.js} +1 -1
  94. package/src/assets/web-panel/assets/{colors-DrRrvJIV.js → colors-DSMYXpaj.js} +1 -1
  95. package/src/assets/web-panel/assets/{compact-item-BuY_sAoN.js → compact-item-W76u1VSV.js} +1 -1
  96. package/src/assets/web-panel/assets/{createContext-CepH1Fha.js → createContext-otsESjb5.js} +1 -1
  97. package/src/assets/web-panel/assets/devWarning-BztaXF84.js +1 -0
  98. package/src/assets/web-panel/assets/{hasIn-Dh80Ot6o.js → hasIn-3sNLrvug.js} +1 -1
  99. package/src/assets/web-panel/assets/index-4jP_hG_4.js +1 -0
  100. package/src/assets/web-panel/assets/{index-LBkSOwky.js → index-B1I1AYJs.js} +1 -1
  101. package/src/assets/web-panel/assets/{index-B0rvJjId.js → index-B5LOYdYm.js} +1 -1
  102. package/src/assets/web-panel/assets/{index-D6tOVlq-.js → index-B9X_jqXe.js} +1 -1
  103. package/src/assets/web-panel/assets/{index-D7lstbTh.js → index-BA8mZxd-.js} +1 -1
  104. package/src/assets/web-panel/assets/{index-BPDEOOlA.js → index-BDlDO2px.js} +1 -1
  105. package/src/assets/web-panel/assets/{index-DuSUCH7h.js → index-BJsQio5O.js} +1 -1
  106. package/src/assets/web-panel/assets/{index-CEfVkKIY.js → index-BRsD1PT2.js} +1 -1
  107. package/src/assets/web-panel/assets/{index-CYydOga6.js → index-BXLx9HfA.js} +1 -1
  108. package/src/assets/web-panel/assets/{index-DkZP_QaB.js → index-BcGJtmHM.js} +1 -1
  109. package/src/assets/web-panel/assets/{index-BnVIvc15.js → index-BdtmEKat.js} +1 -1
  110. package/src/assets/web-panel/assets/{index-DuRYBWrj.js → index-BpcQYzP7.js} +1 -1
  111. package/src/assets/web-panel/assets/{index-By0qqC3S.js → index-C2aht9-M.js} +1 -1
  112. package/src/assets/web-panel/assets/{index-C10033eO.js → index-CE7tSow-.js} +1 -1
  113. package/src/assets/web-panel/assets/{index-9crgJ3Id.js → index-CENWwjef.js} +1 -1
  114. package/src/assets/web-panel/assets/{index-CNQK9DIr.js → index-CKoFyHYQ.js} +1 -1
  115. package/src/assets/web-panel/assets/{index-DUNyTmkS.js → index-Cg86EzNp.js} +1 -1
  116. package/src/assets/web-panel/assets/{index-CnRK8_Dd.js → index-ClOFeZ-t.js} +1 -1
  117. package/src/assets/web-panel/assets/{index-BW9Pycxh.js → index-CtFOt5x1.js} +1 -1
  118. package/src/assets/web-panel/assets/{index-D5_K3GKu.js → index-D7A5U2IH.js} +1 -1
  119. package/src/assets/web-panel/assets/{index-DRy3_beb.js → index-DH4cl52p.js} +1 -1
  120. package/src/assets/web-panel/assets/{index-DWANFMlq.js → index-DLDh1OW3.js} +1 -1
  121. package/src/assets/web-panel/assets/{index-C5vhNRqS.js → index-DMmdIpLA.js} +1 -1
  122. package/src/assets/web-panel/assets/{index-Ca5d64IH.js → index-DS9WYDMf.js} +1 -1
  123. package/src/assets/web-panel/assets/{index-zGH9zH3w.js → index-DTA8Iavv.js} +3 -3
  124. package/src/assets/web-panel/assets/{index-BoRy2yup.js → index-DZKAzEge.js} +1 -1
  125. package/src/assets/web-panel/assets/{index-Cx21_p3m.js → index-DdU7IkKX.js} +1 -1
  126. package/src/assets/web-panel/assets/{index-B9Gh-SOn.js → index-Ddd4mird.js} +1 -1
  127. package/src/assets/web-panel/assets/{index-CiUx-tkV.js → index-DmpaC2yk.js} +1 -1
  128. package/src/assets/web-panel/assets/{index-DYN49m7k.js → index-GlIOE4ja.js} +1 -1
  129. package/src/assets/web-panel/assets/{index-CUnd5hyp.js → index-MhQQ3h8q.js} +1 -1
  130. package/src/assets/web-panel/assets/{index-CW_23-gU.js → index-NaO9AE-F.js} +1 -1
  131. package/src/assets/web-panel/assets/{index-0TYLnd11.js → index-UUHCwfNq.js} +1 -1
  132. package/src/assets/web-panel/assets/{index-NS9dW1F1.js → index-pVm_iUre.js} +1 -1
  133. package/src/assets/web-panel/assets/{index-hYaigdGm.js → index-q7ftLqNt.js} +1 -1
  134. package/src/assets/web-panel/assets/{index-A5lVwYVq.js → index-uSCkbpZH.js} +1 -1
  135. package/src/assets/web-panel/assets/{index-BtqigRzf.js → index-vBKPcmAP.js} +1 -1
  136. package/src/assets/web-panel/assets/{index-BiZQooWK.js → index-vUmYkqmu.js} +1 -1
  137. package/src/assets/web-panel/assets/index-zxwuAXL5.js +1 -0
  138. package/src/assets/web-panel/assets/{initDefaultProps-nI_X3wKl.js → initDefaultProps-DF6llUXV.js} +1 -1
  139. package/src/assets/web-panel/assets/{motion-LUHbQu_R.js → motion-vtDV8_5K.js} +1 -1
  140. package/src/assets/web-panel/assets/{move-DHI_KvJt.js → move-B6c0bdy2.js} +1 -1
  141. package/src/assets/web-panel/assets/{mtc-parser-AYdL_7Mo.js → mtc-parser-DlLYWuBK.js} +1 -1
  142. package/src/assets/web-panel/assets/{omit-CtV3HRKa.js → omit-BH0zOxLN.js} +1 -1
  143. package/src/assets/web-panel/assets/{pickAttrs-CcJLTOu4.js → pickAttrs-D9di8_In.js} +1 -1
  144. package/src/assets/web-panel/assets/{placementArrow-DHbiLUps.js → placementArrow-BDSngufM.js} +1 -1
  145. package/src/assets/web-panel/assets/{responsiveObserve-BC2DGkWP.js → responsiveObserve-C_EawMvP.js} +1 -1
  146. package/src/assets/web-panel/assets/{slide-B4ga4pPY.js → slide-B_4wShxA.js} +1 -1
  147. package/src/assets/web-panel/assets/{statusUtils-hzphgKfH.js → statusUtils-CbQu6qJ-.js} +1 -1
  148. package/src/assets/web-panel/assets/{styleChecker-IfN9Bxoi.js → styleChecker-CvXJWYXb.js} +1 -1
  149. package/src/assets/web-panel/assets/{useFlexGapSupport-pcGKJ4pT.js → useFlexGapSupport-jjY1XknO.js} +1 -1
  150. package/src/assets/web-panel/assets/{useFs-COXhQpTG.js → useFs-CMXBdsK_.js} +1 -1
  151. package/src/assets/web-panel/assets/{usePersonalDataHub-xp9F9szv.js → usePersonalDataHub-YbAhhPXx.js} +1 -1
  152. package/src/assets/web-panel/assets/{vnode-BdSQy1Ve.js → vnode-BFCTKc0H.js} +1 -1
  153. package/src/assets/web-panel/assets/{zoom-CHCt5P55.js → zoom-CY9aBl5O.js} +1 -1
  154. package/src/assets/web-panel/index.html +1 -1
  155. package/src/command-help-index.json +2 -2
  156. package/src/command-manifest.json +2 -2
  157. package/src/commands/evolution.js +30 -17
  158. package/src/commands/learning.js +95 -9
  159. package/src/commands/team.js +5 -0
  160. package/src/data/changelog.json +28 -2
  161. package/src/lib/agent-team/task-lease.js +12 -1
  162. package/src/lib/capability-manifest.js +212 -1
  163. package/src/lib/evolution/bounded-skill-improvement-pilot.js +498 -0
  164. package/src/lib/evolution/evolution-artifact-ports.js +3277 -0
  165. package/src/lib/evolution/evolution-eval-gate.js +6442 -0
  166. package/src/lib/evolution/evolution-evidence-projector.js +3786 -0
  167. package/src/lib/evolution/evolution-ledger-ports.js +2689 -0
  168. package/src/lib/evolution/evolution-ledger.js +4280 -0
  169. package/src/lib/evolution/evolution-run-runtime-adapter.js +5 -0
  170. package/src/lib/evolution/skill-candidate-registry.js +2258 -0
  171. package/src/lib/evolution/skill-evaluated-promotion-durability.js +899 -0
  172. package/src/lib/evolution/skill-evaluated-promotion.js +481 -0
  173. package/src/lib/evolution/skill-execution-manifest.js +942 -0
  174. package/src/lib/evolution/skill-mutation-authority.js +1677 -0
  175. package/src/lib/evolution/skill-promotion-controller.js +618 -0
  176. package/src/lib/evolution/skill-release-registry.js +3277 -0
  177. package/src/lib/evolution/skill-target-matrix-eval.js +3233 -0
  178. package/src/lib/evolution/skill-writer-inventory-manifest.js +998 -0
  179. package/src/lib/evolution/skill-writer-inventory-validator.js +816 -0
  180. package/src/lib/evolution/wiki-informed-skill-proposer.js +343 -0
  181. package/src/lib/formal-quality-eval-runtime.js +100 -0
  182. package/src/lib/graph-kernel/cutover-contract.js +7 -0
  183. package/src/lib/graph-kernel/cutover-ledger.js +8 -7
  184. package/src/lib/graph-kernel/evidence-digest.js +47 -0
  185. package/src/lib/graph-kernel/evolution-run-runtime-adapter.js +5 -0
  186. package/src/lib/graph-kernel/graph-runtime-surfaces.json +8 -1
  187. package/src/lib/graph-kernel/production-cutover-evidence.js +342 -15
  188. package/src/lib/graph-kernel/production-source-evidence.js +1599 -0
  189. package/src/lib/graph-kernel/retirement-evidence.js +15 -5
  190. package/src/lib/graph-kernel/runtime-surface-manifest.js +67 -2
  191. package/src/lib/headless-manifest.js +3 -1
  192. package/src/lib/hooks-v2-runtime.js +20 -0
  193. package/src/lib/learning/skill-improver.js +311 -43
  194. package/src/lib/learning/skill-synthesizer.js +236 -16
  195. package/src/lib/secure-fs.js +20 -0
  196. package/src/runtime/agent-core.js +68 -0
  197. package/src/assets/web-panel/assets/EmailListRenderer-DSmFkNKV.js +0 -1
  198. package/src/assets/web-panel/assets/OrderTableRenderer-Dpj7D6tC.js +0 -1
  199. package/src/assets/web-panel/assets/PdhVaultBrowser-BiDEbLNA.js +0 -7
  200. package/src/assets/web-panel/assets/devWarning-DIb8j04q.js +0 -1
  201. package/src/assets/web-panel/assets/index-BJc3t4PC.js +0 -1
  202. package/src/assets/web-panel/assets/index-CkksSUnI.js +0 -1
@@ -0,0 +1,998 @@
1
+ /**
2
+ * Canonical inventory of production entrypoints that can create, replace,
3
+ * remove, import, activate, or otherwise mutate Skill bytes/state.
4
+ *
5
+ * This is deliberately data-only. Runtime timestamps and probe results do not
6
+ * belong here because they would make the canonical inventory digest drift.
7
+ */
8
+
9
+ export const SKILL_WRITER_INVENTORY_SCHEMA =
10
+ "chainlesschain.skill-writer-inventory/v1";
11
+
12
+ export const SKILL_WRITER_TRIGGER_CLASSES = Object.freeze([
13
+ "automatic",
14
+ "manual",
15
+ "build-time",
16
+ ]);
17
+
18
+ export const SKILL_WRITER_TARGET_AUTHORITIES = Object.freeze([
19
+ "candidate-only",
20
+ "legacy-active",
21
+ ]);
22
+
23
+ export const SKILL_WRITER_SURFACES = Object.freeze([
24
+ "android",
25
+ "cli",
26
+ "desktop",
27
+ ]);
28
+
29
+ const writer = (value) =>
30
+ Object.freeze({
31
+ ...value,
32
+ entrypoint: Object.freeze({
33
+ ...value.entrypoint,
34
+ evidence: Object.freeze([...(value.entrypoint.evidence || [])]),
35
+ }),
36
+ mutation: Object.freeze({
37
+ ...value.mutation,
38
+ evidence: Object.freeze([...(value.mutation.evidence || [])]),
39
+ }),
40
+ });
41
+
42
+ const scopeExclusion = (value) =>
43
+ Object.freeze({
44
+ ...value,
45
+ evidence: Object.freeze({
46
+ ...value.evidence,
47
+ evidence: Object.freeze([...(value.evidence.evidence || [])]),
48
+ }),
49
+ });
50
+
51
+ /**
52
+ * `discoverySymbol` is the function/IPC/tool symbol emitted by the independent
53
+ * static scanner. `null` means that the writer is indirect (tree install,
54
+ * active-pointer mutation, or a generic path capability) and is therefore
55
+ * retained as an explicit authority-risk entry even though no literal
56
+ * `SKILL.md` write occurs in that function.
57
+ */
58
+ export const SKILL_WRITER_INVENTORY = Object.freeze({
59
+ schema: SKILL_WRITER_INVENTORY_SCHEMA,
60
+ schemaVersion: 1,
61
+ surfaces: SKILL_WRITER_SURFACES,
62
+ sourceRoots: Object.freeze([
63
+ "packages/cli/src",
64
+ "desktop-app-vue/src/main",
65
+ "android-app/feature-ai/src/main/java/com/chainlesschain/android/feature/ai/cowork/skills",
66
+ ]),
67
+ scannerScope: Object.freeze({
68
+ classification: "direct-source-sink-subset",
69
+ unit: "function-or-ipc",
70
+ sourceExtensions: Object.freeze([".cjs", ".js", ".kt", ".mjs", ".ts"]),
71
+ skillBindings: Object.freeze([
72
+ "nearby-skill-md-literal",
73
+ "package-files-constant",
74
+ ]),
75
+ mutationSinks: Object.freeze([
76
+ "appendFile",
77
+ "appendFileSync",
78
+ "copyFile",
79
+ "copyFileSync",
80
+ "delete",
81
+ "hotLoadSkill",
82
+ "register",
83
+ "rename",
84
+ "renameSync",
85
+ "rm",
86
+ "rmSync",
87
+ "unlink",
88
+ "unlinkSync",
89
+ "writeFile",
90
+ "writeFileSync",
91
+ "writeSafePackageComponent",
92
+ "writeText",
93
+ ]),
94
+ }),
95
+ limitations: Object.freeze([
96
+ "dynamic-or-remote-skill-filenames-require-explicit-inventory-evidence",
97
+ "custom-wrappers-not-listed-as-sinks-require-explicit-inventory-evidence",
98
+ "external-process-side-effects-are-not-derived-by-direct-source-scan",
99
+ "interprocedural-call-graph-and-runtime-reflection-are-out-of-scope",
100
+ "direct-unknown-zero-is-not-a-whole-program-semantic-proof",
101
+ ]),
102
+ writers: Object.freeze([
103
+ writer({
104
+ id: "cli-agent-file-mutation-tools",
105
+ surface: "cli",
106
+ triggerClass: "automatic",
107
+ targetAuthority: "legacy-active",
108
+ mutationType: "generic-path-capability",
109
+ discoverySymbol: null,
110
+ entrypoint: {
111
+ file: "packages/cli/src/runtime/agent-core.js",
112
+ symbol: "executeTool",
113
+ evidence: [
114
+ "export async function executeTool",
115
+ 'case "write_file"',
116
+ 'case "edit_file"',
117
+ 'case "delete_file"',
118
+ 'case "move_file"',
119
+ ],
120
+ },
121
+ mutation: {
122
+ file: "packages/cli/src/runtime/agent-core.js",
123
+ symbol: "executeTool",
124
+ evidence: [
125
+ "writeFileVerified(filePath, args.content)",
126
+ "fs.unlinkSync(filePath)",
127
+ "fs.renameSync(filePath, targetPath)",
128
+ ],
129
+ },
130
+ }),
131
+ writer({
132
+ id: "cli-agent-shell-mutation-tool",
133
+ surface: "cli",
134
+ triggerClass: "automatic",
135
+ targetAuthority: "legacy-active",
136
+ mutationType: "generic-process-path-capability",
137
+ discoverySymbol: null,
138
+ entrypoint: {
139
+ file: "packages/cli/src/runtime/agent-core.js",
140
+ symbol: "executeToolInner:run_shell",
141
+ evidence: ['case "run_shell"', "evaluateShellCommandPolicy("],
142
+ },
143
+ mutation: {
144
+ file: "packages/cli/src/runtime/agent-core.js",
145
+ symbol: "executeToolInner:run_shell",
146
+ evidence: [
147
+ "broker.spawn(args.command, [], brokerOpts)",
148
+ "broker.execSync(args.command, brokerExecOpts)",
149
+ ],
150
+ },
151
+ }),
152
+ writer({
153
+ id: "cli-agent-code-mutation-tool",
154
+ surface: "cli",
155
+ triggerClass: "automatic",
156
+ targetAuthority: "legacy-active",
157
+ mutationType: "generic-process-path-capability",
158
+ discoverySymbol: null,
159
+ entrypoint: {
160
+ file: "packages/cli/src/runtime/agent-core.js",
161
+ symbol: "executeToolInner:run_code",
162
+ evidence: ['case "run_code"', "await _executeRunCode(args, cwd)"],
163
+ },
164
+ mutation: {
165
+ file: "packages/cli/src/runtime/agent-core.js",
166
+ symbol: "_executeRunCode",
167
+ evidence: [
168
+ "async function _executeRunCode(args, cwd)",
169
+ "output = runCodeProcess(interpreter, [scriptPath]",
170
+ ],
171
+ },
172
+ }),
173
+ writer({
174
+ id: "cli-skill-add",
175
+ surface: "cli",
176
+ triggerClass: "manual",
177
+ targetAuthority: "legacy-active",
178
+ mutationType: "skill-bytes",
179
+ discoverySymbol: "createControlledSkillScaffold",
180
+ entrypoint: {
181
+ file: "packages/cli/src/commands/skill.js",
182
+ symbol: "registerSkillCommand:add",
183
+ evidence: [
184
+ '.command("add")',
185
+ "createControlledSkillScaffold(name, targetDir)",
186
+ ],
187
+ },
188
+ mutation: {
189
+ file: "packages/cli/src/commands/skill.js",
190
+ symbol: "createControlledSkillScaffold",
191
+ evidence: [
192
+ "export function createControlledSkillScaffold",
193
+ 'path.join(targetDir, "SKILL.md")',
194
+ "io.writeFileSync(",
195
+ ],
196
+ },
197
+ }),
198
+ writer({
199
+ id: "cli-skill-remove",
200
+ surface: "cli",
201
+ triggerClass: "manual",
202
+ targetAuthority: "legacy-active",
203
+ mutationType: "skill-removal",
204
+ discoverySymbol: null,
205
+ entrypoint: {
206
+ file: "packages/cli/src/commands/skill.js",
207
+ symbol: "registerSkillCommand:remove",
208
+ evidence: ['.command("remove")', '.option("--force"'],
209
+ },
210
+ mutation: {
211
+ file: "packages/cli/src/commands/skill.js",
212
+ symbol: "registerSkillCommand:remove",
213
+ evidence: ["fs.rmSync(targetDir, { recursive: true, force: true })"],
214
+ },
215
+ }),
216
+ writer({
217
+ id: "cli-init-workspace-skills",
218
+ surface: "cli",
219
+ triggerClass: "manual",
220
+ targetAuthority: "legacy-active",
221
+ mutationType: "skill-bytes",
222
+ discoverySymbol: "registerInitCommand",
223
+ entrypoint: {
224
+ file: "packages/cli/src/commands/init.js",
225
+ symbol: "registerInitCommand",
226
+ evidence: ["export function registerInitCommand", '.command("init")'],
227
+ },
228
+ mutation: {
229
+ file: "packages/cli/src/commands/init.js",
230
+ symbol: "registerInitCommand",
231
+ evidence: [
232
+ 'path.join(personaSkillDir, "SKILL.md")',
233
+ 'path.join(skillDir, "SKILL.md")',
234
+ "fs.writeFileSync(",
235
+ ],
236
+ },
237
+ }),
238
+ writer({
239
+ id: "cli-anything-register-skill",
240
+ surface: "cli",
241
+ triggerClass: "manual",
242
+ targetAuthority: "legacy-active",
243
+ mutationType: "skill-bytes",
244
+ discoverySymbol: "registerTool",
245
+ entrypoint: {
246
+ file: "packages/cli/src/lib/cli-anything-bridge.js",
247
+ symbol: "registerTool",
248
+ evidence: ["export function registerTool", "opts.command ||"],
249
+ },
250
+ mutation: {
251
+ file: "packages/cli/src/lib/cli-anything-bridge.js",
252
+ symbol: "registerTool",
253
+ evidence: [
254
+ '_deps.path.join(dir, "SKILL.md")',
255
+ "_deps.fs.writeFileSync(",
256
+ ],
257
+ },
258
+ }),
259
+ writer({
260
+ id: "cli-anything-remove-skill",
261
+ surface: "cli",
262
+ triggerClass: "manual",
263
+ targetAuthority: "legacy-active",
264
+ mutationType: "skill-removal",
265
+ discoverySymbol: null,
266
+ entrypoint: {
267
+ file: "packages/cli/src/lib/cli-anything-bridge.js",
268
+ symbol: "removeTool",
269
+ evidence: ["export function removeTool", "_skillDir(toolName)"],
270
+ },
271
+ mutation: {
272
+ file: "packages/cli/src/lib/cli-anything-bridge.js",
273
+ symbol: "removeTool",
274
+ evidence: ["_deps.fs.rmSync(dir, { recursive: true, force: true })"],
275
+ },
276
+ }),
277
+ writer({
278
+ id: "cli-skill-pack-generate",
279
+ surface: "cli",
280
+ triggerClass: "build-time",
281
+ targetAuthority: "legacy-active",
282
+ mutationType: "skill-bytes",
283
+ discoverySymbol: "generateCliPacks",
284
+ entrypoint: {
285
+ file: "packages/cli/src/lib/skill-packs/generator.js",
286
+ symbol: "generateCliPacks",
287
+ evidence: [
288
+ "export async function generateCliPacks",
289
+ "options.outputDir ||",
290
+ ],
291
+ },
292
+ mutation: {
293
+ file: "packages/cli/src/lib/skill-packs/generator.js",
294
+ symbol: "generateCliPacks",
295
+ evidence: [
296
+ 'path.join(packDir, "SKILL.md")',
297
+ "fs.writeFileSync(skillMdPath, skillMd",
298
+ ],
299
+ },
300
+ }),
301
+ writer({
302
+ id: "cli-skill-pack-remove",
303
+ surface: "cli",
304
+ triggerClass: "build-time",
305
+ targetAuthority: "legacy-active",
306
+ mutationType: "skill-removal",
307
+ discoverySymbol: "removeCliPacks",
308
+ entrypoint: {
309
+ file: "packages/cli/src/lib/skill-packs/generator.js",
310
+ symbol: "removeCliPacks",
311
+ evidence: ["export function removeCliPacks"],
312
+ },
313
+ mutation: {
314
+ file: "packages/cli/src/lib/skill-packs/generator.js",
315
+ symbol: "removeCliPacks",
316
+ evidence: ["fs.rmSync(packDir, { recursive: true, force: true })"],
317
+ },
318
+ }),
319
+ writer({
320
+ id: "cli-record-replay-install",
321
+ surface: "cli",
322
+ triggerClass: "manual",
323
+ targetAuthority: "legacy-active",
324
+ mutationType: "skill-package-transaction",
325
+ discoverySymbol: "installRecordedSkillPackage",
326
+ entrypoint: {
327
+ file: "packages/cli/src/lib/record-replay/recorded-skill-package.js",
328
+ symbol: "installRecordedSkillPackage",
329
+ evidence: ["export function installRecordedSkillPackage"],
330
+ },
331
+ mutation: {
332
+ file: "packages/cli/src/lib/record-replay/recorded-skill-package.js",
333
+ symbol: "installRecordedSkillPackage",
334
+ evidence: [
335
+ '"SKILL.md"',
336
+ "writeFileSync(handle, contents[name]",
337
+ "renameSync(staging, location.target)",
338
+ ],
339
+ },
340
+ }),
341
+ writer({
342
+ id: "cli-record-replay-revoke",
343
+ surface: "cli",
344
+ triggerClass: "manual",
345
+ targetAuthority: "legacy-active",
346
+ mutationType: "skill-removal",
347
+ discoverySymbol: null,
348
+ entrypoint: {
349
+ file: "packages/cli/src/lib/record-replay/recorded-skill-package.js",
350
+ symbol: "stageRecordedSkillPackageRevocation",
351
+ evidence: ["export function stageRecordedSkillPackageRevocation"],
352
+ },
353
+ mutation: {
354
+ file: "packages/cli/src/lib/record-replay/recorded-skill-package.js",
355
+ symbol: "stageRecordedSkillPackageRevocation",
356
+ evidence: [
357
+ "renameSync(location.target, quarantine)",
358
+ "rmSync(quarantine, { recursive: true, force: true })",
359
+ ],
360
+ },
361
+ }),
362
+ writer({
363
+ id: "cli-plugin-install",
364
+ surface: "cli",
365
+ triggerClass: "manual",
366
+ targetAuthority: "legacy-active",
367
+ mutationType: "indirect-plugin-tree",
368
+ discoverySymbol: null,
369
+ entrypoint: {
370
+ file: "packages/cli/src/lib/plugin-runtime/install.js",
371
+ symbol: "installFromSource",
372
+ evidence: ["export function installFromSource"],
373
+ },
374
+ mutation: {
375
+ file: "packages/cli/src/lib/plugin-runtime/install.js",
376
+ symbol: "installFromDirectory",
377
+ evidence: [
378
+ "export function installFromDirectory",
379
+ "copyDirGuarded(src, staged, staged)",
380
+ "setActiveVersion(name, version",
381
+ ],
382
+ },
383
+ }),
384
+ writer({
385
+ id: "cli-plugin-update",
386
+ surface: "cli",
387
+ triggerClass: "automatic",
388
+ targetAuthority: "legacy-active",
389
+ mutationType: "indirect-plugin-tree",
390
+ discoverySymbol: null,
391
+ entrypoint: {
392
+ file: "packages/cli/src/lib/plugin-runtime/install.js",
393
+ symbol: "updatePlugin",
394
+ evidence: ["export function updatePlugin"],
395
+ },
396
+ mutation: {
397
+ file: "packages/cli/src/lib/plugin-runtime/install.js",
398
+ symbol: "updatePlugin",
399
+ evidence: [
400
+ "const res = installFromDirectory(dir, {",
401
+ "candidate-active",
402
+ ],
403
+ },
404
+ }),
405
+ writer({
406
+ id: "cli-plugin-active-switch",
407
+ surface: "cli",
408
+ triggerClass: "manual",
409
+ targetAuthority: "legacy-active",
410
+ mutationType: "active-selection",
411
+ discoverySymbol: null,
412
+ entrypoint: {
413
+ file: "packages/cli/src/lib/plugin-runtime/install.js",
414
+ symbol: "setActiveVersion",
415
+ evidence: ["export function setActiveVersion"],
416
+ },
417
+ mutation: {
418
+ file: "packages/cli/src/lib/plugin-runtime/install.js",
419
+ symbol: "writeActivePointerBytes",
420
+ evidence: [
421
+ "function writeActivePointerBytes",
422
+ "_deps.renameSync(tempFile, activeFile)",
423
+ ],
424
+ },
425
+ }),
426
+ writer({
427
+ id: "cli-plugin-enabled-state",
428
+ surface: "cli",
429
+ triggerClass: "manual",
430
+ targetAuthority: "legacy-active",
431
+ mutationType: "active-selection",
432
+ discoverySymbol: null,
433
+ entrypoint: {
434
+ file: "packages/cli/src/lib/plugin-runtime/install.js",
435
+ symbol: "setPluginEnabled",
436
+ evidence: [
437
+ "export function setPluginEnabled(name, enabled, opts = {})",
438
+ ],
439
+ },
440
+ mutation: {
441
+ file: "packages/cli/src/lib/plugin-runtime/install.js",
442
+ symbol: "setPluginEnabled",
443
+ evidence: [
444
+ "writeDisabledMarkerState(marker, nameDir, desiredMarkerState)",
445
+ 'persistPluginLifecycleTransaction(transaction, "marker-committing")',
446
+ ],
447
+ },
448
+ }),
449
+ writer({
450
+ id: "cli-plugin-uninstall",
451
+ surface: "cli",
452
+ triggerClass: "manual",
453
+ targetAuthority: "legacy-active",
454
+ mutationType: "skill-removal",
455
+ discoverySymbol: null,
456
+ entrypoint: {
457
+ file: "packages/cli/src/lib/plugin-runtime/install.js",
458
+ symbol: "uninstall",
459
+ evidence: ["export function uninstall"],
460
+ },
461
+ mutation: {
462
+ file: "packages/cli/src/lib/plugin-runtime/install.js",
463
+ symbol: "runDurableVersionUninstall",
464
+ evidence: [
465
+ "function runDurableVersionUninstall",
466
+ "_deps.renameSync(dir, quarantined)",
467
+ ],
468
+ },
469
+ }),
470
+ writer({
471
+ id: "cli-learning-synthesis-candidate",
472
+ surface: "cli",
473
+ triggerClass: "automatic",
474
+ targetAuthority: "candidate-only",
475
+ mutationType: "candidate-skill-bytes",
476
+ discoverySymbol: "_persistSkill",
477
+ entrypoint: {
478
+ file: "packages/cli/src/lib/learning/skill-synthesizer.js",
479
+ symbol: "SkillSynthesizer.synthesize",
480
+ evidence: ["async synthesize()", "await this._persistSkill"],
481
+ },
482
+ mutation: {
483
+ file: "packages/cli/src/lib/learning/skill-synthesizer.js",
484
+ symbol: "SkillSynthesizer._persistSkill",
485
+ evidence: [
486
+ "async _persistSkill",
487
+ 'path.join(canonicalSkillDir, "SKILL.md")',
488
+ 'flag: "wx"',
489
+ ],
490
+ },
491
+ }),
492
+ writer({
493
+ id: "cli-learning-improvement-candidate",
494
+ surface: "cli",
495
+ triggerClass: "automatic",
496
+ targetAuthority: "candidate-only",
497
+ mutationType: "candidate-skill-bytes",
498
+ discoverySymbol: "_writeCandidate",
499
+ entrypoint: {
500
+ file: "packages/cli/src/lib/learning/skill-improver.js",
501
+ symbol: "SkillImprover._finalizeCandidate",
502
+ evidence: ["async _finalizeCandidate", "await this._writeCandidate"],
503
+ },
504
+ mutation: {
505
+ file: "packages/cli/src/lib/learning/skill-improver.js",
506
+ symbol: "SkillImprover._writeCandidate",
507
+ evidence: [
508
+ "async _writeCandidate",
509
+ 'path.join(canonicalSkillDir, "SKILL.md")',
510
+ 'flag: "wx"',
511
+ ],
512
+ },
513
+ }),
514
+ writer({
515
+ id: "cli-content-addressed-candidate-registry",
516
+ surface: "cli",
517
+ triggerClass: "automatic",
518
+ targetAuthority: "candidate-only",
519
+ mutationType: "candidate-artifact",
520
+ discoverySymbol: null,
521
+ entrypoint: {
522
+ file: "packages/cli/src/lib/evolution/skill-candidate-registry.js",
523
+ symbol: "SkillCandidateRegistry.create",
524
+ evidence: ["export class SkillCandidateRegistry", "create(input)"],
525
+ },
526
+ mutation: {
527
+ file: "packages/cli/src/lib/evolution/skill-candidate-registry.js",
528
+ symbol: "SkillCandidateRegistry.create",
529
+ evidence: [
530
+ 'this._fs.openSync(temporaryPath, "wx"',
531
+ "this._fs.linkSync(temporaryPath, filePath)",
532
+ ],
533
+ },
534
+ }),
535
+ writer({
536
+ id: "desktop-cowork-file-mutation-ipc",
537
+ surface: "desktop",
538
+ triggerClass: "automatic",
539
+ targetAuthority: "legacy-active",
540
+ mutationType: "generic-path-capability",
541
+ discoverySymbol: null,
542
+ entrypoint: {
543
+ file: "desktop-app-vue/src/main/ai-engine/cowork/cowork-ipc.js",
544
+ symbol: "ipc:cowork:write-file",
545
+ evidence: ['"cowork:write-file"', '"cowork:delete-file"'],
546
+ },
547
+ mutation: {
548
+ file: "desktop-app-vue/src/main/ai-engine/cowork/cowork-ipc.js",
549
+ symbol: "fileSandbox",
550
+ evidence: [
551
+ "await fileSandbox.writeFile(",
552
+ "await fileSandbox.deleteFile(",
553
+ ],
554
+ },
555
+ }),
556
+ writer({
557
+ id: "desktop-bundled-skill-filesystem-writer",
558
+ surface: "desktop",
559
+ triggerClass: "automatic",
560
+ targetAuthority: "legacy-active",
561
+ mutationType: "generic-workspace-path-capability",
562
+ discoverySymbol: null,
563
+ entrypoint: {
564
+ file: "desktop-app-vue/src/main/ai-engine/cowork/skills/skills-ipc.js",
565
+ symbol: "registerSkillsIPC",
566
+ evidence: [
567
+ "registry.setBundledSkillFilesystemAuthorityFactory(",
568
+ "createBundledSkillFilesystemAuthorityFactory({",
569
+ ],
570
+ },
571
+ mutation: {
572
+ file: "desktop-app-vue/src/main/ai-engine/cowork/skills/bundled-skill-filesystem-authority.js",
573
+ symbol: "createNativeFilesystemAdapter",
574
+ evidence: [
575
+ "writeFileSync: (...args) => fsImpl.writeFileSync(...args)",
576
+ "unlinkSync: (...args) => fsImpl.unlinkSync(...args)",
577
+ "allowedRoots.push(workspaceRoot)",
578
+ ],
579
+ },
580
+ }),
581
+ writer({
582
+ id: "desktop-bundled-skill-process-writer",
583
+ surface: "desktop",
584
+ triggerClass: "automatic",
585
+ targetAuthority: "legacy-active",
586
+ mutationType: "generic-workspace-process-capability",
587
+ discoverySymbol: null,
588
+ entrypoint: {
589
+ file: "desktop-app-vue/src/main/ai-engine/cowork/skills/skills-ipc.js",
590
+ symbol: "registerSkillsIPC",
591
+ evidence: [
592
+ "registry.setBundledSkillProcessAuthorityFactory(",
593
+ "createBundledSkillProcessAuthorityFactory({",
594
+ ],
595
+ },
596
+ mutation: {
597
+ file: "desktop-app-vue/src/main/ai-engine/cowork/skills/bundled-skill-process-broker.js",
598
+ symbol: "validateLintAndFix/execFileSync",
599
+ evidence: [
600
+ "function validateLintAndFix(file, args, policy, cwd)",
601
+ '["eslint", "--fix", "--format", "json"]',
602
+ '["prettier", "--write"]',
603
+ "function execFileSync(file, args, options = {})",
604
+ ],
605
+ },
606
+ }),
607
+ writer({
608
+ id: "desktop-skills-create-ipc",
609
+ surface: "desktop",
610
+ triggerClass: "manual",
611
+ targetAuthority: "legacy-active",
612
+ mutationType: "skill-bytes",
613
+ discoverySymbol: "ipc:skills:create",
614
+ entrypoint: {
615
+ file: "desktop-app-vue/src/main/ai-engine/cowork/skills/skills-ipc.js",
616
+ symbol: "ipc:skills:create",
617
+ evidence: ['ipcMain.handle("skills:create"'],
618
+ },
619
+ mutation: {
620
+ file: "desktop-app-vue/src/main/ai-engine/cowork/skills/skills-ipc.js",
621
+ symbol: "ipc:skills:create",
622
+ evidence: [
623
+ 'path.join(targetDir, "SKILL.md")',
624
+ "await fs.writeFile(skillMdPath, content",
625
+ ],
626
+ },
627
+ }),
628
+ writer({
629
+ id: "desktop-skills-enabled-ipc",
630
+ surface: "desktop",
631
+ triggerClass: "manual",
632
+ targetAuthority: "legacy-active",
633
+ mutationType: "active-selection",
634
+ discoverySymbol: null,
635
+ entrypoint: {
636
+ file: "desktop-app-vue/src/main/ai-engine/cowork/skills/skills-ipc.js",
637
+ symbol: "ipc:skills:set-enabled",
638
+ evidence: ['ipcMain.handle("skills:set-enabled"'],
639
+ },
640
+ mutation: {
641
+ file: "desktop-app-vue/src/main/ai-engine/cowork/skills/skills-ipc.js",
642
+ symbol: "ipc:skills:set-enabled",
643
+ evidence: ["skill.config.enabled = enabled"],
644
+ },
645
+ }),
646
+ writer({
647
+ id: "desktop-skill-creator-create",
648
+ surface: "desktop",
649
+ triggerClass: "manual",
650
+ targetAuthority: "candidate-only",
651
+ mutationType: "in-memory-candidate",
652
+ discoverySymbol: null,
653
+ entrypoint: {
654
+ file: "desktop-app-vue/src/main/ai-engine/cowork/skills/builtin/skill-creator/handler.js",
655
+ symbol: "handler.execute:create",
656
+ evidence: ['case "create"', "return handleCreate("],
657
+ },
658
+ mutation: {
659
+ file: "desktop-app-vue/src/main/ai-engine/cowork/skills/builtin/skill-creator/handler.js",
660
+ symbol: "handleCreate",
661
+ evidence: [
662
+ "function handleCreate",
663
+ "candidateOnlyResult({",
664
+ "proposedFiles: files",
665
+ "activeMutation: false",
666
+ ],
667
+ },
668
+ }),
669
+ writer({
670
+ id: "desktop-skill-creator-optimize-description",
671
+ surface: "desktop",
672
+ triggerClass: "automatic",
673
+ targetAuthority: "candidate-only",
674
+ mutationType: "in-memory-candidate",
675
+ discoverySymbol: null,
676
+ entrypoint: {
677
+ file: "desktop-app-vue/src/main/ai-engine/cowork/skills/builtin/skill-creator/handler.js",
678
+ symbol: "handler.execute:optimize-description",
679
+ evidence: ['case "optimize-description"', "handleOptimizeDescription("],
680
+ },
681
+ mutation: {
682
+ file: "desktop-app-vue/src/main/ai-engine/cowork/skills/builtin/skill-creator/handler.js",
683
+ symbol: "handleOptimizeDescription",
684
+ evidence: [
685
+ "async function handleOptimizeDescription",
686
+ "proposedContent",
687
+ 'path: "SKILL.md"',
688
+ "activeMutation: false",
689
+ ],
690
+ },
691
+ }),
692
+ writer({
693
+ id: "desktop-skill-sync-import",
694
+ surface: "desktop",
695
+ triggerClass: "automatic",
696
+ targetAuthority: "candidate-only",
697
+ mutationType: "candidate-import-adapter",
698
+ discoverySymbol: null,
699
+ entrypoint: {
700
+ file: "desktop-app-vue/src/main/ai-engine/cowork/skills/skill-sync-manager.js",
701
+ symbol: "SkillSyncManager.importSkill",
702
+ evidence: ["async importSkill(pkg)"],
703
+ },
704
+ mutation: {
705
+ file: "desktop-app-vue/src/main/ai-engine/cowork/skills/skill-sync-manager.js",
706
+ symbol: "SkillSyncManager.importSkill",
707
+ evidence: [
708
+ "await this.candidateStore.create(createRequest)",
709
+ "validateCandidateReadback(readback, receipt, createRequest)",
710
+ 'action: "candidate-staged"',
711
+ "activeMutation: false",
712
+ ],
713
+ },
714
+ }),
715
+ writer({
716
+ id: "desktop-plugin-install",
717
+ surface: "desktop",
718
+ triggerClass: "manual",
719
+ targetAuthority: "legacy-active",
720
+ mutationType: "indirect-plugin-tree",
721
+ discoverySymbol: "installPlugin",
722
+ entrypoint: {
723
+ file: "desktop-app-vue/src/main/marketplace/plugin-installer.js",
724
+ symbol: "PluginInstaller.installPlugin",
725
+ evidence: ["async installPlugin(pluginId"],
726
+ },
727
+ mutation: {
728
+ file: "desktop-app-vue/src/main/marketplace/plugin-installer.js",
729
+ symbol: "PluginInstaller.installPlugin",
730
+ evidence: [
731
+ "await this.extractPlugin(downloadPath, pluginDir)",
732
+ 'path.join(pluginDir, "SKILL.md")',
733
+ "registry.hotLoadSkill(definition.name, definition)",
734
+ ],
735
+ },
736
+ }),
737
+ writer({
738
+ id: "desktop-plugin-update",
739
+ surface: "desktop",
740
+ triggerClass: "automatic",
741
+ targetAuthority: "legacy-active",
742
+ mutationType: "indirect-plugin-tree",
743
+ discoverySymbol: null,
744
+ entrypoint: {
745
+ file: "desktop-app-vue/src/main/marketplace/plugin-installer.js",
746
+ symbol: "PluginInstaller.updatePlugin",
747
+ evidence: ["async updatePlugin(pluginId, newVersion)"],
748
+ },
749
+ mutation: {
750
+ file: "desktop-app-vue/src/main/marketplace/plugin-installer.js",
751
+ symbol: "PluginInstaller.updatePlugin",
752
+ evidence: [
753
+ "await this._safeDeleteDir(pluginDir)",
754
+ "await this.extractPlugin(downloadPath, pluginDir)",
755
+ ],
756
+ },
757
+ }),
758
+ writer({
759
+ id: "desktop-plugin-uninstall",
760
+ surface: "desktop",
761
+ triggerClass: "manual",
762
+ targetAuthority: "legacy-active",
763
+ mutationType: "skill-removal",
764
+ discoverySymbol: null,
765
+ entrypoint: {
766
+ file: "desktop-app-vue/src/main/marketplace/plugin-installer.js",
767
+ symbol: "PluginInstaller.uninstallPlugin",
768
+ evidence: ["async uninstallPlugin(pluginId)"],
769
+ },
770
+ mutation: {
771
+ file: "desktop-app-vue/src/main/marketplace/plugin-installer.js",
772
+ symbol: "PluginInstaller._safeDeleteDir",
773
+ evidence: ["await this._safeDeleteDir(pluginDir)"],
774
+ },
775
+ }),
776
+ writer({
777
+ id: "desktop-evomap-import-skill",
778
+ surface: "desktop",
779
+ triggerClass: "manual",
780
+ targetAuthority: "legacy-active",
781
+ mutationType: "legacy-skill-bytes",
782
+ discoverySymbol: "importAsSkill",
783
+ entrypoint: {
784
+ file: "desktop-app-vue/src/main/evomap/evomap-asset-bridge.js",
785
+ symbol: "EvoMapAssetBridge.importAsSkill",
786
+ evidence: ["async importAsSkill(assetId)"],
787
+ },
788
+ mutation: {
789
+ file: "desktop-app-vue/src/main/evomap/evomap-asset-bridge.js",
790
+ symbol: "EvoMapAssetBridge.importAsSkill",
791
+ evidence: ["Convert Gene", "fs.writeFileSync(skillPath, skillContent"],
792
+ },
793
+ }),
794
+ writer({
795
+ id: "desktop-skill-registry-hot-load",
796
+ surface: "desktop",
797
+ triggerClass: "automatic",
798
+ targetAuthority: "legacy-active",
799
+ mutationType: "active-selection",
800
+ discoverySymbol: null,
801
+ entrypoint: {
802
+ file: "desktop-app-vue/src/main/ai-engine/cowork/skills/skill-registry.js",
803
+ symbol: "SkillRegistry.hotLoadSkill",
804
+ evidence: ["hotLoadSkill(skillId, definition)"],
805
+ },
806
+ mutation: {
807
+ file: "desktop-app-vue/src/main/ai-engine/cowork/skills/skill-registry.js",
808
+ symbol: "SkillRegistry.hotLoadSkill",
809
+ evidence: ["this.unregister(skillId)", "this.register(skill)"],
810
+ },
811
+ }),
812
+ writer({
813
+ id: "android-managed-skill-install",
814
+ surface: "android",
815
+ triggerClass: "manual",
816
+ targetAuthority: "legacy-active",
817
+ mutationType: "legacy-skill-bytes-and-activation",
818
+ discoverySymbol: "installManaged",
819
+ entrypoint: {
820
+ file: "android-app/feature-ai/src/main/java/com/chainlesschain/android/feature/ai/cowork/skills/loader/SkillLoader.kt",
821
+ symbol: "SkillLoader.installManaged",
822
+ evidence: [
823
+ "fun installManaged(filename: String, content: String): Boolean",
824
+ ],
825
+ },
826
+ mutation: {
827
+ file: "android-app/feature-ai/src/main/java/com/chainlesschain/android/feature/ai/cowork/skills/loader/SkillLoader.kt",
828
+ symbol: "SkillLoader.installManaged",
829
+ evidence: [
830
+ "val file = File(dir, filename)",
831
+ "file.writeText(content, Charsets.UTF_8)",
832
+ "registry.register(skill)",
833
+ "file.delete()",
834
+ ],
835
+ },
836
+ }),
837
+ writer({
838
+ id: "android-managed-skill-uninstall",
839
+ surface: "android",
840
+ triggerClass: "manual",
841
+ targetAuthority: "legacy-active",
842
+ mutationType: "legacy-skill-removal-and-deactivation",
843
+ discoverySymbol: "uninstallManaged",
844
+ entrypoint: {
845
+ file: "android-app/feature-ai/src/main/java/com/chainlesschain/android/feature/ai/cowork/skills/loader/SkillLoader.kt",
846
+ symbol: "SkillLoader.uninstallManaged",
847
+ evidence: ["fun uninstallManaged(skillName: String): Boolean"],
848
+ },
849
+ mutation: {
850
+ file: "android-app/feature-ai/src/main/java/com/chainlesschain/android/feature/ai/cowork/skills/loader/SkillLoader.kt",
851
+ symbol: "SkillLoader.uninstallManaged",
852
+ evidence: ["file.delete()", "registry.unregister(skillName)"],
853
+ },
854
+ }),
855
+ writer({
856
+ id: "android-skill-loader-activation",
857
+ surface: "android",
858
+ triggerClass: "automatic",
859
+ targetAuthority: "legacy-active",
860
+ mutationType: "startup-active-selection",
861
+ discoverySymbol: "loadFromDirectory",
862
+ entrypoint: {
863
+ file: "android-app/feature-ai/src/main/java/com/chainlesschain/android/feature/ai/cowork/skills/di/SkillModule.kt",
864
+ symbol: "SkillModule.provideSkillLoader",
865
+ evidence: [
866
+ "fun provideSkillLoader(",
867
+ "val loader = SkillLoader(context, parser, registry)",
868
+ "loader.loadAll()",
869
+ ],
870
+ },
871
+ mutation: {
872
+ file: "android-app/feature-ai/src/main/java/com/chainlesschain/android/feature/ai/cowork/skills/loader/SkillLoader.kt",
873
+ symbol: "SkillLoader.loadFromDirectory",
874
+ evidence: [
875
+ "private fun loadFromDirectory(dir: File, source: SkillSource): Int",
876
+ "registry.register(skill)",
877
+ ],
878
+ },
879
+ }),
880
+ writer({
881
+ id: "android-bundled-skill-activation",
882
+ surface: "android",
883
+ triggerClass: "automatic",
884
+ targetAuthority: "legacy-active",
885
+ mutationType: "startup-active-selection",
886
+ discoverySymbol: "loadBundled",
887
+ entrypoint: {
888
+ file: "android-app/feature-ai/src/main/java/com/chainlesschain/android/feature/ai/cowork/skills/di/SkillModule.kt",
889
+ symbol: "SkillModule.provideSkillLoader",
890
+ evidence: ["loader.loadAll()"],
891
+ },
892
+ mutation: {
893
+ file: "android-app/feature-ai/src/main/java/com/chainlesschain/android/feature/ai/cowork/skills/loader/SkillLoader.kt",
894
+ symbol: "SkillLoader.loadBundled",
895
+ evidence: [
896
+ "fun loadBundled(): Int",
897
+ 'assetManager.open("$BUNDLED_SKILLS_DIR/$filename")',
898
+ "registry.register(skill)",
899
+ ],
900
+ },
901
+ }),
902
+ writer({
903
+ id: "android-workspace-skill-activation",
904
+ surface: "android",
905
+ triggerClass: "manual",
906
+ targetAuthority: "legacy-active",
907
+ mutationType: "workspace-active-selection",
908
+ discoverySymbol: null,
909
+ entrypoint: {
910
+ file: "android-app/feature-ai/src/main/java/com/chainlesschain/android/feature/ai/cowork/skills/loader/SkillLoader.kt",
911
+ symbol: "SkillLoader.setWorkspacePath",
912
+ evidence: [
913
+ "fun setWorkspacePath(path: String?)",
914
+ "workspacePath = path",
915
+ ],
916
+ },
917
+ mutation: {
918
+ file: "android-app/feature-ai/src/main/java/com/chainlesschain/android/feature/ai/cowork/skills/loader/SkillLoader.kt",
919
+ symbol: "SkillLoader.loadWorkspace",
920
+ evidence: [
921
+ "fun loadWorkspace(): Int",
922
+ "val path = workspacePath ?: return 0",
923
+ "return loadFromDirectory(dir, SkillSource.WORKSPACE)",
924
+ ],
925
+ },
926
+ }),
927
+ writer({
928
+ id: "android-skill-registry-mutation",
929
+ surface: "android",
930
+ triggerClass: "automatic",
931
+ targetAuthority: "legacy-active",
932
+ mutationType: "active-registry-state",
933
+ discoverySymbol: null,
934
+ entrypoint: {
935
+ file: "android-app/feature-ai/src/main/java/com/chainlesschain/android/feature/ai/cowork/skills/registry/SkillRegistry.kt",
936
+ symbol: "SkillRegistry.register/unregister",
937
+ evidence: [
938
+ "fun register(skill: Skill)",
939
+ "fun unregister(name: String)",
940
+ ],
941
+ },
942
+ mutation: {
943
+ file: "android-app/feature-ai/src/main/java/com/chainlesschain/android/feature/ai/cowork/skills/registry/SkillRegistry.kt",
944
+ symbol: "SkillRegistry.register/unregister",
945
+ evidence: [
946
+ "skills[skill.name] = skill",
947
+ "skills.remove(name)?.let { index.remove(it.name) }",
948
+ ],
949
+ },
950
+ }),
951
+ ]),
952
+ scopeExclusions: Object.freeze([
953
+ scopeExclusion({
954
+ id: "desktop-plugin-enabled-db-state",
955
+ surface: "desktop",
956
+ reasonCode: "database-metadata-without-immediate-skill-registry-mutation",
957
+ evidence: {
958
+ file: "desktop-app-vue/src/main/marketplace/plugin-installer.js",
959
+ symbol: "PluginInstaller.enablePlugin/disablePlugin",
960
+ evidence: [
961
+ "async enablePlugin(pluginId)",
962
+ '"UPDATE installed_plugins SET enabled = 1 WHERE plugin_id = ?"',
963
+ "async disablePlugin(pluginId)",
964
+ '"UPDATE installed_plugins SET enabled = 0 WHERE plugin_id = ?"',
965
+ ],
966
+ },
967
+ }),
968
+ scopeExclusion({
969
+ id: "desktop-legacy-skill-tool-db-state",
970
+ surface: "desktop",
971
+ reasonCode: "legacy-database-skill-metadata-not-skill-md-authority",
972
+ evidence: {
973
+ file: "desktop-app-vue/src/main/skill-tool-system/skill-manager.js",
974
+ symbol: "SkillManager.registerSkill/unregisterSkill/toggleSkillEnabled",
975
+ evidence: [
976
+ "async registerSkill(skillData)",
977
+ "async unregisterSkill(skillId)",
978
+ "async toggleSkillEnabled(skillId, enabled)",
979
+ ],
980
+ },
981
+ }),
982
+ scopeExclusion({
983
+ id: "desktop-marketplace-skill-install-metadata",
984
+ surface: "desktop",
985
+ reasonCode: "marketplace-install-record-without-skill-artifact-mutation",
986
+ evidence: {
987
+ file: "desktop-app-vue/src/main/marketplace/skill-marketplace-client.js",
988
+ symbol: "SkillMarketplaceClient.installSkill/uninstallSkill",
989
+ evidence: [
990
+ "async installSkill(skillId, skillData = {})",
991
+ "INSERT OR REPLACE INTO skill_marketplace_installs",
992
+ "async uninstallSkill(skillId)",
993
+ 'prepare("DELETE FROM skill_marketplace_installs WHERE skill_id = ?")',
994
+ ],
995
+ },
996
+ }),
997
+ ]),
998
+ });