gaunt-sloth-assistant 0.3.2 → 0.4.1
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/README.md +39 -53
- package/assets/gaunt-sloth-logo.png +0 -0
- package/assets/release-notes/v0_4_0.md +39 -0
- package/dist/commands/askCommand.js +14 -3
- package/dist/commands/askCommand.js.map +1 -1
- package/dist/commands/reviewCommand.js +13 -10
- package/dist/commands/reviewCommand.js.map +1 -1
- package/dist/config.d.ts +10 -7
- package/dist/config.js +2 -2
- package/dist/config.js.map +1 -1
- package/dist/configs/anthropic.js +3 -4
- package/dist/configs/anthropic.js.map +1 -1
- package/dist/providers/ghIssueProvider.d.ts +8 -0
- package/dist/providers/ghIssueProvider.js +31 -0
- package/dist/providers/ghIssueProvider.js.map +1 -0
- package/dist/providers/ghPrDiffProvider.d.ts +4 -4
- package/dist/providers/ghPrDiffProvider.js +22 -7
- package/dist/providers/ghPrDiffProvider.js.map +1 -1
- package/dist/providers/jiraIssueProvider.js +11 -3
- package/dist/providers/jiraIssueProvider.js.map +1 -1
- package/docs/CONFIGURATION.md +76 -4
- package/docs/DEVELOPMENT.md +1 -2
- package/docs/RELEASE-HOWTO.md +4 -0
- package/eslint.config.js +1 -1
- package/maintenance/doc-maintenance.md +8 -0
- package/package.json +6 -5
- package/report.txt +43 -0
- package/src/commands/askCommand.ts +16 -3
- package/src/commands/reviewCommand.ts +17 -10
- package/src/config.ts +12 -9
- package/src/configs/anthropic.ts +3 -4
- package/src/providers/ghIssueProvider.ts +37 -0
- package/src/providers/ghPrDiffProvider.ts +24 -7
- package/src/providers/jiraIssueProvider.ts +14 -3
- package/tsconfig.json +1 -1
- package/vitest-it.config.ts +14 -0
- package/dist/configs/types.d.ts +0 -14
- package/dist/configs/types.js +0 -2
- package/dist/configs/types.js.map +0 -1
- package/dist/providers/jiraIssueLegacyAccessTokenProvider.d.ts +0 -8
- package/dist/providers/jiraIssueLegacyAccessTokenProvider.js +0 -62
- package/dist/providers/jiraIssueLegacyAccessTokenProvider.js.map +0 -1
package/README.md
CHANGED
@@ -1,9 +1,11 @@
|
|
1
1
|
# Gaunt Sloth Assistant
|
2
2
|
[](https://github.com/andruhon/gaunt-sloth-assistant/actions/workflows/ci.yml)
|
3
3
|
|
4
|
-
Gaunt
|
5
|
-
|
6
|
-
|
4
|
+
Gaunt GSloth Assistant is a lightweight **command line AI assistant** for software developers
|
5
|
+
designed to enhance code review quality while reducing cognitive load and time investment on **code reviews**
|
6
|
+
and pull request diff analysis.
|
7
|
+
|
8
|
+

|
7
9
|
|
8
10
|
Based on [Langchain.js](https://github.com/langchain-ai/langchainjs)
|
9
11
|
|
@@ -12,14 +14,27 @@ Based on [Langchain.js](https://github.com/langchain-ai/langchainjs)
|
|
12
14
|
- Suggests bug fixes;
|
13
15
|
- Explains provided code
|
14
16
|
- Reviews Diffs provided with pipe (|);
|
15
|
-
- You can ask GSloth to review your own code before committing.
|
16
|
-
- Reviews Pull Requests (PRs);
|
17
|
-
- Fetches descriptions (requirements) from Jira
|
17
|
+
- You can ask GSloth to review your own code before committing (`git --no-pager diff | gsloth review`).
|
18
|
+
- Reviews Pull Requests (PRs) (`gsloth pr 42`);
|
19
|
+
- Fetches descriptions (requirements) from Github issue or Jira (`gsloth pr 42 12`);;
|
18
20
|
- Answers questions about provided code;
|
19
21
|
- Writes code;
|
20
|
-
- Saves all responses
|
22
|
+
- Saves all responses in .md file in the project directory;
|
21
23
|
- Anything else you need, when combined with other command line tools.
|
22
24
|
|
25
|
+
## Why?
|
26
|
+
|
27
|
+
While there are many powerful AI assistants available, Gaunt Sloth Assistant stands out by providing developers with:
|
28
|
+
|
29
|
+
1. **Provider flexibility** - Freedom to choose and switch between different AI providers (Google Vertex AI, Anthropic, Groq) based on your specific requirements, performance needs, or compliance policies
|
30
|
+
2. **Open-source transparency** - Complete visibility into how your code and data are processed, with no vendor lock-in
|
31
|
+
3. **Command-line integration** - Seamless workflow integration with existing developer tools and processes
|
32
|
+
4. **Specialized focus** - Purpose-built for code review and PR analysis rather than general-purpose assistance
|
33
|
+
5. **Extensibility** - GSloth is based on LangChain JS and can be easily extended, configured or augmented in different ways.
|
34
|
+
6. **Cost Effectiveness** - When agentic tools will send a number of requests to figure out a user's intent burning thousands of tokens, gsloth simply sends your diff prefixed with guidelines for review.
|
35
|
+
|
36
|
+
Unlike proprietary solutions that restrict you to a single AI provider, Gaunt Sloth empowers developers with choice and control while maintaining the specialized capabilities needed for effective code review.
|
37
|
+
|
23
38
|
### To make GSloth work, you need an **API key** from some AI provider, such as:
|
24
39
|
- Google Vertex AI;
|
25
40
|
- Anthropic;
|
@@ -27,6 +42,8 @@ Based on [Langchain.js](https://github.com/langchain-ai/langchainjs)
|
|
27
42
|
|
28
43
|
## Primary Functions:
|
29
44
|
|
45
|
+
`gth` and `gsloth` commands are used interchangeably, both `gsloth pr 42` and `gth pr 42` do the same thing.
|
46
|
+
|
30
47
|
### Review PR (Pull Request)
|
31
48
|
To review PR by PR number:
|
32
49
|
|
@@ -41,74 +58,43 @@ Type command: `gsloth pr [desired pull request number]`, for example:
|
|
41
58
|
gsloth pr 42
|
42
59
|
```
|
43
60
|
|
44
|
-
Review providing markdown file with requirements and notes.
|
61
|
+
Review PR providing a markdown file with requirements and notes.
|
45
62
|
```shell
|
46
63
|
gsloth pr 42 -f PROJ-1234.md
|
47
64
|
```
|
48
65
|
|
49
|
-
###
|
50
|
-
|
51
|
-
When JIRA integration is configured, the JIRA issue text can be included alongside the diff for review.
|
52
|
-
The project review preamble can be modified to reject a pull request immediately
|
53
|
-
if it appears to implement something different from what was requested in the requirements.
|
66
|
+
### GitHub Issues Integration
|
54
67
|
|
55
|
-
The command syntax is
|
56
|
-
for example, the snippet below does review of PR 42 and
|
57
|
-
supplies description of JIRA issue with number PP-4242:
|
68
|
+
The command syntax is `gsloth pr <prId> [githubIssueId]`. For example, to review PR #42 and include GitHub issue #23 as requirements:
|
58
69
|
|
59
70
|
```shell
|
60
|
-
gsloth pr 42
|
71
|
+
gsloth pr 42 37
|
61
72
|
```
|
62
73
|
|
63
|
-
Gaunt Sloth supports two methods to integrate with JIRA scoped tokens and unscoped tokens:
|
64
|
-
|
65
|
-
#### Modern Jira REST API (Scoped Token)
|
66
|
-
|
67
|
-
This method uses the Atlassian REST API v3 with a Personal Access Token (PAT). It requires your Atlassian Cloud ID.
|
68
|
-
|
69
74
|
**Prerequisites:**
|
70
75
|
|
71
|
-
1.
|
72
|
-
|
73
|
-
2. **Personal Access Token (PAT)**: Create a PAT with the appropriate permissions from `Atlassian Account Settings -> Security -> Create and manage API tokens -> [Create API token with scopes]`.
|
74
|
-
- For issue access, the recommended permission is `read:jira-work` (classic)
|
75
|
-
|
76
|
-
Example configuration:
|
77
|
-
|
78
|
-
```json
|
79
|
-
{
|
80
|
-
"llm": {"type": "vertexai", "model": "gemini-2.5-pro-preview-05-06"},
|
81
|
-
"requirementsProvider": "jira",
|
82
|
-
"requirementsProviderConfig": {
|
83
|
-
"jira": {
|
84
|
-
"username": "username@yourcompany.com",
|
85
|
-
"token": "YOUR_JIRA_PAT_TOKEN",
|
86
|
-
"cloudId": "YOUR_ATLASSIAN_CLOUD_ID"
|
87
|
-
}
|
88
|
-
}
|
89
|
-
}
|
90
|
-
```
|
76
|
+
1. Make sure the official [GitHub CLI (gh)](https://cli.github.com/) is installed and authenticated
|
77
|
+
2. Ensure you have access to the repository's issues
|
91
78
|
|
92
|
-
|
93
|
-
- `JIRA_USERNAME`: Your JIRA username (e.g., `user@yourcompany.com`).
|
94
|
-
- `JIRA_API_PAT_TOKEN`: Your JIRA Personal Access Token with scopes.
|
95
|
-
- `JIRA_CLOUD_ID`: Your Atlassian Cloud ID.
|
79
|
+
No further configuration is needed! Gaunt Sloth will automatically fetch the GitHub issue content using the GitHub CLI.
|
96
80
|
|
97
|
-
|
81
|
+
The project review preamble can be modified to reject a pull request immediately if it appears to implement something different from what was requested in the requirements.
|
98
82
|
|
99
|
-
|
83
|
+
Gaunt Sloth also supports JIRA integration as an alternative requirements provider.
|
84
|
+
For more information on **JIRA** setup and other configuration options, see [CONFIGURATION.md#jira](./docs/CONFIGURATION.md#jira).
|
100
85
|
|
101
86
|
### Review any Diff
|
102
|
-
```shell
|
103
|
-
git --no-pager diff origin/master...yourgitcommithash | gsloth review
|
104
|
-
```
|
105
|
-
(helpful to review a subset of PR)
|
106
87
|
|
107
88
|
Review current local changes:
|
108
89
|
```shell
|
109
90
|
git --no-pager diff | gsloth review
|
110
91
|
```
|
111
92
|
|
93
|
+
```shell
|
94
|
+
git --no-pager diff origin/master...yourgitcommithash | gsloth review
|
95
|
+
```
|
96
|
+
(helpful to review a subset of PR)
|
97
|
+
|
112
98
|
### Question Answering
|
113
99
|
```shell
|
114
100
|
gsloth ask "which types of primitives are available in JavaScript?"
|
Binary file
|
@@ -0,0 +1,39 @@
|
|
1
|
+
# v0.4.0 Add GitHub as Requirements Provider and other improvements
|
2
|
+
|
3
|
+
## New Features
|
4
|
+
|
5
|
+
### GitHub Integration
|
6
|
+
- Added GitHub Issues integration as a default requirements provider
|
7
|
+
- (Breaking change) Renamed 'gh' provider alias to 'github' for consistency
|
8
|
+
- Improved documentation for GitHub integration
|
9
|
+
|
10
|
+
### Enhanced Command Flexibility
|
11
|
+
- Made message argument optional in `ask` command
|
12
|
+
- Added support for reading input from stdin in `ask` command
|
13
|
+
- Added validation to ensure at least one input source is provided (file, stdin, or message)
|
14
|
+
|
15
|
+
## Improvements
|
16
|
+
|
17
|
+
### Configuration
|
18
|
+
- (Potentially breaking change) Updated configuration path structure to use nested 'commands' object
|
19
|
+
- Added comprehensive Configuration Object documentation
|
20
|
+
- Improved configuration validation and error handling
|
21
|
+
|
22
|
+
### Documentation
|
23
|
+
- Added "Why?" section to README explaining the advantages of Gaunt Sloth
|
24
|
+
- Added project logo/banner image
|
25
|
+
- Clarified that both `gth` and `gsloth` commands can be used interchangeably
|
26
|
+
- Reorganized JIRA integration documentation
|
27
|
+
- Enhanced overall presentation and explanation of features
|
28
|
+
- Fixed typos and grammatical errors
|
29
|
+
|
30
|
+
### Development
|
31
|
+
- Added new npm script "it" for running integration tests
|
32
|
+
- Fixed spacing in the "test" script
|
33
|
+
|
34
|
+
## Dependency Updates
|
35
|
+
- Updated @langchain/anthropic from ^0.3.20 to ^0.3.21
|
36
|
+
- Updated eslint-config-prettier from ^9.1.0 to ^10.1.5
|
37
|
+
|
38
|
+
## Bug Fixes
|
39
|
+
- Fixed references to GitHub CLI in the PR command description
|
@@ -1,6 +1,7 @@
|
|
1
1
|
import { readBackstory, readGuidelines } from '#src/prompt.js';
|
2
2
|
import { readMultipleFilesFromCurrentDir } from '#src/utils.js';
|
3
3
|
import { initConfig, slothContext } from '#src/config.js';
|
4
|
+
import { getStringFromStdin } from '#src/systemUtils.js';
|
4
5
|
/**
|
5
6
|
* Adds the ask command to the program
|
6
7
|
* @param program - The commander program
|
@@ -9,16 +10,26 @@ export function askCommand(program) {
|
|
9
10
|
program
|
10
11
|
.command('ask')
|
11
12
|
.description('Ask a question')
|
12
|
-
.argument('
|
13
|
+
.argument('[message]', 'A message')
|
13
14
|
.option('-f, --file [files...]', 'Input files. Content of these files will be added BEFORE the message')
|
14
|
-
// TODO add option consuming extra message as argument
|
15
15
|
.action(async (message, options) => {
|
16
16
|
await initConfig();
|
17
17
|
const preamble = [readBackstory(), readGuidelines(slothContext.config.projectGuidelines)];
|
18
|
-
const content = [
|
18
|
+
const content = [];
|
19
19
|
if (options.file) {
|
20
20
|
content.push(readMultipleFilesFromCurrentDir(options.file));
|
21
21
|
}
|
22
|
+
let stringFromStdin = getStringFromStdin();
|
23
|
+
if (stringFromStdin) {
|
24
|
+
content.push(stringFromStdin);
|
25
|
+
}
|
26
|
+
if (message) {
|
27
|
+
content.push(message);
|
28
|
+
}
|
29
|
+
// Validate that at least one input source is provided
|
30
|
+
if (content.length === 0) {
|
31
|
+
throw new Error('At least one of the following is required: file, stdin, or message');
|
32
|
+
}
|
22
33
|
const { askQuestion } = await import('#src/modules/questionAnsweringModule.js');
|
23
34
|
await askQuestion('ASK', preamble.join('\n'), content.join('\n'));
|
24
35
|
});
|
@@ -1 +1 @@
|
|
1
|
-
{"version":3,"file":"askCommand.js","sourceRoot":"","sources":["../../src/commands/askCommand.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,aAAa,EAAE,cAAc,EAAE,MAAM,gBAAgB,CAAC;AAC/D,OAAO,EAAE,+BAA+B,EAAE,MAAM,eAAe,CAAC;AAChE,OAAO,EAAE,UAAU,EAAE,YAAY,EAAE,MAAM,gBAAgB,CAAC;
|
1
|
+
{"version":3,"file":"askCommand.js","sourceRoot":"","sources":["../../src/commands/askCommand.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,aAAa,EAAE,cAAc,EAAE,MAAM,gBAAgB,CAAC;AAC/D,OAAO,EAAE,+BAA+B,EAAE,MAAM,eAAe,CAAC;AAChE,OAAO,EAAE,UAAU,EAAE,YAAY,EAAE,MAAM,gBAAgB,CAAC;AAC1D,OAAO,EAAE,kBAAkB,EAAE,MAAM,qBAAqB,CAAC;AAMzD;;;GAGG;AACH,MAAM,UAAU,UAAU,CAAC,OAAgB;IACzC,OAAO;SACJ,OAAO,CAAC,KAAK,CAAC;SACd,WAAW,CAAC,gBAAgB,CAAC;SAC7B,QAAQ,CAAC,WAAW,EAAE,WAAW,CAAC;SAClC,MAAM,CACL,uBAAuB,EACvB,sEAAsE,CACvE;SACA,MAAM,CAAC,KAAK,EAAE,OAAe,EAAE,OAA0B,EAAE,EAAE;QAC5D,MAAM,UAAU,EAAE,CAAC;QACnB,MAAM,QAAQ,GAAG,CAAC,aAAa,EAAE,EAAE,cAAc,CAAC,YAAY,CAAC,MAAM,CAAC,iBAAiB,CAAC,CAAC,CAAC;QAC1F,MAAM,OAAO,GAAG,EAAE,CAAC;QACnB,IAAI,OAAO,CAAC,IAAI,EAAE,CAAC;YACjB,OAAO,CAAC,IAAI,CAAC,+BAA+B,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC;QAC9D,CAAC;QACD,IAAI,eAAe,GAAG,kBAAkB,EAAE,CAAC;QAC3C,IAAI,eAAe,EAAE,CAAC;YACpB,OAAO,CAAC,IAAI,CAAC,eAAe,CAAC,CAAC;QAChC,CAAC;QACD,IAAI,OAAO,EAAE,CAAC;YACZ,OAAO,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;QACxB,CAAC;QAED,sDAAsD;QACtD,IAAI,OAAO,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YACzB,MAAM,IAAI,KAAK,CAAC,oEAAoE,CAAC,CAAC;QACxF,CAAC;QAED,MAAM,EAAE,WAAW,EAAE,GAAG,MAAM,MAAM,CAAC,yCAAyC,CAAC,CAAC;QAChF,MAAM,WAAW,CAAC,KAAK,EAAE,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC;IACpE,CAAC,CAAC,CAAC;AACP,CAAC"}
|
@@ -5,19 +5,22 @@ import { readMultipleFilesFromCurrentDir } from '#src/utils.js';
|
|
5
5
|
import { displayError } from '#src/consoleUtils.js';
|
6
6
|
import { getStringFromStdin } from '#src/systemUtils.js';
|
7
7
|
/**
|
8
|
-
* Requirements providers. Expected to be in `.providers/` dir
|
8
|
+
* Requirements providers. Expected to be in `.providers/` dir.
|
9
|
+
* Aliases are mapped to actual providers in this file
|
9
10
|
*/
|
10
11
|
const REQUIREMENTS_PROVIDERS = {
|
11
12
|
'jira-legacy': 'jiraIssueLegacyProvider.js',
|
12
13
|
jira: 'jiraIssueProvider.js',
|
14
|
+
github: 'ghIssueProvider.js',
|
13
15
|
text: 'text.js',
|
14
16
|
file: 'file.js',
|
15
17
|
};
|
16
18
|
/**
|
17
|
-
* Content providers. Expected to be in `.providers/` dir
|
19
|
+
* Content providers. Expected to be in `.providers/` dir.
|
20
|
+
* Aliases are mapped to actual providers in this file
|
18
21
|
*/
|
19
22
|
const CONTENT_PROVIDERS = {
|
20
|
-
|
23
|
+
github: 'ghPrDiffProvider.js',
|
21
24
|
text: 'text.js',
|
22
25
|
file: 'file.js',
|
23
26
|
};
|
@@ -45,10 +48,10 @@ export function reviewCommand(program, context) {
|
|
45
48
|
const content = [];
|
46
49
|
const requirementsId = options.requirements;
|
47
50
|
const requirementsProvider = options.requirementsProvider ??
|
48
|
-
context.config?.review?.requirementsProvider ??
|
51
|
+
context.config?.commands?.review?.requirementsProvider ??
|
49
52
|
context.config?.requirementsProvider;
|
50
53
|
const contentProvider = options.contentProvider ??
|
51
|
-
context.config?.review?.contentProvider ??
|
54
|
+
context.config?.commands?.review?.contentProvider ??
|
52
55
|
context.config?.contentProvider;
|
53
56
|
// TODO consider calling these in parallel
|
54
57
|
const requirements = await getRequirementsFromProvider(requirementsProvider, requirementsId);
|
@@ -75,8 +78,8 @@ export function reviewCommand(program, context) {
|
|
75
78
|
program
|
76
79
|
.command('pr')
|
77
80
|
.description('Review provided Pull Request in current directory. ' +
|
78
|
-
'This command is similar to `review`, but default content provider is `
|
79
|
-
'(assuming that
|
81
|
+
'This command is similar to `review`, but default content provider is `github`. ' +
|
82
|
+
'(assuming that GitHub CLI is installed and authenticated for current project')
|
80
83
|
.argument('<prId>', 'Pull request ID to review.')
|
81
84
|
.argument('[requirementsId]', 'Optional requirements ID argument to retrieve requirements with requirements provider')
|
82
85
|
.addOption(new Option('-p, --requirements-provider <requirementsProvider>', 'Requirements provider for this review.').choices(Object.keys(REQUIREMENTS_PROVIDERS)))
|
@@ -91,7 +94,7 @@ export function reviewCommand(program, context) {
|
|
91
94
|
];
|
92
95
|
const content = [];
|
93
96
|
const requirementsProvider = options.requirementsProvider ??
|
94
|
-
context.config?.pr?.requirementsProvider ??
|
97
|
+
context.config?.commands?.pr?.requirementsProvider ??
|
95
98
|
context.config?.requirementsProvider;
|
96
99
|
// Handle requirements
|
97
100
|
const requirements = await getRequirementsFromProvider(requirementsProvider, requirementsId);
|
@@ -101,8 +104,8 @@ export function reviewCommand(program, context) {
|
|
101
104
|
if (options.file) {
|
102
105
|
content.push(readMultipleFilesFromCurrentDir(options.file));
|
103
106
|
}
|
104
|
-
// Get PR diff using the '
|
105
|
-
const providerPath = `#src/providers/${CONTENT_PROVIDERS['
|
107
|
+
// Get PR diff using the 'github' provider
|
108
|
+
const providerPath = `#src/providers/${CONTENT_PROVIDERS['github']}`;
|
106
109
|
const { get } = await import(providerPath);
|
107
110
|
content.push(await get(null, prId));
|
108
111
|
const { review } = await import('#src/modules/reviewModule.js');
|
@@ -1 +1 @@
|
|
1
|
-
{"version":3,"file":"reviewCommand.js","sourceRoot":"","sources":["../../src/commands/reviewCommand.ts"],"names":[],"mappings":"AAAA,OAAO,EAAW,MAAM,EAAE,MAAM,WAAW,CAAC;AAE5C,OAAO,EAAE,YAAY,EAAE,MAAM,gBAAgB,CAAC;AAC9C,OAAO,EAAE,aAAa,EAAE,cAAc,EAAE,sBAAsB,EAAE,MAAM,gBAAgB,CAAC;AACvF,OAAO,EAAE,+BAA+B,EAAE,MAAM,eAAe,CAAC;AAChE,OAAO,EAAE,YAAY,EAAE,MAAM,sBAAsB,CAAC;AACpD,OAAO,EAAE,kBAAkB,EAAE,MAAM,qBAAqB,CAAC;AAEzD
|
1
|
+
{"version":3,"file":"reviewCommand.js","sourceRoot":"","sources":["../../src/commands/reviewCommand.ts"],"names":[],"mappings":"AAAA,OAAO,EAAW,MAAM,EAAE,MAAM,WAAW,CAAC;AAE5C,OAAO,EAAE,YAAY,EAAE,MAAM,gBAAgB,CAAC;AAC9C,OAAO,EAAE,aAAa,EAAE,cAAc,EAAE,sBAAsB,EAAE,MAAM,gBAAgB,CAAC;AACvF,OAAO,EAAE,+BAA+B,EAAE,MAAM,eAAe,CAAC;AAChE,OAAO,EAAE,YAAY,EAAE,MAAM,sBAAsB,CAAC;AACpD,OAAO,EAAE,kBAAkB,EAAE,MAAM,qBAAqB,CAAC;AAEzD;;;GAGG;AACH,MAAM,sBAAsB,GAAG;IAC7B,aAAa,EAAE,4BAA4B;IAC3C,IAAI,EAAE,sBAAsB;IAC5B,MAAM,EAAE,oBAAoB;IAC5B,IAAI,EAAE,SAAS;IACf,IAAI,EAAE,SAAS;CACP,CAAC;AAIX;;;GAGG;AACH,MAAM,iBAAiB,GAAG;IACxB,MAAM,EAAE,qBAAqB;IAC7B,IAAI,EAAE,SAAS;IACf,IAAI,EAAE,SAAS;CACP,CAAC;AAiBX,MAAM,UAAU,aAAa,CAAC,OAAgB,EAAE,OAAqB;IACnE,OAAO;SACJ,OAAO,CAAC,QAAQ,CAAC;SACjB,WAAW,CAAC,uCAAuC,CAAC;SACpD,QAAQ,CACP,aAAa,EACb,wEAAwE,CACzE;SACA,KAAK,CAAC,GAAG,CAAC;QACX,0DAA0D;SACzD,MAAM,CACL,uBAAuB,EACvB,2FAA2F,CAC5F;QACD,2FAA2F;SAC1F,MAAM,CAAC,mCAAmC,EAAE,+BAA+B,CAAC;SAC5E,SAAS,CACR,IAAI,MAAM,CACR,oDAAoD,EACpD,wCAAwC,CACzC,CAAC,OAAO,CAAC,MAAM,CAAC,IAAI,CAAC,sBAAsB,CAAC,CAAC,CAC/C;SACA,SAAS,CACR,IAAI,MAAM,CAAC,sCAAsC,EAAE,mBAAmB,CAAC,CAAC,OAAO,CAC7E,MAAM,CAAC,IAAI,CAAC,iBAAiB,CAAC,CAC/B,CACF;SACA,MAAM,CAAC,yBAAyB,EAAE,kDAAkD,CAAC;SACrF,MAAM,CAAC,KAAK,EAAE,SAA6B,EAAE,OAA6B,EAAE,EAAE;QAC7E,MAAM,EAAE,UAAU,EAAE,GAAG,MAAM,MAAM,CAAC,gBAAgB,CAAC,CAAC;QACtD,MAAM,UAAU,EAAE,CAAC;QACnB,MAAM,aAAa,GAAG;YACpB,aAAa,EAAE;YACf,cAAc,CAAC,YAAY,CAAC,MAAM,CAAC,iBAAiB,CAAC;YACrD,sBAAsB,CAAC,YAAY,CAAC,MAAM,CAAC,yBAAyB,CAAC;SACtE,CAAC;QACF,MAAM,OAAO,GAAa,EAAE,CAAC;QAC7B,MAAM,cAAc,GAAG,OAAO,CAAC,YAAY,CAAC;QAC5C,MAAM,oBAAoB,GACxB,OAAO,CAAC,oBAAoB;YAC3B,OAAO,CAAC,MAAM,EAAE,QAAQ,EAAE,MAAM,EAAE,oBAErB;YACb,OAAO,CAAC,MAAM,EAAE,oBAA6D,CAAC;QACjF,MAAM,eAAe,GACnB,OAAO,CAAC,eAAe;YACtB,OAAO,CAAC,MAAM,EAAE,QAAQ,EAAE,MAAM,EAAE,eAAmD;YACrF,OAAO,CAAC,MAAM,EAAE,eAAmD,CAAC;QAEvE,0CAA0C;QAC1C,MAAM,YAAY,GAAG,MAAM,2BAA2B,CAAC,oBAAoB,EAAE,cAAc,CAAC,CAAC;QAC7F,IAAI,YAAY,EAAE,CAAC;YACjB,OAAO,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC;QAC7B,CAAC;QAED,MAAM,eAAe,GAAG,MAAM,sBAAsB,CAAC,eAAe,EAAE,SAAS,CAAC,CAAC;QACjF,IAAI,eAAe,EAAE,CAAC;YACpB,OAAO,CAAC,IAAI,CAAC,eAAe,CAAC,CAAC;QAChC,CAAC;QAED,IAAI,OAAO,CAAC,IAAI,EAAE,CAAC;YACjB,OAAO,CAAC,IAAI,CAAC,+BAA+B,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC;QAC9D,CAAC;QACD,IAAI,eAAe,GAAG,kBAAkB,EAAE,CAAC;QAC3C,IAAI,eAAe,EAAE,CAAC;YACpB,OAAO,CAAC,IAAI,CAAC,eAAe,CAAC,CAAC;QAChC,CAAC;QACD,IAAI,OAAO,CAAC,OAAO,EAAE,CAAC;YACpB,OAAO,CAAC,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC;QAChC,CAAC;QACD,MAAM,EAAE,MAAM,EAAE,GAAG,MAAM,MAAM,CAAC,8BAA8B,CAAC,CAAC;QAChE,MAAM,MAAM,CAAC,QAAQ,EAAE,aAAa,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC;IACvE,CAAC,CAAC,CAAC;IAEL,OAAO;SACJ,OAAO,CAAC,IAAI,CAAC;SACb,WAAW,CACV,qDAAqD;QACnD,iFAAiF;QACjF,8EAA8E,CACjF;SACA,QAAQ,CAAC,QAAQ,EAAE,4BAA4B,CAAC;SAChD,QAAQ,CACP,kBAAkB,EAClB,uFAAuF,CACxF;SACA,SAAS,CACR,IAAI,MAAM,CACR,oDAAoD,EACpD,wCAAwC,CACzC,CAAC,OAAO,CAAC,MAAM,CAAC,IAAI,CAAC,sBAAsB,CAAC,CAAC,CAC/C;SACA,MAAM,CACL,uBAAuB,EACvB,2FAA2F,CAC5F;SACA,MAAM,CAAC,KAAK,EAAE,IAAY,EAAE,cAAkC,EAAE,OAAyB,EAAE,EAAE;QAC5F,MAAM,EAAE,UAAU,EAAE,GAAG,MAAM,MAAM,CAAC,gBAAgB,CAAC,CAAC;QACtD,MAAM,UAAU,EAAE,CAAC;QAEnB,MAAM,aAAa,GAAG;YACpB,aAAa,EAAE;YACf,cAAc,CAAC,YAAY,CAAC,MAAM,CAAC,iBAAiB,CAAC;YACrD,sBAAsB,CAAC,YAAY,CAAC,MAAM,CAAC,yBAAyB,CAAC;SACtE,CAAC;QACF,MAAM,OAAO,GAAa,EAAE,CAAC;QAC7B,MAAM,oBAAoB,GACxB,OAAO,CAAC,oBAAoB;YAC3B,OAAO,CAAC,MAAM,EAAE,QAAQ,EAAE,EAAE,EAAE,oBAEjB;YACb,OAAO,CAAC,MAAM,EAAE,oBAA6D,CAAC;QAEjF,sBAAsB;QACtB,MAAM,YAAY,GAAG,MAAM,2BAA2B,CAAC,oBAAoB,EAAE,cAAc,CAAC,CAAC;QAC7F,IAAI,YAAY,EAAE,CAAC;YACjB,OAAO,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC;QAC7B,CAAC;QAED,IAAI,OAAO,CAAC,IAAI,EAAE,CAAC;YACjB,OAAO,CAAC,IAAI,CAAC,+BAA+B,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC;QAC9D,CAAC;QAED,0CAA0C;QAC1C,MAAM,YAAY,GAAG,kBAAkB,iBAAiB,CAAC,QAAQ,CAAC,EAAE,CAAC;QACrE,MAAM,EAAE,GAAG,EAAE,GAAG,MAAM,MAAM,CAAC,YAAY,CAAC,CAAC;QAC3C,OAAO,CAAC,IAAI,CAAC,MAAM,GAAG,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC,CAAC;QAEpC,MAAM,EAAE,MAAM,EAAE,GAAG,MAAM,MAAM,CAAC,8BAA8B,CAAC,CAAC;QAChE,0CAA0C;QAC1C,qBAAqB;QACrB,MAAM,MAAM,CAAC,MAAM,IAAI,EAAE,EAAE,aAAa,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC;IAC3E,CAAC,CAAC,CAAC;IAEL,KAAK,UAAU,2BAA2B,CACxC,oBAA0D,EAC1D,cAAkC;QAElC,OAAO,eAAe,CACpB,oBAAoB,EACpB,cAAc,EACd,CAAC,OAAO,CAAC,MAAM,EAAE,0BAA0B,IAAI,EAAE,CAAC,CAAC,oBAA8B,CAAC,EAClF,sBAAsB,CACvB,CAAC;IACJ,CAAC;IAED,KAAK,UAAU,sBAAsB,CACnC,eAAgD,EAChD,SAA6B;QAE7B,OAAO,eAAe,CACpB,eAAe,EACf,SAAS,EACT,CAAC,OAAO,CAAC,MAAM,EAAE,qBAAqB,IAAI,EAAE,CAAC,CAAC,eAAyB,CAAC,EACxE,iBAAiB,CAClB,CAAC;IACJ,CAAC;IAED,KAAK,UAAU,eAAe,CAC5B,QAAoE,EACpE,EAAsB;IACtB,8DAA8D;IAC9D,MAAW,EACX,wBAAkF;QAElF,IAAI,OAAO,QAAQ,KAAK,QAAQ,EAAE,CAAC;YACjC,sCAAsC;YACtC,IAAI,wBAAwB,CAAC,QAAiD,CAAC,EAAE,CAAC;gBAChF,MAAM,YAAY,GAAG,kBAAkB,wBAAwB,CAAC,QAAiD,CAAC,EAAE,CAAC;gBACrH,MAAM,EAAE,GAAG,EAAE,GAAG,MAAM,MAAM,CAAC,YAAY,CAAC,CAAC;gBAC3C,OAAO,MAAM,GAAG,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC;YAC/B,CAAC;iBAAM,CAAC;gBACN,YAAY,CAAC,qBAAqB,QAAQ,0BAA0B,CAAC,CAAC;YACxE,CAAC;QACH,CAAC;aAAM,IAAI,OAAO,QAAQ,KAAK,UAAU,EAAE,CAAC;YAC1C,yCAAyC;YACzC,OAAO,MAAO,QAAwD,CAAC,EAAE,CAAC,CAAC;QAC7E,CAAC;QACD,OAAO,EAAE,CAAC;IACZ,CAAC;AACH,CAAC"}
|
package/dist/config.d.ts
CHANGED
@@ -8,6 +8,11 @@ export interface SlothConfig extends BaseSlothConfig {
|
|
8
8
|
commands: {
|
9
9
|
pr: {
|
10
10
|
contentProvider: string;
|
11
|
+
requirementsProvider?: string;
|
12
|
+
};
|
13
|
+
review?: {
|
14
|
+
requirementsProvider?: string;
|
15
|
+
contentProvider?: string;
|
11
16
|
};
|
12
17
|
};
|
13
18
|
}
|
@@ -29,14 +34,12 @@ interface BaseSlothConfig {
|
|
29
34
|
commands?: {
|
30
35
|
pr: {
|
31
36
|
contentProvider: string;
|
37
|
+
requirementsProvider?: string;
|
38
|
+
};
|
39
|
+
review?: {
|
40
|
+
requirementsProvider?: string;
|
41
|
+
contentProvider?: string;
|
32
42
|
};
|
33
|
-
};
|
34
|
-
review?: {
|
35
|
-
requirementsProvider?: string;
|
36
|
-
contentProvider?: string;
|
37
|
-
};
|
38
|
-
pr?: {
|
39
|
-
requirementsProvider?: string;
|
40
43
|
};
|
41
44
|
requirementsProviderConfig?: Record<string, unknown>;
|
42
45
|
contentProviderConfig?: Record<string, unknown>;
|
package/dist/config.js
CHANGED
@@ -19,7 +19,8 @@ export const DEFAULT_CONFIG = {
|
|
19
19
|
projectReviewInstructions: PROJECT_REVIEW_INSTRUCTIONS,
|
20
20
|
commands: {
|
21
21
|
pr: {
|
22
|
-
contentProvider: '
|
22
|
+
contentProvider: 'github', // gh pr diff NN
|
23
|
+
requirementsProvider: 'github', // gh issue view NN
|
23
24
|
},
|
24
25
|
},
|
25
26
|
};
|
@@ -30,7 +31,6 @@ export const DEFAULT_CONFIG = {
|
|
30
31
|
*/
|
31
32
|
export const slothContext = {
|
32
33
|
config: DEFAULT_CONFIG,
|
33
|
-
stdin: '',
|
34
34
|
session: { configurable: { thread_id: uuidv4() } },
|
35
35
|
};
|
36
36
|
export async function initConfig() {
|
package/dist/config.js.map
CHANGED
@@ -1 +1 @@
|
|
1
|
-
{"version":3,"file":"config.js","sourceRoot":"","sources":["../src/config.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,EAAE,IAAI,MAAM,EAAE,MAAM,MAAM,CAAC;AACpC,OAAO,EAAE,YAAY,EAAE,YAAY,EAAE,WAAW,EAAE,cAAc,EAAE,MAAM,sBAAsB,CAAC;AAC/F,OAAO,EAAE,kBAAkB,EAAE,gCAAgC,EAAE,MAAM,eAAe,CAAC;AACrF,OAAO,EAAE,UAAU,EAAE,YAAY,EAAE,MAAM,SAAS,CAAC;AACnD,OAAO,EAAE,KAAK,EAAE,IAAI,EAAE,MAAM,qBAAqB,CAAC;AAElD,OAAO,EAAE,wBAAwB,EAAE,uBAAuB,EAAE,MAAM,uBAAuB,CAAC;
|
1
|
+
{"version":3,"file":"config.js","sourceRoot":"","sources":["../src/config.ts"],"names":[],"mappings":"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"}
|
@@ -10,7 +10,7 @@ export async function processJsonConfig(llmConfig) {
|
|
10
10
|
return new anthropic.ChatAnthropic({
|
11
11
|
...llmConfig,
|
12
12
|
apiKey: anthropicApiKey,
|
13
|
-
model: llmConfig.model || 'claude-
|
13
|
+
model: llmConfig.model || 'claude-sonnet-4-20250514',
|
14
14
|
});
|
15
15
|
}
|
16
16
|
const jsContent = `/* eslint-disable */
|
@@ -22,7 +22,7 @@ export async function configure(importFunction, global) {
|
|
22
22
|
return {
|
23
23
|
llm: new anthropic.ChatAnthropic({
|
24
24
|
apiKey: process.env.ANTHROPIC_API_KEY, // Default value, but you can provide the key in many different ways, even as literal
|
25
|
-
model: "claude-
|
25
|
+
model: "claude-sonnet-4-20250514" // Don't forget to check new models availability.
|
26
26
|
})
|
27
27
|
};
|
28
28
|
}
|
@@ -30,8 +30,7 @@ export async function configure(importFunction, global) {
|
|
30
30
|
const jsonContent = `{
|
31
31
|
"llm": {
|
32
32
|
"type": "anthropic",
|
33
|
-
"
|
34
|
-
"model": "claude-3-7-sonnet-20250219"
|
33
|
+
"model": "claude-sonnet-4-20250514"
|
35
34
|
}
|
36
35
|
}`;
|
37
36
|
export function init(configFileName) {
|
@@ -1 +1 @@
|
|
1
|
-
{"version":3,"file":"anthropic.js","sourceRoot":"","sources":["../../src/configs/anthropic.ts"],"names":[],"mappings":"AAAA,OAAO,IAAI,MAAM,WAAW,CAAC;AAC7B,OAAO,EAAE,cAAc,EAAE,MAAM,sBAAsB,CAAC;AACtD,OAAO,EAAE,GAAG,EAAE,aAAa,EAAE,MAAM,qBAAqB,CAAC;AACzD,OAAO,EAAE,gCAAgC,EAAE,MAAM,eAAe,CAAC;AAOjE,oEAAoE;AACpE,MAAM,CAAC,KAAK,UAAU,iBAAiB,CACrC,SAA+C;IAE/C,MAAM,SAAS,GAAG,MAAM,MAAM,CAAC,sBAAsB,CAAC,CAAC;IACvD,wEAAwE;IACxE,MAAM,eAAe,GAAG,GAAG,CAAC,iBAAiB,IAAI,SAAS,CAAC,MAAM,CAAC;IAClE,OAAO,IAAI,SAAS,CAAC,aAAa,CAAC;QACjC,GAAG,SAAS;QACZ,MAAM,EAAE,eAAe;QACvB,KAAK,EAAE,SAAS,CAAC,KAAK,IAAI,
|
1
|
+
{"version":3,"file":"anthropic.js","sourceRoot":"","sources":["../../src/configs/anthropic.ts"],"names":[],"mappings":"AAAA,OAAO,IAAI,MAAM,WAAW,CAAC;AAC7B,OAAO,EAAE,cAAc,EAAE,MAAM,sBAAsB,CAAC;AACtD,OAAO,EAAE,GAAG,EAAE,aAAa,EAAE,MAAM,qBAAqB,CAAC;AACzD,OAAO,EAAE,gCAAgC,EAAE,MAAM,eAAe,CAAC;AAOjE,oEAAoE;AACpE,MAAM,CAAC,KAAK,UAAU,iBAAiB,CACrC,SAA+C;IAE/C,MAAM,SAAS,GAAG,MAAM,MAAM,CAAC,sBAAsB,CAAC,CAAC;IACvD,wEAAwE;IACxE,MAAM,eAAe,GAAG,GAAG,CAAC,iBAAiB,IAAI,SAAS,CAAC,MAAM,CAAC;IAClE,OAAO,IAAI,SAAS,CAAC,aAAa,CAAC;QACjC,GAAG,SAAS;QACZ,MAAM,EAAE,eAAe;QACvB,KAAK,EAAE,SAAS,CAAC,KAAK,IAAI,0BAA0B;KACrD,CAAC,CAAC;AACL,CAAC;AAED,MAAM,SAAS,GAAG;;;;;;;;;;;;;CAajB,CAAC;AAEF,MAAM,WAAW,GAAG;;;;;EAKlB,CAAC;AAEH,MAAM,UAAU,IAAI,CAAC,cAAsB;IACzC,MAAM,UAAU,GAAG,aAAa,EAAE,CAAC;IACnC,IAAI,CAAC,IAAI,CAAC,UAAU,EAAE,cAAc,CAAC,CAAC;IAEtC,yDAAyD;IACzD,MAAM,OAAO,GAAG,cAAc,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,WAAW,CAAC,CAAC,CAAC,SAAS,CAAC;IAE3E,gCAAgC,CAAC,cAAc,EAAE,OAAO,CAAC,CAAC;IAC1D,cAAc,CAAC,2BAA2B,cAAc,iCAAiC,CAAC,CAAC;AAC7F,CAAC"}
|
@@ -0,0 +1,8 @@
|
|
1
|
+
import type { ProviderConfig } from './types.js';
|
2
|
+
/**
|
3
|
+
* Gets GitHub issue using GitHub CLI
|
4
|
+
* @param _ config (unused in this provider)
|
5
|
+
* @param issueId GitHub issue number
|
6
|
+
* @returns GitHub issue content or null if not found
|
7
|
+
*/
|
8
|
+
export declare function get(_: ProviderConfig | null, issueId: string | undefined): Promise<string | null>;
|
@@ -0,0 +1,31 @@
|
|
1
|
+
import { displayWarning } from '#src/consoleUtils.js';
|
2
|
+
import { execAsync } from '#src/utils.js';
|
3
|
+
/**
|
4
|
+
* Gets GitHub issue using GitHub CLI
|
5
|
+
* @param _ config (unused in this provider)
|
6
|
+
* @param issueId GitHub issue number
|
7
|
+
* @returns GitHub issue content or null if not found
|
8
|
+
*/
|
9
|
+
export async function get(_, issueId) {
|
10
|
+
if (!issueId) {
|
11
|
+
displayWarning('No GitHub issue number provided');
|
12
|
+
return null;
|
13
|
+
}
|
14
|
+
try {
|
15
|
+
// Use the GitHub CLI to fetch issue details
|
16
|
+
const issueContent = await execAsync(`gh issue view ${issueId}`);
|
17
|
+
if (!issueContent) {
|
18
|
+
displayWarning(`No content found for GitHub issue #${issueId}`);
|
19
|
+
return null;
|
20
|
+
}
|
21
|
+
return `GitHub Issue: #${issueId}\n\n${issueContent}`;
|
22
|
+
}
|
23
|
+
catch (error) {
|
24
|
+
displayWarning(`
|
25
|
+
Failed to get GitHub issue #${issueId}: ${error instanceof Error ? error.message : String(error)}
|
26
|
+
Consider checking if gh cli (https://cli.github.com/) is installed and authenticated.
|
27
|
+
`);
|
28
|
+
return null;
|
29
|
+
}
|
30
|
+
}
|
31
|
+
//# sourceMappingURL=ghIssueProvider.js.map
|
@@ -0,0 +1 @@
|
|
1
|
+
{"version":3,"file":"ghIssueProvider.js","sourceRoot":"","sources":["../../src/providers/ghIssueProvider.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,cAAc,EAAE,MAAM,sBAAsB,CAAC;AACtD,OAAO,EAAE,SAAS,EAAE,MAAM,eAAe,CAAC;AAG1C;;;;;GAKG;AACH,MAAM,CAAC,KAAK,UAAU,GAAG,CACvB,CAAwB,EACxB,OAA2B;IAE3B,IAAI,CAAC,OAAO,EAAE,CAAC;QACb,cAAc,CAAC,iCAAiC,CAAC,CAAC;QAClD,OAAO,IAAI,CAAC;IACd,CAAC;IAED,IAAI,CAAC;QACH,4CAA4C;QAC5C,MAAM,YAAY,GAAG,MAAM,SAAS,CAAC,iBAAiB,OAAO,EAAE,CAAC,CAAC;QAEjE,IAAI,CAAC,YAAY,EAAE,CAAC;YAClB,cAAc,CAAC,sCAAsC,OAAO,EAAE,CAAC,CAAC;YAChE,OAAO,IAAI,CAAC;QACd,CAAC;QAED,OAAO,kBAAkB,OAAO,OAAO,YAAY,EAAE,CAAC;IACxD,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,cAAc,CAAC;8BACW,OAAO,KAAK,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC;;KAE3F,CAAC,CAAC;QACH,OAAO,IAAI,CAAC;IACd,CAAC;AACH,CAAC"}
|
@@ -1,8 +1,8 @@
|
|
1
1
|
import type { ProviderConfig } from './types.js';
|
2
2
|
/**
|
3
|
-
* Gets PR diff using
|
3
|
+
* Gets PR diff using GitHub CLI
|
4
4
|
* @param _ config (unused in this provider)
|
5
|
-
* @param
|
6
|
-
* @returns PR diff
|
5
|
+
* @param prId GitHub PR number
|
6
|
+
* @returns GitHub PR diff content or null if not found
|
7
7
|
*/
|
8
|
-
export declare function get(_: ProviderConfig | null,
|
8
|
+
export declare function get(_: ProviderConfig | null, prId: string | undefined): Promise<string | null>;
|
@@ -1,16 +1,31 @@
|
|
1
1
|
import { displayWarning } from '#src/consoleUtils.js';
|
2
2
|
import { execAsync } from '#src/utils.js';
|
3
3
|
/**
|
4
|
-
* Gets PR diff using
|
4
|
+
* Gets PR diff using GitHub CLI
|
5
5
|
* @param _ config (unused in this provider)
|
6
|
-
* @param
|
7
|
-
* @returns PR diff
|
6
|
+
* @param prId GitHub PR number
|
7
|
+
* @returns GitHub PR diff content or null if not found
|
8
8
|
*/
|
9
|
-
export async function get(_,
|
10
|
-
if (!
|
11
|
-
displayWarning('No PR provided');
|
9
|
+
export async function get(_, prId) {
|
10
|
+
if (!prId) {
|
11
|
+
displayWarning('No GitHub PR number provided');
|
12
|
+
return null;
|
13
|
+
}
|
14
|
+
try {
|
15
|
+
// Use the GitHub CLI to fetch PR diff
|
16
|
+
const prDiffContent = await execAsync(`gh pr diff ${prId}`);
|
17
|
+
if (!prDiffContent) {
|
18
|
+
displayWarning(`No diff content found for GitHub PR #${prId}`);
|
19
|
+
return null;
|
20
|
+
}
|
21
|
+
return `GitHub PR Diff: #${prId}\n\n${prDiffContent}`;
|
22
|
+
}
|
23
|
+
catch (error) {
|
24
|
+
displayWarning(`
|
25
|
+
Failed to get GitHub PR diff #${prId}: ${error instanceof Error ? error.message : String(error)}
|
26
|
+
Consider checking if gh cli (https://cli.github.com/) is installed and authenticated.
|
27
|
+
`);
|
12
28
|
return null;
|
13
29
|
}
|
14
|
-
return execAsync(`gh pr diff ${pr}`);
|
15
30
|
}
|
16
31
|
//# sourceMappingURL=ghPrDiffProvider.js.map
|
@@ -1 +1 @@
|
|
1
|
-
{"version":3,"file":"ghPrDiffProvider.js","sourceRoot":"","sources":["../../src/providers/ghPrDiffProvider.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,cAAc,EAAE,MAAM,sBAAsB,CAAC;AACtD,OAAO,EAAE,SAAS,EAAE,MAAM,eAAe,CAAC;AAG1C;;;;;GAKG;AACH,MAAM,CAAC,KAAK,UAAU,GAAG,CACvB,CAAwB,EACxB,
|
1
|
+
{"version":3,"file":"ghPrDiffProvider.js","sourceRoot":"","sources":["../../src/providers/ghPrDiffProvider.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,cAAc,EAAE,MAAM,sBAAsB,CAAC;AACtD,OAAO,EAAE,SAAS,EAAE,MAAM,eAAe,CAAC;AAG1C;;;;;GAKG;AACH,MAAM,CAAC,KAAK,UAAU,GAAG,CACvB,CAAwB,EACxB,IAAwB;IAExB,IAAI,CAAC,IAAI,EAAE,CAAC;QACV,cAAc,CAAC,8BAA8B,CAAC,CAAC;QAC/C,OAAO,IAAI,CAAC;IACd,CAAC;IAED,IAAI,CAAC;QACH,sCAAsC;QACtC,MAAM,aAAa,GAAG,MAAM,SAAS,CAAC,cAAc,IAAI,EAAE,CAAC,CAAC;QAE5D,IAAI,CAAC,aAAa,EAAE,CAAC;YACnB,cAAc,CAAC,wCAAwC,IAAI,EAAE,CAAC,CAAC;YAC/D,OAAO,IAAI,CAAC;QACd,CAAC;QAED,OAAO,oBAAoB,IAAI,OAAO,aAAa,EAAE,CAAC;IACxD,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,cAAc,CAAC;gCACa,IAAI,KAAK,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC;;KAE1F,CAAC,CAAC;QACH,OAAO,IAAI,CAAC;IACd,CAAC;AACH,CAAC"}
|
@@ -45,6 +45,7 @@ export async function get(config, issueId) {
|
|
45
45
|
}
|
46
46
|
const summary = issue.fields.summary;
|
47
47
|
const description = issue.fields.description;
|
48
|
+
console.log(JSON.stringify(issue, null, 2));
|
48
49
|
return `Jira Issue: ${issueId}\nSummary: ${summary}\n\nDescription:\n${description}`;
|
49
50
|
}
|
50
51
|
catch (error) {
|
@@ -53,7 +54,11 @@ export async function get(config, issueId) {
|
|
53
54
|
}
|
54
55
|
}
|
55
56
|
/**
|
56
|
-
* Helper function to get Jira issue details using Atlassian REST API
|
57
|
+
* Helper function to get Jira issue details using Atlassian REST API v2.
|
58
|
+
*
|
59
|
+
* The feature was initially developed to use Atlassian REST API v3, which by
|
60
|
+
* default returns the ADF JSON format for description, which is not very useful for us.
|
61
|
+
*
|
57
62
|
* @param config Jira configuration
|
58
63
|
* @param jiraKey Jira issue ID
|
59
64
|
* @returns Jira issue response
|
@@ -61,13 +66,16 @@ export async function get(config, issueId) {
|
|
61
66
|
async function getJiraIssue(config, jiraKey) {
|
62
67
|
// Jira Cloud ID can be found by authenticated user at https://company.atlassian.net/_edge/tenant_info
|
63
68
|
// According to doc https://developer.atlassian.com/cloud/jira/platform/rest/v3/api-group-issues/#api-rest-api-3-issue-issueidorkey-get permissions to read this resource:
|
69
|
+
// https://developer.atlassian.com/cloud/jira/platform/rest/v2/api-group-issues/#api-rest-api-2-issue-issueidorkey-get
|
64
70
|
// either Classic (RECOMMENDED) read:jira-work
|
65
71
|
// or Granular read:issue-meta:jira, read:issue-security-level:jira, read:issue.vote:jira, read:issue.changelog:jira, read:avatar:jira, read:issue:jira, read:status:jira, read:user:jira, read:field-configuration:jira
|
66
|
-
const apiUrl = `https://api.atlassian.com/ex/jira/${config.cloudId}/rest/api/
|
72
|
+
const apiUrl = `https://api.atlassian.com/ex/jira/${config.cloudId}/rest/api/2/issue/${jiraKey}`;
|
67
73
|
if (config.displayUrl) {
|
68
74
|
display(`Loading Jira issue ${config.displayUrl}${jiraKey}`);
|
69
75
|
}
|
70
76
|
display(`Retrieving jira from api ${apiUrl.replace(/^https?:\/\//, '')}`);
|
77
|
+
// This filter will be necessary for V3: `&expand=renderedFields` to convert ADF to HTML
|
78
|
+
const filters = '?fields=summary,description'; // Limit JSON to summary and description
|
71
79
|
// Encode credentials for Basic Authentication header
|
72
80
|
const credentials = `${config.username}:${config.token}`;
|
73
81
|
const encodedCredentials = Buffer.from(credentials).toString('base64');
|
@@ -78,7 +86,7 @@ async function getJiraIssue(config, jiraKey) {
|
|
78
86
|
Accept: 'application/json; charset=utf-8',
|
79
87
|
'Accept-Language': 'en-US,en;q=0.9', // Prevents errors in other languages
|
80
88
|
};
|
81
|
-
const response = await fetch(apiUrl, {
|
89
|
+
const response = await fetch(apiUrl + filters, {
|
82
90
|
method: 'GET',
|
83
91
|
headers: headers,
|
84
92
|
});
|
@@ -1 +1 @@
|
|
1
|
-
{"version":3,"file":"jiraIssueProvider.js","sourceRoot":"","sources":["../../src/providers/jiraIssueProvider.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,YAAY,EAAE,cAAc,EAAE,MAAM,sBAAsB,CAAC;AAC7E,OAAO,EAAE,GAAG,EAAE,MAAM,qBAAqB,CAAC;
|
1
|
+
{"version":3,"file":"jiraIssueProvider.js","sourceRoot":"","sources":["../../src/providers/jiraIssueProvider.ts"],"names":[],"mappings":"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"}
|