Commit Graph

6 Commits

  • Add navigation message tracking to browser extension
    - Add onBeforeSend callback to ChatPanel and AgentInterface
    - Add onBeforeToolCall callback (for future permission dialogs)
    - Create NavigationMessage custom message type
    - Add browserMessageTransformer that converts nav messages to <system> tags
    - Track last submitted URL and tab index
    - Auto-insert navigation message when URL/tab changes on user submit
    - Navigation message shows favicon + page title in UI
    - LLM receives: <system>Navigated to [title] (tab X): [url]</system>
  • Refactor agent architecture and add session storage
    Major architectural improvements:
    - Renamed AgentSession → Agent (state/ → agent/)
    - Removed id field from AgentState
    - Fixed transport abstraction to pass messages directly instead of using callbacks
    - Eliminated circular dependencies in transport creation
    
    Transport changes:
    - Changed signature: run(messages, userMessage, config, signal)
    - Removed getMessages callback from ProviderTransport and AppTransport
    - Transports now filter attachments internally
    
    Session storage:
    - Added SessionRepository with IndexedDB backend
    - Auto-save sessions after first exchange
    - Auto-generate titles from first user message
    - Session list dialog with search and delete
    - Persistent storage permission dialog
    - Browser extension now auto-loads last session
    
    UI improvements:
    - ChatPanel creates single AgentInterface instance in setAgent()
    - Added drag & drop file upload to MessageEditor
    - Fixed artifacts panel auto-opening on session load
    - Added "Drop files here" i18n strings
    - Changed "Continue Without Saving" → "Continue Anyway"
    
    Web example:
    - Complete rewrite of main.ts with clean architecture
    - Added check script to package.json
    - Session management with URL state
    - Editable session titles
    
    Browser extension:
    - Added full session storage support
    - History and new session buttons
    - Auto-load most recent session on open
    - Session titles in header
  • Enable thinking selector in MessageEditor
    - Import Select component from mini-lit and Brain icon from lucide
    - Add thinkingLevel property to track current thinking level (off/minimal/low/medium/high)
    - Enable showThinkingSelector (was disabled before)
    - Add onThinkingChange callback for thinking level changes
    - Render Select component with thinking level options when model supports reasoning
    - Position thinking selector on left side next to attachment button
    - Add i18n translations for Off/Minimal/Low/Medium/High in English and German
    - Rename showThinking → showThinkingSelector in AgentInterface and ChatPanel for consistency
    - Remove showDebugToggle property from AgentInterface (unused)
    - Clean up browser-javascript tool output message (remove CSP note)
  • Add Anthropic prompt caching, pluggable storage, and CORS proxy support
    Storage Architecture:
    - New pluggable storage system with backends (LocalStorage, ChromeStorage, IndexedDB)
    - SettingsRepository for app settings (proxy config, etc.)
    - ProviderKeysRepository for API key management
    - AppStorage with global accessors (getAppStorage, setAppStorage, initAppStorage)
    
    Transport Refactoring:
    - Renamed DirectTransport → ProviderTransport (calls LLM providers with optional CORS proxy)
    - Renamed ProxyTransport → AppTransport (uses app server with user auth)
    - Updated TransportMode: "direct" → "provider", "proxy" → "app"
    
    CORS Proxy Integration:
    - ProviderTransport checks proxy.enabled/proxy.url from storage
    - When enabled, modifies model baseUrl to route through proxy: {proxyUrl}/?url={originalBaseUrl}
    - ProviderKeyInput test function also honors proxy settings
    - Settings dialog with Proxy tab (Switch toggle, URL input, explanatory description)
    
    Anthropic Prompt Caching:
    - System prompt cached with cache_control markers (both OAuth and regular API keys)
    - Last user message cached to cache conversation history
    - Saves 90% on input tokens for cached content (10x cost reduction)
    
    Settings Dialog Improvements:
    - Configurable tab system with SettingsTab base class
    - ApiKeysTab and ProxyTab as custom elements
    - Switch toggle for proxy enable (instead of Checkbox)
    - Explanatory paragraphs for each tab
    - ApiKeyPromptDialog reuses ProviderKeyInput component
    
    Removed:
    - Deprecated ApiKeysDialog (replaced by ProviderKeyInput in SettingsDialog)
    - Old storage-adapter and key-store (replaced by new storage architecture)
  • Integrate JailJS for CSP-restricted execution in browser extension
    Major changes:
    - Migrate browser-extension to use web-ui package (85% code reduction)
    - Add JailJS content script with ES6+ transform support
    - Expose DOM constructors (Event, KeyboardEvent, etc.) to JailJS
    - Support top-level await by wrapping code in async IIFE
    - Add returnFile() support in JailJS execution
    - Refactor KeyStore into pluggable storage-adapter pattern
    - Make ChatPanel configurable with sandboxUrlProvider and additionalTools
    - Update jailjs to 0.1.1
    
    Files deleted (33 duplicate files):
    - All browser-extension components, dialogs, state, tools, utils
    - Now using web-ui versions via @mariozechner/pi-web-ui
    
    Files added:
    - packages/browser-extension/src/content.ts (JailJS content script)
    - packages/web-ui/src/state/storage-adapter.ts
    - packages/web-ui/src/state/key-store.ts
    
    Browser extension now has only 5 source files (down from 38).
  • Add JavaScript REPL tool to web-ui package
    - Created javascript-repl.ts tool with SandboxedIframe for code execution
    - Integrated into ChatPanel replacing calculate and getCurrentTime tools
    - REPL provides full browser API access with external library support
    - Auto-registers renderer for tool output display
    - Uses srcdoc instead of sandbox.html (no CSP restrictions in web apps)