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.
- package/LICENSE +21 -0
- package/README.md +327 -0
- package/bin/ghcralph.js +2 -0
- package/dist/cli.d.ts +12 -0
- package/dist/cli.d.ts.map +1 -0
- package/dist/cli.js +92 -0
- package/dist/cli.js.map +1 -0
- package/dist/commands/config.d.ts +8 -0
- package/dist/commands/config.d.ts.map +1 -0
- package/dist/commands/config.js +118 -0
- package/dist/commands/config.js.map +1 -0
- package/dist/commands/index.d.ts +11 -0
- package/dist/commands/index.d.ts.map +1 -0
- package/dist/commands/index.js +11 -0
- package/dist/commands/index.js.map +1 -0
- package/dist/commands/init.d.ts +15 -0
- package/dist/commands/init.d.ts.map +1 -0
- package/dist/commands/init.js +116 -0
- package/dist/commands/init.js.map +1 -0
- package/dist/commands/rollback.d.ts +8 -0
- package/dist/commands/rollback.d.ts.map +1 -0
- package/dist/commands/rollback.js +238 -0
- package/dist/commands/rollback.js.map +1 -0
- package/dist/commands/run.d.ts +28 -0
- package/dist/commands/run.d.ts.map +1 -0
- package/dist/commands/run.js +407 -0
- package/dist/commands/run.js.map +1 -0
- package/dist/commands/status.d.ts +8 -0
- package/dist/commands/status.d.ts.map +1 -0
- package/dist/commands/status.js +399 -0
- package/dist/commands/status.js.map +1 -0
- package/dist/core/action-executor.d.ts +96 -0
- package/dist/core/action-executor.d.ts.map +1 -0
- package/dist/core/action-executor.js +289 -0
- package/dist/core/action-executor.js.map +1 -0
- package/dist/core/checkpoint-manager.d.ts +94 -0
- package/dist/core/checkpoint-manager.d.ts.map +1 -0
- package/dist/core/checkpoint-manager.js +236 -0
- package/dist/core/checkpoint-manager.js.map +1 -0
- package/dist/core/config-manager.d.ts +62 -0
- package/dist/core/config-manager.d.ts.map +1 -0
- package/dist/core/config-manager.js +184 -0
- package/dist/core/config-manager.js.map +1 -0
- package/dist/core/config-schema.d.ts +74 -0
- package/dist/core/config-schema.d.ts.map +1 -0
- package/dist/core/config-schema.js +84 -0
- package/dist/core/config-schema.js.map +1 -0
- package/dist/core/context-builder.d.ts +116 -0
- package/dist/core/context-builder.d.ts.map +1 -0
- package/dist/core/context-builder.js +388 -0
- package/dist/core/context-builder.js.map +1 -0
- package/dist/core/feedback-builder.d.ts +94 -0
- package/dist/core/feedback-builder.d.ts.map +1 -0
- package/dist/core/feedback-builder.js +226 -0
- package/dist/core/feedback-builder.js.map +1 -0
- package/dist/core/file-safeguard.d.ts +109 -0
- package/dist/core/file-safeguard.d.ts.map +1 -0
- package/dist/core/file-safeguard.js +200 -0
- package/dist/core/file-safeguard.js.map +1 -0
- package/dist/core/git-branch-manager.d.ts +122 -0
- package/dist/core/git-branch-manager.d.ts.map +1 -0
- package/dist/core/git-branch-manager.js +302 -0
- package/dist/core/git-branch-manager.js.map +1 -0
- package/dist/core/github-plan.d.ts +86 -0
- package/dist/core/github-plan.d.ts.map +1 -0
- package/dist/core/github-plan.js +333 -0
- package/dist/core/github-plan.js.map +1 -0
- package/dist/core/index.d.ts +43 -0
- package/dist/core/index.d.ts.map +1 -0
- package/dist/core/index.js +26 -0
- package/dist/core/index.js.map +1 -0
- package/dist/core/local-markdown-plan.d.ts +65 -0
- package/dist/core/local-markdown-plan.d.ts.map +1 -0
- package/dist/core/local-markdown-plan.js +154 -0
- package/dist/core/local-markdown-plan.js.map +1 -0
- package/dist/core/loop-engine.d.ts +133 -0
- package/dist/core/loop-engine.d.ts.map +1 -0
- package/dist/core/loop-engine.js +420 -0
- package/dist/core/loop-engine.js.map +1 -0
- package/dist/core/loop-events.d.ts +48 -0
- package/dist/core/loop-events.d.ts.map +1 -0
- package/dist/core/loop-events.js +24 -0
- package/dist/core/loop-events.js.map +1 -0
- package/dist/core/loop-state.d.ts +51 -0
- package/dist/core/loop-state.d.ts.map +1 -0
- package/dist/core/loop-state.js +48 -0
- package/dist/core/loop-state.js.map +1 -0
- package/dist/core/markdown-parser.d.ts +51 -0
- package/dist/core/markdown-parser.d.ts.map +1 -0
- package/dist/core/markdown-parser.js +122 -0
- package/dist/core/markdown-parser.js.map +1 -0
- package/dist/core/plan-manager.d.ts +61 -0
- package/dist/core/plan-manager.d.ts.map +1 -0
- package/dist/core/plan-manager.js +7 -0
- package/dist/core/plan-manager.js.map +1 -0
- package/dist/core/progress-tracker.d.ts +74 -0
- package/dist/core/progress-tracker.d.ts.map +1 -0
- package/dist/core/progress-tracker.js +198 -0
- package/dist/core/progress-tracker.js.map +1 -0
- package/dist/core/prompt-examples.d.ts +52 -0
- package/dist/core/prompt-examples.d.ts.map +1 -0
- package/dist/core/prompt-examples.js +194 -0
- package/dist/core/prompt-examples.js.map +1 -0
- package/dist/core/response-parser.d.ts +90 -0
- package/dist/core/response-parser.d.ts.map +1 -0
- package/dist/core/response-parser.js +209 -0
- package/dist/core/response-parser.js.map +1 -0
- package/dist/core/verification-hooks.d.ts +103 -0
- package/dist/core/verification-hooks.d.ts.map +1 -0
- package/dist/core/verification-hooks.js +268 -0
- package/dist/core/verification-hooks.js.map +1 -0
- package/dist/index.d.ts +13 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +17 -0
- package/dist/index.js.map +1 -0
- package/dist/integrations/auth.d.ts +28 -0
- package/dist/integrations/auth.d.ts.map +1 -0
- package/dist/integrations/auth.js +76 -0
- package/dist/integrations/auth.js.map +1 -0
- package/dist/integrations/copilot-agent.d.ts +104 -0
- package/dist/integrations/copilot-agent.d.ts.map +1 -0
- package/dist/integrations/copilot-agent.js +235 -0
- package/dist/integrations/copilot-agent.js.map +1 -0
- package/dist/integrations/index.d.ts +18 -0
- package/dist/integrations/index.d.ts.map +1 -0
- package/dist/integrations/index.js +14 -0
- package/dist/integrations/index.js.map +1 -0
- package/dist/integrations/mcp-tools.d.ts +129 -0
- package/dist/integrations/mcp-tools.d.ts.map +1 -0
- package/dist/integrations/mcp-tools.js +272 -0
- package/dist/integrations/mcp-tools.js.map +1 -0
- package/dist/integrations/tokens.d.ts +45 -0
- package/dist/integrations/tokens.d.ts.map +1 -0
- package/dist/integrations/tokens.js +50 -0
- package/dist/integrations/tokens.js.map +1 -0
- package/dist/types/index.d.ts +53 -0
- package/dist/types/index.d.ts.map +1 -0
- package/dist/types/index.js +7 -0
- package/dist/types/index.js.map +1 -0
- package/dist/utils/index.d.ts +23 -0
- package/dist/utils/index.d.ts.map +1 -0
- package/dist/utils/index.js +37 -0
- package/dist/utils/index.js.map +1 -0
- package/dist/utils/output.d.ts +59 -0
- package/dist/utils/output.d.ts.map +1 -0
- package/dist/utils/output.js +96 -0
- package/dist/utils/output.js.map +1 -0
- package/dist/utils/paths.d.ts +34 -0
- package/dist/utils/paths.d.ts.map +1 -0
- package/dist/utils/paths.js +67 -0
- package/dist/utils/paths.js.map +1 -0
- package/dist/utils/shell.d.ts +26 -0
- package/dist/utils/shell.d.ts.map +1 -0
- package/dist/utils/shell.js +65 -0
- package/dist/utils/shell.js.map +1 -0
- package/dist/utils/validation.d.ts +27 -0
- package/dist/utils/validation.d.ts.map +1 -0
- package/dist/utils/validation.js +43 -0
- package/dist/utils/validation.js.map +1 -0
- 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"}
|