@rudderhq/server 0.1.0-canary.8 → 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
@@ -68,6 +68,7 @@ const DEFAULT_INCLUDE = {
68
68
  skills: false,
69
69
  };
70
70
  const DEFAULT_COLLISION_STRATEGY = "rename";
71
+ const PORTABLE_AGENT_ENTRY_FILE = "AGENTS.md";
71
72
  const execFileAsync = promisify(execFile);
72
73
  let bundledSkillsCommitPromise = null;
73
74
  function resolveImportMode(options) {
@@ -1908,6 +1909,24 @@ function readAgentSkillRefs(frontmatter) {
1908
1909
  .map((entry) => normalizeSkillKey(entry) ?? entry.trim())
1909
1910
  .filter(Boolean)));
1910
1911
  }
1912
+ function isPortableAgentEntryPath(relativePath) {
1913
+ return path.posix.basename(normalizePortablePath(relativePath)) === PORTABLE_AGENT_ENTRY_FILE;
1914
+ }
1915
+ function ensurePortableAgentEntryFile(exportedFiles, exportedEntryFile, fallbackBody) {
1916
+ const files = { ...exportedFiles };
1917
+ const normalizedEntryFile = normalizePortablePath(exportedEntryFile);
1918
+ if (isPortableAgentEntryPath(normalizedEntryFile) && typeof files[normalizedEntryFile] === "string") {
1919
+ return { files, entryFile: normalizedEntryFile };
1920
+ }
1921
+ const existingPortableEntry = Object.keys(files)
1922
+ .map((entry) => normalizePortablePath(entry))
1923
+ .find((entry) => isPortableAgentEntryPath(entry));
1924
+ if (existingPortableEntry) {
1925
+ return { files, entryFile: existingPortableEntry };
1926
+ }
1927
+ files[PORTABLE_AGENT_ENTRY_FILE] = fallbackBody || "_No AGENTS instructions were resolved from current agent config._";
1928
+ return { files, entryFile: PORTABLE_AGENT_ENTRY_FILE };
1929
+ }
1911
1930
  function buildManifestFromPackageFiles(files, opts) {
1912
1931
  const normalizedFiles = normalizeFileMap(files);
1913
1932
  const companyPath = typeof normalizedFiles["ORGANIZATION.md"] === "string"
@@ -2366,7 +2385,24 @@ export function organizationPortabilityService(db, storage) {
2366
2385
  resolved.warnings.unshift(...warnings);
2367
2386
  return resolved;
2368
2387
  }
2369
- async function exportBundle(orgId, input) {
2388
+ async function exportBundle(orgId, input, options = {}) {
2389
+ const totalProgressSteps = 8;
2390
+ const assertNotAborted = () => {
2391
+ if (options.signal?.aborted) {
2392
+ throw new Error("Export build canceled");
2393
+ }
2394
+ };
2395
+ const reportProgress = (stage, message, completed, fileCount) => {
2396
+ options.onProgress?.({
2397
+ stage,
2398
+ message,
2399
+ completed,
2400
+ total: totalProgressSteps,
2401
+ fileCount: fileCount ?? null,
2402
+ });
2403
+ };
2404
+ assertNotAborted();
2405
+ reportProgress("collecting", "Collecting organization data.", 1);
2370
2406
  const include = normalizeInclude({
2371
2407
  ...input.include,
2372
2408
  agents: input.agents && input.agents.length > 0 ? true : input.include?.agents,
@@ -2377,6 +2413,7 @@ export function organizationPortabilityService(db, storage) {
2377
2413
  skills: input.skills && input.skills.length > 0 ? true : input.include?.skills,
2378
2414
  });
2379
2415
  const organization = await organizations.getById(orgId);
2416
+ assertNotAborted();
2380
2417
  if (!organization)
2381
2418
  throw notFound("Organization not found");
2382
2419
  const files = {};
@@ -2386,8 +2423,10 @@ export function organizationPortabilityService(db, storage) {
2386
2423
  const rootPath = normalizeAgentUrlKey(organization.name) ?? "organization-package";
2387
2424
  let companyLogoPath = null;
2388
2425
  const allAgentRows = include.agents ? await agents.list(orgId, { includeTerminated: true }) : [];
2426
+ assertNotAborted();
2389
2427
  const liveAgentRows = allAgentRows.filter((agent) => agent.status !== "terminated");
2390
2428
  const organizationSkillRows = include.skills || include.agents ? await organizationSkills.listFull(orgId) : [];
2429
+ assertNotAborted();
2391
2430
  if (include.agents) {
2392
2431
  const skipped = allAgentRows.length - liveAgentRows.length;
2393
2432
  if (skipped > 0) {
@@ -2434,8 +2473,10 @@ export function organizationPortabilityService(db, storage) {
2434
2473
  const issuesSvc = issueService(db);
2435
2474
  const automationsSvc = automationService(db);
2436
2475
  const allProjectsRaw = include.projects || include.issues ? await projectsSvc.list(orgId) : [];
2476
+ assertNotAborted();
2437
2477
  const allProjects = allProjectsRaw.filter((project) => !project.archivedAt);
2438
2478
  const allAutomations = include.issues ? await automationsSvc.list(orgId) : [];
2479
+ assertNotAborted();
2439
2480
  const projectById = new Map(allProjects.map((project) => [project.id, project]));
2440
2481
  const projectByReference = new Map();
2441
2482
  for (const project of allProjects) {
@@ -2494,6 +2535,7 @@ export function organizationPortabilityService(db, storage) {
2494
2535
  }
2495
2536
  selectedProjects.set(match.id, match);
2496
2537
  const projectIssues = await issuesSvc.list(orgId, { projectId: match.id });
2538
+ assertNotAborted();
2497
2539
  for (const issue of projectIssues) {
2498
2540
  selectedIssues.set(issue.id, issue);
2499
2541
  }
@@ -2508,6 +2550,7 @@ export function organizationPortabilityService(db, storage) {
2508
2550
  }
2509
2551
  if (include.issues && selectedIssues.size === 0) {
2510
2552
  const allIssues = await issuesSvc.list(orgId);
2553
+ assertNotAborted();
2511
2554
  for (const issue of allIssues) {
2512
2555
  selectedIssues.set(issue.id, issue);
2513
2556
  if (issue.projectId) {
@@ -2535,6 +2578,8 @@ export function organizationPortabilityService(db, storage) {
2535
2578
  const selectedAutomationSummaries = Array.from(selectedAutomations.values())
2536
2579
  .sort((left, right) => left.title.localeCompare(right.title));
2537
2580
  const selectedAutomationRows = (await Promise.all(selectedAutomationSummaries.map((automation) => automationsSvc.getDetail(automation.id)))).filter((automation) => automation !== null);
2581
+ assertNotAborted();
2582
+ reportProgress("resolving_selection", `Resolved ${selectedAgents.size} agents, ${selectedProjects.size} projects, and ${selectedIssues.size + selectedAutomations.size} tasks.`, 2, Object.keys(files).length);
2538
2583
  const taskSlugByIssueId = new Map();
2539
2584
  const taskSlugByAutomationId = new Map();
2540
2585
  const usedTaskSlugs = new Set();
@@ -2623,13 +2668,19 @@ export function organizationPortabilityService(db, storage) {
2623
2668
  const selectedSkillRows = Array.from(selectedSkills.values())
2624
2669
  .sort((left, right) => left.key.localeCompare(right.key));
2625
2670
  const skillExportDirs = buildSkillExportDirMap(selectedSkillRows, organization.issuePrefix);
2671
+ if (selectedSkillRows.length > 0) {
2672
+ reportProgress("rendering_skills", `Rendering ${selectedSkillRows.length} skill files.`, 3, Object.keys(files).length);
2673
+ }
2626
2674
  for (const skill of selectedSkillRows) {
2675
+ assertNotAborted();
2627
2676
  const packageDir = skillExportDirs.get(skill.key) ?? `skills/${normalizeSkillSlug(skill.slug) ?? "skill"}`;
2628
2677
  if (shouldReferenceSkillOnExport(skill, Boolean(input.expandReferencedSkills))) {
2629
2678
  files[`${packageDir}/SKILL.md`] = await buildReferencedSkillMarkdown(skill);
2679
+ assertNotAborted();
2630
2680
  continue;
2631
2681
  }
2632
2682
  for (const inventoryEntry of skill.fileInventory) {
2683
+ assertNotAborted();
2633
2684
  const fileDetail = await organizationSkills.readFile(orgId, skill.id, inventoryEntry.path).catch(() => null);
2634
2685
  if (!fileDetail)
2635
2686
  continue;
@@ -2640,10 +2691,14 @@ export function organizationPortabilityService(db, storage) {
2640
2691
  }
2641
2692
  }
2642
2693
  if (include.agents) {
2694
+ reportProgress("rendering_agents", `Rendering ${agentRows.length} agent files.`, 4, Object.keys(files).length);
2643
2695
  for (const agent of agentRows) {
2696
+ assertNotAborted();
2644
2697
  const slug = idToSlug.get(agent.id);
2645
2698
  const exportedInstructions = await instructions.exportFiles(agent);
2699
+ assertNotAborted();
2646
2700
  warnings.push(...exportedInstructions.warnings);
2701
+ const portableInstructions = ensurePortableAgentEntryFile(exportedInstructions.files, exportedInstructions.entryFile, asString(agent.agentRuntimeConfig.promptTemplate) ?? "");
2647
2702
  const envInputsStart = envInputs.length;
2648
2703
  const exportedEnvInputs = extractPortableEnvInputs(slug, agent.agentRuntimeConfig.env, warnings);
2649
2704
  envInputs.push(...exportedEnvInputs);
@@ -2662,14 +2717,15 @@ export function organizationPortabilityService(db, storage) {
2662
2717
  .filter((inputValue) => inputValue.agentSlug === slug));
2663
2718
  const reportsToSlug = agent.reportsTo ? (idToSlug.get(agent.reportsTo) ?? null) : null;
2664
2719
  const desiredSkills = await organizationSkills.getEnabledSkillKeysForAgent(agent.orgId, agent);
2720
+ assertNotAborted();
2665
2721
  const commandValue = asString(portableAdapterConfig.command);
2666
2722
  if (commandValue && isAbsoluteCommand(commandValue)) {
2667
2723
  warnings.push(`Agent ${slug} command ${commandValue} was omitted from export because it is system-dependent.`);
2668
2724
  delete portableAdapterConfig.command;
2669
2725
  }
2670
- for (const [relativePath, content] of Object.entries(exportedInstructions.files)) {
2726
+ for (const [relativePath, content] of Object.entries(portableInstructions.files)) {
2671
2727
  const targetPath = `agents/${slug}/${relativePath}`;
2672
- if (relativePath === exportedInstructions.entryFile) {
2728
+ if (relativePath === portableInstructions.entryFile) {
2673
2729
  files[targetPath] = buildMarkdown(stripEmptyValues({
2674
2730
  name: agent.name,
2675
2731
  title: agent.title ?? null,
@@ -2702,7 +2758,11 @@ export function organizationPortabilityService(db, storage) {
2702
2758
  rudderAgentsOut[slug] = isPlainRecord(extension) ? extension : {};
2703
2759
  }
2704
2760
  }
2761
+ if (selectedProjectRows.length > 0) {
2762
+ reportProgress("rendering_projects", `Rendering ${selectedProjectRows.length} project files.`, 5, Object.keys(files).length);
2763
+ }
2705
2764
  for (const project of selectedProjectRows) {
2765
+ assertNotAborted();
2706
2766
  const slug = projectSlugById.get(project.id);
2707
2767
  const projectPath = `projects/${slug}/PROJECT.md`;
2708
2768
  const portableWorkspaces = await buildPortableProjectWorkspaces(slug, project.workspaces, warnings);
@@ -2722,7 +2782,11 @@ export function organizationPortabilityService(db, storage) {
2722
2782
  });
2723
2783
  rudderProjectsOut[slug] = isPlainRecord(extension) ? extension : {};
2724
2784
  }
2785
+ if (selectedIssueRows.length > 0 || selectedAutomationRows.length > 0) {
2786
+ reportProgress("rendering_tasks", `Rendering ${selectedIssueRows.length + selectedAutomationRows.length} task files.`, 6, Object.keys(files).length);
2787
+ }
2725
2788
  for (const issue of selectedIssueRows) {
2789
+ assertNotAborted();
2726
2790
  const taskSlug = taskSlugByIssueId.get(issue.id);
2727
2791
  const projectSlug = issue.projectId ? (projectSlugById.get(issue.projectId) ?? null) : null;
2728
2792
  // All tasks go in top-level tasks/ folder, never nested under projects/
@@ -2770,6 +2834,7 @@ export function organizationPortabilityService(db, storage) {
2770
2834
  warnings.push(`Tasks ${preview}${remainder} reference workspace ${workspaceId}, but that workspace could not be exported portably.`);
2771
2835
  }
2772
2836
  for (const automation of selectedAutomationRows) {
2837
+ assertNotAborted();
2773
2838
  const taskSlug = taskSlugByAutomationId.get(automation.id);
2774
2839
  const projectSlug = projectSlugById.get(automation.projectId) ?? null;
2775
2840
  const taskPath = `tasks/${taskSlug}/TASK.md`;
@@ -2836,14 +2901,20 @@ export function organizationPortabilityService(db, storage) {
2836
2901
  // Generate org chart PNG from manifest agents
2837
2902
  if (resolved.manifest.agents.length > 0) {
2838
2903
  try {
2904
+ assertNotAborted();
2905
+ reportProgress("generating_assets", "Generating organization chart image.", 7, Object.keys(finalFiles).length);
2839
2906
  const orgNodes = buildOrgTreeFromManifest(resolved.manifest.agents);
2840
2907
  const pngBuffer = await renderOrgChartPng(orgNodes);
2908
+ assertNotAborted();
2841
2909
  finalFiles["images/org-chart.png"] = bufferToPortableBinaryFile(pngBuffer, "image/png");
2842
2910
  }
2843
- catch {
2911
+ catch (err) {
2912
+ if (options.signal?.aborted)
2913
+ throw err;
2844
2914
  // Non-fatal: export still works without the org chart image
2845
2915
  }
2846
2916
  }
2917
+ reportProgress("finalizing", "Finalizing export manifest and README.", 7, Object.keys(finalFiles).length);
2847
2918
  if (!input.selectedFiles || input.selectedFiles.some((entry) => normalizePortablePath(entry) === "README.md")) {
2848
2919
  finalFiles["README.md"] = generateReadme(resolved.manifest, {
2849
2920
  organizationName: organization.name,
@@ -2865,6 +2936,8 @@ export function organizationPortabilityService(db, storage) {
2865
2936
  };
2866
2937
  resolved.manifest.envInputs = dedupeEnvInputs(envInputs);
2867
2938
  resolved.warnings.unshift(...warnings);
2939
+ assertNotAborted();
2940
+ reportProgress("ready", "Export package is ready.", 8, Object.keys(finalFiles).length);
2868
2941
  return {
2869
2942
  rootPath,
2870
2943
  manifest: resolved.manifest,