papayu/desktop/ui/src/lib/analyze.ts
2026-01-29 12:21:43 +03:00

110 lines
2.2 KiB
TypeScript

import { invoke } from '@tauri-apps/api/core';
export type ActionKind =
| 'create_file'
| 'update_file'
| 'delete_file'
| 'create_dir'
| 'delete_dir';
export interface Action {
id: string;
title: string;
description: string;
kind: ActionKind;
path: string;
content?: string | null;
}
export interface ApplyResult {
ok: boolean;
session_id: string;
applied: string[];
skipped: string[];
error?: string | null;
error_code?: string | null;
undo_available: boolean;
}
export interface UndoResult {
ok: boolean;
session_id: string;
restored: string[];
error?: string | null;
error_code?: string | null;
}
export type DiffItem = {
path: string;
kind: 'create' | 'update' | 'delete' | 'mkdir' | 'rmdir' | string;
before?: string | null;
after?: string | null;
summary: string;
};
export type PreviewResult = {
ok: boolean;
diffs: DiffItem[];
error?: string | null;
error_code?: string | null;
};
export interface ProjectStructure {
project_type: string;
architecture: string;
structure_notes: string[];
}
export interface ProjectContext {
stack: string[];
domain: string;
maturity: string;
complexity: string;
risk_level: string;
}
export interface LlmContext {
concise_summary: string;
key_risks: string[];
top_recommendations: string[];
signals: ProjectSignal[];
}
export interface ProjectSignal {
category: string;
level: string;
message: string;
}
export interface Recommendation {
title: string;
details: string;
priority: string;
effort: string;
impact: string;
}
export interface AnalyzeReport {
path: string;
narrative: string;
stats: {
file_count: number;
dir_count: number;
total_size_bytes: number;
top_extensions: [string, number][];
max_depth: number;
};
structure: ProjectStructure;
project_context: ProjectContext;
findings: { severity: string; title: string; details: string }[];
recommendations: Recommendation[];
actions?: Action[];
signals: ProjectSignal[];
report_md: string;
llm_context: LlmContext;
}
export async function analyzeProject(path: string): Promise<AnalyzeReport> {
return invoke<AnalyzeReport>('analyze_project', { path });
}