diff --git a/FRONTIER_SUBMISSION.md b/FRONTIER_SUBMISSION.md index 32df980..ffab66a 100644 --- a/FRONTIER_SUBMISSION.md +++ b/FRONTIER_SUBMISSION.md @@ -2,7 +2,7 @@ DAEMON is a Solana-native agent workbench for verifiable AI development work. -The product turns agent coding sessions into auditable work: a developer opens a project, enables the Solana and Helius MCP stack, spawns an agent, funds a task, receives a work receipt, and approves settlement on devnet. The on-chain registry makes the relationship between prompt, task, agent session, receipt, approval, and settlement inspectable instead of relying on chat logs. +The product turns agent coding sessions into auditable work: a developer opens a project, enables the Solana and Helius MCP stack, spawns an agent, creates and funds a task, receives a work receipt, reviews it, and approves settlement on devnet. The on-chain registry makes the relationship between prompt, task, agent session, receipt, approval, and settlement inspectable instead of relying on chat logs. ## Positioning @@ -10,17 +10,34 @@ The product turns agent coding sessions into auditable work: a developer opens a **Category:** Agent workbench, not a generic IDE. -**Audience:** Solana founders, protocol teams, and independent builders who already use coding agents but need repeatable project context, MCP setup, wallet/RPC readiness, and proof that paid agent work was requested, delivered, reviewed, and settled. +**Audience:** Solana founders, protocol teams, agencies, and independent builders who already use coding agents but need repeatable project context, MCP setup, wallet/RPC readiness, and proof that paid agent work was requested, delivered, reviewed, and settled. + +**Why Solana:** Solana teams already operate through wallets, RPCs, explorers, devnet/mainnet deploy flows, and on-chain settlement. DAEMON puts the agent workflow next to those primitives instead of leaving the proof trail scattered across terminal logs and chat transcripts. + +## Canonical Demo + +**One sentence:** DAEMON turns an AI coding task into a devnet-verifiable work receipt and settlement trail. + +The demo should show one uninterrupted flow: + +1. Open a Solana project in DAEMON. +2. Enable Solana/Helius MCP readiness. +3. Spawn Claude or Codex in a dedicated PTY tab. +4. Create a devnet agent work task with prompt, acceptance criteria, bounty, owner, verifier, and agent wallet. +5. Fund/start the task. +6. Submit receipt hashes for commit, diff, tests, and artifact URI. +7. Approve and settle the task. +8. Open the Solana Explorer devnet transaction proof. ## 2-Minute Demo Runbook | Time | Scene | What to show | | --- | --- | --- | -| 0:00-0:15 | Open project | Launch DAEMON, open `C:\Users\offic\Projects\DAEMON`, show project tabs, editor, and terminal. | +| 0:00-0:15 | Open project | Launch DAEMON, open a clean Solana project, show project tabs, editor, and terminal. | | 0:15-0:30 | Enable Solana/Helius MCP | Open Project Readiness, toggle Solana/Helius MCP, confirm wallet, RPC, and MCP readiness checks. | | 0:30-0:50 | Spawn agent | Open Agent Launcher, choose Claude or Codex, attach Solana/Helius MCP, spawn an agent in a dedicated PTY tab. | | 0:50-1:10 | Create and fund task | In Agent Work or Registry controls, create a devnet task with bounty/escrow funding and show the task account. | -| 1:10-1:25 | Submit work receipt | Have the agent submit a receipt hash/summary for the completed work and show the receipt state. | +| 1:10-1:25 | Submit work receipt | Submit receipt hashes/summary for completed work and show the receipt state. | | 1:25-1:45 | Approve and settle | Approve the receipt, settle the task on devnet, and show the final state transition. | | 1:45-2:00 | Explorer proof | Open the Solana Explorer devnet transaction link and close on the value prop: verifiable AI dev work for Solana teams. | @@ -29,39 +46,58 @@ Recording checklist: - Keep the capture under 2 minutes. - Use a clean project with funded devnet wallet and `RPC_URL` set. - Copy the final explorer URL into the submission notes. -- Mention the test status: `pnpm run typecheck`, `pnpm test`, and `cargo test` pass locally. -- To capture the final take with `ffmpeg`, run: +- Mention the local validation status: `pnpm run typecheck`, `pnpm test`, and Anchor/Cargo registry tests. +- Do not lead with token/community materials; lead with the working devnet proof flow. +- To capture a 120 second take with `ffmpeg`, run: ```powershell powershell -ExecutionPolicy Bypass -File scripts/frontier-record.ps1 ``` -The helper records the desktop for 120 seconds to `docs/frontier-demo.mp4`. +The helper records the desktop to `docs/frontier-demo.mp4`. -Devnet preflight: +## Devnet Preflight -- Confirm the registry program is current: `solana program show 3nu6sppjDtAKNoBbUAhvFJ35B2JsxpRY6G4Cg72MCJRc --url devnet`. -- If the deployed binary is stale, rebuild and upgrade the registry before recording: `cargo build-sbf` from `programs/daemon-registry`, then `solana program deploy --url devnet --program-id 3nu6sppjDtAKNoBbUAhvFJ35B2JsxpRY6G4Cg72MCJRc programs/daemon-registry/target/sbpf-solana-solana/release/daemon_registry.so`. +- Confirm the registry program is current: -## Business Model +```bash +solana program show 3nu6sppjDtAKNoBbUAhvFJ35B2JsxpRY6G4Cg72MCJRc --url devnet +``` -DAEMON can monetize through four explicit channels: +- If the deployed binary is stale, rebuild and upgrade the registry before recording: -1. **Pro desktop:** Paid local app tier for advanced agent orchestration, session replay, telemetry, registry publishing, and premium Solana tooling. -2. **Team workspaces:** Shared project profiles, policy-controlled MCP configs, audit logs, agent session history, and role-based approval flows for protocol teams. -3. **Paid MCP/plugin marketplace:** Curated Solana protocol packs, MCP servers, agent skills, and workflow plugins with creator revenue share. -4. **Agent-work escrow fees:** A small protocol or platform fee on task funding and settlement when teams pay agents or contractors through the on-chain registry. +```bash +cd programs/daemon-registry +cargo build-sbf +solana program deploy --url devnet --program-id 3nu6sppjDtAKNoBbUAhvFJ35B2JsxpRY6G4Cg72MCJRc target/sbpf-solana-solana/release/daemon_registry.so +``` + +- Use a devnet wallet with enough SOL for task funding, rent, and fees. +- Save the final explorer link beside the demo video for judges. ## Frontier Criteria Fit -**Functionality and code quality:** Electron app, typed IPC bridge, PTY-backed agent sessions, project-level MCP management, wallet/RPC readiness, and Anchor registry tests. +| Criterion | DAEMON answer | +| --- | --- | +| Functionality and code quality | Electron app, typed IPC bridge, PTY-backed agent sessions, project-level MCP management, wallet/RPC readiness, SQLite migrations, smoke tests, CI, and Anchor registry code. | +| Impact | Solana builders are adopting coding agents, but teams still need a trustworthy way to request, review, verify, and settle agent work. | +| Novelty | The core wedge is not another editor. It is a workbench where AI development tasks can produce devnet-verifiable receipts and settlements. | +| Solana UX | Solana/Helius MCP setup, wallet readiness, RPC checks, devnet registry transactions, task funding, and explorer links are first-class flows. | +| Open source and composability | MIT-licensed repo with an extensible plugin/MCP architecture and an Anchor program that other tools can inspect or build against. | +| Business plan | Pro desktop, team workspaces, marketplace fees, and agent-work escrow fees create a path from individual builders to protocol/team usage. | -**Impact:** Solana builders are already adopting coding agents; DAEMON targets the missing trust layer between autonomous work, human approval, and payment. +## Business Model -**Novelty:** The core wedge is not another editor. It is a workbench where AI development tasks can produce devnet-verifiable receipts and settlements. +DAEMON can monetize through four explicit channels: -**Solana UX:** Solana/Helius MCP setup, wallet readiness, RPC checks, devnet registry transactions, and explorer links are first-class user flows. +1. **Pro desktop:** Paid local app tier for advanced agent orchestration, session replay, telemetry, registry publishing, and premium Solana tooling. +2. **Team workspaces:** Shared project profiles, policy-controlled MCP configs, audit logs, agent session history, and role-based approval flows for protocol teams. +3. **Paid MCP/plugin marketplace:** Curated Solana protocol packs, MCP servers, agent skills, and workflow plugins with creator revenue share. +4. **Agent-work escrow fees:** A small protocol or platform fee on task funding and settlement when teams pay agents or contractors through the on-chain registry. -**Open source and composability:** MIT-licensed repo with an extensible plugin/MCP architecture and an Anchor program that other tools can inspect or build against. +## Judge Notes -**Business plan:** Pro desktop, team workspaces, marketplace fees, and agent-work escrow fees create a path from individual builders to paid protocol/team usage. +- DAEMON is not a VS Code fork. +- The demo should be evaluated as a Solana-native agent workbench and receipt layer. +- The important proof is the task lifecycle: prompt -> task -> agent session -> receipt -> approval -> settlement -> explorer link. +- Community/token information is intentionally separated from the core product narrative so the submission focuses on functionality, Solana UX, and composability. diff --git a/README.md b/README.md index e5884f5..9b2172f 100644 --- a/README.md +++ b/README.md @@ -13,9 +13,9 @@

Website · + Frontier · Install · Features · - Frontier · Architecture · Development · Contributing @@ -24,18 +24,31 @@ ---

- $DAEMON CA: 4vpf4qNtNVkvz2dm5qL2mT6jBXH9gDY8qH2QsHN5pump + DAEMON agent workbench with editor, terminal, and sidebar

---- +DAEMON is a standalone Electron workbench for Solana developers who use autonomous coding agents. It combines an offline editor, real PTY terminals, Claude/Codex agent spawning, MCP server management, wallet/RPC readiness, and an Anchor-backed registry for publishing verifiable agent work receipts on devnet. -

- DAEMON agent workbench with editor, terminal, and sidebar -

+The wedge is simple: AI agents can write code, but Solana teams still need proof of what was requested, what was delivered, who reviewed it, and how settlement happened. + +## Frontier Hackathon -**[Frontier demo runbook](FRONTIER_SUBMISSION.md#2-minute-demo-runbook)** — 2-minute submission flow from project open to devnet settlement. +**Short pitch:** verifiable AI dev work for Solana teams. -DAEMON is a standalone Electron agent workbench for Solana developers who use autonomous coding agents. It combines an offline editor, real PTY terminals, Claude/Codex agent spawning, MCP server management, wallet/RPC readiness, and an Anchor-backed registry for publishing verifiable agent work receipts on devnet. Not a VS Code fork. +**Demo path:** open project -> enable Solana/Helius MCP -> spawn Claude or Codex -> create and fund a devnet task -> submit receipt hashes -> approve and settle -> open Solana Explorer proof. + +See the full [Frontier submission runbook](FRONTIER_SUBMISSION.md#2-minute-demo-runbook) for the 2-minute recording flow and devnet preflight. + +### Judging checklist + +| Criterion | DAEMON fit | +| --- | --- | +| Functionality and code quality | Electron app with typed IPC, PTY-backed agent sessions, project MCP management, wallet/RPC readiness, CI, smoke tests, and an Anchor registry. | +| Impact | Solana builders already use AI coding agents; DAEMON adds the missing trust layer for requested, delivered, reviewed, and settled work. | +| Novelty | Agent sessions produce task, receipt, review, and settlement evidence instead of relying on chat logs. | +| Solana UX | Wallet readiness, Solana/Helius MCP setup, devnet task funding, registry transactions, and explorer links are first-class flows. | +| Open source and composability | MIT-licensed app plus an Anchor registry program that other tools can inspect or build against. | +| Business plan | Pro desktop, team workspaces, paid MCP/plugin marketplace, and agent-work escrow fees. | ## Install @@ -43,7 +56,7 @@ DAEMON is a standalone Electron agent workbench for Solana developers who use au -**Mac:** Build from source (signed builds configurable via Apple credentials): +**Mac:** Build from source. Signed builds are configurable with Apple Developer credentials: ```bash git clone https://github.com/nullxnothing/daemon.git @@ -53,11 +66,11 @@ pnpm run build pnpm run package ``` -The `.dmg` will be in `release/2.0.0/`. Signed/notarized builds require Apple Developer credentials in the packaging environment. Without them, the app will still package, but Gatekeeper may require right-click > Open on first launch. +The `.dmg` is emitted under the current release folder, for example `release/3.0.13/`. Without signing credentials, macOS may require right-click > Open on first launch. -**Linux:** Build from source (AppImage builds coming soon): +**Linux:** Build from source. AppImage builds are supported through the package script: ```bash git clone https://github.com/nullxnothing/daemon.git @@ -67,7 +80,7 @@ pnpm run build pnpm run package ``` -The AppImage will be in `release/2.0.0/`. Make it executable with `chmod +x` and run directly. +The AppImage is emitted under the current release folder, for example `release/3.0.13/`. Make it executable with `chmod +x` and run directly. **Build from source (any platform):** @@ -94,7 +107,9 @@ Requires **Node.js 22+** and **pnpm 9+**. Agent launcher with model selection and MCP config

-**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. +**Agent Launcher** — Spawn Claude Code or Codex agents with custom system prompts, model selection, and per-project MCP configurations. Agents run as real CLI sessions in dedicated terminal tabs. + +**Agent Work Registry** — Create, fund, start, submit, approve, reject, settle, or expire agent work tasks with hashes for the repo, prompt, acceptance criteria, diffs, tests, and artifacts. **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. @@ -112,7 +127,7 @@ Requires **Node.js 22+** and **pnpm 9+**. **Embedded Browser** — Built-in browser with a security sandbox for previewing and testing. -**PumpFun Integration** — Token launches and bonding curve interactions directly from the IDE. +**Solana Integrations** — Wallet, launch, SpawnAgents, PumpFun, x402/MPP, and protocol workflow surfaces inside one local workbench. **Multi-Project Tabs** — Tabbed project switching with per-project terminal sessions, MCP configs, and file trees. Context switching without losing state. @@ -156,6 +171,7 @@ Key decisions: | Database | better-sqlite3 (WAL) | | Git | simple-git | | Packaging | electron-builder | +| Registry | Anchor / Solana devnet | ## Development @@ -165,11 +181,15 @@ pnpm run dev # Dev server with hot reload pnpm run typecheck # TypeScript validation pnpm run test # Run tests (Vitest) pnpm run build # Production build -pnpm run package # Create distributable (.exe / .dmg) +pnpm run package # Create distributable (.exe / .dmg / AppImage) ``` See [CONTRIBUTING.md](CONTRIBUTING.md) for guidelines on pull requests and code style. +## Community + +$DAEMON community token CA: `4vpf4qNtNVkvz2dm5qL2mT6jBXH9gDY8qH2QsHN5pump` + ## License [MIT](LICENSE) diff --git a/electron/ipc/registry.ts b/electron/ipc/registry.ts index 4362991..df527c7 100644 --- a/electron/ipc/registry.ts +++ b/electron/ipc/registry.ts @@ -1,4 +1,4 @@ -import { ipcMain } from 'electron' +import { dialog, ipcMain } from 'electron' import { ipcHandler } from '../services/IpcHandlerFactory' import * as SessionTracker from '../services/SessionTracker' import * as SessionRegistryService from '../services/SessionRegistryService' @@ -11,6 +11,28 @@ interface WalletRow { id: string } +async function confirmRegistryAction(options: { + title: string + message: string + detail: string + confirmLabel: string +}): Promise { + if (process.env.DAEMON_SMOKE_TEST === '1') return + + const { response } = await dialog.showMessageBox({ + type: 'warning', + buttons: ['Cancel', options.confirmLabel], + defaultId: 0, + cancelId: 0, + title: options.title, + message: options.message, + detail: options.detail, + noLink: true, + }) + + if (response !== 1) throw new Error(`${options.title} cancelled by user`) +} + function getDefaultWalletId(): string | null { try { const row = getDb().prepare('SELECT id FROM wallets WHERE is_default = 1 LIMIT 1').get() as WalletRow | undefined @@ -46,6 +68,12 @@ export function registerRegistryHandlers() { ipcMain.handle('registry:fund-agent-work', ipcHandler(async (_event, taskId: string) => { if (typeof taskId !== 'string' || !taskId) throw new Error('Invalid task ID') + await confirmRegistryAction({ + title: 'Fund Agent Work', + message: 'Fund this agent work task on devnet?', + detail: `Task ID: ${taskId}`, + confirmLabel: 'Fund Task', + }) return AgentWorkService.fundTask(taskId) })) @@ -61,21 +89,45 @@ export function registerRegistryHandlers() { ipcMain.handle('registry:approve-agent-work', ipcHandler(async (_event, taskId: string) => { if (typeof taskId !== 'string' || !taskId) throw new Error('Invalid task ID') + await confirmRegistryAction({ + title: 'Approve Agent Work', + message: 'Approve this submitted work receipt?', + detail: `Task ID: ${taskId}`, + confirmLabel: 'Approve Work', + }) return AgentWorkService.approveTask(taskId) })) ipcMain.handle('registry:reject-agent-work', ipcHandler(async (_event, taskId: string) => { if (typeof taskId !== 'string' || !taskId) throw new Error('Invalid task ID') + await confirmRegistryAction({ + title: 'Reject Agent Work', + message: 'Reject this submitted work receipt?', + detail: `Task ID: ${taskId}`, + confirmLabel: 'Reject Work', + }) return AgentWorkService.rejectTask(taskId) })) ipcMain.handle('registry:settle-agent-work', ipcHandler(async (_event, taskId: string, signature?: string | null) => { if (typeof taskId !== 'string' || !taskId) throw new Error('Invalid task ID') + await confirmRegistryAction({ + title: 'Settle Agent Work', + message: 'Settle this task and finalize the receipt trail?', + detail: `Task ID: ${taskId}`, + confirmLabel: 'Settle Task', + }) return AgentWorkService.settleTask(taskId, signature ?? null) })) ipcMain.handle('registry:expire-agent-work', ipcHandler(async (_event, taskId: string) => { if (typeof taskId !== 'string' || !taskId) throw new Error('Invalid task ID') + await confirmRegistryAction({ + title: 'Expire Agent Work', + message: 'Expire this task and finalize the refund/expiry path?', + detail: `Task ID: ${taskId}`, + confirmLabel: 'Expire Task', + }) return AgentWorkService.expireTask(taskId) })) @@ -86,6 +138,13 @@ export function registerRegistryHandlers() { if (session.published_signature) throw new Error('Session already published') if (session.status !== 'completed') throw new Error('Can only publish completed sessions') + await confirmRegistryAction({ + title: 'Publish Agent Session', + message: 'Publish this completed agent session to the registry?', + detail: `Session ID: ${sessionId}`, + confirmLabel: 'Publish Session', + }) + const walletId = getDefaultWalletId() if (!walletId) throw new Error('No default wallet configured. Set a default wallet in the Wallet panel.') @@ -129,6 +188,13 @@ export function registerRegistryHandlers() { const unpublished = SessionTracker.getUnpublishedSessions() if (unpublished.length === 0) return { published: 0, failed: 0 } + await confirmRegistryAction({ + title: 'Publish All Sessions', + message: `Publish ${unpublished.length} completed agent session(s) to the registry?`, + detail: 'Each publish writes registry state using the default wallet.', + confirmLabel: 'Publish All', + }) + const keypair = loadKeypair(walletId) let published = 0 let failed = 0