genaicode 0.2.1 → 0.4.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.
Files changed (232) hide show
  1. package/README.md +11 -0
  2. package/bin/genaicode-dev.js +2 -1
  3. package/bin/genaicode.cjs +4 -4
  4. package/dist/ai-service/ai-studio.js +65 -10
  5. package/dist/ai-service/ai-studio.js.map +1 -1
  6. package/dist/ai-service/anthropic.js +22 -8
  7. package/dist/ai-service/anthropic.js.map +1 -1
  8. package/dist/ai-service/chat-gpt.js +22 -10
  9. package/dist/ai-service/chat-gpt.js.map +1 -1
  10. package/dist/ai-service/common.d.ts +20 -7
  11. package/dist/ai-service/common.js +9 -6
  12. package/dist/ai-service/common.js.map +1 -1
  13. package/dist/ai-service/common.test.js +3 -3
  14. package/dist/ai-service/common.test.js.map +1 -1
  15. package/dist/ai-service/unescape-function-call.d.ts +7 -0
  16. package/dist/ai-service/unescape-function-call.js +59 -0
  17. package/dist/ai-service/unescape-function-call.js.map +1 -0
  18. package/dist/ai-service/unescape-function-call.test.js +18 -0
  19. package/dist/ai-service/unescape-function-call.test.js.map +1 -0
  20. package/dist/ai-service/vertex-ai-claude.js +11 -4
  21. package/dist/ai-service/vertex-ai-claude.js.map +1 -1
  22. package/dist/ai-service/vertex-ai.d.ts +1 -1
  23. package/dist/ai-service/vertex-ai.js +73 -14
  24. package/dist/ai-service/vertex-ai.js.map +1 -1
  25. package/dist/cli/cli-options.js +8 -0
  26. package/dist/cli/cli-options.js.map +1 -1
  27. package/dist/cli/cli-params.d.ts +6 -0
  28. package/dist/cli/cli-params.js +25 -4
  29. package/dist/cli/cli-params.js.map +1 -1
  30. package/dist/cli/validate-cli-params.js +11 -1
  31. package/dist/cli/validate-cli-params.js.map +1 -1
  32. package/dist/files/cache-file.d.ts +3 -0
  33. package/dist/files/cache-file.js +36 -0
  34. package/dist/files/cache-file.js.map +1 -0
  35. package/dist/files/find-files.d.ts +1 -0
  36. package/dist/files/find-files.js +7 -2
  37. package/dist/files/find-files.js.map +1 -1
  38. package/dist/files/read-files.d.ts +6 -3
  39. package/dist/files/read-files.js +7 -5
  40. package/dist/files/read-files.js.map +1 -1
  41. package/dist/files/read-files.test.js +2 -1
  42. package/dist/files/read-files.test.js.map +1 -1
  43. package/dist/files/update-files.js +1 -4
  44. package/dist/files/update-files.js.map +1 -1
  45. package/dist/main/codegen-types.d.ts +15 -0
  46. package/dist/main/codegen.d.ts +2 -2
  47. package/dist/main/codegen.js +91 -52
  48. package/dist/main/codegen.js.map +1 -1
  49. package/dist/main/codegen.test.d.ts +1 -0
  50. package/dist/main/codegen.test.js +24 -8
  51. package/dist/main/codegen.test.js.map +1 -1
  52. package/dist/main/common/content-bus-types.d.ts +16 -0
  53. package/dist/main/common/content-bus-types.js +7 -0
  54. package/dist/main/common/content-bus-types.js.map +1 -0
  55. package/dist/main/common/content-bus.d.ts +9 -0
  56. package/dist/main/common/content-bus.js +25 -0
  57. package/dist/main/common/content-bus.js.map +1 -0
  58. package/dist/main/common/cost-collector.d.ts +11 -0
  59. package/dist/main/common/cost-collector.js +90 -0
  60. package/dist/main/common/cost-collector.js.map +1 -0
  61. package/dist/main/common/user-actions.d.ts +7 -0
  62. package/dist/main/common/user-actions.js +15 -0
  63. package/dist/main/common/user-actions.js.map +1 -0
  64. package/dist/main/config-lib.d.ts +19 -0
  65. package/dist/main/config-lib.js.map +1 -1
  66. package/dist/main/config.d.ts +2 -1
  67. package/dist/main/config.js +3 -0
  68. package/dist/main/config.js.map +1 -1
  69. package/dist/main/interactive/codegen-interactive.js +8 -2
  70. package/dist/main/interactive/codegen-interactive.js.map +1 -1
  71. package/dist/main/interactive/codegen-interactive.test.d.ts +1 -0
  72. package/dist/main/interactive/codegen-interactive.test.js +2 -0
  73. package/dist/main/interactive/codegen-interactive.test.js.map +1 -1
  74. package/dist/main/interactive/codegen-worker.d.ts +1 -1
  75. package/dist/main/interactive/codegen-worker.js +10 -4
  76. package/dist/main/interactive/codegen-worker.js.map +1 -1
  77. package/dist/main/interactive/task-file.js +9 -2
  78. package/dist/main/interactive/task-file.js.map +1 -1
  79. package/dist/main/interactive/user-action-handlers.d.ts +1 -0
  80. package/dist/main/interactive/user-action-handlers.js +13 -0
  81. package/dist/main/interactive/user-action-handlers.js.map +1 -0
  82. package/dist/main/interactive/user-interrupt.js +1 -1
  83. package/dist/main/interactive/user-interrupt.js.map +1 -1
  84. package/dist/main/ui/backend/api-utils.d.ts +2 -0
  85. package/dist/main/ui/backend/api-utils.js +18 -0
  86. package/dist/main/ui/backend/api-utils.js.map +1 -0
  87. package/dist/main/ui/backend/api.d.ts +2 -0
  88. package/dist/main/ui/backend/api.js +186 -0
  89. package/dist/main/ui/backend/api.js.map +1 -0
  90. package/dist/main/ui/backend/server.d.ts +2 -0
  91. package/dist/main/ui/backend/server.js +85 -0
  92. package/dist/main/ui/backend/server.js.map +1 -0
  93. package/dist/main/ui/backend/service.d.ts +48 -0
  94. package/dist/main/ui/backend/service.js +161 -0
  95. package/dist/main/ui/backend/service.js.map +1 -0
  96. package/dist/main/ui/codegen-ui.d.ts +2 -0
  97. package/dist/main/ui/codegen-ui.js +13 -0
  98. package/dist/main/ui/codegen-ui.js.map +1 -0
  99. package/dist/main/ui/frontend/assets/index-Bj9ZkmiD.js +638 -0
  100. package/dist/main/ui/frontend/assets/index-S_ocA1xG.css +1 -0
  101. package/dist/main/ui/frontend/assets/logo-BGHkG1-J.png +0 -0
  102. package/dist/main/ui/frontend/assets/logo-dark-KAsU1C78.png +0 -0
  103. package/dist/main/ui/frontend/assets/press-start-2p-cyrillic-400-normal-oElOGqNf.woff2 +0 -0
  104. package/dist/main/ui/frontend/assets/press-start-2p-cyrillic-ext-400-normal-COIQET2s.woff2 +0 -0
  105. package/dist/main/ui/frontend/assets/press-start-2p-greek-400-normal-DUIT0YPZ.woff2 +0 -0
  106. package/dist/main/ui/frontend/assets/press-start-2p-latin-400-normal-BKfmdmKK.woff +0 -0
  107. package/dist/main/ui/frontend/assets/press-start-2p-latin-400-normal-xj9lRvVs.woff2 +0 -0
  108. package/dist/main/ui/frontend/assets/press-start-2p-latin-ext-400-normal-B18ub5-k.woff +0 -0
  109. package/dist/main/ui/frontend/assets/press-start-2p-latin-ext-400-normal-DDIa4im3.woff2 +0 -0
  110. package/dist/main/ui/frontend/index.html +16 -0
  111. package/dist/main/ui/user-action-handlers.d.ts +2 -0
  112. package/dist/main/ui/user-action-handlers.js +9 -0
  113. package/dist/main/ui/user-action-handlers.js.map +1 -0
  114. package/dist/prompt/ai-service-fallback.d.ts +3 -0
  115. package/dist/prompt/ai-service-fallback.js +84 -0
  116. package/dist/prompt/ai-service-fallback.js.map +1 -0
  117. package/dist/prompt/function-calling-validate.js +70 -4
  118. package/dist/prompt/function-calling-validate.js.map +1 -1
  119. package/dist/prompt/function-calling.js +11 -1
  120. package/dist/prompt/function-calling.js.map +1 -1
  121. package/dist/prompt/function-defs/ask-question-reflect.d.ts +20 -0
  122. package/dist/prompt/function-defs/ask-question-reflect.js +21 -0
  123. package/dist/prompt/function-defs/ask-question-reflect.js.map +1 -0
  124. package/dist/prompt/function-defs/ask-question.d.ts +31 -20
  125. package/dist/prompt/function-defs/ask-question.js +51 -21
  126. package/dist/prompt/function-defs/ask-question.js.map +1 -1
  127. package/dist/prompt/function-defs/codegen-summary.d.ts +23 -21
  128. package/dist/prompt/function-defs/codegen-summary.js +28 -28
  129. package/dist/prompt/function-defs/codegen-summary.js.map +1 -1
  130. package/dist/prompt/function-defs/create-file.d.ts +4 -4
  131. package/dist/prompt/function-defs/create-file.js +4 -4
  132. package/dist/prompt/function-defs/create-file.js.map +1 -1
  133. package/dist/prompt/function-defs/delete-file.d.ts +4 -4
  134. package/dist/prompt/function-defs/delete-file.js +4 -4
  135. package/dist/prompt/function-defs/delete-file.js.map +1 -1
  136. package/dist/prompt/function-defs/generate-image.d.ts +4 -4
  137. package/dist/prompt/function-defs/generate-image.js +4 -4
  138. package/dist/prompt/function-defs/generate-image.js.map +1 -1
  139. package/dist/prompt/function-defs/get-source-code.d.ts +1 -1
  140. package/dist/prompt/function-defs/get-source-code.js +2 -1
  141. package/dist/prompt/function-defs/get-source-code.js.map +1 -1
  142. package/dist/prompt/function-defs/move-file.d.ts +4 -4
  143. package/dist/prompt/function-defs/move-file.js +4 -4
  144. package/dist/prompt/function-defs/move-file.js.map +1 -1
  145. package/dist/prompt/function-defs/optimize-context.d.ts +46 -0
  146. package/dist/prompt/function-defs/optimize-context.js +47 -0
  147. package/dist/prompt/function-defs/optimize-context.js.map +1 -0
  148. package/dist/prompt/function-defs/patch-file.d.ts +4 -4
  149. package/dist/prompt/function-defs/patch-file.js +4 -4
  150. package/dist/prompt/function-defs/patch-file.js.map +1 -1
  151. package/dist/prompt/function-defs/read-history.d.ts +13 -0
  152. package/dist/prompt/function-defs/read-history.js +14 -0
  153. package/dist/prompt/function-defs/read-history.js.map +1 -0
  154. package/dist/prompt/function-defs/set-summaries.d.ts +31 -0
  155. package/dist/prompt/function-defs/set-summaries.js +32 -0
  156. package/dist/prompt/function-defs/set-summaries.js.map +1 -0
  157. package/dist/prompt/function-defs/update-file.d.ts +4 -4
  158. package/dist/prompt/function-defs/update-file.js +4 -4
  159. package/dist/prompt/function-defs/update-file.js.map +1 -1
  160. package/dist/prompt/function-defs/update-history.d.ts +21 -0
  161. package/dist/prompt/function-defs/update-history.js +22 -0
  162. package/dist/prompt/function-defs/update-history.js.map +1 -0
  163. package/dist/prompt/limits.d.ts +3 -3
  164. package/dist/prompt/limits.js +10 -8
  165. package/dist/prompt/limits.js.map +1 -1
  166. package/dist/prompt/limits.test.js +6 -6
  167. package/dist/prompt/limits.test.js.map +1 -1
  168. package/dist/prompt/prompt-codegen.js +52 -25
  169. package/dist/prompt/prompt-codegen.js.map +1 -1
  170. package/dist/prompt/prompt-codegen.test.js +2 -2
  171. package/dist/prompt/prompt-codegen.test.js.map +1 -1
  172. package/dist/prompt/prompt-service-ask-question.test.d.ts +1 -0
  173. package/dist/prompt/prompt-service-ask-question.test.js +86 -13
  174. package/dist/prompt/prompt-service-ask-question.test.js.map +1 -1
  175. package/dist/prompt/prompt-service.d.ts +3 -10
  176. package/dist/prompt/prompt-service.js +66 -23
  177. package/dist/prompt/prompt-service.js.map +1 -1
  178. package/dist/prompt/prompt-service.test.d.ts +1 -0
  179. package/dist/prompt/prompt-service.test.js +73 -48
  180. package/dist/prompt/prompt-service.test.js.map +1 -1
  181. package/dist/prompt/steps/step-ask-question-handlers.d.ts +10 -0
  182. package/dist/prompt/steps/step-ask-question-handlers.js +265 -0
  183. package/dist/prompt/steps/step-ask-question-handlers.js.map +1 -0
  184. package/dist/prompt/steps/step-ask-question-reflect.d.ts +4 -0
  185. package/dist/prompt/steps/step-ask-question-reflect.js +40 -0
  186. package/dist/prompt/steps/step-ask-question-reflect.js.map +1 -0
  187. package/dist/prompt/steps/step-ask-question-types.d.ts +60 -0
  188. package/dist/prompt/steps/step-ask-question-types.js +2 -0
  189. package/dist/prompt/steps/step-ask-question-types.js.map +1 -0
  190. package/dist/prompt/steps/step-ask-question.d.ts +3 -3
  191. package/dist/prompt/steps/step-ask-question.js +69 -69
  192. package/dist/prompt/steps/step-ask-question.js.map +1 -1
  193. package/dist/prompt/steps/step-context-optimization.d.ts +4 -0
  194. package/dist/prompt/steps/step-context-optimization.js +193 -0
  195. package/dist/prompt/steps/step-context-optimization.js.map +1 -0
  196. package/dist/prompt/steps/step-history-update.d.ts +5 -0
  197. package/dist/prompt/steps/step-history-update.js +54 -0
  198. package/dist/prompt/steps/step-history-update.js.map +1 -0
  199. package/dist/prompt/steps/step-summarization.d.ts +8 -0
  200. package/dist/prompt/steps/step-summarization.js +75 -0
  201. package/dist/prompt/steps/step-summarization.js.map +1 -0
  202. package/dist/prompt/steps/step-validate-recover.d.ts +2 -13
  203. package/dist/prompt/steps/step-validate-recover.js +3 -3
  204. package/dist/prompt/steps/step-validate-recover.js.map +1 -1
  205. package/dist/prompt/steps/step-verify-patch.d.ts +1 -2
  206. package/dist/prompt/steps/step-verify-patch.js +3 -10
  207. package/dist/prompt/steps/step-verify-patch.js.map +1 -1
  208. package/dist/prompt/steps/steps-types.d.ts +16 -0
  209. package/dist/prompt/steps/steps-utils.d.ts +7 -0
  210. package/dist/prompt/steps/steps-utils.js +11 -0
  211. package/dist/prompt/steps/steps-utils.js.map +1 -0
  212. package/dist/prompt/systemprompt.d.ts +1 -1
  213. package/dist/prompt/systemprompt.js +194 -32
  214. package/dist/prompt/systemprompt.js.map +1 -1
  215. package/dist/prompt/systemprompt.test.js +5 -8
  216. package/dist/prompt/systemprompt.test.js.map +1 -1
  217. package/dist/prompt/token-estimator.d.ts +8 -0
  218. package/dist/prompt/token-estimator.js +31 -0
  219. package/dist/prompt/token-estimator.js.map +1 -0
  220. package/package.json +28 -4
  221. package/dist/main/codegen-interactive-utils.d.ts +0 -8
  222. package/dist/main/codegen-interactive-utils.js +0 -148
  223. package/dist/main/codegen-interactive-utils.js.map +0 -1
  224. package/dist/main/codegen-interactive.d.ts +0 -2
  225. package/dist/main/codegen-interactive.js +0 -68
  226. package/dist/main/codegen-interactive.js.map +0 -1
  227. package/dist/main/interactive/worker-script.js +0 -24
  228. package/dist/main/interactive/worker-script.js.map +0 -1
  229. package/dist/main/interactive/worker.d.ts +0 -2
  230. package/dist/main/interactive/worker.js +0 -55
  231. package/dist/main/interactive/worker.js.map +0 -1
  232. /package/dist/{main/interactive/worker-script.d.ts → ai-service/unescape-function-call.test.d.ts} +0 -0
@@ -0,0 +1 @@
1
+ @font-face{font-family:"Press Start 2P";font-style:normal;font-display:swap;font-weight:400;src:url(/assets/press-start-2p-cyrillic-ext-400-normal-COIQET2s.woff2) format("woff2"),url(data:font/woff;base64,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) format("woff");unicode-range:U+0460-052F,U+1C80-1C88,U+20B4,U+2DE0-2DFF,U+A640-A69F,U+FE2E-FE2F}@font-face{font-family:"Press Start 2P";font-style:normal;font-display:swap;font-weight:400;src:url(/assets/press-start-2p-cyrillic-400-normal-oElOGqNf.woff2) format("woff2"),url(data:font/woff;base64,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) format("woff");unicode-range:U+0301,U+0400-045F,U+0490-0491,U+04B0-04B1,U+2116}@font-face{font-family:"Press Start 2P";font-style:normal;font-display:swap;font-weight:400;src:url(/assets/press-start-2p-greek-400-normal-DUIT0YPZ.woff2) format("woff2"),url(data:font/woff;base64,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) format("woff");unicode-range:U+0370-0377,U+037A-037F,U+0384-038A,U+038C,U+038E-03A1,U+03A3-03FF}@font-face{font-family:"Press Start 2P";font-style:normal;font-display:swap;font-weight:400;src:url(/assets/press-start-2p-latin-ext-400-normal-DDIa4im3.woff2) format("woff2"),url(/assets/press-start-2p-latin-ext-400-normal-B18ub5-k.woff) format("woff");unicode-range:U+0100-02AF,U+0304,U+0308,U+0329,U+1E00-1E9F,U+1EF2-1EFF,U+2020,U+20A0-20AB,U+20AD-20C0,U+2113,U+2C60-2C7F,U+A720-A7FF}@font-face{font-family:"Press Start 2P";font-style:normal;font-display:swap;font-weight:400;src:url(/assets/press-start-2p-latin-400-normal-xj9lRvVs.woff2) format("woff2"),url(/assets/press-start-2p-latin-400-normal-BKfmdmKK.woff) format("woff");unicode-range:U+0000-00FF,U+0131,U+0152-0153,U+02BB-02BC,U+02C6,U+02DA,U+02DC,U+0304,U+0308,U+0329,U+2000-206F,U+2074,U+20AC,U+2122,U+2191,U+2193,U+2212,U+2215,U+FEFF,U+FFFD}
@@ -0,0 +1,16 @@
1
+ <!doctype html>
2
+ <html lang="en">
3
+ <head>
4
+ <meta charset="UTF-8" />
5
+ <meta name="viewport" content="width=device-width, initial-scale=1.0" />
6
+ <meta name="description" content="GenAIcode - AI-powered code generation and management tool" />
7
+ <meta name="keywords" content="GenAIcode, AI, code generation, programming" />
8
+ <title>GenAIcode - AI-Powered Code Generation</title>
9
+ <link rel="icon" href="/favicon.ico" type="image/x-icon" />
10
+ <script type="module" crossorigin src="/assets/index-Bj9ZkmiD.js"></script>
11
+ <link rel="stylesheet" crossorigin href="/assets/index-S_ocA1xG.css">
12
+ </head>
13
+ <body data-security-token="__SECURITY_TOKEN__">
14
+ <div id="root"></div>
15
+ </body>
16
+ </html>
@@ -0,0 +1,2 @@
1
+ import { Service } from './backend/service.js';
2
+ export declare function registerUserActionHandlers(service: Service): void;
@@ -0,0 +1,9 @@
1
+ import { registerConfirmHandler, registerInputHandler } from '../common/user-actions.js';
2
+ export function registerUserActionHandlers(service) {
3
+ registerInputHandler((_, message) => service.askQuestion(message, false));
4
+ registerConfirmHandler(async (message) => {
5
+ const response = await service.askQuestion(message, true);
6
+ return response.toLowerCase() === 'yes';
7
+ });
8
+ }
9
+ //# sourceMappingURL=user-action-handlers.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"user-action-handlers.js","sourceRoot":"","sources":["../../../src/main/ui/user-action-handlers.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,sBAAsB,EAAE,oBAAoB,EAAE,MAAM,2BAA2B,CAAC;AAGzF,MAAM,UAAU,0BAA0B,CAAC,OAAgB;IACzD,oBAAoB,CAAC,CAAC,CAAC,EAAE,OAAO,EAAE,EAAE,CAAC,OAAO,CAAC,WAAW,CAAC,OAAO,EAAE,KAAK,CAAC,CAAC,CAAC;IAC1E,sBAAsB,CAAC,KAAK,EAAE,OAAe,EAAE,EAAE;QAC/C,MAAM,QAAQ,GAAG,MAAM,OAAO,CAAC,WAAW,CAAC,OAAO,EAAE,IAAI,CAAC,CAAC;QAC1D,OAAO,QAAQ,CAAC,WAAW,EAAE,KAAK,KAAK,CAAC;IAC1C,CAAC,CAAC,CAAC;AACL,CAAC"}
@@ -0,0 +1,3 @@
1
+ import { AiServiceType, CodegenOptions } from '../main/codegen-types.js';
2
+ import { GenerateContentFunction } from '../ai-service/common.js';
3
+ export declare function handleAiServiceFallback(generateContentFns: Record<AiServiceType, GenerateContentFunction>, currentService: AiServiceType, options: CodegenOptions, ...args: Parameters<GenerateContentFunction>): Promise<ReturnType<GenerateContentFunction>>;
@@ -0,0 +1,84 @@
1
+ import { putSystemMessage } from '../main/common/content-bus.js';
2
+ import { askUserForConfirmation } from '../main/common/user-actions.js';
3
+ import { abortController } from '../main/interactive/codegen-worker.js';
4
+ const AI_SERVICES_MAP = [
5
+ [() => process.env.ANTHROPIC_API_KEY, 'anthropic'],
6
+ [() => process.env.GOOGLE_CLOUD_PROJECT && process.env.GOOGLE_CLOUD_REGION, 'vertex-ai-claude'],
7
+ [() => process.env.OPENAI_API_KEY, 'chat-gpt'],
8
+ [() => process.env.GOOGLE_CLOUD_PROJECT, 'vertex-ai'],
9
+ [() => process.env.API_KEY, 'ai-studio'],
10
+ ];
11
+ export async function handleAiServiceFallback(generateContentFns, currentService, options, ...args) {
12
+ let retryCount = 0;
13
+ const maxRetries = AI_SERVICES_MAP.length;
14
+ let permanentService = currentService;
15
+ while (retryCount < maxRetries) {
16
+ if (abortController?.signal.aborted) {
17
+ putSystemMessage(`Operation interrupted for ${permanentService}`);
18
+ throw new Error(`Operation interrupted`);
19
+ }
20
+ try {
21
+ const result = await generateContentFns[permanentService](...args);
22
+ options.aiService = permanentService;
23
+ return result;
24
+ }
25
+ catch (error) {
26
+ if (error instanceof Error) {
27
+ // Check if the error is due to an interruption
28
+ if (error.name === 'AbortError' || error.message.includes('interrupted')) {
29
+ putSystemMessage(`Operation interrupted for ${permanentService}`);
30
+ throw error; // Re-throw the interruption error
31
+ }
32
+ if (error.message.includes('Rate limit exceeded')) {
33
+ putSystemMessage(`Rate limit exceeded for ${permanentService}`);
34
+ if (options.disableAiServiceFallback) {
35
+ if (options.interactive || options.ui) {
36
+ const nextService = getNextAiService(permanentService);
37
+ if (nextService) {
38
+ const shouldSwitch = await askUserForConfirmation(`Rate limit exceeded for ${permanentService}. Would you like to switch to ${nextService}?`, true);
39
+ if (shouldSwitch) {
40
+ putSystemMessage(`Switching to ${nextService} due to rate limiting.`);
41
+ permanentService = nextService;
42
+ retryCount++;
43
+ continue;
44
+ }
45
+ }
46
+ }
47
+ else {
48
+ throw new Error(`Rate limit exceeded for ${permanentService}. AI service fallback is disabled.`);
49
+ }
50
+ }
51
+ else {
52
+ const nextService = getNextAiService(permanentService);
53
+ if (nextService) {
54
+ putSystemMessage(`Rate limit exceeded for ${permanentService}. Automatically switching to ${nextService}.`);
55
+ permanentService = nextService;
56
+ retryCount++;
57
+ }
58
+ else {
59
+ throw new Error(`Rate limit exceeded for ${permanentService}. AI service fallback was not possible.`);
60
+ }
61
+ }
62
+ }
63
+ else {
64
+ // For other types of errors, re-throw
65
+ throw error;
66
+ }
67
+ }
68
+ else {
69
+ // If it's not an Error instance, re-throw
70
+ throw error;
71
+ }
72
+ }
73
+ }
74
+ throw new Error('All AI services have been exhausted due to rate limiting.');
75
+ }
76
+ function getNextAiService(currentService) {
77
+ const options = AI_SERVICES_MAP.filter(([check]) => check()).map(([, service]) => service);
78
+ const currentIndex = options.indexOf(currentService);
79
+ if (currentIndex === -1 || currentIndex === options.length - 1) {
80
+ return undefined;
81
+ }
82
+ return options[currentIndex + 1];
83
+ }
84
+ //# sourceMappingURL=ai-service-fallback.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ai-service-fallback.js","sourceRoot":"","sources":["../../src/prompt/ai-service-fallback.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,gBAAgB,EAAE,MAAM,+BAA+B,CAAC;AACjE,OAAO,EAAE,sBAAsB,EAAE,MAAM,gCAAgC,CAAC;AAExE,OAAO,EAAE,eAAe,EAAE,MAAM,uCAAuC,CAAC;AAExE,MAAM,eAAe,GAAG;IACtB,CAAC,GAAG,EAAE,CAAC,OAAO,CAAC,GAAG,CAAC,iBAAiB,EAAE,WAAW,CAAC;IAClD,CAAC,GAAG,EAAE,CAAC,OAAO,CAAC,GAAG,CAAC,oBAAoB,IAAI,OAAO,CAAC,GAAG,CAAC,mBAAmB,EAAE,kBAAkB,CAAC;IAC/F,CAAC,GAAG,EAAE,CAAC,OAAO,CAAC,GAAG,CAAC,cAAc,EAAE,UAAU,CAAC;IAC9C,CAAC,GAAG,EAAE,CAAC,OAAO,CAAC,GAAG,CAAC,oBAAoB,EAAE,WAAW,CAAC;IACrD,CAAC,GAAG,EAAE,CAAC,OAAO,CAAC,GAAG,CAAC,OAAO,EAAE,WAAW,CAAC;CAChC,CAAC;AAEX,MAAM,CAAC,KAAK,UAAU,uBAAuB,CAC3C,kBAAkE,EAClE,cAA6B,EAC7B,OAAuB,EACvB,GAAG,IAAyC;IAE5C,IAAI,UAAU,GAAG,CAAC,CAAC;IACnB,MAAM,UAAU,GAAG,eAAe,CAAC,MAAM,CAAC;IAC1C,IAAI,gBAAgB,GAAG,cAAc,CAAC;IAEtC,OAAO,UAAU,GAAG,UAAU,EAAE,CAAC;QAC/B,IAAI,eAAe,EAAE,MAAM,CAAC,OAAO,EAAE,CAAC;YACpC,gBAAgB,CAAC,6BAA6B,gBAAgB,EAAE,CAAC,CAAC;YAClE,MAAM,IAAI,KAAK,CAAC,uBAAuB,CAAC,CAAC;QAC3C,CAAC;QAED,IAAI,CAAC;YACH,MAAM,MAAM,GAAG,MAAM,kBAAkB,CAAC,gBAAgB,CAAC,CAAC,GAAG,IAAI,CAAC,CAAC;YACnE,OAAO,CAAC,SAAS,GAAG,gBAAgB,CAAC;YACrC,OAAO,MAAM,CAAC;QAChB,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,IAAI,KAAK,YAAY,KAAK,EAAE,CAAC;gBAC3B,+CAA+C;gBAC/C,IAAI,KAAK,CAAC,IAAI,KAAK,YAAY,IAAI,KAAK,CAAC,OAAO,CAAC,QAAQ,CAAC,aAAa,CAAC,EAAE,CAAC;oBACzE,gBAAgB,CAAC,6BAA6B,gBAAgB,EAAE,CAAC,CAAC;oBAClE,MAAM,KAAK,CAAC,CAAC,kCAAkC;gBACjD,CAAC;gBAED,IAAI,KAAK,CAAC,OAAO,CAAC,QAAQ,CAAC,qBAAqB,CAAC,EAAE,CAAC;oBAClD,gBAAgB,CAAC,2BAA2B,gBAAgB,EAAE,CAAC,CAAC;oBAEhE,IAAI,OAAO,CAAC,wBAAwB,EAAE,CAAC;wBACrC,IAAI,OAAO,CAAC,WAAW,IAAI,OAAO,CAAC,EAAE,EAAE,CAAC;4BACtC,MAAM,WAAW,GAAG,gBAAgB,CAAC,gBAAgB,CAAC,CAAC;4BACvD,IAAI,WAAW,EAAE,CAAC;gCAChB,MAAM,YAAY,GAAG,MAAM,sBAAsB,CAC/C,2BAA2B,gBAAgB,iCAAiC,WAAW,GAAG,EAC1F,IAAI,CACL,CAAC;gCACF,IAAI,YAAY,EAAE,CAAC;oCACjB,gBAAgB,CAAC,gBAAgB,WAAW,wBAAwB,CAAC,CAAC;oCACtE,gBAAgB,GAAG,WAAW,CAAC;oCAC/B,UAAU,EAAE,CAAC;oCACb,SAAS;gCACX,CAAC;4BACH,CAAC;wBACH,CAAC;6BAAM,CAAC;4BACN,MAAM,IAAI,KAAK,CAAC,2BAA2B,gBAAgB,oCAAoC,CAAC,CAAC;wBACnG,CAAC;oBACH,CAAC;yBAAM,CAAC;wBACN,MAAM,WAAW,GAAG,gBAAgB,CAAC,gBAAgB,CAAC,CAAC;wBACvD,IAAI,WAAW,EAAE,CAAC;4BAChB,gBAAgB,CACd,2BAA2B,gBAAgB,gCAAgC,WAAW,GAAG,CAC1F,CAAC;4BACF,gBAAgB,GAAG,WAAW,CAAC;4BAC/B,UAAU,EAAE,CAAC;wBACf,CAAC;6BAAM,CAAC;4BACN,MAAM,IAAI,KAAK,CAAC,2BAA2B,gBAAgB,yCAAyC,CAAC,CAAC;wBACxG,CAAC;oBACH,CAAC;gBACH,CAAC;qBAAM,CAAC;oBACN,sCAAsC;oBACtC,MAAM,KAAK,CAAC;gBACd,CAAC;YACH,CAAC;iBAAM,CAAC;gBACN,0CAA0C;gBAC1C,MAAM,KAAK,CAAC;YACd,CAAC;QACH,CAAC;IACH,CAAC;IACD,MAAM,IAAI,KAAK,CAAC,2DAA2D,CAAC,CAAC;AAC/E,CAAC;AAED,SAAS,gBAAgB,CAAC,cAA6B;IACrD,MAAM,OAAO,GAAG,eAAe,CAAC,MAAM,CAAC,CAAC,CAAC,KAAK,CAAC,EAAE,EAAE,CAAC,KAAK,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,OAAO,CAAC,EAAE,EAAE,CAAC,OAAO,CAAC,CAAC;IAC3F,MAAM,YAAY,GAAG,OAAO,CAAC,OAAO,CAAC,cAAc,CAAC,CAAC;IACrD,IAAI,YAAY,KAAK,CAAC,CAAC,IAAI,YAAY,KAAK,OAAO,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QAC/D,OAAO,SAAS,CAAC;IACnB,CAAC;IACD,OAAO,OAAO,CAAC,YAAY,GAAG,CAAC,CAAC,CAAC;AACnC,CAAC"}
@@ -1,21 +1,87 @@
1
1
  import { Validator } from 'jsonschema';
2
+ import path from 'path';
2
3
  import { functionDefs } from './function-calling.js';
4
+ import { rcConfig } from '../main/config.js';
3
5
  export function validateFunctionCall(call, requiredFunctionName) {
4
6
  const validator = new Validator();
5
7
  const functionDef = functionDefs.find((def) => def.name === call?.name);
8
+ // Step 1: Check if the function name matches
6
9
  if (!call || call.name !== requiredFunctionName) {
7
- return makeError(`Function "${requiredFunctionName}" was not called.`, call);
10
+ return makeError(`Function "${requiredFunctionName}" was not called.`, call, '');
8
11
  }
12
+ // Step 2: Check if the function is defined
9
13
  if (!functionDef) {
10
- return makeError(`Function "${call.name}" is not defined.`, call);
14
+ return makeError(`Function "${call.name}" is not defined.`, call, '');
11
15
  }
16
+ // Step 3: Validate against the schema
12
17
  const validationResult = validator.validate(call.args, functionDef.parameters);
13
18
  if (validationResult.errors.length > 0) {
14
19
  return validationResult;
15
20
  }
21
+ // Step 4: Validate file paths
22
+ const filePathValidationError = validateFilePaths(call);
23
+ if (filePathValidationError) {
24
+ return filePathValidationError;
25
+ }
16
26
  return undefined;
17
27
  }
18
- function makeError(message, call) {
28
+ function validateFilePaths(call) {
29
+ const rootDir = path.normalize(rcConfig.rootDir);
30
+ function checkPaths(obj, parentKey = '') {
31
+ const errors = [];
32
+ if (Array.isArray(obj)) {
33
+ obj.forEach((item, index) => {
34
+ if (typeof item === 'string' && isPathProperty(parentKey)) {
35
+ errors.push(...validatePath(item, `${parentKey}[${index}]`));
36
+ }
37
+ else if (typeof item === 'object' && item !== null) {
38
+ errors.push(...checkPaths(item, `${parentKey}[${index}]`));
39
+ }
40
+ });
41
+ }
42
+ else if (typeof obj === 'object' && obj !== null) {
43
+ for (const [key, value] of Object.entries(obj)) {
44
+ const currentKey = parentKey ? `${parentKey}.${key}` : key;
45
+ if (typeof value === 'string' && isPathProperty(key)) {
46
+ errors.push(...validatePath(value, currentKey));
47
+ }
48
+ else if (Array.isArray(value) || (typeof value === 'object' && value !== null)) {
49
+ errors.push(...checkPaths(value, currentKey));
50
+ }
51
+ }
52
+ }
53
+ return errors;
54
+ }
55
+ function validatePath(value, key) {
56
+ const errors = [];
57
+ const normalizedPath = path.normalize(value);
58
+ if (!path.isAbsolute(value)) {
59
+ errors.push(makeError(`File path "${value}" is not absolute.`, call, key).errors[0]);
60
+ }
61
+ else if (!normalizedPath.startsWith(rootDir)) {
62
+ errors.push(makeError(`File path "${value}" is not inside the root directory "${rootDir}".`, call, key).errors[0]);
63
+ }
64
+ return errors;
65
+ }
66
+ const errors = checkPaths(call.args);
67
+ if (errors.length > 0) {
68
+ return { errors, valid: false };
69
+ }
70
+ return undefined;
71
+ }
72
+ function isPathProperty(prop) {
73
+ return [
74
+ 'filePath',
75
+ 'source',
76
+ 'destination',
77
+ 'inputFilePath',
78
+ 'outputFilePath',
79
+ 'contextPaths',
80
+ 'filePaths',
81
+ 'requestFilesContent',
82
+ ].includes(prop);
83
+ }
84
+ function makeError(message, call, propertyPath) {
19
85
  return {
20
86
  errors: [
21
87
  {
@@ -25,7 +91,7 @@ function makeError(message, call) {
25
91
  valid: false,
26
92
  instance: call,
27
93
  schema: {},
28
- propertyPath: '',
94
+ propertyPath,
29
95
  disableFormat: false,
30
96
  throwError: true,
31
97
  };
@@ -1 +1 @@
1
- {"version":3,"file":"function-calling-validate.js","sourceRoot":"","sources":["../../src/prompt/function-calling-validate.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAA4C,MAAM,YAAY,CAAC;AAEjF,OAAO,EAAE,YAAY,EAAE,MAAM,uBAAuB,CAAC;AAErD,MAAM,UAAU,oBAAoB,CAClC,IAA8B,EAC9B,oBAA4B;IAE5B,MAAM,SAAS,GAAG,IAAI,SAAS,EAAE,CAAC;IAClC,MAAM,WAAW,GAA4B,YAAY,CAAC,IAAI,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,GAAG,CAAC,IAAI,KAAK,IAAI,EAAE,IAAI,CAAC,CAAC;IAEjG,IAAI,CAAC,IAAI,IAAI,IAAI,CAAC,IAAI,KAAK,oBAAoB,EAAE,CAAC;QAChD,OAAO,SAAS,CAAC,aAAa,oBAAoB,mBAAmB,EAAE,IAAI,CAAC,CAAC;IAC/E,CAAC;IAED,IAAI,CAAC,WAAW,EAAE,CAAC;QACjB,OAAO,SAAS,CAAC,aAAa,IAAI,CAAC,IAAI,mBAAmB,EAAE,IAAI,CAAC,CAAC;IACpE,CAAC;IAED,MAAM,gBAAgB,GAAoB,SAAS,CAAC,QAAQ,CAAC,IAAI,CAAC,IAAI,EAAE,WAAW,CAAC,UAA+B,CAAC,CAAC;IAErH,IAAI,gBAAgB,CAAC,MAAM,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QACvC,OAAO,gBAAgB,CAAC;IAC1B,CAAC;IAED,OAAO,SAAS,CAAC;AACnB,CAAC;AAED,SAAS,SAAS,CAAC,OAAe,EAAE,IAA8B;IAChE,OAAO;QACL,MAAM,EAAE;YACN;gBACE,OAAO;aACsB;SAChC;QACD,KAAK,EAAE,KAAK;QACZ,QAAQ,EAAE,IAAI;QACd,MAAM,EAAE,EAAY;QACpB,YAAY,EAAE,EAAE;QAChB,aAAa,EAAE,KAAK;QACpB,UAAU,EAAE,IAAI;KACjB,CAAC;AACJ,CAAC"}
1
+ {"version":3,"file":"function-calling-validate.js","sourceRoot":"","sources":["../../src/prompt/function-calling-validate.ts"],"names":[],"mappings":"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"}
@@ -15,6 +15,11 @@ import { imglyRemoveBackground } from './function-defs/imgly-remove-background.j
15
15
  import { resizeImage } from './function-defs/resize-image.js';
16
16
  import { splitImage } from './function-defs/split-image.js';
17
17
  import { askQuestion } from './function-defs/ask-question.js';
18
+ import { optimizeContext } from './function-defs/optimize-context.js';
19
+ import { setSummaries } from './function-defs/set-summaries.js';
20
+ import { updateHistory } from './function-defs/update-history.js';
21
+ import { readHistory } from './function-defs/read-history.js';
22
+ import { askQuestionReflect } from './function-defs/ask-question-reflect.js';
18
23
  /**
19
24
  * Function definitions for function calling feature
20
25
  */
@@ -35,10 +40,15 @@ export const functionDefs = [
35
40
  resizeImage,
36
41
  splitImage,
37
42
  askQuestion,
43
+ optimizeContext,
44
+ setSummaries,
45
+ updateHistory,
46
+ readHistory,
47
+ askQuestionReflect,
38
48
  // @ts-expect-error (fix this once fun defs are converted to ts)
39
49
  ].map((fd) => {
40
50
  if (requireExplanations && fd.parameters.properties.explanation && !fd.parameters.required.includes('explanation')) {
41
- fd.parameters.required.push('explanation');
51
+ fd.parameters.required.unshift('explanation');
42
52
  }
43
53
  else if (!requireExplanations) {
44
54
  delete fd.parameters.properties.explanation;
@@ -1 +1 @@
1
- {"version":3,"file":"function-calling.js","sourceRoot":"","sources":["../../src/prompt/function-calling.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,mBAAmB,EAAE,MAAM,sBAAsB,CAAC;AAE3D,OAAO,EAAE,aAAa,EAAE,MAAM,oCAAoC,CAAC;AACnE,OAAO,EAAE,cAAc,EAAE,MAAM,qCAAqC,CAAC;AACrE,OAAO,EAAE,cAAc,EAAE,MAAM,oCAAoC,CAAC;AACpE,OAAO,EAAE,UAAU,EAAE,MAAM,gCAAgC,CAAC;AAC5D,OAAO,EAAE,SAAS,EAAE,MAAM,+BAA+B,CAAC;AAC1D,OAAO,EAAE,UAAU,EAAE,MAAM,gCAAgC,CAAC;AAC5D,OAAO,EAAE,UAAU,EAAE,MAAM,gCAAgC,CAAC;AAC5D,OAAO,EAAE,WAAW,EAAE,MAAM,gCAAgC,CAAC;AAC7D,OAAO,EAAE,eAAe,EAAE,MAAM,qCAAqC,CAAC;AACtE,OAAO,EAAE,QAAQ,EAAE,MAAM,8BAA8B,CAAC;AACxD,OAAO,EAAE,aAAa,EAAE,MAAM,mCAAmC,CAAC;AAClE,OAAO,EAAE,YAAY,EAAE,MAAM,kCAAkC,CAAC;AAChE,OAAO,EAAE,qBAAqB,EAAE,MAAM,4CAA4C,CAAC;AACnF,OAAO,EAAE,WAAW,EAAE,MAAM,iCAAiC,CAAC;AAC9D,OAAO,EAAE,UAAU,EAAE,MAAM,gCAAgC,CAAC;AAC5D,OAAO,EAAE,WAAW,EAAE,MAAM,iCAAiC,CAAC;AAE9D;;GAEG;AACH,MAAM,CAAC,MAAM,YAAY,GAAkB;IACzC,aAAa;IACb,cAAc;IACd,cAAc;IACd,UAAU;IACV,SAAS;IACT,UAAU;IACV,UAAU;IACV,WAAW;IACX,eAAe;IACf,QAAQ;IACR,aAAa;IACb,YAAY;IACZ,qBAAqB;IACrB,WAAW;IACX,UAAU;IACV,WAAW;IACX,gEAAgE;CACjE,CAAC,GAAG,CAAC,CAAC,EAAe,EAAE,EAAE;IACxB,IAAI,mBAAmB,IAAI,EAAE,CAAC,UAAU,CAAC,UAAU,CAAC,WAAW,IAAI,CAAC,EAAE,CAAC,UAAU,CAAC,QAAQ,CAAC,QAAQ,CAAC,aAAa,CAAC,EAAE,CAAC;QACnH,EAAE,CAAC,UAAU,CAAC,QAAQ,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC;IAC7C,CAAC;SAAM,IAAI,CAAC,mBAAmB,EAAE,CAAC;QAChC,OAAO,EAAE,CAAC,UAAU,CAAC,UAAU,CAAC,WAAW,CAAC;IAC9C,CAAC;IAED,OAAO,EAAE,CAAC;AACZ,CAAC,CAAC,CAAC"}
1
+ {"version":3,"file":"function-calling.js","sourceRoot":"","sources":["../../src/prompt/function-calling.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,mBAAmB,EAAE,MAAM,sBAAsB,CAAC;AAE3D,OAAO,EAAE,aAAa,EAAE,MAAM,oCAAoC,CAAC;AACnE,OAAO,EAAE,cAAc,EAAE,MAAM,qCAAqC,CAAC;AACrE,OAAO,EAAE,cAAc,EAAE,MAAM,oCAAoC,CAAC;AACpE,OAAO,EAAE,UAAU,EAAE,MAAM,gCAAgC,CAAC;AAC5D,OAAO,EAAE,SAAS,EAAE,MAAM,+BAA+B,CAAC;AAC1D,OAAO,EAAE,UAAU,EAAE,MAAM,gCAAgC,CAAC;AAC5D,OAAO,EAAE,UAAU,EAAE,MAAM,gCAAgC,CAAC;AAC5D,OAAO,EAAE,WAAW,EAAE,MAAM,gCAAgC,CAAC;AAC7D,OAAO,EAAE,eAAe,EAAE,MAAM,qCAAqC,CAAC;AACtE,OAAO,EAAE,QAAQ,EAAE,MAAM,8BAA8B,CAAC;AACxD,OAAO,EAAE,aAAa,EAAE,MAAM,mCAAmC,CAAC;AAClE,OAAO,EAAE,YAAY,EAAE,MAAM,kCAAkC,CAAC;AAChE,OAAO,EAAE,qBAAqB,EAAE,MAAM,4CAA4C,CAAC;AACnF,OAAO,EAAE,WAAW,EAAE,MAAM,iCAAiC,CAAC;AAC9D,OAAO,EAAE,UAAU,EAAE,MAAM,gCAAgC,CAAC;AAC5D,OAAO,EAAE,WAAW,EAAE,MAAM,iCAAiC,CAAC;AAC9D,OAAO,EAAE,eAAe,EAAE,MAAM,qCAAqC,CAAC;AACtE,OAAO,EAAE,YAAY,EAAE,MAAM,kCAAkC,CAAC;AAChE,OAAO,EAAE,aAAa,EAAE,MAAM,mCAAmC,CAAC;AAClE,OAAO,EAAE,WAAW,EAAE,MAAM,iCAAiC,CAAC;AAC9D,OAAO,EAAE,kBAAkB,EAAE,MAAM,yCAAyC,CAAC;AAE7E;;GAEG;AACH,MAAM,CAAC,MAAM,YAAY,GAAkB;IACzC,aAAa;IACb,cAAc;IACd,cAAc;IACd,UAAU;IACV,SAAS;IACT,UAAU;IACV,UAAU;IACV,WAAW;IACX,eAAe;IACf,QAAQ;IACR,aAAa;IACb,YAAY;IACZ,qBAAqB;IACrB,WAAW;IACX,UAAU;IACV,WAAW;IACX,eAAe;IACf,YAAY;IACZ,aAAa;IACb,WAAW;IACX,kBAAkB;IAClB,gEAAgE;CACjE,CAAC,GAAG,CAAC,CAAC,EAAe,EAAE,EAAE;IACxB,IAAI,mBAAmB,IAAI,EAAE,CAAC,UAAU,CAAC,UAAU,CAAC,WAAW,IAAI,CAAC,EAAE,CAAC,UAAU,CAAC,QAAQ,CAAC,QAAQ,CAAC,aAAa,CAAC,EAAE,CAAC;QACnH,EAAE,CAAC,UAAU,CAAC,QAAQ,CAAC,OAAO,CAAC,aAAa,CAAC,CAAC;IAChD,CAAC;SAAM,IAAI,CAAC,mBAAmB,EAAE,CAAC;QAChC,OAAO,EAAE,CAAC,UAAU,CAAC,UAAU,CAAC,WAAW,CAAC;IAC9C,CAAC;IAED,OAAO,EAAE,CAAC;AACZ,CAAC,CAAC,CAAC"}
@@ -0,0 +1,20 @@
1
+ export declare const askQuestionReflect: {
2
+ readonly name: "askQuestionReflect";
3
+ readonly description: "This function is used to decide whether to escalate the request to more advanced model.";
4
+ readonly parameters: {
5
+ readonly type: "object";
6
+ readonly properties: {
7
+ readonly reason: {
8
+ readonly type: "string";
9
+ readonly description: "The reason for the escalation necessity.";
10
+ };
11
+ readonly shouldEscalate: {
12
+ readonly type: "number";
13
+ readonly description: "A number that expresses the escalation necessity: 0 - no need to escalate, 100 - absolutely need to escalate to more advanced model.";
14
+ readonly minimum: 0;
15
+ readonly maximum: 100;
16
+ };
17
+ };
18
+ readonly required: readonly ["reason", "shouldEscalate"];
19
+ };
20
+ };
@@ -0,0 +1,21 @@
1
+ export const askQuestionReflect = {
2
+ name: 'askQuestionReflect',
3
+ description: 'This function is used to decide whether to escalate the request to more advanced model.',
4
+ parameters: {
5
+ type: 'object',
6
+ properties: {
7
+ reason: {
8
+ type: 'string',
9
+ description: 'The reason for the escalation necessity.',
10
+ },
11
+ shouldEscalate: {
12
+ type: 'number',
13
+ description: 'A number that expresses the escalation necessity: 0 - no need to escalate, 100 - absolutely need to escalate to more advanced model.',
14
+ minimum: 0,
15
+ maximum: 100,
16
+ },
17
+ },
18
+ required: ['reason', 'shouldEscalate'],
19
+ },
20
+ };
21
+ //# sourceMappingURL=ask-question-reflect.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ask-question-reflect.js","sourceRoot":"","sources":["../../../src/prompt/function-defs/ask-question-reflect.ts"],"names":[],"mappings":"AAAA,MAAM,CAAC,MAAM,kBAAkB,GAAG;IAChC,IAAI,EAAE,oBAAoB;IAC1B,WAAW,EAAE,yFAAyF;IACtG,UAAU,EAAE;QACV,IAAI,EAAE,QAAQ;QACd,UAAU,EAAE;YACV,MAAM,EAAE;gBACN,IAAI,EAAE,QAAQ;gBACd,WAAW,EAAE,0CAA0C;aACxD;YACD,cAAc,EAAE;gBACd,IAAI,EAAE,QAAQ;gBACd,WAAW,EACT,sIAAsI;gBACxI,OAAO,EAAE,CAAC;gBACV,OAAO,EAAE,GAAG;aACb;SACF;QACD,QAAQ,EAAE,CAAC,QAAQ,EAAE,gBAAgB,CAAC;KACvC;CACO,CAAC"}
@@ -1,68 +1,79 @@
1
1
  /**
2
2
  * Function definition for askQuestion
3
+ *
4
+ * Use this function to ask questions, seek clarification, request file permissions, or manage the flow of the conversation.
5
+ * Each actionType serves a specific purpose, ensuring clarity and proper task execution.
3
6
  */
4
7
  export declare const askQuestion: {
5
8
  readonly name: "askQuestion";
6
- readonly description: "If there is a need ask a question to the user to gather more information or clarification. Alternatively this function can be called also if there is no need to prompt the user with any question.";
9
+ readonly description: "Use this function to ask a question, seek clarification, or manage the flow of the conversation. For analysis requests, use actionType \"requestAnswer\". Only proceed to code generation when explicitly instructed or after confirmation.";
7
10
  readonly parameters: {
8
11
  readonly type: "object";
9
12
  readonly properties: {
10
- readonly content: {
13
+ readonly actionType: {
11
14
  readonly type: "string";
12
- readonly description: "The message you want to display to the user, it can be either a question or a confirmation/ackoweledgment in case there is no intention to prompt the user.";
15
+ readonly enum: readonly ["requestAnswer", "requestPermissions", "requestFilesContent", "removeFilesFromContext", "confirmCodeGeneration", "startCodeGeneration", "cancelCodeGeneration", "contextOptimization"];
16
+ readonly description: "This value instructs the program on what should happen next. Use \"requestAnswer\" for analysis requests or clarifications.,\n\n Detailed Explanation of actionTypes:\n - requestAnswer: Use for general information, clarifications, or when no specific code is needed.\n - requestPermissions: Use when additional permissions are required for actions like creating or deleting files.\n - requestFilesContent: Use specifically when needing to access or review the contents of files.\n - removeFilesFromContext: Use to remove unnecessary file contents from context, optimizing token usage.\n - confirmCodeGeneration: Use to confirm with the user before starting code generation tasks.\n - startCodeGeneration: Use only after receiving confirmation to begin code generation.\n - cancelCodeGeneration: Use if code generation should be stopped or canceled.\n - contextOptimization: Use to manage and optimize context during code generation tasks, allowing the LLM to provide guidance on what parts of the context are most relevant to keep.\n ";
13
17
  };
14
- readonly shouldPrompt: {
15
- readonly type: "boolean";
16
- readonly description: "Set to true if the intention is to get response from the user.";
18
+ readonly content: {
19
+ readonly type: "string";
20
+ readonly description: "The message you want to display to the user. It can be a question if you need more information, an analysis result, or a confirmation request before proceeding with code generation.";
17
21
  };
18
22
  readonly promptNecessity: {
19
23
  readonly type: "number";
20
24
  readonly minimum: 0;
21
25
  readonly maximum: 100;
22
- readonly description: "How strong is the need to prompt the user? Higher value indicates a stronger need.";
23
- };
24
- readonly stopCodegen: {
25
- readonly type: "boolean";
26
- readonly description: "If set to true, it will break the code generation process without error, so you should use this parameter if you want to stop the code generation process.";
26
+ readonly description: "Indicates how strongly you need a response from the user. A higher value means a stronger need for user input.";
27
27
  };
28
28
  readonly requestFilesContent: {
29
29
  readonly type: "array";
30
- readonly description: string;
30
+ readonly description: "An array of absolute file paths for which you need the content. Use this when specific files are missing and you need them to proceed with the task.";
31
31
  readonly items: {
32
32
  readonly type: "string";
33
33
  };
34
34
  };
35
+ readonly removeFilesFromContext: {
36
+ readonly type: "array";
37
+ readonly description: "An array of absolute file paths that should be removed from the context. Use this to optimize token usage by removing unnecessary file contents.";
38
+ readonly items: {
39
+ readonly type: "string";
40
+ };
41
+ };
42
+ readonly contextOptimization: {
43
+ readonly type: "string";
44
+ readonly description: "A prompt generated to guide the LLM in optimizing context by specifying which parts of the context are most relevant to keep. This helps in efficient management during code generation tasks.";
45
+ };
35
46
  readonly requestPermissions: {
36
47
  readonly type: "object";
37
- readonly description: "Use this property to request enablement of permissions for code generation process if you detect that you don't have this permission listed in the requirements.";
48
+ readonly description: "Use this to request additional permissions needed for code generation if they are not already granted.";
38
49
  readonly properties: {
39
50
  readonly allowDirectoryCreate: {
40
- readonly description: "Set to `true` to request permission for creating directories.";
51
+ readonly description: "Set to true to request permission for creating directories.";
41
52
  readonly type: "boolean";
42
53
  };
43
54
  readonly allowFileCreate: {
44
- readonly description: "Set to `true` to request permission for creating files.";
55
+ readonly description: "Set to true to request permission for creating files.";
45
56
  readonly type: "boolean";
46
57
  };
47
58
  readonly allowFileDelete: {
48
- readonly description: "Set to `true` to request permission for deleting files.";
59
+ readonly description: "Set to true to request permission for deleting files.";
49
60
  readonly type: "boolean";
50
61
  };
51
62
  readonly allowFileMove: {
52
- readonly description: "Set to `true` to request permission for moving files.";
63
+ readonly description: "Set to true to request permission for moving files.";
53
64
  readonly type: "boolean";
54
65
  };
55
66
  readonly enableVision: {
56
- readonly description: "Set to `true` to request permission for vision capabilities, using images as a context for further code generation operations.";
67
+ readonly description: "Set to true to request permission for vision capabilities, using images as context for code generation.";
57
68
  readonly type: "boolean";
58
69
  };
59
70
  readonly enableImagen: {
60
- readonly description: "Set to `true` to request permission for generation of images.";
71
+ readonly description: "Set to true to request permission for generating images.";
61
72
  readonly type: "boolean";
62
73
  };
63
74
  };
64
75
  };
65
76
  };
66
- readonly required: readonly ["content", "shouldPrompt", "promptNecessity", "stopCodegen"];
77
+ readonly required: readonly ["actionType", "content", "promptNecessity"];
67
78
  };
68
79
  };