chainlesschain 0.162.189 → 0.162.197
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 +84 -11
- package/bin/chainlesschain.js +7 -52
- package/completions/_cc +209 -0
- package/completions/cc.bash +18 -0
- package/completions/cc.fish +13 -0
- package/completions/cc.ps1 +226 -0
- package/package.json +10 -2
- package/src/assets/web-panel/assets/{AIOps-DbZft8w0.js → AIOps-D3Gu1a5d.js} +1 -1
- package/src/assets/web-panel/assets/{ActionButton-DoOZpwfN.js → ActionButton-DrwAoKaz.js} +1 -1
- package/src/assets/web-panel/assets/{Analytics-B0J0KLTW.js → Analytics-C7Q-gd_3.js} +3 -3
- package/src/assets/web-panel/assets/{AppLayout-D9eIR0qq.js → AppLayout-DgBtae-n.js} +4 -4
- package/src/assets/web-panel/assets/{Artifacts-BnZXEVeo.js → Artifacts-pQ6LcA-W.js} +1 -1
- package/src/assets/web-panel/assets/{Audit-X1ce4Bjn.js → Audit-DK61tocB.js} +1 -1
- package/src/assets/web-panel/assets/{BackgroundAgents-BvWR-y5v.js → BackgroundAgents-BOKgDFRh.js} +1 -1
- package/src/assets/web-panel/assets/{Backup-BublSGEd.js → Backup-Bo9G4vTP.js} +1 -1
- package/src/assets/web-panel/assets/{BaseInput-CR_77Hso.js → BaseInput-Do_dE9_v.js} +1 -1
- package/src/assets/web-panel/assets/{Chat-DixW52tq.js → Chat-COVvZzOL.js} +6 -6
- package/src/assets/web-panel/assets/ChatBubbleRenderer-BUUyJ5QO.js +1 -0
- package/src/assets/web-panel/assets/{Checkbox-CCv1C87K.js → Checkbox-Z9MJMolt.js} +1 -1
- package/src/assets/web-panel/assets/{Codegen-B03Cc3dd.js → Codegen-BVzWKVbf.js} +1 -1
- package/src/assets/web-panel/assets/{Col-CA06-6pU.js → Col-C8MnYcbT.js} +1 -1
- package/src/assets/web-panel/assets/{Community-Bj881J52.js → Community-DQxqw15l.js} +1 -1
- package/src/assets/web-panel/assets/{Compact-UZLTPoaL.js → Compact-BAUmrh3y.js} +1 -1
- package/src/assets/web-panel/assets/{Compliance-kGwzRb_0.js → Compliance-jPAkQ3zK.js} +1 -1
- package/src/assets/web-panel/assets/{Cowork-KundoYM8.js → Cowork-BBQyxbh8.js} +2 -2
- package/src/assets/web-panel/assets/{Cron-BYZyoqDe.js → Cron-W5koq8Z5.js} +2 -2
- package/src/assets/web-panel/assets/{Crosschain-BhrrppBX.js → Crosschain-BQhnu5hS.js} +1 -1
- package/src/assets/web-panel/assets/{DID-CdC6EguZ.js → DID-DD7PlI18.js} +2 -2
- package/src/assets/web-panel/assets/{Dashboard-CcQx3J4y.js → Dashboard-w_ILuwKI.js} +2 -2
- package/src/assets/web-panel/assets/{Dropdown-BpijtEzQ.js → Dropdown-qiDUAyAo.js} +1 -1
- package/src/assets/web-panel/assets/{EmailListRenderer-DfZjeZTe.js → EmailListRenderer-PDeBcI5H.js} +1 -1
- package/src/assets/web-panel/assets/{FamilyGuardDashboard-BFYSf69C.js → FamilyGuardDashboard-SuArscRM.js} +1 -1
- package/src/assets/web-panel/assets/{Federation-Okdi3pJm.js → Federation-BCovZaUn.js} +1 -1
- package/src/assets/web-panel/assets/{FormItemContext-mH-HebKW.js → FormItemContext-DjlFdVFk.js} +1 -1
- package/src/assets/web-panel/assets/{GenericCardRenderer-xivV69x7.js → GenericCardRenderer-DoEZ7fcS.js} +1 -1
- package/src/assets/web-panel/assets/{Git-1rh_YBwg.js → Git-CV0-6GPI.js} +2 -2
- package/src/assets/web-panel/assets/{Governance-eAXkNxdY.js → Governance-B_SFN50w.js} +1 -1
- package/src/assets/web-panel/assets/{Inference-CS6dMVTN.js → Inference-heI0Eo6k.js} +1 -1
- package/src/assets/web-panel/assets/{KnowledgeGraph-Bq_TnkvD.js → KnowledgeGraph-Cz5INS5p.js} +1 -1
- package/src/assets/web-panel/assets/{Logs-KchHtiHt.js → Logs-BSFxiHkg.js} +2 -2
- package/src/assets/web-panel/assets/MarkdownRenderer-1mNozZ8v.js +1 -0
- package/src/assets/web-panel/assets/{Marketplace-CsmGcX5X.js → Marketplace-0TWTpE7k.js} +1 -1
- package/src/assets/web-panel/assets/{McpTools-BaPFnnyz.js → McpTools-CV4-wBLm.js} +4 -4
- package/src/assets/web-panel/assets/{Memory-2m-sUUf7.js → Memory-x5bH5rw5.js} +2 -2
- package/src/assets/web-panel/assets/{MobileBridge-D5nVZBRu.js → MobileBridge-DaBmUu9G.js} +1 -1
- package/src/assets/web-panel/assets/{MobileProjects-Bo8MLZvT.js → MobileProjects-DqnoFPgR.js} +1 -1
- package/src/assets/web-panel/assets/{Mtc-3GDvamGa.js → Mtc-B_zKEBif.js} +4 -4
- package/src/assets/web-panel/assets/{MtcAudit-D2zGuZCH.js → MtcAudit-BCfKD2yg.js} +4 -4
- package/src/assets/web-panel/assets/{Multisig-BBVQ4t6t.js → Multisig-DgYfj6c_.js} +3 -3
- package/src/assets/web-panel/assets/{NLProgramming-BIOCyOGp.js → NLProgramming-Dz09lFUm.js} +1 -1
- package/src/assets/web-panel/assets/{Notes-DVwBGpzc.js → Notes-Cuj6ugBE.js} +3 -3
- package/src/assets/web-panel/assets/{NotificationSettings-BDnHfIfX.js → NotificationSettings-DK2WXjhg.js} +1 -1
- package/src/assets/web-panel/assets/{OrderTableRenderer-C7Ek20ag.js → OrderTableRenderer-D1IAOQoo.js} +1 -1
- package/src/assets/web-panel/assets/{Organization-D3SRKaa7.js → Organization-9fqnPvTw.js} +4 -4
- package/src/assets/web-panel/assets/{Overflow-C2B8ahyn.js → Overflow-n5xHkhow.js} +1 -1
- package/src/assets/web-panel/assets/{P2P-2iwQzG65.js → P2P-B5AUWwH-.js} +2 -2
- package/src/assets/web-panel/assets/{PdhVaultBrowser-CoPiWqMN.js → PdhVaultBrowser-CoUDV6dy.js} +4 -4
- package/src/assets/web-panel/assets/{Permissions-yV5XNXo5.js → Permissions-DPRmQf_H.js} +4 -4
- package/src/assets/web-panel/assets/{PersonalDataHub-uCDJhMUF.js → PersonalDataHub-B37bsbEN.js} +4 -4
- package/src/assets/web-panel/assets/{Pipeline-hN7ucMOA.js → Pipeline-CCAuPqu9.js} +1 -1
- package/src/assets/web-panel/assets/{Privacy-CgU0ptN4.js → Privacy-B81msZdv.js} +1 -1
- package/src/assets/web-panel/assets/{ProjectInit-CfYPiT6j.js → ProjectInit-B-Py2NbF.js} +2 -2
- package/src/assets/web-panel/assets/{ProjectSettings-B0A2C4nw.js → ProjectSettings-CYsneiRB.js} +2 -2
- package/src/assets/web-panel/assets/{Projects-BE5C0ajn.js → Projects-Y975Mh6R.js} +1 -1
- package/src/assets/web-panel/assets/{Providers-CstQPf8W.js → Providers-uO-10aP1.js} +1 -1
- package/src/assets/web-panel/assets/{QrScannerModal-Co3z_ynk.js → QrScannerModal-Bj_6gJ0l.js} +1 -1
- package/src/assets/web-panel/assets/{QuickAsk-DMTS6pQ6.js → QuickAsk-BgpBCMPE.js} +1 -1
- package/src/assets/web-panel/assets/{Recommend-ETw4odUa.js → Recommend-DhUW3YUA.js} +1 -1
- package/src/assets/web-panel/assets/RemoteSession-DdeyfbkA.js +5 -0
- package/src/assets/web-panel/assets/{Reputation-BTVqQgKq.js → Reputation-fxW421xd.js} +1 -1
- package/src/assets/web-panel/assets/{Row-CBKKwwtO.js → Row-De73w1og.js} +1 -1
- package/src/assets/web-panel/assets/{RssFeed-BHUQ438I.js → RssFeed-3US_Q_lj.js} +2 -2
- package/src/assets/web-panel/assets/{Search-B4NqeUsF.js → Search-DbZ_DU74.js} +1 -1
- package/src/assets/web-panel/assets/{Security-BRjoYG5_.js → Security-DoIU1vMF.js} +4 -4
- package/src/assets/web-panel/assets/{Services-CxQzu3p3.js → Services-DB_RGqpc.js} +2 -2
- package/src/assets/web-panel/assets/{Skeleton-BKzwwmWO.js → Skeleton-DnzLaayC.js} +1 -1
- package/src/assets/web-panel/assets/{Skills-DrsFcgth.js → Skills-VzVXHENF.js} +1 -1
- package/src/assets/web-panel/assets/{Sla-D21tmXCH.js → Sla-DMfvjCAI.js} +1 -1
- package/src/assets/web-panel/assets/{SpeechSettings-CjyjLfp8.js → SpeechSettings-DQQOYWbF.js} +1 -1
- package/src/assets/web-panel/assets/{SyncSettings-Cu45-tnx.js → SyncSettings-Bmx3FG1P.js} +2 -2
- package/src/assets/web-panel/assets/{Tasks-oMcILYOj.js → Tasks-DOQyfb-2.js} +1 -1
- package/src/assets/web-panel/assets/{Templates-Bh-Zcr5R.js → Templates-D6hTRT7c.js} +1 -1
- package/src/assets/web-panel/assets/{Tenant-68ns63aI.js → Tenant-CTPQZAzs.js} +1 -1
- package/src/assets/web-panel/assets/{Terminal-BLJkFykE.js → Terminal-B7vII3oH.js} +2 -2
- package/src/assets/web-panel/assets/{TimelineRenderer-xcrJLq-O.js → TimelineRenderer-BkiFJeXV.js} +1 -1
- package/src/assets/web-panel/assets/{Tokens-C6PpFJtf.js → Tokens-BPPdQMNo.js} +1 -1
- package/src/assets/web-panel/assets/{Trigger-BaKA7tdM.js → Trigger-BxG8JAEI.js} +1 -1
- package/src/assets/web-panel/assets/{Trust-BzhA57Jc.js → Trust-DHD7nMpM.js} +1 -1
- package/src/assets/web-panel/assets/{UkeySign-4_U3JkIR.js → UkeySign-B4BJpU47.js} +1 -1
- package/src/assets/web-panel/assets/{VideoEditing-162AANxX.js → VideoEditing-CRiGpFx2.js} +1 -1
- package/src/assets/web-panel/assets/{Wallet-B1viuql_.js → Wallet-BSDSNiem.js} +4 -4
- package/src/assets/web-panel/assets/{WebAuthn-ZVWazhCy.js → WebAuthn-DLTUh5Zv.js} +5 -5
- package/src/assets/web-panel/assets/WorkflowEditor-tW2MwjhD.js +1 -0
- package/src/assets/web-panel/assets/{chat-DmrHNuwq.js → chat-SgsLQ3FC.js} +1 -1
- package/src/assets/web-panel/assets/{colors-DAJ_M-PK.js → colors-BHjjLIKO.js} +1 -1
- package/src/assets/web-panel/assets/{compact-item-uIzmYwLs.js → compact-item-VceErdKq.js} +1 -1
- package/src/assets/web-panel/assets/{createContext-D_ZmuLwb.js → createContext-BZ332MYl.js} +1 -1
- package/src/assets/web-panel/assets/devWarning-DosMaL-k.js +1 -0
- package/src/assets/web-panel/assets/{hasIn-CDt_shTL.js → hasIn-CBTjJOjn.js} +1 -1
- package/src/assets/web-panel/assets/index-0O5ePnUq.js +1 -0
- package/src/assets/web-panel/assets/{index-rXdwUeE3.js → index-1n7xjKDU.js} +1 -1
- package/src/assets/web-panel/assets/{index-BAvSmJXW.js → index-29wVzi-k.js} +1 -1
- package/src/assets/web-panel/assets/{index-C16fYKFD.js → index-B2u26AS3.js} +1 -1
- package/src/assets/web-panel/assets/{index-C5WcdJH2.js → index-B40dQn0G.js} +3 -3
- package/src/assets/web-panel/assets/{index-CaelyMgF.js → index-B5KAGxNo.js} +1 -1
- package/src/assets/web-panel/assets/{index-OzTxFIJP.js → index-BC1xuQgX.js} +1 -1
- package/src/assets/web-panel/assets/{index-CzXqvMuP.js → index-BETEjuNr.js} +1 -1
- package/src/assets/web-panel/assets/{index-clSX4PEc.js → index-BOtvPdHt.js} +1 -1
- package/src/assets/web-panel/assets/{index-saf3VNeP.js → index-BPXFLYdW.js} +1 -1
- package/src/assets/web-panel/assets/{index-DdUMcwRB.js → index-BQSmZGgs.js} +1 -1
- package/src/assets/web-panel/assets/{index-DfSSy9uy.js → index-BRWhLbWF.js} +1 -1
- package/src/assets/web-panel/assets/{index-GcKOHD_c.js → index-BTlc-Bve.js} +1 -1
- package/src/assets/web-panel/assets/{index-BHvlm0In.js → index-BY1wexYG.js} +1 -1
- package/src/assets/web-panel/assets/{index-Cvak6Oe2.js → index-BcUenmCX.js} +1 -1
- package/src/assets/web-panel/assets/{index-CKyd472S.js → index-BeiqkxJG.js} +1 -1
- package/src/assets/web-panel/assets/{index-DvFhhe6r.js → index-BhXZEUAc.js} +1 -1
- package/src/assets/web-panel/assets/{index-DBFmcaCQ.js → index-By5jBtkV.js} +1 -1
- package/src/assets/web-panel/assets/{index-DqDSF2RW.js → index-CLc19alH.js} +1 -1
- package/src/assets/web-panel/assets/{index-DeGBoLQA.js → index-CMVvxIS8.js} +1 -1
- package/src/assets/web-panel/assets/{index-FyplHuNt.js → index-C_B9rFQE.js} +1 -1
- package/src/assets/web-panel/assets/{index-CeUpKjvi.js → index-CaIS_TNX.js} +1 -1
- package/src/assets/web-panel/assets/{index-BRa4kJ_S.js → index-CawpdGTW.js} +1 -1
- package/src/assets/web-panel/assets/index-ChAzPigF.js +1 -0
- package/src/assets/web-panel/assets/{index-QsgfSZrV.js → index-CpumS98o.js} +1 -1
- package/src/assets/web-panel/assets/{index-BDF6EQBs.js → index-Cr4rjlW5.js} +1 -1
- package/src/assets/web-panel/assets/{index-rS3gl_68.js → index-CrUgDQkf.js} +1 -1
- package/src/assets/web-panel/assets/{index-D4n1lGTB.js → index-CtjLcCNU.js} +1 -1
- package/src/assets/web-panel/assets/{index-ifxmu8SY.js → index-DUkVN794.js} +1 -1
- package/src/assets/web-panel/assets/{index-BTCXf1t-.js → index-D_SePDWj.js} +1 -1
- package/src/assets/web-panel/assets/{index-Bbxjfstq.js → index-DaCCy6lq.js} +1 -1
- package/src/assets/web-panel/assets/{index-D9OE8B3d.js → index-DdefYBSw.js} +1 -1
- package/src/assets/web-panel/assets/{index-CG0lY4h3.js → index-DePOeMDM.js} +1 -1
- package/src/assets/web-panel/assets/{index-Bx4d6c1k.js → index-DgPvuIn2.js} +1 -1
- package/src/assets/web-panel/assets/{index-Z8P4BexE.js → index-FJ3zC9LK.js} +1 -1
- package/src/assets/web-panel/assets/{index-ByzGvpR9.js → index-_PHrIO4O.js} +1 -1
- package/src/assets/web-panel/assets/{index-DwfvPe-j.js → index-fU7wNHDB.js} +1 -1
- package/src/assets/web-panel/assets/{index-CcZ9xJI9.js → index-iYQNU9za.js} +1 -1
- package/src/assets/web-panel/assets/{index-CbD_WW_6.js → index-vIXOpcjD.js} +1 -1
- package/src/assets/web-panel/assets/{initDefaultProps-pmfaD-aK.js → initDefaultProps-D1oZNz0D.js} +1 -1
- package/src/assets/web-panel/assets/{motion-CaQ2CpYF.js → motion-C8k6doMO.js} +1 -1
- package/src/assets/web-panel/assets/{move-CkKTqNbI.js → move-DJ4qSbYt.js} +1 -1
- package/src/assets/web-panel/assets/{mtc-parser-Dd4xsgRI.js → mtc-parser-CdpJD85j.js} +1 -1
- package/src/assets/web-panel/assets/{omit-BFuA5YEs.js → omit-B0V4slKA.js} +1 -1
- package/src/assets/web-panel/assets/{pickAttrs-DDfxOAJc.js → pickAttrs-Di5NiW1F.js} +1 -1
- package/src/assets/web-panel/assets/{placementArrow-Be595JCp.js → placementArrow-B5OMHgEM.js} +1 -1
- package/src/assets/web-panel/assets/{responsiveObserve-7byljUM3.js → responsiveObserve-C6U9IWql.js} +1 -1
- package/src/assets/web-panel/assets/{slide-CTWfOTaY.js → slide-BMyTH3rN.js} +1 -1
- package/src/assets/web-panel/assets/{statusUtils-CNZOuIxM.js → statusUtils-C7d6BG7Z.js} +1 -1
- package/src/assets/web-panel/assets/{styleChecker-DwOcBV78.js → styleChecker-CR50QnQy.js} +1 -1
- package/src/assets/web-panel/assets/{useFlexGapSupport-B6MNwAO9.js → useFlexGapSupport-DBEeoMb8.js} +1 -1
- package/src/assets/web-panel/assets/{useFs-CzyQjH9r.js → useFs-3r099cjv.js} +1 -1
- package/src/assets/web-panel/assets/{usePersonalDataHub-Dxh3KiVA.js → usePersonalDataHub-C5IYNdTK.js} +1 -1
- package/src/assets/web-panel/assets/{vnode-DVfZiS5N.js → vnode-DmEOLRHf.js} +1 -1
- package/src/assets/web-panel/assets/{zoom-BYme7fbY.js → zoom-DnpUiVCB.js} +1 -1
- package/src/assets/web-panel/index.html +1 -1
- package/src/cli-help.js +181 -0
- package/src/command-help-index.json +181 -0
- package/src/command-manifest.json +1271 -175
- package/src/command-surface-policy.js +312 -0
- package/src/commands/agent.js +76 -33
- package/src/commands/artifacts.js +400 -2
- package/src/commands/background-session.js +41 -3
- package/src/commands/checkpoint-restore-recovery.js +1476 -0
- package/src/commands/checkpoint.js +947 -22
- package/src/commands/compact.js +101 -25
- package/src/commands/config.js +506 -20
- package/src/commands/doctor.js +4 -1
- package/src/commands/hub.js +1 -1
- package/src/commands/mcp.js +688 -24
- package/src/commands/pack.js +16 -2
- package/src/commands/plugin.js +20 -12
- package/src/commands/session-mcp-recovery.js +218 -0
- package/src/commands/session.js +470 -110
- package/src/commands/setup.js +36 -10
- package/src/commands/skill.js +181 -110
- package/src/commands/status.js +21 -5
- package/src/commands/update.js +68 -6
- package/src/constants.js +11 -0
- package/src/data/changelog.json +14 -1
- package/src/gateways/ws/action-protocol.js +10 -0
- package/src/gateways/ws/session-protocol.js +555 -27
- package/src/gateways/ws/ws-agent-handler.js +541 -14
- package/src/gateways/ws/ws-session-gateway.js +129 -22
- package/src/gateways/ws/ws-session-state.js +431 -0
- package/src/harness/background-task-manager.js +233 -36
- package/src/harness/jsonl-session-store.js +2551 -167
- package/src/harness/mcp-client.js +802 -61
- package/src/harness/prompt-compressor.js +227 -27
- package/src/harness/session-index.js +89 -38
- package/src/harness/session-list-index.js +254 -0
- package/src/harness/structured-handoff.js +410 -0
- package/src/lazy-dispatch.js +747 -84
- package/src/lib/__tests__/logger.test.js +50 -2
- package/src/lib/advisor-runtime.js +1047 -0
- package/src/lib/agent-core.js +1 -0
- package/src/lib/agent-sandbox.js +120 -26
- package/src/lib/agent-session-export.js +20 -0
- package/src/lib/agent-team/team-runner.js +230 -8
- package/src/lib/artifact-store.js +131 -8
- package/src/lib/background-agent-supervisor.js +185 -13
- package/src/lib/background-interaction-journal.js +37 -9
- package/src/lib/background-launch-profile.js +1058 -0
- package/src/lib/checkpoint-restore-already-completed-controller.js +902 -0
- package/src/lib/checkpoint-restore-orchestrator.js +987 -0
- package/src/lib/checkpoint-restore-partial-rollback-controller.js +1953 -0
- package/src/lib/checkpoint-restore-recovery-controller.js +689 -0
- package/src/lib/checkpoint-restore-recovery.js +884 -0
- package/src/lib/checkpoint-restore-retention.js +126 -0
- package/src/lib/checkpoint-restore-saga.js +5079 -0
- package/src/lib/checkpoint-restore-session-recovery.js +1178 -0
- package/src/lib/checkpoint-restore-workspace-target-verifier.js +270 -0
- package/src/lib/checkpoint-store.js +1688 -97
- package/src/lib/checkpoint-timeline-authority.js +522 -0
- package/src/lib/checkpoint-timeline.js +642 -0
- package/src/lib/config-keys.js +18 -119
- package/src/lib/config-manager.js +446 -27
- package/src/lib/config-redaction.js +57 -0
- package/src/lib/config-schema.js +853 -0
- package/src/lib/cowork-mcp-tools.js +5 -0
- package/src/lib/cowork-task-runner.js +458 -63
- package/src/lib/delivery-coordinator.js +1234 -0
- package/src/lib/delivery-evidence.js +450 -0
- package/src/lib/doctor-checkup.js +199 -14
- package/src/lib/executable-path.js +34 -0
- package/src/lib/fatal-handler.js +16 -0
- package/src/lib/file-checkpoint.js +4909 -186
- package/src/lib/file-lines.js +125 -0
- package/src/lib/headless-config-command.js +16 -5
- package/src/lib/hook-runner.cjs +139 -38
- package/src/lib/hooks-v2-workspace-context.js +10 -0
- package/src/lib/impacted-gate-selector.js +424 -0
- package/src/lib/interaction-adapter.js +62 -0
- package/src/lib/jsonl-session-store.js +1 -35
- package/src/lib/logger.js +66 -14
- package/src/lib/mcp-call-ledger-store.js +1069 -0
- package/src/lib/mcp-call-ledger.js +747 -0
- package/src/lib/mcp-client.js +5 -0
- package/src/lib/mcp-conflict-scheduler.js +468 -0
- package/src/lib/mcp-effect-contract.js +102 -0
- package/src/lib/mcp-headers-helper-trust.js +145 -0
- package/src/lib/mcp-headers-helper.js +616 -0
- package/src/lib/mcp-host-recovery-runtime.js +131 -0
- package/src/lib/mcp-ledger-recovery-admission.js +1065 -0
- package/src/lib/mcp-recovery-adjudication.js +443 -0
- package/src/lib/output-context.js +86 -0
- package/src/lib/packer/file-identity.js +170 -0
- package/src/lib/packer/index.js +3 -0
- package/src/lib/packer/native-update-state.js +277 -0
- package/src/lib/packer/pack-update-applier.js +1983 -136
- package/src/lib/packer/pack-update-checker.js +34 -0
- package/src/lib/packer/pack-update-downloader.js +875 -86
- package/src/lib/packer/pack-update-signature.js +86 -0
- package/src/lib/packer/pkg-config-generator.js +6 -0
- package/src/lib/paths.js +65 -10
- package/src/lib/plan-mode.js +831 -14
- package/src/lib/plan-persistence.js +540 -0
- package/src/lib/plugin-runtime/hooks.js +227 -69
- package/src/lib/plugin-runtime/plugin-options.js +189 -44
- package/src/lib/pr-automation-policy.js +146 -8
- package/src/lib/process-execution-broker/credential-agent.js +7 -0
- package/src/lib/process-execution-broker/index.js +53 -8
- package/src/lib/process-execution-broker/workspace-transaction.js +976 -73
- package/src/lib/project-instructions.js +165 -29
- package/src/lib/project-mcp-trust.js +67 -0
- package/src/lib/public-ide-capability-manifest.js +278 -0
- package/src/lib/public-ide-capability-validation.js +351 -0
- package/src/lib/secret-store.js +267 -43
- package/src/lib/secure-fs.js +1089 -0
- package/src/lib/security-audit.js +58 -0
- package/src/lib/service-manager.js +34 -13
- package/src/lib/session-budget-runtime.js +1452 -0
- package/src/lib/session-host-snapshot.js +388 -0
- package/src/lib/session-message-provenance.js +429 -0
- package/src/lib/session-projection.js +804 -0
- package/src/lib/session-resource-budget.js +1495 -0
- package/src/lib/settings-hooks.cjs +138 -22
- package/src/lib/settings-loader.cjs +25 -2
- package/src/lib/side-effect-ledger-store.js +45 -23
- package/src/lib/skill-execution-identity.js +217 -0
- package/src/lib/skill-loader.js +299 -18
- package/src/lib/sub-agent-context.js +236 -28
- package/src/lib/sub-agent-registry.js +5 -0
- package/src/lib/subagent-contract.js +94 -0
- package/src/lib/todo-manager.js +185 -18
- package/src/lib/todo-persistence.js +417 -0
- package/src/lib/turn-binding-store.js +41 -23
- package/src/lib/with-file-lock.js +25 -1
- package/src/lib/ws-chat-handler.js +21 -0
- package/src/program-base.js +18 -0
- package/src/repl/advisor-command.js +103 -0
- package/src/repl/agent-repl.js +2332 -154
- package/src/repl/btw-command.js +93 -10
- package/src/repl/clipboard-image.js +119 -0
- package/src/repl/config-summary.js +64 -108
- package/src/repl/prompt-editor.js +233 -0
- package/src/repl/prompt-interactions.js +404 -0
- package/src/repl/prompt-stash.js +354 -0
- package/src/repl/prompt-suggestions.js +312 -0
- package/src/repl/repl-keybindings.js +227 -0
- package/src/repl/session-recap.js +217 -0
- package/src/repl/slash-command-registry.js +25 -4
- package/src/repl/terminal-layout.js +88 -0
- package/src/runtime/agent-core.js +1264 -325
- package/src/runtime/coding-agent-contract-shared.cjs +13 -1
- package/src/runtime/coding-agent-managed-tool-policy.cjs +7 -2
- package/src/runtime/diagnostics.js +32 -13
- package/src/runtime/headless-runner.js +298 -118
- package/src/runtime/headless-stream.js +353 -95
- package/src/runtime/mcp-config.js +148 -14
- package/src/runtime/status-diagnostics-lite.js +137 -0
- package/src/assets/web-panel/assets/ChatBubbleRenderer-DDHDpBBA.js +0 -1
- package/src/assets/web-panel/assets/MarkdownRenderer-TabqHW9B.js +0 -1
- package/src/assets/web-panel/assets/RemoteSession-B0rkE09d.js +0 -5
- package/src/assets/web-panel/assets/WorkflowEditor-tzdyUk-1.js +0 -1
- package/src/assets/web-panel/assets/devWarning-DIrncrV1.js +0 -1
- package/src/assets/web-panel/assets/index-D-Swwqld.js +0 -1
- package/src/assets/web-panel/assets/index-FMZAMKy8.js +0 -1
|
@@ -26,6 +26,18 @@ export const CHECK_STATE = Object.freeze({
|
|
|
26
26
|
ERROR: "error",
|
|
27
27
|
});
|
|
28
28
|
|
|
29
|
+
/** Terminal outcomes prove that a side effect no longer needs adjudication. */
|
|
30
|
+
export const SETTLED_SIDE_EFFECT_STATES = Object.freeze([
|
|
31
|
+
"committed",
|
|
32
|
+
"failed",
|
|
33
|
+
"no_effect",
|
|
34
|
+
"not_applicable",
|
|
35
|
+
"rejected",
|
|
36
|
+
"rolled_back",
|
|
37
|
+
"settled",
|
|
38
|
+
"verified",
|
|
39
|
+
]);
|
|
40
|
+
|
|
29
41
|
const CHECK_ALIASES = new Map([
|
|
30
42
|
["passed", CHECK_STATE.PASSED],
|
|
31
43
|
["pass", CHECK_STATE.PASSED],
|
|
@@ -49,6 +61,8 @@ const CHECK_ALIASES = new Map([
|
|
|
49
61
|
["action_required", CHECK_STATE.ERROR],
|
|
50
62
|
]);
|
|
51
63
|
|
|
64
|
+
const EXACT_COMMIT_RE = /^(?:[0-9a-f]{40}|[0-9a-f]{64})$/i;
|
|
65
|
+
|
|
52
66
|
/** Normalize any provider's check conclusion/status to a canonical state. */
|
|
53
67
|
export function normalizeCheckState(value) {
|
|
54
68
|
if (typeof value !== "string") return null;
|
|
@@ -94,6 +108,31 @@ export function summarizeChecks(checks = []) {
|
|
|
94
108
|
};
|
|
95
109
|
}
|
|
96
110
|
|
|
111
|
+
/**
|
|
112
|
+
* Summarize side effects without guessing. A missing ledger is different from
|
|
113
|
+
* an explicitly empty ledger: only the latter proves that there are no side
|
|
114
|
+
* effects to adjudicate.
|
|
115
|
+
*/
|
|
116
|
+
export function summarizeSideEffects(sideEffects) {
|
|
117
|
+
if (!Array.isArray(sideEffects)) {
|
|
118
|
+
return { verified: false, total: 0, unresolved: ["ledger-unavailable"] };
|
|
119
|
+
}
|
|
120
|
+
const settled = new Set(SETTLED_SIDE_EFFECT_STATES);
|
|
121
|
+
const unresolved = [];
|
|
122
|
+
sideEffects.forEach((effect, index) => {
|
|
123
|
+
const id = String(effect?.id || effect?.operationId || index);
|
|
124
|
+
const state = String(effect?.status || effect?.state || "")
|
|
125
|
+
.trim()
|
|
126
|
+
.toLowerCase();
|
|
127
|
+
if (!settled.has(state)) unresolved.push(id);
|
|
128
|
+
});
|
|
129
|
+
return {
|
|
130
|
+
verified: true,
|
|
131
|
+
total: sideEffects.length,
|
|
132
|
+
unresolved,
|
|
133
|
+
};
|
|
134
|
+
}
|
|
135
|
+
|
|
97
136
|
function budgetExhausted(budget) {
|
|
98
137
|
if (!budget || typeof budget !== "object") return false;
|
|
99
138
|
const over = (spent, cap) =>
|
|
@@ -152,9 +191,47 @@ export function autoFixDecision(params = {}) {
|
|
|
152
191
|
}
|
|
153
192
|
|
|
154
193
|
/**
|
|
155
|
-
*
|
|
156
|
-
*
|
|
157
|
-
*
|
|
194
|
+
* Backward-compatible decision used by the existing session PR status view.
|
|
195
|
+
* The resumable delivery workflow uses `strictAutoMergeDecision` below, whose
|
|
196
|
+
* evidence contract additionally binds every required check to an exact head
|
|
197
|
+
* commit and requires an explicit side-effect ledger.
|
|
198
|
+
*/
|
|
199
|
+
export function autoMergeDecision(params = {}) {
|
|
200
|
+
const unmet = [];
|
|
201
|
+
|
|
202
|
+
if (params.enabled !== true) unmet.push("auto-merge-disabled");
|
|
203
|
+
if (params.hasOpenPr !== true) unmet.push("no-open-pr");
|
|
204
|
+
if (params.branchProtectionSatisfied !== true) {
|
|
205
|
+
unmet.push("branch-protection-unsatisfied");
|
|
206
|
+
}
|
|
207
|
+
if (params.reviewApproved !== true) unmet.push("review-not-approved");
|
|
208
|
+
if (Number(params.pendingApprovals) > 0) unmet.push("pending-approvals");
|
|
209
|
+
|
|
210
|
+
const summary = summarizeChecks(params.checks);
|
|
211
|
+
if (summary.anyFailed) unmet.push("checks-failing");
|
|
212
|
+
if (summary.pending > 0) unmet.push("checks-pending");
|
|
213
|
+
|
|
214
|
+
const required = Array.isArray(params.requiredChecks)
|
|
215
|
+
? params.requiredChecks
|
|
216
|
+
: [];
|
|
217
|
+
for (const name of required) {
|
|
218
|
+
const state = summary.byName.get(String(name));
|
|
219
|
+
if (state !== CHECK_STATE.PASSED && state !== CHECK_STATE.NEUTRAL) {
|
|
220
|
+
unmet.push(`required-check-missing:${name}`);
|
|
221
|
+
}
|
|
222
|
+
}
|
|
223
|
+
|
|
224
|
+
return {
|
|
225
|
+
allow: unmet.length === 0,
|
|
226
|
+
reason: unmet.length === 0 ? "ok" : unmet[0],
|
|
227
|
+
unmet,
|
|
228
|
+
};
|
|
229
|
+
}
|
|
230
|
+
|
|
231
|
+
/**
|
|
232
|
+
* Decide whether a delivery workflow may request a PR merge. Fail-closed and
|
|
233
|
+
* exhaustive: every unmet requirement is collected, and merge is allowed ONLY
|
|
234
|
+
* when the complete, exact-commit evidence contract is satisfied.
|
|
158
235
|
*
|
|
159
236
|
* @param {object} params
|
|
160
237
|
* @param {boolean} params.enabled auto-merge explicitly turned on
|
|
@@ -163,11 +240,15 @@ export function autoFixDecision(params = {}) {
|
|
|
163
240
|
* @param {boolean} params.reviewApproved
|
|
164
241
|
* @param {number} params.pendingApprovals permission approvals still waiting
|
|
165
242
|
* @param {string[]} params.requiredChecks names that must be present AND passed
|
|
243
|
+
* @param {boolean} params.requiredMatrixComplete list is the authoritative full matrix
|
|
166
244
|
* @param {Array} params.checks observed checks (summarizeChecks input)
|
|
245
|
+
* @param {string} params.headCommitSha exact PR head
|
|
246
|
+
* @param {string} params.ciCommitSha commit assessed by CI
|
|
247
|
+
* @param {Array} params.sideEffects explicit adjudication ledger (may be empty)
|
|
167
248
|
* @param {string} [params.targetBranch]
|
|
168
249
|
* @returns {{allow:boolean, reason:string, unmet:string[]}}
|
|
169
250
|
*/
|
|
170
|
-
export function
|
|
251
|
+
export function strictAutoMergeDecision(params = {}) {
|
|
171
252
|
const unmet = [];
|
|
172
253
|
|
|
173
254
|
if (params.enabled !== true) unmet.push("auto-merge-disabled");
|
|
@@ -176,7 +257,23 @@ export function autoMergeDecision(params = {}) {
|
|
|
176
257
|
unmet.push("branch-protection-unsatisfied");
|
|
177
258
|
}
|
|
178
259
|
if (params.reviewApproved !== true) unmet.push("review-not-approved");
|
|
179
|
-
|
|
260
|
+
const pendingApprovals = Number(params.pendingApprovals);
|
|
261
|
+
if (!Number.isInteger(pendingApprovals) || pendingApprovals < 0) {
|
|
262
|
+
unmet.push("pending-approvals-unverified");
|
|
263
|
+
} else if (pendingApprovals > 0) {
|
|
264
|
+
unmet.push("pending-approvals");
|
|
265
|
+
}
|
|
266
|
+
|
|
267
|
+
const headCommitSha = String(params.headCommitSha || "").trim();
|
|
268
|
+
const ciCommitSha = String(params.ciCommitSha || "").trim();
|
|
269
|
+
if (
|
|
270
|
+
!EXACT_COMMIT_RE.test(headCommitSha) ||
|
|
271
|
+
!EXACT_COMMIT_RE.test(ciCommitSha)
|
|
272
|
+
) {
|
|
273
|
+
unmet.push("commit-sha-unverifiable");
|
|
274
|
+
} else if (headCommitSha !== ciCommitSha) {
|
|
275
|
+
unmet.push("ci-head-mismatch");
|
|
276
|
+
}
|
|
180
277
|
|
|
181
278
|
const summary = summarizeChecks(params.checks);
|
|
182
279
|
if (summary.anyFailed) unmet.push("checks-failing");
|
|
@@ -185,13 +282,54 @@ export function autoMergeDecision(params = {}) {
|
|
|
185
282
|
// Every REQUIRED check must be present and passed — a required check that
|
|
186
283
|
// never ran is a block, not a pass.
|
|
187
284
|
const required = Array.isArray(params.requiredChecks)
|
|
188
|
-
? params.requiredChecks
|
|
285
|
+
? params.requiredChecks.map((name) => String(name || "").trim())
|
|
189
286
|
: [];
|
|
287
|
+
if (params.requiredMatrixComplete !== true) {
|
|
288
|
+
unmet.push("required-matrix-unverified");
|
|
289
|
+
}
|
|
290
|
+
if (required.length === 0 || required.some((name) => !name)) {
|
|
291
|
+
unmet.push("required-checks-unverified");
|
|
292
|
+
}
|
|
293
|
+
if (new Set(required).size !== required.length) {
|
|
294
|
+
unmet.push("required-checks-ambiguous");
|
|
295
|
+
}
|
|
190
296
|
for (const name of required) {
|
|
191
|
-
const
|
|
192
|
-
|
|
297
|
+
const matches = (Array.isArray(params.checks) ? params.checks : []).filter(
|
|
298
|
+
(check) => String(check?.name || "") === name,
|
|
299
|
+
);
|
|
300
|
+
if (matches.length === 0) {
|
|
193
301
|
unmet.push(`required-check-missing:${name}`);
|
|
302
|
+
continue;
|
|
194
303
|
}
|
|
304
|
+
if (matches.length > 1) {
|
|
305
|
+
unmet.push(`required-check-ambiguous:${name}`);
|
|
306
|
+
continue;
|
|
307
|
+
}
|
|
308
|
+
const check = matches[0];
|
|
309
|
+
const state =
|
|
310
|
+
normalizeCheckState(check?.state) ??
|
|
311
|
+
normalizeCheckState(check?.conclusion) ??
|
|
312
|
+
normalizeCheckState(check?.status);
|
|
313
|
+
if (state !== CHECK_STATE.PASSED) {
|
|
314
|
+
unmet.push(`required-check-not-passed:${name}`);
|
|
315
|
+
}
|
|
316
|
+
const checkCommitSha = String(check?.commitSha || "").trim();
|
|
317
|
+
if (
|
|
318
|
+
!EXACT_COMMIT_RE.test(checkCommitSha) ||
|
|
319
|
+
!EXACT_COMMIT_RE.test(headCommitSha)
|
|
320
|
+
) {
|
|
321
|
+
unmet.push(`required-check-commit-unverifiable:${name}`);
|
|
322
|
+
} else if (checkCommitSha !== headCommitSha) {
|
|
323
|
+
unmet.push(`required-check-stale:${name}`);
|
|
324
|
+
}
|
|
325
|
+
}
|
|
326
|
+
|
|
327
|
+
const sideEffects = summarizeSideEffects(params.sideEffects);
|
|
328
|
+
if (!sideEffects.verified) {
|
|
329
|
+
unmet.push("side-effects-unverified");
|
|
330
|
+
}
|
|
331
|
+
for (const id of sideEffects.unresolved) {
|
|
332
|
+
if (sideEffects.verified) unmet.push(`side-effect-unresolved:${id}`);
|
|
195
333
|
}
|
|
196
334
|
|
|
197
335
|
return {
|
|
@@ -88,6 +88,13 @@ const ENV_ALLOWLIST = new Set([
|
|
|
88
88
|
"VISUAL",
|
|
89
89
|
"NODE_ENV",
|
|
90
90
|
"NODE_OPTIONS",
|
|
91
|
+
// Deterministic local commit metadata is identity text, not an auth secret.
|
|
92
|
+
// The broad /AUTH/i detector would otherwise strip GIT_AUTHOR_* and break
|
|
93
|
+
// checkpoint commit-tree in repos without user.name/user.email.
|
|
94
|
+
"GIT_AUTHOR_NAME",
|
|
95
|
+
"GIT_AUTHOR_EMAIL",
|
|
96
|
+
"GIT_COMMITTER_NAME",
|
|
97
|
+
"GIT_COMMITTER_EMAIL",
|
|
91
98
|
// These identify a run; they are not authentication credentials.
|
|
92
99
|
"CC_SESSION_ID",
|
|
93
100
|
"CLAUDE_CODE_SESSION_ID",
|
|
@@ -2308,6 +2308,33 @@ class ProcessExecutionBroker extends EventEmitter {
|
|
|
2308
2308
|
}
|
|
2309
2309
|
}
|
|
2310
2310
|
|
|
2311
|
+
_normalizeAuditRedactArgIndexes(value, argCount) {
|
|
2312
|
+
if (value === undefined) return new Set();
|
|
2313
|
+
if (!Array.isArray(value)) {
|
|
2314
|
+
throw new TypeError("auditRedactArgIndexes must be an array");
|
|
2315
|
+
}
|
|
2316
|
+
const indexes = new Set();
|
|
2317
|
+
for (const index of value) {
|
|
2318
|
+
if (!Number.isInteger(index) || index < 0 || index >= argCount) {
|
|
2319
|
+
throw new TypeError("auditRedactArgIndexes contains an invalid index");
|
|
2320
|
+
}
|
|
2321
|
+
indexes.add(index);
|
|
2322
|
+
}
|
|
2323
|
+
return indexes;
|
|
2324
|
+
}
|
|
2325
|
+
|
|
2326
|
+
_auditArgs(args, redactIndexes = new Set()) {
|
|
2327
|
+
const sanitized = this._sanitizeAuditArgs(args);
|
|
2328
|
+
for (const index of redactIndexes) {
|
|
2329
|
+
sanitized[index] = "***REDACTED***";
|
|
2330
|
+
}
|
|
2331
|
+
return sanitized;
|
|
2332
|
+
}
|
|
2333
|
+
|
|
2334
|
+
_stripAuditControlOptions(options) {
|
|
2335
|
+
delete options.auditRedactArgIndexes;
|
|
2336
|
+
}
|
|
2337
|
+
|
|
2311
2338
|
_applyCredentialBoundary(command, args, spawnOptions, origin) {
|
|
2312
2339
|
const originalArgs = Array.isArray(args) ? [...args] : [];
|
|
2313
2340
|
const originalEnv = spawnOptions.env || process.env;
|
|
@@ -2704,6 +2731,10 @@ class ProcessExecutionBroker extends EventEmitter {
|
|
|
2704
2731
|
let decision = policy;
|
|
2705
2732
|
if (isDangerous && policy !== "deny") decision = "deny";
|
|
2706
2733
|
if (options.forceAllow) decision = "elevated";
|
|
2734
|
+
const auditRedactArgIndexes = this._normalizeAuditRedactArgIndexes(
|
|
2735
|
+
options.auditRedactArgIndexes,
|
|
2736
|
+
Array.isArray(args) ? args.length : 0,
|
|
2737
|
+
);
|
|
2707
2738
|
|
|
2708
2739
|
const traceCtx = this._getTraceContext();
|
|
2709
2740
|
const auditEntry = {
|
|
@@ -2712,7 +2743,7 @@ class ProcessExecutionBroker extends EventEmitter {
|
|
|
2712
2743
|
origin,
|
|
2713
2744
|
scope,
|
|
2714
2745
|
command,
|
|
2715
|
-
args: this.
|
|
2746
|
+
args: this._auditArgs(args, auditRedactArgIndexes),
|
|
2716
2747
|
cwd,
|
|
2717
2748
|
startTime,
|
|
2718
2749
|
permissionDecision: decision,
|
|
@@ -2781,6 +2812,7 @@ class ProcessExecutionBroker extends EventEmitter {
|
|
|
2781
2812
|
this._stripSandboxControlOptions(spawnOpts);
|
|
2782
2813
|
this._stripPluginControlOptions(spawnOpts);
|
|
2783
2814
|
this._stripWorkspaceTransactionOptions(spawnOpts);
|
|
2815
|
+
this._stripAuditControlOptions(spawnOpts);
|
|
2784
2816
|
if (traceCtx) {
|
|
2785
2817
|
spawnOpts.env = { ...(spawnOpts.env || process.env) };
|
|
2786
2818
|
spawnOpts.env.TRACEPARENT = traceCtx.traceparent;
|
|
@@ -2802,7 +2834,7 @@ class ProcessExecutionBroker extends EventEmitter {
|
|
|
2802
2834
|
);
|
|
2803
2835
|
spawnOpts.env = credentialBoundary.env;
|
|
2804
2836
|
args = credentialBoundary.args;
|
|
2805
|
-
auditEntry.args =
|
|
2837
|
+
auditEntry.args = this._auditArgs(args, auditRedactArgIndexes);
|
|
2806
2838
|
this._recordCredentialReport(auditEntry, credentialBoundary.report);
|
|
2807
2839
|
this._stripCredentialControlOptions(spawnOpts);
|
|
2808
2840
|
}
|
|
@@ -2932,7 +2964,7 @@ class ProcessExecutionBroker extends EventEmitter {
|
|
|
2932
2964
|
executionId,
|
|
2933
2965
|
toolName: origin,
|
|
2934
2966
|
command,
|
|
2935
|
-
args,
|
|
2967
|
+
args: [...auditEntry.args],
|
|
2936
2968
|
cwd,
|
|
2937
2969
|
pid: proc.pid,
|
|
2938
2970
|
component: origin,
|
|
@@ -2993,6 +3025,10 @@ class ProcessExecutionBroker extends EventEmitter {
|
|
|
2993
3025
|
let decision = policy;
|
|
2994
3026
|
if (isDangerous && policy !== "deny") decision = "deny";
|
|
2995
3027
|
if (options.forceAllow) decision = "elevated";
|
|
3028
|
+
const auditRedactArgIndexes = this._normalizeAuditRedactArgIndexes(
|
|
3029
|
+
options.auditRedactArgIndexes,
|
|
3030
|
+
Array.isArray(args) ? args.length : 0,
|
|
3031
|
+
);
|
|
2996
3032
|
|
|
2997
3033
|
const traceCtx = this._getTraceContext();
|
|
2998
3034
|
const auditEntry = {
|
|
@@ -3001,7 +3037,7 @@ class ProcessExecutionBroker extends EventEmitter {
|
|
|
3001
3037
|
origin,
|
|
3002
3038
|
scope,
|
|
3003
3039
|
command,
|
|
3004
|
-
args: this.
|
|
3040
|
+
args: this._auditArgs(args, auditRedactArgIndexes),
|
|
3005
3041
|
cwd,
|
|
3006
3042
|
startTime,
|
|
3007
3043
|
permissionDecision: decision,
|
|
@@ -3060,6 +3096,7 @@ class ProcessExecutionBroker extends EventEmitter {
|
|
|
3060
3096
|
this._stripSandboxControlOptions(spawnOpts);
|
|
3061
3097
|
this._stripPluginControlOptions(spawnOpts);
|
|
3062
3098
|
this._stripWorkspaceTransactionOptions(spawnOpts);
|
|
3099
|
+
this._stripAuditControlOptions(spawnOpts);
|
|
3063
3100
|
if (traceCtx) {
|
|
3064
3101
|
spawnOpts.env = { ...(spawnOpts.env || process.env) };
|
|
3065
3102
|
spawnOpts.env.TRACEPARENT = traceCtx.traceparent;
|
|
@@ -3081,7 +3118,7 @@ class ProcessExecutionBroker extends EventEmitter {
|
|
|
3081
3118
|
);
|
|
3082
3119
|
spawnOpts.env = credentialBoundary.env;
|
|
3083
3120
|
args = credentialBoundary.args;
|
|
3084
|
-
auditEntry.args =
|
|
3121
|
+
auditEntry.args = this._auditArgs(args, auditRedactArgIndexes);
|
|
3085
3122
|
this._recordCredentialReport(auditEntry, credentialBoundary.report);
|
|
3086
3123
|
this._stripCredentialControlOptions(spawnOpts);
|
|
3087
3124
|
}
|
|
@@ -3182,13 +3219,17 @@ class ProcessExecutionBroker extends EventEmitter {
|
|
|
3182
3219
|
const origin = options.origin || "terminal:pty";
|
|
3183
3220
|
const scope = options.scope || "terminal";
|
|
3184
3221
|
const policy = options.policy || "allow";
|
|
3222
|
+
const auditRedactArgIndexes = this._normalizeAuditRedactArgIndexes(
|
|
3223
|
+
options.auditRedactArgIndexes,
|
|
3224
|
+
Array.isArray(args) ? args.length : 0,
|
|
3225
|
+
);
|
|
3185
3226
|
const auditEntry = {
|
|
3186
3227
|
executionId,
|
|
3187
3228
|
traceId: this._getTraceContext()?.traceId || null,
|
|
3188
3229
|
origin,
|
|
3189
3230
|
scope,
|
|
3190
3231
|
command,
|
|
3191
|
-
args: this.
|
|
3232
|
+
args: this._auditArgs(args, auditRedactArgIndexes),
|
|
3192
3233
|
cwd: options.cwd || process.cwd(),
|
|
3193
3234
|
startTime,
|
|
3194
3235
|
permissionDecision: policy,
|
|
@@ -3237,10 +3278,11 @@ class ProcessExecutionBroker extends EventEmitter {
|
|
|
3237
3278
|
throw error;
|
|
3238
3279
|
}
|
|
3239
3280
|
|
|
3240
|
-
const spawnOptions = { ...options, args: [...
|
|
3281
|
+
const spawnOptions = { ...options, args: [...args] };
|
|
3241
3282
|
this._stripSandboxControlOptions(spawnOptions);
|
|
3242
3283
|
this._stripPluginControlOptions(spawnOptions);
|
|
3243
3284
|
this._stripWorkspaceTransactionOptions(spawnOptions);
|
|
3285
|
+
this._stripAuditControlOptions(spawnOptions);
|
|
3244
3286
|
try {
|
|
3245
3287
|
const terminalName =
|
|
3246
3288
|
typeof options.name === "string" && options.name
|
|
@@ -3265,7 +3307,10 @@ class ProcessExecutionBroker extends EventEmitter {
|
|
|
3265
3307
|
);
|
|
3266
3308
|
spawnOptions.env = credentialBoundary.env;
|
|
3267
3309
|
spawnOptions.args = credentialBoundary.args;
|
|
3268
|
-
auditEntry.args =
|
|
3310
|
+
auditEntry.args = this._auditArgs(
|
|
3311
|
+
credentialBoundary.args,
|
|
3312
|
+
auditRedactArgIndexes,
|
|
3313
|
+
);
|
|
3269
3314
|
this._recordCredentialReport(auditEntry, credentialBoundary.report);
|
|
3270
3315
|
this._stripCredentialControlOptions(spawnOptions);
|
|
3271
3316
|
}
|