54 desktop app - #60
Merged
Merged
Conversation
…omments Co-Authored-By: Claude Fable 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_019LdtNwxJJ3USeg2pzhb8sR
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_019LdtNwxJJ3USeg2pzhb8sR
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_019LdtNwxJJ3USeg2pzhb8sR
…ation, backfill sweep - comments.Fetch now honors its context: stream deadline is min(ctx deadline, 30s) and ctx cancellation resets the stream, so a stalled peer can no longer pin HTTP handlers (~60s) or delay ledger Close (~30s) past the caller's bound - comment-body GET handlers validate CIDs with ParseCIDString (length + multihash prefix) for an instant 400 instead of running the full miss pipeline on garbage input - bodyFetcher gains a periodic backfill sweep (1m after start, then every 10m, capped per sweep) that re-fetches bodies missed by the live queue, healing archive gaps from drops or unreachable authors - boss bootstrap wires Options.Comments so bosses pre-replicate bodies on gossip, making fetch-on-miss the rare path - findCommentAuthor stops the inbox scan at first match and logs scan errors instead of swallowing them Co-Authored-By: Claude Fable 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_019LdtNwxJJ3USeg2pzhb8sR
…ired fields The equivocator/reputation-floor gate was only applied on the OpenAI-compat path, so direct /api/execute and /api/execute/async — including the desktop Dispatch button — bypassed it entirely. A below-floor or equivocating worker would execute regardless of --reputation-floor. Both handlers now call checkTrust before dialing and return 403 with the refusal reason. Also validate worker_id and prompt up front: an empty/missing worker_id now returns 400 'worker_id is required' instead of a misleading 404, and a missing prompt returns 400 instead of reaching the dial. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_019LdtNwxJJ3USeg2pzhb8sR
The SDK could read comments (comment_body, log) but had no way to POST
/v1/peers/{id}/comments/self, so SDK users couldn't rate or comment on
workers. Add sync + async comment(peer_id, text, rating=None) returning
CommentSubmitResult(cid, ledger_hash).
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_019LdtNwxJJ3USeg2pzhb8sR
Two user-reported bugs: 1. Chat sessions were never persisted. saveSessions writes under a per-project key (chat:sessions:<projectId>), but the settings:set IPC allowlist only contained the 8 static keys, so every write threw 'refused settings key'. Navigating away from Chat dropped the in-memory state and it could never be reloaded. Extract the guard into isAllowedSettingsKey() and permit well-formed chat:sessions:<id> keys. 2. The toolbar was stuck on 'Connecting to relay…'. useAbout() had no refetchInterval, so /v1/about was fetched once at boot — before the relay was dialed — and never refreshed. Add a 5s poll so relay connectedness, ledger size, and uptime stay live. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_019LdtNwxJJ3USeg2pzhb8sR
On today's mesh the rater-trust label is near-degenerate: a boss only self-trusts (verified) and every other boss reads unverified, because nobody rates bosses — so the per-row badge mostly signalled 'mine vs a stranger's' and read like a signature-verification failure. Remove the per-row badge; keep the aggregate honesty score, the reputation-floor dispatch gate, and the 'X verified / Y unverified raters' summary. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_019LdtNwxJJ3USeg2pzhb8sR
Each entry now displays which boss authored it as a short 12D…xxx chip (first 3 / last 3 chars, mirroring AgentCard). Click copies the full peer ID to the clipboard with a toast. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_019LdtNwxJJ3USeg2pzhb8sR
Drops the last verified/unverified surface. The rater-trust concept is near-degenerate on today's mesh (nobody rates bosses), so the summary was low-signal. Aggregate honesty + the dispatch trust gate are unchanged. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_019LdtNwxJJ3USeg2pzhb8sR
The lighthouse was dialed once at startup with no connmgr protection and no reconnect. After the first drop (idle prune, reservation TTL, or a network blip) the node lost its relay permanently — the mesh kept working via mDNS/DHT but boss /v1/about reported the relay unreachable, so the desktop toolbar was stuck on 'Connecting to relay…' after ~an hour. Protect the relay peer from connmgr trimming and add a 30s maintenance loop that re-dials + re-reserves whenever the connection drops. Exits on context cancellation (no naked goroutine). Co-Authored-By: Claude Fable 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_019LdtNwxJJ3USeg2pzhb8sR
The health banner and all four stat cards used Card live={...}, which
adds an accent glow plus a pulsing green corner dot. Drop live on the
Status surface so the cards render as plain neutral panels. Health is
still conveyed by the banner status dot and the 'Up'/value colors.
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_019LdtNwxJJ3USeg2pzhb8sR
Remove the 'public mesh' and 'up HH:MM:SS' segments from the health banner sub-line; mesh mode still shows on the Relay card and uptime on the Boss card. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_019LdtNwxJJ3USeg2pzhb8sR
No app.setName() was called, so dev builds showed 'Electron' in the macOS menu bar, app switcher, and dock hover. Set it before app ready and give the window an explicit AgentFM title. Packaged builds already got this from electron-builder.yml (productName). Co-Authored-By: Claude Fable 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_019LdtNwxJJ3USeg2pzhb8sR
app.setName() fixes the menu bar but not the macOS Dock, which reads
CFBundleName from the running .app bundle — in dev that's Electron's own
bundle ('Electron'). Add a predev script that rewrites the dev bundle's
Info.plist to 'AgentFM' before each npm run dev. Idempotent, macOS-only,
no-op when the bundle is absent. Packaged builds are unaffected (they use
electron-builder productName).
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_019LdtNwxJJ3USeg2pzhb8sR
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.
No description provided.