Conversation
…asks Add ability to configure specific AI provider and model for each scheduled improvement task type in the CoS schedule UI. Changes: - Add providerId and model fields to task schedule schema - Update ScheduleTab UI with provider and model dropdowns - Update task generation to use configured provider/model settings - Update API endpoints to accept provider and model configuration - Fall back to active provider and default model when not specified Allows fine-grained control over which AI models handle different types of improvement tasks (e.g., use Opus for security audits, Sonnet for code quality).
Add ability to view and customize prompts for each scheduled improvement task type in the CoS schedule UI.
Changes:
- Extract default prompts from cos.js to taskSchedule.js
- Add prompt field to task schedule schema (nullable, falls back to defaults)
- Add prompt editing UI in ScheduleTab with textarea and Save/Cancel buttons
- Update API endpoints to accept prompt parameter
- Update task generation to use stored prompts (custom or default)
- Support template variables {appName} and {repoPath} for app improvement prompts
- Show visual indicator when using custom vs default prompts
Allows fine-grained control over task instructions, enabling users to customize
analysis depth, specific areas to focus on, or adjust prompts for better results.
Implements offline-first "second brain" with AI-powered classification: - Single inbox capture → AI classifies to People/Projects/Ideas/Admin - Confidence threshold gating (60%) with human-in-loop corrections - Daily digests (<150 words) and weekly reviews (<250 words) - JSONL storage for append-heavy logs, JSON for entity stores - Tab-based UI with deep linking (/brain/inbox, /brain/memory, etc.) - Full CRUD for all entity types with inline editing - Trust panel with audit trail and settings management - Scheduler for automated digest/review generation - 46 tests covering all Brain API endpoints
Add runner stability check before spawning agents to prevent the race condition where server starts before cos-runner during a rolling restart, spawns an agent, then the runner restarts and orphans the agent. The fix waits up to 15 seconds for the runner to have at least 10 seconds of uptime before spawning any agents.
- PLAN.md: Mark M16 complete, add M31 (LLM Memory Classification) and M32 (Brain) milestones with full documentation - README.md: Add Weekly Digest and Brain features to feature list - API.md: Add CoS Weekly Digest endpoints and Brain API endpoints - ARCHITECTURE.md: Add Brain service and data directory structure
- Add ConfigTab.jsx with AI provider/model selection, confidence threshold, and schedule settings - Update Brain settings route to validate provider IDs and models against actual providers - Alphabetize main navigation with Dashboard at top followed by separator - Ensure model selection is validated against provider's available models
- Fix retryClassification to update existing entry instead of creating duplicate - Add CLI provider support to brain service callAI function - Brain prompt templates already exist in data.sample (need to be copied to data/prompts/stages) - Prompt stage config needs brain-classifier, brain-daily-digest, brain-weekly-review registered
Server updates: - vitest: 2.1.8 -> 4.0.16 (fixes esbuild/vite moderate vulnerabilities) - @vitest/coverage-v8: 2.1.8 -> 4.0.16 (companion update) - supertest: 7.1.4 -> 7.2.2 (patch update) Client updates: - react-router-dom: updated via npm audit fix (fixes CSRF and XSS vulnerabilities) Remaining known issues: - pm2 has a low severity ReDoS vulnerability with no fix available All 445 tests pass, client build successful.
Fixed multiple issues with the Brain retry AI functionality: - Fixed undefined function call: replaced fileThought with fileToDestination - Fixed provider/model parameter passing in retryClassification - Rewrote retryClassification to update existing entry instead of creating duplicates - Added CLI provider support to callAI function - Removed excessive debug logging
Added comprehensive tooltips to all buttons throughout the Brain inbox: - Capture thought button - Route to destination buttons (People, Projects, Ideas, Admin) - Retry AI button - View, Fix, Move, Cancel buttons in filed entries Added edit and delete functionality to inbox entries: - Edit button to modify captured text with save/cancel - Delete button with inline confirmation dialog (no window.confirm) - Works for all entry types: needs review, error, and filed entries Backend changes: - Added PUT /api/brain/inbox/:id endpoint to update entry text - Added DELETE /api/brain/inbox/:id endpoint to delete entries - Added updateInboxInputSchema validation - Added deleteInboxLog function to brainStorage - Added updateInboxEntry and deleteInboxEntry service functions Frontend changes: - Added edit mode with textarea and save/cancel buttons - Added delete confirmation UI with delete/cancel buttons - Added tooltips (title attributes) to all interactive buttons - Imported Trash2, Save, and X icons from lucide-react All changes follow CLAUDE.md guidelines: - No window.alert or window.confirm usage - Uses inline confirmation dialogs - Maintains modular DRY design - Single-line logging with emoji prefixes
- Replace Reload button with Run Now button that triggers task evaluation - Use Play icon and emerald styling to match Start button pattern - Tasks stay up to date via WebSocket events, making reload unnecessary
- Remove manual Task ID input from User Tasks form - Task IDs are now always auto-generated - Add toggle to specify task position (top/bottom of queue) - Default position is bottom of queue - Update server route and service to handle position parameter
- Add checkForTaskCommit() to validate if agent made a commit with task ID
- Modify completeAgentRun() to check for task commits even if exit code is non-zero
- Override success flag if commit with [task-{taskId}] pattern is found
- Prevents false negatives where agents report failure but work completed
- Add execSync import for git log validation
Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>
Add vision test service to verify LM Studio models can correctly interpret images and screenshots. Includes API endpoints for health checks, single image tests, and full test suites.
- Send screenshots to vision-capable models via proper image_url format - Client passes screenshot paths to createRun API - Server loads screenshots as base64 and constructs OpenAI-compatible vision messages - Fix output not being saved by writing partial output even on stream errors - Add outputSize to failed run metadata for consistency
- Add Success, Running, and Failed status filters - Client-side filtering of runs based on status - Show appropriate empty state when no runs match filters
Comprehensive architecture plan for @portos/ai-toolkit package that would extract common AI provider, model selection, and prompt template patterns into a reusable library for PortOS-style Express/React/Tailwind projects.
- Add execution ID section at top of expanded run details - Include copy-to-clipboard button for easy ID copying - Shows run.id as the execution ID for tracking and reference
The media page now accesses the camera and microphone from the PortOS server machine rather than the client browser. This enables remote monitoring and recording of the server's physical environment. Changes: - Create mediaService for FFmpeg-based camera/mic capture - Add /api/media routes for device enumeration and streaming - Update Media.jsx to consume server streams via MJPEG (video) and WebM (audio) - Add audio analyzer with CORS support for real-time level monitoring - Add default export to api.js for simplified HTTP methods server/routes/media.js:118 server/services/mediaService.js:167 client/src/pages/Media.jsx:325
- fileUtils: wrap JSON.parse in try/catch in safeJSONParse to handle syntax errors - taskParser: use JSON encoding for values with special chars, preserving reversibility - index.js: remove promptPreview/outputTail from error events to avoid leaking secrets - PromptManager: handle createStage errors properly with user feedback - DevTools: combine source and status filters in filteredRuns - Layout: use unique keys for separator elements
There was a problem hiding this comment.
Pull request overview
Copilot reviewed 93 out of 167 changed files in this pull request and generated 6 comments.
Files not reviewed (1)
- client/package-lock.json: Language not supported
💡 Add Copilot custom instructions for smarter, more guided reviews. Learn how to get started.
- taskParser.js: Use sentinel prefix for JSON-encoded metadata values to prevent incorrectly interpreting user values wrapped in quotes - cos-runner/index.js: Validate cliArgs type before spawn() call - DirectoryPicker.jsx: Add value to useEffect dependency array - TrustTab.jsx: Guard against NaN from parseFloat on confidence threshold - PromptManager.jsx: Handle fetch errors in deleteStage usage check - fileUtils.test.js: Add comprehensive unit tests for JSON utilities
There was a problem hiding this comment.
Pull request overview
Copilot reviewed 94 out of 168 changed files in this pull request and generated 7 comments.
Files not reviewed (1)
- client/package-lock.json: Language not supported
💡 Add Copilot custom instructions for smarter, more guided reviews. Learn how to get started.
- Moved M8 Prompt Manager to docs/features/prompt-manager.md - Moved M19 CoS Agent Runner to docs/features/cos-agent-runner.md - Moved M33 Soul System to docs/features/soul-system.md - Moved M34 Digital Twin to docs/features/digital-twin.md - Moved M35 CoS Enhancement to docs/features/cos-enhancement.md - Condensed PLAN.md from 1060 to 178 lines with doc references - Updated Next Actions section with current priorities - Removed obsolete SHARED_AI_LIBRARY_PLAN.md (toolkit now external npm module)
- release.yml: Capture changelog commit hash before switching branches to fix cherry-pick picking wrong commit - cos-runner/index.js: Use !== undefined for cliArgs to allow empty arrays - server/index.js: Use absolute paths from __dirname for AI toolkit config - AIProviders.jsx: Treat undefined enabled as enabled (p.enabled !== false) - ScheduleTab.jsx: Reset model when provider changes to avoid stale selection - FolderPicker.jsx: Add dialog accessibility attributes (role, aria-modal, aria-labelledby) - taskParser.js: Clarify legacy fallback is only for pre-sentinel historical data
There was a problem hiding this comment.
Pull request overview
Copilot reviewed 98 out of 172 changed files in this pull request and generated 7 comments.
Files not reviewed (1)
- client/package-lock.json: Language not supported
💡 Add Copilot custom instructions for smarter, more guided reviews. Learn how to get started.
Security and reliability improvements: - cos-runner/index.js: Add command allowlist to prevent RCE via spawn() - fileUtils.js: Remove existsSync() TOCTOU races, use async-only patterns - fileUtils.js: Handle ENOENT specifically, log other I/O errors UI fixes: - ScheduleTab.jsx: Show current model in dropdown even when provider not loaded Documentation: - soul-system.md: Update to digital-twin naming (routes, services, pages)
There was a problem hiding this comment.
Pull request overview
Copilot reviewed 98 out of 172 changed files in this pull request and generated 14 comments.
Files not reviewed (1)
- client/package-lock.json: Language not supported
💡 Add Copilot custom instructions for smarter, more guided reviews. Learn how to get started.
cos-runner: - Default cliArgs to [] when cliCommand provided but args missing - Use path.basename for cross-platform command allowlist validation ScheduleTab: - Remove unnecessary disable condition on model dropdown ProviderStatusCard: - Show "Unable to load status" when statuses is null/failed fileUtils: - Support CRLF line endings in JSONL parsing - Add CRLF tests for Windows compatibility server/index.js: - Use path.join instead of template literals for paths Brain.jsx: - Remove unused toast import soul-system.md: - Update directory structure to data/digital-twin/
There was a problem hiding this comment.
Pull request overview
Copilot reviewed 98 out of 172 changed files in this pull request and generated 9 comments.
Files not reviewed (1)
- client/package-lock.json: Language not supported
💡 Add Copilot custom instructions for smarter, more guided reviews. Learn how to get started.
- Add trailing comma before comment in server/index.js for consistency - Handle Windows .exe extensions in CLI command allowlist validation - Fix doc path: digitalTwin.js -> digital-twin.js in digital-twin.md - Add try/finally error handling in SoulWizard to prevent stuck saving state - Add aria-label to FolderPicker icon buttons for accessibility
There was a problem hiding this comment.
Pull request overview
Copilot reviewed 98 out of 172 changed files in this pull request and generated 4 comments.
Files not reviewed (1)
- client/package-lock.json: Language not supported
💡 Add Copilot custom instructions for smarter, more guided reviews. Learn how to get started.
- Add useEffect to ScheduleTab to sync local state with external config updates - Use console.warn instead of emoji-prefixed console.log/error in fileUtils - Update fileUtils tests to check console.warn instead of console.log/error
|
Re: CI npm install vs npm ci (line 32 in ci.yml): The
Using |
Summary
Major release introducing the Digital Twin identity system, M35 Chief of Staff Enhancement (proactive autonomous agent), AI provider usage limit handling with automatic fallback, and significant UI/UX improvements.
🎉 Key Features
M35: Chief of Staff Enhancement
Digital Twin (formerly Soul)
AI Provider Usage Limit Handling
Dashboard Improvements
CoS Navigation & Mobile UX
🔧 Improvements
cos-task-enhanceprompt stage for provider/model configuration🐛 Fixes
🗑️ Removed
.old.jsfiles removed)Test Plan