wednesdayai 0.5.1-dev.40 → 0.5.1-dev.41
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/{agent-scope-BudmZlc1.js → agent-scope-CXfIHPTl.js} +3 -3
- package/dist/{agent-scope-BJFJ0deZ.js → agent-scope-DUbhjnHb.js} +18 -18
- package/dist/{agent-turn-execute-CIlMMXNu.js → agent-turn-execute-8DU-jztX.js} +168 -168
- package/dist/{agent-turn-runner-C5FiRTJg.js → agent-turn-runner-BJqs23F_.js} +6 -6
- package/dist/{agent-turn-runner-SxjOzPCD.js → agent-turn-runner-DHc4lH66.js} +6 -6
- package/dist/{api-key-rotation-BWj1Itf-.js → api-key-rotation-B8RAiYZ_.js} +2 -2
- package/dist/{api-key-rotation-DzXkIU1m.js → api-key-rotation-PK29aYV9.js} +2 -2
- package/dist/{audio-preflight-CKxOmHZL.js → audio-preflight-Cio-wP6C.js} +22 -22
- package/dist/{audio-preflight-E-nHdi7I.js → audio-preflight-DaYu-alJ.js} +27 -27
- package/dist/{audio-transcription-runner-Cc-hAbE1.js → audio-transcription-runner-DW04B1B-.js} +26 -26
- package/dist/{audio-transcription-runner-DrIyj8a5.js → audio-transcription-runner-D_-_mf4m.js} +25 -25
- package/dist/build-info.json +3 -3
- package/dist/bundled/boot-md/handler.js +58 -58
- package/dist/bundled/bootstrap-extra-files/handler.js +5 -5
- package/dist/bundled/command-logger/handler.js +2 -2
- package/dist/bundled/session-journal/handler.js +58 -58
- package/dist/bundled/session-memory/handler.js +58 -58
- package/dist/canvas-host/a2ui/.bundle.hash +1 -1
- package/dist/{chat-content-CL44f6Ub.js → chat-content-DIjp-kW-.js} +36 -36
- package/dist/{chat-content-BgW4rG28.js → chat-content-tQ21BnhN.js} +24 -24
- package/dist/{plugin-sdk/chrome-DML7V0HT.js → chrome-C9TkYQeh.js} +26 -26
- package/dist/{chrome-DNTX4D1k.js → chrome-DxiDoVpi.js} +13 -13
- package/dist/{chunk-BEuk6eCG.js → chunk-50mU2Avf.js} +3 -3
- package/dist/{chunk-BHQuzJtJ.js → chunk-DCCRrNDr.js} +3 -3
- package/dist/{command-queue-CyJUnsMn.js → command-queue-De2GI8TP.js} +1 -1
- package/dist/{command-queue-D_saM8MV.js → command-queue-yDJ733aN.js} +1 -1
- package/dist/{command-registry-xYf1aBOy.js → command-registry-Ip0F63vx.js} +4 -4
- package/dist/{commands-registry-CNVoO37I.js → commands-registry-C3LKhQLY.js} +2 -2
- package/dist/{commands-registry-C-BDBl_b.js → commands-registry-CzTzqbi9.js} +2 -2
- package/dist/{completion-cli-od6mAB_x.js → completion-cli-BFHL_SSq.js} +2 -2
- package/dist/{completion-cli-BIuMSnSA.js → completion-cli-EqOcxJpx.js} +1 -1
- package/dist/{config-CPcuaNsB.js → config-D5tWLhng.js} +26 -26
- package/dist/config.js +3 -3
- package/dist/{credentials-DnIj4HtR.js → credentials-BAWD9O8L.js} +1 -1
- package/dist/{credentials-2Kd9Ahu7.js → credentials-DdZjLLBj.js} +1 -1
- package/dist/{deliver-Ap_fWjsf.js → deliver-Cqo4_R0v.js} +14 -14
- package/dist/{deliver-DUUEMT-w.js → deliver-DeMElZFE.js} +29 -29
- package/dist/{diagnostic-YRGuisNG.js → diagnostic-BqFtliY1.js} +3 -3
- package/dist/{diagnostic--vAGyKdB.js → diagnostic-Nq6B3DZr.js} +3 -3
- package/dist/{doctor-completion-xR-LI2Kc.js → doctor-completion-CNBGQIUD.js} +1 -1
- package/dist/{doctor-completion-B3oIZ4R2.js → doctor-completion-W6Xmw25w.js} +1 -1
- package/dist/entry.js +2 -2
- package/dist/{plugin-sdk/errors-BH3DYZVB.js → errors-BWpk4nzX.js} +1 -1
- package/dist/{errors-DnOtx_vg.js → errors-D8k7j4A4.js} +1 -1
- package/dist/{fetch-ChtdmCYU.js → fetch-CHncmQms.js} +8 -8
- package/dist/{plugin-sdk/fetch-BxGJD3sH.js → fetch-CLvElPgY.js} +1 -1
- package/dist/{plugin-sdk/fetch-BqFNIJpI.js → fetch-DG4n5iR6.js} +1 -1
- package/dist/{fetch-BJ9kDOw8.js → fetch-TzOudNO4.js} +7 -7
- package/dist/{fetch-guard-CRERUrFK.js → fetch-guard-BZlxmZcA.js} +2 -2
- package/dist/{fetch-guard-BnKTeFyb.js → fetch-guard-kz-XQlCx.js} +2 -2
- package/dist/{frontmatter-CqznVm7P.js → frontmatter-BDLxOane.js} +5 -5
- package/dist/{fs-safe-C3qJHn62.js → fs-safe-BH37Yhl8.js} +25 -25
- package/dist/{fs-safe-D96d8swI.js → fs-safe-BjrptUz1.js} +26 -26
- package/dist/{gateway-cli-B0WWrjnY.js → gateway-cli-D17zAbrY.js} +20 -10
- package/dist/{gateway-cli-BRUhDHZW.js → gateway-cli-DktZhN9y.js} +20 -10
- package/dist/{image-ops-BiBI-uAf.js → image-ops-BWgZn39_.js} +1 -1
- package/dist/{image-ops-BTgGxcIG.js → image-ops-C54shfkj.js} +11 -11
- package/dist/index.js +1 -1
- package/dist/{ir-IKFrcD2H.js → ir-Btci3Wse.js} +8 -8
- package/dist/{ir-Drj2D5Gr.js → ir-SWdqg35s.js} +5 -5
- package/dist/{json-files-DNv3G6Vg.js → json-files-C3L53Qrl.js} +7 -7
- package/dist/{legacy-names-Bx5L8LWT.js → legacy-names-BKv-k5-D.js} +1 -1
- package/dist/llm-slug-generator.js +58 -58
- package/dist/{manager-Cb_Lde6Q.js → manager-BPk0HUHz.js} +14 -14
- package/dist/{manager-C9H5Oflk.js → manager-Nw8a10KA.js} +18 -18
- package/dist/{markdown-tables-Crj_Y0Qx.js → markdown-tables-BJqhUgli.js} +2 -2
- package/dist/{markdown-tables-BvoP0b-H.js → markdown-tables-By4yQcHS.js} +2 -2
- package/dist/{model-selection-2-pBJbaC.js → model-selection-JA-6f5ss.js} +84 -84
- package/dist/{models-config-7yfOGOZY.js → models-config-Cbzv_acs.js} +2 -2
- package/dist/{models-config-DkEpc_7A.js → models-config-TH00YNHC.js} +7 -7
- package/dist/{nudge-BR_K1LnT.js → nudge-DVGzMWUi.js} +16 -16
- package/dist/{nudge-CcGwhSSL.js → nudge-Da1ePscI.js} +35 -35
- package/dist/{onboard-CRHyyv-F.js → onboard-D2AmYbm8.js} +1 -1
- package/dist/{onboard-CYQVIEKp.js → onboard-PJee12bv.js} +1 -1
- package/dist/{onboarding-CDHMZKiy.js → onboarding-C1f94rh1.js} +1 -1
- package/dist/{onboarding-vLVDuEr7.js → onboarding-DXRhSAcO.js} +1 -1
- package/dist/{onboarding.finalize-D3hX9K5R.js → onboarding.finalize-C0RUJoiz.js} +4 -4
- package/dist/{onboarding.finalize-BDJnDt6t.js → onboarding.finalize-Calv0MIe.js} +3 -3
- package/dist/{outbound-attachment-CxvBVgcJ.js → outbound-attachment-CZwlqfbE.js} +2 -2
- package/dist/{outbound-attachment-DFIzmC4e.js → outbound-attachment-DAUmCye_.js} +2 -2
- package/dist/{outbound-message-hooks-C9zh-qk0.js → outbound-message-hooks-Bqu2fu_R.js} +4 -4
- package/dist/{outbound-message-hooks-DfRORyCc.js → outbound-message-hooks-CIrC0qAA.js} +5 -5
- package/dist/{pairing-files-ByediFgs.js → pairing-files-B1ukutA_.js} +1 -1
- package/dist/{path-alias-guards-B9AcbQl6.js → path-alias-guards-CGcezGX3.js} +3 -3
- package/dist/{path-alias-guards-BXXI1YTn.js → path-alias-guards-CgO2FpVx.js} +1 -1
- package/dist/{pi-embedded-Dp5uUcq6.js → pi-embedded-W4tWwQw6.js} +254 -254
- package/dist/{pi-embedded-utils-Dc-LEWCI.js → pi-embedded-utils-B6eeyw2H.js} +3 -3
- package/dist/{pi-embedded-utils-CQ3KPjMe.js → pi-embedded-utils-DF7kfQx2.js} +3 -3
- package/dist/{pi-model-discovery-C4WE3mR2.js → pi-model-discovery-VTZCKDCd.js} +1 -1
- package/dist/{pi-model-discovery-B44lshxv.js → pi-model-discovery-ym24jTFO.js} +7 -7
- package/dist/plugin-sdk/{agent-scope-Cy5bPtkD.js → agent-scope-BnbrZIzh.js} +1 -1
- package/dist/plugin-sdk/{agent-turn-execute-Cr_GYkDb.js → agent-turn-execute-Bj1_MqWi.js} +79 -79
- package/dist/plugin-sdk/agent-turn-execute-D0szeKs8.js +61 -0
- package/dist/plugin-sdk/{agent-turn-runner-D3tAlzpP.js → agent-turn-runner-fV3h6ELM.js} +6 -6
- package/dist/plugin-sdk/{agent-turn-runner-CBR6kAt-.js → agent-turn-runner-zbex5xar.js} +6 -6
- package/dist/plugin-sdk/{api-key-rotation-Dmd_whf1.js → api-key-rotation-DbJkvwYN.js} +1 -1
- package/dist/plugin-sdk/{api-key-rotation-BKcVxTy8.js → api-key-rotation-Dpyf5O6z.js} +2 -2
- package/dist/plugin-sdk/{audio-preflight-2XKqIXAx.js → audio-preflight-DhIYyWh0.js} +14 -14
- package/dist/plugin-sdk/{audio-preflight-BVKGoA22.js → audio-preflight-DlNHpUpW.js} +23 -23
- package/dist/plugin-sdk/{audio-transcription-runner-Cvfignlt.js → audio-transcription-runner-BNWmQAJ3.js} +10 -10
- package/dist/plugin-sdk/{audio-transcription-runner-2ziIuais.js → audio-transcription-runner-DbjdWQRu.js} +8 -8
- package/dist/plugin-sdk/{auth-profiles-BxDhfCHT.js → auth-profiles-DPd1Ol-P.js} +1 -1
- package/dist/plugin-sdk/{chat-content-DWJ_WMLQ.js → chat-content-CEMoDe5q.js} +9 -9
- package/dist/{chrome-D1006Mu2.js → plugin-sdk/chrome-CobI3ImG.js} +8 -8
- package/dist/plugin-sdk/{chrome-Djvom4Ij.js → chrome-DwoV5WFU.js} +6 -6
- package/dist/plugin-sdk/{chunk-SR4Ydfza.js → chunk-C3M1IW7W.js} +2 -2
- package/dist/plugin-sdk/{chunk-Bh4ffo9K.js → chunk-CBTJQenE.js} +3 -3
- package/dist/plugin-sdk/{command-queue-DUO9-NRr.js → command-queue-DUuIiwvi.js} +2 -2
- package/dist/plugin-sdk/{command-queue-DxcAKezg.js → command-queue-hSL_BIod.js} +1 -1
- package/dist/plugin-sdk/{commands-registry-DnePgYTq.js → commands-registry-DPCcTIwi.js} +2 -2
- package/dist/plugin-sdk/{commands-registry-CCiWhIrU.js → commands-registry-vhM5U22x.js} +2 -2
- package/dist/plugin-sdk/{credentials-DJMyq23O.js → credentials-BgX_xjTe.js} +1 -1
- package/dist/plugin-sdk/{credentials-BFdx8hCQ.js → credentials-oF38Hm9r.js} +1 -1
- package/dist/plugin-sdk/{deliver-Cf-VdZA7.js → deliver-CkQB8s_s.js} +14 -14
- package/dist/plugin-sdk/deliver-DTstMBfw.js +34 -0
- package/dist/plugin-sdk/{deliver-D3LWZpv1.js → deliver-lkeqXp0v.js} +11 -11
- package/dist/plugin-sdk/{diagnostic-BXgGsRnq.js → diagnostic-TucKQ5Fk.js} +2 -2
- package/dist/plugin-sdk/{diagnostic-BpXW-Rhw.js → diagnostic-nUTVaBEe.js} +3 -3
- package/dist/plugin-sdk/{diagnostic-session-state-Y-_mHHE2.js → diagnostic-session-state-C74O1QW2.js} +1 -1
- package/dist/{errors-DnS9ngr1.js → plugin-sdk/errors-BcCM5PTR.js} +1 -1
- package/dist/{fetch-CrTLz8wd.js → plugin-sdk/fetch-BEOHdT2e.js} +1 -1
- package/dist/{fetch-DJPbv7La.js → plugin-sdk/fetch-BNHoA66Z.js} +1 -1
- package/dist/plugin-sdk/{fetch-CpY6mDmQ.js → fetch-D7rvWjfk.js} +2 -2
- package/dist/plugin-sdk/{fetch-B9WuvLLv.js → fetch-DV_cKD5m.js} +7 -7
- package/dist/plugin-sdk/{fetch-guard-BEue3kvx.js → fetch-guard-CQIsGUgZ.js} +1 -1
- package/dist/plugin-sdk/{fetch-guard-CJhIVznN.js → fetch-guard-Dpd7hJ0h.js} +2 -2
- package/dist/plugin-sdk/{fs-safe-BQ8e0fFk.js → fs-safe-CnAPtYPG.js} +3 -3
- package/dist/plugin-sdk/{image-ops-CqatVl0e.js → image-ops-1WkFRYfC.js} +1 -1
- package/dist/plugin-sdk/{inbound-context-CKtZsNVT.js → inbound-context-BdGImnhD.js} +1 -1
- package/dist/plugin-sdk/{ir-C1cLQG0N.js → ir-BnNIPrDz.js} +5 -5
- package/dist/plugin-sdk/{ir-Ep5lw12h.js → ir-D-nyt7yZ.js} +2 -2
- package/dist/plugin-sdk/{manager-DyYd10T2.js → manager-3Bw8zhA3.js} +4 -4
- package/dist/plugin-sdk/manager-BexdJt3o.js +14 -0
- package/dist/plugin-sdk/{manager-xGWNrW5i.js → manager-uIw894nB.js} +7 -7
- package/dist/plugin-sdk/{markdown-tables-DnMUQn1V.js → markdown-tables-D6Jl1s9s.js} +2 -2
- package/dist/plugin-sdk/{markdown-tables-B4G-uOPz.js → markdown-tables-DczIA0hC.js} +2 -2
- package/dist/plugin-sdk/{model-auth-pNsZhRxq.js → model-auth-Beiv1ujI.js} +7 -7
- package/dist/plugin-sdk/{models-config-DsHaLeW3.js → models-config-DPG3UP6h.js} +1 -1
- package/dist/plugin-sdk/{models-config-d-LFEKVs.js → models-config-DrzOHxl5.js} +2 -2
- package/dist/plugin-sdk/{monitor-CbKokdL4.js → monitor-BQWiYAwC.js} +77 -77
- package/dist/plugin-sdk/{nudge-z8ozyWd6.js → nudge-Cp00v46W.js} +11 -11
- package/dist/plugin-sdk/{nudge-BvirROp6.js → nudge-czM3OOTT.js} +8 -8
- package/dist/plugin-sdk/{openai-compatible-video-BxPbkLMy.js → openai-compatible-video-Dy57wpNv.js} +7 -7
- package/dist/plugin-sdk/{outbound-attachment-DkIWM5yK.js → outbound-attachment-BoSR20RK.js} +2 -2
- package/dist/plugin-sdk/{outbound-attachment-BrHUWeqB.js → outbound-attachment-JHREBMfy.js} +1 -1
- package/dist/plugin-sdk/{outbound-message-hooks-DsAvrOUy.js → outbound-message-hooks-eUNVCJ0m.js} +4 -4
- package/dist/plugin-sdk/{path-alias-guards-CF0cvXKB.js → path-alias-guards-D1I2TIj4.js} +1 -1
- package/dist/plugin-sdk/{pi-embedded-helpers-Ctve63Vr.js → pi-embedded-helpers-BRSkUtFR.js} +15 -15
- package/dist/plugin-sdk/{pi-embedded-utils-cecBA96E.js → pi-embedded-utils-DcsHTJ1m.js} +3 -3
- package/dist/plugin-sdk/{pi-embedded-utils-6FFFlkbd.js → pi-embedded-utils-JXHsJfhx.js} +1 -1
- package/dist/plugin-sdk/{pi-model-discovery-BnsoI-E6.js → pi-model-discovery-CKGA60jT.js} +2 -2
- package/dist/plugin-sdk/{pi-model-discovery-CMOEq078.js → pi-model-discovery-HVno_0HD.js} +1 -1
- package/dist/plugin-sdk/provider-dispatcher-Cq6Acy3h.js +61 -0
- package/dist/plugin-sdk/provider-media-understanding.js +20 -20
- package/dist/plugin-sdk/{proxy-env-jBCtIiJH.js → proxy-env-D9QKz5Mq.js} +1 -1
- package/dist/plugin-sdk/{pw-ai-Bl2Z9GYg.js → pw-ai-B1OqkFDb.js} +10 -10
- package/dist/plugin-sdk/{pw-ai-IAdR6aX7.js → pw-ai-B_6I8TGZ.js} +4 -4
- package/dist/plugin-sdk/{qmd-manager-DERrmogO.js → qmd-manager-CIgxgs0D.js} +2 -2
- package/dist/plugin-sdk/{qmd-manager-DY9c1S_2.js → qmd-manager-Ip6QnhA7.js} +8 -8
- package/dist/plugin-sdk/{qmd-scope-C3rw3Qjd.js → qmd-scope-DMNjwnEQ.js} +1 -1
- package/dist/plugin-sdk/{query-expansion-CWCvbGoy.js → query-expansion-CECAX0Pe.js} +1 -1
- package/dist/plugin-sdk/{query-expansion-BhXha2GI.js → query-expansion-DV-ECmRb.js} +2 -2
- package/dist/plugin-sdk/{recorder-xWMrt--U.js → recorder-C6OpZN3o.js} +1 -1
- package/dist/plugin-sdk/{recorder-DccHbgBz.js → recorder-XQ8ZjG7j.js} +2 -2
- package/dist/plugin-sdk/{redact-CXDVzhSq.js → redact-C3T6IWmQ.js} +1 -1
- package/dist/plugin-sdk/{registry-B-9fRLtl.js → registry-D9-EsIYH.js} +1 -1
- package/dist/plugin-sdk/{replies-BNtRlug2.js → replies-BhuMuYfa.js} +11 -11
- package/dist/plugin-sdk/{replies-CbnkLeUl.js → replies-ClN-Aak4.js} +4 -4
- package/dist/{replies-DAavcLc9.js → plugin-sdk/replies-HCqRS_IF.js} +5 -5
- package/dist/plugin-sdk/{reply-directives-CXKYiQC1.js → reply-directives-Bn4oBJnk.js} +2 -2
- package/dist/plugin-sdk/{reply-directives-CKNwlk_8.js → reply-directives-C69Fd8zO.js} +1 -1
- package/dist/plugin-sdk/{reply-prefix-DCeyas-6.js → reply-prefix-BQ-rDIAU.js} +1 -1
- package/dist/{reply-prefix-C08CPcgE.js → plugin-sdk/reply-prefix-CCyygbH2.js} +1 -1
- package/dist/plugin-sdk/{resolve-route-CsiTWvoi.js → resolve-route-Djrs4IWv.js} +3 -3
- package/dist/plugin-sdk/{resolve-route-t2HJkuDx.js → resolve-route-N9oe4tGM.js} +2 -2
- package/dist/plugin-sdk/{runs-B0mmuxPP.js → runs-0OTO0OVX.js} +12 -12
- package/dist/plugin-sdk/{runs-CSaP-UMd.js → runs-DK85oFoq.js} +7 -7
- package/dist/plugin-sdk/{runs-ByM3uA8B.js → runs-DN-UxJ44.js} +8 -8
- package/dist/plugin-sdk/{send-D0UAWWai.js → send-AstP-BDn.js} +8 -8
- package/dist/plugin-sdk/{send-BToCKtul.js → send-C8OYq5CD.js} +10 -10
- package/dist/plugin-sdk/send-CMAU8Lg8.js +23 -0
- package/dist/plugin-sdk/{send-CbbM7dcD.js → send-CVYVctJr.js} +6 -6
- package/dist/plugin-sdk/{send-hdgQBd4P.js → send-CciBIiE2.js} +4 -4
- package/dist/plugin-sdk/{send-rQhDBwIJ.js → send-CilPGWoe.js} +8 -8
- package/dist/plugin-sdk/{send-CTefF3Iw.js → send-CyKQnkbd.js} +6 -6
- package/dist/plugin-sdk/{send-Dgf6n9kX.js → send-D3hVSNy0.js} +6 -6
- package/dist/plugin-sdk/{send-qUR5w2lM.js → send-D5C72eu6.js} +7 -7
- package/dist/plugin-sdk/{send-CY2iq9C4.js → send-DFpY65tA.js} +10 -10
- package/dist/plugin-sdk/{send-BwuMsQ_p.js → send-DnJb7LiP.js} +8 -8
- package/dist/plugin-sdk/{send-BQYyBicH.js → send-dNeIyZEN.js} +5 -5
- package/dist/plugin-sdk/{session-context-E8Vv0lBU.js → session-context-4IeKkzGJ.js} +2 -2
- package/dist/plugin-sdk/{session-meta-_XFpsAgw.js → session-meta-BlMS0pts.js} +2 -2
- package/dist/plugin-sdk/{session-meta-B_alDqcD.js → session-meta-pKpwf1nQ.js} +1 -1
- package/dist/plugin-sdk/{sessions-DGyoDRbg.js → sessions-BUjbH5K1.js} +1 -1
- package/dist/plugin-sdk/{sessions-CkJfRajZ.js → sessions-BfBjVuaP.js} +4 -4
- package/dist/plugin-sdk/{skill-commands-D5O0FXiW.js → skill-commands-Bk_STwKa.js} +4 -4
- package/dist/plugin-sdk/{skill-commands-DJ9gv-vK.js → skill-commands-J-ZcPvqF.js} +3 -3
- package/dist/plugin-sdk/{skills-ByCpoIW7.js → skills-BArFQgKX.js} +6 -6
- package/dist/plugin-sdk/{skills-mfK8NK3f.js → skills-W6RHTFue.js} +1 -1
- package/dist/plugin-sdk/{ssrf-aLKAjCHj.js → ssrf-B2UnPTf3.js} +1 -1
- package/dist/plugin-sdk/{store-KaVQ5gHj.js → store-D8eITlWs.js} +2 -2
- package/dist/plugin-sdk/{subagent-registry-DyI22dHA.js → subagent-registry-Bek3q0nu.js} +44 -44
- package/dist/plugin-sdk/{subsystem-DGPv0F8I.js → subsystem-Btq0amiz.js} +4 -4
- package/dist/plugin-sdk/{tables-CONj5xDV.js → tables-Bj_zeTwr.js} +1 -1
- package/dist/plugin-sdk/{tables-Dt2IrV1k.js → tables-ohryoECJ.js} +1 -1
- package/dist/plugin-sdk/testing.js +44 -44
- package/dist/plugin-sdk/{tokens-DUGBy1gM.js → tokens-mfZMXas7.js} +1 -1
- package/dist/plugin-sdk/{tool-loop-detection-Cl4-Vsd_.js → tool-loop-detection-CnFqoQKh.js} +1 -1
- package/dist/plugin-sdk/{user-run-recording-C05KbS-o.js → user-run-recording-CAAdiBWD.js} +2 -2
- package/dist/plugin-sdk/{user-run-recording--8aaZMPs.js → user-run-recording-DQBPNzif.js} +2 -2
- package/dist/plugin-sdk/{ws-C7BGsi5P.js → ws-DN6RmfyQ.js} +1 -1
- package/dist/plugin-sdk/{ws-BzjQAveZ.js → ws-zaFiZiYP.js} +1 -1
- package/dist/{program-CcLb8Psv.js → program-DYZ4XAFZ.js} +2 -2
- package/dist/{program-context-X8qIC1Px.js → program-context-BM_flY1J.js} +6 -6
- package/dist/{prompt-select-styled-NrfLylYh.js → prompt-select-styled-BFW0tf77.js} +1 -1
- package/dist/{prompt-select-styled-DUTH4ST5.js → prompt-select-styled-Eb9ltCzM.js} +1 -1
- package/dist/{proxy-env-Bw8nAERJ.js → proxy-env-DKs0W5v1.js} +1 -1
- package/dist/{proxy-env-DdoaBr4H.js → proxy-env-DtzLr6mZ.js} +1 -1
- package/dist/{pw-ai-C6ZFN6As.js → pw-ai-CEk9Jaqd.js} +13 -13
- package/dist/{pw-ai-CV5A9Kt_.js → pw-ai-KPNOiYzf.js} +14 -14
- package/dist/{qmd-manager-Bw5dnMTy.js → qmd-manager-BFUaPUn-.js} +12 -12
- package/dist/{qmd-manager-BZSlXT1A.js → qmd-manager-BmiJlIMN.js} +23 -23
- package/dist/{qmd-scope-BOfwIKTy.js → qmd-scope-CUCeRWxr.js} +1 -1
- package/dist/{qmd-scope-0dG63o_w.js → qmd-scope-DLLTbQwp.js} +1 -1
- package/dist/{query-expansion-gzgHhq68.js → query-expansion-CbOJZTFH.js} +13 -13
- package/dist/{query-expansion-BDAO12Ha.js → query-expansion-DLN1Vjgr.js} +11 -11
- package/dist/{recorder-ciGDu2oO.js → recorder-CndF3Klo.js} +2 -2
- package/dist/{recorder-Bp_onP2d.js → recorder-jnBdoV4s.js} +2 -2
- package/dist/{redact-Cp-v7ZNA.js → redact-B6sHOW29.js} +1 -1
- package/dist/{redact-D--orJnz.js → redact-C8xjZT-F.js} +1 -1
- package/dist/{register.maintenance-CFd160fT.js → register.maintenance-CNiAi_Bg.js} +5 -5
- package/dist/{register.maintenance-Dc0j0tvi.js → register.maintenance-Dq3k6jFc.js} +4 -4
- package/dist/{register.onboard-u0pMgMv4.js → register.onboard-DGBJtyFX.js} +2 -2
- package/dist/{register.onboard-C-lkIY7d.js → register.onboard-DqGIfQsO.js} +2 -2
- package/dist/{register.setup-BAiTfEey.js → register.setup-BdAQ_7gM.js} +2 -2
- package/dist/{register.setup-D6hviI6L.js → register.setup-Ckb9Hpks.js} +2 -2
- package/dist/{register.subclis-3YVvoBSB.js → register.subclis-Cn5DS2Th.js} +3 -3
- package/dist/{plugin-sdk/replies-CyyZdjYH.js → replies-CoEfccKv.js} +5 -5
- package/dist/{replies-EZyamg1p.js → replies-lKn2Mrkb.js} +5 -5
- package/dist/{reply-directives-B_wfvntf.js → reply-directives-BclP76MA.js} +2 -2
- package/dist/{reply-directives-DMPiBIx3.js → reply-directives-Djre3xI1.js} +2 -2
- package/dist/{reply-prefix-DLf0nmds.js → reply-prefix-BTUna5vE.js} +1 -1
- package/dist/{plugin-sdk/reply-prefix-DL3DiQEo.js → reply-prefix-DiyN1oc7.js} +1 -1
- package/dist/{resolve-route-GBqD8iPk.js → resolve-route-BmA3wi9D.js} +4 -4
- package/dist/{resolve-route-BP1OpZqn.js → resolve-route-ClI5pltd.js} +3 -3
- package/dist/{run-main-BBLzm5df.js → run-main-BYnz7Ou5.js} +3 -3
- package/dist/{runs-EvR8ugp4.js → runs-DffCseDM.js} +9 -9
- package/dist/{runs-Bf_VVVBE.js → runs-efmPtrdw.js} +8 -8
- package/dist/{send-C0kXNcyD.js → send-B3c56zXa.js} +8 -8
- package/dist/{send-B5XVAKWg.js → send-BZrEBJKt.js} +7 -7
- package/dist/{send-CNMPyQyQ.js → send-CLnmNoGF.js} +7 -7
- package/dist/{send-BVfxa93K.js → send-ChgWfhHL.js} +8 -8
- package/dist/{send-12uxFQQR.js → send-Co-6tb50.js} +8 -8
- package/dist/{send-oHqfck_E.js → send-DkHxW8Pg.js} +6 -6
- package/dist/{send-BCEsHNBh.js → send-NLqVlKnJ.js} +6 -6
- package/dist/{send-BOm8dqOB.js → send-TVImOmCV.js} +13 -13
- package/dist/{session-meta-BCY_pfg7.js → session-meta-CE9Oi0tA.js} +1 -1
- package/dist/{session-meta-C_fW_AWG.js → session-meta-DDeeNkQv.js} +1 -1
- package/dist/{sessions-IqyeyMXp.js → sessions-BgTvNzNv.js} +4 -4
- package/dist/{sessions-DODCZ4JK.js → sessions-DkSPJ2k9.js} +5 -5
- package/dist/{skill-commands-DYJDIogS.js → skill-commands-BOG-33Ja.js} +5 -5
- package/dist/{skill-commands-5VtV6o_q.js → skill-commands-K9_D6a_V.js} +7 -7
- package/dist/{skills-jb4bSwT6.js → skills-Ci9t7Gax.js} +4 -4
- package/dist/{skills-B3DYwqF5.js → skills-CrNvxe8D.js} +21 -21
- package/dist/{store-CsI6l-8d.js → store-B6wZFu_5.js} +7 -7
- package/dist/{store-DnvoAjAE.js → store-DJPbhmBq.js} +7 -7
- package/dist/{subsystem-BTMrlJ-R.js → subsystem-B9soUuXQ.js} +7 -7
- package/dist/{subsystem-DoQFckDJ.js → subsystem-cFv2jJm-.js} +71 -71
- package/dist/{tables-CuZTAY1e.js → tables-BaYGY_Hk.js} +1 -1
- package/dist/{tables-BTIafSNy.js → tables-CYp9eWuv.js} +1 -1
- package/dist/{tokens-C8E7C2l5.js → tokens-DwuYAzrE.js} +1 -1
- package/dist/{tokens-qfLiLlNv.js → tokens-KbWGDYPC.js} +1 -1
- package/dist/{tool-loop-detection-CiexABx1.js → tool-loop-detection-B2G2F3vq.js} +1 -1
- package/dist/{tool-loop-detection-4AIUOil2.js → tool-loop-detection-BwJFCGqI.js} +2 -2
- package/dist/{update-cli-D4CRTu-Y.js → update-cli-BFg_CRum.js} +5 -5
- package/dist/{update-cli-q45uqAKK.js → update-cli-BfwXa0Uk.js} +4 -4
- package/dist/{user-run-recording-D-7cPbdf.js → user-run-recording-B_-S5l8q.js} +2 -2
- package/dist/{user-run-recording-4Dhev2ED.js → user-run-recording-DIqKTo0U.js} +2 -2
- package/dist/{workspace-DOy2M7yN.js → workspace-D5PKyvm-.js} +26 -26
- package/dist/{ws-D51UDdBH.js → ws-CSU92Z2r.js} +1 -1
- package/dist/{ws-D916JacH.js → ws-CmKUpGwq.js} +1 -1
- package/extensions/acpx/package.json +1 -1
- package/extensions/anthropic/package.json +1 -1
- package/extensions/bifrost/package.json +1 -1
- package/extensions/bluebubbles/package.json +1 -1
- package/extensions/copilot-proxy/package.json +1 -1
- package/extensions/deepgram/package.json +1 -1
- package/extensions/deepinfra/package.json +1 -1
- package/extensions/diagnostics-otel/package.json +1 -1
- package/extensions/diffs/package.json +1 -1
- package/extensions/discord/package.json +1 -1
- package/extensions/dream-cycle/package.json +1 -1
- package/extensions/elevenlabs/package.json +1 -1
- package/extensions/feishu/package.json +1 -1
- package/extensions/gemini-search/package.json +1 -1
- package/extensions/google/package.json +1 -1
- package/extensions/google-gemini-cli-auth/package.json +1 -1
- package/extensions/googlechat/package.json +1 -1
- package/extensions/grok-search/package.json +1 -1
- package/extensions/groq/package.json +1 -1
- package/extensions/imessage/package.json +1 -1
- package/extensions/irc/package.json +1 -1
- package/extensions/kimi-search/package.json +1 -1
- package/extensions/kokoro/package.json +1 -1
- package/extensions/learning-core/package.json +1 -1
- package/extensions/line/package.json +1 -1
- package/extensions/llm-task/package.json +1 -1
- package/extensions/lobster/package.json +1 -1
- package/extensions/matrix/CHANGELOG.md +1 -1
- package/extensions/matrix/package.json +1 -1
- package/extensions/mattermost/package.json +1 -1
- package/extensions/memory-core/package.json +1 -1
- package/extensions/memory-lancedb/package.json +1 -1
- package/extensions/minimax/package.json +1 -1
- package/extensions/minimax-portal-auth/package.json +1 -1
- package/extensions/mistral/package.json +1 -1
- package/extensions/moonshot/package.json +1 -1
- package/extensions/msteams/CHANGELOG.md +1 -1
- package/extensions/msteams/package.json +1 -1
- package/extensions/nextcloud-talk/package.json +1 -1
- package/extensions/nostr/CHANGELOG.md +1 -1
- package/extensions/nostr/package.json +1 -1
- package/extensions/open-prose/package.json +1 -1
- package/extensions/openai/package.json +1 -1
- package/extensions/openai-realtime/package.json +1 -1
- package/extensions/openrouter/package.json +1 -1
- package/extensions/perplexity-search/package.json +1 -1
- package/extensions/searxng-search/package.json +1 -1
- package/extensions/signal/package.json +1 -1
- package/extensions/slack/package.json +1 -1
- package/extensions/synology-chat/package.json +1 -1
- package/extensions/telegram/package.json +1 -1
- package/extensions/tlon/package.json +1 -1
- package/extensions/twitch/CHANGELOG.md +1 -1
- package/extensions/twitch/package.json +1 -1
- package/extensions/ui-surfaces/package.json +1 -1
- package/extensions/voice-call/CHANGELOG.md +1 -1
- package/extensions/voice-call/package.json +1 -1
- package/extensions/whatsapp/package.json +1 -1
- package/extensions/zai/package.json +1 -1
- package/extensions/zalo/CHANGELOG.md +1 -1
- package/extensions/zalo/package.json +1 -1
- package/extensions/zalouser/CHANGELOG.md +1 -1
- package/extensions/zalouser/package.json +1 -1
- package/package.json +1 -1
- package/dist/github-copilot-token-DrVydgnY.js +0 -106
- package/dist/paths-BIDPYPVC.js +0 -233
- package/dist/plugin-sdk/agent-turn-execute-Co_96UFp.js +0 -61
- package/dist/plugin-sdk/deliver-5MyFMK8o.js +0 -34
- package/dist/plugin-sdk/manager-B9WMktLu.js +0 -14
- package/dist/plugin-sdk/provider-dispatcher-uLJ5yzx1.js +0 -61
- package/dist/plugin-sdk/send-vp7qbuoy.js +0 -23
|
@@ -1,12 +1,12 @@
|
|
|
1
1
|
import { v as expandHomePrefix } from "./paths-C7aURmuZ.js";
|
|
2
|
-
import { $ as sameFileIdentity, at as isPathInside, it as isNotFoundPathError, ot as isSymlinkOpenError, rt as hasNodeErrorCode } from "./subsystem-
|
|
3
|
-
import { M as logWarn } from "./agent-scope-
|
|
4
|
-
import { n as assertNoPathAliasEscape } from "./path-alias-guards-
|
|
2
|
+
import { $ as sameFileIdentity, at as isPathInside, it as isNotFoundPathError, ot as isSymlinkOpenError, rt as hasNodeErrorCode } from "./subsystem-B9soUuXQ.js";
|
|
3
|
+
import { M as logWarn } from "./agent-scope-DUbhjnHb.js";
|
|
4
|
+
import { n as assertNoPathAliasEscape } from "./path-alias-guards-CGcezGX3.js";
|
|
5
5
|
import { randomUUID } from "node:crypto";
|
|
6
6
|
import { constants } from "node:fs";
|
|
7
7
|
import os from "node:os";
|
|
8
8
|
import path from "node:path";
|
|
9
|
-
import
|
|
9
|
+
import fsp from "node:fs/promises";
|
|
10
10
|
import { pipeline } from "node:stream/promises";
|
|
11
11
|
|
|
12
12
|
//#region src/infra/fs-safe.ts
|
|
@@ -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 fsp.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 fsp.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 fsp.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(), fsp.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 fsp.realpath(filePath);
|
|
54
|
+
const realStat = await fsp.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 fsp.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 fsp.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 fsp.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 fsp.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 fsp.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 fsp.mkdir(path.dirname(resolved), { recursive: true });
|
|
216
216
|
let ioPath = resolved;
|
|
217
217
|
try {
|
|
218
|
-
const resolvedRealPath = await
|
|
218
|
+
const resolvedRealPath = await fsp.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 fsp.open(ioPath, OPEN_WRITE_EXISTING_FLAGS, fileMode);
|
|
231
231
|
} catch (err) {
|
|
232
232
|
if (!isNotFoundPathError(err)) throw err;
|
|
233
|
-
handle = await
|
|
233
|
+
handle = await fsp.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 fsp.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 fsp.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 fsp.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 fsp.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 fsp.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 fsp.rm(target.openedRealPath, { force: true }).catch(() => {});
|
|
335
335
|
throw err;
|
|
336
336
|
} finally {
|
|
337
337
|
if (!sourceClosedByStream) await source.handle.close().catch(() => {});
|
|
@@ -1,11 +1,11 @@
|
|
|
1
|
-
import { u as expandHomePrefix } from "./paths-
|
|
2
|
-
import { B as hasNodeErrorCode, H as isPathInside, I as sameFileIdentity, U as isSymlinkOpenError, V as isNotFoundPathError } from "./subsystem-
|
|
3
|
-
import { S as logWarn } from "./workspace-
|
|
4
|
-
import { n as assertNoPathAliasEscape } from "./path-alias-guards-
|
|
1
|
+
import { u as expandHomePrefix } from "./paths-B_gs59ga.js";
|
|
2
|
+
import { B as hasNodeErrorCode, H as isPathInside, I as sameFileIdentity, U as isSymlinkOpenError, V as isNotFoundPathError } from "./subsystem-cFv2jJm-.js";
|
|
3
|
+
import { S as logWarn } from "./workspace-D5PKyvm-.js";
|
|
4
|
+
import { n as assertNoPathAliasEscape } from "./path-alias-guards-CgO2FpVx.js";
|
|
5
5
|
import path from "node:path";
|
|
6
6
|
import { constants } from "node:fs";
|
|
7
7
|
import os from "node:os";
|
|
8
|
-
import fs
|
|
8
|
+
import fs 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 fs
|
|
28
|
+
home = await fs.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 fs
|
|
34
|
+
if ((await fs.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 fs
|
|
40
|
+
handle = await fs.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(), fs
|
|
48
|
+
const [stat, lstat] = await Promise.all([handle.stat(), fs.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 fs
|
|
54
|
-
const realStat = await fs
|
|
53
|
+
const realPath = await fs.realpath(filePath);
|
|
54
|
+
const realStat = await fs.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 fs
|
|
72
|
+
rootReal = await fs.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 fs
|
|
173
|
+
const tempHandle = await fs.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 fs
|
|
183
|
+
const rootWithSep = ensureTrailingSep(await fs.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 fs
|
|
194
|
+
return await fs.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 fs
|
|
200
|
+
return await fs.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 fs
|
|
215
|
+
if (params.mkdir !== false) await fs.mkdir(path.dirname(resolved), { recursive: true });
|
|
216
216
|
let ioPath = resolved;
|
|
217
217
|
try {
|
|
218
|
-
const resolvedRealPath = await fs
|
|
218
|
+
const resolvedRealPath = await fs.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 fs
|
|
230
|
+
handle = await fs.open(ioPath, OPEN_WRITE_EXISTING_FLAGS, fileMode);
|
|
231
231
|
} catch (err) {
|
|
232
232
|
if (!isNotFoundPathError(err)) throw err;
|
|
233
|
-
handle = await fs
|
|
233
|
+
handle = await fs.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 fs
|
|
247
|
+
const lstat = await fs.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 fs
|
|
255
|
+
const realStat = await fs.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 fs
|
|
270
|
+
if (cleanupCreatedPath) await fs.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 fs
|
|
293
|
+
await fs.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 fs
|
|
306
|
+
if (tempPath) await fs.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 fs
|
|
334
|
+
if (target?.createdForWrite) await fs.rm(target.openedRealPath, { force: true }).catch(() => {});
|
|
335
335
|
throw err;
|
|
336
336
|
} finally {
|
|
337
337
|
if (!sourceClosedByStream) await source.handle.close().catch(() => {});
|
|
@@ -175,7 +175,7 @@ import { h as normalizeUpdateChannel, l as DEFAULT_PACKAGE_CHANNEL, n as checkUp
|
|
|
175
175
|
import { t as reconcileBundledInstalls } from "./reconcile-bundled-DVtY46J8.js";
|
|
176
176
|
import { a as resolveCommandSecretsFromActiveRuntimeSnapshot, i as prepareSecretsRuntimeSnapshot, n as clearSecretsRuntimeSnapshot, r as getActiveSecretsRuntimeSnapshot, t as activateSecretsRuntimeSnapshot } from "./runtime-FLRpN4Mm.js";
|
|
177
177
|
import "./onboarding.secret-input-DHve3Wa-.js";
|
|
178
|
-
import { t as runOnboardingWizard } from "./onboarding-
|
|
178
|
+
import { t as runOnboardingWizard } from "./onboarding-DXRhSAcO.js";
|
|
179
179
|
import { a as CONTROL_UI_V2_SERVICE_NAME, i as webBundleMissingMessage, n as buildUserClientRuntimeConfig, o as buildControlUiV2RuntimeConfig, r as resolvePackagedWebBundleRootSync, t as USER_CLIENT_ID } from "./runtime-config-60rqOPs5.js";
|
|
180
180
|
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-D1g_JEFQ.js";
|
|
181
181
|
import { a as readChatHistoryPage, c as REPLY_CONTEXT_CUSTOM_TYPE, d as admitUiActionHead, f as bindUiActionTurn, g as UiSurfaceRefSchema, h as assertValidParams, i as decodeHistoryCursor, l as buildReplyContextPayload, m as unsubscribeSessionChanges, o as resolveDbLeafEntryId, p as reserveUiActionAdmission, r as InvalidHistoryCursorError, s as resolveDbMessageEntryById, t as sessionsHandlers, u as UI_ACTION_CUSTOM_TYPE } from "./sessions-CqTY6R_o.js";
|
|
@@ -9688,6 +9688,7 @@ function isGatewayErrorShape(value) {
|
|
|
9688
9688
|
function stripUndefinedEntryFields(patch) {
|
|
9689
9689
|
return Object.fromEntries(Object.entries(patch).filter(([, value]) => value !== void 0));
|
|
9690
9690
|
}
|
|
9691
|
+
var SessionSendPolicyDenied = class extends Error {};
|
|
9691
9692
|
async function runSessionResetFromAgent(params) {
|
|
9692
9693
|
return await new Promise((resolve) => {
|
|
9693
9694
|
let settled = false;
|
|
@@ -9976,7 +9977,7 @@ const agentHandlers = {
|
|
|
9976
9977
|
});
|
|
9977
9978
|
}
|
|
9978
9979
|
}
|
|
9979
|
-
if (resolveSendPolicy({
|
|
9980
|
+
if (!(storePath && !oneShotPlan.internalSessionEffects) && resolveSendPolicy({
|
|
9980
9981
|
cfg,
|
|
9981
9982
|
entry: entry ? {
|
|
9982
9983
|
...entry,
|
|
@@ -9992,7 +9993,7 @@ const agentHandlers = {
|
|
|
9992
9993
|
}
|
|
9993
9994
|
if (storePath && !oneShotPlan.internalSessionEffects) {
|
|
9994
9995
|
let admissionCollision = false;
|
|
9995
|
-
let
|
|
9996
|
+
let policyDenied = false;
|
|
9996
9997
|
const persisted = await updateSessionStore(storePath, (store) => {
|
|
9997
9998
|
const held = store[canonicalSessionKey]?.sessionId;
|
|
9998
9999
|
if (admittedNewSessionId && held && held !== admittedNewSessionId) {
|
|
@@ -10015,7 +10016,7 @@ const agentHandlers = {
|
|
|
10015
10016
|
}
|
|
10016
10017
|
}
|
|
10017
10018
|
const effectiveEntry = source ? mergeSessionEntry(source, stripUndefinedEntryFields({
|
|
10018
|
-
sessionId: nextEntryPatch.sessionId,
|
|
10019
|
+
sessionId: admittedNewSessionId ?? (source.sessionId ? void 0 : nextEntryPatch.sessionId),
|
|
10019
10020
|
updatedAt: nextEntryPatch.updatedAt,
|
|
10020
10021
|
spawnedBy: nextEntryPatch.spawnedBy,
|
|
10021
10022
|
channel: source.channel ? void 0 : request.channel?.trim() || void 0,
|
|
@@ -10030,12 +10031,17 @@ const agentHandlers = {
|
|
|
10030
10031
|
}));
|
|
10031
10032
|
if (resolveSendPolicy({
|
|
10032
10033
|
cfg,
|
|
10033
|
-
entry:
|
|
10034
|
+
entry: source ? {
|
|
10035
|
+
...source,
|
|
10036
|
+
actor: source.actor ?? routeStampCandidate
|
|
10037
|
+
} : {
|
|
10038
|
+
...effectiveEntry,
|
|
10039
|
+
channel: entry?.channel,
|
|
10040
|
+
chatType: entry?.chatType,
|
|
10041
|
+
actor: entry?.actor ?? routeStampCandidate
|
|
10042
|
+
},
|
|
10034
10043
|
sessionKey: canonicalKey
|
|
10035
|
-
}) === "deny")
|
|
10036
|
-
policyRecheckDenied = true;
|
|
10037
|
-
return;
|
|
10038
|
-
}
|
|
10044
|
+
}) === "deny") throw new SessionSendPolicyDenied();
|
|
10039
10045
|
pruneLegacyStoreKeys({
|
|
10040
10046
|
store,
|
|
10041
10047
|
canonicalKey: target.canonicalKey,
|
|
@@ -10043,8 +10049,11 @@ const agentHandlers = {
|
|
|
10043
10049
|
});
|
|
10044
10050
|
store[canonicalSessionKey] = effectiveEntry;
|
|
10045
10051
|
return effectiveEntry;
|
|
10052
|
+
}).catch((err) => {
|
|
10053
|
+
if (!(err instanceof SessionSendPolicyDenied)) throw err;
|
|
10054
|
+
policyDenied = true;
|
|
10046
10055
|
});
|
|
10047
|
-
if (
|
|
10056
|
+
if (policyDenied) {
|
|
10048
10057
|
respond(false, void 0, errorShape(ErrorCodes.INVALID_REQUEST, "send blocked by session policy"));
|
|
10049
10058
|
return;
|
|
10050
10059
|
}
|
|
@@ -10053,6 +10062,7 @@ const agentHandlers = {
|
|
|
10053
10062
|
return;
|
|
10054
10063
|
}
|
|
10055
10064
|
sessionEntry = persisted;
|
|
10065
|
+
resolvedSessionId = persisted?.sessionId ?? resolvedSessionId;
|
|
10056
10066
|
}
|
|
10057
10067
|
if (!oneShotPlan.internalSessionEffects && (canonicalSessionKey === mainSessionKey || canonicalSessionKey === "global")) {
|
|
10058
10068
|
context.addChatRun(idem, {
|
|
@@ -175,7 +175,7 @@ import { h as normalizeUpdateChannel, l as DEFAULT_PACKAGE_CHANNEL, n as checkUp
|
|
|
175
175
|
import { t as reconcileBundledInstalls } from "./reconcile-bundled-C2O6l6xl.js";
|
|
176
176
|
import { a as resolveCommandSecretsFromActiveRuntimeSnapshot, i as prepareSecretsRuntimeSnapshot, n as clearSecretsRuntimeSnapshot, r as getActiveSecretsRuntimeSnapshot, t as activateSecretsRuntimeSnapshot } from "./runtime-C6jPY8mC.js";
|
|
177
177
|
import "./onboarding.secret-input-CGZRLs69.js";
|
|
178
|
-
import { t as runOnboardingWizard } from "./onboarding-
|
|
178
|
+
import { t as runOnboardingWizard } from "./onboarding-C1f94rh1.js";
|
|
179
179
|
import { a as CONTROL_UI_V2_SERVICE_NAME, i as webBundleMissingMessage, n as buildUserClientRuntimeConfig, o as buildControlUiV2RuntimeConfig, r as resolvePackagedWebBundleRootSync, t as USER_CLIENT_ID } from "./runtime-config-C3elfZ8o.js";
|
|
180
180
|
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-BnRCjqCx.js";
|
|
181
181
|
import { a as readChatHistoryPage, c as REPLY_CONTEXT_CUSTOM_TYPE, d as admitUiActionHead, f as bindUiActionTurn, g as UiSurfaceRefSchema, h as assertValidParams, i as decodeHistoryCursor, l as buildReplyContextPayload, m as unsubscribeSessionChanges, o as resolveDbLeafEntryId, p as reserveUiActionAdmission, r as InvalidHistoryCursorError, s as resolveDbMessageEntryById, t as sessionsHandlers, u as UI_ACTION_CUSTOM_TYPE } from "./sessions-C2ZQ1A-F.js";
|
|
@@ -9690,6 +9690,7 @@ function isGatewayErrorShape(value) {
|
|
|
9690
9690
|
function stripUndefinedEntryFields(patch) {
|
|
9691
9691
|
return Object.fromEntries(Object.entries(patch).filter(([, value]) => value !== void 0));
|
|
9692
9692
|
}
|
|
9693
|
+
var SessionSendPolicyDenied = class extends Error {};
|
|
9693
9694
|
async function runSessionResetFromAgent(params) {
|
|
9694
9695
|
return await new Promise((resolve) => {
|
|
9695
9696
|
let settled = false;
|
|
@@ -9978,7 +9979,7 @@ const agentHandlers = {
|
|
|
9978
9979
|
});
|
|
9979
9980
|
}
|
|
9980
9981
|
}
|
|
9981
|
-
if (resolveSendPolicy({
|
|
9982
|
+
if (!(storePath && !oneShotPlan.internalSessionEffects) && resolveSendPolicy({
|
|
9982
9983
|
cfg,
|
|
9983
9984
|
entry: entry ? {
|
|
9984
9985
|
...entry,
|
|
@@ -9994,7 +9995,7 @@ const agentHandlers = {
|
|
|
9994
9995
|
}
|
|
9995
9996
|
if (storePath && !oneShotPlan.internalSessionEffects) {
|
|
9996
9997
|
let admissionCollision = false;
|
|
9997
|
-
let
|
|
9998
|
+
let policyDenied = false;
|
|
9998
9999
|
const persisted = await updateSessionStore(storePath, (store) => {
|
|
9999
10000
|
const held = store[canonicalSessionKey]?.sessionId;
|
|
10000
10001
|
if (admittedNewSessionId && held && held !== admittedNewSessionId) {
|
|
@@ -10017,7 +10018,7 @@ const agentHandlers = {
|
|
|
10017
10018
|
}
|
|
10018
10019
|
}
|
|
10019
10020
|
const effectiveEntry = source ? mergeSessionEntry(source, stripUndefinedEntryFields({
|
|
10020
|
-
sessionId: nextEntryPatch.sessionId,
|
|
10021
|
+
sessionId: admittedNewSessionId ?? (source.sessionId ? void 0 : nextEntryPatch.sessionId),
|
|
10021
10022
|
updatedAt: nextEntryPatch.updatedAt,
|
|
10022
10023
|
spawnedBy: nextEntryPatch.spawnedBy,
|
|
10023
10024
|
channel: source.channel ? void 0 : request.channel?.trim() || void 0,
|
|
@@ -10032,12 +10033,17 @@ const agentHandlers = {
|
|
|
10032
10033
|
}));
|
|
10033
10034
|
if (resolveSendPolicy({
|
|
10034
10035
|
cfg,
|
|
10035
|
-
entry:
|
|
10036
|
+
entry: source ? {
|
|
10037
|
+
...source,
|
|
10038
|
+
actor: source.actor ?? routeStampCandidate
|
|
10039
|
+
} : {
|
|
10040
|
+
...effectiveEntry,
|
|
10041
|
+
channel: entry?.channel,
|
|
10042
|
+
chatType: entry?.chatType,
|
|
10043
|
+
actor: entry?.actor ?? routeStampCandidate
|
|
10044
|
+
},
|
|
10036
10045
|
sessionKey: canonicalKey
|
|
10037
|
-
}) === "deny")
|
|
10038
|
-
policyRecheckDenied = true;
|
|
10039
|
-
return;
|
|
10040
|
-
}
|
|
10046
|
+
}) === "deny") throw new SessionSendPolicyDenied();
|
|
10041
10047
|
pruneLegacyStoreKeys({
|
|
10042
10048
|
store,
|
|
10043
10049
|
canonicalKey: target.canonicalKey,
|
|
@@ -10045,8 +10051,11 @@ const agentHandlers = {
|
|
|
10045
10051
|
});
|
|
10046
10052
|
store[canonicalSessionKey] = effectiveEntry;
|
|
10047
10053
|
return effectiveEntry;
|
|
10054
|
+
}).catch((err) => {
|
|
10055
|
+
if (!(err instanceof SessionSendPolicyDenied)) throw err;
|
|
10056
|
+
policyDenied = true;
|
|
10048
10057
|
});
|
|
10049
|
-
if (
|
|
10058
|
+
if (policyDenied) {
|
|
10050
10059
|
respond(false, void 0, errorShape(ErrorCodes.INVALID_REQUEST, "send blocked by session policy"));
|
|
10051
10060
|
return;
|
|
10052
10061
|
}
|
|
@@ -10055,6 +10064,7 @@ const agentHandlers = {
|
|
|
10055
10064
|
return;
|
|
10056
10065
|
}
|
|
10057
10066
|
sessionEntry = persisted;
|
|
10067
|
+
resolvedSessionId = persisted?.sessionId ?? resolvedSessionId;
|
|
10058
10068
|
}
|
|
10059
10069
|
if (!oneShotPlan.internalSessionEffects && (canonicalSessionKey === mainSessionKey || canonicalSessionKey === "global")) {
|
|
10060
10070
|
context.addChatRun(idem, {
|
|
@@ -1,7 +1,7 @@
|
|
|
1
|
-
import { D as runExec } from "./agent-scope-
|
|
1
|
+
import { D as runExec } from "./agent-scope-DUbhjnHb.js";
|
|
2
2
|
import os from "node:os";
|
|
3
3
|
import path from "node:path";
|
|
4
|
-
import
|
|
4
|
+
import fsp from "node:fs/promises";
|
|
5
5
|
import { fileTypeFromBuffer } from "file-type";
|
|
6
6
|
|
|
7
7
|
//#region src/media/constants.ts
|
|
@@ -233,11 +233,11 @@ function readJpegExifOrientation(buffer) {
|
|
|
233
233
|
return null;
|
|
234
234
|
}
|
|
235
235
|
async function withTempDir(fn) {
|
|
236
|
-
const dir = await
|
|
236
|
+
const dir = await fsp.mkdtemp(path.join(os.tmpdir(), "openclaw-img-"));
|
|
237
237
|
try {
|
|
238
238
|
return await fn(dir);
|
|
239
239
|
} finally {
|
|
240
|
-
await
|
|
240
|
+
await fsp.rm(dir, {
|
|
241
241
|
recursive: true,
|
|
242
242
|
force: true
|
|
243
243
|
}).catch(() => {});
|
|
@@ -246,7 +246,7 @@ async function withTempDir(fn) {
|
|
|
246
246
|
async function sipsMetadataFromBuffer(buffer) {
|
|
247
247
|
return await withTempDir(async (dir) => {
|
|
248
248
|
const input = path.join(dir, "in.img");
|
|
249
|
-
await
|
|
249
|
+
await fsp.writeFile(input, buffer);
|
|
250
250
|
const { stdout } = await runExec("/usr/bin/sips", [
|
|
251
251
|
"-g",
|
|
252
252
|
"pixelWidth",
|
|
@@ -274,7 +274,7 @@ async function sipsResizeToJpeg(params) {
|
|
|
274
274
|
return await withTempDir(async (dir) => {
|
|
275
275
|
const input = path.join(dir, "in.img");
|
|
276
276
|
const output = path.join(dir, "out.jpg");
|
|
277
|
-
await
|
|
277
|
+
await fsp.writeFile(input, params.buffer);
|
|
278
278
|
await runExec("/usr/bin/sips", [
|
|
279
279
|
"-Z",
|
|
280
280
|
String(Math.max(1, Math.round(params.maxSide))),
|
|
@@ -291,14 +291,14 @@ async function sipsResizeToJpeg(params) {
|
|
|
291
291
|
timeoutMs: 2e4,
|
|
292
292
|
maxBuffer: 1024 * 1024
|
|
293
293
|
});
|
|
294
|
-
return await
|
|
294
|
+
return await fsp.readFile(output);
|
|
295
295
|
});
|
|
296
296
|
}
|
|
297
297
|
async function sipsConvertToJpeg(buffer) {
|
|
298
298
|
return await withTempDir(async (dir) => {
|
|
299
299
|
const input = path.join(dir, "in.heic");
|
|
300
300
|
const output = path.join(dir, "out.jpg");
|
|
301
|
-
await
|
|
301
|
+
await fsp.writeFile(input, buffer);
|
|
302
302
|
await runExec("/usr/bin/sips", [
|
|
303
303
|
"-s",
|
|
304
304
|
"format",
|
|
@@ -310,7 +310,7 @@ async function sipsConvertToJpeg(buffer) {
|
|
|
310
310
|
timeoutMs: 2e4,
|
|
311
311
|
maxBuffer: 1024 * 1024
|
|
312
312
|
});
|
|
313
|
-
return await
|
|
313
|
+
return await fsp.readFile(output);
|
|
314
314
|
});
|
|
315
315
|
}
|
|
316
316
|
async function getImageMetadata(buffer) {
|
|
@@ -361,7 +361,7 @@ async function sipsApplyOrientation(buffer, orientation) {
|
|
|
361
361
|
return await withTempDir(async (dir) => {
|
|
362
362
|
const input = path.join(dir, "in.jpg");
|
|
363
363
|
const output = path.join(dir, "out.jpg");
|
|
364
|
-
await
|
|
364
|
+
await fsp.writeFile(input, buffer);
|
|
365
365
|
await runExec("/usr/bin/sips", [
|
|
366
366
|
...ops,
|
|
367
367
|
input,
|
|
@@ -371,7 +371,7 @@ async function sipsApplyOrientation(buffer, orientation) {
|
|
|
371
371
|
timeoutMs: 2e4,
|
|
372
372
|
maxBuffer: 1024 * 1024
|
|
373
373
|
});
|
|
374
|
-
return await
|
|
374
|
+
return await fsp.readFile(output);
|
|
375
375
|
});
|
|
376
376
|
}
|
|
377
377
|
async function resizeToJpeg(params) {
|
package/dist/index.js
CHANGED
|
@@ -125,7 +125,7 @@ import { t as isMainModule } from "./is-main-B3FbWStI.js";
|
|
|
125
125
|
import { t as ensureOpenClawCliOnPath } from "./path-env-DnW5y1gm.js";
|
|
126
126
|
import { t as assertSupportedRuntime } from "./runtime-guard-BSmtNHNu.js";
|
|
127
127
|
import "./ports-BP-0f1b5.js";
|
|
128
|
-
import { i as getCoreCliCommandsWithSubcommands, n as setProgramContext, o as registerProgramCommands, s as getSubCliCommandsWithSubcommands } from "./program-context-
|
|
128
|
+
import { i as getCoreCliCommandsWithSubcommands, n as setProgramContext, o as registerProgramCommands, s as getSubCliCommandsWithSubcommands } from "./program-context-BM_flY1J.js";
|
|
129
129
|
import "./plugin-registry-CJ-2Wr1t.js";
|
|
130
130
|
import { n as resolveCliChannelOptions } from "./channel-options-Bx_pFXKx.js";
|
|
131
131
|
import process$1 from "node:process";
|
|
@@ -1,10 +1,10 @@
|
|
|
1
|
-
import { M as shouldLogVerbose, b as resolveUserPath, k as logVerbose } from "./subsystem-
|
|
2
|
-
import { o as readLocalFileSafely, t as SafeOpenError } from "./fs-safe-
|
|
3
|
-
import { a as hasAlphaChannel, c as detectMime, g as maxBytesForKind, l as extensionForMime, o as optimizeImageToPng, p as kindFromMime, r as convertHeicToJpeg, s as resizeToJpeg } from "./image-ops-
|
|
4
|
-
import { a as getDefaultMediaLocalRoots, n as fetchRemoteMedia } from "./fetch-
|
|
5
|
-
import { a as chunkText } from "./chunk-
|
|
1
|
+
import { M as shouldLogVerbose, b as resolveUserPath, k as logVerbose } from "./subsystem-B9soUuXQ.js";
|
|
2
|
+
import { o as readLocalFileSafely, t as SafeOpenError } from "./fs-safe-BH37Yhl8.js";
|
|
3
|
+
import { a as hasAlphaChannel, c as detectMime, g as maxBytesForKind, l as extensionForMime, o as optimizeImageToPng, p as kindFromMime, r as convertHeicToJpeg, s as resizeToJpeg } from "./image-ops-C54shfkj.js";
|
|
4
|
+
import { a as getDefaultMediaLocalRoots, n as fetchRemoteMedia } from "./fetch-TzOudNO4.js";
|
|
5
|
+
import { a as chunkText } from "./chunk-50mU2Avf.js";
|
|
6
6
|
import path from "node:path";
|
|
7
|
-
import
|
|
7
|
+
import fsp from "node:fs/promises";
|
|
8
8
|
import { fileURLToPath } from "node:url";
|
|
9
9
|
import MarkdownIt from "markdown-it";
|
|
10
10
|
|
|
@@ -36,7 +36,7 @@ async function assertLocalMediaAllowed(mediaPath, localRoots) {
|
|
|
36
36
|
const roots = localRoots ?? getDefaultLocalRoots();
|
|
37
37
|
let resolved;
|
|
38
38
|
try {
|
|
39
|
-
resolved = await
|
|
39
|
+
resolved = await fsp.realpath(mediaPath);
|
|
40
40
|
} catch {
|
|
41
41
|
resolved = path.resolve(mediaPath);
|
|
42
42
|
}
|
|
@@ -53,7 +53,7 @@ async function assertLocalMediaAllowed(mediaPath, localRoots) {
|
|
|
53
53
|
for (const root of roots) {
|
|
54
54
|
let resolvedRoot;
|
|
55
55
|
try {
|
|
56
|
-
resolvedRoot = await
|
|
56
|
+
resolvedRoot = await fsp.realpath(root);
|
|
57
57
|
} catch {
|
|
58
58
|
resolvedRoot = path.resolve(root);
|
|
59
59
|
}
|