@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
|
@@ -8,7 +8,7 @@ import { getScopedToken } from "./util/scoped-token-utils.js";
|
|
|
8
8
|
* Reads all files from .superblocks/context/{userId}/ and uploads them
|
|
9
9
|
* Dynamically detects MIME types for any file type
|
|
10
10
|
*/
|
|
11
|
-
export async function uploadContextToBucketeer({ applicationId, commitId, branchName, appRootDirPath, userId, superblocksBaseUrl, logger, jwt, }) {
|
|
11
|
+
export async function uploadContextToBucketeer({ applicationId, commitId, branchName, appRootDirPath, userId, useServerUpload = false, superblocksBaseUrl, logger, jwt, }) {
|
|
12
12
|
// Get the context directory path for this userId
|
|
13
13
|
const contextDir = path.join(appRootDirPath, ".superblocks", "context", userId);
|
|
14
14
|
// Read all files in the context directory
|
|
@@ -32,21 +32,7 @@ export async function uploadContextToBucketeer({ applicationId, commitId, branch
|
|
|
32
32
|
logger.info(`[uploadContextToBucketeer] No context files found for userId=${userId}, skipping upload`);
|
|
33
33
|
return;
|
|
34
34
|
}
|
|
35
|
-
|
|
36
|
-
let scopedToken;
|
|
37
|
-
try {
|
|
38
|
-
scopedToken = await getScopedToken({
|
|
39
|
-
applicationId,
|
|
40
|
-
superblocksBaseUrl,
|
|
41
|
-
jwt,
|
|
42
|
-
});
|
|
43
|
-
}
|
|
44
|
-
catch (error) {
|
|
45
|
-
logger.error("[uploadContextToBucketeer] Failed to get scoped token", getErrorMeta(error));
|
|
46
|
-
throw error;
|
|
47
|
-
}
|
|
48
|
-
// Create FormData and append all context files
|
|
49
|
-
const formData = new FormData();
|
|
35
|
+
const contextFileData = [];
|
|
50
36
|
const uploadedFiles = [];
|
|
51
37
|
for (const fileName of contextFiles) {
|
|
52
38
|
const filePath = path.join(contextDir, fileName);
|
|
@@ -55,10 +41,7 @@ export async function uploadContextToBucketeer({ applicationId, commitId, branch
|
|
|
55
41
|
const fileBuffer = await readFile(filePath);
|
|
56
42
|
// Convert Buffer to Uint8Array for Blob
|
|
57
43
|
// Content-Type is optional - server can infer from filename
|
|
58
|
-
|
|
59
|
-
const blob = new Blob([uint8Array]);
|
|
60
|
-
// Append each file with the same field name "context"
|
|
61
|
-
formData.append("context", blob, fileName);
|
|
44
|
+
contextFileData.push({ data: fileBuffer, fileName });
|
|
62
45
|
uploadedFiles.push(fileName);
|
|
63
46
|
}
|
|
64
47
|
catch (err) {
|
|
@@ -70,14 +53,54 @@ export async function uploadContextToBucketeer({ applicationId, commitId, branch
|
|
|
70
53
|
logger.warn(`[uploadContextToBucketeer] No files were successfully read for upload`);
|
|
71
54
|
return;
|
|
72
55
|
}
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
56
|
+
const buildFormData = () => {
|
|
57
|
+
const formData = new FormData();
|
|
58
|
+
for (const contextFile of contextFileData) {
|
|
59
|
+
formData.append("context", new Blob([new Uint8Array(contextFile.data)]), contextFile.fileName);
|
|
60
|
+
}
|
|
61
|
+
return formData;
|
|
62
|
+
};
|
|
63
|
+
const uploadViaServer = async () => {
|
|
64
|
+
const url = new URL(`${superblocksBaseUrl}/api/v1/files/upload`);
|
|
65
|
+
url.searchParams.set("scopeType", "app");
|
|
66
|
+
url.searchParams.set("purpose", "context");
|
|
67
|
+
url.searchParams.set("applicationId", applicationId);
|
|
68
|
+
url.searchParams.set("branchName", branchName);
|
|
69
|
+
url.searchParams.set("commitId", commitId);
|
|
70
|
+
const response = await fetch(url.toString(), {
|
|
71
|
+
method: "POST",
|
|
72
|
+
body: buildFormData(),
|
|
73
|
+
headers: {
|
|
74
|
+
Authorization: `Bearer ${jwt}`,
|
|
75
|
+
},
|
|
76
|
+
});
|
|
77
|
+
if (!response.ok) {
|
|
78
|
+
const errorText = await response
|
|
79
|
+
.text()
|
|
80
|
+
.catch(() => "Unable to read error response");
|
|
81
|
+
throw new Error(`Server context upload failed: status=${response.status}, error=${errorText}`);
|
|
82
|
+
}
|
|
83
|
+
};
|
|
84
|
+
const uploadViaBucketeer = async () => {
|
|
85
|
+
let scopedToken;
|
|
86
|
+
try {
|
|
87
|
+
scopedToken = await getScopedToken({
|
|
88
|
+
applicationId,
|
|
89
|
+
superblocksBaseUrl,
|
|
90
|
+
jwt,
|
|
91
|
+
});
|
|
92
|
+
}
|
|
93
|
+
catch (error) {
|
|
94
|
+
logger.error("[uploadContextToBucketeer] Failed to get scoped token", getErrorMeta(error));
|
|
95
|
+
throw error;
|
|
96
|
+
}
|
|
97
|
+
// Get Bucketeer URL from Superblocks base URL
|
|
98
|
+
const bucketeerUrl = getBucketeerUrlFromSuperblocksUrl(superblocksBaseUrl);
|
|
99
|
+
// Upload to Bucketeer using the branch-aware context endpoint
|
|
100
|
+
const url = `${bucketeerUrl}/applications/${applicationId}/branches/${encodeURIComponent(branchName)}/commits/${encodeURIComponent(commitId)}/context`;
|
|
78
101
|
const response = await fetch(url, {
|
|
79
102
|
method: "POST",
|
|
80
|
-
body:
|
|
103
|
+
body: buildFormData(),
|
|
81
104
|
headers: {
|
|
82
105
|
Authorization: `Bearer ${scopedToken}`,
|
|
83
106
|
// Content-Type will be set automatically by fetch with boundary
|
|
@@ -90,6 +113,20 @@ export async function uploadContextToBucketeer({ applicationId, commitId, branch
|
|
|
90
113
|
logger.error(`[uploadContextToBucketeer] Upload failed: status=${response.status}, statusText=${response.statusText}, error=${errorText} for applicationId=${applicationId}, commitId=${commitId}`);
|
|
91
114
|
throw new Error(`Context upload failed: ${response.statusText}`);
|
|
92
115
|
}
|
|
116
|
+
};
|
|
117
|
+
try {
|
|
118
|
+
if (useServerUpload) {
|
|
119
|
+
try {
|
|
120
|
+
await uploadViaServer();
|
|
121
|
+
}
|
|
122
|
+
catch (error) {
|
|
123
|
+
logger.warn("[uploadContextToBucketeer] Server context upload failed, falling back to Bucketeer", getErrorMeta(error));
|
|
124
|
+
await uploadViaBucketeer();
|
|
125
|
+
}
|
|
126
|
+
}
|
|
127
|
+
else {
|
|
128
|
+
await uploadViaBucketeer();
|
|
129
|
+
}
|
|
93
130
|
logger.info(`[uploadContextToBucketeer] Successfully uploaded ${uploadedFiles.length} context file(s) (${uploadedFiles.join(", ")}) for applicationId=${applicationId}, commitId=${commitId}`);
|
|
94
131
|
}
|
|
95
132
|
catch (error) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"context-upload.js","sourceRoot":"","sources":["../../src/ai-service/context-upload.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,QAAQ,EAAE,MAAM,kBAAkB,CAAC;AACrD,OAAO,KAAK,IAAI,MAAM,WAAW,CAAC;AAClC,OAAO,EAAE,iCAAiC,EAAE,MAAM,uBAAuB,CAAC;AAC1E,OAAO,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAC;AACjD,OAAO,EAAE,cAAc,EAAE,MAAM,8BAA8B,CAAC;AAG9D;;;;GAIG;AACH,MAAM,CAAC,KAAK,UAAU,wBAAwB,CAAC,EAC7C,aAAa,EACb,QAAQ,EACR,UAAU,EACV,cAAc,EACd,MAAM,EACN,kBAAkB,EAClB,MAAM,EACN,GAAG,
|
|
1
|
+
{"version":3,"file":"context-upload.js","sourceRoot":"","sources":["../../src/ai-service/context-upload.ts"],"names":[],"mappings":"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"}
|
|
@@ -91,11 +91,22 @@ declare const FLAG_DEFINITIONS: {
|
|
|
91
91
|
readonly key: "clark.sdk-api.enabled";
|
|
92
92
|
readonly schema: z.ZodBoolean;
|
|
93
93
|
};
|
|
94
|
-
|
|
94
|
+
readonly aiFileUploadEnabled: {
|
|
95
|
+
readonly key: "ai.file-upload.enabled";
|
|
96
|
+
readonly schema: z.ZodBoolean;
|
|
97
|
+
};
|
|
98
|
+
readonly appKnowledgeEnabled: {
|
|
99
|
+
readonly key: "ai.app-knowledge.enabled";
|
|
100
|
+
readonly schema: z.ZodBoolean;
|
|
101
|
+
};
|
|
95
102
|
readonly nativeGitEnabled: {
|
|
96
103
|
readonly key: "superblocks.native-git.enabled";
|
|
97
104
|
readonly schema: z.ZodBoolean;
|
|
98
105
|
};
|
|
106
|
+
readonly enableDeletingLockfiles: {
|
|
107
|
+
readonly key: "ai.clark-delete-package-lock.enabled";
|
|
108
|
+
readonly schema: z.ZodBoolean;
|
|
109
|
+
};
|
|
99
110
|
};
|
|
100
111
|
/**
|
|
101
112
|
Type-safe feature flags for AI service.
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"features.d.ts","sourceRoot":"","sources":["../../src/ai-service/features.ts"],"names":[],"mappings":"AACA,OAAO,CAAC,MAAM,KAAK,CAAC;AAEpB;;GAEG;AACH,MAAM,WAAW,WAAW,CAAC,CAAC,GAAG,OAAO;IACtC,GAAG,EAAE,MAAM,CAAC;IACZ,MAAM,EAAE,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC;CACtB;AAED;;GAEG;AACH,KAAK,eAAe,CAAC,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,GAAG,CAAC,GAAG,KAAK,CAAC;AAEnE;;GAEG;AACH,KAAK,WAAW,CAAC,CAAC,SAAS,MAAM,CAAC,MAAM,EAAE,WAAW,CAAC,IAAI;IACxD,QAAQ,EAAE,CAAC,IAAI,MAAM,CAAC,GAAG,eAAe,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,GAAG,SAAS;CACrE,CAAC;AAEF;;;;;;;;;;;;GAYG;AACH,QAAA,MAAM,gBAAgB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;IAyDpB,qFAAqF
|
|
1
|
+
{"version":3,"file":"features.d.ts","sourceRoot":"","sources":["../../src/ai-service/features.ts"],"names":[],"mappings":"AACA,OAAO,CAAC,MAAM,KAAK,CAAC;AAEpB;;GAEG;AACH,MAAM,WAAW,WAAW,CAAC,CAAC,GAAG,OAAO;IACtC,GAAG,EAAE,MAAM,CAAC;IACZ,MAAM,EAAE,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC;CACtB;AAED;;GAEG;AACH,KAAK,eAAe,CAAC,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,GAAG,CAAC,GAAG,KAAK,CAAC;AAEnE;;GAEG;AACH,KAAK,WAAW,CAAC,CAAC,SAAS,MAAM,CAAC,MAAM,EAAE,WAAW,CAAC,IAAI;IACxD,QAAQ,EAAE,CAAC,IAAI,MAAM,CAAC,GAAG,eAAe,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,GAAG,SAAS;CACrE,CAAC;AAEF;;;;;;;;;;;;GAYG;AACH,QAAA,MAAM,gBAAgB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;IAyDpB,qFAAqF;;;;;;;;;;;;;;;;;;;;;CAqBvC,CAAC;AAEjD;;;;;GAKG;AACH,MAAM,MAAM,qBAAqB,GAAG,WAAW,CAAC,OAAO,gBAAgB,CAAC,CAAC;AAEzE,eAAO,MAAM,qBAAqB;IAChC;;OAEG;mBACW,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAQ,qBAAqB;CAkBnE,CAAC"}
|
|
@@ -75,11 +75,22 @@ const FLAG_DEFINITIONS = {
|
|
|
75
75
|
key: "clark.sdk-api.enabled",
|
|
76
76
|
schema: z.boolean(),
|
|
77
77
|
},
|
|
78
|
-
|
|
78
|
+
aiFileUploadEnabled: {
|
|
79
|
+
key: "ai.file-upload.enabled",
|
|
80
|
+
schema: z.boolean(),
|
|
81
|
+
},
|
|
82
|
+
appKnowledgeEnabled: {
|
|
83
|
+
key: "ai.app-knowledge.enabled",
|
|
84
|
+
schema: z.boolean(),
|
|
85
|
+
},
|
|
79
86
|
nativeGitEnabled: {
|
|
80
87
|
key: "superblocks.native-git.enabled",
|
|
81
88
|
schema: z.boolean(),
|
|
82
89
|
},
|
|
90
|
+
enableDeletingLockfiles: {
|
|
91
|
+
key: "ai.clark-delete-package-lock.enabled",
|
|
92
|
+
schema: z.boolean(),
|
|
93
|
+
},
|
|
83
94
|
};
|
|
84
95
|
export const AiServiceFeatureFlags = {
|
|
85
96
|
/**
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"features.js","sourceRoot":"","sources":["../../src/ai-service/features.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,mBAAmB,EAAE,MAAM,uCAAuC,CAAC;AAC5E,OAAO,CAAC,MAAM,KAAK,CAAC;AAsBpB;;;;;;;;;;;;GAYG;AACH,MAAM,gBAAgB,GAAG;IACvB,2BAA2B,EAAE;QAC3B,GAAG,EAAE,2BAA2B;QAChC,MAAM,EAAE,CAAC,CAAC,MAAM,EAAE;KACnB;IACD,gCAAgC,EAAE;QAChC,GAAG,EAAE,0BAA0B;QAC/B,MAAM,EAAE,CAAC,CAAC,MAAM,EAAE;KACnB;IACD,sBAAsB,EAAE;QACtB,GAAG,EAAE,iCAAiC;QACtC,MAAM,EAAE,CAAC,CAAC,OAAO,EAAE;KACpB;IACD,oBAAoB,EAAE;QACpB,GAAG,EAAE,2BAA2B;QAChC,MAAM,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;KAC9B;IACD,2BAA2B,EAAE;QAC3B,GAAG,EAAE,8CAA8C;QACnD,MAAM,EAAE,CAAC,CAAC,OAAO,EAAE;KACpB;IACD,sBAAsB,EAAE;QACtB,GAAG,EAAE,yCAAyC;QAC9C,MAAM,EAAE,CAAC,CAAC,OAAO,EAAE;KACpB;IACD,gBAAgB,EAAE;QAChB,GAAG,EAAE,sBAAsB;QAC3B,MAAM,EAAE,CAAC,CAAC,IAAI,CAAC,mBAAmB,CAAC;KACpC;IACD,wBAAwB,EAAE;QACxB,GAAG,EAAE,qCAAqC;QAC1C,MAAM,EAAE,CAAC,CAAC,OAAO,EAAE;KACpB;IACD,eAAe,EAAE;QACf,GAAG,EAAE,kCAAkC;QACvC,MAAM,EAAE,CAAC,CAAC,OAAO,EAAE;KACpB;IACD,iCAAiC,EAAE;QACjC,GAAG,EAAE,oCAAoC;QACzC,MAAM,EAAE,CAAC,CAAC,OAAO,EAAE;KACpB;IACD,iBAAiB,EAAE;QACjB,GAAG,EAAE,8BAA8B;QACnC,MAAM,EAAE,CAAC,CAAC,OAAO,EAAE;KACpB;IACD,eAAe,EAAE;QACf,GAAG,EAAE,yBAAyB;QAC9B,MAAM,EAAE,CAAC,CAAC,OAAO,EAAE;KACpB;IACD,uBAAuB,EAAE;QACvB,GAAG,EAAE,iCAAiC;QACtC,MAAM,EAAE,CAAC,CAAC,OAAO,EAAE;KACpB;IACD,wBAAwB,EAAE;QACxB,GAAG,EAAE,kCAAkC;QACvC,MAAM,EAAE,CAAC,CAAC,OAAO,EAAE;KACpB;IACD,qFAAqF;IACrF,aAAa,EAAE;QACb,GAAG,EAAE,uBAAuB;QAC5B,MAAM,EAAE,CAAC,CAAC,OAAO,EAAE;KACpB;IACD,
|
|
1
|
+
{"version":3,"file":"features.js","sourceRoot":"","sources":["../../src/ai-service/features.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,13 +1,16 @@
|
|
|
1
|
-
import { type AiAppFact } from "@superblocksteam/library-shared/types";
|
|
1
|
+
import { type AiAppFact, type AiMoveAppKnowledgeRequest, type AiMoveAppKnowledgeResult } from "@superblocksteam/library-shared/types";
|
|
2
2
|
import { TracedEventEmitter } from "@superblocksteam/shared";
|
|
3
3
|
import { ChatSessionStore } from "./chat/chat-session-store.js";
|
|
4
4
|
import { AppContextStore } from "./context/app-context.js";
|
|
5
5
|
import { RecordingManager } from "./recording/index.js";
|
|
6
6
|
import type { FileSystemManager } from "../file-system-manager.js";
|
|
7
|
+
import type { GitOperationLock } from "../git-operation-lock.js";
|
|
8
|
+
import type { GitService } from "../git-service/index.js";
|
|
7
9
|
import type { SourceTracker } from "../source-tracker.js";
|
|
10
|
+
import type { GitPullSyncService } from "./agent/tools2/tools/git.js";
|
|
8
11
|
import type { JudgeEvaluationOptions, JudgeEvaluationResult } from "./judge/judge-service.js";
|
|
9
|
-
import type { AiServiceConfig, AiServiceEvents, EditorClient, UserChange, ApiUpdate } from "./types.ts";
|
|
10
12
|
import type { ContextId } from "./llm/context-v2/types.js";
|
|
13
|
+
import type { AiServiceConfig, AiServiceEvents, EditorClient, UserChange, ApiUpdate } from "./types.ts";
|
|
11
14
|
import type { AiGenerateRequest, AiExplainCodeRequest, AiSummarizeApiUsageRequest, AiLabelAttachmentRequest, AiLabelAttachmentResponse, AiToolPermission, LLMProviderConfig, PromptContext, RuntimeErrorData, ConsoleLogEntry, ApiRunRecord } from "@superblocksteam/library-shared/types";
|
|
12
15
|
import type { ViteDevServer } from "vite";
|
|
13
16
|
export { AiServiceFeatureFlags } from "./features.js";
|
|
@@ -46,8 +49,17 @@ export declare class AiService extends TracedEventEmitter<AiServiceEvents> {
|
|
|
46
49
|
private readonly mcpServerManager;
|
|
47
50
|
private readonly recordingManager;
|
|
48
51
|
private readonly sessionId;
|
|
52
|
+
private _runtimeGitService?;
|
|
53
|
+
private _runtimeSyncService?;
|
|
54
|
+
private _runtimeGitOperationLock?;
|
|
55
|
+
private _onGitOperationComplete?;
|
|
49
56
|
get appContext(): AppContextStore;
|
|
50
57
|
get clarkState(): string;
|
|
58
|
+
/**
|
|
59
|
+
* Injects git and sync services for the git tool (called by the plugin when native git is available).
|
|
60
|
+
*/
|
|
61
|
+
setRuntimeGitServices(gitService?: GitService, syncService?: GitPullSyncService, gitOperationLock?: GitOperationLock): void;
|
|
62
|
+
setOnGitOperationComplete(callback: () => void): void;
|
|
51
63
|
get appRootDirPath(): string;
|
|
52
64
|
get organizationId(): string;
|
|
53
65
|
get superblocksBaseUrl(): string;
|
|
@@ -88,6 +100,7 @@ export declare class AiService extends TracedEventEmitter<AiServiceEvents> {
|
|
|
88
100
|
*/
|
|
89
101
|
getAvailableIntegrationIds(): Promise<Set<string>>;
|
|
90
102
|
get isSessionManagementEnabled(): boolean;
|
|
103
|
+
get isAiFileUploadEnabled(): boolean;
|
|
91
104
|
/**
|
|
92
105
|
* Checks if there is a connected peer (user is connected via socket)
|
|
93
106
|
*/
|
|
@@ -206,6 +219,10 @@ export declare class AiService extends TracedEventEmitter<AiServiceEvents> {
|
|
|
206
219
|
* Toggles the isEnabled field of an app skill fact and returns the updated fact.
|
|
207
220
|
*/
|
|
208
221
|
toggleAppFact(virtualPath: string, isEnabled: boolean): Promise<AiAppFact>;
|
|
222
|
+
/**
|
|
223
|
+
* Move an app skill fact to org/user/integration scope.
|
|
224
|
+
*/
|
|
225
|
+
moveAppFact(payload: AiMoveAppKnowledgeRequest): Promise<AiMoveAppKnowledgeResult>;
|
|
209
226
|
handleRestoreToCommit(sinceTimestamp: number, commitId: string, applicationId: string, branchName: string): Promise<void>;
|
|
210
227
|
handleApiUpdate(update: ApiUpdate): Promise<void>;
|
|
211
228
|
isBusy(): boolean;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/ai-service/index.ts"],"names":[],"mappings":"AAGA,OAAO,
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/ai-service/index.ts"],"names":[],"mappings":"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"}
|
package/dist/ai-service/index.js
CHANGED
|
@@ -1,9 +1,9 @@
|
|
|
1
1
|
import { randomUUID } from "node:crypto";
|
|
2
2
|
import os from "node:os";
|
|
3
3
|
import path from "node:path";
|
|
4
|
-
import {
|
|
5
|
-
import { addTracingToMethods, TracedEventEmitter, } from "@superblocksteam/shared";
|
|
6
|
-
import { generateObject, hasToolCall } from "ai";
|
|
4
|
+
import { AiMode, } from "@superblocksteam/library-shared/types";
|
|
5
|
+
import { addTracingToMethods, FactAccessType, FactCreatedSource, FactEntityScope, TracedEventEmitter, } from "@superblocksteam/shared";
|
|
6
|
+
import { generateObject, hasToolCall, } from "ai";
|
|
7
7
|
import { z } from "zod";
|
|
8
8
|
import { getErrorMeta, getLogger, setDefaultLogger } from "../util/logger.js";
|
|
9
9
|
import { getToolCallArguments, getToolErrorCode, getToolOutput, } from "./agent/tool-message-utils.js";
|
|
@@ -20,7 +20,9 @@ import { createDefaultVirtualFileSystem, createPathValidator, } from "./app-inte
|
|
|
20
20
|
import { AppShell } from "./app-interface/shell.js";
|
|
21
21
|
import { AppSkillsManager } from "./app-skills/manager.js";
|
|
22
22
|
import { BoltArtifactProcessor } from "./artifacts/bolt.js";
|
|
23
|
+
import { isUploadedAttachment, toUploadedAttachmentContentPart, } from "./attachments/uploaded-content-part.js";
|
|
23
24
|
import { ChatSessionStore } from "./chat/chat-session-store.js";
|
|
25
|
+
import { normalizeTextAttachmentForModel } from "./chat/utils.js";
|
|
24
26
|
import { AppContextStore } from "./context/app-context.js";
|
|
25
27
|
import { restoreContextFromCheckpoint } from "./context-download.js";
|
|
26
28
|
import { IntegrationStore } from "./integrations/store.js";
|
|
@@ -56,6 +58,7 @@ import { transitionFrom } from "./state-machine/helpers/transition.js";
|
|
|
56
58
|
import { TemplateRenderer } from "./template-renderer.js";
|
|
57
59
|
import { createJsonStreamParser } from "./util/json-stream-parser.js";
|
|
58
60
|
import { processLLMConfig } from "./util/llm-config-utils.js";
|
|
61
|
+
import { parseJwt } from "./util/parse-jwt.js";
|
|
59
62
|
import { getToolCallSignature } from "./util/tool-signature.js";
|
|
60
63
|
export { AiServiceFeatureFlags } from "./features.js";
|
|
61
64
|
export { SnapshotManager } from "./recording/index.js";
|
|
@@ -144,12 +147,27 @@ export class AiService extends TracedEventEmitter {
|
|
|
144
147
|
mcpServerManager;
|
|
145
148
|
recordingManager;
|
|
146
149
|
sessionId;
|
|
150
|
+
_runtimeGitService;
|
|
151
|
+
_runtimeSyncService;
|
|
152
|
+
_runtimeGitOperationLock;
|
|
153
|
+
_onGitOperationComplete;
|
|
147
154
|
get appContext() {
|
|
148
155
|
return this._appContext;
|
|
149
156
|
}
|
|
150
157
|
get clarkState() {
|
|
151
158
|
return this.clark.state;
|
|
152
159
|
}
|
|
160
|
+
/**
|
|
161
|
+
* Injects git and sync services for the git tool (called by the plugin when native git is available).
|
|
162
|
+
*/
|
|
163
|
+
setRuntimeGitServices(gitService, syncService, gitOperationLock) {
|
|
164
|
+
this._runtimeGitService = gitService;
|
|
165
|
+
this._runtimeSyncService = syncService;
|
|
166
|
+
this._runtimeGitOperationLock = gitOperationLock;
|
|
167
|
+
}
|
|
168
|
+
setOnGitOperationComplete(callback) {
|
|
169
|
+
this._onGitOperationComplete = callback;
|
|
170
|
+
}
|
|
153
171
|
get appRootDirPath() {
|
|
154
172
|
return this.config.appRootDirPath;
|
|
155
173
|
}
|
|
@@ -223,6 +241,9 @@ export class AiService extends TracedEventEmitter {
|
|
|
223
241
|
get isSessionManagementEnabled() {
|
|
224
242
|
return this.config.features.sessionManagementEnabled === true;
|
|
225
243
|
}
|
|
244
|
+
get isAiFileUploadEnabled() {
|
|
245
|
+
return this.config.features.aiFileUploadEnabled === true;
|
|
246
|
+
}
|
|
226
247
|
/**
|
|
227
248
|
* Checks if there is a connected peer (user is connected via socket)
|
|
228
249
|
*/
|
|
@@ -271,8 +292,10 @@ export class AiService extends TracedEventEmitter {
|
|
|
271
292
|
useSystemSkills: config.features.useSystemSkills,
|
|
272
293
|
knowledgeManager: this.knowledgeManager,
|
|
273
294
|
sdkApiEnabled: config.features.sdkApiEnabled,
|
|
295
|
+
appRootDirPath: config.appRootDirPath,
|
|
274
296
|
}),
|
|
275
297
|
pathValidator: createPathValidator(config.features.sdkApiEnabled ?? false),
|
|
298
|
+
enableDeletingLockfiles: config.features.enableDeletingLockfiles ?? false,
|
|
276
299
|
messageSender: async (message) => {
|
|
277
300
|
// Send checklist messages through the peer connection
|
|
278
301
|
if (this.clark.context.peer &&
|
|
@@ -454,7 +477,7 @@ export class AiService extends TracedEventEmitter {
|
|
|
454
477
|
// Note: retry_count for LLM retries is added by orchestrator via providerOptions
|
|
455
478
|
mode: clark.context.currentMode === AiMode.PLAN ? "plan" : "build",
|
|
456
479
|
plan_size: clark.context.planSize,
|
|
457
|
-
})),
|
|
480
|
+
}), this.config.rpcClient, this.config.superblocksBaseUrl, this.config.applicationId),
|
|
458
481
|
chatSessionStore: this.chatSessionStore,
|
|
459
482
|
clarkProfiler: this.clarkProfiler,
|
|
460
483
|
contextManagerV2: this.contextManagerV2,
|
|
@@ -464,6 +487,10 @@ export class AiService extends TracedEventEmitter {
|
|
|
464
487
|
mcpServerManager: this.mcpServerManager,
|
|
465
488
|
viteServer: this.viteServer,
|
|
466
489
|
recordingManager: this.recordingManager,
|
|
490
|
+
gitService: this._runtimeGitService,
|
|
491
|
+
syncService: this._runtimeSyncService,
|
|
492
|
+
gitOperationLock: this._runtimeGitOperationLock,
|
|
493
|
+
onGitOperationComplete: this._onGitOperationComplete,
|
|
467
494
|
};
|
|
468
495
|
const clarkStateHandlers = Object.fromEntries(Object.entries(clarkStateHandlerFactories).map(([state, handlerFactory]) => [state, handlerFactory(clark, params)]));
|
|
469
496
|
const { from, to, event } = transition;
|
|
@@ -551,7 +578,9 @@ export class AiService extends TracedEventEmitter {
|
|
|
551
578
|
const reason = quota.reason ?? "token_limit_exceeded";
|
|
552
579
|
const message = reason === "trial_expired"
|
|
553
580
|
? "Your AI trial period has ended."
|
|
554
|
-
:
|
|
581
|
+
: reason === "no_seat_assigned"
|
|
582
|
+
? "You don't have an AI Builder license assigned. Ask your admin to assign a license."
|
|
583
|
+
: "Your organization has reached its AI usage limit.";
|
|
555
584
|
throw new Error(`${message} [reason:${reason}]`);
|
|
556
585
|
}
|
|
557
586
|
}
|
|
@@ -680,7 +709,7 @@ export class AiService extends TracedEventEmitter {
|
|
|
680
709
|
prompt_id: promptId,
|
|
681
710
|
application_id: this.config.applicationId,
|
|
682
711
|
session_id: this.sessionId,
|
|
683
|
-
}));
|
|
712
|
+
}), this.config.rpcClient, this.config.superblocksBaseUrl, this.config.applicationId);
|
|
684
713
|
const model = llmProvider.modelForTask("explain");
|
|
685
714
|
getLogger().info(`[ai-service] Creating LLM provider with settings:`, JSON.stringify({
|
|
686
715
|
providerType: llmConfig?.provider,
|
|
@@ -704,7 +733,8 @@ export class AiService extends TracedEventEmitter {
|
|
|
704
733
|
providerOptions,
|
|
705
734
|
headers,
|
|
706
735
|
providerConfig: {
|
|
707
|
-
provider: llmConfig?.provider ??
|
|
736
|
+
provider: llmConfig?.provider ??
|
|
737
|
+
"vertex",
|
|
708
738
|
model: llmConfig?.coreModel ?? "claude-sonnet-4-5",
|
|
709
739
|
},
|
|
710
740
|
enableFallback: llmConfig?.unifiedProviderEnabled ?? false,
|
|
@@ -844,7 +874,7 @@ export class AiService extends TracedEventEmitter {
|
|
|
844
874
|
prompt_id: promptId,
|
|
845
875
|
application_id: this.config.applicationId,
|
|
846
876
|
session_id: this.sessionId,
|
|
847
|
-
}));
|
|
877
|
+
}), this.config.rpcClient, this.config.superblocksBaseUrl, this.config.applicationId);
|
|
848
878
|
const model = llmProvider.modelForTask("explain");
|
|
849
879
|
await traceLLM("handleAiSummarizeApiUsage", model.modelId, model.provider, async () => {
|
|
850
880
|
try {
|
|
@@ -854,7 +884,8 @@ export class AiService extends TracedEventEmitter {
|
|
|
854
884
|
providerOptions,
|
|
855
885
|
headers,
|
|
856
886
|
providerConfig: {
|
|
857
|
-
provider: llmConfig?.provider ??
|
|
887
|
+
provider: llmConfig?.provider ??
|
|
888
|
+
"vertex",
|
|
858
889
|
model: llmConfig?.coreModel ?? "claude-sonnet-4-5",
|
|
859
890
|
},
|
|
860
891
|
enableFallback: llmConfig?.unifiedProviderEnabled ?? false,
|
|
@@ -916,7 +947,7 @@ export class AiService extends TracedEventEmitter {
|
|
|
916
947
|
prompt_id: promptId,
|
|
917
948
|
application_id: this.config.applicationId,
|
|
918
949
|
session_id: this.sessionId,
|
|
919
|
-
}));
|
|
950
|
+
}), this.config.rpcClient, this.config.superblocksBaseUrl, this.config.applicationId);
|
|
920
951
|
const model = llmProvider.modelForTask("fast");
|
|
921
952
|
const LabelAttachmentSchema = z.object({
|
|
922
953
|
label: z
|
|
@@ -986,9 +1017,19 @@ export class AiService extends TracedEventEmitter {
|
|
|
986
1017
|
filename: attachment.fileName,
|
|
987
1018
|
};
|
|
988
1019
|
}
|
|
989
|
-
|
|
1020
|
+
if (isUploadedAttachment(attachment)) {
|
|
1021
|
+
return toUploadedAttachmentContentPart(attachment);
|
|
1022
|
+
}
|
|
1023
|
+
const normalizedTextAttachment = normalizeTextAttachmentForModel(attachment);
|
|
1024
|
+
if (normalizedTextAttachment) {
|
|
990
1025
|
// Wrap text content in XML tags for structured presentation
|
|
991
|
-
const sanitizedFileName =
|
|
1026
|
+
const sanitizedFileName = normalizedTextAttachment.fileName
|
|
1027
|
+
.replace(/&/g, "&")
|
|
1028
|
+
.replace(/"/g, """)
|
|
1029
|
+
.replace(/'/g, "'")
|
|
1030
|
+
.replace(/</g, "<")
|
|
1031
|
+
.replace(/>/g, ">");
|
|
1032
|
+
const sanitizedMimeType = normalizedTextAttachment.mimeType
|
|
992
1033
|
.replace(/&/g, "&")
|
|
993
1034
|
.replace(/"/g, """)
|
|
994
1035
|
.replace(/'/g, "'")
|
|
@@ -996,12 +1037,10 @@ export class AiService extends TracedEventEmitter {
|
|
|
996
1037
|
.replace(/>/g, ">");
|
|
997
1038
|
return {
|
|
998
1039
|
type: "text",
|
|
999
|
-
text: `<${
|
|
1040
|
+
text: `<${normalizedTextAttachment.tagName}_file name="${sanitizedFileName}" mimeType="${sanitizedMimeType}">\n${normalizedTextAttachment.content}\n</${normalizedTextAttachment.tagName}_file>`,
|
|
1000
1041
|
};
|
|
1001
1042
|
}
|
|
1002
|
-
|
|
1003
|
-
throw new Error(`Unsupported attachment type: ${attachment.type}`);
|
|
1004
|
-
}
|
|
1043
|
+
throw new Error(`Unsupported attachment type: ${attachment.type}`);
|
|
1005
1044
|
}
|
|
1006
1045
|
submitAcceptanceEvaluation(wasAccepted) {
|
|
1007
1046
|
if (!this.clark.rootSpan) {
|
|
@@ -1365,7 +1404,7 @@ export class AiService extends TracedEventEmitter {
|
|
|
1365
1404
|
logger.info(`[ai-service] Tool ${toolName} permission denied, error injected into context`);
|
|
1366
1405
|
}
|
|
1367
1406
|
const llmProviderSettings = this.getLLMProviderSettings(llmConfig);
|
|
1368
|
-
const llmProvider = createLLMProvider(llmProviderSettings, () => this.clark.context.jwt || "", llmConfig);
|
|
1407
|
+
const llmProvider = createLLMProvider(llmProviderSettings, () => this.clark.context.jwt || "", llmConfig, undefined, this.config.rpcClient, this.config.superblocksBaseUrl, this.config.applicationId);
|
|
1369
1408
|
const summarizationModel = llmProvider.modelForTask("summarizeMessages");
|
|
1370
1409
|
const context = await this.contextManagerV2.getOrCreateContext(contextId, summarizationModel, llmConfig?.contextOptionsV2);
|
|
1371
1410
|
const placeholderUsage = {
|
|
@@ -1726,7 +1765,8 @@ export class AiService extends TracedEventEmitter {
|
|
|
1726
1765
|
this.config.logger.info(`[ai-service] Judge storage configured: ${path.join(storageDir, storageFilename)}`);
|
|
1727
1766
|
// Create LLM provider for judge with JWT getter
|
|
1728
1767
|
// Use getLLMProviderSettings to ensure proper configuration (including upstreamProvider)
|
|
1729
|
-
const judgeLlmProvider = createLLMProvider(this.getLLMProviderSettings(request.llmConfig), () => this.getJwt(), request.llmConfig, undefined
|
|
1768
|
+
const judgeLlmProvider = createLLMProvider(this.getLLMProviderSettings(request.llmConfig), () => this.getJwt(), request.llmConfig, undefined, // No prompt_id needed for judge evaluation
|
|
1769
|
+
this.config.rpcClient, this.config.superblocksBaseUrl, this.config.applicationId);
|
|
1730
1770
|
const judgeService = new JudgeService({
|
|
1731
1771
|
llmClient: this.llmClient,
|
|
1732
1772
|
llmProvider: judgeLlmProvider,
|
|
@@ -1810,6 +1850,73 @@ export class AiService extends TracedEventEmitter {
|
|
|
1810
1850
|
const manager = new AppSkillsManager(this.config.appRootDirPath);
|
|
1811
1851
|
return manager.toggleFact(virtualPath, isEnabled);
|
|
1812
1852
|
}
|
|
1853
|
+
/**
|
|
1854
|
+
* Move an app skill fact to org/user/integration scope.
|
|
1855
|
+
*/
|
|
1856
|
+
async moveAppFact(payload) {
|
|
1857
|
+
const manager = new AppSkillsManager(this.config.appRootDirPath);
|
|
1858
|
+
const facts = await manager.loadFacts();
|
|
1859
|
+
const sourceFact = facts.find((fact) => fact.path === payload.path);
|
|
1860
|
+
if (!sourceFact) {
|
|
1861
|
+
throw new Error(`App knowledge entry not found for path: ${payload.path}`);
|
|
1862
|
+
}
|
|
1863
|
+
const userId = parseJwt(this.clark.context.jwt ?? "")?.userId;
|
|
1864
|
+
const entityId = payload.entityId ??
|
|
1865
|
+
(payload.targetScope === "org"
|
|
1866
|
+
? this.config.organizationId
|
|
1867
|
+
: payload.targetScope === "user"
|
|
1868
|
+
? userId
|
|
1869
|
+
: undefined);
|
|
1870
|
+
if (!entityId) {
|
|
1871
|
+
throw new Error(`Missing entity id for move scope '${payload.targetScope}'`);
|
|
1872
|
+
}
|
|
1873
|
+
const entityScope = payload.targetScope === "org"
|
|
1874
|
+
? FactEntityScope.ORG
|
|
1875
|
+
: payload.targetScope === "user"
|
|
1876
|
+
? FactEntityScope.USER
|
|
1877
|
+
: FactEntityScope.INTEGRATION;
|
|
1878
|
+
let createdFactId;
|
|
1879
|
+
try {
|
|
1880
|
+
const createdFact = await this.config.rpcClient.call(async (client) => {
|
|
1881
|
+
const rpcClient = client;
|
|
1882
|
+
return await rpcClient.call.v1.fact.create({
|
|
1883
|
+
name: sourceFact.name,
|
|
1884
|
+
description: sourceFact.description,
|
|
1885
|
+
content: sourceFact.content,
|
|
1886
|
+
entityScope,
|
|
1887
|
+
entityId,
|
|
1888
|
+
accessType: FactAccessType.ALWAYS_INJECT,
|
|
1889
|
+
createdSource: FactCreatedSource.AGENT,
|
|
1890
|
+
});
|
|
1891
|
+
});
|
|
1892
|
+
createdFactId =
|
|
1893
|
+
typeof createdFact?.id === "string"
|
|
1894
|
+
? createdFact.id
|
|
1895
|
+
: typeof createdFact?.data?.id === "string"
|
|
1896
|
+
? createdFact.data.id
|
|
1897
|
+
: undefined;
|
|
1898
|
+
}
|
|
1899
|
+
catch (error) {
|
|
1900
|
+
this.getLogger().error("[ai-service] Failed to create moved knowledge fact", getErrorMeta(error));
|
|
1901
|
+
throw error;
|
|
1902
|
+
}
|
|
1903
|
+
try {
|
|
1904
|
+
await manager.deleteFact(payload.path);
|
|
1905
|
+
}
|
|
1906
|
+
catch (error) {
|
|
1907
|
+
this.getLogger().error("[ai-service] Failed to remove source app knowledge after move", getErrorMeta(error));
|
|
1908
|
+
throw new Error("Created the promoted knowledge entry, but failed to remove the original app knowledge entry.");
|
|
1909
|
+
}
|
|
1910
|
+
return {
|
|
1911
|
+
sourcePath: payload.path,
|
|
1912
|
+
createdFact: {
|
|
1913
|
+
id: createdFactId,
|
|
1914
|
+
name: sourceFact.name,
|
|
1915
|
+
scope: payload.targetScope,
|
|
1916
|
+
entityId,
|
|
1917
|
+
},
|
|
1918
|
+
};
|
|
1919
|
+
}
|
|
1813
1920
|
async handleRestoreToCommit(sinceTimestamp, commitId, applicationId, branchName) {
|
|
1814
1921
|
// TODO: change this to truncate after commit once commit info is supported here, so we can truncate messages accurately.
|
|
1815
1922
|
// 1. Truncate chat messages on server (always do this first)
|
|
@@ -1970,9 +2077,9 @@ export class AiService extends TracedEventEmitter {
|
|
|
1970
2077
|
}
|
|
1971
2078
|
return baseFetch;
|
|
1972
2079
|
};
|
|
1973
|
-
// When unified provider is enabled, use the /unified
|
|
1974
|
-
//
|
|
1975
|
-
const upstreamProvider = llconfig?.unifiedProviderEnabled
|
|
2080
|
+
// When unified provider is enabled or snowflake is selected, use the /unified
|
|
2081
|
+
// endpoint which handles provider routing and fallback server-side.
|
|
2082
|
+
const upstreamProvider = llconfig?.unifiedProviderEnabled || llconfig?.provider === "snowflake"
|
|
1976
2083
|
? "unified"
|
|
1977
2084
|
: llconfig?.provider === "vertex"
|
|
1978
2085
|
? "vertex"
|
|
@@ -1987,6 +2094,7 @@ export class AiService extends TracedEventEmitter {
|
|
|
1987
2094
|
fetch: providerFetchOverride("clark"),
|
|
1988
2095
|
upstreamProvider,
|
|
1989
2096
|
},
|
|
2097
|
+
aiFileUploadEnabled: this.isAiFileUploadEnabled,
|
|
1990
2098
|
};
|
|
1991
2099
|
}
|
|
1992
2100
|
}
|