@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.
- package/dist/ai-service/agent/prompts/api-prompts.js +1 -1
- package/dist/ai-service/agent/prompts/build-base-system-prompt.d.ts +2 -2
- package/dist/ai-service/agent/prompts/build-base-system-prompt.d.ts.map +1 -1
- package/dist/ai-service/agent/prompts/build-base-system-prompt.js +132 -28
- package/dist/ai-service/agent/prompts/build-base-system-prompt.js.map +1 -1
- package/dist/ai-service/agent/tool-message-utils.js +1 -1
- package/dist/ai-service/agent/tool-message-utils.js.map +1 -1
- package/dist/ai-service/agent/tools/apis/test-api.d.ts +44 -0
- package/dist/ai-service/agent/tools/apis/test-api.d.ts.map +1 -1
- package/dist/ai-service/agent/tools/apis/test-api.js +226 -92
- package/dist/ai-service/agent/tools/apis/test-api.js.map +1 -1
- package/dist/ai-service/agent/tools/build-capture-screenshot.d.ts +13 -11
- package/dist/ai-service/agent/tools/build-capture-screenshot.d.ts.map +1 -1
- package/dist/ai-service/agent/tools/build-capture-screenshot.js +33 -3
- package/dist/ai-service/agent/tools/build-capture-screenshot.js.map +1 -1
- package/dist/ai-service/agent/tools/build-debug.d.ts.map +1 -1
- package/dist/ai-service/agent/tools/build-debug.js +8 -3
- package/dist/ai-service/agent/tools/build-debug.js.map +1 -1
- package/dist/ai-service/agent/tools/build-edit-file.d.ts.map +1 -1
- package/dist/ai-service/agent/tools/build-edit-file.js +12 -2
- package/dist/ai-service/agent/tools/build-edit-file.js.map +1 -1
- package/dist/ai-service/agent/tools/build-list-files.js +1 -1
- package/dist/ai-service/agent/tools/build-list-files.js.map +1 -1
- package/dist/ai-service/agent/tools/build-multi-edit-file.d.ts.map +1 -1
- package/dist/ai-service/agent/tools/build-multi-edit-file.js +6 -1
- package/dist/ai-service/agent/tools/build-multi-edit-file.js.map +1 -1
- package/dist/ai-service/agent/tools/get-logs.d.ts +1 -1
- package/dist/ai-service/agent/tools.d.ts.map +1 -1
- package/dist/ai-service/agent/tools.js +5 -1
- package/dist/ai-service/agent/tools.js.map +1 -1
- package/dist/ai-service/agent/tools2/access-control.d.ts.map +1 -1
- package/dist/ai-service/agent/tools2/access-control.js +3 -0
- package/dist/ai-service/agent/tools2/access-control.js.map +1 -1
- package/dist/ai-service/agent/tools2/tools/exit-plan-mode.d.ts +2 -2
- package/dist/ai-service/agent/tools2/tools/exit-plan-mode.js +3 -3
- package/dist/ai-service/agent/tools2/tools/exit-plan-mode.js.map +1 -1
- package/dist/ai-service/agent/tools2/tools/grep-metadata.d.ts +1 -1
- package/dist/ai-service/agent/tools2/tools/grep.d.ts +1 -1
- package/dist/ai-service/agent/tools2/tools/index.d.ts +1 -0
- package/dist/ai-service/agent/tools2/tools/index.d.ts.map +1 -1
- package/dist/ai-service/agent/tools2/tools/index.js +1 -0
- package/dist/ai-service/agent/tools2/tools/index.js.map +1 -1
- package/dist/ai-service/agent/tools2/tools/remember-facts.d.ts +29 -0
- package/dist/ai-service/agent/tools2/tools/remember-facts.d.ts.map +1 -0
- package/dist/ai-service/agent/tools2/tools/remember-facts.js +104 -0
- package/dist/ai-service/agent/tools2/tools/remember-facts.js.map +1 -0
- package/dist/ai-service/agent/tools2/types.d.ts +1 -0
- package/dist/ai-service/agent/tools2/types.d.ts.map +1 -1
- package/dist/ai-service/agent/tools2/types.js +1 -0
- package/dist/ai-service/agent/tools2/types.js.map +1 -1
- package/dist/ai-service/agent/utils.d.ts.map +1 -1
- package/dist/ai-service/agent/utils.js +77 -0
- package/dist/ai-service/agent/utils.js.map +1 -1
- package/dist/ai-service/app-interface/filesystem/handlers/skill-handler.d.ts +22 -1
- package/dist/ai-service/app-interface/filesystem/handlers/skill-handler.d.ts.map +1 -1
- package/dist/ai-service/app-interface/filesystem/handlers/skill-handler.js +121 -11
- package/dist/ai-service/app-interface/filesystem/handlers/skill-handler.js.map +1 -1
- package/dist/ai-service/app-interface/filesystem/sdk-path-validator.d.ts +1 -1
- package/dist/ai-service/app-interface/filesystem/sdk-path-validator.d.ts.map +1 -1
- package/dist/ai-service/app-interface/filesystem/sdk-path-validator.js +4 -2
- package/dist/ai-service/app-interface/filesystem/sdk-path-validator.js.map +1 -1
- package/dist/ai-service/app-interface/filesystem/virtual-file-system.d.ts +2 -0
- package/dist/ai-service/app-interface/filesystem/virtual-file-system.d.ts.map +1 -1
- package/dist/ai-service/app-interface/filesystem/virtual-file-system.js +28 -3
- package/dist/ai-service/app-interface/filesystem/virtual-file-system.js.map +1 -1
- package/dist/ai-service/app-interface/shell.d.ts.map +1 -1
- package/dist/ai-service/app-interface/shell.js +9 -3
- package/dist/ai-service/app-interface/shell.js.map +1 -1
- package/dist/ai-service/app-skills/helpers.d.ts +32 -0
- package/dist/ai-service/app-skills/helpers.d.ts.map +1 -0
- package/dist/ai-service/app-skills/helpers.js +262 -0
- package/dist/ai-service/app-skills/helpers.js.map +1 -0
- package/dist/ai-service/app-skills/manager.d.ts +60 -0
- package/dist/ai-service/app-skills/manager.d.ts.map +1 -0
- package/dist/ai-service/app-skills/manager.js +203 -0
- package/dist/ai-service/app-skills/manager.js.map +1 -0
- package/dist/ai-service/app-skills/parser.d.ts +53 -0
- package/dist/ai-service/app-skills/parser.d.ts.map +1 -0
- package/dist/ai-service/app-skills/parser.js +82 -0
- package/dist/ai-service/app-skills/parser.js.map +1 -0
- package/dist/ai-service/attachment-upload.d.ts +24 -0
- package/dist/ai-service/attachment-upload.d.ts.map +1 -0
- package/dist/ai-service/attachment-upload.js +75 -0
- package/dist/ai-service/attachment-upload.js.map +1 -0
- package/dist/ai-service/chat/chat-session-store.d.ts +1 -1
- package/dist/ai-service/chat/chat-session-store.d.ts.map +1 -1
- package/dist/ai-service/chat/chat-session-store.js +82 -0
- package/dist/ai-service/chat/chat-session-store.js.map +1 -1
- package/dist/ai-service/facts/helpers.d.ts +8 -1
- package/dist/ai-service/facts/helpers.d.ts.map +1 -1
- package/dist/ai-service/facts/helpers.js +89 -7
- package/dist/ai-service/facts/helpers.js.map +1 -1
- package/dist/ai-service/facts/knowledge-manager.d.ts +39 -3
- package/dist/ai-service/facts/knowledge-manager.d.ts.map +1 -1
- package/dist/ai-service/facts/knowledge-manager.js +108 -27
- package/dist/ai-service/facts/knowledge-manager.js.map +1 -1
- package/dist/ai-service/features.d.ts +5 -0
- package/dist/ai-service/features.d.ts.map +1 -1
- package/dist/ai-service/features.js +5 -0
- package/dist/ai-service/features.js.map +1 -1
- package/dist/ai-service/index.d.ts +20 -0
- package/dist/ai-service/index.d.ts.map +1 -1
- package/dist/ai-service/index.js +38 -1
- package/dist/ai-service/index.js.map +1 -1
- package/dist/ai-service/integrations/store.d.ts.map +1 -1
- package/dist/ai-service/integrations/store.js +3 -1
- package/dist/ai-service/integrations/store.js.map +1 -1
- package/dist/ai-service/llm/context-v2/context.d.ts +2 -0
- package/dist/ai-service/llm/context-v2/context.d.ts.map +1 -1
- package/dist/ai-service/llm/context-v2/context.js +65 -0
- package/dist/ai-service/llm/context-v2/context.js.map +1 -1
- package/dist/ai-service/recording/block-traversal.d.ts +30 -0
- package/dist/ai-service/recording/block-traversal.d.ts.map +1 -0
- package/dist/ai-service/recording/block-traversal.js +118 -0
- package/dist/ai-service/recording/block-traversal.js.map +1 -0
- package/dist/ai-service/recording/index.d.ts +1 -0
- package/dist/ai-service/recording/index.d.ts.map +1 -1
- package/dist/ai-service/recording/index.js +2 -0
- package/dist/ai-service/recording/index.js.map +1 -1
- package/dist/ai-service/recording/snapshot-manager.d.ts +200 -0
- package/dist/ai-service/recording/snapshot-manager.d.ts.map +1 -0
- package/dist/ai-service/recording/snapshot-manager.js +708 -0
- package/dist/ai-service/recording/snapshot-manager.js.map +1 -0
- package/dist/ai-service/recording/storage/session-recording-storage.d.ts +5 -1
- package/dist/ai-service/recording/storage/session-recording-storage.d.ts.map +1 -1
- package/dist/ai-service/recording/storage/session-recording-storage.js +46 -21
- package/dist/ai-service/recording/storage/session-recording-storage.js.map +1 -1
- package/dist/ai-service/sdk-api-templates.d.ts +2 -0
- package/dist/ai-service/sdk-api-templates.d.ts.map +1 -0
- package/dist/ai-service/sdk-api-templates.js +2 -0
- package/dist/ai-service/sdk-api-templates.js.map +1 -0
- package/dist/ai-service/skills/index.d.ts +3 -1
- package/dist/ai-service/skills/index.d.ts.map +1 -1
- package/dist/ai-service/skills/index.js +5 -2
- package/dist/ai-service/skills/index.js.map +1 -1
- package/dist/ai-service/skills/system/superblocks-frontend/skill.generated.d.ts +1 -1
- package/dist/ai-service/skills/system/superblocks-frontend/skill.generated.js +4 -4
- package/dist/ai-service/state-machine/clark-fsm.d.ts +18 -1
- package/dist/ai-service/state-machine/clark-fsm.d.ts.map +1 -1
- package/dist/ai-service/state-machine/clark-fsm.js +1 -0
- package/dist/ai-service/state-machine/clark-fsm.js.map +1 -1
- package/dist/ai-service/state-machine/handlers/agent-planning.d.ts.map +1 -1
- package/dist/ai-service/state-machine/handlers/agent-planning.js +93 -11
- package/dist/ai-service/state-machine/handlers/agent-planning.js.map +1 -1
- package/dist/ai-service/state-machine/handlers/llm-generating.d.ts.map +1 -1
- package/dist/ai-service/state-machine/handlers/llm-generating.js +67 -7
- package/dist/ai-service/state-machine/handlers/llm-generating.js.map +1 -1
- package/dist/ai-service/state-machine/mocks.d.ts.map +1 -1
- package/dist/ai-service/state-machine/mocks.js +2 -0
- package/dist/ai-service/state-machine/mocks.js.map +1 -1
- package/dist/ai-service/types.d.ts +3 -0
- package/dist/ai-service/types.d.ts.map +1 -1
- package/dist/ai-service/types.js.map +1 -1
- package/dist/ai-service/util/mode-message.d.ts.map +1 -1
- package/dist/ai-service/util/mode-message.js +3 -0
- package/dist/ai-service/util/mode-message.js.map +1 -1
- package/dist/ai-service/util/rpc-timeout.d.ts +37 -0
- package/dist/ai-service/util/rpc-timeout.d.ts.map +1 -0
- package/dist/ai-service/util/rpc-timeout.js +58 -0
- package/dist/ai-service/util/rpc-timeout.js.map +1 -0
- package/dist/file-sync-vite-plugin.d.ts.map +1 -1
- package/dist/file-sync-vite-plugin.js +72 -21
- package/dist/file-sync-vite-plugin.js.map +1 -1
- package/dist/file-system-helpers.d.ts +9 -0
- package/dist/file-system-helpers.d.ts.map +1 -1
- package/dist/file-system-helpers.js +21 -0
- package/dist/file-system-helpers.js.map +1 -1
- package/dist/injected-index.d.ts.map +1 -1
- package/dist/injected-index.js +4 -3
- package/dist/injected-index.js.map +1 -1
- package/dist/plugin-options.d.ts +2 -0
- package/dist/plugin-options.d.ts.map +1 -1
- package/dist/plugin-options.js.map +1 -1
- package/dist/snapshot-routes.d.ts +17 -0
- package/dist/snapshot-routes.d.ts.map +1 -0
- package/dist/snapshot-routes.js +247 -0
- package/dist/snapshot-routes.js.map +1 -0
- package/dist/socket-manager.d.ts +1 -0
- package/dist/socket-manager.d.ts.map +1 -1
- package/dist/socket-manager.js +34 -0
- package/dist/socket-manager.js.map +1 -1
- 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":"AAAA;;;;;;GAMG;AAEH,8EAA8E;AAC9E,MAAM,0BAA0B,GAAG,IAAI,GAAG,CAAC,CAAC,YAAY,EAAE,QAAQ,CAAC,CAAC,CAAC;AAErE;;;;;;;;GAQG;AACH,MAAM,UAAU,WAAW,CACzB,MAAa,EACb,OAAiC;IAEjC,KAAK,MAAM,KAAK,IAAI,MAAM,EAAE,CAAC;QAC3B,cAAc;QACd,IAAI,KAAK,CAAC,IAAI,EAAE,CAAC;YACf,OAAO,CAAC,KAAK,CAAC,CAAC;QACjB,CAAC;QAED,OAAO;QACP,IAAI,KAAK,CAAC,IAAI,EAAE,MAAM,EAAE,CAAC;YACvB,WAAW,CAAC,KAAK,CAAC,IAAI,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;QAC1C,CAAC;QAED,WAAW;QACX,IAAI,KAAK,CAAC,QAAQ,EAAE,CAAC;YACnB,KAAK,MAAM,MAAM,IAAI,CAAC,KAAK,EAAE,OAAO,EAAE,SAAS,CAAU,EAAE,CAAC;gBAC1D,IAAI,KAAK,CAAC,QAAQ,CAAC,MAAM,CAAC,EAAE,MAAM,EAAE,CAAC;oBACnC,WAAW,CAAC,KAAK,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;gBACtD,CAAC;YACH,CAAC;QACH,CAAC;QAED,cAAc;QACd,IAAI,KAAK,CAAC,WAAW,EAAE,CAAC;YACtB,IAAI,KAAK,CAAC,WAAW,CAAC,EAAE,EAAE,MAAM,EAAE,CAAC;gBACjC,WAAW,CAAC,KAAK,CAAC,WAAW,CAAC,EAAE,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;YACpD,CAAC;YACD,IAAI,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,WAAW,CAAC,MAAM,CAAC,EAAE,CAAC;gBAC5C,KAAK,MAAM,MAAM,IAAI,KAAK,CAAC,WAAW,CAAC,MAAM,EAAE,CAAC;oBAC9C,IAAI,MAAM,EAAE,MAAM,EAAE,CAAC;wBACnB,WAAW,CAAC,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;oBACtC,CAAC;gBACH,CAAC;YACH,CAAC;YACD,IAAI,KAAK,CAAC,WAAW,CAAC,IAAI,EAAE,MAAM,EAAE,CAAC;gBACnC,WAAW,CAAC,KAAK,CAAC,WAAW,CAAC,IAAI,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;YACtD,CAAC;QACH,CAAC;QAED,2CAA2C;QAC3C,IAAI,KAAK,CAAC,QAAQ,EAAE,CAAC;YACnB,IAAI,KAAK,CAAC,QAAQ,CAAC,MAAM,EAAE,KAAK,EAAE,CAAC;gBACjC,KAAK,MAAM,UAAU,IAAI,MAAM,CAAC,MAAM,CAAC,KAAK,CAAC,QAAQ,CAAC,MAAM,CAAC,KAAK,CAAC,EAAE,CAAC;oBACpE,IAAK,UAAiC,EAAE,MAAM,EAAE,CAAC;wBAC/C,WAAW,CAAE,UAAgC,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;oBACjE,CAAC;gBACH,CAAC;YACH,CAAC;YACD,IAAI,KAAK,CAAC,QAAQ,CAAC,OAAO,EAAE,MAAM,EAAE,CAAC;gBACnC,WAAW,CAAC,KAAK,CAAC,QAAQ,CAAC,OAAO,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;YACtD,CAAC;QACH,CAAC;QAED,SAAS;QACT,IAAI,KAAK,CAAC,MAAM,EAAE,CAAC;YACjB,IAAI,KAAK,CAAC,MAAM,CAAC,OAAO,EAAE,IAAI,EAAE,CAAC;gBAC/B,OAAO,CAAC,KAAK,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC;YAChC,CAAC;YACD,IAAI,KAAK,CAAC,MAAM,CAAC,OAAO,EAAE,MAAM,EAAE,CAAC;gBACjC,WAAW,CAAC,KAAK,CAAC,MAAM,CAAC,OAAO,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;YACpD,CAAC;QACH,CAAC;IACH,CAAC;AACH,CAAC;AAED;;;GAGG;AACH,MAAM,UAAU,+BAA+B,CAAC,MAAa;IAC3D,MAAM,GAAG,GAAG,IAAI,GAAG,EAAU,CAAC;IAC9B,WAAW,CAAC,MAAM,EAAE,CAAC,KAAK,EAAE,EAAE;QAC5B,MAAM,EAAE,GAAuB,KAAK,CAAC,IAAI,EAAE,WAAW,CAAC;QACvD,IAAI,EAAE,IAAI,CAAC,0BAA0B,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE,CAAC;YAC9C,GAAG,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;QACd,CAAC;IACH,CAAC,CAAC,CAAC;IACH,OAAO,GAAG,CAAC;AACb,CAAC;AAED;;;;;GAKG;AACH,MAAM,UAAU,yBAAyB,CACvC,MAAa,EACb,uBAAoC;IAEpC,MAAM,YAAY,GAAG,IAAI,GAAG,EAAU,CAAC;IACvC,WAAW,CAAC,MAAM,EAAE,CAAC,KAAK,EAAE,EAAE;QAC5B,MAAM,EAAE,GAAuB,KAAK,CAAC,IAAI,EAAE,WAAW,CAAC;QACvD,IAAI,CAAC,EAAE,IAAI,0BAA0B,CAAC,GAAG,CAAC,EAAE,CAAC;YAAE,OAAO;QACtD,IAAI,uBAAuB,CAAC,GAAG,CAAC,EAAE,CAAC;YAAE,OAAO;QAE5C,yCAAyC;QACzC,KAAK,MAAM,GAAG,IAAI,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC;YAC1C,OAAO,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;QACzB,CAAC;QAED,iCAAiC;QACjC,KAAK,CAAC,IAAI,CAAC,WAAW,GAAG,YAAY,CAAC;QACtC,KAAK,CAAC,IAAI,CAAC,UAAU,GAAG;YACtB,IAAI,EAAE,2DAA2D,EAAE,GAAG;SACvE,CAAC;QAEF,YAAY,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;IACvB,CAAC,CAAC,CAAC;IACH,OAAO,YAAY,CAAC;AACtB,CAAC"}
|
|
@@ -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"}
|