@rudderhq/server 0.2.5-canary.9 → 0.2.5
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/bootstrap/plugin-host-runtime.d.ts +39 -39
- package/dist/bundled-plugins/plugin-linear/dist/worker.js +101 -147
- package/dist/bundled-plugins/plugin-linear/dist/worker.js.map +2 -2
- package/dist/bundled-plugins/plugin-linear/package.json +1 -1
- package/dist/routes/access-onboarding.helpers.d.ts +142 -0
- package/dist/routes/access-onboarding.helpers.d.ts.map +1 -0
- package/dist/routes/access-onboarding.helpers.js +762 -0
- package/dist/routes/access-onboarding.helpers.js.map +1 -0
- package/dist/routes/access.d.ts +2 -48
- package/dist/routes/access.d.ts.map +1 -1
- package/dist/routes/access.helpers.d.ts +109 -0
- package/dist/routes/access.helpers.d.ts.map +1 -0
- package/dist/routes/access.helpers.js +460 -0
- package/dist/routes/access.helpers.js.map +1 -0
- package/dist/routes/access.js +6 -1218
- package/dist/routes/access.js.map +1 -1
- package/dist/routes/agents.d.ts.map +1 -1
- package/dist/routes/agents.js +55 -1057
- package/dist/routes/agents.js.map +1 -1
- package/dist/routes/agents.management-routes.d.ts +12 -0
- package/dist/routes/agents.management-routes.d.ts.map +1 -0
- package/dist/routes/agents.management-routes.js +1067 -0
- package/dist/routes/agents.management-routes.js.map +1 -0
- package/dist/routes/chats.d.ts.map +1 -1
- package/dist/routes/chats.js +42 -652
- package/dist/routes/chats.js.map +1 -1
- package/dist/routes/chats.stream-routes.d.ts +12 -0
- package/dist/routes/chats.stream-routes.d.ts.map +1 -0
- package/dist/routes/chats.stream-routes.js +666 -0
- package/dist/routes/chats.stream-routes.js.map +1 -0
- package/dist/routes/issues.comments-attachments.d.ts +12 -0
- package/dist/routes/issues.comments-attachments.d.ts.map +1 -0
- package/dist/routes/issues.comments-attachments.js +511 -0
- package/dist/routes/issues.comments-attachments.js.map +1 -0
- package/dist/routes/issues.d.ts.map +1 -1
- package/dist/routes/issues.js +43 -1128
- package/dist/routes/issues.js.map +1 -1
- package/dist/routes/issues.mutations.d.ts +12 -0
- package/dist/routes/issues.mutations.d.ts.map +1 -0
- package/dist/routes/issues.mutations.js +635 -0
- package/dist/routes/issues.mutations.js.map +1 -0
- package/dist/routes/plugins.d.ts.map +1 -1
- package/dist/routes/plugins.js +14 -694
- package/dist/routes/plugins.js.map +1 -1
- package/dist/routes/plugins.operations-routes.d.ts +28 -0
- package/dist/routes/plugins.operations-routes.d.ts.map +1 -0
- package/dist/routes/plugins.operations-routes.js +720 -0
- package/dist/routes/plugins.operations-routes.js.map +1 -0
- package/dist/services/access.d.ts +21 -21
- package/dist/services/activity.d.ts +19 -19
- package/dist/services/agents.d.ts +158 -158
- package/dist/services/approvals.d.ts +29 -29
- package/dist/services/assets.d.ts +8 -8
- package/dist/services/automations.d.ts +41 -27
- package/dist/services/automations.d.ts.map +1 -1
- package/dist/services/automations.js +287 -110
- package/dist/services/automations.js.map +1 -1
- package/dist/services/automations.scheduler.d.ts +9 -0
- package/dist/services/automations.scheduler.d.ts.map +1 -0
- package/dist/services/automations.scheduler.js +101 -0
- package/dist/services/automations.scheduler.js.map +1 -0
- package/dist/services/board-auth.d.ts +32 -32
- package/dist/services/calendar.d.ts +26 -26
- package/dist/services/chat-assistant.d.ts +3 -47
- package/dist/services/chat-assistant.d.ts.map +1 -1
- package/dist/services/chat-assistant.helpers.d.ts +156 -0
- package/dist/services/chat-assistant.helpers.d.ts.map +1 -0
- package/dist/services/chat-assistant.helpers.js +862 -0
- package/dist/services/chat-assistant.helpers.js.map +1 -0
- package/dist/services/chat-assistant.js +2 -861
- package/dist/services/chat-assistant.js.map +1 -1
- package/dist/services/chats.d.ts +149 -247
- package/dist/services/chats.d.ts.map +1 -1
- package/dist/services/chats.helpers.d.ts +117 -0
- package/dist/services/chats.helpers.d.ts.map +1 -0
- package/dist/services/chats.helpers.js +285 -0
- package/dist/services/chats.helpers.js.map +1 -0
- package/dist/services/chats.js +6 -286
- package/dist/services/chats.js.map +1 -1
- package/dist/services/costs.d.ts +8 -8
- package/dist/services/finance.d.ts +18 -18
- package/dist/services/goals.d.ts +30 -30
- package/dist/services/heartbeat.d.ts +3 -1
- package/dist/services/heartbeat.d.ts.map +1 -1
- package/dist/services/heartbeat.js +3 -1
- package/dist/services/heartbeat.js.map +1 -1
- package/dist/services/issue-approvals.d.ts +4 -4
- package/dist/services/issue-review-wakeup.d.ts +3 -3
- package/dist/services/issues.comments-attachments.d.ts +141 -0
- package/dist/services/issues.comments-attachments.d.ts.map +1 -0
- package/dist/services/issues.comments-attachments.js +313 -0
- package/dist/services/issues.comments-attachments.js.map +1 -0
- package/dist/services/issues.d.ts +205 -256
- package/dist/services/issues.d.ts.map +1 -1
- package/dist/services/issues.helpers.d.ts +87 -0
- package/dist/services/issues.helpers.d.ts.map +1 -0
- package/dist/services/issues.helpers.js +270 -0
- package/dist/services/issues.helpers.js.map +1 -0
- package/dist/services/issues.js +5 -569
- package/dist/services/issues.js.map +1 -1
- package/dist/services/knowledge-portability/organization-portability.core.d.ts +210 -0
- package/dist/services/knowledge-portability/organization-portability.core.d.ts.map +1 -0
- package/dist/services/knowledge-portability/organization-portability.core.js +997 -0
- package/dist/services/knowledge-portability/organization-portability.core.js.map +1 -0
- package/dist/services/knowledge-portability/organization-portability.d.ts +6 -28
- package/dist/services/knowledge-portability/organization-portability.d.ts.map +1 -1
- package/dist/services/knowledge-portability/organization-portability.export.d.ts +24 -0
- package/dist/services/knowledge-portability/organization-portability.export.d.ts.map +1 -0
- package/dist/services/knowledge-portability/organization-portability.export.js +607 -0
- package/dist/services/knowledge-portability/organization-portability.export.js.map +1 -0
- package/dist/services/knowledge-portability/organization-portability.files.d.ts +69 -0
- package/dist/services/knowledge-portability/organization-portability.files.d.ts.map +1 -0
- package/dist/services/knowledge-portability/organization-portability.files.js +597 -0
- package/dist/services/knowledge-portability/organization-portability.files.js.map +1 -0
- package/dist/services/knowledge-portability/organization-portability.import.d.ts +31 -0
- package/dist/services/knowledge-portability/organization-portability.import.d.ts.map +1 -0
- package/dist/services/knowledge-portability/organization-portability.import.js +575 -0
- package/dist/services/knowledge-portability/organization-portability.import.js.map +1 -0
- package/dist/services/knowledge-portability/organization-portability.js +37 -3848
- package/dist/services/knowledge-portability/organization-portability.js.map +1 -1
- package/dist/services/knowledge-portability/organization-portability.package.d.ts +72 -0
- package/dist/services/knowledge-portability/organization-portability.package.d.ts.map +1 -0
- package/dist/services/knowledge-portability/organization-portability.package.js +749 -0
- package/dist/services/knowledge-portability/organization-portability.package.js.map +1 -0
- package/dist/services/knowledge-portability/organization-portability.preview.d.ts +18 -0
- package/dist/services/knowledge-portability/organization-portability.preview.d.ts.map +1 -0
- package/dist/services/knowledge-portability/organization-portability.preview.js +333 -0
- package/dist/services/knowledge-portability/organization-portability.preview.js.map +1 -0
- package/dist/services/knowledge-portability/organization-portability.resolve-source.d.ts +4 -0
- package/dist/services/knowledge-portability/organization-portability.resolve-source.d.ts.map +1 -0
- package/dist/services/knowledge-portability/organization-portability.resolve-source.js +86 -0
- package/dist/services/knowledge-portability/organization-portability.resolve-source.js.map +1 -0
- package/dist/services/knowledge-portability/organization-skills.catalog.d.ts +221 -0
- package/dist/services/knowledge-portability/organization-skills.catalog.d.ts.map +1 -0
- package/dist/services/knowledge-portability/organization-skills.catalog.js +999 -0
- package/dist/services/knowledge-portability/organization-skills.catalog.js.map +1 -0
- package/dist/services/knowledge-portability/organization-skills.d.ts +4 -75
- package/dist/services/knowledge-portability/organization-skills.d.ts.map +1 -1
- package/dist/services/knowledge-portability/organization-skills.js +11 -2008
- package/dist/services/knowledge-portability/organization-skills.js.map +1 -1
- package/dist/services/knowledge-portability/organization-skills.scans.d.ts +16 -0
- package/dist/services/knowledge-portability/organization-skills.scans.d.ts.map +1 -0
- package/dist/services/knowledge-portability/organization-skills.scans.js +300 -0
- package/dist/services/knowledge-portability/organization-skills.scans.js.map +1 -0
- package/dist/services/knowledge-portability/organization-skills.sources.d.ts +68 -0
- package/dist/services/knowledge-portability/organization-skills.sources.d.ts.map +1 -0
- package/dist/services/knowledge-portability/organization-skills.sources.js +728 -0
- package/dist/services/knowledge-portability/organization-skills.sources.js.map +1 -0
- package/dist/services/messenger.d.ts +2 -2
- package/dist/services/messenger.js +2 -2
- package/dist/services/messenger.js.map +1 -1
- package/dist/services/organization-skills.d.ts +3 -1
- package/dist/services/organization-skills.d.ts.map +1 -1
- package/dist/services/organization-skills.js +3 -1
- package/dist/services/organization-skills.js.map +1 -1
- package/dist/services/orgs.d.ts +9 -9
- package/dist/services/plugin-loader.core.d.ts +14 -0
- package/dist/services/plugin-loader.core.d.ts.map +1 -0
- package/dist/services/plugin-loader.core.js +905 -0
- package/dist/services/plugin-loader.core.js.map +1 -0
- package/dist/services/plugin-loader.d.ts +3 -440
- package/dist/services/plugin-loader.d.ts.map +1 -1
- package/dist/services/plugin-loader.helpers.d.ts +468 -0
- package/dist/services/plugin-loader.helpers.d.ts.map +1 -0
- package/dist/services/plugin-loader.helpers.js +263 -0
- package/dist/services/plugin-loader.helpers.js.map +1 -0
- package/dist/services/plugin-loader.js +3 -1191
- package/dist/services/plugin-loader.js.map +1 -1
- package/dist/services/plugin-loader.worker-paths.d.ts +7 -0
- package/dist/services/plugin-loader.worker-paths.d.ts.map +1 -0
- package/dist/services/plugin-loader.worker-paths.js +85 -0
- package/dist/services/plugin-loader.worker-paths.js.map +1 -0
- package/dist/services/plugin-registry.d.ts +123 -123
- package/dist/services/projects.d.ts +8 -8
- package/dist/services/runtime-kernel/heartbeat.core.d.ts +725 -0
- package/dist/services/runtime-kernel/heartbeat.core.d.ts.map +1 -0
- package/dist/services/runtime-kernel/heartbeat.core.js +525 -0
- package/dist/services/runtime-kernel/heartbeat.core.js.map +1 -0
- package/dist/services/runtime-kernel/heartbeat.d.ts +38 -259
- package/dist/services/runtime-kernel/heartbeat.d.ts.map +1 -1
- package/dist/services/runtime-kernel/heartbeat.execute.d.ts +5 -0
- package/dist/services/runtime-kernel/heartbeat.execute.d.ts.map +1 -0
- package/dist/services/runtime-kernel/heartbeat.execute.js +1052 -0
- package/dist/services/runtime-kernel/heartbeat.execute.js.map +1 -0
- package/dist/services/runtime-kernel/heartbeat.js +50 -4142
- package/dist/services/runtime-kernel/heartbeat.js.map +1 -1
- package/dist/services/runtime-kernel/heartbeat.misc.d.ts +30 -0
- package/dist/services/runtime-kernel/heartbeat.misc.d.ts.map +1 -0
- package/dist/services/runtime-kernel/heartbeat.misc.js +483 -0
- package/dist/services/runtime-kernel/heartbeat.misc.js.map +1 -0
- package/dist/services/runtime-kernel/heartbeat.recovery.d.ts +38 -0
- package/dist/services/runtime-kernel/heartbeat.recovery.d.ts.map +1 -0
- package/dist/services/runtime-kernel/heartbeat.recovery.js +605 -0
- package/dist/services/runtime-kernel/heartbeat.recovery.js.map +1 -0
- package/dist/services/runtime-kernel/heartbeat.release.d.ts +6 -0
- package/dist/services/runtime-kernel/heartbeat.release.d.ts.map +1 -0
- package/dist/services/runtime-kernel/heartbeat.release.js +398 -0
- package/dist/services/runtime-kernel/heartbeat.release.js.map +1 -0
- package/dist/services/runtime-kernel/heartbeat.sessions.d.ts +229 -0
- package/dist/services/runtime-kernel/heartbeat.sessions.d.ts.map +1 -0
- package/dist/services/runtime-kernel/heartbeat.sessions.js +708 -0
- package/dist/services/runtime-kernel/heartbeat.sessions.js.map +1 -0
- package/dist/services/runtime-kernel/heartbeat.wakeup.d.ts +5 -0
- package/dist/services/runtime-kernel/heartbeat.wakeup.d.ts.map +1 -0
- package/dist/services/runtime-kernel/heartbeat.wakeup.js +552 -0
- package/dist/services/runtime-kernel/heartbeat.wakeup.js.map +1 -0
- package/dist/services/secrets.d.ts +25 -25
- package/dist/services/sidebar-badges.js +1 -1
- package/dist/services/sidebar-badges.js.map +1 -1
- package/dist/services/workspace-runtime.comments.d.ts +6 -0
- package/dist/services/workspace-runtime.comments.d.ts.map +1 -0
- package/dist/services/workspace-runtime.comments.js +17 -0
- package/dist/services/workspace-runtime.comments.js.map +1 -0
- package/dist/services/workspace-runtime.d.ts +4 -163
- package/dist/services/workspace-runtime.d.ts.map +1 -1
- package/dist/services/workspace-runtime.helpers.d.ts +163 -0
- package/dist/services/workspace-runtime.helpers.d.ts.map +1 -0
- package/dist/services/workspace-runtime.helpers.js +360 -0
- package/dist/services/workspace-runtime.helpers.js.map +1 -0
- package/dist/services/workspace-runtime.js +4 -1236
- package/dist/services/workspace-runtime.js.map +1 -1
- package/dist/services/workspace-runtime.lifecycle.d.ts +35 -0
- package/dist/services/workspace-runtime.lifecycle.d.ts.map +1 -0
- package/dist/services/workspace-runtime.lifecycle.js +266 -0
- package/dist/services/workspace-runtime.lifecycle.js.map +1 -0
- package/dist/services/workspace-runtime.services.d.ts +140 -0
- package/dist/services/workspace-runtime.services.d.ts.map +1 -0
- package/dist/services/workspace-runtime.services.js +606 -0
- package/dist/services/workspace-runtime.services.js.map +1 -0
- package/package.json +21 -15
- package/ui-dist/assets/{_basePickBy-B5mJzzqZ.js → _basePickBy-N8I9ml5Y.js} +1 -1
- package/ui-dist/assets/{_baseUniq-B10Ec09o.js → _baseUniq-BuSlpRSQ.js} +1 -1
- package/ui-dist/assets/{arc-Bw7wimOa.js → arc-qX-dPyA1.js} +1 -1
- package/ui-dist/assets/{architectureDiagram-2XIMDMQ5-DZr0XEvv.js → architectureDiagram-2XIMDMQ5-DhjkbXsp.js} +1 -1
- package/ui-dist/assets/{blockDiagram-WCTKOSBZ-D0jl0LgB.js → blockDiagram-WCTKOSBZ-JS-tTu3J.js} +1 -1
- package/ui-dist/assets/{c4Diagram-IC4MRINW-BEFxBnEm.js → c4Diagram-IC4MRINW-4DqwCWIx.js} +1 -1
- package/ui-dist/assets/channel-CccCW5_a.js +1 -0
- package/ui-dist/assets/{chunk-4BX2VUAB-Cbul1GoA.js → chunk-4BX2VUAB-T37SqBpp.js} +1 -1
- package/ui-dist/assets/{chunk-55IACEB6-DuouC3bT.js → chunk-55IACEB6-BSj9hdqK.js} +1 -1
- package/ui-dist/assets/{chunk-FMBD7UC4-bN1jF9xw.js → chunk-FMBD7UC4-Dkrlh0Wk.js} +1 -1
- package/ui-dist/assets/{chunk-JSJVCQXG-B0-Ij6ZF.js → chunk-JSJVCQXG-C0ZE3QdB.js} +1 -1
- package/ui-dist/assets/{chunk-KX2RTZJC-BjI3IEjI.js → chunk-KX2RTZJC-DOZQM9gW.js} +1 -1
- package/ui-dist/assets/{chunk-NQ4KR5QH-MUoGr46n.js → chunk-NQ4KR5QH-5Yr3U2k8.js} +1 -1
- package/ui-dist/assets/{chunk-QZHKN3VN-CQoI9Ouy.js → chunk-QZHKN3VN-CvKTufwF.js} +1 -1
- package/ui-dist/assets/{chunk-WL4C6EOR-DSJh3iDp.js → chunk-WL4C6EOR-IoEM0jyx.js} +1 -1
- package/ui-dist/assets/classDiagram-VBA2DB6C-JKk4tCW2.js +1 -0
- package/ui-dist/assets/classDiagram-v2-RAHNMMFH-JKk4tCW2.js +1 -0
- package/ui-dist/assets/clone-Onaweg8D.js +1 -0
- package/ui-dist/assets/{cose-bilkent-S5V4N54A-BPepglgB.js → cose-bilkent-S5V4N54A-CTvr1OFj.js} +1 -1
- package/ui-dist/assets/{dagre-KLK3FWXG-DhnHVZkt.js → dagre-KLK3FWXG-UZ-SNjVK.js} +1 -1
- package/ui-dist/assets/{diagram-E7M64L7V-DNvXtoOO.js → diagram-E7M64L7V-D7RAN0Hr.js} +1 -1
- package/ui-dist/assets/{diagram-IFDJBPK2-DhGlDTgn.js → diagram-IFDJBPK2-B4LViaFR.js} +1 -1
- package/ui-dist/assets/{diagram-P4PSJMXO-BmXEloWS.js → diagram-P4PSJMXO-CY1be7ak.js} +1 -1
- package/ui-dist/assets/{erDiagram-INFDFZHY-BTYVzaLM.js → erDiagram-INFDFZHY-Dca0KkvJ.js} +1 -1
- package/ui-dist/assets/{flowDiagram-PKNHOUZH-CqMNQUVv.js → flowDiagram-PKNHOUZH-i-qMvfwg.js} +1 -1
- package/ui-dist/assets/{ganttDiagram-A5KZAMGK-B2le_64a.js → ganttDiagram-A5KZAMGK-Wxq2lhbh.js} +1 -1
- package/ui-dist/assets/{gitGraphDiagram-K3NZZRJ6-BtxOBq5A.js → gitGraphDiagram-K3NZZRJ6-DwzgPlAY.js} +1 -1
- package/ui-dist/assets/{graph-C5E6qFfm.js → graph-BAqf89Tz.js} +1 -1
- package/ui-dist/assets/{index-Piq-IPXt.js → index-4eCzaLuY.js} +1 -1
- package/ui-dist/assets/{index-DT6UN2ec.js → index-8uu-nKqK.js} +1 -1
- package/ui-dist/assets/{index-T5NVZ3nR.js → index-B-1NEcI_.js} +1 -1
- package/ui-dist/assets/{index-D-MoarxG.js → index-B0b_3Eu5.js} +1 -1
- package/ui-dist/assets/{index-CZiP3FBQ.js → index-B8v0eZjP.js} +1 -1
- package/ui-dist/assets/{index-C1Ga66FM.js → index-BN7Moj3u.js} +1 -1
- package/ui-dist/assets/{index-xBUfBdQn.js → index-BSpxh3cY.js} +1 -1
- package/ui-dist/assets/{index-CQcMWp51.js → index-BY44RIi9.js} +1 -1
- package/ui-dist/assets/{index-3a93sZNI.js → index-BhyQJhdZ.js} +1 -1
- package/ui-dist/assets/{index-BsVDit5y.js → index-BkPL_iGU.js} +1 -1
- package/ui-dist/assets/{index-88lBSTsW.js → index-BsPfoHXS.js} +1 -1
- package/ui-dist/assets/{index-CyJtcUF0.js → index-BstW7nmv.js} +1 -1
- package/ui-dist/assets/{index-BvZ0Ptfl.js → index-BwB67Zyz.js} +1 -1
- package/ui-dist/assets/index-C2peSkmT.css +1 -0
- package/ui-dist/assets/{index-vkCrQLeX.js → index-C3ktOsS_.js} +1 -1
- package/ui-dist/assets/{index-D2hZpQJT.js → index-CMyABlS-.js} +1 -1
- package/ui-dist/assets/{index-C4WCPEY4.js → index-CyBJ8ujC.js} +1 -1
- package/ui-dist/assets/{index-Bf7NB_lK.js → index-DAxM2W3O.js} +1 -1
- package/ui-dist/assets/{index-Dq7H6-Lm.js → index-DVZXPmhk.js} +1 -1
- package/ui-dist/assets/{index-CskDu6A3.js → index-Dc19uAyw.js} +1 -1
- package/ui-dist/assets/index-DzHrwZu1.js +1511 -0
- package/ui-dist/assets/{index-B20JneLK.js → index-LJuf53Ye.js} +1 -1
- package/ui-dist/assets/{index-D6McTDMQ.js → index-Ugw5VWWz.js} +1 -1
- package/ui-dist/assets/{index-CcVGS6HJ.js → index-YGraEFR7.js} +1 -1
- package/ui-dist/assets/{infoDiagram-LFFYTUFH-BiCCZcIW.js → infoDiagram-LFFYTUFH-jLmDtFVR.js} +1 -1
- package/ui-dist/assets/{ishikawaDiagram-PHBUUO56-BiwBemM5.js → ishikawaDiagram-PHBUUO56-6OGMyLT8.js} +1 -1
- package/ui-dist/assets/{journeyDiagram-4ABVD52K-D8RGr2xl.js → journeyDiagram-4ABVD52K-yQjl6E0t.js} +1 -1
- package/ui-dist/assets/{kanban-definition-K7BYSVSG-C733Fj-E.js → kanban-definition-K7BYSVSG-DkdCeQlS.js} +1 -1
- package/ui-dist/assets/{layout-CM4c3NA_.js → layout-CqSYvZ_w.js} +1 -1
- package/ui-dist/assets/{linear-DzH21Xsf.js → linear-B8xGZaoi.js} +1 -1
- package/ui-dist/assets/{mermaid.core-Z2rpoVP2.js → mermaid.core-AKL_cdyk.js} +4 -4
- package/ui-dist/assets/{mindmap-definition-YRQLILUH-DylLLj9w.js → mindmap-definition-YRQLILUH-Zr-dXC0x.js} +1 -1
- package/ui-dist/assets/{pieDiagram-SKSYHLDU-617wI_rr.js → pieDiagram-SKSYHLDU-BvDAU-Nk.js} +1 -1
- package/ui-dist/assets/{quadrantDiagram-337W2JSQ-lxoCPJIL.js → quadrantDiagram-337W2JSQ-Dn9kM62o.js} +1 -1
- package/ui-dist/assets/{requirementDiagram-Z7DCOOCP-C5XydQ9-.js → requirementDiagram-Z7DCOOCP-GIsIh7Sd.js} +1 -1
- package/ui-dist/assets/{sankeyDiagram-WA2Y5GQK--grmq-Q8.js → sankeyDiagram-WA2Y5GQK-CUCuBkuf.js} +1 -1
- package/ui-dist/assets/{sequenceDiagram-2WXFIKYE-BS2PeYH-.js → sequenceDiagram-2WXFIKYE-MDpUY2HM.js} +1 -1
- package/ui-dist/assets/{stateDiagram-RAJIS63D-CeuZtj2z.js → stateDiagram-RAJIS63D-BymMpuUU.js} +1 -1
- package/ui-dist/assets/stateDiagram-v2-FVOUBMTO-Bi2oCU6d.js +1 -0
- package/ui-dist/assets/{timeline-definition-YZTLITO2-DxHdMpRr.js → timeline-definition-YZTLITO2-B6ofPhhy.js} +1 -1
- package/ui-dist/assets/{treemap-KZPCXAKY-Bv1ZlC5h.js → treemap-KZPCXAKY-DnLO6w1l.js} +1 -1
- package/ui-dist/assets/{vennDiagram-LZ73GAT5-DvpZSXY2.js → vennDiagram-LZ73GAT5-D0MyZIDl.js} +1 -1
- package/ui-dist/assets/{xychartDiagram-JWTSCODW-DttOu1GC.js → xychartDiagram-JWTSCODW-rADY1iUG.js} +1 -1
- package/ui-dist/index.html +2 -2
- package/ui-dist/assets/channel-DGUh6rEi.js +0 -1
- package/ui-dist/assets/classDiagram-VBA2DB6C-1ntk2IOV.js +0 -1
- package/ui-dist/assets/classDiagram-v2-RAHNMMFH-1ntk2IOV.js +0 -1
- package/ui-dist/assets/clone-BpddY88c.js +0 -1
- package/ui-dist/assets/index-C8AD6s7S.js +0 -1510
- package/ui-dist/assets/index-Ded0dPwB.css +0 -1
- package/ui-dist/assets/stateDiagram-v2-FVOUBMTO-DXq0yC5C.js +0 -1
|
@@ -0,0 +1,749 @@
|
|
|
1
|
+
import path from "node:path";
|
|
2
|
+
import { deriveProjectUrlKey, getBundledRudderSkillSlug, normalizeAgentUrlKey, toBundledRudderSkillKey, } from "@rudderhq/shared";
|
|
3
|
+
import { unprocessable } from "../../errors.js";
|
|
4
|
+
import { PORTABLE_AGENT_ENTRY_FILE, asString, asBoolean, deriveManifestSkillKey, execFileAsync, isPlainRecord, isBundledRudderSourceKind, normalizeAutomationExtension, normalizePortableProjectWorkspaceExtension, normalizeSkillKey, readSkillSourceKind, stripEmptyValues, } from "./organization-portability.core.js";
|
|
5
|
+
import { buildMarkdown, findPaperclipExtensionPath, normalizeFileMap, normalizePortablePath, normalizePortableSidebarOrder, readPortableTextFile, renderYamlBlock, resolvePortablePath, } from "./organization-portability.files.js";
|
|
6
|
+
let bundledSkillsCommitPromise = null;
|
|
7
|
+
export async function resolveBundledSkillsCommit() {
|
|
8
|
+
if (!bundledSkillsCommitPromise) {
|
|
9
|
+
bundledSkillsCommitPromise = execFileAsync("git", ["rev-parse", "HEAD"], {
|
|
10
|
+
cwd: process.cwd(),
|
|
11
|
+
encoding: "utf8",
|
|
12
|
+
})
|
|
13
|
+
.then(({ stdout }) => stdout.trim() || null)
|
|
14
|
+
.catch(() => null);
|
|
15
|
+
}
|
|
16
|
+
return bundledSkillsCommitPromise;
|
|
17
|
+
}
|
|
18
|
+
export async function buildSkillSourceEntry(skill) {
|
|
19
|
+
const metadata = isPlainRecord(skill.metadata) ? skill.metadata : null;
|
|
20
|
+
if (isBundledRudderSourceKind(asString(metadata?.sourceKind))) {
|
|
21
|
+
const commit = await resolveBundledSkillsCommit();
|
|
22
|
+
return {
|
|
23
|
+
kind: "github-dir",
|
|
24
|
+
repo: "rudder/rudder",
|
|
25
|
+
path: `.agents/skills/${skill.slug}`,
|
|
26
|
+
commit,
|
|
27
|
+
trackingRef: "master",
|
|
28
|
+
url: `https://github.com/Undertone0809/rudder/tree/master/.agents/skills/${skill.slug}`,
|
|
29
|
+
};
|
|
30
|
+
}
|
|
31
|
+
if (skill.sourceType === "github" || skill.sourceType === "skills_sh") {
|
|
32
|
+
const owner = asString(metadata?.owner);
|
|
33
|
+
const repo = asString(metadata?.repo);
|
|
34
|
+
const repoSkillDir = asString(metadata?.repoSkillDir);
|
|
35
|
+
if (!owner || !repo || !repoSkillDir)
|
|
36
|
+
return null;
|
|
37
|
+
return {
|
|
38
|
+
kind: "github-dir",
|
|
39
|
+
repo: `${owner}/${repo}`,
|
|
40
|
+
path: repoSkillDir,
|
|
41
|
+
commit: skill.sourceRef ?? null,
|
|
42
|
+
trackingRef: asString(metadata?.trackingRef),
|
|
43
|
+
url: skill.sourceLocator,
|
|
44
|
+
};
|
|
45
|
+
}
|
|
46
|
+
if (skill.sourceType === "url" && skill.sourceLocator) {
|
|
47
|
+
return {
|
|
48
|
+
kind: "url",
|
|
49
|
+
url: skill.sourceLocator,
|
|
50
|
+
};
|
|
51
|
+
}
|
|
52
|
+
return null;
|
|
53
|
+
}
|
|
54
|
+
export function shouldReferenceSkillOnExport(skill, expandReferencedSkills) {
|
|
55
|
+
if (expandReferencedSkills)
|
|
56
|
+
return false;
|
|
57
|
+
const metadata = isPlainRecord(skill.metadata) ? skill.metadata : null;
|
|
58
|
+
if (isBundledRudderSourceKind(asString(metadata?.sourceKind)))
|
|
59
|
+
return true;
|
|
60
|
+
return skill.sourceType === "github" || skill.sourceType === "skills_sh" || skill.sourceType === "url";
|
|
61
|
+
}
|
|
62
|
+
export async function buildReferencedSkillMarkdown(skill) {
|
|
63
|
+
const sourceEntry = await buildSkillSourceEntry(skill);
|
|
64
|
+
const sourceKind = readSkillSourceKind(skill);
|
|
65
|
+
const canonicalKey = isBundledRudderSourceKind(sourceKind)
|
|
66
|
+
? toBundledRudderSkillKey(getBundledRudderSkillSlug(skill.key) ?? skill.slug) ?? skill.key
|
|
67
|
+
: skill.key;
|
|
68
|
+
const frontmatter = {
|
|
69
|
+
key: canonicalKey,
|
|
70
|
+
slug: skill.slug,
|
|
71
|
+
name: skill.name,
|
|
72
|
+
description: skill.description ?? null,
|
|
73
|
+
};
|
|
74
|
+
if (sourceEntry) {
|
|
75
|
+
frontmatter.metadata = {
|
|
76
|
+
sources: [sourceEntry],
|
|
77
|
+
};
|
|
78
|
+
}
|
|
79
|
+
return buildMarkdown(frontmatter, "");
|
|
80
|
+
}
|
|
81
|
+
export async function withSkillSourceMetadata(skill, markdown) {
|
|
82
|
+
const sourceEntry = await buildSkillSourceEntry(skill);
|
|
83
|
+
const parsed = parseFrontmatterMarkdown(markdown);
|
|
84
|
+
const metadata = isPlainRecord(parsed.frontmatter.metadata)
|
|
85
|
+
? { ...parsed.frontmatter.metadata }
|
|
86
|
+
: {};
|
|
87
|
+
const existingSources = Array.isArray(metadata.sources)
|
|
88
|
+
? metadata.sources.filter((entry) => isPlainRecord(entry))
|
|
89
|
+
: [];
|
|
90
|
+
if (sourceEntry) {
|
|
91
|
+
metadata.sources = [...existingSources, sourceEntry];
|
|
92
|
+
}
|
|
93
|
+
metadata.skillKey = skill.key;
|
|
94
|
+
metadata.rudderSkillKey = skill.key;
|
|
95
|
+
metadata.rudder = {
|
|
96
|
+
...(isPlainRecord(metadata.rudder) ? metadata.rudder : {}),
|
|
97
|
+
skillKey: skill.key,
|
|
98
|
+
slug: skill.slug,
|
|
99
|
+
};
|
|
100
|
+
const frontmatter = {
|
|
101
|
+
...parsed.frontmatter,
|
|
102
|
+
key: skill.key,
|
|
103
|
+
slug: skill.slug,
|
|
104
|
+
metadata,
|
|
105
|
+
};
|
|
106
|
+
return buildMarkdown(frontmatter, parsed.body);
|
|
107
|
+
}
|
|
108
|
+
export function parseYamlScalar(rawValue) {
|
|
109
|
+
const trimmed = rawValue.trim();
|
|
110
|
+
if (trimmed === "")
|
|
111
|
+
return "";
|
|
112
|
+
if (trimmed === "null" || trimmed === "~")
|
|
113
|
+
return null;
|
|
114
|
+
if (trimmed === "true")
|
|
115
|
+
return true;
|
|
116
|
+
if (trimmed === "false")
|
|
117
|
+
return false;
|
|
118
|
+
if (trimmed === "[]")
|
|
119
|
+
return [];
|
|
120
|
+
if (trimmed === "{}")
|
|
121
|
+
return {};
|
|
122
|
+
if (/^-?\d+(\.\d+)?$/.test(trimmed))
|
|
123
|
+
return Number(trimmed);
|
|
124
|
+
if (trimmed.startsWith("\"") ||
|
|
125
|
+
trimmed.startsWith("[") ||
|
|
126
|
+
trimmed.startsWith("{")) {
|
|
127
|
+
try {
|
|
128
|
+
return JSON.parse(trimmed);
|
|
129
|
+
}
|
|
130
|
+
catch {
|
|
131
|
+
return trimmed;
|
|
132
|
+
}
|
|
133
|
+
}
|
|
134
|
+
return trimmed;
|
|
135
|
+
}
|
|
136
|
+
export function prepareYamlLines(raw) {
|
|
137
|
+
return raw
|
|
138
|
+
.split("\n")
|
|
139
|
+
.map((line) => ({
|
|
140
|
+
indent: line.match(/^ */)?.[0].length ?? 0,
|
|
141
|
+
content: line.trim(),
|
|
142
|
+
}))
|
|
143
|
+
.filter((line) => line.content.length > 0 && !line.content.startsWith("#"));
|
|
144
|
+
}
|
|
145
|
+
export function parseYamlBlock(lines, startIndex, indentLevel) {
|
|
146
|
+
let index = startIndex;
|
|
147
|
+
while (index < lines.length && lines[index].content.length === 0) {
|
|
148
|
+
index += 1;
|
|
149
|
+
}
|
|
150
|
+
if (index >= lines.length || lines[index].indent < indentLevel) {
|
|
151
|
+
return { value: {}, nextIndex: index };
|
|
152
|
+
}
|
|
153
|
+
const isArray = lines[index].indent === indentLevel && lines[index].content.startsWith("-");
|
|
154
|
+
if (isArray) {
|
|
155
|
+
const values = [];
|
|
156
|
+
while (index < lines.length) {
|
|
157
|
+
const line = lines[index];
|
|
158
|
+
if (line.indent < indentLevel)
|
|
159
|
+
break;
|
|
160
|
+
if (line.indent !== indentLevel || !line.content.startsWith("-"))
|
|
161
|
+
break;
|
|
162
|
+
const remainder = line.content.slice(1).trim();
|
|
163
|
+
index += 1;
|
|
164
|
+
if (!remainder) {
|
|
165
|
+
const nested = parseYamlBlock(lines, index, indentLevel + 2);
|
|
166
|
+
values.push(nested.value);
|
|
167
|
+
index = nested.nextIndex;
|
|
168
|
+
continue;
|
|
169
|
+
}
|
|
170
|
+
const inlineObjectSeparator = remainder.indexOf(":");
|
|
171
|
+
if (inlineObjectSeparator > 0 &&
|
|
172
|
+
!remainder.startsWith("\"") &&
|
|
173
|
+
!remainder.startsWith("{") &&
|
|
174
|
+
!remainder.startsWith("[")) {
|
|
175
|
+
const key = remainder.slice(0, inlineObjectSeparator).trim();
|
|
176
|
+
const rawValue = remainder.slice(inlineObjectSeparator + 1).trim();
|
|
177
|
+
const nextObject = {
|
|
178
|
+
[key]: parseYamlScalar(rawValue),
|
|
179
|
+
};
|
|
180
|
+
if (index < lines.length && lines[index].indent > indentLevel) {
|
|
181
|
+
const nested = parseYamlBlock(lines, index, indentLevel + 2);
|
|
182
|
+
if (isPlainRecord(nested.value)) {
|
|
183
|
+
Object.assign(nextObject, nested.value);
|
|
184
|
+
}
|
|
185
|
+
index = nested.nextIndex;
|
|
186
|
+
}
|
|
187
|
+
values.push(nextObject);
|
|
188
|
+
continue;
|
|
189
|
+
}
|
|
190
|
+
values.push(parseYamlScalar(remainder));
|
|
191
|
+
}
|
|
192
|
+
return { value: values, nextIndex: index };
|
|
193
|
+
}
|
|
194
|
+
const record = {};
|
|
195
|
+
while (index < lines.length) {
|
|
196
|
+
const line = lines[index];
|
|
197
|
+
if (line.indent < indentLevel)
|
|
198
|
+
break;
|
|
199
|
+
if (line.indent !== indentLevel) {
|
|
200
|
+
index += 1;
|
|
201
|
+
continue;
|
|
202
|
+
}
|
|
203
|
+
const separatorIndex = line.content.indexOf(":");
|
|
204
|
+
if (separatorIndex <= 0) {
|
|
205
|
+
index += 1;
|
|
206
|
+
continue;
|
|
207
|
+
}
|
|
208
|
+
const key = line.content.slice(0, separatorIndex).trim();
|
|
209
|
+
const remainder = line.content.slice(separatorIndex + 1).trim();
|
|
210
|
+
index += 1;
|
|
211
|
+
if (!remainder) {
|
|
212
|
+
const nested = parseYamlBlock(lines, index, indentLevel + 2);
|
|
213
|
+
record[key] = nested.value;
|
|
214
|
+
index = nested.nextIndex;
|
|
215
|
+
continue;
|
|
216
|
+
}
|
|
217
|
+
record[key] = parseYamlScalar(remainder);
|
|
218
|
+
}
|
|
219
|
+
return { value: record, nextIndex: index };
|
|
220
|
+
}
|
|
221
|
+
export function parseYamlFrontmatter(raw) {
|
|
222
|
+
const prepared = prepareYamlLines(raw);
|
|
223
|
+
if (prepared.length === 0)
|
|
224
|
+
return {};
|
|
225
|
+
const parsed = parseYamlBlock(prepared, 0, prepared[0].indent);
|
|
226
|
+
return isPlainRecord(parsed.value) ? parsed.value : {};
|
|
227
|
+
}
|
|
228
|
+
export function parseYamlFile(raw) {
|
|
229
|
+
return parseYamlFrontmatter(raw);
|
|
230
|
+
}
|
|
231
|
+
export function buildYamlFile(value, opts) {
|
|
232
|
+
const cleaned = stripEmptyValues(value, opts);
|
|
233
|
+
if (!isPlainRecord(cleaned))
|
|
234
|
+
return "{}\n";
|
|
235
|
+
return renderYamlBlock(cleaned, 0).join("\n") + "\n";
|
|
236
|
+
}
|
|
237
|
+
export function parseFrontmatterMarkdown(raw) {
|
|
238
|
+
const normalized = raw.replace(/\r\n/g, "\n");
|
|
239
|
+
if (!normalized.startsWith("---\n")) {
|
|
240
|
+
return { frontmatter: {}, body: normalized.replace(/\n$/, "") };
|
|
241
|
+
}
|
|
242
|
+
const closing = normalized.indexOf("\n---\n", 4);
|
|
243
|
+
if (closing < 0) {
|
|
244
|
+
return { frontmatter: {}, body: normalized.replace(/\n$/, "") };
|
|
245
|
+
}
|
|
246
|
+
const frontmatterRaw = normalized.slice(4, closing).trim();
|
|
247
|
+
const body = normalized.slice(closing + 5).replace(/^\n/, "").replace(/\n$/, "");
|
|
248
|
+
return {
|
|
249
|
+
frontmatter: parseYamlFrontmatter(frontmatterRaw),
|
|
250
|
+
body,
|
|
251
|
+
};
|
|
252
|
+
}
|
|
253
|
+
export async function fetchText(url) {
|
|
254
|
+
const response = await fetch(url);
|
|
255
|
+
if (!response.ok) {
|
|
256
|
+
throw unprocessable(`Failed to fetch ${url}: ${response.status}`);
|
|
257
|
+
}
|
|
258
|
+
return response.text();
|
|
259
|
+
}
|
|
260
|
+
export async function fetchOptionalText(url) {
|
|
261
|
+
const response = await fetch(url);
|
|
262
|
+
if (response.status === 404)
|
|
263
|
+
return null;
|
|
264
|
+
if (!response.ok) {
|
|
265
|
+
throw unprocessable(`Failed to fetch ${url}: ${response.status}`);
|
|
266
|
+
}
|
|
267
|
+
return response.text();
|
|
268
|
+
}
|
|
269
|
+
export async function fetchBinary(url) {
|
|
270
|
+
const response = await fetch(url);
|
|
271
|
+
if (!response.ok) {
|
|
272
|
+
throw unprocessable(`Failed to fetch ${url}: ${response.status}`);
|
|
273
|
+
}
|
|
274
|
+
return Buffer.from(await response.arrayBuffer());
|
|
275
|
+
}
|
|
276
|
+
export async function fetchJson(url) {
|
|
277
|
+
const response = await fetch(url, {
|
|
278
|
+
headers: {
|
|
279
|
+
accept: "application/vnd.github+json",
|
|
280
|
+
},
|
|
281
|
+
});
|
|
282
|
+
if (!response.ok) {
|
|
283
|
+
throw unprocessable(`Failed to fetch ${url}: ${response.status}`);
|
|
284
|
+
}
|
|
285
|
+
return response.json();
|
|
286
|
+
}
|
|
287
|
+
export function dedupeEnvInputs(values) {
|
|
288
|
+
const seen = new Set();
|
|
289
|
+
const out = [];
|
|
290
|
+
for (const value of values) {
|
|
291
|
+
const key = `${value.agentSlug ?? ""}:${value.key.toUpperCase()}`;
|
|
292
|
+
if (seen.has(key))
|
|
293
|
+
continue;
|
|
294
|
+
seen.add(key);
|
|
295
|
+
out.push(value);
|
|
296
|
+
}
|
|
297
|
+
return out;
|
|
298
|
+
}
|
|
299
|
+
export function buildEnvInputMap(inputs) {
|
|
300
|
+
const env = {};
|
|
301
|
+
for (const input of inputs) {
|
|
302
|
+
const entry = {
|
|
303
|
+
kind: input.kind,
|
|
304
|
+
requirement: input.requirement,
|
|
305
|
+
};
|
|
306
|
+
if (input.defaultValue !== null)
|
|
307
|
+
entry.default = input.defaultValue;
|
|
308
|
+
if (input.description)
|
|
309
|
+
entry.description = input.description;
|
|
310
|
+
if (input.portability === "system_dependent")
|
|
311
|
+
entry.portability = "system_dependent";
|
|
312
|
+
env[input.key] = entry;
|
|
313
|
+
}
|
|
314
|
+
return env;
|
|
315
|
+
}
|
|
316
|
+
export function readCompanyApprovalDefault(_frontmatter) {
|
|
317
|
+
return true;
|
|
318
|
+
}
|
|
319
|
+
export function readIncludeEntries(frontmatter) {
|
|
320
|
+
const includes = frontmatter.includes;
|
|
321
|
+
if (!Array.isArray(includes))
|
|
322
|
+
return [];
|
|
323
|
+
return includes.flatMap((entry) => {
|
|
324
|
+
if (typeof entry === "string") {
|
|
325
|
+
return [{ path: entry }];
|
|
326
|
+
}
|
|
327
|
+
if (isPlainRecord(entry)) {
|
|
328
|
+
const pathValue = asString(entry.path);
|
|
329
|
+
return pathValue ? [{ path: pathValue }] : [];
|
|
330
|
+
}
|
|
331
|
+
return [];
|
|
332
|
+
});
|
|
333
|
+
}
|
|
334
|
+
export function readAgentEnvInputs(extension, agentSlug) {
|
|
335
|
+
const inputs = isPlainRecord(extension.inputs) ? extension.inputs : null;
|
|
336
|
+
const env = inputs && isPlainRecord(inputs.env) ? inputs.env : null;
|
|
337
|
+
if (!env)
|
|
338
|
+
return [];
|
|
339
|
+
return Object.entries(env).flatMap(([key, value]) => {
|
|
340
|
+
if (!isPlainRecord(value))
|
|
341
|
+
return [];
|
|
342
|
+
const record = value;
|
|
343
|
+
return [{
|
|
344
|
+
key,
|
|
345
|
+
description: asString(record.description) ?? null,
|
|
346
|
+
agentSlug,
|
|
347
|
+
kind: record.kind === "plain" ? "plain" : "secret",
|
|
348
|
+
requirement: record.requirement === "required" ? "required" : "optional",
|
|
349
|
+
defaultValue: typeof record.default === "string" ? record.default : null,
|
|
350
|
+
portability: record.portability === "system_dependent" ? "system_dependent" : "portable",
|
|
351
|
+
}];
|
|
352
|
+
});
|
|
353
|
+
}
|
|
354
|
+
export function readAgentSkillRefs(frontmatter) {
|
|
355
|
+
const skills = frontmatter.skills;
|
|
356
|
+
if (!Array.isArray(skills))
|
|
357
|
+
return [];
|
|
358
|
+
return Array.from(new Set(skills
|
|
359
|
+
.filter((entry) => typeof entry === "string")
|
|
360
|
+
.map((entry) => normalizeSkillKey(entry) ?? entry.trim())
|
|
361
|
+
.filter(Boolean)));
|
|
362
|
+
}
|
|
363
|
+
export function isPortableAgentEntryPath(relativePath) {
|
|
364
|
+
return path.posix.basename(normalizePortablePath(relativePath)) === PORTABLE_AGENT_ENTRY_FILE;
|
|
365
|
+
}
|
|
366
|
+
export function ensurePortableAgentEntryFile(exportedFiles, exportedEntryFile, fallbackBody) {
|
|
367
|
+
const files = { ...exportedFiles };
|
|
368
|
+
const normalizedEntryFile = normalizePortablePath(exportedEntryFile);
|
|
369
|
+
if (isPortableAgentEntryPath(normalizedEntryFile) && typeof files[normalizedEntryFile] === "string") {
|
|
370
|
+
return { files, entryFile: normalizedEntryFile };
|
|
371
|
+
}
|
|
372
|
+
const existingPortableEntry = Object.keys(files)
|
|
373
|
+
.map((entry) => normalizePortablePath(entry))
|
|
374
|
+
.find((entry) => isPortableAgentEntryPath(entry));
|
|
375
|
+
if (existingPortableEntry) {
|
|
376
|
+
return { files, entryFile: existingPortableEntry };
|
|
377
|
+
}
|
|
378
|
+
files[PORTABLE_AGENT_ENTRY_FILE] = fallbackBody || "_No AGENTS instructions were resolved from current agent config._";
|
|
379
|
+
return { files, entryFile: PORTABLE_AGENT_ENTRY_FILE };
|
|
380
|
+
}
|
|
381
|
+
export function buildManifestFromPackageFiles(files, opts) {
|
|
382
|
+
const normalizedFiles = normalizeFileMap(files);
|
|
383
|
+
const companyPath = typeof normalizedFiles["ORGANIZATION.md"] === "string"
|
|
384
|
+
? normalizedFiles["ORGANIZATION.md"]
|
|
385
|
+
: undefined;
|
|
386
|
+
const resolvedCompanyPath = companyPath !== undefined
|
|
387
|
+
? "ORGANIZATION.md"
|
|
388
|
+
: Object.keys(normalizedFiles).find((entry) => entry.endsWith("/ORGANIZATION.md") || entry === "ORGANIZATION.md");
|
|
389
|
+
if (!resolvedCompanyPath) {
|
|
390
|
+
throw unprocessable("Organization package is missing ORGANIZATION.md");
|
|
391
|
+
}
|
|
392
|
+
const companyMarkdown = readPortableTextFile(normalizedFiles, resolvedCompanyPath);
|
|
393
|
+
if (typeof companyMarkdown !== "string") {
|
|
394
|
+
throw unprocessable(`Organization package file is not readable as text: ${resolvedCompanyPath}`);
|
|
395
|
+
}
|
|
396
|
+
const companyDoc = parseFrontmatterMarkdown(companyMarkdown);
|
|
397
|
+
const companyFrontmatter = companyDoc.frontmatter;
|
|
398
|
+
const rudderExtensionPath = findPaperclipExtensionPath(normalizedFiles);
|
|
399
|
+
const rudderExtension = rudderExtensionPath
|
|
400
|
+
? parseYamlFile(readPortableTextFile(normalizedFiles, rudderExtensionPath) ?? "")
|
|
401
|
+
: {};
|
|
402
|
+
const rudderCompany = isPlainRecord(rudderExtension.organization) ? rudderExtension.organization : {};
|
|
403
|
+
const rudderSidebar = normalizePortableSidebarOrder(rudderExtension.sidebar);
|
|
404
|
+
const rudderAgents = isPlainRecord(rudderExtension.agents) ? rudderExtension.agents : {};
|
|
405
|
+
const rudderProjects = isPlainRecord(rudderExtension.projects) ? rudderExtension.projects : {};
|
|
406
|
+
const rudderTasks = isPlainRecord(rudderExtension.tasks) ? rudderExtension.tasks : {};
|
|
407
|
+
const rudderAutomations = isPlainRecord(rudderExtension.automations) ? rudderExtension.automations : {};
|
|
408
|
+
const organizationName = asString(companyFrontmatter.name)
|
|
409
|
+
?? opts?.sourceLabel?.organizationName
|
|
410
|
+
?? "Imported Organization";
|
|
411
|
+
const companySlug = asString(companyFrontmatter.slug)
|
|
412
|
+
?? normalizeAgentUrlKey(organizationName)
|
|
413
|
+
?? "organization";
|
|
414
|
+
const includeEntries = readIncludeEntries(companyFrontmatter);
|
|
415
|
+
const referencedAgentPaths = includeEntries
|
|
416
|
+
.map((entry) => resolvePortablePath(resolvedCompanyPath, entry.path))
|
|
417
|
+
.filter((entry) => entry.endsWith("/AGENTS.md") || entry === "AGENTS.md");
|
|
418
|
+
const referencedProjectPaths = includeEntries
|
|
419
|
+
.map((entry) => resolvePortablePath(resolvedCompanyPath, entry.path))
|
|
420
|
+
.filter((entry) => entry.endsWith("/PROJECT.md") || entry === "PROJECT.md");
|
|
421
|
+
const referencedTaskPaths = includeEntries
|
|
422
|
+
.map((entry) => resolvePortablePath(resolvedCompanyPath, entry.path))
|
|
423
|
+
.filter((entry) => entry.endsWith("/TASK.md") || entry === "TASK.md");
|
|
424
|
+
const referencedSkillPaths = includeEntries
|
|
425
|
+
.map((entry) => resolvePortablePath(resolvedCompanyPath, entry.path))
|
|
426
|
+
.filter((entry) => entry.endsWith("/SKILL.md") || entry === "SKILL.md");
|
|
427
|
+
const discoveredAgentPaths = Object.keys(normalizedFiles).filter((entry) => entry.endsWith("/AGENTS.md") || entry === "AGENTS.md");
|
|
428
|
+
const discoveredProjectPaths = Object.keys(normalizedFiles).filter((entry) => entry.endsWith("/PROJECT.md") || entry === "PROJECT.md");
|
|
429
|
+
const discoveredTaskPaths = Object.keys(normalizedFiles).filter((entry) => entry.endsWith("/TASK.md") || entry === "TASK.md");
|
|
430
|
+
const discoveredSkillPaths = Object.keys(normalizedFiles).filter((entry) => entry.endsWith("/SKILL.md") || entry === "SKILL.md");
|
|
431
|
+
const agentPaths = Array.from(new Set([...referencedAgentPaths, ...discoveredAgentPaths])).sort();
|
|
432
|
+
const projectPaths = Array.from(new Set([...referencedProjectPaths, ...discoveredProjectPaths])).sort();
|
|
433
|
+
const taskPaths = Array.from(new Set([...referencedTaskPaths, ...discoveredTaskPaths])).sort();
|
|
434
|
+
const skillPaths = Array.from(new Set([...referencedSkillPaths, ...discoveredSkillPaths])).sort();
|
|
435
|
+
const manifest = {
|
|
436
|
+
schemaVersion: 4,
|
|
437
|
+
generatedAt: new Date().toISOString(),
|
|
438
|
+
source: opts?.sourceLabel ?? null,
|
|
439
|
+
includes: {
|
|
440
|
+
organization: true,
|
|
441
|
+
agents: true,
|
|
442
|
+
projects: projectPaths.length > 0,
|
|
443
|
+
issues: taskPaths.length > 0,
|
|
444
|
+
skills: skillPaths.length > 0,
|
|
445
|
+
},
|
|
446
|
+
organization: {
|
|
447
|
+
path: resolvedCompanyPath,
|
|
448
|
+
name: organizationName,
|
|
449
|
+
description: asString(companyFrontmatter.description),
|
|
450
|
+
brandColor: asString(rudderCompany.brandColor),
|
|
451
|
+
logoPath: asString(rudderCompany.logoPath) ?? asString(rudderCompany.logo),
|
|
452
|
+
requireBoardApprovalForNewAgents: typeof rudderCompany.requireBoardApprovalForNewAgents === "boolean"
|
|
453
|
+
? rudderCompany.requireBoardApprovalForNewAgents
|
|
454
|
+
: readCompanyApprovalDefault(companyFrontmatter),
|
|
455
|
+
},
|
|
456
|
+
sidebar: rudderSidebar,
|
|
457
|
+
agents: [],
|
|
458
|
+
skills: [],
|
|
459
|
+
projects: [],
|
|
460
|
+
issues: [],
|
|
461
|
+
envInputs: [],
|
|
462
|
+
};
|
|
463
|
+
const warnings = [];
|
|
464
|
+
if (manifest.organization?.logoPath && !normalizedFiles[manifest.organization.logoPath]) {
|
|
465
|
+
warnings.push(`Referenced organization logo file is missing from package: ${manifest.organization.logoPath}`);
|
|
466
|
+
}
|
|
467
|
+
for (const agentPath of agentPaths) {
|
|
468
|
+
const markdownRaw = readPortableTextFile(normalizedFiles, agentPath);
|
|
469
|
+
if (typeof markdownRaw !== "string") {
|
|
470
|
+
warnings.push(`Referenced agent file is missing from package: ${agentPath}`);
|
|
471
|
+
continue;
|
|
472
|
+
}
|
|
473
|
+
const agentDoc = parseFrontmatterMarkdown(markdownRaw);
|
|
474
|
+
const frontmatter = agentDoc.frontmatter;
|
|
475
|
+
const fallbackSlug = normalizeAgentUrlKey(path.posix.basename(path.posix.dirname(agentPath))) ?? "agent";
|
|
476
|
+
const slug = asString(frontmatter.slug) ?? fallbackSlug;
|
|
477
|
+
const extension = isPlainRecord(rudderAgents[slug]) ? rudderAgents[slug] : {};
|
|
478
|
+
const extensionAdapter = isPlainRecord(extension.adapter) ? extension.adapter : null;
|
|
479
|
+
const extensionRuntime = isPlainRecord(extension.runtime) ? extension.runtime : null;
|
|
480
|
+
const extensionPermissions = isPlainRecord(extension.permissions) ? extension.permissions : null;
|
|
481
|
+
const extensionMetadata = isPlainRecord(extension.metadata) ? extension.metadata : null;
|
|
482
|
+
const agentRuntimeConfig = isPlainRecord(extensionAdapter?.config)
|
|
483
|
+
? extensionAdapter.config
|
|
484
|
+
: {};
|
|
485
|
+
const runtimeConfig = extensionRuntime ?? {};
|
|
486
|
+
const title = asString(frontmatter.title);
|
|
487
|
+
manifest.agents.push({
|
|
488
|
+
slug,
|
|
489
|
+
name: asString(frontmatter.name) ?? title ?? slug,
|
|
490
|
+
path: agentPath,
|
|
491
|
+
skills: readAgentSkillRefs(frontmatter),
|
|
492
|
+
role: asString(extension.role) ?? "agent",
|
|
493
|
+
title,
|
|
494
|
+
icon: asString(extension.icon),
|
|
495
|
+
capabilities: asString(extension.capabilities),
|
|
496
|
+
reportsToSlug: asString(frontmatter.reportsTo) ?? asString(extension.reportsTo),
|
|
497
|
+
agentRuntimeType: asString(extensionAdapter?.type) ?? "process",
|
|
498
|
+
agentRuntimeConfig,
|
|
499
|
+
runtimeConfig,
|
|
500
|
+
permissions: extensionPermissions ?? {},
|
|
501
|
+
budgetMonthlyCents: typeof extension.budgetMonthlyCents === "number" && Number.isFinite(extension.budgetMonthlyCents)
|
|
502
|
+
? Math.max(0, Math.floor(extension.budgetMonthlyCents))
|
|
503
|
+
: 0,
|
|
504
|
+
metadata: extensionMetadata,
|
|
505
|
+
});
|
|
506
|
+
manifest.envInputs.push(...readAgentEnvInputs(extension, slug));
|
|
507
|
+
if (frontmatter.kind && frontmatter.kind !== "agent") {
|
|
508
|
+
warnings.push(`Agent markdown ${agentPath} does not declare kind: agent in frontmatter.`);
|
|
509
|
+
}
|
|
510
|
+
}
|
|
511
|
+
for (const skillPath of skillPaths) {
|
|
512
|
+
const markdownRaw = readPortableTextFile(normalizedFiles, skillPath);
|
|
513
|
+
if (typeof markdownRaw !== "string") {
|
|
514
|
+
warnings.push(`Referenced skill file is missing from package: ${skillPath}`);
|
|
515
|
+
continue;
|
|
516
|
+
}
|
|
517
|
+
const skillDoc = parseFrontmatterMarkdown(markdownRaw);
|
|
518
|
+
const frontmatter = skillDoc.frontmatter;
|
|
519
|
+
const skillDir = path.posix.dirname(skillPath);
|
|
520
|
+
const fallbackSlug = normalizeAgentUrlKey(path.posix.basename(skillDir)) ?? "skill";
|
|
521
|
+
const slug = asString(frontmatter.slug) ?? normalizeAgentUrlKey(asString(frontmatter.name) ?? "") ?? fallbackSlug;
|
|
522
|
+
const inventory = Object.keys(normalizedFiles)
|
|
523
|
+
.filter((entry) => entry === skillPath || entry.startsWith(`${skillDir}/`))
|
|
524
|
+
.map((entry) => ({
|
|
525
|
+
path: entry === skillPath ? "SKILL.md" : entry.slice(skillDir.length + 1),
|
|
526
|
+
kind: entry === skillPath
|
|
527
|
+
? "skill"
|
|
528
|
+
: entry.startsWith(`${skillDir}/references/`)
|
|
529
|
+
? "reference"
|
|
530
|
+
: entry.startsWith(`${skillDir}/scripts/`)
|
|
531
|
+
? "script"
|
|
532
|
+
: entry.startsWith(`${skillDir}/assets/`)
|
|
533
|
+
? "asset"
|
|
534
|
+
: entry.endsWith(".md")
|
|
535
|
+
? "markdown"
|
|
536
|
+
: "other",
|
|
537
|
+
}));
|
|
538
|
+
const metadata = isPlainRecord(frontmatter.metadata) ? frontmatter.metadata : null;
|
|
539
|
+
const sources = metadata && Array.isArray(metadata.sources) ? metadata.sources : [];
|
|
540
|
+
const primarySource = sources.find((entry) => isPlainRecord(entry));
|
|
541
|
+
const sourceKind = asString(primarySource?.kind);
|
|
542
|
+
let sourceType = "catalog";
|
|
543
|
+
let sourceLocator = null;
|
|
544
|
+
let sourceRef = null;
|
|
545
|
+
let normalizedMetadata = null;
|
|
546
|
+
if (sourceKind === "github-dir" || sourceKind === "github-file") {
|
|
547
|
+
const repo = asString(primarySource?.repo);
|
|
548
|
+
const repoPath = asString(primarySource?.path);
|
|
549
|
+
const commit = asString(primarySource?.commit);
|
|
550
|
+
const trackingRef = asString(primarySource?.trackingRef);
|
|
551
|
+
const [owner, repoName] = (repo ?? "").split("/");
|
|
552
|
+
sourceType = "github";
|
|
553
|
+
sourceLocator = asString(primarySource?.url)
|
|
554
|
+
?? (repo ? `https://github.com/${repo}${repoPath ? `/tree/${trackingRef ?? commit ?? "main"}/${repoPath}` : ""}` : null);
|
|
555
|
+
sourceRef = commit;
|
|
556
|
+
normalizedMetadata = owner && repoName
|
|
557
|
+
? {
|
|
558
|
+
sourceKind: "github",
|
|
559
|
+
owner,
|
|
560
|
+
repo: repoName,
|
|
561
|
+
ref: commit,
|
|
562
|
+
trackingRef,
|
|
563
|
+
repoSkillDir: repoPath ?? `skills/${slug}`,
|
|
564
|
+
}
|
|
565
|
+
: null;
|
|
566
|
+
}
|
|
567
|
+
else if (sourceKind === "url") {
|
|
568
|
+
sourceType = "url";
|
|
569
|
+
sourceLocator = asString(primarySource?.url) ?? asString(primarySource?.rawUrl);
|
|
570
|
+
normalizedMetadata = {
|
|
571
|
+
sourceKind: "url",
|
|
572
|
+
};
|
|
573
|
+
}
|
|
574
|
+
else if (metadata) {
|
|
575
|
+
normalizedMetadata = {
|
|
576
|
+
sourceKind: "catalog",
|
|
577
|
+
};
|
|
578
|
+
}
|
|
579
|
+
const key = deriveManifestSkillKey(frontmatter, slug, normalizedMetadata, sourceType, sourceLocator);
|
|
580
|
+
manifest.skills.push({
|
|
581
|
+
key,
|
|
582
|
+
slug,
|
|
583
|
+
name: asString(frontmatter.name) ?? slug,
|
|
584
|
+
path: skillPath,
|
|
585
|
+
description: asString(frontmatter.description),
|
|
586
|
+
sourceType,
|
|
587
|
+
sourceLocator,
|
|
588
|
+
sourceRef,
|
|
589
|
+
trustLevel: null,
|
|
590
|
+
compatibility: "compatible",
|
|
591
|
+
metadata: normalizedMetadata,
|
|
592
|
+
fileInventory: inventory,
|
|
593
|
+
});
|
|
594
|
+
}
|
|
595
|
+
for (const projectPath of projectPaths) {
|
|
596
|
+
const markdownRaw = readPortableTextFile(normalizedFiles, projectPath);
|
|
597
|
+
if (typeof markdownRaw !== "string") {
|
|
598
|
+
warnings.push(`Referenced project file is missing from package: ${projectPath}`);
|
|
599
|
+
continue;
|
|
600
|
+
}
|
|
601
|
+
const projectDoc = parseFrontmatterMarkdown(markdownRaw);
|
|
602
|
+
const frontmatter = projectDoc.frontmatter;
|
|
603
|
+
const fallbackSlug = deriveProjectUrlKey(asString(frontmatter.name) ?? path.posix.basename(path.posix.dirname(projectPath)) ?? "project", projectPath);
|
|
604
|
+
const slug = asString(frontmatter.slug) ?? fallbackSlug;
|
|
605
|
+
const extension = isPlainRecord(rudderProjects[slug]) ? rudderProjects[slug] : {};
|
|
606
|
+
const workspaceExtensions = isPlainRecord(extension.workspaces) ? extension.workspaces : {};
|
|
607
|
+
const workspaces = Object.entries(workspaceExtensions)
|
|
608
|
+
.map(([workspaceKey, entry]) => normalizePortableProjectWorkspaceExtension(workspaceKey, entry))
|
|
609
|
+
.filter((entry) => entry !== null);
|
|
610
|
+
manifest.projects.push({
|
|
611
|
+
slug,
|
|
612
|
+
name: asString(frontmatter.name) ?? slug,
|
|
613
|
+
path: projectPath,
|
|
614
|
+
description: asString(frontmatter.description),
|
|
615
|
+
ownerAgentSlug: asString(frontmatter.owner),
|
|
616
|
+
leadAgentSlug: asString(extension.leadAgentSlug),
|
|
617
|
+
targetDate: asString(extension.targetDate),
|
|
618
|
+
color: asString(extension.color),
|
|
619
|
+
status: asString(extension.status),
|
|
620
|
+
executionWorkspacePolicy: isPlainRecord(extension.executionWorkspacePolicy)
|
|
621
|
+
? extension.executionWorkspacePolicy
|
|
622
|
+
: null,
|
|
623
|
+
workspaces,
|
|
624
|
+
metadata: isPlainRecord(extension.metadata) ? extension.metadata : null,
|
|
625
|
+
});
|
|
626
|
+
if (frontmatter.kind && frontmatter.kind !== "project") {
|
|
627
|
+
warnings.push(`Project markdown ${projectPath} does not declare kind: project in frontmatter.`);
|
|
628
|
+
}
|
|
629
|
+
}
|
|
630
|
+
for (const taskPath of taskPaths) {
|
|
631
|
+
const markdownRaw = readPortableTextFile(normalizedFiles, taskPath);
|
|
632
|
+
if (typeof markdownRaw !== "string") {
|
|
633
|
+
warnings.push(`Referenced task file is missing from package: ${taskPath}`);
|
|
634
|
+
continue;
|
|
635
|
+
}
|
|
636
|
+
const taskDoc = parseFrontmatterMarkdown(markdownRaw);
|
|
637
|
+
const frontmatter = taskDoc.frontmatter;
|
|
638
|
+
const fallbackSlug = normalizeAgentUrlKey(path.posix.basename(path.posix.dirname(taskPath))) ?? "task";
|
|
639
|
+
const slug = asString(frontmatter.slug) ?? fallbackSlug;
|
|
640
|
+
const extension = isPlainRecord(rudderTasks[slug]) ? rudderTasks[slug] : {};
|
|
641
|
+
const automationExtension = normalizeAutomationExtension(rudderAutomations[slug]);
|
|
642
|
+
const automationExtensionRaw = isPlainRecord(rudderAutomations[slug]) ? rudderAutomations[slug] : {};
|
|
643
|
+
const schedule = isPlainRecord(frontmatter.schedule) ? frontmatter.schedule : null;
|
|
644
|
+
const legacyRecurrence = schedule && isPlainRecord(schedule.recurrence)
|
|
645
|
+
? schedule.recurrence
|
|
646
|
+
: isPlainRecord(extension.recurrence)
|
|
647
|
+
? extension.recurrence
|
|
648
|
+
: null;
|
|
649
|
+
const recurring = asBoolean(frontmatter.recurring) === true
|
|
650
|
+
|| automationExtension !== null
|
|
651
|
+
|| legacyRecurrence !== null;
|
|
652
|
+
manifest.issues.push({
|
|
653
|
+
slug,
|
|
654
|
+
identifier: asString(extension.identifier),
|
|
655
|
+
title: asString(frontmatter.name) ?? asString(frontmatter.title) ?? slug,
|
|
656
|
+
path: taskPath,
|
|
657
|
+
projectSlug: asString(frontmatter.project),
|
|
658
|
+
projectWorkspaceKey: asString(extension.projectWorkspaceKey),
|
|
659
|
+
assigneeAgentSlug: asString(frontmatter.assignee),
|
|
660
|
+
parentIssueSlug: asString(frontmatter.parent) ?? asString(extension.parentIssueSlug) ?? null,
|
|
661
|
+
description: taskDoc.body || asString(frontmatter.description),
|
|
662
|
+
recurring,
|
|
663
|
+
automation: automationExtension,
|
|
664
|
+
legacyRecurrence,
|
|
665
|
+
status: asString(extension.status) ?? asString(automationExtensionRaw.status),
|
|
666
|
+
priority: asString(extension.priority) ?? asString(automationExtensionRaw.priority),
|
|
667
|
+
labelIds: Array.isArray(extension.labelIds)
|
|
668
|
+
? extension.labelIds.filter((entry) => typeof entry === "string")
|
|
669
|
+
: [],
|
|
670
|
+
billingCode: asString(extension.billingCode),
|
|
671
|
+
executionWorkspaceSettings: isPlainRecord(extension.executionWorkspaceSettings)
|
|
672
|
+
? extension.executionWorkspaceSettings
|
|
673
|
+
: null,
|
|
674
|
+
assigneeAgentRuntimeOverrides: isPlainRecord(extension.assigneeAgentRuntimeOverrides)
|
|
675
|
+
? extension.assigneeAgentRuntimeOverrides
|
|
676
|
+
: null,
|
|
677
|
+
metadata: isPlainRecord(extension.metadata) ? extension.metadata : null,
|
|
678
|
+
});
|
|
679
|
+
if (frontmatter.kind && frontmatter.kind !== "task") {
|
|
680
|
+
warnings.push(`Task markdown ${taskPath} does not declare kind: task in frontmatter.`);
|
|
681
|
+
}
|
|
682
|
+
}
|
|
683
|
+
manifest.envInputs = dedupeEnvInputs(manifest.envInputs);
|
|
684
|
+
return {
|
|
685
|
+
manifest,
|
|
686
|
+
files: normalizedFiles,
|
|
687
|
+
warnings,
|
|
688
|
+
};
|
|
689
|
+
}
|
|
690
|
+
export function normalizeGitHubSourcePath(value) {
|
|
691
|
+
if (!value)
|
|
692
|
+
return "";
|
|
693
|
+
return value.trim().replace(/\\/g, "/").replace(/^\/+|\/+$/g, "");
|
|
694
|
+
}
|
|
695
|
+
export function parseGitHubSourceUrl(rawUrl) {
|
|
696
|
+
const url = new URL(rawUrl);
|
|
697
|
+
if (url.hostname !== "github.com") {
|
|
698
|
+
throw unprocessable("GitHub source must use github.com URL");
|
|
699
|
+
}
|
|
700
|
+
const parts = url.pathname.split("/").filter(Boolean);
|
|
701
|
+
if (parts.length < 2) {
|
|
702
|
+
throw unprocessable("Invalid GitHub URL");
|
|
703
|
+
}
|
|
704
|
+
const owner = parts[0];
|
|
705
|
+
const repo = parts[1].replace(/\.git$/i, "");
|
|
706
|
+
const queryRef = url.searchParams.get("ref")?.trim();
|
|
707
|
+
const queryPath = normalizeGitHubSourcePath(url.searchParams.get("path"));
|
|
708
|
+
const queryCompanyPath = normalizeGitHubSourcePath(url.searchParams.get("companyPath"))?.replace(/(^|\/)COMPANY\.md$/i, "$1ORGANIZATION.md");
|
|
709
|
+
if (queryRef || queryPath || queryCompanyPath) {
|
|
710
|
+
const companyPath = queryCompanyPath || [queryPath, "ORGANIZATION.md"].filter(Boolean).join("/") || "ORGANIZATION.md";
|
|
711
|
+
let basePath = queryPath;
|
|
712
|
+
if (!basePath && companyPath !== "ORGANIZATION.md") {
|
|
713
|
+
basePath = path.posix.dirname(companyPath);
|
|
714
|
+
if (basePath === ".")
|
|
715
|
+
basePath = "";
|
|
716
|
+
}
|
|
717
|
+
return {
|
|
718
|
+
owner,
|
|
719
|
+
repo,
|
|
720
|
+
ref: queryRef || "main",
|
|
721
|
+
basePath,
|
|
722
|
+
companyPath,
|
|
723
|
+
};
|
|
724
|
+
}
|
|
725
|
+
let ref = "main";
|
|
726
|
+
let basePath = "";
|
|
727
|
+
let companyPath = "ORGANIZATION.md";
|
|
728
|
+
if (parts[2] === "tree") {
|
|
729
|
+
ref = parts[3] ?? "main";
|
|
730
|
+
basePath = parts.slice(4).join("/");
|
|
731
|
+
}
|
|
732
|
+
else if (parts[2] === "blob") {
|
|
733
|
+
ref = parts[3] ?? "main";
|
|
734
|
+
const blobPath = parts.slice(4).join("/");
|
|
735
|
+
if (!blobPath) {
|
|
736
|
+
throw unprocessable("Invalid GitHub blob URL");
|
|
737
|
+
}
|
|
738
|
+
companyPath = blobPath.replace(/(^|\/)COMPANY\.md$/i, "$1ORGANIZATION.md");
|
|
739
|
+
basePath = path.posix.dirname(blobPath);
|
|
740
|
+
if (basePath === ".")
|
|
741
|
+
basePath = "";
|
|
742
|
+
}
|
|
743
|
+
return { owner, repo, ref, basePath, companyPath };
|
|
744
|
+
}
|
|
745
|
+
export function resolveRawGitHubUrl(owner, repo, ref, filePath) {
|
|
746
|
+
const normalizedFilePath = filePath.replace(/^\/+/, "");
|
|
747
|
+
return `https://raw.githubusercontent.com/${owner}/${repo}/${ref}/${normalizedFilePath}`;
|
|
748
|
+
}
|
|
749
|
+
//# sourceMappingURL=organization-portability.package.js.map
|