genaicode 0.8.4 → 0.8.6

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 (151) hide show
  1. package/README.md +18 -1
  2. package/dist/ai-service/anthropic.js +1 -1
  3. package/dist/ai-service/anthropic.js.map +1 -1
  4. package/dist/ai-service/common.d.ts +2 -1
  5. package/dist/ai-service/common.js +4 -4
  6. package/dist/ai-service/common.js.map +1 -1
  7. package/dist/ai-service/openai.d.ts +8 -0
  8. package/dist/ai-service/openai.js +182 -0
  9. package/dist/ai-service/openai.js.map +1 -0
  10. package/dist/ai-service/service-configurations.js +9 -3
  11. package/dist/ai-service/service-configurations.js.map +1 -1
  12. package/dist/cli/cli-options.js +1 -1
  13. package/dist/cli/cli-options.js.map +1 -1
  14. package/dist/cli/service-autodetect.js +1 -1
  15. package/dist/cli/service-autodetect.js.map +1 -1
  16. package/dist/cli/validate-cli-params.js +1 -1
  17. package/dist/cli/validate-cli-params.js.map +1 -1
  18. package/dist/files/find-files.js +5 -2
  19. package/dist/files/find-files.js.map +1 -1
  20. package/dist/files/read-files.d.ts +1 -0
  21. package/dist/files/read-files.js +13 -5
  22. package/dist/files/read-files.js.map +1 -1
  23. package/dist/index.d.ts +1 -0
  24. package/dist/index.js +4 -0
  25. package/dist/index.js.map +1 -1
  26. package/dist/main/codegen-types.d.ts +56 -4
  27. package/dist/main/codegen-utils.js +1 -1
  28. package/dist/main/codegen-utils.js.map +1 -1
  29. package/dist/main/codegen.js +5 -5
  30. package/dist/main/codegen.js.map +1 -1
  31. package/dist/main/common/content-bus-types.d.ts +1 -1
  32. package/dist/main/config-lib.d.ts +2 -31
  33. package/dist/main/config-lib.js +4 -1
  34. package/dist/main/config-lib.js.map +1 -1
  35. package/dist/main/config-schema.d.ts +14 -0
  36. package/dist/main/config-schema.js +145 -0
  37. package/dist/main/config-schema.js.map +1 -0
  38. package/dist/main/config-types.d.ts +36 -0
  39. package/dist/main/config-types.js +2 -0
  40. package/dist/main/config-types.js.map +1 -0
  41. package/dist/main/config.d.ts +2 -1
  42. package/dist/main/config.js +11 -3
  43. package/dist/main/config.js.map +1 -1
  44. package/dist/main/interactive/select-ai-service.js +1 -1
  45. package/dist/main/interactive/select-ai-service.js.map +1 -1
  46. package/dist/main/plugin-loader.d.ts +19 -4
  47. package/dist/main/plugin-loader.js +155 -48
  48. package/dist/main/plugin-loader.js.map +1 -1
  49. package/dist/main/ui/backend/api-handlers.d.ts +6 -0
  50. package/dist/main/ui/backend/api-handlers.js +5 -0
  51. package/dist/main/ui/backend/api-handlers.js.map +1 -0
  52. package/dist/main/ui/backend/api.d.ts +1 -0
  53. package/dist/main/ui/backend/api.js +6 -313
  54. package/dist/main/ui/backend/api.js.map +1 -1
  55. package/dist/main/ui/backend/endpoints/config-endpoint.d.ts +1 -0
  56. package/dist/main/ui/backend/endpoints/config-endpoint.js +39 -0
  57. package/dist/main/ui/backend/endpoints/config-endpoint.js.map +1 -0
  58. package/dist/main/ui/backend/endpoints/content-endpoint.d.ts +1 -0
  59. package/dist/main/ui/backend/endpoints/content-endpoint.js +14 -0
  60. package/dist/main/ui/backend/endpoints/content-endpoint.js.map +1 -0
  61. package/dist/main/ui/backend/endpoints/edit-message-endpoint.d.ts +1 -0
  62. package/dist/main/ui/backend/endpoints/edit-message-endpoint.js +34 -0
  63. package/dist/main/ui/backend/endpoints/edit-message-endpoint.js.map +1 -0
  64. package/dist/main/ui/backend/endpoints/execute-codegen-endpoint.d.ts +1 -0
  65. package/dist/main/ui/backend/endpoints/execute-codegen-endpoint.js +44 -0
  66. package/dist/main/ui/backend/endpoints/execute-codegen-endpoint.js.map +1 -0
  67. package/dist/main/ui/backend/endpoints/execution-status-endpoint.d.ts +1 -0
  68. package/dist/main/ui/backend/endpoints/execution-status-endpoint.js +37 -0
  69. package/dist/main/ui/backend/endpoints/execution-status-endpoint.js.map +1 -0
  70. package/dist/main/ui/backend/endpoints/generate-content-endpoint.d.ts +1 -0
  71. package/dist/main/ui/backend/endpoints/generate-content-endpoint.js +29 -0
  72. package/dist/main/ui/backend/endpoints/generate-content-endpoint.js.map +1 -0
  73. package/dist/main/ui/backend/endpoints/index.d.ts +11 -0
  74. package/dist/main/ui/backend/endpoints/index.js +12 -0
  75. package/dist/main/ui/backend/endpoints/index.js.map +1 -0
  76. package/dist/main/ui/backend/endpoints/interrupt-execution-endpoint.d.ts +1 -0
  77. package/dist/main/ui/backend/endpoints/interrupt-execution-endpoint.js +14 -0
  78. package/dist/main/ui/backend/endpoints/interrupt-execution-endpoint.js.map +1 -0
  79. package/dist/main/ui/backend/endpoints/iteration-endpoint.d.ts +1 -0
  80. package/dist/main/ui/backend/endpoints/iteration-endpoint.js +16 -0
  81. package/dist/main/ui/backend/endpoints/iteration-endpoint.js.map +1 -0
  82. package/dist/main/ui/backend/endpoints/question-endpoint.d.ts +1 -0
  83. package/dist/main/ui/backend/endpoints/question-endpoint.js +37 -0
  84. package/dist/main/ui/backend/endpoints/question-endpoint.js.map +1 -0
  85. package/dist/main/ui/backend/endpoints/service-configuration-endpoint.d.ts +1 -0
  86. package/dist/main/ui/backend/endpoints/service-configuration-endpoint.js +54 -0
  87. package/dist/main/ui/backend/endpoints/service-configuration-endpoint.js.map +1 -0
  88. package/dist/main/ui/backend/endpoints/usage-endpoint.d.ts +1 -0
  89. package/dist/main/ui/backend/endpoints/usage-endpoint.js +15 -0
  90. package/dist/main/ui/backend/endpoints/usage-endpoint.js.map +1 -0
  91. package/dist/main/ui/backend/service.d.ts +1 -1
  92. package/dist/main/ui/common/api-types.d.ts +5 -1
  93. package/dist/main/ui/frontend/assets/index-BAAQr5b1.js +1747 -0
  94. package/dist/main/ui/frontend/index.html +1 -1
  95. package/dist/prompt/ai-service-fallback.js +10 -3
  96. package/dist/prompt/ai-service-fallback.js.map +1 -1
  97. package/dist/prompt/function-calling-validate.d.ts +1 -1
  98. package/dist/prompt/function-calling-validate.js +13 -5
  99. package/dist/prompt/function-calling-validate.js.map +1 -1
  100. package/dist/prompt/function-calling.js +2 -1
  101. package/dist/prompt/function-calling.js.map +1 -1
  102. package/dist/prompt/function-defs/ask-question.d.ts +1 -0
  103. package/dist/prompt/function-defs/ask-question.js +66 -9
  104. package/dist/prompt/function-defs/ask-question.js.map +1 -1
  105. package/dist/prompt/function-defs/optimize-context.js +2 -2
  106. package/dist/prompt/function-defs/optimize-context.js.map +1 -1
  107. package/dist/prompt/limits.js +2 -2
  108. package/dist/prompt/prompt-service.js +4 -2
  109. package/dist/prompt/prompt-service.js.map +1 -1
  110. package/dist/prompt/prompt-service.test-utils.d.ts +1 -1
  111. package/dist/prompt/prompt-service.test-utils.js +1 -1
  112. package/dist/prompt/prompt-service.test-utils.js.map +1 -1
  113. package/dist/prompt/static-prompts.d.ts +2 -1
  114. package/dist/prompt/static-prompts.js +2 -1
  115. package/dist/prompt/static-prompts.js.map +1 -1
  116. package/dist/prompt/steps/step-ask-question/handlers/code-generation.js +15 -15
  117. package/dist/prompt/steps/step-ask-question/handlers/code-generation.js.map +1 -1
  118. package/dist/prompt/steps/step-ask-question/handlers/default-action.d.ts +1 -1
  119. package/dist/prompt/steps/step-ask-question/handlers/default-action.js +2 -2
  120. package/dist/prompt/steps/step-ask-question/handlers/default-action.js.map +1 -1
  121. package/dist/prompt/steps/step-ask-question/handlers/handle-update-file.d.ts +2 -0
  122. package/dist/prompt/steps/step-ask-question/handlers/handle-update-file.js +136 -0
  123. package/dist/prompt/steps/step-ask-question/handlers/handle-update-file.js.map +1 -0
  124. package/dist/prompt/steps/step-ask-question/handlers/lint.js +23 -3
  125. package/dist/prompt/steps/step-ask-question/handlers/lint.js.map +1 -1
  126. package/dist/prompt/steps/step-ask-question/handlers/request-permissions.js +1 -1
  127. package/dist/prompt/steps/step-ask-question/handlers/request-permissions.js.map +1 -1
  128. package/dist/prompt/steps/step-ask-question/step-ask-question-types.d.ts +1 -1
  129. package/dist/prompt/steps/step-ask-question/step-ask-question.js +9 -5
  130. package/dist/prompt/steps/step-ask-question/step-ask-question.js.map +1 -1
  131. package/dist/prompt/steps/step-codegen-planning.js +63 -3
  132. package/dist/prompt/steps/step-codegen-planning.js.map +1 -1
  133. package/dist/prompt/steps/step-context-optimization.d.ts +3 -0
  134. package/dist/prompt/steps/step-context-optimization.js +63 -49
  135. package/dist/prompt/steps/step-context-optimization.js.map +1 -1
  136. package/dist/prompt/steps/step-generate-codegen-summary.js +3 -5
  137. package/dist/prompt/steps/step-generate-codegen-summary.js.map +1 -1
  138. package/dist/prompt/steps/step-process-file-updates.js +56 -10
  139. package/dist/prompt/steps/step-process-file-updates.js.map +1 -1
  140. package/dist/prompt/steps/step-summarization.js +2 -0
  141. package/dist/prompt/steps/step-summarization.js.map +1 -1
  142. package/dist/prompt/steps/step-validate-recover.js +5 -5
  143. package/dist/prompt/steps/step-validate-recover.js.map +1 -1
  144. package/dist/prompt/systemprompt.d.ts +2 -1
  145. package/dist/prompt/systemprompt.js +16 -4
  146. package/dist/prompt/systemprompt.js.map +1 -1
  147. package/dist/vite-genaicode/vite-genaicode-plugin.d.ts +4 -2
  148. package/dist/vite-genaicode/vite-genaicode-plugin.js +41 -24
  149. package/dist/vite-genaicode/vite-genaicode-plugin.js.map +1 -1
  150. package/package.json +7 -7
  151. package/dist/main/ui/frontend/assets/index-jwSqt8cG.js +0 -1337
@@ -1,11 +1,11 @@
1
- import { FunctionCall, FunctionDef, GenerateContentArgs, GenerateContentFunction } from '../ai-service/common';
2
- import { ActionHandler } from '../prompt/steps/step-ask-question/step-ask-question-types';
3
- import { ServiceConfig } from './ui/common/api-types';
1
+ import { FunctionCall, FunctionDef, GenerateContentArgs, GenerateContentFunction } from '../ai-service/common.js';
2
+ import { ActionHandler } from '../prompt/steps/step-ask-question/step-ask-question-types.js';
3
+ import { ServiceConfig } from './ui/common/api-types.js';
4
4
  /** Example: {@link ../../examples/genaicode_plugins/grok_ai_service.ts} */
5
5
  export type PluginAiServiceType = `plugin:${string}`;
6
6
  /** Example: {@link ../../examples/genaicode_plugins/nonsense_action_handlers.ts} */
7
7
  export type PluginActionType = `plugin:${string}`;
8
- export type AiServiceType = 'vertex-ai' | 'ai-studio' | 'vertex-ai-claude' | 'chat-gpt' | 'anthropic' | PluginAiServiceType;
8
+ export type AiServiceType = 'vertex-ai' | 'ai-studio' | 'vertex-ai-claude' | 'openai' | 'anthropic' | PluginAiServiceType;
9
9
  export type ImagenType = 'vertex-ai' | 'dall-e';
10
10
  export interface UploadedImage {
11
11
  base64url: string;
@@ -45,6 +45,46 @@ export interface CodegenOptions {
45
45
  }
46
46
  /** Hook function type for generateContent hooks */
47
47
  export type GenerateContentHook = (args: GenerateContentArgs, result: FunctionCall[]) => Promise<void>;
48
+ /** Arguments of the codegen planning function call */
49
+ export type CodegenPlanningArgs = {
50
+ problemAnalysis: string;
51
+ codeChanges: string;
52
+ affectedFiles: {
53
+ reason: string;
54
+ filePath: string;
55
+ dependencies: string[];
56
+ }[];
57
+ };
58
+ /** Arguments of the codegen execution function call */
59
+ export interface FileUpdate {
60
+ filePath: string;
61
+ updateToolName: string;
62
+ prompt: string;
63
+ temperature?: number;
64
+ cheap?: boolean;
65
+ contextImageAssets?: string[];
66
+ }
67
+ /**
68
+ * Arguments passed to the planning hooks
69
+ */
70
+ export interface PlanningHookArgs {
71
+ /** The original planning prompt */
72
+ prompt: string;
73
+ /** The options passed to the codegen */
74
+ options: CodegenOptions;
75
+ /** The result of the planning step, if in post-processing phase */
76
+ result?: FunctionCall<CodegenPlanningArgs>;
77
+ }
78
+ /**
79
+ * Hook function type for modifying the planning prompt before execution
80
+ * Return modified prompt or undefined to use original prompt
81
+ */
82
+ export type PlanningPreHook = (args: PlanningHookArgs) => Promise<string | void>;
83
+ /**
84
+ * Hook function type for post-processing the planning result
85
+ * Return modified result or undefined to use original result
86
+ */
87
+ export type PlanningPostHook = (args: PlanningHookArgs) => Promise<FunctionCall<CodegenPlanningArgs> | void>;
48
88
  interface ExecutorArgs {
49
89
  [key: string]: unknown;
50
90
  }
@@ -74,5 +114,17 @@ export interface Plugin {
74
114
  */
75
115
  description: string;
76
116
  }>;
117
+ /**
118
+ * Hook that will be executed before the planning prompt is sent to the model.
119
+ * Can be used to modify the prompt.
120
+ * Return modified prompt or undefined to use original prompt.
121
+ */
122
+ planningPreHook?: PlanningPreHook;
123
+ /**
124
+ * Hook that will be executed after the planning result is received from the model.
125
+ * Can be used to modify the result.
126
+ * Return modified result or undefined to use original result.
127
+ */
128
+ planningPostHook?: PlanningPostHook;
77
129
  }
78
130
  export {};
@@ -1,6 +1,6 @@
1
1
  import { getRegisteredAiServices } from './plugin-loader.js';
2
2
  export function getSupportedAiServices() {
3
- return ['vertex-ai', 'ai-studio', 'vertex-ai-claude', 'chat-gpt', 'anthropic', ...getRegisteredAiServices().keys()];
3
+ return ['vertex-ai', 'ai-studio', 'vertex-ai-claude', 'openai', 'anthropic', ...getRegisteredAiServices().keys()];
4
4
  }
5
5
  export function stringToAiServiceType(aiService) {
6
6
  if (!aiService) {
@@ -1 +1 @@
1
- {"version":3,"file":"codegen-utils.js","sourceRoot":"","sources":["../../src/main/codegen-utils.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,uBAAuB,EAAE,MAAM,oBAAoB,CAAC;AAE7D,MAAM,UAAU,sBAAsB;IACpC,OAAO,CAAC,WAAW,EAAE,WAAW,EAAE,kBAAkB,EAAE,UAAU,EAAE,WAAW,EAAE,GAAG,uBAAuB,EAAE,CAAC,IAAI,EAAE,CAAC,CAAC;AACtH,CAAC;AAED,MAAM,UAAU,qBAAqB,CAAC,SAAoC;IACxE,IAAI,CAAC,SAAS,EAAE,CAAC;QACf,MAAM,IAAI,KAAK,CAAC,yEAAyE,CAAC,CAAC;IAC7F,CAAC;IAED,qDAAqD;IACrD,MAAM,iBAAiB,GAAG,sBAAsB,EAAE,CAAC;IACnD,IAAI,CAAC,iBAAiB,CAAC,QAAQ,CAAC,SAA0B,CAAC,EAAE,CAAC;QAC5D,MAAM,IAAI,KAAK,CAAC,2BAA2B,SAAS,6BAA6B,iBAAiB,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;IACnH,CAAC;IAED,OAAO,SAA0B,CAAC;AACpC,CAAC"}
1
+ {"version":3,"file":"codegen-utils.js","sourceRoot":"","sources":["../../src/main/codegen-utils.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,uBAAuB,EAAE,MAAM,oBAAoB,CAAC;AAE7D,MAAM,UAAU,sBAAsB;IACpC,OAAO,CAAC,WAAW,EAAE,WAAW,EAAE,kBAAkB,EAAE,QAAQ,EAAE,WAAW,EAAE,GAAG,uBAAuB,EAAE,CAAC,IAAI,EAAE,CAAC,CAAC;AACpH,CAAC;AAED,MAAM,UAAU,qBAAqB,CAAC,SAAoC;IACxE,IAAI,CAAC,SAAS,EAAE,CAAC;QACf,MAAM,IAAI,KAAK,CAAC,yEAAyE,CAAC,CAAC;IAC7F,CAAC;IAED,qDAAqD;IACrD,MAAM,iBAAiB,GAAG,sBAAsB,EAAE,CAAC;IACnD,IAAI,CAAC,iBAAiB,CAAC,QAAQ,CAAC,SAA0B,CAAC,EAAE,CAAC;QAC5D,MAAM,IAAI,KAAK,CAAC,2BAA2B,SAAS,6BAA6B,iBAAiB,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;IACnH,CAAC;IAED,OAAO,SAA0B,CAAC;AACpC,CAAC"}
@@ -1,7 +1,7 @@
1
1
  import * as cliParams from '../cli/cli-params.js';
2
2
  import { validateCliParams } from '../cli/validate-cli-params.js';
3
3
  import { generateContent as generateContentVertexAi } from '../ai-service/vertex-ai.js';
4
- import { generateContent as generateContentGPT } from '../ai-service/chat-gpt.js';
4
+ import { generateContent as generateContentGPT } from '../ai-service/openai.js';
5
5
  import { generateContent as generateContentAnthropic } from '../ai-service/anthropic.js';
6
6
  import { generateContent as generateContentVertexAiClaude } from '../ai-service/vertex-ai-claude.js';
7
7
  import { generateContent as generateContentAiStudio } from '../ai-service/ai-studio.js';
@@ -10,13 +10,10 @@ import { generateImage as generateImageVertexAi } from '../ai-service/vertex-ai-
10
10
  import { promptService } from '../prompt/prompt-service.js';
11
11
  import { printHelpMessage } from '../cli/cli-options.js';
12
12
  import { getCodeGenPrompt } from '../prompt/prompt-codegen.js';
13
- import { runInteractiveMode } from './interactive/codegen-interactive.js';
14
- import { runCodegenUI } from './ui/codegen-ui.js';
15
13
  import { putSystemMessage, setCurrentIterationId, unsetCurrentIterationId } from './common/content-bus.js';
16
14
  import { refreshFiles } from '../files/find-files.js';
17
15
  import { getRegisteredAiServices } from './plugin-loader.js';
18
16
  import { stringToAiServiceType } from './codegen-utils.js';
19
- import { runCodegenNonInteractive } from './codegen-non-interactive.js';
20
17
  /** Executes codegen */
21
18
  export async function runCodegen(isDev = false) {
22
19
  // Print to console the received parameters
@@ -57,13 +54,16 @@ export async function runCodegen(isDev = false) {
57
54
  isDev,
58
55
  };
59
56
  if (cliParams.ui) {
57
+ const { runCodegenUI } = await import('./ui/codegen-ui.js');
60
58
  await runCodegenUI(options);
61
59
  }
62
60
  else if (cliParams.interactive) {
61
+ const { runInteractiveMode } = await import('./interactive/codegen-interactive.js');
63
62
  // Handle interactive mode
64
63
  await runInteractiveMode(options);
65
64
  }
66
65
  else {
66
+ const { runCodegenNonInteractive } = await import('./codegen-non-interactive.js');
67
67
  await runCodegenNonInteractive(options);
68
68
  }
69
69
  }
@@ -108,7 +108,7 @@ export function getGenerateContentFunctions() {
108
108
  'vertex-ai': generateContentVertexAi,
109
109
  'ai-studio': generateContentAiStudio,
110
110
  anthropic: generateContentAnthropic,
111
- 'chat-gpt': generateContentGPT,
111
+ openai: generateContentGPT,
112
112
  ...Object.fromEntries([...getRegisteredAiServices().entries()].map(([key, value]) => [key, value.generateContent])),
113
113
  };
114
114
  }
@@ -1 +1 @@
1
- {"version":3,"file":"codegen.js","sourceRoot":"","sources":["../../src/main/codegen.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"codegen.js","sourceRoot":"","sources":["../../src/main/codegen.ts"],"names":[],"mappings":"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"}
@@ -1,4 +1,4 @@
1
- import { PromptItem } from '../../ai-service/common';
1
+ import { PromptItem } from '../../ai-service/common.js';
2
2
  export declare enum ChatMessageType {
3
3
  USER = "user",
4
4
  ASSISTANT = "assistant",
@@ -1,33 +1,4 @@
1
- export interface ImportantContext {
2
- systemPrompt?: string[];
3
- files?: string[];
4
- }
5
- export interface ModelOverrides {
6
- chatGpt?: {
7
- cheap?: string;
8
- default?: string;
9
- };
10
- anthropic?: {
11
- cheap?: string;
12
- default?: string;
13
- };
14
- vertexAi?: {
15
- cheap?: string;
16
- default?: string;
17
- };
18
- aiStudio?: {
19
- cheap?: string;
20
- default?: string;
21
- };
22
- }
23
- export interface RcConfig {
24
- rootDir: string;
25
- lintCommand?: string;
26
- extensions?: string[];
27
- ignorePaths?: string[];
28
- importantContext?: ImportantContext;
29
- modelOverrides?: ModelOverrides;
30
- plugins?: string[];
31
- }
1
+ import { RcConfig } from './config-types.js';
2
+ export declare const CODEGENRC_FILENAME = ".genaicoderc";
32
3
  export declare function findRcFile(): Promise<string>;
33
4
  export declare function parseRcFile(rcFilePath: string): RcConfig;
@@ -4,8 +4,9 @@ import assert from 'node:assert';
4
4
  import { confirm } from '@inquirer/prompts';
5
5
  import { isAncestorDirectory } from '../files/file-utils.js';
6
6
  import { detectAndConfigureProfile, npmProfile } from '../project-profiles/index.js';
7
+ import { validateRcConfig } from './config-schema.js';
7
8
  // This file contains project codegen configuration
8
- const CODEGENRC_FILENAME = '.genaicoderc';
9
+ export const CODEGENRC_FILENAME = '.genaicoderc';
9
10
  /**
10
11
  * Create initial .genaicoderc content with profile detection
11
12
  */
@@ -54,9 +55,11 @@ export async function findRcFile() {
54
55
  export function parseRcFile(rcFilePath) {
55
56
  assert(fs.existsSync(rcFilePath), `${CODEGENRC_FILENAME} not found`);
56
57
  const rcConfig = JSON.parse(fs.readFileSync(rcFilePath, 'utf-8'));
58
+ validateRcConfig(rcConfig);
57
59
  assert(rcConfig.rootDir, 'Root dir not configured');
58
60
  const rootDir = path.resolve(path.dirname(rcFilePath), rcConfig.rootDir);
59
61
  assert(isAncestorDirectory(path.dirname(rcFilePath), rootDir), 'Root dir is not located inside project directory');
62
+ // Validate content using json schema
60
63
  // Validate plugins array if it exists
61
64
  if (rcConfig.plugins) {
62
65
  assert(Array.isArray(rcConfig.plugins), 'Plugins must be an array of strings');
@@ -1 +1 @@
1
- {"version":3,"file":"config-lib.js","sourceRoot":"","sources":["../../src/main/config-lib.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"config-lib.js","sourceRoot":"","sources":["../../src/main/config-lib.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,14 @@
1
+ import { Schema } from 'jsonschema';
2
+ /**
3
+ * This file contains the JSON schema for .genaicoderc configuration.
4
+ * The schema is based on the RcConfig interface and provides comprehensive
5
+ * documentation for all available configuration options.
6
+ *
7
+ * IMPORTANT: Keep this schema in sync with the RcConfig interface in config-lib.ts
8
+ */
9
+ export declare const GENAICODERC_SCHEMA: Schema;
10
+ /**
11
+ * Name of the virtual file that contains the schema
12
+ */
13
+ export declare const SCHEMA_VIRTUAL_FILE_NAME = ".genaicoderc.schema.json";
14
+ export declare function validateRcConfig(rcConfig: unknown): void;
@@ -0,0 +1,145 @@
1
+ import { Validator } from 'jsonschema';
2
+ /**
3
+ * This file contains the JSON schema for .genaicoderc configuration.
4
+ * The schema is based on the RcConfig interface and provides comprehensive
5
+ * documentation for all available configuration options.
6
+ *
7
+ * IMPORTANT: Keep this schema in sync with the RcConfig interface in config-lib.ts
8
+ */
9
+ export const GENAICODERC_SCHEMA = {
10
+ $schema: 'http://json-schema.org/draft-07/schema#',
11
+ title: 'GenAIcode Configuration Schema',
12
+ description: 'Configuration schema for .genaicoderc file used by GenAIcode',
13
+ type: 'object',
14
+ properties: {
15
+ rootDir: {
16
+ type: 'string',
17
+ description: `Root directory of the project. All file paths will be relative to this directory.
18
+ Default value is '.'.
19
+ Examples: '.', 'src', './project'`,
20
+ },
21
+ lintCommand: {
22
+ type: 'string',
23
+ description: `Command to run for linting the code before and after generation. The command should return appropriate exit codes for success/failure.
24
+ Examples: 'npm run lint', 'eslint .', 'npm run type-check && npm run lint'`,
25
+ },
26
+ extensions: {
27
+ type: 'array',
28
+ items: {
29
+ type: 'string',
30
+ pattern: '^\\.[a-z0-9]+$',
31
+ },
32
+ description: `File extensions that the tool should consider for code generation and analysis.
33
+ Examples: ['.js', '.ts', '.tsx', '.md'], ['.py', '.go', '.java'], ['.c', '.h', '.cpp']`,
34
+ },
35
+ ignorePaths: {
36
+ type: 'array',
37
+ items: {
38
+ type: 'string',
39
+ },
40
+ description: `Directories and files that should be excluded from code analysis and generation:
41
+ Examples: ['node_modules', 'dist', 'build'], ['coverage', '.vscode', '.github']`,
42
+ },
43
+ importantContext: {
44
+ type: 'object',
45
+ description: 'Configuration for important context that should always be available to the AI model.',
46
+ properties: {
47
+ systemPrompt: {
48
+ type: 'array',
49
+ items: {
50
+ type: 'string',
51
+ },
52
+ description: 'Additional system-level prompts to guide AI behavior and set context.',
53
+ },
54
+ files: {
55
+ type: 'array',
56
+ items: {
57
+ type: 'string',
58
+ },
59
+ description: 'Paths to files that should always be included in the context for code generation.',
60
+ },
61
+ },
62
+ },
63
+ modelOverrides: {
64
+ type: 'object',
65
+ description: 'Override configurations for different AI service models.',
66
+ properties: {
67
+ openai: {
68
+ type: 'object',
69
+ properties: {
70
+ cheap: {
71
+ type: 'string',
72
+ description: `Model to use when cheap flag is enabled for OpenAI compatible service.
73
+ Example: ['gpt-4o-mini']`,
74
+ },
75
+ default: {
76
+ type: 'string',
77
+ description: `Default model to use for OpenAI compatible service. Example: ['gpt-4o']`,
78
+ },
79
+ },
80
+ },
81
+ anthropic: {
82
+ type: 'object',
83
+ properties: {
84
+ cheap: {
85
+ type: 'string',
86
+ description: `Model to use when cheap flag is enabled for Anthropic service. Example: ['claude-3-haiku-20240307']`,
87
+ },
88
+ default: {
89
+ type: 'string',
90
+ description: `Default model to use for Anthropic service. Example: ['claude-3-5-sonnet-20240620']`,
91
+ },
92
+ },
93
+ },
94
+ vertexAi: {
95
+ type: 'object',
96
+ properties: {
97
+ cheap: {
98
+ type: 'string',
99
+ description: `Model to use when cheap flag is enabled for Vertex AI service. Example: ['gemini-1.5-flash-001']`,
100
+ },
101
+ default: {
102
+ type: 'string',
103
+ description: `Default model to use for Vertex AI service. Example: ['gemini-1.5-pro-001']`,
104
+ },
105
+ },
106
+ },
107
+ aiStudio: {
108
+ type: 'object',
109
+ properties: {
110
+ cheap: {
111
+ type: 'string',
112
+ description: `Model to use when cheap flag is enabled for AI Studio service. Example: ['gemini-1.5-flash-001']`,
113
+ },
114
+ default: {
115
+ type: 'string',
116
+ description: `Default model to use for AI Studio service. Example: ['gemini-1.5-pro-001']`,
117
+ },
118
+ },
119
+ },
120
+ },
121
+ },
122
+ plugins: {
123
+ type: 'array',
124
+ items: {
125
+ type: 'string',
126
+ },
127
+ description: `Paths to plugin files that should be loaded by GenAIcode. Plugins can extend functionality by adding custom operations, AI services, or action handlers.
128
+ Example: ['./plugins/custom-plugin.js', './examples/genaicode_plugins/genaicode_tracker.js', './examples/genaicode_plugins/nonsense_operation.js']`,
129
+ },
130
+ },
131
+ required: ['rootDir'],
132
+ additionalProperties: false,
133
+ };
134
+ /**
135
+ * Name of the virtual file that contains the schema
136
+ */
137
+ export const SCHEMA_VIRTUAL_FILE_NAME = '.genaicoderc.schema.json';
138
+ export function validateRcConfig(rcConfig) {
139
+ const validator = new Validator();
140
+ const result = validator.validate(rcConfig, GENAICODERC_SCHEMA);
141
+ if (!result.valid) {
142
+ throw new Error(`Invalid .genaicoderc configuration: ${result.errors.map((e) => e.stack).join('\n')}`);
143
+ }
144
+ }
145
+ //# sourceMappingURL=config-schema.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"config-schema.js","sourceRoot":"","sources":["../../src/main/config-schema.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,36 @@
1
+ export interface ImportantContext {
2
+ systemPrompt?: string[];
3
+ files?: string[];
4
+ }
5
+ export interface ModelOverrides {
6
+ openai?: {
7
+ cheap?: string;
8
+ default?: string;
9
+ };
10
+ anthropic?: {
11
+ cheap?: string;
12
+ default?: string;
13
+ };
14
+ vertexAi?: {
15
+ cheap?: string;
16
+ default?: string;
17
+ };
18
+ aiStudio?: {
19
+ cheap?: string;
20
+ default?: string;
21
+ };
22
+ }
23
+ /**
24
+ * Configuration for the project codegen
25
+ *
26
+ * IMPORTANT: Keep this interface in sync with the JSON schema in config-schema.ts
27
+ */
28
+ export interface RcConfig {
29
+ rootDir: string;
30
+ lintCommand?: string;
31
+ extensions?: string[];
32
+ ignorePaths?: string[];
33
+ importantContext?: ImportantContext;
34
+ modelOverrides?: ModelOverrides;
35
+ plugins?: string[];
36
+ }
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=config-types.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"config-types.js","sourceRoot":"","sources":["../../src/main/config-types.ts"],"names":[],"mappings":""}
@@ -1,5 +1,6 @@
1
- import { RcConfig, ImportantContext, ModelOverrides } from './config-lib.js';
1
+ import { RcConfig, ImportantContext, ModelOverrides } from './config-types.js';
2
2
  export declare const rcConfig: RcConfig;
3
+ export declare const rcConfigSchemaFilePath: string;
3
4
  export declare const sourceExtensions: string[];
4
5
  export declare const IMAGE_ASSET_EXTENSIONS: string[];
5
6
  export declare const ignorePaths: string[];
@@ -1,10 +1,12 @@
1
- import { findRcFile, parseRcFile } from './config-lib.js';
1
+ import { findRcFile, parseRcFile, CODEGENRC_FILENAME } from './config-lib.js';
2
2
  import { loadPlugins } from './plugin-loader.js';
3
3
  import path from 'path';
4
4
  import { DEFAULT_EXTENSIONS, DEFAULT_IGNORE_PATHS } from '../project-profiles/index.js';
5
+ import { SCHEMA_VIRTUAL_FILE_NAME } from './config-schema.js';
5
6
  // Read and parse the configuration
6
7
  const rcFilePath = await findRcFile();
7
8
  export const rcConfig = parseRcFile(rcFilePath);
9
+ export const rcConfigSchemaFilePath = path.join(rcConfig.rootDir, SCHEMA_VIRTUAL_FILE_NAME);
8
10
  await loadPlugins(rcConfig);
9
11
  export const sourceExtensions = rcConfig.extensions ?? [...DEFAULT_EXTENSIONS.JS];
10
12
  // Image extensions (driven by ai service limitations, so not configurable)
@@ -13,11 +15,17 @@ export const ignorePaths = rcConfig.ignorePaths ?? [...DEFAULT_IGNORE_PATHS.JS];
13
15
  export const importantContext = processImportantContext(rcConfig.importantContext);
14
16
  export const modelOverrides = rcConfig.modelOverrides ?? {};
15
17
  function processImportantContext(context) {
16
- if (!context)
18
+ if (!context) {
17
19
  return { systemPrompt: [], files: [] };
20
+ }
21
+ // Always include .genaicoderc in important files
22
+ const files = context.files || [];
23
+ if (!files.includes(CODEGENRC_FILENAME)) {
24
+ files.push(CODEGENRC_FILENAME);
25
+ }
18
26
  return {
19
27
  systemPrompt: context.systemPrompt || [],
20
- files: (context.files || []).map((file) => path.resolve(rcConfig.rootDir, file)),
28
+ files: files.map((file) => path.resolve(rcConfig.rootDir, file)),
21
29
  };
22
30
  }
23
31
  console.log('Detected codegen configuration', rcConfig);
@@ -1 +1 @@
1
- {"version":3,"file":"config.js","sourceRoot":"","sources":["../../src/main/config.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,WAAW,EAA8C,MAAM,iBAAiB,CAAC;AACtG,OAAO,EAAE,WAAW,EAAE,MAAM,oBAAoB,CAAC;AACjD,OAAO,IAAI,MAAM,MAAM,CAAC;AACxB,OAAO,EAAE,kBAAkB,EAAE,oBAAoB,EAAE,MAAM,8BAA8B,CAAC;AAExF,mCAAmC;AACnC,MAAM,UAAU,GAAW,MAAM,UAAU,EAAE,CAAC;AAC9C,MAAM,CAAC,MAAM,QAAQ,GAAa,WAAW,CAAC,UAAU,CAAC,CAAC;AAE1D,MAAM,WAAW,CAAC,QAAQ,CAAC,CAAC;AAE5B,MAAM,CAAC,MAAM,gBAAgB,GAAa,QAAQ,CAAC,UAAU,IAAI,CAAC,GAAG,kBAAkB,CAAC,EAAE,CAAC,CAAC;AAE5F,2EAA2E;AAC3E,MAAM,CAAC,MAAM,sBAAsB,GAAa,CAAC,MAAM,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,EAAE,OAAO,CAAC,CAAC;AAE3F,MAAM,CAAC,MAAM,WAAW,GAAa,QAAQ,CAAC,WAAW,IAAI,CAAC,GAAG,oBAAoB,CAAC,EAAE,CAAC,CAAC;AAE1F,MAAM,CAAC,MAAM,gBAAgB,GAAqB,uBAAuB,CAAC,QAAQ,CAAC,gBAAgB,CAAC,CAAC;AAErG,MAAM,CAAC,MAAM,cAAc,GAAmB,QAAQ,CAAC,cAAc,IAAI,EAAE,CAAC;AAE5E,SAAS,uBAAuB,CAAC,OAAqC;IACpE,IAAI,CAAC,OAAO;QAAE,OAAO,EAAE,YAAY,EAAE,EAAE,EAAE,KAAK,EAAE,EAAE,EAAE,CAAC;IAErD,OAAO;QACL,YAAY,EAAE,OAAO,CAAC,YAAY,IAAI,EAAE;QACxC,KAAK,EAAE,CAAC,OAAO,CAAC,KAAK,IAAI,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,OAAO,EAAE,IAAI,CAAC,CAAC;KACjF,CAAC;AACJ,CAAC;AAED,OAAO,CAAC,GAAG,CAAC,gCAAgC,EAAE,QAAQ,CAAC,CAAC;AACxD,OAAO,CAAC,GAAG,CAAC,WAAW,EAAE,QAAQ,CAAC,OAAO,CAAC,CAAC;AAC3C,OAAO,CAAC,GAAG,CAAC,oBAAoB,EAAE,gBAAgB,CAAC,CAAC;AACpD,OAAO,CAAC,GAAG,CAAC,kBAAkB,EAAE,cAAc,CAAC,CAAC"}
1
+ {"version":3,"file":"config.js","sourceRoot":"","sources":["../../src/main/config.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,UAAU,EAAE,WAAW,EAAE,kBAAkB,EAAE,MAAM,iBAAiB,CAAC;AAC9E,OAAO,EAAE,WAAW,EAAE,MAAM,oBAAoB,CAAC;AACjD,OAAO,IAAI,MAAM,MAAM,CAAC;AACxB,OAAO,EAAE,kBAAkB,EAAE,oBAAoB,EAAE,MAAM,8BAA8B,CAAC;AACxF,OAAO,EAAE,wBAAwB,EAAE,MAAM,oBAAoB,CAAC;AAE9D,mCAAmC;AACnC,MAAM,UAAU,GAAW,MAAM,UAAU,EAAE,CAAC;AAC9C,MAAM,CAAC,MAAM,QAAQ,GAAa,WAAW,CAAC,UAAU,CAAC,CAAC;AAE1D,MAAM,CAAC,MAAM,sBAAsB,GAAG,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,OAAO,EAAE,wBAAwB,CAAC,CAAC;AAE5F,MAAM,WAAW,CAAC,QAAQ,CAAC,CAAC;AAE5B,MAAM,CAAC,MAAM,gBAAgB,GAAa,QAAQ,CAAC,UAAU,IAAI,CAAC,GAAG,kBAAkB,CAAC,EAAE,CAAC,CAAC;AAE5F,2EAA2E;AAC3E,MAAM,CAAC,MAAM,sBAAsB,GAAa,CAAC,MAAM,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,EAAE,OAAO,CAAC,CAAC;AAE3F,MAAM,CAAC,MAAM,WAAW,GAAa,QAAQ,CAAC,WAAW,IAAI,CAAC,GAAG,oBAAoB,CAAC,EAAE,CAAC,CAAC;AAE1F,MAAM,CAAC,MAAM,gBAAgB,GAAqB,uBAAuB,CAAC,QAAQ,CAAC,gBAAgB,CAAC,CAAC;AAErG,MAAM,CAAC,MAAM,cAAc,GAAmB,QAAQ,CAAC,cAAc,IAAI,EAAE,CAAC;AAE5E,SAAS,uBAAuB,CAAC,OAAqC;IACpE,IAAI,CAAC,OAAO,EAAE,CAAC;QACb,OAAO,EAAE,YAAY,EAAE,EAAE,EAAE,KAAK,EAAE,EAAE,EAAE,CAAC;IACzC,CAAC;IAED,iDAAiD;IACjD,MAAM,KAAK,GAAG,OAAO,CAAC,KAAK,IAAI,EAAE,CAAC;IAClC,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,kBAAkB,CAAC,EAAE,CAAC;QACxC,KAAK,CAAC,IAAI,CAAC,kBAAkB,CAAC,CAAC;IACjC,CAAC;IAED,OAAO;QACL,YAAY,EAAE,OAAO,CAAC,YAAY,IAAI,EAAE;QACxC,KAAK,EAAE,KAAK,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,OAAO,EAAE,IAAI,CAAC,CAAC;KACjE,CAAC;AACJ,CAAC;AAED,OAAO,CAAC,GAAG,CAAC,gCAAgC,EAAE,QAAQ,CAAC,CAAC;AACxD,OAAO,CAAC,GAAG,CAAC,WAAW,EAAE,QAAQ,CAAC,OAAO,CAAC,CAAC;AAC3C,OAAO,CAAC,GAAG,CAAC,oBAAoB,EAAE,gBAAgB,CAAC,CAAC;AACpD,OAAO,CAAC,GAAG,CAAC,kBAAkB,EAAE,cAAc,CAAC,CAAC"}
@@ -2,7 +2,7 @@ import { select } from '@inquirer/prompts';
2
2
  const AI_SERVICE_CHOICES = [
3
3
  { name: 'Vertex AI (Gemini)', value: 'vertex-ai' },
4
4
  { name: 'AI Studio (Gemini)', value: 'ai-studio' },
5
- { name: 'ChatGPT', value: 'chat-gpt' },
5
+ { name: 'OpenAI', value: 'openai' },
6
6
  { name: 'Anthropic Claude', value: 'anthropic' },
7
7
  { name: 'Claude via Vertex AI', value: 'vertex-ai-claude' },
8
8
  ];
@@ -1 +1 @@
1
- {"version":3,"file":"select-ai-service.js","sourceRoot":"","sources":["../../../src/main/interactive/select-ai-service.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,MAAM,mBAAmB,CAAC;AAG3C,MAAM,kBAAkB,GAAG;IACzB,EAAE,IAAI,EAAE,oBAAoB,EAAE,KAAK,EAAE,WAAW,EAAE;IAClD,EAAE,IAAI,EAAE,oBAAoB,EAAE,KAAK,EAAE,WAAW,EAAE;IAClD,EAAE,IAAI,EAAE,SAAS,EAAE,KAAK,EAAE,UAAU,EAAE;IACtC,EAAE,IAAI,EAAE,kBAAkB,EAAE,KAAK,EAAE,WAAW,EAAE;IAChD,EAAE,IAAI,EAAE,sBAAsB,EAAE,KAAK,EAAE,kBAAkB,EAAE;CACnD,CAAC;AAEX,MAAM,CAAC,MAAM,eAAe,GAAG,KAAK,EAAE,gBAA2C,EAA0B,EAAE;IAC3G,IAAI,CAAC;QACH,MAAM,iBAAiB,GAAG,MAAM,MAAM,CAAgB;YACpD,OAAO,EAAE,sCAAsC;YAC/C,QAAQ,EAAE,kBAAkB,CAAC,MAAM;YACnC,OAAO,EAAE,kBAAkB,CAAC,GAAG,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC;gBAC3C,GAAG,MAAM;gBACT,OAAO,EAAE,gBAAgB,KAAK,MAAM,CAAC,KAAK;aAC3C,CAAC,CAAC;YACH,OAAO,EAAE,gBAAgB;SAC1B,CAAC,CAAC;QAEH,OAAO,iBAAiB,CAAC;IAC3B,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,OAAO,CAAC,KAAK,CAAC,6BAA6B,EAAE,KAAK,CAAC,CAAC;QACpD,MAAM,KAAK,CAAC;IACd,CAAC;AACH,CAAC,CAAC"}
1
+ {"version":3,"file":"select-ai-service.js","sourceRoot":"","sources":["../../../src/main/interactive/select-ai-service.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,MAAM,mBAAmB,CAAC;AAG3C,MAAM,kBAAkB,GAAG;IACzB,EAAE,IAAI,EAAE,oBAAoB,EAAE,KAAK,EAAE,WAAW,EAAE;IAClD,EAAE,IAAI,EAAE,oBAAoB,EAAE,KAAK,EAAE,WAAW,EAAE;IAClD,EAAE,IAAI,EAAE,QAAQ,EAAE,KAAK,EAAE,QAAQ,EAAE;IACnC,EAAE,IAAI,EAAE,kBAAkB,EAAE,KAAK,EAAE,WAAW,EAAE;IAChD,EAAE,IAAI,EAAE,sBAAsB,EAAE,KAAK,EAAE,kBAAkB,EAAE;CACnD,CAAC;AAEX,MAAM,CAAC,MAAM,eAAe,GAAG,KAAK,EAAE,gBAA2C,EAA0B,EAAE;IAC3G,IAAI,CAAC;QACH,MAAM,iBAAiB,GAAG,MAAM,MAAM,CAAgB;YACpD,OAAO,EAAE,sCAAsC;YAC/C,QAAQ,EAAE,kBAAkB,CAAC,MAAM;YACnC,OAAO,EAAE,kBAAkB,CAAC,GAAG,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC;gBAC3C,GAAG,MAAM;gBACT,OAAO,EAAE,gBAAgB,KAAK,MAAM,CAAC,KAAK;aAC3C,CAAC,CAAC;YACH,OAAO,EAAE,gBAAgB;SAC1B,CAAC,CAAC;QAEH,OAAO,iBAAiB,CAAC;IAC3B,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,OAAO,CAAC,KAAK,CAAC,6BAA6B,EAAE,KAAK,CAAC,CAAC;QACpD,MAAM,KAAK,CAAC;IACd,CAAC;AACH,CAAC,CAAC"}
@@ -1,9 +1,17 @@
1
- import { Operation, PluginActionType, PluginAiServiceType, GenerateContentHook } from './codegen-types.js';
1
+ import { Operation, Plugin, PluginActionType, PluginAiServiceType, GenerateContentHook, PlanningPreHook, PlanningPostHook } from './codegen-types.js';
2
2
  import { GenerateContentFunction } from '../ai-service/common.js';
3
3
  import { ActionHandler } from '../prompt/steps/step-ask-question/step-ask-question-types.js';
4
- import { RcConfig } from './config-lib.js';
4
+ import { RcConfig } from './config-types.js';
5
5
  import { ProjectProfilePlugin } from '../project-profiles/types.js';
6
6
  import { ServiceConfig } from './ui/common/api-types.js';
7
+ /**
8
+ * Registers a single plugin with validation and idempotency checks
9
+ * @throws {Error} If plugin registration fails
10
+ */
11
+ export declare function registerPlugin(plugin: Plugin, pluginPath?: string): Promise<void>;
12
+ /**
13
+ * Loads plugins from configuration with idempotency checks
14
+ */
7
15
  export declare function loadPlugins(rcConfig: RcConfig): Promise<void>;
8
16
  export declare function getRegisteredAiServices(): Map<PluginAiServiceType, {
9
17
  generateContent: GenerateContentFunction;
@@ -13,7 +21,14 @@ export declare function getRegisteredOperations(): Operation[];
13
21
  export declare function getRegisteredActionHandlers(): Map<PluginActionType, ActionHandler>;
14
22
  export declare function getRegisteredActionHandlerDescriptions(): Map<PluginActionType, string>;
15
23
  export declare function getRegisteredGenerateContentHooks(): GenerateContentHook[];
24
+ export declare function getRegisteredPlanningPreHooks(): PlanningPreHook[];
25
+ export declare function getRegisteredPlanningPostHooks(): PlanningPostHook[];
26
+ export declare function getRegisteredProfilePlugins(): ProjectProfilePlugin[];
16
27
  /**
17
- * Get all registered project profile plugins
28
+ * Checks if a plugin is already loaded
18
29
  */
19
- export declare function getRegisteredProfilePlugins(): ProjectProfilePlugin[];
30
+ export declare function isPluginLoaded(pluginName: string): boolean;
31
+ /**
32
+ * Gets a loaded plugin by name
33
+ */
34
+ export declare function getLoadedPlugin(pluginName: string): Plugin | undefined;