From 0eadd096b7b2f2772999c46bebddcb39794463e4 Mon Sep 17 00:00:00 2001 From: operator Date: Mon, 5 Oct 2026 02:48:59 +0000 Subject: [PATCH] feat(fleet): expand sidechat auto-provisioning for muse and dev, integrate response harvesting --- bin/exec-constrained.py | 15 +++++++++++++++ bin/response-harvester.py | 4 ++-- job-sidechats.json | 23 ++++++++++++++++++++--- jobs/dev-hourly-checkin.json | 17 +++++++++++++++++ 4 files changed, 54 insertions(+), 5 deletions(-) create mode 100644 jobs/dev-hourly-checkin.json diff --git a/bin/exec-constrained.py b/bin/exec-constrained.py index 0f40b9c..a973729 100755 --- a/bin/exec-constrained.py +++ b/bin/exec-constrained.py @@ -661,6 +661,21 @@ class Handler(BaseHTTPRequestHandler): {'op': k, 'desc': v['desc'], 'side_effecting': v['side_effecting']} for k, v in sorted(OPS.items())]}) + elif self.path in ('/box', '/box-relay.sh'): + relay_path = os.path.join(BIN_DIR, 'box-relay.sh') + if os.path.isfile(relay_path): + try: + with open(relay_path, 'rb') as f: + data = f.read() + self.send_response(200) + self.send_header('Content-Type', 'text/x-shellscript') + self.send_header('Content-Length', str(len(data))) + self.end_headers() + self.wfile.write(data) + return + except Exception: + pass + self._send(404, {'error': 'not found'}) else: self._send(404, {'error': 'not found'}) diff --git a/bin/response-harvester.py b/bin/response-harvester.py index 096c6f8..c1b3079 100755 --- a/bin/response-harvester.py +++ b/bin/response-harvester.py @@ -69,8 +69,8 @@ try: except ImportError: HAS_PIPELINE = False -VALID_AGENTS = ["muse", "pip", "646", "opm"] -DEFAULT_PORTS = {"muse": 9410, "pip": 9420, "646": 9430, "opm": 9440} +VALID_AGENTS = ["muse", "pip", "646", "opm", "dev", "def"] +DEFAULT_PORTS = {"muse": 9410, "pip": 9420, "646": 9430, "opm": 9440, "def": 9450, "dev": 9460} # Matches EVERY [RESULT ] marker in a message (use with finditer, not # search). The result text is lazy and stops before the next marker (or end of diff --git a/job-sidechats.json b/job-sidechats.json index f09408e..95df555 100644 --- a/job-sidechats.json +++ b/job-sidechats.json @@ -76,8 +76,14 @@ "thread_uuid": "5f33b1ab-a310-4cbb-9ccc-bb7bcd3d1b34", "agent": "pip" }, + "muse tasks": { + "thread_uuid": "3881dae3-30fa-411b-8f5b-f6d5917bc302", + "agent": "muse", + "title": "muse tasks", + "created_at": "2026-10-05T02:44:00+00:00" + }, "muse-tasks": { - "thread_uuid": "414cc0fc-4c46-4cb4-9fa6-07f06912384a", + "thread_uuid": "3881dae3-30fa-411b-8f5b-f6d5917bc302", "agent": "muse" }, "pipe-c3f686": { @@ -100,7 +106,7 @@ "heartbeat-opm": { "thread_uuid": "51695451-ffba-49e2-8c6d-ffa4f511ce5a", "agent": "opm", - "description": "Reuse key for OPM heartbeat -> dedicated heartbeat thread", + "description": "Reuse key for OPM heartbeat -> dedicated heartbeat thread [updated 2026-10-05 to current]", "updated_at": "2026-10-05T02:22:19+00:00" }, "646-pip@646": { @@ -185,7 +191,7 @@ "heartbeat-thread": { "thread_uuid": "51695451-ffba-49e2-8c6d-ffa4f511ce5a", "agent": "opm", - "description": "Alias for heartbeat (dedicated heartbeat channel provisioned 2026-10-05)" + "description": "Alias for heartbeat (dedicated heartbeat channel provisioned 2026-10-05) [updated 2026-10-05 to current]" }, "main-loop": { "thread_uuid": "5f18476d-8994-49e7-a9e0-4838732363fe", @@ -209,5 +215,16 @@ "agent": "646", "title": "box-deep-health", "created_at": "2026-10-05T02:26:37.043639+00:00" + }, + "dev-646-sync": { + "thread_uuid": "4aefde50-c02c-4657-8d18-ad2238ef4cda", + "agent": "dev", + "title": "dev-646-sync", + "created_at": "2026-10-05T02:30:35.461450+00:00" + }, + "pipe-5086a2": { + "thread_uuid": "8a026cff-1b98-48df-9bf3-169b19c2e07c", + "agent": "opm", + "created_at": "2026-10-05T02:37:49.620793+00:00" } } \ No newline at end of file diff --git a/jobs/dev-hourly-checkin.json b/jobs/dev-hourly-checkin.json new file mode 100644 index 0000000..236dccc --- /dev/null +++ b/jobs/dev-hourly-checkin.json @@ -0,0 +1,17 @@ +{ + "name": "dev-hourly-checkin", + "description": "Hourly operational check-in for Dev during active daytime hours", + "agent": "dev", + "schedule": "0 8-22 * * *", + "timeout": 300, + "on_failure": "alert", + "dm_target": "onboarding-dev", + "sidechat": {"create": false}, + "followup": { + "expect_reply": true, + "timeout": "1h", + "nudges": 1, + "escalate": "opm" + }, + "prompt_template": "Hourly operational check-in for Dev.\nJob ID: {job_id}\nTime: {datetime}\n\nPlease report briefly in this thread:\n(1) Current tasks and VM status\n(2) Subagent tasks and tooling audits\n(3) Any blockers or peer coordination items with 646/opm\n\nReply with [RESULT {job_id}] and your status." +}