gaunt-sloth 0.0.1 → 1.5.8
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.pr-discovery.md +23 -0
- package/README.md +50 -3
- package/cli.js +23 -0
- package/dist/builtInToolsConfig.d.ts +1 -0
- package/dist/builtInToolsConfig.js +2 -0
- package/dist/builtInToolsConfig.js.map +1 -0
- package/dist/cli.d.ts +1 -0
- package/dist/cli.js +60 -0
- package/dist/cli.js.map +1 -0
- package/dist/commands/apiCommand.d.ts +3 -0
- package/dist/commands/apiCommand.js +25 -0
- package/dist/commands/apiCommand.js.map +1 -0
- package/dist/commands/askCommand.d.ts +8 -0
- package/dist/commands/askCommand.js +39 -0
- package/dist/commands/askCommand.js.map +1 -0
- package/dist/commands/chatCommand.d.ts +3 -0
- package/dist/commands/chatCommand.js +24 -0
- package/dist/commands/chatCommand.js.map +1 -0
- package/dist/commands/codeCommand.d.ts +3 -0
- package/dist/commands/codeCommand.js +19 -0
- package/dist/commands/codeCommand.js.map +1 -0
- package/dist/commands/commandIntrospection.d.ts +11 -0
- package/dist/commands/commandIntrospection.js +64 -0
- package/dist/commands/commandIntrospection.js.map +1 -0
- package/dist/commands/commandUtils.d.ts +23 -0
- package/dist/commands/commandUtils.js +49 -0
- package/dist/commands/commandUtils.js.map +1 -0
- package/dist/commands/configSetup.d.ts +7 -0
- package/dist/commands/configSetup.js +63 -0
- package/dist/commands/configSetup.js.map +1 -0
- package/dist/commands/getCommand.d.ts +3 -0
- package/dist/commands/getCommand.js +45 -0
- package/dist/commands/getCommand.js.map +1 -0
- package/dist/commands/initCommand.d.ts +16 -0
- package/dist/commands/initCommand.js +90 -0
- package/dist/commands/initCommand.js.map +1 -0
- package/dist/commands/prCommand.d.ts +3 -0
- package/dist/commands/prCommand.js +106 -0
- package/dist/commands/prCommand.js.map +1 -0
- package/dist/commands/prDiscovery.d.ts +54 -0
- package/dist/commands/prDiscovery.js +451 -0
- package/dist/commands/prDiscovery.js.map +1 -0
- package/dist/commands/reviewCommand.d.ts +3 -0
- package/dist/commands/reviewCommand.js +51 -0
- package/dist/commands/reviewCommand.js.map +1 -0
- package/dist/config.d.ts +1 -0
- package/dist/config.js +2 -0
- package/dist/config.js.map +1 -0
- package/dist/constants.d.ts +1 -0
- package/dist/constants.js +2 -0
- package/dist/constants.js.map +1 -0
- package/dist/core/GthAgentRunner.d.ts +1 -0
- package/dist/core/GthAgentRunner.js +2 -0
- package/dist/core/GthAgentRunner.js.map +1 -0
- package/dist/core/GthLangChainAgent.d.ts +1 -0
- package/dist/core/GthLangChainAgent.js +2 -0
- package/dist/core/GthLangChainAgent.js.map +1 -0
- package/dist/core/types.d.ts +1 -0
- package/dist/core/types.js +2 -0
- package/dist/core/types.js.map +1 -0
- package/dist/helpers/jira/jiraClient.d.ts +1 -0
- package/dist/helpers/jira/jiraClient.js +2 -0
- package/dist/helpers/jira/jiraClient.js.map +1 -0
- package/dist/helpers/jira/jiraLogWork.d.ts +2 -0
- package/dist/helpers/jira/jiraLogWork.js +53 -0
- package/dist/helpers/jira/jiraLogWork.js.map +1 -0
- package/dist/mcp/OAuthClientProviderImpl.d.ts +1 -0
- package/dist/mcp/OAuthClientProviderImpl.js +2 -0
- package/dist/mcp/OAuthClientProviderImpl.js.map +1 -0
- package/dist/middleware/binaryContentInjectionMiddleware.d.ts +1 -0
- package/dist/middleware/binaryContentInjectionMiddleware.js +2 -0
- package/dist/middleware/binaryContentInjectionMiddleware.js.map +1 -0
- package/dist/middleware/registry.d.ts +1 -0
- package/dist/middleware/registry.js +2 -0
- package/dist/middleware/registry.js.map +1 -0
- package/dist/middleware/reviewRateMiddleware.d.ts +1 -0
- package/dist/middleware/reviewRateMiddleware.js +2 -0
- package/dist/middleware/reviewRateMiddleware.js.map +1 -0
- package/dist/middleware/types.d.ts +1 -0
- package/dist/middleware/types.js +2 -0
- package/dist/middleware/types.js.map +1 -0
- package/dist/modules/a2a/A2AClientWrapper.d.ts +1 -0
- package/dist/modules/a2a/A2AClientWrapper.js +2 -0
- package/dist/modules/a2a/A2AClientWrapper.js.map +1 -0
- package/dist/modules/apiAgUiModule.d.ts +1 -0
- package/dist/modules/apiAgUiModule.js +2 -0
- package/dist/modules/apiAgUiModule.js.map +1 -0
- package/dist/modules/interactiveSessionModule.d.ts +1 -0
- package/dist/modules/interactiveSessionModule.js +2 -0
- package/dist/modules/interactiveSessionModule.js.map +1 -0
- package/dist/modules/questionAnsweringModule.d.ts +1 -0
- package/dist/modules/questionAnsweringModule.js +2 -0
- package/dist/modules/questionAnsweringModule.js.map +1 -0
- package/dist/modules/reviewModule.d.ts +1 -0
- package/dist/modules/reviewModule.js +2 -0
- package/dist/modules/reviewModule.js.map +1 -0
- package/dist/modules/types.d.ts +1 -0
- package/dist/modules/types.js +2 -0
- package/dist/modules/types.js.map +1 -0
- package/dist/presets/anthropic.d.ts +1 -0
- package/dist/presets/anthropic.js +2 -0
- package/dist/presets/anthropic.js.map +1 -0
- package/dist/presets/deepseek.d.ts +1 -0
- package/dist/presets/deepseek.js +2 -0
- package/dist/presets/deepseek.js.map +1 -0
- package/dist/presets/fake.d.ts +1 -0
- package/dist/presets/fake.js +2 -0
- package/dist/presets/fake.js.map +1 -0
- package/dist/presets/google-genai.d.ts +1 -0
- package/dist/presets/google-genai.js +2 -0
- package/dist/presets/google-genai.js.map +1 -0
- package/dist/presets/groq.d.ts +1 -0
- package/dist/presets/groq.js +2 -0
- package/dist/presets/groq.js.map +1 -0
- package/dist/presets/openai.d.ts +1 -0
- package/dist/presets/openai.js +2 -0
- package/dist/presets/openai.js.map +1 -0
- package/dist/presets/openrouter.d.ts +1 -0
- package/dist/presets/openrouter.js +2 -0
- package/dist/presets/openrouter.js.map +1 -0
- package/dist/presets/vertexai.d.ts +1 -0
- package/dist/presets/vertexai.js +2 -0
- package/dist/presets/vertexai.js.map +1 -0
- package/dist/presets/xai.d.ts +1 -0
- package/dist/presets/xai.js +2 -0
- package/dist/presets/xai.js.map +1 -0
- package/dist/providers/file.d.ts +1 -0
- package/dist/providers/file.js +2 -0
- package/dist/providers/file.js.map +1 -0
- package/dist/providers/ghIssueProvider.d.ts +1 -0
- package/dist/providers/ghIssueProvider.js +2 -0
- package/dist/providers/ghIssueProvider.js.map +1 -0
- package/dist/providers/ghPrDiffProvider.d.ts +1 -0
- package/dist/providers/ghPrDiffProvider.js +2 -0
- package/dist/providers/ghPrDiffProvider.js.map +1 -0
- package/dist/providers/jiraIssueLegacyProvider.d.ts +1 -0
- package/dist/providers/jiraIssueLegacyProvider.js +2 -0
- package/dist/providers/jiraIssueLegacyProvider.js.map +1 -0
- package/dist/providers/jiraIssueProvider.d.ts +1 -0
- package/dist/providers/jiraIssueProvider.js +2 -0
- package/dist/providers/jiraIssueProvider.js.map +1 -0
- package/dist/providers/text.d.ts +1 -0
- package/dist/providers/text.js +2 -0
- package/dist/providers/text.js.map +1 -0
- package/dist/providers/types.d.ts +1 -0
- package/dist/providers/types.js +2 -0
- package/dist/providers/types.js.map +1 -0
- package/dist/state/artifactStore.d.ts +1 -0
- package/dist/state/artifactStore.js +2 -0
- package/dist/state/artifactStore.js.map +1 -0
- package/dist/tools/A2AAgentTool.d.ts +1 -0
- package/dist/tools/A2AAgentTool.js +2 -0
- package/dist/tools/A2AAgentTool.js.map +1 -0
- package/dist/tools/GthCustomToolkit.d.ts +1 -0
- package/dist/tools/GthCustomToolkit.js +2 -0
- package/dist/tools/GthCustomToolkit.js.map +1 -0
- package/dist/tools/GthDevToolkit.d.ts +1 -0
- package/dist/tools/GthDevToolkit.js +2 -0
- package/dist/tools/GthDevToolkit.js.map +1 -0
- package/dist/tools/GthFileSystemToolkit.d.ts +1 -0
- package/dist/tools/GthFileSystemToolkit.js +2 -0
- package/dist/tools/GthFileSystemToolkit.js.map +1 -0
- package/dist/tools/binaryUtils.d.ts +1 -0
- package/dist/tools/binaryUtils.js +2 -0
- package/dist/tools/binaryUtils.js.map +1 -0
- package/dist/tools/gthJiraLogWorkTool.d.ts +3 -0
- package/dist/tools/gthJiraLogWorkTool.js +37 -0
- package/dist/tools/gthJiraLogWorkTool.js.map +1 -0
- package/dist/tools/gthStatusUpdateTool.d.ts +1 -0
- package/dist/tools/gthStatusUpdateTool.js +2 -0
- package/dist/tools/gthStatusUpdateTool.js.map +1 -0
- package/dist/tools/gthWebFetchTool.d.ts +1 -0
- package/dist/tools/gthWebFetchTool.js +2 -0
- package/dist/tools/gthWebFetchTool.js.map +1 -0
- package/dist/tools/showA2UISurfaceTool.d.ts +1 -0
- package/dist/tools/showA2UISurfaceTool.js +2 -0
- package/dist/tools/showA2UISurfaceTool.js.map +1 -0
- package/dist/utils/ProgressIndicator.d.ts +1 -0
- package/dist/utils/ProgressIndicator.js +2 -0
- package/dist/utils/ProgressIndicator.js.map +1 -0
- package/dist/utils/aiignoreUtils.d.ts +1 -0
- package/dist/utils/aiignoreUtils.js +2 -0
- package/dist/utils/aiignoreUtils.js.map +1 -0
- package/dist/utils/binaryOutputUtils.d.ts +1 -0
- package/dist/utils/binaryOutputUtils.js +2 -0
- package/dist/utils/binaryOutputUtils.js.map +1 -0
- package/dist/utils/consoleUtils.d.ts +1 -0
- package/dist/utils/consoleUtils.js +2 -0
- package/dist/utils/consoleUtils.js.map +1 -0
- package/dist/utils/debugUtils.d.ts +1 -0
- package/dist/utils/debugUtils.js +2 -0
- package/dist/utils/debugUtils.js.map +1 -0
- package/dist/utils/fileUtils.d.ts +1 -0
- package/dist/utils/fileUtils.js +2 -0
- package/dist/utils/fileUtils.js.map +1 -0
- package/dist/utils/globalConfigUtils.d.ts +1 -0
- package/dist/utils/globalConfigUtils.js +2 -0
- package/dist/utils/globalConfigUtils.js.map +1 -0
- package/dist/utils/llmUtils.d.ts +1 -0
- package/dist/utils/llmUtils.js +2 -0
- package/dist/utils/llmUtils.js.map +1 -0
- package/dist/utils/mcpUtils.d.ts +1 -0
- package/dist/utils/mcpUtils.js +2 -0
- package/dist/utils/mcpUtils.js.map +1 -0
- package/dist/utils/stringUtils.d.ts +1 -0
- package/dist/utils/stringUtils.js +2 -0
- package/dist/utils/stringUtils.js.map +1 -0
- package/dist/utils/systemUtils.d.ts +1 -0
- package/dist/utils/systemUtils.js +2 -0
- package/dist/utils/systemUtils.js.map +1 -0
- package/dist/utils/vertexaiUtils.d.ts +1 -0
- package/dist/utils/vertexaiUtils.js +2 -0
- package/dist/utils/vertexaiUtils.js.map +1 -0
- package/package.json +56 -4
|
@@ -0,0 +1,45 @@
|
|
|
1
|
+
import { initConfig } from '@gaunt-sloth/core/config.js';
|
|
2
|
+
import { getCommandProviderInput, getCommandSystemPrompt, } from '#src/commands/commandIntrospection.js';
|
|
3
|
+
import { display, displayError } from '@gaunt-sloth/core/utils/consoleUtils.js';
|
|
4
|
+
import { setExitCode } from '@gaunt-sloth/core/utils/systemUtils.js';
|
|
5
|
+
const PROMPT_COMMANDS = ['ask', 'review', 'pr', 'pr-discovery', 'chat', 'code'];
|
|
6
|
+
const PROVIDER_COMMANDS = ['review', 'pr'];
|
|
7
|
+
const INPUT_TYPES = ['content', 'requirements'];
|
|
8
|
+
export function getCommand(program, commandLineConfigOverrides) {
|
|
9
|
+
program
|
|
10
|
+
.command('get')
|
|
11
|
+
.description('Print the effective prompt or provider-backed command input')
|
|
12
|
+
.argument('<command>', 'Command to introspect')
|
|
13
|
+
.argument('<subject>', 'Either prompt, content, or requirements')
|
|
14
|
+
.argument('[id]', 'Provider-backed content identifier')
|
|
15
|
+
.action(async (command, subject, id) => {
|
|
16
|
+
try {
|
|
17
|
+
const config = await initConfig(commandLineConfigOverrides);
|
|
18
|
+
if (subject === 'prompt') {
|
|
19
|
+
if (id) {
|
|
20
|
+
throw new Error('Prompt subject does not accept an ID.');
|
|
21
|
+
}
|
|
22
|
+
if (!PROMPT_COMMANDS.includes(command)) {
|
|
23
|
+
throw new Error(`Unsupported prompt command: ${command}.`);
|
|
24
|
+
}
|
|
25
|
+
display(getCommandSystemPrompt(command, config));
|
|
26
|
+
return;
|
|
27
|
+
}
|
|
28
|
+
if (!INPUT_TYPES.includes(subject)) {
|
|
29
|
+
throw new Error(`Unsupported subject: ${subject}.`);
|
|
30
|
+
}
|
|
31
|
+
if (!PROVIDER_COMMANDS.includes(command)) {
|
|
32
|
+
throw new Error(`Unsupported provider-backed command: ${command}.`);
|
|
33
|
+
}
|
|
34
|
+
if (!id) {
|
|
35
|
+
throw new Error(`Subject "${subject}" requires an ID.`);
|
|
36
|
+
}
|
|
37
|
+
display(await getCommandProviderInput(command, subject, id, config));
|
|
38
|
+
}
|
|
39
|
+
catch (error) {
|
|
40
|
+
displayError(error instanceof Error ? error.message : String(error));
|
|
41
|
+
setExitCode(1);
|
|
42
|
+
}
|
|
43
|
+
});
|
|
44
|
+
}
|
|
45
|
+
//# sourceMappingURL=getCommand.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"getCommand.js","sourceRoot":"","sources":["../../src/commands/getCommand.ts"],"names":[],"mappings":"AACA,OAAO,EAA8B,UAAU,EAAE,MAAM,6BAA6B,CAAC;AACrF,OAAO,EACL,uBAAuB,EACvB,sBAAsB,GAIvB,MAAM,uCAAuC,CAAC;AAC/C,OAAO,EAAE,OAAO,EAAE,YAAY,EAAE,MAAM,yCAAyC,CAAC;AAChF,OAAO,EAAE,WAAW,EAAE,MAAM,wCAAwC,CAAC;AAErE,MAAM,eAAe,GAAG,CAAC,KAAK,EAAE,QAAQ,EAAE,IAAI,EAAE,cAAc,EAAE,MAAM,EAAE,MAAM,CAAU,CAAC;AACzF,MAAM,iBAAiB,GAAG,CAAC,QAAQ,EAAE,IAAI,CAAU,CAAC;AACpD,MAAM,WAAW,GAAG,CAAC,SAAS,EAAE,cAAc,CAAU,CAAC;AAEzD,MAAM,UAAU,UAAU,CACxB,OAAgB,EAChB,0BAAsD;IAEtD,OAAO;SACJ,OAAO,CAAC,KAAK,CAAC;SACd,WAAW,CAAC,6DAA6D,CAAC;SAC1E,QAAQ,CAAC,WAAW,EAAE,uBAAuB,CAAC;SAC9C,QAAQ,CAAC,WAAW,EAAE,yCAAyC,CAAC;SAChE,QAAQ,CAAC,MAAM,EAAE,oCAAoC,CAAC;SACtD,MAAM,CAAC,KAAK,EAAE,OAAe,EAAE,OAAe,EAAE,EAAsB,EAAE,EAAE;QACzE,IAAI,CAAC;YACH,MAAM,MAAM,GAAG,MAAM,UAAU,CAAC,0BAA0B,CAAC,CAAC;YAE5D,IAAI,OAAO,KAAK,QAAQ,EAAE,CAAC;gBACzB,IAAI,EAAE,EAAE,CAAC;oBACP,MAAM,IAAI,KAAK,CAAC,uCAAuC,CAAC,CAAC;gBAC3D,CAAC;gBACD,IAAI,CAAC,eAAe,CAAC,QAAQ,CAAC,OAA4B,CAAC,EAAE,CAAC;oBAC5D,MAAM,IAAI,KAAK,CAAC,+BAA+B,OAAO,GAAG,CAAC,CAAC;gBAC7D,CAAC;gBAED,OAAO,CAAC,sBAAsB,CAAC,OAA4B,EAAE,MAAM,CAAC,CAAC,CAAC;gBACtE,OAAO;YACT,CAAC;YAED,IAAI,CAAC,WAAW,CAAC,QAAQ,CAAC,OAA4B,CAAC,EAAE,CAAC;gBACxD,MAAM,IAAI,KAAK,CAAC,wBAAwB,OAAO,GAAG,CAAC,CAAC;YACtD,CAAC;YACD,IAAI,CAAC,iBAAiB,CAAC,QAAQ,CAAC,OAA8B,CAAC,EAAE,CAAC;gBAChE,MAAM,IAAI,KAAK,CAAC,wCAAwC,OAAO,GAAG,CAAC,CAAC;YACtE,CAAC;YACD,IAAI,CAAC,EAAE,EAAE,CAAC;gBACR,MAAM,IAAI,KAAK,CAAC,YAAY,OAAO,mBAAmB,CAAC,CAAC;YAC1D,CAAC;YAED,OAAO,CACL,MAAM,uBAAuB,CAC3B,OAA8B,EAC9B,OAA4B,EAC5B,EAAE,EACF,MAAM,CACP,CACF,CAAC;QACJ,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,YAAY,CAAC,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC;YACrE,WAAW,CAAC,CAAC,CAAC,CAAC;QACjB,CAAC;IACH,CAAC,CAAC,CAAC;AACP,CAAC"}
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
import { Command } from 'commander';
|
|
2
|
+
/**
|
|
3
|
+
* Map of provider names to their expected API key environment variable names.
|
|
4
|
+
* vertexai uses gcloud auth and does not require an API key env var.
|
|
5
|
+
*/
|
|
6
|
+
export declare const providerApiKeyMap: Record<string, string | null>;
|
|
7
|
+
/**
|
|
8
|
+
* Detects which providers have API keys set in the environment.
|
|
9
|
+
* Returns list of provider names with available keys.
|
|
10
|
+
*/
|
|
11
|
+
export declare function detectAvailableProviders(): string[];
|
|
12
|
+
/**
|
|
13
|
+
* Adds the init command to the program
|
|
14
|
+
* @param program - The commander program
|
|
15
|
+
*/
|
|
16
|
+
export declare function initCommand(program: Command): void;
|
|
@@ -0,0 +1,90 @@
|
|
|
1
|
+
import { availableDefaultConfigs } from '@gaunt-sloth/core/config.js';
|
|
2
|
+
import { createProjectConfig } from '#src/commands/configSetup.js';
|
|
3
|
+
import { displayInfo, displayWarning } from '@gaunt-sloth/core/utils/consoleUtils.js';
|
|
4
|
+
import { createInterface, env, stdin, stdout } from '@gaunt-sloth/core/utils/systemUtils.js';
|
|
5
|
+
import { Argument } from 'commander';
|
|
6
|
+
/**
|
|
7
|
+
* Map of provider names to their expected API key environment variable names.
|
|
8
|
+
* vertexai uses gcloud auth and does not require an API key env var.
|
|
9
|
+
*/
|
|
10
|
+
export const providerApiKeyMap = {
|
|
11
|
+
anthropic: 'ANTHROPIC_API_KEY',
|
|
12
|
+
openai: 'OPENAI_API_KEY',
|
|
13
|
+
'google-genai': 'GOOGLE_API_KEY',
|
|
14
|
+
groq: 'GROQ_API_KEY',
|
|
15
|
+
deepseek: 'DEEPSEEK_API_KEY',
|
|
16
|
+
xai: 'XAI_API_KEY',
|
|
17
|
+
openrouter: 'OPEN_ROUTER_API_KEY',
|
|
18
|
+
vertexai: null,
|
|
19
|
+
};
|
|
20
|
+
/**
|
|
21
|
+
* Detects which providers have API keys set in the environment.
|
|
22
|
+
* Returns list of provider names with available keys.
|
|
23
|
+
*/
|
|
24
|
+
export function detectAvailableProviders() {
|
|
25
|
+
const available = [];
|
|
26
|
+
for (const provider of availableDefaultConfigs) {
|
|
27
|
+
const keyName = providerApiKeyMap[provider];
|
|
28
|
+
if (keyName === null) {
|
|
29
|
+
// Provider like vertexai that doesn't need an API key
|
|
30
|
+
available.push(provider);
|
|
31
|
+
}
|
|
32
|
+
else if (keyName && env[keyName]) {
|
|
33
|
+
available.push(provider);
|
|
34
|
+
}
|
|
35
|
+
}
|
|
36
|
+
return available;
|
|
37
|
+
}
|
|
38
|
+
/**
|
|
39
|
+
* Prompts the user to select a provider from a numbered list.
|
|
40
|
+
*/
|
|
41
|
+
async function promptProviderSelection(providers) {
|
|
42
|
+
displayInfo('Available providers:');
|
|
43
|
+
providers.forEach((provider, index) => {
|
|
44
|
+
const keyName = providerApiKeyMap[provider];
|
|
45
|
+
const keyInfo = keyName ? ` (${keyName})` : ' (gcloud auth)';
|
|
46
|
+
displayInfo(` ${index + 1}. ${provider}${keyInfo}`);
|
|
47
|
+
});
|
|
48
|
+
const rl = createInterface({ input: stdin, output: stdout });
|
|
49
|
+
try {
|
|
50
|
+
const answer = await rl.question('\nSelect a provider by number: ');
|
|
51
|
+
const selection = parseInt(answer.trim(), 10);
|
|
52
|
+
if (isNaN(selection) || selection < 1 || selection > providers.length) {
|
|
53
|
+
displayWarning(`Invalid selection. Please enter a number between 1 and ${providers.length}.`);
|
|
54
|
+
rl.close();
|
|
55
|
+
return promptProviderSelection(providers);
|
|
56
|
+
}
|
|
57
|
+
return providers[selection - 1];
|
|
58
|
+
}
|
|
59
|
+
finally {
|
|
60
|
+
rl.close();
|
|
61
|
+
}
|
|
62
|
+
}
|
|
63
|
+
/**
|
|
64
|
+
* Adds the init command to the program
|
|
65
|
+
* @param program - The commander program
|
|
66
|
+
*/
|
|
67
|
+
export function initCommand(program) {
|
|
68
|
+
program
|
|
69
|
+
.command('init')
|
|
70
|
+
.description('Initialize the Gaunt Sloth Assistant in your project. This will write necessary config files.')
|
|
71
|
+
.addArgument(new Argument('[type]', 'Config type (optional, will auto-detect if omitted)').choices(availableDefaultConfigs))
|
|
72
|
+
.action(async (config) => {
|
|
73
|
+
if (config) {
|
|
74
|
+
await createProjectConfig(config);
|
|
75
|
+
}
|
|
76
|
+
else {
|
|
77
|
+
const available = detectAvailableProviders();
|
|
78
|
+
if (available.length === 0) {
|
|
79
|
+
displayWarning('No API keys detected in environment. Available providers: ' +
|
|
80
|
+
availableDefaultConfigs.join(', '));
|
|
81
|
+
displayInfo('Please set an API key environment variable and try again, or run:');
|
|
82
|
+
displayInfo(' gsloth init <type>');
|
|
83
|
+
return;
|
|
84
|
+
}
|
|
85
|
+
const selected = await promptProviderSelection(available);
|
|
86
|
+
await createProjectConfig(selected);
|
|
87
|
+
}
|
|
88
|
+
});
|
|
89
|
+
}
|
|
90
|
+
//# sourceMappingURL=initCommand.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"initCommand.js","sourceRoot":"","sources":["../../src/commands/initCommand.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,106 @@
|
|
|
1
|
+
import { Option } from 'commander';
|
|
2
|
+
import { displayError } from '@gaunt-sloth/core/utils/consoleUtils.js';
|
|
3
|
+
import { setExitCode } from '@gaunt-sloth/core/utils/systemUtils.js';
|
|
4
|
+
import { getCommandProviderInput, getEffectiveContentProvider, getEffectiveRequirementsProvider, getReviewSystemPrompt, } from '#src/commands/commandIntrospection.js';
|
|
5
|
+
import { REQUIREMENTS_PROVIDERS } from './commandUtils.js';
|
|
6
|
+
import jiraLogWork from '#src/helpers/jira/jiraLogWork.js';
|
|
7
|
+
import { wrapContent } from '@gaunt-sloth/core/utils/llmUtils.js';
|
|
8
|
+
import { runPrDiscovery } from '#src/commands/prDiscovery.js';
|
|
9
|
+
import { readMultipleFilesFromProjectDir } from '@gaunt-sloth/review/utils/fileUtils.js';
|
|
10
|
+
export function prCommand(program, commandLineConfigOverrides) {
|
|
11
|
+
program
|
|
12
|
+
.command('pr')
|
|
13
|
+
.description('Review provided Pull Request in current directory. ' +
|
|
14
|
+
'This command is similar to `review`, but default content provider is `github`. ' +
|
|
15
|
+
'(assuming that GitHub CLI is installed and authenticated for current project')
|
|
16
|
+
.argument('[prId]', "Pull request ID to review. Omit both prId and requirementsId to discover the change requirements from the current branch's PR.")
|
|
17
|
+
.argument('[requirementsId]', 'Optional requirements ID argument to retrieve requirements with requirements provider')
|
|
18
|
+
.addOption(new Option('-p, --requirements-provider <requirementsProvider>', 'Requirements provider for this review.').choices(Object.keys(REQUIREMENTS_PROVIDERS)))
|
|
19
|
+
.option('-f, --file [files...]', 'Input files. Content of these files will be added BEFORE the diff, but after requirements')
|
|
20
|
+
.option('-m, --message <message>', 'Extra message to provide just before the content')
|
|
21
|
+
.action(async (prId, requirementsId, options) => {
|
|
22
|
+
const { initConfig } = await import('@gaunt-sloth/core/config.js');
|
|
23
|
+
const config = await initConfig(commandLineConfigOverrides); // Initialize and get config
|
|
24
|
+
const content = [];
|
|
25
|
+
const requirementsProvider = getEffectiveRequirementsProvider('pr', config, options.requirementsProvider);
|
|
26
|
+
const contentProvider = getEffectiveContentProvider('pr', config);
|
|
27
|
+
if (options.file) {
|
|
28
|
+
content.push(readMultipleFilesFromProjectDir(options.file));
|
|
29
|
+
}
|
|
30
|
+
const isDiscovery = !prId && !requirementsId;
|
|
31
|
+
const looksLikeRequirementsOnlyMode = contentProvider === 'github' && Boolean(prId) && !requirementsId && !/^\d+$/.test(prId);
|
|
32
|
+
if (looksLikeRequirementsOnlyMode) {
|
|
33
|
+
displayError(`Unsupported PR command arguments: "${prId}" was provided as the pull request ID. ` +
|
|
34
|
+
'`gth pr <requirementsId>` requirements-only mode is not supported. ' +
|
|
35
|
+
'Use `gth pr` with no arguments to discover change requirements automatically, or provide both a numeric PR ID and requirements ID: `gth pr <prId> <requirementsId>`.');
|
|
36
|
+
setExitCode(1);
|
|
37
|
+
return;
|
|
38
|
+
}
|
|
39
|
+
if (isDiscovery) {
|
|
40
|
+
if (config.commands?.pr?.discovery?.enabled === false) {
|
|
41
|
+
displayError('Change requirements discovery is disabled. Provide a pull request ID to run `gth pr`.');
|
|
42
|
+
setExitCode(1);
|
|
43
|
+
return;
|
|
44
|
+
}
|
|
45
|
+
try {
|
|
46
|
+
const discoveryResult = await runPrDiscovery(config);
|
|
47
|
+
if (discoveryResult.requirements) {
|
|
48
|
+
content.push(wrapContent(discoveryResult.requirements, 'discovered-requirements', 'requirements'));
|
|
49
|
+
}
|
|
50
|
+
if (!discoveryResult.diff) {
|
|
51
|
+
displayError('Change requirements discovery did not produce a diff. Cannot continue with review.');
|
|
52
|
+
setExitCode(1);
|
|
53
|
+
return;
|
|
54
|
+
}
|
|
55
|
+
content.push(wrapContent(discoveryResult.diff, 'discovered-diff', 'GitHub diff'));
|
|
56
|
+
}
|
|
57
|
+
catch (error) {
|
|
58
|
+
displayError(error instanceof Error ? error.message : String(error));
|
|
59
|
+
setExitCode(1);
|
|
60
|
+
return;
|
|
61
|
+
}
|
|
62
|
+
}
|
|
63
|
+
else {
|
|
64
|
+
// Handle requirements
|
|
65
|
+
const requirements = await getCommandProviderInput('pr', 'requirements', requirementsId, config, requirementsProvider);
|
|
66
|
+
if (requirements) {
|
|
67
|
+
content.push(requirements);
|
|
68
|
+
}
|
|
69
|
+
// Get PR diff using the provider
|
|
70
|
+
try {
|
|
71
|
+
const prContent = await getCommandProviderInput('pr', 'content', prId, config, contentProvider);
|
|
72
|
+
// A provider may resolve to an empty result instead of throwing - e.g. ghPrDiffSource
|
|
73
|
+
// returns null (with a warning) for an invalid PR number. Without this guard the review
|
|
74
|
+
// would silently proceed against no diff; fail loudly as the throwing path used to.
|
|
75
|
+
if (!prContent) {
|
|
76
|
+
displayError(`Could not retrieve PR content for "${prId}". Cannot continue with review.`);
|
|
77
|
+
setExitCode(1);
|
|
78
|
+
return;
|
|
79
|
+
}
|
|
80
|
+
content.push(prContent);
|
|
81
|
+
}
|
|
82
|
+
catch (error) {
|
|
83
|
+
displayError(error instanceof Error ? error.message : String(error));
|
|
84
|
+
setExitCode(1);
|
|
85
|
+
return;
|
|
86
|
+
}
|
|
87
|
+
}
|
|
88
|
+
if (options.message) {
|
|
89
|
+
content.push(wrapContent(options.message, 'message', 'user message'));
|
|
90
|
+
}
|
|
91
|
+
const { review } = await import('@gaunt-sloth/review/modules/reviewModule.js');
|
|
92
|
+
const { createResolvers } = await import('@gaunt-sloth/api/resolvers.js');
|
|
93
|
+
// TODO consider including requirements id
|
|
94
|
+
// TODO sanitize prId
|
|
95
|
+
await review(prId ? `PR-${prId}` : 'PR-discovery', getReviewSystemPrompt(config), content.join('\n'), config, 'pr', createResolvers());
|
|
96
|
+
if (requirementsId &&
|
|
97
|
+
(config.commands?.pr?.requirementsProvider ?? config.requirementsProvider) === 'jira' &&
|
|
98
|
+
config.commands?.pr?.logWorkForReviewInSeconds) {
|
|
99
|
+
// TODO we need to figure out some sort of post-processors
|
|
100
|
+
let jiraConfig = config.builtInToolsConfig?.jira ||
|
|
101
|
+
config.requirementsProviderConfig?.jira;
|
|
102
|
+
await jiraLogWork(jiraConfig, requirementsId, config.commands?.pr?.logWorkForReviewInSeconds, 'code review');
|
|
103
|
+
}
|
|
104
|
+
});
|
|
105
|
+
}
|
|
106
|
+
//# sourceMappingURL=prCommand.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"prCommand.js","sourceRoot":"","sources":["../../src/commands/prCommand.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,54 @@
|
|
|
1
|
+
import type { CustomToolsConfig, GthConfig, ServerTool } from '@gaunt-sloth/core/config.js';
|
|
2
|
+
import { type BaseToolkit, StructuredToolInterface } from '@langchain/core/tools';
|
|
3
|
+
export declare const GSLOTH_PR_DISCOVERY_PROMPT = ".gsloth.pr-discovery.md";
|
|
4
|
+
export interface PrDiscoveryConfig {
|
|
5
|
+
/**
|
|
6
|
+
* Enable change requirements discovery when neither PR id nor requirements id is provided.
|
|
7
|
+
* @default true
|
|
8
|
+
*/
|
|
9
|
+
enabled?: boolean;
|
|
10
|
+
/**
|
|
11
|
+
* Fetch the current-branch PR diff with `gh pr diff` before invoking the discovery agent.
|
|
12
|
+
* The discovery agent can still replace it with the `set_diff` tool if needed.
|
|
13
|
+
* @default true
|
|
14
|
+
*/
|
|
15
|
+
deterministicDiff?: boolean;
|
|
16
|
+
/**
|
|
17
|
+
* Optional tool overrides used only while the discovery agent runs.
|
|
18
|
+
* When omitted, the normal configured tools remain available.
|
|
19
|
+
*/
|
|
20
|
+
filesystem?: string[] | 'all' | 'read' | 'none';
|
|
21
|
+
builtInTools?: string[];
|
|
22
|
+
customTools?: CustomToolsConfig | false;
|
|
23
|
+
tools?: StructuredToolInterface[] | BaseToolkit[] | ServerTool[];
|
|
24
|
+
/**
|
|
25
|
+
* Restrict the discovery agent to this allow-list of tool names, applied after every tool
|
|
26
|
+
* source (filesystem, built-in, custom, MCP, A2A, and `tools`) is resolved. Unlike
|
|
27
|
+
* `builtInTools`/`customTools`/`filesystem` (which gate whole tool groups), this trims the
|
|
28
|
+
* final tool set by exact name, so it can pare down MCP server tools
|
|
29
|
+
* (e.g. "mcp__jira__getJiraIssue") and the discovery helper tools
|
|
30
|
+
* ("gh_pr"/"gh_diff"/"gh_issue"/"set_diff") to the minimum needed.
|
|
31
|
+
*
|
|
32
|
+
* `set_requirements` is always retained regardless, since it is how the discovery agent
|
|
33
|
+
* records the requirements it found. When omitted, all resolved tools remain available; an
|
|
34
|
+
* empty array keeps only `set_requirements`. The discovery agent never inherits the
|
|
35
|
+
* top-level {@link GthConfig.allowedTools}; this property is its only allow-list.
|
|
36
|
+
*/
|
|
37
|
+
allowedTools?: string[];
|
|
38
|
+
}
|
|
39
|
+
declare module '@gaunt-sloth/core/config.js' {
|
|
40
|
+
interface PrCommandConfig {
|
|
41
|
+
/** Change requirements discovery (`gth pr` with no arguments) configuration. */
|
|
42
|
+
discovery?: PrDiscoveryConfig;
|
|
43
|
+
}
|
|
44
|
+
}
|
|
45
|
+
/**
|
|
46
|
+
* Read the PR discovery agent prompt, honouring project / identity-profile
|
|
47
|
+
* overrides and falling back to the default prompt shipped with the assistant package.
|
|
48
|
+
*/
|
|
49
|
+
export declare function readPrDiscoveryPrompt(config: Pick<GthConfig, 'identityProfile' | 'noDefaultPrompts'>): string;
|
|
50
|
+
export interface PrDiscoveryResult {
|
|
51
|
+
diff: string;
|
|
52
|
+
requirements: string;
|
|
53
|
+
}
|
|
54
|
+
export declare function runPrDiscovery(config: GthConfig): Promise<PrDiscoveryResult>;
|