Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
43 commits
Select commit Hold shift + click to select a range
b4506a8
fix: restore Codex chat path + fix mic-button crash
Dexploarer May 28, 2026
b668ba6
.
Dexploarer May 28, 2026
caa348a
feat(providers): add Anthropic + dev-proxy providers, quota detection…
Dexploarer May 28, 2026
020ebdd
feat(providers): config-driven provider registry + live switching
Dexploarer May 28, 2026
1146a44
refactor(daemon): SwooshDaemon executable → in-process library
Dexploarer May 28, 2026
178bf46
feat(app): boot the agent runtime in-process — daemon merged into the…
Dexploarer May 28, 2026
a84b611
refactor(daemon): remove obsolete swooshd launchd lifecycle
Dexploarer May 28, 2026
c686642
chore(plumber): add topology agent + Swift flow-check + hermetic tests
Dexploarer May 28, 2026
dca016c
test(providers/api/config): live-switch, auth-gate, readiness + CI
Dexploarer May 28, 2026
98da11a
fix(test): WebBridge UA assertions tolerate macOS 26 empty-string def…
Dexploarer May 28, 2026
f210cfa
chore(xcodegen): sync xcodeproj with project.yml (SwooshDaemon app de…
Dexploarer May 28, 2026
f18e5b3
chore(app): drop stale launchd plist reference from boot diagnostics
Dexploarer May 28, 2026
cd4aa16
feat: agentic Detour calendar + menu-bar tray panels
Dexploarer May 29, 2026
cd777fc
feat(ui): Volt Paper design system + app-wide token reskin
Dexploarer May 29, 2026
d71b0bf
style(ui): migrate raw color literals to Volt Paper across SwooshUI
Dexploarer May 29, 2026
05696e6
style(ui): Volt Paper migration for CodexBar (usage panel + preferences)
Dexploarer May 29, 2026
e03c20e
chore(flow): assert SwooshGenerativeUI stays a dependency-free leaf
Dexploarer May 29, 2026
6c80b5a
feat(ui): memory candidate review — per-row approve/reject + Approve-All
Dexploarer May 29, 2026
1073034
fix(wallet): connected reflects real accounts + wire create-wallet flow
Dexploarer May 29, 2026
b8d6040
feat(ui): Agent & Safety pane + mount memory toast on dashboard
Dexploarer May 29, 2026
7f6a6bd
refactor(ui): drop dead Settings›Providers, show live daemon connection
Dexploarer May 29, 2026
d1afe20
feat(ui): surface Approvals queue + Firewall grants in the dashboard
Dexploarer May 29, 2026
aed1b8e
feat(launchpad): pump.fun prepare-only launch executor
Dexploarer May 29, 2026
305f057
feat(ui): real token-launch form (image, socials, dev-buy)
Dexploarer May 29, 2026
7dbeee3
docs(readme): rewrite for the in-process runtime + prominent install/run
Dexploarer May 29, 2026
94146f9
docs(readme): brand the release line "Detour — Swoosh Edition"
Dexploarer May 29, 2026
1c9c72f
ci: raise test-job cap to 120m + cache SwiftPM build
Dexploarer May 29, 2026
502945c
ci: build test targets so the cache covers them (faster warm runs)
Dexploarer May 29, 2026
045ff07
feat(ui): wallet tray charts — 2D donut/bar + macOS 26 Chart3D option
Dexploarer May 30, 2026
2c59eb0
test/ci: mitigate parallel test-suite deadlock (NOT a confirmed root …
Dexploarer May 30, 2026
162517e
feat(onchain): remove launchpad token-launch surface, keep trading + …
Dexploarer May 30, 2026
1759b3f
chore(models): trim 3 off-domain catalog entries for gaming focus
Dexploarer May 30, 2026
1f34f35
docs(studio): Swoosh Studio umbrella architecture spec
Dexploarer May 30, 2026
87a9f1e
Build Cartridge game harness integrations
Dexploarer Jun 1, 2026
a89459a
Integrate Cartridge scaffold materialization
Dexploarer Jun 1, 2026
f5dd315
Import Pipeline graphs into Cartridge sessions
Dexploarer Jun 1, 2026
10addb6
Catalog Cartridge 3D generation providers
Dexploarer Jun 1, 2026
ef8fe46
Catalog Cartridge 2D creation providers
Dexploarer Jun 1, 2026
d5927f9
Commit remaining workspace updates
Dexploarer Jun 1, 2026
acdd3e7
Add Cartridge voice laptop CLI starters
Dexploarer Jun 1, 2026
9f311a6
Reposition Swoosh around Cartridge gaming
Dexploarer Jun 1, 2026
0816399
Remove remaining non-game runtime surfaces
Dexploarer Jun 1, 2026
4526275
Integrate full Cartridge creation catalog
Dexploarer Jun 1, 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
  •  
  •  
  •  
3 changes: 3 additions & 0 deletions .claude/agent-memory/plumber/MEMORY.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,3 @@
# Plumber Agent Memory Index

- [Swoosh lane patterns](lane-patterns.md) — canonical SwooshDaemon bridge pattern, SwooshAPIRuntimeSources closure wiring, SwooshClient extension conventions
97 changes: 97 additions & 0 deletions .claude/agent-memory/plumber/lane-patterns.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,97 @@
---
name: lane-patterns
description: Canonical wiring patterns in Swoosh for daemon modules: bridge files, runtime-sources closure, SwooshClient extensions, SwooshUI RPC-only reads
metadata:
type: project
---

## Canonical lane pattern for a new feature module (e.g., SwooshCalendar)

Every new feature module that exposes agent tools + an API endpoint + a UI panel follows this file layout:

### New module (SwooshCalendar)

Check notice on line 12 in .claude/agent-memory/plumber/lane-patterns.md

View check run for this annotation

Codacy Production / Codacy Static Code Analysis

.claude/agent-memory/plumber/lane-patterns.md#L12

Expected: 1; Actual: 0; Below
- `Sources/SwooshCalendar/CalendarEvent.swift` — domain model (Codable, Sendable, actor)

Check notice on line 13 in .claude/agent-memory/plumber/lane-patterns.md

View check run for this annotation

Codacy Production / Codacy Static Code Analysis

.claude/agent-memory/plumber/lane-patterns.md#L13

Lists should be surrounded by blank lines
- `Sources/SwooshCalendar/CalendarStore.swift` — `CalendarStoring` protocol + `FileCalendarStore` actor
- `Sources/SwooshCalendar/CalendarTools.swift` — `SwooshTool` conformances + `CalendarToolDependencies`

### Package.swift

Check notice on line 17 in .claude/agent-memory/plumber/lane-patterns.md

View check run for this annotation

Codacy Production / Codacy Static Code Analysis

.claude/agent-memory/plumber/lane-patterns.md#L17

Expected: 1; Actual: 0; Below
- `.target(name: "SwooshCalendar", dependencies: ["SwooshTools"])` — matches SwooshCron/SwooshGoals exactly

Check notice on line 18 in .claude/agent-memory/plumber/lane-patterns.md

View check run for this annotation

Codacy Production / Codacy Static Code Analysis

.claude/agent-memory/plumber/lane-patterns.md#L18

Lists should be surrounded by blank lines
- SwooshToolsets += SwooshCalendar
- SwooshDaemon += SwooshCalendar

### Daemon bridge (NOT Daemon.swift)

Check notice on line 22 in .claude/agent-memory/plumber/lane-patterns.md

View check run for this annotation

Codacy Production / Codacy Static Code Analysis

.claude/agent-memory/plumber/lane-patterns.md#L22

Expected: 1; Actual: 0; Below
- NEW `Sources/SwooshDaemon/CalendarAPIBridge.swift` — `extension SwooshDaemon` containing domain→wire mapping functions

Check notice on line 23 in .claude/agent-memory/plumber/lane-patterns.md

View check run for this annotation

Codacy Production / Codacy Static Code Analysis

.claude/agent-memory/plumber/lane-patterns.md#L23

Lists should be surrounded by blank lines
- Pattern matches: GoalsAPIBridge.swift, CronAPIBridge.swift

### SwooshAPIRuntimeSources

Check notice on line 26 in .claude/agent-memory/plumber/lane-patterns.md

View check run for this annotation

Codacy Production / Codacy Static Code Analysis

.claude/agent-memory/plumber/lane-patterns.md#L26

Expected: 1; Actual: 0; Below
Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Codacy has a fix for the issue: Expected: 1; Actual: 0; Below

Suggested change
### SwooshAPIRuntimeSources
### SwooshAPIRuntimeSources

- Add closure property `calendarEvents: @Sendable () async -> CalendarEventsResponse` with default `{ CalendarEventsResponse(events: []) }`

Check notice on line 27 in .claude/agent-memory/plumber/lane-patterns.md

View check run for this annotation

Codacy Production / Codacy Static Code Analysis

.claude/agent-memory/plumber/lane-patterns.md#L27

Lists should be surrounded by blank lines
- SwooshAPI itself does NOT import SwooshCalendar — composition happens in the daemon via the closure

### SwooshClient

Check notice on line 30 in .claude/agent-memory/plumber/lane-patterns.md

View check run for this annotation

Codacy Production / Codacy Static Code Analysis

.claude/agent-memory/plumber/lane-patterns.md#L30

Expected: 1; Actual: 0; Below
- NEW `Sources/SwooshClient/WireTypes+Calendar.swift` — wire types only (Codable, Sendable, zero deps)

Check notice on line 31 in .claude/agent-memory/plumber/lane-patterns.md

View check run for this annotation

Codacy Production / Codacy Static Code Analysis

.claude/agent-memory/plumber/lane-patterns.md#L31

Lists should be surrounded by blank lines
Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Codacy has a fix for the issue: Lists should be surrounded by blank lines

Suggested change
- NEW `Sources/SwooshClient/WireTypes+Calendar.swift` — wire types only (Codable, Sendable, zero deps)
- NEW `Sources/SwooshClient/WireTypes+Calendar.swift` — wire types only (Codable, Sendable, zero deps)

- NEW `Sources/SwooshClient/SwooshAPIClient+Calendar.swift` — `extension SwooshAPIClient` GET method
- SwooshClient has ZERO deps on SwooshCalendar

### SwooshUI

Check notice on line 35 in .claude/agent-memory/plumber/lane-patterns.md

View check run for this annotation

Codacy Production / Codacy Static Code Analysis

.claude/agent-memory/plumber/lane-patterns.md#L35

Expected: 1; Actual: 0; Below
- `CalendarTrayPanel.swift` — reads via `SwooshAPIClient.calendarEvents()` RPC only

Check notice on line 36 in .claude/agent-memory/plumber/lane-patterns.md

View check run for this annotation

Codacy Production / Codacy Static Code Analysis

.claude/agent-memory/plumber/lane-patterns.md#L36

Lists should be surrounded by blank lines
- SwooshUI must NOT import SwooshCalendar

### SwooshToolsets/Exports.swift

Check notice on line 39 in .claude/agent-memory/plumber/lane-patterns.md

View check run for this annotation

Codacy Production / Codacy Static Code Analysis

.claude/agent-memory/plumber/lane-patterns.md#L39

Expected: 1; Actual: 0; Below
- Add `calendar: CalendarToolDependencies?` to `SelfImprovementDependencies`

Check notice on line 40 in .claude/agent-memory/plumber/lane-patterns.md

View check run for this annotation

Codacy Production / Codacy Static Code Analysis

.claude/agent-memory/plumber/lane-patterns.md#L40

Lists should be surrounded by blank lines
- Add `registerCalendar` hook + conditional call in `registerAll`

### Permissions

Check notice on line 43 in .claude/agent-memory/plumber/lane-patterns.md

View check run for this annotation

Codacy Production / Codacy Static Code Analysis

.claude/agent-memory/plumber/lane-patterns.md#L43

Expected: 1; Actual: 0; Below
- Add `swooshCalendarRead` / `swooshCalendarWrite` to SwooshTools/SwooshPermission.swift

Check notice on line 44 in .claude/agent-memory/plumber/lane-patterns.md

View check run for this annotation

Codacy Production / Codacy Static Code Analysis

.claude/agent-memory/plumber/lane-patterns.md#L44

Lists should be surrounded by blank lines
- Do NOT reuse `calendarRead`/`calendarWrite` (those gate Apple/Scout system calendar)
- Update Docs/PermissionModel.md

### ToolsetID

Check notice on line 48 in .claude/agent-memory/plumber/lane-patterns.md

View check run for this annotation

Codacy Production / Codacy Static Code Analysis

.claude/agent-memory/plumber/lane-patterns.md#L48

Expected: 1; Actual: 0; Below
- Add `case calendar` to ToolsetID in SwooshTools/Tool.swift

Check notice on line 49 in .claude/agent-memory/plumber/lane-patterns.md

View check run for this annotation

Codacy Production / Codacy Static Code Analysis

.claude/agent-memory/plumber/lane-patterns.md#L49

Lists should be surrounded by blank lines

### Wire-type naming convention

Check notice on line 51 in .claude/agent-memory/plumber/lane-patterns.md

View check run for this annotation

Codacy Production / Codacy Static Code Analysis

.claude/agent-memory/plumber/lane-patterns.md#L51

Expected: 1; Actual: 0; Below
The repo uses `…RecordSummary` or `…Summary` for projected wire types.
Use `CalendarEventSummary` (not `CalendarEvent`) to match convention and avoid
collision with the domain type in daemon bridge files that import both.

## check-flow.sh additions for SwooshCalendar

Rule: SwooshUI imports no SwooshCalendar (grep guard)
Rule: SwooshCalendar added to IOS_FORBIDDEN list if iOS isolation is desired
Update .claude/topology.md with two lanes:
- agent write: AgentToolLoop → ToolRegistry → firewall → CalendarTools → FileCalendarStore

Check notice on line 61 in .claude/agent-memory/plumber/lane-patterns.md

View check run for this annotation

Codacy Production / Codacy Static Code Analysis

.claude/agent-memory/plumber/lane-patterns.md#L61

Expected: 0; Actual: 2

Check notice on line 61 in .claude/agent-memory/plumber/lane-patterns.md

View check run for this annotation

Codacy Production / Codacy Static Code Analysis

.claude/agent-memory/plumber/lane-patterns.md#L61

Lists should be surrounded by blank lines
- UI read: CalendarTrayPanel → SwooshAPIClient → /api/calendar/events → runtime-sources closure → FileCalendarStore

Check notice on line 62 in .claude/agent-memory/plumber/lane-patterns.md

View check run for this annotation

Codacy Production / Codacy Static Code Analysis

.claude/agent-memory/plumber/lane-patterns.md#L62

Expected: 0; Actual: 2
Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Codacy has a fix for the issue: Expected: 0; Actual: 2

Suggested change
- UI read: CalendarTrayPanel → SwooshAPIClient → /api/calendar/events → runtime-sources closure → FileCalendarStore
- UI read: CalendarTrayPanel → SwooshAPIClient → /api/calendar/events → runtime-sources closure → FileCalendarStore


**Why:** Validated during PRE-FLIGHT for the Swoosh Calendar feature (2026-05-28).
Pattern matches SwooshCron + SwooshGoals exactly.
**How to apply:** Use this as the reference when adding any future feature module with agent tools + API endpoint + UI surface.

## SwooshUI dashboard pane lane (Memory/Wallet/Safety pattern, 2026-05-29)

For new dashboard panes that read/write daemon state, the correct lane is:

```
DashboardView (tab case + sidebarRow) → SafetyPane / WalletPane / MemoriesPane
→ SwooshDaemonClient.client() → SwooshAPIClient (RPC)
→ SwooshAPI /api/* route → daemon domain store
```

### Import contract (POST-FLIGHT verified)

Check notice on line 78 in .claude/agent-memory/plumber/lane-patterns.md

View check run for this annotation

Codacy Production / Codacy Static Code Analysis

.claude/agent-memory/plumber/lane-patterns.md#L78

Expected: 1; Actual: 0; Below
New pane files import ONLY: `SwiftUI`, `SwooshGenerativeUI`, `SwooshClient`, `Foundation`
Chain IDs, preset IDs, flag keys are LOCAL strings — never import SwooshWallet or SwooshConfig
MemoryApproval.swift (bounded-concurrency helper): `Foundation` + `SwooshClient` only (no SwiftUI)
ToastCenter.swift (shared @Observable queue + host modifier): `SwiftUI` + `SwooshGenerativeUI` only

### DashboardTab enum change protocol

Check notice on line 84 in .claude/agent-memory/plumber/lane-patterns.md

View check run for this annotation

Codacy Production / Codacy Static Code Analysis

.claude/agent-memory/plumber/lane-patterns.md#L84

Expected: 1; Actual: 0; Below
When adding a case to `DashboardTab`:
1. Add the case + enum rawValue

Check notice on line 86 in .claude/agent-memory/plumber/lane-patterns.md

View check run for this annotation

Codacy Production / Codacy Static Code Analysis

.claude/agent-memory/plumber/lane-patterns.md#L86

Lists should be surrounded by blank lines
2. Add `sidebarRow(...)` in DashboardView sidebar
3. Add `case .newTab: NewPane()` in the detail switch
4. Add `case .newTab, .settings:` in EditMenu.swift's switch (group with nearest neighbor)
5. The `.swooshNavigateTab` notification lane uses `DashboardTab(rawValue: raw)` — rawValue-based lookup, no switch needed there
6. No `default:` clause anywhere in the enum consumers — exhaustive switches are the pattern

### Daemon connected-flag semantics (WalletDashboardResponse)

Check notice on line 93 in .claude/agent-memory/plumber/lane-patterns.md

View check run for this annotation

Codacy Production / Codacy Static Code Analysis

.claude/agent-memory/plumber/lane-patterns.md#L93

Expected: 1; Actual: 0; Below
`connected: !walletAccounts.isEmpty` (accounts-based, line 636 DaemonResponseBuilders.swift)
Capability entries' `configured`/`status` still key off `walletBridgeAvailable` in the same payload
Two readers only: `WalletPane.swift:29` and `WalletTrayPanel.swift:36` — both use `.connected` as "show wallet UI"
**NOTE:** `connected` no longer means "bridge ready" — do not add a third reader that treats it that way
Loading
Loading