andy-stack_vaultkeeper-ai/package.json
Andrew Beal 2d5a1b52bf feat: add interactive diff viewer with user approval workflow
Implement a comprehensive diff viewing system that allows users to review and approve/reject file changes before they're applied. The system includes event-driven architecture for managing diff lifecycle and integrates diff2html for rich visual diffs.

Key changes:
- Add DiffService for managing diff approval workflow with accept/reject/suggest actions
- Create EventService for type-safe event handling (DiffOpened/DiffClosed)
- Add DiffView component with diff2html integration for visual diff rendering
- Modify VaultService to propose changes and require confirmation before file operations
- Update FileSystemService to support optional confirmation for write operations
- Add Event enum for centralized event type definitions
- Import custom styles and diff2html styles for proper diff rendering
- Update ConversationContent validation to support optional toolId field
- Remove FileManager from dependency injection (now accessed directly from app)
- Update .gitignore to track styles.css instead of main.css
2025-11-24 21:29:54 +00:00

75 lines
2 KiB
JSON

{
"name": "vaultkeeper-ai",
"version": "1.0.0",
"description": "AI powered agent assistant.",
"main": "main.js",
"type": "module",
"scripts": {
"dev": "node esbuild.config.mjs",
"build": "tsc -noEmit -skipLibCheck && node esbuild.config.mjs production",
"version": "node version-bump.mjs && git add manifest.json versions.json",
"svelte-check": "svelte-check --tsconfig tsconfig.json",
"lint": "eslint .",
"lint:fix": "eslint . --fix",
"test": "vitest run",
"test:watch": "vitest",
"test:ui": "vitest --ui",
"test:coverage": "vitest run --coverage"
},
"keywords": [],
"author": "",
"license": "MIT",
"devDependencies": {
"@eslint/js": "^9.39.1",
"@testing-library/svelte": "^5.2.9",
"@types/express": "^5.0.5",
"@types/node": "^24.10.1",
"@types/path-browserify": "^1.0.3",
"@typescript-eslint/eslint-plugin": "8.47.0",
"@typescript-eslint/parser": "8.47.0",
"@vitest/ui": "^4.0.13",
"builtin-modules": "5.0.0",
"esbuild": "^0.27.0",
"esbuild-svelte": "^0.9.3",
"eslint": "^9.39.1",
"eslint-plugin-eslint-comments": "^3.2.0",
"eslint-plugin-obsidianmd": "^0.1.9",
"happy-dom": "^20.0.10",
"obsidian": "latest",
"svelte": "^5.43.14",
"svelte-check": "^4.3.4",
"svelte-preprocess": "^6.0.3",
"tslib": "2.8.1",
"typescript": "^5.9.3",
"vitest": "^4.0.13"
},
"dependencies": {
"@anthropic-ai/sdk": "^0.70.1",
"@google/genai": "^1.30.0",
"@shikijs/rehype": "^3.15.0",
"core-js": "^3.47.0",
"diff": "^8.0.2",
"diff2html": "^3.4.52",
"express": "^5.1.0",
"fuzzysort": "^3.1.0",
"gpt-tokenizer": "^3.4.0",
"highlight.js": "^11.11.1",
"katex": "^0.16.25",
"lowlight": "^3.3.0",
"openai": "^6.9.1",
"path-browserify": "^1.0.1",
"regex-parser": "^2.3.1",
"rehype-highlight": "^7.0.2",
"rehype-katex": "^7.0.1",
"rehype-stringify": "^10.0.1",
"remark-emoji": "^5.0.2",
"remark-gfm": "^4.0.1",
"remark-math": "^6.0.0",
"remark-parse": "^11.0.0",
"remark-rehype": "^11.1.2",
"remark-wiki-link": "^2.0.1",
"unified": "^11.0.5",
"uuid": "^13.0.0",
"zod": "^4.1.12"
}
}