port newer Guppi and Roamer runtime#35
Draft
AIndoria wants to merge 9 commits into
Draft
Conversation
Contributor
There was a problem hiding this comment.
Pull request overview
This PR ports newer runtime behavior into Volition’s Guppi (primary agent loop) and Roamer (read-only investigator subprocess), adding richer chat-stream policy handling, expanded clipboard operations, improved subprocess failure reporting, and gated Qwen 3.6 “preserve thinking” history reconstruction via sidecar storage.
Changes:
- Add chat stream policy defaults (including
chat:watercooler) and adjust wake/urgency behavior. - Implement a more capable persistent clipboard (multi-line normalization, insert/replace/mark/status, safer clear).
- Add Qwen 3.6 preserve-thinking support with sidecar storage + prompt message reconstruction, plus logged-untracked subprocess monitoring and Roamer correlation (
parent_turn_id).
Reviewed changes
Copilot reviewed 2 out of 2 changed files in this pull request and generated 2 comments.
| File | Description |
|---|---|
| src/guppi.py | Adds chat-stream policy/wake logic, richer clipboard tool semantics, preserve-thinking sidecar support, and improved subprocess monitoring/error reporting. |
| src/roamer.py | Adds parent_turn_id correlation in result metadata and exits non-zero on Redis push failure for clearer failure signaling. |
💡 Add Copilot custom instructions for smarter, more guided reviews. Learn how to get started.
Comment on lines
+2714
to
+2718
| elif sub == "clear": | ||
| result = {"status": "success", "message": self.clipboard.clear()} | ||
| result = { | ||
| "status": "success", | ||
| "message": self.clipboard.clear(confirm=bool(action.get("confirm", False))), | ||
| } |
Comment on lines
2079
to
2102
| # Check if this is a direct email rather than a system inbox event. | ||
| # Payload may be a raw string for malformed/plain inbox items, so normalize first. | ||
| payload = event_data.get("payload") or {} | ||
| if not isinstance(payload, dict): | ||
| payload = {} | ||
|
|
||
| payload_event_type = payload.get("event_type", "") | ||
| is_human_email = (event_type == "Inbox" and payload_event_type == "NewInboxMessage") | ||
|
|
||
| is_chat = (event_type == "Chat") | ||
|
|
||
| if force_model is not None: | ||
| model = force_model | ||
| is_flash = (model == MODEL_FLASH) | ||
| target_url = os.environ.get("FLASH_API_URL") if is_flash else os.environ.get("PRO_API_URL") | ||
| else: | ||
| # Route both Stream Chat and Direct Emails to Flash | ||
| if is_chat or is_human_email: | ||
| if is_chat: | ||
| model = MODEL_FLASH | ||
| is_flash = True | ||
| target_url = os.environ.get("FLASH_API_URL") | ||
| else: | ||
| model = MODEL_PRO | ||
| is_flash = False | ||
| target_url = os.environ.get("PRO_API_URL") |
Port the newer task lifecycle, vector query, model routing, wake handling, and runtime tool behavior from Abiverse. Keep public defaults local and credential-free.
Add indexed insert, replace, status marking, selective removal, and guarded clear operations. Route inbox work through the Pro path and document the expanded clipboard tool contract.
Track Roamer subprocesses, surface failed reports, and require watchdog reminders for long-running investigations. Add structured Roamer completion and failure logging without exposing private service defaults.
Validate report output, retain actionable failure context, and make Guppi honor the configured Scribe and Roamer endpoint routing.
Subscribe agents to chat:watercooler, wake them without treating it as urgent, and load a larger moderated-room context window. Extend talking-stick results and tool documentation with bounded TTL and recent channel context.
Gate preserve-thinking by model and environment, rebuild bounded reasoning history for OpenAI-compatible calls, and retain native reasoning for completed turns. Keep older Qwen sampling behavior separate and redact preserved traces from visible working-memory context.
Write native reasoning atomically to per-turn files, cache it for reconstruction, and keep only an audit placeholder in working.log. Continue reading legacy inline signatures for backward compatibility.
Use the public localhost OpenAI-compatible endpoint as the fallback for Roamer, Scribe, summarization, and Flash routing.
Route only general and watercooler chat through Flash; retain synchronous chat, inbox, and system work on Pro. Require a JSON true confirmation to clear a non-empty clipboard and report refused clears accurately.
24254e1 to
e4e161d
Compare
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Summary
chat:watercoolerpolicy.Impact
Volition gains the newer Abiverse runtime behavior while retaining public-safe configuration defaults.
Validation
src/guppi.pyandsrc/roamer.pygit diff --checkAI disclosure
This PR is derived from custom code originally authored by Abe in the private, local Abiverse repository. Codex was used to replicate, sanitize, organize, and validate the changes for the public Volition repository.