Merge pull request #1 from NERVsystems/claude/local-llm-feasibility-gVLhq Add OpenAI-compatible local LLM backend support
Add OpenAI-compatible backend for local LLM support (GPT-OSS) Implement OpenAIClient backend that speaks the OpenAI Chat Completions API (/v1/chat/completions), enabling llm9p to work with any local model server: Ollama, vLLM, llama-server, LocalAI, or LM Studio. Primary target is GPT-OSS (OpenAI's open-weight MoE models), but any model served via these platforms works. The backend supports: - Blocking and streaming chat completions - Tool/function calling with STOP:/TOOL: formatting - Token counting from API usage (with estimation fallback) - Conversation history, system prompts, temperature control - Stateless AskWithRequest for session isolation Usage: ./llm9p -backend openai -openai-url http://localhost:11434/v1 -model gpt-oss:20b Also fixes pre-existing stale mock backends in test files (AskWithRequest signature was out of date with the Backend interface). https://claude.ai/code/session_017qVVZUUhfCCvNkMYmXDZAa
feat(llm9p): Add per-fid session isolation and prefill support - Add SessionManager for per-fid conversation isolation - Each 9P fid now gets its own conversation history - Add FidAwareFile interface for files needing fid context - Add /n/llm/prefill file for assistant response prefill - Prefill helps keep model in character (e.g., "[Veltro]") - Update ask, new, context files to use session manager - Fix context contamination between parent and subagent Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
feat: Add CLI backend for Claude Max subscription Add support for using Claude Code CLI as an alternative backend, allowing users with Claude Max subscriptions to use llm9p without API tokens. New files: - internal/llm/backend.go: Backend interface for swappable LLM providers - internal/llm/cli_client.go: CLI-based client using `claude` command Changes: - Add -backend flag: 'api' (default) or 'cli' - Refactor llmfs to use Backend interface instead of concrete Client - Model names normalized for CLI (opus, sonnet, haiku) Usage: ./llm9p -backend cli # Uses Claude Max subscription ./llm9p -backend api # Uses Anthropic API (default) Limitations of CLI backend: - Token counting not available (always 0) - Streaming is simulated (full response as single chunk) - Uses short model names (opus, sonnet, haiku) Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
feat: Initial implementation of llm9p - LLM as 9P filesystem Exposes Claude as a 9P filesystem, enabling interaction through standard file operations: - ask: write prompt, read response (shim pattern) - model: read/write current model name - temperature: read/write sampling temperature - tokens: read-only token count from last response - new: write to reset conversation - context: read JSON history, write to add system message - _example: usage documentation - stream/chunk: blocking read for streaming responses Includes: - Full 9P2000 protocol implementation (stdlib only) - Anthropic SDK integration with conversation state - Streaming support Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>