Skip to content

port newer Guppi and Roamer runtime#35

Draft
AIndoria wants to merge 9 commits into
port/public-hygienefrom
port/runtime-sync
Draft

port newer Guppi and Roamer runtime#35
AIndoria wants to merge 9 commits into
port/public-hygienefrom
port/runtime-sync

Conversation

@AIndoria

Copy link
Copy Markdown
Owner

Summary

  • Port newer task, vector-query, model-routing, and wake behavior into Guppi.
  • Add semantic clipboard operations and expanded tool documentation.
  • Improve Roamer failure reporting, watchdog behavior, and API routing.
  • Add the moderated chat:watercooler policy.
  • Add gated Qwen 3.6 preserve-thinking history and sidecar storage.
  • Standardize public localhost API defaults.

Impact

Volition gains the newer Abiverse runtime behavior while retaining public-safe configuration defaults.

Validation

  • Python compilation for src/guppi.py and src/roamer.py
  • Full changed-file credential, private-IP, path, and identity scan
  • git diff --check

AI 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.

@AIndoria AIndoria changed the title [codex] port newer Guppi and Roamer runtime port newer Guppi and Roamer runtime Jun 28, 2026
@AIndoria AIndoria requested a review from Copilot July 5, 2026 06:32

Copilot AI left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

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 thread src/guppi.py Outdated
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 thread src/guppi.py Outdated
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")
AIndoria added 9 commits July 11, 2026 02:46
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.
@AIndoria AIndoria force-pushed the port/runtime-sync branch from 24254e1 to e4e161d Compare July 11, 2026 09:51
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants