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.
Files changed (182) hide show
  1. package/README.md +159 -27
  2. package/dashboard/404.html +1 -0
  3. package/dashboard/__next.__PAGE__.txt +9 -0
  4. package/dashboard/__next._full.txt +19 -0
  5. package/dashboard/__next._head.txt +6 -0
  6. package/dashboard/__next._index.txt +5 -0
  7. package/dashboard/__next._tree.txt +3 -0
  8. package/dashboard/_next/_next/static/T-oVqD_b6KFHCZwRKsnRE/_buildManifest.js +11 -0
  9. package/dashboard/_next/_next/static/T-oVqD_b6KFHCZwRKsnRE/_clientMiddlewareManifest.js +1 -0
  10. package/dashboard/_next/_next/static/T-oVqD_b6KFHCZwRKsnRE/_ssgManifest.js +1 -0
  11. package/dashboard/_next/_next/static/chunks/0.9wqq91a2h.e.js +3 -0
  12. package/dashboard/_next/_next/static/chunks/00-nlsz4ud071.js +11 -0
  13. package/dashboard/_next/_next/static/chunks/00noe7du3vxk9.js +1 -0
  14. package/dashboard/_next/_next/static/chunks/03~yq9q893hmn.js +1 -0
  15. package/dashboard/_next/_next/static/chunks/04wr2uisy8870.js +5 -0
  16. package/dashboard/_next/_next/static/chunks/05f.w0h0j~.3g.js +1 -0
  17. package/dashboard/_next/_next/static/chunks/0geaa8~wrpcj6.js +1 -0
  18. package/dashboard/_next/_next/static/chunks/0nrlwe_~wde44.js +1 -0
  19. package/dashboard/_next/_next/static/chunks/12l48lp-434~..js +31 -0
  20. package/dashboard/_next/_next/static/chunks/14qcm-bqojrb9.js +1 -0
  21. package/dashboard/_next/_next/static/chunks/15~vsexhgsteo.js +1 -0
  22. package/dashboard/_next/_next/static/chunks/turbopack-173kubfog5kol.js +1 -0
  23. package/dashboard/_next/static/8Qf-y5Z4kUHAaWZgy3BFF/_buildManifest.js +11 -0
  24. package/dashboard/_next/static/8Qf-y5Z4kUHAaWZgy3BFF/_clientMiddlewareManifest.js +1 -0
  25. package/dashboard/_next/static/8Qf-y5Z4kUHAaWZgy3BFF/_ssgManifest.js +1 -0
  26. package/dashboard/_next/static/IQ8CU45QQ3REnyUqiqjou/_buildManifest.js +11 -0
  27. package/dashboard/_next/static/IQ8CU45QQ3REnyUqiqjou/_clientMiddlewareManifest.js +1 -0
  28. package/dashboard/_next/static/IQ8CU45QQ3REnyUqiqjou/_ssgManifest.js +1 -0
  29. package/dashboard/_next/static/PXgzS7j3kuwIb14Ph3vgL/_buildManifest.js +11 -0
  30. package/dashboard/_next/static/PXgzS7j3kuwIb14Ph3vgL/_clientMiddlewareManifest.js +1 -0
  31. package/dashboard/_next/static/PXgzS7j3kuwIb14Ph3vgL/_ssgManifest.js +1 -0
  32. package/dashboard/_next/static/S6BdJ1Ro25a6twuts7gHi/_buildManifest.js +11 -0
  33. package/dashboard/_next/static/S6BdJ1Ro25a6twuts7gHi/_clientMiddlewareManifest.js +1 -0
  34. package/dashboard/_next/static/S6BdJ1Ro25a6twuts7gHi/_ssgManifest.js +1 -0
  35. package/dashboard/_next/static/T-oVqD_b6KFHCZwRKsnRE/_buildManifest.js +11 -0
  36. package/dashboard/_next/static/T-oVqD_b6KFHCZwRKsnRE/_clientMiddlewareManifest.js +1 -0
  37. package/dashboard/_next/static/T-oVqD_b6KFHCZwRKsnRE/_ssgManifest.js +1 -0
  38. package/dashboard/_next/static/bvUynE5XeBkbLQynmgHa8/_buildManifest.js +11 -0
  39. package/dashboard/_next/static/bvUynE5XeBkbLQynmgHa8/_clientMiddlewareManifest.js +1 -0
  40. package/dashboard/_next/static/bvUynE5XeBkbLQynmgHa8/_ssgManifest.js +1 -0
  41. package/dashboard/_next/static/chunks/0.9wqq91a2h.e.js +3 -0
  42. package/dashboard/_next/static/chunks/00-nlsz4ud071.js +11 -0
  43. package/dashboard/_next/static/chunks/00noe7du3vxk9.js +1 -0
  44. package/dashboard/_next/static/chunks/03~yq9q893hmn.js +1 -0
  45. package/dashboard/_next/static/chunks/04wr2uisy8870.js +5 -0
  46. package/dashboard/_next/static/chunks/05f.w0h0j~.3g.js +1 -0
  47. package/dashboard/_next/static/chunks/08ug0khjvhl6m.js +11 -0
  48. package/dashboard/_next/static/chunks/0d1s5w1cd08~7.js +11 -0
  49. package/dashboard/_next/static/chunks/0geaa8~wrpcj6.js +1 -0
  50. package/dashboard/_next/static/chunks/0lyajo4_yki3f.js +11 -0
  51. package/dashboard/_next/static/chunks/0nrlwe_~wde44.js +1 -0
  52. package/dashboard/_next/static/chunks/0pd15v2_1spxb.js +11 -0
  53. package/dashboard/_next/static/chunks/0vnhcfh7g1u6i.js +11 -0
  54. package/dashboard/_next/static/chunks/0ynuwcqa7w3o..css +2 -0
  55. package/dashboard/_next/static/chunks/11dfqgfbc8fk2.js +11 -0
  56. package/dashboard/_next/static/chunks/12l48lp-434~..js +31 -0
  57. package/dashboard/_next/static/chunks/14qcm-bqojrb9.js +1 -0
  58. package/dashboard/_next/static/chunks/15~vsexhgsteo.js +1 -0
  59. package/dashboard/_next/static/chunks/turbopack-173kubfog5kol.js +1 -0
  60. package/dashboard/_next/static/media/1bffadaabf893a1e-s.16ipb6fqu393i.woff2 +0 -0
  61. package/dashboard/_next/static/media/2bbe8d2671613f1f-s.067x_6k0k23tk.woff2 +0 -0
  62. package/dashboard/_next/static/media/2c55a0e60120577a-s.0bjc5tiuqdqro.woff2 +0 -0
  63. package/dashboard/_next/static/media/5476f68d60460930-s.0wxq9webf.ew4.woff2 +0 -0
  64. package/dashboard/_next/static/media/83afe278b6a6bb3c-s.p.0q-301v4kxxnr.woff2 +0 -0
  65. package/dashboard/_next/static/media/9c72aa0f40e4eef8-s.0m6w47a4e5dy9.woff2 +0 -0
  66. package/dashboard/_next/static/media/ad66f9afd8947f86-s.11u06r12fd6v_.woff2 +0 -0
  67. package/dashboard/_next/static/media/favicon.0x3dzn~oxb6tn.ico +0 -0
  68. package/dashboard/_next/static/uQ6ZB7JlP8tE93mlzKtXM/_buildManifest.js +11 -0
  69. package/dashboard/_next/static/uQ6ZB7JlP8tE93mlzKtXM/_clientMiddlewareManifest.js +1 -0
  70. package/dashboard/_next/static/uQ6ZB7JlP8tE93mlzKtXM/_ssgManifest.js +1 -0
  71. package/dashboard/_not-found/__next._full.txt +16 -0
  72. package/dashboard/_not-found/__next._head.txt +6 -0
  73. package/dashboard/_not-found/__next._index.txt +5 -0
  74. package/dashboard/_not-found/__next._not-found.__PAGE__.txt +5 -0
  75. package/dashboard/_not-found/__next._not-found.txt +5 -0
  76. package/dashboard/_not-found/__next._tree.txt +2 -0
  77. package/dashboard/_not-found.html +1 -0
  78. package/dashboard/_not-found.txt +16 -0
  79. package/dashboard/favicon.ico +0 -0
  80. package/dashboard/file.svg +1 -0
  81. package/dashboard/globe.svg +1 -0
  82. package/dashboard/index.html +1 -0
  83. package/dashboard/index.txt +19 -0
  84. package/dashboard/next.svg +1 -0
  85. package/dashboard/vercel.svg +1 -0
  86. package/dashboard/window.svg +1 -0
  87. package/dist/agent/agent-cursor.js +138 -0
  88. package/dist/agent/agent-cursor.js.map +1 -0
  89. package/dist/agent/agent-sdk.js +71 -57
  90. package/dist/agent/agent-sdk.js.map +1 -1
  91. package/dist/agent/types.js +1 -1
  92. package/dist/agent/types.js.map +1 -1
  93. package/dist/agent.js +11 -7
  94. package/dist/agent.js.map +1 -1
  95. package/dist/bootstrap.js +1 -1
  96. package/dist/bootstrap.js.map +1 -1
  97. package/dist/cli/cmd-config.js +1 -1
  98. package/dist/cli/cmd-config.js.map +1 -1
  99. package/dist/cli/cmd-dashboard.js +63 -0
  100. package/dist/cli/cmd-dashboard.js.map +1 -0
  101. package/dist/cli/cmd-pairing.js +1 -1
  102. package/dist/cli/cmd-pairing.js.map +1 -1
  103. package/dist/cli/cmd-projects.js +128 -0
  104. package/dist/cli/cmd-projects.js.map +1 -0
  105. package/dist/cli/cmd-team.js +587 -0
  106. package/dist/cli/cmd-team.js.map +1 -0
  107. package/dist/cli.js +2 -1
  108. package/dist/cli.js.map +1 -1
  109. package/dist/core/config.js +33 -48
  110. package/dist/core/config.js.map +1 -1
  111. package/dist/core/constants.js +2 -0
  112. package/dist/core/constants.js.map +1 -1
  113. package/dist/core/version.js +1 -1
  114. package/dist/extensions/bot-approval.js.map +1 -0
  115. package/dist/extensions/pairing.js.map +1 -0
  116. package/dist/extensions/team-coordinator.js +63 -0
  117. package/dist/extensions/team-coordinator.js.map +1 -0
  118. package/dist/gateway/csrf.js +1 -1
  119. package/dist/gateway/csrf.js.map +1 -1
  120. package/dist/gateway/routes.js +198 -95
  121. package/dist/gateway/routes.js.map +1 -1
  122. package/dist/gateway/ws-handler.js +200 -168
  123. package/dist/gateway/ws-handler.js.map +1 -1
  124. package/dist/gateway-entry.js +8 -2
  125. package/dist/gateway-entry.js.map +1 -1
  126. package/dist/model.js +5 -4
  127. package/dist/model.js.map +1 -1
  128. package/dist/runtime/orchestrate.js +19 -8
  129. package/dist/runtime/orchestrate.js.map +1 -1
  130. package/dist/serve.js +18 -3
  131. package/dist/serve.js.map +1 -1
  132. package/dist/session.js +14 -2
  133. package/dist/session.js.map +1 -1
  134. package/dist/setup.js +17 -2
  135. package/dist/setup.js.map +1 -1
  136. package/dist/team.js +203 -0
  137. package/dist/team.js.map +1 -0
  138. package/dist/telegram/admin-agents.js +498 -0
  139. package/dist/telegram/admin-agents.js.map +1 -0
  140. package/dist/telegram/admin-bot.js +13 -934
  141. package/dist/telegram/admin-bot.js.map +1 -1
  142. package/dist/telegram/admin-commands.js +403 -0
  143. package/dist/telegram/admin-commands.js.map +1 -0
  144. package/dist/telegram/agent-bot.js +45 -1338
  145. package/dist/telegram/agent-bot.js.map +1 -1
  146. package/dist/telegram/agent-claude-code.js +555 -0
  147. package/dist/telegram/agent-claude-code.js.map +1 -0
  148. package/dist/telegram/agent-commands.js +396 -0
  149. package/dist/telegram/agent-commands.js.map +1 -0
  150. package/dist/telegram/agent-context.js +136 -0
  151. package/dist/telegram/agent-context.js.map +1 -0
  152. package/dist/telegram/agent-messages.js +249 -0
  153. package/dist/telegram/agent-messages.js.map +1 -0
  154. package/dist/telegram/dir-browser.js +9 -0
  155. package/dist/telegram/dir-browser.js.map +1 -1
  156. package/dist/telegram/draft-stream.js +4 -2
  157. package/dist/telegram/draft-stream.js.map +1 -1
  158. package/dist/telegram/resolve.js +15 -28
  159. package/dist/telegram/resolve.js.map +1 -1
  160. package/dist/telegram/terminal.js +139 -32
  161. package/dist/telegram/terminal.js.map +1 -1
  162. package/dist/telegram/wizards.js +1 -1
  163. package/dist/telegram/wizards.js.map +1 -1
  164. package/dist/telegram.js +4 -3
  165. package/dist/telegram.js.map +1 -1
  166. package/dist/tools/admin.js +841 -0
  167. package/dist/tools/admin.js.map +1 -0
  168. package/dist/tools/team.js +182 -0
  169. package/dist/tools/team.js.map +1 -0
  170. package/dist/tui/commands.js +15 -0
  171. package/dist/tui/commands.js.map +1 -1
  172. package/dist/tui/components/welcome.js +2 -1
  173. package/dist/tui/components/welcome.js.map +1 -1
  174. package/dist/tui/tui.js +13 -1
  175. package/dist/tui/tui.js.map +1 -1
  176. package/package.json +4 -1
  177. package/dist/cli/cmd-install.js +0 -80
  178. package/dist/cli/cmd-install.js.map +0 -1
  179. package/dist/telegram/bot-approval.js.map +0 -1
  180. package/dist/telegram/pairing.js.map +0 -1
  181. /package/dist/{telegram → extensions}/bot-approval.js +0 -0
  182. /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>Self-hosted AI agents controlled from Telegram.</strong><br>
9
- Run Claude Code, create agents, manage tools, and control everything from your phone.
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="120" />
22
+ <img src="assets/Claude_Logo.png" alt="Claude Logo" width="100" />
23
+ &nbsp;&nbsp;&nbsp;&nbsp;
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
- Powered by Claude Agent SDK — the same runtime behind Claude Code.
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
- - Built on Claude Agent SDK
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
- npm i -g @anthropic-ai/claude-code
90
- claude login
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
- Then:
150
+ **WebSocket:**
151
+ ```json
152
+ {"type": "chat", "message": "hello", "sdk": "cursor"}
153
+ ```
94
154
 
95
- 1. Open admin bot
96
- 2. Send `/newagent`
97
- 3. Select Claude Code mode
98
- 4. Paste bot token
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
- Queue
214
- Context load
215
- Agent execution
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,&quot;Segoe UI&quot;,Roboto,Helvetica,Arial,sans-serif,&quot;Apple Color Emoji&quot;,&quot;Segoe UI Emoji&quot;;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,11 @@
1
+ self.__BUILD_MANIFEST = {
2
+ "__rewrites": {
3
+ "afterFiles": [],
4
+ "beforeFiles": [],
5
+ "fallback": []
6
+ },
7
+ "sortedPages": [
8
+ "/_app",
9
+ "/_error"
10
+ ]
11
+ };self.__BUILD_MANIFEST_CB && self.__BUILD_MANIFEST_CB()
@@ -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()