Some checks failed
Build and Release / Create Release (push) Has been skipped
Build and Release / Unit Tests (push) Failing after 52s
Build and Release / Integration Tests (PostgreSQL) (push) Failing after 1m21s
Build and Release / Lint (push) Failing after 1m53s
Build and Release / Build Binaries (amd64, linux, linux-latest) (push) Has been skipped
Build and Release / Build Binaries (amd64, windows, windows-latest) (push) Has been skipped
Build and Release / Build Binaries (amd64, darwin, macos) (push) Has been skipped
Build and Release / Build Binaries (arm64, darwin, macos) (push) Has been skipped
Build and Release / Build Binary (linux/arm64) (push) Has been skipped
- Replace fmt.Errorf with errors.New for static error messages - Use modules/json instead of encoding/json (depguard) - Add nolint:dupl for intentionally similar API handlers - Explicitly ignore Session.Set return values (errcheck) - Apply gofmt formatting 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
207 lines
7.4 KiB
Go
207 lines
7.4 KiB
Go
// Copyright 2026 MarketAlly. All rights reserved.
|
|
// SPDX-License-Identifier: MIT
|
|
|
|
package ai
|
|
|
|
// FileDiff represents a file diff for code review
|
|
type FileDiff struct {
|
|
Path string `json:"path"`
|
|
OldPath string `json:"old_path,omitempty"`
|
|
Status string `json:"status"` // added, modified, deleted, renamed
|
|
Patch string `json:"patch"`
|
|
Content string `json:"content,omitempty"`
|
|
Language string `json:"language,omitempty"`
|
|
}
|
|
|
|
// ReviewOptions contains options for code review
|
|
type ReviewOptions struct {
|
|
CheckSecurity bool `json:"check_security"`
|
|
CheckPerformance bool `json:"check_performance"`
|
|
CheckStyle bool `json:"check_style"`
|
|
CheckTests bool `json:"check_tests"`
|
|
SuggestImprovements bool `json:"suggest_improvements"`
|
|
FocusAreas string `json:"focus_areas,omitempty"`
|
|
LanguageHints string `json:"language_hints,omitempty"`
|
|
}
|
|
|
|
// ReviewComment represents a code review comment
|
|
type ReviewComment struct {
|
|
Path string `json:"path"`
|
|
Line int `json:"line"`
|
|
EndLine int `json:"end_line,omitempty"`
|
|
Body string `json:"body"`
|
|
Severity string `json:"severity"` // info, warning, error, critical
|
|
Category string `json:"category"` // security, performance, style, bug
|
|
SuggestedFix string `json:"suggested_fix,omitempty"`
|
|
}
|
|
|
|
// SecurityIssue represents a security issue found during review
|
|
type SecurityIssue struct {
|
|
Path string `json:"path"`
|
|
Line int `json:"line"`
|
|
IssueType string `json:"issue_type"`
|
|
Description string `json:"description"`
|
|
Severity string `json:"severity"`
|
|
Remediation string `json:"remediation"`
|
|
}
|
|
|
|
// SecurityAnalysis contains security analysis results
|
|
type SecurityAnalysis struct {
|
|
Issues []SecurityIssue `json:"issues"`
|
|
RiskScore int `json:"risk_score"`
|
|
Summary string `json:"summary"`
|
|
}
|
|
|
|
// ReviewPullRequestRequest is the request for reviewing a pull request
|
|
type ReviewPullRequestRequest struct {
|
|
RepoID int64 `json:"repo_id"`
|
|
PullRequestID int64 `json:"pull_request_id"`
|
|
BaseBranch string `json:"base_branch"`
|
|
HeadBranch string `json:"head_branch"`
|
|
Files []FileDiff `json:"files"`
|
|
PRTitle string `json:"pr_title"`
|
|
PRDescription string `json:"pr_description"`
|
|
Options ReviewOptions `json:"options"`
|
|
}
|
|
|
|
// ReviewPullRequestResponse is the response from reviewing a pull request
|
|
type ReviewPullRequestResponse struct {
|
|
Summary string `json:"summary"`
|
|
Comments []ReviewComment `json:"comments"`
|
|
Verdict string `json:"verdict"` // approve, request_changes, comment
|
|
Suggestions []string `json:"suggestions"`
|
|
Security SecurityAnalysis `json:"security"`
|
|
EstimatedReviewMinutes int `json:"estimated_review_minutes"`
|
|
}
|
|
|
|
// TriageIssueRequest is the request for triaging an issue
|
|
type TriageIssueRequest struct {
|
|
RepoID int64 `json:"repo_id"`
|
|
IssueID int64 `json:"issue_id"`
|
|
Title string `json:"title"`
|
|
Body string `json:"body"`
|
|
ExistingLabels []string `json:"existing_labels"`
|
|
AvailableLabels []string `json:"available_labels"`
|
|
}
|
|
|
|
// TriageIssueResponse is the response from triaging an issue
|
|
type TriageIssueResponse struct {
|
|
Priority string `json:"priority"` // critical, high, medium, low
|
|
Category string `json:"category"` // bug, feature, question, docs
|
|
SuggestedLabels []string `json:"suggested_labels"`
|
|
SuggestedAssignees []string `json:"suggested_assignees"`
|
|
Summary string `json:"summary"`
|
|
IsDuplicate bool `json:"is_duplicate"`
|
|
DuplicateOf int64 `json:"duplicate_of,omitempty"`
|
|
}
|
|
|
|
// SuggestLabelsRequest is the request for suggesting labels
|
|
type SuggestLabelsRequest struct {
|
|
RepoID int64 `json:"repo_id"`
|
|
Title string `json:"title"`
|
|
Body string `json:"body"`
|
|
AvailableLabels []string `json:"available_labels"`
|
|
}
|
|
|
|
// LabelSuggestion represents a suggested label
|
|
type LabelSuggestion struct {
|
|
Label string `json:"label"`
|
|
Confidence float32 `json:"confidence"`
|
|
Reason string `json:"reason"`
|
|
}
|
|
|
|
// SuggestLabelsResponse is the response from suggesting labels
|
|
type SuggestLabelsResponse struct {
|
|
Suggestions []LabelSuggestion `json:"suggestions"`
|
|
}
|
|
|
|
// ExplainCodeRequest is the request for explaining code
|
|
type ExplainCodeRequest struct {
|
|
RepoID int64 `json:"repo_id"`
|
|
FilePath string `json:"file_path"`
|
|
Code string `json:"code"`
|
|
StartLine int `json:"start_line"`
|
|
EndLine int `json:"end_line"`
|
|
Question string `json:"question,omitempty"`
|
|
}
|
|
|
|
// CodeReference represents a reference to related documentation
|
|
type CodeReference struct {
|
|
Description string `json:"description"`
|
|
URL string `json:"url"`
|
|
}
|
|
|
|
// ExplainCodeResponse is the response from explaining code
|
|
type ExplainCodeResponse struct {
|
|
Explanation string `json:"explanation"`
|
|
KeyConcepts []string `json:"key_concepts"`
|
|
References []CodeReference `json:"references"`
|
|
}
|
|
|
|
// GenerateDocumentationRequest is the request for generating documentation
|
|
type GenerateDocumentationRequest struct {
|
|
RepoID int64 `json:"repo_id"`
|
|
FilePath string `json:"file_path"`
|
|
Code string `json:"code"`
|
|
DocType string `json:"doc_type"` // function, class, module, api
|
|
Language string `json:"language"`
|
|
Style string `json:"style"` // jsdoc, docstring, xml, markdown
|
|
}
|
|
|
|
// DocumentationSection represents a section of documentation
|
|
type DocumentationSection struct {
|
|
Title string `json:"title"`
|
|
Content string `json:"content"`
|
|
}
|
|
|
|
// GenerateDocumentationResponse is the response from generating documentation
|
|
type GenerateDocumentationResponse struct {
|
|
Documentation string `json:"documentation"`
|
|
Sections []DocumentationSection `json:"sections"`
|
|
}
|
|
|
|
// GenerateCommitMessageRequest is the request for generating a commit message
|
|
type GenerateCommitMessageRequest struct {
|
|
RepoID int64 `json:"repo_id"`
|
|
Files []FileDiff `json:"files"`
|
|
Style string `json:"style"` // conventional, descriptive, brief
|
|
}
|
|
|
|
// GenerateCommitMessageResponse is the response from generating a commit message
|
|
type GenerateCommitMessageResponse struct {
|
|
Message string `json:"message"`
|
|
Alternatives []string `json:"alternatives"`
|
|
}
|
|
|
|
// SummarizeChangesRequest is the request for summarizing changes
|
|
type SummarizeChangesRequest struct {
|
|
RepoID int64 `json:"repo_id"`
|
|
Files []FileDiff `json:"files"`
|
|
Context string `json:"context"`
|
|
}
|
|
|
|
// SummarizeChangesResponse is the response from summarizing changes
|
|
type SummarizeChangesResponse struct {
|
|
Summary string `json:"summary"`
|
|
BulletPoints []string `json:"bullet_points"`
|
|
ImpactAssessment string `json:"impact_assessment"`
|
|
}
|
|
|
|
// HealthCheckResponse is the response from a health check
|
|
type HealthCheckResponse struct {
|
|
Healthy bool `json:"healthy"`
|
|
Version string `json:"version"`
|
|
ProviderStatus map[string]string `json:"provider_status"`
|
|
License *LicenseInfo `json:"license,omitempty"`
|
|
}
|
|
|
|
// LicenseInfo contains AI service license information
|
|
type LicenseInfo struct {
|
|
Tier string `json:"tier"`
|
|
Customer string `json:"customer"`
|
|
ExpiresAt string `json:"expires_at"`
|
|
Features []string `json:"features"`
|
|
SeatCount int `json:"seat_count"`
|
|
IsTrial bool `json:"is_trial"`
|
|
}
|