4 Commits

Author SHA1 Message Date
7becf99be2 Update .github/issue_template/ai-refinement.md
All checks were successful
Publish Library / Build NPM Project (push) Successful in 8s
Publish Library / Tag Version (push) Successful in 5s
2026-01-14 12:11:07 -05:00
99a1e55471 Merge pull request 'Check for duplicates before adding tickets' (#12) from ticket-duplicates into master
All checks were successful
Publish Library / Build NPM Project (push) Successful in 6s
Publish Library / Tag Version (push) Successful in 7s
Reviewed-on: #12
2025-12-31 00:02:18 -05:00
23cb66544e Fixed more bugs
Some checks failed
Publish Library / Build NPM Project (push) Successful in 3s
Code review / review (pull_request) Has been cancelled
Publish Library / Tag Version (push) Successful in 7s
2025-12-31 00:01:55 -05:00
9e5372f37b Fixed more bugs
All checks were successful
Publish Library / Build NPM Project (push) Successful in 3s
Publish Library / Tag Version (push) Successful in 13s
Code review / review (pull_request) Successful in 58s
2025-12-30 23:55:21 -05:00
4 changed files with 16 additions and 8 deletions

View File

@@ -16,4 +16,4 @@ How can it be fixed or improved?
Steps to reproduce? Steps to reproduce?
Anything other useful information, logs or screenshots? Any other useful information? Logs, screenshots, steps to reproduce?

View File

@@ -1,6 +1,6 @@
{ {
"name": "@ztimson/ai-agents", "name": "@ztimson/ai-agents",
"version": "0.0.8", "version": "0.1.0",
"description": "AI agents", "description": "AI agents",
"keywords": ["ai", "review"], "keywords": ["ai", "review"],
"author": "ztimson", "author": "ztimson",

View File

@@ -32,7 +32,7 @@ dotenv.config({path: '.env.local', override: true, quiet: true});
if(resp.ok) return resp.json(); if(resp.ok) return resp.json();
else throw new Error(`${resp.status} ${await resp.text()}`); else throw new Error(`${resp.status} ${await resp.text()}`);
}); });
if(issueData.labels.length !== 1 || issueData.labels?.[0] !== 'Review/AI') { if(issueData.labels?.[0] !== 1 || issueData.labels?.[0]?.name !== 'Review/AI') {
console.log('Skipping'); console.log('Skipping');
return process.exit(); return process.exit();
} }
@@ -150,11 +150,13 @@ Output ONLY markdown. No explanations, labels, or extra formatting.`});
if(!body) throw new Error('Invalid response from AI'); if(!body) throw new Error('Invalid response from AI');
// Check for duplicates // Check for duplicates
const repoInfo = await fetch(`${git}/api/v1/repos/${owner}/${repo}`, {headers: {'Authorization': `token ${auth}`},}).then(resp => resp.ok ? resp.json() : null);
const search = await fetch(`${git}/api/v1/repos/issues/search`, { const search = await fetch(`${git}/api/v1/repos/issues/search`, {
method: 'POST', method: 'POST',
headers: {'Authorization': `token ${auth}`, 'Content-Type': 'application/json'}, headers: {'Authorization': `token ${auth}`, 'Content-Type': 'application/json'},
body: JSON.stringify({ body: JSON.stringify({
priority_repo_id: repo, owner,
priority_repo_id: repoInfo.id,
type: 'issues', type: 'issues',
limit: 3, limit: 3,
q: title q: title
@@ -167,7 +169,7 @@ Output ONLY markdown. No explanations, labels, or extra formatting.`});
system: `Your job is to identify duplicates. Respond with the ID number of the duplicate or nothing if there are no matches \n\n${dupes}` system: `Your job is to identify duplicates. Respond with the ID number of the duplicate or nothing if there are no matches \n\n${dupes}`
}))?.pop()?.content; }))?.pop()?.content;
// Handle duplicates // Handle duplicates
if(!!hasDuplicates && (dupeId = dupeIds.find(id => hasDuplicates.includes(id.toString()))) != null) { if(!!hasDuplicates && (dupeId = dupeIds.find(id => new RegExp(`\\b${id}\\b`, 'm').test(hasDuplicates)))) {
await fetch(`${git}/api/v1/repos/${owner}/${repo}/issues/${ticket}/comments`, { await fetch(`${git}/api/v1/repos/${owner}/${repo}/issues/${ticket}/comments`, {
method: 'POST', method: 'POST',
headers: {'Authorization': `token ${auth}`, 'Content-Type': 'application/json'}, headers: {'Authorization': `token ${auth}`, 'Content-Type': 'application/json'},
@@ -188,7 +190,7 @@ Output ONLY markdown. No explanations, labels, or extra formatting.`});
} }
// Update ticket // Update ticket
const updateRes = await fetch(`${git}/api/v1/repos/${owner}/${repo}/issues/${ticket}`, { await fetch(`${git}/api/v1/repos/${owner}/${repo}/issues/${ticket}`, {
method: 'PATCH', method: 'PATCH',
headers: {'Authorization': `token ${auth}`, 'Content-Type': 'application/json'}, headers: {'Authorization': `token ${auth}`, 'Content-Type': 'application/json'},
body: JSON.stringify({title, body}) body: JSON.stringify({title, body})
@@ -202,4 +204,7 @@ Output ONLY markdown. No explanations, labels, or extra formatting.`});
} }
console.log(`Title: ${title}\nType: ${type}\nBody:\n${body}`); console.log(`Title: ${title}\nType: ${type}\nBody:\n${body}`);
})(); })().catch(err => {
console.error(`Error: ${err.message || err.toString()}`);
process.exit(1);
});

View File

@@ -106,4 +106,7 @@ dotenv.config({path: '.env.local', override: true, quiet: true, debug: false});
if(!res.ok) throw new Error(`${res.status} ${await res.text()}`); if(!res.ok) throw new Error(`${res.status} ${await res.text()}`);
} }
console.log(comments.map(c => `${c.path}${c.new_position ? `:${c.new_position}` : ''}\n${c.body}`).join('\n\n') + '\n\n' + summary); console.log(comments.map(c => `${c.path}${c.new_position ? `:${c.new_position}` : ''}\n${c.body}`).join('\n\n') + '\n\n' + summary);
})(); })().catch(err => {
console.error(`Error: ${err.message || err.toString()}`);
process.exit(1);
});