genaicode 0.14.1 → 0.15.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/ai-studio.d.ts +2 -18
- package/dist/ai-service/ai-studio.js +88 -32
- 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/files/file-id-utils.js +1 -1
- package/dist/files/file-id-utils.js.map +1 -1
- package/dist/files/read-files.js +10 -6
- package/dist/files/read-files.js.map +1 -1
- package/dist/files/source-code-types.d.ts +9 -5
- package/dist/files/source-code-utils.d.ts +2 -1
- package/dist/files/source-code-utils.js +30 -12
- package/dist/files/source-code-utils.js.map +1 -1
- package/dist/files/summary-cache.d.ts +6 -4
- package/dist/files/summary-cache.js +3 -2
- package/dist/files/summary-cache.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/common/content-bus-types.d.ts +14 -0
- package/dist/main/common/content-bus.d.ts +3 -1
- package/dist/main/common/content-bus.js +28 -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/plugin-loader.d.ts +1 -1
- package/dist/main/ui/backend/endpoints/compress-context-endpoint.d.ts +1 -0
- package/dist/main/ui/backend/endpoints/compress-context-endpoint.js +18 -0
- package/dist/main/ui/backend/endpoints/compress-context-endpoint.js.map +1 -0
- 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/context-endpoint.js +102 -0
- package/dist/main/ui/backend/endpoints/context-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/index.d.ts +1 -0
- package/dist/main/ui/backend/endpoints/index.js +1 -0
- package/dist/main/ui/backend/endpoints/index.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 +68 -7
- package/dist/main/ui/backend/service.js +301 -28
- package/dist/main/ui/backend/service.js.map +1 -1
- package/dist/main/ui/codegen-ui.js +2 -2
- package/dist/main/ui/codegen-ui.js.map +1 -1
- package/dist/main/ui/common/api-types.d.ts +6 -2
- package/dist/main/ui/common/api-types.js.map +1 -1
- package/dist/main/ui/frontend/assets/index-DAM_kJhM.js +3445 -0
- package/dist/main/ui/frontend/index.html +1 -1
- package/dist/prompt/context-utils.d.ts +7 -0
- package/dist/prompt/context-utils.js +33 -0
- package/dist/prompt/context-utils.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/get-source-code.js +3 -3
- 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/function-defs/set-summaries.js +6 -2
- package/dist/prompt/function-defs/set-summaries.js.map +1 -1
- package/dist/prompt/limits.js +1 -1
- package/dist/prompt/prompt-service.js +13 -10
- package/dist/prompt/prompt-service.js.map +1 -1
- package/dist/prompt/source-code-optimize.d.ts +2 -0
- package/dist/prompt/source-code-optimize.js +27 -0
- package/dist/prompt/source-code-optimize.js.map +1 -0
- package/dist/prompt/steps/step-ask-question/step-ask-question.js +7 -1
- package/dist/prompt/steps/step-ask-question/step-ask-question.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-context-compression.js +5 -0
- package/dist/prompt/steps/step-context-compression.js.map +1 -1
- package/dist/prompt/steps/step-context-optimization.js +6 -3
- package/dist/prompt/steps/step-context-optimization.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/steps/step-summarization.js +9 -19
- package/dist/prompt/steps/step-summarization.js.map +1 -1
- package/dist/prompt/systemprompt.js +93 -168
- package/dist/prompt/systemprompt.js.map +1 -1
- package/dist/prompt/token-estimator.js +1 -1
- package/dist/prompt/token-estimator.js.map +1 -1
- 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/vite-genaicode-frontend.js +1 -1
- package/dist/vite-genaicode/vite-genaicode-frontend.js.map +1 -1
- package/package.json +7 -6
- package/dist/main/ui/frontend/assets/index-5-emJmrg.js +0 -2881
|
@@ -0,0 +1,159 @@
|
|
|
1
|
+
import { executor as executeCreateFile } from '../../../../operations/create-file/create-file-executor.js';
|
|
2
|
+
import { getSourceCode } from '../../../../files/read-files.js';
|
|
3
|
+
import { getFunctionDefs } from '../../../function-calling.js';
|
|
4
|
+
import { ModelType } from '../../../../ai-service/common-types.js';
|
|
5
|
+
import { askUserForConfirmationWithAnswer } from '../../../../main/common/user-actions.js';
|
|
6
|
+
import { putSystemMessage, putUserMessage } from '../../../../main/common/content-bus.js';
|
|
7
|
+
import { refreshFiles } from '../../../../files/find-files.js';
|
|
8
|
+
import { registerActionHandler } from '../step-iterate-handlers.js';
|
|
9
|
+
registerActionHandler('createFile', handleCreateFile);
|
|
10
|
+
export async function handleCreateFile({ iterateCall, options, prompt, generateContentFn, }) {
|
|
11
|
+
putSystemMessage('File creation requested.', iterateCall);
|
|
12
|
+
// First confirmation: Ask user if they want to proceed with content generation
|
|
13
|
+
const generateConfirmation = await askUserForConfirmationWithAnswer('The assistant suggests generating content for a new file. Do you want to proceed with content generation?', 'Generate content', 'Cancel content generation', false, options);
|
|
14
|
+
if (generateConfirmation.answer) {
|
|
15
|
+
putUserMessage(generateConfirmation.answer);
|
|
16
|
+
}
|
|
17
|
+
if (!generateConfirmation.confirmed) {
|
|
18
|
+
putSystemMessage('Content generation canceled.');
|
|
19
|
+
prompt.push({
|
|
20
|
+
type: 'assistant',
|
|
21
|
+
text: iterateCall.args?.message ?? '',
|
|
22
|
+
}, {
|
|
23
|
+
type: 'user',
|
|
24
|
+
text: 'Canceling file creation.' + (generateConfirmation.answer ? ` ${generateConfirmation.answer}` : ''),
|
|
25
|
+
});
|
|
26
|
+
return {
|
|
27
|
+
breakLoop: false,
|
|
28
|
+
items: [],
|
|
29
|
+
};
|
|
30
|
+
}
|
|
31
|
+
putSystemMessage('Content generation started.');
|
|
32
|
+
const [createFileCall] = (await generateContentFn([
|
|
33
|
+
...prompt,
|
|
34
|
+
{
|
|
35
|
+
type: 'assistant',
|
|
36
|
+
text: iterateCall.args?.message ?? '',
|
|
37
|
+
},
|
|
38
|
+
{
|
|
39
|
+
type: 'user',
|
|
40
|
+
text: 'Ok, please provide the file creation using `createFile` function. Please remember to use absolute file path.' +
|
|
41
|
+
(generateConfirmation.answer ? ` ${generateConfirmation.answer}` : ''),
|
|
42
|
+
},
|
|
43
|
+
], {
|
|
44
|
+
functionDefs: getFunctionDefs(),
|
|
45
|
+
requiredFunctionName: 'createFile',
|
|
46
|
+
temperature: options.temperature ?? 0.7,
|
|
47
|
+
modelType: ModelType.DEFAULT,
|
|
48
|
+
expectedResponseType: {
|
|
49
|
+
text: false,
|
|
50
|
+
functionCall: true,
|
|
51
|
+
media: false,
|
|
52
|
+
},
|
|
53
|
+
}, options))
|
|
54
|
+
.filter((item) => item.type === 'functionCall')
|
|
55
|
+
.map((item) => item.functionCall);
|
|
56
|
+
if (!createFileCall || !createFileCall.args) {
|
|
57
|
+
return {
|
|
58
|
+
breakLoop: false,
|
|
59
|
+
items: [],
|
|
60
|
+
};
|
|
61
|
+
}
|
|
62
|
+
const { filePath } = createFileCall.args;
|
|
63
|
+
const file = getSourceCode({ filterPaths: [filePath], forceAll: true }, options)[filePath];
|
|
64
|
+
if (file && 'content' in file && file.content) {
|
|
65
|
+
putSystemMessage('File not created. File already exists.', createFileCall);
|
|
66
|
+
prompt.push({
|
|
67
|
+
type: 'assistant',
|
|
68
|
+
text: iterateCall.args?.message ?? '',
|
|
69
|
+
}, {
|
|
70
|
+
type: 'user',
|
|
71
|
+
text: 'The file already exists. Please use updateFile function to modify existing files.',
|
|
72
|
+
});
|
|
73
|
+
return {
|
|
74
|
+
breakLoop: false,
|
|
75
|
+
items: [],
|
|
76
|
+
};
|
|
77
|
+
}
|
|
78
|
+
putSystemMessage(`The assistant has generated content for new file ${filePath}.`, {
|
|
79
|
+
name: createFileCall.name,
|
|
80
|
+
args: createFileCall.args,
|
|
81
|
+
});
|
|
82
|
+
// Second confirmation: Ask user if they want to proceed with file creation
|
|
83
|
+
const applyConfirmation = await askUserForConfirmationWithAnswer('The assistant has generated the file content. Do you want to create the file?', 'Create file', 'Cancel file creation', false, options);
|
|
84
|
+
if (applyConfirmation.answer) {
|
|
85
|
+
putUserMessage(applyConfirmation.answer);
|
|
86
|
+
}
|
|
87
|
+
if (!applyConfirmation.confirmed) {
|
|
88
|
+
putSystemMessage('File creation rejected.');
|
|
89
|
+
prompt.push({
|
|
90
|
+
type: 'assistant',
|
|
91
|
+
text: iterateCall.args.message,
|
|
92
|
+
functionCalls: [createFileCall],
|
|
93
|
+
}, {
|
|
94
|
+
type: 'user',
|
|
95
|
+
text: 'Rejecting file creation.' + (applyConfirmation.answer ? ` ${applyConfirmation.answer}` : ''),
|
|
96
|
+
functionResponses: [
|
|
97
|
+
{
|
|
98
|
+
name: 'createFile',
|
|
99
|
+
call_id: createFileCall.id,
|
|
100
|
+
content: '',
|
|
101
|
+
},
|
|
102
|
+
],
|
|
103
|
+
});
|
|
104
|
+
return {
|
|
105
|
+
breakLoop: false,
|
|
106
|
+
items: [],
|
|
107
|
+
};
|
|
108
|
+
}
|
|
109
|
+
try {
|
|
110
|
+
putSystemMessage('Applying file creation');
|
|
111
|
+
await executeCreateFile(createFileCall.args, options);
|
|
112
|
+
refreshFiles();
|
|
113
|
+
prompt.push({
|
|
114
|
+
type: 'assistant',
|
|
115
|
+
text: iterateCall.args.message,
|
|
116
|
+
functionCalls: [createFileCall],
|
|
117
|
+
}, {
|
|
118
|
+
type: 'user',
|
|
119
|
+
text: 'Accepting file creation.' + (applyConfirmation.answer ? ` ${applyConfirmation.answer}` : ''),
|
|
120
|
+
functionResponses: [
|
|
121
|
+
{
|
|
122
|
+
name: 'createFile',
|
|
123
|
+
call_id: createFileCall.id,
|
|
124
|
+
content: '',
|
|
125
|
+
},
|
|
126
|
+
],
|
|
127
|
+
});
|
|
128
|
+
return {
|
|
129
|
+
breakLoop: false,
|
|
130
|
+
items: [],
|
|
131
|
+
};
|
|
132
|
+
}
|
|
133
|
+
catch (error) {
|
|
134
|
+
putSystemMessage('File creation failed.');
|
|
135
|
+
prompt.push({
|
|
136
|
+
type: 'assistant',
|
|
137
|
+
text: iterateCall.args.message,
|
|
138
|
+
functionCalls: [createFileCall],
|
|
139
|
+
}, {
|
|
140
|
+
type: 'user',
|
|
141
|
+
text: 'Accepting file creation.' +
|
|
142
|
+
(applyConfirmation.answer ? ` ${applyConfirmation.answer}` : '') +
|
|
143
|
+
' Unfortunately, the file creation failed: ' +
|
|
144
|
+
(error instanceof Error ? error.message : 'unknown error'),
|
|
145
|
+
functionResponses: [
|
|
146
|
+
{
|
|
147
|
+
name: 'createFile',
|
|
148
|
+
call_id: createFileCall.id,
|
|
149
|
+
content: '',
|
|
150
|
+
},
|
|
151
|
+
],
|
|
152
|
+
});
|
|
153
|
+
return {
|
|
154
|
+
breakLoop: false,
|
|
155
|
+
items: [],
|
|
156
|
+
};
|
|
157
|
+
}
|
|
158
|
+
}
|
|
159
|
+
//# sourceMappingURL=handle-create-file.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"handle-create-file.js","sourceRoot":"","sources":["../../../../../src/prompt/steps/step-iterate/handlers/handle-create-file.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
import { putSystemMessage, putUserMessage } from '../../../../main/common/content-bus.js';
|
|
2
|
+
import { askUserForConfirmationWithAnswer } from '../../../../main/common/user-actions.js';
|
|
3
|
+
import { registerActionHandler } from '../step-iterate-handlers.js';
|
|
4
|
+
registerActionHandler('endConversation', handleEndConversation);
|
|
5
|
+
export async function handleEndConversation({ iterateCall, prompt, options, }) {
|
|
6
|
+
const userConfirmation = await askUserForConfirmationWithAnswer('Do you want to end the conversation?', 'End conversation', 'Continue conversation', true, options);
|
|
7
|
+
if (userConfirmation.answer) {
|
|
8
|
+
putUserMessage(userConfirmation.answer);
|
|
9
|
+
}
|
|
10
|
+
prompt.push({
|
|
11
|
+
type: 'assistant',
|
|
12
|
+
text: iterateCall.args?.message ?? '',
|
|
13
|
+
}, {
|
|
14
|
+
type: 'user',
|
|
15
|
+
text: 'Lets continue the conversation.' + (userConfirmation.answer ? ` ${userConfirmation.answer}` : ''),
|
|
16
|
+
});
|
|
17
|
+
if (!userConfirmation.confirmed) {
|
|
18
|
+
putSystemMessage('User declined to end the conversation.');
|
|
19
|
+
return {
|
|
20
|
+
breakLoop: false,
|
|
21
|
+
items: [],
|
|
22
|
+
};
|
|
23
|
+
}
|
|
24
|
+
putSystemMessage('Assistant requested to stop code generation. Exiting...');
|
|
25
|
+
return {
|
|
26
|
+
breakLoop: true,
|
|
27
|
+
items: [],
|
|
28
|
+
};
|
|
29
|
+
}
|
|
30
|
+
//# sourceMappingURL=handle-end-conversation.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"handle-end-conversation.js","sourceRoot":"","sources":["../../../../../src/prompt/steps/step-iterate/handlers/handle-end-conversation.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,gBAAgB,EAAE,cAAc,EAAE,MAAM,wCAAwC,CAAC;AAC1F,OAAO,EAAE,gCAAgC,EAAE,MAAM,yCAAyC,CAAC;AAC3F,OAAO,EAAE,qBAAqB,EAAE,MAAM,6BAA6B,CAAC;AAGpE,qBAAqB,CAAC,iBAAiB,EAAE,qBAAqB,CAAC,CAAC;AAEhE,MAAM,CAAC,KAAK,UAAU,qBAAqB,CAAC,EAC1C,WAAW,EACX,MAAM,EACN,OAAO,GACY;IACnB,MAAM,gBAAgB,GAAG,MAAM,gCAAgC,CAC7D,sCAAsC,EACtC,kBAAkB,EAClB,uBAAuB,EACvB,IAAI,EACJ,OAAO,CACR,CAAC;IAEF,IAAI,gBAAgB,CAAC,MAAM,EAAE,CAAC;QAC5B,cAAc,CAAC,gBAAgB,CAAC,MAAM,CAAC,CAAC;IAC1C,CAAC;IAED,MAAM,CAAC,IAAI,CACT;QACE,IAAI,EAAE,WAAW;QACjB,IAAI,EAAE,WAAW,CAAC,IAAI,EAAE,OAAO,IAAI,EAAE;KACtC,EACD;QACE,IAAI,EAAE,MAAM;QACZ,IAAI,EAAE,iCAAiC,GAAG,CAAC,gBAAgB,CAAC,MAAM,CAAC,CAAC,CAAC,IAAI,gBAAgB,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;KACzG,CACF,CAAC;IAEF,IAAI,CAAC,gBAAgB,CAAC,SAAS,EAAE,CAAC;QAChC,gBAAgB,CAAC,wCAAwC,CAAC,CAAC;QAE3D,OAAO;YACL,SAAS,EAAE,KAAK;YAChB,KAAK,EAAE,EAAE;SACV,CAAC;IACJ,CAAC;IAED,gBAAgB,CAAC,yDAAyD,CAAC,CAAC;IAC5E,OAAO;QACL,SAAS,EAAE,IAAI;QACf,KAAK,EAAE,EAAE;KACV,CAAC;AACJ,CAAC"}
|
|
@@ -0,0 +1,280 @@
|
|
|
1
|
+
import fs from 'fs/promises';
|
|
2
|
+
import path from 'path';
|
|
3
|
+
import { isAncestorDirectory } from '../../../../files/file-utils.js';
|
|
4
|
+
import { askUserForConfirmation } from '../../../../main/common/user-actions.js';
|
|
5
|
+
import { putSystemMessage } from '../../../../main/common/content-bus.js';
|
|
6
|
+
import { rcConfig } from '../../../../main/config.js';
|
|
7
|
+
import { registerActionHandler } from '../step-iterate-handlers.js';
|
|
8
|
+
import { exploreExternalDirectories as exploreExternalDirectoriesDef, } from '../../../function-defs/explore-external-directories.js';
|
|
9
|
+
import { ModelType } from '../../../../ai-service/common-types.js';
|
|
10
|
+
import { getFunctionDefs } from '../../../function-calling.js';
|
|
11
|
+
// Threshold for triggering synthesis instead of listing all files
|
|
12
|
+
const SYNTHESIS_FILE_COUNT_THRESHOLD = 10;
|
|
13
|
+
registerActionHandler('exploreExternalDirectories', handleExploreExternalDirectories);
|
|
14
|
+
export async function handleExploreExternalDirectories({ iterateCall, options, prompt, generateContentFn, }) {
|
|
15
|
+
putSystemMessage('Generating arguments for explore external directories action...');
|
|
16
|
+
// 1. Infer arguments using LLM
|
|
17
|
+
const inferencePrompt = [
|
|
18
|
+
...prompt,
|
|
19
|
+
{
|
|
20
|
+
type: 'assistant',
|
|
21
|
+
text: iterateCall.args?.message ?? '',
|
|
22
|
+
},
|
|
23
|
+
{
|
|
24
|
+
type: 'user',
|
|
25
|
+
text: 'Given the conversation, identify the directories, reason, and any exploration parameters (recursive, depth, searchPhrases, maxResults) for exploring external directories.',
|
|
26
|
+
},
|
|
27
|
+
];
|
|
28
|
+
const inferenceResult = await generateContentFn(inferencePrompt, {
|
|
29
|
+
modelType: ModelType.CHEAP,
|
|
30
|
+
functionDefs: getFunctionDefs(),
|
|
31
|
+
requiredFunctionName: exploreExternalDirectoriesDef.name,
|
|
32
|
+
}, options);
|
|
33
|
+
const inferredCall = inferenceResult.find((part) => part.type === 'functionCall')?.functionCall;
|
|
34
|
+
if (!inferredCall || !inferredCall.args) {
|
|
35
|
+
putSystemMessage('Could not infer arguments for exploreExternalDirectories action from the assistant message and context.');
|
|
36
|
+
return { breakLoop: false, items: [] }; // Or respond with error
|
|
37
|
+
}
|
|
38
|
+
const inferredCallId = inferredCall.id;
|
|
39
|
+
// Ensure depth is handled correctly as it's now required
|
|
40
|
+
const { directories, reason: inferredReason, depth, ...restParams } = inferredCall.args;
|
|
41
|
+
const requestedDirectories = directories;
|
|
42
|
+
const reason = inferredReason;
|
|
43
|
+
const executorParams = { depth, ...restParams }; // Includes recursive, searchPhrases, maxResults if provided
|
|
44
|
+
putSystemMessage('Inferred arguments for explore external directories action.', executorParams);
|
|
45
|
+
if (!requestedDirectories || requestedDirectories.length === 0 || !reason || typeof depth !== 'number' || depth < 0) {
|
|
46
|
+
let errorMsg = 'Missing or invalid arguments after inferring for exploreExternalDirectories action.';
|
|
47
|
+
if (!requestedDirectories || requestedDirectories.length === 0)
|
|
48
|
+
errorMsg += ' Missing directories.';
|
|
49
|
+
if (!reason)
|
|
50
|
+
errorMsg += ' Missing reason.';
|
|
51
|
+
if (typeof depth !== 'number' || depth < 0)
|
|
52
|
+
errorMsg += ' Missing or invalid depth (must be >= 0).';
|
|
53
|
+
putSystemMessage(errorMsg);
|
|
54
|
+
// Respond with an error in the function response
|
|
55
|
+
prompt.push({
|
|
56
|
+
type: 'assistant',
|
|
57
|
+
text: iterateCall.args?.message ?? '',
|
|
58
|
+
functionCalls: inferredCall ? [inferredCall] : undefined, // Include the inferred call attempt
|
|
59
|
+
}, {
|
|
60
|
+
type: 'user',
|
|
61
|
+
functionResponses: [
|
|
62
|
+
{
|
|
63
|
+
name: exploreExternalDirectoriesDef.name,
|
|
64
|
+
call_id: inferredCallId,
|
|
65
|
+
content: JSON.stringify({
|
|
66
|
+
error: `Invalid arguments inferred: ${errorMsg}`,
|
|
67
|
+
}),
|
|
68
|
+
},
|
|
69
|
+
],
|
|
70
|
+
});
|
|
71
|
+
return { breakLoop: false, items: [] };
|
|
72
|
+
}
|
|
73
|
+
// 2. Validate directories are external
|
|
74
|
+
const externalDirsToExplore = [];
|
|
75
|
+
const internalDirsSkipped = [];
|
|
76
|
+
const invalidDirs = [];
|
|
77
|
+
for (const dir of requestedDirectories) {
|
|
78
|
+
try {
|
|
79
|
+
const absolutePath = path.resolve(dir);
|
|
80
|
+
// Basic check if it's inside the project root (and not ignored)
|
|
81
|
+
if (isAncestorDirectory(rcConfig.rootDir, absolutePath) &&
|
|
82
|
+
!rcConfig.ignorePaths?.some((ignorePath) => path.join(rcConfig.rootDir, ignorePath) === absolutePath ||
|
|
83
|
+
isAncestorDirectory(path.join(rcConfig.rootDir, ignorePath), absolutePath))) {
|
|
84
|
+
internalDirsSkipped.push(absolutePath);
|
|
85
|
+
}
|
|
86
|
+
else {
|
|
87
|
+
// Further validation (existence, directory type) could happen here or in exploreDirectories
|
|
88
|
+
externalDirsToExplore.push(absolutePath);
|
|
89
|
+
}
|
|
90
|
+
}
|
|
91
|
+
catch (error) {
|
|
92
|
+
// path.resolve might throw if the path format is invalid on some OS
|
|
93
|
+
invalidDirs.push(`${dir} (invalid path format)`);
|
|
94
|
+
}
|
|
95
|
+
}
|
|
96
|
+
// Define userResponse structure
|
|
97
|
+
let userResponse = {};
|
|
98
|
+
// 3. Handle validation results and Ask for confirmation
|
|
99
|
+
if (invalidDirs.length > 0) {
|
|
100
|
+
userResponse = {
|
|
101
|
+
error: `Invalid or inaccessible directory paths provided: ${invalidDirs.join(', ')}`,
|
|
102
|
+
invalid: invalidDirs,
|
|
103
|
+
};
|
|
104
|
+
}
|
|
105
|
+
else if (externalDirsToExplore.length === 0) {
|
|
106
|
+
userResponse.error = 'No valid external directories provided to explore.';
|
|
107
|
+
if (internalDirsSkipped.length > 0) {
|
|
108
|
+
userResponse.skipped = internalDirsSkipped;
|
|
109
|
+
userResponse.error += ` Skipped internal directories: ${internalDirsSkipped.join(', ')}`;
|
|
110
|
+
}
|
|
111
|
+
}
|
|
112
|
+
else {
|
|
113
|
+
// Ask for confirmation
|
|
114
|
+
const confirmationMessage = `The AI wants to explore the following external directorie(s):\n${externalDirsToExplore.join('\n')}\nDo you allow exploring these directories?`;
|
|
115
|
+
const confirmationResult = await askUserForConfirmation(confirmationMessage, false, options);
|
|
116
|
+
if (confirmationResult.confirmed) {
|
|
117
|
+
try {
|
|
118
|
+
putSystemMessage('Exploring external directory...');
|
|
119
|
+
const filePaths = await exploreDirectories({
|
|
120
|
+
directories: externalDirsToExplore,
|
|
121
|
+
// Pass validated executorParams
|
|
122
|
+
recursive: executorParams.recursive,
|
|
123
|
+
depth: executorParams.depth,
|
|
124
|
+
searchPhrases: executorParams.searchPhrases,
|
|
125
|
+
maxResults: executorParams.maxResults,
|
|
126
|
+
});
|
|
127
|
+
userResponse.confirmed = true;
|
|
128
|
+
if (internalDirsSkipped.length > 0) {
|
|
129
|
+
userResponse.skipped = internalDirsSkipped;
|
|
130
|
+
}
|
|
131
|
+
// ---- Synthesis Logic ----
|
|
132
|
+
if (filePaths.length > SYNTHESIS_FILE_COUNT_THRESHOLD) {
|
|
133
|
+
putSystemMessage(`Found ${filePaths.length} files. Synthesizing results...`);
|
|
134
|
+
userResponse.fileCount = filePaths.length;
|
|
135
|
+
const synthesisPrompt = [
|
|
136
|
+
{
|
|
137
|
+
type: 'user',
|
|
138
|
+
text: `You explored directories and found ${filePaths.length} files because: ${reason}.\nFiles:\n${filePaths.join('\n')}\n\nBased on this reason, provide a concise and helpful output. Choose the most suitable format from summary, categorized list, or plain file list.`,
|
|
139
|
+
},
|
|
140
|
+
];
|
|
141
|
+
try {
|
|
142
|
+
const synthesisResult = await generateContentFn(synthesisPrompt, {
|
|
143
|
+
modelType: ModelType.CHEAP,
|
|
144
|
+
// Ensure we only expect text
|
|
145
|
+
expectedResponseType: { text: true, functionCall: false, media: false },
|
|
146
|
+
}, { ...options, askQuestion: false });
|
|
147
|
+
const synthesizedText = synthesisResult.find((part) => part.type === 'text')?.text;
|
|
148
|
+
if (synthesizedText) {
|
|
149
|
+
userResponse.synthesis = synthesizedText;
|
|
150
|
+
putSystemMessage(`Synthesis complete.`, { synthesizedText });
|
|
151
|
+
}
|
|
152
|
+
else {
|
|
153
|
+
putSystemMessage('Synthesis failed: No text content returned from LLM.');
|
|
154
|
+
userResponse.error = 'Exploration succeeded, but synthesis failed to generate content.';
|
|
155
|
+
// Fallback? Maybe include filePaths if synthesis fails?
|
|
156
|
+
// userResponse.filePaths = filePaths; // Or just report error
|
|
157
|
+
}
|
|
158
|
+
}
|
|
159
|
+
catch (synthError) {
|
|
160
|
+
const synthErrorMessage = synthError instanceof Error ? synthError.message : 'Unknown synthesis error.';
|
|
161
|
+
putSystemMessage(`Synthesis failed: ${synthErrorMessage}`);
|
|
162
|
+
userResponse.error = `Exploration succeeded, but synthesis failed: ${synthErrorMessage}`;
|
|
163
|
+
// userResponse.filePaths = filePaths; // Optional fallback
|
|
164
|
+
}
|
|
165
|
+
}
|
|
166
|
+
else {
|
|
167
|
+
// No synthesis needed, include the paths directly
|
|
168
|
+
userResponse.filePaths = filePaths;
|
|
169
|
+
}
|
|
170
|
+
// ---- End Synthesis Logic ----
|
|
171
|
+
}
|
|
172
|
+
catch (error) {
|
|
173
|
+
const errorMessage = error instanceof Error ? error.message : 'Unknown error during execution.';
|
|
174
|
+
putSystemMessage(`Error exploring external directories: ${errorMessage}`);
|
|
175
|
+
userResponse = { ...userResponse, confirmed: true, error: `Exploration failed: ${errorMessage}` }; // Keep skipped/invalid if already set
|
|
176
|
+
}
|
|
177
|
+
}
|
|
178
|
+
else {
|
|
179
|
+
userResponse = {
|
|
180
|
+
...userResponse,
|
|
181
|
+
confirmed: false,
|
|
182
|
+
error: 'User denied permission to explore external directories.',
|
|
183
|
+
}; // Keep skipped/invalid
|
|
184
|
+
}
|
|
185
|
+
}
|
|
186
|
+
// 4. Update conversation history
|
|
187
|
+
prompt.push({
|
|
188
|
+
type: 'assistant',
|
|
189
|
+
text: iterateCall.args?.message ?? '',
|
|
190
|
+
functionCalls: inferredCall ? [inferredCall] : undefined, // Use the inferred call
|
|
191
|
+
}, {
|
|
192
|
+
type: 'user',
|
|
193
|
+
functionResponses: [
|
|
194
|
+
{
|
|
195
|
+
name: exploreExternalDirectoriesDef.name,
|
|
196
|
+
call_id: inferredCallId, // Use the ID from the inferred call
|
|
197
|
+
content: JSON.stringify({
|
|
198
|
+
// Include original request details for context, even if modified by synthesis
|
|
199
|
+
requestedDirectories,
|
|
200
|
+
reason,
|
|
201
|
+
...executorParams,
|
|
202
|
+
// Add the results (potentially synthesized)
|
|
203
|
+
...userResponse,
|
|
204
|
+
}),
|
|
205
|
+
},
|
|
206
|
+
],
|
|
207
|
+
});
|
|
208
|
+
return {
|
|
209
|
+
breakLoop: false,
|
|
210
|
+
items: [], // No immediate items to add, handled by history push
|
|
211
|
+
};
|
|
212
|
+
}
|
|
213
|
+
// Keep exploreDirectories function as is, ensuring it respects maxResults
|
|
214
|
+
async function exploreDirectories(args) {
|
|
215
|
+
const { directories, recursive = false, depth, searchPhrases, maxResults = 50 } = args;
|
|
216
|
+
const foundFiles = [];
|
|
217
|
+
// Depth is now required, maxDepth calculation is simpler
|
|
218
|
+
const maxDepth = depth;
|
|
219
|
+
const lowerCaseSearchPhrases = searchPhrases?.map((p) => p.toLowerCase());
|
|
220
|
+
async function traverse(dirPath, currentDepth) {
|
|
221
|
+
// Stop if max depth exceeded OR max results reached
|
|
222
|
+
if (currentDepth > maxDepth || foundFiles.length >= maxResults) {
|
|
223
|
+
return;
|
|
224
|
+
}
|
|
225
|
+
let entries;
|
|
226
|
+
try {
|
|
227
|
+
// Check access first to provide better error for invalidDirs later?
|
|
228
|
+
await fs.access(dirPath, fs.constants.R_OK);
|
|
229
|
+
entries = await fs.readdir(dirPath, { withFileTypes: true });
|
|
230
|
+
}
|
|
231
|
+
catch (error) {
|
|
232
|
+
// Log or handle specific errors like permission denied
|
|
233
|
+
// console.warn(`Could not read directory ${dirPath}: ${error}`);
|
|
234
|
+
// Consider throwing if it's the initial directory?
|
|
235
|
+
return; // Silently ignore inaccessible subdirectories
|
|
236
|
+
}
|
|
237
|
+
for (const entry of entries) {
|
|
238
|
+
if (foundFiles.length >= maxResults) {
|
|
239
|
+
break; // Stop processing entries in this directory if max results hit
|
|
240
|
+
}
|
|
241
|
+
const fullPath = path.join(dirPath, entry.name);
|
|
242
|
+
if (entry.isDirectory()) {
|
|
243
|
+
foundFiles.push(fullPath);
|
|
244
|
+
// Only recurse if currentDepth < maxDepth
|
|
245
|
+
if (recursive && currentDepth < maxDepth) {
|
|
246
|
+
await traverse(fullPath, currentDepth + 1);
|
|
247
|
+
}
|
|
248
|
+
}
|
|
249
|
+
else if (entry.isFile()) {
|
|
250
|
+
if (lowerCaseSearchPhrases && lowerCaseSearchPhrases.length > 0) {
|
|
251
|
+
try {
|
|
252
|
+
// Consider limiting file size read?
|
|
253
|
+
const content = await fs.readFile(fullPath, 'utf-8');
|
|
254
|
+
const lowerCaseContent = content.toLowerCase();
|
|
255
|
+
if (lowerCaseSearchPhrases.every((phrase) => lowerCaseContent.includes(phrase))) {
|
|
256
|
+
foundFiles.push(fullPath);
|
|
257
|
+
}
|
|
258
|
+
}
|
|
259
|
+
catch (readError) {
|
|
260
|
+
// Ignore file read errors?
|
|
261
|
+
// console.warn(`Could not read file ${fullPath}: ${readError}`);
|
|
262
|
+
}
|
|
263
|
+
}
|
|
264
|
+
else {
|
|
265
|
+
// No search phrases, just add the file
|
|
266
|
+
foundFiles.push(fullPath);
|
|
267
|
+
}
|
|
268
|
+
}
|
|
269
|
+
// Ignore other entry types (symlinks, etc.)
|
|
270
|
+
}
|
|
271
|
+
}
|
|
272
|
+
for (const startDir of directories) {
|
|
273
|
+
if (foundFiles.length < maxResults) {
|
|
274
|
+
// Start traversal at depth 0
|
|
275
|
+
await traverse(startDir, 0);
|
|
276
|
+
}
|
|
277
|
+
}
|
|
278
|
+
return foundFiles;
|
|
279
|
+
}
|
|
280
|
+
//# sourceMappingURL=handle-explore-external-directories.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"handle-explore-external-directories.js","sourceRoot":"","sources":["../../../../../src/prompt/steps/step-iterate/handlers/handle-explore-external-directories.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
import { ActionHandlerProps, ActionResult } from '../step-iterate-types.js';
|
|
2
|
+
/**
|
|
3
|
+
* Handler for the help action. This handler is responsible for:
|
|
4
|
+
* 1. Reading the documentation file
|
|
5
|
+
* 2. Finding relevant sections based on the query
|
|
6
|
+
* 3. Returning formatted results to the user
|
|
7
|
+
*/
|
|
8
|
+
export declare function handleGenaicodeHelp({ generateContentFn, iterateCall, prompt, options, }: ActionHandlerProps): Promise<ActionResult>;
|
|
@@ -0,0 +1,105 @@
|
|
|
1
|
+
import { ModelType } from '../../../../ai-service/common-types.js';
|
|
2
|
+
import { getFunctionDefs } from '../../../function-calling.js';
|
|
3
|
+
import { putAssistantMessage } from '../../../../main/common/content-bus.js';
|
|
4
|
+
import { askUserForInput } from '../../../../main/common/user-actions.js';
|
|
5
|
+
import { GENAICODE_HELP_DOCUMENT } from '../../../../help-docs/genaicode-help-document.js';
|
|
6
|
+
import { registerActionHandler } from '../step-iterate-handlers.js';
|
|
7
|
+
registerActionHandler('genaicodeHelp', handleGenaicodeHelp);
|
|
8
|
+
/**
|
|
9
|
+
* Handler for the help action. This handler is responsible for:
|
|
10
|
+
* 1. Reading the documentation file
|
|
11
|
+
* 2. Finding relevant sections based on the query
|
|
12
|
+
* 3. Returning formatted results to the user
|
|
13
|
+
*/
|
|
14
|
+
export async function handleGenaicodeHelp({ generateContentFn, iterateCall, prompt, options, }) {
|
|
15
|
+
try {
|
|
16
|
+
// Get help content
|
|
17
|
+
const [genaicodeHelpCall] = await getGenaicodeHelpCall(generateContentFn, prompt);
|
|
18
|
+
if (!genaicodeHelpCall?.args) {
|
|
19
|
+
return {
|
|
20
|
+
breakLoop: false,
|
|
21
|
+
items: [
|
|
22
|
+
{
|
|
23
|
+
assistant: {
|
|
24
|
+
type: 'assistant',
|
|
25
|
+
text: iterateCall.args?.message || 'How can I help you?',
|
|
26
|
+
},
|
|
27
|
+
user: {
|
|
28
|
+
type: 'user',
|
|
29
|
+
text: 'Failed to get valid genaicodeHelp request',
|
|
30
|
+
},
|
|
31
|
+
},
|
|
32
|
+
],
|
|
33
|
+
};
|
|
34
|
+
}
|
|
35
|
+
putAssistantMessage(genaicodeHelpCall.args?.message ?? '', genaicodeHelpCall.args);
|
|
36
|
+
const response = await askUserForInput('Your answer', '', options);
|
|
37
|
+
return {
|
|
38
|
+
breakLoop: false,
|
|
39
|
+
items: [
|
|
40
|
+
{
|
|
41
|
+
assistant: {
|
|
42
|
+
type: 'assistant',
|
|
43
|
+
text: genaicodeHelpCall.args?.message ?? '',
|
|
44
|
+
functionCalls: [genaicodeHelpCall],
|
|
45
|
+
},
|
|
46
|
+
user: {
|
|
47
|
+
type: 'user',
|
|
48
|
+
text: response.answer,
|
|
49
|
+
functionResponses: [{ name: 'genaicodeHelp', call_id: genaicodeHelpCall.id, content: '' }],
|
|
50
|
+
},
|
|
51
|
+
},
|
|
52
|
+
],
|
|
53
|
+
};
|
|
54
|
+
}
|
|
55
|
+
catch (error) {
|
|
56
|
+
console.error('Error in help handler:', error);
|
|
57
|
+
return {
|
|
58
|
+
breakLoop: false,
|
|
59
|
+
items: [
|
|
60
|
+
{
|
|
61
|
+
assistant: {
|
|
62
|
+
type: 'assistant',
|
|
63
|
+
text: iterateCall.args?.message || 'How can I help you?',
|
|
64
|
+
},
|
|
65
|
+
user: {
|
|
66
|
+
type: 'user',
|
|
67
|
+
text: 'Sorry, I encountered an error while retrieving the help documentation. Please try again or check if the documentation file exists.',
|
|
68
|
+
},
|
|
69
|
+
},
|
|
70
|
+
],
|
|
71
|
+
};
|
|
72
|
+
}
|
|
73
|
+
}
|
|
74
|
+
async function getGenaicodeHelpCall(generateContentFn, prompt) {
|
|
75
|
+
const [genaicodeHelpCall] = (await generateContentFn([
|
|
76
|
+
{
|
|
77
|
+
type: 'assistant',
|
|
78
|
+
text: 'I can help you with questions about GenAIcode, but first I need access to genaicode documentation, could you please provide it?',
|
|
79
|
+
},
|
|
80
|
+
{
|
|
81
|
+
type: 'user',
|
|
82
|
+
text: `Of course, here is the documentation:
|
|
83
|
+
|
|
84
|
+
\`\`\`
|
|
85
|
+
${GENAICODE_HELP_DOCUMENT}
|
|
86
|
+
\`\`\`
|
|
87
|
+
`,
|
|
88
|
+
},
|
|
89
|
+
...prompt,
|
|
90
|
+
], {
|
|
91
|
+
functionDefs: getFunctionDefs(),
|
|
92
|
+
requiredFunctionName: 'genaicodeHelp',
|
|
93
|
+
temperature: 0.7,
|
|
94
|
+
modelType: ModelType.CHEAP,
|
|
95
|
+
expectedResponseType: {
|
|
96
|
+
text: false,
|
|
97
|
+
functionCall: true,
|
|
98
|
+
media: false,
|
|
99
|
+
},
|
|
100
|
+
}, {}))
|
|
101
|
+
.filter((item) => item.type === 'functionCall')
|
|
102
|
+
.map((item) => item.functionCall);
|
|
103
|
+
return [genaicodeHelpCall];
|
|
104
|
+
}
|
|
105
|
+
//# sourceMappingURL=handle-genaicode-help.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"handle-genaicode-help.js","sourceRoot":"","sources":["../../../../../src/prompt/steps/step-iterate/handlers/handle-genaicode-help.ts"],"names":[],"mappings":"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"}
|