ghcralph 0.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (160) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +327 -0
  3. package/bin/ghcralph.js +2 -0
  4. package/dist/cli.d.ts +12 -0
  5. package/dist/cli.d.ts.map +1 -0
  6. package/dist/cli.js +92 -0
  7. package/dist/cli.js.map +1 -0
  8. package/dist/commands/config.d.ts +8 -0
  9. package/dist/commands/config.d.ts.map +1 -0
  10. package/dist/commands/config.js +118 -0
  11. package/dist/commands/config.js.map +1 -0
  12. package/dist/commands/index.d.ts +11 -0
  13. package/dist/commands/index.d.ts.map +1 -0
  14. package/dist/commands/index.js +11 -0
  15. package/dist/commands/index.js.map +1 -0
  16. package/dist/commands/init.d.ts +15 -0
  17. package/dist/commands/init.d.ts.map +1 -0
  18. package/dist/commands/init.js +116 -0
  19. package/dist/commands/init.js.map +1 -0
  20. package/dist/commands/rollback.d.ts +8 -0
  21. package/dist/commands/rollback.d.ts.map +1 -0
  22. package/dist/commands/rollback.js +238 -0
  23. package/dist/commands/rollback.js.map +1 -0
  24. package/dist/commands/run.d.ts +28 -0
  25. package/dist/commands/run.d.ts.map +1 -0
  26. package/dist/commands/run.js +407 -0
  27. package/dist/commands/run.js.map +1 -0
  28. package/dist/commands/status.d.ts +8 -0
  29. package/dist/commands/status.d.ts.map +1 -0
  30. package/dist/commands/status.js +399 -0
  31. package/dist/commands/status.js.map +1 -0
  32. package/dist/core/action-executor.d.ts +96 -0
  33. package/dist/core/action-executor.d.ts.map +1 -0
  34. package/dist/core/action-executor.js +289 -0
  35. package/dist/core/action-executor.js.map +1 -0
  36. package/dist/core/checkpoint-manager.d.ts +94 -0
  37. package/dist/core/checkpoint-manager.d.ts.map +1 -0
  38. package/dist/core/checkpoint-manager.js +236 -0
  39. package/dist/core/checkpoint-manager.js.map +1 -0
  40. package/dist/core/config-manager.d.ts +62 -0
  41. package/dist/core/config-manager.d.ts.map +1 -0
  42. package/dist/core/config-manager.js +184 -0
  43. package/dist/core/config-manager.js.map +1 -0
  44. package/dist/core/config-schema.d.ts +74 -0
  45. package/dist/core/config-schema.d.ts.map +1 -0
  46. package/dist/core/config-schema.js +84 -0
  47. package/dist/core/config-schema.js.map +1 -0
  48. package/dist/core/context-builder.d.ts +116 -0
  49. package/dist/core/context-builder.d.ts.map +1 -0
  50. package/dist/core/context-builder.js +388 -0
  51. package/dist/core/context-builder.js.map +1 -0
  52. package/dist/core/feedback-builder.d.ts +94 -0
  53. package/dist/core/feedback-builder.d.ts.map +1 -0
  54. package/dist/core/feedback-builder.js +226 -0
  55. package/dist/core/feedback-builder.js.map +1 -0
  56. package/dist/core/file-safeguard.d.ts +109 -0
  57. package/dist/core/file-safeguard.d.ts.map +1 -0
  58. package/dist/core/file-safeguard.js +200 -0
  59. package/dist/core/file-safeguard.js.map +1 -0
  60. package/dist/core/git-branch-manager.d.ts +122 -0
  61. package/dist/core/git-branch-manager.d.ts.map +1 -0
  62. package/dist/core/git-branch-manager.js +302 -0
  63. package/dist/core/git-branch-manager.js.map +1 -0
  64. package/dist/core/github-plan.d.ts +86 -0
  65. package/dist/core/github-plan.d.ts.map +1 -0
  66. package/dist/core/github-plan.js +333 -0
  67. package/dist/core/github-plan.js.map +1 -0
  68. package/dist/core/index.d.ts +43 -0
  69. package/dist/core/index.d.ts.map +1 -0
  70. package/dist/core/index.js +26 -0
  71. package/dist/core/index.js.map +1 -0
  72. package/dist/core/local-markdown-plan.d.ts +65 -0
  73. package/dist/core/local-markdown-plan.d.ts.map +1 -0
  74. package/dist/core/local-markdown-plan.js +154 -0
  75. package/dist/core/local-markdown-plan.js.map +1 -0
  76. package/dist/core/loop-engine.d.ts +133 -0
  77. package/dist/core/loop-engine.d.ts.map +1 -0
  78. package/dist/core/loop-engine.js +420 -0
  79. package/dist/core/loop-engine.js.map +1 -0
  80. package/dist/core/loop-events.d.ts +48 -0
  81. package/dist/core/loop-events.d.ts.map +1 -0
  82. package/dist/core/loop-events.js +24 -0
  83. package/dist/core/loop-events.js.map +1 -0
  84. package/dist/core/loop-state.d.ts +51 -0
  85. package/dist/core/loop-state.d.ts.map +1 -0
  86. package/dist/core/loop-state.js +48 -0
  87. package/dist/core/loop-state.js.map +1 -0
  88. package/dist/core/markdown-parser.d.ts +51 -0
  89. package/dist/core/markdown-parser.d.ts.map +1 -0
  90. package/dist/core/markdown-parser.js +122 -0
  91. package/dist/core/markdown-parser.js.map +1 -0
  92. package/dist/core/plan-manager.d.ts +61 -0
  93. package/dist/core/plan-manager.d.ts.map +1 -0
  94. package/dist/core/plan-manager.js +7 -0
  95. package/dist/core/plan-manager.js.map +1 -0
  96. package/dist/core/progress-tracker.d.ts +74 -0
  97. package/dist/core/progress-tracker.d.ts.map +1 -0
  98. package/dist/core/progress-tracker.js +198 -0
  99. package/dist/core/progress-tracker.js.map +1 -0
  100. package/dist/core/prompt-examples.d.ts +52 -0
  101. package/dist/core/prompt-examples.d.ts.map +1 -0
  102. package/dist/core/prompt-examples.js +194 -0
  103. package/dist/core/prompt-examples.js.map +1 -0
  104. package/dist/core/response-parser.d.ts +90 -0
  105. package/dist/core/response-parser.d.ts.map +1 -0
  106. package/dist/core/response-parser.js +209 -0
  107. package/dist/core/response-parser.js.map +1 -0
  108. package/dist/core/verification-hooks.d.ts +103 -0
  109. package/dist/core/verification-hooks.d.ts.map +1 -0
  110. package/dist/core/verification-hooks.js +268 -0
  111. package/dist/core/verification-hooks.js.map +1 -0
  112. package/dist/index.d.ts +13 -0
  113. package/dist/index.d.ts.map +1 -0
  114. package/dist/index.js +17 -0
  115. package/dist/index.js.map +1 -0
  116. package/dist/integrations/auth.d.ts +28 -0
  117. package/dist/integrations/auth.d.ts.map +1 -0
  118. package/dist/integrations/auth.js +76 -0
  119. package/dist/integrations/auth.js.map +1 -0
  120. package/dist/integrations/copilot-agent.d.ts +104 -0
  121. package/dist/integrations/copilot-agent.d.ts.map +1 -0
  122. package/dist/integrations/copilot-agent.js +235 -0
  123. package/dist/integrations/copilot-agent.js.map +1 -0
  124. package/dist/integrations/index.d.ts +18 -0
  125. package/dist/integrations/index.d.ts.map +1 -0
  126. package/dist/integrations/index.js +14 -0
  127. package/dist/integrations/index.js.map +1 -0
  128. package/dist/integrations/mcp-tools.d.ts +129 -0
  129. package/dist/integrations/mcp-tools.d.ts.map +1 -0
  130. package/dist/integrations/mcp-tools.js +272 -0
  131. package/dist/integrations/mcp-tools.js.map +1 -0
  132. package/dist/integrations/tokens.d.ts +45 -0
  133. package/dist/integrations/tokens.d.ts.map +1 -0
  134. package/dist/integrations/tokens.js +50 -0
  135. package/dist/integrations/tokens.js.map +1 -0
  136. package/dist/types/index.d.ts +53 -0
  137. package/dist/types/index.d.ts.map +1 -0
  138. package/dist/types/index.js +7 -0
  139. package/dist/types/index.js.map +1 -0
  140. package/dist/utils/index.d.ts +23 -0
  141. package/dist/utils/index.d.ts.map +1 -0
  142. package/dist/utils/index.js +37 -0
  143. package/dist/utils/index.js.map +1 -0
  144. package/dist/utils/output.d.ts +59 -0
  145. package/dist/utils/output.d.ts.map +1 -0
  146. package/dist/utils/output.js +96 -0
  147. package/dist/utils/output.js.map +1 -0
  148. package/dist/utils/paths.d.ts +34 -0
  149. package/dist/utils/paths.d.ts.map +1 -0
  150. package/dist/utils/paths.js +67 -0
  151. package/dist/utils/paths.js.map +1 -0
  152. package/dist/utils/shell.d.ts +26 -0
  153. package/dist/utils/shell.d.ts.map +1 -0
  154. package/dist/utils/shell.js +65 -0
  155. package/dist/utils/shell.js.map +1 -0
  156. package/dist/utils/validation.d.ts +27 -0
  157. package/dist/utils/validation.d.ts.map +1 -0
  158. package/dist/utils/validation.js +43 -0
  159. package/dist/utils/validation.js.map +1 -0
  160. package/package.json +86 -0
@@ -0,0 +1,62 @@
1
+ /**
2
+ * Configuration Manager
3
+ *
4
+ * Handles loading, saving, and merging configuration from multiple sources
5
+ */
6
+ import { DEFAULT_CONFIG, isValidConfigKey, validateConfigValue, parseConfigValue, type RalphConfiguration, type ConfigKey } from './config-schema.js';
7
+ /**
8
+ * Get the global configuration file path
9
+ */
10
+ export declare function getGlobalConfigPath(): string;
11
+ /**
12
+ * Get the local configuration file path
13
+ */
14
+ export declare function getLocalConfigPath(projectRoot?: string): string;
15
+ /**
16
+ * Configuration manager class
17
+ */
18
+ export declare class ConfigManager {
19
+ private config;
20
+ private projectRoot;
21
+ constructor(projectRoot?: string);
22
+ /**
23
+ * Load configuration from all sources
24
+ * Priority: CLI flags > Env vars > Local config > Global config > Defaults
25
+ */
26
+ load(cliOverrides?: Partial<RalphConfiguration>): Promise<RalphConfiguration>;
27
+ /**
28
+ * Get the current configuration
29
+ */
30
+ getConfig(): RalphConfiguration;
31
+ /**
32
+ * Get a specific configuration value
33
+ */
34
+ get<K extends ConfigKey>(key: K): RalphConfiguration[K];
35
+ /**
36
+ * Set a configuration value (in memory)
37
+ */
38
+ set<K extends ConfigKey>(key: K, value: RalphConfiguration[K]): void;
39
+ /**
40
+ * Save configuration to local config file
41
+ */
42
+ saveLocal(): Promise<void>;
43
+ /**
44
+ * Save configuration to global config file
45
+ */
46
+ saveGlobal(): Promise<void>;
47
+ /**
48
+ * Reset configuration to defaults
49
+ */
50
+ reset(): void;
51
+ /**
52
+ * Check if local configuration exists
53
+ */
54
+ hasLocalConfig(): Promise<boolean>;
55
+ /**
56
+ * Initialize local configuration directory
57
+ */
58
+ initLocal(): Promise<string>;
59
+ }
60
+ export { isValidConfigKey, validateConfigValue, parseConfigValue, DEFAULT_CONFIG };
61
+ export type { RalphConfiguration, ConfigKey };
62
+ //# sourceMappingURL=config-manager.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"config-manager.d.ts","sourceRoot":"","sources":["../../src/core/config-manager.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAMH,OAAO,EACL,cAAc,EACd,gBAAgB,EAChB,mBAAmB,EACnB,gBAAgB,EAChB,KAAK,kBAAkB,EACvB,KAAK,SAAS,EACf,MAAM,oBAAoB,CAAC;AAoE5B;;GAEG;AACH,wBAAgB,mBAAmB,IAAI,MAAM,CAE5C;AAED;;GAEG;AACH,wBAAgB,kBAAkB,CAAC,WAAW,CAAC,EAAE,MAAM,GAAG,MAAM,CAE/D;AAED;;GAEG;AACH,qBAAa,aAAa;IACxB,OAAO,CAAC,MAAM,CAAqB;IACnC,OAAO,CAAC,WAAW,CAAqB;gBAE5B,WAAW,CAAC,EAAE,MAAM;IAKhC;;;OAGG;IACG,IAAI,CAAC,YAAY,CAAC,EAAE,OAAO,CAAC,kBAAkB,CAAC,GAAG,OAAO,CAAC,kBAAkB,CAAC;IA6BnF;;OAEG;IACH,SAAS,IAAI,kBAAkB;IAI/B;;OAEG;IACH,GAAG,CAAC,CAAC,SAAS,SAAS,EAAE,GAAG,EAAE,CAAC,GAAG,kBAAkB,CAAC,CAAC,CAAC;IAIvD;;OAEG;IACH,GAAG,CAAC,CAAC,SAAS,SAAS,EAAE,GAAG,EAAE,CAAC,EAAE,KAAK,EAAE,kBAAkB,CAAC,CAAC,CAAC,GAAG,IAAI;IAQpE;;OAEG;IACG,SAAS,IAAI,OAAO,CAAC,IAAI,CAAC;IAMhC;;OAEG;IACG,UAAU,IAAI,OAAO,CAAC,IAAI,CAAC;IAMjC;;OAEG;IACH,KAAK,IAAI,IAAI;IAIb;;OAEG;IACG,cAAc,IAAI,OAAO,CAAC,OAAO,CAAC;IASxC;;OAEG;IACG,SAAS,IAAI,OAAO,CAAC,MAAM,CAAC;CAMnC;AAGD,OAAO,EAAE,gBAAgB,EAAE,mBAAmB,EAAE,gBAAgB,EAAE,cAAc,EAAE,CAAC;AACnF,YAAY,EAAE,kBAAkB,EAAE,SAAS,EAAE,CAAC"}
@@ -0,0 +1,184 @@
1
+ /**
2
+ * Configuration Manager
3
+ *
4
+ * Handles loading, saving, and merging configuration from multiple sources
5
+ */
6
+ import fs from 'node:fs/promises';
7
+ import path from 'node:path';
8
+ import { getConfigDir, getLocalStateDir } from '../utils/paths.js';
9
+ import { debug } from '../utils/output.js';
10
+ import { DEFAULT_CONFIG, isValidConfigKey, validateConfigValue, parseConfigValue, } from './config-schema.js';
11
+ /**
12
+ * Configuration file names
13
+ */
14
+ const GLOBAL_CONFIG_FILE = 'config.json';
15
+ const LOCAL_CONFIG_FILE = 'config.json';
16
+ /**
17
+ * Environment variable prefix
18
+ */
19
+ const ENV_PREFIX = 'GHCRALPH_';
20
+ /**
21
+ * Load configuration from a JSON file
22
+ */
23
+ async function loadConfigFile(filePath) {
24
+ try {
25
+ const content = await fs.readFile(filePath, 'utf-8');
26
+ return JSON.parse(content);
27
+ }
28
+ catch {
29
+ return {};
30
+ }
31
+ }
32
+ /**
33
+ * Save configuration to a JSON file
34
+ */
35
+ async function saveConfigFile(filePath, config) {
36
+ const dir = path.dirname(filePath);
37
+ await fs.mkdir(dir, { recursive: true });
38
+ await fs.writeFile(filePath, JSON.stringify(config, null, 2) + '\n');
39
+ }
40
+ /**
41
+ * Load configuration from environment variables
42
+ */
43
+ function loadEnvConfig() {
44
+ const config = {};
45
+ const envMappings = {
46
+ [`${ENV_PREFIX}PLAN_SOURCE`]: 'planSource',
47
+ [`${ENV_PREFIX}MAX_ITERATIONS`]: 'maxIterations',
48
+ [`${ENV_PREFIX}MAX_TOKENS`]: 'maxTokens',
49
+ [`${ENV_PREFIX}DEFAULT_MODEL`]: 'defaultModel',
50
+ [`${ENV_PREFIX}AUTO_COMMIT`]: 'autoCommit',
51
+ [`${ENV_PREFIX}BRANCH_PREFIX`]: 'branchPrefix',
52
+ [`${ENV_PREFIX}GITHUB_REPO`]: 'githubRepo',
53
+ [`${ENV_PREFIX}LOCAL_PLAN_FILE`]: 'localPlanFile',
54
+ };
55
+ for (const [envVar, configKey] of Object.entries(envMappings)) {
56
+ const value = process.env[envVar];
57
+ if (value !== undefined) {
58
+ const parsed = parseConfigValue(configKey, value);
59
+ const validation = validateConfigValue(configKey, parsed);
60
+ if (validation.valid) {
61
+ config[configKey] = parsed;
62
+ }
63
+ }
64
+ }
65
+ return config;
66
+ }
67
+ /**
68
+ * Get the global configuration file path
69
+ */
70
+ export function getGlobalConfigPath() {
71
+ return path.join(getConfigDir(), GLOBAL_CONFIG_FILE);
72
+ }
73
+ /**
74
+ * Get the local configuration file path
75
+ */
76
+ export function getLocalConfigPath(projectRoot) {
77
+ return path.join(getLocalStateDir(projectRoot), LOCAL_CONFIG_FILE);
78
+ }
79
+ /**
80
+ * Configuration manager class
81
+ */
82
+ export class ConfigManager {
83
+ config;
84
+ projectRoot;
85
+ constructor(projectRoot) {
86
+ this.config = { ...DEFAULT_CONFIG };
87
+ this.projectRoot = projectRoot;
88
+ }
89
+ /**
90
+ * Load configuration from all sources
91
+ * Priority: CLI flags > Env vars > Local config > Global config > Defaults
92
+ */
93
+ async load(cliOverrides) {
94
+ // Start with defaults
95
+ this.config = { ...DEFAULT_CONFIG };
96
+ // Load global config
97
+ const globalConfigPath = getGlobalConfigPath();
98
+ const globalConfig = await loadConfigFile(globalConfigPath);
99
+ debug(`Loaded global config from ${globalConfigPath}`);
100
+ // Load local config
101
+ const localConfigPath = getLocalConfigPath(this.projectRoot);
102
+ const localConfig = await loadConfigFile(localConfigPath);
103
+ debug(`Loaded local config from ${localConfigPath}`);
104
+ // Load env config
105
+ const envConfig = loadEnvConfig();
106
+ // Merge in priority order
107
+ this.config = {
108
+ ...this.config,
109
+ ...globalConfig,
110
+ ...localConfig,
111
+ ...envConfig,
112
+ ...cliOverrides,
113
+ };
114
+ return this.config;
115
+ }
116
+ /**
117
+ * Get the current configuration
118
+ */
119
+ getConfig() {
120
+ return { ...this.config };
121
+ }
122
+ /**
123
+ * Get a specific configuration value
124
+ */
125
+ get(key) {
126
+ return this.config[key];
127
+ }
128
+ /**
129
+ * Set a configuration value (in memory)
130
+ */
131
+ set(key, value) {
132
+ const validation = validateConfigValue(key, value);
133
+ if (!validation.valid) {
134
+ throw new Error(validation.error);
135
+ }
136
+ this.config[key] = value;
137
+ }
138
+ /**
139
+ * Save configuration to local config file
140
+ */
141
+ async saveLocal() {
142
+ const configPath = getLocalConfigPath(this.projectRoot);
143
+ await saveConfigFile(configPath, this.config);
144
+ debug(`Saved local config to ${configPath}`);
145
+ }
146
+ /**
147
+ * Save configuration to global config file
148
+ */
149
+ async saveGlobal() {
150
+ const configPath = getGlobalConfigPath();
151
+ await saveConfigFile(configPath, this.config);
152
+ debug(`Saved global config to ${configPath}`);
153
+ }
154
+ /**
155
+ * Reset configuration to defaults
156
+ */
157
+ reset() {
158
+ this.config = { ...DEFAULT_CONFIG };
159
+ }
160
+ /**
161
+ * Check if local configuration exists
162
+ */
163
+ async hasLocalConfig() {
164
+ try {
165
+ await fs.access(getLocalConfigPath(this.projectRoot));
166
+ return true;
167
+ }
168
+ catch {
169
+ return false;
170
+ }
171
+ }
172
+ /**
173
+ * Initialize local configuration directory
174
+ */
175
+ async initLocal() {
176
+ const stateDir = getLocalStateDir(this.projectRoot);
177
+ await fs.mkdir(stateDir, { recursive: true });
178
+ await this.saveLocal();
179
+ return stateDir;
180
+ }
181
+ }
182
+ // Export for convenience
183
+ export { isValidConfigKey, validateConfigValue, parseConfigValue, DEFAULT_CONFIG };
184
+ //# sourceMappingURL=config-manager.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"config-manager.js","sourceRoot":"","sources":["../../src/core/config-manager.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,74 @@
1
+ /**
2
+ * Configuration Schema
3
+ *
4
+ * Type definitions for GitHub Copilot Ralph CLI configuration
5
+ */
6
+ /**
7
+ * Plan source type
8
+ */
9
+ export type PlanSource = 'github' | 'local';
10
+ /**
11
+ * MCP Server configuration for custom tools
12
+ */
13
+ export interface MCPServerConfiguration {
14
+ /** Name of the MCP server */
15
+ name: string;
16
+ /** Command to run the server */
17
+ command: string;
18
+ /** Arguments to pass to the command */
19
+ args?: string[];
20
+ /** Transport type (stdio or http) */
21
+ transport?: 'stdio' | 'http';
22
+ /** HTTP endpoint (for http transport) */
23
+ endpoint?: string;
24
+ }
25
+ /**
26
+ * GitHub Copilot Ralph CLI configuration
27
+ */
28
+ export interface RalphConfiguration {
29
+ /** Source for the plan: GitHub Issues or local Markdown */
30
+ planSource: PlanSource;
31
+ /** Maximum number of loop iterations */
32
+ maxIterations: number;
33
+ /** Maximum token budget for the session */
34
+ maxTokens: number;
35
+ /** Default Copilot model to use (gpt-4.1 has 0x multiplier) */
36
+ defaultModel: string;
37
+ /** Whether to auto-commit after each iteration */
38
+ autoCommit: boolean;
39
+ /** Prefix for GitHub Copilot Ralph branches */
40
+ branchPrefix: string;
41
+ /** GitHub repository (owner/repo) for GitHub plan source */
42
+ githubRepo?: string;
43
+ /** Local plan file path for local plan source */
44
+ localPlanFile?: string;
45
+ /** Custom prompt template */
46
+ promptTemplate?: string;
47
+ /** MCP servers for custom tools */
48
+ mcpServers?: MCPServerConfiguration[];
49
+ }
50
+ /**
51
+ * Default configuration values
52
+ */
53
+ export declare const DEFAULT_CONFIG: RalphConfiguration;
54
+ /**
55
+ * Configuration keys for validation
56
+ */
57
+ export declare const CONFIG_KEYS: readonly ["planSource", "maxIterations", "maxTokens", "defaultModel", "autoCommit", "branchPrefix", "githubRepo", "localPlanFile", "promptTemplate", "mcpServers"];
58
+ export type ConfigKey = (typeof CONFIG_KEYS)[number];
59
+ /**
60
+ * Check if a string is a valid config key
61
+ */
62
+ export declare function isValidConfigKey(key: string): key is ConfigKey;
63
+ /**
64
+ * Validate a configuration value for a key
65
+ */
66
+ export declare function validateConfigValue(key: ConfigKey, value: unknown): {
67
+ valid: boolean;
68
+ error?: string;
69
+ };
70
+ /**
71
+ * Parse a string value to the appropriate type for a config key
72
+ */
73
+ export declare function parseConfigValue(key: ConfigKey, value: string): unknown;
74
+ //# sourceMappingURL=config-schema.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"config-schema.d.ts","sourceRoot":"","sources":["../../src/core/config-schema.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH;;GAEG;AACH,MAAM,MAAM,UAAU,GAAG,QAAQ,GAAG,OAAO,CAAC;AAE5C;;GAEG;AACH,MAAM,WAAW,sBAAsB;IACrC,6BAA6B;IAC7B,IAAI,EAAE,MAAM,CAAC;IACb,gCAAgC;IAChC,OAAO,EAAE,MAAM,CAAC;IAChB,uCAAuC;IACvC,IAAI,CAAC,EAAE,MAAM,EAAE,CAAC;IAChB,qCAAqC;IACrC,SAAS,CAAC,EAAE,OAAO,GAAG,MAAM,CAAC;IAC7B,yCAAyC;IACzC,QAAQ,CAAC,EAAE,MAAM,CAAC;CACnB;AAED;;GAEG;AACH,MAAM,WAAW,kBAAkB;IACjC,2DAA2D;IAC3D,UAAU,EAAE,UAAU,CAAC;IACvB,wCAAwC;IACxC,aAAa,EAAE,MAAM,CAAC;IACtB,2CAA2C;IAC3C,SAAS,EAAE,MAAM,CAAC;IAClB,+DAA+D;IAC/D,YAAY,EAAE,MAAM,CAAC;IACrB,kDAAkD;IAClD,UAAU,EAAE,OAAO,CAAC;IACpB,+CAA+C;IAC/C,YAAY,EAAE,MAAM,CAAC;IACrB,4DAA4D;IAC5D,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,iDAAiD;IACjD,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,6BAA6B;IAC7B,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,mCAAmC;IACnC,UAAU,CAAC,EAAE,sBAAsB,EAAE,CAAC;CACvC;AAED;;GAEG;AACH,eAAO,MAAM,cAAc,EAAE,kBAO5B,CAAC;AAEF;;GAEG;AACH,eAAO,MAAM,WAAW,oKAWd,CAAC;AAEX,MAAM,MAAM,SAAS,GAAG,CAAC,OAAO,WAAW,CAAC,CAAC,MAAM,CAAC,CAAC;AAErD;;GAEG;AACH,wBAAgB,gBAAgB,CAAC,GAAG,EAAE,MAAM,GAAG,GAAG,IAAI,SAAS,CAE9D;AAED;;GAEG;AACH,wBAAgB,mBAAmB,CACjC,GAAG,EAAE,SAAS,EACd,KAAK,EAAE,OAAO,GACb;IAAE,KAAK,EAAE,OAAO,CAAC;IAAC,KAAK,CAAC,EAAE,MAAM,CAAA;CAAE,CA4BpC;AAED;;GAEG;AACH,wBAAgB,gBAAgB,CAAC,GAAG,EAAE,SAAS,EAAE,KAAK,EAAE,MAAM,GAAG,OAAO,CAUvE"}
@@ -0,0 +1,84 @@
1
+ /**
2
+ * Configuration Schema
3
+ *
4
+ * Type definitions for GitHub Copilot Ralph CLI configuration
5
+ */
6
+ /**
7
+ * Default configuration values
8
+ */
9
+ export const DEFAULT_CONFIG = {
10
+ planSource: 'local',
11
+ maxIterations: 10,
12
+ maxTokens: 100000,
13
+ defaultModel: 'gpt-4.1',
14
+ autoCommit: true,
15
+ branchPrefix: 'ghcralph/',
16
+ };
17
+ /**
18
+ * Configuration keys for validation
19
+ */
20
+ export const CONFIG_KEYS = [
21
+ 'planSource',
22
+ 'maxIterations',
23
+ 'maxTokens',
24
+ 'defaultModel',
25
+ 'autoCommit',
26
+ 'branchPrefix',
27
+ 'githubRepo',
28
+ 'localPlanFile',
29
+ 'promptTemplate',
30
+ 'mcpServers',
31
+ ];
32
+ /**
33
+ * Check if a string is a valid config key
34
+ */
35
+ export function isValidConfigKey(key) {
36
+ return CONFIG_KEYS.includes(key);
37
+ }
38
+ /**
39
+ * Validate a configuration value for a key
40
+ */
41
+ export function validateConfigValue(key, value) {
42
+ switch (key) {
43
+ case 'planSource':
44
+ if (value !== 'github' && value !== 'local') {
45
+ return { valid: false, error: 'planSource must be "github" or "local"' };
46
+ }
47
+ break;
48
+ case 'maxIterations':
49
+ case 'maxTokens':
50
+ if (typeof value !== 'number' || value < 1) {
51
+ return { valid: false, error: `${key} must be a positive number` };
52
+ }
53
+ break;
54
+ case 'autoCommit':
55
+ if (typeof value !== 'boolean') {
56
+ return { valid: false, error: 'autoCommit must be a boolean' };
57
+ }
58
+ break;
59
+ case 'defaultModel':
60
+ case 'branchPrefix':
61
+ case 'githubRepo':
62
+ case 'localPlanFile':
63
+ if (typeof value !== 'string') {
64
+ return { valid: false, error: `${key} must be a string` };
65
+ }
66
+ break;
67
+ }
68
+ return { valid: true };
69
+ }
70
+ /**
71
+ * Parse a string value to the appropriate type for a config key
72
+ */
73
+ export function parseConfigValue(key, value) {
74
+ switch (key) {
75
+ case 'maxIterations':
76
+ case 'maxTokens':
77
+ return parseInt(value, 10);
78
+ case 'autoCommit':
79
+ return value.toLowerCase() === 'true';
80
+ default:
81
+ return value;
82
+ }
83
+ }
84
+ //# sourceMappingURL=config-schema.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"config-schema.js","sourceRoot":"","sources":["../../src/core/config-schema.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAiDH;;GAEG;AACH,MAAM,CAAC,MAAM,cAAc,GAAuB;IAChD,UAAU,EAAE,OAAO;IACnB,aAAa,EAAE,EAAE;IACjB,SAAS,EAAE,MAAM;IACjB,YAAY,EAAE,SAAS;IACvB,UAAU,EAAE,IAAI;IAChB,YAAY,EAAE,WAAW;CAC1B,CAAC;AAEF;;GAEG;AACH,MAAM,CAAC,MAAM,WAAW,GAAG;IACzB,YAAY;IACZ,eAAe;IACf,WAAW;IACX,cAAc;IACd,YAAY;IACZ,cAAc;IACd,YAAY;IACZ,eAAe;IACf,gBAAgB;IAChB,YAAY;CACJ,CAAC;AAIX;;GAEG;AACH,MAAM,UAAU,gBAAgB,CAAC,GAAW;IAC1C,OAAO,WAAW,CAAC,QAAQ,CAAC,GAAgB,CAAC,CAAC;AAChD,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,mBAAmB,CACjC,GAAc,EACd,KAAc;IAEd,QAAQ,GAAG,EAAE,CAAC;QACZ,KAAK,YAAY;YACf,IAAI,KAAK,KAAK,QAAQ,IAAI,KAAK,KAAK,OAAO,EAAE,CAAC;gBAC5C,OAAO,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,wCAAwC,EAAE,CAAC;YAC3E,CAAC;YACD,MAAM;QACR,KAAK,eAAe,CAAC;QACrB,KAAK,WAAW;YACd,IAAI,OAAO,KAAK,KAAK,QAAQ,IAAI,KAAK,GAAG,CAAC,EAAE,CAAC;gBAC3C,OAAO,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,GAAG,GAAG,4BAA4B,EAAE,CAAC;YACrE,CAAC;YACD,MAAM;QACR,KAAK,YAAY;YACf,IAAI,OAAO,KAAK,KAAK,SAAS,EAAE,CAAC;gBAC/B,OAAO,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,8BAA8B,EAAE,CAAC;YACjE,CAAC;YACD,MAAM;QACR,KAAK,cAAc,CAAC;QACpB,KAAK,cAAc,CAAC;QACpB,KAAK,YAAY,CAAC;QAClB,KAAK,eAAe;YAClB,IAAI,OAAO,KAAK,KAAK,QAAQ,EAAE,CAAC;gBAC9B,OAAO,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,GAAG,GAAG,mBAAmB,EAAE,CAAC;YAC5D,CAAC;YACD,MAAM;IACV,CAAC;IACD,OAAO,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC;AACzB,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,gBAAgB,CAAC,GAAc,EAAE,KAAa;IAC5D,QAAQ,GAAG,EAAE,CAAC;QACZ,KAAK,eAAe,CAAC;QACrB,KAAK,WAAW;YACd,OAAO,QAAQ,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC;QAC7B,KAAK,YAAY;YACf,OAAO,KAAK,CAAC,WAAW,EAAE,KAAK,MAAM,CAAC;QACxC;YACE,OAAO,KAAK,CAAC;IACjB,CAAC;AACH,CAAC"}
@@ -0,0 +1,116 @@
1
+ /**
2
+ * Context Builder
3
+ *
4
+ * Builds rich context for AI agent prompts including relevant files,
5
+ * git history, and previous iteration results.
6
+ */
7
+ import type { Task } from '../types/index.js';
8
+ import type { IterationRecord } from './loop-state.js';
9
+ /**
10
+ * Context builder configuration
11
+ */
12
+ export interface ContextBuilderConfig {
13
+ /** Maximum tokens to allow for context */
14
+ maxContextTokens: number;
15
+ /** Glob patterns for explicit context files */
16
+ contextGlobs?: string[];
17
+ /** Custom prompt template */
18
+ promptTemplate?: string;
19
+ /** Whether to include git diff in context */
20
+ includeGitDiff?: boolean;
21
+ /** Whether to include git history in context */
22
+ includeGitHistory?: boolean;
23
+ /** Number of git history entries to include */
24
+ gitHistoryLimit?: number;
25
+ /** Whether to include project structure */
26
+ includeProjectStructure?: boolean;
27
+ /**
28
+ * Fresh context per iteration (Ralph pattern core principle)
29
+ * When true, previous iteration summaries are NOT included.
30
+ * The AI should rely on filesystem state (git diff) instead.
31
+ */
32
+ freshContextPerIteration?: boolean;
33
+ /**
34
+ * Whether to include meta info like iteration counts in prompt.
35
+ * Default: false (Ralph pattern recommendation)
36
+ * Set to true for legacy behavior with iteration/token counts
37
+ */
38
+ includeMetaInfo?: boolean;
39
+ /**
40
+ * Model name for prompt customization.
41
+ * Used to determine how many examples to include.
42
+ * Weaker models get more detailed examples.
43
+ * Default: 'gpt-4.1'
44
+ */
45
+ model?: string;
46
+ }
47
+ /**
48
+ * Built context result
49
+ */
50
+ export interface BuiltContext {
51
+ /** The complete prompt */
52
+ prompt: string;
53
+ /** Estimated token count */
54
+ estimatedTokens: number;
55
+ /** Files included in context */
56
+ filesIncluded: string[];
57
+ /** Whether context was truncated due to limits */
58
+ truncated: boolean;
59
+ }
60
+ /**
61
+ * Context builder for creating rich AI prompts
62
+ */
63
+ export declare class ContextBuilder {
64
+ private config;
65
+ private cwd;
66
+ constructor(config?: Partial<ContextBuilderConfig>, cwd?: string);
67
+ /**
68
+ * Build a complete context prompt for the current iteration
69
+ */
70
+ buildContext(task: Task, iteration: number, maxIterations: number, tokensUsed: number, maxTokens: number, previousIterations?: IterationRecord[], feedbackSection?: string): Promise<BuiltContext>;
71
+ /**
72
+ * Get explicit context files from glob patterns
73
+ */
74
+ private getExplicitContextFiles;
75
+ /**
76
+ * Find relevant files based on task keywords
77
+ */
78
+ private findRelevantFiles;
79
+ /**
80
+ * Extract keywords from text
81
+ */
82
+ private extractKeywords;
83
+ /**
84
+ * Get current git diff
85
+ */
86
+ private getGitDiff;
87
+ /**
88
+ * Get recent git history
89
+ */
90
+ private getGitHistory;
91
+ /**
92
+ * Get project structure overview
93
+ */
94
+ private getProjectStructure;
95
+ /**
96
+ * Build previous progress section
97
+ */
98
+ private buildPreviousProgress;
99
+ /**
100
+ * Check if adding content would exceed token limit
101
+ */
102
+ private exceedsTokenLimit;
103
+ /**
104
+ * Estimate token count (rough approximation: ~4 chars per token)
105
+ */
106
+ private estimateTokens;
107
+ /**
108
+ * Truncate prompt to fit within limits
109
+ */
110
+ private truncatePrompt;
111
+ }
112
+ /**
113
+ * Create a context builder with custom configuration
114
+ */
115
+ export declare function createContextBuilder(config?: Partial<ContextBuilderConfig>, cwd?: string): ContextBuilder;
116
+ //# sourceMappingURL=context-builder.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"context-builder.d.ts","sourceRoot":"","sources":["../../src/core/context-builder.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAQH,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,mBAAmB,CAAC;AAC9C,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,iBAAiB,CAAC;AA+CvD;;GAEG;AACH,MAAM,WAAW,oBAAoB;IACnC,0CAA0C;IAC1C,gBAAgB,EAAE,MAAM,CAAC;IACzB,+CAA+C;IAC/C,YAAY,CAAC,EAAE,MAAM,EAAE,CAAC;IACxB,6BAA6B;IAC7B,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,6CAA6C;IAC7C,cAAc,CAAC,EAAE,OAAO,CAAC;IACzB,gDAAgD;IAChD,iBAAiB,CAAC,EAAE,OAAO,CAAC;IAC5B,+CAA+C;IAC/C,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB,2CAA2C;IAC3C,uBAAuB,CAAC,EAAE,OAAO,CAAC;IAClC;;;;OAIG;IACH,wBAAwB,CAAC,EAAE,OAAO,CAAC;IACnC;;;;OAIG;IACH,eAAe,CAAC,EAAE,OAAO,CAAC;IAC1B;;;;;OAKG;IACH,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB;AAgBD;;GAEG;AACH,MAAM,WAAW,YAAY;IAC3B,0BAA0B;IAC1B,MAAM,EAAE,MAAM,CAAC;IACf,4BAA4B;IAC5B,eAAe,EAAE,MAAM,CAAC;IACxB,gCAAgC;IAChC,aAAa,EAAE,MAAM,EAAE,CAAC;IACxB,kDAAkD;IAClD,SAAS,EAAE,OAAO,CAAC;CACpB;AAED;;GAEG;AACH,qBAAa,cAAc;IACzB,OAAO,CAAC,MAAM,CAAuB;IACrC,OAAO,CAAC,GAAG,CAAS;gBAER,MAAM,GAAE,OAAO,CAAC,oBAAoB,CAAM,EAAE,GAAG,CAAC,EAAE,MAAM;IAKpE;;OAEG;IACG,YAAY,CAChB,IAAI,EAAE,IAAI,EACV,SAAS,EAAE,MAAM,EACjB,aAAa,EAAE,MAAM,EACrB,UAAU,EAAE,MAAM,EAClB,SAAS,EAAE,MAAM,EACjB,kBAAkB,GAAE,eAAe,EAAO,EAC1C,eAAe,CAAC,EAAE,MAAM,GACvB,OAAO,CAAC,YAAY,CAAC;IAmHxB;;OAEG;YACW,uBAAuB;IAuCrC;;OAEG;YACW,iBAAiB;IA0D/B;;OAEG;IACH,OAAO,CAAC,eAAe;IAqBvB;;OAEG;YACW,UAAU;IAqBxB;;OAEG;YACW,aAAa;IAc3B;;OAEG;YACW,mBAAmB;IAcjC;;OAEG;IACH,OAAO,CAAC,qBAAqB;IAc7B;;OAEG;IACH,OAAO,CAAC,iBAAiB;IAKzB;;OAEG;IACH,OAAO,CAAC,cAAc;IAItB;;OAEG;IACH,OAAO,CAAC,cAAc;CAiBvB;AAED;;GAEG;AACH,wBAAgB,oBAAoB,CAClC,MAAM,CAAC,EAAE,OAAO,CAAC,oBAAoB,CAAC,EACtC,GAAG,CAAC,EAAE,MAAM,GACX,cAAc,CAEhB"}