chainlesschain 0.162.175 → 0.162.177
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/package.json +10 -10
- package/src/assets/web-panel/assets/{AIOps-DherW0Rh.js → AIOps-DT-VPWuN.js} +1 -1
- package/src/assets/web-panel/assets/{ActionButton-CDGfqt2Y.js → ActionButton-DyOreOVN.js} +1 -1
- package/src/assets/web-panel/assets/{Analytics-BYhkzdgD.js → Analytics-DslNsKux.js} +3 -3
- package/src/assets/web-panel/assets/{AppLayout-cEKk1cpb.js → AppLayout-BNJJAYME.js} +5 -5
- package/src/assets/web-panel/assets/{Artifacts-_aXR3WWc.js → Artifacts-DoaAtEcY.js} +1 -1
- package/src/assets/web-panel/assets/{Audit-CYAf-gY7.js → Audit-DPG3WdJ9.js} +1 -1
- package/src/assets/web-panel/assets/{BackgroundAgents-D4Q20phR.js → BackgroundAgents-C_JO6R5G.js} +1 -1
- package/src/assets/web-panel/assets/{Backup-Cq0Tyk58.js → Backup-Cv3BooyX.js} +1 -1
- package/src/assets/web-panel/assets/{BaseInput-CPj_CdAv.js → BaseInput-D2uQXWu-.js} +1 -1
- package/src/assets/web-panel/assets/{Chat-BQ-Qq0es.js → Chat-B4Vczyf3.js} +4 -4
- package/src/assets/web-panel/assets/ChatBubbleRenderer-DE6reP99.js +1 -0
- package/src/assets/web-panel/assets/{Checkbox-rke6l3yg.js → Checkbox-qTgk4VeP.js} +1 -1
- package/src/assets/web-panel/assets/{Codegen-DiacrIPq.js → Codegen-DlLWcIzj.js} +1 -1
- package/src/assets/web-panel/assets/{Col-Cx3BY-Up.js → Col-DNO73qp7.js} +1 -1
- package/src/assets/web-panel/assets/{Community-DfmWiQy8.js → Community-vRDNpc4j.js} +1 -1
- package/src/assets/web-panel/assets/{Compact-DdQnpxy5.js → Compact-CEWtIXni.js} +1 -1
- package/src/assets/web-panel/assets/{Compliance-lzliOH_r.js → Compliance-KgYC9Fxi.js} +1 -1
- package/src/assets/web-panel/assets/{Cowork-CYx4Un5k.js → Cowork-zj5wvkpT.js} +2 -2
- package/src/assets/web-panel/assets/{Cron-BGDcPFlo.js → Cron-BLDoCozU.js} +2 -2
- package/src/assets/web-panel/assets/{Crosschain-0_X5g2ri.js → Crosschain-BYnff4VY.js} +1 -1
- package/src/assets/web-panel/assets/{DID-C0PEf3Eu.js → DID-C75VFsVm.js} +2 -2
- package/src/assets/web-panel/assets/{Dashboard-DULQjQ58.js → Dashboard-C4Gutni2.js} +2 -2
- package/src/assets/web-panel/assets/{Dropdown-DGRHRbW6.js → Dropdown-B5dbO4Kx.js} +1 -1
- package/src/assets/web-panel/assets/{EmailListRenderer-ChX8XPwB.js → EmailListRenderer-BDipZtHJ.js} +1 -1
- package/src/assets/web-panel/assets/{FamilyGuardDashboard-Dyq6IBNu.js → FamilyGuardDashboard-DmIzt8jj.js} +1 -1
- package/src/assets/web-panel/assets/{Federation-DH1NfAL2.js → Federation-D9QOS-uW.js} +1 -1
- package/src/assets/web-panel/assets/{FormItemContext-BN1I_uNi.js → FormItemContext-B47HRwAm.js} +1 -1
- package/src/assets/web-panel/assets/{GenericCardRenderer-Dq_2UYpe.js → GenericCardRenderer-3R4mXmgV.js} +1 -1
- package/src/assets/web-panel/assets/{Git-BAy1yvI2.js → Git-DrNXZf1C.js} +2 -2
- package/src/assets/web-panel/assets/{Governance-Db6Q2iSy.js → Governance-BGd7JR98.js} +1 -1
- package/src/assets/web-panel/assets/{Inference-0ub6yHcr.js → Inference-D-2he1ed.js} +1 -1
- package/src/assets/web-panel/assets/{KnowledgeGraph-DtLetM36.js → KnowledgeGraph-C0sHIbK5.js} +1 -1
- package/src/assets/web-panel/assets/{Logs-Bcoy7CUd.js → Logs-DiBQO-jL.js} +2 -2
- package/src/assets/web-panel/assets/{MarkdownRenderer-BfEMFAXf.js → MarkdownRenderer-DL_5eV2D.js} +1 -1
- package/src/assets/web-panel/assets/{Marketplace-tt2rzwRR.js → Marketplace-VR59OdrC.js} +1 -1
- package/src/assets/web-panel/assets/{McpTools-BhOgX-MU.js → McpTools-DrPzwSd3.js} +3 -3
- package/src/assets/web-panel/assets/{Memory-BJUxeWBL.js → Memory-CBgKALwQ.js} +2 -2
- package/src/assets/web-panel/assets/{MobileBridge-BwUY2G9w.js → MobileBridge-pQ9Tn-Mn.js} +1 -1
- package/src/assets/web-panel/assets/{MobileProjects-BLRfHhqi.js → MobileProjects-mASB6jyj.js} +1 -1
- package/src/assets/web-panel/assets/{Mtc-B2WMboOm.js → Mtc-DTMgE7HC.js} +2 -2
- package/src/assets/web-panel/assets/{MtcAudit-8pNEXO63.js → MtcAudit-CwTnCtiL.js} +2 -2
- package/src/assets/web-panel/assets/{Multisig-C1wm5a_1.js → Multisig-ngm6WU8f.js} +3 -3
- package/src/assets/web-panel/assets/{NLProgramming-C1QpKF7g.js → NLProgramming-4YO4Qww9.js} +1 -1
- package/src/assets/web-panel/assets/{Notes-CiQUcxFu.js → Notes-DP1k45mF.js} +3 -3
- package/src/assets/web-panel/assets/{NotificationSettings-BblDPJ_x.js → NotificationSettings-r2H8yPKb.js} +1 -1
- package/src/assets/web-panel/assets/{OrderTableRenderer-DRjYcPtb.js → OrderTableRenderer-CoM_Zw0J.js} +1 -1
- package/src/assets/web-panel/assets/{Organization-Dp3VKB0X.js → Organization-DrO7jRWS.js} +4 -4
- package/src/assets/web-panel/assets/{Overflow-Czx161m9.js → Overflow-Cnwu4i4t.js} +1 -1
- package/src/assets/web-panel/assets/{P2P-ClFi6wOs.js → P2P-zi-cDwA_.js} +2 -2
- package/src/assets/web-panel/assets/{PdhVaultBrowser-CRweW0lz.js → PdhVaultBrowser-DBEryDv7.js} +3 -3
- package/src/assets/web-panel/assets/{Permissions-BzcRoqTn.js → Permissions-lqXK2C3x.js} +4 -4
- package/src/assets/web-panel/assets/{PersonalDataHub-ChGTpNMd.js → PersonalDataHub-b63T3HJM.js} +2 -2
- package/src/assets/web-panel/assets/{Pipeline-BMOOpKWA.js → Pipeline-Kep5KAGW.js} +1 -1
- package/src/assets/web-panel/assets/{Privacy-D0AZHObH.js → Privacy-CHdvOAh1.js} +1 -1
- package/src/assets/web-panel/assets/{ProjectInit-yYFlZ6Ja.js → ProjectInit-BhKfdwe9.js} +2 -2
- package/src/assets/web-panel/assets/{ProjectSettings-DJNVuMQs.js → ProjectSettings-Yavk9K8A.js} +2 -2
- package/src/assets/web-panel/assets/{Projects-Br0rBWH1.js → Projects-CN8E_5Mq.js} +1 -1
- package/src/assets/web-panel/assets/Providers-Bfym6SQn.js +1 -0
- package/src/assets/web-panel/assets/{QrScannerModal-81NZOitV.js → QrScannerModal-CLSQcrlR.js} +1 -1
- package/src/assets/web-panel/assets/{QuickAsk-Dic2lCbJ.js → QuickAsk-VPa2WKQN.js} +1 -1
- package/src/assets/web-panel/assets/{Recommend-Dh9iwViE.js → Recommend-CGXR8jVU.js} +1 -1
- package/src/assets/web-panel/assets/{RemoteSession-Bq9VYEFy.js → RemoteSession-C_20YfMB.js} +2 -2
- package/src/assets/web-panel/assets/{Reputation-CxFZ-NbJ.js → Reputation-awZh68UV.js} +1 -1
- package/src/assets/web-panel/assets/{Row-BVSLcaX2.js → Row-Ctb4oiYN.js} +1 -1
- package/src/assets/web-panel/assets/{RssFeed-BbC-5DOH.js → RssFeed-D3sdjvUV.js} +3 -3
- package/src/assets/web-panel/assets/{Search-BfjZ1GCr.js → Search-C-zfA4kT.js} +1 -1
- package/src/assets/web-panel/assets/{Security-CVjhOV5r.js → Security-D9XlmHA3.js} +4 -4
- package/src/assets/web-panel/assets/{Services-D45u-Aqe.js → Services-C3UKnr41.js} +2 -2
- package/src/assets/web-panel/assets/{Skeleton-WkGoK4he.js → Skeleton-BQxagZfF.js} +1 -1
- package/src/assets/web-panel/assets/Skills-q6eb6KPZ.js +1 -0
- package/src/assets/web-panel/assets/{Sla-Bf4QTF3E.js → Sla-DveENvek.js} +1 -1
- package/src/assets/web-panel/assets/{SpeechSettings-DVpZdbMN.js → SpeechSettings-BFjXLNgF.js} +1 -1
- package/src/assets/web-panel/assets/{SyncSettings-DEEojoMS.js → SyncSettings-BpHgbaP9.js} +2 -2
- package/src/assets/web-panel/assets/Tasks-DvepRb8-.js +1 -0
- package/src/assets/web-panel/assets/{Templates-Bzl-9wY5.js → Templates-DEiaoyve.js} +1 -1
- package/src/assets/web-panel/assets/{Tenant-0khxUOB8.js → Tenant-ITg774nY.js} +1 -1
- package/src/assets/web-panel/assets/{Terminal-DWGYhAYU.js → Terminal-D3ZBcvnb.js} +2 -2
- package/src/assets/web-panel/assets/{TimelineRenderer-B0Y4LONc.js → TimelineRenderer-BsLU6JjU.js} +1 -1
- package/src/assets/web-panel/assets/{Tokens-DEE07SFh.js → Tokens-Cb5Pquc9.js} +1 -1
- package/src/assets/web-panel/assets/{Trigger-BM7xvA5z.js → Trigger-Dwfy-m9N.js} +1 -1
- package/src/assets/web-panel/assets/{Trust-Dv3ijvvZ.js → Trust-CnlSRGG0.js} +1 -1
- package/src/assets/web-panel/assets/{UkeySign-B1-enmMt.js → UkeySign-Y4TlvKVo.js} +1 -1
- package/src/assets/web-panel/assets/{VideoEditing-DYiIPByd.js → VideoEditing-BpKLtTTO.js} +1 -1
- package/src/assets/web-panel/assets/{Wallet-D-y374BQ.js → Wallet-LLBzIq8x.js} +4 -4
- package/src/assets/web-panel/assets/{WebAuthn-HBDjcUhi.js → WebAuthn-BeSRiusP.js} +4 -4
- package/src/assets/web-panel/assets/{WorkflowEditor-sKn4qTID.js → WorkflowEditor-BK_l1tXO.js} +1 -1
- package/src/assets/web-panel/assets/{chat-TVYhaBXj.js → chat-DYd-X7Wg.js} +1 -1
- package/src/assets/web-panel/assets/{colors-DMADxY9v.js → colors-C9uip71j.js} +1 -1
- package/src/assets/web-panel/assets/{compact-item-OftcHpO_.js → compact-item-JBrfjUP6.js} +1 -1
- package/src/assets/web-panel/assets/{createContext-DW1zVUSN.js → createContext-D03fbuiq.js} +1 -1
- package/src/assets/web-panel/assets/devWarning-B8LQ8leS.js +1 -0
- package/src/assets/web-panel/assets/{hasIn-CaUathNp.js → hasIn-DLQOR6l-.js} +1 -1
- package/src/assets/web-panel/assets/{index-Cmdv6Dev.js → index-5YN7F5bO.js} +1 -1
- package/src/assets/web-panel/assets/{index-iDmgT2Dg.js → index-6GuLRpBQ.js} +1 -1
- package/src/assets/web-panel/assets/{index-77kgkUgY.js → index-B0X76LjX.js} +1 -1
- package/src/assets/web-panel/assets/{index-CM8W07sc.js → index-B46YcgsV.js} +1 -1
- package/src/assets/web-panel/assets/{index-C9JoaYSs.js → index-BNCdRmWf.js} +1 -1
- package/src/assets/web-panel/assets/{index-CpDtN0dl.js → index-BYv-LWdy.js} +1 -1
- package/src/assets/web-panel/assets/{index-CZXYI5LU.js → index-Ba-Ps_AJ.js} +1 -1
- package/src/assets/web-panel/assets/{index-DWVZ3T0t.js → index-BcBZwlnG.js} +1 -1
- package/src/assets/web-panel/assets/{index--5UvwqH_.js → index-BdH9l8wl.js} +1 -1
- package/src/assets/web-panel/assets/{index-BBNg08cD.js → index-BfOs_bmg.js} +3 -3
- package/src/assets/web-panel/assets/index-Bh8BPtqR.js +1 -0
- package/src/assets/web-panel/assets/{index-s-EnkUCn.js → index-BnQgRjsm.js} +1 -1
- package/src/assets/web-panel/assets/{index-Lr0MO-GU.js → index-BpYKLrUT.js} +1 -1
- package/src/assets/web-panel/assets/{index-B-19mFhn.js → index-BuNFCZCx.js} +1 -1
- package/src/assets/web-panel/assets/{index-CeCIYYG7.js → index-ByHO3SqZ.js} +1 -1
- package/src/assets/web-panel/assets/{index-hXq7QRA_.js → index-C2zmOsyD.js} +1 -1
- package/src/assets/web-panel/assets/{index-8YelceUU.js → index-CChQBM1d.js} +1 -1
- package/src/assets/web-panel/assets/{index-B52Ztt8Q.js → index-CChaISMb.js} +1 -1
- package/src/assets/web-panel/assets/{index-DKjqFpYa.js → index-CILVyK3b.js} +1 -1
- package/src/assets/web-panel/assets/{index-DAfT3EMd.js → index-CL0ixCxk.js} +1 -1
- package/src/assets/web-panel/assets/{index-sm1sGIxW.js → index-CS63r8h3.js} +1 -1
- package/src/assets/web-panel/assets/{index-DHi634g9.js → index-CVZWiUE_.js} +1 -1
- package/src/assets/web-panel/assets/{index-BEzLLVYd.js → index-Ce0Bf1YF.js} +1 -1
- package/src/assets/web-panel/assets/index-CeVrHLzZ.js +1 -0
- package/src/assets/web-panel/assets/{index-pSVCBsG4.js → index-Ck17i0OD.js} +1 -1
- package/src/assets/web-panel/assets/{index-GUKz4Pv9.js → index-Cpn19c9k.js} +1 -1
- package/src/assets/web-panel/assets/{index-CKNdnJRo.js → index-CqWk1FLG.js} +1 -1
- package/src/assets/web-panel/assets/{index-Bg-7FpaL.js → index-CwoDpKzW.js} +1 -1
- package/src/assets/web-panel/assets/{index-DYwwUKDg.js → index-D-1SqEpQ.js} +1 -1
- package/src/assets/web-panel/assets/{index-DZdT8nio.js → index-D4UY5Z60.js} +1 -1
- package/src/assets/web-panel/assets/{index-BvRw4Fna.js → index-D8KvuDz0.js} +1 -1
- package/src/assets/web-panel/assets/{index-kdMl_0zL.js → index-DNMAAUVk.js} +1 -1
- package/src/assets/web-panel/assets/{index-CK-p7Hji.js → index-DYLZY4uh.js} +1 -1
- package/src/assets/web-panel/assets/{index-DXcqvWBp.js → index-DaokIHt3.js} +1 -1
- package/src/assets/web-panel/assets/{index-BFVbDpqg.js → index-Q7mmL6w4.js} +1 -1
- package/src/assets/web-panel/assets/{index-BJ1PjRY3.js → index-SO6lgMg0.js} +1 -1
- package/src/assets/web-panel/assets/{index-BSp1Ofvx.js → index-iahNhZwm.js} +1 -1
- package/src/assets/web-panel/assets/{index-BupSWDcl.js → index-l08afIbV.js} +1 -1
- package/src/assets/web-panel/assets/{index-D63QVAiJ.js → index-rIxxfdTN.js} +1 -1
- package/src/assets/web-panel/assets/{initDefaultProps-DdcKTlQR.js → initDefaultProps-CG9z1c6w.js} +1 -1
- package/src/assets/web-panel/assets/{motion-CL-hTBQj.js → motion-B1Ky7Zff.js} +1 -1
- package/src/assets/web-panel/assets/{move-qYSAkxNG.js → move-DME8X2P1.js} +1 -1
- package/src/assets/web-panel/assets/{mtc-parser-ZwRSZtRP.js → mtc-parser-cuJYSWB7.js} +1 -1
- package/src/assets/web-panel/assets/{omit-Bld-8ftI.js → omit-UI_EE0uZ.js} +1 -1
- package/src/assets/web-panel/assets/{pickAttrs-DGHs-a9Z.js → pickAttrs-BIoE_Z_V.js} +1 -1
- package/src/assets/web-panel/assets/{placementArrow-DRQPMyI5.js → placementArrow-B48-9HKN.js} +1 -1
- package/src/assets/web-panel/assets/{responsiveObserve-C5MJG_Yo.js → responsiveObserve-D7x_GDgD.js} +1 -1
- package/src/assets/web-panel/assets/{slide-VZ-fpZCD.js → slide-DjzC5_7m.js} +1 -1
- package/src/assets/web-panel/assets/{statusUtils-9ocfCyHk.js → statusUtils-C6BIymhh.js} +1 -1
- package/src/assets/web-panel/assets/{styleChecker-B6QAwAN5.js → styleChecker-B4dGrdD9.js} +1 -1
- package/src/assets/web-panel/assets/{useFlexGapSupport-Bq1twor3.js → useFlexGapSupport-Bken4aNE.js} +1 -1
- package/src/assets/web-panel/assets/{useFs-DKZq96tz.js → useFs-BMlqECqv.js} +1 -1
- package/src/assets/web-panel/assets/{usePersonalDataHub-D0RmRVXf.js → usePersonalDataHub-DLdrfmMa.js} +1 -1
- package/src/assets/web-panel/assets/{vnode-D6kEj_tt.js → vnode-CKJQmxa0.js} +1 -1
- package/src/assets/web-panel/assets/{zoom-2yfasoQf.js → zoom-CaZunuau.js} +1 -1
- package/src/assets/web-panel/index.html +1 -1
- package/src/auth/npm-auth.js +30 -5
- package/src/commands/agenda.js +83 -5
- package/src/commands/agent.js +42 -4
- package/src/commands/background-session.js +11 -4
- package/src/commands/batch.js +79 -27
- package/src/commands/changelog.js +15 -4
- package/src/commands/config.js +70 -5
- package/src/commands/context.js +36 -2
- package/src/commands/eval.js +21 -6
- package/src/commands/hook.js +2 -2
- package/src/commands/hub.js +19 -1
- package/src/commands/loop.js +9 -2
- package/src/commands/memory.js +21 -6
- package/src/commands/permissions.js +57 -1
- package/src/commands/plugin.js +2 -0
- package/src/commands/review.js +23 -11
- package/src/commands/routine.js +31 -8
- package/src/commands/session.js +11 -3
- package/src/commands/skill.js +2 -0
- package/src/commands/statusline.js +3 -3
- package/src/commands/team.js +20 -7
- package/src/commands/update.js +65 -10
- package/src/data/changelog.json +293 -51
- package/src/gateways/terminal/PtyManager.js +8 -1
- package/src/gateways/ws/message-dispatcher.js +3 -0
- package/src/gateways/ws/session-protocol.js +26 -0
- package/src/gateways/ws/ws-agent-handler.js +107 -69
- package/src/gateways/ws/ws-server.js +74 -2
- package/src/harness/background-task-manager.js +18 -6
- package/src/harness/background-task-worker.js +11 -18
- package/src/harness/jsonl-session-store.js +13 -6
- package/src/harness/mcp-client.js +195 -2
- package/src/harness/worktree-isolator.js +18 -21
- package/src/lib/__tests__/personal-data-hub-aichat-wizard.test.js +15 -0
- package/src/lib/agent-coordinator.js +4 -0
- package/src/lib/agent-core.js +5 -0
- package/src/lib/agent-ipc-bus.js +44 -5
- package/src/lib/agent-sandbox.js +16 -2
- package/src/lib/agent-schedule-store.js +55 -0
- package/src/lib/agent-team/team-worktree.js +28 -6
- package/src/lib/agent-tool-admission.js +104 -0
- package/src/lib/agent-worktree.js +20 -19
- package/src/lib/api-key-helper.js +10 -2
- package/src/lib/async-hook-supervisor.cjs +135 -15
- package/src/lib/async-hook-supervisor.js +47 -0
- package/src/lib/background-agent-supervisor.js +35 -12
- package/src/lib/background-task-manager.js +5 -1
- package/src/lib/changelog.js +76 -11
- package/src/lib/channels/channel-manager.js +6 -0
- package/src/lib/channels/telegram-channel.js +11 -1
- package/src/lib/channels/webhook-channel.js +15 -3
- package/src/lib/checkpoint-store.js +10 -2
- package/src/lib/chrome-connector.js +6 -2
- package/src/lib/claude-code-bridge.js +24 -8
- package/src/lib/cli-anything-bridge.js +82 -25
- package/src/lib/cloud/bundle.js +12 -2
- package/src/lib/code-review.js +32 -8
- package/src/lib/computer-use/control-backend.js +18 -3
- package/src/lib/context-breakdown.js +46 -0
- package/src/lib/context-source-ledger.js +43 -0
- package/src/lib/diff-review-follow-up.js +154 -0
- package/src/lib/doctor-checkup.js +18 -6
- package/src/lib/downloader.js +17 -3
- package/src/lib/ensure-utf8.js +11 -3
- package/src/lib/eval/tasks.js +25 -31
- package/src/lib/event-runtime-producer.js +58 -0
- package/src/lib/event-runtime-store.js +354 -0
- package/src/lib/event-runtime-worker.js +109 -0
- package/src/lib/execution-backend.js +72 -21
- package/src/lib/git-integration.js +19 -4
- package/src/lib/hook-manager.js +6 -15
- package/src/lib/hook-runner.cjs +88 -8
- package/src/lib/hook-runner.js +55 -0
- package/src/lib/hooks-v2-producers.js +15 -0
- package/src/lib/hooks-v2-runtime.js +70 -21
- package/src/lib/host-adb-bridge.js +129 -24
- package/src/lib/ide-context.js +128 -1
- package/src/lib/interaction-adapter.js +39 -0
- package/src/lib/json-schema-validate.js +190 -36
- package/src/lib/lan-pairing-preflight.js +13 -2
- package/src/lib/lsp/__tests__/benchmark.test.js +61 -0
- package/src/lib/lsp/__tests__/lsp-client.test.js +6 -1
- package/src/lib/lsp/__tests__/lsp-server-registry.test.js +18 -0
- package/src/lib/lsp/benchmark.js +20 -4
- package/src/lib/lsp/lsp-client.js +22 -3
- package/src/lib/lsp/lsp-manager.js +4 -0
- package/src/lib/lsp/lsp-server-registry.js +11 -2
- package/src/lib/mcp-oauth.js +8 -2
- package/src/lib/npm-invocation.js +29 -0
- package/src/lib/orchestrator.js +8 -2
- package/src/lib/packer/pack-update-applier.js +14 -2
- package/src/lib/packer/pkg-runner.js +13 -2
- package/src/lib/packer/precheck.js +33 -16
- package/src/lib/packer/smoke-runner.js +18 -5
- package/src/lib/packer/web-panel-builder.js +16 -2
- package/src/lib/paths.js +1 -1
- package/src/lib/permission-rules.cjs +5 -1
- package/src/lib/personal-data-hub-aichat-wizard.js +22 -6
- package/src/lib/personal-data-hub-wiring.js +27 -3
- package/src/lib/plan-mode.js +204 -11
- package/src/lib/plugin-monitor-supervisor.js +48 -6
- package/src/lib/plugin-runtime/bin.js +45 -0
- package/src/lib/plugin-runtime/hooks.js +14 -1
- package/src/lib/plugin-runtime/install.js +11 -3
- package/src/lib/plugin-runtime/lsp.js +3 -0
- package/src/lib/plugin-runtime/mcp.js +8 -1
- package/src/lib/plugin-runtime/monitors.js +4 -0
- package/src/lib/plugin-runtime/plugin-options.js +74 -7
- package/src/lib/plugin-runtime/signature.js +45 -0
- package/src/lib/pr-create.js +21 -8
- package/src/lib/pr-link-ledger.js +15 -3
- package/src/lib/process-execution-broker/credential-agent.js +23 -3
- package/src/lib/process-execution-broker/index.js +315 -38
- package/src/lib/process-execution-broker/patch-child-process.js +2 -3
- package/src/lib/process-manager.js +18 -3
- package/src/lib/publish-workspace.js +14 -6
- package/src/lib/repl-bang-memorize.js +10 -2
- package/src/lib/repl-goal.js +19 -2
- package/src/lib/secret-store.js +159 -0
- package/src/lib/service-manager.js +64 -29
- package/src/lib/settings-hook-events.cjs +74 -9
- package/src/lib/settings-hook-events.js +20 -0
- package/src/lib/settings-hooks.cjs +4 -0
- package/src/lib/side-effect-ledger.js +22 -0
- package/src/lib/skill-packs/generator.js +18 -9
- package/src/lib/skill-process-broker.js +71 -0
- package/src/lib/slash-commands.js +10 -2
- package/src/lib/status-line.cjs +28 -7
- package/src/lib/status-line.js +33 -0
- package/src/lib/sub-agent-context.js +5 -0
- package/src/lib/sub-agent-profiles.js +4 -0
- package/src/lib/turn-context.js +14 -8
- package/src/lib/unattended-action-policy.js +83 -0
- package/src/lib/update-notice.js +6 -2
- package/src/lib/with-file-lock.js +7 -0
- package/src/lib/ws-server.js +1 -0
- package/src/repl/agent-repl.js +60 -23
- package/src/repl/clipboard-copy.js +8 -2
- package/src/repl/pr-comments.js +30 -7
- package/src/runtime/agent-core.js +554 -118
- package/src/runtime/agent-runtime.js +1 -0
- package/src/runtime/coding-agent-contract-shared.cjs +52 -0
- package/src/runtime/coding-agent-policy.cjs +20 -0
- package/src/runtime/diagnostics.js +73 -8
- package/src/runtime/headless-runner.js +88 -10
- package/src/runtime/headless-stream.js +343 -21
- package/src/runtime/mcp-config.js +16 -1
- package/src/runtime/session-slash-commands.js +506 -0
- package/src/skills/video-editing/extractors/audio-extractor.js +13 -5
- package/src/skills/video-editing/extractors/video-extractor.js +13 -3
- package/src/skills/video-editing/media-process.js +20 -0
- package/src/skills/video-editing/render/audio-mix.js +13 -3
- package/src/skills/video-editing/render/ffmpeg-concat.js +7 -2
- package/src/skills/video-editing/render/ffmpeg-extract.js +7 -2
- package/src/workers/background-agent-worker.js +6 -2
- package/src/assets/web-panel/assets/ChatBubbleRenderer-Ci97vNTs.js +0 -1
- package/src/assets/web-panel/assets/Providers-zZRhNtSu.js +0 -1
- package/src/assets/web-panel/assets/Skills-D_jvQZcj.js +0 -1
- package/src/assets/web-panel/assets/Tasks-DFwxpLIk.js +0 -1
- package/src/assets/web-panel/assets/devWarning-CLOk6rdE.js +0 -1
- package/src/assets/web-panel/assets/index-CSgUfMTM.js +0 -1
- package/src/assets/web-panel/assets/index-DliSZvAP.js +0 -1
package/src/repl/agent-repl.js
CHANGED
|
@@ -183,12 +183,12 @@ function persistRecentDenial(record, options = {}) {
|
|
|
183
183
|
* user's attention (e.g. waiting on a permission/risk confirmation). A hook can
|
|
184
184
|
* ring a bell / send a desktop notification. Best-effort, never blocks.
|
|
185
185
|
*/
|
|
186
|
-
async function _fireNotification(message, type = "info") {
|
|
186
|
+
async function _fireNotification(message, type = "info", session = null) {
|
|
187
187
|
// Fire settings.json observe hooks first (best-effort)
|
|
188
188
|
if (_settingsHooks) {
|
|
189
189
|
try {
|
|
190
190
|
const { runObserveHooks } =
|
|
191
|
-
await import("../lib/settings-hook-events.
|
|
191
|
+
await import("../lib/settings-hook-events.js");
|
|
192
192
|
runObserveHooks(
|
|
193
193
|
_settingsHooks,
|
|
194
194
|
"Notification",
|
|
@@ -196,7 +196,7 @@ async function _fireNotification(message, type = "info") {
|
|
|
196
196
|
message,
|
|
197
197
|
type,
|
|
198
198
|
cwd: process.cwd(),
|
|
199
|
-
session_id:
|
|
199
|
+
session_id: session?.sessionId || null,
|
|
200
200
|
},
|
|
201
201
|
{ cwd: process.cwd() },
|
|
202
202
|
);
|
|
@@ -205,10 +205,10 @@ async function _fireNotification(message, type = "info") {
|
|
|
205
205
|
}
|
|
206
206
|
}
|
|
207
207
|
// Fire database-registered Notification hooks (interceptable/suppressible)
|
|
208
|
-
if (
|
|
208
|
+
if (session) {
|
|
209
209
|
try {
|
|
210
210
|
const result = await fireNotification(_hookDb, message, {
|
|
211
|
-
session
|
|
211
|
+
session,
|
|
212
212
|
type,
|
|
213
213
|
});
|
|
214
214
|
if (result?.directive?.suppress) {
|
|
@@ -750,6 +750,8 @@ export async function startAgentRepl(options = {}) {
|
|
|
750
750
|
}
|
|
751
751
|
await _fireNotification(
|
|
752
752
|
`Permission needed: ${riskLevel || "medium"}-risk ${tool || "run_shell"}${args?.command ? " — " + args.command : ""}`,
|
|
753
|
+
"info",
|
|
754
|
+
_sessionHandle,
|
|
753
755
|
);
|
|
754
756
|
const local = askGateApprovalLocally({ tool, args, riskLevel });
|
|
755
757
|
if (!_remoteApproval?.bridge) return local.promise;
|
|
@@ -840,6 +842,8 @@ export async function startAgentRepl(options = {}) {
|
|
|
840
842
|
}
|
|
841
843
|
await _fireNotification(
|
|
842
844
|
`Permission needed: ${tool}${rule ? " (" + rule + ")" : ""}`,
|
|
845
|
+
"info",
|
|
846
|
+
_sessionHandle,
|
|
843
847
|
);
|
|
844
848
|
const local = askPermissionLocally({ tool, args, rule, reason });
|
|
845
849
|
if (!_remoteApproval?.bridge) return local.promise;
|
|
@@ -1142,7 +1146,7 @@ export async function startAgentRepl(options = {}) {
|
|
|
1142
1146
|
if (_settingsHooks && _loadedReplInstructions) {
|
|
1143
1147
|
try {
|
|
1144
1148
|
const { runInstructionsLoadedHooks } =
|
|
1145
|
-
await import("../lib/settings-hook-events.
|
|
1149
|
+
await import("../lib/settings-hook-events.js");
|
|
1146
1150
|
const ctx = runInstructionsLoadedHooks(_settingsHooks, {
|
|
1147
1151
|
files: _loadedReplInstructions.files,
|
|
1148
1152
|
cwd: process.cwd(),
|
|
@@ -1158,7 +1162,7 @@ export async function startAgentRepl(options = {}) {
|
|
|
1158
1162
|
if (_settingsHooks) {
|
|
1159
1163
|
try {
|
|
1160
1164
|
const { runSessionStartHooks } =
|
|
1161
|
-
await import("../lib/settings-hook-events.
|
|
1165
|
+
await import("../lib/settings-hook-events.js");
|
|
1162
1166
|
const ctx = runSessionStartHooks(_settingsHooks, {
|
|
1163
1167
|
source: "startup",
|
|
1164
1168
|
cwd: process.cwd(),
|
|
@@ -1466,7 +1470,7 @@ export async function startAgentRepl(options = {}) {
|
|
|
1466
1470
|
if (_settingsHooks && messages.some((m) => m.role !== "system")) {
|
|
1467
1471
|
try {
|
|
1468
1472
|
const { runObserveHooks } =
|
|
1469
|
-
await import("../lib/settings-hook-events.
|
|
1473
|
+
await import("../lib/settings-hook-events.js");
|
|
1470
1474
|
runObserveHooks(
|
|
1471
1475
|
_settingsHooks,
|
|
1472
1476
|
"SessionResume",
|
|
@@ -1762,6 +1766,41 @@ export async function startAgentRepl(options = {}) {
|
|
|
1762
1766
|
// "close" cleanup instead of a bare exit.
|
|
1763
1767
|
_replRl = rl;
|
|
1764
1768
|
|
|
1769
|
+
// MCP elicitation in the interactive REPL uses the same readline surface as
|
|
1770
|
+
// approvals, while MCPClient retains the protocol-level response shape.
|
|
1771
|
+
const mcpElicitationClients = [_adhocMcp?.mcpClient, _bundleMcpClient].filter(
|
|
1772
|
+
(client) => client?.setElicitationHandler,
|
|
1773
|
+
);
|
|
1774
|
+
for (const client of mcpElicitationClients) {
|
|
1775
|
+
client.setElicitationHandler(
|
|
1776
|
+
(request) =>
|
|
1777
|
+
new Promise((resolve) => {
|
|
1778
|
+
const label =
|
|
1779
|
+
request.message || "MCP server requests additional input";
|
|
1780
|
+
rl.question(
|
|
1781
|
+
chalk.yellow(`\n MCP [${request.server}] ${label}\n > `),
|
|
1782
|
+
(answer) => {
|
|
1783
|
+
const trimmed = String(answer || "").trim();
|
|
1784
|
+
if (!trimmed) {
|
|
1785
|
+
resolve({ action: "cancel" });
|
|
1786
|
+
} else {
|
|
1787
|
+
let content = { value: trimmed };
|
|
1788
|
+
try {
|
|
1789
|
+
const parsed = JSON.parse(trimmed);
|
|
1790
|
+
if (parsed && typeof parsed === "object") content = parsed;
|
|
1791
|
+
} catch {
|
|
1792
|
+
// Plain text remains a valid single-field elicitation answer.
|
|
1793
|
+
}
|
|
1794
|
+
resolve({ action: "accept", content });
|
|
1795
|
+
}
|
|
1796
|
+
rl.prompt();
|
|
1797
|
+
},
|
|
1798
|
+
);
|
|
1799
|
+
}),
|
|
1800
|
+
{ timeoutMs: options.mcpElicitationTimeoutMs },
|
|
1801
|
+
);
|
|
1802
|
+
}
|
|
1803
|
+
|
|
1765
1804
|
// Inbound channels (--channels, gap-2026-07-11 P0#5): external events enter
|
|
1766
1805
|
// this session as user turns. rl.emit("line") reuses the REPL's own input
|
|
1767
1806
|
// path, so an event landing mid-turn queues behind it (pending-lines), and
|
|
@@ -1864,7 +1903,7 @@ export async function startAgentRepl(options = {}) {
|
|
|
1864
1903
|
// turn — the session stays open, the current work is suspended. The
|
|
1865
1904
|
// keypress handler can't await, so fire observe-only fire-and-forget.
|
|
1866
1905
|
if (_settingsHooks) {
|
|
1867
|
-
import("../lib/settings-hook-events.
|
|
1906
|
+
import("../lib/settings-hook-events.js")
|
|
1868
1907
|
.then(({ runObserveHooks }) =>
|
|
1869
1908
|
runObserveHooks(
|
|
1870
1909
|
_settingsHooks,
|
|
@@ -2026,7 +2065,7 @@ export async function startAgentRepl(options = {}) {
|
|
|
2026
2065
|
const _costStore = newCostStore(); // running token spend for `/cost`
|
|
2027
2066
|
let _renderStatus = null;
|
|
2028
2067
|
try {
|
|
2029
|
-
const slm = await import("../lib/status-line.
|
|
2068
|
+
const slm = await import("../lib/status-line.js");
|
|
2030
2069
|
const _sl = slm.default || slm;
|
|
2031
2070
|
const _slCfg = _sl.loadStatusLineConfig({ cwd: process.cwd() });
|
|
2032
2071
|
_customStatus = !!_slCfg;
|
|
@@ -3121,12 +3160,12 @@ export async function startAgentRepl(options = {}) {
|
|
|
3121
3160
|
if (_settingsHooks && oldCwd !== newCwd) {
|
|
3122
3161
|
try {
|
|
3123
3162
|
const { runCwdChangedHooks, dispatchAsyncHooks } =
|
|
3124
|
-
await import("../lib/settings-hook-events.
|
|
3163
|
+
await import("../lib/settings-hook-events.js");
|
|
3125
3164
|
const payload = { oldCwd, newCwd, sessionId };
|
|
3126
3165
|
runCwdChangedHooks(_settingsHooks, payload);
|
|
3127
3166
|
if (!_asyncHookSupervisor) {
|
|
3128
3167
|
const { AsyncHookSupervisor } =
|
|
3129
|
-
await import("../lib/async-hook-supervisor.
|
|
3168
|
+
await import("../lib/async-hook-supervisor.js");
|
|
3130
3169
|
_asyncHookSupervisor = new AsyncHookSupervisor({
|
|
3131
3170
|
persistStats: true,
|
|
3132
3171
|
});
|
|
@@ -3707,7 +3746,7 @@ export async function startAgentRepl(options = {}) {
|
|
|
3707
3746
|
if (_settingsHooks) {
|
|
3708
3747
|
try {
|
|
3709
3748
|
const { runObserveHooks, dispatchAsyncHooks } =
|
|
3710
|
-
await import("../lib/settings-hook-events.
|
|
3749
|
+
await import("../lib/settings-hook-events.js");
|
|
3711
3750
|
const payload = {
|
|
3712
3751
|
session_id: sessionId || null,
|
|
3713
3752
|
source: "reload-plugins",
|
|
@@ -3715,7 +3754,7 @@ export async function startAgentRepl(options = {}) {
|
|
|
3715
3754
|
runObserveHooks(_settingsHooks, "ConfigChange", payload, { cwd });
|
|
3716
3755
|
if (!_asyncHookSupervisor) {
|
|
3717
3756
|
const { AsyncHookSupervisor } =
|
|
3718
|
-
await import("../lib/async-hook-supervisor.
|
|
3757
|
+
await import("../lib/async-hook-supervisor.js");
|
|
3719
3758
|
_asyncHookSupervisor = new AsyncHookSupervisor({
|
|
3720
3759
|
persistStats: true,
|
|
3721
3760
|
});
|
|
@@ -5067,7 +5106,7 @@ export async function startAgentRepl(options = {}) {
|
|
|
5067
5106
|
if (_settingsHooks) {
|
|
5068
5107
|
try {
|
|
5069
5108
|
const { runUserPromptSubmitHooks } =
|
|
5070
|
-
await import("../lib/settings-hook-events.
|
|
5109
|
+
await import("../lib/settings-hook-events.js");
|
|
5071
5110
|
const ups = runUserPromptSubmitHooks(_settingsHooks, {
|
|
5072
5111
|
prompt: userContent,
|
|
5073
5112
|
cwd: process.cwd(),
|
|
@@ -5090,10 +5129,10 @@ export async function startAgentRepl(options = {}) {
|
|
|
5090
5129
|
// turn without blocking it; its result/rewake surfaces on a later turn
|
|
5091
5130
|
// via the async-hook drain below. Lazily create the supervisor.
|
|
5092
5131
|
const { dispatchAsyncHooks } =
|
|
5093
|
-
await import("../lib/settings-hook-events.
|
|
5132
|
+
await import("../lib/settings-hook-events.js");
|
|
5094
5133
|
if (!_asyncHookSupervisor) {
|
|
5095
5134
|
const { AsyncHookSupervisor } =
|
|
5096
|
-
await import("../lib/async-hook-supervisor.
|
|
5135
|
+
await import("../lib/async-hook-supervisor.js");
|
|
5097
5136
|
_asyncHookSupervisor = new AsyncHookSupervisor({
|
|
5098
5137
|
persistStats: true,
|
|
5099
5138
|
});
|
|
@@ -5401,7 +5440,7 @@ export async function startAgentRepl(options = {}) {
|
|
|
5401
5440
|
// fire-and-forget; their results/rewakes drain into the next turn above.
|
|
5402
5441
|
if (_settingsHooks && !_asyncHookSupervisor) {
|
|
5403
5442
|
const { AsyncHookSupervisor } =
|
|
5404
|
-
await import("../lib/async-hook-supervisor.
|
|
5443
|
+
await import("../lib/async-hook-supervisor.js");
|
|
5405
5444
|
_asyncHookSupervisor = new AsyncHookSupervisor({ persistStats: true });
|
|
5406
5445
|
}
|
|
5407
5446
|
const {
|
|
@@ -5547,7 +5586,6 @@ export async function startAgentRepl(options = {}) {
|
|
|
5547
5586
|
try {
|
|
5548
5587
|
const rg = await import("../lib/repl-goal.js");
|
|
5549
5588
|
const fsMod = await import("node:fs");
|
|
5550
|
-
const cpMod = await import("node:child_process");
|
|
5551
5589
|
const judge = async (cond, { finalText }) => {
|
|
5552
5590
|
const { chatWithTools } = await import("../runtime/agent-core.js");
|
|
5553
5591
|
const { firstBalancedJson } =
|
|
@@ -5589,7 +5627,6 @@ export async function startAgentRepl(options = {}) {
|
|
|
5589
5627
|
response || "",
|
|
5590
5628
|
{
|
|
5591
5629
|
cwd: process.cwd(),
|
|
5592
|
-
spawnSync: cpMod.spawnSync,
|
|
5593
5630
|
existsSync: fsMod.existsSync,
|
|
5594
5631
|
judge,
|
|
5595
5632
|
},
|
|
@@ -5740,7 +5777,7 @@ export async function startAgentRepl(options = {}) {
|
|
|
5740
5777
|
if (_settingsHooks) {
|
|
5741
5778
|
try {
|
|
5742
5779
|
const { runObserveHooks, dispatchAsyncHooks } =
|
|
5743
|
-
await import("../lib/settings-hook-events.
|
|
5780
|
+
await import("../lib/settings-hook-events.js");
|
|
5744
5781
|
runObserveHooks(
|
|
5745
5782
|
_settingsHooks,
|
|
5746
5783
|
"Stop",
|
|
@@ -5749,7 +5786,7 @@ export async function startAgentRepl(options = {}) {
|
|
|
5749
5786
|
);
|
|
5750
5787
|
if (!_asyncHookSupervisor) {
|
|
5751
5788
|
const { AsyncHookSupervisor } =
|
|
5752
|
-
await import("../lib/async-hook-supervisor.
|
|
5789
|
+
await import("../lib/async-hook-supervisor.js");
|
|
5753
5790
|
_asyncHookSupervisor = new AsyncHookSupervisor({
|
|
5754
5791
|
persistStats: true,
|
|
5755
5792
|
});
|
|
@@ -5847,7 +5884,7 @@ export async function startAgentRepl(options = {}) {
|
|
|
5847
5884
|
if (_settingsHooks) {
|
|
5848
5885
|
try {
|
|
5849
5886
|
const { runObserveHooks } =
|
|
5850
|
-
await import("../lib/settings-hook-events.
|
|
5887
|
+
await import("../lib/settings-hook-events.js");
|
|
5851
5888
|
runObserveHooks(
|
|
5852
5889
|
_settingsHooks,
|
|
5853
5890
|
"SessionEnd",
|
|
@@ -4,7 +4,7 @@
|
|
|
4
4
|
* spawn wrapper. The pure parts are unit-tested; real clipboard I/O is
|
|
5
5
|
* environment-dependent and exercised through an injected spawnSync.
|
|
6
6
|
*/
|
|
7
|
-
import {
|
|
7
|
+
import { executionBroker } from "../lib/process-execution-broker/index.js";
|
|
8
8
|
|
|
9
9
|
/** Flatten a message's content (string | content-parts[]) to plain text. Pure. */
|
|
10
10
|
export function messageText(content) {
|
|
@@ -78,7 +78,9 @@ export function clipboardCommands(platform = process.platform) {
|
|
|
78
78
|
];
|
|
79
79
|
}
|
|
80
80
|
|
|
81
|
-
const _deps = {
|
|
81
|
+
const _deps = {
|
|
82
|
+
spawnSync: (...args) => executionBroker.spawnSync(...args),
|
|
83
|
+
};
|
|
82
84
|
|
|
83
85
|
/**
|
|
84
86
|
* Write text to the system clipboard, trying each platform candidate in order
|
|
@@ -96,6 +98,10 @@ export function copyToClipboard(text, { platform, spawnSync } = {}) {
|
|
|
96
98
|
input: text,
|
|
97
99
|
encoding: "utf-8",
|
|
98
100
|
windowsHide: true,
|
|
101
|
+
origin: "repl:clipboard-copy",
|
|
102
|
+
policy: "allow",
|
|
103
|
+
scope: "clipboard",
|
|
104
|
+
shell: false,
|
|
99
105
|
});
|
|
100
106
|
} catch (e) {
|
|
101
107
|
lastErr = e.message;
|
package/src/repl/pr-comments.js
CHANGED
|
@@ -9,15 +9,26 @@
|
|
|
9
9
|
* or a real repo. The REPL (agent-repl.js) wires expandPrComments into the
|
|
10
10
|
* same promptText seam that `/mcp__server__prompt` uses.
|
|
11
11
|
*/
|
|
12
|
-
import {
|
|
12
|
+
import { executionBroker } from "../lib/process-execution-broker/index.js";
|
|
13
|
+
|
|
14
|
+
export const _deps = {
|
|
15
|
+
execFile: (...args) => executionBroker.execFile(...args),
|
|
16
|
+
};
|
|
13
17
|
|
|
14
18
|
/** Default `gh` runner — resolves stdout, rejects with a friendly message. */
|
|
15
|
-
function defaultRunGh(args) {
|
|
19
|
+
function defaultRunGh(args, deps = _deps) {
|
|
16
20
|
return new Promise((resolve, reject) => {
|
|
17
|
-
execFile(
|
|
21
|
+
deps.execFile(
|
|
18
22
|
"gh",
|
|
19
23
|
args,
|
|
20
|
-
{
|
|
24
|
+
{
|
|
25
|
+
encoding: "utf-8",
|
|
26
|
+
maxBuffer: 16 * 1024 * 1024,
|
|
27
|
+
origin: "repl:pr-comments",
|
|
28
|
+
policy: "allow",
|
|
29
|
+
scope: "pr",
|
|
30
|
+
shell: false,
|
|
31
|
+
},
|
|
21
32
|
(err, stdout, stderr) => {
|
|
22
33
|
if (err) {
|
|
23
34
|
if (err.code === "ENOENT") {
|
|
@@ -125,7 +136,9 @@ export function formatPrComments(data) {
|
|
|
125
136
|
* @param {object} opts { pr?: number, repo?: string, deps?: { runGh } }
|
|
126
137
|
*/
|
|
127
138
|
export async function fetchPrComments({ pr = null, repo = null, deps } = {}) {
|
|
128
|
-
const
|
|
139
|
+
const runtimeDeps = { ..._deps, ...(deps || {}) };
|
|
140
|
+
const runGh =
|
|
141
|
+
runtimeDeps.runGh || ((args) => defaultRunGh(args, runtimeDeps));
|
|
129
142
|
const viewArgs = ["pr", "view"];
|
|
130
143
|
if (pr) viewArgs.push(String(pr));
|
|
131
144
|
if (repo) viewArgs.push("--repo", repo);
|
|
@@ -175,7 +188,12 @@ const PR_INSTRUCTION =
|
|
|
175
188
|
* Throws on fetch failure (the REPL surfaces it and skips the turn).
|
|
176
189
|
*/
|
|
177
190
|
export async function expandPrComments(line, { deps } = {}) {
|
|
178
|
-
if (
|
|
191
|
+
if (
|
|
192
|
+
!String(line || "")
|
|
193
|
+
.trim()
|
|
194
|
+
.startsWith("/pr-comments")
|
|
195
|
+
)
|
|
196
|
+
return null;
|
|
179
197
|
const { pr, repo } = parsePrCommentsArg(line);
|
|
180
198
|
const data = await fetchPrComments({ pr, repo, deps });
|
|
181
199
|
const block = formatPrComments(data);
|
|
@@ -183,5 +201,10 @@ export async function expandPrComments(line, { deps } = {}) {
|
|
|
183
201
|
(data.reviews?.length || 0) +
|
|
184
202
|
(data.conversation?.length || 0) +
|
|
185
203
|
(data.inline?.length || 0);
|
|
186
|
-
return {
|
|
204
|
+
return {
|
|
205
|
+
number: data.number,
|
|
206
|
+
count,
|
|
207
|
+
block,
|
|
208
|
+
text: `${PR_INSTRUCTION}\n\n${block}`,
|
|
209
|
+
};
|
|
187
210
|
}
|