Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
49 commits
Select commit Hold shift + click to select a range
d31ecab
feat: add SAID Protocol agent identity integration
nullxnothing Jun 2, 2026
b6988da
@
nullxnothing Jun 3, 2026
4231f75
wip: said-protocol integration checkpoint before ui pass
nullxnothing Jun 4, 2026
b787a17
feat: polish settings lane UX (keys, integrations, env manager)
nullxnothing Jun 4, 2026
1837845
@
nullxnothing Jun 4, 2026
f8286ee
merge: wallet lane UX polish into main
nullxnothing Jun 4, 2026
ca185d9
feat: rebuild wallet panel into workspace layout
nullxnothing Jun 4, 2026
f37b45a
style: ui polish pass across panels and primitives
nullxnothing Jun 4, 2026
cf893c8
Merge branch 'main' into feat/said-protocol-integration
nullxnothing Jun 4, 2026
160e2c0
chore: release v4.1.3
nullxnothing Jun 4, 2026
e793849
style: tokenize wallet workspace styles (font ramp, shadows, reuse St…
nullxnothing Jun 4, 2026
82ec12e
test: harden smoke terminal creation (idempotent toggle, wait for ena…
nullxnothing Jun 4, 2026
9489efb
style: restyle activity timeline rows to hairline time-column feed
nullxnothing Jun 4, 2026
c7d076d
test: harden smoke terminal creation with retry + active-project re-pin
nullxnothing Jun 4, 2026
791f7e1
test: fix stale terminal selector in smoke
nullxnothing Jun 4, 2026
ef8efa4
feat(git): open changed file in editor on filename click
nullxnothing Jun 4, 2026
1ae2fcd
style: migrate git panel, editor chrome, file tree to design system
nullxnothing Jun 4, 2026
8d6a538
style: migrate dashboard to design system
nullxnothing Jun 4, 2026
f5e6526
style: migrate terminal chrome to design system
nullxnothing Jun 4, 2026
5abcda3
style: migrate daemon ai panel to design system
nullxnothing Jun 4, 2026
304a0c4
fix(tokens): add --ui alias for --font-ui
nullxnothing Jun 4, 2026
3ce684e
style: align codex panel recessed surfaces + focus
nullxnothing Jun 4, 2026
553a40e
style: migrate agent work panel to design system
nullxnothing Jun 4, 2026
e801ad5
style: migrate agent ops panel to design system
nullxnothing Jun 4, 2026
681f41e
style: migrate agent launcher to design system
nullxnothing Jun 4, 2026
e1b47a2
style: migrate agent station to design system
nullxnothing Jun 4, 2026
f705b39
style: align agent workbench recessed surfaces + drop dead css
nullxnothing Jun 4, 2026
d236b56
style: align claude panel + restrain aria glow to tokens
nullxnothing Jun 4, 2026
06d5274
style: finish overlay migration to canonical tokens
nullxnothing Jun 4, 2026
0566136
style: canonicalize app shell tokens
nullxnothing Jun 4, 2026
cadd67e
style: canonicalize solana toolbox + docs tokens
nullxnothing Jun 4, 2026
2884d99
style: tokenize degen tools + recovery panel
nullxnothing Jun 4, 2026
b46500a
style: canonicalize long-tail panel tokens
nullxnothing Jun 4, 2026
520d79b
chore: ratchet style-debt baselines down to current actuals
nullxnothing Jun 4, 2026
9d581e7
fix(deps): bump hono override 4.12.18 -> 4.12.21
nullxnothing Jun 4, 2026
ae59874
fix(solana): readiness score showed a full ring at any percent
nullxnothing Jun 4, 2026
0a7a1d9
test: update UI smoke selectors for the redesigned panels
nullxnothing Jun 4, 2026
51b9a1e
fix(wallet): auto-select first wallet when none is active
nullxnothing Jun 4, 2026
36987f2
test: tolerate wallet empty-state in layout-cohesion
nullxnothing Jun 4, 2026
19a277b
feat: operator console with sessions, tool catalog, and agent swarms …
nullxnothing Jun 5, 2026
e0c63ca
fix(smoke): update Dashboard responsive expectation for no-wallet state
nullxnothing Jun 5, 2026
dc04acc
feat(memory): add project memory v1 schema, services, and check runner
nullxnothing Jun 5, 2026
eb04ba5
feat(memory): expose memory and checks over IPC
nullxnothing Jun 5, 2026
d8a0bf5
feat(memory): inject approved memory into the ARIA agent prompt
nullxnothing Jun 5, 2026
5652b6a
feat(memory): add Memory panel for reviewing and approving facts
nullxnothing Jun 5, 2026
dd7a410
feat(guard): scan ARIA patch proposals with the project safety scanner
nullxnothing Jun 5, 2026
b6e820d
test(smoke): add live verification for memory and guard
nullxnothing Jun 5, 2026
56f8264
fix(terminal): flip launcher menu above the button when it overflows
nullxnothing Jun 5, 2026
e77a0ce
test(visual): refresh baselines for the operator-console redesign
nullxnothing Jun 5, 2026
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
The table of contents is too big for display.
Diff view
Diff view
  •  
  •  
  •  
29 changes: 29 additions & 0 deletions CHANGELOG.md
Original file line number Diff line number Diff line change
Expand Up @@ -4,6 +4,35 @@ All notable changes to DAEMON are documented here. The format is based on
[Keep a Changelog](https://keepachangelog.com/en/1.1.0/), and this project
follows semantic-ish desktop release versioning.

## [4.2.0] - 2026-06-05

### Added
- **Operator console** — the right-panel AI (ARIA) is now a full daemon operator. It drives
DAEMON from natural language via a registry-driven tool catalog (`electron/services/aria/tools/`)
spanning navigation, settings, wallet, Clawpump, AgentStation, token launches, Flywheel, and git.
Sensitive on-chain actions require typed confirmation and carry a `[MAINNET]` guard; the operator
never pushes to git autonomously.
- **Per-project chat sessions** in the console — new chat (non-destructive), switch, rename, archive,
delete, with auto-titling and memory that rehydrates from the DB on restart (`aria_sessions`,
schema V47). Replaces the old single-thread console.
- **Parallel agent swarms** — launch N tasks in parallel, each in its own isolated git worktree +
branch driven by a headless Claude agent (`WorktreeService` + `SwarmOrchestrator`, schema V48;
`swarm_runs`/`swarm_lanes`). Concurrency-capped, auto-cleaned worktrees, per-lane `RESULTS.md`,
and a Swarms tab in the workbench. Lanes never push — merging stays a manual step.
- Git worktree IPC (`git:worktree-add|list|remove|prune`) and swarm IPC (`swarm:*`).
- Composer `+` opens a context picker menu (toggle active file / project tree / git diff / terminal
logs / wallet) instead of cycling chips.

### Changed
- Broader UX/design-system polish pass across panels (settings, wallet, integrations, launches,
AgentStation, and more) and the in-flight Synapse SAP integration.
- Right panel min-width raised so the operator console header/sessions never clip.
- Schema advanced to V49 (`projects.pinned`/`branch`).

### Docs
- Documented the operator console, sessions, and swarms in the README, agent-context files
(`CLAUDE.md`/`AGENTS.md`), and the landing docs (new `operator-console.md`).

## [4.1.2] - 2026-06-01

### Fixed
Expand Down
4 changes: 4 additions & 0 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -99,6 +99,10 @@ Requires **Node.js 22+** and **pnpm 9+**.

**Agent Launcher** — Spawn Claude Code agents with custom system prompts, model selection, and per-project MCP configurations. Agents run as real CLI sessions in dedicated terminal tabs.

**Operator Console** — The right-panel AI operator drives the whole IDE from natural language. Per-project chat sessions (new / switch / rename / archive / delete) with memory that survives restarts. It can run DAEMON itself — create an agent wallet for the codebase, spin up a Clawpump agent, preflight and launch a token, configure the Flywheel, commit changes — through a tool catalog with typed confirmation for sensitive on-chain actions (and a `[MAINNET]` guard). It never pushes to git autonomously.

**Agent Swarms** — From the operator, launch several tasks to run in parallel, each in its own isolated git worktree and branch, driven by a separate Claude agent. The Swarms tab shows live run/lane status; each lane writes a `RESULTS.md`. Concurrency is capped and worktrees are cleaned up automatically — merging stays a manual, reviewed step.

**MCP Management** — Toggle project-level and global MCP servers from the sidebar. Changes write directly to `.claude/settings.json` and `.mcp.json` with a restart indicator when configs change.

**Git** — Branch switching, per-file and folder-level staging, commit, push, stash save/pop, branch creation, and tag management.
Expand Down
101 changes: 101 additions & 0 deletions RESULTS.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,101 @@
# Settings UX Lane — Results

Polish pass on the settings lane (SettingsPanel + EnvManager). Goal was a calm,
scannable, trustworthy surface for dense forms, toggles, and key-management flows.

## Files changed (all in-lane)

| File | What changed |
| --- | --- |
| `src/panels/SettingsPanel/SettingsPanel.tsx` | Keys/Integrations/Providers/Tools/Setup/Crashes UX; added `SecretInput` + `middleEllipsis` helpers; confirmation-gated destructive actions |
| `src/panels/SettingsPanel/SettingsPanel.css` | Secret-field + reveal styles, `quiet-danger` button, integration key→value row fix, provider status-card auth alignment, Keys list spacing |
| `src/panels/EnvManager/EnvManager.tsx` | Unified DEV/PROD reveal to click-to-reveal (removed hover-reveal of secrets) |
| `src/panels/EnvManager/EnvManager.css` | Compact stat cards (killed the tall empty wells), tightened stats row |

## Review method

Launched the real app (this worktree's renderer on Vite `:7777`, Electron in smoke
mode on CDP `:9223` to coexist with the sibling `ux-wallet` instance that owns the
default `:9222`) and drove it via the `electron-test` MCP. Collapsed terminal/right
panel/sidebar to review each settings surface at full height. Screenshotted every
tab before and after each change — did not edit CSS blind.

## Visual changes

### Keys tab (security-sensitive)
- **Before:** no grouping eyebrows; tall sparse rows; a bare `...347b` fingerprint
floating mid-row; long key names overflowing; **`Remove` rendered loud red and
deleted immediately with no confirmation**; plaintext-capable value field with no
reveal control.
- **After:** `STORED KEYS` / `ADD A KEY` eyebrows; each row shows a green "set" status
dot + middle-ellipsised key name + right-aligned `ends ·347b` value fingerprint;
`Remove` is now a **quiet secondary** (muted until hover/focus) and **confirmation-
gated** via the shared `confirm()` dialog; the add-value field is a masked
`SecretInput` with an explicit **Show/Hide** reveal-on-intent toggle; a transient
"Saved …" confirmation replaces the helper line after a successful add.

### Integrations tab
- **Before:** Status / CLI Path / Voight rows had the name set to `flex:1`, stranding
every value against the far-right edge with a large dead gap — read as disconnected;
two different row systems (`integration-row` vs `display-row`) stacked together;
password fields with no reveal; long CLI path with no ellipsis; loud red `Remove`.
- **After:** rows are tight **key→value pairs** (fixed-width name, value sits directly
after it); hairline dividers give consistent rhythm; CLI path uses middle-ellipsis
with full value on hover/title; API-key and Voight-key fields are masked
`SecretInput`s with reveal toggles; `Remove` demoted to `quiet-danger`; MCP rows pin
the toggle to the right with the `project` source label beside it.

### Providers tab
- **Before:** three pref groups separated by dividers only (no titles); status cards
had a name→authMode gap.
- **After:** added `CONNECTIONS` / `ARIA` / `DAEMON AI` / `DEFAULTS` section eyebrows so
the groups are named, not just implied; status-card authMode is muted mono,
right-aligned.

### Tools tab
- Removed a redundant stacked description + divider before `WORKSPACE PROFILE`.

### Setup / Crashes tabs
- `Reset UI Layout` is now `quiet-danger` **and confirmation-gated** (was loud red,
fired immediately). `Clear History` demoted to `quiet-danger`.

### EnvManager
- **Before:** the three stat cards (`LOCAL KEYS` / `PRODUCTION KEYS` / `SYNCED`) used the
shared `Stat` module's `88px` min-height + `fs-28` stacked value, leaving a tall
empty well under a tiny number (~120px tall cards). **DEV revealed on click but PROD
revealed on hover** — a secret echoing on every cursor pass, the exact anti-pattern
to avoid.
- **After:** stat cards are compact single-line `LABEL … value` rows (~37px, ~80px of
vertical space reclaimed). **DEV and PROD now share one safe model: single-click
reveals/hides, double-click edits, never reveal on hover.** Both masked by default.

## Design-system compliance
- Spacing snapped to the 4/8/12/16 scale on touched rows; no off-scale values added.
- Tokens only — `pnpm run lint:styles` passes (no new literal font-sizes, hex colors,
radii, or inline shadows; all within baseline budgets).
- Status via 5px colored dots, no emoji in chrome. Green reserved for set/healthy/saved.
- Secret fields masked-by-default with obvious, safe reveal affordances.

## Deferred / shared-file notes
- **No backend changes were required.** All fixes were renderer-only and stayed inside
the two panel subtrees. The `confirm()` store and `Dot` component were used as
read-only existing APIs (no edits).
- The EnvManager expanded per-project drill-down still shows full plaintext values; it
sits behind an explicit expand click and was left as an intentional reveal context.
Flagging it here as a candidate for a future masked treatment if desired.

## Gate loop status
- `pnpm run typecheck` — ✅ pass (clean)
- `pnpm run test` — ⚠️ 784/785 pass. The single failure is
`test/services/SeekerRelayService.test.ts` (mobile relay session-auth, returns 404
instead of 200). **Pre-existing on branch HEAD and unrelated to this lane** —
verified by stashing the four panel changes and reproducing the identical failure.
`SeekerRelayService` is outside the settings lane and was not touched.
- `pnpm run build` — ✅ pass (renderer + electron main + preload)
- `pnpm run lint:styles` — ✅ pass

## Screenshots
Captured inline in the working session (before/after for Keys, Integrations, Providers,
Display, Tools, Panels, and EnvManager). After-state PNGs were also written to the
system temp dir during review (`keys_after.png`, `env_after.png`); no screenshot files
were committed into the lane subtree to avoid touching out-of-lane paths.
4 changes: 4 additions & 0 deletions build/Daemon.icon/Assets/mark.svg
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
34 changes: 34 additions & 0 deletions build/Daemon.icon/icon.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,34 @@
{
"fill" : {
"solid" : "srgb:0.070588,0.078431,0.078431,1.000000"
},
"groups" : [
{
"layers" : [
{
"image-name" : "mark.svg",
"name" : "Mark",
"position" : {
"scale" : 1,
"translation-in-points" : [ 0, 0 ]
}
}
],
"shadow" : {
"kind" : "neutral",
"opacity" : 0.5
},
"specular" : true,
"translucency" : {
"enabled" : false,
"value" : 0.5
}
}
],
"supported-platforms" : {
"circles" : [
"watchOS"
],
"squares" : "shared"
}
}
48 changes: 48 additions & 0 deletions build/icon-src/HANDOFF.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,48 @@
# DAEMON macOS app icon — Liquid Glass handoff

**Scope: macOS only.** This sets up the new macOS 26 Tahoe "Liquid Glass" icon.
**Windows is intentionally unchanged** — it keeps the existing `resources/icon.ico`
(`win.icon` in `electron-builder.json` was not touched). Linux is out of scope here.

Two small code changes are included (already on the branch — listed at the bottom).

## The source of truth (vectors)
- `build/icon-src/mark.svg` — white logo mark only, transparent, 1024 canvas.
This is the Liquid Glass **foreground** layer.
- `build/icon-src/icon-full.svg` — full composed icon (squircle + #121414 bg + mark),
used only to rasterize the legacy .icns.
- `build/icon-src/generate.sh` — regenerates the macOS assets below from the two
SVGs and re-validates the .icon. Requires librsvg
(`brew install librsvg`) + macOS 26 / Xcode 26.

## The Liquid Glass icon (the important new bit)
- `build/Daemon.icon/` — Icon Composer document.
- `icon.json` — dark #121414 background fill + the mark as a
glass layer (specular highlight + neutral shadow).
The system applies the squircle mask, glass, and
shadow at render time — they are NOT baked in.
- `Assets/mark.svg` — the foreground layer art.

## How it ships (macOS)
`electron-builder.json` → `mac.icon: "build/Daemon.icon"`.
electron-builder 26.8.1 compiles the .icon with `actool` into an `Assets.car`
+ `CFBundleIconName`, and auto-derives an `.icns` fallback.

REQUIREMENT: the machine that *packages the macOS app* must run **macOS 26 + Xcode 26**
(actool ≥ 26). Otherwise the .icon compile step fails. CI runners need this too.

## macOS fallbacks (regenerated, same artwork)
- `build/icon.icns` — full multi-res icns (pre-Tahoe macOS).
- `public/daemon-icon.png` (+ `-48`) — dev-mode dock/window icon (unpackaged Electron).

## Code changes (for review)
1. `electron-builder.json` — added `"icon": "build/Daemon.icon"` under `mac` only.
2. `electron/main/index.ts` — the runtime `app.dock.setIcon(daemon-icon.png)` call
is now gated to `!app.isPackaged`. In a packaged build we must NOT override the
dock icon, otherwise the flat PNG replaces the system Liquid Glass icon.

## Verifying
- Dev (`pnpm dev`): dock shows the new dark-squircle PNG (NOT the glass effect —
that's expected; Liquid Glass only renders for a packaged/signed .app).
- Real glass: build a bundle (`pnpm package`, or `electron-builder --mac dir` for an
unsigned quick check) and look at the .app in Finder / the dock on Tahoe.
51 changes: 51 additions & 0 deletions build/icon-src/generate.sh
Original file line number Diff line number Diff line change
@@ -0,0 +1,51 @@
#!/usr/bin/env bash
# Regenerate every app-icon asset from the two vector sources in this folder:
# mark.svg - white logo mark only, transparent, full 1024 canvas
# (the Liquid Glass FOREGROUND layer; system adds mask/glass/shadow)
# icon-full.svg - full composed icon: squircle + #121414 background + mark
# (used to rasterize the legacy .icns / PNG fallbacks)
#
# The Liquid Glass icon itself lives in ../Daemon.icon (icon.json + Assets/mark.svg).
# electron-builder (>=26, macOS 26 + Xcode 26) compiles ../Daemon.icon via actool into
# an Assets.car + CFBundleIconName, and derives an .icns automatically. The assets below
# are the cross-platform / pre-Tahoe / dev-dock fallbacks.
#
# Requires: rsvg-convert (librsvg), sips + iconutil (macOS).
set -euo pipefail
cd "$(dirname "$0")"
ROOT="../.."

rsvg-convert -w 1024 -h 1024 icon-full.svg -o full-1024.png

IS=daemon.iconset
rm -rf "$IS"; mkdir -p "$IS"
g(){ sips -Z "$1" full-1024.png --out "$IS/$2" >/dev/null; }
g 16 icon_16x16.png; g 32 icon_16x16@2x.png
g 32 icon_32x32.png; g 64 icon_32x32@2x.png
g 128 icon_128x128.png; g 256 icon_128x128@2x.png
g 256 icon_256x256.png; g 512 icon_256x256@2x.png
g 512 icon_512x512.png; cp full-1024.png "$IS/icon_512x512@2x.png"
iconutil -c icns "$IS" -o icon-new.icns

# Deploy
cp icon-new.icns "$ROOT/build/icon.icns"
cp full-1024.png "$ROOT/build/icons/1024x1024.png"
sips -Z 512 full-1024.png --out "$ROOT/build/icon.png" >/dev/null
sips -Z 1024 full-1024.png --out "$ROOT/public/daemon-icon.png" >/dev/null
sips -Z 48 full-1024.png --out "$ROOT/public/daemon-icon-48.png">/dev/null
sips -Z 512 full-1024.png --out "$ROOT/resources/icon.png" >/dev/null
for sz in 512 256 128 64 48 32 24 16; do
sips -Z "$sz" full-1024.png --out "$ROOT/build/icons/${sz}x${sz}.png" >/dev/null
done

# Validate the Liquid Glass bundle compiles (same call electron-builder makes)
TMP=$(mktemp -d); cp -R "$ROOT/build/Daemon.icon" "$TMP/Icon.icon"; mkdir -p "$TMP/out"
actool "$TMP/Icon.icon" --compile "$TMP/out" --output-format human-readable-text \
--notices --warnings --output-partial-info-plist "$TMP/out/p.plist" \
--app-icon Icon --include-all-app-icons --accent-color AccentColor \
--enable-on-demand-resources NO --development-region en \
--target-device mac --minimum-deployment-target 26.0 --platform macosx
rm -rf "$TMP"

rm -rf "$IS" full-1024.png icon-new.icns
echo "Icons regenerated."
17 changes: 17 additions & 0 deletions build/icon-src/icon-full.svg
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
4 changes: 4 additions & 0 deletions build/icon-src/mark.svg
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file modified build/icon.icns
Binary file not shown.
1 change: 1 addition & 0 deletions electron-builder.json
Original file line number Diff line number Diff line change
Expand Up @@ -24,6 +24,7 @@
}
],
"mac": {
"icon": "build/Daemon.icon",
"target": ["dmg", "zip"],
"category": "public.app-category.developer-tools",
"artifactName": "${productName}-${arch}.${ext}",
Expand Down
Loading
Loading