chainlesschain 0.162.154 → 0.162.155

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 (198) hide show
  1. package/README.md +1 -1
  2. package/package.json +1 -1
  3. package/src/assets/web-panel/.build-hash +1 -1
  4. package/src/assets/web-panel/assets/{AIOps-CIpoXyVI.js → AIOps-Cth_zZeA.js} +1 -1
  5. package/src/assets/web-panel/assets/{ActionButton-Ch_QXIPk.js → ActionButton-zfwA3Oxn.js} +1 -1
  6. package/src/assets/web-panel/assets/{Analytics-CvaBYShv.js → Analytics-FeKc4aU2.js} +2 -2
  7. package/src/assets/web-panel/assets/AppLayout-C6WIrDZk.js +9 -0
  8. package/src/assets/web-panel/assets/{Audit-Bng8eHCW.js → Audit-C2gRq5Qi.js} +1 -1
  9. package/src/assets/web-panel/assets/BackgroundAgents-Dq2340Kl.css +1 -0
  10. package/src/assets/web-panel/assets/BackgroundAgents-TeTIFiW-.js +1 -0
  11. package/src/assets/web-panel/assets/{Backup-DvBs8-lm.js → Backup-CLJk3k6i.js} +1 -1
  12. package/src/assets/web-panel/assets/{BaseInput-DKwajm0g.js → BaseInput-5ms537NY.js} +1 -1
  13. package/src/assets/web-panel/assets/{Chat-BoGpZ3uO.js → Chat-4Nr5U9PJ.js} +5 -5
  14. package/src/assets/web-panel/assets/ChatBubbleRenderer-BFEnA8LN.js +1 -0
  15. package/src/assets/web-panel/assets/{Checkbox-BMJEmxFQ.js → Checkbox-B2Bca5ev.js} +1 -1
  16. package/src/assets/web-panel/assets/{Codegen-Bsoag5CV.js → Codegen-D6Uysdbv.js} +1 -1
  17. package/src/assets/web-panel/assets/{Col-CDjH9-sp.js → Col-B3XQ8xc7.js} +1 -1
  18. package/src/assets/web-panel/assets/{Community-Cg2QHPQ6.js → Community-CqwKtoPz.js} +1 -1
  19. package/src/assets/web-panel/assets/{Compact-BU2BaqP-.js → Compact-BZZINTus.js} +1 -1
  20. package/src/assets/web-panel/assets/{Compliance-D6ZYMCqZ.js → Compliance-Dr3BXkWA.js} +1 -1
  21. package/src/assets/web-panel/assets/{Cowork-DaZ8VW-I.js → Cowork-rx_x9Wqc.js} +2 -2
  22. package/src/assets/web-panel/assets/{Cron-DQY1RH9v.js → Cron-BpZr7rHc.js} +2 -2
  23. package/src/assets/web-panel/assets/{Crosschain-BVR28vk9.js → Crosschain-CeV5EYVg.js} +1 -1
  24. package/src/assets/web-panel/assets/{DID-N44KvTP-.js → DID-fe2Qaowz.js} +2 -2
  25. package/src/assets/web-panel/assets/{Dashboard-Bjhlx6wS.js → Dashboard-Fh_EdWVa.js} +2 -2
  26. package/src/assets/web-panel/assets/{Dropdown-CpLYxpy1.js → Dropdown-N1PIwWYf.js} +1 -1
  27. package/src/assets/web-panel/assets/{EmailListRenderer-srEITSPI.js → EmailListRenderer-B6vK93Ed.js} +1 -1
  28. package/src/assets/web-panel/assets/{FamilyGuardDashboard-juOC_fX2.js → FamilyGuardDashboard-e3iUZhAg.js} +1 -1
  29. package/src/assets/web-panel/assets/{Federation-nRaQtaXW.js → Federation-uInc9YcN.js} +1 -1
  30. package/src/assets/web-panel/assets/{FormItemContext-DflhTj09.js → FormItemContext-DmQZSX0z.js} +1 -1
  31. package/src/assets/web-panel/assets/{GenericCardRenderer-DulI_3NI.js → GenericCardRenderer-CV_Z8OAo.js} +1 -1
  32. package/src/assets/web-panel/assets/{Git-BxOPefXn.js → Git-jXAhNN8d.js} +2 -2
  33. package/src/assets/web-panel/assets/{Governance-C6G_Wnwi.js → Governance-Blw1esBB.js} +1 -1
  34. package/src/assets/web-panel/assets/{Inference-BnFYa2BF.js → Inference-CoK8Ia0Z.js} +1 -1
  35. package/src/assets/web-panel/assets/{KnowledgeGraph-TqQLEabm.js → KnowledgeGraph-5xrglMTK.js} +1 -1
  36. package/src/assets/web-panel/assets/{Logs-BH4AVh7s.js → Logs-BGIG9798.js} +2 -2
  37. package/src/assets/web-panel/assets/{Marketplace-DoWLTaEE.js → Marketplace-DFqhJMuY.js} +1 -1
  38. package/src/assets/web-panel/assets/{McpTools-D6yC7OG_.js → McpTools-7U8tEhwK.js} +5 -5
  39. package/src/assets/web-panel/assets/{Memory-DLCeHj21.js → Memory-BrvboPLE.js} +2 -2
  40. package/src/assets/web-panel/assets/{MobileBridge-BZBE0GRl.js → MobileBridge-nzcd7d1H.js} +1 -1
  41. package/src/assets/web-panel/assets/{MobileProjects-DJA15G1J.js → MobileProjects-DETVNKa7.js} +1 -1
  42. package/src/assets/web-panel/assets/{Mtc-CyTKJDHn.js → Mtc-SZcCYec3.js} +4 -4
  43. package/src/assets/web-panel/assets/{MtcAudit-DZKjgEVc.js → MtcAudit-Cx_d3N17.js} +5 -5
  44. package/src/assets/web-panel/assets/{Multisig-2rMPNhSO.js → Multisig-DtcmSUo-.js} +3 -3
  45. package/src/assets/web-panel/assets/{NLProgramming-VeMk4Fx-.js → NLProgramming-Dgx2QHl-.js} +1 -1
  46. package/src/assets/web-panel/assets/{Notes-jr2GHMhh.js → Notes-oHTGEHoJ.js} +3 -3
  47. package/src/assets/web-panel/assets/{NotificationSettings-WN9VZyFb.js → NotificationSettings-qKD-IlOl.js} +1 -1
  48. package/src/assets/web-panel/assets/{OrderTableRenderer-CjNO-e9T.js → OrderTableRenderer-CiU4Sy1J.js} +1 -1
  49. package/src/assets/web-panel/assets/{Organization-DdjVHuzT.js → Organization-BBNXnltP.js} +4 -4
  50. package/src/assets/web-panel/assets/{Overflow-l8vBsGGq.js → Overflow-Df2fDbvT.js} +1 -1
  51. package/src/assets/web-panel/assets/{OverrideContext-BlgL9440.js → OverrideContext-C0w0P4A3.js} +1 -1
  52. package/src/assets/web-panel/assets/{P2P-CVQDHHwq.js → P2P-DUHj6zjO.js} +2 -2
  53. package/src/assets/web-panel/assets/{PdhVaultBrowser-CTsNh8qE.js → PdhVaultBrowser-B2nWgdoV.js} +4 -4
  54. package/src/assets/web-panel/assets/{Permissions-DLW87uyK.js → Permissions-CiW0afny.js} +3 -3
  55. package/src/assets/web-panel/assets/{PersonalDataHub-N8OvASTx.js → PersonalDataHub-cc1mHU_D.js} +2 -2
  56. package/src/assets/web-panel/assets/{Pipeline-BPZmdlz2.js → Pipeline-B93zTapU.js} +1 -1
  57. package/src/assets/web-panel/assets/{Privacy-MFZw_GNh.js → Privacy-Db1jXWfd.js} +1 -1
  58. package/src/assets/web-panel/assets/{ProjectInit-zW0pEsfU.js → ProjectInit-DFoZ1h9U.js} +2 -2
  59. package/src/assets/web-panel/assets/{ProjectSettings-CppVHr_o.js → ProjectSettings-BkkUnmYs.js} +2 -2
  60. package/src/assets/web-panel/assets/{Projects-BTglkJO2.js → Projects-Xa779XLC.js} +1 -1
  61. package/src/assets/web-panel/assets/{Providers-CPHZ6JKT.js → Providers-DOF01IEN.js} +1 -1
  62. package/src/assets/web-panel/assets/{QrScannerModal-DO4klNZ2.js → QrScannerModal-TohRsKd0.js} +1 -1
  63. package/src/assets/web-panel/assets/{QuickAsk-B37TTqUa.js → QuickAsk-DjLcr1ZU.js} +1 -1
  64. package/src/assets/web-panel/assets/{Recommend-n7KIfK7y.js → Recommend--Ism6bMx.js} +1 -1
  65. package/src/assets/web-panel/assets/{RemoteSession-SjVoS9mm.js → RemoteSession-B8CL3YHM.js} +2 -2
  66. package/src/assets/web-panel/assets/{Reputation-Dt6RTeHi.js → Reputation-CaRxB3Ep.js} +1 -1
  67. package/src/assets/web-panel/assets/{Row-Dty6jz5V.js → Row-BioxZBBH.js} +1 -1
  68. package/src/assets/web-panel/assets/{RssFeed-DDLhqw5j.js → RssFeed-B2LipwH3.js} +3 -3
  69. package/src/assets/web-panel/assets/{Search-DrYbXi-W.js → Search-BpjLBV8u.js} +1 -1
  70. package/src/assets/web-panel/assets/{Security-Fc9Z6fbB.js → Security-TibHuJWP.js} +3 -3
  71. package/src/assets/web-panel/assets/{Services-BAhPgjSM.js → Services-DtkuWseW.js} +2 -2
  72. package/src/assets/web-panel/assets/{Skeleton-8JF7EPfE.js → Skeleton-BIcPQae6.js} +1 -1
  73. package/src/assets/web-panel/assets/Skills-DoTWIQOX.js +1 -0
  74. package/src/assets/web-panel/assets/{Sla-CSvjcATc.js → Sla-uUSU185m.js} +1 -1
  75. package/src/assets/web-panel/assets/{SpeechSettings-Demx7Gnx.js → SpeechSettings-B7Bgc9mk.js} +1 -1
  76. package/src/assets/web-panel/assets/{SyncSettings-CKLnRWJr.js → SyncSettings-K-XrJ2s9.js} +2 -2
  77. package/src/assets/web-panel/assets/{Tasks-mhITRxjv.js → Tasks-B3hEXNcI.js} +1 -1
  78. package/src/assets/web-panel/assets/{Templates-AjQI5rxD.js → Templates-CaFnyGDK.js} +1 -1
  79. package/src/assets/web-panel/assets/{Tenant-dbtEh1yR.js → Tenant-C2X0PtEC.js} +1 -1
  80. package/src/assets/web-panel/assets/{Terminal-DX-9jjfk.js → Terminal-CKU5yVsT.js} +2 -2
  81. package/src/assets/web-panel/assets/{TimelineRenderer-C11EDZRt.js → TimelineRenderer-8trZeYDC.js} +1 -1
  82. package/src/assets/web-panel/assets/{Tokens-GiA9fiZn.js → Tokens-BUEEe9US.js} +1 -1
  83. package/src/assets/web-panel/assets/{Trigger-BPcnclJn.js → Trigger-COU97I7Y.js} +1 -1
  84. package/src/assets/web-panel/assets/{Trust-C-DVY8nq.js → Trust-DNWQChaP.js} +1 -1
  85. package/src/assets/web-panel/assets/{UkeySign-DxodSwME.js → UkeySign-DWX_VtCp.js} +1 -1
  86. package/src/assets/web-panel/assets/{VideoEditing-D_WV0O8O.js → VideoEditing-D9eIDhsp.js} +1 -1
  87. package/src/assets/web-panel/assets/{Wallet-DSeNlVSU.js → Wallet-BOnCCgIL.js} +4 -4
  88. package/src/assets/web-panel/assets/{WebAuthn-Bwuuvpz1.js → WebAuthn-DN4dD-W8.js} +4 -4
  89. package/src/assets/web-panel/assets/{WorkflowEditor-8M96EU1N.js → WorkflowEditor-ClvDb_jX.js} +1 -1
  90. package/src/assets/web-panel/assets/{chat-D5S6SmLm.js → chat-DIxQ_Eeb.js} +1 -1
  91. package/src/assets/web-panel/assets/{collapseMotion-DVfhbsdP.js → collapseMotion-CqM1QOwM.js} +1 -1
  92. package/src/assets/web-panel/assets/{colors-5fbnGkAP.js → colors-BOX3WKcP.js} +1 -1
  93. package/src/assets/web-panel/assets/{compact-item-DaSuuMlW.js → compact-item-Bny82VDi.js} +1 -1
  94. package/src/assets/web-panel/assets/{createContext-BNOHcXAF.js → createContext-Cnoy3enS.js} +1 -1
  95. package/src/assets/web-panel/assets/devWarning-Dr9dzlQ5.js +1 -0
  96. package/src/assets/web-panel/assets/{echarts-CL0F2SnX.js → echarts-C61Vn3mP.js} +1 -1
  97. package/src/assets/web-panel/assets/{hasIn-DONwZUra.js → hasIn-BJ7fkx3F.js} +1 -1
  98. package/src/assets/web-panel/assets/{icons-BsDmGpcT.js → icons-DEmcnxBf.js} +1 -1
  99. package/src/assets/web-panel/assets/{index-B_yDD9Lm.js → index--CcGiwAI.js} +1 -1
  100. package/src/assets/web-panel/assets/{index-5_fj5gVd.js → index--Xb2lq6E.js} +1 -1
  101. package/src/assets/web-panel/assets/{index-uR5KTNZA.js → index-2N9Y1cLx.js} +1 -1
  102. package/src/assets/web-panel/assets/{index-MOgO5Yvx.js → index-7GLXvG8p.js} +1 -1
  103. package/src/assets/web-panel/assets/{index-CLXf-8ek.js → index-B1-h2QrC.js} +1 -1
  104. package/src/assets/web-panel/assets/{index-D7gs_3Ck.js → index-B6WoW8DJ.js} +1 -1
  105. package/src/assets/web-panel/assets/{index-CztESwB4.js → index-B7Fah_BX.js} +1 -1
  106. package/src/assets/web-panel/assets/index-B92M3t6B.js +1 -0
  107. package/src/assets/web-panel/assets/{index-BEO5f7Vf.js → index-BDkN6YOI.js} +1 -1
  108. package/src/assets/web-panel/assets/{index-_6S41ikV.js → index-BJ8-oLHI.js} +1 -1
  109. package/src/assets/web-panel/assets/{index-CrkCFohi.js → index-BM0mQhVv.js} +1 -1
  110. package/src/assets/web-panel/assets/{index-BrAJSu-v.js → index-BP7HFsAK.js} +1 -1
  111. package/src/assets/web-panel/assets/{index-BcqOK7Lv.js → index-BWPey0Uf.js} +1 -1
  112. package/src/assets/web-panel/assets/{index-BLzMuz38.js → index-BbZynivw.js} +1 -1
  113. package/src/assets/web-panel/assets/{index-DbdQBn4n.js → index-BcmXbIwv.js} +1 -1
  114. package/src/assets/web-panel/assets/{index-KwV9g_cf.js → index-Bk5yST66.js} +1 -1
  115. package/src/assets/web-panel/assets/{index-ClGqO-2X.js → index-Bvheiep2.js} +1 -1
  116. package/src/assets/web-panel/assets/{index-Dd7xwGcD.js → index-C--PPqwi.js} +1 -1
  117. package/src/assets/web-panel/assets/{index-DP2-3A_j.js → index-C1nHEOFE.js} +1 -1
  118. package/src/assets/web-panel/assets/{index-CAYmc5Nh.js → index-CEPTiBWy.js} +1 -1
  119. package/src/assets/web-panel/assets/{index-LRIt-AFl.js → index-CEq5Vh0i.js} +1 -1
  120. package/src/assets/web-panel/assets/{index-Dm5A-MN5.js → index-CN6emwbq.js} +1 -1
  121. package/src/assets/web-panel/assets/{index-Cf2OCa8q.js → index-CQ-xLCVb.js} +1 -1
  122. package/src/assets/web-panel/assets/{index-DHx2lhHW.js → index-CW6n-y1L.js} +1 -1
  123. package/src/assets/web-panel/assets/{index-DM3Ug61e.js → index-CZ6CHiCQ.js} +1 -1
  124. package/src/assets/web-panel/assets/{index-BJp4kRjw.js → index-CZCTan8Q.js} +1 -1
  125. package/src/assets/web-panel/assets/{index-PsMErAB1.js → index-CnjtAKdw.js} +1 -1
  126. package/src/assets/web-panel/assets/{index-CEzd5m5a.js → index-D2qNdrNW.js} +1 -1
  127. package/src/assets/web-panel/assets/{index-B4L3gsNA.js → index-D9QEc7Tq.js} +1 -1
  128. package/src/assets/web-panel/assets/{index-BcWMZqb4.js → index-DBhkJqVF.js} +1 -1
  129. package/src/assets/web-panel/assets/{index-CSfYJqXt.js → index-DSRIjAWO.js} +1 -1
  130. package/src/assets/web-panel/assets/{index-CmUOjyL6.js → index-DxX8hhmL.js} +1 -1
  131. package/src/assets/web-panel/assets/{index-RkInlwV0.js → index-Kio1ekYg.js} +1 -1
  132. package/src/assets/web-panel/assets/{index-CTZeOnzO.js → index-OaNFXV8N.js} +1 -1
  133. package/src/assets/web-panel/assets/{index-BK2N5yVW.js → index-Ty4w18mR.js} +4 -4
  134. package/src/assets/web-panel/assets/{index-Cn5LtyIH.js → index-ceH9DsAi.js} +1 -1
  135. package/src/assets/web-panel/assets/index-d2UcGpK-.js +1 -0
  136. package/src/assets/web-panel/assets/{index-xo2f4DZR.js → index-qOBKrw-g.js} +1 -1
  137. package/src/assets/web-panel/assets/{index-vYtprlNs.js → index-rn6xd12s.js} +1 -1
  138. package/src/assets/web-panel/assets/{initDefaultProps-CxwLynp9.js → initDefaultProps-BmxMBuUZ.js} +1 -1
  139. package/src/assets/web-panel/assets/{motion-XbPvGJbW.js → motion-DnXNwo2k.js} +1 -1
  140. package/src/assets/web-panel/assets/{move-D1u5pcgS.js → move-WnIJwmZN.js} +1 -1
  141. package/src/assets/web-panel/assets/{mtc-parser-BDxhTBMH.js → mtc-parser-DAto-c2w.js} +1 -1
  142. package/src/assets/web-panel/assets/{omit-EtIFGg5k.js → omit-BtvW9W0H.js} +1 -1
  143. package/src/assets/web-panel/assets/{pickAttrs-D33sWb0l.js → pickAttrs-DFqI9-_C.js} +1 -1
  144. package/src/assets/web-panel/assets/{placementArrow-BwFRzaGo.js → placementArrow-Dax6wOK3.js} +1 -1
  145. package/src/assets/web-panel/assets/{responsiveObserve-CBk2WqvQ.js → responsiveObserve-BUFWWC83.js} +1 -1
  146. package/src/assets/web-panel/assets/{slide-B52HtrKn.js → slide-DyARyuSz.js} +1 -1
  147. package/src/assets/web-panel/assets/{statusUtils-D4qxqWnH.js → statusUtils-BZSDugpi.js} +1 -1
  148. package/src/assets/web-panel/assets/{styleChecker-BxaCFlOL.js → styleChecker-B7o_K-4R.js} +1 -1
  149. package/src/assets/web-panel/assets/useFlexGapSupport-Dg7Bg8VG.js +1 -0
  150. package/src/assets/web-panel/assets/{useFs-C6VAU1_6.js → useFs-DQYXo5Rk.js} +1 -1
  151. package/src/assets/web-panel/assets/{useMergedState-Dc9sO2d7.js → useMergedState-DXbJa_zE.js} +1 -1
  152. package/src/assets/web-panel/assets/{usePersonalDataHub-rEG6oXG8.js → usePersonalDataHub-E8NBAnkq.js} +1 -1
  153. package/src/assets/web-panel/assets/{useRefs-CAeFRzPf.js → useRefs-BrCfMLMc.js} +1 -1
  154. package/src/assets/web-panel/assets/{useState-LwExUYDO.js → useState-CnxtbLoC.js} +1 -1
  155. package/src/assets/web-panel/assets/{vendor-BMxUs6UX.js → vendor-Bn1JzzAn.js} +1 -1
  156. package/src/assets/web-panel/assets/{vnode-DOTafkEi.js → vnode-DD71_w1b.js} +1 -1
  157. package/src/assets/web-panel/assets/{zoom-BuwwN5K2.js → zoom-zc9EMd3q.js} +1 -1
  158. package/src/assets/web-panel/index.html +3 -3
  159. package/src/command-manifest.json +36 -1
  160. package/src/commands/agent.js +23 -2
  161. package/src/commands/agents.js +62 -1
  162. package/src/commands/auto-mode.js +87 -0
  163. package/src/commands/background-session.js +499 -0
  164. package/src/commands/command.js +4 -1
  165. package/src/commands/permissions.js +49 -0
  166. package/src/commands/remote-control.js +407 -0
  167. package/src/data/changelog.json +7 -2
  168. package/src/gateways/ws/background-agent-protocol.js +337 -0
  169. package/src/gateways/ws/message-dispatcher.js +10 -0
  170. package/src/gateways/ws/remote-session-protocol.js +102 -1
  171. package/src/gateways/ws/ws-server.js +61 -0
  172. package/src/harness/mcp-client.js +8 -0
  173. package/src/index.js +10 -0
  174. package/src/lib/auto-mode-config.js +396 -0
  175. package/src/lib/background-agent-supervisor.js +202 -17
  176. package/src/lib/background-session-transport.js +315 -0
  177. package/src/lib/permission-denial-store.js +159 -0
  178. package/src/lib/remote-approval-bridge.js +360 -0
  179. package/src/lib/remote-control.js +270 -0
  180. package/src/lib/repl-denials.js +26 -0
  181. package/src/lib/shell-approval.js +4 -0
  182. package/src/lib/ws-rpc-client.js +150 -0
  183. package/src/repl/agent-repl.js +208 -16
  184. package/src/repl/permission-tier.js +31 -0
  185. package/src/runtime/agent-core.js +57 -0
  186. package/src/runtime/headless-runner.js +126 -8
  187. package/src/runtime/headless-stream.js +87 -1
  188. package/src/runtime/mcp-config.js +11 -0
  189. package/src/runtime/mcp-tool-search.js +0 -0
  190. package/src/runtime/policies/agent-policy.js +17 -0
  191. package/src/workers/background-agent-worker.js +218 -37
  192. package/src/assets/web-panel/assets/AppLayout-B6Q6olcr.js +0 -9
  193. package/src/assets/web-panel/assets/ChatBubbleRenderer-mDQl_PXO.js +0 -1
  194. package/src/assets/web-panel/assets/Skills-DL39dY0t.js +0 -1
  195. package/src/assets/web-panel/assets/devWarning-K_woVElh.js +0 -1
  196. package/src/assets/web-panel/assets/index-3ILvaBpo.js +0 -1
  197. package/src/assets/web-panel/assets/index-JpB-FoZq.js +0 -1
  198. package/src/assets/web-panel/assets/useFlexGapSupport-B1lWlqXN.js +0 -1
@@ -240,7 +240,7 @@ export function registerAgentCommand(program) {
240
240
  )
241
241
  .option(
242
242
  "--permission-mode <mode>",
243
- "default | plan | acceptEdits | bypassPermissions (headless)",
243
+ "manual | auto | dontAsk | default | plan | acceptEdits | bypassPermissions (plan headless-only)",
244
244
  )
245
245
  .option(
246
246
  "--no-file-refs",
@@ -315,6 +315,10 @@ export function registerAgentCommand(program) {
315
315
  "--permission-prompt-tool <tool>",
316
316
  "Defer tool approvals to an MCP tool (mcp__<server>__<tool>; requires --mcp-config) instead of headless fail-closed",
317
317
  )
318
+ .option(
319
+ "--remote-control",
320
+ "Headless: route confirm-tier approvals to paired mobile/web devices — prints a pairing URI/QR, waits for remote allow/deny (fail-closed on timeout)",
321
+ )
318
322
  .option(
319
323
  "--settings <file>",
320
324
  "Merge an extra .claude/settings.json-shaped file for this run: permission rules (allow/ask/deny) + native config overrides (model, env)",
@@ -777,6 +781,7 @@ export function registerAgentCommand(program) {
777
781
  jetbrains: options.jetbrains,
778
782
  cwd,
779
783
  permissionPromptTool: options.permissionPromptTool || null,
784
+ remoteControl: options.remoteControl === true,
780
785
  interactiveApprovals: options.interactiveApprovals === true,
781
786
  settingsFile: options.settings || null,
782
787
  outputStyle: options.outputStyle || null,
@@ -840,7 +845,7 @@ export function registerAgentCommand(program) {
840
845
  process.exitCode = 1;
841
846
  return;
842
847
  }
843
- const { launchBackgroundAgent } =
848
+ const { launchBackgroundAgent, buildFollowUpArgv } =
844
849
  await import("../lib/background-agent-supervisor.js");
845
850
  const childArgv = process.argv
846
851
  .slice(2)
@@ -856,6 +861,14 @@ export function registerAgentCommand(program) {
856
861
  options.session ||
857
862
  `session-${Date.now()}-${Math.random().toString(16).slice(2, 8)}`;
858
863
  if (!hasSessionArg) childArgv.push("--session", sessionId);
864
+ // Follow-up template for interactive attach: same flags/session,
865
+ // minus the first turn's prompt tokens (built BEFORE any piped
866
+ // prompt is appended below). The worker appends -p <text> per turn.
867
+ const followUpArgv = buildFollowUpArgv(childArgv, {
868
+ positionalTokens: Array.isArray(task) ? task : [],
869
+ printValue:
870
+ typeof options.print === "string" ? options.print : null,
871
+ });
859
872
  const promptWasPiped =
860
873
  positional.length === 0 &&
861
874
  !(typeof options.print === "string" && options.print.trim());
@@ -865,6 +878,7 @@ export function registerAgentCommand(program) {
865
878
  cwd: process.cwd(),
866
879
  sessionId,
867
880
  title: prompt.slice(0, 100),
881
+ followUpArgv,
868
882
  });
869
883
  if (options.outputFormat === "json") {
870
884
  console.log(JSON.stringify(state));
@@ -961,6 +975,8 @@ export function registerAgentCommand(program) {
961
975
  cwd: process.cwd(),
962
976
  // --permission-prompt-tool: defer approvals to an MCP tool
963
977
  permissionPromptTool: options.permissionPromptTool || null,
978
+ // --remote-control: approvals from paired mobile/web devices
979
+ remoteControl: options.remoteControl === true,
964
980
  // --strict-mcp-config: only --mcp-config servers (ignore registered + IDE)
965
981
  strictMcpConfig: options.strictMcpConfig === true,
966
982
  // --settings: extra .claude/settings.json permission rules
@@ -1032,6 +1048,11 @@ export function registerAgentCommand(program) {
1032
1048
  apiKey: options.apiKey,
1033
1049
  sessionId: options.session,
1034
1050
  agentId: options.agentId,
1051
+ // --permission-mode also applies interactively: manual → strict,
1052
+ // acceptEdits → trusted, bypassPermissions → autopilot, auto → trusted
1053
+ // + autoMode.decisions classifier; dontAsk denies instead of asking
1054
+ // (plan stays headless-only).
1055
+ permissionMode: options.permissionMode,
1035
1056
  recallLimit: options.recallLimit,
1036
1057
  recallQuery: options.recallQuery,
1037
1058
  recallMemory: options.recallMemory, // false when --no-recall-memory
@@ -71,6 +71,41 @@ export function registerAgentsCommand(program) {
71
71
  }
72
72
  });
73
73
 
74
+ cmd
75
+ .command("view <id>")
76
+ .description("Show a detailed background agent view")
77
+ .option("-n, --lines <n>", "Recent log lines to include", "40")
78
+ .option("--json", "Output as JSON")
79
+ .action(async (id, options) => {
80
+ try {
81
+ const [
82
+ {
83
+ readBackgroundAgentState,
84
+ effectiveBackgroundAgentState,
85
+ readBackgroundAgentLog,
86
+ },
87
+ { formatBackgroundAgentDetails },
88
+ ] = await Promise.all([
89
+ import("../lib/background-agent-supervisor.js"),
90
+ import("./background-session.js"),
91
+ ]);
92
+ const session = effectiveBackgroundAgentState(
93
+ readBackgroundAgentState(id),
94
+ );
95
+ if (!session) throw new Error(`Background agent not found: ${id}`);
96
+ const lines = Number.isFinite(Number(options.lines))
97
+ ? Math.max(1, Math.floor(Number(options.lines)))
98
+ : 40;
99
+ const log = readBackgroundAgentLog(id, { lines });
100
+ if (options.json)
101
+ console.log(JSON.stringify({ session, log }, null, 2));
102
+ else logger.log(formatBackgroundAgentDetails(session, log));
103
+ } catch (error) {
104
+ logger.error(chalk.red(error.message));
105
+ process.exitCode = 1;
106
+ }
107
+ });
108
+
74
109
  cmd
75
110
  .command("stop <id>")
76
111
  .description("Stop a running background agent")
@@ -90,6 +125,29 @@ export function registerAgentsCommand(program) {
90
125
  }
91
126
  });
92
127
 
128
+ cmd
129
+ .command("rename <id> <title...>")
130
+ .description("Rename a background agent session")
131
+ .option("--json", "Output as JSON")
132
+ .action(async (id, title, options) => {
133
+ try {
134
+ const { renameBackgroundAgent } =
135
+ await import("../lib/background-agent-supervisor.js");
136
+ const state = renameBackgroundAgent(
137
+ id,
138
+ Array.isArray(title) ? title.join(" ") : title,
139
+ );
140
+ if (options.json) console.log(JSON.stringify(state, null, 2));
141
+ else {
142
+ logger.log(chalk.green(`Renamed background agent ${id}`));
143
+ logger.log(chalk.gray(` ${state.title}`));
144
+ }
145
+ } catch (error) {
146
+ logger.error(chalk.red(error.message));
147
+ process.exitCode = 1;
148
+ }
149
+ });
150
+
93
151
  // ── list ──────────────────────────────────────────────────────────────
94
152
  cmd
95
153
  .command("list")
@@ -172,7 +230,10 @@ export function registerAgentsCommand(program) {
172
230
  .description("Run a task headlessly as the named subagent")
173
231
  .option("--output-format <fmt>", "text | json | stream-json", "text")
174
232
  .option("--model <model>", "Override the agent's model")
175
- .option("--permission-mode <mode>", "ApprovalGate tier (see cc agent)")
233
+ .option(
234
+ "--permission-mode <mode>",
235
+ "manual | auto | dontAsk | default | plan | acceptEdits | bypassPermissions",
236
+ )
176
237
  .option("--add-dir <dir...>", "Extra workspace roots")
177
238
  .action(async (name, task, options) => {
178
239
  try {
@@ -0,0 +1,87 @@
1
+ import chalk from "chalk";
2
+ import { logger } from "../lib/logger.js";
3
+ import {
4
+ autoModeDefaultsDocument,
5
+ loadAutoModeConfig,
6
+ resolveAutoModeDecisions,
7
+ } from "../lib/auto-mode-config.js";
8
+
9
+ function printJson(value) {
10
+ console.log(JSON.stringify(value, null, 2));
11
+ }
12
+
13
+ function printConfigSummary(config, resolved) {
14
+ logger.log(chalk.bold("Auto mode effective config"));
15
+ logger.log(
16
+ ` classifyAllShell: ${String(config.effective.classifyAllShell)}`,
17
+ );
18
+ logger.log(
19
+ ` classifier: ${resolved.customized ? "autoMode.decisions (customized)" : "trusted policy (defaults)"}`,
20
+ );
21
+ for (const rule of resolved.rules || []) {
22
+ const match = Object.entries(rule.match)
23
+ .map(([k, v]) => `${k}=${v}`)
24
+ .join(" ");
25
+ logger.log(` rule ${match} → ${rule.decision.padEnd(5)} (settings)`);
26
+ }
27
+ for (const riskLevel of ["low", "medium", "high"]) {
28
+ const rule = resolved.map[riskLevel];
29
+ logger.log(
30
+ ` ${riskLevel.padEnd(6)} risk → ${rule.decision.padEnd(5)} (${rule.source}: ${rule.reason})`,
31
+ );
32
+ }
33
+ if (config.files.length) {
34
+ logger.log(chalk.gray(` sources: ${config.files.join(", ")}`));
35
+ } else {
36
+ logger.log(chalk.gray(" sources: defaults only"));
37
+ }
38
+ if (config.managedFile) {
39
+ logger.log(chalk.yellow(` managed: ${config.managedFile}`));
40
+ }
41
+ }
42
+
43
+ export function registerAutoModeCommand(program) {
44
+ const cmd = program
45
+ .command("auto-mode")
46
+ .alias("automode")
47
+ .description("Inspect auto permission-mode defaults and effective config");
48
+
49
+ cmd
50
+ .command("defaults")
51
+ .description("Print built-in auto-mode classification defaults as JSON")
52
+ .action(() => {
53
+ printJson(autoModeDefaultsDocument());
54
+ });
55
+
56
+ cmd
57
+ .command("config")
58
+ .description("Print the effective auto-mode config")
59
+ .option("--json", "Output as JSON")
60
+ .option("--settings <file>", "Also merge an explicit settings file")
61
+ .action((options) => {
62
+ try {
63
+ const config = loadAutoModeConfig({
64
+ cwd: process.cwd(),
65
+ settingsFile: options.settings,
66
+ });
67
+ const resolved = resolveAutoModeDecisions(config.effective);
68
+ if (options.json) {
69
+ printJson({
70
+ ...config,
71
+ decisions: resolved.map,
72
+ rules: (resolved.rules || []).map((rule) => ({
73
+ match: rule.match,
74
+ decision: rule.decision,
75
+ reason: rule.reason,
76
+ })),
77
+ customized: resolved.customized,
78
+ });
79
+ return;
80
+ }
81
+ printConfigSummary(config, resolved);
82
+ } catch (error) {
83
+ logger.error(chalk.red(`auto-mode config failed: ${error.message}`));
84
+ process.exitCode = 1;
85
+ }
86
+ });
87
+ }