-
Notifications
You must be signed in to change notification settings - Fork 0
Release v0.11.x — Autonomous Jobs, Live Agent Streaming, Quick Templates #11
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Conversation
- Remove unsafe shell:true option from spawn() to fix DEP0190 warning - Override toolkit executeCliRun with secure implementation - Add detailed logging for CLI execution debugging - Patch aiToolkit runner at runtime in server/index.js
- Add refresh button for all providers (API and CLI) - Support Claude, Gemini, OpenAI, Ollama, LM Studio - Show toast notifications for success/failure - Add loading states during refresh operations - Update portos-ai-toolkit to latest version
- Add supportsModelRefresh helper function - Hide refresh button for Gemini CLI (doesn't require model specification) - Keep refresh available for other CLI providers like Claude
… data The Autofixer is part of PortOS, not a standalone app. Fresh installs now seed PortOS itself as the default app with all 6 processes and the real install path resolved via __PORTOS_ROOT__ placeholder substitution.
The capture endpoint now returns immediately and runs AI classification in the background via Socket.IO events, preventing UI hangs when AI providers are slow or unresponsive.
Claude CLI agents now stream output in real-time using --output-format stream-json --verbose --include-partial-messages flags. A stream parser extracts text deltas, tool use events, and the final result from the JSON stream, emitting them as live output lines via Socket.IO. Works in both direct spawn mode and the standalone CoS Runner process.
- Delegate DevTools process kill to CoS killAgent when PID belongs to a CoS-spawned agent, ensuring task is properly blocked - Block task immediately in terminateAgent/killAgent direct mode instead of deferring to close handler (prevents requeue on server restart) - Add user-terminated guard in handleOrphanedTask to skip requeue
User tasks now spawn immediately when submitted (if slots available) instead of waiting up to 60s for the evaluation interval. Also dequeues the next pending task when an agent completes and frees a slot.
Scale questions (1-5) now directly update trait scores and confidence when answered, closing the feedback loop between enrichment and personality modeling. 18 scale items across 5 categories with weighted moving average scoring and per-answer confidence boosts.
Question selection was deterministic based on questionsAnswered count, which skip never incremented — so the same question was always returned. Client now tracks skipped indices per session and passes them to the server, which skips over matching predefined and scale questions.
When LM Studio or other providers return empty responses during task prompt enhancement, fall back to the original description instead of throwing a 500 error that pollutes server logs.
Enable the Chief of Staff to run recurring scheduled jobs on the user's behalf using their digital twin identity. Ships with 4 built-in jobs (git maintenance, brain processing, daily briefing, project review), all disabled by default for opt-in. Adds Jobs tab UI, full CRUD API, and integration into the CoS evaluation loop at Priority 3.5.
- Interview tab with paste-and-analyze flow for AI personality assessments - Reusable ProviderModelSelector component and useProviderModels hook - InterviewAnalysisCard with collapsible trait/dimension/document sections - Deep-link all enrich buttons to specific gap categories - NextActionBanner integration on overview tab - Low confidence personality bars now grey instead of misleading red
The /api/providers/status endpoint was unreachable because the AI toolkit's GET /:id parameterized route was mounted first, catching "status" as a provider ID. Reordered route registration so PortOS-specific routes are defined before the toolkit's catch-all routes.
Adds a search input to the Completed Agents section that filters by task description, model, agent ID, or error message. When searching, all matching results are shown (bypasses the 15-item default limit).
When all predefined questions are exhausted and AI generation fails, the fallback now serves a generic follow-up instead of recycling question[0]. Also deduplicated near-identical first questions between values and non_negotiables categories.
- Add collapsible Quick Templates section with 8 built-in templates (fix mobile, add feature, fix bug, refactor, add tests, etc.) - Add Save Template button to save current form as reusable template - Track template usage counts for popularity-based sorting - Support custom user templates with CRUD operations - Templates populate description, context, and optionally provider/model Files added: - server/services/taskTemplates.js Files modified: - server/routes/cos.js (template API routes) - client/src/services/api.js (template API functions) - client/src/components/cos/tabs/TasksTab.jsx (template UI)
Stream parser now extracts tool input details (file paths, search patterns, commands) from input_json_delta events, showing what each tool operates on instead of just the tool name. AgentCard displays recent tool activity with color-coded expanded view and scrollable output.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Pull request overview
Copilot reviewed 51 out of 52 changed files in this pull request and generated 7 comments.
💡 Add Copilot custom instructions for smarter, more guided reviews. Learn how to get started.
- Default CLI runner timeout to 5min when undefined (prevents immediate SIGTERM) - Clean up spawningTasks guard on all early-return paths in spawnAgentForTask - Fix hasEnrichment array coercion (use .length instead of comparing array > 0) - Fix createJob intervalMs mismatch when interval is omitted (weekly says daily) - Merge DEFAULT_STATE into loaded taskTemplates state for backward compat - Remove unused imports in taskTemplates test
Memory extraction was producing hundreds of low-value memories about implementation details (file paths, CSS values, component names) that any agent could discover by reading code. Redesigned the system to prioritize durable knowledge about the user — their values, preferences, work patterns, and aesthetic taste.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Pull request overview
Copilot reviewed 53 out of 54 changed files in this pull request and generated 5 comments.
Comments suppressed due to low confidence (1)
client/src/components/digital-twin/tabs/EnrichTab.jsx:208
submitAnswersetssubmitting=truebut doesn’t reset it ifsubmitSoulEnrichAnswerthrows. That can leave the UI stuck in a submitting state with no feedback. Wrap the async call intry/catch/finally(toast the error, and alwayssetSubmitting(false)infinally).
setSubmitting(true);
const payload = {
questionId: currentQuestion.questionId,
category: activeCategory,
question: currentQuestion.question
};
if (isScale) {
payload.questionType = 'scale';
payload.scaleValue = scaleValue;
payload.scaleQuestionId = currentQuestion.scaleQuestionId;
} else {
payload.questionType = 'text';
payload.answer = answer.trim();
}
await api.submitSoulEnrichAnswer(payload);
toast.success(isScale ? 'Rating saved' : 'Answer saved');
setSkippedIndices([]);
await loadData();
// Load next question
await loadQuestion(activeCategory);
setSubmitting(false);
onRefresh();
💡 Add Copilot custom instructions for smarter, more guided reviews. Learn how to get started.
…rage Progress bars were hitting 100% around 50% through task execution because they used the simple average duration. Now tracks maxDurationMs per task type and computes a P80 approximation (avg + 60% of gap to max) for more realistic progress bars and ETAs.
- Guard JSON.parse of metadata file in CLI runner close handler - Add error handling to NextActionBanner submit (prevents stuck submitting state) - Remove premature recordJobExecution from manual trigger route (deferred to job:spawned) - Clear CLI timeout on close/error in digital-twin AI provider call - Guarantee spawningTasks cleanup even if updateTask throws
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Pull request overview
Copilot reviewed 56 out of 57 changed files in this pull request and generated 1 comment.
💡 Add Copilot custom instructions for smarter, more guided reviews. Learn how to get started.
When both portos-server and portos-cos restart, two parallel orphan cleanup paths race: server's cleanup (2s) marks agents completed in cos state, then runner's cleanup (3s) emits orphan events that arrive at handleAgentCompletion() with an empty in-memory map, causing noisy warnings. Now checks cos persistent state as fallback - if already completed, skips silently; if still running, handles completion properly.
Expanded the system diagram to show all PM2-managed satellite services (CoS, Browser, Autofixer) with their communication paths. Added data flow sections, directory entries, and key service descriptions for both services.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Pull request overview
Copilot reviewed 57 out of 58 changed files in this pull request and generated 1 comment.
💡 Add Copilot custom instructions for smarter, more guided reviews. Learn how to get started.
Summary
This release brings significant new features, UX improvements, and reliability fixes to PortOS:
Bug Fixes
/:idrouteshell: true)Test Plan
/cos/jobs