mirror of
https://github.com/waynesutton/markdown-site.git
synced 2026-01-12 04:09:14 +00:00
Add AI writing assistant (Agent) powered by Anthropic Claude API. Agent can be enabled on Write page (replaces textarea) and optionally in RightSidebar on posts/pages via frontmatter. Features: - AIChatView component with per-page chat history - Page content context support for AI responses - Markdown rendering for AI responses - User-friendly error handling for missing API keys - System prompt configurable via Convex environment variables - Anonymous session authentication using localStorage Environment variables required: - ANTHROPIC_API_KEY (required) - CLAUDE_PROMPT_STYLE, CLAUDE_PROMPT_COMMUNITY, CLAUDE_PROMPT_RULES (optional split prompts) - CLAUDE_SYSTEM_PROMPT (optional single prompt fallback) Configuration: - siteConfig.aiChat.enabledOnWritePage: Enable Agent toggle on /write page - siteConfig.aiChat.enabledOnContent: Allow Agent on posts/pages via frontmatter - Frontmatter aiChat: true (requires rightSidebar: true) Updated files: - src/components/AIChatView.tsx: AI chat interface component - src/components/RightSidebar.tsx: Conditional Agent rendering - src/pages/Write.tsx: Agent mode toggle (title changes to Agent) - convex/aiChats.ts: Chat history queries and mutations - convex/aiChatActions.ts: Claude API integration with error handling - convex/schema.ts: aiChats table with indexes - src/config/siteConfig.ts: AIChatConfig interface - Documentation updated across all files Documentation: - files.md: Updated component descriptions - changelog.md: Added v1.33.0 entry - TASK.md: Marked AI chat tasks as completed - README.md: Added AI Agent Chat section - content/pages/docs.md: Added AI Agent chat documentation - content/blog/setup-guide.md: Added AI Agent chat setup instructions - public/raw/changelog.md: Added v1.33.0 entry
61 lines
2.0 KiB
JSON
61 lines
2.0 KiB
JSON
{
|
|
"name": "markdown-site",
|
|
"private": true,
|
|
"version": "1.0.0",
|
|
"type": "module",
|
|
"scripts": {
|
|
"dev": "vite",
|
|
"dev:convex": "convex dev",
|
|
"build": "npx vite build",
|
|
"typecheck": "tsc --noEmit",
|
|
"lint": "eslint . --ext ts,tsx --report-unused-disable-directives --max-warnings 0",
|
|
"preview": "vite preview",
|
|
"sync": "npx tsx scripts/sync-posts.ts",
|
|
"sync:prod": "SYNC_ENV=production npx tsx scripts/sync-posts.ts",
|
|
"sync:discovery": "npx tsx scripts/sync-discovery-files.ts",
|
|
"sync:discovery:prod": "SYNC_ENV=production npx tsx scripts/sync-discovery-files.ts",
|
|
"sync:all": "npm run sync && npm run sync:discovery",
|
|
"sync:all:prod": "npm run sync:prod && npm run sync:discovery:prod",
|
|
"import": "npx tsx scripts/import-url.ts",
|
|
"configure": "npx tsx scripts/configure-fork.ts",
|
|
"deploy": "npm run sync && npm run build",
|
|
"deploy:prod": "npx convex deploy && npm run sync:prod"
|
|
},
|
|
"dependencies": {
|
|
"@anthropic-ai/sdk": "^0.71.2",
|
|
"@convex-dev/aggregate": "^0.2.0",
|
|
"@mendable/firecrawl-js": "^1.21.1",
|
|
"@phosphor-icons/react": "^2.1.10",
|
|
"@radix-ui/react-icons": "^1.3.2",
|
|
"convex": "^1.17.4",
|
|
"date-fns": "^3.3.1",
|
|
"gray-matter": "^4.0.3",
|
|
"lucide-react": "^0.344.0",
|
|
"react": "^18.2.0",
|
|
"react-dom": "^18.2.0",
|
|
"react-markdown": "^9.0.1",
|
|
"react-router-dom": "^6.22.0",
|
|
"react-syntax-highlighter": "^15.5.0",
|
|
"rehype-raw": "^7.0.0",
|
|
"rehype-sanitize": "^6.0.0",
|
|
"remark-breaks": "^4.0.0",
|
|
"remark-gfm": "^4.0.0"
|
|
},
|
|
"devDependencies": {
|
|
"@types/node": "^25.0.2",
|
|
"@types/react": "^18.2.56",
|
|
"@types/react-dom": "^18.2.19",
|
|
"@types/react-syntax-highlighter": "^15.5.11",
|
|
"@typescript-eslint/eslint-plugin": "^7.0.2",
|
|
"@typescript-eslint/parser": "^7.0.2",
|
|
"@vitejs/plugin-react": "^4.2.1",
|
|
"dotenv": "^16.4.5",
|
|
"eslint": "^8.56.0",
|
|
"eslint-plugin-react-hooks": "^4.6.0",
|
|
"eslint-plugin-react-refresh": "^0.4.5",
|
|
"tsx": "^4.7.1",
|
|
"typescript": "^5.2.2",
|
|
"vite": "^5.1.4"
|
|
}
|
|
}
|