chainlesschain 0.162.155 → 0.162.157

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 (194) hide show
  1. package/README.md +1 -1
  2. package/package.json +2 -2
  3. package/src/assets/web-panel/.build-hash +1 -1
  4. package/src/assets/web-panel/assets/{AIOps-Cth_zZeA.js → AIOps-CfMP2Oud.js} +1 -1
  5. package/src/assets/web-panel/assets/{ActionButton-zfwA3Oxn.js → ActionButton-Zu0N8BQL.js} +1 -1
  6. package/src/assets/web-panel/assets/{Analytics-FeKc4aU2.js → Analytics-DZTwj5T_.js} +3 -3
  7. package/src/assets/web-panel/assets/AppLayout-CVFJh47v.js +9 -0
  8. package/src/assets/web-panel/assets/Artifacts-BbN5V7au.js +1 -0
  9. package/src/assets/web-panel/assets/Artifacts-CRkepl4t.css +1 -0
  10. package/src/assets/web-panel/assets/{Audit-C2gRq5Qi.js → Audit-BMfiLj7T.js} +1 -1
  11. package/src/assets/web-panel/assets/{BackgroundAgents-TeTIFiW-.js → BackgroundAgents-BslPCdGF.js} +1 -1
  12. package/src/assets/web-panel/assets/{Backup-CLJk3k6i.js → Backup-CQ_fMC1r.js} +1 -1
  13. package/src/assets/web-panel/assets/{BaseInput-5ms537NY.js → BaseInput-CsFsARiC.js} +1 -1
  14. package/src/assets/web-panel/assets/{Chat-4Nr5U9PJ.js → Chat-CwfBobco.js} +6 -6
  15. package/src/assets/web-panel/assets/ChatBubbleRenderer-K6Nf3xeN.js +1 -0
  16. package/src/assets/web-panel/assets/{Checkbox-B2Bca5ev.js → Checkbox-DkSyjjPp.js} +1 -1
  17. package/src/assets/web-panel/assets/{Codegen-D6Uysdbv.js → Codegen-B7Fx3zZ6.js} +1 -1
  18. package/src/assets/web-panel/assets/{Col-B3XQ8xc7.js → Col-Dzfqn8Ep.js} +1 -1
  19. package/src/assets/web-panel/assets/{Community-CqwKtoPz.js → Community-DhHPdzMM.js} +1 -1
  20. package/src/assets/web-panel/assets/{Compact-BZZINTus.js → Compact-Ct18_8y7.js} +1 -1
  21. package/src/assets/web-panel/assets/{Compliance-Dr3BXkWA.js → Compliance-CY64IqBi.js} +1 -1
  22. package/src/assets/web-panel/assets/{Cowork-rx_x9Wqc.js → Cowork-BYSmWlUl.js} +3 -3
  23. package/src/assets/web-panel/assets/{Cron-BpZr7rHc.js → Cron-_4xtP3Ug.js} +2 -2
  24. package/src/assets/web-panel/assets/{Crosschain-CeV5EYVg.js → Crosschain-B4qY-Ycr.js} +1 -1
  25. package/src/assets/web-panel/assets/{DID-fe2Qaowz.js → DID-CkCzWkx1.js} +2 -2
  26. package/src/assets/web-panel/assets/{Dashboard-Fh_EdWVa.js → Dashboard-C1scT7Ke.js} +2 -2
  27. package/src/assets/web-panel/assets/{Dropdown-N1PIwWYf.js → Dropdown-DBnQ2EWd.js} +1 -1
  28. package/src/assets/web-panel/assets/{EmailListRenderer-B6vK93Ed.js → EmailListRenderer-C9JhOTq0.js} +1 -1
  29. package/src/assets/web-panel/assets/{FamilyGuardDashboard-e3iUZhAg.js → FamilyGuardDashboard-CWXv5RUv.js} +1 -1
  30. package/src/assets/web-panel/assets/{Federation-uInc9YcN.js → Federation-fYdcbz9W.js} +1 -1
  31. package/src/assets/web-panel/assets/{FormItemContext-DmQZSX0z.js → FormItemContext-CJqOT3Yj.js} +1 -1
  32. package/src/assets/web-panel/assets/{GenericCardRenderer-CV_Z8OAo.js → GenericCardRenderer-DGCsHc5K.js} +1 -1
  33. package/src/assets/web-panel/assets/{Git-jXAhNN8d.js → Git-EH2K-H0Q.js} +2 -2
  34. package/src/assets/web-panel/assets/{Governance-Blw1esBB.js → Governance-DJn1X2pR.js} +1 -1
  35. package/src/assets/web-panel/assets/Inference-Dch1E8qd.js +1 -0
  36. package/src/assets/web-panel/assets/{KnowledgeGraph-5xrglMTK.js → KnowledgeGraph-QIur8j8-.js} +1 -1
  37. package/src/assets/web-panel/assets/{Logs-BGIG9798.js → Logs-DUgHldPg.js} +2 -2
  38. package/src/assets/web-panel/assets/Marketplace-DafrSfvd.js +1 -0
  39. package/src/assets/web-panel/assets/{McpTools-7U8tEhwK.js → McpTools-D2xRbfJx.js} +4 -4
  40. package/src/assets/web-panel/assets/{Memory-BrvboPLE.js → Memory-C6RbVHAo.js} +2 -2
  41. package/src/assets/web-panel/assets/{MobileBridge-nzcd7d1H.js → MobileBridge-BPtVBKqn.js} +1 -1
  42. package/src/assets/web-panel/assets/{MobileProjects-DETVNKa7.js → MobileProjects-Cuw832cr.js} +1 -1
  43. package/src/assets/web-panel/assets/{Mtc-SZcCYec3.js → Mtc-D6O9fWFa.js} +4 -4
  44. package/src/assets/web-panel/assets/{MtcAudit-Cx_d3N17.js → MtcAudit-CWZcXIH1.js} +5 -5
  45. package/src/assets/web-panel/assets/{Multisig-DtcmSUo-.js → Multisig-DhIBxTFd.js} +3 -3
  46. package/src/assets/web-panel/assets/{NLProgramming-Dgx2QHl-.js → NLProgramming-wkBFS33e.js} +1 -1
  47. package/src/assets/web-panel/assets/{Notes-oHTGEHoJ.js → Notes-B09FxncA.js} +3 -3
  48. package/src/assets/web-panel/assets/{NotificationSettings-qKD-IlOl.js → NotificationSettings-oQwtH6-9.js} +1 -1
  49. package/src/assets/web-panel/assets/{OrderTableRenderer-CiU4Sy1J.js → OrderTableRenderer-iFKeNf6Y.js} +1 -1
  50. package/src/assets/web-panel/assets/{Organization-BBNXnltP.js → Organization-CsF-NIjz.js} +4 -4
  51. package/src/assets/web-panel/assets/{Overflow-Df2fDbvT.js → Overflow-bLxv9Dqi.js} +1 -1
  52. package/src/assets/web-panel/assets/{P2P-DUHj6zjO.js → P2P-DVwQtm4q.js} +2 -2
  53. package/src/assets/web-panel/assets/{PdhVaultBrowser-B2nWgdoV.js → PdhVaultBrowser-Bgic3QKm.js} +3 -3
  54. package/src/assets/web-panel/assets/{Permissions-CiW0afny.js → Permissions-as80-9ep.js} +4 -4
  55. package/src/assets/web-panel/assets/{PersonalDataHub-cc1mHU_D.js → PersonalDataHub-BGmUw36a.js} +2 -2
  56. package/src/assets/web-panel/assets/{Pipeline-B93zTapU.js → Pipeline-BM96zBxG.js} +1 -1
  57. package/src/assets/web-panel/assets/{Privacy-Db1jXWfd.js → Privacy-BBOzBSWe.js} +1 -1
  58. package/src/assets/web-panel/assets/{ProjectInit-DFoZ1h9U.js → ProjectInit-GHX41V28.js} +2 -2
  59. package/src/assets/web-panel/assets/{ProjectSettings-BkkUnmYs.js → ProjectSettings-DraqzxKD.js} +2 -2
  60. package/src/assets/web-panel/assets/{Projects-Xa779XLC.js → Projects-BzzdUml4.js} +1 -1
  61. package/src/assets/web-panel/assets/{Providers-DOF01IEN.js → Providers-CSeYNAtW.js} +1 -1
  62. package/src/assets/web-panel/assets/{QrScannerModal-TohRsKd0.js → QrScannerModal-DlzBCdXh.js} +1 -1
  63. package/src/assets/web-panel/assets/{QuickAsk-DjLcr1ZU.js → QuickAsk-p8iB7od_.js} +1 -1
  64. package/src/assets/web-panel/assets/{Recommend--Ism6bMx.js → Recommend-DjOVXacd.js} +1 -1
  65. package/src/assets/web-panel/assets/{RemoteSession-B8CL3YHM.js → RemoteSession-CIGk7gk-.js} +2 -2
  66. package/src/assets/web-panel/assets/Reputation-CjT3M0Di.js +1 -0
  67. package/src/assets/web-panel/assets/{Row-BioxZBBH.js → Row-tw8m6T0c.js} +1 -1
  68. package/src/assets/web-panel/assets/{RssFeed-B2LipwH3.js → RssFeed-B47KBx_f.js} +2 -2
  69. package/src/assets/web-panel/assets/Search-D2sx1PBe.js +1 -0
  70. package/src/assets/web-panel/assets/{Security-TibHuJWP.js → Security-JmtL8g7D.js} +3 -3
  71. package/src/assets/web-panel/assets/{Services-DtkuWseW.js → Services-BxrNqjin.js} +2 -2
  72. package/src/assets/web-panel/assets/{Skeleton-BIcPQae6.js → Skeleton-udk8L18t.js} +1 -1
  73. package/src/assets/web-panel/assets/Skills-DooLT9of.js +1 -0
  74. package/src/assets/web-panel/assets/{Sla-uUSU185m.js → Sla-ITVZE1xI.js} +1 -1
  75. package/src/assets/web-panel/assets/{SpeechSettings-B7Bgc9mk.js → SpeechSettings-DCkfqY1n.js} +1 -1
  76. package/src/assets/web-panel/assets/{SyncSettings-K-XrJ2s9.js → SyncSettings-CkNlgFjM.js} +2 -2
  77. package/src/assets/web-panel/assets/Tasks-BMAoyCM_.js +1 -0
  78. package/src/assets/web-panel/assets/{Templates-CaFnyGDK.js → Templates-BnrFTlrz.js} +1 -1
  79. package/src/assets/web-panel/assets/{Tenant-C2X0PtEC.js → Tenant-BjNsy3-i.js} +1 -1
  80. package/src/assets/web-panel/assets/{Terminal-CKU5yVsT.js → Terminal-C0gxLL7V.js} +2 -2
  81. package/src/assets/web-panel/assets/{TimelineRenderer-8trZeYDC.js → TimelineRenderer-CUtj_KHA.js} +1 -1
  82. package/src/assets/web-panel/assets/{Tokens-BUEEe9US.js → Tokens-DOg61zlq.js} +1 -1
  83. package/src/assets/web-panel/assets/{Trigger-COU97I7Y.js → Trigger-D4ldCewj.js} +1 -1
  84. package/src/assets/web-panel/assets/{Trust-DNWQChaP.js → Trust-3lk_Zd8j.js} +1 -1
  85. package/src/assets/web-panel/assets/{UkeySign-DWX_VtCp.js → UkeySign-kWhFR6Li.js} +1 -1
  86. package/src/assets/web-panel/assets/{VideoEditing-D9eIDhsp.js → VideoEditing-D3GOFVWg.js} +1 -1
  87. package/src/assets/web-panel/assets/{Wallet-BOnCCgIL.js → Wallet-DzrZfBuh.js} +4 -4
  88. package/src/assets/web-panel/assets/{WebAuthn-DN4dD-W8.js → WebAuthn-CyVJVp_g.js} +5 -5
  89. package/src/assets/web-panel/assets/{WorkflowEditor-ClvDb_jX.js → WorkflowEditor-i_b0wi9b.js} +1 -1
  90. package/src/assets/web-panel/assets/{chat-DIxQ_Eeb.js → chat-DwPCK8I7.js} +1 -1
  91. package/src/assets/web-panel/assets/{colors-BOX3WKcP.js → colors-D0vaVqZU.js} +1 -1
  92. package/src/assets/web-panel/assets/{compact-item-Bny82VDi.js → compact-item-Don7nGW2.js} +1 -1
  93. package/src/assets/web-panel/assets/{createContext-Cnoy3enS.js → createContext-D84R5qy2.js} +1 -1
  94. package/src/assets/web-panel/assets/devWarning-BBwWehQ7.js +1 -0
  95. package/src/assets/web-panel/assets/{hasIn-BJ7fkx3F.js → hasIn-BeUqVVKU.js} +1 -1
  96. package/src/assets/web-panel/assets/{icons-DEmcnxBf.js → icons-DG5UD-6K.js} +4 -4
  97. package/src/assets/web-panel/assets/{index-CZ6CHiCQ.js → index-4MkfPLGv.js} +1 -1
  98. package/src/assets/web-panel/assets/{index-7GLXvG8p.js → index-7QUwcGTg.js} +1 -1
  99. package/src/assets/web-panel/assets/{index-C1nHEOFE.js → index-B57al0Z5.js} +1 -1
  100. package/src/assets/web-panel/assets/{index-Kio1ekYg.js → index-BER98o4P.js} +1 -1
  101. package/src/assets/web-panel/assets/{index-D9QEc7Tq.js → index-BNpJf-sf.js} +1 -1
  102. package/src/assets/web-panel/assets/{index--CcGiwAI.js → index-BZ1N07Sp.js} +1 -1
  103. package/src/assets/web-panel/assets/{index-BWPey0Uf.js → index-BlfTf0ka.js} +1 -1
  104. package/src/assets/web-panel/assets/{index-B7Fah_BX.js → index-BohrJpBf.js} +1 -1
  105. package/src/assets/web-panel/assets/{index-BJ8-oLHI.js → index-Br3SOdER.js} +1 -1
  106. package/src/assets/web-panel/assets/{index-D2qNdrNW.js → index-C0_sKVi7.js} +1 -1
  107. package/src/assets/web-panel/assets/{index-CQ-xLCVb.js → index-CAdCTTBC.js} +1 -1
  108. package/src/assets/web-panel/assets/{index-DSRIjAWO.js → index-CExWtm98.js} +1 -1
  109. package/src/assets/web-panel/assets/{index--Xb2lq6E.js → index-CL71rIwo.js} +1 -1
  110. package/src/assets/web-panel/assets/{index-BDkN6YOI.js → index-CfYRv-zA.js} +1 -1
  111. package/src/assets/web-panel/assets/{index-Bk5yST66.js → index-CnnxzIx0.js} +1 -1
  112. package/src/assets/web-panel/assets/{index-2N9Y1cLx.js → index-CrnVEEQO.js} +1 -1
  113. package/src/assets/web-panel/assets/{index-CW6n-y1L.js → index-CzT56x-_.js} +1 -1
  114. package/src/assets/web-panel/assets/{index-OaNFXV8N.js → index-D4b5XqIy.js} +1 -1
  115. package/src/assets/web-panel/assets/{index-CEPTiBWy.js → index-D84BnuFg.js} +1 -1
  116. package/src/assets/web-panel/assets/{index-CZCTan8Q.js → index-D8r7WKk-.js} +1 -1
  117. package/src/assets/web-panel/assets/{index-rn6xd12s.js → index-DA0-EJKx.js} +1 -1
  118. package/src/assets/web-panel/assets/{index-BcmXbIwv.js → index-DBzBLX-K.js} +3 -3
  119. package/src/assets/web-panel/assets/{index-C--PPqwi.js → index-DFFzwrNs.js} +1 -1
  120. package/src/assets/web-panel/assets/index-DJ8etkBT.js +1 -0
  121. package/src/assets/web-panel/assets/{index-Ty4w18mR.js → index-DMT8n9vB.js} +4 -4
  122. package/src/assets/web-panel/assets/{index-qOBKrw-g.js → index-DQor_7NF.js} +1 -1
  123. package/src/assets/web-panel/assets/{index-CN6emwbq.js → index-DT40zd7K.js} +1 -1
  124. package/src/assets/web-panel/assets/{index-BM0mQhVv.js → index-De85D9Pc.js} +1 -1
  125. package/src/assets/web-panel/assets/{index-ceH9DsAi.js → index-IGGttsCv.js} +1 -1
  126. package/src/assets/web-panel/assets/{index-DBhkJqVF.js → index-L73NrmlW.js} +1 -1
  127. package/src/assets/web-panel/assets/{index-BbZynivw.js → index-LMo9bBLJ.js} +1 -1
  128. package/src/assets/web-panel/assets/{index-Bvheiep2.js → index-MKZrJrP_.js} +1 -1
  129. package/src/assets/web-panel/assets/index-OeaK-zXZ.js +1 -0
  130. package/src/assets/web-panel/assets/{index-DxX8hhmL.js → index-WRw1pM5E.js} +1 -1
  131. package/src/assets/web-panel/assets/{index-B6WoW8DJ.js → index-YKLCotoo.js} +1 -1
  132. package/src/assets/web-panel/assets/{index-BP7HFsAK.js → index-hjgrIX5I.js} +1 -1
  133. package/src/assets/web-panel/assets/{index-CnjtAKdw.js → index-m9bn0F1p.js} +1 -1
  134. package/src/assets/web-panel/assets/{index-CEq5Vh0i.js → index-wesQQ2cH.js} +1 -1
  135. package/src/assets/web-panel/assets/{index-B1-h2QrC.js → index-x7VYlV41.js} +1 -1
  136. package/src/assets/web-panel/assets/{initDefaultProps-BmxMBuUZ.js → initDefaultProps-DGeU4vPS.js} +1 -1
  137. package/src/assets/web-panel/assets/{motion-DnXNwo2k.js → motion-Dgqj9ab3.js} +1 -1
  138. package/src/assets/web-panel/assets/{move-WnIJwmZN.js → move-BFyEU6Lr.js} +1 -1
  139. package/src/assets/web-panel/assets/{mtc-parser-DAto-c2w.js → mtc-parser-CueCXXPC.js} +1 -1
  140. package/src/assets/web-panel/assets/{omit-BtvW9W0H.js → omit-D2pU5OyE.js} +1 -1
  141. package/src/assets/web-panel/assets/{pickAttrs-DFqI9-_C.js → pickAttrs-CKTf6zD6.js} +1 -1
  142. package/src/assets/web-panel/assets/{placementArrow-Dax6wOK3.js → placementArrow-DieJaGCN.js} +1 -1
  143. package/src/assets/web-panel/assets/{responsiveObserve-BUFWWC83.js → responsiveObserve-Bxr-rmU6.js} +1 -1
  144. package/src/assets/web-panel/assets/{slide-DyARyuSz.js → slide-CDEDk3Se.js} +1 -1
  145. package/src/assets/web-panel/assets/{statusUtils-BZSDugpi.js → statusUtils-icf2eCTx.js} +1 -1
  146. package/src/assets/web-panel/assets/{styleChecker-B7o_K-4R.js → styleChecker-qKvgmBhE.js} +1 -1
  147. package/src/assets/web-panel/assets/{useFlexGapSupport-Dg7Bg8VG.js → useFlexGapSupport-1_UhiyJZ.js} +1 -1
  148. package/src/assets/web-panel/assets/{useFs-DQYXo5Rk.js → useFs-CFGLXDWh.js} +1 -1
  149. package/src/assets/web-panel/assets/{usePersonalDataHub-E8NBAnkq.js → usePersonalDataHub-UafOXvQ6.js} +1 -1
  150. package/src/assets/web-panel/assets/{vnode-DD71_w1b.js → vnode-BfPqSx79.js} +1 -1
  151. package/src/assets/web-panel/assets/{zoom-zc9EMd3q.js → zoom-CXsVcRB6.js} +1 -1
  152. package/src/assets/web-panel/index.html +2 -2
  153. package/src/command-manifest.json +22 -1
  154. package/src/commands/agenda.js +228 -0
  155. package/src/commands/agent.js +45 -4
  156. package/src/commands/artifacts.js +161 -0
  157. package/src/commands/batch.js +345 -0
  158. package/src/commands/browse.js +204 -2
  159. package/src/data/changelog.json +13 -2
  160. package/src/gateways/ws/artifact-protocol.js +219 -0
  161. package/src/gateways/ws/message-dispatcher.js +6 -0
  162. package/src/gateways/ws/ws-server.js +32 -0
  163. package/src/index.js +18 -0
  164. package/src/lib/accessibility.js +55 -0
  165. package/src/lib/agent-batch.js +235 -0
  166. package/src/lib/agent-notify.js +66 -0
  167. package/src/lib/agent-schedule-store.js +330 -0
  168. package/src/lib/artifact-store.js +236 -0
  169. package/src/lib/chrome-connector.js +314 -0
  170. package/src/lib/hook-runner.cjs +47 -7
  171. package/src/lib/ide-context.js +84 -0
  172. package/src/lib/permission-rules.cjs +26 -3
  173. package/src/lib/plugin-runtime/scopes.js +12 -0
  174. package/src/lib/safe-mode.js +40 -0
  175. package/src/lib/shell-selector.cjs +203 -0
  176. package/src/lib/skill-loader.js +19 -0
  177. package/src/lib/slash-dispatch.js +34 -0
  178. package/src/repl/agent-repl.js +99 -58
  179. package/src/runtime/agent-core.js +197 -8
  180. package/src/runtime/coding-agent-contract-shared.cjs +156 -0
  181. package/src/runtime/coding-agent-policy.cjs +43 -0
  182. package/src/runtime/headless-stream.js +51 -1
  183. package/src/runtime/policies/agent-policy.js +1 -0
  184. package/src/assets/web-panel/assets/AppLayout-C6WIrDZk.js +0 -9
  185. package/src/assets/web-panel/assets/ChatBubbleRenderer-BFEnA8LN.js +0 -1
  186. package/src/assets/web-panel/assets/Inference-CoK8Ia0Z.js +0 -1
  187. package/src/assets/web-panel/assets/Marketplace-DFqhJMuY.js +0 -1
  188. package/src/assets/web-panel/assets/Reputation-CaRxB3Ep.js +0 -1
  189. package/src/assets/web-panel/assets/Search-BpjLBV8u.js +0 -1
  190. package/src/assets/web-panel/assets/Skills-DoTWIQOX.js +0 -1
  191. package/src/assets/web-panel/assets/Tasks-B3hEXNcI.js +0 -1
  192. package/src/assets/web-panel/assets/devWarning-Dr9dzlQ5.js +0 -1
  193. package/src/assets/web-panel/assets/index-B92M3t6B.js +0 -1
  194. package/src/assets/web-panel/assets/index-d2UcGpK-.js +0 -1
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "_generated": "scripts/gen-command-manifest.mjs — do not edit by hand",
3
- "commandCount": 170,
3
+ "commandCount": 173,
4
4
  "commands": [
5
5
  {
6
6
  "name": "a2a",
@@ -16,6 +16,13 @@
16
16
  "register": "registerActivityPubCommand",
17
17
  "summary": "ActivityPub C2S bridge — actors, outbox/inbox, Follow/Create/Like/Announce"
18
18
  },
19
+ {
20
+ "name": "agenda",
21
+ "aliases": [],
22
+ "module": "./commands/agenda.js",
23
+ "register": "registerAgendaCommand",
24
+ "summary": "Fire agent-scheduled wakeups / crons / monitors (persisted by the `schedule` tool)"
25
+ },
19
26
  {
20
27
  "name": "agent",
21
28
  "aliases": ["a"],
@@ -44,6 +51,13 @@
44
51
  "register": "registerAndroidCommand",
45
52
  "summary": "Android-native bridge: ContentResolver / SAF / Accessibility / Shizuku / root (Plan A A7)"
46
53
  },
54
+ {
55
+ "name": "artifacts",
56
+ "aliases": ["artifact"],
57
+ "module": "./commands/artifacts.js",
58
+ "register": "registerArtifactsCommand",
59
+ "summary": "Browse agent-published deliverables (reports/patches/screenshots; see the publish_artifact tool)"
60
+ },
47
61
  {
48
62
  "name": "ask",
49
63
  "aliases": [],
@@ -100,6 +114,13 @@
100
114
  "register": "registerAutomationCommand",
101
115
  "summary": "Workflow automation engine — 12 SaaS connectors + triggers (Phase 96)"
102
116
  },
117
+ {
118
+ "name": "batch",
119
+ "aliases": [],
120
+ "module": "./commands/batch.js",
121
+ "register": "registerBatchCommand",
122
+ "summary": "Split a large change into independent units, run each in its own git worktree in parallel, and aggregate results"
123
+ },
103
124
  {
104
125
  "name": "bi",
105
126
  "aliases": [],
@@ -0,0 +1,228 @@
1
+ /**
2
+ * `cc agenda` — consumer for the agent-scheduled Monitor / Cron / Wakeup
3
+ * entries (gap-analysis 第四阶段 #3). The `schedule` agent tool PERSISTS
4
+ * intent; this command is what actually FIRES it — run it periodically
5
+ * (`cc loop --every 1m -- cc agenda run`, a system cron, or by hand):
6
+ *
7
+ * cc agenda list [--json] show all scheduled entries
8
+ * cc agenda run [--json] [--dry-run] fire everything due right now
9
+ * cc agenda cancel <id> remove one entry
10
+ *
11
+ * `run` for each due entry:
12
+ * - wakeup → spawn `cc agent -p <prompt>`, mark fired
13
+ * - cron → spawn `cc agent -p <prompt>`, advance to next fire time
14
+ * - monitor → run <command>; if output matches stop_when, send the
15
+ * notification and stop; else re-arm for the next interval
16
+ */
17
+
18
+ import { spawn, execSync } from "node:child_process";
19
+ import { fileURLToPath } from "node:url";
20
+ import chalk from "chalk";
21
+ import { AgentScheduleStore } from "../lib/agent-schedule-store.js";
22
+ import { sendAgentNotification } from "../lib/agent-notify.js";
23
+
24
+ const BIN_PATH = fileURLToPath(
25
+ new URL("../../bin/chainlesschain.js", import.meta.url),
26
+ );
27
+
28
+ export function registerAgendaCommand(program) {
29
+ const cmd = program
30
+ .command("agenda")
31
+ .description(
32
+ "Fire agent-scheduled wakeups / crons / monitors (persisted by the `schedule` tool)",
33
+ );
34
+
35
+ cmd
36
+ .command("list", { isDefault: true })
37
+ .description("List all scheduled entries")
38
+ .option("--kind <kind>", "Filter by kind (wakeup|cron|monitor)")
39
+ .option("--json", "Machine-readable JSON output")
40
+ .action((options) => {
41
+ process.exitCode = runAgendaList(options);
42
+ });
43
+
44
+ cmd
45
+ .command("run")
46
+ .description("Fire every entry that is due now")
47
+ .option("--dry-run", "Show what would fire without running anything")
48
+ .option("--json", "Machine-readable JSON output")
49
+ .action(async (options) => {
50
+ process.exitCode = await runAgendaRun(options);
51
+ });
52
+
53
+ cmd
54
+ .command("cancel <id>")
55
+ .description("Remove a scheduled entry by id")
56
+ .option("--json", "Machine-readable JSON output")
57
+ .action((id, options) => {
58
+ process.exitCode = runAgendaCancel(id, options);
59
+ });
60
+ }
61
+
62
+ export function runAgendaList(options = {}, _deps = {}) {
63
+ const log = _deps.log || ((m) => console.log(m));
64
+ const store = _deps.store || new AgentScheduleStore();
65
+ const entries = store.list(options.kind || null);
66
+ if (options.json) {
67
+ log(JSON.stringify({ entries }, null, 2));
68
+ return 0;
69
+ }
70
+ if (entries.length === 0) {
71
+ log(chalk.gray("\n No scheduled entries.\n"));
72
+ return 0;
73
+ }
74
+ log("");
75
+ log(chalk.bold(" Agenda:\n"));
76
+ for (const e of entries) {
77
+ const when =
78
+ e.kind === "wakeup"
79
+ ? new Date(e.dueAt).toISOString()
80
+ : e.kind === "cron"
81
+ ? `${e.cron} (next ${new Date(e.nextAt).toISOString()})`
82
+ : `every ${Math.round(e.intervalMs / 1000)}s (next ${new Date(e.nextAt).toISOString()})`;
83
+ log(
84
+ ` ${chalk.cyan(e.kind.padEnd(8))} ${chalk.dim(e.id.slice(0, 8))} ` +
85
+ `${statusBadge(e.status)} ${e.label || truncate(e.prompt || e.command, 40)}`,
86
+ );
87
+ log(` ${chalk.dim(when)}`);
88
+ }
89
+ log("");
90
+ return 0;
91
+ }
92
+
93
+ export function runAgendaCancel(id, options = {}, _deps = {}) {
94
+ const log = _deps.log || ((m) => console.log(m));
95
+ const store = _deps.store || new AgentScheduleStore();
96
+ const removed = store.cancel(id);
97
+ if (options.json) {
98
+ log(JSON.stringify({ cancelled: removed ? removed.id : null }, null, 2));
99
+ return removed ? 0 : 2;
100
+ }
101
+ if (removed) {
102
+ log(chalk.green(`\n ✓ Cancelled ${removed.kind} ${removed.id}\n`));
103
+ return 0;
104
+ }
105
+ log(chalk.red(`\n ✖ No entry with id ${id}\n`));
106
+ return 2;
107
+ }
108
+
109
+ /**
110
+ * Fire due entries. Returns 0 unless a monitor command / agent spawn failed in
111
+ * a way worth signalling; JSON summary lists every action taken.
112
+ */
113
+ export async function runAgendaRun(options = {}, _deps = {}) {
114
+ const log = _deps.log || ((m) => console.log(m));
115
+ const store = _deps.store || new AgentScheduleStore();
116
+ const spawnAgent = _deps.spawnAgent || defaultSpawnAgent;
117
+ const runCommand = _deps.runCommand || defaultRunCommand;
118
+ const notify = _deps.notify || sendAgentNotification;
119
+ const due = store.due(null, _deps.now ? _deps.now() : null);
120
+ const actions = [];
121
+
122
+ for (const entry of due) {
123
+ if (options.dryRun) {
124
+ actions.push({ id: entry.id, kind: entry.kind, action: "would-fire" });
125
+ continue;
126
+ }
127
+ try {
128
+ if (entry.kind === "wakeup") {
129
+ await spawnAgent(entry.prompt);
130
+ store.markWakeupFired(entry.id);
131
+ actions.push({ id: entry.id, kind: "wakeup", action: "fired" });
132
+ } else if (entry.kind === "cron") {
133
+ await spawnAgent(entry.prompt);
134
+ store.advanceCron(entry.id);
135
+ actions.push({ id: entry.id, kind: "cron", action: "fired" });
136
+ } else if (entry.kind === "monitor") {
137
+ const output = await runCommand(entry.command);
138
+ const matched = entry.stopWhen
139
+ ? new RegExp(entry.stopWhen).test(output)
140
+ : false;
141
+ if (matched) {
142
+ await notify({
143
+ title: entry.notify?.title || `Monitor matched: ${entry.command}`,
144
+ body: truncate(output, 500),
145
+ level: "success",
146
+ });
147
+ }
148
+ const updated = store.recordMonitorCheck(entry.id, { matched });
149
+ actions.push({
150
+ id: entry.id,
151
+ kind: "monitor",
152
+ action: matched ? "matched" : "checked",
153
+ status: updated?.status,
154
+ });
155
+ }
156
+ } catch (err) {
157
+ actions.push({
158
+ id: entry.id,
159
+ kind: entry.kind,
160
+ action: "error",
161
+ error: err.message,
162
+ });
163
+ }
164
+ }
165
+
166
+ if (options.json) {
167
+ log(JSON.stringify({ due: due.length, actions }, null, 2));
168
+ } else if (actions.length === 0) {
169
+ log(chalk.gray(" Nothing due.\n"));
170
+ } else {
171
+ for (const a of actions) {
172
+ const colour = a.action === "error" ? chalk.red : chalk.green;
173
+ log(colour(` ${a.kind} ${a.id.slice(0, 8)}: ${a.action}`));
174
+ }
175
+ }
176
+ return actions.some((a) => a.action === "error") ? 1 : 0;
177
+ }
178
+
179
+ // ─── default effectful deps (overridable in tests) ─────────────────────────
180
+
181
+ function defaultSpawnAgent(prompt) {
182
+ return new Promise((resolve, reject) => {
183
+ const child = spawn(process.execPath, [BIN_PATH, "agent", "-p", prompt], {
184
+ stdio: "ignore",
185
+ detached: false,
186
+ env: process.env,
187
+ });
188
+ child.on("error", reject);
189
+ child.on("close", (code) =>
190
+ code === 0 || code == null
191
+ ? resolve(code)
192
+ : reject(new Error(`cc agent exited with code ${code}`)),
193
+ );
194
+ });
195
+ }
196
+
197
+ function defaultRunCommand(command) {
198
+ try {
199
+ return execSync(command, {
200
+ encoding: "utf-8",
201
+ stdio: ["ignore", "pipe", "pipe"],
202
+ timeout: 60000,
203
+ });
204
+ } catch (err) {
205
+ // A non-zero exit still yields output we want to match against.
206
+ return (err.stdout || "") + (err.stderr || "");
207
+ }
208
+ }
209
+
210
+ function statusBadge(status) {
211
+ switch (status) {
212
+ case "pending":
213
+ case "active":
214
+ return chalk.green(status);
215
+ case "fired":
216
+ case "matched":
217
+ return chalk.cyan(status);
218
+ case "exhausted":
219
+ return chalk.yellow(status);
220
+ default:
221
+ return status;
222
+ }
223
+ }
224
+
225
+ function truncate(text, n) {
226
+ const s = String(text || "");
227
+ return s.length > n ? s.slice(0, n) + "…" : s;
228
+ }
@@ -168,6 +168,18 @@ export function registerAgentCommand(program) {
168
168
  "--safe-mode",
169
169
  "Run bare: disable project memory, settings hooks, memory recall, IDE context, status line and update notice (permission rules STAY active)",
170
170
  )
171
+ .option(
172
+ "--bare",
173
+ "Everything --safe-mode disables PLUS skills, plugins and MCP/IDE auto-connect — minimal fast surface for scripted calls (explicit --mcp-config still loads; permission rules STAY active)",
174
+ )
175
+ .option(
176
+ "--disable-slash-commands",
177
+ "Interactive REPL: don't dispatch '/' input as slash commands — it reaches the model verbatim (/exit and /quit stay live)",
178
+ )
179
+ .option(
180
+ "--ax-screen-reader",
181
+ "Screen-reader friendly output: no ANSI colors, no in-place status line repaints (also CC_SCREEN_READER=1)",
182
+ )
171
183
  .option(
172
184
  "--worktree",
173
185
  "Run this session in a fresh git worktree (isolated branch; auto-removed when the session changes nothing)",
@@ -371,17 +383,44 @@ export function registerAgentCommand(program) {
371
383
  }
372
384
  // --safe-mode flag OR CC_SAFE_MODE / CLAUDE_CODE_SAFE_MODE env (Claude-Code
373
385
  // 2.1.169 parity): flip every customization kill-switch BEFORE anything
374
- // loads. Permission rules stay active.
386
+ // loads. Permission rules stay active. --bare (CC_BARE) is safe mode
387
+ // PLUS skills, plugins and MCP/IDE/PDH/JetBrains auto-connect off.
375
388
  {
376
- const { applySafeMode, safeModeRequested } =
377
- await import("../lib/safe-mode.js");
378
- if (safeModeRequested(options)) {
389
+ const {
390
+ applySafeMode,
391
+ safeModeRequested,
392
+ applyBareMode,
393
+ bareModeRequested,
394
+ } = await import("../lib/safe-mode.js");
395
+ if (bareModeRequested(options)) {
396
+ const applied = applyBareMode();
397
+ // Ambient auto-connects off; an EXPLICIT --ide/--pdh/--jetbrains
398
+ // (or --mcp-config, handled downstream) still wins — bare kills
399
+ // defaults, not explicit input.
400
+ options.mcp = false;
401
+ if (options.ide === undefined) options.ide = false;
402
+ if (options.pdh === undefined) options.pdh = false;
403
+ if (options.jetbrains === undefined) options.jetbrains = false;
404
+ process.stderr.write(
405
+ `bare mode: hooks/skills/plugins/memory/MCP-auto-connect disabled (${applied.join(", ")}) — permission rules stay active.\n`,
406
+ );
407
+ } else if (safeModeRequested(options)) {
379
408
  const applied = applySafeMode();
380
409
  process.stderr.write(
381
410
  `safe mode: customizations disabled (${applied.join(", ")}) — permission rules stay active.\n`,
382
411
  );
383
412
  }
384
413
  }
414
+ // --ax-screen-reader flag OR CC_SCREEN_READER env: linear output for
415
+ // screen readers (mono theme + no repainting status line). Applied
416
+ // before anything renders.
417
+ {
418
+ const { screenReaderRequested, applyScreenReaderMode } =
419
+ await import("../lib/accessibility.js");
420
+ if (screenReaderRequested(options)) {
421
+ applyScreenReaderMode();
422
+ }
423
+ }
385
424
  // --project-mcp: opt IN to project-scoped `.mcp.json` discovery, which is
386
425
  // off by default (a checked-in .mcp.json can spawn commands). loadProjectMcp
387
426
  // reads CC_PROJECT_MCP; set it here so the opt-in reaches every run mode
@@ -1089,6 +1128,8 @@ export function registerAgentCommand(program) {
1089
1128
  pdh: options.pdh,
1090
1129
  // --jetbrains / --no-jetbrains: IDEA built-in MCP for the interactive session
1091
1130
  jetbrains: options.jetbrains,
1131
+ // --disable-slash-commands: REPL sends "/" input to the model verbatim
1132
+ disableSlashCommands: options.disableSlashCommands === true,
1092
1133
  });
1093
1134
  await runtime.startAgentSession();
1094
1135
  // Interactive session ended (REPL closed) — settle the worktree.
@@ -0,0 +1,161 @@
1
+ /**
2
+ * `cc artifacts` — browse/manage the agent-published deliverable store
3
+ * (gap-analysis P1 #10). The `publish_artifact` agent tool copies finished
4
+ * deliverables (reports/patches/screenshots/logs) into
5
+ * `~/.chainlesschain/artifacts/`; this command is the user-facing surface:
6
+ *
7
+ * cc artifacts list [--session <id>] [--kind <k>] [--json]
8
+ * cc artifacts show <id> [--json] metadata + stored path
9
+ * cc artifacts open <id> print the stored path (pipe/open)
10
+ * cc artifacts remove <id>
11
+ * cc artifacts clean [--json] drop expired artifacts (TTL)
12
+ */
13
+
14
+ import chalk from "chalk";
15
+ import { ArtifactStore } from "../lib/artifact-store.js";
16
+
17
+ export function registerArtifactsCommand(program) {
18
+ const cmd = program
19
+ .command("artifacts")
20
+ .alias("artifact")
21
+ .description(
22
+ "Browse agent-published deliverables (reports/patches/screenshots; see the publish_artifact tool)",
23
+ );
24
+
25
+ cmd
26
+ .command("list", { isDefault: true })
27
+ .description("List published artifacts")
28
+ .option("--session <id>", "Only artifacts from one agent session")
29
+ .option(
30
+ "--kind <kind>",
31
+ "Filter by kind (report|patch|screenshot|log|data|other)",
32
+ )
33
+ .option("--json", "Machine-readable JSON output")
34
+ .action((options) => {
35
+ process.exitCode = runArtifactsList(options);
36
+ });
37
+
38
+ cmd
39
+ .command("show <id>")
40
+ .description("Show one artifact's metadata + stored path")
41
+ .option("--json", "Machine-readable JSON output")
42
+ .action((id, options) => {
43
+ process.exitCode = runArtifactsShow(id, options);
44
+ });
45
+
46
+ cmd
47
+ .command("open <id>")
48
+ .description("Print the artifact's stored file path (for piping/opening)")
49
+ .action((id) => {
50
+ process.exitCode = runArtifactsOpen(id);
51
+ });
52
+
53
+ cmd
54
+ .command("remove <id>")
55
+ .alias("rm")
56
+ .description("Remove one artifact (stored copy + metadata)")
57
+ .option("--json", "Machine-readable JSON output")
58
+ .action((id, options) => {
59
+ process.exitCode = runArtifactsRemove(id, options);
60
+ });
61
+
62
+ cmd
63
+ .command("clean")
64
+ .description("Remove expired artifacts (past their TTL)")
65
+ .option("--json", "Machine-readable JSON output")
66
+ .action((options) => {
67
+ process.exitCode = runArtifactsClean(options);
68
+ });
69
+ }
70
+
71
+ export function runArtifactsList(options = {}, deps = {}) {
72
+ const store = deps.store || new ArtifactStore();
73
+ let entries = store.list({ sessionId: options.session });
74
+ if (options.kind) {
75
+ entries = entries.filter((e) => e.kind === String(options.kind));
76
+ }
77
+ if (options.json) {
78
+ console.log(JSON.stringify({ artifacts: entries }, null, 2));
79
+ return 0;
80
+ }
81
+ if (entries.length === 0) {
82
+ console.log(
83
+ chalk.dim(
84
+ "No artifacts. Agents publish deliverables with the publish_artifact tool.",
85
+ ),
86
+ );
87
+ return 0;
88
+ }
89
+ for (const e of entries) {
90
+ console.log(
91
+ `${chalk.cyan(e.id)} ${chalk.bold(e.title)} ${chalk.dim(
92
+ `[${e.kind}] ${e.mime} ${e.size}B ${e.createdAt}${
93
+ e.sessionId ? ` session=${e.sessionId}` : ""
94
+ }`,
95
+ )}`,
96
+ );
97
+ }
98
+ console.log(
99
+ chalk.dim(`${entries.length} artifact(s). cc artifacts show <id>`),
100
+ );
101
+ return 0;
102
+ }
103
+
104
+ export function runArtifactsShow(id, options = {}, deps = {}) {
105
+ const store = deps.store || new ArtifactStore();
106
+ const entry = store.get(id);
107
+ if (!entry) {
108
+ console.error(chalk.red(`No artifact with id "${id}".`));
109
+ return 1;
110
+ }
111
+ const payload = { ...entry, storedPath: store.storedPath(entry) };
112
+ if (options.json) {
113
+ console.log(JSON.stringify(payload, null, 2));
114
+ return 0;
115
+ }
116
+ for (const [k, v] of Object.entries(payload)) {
117
+ console.log(`${chalk.dim(k.padEnd(11))} ${v == null ? "" : v}`);
118
+ }
119
+ return 0;
120
+ }
121
+
122
+ export function runArtifactsOpen(id, deps = {}) {
123
+ const store = deps.store || new ArtifactStore();
124
+ const entry = store.get(id);
125
+ if (!entry) {
126
+ console.error(chalk.red(`No artifact with id "${id}".`));
127
+ return 1;
128
+ }
129
+ console.log(store.storedPath(entry));
130
+ return 0;
131
+ }
132
+
133
+ export function runArtifactsRemove(id, options = {}, deps = {}) {
134
+ const store = deps.store || new ArtifactStore();
135
+ const found = store.remove(id);
136
+ if (options.json) {
137
+ console.log(JSON.stringify({ removed: found ? id : null, found }));
138
+ return found ? 0 : 1;
139
+ }
140
+ if (!found) {
141
+ console.error(chalk.red(`No artifact with id "${id}".`));
142
+ return 1;
143
+ }
144
+ console.log(chalk.green(`Removed ${id}.`));
145
+ return 0;
146
+ }
147
+
148
+ export function runArtifactsClean(options = {}, deps = {}) {
149
+ const store = deps.store || new ArtifactStore();
150
+ const { removed } = store.cleanupExpired();
151
+ if (options.json) {
152
+ console.log(JSON.stringify({ removed }));
153
+ return 0;
154
+ }
155
+ console.log(
156
+ removed > 0
157
+ ? chalk.green(`Removed ${removed} expired artifact(s).`)
158
+ : chalk.dim("Nothing expired."),
159
+ );
160
+ return 0;
161
+ }