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.
- package/README.md +1 -1
- package/package.json +1 -1
- package/src/assets/web-panel/.build-hash +1 -1
- package/src/assets/web-panel/assets/{AIOps-CIpoXyVI.js → AIOps-Cth_zZeA.js} +1 -1
- package/src/assets/web-panel/assets/{ActionButton-Ch_QXIPk.js → ActionButton-zfwA3Oxn.js} +1 -1
- package/src/assets/web-panel/assets/{Analytics-CvaBYShv.js → Analytics-FeKc4aU2.js} +2 -2
- package/src/assets/web-panel/assets/AppLayout-C6WIrDZk.js +9 -0
- package/src/assets/web-panel/assets/{Audit-Bng8eHCW.js → Audit-C2gRq5Qi.js} +1 -1
- package/src/assets/web-panel/assets/BackgroundAgents-Dq2340Kl.css +1 -0
- package/src/assets/web-panel/assets/BackgroundAgents-TeTIFiW-.js +1 -0
- package/src/assets/web-panel/assets/{Backup-DvBs8-lm.js → Backup-CLJk3k6i.js} +1 -1
- package/src/assets/web-panel/assets/{BaseInput-DKwajm0g.js → BaseInput-5ms537NY.js} +1 -1
- package/src/assets/web-panel/assets/{Chat-BoGpZ3uO.js → Chat-4Nr5U9PJ.js} +5 -5
- package/src/assets/web-panel/assets/ChatBubbleRenderer-BFEnA8LN.js +1 -0
- package/src/assets/web-panel/assets/{Checkbox-BMJEmxFQ.js → Checkbox-B2Bca5ev.js} +1 -1
- package/src/assets/web-panel/assets/{Codegen-Bsoag5CV.js → Codegen-D6Uysdbv.js} +1 -1
- package/src/assets/web-panel/assets/{Col-CDjH9-sp.js → Col-B3XQ8xc7.js} +1 -1
- package/src/assets/web-panel/assets/{Community-Cg2QHPQ6.js → Community-CqwKtoPz.js} +1 -1
- package/src/assets/web-panel/assets/{Compact-BU2BaqP-.js → Compact-BZZINTus.js} +1 -1
- package/src/assets/web-panel/assets/{Compliance-D6ZYMCqZ.js → Compliance-Dr3BXkWA.js} +1 -1
- package/src/assets/web-panel/assets/{Cowork-DaZ8VW-I.js → Cowork-rx_x9Wqc.js} +2 -2
- package/src/assets/web-panel/assets/{Cron-DQY1RH9v.js → Cron-BpZr7rHc.js} +2 -2
- package/src/assets/web-panel/assets/{Crosschain-BVR28vk9.js → Crosschain-CeV5EYVg.js} +1 -1
- package/src/assets/web-panel/assets/{DID-N44KvTP-.js → DID-fe2Qaowz.js} +2 -2
- package/src/assets/web-panel/assets/{Dashboard-Bjhlx6wS.js → Dashboard-Fh_EdWVa.js} +2 -2
- package/src/assets/web-panel/assets/{Dropdown-CpLYxpy1.js → Dropdown-N1PIwWYf.js} +1 -1
- package/src/assets/web-panel/assets/{EmailListRenderer-srEITSPI.js → EmailListRenderer-B6vK93Ed.js} +1 -1
- package/src/assets/web-panel/assets/{FamilyGuardDashboard-juOC_fX2.js → FamilyGuardDashboard-e3iUZhAg.js} +1 -1
- package/src/assets/web-panel/assets/{Federation-nRaQtaXW.js → Federation-uInc9YcN.js} +1 -1
- package/src/assets/web-panel/assets/{FormItemContext-DflhTj09.js → FormItemContext-DmQZSX0z.js} +1 -1
- package/src/assets/web-panel/assets/{GenericCardRenderer-DulI_3NI.js → GenericCardRenderer-CV_Z8OAo.js} +1 -1
- package/src/assets/web-panel/assets/{Git-BxOPefXn.js → Git-jXAhNN8d.js} +2 -2
- package/src/assets/web-panel/assets/{Governance-C6G_Wnwi.js → Governance-Blw1esBB.js} +1 -1
- package/src/assets/web-panel/assets/{Inference-BnFYa2BF.js → Inference-CoK8Ia0Z.js} +1 -1
- package/src/assets/web-panel/assets/{KnowledgeGraph-TqQLEabm.js → KnowledgeGraph-5xrglMTK.js} +1 -1
- package/src/assets/web-panel/assets/{Logs-BH4AVh7s.js → Logs-BGIG9798.js} +2 -2
- package/src/assets/web-panel/assets/{Marketplace-DoWLTaEE.js → Marketplace-DFqhJMuY.js} +1 -1
- package/src/assets/web-panel/assets/{McpTools-D6yC7OG_.js → McpTools-7U8tEhwK.js} +5 -5
- package/src/assets/web-panel/assets/{Memory-DLCeHj21.js → Memory-BrvboPLE.js} +2 -2
- package/src/assets/web-panel/assets/{MobileBridge-BZBE0GRl.js → MobileBridge-nzcd7d1H.js} +1 -1
- package/src/assets/web-panel/assets/{MobileProjects-DJA15G1J.js → MobileProjects-DETVNKa7.js} +1 -1
- package/src/assets/web-panel/assets/{Mtc-CyTKJDHn.js → Mtc-SZcCYec3.js} +4 -4
- package/src/assets/web-panel/assets/{MtcAudit-DZKjgEVc.js → MtcAudit-Cx_d3N17.js} +5 -5
- package/src/assets/web-panel/assets/{Multisig-2rMPNhSO.js → Multisig-DtcmSUo-.js} +3 -3
- package/src/assets/web-panel/assets/{NLProgramming-VeMk4Fx-.js → NLProgramming-Dgx2QHl-.js} +1 -1
- package/src/assets/web-panel/assets/{Notes-jr2GHMhh.js → Notes-oHTGEHoJ.js} +3 -3
- package/src/assets/web-panel/assets/{NotificationSettings-WN9VZyFb.js → NotificationSettings-qKD-IlOl.js} +1 -1
- package/src/assets/web-panel/assets/{OrderTableRenderer-CjNO-e9T.js → OrderTableRenderer-CiU4Sy1J.js} +1 -1
- package/src/assets/web-panel/assets/{Organization-DdjVHuzT.js → Organization-BBNXnltP.js} +4 -4
- package/src/assets/web-panel/assets/{Overflow-l8vBsGGq.js → Overflow-Df2fDbvT.js} +1 -1
- package/src/assets/web-panel/assets/{OverrideContext-BlgL9440.js → OverrideContext-C0w0P4A3.js} +1 -1
- package/src/assets/web-panel/assets/{P2P-CVQDHHwq.js → P2P-DUHj6zjO.js} +2 -2
- package/src/assets/web-panel/assets/{PdhVaultBrowser-CTsNh8qE.js → PdhVaultBrowser-B2nWgdoV.js} +4 -4
- package/src/assets/web-panel/assets/{Permissions-DLW87uyK.js → Permissions-CiW0afny.js} +3 -3
- package/src/assets/web-panel/assets/{PersonalDataHub-N8OvASTx.js → PersonalDataHub-cc1mHU_D.js} +2 -2
- package/src/assets/web-panel/assets/{Pipeline-BPZmdlz2.js → Pipeline-B93zTapU.js} +1 -1
- package/src/assets/web-panel/assets/{Privacy-MFZw_GNh.js → Privacy-Db1jXWfd.js} +1 -1
- package/src/assets/web-panel/assets/{ProjectInit-zW0pEsfU.js → ProjectInit-DFoZ1h9U.js} +2 -2
- package/src/assets/web-panel/assets/{ProjectSettings-CppVHr_o.js → ProjectSettings-BkkUnmYs.js} +2 -2
- package/src/assets/web-panel/assets/{Projects-BTglkJO2.js → Projects-Xa779XLC.js} +1 -1
- package/src/assets/web-panel/assets/{Providers-CPHZ6JKT.js → Providers-DOF01IEN.js} +1 -1
- package/src/assets/web-panel/assets/{QrScannerModal-DO4klNZ2.js → QrScannerModal-TohRsKd0.js} +1 -1
- package/src/assets/web-panel/assets/{QuickAsk-B37TTqUa.js → QuickAsk-DjLcr1ZU.js} +1 -1
- package/src/assets/web-panel/assets/{Recommend-n7KIfK7y.js → Recommend--Ism6bMx.js} +1 -1
- package/src/assets/web-panel/assets/{RemoteSession-SjVoS9mm.js → RemoteSession-B8CL3YHM.js} +2 -2
- package/src/assets/web-panel/assets/{Reputation-Dt6RTeHi.js → Reputation-CaRxB3Ep.js} +1 -1
- package/src/assets/web-panel/assets/{Row-Dty6jz5V.js → Row-BioxZBBH.js} +1 -1
- package/src/assets/web-panel/assets/{RssFeed-DDLhqw5j.js → RssFeed-B2LipwH3.js} +3 -3
- package/src/assets/web-panel/assets/{Search-DrYbXi-W.js → Search-BpjLBV8u.js} +1 -1
- package/src/assets/web-panel/assets/{Security-Fc9Z6fbB.js → Security-TibHuJWP.js} +3 -3
- package/src/assets/web-panel/assets/{Services-BAhPgjSM.js → Services-DtkuWseW.js} +2 -2
- package/src/assets/web-panel/assets/{Skeleton-8JF7EPfE.js → Skeleton-BIcPQae6.js} +1 -1
- package/src/assets/web-panel/assets/Skills-DoTWIQOX.js +1 -0
- package/src/assets/web-panel/assets/{Sla-CSvjcATc.js → Sla-uUSU185m.js} +1 -1
- package/src/assets/web-panel/assets/{SpeechSettings-Demx7Gnx.js → SpeechSettings-B7Bgc9mk.js} +1 -1
- package/src/assets/web-panel/assets/{SyncSettings-CKLnRWJr.js → SyncSettings-K-XrJ2s9.js} +2 -2
- package/src/assets/web-panel/assets/{Tasks-mhITRxjv.js → Tasks-B3hEXNcI.js} +1 -1
- package/src/assets/web-panel/assets/{Templates-AjQI5rxD.js → Templates-CaFnyGDK.js} +1 -1
- package/src/assets/web-panel/assets/{Tenant-dbtEh1yR.js → Tenant-C2X0PtEC.js} +1 -1
- package/src/assets/web-panel/assets/{Terminal-DX-9jjfk.js → Terminal-CKU5yVsT.js} +2 -2
- package/src/assets/web-panel/assets/{TimelineRenderer-C11EDZRt.js → TimelineRenderer-8trZeYDC.js} +1 -1
- package/src/assets/web-panel/assets/{Tokens-GiA9fiZn.js → Tokens-BUEEe9US.js} +1 -1
- package/src/assets/web-panel/assets/{Trigger-BPcnclJn.js → Trigger-COU97I7Y.js} +1 -1
- package/src/assets/web-panel/assets/{Trust-C-DVY8nq.js → Trust-DNWQChaP.js} +1 -1
- package/src/assets/web-panel/assets/{UkeySign-DxodSwME.js → UkeySign-DWX_VtCp.js} +1 -1
- package/src/assets/web-panel/assets/{VideoEditing-D_WV0O8O.js → VideoEditing-D9eIDhsp.js} +1 -1
- package/src/assets/web-panel/assets/{Wallet-DSeNlVSU.js → Wallet-BOnCCgIL.js} +4 -4
- package/src/assets/web-panel/assets/{WebAuthn-Bwuuvpz1.js → WebAuthn-DN4dD-W8.js} +4 -4
- package/src/assets/web-panel/assets/{WorkflowEditor-8M96EU1N.js → WorkflowEditor-ClvDb_jX.js} +1 -1
- package/src/assets/web-panel/assets/{chat-D5S6SmLm.js → chat-DIxQ_Eeb.js} +1 -1
- package/src/assets/web-panel/assets/{collapseMotion-DVfhbsdP.js → collapseMotion-CqM1QOwM.js} +1 -1
- package/src/assets/web-panel/assets/{colors-5fbnGkAP.js → colors-BOX3WKcP.js} +1 -1
- package/src/assets/web-panel/assets/{compact-item-DaSuuMlW.js → compact-item-Bny82VDi.js} +1 -1
- package/src/assets/web-panel/assets/{createContext-BNOHcXAF.js → createContext-Cnoy3enS.js} +1 -1
- package/src/assets/web-panel/assets/devWarning-Dr9dzlQ5.js +1 -0
- package/src/assets/web-panel/assets/{echarts-CL0F2SnX.js → echarts-C61Vn3mP.js} +1 -1
- package/src/assets/web-panel/assets/{hasIn-DONwZUra.js → hasIn-BJ7fkx3F.js} +1 -1
- package/src/assets/web-panel/assets/{icons-BsDmGpcT.js → icons-DEmcnxBf.js} +1 -1
- package/src/assets/web-panel/assets/{index-B_yDD9Lm.js → index--CcGiwAI.js} +1 -1
- package/src/assets/web-panel/assets/{index-5_fj5gVd.js → index--Xb2lq6E.js} +1 -1
- package/src/assets/web-panel/assets/{index-uR5KTNZA.js → index-2N9Y1cLx.js} +1 -1
- package/src/assets/web-panel/assets/{index-MOgO5Yvx.js → index-7GLXvG8p.js} +1 -1
- package/src/assets/web-panel/assets/{index-CLXf-8ek.js → index-B1-h2QrC.js} +1 -1
- package/src/assets/web-panel/assets/{index-D7gs_3Ck.js → index-B6WoW8DJ.js} +1 -1
- package/src/assets/web-panel/assets/{index-CztESwB4.js → index-B7Fah_BX.js} +1 -1
- package/src/assets/web-panel/assets/index-B92M3t6B.js +1 -0
- package/src/assets/web-panel/assets/{index-BEO5f7Vf.js → index-BDkN6YOI.js} +1 -1
- package/src/assets/web-panel/assets/{index-_6S41ikV.js → index-BJ8-oLHI.js} +1 -1
- package/src/assets/web-panel/assets/{index-CrkCFohi.js → index-BM0mQhVv.js} +1 -1
- package/src/assets/web-panel/assets/{index-BrAJSu-v.js → index-BP7HFsAK.js} +1 -1
- package/src/assets/web-panel/assets/{index-BcqOK7Lv.js → index-BWPey0Uf.js} +1 -1
- package/src/assets/web-panel/assets/{index-BLzMuz38.js → index-BbZynivw.js} +1 -1
- package/src/assets/web-panel/assets/{index-DbdQBn4n.js → index-BcmXbIwv.js} +1 -1
- package/src/assets/web-panel/assets/{index-KwV9g_cf.js → index-Bk5yST66.js} +1 -1
- package/src/assets/web-panel/assets/{index-ClGqO-2X.js → index-Bvheiep2.js} +1 -1
- package/src/assets/web-panel/assets/{index-Dd7xwGcD.js → index-C--PPqwi.js} +1 -1
- package/src/assets/web-panel/assets/{index-DP2-3A_j.js → index-C1nHEOFE.js} +1 -1
- package/src/assets/web-panel/assets/{index-CAYmc5Nh.js → index-CEPTiBWy.js} +1 -1
- package/src/assets/web-panel/assets/{index-LRIt-AFl.js → index-CEq5Vh0i.js} +1 -1
- package/src/assets/web-panel/assets/{index-Dm5A-MN5.js → index-CN6emwbq.js} +1 -1
- package/src/assets/web-panel/assets/{index-Cf2OCa8q.js → index-CQ-xLCVb.js} +1 -1
- package/src/assets/web-panel/assets/{index-DHx2lhHW.js → index-CW6n-y1L.js} +1 -1
- package/src/assets/web-panel/assets/{index-DM3Ug61e.js → index-CZ6CHiCQ.js} +1 -1
- package/src/assets/web-panel/assets/{index-BJp4kRjw.js → index-CZCTan8Q.js} +1 -1
- package/src/assets/web-panel/assets/{index-PsMErAB1.js → index-CnjtAKdw.js} +1 -1
- package/src/assets/web-panel/assets/{index-CEzd5m5a.js → index-D2qNdrNW.js} +1 -1
- package/src/assets/web-panel/assets/{index-B4L3gsNA.js → index-D9QEc7Tq.js} +1 -1
- package/src/assets/web-panel/assets/{index-BcWMZqb4.js → index-DBhkJqVF.js} +1 -1
- package/src/assets/web-panel/assets/{index-CSfYJqXt.js → index-DSRIjAWO.js} +1 -1
- package/src/assets/web-panel/assets/{index-CmUOjyL6.js → index-DxX8hhmL.js} +1 -1
- package/src/assets/web-panel/assets/{index-RkInlwV0.js → index-Kio1ekYg.js} +1 -1
- package/src/assets/web-panel/assets/{index-CTZeOnzO.js → index-OaNFXV8N.js} +1 -1
- package/src/assets/web-panel/assets/{index-BK2N5yVW.js → index-Ty4w18mR.js} +4 -4
- package/src/assets/web-panel/assets/{index-Cn5LtyIH.js → index-ceH9DsAi.js} +1 -1
- package/src/assets/web-panel/assets/index-d2UcGpK-.js +1 -0
- package/src/assets/web-panel/assets/{index-xo2f4DZR.js → index-qOBKrw-g.js} +1 -1
- package/src/assets/web-panel/assets/{index-vYtprlNs.js → index-rn6xd12s.js} +1 -1
- package/src/assets/web-panel/assets/{initDefaultProps-CxwLynp9.js → initDefaultProps-BmxMBuUZ.js} +1 -1
- package/src/assets/web-panel/assets/{motion-XbPvGJbW.js → motion-DnXNwo2k.js} +1 -1
- package/src/assets/web-panel/assets/{move-D1u5pcgS.js → move-WnIJwmZN.js} +1 -1
- package/src/assets/web-panel/assets/{mtc-parser-BDxhTBMH.js → mtc-parser-DAto-c2w.js} +1 -1
- package/src/assets/web-panel/assets/{omit-EtIFGg5k.js → omit-BtvW9W0H.js} +1 -1
- package/src/assets/web-panel/assets/{pickAttrs-D33sWb0l.js → pickAttrs-DFqI9-_C.js} +1 -1
- package/src/assets/web-panel/assets/{placementArrow-BwFRzaGo.js → placementArrow-Dax6wOK3.js} +1 -1
- package/src/assets/web-panel/assets/{responsiveObserve-CBk2WqvQ.js → responsiveObserve-BUFWWC83.js} +1 -1
- package/src/assets/web-panel/assets/{slide-B52HtrKn.js → slide-DyARyuSz.js} +1 -1
- package/src/assets/web-panel/assets/{statusUtils-D4qxqWnH.js → statusUtils-BZSDugpi.js} +1 -1
- package/src/assets/web-panel/assets/{styleChecker-BxaCFlOL.js → styleChecker-B7o_K-4R.js} +1 -1
- package/src/assets/web-panel/assets/useFlexGapSupport-Dg7Bg8VG.js +1 -0
- package/src/assets/web-panel/assets/{useFs-C6VAU1_6.js → useFs-DQYXo5Rk.js} +1 -1
- package/src/assets/web-panel/assets/{useMergedState-Dc9sO2d7.js → useMergedState-DXbJa_zE.js} +1 -1
- package/src/assets/web-panel/assets/{usePersonalDataHub-rEG6oXG8.js → usePersonalDataHub-E8NBAnkq.js} +1 -1
- package/src/assets/web-panel/assets/{useRefs-CAeFRzPf.js → useRefs-BrCfMLMc.js} +1 -1
- package/src/assets/web-panel/assets/{useState-LwExUYDO.js → useState-CnxtbLoC.js} +1 -1
- package/src/assets/web-panel/assets/{vendor-BMxUs6UX.js → vendor-Bn1JzzAn.js} +1 -1
- package/src/assets/web-panel/assets/{vnode-DOTafkEi.js → vnode-DD71_w1b.js} +1 -1
- package/src/assets/web-panel/assets/{zoom-BuwwN5K2.js → zoom-zc9EMd3q.js} +1 -1
- package/src/assets/web-panel/index.html +3 -3
- package/src/command-manifest.json +36 -1
- package/src/commands/agent.js +23 -2
- package/src/commands/agents.js +62 -1
- package/src/commands/auto-mode.js +87 -0
- package/src/commands/background-session.js +499 -0
- package/src/commands/command.js +4 -1
- package/src/commands/permissions.js +49 -0
- package/src/commands/remote-control.js +407 -0
- package/src/data/changelog.json +7 -2
- package/src/gateways/ws/background-agent-protocol.js +337 -0
- package/src/gateways/ws/message-dispatcher.js +10 -0
- package/src/gateways/ws/remote-session-protocol.js +102 -1
- package/src/gateways/ws/ws-server.js +61 -0
- package/src/harness/mcp-client.js +8 -0
- package/src/index.js +10 -0
- package/src/lib/auto-mode-config.js +396 -0
- package/src/lib/background-agent-supervisor.js +202 -17
- package/src/lib/background-session-transport.js +315 -0
- package/src/lib/permission-denial-store.js +159 -0
- package/src/lib/remote-approval-bridge.js +360 -0
- package/src/lib/remote-control.js +270 -0
- package/src/lib/repl-denials.js +26 -0
- package/src/lib/shell-approval.js +4 -0
- package/src/lib/ws-rpc-client.js +150 -0
- package/src/repl/agent-repl.js +208 -16
- package/src/repl/permission-tier.js +31 -0
- package/src/runtime/agent-core.js +57 -0
- package/src/runtime/headless-runner.js +126 -8
- package/src/runtime/headless-stream.js +87 -1
- package/src/runtime/mcp-config.js +11 -0
- package/src/runtime/mcp-tool-search.js +0 -0
- package/src/runtime/policies/agent-policy.js +17 -0
- package/src/workers/background-agent-worker.js +218 -37
- package/src/assets/web-panel/assets/AppLayout-B6Q6olcr.js +0 -9
- package/src/assets/web-panel/assets/ChatBubbleRenderer-mDQl_PXO.js +0 -1
- package/src/assets/web-panel/assets/Skills-DL39dY0t.js +0 -1
- package/src/assets/web-panel/assets/devWarning-K_woVElh.js +0 -1
- package/src/assets/web-panel/assets/index-3ILvaBpo.js +0 -1
- package/src/assets/web-panel/assets/index-JpB-FoZq.js +0 -1
- package/src/assets/web-panel/assets/useFlexGapSupport-B1lWlqXN.js +0 -1
package/src/commands/agent.js
CHANGED
|
@@ -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
|
package/src/commands/agents.js
CHANGED
|
@@ -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(
|
|
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
|
+
}
|