Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
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
63 changes: 0 additions & 63 deletions .claude/.revcon-manifest.json

This file was deleted.

2 changes: 1 addition & 1 deletion .github/workflows/ci.yml
Original file line number Diff line number Diff line change
Expand Up @@ -17,7 +17,7 @@ concurrency:
cancel-in-progress: ${{ github.ref != 'refs/heads/main' }}

jobs:
# GAP-372: materialized .claude rules must match .revcon-manifest.json
# GAP-372: first-party .revealui content must match its RevCon manifest.
copy-lockstep:
name: Copy lockstep
runs-on: ubuntu-latest
Expand Down
12 changes: 6 additions & 6 deletions .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -46,12 +46,12 @@ coverage/

# opensrc context (fetched on demand)
opensrc/
# Local Claude/agent state ignored; materialized rules/agents/skills tracked (GAP-372 copy-mode).
.claude/*
!.claude/rules/
!.claude/agents/
!.claude/skills/
!.claude/.revcon-manifest.json
# First-party RevealUI policy content is tracked; local state and vendor adapters are not.
.revealui/*
!.revealui/content/
!.revealui/.revcon-manifest.json
!.revealui/README.md
.claude/
.agents/

# Pinned attribution tool installs and caches (maintained NOTICE generator)
Expand Down
65 changes: 65 additions & 0 deletions .revealui/.revcon-manifest.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,65 @@
{
"editor": "revealui",
"files": {
"content/rules/code-over-docs.md": {
"sha256": "fcc9af90a0fc31a1c04202891099a5e6e0f13502649011fd7a9cfe59bf6b5500",
"source": "profiles/revealfleet/revealui/rules/code-over-docs.md"
},
"content/rules/control-layer.md": {
"sha256": "289388f1038de4f372f5eeea5a61ee583fbea93042d01801b6c90b01d878c9f9",
"source": "profiles/revealfleet/revealui/rules/control-layer.md"
},
"content/rules/disposition-actions.md": {
"sha256": "db2e1964f359e0df046788ee7b828168efd8ea27c20384edc99fe5647404a603",
"source": "profiles/revealfleet/revealui/rules/disposition-actions.md"
},
"content/rules/durable-solutions.md": {
"sha256": "1d9ab978b70bf67f68b65c4b9e06f1065730d1b212fb51d71c42bffc26de1e63",
"source": "profiles/revealfleet/revealui/rules/durable-solutions.md"
},
"content/rules/exhaustive.md": {
"sha256": "53779eb567f634c7108e5fc12ea2d2fcbd4c3b1eeaef8bf48ba3d67b202b21a8",
"source": "profiles/revealfleet/revealui/rules/exhaustive.md"
},
"content/rules/extend-before-create.md": {
"sha256": "eda319933321d2d69db659dfd6d441640d25d69b8c51b2ae026ca0974e0f430c",
"source": "profiles/revealfleet/revealui/rules/extend-before-create.md"
},
"content/rules/git.md": {
"sha256": "68d729dbb87d13b3c9f4ead1b4ff6a3d76aac076a1a28136284c612f1c89e6f2",
"source": "profiles/revealfleet/revealui/rules/git.md"
},
"content/rules/model-allocation.md": {
"sha256": "d71bb65d9315523e29b927ae47c7a3e9e35e763c7c30602d04c3043f92413c9b",
"source": "profiles/revealfleet/revealui/rules/model-allocation.md"
},
"content/rules/no-em-dashes.md": {
"sha256": "18b1cfe5218fd816837c13a2e6cd08786befad19a292f1fa85874a3ad0b5f22e",
"source": "profiles/revealfleet/revealui/rules/no-em-dashes.md"
},
"content/rules/opensrc.md": {
"sha256": "bdb095fac109fbb5616dde222e0cfbc3e1d52ebf616609f3e865717773a2fb73",
"source": "profiles/revealfleet/revealui/rules/opensrc.md"
},
"content/rules/planning.md": {
"sha256": "315062ea332839617615e4c5fda5e1d50fde69090e55af6895ed343e18027e7d",
"source": "profiles/revealfleet/revealui/rules/planning.md"
},
"content/rules/secrets.md": {
"sha256": "79d09010deb767f582cbd0a28f12d6bf3a36cc44e2f4260a7fbaddd709318d68",
"source": "profiles/revealfleet/revealui/rules/secrets.md"
},
"content/rules/temp-scripts.md": {
"sha256": "66a574826b46352275606d88a9854a0e63c39433a97a55c75f50ccc0f4862a15",
"source": "profiles/revealfleet/revealui/rules/temp-scripts.md"
},
"content/rules/token-economy.md": {
"sha256": "b30a830e9dd333b05085bc5ce3994c477ac66390aabe4cf41741a64ccd12ef57",
"source": "profiles/revealfleet/revealui/rules/token-economy.md"
}
},
"mode": "copy",
"profiles": [
"revealfleet"
]
}
78 changes: 78 additions & 0 deletions .revealui/README.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,78 @@
# RevDev — Native Developer Tools

This is RevDev's first-party project guide. Managed fleet rules live in
`.revealui/content/rules/` and are materialized from the RevealUI profile by
RevCon. Vendor adapters, when configured, consume this first-party content.

Native developer experience for RevealUI. One product, two interfaces.

## Products

| App | Stack | Purpose |
|-----|-------|---------|
| Studio | Tauri 2 + React 19 | Desktop AI editor + agent coordination dashboard |
| Console | Go (Bubble Tea) | SSH payment + licensing TUI (tiers, checkout, license, email/OTP) + agent-terminal proxy |

## Architecture

```
RevDev
├── apps/studio/ # Tauri desktop app (Studio UI)
├── apps/console/ # Go TUI (RevDev Console — SSH ops cockpit)
├── packages/bridge/ # Thin adapter layer between daemon + apps
├── packages/daemon/ # Harness daemon (agent coordination, PTY, tools)
├── packages/protocol/ # JSON-RPC types shared across all apps
└── packages/theme/ # Console theme tokens
```

## Naming Convention

Monorepo-wide split on `package.json` `name` fields:
- **Apps** (`apps/*`): unscoped — `"studio"`, `"console"`. Never `@scope/<app>`.
- **Packages** (`packages/*`): scoped — `"@revdev/daemon"`, `"@revdev/protocol"`.

Rationale: apps are deploy targets, not consumable libraries; the `@scope/` prefix is reserved for things that get published.

## Relationship to RevealUI

RevDev **consumes** RevealUI packages — it does not contain them:
- `@revealui/contracts` — shared Zod schemas (npm dependency)
- `@revealui/security` — shared security primitives incl. input sanitization (npm dependency; studio terminal uses `sanitizeTerminalLine`)
- `@revealui/harnesses` — AI harness adapters (npm dependency, Pro)
- RevealUI API — HTTP/WebSocket (Console talks directly to API)

The harness daemon is the brain; Studio is its UI. Console is a separate SSH surface talking to the RevealUI API, not the daemon.

## Git Identity
Follow [the maintained fleet Git rule](content/rules/git.md) for author and
signing identity. Keep the default in the global Git configuration; do not add
per-repository identity overrides.

## Stack
- **Studio**: Rust (Tauri 2 backend) + TypeScript/React 19 (frontend)
- **Console**: Go 1.23+ (Bubble Tea TUI framework)
- **Daemon**: TypeScript (Node.js, extracted from @revealui/harnesses)
- **Protocol**: TypeScript (JSON-RPC 2.0 type definitions)

## Commands

```bash
# Studio
pnpm --filter studio tauri:dev # Start Studio in dev mode
pnpm --filter studio tauri build # Build desktop binary
pnpm typecheck:studio # Typecheck Studio frontend

# Console (no root go.mod; module lives under apps/console/ per CI ci.yml:78-79)
cd apps/console && go run . # Run Console
cd apps/console && go build -o ../../rvui . # Build Console binary

# Workspace
pnpm -r --filter=!studio build # Build all packages (skip Tauri)
pnpm test # Run tests
```

## CI Pipelines

- `studio-release.yml` — Tauri build + code signing + notarization + auto-update (macOS, Windows, Linux)
- `console-release.yml` — Go cross-compile + checksums + GitHub Release
- `ci.yml` — Lint + test for both apps
File renamed without changes.
3 changes: 2 additions & 1 deletion .claude/rules/git.md → .revealui/content/rules/git.md
Original file line number Diff line number Diff line change
Expand Up @@ -64,4 +64,5 @@ Grok worktrees: use `rfg … --worktree=…` (injects `--ref test`) or pass

## Identity
- Professional repos (RevealUIStudio): display name `RevealUI Studio` plus the **signing account's** verified GitHub noreply address (shape `id+login@users.noreply.github.com` on the account that holds the SSH signing key). Do not paste a personal login into public rule copies; resolve the real address from the machine git config / fleet hardline when committing.
- Amended 2026-07-10: never "restore" founder@revealui.com. It belongs to the org account, so SSH-signed commits carrying it render Unverified and required_signatures rulesets silently block the merge. Full rationale in the fleet-level Studio git hardline (not re-copied here).
- Accepted additional author identity (owner 2026-09-30): `founder@revealui.com` also belongs to the project owner. Preserve this author identity when re-signing commits; do not replace it merely because the configured signing identity differs.
- Keep the current signing identity as the default. For signed commits, the committer email must be verified on the GitHub account holding the signing key. An unsigned commit needs a signature regardless of its author email; check GitHub's verification reason before diagnosing an identity mismatch.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
6 changes: 6 additions & 0 deletions AGENTS.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,6 @@
# RevDev agent instructions

Start with [.revealui/README.md](.revealui/README.md) and the maintained rules
in `.revealui/content/rules/`. RevCon materializes and verifies those rules;
change their owning profile rather than editing copies in this repository.
Vendor integrations may project from `.revealui` when configured.
77 changes: 4 additions & 73 deletions CLAUDE.md
Original file line number Diff line number Diff line change
@@ -1,74 +1,5 @@
# RevDev — Native Developer Tools
# RevDev Claude adapter

Native developer experience for RevealUI. One product, two interfaces.

## Products

| App | Stack | Purpose |
|-----|-------|---------|
| Studio | Tauri 2 + React 19 | Desktop AI editor + agent coordination dashboard |
| Console | Go (Bubble Tea) | SSH payment + licensing TUI (tiers, checkout, license, email/OTP) + agent-terminal proxy |

## Architecture

```
RevDev
├── apps/studio/ # Tauri desktop app (Studio UI)
├── apps/console/ # Go TUI (RevDev Console — SSH ops cockpit)
├── packages/bridge/ # Thin adapter layer between daemon + apps
├── packages/daemon/ # Harness daemon (agent coordination, PTY, tools)
├── packages/protocol/ # JSON-RPC types shared across all apps
└── packages/theme/ # Console theme tokens
```

## Naming Convention

Monorepo-wide split on `package.json` `name` fields:
- **Apps** (`apps/*`): unscoped — `"studio"`, `"console"`. Never `@scope/<app>`.
- **Packages** (`packages/*`): scoped — `"@revdev/daemon"`, `"@revdev/protocol"`.

Rationale: apps are deploy targets, not consumable libraries; the `@scope/` prefix is reserved for things that get published.

## Relationship to RevealUI

RevDev **consumes** RevealUI packages — it does not contain them:
- `@revealui/contracts` — shared Zod schemas (npm dependency)
- `@revealui/security` — shared security primitives incl. input sanitization (npm dependency; studio terminal uses `sanitizeTerminalLine`)
- `@revealui/harnesses` — AI harness adapters (npm dependency, Pro)
- RevealUI API — HTTP/WebSocket (Console talks directly to API)

The harness daemon is the brain; Studio is its UI. Console is a separate SSH surface talking to the RevealUI API, not the daemon.

## Git Identity
Commit as the fleet's verified GitHub noreply identity, configured once in the global `~/.gitconfig` (never override it per-repo; the literal address lives there, not in docs, and this repo's leak scanner enforces that).

> Amended 2026-07-10. The prior founder@revealui.com address is retired: commits carrying it render Unverified under required signatures. Do not restore it, and do not re-add local user.email overrides.

## Stack
- **Studio**: Rust (Tauri 2 backend) + TypeScript/React 19 (frontend)
- **Console**: Go 1.23+ (Bubble Tea TUI framework)
- **Daemon**: TypeScript (Node.js, extracted from @revealui/harnesses)
- **Protocol**: TypeScript (JSON-RPC 2.0 type definitions)

## Commands

```bash
# Studio
pnpm --filter studio tauri:dev # Start Studio in dev mode
pnpm --filter studio tauri build # Build desktop binary
pnpm typecheck:studio # Typecheck Studio frontend

# Console (no root go.mod; module lives under apps/console/ per CI ci.yml:78-79)
cd apps/console && go run . # Run Console
cd apps/console && go build -o ../../rvui . # Build Console binary

# Workspace
pnpm -r --filter=!studio build # Build all packages (skip Tauri)
pnpm test # Run tests
```

## CI Pipelines

- `studio-release.yml` — Tauri build + code signing + notarization + auto-update (macOS, Windows, Linux)
- `console-release.yml` — Go cross-compile + checksums + GitHub Release
- `ci.yml` — Lint + test for both apps
Read [the RevealUI project guide](.revealui/README.md) and the first-party
rules under `.revealui/content/rules/` before using this adapter. The
`.revealui` tree owns the policy content.
2 changes: 1 addition & 1 deletion apps/studio/README.md
Original file line number Diff line number Diff line change
Expand Up @@ -93,7 +93,7 @@ Key Rust crates: `russh` 0.60 (SSH client), `portable-pty` (PTY sessions), `git2
## Related

- [Architecture Guide](../../docs/ARCHITECTURE.md)
- [Distribution Guide](../../.claude/rules/distribution.md)
- [Studio release workflow](../../.github/workflows/studio-release.yml)

## License

Expand Down
3 changes: 2 additions & 1 deletion biome.json
Original file line number Diff line number Diff line change
Expand Up @@ -15,7 +15,8 @@
"!**/src-tauri/target",
"!**/src-tauri/icons",
"!**/bindings",
"!**/pnpm-lock.yaml"
"!**/pnpm-lock.yaml",
"!.revealui/.revcon-manifest.json"
]
},
"formatter": {
Expand Down
2 changes: 1 addition & 1 deletion docs/GETTING_STARTED.md
Original file line number Diff line number Diff line change
Expand Up @@ -217,4 +217,4 @@ To check manually: use the "Check for Updates" command in Studio settings.

- [Troubleshooting](./TROUBLESHOOTING.md) — Common issues and fixes
- [API Reference](./API_REFERENCE.md) — All 36 daemon RPC methods
- [Architecture](../CLAUDE.md) — How Studio, Daemon, and Bridge connect
- [Architecture](../.revealui/README.md) — How Studio, Daemon, and Bridge connect
2 changes: 1 addition & 1 deletion docs/MASTER_PLAN.md
Original file line number Diff line number Diff line change
Expand Up @@ -36,4 +36,4 @@ Current verified state, workstreams (launch readiness, identity rollout, cross-m
- [`docs/PLAN.md`](./PLAN.md) — **the plan** (single source)
- [`docs/MASTER_SPEC.md`](./MASTER_SPEC.md) → [`docs/SPEC.md`](./SPEC.md) — the spec
- [`docs/INDEX.md`](./INDEX.md) — documentation index
- [`README.md`](../README.md) — overview + architecture · [`CLAUDE.md`](../CLAUDE.md) — agent context
- [`README.md`](../README.md) — overview + architecture · [`.revealui/README.md`](../.revealui/README.md) — agent context
2 changes: 1 addition & 1 deletion docs/MASTER_SPEC.md
Original file line number Diff line number Diff line change
Expand Up @@ -26,4 +26,4 @@ Native developer tools for RevealUI. **One product, two interfaces, one daemon.*
- [`docs/MASTER_PLAN.md`](./MASTER_PLAN.md) → [`docs/PLAN.md`](./PLAN.md) — the plan
- [`docs/API_REFERENCE.md`](./API_REFERENCE.md) — JSON-RPC API reference
- [`docs/INDEX.md`](./INDEX.md) — documentation index
- [`CLAUDE.md`](../CLAUDE.md) — agent context · [`README.md`](../README.md) — overview
- [`.revealui/README.md`](../.revealui/README.md) — agent context · [`README.md`](../README.md) — overview
4 changes: 2 additions & 2 deletions docs/SPEC.md
Original file line number Diff line number Diff line change
Expand Up @@ -26,7 +26,7 @@ Native developer tools for RevealUI. **One product, two interfaces, one daemon.*
```
revdev/
├── README.md
├── CLAUDE.md # agent context
├── .revealui/README.md # agent context
├── NOTICE.md # third-party attributions
├── package.json # pnpm workspace root
├── pnpm-workspace.yaml
Expand Down Expand Up @@ -290,4 +290,4 @@ Pre-1.0 per the fleet versioning convention. Per-package SemVer (`@revdev/daemon
- [`MASTER_PLAN.md`](./MASTER_PLAN.md) / [`MASTER_SPEC.md`](./MASTER_SPEC.md) — stable entry points
- [`API_REFERENCE.md`](./API_REFERENCE.md) — JSON-RPC API reference
- [`GETTING_STARTED.md`](./GETTING_STARTED.md) · [`KEY_GENERATION.md`](./KEY_GENERATION.md) · [`TROUBLESHOOTING.md`](./TROUBLESHOOTING.md)
- [`CLAUDE.md`](../CLAUDE.md) — agent context · [`README.md`](../README.md) — overview
- [`.revealui/README.md`](../.revealui/README.md) — agent context · [`README.md`](../README.md) — overview
Loading
Loading