Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
39 commits
Select commit Hold shift + click to select a range
fb6ac92
docs: design local operator dashboard
laulpogan Aug 10, 2026
71de69f
docs: plan local operator dashboard
laulpogan Aug 10, 2026
279be8c
fix: resolve Goose sessions by agent session id
laulpogan Aug 10, 2026
30321b2
feat: collect live operator sessions
laulpogan Aug 10, 2026
fa39c7a
feat: add local topology operations
laulpogan Aug 10, 2026
cedc27e
feat: add localhost operator dashboard
laulpogan Aug 10, 2026
851f60f
fix: harden operator dashboard boundaries
laulpogan Aug 10, 2026
d6c7cf4
fix: retain dashboard token across reloads
laulpogan Aug 10, 2026
e54098a
docs: design fleet-ready session provenance
laulpogan Aug 10, 2026
38c1dd2
docs: plan fleet session provenance
laulpogan Aug 10, 2026
cc404b0
feat: model session provenance
laulpogan Aug 10, 2026
f702576
feat: discover session projects
laulpogan Aug 10, 2026
05c25c1
feat: snapshot live agent processes
laulpogan Aug 10, 2026
e3de0bb
feat: persist session provenance in leases
laulpogan Aug 10, 2026
f0a18c2
feat: serve descriptive live sessions
laulpogan Aug 10, 2026
86774d7
feat: show session provenance in dashboard
laulpogan Aug 10, 2026
6f8bb01
fix: harden session provenance fallbacks
laulpogan Aug 10, 2026
e1f8a4c
fix: keep dashboard details in frame
laulpogan Aug 10, 2026
6dcde82
fix: identify macOS harness processes reliably
laulpogan Aug 10, 2026
d99dc33
feat: show live daemon-only sessions
laulpogan Aug 10, 2026
a21fa2d
fix: preserve operator-started daemons
laulpogan Aug 10, 2026
b3acbf2
fix: speed up dashboard session scans
laulpogan Aug 10, 2026
6c2eb40
docs: design operator topology map
laulpogan Aug 10, 2026
c16dd38
docs: plan operator topology map
laulpogan Aug 10, 2026
6689867
feat: build live operator topology
laulpogan Aug 11, 2026
425befd
fix: project materialized group holders
laulpogan Aug 11, 2026
3ac32f7
feat: serve operator topology snapshot
laulpogan Aug 11, 2026
a40cdc8
feat: add deterministic topology model
laulpogan Aug 11, 2026
7024417
feat: share topology state across map and list
laulpogan Aug 11, 2026
d6463cf
fix: preserve stale topology scan status
laulpogan Aug 11, 2026
b2f95e4
feat: render interactive operator topology map
laulpogan Aug 11, 2026
bd8759b
fix: preserve accessible topology fragments
laulpogan Aug 11, 2026
4d8ff5e
style: satisfy Rust 1.95 clippy
laulpogan Aug 11, 2026
aa38b03
test: prove operator topology map
laulpogan Aug 11, 2026
0042329
fix: preserve operator topology truth
laulpogan Aug 11, 2026
6517384
fix: preserve operator action intent
laulpogan Aug 11, 2026
5b64035
docs: record final operator fixes
laulpogan Aug 11, 2026
6a4fedd
fix: preserve group creation partial boundary
laulpogan Aug 11, 2026
6d93398
fix: gate process imports by platform
laulpogan Aug 11, 2026
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
170 changes: 170 additions & 0 deletions SESSION_LOG_2026_08_10.md

Large diffs are not rendered by default.

337 changes: 337 additions & 0 deletions assets/operator-dashboard.css

Large diffs are not rendered by default.

160 changes: 160 additions & 0 deletions assets/operator-dashboard.html
Original file line number Diff line number Diff line change
@@ -0,0 +1,160 @@
<!doctype html>
<html lang="en">
<head>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width, initial-scale=1">
<meta name="color-scheme" content="light">
<title>Wire operator</title>
<link rel="stylesheet" href="/dashboard.css">
<script src="/topology.js" defer></script>
<script src="/dashboard.js" defer></script>
</head>
<body>
<main class="console-shell">
<header class="console-header">
<div>
<p class="eyebrow">Open Band / local operator</p>
<h1>Wire operator</h1>
<p class="lede">Tune the live sessions on this machine. Link two directly or open one shared room.</p>
</div>
<div class="machine-stamp" aria-label="Access scope">
<span class="machine-stamp__light" aria-hidden="true"></span>
<span>Loopback only</span>
<strong>This machine</strong>
</div>
</header>

<section class="band-scope" aria-labelledby="scope-title">
<div class="band-scope__readout">
<span id="scope-title">Live carrier</span>
<strong id="live-count">—</strong>
<small>agent sessions</small>
</div>
<div class="band-scope__line" aria-hidden="true">
<span></span><span></span><span></span><span></span><span></span><span></span><span></span>
</div>
<p id="last-scan">Waiting for first scan</p>
</section>

<section class="operations" aria-labelledby="operations-title">
<div class="operations__heading">
<div>
<p class="eyebrow">Operations list</p>
<h2 id="operations-title">Live sessions</h2>
</div>
<div class="selection-readout" aria-live="polite">
<strong id="selection-count">0</strong>
<span>selected</span>
</div>
</div>

<div class="action-strip" aria-label="Topology actions">
<button class="button button--primary" id="link-button" type="button" disabled>Link selected</button>
<button class="button button--secondary" id="group-button" type="button" disabled>Create group</button>
<p class="action-hint" id="action-hint">Select two sessions to link them.</p>
</div>

<div class="view-toolbar">
<div class="view-switch" role="group" aria-label="Topology view">
<button id="map-view-button" type="button" aria-pressed="true">Map</button>
<button id="list-view-button" type="button" aria-pressed="false">List</button>
</div>
<div class="filter-bar" role="group" aria-label="Filter live sessions">
<label class="search-filter" for="search-filter">
<span>Search</span>
<input id="search-filter" type="search" autocomplete="off" placeholder="Handle, project, branch, harness">
</label>
<label for="machine-filter">
<span>Machine</span>
<select id="machine-filter"><option value="">All</option></select>
</label>
<label for="harness-filter">
<span>Harness</span>
<select id="harness-filter"><option value="">All</option></select>
</label>
<label for="project-filter">
<span>Project</span>
<select id="project-filter"><option value="">All</option></select>
</label>
<label for="health-filter">
<span>Health</span>
<select id="health-filter"><option value="">All</option></select>
</label>
<label class="connected-filter" for="connected-filter">
<input id="connected-filter" type="checkbox">
<span>Connected only</span>
</label>
</div>
</div>

<div id="notice" class="notice" role="status" aria-live="polite" hidden></div>
<div id="loading" class="loading-state" role="status">Scanning local session leases…</div>
<div id="empty" class="empty-state" hidden>
<strong id="empty-title">No live agent sessions</strong>
<p id="empty-copy">Start a Codex, Claude, or Goose session with Wire enabled. It will appear on the next scan.</p>
</div>

<section id="map-panel" class="map-panel" aria-label="Topology map" hidden>
<button class="button button--quiet fit-map" id="fit-map" type="button">Fit map</button>
<div class="map-stage" id="topology-map" tabindex="0">
<p>Topology map rendering loads here.</p>
</div>
<aside class="map-inspector" id="map-inspector" aria-live="polite">Waiting for topology</aside>
</section>

<div id="list-panel" hidden>
<div class="session-table-wrap" id="table-wrap" hidden>
<table class="session-table">
<thead>
<tr>
<th scope="col"><span class="sr-only">Select</span></th>
<th scope="col">Session</th>
<th scope="col">Harness</th>
<th scope="col">Project</th>
<th scope="col">Machine</th>
<th scope="col">Identity</th>
<th scope="col">Links</th>
<th scope="col">Signal</th>
</tr>
</thead>
<tbody id="session-rows"></tbody>
</table>
</div>
</div>
</section>

<footer class="console-footer">
<span>Reads active MCP leases only</span>
<span>Retired and historical identities stay off-band</span>
</footer>
</main>

<dialog id="confirm-dialog" class="wire-dialog" aria-labelledby="confirm-title">
<form method="dialog">
<p class="eyebrow">Direct local trust</p>
<h2 id="confirm-title">Link these sessions?</h2>
<p id="confirm-copy"></p>
<div class="dialog-actions">
<button class="button button--quiet" value="cancel">Cancel</button>
<button class="button button--primary" id="confirm-link" value="default">Link sessions</button>
</div>
</form>
</dialog>

<dialog id="group-dialog" class="wire-dialog" aria-labelledby="group-title">
<form method="dialog" id="group-form">
<p class="eyebrow">Shared room</p>
<h2 id="group-title">Create group</h2>
<p>Every selected session joins one room. This does not create a full mesh.</p>
<label for="group-name">Group name</label>
<input id="group-name" name="group-name" maxlength="80" autocomplete="off" required>
<label for="group-creator">Creator</label>
<select id="group-creator" name="group-creator" required></select>
<div class="dialog-actions">
<button class="button button--quiet" id="cancel-group" type="button">Cancel</button>
<button class="button button--secondary" id="confirm-group" value="default">Create group</button>
</div>
</form>
</dialog>
</body>
</html>
Loading