@flame0510/project-aether 1.1.15 → 1.2.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/app/api/credentials/[id]/sync/route.ts +3 -3
- package/app/api/credentials/detect/route.ts +126 -176
- package/app/api/credentials/route.ts +3 -0
- package/app/components/Skeleton.tsx +132 -0
- package/app/credentials/PageClient.tsx +460 -139
- package/app/credentials/loading.tsx +19 -5
- package/docs/ARCHITECTURE.md +78 -31
- package/docs/FRONTEND-ARCHITECTURE.md +13 -5
- package/docs/REV4A.md +23 -14
- package/docs/dev/API-REFERENCE.md +356 -184
- package/docs/dev/DATABASE.md +8 -3
- package/docs/dev/GATEWAY.md +9 -7
- package/docs/dev/PROVIDERS.md +22 -35
- package/docs/rag/GLOSSARY.md +8 -8
- package/docs/rag/REV4A-OVERVIEW.md +7 -10
- package/docs/rag/WHAT-I-CAN-ANSWER.md +6 -6
- package/lib/credentials/delivery.ts +212 -119
- package/lib/credentials/detect.ts +229 -97
- package/lib/credentials/providers.ts +38 -7
- package/lib/credentials/vault.ts +78 -13
- package/lib/docker-exec.ts +50 -14
- package/package.json +1 -1
package/docs/dev/DATABASE.md
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
# Rev4a — Database Reference
|
|
2
2
|
|
|
3
|
-
> **Last updated:** 2026-
|
|
3
|
+
> **Last updated:** 2026-08-28
|
|
4
4
|
|
|
5
5
|
Rev4a uses a single SQLite file (`events.db`) in WAL mode.
|
|
6
6
|
|
|
@@ -182,7 +182,9 @@ CREATE TABLE credential_secrets (
|
|
|
182
182
|
);
|
|
183
183
|
```
|
|
184
184
|
|
|
185
|
-
|
|
185
|
+
`payload` holds the secret as raw JSON — **not encrypted**. Anything that can read
|
|
186
|
+
this file, or reach `POST /api/credentials/[id]/reveal` with a valid session, has
|
|
187
|
+
the secrets in the clear.
|
|
186
188
|
|
|
187
189
|
### `credential_audit_log` — append-only audit trail
|
|
188
190
|
|
|
@@ -197,7 +199,10 @@ CREATE TABLE credential_audit_log (
|
|
|
197
199
|
);
|
|
198
200
|
```
|
|
199
201
|
|
|
200
|
-
Actions: `create`, `update`, `delete`, `sync`, `reveal`.
|
|
202
|
+
Actions: `create`, `update`, `delete`, `sync`, `desync`, `reveal`.
|
|
203
|
+
|
|
204
|
+
Nothing reads `credential_audit_log`: it is written by `appendAudit()` and exposed
|
|
205
|
+
through no route or view.
|
|
201
206
|
|
|
202
207
|
---
|
|
203
208
|
|
package/docs/dev/GATEWAY.md
CHANGED
|
@@ -95,7 +95,7 @@ OpenClaw defaults to merging config models with auto-discovered models.
|
|
|
95
95
|
|
|
96
96
|
### Model Catalogue
|
|
97
97
|
|
|
98
|
-
The model catalogue lives in [`models.config.json`](
|
|
98
|
+
The model catalogue lives in [`models.config.json`](../../models.config.json) at the project root.
|
|
99
99
|
This file is **tracked in the repository** and serves as the default model configuration
|
|
100
100
|
for anyone cloning the project. It defines all known models across all providers:
|
|
101
101
|
|
|
@@ -184,18 +184,20 @@ via `openclaw models status --json` inside each container.
|
|
|
184
184
|
|
|
185
185
|
### `PUT /api/gateway/provider`
|
|
186
186
|
|
|
187
|
-
|
|
188
|
-
`models.providers.rev4a` — does NOT touch model references.
|
|
187
|
+
Enables or disables a single model in the catalogue, then syncs every agent.
|
|
188
|
+
Only writes `models.providers.rev4a` — does NOT touch model references.
|
|
189
189
|
|
|
190
|
-
**Body:**
|
|
191
|
-
|
|
190
|
+
**Body:** `{ "modelId": "deepseek/deepseek-chat", "enabled": true }` — both
|
|
191
|
+
required. Missing either returns `400`; an unknown `modelId` returns `404`.
|
|
192
192
|
|
|
193
193
|
**Response:**
|
|
194
194
|
```json
|
|
195
195
|
{
|
|
196
196
|
"status": "ok",
|
|
197
|
-
"
|
|
198
|
-
"
|
|
197
|
+
"modelId": "deepseek/deepseek-chat",
|
|
198
|
+
"enabled": true,
|
|
199
|
+
"provider": "deepseek",
|
|
200
|
+
"sync": ["Active models: 2 across 1 agent(s)"]
|
|
199
201
|
}
|
|
200
202
|
```
|
|
201
203
|
|
package/docs/dev/PROVIDERS.md
CHANGED
|
@@ -1,14 +1,10 @@
|
|
|
1
1
|
# Provider Gateway & Key Management
|
|
2
2
|
|
|
3
|
-
> **Last updated:** 2026-
|
|
3
|
+
> **Last updated:** 2026-08-28
|
|
4
4
|
|
|
5
|
-
This document covers the Rev4a Provider Gateway (proxy),
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
> **Note:** The old `/providers` UI page and its API routes (`/api/providers/*`,
|
|
10
|
-
> `/api/agent-providers`) have been removed (2026-07-27). Provider/API-key
|
|
11
|
-
> configuration is now centralized in the [Gateway](../GATEWAY.md) page.
|
|
5
|
+
This document covers the Rev4a Provider Gateway (proxy), the provider key
|
|
6
|
+
endpoints, and how agent containers authenticate against the Rev4a proxy.
|
|
7
|
+
Provider and API-key configuration lives in the [Gateway](GATEWAY.md) page.
|
|
12
8
|
|
|
13
9
|
---
|
|
14
10
|
|
|
@@ -130,50 +126,41 @@ The proxy authenticates using the provider's real API key from
|
|
|
130
126
|
|
|
131
127
|
## Vault & Provider Key Endpoints
|
|
132
128
|
|
|
133
|
-
### `GET /api/
|
|
129
|
+
### `GET /api/gateway/provider`
|
|
134
130
|
|
|
135
|
-
|
|
131
|
+
Provider state and the model catalogue.
|
|
136
132
|
|
|
137
133
|
**Query params:**
|
|
138
134
|
|
|
139
135
|
| Param | Required | Description |
|
|
140
136
|
|---|---|---|
|
|
141
|
-
| `
|
|
142
|
-
| `agent` | No | Docker container name for agent-targeted reads; omitting reads the VPS host |
|
|
137
|
+
| `summary` | No | `1` returns only which providers have a key — no models, no pricing. The full response waits on live pricing from OpenRouter, a network round trip costing seconds; callers that need just the boolean must not pay for it. |
|
|
143
138
|
|
|
144
|
-
**Auth:** browser cookie
|
|
139
|
+
**Auth:** browser cookie or bearer token
|
|
145
140
|
|
|
146
|
-
|
|
147
|
-
```json
|
|
148
|
-
{
|
|
149
|
-
"provider": "deepseek",
|
|
150
|
-
"apiKey": "sk-...full-key...",
|
|
151
|
-
"masked": "sk-...be03",
|
|
152
|
-
"source": "local"
|
|
153
|
-
}
|
|
154
|
-
```
|
|
141
|
+
### `POST /api/gateway/provider`
|
|
155
142
|
|
|
156
|
-
|
|
157
|
-
- `local` — read from `data/provider-keys.json` on the VPS host
|
|
158
|
-
- `container` — read from inside the agent container config
|
|
143
|
+
Store a provider API key, or re-run the sync without changing keys.
|
|
159
144
|
|
|
160
|
-
**
|
|
145
|
+
**Body:** `{ "provider": "deepseek", "apiKey": "sk-..." }`, or `{ "_syncOnly": true }`
|
|
146
|
+
to push the current configuration to every agent container without touching any key.
|
|
161
147
|
|
|
162
|
-
|
|
148
|
+
**Response:** `{ "status": "ok", ... }`. Unknown provider names are rejected with
|
|
149
|
+
`400` and the list of known providers.
|
|
163
150
|
|
|
164
|
-
|
|
151
|
+
**Auth:** browser cookie or bearer token
|
|
165
152
|
|
|
166
|
-
|
|
153
|
+
### `PUT /api/gateway/provider`
|
|
167
154
|
|
|
168
|
-
|
|
155
|
+
Enable or disable a single model in the catalogue.
|
|
169
156
|
|
|
170
|
-
|
|
157
|
+
**Body:** `{ "modelId": "deepseek/deepseek-chat", "enabled": true }` — both fields
|
|
158
|
+
required. Unknown `modelId` returns `404`.
|
|
171
159
|
|
|
172
|
-
|
|
160
|
+
**Auth:** browser cookie or bearer token
|
|
173
161
|
|
|
174
|
-
|
|
162
|
+
There is no `DELETE`: a provider key is cleared by storing an empty one.
|
|
175
163
|
|
|
176
|
-
**Response:** `{ "status": "removed" }`
|
|
177
164
|
|
|
178
165
|
---
|
|
179
166
|
|
|
@@ -218,7 +205,7 @@ Key points:
|
|
|
218
205
|
|
|
219
206
|
## Security Notes
|
|
220
207
|
|
|
221
|
-
- The `GET /api/
|
|
208
|
+
- The `GET /api/gateway/provider` endpoint calls `requireAuthJWT` directly
|
|
222
209
|
(browser cookie or bearer token) — API routes are never covered by `proxy.ts`
|
|
223
210
|
(it explicitly exempts `/api/*`), so each route must guard itself. Only
|
|
224
211
|
authenticated users can reveal keys.
|
package/docs/rag/GLOSSARY.md
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
# Rev4a Glossary
|
|
2
2
|
|
|
3
|
-
> **Last updated:** 2026-
|
|
3
|
+
> **Last updated:** 2026-08-28
|
|
4
4
|
|
|
5
5
|
Terms you'll encounter while using the Rev4a dashboard.
|
|
6
6
|
|
|
@@ -19,7 +19,7 @@ A small inline label component used for status indicators and channel chips. Sup
|
|
|
19
19
|
A compressed archive (`.tar.gz`) of an agent's persistent volume (`/root/`). Backups exclude the npm cache to keep sizes small (~1.5 MB). Stored in the `rev4a-backups` Docker volume. Used for restore operations and auto-created before each recreate.
|
|
20
20
|
|
|
21
21
|
## Container
|
|
22
|
-
A Docker container running on the server. Each agent runs in its own container. The Containers page shows all containers, including infrastructure ones (databases, reverse proxies, etc.), with CPU/memory metrics
|
|
22
|
+
A Docker container running on the server. Each agent runs in its own container. The Containers page shows all containers, including infrastructure ones (databases, reverse proxies, etc.), with CPU/memory metrics and a web terminal.
|
|
23
23
|
|
|
24
24
|
## Channel
|
|
25
25
|
A communication channel (Telegram) configured on an agent. Channels allow users to send DMs to the agent via messaging apps. The Channel Manager modal lets you connect/disconnect Telegram and manage pairings (approve/reject senders).
|
|
@@ -34,13 +34,13 @@ The estimated cost of an agent session in USD, calculated from tokens used and p
|
|
|
34
34
|
A manual correction for a month's total cost. If the automatic calculation doesn't match the actual invoice, you can set an override value for that month with an optional note.
|
|
35
35
|
|
|
36
36
|
## Credential
|
|
37
|
-
A third-party service token (GitHub PAT, Trello API key, Vercel token, Supabase access key, Notion API token) stored in the Rev4a vault.
|
|
37
|
+
A third-party service token (GitHub PAT, Trello API key, Vercel token, Supabase access key, Notion API token) stored in the Rev4a vault. A credential is installed into a container only when the user syncs it, and removed on de-sync; any credential can be synced to any container. Every reveal is written to an audit table that no route or view reads.
|
|
38
38
|
|
|
39
39
|
## Cron / Cron Job
|
|
40
40
|
A scheduled task that runs an agent automatically at a fixed time (e.g. every night at 3:15 AM). Configured with standard cron syntax. Jobs can be enabled/disabled per entry.
|
|
41
41
|
|
|
42
42
|
## Dashboard
|
|
43
|
-
The main page of Rev4a (`/`). Shows live sessions, cost summary, system health metrics (CPU, RAM, disk, load average), and a real-time event feed. A setup banner appears if the
|
|
43
|
+
The main page of Rev4a (`/`). Shows live sessions, cost summary, system health metrics (CPU, RAM, disk, load average), and a real-time event feed. A setup banner appears if the first-run wizard is incomplete.
|
|
44
44
|
|
|
45
45
|
## Event
|
|
46
46
|
A lifecycle occurrence for a session: spawned, completed, errored, or a tool call made. Events appear in the live feed on the Dashboard and are pushed via SSE every ~3 seconds.
|
|
@@ -57,14 +57,14 @@ Files that store an agent's persistent knowledge and personality: MEMORY.md, SOU
|
|
|
57
57
|
## Model
|
|
58
58
|
The AI model used by an agent or session. Examples: GPT-5.4, Claude Sonnet 4, DeepSeek V4 Flash. Models are linked to specific providers. The Gateway page manages which models are enabled and which agent uses which model.
|
|
59
59
|
|
|
60
|
-
##
|
|
61
|
-
First-time setup wizard at `/
|
|
60
|
+
## First-run wizard
|
|
61
|
+
First-time setup wizard at `/wizard`. Steps: Welcome → Providers → First Agent → Ready. Completion is recorded in `wizard.json` under the data directory. Always accessible from the sidebar or mobile navbar.
|
|
62
62
|
|
|
63
63
|
## Plugin
|
|
64
64
|
An extension that adds new tools and capabilities to agents. Plugins are installed in the workspace and appear in the Plugins page with enable/disable toggles.
|
|
65
65
|
|
|
66
66
|
## Provider
|
|
67
|
-
An AI service provider (OpenAI, Anthropic, Groq, OpenRouter, DeepSeek, etc.) that hosts models. Provider API keys are configured in the Gateway page or via the
|
|
67
|
+
An AI service provider (OpenAI, Anthropic, Groq, OpenRouter, DeepSeek, etc.) that hosts models. Provider API keys are configured in the Gateway page or via the first-run wizard.
|
|
68
68
|
|
|
69
69
|
## Provider Gateway
|
|
70
70
|
Rev4a's built-in proxy that gives all agents unified access to configured LLM providers. Agents point to `http://host.docker.internal:3740/api/provider/v1` and Rev4a routes requests to the correct upstream using the stored API keys.
|
|
@@ -116,7 +116,7 @@ A record of an agent using a tool during a session. Useful for auditing what an
|
|
|
116
116
|
Optional reverse proxy for routing web traffic to agent containers. If configured, an agent gets a public URL. Rev4a itself runs on port 3740 and does not require Traefik.
|
|
117
117
|
|
|
118
118
|
## Vault
|
|
119
|
-
Rev4a's
|
|
119
|
+
Rev4a's store for third-party service tokens (GitHub, Trello, Vercel, Supabase, Notion). Provider API keys live separately in `provider-keys.json`, managed from the Gateway page. Supports reveal (written to an audit table no route or view reads), sync to and from containers, and live detection of which credentials are actually installed. Secrets are stored unencrypted.
|
|
120
120
|
|
|
121
121
|
## Workspace
|
|
122
122
|
The directory where an agent's operational files live (config, memory files, skills, plugins, scripts). The Workspace page lets you browse, view, and edit files across the VPS host and all agent containers.
|
|
@@ -1,15 +1,15 @@
|
|
|
1
1
|
# What is Rev4a?
|
|
2
2
|
|
|
3
|
-
> **Last updated:** 2026-
|
|
3
|
+
> **Last updated:** 2026-09-05
|
|
4
4
|
|
|
5
5
|
Rev4a is the control panel for your AI agent infrastructure. It shows you everything your agents are doing, how much they cost, and whether the system is healthy — all in one dashboard.
|
|
6
6
|
|
|
7
7
|
## What can you do in Rev4a?
|
|
8
8
|
|
|
9
9
|
### Dashboard (`/`)
|
|
10
|
-
The main page. See live sessions (who's working right now), cost summary by model and time period (today, 7 days, 30 days), system health (CPU, RAM, disk, load average), and a real-time event feed. Click any session row to open the Session Drawer and see every tool call the agent made. If the
|
|
10
|
+
The main page. See live sessions (who's working right now), cost summary by model and time period (today, 7 days, 30 days), system health (CPU, RAM, disk, load average), and a real-time event feed. Click any session row to open the Session Drawer and see every tool call the agent made. If the first-run wizard is incomplete, a banner appears at the top with a link to continue.
|
|
11
11
|
|
|
12
|
-
###
|
|
12
|
+
### First-run wizard (`/wizard`)
|
|
13
13
|
First-run setup wizard that guides new users through configuration. Four steps:
|
|
14
14
|
1. **Welcome** — what Rev4a is and what it can do
|
|
15
15
|
2. **Providers** — add API keys for DeepSeek, OpenAI, OpenRouter, or Groq (saved via the Provider Gateway)
|
|
@@ -68,7 +68,7 @@ Live web terminal into a Docker container. Run commands, inspect files, debug is
|
|
|
68
68
|
File explorer for the OpenClaw workspace. Browse, view, and edit files across workspaces: the VPS host workspace and every agent container workspace. Switch between workspaces via a dropdown. Supports binary file preview (images) and text editing with syntax awareness.
|
|
69
69
|
|
|
70
70
|
### Credentials (`/credentials`)
|
|
71
|
-
Manage third-party service credentials: GitHub, Trello, Vercel, Supabase, Notion.
|
|
71
|
+
Manage third-party service credentials: GitHub, Trello, Vercel, Supabase, Notion. Sync installs a credential into the containers you pick — as that CLI's own config for GitHub, Vercel and Supabase, or as a config file the agent reads for Trello and Notion, which are used through their REST API; de-sync removes it from one container. Any credential can be synced to any container — there is no per-agent permission model. Live detection shows which credentials are actually installed in each container: a green tick when the installed token is the profile's own, a yellow diamond marked "unknown credential" when the container holds a token for that provider that no stored profile accounts for — an edited-but-not-resynced credential, one installed by hand, or the remains of a deleted profile. Every reveal is recorded in an audit table, which no route or view reads. Secrets are held unencrypted in `credentials.db`.
|
|
72
72
|
|
|
73
73
|
### Crons (`/crons`)
|
|
74
74
|
Scheduled tasks auto-discovered from the host OpenClaw gateway (via `openclaw cron list --json`) and every running Docker container with the `AGENT_ID` label (via `docker exec openclaw cron list --json`). Filter jobs by agent using the toolbar tabs. Each job shows name, description, cron expression, next run, last run, and last status. Toggle on/off per job. The run history panel shows recent cron run executions for the selected job, loaded on demand from the container's gateway.
|
|
@@ -93,22 +93,19 @@ Skill registry showing all skills across three sources:
|
|
|
93
93
|
|
|
94
94
|
Filter by source, view and edit SKILL.md content, and **promote** agent-local skills to shared with one click.
|
|
95
95
|
|
|
96
|
-
###
|
|
97
|
-
|
|
96
|
+
### Setup (`/setup`)
|
|
97
|
+
First-run password setup. Reachable before a password exists; it sets `REV4A_PASSWORD` and the JWT secret, after which every page requires a session.
|
|
98
98
|
|
|
99
99
|
### Login (`/login`)
|
|
100
100
|
Password-protected access to the dashboard. Enter the Rev4a password to authenticate. Session persists via a JWT cookie (7-day expiry).
|
|
101
101
|
|
|
102
|
-
### Vault (`/vault`)
|
|
103
|
-
Credential storage with per-agent permissions. Store API keys and service tokens, scope them to specific agents, and manage permissions via the UI.
|
|
104
|
-
|
|
105
102
|
## What about Pulse?
|
|
106
103
|
|
|
107
104
|
Pulse is the AI assistant embedded in Rev4a. She appears as a floating chat button in the bottom-right corner of every page. She can:
|
|
108
105
|
|
|
109
106
|
- Explain what any page does
|
|
110
107
|
- Guide you through features ("how do I create an agent?")
|
|
111
|
-
- Answer questions about agents, providers, costs, sessions, containers, crons, credentials, and
|
|
108
|
+
- Answer questions about agents, providers, costs, sessions, containers, crons, credentials, and the first-run wizard
|
|
112
109
|
- Give practical tips based on the page you're on
|
|
113
110
|
|
|
114
111
|
Pulse does NOT have access to live data — she knows the page layout and features, but you need to look at the dashboard for real-time information.
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
# What PULSE Can Answer
|
|
2
2
|
|
|
3
|
-
> **Last updated:** 2026-
|
|
3
|
+
> **Last updated:** 2026-08-28
|
|
4
4
|
|
|
5
5
|
PULSE is the in-dashboard AI concierge for Rev4a. This document defines what she can and cannot answer.
|
|
6
6
|
|
|
@@ -10,7 +10,7 @@ PULSE is the in-dashboard AI concierge for Rev4a. This document defines what she
|
|
|
10
10
|
|
|
11
11
|
- "Where do I find the agents page?"
|
|
12
12
|
- "How do I get to the container list?"
|
|
13
|
-
- "Where can I see the
|
|
13
|
+
- "Where can I see the first-run wizard?"
|
|
14
14
|
- "Is there a page for cron jobs?"
|
|
15
15
|
- "Where can I see my AI providers?" — The Gateway page (`/gateway`) shows providers, models, agent assignments.
|
|
16
16
|
- "How do I create a new agent?"
|
|
@@ -34,7 +34,7 @@ PULSE is the in-dashboard AI concierge for Rev4a. This document defines what she
|
|
|
34
34
|
|
|
35
35
|
- "How do I create an agent?"
|
|
36
36
|
- "How do I set up Rev4a for the first time?"
|
|
37
|
-
- "How do I complete the
|
|
37
|
+
- "How do I complete the first-run wizard?"
|
|
38
38
|
- "How do I add an API key for a provider?"
|
|
39
39
|
- "How do I filter agents by status?"
|
|
40
40
|
- "How do I open a terminal for a container?"
|
|
@@ -75,8 +75,7 @@ PULSE is the in-dashboard AI concierge for Rev4a. This document defines what she
|
|
|
75
75
|
- "What happens when I recreate an agent?"
|
|
76
76
|
- "How do agent backups work?"
|
|
77
77
|
- "What is an agent persistent volume?"
|
|
78
|
-
- "What is the
|
|
79
|
-
- "What is the difference between Gateway and Providers pages?"
|
|
78
|
+
- "What is the first-run wizard?"
|
|
80
79
|
- "What is the Provider Gateway proxy?"
|
|
81
80
|
- "How does the SSE stream work?"
|
|
82
81
|
- "What is the shared gateway token?"
|
|
@@ -92,9 +91,10 @@ PULSE is the in-dashboard AI concierge for Rev4a. This document defines what she
|
|
|
92
91
|
- "Why are costs missing for some sessions?"
|
|
93
92
|
- "Why can't I connect to the container terminal?"
|
|
94
93
|
- "Why is the gateway sync not working?"
|
|
95
|
-
- "Why am I seeing
|
|
94
|
+
- "Why am I seeing a setup banner?"
|
|
96
95
|
- "How do I check if the daemon is running?"
|
|
97
96
|
- "Why are credentials not showing in my agent?"
|
|
97
|
+
- "What does the yellow diamond next to an agent mean?"
|
|
98
98
|
- "Why is the agent base image banner showing?"
|
|
99
99
|
- "How do I fix 'image is outdated'?"
|
|
100
100
|
- "What happens if I abort a build?"
|