@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,519 @@
1
+ import crypto from "node:crypto";
2
+ import fs from "node:fs/promises";
3
+ import path from "node:path";
4
+ import { and, desc, eq, inArray, isNotNull, isNull, lte, ne, or, sql } from "drizzle-orm";
5
+ import { heartbeatRuns, workspaceBackups, } from "@rudderhq/db";
6
+ import { WORKSPACE_BACKUP_DEFAULT_INTERVAL_HOURS, WORKSPACE_BACKUP_DEFAULT_RETENTION_DAYS, } from "@rudderhq/shared";
7
+ import { conflict, notFound, unprocessable } from "../errors.js";
8
+ import { ensureOrganizationWorkspaceLayout, resolveDefaultBackupDir, resolveOrganizationWorkspaceRoot, resolveRudderInstanceId, } from "../home-paths.js";
9
+ import { organizationService } from "./orgs.js";
10
+ const ARTIFACT_VERSION = 1;
11
+ const MAX_PREVIEW_BYTES = 200_000;
12
+ const SKIPPED_ENTRY_NAMES = new Set([".DS_Store", ".cache", ".npm", ".nvm", "node_modules"]);
13
+ const ACTIVE_RUN_STATUSES = ["queued", "running"];
14
+ const WORKSPACE_BACKUP_DEFAULT_INTERVAL_MS = WORKSPACE_BACKUP_DEFAULT_INTERVAL_HOURS * 60 * 60 * 1000;
15
+ function timestamp(date = new Date()) {
16
+ const pad = (value) => String(value).padStart(2, "0");
17
+ return `${date.getFullYear()}${pad(date.getMonth() + 1)}${pad(date.getDate())}-${pad(date.getHours())}${pad(date.getMinutes())}${pad(date.getSeconds())}`;
18
+ }
19
+ function addDays(date, days) {
20
+ const normalizedDays = Math.max(1, Math.trunc(days));
21
+ return new Date(date.getTime() + normalizedDays * 24 * 60 * 60 * 1000);
22
+ }
23
+ function sha256Buffer(buffer) {
24
+ return crypto.createHash("sha256").update(buffer).digest("hex");
25
+ }
26
+ function toPortableRelativePath(relativePath) {
27
+ return relativePath.split(path.sep).join("/");
28
+ }
29
+ function normalizeRequestedPath(value) {
30
+ return typeof value === "string" ? value.trim().replace(/^\/+/, "").replace(/\/+$/g, "") : "";
31
+ }
32
+ function assertSafeRelativePath(value) {
33
+ const normalized = normalizeRequestedPath(value);
34
+ if (!normalized)
35
+ return "";
36
+ if (path.isAbsolute(normalized) || normalized.split("/").includes("..")) {
37
+ throw unprocessable("Backup path must stay inside the organization workspace root");
38
+ }
39
+ return normalized;
40
+ }
41
+ function resolveWithinRoot(rootPath, relativePath) {
42
+ const normalized = assertSafeRelativePath(relativePath);
43
+ const resolvedRoot = path.resolve(rootPath);
44
+ const resolvedTarget = normalized ? path.resolve(resolvedRoot, normalized) : resolvedRoot;
45
+ const relative = path.relative(resolvedRoot, resolvedTarget);
46
+ if (relative.startsWith("..") || path.isAbsolute(relative)) {
47
+ throw unprocessable("Backup path must stay inside the organization workspace root");
48
+ }
49
+ return { resolvedRoot, resolvedTarget, normalizedPath: toPortableRelativePath(relative === "" ? "" : relative) };
50
+ }
51
+ function isBinaryBuffer(buffer) {
52
+ for (const byte of buffer) {
53
+ if (byte === 0)
54
+ return true;
55
+ }
56
+ return false;
57
+ }
58
+ function mapBackupRow(row) {
59
+ const expiresAt = row.expiresAt ?? addDays(row.createdAt, WORKSPACE_BACKUP_DEFAULT_RETENTION_DAYS);
60
+ return {
61
+ id: row.id,
62
+ orgId: row.orgId,
63
+ status: row.status,
64
+ triggerSource: row.triggerSource,
65
+ artifactProvider: "local_file",
66
+ artifactRef: row.artifactRef,
67
+ archiveSha256: row.archiveSha256,
68
+ treeSha256: row.treeSha256,
69
+ fileCount: row.fileCount,
70
+ byteSize: row.byteSize,
71
+ compressedSize: row.compressedSize,
72
+ manifest: row.manifest ?? null,
73
+ warnings: Array.isArray(row.warnings) ? row.warnings : [],
74
+ error: row.error,
75
+ startedAt: row.startedAt?.toISOString() ?? null,
76
+ finishedAt: row.finishedAt?.toISOString() ?? null,
77
+ expiresAt: expiresAt.toISOString(),
78
+ restoredFromBackupId: row.restoredFromBackupId,
79
+ createdByUserId: row.createdByUserId,
80
+ createdAt: row.createdAt.toISOString(),
81
+ updatedAt: row.updatedAt.toISOString(),
82
+ };
83
+ }
84
+ function buildTreeHash(entries) {
85
+ const hash = crypto.createHash("sha256");
86
+ for (const entry of [...entries].sort((left, right) => left.path.localeCompare(right.path))) {
87
+ hash.update(entry.path);
88
+ hash.update("\0");
89
+ hash.update(entry.kind);
90
+ hash.update("\0");
91
+ hash.update(String(entry.byteSize));
92
+ hash.update("\0");
93
+ hash.update(entry.sha256 ?? "");
94
+ hash.update("\n");
95
+ }
96
+ return hash.digest("hex");
97
+ }
98
+ function directChildrenFromArtifact(artifact, directoryPath) {
99
+ const normalizedDirectory = assertSafeRelativePath(directoryPath);
100
+ const prefix = normalizedDirectory ? `${normalizedDirectory}/` : "";
101
+ const children = new Map();
102
+ for (const entry of artifact.entries) {
103
+ if (normalizedDirectory && entry.path === normalizedDirectory && entry.kind === "directory")
104
+ continue;
105
+ if (!entry.path.startsWith(prefix))
106
+ continue;
107
+ const remainder = entry.path.slice(prefix.length);
108
+ if (!remainder)
109
+ continue;
110
+ const [name] = remainder.split("/");
111
+ if (!name)
112
+ continue;
113
+ const isNested = remainder.includes("/");
114
+ const childPath = prefix ? `${prefix}${name}` : name;
115
+ const current = children.get(childPath);
116
+ const isDirectory = isNested || entry.kind === "directory";
117
+ if (!current || isDirectory) {
118
+ children.set(childPath, {
119
+ name,
120
+ path: childPath,
121
+ isDirectory,
122
+ });
123
+ }
124
+ }
125
+ return [...children.values()].sort((left, right) => {
126
+ if (left.isDirectory !== right.isDirectory)
127
+ return left.isDirectory ? -1 : 1;
128
+ return left.name.localeCompare(right.name);
129
+ });
130
+ }
131
+ function findArtifactFile(artifact, filePath) {
132
+ const normalized = assertSafeRelativePath(filePath);
133
+ return artifact.entries.find((entry) => entry.path === normalized && entry.kind === "file") ?? null;
134
+ }
135
+ async function fileExists(filePath) {
136
+ try {
137
+ return (await fs.stat(filePath)).isFile();
138
+ }
139
+ catch (error) {
140
+ if (typeof error === "object" && error !== null && "code" in error && error.code === "ENOENT") {
141
+ return false;
142
+ }
143
+ throw error;
144
+ }
145
+ }
146
+ async function walkWorkspace(rootPath, currentPath, warnings) {
147
+ const entries = [];
148
+ const dirents = await fs.readdir(currentPath, { withFileTypes: true });
149
+ for (const dirent of dirents) {
150
+ if (SKIPPED_ENTRY_NAMES.has(dirent.name)) {
151
+ const skippedPath = toPortableRelativePath(path.relative(rootPath, path.join(currentPath, dirent.name)));
152
+ warnings.push(`Skipped ${skippedPath}`);
153
+ continue;
154
+ }
155
+ const absolutePath = path.join(currentPath, dirent.name);
156
+ const relativePath = assertSafeRelativePath(toPortableRelativePath(path.relative(rootPath, absolutePath)));
157
+ const stat = await fs.lstat(absolutePath);
158
+ if (stat.isSymbolicLink()) {
159
+ warnings.push(`Skipped symlink ${relativePath}`);
160
+ continue;
161
+ }
162
+ if (stat.isDirectory()) {
163
+ entries.push({
164
+ path: relativePath,
165
+ kind: "directory",
166
+ byteSize: 0,
167
+ mtimeMs: stat.mtimeMs,
168
+ mode: stat.mode,
169
+ sha256: null,
170
+ });
171
+ entries.push(...await walkWorkspace(rootPath, absolutePath, warnings));
172
+ continue;
173
+ }
174
+ if (stat.isFile()) {
175
+ const data = await fs.readFile(absolutePath);
176
+ entries.push({
177
+ path: relativePath,
178
+ kind: "file",
179
+ byteSize: data.byteLength,
180
+ mtimeMs: stat.mtimeMs,
181
+ mode: stat.mode,
182
+ sha256: sha256Buffer(data),
183
+ dataBase64: data.toString("base64"),
184
+ });
185
+ continue;
186
+ }
187
+ warnings.push(`Skipped unsupported file ${relativePath}`);
188
+ }
189
+ return entries;
190
+ }
191
+ function buildManifest(input) {
192
+ return {
193
+ version: input.artifact.version,
194
+ orgId: input.artifact.orgId,
195
+ instanceId: input.artifact.instanceId,
196
+ rootPath: input.artifact.rootPath,
197
+ createdAt: input.artifact.createdAt,
198
+ entryCount: input.artifact.entries.length,
199
+ fileCount: input.fileCount,
200
+ byteSize: input.byteSize,
201
+ treeSha256: input.treeSha256,
202
+ activeRunCount: input.activeRunCount,
203
+ warnings: input.artifact.warnings,
204
+ };
205
+ }
206
+ export function workspaceBackupService(db) {
207
+ const orgs = organizationService(db);
208
+ async function getBackupRow(orgId, backupId) {
209
+ const [row] = await db
210
+ .select()
211
+ .from(workspaceBackups)
212
+ .where(and(eq(workspaceBackups.orgId, orgId), eq(workspaceBackups.id, backupId)));
213
+ if (!row || row.status === "deleted")
214
+ throw notFound("Workspace backup not found");
215
+ return row;
216
+ }
217
+ async function readArtifact(row) {
218
+ if (!(await fileExists(row.artifactRef))) {
219
+ throw notFound("Workspace backup artifact not found");
220
+ }
221
+ const raw = await fs.readFile(row.artifactRef, "utf8");
222
+ if (row.archiveSha256 && sha256Buffer(raw) !== row.archiveSha256) {
223
+ throw unprocessable("Workspace backup artifact checksum does not match the recorded backup metadata");
224
+ }
225
+ const parsed = JSON.parse(raw);
226
+ if (parsed.version !== ARTIFACT_VERSION || parsed.orgId !== row.orgId || !Array.isArray(parsed.entries)) {
227
+ throw unprocessable("Workspace backup artifact is invalid");
228
+ }
229
+ for (const entry of parsed.entries) {
230
+ assertSafeRelativePath(entry.path);
231
+ }
232
+ return parsed;
233
+ }
234
+ async function countActiveRuns(orgId) {
235
+ const [row] = await db
236
+ .select({ count: sql `count(*)::int` })
237
+ .from(heartbeatRuns)
238
+ .where(and(eq(heartbeatRuns.orgId, orgId), inArray(heartbeatRuns.status, [...ACTIVE_RUN_STATUSES])));
239
+ return row?.count ?? 0;
240
+ }
241
+ const service = {
242
+ async list(orgId) {
243
+ const organization = await orgs.getById(orgId);
244
+ if (!organization)
245
+ throw notFound("Organization not found");
246
+ const rows = await db
247
+ .select()
248
+ .from(workspaceBackups)
249
+ .where(and(eq(workspaceBackups.orgId, orgId), sql `${workspaceBackups.status} <> 'deleted'`))
250
+ .orderBy(desc(workspaceBackups.createdAt));
251
+ return rows.map(mapBackupRow);
252
+ },
253
+ async create(input) {
254
+ const organization = await orgs.getById(input.orgId);
255
+ if (!organization)
256
+ throw notFound("Organization not found");
257
+ const startedAt = new Date();
258
+ const expiresAt = addDays(startedAt, input.retentionDays ?? WORKSPACE_BACKUP_DEFAULT_RETENTION_DAYS);
259
+ const backupId = crypto.randomUUID();
260
+ const triggerSource = input.triggerSource ?? "manual";
261
+ const backupDir = path.resolve(resolveDefaultBackupDir(), "workspaces", input.orgId);
262
+ const artifactRef = path.resolve(backupDir, `workspace-${input.orgId}-${timestamp(startedAt)}-${backupId.slice(0, 8)}.json`);
263
+ await fs.mkdir(backupDir, { recursive: true });
264
+ const [runningRow] = await db
265
+ .insert(workspaceBackups)
266
+ .values({
267
+ id: backupId,
268
+ orgId: input.orgId,
269
+ status: "running",
270
+ triggerSource,
271
+ artifactProvider: "local_file",
272
+ artifactRef,
273
+ startedAt,
274
+ expiresAt,
275
+ createdByUserId: input.createdByUserId ?? null,
276
+ restoredFromBackupId: input.restoredFromBackupId ?? null,
277
+ })
278
+ .returning();
279
+ try {
280
+ const layout = await ensureOrganizationWorkspaceLayout(input.orgId);
281
+ const warnings = [];
282
+ const entries = await walkWorkspace(layout.root, layout.root, warnings);
283
+ const fileCount = entries.filter((entry) => entry.kind === "file").length;
284
+ const byteSize = entries.reduce((total, entry) => total + (entry.kind === "file" ? entry.byteSize : 0), 0);
285
+ const treeSha256 = buildTreeHash(entries);
286
+ const activeRunCount = await countActiveRuns(input.orgId);
287
+ const artifact = {
288
+ version: ARTIFACT_VERSION,
289
+ orgId: input.orgId,
290
+ instanceId: resolveRudderInstanceId(),
291
+ createdAt: startedAt.toISOString(),
292
+ rootPath: layout.root,
293
+ entries: entries.sort((left, right) => left.path.localeCompare(right.path)),
294
+ warnings,
295
+ };
296
+ const manifest = buildManifest({ artifact, fileCount, byteSize, treeSha256, activeRunCount });
297
+ const serialized = JSON.stringify(artifact, null, 2);
298
+ const archiveSha256 = sha256Buffer(serialized);
299
+ const tempArtifactRef = `${artifactRef}.tmp`;
300
+ await fs.writeFile(tempArtifactRef, serialized, { encoding: "utf8", mode: 0o600 });
301
+ await fs.rename(tempArtifactRef, artifactRef);
302
+ const stat = await fs.stat(artifactRef);
303
+ const finishedAt = new Date();
304
+ const [row] = await db
305
+ .update(workspaceBackups)
306
+ .set({
307
+ status: "succeeded",
308
+ archiveSha256,
309
+ treeSha256,
310
+ fileCount,
311
+ byteSize,
312
+ compressedSize: stat.size,
313
+ manifest,
314
+ warnings,
315
+ finishedAt,
316
+ updatedAt: finishedAt,
317
+ })
318
+ .where(eq(workspaceBackups.id, backupId))
319
+ .returning();
320
+ if (!row)
321
+ throw new Error("Workspace backup row was not updated.");
322
+ return mapBackupRow(row);
323
+ }
324
+ catch (error) {
325
+ const finishedAt = new Date();
326
+ const [row] = await db
327
+ .update(workspaceBackups)
328
+ .set({
329
+ status: "failed",
330
+ error: error instanceof Error ? error.message : String(error),
331
+ finishedAt,
332
+ updatedAt: finishedAt,
333
+ })
334
+ .where(eq(workspaceBackups.id, backupId))
335
+ .returning();
336
+ if (row)
337
+ return mapBackupRow(row);
338
+ if (!runningRow)
339
+ throw new Error("Workspace backup row was not created.");
340
+ return mapBackupRow(runningRow);
341
+ }
342
+ },
343
+ async listFiles(orgId, backupId, directoryPath = "") {
344
+ const row = await getBackupRow(orgId, backupId);
345
+ const artifact = await readArtifact(row);
346
+ const normalizedPath = assertSafeRelativePath(directoryPath);
347
+ const entries = directChildrenFromArtifact(artifact, normalizedPath);
348
+ return {
349
+ source: "org_root",
350
+ rootPath: `backup:${backupId}`,
351
+ repoUrl: null,
352
+ directoryPath: normalizedPath,
353
+ rootExists: true,
354
+ entries,
355
+ message: entries.length === 0 ? "This backup folder is empty." : null,
356
+ };
357
+ },
358
+ async readFile(orgId, backupId, filePath) {
359
+ const row = await getBackupRow(orgId, backupId);
360
+ const artifact = await readArtifact(row);
361
+ const normalizedPath = assertSafeRelativePath(filePath);
362
+ const file = findArtifactFile(artifact, normalizedPath);
363
+ if (!file?.dataBase64)
364
+ throw notFound("File not found inside the workspace backup");
365
+ const buffer = Buffer.from(file.dataBase64, "base64");
366
+ if (isBinaryBuffer(buffer)) {
367
+ return {
368
+ source: "org_root",
369
+ rootPath: `backup:${backupId}`,
370
+ repoUrl: null,
371
+ filePath: normalizedPath,
372
+ rootExists: true,
373
+ content: null,
374
+ message: "Binary files are not previewed in workspace backups.",
375
+ truncated: false,
376
+ };
377
+ }
378
+ const truncated = buffer.byteLength > MAX_PREVIEW_BYTES;
379
+ return {
380
+ source: "org_root",
381
+ rootPath: `backup:${backupId}`,
382
+ repoUrl: null,
383
+ filePath: normalizedPath,
384
+ rootExists: true,
385
+ content: buffer.subarray(0, MAX_PREVIEW_BYTES).toString("utf8"),
386
+ message: truncated ? "Preview truncated to the first 200 KB." : null,
387
+ truncated,
388
+ };
389
+ },
390
+ async remove(orgId, backupId) {
391
+ const row = await getBackupRow(orgId, backupId);
392
+ await fs.rm(row.artifactRef, { force: true });
393
+ const updatedAt = new Date();
394
+ const [updated] = await db
395
+ .update(workspaceBackups)
396
+ .set({ status: "deleted", updatedAt })
397
+ .where(eq(workspaceBackups.id, backupId))
398
+ .returning();
399
+ if (!updated)
400
+ throw notFound("Workspace backup not found");
401
+ return mapBackupRow(updated);
402
+ },
403
+ async pruneExpired(now = new Date()) {
404
+ const legacyCutoff = new Date(now.getTime() - WORKSPACE_BACKUP_DEFAULT_RETENTION_DAYS * 24 * 60 * 60 * 1000);
405
+ const rows = await db
406
+ .select()
407
+ .from(workspaceBackups)
408
+ .where(and(ne(workspaceBackups.status, "deleted"), ne(workspaceBackups.status, "running"), or(and(isNotNull(workspaceBackups.expiresAt), lte(workspaceBackups.expiresAt, now)), and(isNull(workspaceBackups.expiresAt), lte(workspaceBackups.createdAt, legacyCutoff)))));
409
+ const deleted = [];
410
+ for (const row of rows) {
411
+ deleted.push(await service.remove(row.orgId, row.id));
412
+ }
413
+ return deleted;
414
+ },
415
+ async runScheduledBackups(input) {
416
+ const now = input?.now ?? new Date();
417
+ const intervalMs = Math.max(60_000, Math.trunc(input?.intervalMs ?? WORKSPACE_BACKUP_DEFAULT_INTERVAL_MS));
418
+ const dueBefore = new Date(now.getTime() - intervalMs);
419
+ const deleted = await service.pruneExpired(now);
420
+ const organizations = (await orgs.list()).filter((organization) => organization.status === "active");
421
+ const created = [];
422
+ const failed = [];
423
+ const errors = [];
424
+ let skipped = 0;
425
+ for (const organization of organizations) {
426
+ try {
427
+ const [latest] = await db
428
+ .select()
429
+ .from(workspaceBackups)
430
+ .where(and(eq(workspaceBackups.orgId, organization.id), ne(workspaceBackups.status, "deleted")))
431
+ .orderBy(desc(workspaceBackups.createdAt))
432
+ .limit(1);
433
+ if (latest?.status === "running" || (latest && latest.createdAt > dueBefore)) {
434
+ skipped += 1;
435
+ continue;
436
+ }
437
+ const backup = await service.create({
438
+ orgId: organization.id,
439
+ triggerSource: "scheduled",
440
+ retentionDays: input?.retentionDays,
441
+ });
442
+ if (backup.status === "failed")
443
+ failed.push(backup);
444
+ else
445
+ created.push(backup);
446
+ }
447
+ catch (error) {
448
+ errors.push({
449
+ orgId: organization.id,
450
+ message: error instanceof Error ? error.message : String(error),
451
+ });
452
+ }
453
+ }
454
+ return { created, failed, deleted, skipped, errors };
455
+ },
456
+ async restore(orgId, backupId, input) {
457
+ const row = await getBackupRow(orgId, backupId);
458
+ const activeRunCount = await countActiveRuns(orgId);
459
+ if (activeRunCount > 0) {
460
+ throw conflict("Workspace restore is blocked while this organization has active runs.", { activeRunCount });
461
+ }
462
+ const artifact = await readArtifact(row);
463
+ const preRestoreBackup = await service.create({
464
+ orgId,
465
+ triggerSource: "pre_restore",
466
+ createdByUserId: input?.createdByUserId ?? null,
467
+ restoredFromBackupId: backupId,
468
+ });
469
+ if (preRestoreBackup.status !== "succeeded") {
470
+ throw conflict("Pre-restore backup failed; workspace was not changed.", { backupId: preRestoreBackup.id });
471
+ }
472
+ const activeRunCountAfterPreRestore = await countActiveRuns(orgId);
473
+ if (activeRunCountAfterPreRestore > 0) {
474
+ throw conflict("Workspace restore is blocked while this organization has active runs.", {
475
+ activeRunCount: activeRunCountAfterPreRestore,
476
+ preRestoreBackupId: preRestoreBackup.id,
477
+ });
478
+ }
479
+ const workspaceRoot = resolveOrganizationWorkspaceRoot(orgId);
480
+ const stagingRoot = path.resolve(resolveDefaultBackupDir(), "workspace-restore-staging", `${orgId}-${backupId}-${Date.now()}`);
481
+ await fs.rm(stagingRoot, { recursive: true, force: true });
482
+ await fs.mkdir(stagingRoot, { recursive: true, mode: 0o700 });
483
+ try {
484
+ const directories = artifact.entries.filter((entry) => entry.kind === "directory");
485
+ const files = artifact.entries.filter((entry) => entry.kind === "file");
486
+ for (const entry of directories) {
487
+ const { resolvedTarget } = resolveWithinRoot(stagingRoot, entry.path);
488
+ await fs.mkdir(resolvedTarget, { recursive: true });
489
+ }
490
+ for (const entry of files) {
491
+ const { resolvedTarget } = resolveWithinRoot(stagingRoot, entry.path);
492
+ await fs.mkdir(path.dirname(resolvedTarget), { recursive: true });
493
+ await fs.writeFile(resolvedTarget, Buffer.from(entry.dataBase64 ?? "", "base64"), { mode: entry.mode ?? 0o600 });
494
+ }
495
+ await fs.rm(workspaceRoot, { recursive: true, force: true });
496
+ await fs.mkdir(path.dirname(workspaceRoot), { recursive: true });
497
+ await fs.rename(stagingRoot, workspaceRoot);
498
+ await ensureOrganizationWorkspaceLayout(orgId);
499
+ }
500
+ finally {
501
+ await fs.rm(stagingRoot, { recursive: true, force: true });
502
+ }
503
+ const updatedAt = new Date();
504
+ const [restoredRow] = await db
505
+ .update(workspaceBackups)
506
+ .set({ status: "restored", updatedAt })
507
+ .where(eq(workspaceBackups.id, backupId))
508
+ .returning();
509
+ if (!restoredRow)
510
+ throw notFound("Workspace backup not found");
511
+ return {
512
+ restoredBackup: mapBackupRow(restoredRow),
513
+ preRestoreBackup,
514
+ };
515
+ },
516
+ };
517
+ return service;
518
+ }
519
+ //# sourceMappingURL=workspace-backups.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"workspace-backups.js","sourceRoot":"","sources":["../../src/services/workspace-backups.ts"],"names":[],"mappings":"AAAA,OAAO,MAAM,MAAM,aAAa,CAAC;AACjC,OAAO,EAAE,MAAM,kBAAkB,CAAC;AAClC,OAAO,IAAI,MAAM,WAAW,CAAC;AAC7B,OAAO,EAAE,GAAG,EAAE,IAAI,EAAE,EAAE,EAAE,OAAO,EAAE,SAAS,EAAE,MAAM,EAAE,GAAG,EAAE,EAAE,EAAE,EAAE,EAAE,GAAG,EAAE,MAAM,aAAa,CAAC;AAC1F,OAAO,EACL,aAAa,EAEb,gBAAgB,GACjB,MAAM,cAAc,CAAC;AACtB,OAAO,EACL,uCAAuC,EACvC,uCAAuC,GAOxC,MAAM,kBAAkB,CAAC;AAC1B,OAAO,EAAE,QAAQ,EAAE,QAAQ,EAAE,aAAa,EAAE,MAAM,cAAc,CAAC;AACjE,OAAO,EACL,iCAAiC,EACjC,uBAAuB,EACvB,gCAAgC,EAChC,uBAAuB,GACxB,MAAM,kBAAkB,CAAC;AAC1B,OAAO,EAAE,mBAAmB,EAAE,MAAM,WAAW,CAAC;AAEhD,MAAM,gBAAgB,GAAG,CAAC,CAAC;AAC3B,MAAM,iBAAiB,GAAG,OAAO,CAAC;AAClC,MAAM,mBAAmB,GAAG,IAAI,GAAG,CAAC,CAAC,WAAW,EAAE,QAAQ,EAAE,MAAM,EAAE,MAAM,EAAE,cAAc,CAAC,CAAC,CAAC;AAC7F,MAAM,mBAAmB,GAAG,CAAC,QAAQ,EAAE,SAAS,CAAU,CAAC;AAC3D,MAAM,oCAAoC,GAAG,uCAAuC,GAAG,EAAE,GAAG,EAAE,GAAG,IAAI,CAAC;AAwBtG,SAAS,SAAS,CAAC,IAAI,GAAG,IAAI,IAAI,EAAE;IAClC,MAAM,GAAG,GAAG,CAAC,KAAa,EAAE,EAAE,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,QAAQ,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC;IAC9D,OAAO,GAAG,IAAI,CAAC,WAAW,EAAE,GAAG,GAAG,CAAC,IAAI,CAAC,QAAQ,EAAE,GAAG,CAAC,CAAC,GAAG,GAAG,CAAC,IAAI,CAAC,OAAO,EAAE,CAAC,IAAI,GAAG,CAAC,IAAI,CAAC,QAAQ,EAAE,CAAC,GAAG,GAAG,CAAC,IAAI,CAAC,UAAU,EAAE,CAAC,GAAG,GAAG,CAAC,IAAI,CAAC,UAAU,EAAE,CAAC,EAAE,CAAC;AAC5J,CAAC;AAED,SAAS,OAAO,CAAC,IAAU,EAAE,IAAY;IACvC,MAAM,cAAc,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC;IACrD,OAAO,IAAI,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,GAAG,cAAc,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,IAAI,CAAC,CAAC;AACzE,CAAC;AAED,SAAS,YAAY,CAAC,MAAuB;IAC3C,OAAO,MAAM,CAAC,UAAU,CAAC,QAAQ,CAAC,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;AAClE,CAAC;AAED,SAAS,sBAAsB,CAAC,YAAoB;IAClD,OAAO,YAAY,CAAC,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;AAChD,CAAC;AAED,SAAS,sBAAsB,CAAC,KAAgC;IAC9D,OAAO,OAAO,KAAK,KAAK,QAAQ,CAAC,CAAC,CAAC,KAAK,CAAC,IAAI,EAAE,CAAC,OAAO,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC,OAAO,CAAC,OAAO,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;AAChG,CAAC;AAED,SAAS,sBAAsB,CAAC,KAAa;IAC3C,MAAM,UAAU,GAAG,sBAAsB,CAAC,KAAK,CAAC,CAAC;IACjD,IAAI,CAAC,UAAU;QAAE,OAAO,EAAE,CAAC;IAC3B,IAAI,IAAI,CAAC,UAAU,CAAC,UAAU,CAAC,IAAI,UAAU,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,QAAQ,CAAC,IAAI,CAAC,EAAE,CAAC;QACxE,MAAM,aAAa,CAAC,8DAA8D,CAAC,CAAC;IACtF,CAAC;IACD,OAAO,UAAU,CAAC;AACpB,CAAC;AAED,SAAS,iBAAiB,CAAC,QAAgB,EAAE,YAAoB;IAC/D,MAAM,UAAU,GAAG,sBAAsB,CAAC,YAAY,CAAC,CAAC;IACxD,MAAM,YAAY,GAAG,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC;IAC5C,MAAM,cAAc,GAAG,UAAU,CAAC,CAAC,CAAC,IAAI,CAAC,OAAO,CAAC,YAAY,EAAE,UAAU,CAAC,CAAC,CAAC,CAAC,YAAY,CAAC;IAC1F,MAAM,QAAQ,GAAG,IAAI,CAAC,QAAQ,CAAC,YAAY,EAAE,cAAc,CAAC,CAAC;IAC7D,IAAI,QAAQ,CAAC,UAAU,CAAC,IAAI,CAAC,IAAI,IAAI,CAAC,UAAU,CAAC,QAAQ,CAAC,EAAE,CAAC;QAC3D,MAAM,aAAa,CAAC,8DAA8D,CAAC,CAAC;IACtF,CAAC;IACD,OAAO,EAAE,YAAY,EAAE,cAAc,EAAE,cAAc,EAAE,sBAAsB,CAAC,QAAQ,KAAK,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,QAAQ,CAAC,EAAE,CAAC;AACnH,CAAC;AAED,SAAS,cAAc,CAAC,MAAc;IACpC,KAAK,MAAM,IAAI,IAAI,MAAM,EAAE,CAAC;QAC1B,IAAI,IAAI,KAAK,CAAC;YAAE,OAAO,IAAI,CAAC;IAC9B,CAAC;IACD,OAAO,KAAK,CAAC;AACf,CAAC;AAED,SAAS,YAAY,CAAC,GAAuB;IAC3C,MAAM,SAAS,GAAG,GAAG,CAAC,SAAS,IAAI,OAAO,CAAC,GAAG,CAAC,SAAS,EAAE,uCAAuC,CAAC,CAAC;IACnG,OAAO;QACL,EAAE,EAAE,GAAG,CAAC,EAAE;QACV,KAAK,EAAE,GAAG,CAAC,KAAK;QAChB,MAAM,EAAE,GAAG,CAAC,MAA0C;QACtD,aAAa,EAAE,GAAG,CAAC,aAA6C;QAChE,gBAAgB,EAAE,YAAY;QAC9B,WAAW,EAAE,GAAG,CAAC,WAAW;QAC5B,aAAa,EAAE,GAAG,CAAC,aAAa;QAChC,UAAU,EAAE,GAAG,CAAC,UAAU;QAC1B,SAAS,EAAE,GAAG,CAAC,SAAS;QACxB,QAAQ,EAAE,GAAG,CAAC,QAAQ;QACtB,cAAc,EAAE,GAAG,CAAC,cAAc;QAClC,QAAQ,EAAE,GAAG,CAAC,QAAQ,IAAI,IAAI;QAC9B,QAAQ,EAAE,KAAK,CAAC,OAAO,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC,CAAC,EAAE;QACzD,KAAK,EAAE,GAAG,CAAC,KAAK;QAChB,SAAS,EAAE,GAAG,CAAC,SAAS,EAAE,WAAW,EAAE,IAAI,IAAI;QAC/C,UAAU,EAAE,GAAG,CAAC,UAAU,EAAE,WAAW,EAAE,IAAI,IAAI;QACjD,SAAS,EAAE,SAAS,CAAC,WAAW,EAAE;QAClC,oBAAoB,EAAE,GAAG,CAAC,oBAAoB;QAC9C,eAAe,EAAE,GAAG,CAAC,eAAe;QACpC,SAAS,EAAE,GAAG,CAAC,SAAS,CAAC,WAAW,EAAE;QACtC,SAAS,EAAE,GAAG,CAAC,SAAS,CAAC,WAAW,EAAE;KACvC,CAAC;AACJ,CAAC;AAED,SAAS,aAAa,CAAC,OAAuC;IAC5D,MAAM,IAAI,GAAG,MAAM,CAAC,UAAU,CAAC,QAAQ,CAAC,CAAC;IACzC,KAAK,MAAM,KAAK,IAAI,CAAC,GAAG,OAAO,CAAC,CAAC,IAAI,CAAC,CAAC,IAAI,EAAE,KAAK,EAAE,EAAE,CAAC,IAAI,CAAC,IAAI,CAAC,aAAa,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,EAAE,CAAC;QAC5F,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;QACxB,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;QAClB,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;QACxB,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;QAClB,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC,CAAC;QACpC,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;QAClB,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,MAAM,IAAI,EAAE,CAAC,CAAC;QAChC,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;IACpB,CAAC;IACD,OAAO,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;AAC5B,CAAC;AAED,SAAS,0BAA0B,CACjC,QAAiC,EACjC,aAAqB;IAErB,MAAM,mBAAmB,GAAG,sBAAsB,CAAC,aAAa,CAAC,CAAC;IAClE,MAAM,MAAM,GAAG,mBAAmB,CAAC,CAAC,CAAC,GAAG,mBAAmB,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC;IACpE,MAAM,QAAQ,GAAG,IAAI,GAAG,EAA0C,CAAC;IAEnE,KAAK,MAAM,KAAK,IAAI,QAAQ,CAAC,OAAO,EAAE,CAAC;QACrC,IAAI,mBAAmB,IAAI,KAAK,CAAC,IAAI,KAAK,mBAAmB,IAAI,KAAK,CAAC,IAAI,KAAK,WAAW;YAAE,SAAS;QACtG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,UAAU,CAAC,MAAM,CAAC;YAAE,SAAS;QAE7C,MAAM,SAAS,GAAG,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC;QAClD,IAAI,CAAC,SAAS;YAAE,SAAS;QACzB,MAAM,CAAC,IAAI,CAAC,GAAG,SAAS,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;QACpC,IAAI,CAAC,IAAI;YAAE,SAAS;QAEpB,MAAM,QAAQ,GAAG,SAAS,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC;QACzC,MAAM,SAAS,GAAG,MAAM,CAAC,CAAC,CAAC,GAAG,MAAM,GAAG,IAAI,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC;QACrD,MAAM,OAAO,GAAG,QAAQ,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC;QACxC,MAAM,WAAW,GAAG,QAAQ,IAAI,KAAK,CAAC,IAAI,KAAK,WAAW,CAAC;QAC3D,IAAI,CAAC,OAAO,IAAI,WAAW,EAAE,CAAC;YAC5B,QAAQ,CAAC,GAAG,CAAC,SAAS,EAAE;gBACtB,IAAI;gBACJ,IAAI,EAAE,SAAS;gBACf,WAAW;aACZ,CAAC,CAAC;QACL,CAAC;IACH,CAAC;IAED,OAAO,CAAC,GAAG,QAAQ,CAAC,MAAM,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC,IAAI,EAAE,KAAK,EAAE,EAAE;QACjD,IAAI,IAAI,CAAC,WAAW,KAAK,KAAK,CAAC,WAAW;YAAE,OAAO,IAAI,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;QAC7E,OAAO,IAAI,CAAC,IAAI,CAAC,aAAa,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;IAC7C,CAAC,CAAC,CAAC;AACL,CAAC;AAED,SAAS,gBAAgB,CAAC,QAAiC,EAAE,QAAgB;IAC3E,MAAM,UAAU,GAAG,sBAAsB,CAAC,QAAQ,CAAC,CAAC;IACpD,OAAO,QAAQ,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,CAAC,IAAI,KAAK,UAAU,IAAI,KAAK,CAAC,IAAI,KAAK,MAAM,CAAC,IAAI,IAAI,CAAC;AACtG,CAAC;AAED,KAAK,UAAU,UAAU,CAAC,QAAgB;IACxC,IAAI,CAAC;QACH,OAAO,CAAC,MAAM,EAAE,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC;IAC5C,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,IAAI,OAAO,KAAK,KAAK,QAAQ,IAAI,KAAK,KAAK,IAAI,IAAI,MAAM,IAAI,KAAK,IAAI,KAAK,CAAC,IAAI,KAAK,QAAQ,EAAE,CAAC;YAC9F,OAAO,KAAK,CAAC;QACf,CAAC;QACD,MAAM,KAAK,CAAC;IACd,CAAC;AACH,CAAC;AAED,KAAK,UAAU,aAAa,CAAC,QAAgB,EAAE,WAAmB,EAAE,QAAkB;IACpF,MAAM,OAAO,GAAmC,EAAE,CAAC;IACnD,MAAM,OAAO,GAAG,MAAM,EAAE,CAAC,OAAO,CAAC,WAAW,EAAE,EAAE,aAAa,EAAE,IAAI,EAAE,CAAC,CAAC;IAEvE,KAAK,MAAM,MAAM,IAAI,OAAO,EAAE,CAAC;QAC7B,IAAI,mBAAmB,CAAC,GAAG,CAAC,MAAM,CAAC,IAAI,CAAC,EAAE,CAAC;YACzC,MAAM,WAAW,GAAG,sBAAsB,CAAC,IAAI,CAAC,QAAQ,CAAC,QAAQ,EAAE,IAAI,CAAC,IAAI,CAAC,WAAW,EAAE,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;YACzG,QAAQ,CAAC,IAAI,CAAC,WAAW,WAAW,EAAE,CAAC,CAAC;YACxC,SAAS;QACX,CAAC;QAED,MAAM,YAAY,GAAG,IAAI,CAAC,IAAI,CAAC,WAAW,EAAE,MAAM,CAAC,IAAI,CAAC,CAAC;QACzD,MAAM,YAAY,GAAG,sBAAsB,CAAC,sBAAsB,CAAC,IAAI,CAAC,QAAQ,CAAC,QAAQ,EAAE,YAAY,CAAC,CAAC,CAAC,CAAC;QAC3G,MAAM,IAAI,GAAG,MAAM,EAAE,CAAC,KAAK,CAAC,YAAY,CAAC,CAAC;QAE1C,IAAI,IAAI,CAAC,cAAc,EAAE,EAAE,CAAC;YAC1B,QAAQ,CAAC,IAAI,CAAC,mBAAmB,YAAY,EAAE,CAAC,CAAC;YACjD,SAAS;QACX,CAAC;QAED,IAAI,IAAI,CAAC,WAAW,EAAE,EAAE,CAAC;YACvB,OAAO,CAAC,IAAI,CAAC;gBACX,IAAI,EAAE,YAAY;gBAClB,IAAI,EAAE,WAAW;gBACjB,QAAQ,EAAE,CAAC;gBACX,OAAO,EAAE,IAAI,CAAC,OAAO;gBACrB,IAAI,EAAE,IAAI,CAAC,IAAI;gBACf,MAAM,EAAE,IAAI;aACb,CAAC,CAAC;YACH,OAAO,CAAC,IAAI,CAAC,GAAG,MAAM,aAAa,CAAC,QAAQ,EAAE,YAAY,EAAE,QAAQ,CAAC,CAAC,CAAC;YACvE,SAAS;QACX,CAAC;QAED,IAAI,IAAI,CAAC,MAAM,EAAE,EAAE,CAAC;YAClB,MAAM,IAAI,GAAG,MAAM,EAAE,CAAC,QAAQ,CAAC,YAAY,CAAC,CAAC;YAC7C,OAAO,CAAC,IAAI,CAAC;gBACX,IAAI,EAAE,YAAY;gBAClB,IAAI,EAAE,MAAM;gBACZ,QAAQ,EAAE,IAAI,CAAC,UAAU;gBACzB,OAAO,EAAE,IAAI,CAAC,OAAO;gBACrB,IAAI,EAAE,IAAI,CAAC,IAAI;gBACf,MAAM,EAAE,YAAY,CAAC,IAAI,CAAC;gBAC1B,UAAU,EAAE,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC;aACpC,CAAC,CAAC;YACH,SAAS;QACX,CAAC;QAED,QAAQ,CAAC,IAAI,CAAC,4BAA4B,YAAY,EAAE,CAAC,CAAC;IAC5D,CAAC;IAED,OAAO,OAAO,CAAC;AACjB,CAAC;AAED,SAAS,aAAa,CAAC,KAMtB;IACC,OAAO;QACL,OAAO,EAAE,KAAK,CAAC,QAAQ,CAAC,OAAO;QAC/B,KAAK,EAAE,KAAK,CAAC,QAAQ,CAAC,KAAK;QAC3B,UAAU,EAAE,KAAK,CAAC,QAAQ,CAAC,UAAU;QACrC,QAAQ,EAAE,KAAK,CAAC,QAAQ,CAAC,QAAQ;QACjC,SAAS,EAAE,KAAK,CAAC,QAAQ,CAAC,SAAS;QACnC,UAAU,EAAE,KAAK,CAAC,QAAQ,CAAC,OAAO,CAAC,MAAM;QACzC,SAAS,EAAE,KAAK,CAAC,SAAS;QAC1B,QAAQ,EAAE,KAAK,CAAC,QAAQ;QACxB,UAAU,EAAE,KAAK,CAAC,UAAU;QAC5B,cAAc,EAAE,KAAK,CAAC,cAAc;QACpC,QAAQ,EAAE,KAAK,CAAC,QAAQ,CAAC,QAAQ;KAClC,CAAC;AACJ,CAAC;AAED,MAAM,UAAU,sBAAsB,CAAC,EAAM;IAC3C,MAAM,IAAI,GAAG,mBAAmB,CAAC,EAAE,CAAC,CAAC;IAErC,KAAK,UAAU,YAAY,CAAC,KAAa,EAAE,QAAgB;QACzD,MAAM,CAAC,GAAG,CAAC,GAAG,MAAM,EAAE;aACnB,MAAM,EAAE;aACR,IAAI,CAAC,gBAAgB,CAAC;aACtB,KAAK,CAAC,GAAG,CAAC,EAAE,CAAC,gBAAgB,CAAC,KAAK,EAAE,KAAK,CAAC,EAAE,EAAE,CAAC,gBAAgB,CAAC,EAAE,EAAE,QAAQ,CAAC,CAAC,CAAC,CAAC;QACpF,IAAI,CAAC,GAAG,IAAI,GAAG,CAAC,MAAM,KAAK,SAAS;YAAE,MAAM,QAAQ,CAAC,4BAA4B,CAAC,CAAC;QACnF,OAAO,GAAG,CAAC;IACb,CAAC;IAED,KAAK,UAAU,YAAY,CAAC,GAAuB;QACjD,IAAI,CAAC,CAAC,MAAM,UAAU,CAAC,GAAG,CAAC,WAAW,CAAC,CAAC,EAAE,CAAC;YACzC,MAAM,QAAQ,CAAC,qCAAqC,CAAC,CAAC;QACxD,CAAC;QACD,MAAM,GAAG,GAAG,MAAM,EAAE,CAAC,QAAQ,CAAC,GAAG,CAAC,WAAW,EAAE,MAAM,CAAC,CAAC;QACvD,IAAI,GAAG,CAAC,aAAa,IAAI,YAAY,CAAC,GAAG,CAAC,KAAK,GAAG,CAAC,aAAa,EAAE,CAAC;YACjE,MAAM,aAAa,CAAC,gFAAgF,CAAC,CAAC;QACxG,CAAC;QACD,MAAM,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,CAA4B,CAAC;QAC1D,IAAI,MAAM,CAAC,OAAO,KAAK,gBAAgB,IAAI,MAAM,CAAC,KAAK,KAAK,GAAG,CAAC,KAAK,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC,OAAO,CAAC,EAAE,CAAC;YACxG,MAAM,aAAa,CAAC,sCAAsC,CAAC,CAAC;QAC9D,CAAC;QACD,KAAK,MAAM,KAAK,IAAI,MAAM,CAAC,OAAO,EAAE,CAAC;YACnC,sBAAsB,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;QACrC,CAAC;QACD,OAAO,MAAM,CAAC;IAChB,CAAC;IAED,KAAK,UAAU,eAAe,CAAC,KAAa;QAC1C,MAAM,CAAC,GAAG,CAAC,GAAG,MAAM,EAAE;aACnB,MAAM,CAAC,EAAE,KAAK,EAAE,GAAG,CAAQ,eAAe,EAAE,CAAC;aAC7C,IAAI,CAAC,aAAa,CAAC;aACnB,KAAK,CAAC,GAAG,CAAC,EAAE,CAAC,aAAa,CAAC,KAAK,EAAE,KAAK,CAAC,EAAE,OAAO,CAAC,aAAa,CAAC,MAAM,EAAE,CAAC,GAAG,mBAAmB,CAAC,CAAC,CAAC,CAAC,CAAC;QACvG,OAAO,GAAG,EAAE,KAAK,IAAI,CAAC,CAAC;IACzB,CAAC;IAED,MAAM,OAAO,GAAG;QACd,KAAK,CAAC,IAAI,CAAC,KAAa;YACtB,MAAM,YAAY,GAAG,MAAM,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC;YAC/C,IAAI,CAAC,YAAY;gBAAE,MAAM,QAAQ,CAAC,wBAAwB,CAAC,CAAC;YAC5D,MAAM,IAAI,GAAG,MAAM,EAAE;iBAClB,MAAM,EAAE;iBACR,IAAI,CAAC,gBAAgB,CAAC;iBACtB,KAAK,CAAC,GAAG,CAAC,EAAE,CAAC,gBAAgB,CAAC,KAAK,EAAE,KAAK,CAAC,EAAE,GAAG,CAAA,GAAG,gBAAgB,CAAC,MAAM,eAAe,CAAC,CAAC;iBAC3F,OAAO,CAAC,IAAI,CAAC,gBAAgB,CAAC,SAAS,CAAC,CAAC,CAAC;YAC7C,OAAO,IAAI,CAAC,GAAG,CAAC,YAAY,CAAC,CAAC;QAChC,CAAC;QAED,KAAK,CAAC,MAAM,CAAC,KAMZ;YACC,MAAM,YAAY,GAAG,MAAM,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;YACrD,IAAI,CAAC,YAAY;gBAAE,MAAM,QAAQ,CAAC,wBAAwB,CAAC,CAAC;YAE5D,MAAM,SAAS,GAAG,IAAI,IAAI,EAAE,CAAC;YAC7B,MAAM,SAAS,GAAG,OAAO,CAAC,SAAS,EAAE,KAAK,CAAC,aAAa,IAAI,uCAAuC,CAAC,CAAC;YACrG,MAAM,QAAQ,GAAG,MAAM,CAAC,UAAU,EAAE,CAAC;YACrC,MAAM,aAAa,GAAG,KAAK,CAAC,aAAa,IAAI,QAAQ,CAAC;YACtD,MAAM,SAAS,GAAG,IAAI,CAAC,OAAO,CAAC,uBAAuB,EAAE,EAAE,YAAY,EAAE,KAAK,CAAC,KAAK,CAAC,CAAC;YACrF,MAAM,WAAW,GAAG,IAAI,CAAC,OAAO,CAAC,SAAS,EAAE,aAAa,KAAK,CAAC,KAAK,IAAI,SAAS,CAAC,SAAS,CAAC,IAAI,QAAQ,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,OAAO,CAAC,CAAC;YAE7H,MAAM,EAAE,CAAC,KAAK,CAAC,SAAS,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;YAC/C,MAAM,CAAC,UAAU,CAAC,GAAG,MAAM,EAAE;iBAC1B,MAAM,CAAC,gBAAgB,CAAC;iBACxB,MAAM,CAAC;gBACN,EAAE,EAAE,QAAQ;gBACZ,KAAK,EAAE,KAAK,CAAC,KAAK;gBAClB,MAAM,EAAE,SAAS;gBACjB,aAAa;gBACb,gBAAgB,EAAE,YAAY;gBAC9B,WAAW;gBACX,SAAS;gBACT,SAAS;gBACT,eAAe,EAAE,KAAK,CAAC,eAAe,IAAI,IAAI;gBAC9C,oBAAoB,EAAE,KAAK,CAAC,oBAAoB,IAAI,IAAI;aACzD,CAAC;iBACD,SAAS,EAAE,CAAC;YAEf,IAAI,CAAC;gBACH,MAAM,MAAM,GAAG,MAAM,iCAAiC,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;gBACpE,MAAM,QAAQ,GAAa,EAAE,CAAC;gBAC9B,MAAM,OAAO,GAAG,MAAM,aAAa,CAAC,MAAM,CAAC,IAAI,EAAE,MAAM,CAAC,IAAI,EAAE,QAAQ,CAAC,CAAC;gBACxE,MAAM,SAAS,GAAG,OAAO,CAAC,MAAM,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,CAAC,IAAI,KAAK,MAAM,CAAC,CAAC,MAAM,CAAC;gBAC1E,MAAM,QAAQ,GAAG,OAAO,CAAC,MAAM,CAAC,CAAC,KAAK,EAAE,KAAK,EAAE,EAAE,CAAC,KAAK,GAAG,CAAC,KAAK,CAAC,IAAI,KAAK,MAAM,CAAC,CAAC,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;gBAC3G,MAAM,UAAU,GAAG,aAAa,CAAC,OAAO,CAAC,CAAC;gBAC1C,MAAM,cAAc,GAAG,MAAM,eAAe,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;gBAC1D,MAAM,QAAQ,GAA4B;oBACxC,OAAO,EAAE,gBAAgB;oBACzB,KAAK,EAAE,KAAK,CAAC,KAAK;oBAClB,UAAU,EAAE,uBAAuB,EAAE;oBACrC,SAAS,EAAE,SAAS,CAAC,WAAW,EAAE;oBAClC,QAAQ,EAAE,MAAM,CAAC,IAAI;oBACrB,OAAO,EAAE,OAAO,CAAC,IAAI,CAAC,CAAC,IAAI,EAAE,KAAK,EAAE,EAAE,CAAC,IAAI,CAAC,IAAI,CAAC,aAAa,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;oBAC3E,QAAQ;iBACT,CAAC;gBACF,MAAM,QAAQ,GAAG,aAAa,CAAC,EAAE,QAAQ,EAAE,SAAS,EAAE,QAAQ,EAAE,UAAU,EAAE,cAAc,EAAE,CAAC,CAAC;gBAC9F,MAAM,UAAU,GAAG,IAAI,CAAC,SAAS,CAAC,QAAQ,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC;gBACrD,MAAM,aAAa,GAAG,YAAY,CAAC,UAAU,CAAC,CAAC;gBAC/C,MAAM,eAAe,GAAG,GAAG,WAAW,MAAM,CAAC;gBAC7C,MAAM,EAAE,CAAC,SAAS,CAAC,eAAe,EAAE,UAAU,EAAE,EAAE,QAAQ,EAAE,MAAM,EAAE,IAAI,EAAE,KAAK,EAAE,CAAC,CAAC;gBACnF,MAAM,EAAE,CAAC,MAAM,CAAC,eAAe,EAAE,WAAW,CAAC,CAAC;gBAC9C,MAAM,IAAI,GAAG,MAAM,EAAE,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC;gBACxC,MAAM,UAAU,GAAG,IAAI,IAAI,EAAE,CAAC;gBAC9B,MAAM,CAAC,GAAG,CAAC,GAAG,MAAM,EAAE;qBACnB,MAAM,CAAC,gBAAgB,CAAC;qBACxB,GAAG,CAAC;oBACH,MAAM,EAAE,WAAW;oBACnB,aAAa;oBACb,UAAU;oBACV,SAAS;oBACT,QAAQ;oBACR,cAAc,EAAE,IAAI,CAAC,IAAI;oBACzB,QAAQ;oBACR,QAAQ;oBACR,UAAU;oBACV,SAAS,EAAE,UAAU;iBACtB,CAAC;qBACD,KAAK,CAAC,EAAE,CAAC,gBAAgB,CAAC,EAAE,EAAE,QAAQ,CAAC,CAAC;qBACxC,SAAS,EAAE,CAAC;gBACf,IAAI,CAAC,GAAG;oBAAE,MAAM,IAAI,KAAK,CAAC,uCAAuC,CAAC,CAAC;gBACnE,OAAO,YAAY,CAAC,GAAG,CAAC,CAAC;YAC3B,CAAC;YAAC,OAAO,KAAK,EAAE,CAAC;gBACf,MAAM,UAAU,GAAG,IAAI,IAAI,EAAE,CAAC;gBAC9B,MAAM,CAAC,GAAG,CAAC,GAAG,MAAM,EAAE;qBACnB,MAAM,CAAC,gBAAgB,CAAC;qBACxB,GAAG,CAAC;oBACH,MAAM,EAAE,QAAQ;oBAChB,KAAK,EAAE,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC;oBAC7D,UAAU;oBACV,SAAS,EAAE,UAAU;iBACtB,CAAC;qBACD,KAAK,CAAC,EAAE,CAAC,gBAAgB,CAAC,EAAE,EAAE,QAAQ,CAAC,CAAC;qBACxC,SAAS,EAAE,CAAC;gBACf,IAAI,GAAG;oBAAE,OAAO,YAAY,CAAC,GAAG,CAAC,CAAC;gBAClC,IAAI,CAAC,UAAU;oBAAE,MAAM,IAAI,KAAK,CAAC,uCAAuC,CAAC,CAAC;gBAC1E,OAAO,YAAY,CAAC,UAAU,CAAC,CAAC;YAClC,CAAC;QACH,CAAC;QAED,KAAK,CAAC,SAAS,CAAC,KAAa,EAAE,QAAgB,EAAE,aAAa,GAAG,EAAE;YACjE,MAAM,GAAG,GAAG,MAAM,YAAY,CAAC,KAAK,EAAE,QAAQ,CAAC,CAAC;YAChD,MAAM,QAAQ,GAAG,MAAM,YAAY,CAAC,GAAG,CAAC,CAAC;YACzC,MAAM,cAAc,GAAG,sBAAsB,CAAC,aAAa,CAAC,CAAC;YAC7D,MAAM,OAAO,GAAG,0BAA0B,CAAC,QAAQ,EAAE,cAAc,CAAC,CAAC;YACrE,OAAO;gBACL,MAAM,EAAE,UAAU;gBAClB,QAAQ,EAAE,UAAU,QAAQ,EAAE;gBAC9B,OAAO,EAAE,IAAI;gBACb,aAAa,EAAE,cAAc;gBAC7B,UAAU,EAAE,IAAI;gBAChB,OAAO;gBACP,OAAO,EAAE,OAAO,CAAC,MAAM,KAAK,CAAC,CAAC,CAAC,CAAC,8BAA8B,CAAC,CAAC,CAAC,IAAI;aACtE,CAAC;QACJ,CAAC;QAED,KAAK,CAAC,QAAQ,CAAC,KAAa,EAAE,QAAgB,EAAE,QAAgB;YAC9D,MAAM,GAAG,GAAG,MAAM,YAAY,CAAC,KAAK,EAAE,QAAQ,CAAC,CAAC;YAChD,MAAM,QAAQ,GAAG,MAAM,YAAY,CAAC,GAAG,CAAC,CAAC;YACzC,MAAM,cAAc,GAAG,sBAAsB,CAAC,QAAQ,CAAC,CAAC;YACxD,MAAM,IAAI,GAAG,gBAAgB,CAAC,QAAQ,EAAE,cAAc,CAAC,CAAC;YACxD,IAAI,CAAC,IAAI,EAAE,UAAU;gBAAE,MAAM,QAAQ,CAAC,4CAA4C,CAAC,CAAC;YACpF,MAAM,MAAM,GAAG,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,UAAU,EAAE,QAAQ,CAAC,CAAC;YACtD,IAAI,cAAc,CAAC,MAAM,CAAC,EAAE,CAAC;gBAC3B,OAAO;oBACL,MAAM,EAAE,UAAU;oBAClB,QAAQ,EAAE,UAAU,QAAQ,EAAE;oBAC9B,OAAO,EAAE,IAAI;oBACb,QAAQ,EAAE,cAAc;oBACxB,UAAU,EAAE,IAAI;oBAChB,OAAO,EAAE,IAAI;oBACb,OAAO,EAAE,sDAAsD;oBAC/D,SAAS,EAAE,KAAK;iBACjB,CAAC;YACJ,CAAC;YACD,MAAM,SAAS,GAAG,MAAM,CAAC,UAAU,GAAG,iBAAiB,CAAC;YACxD,OAAO;gBACL,MAAM,EAAE,UAAU;gBAClB,QAAQ,EAAE,UAAU,QAAQ,EAAE;gBAC9B,OAAO,EAAE,IAAI;gBACb,QAAQ,EAAE,cAAc;gBACxB,UAAU,EAAE,IAAI;gBAChB,OAAO,EAAE,MAAM,CAAC,QAAQ,CAAC,CAAC,EAAE,iBAAiB,CAAC,CAAC,QAAQ,CAAC,MAAM,CAAC;gBAC/D,OAAO,EAAE,SAAS,CAAC,CAAC,CAAC,wCAAwC,CAAC,CAAC,CAAC,IAAI;gBACpE,SAAS;aACV,CAAC;QACJ,CAAC;QAED,KAAK,CAAC,MAAM,CAAC,KAAa,EAAE,QAAgB;YAC1C,MAAM,GAAG,GAAG,MAAM,YAAY,CAAC,KAAK,EAAE,QAAQ,CAAC,CAAC;YAChD,MAAM,EAAE,CAAC,EAAE,CAAC,GAAG,CAAC,WAAW,EAAE,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC,CAAC;YAC9C,MAAM,SAAS,GAAG,IAAI,IAAI,EAAE,CAAC;YAC7B,MAAM,CAAC,OAAO,CAAC,GAAG,MAAM,EAAE;iBACvB,MAAM,CAAC,gBAAgB,CAAC;iBACxB,GAAG,CAAC,EAAE,MAAM,EAAE,SAAS,EAAE,SAAS,EAAE,CAAC;iBACrC,KAAK,CAAC,EAAE,CAAC,gBAAgB,CAAC,EAAE,EAAE,QAAQ,CAAC,CAAC;iBACxC,SAAS,EAAE,CAAC;YACf,IAAI,CAAC,OAAO;gBAAE,MAAM,QAAQ,CAAC,4BAA4B,CAAC,CAAC;YAC3D,OAAO,YAAY,CAAC,OAAO,CAAC,CAAC;QAC/B,CAAC;QAED,KAAK,CAAC,YAAY,CAAC,GAAG,GAAG,IAAI,IAAI,EAAE;YACjC,MAAM,YAAY,GAAG,IAAI,IAAI,CAAC,GAAG,CAAC,OAAO,EAAE,GAAG,uCAAuC,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,IAAI,CAAC,CAAC;YAC7G,MAAM,IAAI,GAAG,MAAM,EAAE;iBAClB,MAAM,EAAE;iBACR,IAAI,CAAC,gBAAgB,CAAC;iBACtB,KAAK,CAAC,GAAG,CACR,EAAE,CAAC,gBAAgB,CAAC,MAAM,EAAE,SAAS,CAAC,EACtC,EAAE,CAAC,gBAAgB,CAAC,MAAM,EAAE,SAAS,CAAC,EACtC,EAAE,CACA,GAAG,CAAC,SAAS,CAAC,gBAAgB,CAAC,SAAS,CAAC,EAAE,GAAG,CAAC,gBAAgB,CAAC,SAAS,EAAE,GAAG,CAAC,CAAC,EAChF,GAAG,CAAC,MAAM,CAAC,gBAAgB,CAAC,SAAS,CAAC,EAAE,GAAG,CAAC,gBAAgB,CAAC,SAAS,EAAE,YAAY,CAAC,CAAC,CACvF,CACF,CAAC,CAAC;YAEL,MAAM,OAAO,GAA6B,EAAE,CAAC;YAC7C,KAAK,MAAM,GAAG,IAAI,IAAI,EAAE,CAAC;gBACvB,OAAO,CAAC,IAAI,CAAC,MAAM,OAAO,CAAC,MAAM,CAAC,GAAG,CAAC,KAAK,EAAE,GAAG,CAAC,EAAE,CAAC,CAAC,CAAC;YACxD,CAAC;YACD,OAAO,OAAO,CAAC;QACjB,CAAC;QAED,KAAK,CAAC,mBAAmB,CAAC,KAIzB;YAOC,MAAM,GAAG,GAAG,KAAK,EAAE,GAAG,IAAI,IAAI,IAAI,EAAE,CAAC;YACrC,MAAM,UAAU,GAAG,IAAI,CAAC,GAAG,CAAC,MAAM,EAAE,IAAI,CAAC,KAAK,CAAC,KAAK,EAAE,UAAU,IAAI,oCAAoC,CAAC,CAAC,CAAC;YAC3G,MAAM,SAAS,GAAG,IAAI,IAAI,CAAC,GAAG,CAAC,OAAO,EAAE,GAAG,UAAU,CAAC,CAAC;YACvD,MAAM,OAAO,GAAG,MAAM,OAAO,CAAC,YAAY,CAAC,GAAG,CAAC,CAAC;YAChD,MAAM,aAAa,GAAG,CAAC,MAAM,IAAI,CAAC,IAAI,EAAE,CAAC,CAAC,MAAM,CAAC,CAAC,YAAY,EAAE,EAAE,CAAC,YAAY,CAAC,MAAM,KAAK,QAAQ,CAAC,CAAC;YACrG,MAAM,OAAO,GAA6B,EAAE,CAAC;YAC7C,MAAM,MAAM,GAA6B,EAAE,CAAC;YAC5C,MAAM,MAAM,GAA8C,EAAE,CAAC;YAC7D,IAAI,OAAO,GAAG,CAAC,CAAC;YAEhB,KAAK,MAAM,YAAY,IAAI,aAAa,EAAE,CAAC;gBACzC,IAAI,CAAC;oBACH,MAAM,CAAC,MAAM,CAAC,GAAG,MAAM,EAAE;yBACtB,MAAM,EAAE;yBACR,IAAI,CAAC,gBAAgB,CAAC;yBACtB,KAAK,CAAC,GAAG,CAAC,EAAE,CAAC,gBAAgB,CAAC,KAAK,EAAE,YAAY,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,gBAAgB,CAAC,MAAM,EAAE,SAAS,CAAC,CAAC,CAAC;yBAC/F,OAAO,CAAC,IAAI,CAAC,gBAAgB,CAAC,SAAS,CAAC,CAAC;yBACzC,KAAK,CAAC,CAAC,CAAC,CAAC;oBAEZ,IAAI,MAAM,EAAE,MAAM,KAAK,SAAS,IAAI,CAAC,MAAM,IAAI,MAAM,CAAC,SAAS,GAAG,SAAS,CAAC,EAAE,CAAC;wBAC7E,OAAO,IAAI,CAAC,CAAC;wBACb,SAAS;oBACX,CAAC;oBAED,MAAM,MAAM,GAAG,MAAM,OAAO,CAAC,MAAM,CAAC;wBAClC,KAAK,EAAE,YAAY,CAAC,EAAE;wBACtB,aAAa,EAAE,WAAW;wBAC1B,aAAa,EAAE,KAAK,EAAE,aAAa;qBACpC,CAAC,CAAC;oBACH,IAAI,MAAM,CAAC,MAAM,KAAK,QAAQ;wBAAE,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;;wBAC/C,OAAO,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;gBAC5B,CAAC;gBAAC,OAAO,KAAK,EAAE,CAAC;oBACf,MAAM,CAAC,IAAI,CAAC;wBACV,KAAK,EAAE,YAAY,CAAC,EAAE;wBACtB,OAAO,EAAE,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC;qBAChE,CAAC,CAAC;gBACL,CAAC;YACH,CAAC;YAED,OAAO,EAAE,OAAO,EAAE,MAAM,EAAE,OAAO,EAAE,OAAO,EAAE,MAAM,EAAE,CAAC;QACvD,CAAC;QAED,KAAK,CAAC,OAAO,CAAC,KAAa,EAAE,QAAgB,EAAE,KAA2C;YACxF,MAAM,GAAG,GAAG,MAAM,YAAY,CAAC,KAAK,EAAE,QAAQ,CAAC,CAAC;YAChD,MAAM,cAAc,GAAG,MAAM,eAAe,CAAC,KAAK,CAAC,CAAC;YACpD,IAAI,cAAc,GAAG,CAAC,EAAE,CAAC;gBACvB,MAAM,QAAQ,CAAC,uEAAuE,EAAE,EAAE,cAAc,EAAE,CAAC,CAAC;YAC9G,CAAC;YAED,MAAM,QAAQ,GAAG,MAAM,YAAY,CAAC,GAAG,CAAC,CAAC;YACzC,MAAM,gBAAgB,GAAG,MAAM,OAAO,CAAC,MAAM,CAAC;gBAC5C,KAAK;gBACL,aAAa,EAAE,aAAa;gBAC5B,eAAe,EAAE,KAAK,EAAE,eAAe,IAAI,IAAI;gBAC/C,oBAAoB,EAAE,QAAQ;aAC/B,CAAC,CAAC;YACH,IAAI,gBAAgB,CAAC,MAAM,KAAK,WAAW,EAAE,CAAC;gBAC5C,MAAM,QAAQ,CAAC,uDAAuD,EAAE,EAAE,QAAQ,EAAE,gBAAgB,CAAC,EAAE,EAAE,CAAC,CAAC;YAC7G,CAAC;YACD,MAAM,6BAA6B,GAAG,MAAM,eAAe,CAAC,KAAK,CAAC,CAAC;YACnE,IAAI,6BAA6B,GAAG,CAAC,EAAE,CAAC;gBACtC,MAAM,QAAQ,CAAC,uEAAuE,EAAE;oBACtF,cAAc,EAAE,6BAA6B;oBAC7C,kBAAkB,EAAE,gBAAgB,CAAC,EAAE;iBACxC,CAAC,CAAC;YACL,CAAC;YAED,MAAM,aAAa,GAAG,gCAAgC,CAAC,KAAK,CAAC,CAAC;YAC9D,MAAM,WAAW,GAAG,IAAI,CAAC,OAAO,CAAC,uBAAuB,EAAE,EAAE,2BAA2B,EAAE,GAAG,KAAK,IAAI,QAAQ,IAAI,IAAI,CAAC,GAAG,EAAE,EAAE,CAAC,CAAC;YAC/H,MAAM,EAAE,CAAC,EAAE,CAAC,WAAW,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC,CAAC;YAC3D,MAAM,EAAE,CAAC,KAAK,CAAC,WAAW,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,IAAI,EAAE,KAAK,EAAE,CAAC,CAAC;YAE9D,IAAI,CAAC;gBACH,MAAM,WAAW,GAAG,QAAQ,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,CAAC,IAAI,KAAK,WAAW,CAAC,CAAC;gBACnF,MAAM,KAAK,GAAG,QAAQ,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,CAAC,IAAI,KAAK,MAAM,CAAC,CAAC;gBACxE,KAAK,MAAM,KAAK,IAAI,WAAW,EAAE,CAAC;oBAChC,MAAM,EAAE,cAAc,EAAE,GAAG,iBAAiB,CAAC,WAAW,EAAE,KAAK,CAAC,IAAI,CAAC,CAAC;oBACtE,MAAM,EAAE,CAAC,KAAK,CAAC,cAAc,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;gBACtD,CAAC;gBACD,KAAK,MAAM,KAAK,IAAI,KAAK,EAAE,CAAC;oBAC1B,MAAM,EAAE,cAAc,EAAE,GAAG,iBAAiB,CAAC,WAAW,EAAE,KAAK,CAAC,IAAI,CAAC,CAAC;oBACtE,MAAM,EAAE,CAAC,KAAK,CAAC,IAAI,CAAC,OAAO,CAAC,cAAc,CAAC,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;oBAClE,MAAM,EAAE,CAAC,SAAS,CAAC,cAAc,EAAE,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,UAAU,IAAI,EAAE,EAAE,QAAQ,CAAC,EAAE,EAAE,IAAI,EAAE,KAAK,CAAC,IAAI,IAAI,KAAK,EAAE,CAAC,CAAC;gBACnH,CAAC;gBAED,MAAM,EAAE,CAAC,EAAE,CAAC,aAAa,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC,CAAC;gBAC7D,MAAM,EAAE,CAAC,KAAK,CAAC,IAAI,CAAC,OAAO,CAAC,aAAa,CAAC,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;gBACjE,MAAM,EAAE,CAAC,MAAM,CAAC,WAAW,EAAE,aAAa,CAAC,CAAC;gBAC5C,MAAM,iCAAiC,CAAC,KAAK,CAAC,CAAC;YACjD,CAAC;oBAAS,CAAC;gBACT,MAAM,EAAE,CAAC,EAAE,CAAC,WAAW,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC,CAAC;YAC7D,CAAC;YAED,MAAM,SAAS,GAAG,IAAI,IAAI,EAAE,CAAC;YAC7B,MAAM,CAAC,WAAW,CAAC,GAAG,MAAM,EAAE;iBAC3B,MAAM,CAAC,gBAAgB,CAAC;iBACxB,GAAG,CAAC,EAAE,MAAM,EAAE,UAAU,EAAE,SAAS,EAAE,CAAC;iBACtC,KAAK,CAAC,EAAE,CAAC,gBAAgB,CAAC,EAAE,EAAE,QAAQ,CAAC,CAAC;iBACxC,SAAS,EAAE,CAAC;YACf,IAAI,CAAC,WAAW;gBAAE,MAAM,QAAQ,CAAC,4BAA4B,CAAC,CAAC;YAE/D,OAAO;gBACL,cAAc,EAAE,YAAY,CAAC,WAAW,CAAC;gBACzC,gBAAgB;aACjB,CAAC;QACJ,CAAC;KACF,CAAC;IAEF,OAAO,OAAO,CAAC;AACjB,CAAC"}
@@ -126,13 +126,13 @@ export declare function listWorkspaceRuntimeServicesForProjectWorkspaces(db: Db,
126
126
  executionWorkspaceId: string | null;
127
127
  startedAt: Date;
128
128
  createdAt: Date;
129
+ ownerAgentId: string | null;
129
130
  scopeType: string;
130
131
  scopeId: string | null;
131
132
  provider: string;
132
133
  cwd: string | null;
133
- healthStatus: string;
134
- ownerAgentId: string | null;
135
134
  issueId: string | null;
135
+ healthStatus: string;
136
136
  command: string | null;
137
137
  port: number | null;
138
138
  lastUsedAt: Date;
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@rudderhq/server",
3
- "version": "0.1.0-canary.9",
3
+ "version": "0.1.0",
4
4
  "license": "SEE LICENSE IN LICENSE",
5
5
  "homepage": "https://github.com/Undertone0809/rudder",
6
6
  "bugs": {
@@ -36,7 +36,7 @@
36
36
  "dev": "tsx src/index.ts",
37
37
  "dev:watch": "cross-env RUDDER_MIGRATION_PROMPT=never RUDDER_MIGRATION_AUTO_APPLY=true tsx watch --ignore ../ui/node_modules --ignore ../ui/.vite --ignore ../ui/dist src/index.ts",
38
38
  "prepare:ui-dist": "bash ../scripts/prepare-server-ui-dist.sh",
39
- "build": "node ../scripts/build-tsc-copy-assets.mjs --copy src/onboarding-assets dist/onboarding-assets",
39
+ "build": "pnpm --filter @rudderhq/plugin-sdk build && pnpm --filter @rudderhq/plugin-linear build && node ../scripts/build-tsc-copy-assets.mjs --copy src/onboarding-assets dist/onboarding-assets && node ../scripts/stage-bundled-plugins.mjs",
40
40
  "prepack": "pnpm run prepare:ui-dist",
41
41
  "postpack": "rm -rf ui-dist",
42
42
  "clean": "rm -rf dist",
@@ -49,18 +49,18 @@
49
49
  "@langfuse/otel": "^5.1.0",
50
50
  "@langfuse/tracing": "^5.1.0",
51
51
  "@opentelemetry/sdk-trace-node": "^2.1.0",
52
- "@rudderhq/agent-runtime-claude-local": "0.1.0-canary.9",
53
- "@rudderhq/agent-runtime-codex-local": "0.1.0-canary.9",
54
- "@rudderhq/agent-runtime-cursor-local": "0.1.0-canary.9",
55
- "@rudderhq/agent-runtime-gemini-local": "0.1.0-canary.9",
56
- "@rudderhq/agent-runtime-openclaw-gateway": "0.1.0-canary.9",
57
- "@rudderhq/agent-runtime-opencode-local": "0.1.0-canary.9",
58
- "@rudderhq/agent-runtime-pi-local": "0.1.0-canary.9",
59
- "@rudderhq/agent-runtime-utils": "0.1.0-canary.9",
60
- "@rudderhq/db": "0.1.0-canary.9",
61
- "@rudderhq/plugin-sdk": "0.1.0-canary.9",
62
- "@rudderhq/run-intelligence-core": "0.1.0-canary.9",
63
- "@rudderhq/shared": "0.1.0-canary.9",
52
+ "@rudderhq/agent-runtime-claude-local": "0.1.0",
53
+ "@rudderhq/agent-runtime-codex-local": "0.1.0",
54
+ "@rudderhq/agent-runtime-cursor-local": "0.1.0",
55
+ "@rudderhq/agent-runtime-gemini-local": "0.1.0",
56
+ "@rudderhq/agent-runtime-openclaw-gateway": "0.1.0",
57
+ "@rudderhq/agent-runtime-opencode-local": "0.1.0",
58
+ "@rudderhq/agent-runtime-pi-local": "0.1.0",
59
+ "@rudderhq/agent-runtime-utils": "0.1.0",
60
+ "@rudderhq/db": "0.1.0",
61
+ "@rudderhq/plugin-sdk": "0.1.0",
62
+ "@rudderhq/run-intelligence-core": "0.1.0",
63
+ "@rudderhq/shared": "0.1.0",
64
64
  "ajv": "^8.18.0",
65
65
  "ajv-formats": "^3.0.1",
66
66
  "better-auth": "1.4.18",
@@ -71,12 +71,13 @@ Raw timeline of events -- the "when" layer.
71
71
  - Write continuously during conversations.
72
72
  - Extract durable facts to Layer 1 during heartbeats.
73
73
 
74
- ### Layer 3: Tacit Knowledge (`$AGENT_HOME/MEMORY.md`)
74
+ ### Layer 3: Tacit Knowledge (`$AGENT_HOME/instructions/MEMORY.md`)
75
75
 
76
76
  How the user operates -- patterns, preferences, lessons learned.
77
77
 
78
78
  - Not facts about the world; facts about the user.
79
79
  - Update whenever you learn new operating patterns.
80
+ - This file is part of the instruction bundle and is automatically loaded at runtime when present.
80
81
 
81
82
  ## Write It Down -- No Mental Notes
82
83
 
@@ -84,6 +85,7 @@ Memory does not survive session restarts. Files do.
84
85
 
85
86
  - Want to remember something -> WRITE IT TO A FILE.
86
87
  - "Remember this" -> update `$AGENT_HOME/memory/YYYY-MM-DD.md` or the relevant entity file.
88
+ - Stable user preferences or operating lessons -> update `$AGENT_HOME/instructions/MEMORY.md`.
87
89
  - Learn a lesson -> update AGENTS.md, TOOLS.md, or the relevant skill file.
88
90
  - Make a mistake -> document it so future-you does not repeat it.
89
91
  - On-disk text files are always better than holding it in temporary context.