@rudderhq/server 0.1.0-canary.9 → 0.1.0

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.
Files changed (235) hide show
  1. package/dist/bootstrap/register-api-routes.d.ts.map +1 -1
  2. package/dist/bootstrap/register-api-routes.js +2 -0
  3. package/dist/bootstrap/register-api-routes.js.map +1 -1
  4. package/dist/bundled-plugins/plugin-linear/README.md +22 -0
  5. package/dist/bundled-plugins/plugin-linear/dist/manifest.js +183 -0
  6. package/dist/bundled-plugins/plugin-linear/dist/manifest.js.map +7 -0
  7. package/dist/bundled-plugins/plugin-linear/dist/ui/index.js +1229 -0
  8. package/dist/bundled-plugins/plugin-linear/dist/ui/index.js.map +7 -0
  9. package/dist/bundled-plugins/plugin-linear/dist/worker.js +8251 -0
  10. package/dist/bundled-plugins/plugin-linear/dist/worker.js.map +7 -0
  11. package/dist/bundled-plugins/plugin-linear/package.json +42 -0
  12. package/dist/dev-server-status.d.ts +1 -7
  13. package/dist/dev-server-status.d.ts.map +1 -1
  14. package/dist/dev-server-status.js +1 -4
  15. package/dist/dev-server-status.js.map +1 -1
  16. package/dist/index.d.ts +1 -1
  17. package/dist/index.d.ts.map +1 -1
  18. package/dist/index.js +77 -1
  19. package/dist/index.js.map +1 -1
  20. package/dist/langfuse-transcript.d.ts +1 -0
  21. package/dist/langfuse-transcript.d.ts.map +1 -1
  22. package/dist/langfuse-transcript.js +24 -0
  23. package/dist/langfuse-transcript.js.map +1 -1
  24. package/dist/onboarding-assets/ceo/MEMORY.md +13 -0
  25. package/dist/onboarding-assets/ceo/SOUL.md +28 -0
  26. package/dist/onboarding-assets/ceo/TOOLS.md +1 -1
  27. package/dist/onboarding-assets/default/MEMORY.md +13 -0
  28. package/dist/onboarding-assets/default/SOUL.md +29 -0
  29. package/dist/onboarding-assets/default/TOOLS.md +1 -1
  30. package/dist/routes/agents.d.ts.map +1 -1
  31. package/dist/routes/agents.js +4 -3
  32. package/dist/routes/agents.js.map +1 -1
  33. package/dist/routes/calendar.d.ts +3 -0
  34. package/dist/routes/calendar.d.ts.map +1 -0
  35. package/dist/routes/calendar.js +265 -0
  36. package/dist/routes/calendar.js.map +1 -0
  37. package/dist/routes/chats.d.ts.map +1 -1
  38. package/dist/routes/chats.js +149 -21
  39. package/dist/routes/chats.js.map +1 -1
  40. package/dist/routes/dashboard.d.ts.map +1 -1
  41. package/dist/routes/dashboard.js +24 -0
  42. package/dist/routes/dashboard.js.map +1 -1
  43. package/dist/routes/goals.d.ts.map +1 -1
  44. package/dist/routes/goals.js +10 -0
  45. package/dist/routes/goals.js.map +1 -1
  46. package/dist/routes/health.d.ts.map +1 -1
  47. package/dist/routes/health.js +3 -12
  48. package/dist/routes/health.js.map +1 -1
  49. package/dist/routes/index.d.ts +1 -0
  50. package/dist/routes/index.d.ts.map +1 -1
  51. package/dist/routes/index.js +1 -0
  52. package/dist/routes/index.js.map +1 -1
  53. package/dist/routes/instance-settings.d.ts.map +1 -1
  54. package/dist/routes/instance-settings.js +1 -26
  55. package/dist/routes/instance-settings.js.map +1 -1
  56. package/dist/routes/issues.d.ts.map +1 -1
  57. package/dist/routes/issues.js +74 -34
  58. package/dist/routes/issues.js.map +1 -1
  59. package/dist/routes/orgs.d.ts.map +1 -1
  60. package/dist/routes/orgs.js +161 -145
  61. package/dist/routes/orgs.js.map +1 -1
  62. package/dist/routes/plugins.d.ts.map +1 -1
  63. package/dist/routes/plugins.js +30 -7
  64. package/dist/routes/plugins.js.map +1 -1
  65. package/dist/services/agent-instructions.d.ts.map +1 -1
  66. package/dist/services/agent-instructions.js +23 -7
  67. package/dist/services/agent-instructions.js.map +1 -1
  68. package/dist/services/agent-run-context.d.ts +1 -1
  69. package/dist/services/agent-run-context.js +1 -1
  70. package/dist/services/agent-run-context.js.map +1 -1
  71. package/dist/services/agents.d.ts +13 -13
  72. package/dist/services/assets.d.ts +2 -2
  73. package/dist/services/calendar.d.ts +137 -0
  74. package/dist/services/calendar.d.ts.map +1 -0
  75. package/dist/services/calendar.js +1279 -0
  76. package/dist/services/calendar.js.map +1 -0
  77. package/dist/services/chat-assistant.d.ts.map +1 -1
  78. package/dist/services/chat-assistant.js +75 -15
  79. package/dist/services/chat-assistant.js.map +1 -1
  80. package/dist/services/chat-generation-locks.d.ts +2 -1
  81. package/dist/services/chat-generation-locks.d.ts.map +1 -1
  82. package/dist/services/chat-generation-locks.js +12 -3
  83. package/dist/services/chat-generation-locks.js.map +1 -1
  84. package/dist/services/chats.d.ts +4 -2
  85. package/dist/services/chats.d.ts.map +1 -1
  86. package/dist/services/chats.js +2 -15
  87. package/dist/services/chats.js.map +1 -1
  88. package/dist/services/costs.d.ts +2 -2
  89. package/dist/services/default-agent-instructions.d.ts +2 -2
  90. package/dist/services/default-agent-instructions.js +2 -2
  91. package/dist/services/documents.d.ts +23 -0
  92. package/dist/services/documents.d.ts.map +1 -1
  93. package/dist/services/documents.js +17 -1
  94. package/dist/services/documents.js.map +1 -1
  95. package/dist/services/export-jobs.d.ts +16 -0
  96. package/dist/services/export-jobs.d.ts.map +1 -0
  97. package/dist/services/export-jobs.js +147 -0
  98. package/dist/services/export-jobs.js.map +1 -0
  99. package/dist/services/finance.d.ts +6 -6
  100. package/dist/services/goals.d.ts +16 -10
  101. package/dist/services/goals.d.ts.map +1 -1
  102. package/dist/services/goals.js +201 -18
  103. package/dist/services/goals.js.map +1 -1
  104. package/dist/services/index.d.ts +3 -0
  105. package/dist/services/index.d.ts.map +1 -1
  106. package/dist/services/index.js +3 -0
  107. package/dist/services/index.js.map +1 -1
  108. package/dist/services/instance-settings.d.ts +1 -3
  109. package/dist/services/instance-settings.d.ts.map +1 -1
  110. package/dist/services/instance-settings.js +1 -38
  111. package/dist/services/instance-settings.js.map +1 -1
  112. package/dist/services/issue-approvals.d.ts +1 -1
  113. package/dist/services/issues.d.ts +12 -0
  114. package/dist/services/issues.d.ts.map +1 -1
  115. package/dist/services/issues.js +107 -1
  116. package/dist/services/issues.js.map +1 -1
  117. package/dist/services/knowledge-portability/organization-portability.d.ts +12 -2
  118. package/dist/services/knowledge-portability/organization-portability.d.ts.map +1 -1
  119. package/dist/services/knowledge-portability/organization-portability.js +77 -4
  120. package/dist/services/knowledge-portability/organization-portability.js.map +1 -1
  121. package/dist/services/messenger.d.ts +2 -2
  122. package/dist/services/messenger.d.ts.map +1 -1
  123. package/dist/services/messenger.js +67 -27
  124. package/dist/services/messenger.js.map +1 -1
  125. package/dist/services/organization-workspace-browser.d.ts.map +1 -1
  126. package/dist/services/organization-workspace-browser.js +3 -0
  127. package/dist/services/organization-workspace-browser.js.map +1 -1
  128. package/dist/services/plugin-registry.d.ts +8 -8
  129. package/dist/services/runtime-kernel/heartbeat.d.ts +6 -0
  130. package/dist/services/runtime-kernel/heartbeat.d.ts.map +1 -1
  131. package/dist/services/runtime-kernel/heartbeat.js +236 -99
  132. package/dist/services/runtime-kernel/heartbeat.js.map +1 -1
  133. package/dist/services/runtime-kernel/model-fallback.d.ts +10 -0
  134. package/dist/services/runtime-kernel/model-fallback.d.ts.map +1 -0
  135. package/dist/services/runtime-kernel/model-fallback.js +147 -0
  136. package/dist/services/runtime-kernel/model-fallback.js.map +1 -0
  137. package/dist/services/secrets.d.ts +1 -3
  138. package/dist/services/secrets.d.ts.map +1 -1
  139. package/dist/services/secrets.js +55 -30
  140. package/dist/services/secrets.js.map +1 -1
  141. package/dist/services/workspace-backups.d.ts +34 -0
  142. package/dist/services/workspace-backups.d.ts.map +1 -0
  143. package/dist/services/workspace-backups.js +519 -0
  144. package/dist/services/workspace-backups.js.map +1 -0
  145. package/dist/services/workspace-runtime.d.ts +2 -2
  146. package/package.json +14 -14
  147. package/resources/bundled-skills/para-memory-files/SKILL.md +3 -1
  148. package/resources/bundled-skills/rudder-create-agent/SKILL.md +21 -4
  149. package/resources/bundled-skills/rudder-create-agent/references/api-reference.md +8 -3
  150. package/resources/bundled-skills/rudder-create-agent/references/cli-reference.md +8 -2
  151. package/skills/para-memory-files/SKILL.md +3 -1
  152. package/skills/rudder-create-agent/SKILL.md +21 -4
  153. package/skills/rudder-create-agent/references/api-reference.md +8 -3
  154. package/skills/rudder-create-agent/references/cli-reference.md +8 -2
  155. package/ui-dist/assets/{_basePickBy-C5FevVGb.js → _basePickBy-9EA6dBFj.js} +1 -1
  156. package/ui-dist/assets/{_baseUniq-Bp5Cq-Lt.js → _baseUniq-puJRDjRm.js} +1 -1
  157. package/ui-dist/assets/{arc-DxCinQZQ.js → arc-BuvB_2Wz.js} +1 -1
  158. package/ui-dist/assets/{architectureDiagram-2XIMDMQ5-Bt4OB6rg.js → architectureDiagram-2XIMDMQ5-DNH3NcPr.js} +1 -1
  159. package/ui-dist/assets/{blockDiagram-WCTKOSBZ-AfUyCHdW.js → blockDiagram-WCTKOSBZ-CCjA-egI.js} +1 -1
  160. package/ui-dist/assets/{c4Diagram-IC4MRINW-ZQmapm_f.js → c4Diagram-IC4MRINW-DaAxG30_.js} +1 -1
  161. package/ui-dist/assets/channel-BHmUwLHY.js +1 -0
  162. package/ui-dist/assets/{chunk-4BX2VUAB-b-nhg8XG.js → chunk-4BX2VUAB-CuuLnPLx.js} +1 -1
  163. package/ui-dist/assets/{chunk-55IACEB6-D_mWeaWL.js → chunk-55IACEB6-7KqKHU50.js} +1 -1
  164. package/ui-dist/assets/{chunk-FMBD7UC4-CvCBPkxY.js → chunk-FMBD7UC4-CquRnk_C.js} +1 -1
  165. package/ui-dist/assets/{chunk-JSJVCQXG-CyIzde6d.js → chunk-JSJVCQXG-Cub6UI-9.js} +1 -1
  166. package/ui-dist/assets/{chunk-KX2RTZJC-664uOAt1.js → chunk-KX2RTZJC-D-R4Pk61.js} +1 -1
  167. package/ui-dist/assets/{chunk-NQ4KR5QH-zC9eKlQL.js → chunk-NQ4KR5QH-YQLRgLCT.js} +1 -1
  168. package/ui-dist/assets/{chunk-QZHKN3VN-Bso6mrAm.js → chunk-QZHKN3VN-BgxQG6QM.js} +1 -1
  169. package/ui-dist/assets/{chunk-WL4C6EOR-CGgjDf4Q.js → chunk-WL4C6EOR-CVJNOFb-.js} +1 -1
  170. package/ui-dist/assets/classDiagram-VBA2DB6C-BykYYXhO.js +1 -0
  171. package/ui-dist/assets/classDiagram-v2-RAHNMMFH-BykYYXhO.js +1 -0
  172. package/ui-dist/assets/clone-BjbqkGJk.js +1 -0
  173. package/ui-dist/assets/{cose-bilkent-S5V4N54A-ChfhiHs0.js → cose-bilkent-S5V4N54A-BGYYdPRC.js} +1 -1
  174. package/ui-dist/assets/{dagre-KLK3FWXG-BtdGql15.js → dagre-KLK3FWXG-CDgRaJNK.js} +1 -1
  175. package/ui-dist/assets/{diagram-E7M64L7V-CcQq6lyW.js → diagram-E7M64L7V-CQEBiicN.js} +1 -1
  176. package/ui-dist/assets/{diagram-IFDJBPK2-C8MRQ8-O.js → diagram-IFDJBPK2-cGKTVrZq.js} +1 -1
  177. package/ui-dist/assets/{diagram-P4PSJMXO-wDtyafSS.js → diagram-P4PSJMXO-fGAfKBU_.js} +1 -1
  178. package/ui-dist/assets/{erDiagram-INFDFZHY-DSPOGKs9.js → erDiagram-INFDFZHY-DW5vJI98.js} +1 -1
  179. package/ui-dist/assets/{flowDiagram-PKNHOUZH-CMRO_o51.js → flowDiagram-PKNHOUZH-CikVuzCR.js} +1 -1
  180. package/ui-dist/assets/{ganttDiagram-A5KZAMGK-ByVpG5X7.js → ganttDiagram-A5KZAMGK-Ca4perbO.js} +1 -1
  181. package/ui-dist/assets/{gitGraphDiagram-K3NZZRJ6-C0hZhA2f.js → gitGraphDiagram-K3NZZRJ6-hkDkX0wB.js} +1 -1
  182. package/ui-dist/assets/{graph-8ZSpiLvu.js → graph-CKVwuNpm.js} +1 -1
  183. package/ui-dist/assets/{index-Jl3ZTphD.js → index-B24_1Y25.js} +1 -1
  184. package/ui-dist/assets/{index-Bnqrds93.js → index-BCSq0Y_A.js} +1 -1
  185. package/ui-dist/assets/{index-LxYtcd2q.js → index-BbX5RwLL.js} +1 -1
  186. package/ui-dist/assets/{index-BuxAGDe1.js → index-Bj5f8srw.js} +1 -1
  187. package/ui-dist/assets/{index-CrjKYwlq.js → index-Bm5RRuGQ.js} +1 -1
  188. package/ui-dist/assets/{index-Byt3a14a.js → index-BzHEDVXA.js} +1 -1
  189. package/ui-dist/assets/{index-C96r3ncF.js → index-C5IbLmrM.js} +1 -1
  190. package/ui-dist/assets/{index-DSa_Y_jA.js → index-CBuiHrHJ.js} +1 -1
  191. package/ui-dist/assets/{index-CsgWTWOx.js → index-CGtsmbZm.js} +1 -1
  192. package/ui-dist/assets/{index-Dolr9Kee.js → index-CIlRDiw5.js} +1 -1
  193. package/ui-dist/assets/{index-tGztn4Is.js → index-CT8eqX9W.js} +1 -1
  194. package/ui-dist/assets/{index-CeJdOYIF.js → index-CjD2xZdW.js} +1 -1
  195. package/ui-dist/assets/{index-C7DEZ3Ju.js → index-DFeHRm34.js} +1 -1
  196. package/ui-dist/assets/{index-ChJl_hqp.js → index-DI-FLO2Z.js} +1 -1
  197. package/ui-dist/assets/{index-D083o6by.js → index-DJ84yjUf.js} +1 -1
  198. package/ui-dist/assets/index-DTw34fFZ.js +1398 -0
  199. package/ui-dist/assets/{index--8IW0gQi.js → index-DZ6kUIBM.js} +1 -1
  200. package/ui-dist/assets/{index-D5fB3OrO.js → index-DdFp0EEO.js} +1 -1
  201. package/ui-dist/assets/{index-BYlbpnGO.js → index-Dm4kNTCW.js} +1 -1
  202. package/ui-dist/assets/{index-DIlroFT7.js → index-aK5eezHP.js} +1 -1
  203. package/ui-dist/assets/{index-DoCNo7J9.js → index-dd4k0fyq.js} +1 -1
  204. package/ui-dist/assets/index-jnv9Ql_2.css +1 -0
  205. package/ui-dist/assets/{index-Do2QEU2O.js → index-kGMjx6qb.js} +1 -1
  206. package/ui-dist/assets/{index-DGliz_Zl.js → index-qEEWalog.js} +1 -1
  207. package/ui-dist/assets/{infoDiagram-LFFYTUFH-CRObxa1Q.js → infoDiagram-LFFYTUFH-aDNdkSKW.js} +1 -1
  208. package/ui-dist/assets/{ishikawaDiagram-PHBUUO56-ksXzVP6h.js → ishikawaDiagram-PHBUUO56-CmclzHhC.js} +1 -1
  209. package/ui-dist/assets/{journeyDiagram-4ABVD52K-DhLhkeS3.js → journeyDiagram-4ABVD52K-BFnBxKuG.js} +1 -1
  210. package/ui-dist/assets/{kanban-definition-K7BYSVSG-CJPHwSur.js → kanban-definition-K7BYSVSG-eJfOZg7R.js} +1 -1
  211. package/ui-dist/assets/{layout-CbB6lAw2.js → layout-CLRiNHgA.js} +1 -1
  212. package/ui-dist/assets/{linear-HPte01nq.js → linear-B-J9sUer.js} +1 -1
  213. package/ui-dist/assets/{mermaid.core-CaHTquLw.js → mermaid.core-C1MjBOIN.js} +4 -4
  214. package/ui-dist/assets/{mindmap-definition-YRQLILUH-CeZ9z-BE.js → mindmap-definition-YRQLILUH-BdvCmP6e.js} +1 -1
  215. package/ui-dist/assets/{pieDiagram-SKSYHLDU-YB621clF.js → pieDiagram-SKSYHLDU-BAITPD_t.js} +1 -1
  216. package/ui-dist/assets/{quadrantDiagram-337W2JSQ-KPDGBXfE.js → quadrantDiagram-337W2JSQ-BFnjyhzq.js} +1 -1
  217. package/ui-dist/assets/{requirementDiagram-Z7DCOOCP-CnMP-_Rj.js → requirementDiagram-Z7DCOOCP-Bxg6tlLh.js} +1 -1
  218. package/ui-dist/assets/{sankeyDiagram-WA2Y5GQK-rWDbj38-.js → sankeyDiagram-WA2Y5GQK-LPpklLQK.js} +1 -1
  219. package/ui-dist/assets/{sequenceDiagram-2WXFIKYE-D5IlEfYm.js → sequenceDiagram-2WXFIKYE-D-W6lss0.js} +1 -1
  220. package/ui-dist/assets/{stateDiagram-RAJIS63D-CI6m7yMI.js → stateDiagram-RAJIS63D-Bzo5M8P7.js} +1 -1
  221. package/ui-dist/assets/stateDiagram-v2-FVOUBMTO-DJ1MxF2S.js +1 -0
  222. package/ui-dist/assets/{timeline-definition-YZTLITO2-Bl1-YzON.js → timeline-definition-YZTLITO2-luuVqyTW.js} +1 -1
  223. package/ui-dist/assets/{treemap-KZPCXAKY-CcFSGzuM.js → treemap-KZPCXAKY-ChGqzx5u.js} +1 -1
  224. package/ui-dist/assets/{vennDiagram-LZ73GAT5-DpgfFxeZ.js → vennDiagram-LZ73GAT5-BCEjZinK.js} +1 -1
  225. package/ui-dist/assets/{xychartDiagram-JWTSCODW-Bas4tWGP.js → xychartDiagram-JWTSCODW-mAsE6hMg.js} +1 -1
  226. package/ui-dist/index.html +2 -2
  227. package/dist/onboarding-assets/ceo/AGENTS.md +0 -33
  228. package/dist/onboarding-assets/default/AGENTS.md +0 -9
  229. package/ui-dist/assets/channel-B-3UKZ6E.js +0 -1
  230. package/ui-dist/assets/classDiagram-VBA2DB6C-DJbF61vn.js +0 -1
  231. package/ui-dist/assets/classDiagram-v2-RAHNMMFH-DJbF61vn.js +0 -1
  232. package/ui-dist/assets/clone-B7Z_Fd8l.js +0 -1
  233. package/ui-dist/assets/index-B4jXCLTd.js +0 -1358
  234. package/ui-dist/assets/index-C187WwUh.css +0 -1
  235. package/ui-dist/assets/stateDiagram-v2-FVOUBMTO-DMNsLapT.js +0 -1
@@ -0,0 +1,7 @@
1
+ {
2
+ "version": 3,
3
+ "sources": ["../../src/ui/index.tsx", "../../src/constants.ts"],
4
+ "sourcesContent": ["import {\n useEffect,\n useMemo,\n useState,\n type Dispatch,\n type SetStateAction,\n type CSSProperties,\n} from \"react\";\nimport {\n usePluginAction,\n usePluginData,\n usePluginToast,\n type PluginDetailTabProps,\n type PluginPageProps,\n type PluginSettingsPageProps,\n} from \"@rudderhq/plugin-sdk/ui\";\nimport {\n ACTION_KEYS,\n DATA_KEYS,\n LINEAR_IMPORT_ALL_LIMIT,\n LINEAR_PAGE_SIZE,\n LINEAR_TOKEN_SETTINGS_URL,\n RUDDER_STATUS_OPTIONS,\n} from \"../constants.js\";\nimport type {\n ImportLinearIssuesActionResult,\n IssueLinkData,\n LinearIssueRow,\n LinearCatalogData,\n LinearOrganizationMapping,\n LinearPluginConfig,\n LinearStateSummary,\n LinearStateMapping,\n LinearTeamMapping,\n LinearIssuesData,\n PageBootstrapData,\n SettingsCatalogData,\n SettingsBootstrapData,\n} from \"../types.js\";\n\nconst layoutStyles: Record<string, CSSProperties> = {\n shell: {\n display: \"grid\",\n gap: 16,\n color: \"var(--foreground, #111827)\",\n fontFamily: \"ui-sans-serif, system-ui, sans-serif\",\n },\n card: {\n border: \"1px solid var(--border, rgba(15, 23, 42, 0.14))\",\n borderRadius: 8,\n padding: 16,\n background: \"var(--card, var(--background, #fff))\",\n },\n title: {\n fontSize: 22,\n fontWeight: 700,\n margin: 0,\n },\n subtitle: {\n margin: \"6px 0 0\",\n color: \"var(--muted-foreground, rgba(15, 23, 42, 0.68))\",\n fontSize: 14,\n lineHeight: 1.5,\n },\n row: {\n display: \"flex\",\n gap: 12,\n flexWrap: \"wrap\",\n alignItems: \"center\",\n },\n connectionGrid: {\n display: \"grid\",\n gridTemplateColumns: \"repeat(auto-fit, minmax(220px, 1fr))\",\n gap: 12,\n alignItems: \"end\",\n },\n field: {\n display: \"grid\",\n gap: 6,\n minWidth: 180,\n flex: \"1 1 180px\",\n },\n label: {\n fontSize: 12,\n fontWeight: 700,\n color: \"var(--muted-foreground, rgba(15, 23, 42, 0.66))\",\n letterSpacing: 0,\n },\n input: {\n width: \"100%\",\n border: \"1px solid var(--border, rgba(15, 23, 42, 0.18))\",\n borderRadius: 6,\n padding: \"10px 12px\",\n fontSize: 14,\n background: \"var(--background, #fff)\",\n color: \"var(--foreground, #111827)\",\n boxSizing: \"border-box\",\n },\n select: {\n width: \"100%\",\n border: \"1px solid var(--border, rgba(15, 23, 42, 0.18))\",\n borderRadius: 6,\n padding: \"10px 12px\",\n fontSize: 14,\n background: \"var(--background, #fff)\",\n color: \"var(--foreground, #111827)\",\n boxSizing: \"border-box\",\n },\n button: {\n border: \"1px solid var(--border, rgba(15, 23, 42, 0.18))\",\n borderRadius: 6,\n padding: \"10px 14px\",\n fontSize: 14,\n fontWeight: 600,\n background: \"var(--background, #fff)\",\n color: \"var(--foreground, #111827)\",\n cursor: \"pointer\",\n },\n primaryButton: {\n border: \"1px solid var(--primary, #0f172a)\",\n borderRadius: 6,\n padding: \"10px 14px\",\n fontSize: 14,\n fontWeight: 700,\n background: \"var(--primary, #0f172a)\",\n color: \"var(--primary-foreground, #fff)\",\n cursor: \"pointer\",\n },\n subtleButton: {\n border: \"1px solid var(--border, rgba(15, 23, 42, 0.12))\",\n borderRadius: 6,\n padding: \"8px 12px\",\n fontSize: 13,\n fontWeight: 600,\n background: \"var(--secondary, rgba(15, 23, 42, 0.04))\",\n color: \"var(--secondary-foreground, var(--foreground, #111827))\",\n cursor: \"pointer\",\n },\n warning: {\n border: \"1px solid rgba(217, 119, 6, 0.24)\",\n background: \"rgba(251, 191, 36, 0.12)\",\n borderRadius: 8,\n padding: 14,\n fontSize: 14,\n lineHeight: 1.5,\n },\n table: {\n width: \"100%\",\n borderCollapse: \"collapse\",\n fontSize: 14,\n },\n th: {\n textAlign: \"left\",\n fontSize: 12,\n letterSpacing: 0,\n color: \"var(--muted-foreground, rgba(15, 23, 42, 0.62))\",\n padding: \"10px 12px\",\n borderBottom: \"1px solid var(--border, rgba(15, 23, 42, 0.1))\",\n },\n td: {\n padding: \"12px\",\n borderBottom: \"1px solid var(--border, rgba(15, 23, 42, 0.08))\",\n verticalAlign: \"top\",\n },\n pill: {\n display: \"inline-flex\",\n alignItems: \"center\",\n borderRadius: 999,\n padding: \"4px 10px\",\n background: \"var(--secondary, rgba(15, 23, 42, 0.06))\",\n color: \"var(--secondary-foreground, var(--foreground, #111827))\",\n fontSize: 12,\n fontWeight: 600,\n },\n monoLink: {\n fontFamily: \"ui-monospace, SFMono-Regular, Menlo, monospace\",\n fontSize: 12,\n },\n helpText: {\n fontSize: 13,\n lineHeight: 1.5,\n color: \"var(--muted-foreground, rgba(15, 23, 42, 0.68))\",\n },\n statusLine: {\n marginTop: 14,\n paddingTop: 14,\n borderTop: \"1px solid var(--border, rgba(15, 23, 42, 0.1))\",\n fontSize: 13,\n lineHeight: 1.5,\n color: \"var(--muted-foreground, rgba(15, 23, 42, 0.68))\",\n },\n sectionHeader: {\n display: \"flex\",\n justifyContent: \"space-between\",\n gap: 12,\n alignItems: \"flex-start\",\n flexWrap: \"wrap\",\n },\n teamGrid: {\n display: \"grid\",\n gridTemplateColumns: \"repeat(auto-fit, minmax(220px, 1fr))\",\n gap: 10,\n marginTop: 14,\n },\n teamChoice: {\n display: \"flex\",\n gap: 10,\n alignItems: \"flex-start\",\n border: \"1px solid var(--border, rgba(15, 23, 42, 0.14))\",\n borderRadius: 8,\n padding: 12,\n cursor: \"pointer\",\n background: \"var(--background, transparent)\",\n },\n checkbox: {\n marginTop: 3,\n },\n statusRuleGrid: {\n display: \"grid\",\n gridTemplateColumns: \"repeat(auto-fit, minmax(180px, 1fr))\",\n gap: 10,\n alignItems: \"center\",\n },\n};\n\nfunction normalizeConfig(config: LinearPluginConfig | null | undefined): LinearPluginConfig {\n const legacyOrganizationMappings = Array.isArray(config?.organizationMappings) ? config.organizationMappings : [];\n const explicitTeamMappings = Array.isArray(config?.teamMappings) ? config.teamMappings : [];\n return {\n apiTokenSecretRef: config?.apiTokenSecretRef ?? \"\",\n teamMappings: explicitTeamMappings.length > 0\n ? explicitTeamMappings\n : mergeLegacyTeamMappings(legacyOrganizationMappings),\n organizationMappings: legacyOrganizationMappings,\n ...(config?.fixtureMode === true ? { fixtureMode: true } : {}),\n };\n}\n\nfunction mergeLegacyTeamMappings(mappings: LinearOrganizationMapping[]): LinearTeamMapping[] {\n const byTeamId = new Map<string, LinearTeamMapping>();\n for (const mapping of mappings) {\n for (const team of mapping.teamMappings ?? []) {\n if (!team.teamId || byTeamId.has(team.teamId)) continue;\n byTeamId.set(team.teamId, team);\n }\n }\n return [...byTeamId.values()];\n}\n\nfunction getOrgPrefix(context: Record<string, unknown>): string | null {\n const orgPrefix = typeof context[\"orgPrefix\"] === \"string\" ? context[\"orgPrefix\"] : null;\n const companyPrefix = typeof context[\"companyPrefix\"] === \"string\" ? context[\"companyPrefix\"] : null;\n return orgPrefix ?? companyPrefix;\n}\n\nfunction getPluginIdFromLocation(): string | null {\n if (typeof window === \"undefined\") return null;\n const match = window.location.pathname.match(/\\/instance\\/settings\\/plugins\\/([^/?#]+)/);\n return match?.[1] ?? null;\n}\n\nasync function apiFetch<T>(path: string, init?: RequestInit): Promise<T> {\n const response = await fetch(path, {\n credentials: \"same-origin\",\n headers: {\n \"Content-Type\": \"application/json\",\n ...(init?.headers ?? {}),\n },\n ...init,\n });\n if (!response.ok) {\n const payload = await response.json().catch(async () => ({ error: await response.text() }));\n const message = typeof payload?.error === \"string\"\n ? payload.error\n : typeof payload?.message === \"string\"\n ? payload.message\n : `Request failed (${response.status})`;\n throw new Error(message);\n }\n return await response.json() as T;\n}\n\nfunction formatRudderStatus(status: LinearStateMapping[\"rudderStatus\"]): string {\n return status.replaceAll(\"_\", \" \");\n}\n\nfunction inferRudderStatus(state: LinearStateSummary): LinearStateMapping[\"rudderStatus\"] {\n const type = (state.type ?? \"\").toLowerCase();\n const name = state.name.toLowerCase();\n if (type.includes(\"completed\") || name.includes(\"done\") || name.includes(\"complete\")) return \"done\";\n if (type.includes(\"cancel\") || name.includes(\"cancel\")) return \"cancelled\";\n if (name.includes(\"review\")) return \"in_review\";\n if (type.includes(\"backlog\") || type.includes(\"triage\") || name.includes(\"backlog\") || name.includes(\"triage\")) return \"backlog\";\n if (type.includes(\"started\") || type.includes(\"unstarted\") || name.includes(\"progress\") || name.includes(\"todo\")) return \"todo\";\n return \"backlog\";\n}\n\nfunction buildTeamMappingsFromCatalog(catalog: SettingsCatalogData): LinearTeamMapping[] {\n return catalog.teams.map((team) => buildTeamMappingFromCatalog(team));\n}\n\nfunction buildTeamMappingFromCatalog(\n team: SettingsCatalogData[\"teams\"][number],\n existing?: LinearTeamMapping | null,\n): LinearTeamMapping {\n const existingStatusByStateId = new Map(\n (existing?.stateMappings ?? []).map((state) => [state.linearStateId, state.rudderStatus]),\n );\n return {\n teamId: team.id,\n teamName: team.name,\n stateMappings: team.states.map((state) => ({\n linearStateId: state.id,\n linearStateName: state.name,\n rudderStatus: existingStatusByStateId.get(state.id) ?? inferRudderStatus(state),\n })),\n };\n}\n\nfunction buildTeamMappingsForSelectedTeams(\n catalog: SettingsCatalogData,\n selectedTeamIds: string[],\n existingTeamMappings: LinearTeamMapping[],\n): LinearTeamMapping[] {\n const selected = new Set(selectedTeamIds);\n const existingByTeamId = new Map(existingTeamMappings.map((team) => [team.teamId, team]));\n return catalog.teams\n .filter((team) => selected.has(team.id))\n .map((team) => buildTeamMappingFromCatalog(team, existingByTeamId.get(team.id)));\n}\n\nfunction countMappedStates(teamMappings: LinearTeamMapping[] | null | undefined): number {\n return teamMappings?.reduce((sum, team) => sum + team.stateMappings.length, 0) ?? 0;\n}\n\nfunction summarizeMapping(teamMappings: LinearTeamMapping[] | null | undefined): string {\n if (!teamMappings) return \"No Linear workspace loaded yet.\";\n const teamCount = teamMappings.length;\n const stateCount = countMappedStates(teamMappings);\n return `${teamCount} team${teamCount === 1 ? \"\" : \"s\"} and ${stateCount} workflow state${stateCount === 1 ? \"\" : \"s\"} ready.`;\n}\n\nfunction isMissingSettingsCatalogHandler(error: unknown): boolean {\n const message = error instanceof Error ? error.message : String(error);\n return /No data handler registered/i.test(message) && /settings-catalog/i.test(message);\n}\n\nfunction prepareConfigForSubmit(config: LinearPluginConfig): LinearPluginConfig {\n const teamMappings = config.teamMappings\n .map((team) => ({\n teamId: team.teamId.trim(),\n teamName: team.teamName?.trim() || undefined,\n stateMappings: team.stateMappings\n .map((state) => ({\n linearStateId: state.linearStateId.trim(),\n linearStateName: state.linearStateName?.trim() || undefined,\n rudderStatus: state.rudderStatus,\n }))\n .filter((state) => state.linearStateId),\n }))\n .filter((team) => team.teamId);\n\n return {\n apiTokenSecretRef: config.apiTokenSecretRef?.trim() ?? \"\",\n ...(config.fixtureMode === true ? { fixtureMode: true } : {}),\n teamMappings,\n // Keep a legacy-compatible shape for already-installed manifests that still\n // require organizationMappings during config validation. New runtime code\n // reads the top-level teamMappings field.\n organizationMappings: [{ orgId: \"__global__\", teamMappings }],\n };\n}\n\nfunction summarizeImportResult(result: ImportLinearIssuesActionResult): string {\n const parts = [`Imported ${result.importedCount}`];\n if (result.duplicateCount > 0) parts.push(`${result.duplicateCount} duplicate`);\n if (result.fallbackCount > 0) parts.push(`${result.fallbackCount} fallback`);\n if (result.adjustedCount > 0) parts.push(`${result.adjustedCount} adjusted`);\n return parts.join(\" / \");\n}\n\nfunction formatRelativeTime(timestamp: string | null | undefined): string {\n if (!timestamp) return \"Unknown\";\n const date = new Date(timestamp);\n if (Number.isNaN(date.getTime())) return timestamp;\n return date.toLocaleString();\n}\n\nfunction issueHref(orgPrefix: string | null, issueId: string): string {\n return orgPrefix ? `/${orgPrefix}/issues/${issueId}` : `/issues/${issueId}`;\n}\n\nfunction pageHref(orgPrefix: string | null, query?: string): string {\n if (!orgPrefix) return \"/linear\";\n const url = new URL(`/${orgPrefix}/linear`, \"https://local.invalid\");\n if (query) url.searchParams.set(\"q\", query);\n return `${url.pathname}${url.search}`;\n}\n\nfunction readLinearPageUrlFilters() {\n if (typeof window === \"undefined\") {\n return { query: \"\", projectId: \"\", teamId: \"\" };\n }\n const params = new URLSearchParams(window.location.search);\n return {\n query: params.get(\"q\") ?? \"\",\n projectId: params.get(\"linearProjectId\") ?? \"\",\n teamId: params.get(\"linearTeamId\") ?? \"\",\n };\n}\n\ntype FilterState = {\n teamId: string;\n stateId: string;\n projectId: string;\n assigneeId: string;\n query: string;\n};\n\nfunction useLinearFilters(\n initialQuery: string,\n initialProjectId = \"\",\n initialTeamId = \"\",\n): [FilterState, Dispatch<SetStateAction<FilterState>>] {\n const [filters, setFilters] = useState<FilterState>({\n teamId: initialTeamId,\n stateId: \"\",\n projectId: initialProjectId,\n assigneeId: \"\",\n query: initialQuery,\n });\n return [filters, setFilters];\n}\n\nexport function LinearPluginPage({ context }: PluginPageProps) {\n const toast = usePluginToast();\n const importIssues = usePluginAction(ACTION_KEYS.importIssues) as (\n params?: Record<string, unknown>,\n ) => Promise<ImportLinearIssuesActionResult>;\n const orgId = context.orgId ?? \"__missing__\";\n const orgPrefix = getOrgPrefix(context as unknown as Record<string, unknown>);\n const urlFilters = readLinearPageUrlFilters();\n\n const bootstrap = usePluginData<PageBootstrapData>(DATA_KEYS.pageBootstrap, { orgId });\n const catalog = usePluginData<LinearCatalogData>(DATA_KEYS.catalog, { orgId });\n const [filters, setFilters] = useLinearFilters(urlFilters.query, urlFilters.projectId, urlFilters.teamId);\n const [targetProjectId, setTargetProjectId] = useState(\"\");\n const [afterCursor, setAfterCursor] = useState<string | null>(null);\n const [cursorHistory, setCursorHistory] = useState<string[]>([]);\n const [selectedIssueIds, setSelectedIssueIds] = useState<string[]>([]);\n const [importing, setImporting] = useState(false);\n\n const issues = usePluginData<LinearIssuesData>(DATA_KEYS.issues, {\n orgId,\n limit: LINEAR_PAGE_SIZE,\n after: afterCursor ?? undefined,\n teamId: filters.teamId || undefined,\n stateId: filters.stateId || undefined,\n projectId: filters.projectId || undefined,\n assigneeId: filters.assigneeId || undefined,\n query: filters.query || undefined,\n });\n\n useEffect(() => {\n setFilters((current) => {\n if (\n current.query === urlFilters.query &&\n current.projectId === urlFilters.projectId &&\n current.teamId === urlFilters.teamId\n ) {\n return current;\n }\n return {\n ...current,\n query: urlFilters.query,\n projectId: urlFilters.projectId,\n teamId: urlFilters.teamId,\n };\n });\n }, [setFilters, urlFilters.projectId, urlFilters.query, urlFilters.teamId]);\n\n const stateOptions = useMemo(() => {\n if (!catalog.data?.teams?.length) return [];\n const sourceTeams = filters.teamId\n ? catalog.data.teams.filter((team: LinearCatalogData[\"teams\"][number]) => team.id === filters.teamId)\n : catalog.data.teams;\n const deduped = new Map<string, { id: string; name: string }>();\n for (const team of sourceTeams) {\n for (const state of team.states) {\n deduped.set(state.id, { id: state.id, name: state.name });\n }\n }\n return [...deduped.values()];\n }, [catalog.data?.teams, filters.teamId]);\n\n useEffect(() => {\n setAfterCursor(null);\n setCursorHistory([]);\n setSelectedIssueIds([]);\n }, [filters.teamId, filters.stateId, filters.projectId, filters.assigneeId, filters.query]);\n\n useEffect(() => {\n const visibleIds = new Set(issues.data?.rows.map((row: LinearIssueRow) => row.id) ?? []);\n setSelectedIssueIds((current) => {\n const next = current.filter((id) => visibleIds.has(id));\n if (next.length === current.length && next.every((id, index) => id === current[index])) {\n return current;\n }\n return next;\n });\n }, [issues.data?.rows]);\n\n async function handleImport(mode: \"single\" | \"selected\" | \"allMatching\", issueIds?: string[]) {\n if (!targetProjectId) {\n toast({\n title: \"Choose a target project\",\n body: \"Imports are disabled until a Rudder project is selected.\",\n tone: \"warn\",\n });\n return;\n }\n setImporting(true);\n try {\n const result = await importIssues({\n orgId,\n targetProjectId,\n mode,\n issueIds,\n filters: {\n teamId: filters.teamId || undefined,\n stateId: filters.stateId || undefined,\n projectId: filters.projectId || undefined,\n assigneeId: filters.assigneeId || undefined,\n query: filters.query || undefined,\n },\n });\n toast({\n title: \"Linear import complete\",\n body: summarizeImportResult(result),\n tone: \"success\",\n });\n issues.refresh();\n setSelectedIssueIds([]);\n } catch (error) {\n toast({\n title: \"Linear import failed\",\n body: error instanceof Error ? error.message : String(error),\n tone: \"error\",\n });\n } finally {\n setImporting(false);\n }\n }\n\n return (\n <div style={layoutStyles.shell}>\n <section style={layoutStyles.card}>\n <h1 style={layoutStyles.title}>Linear intake</h1>\n <p style={layoutStyles.subtitle}>\n Import Linear issues into a chosen Rudder project. This page is the bulk workspace; the issue tab is the linked detail view.\n </p>\n </section>\n\n {bootstrap.loading ? (\n <section style={layoutStyles.card}>Loading Linear import context\u2026</section>\n ) : !bootstrap.data?.configured ? (\n <section style={{ ...layoutStyles.card, ...layoutStyles.warning }}>\n <strong>Linear is not configured yet.</strong>\n <div style={{ marginTop: 8 }}>{bootstrap.data?.message ?? \"Connect Linear and choose teams in plugin settings.\"}</div>\n <div style={{ marginTop: 12 }}>\n <a href=\"/instance/settings/plugins\" style={layoutStyles.monoLink}>Open plugin settings</a>\n </div>\n </section>\n ) : (\n <>\n <section style={layoutStyles.card}>\n <div style={layoutStyles.row}>\n <div style={layoutStyles.field}>\n <label style={layoutStyles.label} htmlFor=\"target-project\">Target Rudder project</label>\n <select\n id=\"target-project\"\n data-testid=\"linear-target-project\"\n style={layoutStyles.select}\n value={targetProjectId}\n onChange={(event) => setTargetProjectId(event.target.value)}\n >\n <option value=\"\">Choose a project</option>\n {(bootstrap.data?.projects ?? []).map((project: PageBootstrapData[\"projects\"][number]) => (\n <option key={project.id} value={project.id}>{project.name}</option>\n ))}\n </select>\n </div>\n <div style={layoutStyles.field}>\n <label style={layoutStyles.label} htmlFor=\"linear-team-filter\">Linear team</label>\n <select\n id=\"linear-team-filter\"\n style={layoutStyles.select}\n value={filters.teamId}\n onChange={(event) => setFilters((current) => ({ ...current, teamId: event.target.value, stateId: \"\" }))}\n >\n <option value=\"\">All allowed teams</option>\n {(catalog.data?.teams ?? []).map((team: LinearCatalogData[\"teams\"][number]) => (\n <option key={team.id} value={team.id}>{team.name}</option>\n ))}\n </select>\n </div>\n <div style={layoutStyles.field}>\n <label style={layoutStyles.label} htmlFor=\"linear-state-filter\">Workflow state</label>\n <select\n id=\"linear-state-filter\"\n style={layoutStyles.select}\n value={filters.stateId}\n onChange={(event) => setFilters((current) => ({ ...current, stateId: event.target.value }))}\n >\n <option value=\"\">All states</option>\n {stateOptions.map((state) => (\n <option key={state.id} value={state.id}>{state.name}</option>\n ))}\n </select>\n </div>\n <div style={layoutStyles.field}>\n <label style={layoutStyles.label} htmlFor=\"linear-project-filter\">Linear project</label>\n <select\n id=\"linear-project-filter\"\n style={layoutStyles.select}\n value={filters.projectId}\n onChange={(event) => setFilters((current) => ({ ...current, projectId: event.target.value }))}\n >\n <option value=\"\">All projects</option>\n {(catalog.data?.projects ?? []).map((project: LinearCatalogData[\"projects\"][number]) => (\n <option key={project.id} value={project.id}>{project.name}</option>\n ))}\n </select>\n </div>\n <div style={layoutStyles.field}>\n <label style={layoutStyles.label} htmlFor=\"linear-assignee-filter\">Assignee</label>\n <select\n id=\"linear-assignee-filter\"\n style={layoutStyles.select}\n value={filters.assigneeId}\n onChange={(event) => setFilters((current) => ({ ...current, assigneeId: event.target.value }))}\n >\n <option value=\"\">Anyone</option>\n {(catalog.data?.users ?? []).map((user: LinearCatalogData[\"users\"][number]) => (\n <option key={user.id} value={user.id}>{user.name}</option>\n ))}\n </select>\n </div>\n <div style={layoutStyles.field}>\n <label style={layoutStyles.label} htmlFor=\"linear-query-filter\">Search</label>\n <input\n id=\"linear-query-filter\"\n style={layoutStyles.input}\n value={filters.query}\n onChange={(event) => setFilters((current) => ({ ...current, query: event.target.value }))}\n placeholder=\"Identifier, title, or description\"\n />\n </div>\n </div>\n </section>\n\n <section style={layoutStyles.card}>\n <div style={{ ...layoutStyles.row, justifyContent: \"space-between\" }}>\n <div style={layoutStyles.row}>\n <button\n type=\"button\"\n style={layoutStyles.button}\n onClick={() => {\n const rows = issues.data?.rows ?? [];\n const selectableIds = rows\n .filter((row: LinearIssueRow) => !row.imported)\n .map((row: LinearIssueRow) => row.id);\n setSelectedIssueIds(selectableIds);\n }}\n disabled={issues.loading}\n >\n Select current page\n </button>\n <button\n type=\"button\"\n style={layoutStyles.button}\n onClick={() => setSelectedIssueIds([])}\n disabled={selectedIssueIds.length === 0}\n >\n Clear selection\n </button>\n </div>\n <div style={layoutStyles.row}>\n <button\n type=\"button\"\n style={layoutStyles.button}\n disabled={!targetProjectId || selectedIssueIds.length === 0 || importing}\n onClick={() => void handleImport(\"selected\", selectedIssueIds)}\n >\n Import selected\n </button>\n <button\n type=\"button\"\n style={layoutStyles.primaryButton}\n data-testid=\"linear-import-all\"\n disabled={!targetProjectId || importing}\n onClick={() => void handleImport(\"allMatching\")}\n title={`Imports up to ${LINEAR_IMPORT_ALL_LIMIT} matching issues.`}\n >\n Import all matching\n </button>\n </div>\n </div>\n {!targetProjectId && (\n <div style={{ marginTop: 12, ...layoutStyles.warning }}>\n Choose a target Rudder project to enable per-row, selected, or all-matching import actions.\n </div>\n )}\n </section>\n\n <section style={layoutStyles.card}>\n {issues.loading ? (\n <div>Loading Linear issues\u2026</div>\n ) : issues.error ? (\n <div style={layoutStyles.warning}>{issues.error.message}</div>\n ) : (\n <>\n <table style={layoutStyles.table}>\n <thead>\n <tr>\n <th style={layoutStyles.th}></th>\n <th style={layoutStyles.th}>Issue</th>\n <th style={layoutStyles.th}>State</th>\n <th style={layoutStyles.th}>Project</th>\n <th style={layoutStyles.th}>Assignee</th>\n <th style={layoutStyles.th}>Status</th>\n <th style={layoutStyles.th}>Action</th>\n </tr>\n </thead>\n <tbody>\n {(issues.data?.rows ?? []).map((row: LinearIssueRow) => {\n const checked = selectedIssueIds.includes(row.id);\n const sameOrgLink = row.imported && (!row.importedOrgId || row.importedOrgId === context.orgId);\n return (\n <tr key={row.id}>\n <td style={layoutStyles.td}>\n <input\n type=\"checkbox\"\n checked={checked}\n disabled={row.imported}\n onChange={(event) => {\n setSelectedIssueIds((current) => {\n if (event.target.checked) return [...current, row.id];\n return current.filter((id) => id !== row.id);\n });\n }}\n />\n </td>\n <td style={layoutStyles.td}>\n <div style={{ display: \"grid\", gap: 6 }}>\n <a href={row.url} target=\"_blank\" rel=\"noreferrer\">\n <strong>{row.identifier}</strong> {row.title}\n </a>\n <span style={layoutStyles.pill}>{row.team.name}</span>\n </div>\n </td>\n <td style={layoutStyles.td}>{row.state.name}</td>\n <td style={layoutStyles.td}>{row.project?.name ?? \"None\"}</td>\n <td style={layoutStyles.td}>{row.assignee?.name ?? \"Unassigned\"}</td>\n <td style={layoutStyles.td}>\n {row.imported ? (\n <span data-testid={`linear-imported-${row.id}`} style={layoutStyles.pill}>\n Imported\n </span>\n ) : (\n <span style={layoutStyles.pill}>Ready</span>\n )}\n </td>\n <td style={layoutStyles.td}>\n {row.imported ? (\n sameOrgLink && row.importedRudderIssueId ? (\n <a href={issueHref(orgPrefix, row.importedRudderIssueId)}>Open Rudder issue</a>\n ) : (\n <span>Imported elsewhere</span>\n )\n ) : (\n <button\n type=\"button\"\n style={layoutStyles.subtleButton}\n disabled={!targetProjectId || importing}\n onClick={() => void handleImport(\"single\", [row.id])}\n >\n Import\n </button>\n )}\n </td>\n </tr>\n );\n })}\n </tbody>\n </table>\n\n {(issues.data?.rows.length ?? 0) === 0 && (\n <div style={{ marginTop: 16, color: \"rgba(15, 23, 42, 0.68)\" }}>\n No Linear issues matched the current filters.\n </div>\n )}\n\n <div style={{ ...layoutStyles.row, justifyContent: \"space-between\", marginTop: 16 }}>\n <span style={{ fontSize: 13, color: \"rgba(15, 23, 42, 0.68)\" }}>\n Showing {issues.data?.totalShown ?? 0} issue(s).\n </span>\n <div style={layoutStyles.row}>\n <button\n type=\"button\"\n style={layoutStyles.button}\n disabled={cursorHistory.length === 0 || importing}\n onClick={() => {\n setCursorHistory((current) => {\n const nextHistory = [...current];\n const previousCursor = nextHistory.pop() ?? null;\n setAfterCursor(previousCursor);\n return nextHistory;\n });\n }}\n >\n Previous\n </button>\n <button\n type=\"button\"\n style={layoutStyles.button}\n disabled={!issues.data?.hasNextPage || importing}\n onClick={() => {\n if (!issues.data?.endCursor) return;\n setCursorHistory((current) => [...current, afterCursor ?? \"\"]);\n setAfterCursor(issues.data.endCursor);\n }}\n >\n Next\n </button>\n </div>\n </div>\n </>\n )}\n </section>\n </>\n )}\n </div>\n );\n}\n\nexport function LinearIssueTab({ context }: PluginDetailTabProps) {\n const orgId = context.orgId ?? \"__missing__\";\n const orgPrefix = getOrgPrefix(context as unknown as Record<string, unknown>);\n const data = usePluginData<IssueLinkData>(DATA_KEYS.issueLink, {\n orgId,\n issueId: context.entityId,\n });\n\n if (data.loading) {\n return <div style={layoutStyles.card}>Loading Linear issue details\u2026</div>;\n }\n\n if (data.error) {\n return <div style={{ ...layoutStyles.card, ...layoutStyles.warning }}>{data.error.message}</div>;\n }\n\n if (!data.data || !data.data.linked) {\n return (\n <div style={layoutStyles.card}>\n <h2 style={{ marginTop: 0 }}>No linked Linear issue</h2>\n <p style={layoutStyles.subtitle}>\n This Rudder issue has not been imported from Linear yet.\n </p>\n <a href={pageHref(orgPrefix, data.data?.searchQuery ?? \"\")}>Open Linear intake with this issue title as the search query</a>\n </div>\n );\n }\n\n const latest = data.data.latestIssue;\n const link = data.data.link;\n\n return (\n <div style={layoutStyles.shell}>\n <section style={layoutStyles.card}>\n <h2 style={{ marginTop: 0 }}>Linked Linear issue</h2>\n <p style={layoutStyles.subtitle}>\n {link.linearIdentifier} maps to this Rudder issue.\n </p>\n <div style={{ ...layoutStyles.row, marginTop: 12 }}>\n <a href={link.linearUrl} target=\"_blank\" rel=\"noreferrer\">Open in Linear</a>\n <span style={layoutStyles.pill}>{latest?.team.name ?? link.teamName}</span>\n <span style={layoutStyles.pill}>{latest?.state.name ?? link.stateName}</span>\n {latest?.project?.name ? <span style={layoutStyles.pill}>{latest.project.name}</span> : null}\n </div>\n </section>\n\n {data.data.staleReason ? (\n <section style={{ ...layoutStyles.card, ...layoutStyles.warning }}>\n {data.data.staleReason}\n </section>\n ) : null}\n\n <section style={layoutStyles.card}>\n <h3 style={{ marginTop: 0 }}>\n {(latest?.identifier ?? link.linearIdentifier)} {latest?.title ?? link.linearTitle}\n </h3>\n <div style={{ ...layoutStyles.row, marginBottom: 12 }}>\n <span style={layoutStyles.pill}>Updated {formatRelativeTime(latest?.updatedAt ?? link.updatedAt)}</span>\n <span style={layoutStyles.pill}>Imported {formatRelativeTime(link.importedAt)}</span>\n <span style={layoutStyles.pill}>{latest?.assignee?.name ?? \"Unassigned\"}</span>\n </div>\n <div style={{ whiteSpace: \"pre-wrap\", lineHeight: 1.6 }}>\n {latest?.description?.trim() || \"This Linear issue has no description.\"}\n </div>\n </section>\n </div>\n );\n}\n\nexport function LinearPluginSettingsPage(_props: PluginSettingsPageProps) {\n const toast = usePluginToast();\n const bootstrap = usePluginData<SettingsBootstrapData>(DATA_KEYS.settingsBootstrap);\n const [draft, setDraft] = useState<LinearPluginConfig>(normalizeConfig(null));\n const [tokenInput, setTokenInput] = useState(\"\");\n const [settingsCatalog, setSettingsCatalog] = useState<SettingsCatalogData | null>(null);\n const [catalogLoading, setCatalogLoading] = useState(false);\n const [catalogError, setCatalogError] = useState<string | null>(null);\n const [connecting, setConnecting] = useState(false);\n const [saving, setSaving] = useState(false);\n const pluginId = getPluginIdFromLocation();\n\n useEffect(() => {\n if (!bootstrap.data) return;\n const nextDraft = normalizeConfig(bootstrap.data.config);\n setDraft(nextDraft);\n }, [bootstrap.data]);\n\n useEffect(() => {\n if (!pluginId || !draft.apiTokenSecretRef) {\n setSettingsCatalog(null);\n setCatalogError(null);\n setCatalogLoading(false);\n return;\n }\n\n let cancelled = false;\n setCatalogLoading(true);\n setCatalogError(null);\n\n void fetchSettingsCatalog()\n .then((catalog) => {\n if (cancelled) return;\n setSettingsCatalog(catalog);\n setDraft((current) => {\n const normalized = normalizeConfig(current);\n const selectedTeamIds = normalized.teamMappings\n .map((team) => team.teamId)\n .filter(Boolean);\n const nextTeamMappings = selectedTeamIds.length > 0\n ? buildTeamMappingsForSelectedTeams(catalog, selectedTeamIds, normalized.teamMappings)\n : buildTeamMappingsFromCatalog(catalog);\n return {\n ...normalized,\n teamMappings: nextTeamMappings,\n };\n });\n })\n .catch((error) => {\n if (cancelled) return;\n setSettingsCatalog(null);\n setCatalogError(error instanceof Error ? error.message : String(error));\n })\n .finally(() => {\n if (!cancelled) setCatalogLoading(false);\n });\n\n return () => {\n cancelled = true;\n };\n }, [draft.apiTokenSecretRef, pluginId]);\n\n const selectedTeamIds = draft.teamMappings\n .map((team) => team.teamId)\n .filter(Boolean);\n const selectedTeamIdSet = new Set(selectedTeamIds);\n const selectedTeamCount = selectedTeamIds.length;\n const catalogTeamCount = settingsCatalog?.teams.length ?? 0;\n\n async function savePluginConfig(config: LinearPluginConfig) {\n if (!pluginId) throw new Error(\"Unable to resolve plugin id\");\n return await apiFetch(`/api/plugins/${encodeURIComponent(pluginId)}/config`, {\n method: \"POST\",\n body: JSON.stringify({ configJson: prepareConfigForSubmit(config) }),\n });\n }\n\n async function fetchPluginData<T>(key: string, params: Record<string, unknown> = {}, orgId?: string): Promise<T> {\n if (!pluginId) throw new Error(\"Unable to resolve plugin id\");\n const payload = await apiFetch<{ data: T }>(`/api/plugins/${encodeURIComponent(pluginId)}/data/${key}`, {\n method: \"POST\",\n body: JSON.stringify({\n ...(orgId ? { orgId } : {}),\n params: {\n ...params,\n ...(orgId ? { orgId } : {}),\n },\n }),\n });\n return payload.data;\n }\n\n async function fetchSettingsCatalogWithRetry(): Promise<SettingsCatalogData> {\n let lastError: unknown = null;\n for (let attempt = 0; attempt < 5; attempt += 1) {\n try {\n return await fetchPluginData<SettingsCatalogData>(DATA_KEYS.settingsCatalog);\n } catch (error) {\n if (isMissingSettingsCatalogHandler(error)) throw error;\n lastError = error;\n await new Promise((resolve) => window.setTimeout(resolve, 350 + attempt * 250));\n }\n }\n throw lastError instanceof Error ? lastError : new Error(String(lastError));\n }\n\n async function refreshPluginRuntime() {\n if (!pluginId) throw new Error(\"Unable to resolve plugin id\");\n await apiFetch(`/api/plugins/${encodeURIComponent(pluginId)}/disable`, {\n method: \"POST\",\n body: JSON.stringify({ reason: \"Refresh Linear plugin after settings update\" }),\n });\n await apiFetch(`/api/plugins/${encodeURIComponent(pluginId)}/enable`, {\n method: \"POST\",\n body: JSON.stringify({}),\n });\n }\n\n async function fetchSettingsCatalog(): Promise<SettingsCatalogData> {\n try {\n return await fetchSettingsCatalogWithRetry();\n } catch (error) {\n if (!isMissingSettingsCatalogHandler(error)) throw error;\n await refreshPluginRuntime();\n return await fetchSettingsCatalogWithRetry();\n }\n }\n\n function toggleTeam(teamId: string) {\n if (!settingsCatalog) return;\n setDraft((current) => {\n const normalized = normalizeConfig(current);\n const nextTeamIds = new Set(normalized.teamMappings.map((team) => team.teamId).filter(Boolean));\n if (nextTeamIds.has(teamId)) {\n nextTeamIds.delete(teamId);\n } else {\n nextTeamIds.add(teamId);\n }\n return {\n ...normalized,\n teamMappings: buildTeamMappingsForSelectedTeams(settingsCatalog, [...nextTeamIds], normalized.teamMappings),\n };\n });\n }\n\n function selectAllTeams() {\n if (!settingsCatalog) return;\n setDraft((current) => {\n const normalized = normalizeConfig(current);\n return {\n ...normalized,\n teamMappings: buildTeamMappingsForSelectedTeams(\n settingsCatalog,\n settingsCatalog.teams.map((team) => team.id),\n normalized.teamMappings,\n ),\n };\n });\n }\n\n function setStatusRule(teamId: string, stateId: string, rudderStatus: LinearStateMapping[\"rudderStatus\"]) {\n setDraft((current) => ({\n ...current,\n teamMappings: current.teamMappings.map((team) => {\n if (team.teamId !== teamId) return team;\n return {\n ...team,\n stateMappings: team.stateMappings.map((state) =>\n state.linearStateId === stateId ? { ...state, rudderStatus } : state,\n ),\n };\n }),\n }));\n }\n\n async function connectLinear() {\n if (!pluginId) {\n toast({ title: \"Unable to resolve plugin id\", tone: \"error\" });\n return;\n }\n\n setConnecting(true);\n try {\n let apiTokenSecretRef = draft.apiTokenSecretRef?.trim() ?? \"\";\n const trimmedToken = tokenInput.trim();\n if (trimmedToken) {\n const secretOrgId = bootstrap.data?.organizations[0]?.id ?? \"\";\n if (!secretOrgId) {\n toast({\n title: \"Create a Rudder organization first\",\n body: \"Rudder needs one organization to store the Linear token reference.\",\n tone: \"warn\",\n });\n return;\n }\n const secret = await apiFetch<{ id: string }>(`/api/orgs/${encodeURIComponent(secretOrgId)}/secrets`, {\n method: \"POST\",\n body: JSON.stringify({\n name: \"Linear token\",\n value: trimmedToken,\n description: \"Used by the Linear plugin to read issues across Rudder organizations.\",\n }),\n });\n apiTokenSecretRef = secret.id;\n }\n if (!apiTokenSecretRef) {\n toast({\n title: \"Paste a Linear token\",\n body: \"Create one in Linear, paste it here, then connect.\",\n tone: \"warn\",\n });\n return;\n }\n\n const seedConfig = {\n ...draft,\n apiTokenSecretRef,\n };\n await savePluginConfig(seedConfig);\n\n const catalog = await fetchSettingsCatalog();\n if (catalog.teams.length === 0) {\n throw new Error(\"Linear returned no teams for this token.\");\n }\n const generatedTeamMappings = buildTeamMappingsFromCatalog(catalog);\n const nextConfig = prepareConfigForSubmit({\n ...seedConfig,\n teamMappings: generatedTeamMappings,\n });\n await savePluginConfig(nextConfig);\n setSettingsCatalog(catalog);\n setCatalogError(null);\n setDraft(nextConfig);\n setTokenInput(\"\");\n bootstrap.refresh();\n toast({\n title: \"Linear is ready\",\n body: summarizeMapping(generatedTeamMappings),\n tone: \"success\",\n });\n } catch (error) {\n toast({\n title: \"Linear connection failed\",\n body: error instanceof Error ? error.message : String(error),\n tone: \"error\",\n });\n } finally {\n setConnecting(false);\n }\n }\n\n async function saveConfig() {\n if (!pluginId) {\n toast({ title: \"Unable to resolve plugin id\", tone: \"error\" });\n return;\n }\n if (draft.apiTokenSecretRef && settingsCatalog && selectedTeamCount === 0) {\n toast({\n title: \"Choose at least one Linear team\",\n body: \"The import page needs one or more teams to show Linear issues.\",\n tone: \"warn\",\n });\n return;\n }\n setSaving(true);\n try {\n await savePluginConfig(draft);\n bootstrap.refresh();\n toast({\n title: \"Linear settings saved\",\n tone: \"success\",\n });\n } catch (error) {\n toast({\n title: \"Failed to save Linear settings\",\n body: error instanceof Error ? error.message : String(error),\n tone: \"error\",\n });\n } finally {\n setSaving(false);\n }\n }\n\n function connectionStatusText(): string {\n if (bootstrap.loading) return \"Loading plugin settings\u2026\";\n if (catalogLoading) return \"Reading teams and workflow states from Linear\u2026\";\n if (catalogError) return `Linear could not be loaded: ${catalogError}`;\n if (settingsCatalog) {\n return `Connected. ${catalogTeamCount} Linear team${catalogTeamCount === 1 ? \"\" : \"s\"} found; ${selectedTeamCount} selected for import.`;\n }\n if (draft.apiTokenSecretRef) return \"Token saved. Refresh from Linear to load teams.\";\n return \"Paste a Linear token to connect this instance.\";\n }\n\n return (\n <div style={layoutStyles.shell}>\n <section key=\"linear-settings-intro\" style={layoutStyles.card}>\n <h2 style={{ marginTop: 0 }}>Linear</h2>\n <p style={layoutStyles.subtitle}>\n Paste a Linear token once. Rudder will read your teams and workflow states, then prepare the import settings automatically.\n </p>\n {bootstrap.data?.fixtureMode ? (\n <div style={{ marginTop: 12, ...layoutStyles.warning }}>\n Fixture mode is enabled in this environment. Linear reads use deterministic test data.\n </div>\n ) : null}\n </section>\n\n <section key=\"linear-settings-connect\" style={layoutStyles.card}>\n <div style={layoutStyles.sectionHeader}>\n <div>\n <h3 style={{ margin: 0 }}>Connect Linear</h3>\n <p style={layoutStyles.subtitle}>\n Pick a Rudder organization, paste a token, and Rudder will prepare the import setup from Linear.{\" \"}\n <a href={LINEAR_TOKEN_SETTINGS_URL} target=\"_blank\" rel=\"noreferrer\" style={layoutStyles.monoLink}>\n Create a Linear token\n </a>\n .\n </p>\n </div>\n </div>\n <div style={{ ...layoutStyles.connectionGrid, marginTop: 14 }}>\n <div style={layoutStyles.field}>\n <label style={layoutStyles.label} htmlFor=\"linear-token\">Linear token</label>\n <input\n id=\"linear-token\"\n data-testid=\"linear-token-input\"\n style={layoutStyles.input}\n type=\"password\"\n autoComplete=\"off\"\n value={tokenInput}\n onChange={(event) => setTokenInput(event.target.value)}\n placeholder={draft.apiTokenSecretRef ? \"Token saved. Paste a new token to replace it.\" : \"Paste a Linear token\"}\n />\n </div>\n <div style={{ display: \"grid\", gap: 6, justifySelf: \"start\" }}>\n <span aria-hidden=\"true\" style={{ ...layoutStyles.label, visibility: \"hidden\" }}>Action</span>\n <button\n type=\"button\"\n style={layoutStyles.primaryButton}\n data-testid=\"linear-connect\"\n onClick={() => void connectLinear()}\n disabled={connecting}\n >\n {connecting ? \"Connecting\u2026\" : draft.apiTokenSecretRef ? \"Refresh from Linear\" : \"Connect Linear\"}\n </button>\n </div>\n </div>\n <div style={layoutStyles.statusLine}>{connectionStatusText()}</div>\n </section>\n\n {draft.apiTokenSecretRef ? (\n <section key=\"linear-settings-teams\" style={layoutStyles.card}>\n <div style={layoutStyles.sectionHeader}>\n <div>\n <h3 style={{ margin: 0 }}>Teams to import</h3>\n <p style={layoutStyles.subtitle}>\n Choose the Linear teams that should appear on the import page. Rudder stores the technical details for you.\n </p>\n </div>\n <button\n type=\"button\"\n style={layoutStyles.subtleButton}\n onClick={selectAllTeams}\n disabled={!settingsCatalog || catalogLoading || catalogTeamCount === selectedTeamCount}\n >\n Select all teams\n </button>\n </div>\n\n {catalogLoading ? (\n <p style={layoutStyles.helpText}>Loading teams from Linear\u2026</p>\n ) : catalogError ? (\n <div style={{ marginTop: 14, ...layoutStyles.warning }}>\n <strong>Linear could not be loaded.</strong>\n <div style={{ marginTop: 6 }}>{catalogError}</div>\n </div>\n ) : settingsCatalog ? (\n <>\n <div style={layoutStyles.teamGrid}>\n {settingsCatalog.teams.map((team, index) => {\n const checked = selectedTeamIdSet.has(team.id);\n return (\n <label\n key={`${team.id}-${index}`}\n style={{\n ...layoutStyles.teamChoice,\n borderColor: checked ? \"var(--primary, #2563eb)\" : \"var(--border, rgba(15, 23, 42, 0.14))\",\n background: checked ? \"rgba(37, 99, 235, 0.08)\" : \"var(--background, transparent)\",\n }}\n >\n <input\n data-testid={`linear-team-choice-${team.id}`}\n style={layoutStyles.checkbox}\n type=\"checkbox\"\n checked={checked}\n onChange={() => toggleTeam(team.id)}\n />\n <span>\n <strong>{team.name}</strong>\n <span style={{ display: \"block\", marginTop: 3, ...layoutStyles.helpText }}>\n {team.key} \u00B7 {team.states.length} workflow state{team.states.length === 1 ? \"\" : \"s\"}\n </span>\n </span>\n </label>\n );\n })}\n </div>\n <div style={{ ...layoutStyles.row, justifyContent: \"space-between\", marginTop: 14 }}>\n <span style={layoutStyles.helpText}>\n {selectedTeamCount === 0\n ? \"Choose at least one team before saving.\"\n : `${selectedTeamCount} team${selectedTeamCount === 1 ? \"\" : \"s\"} selected for import.`}\n </span>\n <button\n type=\"button\"\n style={layoutStyles.primaryButton}\n data-testid=\"linear-save-team-choices\"\n onClick={() => void saveConfig()}\n disabled={saving || selectedTeamCount === 0}\n >\n {saving ? \"Saving\u2026\" : \"Save choices\"}\n </button>\n </div>\n </>\n ) : (\n <p style={layoutStyles.helpText}>Refresh from Linear to load teams for this token.</p>\n )}\n </section>\n ) : null}\n\n {settingsCatalog && draft.teamMappings.length > 0 ? (\n <section key=\"linear-settings-status-rules\" style={layoutStyles.card}>\n <details>\n <summary style={{ cursor: \"pointer\", fontWeight: 700 }}>Status rules (optional)</summary>\n <p style={layoutStyles.subtitle}>\n Rudder applies smart defaults from Linear. Change these only if imported issues land in the wrong Rudder status.\n </p>\n <div style={{ display: \"grid\", gap: 18, marginTop: 14 }}>\n {draft.teamMappings.map((teamMapping, teamIndex) => {\n const catalogTeam = settingsCatalog.teams.find((team) => team.id === teamMapping.teamId);\n const states = catalogTeam?.states ?? teamMapping.stateMappings.map((state) => ({\n id: state.linearStateId,\n name: state.linearStateName ?? \"Linear status\",\n type: null,\n }));\n const statusByStateId = new Map(teamMapping.stateMappings.map((state) => [state.linearStateId, state.rudderStatus]));\n return (\n <div key={`${teamMapping.teamId}-${teamIndex}`} style={{ borderTop: \"1px solid var(--border, rgba(15, 23, 42, 0.1))\", paddingTop: 14 }}>\n <h4 style={{ margin: \"0 0 10px\" }}>{teamMapping.teamName ?? catalogTeam?.name ?? \"Linear team\"}</h4>\n <div style={{ display: \"grid\", gap: 8 }}>\n {states.map((state, stateIndex) => (\n <div key={`${teamMapping.teamId}-${state.id}-${stateIndex}`} style={layoutStyles.statusRuleGrid}>\n <div>\n <strong>{state.name}</strong>\n <div style={layoutStyles.helpText}>{state.type ? `${state.type} in Linear` : \"Linear workflow state\"}</div>\n </div>\n <select\n style={layoutStyles.select}\n value={statusByStateId.get(state.id) ?? inferRudderStatus(state)}\n onChange={(event) =>\n setStatusRule(teamMapping.teamId, state.id, event.target.value as LinearStateMapping[\"rudderStatus\"])}\n >\n {RUDDER_STATUS_OPTIONS.map((status) => (\n <option key={`${teamMapping.teamId}-${state.id}-${status}`} value={status}>{formatRudderStatus(status)}</option>\n ))}\n </select>\n </div>\n ))}\n </div>\n </div>\n );\n })}\n </div>\n <div style={{ marginTop: 14 }}>\n <button type=\"button\" style={layoutStyles.primaryButton} onClick={() => void saveConfig()} disabled={saving}>\n {saving ? \"Saving\u2026\" : \"Save status rules\"}\n </button>\n </div>\n </details>\n </section>\n ) : null}\n </div>\n );\n}\n", "import type { Issue } from \"@rudderhq/shared\";\n\nexport const PLUGIN_ID = \"rudder.linear\";\nexport const PLUGIN_VERSION = \"0.1.0\";\nexport const PAGE_ROUTE = \"linear\";\nexport const ENTITY_TYPE_LINEAR_ISSUE_LINK = \"linear_issue_link\";\nexport const ISSUE_LINK_STATE_KEY = \"linear-link\";\nexport const DEFAULT_LINEAR_API_URL = \"https://api.linear.app/graphql\";\nexport const LINEAR_TOKEN_SETTINGS_URL = \"https://linear.app/settings/account/security\";\nexport const LINEAR_PAGE_SIZE = 25;\nexport const LINEAR_IMPORT_ALL_LIMIT = 100;\n\nexport const SLOT_IDS = {\n page: \"linear-page\",\n settingsPage: \"linear-settings-page\",\n issueTab: \"linear-issue-tab\",\n} as const;\n\nexport const EXPORT_NAMES = {\n page: \"LinearPluginPage\",\n settingsPage: \"LinearPluginSettingsPage\",\n issueTab: \"LinearIssueTab\",\n} as const;\n\nexport const DATA_KEYS = {\n settingsBootstrap: \"settings-bootstrap\",\n pageBootstrap: \"page-bootstrap\",\n settingsCatalog: \"settings-catalog\",\n catalog: \"linear-catalog\",\n issues: \"linear-issues\",\n issueLink: \"issue-link\",\n} as const;\n\nexport const ACTION_KEYS = {\n importIssues: \"import-linear-issues\",\n} as const;\n\nexport const RUDDER_STATUS_OPTIONS: Issue[\"status\"][] = [\n \"backlog\",\n \"todo\",\n \"in_progress\",\n \"in_review\",\n \"done\",\n \"blocked\",\n \"cancelled\",\n];\n"],
5
+ "mappings": "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",
6
+ "names": ["selectedTeamIds"]
7
+ }