@superblocksteam/vite-plugin-file-sync 2.0.89 → 2.0.90

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 (182) hide show
  1. package/dist/ai-service/agent/prompts/api-prompts.js +1 -1
  2. package/dist/ai-service/agent/prompts/build-base-system-prompt.d.ts +2 -2
  3. package/dist/ai-service/agent/prompts/build-base-system-prompt.d.ts.map +1 -1
  4. package/dist/ai-service/agent/prompts/build-base-system-prompt.js +132 -28
  5. package/dist/ai-service/agent/prompts/build-base-system-prompt.js.map +1 -1
  6. package/dist/ai-service/agent/tool-message-utils.js +1 -1
  7. package/dist/ai-service/agent/tool-message-utils.js.map +1 -1
  8. package/dist/ai-service/agent/tools/apis/test-api.d.ts +44 -0
  9. package/dist/ai-service/agent/tools/apis/test-api.d.ts.map +1 -1
  10. package/dist/ai-service/agent/tools/apis/test-api.js +226 -92
  11. package/dist/ai-service/agent/tools/apis/test-api.js.map +1 -1
  12. package/dist/ai-service/agent/tools/build-capture-screenshot.d.ts +13 -11
  13. package/dist/ai-service/agent/tools/build-capture-screenshot.d.ts.map +1 -1
  14. package/dist/ai-service/agent/tools/build-capture-screenshot.js +33 -3
  15. package/dist/ai-service/agent/tools/build-capture-screenshot.js.map +1 -1
  16. package/dist/ai-service/agent/tools/build-debug.d.ts.map +1 -1
  17. package/dist/ai-service/agent/tools/build-debug.js +8 -3
  18. package/dist/ai-service/agent/tools/build-debug.js.map +1 -1
  19. package/dist/ai-service/agent/tools/build-edit-file.d.ts.map +1 -1
  20. package/dist/ai-service/agent/tools/build-edit-file.js +12 -2
  21. package/dist/ai-service/agent/tools/build-edit-file.js.map +1 -1
  22. package/dist/ai-service/agent/tools/build-list-files.js +1 -1
  23. package/dist/ai-service/agent/tools/build-list-files.js.map +1 -1
  24. package/dist/ai-service/agent/tools/build-multi-edit-file.d.ts.map +1 -1
  25. package/dist/ai-service/agent/tools/build-multi-edit-file.js +6 -1
  26. package/dist/ai-service/agent/tools/build-multi-edit-file.js.map +1 -1
  27. package/dist/ai-service/agent/tools/get-logs.d.ts +1 -1
  28. package/dist/ai-service/agent/tools.d.ts.map +1 -1
  29. package/dist/ai-service/agent/tools.js +5 -1
  30. package/dist/ai-service/agent/tools.js.map +1 -1
  31. package/dist/ai-service/agent/tools2/access-control.d.ts.map +1 -1
  32. package/dist/ai-service/agent/tools2/access-control.js +3 -0
  33. package/dist/ai-service/agent/tools2/access-control.js.map +1 -1
  34. package/dist/ai-service/agent/tools2/tools/exit-plan-mode.d.ts +2 -2
  35. package/dist/ai-service/agent/tools2/tools/exit-plan-mode.js +3 -3
  36. package/dist/ai-service/agent/tools2/tools/exit-plan-mode.js.map +1 -1
  37. package/dist/ai-service/agent/tools2/tools/grep-metadata.d.ts +1 -1
  38. package/dist/ai-service/agent/tools2/tools/grep.d.ts +1 -1
  39. package/dist/ai-service/agent/tools2/tools/index.d.ts +1 -0
  40. package/dist/ai-service/agent/tools2/tools/index.d.ts.map +1 -1
  41. package/dist/ai-service/agent/tools2/tools/index.js +1 -0
  42. package/dist/ai-service/agent/tools2/tools/index.js.map +1 -1
  43. package/dist/ai-service/agent/tools2/tools/remember-facts.d.ts +29 -0
  44. package/dist/ai-service/agent/tools2/tools/remember-facts.d.ts.map +1 -0
  45. package/dist/ai-service/agent/tools2/tools/remember-facts.js +104 -0
  46. package/dist/ai-service/agent/tools2/tools/remember-facts.js.map +1 -0
  47. package/dist/ai-service/agent/tools2/types.d.ts +1 -0
  48. package/dist/ai-service/agent/tools2/types.d.ts.map +1 -1
  49. package/dist/ai-service/agent/tools2/types.js +1 -0
  50. package/dist/ai-service/agent/tools2/types.js.map +1 -1
  51. package/dist/ai-service/agent/utils.d.ts.map +1 -1
  52. package/dist/ai-service/agent/utils.js +77 -0
  53. package/dist/ai-service/agent/utils.js.map +1 -1
  54. package/dist/ai-service/app-interface/filesystem/handlers/skill-handler.d.ts +22 -1
  55. package/dist/ai-service/app-interface/filesystem/handlers/skill-handler.d.ts.map +1 -1
  56. package/dist/ai-service/app-interface/filesystem/handlers/skill-handler.js +121 -11
  57. package/dist/ai-service/app-interface/filesystem/handlers/skill-handler.js.map +1 -1
  58. package/dist/ai-service/app-interface/filesystem/sdk-path-validator.d.ts +1 -1
  59. package/dist/ai-service/app-interface/filesystem/sdk-path-validator.d.ts.map +1 -1
  60. package/dist/ai-service/app-interface/filesystem/sdk-path-validator.js +4 -2
  61. package/dist/ai-service/app-interface/filesystem/sdk-path-validator.js.map +1 -1
  62. package/dist/ai-service/app-interface/filesystem/virtual-file-system.d.ts +2 -0
  63. package/dist/ai-service/app-interface/filesystem/virtual-file-system.d.ts.map +1 -1
  64. package/dist/ai-service/app-interface/filesystem/virtual-file-system.js +28 -3
  65. package/dist/ai-service/app-interface/filesystem/virtual-file-system.js.map +1 -1
  66. package/dist/ai-service/app-interface/shell.d.ts.map +1 -1
  67. package/dist/ai-service/app-interface/shell.js +9 -3
  68. package/dist/ai-service/app-interface/shell.js.map +1 -1
  69. package/dist/ai-service/app-skills/helpers.d.ts +32 -0
  70. package/dist/ai-service/app-skills/helpers.d.ts.map +1 -0
  71. package/dist/ai-service/app-skills/helpers.js +262 -0
  72. package/dist/ai-service/app-skills/helpers.js.map +1 -0
  73. package/dist/ai-service/app-skills/manager.d.ts +60 -0
  74. package/dist/ai-service/app-skills/manager.d.ts.map +1 -0
  75. package/dist/ai-service/app-skills/manager.js +203 -0
  76. package/dist/ai-service/app-skills/manager.js.map +1 -0
  77. package/dist/ai-service/app-skills/parser.d.ts +53 -0
  78. package/dist/ai-service/app-skills/parser.d.ts.map +1 -0
  79. package/dist/ai-service/app-skills/parser.js +82 -0
  80. package/dist/ai-service/app-skills/parser.js.map +1 -0
  81. package/dist/ai-service/attachment-upload.d.ts +24 -0
  82. package/dist/ai-service/attachment-upload.d.ts.map +1 -0
  83. package/dist/ai-service/attachment-upload.js +75 -0
  84. package/dist/ai-service/attachment-upload.js.map +1 -0
  85. package/dist/ai-service/chat/chat-session-store.d.ts +1 -1
  86. package/dist/ai-service/chat/chat-session-store.d.ts.map +1 -1
  87. package/dist/ai-service/chat/chat-session-store.js +82 -0
  88. package/dist/ai-service/chat/chat-session-store.js.map +1 -1
  89. package/dist/ai-service/facts/helpers.d.ts +8 -1
  90. package/dist/ai-service/facts/helpers.d.ts.map +1 -1
  91. package/dist/ai-service/facts/helpers.js +89 -7
  92. package/dist/ai-service/facts/helpers.js.map +1 -1
  93. package/dist/ai-service/facts/knowledge-manager.d.ts +39 -3
  94. package/dist/ai-service/facts/knowledge-manager.d.ts.map +1 -1
  95. package/dist/ai-service/facts/knowledge-manager.js +108 -27
  96. package/dist/ai-service/facts/knowledge-manager.js.map +1 -1
  97. package/dist/ai-service/features.d.ts +5 -0
  98. package/dist/ai-service/features.d.ts.map +1 -1
  99. package/dist/ai-service/features.js +5 -0
  100. package/dist/ai-service/features.js.map +1 -1
  101. package/dist/ai-service/index.d.ts +20 -0
  102. package/dist/ai-service/index.d.ts.map +1 -1
  103. package/dist/ai-service/index.js +38 -1
  104. package/dist/ai-service/index.js.map +1 -1
  105. package/dist/ai-service/integrations/store.d.ts.map +1 -1
  106. package/dist/ai-service/integrations/store.js +3 -1
  107. package/dist/ai-service/integrations/store.js.map +1 -1
  108. package/dist/ai-service/llm/context-v2/context.d.ts +2 -0
  109. package/dist/ai-service/llm/context-v2/context.d.ts.map +1 -1
  110. package/dist/ai-service/llm/context-v2/context.js +65 -0
  111. package/dist/ai-service/llm/context-v2/context.js.map +1 -1
  112. package/dist/ai-service/recording/block-traversal.d.ts +30 -0
  113. package/dist/ai-service/recording/block-traversal.d.ts.map +1 -0
  114. package/dist/ai-service/recording/block-traversal.js +118 -0
  115. package/dist/ai-service/recording/block-traversal.js.map +1 -0
  116. package/dist/ai-service/recording/index.d.ts +1 -0
  117. package/dist/ai-service/recording/index.d.ts.map +1 -1
  118. package/dist/ai-service/recording/index.js +2 -0
  119. package/dist/ai-service/recording/index.js.map +1 -1
  120. package/dist/ai-service/recording/snapshot-manager.d.ts +200 -0
  121. package/dist/ai-service/recording/snapshot-manager.d.ts.map +1 -0
  122. package/dist/ai-service/recording/snapshot-manager.js +708 -0
  123. package/dist/ai-service/recording/snapshot-manager.js.map +1 -0
  124. package/dist/ai-service/recording/storage/session-recording-storage.d.ts +5 -1
  125. package/dist/ai-service/recording/storage/session-recording-storage.d.ts.map +1 -1
  126. package/dist/ai-service/recording/storage/session-recording-storage.js +46 -21
  127. package/dist/ai-service/recording/storage/session-recording-storage.js.map +1 -1
  128. package/dist/ai-service/sdk-api-templates.d.ts +2 -0
  129. package/dist/ai-service/sdk-api-templates.d.ts.map +1 -0
  130. package/dist/ai-service/sdk-api-templates.js +2 -0
  131. package/dist/ai-service/sdk-api-templates.js.map +1 -0
  132. package/dist/ai-service/skills/index.d.ts +3 -1
  133. package/dist/ai-service/skills/index.d.ts.map +1 -1
  134. package/dist/ai-service/skills/index.js +5 -2
  135. package/dist/ai-service/skills/index.js.map +1 -1
  136. package/dist/ai-service/skills/system/superblocks-frontend/skill.generated.d.ts +1 -1
  137. package/dist/ai-service/skills/system/superblocks-frontend/skill.generated.js +4 -4
  138. package/dist/ai-service/state-machine/clark-fsm.d.ts +18 -1
  139. package/dist/ai-service/state-machine/clark-fsm.d.ts.map +1 -1
  140. package/dist/ai-service/state-machine/clark-fsm.js +1 -0
  141. package/dist/ai-service/state-machine/clark-fsm.js.map +1 -1
  142. package/dist/ai-service/state-machine/handlers/agent-planning.d.ts.map +1 -1
  143. package/dist/ai-service/state-machine/handlers/agent-planning.js +93 -11
  144. package/dist/ai-service/state-machine/handlers/agent-planning.js.map +1 -1
  145. package/dist/ai-service/state-machine/handlers/llm-generating.d.ts.map +1 -1
  146. package/dist/ai-service/state-machine/handlers/llm-generating.js +67 -7
  147. package/dist/ai-service/state-machine/handlers/llm-generating.js.map +1 -1
  148. package/dist/ai-service/state-machine/mocks.d.ts.map +1 -1
  149. package/dist/ai-service/state-machine/mocks.js +2 -0
  150. package/dist/ai-service/state-machine/mocks.js.map +1 -1
  151. package/dist/ai-service/types.d.ts +3 -0
  152. package/dist/ai-service/types.d.ts.map +1 -1
  153. package/dist/ai-service/types.js.map +1 -1
  154. package/dist/ai-service/util/mode-message.d.ts.map +1 -1
  155. package/dist/ai-service/util/mode-message.js +3 -0
  156. package/dist/ai-service/util/mode-message.js.map +1 -1
  157. package/dist/ai-service/util/rpc-timeout.d.ts +37 -0
  158. package/dist/ai-service/util/rpc-timeout.d.ts.map +1 -0
  159. package/dist/ai-service/util/rpc-timeout.js +58 -0
  160. package/dist/ai-service/util/rpc-timeout.js.map +1 -0
  161. package/dist/file-sync-vite-plugin.d.ts.map +1 -1
  162. package/dist/file-sync-vite-plugin.js +72 -21
  163. package/dist/file-sync-vite-plugin.js.map +1 -1
  164. package/dist/file-system-helpers.d.ts +9 -0
  165. package/dist/file-system-helpers.d.ts.map +1 -1
  166. package/dist/file-system-helpers.js +21 -0
  167. package/dist/file-system-helpers.js.map +1 -1
  168. package/dist/injected-index.d.ts.map +1 -1
  169. package/dist/injected-index.js +4 -3
  170. package/dist/injected-index.js.map +1 -1
  171. package/dist/plugin-options.d.ts +2 -0
  172. package/dist/plugin-options.d.ts.map +1 -1
  173. package/dist/plugin-options.js.map +1 -1
  174. package/dist/snapshot-routes.d.ts +17 -0
  175. package/dist/snapshot-routes.d.ts.map +1 -0
  176. package/dist/snapshot-routes.js +247 -0
  177. package/dist/snapshot-routes.js.map +1 -0
  178. package/dist/socket-manager.d.ts +1 -0
  179. package/dist/socket-manager.d.ts.map +1 -1
  180. package/dist/socket-manager.js +34 -0
  181. package/dist/socket-manager.js.map +1 -1
  182. package/package.json +9 -5
@@ -0,0 +1,118 @@
1
+ /**
2
+ * Utilities for recursively walking the block tree in an API definition.
3
+ *
4
+ * The block structure supports nesting via loop, tryCatch, conditional,
5
+ * parallel, and stream containers. These helpers factor out that traversal
6
+ * so callers only need to provide a per-step visitor callback.
7
+ */
8
+ /** Built-in integration types that do not reference external integrations. */
9
+ const BUILT_IN_INTEGRATION_TYPES = new Set(["javascript", "python"]);
10
+ /**
11
+ * Recursively walk every step in a block tree, invoking `visitor` for each
12
+ * object that contains a `step` property (i.e. regular blocks and stream
13
+ * triggers).
14
+ *
15
+ * Handles all nested block containers: loop, tryCatch (try/catch/finally),
16
+ * conditional (if/elseIf/else), parallel (static paths + dynamic), and
17
+ * stream (trigger + process).
18
+ */
19
+ export function forEachStep(blocks, visitor) {
20
+ for (const block of blocks) {
21
+ // Direct step
22
+ if (block.step) {
23
+ visitor(block);
24
+ }
25
+ // Loop
26
+ if (block.loop?.blocks) {
27
+ forEachStep(block.loop.blocks, visitor);
28
+ }
29
+ // TryCatch
30
+ if (block.tryCatch) {
31
+ for (const branch of ["try", "catch", "finally"]) {
32
+ if (block.tryCatch[branch]?.blocks) {
33
+ forEachStep(block.tryCatch[branch].blocks, visitor);
34
+ }
35
+ }
36
+ }
37
+ // Conditional
38
+ if (block.conditional) {
39
+ if (block.conditional.if?.blocks) {
40
+ forEachStep(block.conditional.if.blocks, visitor);
41
+ }
42
+ if (Array.isArray(block.conditional.elseIf)) {
43
+ for (const branch of block.conditional.elseIf) {
44
+ if (branch?.blocks) {
45
+ forEachStep(branch.blocks, visitor);
46
+ }
47
+ }
48
+ }
49
+ if (block.conditional.else?.blocks) {
50
+ forEachStep(block.conditional.else.blocks, visitor);
51
+ }
52
+ }
53
+ // Parallel (static paths + dynamic blocks)
54
+ if (block.parallel) {
55
+ if (block.parallel.static?.paths) {
56
+ for (const pathBlocks of Object.values(block.parallel.static.paths)) {
57
+ if (pathBlocks?.blocks) {
58
+ forEachStep(pathBlocks.blocks, visitor);
59
+ }
60
+ }
61
+ }
62
+ if (block.parallel.dynamic?.blocks) {
63
+ forEachStep(block.parallel.dynamic.blocks, visitor);
64
+ }
65
+ }
66
+ // Stream
67
+ if (block.stream) {
68
+ if (block.stream.trigger?.step) {
69
+ visitor(block.stream.trigger);
70
+ }
71
+ if (block.stream.process?.blocks) {
72
+ forEachStep(block.stream.process.blocks, visitor);
73
+ }
74
+ }
75
+ }
76
+ }
77
+ /**
78
+ * Collect all external (non-built-in) integration IDs from an array of
79
+ * blocks.
80
+ */
81
+ export function extractIntegrationIdsFromBlocks(blocks) {
82
+ const ids = new Set();
83
+ forEachStep(blocks, (owner) => {
84
+ const id = owner.step?.integration;
85
+ if (id && !BUILT_IN_INTEGRATION_TYPES.has(id)) {
86
+ ids.add(id);
87
+ }
88
+ });
89
+ return ids;
90
+ }
91
+ /**
92
+ * Replace steps whose integration ID is not in `availableIntegrationIds`
93
+ * with a javascript stub.
94
+ *
95
+ * @returns The set of integration IDs that were sanitized.
96
+ */
97
+ export function sanitizeBlockIntegrations(blocks, availableIntegrationIds) {
98
+ const sanitizedIds = new Set();
99
+ forEachStep(blocks, (owner) => {
100
+ const id = owner.step?.integration;
101
+ if (!id || BUILT_IN_INTEGRATION_TYPES.has(id))
102
+ return;
103
+ if (availableIntegrationIds.has(id))
104
+ return;
105
+ // Remove all existing keys from the step
106
+ for (const key of Object.keys(owner.step)) {
107
+ delete owner.step[key];
108
+ }
109
+ // Replace with a javascript stub
110
+ owner.step.integration = "javascript";
111
+ owner.step.javascript = {
112
+ body: `return null; // This step has been replaced (originally ${id})`,
113
+ };
114
+ sanitizedIds.add(id);
115
+ });
116
+ return sanitizedIds;
117
+ }
118
+ //# sourceMappingURL=block-traversal.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"block-traversal.js","sourceRoot":"","sources":["../../../src/ai-service/recording/block-traversal.ts"],"names":[],"mappings":"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"}
@@ -22,4 +22,5 @@
22
22
  export { RecordingManager, type RecordingManagerConfig, } from "./recording-manager.js";
23
23
  export { createToolRecordingMiddleware } from "./recorders/tool-recorder.js";
24
24
  export { createRecordingFetch } from "./recorders/llm-recorder.js";
25
+ export { SnapshotManager } from "./snapshot-manager.js";
25
26
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/ai-service/recording/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;GAoBG;AAGH,OAAO,EACL,gBAAgB,EAChB,KAAK,sBAAsB,GAC5B,MAAM,wBAAwB,CAAC;AAGhC,OAAO,EAAE,6BAA6B,EAAE,MAAM,8BAA8B,CAAC;AAC7E,OAAO,EAAE,oBAAoB,EAAE,MAAM,6BAA6B,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/ai-service/recording/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;GAoBG;AAGH,OAAO,EACL,gBAAgB,EAChB,KAAK,sBAAsB,GAC5B,MAAM,wBAAwB,CAAC;AAGhC,OAAO,EAAE,6BAA6B,EAAE,MAAM,8BAA8B,CAAC;AAC7E,OAAO,EAAE,oBAAoB,EAAE,MAAM,6BAA6B,CAAC;AAGnE,OAAO,EAAE,eAAe,EAAE,MAAM,uBAAuB,CAAC"}
@@ -24,4 +24,6 @@ export { RecordingManager, } from "./recording-manager.js";
24
24
  // Recorders
25
25
  export { createToolRecordingMiddleware } from "./recorders/tool-recorder.js";
26
26
  export { createRecordingFetch } from "./recorders/llm-recorder.js";
27
+ // Snapshot management
28
+ export { SnapshotManager } from "./snapshot-manager.js";
27
29
  //# sourceMappingURL=index.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/ai-service/recording/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;GAoBG;AAEH,UAAU;AACV,OAAO,EACL,gBAAgB,GAEjB,MAAM,wBAAwB,CAAC;AAEhC,YAAY;AACZ,OAAO,EAAE,6BAA6B,EAAE,MAAM,8BAA8B,CAAC;AAC7E,OAAO,EAAE,oBAAoB,EAAE,MAAM,6BAA6B,CAAC"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/ai-service/recording/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;GAoBG;AAEH,UAAU;AACV,OAAO,EACL,gBAAgB,GAEjB,MAAM,wBAAwB,CAAC;AAEhC,YAAY;AACZ,OAAO,EAAE,6BAA6B,EAAE,MAAM,8BAA8B,CAAC;AAC7E,OAAO,EAAE,oBAAoB,EAAE,MAAM,6BAA6B,CAAC;AAEnE,sBAAsB;AACtB,OAAO,EAAE,eAAe,EAAE,MAAM,uBAAuB,CAAC"}
@@ -0,0 +1,200 @@
1
+ /**
2
+ * Manager for handling uploaded session recording snapshots.
3
+ *
4
+ * This manager handles receiving archives (zip or tar.gz, same format as
5
+ * sb-download), extracting them to a temporary directory, and tracking the
6
+ * current upload state.
7
+ *
8
+ * Directory structure:
9
+ * /tmp/superblocks-replay/{userId}/{uploadId}/
10
+ * ├── main/ <- main archive extraction
11
+ * │ ├── .superblocks/
12
+ * │ │ ├── superblocks.json
13
+ * │ │ └── recordings/
14
+ * │ │ ├── sessions.json
15
+ * │ │ └── {sessionId}/
16
+ * │ │ ├── recording.jsonl
17
+ * │ │ └── snapshot.zip (or snapshot.tar.gz for older snapshots)
18
+ * │ ├── apis/
19
+ * │ ├── pages/
20
+ * │ └── ... (rest of app structure)
21
+ * └── {sessionId}/ <- session snapshot extraction
22
+ * ├── apis/
23
+ * ├── pages/
24
+ * └── ...
25
+ */
26
+ import type { AppSnapshotMeta, SnapshotDetails, SnapshotState } from "@superblocksteam/library-shared/types";
27
+ /** Contents of `.superblocks/snapshot-restore.json`. */
28
+ export interface SnapshotRestoreTracking {
29
+ uploadId: string;
30
+ sourceDir: string;
31
+ restoredAt: string | null;
32
+ }
33
+ /** Report produced by {@link SnapshotManager.sanitizeSourceIntegrations}. */
34
+ export interface SanitizationReport {
35
+ /** Integration IDs that were sanitized (not recognized in the current environment). */
36
+ sanitizedIntegrationIds: string[];
37
+ }
38
+ /**
39
+ * Manager for uploaded session recording snapshots.
40
+ *
41
+ * Tracks the current upload state and handles extraction of uploaded archives
42
+ * to a deterministic temporary directory structure.
43
+ */
44
+ export declare class SnapshotManager {
45
+ private readonly userId;
46
+ private currentUpload;
47
+ private readonly baseDir;
48
+ /**
49
+ * Create a new SnapshotManager.
50
+ *
51
+ * @param userId - Current user ID, used to namespace the temp directory
52
+ */
53
+ constructor(userId: string);
54
+ /**
55
+ * Get the main extraction subdirectory within an upload directory.
56
+ * The main tar is extracted here; session extractions are siblings.
57
+ */
58
+ private mainDir;
59
+ /**
60
+ * Scan the base directory for recent uploads.
61
+ * Returns the most recent upload within MAX_UPLOAD_AGE_MS, or null if none found.
62
+ */
63
+ private findRecentUpload;
64
+ /**
65
+ * Check if there's a currently uploaded snapshot.
66
+ * Checks disk for recent uploads if no in-memory state exists.
67
+ */
68
+ hasUpload(): Promise<boolean>;
69
+ /**
70
+ * Get the current upload state.
71
+ * If no in-memory state exists, checks disk for recent uploads (within 1 hour).
72
+ *
73
+ * @returns The current upload state, or null if no upload exists
74
+ */
75
+ getUpload(): Promise<SnapshotState | null>;
76
+ /**
77
+ * Get detailed information about the uploaded snapshot.
78
+ * Reads superblocks.json for app ID and sessions.json for recording sessions.
79
+ *
80
+ * @returns Snapshot details, or null if no upload exists
81
+ */
82
+ getDetails(): Promise<SnapshotDetails | null>;
83
+ /**
84
+ * Upload and extract an archive (zip or tar.gz).
85
+ *
86
+ * This will clear any previous upload before extracting the new one.
87
+ * The archive should be in the same format as sb-download.
88
+ *
89
+ * @param archiveBuffer - The archive buffer to extract (zip or tar.gz)
90
+ * @returns The new upload state
91
+ */
92
+ upload(archiveBuffer: Buffer): Promise<SnapshotState>;
93
+ /**
94
+ * Clear the current upload and delete extracted files.
95
+ */
96
+ clear(): Promise<void>;
97
+ /**
98
+ * Prepare the source directory for a restore operation.
99
+ *
100
+ * - If no `sessionId` is provided, returns the main upload's extractedDir.
101
+ * - If a `sessionId` is provided, extracts the session's snapshot
102
+ * to a temporary directory and returns that.
103
+ * - Writes the current app's `.superblocks/superblocks.json` from `appRootDir`
104
+ * into the source dir so the restored tree keeps the app's identity/config.
105
+ * - When `sanitizeIntegrations` is true and `availableIntegrationIds` is
106
+ * provided, replaces unrecognised integration steps with javascript stubs.
107
+ *
108
+ * The returned `dispose` function cleans up any temporary directory created
109
+ * for session-based restores. It is a no-op when no temp dir was needed.
110
+ *
111
+ * @param uploadId - The upload ID to restore from (must match current upload)
112
+ * @param sessionId - Optional session ID whose snapshot to extract
113
+ * @param appRootDir - Current app root; its .superblocks/superblocks.json is copied into the source dir
114
+ * @param availableIntegrationIds - Integration IDs available in the current environment
115
+ * @param sanitizeIntegrations - When true, unknown integration steps are replaced with JS stubs
116
+ * @returns The source directory and a dispose callback
117
+ */
118
+ prepareRestoreSource(uploadId: string, sessionId: string | undefined, appRootDir: string, availableIntegrationIds?: Set<string>, sanitizeIntegrations?: boolean): Promise<{
119
+ sourceDir: string;
120
+ dispose: () => Promise<void>;
121
+ }>;
122
+ /**
123
+ * List immediate subdirectory names under `apis/` and `pages/` within a directory.
124
+ */
125
+ private computeSnapshotMeta;
126
+ /**
127
+ * Detect archive format from magic bytes and extract into `destDir`.
128
+ *
129
+ * Accepts either a Buffer (for uploaded archives) or a file path string
130
+ * (for session snapshots on disk). Supports both zip and tar.gz formats.
131
+ */
132
+ private extractArchive;
133
+ /**
134
+ * Get the deterministic extraction directory and snapshot path for a session.
135
+ *
136
+ * The snapshot lives inside the main extraction; the session extraction dir
137
+ * is a sibling of `main/` under the upload root. Prefers `snapshot.zip`,
138
+ * falling back to `snapshot.tar.gz` for older snapshots.
139
+ */
140
+ private getSessionExtractionDir;
141
+ /**
142
+ * Extract a session snapshot to its deterministic directory if not already extracted.
143
+ */
144
+ private ensureSessionExtracted;
145
+ /**
146
+ * Analyze a snapshot (or session snapshot) and return metadata about its contents.
147
+ *
148
+ * - If no `sessionId` is provided, scans the main upload's extracted directory.
149
+ * - If a `sessionId` is provided, extracts the session's snapshot to a
150
+ * deterministic directory (reused by prepareRestoreSource) and scans it.
151
+ *
152
+ * @param uploadId - The upload ID to analyze (must match current upload)
153
+ * @param sessionId - Optional session ID whose snapshot to analyze
154
+ * @returns Metadata about the snapshot contents
155
+ */
156
+ analyze(uploadId: string, sessionId?: string): Promise<AppSnapshotMeta>;
157
+ /**
158
+ * Scan the `apis/` directory within a snapshot source, compare the
159
+ * integration IDs found in each API's blocks against a set of IDs
160
+ * available in the current environment, and replace any unrecognised
161
+ * integration steps with a javascript stub.
162
+ *
163
+ * @param sourceDir - Root of the extracted snapshot (contains `apis/`)
164
+ * @param availableIntegrationIds - IDs present in the current environment
165
+ * @returns A report listing the integration IDs that were sanitized
166
+ */
167
+ sanitizeSourceIntegrations(sourceDir: string, availableIntegrationIds: Set<string>): Promise<SanitizationReport>;
168
+ /**
169
+ * Restore snapshot files into `appRootDir`.
170
+ *
171
+ * Clears everything in `appRootDir` except node_modules, .git, build, then
172
+ * copies the prepared source directory (which already has the correct
173
+ * .superblocks/superblocks.json from prepareRestoreSource) into app root.
174
+ */
175
+ copySnapshotToAppRoot(sourceDir: string, appRootDir: string): Promise<void>;
176
+ /**
177
+ * Write a tracking file that records a pending snapshot restore.
178
+ * On the next dev-server startup, `executePendingRestore` will read it
179
+ * and perform the actual restore.
180
+ */
181
+ createPendingRestore(appRootDir: string, uploadId: string, sourceDir: string): Promise<void>;
182
+ /**
183
+ * Check for a pending snapshot restore and execute it if found.
184
+ *
185
+ * Note: `copySnapshotToAppRoot` clears the app root, so the tracking data
186
+ * is read into memory first and re-written with a `restoredAt` timestamp
187
+ * after the copy.
188
+ *
189
+ * @returns `true` if a restore was performed, `false` otherwise
190
+ */
191
+ executePendingRestore(appRootDir: string): Promise<boolean>;
192
+ }
193
+ /**
194
+ * Error thrown when a restore operation fails due to a user-facing issue
195
+ * (e.g. upload not found, session snapshot missing).
196
+ */
197
+ export declare class SnapshotRestoreError extends Error {
198
+ constructor(message: string);
199
+ }
200
+ //# sourceMappingURL=snapshot-manager.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"snapshot-manager.d.ts","sourceRoot":"","sources":["../../../src/ai-service/recording/snapshot-manager.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;GAwBG;AAeH,OAAO,KAAK,EACV,eAAe,EAEf,eAAe,EACf,aAAa,EACd,MAAM,uCAAuC,CAAC;AAW/C,wDAAwD;AACxD,MAAM,WAAW,uBAAuB;IACtC,QAAQ,EAAE,MAAM,CAAC;IACjB,SAAS,EAAE,MAAM,CAAC;IAClB,UAAU,EAAE,MAAM,GAAG,IAAI,CAAC;CAC3B;AAWD,6EAA6E;AAC7E,MAAM,WAAW,kBAAkB;IACjC,uFAAuF;IACvF,uBAAuB,EAAE,MAAM,EAAE,CAAC;CACnC;AA4FD;;;;;GAKG;AACH,qBAAa,eAAe;IASd,OAAO,CAAC,QAAQ,CAAC,MAAM;IARnC,OAAO,CAAC,aAAa,CAA8B;IACnD,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAS;IAEjC;;;;OAIG;gBAC0B,MAAM,EAAE,MAAM;IAK3C;;;OAGG;IACH,OAAO,CAAC,OAAO;IAIf;;;OAGG;YACW,gBAAgB;IAuC9B;;;OAGG;IACG,SAAS,IAAI,OAAO,CAAC,OAAO,CAAC;IAKnC;;;;;OAKG;IACG,SAAS,IAAI,OAAO,CAAC,aAAa,GAAG,IAAI,CAAC;IAmBhD;;;;;OAKG;IACG,UAAU,IAAI,OAAO,CAAC,eAAe,GAAG,IAAI,CAAC;IAmFnD;;;;;;;;OAQG;IACG,MAAM,CAAC,aAAa,EAAE,MAAM,GAAG,OAAO,CAAC,aAAa,CAAC;IAuD3D;;OAEG;IACG,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC;IAyB5B;;;;;;;;;;;;;;;;;;;;OAoBG;IACG,oBAAoB,CACxB,QAAQ,EAAE,MAAM,EAChB,SAAS,EAAE,MAAM,GAAG,SAAS,EAC7B,UAAU,EAAE,MAAM,EAClB,uBAAuB,CAAC,EAAE,GAAG,CAAC,MAAM,CAAC,EACrC,oBAAoB,CAAC,EAAE,OAAO,GAC7B,OAAO,CAAC;QAAE,SAAS,EAAE,MAAM,CAAC;QAAC,OAAO,EAAE,MAAM,OAAO,CAAC,IAAI,CAAC,CAAA;KAAE,CAAC;IA2E/D;;OAEG;YACW,mBAAmB;IAsBjC;;;;;OAKG;YACW,cAAc;IA2B5B;;;;;;OAMG;YACW,uBAAuB;IA4BrC;;OAEG;YACW,sBAAsB;IAcpC;;;;;;;;;;OAUG;IACG,OAAO,CACX,QAAQ,EAAE,MAAM,EAChB,SAAS,CAAC,EAAE,MAAM,GACjB,OAAO,CAAC,eAAe,CAAC;IA8C3B;;;;;;;;;OASG;IACG,0BAA0B,CAC9B,SAAS,EAAE,MAAM,EACjB,uBAAuB,EAAE,GAAG,CAAC,MAAM,CAAC,GACnC,OAAO,CAAC,kBAAkB,CAAC;IAkD9B;;;;;;OAMG;IACG,qBAAqB,CACzB,SAAS,EAAE,MAAM,EACjB,UAAU,EAAE,MAAM,GACjB,OAAO,CAAC,IAAI,CAAC;IAyBhB;;;;OAIG;IACG,oBAAoB,CACxB,UAAU,EAAE,MAAM,EAClB,QAAQ,EAAE,MAAM,EAChB,SAAS,EAAE,MAAM,GAChB,OAAO,CAAC,IAAI,CAAC;IAmBhB;;;;;;;;OAQG;IACG,qBAAqB,CAAC,UAAU,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC;CAsDlE;AAED;;;GAGG;AACH,qBAAa,oBAAqB,SAAQ,KAAK;gBACjC,OAAO,EAAE,MAAM;CAI5B"}