genaicode 0.14.2 → 1.0.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/README.md +0 -7
- package/dist/ai-service/ai-studio.d.ts +2 -18
- package/dist/ai-service/ai-studio.js +87 -31
- package/dist/ai-service/ai-studio.js.map +1 -1
- package/dist/ai-service/anthropic.js +87 -45
- package/dist/ai-service/anthropic.js.map +1 -1
- package/dist/ai-service/common-types.d.ts +36 -3
- package/dist/ai-service/common-types.js +0 -2
- package/dist/ai-service/common-types.js.map +1 -1
- package/dist/ai-service/common.js +0 -2
- package/dist/ai-service/common.js.map +1 -1
- package/dist/ai-service/files-api.d.ts +33 -0
- package/dist/ai-service/files-api.js +239 -0
- package/dist/ai-service/files-api.js.map +1 -0
- package/dist/ai-service/github-models.js +0 -2
- package/dist/ai-service/github-models.js.map +1 -1
- package/dist/ai-service/local-llm.js +0 -4
- package/dist/ai-service/local-llm.js.map +1 -1
- package/dist/ai-service/openai-responses.js +62 -16
- package/dist/ai-service/openai-responses.js.map +1 -1
- package/dist/ai-service/openai.js +157 -54
- package/dist/ai-service/openai.js.map +1 -1
- package/dist/ai-service/service-configurations-types.d.ts +0 -1
- package/dist/ai-service/service-configurations.js +19 -20
- package/dist/ai-service/service-configurations.js.map +1 -1
- package/dist/ai-service/vertex-ai.js +2 -1
- package/dist/ai-service/vertex-ai.js.map +1 -1
- package/dist/cli/cli-params.js +2 -2
- package/dist/cli/cli-params.js.map +1 -1
- package/dist/index.d.ts +1 -1
- package/dist/index.js +1 -1
- package/dist/index.js.map +1 -1
- package/dist/main/codegen-types.d.ts +2 -2
- package/dist/main/codegen.d.ts +1 -3
- package/dist/main/codegen.js +2 -19
- package/dist/main/codegen.js.map +1 -1
- package/dist/main/common/content-bus-types.d.ts +14 -0
- package/dist/main/common/content-bus.d.ts +1 -1
- package/dist/main/common/content-bus.js +21 -3
- package/dist/main/common/content-bus.js.map +1 -1
- package/dist/main/common/user-actions.d.ts +1 -1
- package/dist/main/config-types.d.ts +0 -3
- package/dist/main/config-types.js.map +1 -1
- package/dist/main/config.js +1 -1
- package/dist/main/config.js.map +1 -1
- package/dist/main/generate-content-functions.d.ts +3 -0
- package/dist/main/generate-content-functions.js +19 -0
- package/dist/main/generate-content-functions.js.map +1 -0
- package/dist/main/plugin-loader.d.ts +1 -1
- package/dist/main/ui/backend/endpoints/config-endpoint.js +1 -1
- package/dist/main/ui/backend/endpoints/config-endpoint.js.map +1 -1
- package/dist/main/ui/backend/endpoints/edit-message-endpoint.js +9 -6
- package/dist/main/ui/backend/endpoints/edit-message-endpoint.js.map +1 -1
- package/dist/main/ui/backend/endpoints/generate-content-endpoint.js +2 -4
- package/dist/main/ui/backend/endpoints/generate-content-endpoint.js.map +1 -1
- package/dist/main/ui/backend/endpoints/interrupt-execution-endpoint.js +1 -1
- package/dist/main/ui/backend/endpoints/interrupt-execution-endpoint.js.map +1 -1
- package/dist/main/ui/backend/service.d.ts +5 -4
- package/dist/main/ui/backend/service.js +54 -28
- package/dist/main/ui/backend/service.js.map +1 -1
- package/dist/main/ui/common/api-types.d.ts +1 -2
- package/dist/main/ui/common/api-types.js.map +1 -1
- package/dist/main/ui/frontend/assets/index-C_k1AhO2.js +3445 -0
- package/dist/main/ui/frontend/index.html +1 -1
- package/dist/prompt/dynamic-function-generator.d.ts +2 -0
- package/dist/prompt/dynamic-function-generator.js +58 -0
- package/dist/prompt/dynamic-function-generator.js.map +1 -0
- package/dist/prompt/function-calling.js +4 -5
- package/dist/prompt/function-calling.js.map +1 -1
- package/dist/prompt/function-defs/code-execution.d.ts +7 -0
- package/dist/prompt/function-defs/code-execution.js +27 -0
- package/dist/prompt/function-defs/code-execution.js.map +1 -0
- package/dist/prompt/function-defs/conversation-graph.d.ts +1 -1
- package/dist/prompt/function-defs/conversation-graph.js +1 -1
- package/dist/prompt/function-defs/conversation-graph.js.map +1 -1
- package/dist/prompt/function-defs/iterate.d.ts +20 -0
- package/dist/prompt/function-defs/iterate.js +373 -0
- package/dist/prompt/function-defs/iterate.js.map +1 -0
- package/dist/prompt/prompt-service.js +6 -6
- package/dist/prompt/prompt-service.js.map +1 -1
- package/dist/prompt/steps/step-codegen-planning.js +6 -2
- package/dist/prompt/steps/step-codegen-planning.js.map +1 -1
- package/dist/prompt/steps/step-iterate/handlers/container-task/command-execution-loop.d.ts +7 -0
- package/dist/prompt/steps/step-iterate/handlers/container-task/command-execution-loop.js +301 -0
- package/dist/prompt/steps/step-iterate/handlers/container-task/command-execution-loop.js.map +1 -0
- package/dist/prompt/steps/step-iterate/handlers/container-task/commands/complete-task.d.ts +4 -0
- package/dist/prompt/steps/step-iterate/handlers/container-task/commands/complete-task.js +49 -0
- package/dist/prompt/steps/step-iterate/handlers/container-task/commands/complete-task.js.map +1 -0
- package/dist/prompt/steps/step-iterate/handlers/container-task/commands/copy-from-container.d.ts +4 -0
- package/dist/prompt/steps/step-iterate/handlers/container-task/commands/copy-from-container.js +190 -0
- package/dist/prompt/steps/step-iterate/handlers/container-task/commands/copy-from-container.js.map +1 -0
- package/dist/prompt/steps/step-iterate/handlers/container-task/commands/copy-to-container.d.ts +4 -0
- package/dist/prompt/steps/step-iterate/handlers/container-task/commands/copy-to-container.js +139 -0
- package/dist/prompt/steps/step-iterate/handlers/container-task/commands/copy-to-container.js.map +1 -0
- package/dist/prompt/steps/step-iterate/handlers/container-task/commands/edit-file.d.ts +10 -0
- package/dist/prompt/steps/step-iterate/handlers/container-task/commands/edit-file.js +93 -0
- package/dist/prompt/steps/step-iterate/handlers/container-task/commands/edit-file.js.map +1 -0
- package/dist/prompt/steps/step-iterate/handlers/container-task/commands/fail-task.d.ts +4 -0
- package/dist/prompt/steps/step-iterate/handlers/container-task/commands/fail-task.js +72 -0
- package/dist/prompt/steps/step-iterate/handlers/container-task/commands/fail-task.js.map +1 -0
- package/dist/prompt/steps/step-iterate/handlers/container-task/commands/gain-knowledge.d.ts +10 -0
- package/dist/prompt/steps/step-iterate/handlers/container-task/commands/gain-knowledge.js +125 -0
- package/dist/prompt/steps/step-iterate/handlers/container-task/commands/gain-knowledge.js.map +1 -0
- package/dist/prompt/steps/step-iterate/handlers/container-task/commands/interrupt-controller.d.ts +19 -0
- package/dist/prompt/steps/step-iterate/handlers/container-task/commands/interrupt-controller.js +33 -0
- package/dist/prompt/steps/step-iterate/handlers/container-task/commands/interrupt-controller.js.map +1 -0
- package/dist/prompt/steps/step-iterate/handlers/container-task/commands/query-knowledge.d.ts +8 -0
- package/dist/prompt/steps/step-iterate/handlers/container-task/commands/query-knowledge.js +85 -0
- package/dist/prompt/steps/step-iterate/handlers/container-task/commands/query-knowledge.js.map +1 -0
- package/dist/prompt/steps/step-iterate/handlers/container-task/commands/request-secret.d.ts +6 -0
- package/dist/prompt/steps/step-iterate/handlers/container-task/commands/request-secret.js +122 -0
- package/dist/prompt/steps/step-iterate/handlers/container-task/commands/request-secret.js.map +1 -0
- package/dist/prompt/steps/step-iterate/handlers/container-task/commands/run-command.d.ts +7 -0
- package/dist/prompt/steps/step-iterate/handlers/container-task/commands/run-command.js +146 -0
- package/dist/prompt/steps/step-iterate/handlers/container-task/commands/run-command.js.map +1 -0
- package/dist/prompt/steps/step-iterate/handlers/container-task/commands/send-message.d.ts +4 -0
- package/dist/prompt/steps/step-iterate/handlers/container-task/commands/send-message.js +56 -0
- package/dist/prompt/steps/step-iterate/handlers/container-task/commands/send-message.js.map +1 -0
- package/dist/prompt/steps/step-iterate/handlers/container-task/commands/set-execution-plan.d.ts +4 -0
- package/dist/prompt/steps/step-iterate/handlers/container-task/commands/set-execution-plan.js +56 -0
- package/dist/prompt/steps/step-iterate/handlers/container-task/commands/set-execution-plan.js.map +1 -0
- package/dist/prompt/steps/step-iterate/handlers/container-task/commands/update-execution-plan.d.ts +4 -0
- package/dist/prompt/steps/step-iterate/handlers/container-task/commands/update-execution-plan.js +39 -0
- package/dist/prompt/steps/step-iterate/handlers/container-task/commands/update-execution-plan.js.map +1 -0
- package/dist/prompt/steps/step-iterate/handlers/container-task/commands/view-file.d.ts +10 -0
- package/dist/prompt/steps/step-iterate/handlers/container-task/commands/view-file.js +95 -0
- package/dist/prompt/steps/step-iterate/handlers/container-task/commands/view-file.js.map +1 -0
- package/dist/prompt/steps/step-iterate/handlers/container-task/commands/web-search.d.ts +2 -0
- package/dist/prompt/steps/step-iterate/handlers/container-task/commands/web-search.js +96 -0
- package/dist/prompt/steps/step-iterate/handlers/container-task/commands/web-search.js.map +1 -0
- package/dist/prompt/steps/step-iterate/handlers/container-task/commands/wrap-context.d.ts +4 -0
- package/dist/prompt/steps/step-iterate/handlers/container-task/commands/wrap-context.js +123 -0
- package/dist/prompt/steps/step-iterate/handlers/container-task/commands/wrap-context.js.map +1 -0
- package/dist/prompt/steps/step-iterate/handlers/container-task/container-commands-registry.d.ts +11 -0
- package/dist/prompt/steps/step-iterate/handlers/container-task/container-commands-registry.js +50 -0
- package/dist/prompt/steps/step-iterate/handlers/container-task/container-commands-registry.js.map +1 -0
- package/dist/prompt/steps/step-iterate/handlers/container-task/container-commands-types.d.ts +28 -0
- package/dist/prompt/steps/step-iterate/handlers/container-task/container-commands-types.js +2 -0
- package/dist/prompt/steps/step-iterate/handlers/container-task/container-commands-types.js.map +1 -0
- package/dist/prompt/steps/step-iterate/handlers/container-task/container-task-orchestrator.d.ts +2 -0
- package/dist/prompt/steps/step-iterate/handlers/container-task/container-task-orchestrator.js +202 -0
- package/dist/prompt/steps/step-iterate/handlers/container-task/container-task-orchestrator.js.map +1 -0
- package/dist/prompt/steps/step-iterate/handlers/container-task/utils/docker-check.d.ts +4 -0
- package/dist/prompt/steps/step-iterate/handlers/container-task/utils/docker-check.js +15 -0
- package/dist/prompt/steps/step-iterate/handlers/container-task/utils/docker-check.js.map +1 -0
- package/dist/prompt/steps/step-iterate/handlers/container-task/utils/docker-utils.d.ts +50 -0
- package/dist/prompt/steps/step-iterate/handlers/container-task/utils/docker-utils.js +358 -0
- package/dist/prompt/steps/step-iterate/handlers/container-task/utils/docker-utils.js.map +1 -0
- package/dist/prompt/steps/step-iterate/handlers/file-request-utils.d.ts +47 -0
- package/dist/prompt/steps/step-iterate/handlers/file-request-utils.js +114 -0
- package/dist/prompt/steps/step-iterate/handlers/file-request-utils.js.map +1 -0
- package/dist/prompt/steps/step-iterate/handlers/handle-code-execution.d.ts +1 -0
- package/dist/prompt/steps/step-iterate/handlers/handle-code-execution.js +133 -0
- package/dist/prompt/steps/step-iterate/handlers/handle-code-execution.js.map +1 -0
- package/dist/prompt/steps/step-iterate/handlers/handle-code-generation.d.ts +4 -0
- package/dist/prompt/steps/step-iterate/handlers/handle-code-generation.js +177 -0
- package/dist/prompt/steps/step-iterate/handlers/handle-code-generation.js.map +1 -0
- package/dist/prompt/steps/step-iterate/handlers/handle-compound-action.d.ts +20 -0
- package/dist/prompt/steps/step-iterate/handlers/handle-compound-action.js +305 -0
- package/dist/prompt/steps/step-iterate/handlers/handle-compound-action.js.map +1 -0
- package/dist/prompt/steps/step-iterate/handlers/handle-confirm-code-generation.d.ts +2 -0
- package/dist/prompt/steps/step-iterate/handlers/handle-confirm-code-generation.js +40 -0
- package/dist/prompt/steps/step-iterate/handlers/handle-confirm-code-generation.js.map +1 -0
- package/dist/prompt/steps/step-iterate/handlers/handle-context-compression.d.ts +2 -0
- package/dist/prompt/steps/step-iterate/handlers/handle-context-compression.js +35 -0
- package/dist/prompt/steps/step-iterate/handlers/handle-context-compression.js.map +1 -0
- package/dist/prompt/steps/step-iterate/handlers/handle-context-optimization.d.ts +2 -0
- package/dist/prompt/steps/step-iterate/handlers/handle-context-optimization.js +34 -0
- package/dist/prompt/steps/step-iterate/handlers/handle-context-optimization.js.map +1 -0
- package/dist/prompt/steps/step-iterate/handlers/handle-conversation-graph.d.ts +11 -0
- package/dist/prompt/steps/step-iterate/handlers/handle-conversation-graph.js +503 -0
- package/dist/prompt/steps/step-iterate/handlers/handle-conversation-graph.js.map +1 -0
- package/dist/prompt/steps/step-iterate/handlers/handle-create-file.d.ts +2 -0
- package/dist/prompt/steps/step-iterate/handlers/handle-create-file.js +159 -0
- package/dist/prompt/steps/step-iterate/handlers/handle-create-file.js.map +1 -0
- package/dist/prompt/steps/step-iterate/handlers/handle-end-conversation.d.ts +2 -0
- package/dist/prompt/steps/step-iterate/handlers/handle-end-conversation.js +30 -0
- package/dist/prompt/steps/step-iterate/handlers/handle-end-conversation.js.map +1 -0
- package/dist/prompt/steps/step-iterate/handlers/handle-explore-external-directories.d.ts +2 -0
- package/dist/prompt/steps/step-iterate/handlers/handle-explore-external-directories.js +280 -0
- package/dist/prompt/steps/step-iterate/handlers/handle-explore-external-directories.js.map +1 -0
- package/dist/prompt/steps/step-iterate/handlers/handle-genaicode-help.d.ts +8 -0
- package/dist/prompt/steps/step-iterate/handlers/handle-genaicode-help.js +105 -0
- package/dist/prompt/steps/step-iterate/handlers/handle-genaicode-help.js.map +1 -0
- package/dist/prompt/steps/step-iterate/handlers/handle-generate-image.d.ts +2 -0
- package/dist/prompt/steps/step-iterate/handlers/handle-generate-image.js +110 -0
- package/dist/prompt/steps/step-iterate/handlers/handle-generate-image.js.map +1 -0
- package/dist/prompt/steps/step-iterate/handlers/handle-perform-analysis.d.ts +6 -0
- package/dist/prompt/steps/step-iterate/handlers/handle-perform-analysis.js +110 -0
- package/dist/prompt/steps/step-iterate/handlers/handle-perform-analysis.js.map +1 -0
- package/dist/prompt/steps/step-iterate/handlers/handle-project-command.d.ts +2 -0
- package/dist/prompt/steps/step-iterate/handlers/handle-project-command.js +280 -0
- package/dist/prompt/steps/step-iterate/handlers/handle-project-command.js.map +1 -0
- package/dist/prompt/steps/step-iterate/handlers/handle-pull-app-context.d.ts +9 -0
- package/dist/prompt/steps/step-iterate/handlers/handle-pull-app-context.js +94 -0
- package/dist/prompt/steps/step-iterate/handlers/handle-pull-app-context.js.map +1 -0
- package/dist/prompt/steps/step-iterate/handlers/handle-pull-console-logs.d.ts +2 -0
- package/dist/prompt/steps/step-iterate/handlers/handle-pull-console-logs.js +174 -0
- package/dist/prompt/steps/step-iterate/handlers/handle-pull-console-logs.js.map +1 -0
- package/dist/prompt/steps/step-iterate/handlers/handle-push-app-context.d.ts +9 -0
- package/dist/prompt/steps/step-iterate/handlers/handle-push-app-context.js +104 -0
- package/dist/prompt/steps/step-iterate/handlers/handle-push-app-context.js.map +1 -0
- package/dist/prompt/steps/step-iterate/handlers/handle-read-external-files.d.ts +2 -0
- package/dist/prompt/steps/step-iterate/handlers/handle-read-external-files.js +149 -0
- package/dist/prompt/steps/step-iterate/handlers/handle-read-external-files.js.map +1 -0
- package/dist/prompt/steps/step-iterate/handlers/handle-reasoning-inference.d.ts +7 -0
- package/dist/prompt/steps/step-iterate/handlers/handle-reasoning-inference.js +119 -0
- package/dist/prompt/steps/step-iterate/handlers/handle-reasoning-inference.js.map +1 -0
- package/dist/prompt/steps/step-iterate/handlers/handle-remove-files-from-context.d.ts +2 -0
- package/dist/prompt/steps/step-iterate/handlers/handle-remove-files-from-context.js +100 -0
- package/dist/prompt/steps/step-iterate/handlers/handle-remove-files-from-context.js.map +1 -0
- package/dist/prompt/steps/step-iterate/handlers/handle-request-files-content.d.ts +8 -0
- package/dist/prompt/steps/step-iterate/handlers/handle-request-files-content.js +146 -0
- package/dist/prompt/steps/step-iterate/handlers/handle-request-files-content.js.map +1 -0
- package/dist/prompt/steps/step-iterate/handlers/handle-request-files-fragments.d.ts +8 -0
- package/dist/prompt/steps/step-iterate/handlers/handle-request-files-fragments.js +197 -0
- package/dist/prompt/steps/step-iterate/handlers/handle-request-files-fragments.js.map +1 -0
- package/dist/prompt/steps/step-iterate/handlers/handle-request-git-context.d.ts +3 -0
- package/dist/prompt/steps/step-iterate/handlers/handle-request-git-context.js +251 -0
- package/dist/prompt/steps/step-iterate/handlers/handle-request-git-context.js.map +1 -0
- package/dist/prompt/steps/step-iterate/handlers/handle-request-permissions.d.ts +2 -0
- package/dist/prompt/steps/step-iterate/handlers/handle-request-permissions.js +83 -0
- package/dist/prompt/steps/step-iterate/handlers/handle-request-permissions.js.map +1 -0
- package/dist/prompt/steps/step-iterate/handlers/handle-run-bash-command.d.ts +2 -0
- package/dist/prompt/steps/step-iterate/handlers/handle-run-bash-command.js +185 -0
- package/dist/prompt/steps/step-iterate/handlers/handle-run-bash-command.js.map +1 -0
- package/dist/prompt/steps/step-iterate/handlers/handle-run-container-task.d.ts +2 -0
- package/dist/prompt/steps/step-iterate/handlers/handle-run-container-task.js +7 -0
- package/dist/prompt/steps/step-iterate/handlers/handle-run-container-task.js.map +1 -0
- package/dist/prompt/steps/step-iterate/handlers/handle-search-code.d.ts +2 -0
- package/dist/prompt/steps/step-iterate/handlers/handle-search-code.js +96 -0
- package/dist/prompt/steps/step-iterate/handlers/handle-search-code.js.map +1 -0
- package/dist/prompt/steps/step-iterate/handlers/handle-send-message.d.ts +2 -0
- package/dist/prompt/steps/step-iterate/handlers/handle-send-message.js +21 -0
- package/dist/prompt/steps/step-iterate/handlers/handle-send-message.js.map +1 -0
- package/dist/prompt/steps/step-iterate/handlers/handle-structured-question.d.ts +1 -0
- package/dist/prompt/steps/step-iterate/handlers/handle-structured-question.js +72 -0
- package/dist/prompt/steps/step-iterate/handlers/handle-structured-question.js.map +1 -0
- package/dist/prompt/steps/step-iterate/handlers/handle-update-file.d.ts +2 -0
- package/dist/prompt/steps/step-iterate/handlers/handle-update-file.js +161 -0
- package/dist/prompt/steps/step-iterate/handlers/handle-update-file.js.map +1 -0
- package/dist/prompt/steps/step-iterate/handlers/handle-web-search.d.ts +1 -0
- package/dist/prompt/steps/step-iterate/handlers/handle-web-search.js +85 -0
- package/dist/prompt/steps/step-iterate/handlers/handle-web-search.js.map +1 -0
- package/dist/prompt/steps/step-iterate/iterate-handler.d.ts +4 -0
- package/dist/prompt/steps/step-iterate/iterate-handler.js +14 -0
- package/dist/prompt/steps/step-iterate/iterate-handler.js.map +1 -0
- package/dist/prompt/steps/step-iterate/step-iterate-handlers.d.ts +3 -0
- package/dist/prompt/steps/step-iterate/step-iterate-handlers.js +5 -0
- package/dist/prompt/steps/step-iterate/step-iterate-handlers.js.map +1 -0
- package/dist/prompt/steps/step-iterate/step-iterate-types.d.ts +255 -0
- package/dist/prompt/steps/step-iterate/step-iterate-types.js +2 -0
- package/dist/prompt/steps/step-iterate/step-iterate-types.js.map +1 -0
- package/dist/prompt/steps/step-iterate/step-iterate.d.ts +37 -0
- package/dist/prompt/steps/step-iterate/step-iterate.js +132 -0
- package/dist/prompt/steps/step-iterate/step-iterate.js.map +1 -0
- package/dist/prompt/systemprompt.js +6 -6
- package/dist/prompt/systemprompt.js.map +1 -1
- package/dist/vite-genaicode/code-transformer.d.ts +5 -0
- package/dist/vite-genaicode/code-transformer.js +83 -0
- package/dist/vite-genaicode/code-transformer.js.map +1 -0
- package/dist/vite-genaicode/console-interceptor.d.ts +19 -6
- package/dist/vite-genaicode/console-interceptor.js +45 -13
- package/dist/vite-genaicode/console-interceptor.js.map +1 -1
- package/dist/vite-genaicode/constants.d.ts +3 -0
- package/dist/vite-genaicode/constants.js +4 -0
- package/dist/vite-genaicode/constants.js.map +1 -0
- package/dist/vite-genaicode/dynamic-function-generator.d.ts +2 -0
- package/dist/vite-genaicode/dynamic-function-generator.js +47 -0
- package/dist/vite-genaicode/dynamic-function-generator.js.map +1 -0
- package/dist/vite-genaicode/html-injector.d.ts +6 -0
- package/dist/vite-genaicode/html-injector.js +14 -0
- package/dist/vite-genaicode/html-injector.js.map +1 -0
- package/dist/vite-genaicode/server-manager.d.ts +26 -0
- package/dist/vite-genaicode/server-manager.js +91 -0
- package/dist/vite-genaicode/server-manager.js.map +1 -0
- package/dist/vite-genaicode/vite-genaicode-frontend.js +1 -1
- package/dist/vite-genaicode/vite-genaicode-frontend.js.map +1 -1
- package/dist/vite-genaicode/vite-genaicode-plugin.d.ts +11 -2
- package/dist/vite-genaicode/vite-genaicode-plugin.js +60 -65
- package/dist/vite-genaicode/vite-genaicode-plugin.js.map +1 -1
- package/package.json +10 -9
- package/dist/main/ui/frontend/assets/index-We_MLSaC.js +0 -3405
|
@@ -0,0 +1,125 @@
|
|
|
1
|
+
import { ModelType } from '../../../../../../ai-service/common-types.js';
|
|
2
|
+
import { appendKnowledge, getKnowledgeBase, knowledgeContextDef, } from '../../../../../../main/knowledge/knowledge-store.js';
|
|
3
|
+
import { putContainerLog } from '../../../../../../main/common/content-bus.js';
|
|
4
|
+
export const gainKnowledgeDef = {
|
|
5
|
+
name: 'gainKnowledge',
|
|
6
|
+
description: `Persist a new knowledge entry capturing a prompt, its answer/insight, and optional tags/metadata. Use this to record successful operations, solutions to problems, or any other valuable information that could help in future tasks. Avoid storing secrets.
|
|
7
|
+
Before calling this function make sure to check if the information you want to store not exists already in the knowledge base using queryKnowledge tool.`,
|
|
8
|
+
parameters: {
|
|
9
|
+
type: 'object',
|
|
10
|
+
properties: {
|
|
11
|
+
prompt: {
|
|
12
|
+
type: 'string',
|
|
13
|
+
description: 'The problem, question, or description of the situation.',
|
|
14
|
+
},
|
|
15
|
+
answer: {
|
|
16
|
+
type: 'string',
|
|
17
|
+
description: 'The validated solution, insight, or outcome.',
|
|
18
|
+
},
|
|
19
|
+
metadata: {
|
|
20
|
+
type: 'object',
|
|
21
|
+
description: 'Optional structured data, e.g., { "exitCode": 0, "relevantFile": "package.json" }.',
|
|
22
|
+
},
|
|
23
|
+
explanation: {
|
|
24
|
+
type: 'string',
|
|
25
|
+
description: 'A brief explanation of why this knowledge is valuable to store.',
|
|
26
|
+
},
|
|
27
|
+
knowledgeType: {
|
|
28
|
+
type: 'string',
|
|
29
|
+
description: 'The type of knowledge being captured',
|
|
30
|
+
enum: ['project specific', 'general', 'docker quirks', 'other'],
|
|
31
|
+
},
|
|
32
|
+
},
|
|
33
|
+
required: ['prompt', 'answer', 'explanation', 'knowledgeType'],
|
|
34
|
+
},
|
|
35
|
+
};
|
|
36
|
+
export async function handleGainKnowledge(props) {
|
|
37
|
+
const { actionResult, taskExecutionPrompt } = props;
|
|
38
|
+
const args = actionResult.args;
|
|
39
|
+
taskExecutionPrompt.push({
|
|
40
|
+
type: 'assistant',
|
|
41
|
+
functionCalls: [actionResult],
|
|
42
|
+
});
|
|
43
|
+
try {
|
|
44
|
+
const newEntry = await appendKnowledge(args);
|
|
45
|
+
const message = `Successfully added knowledge entry ${newEntry.id}.`;
|
|
46
|
+
putContainerLog('info', message, newEntry);
|
|
47
|
+
taskExecutionPrompt.push({
|
|
48
|
+
type: 'user',
|
|
49
|
+
functionResponses: [
|
|
50
|
+
{
|
|
51
|
+
name: actionResult.name,
|
|
52
|
+
call_id: actionResult.id,
|
|
53
|
+
content: JSON.stringify({ id: newEntry.id, success: true }),
|
|
54
|
+
},
|
|
55
|
+
],
|
|
56
|
+
});
|
|
57
|
+
}
|
|
58
|
+
catch (error) {
|
|
59
|
+
const errorMessage = error instanceof Error ? error.message : String(error);
|
|
60
|
+
putContainerLog('error', `Failed to add knowledge entry: ${errorMessage}`, {
|
|
61
|
+
error,
|
|
62
|
+
});
|
|
63
|
+
taskExecutionPrompt.push({
|
|
64
|
+
type: 'user',
|
|
65
|
+
functionResponses: [
|
|
66
|
+
{
|
|
67
|
+
name: actionResult.name,
|
|
68
|
+
call_id: actionResult.id,
|
|
69
|
+
content: `Failed to add knowledge entry: ${errorMessage}`,
|
|
70
|
+
},
|
|
71
|
+
],
|
|
72
|
+
});
|
|
73
|
+
}
|
|
74
|
+
}
|
|
75
|
+
export async function maybeGainKnowledge(props) {
|
|
76
|
+
const { generateContentFn, taskExecutionPrompt } = props;
|
|
77
|
+
try {
|
|
78
|
+
const knowledgeBase = await getKnowledgeBase();
|
|
79
|
+
const corpus = knowledgeBase.map(({ id, prompt, answer }) => ({ id, prompt, answer }));
|
|
80
|
+
const response = await generateContentFn([
|
|
81
|
+
props.systemPrompt,
|
|
82
|
+
props.taskPrompt,
|
|
83
|
+
...taskExecutionPrompt,
|
|
84
|
+
{
|
|
85
|
+
type: 'assistant',
|
|
86
|
+
functionCalls: [
|
|
87
|
+
{
|
|
88
|
+
name: knowledgeContextDef.name,
|
|
89
|
+
args: {},
|
|
90
|
+
},
|
|
91
|
+
],
|
|
92
|
+
},
|
|
93
|
+
{
|
|
94
|
+
type: 'user',
|
|
95
|
+
functionResponses: [
|
|
96
|
+
{
|
|
97
|
+
name: knowledgeContextDef.name,
|
|
98
|
+
content: JSON.stringify({ corpus }),
|
|
99
|
+
},
|
|
100
|
+
],
|
|
101
|
+
},
|
|
102
|
+
], {
|
|
103
|
+
modelType: ModelType.DEFAULT,
|
|
104
|
+
temperature: 0.2,
|
|
105
|
+
functionDefs: [knowledgeContextDef, gainKnowledgeDef],
|
|
106
|
+
requiredFunctionName: gainKnowledgeDef.name,
|
|
107
|
+
expectedResponseType: {
|
|
108
|
+
text: false,
|
|
109
|
+
functionCall: true,
|
|
110
|
+
},
|
|
111
|
+
}, { disableCache: true });
|
|
112
|
+
const gainKnowledgeCall = response.find((part) => part.type === 'functionCall')?.functionCall;
|
|
113
|
+
if (gainKnowledgeCall?.name !== 'gainKnowledge') {
|
|
114
|
+
putContainerLog('info', 'No knowledge gain needed based on current context.');
|
|
115
|
+
return;
|
|
116
|
+
}
|
|
117
|
+
// Intentionally not awaiting this
|
|
118
|
+
handleGainKnowledge({ ...props, actionResult: gainKnowledgeCall });
|
|
119
|
+
}
|
|
120
|
+
catch (error) {
|
|
121
|
+
const errorMessage = error instanceof Error ? error.message : String(error);
|
|
122
|
+
putContainerLog('error', 'Error during maybeGainKnowledge execution', { error: errorMessage });
|
|
123
|
+
}
|
|
124
|
+
}
|
|
125
|
+
//# sourceMappingURL=gain-knowledge.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"gain-knowledge.js","sourceRoot":"","sources":["../../../../../../../src/prompt/steps/step-iterate/handlers/container-task/commands/gain-knowledge.ts"],"names":[],"mappings":"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"}
|
package/dist/prompt/steps/step-iterate/handlers/container-task/commands/interrupt-controller.d.ts
ADDED
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Requests an interrupt for the current container command.
|
|
3
|
+
* @returns An object indicating whether the interrupt request was accepted.
|
|
4
|
+
*/
|
|
5
|
+
export declare function requestInterrupt(): {
|
|
6
|
+
accepted: boolean;
|
|
7
|
+
};
|
|
8
|
+
/**
|
|
9
|
+
* Sets a listener for when an interrupt is requested.
|
|
10
|
+
* @param fn The function to call when an interrupt is requested.
|
|
11
|
+
* @returns A function to remove the listener.
|
|
12
|
+
*/
|
|
13
|
+
export declare function onInterruptRequested(fn: () => void): () => void;
|
|
14
|
+
/**
|
|
15
|
+
* Checks if an interrupt has been requested.
|
|
16
|
+
* @returns True if an interrupt has been requested, false otherwise.
|
|
17
|
+
*/
|
|
18
|
+
export declare function isInterrupted(): boolean;
|
|
19
|
+
export declare function clearInterruption(): void;
|
package/dist/prompt/steps/step-iterate/handlers/container-task/commands/interrupt-controller.js
ADDED
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
import { putContainerLog } from '../../../../../../main/common/content-bus.js';
|
|
2
|
+
let interruptionController = new AbortController();
|
|
3
|
+
/**
|
|
4
|
+
* Requests an interrupt for the current container command.
|
|
5
|
+
* @returns An object indicating whether the interrupt request was accepted.
|
|
6
|
+
*/
|
|
7
|
+
export function requestInterrupt() {
|
|
8
|
+
putContainerLog('warn', `User requested to interrupt current command.`);
|
|
9
|
+
interruptionController.abort();
|
|
10
|
+
return { accepted: true };
|
|
11
|
+
}
|
|
12
|
+
/**
|
|
13
|
+
* Sets a listener for when an interrupt is requested.
|
|
14
|
+
* @param fn The function to call when an interrupt is requested.
|
|
15
|
+
* @returns A function to remove the listener.
|
|
16
|
+
*/
|
|
17
|
+
export function onInterruptRequested(fn) {
|
|
18
|
+
interruptionController.signal.addEventListener('abort', fn);
|
|
19
|
+
return () => {
|
|
20
|
+
interruptionController.signal.removeEventListener('abort', fn);
|
|
21
|
+
};
|
|
22
|
+
}
|
|
23
|
+
/**
|
|
24
|
+
* Checks if an interrupt has been requested.
|
|
25
|
+
* @returns True if an interrupt has been requested, false otherwise.
|
|
26
|
+
*/
|
|
27
|
+
export function isInterrupted() {
|
|
28
|
+
return interruptionController.signal.aborted;
|
|
29
|
+
}
|
|
30
|
+
export function clearInterruption() {
|
|
31
|
+
interruptionController = new AbortController();
|
|
32
|
+
}
|
|
33
|
+
//# sourceMappingURL=interrupt-controller.js.map
|
package/dist/prompt/steps/step-iterate/handlers/container-task/commands/interrupt-controller.js.map
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"interrupt-controller.js","sourceRoot":"","sources":["../../../../../../../src/prompt/steps/step-iterate/handlers/container-task/commands/interrupt-controller.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,eAAe,EAAE,MAAM,8CAA8C,CAAC;AAE/E,IAAI,sBAAsB,GAAG,IAAI,eAAe,EAAE,CAAC;AAEnD;;;GAGG;AACH,MAAM,UAAU,gBAAgB;IAC9B,eAAe,CAAC,MAAM,EAAE,8CAA8C,CAAC,CAAC;IAExE,sBAAsB,CAAC,KAAK,EAAE,CAAC;IAE/B,OAAO,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC;AAC5B,CAAC;AAED;;;;GAIG;AACH,MAAM,UAAU,oBAAoB,CAAC,EAAc;IACjD,sBAAsB,CAAC,MAAM,CAAC,gBAAgB,CAAC,OAAO,EAAE,EAAE,CAAC,CAAC;IAC5D,OAAO,GAAG,EAAE;QACV,sBAAsB,CAAC,MAAM,CAAC,mBAAmB,CAAC,OAAO,EAAE,EAAE,CAAC,CAAC;IACjE,CAAC,CAAC;AACJ,CAAC;AAED;;;GAGG;AACH,MAAM,UAAU,aAAa;IAC3B,OAAO,sBAAsB,CAAC,MAAM,CAAC,OAAO,CAAC;AAC/C,CAAC;AAED,MAAM,UAAU,iBAAiB;IAC/B,sBAAsB,GAAG,IAAI,eAAe,EAAE,CAAC;AACjD,CAAC"}
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
import { FunctionDef, PromptItem } from '../../../../../../ai-service/common-types.js';
|
|
2
|
+
import { CommandHandlerResult, CommandHandlerBaseProps } from '../container-commands-types.js';
|
|
3
|
+
export declare const queryKnowledgeDef: FunctionDef;
|
|
4
|
+
export declare function handleQueryKnowledge(props: CommandHandlerBaseProps): Promise<CommandHandlerResult>;
|
|
5
|
+
export declare function maybeQueryKnowledge(props: CommandHandlerBaseProps & {
|
|
6
|
+
systemPrompt: PromptItem;
|
|
7
|
+
taskPrompt: PromptItem;
|
|
8
|
+
}): Promise<CommandHandlerResult>;
|
|
@@ -0,0 +1,85 @@
|
|
|
1
|
+
import { ModelType } from '../../../../../../ai-service/common-types.js';
|
|
2
|
+
import { queryKnowledge } from '../../../../../../main/knowledge/knowledge-store.js';
|
|
3
|
+
import { putContainerLog } from '../../../../../../main/common/content-bus.js';
|
|
4
|
+
export const queryKnowledgeDef = {
|
|
5
|
+
name: 'queryKnowledge',
|
|
6
|
+
description: 'Query the knowledge base with a natural language prompt to find relevant information from past tasks. Use this to check for existing solutions before attempting a complex step.',
|
|
7
|
+
parameters: {
|
|
8
|
+
type: 'object',
|
|
9
|
+
properties: {
|
|
10
|
+
query: {
|
|
11
|
+
type: 'string',
|
|
12
|
+
description: 'The natural language question to ask the knowledge base.',
|
|
13
|
+
},
|
|
14
|
+
explanation: {
|
|
15
|
+
type: 'string',
|
|
16
|
+
description: 'A brief explanation of what you are trying to find and why.',
|
|
17
|
+
},
|
|
18
|
+
},
|
|
19
|
+
required: ['query', 'explanation'],
|
|
20
|
+
},
|
|
21
|
+
};
|
|
22
|
+
export async function handleQueryKnowledge(props) {
|
|
23
|
+
const { generateContentFn, taskExecutionPrompt, actionResult } = props;
|
|
24
|
+
const args = actionResult.args;
|
|
25
|
+
try {
|
|
26
|
+
const results = await queryKnowledge(args, generateContentFn);
|
|
27
|
+
const message = results.synthesizedResponse && results.sourceEntries?.length
|
|
28
|
+
? `Found relevant knowledge entries.`
|
|
29
|
+
: `No relevant knowledge found.`;
|
|
30
|
+
putContainerLog('info', message, { query: args.query, results: results });
|
|
31
|
+
taskExecutionPrompt.push({
|
|
32
|
+
type: 'assistant',
|
|
33
|
+
functionCalls: [actionResult],
|
|
34
|
+
}, {
|
|
35
|
+
type: 'user',
|
|
36
|
+
functionResponses: [
|
|
37
|
+
{
|
|
38
|
+
name: actionResult.name,
|
|
39
|
+
call_id: actionResult.id,
|
|
40
|
+
content: JSON.stringify(results),
|
|
41
|
+
},
|
|
42
|
+
],
|
|
43
|
+
});
|
|
44
|
+
}
|
|
45
|
+
catch (error) {
|
|
46
|
+
const errorMessage = error instanceof Error ? error.message : String(error);
|
|
47
|
+
putContainerLog('error', `Failed to query knowledge base: ${errorMessage}`, { error });
|
|
48
|
+
taskExecutionPrompt.push({
|
|
49
|
+
type: 'assistant',
|
|
50
|
+
functionCalls: [actionResult],
|
|
51
|
+
}, {
|
|
52
|
+
type: 'user',
|
|
53
|
+
functionResponses: [
|
|
54
|
+
{
|
|
55
|
+
name: actionResult.name,
|
|
56
|
+
call_id: actionResult.id,
|
|
57
|
+
content: `Failed to query knowledge base: ${errorMessage}`,
|
|
58
|
+
},
|
|
59
|
+
],
|
|
60
|
+
});
|
|
61
|
+
}
|
|
62
|
+
}
|
|
63
|
+
export async function maybeQueryKnowledge(props) {
|
|
64
|
+
const { generateContentFn, taskExecutionPrompt } = props;
|
|
65
|
+
try {
|
|
66
|
+
const response = await generateContentFn([props.systemPrompt, props.taskPrompt, ...taskExecutionPrompt], {
|
|
67
|
+
modelType: ModelType.LITE,
|
|
68
|
+
temperature: 0.2,
|
|
69
|
+
functionDefs: [queryKnowledgeDef],
|
|
70
|
+
requiredFunctionName: 'queryKnowledge',
|
|
71
|
+
expectedResponseType: { functionCall: true, text: false, media: false },
|
|
72
|
+
}, { disableCache: true });
|
|
73
|
+
const functionCall = response.find((part) => part.type === 'functionCall')?.functionCall;
|
|
74
|
+
if (functionCall?.name !== 'queryKnowledge') {
|
|
75
|
+
putContainerLog('warn', 'maybeQueryKnowledge: LLM did not produce a valid queryKnowledge function call.');
|
|
76
|
+
return;
|
|
77
|
+
}
|
|
78
|
+
return await handleQueryKnowledge({ ...props, actionResult: functionCall });
|
|
79
|
+
}
|
|
80
|
+
catch (error) {
|
|
81
|
+
const errorMessage = error instanceof Error ? error.message : String(error);
|
|
82
|
+
putContainerLog('error', 'Error during maybeQueryKnowledge execution', { error: errorMessage });
|
|
83
|
+
}
|
|
84
|
+
}
|
|
85
|
+
//# sourceMappingURL=query-knowledge.js.map
|
package/dist/prompt/steps/step-iterate/handlers/container-task/commands/query-knowledge.js.map
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"query-knowledge.js","sourceRoot":"","sources":["../../../../../../../src/prompt/steps/step-iterate/handlers/container-task/commands/query-knowledge.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
import { FunctionDef, PromptItem } from '../../../../../../ai-service/common-types.js';
|
|
2
|
+
import { CommandHandlerBaseProps, CommandHandlerResult } from '../container-commands-types.js';
|
|
3
|
+
export declare const requestSecretDef: FunctionDef;
|
|
4
|
+
export declare function sanitizePrompt(prompt: PromptItem[]): PromptItem[];
|
|
5
|
+
export declare function registerSecret(secret: string): void;
|
|
6
|
+
export declare function handleRequestSecret(props: CommandHandlerBaseProps): Promise<CommandHandlerResult>;
|
|
@@ -0,0 +1,122 @@
|
|
|
1
|
+
import path from 'path';
|
|
2
|
+
import { putAssistantMessage, putContainerLog, putSystemMessage } from '../../../../../../main/common/content-bus.js';
|
|
3
|
+
import { askUserForSecret } from '../../../../../../main/common/user-actions.js';
|
|
4
|
+
import { executeCommand } from '../utils/docker-utils.js';
|
|
5
|
+
export const requestSecretDef = {
|
|
6
|
+
name: 'requestSecret',
|
|
7
|
+
description: 'Requests a secret value from the user (e.g., API key). The value is then written to a specified file path inside the container. The secret value itself is NOT added to the conversation history for security.',
|
|
8
|
+
parameters: {
|
|
9
|
+
type: 'object',
|
|
10
|
+
properties: {
|
|
11
|
+
reasoning: {
|
|
12
|
+
type: 'string',
|
|
13
|
+
description: 'Explanation of why this secret is needed for the task.',
|
|
14
|
+
},
|
|
15
|
+
key: {
|
|
16
|
+
type: 'string',
|
|
17
|
+
description: 'A short, descriptive name for the secret being requested (e.g., "OPENAI_API_KEY").',
|
|
18
|
+
},
|
|
19
|
+
description: {
|
|
20
|
+
type: 'string',
|
|
21
|
+
description: 'A user-friendly message explaining what secret is needed (e.g., "Please enter your OpenAI API key.").',
|
|
22
|
+
},
|
|
23
|
+
destinationFilePath: {
|
|
24
|
+
type: 'string',
|
|
25
|
+
description: 'The absolute path inside the container where the secret should be saved (e.g., "/root/.config/openai/credentials").',
|
|
26
|
+
},
|
|
27
|
+
},
|
|
28
|
+
required: ['reasoning', 'key', 'description', 'destinationFilePath'],
|
|
29
|
+
},
|
|
30
|
+
};
|
|
31
|
+
const secretsRegistry = [];
|
|
32
|
+
export function sanitizePrompt(prompt) {
|
|
33
|
+
let json = JSON.stringify(prompt);
|
|
34
|
+
for (const secret of secretsRegistry) {
|
|
35
|
+
const escapedSecret = secret.replace(/[-/\\^$*+?.()|[\]{}]/g, '\\$&');
|
|
36
|
+
const regex = new RegExp(escapedSecret, 'g');
|
|
37
|
+
json = json.replace(regex, '[REDACTED]');
|
|
38
|
+
}
|
|
39
|
+
return JSON.parse(json);
|
|
40
|
+
}
|
|
41
|
+
export function registerSecret(secret) {
|
|
42
|
+
if (!secretsRegistry.includes(secret)) {
|
|
43
|
+
secretsRegistry.push(secret);
|
|
44
|
+
}
|
|
45
|
+
}
|
|
46
|
+
export async function handleRequestSecret(props) {
|
|
47
|
+
const { actionResult, taskExecutionPrompt, container } = props;
|
|
48
|
+
const args = actionResult.args;
|
|
49
|
+
const { reasoning, key, description, destinationFilePath } = args;
|
|
50
|
+
putContainerLog('info', `Requesting secret: ${reasoning}`, args, 'command');
|
|
51
|
+
const secretValue = await askUserForSecret(description);
|
|
52
|
+
putAssistantMessage(description);
|
|
53
|
+
if (secretValue) {
|
|
54
|
+
putSystemMessage('Secret received. Writing to container...');
|
|
55
|
+
registerSecret(secretValue);
|
|
56
|
+
try {
|
|
57
|
+
const dirname = path.dirname(destinationFilePath);
|
|
58
|
+
const mkdirResult = await executeCommand(container, '/bin/sh', `mkdir -p "${dirname}"`, undefined, '/');
|
|
59
|
+
if (mkdirResult.exitCode !== 0) {
|
|
60
|
+
throw new Error(`Failed to create directory ${dirname}: ${mkdirResult.output}`);
|
|
61
|
+
}
|
|
62
|
+
const command = `tee "${destinationFilePath}"`;
|
|
63
|
+
const result = await executeCommand(container, '/bin/sh', command, secretValue, '/');
|
|
64
|
+
if (result.exitCode !== 0) {
|
|
65
|
+
throw new Error(`Failed to write secret to file: ${result.output}`);
|
|
66
|
+
}
|
|
67
|
+
putContainerLog('success', `Secret "${key}" received and saved to ${destinationFilePath}.`);
|
|
68
|
+
taskExecutionPrompt.push({
|
|
69
|
+
type: 'assistant',
|
|
70
|
+
text: `Requesting secret with reasoning: ${reasoning}`,
|
|
71
|
+
functionCalls: [actionResult],
|
|
72
|
+
}, {
|
|
73
|
+
type: 'user',
|
|
74
|
+
functionResponses: [
|
|
75
|
+
{
|
|
76
|
+
name: actionResult.name,
|
|
77
|
+
call_id: actionResult.id || undefined,
|
|
78
|
+
content: `Secret for key "${key}" has been provided by the user and saved to ${destinationFilePath}.`,
|
|
79
|
+
},
|
|
80
|
+
],
|
|
81
|
+
});
|
|
82
|
+
}
|
|
83
|
+
catch (error) {
|
|
84
|
+
const errorMessage = error instanceof Error ? error.message : String(error);
|
|
85
|
+
putContainerLog('error', `Failed to save secret for key "${key}": ${errorMessage}`);
|
|
86
|
+
taskExecutionPrompt.push({
|
|
87
|
+
type: 'assistant',
|
|
88
|
+
text: `Requesting secret with reasoning: ${reasoning}`,
|
|
89
|
+
functionCalls: [actionResult],
|
|
90
|
+
}, {
|
|
91
|
+
type: 'user',
|
|
92
|
+
functionResponses: [
|
|
93
|
+
{
|
|
94
|
+
name: actionResult.name,
|
|
95
|
+
call_id: actionResult.id || undefined,
|
|
96
|
+
content: `Failed to save secret for key "${key}": ${errorMessage}`,
|
|
97
|
+
},
|
|
98
|
+
],
|
|
99
|
+
});
|
|
100
|
+
}
|
|
101
|
+
}
|
|
102
|
+
else {
|
|
103
|
+
putSystemMessage('User cancelled providing the secret.');
|
|
104
|
+
putContainerLog('warn', `User did not provide secret for key "${key}".`);
|
|
105
|
+
taskExecutionPrompt.push({
|
|
106
|
+
type: 'assistant',
|
|
107
|
+
text: `Requesting secret with reasoning: ${reasoning}`,
|
|
108
|
+
functionCalls: [actionResult],
|
|
109
|
+
}, {
|
|
110
|
+
type: 'user',
|
|
111
|
+
functionResponses: [
|
|
112
|
+
{
|
|
113
|
+
name: actionResult.name,
|
|
114
|
+
call_id: actionResult.id || undefined,
|
|
115
|
+
content: `User cancelled providing secret for key "${key}".`,
|
|
116
|
+
},
|
|
117
|
+
],
|
|
118
|
+
});
|
|
119
|
+
}
|
|
120
|
+
return { shouldBreakOuter: false, commandsExecutedIncrement: 1 };
|
|
121
|
+
}
|
|
122
|
+
//# sourceMappingURL=request-secret.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"request-secret.js","sourceRoot":"","sources":["../../../../../../../src/prompt/steps/step-iterate/handlers/container-task/commands/request-secret.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
import { FunctionDef } from '../../../../../../ai-service/common-types.js';
|
|
2
|
+
import { CommandHandlerBaseProps, CommandHandlerResult } from '../container-commands-types.js';
|
|
3
|
+
export declare const runCommandDef: FunctionDef;
|
|
4
|
+
export interface HandleRunCommandProps extends CommandHandlerBaseProps {
|
|
5
|
+
maxOutputLength: number;
|
|
6
|
+
}
|
|
7
|
+
export declare function handleRunCommand(props: HandleRunCommandProps): Promise<CommandHandlerResult>;
|
|
@@ -0,0 +1,146 @@
|
|
|
1
|
+
import { putContainerLog } from '../../../../../../main/common/content-bus.js';
|
|
2
|
+
import { executeCommand } from '../utils/docker-utils.js';
|
|
3
|
+
import { abortController as globalAbortController } from '../../../../../../main/common/abort-controller.js';
|
|
4
|
+
import { onInterruptRequested } from './interrupt-controller.js';
|
|
5
|
+
export const runCommandDef = {
|
|
6
|
+
name: 'runCommand',
|
|
7
|
+
description: `Execute a shell command in the Docker container in non-interactive mode using docker exec. It will do equivalent of /bin/bash -c "command" (or /bin/sh -c "command").
|
|
8
|
+
IMPORTANT:
|
|
9
|
+
- The shell by default is using /bin/sh - take this into account when running commands.
|
|
10
|
+
- The command will block you until it completes, so consider using a non-blocking approach if needed.
|
|
11
|
+
- Ensure you are going to run command in non interactive mode, so that it will not block waiting for input, which will not come.
|
|
12
|
+
- For complex/long input you should prefer \`stdin\` over command-line arguments. For example instead of echo \`some long text\`, you can put the long text in the \`stdin\` field, and then use it in the command like this: \`cat | some_command\`.
|
|
13
|
+
- State of shell is not persistent across commands, so you need to set up the environment each time (think how to do it effectively).
|
|
14
|
+
`,
|
|
15
|
+
parameters: {
|
|
16
|
+
type: 'object',
|
|
17
|
+
properties: {
|
|
18
|
+
reasoning: {
|
|
19
|
+
type: 'string',
|
|
20
|
+
description: 'Explanation of why this command is needed for the task.',
|
|
21
|
+
},
|
|
22
|
+
shell: {
|
|
23
|
+
type: 'string',
|
|
24
|
+
description: 'The shell to use for executing the command. CAUTION: some docker images do not have bash pre-installed! Bash should be the preferred shell.',
|
|
25
|
+
enum: ['bash', '/bin/sh'],
|
|
26
|
+
},
|
|
27
|
+
command: {
|
|
28
|
+
type: 'string',
|
|
29
|
+
description: 'The shell command to execute in the container. Command must be 256 characters or less. If there is a need for a longer command, consider using a script file, and consider using `stdin` to pass the script contents.',
|
|
30
|
+
maxLength: 256,
|
|
31
|
+
},
|
|
32
|
+
stdin: {
|
|
33
|
+
type: 'string',
|
|
34
|
+
description: 'Input to provide to the command via stdin. Equivalent of `echo <stdin> | <command>`. Very good for long inputs, better than passing as command-line arguments in the command string parameter.',
|
|
35
|
+
},
|
|
36
|
+
truncMode: {
|
|
37
|
+
type: 'string',
|
|
38
|
+
description: 'Mode for truncating command output (e.g., "start", "end").',
|
|
39
|
+
enum: ['start', 'end'],
|
|
40
|
+
},
|
|
41
|
+
timeout: {
|
|
42
|
+
type: 'string',
|
|
43
|
+
description: 'How long to wait for the command to complete.',
|
|
44
|
+
enum: ['10sec', '30sec', '1min', '2min', '5min', '10min', '15min'],
|
|
45
|
+
},
|
|
46
|
+
workingDir: {
|
|
47
|
+
type: 'string',
|
|
48
|
+
description: 'Working directory (ALREADY EXISTING) inside the container to run the command in. This MUST be an absolute path.',
|
|
49
|
+
minLength: 1,
|
|
50
|
+
},
|
|
51
|
+
},
|
|
52
|
+
required: ['reasoning', 'shell', 'command', 'stdin', 'workingDir', 'truncMode', 'timeout'],
|
|
53
|
+
},
|
|
54
|
+
};
|
|
55
|
+
export async function handleRunCommand(props) {
|
|
56
|
+
const { actionResult, taskExecutionPrompt, container, maxOutputLength } = props;
|
|
57
|
+
const args = actionResult.args;
|
|
58
|
+
const { shell, command, workingDir, reasoning, stdin, truncMode, timeout } = args;
|
|
59
|
+
putContainerLog('info', `Executing command: ${reasoning}`, args, 'command');
|
|
60
|
+
const localController = new AbortController();
|
|
61
|
+
const onGlobalAbort = () => localController.abort();
|
|
62
|
+
globalAbortController?.signal.addEventListener('abort', onGlobalAbort);
|
|
63
|
+
let abortTimeout;
|
|
64
|
+
let output = '';
|
|
65
|
+
let exitCode = 0;
|
|
66
|
+
const clearInterruptListener = onInterruptRequested(() => localController.abort());
|
|
67
|
+
try {
|
|
68
|
+
const timeoutSeconds = parseTimeout(timeout);
|
|
69
|
+
abortTimeout = setTimeout(() => localController.abort(), timeoutSeconds * 1000);
|
|
70
|
+
const result = await executeCommand(container, shell, command, stdin, workingDir, localController.signal);
|
|
71
|
+
output = result.output;
|
|
72
|
+
exitCode = result.exitCode;
|
|
73
|
+
}
|
|
74
|
+
catch (e) {
|
|
75
|
+
const errMessage = e instanceof Error ? e.message : String(e);
|
|
76
|
+
putContainerLog('error', 'An error occurred while executing the command', { error: errMessage });
|
|
77
|
+
taskExecutionPrompt.push({
|
|
78
|
+
type: 'assistant',
|
|
79
|
+
text: `Executing command with reasoning: ${reasoning}`,
|
|
80
|
+
functionCalls: [actionResult],
|
|
81
|
+
}, {
|
|
82
|
+
type: 'user',
|
|
83
|
+
functionResponses: [
|
|
84
|
+
{
|
|
85
|
+
name: actionResult.name,
|
|
86
|
+
call_id: actionResult.id || undefined,
|
|
87
|
+
content: `Command execution failed: ${errMessage}`,
|
|
88
|
+
},
|
|
89
|
+
],
|
|
90
|
+
});
|
|
91
|
+
return { shouldBreakOuter: false, commandsExecutedIncrement: 1 };
|
|
92
|
+
}
|
|
93
|
+
finally {
|
|
94
|
+
clearTimeout(abortTimeout);
|
|
95
|
+
globalAbortController?.signal.removeEventListener('abort', onGlobalAbort);
|
|
96
|
+
clearInterruptListener();
|
|
97
|
+
}
|
|
98
|
+
let managedOutput = output;
|
|
99
|
+
if (output.length > maxOutputLength) {
|
|
100
|
+
if (truncMode === 'start') {
|
|
101
|
+
managedOutput = output.slice(0, maxOutputLength) + '\n\n[... output truncated for context management ...]';
|
|
102
|
+
}
|
|
103
|
+
else if (truncMode === 'end') {
|
|
104
|
+
managedOutput = '[... output truncated for context management ...]' + output.slice(-maxOutputLength);
|
|
105
|
+
}
|
|
106
|
+
putContainerLog('warn', `Command output truncated (${output.length} -> ${managedOutput.length} chars)`);
|
|
107
|
+
}
|
|
108
|
+
putContainerLog('info', 'Command executed', { command, managedOutput, exitCode }, 'command');
|
|
109
|
+
taskExecutionPrompt.push({
|
|
110
|
+
type: 'assistant',
|
|
111
|
+
text: `Executing command with reasoning: ${reasoning}`,
|
|
112
|
+
functionCalls: [actionResult],
|
|
113
|
+
}, {
|
|
114
|
+
type: 'user',
|
|
115
|
+
functionResponses: [
|
|
116
|
+
{
|
|
117
|
+
name: actionResult.name,
|
|
118
|
+
call_id: actionResult.id || undefined,
|
|
119
|
+
content: `Command executed successfully.\n\nOutput:\n${managedOutput}\n\nExit Code: ${exitCode}`,
|
|
120
|
+
},
|
|
121
|
+
],
|
|
122
|
+
});
|
|
123
|
+
return { shouldBreakOuter: false, commandsExecutedIncrement: 1 };
|
|
124
|
+
}
|
|
125
|
+
// Parse timeout values
|
|
126
|
+
function parseTimeout(timeout) {
|
|
127
|
+
switch (timeout) {
|
|
128
|
+
case '10sec':
|
|
129
|
+
return 10;
|
|
130
|
+
case '30sec':
|
|
131
|
+
return 30;
|
|
132
|
+
case '1min':
|
|
133
|
+
return 60;
|
|
134
|
+
case '2min':
|
|
135
|
+
return 120;
|
|
136
|
+
case '5min':
|
|
137
|
+
return 300;
|
|
138
|
+
case '10min':
|
|
139
|
+
return 600;
|
|
140
|
+
case '15min':
|
|
141
|
+
return 900;
|
|
142
|
+
default:
|
|
143
|
+
throw new Error(`Unknown timeout value: ${timeout}`);
|
|
144
|
+
}
|
|
145
|
+
}
|
|
146
|
+
//# sourceMappingURL=run-command.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"run-command.js","sourceRoot":"","sources":["../../../../../../../src/prompt/steps/step-iterate/handlers/container-task/commands/run-command.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,4 @@
|
|
|
1
|
+
import { FunctionDef } from '../../../../../../ai-service/common-types.js';
|
|
2
|
+
import { CommandHandlerBaseProps, CommandHandlerResult } from '../container-commands-types.js';
|
|
3
|
+
export declare const sendMessageDef: FunctionDef;
|
|
4
|
+
export declare function handleSendMessage(props: Pick<CommandHandlerBaseProps, 'actionResult' | 'taskExecutionPrompt' | 'options'>): Promise<CommandHandlerResult>;
|