@bitseek/claw 1.2.6 → 1.2.8
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/dist/{accounts-CCbfXe4Y.js → accounts-D5DQlttG.js} +7 -7
- package/dist/{accounts-C3iwoWUS.js → accounts-DKvlV3Tm.js} +1 -1
- package/dist/{accounts-ChjgDDok.js → accounts-jPPbCJns.js} +1 -1
- package/dist/{acp-cli-DIikR-tj.js → acp-cli-BZnPaFm3.js} +8 -8
- package/dist/{agent-scope-DHMu2mab.js → agent-scope-CiBV1K6b.js} +1 -1
- package/dist/{agents.config-BoNoGEQI.js → agents.config-DQBEXhzA.js} +2 -2
- package/dist/{api-key-rotation-CuHjsofV.js → api-key-rotation-j4O7qxMf.js} +1 -1
- package/dist/{audio-preflight-BClvbKMQ.js → audio-preflight-BkoTbTIH.js} +36 -36
- package/dist/{audio-transcription-runner-Dv-MCA8E.js → audio-transcription-runner-CF_UP4C7.js} +22 -22
- package/dist/{audit-BAGbgihO.js → audit-1YVlVmk7.js} +29 -29
- package/dist/{auth-B9WdgDjZ.js → auth-Co2g3d8d.js} +1 -1
- package/dist/{auth-choice-FFUrxk0-.js → auth-choice-BamWYpsc.js} +14 -14
- package/dist/{auth-choice-CTCXt7WB.js → auth-choice-CdsMUqKA.js} +12 -12
- package/dist/{auth-choice.apply-helpers-Dz2x-3CK.js → auth-choice.apply-helpers-CQLQ5Tuk.js} +1 -1
- package/dist/{auth-token-BPWVp11S.js → auth-token-BjVRLcvi.js} +1 -1
- package/dist/{bindings-C0k4wFy7.js → bindings-Ck6aotGf.js} +1 -1
- package/dist/{bonjour-discovery-DXvZeG8M.js → bonjour-discovery-CtUQb94i.js} +1 -1
- package/dist/{browser-cli-BwtSgIvC.js → browser-cli-CaBLM5A6.js} +12 -12
- package/dist/build-info.json +3 -3
- package/dist/{call-B9Vrcbed.js → call-BGZQEHL4.js} +10 -10
- package/dist/canvas-host/a2ui/.bundle.hash +1 -1
- package/dist/{channel-account-context-CeGx9Aq7.js → channel-account-context-C6rIxLzo.js} +5 -5
- package/dist/{channel-options-DmEaPgkZ.js → channel-options-Bnnem_wD.js} +3 -3
- package/dist/{channel-selection-BDdjozhi.js → channel-selection-TZJgoz5h.js} +1 -1
- package/dist/{channel-web-mFdbEE2o.js → channel-web-KY6EP9HT.js} +18 -18
- package/dist/{channels-cli-CCTczoJM.js → channels-cli-tJkvzsqO.js} +94 -94
- package/dist/{channels-status-issues-Dir7g-Pc.js → channels-status-issues-DeT1Znlx.js} +1 -1
- package/dist/{chrome-2gfHr1cU.js → chrome-DzGCPEQK.js} +4 -4
- package/dist/{clawbot-cli-BMGBnmny.js → clawbot-cli-Comysjn9.js} +5 -5
- package/dist/{cli-zsP2OqB6.js → cli-DOS1lPNs.js} +75 -75
- package/dist/{client-BoUhzGrS.js → client-B91adiXh.js} +2 -2
- package/dist/{command-registry-okzYatr9.js → command-registry-Keal8P25.js} +5 -5
- package/dist/{commands-npgZubp3.js → commands-C6OLhl3n.js} +1 -1
- package/dist/{commands-registry-B5jHbfUL.js → commands-registry-CVzTBX51.js} +3 -3
- package/dist/{completion-cli-BFxGdqak.js → completion-cli-BWcHEWr6.js} +2 -2
- package/dist/{completion-cli-Dm9dt8iw.js → completion-cli-B_pSnPVY.js} +12 -12
- package/dist/{config-cli-CJVYN-g-.js → config-cli-DZpbwWvz.js} +7 -7
- package/dist/{config-guard-1SsvFO9G.js → config-guard-9BjlFVZx.js} +17 -17
- package/dist/{config-validation-BJ6PNk8H.js → config-validation-BcxAhhcj.js} +3 -3
- package/dist/{configure-DMwHaNHJ.js → configure-CLMtWGiL.js} +17 -17
- package/dist/control-ui/assets/{index-CKSSOzJL.js → index-puDi2eTY.js} +2 -2
- package/dist/control-ui/assets/index-puDi2eTY.js.map +1 -0
- package/dist/control-ui/brand.png +0 -0
- package/dist/control-ui/index.html +4 -5
- package/dist/{control-ui-assets-DpInddpx.js → control-ui-assets-B_3g_YF0.js} +1 -1
- package/dist/{cron-cli-CyEcKgVG.js → cron-cli-C8kDGh6_.js} +12 -12
- package/dist/{daemon-cli-CB9c5SXP.js → daemon-cli-RKWFtF-K.js} +15 -15
- package/dist/{daemon-install-Bqjc3wky.js → daemon-install-DsJ0L8HP.js} +4 -4
- package/dist/{daemon-install-helpers-CGZBs-X3.js → daemon-install-helpers-CMWYg4_W.js} +11 -11
- package/dist/{dashboard-8HFxt9IY.js → dashboard-BhAYjl6n.js} +2 -2
- package/dist/{deliver-D4ugOkLr.js → deliver-Bn10XzRP.js} +7 -7
- package/dist/{devices-cli-Bp8AMOPE.js → devices-cli-DoJBheGs.js} +8 -8
- package/dist/{diagnostic-phUWJbF_.js → diagnostic-DRPetA8l.js} +1 -1
- package/dist/{diagnostics-D_AmByNE.js → diagnostics-BHQgZbuI.js} +5 -5
- package/dist/{directory-cli-Bt3I30_e.js → directory-cli-Brla3Idn.js} +8 -8
- package/dist/{dns-cli-DaTrsB61.js → dns-cli-rEvE1LG9.js} +5 -5
- package/dist/{dock-swzevZbj.js → dock-BXksV3sC.js} +4 -4
- package/dist/{docs-cli--2Qgcpvs.js → docs-cli-DtThi0Xf.js} +4 -4
- package/dist/{doctor-completion-wHIBxn-7.js → doctor-completion-leOuoRMt.js} +1 -1
- package/dist/{doctor-completion-UEYo4_U6.js → doctor-completion-sKCaOE5l.js} +2 -2
- package/dist/{doctor-config-flow-DKaeaH2u.js → doctor-config-flow-18ijj3KB.js} +15 -15
- package/dist/{enable-xlkWJvIn.js → enable-CJ75JA5u.js} +1 -1
- package/dist/entry.js +2 -2
- package/dist/{exec-approvals-allowlist-fG-NsL-O.js → exec-approvals-allowlist-CGVHz3PX.js} +1 -1
- package/dist/{exec-approvals-cli-r7jbe_Rj.js → exec-approvals-cli-DfcUJ9Sm.js} +16 -16
- package/dist/{exec-safe-bin-runtime-policy-B9kCrTY1.js → exec-safe-bin-runtime-policy-D7olAQMf.js} +2 -2
- package/dist/{fetch-guard-N12H9lEe.js → fetch-guard-D6eclxeP.js} +1 -1
- package/dist/{fs-safe-BGAE6eOQ.js → fs-safe-p5lyYI__.js} +24 -24
- package/dist/{gateway-cli-BFo0WvJx.js → gateway-cli-BlVNebTw.js} +15 -5
- package/dist/{gateway-cli-Bi6tzv7v.js → gateway-cli-jL3MSRHB.js} +174 -164
- package/dist/{gateway-rpc-BHBGSN7Z.js → gateway-rpc-CJVCek88.js} +1 -1
- package/dist/{health-DlFSsTw-.js → health-Du8dO3vn.js} +14 -14
- package/dist/{hooks-cli-CMLpJr6I.js → hooks-cli-DUIQuGjr.js} +83 -83
- package/dist/{hooks-status-inMD7sD-.js → hooks-status-ONaKEpUH.js} +1 -1
- package/dist/{image-BzR2twGI.js → image-B270IRGo.js} +5 -5
- package/dist/{image-ops-B6BeXmZU.js → image-ops-BAMcbVMS.js} +10 -10
- package/dist/index.js +85 -85
- package/dist/{inspect-BwbOLUun.js → inspect-C0e0Dmvg.js} +4 -4
- package/dist/{install-safe-path-DodF6oyk.js → install-safe-path-CSqVUjL8.js} +25 -25
- package/dist/{installs-8bzJi35e.js → installs-BXOZ3DXs.js} +9 -9
- package/dist/{ipv4-BY_PmkpX.js → ipv4-Bk-doiEE.js} +1 -1
- package/dist/{ir-vGBxQkIg.js → ir-BGgl4f9u.js} +6 -6
- package/dist/{issue-format-B4oxePhU.js → issue-format-rk9Vpcxd.js} +1 -1
- package/dist/{json-files-C7p5SEie.js → json-files-bJqSYqgg.js} +8 -8
- package/dist/{lifecycle-core-C5a4clqu.js → lifecycle-core-Bqse41aA.js} +5 -5
- package/dist/{local-roots-Dcc5UeD8.js → local-roots-jW0nhxVT.js} +3 -3
- package/dist/{login-BM9p9nig.js → login-B2B75WGK.js} +3 -3
- package/dist/{login-qr-CB4JWkHM.js → login-qr-YjUycQZT.js} +6 -6
- package/dist/{logs-cli-DGdXLEv-.js → logs-cli-Dyid6hUQ.js} +9 -9
- package/dist/{manager-X8AF3rQJ.js → manager-C9rftBaE.js} +14 -14
- package/dist/{manifest-registry-HNrtHxxI.js → manifest-registry-B_U2pKBU.js} +1 -1
- package/dist/{markdown-tables-XmfG1bwr.js → markdown-tables-B5l_33qL.js} +1 -1
- package/dist/{memory-cli-87nxADqy.js → memory-cli-o3L9NN74.js} +12 -12
- package/dist/{model-CESXYutI.js → model-FnrgCVyS.js} +2 -2
- package/dist/{model-catalog-DUHxH2xb.js → model-catalog-CjA5pRJF.js} +3 -3
- package/dist/{model-picker-D705WMPf.js → model-picker-CMgjcqV_.js} +4 -4
- package/dist/{model-selection-DCo8MhsE.js → model-selection-xdfZxwgB.js} +16 -16
- package/dist/{models-cli-9x2mp4Ac.js → models-cli-CHUbcM_y.js} +85 -85
- package/dist/{models-config-Bgpjcu8R.js → models-config-Do1Ur_ov.js} +6 -6
- package/dist/{node-cli-DJnihsNr.js → node-cli-DYOdgLUu.js} +33 -33
- package/dist/{node-command-policy-BiPTB8BK.js → node-command-policy-BKUs_pS2.js} +1 -1
- package/dist/{node-service-CfKJ5oC1.js → node-service-6W3vqgVv.js} +1 -1
- package/dist/{nodes-cli-4kBrEEti.js → nodes-cli-CQzck2kc.js} +16 -16
- package/dist/{nodes-screen-FWjD2j3v.js → nodes-screen-Dptoharj.js} +7 -7
- package/dist/{npm-pack-install-CXheGnb0.js → npm-pack-install-Byr0kgft.js} +18 -18
- package/dist/{npm-resolution-DIr_TibO.js → npm-resolution-Dv7nYiaP.js} +5 -5
- package/dist/{onboard-B_MoYnrn.js → onboard-BCcjGKBR.js} +1 -1
- package/dist/{onboard-DEFQu6dU.js → onboard-KHObANUh.js} +6 -6
- package/dist/{onboard-channels-BuG5-e60.js → onboard-channels-CRpmgX82.js} +20 -20
- package/dist/{onboard-custom-HI7NPx1u.js → onboard-custom-Bow6lZPm.js} +3 -3
- package/dist/{onboard-custom.shared-SWx67Er2.js → onboard-custom.shared-CBRRhb95.js} +2 -2
- package/dist/{onboard-helpers-Jc1-4LBc.js → onboard-helpers-B1AEo6oL.js} +11 -11
- package/dist/{onboard-hooks-DFjIpeE_.js → onboard-hooks-CtxRk6l_.js} +4 -4
- package/dist/{onboard-remote-BLAyUeAO.js → onboard-remote-DmHpLoWf.js} +3 -3
- package/dist/{onboard-skills--XkA2Jj4.js → onboard-skills-DwpZY5tZ.js} +4 -4
- package/dist/{onboarding-CSnr51pR.js → onboarding-BTXvw1Ro.js} +1 -1
- package/dist/{onboarding-BQ2WB7tp.js → onboarding-DQNTd5J7.js} +13 -13
- package/dist/{onboarding.finalize-DAbr5Ar8.js → onboarding.finalize-CHYENeNO.js} +87 -87
- package/dist/{onboarding.finalize-BlMlIFRW.js → onboarding.finalize-D0qfP3rB.js} +4 -4
- package/dist/{onboarding.gateway-config-CMKjEPRA.js → onboarding.gateway-config-wXH6gE7c.js} +18 -18
- package/dist/{openai-model-default-BTNz1OzV.js → openai-model-default-Q7Hmy0eQ.js} +2 -2
- package/dist/{outbound-Bf7VAx0-.js → outbound-DlVJWa4u.js} +4 -4
- package/dist/{outbound-attachment-Df5o7JIG.js → outbound-attachment-CZh4VjhT.js} +2 -2
- package/dist/{pairing-cli-CA7Dxs-g.js → pairing-cli-DAMLvDcA.js} +9 -9
- package/dist/{pairing-labels-BBti3jJg.js → pairing-labels-Cl7ROILg.js} +1 -1
- package/dist/{pairing-store-DY0yrkuM.js → pairing-store-DdZ0xMD7.js} +3 -3
- package/dist/{path-alias-guards-BNzjbOwM.js → path-alias-guards-DWh6tSaP.js} +3 -3
- package/dist/{path-safety-dmCI2tpN.js → path-safety-COhgvniC.js} +1 -1
- package/dist/{paths-BZfURxkW.js → paths-AxolTUEH.js} +9 -9
- package/dist/{pi-embedded-helpers-D3nc5XJW.js → pi-embedded-helpers-ZTn-T7tW.js} +6 -6
- package/dist/{pi-model-discovery-BSytrsu4.js → pi-model-discovery-DVhDvAnA.js} +1 -1
- package/dist/{pi-tools.policy-Dwsq-Yaf.js → pi-tools.policy-eyXj0EY5.js} +5 -5
- package/dist/{plugin-auto-enable-4zXn-eVS.js → plugin-auto-enable-D1WySsnE.js} +3 -3
- package/dist/{plugin-registry-DsZTkNKu.js → plugin-registry-TOEmbMc4.js} +3 -3
- package/dist/{plugins-Ce8ThYGQ.js → plugins-CKWxMohB.js} +2 -2
- package/dist/{plugins-cli-DxFh5OQi.js → plugins-cli-Clo_uyvq.js} +85 -85
- package/dist/{ports-wtEwdqsX.js → ports-BL-FP2jP.js} +1 -1
- package/dist/{ports-DXMCFRgn.js → ports-DppAHKM-.js} +2 -2
- package/dist/{program-DnjsZxiJ.js → program-BI6W1Gll.js} +2 -2
- package/dist/{program-context-36wFBslW.js → program-context-D2D7wH7Q.js} +43 -43
- package/dist/{prompt-select-styled-CJt-zhnt.js → prompt-select-styled-CdBJ0FWT.js} +39 -39
- package/dist/{prompt-select-styled-BkpL6eKQ.js → prompt-select-styled-FGF3Su20.js} +1 -1
- package/dist/{provider-auth-helpers-DeJ105rb.js → provider-auth-helpers-D_akOb8A.js} +5 -5
- package/dist/{proxy-env-DhFUQlwP.js → proxy-env-ClbXa7vn.js} +1 -1
- package/dist/{push-apns-SIM2es-Y.js → push-apns-DvNRo3EQ.js} +5 -5
- package/dist/{pw-ai-BOQE6s45.js → pw-ai-D21rIJ2z.js} +15 -15
- package/dist/{qmd-manager-DVKj0i6T.js → qmd-manager-BD6lfN35.js} +20 -20
- package/dist/{qr-cli-Z4_Y6bva.js → qr-cli-BQGJJ5hp.js} +1 -1
- package/dist/{query-expansion-B9kneDbd.js → query-expansion-Dl85zpSb.js} +12 -12
- package/dist/{redact-snapshot-BI4Ryuhy.js → redact-snapshot-DCGL0k2M.js} +1 -1
- package/dist/{register.agent-Cd2LVcga.js → register.agent-DowGjvNc.js} +100 -100
- package/dist/register.configure-BZLa_c3k.js +174 -0
- package/dist/{register.init-BiLKNwSu.js → register.init-B1pIa3ys.js} +5 -88
- package/dist/{register.init-DpFUY5Ed.js → register.init-BrturXsS.js} +20 -103
- package/dist/{register.maintenance-DAU-mVIz.js → register.maintenance-DTx6vUDv.js} +97 -97
- package/dist/{register.maintenance-R4RCi4f3.js → register.maintenance-f8NCHf6u.js} +5 -5
- package/dist/{register.message-B0CI0Q4o.js → register.message-DE-eKss6.js} +76 -76
- package/dist/{register.onboard-BGhXUfbX.js → register.onboard-DmymXZNT.js} +18 -18
- package/dist/{register.onboard-Di7iClKl.js → register.onboard-tT7keiju.js} +2 -2
- package/dist/{register.setup-nlXy06aa.js → register.setup-D9AvFexw.js} +21 -21
- package/dist/{register.setup-Dm_dHAB-.js → register.setup-DjHaiqnA.js} +2 -2
- package/dist/{register.start-Dzss99ZY.js → register.start-BHASi8Um.js} +17 -17
- package/dist/{register.status-health-sessions-B4eNiGWS.js → register.status-health-sessions-Cbva8fTK.js} +89 -89
- package/dist/{register.subclis-1MobNhis.js → register.subclis-pmPhNoRB.js} +3 -3
- package/dist/{replies-k5K96_46.js → replies-B6SXcEs0.js} +1 -1
- package/dist/{reply-DQMWsIE2.js → reply-D8Yu6-Ie.js} +156 -156
- package/dist/{reply-prefix-aBvAQX6L.js → reply-prefix-BttpF8VB.js} +1 -1
- package/dist/{resolve-route-R565qQgt.js → resolve-route-Ck23oGqS.js} +2 -2
- package/dist/{rpc-CMyUzpcT.js → rpc-9jE_1PW0.js} +1 -1
- package/dist/{run-main-CFGtfsPd.js → run-main-D5C2p24j.js} +3 -3
- package/dist/{runtime-D64ACWoX.js → runtime-Rd7ooKB0.js} +2 -2
- package/dist/{sandbox-DH9YtUfB.js → sandbox-BKa5RrBl.js} +18 -18
- package/dist/{sandbox-cli-B1ThXy7C.js → sandbox-cli-BnpEc205.js} +26 -26
- package/dist/{secrets-cli-BEjJ3GP-.js → secrets-cli-CIxUNZyC.js} +10 -10
- package/dist/{security-cli-Zma5k5BZ.js → security-cli-BqOOeGxS.js} +43 -43
- package/dist/{send-NexNe2Wh.js → send-BntubUtK.js} +6 -6
- package/dist/{send-DmVTXBWW.js → send-ByUfPpKj.js} +11 -11
- package/dist/{send-CabiU1-J.js → send-Cua2kS5v.js} +6 -6
- package/dist/{send-BQVNhO4Q.js → send-DuNBSJln.js} +5 -5
- package/dist/{send-CFUSH9C-.js → send-SZBhACLn.js} +8 -8
- package/dist/{server-DQ7D-B-v.js → server-Ct0J5VXf.js} +19 -19
- package/dist/{server-context-Cr-Y4i6P.js → server-context-DWxmyV-0.js} +12 -12
- package/dist/{server-lifecycle-BVnXIEfI.js → server-lifecycle-B7aXKxY3.js} +2 -2
- package/dist/{server-middleware-zyvA9rl9.js → server-middleware-CO1brrgv.js} +1 -1
- package/dist/{server-node-events-oa4mOmsp.js → server-node-events-nakjzVDn.js} +76 -76
- package/dist/{service-BcFhE63y.js → service-DqxfCr8y.js} +15 -15
- package/dist/{session-Dl3x3d75.js → session-FOGqE7bj.js} +1 -1
- package/dist/{session-meta-C6MooccR.js → session-meta-C-ox3bdI.js} +1 -1
- package/dist/{sessions-sIaYsUyX.js → sessions-BpuJ64B0.js} +15 -15
- package/dist/{shared-sFrejcA4.js → shared-BmSv3K8N.js} +1 -1
- package/dist/{shared-DNcLp2mA.js → shared-CgFPGTLU.js} +3 -3
- package/dist/{skill-commands-C2_BOuyl.js → skill-commands-COl0HE54.js} +5 -5
- package/dist/{skill-scanner-DYkQAh0l.js → skill-scanner-CsmM5F4F.js} +6 -6
- package/dist/{skills-BXLKd7i5.js → skills-BeFcXCoN.js} +3 -3
- package/dist/{skills-cli-DrN4v5_m.js → skills-cli-D3ZteX5N.js} +5 -5
- package/dist/{skills-install-CSfh8nRm.js → skills-install-B_Vda3dM.js} +6 -6
- package/dist/{skills-status-C7Q6Ezbv.js → skills-status-BEq0_fOn.js} +1 -1
- package/dist/{status-rMgdZcE5.js → status-CQYA6EJN.js} +25 -25
- package/dist/{status.update-D4GfnNDI.js → status.update-HwSPC5ZX.js} +2 -2
- package/dist/{store-CRcBie8T.js → store-B-nkOSsv.js} +5 -5
- package/dist/{system-cli-Bscj57lL.js → system-cli-IYwpBiC6.js} +9 -9
- package/dist/{system-run-command-Cn5yQ2rv.js → system-run-command-C3OIMtEu.js} +1 -1
- package/dist/{systemd-BIfjzi-4.js → systemd-DJ5Red-Q.js} +9 -9
- package/dist/{systemd-hints-CgtHwBfD.js → systemd-hints-D40Qx3hg.js} +6 -6
- package/dist/{systemd-linger-0Vho6LMt.js → systemd-linger-BK6kig-o.js} +1 -1
- package/dist/{tables-C5n2nXbu.js → tables-C9_oCtRN.js} +1 -1
- package/dist/{tailnet-C8NwaQEp.js → tailnet-BYBKD8Kh.js} +1 -1
- package/dist/{target-errors-cerGxvCB.js → target-errors-B1cYmIjq.js} +4 -4
- package/dist/{tool-images-CgSADinH.js → tool-images-QWbHWc0F.js} +1 -1
- package/dist/{tui-DNT0WnU-.js → tui-Dd6DhgjX.js} +6 -6
- package/dist/{tui-cli-DTFq2wGK.js → tui-cli-C3PCazFC.js} +33 -33
- package/dist/{update-Mb6BH0o9.js → update-B1Dhhu_3.js} +3 -3
- package/dist/{update-cli-Dbb1EPi2.js → update-cli-C2EagLTi.js} +5 -5
- package/dist/{update-cli--qEz2_Eg.js → update-cli-DiT2fFEK.js} +105 -105
- package/dist/{update-runner-Dj_CAfd4.js → update-runner-DO6RodZW.js} +16 -16
- package/dist/web-DbdjX4Hg.js +126 -0
- package/dist/{webhooks-cli-uXE9EOwT.js → webhooks-cli-BFdw7BAP.js} +6 -6
- package/dist/{whatsapp-actions-DeX4x9sq.js → whatsapp-actions-CNoiLzRB.js} +19 -19
- package/dist/{with-timeout-C-EETHnf.js → with-timeout-tSH4Tex_.js} +3 -3
- package/dist/{workspace-TersEUYu.js → workspace-CRdln__H.js} +23 -23
- package/dist/{workspace-1nc7aTpg.js → workspace-dKMB109Q.js} +1 -1
- package/dist/{workspace-dirs-DxTFH1r3.js → workspace-dirs-DcAUEsSG.js} +1 -1
- package/dist/{ws-E9v842O2.js → ws-DKbBt0us.js} +2 -2
- package/dist/{wsl-Dg6XQcw5.js → wsl-yjQQ-PJd.js} +2 -2
- package/package.json +1 -1
- package/dist/control-ui/assets/index-CKSSOzJL.js.map +0 -1
- package/dist/register.configure-DGIWBQvN.js +0 -174
- package/dist/web-BQRkxG9u.js +0 -126
|
@@ -1,38 +1,38 @@
|
|
|
1
1
|
import "./paths-BYr-iJJ9.js";
|
|
2
2
|
import { f as isRich, p as theme } from "./globals-uLeGcRW1.js";
|
|
3
3
|
import "./utils-CP51tiAi.js";
|
|
4
|
-
import "./agent-scope-
|
|
4
|
+
import "./agent-scope-CiBV1K6b.js";
|
|
5
5
|
import { d as defaultRuntime } from "./subsystem-BT74-yyS.js";
|
|
6
|
-
import "./workspace-
|
|
6
|
+
import "./workspace-CRdln__H.js";
|
|
7
7
|
import "./logger-D04dg4Ex.js";
|
|
8
8
|
import "./exec-BdDcFm8M.js";
|
|
9
|
-
import "./model-selection-
|
|
9
|
+
import "./model-selection-xdfZxwgB.js";
|
|
10
10
|
import "./github-copilot-token-CVsUoC9m.js";
|
|
11
11
|
import "./boolean-BgXe2hyu.js";
|
|
12
12
|
import "./env-4r1Vlroz.js";
|
|
13
13
|
import "./host-env-security-BiAcoumI.js";
|
|
14
14
|
import "./env-vars-DM119fhK.js";
|
|
15
15
|
import "./registry-CUyWRciN.js";
|
|
16
|
-
import "./manifest-registry-
|
|
16
|
+
import "./manifest-registry-B_U2pKBU.js";
|
|
17
17
|
import "./message-channel-CKAn7Lf7.js";
|
|
18
|
-
import "./tailnet-
|
|
19
|
-
import "./ws-
|
|
20
|
-
import "./client-
|
|
21
|
-
import "./call-
|
|
18
|
+
import "./tailnet-BYBKD8Kh.js";
|
|
19
|
+
import "./ws-DKbBt0us.js";
|
|
20
|
+
import "./client-B91adiXh.js";
|
|
21
|
+
import "./call-BGZQEHL4.js";
|
|
22
22
|
import "./pairing-token-QppPqMJU.js";
|
|
23
23
|
import { n as formatTimeAgo } from "./format-relative-BjGzUS9-.js";
|
|
24
24
|
import { c as readExecApprovalsSnapshot, p as saveExecApprovals } from "./exec-approvals-C23wqMXV.js";
|
|
25
|
-
import "./exec-approvals-allowlist-
|
|
25
|
+
import "./exec-approvals-allowlist-CGVHz3PX.js";
|
|
26
26
|
import { t as formatDocsLink } from "./links-CM7pO4C5.js";
|
|
27
27
|
import "./progress-86COuAnG.js";
|
|
28
|
-
import { n as callGatewayFromCli } from "./gateway-rpc-
|
|
29
|
-
import "./systemd-
|
|
30
|
-
import "./service-
|
|
28
|
+
import { n as callGatewayFromCli } from "./gateway-rpc-CJVCek88.js";
|
|
29
|
+
import "./systemd-DJ5Red-Q.js";
|
|
30
|
+
import "./service-DqxfCr8y.js";
|
|
31
31
|
import { t as renderTable } from "./table-DZBPnHSy.js";
|
|
32
|
-
import { t as describeUnknownError } from "./shared-
|
|
33
|
-
import { a as resolveNodeId, r as nodesCallOpts } from "./rpc-
|
|
32
|
+
import { t as describeUnknownError } from "./shared-BmSv3K8N.js";
|
|
33
|
+
import { a as resolveNodeId, r as nodesCallOpts } from "./rpc-9jE_1PW0.js";
|
|
34
34
|
import JSON5 from "json5";
|
|
35
|
-
import
|
|
35
|
+
import fs from "node:fs/promises";
|
|
36
36
|
|
|
37
37
|
//#region src/cli/exec-approvals-cli.ts
|
|
38
38
|
async function readStdin() {
|
|
@@ -329,7 +329,7 @@ function registerExecApprovalsCli(program) {
|
|
|
329
329
|
if (!opts.file && !opts.stdin) exitWithError("Provide --file or --stdin.");
|
|
330
330
|
if (opts.file && opts.stdin) exitWithError("Use either --file or --stdin (not both).");
|
|
331
331
|
const { source, nodeId, targetLabel, baseHash } = await loadWritableSnapshotTarget(opts);
|
|
332
|
-
const raw = opts.stdin ? await readStdin() : await
|
|
332
|
+
const raw = opts.stdin ? await readStdin() : await fs.readFile(String(opts.file), "utf8");
|
|
333
333
|
let file;
|
|
334
334
|
try {
|
|
335
335
|
file = JSON5.parse(raw);
|
package/dist/{exec-safe-bin-runtime-policy-B9kCrTY1.js → exec-safe-bin-runtime-policy-D7olAQMf.js}
RENAMED
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
import { $n as getTrustedSafeBinDirs, Ar as resolveSafeBinProfiles, kr as normalizeSafeBinProfileFixtures, nr as normalizeTrustedSafeBinDirs, tr as listWritableExplicitTrustedSafeBinDirs } from "./model-selection-
|
|
2
|
-
import { i as resolveSafeBins } from "./exec-approvals-allowlist-
|
|
1
|
+
import { $n as getTrustedSafeBinDirs, Ar as resolveSafeBinProfiles, kr as normalizeSafeBinProfileFixtures, nr as normalizeTrustedSafeBinDirs, tr as listWritableExplicitTrustedSafeBinDirs } from "./model-selection-xdfZxwgB.js";
|
|
2
|
+
import { i as resolveSafeBins } from "./exec-approvals-allowlist-CGVHz3PX.js";
|
|
3
3
|
|
|
4
4
|
//#region src/infra/exec-safe-bin-runtime-policy.ts
|
|
5
5
|
const INTERPRETER_LIKE_SAFE_BINS = new Set([
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { i as logWarn } from "./logger-D04dg4Ex.js";
|
|
2
|
-
import { i as createPinnedDispatcher, n as SsrFBlockedError, r as closeDispatcher, s as resolvePinnedHostnameWithPolicy, t as hasProxyEnvConfigured } from "./proxy-env-
|
|
2
|
+
import { i as createPinnedDispatcher, n as SsrFBlockedError, r as closeDispatcher, s as resolvePinnedHostnameWithPolicy, t as hasProxyEnvConfigured } from "./proxy-env-ClbXa7vn.js";
|
|
3
3
|
import { t as bindAbortRelay } from "./fetch-timeout-DkT3EnRA.js";
|
|
4
4
|
import { EnvHttpProxyAgent } from "undici";
|
|
5
5
|
|
|
@@ -1,11 +1,11 @@
|
|
|
1
1
|
import { _ as expandHomePrefix } from "./paths-BYr-iJJ9.js";
|
|
2
|
-
import { A as isNotFoundPathError, M as isSymlinkOpenError, T as sameFileIdentity, j as isPathInside, k as hasNodeErrorCode } from "./workspace-
|
|
2
|
+
import { A as isNotFoundPathError, M as isSymlinkOpenError, T as sameFileIdentity, j as isPathInside, k as hasNodeErrorCode } from "./workspace-CRdln__H.js";
|
|
3
3
|
import { i as logWarn } from "./logger-D04dg4Ex.js";
|
|
4
|
-
import { n as assertNoPathAliasEscape } from "./path-alias-guards-
|
|
4
|
+
import { n as assertNoPathAliasEscape } from "./path-alias-guards-DWh6tSaP.js";
|
|
5
5
|
import { constants } from "node:fs";
|
|
6
6
|
import os from "node:os";
|
|
7
7
|
import path from "node:path";
|
|
8
|
-
import
|
|
8
|
+
import fs$1 from "node:fs/promises";
|
|
9
9
|
import { randomUUID } from "node:crypto";
|
|
10
10
|
import { pipeline } from "node:stream/promises";
|
|
11
11
|
|
|
@@ -25,19 +25,19 @@ const ensureTrailingSep = (value) => value.endsWith(path.sep) ? value : value +
|
|
|
25
25
|
async function expandRelativePathWithHome(relativePath) {
|
|
26
26
|
let home = process.env.HOME || process.env.USERPROFILE || os.homedir();
|
|
27
27
|
try {
|
|
28
|
-
home = await
|
|
28
|
+
home = await fs$1.realpath(home);
|
|
29
29
|
} catch {}
|
|
30
30
|
return expandHomePrefix(relativePath, { home });
|
|
31
31
|
}
|
|
32
32
|
async function openVerifiedLocalFile(filePath, options) {
|
|
33
33
|
try {
|
|
34
|
-
if ((await
|
|
34
|
+
if ((await fs$1.lstat(filePath)).isDirectory()) throw new SafeOpenError("not-file", "not a file");
|
|
35
35
|
} catch (err) {
|
|
36
36
|
if (err instanceof SafeOpenError) throw err;
|
|
37
37
|
}
|
|
38
38
|
let handle;
|
|
39
39
|
try {
|
|
40
|
-
handle = await
|
|
40
|
+
handle = await fs$1.open(filePath, OPEN_READ_FLAGS);
|
|
41
41
|
} catch (err) {
|
|
42
42
|
if (isNotFoundPathError(err)) throw new SafeOpenError("not-found", "file not found");
|
|
43
43
|
if (isSymlinkOpenError(err)) throw new SafeOpenError("symlink", "symlink open blocked", { cause: err });
|
|
@@ -45,13 +45,13 @@ async function openVerifiedLocalFile(filePath, options) {
|
|
|
45
45
|
throw err;
|
|
46
46
|
}
|
|
47
47
|
try {
|
|
48
|
-
const [stat, lstat] = await Promise.all([handle.stat(),
|
|
48
|
+
const [stat, lstat] = await Promise.all([handle.stat(), fs$1.lstat(filePath)]);
|
|
49
49
|
if (lstat.isSymbolicLink()) throw new SafeOpenError("symlink", "symlink not allowed");
|
|
50
50
|
if (!stat.isFile()) throw new SafeOpenError("not-file", "not a file");
|
|
51
51
|
if (options?.rejectHardlinks && stat.nlink > 1) throw new SafeOpenError("invalid-path", "hardlinked path not allowed");
|
|
52
52
|
if (!sameFileIdentity(stat, lstat)) throw new SafeOpenError("path-mismatch", "path changed during read");
|
|
53
|
-
const realPath = await
|
|
54
|
-
const realStat = await
|
|
53
|
+
const realPath = await fs$1.realpath(filePath);
|
|
54
|
+
const realStat = await fs$1.stat(realPath);
|
|
55
55
|
if (options?.rejectHardlinks && realStat.nlink > 1) throw new SafeOpenError("invalid-path", "hardlinked path not allowed");
|
|
56
56
|
if (!sameFileIdentity(stat, realStat)) throw new SafeOpenError("path-mismatch", "path mismatch");
|
|
57
57
|
return {
|
|
@@ -69,7 +69,7 @@ async function openVerifiedLocalFile(filePath, options) {
|
|
|
69
69
|
async function resolvePathWithinRoot(params) {
|
|
70
70
|
let rootReal;
|
|
71
71
|
try {
|
|
72
|
-
rootReal = await
|
|
72
|
+
rootReal = await fs$1.realpath(params.rootDir);
|
|
73
73
|
} catch (err) {
|
|
74
74
|
if (isNotFoundPathError(err)) throw new SafeOpenError("not-found", "root dir not found");
|
|
75
75
|
throw err;
|
|
@@ -170,7 +170,7 @@ function buildAtomicWriteTempPath(targetPath) {
|
|
|
170
170
|
return path.join(dir, `.${base}.${process.pid}.${randomUUID()}.tmp`);
|
|
171
171
|
}
|
|
172
172
|
async function writeTempFileForAtomicReplace(params) {
|
|
173
|
-
const tempHandle = await
|
|
173
|
+
const tempHandle = await fs$1.open(params.tempPath, OPEN_WRITE_CREATE_FLAGS, params.mode);
|
|
174
174
|
try {
|
|
175
175
|
if (typeof params.data === "string") await tempHandle.writeFile(params.data, params.encoding ?? "utf8");
|
|
176
176
|
else await tempHandle.writeFile(params.data);
|
|
@@ -180,7 +180,7 @@ async function writeTempFileForAtomicReplace(params) {
|
|
|
180
180
|
}
|
|
181
181
|
}
|
|
182
182
|
async function verifyAtomicWriteResult(params) {
|
|
183
|
-
const rootWithSep = ensureTrailingSep(await
|
|
183
|
+
const rootWithSep = ensureTrailingSep(await fs$1.realpath(params.rootDir));
|
|
184
184
|
const opened = await openVerifiedLocalFile(params.targetPath, { rejectHardlinks: true });
|
|
185
185
|
try {
|
|
186
186
|
if (!sameFileIdentity(opened.stat, params.expectedStat)) throw new SafeOpenError("path-mismatch", "path changed during write");
|
|
@@ -191,13 +191,13 @@ async function verifyAtomicWriteResult(params) {
|
|
|
191
191
|
}
|
|
192
192
|
async function resolveOpenedFileRealPathForHandle(handle, ioPath) {
|
|
193
193
|
try {
|
|
194
|
-
return await
|
|
194
|
+
return await fs$1.realpath(ioPath);
|
|
195
195
|
} catch (err) {
|
|
196
196
|
if (!isNotFoundPathError(err)) throw err;
|
|
197
197
|
}
|
|
198
198
|
const fdCandidates = process.platform === "linux" ? [`/proc/self/fd/${handle.fd}`, `/dev/fd/${handle.fd}`] : process.platform === "win32" ? [] : [`/dev/fd/${handle.fd}`];
|
|
199
199
|
for (const fdPath of fdCandidates) try {
|
|
200
|
-
return await
|
|
200
|
+
return await fs$1.realpath(fdPath);
|
|
201
201
|
} catch {}
|
|
202
202
|
throw new SafeOpenError("path-mismatch", "unable to resolve opened file path");
|
|
203
203
|
}
|
|
@@ -212,10 +212,10 @@ async function openWritableFileWithinRoot(params) {
|
|
|
212
212
|
} catch (err) {
|
|
213
213
|
throw new SafeOpenError("invalid-path", "path alias escape blocked", { cause: err });
|
|
214
214
|
}
|
|
215
|
-
if (params.mkdir !== false) await
|
|
215
|
+
if (params.mkdir !== false) await fs$1.mkdir(path.dirname(resolved), { recursive: true });
|
|
216
216
|
let ioPath = resolved;
|
|
217
217
|
try {
|
|
218
|
-
const resolvedRealPath = await
|
|
218
|
+
const resolvedRealPath = await fs$1.realpath(resolved);
|
|
219
219
|
if (!isPathInside(rootWithSep, resolvedRealPath)) throw new SafeOpenError("outside-workspace", "file is outside workspace root");
|
|
220
220
|
ioPath = resolvedRealPath;
|
|
221
221
|
} catch (err) {
|
|
@@ -227,10 +227,10 @@ async function openWritableFileWithinRoot(params) {
|
|
|
227
227
|
let createdForWrite = false;
|
|
228
228
|
try {
|
|
229
229
|
try {
|
|
230
|
-
handle = await
|
|
230
|
+
handle = await fs$1.open(ioPath, OPEN_WRITE_EXISTING_FLAGS, fileMode);
|
|
231
231
|
} catch (err) {
|
|
232
232
|
if (!isNotFoundPathError(err)) throw err;
|
|
233
|
-
handle = await
|
|
233
|
+
handle = await fs$1.open(ioPath, OPEN_WRITE_CREATE_FLAGS, fileMode);
|
|
234
234
|
createdForWrite = true;
|
|
235
235
|
}
|
|
236
236
|
} catch (err) {
|
|
@@ -244,7 +244,7 @@ async function openWritableFileWithinRoot(params) {
|
|
|
244
244
|
if (!stat.isFile()) throw new SafeOpenError("invalid-path", "path is not a regular file under root");
|
|
245
245
|
if (stat.nlink > 1) throw new SafeOpenError("invalid-path", "hardlinked path not allowed");
|
|
246
246
|
try {
|
|
247
|
-
const lstat = await
|
|
247
|
+
const lstat = await fs$1.lstat(ioPath);
|
|
248
248
|
if (lstat.isSymbolicLink() || !lstat.isFile()) throw new SafeOpenError("invalid-path", "path is not a regular file under root");
|
|
249
249
|
if (!sameFileIdentity(stat, lstat)) throw new SafeOpenError("path-mismatch", "path changed during write");
|
|
250
250
|
} catch (err) {
|
|
@@ -252,7 +252,7 @@ async function openWritableFileWithinRoot(params) {
|
|
|
252
252
|
}
|
|
253
253
|
const realPath = await resolveOpenedFileRealPathForHandle(handle, ioPath);
|
|
254
254
|
openedRealPath = realPath;
|
|
255
|
-
const realStat = await
|
|
255
|
+
const realStat = await fs$1.stat(realPath);
|
|
256
256
|
if (!sameFileIdentity(stat, realStat)) throw new SafeOpenError("path-mismatch", "path mismatch");
|
|
257
257
|
if (realStat.nlink > 1) throw new SafeOpenError("invalid-path", "hardlinked path not allowed");
|
|
258
258
|
if (!isPathInside(rootWithSep, realPath)) throw new SafeOpenError("outside-workspace", "file is outside workspace root");
|
|
@@ -267,7 +267,7 @@ async function openWritableFileWithinRoot(params) {
|
|
|
267
267
|
const cleanupCreatedPath = createdForWrite && err instanceof SafeOpenError;
|
|
268
268
|
const cleanupPath = openedRealPath ?? ioPath;
|
|
269
269
|
await handle.close().catch(() => {});
|
|
270
|
-
if (cleanupCreatedPath) await
|
|
270
|
+
if (cleanupCreatedPath) await fs$1.rm(cleanupPath, { force: true }).catch(() => {});
|
|
271
271
|
throw err;
|
|
272
272
|
}
|
|
273
273
|
}
|
|
@@ -290,7 +290,7 @@ async function writeFileWithinRoot(params) {
|
|
|
290
290
|
encoding: params.encoding,
|
|
291
291
|
mode: targetMode || 384
|
|
292
292
|
});
|
|
293
|
-
await
|
|
293
|
+
await fs$1.rename(tempPath, destinationPath);
|
|
294
294
|
tempPath = null;
|
|
295
295
|
try {
|
|
296
296
|
await verifyAtomicWriteResult({
|
|
@@ -303,7 +303,7 @@ async function writeFileWithinRoot(params) {
|
|
|
303
303
|
throw err;
|
|
304
304
|
}
|
|
305
305
|
} finally {
|
|
306
|
-
if (tempPath) await
|
|
306
|
+
if (tempPath) await fs$1.rm(tempPath, { force: true }).catch(() => {});
|
|
307
307
|
}
|
|
308
308
|
}
|
|
309
309
|
async function copyFileWithinRoot(params) {
|
|
@@ -331,7 +331,7 @@ async function copyFileWithinRoot(params) {
|
|
|
331
331
|
});
|
|
332
332
|
await pipeline(sourceStream, targetStream);
|
|
333
333
|
} catch (err) {
|
|
334
|
-
if (target?.createdForWrite) await
|
|
334
|
+
if (target?.createdForWrite) await fs$1.rm(target.openedRealPath, { force: true }).catch(() => {});
|
|
335
335
|
throw err;
|
|
336
336
|
} finally {
|
|
337
337
|
if (!sourceClosedByStream) await source.handle.close().catch(() => {});
|
|
@@ -162,7 +162,7 @@ import { a as resolveControlUiRootSync, i as resolveControlUiRootOverrideSync, t
|
|
|
162
162
|
import { o as isBitseekBuild } from "./status.update-YC9VNJxl.js";
|
|
163
163
|
import { h as normalizeUpdateChannel, l as DEFAULT_PACKAGE_CHANNEL, n as checkUpdateStatus, o as resolveNpmChannelTag, r as compareSemverStrings } from "./channel-account-context-BV3Q0XnD.js";
|
|
164
164
|
import { i as prepareSecretsRuntimeSnapshot, n as clearSecretsRuntimeSnapshot, r as getActiveSecretsRuntimeSnapshot, t as activateSecretsRuntimeSnapshot } from "./runtime-D4y0Gdfj.js";
|
|
165
|
-
import { t as runOnboardingWizard } from "./onboarding-
|
|
165
|
+
import { t as runOnboardingWizard } from "./onboarding-BTXvw1Ro.js";
|
|
166
166
|
import { a as sendApnsAlert, c as parseMessageWithAttachments, d as shouldLogWs, f as summarizeAgentEventForWsLog, i as resolveApnsAuthConfigFromEnv, l as formatForLog, n as normalizeApnsEnvironment, o as sendApnsBackgroundWake, p as setGatewayWsLogStyle, s as normalizeRpcAttachmentsToChatAttachments, t as loadApnsRegistration, u as logWs } from "./push-apns-BSlKJa83.js";
|
|
167
167
|
import { T as resolveGmailHookRuntimeConfig, _ as buildGogWatchServeArgs, i as ensureTailscaleEndpoint, v as buildGogWatchStartArgs } from "./gmail-setup-utils-CtjSNa9d.js";
|
|
168
168
|
import { n as isNodeCommandAllowed, r as resolveNodeCommandAllowlist } from "./node-command-policy-pJ6IPNBA.js";
|
|
@@ -14473,6 +14473,16 @@ async function installClawhubMarketSkill(params, deps) {
|
|
|
14473
14473
|
|
|
14474
14474
|
//#endregion
|
|
14475
14475
|
//#region src/gateway/server-methods/skills.ts
|
|
14476
|
+
function matchesInstalledMarketSkill(entry, candidate) {
|
|
14477
|
+
const entrySkillKey = entry.skillKey.trim();
|
|
14478
|
+
const entrySlug = entry.slug?.trim() || "";
|
|
14479
|
+
const candidateSkillKey = candidate.skillKey?.trim() || "";
|
|
14480
|
+
const candidateName = candidate.name?.trim() || "";
|
|
14481
|
+
const candidateDirName = candidate.baseDir ? path.basename(candidate.baseDir) : "";
|
|
14482
|
+
if (candidateSkillKey === entrySkillKey || candidateName === entrySkillKey) return true;
|
|
14483
|
+
if (!entrySlug) return false;
|
|
14484
|
+
return candidateSkillKey === entrySlug || candidateName === entrySlug || candidateDirName === entrySlug;
|
|
14485
|
+
}
|
|
14476
14486
|
function collectSkillBins(entries) {
|
|
14477
14487
|
const bins = /* @__PURE__ */ new Set();
|
|
14478
14488
|
for (const entry of entries) {
|
|
@@ -14498,7 +14508,7 @@ function collectSkillBins(entries) {
|
|
|
14498
14508
|
return [...bins].toSorted();
|
|
14499
14509
|
}
|
|
14500
14510
|
function resolveMarketSkillState(entry, report) {
|
|
14501
|
-
const skill = report.skills.find((candidate) =>
|
|
14511
|
+
const skill = report.skills.find((candidate) => matchesInstalledMarketSkill(entry, candidate));
|
|
14502
14512
|
if (!skill) return {
|
|
14503
14513
|
installed: false,
|
|
14504
14514
|
enabled: false,
|
|
@@ -14661,7 +14671,7 @@ const skillsHandlers = {
|
|
|
14661
14671
|
if (buildWorkspaceSkillStatus(workspaceDir, {
|
|
14662
14672
|
config: cfg,
|
|
14663
14673
|
eligibility: { remote: getRemoteSkillEligibility() }
|
|
14664
|
-
}).skills.find((candidate) =>
|
|
14674
|
+
}).skills.find((candidate) => matchesInstalledMarketSkill(marketEntry, candidate))) {
|
|
14665
14675
|
respond(true, {
|
|
14666
14676
|
ok: true,
|
|
14667
14677
|
skillKey,
|
|
@@ -14700,7 +14710,7 @@ const skillsHandlers = {
|
|
|
14700
14710
|
if (!buildWorkspaceSkillStatus(workspaceDir, {
|
|
14701
14711
|
config: cfg,
|
|
14702
14712
|
eligibility: { remote: getRemoteSkillEligibility() }
|
|
14703
|
-
}).skills.find((candidate) =>
|
|
14713
|
+
}).skills.find((candidate) => matchesInstalledMarketSkill(marketEntry, candidate))) {
|
|
14704
14714
|
respond(false, void 0, errorShape(ErrorCodes.UNAVAILABLE, `Install completed but "${skillKey}" is still not discoverable in skills status.`));
|
|
14705
14715
|
return;
|
|
14706
14716
|
}
|
|
@@ -22359,7 +22369,7 @@ function attachGatewayWsMessageHandler(params) {
|
|
|
22359
22369
|
type: "hello-ok",
|
|
22360
22370
|
protocol: PROTOCOL_VERSION,
|
|
22361
22371
|
server: {
|
|
22362
|
-
version:
|
|
22372
|
+
version: VERSION,
|
|
22363
22373
|
connId
|
|
22364
22374
|
},
|
|
22365
22375
|
features: {
|