@gaunt-sloth/core 2.0.0-alpha.2 → 2.0.0-alpha.21
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/.gsloth.code.md +10 -0
- package/README.md +6 -6
- package/dist/config/defaults.d.ts +85 -0
- package/dist/config/defaults.js +103 -0
- package/dist/config/defaults.js.map +1 -0
- package/dist/config/jsonc.d.ts +12 -0
- package/dist/config/jsonc.js +41 -0
- package/dist/config/jsonc.js.map +1 -0
- package/dist/config/loader.d.ts +169 -0
- package/dist/config/loader.js +872 -0
- package/dist/config/loader.js.map +1 -0
- package/dist/config/schema.d.ts +673 -0
- package/dist/config/schema.js +524 -0
- package/dist/config/schema.js.map +1 -0
- package/dist/config/shell-policy.d.ts +331 -0
- package/dist/config/shell-policy.js +238 -0
- package/dist/config/shell-policy.js.map +1 -0
- package/dist/config/types.d.ts +596 -0
- package/dist/config/types.js +13 -0
- package/dist/config/types.js.map +1 -0
- package/dist/config.d.ts +18 -647
- package/dist/config.js +15 -516
- package/dist/config.js.map +1 -1
- package/dist/constants.d.ts +42 -0
- package/dist/constants.js +42 -0
- package/dist/constants.js.map +1 -1
- package/dist/core/GthAbstractAgent.d.ts +85 -2
- package/dist/core/GthAbstractAgent.js +398 -28
- package/dist/core/GthAbstractAgent.js.map +1 -1
- package/dist/core/GthAgentRunner.d.ts +158 -1
- package/dist/core/GthAgentRunner.js +367 -4
- package/dist/core/GthAgentRunner.js.map +1 -1
- package/dist/core/GthLangChainAgent.js +193 -16
- package/dist/core/GthLangChainAgent.js.map +1 -1
- package/dist/core/debugCapture.d.ts +59 -0
- package/dist/core/debugCapture.js +101 -0
- package/dist/core/debugCapture.js.map +1 -0
- package/dist/core/gthLeanAgentFactory.d.ts +9 -0
- package/dist/core/gthLeanAgentFactory.js +10 -0
- package/dist/core/gthLeanAgentFactory.js.map +1 -0
- package/dist/core/plainToolIndication.d.ts +15 -0
- package/dist/core/plainToolIndication.js +148 -0
- package/dist/core/plainToolIndication.js.map +1 -0
- package/dist/core/runStats.d.ts +41 -0
- package/dist/core/runStats.js +73 -0
- package/dist/core/runStats.js.map +1 -0
- package/dist/core/shell/ShellCommandFailedError.d.ts +54 -0
- package/dist/core/shell/ShellCommandFailedError.js +68 -0
- package/dist/core/shell/ShellCommandFailedError.js.map +1 -0
- package/dist/core/shell/allowlist.d.ts +75 -0
- package/dist/core/shell/allowlist.js +187 -0
- package/dist/core/shell/allowlist.js.map +1 -0
- package/dist/core/shell/arity.d.ts +75 -0
- package/dist/core/shell/arity.js +313 -0
- package/dist/core/shell/arity.js.map +1 -0
- package/dist/core/shell/judge.d.ts +161 -0
- package/dist/core/shell/judge.js +261 -0
- package/dist/core/shell/judge.js.map +1 -0
- package/dist/core/shell/normalize.d.ts +27 -0
- package/dist/core/shell/normalize.js +53 -0
- package/dist/core/shell/normalize.js.map +1 -0
- package/dist/core/toolDisplay.d.ts +101 -0
- package/dist/core/toolDisplay.js +374 -0
- package/dist/core/toolDisplay.js.map +1 -0
- package/dist/core/toolOutputChannel.d.ts +68 -0
- package/dist/core/toolOutputChannel.js +112 -0
- package/dist/core/toolOutputChannel.js.map +1 -0
- package/dist/core/types.d.ts +173 -0
- package/dist/core/types.js.map +1 -1
- package/dist/history/historyFormat.d.ts +28 -0
- package/dist/history/historyFormat.js +127 -0
- package/dist/history/historyFormat.js.map +1 -0
- package/dist/history/historyStore.d.ts +198 -0
- package/dist/history/historyStore.js +482 -0
- package/dist/history/historyStore.js.map +1 -0
- package/dist/history/recordSession.d.ts +37 -0
- package/dist/history/recordSession.js +56 -0
- package/dist/history/recordSession.js.map +1 -0
- package/dist/index.d.ts +4 -0
- package/dist/index.js +4 -0
- package/dist/index.js.map +1 -1
- package/dist/providers/anthropic.d.ts +1 -1
- package/dist/providers/anthropic.js +5 -10
- package/dist/providers/anthropic.js.map +1 -1
- package/dist/providers/deepseek.d.ts +1 -1
- package/dist/providers/deepseek.js +5 -10
- package/dist/providers/deepseek.js.map +1 -1
- package/dist/providers/geminiSchemaSanitizer.d.ts +52 -0
- package/dist/providers/geminiSchemaSanitizer.js +201 -0
- package/dist/providers/geminiSchemaSanitizer.js.map +1 -0
- package/dist/providers/google-genai.d.ts +1 -1
- package/dist/providers/google-genai.js +9 -11
- package/dist/providers/google-genai.js.map +1 -1
- package/dist/providers/groq.d.ts +1 -1
- package/dist/providers/groq.js +5 -10
- package/dist/providers/groq.js.map +1 -1
- package/dist/providers/huggingface.d.ts +25 -0
- package/dist/providers/huggingface.js +69 -0
- package/dist/providers/huggingface.js.map +1 -0
- package/dist/providers/modelCatalog.d.ts +109 -0
- package/dist/providers/modelCatalog.js +245 -0
- package/dist/providers/modelCatalog.js.map +1 -0
- package/dist/providers/modelDiscovery.d.ts +111 -3
- package/dist/providers/modelDiscovery.js +183 -27
- package/dist/providers/modelDiscovery.js.map +1 -1
- package/dist/providers/ollama.d.ts +19 -5
- package/dist/providers/ollama.js +60 -52
- package/dist/providers/ollama.js.map +1 -1
- package/dist/providers/openai.d.ts +1 -1
- package/dist/providers/openai.js +5 -10
- package/dist/providers/openai.js.map +1 -1
- package/dist/providers/openrouter.d.ts +1 -1
- package/dist/providers/openrouter.js +12 -12
- package/dist/providers/openrouter.js.map +1 -1
- package/dist/providers/vertexai.d.ts +1 -1
- package/dist/providers/vertexai.js +9 -11
- package/dist/providers/vertexai.js.map +1 -1
- package/dist/providers/xai.d.ts +1 -1
- package/dist/providers/xai.js +5 -10
- package/dist/providers/xai.js.map +1 -1
- package/dist/runtime/askStructured.d.ts +62 -0
- package/dist/runtime/askStructured.js +76 -0
- package/dist/runtime/askStructured.js.map +1 -0
- package/dist/runtime/conversation.d.ts +59 -0
- package/dist/runtime/conversation.js +137 -0
- package/dist/runtime/conversation.js.map +1 -0
- package/dist/runtime/singleShot.d.ts +24 -5
- package/dist/runtime/singleShot.js +56 -9
- package/dist/runtime/singleShot.js.map +1 -1
- package/dist/utils/aiignoreUtils.js.map +1 -1
- package/dist/utils/binaryOutputUtils.js.map +1 -1
- package/dist/utils/consoleUtils.d.ts +22 -0
- package/dist/utils/consoleUtils.js +45 -0
- package/dist/utils/consoleUtils.js.map +1 -1
- package/dist/utils/debugDump.d.ts +57 -0
- package/dist/utils/debugDump.js +236 -0
- package/dist/utils/debugDump.js.map +1 -0
- package/dist/utils/debugUtils.d.ts +13 -4
- package/dist/utils/debugUtils.js +36 -13
- package/dist/utils/debugUtils.js.map +1 -1
- package/dist/utils/fileUtils.d.ts +24 -2
- package/dist/utils/fileUtils.js +54 -12
- package/dist/utils/fileUtils.js.map +1 -1
- package/dist/utils/llmUtils.js.map +1 -1
- package/dist/utils/redactSecrets.d.ts +63 -0
- package/dist/utils/redactSecrets.js +238 -0
- package/dist/utils/redactSecrets.js.map +1 -0
- package/dist/utils/systemPromptNotes.d.ts +181 -0
- package/dist/utils/systemPromptNotes.js +298 -0
- package/dist/utils/systemPromptNotes.js.map +1 -0
- package/dist/utils/systemUtils.d.ts +32 -1
- package/dist/utils/systemUtils.js +50 -3
- package/dist/utils/systemUtils.js.map +1 -1
- package/dist/utils/toolMatching.d.ts +30 -0
- package/dist/utils/toolMatching.js +44 -0
- package/dist/utils/toolMatching.js.map +1 -0
- package/package.json +17 -8
- package/schema/gsloth-config.schema.json +2111 -0
package/dist/config.js
CHANGED
|
@@ -7,521 +7,20 @@
|
|
|
7
7
|
* Refer to {@link DEFAULT_CONFIG} for default configuration.
|
|
8
8
|
*
|
|
9
9
|
* Some config params can be overriden from command line, see {@link CommandLineConfigOverrides}
|
|
10
|
-
*/
|
|
11
|
-
import { PROJECT_GUIDELINES, PROJECT_REVIEW_INSTRUCTIONS, USER_PROJECT_CONFIG_JS, USER_PROJECT_CONFIG_JSON, USER_PROJECT_CONFIG_MJS, } from '#src/constants.js';
|
|
12
|
-
import { StatusLevel } from '#src/core/types.js';
|
|
13
|
-
import { displayDebug, displayError, displayInfo, displayWarning, setConsoleLevel, } from '#src/utils/consoleUtils.js';
|
|
14
|
-
import { getGslothConfigReadPath, importExternalFile } from '#src/utils/fileUtils.js';
|
|
15
|
-
import { getGlobalGslothConfigReadPath } from '#src/utils/globalConfigUtils.js';
|
|
16
|
-
import { error, exit, isTTY, setUseColour } from '#src/utils/systemUtils.js';
|
|
17
|
-
import { existsSync, readFileSync } from 'node:fs';
|
|
18
|
-
export const availableDefaultConfigs = [
|
|
19
|
-
'vertexai',
|
|
20
|
-
'anthropic',
|
|
21
|
-
'groq',
|
|
22
|
-
'deepseek',
|
|
23
|
-
'openai',
|
|
24
|
-
'google-genai',
|
|
25
|
-
'xai',
|
|
26
|
-
'openrouter',
|
|
27
|
-
'ollama',
|
|
28
|
-
];
|
|
29
|
-
/**
|
|
30
|
-
* Default config
|
|
31
|
-
*/
|
|
32
|
-
export const DEFAULT_CONFIG = {
|
|
33
|
-
contentSource: 'file',
|
|
34
|
-
requirementSource: 'file',
|
|
35
|
-
contentProvider: 'file',
|
|
36
|
-
requirementsProvider: 'file',
|
|
37
|
-
/**
|
|
38
|
-
* Path to project-specific guidelines.
|
|
39
|
-
* The default is `.gsloth.guidelines.md`; this config may be used to point Gaunt Sloth to a different file,
|
|
40
|
-
* for example, to AGENTS.md
|
|
41
|
-
*/
|
|
42
|
-
projectGuidelines: PROJECT_GUIDELINES,
|
|
43
|
-
/**
|
|
44
|
-
* Whether to include the current date in the project review instructions or not.
|
|
45
|
-
*/
|
|
46
|
-
includeCurrentDateAfterGuidelines: false,
|
|
47
|
-
projectReviewInstructions: PROJECT_REVIEW_INSTRUCTIONS,
|
|
48
|
-
filesystem: 'none',
|
|
49
|
-
debugLog: false,
|
|
50
|
-
consoleLevel: StatusLevel.INFO, // Default to INFO level, not debug
|
|
51
|
-
/**
|
|
52
|
-
* Default provider for both requirements and content is GitHub.
|
|
53
|
-
* It needs GitHub CLI (gh).
|
|
54
|
-
*
|
|
55
|
-
* `github` content provider uses `gh pr diff NN` internally. {@link src/providers/ghPrDiffProvider.ts!}
|
|
56
|
-
*
|
|
57
|
-
*
|
|
58
|
-
* `github` requirements provider `gh issue view NN` internally
|
|
59
|
-
*/
|
|
60
|
-
commands: {
|
|
61
|
-
pr: {
|
|
62
|
-
contentSource: 'github',
|
|
63
|
-
requirementSource: 'github',
|
|
64
|
-
contentProvider: 'github',
|
|
65
|
-
requirementsProvider: 'github',
|
|
66
|
-
rating: {
|
|
67
|
-
enabled: true,
|
|
68
|
-
passThreshold: 6,
|
|
69
|
-
minRating: 0,
|
|
70
|
-
maxRating: 10,
|
|
71
|
-
errorOnReviewFail: true,
|
|
72
|
-
},
|
|
73
|
-
},
|
|
74
|
-
review: {
|
|
75
|
-
rating: {
|
|
76
|
-
enabled: true,
|
|
77
|
-
passThreshold: 6,
|
|
78
|
-
minRating: 0,
|
|
79
|
-
maxRating: 10,
|
|
80
|
-
errorOnReviewFail: true,
|
|
81
|
-
},
|
|
82
|
-
},
|
|
83
|
-
ask: {
|
|
84
|
-
filesystem: 'read',
|
|
85
|
-
},
|
|
86
|
-
chat: {
|
|
87
|
-
filesystem: 'read',
|
|
88
|
-
},
|
|
89
|
-
code: {
|
|
90
|
-
filesystem: 'all',
|
|
91
|
-
},
|
|
92
|
-
exec: {
|
|
93
|
-
filesystem: 'all',
|
|
94
|
-
},
|
|
95
|
-
api: {
|
|
96
|
-
filesystem: 'read',
|
|
97
|
-
port: 3000,
|
|
98
|
-
cors: {
|
|
99
|
-
allowOrigin: 'http://localhost:3000',
|
|
100
|
-
allowMethods: 'POST, GET, OPTIONS',
|
|
101
|
-
allowHeaders: 'Content-Type, Accept',
|
|
102
|
-
},
|
|
103
|
-
},
|
|
104
|
-
},
|
|
105
|
-
streamOutput: true,
|
|
106
|
-
writeOutputToFile: true,
|
|
107
|
-
writeBinaryOutputsToFile: true,
|
|
108
|
-
useColour: true,
|
|
109
|
-
streamSessionInferenceLog: true,
|
|
110
|
-
canInterruptInferenceWithEsc: true,
|
|
111
|
-
aiignore: {
|
|
112
|
-
enabled: true,
|
|
113
|
-
patterns: undefined,
|
|
114
|
-
},
|
|
115
|
-
};
|
|
116
|
-
/**
|
|
117
|
-
* Needed DEFAULT_CONFIG to be plain const to be picked up by typedoc,
|
|
118
|
-
* this cast here is just for typecheck.
|
|
119
|
-
*/
|
|
120
|
-
// eslint-disable-next-line @typescript-eslint/no-unused-expressions
|
|
121
|
-
DEFAULT_CONFIG;
|
|
122
|
-
/**
|
|
123
|
-
* Loads the global gsloth config (if present) from the global `~/.gsloth` folder.
|
|
124
|
-
*
|
|
125
|
-
* Precedence support: the returned raw config is intended to act as the BASE that the
|
|
126
|
-
* project config (and CLI overrides) merge on top of, so any value here is the lowest
|
|
127
|
-
* user-controlled layer (still above {@link DEFAULT_CONFIG}).
|
|
128
|
-
*
|
|
129
|
-
* Lookup order within the global folder, first match wins:
|
|
130
|
-
* `.gsloth.config.json` -> `.gsloth.config.js` -> `.gsloth.config.mjs`
|
|
131
|
-
*
|
|
132
|
-
* Absence of every variant is a no-op: returns `undefined` so behaviour is unchanged.
|
|
133
|
-
*
|
|
134
|
-
* NOTE: secrets (API keys) may live in this file; this function must never log its
|
|
135
|
-
* contents. Only non-sensitive diagnostics (the resolved path / parse failure) are emitted.
|
|
136
|
-
*
|
|
137
|
-
* @returns The raw global config object, or `undefined` when no global config exists.
|
|
138
|
-
*/
|
|
139
|
-
export async function loadGlobalRawConfig() {
|
|
140
|
-
// JSON first (the must-have format).
|
|
141
|
-
const jsonPath = getGlobalGslothConfigReadPath(USER_PROJECT_CONFIG_JSON);
|
|
142
|
-
if (existsSync(jsonPath)) {
|
|
143
|
-
try {
|
|
144
|
-
return JSON.parse(readFileSync(jsonPath, 'utf8'));
|
|
145
|
-
}
|
|
146
|
-
catch (e) {
|
|
147
|
-
displayDebug(e instanceof Error ? e : String(e));
|
|
148
|
-
displayWarning(`Failed to read global config from ${jsonPath}, ignoring it.`);
|
|
149
|
-
return undefined;
|
|
150
|
-
}
|
|
151
|
-
}
|
|
152
|
-
// Then JS / MJS variants (dynamic import of a `configure()` module).
|
|
153
|
-
for (const filename of [USER_PROJECT_CONFIG_JS, USER_PROJECT_CONFIG_MJS]) {
|
|
154
|
-
const modulePath = getGlobalGslothConfigReadPath(filename);
|
|
155
|
-
if (existsSync(modulePath)) {
|
|
156
|
-
try {
|
|
157
|
-
const imported = await importExternalFile(modulePath);
|
|
158
|
-
const configured = await imported.configure();
|
|
159
|
-
return configured;
|
|
160
|
-
}
|
|
161
|
-
catch (e) {
|
|
162
|
-
displayDebug(e instanceof Error ? e : String(e));
|
|
163
|
-
displayWarning(`Failed to read global config from ${modulePath}, ignoring it.`);
|
|
164
|
-
return undefined;
|
|
165
|
-
}
|
|
166
|
-
}
|
|
167
|
-
}
|
|
168
|
-
return undefined;
|
|
169
|
-
}
|
|
170
|
-
/**
|
|
171
|
-
* Deep-merges a loaded global raw config UNDER the given project raw config, so the
|
|
172
|
-
* project config wins on conflicting keys. When no global config exists this is a no-op
|
|
173
|
-
* and the original project config is returned unchanged.
|
|
174
|
-
*/
|
|
175
|
-
async function applyGlobalConfigBase(projectRawConfig) {
|
|
176
|
-
const globalRawConfig = await loadGlobalRawConfig();
|
|
177
|
-
if (!globalRawConfig) {
|
|
178
|
-
return projectRawConfig;
|
|
179
|
-
}
|
|
180
|
-
return deepMerge(globalRawConfig, projectRawConfig);
|
|
181
|
-
}
|
|
182
|
-
/**
|
|
183
|
-
* Returns true when a project-level config file (json/js/mjs) exists for the given
|
|
184
|
-
* overrides. Honours `customConfigPath` and the active identity profile so the check
|
|
185
|
-
* matches exactly what {@link initConfig} would attempt to load.
|
|
186
10
|
*
|
|
187
|
-
* This is the
|
|
188
|
-
*
|
|
189
|
-
|
|
190
|
-
|
|
191
|
-
|
|
192
|
-
|
|
193
|
-
|
|
194
|
-
|
|
195
|
-
|
|
196
|
-
|
|
197
|
-
|
|
198
|
-
*
|
|
199
|
-
*
|
|
200
|
-
*
|
|
201
|
-
*
|
|
202
|
-
*/
|
|
203
|
-
export async function hasAnyConfig(commandLineConfigOverrides) {
|
|
204
|
-
if (hasProjectConfig(commandLineConfigOverrides)) {
|
|
205
|
-
return true;
|
|
206
|
-
}
|
|
207
|
-
return (await loadGlobalRawConfig()) !== undefined;
|
|
208
|
-
}
|
|
209
|
-
/**
|
|
210
|
-
* Initialize configuration by loading from available config files
|
|
211
|
-
* @returns The loaded GthConfig
|
|
212
|
-
*/
|
|
213
|
-
export async function initConfig(commandLineConfigOverrides) {
|
|
214
|
-
if (commandLineConfigOverrides.customConfigPath &&
|
|
215
|
-
!existsSync(commandLineConfigOverrides.customConfigPath)) {
|
|
216
|
-
throw new Error(`Provided manual config "${commandLineConfigOverrides.customConfigPath}" does not exist`);
|
|
217
|
-
}
|
|
218
|
-
const jsonConfigPath = commandLineConfigOverrides.customConfigPath ??
|
|
219
|
-
getGslothConfigReadPath(USER_PROJECT_CONFIG_JSON, commandLineConfigOverrides.identityProfile);
|
|
220
|
-
// CFG-8 — when no project config file of any format exists, fall back to a standalone
|
|
221
|
-
// global config (loaded alone) before erroring. Project config still takes precedence:
|
|
222
|
-
// this branch only runs when there is no project file to apply the global config under.
|
|
223
|
-
if (!hasProjectConfig(commandLineConfigOverrides)) {
|
|
224
|
-
const globalRawConfig = await loadGlobalRawConfig();
|
|
225
|
-
if (globalRawConfig) {
|
|
226
|
-
if (globalRawConfig.llm &&
|
|
227
|
-
typeof globalRawConfig.llm === 'object' &&
|
|
228
|
-
'type' in globalRawConfig.llm) {
|
|
229
|
-
// Route the global config through the same path the project JSON uses.
|
|
230
|
-
return await tryJsonConfig(globalRawConfig, commandLineConfigOverrides);
|
|
231
|
-
}
|
|
232
|
-
displayError('Global configuration found but it is not in valid format. Should at least define llm.type');
|
|
233
|
-
exit(1);
|
|
234
|
-
// Unreachable past exit(1) in production; keeps TS happy and prevents test exit.
|
|
235
|
-
throw new Error('Unexpected error occurred.');
|
|
236
|
-
}
|
|
237
|
-
}
|
|
238
|
-
// Try loading the JSON config file first
|
|
239
|
-
if (jsonConfigPath.endsWith('.json') && existsSync(jsonConfigPath)) {
|
|
240
|
-
try {
|
|
241
|
-
// TODO makes sense to employ ZOD to validate config
|
|
242
|
-
const projectJsonConfig = JSON.parse(readFileSync(jsonConfigPath, 'utf8'));
|
|
243
|
-
// Apply global config as the base layer (project config wins on conflicts).
|
|
244
|
-
const jsonConfig = (await applyGlobalConfigBase(projectJsonConfig));
|
|
245
|
-
// If the config has an LLM with a type, create the appropriate LLM instance
|
|
246
|
-
if (jsonConfig.llm && typeof jsonConfig.llm === 'object' && 'type' in jsonConfig.llm) {
|
|
247
|
-
return await tryJsonConfig(jsonConfig, commandLineConfigOverrides);
|
|
248
|
-
}
|
|
249
|
-
else {
|
|
250
|
-
error(`${jsonConfigPath} is not in valid format. Should at least define llm.type`);
|
|
251
|
-
exit(1);
|
|
252
|
-
// noinspection ExceptionCaughtLocallyJS
|
|
253
|
-
// This throw is unreachable due to exit(1) above, but satisfies TS type analysis and prevents tests from exiting
|
|
254
|
-
// noinspection ExceptionCaughtLocallyJS
|
|
255
|
-
throw new Error('Unexpected error occurred.');
|
|
256
|
-
}
|
|
257
|
-
}
|
|
258
|
-
catch (e) {
|
|
259
|
-
displayDebug(e instanceof Error ? e : String(e));
|
|
260
|
-
displayError(`Failed to read config from ${USER_PROJECT_CONFIG_JSON}, will try other formats.`);
|
|
261
|
-
// Continue to try other formats
|
|
262
|
-
return await tryJsConfig(commandLineConfigOverrides);
|
|
263
|
-
}
|
|
264
|
-
}
|
|
265
|
-
else {
|
|
266
|
-
// JSON config not found, try JS
|
|
267
|
-
return tryJsConfig(commandLineConfigOverrides);
|
|
268
|
-
}
|
|
269
|
-
}
|
|
270
|
-
// Helper function to try loading JS config
|
|
271
|
-
async function tryJsConfig(commandLineConfigOverrides) {
|
|
272
|
-
const jsConfigPath = commandLineConfigOverrides.customConfigPath ??
|
|
273
|
-
getGslothConfigReadPath(USER_PROJECT_CONFIG_JS, commandLineConfigOverrides.identityProfile);
|
|
274
|
-
if (jsConfigPath.endsWith('.js') && existsSync(jsConfigPath)) {
|
|
275
|
-
try {
|
|
276
|
-
const i = await importExternalFile(jsConfigPath);
|
|
277
|
-
const customConfig = await i.configure();
|
|
278
|
-
const mergedWithGlobal = await applyGlobalConfigBase(customConfig);
|
|
279
|
-
return await mergeConfig(mergedWithGlobal, commandLineConfigOverrides);
|
|
280
|
-
}
|
|
281
|
-
catch (e) {
|
|
282
|
-
displayDebug(e instanceof Error ? e : String(e));
|
|
283
|
-
displayError(`Failed to read config from ${USER_PROJECT_CONFIG_JS}, will try other formats.`);
|
|
284
|
-
// Continue to try other formats
|
|
285
|
-
return await tryMjsConfig(commandLineConfigOverrides);
|
|
286
|
-
}
|
|
287
|
-
}
|
|
288
|
-
else {
|
|
289
|
-
// JS config not found, try MJS
|
|
290
|
-
return await tryMjsConfig(commandLineConfigOverrides);
|
|
291
|
-
}
|
|
292
|
-
}
|
|
293
|
-
// Helper function to try loading MJS config
|
|
294
|
-
async function tryMjsConfig(commandLineConfigOverrides) {
|
|
295
|
-
const mjsConfigPath = commandLineConfigOverrides.customConfigPath ??
|
|
296
|
-
getGslothConfigReadPath(USER_PROJECT_CONFIG_MJS, commandLineConfigOverrides.identityProfile);
|
|
297
|
-
if (mjsConfigPath.endsWith('.mjs') && existsSync(mjsConfigPath)) {
|
|
298
|
-
try {
|
|
299
|
-
const i = await importExternalFile(mjsConfigPath);
|
|
300
|
-
const customConfig = await i.configure();
|
|
301
|
-
const mergedWithGlobal = await applyGlobalConfigBase(customConfig);
|
|
302
|
-
return await mergeConfig(mergedWithGlobal, commandLineConfigOverrides);
|
|
303
|
-
}
|
|
304
|
-
catch (e) {
|
|
305
|
-
displayDebug(e instanceof Error ? e : String(e));
|
|
306
|
-
displayError(`Failed to read config from ${USER_PROJECT_CONFIG_MJS}.`);
|
|
307
|
-
displayError(`No valid configuration found. Please create a valid configuration file.`);
|
|
308
|
-
exit(1);
|
|
309
|
-
}
|
|
310
|
-
}
|
|
311
|
-
else {
|
|
312
|
-
// No config files found
|
|
313
|
-
displayError('No configuration file found. Please create one of: ' +
|
|
314
|
-
`${USER_PROJECT_CONFIG_JSON}, ${USER_PROJECT_CONFIG_JS}, or ${USER_PROJECT_CONFIG_MJS} ` +
|
|
315
|
-
'in your project directory.');
|
|
316
|
-
exit(1);
|
|
317
|
-
}
|
|
318
|
-
// This throw is unreachable due to exit(1) above, but satisfies TS type analysis and prevents tests from exiting
|
|
319
|
-
throw new Error('Unexpected error occurred.');
|
|
320
|
-
}
|
|
321
|
-
/**
|
|
322
|
-
* Process JSON LLM config by creating the appropriate LLM instance
|
|
323
|
-
* @param jsonConfig - The parsed JSON config
|
|
324
|
-
* @param commandLineConfigOverrides - command line config overrides
|
|
325
|
-
* @returns Promise<GthConfig>
|
|
326
|
-
*/
|
|
327
|
-
export async function tryJsonConfig(jsonConfig, commandLineConfigOverrides) {
|
|
328
|
-
try {
|
|
329
|
-
if (jsonConfig.llm && typeof jsonConfig.llm === 'object') {
|
|
330
|
-
// Get the type of LLM (e.g. 'vertexai', 'anthropic') - this should exist
|
|
331
|
-
const llmType = jsonConfig.llm.type;
|
|
332
|
-
if (!llmType) {
|
|
333
|
-
displayError('LLM type not specified in config.');
|
|
334
|
-
exit(1);
|
|
335
|
-
}
|
|
336
|
-
// Get the configuration for the specific LLM type
|
|
337
|
-
const llmConfig = jsonConfig.llm;
|
|
338
|
-
if (commandLineConfigOverrides.verbose) {
|
|
339
|
-
// Necessary to avoid https://github.com/langchain-ai/langchainjs/issues/8705
|
|
340
|
-
llmConfig.verbose = commandLineConfigOverrides.verbose;
|
|
341
|
-
}
|
|
342
|
-
// Import the appropriate config module
|
|
343
|
-
const configModule = await import(`#src/providers/${llmType}.js`);
|
|
344
|
-
if (configModule.processJsonConfig) {
|
|
345
|
-
const llm = (await configModule.processJsonConfig(llmConfig));
|
|
346
|
-
const mergedConfig = mergeRawConfig(jsonConfig, llm, commandLineConfigOverrides);
|
|
347
|
-
if (configModule.postProcessJsonConfig) {
|
|
348
|
-
return await configModule.postProcessJsonConfig(mergedConfig);
|
|
349
|
-
}
|
|
350
|
-
else {
|
|
351
|
-
return await mergedConfig;
|
|
352
|
-
}
|
|
353
|
-
}
|
|
354
|
-
else {
|
|
355
|
-
displayWarning(`Config module for ${llmType} does not have processJsonConfig function.`);
|
|
356
|
-
exit(1);
|
|
357
|
-
}
|
|
358
|
-
}
|
|
359
|
-
else {
|
|
360
|
-
displayError('No LLM configuration found in config.');
|
|
361
|
-
exit(1);
|
|
362
|
-
}
|
|
363
|
-
}
|
|
364
|
-
catch (e) {
|
|
365
|
-
if (e instanceof Error && e.message.includes('Cannot find module')) {
|
|
366
|
-
displayError(`LLM type '${jsonConfig.llm.type}' not supported.`);
|
|
367
|
-
}
|
|
368
|
-
else {
|
|
369
|
-
displayError(`Error processing LLM config: ${e instanceof Error ? e.message : String(e)}`);
|
|
370
|
-
}
|
|
371
|
-
exit(1);
|
|
372
|
-
}
|
|
373
|
-
// This throw is unreachable due to exit(1) above, but satisfies TS type analysis and prevents tests from exiting
|
|
374
|
-
throw new Error('Unexpected error occurred.');
|
|
375
|
-
}
|
|
376
|
-
/**
|
|
377
|
-
* Deep merge two objects, with source overriding target properties
|
|
378
|
-
* @param target - The target object with default values
|
|
379
|
-
* @param source - The source object with user overrides
|
|
380
|
-
* @param maxDepth - Maximum recursion depth to prevent stack overflow (default: 4)
|
|
381
|
-
*/
|
|
382
|
-
function deepMerge(target, source, maxDepth = 4) {
|
|
383
|
-
if (!source)
|
|
384
|
-
return target;
|
|
385
|
-
if (!target)
|
|
386
|
-
return source;
|
|
387
|
-
const result = { ...target };
|
|
388
|
-
// Return result without merging if depth is exceeded
|
|
389
|
-
if (maxDepth === 0)
|
|
390
|
-
return result;
|
|
391
|
-
for (const key in source) {
|
|
392
|
-
const sourceValue = source[key];
|
|
393
|
-
const targetValue = target[key];
|
|
394
|
-
if (sourceValue &&
|
|
395
|
-
typeof sourceValue === 'object' &&
|
|
396
|
-
!Array.isArray(sourceValue) &&
|
|
397
|
-
targetValue &&
|
|
398
|
-
typeof targetValue === 'object' &&
|
|
399
|
-
!Array.isArray(targetValue)) {
|
|
400
|
-
// Recursively merge nested objects
|
|
401
|
-
result[key] = deepMerge(targetValue, sourceValue, maxDepth - 1);
|
|
402
|
-
}
|
|
403
|
-
else if (sourceValue !== undefined) {
|
|
404
|
-
// Override with source value if it exists
|
|
405
|
-
result[key] = sourceValue;
|
|
406
|
-
}
|
|
407
|
-
}
|
|
408
|
-
return result;
|
|
409
|
-
}
|
|
410
|
-
/**
|
|
411
|
-
* Merge config with default config
|
|
412
|
-
*/
|
|
413
|
-
async function mergeConfig(partialConfig, commandLineConfigOverrides) {
|
|
414
|
-
const config = partialConfig;
|
|
415
|
-
// Migrate deprecated property names
|
|
416
|
-
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
417
|
-
const raw = config;
|
|
418
|
-
if (raw.contentProvider && !raw.contentSource) {
|
|
419
|
-
displayWarning('Config property "contentProvider" is deprecated. Use "contentSource" instead.');
|
|
420
|
-
config.contentSource = raw.contentProvider;
|
|
421
|
-
}
|
|
422
|
-
if (raw.requirementsProvider && !raw.requirementSource) {
|
|
423
|
-
displayWarning('Config property "requirementsProvider" is deprecated. Use "requirementSource" instead.');
|
|
424
|
-
config.requirementSource = raw.requirementsProvider;
|
|
425
|
-
}
|
|
426
|
-
// Keep both old and new in sync
|
|
427
|
-
if (config.contentSource)
|
|
428
|
-
config.contentProvider = config.contentSource;
|
|
429
|
-
if (config.requirementSource)
|
|
430
|
-
config.requirementsProvider = config.requirementSource;
|
|
431
|
-
// Migrate command-level deprecated properties
|
|
432
|
-
if (config.commands) {
|
|
433
|
-
for (const cmdName of ['pr', 'review']) {
|
|
434
|
-
const cmd = config.commands[cmdName];
|
|
435
|
-
if (cmd) {
|
|
436
|
-
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
437
|
-
const cmdRaw = cmd;
|
|
438
|
-
if (cmdRaw.contentProvider && !cmdRaw.contentSource) {
|
|
439
|
-
cmd.contentSource = cmdRaw.contentProvider;
|
|
440
|
-
}
|
|
441
|
-
if (cmdRaw.requirementsProvider && !cmdRaw.requirementSource) {
|
|
442
|
-
cmd.requirementSource = cmdRaw.requirementsProvider;
|
|
443
|
-
}
|
|
444
|
-
if (cmd.contentSource)
|
|
445
|
-
cmd.contentProvider = cmd.contentSource;
|
|
446
|
-
if (cmd.requirementSource)
|
|
447
|
-
cmd.requirementsProvider = cmd.requirementSource;
|
|
448
|
-
}
|
|
449
|
-
}
|
|
450
|
-
}
|
|
451
|
-
// Deep merge command configs while preserving defaults
|
|
452
|
-
// Type complexity from DEFAULT_CONFIG.commands 'as const' requires any cast for deep merge result
|
|
453
|
-
const mergedCommands = {
|
|
454
|
-
pr: deepMerge(DEFAULT_CONFIG.commands.pr, config?.commands?.pr), // eslint-disable-line @typescript-eslint/no-explicit-any
|
|
455
|
-
review: deepMerge(DEFAULT_CONFIG.commands.review, config?.commands?.review), // eslint-disable-line @typescript-eslint/no-explicit-any
|
|
456
|
-
code: deepMerge(DEFAULT_CONFIG.commands.code, config?.commands?.code), // eslint-disable-line @typescript-eslint/no-explicit-any
|
|
457
|
-
exec: deepMerge(DEFAULT_CONFIG.commands.exec, config?.commands?.exec), // eslint-disable-line @typescript-eslint/no-explicit-any
|
|
458
|
-
ask: deepMerge(DEFAULT_CONFIG.commands.ask, config?.commands?.ask), // eslint-disable-line @typescript-eslint/no-explicit-any
|
|
459
|
-
chat: deepMerge(DEFAULT_CONFIG.commands.chat, config?.commands?.chat), // eslint-disable-line @typescript-eslint/no-explicit-any
|
|
460
|
-
api: deepMerge(DEFAULT_CONFIG.commands.api, config?.commands?.api), // eslint-disable-line @typescript-eslint/no-explicit-any
|
|
461
|
-
};
|
|
462
|
-
const mergedConfig = {
|
|
463
|
-
...DEFAULT_CONFIG,
|
|
464
|
-
...config,
|
|
465
|
-
commands: mergedCommands,
|
|
466
|
-
};
|
|
467
|
-
if (commandLineConfigOverrides.identityProfile !== undefined) {
|
|
468
|
-
displayInfo(`Activating profile: ${commandLineConfigOverrides.identityProfile}`);
|
|
469
|
-
mergedConfig.identityProfile = commandLineConfigOverrides.identityProfile.trim();
|
|
470
|
-
}
|
|
471
|
-
if (commandLineConfigOverrides.verbose !== undefined) {
|
|
472
|
-
mergedConfig.llm.verbose = commandLineConfigOverrides.verbose;
|
|
473
|
-
}
|
|
474
|
-
if (commandLineConfigOverrides.writeOutputToFile !== undefined) {
|
|
475
|
-
mergedConfig.writeOutputToFile = commandLineConfigOverrides.writeOutputToFile;
|
|
476
|
-
}
|
|
477
|
-
// Set the useColour value in systemUtils
|
|
478
|
-
setUseColour(mergedConfig.useColour);
|
|
479
|
-
// Set console logging level
|
|
480
|
-
if (mergedConfig.consoleLevel !== undefined) {
|
|
481
|
-
const resolvedConsoleLevel = resolveConsoleLevel(mergedConfig.consoleLevel);
|
|
482
|
-
if (resolvedConsoleLevel !== undefined) {
|
|
483
|
-
mergedConfig.consoleLevel = resolvedConsoleLevel;
|
|
484
|
-
setConsoleLevel(resolvedConsoleLevel);
|
|
485
|
-
}
|
|
486
|
-
else {
|
|
487
|
-
displayWarning(`Invalid consoleLevel "${String(mergedConfig.consoleLevel)}", using default ${StatusLevel.INFO}.`);
|
|
488
|
-
mergedConfig.consoleLevel = StatusLevel.INFO;
|
|
489
|
-
setConsoleLevel(StatusLevel.INFO);
|
|
490
|
-
}
|
|
491
|
-
}
|
|
492
|
-
mergedConfig.canInterruptInferenceWithEsc = mergedConfig.canInterruptInferenceWithEsc && isTTY();
|
|
493
|
-
return mergedConfig;
|
|
494
|
-
}
|
|
495
|
-
const CONSOLE_LEVELS_BY_NAME = {
|
|
496
|
-
debug: StatusLevel.DEBUG,
|
|
497
|
-
info: StatusLevel.INFO,
|
|
498
|
-
display: StatusLevel.DISPLAY,
|
|
499
|
-
success: StatusLevel.SUCCESS,
|
|
500
|
-
warning: StatusLevel.WARNING,
|
|
501
|
-
error: StatusLevel.ERROR,
|
|
502
|
-
stream: StatusLevel.STREAM,
|
|
503
|
-
};
|
|
504
|
-
function resolveConsoleLevel(level) {
|
|
505
|
-
if (typeof level === 'number') {
|
|
506
|
-
return StatusLevel[level] !== undefined ? level : undefined;
|
|
507
|
-
}
|
|
508
|
-
if (typeof level === 'string') {
|
|
509
|
-
const normalized = level.trim().toLowerCase();
|
|
510
|
-
if (normalized in CONSOLE_LEVELS_BY_NAME) {
|
|
511
|
-
return CONSOLE_LEVELS_BY_NAME[normalized];
|
|
512
|
-
}
|
|
513
|
-
const enumValue = StatusLevel[level];
|
|
514
|
-
if (typeof enumValue === 'number') {
|
|
515
|
-
return enumValue;
|
|
516
|
-
}
|
|
517
|
-
}
|
|
518
|
-
return undefined;
|
|
519
|
-
}
|
|
520
|
-
/**
|
|
521
|
-
* Merge raw with default config
|
|
522
|
-
*/
|
|
523
|
-
async function mergeRawConfig(config, llm, commandLineConfigOverrides) {
|
|
524
|
-
const modelDisplayName = config.llm?.model;
|
|
525
|
-
return await mergeConfig({ ...config, llm, modelDisplayName }, commandLineConfigOverrides);
|
|
526
|
-
}
|
|
11
|
+
* This module is the **public barrel** for the configuration system. The implementation
|
|
12
|
+
* is split into focused modules under `config/`:
|
|
13
|
+
* - `config/types.ts` — the configuration type surface.
|
|
14
|
+
* - `config/shell-policy.ts` — {@link GthDevToolsConfig} + the shell/dev-tools resolvers.
|
|
15
|
+
* - `config/defaults.ts` — {@link DEFAULT_CONFIG}.
|
|
16
|
+
* - `config/loader.ts` — discovery + the layered load/merge pipeline.
|
|
17
|
+
* - `config/schema.ts` — the Zod schema (single source of truth) + JSON-Schema generator.
|
|
18
|
+
*
|
|
19
|
+
* Every name that was previously exported from `config.ts` is re-exported here, so the
|
|
20
|
+
* public import path `@gaunt-sloth/core/config.js` (and `#src/config.js`) is unchanged.
|
|
21
|
+
*/
|
|
22
|
+
export * from '#src/config/types.js';
|
|
23
|
+
export * from '#src/config/shell-policy.js';
|
|
24
|
+
export * from '#src/config/defaults.js';
|
|
25
|
+
export * from '#src/config/loader.js';
|
|
527
26
|
//# sourceMappingURL=config.js.map
|
package/dist/config.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"config.js","sourceRoot":"","sources":["../src/config.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"config.js","sourceRoot":"","sources":["../src/config.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;GAoBG;AACH,cAAc,sBAAsB,CAAC;AACrC,cAAc,6BAA6B,CAAC;AAC5C,cAAc,yBAAyB,CAAC;AACxC,cAAc,uBAAuB,CAAC"}
|
package/dist/constants.d.ts
CHANGED
|
@@ -4,6 +4,7 @@ export declare const GSLOTH_AUTH = ".gsloth-auth";
|
|
|
4
4
|
export declare const USER_PROJECT_CONFIG_JS = ".gsloth.config.js";
|
|
5
5
|
export declare const USER_PROJECT_CONFIG_JSON = ".gsloth.config.json";
|
|
6
6
|
export declare const USER_PROJECT_CONFIG_MJS = ".gsloth.config.mjs";
|
|
7
|
+
export declare const USER_PROJECT_CONFIG_TS = ".gsloth.config.ts";
|
|
7
8
|
export declare const GSLOTH_BACKSTORY = ".gsloth.backstory.md";
|
|
8
9
|
export declare const PROJECT_GUIDELINES = ".gsloth.guidelines.md";
|
|
9
10
|
export declare const PROJECT_REVIEW_INSTRUCTIONS = ".gsloth.review.md";
|
|
@@ -12,3 +13,44 @@ export declare const GSLOTH_CHAT_PROMPT = ".gsloth.chat.md";
|
|
|
12
13
|
export declare const GSLOTH_CODE_PROMPT = ".gsloth.code.md";
|
|
13
14
|
export declare const GSLOTH_EXEC_PROMPT = ".gsloth.exec.md";
|
|
14
15
|
export declare const AIIGNORE_FILE = ".aiignore";
|
|
16
|
+
/**
|
|
17
|
+
* `$schema` pointer written into a generated `.gsloth.config.json` (GS2-1) so editors offer
|
|
18
|
+
* autocomplete + validation. The **hosted, major-pinned** URL is used rather than a relative
|
|
19
|
+
* `node_modules` path because the relative path only resolves when `@gaunt-sloth/core` sits in a
|
|
20
|
+
* `node_modules` beside the config, which is NOT the case for a globally-installed CLI
|
|
21
|
+
* (`npm i -g`): the schema lands in the global prefix, not next to the user's project config, so
|
|
22
|
+
* a relative pointer would silently fail to resolve. A hosted URL resolves for every install mode
|
|
23
|
+
* (global, npx, local, or a hand-written config with nothing installed) and is the standard
|
|
24
|
+
* convention editors fetch + cache.
|
|
25
|
+
*
|
|
26
|
+
* The channel is **major-pinned** (`/schema/v2/…`, not `latest` or `alpha`) so a config never
|
|
27
|
+
* revalidates against a future major it was not written for. The hosted copy is kept in sync with
|
|
28
|
+
* this package's generated schema by the deploy runbook in
|
|
29
|
+
* `websites/gauntsloth-site/schema/README.md` (interim, hand-run) and, in time, PLAT-9's automated
|
|
30
|
+
* release step. The schema still ships inside the package (`files: ["./schema/*"]`) as an offline
|
|
31
|
+
* artifact and golden-snapshot source of truth; it is just no longer what the pointer references.
|
|
32
|
+
*/
|
|
33
|
+
export declare const CONFIG_SCHEMA_POINTER = "https://gauntsloth.app/schema/v2/gsloth-config.schema.json";
|
|
34
|
+
/**
|
|
35
|
+
* EXT-9 Tier-2: project-scoped persisted shell allow-list (`always` approvals).
|
|
36
|
+
* Lives under `.gsloth/.gsloth-settings/` like other project settings.
|
|
37
|
+
*/
|
|
38
|
+
export declare const SHELL_ALLOWLIST_FILE = "shell-allowlist.json";
|
|
39
|
+
/**
|
|
40
|
+
* The `additionalToolNamePrefix` handed to `MultiServerMCPClient` so every MCP tool name is
|
|
41
|
+
* namespaced. Combined with `prefixToolNameWithServerName`, the adapter emits tool names shaped
|
|
42
|
+
* `${MCP_TOOL_NAME_PREFIX}__<serverName>__<toolName>` (the `__` separator is the mcp-adapters
|
|
43
|
+
* convention). Single-sourced here so the resolver that sets the prefix (EXT-32) and any consumer
|
|
44
|
+
* that groups tools back by server (the [[TUI-C20]] MCP debug tab) can never silently drift apart.
|
|
45
|
+
*/
|
|
46
|
+
export declare const MCP_TOOL_NAME_PREFIX = "mcp";
|
|
47
|
+
/**
|
|
48
|
+
* GS2-35 — the canonical Git co-author identity for agent-authored commits. When Gaunt Sloth writes
|
|
49
|
+
* a commit (via `run_shell_command` `git commit`) the co-author is *Gaunt Sloth itself*, NOT the
|
|
50
|
+
* underlying model — attributing the commit to the model name (e.g. `Claude`, `GPT`) is factually
|
|
51
|
+
* wrong. Config (`commit.coAuthor`) overrides this; single-sourced so the config default and the
|
|
52
|
+
* prompt-guidance fallback ({@link import('#src/utils/systemPromptNotes.js').appendCommitCoAuthorNote})
|
|
53
|
+
* can never drift.
|
|
54
|
+
*/
|
|
55
|
+
export declare const DEFAULT_COMMIT_CO_AUTHOR_NAME = "Gaunt Sloth";
|
|
56
|
+
export declare const DEFAULT_COMMIT_CO_AUTHOR_EMAIL = "code@gauntsloth.app";
|