genaicode 0.11.1 → 0.12.1
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 +3 -9
- package/dist/ai-service/ai-studio.d.ts +18 -1
- package/dist/ai-service/ai-studio.js +92 -21
- package/dist/ai-service/ai-studio.js.map +1 -1
- package/dist/ai-service/anthropic.js +59 -25
- package/dist/ai-service/anthropic.js.map +1 -1
- package/dist/ai-service/common-types.d.ts +8 -3
- package/dist/ai-service/common.d.ts +5 -1
- package/dist/ai-service/common.js +9 -0
- package/dist/ai-service/common.js.map +1 -1
- package/dist/ai-service/dall-e.js +1 -0
- package/dist/ai-service/dall-e.js.map +1 -1
- package/dist/ai-service/github-models.d.ts +13 -0
- package/dist/ai-service/github-models.js +51 -0
- package/dist/ai-service/github-models.js.map +1 -0
- package/dist/ai-service/local-llm.js +2 -1
- package/dist/ai-service/local-llm.js.map +1 -1
- package/dist/ai-service/openai-responses.d.ts +9 -0
- package/dist/ai-service/openai-responses.js +286 -0
- package/dist/ai-service/openai-responses.js.map +1 -0
- package/dist/ai-service/openai.js +22 -10
- package/dist/ai-service/openai.js.map +1 -1
- package/dist/ai-service/service-configurations-types.d.ts +7 -7
- package/dist/ai-service/service-configurations.d.ts +1 -0
- package/dist/ai-service/service-configurations.js +41 -36
- package/dist/ai-service/service-configurations.js.map +1 -1
- package/dist/ai-service/vertex-ai-claude.js +2 -2
- package/dist/ai-service/vertex-ai-claude.js.map +1 -1
- package/dist/ai-service/vertex-ai.d.ts +1 -0
- package/dist/ai-service/vertex-ai.js +4 -332
- package/dist/ai-service/vertex-ai.js.map +1 -1
- package/dist/cli/cli-options.js +1 -1
- package/dist/cli/cli-options.js.map +1 -1
- package/dist/cli/validate-cli-params.js +1 -1
- package/dist/cli/validate-cli-params.js.map +1 -1
- package/dist/files/cache-file.d.ts +4 -0
- package/dist/files/cache-file.js +21 -0
- package/dist/files/cache-file.js.map +1 -1
- package/dist/files/find-files.d.ts +1 -0
- package/dist/files/find-files.js +4 -1
- package/dist/files/find-files.js.map +1 -1
- package/dist/files/source-code-utils.js +1 -1
- package/dist/files/summary-cache.d.ts +1 -1
- package/dist/files/summary-cache.js +1 -1
- package/dist/files/summary-cache.js.map +1 -1
- package/dist/main/codegen-utils.d.ts +6 -1
- package/dist/main/codegen-utils.js +21 -2
- package/dist/main/codegen-utils.js.map +1 -1
- package/dist/main/codegen.js +2 -2
- package/dist/main/codegen.js.map +1 -1
- package/dist/main/common/content-bus-types.d.ts +17 -1
- package/dist/main/common/content-bus.d.ts +3 -1
- package/dist/main/common/content-bus.js +23 -1
- package/dist/main/common/content-bus.js.map +1 -1
- package/dist/main/common/user-actions.d.ts +3 -0
- package/dist/main/common/user-actions.js +10 -0
- package/dist/main/common/user-actions.js.map +1 -1
- package/dist/main/config-lib.js +3 -2
- package/dist/main/config-lib.js.map +1 -1
- package/dist/main/config-types.d.ts +4 -0
- package/dist/main/config.js +4 -0
- package/dist/main/config.js.map +1 -1
- package/dist/main/interactive/select-ai-service.js +0 -1
- package/dist/main/interactive/select-ai-service.js.map +1 -1
- package/dist/main/interactive/user-action-handlers.js +7 -2
- package/dist/main/interactive/user-action-handlers.js.map +1 -1
- package/dist/main/knowledge/knowledge-store.d.ts +6 -0
- package/dist/main/knowledge/knowledge-store.js +128 -0
- package/dist/main/knowledge/knowledge-store.js.map +1 -0
- package/dist/main/knowledge/types.d.ts +20 -0
- package/dist/main/knowledge/types.js +2 -0
- package/dist/main/knowledge/types.js.map +1 -0
- package/dist/main/ui/backend/endpoints/interrupt-execution-endpoint.js +17 -3
- package/dist/main/ui/backend/endpoints/interrupt-execution-endpoint.js.map +1 -1
- package/dist/main/ui/common/api-types.d.ts +67 -4
- package/dist/main/ui/common/api-types.js +12 -1
- package/dist/main/ui/common/api-types.js.map +1 -1
- package/dist/main/ui/frontend/assets/index-j9Oi9iiP.js +2635 -0
- package/dist/main/ui/frontend/index.html +1 -1
- package/dist/main/ui/user-action-handlers.js +7 -1
- package/dist/main/ui/user-action-handlers.js.map +1 -1
- package/dist/project-profiles/types.d.ts +4 -4
- package/dist/project-profiles/types.js +4 -4
- package/dist/project-profiles/types.js.map +1 -1
- package/dist/prompt/function-calling-validate.js +2 -1
- package/dist/prompt/function-calling-validate.js.map +1 -1
- package/dist/prompt/function-calling.js +4 -0
- package/dist/prompt/function-calling.js.map +1 -1
- package/dist/prompt/function-defs/ask-question.js +4 -0
- package/dist/prompt/function-defs/ask-question.js.map +1 -1
- package/dist/prompt/function-defs/container-task-commands.d.ts +10 -0
- package/dist/prompt/function-defs/container-task-commands.js +185 -0
- package/dist/prompt/function-defs/container-task-commands.js.map +1 -0
- package/dist/prompt/function-defs/run-container-task.d.ts +11 -0
- package/dist/prompt/function-defs/run-container-task.js +41 -0
- package/dist/prompt/function-defs/run-container-task.js.map +1 -0
- package/dist/prompt/function-defs/web-search.d.ts +9 -0
- package/dist/prompt/function-defs/web-search.js +16 -0
- package/dist/prompt/function-defs/web-search.js.map +1 -0
- package/dist/prompt/limits.js +1 -1
- package/dist/prompt/steps/step-ask-question/handlers/container-task/command-execution-loop.d.ts +7 -0
- package/dist/prompt/steps/step-ask-question/handlers/container-task/command-execution-loop.js +301 -0
- package/dist/prompt/steps/step-ask-question/handlers/container-task/command-execution-loop.js.map +1 -0
- package/dist/prompt/steps/step-ask-question/handlers/container-task/commands/check-context.d.ts +12 -0
- package/dist/prompt/steps/step-ask-question/handlers/container-task/commands/check-context.js +41 -0
- package/dist/prompt/steps/step-ask-question/handlers/container-task/commands/check-context.js.map +1 -0
- package/dist/prompt/steps/step-ask-question/handlers/container-task/commands/complete-task.d.ts +4 -0
- package/dist/prompt/steps/step-ask-question/handlers/container-task/commands/complete-task.js +49 -0
- package/dist/prompt/steps/step-ask-question/handlers/container-task/commands/complete-task.js.map +1 -0
- package/dist/prompt/steps/step-ask-question/handlers/container-task/commands/copy-from-container.d.ts +4 -0
- package/dist/prompt/steps/step-ask-question/handlers/container-task/commands/copy-from-container.js +190 -0
- package/dist/prompt/steps/step-ask-question/handlers/container-task/commands/copy-from-container.js.map +1 -0
- package/dist/prompt/steps/step-ask-question/handlers/container-task/commands/copy-to-container.d.ts +4 -0
- package/dist/prompt/steps/step-ask-question/handlers/container-task/commands/copy-to-container.js +139 -0
- package/dist/prompt/steps/step-ask-question/handlers/container-task/commands/copy-to-container.js.map +1 -0
- package/dist/prompt/steps/step-ask-question/handlers/container-task/commands/edit-file.d.ts +10 -0
- package/dist/prompt/steps/step-ask-question/handlers/container-task/commands/edit-file.js +93 -0
- package/dist/prompt/steps/step-ask-question/handlers/container-task/commands/edit-file.js.map +1 -0
- package/dist/prompt/steps/step-ask-question/handlers/container-task/commands/fail-task.d.ts +4 -0
- package/dist/prompt/steps/step-ask-question/handlers/container-task/commands/fail-task.js +72 -0
- package/dist/prompt/steps/step-ask-question/handlers/container-task/commands/fail-task.js.map +1 -0
- package/dist/prompt/steps/step-ask-question/handlers/container-task/commands/gain-knowledge.d.ts +10 -0
- package/dist/prompt/steps/step-ask-question/handlers/container-task/commands/gain-knowledge.js +125 -0
- package/dist/prompt/steps/step-ask-question/handlers/container-task/commands/gain-knowledge.js.map +1 -0
- package/dist/prompt/steps/step-ask-question/handlers/container-task/commands/interrupt-controller.d.ts +19 -0
- package/dist/prompt/steps/step-ask-question/handlers/container-task/commands/interrupt-controller.js +33 -0
- package/dist/prompt/steps/step-ask-question/handlers/container-task/commands/interrupt-controller.js.map +1 -0
- package/dist/prompt/steps/step-ask-question/handlers/container-task/commands/query-knowledge.d.ts +8 -0
- package/dist/prompt/steps/step-ask-question/handlers/container-task/commands/query-knowledge.js +85 -0
- package/dist/prompt/steps/step-ask-question/handlers/container-task/commands/query-knowledge.js.map +1 -0
- package/dist/prompt/steps/step-ask-question/handlers/container-task/commands/request-secret.d.ts +6 -0
- package/dist/prompt/steps/step-ask-question/handlers/container-task/commands/request-secret.js +122 -0
- package/dist/prompt/steps/step-ask-question/handlers/container-task/commands/request-secret.js.map +1 -0
- package/dist/prompt/steps/step-ask-question/handlers/container-task/commands/run-command.d.ts +7 -0
- package/dist/prompt/steps/step-ask-question/handlers/container-task/commands/run-command.js +146 -0
- package/dist/prompt/steps/step-ask-question/handlers/container-task/commands/run-command.js.map +1 -0
- package/dist/prompt/steps/step-ask-question/handlers/container-task/commands/send-message.d.ts +4 -0
- package/dist/prompt/steps/step-ask-question/handlers/container-task/commands/send-message.js +56 -0
- package/dist/prompt/steps/step-ask-question/handlers/container-task/commands/send-message.js.map +1 -0
- package/dist/prompt/steps/step-ask-question/handlers/container-task/commands/set-execution-plan.d.ts +4 -0
- package/dist/prompt/steps/step-ask-question/handlers/container-task/commands/set-execution-plan.js +56 -0
- package/dist/prompt/steps/step-ask-question/handlers/container-task/commands/set-execution-plan.js.map +1 -0
- package/dist/prompt/steps/step-ask-question/handlers/container-task/commands/update-execution-plan.d.ts +4 -0
- package/dist/prompt/steps/step-ask-question/handlers/container-task/commands/update-execution-plan.js +39 -0
- package/dist/prompt/steps/step-ask-question/handlers/container-task/commands/update-execution-plan.js.map +1 -0
- package/dist/prompt/steps/step-ask-question/handlers/container-task/commands/view-file.d.ts +10 -0
- package/dist/prompt/steps/step-ask-question/handlers/container-task/commands/view-file.js +95 -0
- package/dist/prompt/steps/step-ask-question/handlers/container-task/commands/view-file.js.map +1 -0
- package/dist/prompt/steps/step-ask-question/handlers/container-task/commands/web-search.d.ts +2 -0
- package/dist/prompt/steps/step-ask-question/handlers/container-task/commands/web-search.js +96 -0
- package/dist/prompt/steps/step-ask-question/handlers/container-task/commands/web-search.js.map +1 -0
- package/dist/prompt/steps/step-ask-question/handlers/container-task/commands/wrap-context.d.ts +4 -0
- package/dist/prompt/steps/step-ask-question/handlers/container-task/commands/wrap-context.js +123 -0
- package/dist/prompt/steps/step-ask-question/handlers/container-task/commands/wrap-context.js.map +1 -0
- package/dist/prompt/steps/step-ask-question/handlers/container-task/container-command-handlers.d.ts +34 -0
- package/dist/prompt/steps/step-ask-question/handlers/container-task/container-command-handlers.js +332 -0
- package/dist/prompt/steps/step-ask-question/handlers/container-task/container-command-handlers.js.map +1 -0
- package/dist/prompt/steps/step-ask-question/handlers/container-task/container-commands-registry.d.ts +11 -0
- package/dist/prompt/steps/step-ask-question/handlers/container-task/container-commands-registry.js +50 -0
- package/dist/prompt/steps/step-ask-question/handlers/container-task/container-commands-registry.js.map +1 -0
- package/dist/prompt/steps/step-ask-question/handlers/container-task/container-commands-types.d.ts +28 -0
- package/dist/prompt/steps/step-ask-question/handlers/container-task/container-commands-types.js +2 -0
- package/dist/prompt/steps/step-ask-question/handlers/container-task/container-commands-types.js.map +1 -0
- package/dist/prompt/steps/step-ask-question/handlers/container-task/container-task-orchestrator.d.ts +2 -0
- package/dist/prompt/steps/step-ask-question/handlers/container-task/container-task-orchestrator.js +202 -0
- package/dist/prompt/steps/step-ask-question/handlers/container-task/container-task-orchestrator.js.map +1 -0
- package/dist/prompt/steps/step-ask-question/handlers/container-task/container-task-types.d.ts +52 -0
- package/dist/prompt/steps/step-ask-question/handlers/container-task/container-task-types.js +2 -0
- package/dist/prompt/steps/step-ask-question/handlers/container-task/container-task-types.js.map +1 -0
- package/dist/prompt/steps/step-ask-question/handlers/container-task/utils/docker-check.d.ts +4 -0
- package/dist/prompt/steps/step-ask-question/handlers/container-task/utils/docker-check.js +15 -0
- package/dist/prompt/steps/step-ask-question/handlers/container-task/utils/docker-check.js.map +1 -0
- package/dist/prompt/steps/step-ask-question/handlers/container-task/utils/docker-utils.d.ts +50 -0
- package/dist/prompt/steps/step-ask-question/handlers/container-task/utils/docker-utils.js +358 -0
- package/dist/prompt/steps/step-ask-question/handlers/container-task/utils/docker-utils.js.map +1 -0
- package/dist/prompt/steps/step-ask-question/handlers/handle-compound-action.js +2 -2
- package/dist/prompt/steps/step-ask-question/handlers/handle-compound-action.js.map +1 -1
- package/dist/prompt/steps/step-ask-question/handlers/handle-explore-external-directories.js +1 -1
- package/dist/prompt/steps/step-ask-question/handlers/handle-explore-external-directories.js.map +1 -1
- package/dist/prompt/steps/step-ask-question/handlers/handle-genaicode-help.js +1 -1
- package/dist/prompt/steps/step-ask-question/handlers/handle-genaicode-help.js.map +1 -1
- package/dist/prompt/steps/step-ask-question/handlers/handle-generate-image.js +2 -2
- package/dist/prompt/steps/step-ask-question/handlers/handle-generate-image.js.map +1 -1
- package/dist/prompt/steps/step-ask-question/handlers/handle-perform-analysis.js +1 -1
- package/dist/prompt/steps/step-ask-question/handlers/handle-perform-analysis.js.map +1 -1
- package/dist/prompt/steps/step-ask-question/handlers/handle-run-container-task.d.ts +2 -0
- package/dist/prompt/steps/step-ask-question/handlers/handle-run-container-task.js +7 -0
- package/dist/prompt/steps/step-ask-question/handlers/handle-run-container-task.js.map +1 -0
- package/dist/prompt/steps/step-ask-question/handlers/handle-send-message.js +1 -1
- package/dist/prompt/steps/step-ask-question/handlers/handle-send-message.js.map +1 -1
- package/dist/prompt/steps/step-ask-question/handlers/handle-web-search.d.ts +1 -0
- package/dist/prompt/steps/step-ask-question/handlers/handle-web-search.js +85 -0
- package/dist/prompt/steps/step-ask-question/handlers/handle-web-search.js.map +1 -0
- package/dist/prompt/steps/step-ask-question/step-ask-question-types.d.ts +1 -1
- package/dist/prompt/steps/step-ask-question/step-ask-question.d.ts +2 -0
- package/dist/prompt/steps/step-ask-question/step-ask-question.js +11 -1
- package/dist/prompt/steps/step-ask-question/step-ask-question.js.map +1 -1
- package/dist/prompt/steps/step-codegen-planning.js +1 -1
- package/dist/prompt/steps/step-codegen-planning.js.map +1 -1
- package/dist/prompt/steps/step-summarization.js +17 -10
- package/dist/prompt/steps/step-summarization.js.map +1 -1
- package/dist/prompt/systemprompt.js +3 -0
- package/dist/prompt/systemprompt.js.map +1 -1
- package/dist/utils/docker-utils.d.ts +37 -0
- package/dist/utils/docker-utils.js +258 -0
- package/dist/utils/docker-utils.js.map +1 -0
- package/dist/vite-genaicode/vite-genaicode-plugin.js +8 -1
- package/dist/vite-genaicode/vite-genaicode-plugin.js.map +1 -1
- package/package.json +13 -5
- package/dist/main/ui/frontend/assets/index-DylPpHEw.js +0 -2256
package/dist/prompt/steps/step-ask-question/handlers/container-task/commands/query-knowledge.js
ADDED
|
@@ -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-ask-question/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-ask-question/handlers/container-task/commands/query-knowledge.ts"],"names":[],"mappings":"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"}
|
package/dist/prompt/steps/step-ask-question/handlers/container-task/commands/request-secret.d.ts
ADDED
|
@@ -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>;
|
package/dist/prompt/steps/step-ask-question/handlers/container-task/commands/request-secret.js
ADDED
|
@@ -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
|
package/dist/prompt/steps/step-ask-question/handlers/container-task/commands/request-secret.js.map
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"request-secret.js","sourceRoot":"","sources":["../../../../../../../src/prompt/steps/step-ask-question/handlers/container-task/commands/request-secret.ts"],"names":[],"mappings":"AAAA,OAAO,IAAI,MAAM,MAAM,CAAC;AAExB,OAAO,EAAE,mBAAmB,EAAE,eAAe,EAAE,gBAAgB,EAAE,MAAM,8CAA8C,CAAC;AACtH,OAAO,EAAE,gBAAgB,EAAE,MAAM,+CAA+C,CAAC;AACjF,OAAO,EAAE,cAAc,EAAE,MAAM,0BAA0B,CAAC;AAG1D,MAAM,CAAC,MAAM,gBAAgB,GAAgB;IAC3C,IAAI,EAAE,eAAe;IACrB,WAAW,EACT,gNAAgN;IAClN,UAAU,EAAE;QACV,IAAI,EAAE,QAAQ;QACd,UAAU,EAAE;YACV,SAAS,EAAE;gBACT,IAAI,EAAE,QAAQ;gBACd,WAAW,EAAE,wDAAwD;aACtE;YACD,GAAG,EAAE;gBACH,IAAI,EAAE,QAAQ;gBACd,WAAW,EAAE,oFAAoF;aAClG;YACD,WAAW,EAAE;gBACX,IAAI,EAAE,QAAQ;gBACd,WAAW,EACT,uGAAuG;aAC1G;YACD,mBAAmB,EAAE;gBACnB,IAAI,EAAE,QAAQ;gBACd,WAAW,EACT,qHAAqH;aACxH;SACF;QACD,QAAQ,EAAE,CAAC,WAAW,EAAE,KAAK,EAAE,aAAa,EAAE,qBAAqB,CAAC;KACrE;CACF,CAAC;AASF,MAAM,eAAe,GAAa,EAAE,CAAC;AAErC,MAAM,UAAU,cAAc,CAAC,MAAoB;IACjD,IAAI,IAAI,GAAG,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,CAAC;IAClC,KAAK,MAAM,MAAM,IAAI,eAAe,EAAE,CAAC;QACrC,MAAM,aAAa,GAAG,MAAM,CAAC,OAAO,CAAC,uBAAuB,EAAE,MAAM,CAAC,CAAC;QACtE,MAAM,KAAK,GAAG,IAAI,MAAM,CAAC,aAAa,EAAE,GAAG,CAAC,CAAC;QAC7C,IAAI,GAAG,IAAI,CAAC,OAAO,CAAC,KAAK,EAAE,YAAY,CAAC,CAAC;IAC3C,CAAC;IACD,OAAO,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;AAC1B,CAAC;AAED,MAAM,UAAU,cAAc,CAAC,MAAc;IAC3C,IAAI,CAAC,eAAe,CAAC,QAAQ,CAAC,MAAM,CAAC,EAAE,CAAC;QACtC,eAAe,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;IAC/B,CAAC;AACH,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,mBAAmB,CAAC,KAA8B;IACtE,MAAM,EAAE,YAAY,EAAE,mBAAmB,EAAE,SAAS,EAAE,GAAG,KAAK,CAAC;IAC/D,MAAM,IAAI,GAAG,YAAY,CAAC,IAAyB,CAAC;IACpD,MAAM,EAAE,SAAS,EAAE,GAAG,EAAE,WAAW,EAAE,mBAAmB,EAAE,GAAG,IAAI,CAAC;IAElE,eAAe,CAAC,MAAM,EAAE,sBAAsB,SAAS,EAAE,EAAE,IAAI,EAAE,SAAS,CAAC,CAAC;IAE5E,MAAM,WAAW,GAAG,MAAM,gBAAgB,CAAC,WAAW,CAAC,CAAC;IAExD,mBAAmB,CAAC,WAAW,CAAC,CAAC;IAEjC,IAAI,WAAW,EAAE,CAAC;QAChB,gBAAgB,CAAC,0CAA0C,CAAC,CAAC;QAC7D,cAAc,CAAC,WAAW,CAAC,CAAC;QAC5B,IAAI,CAAC;YACH,MAAM,OAAO,GAAG,IAAI,CAAC,OAAO,CAAC,mBAAmB,CAAC,CAAC;YAClD,MAAM,WAAW,GAAG,MAAM,cAAc,CAAC,SAAS,EAAE,SAAS,EAAE,aAAa,OAAO,GAAG,EAAE,SAAS,EAAE,GAAG,CAAC,CAAC;YACxG,IAAI,WAAW,CAAC,QAAQ,KAAK,CAAC,EAAE,CAAC;gBAC/B,MAAM,IAAI,KAAK,CAAC,8BAA8B,OAAO,KAAK,WAAW,CAAC,MAAM,EAAE,CAAC,CAAC;YAClF,CAAC;YAED,MAAM,OAAO,GAAG,QAAQ,mBAAmB,GAAG,CAAC;YAC/C,MAAM,MAAM,GAAG,MAAM,cAAc,CAAC,SAAS,EAAE,SAAS,EAAE,OAAO,EAAE,WAAW,EAAE,GAAG,CAAC,CAAC;YAErF,IAAI,MAAM,CAAC,QAAQ,KAAK,CAAC,EAAE,CAAC;gBAC1B,MAAM,IAAI,KAAK,CAAC,mCAAmC,MAAM,CAAC,MAAM,EAAE,CAAC,CAAC;YACtE,CAAC;YAED,eAAe,CAAC,SAAS,EAAE,WAAW,GAAG,2BAA2B,mBAAmB,GAAG,CAAC,CAAC;YAC5F,mBAAmB,CAAC,IAAI,CACtB;gBACE,IAAI,EAAE,WAAW;gBACjB,IAAI,EAAE,qCAAqC,SAAS,EAAE;gBACtD,aAAa,EAAE,CAAC,YAAY,CAAC;aAC9B,EACD;gBACE,IAAI,EAAE,MAAM;gBACZ,iBAAiB,EAAE;oBACjB;wBACE,IAAI,EAAE,YAAY,CAAC,IAAI;wBACvB,OAAO,EAAE,YAAY,CAAC,EAAE,IAAI,SAAS;wBACrC,OAAO,EAAE,mBAAmB,GAAG,gDAAgD,mBAAmB,GAAG;qBACtG;iBACF;aACF,CACF,CAAC;QACJ,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,MAAM,YAAY,GAAG,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;YAC5E,eAAe,CAAC,OAAO,EAAE,kCAAkC,GAAG,MAAM,YAAY,EAAE,CAAC,CAAC;YACpF,mBAAmB,CAAC,IAAI,CACtB;gBACE,IAAI,EAAE,WAAW;gBACjB,IAAI,EAAE,qCAAqC,SAAS,EAAE;gBACtD,aAAa,EAAE,CAAC,YAAY,CAAC;aAC9B,EACD;gBACE,IAAI,EAAE,MAAM;gBACZ,iBAAiB,EAAE;oBACjB;wBACE,IAAI,EAAE,YAAY,CAAC,IAAI;wBACvB,OAAO,EAAE,YAAY,CAAC,EAAE,IAAI,SAAS;wBACrC,OAAO,EAAE,kCAAkC,GAAG,MAAM,YAAY,EAAE;qBACnE;iBACF;aACF,CACF,CAAC;QACJ,CAAC;IACH,CAAC;SAAM,CAAC;QACN,gBAAgB,CAAC,sCAAsC,CAAC,CAAC;QACzD,eAAe,CAAC,MAAM,EAAE,wCAAwC,GAAG,IAAI,CAAC,CAAC;QACzE,mBAAmB,CAAC,IAAI,CACtB;YACE,IAAI,EAAE,WAAW;YACjB,IAAI,EAAE,qCAAqC,SAAS,EAAE;YACtD,aAAa,EAAE,CAAC,YAAY,CAAC;SAC9B,EACD;YACE,IAAI,EAAE,MAAM;YACZ,iBAAiB,EAAE;gBACjB;oBACE,IAAI,EAAE,YAAY,CAAC,IAAI;oBACvB,OAAO,EAAE,YAAY,CAAC,EAAE,IAAI,SAAS;oBACrC,OAAO,EAAE,4CAA4C,GAAG,IAAI;iBAC7D;aACF;SACF,CACF,CAAC;IACJ,CAAC;IAED,OAAO,EAAE,gBAAgB,EAAE,KAAK,EAAE,yBAAyB,EAAE,CAAC,EAAE,CAAC;AACnE,CAAC"}
|
|
@@ -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
|
package/dist/prompt/steps/step-ask-question/handlers/container-task/commands/run-command.js.map
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"run-command.js","sourceRoot":"","sources":["../../../../../../../src/prompt/steps/step-ask-question/handlers/container-task/commands/run-command.ts"],"names":[],"mappings":"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"}
|
package/dist/prompt/steps/step-ask-question/handlers/container-task/commands/send-message.d.ts
ADDED
|
@@ -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>;
|
|
@@ -0,0 +1,56 @@
|
|
|
1
|
+
import { putAssistantMessage, putUserMessage } from '../../../../../../main/common/content-bus.js';
|
|
2
|
+
import { askUserForInput } from '../../../../../../main/common/user-actions.js';
|
|
3
|
+
export const sendMessageDef = {
|
|
4
|
+
name: 'sendMessage',
|
|
5
|
+
description: 'Send a message to the user, either to inform them about something, or ask them a question, or answer their question.',
|
|
6
|
+
parameters: {
|
|
7
|
+
type: 'object',
|
|
8
|
+
properties: {
|
|
9
|
+
message: {
|
|
10
|
+
type: 'string',
|
|
11
|
+
description: 'The message to send to the user.',
|
|
12
|
+
},
|
|
13
|
+
waitForUserResponse: {
|
|
14
|
+
type: 'boolean',
|
|
15
|
+
description: 'Whether the message is a question, and user input is expected.',
|
|
16
|
+
},
|
|
17
|
+
},
|
|
18
|
+
required: ['message', 'waitForUserResponse'],
|
|
19
|
+
},
|
|
20
|
+
};
|
|
21
|
+
export async function handleSendMessage(props) {
|
|
22
|
+
const { actionResult, taskExecutionPrompt, options } = props;
|
|
23
|
+
const args = actionResult.args;
|
|
24
|
+
taskExecutionPrompt.push({
|
|
25
|
+
type: 'assistant',
|
|
26
|
+
functionCalls: [actionResult],
|
|
27
|
+
});
|
|
28
|
+
putAssistantMessage(args.message);
|
|
29
|
+
if (args.waitForUserResponse) {
|
|
30
|
+
const response = await askUserForInput('Your answer', '', options);
|
|
31
|
+
putUserMessage(response.answer);
|
|
32
|
+
taskExecutionPrompt.push({
|
|
33
|
+
type: 'user',
|
|
34
|
+
text: response.answer,
|
|
35
|
+
functionResponses: [
|
|
36
|
+
{
|
|
37
|
+
name: actionResult.name,
|
|
38
|
+
call_id: actionResult.id || undefined,
|
|
39
|
+
},
|
|
40
|
+
],
|
|
41
|
+
});
|
|
42
|
+
}
|
|
43
|
+
else {
|
|
44
|
+
taskExecutionPrompt.push({
|
|
45
|
+
type: 'user',
|
|
46
|
+
functionResponses: [
|
|
47
|
+
{
|
|
48
|
+
name: actionResult.name,
|
|
49
|
+
call_id: actionResult.id || undefined,
|
|
50
|
+
},
|
|
51
|
+
],
|
|
52
|
+
});
|
|
53
|
+
}
|
|
54
|
+
return { shouldBreakOuter: false, commandsExecutedIncrement: 0 };
|
|
55
|
+
}
|
|
56
|
+
//# sourceMappingURL=send-message.js.map
|
package/dist/prompt/steps/step-ask-question/handlers/container-task/commands/send-message.js.map
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"send-message.js","sourceRoot":"","sources":["../../../../../../../src/prompt/steps/step-ask-question/handlers/container-task/commands/send-message.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,mBAAmB,EAAE,cAAc,EAAE,MAAM,8CAA8C,CAAC;AACnG,OAAO,EAAE,eAAe,EAAE,MAAM,+CAA+C,CAAC;AAGhF,MAAM,CAAC,MAAM,cAAc,GAAgB;IACzC,IAAI,EAAE,aAAa;IACnB,WAAW,EACT,sHAAsH;IACxH,UAAU,EAAE;QACV,IAAI,EAAE,QAAQ;QACd,UAAU,EAAE;YACV,OAAO,EAAE;gBACP,IAAI,EAAE,QAAQ;gBACd,WAAW,EAAE,kCAAkC;aAChD;YACD,mBAAmB,EAAE;gBACnB,IAAI,EAAE,SAAS;gBACf,WAAW,EAAE,gEAAgE;aAC9E;SACF;QACD,QAAQ,EAAE,CAAC,SAAS,EAAE,qBAAqB,CAAC;KAC7C;CACF,CAAC;AAIF,MAAM,CAAC,KAAK,UAAU,iBAAiB,CACrC,KAAwF;IAExF,MAAM,EAAE,YAAY,EAAE,mBAAmB,EAAE,OAAO,EAAE,GAAG,KAAK,CAAC;IAC7D,MAAM,IAAI,GAAG,YAAY,CAAC,IAAuB,CAAC;IAElD,mBAAmB,CAAC,IAAI,CAAC;QACvB,IAAI,EAAE,WAAW;QACjB,aAAa,EAAE,CAAC,YAAY,CAAC;KAC9B,CAAC,CAAC;IAEH,mBAAmB,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;IAClC,IAAI,IAAI,CAAC,mBAAmB,EAAE,CAAC;QAC7B,MAAM,QAAQ,GAAG,MAAM,eAAe,CAAC,aAAa,EAAE,EAAE,EAAE,OAAO,CAAC,CAAC;QACnE,cAAc,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC;QAChC,mBAAmB,CAAC,IAAI,CAAC;YACvB,IAAI,EAAE,MAAM;YACZ,IAAI,EAAE,QAAQ,CAAC,MAAM;YACrB,iBAAiB,EAAE;gBACjB;oBACE,IAAI,EAAE,YAAY,CAAC,IAAI;oBACvB,OAAO,EAAE,YAAY,CAAC,EAAE,IAAI,SAAS;iBACtC;aACF;SACF,CAAC,CAAC;IACL,CAAC;SAAM,CAAC;QACN,mBAAmB,CAAC,IAAI,CAAC;YACvB,IAAI,EAAE,MAAM;YACZ,iBAAiB,EAAE;gBACjB;oBACE,IAAI,EAAE,YAAY,CAAC,IAAI;oBACvB,OAAO,EAAE,YAAY,CAAC,EAAE,IAAI,SAAS;iBACtC;aACF;SACF,CAAC,CAAC;IACL,CAAC;IACD,OAAO,EAAE,gBAAgB,EAAE,KAAK,EAAE,yBAAyB,EAAE,CAAC,EAAE,CAAC;AACnE,CAAC"}
|
package/dist/prompt/steps/step-ask-question/handlers/container-task/commands/set-execution-plan.d.ts
ADDED
|
@@ -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 setExecutionPlanDef: FunctionDef;
|
|
4
|
+
export declare function handleSetExecutionPlan(props: Pick<CommandHandlerBaseProps, 'actionResult' | 'taskExecutionPrompt'>): Promise<CommandHandlerResult>;
|
package/dist/prompt/steps/step-ask-question/handlers/container-task/commands/set-execution-plan.js
ADDED
|
@@ -0,0 +1,56 @@
|
|
|
1
|
+
import { putContainerLog } from '../../../../../../main/common/content-bus.js';
|
|
2
|
+
import { updateExecutionPlanDef } from './update-execution-plan.js';
|
|
3
|
+
export const setExecutionPlanDef = {
|
|
4
|
+
name: 'setExecutionPlan',
|
|
5
|
+
description: 'Record a concise execution plan to follow in subsequent steps.',
|
|
6
|
+
parameters: {
|
|
7
|
+
type: 'object',
|
|
8
|
+
properties: {
|
|
9
|
+
plan: {
|
|
10
|
+
type: 'array',
|
|
11
|
+
description: 'The steps of the execution plan. This is the latest most up to date version of the plan, which takes into account all prior context and findings.',
|
|
12
|
+
items: {
|
|
13
|
+
type: 'object',
|
|
14
|
+
description: 'A single step in the execution plan.',
|
|
15
|
+
properties: {
|
|
16
|
+
id: {
|
|
17
|
+
type: 'string',
|
|
18
|
+
description: 'A unique identifier for this step.',
|
|
19
|
+
},
|
|
20
|
+
description: {
|
|
21
|
+
type: 'string',
|
|
22
|
+
description: 'A brief description of this step.',
|
|
23
|
+
},
|
|
24
|
+
dependsOn: {
|
|
25
|
+
type: 'array',
|
|
26
|
+
description: 'The IDs of the steps that this step depends on.',
|
|
27
|
+
items: {
|
|
28
|
+
type: 'string',
|
|
29
|
+
},
|
|
30
|
+
},
|
|
31
|
+
state: updateExecutionPlanDef.parameters.properties.state,
|
|
32
|
+
statusUpdate: updateExecutionPlanDef.parameters.properties.statusUpdate,
|
|
33
|
+
},
|
|
34
|
+
required: ['id', 'description', 'dependsOn'],
|
|
35
|
+
},
|
|
36
|
+
},
|
|
37
|
+
},
|
|
38
|
+
required: ['plan'],
|
|
39
|
+
},
|
|
40
|
+
};
|
|
41
|
+
export async function handleSetExecutionPlan(props) {
|
|
42
|
+
const { actionResult, taskExecutionPrompt } = props;
|
|
43
|
+
const args = actionResult.args;
|
|
44
|
+
putContainerLog('info', '📝 Execution plan recorded.', args);
|
|
45
|
+
taskExecutionPrompt.push({
|
|
46
|
+
type: 'assistant',
|
|
47
|
+
text: 'Setting execution plan.',
|
|
48
|
+
functionCalls: [actionResult],
|
|
49
|
+
}, {
|
|
50
|
+
type: 'user',
|
|
51
|
+
text: 'Please follow the execution plan carefully.',
|
|
52
|
+
functionResponses: [{ name: actionResult.name, call_id: actionResult.id || undefined }],
|
|
53
|
+
});
|
|
54
|
+
return { shouldBreakOuter: false, commandsExecutedIncrement: 0 };
|
|
55
|
+
}
|
|
56
|
+
//# sourceMappingURL=set-execution-plan.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"set-execution-plan.js","sourceRoot":"","sources":["../../../../../../../src/prompt/steps/step-ask-question/handlers/container-task/commands/set-execution-plan.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,eAAe,EAAE,MAAM,8CAA8C,CAAC;AAE/E,OAAO,EAAE,sBAAsB,EAAE,MAAM,4BAA4B,CAAC;AAEpE,MAAM,CAAC,MAAM,mBAAmB,GAAgB;IAC9C,IAAI,EAAE,kBAAkB;IACxB,WAAW,EAAE,gEAAgE;IAC7E,UAAU,EAAE;QACV,IAAI,EAAE,QAAQ;QACd,UAAU,EAAE;YACV,IAAI,EAAE;gBACJ,IAAI,EAAE,OAAO;gBACb,WAAW,EACT,mJAAmJ;gBACrJ,KAAK,EAAE;oBACL,IAAI,EAAE,QAAQ;oBACd,WAAW,EAAE,sCAAsC;oBACnD,UAAU,EAAE;wBACV,EAAE,EAAE;4BACF,IAAI,EAAE,QAAQ;4BACd,WAAW,EAAE,oCAAoC;yBAClD;wBACD,WAAW,EAAE;4BACX,IAAI,EAAE,QAAQ;4BACd,WAAW,EAAE,mCAAmC;yBACjD;wBACD,SAAS,EAAE;4BACT,IAAI,EAAE,OAAO;4BACb,WAAW,EAAE,iDAAiD;4BAC9D,KAAK,EAAE;gCACL,IAAI,EAAE,QAAQ;6BACf;yBACF;wBACD,KAAK,EAAE,sBAAsB,CAAC,UAAU,CAAC,UAAU,CAAC,KAAK;wBACzD,YAAY,EAAE,sBAAsB,CAAC,UAAU,CAAC,UAAU,CAAC,YAAY;qBACxE;oBACD,QAAQ,EAAE,CAAC,IAAI,EAAE,aAAa,EAAE,WAAW,CAAC;iBAC7C;aACF;SACF;QACD,QAAQ,EAAE,CAAC,MAAM,CAAC;KACnB;CACF,CAAC;AAIF,MAAM,CAAC,KAAK,UAAU,sBAAsB,CAC1C,KAA4E;IAE5E,MAAM,EAAE,YAAY,EAAE,mBAAmB,EAAE,GAAG,KAAK,CAAC;IACpD,MAAM,IAAI,GAAG,YAAY,CAAC,IAAwC,CAAC;IACnE,eAAe,CAAC,MAAM,EAAE,6BAA6B,EAAE,IAAI,CAAC,CAAC;IAE7D,mBAAmB,CAAC,IAAI,CACtB;QACE,IAAI,EAAE,WAAW;QACjB,IAAI,EAAE,yBAAyB;QAC/B,aAAa,EAAE,CAAC,YAAY,CAAC;KAC9B,EACD;QACE,IAAI,EAAE,MAAM;QACZ,IAAI,EAAE,6CAA6C;QACnD,iBAAiB,EAAE,CAAC,EAAE,IAAI,EAAE,YAAY,CAAC,IAAI,EAAE,OAAO,EAAE,YAAY,CAAC,EAAE,IAAI,SAAS,EAAE,CAAC;KACxF,CACF,CAAC;IACF,OAAO,EAAE,gBAAgB,EAAE,KAAK,EAAE,yBAAyB,EAAE,CAAC,EAAE,CAAC;AACnE,CAAC"}
|
|
@@ -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 updateExecutionPlanDef: FunctionDef;
|
|
4
|
+
export declare function handleUpdateExecutionPlan(props: Pick<CommandHandlerBaseProps, 'actionResult' | 'taskExecutionPrompt'>): Promise<CommandHandlerResult>;
|
|
@@ -0,0 +1,39 @@
|
|
|
1
|
+
import { putContainerLog } from '../../../../../../main/common/content-bus.js';
|
|
2
|
+
export const updateExecutionPlanDef = {
|
|
3
|
+
name: 'updateExecutionPlan',
|
|
4
|
+
description: 'Update progress/status against the previously set execution plan.',
|
|
5
|
+
parameters: {
|
|
6
|
+
type: 'object',
|
|
7
|
+
properties: {
|
|
8
|
+
id: {
|
|
9
|
+
type: 'string',
|
|
10
|
+
description: 'The ID of the step to update.',
|
|
11
|
+
},
|
|
12
|
+
statusUpdate: {
|
|
13
|
+
type: 'string',
|
|
14
|
+
description: 'The updated status of the step.',
|
|
15
|
+
},
|
|
16
|
+
state: {
|
|
17
|
+
type: 'string',
|
|
18
|
+
description: 'The state of the step, e.g., "pending", "in-progress", "completed", "failed", "skipped".',
|
|
19
|
+
enum: ['pending', 'in-progress', 'completed', 'failed', 'skipped'],
|
|
20
|
+
},
|
|
21
|
+
},
|
|
22
|
+
required: ['id', 'statusUpdate', 'state'],
|
|
23
|
+
},
|
|
24
|
+
};
|
|
25
|
+
export async function handleUpdateExecutionPlan(props) {
|
|
26
|
+
const { actionResult, taskExecutionPrompt } = props;
|
|
27
|
+
const args = actionResult.args;
|
|
28
|
+
putContainerLog('info', '📈 Execution plan updated.', args);
|
|
29
|
+
taskExecutionPrompt.push({
|
|
30
|
+
type: 'assistant',
|
|
31
|
+
text: `Updating execution plan for step ${args.id}.`,
|
|
32
|
+
functionCalls: [actionResult],
|
|
33
|
+
}, {
|
|
34
|
+
type: 'user',
|
|
35
|
+
functionResponses: [{ name: actionResult.name, call_id: actionResult.id || undefined }],
|
|
36
|
+
});
|
|
37
|
+
return { shouldBreakOuter: false, commandsExecutedIncrement: 0 };
|
|
38
|
+
}
|
|
39
|
+
//# sourceMappingURL=update-execution-plan.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"update-execution-plan.js","sourceRoot":"","sources":["../../../../../../../src/prompt/steps/step-ask-question/handlers/container-task/commands/update-execution-plan.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,eAAe,EAAE,MAAM,8CAA8C,CAAC;AAG/E,MAAM,CAAC,MAAM,sBAAsB,GAAgB;IACjD,IAAI,EAAE,qBAAqB;IAC3B,WAAW,EAAE,mEAAmE;IAChF,UAAU,EAAE;QACV,IAAI,EAAE,QAAQ;QACd,UAAU,EAAE;YACV,EAAE,EAAE;gBACF,IAAI,EAAE,QAAQ;gBACd,WAAW,EAAE,+BAA+B;aAC7C;YACD,YAAY,EAAE;gBACZ,IAAI,EAAE,QAAQ;gBACd,WAAW,EAAE,iCAAiC;aAC/C;YACD,KAAK,EAAE;gBACL,IAAI,EAAE,QAAQ;gBACd,WAAW,EAAE,0FAA0F;gBACvG,IAAI,EAAE,CAAC,SAAS,EAAE,aAAa,EAAE,WAAW,EAAE,QAAQ,EAAE,SAAS,CAAC;aACnE;SACF;QACD,QAAQ,EAAE,CAAC,IAAI,EAAE,cAAc,EAAE,OAAO,CAAC;KAC1C;CACF,CAAC;AAQF,MAAM,CAAC,KAAK,UAAU,yBAAyB,CAC7C,KAA4E;IAE5E,MAAM,EAAE,YAAY,EAAE,mBAAmB,EAAE,GAAG,KAAK,CAAC;IACpD,MAAM,IAAI,GAAG,YAAY,CAAC,IAA+B,CAAC;IAC1D,eAAe,CAAC,MAAM,EAAE,4BAA4B,EAAE,IAAI,CAAC,CAAC;IAC5D,mBAAmB,CAAC,IAAI,CACtB;QACE,IAAI,EAAE,WAAW;QACjB,IAAI,EAAE,oCAAoC,IAAI,CAAC,EAAE,GAAG;QACpD,aAAa,EAAE,CAAC,YAAY,CAAC;KAC9B,EACD;QACE,IAAI,EAAE,MAAM;QACZ,iBAAiB,EAAE,CAAC,EAAE,IAAI,EAAE,YAAY,CAAC,IAAI,EAAE,OAAO,EAAE,YAAY,CAAC,EAAE,IAAI,SAAS,EAAE,CAAC;KACxF,CACF,CAAC;IACF,OAAO,EAAE,gBAAgB,EAAE,KAAK,EAAE,yBAAyB,EAAE,CAAC,EAAE,CAAC;AACnE,CAAC"}
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
import { FunctionDef } from '../../../../../../ai-service/common-types.js';
|
|
2
|
+
import { CommandHandlerBaseProps, CommandHandlerResult } from '../container-commands-types.js';
|
|
3
|
+
export declare const viewFileDef: FunctionDef;
|
|
4
|
+
export type ViewFileArgs = {
|
|
5
|
+
reasoning: string;
|
|
6
|
+
filePath: string;
|
|
7
|
+
startLine?: number;
|
|
8
|
+
endLine?: number;
|
|
9
|
+
};
|
|
10
|
+
export declare function handleViewFile(props: CommandHandlerBaseProps): Promise<CommandHandlerResult>;
|