decocms 2.304.1 → 2.304.2
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/client/assets/{AlertCircle-Bmjr0ClA.js → AlertCircle-9O6VvAfH.js} +1 -1
- package/dist/client/assets/{ArrowNarrowLeft-CThwX0q-.js → ArrowNarrowLeft-CG2ODQbf.js} +1 -1
- package/dist/client/assets/{ArrowUpRight-B7vTMj1u.js → ArrowUpRight-C7hCAEbW.js} +1 -1
- package/dist/client/assets/{CheckCircle-CNaz4scY.js → CheckCircle-BbvAf9Bo.js} +1 -1
- package/dist/client/assets/{ChevronDown-BMpzZvgp.js → ChevronDown-DTujp_Ze.js} +1 -1
- package/dist/client/assets/{ChevronRight-B0WDiR9g.js → ChevronRight-DmfKIycz.js} +1 -1
- package/dist/client/assets/{ChevronUp-C1KppMC5.js → ChevronUp-k_xkdO-G.js} +1 -1
- package/dist/client/assets/{Container-DxKKEmNe.js → Container-Dwj81gCC.js} +1 -1
- package/dist/client/assets/{DotsVertical-CRTfJ6MH.js → DotsVertical-BSgCnoHf.js} +1 -1
- package/dist/client/assets/{LinkExternal01-DcUPNTey.js → LinkExternal01-DceZ2oEY.js} +1 -1
- package/dist/client/assets/{Lock01-CwYOwvXR.js → Lock01-NMXz4ptn.js} +1 -1
- package/dist/client/assets/{Palette-c4ovbTBC.js → Palette-dLUnn7-k.js} +1 -1
- package/dist/client/assets/{Play-BzawbqMW.js → Play-DBJO09gj.js} +1 -1
- package/dist/client/assets/{Plus-CZq1C4jM.js → Plus-D5DLeNpq.js} +1 -1
- package/dist/client/assets/{RefreshCcw01-Dwpnc1qZ.js → RefreshCcw01-B6WkaYVq.js} +1 -1
- package/dist/client/assets/{SearchMd-BYUE-oTe.js → SearchMd-CCDT-gCm.js} +1 -1
- package/dist/client/assets/{Settings02-FFAtt7kb.js → Settings02-CnaVYpiu.js} +1 -1
- package/dist/client/assets/{Shield01-CZOC16WM.js → Shield01-Bqcf2bTH.js} +1 -1
- package/dist/client/assets/{Star01-GaFk6Xa_.js → Star01-SeWnXAup.js} +1 -1
- package/dist/client/assets/{Sun-_nS1eHVw.js → Sun-0NoCfqDs.js} +1 -1
- package/dist/client/assets/{Tool01-CpBRL57v.js → Tool01-CNtQXBy4.js} +1 -1
- package/dist/client/assets/{Trash01-CKEJHaXR.js → Trash01-UTo49HDl.js} +1 -1
- package/dist/client/assets/{User01-BO3afenP.js → User01-CVlz7odd.js} +1 -1
- package/dist/client/assets/{Users03-B2dn7j_S.js → Users03-X35A5ADD.js} +1 -1
- package/dist/client/assets/{X-BY4Cj76l.js → X-CeTLIvc6.js} +1 -1
- package/dist/client/assets/{XCircle-H-paIGFm.js → XCircle-DtPL7zg0.js} +1 -1
- package/dist/client/assets/{XClose-ihnqmUfp.js → XClose-C2Cy4nwy.js} +1 -1
- package/dist/client/assets/{Zap-BafO525R.js → Zap-D1n1nJno.js} +1 -1
- package/dist/client/assets/{ZapSquare-BFMe5Mv9.js → ZapSquare-Wt7N_ZY-.js} +1 -1
- package/dist/client/assets/{accordion-DJ9g6lbv.js → accordion-DPxobU6V.js} +1 -1
- package/dist/client/assets/{agent-icon-3dvecirS.js → agent-icon-rfR6G8ak.js} +1 -1
- package/dist/client/assets/{agents-list-C3oLVAtv.js → agents-list-CSAgVNG9.js} +1 -1
- package/dist/client/assets/ai-providers-BWpsfrqy.js +1 -0
- package/dist/client/assets/{alert-dialog-BaDMThMD.js → alert-dialog-FP3uTtqS.js} +1 -1
- package/dist/client/assets/{auth-catchall-DyAp9W_K.js → auth-catchall-x57v3jqK.js} +1 -1
- package/dist/client/assets/{automation-list-row-BZ5pc5Hf.js → automation-list-row-DG25MDBi.js} +1 -1
- package/dist/client/assets/{automations-NFa1s-Bh.js → automations-Dvzmj3cQ.js} +1 -1
- package/dist/client/assets/{avatar-D8_rUBWz.js → avatar-jxKfgW3P.js} +1 -1
- package/dist/client/assets/{badge-DdmMZRNT.js → badge-DSbZ2xYh.js} +1 -1
- package/dist/client/assets/{brand-context-Bze-d_ZO.js → brand-context-BnZBvexH.js} +1 -1
- package/dist/client/assets/{card-BsUopeoI.js → card-DxIIO9TM.js} +1 -1
- package/dist/client/assets/{chat-context-DfbXSilM.js → chat-context-BFu5v0t2.js} +1 -1
- package/dist/client/assets/{checkbox-D9P4N8hw.js → checkbox-BC2-36Db.js} +1 -1
- package/dist/client/assets/{collection-detail-D-8PAzvK.js → collection-detail-CD-QyUWU.js} +1 -1
- package/dist/client/assets/{collection-display-button-B0aY08zq.js → collection-display-button-C_CtGElp.js} +1 -1
- package/dist/client/assets/{collection-search-C4AgxGiz.js → collection-search-C4byKAjw.js} +1 -1
- package/dist/client/assets/{collection-search-Dlp7iCDd.js → collection-search-D4u3PzGA.js} +1 -1
- package/dist/client/assets/{collection-table-wrapper-CQMKVKSx.js → collection-table-wrapper-C_-94CeK.js} +1 -1
- package/dist/client/assets/{collection-tabs-C9tMEUhv.js → collection-tabs-gMfs6Afq.js} +1 -1
- package/dist/client/assets/{collections-BDAFtlmY.js → collections-D7GHHPCg.js} +1 -1
- package/dist/client/assets/{command-CQ2qBZMm.js → command-rz34Ys0W.js} +1 -1
- package/dist/client/assets/{connection-card-DwOSEuv8.js → connection-card-B9DKOCXt.js} +1 -1
- package/dist/client/assets/{connection-detail-CawEIpU7.js → connection-detail-DsF7Nr0a.js} +1 -1
- package/dist/client/assets/{connection-form-helpers-D2ynuhjT.js → connection-form-helpers-Dr9CZ_1s.js} +1 -1
- package/dist/client/assets/{connections-CpSP7u11.js → connections-C8H8V7wn.js} +1 -1
- package/dist/client/assets/{constants-8SUUmfde.js → constants-DzBa_pVv.js} +1 -1
- package/dist/client/assets/{constants-dX65r6Zc.js → constants-ZacFr8c8.js} +1 -1
- package/dist/client/assets/{dialog-C09MDdtC.js → dialog-DJXnl186.js} +1 -1
- package/dist/client/assets/{domain-settings-C8zQRIa5.js → domain-settings-B6gsJfGm.js} +1 -1
- package/dist/client/assets/{drawer-CgP97_zn.js → drawer-CKRLj2vr.js} +1 -1
- package/dist/client/assets/{dropdown-menu-BUQ2j94Z.js → dropdown-menu-BxJLGp-F.js} +1 -1
- package/dist/client/assets/{dynamic-plugin-layout-D01hx5Sr.js → dynamic-plugin-layout-EgA1-G6Q.js} +1 -1
- package/dist/client/assets/{empty-state-CDSs8u5J.js → empty-state-DP9kvNKh.js} +1 -1
- package/dist/client/assets/{empty-state-CnWmYGyJ.js → empty-state-VyFb4d0_.js} +1 -1
- package/dist/client/assets/{extract-connection-data-BksUB8IU.js → extract-connection-data-DV87vwuC.js} +1 -1
- package/dist/client/assets/{features-DbY_j0po.js → features-CKG88lyc.js} +1 -1
- package/dist/client/assets/{form-D7lwTpan.js → form-Crn7uG02.js} +1 -1
- package/dist/client/assets/{general-ClAAY_hM.js → general-DN5VLZqF.js} +1 -1
- package/dist/client/assets/{index-Cqw0FyHL.js → index-B3pJqV9Y.js} +2 -2
- package/dist/client/assets/{index-BHEM4T0P.js → index-B6JiqoZb.js} +1 -1
- package/dist/client/assets/index-B8vmm8Mh.js +1 -0
- package/dist/client/assets/{index-CKVeIfog.js → index-BAGdGx2X.js} +1 -1
- package/dist/client/assets/{index-BfFMVpP_.js → index-BQYge0uD.js} +1 -1
- package/dist/client/assets/{index-zf-rleQN.js → index-BUmhrApd.js} +15 -15
- package/dist/client/assets/{index-C_Adeshs.js → index-Bw6Vawnl.js} +1 -1
- package/dist/client/assets/{index-8uCGLU1q.js → index-C7apxcAd.js} +1 -1
- package/dist/client/assets/{index-BfFwypL5.js → index-CD0IZENy.js} +1 -1
- package/dist/client/assets/{index-DHwV9q9X.js → index-Cg6ppcFr.js} +1 -1
- package/dist/client/assets/{index-stoVKXMu.js → index-Crppsl-8.js} +1 -1
- package/dist/client/assets/{index-B7KZ-vdQ.js → index-DMLydKBU.js} +1 -1
- package/dist/client/assets/{index-DH_JeBfm.js → index-DPV7Oao4.js} +1 -1
- package/dist/client/assets/{index-DRij5nf9.js → index-DkUpgHdS.js} +1 -1
- package/dist/client/assets/{index-BT2v6iP4.js → index-Dql_sPLp.js} +1 -1
- package/dist/client/assets/{index-Eg0bSiJp.js → index-vUSuyfsm.js} +1 -1
- package/dist/client/assets/{infiniteQueryObserver-DdGFkAXb.js → infiniteQueryObserver-FXpIkCb9.js} +1 -1
- package/dist/client/assets/{input-Co0HW9uN.js → input-DylFJb_s.js} +1 -1
- package/dist/client/assets/{integration-icon-DmwSpOA7.js → integration-icon-BrsREj94.js} +1 -1
- package/dist/client/assets/{label-CeKVWPbr.js → label-BMcf8C3G.js} +1 -1
- package/dist/client/assets/{layout-Tnq2i3zg.js → layout-Dp2Exmc7.js} +1 -1
- package/dist/client/assets/{lean-canvas-recruit-modal-BU3z415J.js → lean-canvas-recruit-modal-DrBzPrQ5.js} +1 -1
- package/dist/client/assets/{login-CWTb0-fH.js → login-B4OITSYv.js} +1 -1
- package/dist/client/assets/{members-Bj1Fn746.js → members-CyDwQ7ZL.js} +1 -1
- package/dist/client/assets/{monaco-editor-qXNTtuH2.js → monaco-editor-CQLG9APn.js} +1 -1
- package/dist/client/assets/{monitoring-stats-row-yM4e_YZD.js → monitoring-stats-row-Mv3iWLF5.js} +1 -1
- package/dist/client/assets/{oauth-callback-CdB6DJDA.js → oauth-callback-D86cP5gF.js} +1 -1
- package/dist/client/assets/{oauth-callback-ai-provider-BgDs3na5.js → oauth-callback-ai-provider-B2xTvzHM.js} +1 -1
- package/dist/client/assets/{onboarding-DKG_eIr1.js → onboarding-BVoZJerk.js} +1 -1
- package/dist/client/assets/{org-layout-Dl85hYyi.js → org-layout-DvQadC0N.js} +1 -1
- package/dist/client/assets/{org-plugin-layout-BjSThyiS.js → org-plugin-layout-CZcCVNv6.js} +1 -1
- package/dist/client/assets/{pair-1dEJPLek.js → pair-D0CyaFmX.js} +1 -1
- package/dist/client/assets/{plugin-empty-state-Don4CmqW.js → plugin-empty-state-BYazHRIg.js} +1 -1
- package/dist/client/assets/{plugin-header-B8c9MPqH.js → plugin-header-BNYKRXC9.js} +1 -1
- package/dist/client/assets/{plugin-layout-Cl6_YUJ2.js → plugin-layout-BWoK3Wuc.js} +1 -1
- package/dist/client/assets/{popover-vkIPXKru.js → popover-CUnDbgJ2.js} +1 -1
- package/dist/client/assets/{profile-Biqh2ggJ.js → profile-CzybNlff.js} +1 -1
- package/dist/client/assets/{project-app-view-DSY0SCnx.js → project-app-view-CJwFT9Ix.js} +1 -1
- package/dist/client/assets/registry-Dfum406p.js +2 -0
- package/dist/client/assets/{registry-layout-BHVIlZsW.js → registry-layout-DRAqgrZS.js} +1 -1
- package/dist/client/assets/{required-auth-layout-1Kf8B8P9.js → required-auth-layout-BqWuvVf2.js} +1 -1
- package/dist/client/assets/{reset-password-CZU-BGGi.js → reset-password-kytluBmt.js} +1 -1
- package/dist/client/assets/{roles-V0vn58qZ.js → roles-Ds1RHbZR.js} +1 -1
- package/dist/client/assets/{scroll-area-BF4q7Ra2.js → scroll-area-3cZxZboM.js} +1 -1
- package/dist/client/assets/{search-input-VyjPISbx.js → search-input-BmVPc4RV.js} +1 -1
- package/dist/client/assets/{select-rxK-8b1N.js → select-FyLwzc48.js} +1 -1
- package/dist/client/assets/{select-model-CGzdU4-Q.js → select-model-67avCsXE.js} +1 -1
- package/dist/client/assets/{settings-layout-Bc0g8WOL.js → settings-layout-BqPzbZI_.js} +1 -1
- package/dist/client/assets/{settings-section-BsEmPevi.js → settings-section-XEp6UNJA.js} +1 -1
- package/dist/client/assets/{shell-layout-BhC55LLx.js → shell-layout-BiL6-6W9.js} +1 -1
- package/dist/client/assets/{skeleton-y3O4xgdS.js → skeleton-BWYBZf7m.js} +1 -1
- package/dist/client/assets/{sso-Di8r0acw.js → sso-CuSDTfdG.js} +1 -1
- package/dist/client/assets/{store-B9Zqk-bV.js → store-CHGpyb-m.js} +1 -1
- package/dist/client/assets/store-registry-BtOOqHJ7.js +2 -0
- package/dist/client/assets/{switch-QErK7wwO.js → switch-BL_ICveF.js} +1 -1
- package/dist/client/assets/{table-CdyHz2p3.js → table-Cri7VAeb.js} +1 -1
- package/dist/client/assets/{tabs-CMFQWy73.js → tabs-DGNL4gIl.js} +1 -1
- package/dist/client/assets/{task-status-D0-O3Mr3.js → task-status-BsVHYvla.js} +1 -1
- package/dist/client/assets/{textarea-CxEqGfix.js → textarea-B1YgZKSW.js} +1 -1
- package/dist/client/assets/{toggle-group-AZijjpe8.js → toggle-group-cD20__YI.js} +1 -1
- package/dist/client/assets/{tools-list-DjWGeJBp.js → tools-list-B1QLvdRl.js} +1 -1
- package/dist/client/assets/{tooltip-D_3qm7UK.js → tooltip-DZIo6YZX.js} +1 -1
- package/dist/client/assets/{types-D1Wl9DNB.js → types-PzC3rVhv.js} +1 -1
- package/dist/client/assets/{use-ai-providers-Cah1GZeX.js → use-ai-providers-Dsmx4U8L.js} +1 -1
- package/dist/client/assets/{use-collections-DrmuHy93.js → use-collections-DcamXjGg.js} +1 -1
- package/dist/client/assets/{use-connection-CyjN1GtI.js → use-connection-CesZaYzK.js} +1 -1
- package/dist/client/assets/{use-copy-SV4GW98D.js → use-copy-Chq89Uhn.js} +1 -1
- package/dist/client/assets/{use-create-virtual-mcp-Y9XZZ8XI.js → use-create-virtual-mcp-B0T0urBu.js} +1 -1
- package/dist/client/assets/{use-decopilot-events-Drlt36bF.js → use-decopilot-events-BCUB3DhH.js} +1 -1
- package/dist/client/assets/{use-delete-connection-B955BI0e.js → use-delete-connection-CqpWV7PJ.js} +1 -1
- package/dist/client/assets/{use-infinite-scroll-BRF66BxZ.js → use-infinite-scroll-D6FvdXof.js} +1 -1
- package/dist/client/assets/{use-list-state-C6Di0aCP.js → use-list-state-D_NiaDpI.js} +1 -1
- package/dist/client/assets/{use-mcp-tools-DyKI35iZ.js → use-mcp-tools-oIEGFyCT.js} +1 -1
- package/dist/client/assets/{use-members-mnYCaL5_.js → use-members-C3jq0flu.js} +1 -1
- package/dist/client/assets/{use-navigate-to-agent-DrWD9J71.js → use-navigate-to-agent-DNFfIi8H.js} +1 -1
- package/dist/client/assets/{use-org-auth-client-HeIerkrz.js → use-org-auth-client-BniQTMze.js} +1 -1
- package/dist/client/assets/{use-org-sso-BuTv1ygf.js → use-org-sso-SjyAvOWA.js} +1 -1
- package/dist/client/assets/{use-organization-roles-ChLRcseg.js → use-organization-roles-CLHZHSel.js} +1 -1
- package/dist/client/assets/{use-organization-settings-EfxM66aZ.js → use-organization-settings-C8pMgrh-.js} +1 -1
- package/dist/client/assets/{use-registry-connections-fltIDY82.js → use-registry-connections-CPKTZHrX.js} +1 -1
- package/dist/client/assets/{use-status-sounds-BRxCV6Ea.js → use-status-sounds-BYyaVEdO.js} +1 -1
- package/dist/client/assets/{use-tasks-DEh_VRON.js → use-tasks-D-yLjF43.js} +1 -1
- package/dist/client/assets/{use-view-mode-B3nY15Yz.js → use-view-mode-C06qcP9p.js} +1 -1
- package/dist/client/assets/{use-virtual-mcp-Bb04Uah7.js → use-virtual-mcp-CEUQCho1.js} +1 -1
- package/dist/client/assets/useInfiniteQuery-ANrroW8x.js +1 -0
- package/dist/client/assets/useSuspenseInfiniteQuery-CgFHp-eh.js +1 -0
- package/dist/client/assets/{user-ClafvvGL.js → user-DlFqYjZ6.js} +1 -1
- package/dist/client/assets/{view-mode-toggle-Im7J4smk.js → view-mode-toggle-CiYPbOW7.js} +1 -1
- package/dist/client/assets/{workflow-u6doascD.js → workflow-CYF9ayPN.js} +1 -1
- package/dist/client/assets/workflow-detail-DVsv_zWc.js +1 -0
- package/dist/client/index.html +1 -1
- package/dist/server/cli.js +1 -1
- package/dist/server/node_modules/get-east-asian-width/index.d.ts +60 -0
- package/dist/server/node_modules/get-east-asian-width/index.js +30 -0
- package/dist/server/node_modules/get-east-asian-width/lookup-data.js +18 -0
- package/dist/server/node_modules/get-east-asian-width/lookup.js +135 -0
- package/dist/server/node_modules/get-east-asian-width/package.json +71 -0
- package/dist/server/node_modules/get-east-asian-width/readme.md +65 -0
- package/dist/server/node_modules/get-east-asian-width/utilities.js +24 -0
- package/dist/server/node_modules/mimic-fn/index.d.ts +54 -0
- package/dist/server/node_modules/mimic-fn/index.js +13 -0
- package/dist/server/node_modules/mimic-fn/package.json +42 -0
- package/dist/server/node_modules/mimic-fn/readme.md +69 -0
- package/dist/server/node_modules/pg/README.md +95 -0
- package/dist/server/node_modules/pg/esm/index.mjs +20 -0
- package/dist/server/node_modules/pg/lib/client.js +743 -0
- package/dist/server/node_modules/pg/lib/connection-parameters.js +171 -0
- package/dist/server/node_modules/pg/lib/connection.js +221 -0
- package/dist/server/node_modules/pg/lib/crypto/cert-signatures.js +122 -0
- package/dist/server/node_modules/pg/lib/crypto/sasl.js +212 -0
- package/dist/server/node_modules/pg/lib/crypto/utils-legacy.js +43 -0
- package/dist/server/node_modules/pg/lib/crypto/utils-webcrypto.js +89 -0
- package/dist/server/node_modules/pg/lib/crypto/utils.js +9 -0
- package/dist/server/node_modules/pg/lib/defaults.js +91 -0
- package/dist/server/node_modules/pg/lib/index.js +73 -0
- package/dist/server/node_modules/pg/lib/native/client.js +323 -0
- package/dist/server/node_modules/pg/lib/native/index.js +2 -0
- package/dist/server/node_modules/pg/lib/native/query.js +165 -0
- package/dist/server/node_modules/pg/lib/query.js +252 -0
- package/dist/server/node_modules/pg/lib/result.js +109 -0
- package/dist/server/node_modules/pg/lib/stream.js +83 -0
- package/dist/server/node_modules/pg/lib/type-overrides.js +35 -0
- package/dist/server/node_modules/pg/lib/utils.js +217 -0
- package/dist/server/node_modules/pg/package.json +76 -0
- package/dist/server/node_modules/strip-ansi/index.d.ts +15 -0
- package/dist/server/node_modules/strip-ansi/index.js +19 -0
- package/dist/server/node_modules/{ansi-regex → strip-ansi}/package.json +18 -20
- package/dist/server/node_modules/strip-ansi/readme.md +37 -0
- package/package.json +1 -1
- package/dist/client/assets/ai-providers-BnFAoUUB.js +0 -1
- package/dist/client/assets/index-1cERBOeE.js +0 -1
- package/dist/client/assets/registry-B4DkMjbe.js +0 -2
- package/dist/client/assets/store-registry-RqxELDy6.js +0 -2
- package/dist/client/assets/useInfiniteQuery-CY4tnydB.js +0 -1
- package/dist/client/assets/useSuspenseInfiniteQuery-BFpIngH9.js +0 -1
- package/dist/client/assets/workflow-detail-Cr5QMF9R.js +0 -1
- package/dist/server/node_modules/ansi-regex/index.d.ts +0 -33
- package/dist/server/node_modules/ansi-regex/index.js +0 -14
- package/dist/server/node_modules/ansi-regex/readme.md +0 -66
- package/dist/server/node_modules/ansi-styles/index.d.ts +0 -236
- package/dist/server/node_modules/ansi-styles/index.js +0 -223
- package/dist/server/node_modules/ansi-styles/package.json +0 -54
- package/dist/server/node_modules/ansi-styles/readme.md +0 -173
- package/dist/server/node_modules/convert-to-spaces/dist/index.d.ts +0 -2
- package/dist/server/node_modules/convert-to-spaces/dist/index.js +0 -4
- package/dist/server/node_modules/convert-to-spaces/license +0 -21
- package/dist/server/node_modules/convert-to-spaces/package.json +0 -40
- package/dist/server/node_modules/convert-to-spaces/readme.md +0 -39
- package/dist/server/node_modules/emoji-regex/LICENSE-MIT.txt +0 -20
- package/dist/server/node_modules/emoji-regex/README.md +0 -107
- package/dist/server/node_modules/emoji-regex/index.d.ts +0 -3
- package/dist/server/node_modules/emoji-regex/index.js +0 -4
- package/dist/server/node_modules/emoji-regex/index.mjs +0 -4
- package/dist/server/node_modules/emoji-regex/package.json +0 -45
- package/dist/server/node_modules/environment/index.d.ts +0 -74
- package/dist/server/node_modules/environment/index.js +0 -47
- package/dist/server/node_modules/environment/license +0 -9
- package/dist/server/node_modules/environment/package.json +0 -74
- package/dist/server/node_modules/environment/readme.md +0 -94
- package/dist/server/node_modules/escape-string-regexp/index.d.ts +0 -18
- package/dist/server/node_modules/escape-string-regexp/index.js +0 -11
- package/dist/server/node_modules/escape-string-regexp/package.json +0 -43
- package/dist/server/node_modules/escape-string-regexp/readme.md +0 -29
- package/dist/server/node_modules/is-fullwidth-code-point/index.d.ts +0 -17
- package/dist/server/node_modules/is-fullwidth-code-point/index.js +0 -12
- package/dist/server/node_modules/is-fullwidth-code-point/license +0 -9
- package/dist/server/node_modules/is-fullwidth-code-point/package.json +0 -53
- package/dist/server/node_modules/is-fullwidth-code-point/readme.md +0 -31
- package/dist/server/node_modules/pg-cloudflare/README.md +0 -112
- package/dist/server/node_modules/pg-cloudflare/dist/empty.d.ts +0 -2
- package/dist/server/node_modules/pg-cloudflare/dist/empty.js +0 -6
- package/dist/server/node_modules/pg-cloudflare/dist/empty.js.map +0 -1
- package/dist/server/node_modules/pg-cloudflare/dist/index.d.ts +0 -31
- package/dist/server/node_modules/pg-cloudflare/dist/index.js +0 -152
- package/dist/server/node_modules/pg-cloudflare/dist/index.js.map +0 -1
- package/dist/server/node_modules/pg-cloudflare/esm/index.mjs +0 -3
- package/dist/server/node_modules/pg-cloudflare/package.json +0 -39
- package/dist/server/node_modules/pg-cloudflare/src/empty.ts +0 -3
- package/dist/server/node_modules/pg-cloudflare/src/index.ts +0 -166
- package/dist/server/node_modules/pg-cloudflare/src/types.d.ts +0 -25
- package/dist/server/node_modules/pg-connection-string/LICENSE +0 -21
- package/dist/server/node_modules/pg-connection-string/README.md +0 -105
- package/dist/server/node_modules/pg-connection-string/esm/index.mjs +0 -8
- package/dist/server/node_modules/pg-connection-string/index.d.ts +0 -36
- package/dist/server/node_modules/pg-connection-string/index.js +0 -231
- package/dist/server/node_modules/pg-connection-string/package.json +0 -52
- package/dist/server/node_modules/pg-int8/LICENSE +0 -13
- package/dist/server/node_modules/pg-int8/README.md +0 -16
- package/dist/server/node_modules/pg-int8/index.js +0 -100
- package/dist/server/node_modules/pg-int8/package.json +0 -24
- package/dist/server/node_modules/pg-pool/LICENSE +0 -21
- package/dist/server/node_modules/pg-pool/README.md +0 -357
- package/dist/server/node_modules/pg-pool/esm/index.mjs +0 -5
- package/dist/server/node_modules/pg-pool/index.js +0 -517
- package/dist/server/node_modules/pg-pool/package.json +0 -51
- package/dist/server/node_modules/pg-protocol/LICENSE +0 -21
- package/dist/server/node_modules/pg-protocol/README.md +0 -3
- package/dist/server/node_modules/pg-protocol/dist/b.d.ts +0 -1
- package/dist/server/node_modules/pg-protocol/dist/b.js +0 -23
- package/dist/server/node_modules/pg-protocol/dist/b.js.map +0 -1
- package/dist/server/node_modules/pg-protocol/dist/buffer-reader.d.ts +0 -15
- package/dist/server/node_modules/pg-protocol/dist/buffer-reader.js +0 -55
- package/dist/server/node_modules/pg-protocol/dist/buffer-reader.js.map +0 -1
- package/dist/server/node_modules/pg-protocol/dist/buffer-writer.d.ts +0 -16
- package/dist/server/node_modules/pg-protocol/dist/buffer-writer.js +0 -81
- package/dist/server/node_modules/pg-protocol/dist/buffer-writer.js.map +0 -1
- package/dist/server/node_modules/pg-protocol/dist/inbound-parser.test.d.ts +0 -1
- package/dist/server/node_modules/pg-protocol/dist/inbound-parser.test.js +0 -530
- package/dist/server/node_modules/pg-protocol/dist/inbound-parser.test.js.map +0 -1
- package/dist/server/node_modules/pg-protocol/dist/index.d.ts +0 -6
- package/dist/server/node_modules/pg-protocol/dist/index.js +0 -15
- package/dist/server/node_modules/pg-protocol/dist/index.js.map +0 -1
- package/dist/server/node_modules/pg-protocol/dist/messages.d.ts +0 -162
- package/dist/server/node_modules/pg-protocol/dist/messages.js +0 -160
- package/dist/server/node_modules/pg-protocol/dist/messages.js.map +0 -1
- package/dist/server/node_modules/pg-protocol/dist/outbound-serializer.test.d.ts +0 -1
- package/dist/server/node_modules/pg-protocol/dist/outbound-serializer.test.js +0 -252
- package/dist/server/node_modules/pg-protocol/dist/outbound-serializer.test.js.map +0 -1
- package/dist/server/node_modules/pg-protocol/dist/parser.d.ts +0 -24
- package/dist/server/node_modules/pg-protocol/dist/parser.js +0 -324
- package/dist/server/node_modules/pg-protocol/dist/parser.js.map +0 -1
- package/dist/server/node_modules/pg-protocol/dist/serializer.d.ts +0 -42
- package/dist/server/node_modules/pg-protocol/dist/serializer.js +0 -189
- package/dist/server/node_modules/pg-protocol/dist/serializer.js.map +0 -1
- package/dist/server/node_modules/pg-protocol/esm/index.js +0 -11
- package/dist/server/node_modules/pg-protocol/package.json +0 -45
- package/dist/server/node_modules/pg-protocol/src/b.ts +0 -25
- package/dist/server/node_modules/pg-protocol/src/buffer-reader.ts +0 -58
- package/dist/server/node_modules/pg-protocol/src/buffer-writer.ts +0 -85
- package/dist/server/node_modules/pg-protocol/src/inbound-parser.test.ts +0 -575
- package/dist/server/node_modules/pg-protocol/src/index.ts +0 -11
- package/dist/server/node_modules/pg-protocol/src/messages.ts +0 -262
- package/dist/server/node_modules/pg-protocol/src/outbound-serializer.test.ts +0 -276
- package/dist/server/node_modules/pg-protocol/src/parser.ts +0 -413
- package/dist/server/node_modules/pg-protocol/src/serializer.ts +0 -274
- package/dist/server/node_modules/pg-protocol/src/testing/buffer-list.ts +0 -67
- package/dist/server/node_modules/pg-protocol/src/testing/test-buffers.ts +0 -166
- package/dist/server/node_modules/pg-protocol/src/types/chunky.d.ts +0 -1
- package/dist/server/node_modules/pg-types/.travis.yml +0 -7
- package/dist/server/node_modules/pg-types/Makefile +0 -14
- package/dist/server/node_modules/pg-types/README.md +0 -75
- package/dist/server/node_modules/pg-types/index.d.ts +0 -137
- package/dist/server/node_modules/pg-types/index.js +0 -47
- package/dist/server/node_modules/pg-types/index.test-d.ts +0 -21
- package/dist/server/node_modules/pg-types/lib/arrayParser.js +0 -11
- package/dist/server/node_modules/pg-types/lib/binaryParsers.js +0 -257
- package/dist/server/node_modules/pg-types/lib/builtins.js +0 -73
- package/dist/server/node_modules/pg-types/lib/textParsers.js +0 -215
- package/dist/server/node_modules/pg-types/package.json +0 -42
- package/dist/server/node_modules/pg-types/test/index.js +0 -24
- package/dist/server/node_modules/pg-types/test/types.js +0 -597
- package/dist/server/node_modules/pgpass/README.md +0 -74
- package/dist/server/node_modules/pgpass/lib/helper.js +0 -233
- package/dist/server/node_modules/pgpass/lib/index.js +0 -23
- package/dist/server/node_modules/pgpass/package.json +0 -41
- package/dist/server/node_modules/postgres-array/index.d.ts +0 -4
- package/dist/server/node_modules/postgres-array/index.js +0 -97
- package/dist/server/node_modules/postgres-array/license +0 -21
- package/dist/server/node_modules/postgres-array/package.json +0 -35
- package/dist/server/node_modules/postgres-array/readme.md +0 -43
- package/dist/server/node_modules/postgres-bytea/index.js +0 -33
- package/dist/server/node_modules/postgres-bytea/license +0 -21
- package/dist/server/node_modules/postgres-bytea/package.json +0 -34
- package/dist/server/node_modules/postgres-bytea/readme.md +0 -34
- package/dist/server/node_modules/postgres-interval/index.d.ts +0 -20
- package/dist/server/node_modules/postgres-interval/index.js +0 -125
- package/dist/server/node_modules/postgres-interval/license +0 -21
- package/dist/server/node_modules/postgres-interval/package.json +0 -36
- package/dist/server/node_modules/postgres-interval/readme.md +0 -48
- package/dist/server/node_modules/split2/LICENSE +0 -13
- package/dist/server/node_modules/split2/README.md +0 -85
- package/dist/server/node_modules/split2/bench.js +0 -27
- package/dist/server/node_modules/split2/index.js +0 -141
- package/dist/server/node_modules/split2/package.json +0 -39
- package/dist/server/node_modules/split2/test.js +0 -409
- /package/dist/server/node_modules/{ansi-regex → get-east-asian-width}/license +0 -0
- /package/dist/server/node_modules/{escape-string-regexp → mimic-fn}/license +0 -0
- /package/dist/server/node_modules/{pg-cloudflare → pg}/LICENSE +0 -0
- /package/dist/server/node_modules/{ansi-styles → strip-ansi}/license +0 -0
package/dist/server/cli.js
CHANGED
|
@@ -1627,7 +1627,7 @@ AS SELECT
|
|
|
1627
1627
|
FROM monitoring_metrics
|
|
1628
1628
|
GROUP BY organization_id, name, bucket, connection_id, tool_name, status
|
|
1629
1629
|
`}),console.log("[clickhouse-schema] monitoring_metrics_rollup_1m_mv view ready")}finally{await G.close()}}catch(Y){console.error("[clickhouse-schema] Failed to create rollup DDL (queries will fall back to raw table):",Y)}}async function yA1(X){let Y={...process.env},G=c$1(X,Y),Q=G.settings.encryptionKey;console.log(`[settings] ENCRYPTION_KEY = ${JSON.stringify(Q)} (${Q.length} chars)`);let{ensureServices:J}=await Promise.resolve().then(() => (v$1(),C$1)),{outputs:W,services:Z}=await J({home:G.settings.dataDir,externalDatabaseUrl:G.externalDatabaseUrl,externalNatsUrl:G.externalNatsUrl});if(!G.skipMigrations){let{migrateBetterAuth:K}=await Promise.resolve().then(() => (d30(),ph4));await K(W.databaseUrl);let{createDatabase:H}=await Promise.resolve().then(() => (QU(),ih4)),{migrateToLatest:U}=await Promise.resolve().then(() => (so4(),oo4)),B=H(W.databaseUrl);await U({keepOpen:!0,database:B,skipBetterAuth:!0})}if(G.settings.clickhouseUrl){let{ensureClickHouseRollup:K}=await Promise.resolve().then(() => ee4);await K(G.settings.clickhouseUrl)}let $={...G.settings,databaseUrl:W.databaseUrl,natsUrls:W.natsUrls};return jt1($),{settings:$,services:Z.map((K)=>({name:K.name==="PostgreSQL"?"Postgres":K.name,port:K.port})),managedServiceNames:Z.filter((K)=>K.owner==="managed").map((K)=>K.name)}}var wN0=D(()=>{Vt1();l9()});var gA1={};T0(gA1,{updateService:()=>et,toggleViewMode:()=>EN0,toggleVibeState:()=>qN0,toggleLogFlow:()=>PN0,subscribeCliState:()=>RX1,setVibe:()=>it5,setTuiConsoleIntercepted:()=>xA1,setServerUrl:()=>kX1,setMigrationsDone:()=>SX1,setEnv:()=>CX1,setDevMode:()=>dt5,setDataDir:()=>ct5,isTuiConsoleIntercepted:()=>hA1,getCliState:()=>MX1,addLogEntry:()=>$z});function qU(){for(let X of LN0)X()}function MX1(){return X7}function RX1(X){return LN0.add(X),()=>LN0.delete(X)}function et(X){X7={...X7,services:X7.services.map((Y)=>Y.name===X.name?X:Y)},qU()}function SX1(){X7={...X7,migrationsStatus:"done"},qU()}function kX1(X){X7={...X7,serverUrl:X},qU()}function CX1(X){X7={...X7,env:X},qU()}function $z(X){let Y=[...X7.logs,X];X7={...X7,logs:Y.length>500?Y.slice(-500):Y},qU()}function dt5(){X7={...X7,services:[...X7.services,{name:"Vite",status:"pending",port:0}]},qU()}function EN0(){X7={...X7,viewMode:X7.viewMode==="requests"?"config":"requests"},qU()}function PN0(){X7={...X7,logFlow:!X7.logFlow},qU()}function ct5(X){X7={...X7,dataDir:X},qU()}function it5(X){X7={...X7,vibe:X},qU()}function qN0(){X7={...X7,vibe:!X7.vibe},qU()}function xA1(X){X16=X}function hA1(){return X16}var X7,LN0,X16=!1;var Kz=D(()=>{X7={services:[{name:"Postgres",status:"pending",port:0},{name:"NATS",status:"pending",port:0}],migrationsStatus:"pending",serverUrl:null,env:null,logs:[],viewMode:"requests",logFlow:!1,vibe:!1,dataDir:null},LN0=new Set});import{createServer as Y16}from"net";function pt5(X){return new Promise((Y)=>{let G=Y16();G.once("error",()=>Y(!1)),G.listen(X,"0.0.0.0",()=>{G.close(()=>Y(!0))})})}async function uA1(X){if(await pt5(X))return X;let Y=await new Promise((G,Q)=>{let J=Y16();J.once("error",Q),J.listen(0,"0.0.0.0",()=>{let W=J.address(),Z=typeof W==="object"&&W?W.port:0;J.close(()=>G(Z))})});return console.warn(`Port ${X} is in use, using port ${Y} instead.`),Y}var AN0=()=>{};var TN0={};T0(TN0,{startDevServer:()=>tt5});import{join as nt5}from"path";function G16(X){return X.replace(/\x1b\[[0-9;]*m/g,"")}function Q16(X){let Y=X.getReader(),G=new TextDecoder,Q="";function J(){let W=Q.split(`
|
|
1630
|
-
`);Q=W.pop()??"";for(let Z of W){let $=G16(Z).replace(/^\[\d+\]\s*/,"").trim();if(!$)continue;$z({method:"",path:"",status:0,duration:0,timestamp:new Date,rawLine:$})}}(async()=>{for(;;){let{done:W,value:Z}=await Y.read();if(W)break;Q+=G.decode(Z,{stream:!0}),J()}if(Q.trim()){let W=G16(Q).replace(/^\[\d+\]\s*/,"").trim();if(W)$z({method:"",path:"",status:0,duration:0,timestamp:new Date,rawLine:W})}})()}async function tt5(X){let{vitePort:Y,baseUrl:G,noTui:Q}=X,J=await uA1(Number(X.port)),{settings:W,services:Z,managedServiceNames:$}=await yA1({port:String(J),home:X.home,baseUrl:X.baseUrl,localMode:X.localMode,skipMigrations:X.skipMigrations,noTui:X.noTui,vitePort:X.vitePort});for(let z of Z)et({name:z.name,status:"ready",port:z.port});CX1(W),SX1();let K=nt5(import.meta.dir,"..","..","..","..",".."),H=Q===!0,U=Bun.spawn(["bun","run","--cwd=apps/mesh","dev:servers"],{cwd:K,env:{...process.env,PORT:String(W.port),VITE_PORT:String(Y),DATABASE_URL:W.databaseUrl,NATS_URL:W.natsUrls.join(","),NODE_ENV:W.nodeEnv,DECOCMS_LOCAL_MODE:String(W.localMode),DECOCMS_HOME:W.dataDir,DATA_DIR:W.dataDir,DECO_CLI:"1",...W.baseUrl?{BASE_URL:W.baseUrl}:{}},stdio:["inherit",H?"inherit":"pipe",H?"inherit":"pipe"]});if(!H)Q16(U.stdout),Q16(U.stderr);let B=G||`http://localhost:${W.port}`;kX1(B),et({name:"Vite",status:"ready",port:Number(Y)});let N=async(z)=>{if(U.kill(z),$.length>0){let{stopServices:O}=await Promise.resolve().then(() => (v$1(),C$1));await O(W.dataDir)}};return process.on("SIGINT",()=>N("SIGINT")),process.on("SIGTERM",()=>N("SIGTERM")),{port:Number(W.port),process:U}}var IN0=D(()=>{wN0();Kz();AN0()});import{Box as VN0,Text as jN0}from"ink";import{jsx as Z16,jsxs as lA1}from"react/jsx-runtime";function J16(X){if(!X)return"not set";try{let Y=new URL(X);if(Y.password)Y.password="***";if(Y.username&&Y.username.length>3)Y.username=Y.username.slice(0,3)+"***";return Y.pathname="/",Y.search="",Y.hash="",Y.toString()}catch{if(X.length<=10)return X;return X.slice(0,6)+"***"+X.slice(-4)}}function ot5(X,Y){if(at5.has(X))return Y?{text:"\u25CF\u25CF\u25CF\u25CF\u25CF\u25CF",dimColor:!0}:{text:"not set",dimColor:!0};if(rt5.has(X)){if(Array.isArray(Y)){if(Y.length===0)return{text:"not set",dimColor:!0};return{text:Y.map((W)=>J16(W)).join(", "),color:"cyan"}}let Q=J16(Y);return Q==="not set"?{text:Q,dimColor:!0}:{text:Q,color:"cyan"}}if(Y===void 0||Y===null||Y==="")return{text:"not set",dimColor:!0};let G=String(Y);if(G==="true")return{text:G,color:"green"};if(G==="false")return{text:G,color:"yellow"};try{return new URL(G),{text:G,color:"cyan"}}catch{return{text:G}}}function st5(X){return[{title:"Core",entries:[{key:"NODE_ENV",value:X.nodeEnv},{key:"PORT",value:X.port},{key:"BASE_URL",value:X.baseUrl??`http://localhost:${X.port}`},{key:"DATA_DIR",value:X.dataDir}]},{title:"Database",entries:[{key:"DATABASE_URL",value:X.databaseUrl},{key:"DATABASE_PG_SSL",value:X.databasePgSsl}]},{title:"Auth & Secrets",entries:[{key:"BETTER_AUTH_SECRET",value:X.betterAuthSecret},{key:"ENCRYPTION_KEY",value:X.encryptionKey},{key:"MESH_JWT_SECRET",value:X.meshJwtSecret},{key:"STUDIO_PROVISION_SECRET_KEY",value:X.studioProvisionSecretKey},{key:"DISABLE_RATE_LIMIT",value:X.disableRateLimit}]},{title:"Auth Providers",entries:[{key:"AUTH_EMAIL_PASSWORD_ENABLED",value:process.env.AUTH_EMAIL_PASSWORD_ENABLED??"true"},{key:"AUTH_GOOGLE_CLIENT_ID",value:!!process.env.AUTH_GOOGLE_CLIENT_ID},{key:"AUTH_GITHUB_CLIENT_ID",value:!!process.env.AUTH_GITHUB_CLIENT_ID},{key:"AUTH_RESEND_API_KEY",value:!!process.env.AUTH_RESEND_API_KEY},{key:"AUTH_SENDGRID_API_KEY",value:!!process.env.AUTH_SENDGRID_API_KEY},{key:"AUTH_SSO_MS_CLIENT_ID",value:!!process.env.AUTH_SSO_MS_CLIENT_ID},{key:"AUTH_MAGIC_LINK_ENABLED",value:process.env.AUTH_MAGIC_LINK_ENABLED==="true"},{key:"AUTH_EMAIL_OTP_ENABLED",value:process.env.AUTH_EMAIL_OTP_ENABLED==="true"}]},{title:"Observability",entries:[{key:"CLICKHOUSE_URL",value:X.clickhouseUrl},{key:"OTEL_SERVICE_NAME",value:X.otelServiceName}]},{title:"Event Bus & Networking",entries:[{key:"NATS_URL",value:X.natsUrls}]},{title:"Config Files",entries:[{key:"CONFIG_PATH",value:X.configPath}]},{title:"AI Gateway",entries:[{key:"DECO_AI_GATEWAY_ENABLED",value:X.aiGatewayEnabled},{key:"DECO_AI_GATEWAY_URL",value:X.aiGatewayUrl}]}]}function W16({env:X}){let Y=st5(X);return Z16(VN0,{flexDirection:"column",children:Y.map((G)=>lA1(VN0,{flexDirection:"column",marginTop:1,children:[lA1(jN0,{dimColor:!0,children:[" ","\u2500\u2500 ",G.title," ","\u2500".repeat(Math.max(0,38-G.title.length))]}),G.entries.map(({key:Q,value:J})=>{let W=ot5(Q,J);return lA1(VN0,{children:[lA1(jN0,{dimColor:!0,children:[" ",Q.padEnd(36)]}),Z16(jN0,{color:W.color,dimColor:W.dimColor,children:W.text})]},Q)})]},G.title))})}var at5,rt5;var $16=D(()=>{at5=new Set(["BETTER_AUTH_SECRET","ENCRYPTION_KEY","MESH_JWT_SECRET","STUDIO_PROVISION_SECRET_KEY"]),rt5=new Set(["DATABASE_URL","CLICKHOUSE_URL","NATS_URL"])});var MN0;var K16=D(()=>{MN0={name:"decocms",version:"2.304.1",description:"Deco CMS \u2014 Self-hostable MCP Gateway for managing AI connections and tools",author:"Deco team",repository:{type:"git",url:"git+https://github.com/decocms/studio.git",directory:"apps/mesh"},bugs:{url:"https://github.com/decocms/studio/issues"},type:"module",bin:{deco:"./dist/server/cli.js"},files:["dist/**/*"],scripts:{dev:'bun run migrate && concurrently "bun run dev:client" "bun run dev:server"',"dev:servers":'concurrently "bun run dev:client" "bun run dev:server"',"dev:client":"bun --bun vite dev","dev:server":"bun run --cwd=../../packages/sandbox build && NODE_ENV=development bun --env-file=.env --hot run src/index.ts","build:client":"bun --bun vite build","build:server":"bun run scripts/bundle-server-script.ts --dist ./dist/server","db:migrate":"bun run ./dist/server/migrate.js",check:"tsc --noEmit",start:"bun run ./dist/server/server.js",migrate:"bun run src/database/migrate.ts",test:"bun test","test:e2e":"playwright test","test:e2e:ui":"playwright test --ui","better-auth:migrate":"bunx --bun @better-auth/cli migrate -y --config src/auth/index.ts",prepublishOnly:"bun run build:client && bun run build:server"},optionalDependencies:{"@duckdb/node-api":"^1.5.0-r.1","@freestyle-sh/with-bun":"^0.2.12","@freestyle-sh/with-deno":"^0.0.4","@freestyle-sh/with-nodejs":"^0.2.9","freestyle-sandboxes":"^0.1.46"},dependencies:{"@ai-sdk/anthropic":"^3.0.58","@ai-sdk/google":"^3.0.60","@ai-sdk/openai":"^3.0.50","@anthropic-ai/sdk":"^0.79.0","@aws-sdk/client-s3":"^3.1013.0","@aws-sdk/s3-request-presigner":"^3.1013.0","@clickhouse/client":"^1.8.1","@deco-cx/warp-node":"^0.3.20","@dnd-kit/core":"^6.3.1","@dnd-kit/sortable":"^10.0.0","@dnd-kit/utilities":"^3.2.2","@inkjs/ui":"^2.0.0","@modelcontextprotocol/ext-apps":"^1.2.2","@openrouter/ai-sdk-provider":"^2.2.5","@opentelemetry/core":"^2.6.0","@tanstack/react-virtual":"^3.13.21","@xterm/addon-fit":"^0.11.0","@xterm/xterm":"^6.0.0","ai-sdk-provider-claude-code":"^3.4.4","ai-sdk-provider-codex-cli":"^1.1.0","embedded-postgres":"^18.3.0-beta.16",ink:"^6.8.0",kysely:"^0.28.12",nats:"^2.29.3","node-pty":"^1.0.0","posthog-js":"^1.371.1","posthog-node":"^5.0.0",react:"^19.2.0","react-dom":"^19.2.0"},devDependencies:{"@ai-sdk/provider":"^3.0.8","@ai-sdk/react":"^3.0.118","@anthropic-ai/claude-agent-sdk":"^0.2.80","@better-auth/sso":"1.4.1","@daveyplate/better-auth-ui":"^3.2.7","@deco/ui":"workspace:*","@decocms/better-auth":"1.5.17","@decocms/bindings":"workspace:*","@decocms/mcp-utils":"workspace:*","@decocms/mesh-sdk":"workspace:*","@decocms/runtime":"workspace:*","@decocms/vite-plugin":"workspace:*","@electric-sql/pglite":"^0.3.15","@floating-ui/react":"^0.27.16","@hookform/resolvers":"^5.2.2","@jitl/quickjs-wasmfile-release-sync":"0.31.0","@modelcontextprotocol/sdk":"1.27.1","@monaco-editor/react":"^4.7.0","@opentelemetry/api":"^1.9.0","@opentelemetry/api-logs":"^0.211.0","@opentelemetry/exporter-logs-otlp-proto":"^0.211.0","@opentelemetry/exporter-prometheus":"^0.208.0","@opentelemetry/exporter-trace-otlp-proto":"^0.207.0","@opentelemetry/instrumentation-runtime-node":"^0.24.0","@opentelemetry/sdk-logs":"^0.211.0","@opentelemetry/sdk-metrics":"^2.2.0","@opentelemetry/sdk-node":"^0.207.0","@opentelemetry/sdk-trace-base":"^2.5.0","@playwright/test":"^1.58.2","@radix-ui/react-avatar":"^1.1.10","@radix-ui/react-checkbox":"^1.3.3","@radix-ui/react-dialog":"^1.1.15","@radix-ui/react-dropdown-menu":"^2.1.16","@radix-ui/react-label":"^2.1.7","@radix-ui/react-select":"^2.2.6","@radix-ui/react-separator":"^1.1.7","@radix-ui/react-slot":"^1.2.3","@radix-ui/react-tabs":"^1.1.13","@rjsf/core":"^6.1.2","@rjsf/shadcn":"^6.1.2","@rjsf/utils":"^6.1.2","@rjsf/validator-ajv8":"^6.1.2","@tailwindcss/vite":"^4.1.17","@tanstack/react-query":"5.90.11","@tanstack/react-router":"^1.139.7","@tiptap/core":"3.20.2","@tiptap/extension-mention":"3.20.2","@tiptap/extension-placeholder":"3.20.2","@tiptap/pm":"3.20.2","@tiptap/react":"3.20.2","@tiptap/starter-kit":"3.20.2","@tiptap/suggestion":"3.20.2","@types/bun":"^1.3.1","@types/pg":"^8.15.6","@types/react-syntax-highlighter":"^15.5.13","@untitledui/icons":"^0.0.19","@vercel/nft":"^1.1.1","@vitejs/plugin-react":"^5.1.0",ai:"^6.0.116","babel-plugin-react-compiler":"^1.0.0","better-auth":"1.4.5","class-variance-authority":"^0.7.1",clsx:"^2.1.1",concurrently:"^9.2.1",croner:"^9.1.0","date-fns":"^4.1.0",degit:"^2.8.4",hono:"^4.10.7","input-otp":"^1.4.2",jose:"^6.0.11","kysely-pglite":"^0.6.1","lucide-react":"^0.468.0",marked:"^15.0.6","@decocms/sandbox":"workspace:*","mesh-plugin-workflows":"workspace:*",nanoid:"^5.1.6",pg:"^8.16.3",prettier:"^3.4.2","react-hook-form":"^7.66.0","react-markdown":"^10.1.0","react-resizable-panels":"^2.1.7","react-syntax-highlighter":"^15.6.1",recharts:"^3.6.0","rehype-raw":"^7.0.0","remark-gfm":"^4.0.0","sass-embedded":"^1.97.2",sonner:"^2.0.7","tailwind-merge":"^3.3.1",tailwindcss:"^4.1.17",typescript:"^5.9.3",vite:"^7.2.1","vite-tsconfig-paths":"^5.1.4",zod:"^4.0.0",zustand:"^5.0.9"},homepage:"https://github.com/decocms/studio",keywords:["mcp","model-context-protocol","ai","gateway","self-hosted","mesh","tools"],license:"MIT",publishConfig:{access:"public"}}});import{Box as AU,Text as SX}from"ink";import{Spinner as Xa5}from"@inkjs/ui";import{useSyncExternalStore as H16}from"react";import{jsx as TY,jsxs as sQ}from"react/jsx-runtime";function Za5(X,Y){if(!X||!Ja5.has(X))return X;let G=RN0[Y]??RN0[RN0.length-1];return X==="#875f00"?G[0]:G[1]}function F16({status:X}){if(X==="pending")return TY(Xa5,{label:""});return TY(SX,{color:"green",children:"\u2713"})}function U16({services:X,migrationsStatus:Y,home:G,serverUrl:Q,vibe:J}){let W=H16(vm0,Cm0),Z=H16(hm0,xm0);return sQ(AU,{flexDirection:"column",paddingBottom:1,children:[J?sQ(AU,{flexDirection:"column",children:[W.map(($,K)=>{let H=Z[K],U=$.reduce((N,z)=>N+z.text.length,0),B=Math.max(0,Qa5-U);return sQ(AU,{flexDirection:"row",children:[$.map((N,z)=>{let O=Za5(N.color,K);return O?TY(SX,{color:O,children:N.text},z):TY(SX,{children:N.text},z)}),TY(SX,{children:" ".repeat(B+2)}),H?.map((N,z)=>N.color?TY(SX,{color:N.color,children:N.char},z):TY(SX,{children:N.char},z))]},K)}),sQ(SX,{dimColor:!0,children:[" v",MN0.version]})]}):sQ(AU,{flexDirection:"column",marginTop:1,children:[Ya5.map(($,K)=>TY(SX,{color:Ga5[K],children:$},K)),sQ(SX,{dimColor:!0,children:[" v",MN0.version]})]}),TY(AU,{marginBottom:1,children:TY(SX,{dimColor:!0,children:"\u2500".repeat(80)})}),TY(AU,{children:sQ(SX,{dimColor:!0,children:["Home: ",G]})}),sQ(AU,{gap:2,children:[X.map(($)=>sQ(AU,{gap:1,children:[sQ(SX,{children:[$.name," :",$.port||"...."]}),TY(F16,{status:$.status})]},$.name)),sQ(AU,{gap:1,children:[TY(SX,{children:"Migrations"}),TY(F16,{status:Y})]})]}),TY(AU,{children:Q?sQ(SX,{children:["Open in browser: ",TY(SX,{color:"cyan",children:Q})]}):TY(SX,{dimColor:!0,children:"Starting..."})}),sQ(AU,{gap:2,children:[sQ(SX,{dimColor:!0,children:[TY(SX,{bold:!0,dimColor:!0,children:"K"})," ","toggle config"]}),sQ(SX,{dimColor:!0,children:[TY(SX,{bold:!0,dimColor:!0,children:"L"})," ","toggle log flow"]}),sQ(SX,{dimColor:!0,children:[TY(SX,{bold:!0,dimColor:!0,children:"V"})," ","toggle vibe ",J?"\u266A Nihilore \xB7 CC BY 4.0":""]}),J&&sQ(SX,{dimColor:!0,children:[TY(SX,{bold:!0,dimColor:!0,children:"N"})," ","skip song"]})]})]})}var Ya5,Ga5,RN0,Qa5=30,Ja5;var B16=D(()=>{K16();zt1();Pt1();Ya5=[" \u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588 \u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588 \u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588 \u2588\u2588\u2588\u2588\u2588\u2588\u2588 ","\u2591\u2591\u2588\u2588\u2588\u2591\u2591\u2591\u2591\u2588\u2588\u2588 \u2591\u2591\u2588\u2588\u2588\u2591\u2591\u2591\u2591\u2591\u2588 \u2588\u2588\u2588\u2591\u2591\u2591\u2591\u2591\u2588\u2588\u2588 \u2588\u2588\u2588\u2591\u2591\u2591\u2591\u2591\u2588\u2588\u2588 "," \u2591\u2588\u2588\u2588 \u2591\u2591\u2588\u2588\u2588 \u2591\u2588\u2588\u2588 \u2588 \u2591 \u2588\u2588\u2588 \u2591\u2591\u2591 \u2588\u2588\u2588 \u2591\u2591\u2588\u2588\u2588"," \u2591\u2588\u2588\u2588 \u2591\u2588\u2588\u2588 \u2591\u2588\u2588\u2588\u2588\u2588\u2588 \u2591\u2588\u2588\u2588 \u2591\u2588\u2588\u2588 \u2591\u2588\u2588\u2588"," \u2591\u2588\u2588\u2588 \u2591\u2588\u2588\u2588 \u2591\u2588\u2588\u2588\u2591\u2591\u2588 \u2591\u2588\u2588\u2588 \u2591\u2588\u2588\u2588 \u2591\u2588\u2588\u2588"," \u2591\u2588\u2588\u2588 \u2588\u2588\u2588 \u2591\u2588\u2588\u2588 \u2591 \u2588\u2591\u2591\u2588\u2588\u2588 \u2588\u2588\u2588\u2591\u2591\u2588\u2588\u2588 \u2588\u2588\u2588 "," \u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588 \u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588 \u2591\u2591\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588 \u2591\u2591\u2591\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2591 ","\u2591\u2591\u2591\u2591\u2591\u2591\u2591\u2591\u2591\u2591 \u2591\u2591\u2591\u2591\u2591\u2591\u2591\u2591\u2591\u2591 \u2591\u2591\u2591\u2591\u2591\u2591\u2591\u2591\u2591 \u2591\u2591\u2591\u2591\u2591\u2591\u2591 "],Ga5=["#00ff64","#00ee5e","#00dc56","#00c84e","#00b444","#00a03c","#008832","#006e28"],RN0=[["#00ff64","#00cc50"],["#00f060","#00c04c"],["#00e05c","#00b448"],["#00d058","#00a844"],["#00c054","#009c40"],["#00b050","#00903c"],["#00a04c","#008438"],["#009048","#007834"],["#008044","#006c30"],["#007040","#00602c"],["#00603c","#005428"]],Ja5=new Set(["#875f00","#5f3800"])});import{useSyncExternalStore as Wa5}from"react";function $a5(){let X=process.stdout.rows||24,Y=process.stdout.columns||80;if(X!==mA1.rows||Y!==mA1.columns)mA1={rows:X,columns:Y};return mA1}function Ka5(X){return process.stdout.on("resize",X),()=>{process.stdout.off("resize",X)}}function N16(){return Wa5(Ka5,$a5)}var mA1;var z16=D(()=>{mA1={rows:process.stdout.rows||24,columns:process.stdout.columns||80}});import{Box as Ha5,Text as vX1}from"ink";import{useSyncExternalStore as Fa5}from"react";import{jsx as SN0,jsxs as kN0}from"react/jsx-runtime";function Ua5(X){if(X>=500)return"red";if(X>=400)return"yellow";if(X>=300)return"cyan";return"green"}function O16({logs:X,headerHeight:Y}){let{rows:G}=N16(),{logFlow:Q}=Fa5(RX1,MX1),J=Math.max(1,G-Y-1),W=Q?X:X.slice(-J);return SN0(Ha5,{flexDirection:"column",children:W.map((Z,$)=>{if(Z.rawLine)return SN0(vX1,{dimColor:!0,children:Z.rawLine},$);let K=Z.duration<1000?`${Z.duration}ms`:`${(Z.duration/1000).toFixed(1)}s`;return kN0(vX1,{children:[kN0(vX1,{dimColor:!0,children:[Z.method.padEnd(6)," ",Z.path.padEnd(30)," "]}),SN0(vX1,{color:Ua5(Z.status),children:Z.status}),kN0(vX1,{dimColor:!0,children:[" ",K.padStart(8)]})]},$)})})}var D16=D(()=>{Kz();z16()});var CN0={};T0(CN0,{App:()=>La5});import{Box as Ba5,Text as Na5,useInput as za5}from"ink";import{useSyncExternalStore as Oa5}from"react";import{jsx as dA1,jsxs as Ea5}from"react/jsx-runtime";function La5({home:X}){let Y=Oa5(RX1,MX1);return za5((G)=>{if(G==="k"||G==="K")EN0();if(G==="l"||G==="L")PN0();if((G==="v"||G==="V")&&Y.dataDir)It1(Y.dataDir),qN0();if((G==="n"||G==="N")&&Y.vibe)Tt1()}),Ea5(Ba5,{flexDirection:"column",children:[dA1(U16,{services:Y.services,migrationsStatus:Y.migrationsStatus,home:X,serverUrl:Y.serverUrl,vibe:Y.vibe}),Y.viewMode==="config"?Y.env?dA1(W16,{env:Y.env}):dA1(Na5,{dimColor:!0,children:"Loading configuration..."}):dA1(O16,{logs:Y.logs,headerHeight:Y.vibe?wa5:Da5})]})}var Da5=15,wa5=19;var vN0=D(()=>{$16();B16();D16();Kz();vd()});function w16(X,Y={}){return{PORT:String(X.port),NODE_ENV:X.nodeEnv,BASE_URL:X.baseUrl,DATA_DIR:X.dataDir,DECOCMS_HOME:X.dataDir,DATABASE_URL:X.databaseUrl,DATABASE_PG_SSL:String(X.databasePgSsl),DATABASE_POOL_MAX:String(X.databasePoolMax),NATS_URL:X.natsUrls.join(","),BETTER_AUTH_SECRET:X.betterAuthSecret,ENCRYPTION_KEY:X.encryptionKey,MESH_JWT_SECRET:X.meshJwtSecret,DECOCMS_LOCAL_MODE:String(X.localMode),DISABLE_RATE_LIMIT:String(X.disableRateLimit),STUDIO_PROVISION_SECRET_KEY:X.studioProvisionSecretKey,CONFIG_PATH:X.configPath,...Object.fromEntries(Object.entries(process.env).filter(([G])=>G.startsWith("AUTH_"))),DECO_AI_GATEWAY_ENABLED:String(X.aiGatewayEnabled),DECO_AI_GATEWAY_URL:X.aiGatewayUrl,ENABLE_DECO_IMPORT:String(X.enableDecoImport),S3_ENDPOINT:X.s3Endpoint,S3_BUCKET:X.s3Bucket,S3_REGION:X.s3Region,S3_ACCESS_KEY_ID:X.s3AccessKeyId,S3_SECRET_ACCESS_KEY:X.s3SecretAccessKey,S3_FORCE_PATH_STYLE:String(X.s3ForcePathStyle),OTEL_SERVICE_NAME:X.otelServiceName,CLICKHOUSE_URL:X.clickhouseUrl,DECO_SUPABASE_URL:X.decoSupabaseUrl,DECO_SUPABASE_SERVICE_KEY:X.decoSupabaseServiceKey,FIRECRAWL_API_KEY:X.firecrawlApiKey,STUDIO_SANDBOX_RUNNER:process.env.STUDIO_SANDBOX_RUNNER,STUDIO_SANDBOX_TEMPLATE_NAME:process.env.STUDIO_SANDBOX_TEMPLATE_NAME,STUDIO_ENV:process.env.STUDIO_ENV,STUDIO_SANDBOX_PREVIEW_URL_PATTERN:process.env.STUDIO_SANDBOX_PREVIEW_URL_PATTERN,STUDIO_SANDBOX_PREVIEW_GATEWAY_NAME:process.env.STUDIO_SANDBOX_PREVIEW_GATEWAY_NAME,STUDIO_SANDBOX_PREVIEW_GATEWAY_NAMESPACE:process.env.STUDIO_SANDBOX_PREVIEW_GATEWAY_NAMESPACE,STUDIO_SANDBOX_SENTINEL_TOKEN:process.env.STUDIO_SANDBOX_SENTINEL_TOKEN,KUBERNETES_SERVICE_HOST:process.env.KUBERNETES_SERVICE_HOST,KUBERNETES_SERVICE_PORT:process.env.KUBERNETES_SERVICE_PORT,FREESTYLE_API_KEY:process.env.FREESTYLE_API_KEY,BROWSERLESS_TOKEN:process.env.BROWSERLESS_TOKEN,NODE_EXTRA_CA_CERTS:process.env.NODE_EXTRA_CA_CERTS,DECO_CLI:"1",DECO_NO_TUI:"true",...Y}}var yj=k((Va5)=>{Va5.HttpAuthLocation=void 0;(function(X){X.HEADER="header",X.QUERY="query"})(Va5.HttpAuthLocation||(Va5.HttpAuthLocation={}));Va5.HttpApiKeyAuthLocation=void 0;(function(X){X.HEADER="header",X.QUERY="query"})(Va5.HttpApiKeyAuthLocation||(Va5.HttpApiKeyAuthLocation={}));Va5.EndpointURLScheme=void 0;(function(X){X.HTTP="http",X.HTTPS="https"})(Va5.EndpointURLScheme||(Va5.EndpointURLScheme={}));Va5.AlgorithmId=void 0;(function(X){X.MD5="md5",X.CRC32="crc32",X.CRC32C="crc32c",X.SHA1="sha1",X.SHA256="sha256"})(Va5.AlgorithmId||(Va5.AlgorithmId={}));var Pa5=(X)=>{let Y=[];if(X.sha256!==void 0)Y.push({algorithmId:()=>Va5.AlgorithmId.SHA256,checksumConstructor:()=>X.sha256});if(X.md5!=null)Y.push({algorithmId:()=>Va5.AlgorithmId.MD5,checksumConstructor:()=>X.md5});return{addChecksumAlgorithm(G){Y.push(G)},checksumAlgorithms(){return Y}}},qa5=(X)=>{let Y={};return X.checksumAlgorithms().forEach((G)=>{Y[G.algorithmId()]=G.checksumConstructor()}),Y},Aa5=(X)=>{return Pa5(X)},Ta5=(X)=>{return qa5(X)};Va5.FieldPosition=void 0;(function(X){X[X.HEADER=0]="HEADER",X[X.TRAILER=1]="TRAILER"})(Va5.FieldPosition||(Va5.FieldPosition={}));var Ia5="__smithy_context";Va5.IniSectionType=void 0;(function(X){X.PROFILE="profile",X.SSO_SESSION="sso-session",X.SERVICES="services"})(Va5.IniSectionType||(Va5.IniSectionType={}));Va5.RequestHandlerProtocol=void 0;(function(X){X.HTTP_0_9="http/0.9",X.HTTP_1_0="http/1.0",X.TDS_8_0="tds/8.0"})(Va5.RequestHandlerProtocol||(Va5.RequestHandlerProtocol={}));Va5.SMITHY_CONTEXT_KEY=Ia5;Va5.getDefaultClientConfiguration=Aa5;Va5.resolveDefaultRuntimeConfig=Ta5});var u7=k((fa5)=>{var Sa5=yj(),ka5=(X)=>{return{setHttpHandler(Y){X.httpHandler=Y},httpHandler(){return X.httpHandler},updateHttpClientConfig(Y,G){X.httpHandler?.updateHttpClientConfig(Y,G)},httpHandlerConfigs(){return X.httpHandler.httpHandlerConfigs()}}},Ca5=(X)=>{return{httpHandler:X.httpHandler()}};class L16{name;kind;values;constructor({name:X,kind:Y=Sa5.FieldPosition.HEADER,values:G=[]}){this.name=X,this.kind=Y,this.values=G}add(X){this.values.push(X)}set(X){this.values=X}remove(X){this.values=this.values.filter((Y)=>Y!==X)}toString(){return this.values.map((X)=>X.includes(",")||X.includes(" ")?`"${X}"`:X).join(", ")}get(){return this.values}}class E16{entries={};encoding;constructor({fields:X=[],encoding:Y="utf-8"}){X.forEach(this.setField.bind(this)),this.encoding=Y}setField(X){this.entries[X.name.toLowerCase()]=X}getField(X){return this.entries[X.toLowerCase()]}removeField(X){delete this.entries[X.toLowerCase()]}getByType(X){return Object.values(this.entries).filter((Y)=>Y.kind===X)}}class cA1{method;protocol;hostname;port;path;query;headers;username;password;fragment;body;constructor(X){this.method=X.method||"GET",this.hostname=X.hostname||"localhost",this.port=X.port,this.query=X.query||{},this.headers=X.headers||{},this.body=X.body,this.protocol=X.protocol?X.protocol.slice(-1)!==":"?`${X.protocol}:`:X.protocol:"https:",this.path=X.path?X.path.charAt(0)!=="/"?`/${X.path}`:X.path:"/",this.username=X.username,this.password=X.password,this.fragment=X.fragment}static clone(X){let Y=new cA1({...X,headers:{...X.headers}});if(Y.query)Y.query=va5(Y.query);return Y}static isInstance(X){if(!X)return!1;let Y=X;return"method"in Y&&"protocol"in Y&&"hostname"in Y&&"path"in Y&&typeof Y.query==="object"&&typeof Y.headers==="object"}clone(){return cA1.clone(this)}}function va5(X){return Object.keys(X).reduce((Y,G)=>{let Q=X[G];return{...Y,[G]:Array.isArray(Q)?[...Q]:Q}},{})}class P16{statusCode;reason;headers;body;constructor(X){this.statusCode=X.statusCode,this.reason=X.reason,this.headers=X.headers||{},this.body=X.body}static isInstance(X){if(!X)return!1;let Y=X;return typeof Y.statusCode==="number"&&typeof Y.headers==="object"}}function _a5(X){return/^[a-z0-9][a-z0-9\.\-]*[a-z0-9]$/.test(X)}fa5.Field=L16;fa5.Fields=E16;fa5.HttpRequest=cA1;fa5.HttpResponse=P16;fa5.getHttpHandlerExtensionConfiguration=ka5;fa5.isValidHostname=_a5;fa5.resolveHttpHandlerRuntimeConfig=Ca5});function ma5(X){return(Y)=>async(G)=>{let{request:Q}=G;if(X.expectContinueHeader!==!1&&q16.HttpRequest.isInstance(Q)&&Q.body&&X.runtime==="node"&&X.requestHandler?.constructor?.name!=="FetchHttpHandler"){let J=!0;if(typeof X.expectContinueHeader==="number")try{J=(Number(Q.headers?.["content-length"])??X.bodyLengthChecker?.(Q.body)??1/0)>=X.expectContinueHeader}catch(W){}else J=!!X.expectContinueHeader;if(J)Q.headers.Expect="100-continue"}return Y({...G,request:Q})}}var q16,da5,A16=(X)=>({applyToStack:(Y)=>{Y.add(ma5(X),da5)}});var T16=D(()=>{q16=Y1(u7(),1);da5={step:"build",tags:["SET_EXPECT_HEADER","EXPECT_HEADER"],name:"addExpectContinueMiddleware",override:!0}});var wH,iA1,xj,pA1,E9,I16,fX1;var LH=D(()=>{wH={WHEN_SUPPORTED:"WHEN_SUPPORTED",WHEN_REQUIRED:"WHEN_REQUIRED"},iA1=wH.WHEN_SUPPORTED,xj={WHEN_SUPPORTED:"WHEN_SUPPORTED",WHEN_REQUIRED:"WHEN_REQUIRED"},pA1=wH.WHEN_SUPPORTED;(function(X){X.MD5="MD5",X.CRC32="CRC32",X.CRC32C="CRC32C",X.CRC64NVME="CRC64NVME",X.SHA1="SHA1",X.SHA256="SHA256"})(E9||(E9={}));(function(X){X.HEADER="header",X.TRAILER="trailer"})(I16||(I16={}));fX1=E9.CRC32});var kq,Xa=(X,Y,G,Q)=>{if(!(Y in X))return;let J=X[Y].toUpperCase();if(!Object.values(G).includes(J))throw TypeError(`Cannot load ${Q} '${Y}'. Expected one of ${Object.values(G)}, got '${X[Y]}'.`);return J};var gN0=D(()=>{(function(X){X.ENV="env",X.CONFIG="shared config entry"})(kq||(kq={}))});var ca5="AWS_REQUEST_CHECKSUM_CALCULATION",ia5="request_checksum_calculation",V16;var j16=D(()=>{LH();gN0();V16={environmentVariableSelector:(X)=>Xa(X,ca5,wH,kq.ENV),configFileSelector:(X)=>Xa(X,ia5,wH,kq.CONFIG),default:iA1}});var pa5="AWS_RESPONSE_CHECKSUM_VALIDATION",na5="response_checksum_validation",M16;var R16=D(()=>{LH();gN0();M16={environmentVariableSelector:(X)=>Xa(X,pa5,xj,kq.ENV),configFileSelector:(X)=>Xa(X,na5,xj,kq.CONFIG),default:pA1}});var lN0=k((Qr5)=>{var ta5=["AuthFailure","InvalidSignatureException","RequestExpired","RequestInTheFuture","RequestTimeTooSkewed","SignatureDoesNotMatch"],aa5=["BandwidthLimitExceeded","EC2ThrottledException","LimitExceededException","PriorRequestNotComplete","ProvisionedThroughputExceededException","RequestLimitExceeded","RequestThrottled","RequestThrottledException","SlowDown","ThrottledException","Throttling","ThrottlingException","TooManyRequestsException","TransactionInProgressException"],ra5=["TimeoutError","RequestTimeout","RequestTimeoutException"],oa5=[500,502,503,504],sa5=["ECONNRESET","ECONNREFUSED","EPIPE","ETIMEDOUT"],ea5=["EHOSTUNREACH","ENETUNREACH","ENOTFOUND"],S16=(X)=>X?.$retryable!==void 0,Xr5=(X)=>ta5.includes(X.name),k16=(X)=>X.$metadata?.clockSkewCorrected,C16=(X)=>{let Y=new Set(["Failed to fetch","NetworkError when attempting to fetch resource","The Internet connection appears to be offline","Load failed","Network request failed"]);if(!(X&&X instanceof TypeError))return!1;return Y.has(X.message)},Yr5=(X)=>X.$metadata?.httpStatusCode===429||aa5.includes(X.name)||X.$retryable?.throttling==!0,uN0=(X,Y=0)=>S16(X)||k16(X)||X.name==="InvalidSignatureException"&&X.message?.includes("Signature expired")||ra5.includes(X.name)||sa5.includes(X?.code||"")||ea5.includes(X?.code||"")||oa5.includes(X.$metadata?.httpStatusCode||0)||C16(X)||v16(X)||X.cause!==void 0&&Y<=10&&uN0(X.cause,Y+1),Gr5=(X)=>{if(X.$metadata?.httpStatusCode!==void 0){let Y=X.$metadata.httpStatusCode;if(500<=Y&&Y<=599&&!uN0(X))return!0;return!1}return!1};function v16(X){return X.code==="ERR_HTTP2_STREAM_ERROR"&&X.message.includes("NGHTTP2_REFUSED_STREAM")}Qr5.isBrowserNetworkError=C16;Qr5.isClockSkewCorrectedError=k16;Qr5.isClockSkewError=Xr5;Qr5.isNodeJsHttp2TransientError=v16;Qr5.isRetryableByTrait=S16;Qr5.isServerError=Gr5;Qr5.isThrottlingError=Yr5;Qr5.isTransientError=uN0});var ww=k((Pr5)=>{var Br5=lN0();Pr5.RETRY_MODES=void 0;(function(X){X.STANDARD="standard",X.ADAPTIVE="adaptive"})(Pr5.RETRY_MODES||(Pr5.RETRY_MODES={}));var tA1=3,Nr5=Pr5.RETRY_MODES.STANDARD;class aA1{static setTimeoutFn=setTimeout;beta;minCapacity;minFillRate;scaleConstant;smooth;enabled=!1;availableTokens=0;lastMaxRate=0;measuredTxRate=0;requestCount=0;fillRate;lastThrottleTime;lastTimestamp=0;lastTxRateBucket;maxCapacity;timeWindow=0;constructor(X){this.beta=X?.beta??0.7,this.minCapacity=X?.minCapacity??1,this.minFillRate=X?.minFillRate??0.5,this.scaleConstant=X?.scaleConstant??0.4,this.smooth=X?.smooth??0.8,this.lastThrottleTime=this.getCurrentTimeInSeconds(),this.lastTxRateBucket=Math.floor(this.getCurrentTimeInSeconds()),this.fillRate=this.minFillRate,this.maxCapacity=this.minCapacity}async getSendToken(){return this.acquireTokenBucket(1)}updateClientSendingRate(X){let Y;this.updateMeasuredRate();let G=X;if(G?.errorType==="THROTTLING"||Br5.isThrottlingError(G?.error??X)){let W=!this.enabled?this.measuredTxRate:Math.min(this.measuredTxRate,this.fillRate);this.lastMaxRate=W,this.calculateTimeWindow(),this.lastThrottleTime=this.getCurrentTimeInSeconds(),Y=this.cubicThrottle(W),this.enableTokenBucket()}else this.calculateTimeWindow(),Y=this.cubicSuccess(this.getCurrentTimeInSeconds());let J=Math.min(Y,2*this.measuredTxRate);this.updateTokenBucketRate(J)}getCurrentTimeInSeconds(){return Date.now()/1000}async acquireTokenBucket(X){if(!this.enabled)return;if(this.refillTokenBucket(),X>this.availableTokens){let Y=(X-this.availableTokens)/this.fillRate*1000;await new Promise((G)=>aA1.setTimeoutFn(G,Y))}this.availableTokens=this.availableTokens-X}refillTokenBucket(){let X=this.getCurrentTimeInSeconds();if(!this.lastTimestamp){this.lastTimestamp=X;return}let Y=(X-this.lastTimestamp)*this.fillRate;this.availableTokens=Math.min(this.maxCapacity,this.availableTokens+Y),this.lastTimestamp=X}calculateTimeWindow(){this.timeWindow=this.getPrecise(Math.pow(this.lastMaxRate*(1-this.beta)/this.scaleConstant,0.3333333333333333))}cubicThrottle(X){return this.getPrecise(X*this.beta)}cubicSuccess(X){return this.getPrecise(this.scaleConstant*Math.pow(X-this.lastThrottleTime-this.timeWindow,3)+this.lastMaxRate)}enableTokenBucket(){this.enabled=!0}updateTokenBucketRate(X){this.refillTokenBucket(),this.fillRate=Math.max(X,this.minFillRate),this.maxCapacity=Math.max(X,this.minCapacity),this.availableTokens=Math.min(this.availableTokens,this.maxCapacity)}updateMeasuredRate(){let X=this.getCurrentTimeInSeconds(),Y=Math.floor(X*2)/2;if(this.requestCount++,Y>this.lastTxRateBucket){let G=this.requestCount/(Y-this.lastTxRateBucket);this.measuredTxRate=this.getPrecise(G*this.smooth+this.measuredTxRate*(1-this.smooth)),this.requestCount=0,this.lastTxRateBucket=Y}}getPrecise(X){return parseFloat(X.toFixed(8))}}var zr5=100,cN0=20000,Or5=500,mN0=500,Dr5=5,wr5=10,_16=1,Lr5="amz-sdk-invocation-id",Er5="amz-sdk-request";class eQ{static v2026=typeof process<"u"&&process.env?.SMITHY_NEW_RETRIES_2026==="true";static delay(){return eQ.v2026?50:100}static throttlingDelay(){return eQ.v2026?1000:500}static cost(){return eQ.v2026?14:5}static throttlingCost(){return eQ.v2026?5:10}static modifiedCostType(){return eQ.v2026?"THROTTLING":"TRANSIENT"}}class f16{x=eQ.delay();computeNextBackoffDelay(X){let Y=Math.random(),G=2,Q=Y*Math.min(this.x*2**X,cN0);return Math.floor(Q)}setDelayBase(X){this.x=X}}class dN0{delay;count;cost;longPoll;constructor(X,Y,G,Q){this.delay=X,this.count=Y,this.cost=G,this.longPoll=Q}getRetryCount(){return this.count}getRetryDelay(){return Math.min(cN0,this.delay)}getRetryCost(){return this.cost}isLongPoll(){return this.longPoll}}var nA1={incompatible:1,attempts:2,capacity:3};class bX1{mode=Pr5.RETRY_MODES.STANDARD;capacity=mN0;retryBackoffStrategy;maxAttemptsProvider;baseDelay;constructor(X){if(typeof X==="number")this.maxAttemptsProvider=async()=>X;else if(typeof X==="function")this.maxAttemptsProvider=X;else if(X&&typeof X==="object")this.maxAttemptsProvider=async()=>X.maxAttempts,this.baseDelay=X.baseDelay,this.retryBackoffStrategy=X.backoff;this.maxAttemptsProvider??=async()=>tA1,this.baseDelay??=eQ.delay(),this.retryBackoffStrategy??=new f16}async acquireInitialRetryToken(X){return new dN0(eQ.delay(),0,void 0,eQ.v2026&&X.includes(":longpoll"))}async refreshRetryTokenForRetry(X,Y){let G=await this.getMaxAttempts(),Q=this.retryCode(X,Y,G),J=Q===0,W=X.isLongPoll?.();if(J||W){let Z=Y.errorType;this.retryBackoffStrategy.setDelayBase(Z==="THROTTLING"?eQ.throttlingDelay():this.baseDelay);let $=this.retryBackoffStrategy.computeNextBackoffDelay(X.getRetryCount()),K=$;if(Y.retryAfterHint instanceof Date)K=Math.max($,Math.min(Y.retryAfterHint.getTime()-Date.now(),$+5000));if(!J)throw Object.assign(Error("No retry token available"),{$backoff:eQ.v2026&&Q===nA1.capacity&&W?K:0});else{let H=this.getCapacityCost(Z);return this.capacity-=H,new dN0(K,X.getRetryCount()+1,H,X.isLongPoll?.()??!1)}}throw Error("No retry token available")}recordSuccess(X){this.capacity=Math.min(mN0,this.capacity+(X.getRetryCost()??_16))}getCapacity(){return this.capacity}async maxAttempts(){return this.maxAttemptsProvider()}async getMaxAttempts(){try{return await this.maxAttemptsProvider()}catch(X){return console.warn(`Max attempts provider could not resolve. Using default of ${tA1}`),tA1}}retryCode(X,Y,G){let Q=X.getRetryCount()+1,J=this.isRetryableError(Y.errorType)?0:nA1.incompatible,W=Q<G?0:nA1.attempts,Z=this.capacity>=this.getCapacityCost(Y.errorType)?0:nA1.capacity;return J||W||Z}getCapacityCost(X){return X===eQ.modifiedCostType()?eQ.throttlingCost():eQ.cost()}isRetryableError(X){return X==="THROTTLING"||X==="TRANSIENT"}}class b16{mode=Pr5.RETRY_MODES.ADAPTIVE;rateLimiter;standardRetryStrategy;constructor(X,Y){let{rateLimiter:G}=Y??{};this.rateLimiter=G??new aA1,this.standardRetryStrategy=Y?new bX1({maxAttempts:typeof X==="number"?X:3,...Y}):new bX1(X)}async acquireInitialRetryToken(X){return await this.rateLimiter.getSendToken(),this.standardRetryStrategy.acquireInitialRetryToken(X)}async refreshRetryTokenForRetry(X,Y){return this.rateLimiter.updateClientSendingRate(Y),this.standardRetryStrategy.refreshRetryTokenForRetry(X,Y)}recordSuccess(X){this.rateLimiter.updateClientSendingRate({}),this.standardRetryStrategy.recordSuccess(X)}async maxAttemptsProvider(){return this.standardRetryStrategy.maxAttempts()}}class y16 extends bX1{computeNextBackoffDelay;constructor(X,Y=eQ.delay()){super(typeof X==="function"?X:async()=>X);if(typeof Y==="number")this.computeNextBackoffDelay=()=>Y;else this.computeNextBackoffDelay=Y}async refreshRetryTokenForRetry(X,Y){let G=await super.refreshRetryTokenForRetry(X,Y);return G.getRetryDelay=()=>this.computeNextBackoffDelay(G.getRetryCount()),G}}Pr5.AdaptiveRetryStrategy=b16;Pr5.ConfiguredRetryStrategy=y16;Pr5.DEFAULT_MAX_ATTEMPTS=tA1;Pr5.DEFAULT_RETRY_DELAY_BASE=zr5;Pr5.DEFAULT_RETRY_MODE=Nr5;Pr5.DefaultRateLimiter=aA1;Pr5.INITIAL_RETRY_TOKENS=mN0;Pr5.INVOCATION_ID_HEADER=Lr5;Pr5.MAXIMUM_RETRY_DELAY=cN0;Pr5.NO_RETRY_INCREMENT=_16;Pr5.REQUEST_HEADER=Er5;Pr5.RETRY_COST=Dr5;Pr5.Retry=eQ;Pr5.StandardRetryStrategy=bX1;Pr5.THROTTLING_RETRY_DELAY_BASE=Or5;Pr5.TIMEOUT_RETRY_COST=wr5});var WX=k((ir5)=>{var xr5=ww(),iN0={warningEmitted:!1},hr5=(X)=>{if(X&&!iN0.warningEmitted&&parseInt(X.substring(1,X.indexOf(".")))<20)iN0.warningEmitted=!0,process.emitWarning(`NodeDeprecationWarning: The AWS SDK for JavaScript (v3) will
|
|
1630
|
+
`);Q=W.pop()??"";for(let Z of W){let $=G16(Z).replace(/^\[\d+\]\s*/,"").trim();if(!$)continue;$z({method:"",path:"",status:0,duration:0,timestamp:new Date,rawLine:$})}}(async()=>{for(;;){let{done:W,value:Z}=await Y.read();if(W)break;Q+=G.decode(Z,{stream:!0}),J()}if(Q.trim()){let W=G16(Q).replace(/^\[\d+\]\s*/,"").trim();if(W)$z({method:"",path:"",status:0,duration:0,timestamp:new Date,rawLine:W})}})()}async function tt5(X){let{vitePort:Y,baseUrl:G,noTui:Q}=X,J=await uA1(Number(X.port)),{settings:W,services:Z,managedServiceNames:$}=await yA1({port:String(J),home:X.home,baseUrl:X.baseUrl,localMode:X.localMode,skipMigrations:X.skipMigrations,noTui:X.noTui,vitePort:X.vitePort});for(let z of Z)et({name:z.name,status:"ready",port:z.port});CX1(W),SX1();let K=nt5(import.meta.dir,"..","..","..","..",".."),H=Q===!0,U=Bun.spawn(["bun","run","--cwd=apps/mesh","dev:servers"],{cwd:K,env:{...process.env,PORT:String(W.port),VITE_PORT:String(Y),DATABASE_URL:W.databaseUrl,NATS_URL:W.natsUrls.join(","),NODE_ENV:W.nodeEnv,DECOCMS_LOCAL_MODE:String(W.localMode),DECOCMS_HOME:W.dataDir,DATA_DIR:W.dataDir,DECO_CLI:"1",...W.baseUrl?{BASE_URL:W.baseUrl}:{}},stdio:["inherit",H?"inherit":"pipe",H?"inherit":"pipe"]});if(!H)Q16(U.stdout),Q16(U.stderr);let B=G||`http://localhost:${W.port}`;kX1(B),et({name:"Vite",status:"ready",port:Number(Y)});let N=async(z)=>{if(U.kill(z),$.length>0){let{stopServices:O}=await Promise.resolve().then(() => (v$1(),C$1));await O(W.dataDir)}};return process.on("SIGINT",()=>N("SIGINT")),process.on("SIGTERM",()=>N("SIGTERM")),{port:Number(W.port),process:U}}var IN0=D(()=>{wN0();Kz();AN0()});import{Box as VN0,Text as jN0}from"ink";import{jsx as Z16,jsxs as lA1}from"react/jsx-runtime";function J16(X){if(!X)return"not set";try{let Y=new URL(X);if(Y.password)Y.password="***";if(Y.username&&Y.username.length>3)Y.username=Y.username.slice(0,3)+"***";return Y.pathname="/",Y.search="",Y.hash="",Y.toString()}catch{if(X.length<=10)return X;return X.slice(0,6)+"***"+X.slice(-4)}}function ot5(X,Y){if(at5.has(X))return Y?{text:"\u25CF\u25CF\u25CF\u25CF\u25CF\u25CF",dimColor:!0}:{text:"not set",dimColor:!0};if(rt5.has(X)){if(Array.isArray(Y)){if(Y.length===0)return{text:"not set",dimColor:!0};return{text:Y.map((W)=>J16(W)).join(", "),color:"cyan"}}let Q=J16(Y);return Q==="not set"?{text:Q,dimColor:!0}:{text:Q,color:"cyan"}}if(Y===void 0||Y===null||Y==="")return{text:"not set",dimColor:!0};let G=String(Y);if(G==="true")return{text:G,color:"green"};if(G==="false")return{text:G,color:"yellow"};try{return new URL(G),{text:G,color:"cyan"}}catch{return{text:G}}}function st5(X){return[{title:"Core",entries:[{key:"NODE_ENV",value:X.nodeEnv},{key:"PORT",value:X.port},{key:"BASE_URL",value:X.baseUrl??`http://localhost:${X.port}`},{key:"DATA_DIR",value:X.dataDir}]},{title:"Database",entries:[{key:"DATABASE_URL",value:X.databaseUrl},{key:"DATABASE_PG_SSL",value:X.databasePgSsl}]},{title:"Auth & Secrets",entries:[{key:"BETTER_AUTH_SECRET",value:X.betterAuthSecret},{key:"ENCRYPTION_KEY",value:X.encryptionKey},{key:"MESH_JWT_SECRET",value:X.meshJwtSecret},{key:"STUDIO_PROVISION_SECRET_KEY",value:X.studioProvisionSecretKey},{key:"DISABLE_RATE_LIMIT",value:X.disableRateLimit}]},{title:"Auth Providers",entries:[{key:"AUTH_EMAIL_PASSWORD_ENABLED",value:process.env.AUTH_EMAIL_PASSWORD_ENABLED??"true"},{key:"AUTH_GOOGLE_CLIENT_ID",value:!!process.env.AUTH_GOOGLE_CLIENT_ID},{key:"AUTH_GITHUB_CLIENT_ID",value:!!process.env.AUTH_GITHUB_CLIENT_ID},{key:"AUTH_RESEND_API_KEY",value:!!process.env.AUTH_RESEND_API_KEY},{key:"AUTH_SENDGRID_API_KEY",value:!!process.env.AUTH_SENDGRID_API_KEY},{key:"AUTH_SSO_MS_CLIENT_ID",value:!!process.env.AUTH_SSO_MS_CLIENT_ID},{key:"AUTH_MAGIC_LINK_ENABLED",value:process.env.AUTH_MAGIC_LINK_ENABLED==="true"},{key:"AUTH_EMAIL_OTP_ENABLED",value:process.env.AUTH_EMAIL_OTP_ENABLED==="true"}]},{title:"Observability",entries:[{key:"CLICKHOUSE_URL",value:X.clickhouseUrl},{key:"OTEL_SERVICE_NAME",value:X.otelServiceName}]},{title:"Event Bus & Networking",entries:[{key:"NATS_URL",value:X.natsUrls}]},{title:"Config Files",entries:[{key:"CONFIG_PATH",value:X.configPath}]},{title:"AI Gateway",entries:[{key:"DECO_AI_GATEWAY_ENABLED",value:X.aiGatewayEnabled},{key:"DECO_AI_GATEWAY_URL",value:X.aiGatewayUrl}]}]}function W16({env:X}){let Y=st5(X);return Z16(VN0,{flexDirection:"column",children:Y.map((G)=>lA1(VN0,{flexDirection:"column",marginTop:1,children:[lA1(jN0,{dimColor:!0,children:[" ","\u2500\u2500 ",G.title," ","\u2500".repeat(Math.max(0,38-G.title.length))]}),G.entries.map(({key:Q,value:J})=>{let W=ot5(Q,J);return lA1(VN0,{children:[lA1(jN0,{dimColor:!0,children:[" ",Q.padEnd(36)]}),Z16(jN0,{color:W.color,dimColor:W.dimColor,children:W.text})]},Q)})]},G.title))})}var at5,rt5;var $16=D(()=>{at5=new Set(["BETTER_AUTH_SECRET","ENCRYPTION_KEY","MESH_JWT_SECRET","STUDIO_PROVISION_SECRET_KEY"]),rt5=new Set(["DATABASE_URL","CLICKHOUSE_URL","NATS_URL"])});var MN0;var K16=D(()=>{MN0={name:"decocms",version:"2.304.2",description:"Deco CMS \u2014 Self-hostable MCP Gateway for managing AI connections and tools",author:"Deco team",repository:{type:"git",url:"git+https://github.com/decocms/studio.git",directory:"apps/mesh"},bugs:{url:"https://github.com/decocms/studio/issues"},type:"module",bin:{deco:"./dist/server/cli.js"},files:["dist/**/*"],scripts:{dev:'bun run migrate && concurrently "bun run dev:client" "bun run dev:server"',"dev:servers":'concurrently "bun run dev:client" "bun run dev:server"',"dev:client":"bun --bun vite dev","dev:server":"bun run --cwd=../../packages/sandbox build && NODE_ENV=development bun --env-file=.env --hot run src/index.ts","build:client":"bun --bun vite build","build:server":"bun run scripts/bundle-server-script.ts --dist ./dist/server","db:migrate":"bun run ./dist/server/migrate.js",check:"tsc --noEmit",start:"bun run ./dist/server/server.js",migrate:"bun run src/database/migrate.ts",test:"bun test","test:e2e":"playwright test","test:e2e:ui":"playwright test --ui","better-auth:migrate":"bunx --bun @better-auth/cli migrate -y --config src/auth/index.ts",prepublishOnly:"bun run build:client && bun run build:server"},optionalDependencies:{"@duckdb/node-api":"^1.5.0-r.1","@freestyle-sh/with-bun":"^0.2.12","@freestyle-sh/with-deno":"^0.0.4","@freestyle-sh/with-nodejs":"^0.2.9","freestyle-sandboxes":"^0.1.46"},dependencies:{"@ai-sdk/anthropic":"^3.0.58","@ai-sdk/google":"^3.0.60","@ai-sdk/openai":"^3.0.50","@anthropic-ai/sdk":"^0.79.0","@aws-sdk/client-s3":"^3.1013.0","@aws-sdk/s3-request-presigner":"^3.1013.0","@clickhouse/client":"^1.8.1","@deco-cx/warp-node":"^0.3.20","@dnd-kit/core":"^6.3.1","@dnd-kit/sortable":"^10.0.0","@dnd-kit/utilities":"^3.2.2","@inkjs/ui":"^2.0.0","@modelcontextprotocol/ext-apps":"^1.2.2","@openrouter/ai-sdk-provider":"^2.2.5","@opentelemetry/core":"^2.6.0","@tanstack/react-virtual":"^3.13.21","@xterm/addon-fit":"^0.11.0","@xterm/xterm":"^6.0.0","ai-sdk-provider-claude-code":"^3.4.4","ai-sdk-provider-codex-cli":"^1.1.0","embedded-postgres":"^18.3.0-beta.16",ink:"^6.8.0",kysely:"^0.28.12",nats:"^2.29.3","node-pty":"^1.0.0","posthog-js":"^1.371.1","posthog-node":"^5.0.0",react:"^19.2.0","react-dom":"^19.2.0"},devDependencies:{"@ai-sdk/provider":"^3.0.8","@ai-sdk/react":"^3.0.118","@anthropic-ai/claude-agent-sdk":"^0.2.80","@better-auth/sso":"1.4.1","@daveyplate/better-auth-ui":"^3.2.7","@deco/ui":"workspace:*","@decocms/better-auth":"1.5.17","@decocms/bindings":"workspace:*","@decocms/mcp-utils":"workspace:*","@decocms/mesh-sdk":"workspace:*","@decocms/runtime":"workspace:*","@decocms/vite-plugin":"workspace:*","@electric-sql/pglite":"^0.3.15","@floating-ui/react":"^0.27.16","@hookform/resolvers":"^5.2.2","@jitl/quickjs-wasmfile-release-sync":"0.31.0","@modelcontextprotocol/sdk":"1.27.1","@monaco-editor/react":"^4.7.0","@opentelemetry/api":"^1.9.0","@opentelemetry/api-logs":"^0.211.0","@opentelemetry/exporter-logs-otlp-proto":"^0.211.0","@opentelemetry/exporter-prometheus":"^0.208.0","@opentelemetry/exporter-trace-otlp-proto":"^0.207.0","@opentelemetry/instrumentation-runtime-node":"^0.24.0","@opentelemetry/sdk-logs":"^0.211.0","@opentelemetry/sdk-metrics":"^2.2.0","@opentelemetry/sdk-node":"^0.207.0","@opentelemetry/sdk-trace-base":"^2.5.0","@playwright/test":"^1.58.2","@radix-ui/react-avatar":"^1.1.10","@radix-ui/react-checkbox":"^1.3.3","@radix-ui/react-dialog":"^1.1.15","@radix-ui/react-dropdown-menu":"^2.1.16","@radix-ui/react-label":"^2.1.7","@radix-ui/react-select":"^2.2.6","@radix-ui/react-separator":"^1.1.7","@radix-ui/react-slot":"^1.2.3","@radix-ui/react-tabs":"^1.1.13","@rjsf/core":"^6.1.2","@rjsf/shadcn":"^6.1.2","@rjsf/utils":"^6.1.2","@rjsf/validator-ajv8":"^6.1.2","@tailwindcss/vite":"^4.1.17","@tanstack/react-query":"5.90.11","@tanstack/react-router":"^1.139.7","@tiptap/core":"3.20.2","@tiptap/extension-mention":"3.20.2","@tiptap/extension-placeholder":"3.20.2","@tiptap/pm":"3.20.2","@tiptap/react":"3.20.2","@tiptap/starter-kit":"3.20.2","@tiptap/suggestion":"3.20.2","@types/bun":"^1.3.1","@types/pg":"^8.15.6","@types/react-syntax-highlighter":"^15.5.13","@untitledui/icons":"^0.0.19","@vercel/nft":"^1.1.1","@vitejs/plugin-react":"^5.1.0",ai:"^6.0.116","babel-plugin-react-compiler":"^1.0.0","better-auth":"1.4.5","class-variance-authority":"^0.7.1",clsx:"^2.1.1",concurrently:"^9.2.1",croner:"^9.1.0","date-fns":"^4.1.0",degit:"^2.8.4",hono:"^4.10.7","input-otp":"^1.4.2",jose:"^6.0.11","kysely-pglite":"^0.6.1","lucide-react":"^0.468.0",marked:"^15.0.6","@decocms/sandbox":"workspace:*","mesh-plugin-workflows":"workspace:*",nanoid:"^5.1.6",pg:"^8.16.3",prettier:"^3.4.2","react-hook-form":"^7.66.0","react-markdown":"^10.1.0","react-resizable-panels":"^2.1.7","react-syntax-highlighter":"^15.6.1",recharts:"^3.6.0","rehype-raw":"^7.0.0","remark-gfm":"^4.0.0","sass-embedded":"^1.97.2",sonner:"^2.0.7","tailwind-merge":"^3.3.1",tailwindcss:"^4.1.17",typescript:"^5.9.3",vite:"^7.2.1","vite-tsconfig-paths":"^5.1.4",zod:"^4.0.0",zustand:"^5.0.9"},homepage:"https://github.com/decocms/studio",keywords:["mcp","model-context-protocol","ai","gateway","self-hosted","mesh","tools"],license:"MIT",publishConfig:{access:"public"}}});import{Box as AU,Text as SX}from"ink";import{Spinner as Xa5}from"@inkjs/ui";import{useSyncExternalStore as H16}from"react";import{jsx as TY,jsxs as sQ}from"react/jsx-runtime";function Za5(X,Y){if(!X||!Ja5.has(X))return X;let G=RN0[Y]??RN0[RN0.length-1];return X==="#875f00"?G[0]:G[1]}function F16({status:X}){if(X==="pending")return TY(Xa5,{label:""});return TY(SX,{color:"green",children:"\u2713"})}function U16({services:X,migrationsStatus:Y,home:G,serverUrl:Q,vibe:J}){let W=H16(vm0,Cm0),Z=H16(hm0,xm0);return sQ(AU,{flexDirection:"column",paddingBottom:1,children:[J?sQ(AU,{flexDirection:"column",children:[W.map(($,K)=>{let H=Z[K],U=$.reduce((N,z)=>N+z.text.length,0),B=Math.max(0,Qa5-U);return sQ(AU,{flexDirection:"row",children:[$.map((N,z)=>{let O=Za5(N.color,K);return O?TY(SX,{color:O,children:N.text},z):TY(SX,{children:N.text},z)}),TY(SX,{children:" ".repeat(B+2)}),H?.map((N,z)=>N.color?TY(SX,{color:N.color,children:N.char},z):TY(SX,{children:N.char},z))]},K)}),sQ(SX,{dimColor:!0,children:[" v",MN0.version]})]}):sQ(AU,{flexDirection:"column",marginTop:1,children:[Ya5.map(($,K)=>TY(SX,{color:Ga5[K],children:$},K)),sQ(SX,{dimColor:!0,children:[" v",MN0.version]})]}),TY(AU,{marginBottom:1,children:TY(SX,{dimColor:!0,children:"\u2500".repeat(80)})}),TY(AU,{children:sQ(SX,{dimColor:!0,children:["Home: ",G]})}),sQ(AU,{gap:2,children:[X.map(($)=>sQ(AU,{gap:1,children:[sQ(SX,{children:[$.name," :",$.port||"...."]}),TY(F16,{status:$.status})]},$.name)),sQ(AU,{gap:1,children:[TY(SX,{children:"Migrations"}),TY(F16,{status:Y})]})]}),TY(AU,{children:Q?sQ(SX,{children:["Open in browser: ",TY(SX,{color:"cyan",children:Q})]}):TY(SX,{dimColor:!0,children:"Starting..."})}),sQ(AU,{gap:2,children:[sQ(SX,{dimColor:!0,children:[TY(SX,{bold:!0,dimColor:!0,children:"K"})," ","toggle config"]}),sQ(SX,{dimColor:!0,children:[TY(SX,{bold:!0,dimColor:!0,children:"L"})," ","toggle log flow"]}),sQ(SX,{dimColor:!0,children:[TY(SX,{bold:!0,dimColor:!0,children:"V"})," ","toggle vibe ",J?"\u266A Nihilore \xB7 CC BY 4.0":""]}),J&&sQ(SX,{dimColor:!0,children:[TY(SX,{bold:!0,dimColor:!0,children:"N"})," ","skip song"]})]})]})}var Ya5,Ga5,RN0,Qa5=30,Ja5;var B16=D(()=>{K16();zt1();Pt1();Ya5=[" \u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588 \u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588 \u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588 \u2588\u2588\u2588\u2588\u2588\u2588\u2588 ","\u2591\u2591\u2588\u2588\u2588\u2591\u2591\u2591\u2591\u2588\u2588\u2588 \u2591\u2591\u2588\u2588\u2588\u2591\u2591\u2591\u2591\u2591\u2588 \u2588\u2588\u2588\u2591\u2591\u2591\u2591\u2591\u2588\u2588\u2588 \u2588\u2588\u2588\u2591\u2591\u2591\u2591\u2591\u2588\u2588\u2588 "," \u2591\u2588\u2588\u2588 \u2591\u2591\u2588\u2588\u2588 \u2591\u2588\u2588\u2588 \u2588 \u2591 \u2588\u2588\u2588 \u2591\u2591\u2591 \u2588\u2588\u2588 \u2591\u2591\u2588\u2588\u2588"," \u2591\u2588\u2588\u2588 \u2591\u2588\u2588\u2588 \u2591\u2588\u2588\u2588\u2588\u2588\u2588 \u2591\u2588\u2588\u2588 \u2591\u2588\u2588\u2588 \u2591\u2588\u2588\u2588"," \u2591\u2588\u2588\u2588 \u2591\u2588\u2588\u2588 \u2591\u2588\u2588\u2588\u2591\u2591\u2588 \u2591\u2588\u2588\u2588 \u2591\u2588\u2588\u2588 \u2591\u2588\u2588\u2588"," \u2591\u2588\u2588\u2588 \u2588\u2588\u2588 \u2591\u2588\u2588\u2588 \u2591 \u2588\u2591\u2591\u2588\u2588\u2588 \u2588\u2588\u2588\u2591\u2591\u2588\u2588\u2588 \u2588\u2588\u2588 "," \u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588 \u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588 \u2591\u2591\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588 \u2591\u2591\u2591\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2591 ","\u2591\u2591\u2591\u2591\u2591\u2591\u2591\u2591\u2591\u2591 \u2591\u2591\u2591\u2591\u2591\u2591\u2591\u2591\u2591\u2591 \u2591\u2591\u2591\u2591\u2591\u2591\u2591\u2591\u2591 \u2591\u2591\u2591\u2591\u2591\u2591\u2591 "],Ga5=["#00ff64","#00ee5e","#00dc56","#00c84e","#00b444","#00a03c","#008832","#006e28"],RN0=[["#00ff64","#00cc50"],["#00f060","#00c04c"],["#00e05c","#00b448"],["#00d058","#00a844"],["#00c054","#009c40"],["#00b050","#00903c"],["#00a04c","#008438"],["#009048","#007834"],["#008044","#006c30"],["#007040","#00602c"],["#00603c","#005428"]],Ja5=new Set(["#875f00","#5f3800"])});import{useSyncExternalStore as Wa5}from"react";function $a5(){let X=process.stdout.rows||24,Y=process.stdout.columns||80;if(X!==mA1.rows||Y!==mA1.columns)mA1={rows:X,columns:Y};return mA1}function Ka5(X){return process.stdout.on("resize",X),()=>{process.stdout.off("resize",X)}}function N16(){return Wa5(Ka5,$a5)}var mA1;var z16=D(()=>{mA1={rows:process.stdout.rows||24,columns:process.stdout.columns||80}});import{Box as Ha5,Text as vX1}from"ink";import{useSyncExternalStore as Fa5}from"react";import{jsx as SN0,jsxs as kN0}from"react/jsx-runtime";function Ua5(X){if(X>=500)return"red";if(X>=400)return"yellow";if(X>=300)return"cyan";return"green"}function O16({logs:X,headerHeight:Y}){let{rows:G}=N16(),{logFlow:Q}=Fa5(RX1,MX1),J=Math.max(1,G-Y-1),W=Q?X:X.slice(-J);return SN0(Ha5,{flexDirection:"column",children:W.map((Z,$)=>{if(Z.rawLine)return SN0(vX1,{dimColor:!0,children:Z.rawLine},$);let K=Z.duration<1000?`${Z.duration}ms`:`${(Z.duration/1000).toFixed(1)}s`;return kN0(vX1,{children:[kN0(vX1,{dimColor:!0,children:[Z.method.padEnd(6)," ",Z.path.padEnd(30)," "]}),SN0(vX1,{color:Ua5(Z.status),children:Z.status}),kN0(vX1,{dimColor:!0,children:[" ",K.padStart(8)]})]},$)})})}var D16=D(()=>{Kz();z16()});var CN0={};T0(CN0,{App:()=>La5});import{Box as Ba5,Text as Na5,useInput as za5}from"ink";import{useSyncExternalStore as Oa5}from"react";import{jsx as dA1,jsxs as Ea5}from"react/jsx-runtime";function La5({home:X}){let Y=Oa5(RX1,MX1);return za5((G)=>{if(G==="k"||G==="K")EN0();if(G==="l"||G==="L")PN0();if((G==="v"||G==="V")&&Y.dataDir)It1(Y.dataDir),qN0();if((G==="n"||G==="N")&&Y.vibe)Tt1()}),Ea5(Ba5,{flexDirection:"column",children:[dA1(U16,{services:Y.services,migrationsStatus:Y.migrationsStatus,home:X,serverUrl:Y.serverUrl,vibe:Y.vibe}),Y.viewMode==="config"?Y.env?dA1(W16,{env:Y.env}):dA1(Na5,{dimColor:!0,children:"Loading configuration..."}):dA1(O16,{logs:Y.logs,headerHeight:Y.vibe?wa5:Da5})]})}var Da5=15,wa5=19;var vN0=D(()=>{$16();B16();D16();Kz();vd()});function w16(X,Y={}){return{PORT:String(X.port),NODE_ENV:X.nodeEnv,BASE_URL:X.baseUrl,DATA_DIR:X.dataDir,DECOCMS_HOME:X.dataDir,DATABASE_URL:X.databaseUrl,DATABASE_PG_SSL:String(X.databasePgSsl),DATABASE_POOL_MAX:String(X.databasePoolMax),NATS_URL:X.natsUrls.join(","),BETTER_AUTH_SECRET:X.betterAuthSecret,ENCRYPTION_KEY:X.encryptionKey,MESH_JWT_SECRET:X.meshJwtSecret,DECOCMS_LOCAL_MODE:String(X.localMode),DISABLE_RATE_LIMIT:String(X.disableRateLimit),STUDIO_PROVISION_SECRET_KEY:X.studioProvisionSecretKey,CONFIG_PATH:X.configPath,...Object.fromEntries(Object.entries(process.env).filter(([G])=>G.startsWith("AUTH_"))),DECO_AI_GATEWAY_ENABLED:String(X.aiGatewayEnabled),DECO_AI_GATEWAY_URL:X.aiGatewayUrl,ENABLE_DECO_IMPORT:String(X.enableDecoImport),S3_ENDPOINT:X.s3Endpoint,S3_BUCKET:X.s3Bucket,S3_REGION:X.s3Region,S3_ACCESS_KEY_ID:X.s3AccessKeyId,S3_SECRET_ACCESS_KEY:X.s3SecretAccessKey,S3_FORCE_PATH_STYLE:String(X.s3ForcePathStyle),OTEL_SERVICE_NAME:X.otelServiceName,CLICKHOUSE_URL:X.clickhouseUrl,DECO_SUPABASE_URL:X.decoSupabaseUrl,DECO_SUPABASE_SERVICE_KEY:X.decoSupabaseServiceKey,FIRECRAWL_API_KEY:X.firecrawlApiKey,STUDIO_SANDBOX_RUNNER:process.env.STUDIO_SANDBOX_RUNNER,STUDIO_SANDBOX_TEMPLATE_NAME:process.env.STUDIO_SANDBOX_TEMPLATE_NAME,STUDIO_ENV:process.env.STUDIO_ENV,STUDIO_SANDBOX_PREVIEW_URL_PATTERN:process.env.STUDIO_SANDBOX_PREVIEW_URL_PATTERN,STUDIO_SANDBOX_PREVIEW_GATEWAY_NAME:process.env.STUDIO_SANDBOX_PREVIEW_GATEWAY_NAME,STUDIO_SANDBOX_PREVIEW_GATEWAY_NAMESPACE:process.env.STUDIO_SANDBOX_PREVIEW_GATEWAY_NAMESPACE,STUDIO_SANDBOX_SENTINEL_TOKEN:process.env.STUDIO_SANDBOX_SENTINEL_TOKEN,KUBERNETES_SERVICE_HOST:process.env.KUBERNETES_SERVICE_HOST,KUBERNETES_SERVICE_PORT:process.env.KUBERNETES_SERVICE_PORT,FREESTYLE_API_KEY:process.env.FREESTYLE_API_KEY,BROWSERLESS_TOKEN:process.env.BROWSERLESS_TOKEN,NODE_EXTRA_CA_CERTS:process.env.NODE_EXTRA_CA_CERTS,DECO_CLI:"1",DECO_NO_TUI:"true",...Y}}var yj=k((Va5)=>{Va5.HttpAuthLocation=void 0;(function(X){X.HEADER="header",X.QUERY="query"})(Va5.HttpAuthLocation||(Va5.HttpAuthLocation={}));Va5.HttpApiKeyAuthLocation=void 0;(function(X){X.HEADER="header",X.QUERY="query"})(Va5.HttpApiKeyAuthLocation||(Va5.HttpApiKeyAuthLocation={}));Va5.EndpointURLScheme=void 0;(function(X){X.HTTP="http",X.HTTPS="https"})(Va5.EndpointURLScheme||(Va5.EndpointURLScheme={}));Va5.AlgorithmId=void 0;(function(X){X.MD5="md5",X.CRC32="crc32",X.CRC32C="crc32c",X.SHA1="sha1",X.SHA256="sha256"})(Va5.AlgorithmId||(Va5.AlgorithmId={}));var Pa5=(X)=>{let Y=[];if(X.sha256!==void 0)Y.push({algorithmId:()=>Va5.AlgorithmId.SHA256,checksumConstructor:()=>X.sha256});if(X.md5!=null)Y.push({algorithmId:()=>Va5.AlgorithmId.MD5,checksumConstructor:()=>X.md5});return{addChecksumAlgorithm(G){Y.push(G)},checksumAlgorithms(){return Y}}},qa5=(X)=>{let Y={};return X.checksumAlgorithms().forEach((G)=>{Y[G.algorithmId()]=G.checksumConstructor()}),Y},Aa5=(X)=>{return Pa5(X)},Ta5=(X)=>{return qa5(X)};Va5.FieldPosition=void 0;(function(X){X[X.HEADER=0]="HEADER",X[X.TRAILER=1]="TRAILER"})(Va5.FieldPosition||(Va5.FieldPosition={}));var Ia5="__smithy_context";Va5.IniSectionType=void 0;(function(X){X.PROFILE="profile",X.SSO_SESSION="sso-session",X.SERVICES="services"})(Va5.IniSectionType||(Va5.IniSectionType={}));Va5.RequestHandlerProtocol=void 0;(function(X){X.HTTP_0_9="http/0.9",X.HTTP_1_0="http/1.0",X.TDS_8_0="tds/8.0"})(Va5.RequestHandlerProtocol||(Va5.RequestHandlerProtocol={}));Va5.SMITHY_CONTEXT_KEY=Ia5;Va5.getDefaultClientConfiguration=Aa5;Va5.resolveDefaultRuntimeConfig=Ta5});var u7=k((fa5)=>{var Sa5=yj(),ka5=(X)=>{return{setHttpHandler(Y){X.httpHandler=Y},httpHandler(){return X.httpHandler},updateHttpClientConfig(Y,G){X.httpHandler?.updateHttpClientConfig(Y,G)},httpHandlerConfigs(){return X.httpHandler.httpHandlerConfigs()}}},Ca5=(X)=>{return{httpHandler:X.httpHandler()}};class L16{name;kind;values;constructor({name:X,kind:Y=Sa5.FieldPosition.HEADER,values:G=[]}){this.name=X,this.kind=Y,this.values=G}add(X){this.values.push(X)}set(X){this.values=X}remove(X){this.values=this.values.filter((Y)=>Y!==X)}toString(){return this.values.map((X)=>X.includes(",")||X.includes(" ")?`"${X}"`:X).join(", ")}get(){return this.values}}class E16{entries={};encoding;constructor({fields:X=[],encoding:Y="utf-8"}){X.forEach(this.setField.bind(this)),this.encoding=Y}setField(X){this.entries[X.name.toLowerCase()]=X}getField(X){return this.entries[X.toLowerCase()]}removeField(X){delete this.entries[X.toLowerCase()]}getByType(X){return Object.values(this.entries).filter((Y)=>Y.kind===X)}}class cA1{method;protocol;hostname;port;path;query;headers;username;password;fragment;body;constructor(X){this.method=X.method||"GET",this.hostname=X.hostname||"localhost",this.port=X.port,this.query=X.query||{},this.headers=X.headers||{},this.body=X.body,this.protocol=X.protocol?X.protocol.slice(-1)!==":"?`${X.protocol}:`:X.protocol:"https:",this.path=X.path?X.path.charAt(0)!=="/"?`/${X.path}`:X.path:"/",this.username=X.username,this.password=X.password,this.fragment=X.fragment}static clone(X){let Y=new cA1({...X,headers:{...X.headers}});if(Y.query)Y.query=va5(Y.query);return Y}static isInstance(X){if(!X)return!1;let Y=X;return"method"in Y&&"protocol"in Y&&"hostname"in Y&&"path"in Y&&typeof Y.query==="object"&&typeof Y.headers==="object"}clone(){return cA1.clone(this)}}function va5(X){return Object.keys(X).reduce((Y,G)=>{let Q=X[G];return{...Y,[G]:Array.isArray(Q)?[...Q]:Q}},{})}class P16{statusCode;reason;headers;body;constructor(X){this.statusCode=X.statusCode,this.reason=X.reason,this.headers=X.headers||{},this.body=X.body}static isInstance(X){if(!X)return!1;let Y=X;return typeof Y.statusCode==="number"&&typeof Y.headers==="object"}}function _a5(X){return/^[a-z0-9][a-z0-9\.\-]*[a-z0-9]$/.test(X)}fa5.Field=L16;fa5.Fields=E16;fa5.HttpRequest=cA1;fa5.HttpResponse=P16;fa5.getHttpHandlerExtensionConfiguration=ka5;fa5.isValidHostname=_a5;fa5.resolveHttpHandlerRuntimeConfig=Ca5});function ma5(X){return(Y)=>async(G)=>{let{request:Q}=G;if(X.expectContinueHeader!==!1&&q16.HttpRequest.isInstance(Q)&&Q.body&&X.runtime==="node"&&X.requestHandler?.constructor?.name!=="FetchHttpHandler"){let J=!0;if(typeof X.expectContinueHeader==="number")try{J=(Number(Q.headers?.["content-length"])??X.bodyLengthChecker?.(Q.body)??1/0)>=X.expectContinueHeader}catch(W){}else J=!!X.expectContinueHeader;if(J)Q.headers.Expect="100-continue"}return Y({...G,request:Q})}}var q16,da5,A16=(X)=>({applyToStack:(Y)=>{Y.add(ma5(X),da5)}});var T16=D(()=>{q16=Y1(u7(),1);da5={step:"build",tags:["SET_EXPECT_HEADER","EXPECT_HEADER"],name:"addExpectContinueMiddleware",override:!0}});var wH,iA1,xj,pA1,E9,I16,fX1;var LH=D(()=>{wH={WHEN_SUPPORTED:"WHEN_SUPPORTED",WHEN_REQUIRED:"WHEN_REQUIRED"},iA1=wH.WHEN_SUPPORTED,xj={WHEN_SUPPORTED:"WHEN_SUPPORTED",WHEN_REQUIRED:"WHEN_REQUIRED"},pA1=wH.WHEN_SUPPORTED;(function(X){X.MD5="MD5",X.CRC32="CRC32",X.CRC32C="CRC32C",X.CRC64NVME="CRC64NVME",X.SHA1="SHA1",X.SHA256="SHA256"})(E9||(E9={}));(function(X){X.HEADER="header",X.TRAILER="trailer"})(I16||(I16={}));fX1=E9.CRC32});var kq,Xa=(X,Y,G,Q)=>{if(!(Y in X))return;let J=X[Y].toUpperCase();if(!Object.values(G).includes(J))throw TypeError(`Cannot load ${Q} '${Y}'. Expected one of ${Object.values(G)}, got '${X[Y]}'.`);return J};var gN0=D(()=>{(function(X){X.ENV="env",X.CONFIG="shared config entry"})(kq||(kq={}))});var ca5="AWS_REQUEST_CHECKSUM_CALCULATION",ia5="request_checksum_calculation",V16;var j16=D(()=>{LH();gN0();V16={environmentVariableSelector:(X)=>Xa(X,ca5,wH,kq.ENV),configFileSelector:(X)=>Xa(X,ia5,wH,kq.CONFIG),default:iA1}});var pa5="AWS_RESPONSE_CHECKSUM_VALIDATION",na5="response_checksum_validation",M16;var R16=D(()=>{LH();gN0();M16={environmentVariableSelector:(X)=>Xa(X,pa5,xj,kq.ENV),configFileSelector:(X)=>Xa(X,na5,xj,kq.CONFIG),default:pA1}});var lN0=k((Qr5)=>{var ta5=["AuthFailure","InvalidSignatureException","RequestExpired","RequestInTheFuture","RequestTimeTooSkewed","SignatureDoesNotMatch"],aa5=["BandwidthLimitExceeded","EC2ThrottledException","LimitExceededException","PriorRequestNotComplete","ProvisionedThroughputExceededException","RequestLimitExceeded","RequestThrottled","RequestThrottledException","SlowDown","ThrottledException","Throttling","ThrottlingException","TooManyRequestsException","TransactionInProgressException"],ra5=["TimeoutError","RequestTimeout","RequestTimeoutException"],oa5=[500,502,503,504],sa5=["ECONNRESET","ECONNREFUSED","EPIPE","ETIMEDOUT"],ea5=["EHOSTUNREACH","ENETUNREACH","ENOTFOUND"],S16=(X)=>X?.$retryable!==void 0,Xr5=(X)=>ta5.includes(X.name),k16=(X)=>X.$metadata?.clockSkewCorrected,C16=(X)=>{let Y=new Set(["Failed to fetch","NetworkError when attempting to fetch resource","The Internet connection appears to be offline","Load failed","Network request failed"]);if(!(X&&X instanceof TypeError))return!1;return Y.has(X.message)},Yr5=(X)=>X.$metadata?.httpStatusCode===429||aa5.includes(X.name)||X.$retryable?.throttling==!0,uN0=(X,Y=0)=>S16(X)||k16(X)||X.name==="InvalidSignatureException"&&X.message?.includes("Signature expired")||ra5.includes(X.name)||sa5.includes(X?.code||"")||ea5.includes(X?.code||"")||oa5.includes(X.$metadata?.httpStatusCode||0)||C16(X)||v16(X)||X.cause!==void 0&&Y<=10&&uN0(X.cause,Y+1),Gr5=(X)=>{if(X.$metadata?.httpStatusCode!==void 0){let Y=X.$metadata.httpStatusCode;if(500<=Y&&Y<=599&&!uN0(X))return!0;return!1}return!1};function v16(X){return X.code==="ERR_HTTP2_STREAM_ERROR"&&X.message.includes("NGHTTP2_REFUSED_STREAM")}Qr5.isBrowserNetworkError=C16;Qr5.isClockSkewCorrectedError=k16;Qr5.isClockSkewError=Xr5;Qr5.isNodeJsHttp2TransientError=v16;Qr5.isRetryableByTrait=S16;Qr5.isServerError=Gr5;Qr5.isThrottlingError=Yr5;Qr5.isTransientError=uN0});var ww=k((Pr5)=>{var Br5=lN0();Pr5.RETRY_MODES=void 0;(function(X){X.STANDARD="standard",X.ADAPTIVE="adaptive"})(Pr5.RETRY_MODES||(Pr5.RETRY_MODES={}));var tA1=3,Nr5=Pr5.RETRY_MODES.STANDARD;class aA1{static setTimeoutFn=setTimeout;beta;minCapacity;minFillRate;scaleConstant;smooth;enabled=!1;availableTokens=0;lastMaxRate=0;measuredTxRate=0;requestCount=0;fillRate;lastThrottleTime;lastTimestamp=0;lastTxRateBucket;maxCapacity;timeWindow=0;constructor(X){this.beta=X?.beta??0.7,this.minCapacity=X?.minCapacity??1,this.minFillRate=X?.minFillRate??0.5,this.scaleConstant=X?.scaleConstant??0.4,this.smooth=X?.smooth??0.8,this.lastThrottleTime=this.getCurrentTimeInSeconds(),this.lastTxRateBucket=Math.floor(this.getCurrentTimeInSeconds()),this.fillRate=this.minFillRate,this.maxCapacity=this.minCapacity}async getSendToken(){return this.acquireTokenBucket(1)}updateClientSendingRate(X){let Y;this.updateMeasuredRate();let G=X;if(G?.errorType==="THROTTLING"||Br5.isThrottlingError(G?.error??X)){let W=!this.enabled?this.measuredTxRate:Math.min(this.measuredTxRate,this.fillRate);this.lastMaxRate=W,this.calculateTimeWindow(),this.lastThrottleTime=this.getCurrentTimeInSeconds(),Y=this.cubicThrottle(W),this.enableTokenBucket()}else this.calculateTimeWindow(),Y=this.cubicSuccess(this.getCurrentTimeInSeconds());let J=Math.min(Y,2*this.measuredTxRate);this.updateTokenBucketRate(J)}getCurrentTimeInSeconds(){return Date.now()/1000}async acquireTokenBucket(X){if(!this.enabled)return;if(this.refillTokenBucket(),X>this.availableTokens){let Y=(X-this.availableTokens)/this.fillRate*1000;await new Promise((G)=>aA1.setTimeoutFn(G,Y))}this.availableTokens=this.availableTokens-X}refillTokenBucket(){let X=this.getCurrentTimeInSeconds();if(!this.lastTimestamp){this.lastTimestamp=X;return}let Y=(X-this.lastTimestamp)*this.fillRate;this.availableTokens=Math.min(this.maxCapacity,this.availableTokens+Y),this.lastTimestamp=X}calculateTimeWindow(){this.timeWindow=this.getPrecise(Math.pow(this.lastMaxRate*(1-this.beta)/this.scaleConstant,0.3333333333333333))}cubicThrottle(X){return this.getPrecise(X*this.beta)}cubicSuccess(X){return this.getPrecise(this.scaleConstant*Math.pow(X-this.lastThrottleTime-this.timeWindow,3)+this.lastMaxRate)}enableTokenBucket(){this.enabled=!0}updateTokenBucketRate(X){this.refillTokenBucket(),this.fillRate=Math.max(X,this.minFillRate),this.maxCapacity=Math.max(X,this.minCapacity),this.availableTokens=Math.min(this.availableTokens,this.maxCapacity)}updateMeasuredRate(){let X=this.getCurrentTimeInSeconds(),Y=Math.floor(X*2)/2;if(this.requestCount++,Y>this.lastTxRateBucket){let G=this.requestCount/(Y-this.lastTxRateBucket);this.measuredTxRate=this.getPrecise(G*this.smooth+this.measuredTxRate*(1-this.smooth)),this.requestCount=0,this.lastTxRateBucket=Y}}getPrecise(X){return parseFloat(X.toFixed(8))}}var zr5=100,cN0=20000,Or5=500,mN0=500,Dr5=5,wr5=10,_16=1,Lr5="amz-sdk-invocation-id",Er5="amz-sdk-request";class eQ{static v2026=typeof process<"u"&&process.env?.SMITHY_NEW_RETRIES_2026==="true";static delay(){return eQ.v2026?50:100}static throttlingDelay(){return eQ.v2026?1000:500}static cost(){return eQ.v2026?14:5}static throttlingCost(){return eQ.v2026?5:10}static modifiedCostType(){return eQ.v2026?"THROTTLING":"TRANSIENT"}}class f16{x=eQ.delay();computeNextBackoffDelay(X){let Y=Math.random(),G=2,Q=Y*Math.min(this.x*2**X,cN0);return Math.floor(Q)}setDelayBase(X){this.x=X}}class dN0{delay;count;cost;longPoll;constructor(X,Y,G,Q){this.delay=X,this.count=Y,this.cost=G,this.longPoll=Q}getRetryCount(){return this.count}getRetryDelay(){return Math.min(cN0,this.delay)}getRetryCost(){return this.cost}isLongPoll(){return this.longPoll}}var nA1={incompatible:1,attempts:2,capacity:3};class bX1{mode=Pr5.RETRY_MODES.STANDARD;capacity=mN0;retryBackoffStrategy;maxAttemptsProvider;baseDelay;constructor(X){if(typeof X==="number")this.maxAttemptsProvider=async()=>X;else if(typeof X==="function")this.maxAttemptsProvider=X;else if(X&&typeof X==="object")this.maxAttemptsProvider=async()=>X.maxAttempts,this.baseDelay=X.baseDelay,this.retryBackoffStrategy=X.backoff;this.maxAttemptsProvider??=async()=>tA1,this.baseDelay??=eQ.delay(),this.retryBackoffStrategy??=new f16}async acquireInitialRetryToken(X){return new dN0(eQ.delay(),0,void 0,eQ.v2026&&X.includes(":longpoll"))}async refreshRetryTokenForRetry(X,Y){let G=await this.getMaxAttempts(),Q=this.retryCode(X,Y,G),J=Q===0,W=X.isLongPoll?.();if(J||W){let Z=Y.errorType;this.retryBackoffStrategy.setDelayBase(Z==="THROTTLING"?eQ.throttlingDelay():this.baseDelay);let $=this.retryBackoffStrategy.computeNextBackoffDelay(X.getRetryCount()),K=$;if(Y.retryAfterHint instanceof Date)K=Math.max($,Math.min(Y.retryAfterHint.getTime()-Date.now(),$+5000));if(!J)throw Object.assign(Error("No retry token available"),{$backoff:eQ.v2026&&Q===nA1.capacity&&W?K:0});else{let H=this.getCapacityCost(Z);return this.capacity-=H,new dN0(K,X.getRetryCount()+1,H,X.isLongPoll?.()??!1)}}throw Error("No retry token available")}recordSuccess(X){this.capacity=Math.min(mN0,this.capacity+(X.getRetryCost()??_16))}getCapacity(){return this.capacity}async maxAttempts(){return this.maxAttemptsProvider()}async getMaxAttempts(){try{return await this.maxAttemptsProvider()}catch(X){return console.warn(`Max attempts provider could not resolve. Using default of ${tA1}`),tA1}}retryCode(X,Y,G){let Q=X.getRetryCount()+1,J=this.isRetryableError(Y.errorType)?0:nA1.incompatible,W=Q<G?0:nA1.attempts,Z=this.capacity>=this.getCapacityCost(Y.errorType)?0:nA1.capacity;return J||W||Z}getCapacityCost(X){return X===eQ.modifiedCostType()?eQ.throttlingCost():eQ.cost()}isRetryableError(X){return X==="THROTTLING"||X==="TRANSIENT"}}class b16{mode=Pr5.RETRY_MODES.ADAPTIVE;rateLimiter;standardRetryStrategy;constructor(X,Y){let{rateLimiter:G}=Y??{};this.rateLimiter=G??new aA1,this.standardRetryStrategy=Y?new bX1({maxAttempts:typeof X==="number"?X:3,...Y}):new bX1(X)}async acquireInitialRetryToken(X){return await this.rateLimiter.getSendToken(),this.standardRetryStrategy.acquireInitialRetryToken(X)}async refreshRetryTokenForRetry(X,Y){return this.rateLimiter.updateClientSendingRate(Y),this.standardRetryStrategy.refreshRetryTokenForRetry(X,Y)}recordSuccess(X){this.rateLimiter.updateClientSendingRate({}),this.standardRetryStrategy.recordSuccess(X)}async maxAttemptsProvider(){return this.standardRetryStrategy.maxAttempts()}}class y16 extends bX1{computeNextBackoffDelay;constructor(X,Y=eQ.delay()){super(typeof X==="function"?X:async()=>X);if(typeof Y==="number")this.computeNextBackoffDelay=()=>Y;else this.computeNextBackoffDelay=Y}async refreshRetryTokenForRetry(X,Y){let G=await super.refreshRetryTokenForRetry(X,Y);return G.getRetryDelay=()=>this.computeNextBackoffDelay(G.getRetryCount()),G}}Pr5.AdaptiveRetryStrategy=b16;Pr5.ConfiguredRetryStrategy=y16;Pr5.DEFAULT_MAX_ATTEMPTS=tA1;Pr5.DEFAULT_RETRY_DELAY_BASE=zr5;Pr5.DEFAULT_RETRY_MODE=Nr5;Pr5.DefaultRateLimiter=aA1;Pr5.INITIAL_RETRY_TOKENS=mN0;Pr5.INVOCATION_ID_HEADER=Lr5;Pr5.MAXIMUM_RETRY_DELAY=cN0;Pr5.NO_RETRY_INCREMENT=_16;Pr5.REQUEST_HEADER=Er5;Pr5.RETRY_COST=Dr5;Pr5.Retry=eQ;Pr5.StandardRetryStrategy=bX1;Pr5.THROTTLING_RETRY_DELAY_BASE=Or5;Pr5.TIMEOUT_RETRY_COST=wr5});var WX=k((ir5)=>{var xr5=ww(),iN0={warningEmitted:!1},hr5=(X)=>{if(X&&!iN0.warningEmitted&&parseInt(X.substring(1,X.indexOf(".")))<20)iN0.warningEmitted=!0,process.emitWarning(`NodeDeprecationWarning: The AWS SDK for JavaScript (v3) will
|
|
1631
1631
|
no longer support Node.js ${X} in January 2026.
|
|
1632
1632
|
|
|
1633
1633
|
To continue receiving updates to AWS services, bug fixes, and security
|
|
@@ -0,0 +1,60 @@
|
|
|
1
|
+
export type WidthType = 'fullwidth' | 'halfwidth' | 'wide' | 'narrow' | 'neutral' | 'ambiguous';
|
|
2
|
+
|
|
3
|
+
export type Options = {
|
|
4
|
+
/**
|
|
5
|
+
Whether to treat an `'ambiguous'` character as wide.
|
|
6
|
+
|
|
7
|
+
@default true
|
|
8
|
+
|
|
9
|
+
@example
|
|
10
|
+
```
|
|
11
|
+
import {eastAsianWidth} from 'get-east-asian-width';
|
|
12
|
+
|
|
13
|
+
const codePoint = '⛣'.codePointAt(0);
|
|
14
|
+
|
|
15
|
+
console.log(eastAsianWidth(codePoint));
|
|
16
|
+
//=> 1
|
|
17
|
+
|
|
18
|
+
console.log(eastAsianWidth(codePoint, {ambiguousAsWide: true}));
|
|
19
|
+
//=> 2
|
|
20
|
+
```
|
|
21
|
+
|
|
22
|
+
> Ambiguous characters behave like wide or narrow characters depending on the context (language tag, script identification, associated font, source of data, or explicit markup; all can provide the context). __If the context cannot be established reliably, they should be treated as narrow characters by default.__
|
|
23
|
+
> - http://www.unicode.org/reports/tr11/
|
|
24
|
+
*/
|
|
25
|
+
readonly ambiguousAsWide?: boolean;
|
|
26
|
+
};
|
|
27
|
+
|
|
28
|
+
/**
|
|
29
|
+
Returns the width as a number for the given code point.
|
|
30
|
+
|
|
31
|
+
@param codePoint - A Unicode code point.
|
|
32
|
+
|
|
33
|
+
@example
|
|
34
|
+
```
|
|
35
|
+
import {eastAsianWidth} from 'get-east-asian-width';
|
|
36
|
+
|
|
37
|
+
const codePoint = '字'.codePointAt(0);
|
|
38
|
+
|
|
39
|
+
console.log(eastAsianWidth(codePoint));
|
|
40
|
+
//=> 2
|
|
41
|
+
```
|
|
42
|
+
*/
|
|
43
|
+
export function eastAsianWidth(codePoint: number, options?: Options): 1 | 2;
|
|
44
|
+
|
|
45
|
+
/**
|
|
46
|
+
Returns the type of “East Asian Width” for the given code point.
|
|
47
|
+
|
|
48
|
+
@param codePoint - A Unicode code point.
|
|
49
|
+
|
|
50
|
+
@example
|
|
51
|
+
```
|
|
52
|
+
import {eastAsianWidthType} from 'get-east-asian-width';
|
|
53
|
+
|
|
54
|
+
const codePoint = '字'.codePointAt(0);
|
|
55
|
+
|
|
56
|
+
console.log(eastAsianWidthType(codePoint));
|
|
57
|
+
//=> 'wide'
|
|
58
|
+
```
|
|
59
|
+
*/
|
|
60
|
+
export function eastAsianWidthType(codePoint: number): WidthType;
|
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
import {getCategory, isAmbiguous, isFullWidth, isWide} from './lookup.js';
|
|
2
|
+
|
|
3
|
+
function validate(codePoint) {
|
|
4
|
+
if (!Number.isSafeInteger(codePoint)) {
|
|
5
|
+
throw new TypeError(`Expected a code point, got \`${typeof codePoint}\`.`);
|
|
6
|
+
}
|
|
7
|
+
}
|
|
8
|
+
|
|
9
|
+
export function eastAsianWidthType(codePoint) {
|
|
10
|
+
validate(codePoint);
|
|
11
|
+
|
|
12
|
+
return getCategory(codePoint);
|
|
13
|
+
}
|
|
14
|
+
|
|
15
|
+
export function eastAsianWidth(codePoint, {ambiguousAsWide = false} = {}) {
|
|
16
|
+
validate(codePoint);
|
|
17
|
+
|
|
18
|
+
if (
|
|
19
|
+
isFullWidth(codePoint)
|
|
20
|
+
|| isWide(codePoint)
|
|
21
|
+
|| (ambiguousAsWide && isAmbiguous(codePoint))
|
|
22
|
+
) {
|
|
23
|
+
return 2;
|
|
24
|
+
}
|
|
25
|
+
|
|
26
|
+
return 1;
|
|
27
|
+
}
|
|
28
|
+
|
|
29
|
+
// Private exports for https://github.com/sindresorhus/is-fullwidth-code-point
|
|
30
|
+
export {isFullWidth as _isFullWidth, isWide as _isWide} from './lookup.js';
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
// Generated by scripts/build.js
|
|
2
|
+
|
|
3
|
+
// prettier-ignore
|
|
4
|
+
const ambiguousRanges = [161, 161, 164, 164, 167, 168, 170, 170, 173, 174, 176, 180, 182, 186, 188, 191, 198, 198, 208, 208, 215, 216, 222, 225, 230, 230, 232, 234, 236, 237, 240, 240, 242, 243, 247, 250, 252, 252, 254, 254, 257, 257, 273, 273, 275, 275, 283, 283, 294, 295, 299, 299, 305, 307, 312, 312, 319, 322, 324, 324, 328, 331, 333, 333, 338, 339, 358, 359, 363, 363, 462, 462, 464, 464, 466, 466, 468, 468, 470, 470, 472, 472, 474, 474, 476, 476, 593, 593, 609, 609, 708, 708, 711, 711, 713, 715, 717, 717, 720, 720, 728, 731, 733, 733, 735, 735, 768, 879, 913, 929, 931, 937, 945, 961, 963, 969, 1025, 1025, 1040, 1103, 1105, 1105, 8208, 8208, 8211, 8214, 8216, 8217, 8220, 8221, 8224, 8226, 8228, 8231, 8240, 8240, 8242, 8243, 8245, 8245, 8251, 8251, 8254, 8254, 8308, 8308, 8319, 8319, 8321, 8324, 8364, 8364, 8451, 8451, 8453, 8453, 8457, 8457, 8467, 8467, 8470, 8470, 8481, 8482, 8486, 8486, 8491, 8491, 8531, 8532, 8539, 8542, 8544, 8555, 8560, 8569, 8585, 8585, 8592, 8601, 8632, 8633, 8658, 8658, 8660, 8660, 8679, 8679, 8704, 8704, 8706, 8707, 8711, 8712, 8715, 8715, 8719, 8719, 8721, 8721, 8725, 8725, 8730, 8730, 8733, 8736, 8739, 8739, 8741, 8741, 8743, 8748, 8750, 8750, 8756, 8759, 8764, 8765, 8776, 8776, 8780, 8780, 8786, 8786, 8800, 8801, 8804, 8807, 8810, 8811, 8814, 8815, 8834, 8835, 8838, 8839, 8853, 8853, 8857, 8857, 8869, 8869, 8895, 8895, 8978, 8978, 9312, 9449, 9451, 9547, 9552, 9587, 9600, 9615, 9618, 9621, 9632, 9633, 9635, 9641, 9650, 9651, 9654, 9655, 9660, 9661, 9664, 9665, 9670, 9672, 9675, 9675, 9678, 9681, 9698, 9701, 9711, 9711, 9733, 9734, 9737, 9737, 9742, 9743, 9756, 9756, 9758, 9758, 9792, 9792, 9794, 9794, 9824, 9825, 9827, 9829, 9831, 9834, 9836, 9837, 9839, 9839, 9886, 9887, 9919, 9919, 9926, 9933, 9935, 9939, 9941, 9953, 9955, 9955, 9960, 9961, 9963, 9969, 9972, 9972, 9974, 9977, 9979, 9980, 9982, 9983, 10045, 10045, 10102, 10111, 11094, 11097, 12872, 12879, 57344, 63743, 65024, 65039, 65533, 65533, 127232, 127242, 127248, 127277, 127280, 127337, 127344, 127373, 127375, 127376, 127387, 127404, 917760, 917999, 983040, 1048573, 1048576, 1114109];
|
|
5
|
+
|
|
6
|
+
// prettier-ignore
|
|
7
|
+
const fullwidthRanges = [12288, 12288, 65281, 65376, 65504, 65510];
|
|
8
|
+
|
|
9
|
+
// prettier-ignore
|
|
10
|
+
const halfwidthRanges = [8361, 8361, 65377, 65470, 65474, 65479, 65482, 65487, 65490, 65495, 65498, 65500, 65512, 65518];
|
|
11
|
+
|
|
12
|
+
// prettier-ignore
|
|
13
|
+
const narrowRanges = [32, 126, 162, 163, 165, 166, 172, 172, 175, 175, 10214, 10221, 10629, 10630];
|
|
14
|
+
|
|
15
|
+
// prettier-ignore
|
|
16
|
+
const wideRanges = [4352, 4447, 8986, 8987, 9001, 9002, 9193, 9196, 9200, 9200, 9203, 9203, 9725, 9726, 9748, 9749, 9776, 9783, 9800, 9811, 9855, 9855, 9866, 9871, 9875, 9875, 9889, 9889, 9898, 9899, 9917, 9918, 9924, 9925, 9934, 9934, 9940, 9940, 9962, 9962, 9970, 9971, 9973, 9973, 9978, 9978, 9981, 9981, 9989, 9989, 9994, 9995, 10024, 10024, 10060, 10060, 10062, 10062, 10067, 10069, 10071, 10071, 10133, 10135, 10160, 10160, 10175, 10175, 11035, 11036, 11088, 11088, 11093, 11093, 11904, 11929, 11931, 12019, 12032, 12245, 12272, 12287, 12289, 12350, 12353, 12438, 12441, 12543, 12549, 12591, 12593, 12686, 12688, 12773, 12783, 12830, 12832, 12871, 12880, 42124, 42128, 42182, 43360, 43388, 44032, 55203, 63744, 64255, 65040, 65049, 65072, 65106, 65108, 65126, 65128, 65131, 94176, 94180, 94192, 94198, 94208, 101589, 101631, 101662, 101760, 101874, 110576, 110579, 110581, 110587, 110589, 110590, 110592, 110882, 110898, 110898, 110928, 110930, 110933, 110933, 110948, 110951, 110960, 111355, 119552, 119638, 119648, 119670, 126980, 126980, 127183, 127183, 127374, 127374, 127377, 127386, 127488, 127490, 127504, 127547, 127552, 127560, 127568, 127569, 127584, 127589, 127744, 127776, 127789, 127797, 127799, 127868, 127870, 127891, 127904, 127946, 127951, 127955, 127968, 127984, 127988, 127988, 127992, 128062, 128064, 128064, 128066, 128252, 128255, 128317, 128331, 128334, 128336, 128359, 128378, 128378, 128405, 128406, 128420, 128420, 128507, 128591, 128640, 128709, 128716, 128716, 128720, 128722, 128725, 128728, 128732, 128735, 128747, 128748, 128756, 128764, 128992, 129003, 129008, 129008, 129292, 129338, 129340, 129349, 129351, 129535, 129648, 129660, 129664, 129674, 129678, 129734, 129736, 129736, 129741, 129756, 129759, 129770, 129775, 129784, 131072, 196605, 196608, 262141];
|
|
17
|
+
|
|
18
|
+
export {ambiguousRanges, fullwidthRanges, halfwidthRanges, narrowRanges, wideRanges};
|
|
@@ -0,0 +1,135 @@
|
|
|
1
|
+
import {
|
|
2
|
+
ambiguousRanges,
|
|
3
|
+
fullwidthRanges,
|
|
4
|
+
halfwidthRanges,
|
|
5
|
+
narrowRanges,
|
|
6
|
+
wideRanges,
|
|
7
|
+
} from './lookup-data.js';
|
|
8
|
+
import {isInRange} from './utilities.js';
|
|
9
|
+
|
|
10
|
+
const minimumAmbiguousCodePoint = ambiguousRanges[0];
|
|
11
|
+
const maximumAmbiguousCodePoint = ambiguousRanges.at(-1);
|
|
12
|
+
const minimumFullWidthCodePoint = fullwidthRanges[0];
|
|
13
|
+
const maximumFullWidthCodePoint = fullwidthRanges.at(-1);
|
|
14
|
+
const minimumHalfWidthCodePoint = halfwidthRanges[0];
|
|
15
|
+
const maximumHalfWidthCodePoint = halfwidthRanges.at(-1);
|
|
16
|
+
const minimumNarrowCodePoint = narrowRanges[0];
|
|
17
|
+
const maximumNarrowCodePoint = narrowRanges.at(-1);
|
|
18
|
+
const minimumWideCodePoint = wideRanges[0];
|
|
19
|
+
const maximumWideCodePoint = wideRanges.at(-1);
|
|
20
|
+
|
|
21
|
+
const commonCjkCodePoint = 0x4E_00;
|
|
22
|
+
const [wideFastPathStart, wideFastPathEnd] = findWideFastPathRange(wideRanges);
|
|
23
|
+
|
|
24
|
+
// Use a hot-path range so common `isWide` calls can skip binary search.
|
|
25
|
+
// The range containing U+4E00 covers common CJK ideographs;
|
|
26
|
+
// fallback to the largest range for resilience to Unicode table changes.
|
|
27
|
+
function findWideFastPathRange(ranges) {
|
|
28
|
+
let fastPathStart = ranges[0];
|
|
29
|
+
let fastPathEnd = ranges[1];
|
|
30
|
+
|
|
31
|
+
for (let index = 0; index < ranges.length; index += 2) {
|
|
32
|
+
const start = ranges[index];
|
|
33
|
+
const end = ranges[index + 1];
|
|
34
|
+
|
|
35
|
+
if (
|
|
36
|
+
commonCjkCodePoint >= start
|
|
37
|
+
&& commonCjkCodePoint <= end
|
|
38
|
+
) {
|
|
39
|
+
return [start, end];
|
|
40
|
+
}
|
|
41
|
+
|
|
42
|
+
if ((end - start) > (fastPathEnd - fastPathStart)) {
|
|
43
|
+
fastPathStart = start;
|
|
44
|
+
fastPathEnd = end;
|
|
45
|
+
}
|
|
46
|
+
}
|
|
47
|
+
|
|
48
|
+
return [fastPathStart, fastPathEnd];
|
|
49
|
+
}
|
|
50
|
+
|
|
51
|
+
export const isAmbiguous = codePoint => {
|
|
52
|
+
if (
|
|
53
|
+
codePoint < minimumAmbiguousCodePoint
|
|
54
|
+
|| codePoint > maximumAmbiguousCodePoint
|
|
55
|
+
) {
|
|
56
|
+
return false;
|
|
57
|
+
}
|
|
58
|
+
|
|
59
|
+
return isInRange(ambiguousRanges, codePoint);
|
|
60
|
+
};
|
|
61
|
+
|
|
62
|
+
export const isFullWidth = codePoint => {
|
|
63
|
+
if (
|
|
64
|
+
codePoint < minimumFullWidthCodePoint
|
|
65
|
+
|| codePoint > maximumFullWidthCodePoint
|
|
66
|
+
) {
|
|
67
|
+
return false;
|
|
68
|
+
}
|
|
69
|
+
|
|
70
|
+
return isInRange(fullwidthRanges, codePoint);
|
|
71
|
+
};
|
|
72
|
+
|
|
73
|
+
const isHalfWidth = codePoint => {
|
|
74
|
+
if (
|
|
75
|
+
codePoint < minimumHalfWidthCodePoint
|
|
76
|
+
|| codePoint > maximumHalfWidthCodePoint
|
|
77
|
+
) {
|
|
78
|
+
return false;
|
|
79
|
+
}
|
|
80
|
+
|
|
81
|
+
return isInRange(halfwidthRanges, codePoint);
|
|
82
|
+
};
|
|
83
|
+
|
|
84
|
+
const isNarrow = codePoint => {
|
|
85
|
+
if (
|
|
86
|
+
codePoint < minimumNarrowCodePoint
|
|
87
|
+
|| codePoint > maximumNarrowCodePoint
|
|
88
|
+
) {
|
|
89
|
+
return false;
|
|
90
|
+
}
|
|
91
|
+
|
|
92
|
+
return isInRange(narrowRanges, codePoint);
|
|
93
|
+
};
|
|
94
|
+
|
|
95
|
+
export const isWide = codePoint => {
|
|
96
|
+
if (
|
|
97
|
+
codePoint >= wideFastPathStart
|
|
98
|
+
&& codePoint <= wideFastPathEnd
|
|
99
|
+
) {
|
|
100
|
+
return true;
|
|
101
|
+
}
|
|
102
|
+
|
|
103
|
+
if (
|
|
104
|
+
codePoint < minimumWideCodePoint
|
|
105
|
+
|| codePoint > maximumWideCodePoint
|
|
106
|
+
) {
|
|
107
|
+
return false;
|
|
108
|
+
}
|
|
109
|
+
|
|
110
|
+
return isInRange(wideRanges, codePoint);
|
|
111
|
+
};
|
|
112
|
+
|
|
113
|
+
export function getCategory(codePoint) {
|
|
114
|
+
if (isAmbiguous(codePoint)) {
|
|
115
|
+
return 'ambiguous';
|
|
116
|
+
}
|
|
117
|
+
|
|
118
|
+
if (isFullWidth(codePoint)) {
|
|
119
|
+
return 'fullwidth';
|
|
120
|
+
}
|
|
121
|
+
|
|
122
|
+
if (isHalfWidth(codePoint)) {
|
|
123
|
+
return 'halfwidth';
|
|
124
|
+
}
|
|
125
|
+
|
|
126
|
+
if (isNarrow(codePoint)) {
|
|
127
|
+
return 'narrow';
|
|
128
|
+
}
|
|
129
|
+
|
|
130
|
+
if (isWide(codePoint)) {
|
|
131
|
+
return 'wide';
|
|
132
|
+
}
|
|
133
|
+
|
|
134
|
+
return 'neutral';
|
|
135
|
+
}
|
|
@@ -0,0 +1,71 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "get-east-asian-width",
|
|
3
|
+
"version": "1.5.0",
|
|
4
|
+
"description": "Determine the East Asian Width of a Unicode character",
|
|
5
|
+
"license": "MIT",
|
|
6
|
+
"repository": "sindresorhus/get-east-asian-width",
|
|
7
|
+
"funding": "https://github.com/sponsors/sindresorhus",
|
|
8
|
+
"author": {
|
|
9
|
+
"name": "Sindre Sorhus",
|
|
10
|
+
"email": "sindresorhus@gmail.com",
|
|
11
|
+
"url": "https://sindresorhus.com"
|
|
12
|
+
},
|
|
13
|
+
"type": "module",
|
|
14
|
+
"exports": {
|
|
15
|
+
"types": "./index.d.ts",
|
|
16
|
+
"default": "./index.js"
|
|
17
|
+
},
|
|
18
|
+
"sideEffects": false,
|
|
19
|
+
"engines": {
|
|
20
|
+
"node": ">=18"
|
|
21
|
+
},
|
|
22
|
+
"scripts": {
|
|
23
|
+
"test": "xo && ava && tsc index.d.ts",
|
|
24
|
+
"build": "node scripts/build.js",
|
|
25
|
+
"prepublish": "npm run build"
|
|
26
|
+
},
|
|
27
|
+
"files": [
|
|
28
|
+
"index.js",
|
|
29
|
+
"index.d.ts",
|
|
30
|
+
"lookup.js",
|
|
31
|
+
"lookup-data.js",
|
|
32
|
+
"utilities.js"
|
|
33
|
+
],
|
|
34
|
+
"keywords": [
|
|
35
|
+
"unicode",
|
|
36
|
+
"east-asian-width",
|
|
37
|
+
"eastasianwidth",
|
|
38
|
+
"character",
|
|
39
|
+
"string",
|
|
40
|
+
"width",
|
|
41
|
+
"text",
|
|
42
|
+
"layout",
|
|
43
|
+
"alignment",
|
|
44
|
+
"fullwidth",
|
|
45
|
+
"halfwidth",
|
|
46
|
+
"ambiguous",
|
|
47
|
+
"narrow",
|
|
48
|
+
"wide",
|
|
49
|
+
"neutral",
|
|
50
|
+
"typography",
|
|
51
|
+
"japanese",
|
|
52
|
+
"chinese",
|
|
53
|
+
"korean",
|
|
54
|
+
"codepoint",
|
|
55
|
+
"text-processing",
|
|
56
|
+
"i18n",
|
|
57
|
+
"l10n"
|
|
58
|
+
],
|
|
59
|
+
"devDependencies": {
|
|
60
|
+
"ava": "^5.3.1",
|
|
61
|
+
"outdent": "^0.8.0",
|
|
62
|
+
"simplify-ranges": "^0.1.0",
|
|
63
|
+
"typescript": "^5.2.2",
|
|
64
|
+
"xo": "^0.56.0"
|
|
65
|
+
},
|
|
66
|
+
"xo": {
|
|
67
|
+
"ignores": [
|
|
68
|
+
"lookup-data.js"
|
|
69
|
+
]
|
|
70
|
+
}
|
|
71
|
+
}
|
|
@@ -0,0 +1,65 @@
|
|
|
1
|
+
# get-east-asian-width
|
|
2
|
+
|
|
3
|
+
> Determine the [East Asian Width](https://unicode.org/reports/tr11/) of a Unicode character
|
|
4
|
+
|
|
5
|
+
> East Asian Width categorizes Unicode characters based on their occupied space in East Asian typography, which helps in text layout and alignment, particularly in languages like Japanese, Chinese, and Korean.
|
|
6
|
+
|
|
7
|
+
Unlike other similar packages, this package uses the latest Unicode data (which changes each year).
|
|
8
|
+
|
|
9
|
+
## Install
|
|
10
|
+
|
|
11
|
+
```sh
|
|
12
|
+
npm install get-east-asian-width
|
|
13
|
+
```
|
|
14
|
+
|
|
15
|
+
## Usage
|
|
16
|
+
|
|
17
|
+
```js
|
|
18
|
+
import {eastAsianWidth, eastAsianWidthType} from 'get-east-asian-width';
|
|
19
|
+
|
|
20
|
+
const codePoint = '字'.codePointAt(0);
|
|
21
|
+
|
|
22
|
+
console.log(eastAsianWidth(codePoint));
|
|
23
|
+
//=> 2
|
|
24
|
+
|
|
25
|
+
console.log(eastAsianWidthType(codePoint));
|
|
26
|
+
//=> 'wide'
|
|
27
|
+
```
|
|
28
|
+
|
|
29
|
+
## `eastAsianWidth(codePoint: number, options?: object): 1 | 2`
|
|
30
|
+
|
|
31
|
+
Returns the width as a number for the given code point.
|
|
32
|
+
|
|
33
|
+
### options
|
|
34
|
+
|
|
35
|
+
Type: `object`
|
|
36
|
+
|
|
37
|
+
#### ambiguousAsWide
|
|
38
|
+
|
|
39
|
+
Type: `boolean`\
|
|
40
|
+
Default: `false`
|
|
41
|
+
|
|
42
|
+
Whether to treat an `'ambiguous'` character as wide.
|
|
43
|
+
|
|
44
|
+
```js
|
|
45
|
+
import {eastAsianWidth} from 'get-east-asian-width';
|
|
46
|
+
|
|
47
|
+
const codePoint = '⛣'.codePointAt(0);
|
|
48
|
+
|
|
49
|
+
console.log(eastAsianWidth(codePoint));
|
|
50
|
+
//=> 1
|
|
51
|
+
|
|
52
|
+
console.log(eastAsianWidth(codePoint, {ambiguousAsWide: true}));
|
|
53
|
+
//=> 2
|
|
54
|
+
```
|
|
55
|
+
|
|
56
|
+
> Ambiguous characters behave like wide or narrow characters depending on the context (language tag, script identification, associated font, source of data, or explicit markup; all can provide the context). **If the context cannot be established reliably, they should be treated as narrow characters by default.**
|
|
57
|
+
> - http://www.unicode.org/reports/tr11/
|
|
58
|
+
|
|
59
|
+
## `eastAsianWidthType(codePoint: number): 'fullwidth' | 'halfwidth' | 'wide' | 'narrow' | 'neutral' | 'ambiguous'`
|
|
60
|
+
|
|
61
|
+
Returns the type of “East Asian Width” for the given code point.
|
|
62
|
+
|
|
63
|
+
## Related
|
|
64
|
+
|
|
65
|
+
- [string-width](https://github.com/sindresorhus/string-width) - Get the visual width of a string
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
/**
|
|
2
|
+
Binary search on a sorted flat array of [start, end] pairs.
|
|
3
|
+
|
|
4
|
+
@param {number[]} ranges - Flat array of inclusive [start, end] range pairs, e.g. [0, 5, 10, 20].
|
|
5
|
+
@param {number} codePoint - The value to search for.
|
|
6
|
+
@returns {boolean} Whether the value falls within any of the ranges.
|
|
7
|
+
*/
|
|
8
|
+
export const isInRange = (ranges, codePoint) => {
|
|
9
|
+
let low = 0;
|
|
10
|
+
let high = Math.floor(ranges.length / 2) - 1;
|
|
11
|
+
while (low <= high) {
|
|
12
|
+
const mid = Math.floor((low + high) / 2);
|
|
13
|
+
const i = mid * 2;
|
|
14
|
+
if (codePoint < ranges[i]) {
|
|
15
|
+
high = mid - 1;
|
|
16
|
+
} else if (codePoint > ranges[i + 1]) {
|
|
17
|
+
low = mid + 1;
|
|
18
|
+
} else {
|
|
19
|
+
return true;
|
|
20
|
+
}
|
|
21
|
+
}
|
|
22
|
+
|
|
23
|
+
return false;
|
|
24
|
+
};
|