@superblocksteam/vite-plugin-file-sync 2.0.96 → 2.0.97-next.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.
- package/dist/ai-service/agent/middleware.d.ts.map +1 -1
- package/dist/ai-service/agent/middleware.js +8 -2
- package/dist/ai-service/agent/middleware.js.map +1 -1
- package/dist/ai-service/agent/prompts/api-prompts.d.ts.map +1 -1
- package/dist/ai-service/agent/prompts/api-prompts.js +84 -91
- package/dist/ai-service/agent/prompts/api-prompts.js.map +1 -1
- package/dist/ai-service/agent/prompts/build-base-system-prompt.d.ts +1 -1
- 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 +7 -23
- package/dist/ai-service/agent/prompts/build-base-system-prompt.js.map +1 -1
- package/dist/ai-service/agent/tool-message-utils.d.ts.map +1 -1
- package/dist/ai-service/agent/tool-message-utils.js +32 -0
- package/dist/ai-service/agent/tool-message-utils.js.map +1 -1
- package/dist/ai-service/agent/tools/apis/api-testing-state.d.ts +28 -0
- package/dist/ai-service/agent/tools/apis/api-testing-state.d.ts.map +1 -0
- package/dist/ai-service/agent/tools/apis/api-testing-state.js +141 -0
- package/dist/ai-service/agent/tools/apis/api-testing-state.js.map +1 -0
- package/dist/ai-service/agent/tools/apis/sdk-registry.d.ts +4 -0
- package/dist/ai-service/agent/tools/apis/sdk-registry.d.ts.map +1 -0
- package/dist/ai-service/agent/tools/apis/sdk-registry.js +23 -0
- package/dist/ai-service/agent/tools/apis/sdk-registry.js.map +1 -0
- package/dist/ai-service/agent/tools/apis/test-api.d.ts +1 -63
- package/dist/ai-service/agent/tools/apis/test-api.d.ts.map +1 -1
- package/dist/ai-service/agent/tools/apis/test-api.js +12 -5
- package/dist/ai-service/agent/tools/apis/test-api.js.map +1 -1
- package/dist/ai-service/agent/tools/apis/write-api.d.ts +2 -2
- package/dist/ai-service/agent/tools/build-capture-screenshot.d.ts.map +1 -1
- package/dist/ai-service/agent/tools/build-capture-screenshot.js +2 -0
- package/dist/ai-service/agent/tools/build-capture-screenshot.js.map +1 -1
- package/dist/ai-service/agent/tools/build-edit-file.d.ts +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 +15 -0
- package/dist/ai-service/agent/tools/build-edit-file.js.map +1 -1
- package/dist/ai-service/agent/tools/build-finalize.d.ts.map +1 -1
- package/dist/ai-service/agent/tools/build-finalize.js +1 -0
- package/dist/ai-service/agent/tools/build-finalize.js.map +1 -1
- package/dist/ai-service/agent/tools/build-manage-checklist.d.ts +1 -1
- package/dist/ai-service/agent/tools/build-multi-edit-file.d.ts +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 +8 -0
- package/dist/ai-service/agent/tools/build-multi-edit-file.js.map +1 -1
- package/dist/ai-service/agent/tools/build-write-file.d.ts +1 -1
- package/dist/ai-service/agent/tools/build-write-file.d.ts.map +1 -1
- package/dist/ai-service/agent/tools/build-write-file.js +8 -0
- package/dist/ai-service/agent/tools/build-write-file.js.map +1 -1
- package/dist/ai-service/agent/tools/get-logs.d.ts +2 -0
- package/dist/ai-service/agent/tools/get-logs.d.ts.map +1 -1
- package/dist/ai-service/agent/tools/get-logs.js +49 -35
- package/dist/ai-service/agent/tools/get-logs.js.map +1 -1
- package/dist/ai-service/agent/tools/integrations/execute-request.d.ts +1 -1
- package/dist/ai-service/agent/tools/integrations/internal.d.ts +4 -0
- package/dist/ai-service/agent/tools/integrations/internal.d.ts.map +1 -1
- package/dist/ai-service/agent/tools/integrations/internal.js +1 -1
- package/dist/ai-service/agent/tools/integrations/internal.js.map +1 -1
- package/dist/ai-service/agent/tools.d.ts.map +1 -1
- package/dist/ai-service/agent/tools.js +78 -21
- 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 +0 -3
- package/dist/ai-service/agent/tools2/access-control.js.map +1 -1
- package/dist/ai-service/agent/tools2/tools/ask-multi-choice.d.ts.map +1 -1
- package/dist/ai-service/agent/tools2/tools/ask-multi-choice.js +1 -0
- package/dist/ai-service/agent/tools2/tools/ask-multi-choice.js.map +1 -1
- package/dist/ai-service/agent/tools2/tools/end-test-run.d.ts +2 -2
- package/dist/ai-service/agent/tools2/tools/git.d.ts +50 -0
- package/dist/ai-service/agent/tools2/tools/git.d.ts.map +1 -0
- package/dist/ai-service/agent/tools2/tools/git.js +465 -0
- package/dist/ai-service/agent/tools2/tools/git.js.map +1 -0
- package/dist/ai-service/agent/tools2/tools/glob.d.ts.map +1 -1
- package/dist/ai-service/agent/tools2/tools/glob.js +3 -1
- package/dist/ai-service/agent/tools2/tools/glob.js.map +1 -1
- package/dist/ai-service/agent/tools2/tools/grep.d.ts.map +1 -1
- package/dist/ai-service/agent/tools2/tools/grep.js +9 -2
- package/dist/ai-service/agent/tools2/tools/grep.js.map +1 -1
- package/dist/ai-service/agent/tools2/tools/index.d.ts +1 -7
- package/dist/ai-service/agent/tools2/tools/index.d.ts.map +1 -1
- package/dist/ai-service/agent/tools2/tools/index.js +2 -8
- package/dist/ai-service/agent/tools2/tools/index.js.map +1 -1
- package/dist/ai-service/agent/tools2/tools/ls.d.ts.map +1 -1
- package/dist/ai-service/agent/tools2/tools/ls.js +5 -1
- package/dist/ai-service/agent/tools2/tools/ls.js.map +1 -1
- package/dist/ai-service/agent/tools2/tools/read.d.ts +1 -1
- package/dist/ai-service/agent/tools2/tools/remember-knowledge.d.ts +10 -6
- package/dist/ai-service/agent/tools2/tools/remember-knowledge.d.ts.map +1 -1
- package/dist/ai-service/agent/tools2/tools/remember-knowledge.js +25 -18
- package/dist/ai-service/agent/tools2/tools/remember-knowledge.js.map +1 -1
- package/dist/ai-service/agent/tools2/tools/update-test-case-status.d.ts +2 -2
- package/dist/ai-service/agent/tools2/types.d.ts +6 -2
- package/dist/ai-service/agent/tools2/types.d.ts.map +1 -1
- 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 +46 -0
- package/dist/ai-service/agent/utils.js.map +1 -1
- package/dist/ai-service/app-interface/constants.d.ts +10 -3
- package/dist/ai-service/app-interface/constants.d.ts.map +1 -1
- package/dist/ai-service/app-interface/constants.js +16 -8
- package/dist/ai-service/app-interface/constants.js.map +1 -1
- package/dist/ai-service/app-interface/filesystem/handlers/skill-handler.d.ts +11 -4
- 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 +152 -11
- package/dist/ai-service/app-interface/filesystem/handlers/skill-handler.js.map +1 -1
- package/dist/ai-service/app-interface/filesystem/validation.d.ts +4 -4
- package/dist/ai-service/app-interface/filesystem/validation.d.ts.map +1 -1
- package/dist/ai-service/app-interface/filesystem/validation.js +14 -11
- package/dist/ai-service/app-interface/filesystem/validation.js.map +1 -1
- package/dist/ai-service/app-interface/filesystem/virtual-file-system.d.ts +1 -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 +2 -2
- package/dist/ai-service/app-interface/filesystem/virtual-file-system.js.map +1 -1
- package/dist/ai-service/app-interface/shell.d.ts +10 -1
- package/dist/ai-service/app-interface/shell.d.ts.map +1 -1
- package/dist/ai-service/app-interface/shell.js +62 -16
- package/dist/ai-service/app-interface/shell.js.map +1 -1
- package/dist/ai-service/app-skills/build-knowledge-feedback-message.d.ts +3 -0
- package/dist/ai-service/app-skills/build-knowledge-feedback-message.d.ts.map +1 -0
- package/dist/ai-service/app-skills/build-knowledge-feedback-message.js +47 -0
- package/dist/ai-service/app-skills/build-knowledge-feedback-message.js.map +1 -0
- package/dist/ai-service/app-skills/helpers.d.ts +6 -11
- package/dist/ai-service/app-skills/helpers.d.ts.map +1 -1
- package/dist/ai-service/app-skills/helpers.js +282 -75
- package/dist/ai-service/app-skills/helpers.js.map +1 -1
- package/dist/ai-service/attachment-upload.d.ts +9 -1
- package/dist/ai-service/attachment-upload.d.ts.map +1 -1
- package/dist/ai-service/attachment-upload.js +82 -62
- package/dist/ai-service/attachment-upload.js.map +1 -1
- package/dist/ai-service/attachments/store.d.ts +12 -1
- package/dist/ai-service/attachments/store.d.ts.map +1 -1
- package/dist/ai-service/attachments/store.js +35 -0
- package/dist/ai-service/attachments/store.js.map +1 -1
- package/dist/ai-service/attachments/uploaded-content-part.d.ts +28 -0
- package/dist/ai-service/attachments/uploaded-content-part.d.ts.map +1 -0
- package/dist/ai-service/attachments/uploaded-content-part.js +88 -0
- package/dist/ai-service/attachments/uploaded-content-part.js.map +1 -0
- package/dist/ai-service/chat/chat-session-store.d.ts +4 -2
- package/dist/ai-service/chat/chat-session-store.d.ts.map +1 -1
- package/dist/ai-service/chat/chat-session-store.js +150 -19
- package/dist/ai-service/chat/chat-session-store.js.map +1 -1
- package/dist/ai-service/chat/utils.d.ts +12 -0
- package/dist/ai-service/chat/utils.d.ts.map +1 -1
- package/dist/ai-service/chat/utils.js +128 -2
- package/dist/ai-service/chat/utils.js.map +1 -1
- package/dist/ai-service/clark-provider/attachment-service.d.ts +56 -0
- package/dist/ai-service/clark-provider/attachment-service.d.ts.map +1 -0
- package/dist/ai-service/clark-provider/attachment-service.js +295 -0
- package/dist/ai-service/clark-provider/attachment-service.js.map +1 -0
- package/dist/ai-service/clark-provider/clark-language-model.d.ts +3 -0
- package/dist/ai-service/clark-provider/clark-language-model.d.ts.map +1 -1
- package/dist/ai-service/clark-provider/clark-language-model.js +15 -5
- package/dist/ai-service/clark-provider/clark-language-model.js.map +1 -1
- package/dist/ai-service/clark-provider/clark-provider.d.ts +9 -0
- package/dist/ai-service/clark-provider/clark-provider.d.ts.map +1 -1
- package/dist/ai-service/clark-provider/clark-provider.js +2 -0
- package/dist/ai-service/clark-provider/clark-provider.js.map +1 -1
- package/dist/ai-service/context-upload.d.ts +2 -1
- package/dist/ai-service/context-upload.d.ts.map +1 -1
- package/dist/ai-service/context-upload.js +63 -26
- package/dist/ai-service/context-upload.js.map +1 -1
- package/dist/ai-service/features.d.ts +12 -1
- package/dist/ai-service/features.d.ts.map +1 -1
- package/dist/ai-service/features.js +12 -1
- package/dist/ai-service/features.js.map +1 -1
- package/dist/ai-service/index.d.ts +19 -2
- package/dist/ai-service/index.d.ts.map +1 -1
- package/dist/ai-service/index.js +129 -21
- package/dist/ai-service/index.js.map +1 -1
- package/dist/ai-service/judge/judge-eval-service-runner.js +1 -0
- package/dist/ai-service/judge/judge-eval-service-runner.js.map +1 -1
- package/dist/ai-service/judge/tools/playwright-action.d.ts +1 -1
- package/dist/ai-service/llm/impl/clark.d.ts.map +1 -1
- package/dist/ai-service/llm/impl/clark.js +18 -2
- package/dist/ai-service/llm/impl/clark.js.map +1 -1
- package/dist/ai-service/llm/interaction/adapters/vercel.d.ts.map +1 -1
- package/dist/ai-service/llm/interaction/adapters/vercel.js +4 -0
- package/dist/ai-service/llm/interaction/adapters/vercel.js.map +1 -1
- package/dist/ai-service/llm/provider.d.ts +2 -1
- package/dist/ai-service/llm/provider.d.ts.map +1 -1
- package/dist/ai-service/llm/provider.js +11 -2
- package/dist/ai-service/llm/provider.js.map +1 -1
- package/dist/ai-service/llm/stream/config.d.ts +3 -1
- package/dist/ai-service/llm/stream/config.d.ts.map +1 -1
- package/dist/ai-service/llm/stream/config.js +1 -0
- package/dist/ai-service/llm/stream/config.js.map +1 -1
- package/dist/ai-service/llm/stream/observers/logging.js +1 -1
- package/dist/ai-service/llm/stream/observers/logging.js.map +1 -1
- package/dist/ai-service/llm/stream/retry-engine.d.ts +8 -8
- package/dist/ai-service/llm/stream/retry-engine.d.ts.map +1 -1
- package/dist/ai-service/llm/stream/retry-engine.js +42 -24
- package/dist/ai-service/llm/stream/retry-engine.js.map +1 -1
- package/dist/ai-service/llm/types.d.ts +11 -0
- package/dist/ai-service/llm/types.d.ts.map +1 -1
- package/dist/ai-service/skills/system/materialized.d.ts +6 -0
- package/dist/ai-service/skills/system/materialized.d.ts.map +1 -0
- package/dist/ai-service/skills/system/materialized.js +33 -0
- package/dist/ai-service/skills/system/materialized.js.map +1 -0
- package/dist/ai-service/skills/system/superblocks-frontend/skill.generated.d.ts +1 -1
- package/dist/ai-service/skills/system/superblocks-frontend/skill.generated.d.ts.map +1 -1
- package/dist/ai-service/skills/system/superblocks-frontend/skill.generated.js +42 -54
- package/dist/ai-service/skills/system/superblocks-frontend/skill.generated.js.map +1 -1
- package/dist/ai-service/skills/system/tool-paths.d.ts +3 -0
- package/dist/ai-service/skills/system/tool-paths.d.ts.map +1 -0
- package/dist/ai-service/skills/system/tool-paths.js +16 -0
- package/dist/ai-service/skills/system/tool-paths.js.map +1 -0
- package/dist/ai-service/state-machine/clark-fsm.d.ts +29 -5
- package/dist/ai-service/state-machine/clark-fsm.d.ts.map +1 -1
- package/dist/ai-service/state-machine/clark-fsm.js +47 -1
- 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 +57 -36
- package/dist/ai-service/state-machine/handlers/agent-planning.js.map +1 -1
- package/dist/ai-service/state-machine/handlers/awaiting-user.d.ts.map +1 -1
- package/dist/ai-service/state-machine/handlers/awaiting-user.js +21 -3
- package/dist/ai-service/state-machine/handlers/awaiting-user.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 +74 -27
- package/dist/ai-service/state-machine/handlers/llm-generating.js.map +1 -1
- package/dist/ai-service/transform/api-builder/to-yaml-transformer.d.ts.map +1 -1
- package/dist/ai-service/transform/api-builder/to-yaml-transformer.js +94 -1
- package/dist/ai-service/transform/api-builder/to-yaml-transformer.js.map +1 -1
- package/dist/ai-service/util/mode-message.d.ts.map +1 -1
- package/dist/ai-service/util/mode-message.js +0 -3
- package/dist/ai-service/util/mode-message.js.map +1 -1
- package/dist/file-sync-vite-plugin.d.ts.map +1 -1
- package/dist/file-sync-vite-plugin.js +7 -0
- package/dist/file-sync-vite-plugin.js.map +1 -1
- package/dist/git-operation-lock.d.ts +22 -0
- package/dist/git-operation-lock.d.ts.map +1 -0
- package/dist/git-operation-lock.js +25 -0
- package/dist/git-operation-lock.js.map +1 -0
- package/dist/git-service/errors.d.ts +4 -0
- package/dist/git-service/errors.d.ts.map +1 -1
- package/dist/git-service/errors.js +6 -0
- package/dist/git-service/errors.js.map +1 -1
- package/dist/git-service/github-workflow.d.ts +6 -0
- package/dist/git-service/github-workflow.d.ts.map +1 -0
- package/dist/git-service/github-workflow.js +40 -0
- package/dist/git-service/github-workflow.js.map +1 -0
- package/dist/git-service/index.d.ts +2 -2
- package/dist/git-service/index.d.ts.map +1 -1
- package/dist/git-service/index.js +54 -12
- package/dist/git-service/index.js.map +1 -1
- package/dist/git-service/live-branch.d.ts.map +1 -1
- package/dist/git-service/live-branch.js +81 -5
- package/dist/git-service/live-branch.js.map +1 -1
- package/dist/inject-index-vite-plugin.d.ts.map +1 -1
- package/dist/inject-index-vite-plugin.js +37 -6
- package/dist/inject-index-vite-plugin.js.map +1 -1
- package/dist/injected-index.d.ts.map +1 -1
- package/dist/injected-index.js +23 -3
- package/dist/injected-index.js.map +1 -1
- package/dist/lock-service/index.d.ts.map +1 -1
- package/dist/lock-service/index.js +38 -0
- package/dist/lock-service/index.js.map +1 -1
- package/dist/parsing/index.d.ts +1 -0
- package/dist/parsing/index.d.ts.map +1 -1
- package/dist/parsing/index.js +1 -0
- package/dist/parsing/index.js.map +1 -1
- package/dist/parsing/sdk-registry.d.ts +5 -0
- package/dist/parsing/sdk-registry.d.ts.map +1 -0
- package/dist/parsing/sdk-registry.js +128 -0
- package/dist/parsing/sdk-registry.js.map +1 -0
- package/dist/socket-manager.d.ts +3 -1
- package/dist/socket-manager.d.ts.map +1 -1
- package/dist/socket-manager.js +192 -45
- package/dist/socket-manager.js.map +1 -1
- package/package.json +7 -6
- package/dist/ai-service/agent/tools2/tools/git-commit.d.ts +0 -15
- package/dist/ai-service/agent/tools2/tools/git-commit.d.ts.map +0 -1
- package/dist/ai-service/agent/tools2/tools/git-commit.js +0 -105
- package/dist/ai-service/agent/tools2/tools/git-commit.js.map +0 -1
- package/dist/ai-service/agent/tools2/tools/git-diff.d.ts +0 -9
- package/dist/ai-service/agent/tools2/tools/git-diff.d.ts.map +0 -1
- package/dist/ai-service/agent/tools2/tools/git-diff.js +0 -23
- package/dist/ai-service/agent/tools2/tools/git-diff.js.map +0 -1
- package/dist/ai-service/agent/tools2/tools/git-log.d.ts +0 -12
- package/dist/ai-service/agent/tools2/tools/git-log.d.ts.map +0 -1
- package/dist/ai-service/agent/tools2/tools/git-log.js +0 -27
- package/dist/ai-service/agent/tools2/tools/git-log.js.map +0 -1
- package/dist/ai-service/agent/tools2/tools/git-merge-abort.d.ts +0 -7
- package/dist/ai-service/agent/tools2/tools/git-merge-abort.d.ts.map +0 -1
- package/dist/ai-service/agent/tools2/tools/git-merge-abort.js +0 -42
- package/dist/ai-service/agent/tools2/tools/git-merge-abort.js.map +0 -1
- package/dist/ai-service/agent/tools2/tools/git-pull.d.ts +0 -20
- package/dist/ai-service/agent/tools2/tools/git-pull.d.ts.map +0 -1
- package/dist/ai-service/agent/tools2/tools/git-pull.js +0 -80
- package/dist/ai-service/agent/tools2/tools/git-pull.js.map +0 -1
- package/dist/ai-service/agent/tools2/tools/git-stage.d.ts +0 -9
- package/dist/ai-service/agent/tools2/tools/git-stage.d.ts.map +0 -1
- package/dist/ai-service/agent/tools2/tools/git-stage.js +0 -34
- package/dist/ai-service/agent/tools2/tools/git-stage.js.map +0 -1
- package/dist/ai-service/agent/tools2/tools/git-status.d.ts +0 -9
- package/dist/ai-service/agent/tools2/tools/git-status.d.ts.map +0 -1
- package/dist/ai-service/agent/tools2/tools/git-status.js +0 -18
- package/dist/ai-service/agent/tools2/tools/git-status.js.map +0 -1
|
@@ -0,0 +1,128 @@
|
|
|
1
|
+
import { parse } from "@babel/parser";
|
|
2
|
+
export async function parseSdkRegistryFromContent(registryContent, resolveImportPath) {
|
|
3
|
+
const result = new Map();
|
|
4
|
+
if (registryContent.trim() === "") {
|
|
5
|
+
return result;
|
|
6
|
+
}
|
|
7
|
+
let ast;
|
|
8
|
+
try {
|
|
9
|
+
ast = parse(registryContent, {
|
|
10
|
+
sourceType: "module",
|
|
11
|
+
plugins: ["typescript"],
|
|
12
|
+
});
|
|
13
|
+
}
|
|
14
|
+
catch {
|
|
15
|
+
return result;
|
|
16
|
+
}
|
|
17
|
+
const importMap = new Map();
|
|
18
|
+
for (const node of ast.program.body) {
|
|
19
|
+
if (node.type !== "ImportDeclaration")
|
|
20
|
+
continue;
|
|
21
|
+
const specifier = node.specifiers[0];
|
|
22
|
+
if (!specifier || specifier.type !== "ImportDefaultSpecifier")
|
|
23
|
+
continue;
|
|
24
|
+
const localName = specifier.local?.name;
|
|
25
|
+
const source = node.source?.value;
|
|
26
|
+
if (typeof localName !== "string" || typeof source !== "string")
|
|
27
|
+
continue;
|
|
28
|
+
const resolved = await resolveImportPath(source);
|
|
29
|
+
if (resolved) {
|
|
30
|
+
importMap.set(localName, resolved);
|
|
31
|
+
}
|
|
32
|
+
}
|
|
33
|
+
const exportedObject = findExportedObject(ast);
|
|
34
|
+
if (!exportedObject) {
|
|
35
|
+
return result;
|
|
36
|
+
}
|
|
37
|
+
for (const prop of exportedObject.properties) {
|
|
38
|
+
if (prop.type !== "ObjectProperty")
|
|
39
|
+
continue;
|
|
40
|
+
const key = getPropertyKey(prop);
|
|
41
|
+
if (!key)
|
|
42
|
+
continue;
|
|
43
|
+
const value = prop.value;
|
|
44
|
+
let resolvedPath;
|
|
45
|
+
if (value.type === "Identifier") {
|
|
46
|
+
resolvedPath = importMap.get(value.name ?? "");
|
|
47
|
+
}
|
|
48
|
+
else if (value.type === "CallExpression") {
|
|
49
|
+
resolvedPath = await resolveImportPathFromCall(value, resolveImportPath);
|
|
50
|
+
}
|
|
51
|
+
else if (value.type === "ArrowFunctionExpression") {
|
|
52
|
+
const body = value.body;
|
|
53
|
+
if (body?.type === "CallExpression") {
|
|
54
|
+
resolvedPath = await resolveImportPathFromCall(body, resolveImportPath);
|
|
55
|
+
}
|
|
56
|
+
}
|
|
57
|
+
if (resolvedPath) {
|
|
58
|
+
result.set(key, resolvedPath);
|
|
59
|
+
}
|
|
60
|
+
}
|
|
61
|
+
return result;
|
|
62
|
+
}
|
|
63
|
+
async function resolveImportPathFromCall(call, resolveImportPath) {
|
|
64
|
+
if (call.callee.type !== "Import") {
|
|
65
|
+
return undefined;
|
|
66
|
+
}
|
|
67
|
+
const arg = call.arguments[0];
|
|
68
|
+
if (arg?.type !== "StringLiteral" || typeof arg.value !== "string") {
|
|
69
|
+
return undefined;
|
|
70
|
+
}
|
|
71
|
+
return resolveImportPath(arg.value);
|
|
72
|
+
}
|
|
73
|
+
function getPropertyKey(prop) {
|
|
74
|
+
if (prop.key.type === "Identifier")
|
|
75
|
+
return prop.key.name;
|
|
76
|
+
if (prop.key.type === "StringLiteral")
|
|
77
|
+
return prop.key.value;
|
|
78
|
+
return undefined;
|
|
79
|
+
}
|
|
80
|
+
function findExportedObject(ast) {
|
|
81
|
+
for (const node of ast.program.body) {
|
|
82
|
+
if (node.type !== "ExportDefaultDeclaration")
|
|
83
|
+
continue;
|
|
84
|
+
const declaration = node.declaration;
|
|
85
|
+
const objectExpression = getObjectExpression(declaration);
|
|
86
|
+
if (objectExpression) {
|
|
87
|
+
return objectExpression;
|
|
88
|
+
}
|
|
89
|
+
if (declaration.type !== "Identifier" || !declaration.name)
|
|
90
|
+
continue;
|
|
91
|
+
const variableDeclaration = findVariableDeclaration(ast, declaration.name);
|
|
92
|
+
if (variableDeclaration?.init) {
|
|
93
|
+
return variableDeclaration.init;
|
|
94
|
+
}
|
|
95
|
+
}
|
|
96
|
+
return undefined;
|
|
97
|
+
}
|
|
98
|
+
function getObjectExpression(node) {
|
|
99
|
+
if (node.type === "ObjectExpression") {
|
|
100
|
+
return node;
|
|
101
|
+
}
|
|
102
|
+
if ((node.type === "TSAsExpression" || node.type === "TSSatisfiesExpression") &&
|
|
103
|
+
"expression" in node) {
|
|
104
|
+
const expression = node.expression;
|
|
105
|
+
if (expression?.type === "ObjectExpression") {
|
|
106
|
+
return expression;
|
|
107
|
+
}
|
|
108
|
+
}
|
|
109
|
+
return undefined;
|
|
110
|
+
}
|
|
111
|
+
function findVariableDeclaration(ast, name) {
|
|
112
|
+
for (const node of ast.program.body) {
|
|
113
|
+
if (node.type !== "VariableDeclaration")
|
|
114
|
+
continue;
|
|
115
|
+
for (const declarator of node.declarations) {
|
|
116
|
+
if (declarator.id.type === "Identifier" &&
|
|
117
|
+
declarator.id.name === name &&
|
|
118
|
+
declarator.init) {
|
|
119
|
+
const objectExpression = getObjectExpression(declarator.init);
|
|
120
|
+
if (objectExpression) {
|
|
121
|
+
return { init: objectExpression };
|
|
122
|
+
}
|
|
123
|
+
}
|
|
124
|
+
}
|
|
125
|
+
}
|
|
126
|
+
return undefined;
|
|
127
|
+
}
|
|
128
|
+
//# sourceMappingURL=sdk-registry.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"sdk-registry.js","sourceRoot":"","sources":["../../src/parsing/sdk-registry.ts"],"names":[],"mappings":"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"}
|
package/dist/socket-manager.d.ts
CHANGED
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
import { TracedEventEmitter } from "@superblocksteam/shared";
|
|
2
|
+
import { type GitOperationLock } from "./git-operation-lock.js";
|
|
2
3
|
import type { AiService } from "./ai-service/index.js";
|
|
3
4
|
import type { FileSystemManager } from "./file-system-manager.js";
|
|
4
5
|
import type { GitService } from "./git-service/index.js";
|
|
@@ -25,7 +26,7 @@ declare class SocketManager extends TracedEventEmitter<SocketManagerEvents> {
|
|
|
25
26
|
private _disposer;
|
|
26
27
|
constructor(tracer: Tracer);
|
|
27
28
|
private socketServer;
|
|
28
|
-
startSocketServer({ server, fileSyncManager, syncService, lockService, aiService, gitService, activateGitService, checkAuthorization, path, tracer, }: {
|
|
29
|
+
startSocketServer({ server, fileSyncManager, syncService, lockService, aiService, gitService, activateGitService, checkAuthorization, path, tracer, gitOperationLock, }: {
|
|
29
30
|
server: http.Server;
|
|
30
31
|
fileSyncManager: FileSystemManager;
|
|
31
32
|
syncService?: SyncService;
|
|
@@ -36,6 +37,7 @@ declare class SocketManager extends TracedEventEmitter<SocketManagerEvents> {
|
|
|
36
37
|
checkAuthorization: CheckAuthorization;
|
|
37
38
|
path: string;
|
|
38
39
|
tracer: Tracer;
|
|
40
|
+
gitOperationLock?: GitOperationLock;
|
|
39
41
|
}): void;
|
|
40
42
|
callEditorClients(fn: (socket: ISocketClient<EditorClientMethods>) => Promise<void>): void;
|
|
41
43
|
callLibraryClients(fn: (socket: ISocketClient<LibraryClientMethods>) => Promise<void>): void;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"socket-manager.d.ts","sourceRoot":"","sources":["../src/socket-manager.ts"],"names":[],"mappings":"AAKA,OAAO,EAGL,kBAAkB,EAEnB,MAAM,yBAAyB,CAAC;
|
|
1
|
+
{"version":3,"file":"socket-manager.d.ts","sourceRoot":"","sources":["../src/socket-manager.ts"],"names":[],"mappings":"AAKA,OAAO,EAGL,kBAAkB,EAEnB,MAAM,yBAAyB,CAAC;AAKjC,OAAO,EAEL,KAAK,gBAAgB,EACtB,MAAM,yBAAyB,CAAC;AASjC,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,uBAAuB,CAAC;AACvD,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,0BAA0B,CAAC;AAClE,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,wBAAwB,CAAC;AACzD,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,yBAAyB,CAAC;AAC3D,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,qBAAqB,CAAC;AAC9D,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,yBAAyB,CAAC;AAC3D,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,oBAAoB,CAAC;AACjD,OAAO,KAAK,EAGV,mBAAmB,EACnB,oBAAoB,EAGrB,MAAM,uCAAuC,CAAC;AAC/C,OAAO,KAAK,EAEV,aAAa,EAEd,MAAM,yBAAyB,CAAC;AACjC,OAAO,KAAK,IAAI,MAAM,WAAW,CAAC;AAIlC,KAAK,mBAAmB,GAAG;IACzB,gBAAgB,EAAE,CAAC,aAAa,CAAC,mBAAmB,CAAC,EAAE,MAAM,CAAC,CAAC;IAC/D,iBAAiB,EAAE,CAAC,aAAa,CAAC,oBAAoB,CAAC,CAAC,CAAC;IACzD,mBAAmB,EAAE,CAAC,MAAM,CAAC,CAAC;CAC/B,CAAC;AAOF,wBAAgB,yBAAyB,IAAI,OAAO,CAEnD;AAED,wBAAgB,0BAA0B,CAAC,OAAO,EAAE,OAAO,GAAG,IAAI,CAEjE;AAED,wBAAgB,mBAAmB,CAAC,MAAM,EAAE,MAAM,iBAIjD;AAED,wBAAgB,oBAAoB,SAGnC;AAED,cAAM,aAAc,SAAQ,kBAAkB,CAAC,mBAAmB,CAAC;IACjE,OAAO,CAAC,OAAO,CAA8C;IAE7D,OAAO,CAAC,aAAa,CAAiD;IACtE,OAAO,CAAC,cAAc,CAAkD;IACxE,OAAO,CAAC,SAAS,CAAwB;gBAE7B,MAAM,EAAE,MAAM;IAI1B,OAAO,CAAC,YAAY,CAA8B;IAClD,iBAAiB,CAAC,EAChB,MAAM,EACN,eAAe,EACf,WAAW,EACX,WAAW,EACX,SAAS,EACT,UAAU,EACV,kBAAkB,EAClB,kBAAkB,EAClB,IAAI,EACJ,MAAM,EACN,gBAAgB,GACjB,EAAE;QACD,MAAM,EAAE,IAAI,CAAC,MAAM,CAAC;QACpB,eAAe,EAAE,iBAAiB,CAAC;QACnC,WAAW,CAAC,EAAE,WAAW,CAAC;QAC1B,WAAW,CAAC,EAAE,WAAW,CAAC;QAC1B,SAAS,CAAC,EAAE,SAAS,CAAC;QACtB,UAAU,CAAC,EAAE,UAAU,CAAC;QACxB,kBAAkB,CAAC,EAAE,MAAM,OAAO,CAAC,UAAU,GAAG,SAAS,CAAC,CAAC;QAC3D,kBAAkB,EAAE,kBAAkB,CAAC;QACvC,IAAI,EAAE,MAAM,CAAC;QACb,MAAM,EAAE,MAAM,CAAC;QACf,gBAAgB,CAAC,EAAE,gBAAgB,CAAC;KACrC;IA8mCD,iBAAiB,CACf,EAAE,EAAE,CAAC,MAAM,EAAE,aAAa,CAAC,mBAAmB,CAAC,KAAK,OAAO,CAAC,IAAI,CAAC;IAOnE,kBAAkB,CAChB,EAAE,EAAE,CAAC,MAAM,EAAE,aAAa,CAAC,oBAAoB,CAAC,KAAK,OAAO,CAAC,IAAI,CAAC;IAOpE,mBAAmB;IAInB,gBAAgB,IAAI,QAAQ,CAAC,aAAa,CAAC,mBAAmB,CAAC,CAAC;IAIhE,eAAe;IASf,OAAO;CAGR"}
|
package/dist/socket-manager.js
CHANGED
|
@@ -6,6 +6,8 @@ import { createISocketClient, SUPERBLOCKS_LIVE_GIT_BRANCH, TracedEventEmitter, T
|
|
|
6
6
|
import { WebSocketServer } from "ws";
|
|
7
7
|
import { uploadContextToBucketeer } from "./ai-service/context-upload.js";
|
|
8
8
|
import { createSocketRecordingMiddleware } from "./ai-service/recording/recorders/socket-recorder.js";
|
|
9
|
+
import { GIT_OPERATION_BUSY_MESSAGE, } from "./git-operation-lock.js";
|
|
10
|
+
import { ensureGithubWorkflowFile } from "./git-service/github-workflow.js";
|
|
9
11
|
import { GitConflictError } from "./git-service/index.js";
|
|
10
12
|
import { ensureLiveBranchCheckedOut, pushLiveBranchWithAutoRecreate, rollbackLastCommit, } from "./git-service/live-branch.js";
|
|
11
13
|
import { getErrorMeta, getLogger } from "./util/logger.js";
|
|
@@ -37,7 +39,7 @@ class SocketManager extends TracedEventEmitter {
|
|
|
37
39
|
super(tracer);
|
|
38
40
|
}
|
|
39
41
|
socketServer;
|
|
40
|
-
startSocketServer({ server, fileSyncManager, syncService, lockService, aiService, gitService, activateGitService, checkAuthorization, path, tracer, }) {
|
|
42
|
+
startSocketServer({ server, fileSyncManager, syncService, lockService, aiService, gitService, activateGitService, checkAuthorization, path, tracer, gitOperationLock, }) {
|
|
41
43
|
if (this.socketServer) {
|
|
42
44
|
throw new Error("Socket server already started");
|
|
43
45
|
}
|
|
@@ -47,6 +49,7 @@ class SocketManager extends TracedEventEmitter {
|
|
|
47
49
|
const getActiveGitService = async () => {
|
|
48
50
|
if (activeGitService) {
|
|
49
51
|
await ensureLiveBranchCheckedOut(activeGitService);
|
|
52
|
+
aiService?.setRuntimeGitServices(activeGitService, syncService, gitOperationLock);
|
|
50
53
|
return activeGitService;
|
|
51
54
|
}
|
|
52
55
|
if (!activateGitService) {
|
|
@@ -60,13 +63,21 @@ class SocketManager extends TracedEventEmitter {
|
|
|
60
63
|
activeGitService = await activateGitService();
|
|
61
64
|
if (activeGitService) {
|
|
62
65
|
await ensureLiveBranchCheckedOut(activeGitService);
|
|
66
|
+
aiService?.setRuntimeGitServices(activeGitService, syncService, gitOperationLock);
|
|
63
67
|
return activeGitService;
|
|
64
68
|
}
|
|
65
69
|
}
|
|
66
70
|
catch (error) {
|
|
67
|
-
getLogger().warn(
|
|
71
|
+
getLogger().warn("[git] activation attempt failed", {
|
|
72
|
+
gitCategory: "setup",
|
|
73
|
+
gitOperation: "activate",
|
|
74
|
+
gitOutcome: "failed",
|
|
75
|
+
gitAttempt: attempt,
|
|
76
|
+
gitMaxAttempts: maxAttempts,
|
|
77
|
+
...getErrorMeta(error),
|
|
78
|
+
});
|
|
68
79
|
if (attempt === maxAttempts) {
|
|
69
|
-
getLogger().error(`[git]
|
|
80
|
+
getLogger().error(`[git] activation attempts exhausted (${attempt}/${maxAttempts})`, getErrorMeta(error));
|
|
70
81
|
throw error;
|
|
71
82
|
}
|
|
72
83
|
}
|
|
@@ -78,6 +89,21 @@ class SocketManager extends TracedEventEmitter {
|
|
|
78
89
|
}
|
|
79
90
|
return undefined;
|
|
80
91
|
};
|
|
92
|
+
async function runWithGitLock(fn) {
|
|
93
|
+
if (!gitOperationLock) {
|
|
94
|
+
return fn();
|
|
95
|
+
}
|
|
96
|
+
const result = gitOperationLock.tryAcquire();
|
|
97
|
+
if (!result.acquired) {
|
|
98
|
+
throw new Error(GIT_OPERATION_BUSY_MESSAGE);
|
|
99
|
+
}
|
|
100
|
+
try {
|
|
101
|
+
return await fn();
|
|
102
|
+
}
|
|
103
|
+
finally {
|
|
104
|
+
result.release();
|
|
105
|
+
}
|
|
106
|
+
}
|
|
81
107
|
const handleUpgrade = (req, socket, head) => {
|
|
82
108
|
if (!req.url) {
|
|
83
109
|
return;
|
|
@@ -214,6 +240,7 @@ class SocketManager extends TracedEventEmitter {
|
|
|
214
240
|
branchName: syncService.branchName,
|
|
215
241
|
appRootDirPath: aiService.appRootDirPath,
|
|
216
242
|
userId: contextId.userId,
|
|
243
|
+
useServerUpload: aiService.isAiFileUploadEnabled,
|
|
217
244
|
superblocksBaseUrl: aiService.superblocksBaseUrl,
|
|
218
245
|
logger: getLogger(),
|
|
219
246
|
jwt,
|
|
@@ -317,6 +344,14 @@ class SocketManager extends TracedEventEmitter {
|
|
|
317
344
|
return { fact };
|
|
318
345
|
},
|
|
319
346
|
],
|
|
347
|
+
aiMoveAppKnowledge: [
|
|
348
|
+
async (request) => {
|
|
349
|
+
if (!aiService) {
|
|
350
|
+
throw new Error("AI service not available");
|
|
351
|
+
}
|
|
352
|
+
return await aiService.moveAppFact(request);
|
|
353
|
+
},
|
|
354
|
+
],
|
|
320
355
|
aiRestoreToCommit: [
|
|
321
356
|
async (request, _context) => {
|
|
322
357
|
// Update clark.context.jwt from socket if missing (for restore operations)
|
|
@@ -379,37 +414,57 @@ class SocketManager extends TracedEventEmitter {
|
|
|
379
414
|
},
|
|
380
415
|
],
|
|
381
416
|
gitCommitLocal: [
|
|
382
|
-
async (request) => {
|
|
383
|
-
|
|
384
|
-
|
|
385
|
-
|
|
386
|
-
|
|
387
|
-
await readyGitService
|
|
388
|
-
.fetch("origin", SUPERBLOCKS_LIVE_GIT_BRANCH)
|
|
389
|
-
.catch((fetchErr) => {
|
|
390
|
-
const msg = fetchErr instanceof Error
|
|
391
|
-
? fetchErr.message
|
|
392
|
-
: String(fetchErr);
|
|
393
|
-
if (!msg.includes("couldn't find remote ref")) {
|
|
394
|
-
throw fetchErr;
|
|
417
|
+
async (request) => runWithGitLock(async () => {
|
|
418
|
+
try {
|
|
419
|
+
const readyGitService = await getActiveGitService();
|
|
420
|
+
if (!readyGitService) {
|
|
421
|
+
throw new Error("Git is not configured for this application");
|
|
395
422
|
}
|
|
396
|
-
|
|
397
|
-
|
|
398
|
-
|
|
399
|
-
|
|
400
|
-
|
|
423
|
+
await readyGitService
|
|
424
|
+
.fetch("origin", SUPERBLOCKS_LIVE_GIT_BRANCH)
|
|
425
|
+
.catch((fetchErr) => {
|
|
426
|
+
const msg = fetchErr instanceof Error
|
|
427
|
+
? fetchErr.message
|
|
428
|
+
: String(fetchErr);
|
|
429
|
+
if (!msg.includes("couldn't find remote ref")) {
|
|
430
|
+
throw fetchErr;
|
|
431
|
+
}
|
|
432
|
+
});
|
|
433
|
+
await ensureGithubWorkflowFile(readyGitService, aiService?.superblocksBaseUrl).catch((error) => {
|
|
434
|
+
getLogger().warn("[git] gitCommitLocal failed to ensure GitHub workflow file", {
|
|
435
|
+
gitCategory: "setup",
|
|
436
|
+
gitOperation: "ensure-github-workflow-file",
|
|
437
|
+
gitOutcome: "failed",
|
|
438
|
+
...getErrorMeta(error),
|
|
439
|
+
});
|
|
440
|
+
});
|
|
441
|
+
await readyGitService.add(".");
|
|
442
|
+
const result = await readyGitService.commit(request.message);
|
|
443
|
+
return { sha: result.commit };
|
|
444
|
+
}
|
|
445
|
+
catch (error) {
|
|
446
|
+
getLogger().error("[git] gitCommitLocal failed", getErrorMeta(error));
|
|
447
|
+
throw error;
|
|
448
|
+
}
|
|
449
|
+
}),
|
|
401
450
|
],
|
|
402
451
|
gitPushLiveBranch: [
|
|
403
|
-
async () => {
|
|
404
|
-
|
|
405
|
-
|
|
406
|
-
|
|
452
|
+
async () => runWithGitLock(async () => {
|
|
453
|
+
try {
|
|
454
|
+
const readyGitService = await getActiveGitService();
|
|
455
|
+
if (!readyGitService) {
|
|
456
|
+
throw new Error("Git is not configured for this application");
|
|
457
|
+
}
|
|
458
|
+
await pushLiveBranchWithAutoRecreate(readyGitService);
|
|
407
459
|
}
|
|
408
|
-
|
|
409
|
-
|
|
460
|
+
catch (error) {
|
|
461
|
+
getLogger().error("[git] gitPushLiveBranch failed", getErrorMeta(error));
|
|
462
|
+
throw error;
|
|
463
|
+
}
|
|
464
|
+
}),
|
|
410
465
|
],
|
|
411
466
|
gitRollbackLastCommit: [
|
|
412
|
-
async (request) => {
|
|
467
|
+
async (request) => runWithGitLock(async () => {
|
|
413
468
|
const readyGitService = await getActiveGitService();
|
|
414
469
|
if (!readyGitService) {
|
|
415
470
|
throw new Error("Git is not configured for this application");
|
|
@@ -418,10 +473,10 @@ class SocketManager extends TracedEventEmitter {
|
|
|
418
473
|
gitService: readyGitService,
|
|
419
474
|
expectedSha: request.expectedSha,
|
|
420
475
|
});
|
|
421
|
-
},
|
|
476
|
+
}),
|
|
422
477
|
],
|
|
423
478
|
gitPull: [
|
|
424
|
-
async (_request, _context) => {
|
|
479
|
+
async (_request, _context) => runWithGitLock(async () => {
|
|
425
480
|
const readyGitService = await getActiveGitService();
|
|
426
481
|
if (!readyGitService) {
|
|
427
482
|
throw new Error("Git is not configured for this application");
|
|
@@ -489,10 +544,18 @@ class SocketManager extends TracedEventEmitter {
|
|
|
489
544
|
}
|
|
490
545
|
if (hasConflicts) {
|
|
491
546
|
const conflictedFiles = await readyGitService.getConflictedFiles();
|
|
547
|
+
getLogger().warn("[git] pull conflict detected", {
|
|
548
|
+
gitCategory: "pull",
|
|
549
|
+
gitOperation: "pull",
|
|
550
|
+
gitOutcome: "conflict",
|
|
551
|
+
branch: SUPERBLOCKS_LIVE_GIT_BRANCH,
|
|
552
|
+
conflictedFileCount: conflictedFiles.length,
|
|
553
|
+
conflictedFiles,
|
|
554
|
+
});
|
|
492
555
|
return { merged: false, conflictedFiles };
|
|
493
556
|
}
|
|
494
557
|
return { merged };
|
|
495
|
-
},
|
|
558
|
+
}),
|
|
496
559
|
],
|
|
497
560
|
gitSyncStatus: [
|
|
498
561
|
async () => {
|
|
@@ -506,7 +569,13 @@ class SocketManager extends TracedEventEmitter {
|
|
|
506
569
|
hasUncommittedChanges = status.files.length > 0;
|
|
507
570
|
}
|
|
508
571
|
catch (statusErr) {
|
|
509
|
-
getLogger().warn("[git] gitSyncStatus
|
|
572
|
+
getLogger().warn("[git] gitSyncStatus status failed", {
|
|
573
|
+
gitCategory: "status",
|
|
574
|
+
gitOperation: "syncStatus",
|
|
575
|
+
gitOutcome: "failed",
|
|
576
|
+
gitErrorKind: "status_failed",
|
|
577
|
+
...getErrorMeta(statusErr),
|
|
578
|
+
});
|
|
510
579
|
return null;
|
|
511
580
|
}
|
|
512
581
|
let ahead = 0;
|
|
@@ -518,9 +587,34 @@ class SocketManager extends TracedEventEmitter {
|
|
|
518
587
|
behind = counts.behind;
|
|
519
588
|
}
|
|
520
589
|
catch (fetchErr) {
|
|
521
|
-
getLogger().warn(
|
|
590
|
+
getLogger().warn("[git] gitSyncStatus fetch/revList failed", {
|
|
591
|
+
gitCategory: "status",
|
|
592
|
+
gitOperation: "syncStatus",
|
|
593
|
+
gitOutcome: "failed",
|
|
594
|
+
gitErrorKind: "fetch_or_rev_list_failed",
|
|
595
|
+
branch: SUPERBLOCKS_LIVE_GIT_BRANCH,
|
|
596
|
+
remote: "origin",
|
|
597
|
+
...getErrorMeta(fetchErr),
|
|
598
|
+
});
|
|
522
599
|
}
|
|
523
|
-
|
|
600
|
+
let aheadOfDefaultBranch = false;
|
|
601
|
+
try {
|
|
602
|
+
const defaultBranch = await readyGitService.getDefaultBranch();
|
|
603
|
+
if (defaultBranch) {
|
|
604
|
+
await readyGitService.fetch("origin", defaultBranch);
|
|
605
|
+
const defaultCounts = await readyGitService.revList("HEAD", `origin/${defaultBranch}`);
|
|
606
|
+
aheadOfDefaultBranch = defaultCounts.ahead > 0;
|
|
607
|
+
}
|
|
608
|
+
}
|
|
609
|
+
catch {
|
|
610
|
+
// Optional: enable Open PR when branch has commits vs default.
|
|
611
|
+
}
|
|
612
|
+
return {
|
|
613
|
+
ahead,
|
|
614
|
+
behind,
|
|
615
|
+
hasUncommittedChanges,
|
|
616
|
+
aheadOfDefaultBranch,
|
|
617
|
+
};
|
|
524
618
|
},
|
|
525
619
|
],
|
|
526
620
|
gitChangedFiles: [
|
|
@@ -540,25 +634,49 @@ class SocketManager extends TracedEventEmitter {
|
|
|
540
634
|
}));
|
|
541
635
|
}
|
|
542
636
|
catch (err) {
|
|
543
|
-
getLogger().warn("[git] gitChangedFiles
|
|
637
|
+
getLogger().warn("[git] gitChangedFiles status failed", {
|
|
638
|
+
gitCategory: "status",
|
|
639
|
+
gitOperation: "changed-files",
|
|
640
|
+
gitOutcome: "failed",
|
|
641
|
+
gitErrorKind: "status_failed",
|
|
642
|
+
...getErrorMeta(err),
|
|
643
|
+
});
|
|
544
644
|
return [];
|
|
545
645
|
}
|
|
546
646
|
},
|
|
547
647
|
],
|
|
548
648
|
gitActivate: [
|
|
549
|
-
async () => {
|
|
649
|
+
async () => runWithGitLock(async () => {
|
|
550
650
|
const service = await getActiveGitService();
|
|
551
651
|
return { activated: !!service };
|
|
552
|
-
},
|
|
652
|
+
}),
|
|
553
653
|
],
|
|
554
654
|
gitDisconnect: [
|
|
555
|
-
async () => {
|
|
655
|
+
async () => runWithGitLock(async () => {
|
|
656
|
+
// Native git disconnect should move runtime lock context back
|
|
657
|
+
// to default branch before clients reconnect.
|
|
658
|
+
if (lockService) {
|
|
659
|
+
try {
|
|
660
|
+
await lockService.switchBranch("main", {
|
|
661
|
+
reacquireLock: true,
|
|
662
|
+
});
|
|
663
|
+
}
|
|
664
|
+
catch (err) {
|
|
665
|
+
getLogger().warn("[git] gitDisconnect failed to switch lock branch back to main", {
|
|
666
|
+
gitCategory: "setup",
|
|
667
|
+
gitOperation: "disconnect",
|
|
668
|
+
gitOutcome: "failed",
|
|
669
|
+
gitErrorKind: "switch_lock_branch_failed",
|
|
670
|
+
...getErrorMeta(err),
|
|
671
|
+
});
|
|
672
|
+
}
|
|
673
|
+
}
|
|
556
674
|
if (activeGitService) {
|
|
557
675
|
const gitDir = join(activeGitService.workDir, ".git");
|
|
558
676
|
activeGitService = undefined;
|
|
559
677
|
await rm(gitDir, { recursive: true, force: true });
|
|
560
678
|
}
|
|
561
|
-
},
|
|
679
|
+
}),
|
|
562
680
|
],
|
|
563
681
|
gitDefaultBranch: [
|
|
564
682
|
async () => {
|
|
@@ -569,7 +687,13 @@ class SocketManager extends TracedEventEmitter {
|
|
|
569
687
|
return await readyGitService.getDefaultBranch();
|
|
570
688
|
}
|
|
571
689
|
catch (err) {
|
|
572
|
-
getLogger().warn("[git] gitDefaultBranch
|
|
690
|
+
getLogger().warn("[git] gitDefaultBranch failed", {
|
|
691
|
+
gitCategory: "branch",
|
|
692
|
+
gitOperation: "default-branch",
|
|
693
|
+
gitOutcome: "failed",
|
|
694
|
+
gitErrorKind: "default_branch_detection_failed",
|
|
695
|
+
...getErrorMeta(err),
|
|
696
|
+
});
|
|
573
697
|
return null;
|
|
574
698
|
}
|
|
575
699
|
},
|
|
@@ -598,7 +722,15 @@ class SocketManager extends TracedEventEmitter {
|
|
|
598
722
|
await readyGitService.fetch("origin", branch);
|
|
599
723
|
}
|
|
600
724
|
catch (fetchErr) {
|
|
601
|
-
getLogger().warn(
|
|
725
|
+
getLogger().warn("[git] gitBranchLog fetch failed", {
|
|
726
|
+
gitCategory: "branch",
|
|
727
|
+
gitOperation: "branch-log",
|
|
728
|
+
gitOutcome: "failed",
|
|
729
|
+
gitErrorKind: "branch_log_fetch_failed",
|
|
730
|
+
branch,
|
|
731
|
+
remote: "origin",
|
|
732
|
+
...getErrorMeta(fetchErr),
|
|
733
|
+
});
|
|
602
734
|
}
|
|
603
735
|
}
|
|
604
736
|
const SEP = "<<SEP>>";
|
|
@@ -627,7 +759,7 @@ class SocketManager extends TracedEventEmitter {
|
|
|
627
759
|
},
|
|
628
760
|
],
|
|
629
761
|
gitPrepareMainCommit: [
|
|
630
|
-
async (request) => {
|
|
762
|
+
async (request) => runWithGitLock(async () => {
|
|
631
763
|
const readyGitService = await getActiveGitService();
|
|
632
764
|
if (!readyGitService) {
|
|
633
765
|
throw new Error("Git service is not available");
|
|
@@ -644,7 +776,15 @@ class SocketManager extends TracedEventEmitter {
|
|
|
644
776
|
await readyGitService.fetch("origin", defaultBranch);
|
|
645
777
|
}
|
|
646
778
|
catch (fetchErr) {
|
|
647
|
-
getLogger().warn(
|
|
779
|
+
getLogger().warn("[git] gitPrepareMainCommit fetch failed", {
|
|
780
|
+
gitCategory: "build",
|
|
781
|
+
gitOperation: "prepare-main-commit",
|
|
782
|
+
gitOutcome: "failed",
|
|
783
|
+
gitErrorKind: "prepare_main_commit_fetch_failed",
|
|
784
|
+
defaultBranch,
|
|
785
|
+
remote: "origin",
|
|
786
|
+
...getErrorMeta(fetchErr),
|
|
787
|
+
});
|
|
648
788
|
}
|
|
649
789
|
const worktreeBase = await mkdtemp(join(tmpdir(), "sb-main-deploy-"));
|
|
650
790
|
const worktreePath = join(worktreeBase, "worktree");
|
|
@@ -687,14 +827,21 @@ class SocketManager extends TracedEventEmitter {
|
|
|
687
827
|
]);
|
|
688
828
|
}
|
|
689
829
|
catch (cleanupErr) {
|
|
690
|
-
getLogger().warn(
|
|
830
|
+
getLogger().warn("[git] gitPrepareMainCommit worktree cleanup failed", {
|
|
831
|
+
gitCategory: "build",
|
|
832
|
+
gitOperation: "prepare-main-commit",
|
|
833
|
+
gitOutcome: "failed",
|
|
834
|
+
gitErrorKind: "worktree_cleanup_failed",
|
|
835
|
+
worktreePath,
|
|
836
|
+
...getErrorMeta(cleanupErr),
|
|
837
|
+
});
|
|
691
838
|
}
|
|
692
839
|
await rm(worktreeBase, {
|
|
693
840
|
recursive: true,
|
|
694
841
|
force: true,
|
|
695
842
|
});
|
|
696
843
|
}
|
|
697
|
-
},
|
|
844
|
+
}),
|
|
698
845
|
],
|
|
699
846
|
},
|
|
700
847
|
}, middlewares, tracer, {
|