camelagi 0.5.39 → 0.5.45
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/README.md +159 -27
- package/dashboard/404.html +1 -0
- package/dashboard/__next.__PAGE__.txt +9 -0
- package/dashboard/__next._full.txt +19 -0
- package/dashboard/__next._head.txt +6 -0
- package/dashboard/__next._index.txt +5 -0
- package/dashboard/__next._tree.txt +3 -0
- package/dashboard/_next/_next/static/T-oVqD_b6KFHCZwRKsnRE/_buildManifest.js +11 -0
- package/dashboard/_next/_next/static/T-oVqD_b6KFHCZwRKsnRE/_clientMiddlewareManifest.js +1 -0
- package/dashboard/_next/_next/static/T-oVqD_b6KFHCZwRKsnRE/_ssgManifest.js +1 -0
- package/dashboard/_next/_next/static/chunks/0.9wqq91a2h.e.js +3 -0
- package/dashboard/_next/_next/static/chunks/00-nlsz4ud071.js +11 -0
- package/dashboard/_next/_next/static/chunks/00noe7du3vxk9.js +1 -0
- package/dashboard/_next/_next/static/chunks/03~yq9q893hmn.js +1 -0
- package/dashboard/_next/_next/static/chunks/04wr2uisy8870.js +5 -0
- package/dashboard/_next/_next/static/chunks/05f.w0h0j~.3g.js +1 -0
- package/dashboard/_next/_next/static/chunks/0geaa8~wrpcj6.js +1 -0
- package/dashboard/_next/_next/static/chunks/0nrlwe_~wde44.js +1 -0
- package/dashboard/_next/_next/static/chunks/12l48lp-434~..js +31 -0
- package/dashboard/_next/_next/static/chunks/14qcm-bqojrb9.js +1 -0
- package/dashboard/_next/_next/static/chunks/15~vsexhgsteo.js +1 -0
- package/dashboard/_next/_next/static/chunks/turbopack-173kubfog5kol.js +1 -0
- package/dashboard/_next/static/8Qf-y5Z4kUHAaWZgy3BFF/_buildManifest.js +11 -0
- package/dashboard/_next/static/8Qf-y5Z4kUHAaWZgy3BFF/_clientMiddlewareManifest.js +1 -0
- package/dashboard/_next/static/8Qf-y5Z4kUHAaWZgy3BFF/_ssgManifest.js +1 -0
- package/dashboard/_next/static/IQ8CU45QQ3REnyUqiqjou/_buildManifest.js +11 -0
- package/dashboard/_next/static/IQ8CU45QQ3REnyUqiqjou/_clientMiddlewareManifest.js +1 -0
- package/dashboard/_next/static/IQ8CU45QQ3REnyUqiqjou/_ssgManifest.js +1 -0
- package/dashboard/_next/static/PXgzS7j3kuwIb14Ph3vgL/_buildManifest.js +11 -0
- package/dashboard/_next/static/PXgzS7j3kuwIb14Ph3vgL/_clientMiddlewareManifest.js +1 -0
- package/dashboard/_next/static/PXgzS7j3kuwIb14Ph3vgL/_ssgManifest.js +1 -0
- package/dashboard/_next/static/S6BdJ1Ro25a6twuts7gHi/_buildManifest.js +11 -0
- package/dashboard/_next/static/S6BdJ1Ro25a6twuts7gHi/_clientMiddlewareManifest.js +1 -0
- package/dashboard/_next/static/S6BdJ1Ro25a6twuts7gHi/_ssgManifest.js +1 -0
- package/dashboard/_next/static/T-oVqD_b6KFHCZwRKsnRE/_buildManifest.js +11 -0
- package/dashboard/_next/static/T-oVqD_b6KFHCZwRKsnRE/_clientMiddlewareManifest.js +1 -0
- package/dashboard/_next/static/T-oVqD_b6KFHCZwRKsnRE/_ssgManifest.js +1 -0
- package/dashboard/_next/static/bvUynE5XeBkbLQynmgHa8/_buildManifest.js +11 -0
- package/dashboard/_next/static/bvUynE5XeBkbLQynmgHa8/_clientMiddlewareManifest.js +1 -0
- package/dashboard/_next/static/bvUynE5XeBkbLQynmgHa8/_ssgManifest.js +1 -0
- package/dashboard/_next/static/chunks/0.9wqq91a2h.e.js +3 -0
- package/dashboard/_next/static/chunks/00-nlsz4ud071.js +11 -0
- package/dashboard/_next/static/chunks/00noe7du3vxk9.js +1 -0
- package/dashboard/_next/static/chunks/03~yq9q893hmn.js +1 -0
- package/dashboard/_next/static/chunks/04wr2uisy8870.js +5 -0
- package/dashboard/_next/static/chunks/05f.w0h0j~.3g.js +1 -0
- package/dashboard/_next/static/chunks/08ug0khjvhl6m.js +11 -0
- package/dashboard/_next/static/chunks/0d1s5w1cd08~7.js +11 -0
- package/dashboard/_next/static/chunks/0geaa8~wrpcj6.js +1 -0
- package/dashboard/_next/static/chunks/0lyajo4_yki3f.js +11 -0
- package/dashboard/_next/static/chunks/0nrlwe_~wde44.js +1 -0
- package/dashboard/_next/static/chunks/0pd15v2_1spxb.js +11 -0
- package/dashboard/_next/static/chunks/0vnhcfh7g1u6i.js +11 -0
- package/dashboard/_next/static/chunks/0ynuwcqa7w3o..css +2 -0
- package/dashboard/_next/static/chunks/11dfqgfbc8fk2.js +11 -0
- package/dashboard/_next/static/chunks/12l48lp-434~..js +31 -0
- package/dashboard/_next/static/chunks/14qcm-bqojrb9.js +1 -0
- package/dashboard/_next/static/chunks/15~vsexhgsteo.js +1 -0
- package/dashboard/_next/static/chunks/turbopack-173kubfog5kol.js +1 -0
- package/dashboard/_next/static/media/1bffadaabf893a1e-s.16ipb6fqu393i.woff2 +0 -0
- package/dashboard/_next/static/media/2bbe8d2671613f1f-s.067x_6k0k23tk.woff2 +0 -0
- package/dashboard/_next/static/media/2c55a0e60120577a-s.0bjc5tiuqdqro.woff2 +0 -0
- package/dashboard/_next/static/media/5476f68d60460930-s.0wxq9webf.ew4.woff2 +0 -0
- package/dashboard/_next/static/media/83afe278b6a6bb3c-s.p.0q-301v4kxxnr.woff2 +0 -0
- package/dashboard/_next/static/media/9c72aa0f40e4eef8-s.0m6w47a4e5dy9.woff2 +0 -0
- package/dashboard/_next/static/media/ad66f9afd8947f86-s.11u06r12fd6v_.woff2 +0 -0
- package/dashboard/_next/static/media/favicon.0x3dzn~oxb6tn.ico +0 -0
- package/dashboard/_next/static/uQ6ZB7JlP8tE93mlzKtXM/_buildManifest.js +11 -0
- package/dashboard/_next/static/uQ6ZB7JlP8tE93mlzKtXM/_clientMiddlewareManifest.js +1 -0
- package/dashboard/_next/static/uQ6ZB7JlP8tE93mlzKtXM/_ssgManifest.js +1 -0
- package/dashboard/_not-found/__next._full.txt +16 -0
- package/dashboard/_not-found/__next._head.txt +6 -0
- package/dashboard/_not-found/__next._index.txt +5 -0
- package/dashboard/_not-found/__next._not-found.__PAGE__.txt +5 -0
- package/dashboard/_not-found/__next._not-found.txt +5 -0
- package/dashboard/_not-found/__next._tree.txt +2 -0
- package/dashboard/_not-found.html +1 -0
- package/dashboard/_not-found.txt +16 -0
- package/dashboard/favicon.ico +0 -0
- package/dashboard/file.svg +1 -0
- package/dashboard/globe.svg +1 -0
- package/dashboard/index.html +1 -0
- package/dashboard/index.txt +19 -0
- package/dashboard/next.svg +1 -0
- package/dashboard/vercel.svg +1 -0
- package/dashboard/window.svg +1 -0
- package/dist/agent/agent-cursor.js +138 -0
- package/dist/agent/agent-cursor.js.map +1 -0
- package/dist/agent/agent-sdk.js +71 -57
- package/dist/agent/agent-sdk.js.map +1 -1
- package/dist/agent/types.js +1 -1
- package/dist/agent/types.js.map +1 -1
- package/dist/agent.js +11 -7
- package/dist/agent.js.map +1 -1
- package/dist/bootstrap.js +1 -1
- package/dist/bootstrap.js.map +1 -1
- package/dist/cli/cmd-config.js +1 -1
- package/dist/cli/cmd-config.js.map +1 -1
- package/dist/cli/cmd-dashboard.js +63 -0
- package/dist/cli/cmd-dashboard.js.map +1 -0
- package/dist/cli/cmd-pairing.js +1 -1
- package/dist/cli/cmd-pairing.js.map +1 -1
- package/dist/cli/cmd-projects.js +128 -0
- package/dist/cli/cmd-projects.js.map +1 -0
- package/dist/cli/cmd-team.js +587 -0
- package/dist/cli/cmd-team.js.map +1 -0
- package/dist/cli.js +2 -1
- package/dist/cli.js.map +1 -1
- package/dist/core/config.js +33 -48
- package/dist/core/config.js.map +1 -1
- package/dist/core/constants.js +2 -0
- package/dist/core/constants.js.map +1 -1
- package/dist/core/version.js +1 -1
- package/dist/extensions/bot-approval.js.map +1 -0
- package/dist/extensions/pairing.js.map +1 -0
- package/dist/extensions/team-coordinator.js +63 -0
- package/dist/extensions/team-coordinator.js.map +1 -0
- package/dist/gateway/csrf.js +1 -1
- package/dist/gateway/csrf.js.map +1 -1
- package/dist/gateway/routes.js +198 -95
- package/dist/gateway/routes.js.map +1 -1
- package/dist/gateway/ws-handler.js +200 -168
- package/dist/gateway/ws-handler.js.map +1 -1
- package/dist/gateway-entry.js +8 -2
- package/dist/gateway-entry.js.map +1 -1
- package/dist/model.js +5 -4
- package/dist/model.js.map +1 -1
- package/dist/runtime/orchestrate.js +19 -8
- package/dist/runtime/orchestrate.js.map +1 -1
- package/dist/serve.js +18 -3
- package/dist/serve.js.map +1 -1
- package/dist/session.js +14 -2
- package/dist/session.js.map +1 -1
- package/dist/setup.js +17 -2
- package/dist/setup.js.map +1 -1
- package/dist/team.js +203 -0
- package/dist/team.js.map +1 -0
- package/dist/telegram/admin-agents.js +498 -0
- package/dist/telegram/admin-agents.js.map +1 -0
- package/dist/telegram/admin-bot.js +13 -934
- package/dist/telegram/admin-bot.js.map +1 -1
- package/dist/telegram/admin-commands.js +403 -0
- package/dist/telegram/admin-commands.js.map +1 -0
- package/dist/telegram/agent-bot.js +45 -1338
- package/dist/telegram/agent-bot.js.map +1 -1
- package/dist/telegram/agent-claude-code.js +555 -0
- package/dist/telegram/agent-claude-code.js.map +1 -0
- package/dist/telegram/agent-commands.js +396 -0
- package/dist/telegram/agent-commands.js.map +1 -0
- package/dist/telegram/agent-context.js +136 -0
- package/dist/telegram/agent-context.js.map +1 -0
- package/dist/telegram/agent-messages.js +249 -0
- package/dist/telegram/agent-messages.js.map +1 -0
- package/dist/telegram/dir-browser.js +9 -0
- package/dist/telegram/dir-browser.js.map +1 -1
- package/dist/telegram/draft-stream.js +4 -2
- package/dist/telegram/draft-stream.js.map +1 -1
- package/dist/telegram/resolve.js +15 -28
- package/dist/telegram/resolve.js.map +1 -1
- package/dist/telegram/terminal.js +139 -32
- package/dist/telegram/terminal.js.map +1 -1
- package/dist/telegram/wizards.js +1 -1
- package/dist/telegram/wizards.js.map +1 -1
- package/dist/telegram.js +4 -3
- package/dist/telegram.js.map +1 -1
- package/dist/tools/admin.js +841 -0
- package/dist/tools/admin.js.map +1 -0
- package/dist/tools/team.js +182 -0
- package/dist/tools/team.js.map +1 -0
- package/dist/tui/commands.js +15 -0
- package/dist/tui/commands.js.map +1 -1
- package/dist/tui/components/welcome.js +2 -1
- package/dist/tui/components/welcome.js.map +1 -1
- package/dist/tui/tui.js +13 -1
- package/dist/tui/tui.js.map +1 -1
- package/package.json +4 -1
- package/dist/cli/cmd-install.js +0 -80
- package/dist/cli/cmd-install.js.map +0 -1
- package/dist/telegram/bot-approval.js.map +0 -1
- package/dist/telegram/pairing.js.map +0 -1
- /package/dist/{telegram → extensions}/bot-approval.js +0 -0
- /package/dist/{telegram → extensions}/pairing.js +0 -0
package/README.md
CHANGED
|
@@ -5,28 +5,31 @@
|
|
|
5
5
|
<h1 align="center">CamelAGI</h1>
|
|
6
6
|
|
|
7
7
|
<p align="center">
|
|
8
|
-
<strong>
|
|
9
|
-
|
|
10
|
-
</p>
|
|
11
|
-
|
|
12
|
-
<p align="center">
|
|
13
|
-
Alternative to OpenClaw, built on Claude Agent SDK.
|
|
8
|
+
<strong>Open-source AI agent platform built on Claude Agent SDK + Cursor SDK.</strong><br>
|
|
9
|
+
Alternative to OpenClaw — self-hosted, multi-runtime, multi-channel.
|
|
14
10
|
</p>
|
|
15
11
|
|
|
16
12
|
<p align="center">
|
|
17
13
|
<a href="LICENSE"><img src="https://img.shields.io/badge/License-MIT-yellow.svg" alt="MIT License"></a>
|
|
18
14
|
<a href="https://www.typescriptlang.org"><img src="https://img.shields.io/badge/TypeScript-5.7-blue?logo=typescript" alt="TypeScript"></a>
|
|
19
15
|
<a href="https://platform.claude.com/docs/en/agent-sdk/overview"><img src="https://img.shields.io/badge/Built%20with-Claude%20Agent%20SDK-orange?logo=anthropic" alt="Claude Agent SDK"></a>
|
|
16
|
+
<a href="https://cursor.com/docs/sdk/typescript"><img src="https://img.shields.io/badge/Built%20with-Cursor%20SDK-purple" alt="Cursor SDK"></a>
|
|
20
17
|
<a href="https://core.telegram.org/bots"><img src="https://img.shields.io/badge/Telegram-Admin%20Bot-26A5E4?logo=telegram" alt="Telegram"></a>
|
|
21
18
|
<a href="https://camelagi.net"><img src="https://img.shields.io/badge/Website-camelagi.net-brown" alt="Website"></a>
|
|
22
19
|
</p>
|
|
23
20
|
|
|
24
21
|
<p align="center">
|
|
25
|
-
<img src="assets/Claude_Logo.png" alt="Claude Logo" width="
|
|
22
|
+
<img src="assets/Claude_Logo.png" alt="Claude Logo" width="100" />
|
|
23
|
+
|
|
24
|
+
<img src="assets/Cursor_Logo.png" alt="Cursor Logo" width="100" />
|
|
25
|
+
</p>
|
|
26
|
+
|
|
27
|
+
<p align="center">
|
|
28
|
+
Dual runtime: <strong>Claude Agent SDK</strong> + <strong>Cursor SDK</strong> — switch between them per session.
|
|
26
29
|
</p>
|
|
27
30
|
|
|
28
31
|
<p align="center">
|
|
29
|
-
|
|
32
|
+
<img src="assets/camelSetupTUI.gif" alt="CamelAGI Setup" width="700" />
|
|
30
33
|
</p>
|
|
31
34
|
|
|
32
35
|
---
|
|
@@ -45,11 +48,11 @@ Use `/newagent` in Telegram to create your first AI agent.
|
|
|
45
48
|
|
|
46
49
|
## Why CamelAGI
|
|
47
50
|
|
|
51
|
+
- **Dual SDK runtime** — Claude Agent SDK + Cursor SDK, switchable per session
|
|
48
52
|
- Run Claude Code remotely from Telegram
|
|
49
53
|
- Create and manage multiple AI agents
|
|
50
54
|
- Self-hosted with full control
|
|
51
|
-
-
|
|
52
|
-
- Multi-provider support
|
|
55
|
+
- Multi-provider support (Anthropic, OpenRouter, or any OpenAI-compatible endpoint)
|
|
53
56
|
- Alternative to OpenClaw
|
|
54
57
|
|
|
55
58
|
---
|
|
@@ -83,19 +86,110 @@ Uses your API key (Anthropic, OpenAI, OpenRouter, etc.) to run an AI agent throu
|
|
|
83
86
|
|
|
84
87
|
### 2. Claude Code Agent (local CLI)
|
|
85
88
|
|
|
86
|
-
Runs Claude Code directly on your machine, remote-controlled from Telegram.
|
|
89
|
+
Runs Claude Code directly on your machine, remote-controlled from Telegram. Same experience as the Claude Code CLI, but from your phone.
|
|
90
|
+
|
|
91
|
+
> **Requires:** Claude Code installed and logged in on the machine running CamelAGI.
|
|
92
|
+
>
|
|
93
|
+
> ```bash
|
|
94
|
+
> npm i -g @anthropic-ai/claude-code
|
|
95
|
+
> claude login
|
|
96
|
+
> ```
|
|
97
|
+
|
|
98
|
+
1. Open admin bot → `/newagent` → select **Claude Code (local CLI)** → paste bot token
|
|
99
|
+
2. Or use `/claudecode` in any existing agent bot to start on the fly
|
|
100
|
+
|
|
101
|
+
#### What Claude Code mode can do
|
|
102
|
+
|
|
103
|
+
| Category | Capabilities |
|
|
104
|
+
|----------|-------------|
|
|
105
|
+
| **Session** | Start, stop, new session, resume previous sessions |
|
|
106
|
+
| **Models** | Switch between Sonnet 4.6, Opus 4.6, Haiku 4.5 |
|
|
107
|
+
| **Code Actions** | `/review`, `/fix`, `/test`, `/commit`, `/pr`, `/refactor`, `/security`, `/explain`, `/init`, `/doc` |
|
|
108
|
+
| **Settings** | `/model`, `/effort`, `/workdir`, `/tools`, `/prompt`, `/budget`, `/adddir`, `/worktree` |
|
|
109
|
+
| **Voice Input** | Send voice messages — transcribed and processed by Claude Code |
|
|
110
|
+
| **Directory Browser** | Navigate folders via Telegram inline buttons |
|
|
111
|
+
| **Tool Control** | Toggle individual tools on/off (Bash, Read, Write, Edit, etc.) |
|
|
112
|
+
| **Hybrid Mode** | Claude Code gets CamelAGI context — SOUL.md personality, MEMORY.md, daily notes, skills, MCP servers |
|
|
113
|
+
| **CamelAGI API** | Claude Code can access cron jobs, sessions, agents, config via the gateway API |
|
|
114
|
+
| **Streaming** | Real-time response streaming via native Telegram `sendMessageDraft` |
|
|
115
|
+
| **Pinned Status** | "Claude Code ON" pinned in chat, dynamic command menu |
|
|
116
|
+
|
|
117
|
+
---
|
|
118
|
+
|
|
119
|
+
## Cursor SDK Runtime
|
|
120
|
+
|
|
121
|
+
CamelAGI supports the [Cursor SDK](https://cursor.com/docs/sdk/typescript) as an alternative agent runtime alongside Claude Agent SDK. Switch between them at any time — each session remembers which runtime it uses.
|
|
122
|
+
|
|
123
|
+
### Setup
|
|
87
124
|
|
|
125
|
+
Get your Cursor API key from [Cursor Dashboard → Integrations](https://cursor.com/settings).
|
|
126
|
+
|
|
127
|
+
```yaml
|
|
128
|
+
# ~/.camelagi/config.yaml
|
|
129
|
+
cursorApiKey: "crsr_..."
|
|
130
|
+
cursorModel: "composer-2" # optional, defaults to composer-2
|
|
131
|
+
```
|
|
132
|
+
|
|
133
|
+
Or set the env var: `export CURSOR_API_KEY=crsr_...`
|
|
134
|
+
|
|
135
|
+
### Switching runtimes
|
|
136
|
+
|
|
137
|
+
**TUI:**
|
|
138
|
+
```
|
|
139
|
+
/cursor — switch to Cursor SDK
|
|
140
|
+
/claude — switch back to Claude SDK
|
|
141
|
+
```
|
|
142
|
+
|
|
143
|
+
**REST API:**
|
|
88
144
|
```bash
|
|
89
|
-
|
|
90
|
-
|
|
145
|
+
curl -X POST http://localhost:18305/chat \
|
|
146
|
+
-H "Content-Type: application/json" \
|
|
147
|
+
-d '{"message": "hello", "sdk": "cursor"}'
|
|
91
148
|
```
|
|
92
149
|
|
|
93
|
-
|
|
150
|
+
**WebSocket:**
|
|
151
|
+
```json
|
|
152
|
+
{"type": "chat", "message": "hello", "sdk": "cursor"}
|
|
153
|
+
```
|
|
94
154
|
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
155
|
+
Sessions are sticky — the first message sets the runtime, and all subsequent messages on that session use the same one automatically.
|
|
156
|
+
|
|
157
|
+
---
|
|
158
|
+
|
|
159
|
+
## AI Admin Agent
|
|
160
|
+
|
|
161
|
+
An AI-powered admin agent that replaces wizard-based management with natural language. Instead of clicking through menus, just tell it what to do:
|
|
162
|
+
|
|
163
|
+
> "Create 3 agents: first one called Finance for personal finance with telegram token 123:ABC, second one called Dev for development with the github MCP server, third one called Writer with the writing personality template"
|
|
164
|
+
|
|
165
|
+
### Setup
|
|
166
|
+
|
|
167
|
+
```yaml
|
|
168
|
+
# ~/.camelagi/config.yaml
|
|
169
|
+
agents:
|
|
170
|
+
aiadmin:
|
|
171
|
+
name: AI Admin
|
|
172
|
+
adminTools: true
|
|
173
|
+
model: claude-sonnet-4-20250514
|
|
174
|
+
telegram:
|
|
175
|
+
botToken: "YOUR_BOT_TOKEN"
|
|
176
|
+
allowedUsers: [YOUR_USER_ID]
|
|
177
|
+
```
|
|
178
|
+
|
|
179
|
+
Set `adminTools: true` on any agent to give it full admin capabilities via 8 AI tools:
|
|
180
|
+
|
|
181
|
+
| Tool | Actions | What it does |
|
|
182
|
+
|------|---------|-------------|
|
|
183
|
+
| `admin_agents` | list, create, update, delete | Full agent lifecycle with soul templates |
|
|
184
|
+
| `admin_config` | get, set, setup_provider | View/modify config, one-shot provider setup |
|
|
185
|
+
| `admin_mcp` | list, add, remove | Manage MCP servers (stdio/http/sse) |
|
|
186
|
+
| `admin_soul` | read, write | Read/write agent SOUL.md personality |
|
|
187
|
+
| `admin_bot` | status, start, stop, restart | Telegram bot lifecycle |
|
|
188
|
+
| `admin_sessions` | list, clear | View and bulk-delete sessions |
|
|
189
|
+
| `admin_usage` | — | Per-agent token usage and costs |
|
|
190
|
+
| `admin_pairing` | list, approve, deny | Manage user access requests |
|
|
191
|
+
|
|
192
|
+
The AI admin works alongside the existing wizard admin bot — use both, or just one.
|
|
99
193
|
|
|
100
194
|
---
|
|
101
195
|
|
|
@@ -103,6 +197,8 @@ Then:
|
|
|
103
197
|
|
|
104
198
|
| Feature | Description |
|
|
105
199
|
|---|---|
|
|
200
|
+
| Dual SDK Runtime | Claude Agent SDK + Cursor SDK, switchable per session |
|
|
201
|
+
| AI Admin Agent | Natural language agent management with admin tools |
|
|
106
202
|
| Claude Code via Telegram | Run Claude Code from your phone |
|
|
107
203
|
| Telegram Admin Bot | Create and manage agents |
|
|
108
204
|
| Telegram Agent Bots | One bot per agent |
|
|
@@ -116,6 +212,40 @@ Then:
|
|
|
116
212
|
| Usage Tracking | Cost + token monitoring |
|
|
117
213
|
| Agent Cloning | Duplicate agent config |
|
|
118
214
|
| Tool Approvals | Human approval flow |
|
|
215
|
+
| Web Dashboard | Browser-based control panel |
|
|
216
|
+
|
|
217
|
+
---
|
|
218
|
+
|
|
219
|
+
## Web Dashboard
|
|
220
|
+
|
|
221
|
+
A full 15-page dashboard served locally from the gateway. ChatGPT-style UI with light/dark mode.
|
|
222
|
+
|
|
223
|
+
```bash
|
|
224
|
+
camel serve
|
|
225
|
+
# Open http://127.0.0.1:18305/dashboard
|
|
226
|
+
```
|
|
227
|
+
|
|
228
|
+
Auto-connects to the gateway — no URL or token needed for local use.
|
|
229
|
+
|
|
230
|
+
| Page | What it does |
|
|
231
|
+
|------|-------------|
|
|
232
|
+
| **Overview** | Health stats, uptime, active runs, lane utilization, agents |
|
|
233
|
+
| **Chat** | Real-time streaming, tool cards, thinking blocks, markdown, agent/model/thinking/effort selectors, session sidebar, file upload |
|
|
234
|
+
| **Agents** | Create, delete, clone agents. Edit SOUL.md inline |
|
|
235
|
+
| **Sessions** | Browse history, view messages, delete, export as markdown |
|
|
236
|
+
| **Config** | Editable form (model, provider, thinking, effort, system prompt) + raw JSON |
|
|
237
|
+
| **Monitor** | Live WebSocket event feed |
|
|
238
|
+
| **Workspace** | Edit SOUL.md, TOOLS.md, MEMORY.md, HEARTBEAT.md per agent. Browse daily memory notes |
|
|
239
|
+
| **Cron Jobs** | View scheduled tasks with status |
|
|
240
|
+
| **Skills** | List installed skills |
|
|
241
|
+
| **Pairing** | Approve/deny user access requests |
|
|
242
|
+
| **MCP Servers** | Global + per-agent MCP server listing |
|
|
243
|
+
| **Channels** | Telegram/Discord bot status |
|
|
244
|
+
| **Voice** | Configure transcription provider (Groq/OpenAI/Deepgram) |
|
|
245
|
+
| **Logs** | Auto-refreshing server request log |
|
|
246
|
+
| **Settings** | Gateway URL/token (for remote connections) |
|
|
247
|
+
|
|
248
|
+
For remote access, use [Tailscale](https://tailscale.com): `camel tailscale serve` or `camel tailscale funnel`.
|
|
119
249
|
|
|
120
250
|
---
|
|
121
251
|
|
|
@@ -123,10 +253,11 @@ Then:
|
|
|
123
253
|
|
|
124
254
|
CamelAGI works across:
|
|
125
255
|
|
|
126
|
-
- Telegram
|
|
127
|
-
- Discord
|
|
128
|
-
- Terminal
|
|
129
|
-
- Claude Code via Telegram
|
|
256
|
+
- Telegram
|
|
257
|
+
- Discord
|
|
258
|
+
- Terminal
|
|
259
|
+
- Claude Code via Telegram
|
|
260
|
+
- Web Dashboard
|
|
130
261
|
|
|
131
262
|
All channels share the same runtime, tools, and memory.
|
|
132
263
|
|
|
@@ -209,12 +340,13 @@ agents:
|
|
|
209
340
|
## Architecture
|
|
210
341
|
|
|
211
342
|
```text
|
|
212
|
-
Inbound message
|
|
213
|
-
→
|
|
214
|
-
→
|
|
215
|
-
→
|
|
343
|
+
Inbound message (TUI / REST / WS / Telegram)
|
|
344
|
+
→ SDK resolution (Claude or Cursor, sticky per session)
|
|
345
|
+
→ Queue check
|
|
346
|
+
→ Context load + compaction
|
|
347
|
+
→ Agent execution (Claude Agent SDK or Cursor SDK via gateway)
|
|
216
348
|
→ Tool use
|
|
217
|
-
→ Save session
|
|
349
|
+
→ Save session (with SDK tag)
|
|
218
350
|
```
|
|
219
351
|
|
|
220
352
|
---
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
<!DOCTYPE html><html lang="en"><head><meta charSet="utf-8"/><meta name="viewport" content="width=device-width, initial-scale=1"/><link rel="stylesheet" href="/dashboard/_next/static/chunks/0ynuwcqa7w3o..css" data-precedence="next"/><link rel="preload" as="script" fetchPriority="low" href="/dashboard/_next/static/chunks/0ht900cau6_ur.js"/><script src="/dashboard/_next/static/chunks/0lzx09ak.mpqg.js" async=""></script><script src="/dashboard/_next/static/chunks/0bogtdbh.dcu1.js" async=""></script><script src="/dashboard/_next/static/chunks/turbopack-0118aznmidvlg.js" async=""></script><script src="/dashboard/_next/static/chunks/0kx3u3u77v4~r.js" async=""></script><meta name="robots" content="noindex"/><meta name="next-size-adjust" content=""/><title>404: This page could not be found.</title><title>CamelAGI Dashboard</title><meta name="description" content="Control panel for CamelAGI"/><link rel="icon" href="/dashboard/favicon.ico?favicon.0x3dzn~oxb6tn.ico" sizes="256x256" type="image/x-icon"/><script src="/dashboard/_next/static/chunks/03~yq9q893hmn.js" noModule=""></script></head><body class="inter_b2991b2-module__9mH_6q__variable font-sans antialiased"><div hidden=""><!--$--><!--/$--></div><div style="font-family:system-ui,"Segoe UI",Roboto,Helvetica,Arial,sans-serif,"Apple Color Emoji","Segoe UI Emoji";height:100vh;text-align:center;display:flex;flex-direction:column;align-items:center;justify-content:center"><div><style>body{color:#000;background:#fff;margin:0}.next-error-h1{border-right:1px solid rgba(0,0,0,.3)}@media (prefers-color-scheme:dark){body{color:#fff;background:#000}.next-error-h1{border-right:1px solid rgba(255,255,255,.3)}}</style><h1 class="next-error-h1" style="display:inline-block;margin:0 20px 0 0;padding:0 23px 0 0;font-size:24px;font-weight:500;vertical-align:top;line-height:49px">404</h1><div style="display:inline-block"><h2 style="font-size:14px;font-weight:400;line-height:49px;margin:0">This page could not be found.</h2></div></div></div><!--$--><!--/$--><script src="/dashboard/_next/static/chunks/0ht900cau6_ur.js" id="_R_" async=""></script><script>(self.__next_f=self.__next_f||[]).push([0])</script><script>self.__next_f.push([1,"1:\"$Sreact.fragment\"\n2:I[39756,[\"/dashboard/_next/static/chunks/0kx3u3u77v4~r.js\"],\"default\"]\n3:I[37457,[\"/dashboard/_next/static/chunks/0kx3u3u77v4~r.js\"],\"default\"]\n4:I[97367,[\"/dashboard/_next/static/chunks/0kx3u3u77v4~r.js\"],\"OutletBoundary\"]\n5:\"$Sreact.suspense\"\n8:I[97367,[\"/dashboard/_next/static/chunks/0kx3u3u77v4~r.js\"],\"ViewportBoundary\"]\na:I[97367,[\"/dashboard/_next/static/chunks/0kx3u3u77v4~r.js\"],\"MetadataBoundary\"]\nc:I[68027,[\"/dashboard/_next/static/chunks/0kx3u3u77v4~r.js\"],\"default\",1]\n:HL[\"/dashboard/_next/static/chunks/0ynuwcqa7w3o..css\",\"style\"]\n"])</script><script>self.__next_f.push([1,"0:{\"P\":null,\"c\":[\"\",\"_not-found\"],\"q\":\"\",\"i\":false,\"f\":[[[\"\",{\"children\":[\"/_not-found\",{\"children\":[\"__PAGE__\",{}]}]},\"$undefined\",\"$undefined\",16],[[\"$\",\"$1\",\"c\",{\"children\":[[[\"$\",\"link\",\"0\",{\"rel\":\"stylesheet\",\"href\":\"/dashboard/_next/static/chunks/0ynuwcqa7w3o..css\",\"precedence\":\"next\",\"crossOrigin\":\"$undefined\",\"nonce\":\"$undefined\"}],[\"$\",\"script\",\"script-0\",{\"src\":\"/dashboard/_next/static/chunks/0kx3u3u77v4~r.js\",\"async\":true,\"nonce\":\"$undefined\"}]],[\"$\",\"html\",null,{\"lang\":\"en\",\"suppressHydrationWarning\":true,\"children\":[\"$\",\"body\",null,{\"className\":\"inter_b2991b2-module__9mH_6q__variable font-sans antialiased\",\"children\":[\"$\",\"$L2\",null,{\"parallelRouterKey\":\"children\",\"error\":\"$undefined\",\"errorStyles\":\"$undefined\",\"errorScripts\":\"$undefined\",\"template\":[\"$\",\"$L3\",null,{}],\"templateStyles\":\"$undefined\",\"templateScripts\":\"$undefined\",\"notFound\":[[[\"$\",\"title\",null,{\"children\":\"404: This page could not be found.\"}],[\"$\",\"div\",null,{\"style\":{\"fontFamily\":\"system-ui,\\\"Segoe UI\\\",Roboto,Helvetica,Arial,sans-serif,\\\"Apple Color Emoji\\\",\\\"Segoe UI Emoji\\\"\",\"height\":\"100vh\",\"textAlign\":\"center\",\"display\":\"flex\",\"flexDirection\":\"column\",\"alignItems\":\"center\",\"justifyContent\":\"center\"},\"children\":[\"$\",\"div\",null,{\"children\":[[\"$\",\"style\",null,{\"dangerouslySetInnerHTML\":{\"__html\":\"body{color:#000;background:#fff;margin:0}.next-error-h1{border-right:1px solid rgba(0,0,0,.3)}@media (prefers-color-scheme:dark){body{color:#fff;background:#000}.next-error-h1{border-right:1px solid rgba(255,255,255,.3)}}\"}}],[\"$\",\"h1\",null,{\"className\":\"next-error-h1\",\"style\":{\"display\":\"inline-block\",\"margin\":\"0 20px 0 0\",\"padding\":\"0 23px 0 0\",\"fontSize\":24,\"fontWeight\":500,\"verticalAlign\":\"top\",\"lineHeight\":\"49px\"},\"children\":404}],[\"$\",\"div\",null,{\"style\":{\"display\":\"inline-block\"},\"children\":[\"$\",\"h2\",null,{\"style\":{\"fontSize\":14,\"fontWeight\":400,\"lineHeight\":\"49px\",\"margin\":0},\"children\":\"This page could not be found.\"}]}]]}]}]],[]],\"forbidden\":\"$undefined\",\"unauthorized\":\"$undefined\"}]}]}]]}],{\"children\":[[\"$\",\"$1\",\"c\",{\"children\":[null,[\"$\",\"$L2\",null,{\"parallelRouterKey\":\"children\",\"error\":\"$undefined\",\"errorStyles\":\"$undefined\",\"errorScripts\":\"$undefined\",\"template\":[\"$\",\"$L3\",null,{}],\"templateStyles\":\"$undefined\",\"templateScripts\":\"$undefined\",\"notFound\":\"$undefined\",\"forbidden\":\"$undefined\",\"unauthorized\":\"$undefined\"}]]}],{\"children\":[[\"$\",\"$1\",\"c\",{\"children\":[[[\"$\",\"title\",null,{\"children\":\"404: This page could not be found.\"}],[\"$\",\"div\",null,{\"style\":\"$0:f:0:1:0:props:children:1:props:children:props:children:props:notFound:0:1:props:style\",\"children\":[\"$\",\"div\",null,{\"children\":[[\"$\",\"style\",null,{\"dangerouslySetInnerHTML\":{\"__html\":\"body{color:#000;background:#fff;margin:0}.next-error-h1{border-right:1px solid rgba(0,0,0,.3)}@media (prefers-color-scheme:dark){body{color:#fff;background:#000}.next-error-h1{border-right:1px solid rgba(255,255,255,.3)}}\"}}],[\"$\",\"h1\",null,{\"className\":\"next-error-h1\",\"style\":\"$0:f:0:1:0:props:children:1:props:children:props:children:props:notFound:0:1:props:children:props:children:1:props:style\",\"children\":404}],[\"$\",\"div\",null,{\"style\":\"$0:f:0:1:0:props:children:1:props:children:props:children:props:notFound:0:1:props:children:props:children:2:props:style\",\"children\":[\"$\",\"h2\",null,{\"style\":\"$0:f:0:1:0:props:children:1:props:children:props:children:props:notFound:0:1:props:children:props:children:2:props:children:props:style\",\"children\":\"This page could not be found.\"}]}]]}]}]],null,[\"$\",\"$L4\",null,{\"children\":[\"$\",\"$5\",null,{\"name\":\"Next.MetadataOutlet\",\"children\":\"$@6\"}]}]]}],{},null,false,null]},null,false,\"$@7\"]},null,false,null],[\"$\",\"$1\",\"h\",{\"children\":[[\"$\",\"meta\",null,{\"name\":\"robots\",\"content\":\"noindex\"}],[\"$\",\"$L8\",null,{\"children\":\"$L9\"}],[\"$\",\"div\",null,{\"hidden\":true,\"children\":[\"$\",\"$La\",null,{\"children\":[\"$\",\"$5\",null,{\"name\":\"Next.Metadata\",\"children\":\"$Lb\"}]}]}],[\"$\",\"meta\",null,{\"name\":\"next-size-adjust\",\"content\":\"\"}]]}],false]],\"m\":\"$undefined\",\"G\":[\"$c\",[[\"$\",\"link\",\"0\",{\"rel\":\"stylesheet\",\"href\":\"/dashboard/_next/static/chunks/0ynuwcqa7w3o..css\",\"precedence\":\"next\",\"crossOrigin\":\"$undefined\",\"nonce\":\"$undefined\"}]]],\"S\":true,\"h\":null,\"s\":\"$undefined\",\"l\":\"$undefined\",\"p\":\"$undefined\",\"d\":\"$undefined\",\"b\":\"bGS-8HTT5ueoB7g98l4SY\"}\n"])</script><script>self.__next_f.push([1,"d:[]\n7:\"$Wd\"\n"])</script><script>self.__next_f.push([1,"9:[[\"$\",\"meta\",\"0\",{\"charSet\":\"utf-8\"}],[\"$\",\"meta\",\"1\",{\"name\":\"viewport\",\"content\":\"width=device-width, initial-scale=1\"}]]\n"])</script><script>self.__next_f.push([1,"e:I[27201,[\"/dashboard/_next/static/chunks/0kx3u3u77v4~r.js\"],\"IconMark\"]\n6:null\nb:[[\"$\",\"title\",\"0\",{\"children\":\"CamelAGI Dashboard\"}],[\"$\",\"meta\",\"1\",{\"name\":\"description\",\"content\":\"Control panel for CamelAGI\"}],[\"$\",\"link\",\"2\",{\"rel\":\"icon\",\"href\":\"/dashboard/favicon.ico?favicon.0x3dzn~oxb6tn.ico\",\"sizes\":\"256x256\",\"type\":\"image/x-icon\"}],[\"$\",\"$Le\",\"3\",{}]]\n"])</script></body></html>
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
1:"$Sreact.fragment"
|
|
2
|
+
2:I[47257,["/dashboard/_next/static/chunks/0kx3u3u77v4~r.js"],"ClientPageRoot"]
|
|
3
|
+
3:I[52683,["/dashboard/_next/static/chunks/0kx3u3u77v4~r.js","/dashboard/_next/static/chunks/00zgfz5vuzgew.js"],"default"]
|
|
4
|
+
6:I[97367,["/dashboard/_next/static/chunks/0kx3u3u77v4~r.js"],"OutletBoundary"]
|
|
5
|
+
7:"$Sreact.suspense"
|
|
6
|
+
0:{"rsc":["$","$1","c",{"children":[["$","$L2",null,{"Component":"$3","serverProvidedParams":{"searchParams":{},"params":{},"promises":["$@4","$@5"]}}],[["$","script","script-0",{"src":"/dashboard/_next/static/chunks/00zgfz5vuzgew.js","async":true}]],["$","$L6",null,{"children":["$","$7",null,{"name":"Next.MetadataOutlet","children":"$@8"}]}]]}],"isPartial":false,"staleTime":300,"varyParams":null,"buildId":"bGS-8HTT5ueoB7g98l4SY"}
|
|
7
|
+
4:{}
|
|
8
|
+
5:"$0:rsc:props:children:0:props:serverProvidedParams:params"
|
|
9
|
+
8:null
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
1:"$Sreact.fragment"
|
|
2
|
+
2:I[39756,["/dashboard/_next/static/chunks/0kx3u3u77v4~r.js"],"default"]
|
|
3
|
+
3:I[37457,["/dashboard/_next/static/chunks/0kx3u3u77v4~r.js"],"default"]
|
|
4
|
+
4:I[47257,["/dashboard/_next/static/chunks/0kx3u3u77v4~r.js"],"ClientPageRoot"]
|
|
5
|
+
5:I[52683,["/dashboard/_next/static/chunks/0kx3u3u77v4~r.js","/dashboard/_next/static/chunks/00zgfz5vuzgew.js"],"default"]
|
|
6
|
+
8:I[97367,["/dashboard/_next/static/chunks/0kx3u3u77v4~r.js"],"OutletBoundary"]
|
|
7
|
+
9:"$Sreact.suspense"
|
|
8
|
+
b:I[97367,["/dashboard/_next/static/chunks/0kx3u3u77v4~r.js"],"ViewportBoundary"]
|
|
9
|
+
d:I[97367,["/dashboard/_next/static/chunks/0kx3u3u77v4~r.js"],"MetadataBoundary"]
|
|
10
|
+
f:I[68027,["/dashboard/_next/static/chunks/0kx3u3u77v4~r.js"],"default",1]
|
|
11
|
+
:HL["/dashboard/_next/static/chunks/0ynuwcqa7w3o..css","style"]
|
|
12
|
+
:HL["/dashboard/_next/static/media/83afe278b6a6bb3c-s.p.0q-301v4kxxnr.woff2","font",{"crossOrigin":"","type":"font/woff2"}]
|
|
13
|
+
0:{"P":null,"c":["",""],"q":"","i":false,"f":[[["",{"children":["__PAGE__",{}]},"$undefined","$undefined",16],[["$","$1","c",{"children":[[["$","link","0",{"rel":"stylesheet","href":"/dashboard/_next/static/chunks/0ynuwcqa7w3o..css","precedence":"next","crossOrigin":"$undefined","nonce":"$undefined"}],["$","script","script-0",{"src":"/dashboard/_next/static/chunks/0kx3u3u77v4~r.js","async":true,"nonce":"$undefined"}]],["$","html",null,{"lang":"en","suppressHydrationWarning":true,"children":["$","body",null,{"className":"inter_b2991b2-module__9mH_6q__variable font-sans antialiased","children":["$","$L2",null,{"parallelRouterKey":"children","error":"$undefined","errorStyles":"$undefined","errorScripts":"$undefined","template":["$","$L3",null,{}],"templateStyles":"$undefined","templateScripts":"$undefined","notFound":[[["$","title",null,{"children":"404: This page could not be found."}],["$","div",null,{"style":{"fontFamily":"system-ui,\"Segoe UI\",Roboto,Helvetica,Arial,sans-serif,\"Apple Color Emoji\",\"Segoe UI Emoji\"","height":"100vh","textAlign":"center","display":"flex","flexDirection":"column","alignItems":"center","justifyContent":"center"},"children":["$","div",null,{"children":[["$","style",null,{"dangerouslySetInnerHTML":{"__html":"body{color:#000;background:#fff;margin:0}.next-error-h1{border-right:1px solid rgba(0,0,0,.3)}@media (prefers-color-scheme:dark){body{color:#fff;background:#000}.next-error-h1{border-right:1px solid rgba(255,255,255,.3)}}"}}],["$","h1",null,{"className":"next-error-h1","style":{"display":"inline-block","margin":"0 20px 0 0","padding":"0 23px 0 0","fontSize":24,"fontWeight":500,"verticalAlign":"top","lineHeight":"49px"},"children":404}],["$","div",null,{"style":{"display":"inline-block"},"children":["$","h2",null,{"style":{"fontSize":14,"fontWeight":400,"lineHeight":"49px","margin":0},"children":"This page could not be found."}]}]]}]}]],[]],"forbidden":"$undefined","unauthorized":"$undefined"}]}]}]]}],{"children":[["$","$1","c",{"children":[["$","$L4",null,{"Component":"$5","serverProvidedParams":{"searchParams":{},"params":{},"promises":["$@6","$@7"]}}],[["$","script","script-0",{"src":"/dashboard/_next/static/chunks/00zgfz5vuzgew.js","async":true,"nonce":"$undefined"}]],["$","$L8",null,{"children":["$","$9",null,{"name":"Next.MetadataOutlet","children":"$@a"}]}]]}],{},null,false,null]},null,false,null],["$","$1","h",{"children":[null,["$","$Lb",null,{"children":"$Lc"}],["$","div",null,{"hidden":true,"children":["$","$Ld",null,{"children":["$","$9",null,{"name":"Next.Metadata","children":"$Le"}]}]}],["$","meta",null,{"name":"next-size-adjust","content":""}]]}],false]],"m":"$undefined","G":["$f",[["$","link","0",{"rel":"stylesheet","href":"/dashboard/_next/static/chunks/0ynuwcqa7w3o..css","precedence":"next","crossOrigin":"$undefined","nonce":"$undefined"}]]],"S":true,"h":null,"s":"$undefined","l":"$undefined","p":"$undefined","d":"$undefined","b":"bGS-8HTT5ueoB7g98l4SY"}
|
|
14
|
+
6:{}
|
|
15
|
+
7:"$0:f:0:1:1:children:0:props:children:0:props:serverProvidedParams:params"
|
|
16
|
+
c:[["$","meta","0",{"charSet":"utf-8"}],["$","meta","1",{"name":"viewport","content":"width=device-width, initial-scale=1"}]]
|
|
17
|
+
10:I[27201,["/dashboard/_next/static/chunks/0kx3u3u77v4~r.js"],"IconMark"]
|
|
18
|
+
a:null
|
|
19
|
+
e:[["$","title","0",{"children":"CamelAGI Dashboard"}],["$","meta","1",{"name":"description","content":"Control panel for CamelAGI"}],["$","link","2",{"rel":"icon","href":"/dashboard/favicon.ico?favicon.0x3dzn~oxb6tn.ico","sizes":"256x256","type":"image/x-icon"}],["$","$L10","3",{}]]
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
1:"$Sreact.fragment"
|
|
2
|
+
2:I[97367,["/dashboard/_next/static/chunks/0kx3u3u77v4~r.js"],"ViewportBoundary"]
|
|
3
|
+
3:I[97367,["/dashboard/_next/static/chunks/0kx3u3u77v4~r.js"],"MetadataBoundary"]
|
|
4
|
+
4:"$Sreact.suspense"
|
|
5
|
+
5:I[27201,["/dashboard/_next/static/chunks/0kx3u3u77v4~r.js"],"IconMark"]
|
|
6
|
+
0:{"rsc":["$","$1","h",{"children":[null,["$","$L2",null,{"children":[["$","meta","0",{"charSet":"utf-8"}],["$","meta","1",{"name":"viewport","content":"width=device-width, initial-scale=1"}]]}],["$","div",null,{"hidden":true,"children":["$","$L3",null,{"children":["$","$4",null,{"name":"Next.Metadata","children":[["$","title","0",{"children":"CamelAGI Dashboard"}],["$","meta","1",{"name":"description","content":"Control panel for CamelAGI"}],["$","link","2",{"rel":"icon","href":"/dashboard/favicon.ico?favicon.0x3dzn~oxb6tn.ico","sizes":"256x256","type":"image/x-icon"}],["$","$L5","3",{}]]}]}]}],["$","meta",null,{"name":"next-size-adjust","content":""}]]}],"isPartial":false,"staleTime":300,"varyParams":null,"buildId":"bGS-8HTT5ueoB7g98l4SY"}
|
|
@@ -0,0 +1,5 @@
|
|
|
1
|
+
1:"$Sreact.fragment"
|
|
2
|
+
2:I[39756,["/dashboard/_next/static/chunks/0kx3u3u77v4~r.js"],"default"]
|
|
3
|
+
3:I[37457,["/dashboard/_next/static/chunks/0kx3u3u77v4~r.js"],"default"]
|
|
4
|
+
:HL["/dashboard/_next/static/chunks/0ynuwcqa7w3o..css","style"]
|
|
5
|
+
0:{"rsc":["$","$1","c",{"children":[[["$","link","0",{"rel":"stylesheet","href":"/dashboard/_next/static/chunks/0ynuwcqa7w3o..css","precedence":"next"}],["$","script","script-0",{"src":"/dashboard/_next/static/chunks/0kx3u3u77v4~r.js","async":true}]],["$","html",null,{"lang":"en","suppressHydrationWarning":true,"children":["$","body",null,{"className":"inter_b2991b2-module__9mH_6q__variable font-sans antialiased","children":["$","$L2",null,{"parallelRouterKey":"children","template":["$","$L3",null,{}],"notFound":[[["$","title",null,{"children":"404: This page could not be found."}],["$","div",null,{"style":{"fontFamily":"system-ui,\"Segoe UI\",Roboto,Helvetica,Arial,sans-serif,\"Apple Color Emoji\",\"Segoe UI Emoji\"","height":"100vh","textAlign":"center","display":"flex","flexDirection":"column","alignItems":"center","justifyContent":"center"},"children":["$","div",null,{"children":[["$","style",null,{"dangerouslySetInnerHTML":{"__html":"body{color:#000;background:#fff;margin:0}.next-error-h1{border-right:1px solid rgba(0,0,0,.3)}@media (prefers-color-scheme:dark){body{color:#fff;background:#000}.next-error-h1{border-right:1px solid rgba(255,255,255,.3)}}"}}],["$","h1",null,{"className":"next-error-h1","style":{"display":"inline-block","margin":"0 20px 0 0","padding":"0 23px 0 0","fontSize":24,"fontWeight":500,"verticalAlign":"top","lineHeight":"49px"},"children":404}],["$","div",null,{"style":{"display":"inline-block"},"children":["$","h2",null,{"style":{"fontSize":14,"fontWeight":400,"lineHeight":"49px","margin":0},"children":"This page could not be found."}]}]]}]}]],[]]}]}]}]]}],"isPartial":false,"staleTime":300,"varyParams":null,"buildId":"bGS-8HTT5ueoB7g98l4SY"}
|
|
@@ -0,0 +1,3 @@
|
|
|
1
|
+
:HL["/dashboard/_next/static/chunks/0ynuwcqa7w3o..css","style"]
|
|
2
|
+
:HL["/dashboard/_next/static/media/83afe278b6a6bb3c-s.p.0q-301v4kxxnr.woff2","font",{"crossOrigin":"","type":"font/woff2"}]
|
|
3
|
+
0:{"tree":{"name":"","param":null,"prefetchHints":16,"slots":{"children":{"name":"__PAGE__","param":null,"prefetchHints":0,"slots":null}}},"staleTime":300,"buildId":"bGS-8HTT5ueoB7g98l4SY"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
self.__MIDDLEWARE_MATCHERS = [];self.__MIDDLEWARE_MATCHERS_CB && self.__MIDDLEWARE_MATCHERS_CB()
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
self.__SSG_MANIFEST=new Set([]);self.__SSG_MANIFEST_CB&&self.__SSG_MANIFEST_CB()
|