Commit Graph

35 Commits

Author SHA1 Message Date
operator f75977ca6e fix(work): import hashlib and wire heal subparser into main CLI 2026-10-09 23:13:43 +00:00
Muse Sidechat a9f014f9fa feat: completion-enforcement loop (fallback, proof, emit-model, auditor)
Close the loop so dispatched work actually completes on bl:

- on_no_result fallback in followup-sweeper (op + job forms via
  exec-constrained registry / job-dispatch), seeded on the three
  autonomy-pulse jobs; fallback_due() dedupes the gravity path
- gravity.py: add __main__ entry (loop-remediator.timer was a no-op),
  300s re-arm budget, fallback firing + stamp/skip logic
- harvester: proof-of-result followups (result_has_evidence),
  acted-variant NACK, emit-model tool-hint wording
- envelope: RESPONSE RULE states the emit model (agents EMIT
  directives verbatim; runtime executes; works from bare containers)
- completion-audit.py + systemd 15-min timer: per-family funnel,
  swarm drain, followup backlog; digest DM when degraded, 6h heartbeat
- tests/test_completion.py (29 tests), JOB-SPEC.md docs

Tests: 67/67 focused green (completion + tool_calls).
2026-10-06 08:20:14 +00:00
operator-main f2640397ed feat(messaging): balanced TOOL parsing, DM shorthand, box.exec, tools.list
- response-harvester: extract [TOOL]/[EXEC] JSON args with balanced-brace
  scanning (']' and nesting inside args no longer truncate calls); add
  [DM {...}] shorthand mapping to dm.send; native aliases (dm, box,
  tools) plus arg-synonym normalization; formatters and expanded hints.
- exec-constrained: new read-only box.exec op (27 allowlisted box-ctl
  reads) and tools.list op backed by --list-ops for dynamic discovery.
- prompt_envelope: advertise dm.send/box.exec/tools.list in every timer
  DM; add dm_call builder.
- lookup_engine + regex_patterns.json: canonical tool_call pattern
  accepts the DM engine, ']' in args, one nesting level.
- tests/test_tool_calls.py: 38 tests; docs/INBAND-MESSAGING-SPEC.md:
  accepted decision record (Final).
2026-10-06 07:29:16 +00:00
operator 7444b52763 Fix split-brain swarm dispatch: narrow harvester SWARM_WORKER_POOL to [muse]
The 2026-10-05 fix note claimed dev/def were removed from the pool but the
code still listed [dev, def, muse]. The harvester's every-minute systemd
dispatch raced the pool daemon claiming slots as dev/def, which refuse on
attribution grounds (dev FAILs fast, def freezes until the 60-min reaper) -
the fleet-wide dev-FAIL-fast + def-frozen pattern on every swarm.

Pool now matches swarm_worker/daemon.py WORKER_POOL exactly: muse only,
the single fully authenticated auxiliary worker. Reporting/harvest paths
untouched.
2026-10-06 03:14:02 +00:00
operator 59c9965791 feat(swarm-worker): dispatch prose swarm slots to ephemeral Muse subagents
- daemon: route non-shell slot tasks to a fresh subagent session on dev/def/muse
  via muse_hybrid; add bin/ to sys.path so muse_hybrid/prompt_envelope import
  under the tmux supervisor
- prompt_envelope: add wrap_subagent_task() - plain task assignment without
  [TOOL tmux/swarm/cron] meta tags (subagents refused those as relayed test traffic)
- box-ctl/reporter: swarm-attach accepts optional session-id, stored as
  slot.subagent_session_id
- executor: _looks_like_shell requires an existing executable (prose like
  'verify ...' no longer misread as shell)
- poller: pick up pending swarms as well as running
- response-harvester: monitor running slot subagent sessions from swarms.json,
  allow '/' in RESULT/VERB job ids, archive ephemeral threads on any verdict
  (OK or FAIL), reap slot sessions for terminal swarms
2026-10-05 20:18:46 +00:00
operator-main a9ab825554 fix(netvm): hardcoded dev CDP port refs 9460 -> 9455
Follow-up to 8c39dc3: four scripts hardcoded dev's CDP port instead of
reading netvm-registry.py. Aligned with the corrected registry (9455).

Session: sidechat/dev-cdp-partition
2026-10-05 16:40:40 +00:00
operator 0ca0fd0c1a feat(tmux): add shared muse tmux socket manager with CLI and agent [TOOL tmux.*] integration 2026-10-05 16:11:19 +00:00
operator e44d6c77f4 fix(harvester): restore #!/usr/bin/env python3 shebang at top of response-harvester.py 2026-10-05 15:58:23 +00:00
operator 447e9c1cc7 feat(swarm): bridge swarm slot dispatch to native muse_hybrid subagent sessions 2026-10-05 15:56:59 +00:00
operator 008b689bee fix(swarm): keep stuck-slot reaper & verified dispatch while reverting worker pool to dev, def, muse 2026-10-05 15:38:00 +00:00
operator 97966ded73 fix(endpoints): point curl tool instruction to live https://exec.muse-dev.online/exec 2026-10-05 15:20:54 +00:00
operator 5ff32b5202 feat(exec): add template aliases, tolerant read-only validation, and thread titling filter 2026-10-05 15:14:24 +00:00
operator 12f8a8b0d6 feat(prompts): native Muse tools (cron.create, subagent spawn) primary in envelope; harvester bridges native names to box ops 2026-10-05 05:45:12 +00:00
operator 74d093d259 feat(prompts): work-first envelope with spawn/followup tool calls at top and bottom 2026-10-05 05:43:26 +00:00
operator eba084b046 feat(harvester): add 2-turn emergency escalation follow-up to opm on persistent silence stalls 2026-10-05 05:30:36 +00:00
operator 0e5138069e feat(harvester): enforce strict tool invocation rejection on conversational comments 2026-10-05 05:30:11 +00:00
operator 7381feb1d6 feat(harvester): auto-extract and execute curl commands against box.muse-dev.online 2026-10-05 05:28:55 +00:00
operator c0add2a4ce feat(runtime): embed box.muse-dev.online thread url and tool execution directives into followups, nudges, and dispatches 2026-10-05 05:27:47 +00:00
operator c90e096192 feat(autonomy): add followup.create primitive and tool-continuation directives to enforce silence-kills-work 2026-10-05 05:24:45 +00:00
operator 7581e983d5 feat(harvester): synthesize [RESULT <job-id>] DECLINE on explicit assistant natural language refusal 2026-10-05 04:44:38 +00:00
operator ac8fd9a06e fix(harvester): include autonomy-pulse sidechats in conversational nudge scope 2026-10-05 04:41:46 +00:00
operator b88209d7a1 feat(autonomy): autonomous swarm worker orchestration, nudge triggers, and recursive loop 2026-10-05 04:32:06 +00:00
operator d09e1c4872 feat(sidechats): auto-archive completed ephemeral job threads via hybrid gateway 2026-10-05 03:57:06 +00:00
operator 2132d15cb4 feat(box): expand agent tool capabilities with files, web, and service ops 2026-10-05 03:51:43 +00:00
operator 581bbfe3b4 fix(harvester): format tool outputs into concise human-readable messages 2026-10-05 03:47:18 +00:00
operator 31c03e0d0f feat(box): enable real-time agent tool triggers and capabilities expansion 2026-10-05 03:41:43 +00:00
operator da59ad6edd feat(harvester,jobs): fast gateway harvesting, parallel thread polling, dynamic sidechat spawning
- Implement muse_hybrid fast gateway in response-harvester.py with ThreadPoolExecutor
- Reduce harvest cycle time from ~1m50s to ~18s; eliminate browser tab-hopping and CDP lock contention
- Add smart active thread filtering in get_monitored_threads to prune dead historical test pipes
- Fix initial watermark ingestion logic so fresh sidechats process first-arrival job responses
- Configure gw_wait window in dm.py (20s on reply:expected) so backend generation is not prematurely severed
- Update box-http-health, box-service-health, box-deep-health to dynamic timestamped sidechats without reuse_key
- Fix heartbeat job to route to dedicated heartbeat channel
2026-10-05 03:21:20 +00:00
operator 0eadd096b7 feat(fleet): expand sidechat auto-provisioning for muse and dev, integrate response harvesting 2026-10-05 02:48:59 +00:00
operator-main 86f0082ffc feat(main-loop): digest response protocol — actionable digests, reply verbs, closure metrics
Session: sidechat/main-loop-protocol
2026-10-05 00:48:38 +00:00
operator-main 8bb64c4826 Restore executable bit on sweeper/harvester (dropped by atomic mv) 2026-10-04 20:07:06 +00:00
operator-main ad9dbca7eb Restore followup/DM reliability fixes wiped by 19:43Z tree-clean
Re-applies three workstreams lost when 793d3d7 committed over uncommitted
edits, reconciled against the parallel track's committed dm.py changes:
- followup-sweeper.py: backfill thread_uuid after successful nudge sends;
  record final_nudge_target=main on final-nudge routing (C1/C2)
- response-harvester.py: resolve followups on main-chat replies when
  final_nudge_target=main (C3); harvest ALL [RESULT] markers per message
- dm.py: pre-send placement gate (fail closed when post-nav URL lacks the
  target thread UUID; skips main) — purely additive over 793d3d7+f268d3d
- sidechat_manager.py: wait_for_chat_list() settle-poll for list population
  race (sidebar button renders before titles load)
- new: bin/tests/test_followup_fixes.py (25 tests), bin/placement-audit.py,
  bin/dm-log-taxonomy.py, bin/session-probe.py,
  docs/SIDECHAT-RELIABILITY.md, docs/UUID-ROTATION.md

Verified: 25/25 tests pass, py_compile clean, sweeper/harvester dry-runs clean.
Known limitation: gate catches wrong-placement, not wrong-mapping (false
autoprovision adopting the parked thread needs a creation check).
2026-10-04 20:06:58 +00:00
operator-main 550e30901b fix: placement verification and sidechat policy enforcement
- dm.py: placement-aware verify (verify_placement), checked_uuid logging, placement_mismatch events
- main-chat-watchdog.py: P0 alerts on placement_mismatch
- box-ctl.py: notify routes to sidechat, box policy command
- jobs: ops-audit and pipe-demo use sidechats
- response-harvester.py: chain deduplication

Session: sidechat/ops-restore
2026-10-04 18:29:13 +00:00
operator 2fa2955fb3 feat(harvester): add opportunistic harvest_main_feed with zero navigation and per-node fault isolation 2026-10-04 16:45:34 +00:00
operator 7a35b684c4 feat: unified fleet CLI, Main Chat preservation policy, sidechat routing, and file transfers
- Added CHAT_POLICY.md and README.md banner enforcing sidechat-first and file-transfer-first rules.
- Added strict Main Chat block to super dm send and super dm wo with --allow-main-chat override.
- Implemented file transfer staging and metadata registry in super dm send-file and super dm files (with clean subcommand).
- Added full job lifecycle management (show, create, enable, disable, delete, run --follow) to super-cli.py and box-ctl.py.
- Audited all jobs in jobs/*.json and redirected automated dispatches away from Main Chat.
- Hardened chromebox-watchdog.sh with systemd user session environment exports and stale singleton cleanup.
- Added compose_check command choice to muse-chat-api.py.
2026-10-04 16:34:25 +00:00
operator 4a935bd0c7 feat(automation): sidechat auto-provisioning, response harvester, followup sweeper, and super CLI 2026-10-04 16:23:10 +00:00