feat(ipuaro): implement v0.1.0 foundation

- Project setup with tsup, vitest, ESM support
- Domain entities: Session, Project
- Value objects: FileData, FileAST, FileMeta, ChatMessage, ToolCall, ToolResult, UndoEntry
- Service interfaces: IStorage, ILLMClient, ITool, IIndexer, IToolRegistry
- Shared: Config (zod), IpuaroError, utils (hash, tokens), Result type
- CLI with placeholder commands (start, init, index)
- 91 unit tests with 100% coverage
- Fix package scope @puaros -> @samiyev in CLAUDE.md
This commit is contained in:
imfozilbek
2025-11-29 23:08:38 +05:00
parent 7f6180df37
commit 130a8c4f24
62 changed files with 4629 additions and 6 deletions

View File

@@ -0,0 +1,78 @@
/**
* Error types for ipuaro.
*/
export type ErrorType =
| "redis"
| "parse"
| "llm"
| "file"
| "command"
| "conflict"
| "validation"
| "timeout"
| "unknown"
/**
* Base error class for ipuaro.
*/
export class IpuaroError extends Error {
readonly type: ErrorType
readonly recoverable: boolean
readonly suggestion?: string
constructor(type: ErrorType, message: string, recoverable = true, suggestion?: string) {
super(message)
this.name = "IpuaroError"
this.type = type
this.recoverable = recoverable
this.suggestion = suggestion
}
static redis(message: string): IpuaroError {
return new IpuaroError(
"redis",
message,
false,
"Please ensure Redis is running: redis-server",
)
}
static parse(message: string, filePath?: string): IpuaroError {
const msg = filePath ? `${message} in ${filePath}` : message
return new IpuaroError("parse", msg, true, "File will be skipped")
}
static llm(message: string): IpuaroError {
return new IpuaroError(
"llm",
message,
true,
"Please ensure Ollama is running and model is available",
)
}
static file(message: string): IpuaroError {
return new IpuaroError("file", message, true)
}
static command(message: string): IpuaroError {
return new IpuaroError("command", message, true)
}
static conflict(message: string): IpuaroError {
return new IpuaroError(
"conflict",
message,
true,
"File was modified externally. Regenerate or skip.",
)
}
static validation(message: string): IpuaroError {
return new IpuaroError("validation", message, true)
}
static timeout(message: string): IpuaroError {
return new IpuaroError("timeout", message, true, "Try again or increase timeout")
}
}

View File

@@ -0,0 +1,2 @@
// Shared errors
export * from "./IpuaroError.js"