camelagi 0.5.16 → 0.5.19

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 (45) hide show
  1. package/README.md +9 -20
  2. package/dist/cli/cmd-agents.js +197 -12
  3. package/dist/cli/cmd-agents.js.map +1 -1
  4. package/dist/cli/cmd-connect.js +89 -0
  5. package/dist/cli/cmd-connect.js.map +1 -0
  6. package/dist/cli/cmd-reset.js +1 -1
  7. package/dist/cli/cmd-reset.js.map +1 -1
  8. package/dist/cli/cmd-serve.js +20 -4
  9. package/dist/cli/cmd-serve.js.map +1 -1
  10. package/dist/cli/cmd-uninstall.js +3 -3
  11. package/dist/cli/cmd-uninstall.js.map +1 -1
  12. package/dist/cli/cmd-update.js +14 -5
  13. package/dist/cli/cmd-update.js.map +1 -1
  14. package/dist/cli.js +61 -28
  15. package/dist/cli.js.map +1 -1
  16. package/dist/core/config.js +8 -2
  17. package/dist/core/config.js.map +1 -1
  18. package/dist/core/update-check.js +4 -5
  19. package/dist/core/update-check.js.map +1 -1
  20. package/dist/core/version.js +1 -1
  21. package/dist/doctor.js +2 -2
  22. package/dist/doctor.js.map +1 -1
  23. package/dist/extensions/cron.js +6 -2
  24. package/dist/extensions/cron.js.map +1 -1
  25. package/dist/extensions/heartbeat.js +74 -0
  26. package/dist/extensions/heartbeat.js.map +1 -0
  27. package/dist/gateway/csrf.js +10 -1
  28. package/dist/gateway/csrf.js.map +1 -1
  29. package/dist/gateway/routes.js +7 -1
  30. package/dist/gateway/routes.js.map +1 -1
  31. package/dist/gateway/state.js.map +1 -1
  32. package/dist/gateway-entry.js +1 -1
  33. package/dist/infra/tailscale.js +174 -0
  34. package/dist/infra/tailscale.js.map +1 -0
  35. package/dist/runtime/orchestrate.js +5 -1
  36. package/dist/runtime/orchestrate.js.map +1 -1
  37. package/dist/serve.js +49 -1
  38. package/dist/serve.js.map +1 -1
  39. package/dist/system-prompt.js +25 -21
  40. package/dist/system-prompt.js.map +1 -1
  41. package/dist/telegram/wizards.js +20 -19
  42. package/dist/telegram/wizards.js.map +1 -1
  43. package/dist/workspace.js +142 -0
  44. package/dist/workspace.js.map +1 -1
  45. package/package.json +2 -1
package/README.md CHANGED
@@ -42,26 +42,25 @@ Powered by <a href="https://platform.claude.com/docs/en/agent-sdk/overview">Clau
42
42
  - [Configuration](#configuration)
43
43
  - [Architecture](#architecture)
44
44
  - [Documentation](#documentation)
45
- - [Roadmap](#roadmap)
46
45
  - [License](#license)
47
46
 
48
47
  <br>
49
48
 
50
49
  ## Quick Start
51
50
 
52
- **Install** (no Node.js required)
53
- ```bash
54
- curl -fsSL https://raw.githubusercontent.com/inawafalm/CamelAGI/main/install.sh | bash
55
- ```
51
+ > **Requirements:** Node.js 23+
52
+
53
+ | Install | Setup & Run | Update |
54
+ |:--------|:------------|:-------|
55
+ | `npm i -g camelagi` | `camel setup` | `camel update` |
56
56
 
57
- **Setup & Run**
58
57
  ```bash
59
- camel bootstrap # Full setup: admin bot + pairing + API config
60
- camel serve # Start the gateway server
61
- camel chat # Terminal UI
58
+ camel setup # First-time setup: API key, Telegram bot, provider
59
+ camel serve # Start the gateway server
60
+ camel chat # Terminal UI
62
61
  ```
63
62
 
64
- `bootstrap` walks you through everything: create a Telegram admin bot, pair your account with OTP, pick your AI provider and model. After that, use `/newagent` in Telegram to create your first AI agent.
63
+ After setup, use `/newagent` in Telegram to create your first AI agent.
65
64
 
66
65
  <br>
67
66
 
@@ -346,16 +345,6 @@ Feature docs cover: [agent system](featuresDocs/agent-system.md), [memory](featu
346
345
 
347
346
  <br>
348
347
 
349
- ## Roadmap
350
-
351
- | | Feature | Description |
352
- |---|---|---|
353
- | 📡 | **More Channels** | WhatsApp, Slack — connect your AI agents to every platform your team already uses |
354
- | 🧩 | **ClawHub Skills** | Browse and install community skills from [clawhub.io](https://clawhub.io) — one command to add new capabilities |
355
- | 🏢 | **Business Ready** | Deploy for your business — finance, operations, customer support. AI agents that understand your workflows |
356
-
357
- <br>
358
-
359
348
  ## License
360
349
 
361
350
  MIT
@@ -3,13 +3,13 @@ import { loadConfig, saveConfig, ensureDirs } from "../core/config.js";
3
3
  import { hasFlag } from "./parse.js";
4
4
  register({
5
5
  name: "agents",
6
- description: "List configured agents",
6
+ description: "Manage agents interactively",
7
7
  usage: `Usage: camelagi agents [subcommand]
8
8
 
9
- List or manage configured agents.
9
+ Manage configured agents. Run without arguments for interactive mode.
10
10
 
11
11
  Subcommands:
12
- (none) List all agents (default)
12
+ (none) Interactive agent manager (default)
13
13
  rm <id> Remove an agent (prompts for confirmation)
14
14
 
15
15
  Options:
@@ -17,12 +17,12 @@ Options:
17
17
 
18
18
  Examples:
19
19
  camelagi agents
20
- camelagi agents rm mybot
21
- camelagi agents rm mybot --yes`,
20
+ camelagi agents rm mybot`,
22
21
  run: async (args) => {
23
22
  const p = await import("@clack/prompts");
24
23
  ensureDirs();
25
24
  const config = loadConfig();
25
+ // Subcommand: rm
26
26
  if (args[0] === "rm" && args[1]) {
27
27
  const agents = { ...(config.agents ?? {}) };
28
28
  if (!agents[args[1]]) {
@@ -45,18 +45,203 @@ Examples:
45
45
  p.log.error(`Unknown subcommand: ${args[0]}. Use: camelagi agents [rm <id>]`);
46
46
  process.exit(1);
47
47
  }
48
+ // Interactive mode
48
49
  const agentEntries = Object.entries(config.agents ?? {});
49
50
  if (agentEntries.length === 0) {
50
- p.log.info("No agents configured. Use /newagent in Telegram or edit config.yaml.");
51
+ p.log.info("No agents configured.");
52
+ const add = await p.confirm({ message: "Create a new agent?" });
53
+ if (p.isCancel(add) || !add)
54
+ return;
55
+ await createAgent(p, config);
56
+ return;
51
57
  }
52
- else {
53
- for (const [id, a] of agentEntries) {
54
- const parts = [a.model ?? config.model];
58
+ const options = [
59
+ ...agentEntries.map(([id, a]) => {
60
+ const tags = [];
61
+ if (a.admin)
62
+ tags.push("admin");
55
63
  if (a.telegram?.botToken)
56
- parts.push("telegram");
57
- p.log.info(`${id} (${a.name}, ${parts.join(", ")})`);
58
- }
64
+ tags.push("telegram");
65
+ if (a.discord?.botToken)
66
+ tags.push("discord");
67
+ const model = a.model ?? config.model;
68
+ const hint = [model, ...tags].join(", ");
69
+ return { value: id, label: `${a.name}`, hint };
70
+ }),
71
+ { value: "__new__", label: "Create new agent", hint: "" },
72
+ ];
73
+ const selected = await p.select({
74
+ message: "Select an agent",
75
+ options,
76
+ });
77
+ if (p.isCancel(selected))
78
+ return;
79
+ if (selected === "__new__") {
80
+ await createAgent(p, config);
81
+ return;
59
82
  }
83
+ await configureAgent(p, config, selected);
60
84
  },
61
85
  });
86
+ async function configureAgent(p, config, agentId) {
87
+ const agent = config.agents[agentId];
88
+ if (!agent)
89
+ return;
90
+ const action = await p.select({
91
+ message: `${agent.name} (${agentId})`,
92
+ options: [
93
+ { value: "model", label: "Model", hint: agent.model ?? config.model },
94
+ { value: "name", label: "Name", hint: agent.name },
95
+ { value: "thinking", label: "Thinking", hint: String(agent.thinking ?? config.thinking) },
96
+ { value: "effort", label: "Effort", hint: String(agent.effort ?? config.effort) },
97
+ { value: "telegram", label: "Telegram", hint: agent.telegram?.botToken ? "configured" : "not set" },
98
+ { value: "remove", label: "Remove agent", hint: "" },
99
+ ],
100
+ });
101
+ if (p.isCancel(action))
102
+ return;
103
+ const agents = { ...config.agents };
104
+ switch (action) {
105
+ case "model": {
106
+ const model = await p.text({ message: "Model:", initialValue: agent.model ?? config.model });
107
+ if (p.isCancel(model))
108
+ return;
109
+ agents[agentId] = { ...agent, model: model };
110
+ saveConfig({ agents });
111
+ p.log.success(`Model set to: ${model}`);
112
+ break;
113
+ }
114
+ case "name": {
115
+ const name = await p.text({ message: "Name:", initialValue: agent.name });
116
+ if (p.isCancel(name))
117
+ return;
118
+ agents[agentId] = { ...agent, name: name };
119
+ saveConfig({ agents });
120
+ p.log.success(`Name set to: ${name}`);
121
+ break;
122
+ }
123
+ case "thinking": {
124
+ const thinking = await p.select({
125
+ message: "Thinking level:",
126
+ options: [
127
+ { value: "off", label: "Off" },
128
+ { value: "low", label: "Low" },
129
+ { value: "medium", label: "Medium" },
130
+ { value: "high", label: "High" },
131
+ ],
132
+ });
133
+ if (p.isCancel(thinking))
134
+ return;
135
+ agents[agentId] = { ...agent, thinking: thinking };
136
+ saveConfig({ agents });
137
+ p.log.success(`Thinking set to: ${thinking}`);
138
+ break;
139
+ }
140
+ case "effort": {
141
+ const effort = await p.select({
142
+ message: "Effort level:",
143
+ options: [
144
+ { value: "low", label: "Low" },
145
+ { value: "medium", label: "Medium" },
146
+ { value: "high", label: "High" },
147
+ { value: "max", label: "Max" },
148
+ ],
149
+ });
150
+ if (p.isCancel(effort))
151
+ return;
152
+ agents[agentId] = { ...agent, effort: effort };
153
+ saveConfig({ agents });
154
+ p.log.success(`Effort set to: ${effort}`);
155
+ break;
156
+ }
157
+ case "telegram": {
158
+ const token = await p.text({
159
+ message: "Telegram bot token (from @BotFather):",
160
+ initialValue: agent.telegram?.botToken ?? "",
161
+ });
162
+ if (p.isCancel(token))
163
+ return;
164
+ if (!token) {
165
+ const { telegram: _, ...rest } = agent;
166
+ agents[agentId] = rest;
167
+ saveConfig({ agents });
168
+ p.log.success("Telegram removed");
169
+ }
170
+ else {
171
+ // Verify the token
172
+ const sv = p.spinner();
173
+ sv.start("Verifying token...");
174
+ try {
175
+ const res = await fetch(`https://api.telegram.org/bot${token}/getMe`, { signal: AbortSignal.timeout(10000) });
176
+ const data = await res.json();
177
+ if (!data.ok) {
178
+ sv.stop("Invalid token");
179
+ p.log.error("Token rejected by Telegram. Check it in @BotFather.");
180
+ return;
181
+ }
182
+ const botName = data.result?.username ?? data.result?.first_name ?? "bot";
183
+ sv.stop(`Verified: @${botName}`);
184
+ agents[agentId] = {
185
+ ...agent,
186
+ telegram: {
187
+ botToken: token,
188
+ allowedUsers: agent.telegram?.allowedUsers ?? [],
189
+ briefMode: agent.telegram?.briefMode ?? true,
190
+ groups: agent.telegram?.groups ?? { mentionOnly: true },
191
+ },
192
+ };
193
+ saveConfig({ agents });
194
+ p.log.success(`Telegram configured (@${botName})`);
195
+ p.log.info("Restart the server to activate: camel serve");
196
+ }
197
+ catch (err) {
198
+ sv.stop("Failed");
199
+ p.log.error(`Could not verify token: ${err instanceof Error ? err.message : err}`);
200
+ }
201
+ }
202
+ break;
203
+ }
204
+ case "remove": {
205
+ const ok = await p.confirm({ message: `Remove "${agent.name}"?` });
206
+ if (p.isCancel(ok) || !ok)
207
+ return;
208
+ delete agents[agentId];
209
+ saveConfig({ agents });
210
+ p.log.success(`Removed: ${agentId}`);
211
+ break;
212
+ }
213
+ }
214
+ }
215
+ async function createAgent(p, config) {
216
+ const name = await p.text({ message: "Agent name:" });
217
+ if (p.isCancel(name) || !name)
218
+ return;
219
+ const id = name.toLowerCase().replace(/[^a-z0-9]+/g, "");
220
+ if (config.agents[id]) {
221
+ p.log.error(`Agent "${id}" already exists.`);
222
+ return;
223
+ }
224
+ const model = await p.text({ message: "Model:", initialValue: config.model });
225
+ if (p.isCancel(model))
226
+ return;
227
+ const wantTelegram = await p.confirm({ message: "Add Telegram bot?" });
228
+ let telegramConfig;
229
+ if (!p.isCancel(wantTelegram) && wantTelegram) {
230
+ const token = await p.text({ message: "Bot token (from @BotFather):" });
231
+ if (p.isCancel(token) || !token)
232
+ return;
233
+ telegramConfig = { botToken: token, allowedUsers: [], briefMode: true, groups: { mentionOnly: true } };
234
+ }
235
+ const { seedAgentWorkspace } = await import("../workspace.js");
236
+ seedAgentWorkspace(id, name);
237
+ const agents = { ...config.agents };
238
+ agents[id] = {
239
+ name: name,
240
+ ...(model !== config.model ? { model: model } : {}),
241
+ ...(telegramConfig ? { telegram: telegramConfig } : {}),
242
+ };
243
+ saveConfig({ agents });
244
+ p.log.success(`Created agent: ${name} (${id})`);
245
+ p.log.info("Restart the server to activate.");
246
+ }
62
247
  //# sourceMappingURL=cmd-agents.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"cmd-agents.js","sourceRoot":"","sources":["../../src/cli/cmd-agents.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"cmd-agents.js","sourceRoot":"","sources":["../../src/cli/cmd-agents.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,89 @@
1
+ // camel connect — connect TUI to a remote CamelAGI gateway
2
+ import { register } from "./registry.js";
3
+ import { getFlag } from "./parse.js";
4
+ register({
5
+ name: "connect",
6
+ description: "Connect to a remote gateway",
7
+ usage: `Usage: camelagi connect <url> [options]
8
+
9
+ Connect the TUI to a remote CamelAGI gateway.
10
+
11
+ Arguments:
12
+ <url> Gateway URL (e.g. ws://192.168.1.10:18305, wss://my-mac.ts.net)
13
+
14
+ Options:
15
+ --token <token> Auth token (or set CAMELAGI_TOKEN env var)
16
+ --session <id> Resume a specific session
17
+
18
+ Remote access options:
19
+ 1. Tailscale Serve — private tailnet HTTPS (recommended)
20
+ camelagi connect wss://my-mac.tailnet.ts.net
21
+
22
+ 2. Direct with token — LAN only
23
+ camelagi connect ws://192.168.1.10:18305 --token <token>
24
+
25
+ 3. SSH tunnel — forward port, then connect as localhost
26
+ ssh -N -L 18305:127.0.0.1:18305 user@server
27
+ camelagi chat
28
+
29
+ Examples:
30
+ camelagi connect ws://192.168.1.10:18305 --token my-secret
31
+ camelagi connect wss://my-mac.tailnet.ts.net
32
+ camelagi connect 192.168.1.10:18305 --token my-secret`,
33
+ run: async (args) => {
34
+ const rawUrl = args.find((a) => !a.startsWith("--"));
35
+ if (!rawUrl) {
36
+ console.error("Error: URL is required.\n");
37
+ console.error("Usage: camelagi connect <url> [--token <token>] [--session <id>]");
38
+ process.exit(1);
39
+ }
40
+ // Normalize URL to ws:// or wss://
41
+ let wsUrl;
42
+ if (rawUrl.startsWith("ws://") || rawUrl.startsWith("wss://")) {
43
+ wsUrl = rawUrl;
44
+ }
45
+ else if (rawUrl.startsWith("http://")) {
46
+ wsUrl = rawUrl.replace("http://", "ws://");
47
+ }
48
+ else if (rawUrl.startsWith("https://")) {
49
+ wsUrl = rawUrl.replace("https://", "wss://");
50
+ }
51
+ else {
52
+ wsUrl = `ws://${rawUrl}`;
53
+ }
54
+ const token = getFlag(args, "--token") ?? process.env.CAMELAGI_TOKEN;
55
+ const sessionId = getFlag(args, "--session");
56
+ // Build HTTP URL for health check
57
+ const httpUrl = wsUrl
58
+ .replace(/^ws:\/\//, "http://")
59
+ .replace(/^wss:\/\//, "https://");
60
+ // Health check — verify gateway is reachable
61
+ try {
62
+ const headers = {};
63
+ if (token)
64
+ headers["Authorization"] = `Bearer ${token}`;
65
+ const res = await fetch(`${httpUrl}/health`, {
66
+ headers,
67
+ signal: AbortSignal.timeout(5000),
68
+ });
69
+ if (!res.ok) {
70
+ console.error(`Error: Gateway returned ${res.status}. Check URL and token.`);
71
+ process.exit(1);
72
+ }
73
+ console.log(` Connected to ${httpUrl}`);
74
+ }
75
+ catch (err) {
76
+ console.error(`Error: Cannot reach gateway at ${httpUrl}/health`);
77
+ console.error(` ${err instanceof Error ? err.message : String(err)}`);
78
+ process.exit(1);
79
+ }
80
+ // Append token as query param (gateway supports ?token=xxx for WebSocket auth)
81
+ if (token) {
82
+ const sep = wsUrl.includes("?") ? "&" : "?";
83
+ wsUrl = `${wsUrl}${sep}token=${encodeURIComponent(token)}`;
84
+ }
85
+ const { runTui } = await import("../tui/tui.js");
86
+ await runTui({ session: sessionId, wsUrl });
87
+ },
88
+ });
89
+ //# sourceMappingURL=cmd-connect.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"cmd-connect.js","sourceRoot":"","sources":["../../src/cli/cmd-connect.ts"],"names":[],"mappings":"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"}
@@ -31,7 +31,7 @@ Examples:
31
31
  }
32
32
  }
33
33
  fs.rmSync(configDir, { recursive: true, force: true });
34
- p.log.success("~/.camelagi deleted. Run \x1b[36mcamelagi bootstrap\x1b[0m to start fresh.");
34
+ p.log.success("~/.camelagi deleted. Run \x1b[36mcamel setup\x1b[0m to start fresh.");
35
35
  },
36
36
  });
37
37
  //# sourceMappingURL=cmd-reset.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"cmd-reset.js","sourceRoot":"","sources":["../../src/cli/cmd-reset.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,eAAe,CAAC;AACzC,OAAO,EAAE,KAAK,EAAE,MAAM,mBAAmB,CAAC;AAC1C,OAAO,EAAE,OAAO,EAAE,MAAM,YAAY,CAAC;AAErC,QAAQ,CAAC;IACP,IAAI,EAAE,OAAO;IACb,WAAW,EAAE,mDAAmD;IAChE,KAAK,EAAE;;;;;;;;;2BASkB;IACzB,GAAG,EAAE,KAAK,EAAE,IAAI,EAAE,EAAE;QAClB,MAAM,CAAC,GAAG,MAAM,MAAM,CAAC,gBAAgB,CAAC,CAAC;QACzC,MAAM,EAAE,GAAG,MAAM,MAAM,CAAC,SAAS,CAAC,CAAC;QAEnC,MAAM,SAAS,GAAG,KAAK,CAAC,SAAS,CAAC;QAElC,IAAI,CAAC,EAAE,CAAC,UAAU,CAAC,SAAS,CAAC,EAAE,CAAC;YAC9B,CAAC,CAAC,GAAG,CAAC,IAAI,CAAC,qDAAqD,CAAC,CAAC;YAClE,OAAO;QACT,CAAC;QAED,IAAI,CAAC,OAAO,CAAC,IAAI,EAAE,WAAW,CAAC,EAAE,CAAC;YAChC,CAAC,CAAC,GAAG,CAAC,IAAI,CAAC,gEAAgE,CAAC,CAAC;YAC7E,MAAM,EAAE,GAAG,MAAM,CAAC,CAAC,OAAO,CAAC,EAAE,OAAO,EAAE,eAAe,EAAE,CAAC,CAAC;YACzD,IAAI,CAAC,CAAC,QAAQ,CAAC,EAAE,CAAC,IAAI,CAAC,EAAE,EAAE,CAAC;gBAC1B,CAAC,CAAC,MAAM,CAAC,YAAY,CAAC,CAAC;gBACvB,OAAO;YACT,CAAC;QACH,CAAC;QAED,EAAE,CAAC,MAAM,CAAC,SAAS,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC,CAAC;QACvD,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,4EAA4E,CAAC,CAAC;IAC9F,CAAC;CACF,CAAC,CAAC"}
1
+ {"version":3,"file":"cmd-reset.js","sourceRoot":"","sources":["../../src/cli/cmd-reset.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,eAAe,CAAC;AACzC,OAAO,EAAE,KAAK,EAAE,MAAM,mBAAmB,CAAC;AAC1C,OAAO,EAAE,OAAO,EAAE,MAAM,YAAY,CAAC;AAErC,QAAQ,CAAC;IACP,IAAI,EAAE,OAAO;IACb,WAAW,EAAE,mDAAmD;IAChE,KAAK,EAAE;;;;;;;;;2BASkB;IACzB,GAAG,EAAE,KAAK,EAAE,IAAI,EAAE,EAAE;QAClB,MAAM,CAAC,GAAG,MAAM,MAAM,CAAC,gBAAgB,CAAC,CAAC;QACzC,MAAM,EAAE,GAAG,MAAM,MAAM,CAAC,SAAS,CAAC,CAAC;QAEnC,MAAM,SAAS,GAAG,KAAK,CAAC,SAAS,CAAC;QAElC,IAAI,CAAC,EAAE,CAAC,UAAU,CAAC,SAAS,CAAC,EAAE,CAAC;YAC9B,CAAC,CAAC,GAAG,CAAC,IAAI,CAAC,qDAAqD,CAAC,CAAC;YAClE,OAAO;QACT,CAAC;QAED,IAAI,CAAC,OAAO,CAAC,IAAI,EAAE,WAAW,CAAC,EAAE,CAAC;YAChC,CAAC,CAAC,GAAG,CAAC,IAAI,CAAC,gEAAgE,CAAC,CAAC;YAC7E,MAAM,EAAE,GAAG,MAAM,CAAC,CAAC,OAAO,CAAC,EAAE,OAAO,EAAE,eAAe,EAAE,CAAC,CAAC;YACzD,IAAI,CAAC,CAAC,QAAQ,CAAC,EAAE,CAAC,IAAI,CAAC,EAAE,EAAE,CAAC;gBAC1B,CAAC,CAAC,MAAM,CAAC,YAAY,CAAC,CAAC;gBACvB,OAAO;YACT,CAAC;QACH,CAAC;QAED,EAAE,CAAC,MAAM,CAAC,SAAS,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC,CAAC;QACvD,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,qEAAqE,CAAC,CAAC;IACvF,CAAC;CACF,CAAC,CAAC"}
@@ -1,5 +1,5 @@
1
1
  import { register } from "./registry.js";
2
- import { getFlagInt } from "./parse.js";
2
+ import { getFlag, getFlagInt } from "./parse.js";
3
3
  register({
4
4
  name: "serve",
5
5
  description: "Start gateway server",
@@ -8,12 +8,27 @@ register({
8
8
  Start the gateway server (Express + WebSocket).
9
9
 
10
10
  Options:
11
- --port <number> Port to listen on (1-65535, default: from config)
11
+ --port <number> Port to listen on (1-65535, default: from config)
12
+ --host <address> Host to bind to (default: from config, typically 127.0.0.1)
13
+ Use 0.0.0.0 for remote access
14
+ --generate-token Generate a random auth token, save to config, and exit
12
15
 
13
16
  Examples:
14
17
  camelagi serve
15
- camelagi serve --port 3000`,
18
+ camelagi serve --port 3000 --host 0.0.0.0
19
+ camelagi serve --generate-token`,
16
20
  run: async (args) => {
21
+ // --generate-token: create and save a random token, then exit
22
+ if (args.includes("--generate-token")) {
23
+ const { randomBytes } = await import("node:crypto");
24
+ const { saveConfig } = await import("../core/config.js");
25
+ const token = randomBytes(32).toString("hex");
26
+ saveConfig({ serve: { token } });
27
+ console.log(`\n Token generated and saved to config:\n`);
28
+ console.log(` \x1b[36m${token}\x1b[0m\n`);
29
+ console.log(` Set this on your client: CAMELAGI_TOKEN=${token}\n`);
30
+ process.exit(0);
31
+ }
17
32
  let port;
18
33
  try {
19
34
  port = getFlagInt(args, "--port", 1, 65535);
@@ -22,8 +37,9 @@ Examples:
22
37
  console.error(`Error: ${err instanceof Error ? err.message : String(err)}`);
23
38
  process.exit(1);
24
39
  }
40
+ const host = getFlag(args, "--host");
25
41
  const { startServer } = await import("../serve.js");
26
- await startServer({ port, cron: true, boot: true });
42
+ await startServer({ port, host, cron: true, boot: true });
27
43
  // startServer keeps the process alive
28
44
  },
29
45
  });
@@ -1 +1 @@
1
- {"version":3,"file":"cmd-serve.js","sourceRoot":"","sources":["../../src/cli/cmd-serve.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,eAAe,CAAC;AACzC,OAAO,EAAE,UAAU,EAAE,MAAM,YAAY,CAAC;AAExC,QAAQ,CAAC;IACP,IAAI,EAAE,OAAO;IACb,WAAW,EAAE,sBAAsB;IACnC,KAAK,EAAE;;;;;;;;;6BASoB;IAC3B,GAAG,EAAE,KAAK,EAAE,IAAI,EAAE,EAAE;QAClB,IAAI,IAAwB,CAAC;QAC7B,IAAI,CAAC;YACH,IAAI,GAAG,UAAU,CAAC,IAAI,EAAE,QAAQ,EAAE,CAAC,EAAE,KAAK,CAAC,CAAC;QAC9C,CAAC;QAAC,OAAO,GAAY,EAAE,CAAC;YACtB,OAAO,CAAC,KAAK,CAAC,UAAU,GAAG,YAAY,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;YAC5E,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QAClB,CAAC;QAED,MAAM,EAAE,WAAW,EAAE,GAAG,MAAM,MAAM,CAAC,aAAa,CAAC,CAAC;QACpD,MAAM,WAAW,CAAC,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC,CAAC;QACpD,sCAAsC;IACxC,CAAC;CACF,CAAC,CAAC"}
1
+ {"version":3,"file":"cmd-serve.js","sourceRoot":"","sources":["../../src/cli/cmd-serve.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,eAAe,CAAC;AACzC,OAAO,EAAE,OAAO,EAAE,UAAU,EAAE,MAAM,YAAY,CAAC;AAEjD,QAAQ,CAAC;IACP,IAAI,EAAE,OAAO;IACb,WAAW,EAAE,sBAAsB;IACnC,KAAK,EAAE;;;;;;;;;;;;;kCAayB;IAChC,GAAG,EAAE,KAAK,EAAE,IAAI,EAAE,EAAE;QAClB,8DAA8D;QAC9D,IAAI,IAAI,CAAC,QAAQ,CAAC,kBAAkB,CAAC,EAAE,CAAC;YACtC,MAAM,EAAE,WAAW,EAAE,GAAG,MAAM,MAAM,CAAC,aAAa,CAAC,CAAC;YACpD,MAAM,EAAE,UAAU,EAAE,GAAG,MAAM,MAAM,CAAC,mBAAmB,CAAC,CAAC;YACzD,MAAM,KAAK,GAAG,WAAW,CAAC,EAAE,CAAC,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC;YAC9C,UAAU,CAAC,EAAE,KAAK,EAAE,EAAE,KAAK,EAAE,EAAE,CAAC,CAAC;YACjC,OAAO,CAAC,GAAG,CAAC,4CAA4C,CAAC,CAAC;YAC1D,OAAO,CAAC,GAAG,CAAC,aAAa,KAAK,WAAW,CAAC,CAAC;YAC3C,OAAO,CAAC,GAAG,CAAC,6CAA6C,KAAK,IAAI,CAAC,CAAC;YACpE,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QAClB,CAAC;QAED,IAAI,IAAwB,CAAC;QAC7B,IAAI,CAAC;YACH,IAAI,GAAG,UAAU,CAAC,IAAI,EAAE,QAAQ,EAAE,CAAC,EAAE,KAAK,CAAC,CAAC;QAC9C,CAAC;QAAC,OAAO,GAAY,EAAE,CAAC;YACtB,OAAO,CAAC,KAAK,CAAC,UAAU,GAAG,YAAY,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;YAC5E,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QAClB,CAAC;QAED,MAAM,IAAI,GAAG,OAAO,CAAC,IAAI,EAAE,QAAQ,CAAC,CAAC;QAErC,MAAM,EAAE,WAAW,EAAE,GAAG,MAAM,MAAM,CAAC,aAAa,CAAC,CAAC;QACpD,MAAM,WAAW,CAAC,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC,CAAC;QAC1D,sCAAsC;IACxC,CAAC;CACF,CAAC,CAAC"}
@@ -66,11 +66,11 @@ Examples:
66
66
  // Unlink global CLI
67
67
  if (!keepCli) {
68
68
  try {
69
- execSync("npm unlink -g camelagi 2>/dev/null", { stdio: "ignore" });
70
- p.log.success("Global CLI unlinked");
69
+ execSync("npm uninstall -g camelagi 2>/dev/null", { stdio: "ignore" });
70
+ p.log.success("Global CLI removed");
71
71
  }
72
72
  catch {
73
- p.log.warn("Could not unlink global CLI \u2014 run: npm unlink -g camelagi");
73
+ p.log.warn("Could not remove global CLI \u2014 run: npm uninstall -g camelagi");
74
74
  }
75
75
  }
76
76
  p.outro("CamelAGI removed. Thanks for trying it out!");
@@ -1 +1 @@
1
- {"version":3,"file":"cmd-uninstall.js","sourceRoot":"","sources":["../../src/cli/cmd-uninstall.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"cmd-uninstall.js","sourceRoot":"","sources":["../../src/cli/cmd-uninstall.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,eAAe,CAAC;AACzC,OAAO,EAAE,KAAK,EAAE,MAAM,mBAAmB,CAAC;AAE1C,QAAQ,CAAC;IACP,IAAI,EAAE,WAAW;IACjB,WAAW,EAAE,uDAAuD;IACpE,KAAK,EAAE;;;;;;;;;;+BAUsB;IAC7B,GAAG,EAAE,KAAK,EAAE,IAAI,EAAE,EAAE;QAClB,MAAM,CAAC,GAAG,MAAM,MAAM,CAAC,gBAAgB,CAAC,CAAC;QACzC,MAAM,EAAE,GAAG,MAAM,MAAM,CAAC,SAAS,CAAC,CAAC;QACnC,MAAM,EAAE,QAAQ,EAAE,GAAG,MAAM,MAAM,CAAC,oBAAoB,CAAC,CAAC;QACxD,MAAM,EAAE,OAAO,EAAE,GAAG,MAAM,MAAM,CAAC,YAAY,CAAC,CAAC;QAE/C,MAAM,SAAS,GAAG,KAAK,CAAC,SAAS,CAAC;QAClC,MAAM,OAAO,GAAG,EAAE,CAAC,UAAU,CAAC,SAAS,CAAC,CAAC;QACzC,MAAM,OAAO,GAAG,OAAO,CAAC,IAAI,EAAE,YAAY,CAAC,CAAC;QAE5C,IAAI,CAAC,OAAO,EAAE,CAAC;YACb,CAAC,CAAC,KAAK,CAAC,mCAAmC,CAAC,CAAC;YAC7C,CAAC,CAAC,GAAG,CAAC,IAAI,CAAC,sDAAsD,CAAC,CAAC;YACnE,CAAC,CAAC,KAAK,CAAC,gBAAgB,CAAC,CAAC;YAC1B,OAAO;QACT,CAAC;QAED,CAAC,CAAC,KAAK,CAAC,mCAAmC,CAAC,CAAC;QAE7C,4BAA4B;QAC5B,MAAM,KAAK,GAAa,EAAE,CAAC;QAC3B,MAAM,KAAK,GAAG,CAAC,GAAW,EAAE,KAAa,EAAE,EAAE;YAC3C,MAAM,IAAI,GAAG,GAAG,SAAS,IAAI,GAAG,EAAE,CAAC;YACnC,IAAI,EAAE,CAAC,UAAU,CAAC,IAAI,CAAC;gBAAE,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;QAC7C,CAAC,CAAC;QACF,KAAK,CAAC,aAAa,EAAE,sBAAsB,CAAC,CAAC;QAC7C,KAAK,CAAC,UAAU,EAAE,UAAU,CAAC,CAAC;QAC9B,KAAK,CAAC,WAAW,EAAE,kBAAkB,CAAC,CAAC;QACvC,KAAK,CAAC,OAAO,EAAE,YAAY,CAAC,CAAC;QAC7B,KAAK,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;QACtB,KAAK,CAAC,MAAM,EAAE,YAAY,CAAC,CAAC;QAC5B,KAAK,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC;QACxB,KAAK,CAAC,QAAQ,EAAE,QAAQ,CAAC,CAAC;QAE1B,IAAI,KAAK,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YACrB,CAAC,CAAC,GAAG,CAAC,IAAI,CAAC,0BAA0B,CAAC,CAAC;YACvC,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE,CAAC;gBACzB,CAAC,CAAC,GAAG,CAAC,IAAI,CAAC,YAAY,IAAI,EAAE,CAAC,CAAC;YACjC,CAAC;QACH,CAAC;QACD,IAAI,CAAC,OAAO,EAAE,CAAC;YACb,CAAC,CAAC,GAAG,CAAC,IAAI,CAAC,kCAAkC,CAAC,CAAC;QACjD,CAAC;QAED,IAAI,CAAC,OAAO,CAAC,IAAI,EAAE,WAAW,CAAC,EAAE,CAAC;YAChC,MAAM,EAAE,GAAG,MAAM,CAAC,CAAC,OAAO,CAAC,EAAE,OAAO,EAAE,oBAAoB,EAAE,CAAC,CAAC;YAC9D,IAAI,CAAC,CAAC,QAAQ,CAAC,EAAE,CAAC,IAAI,CAAC,EAAE,EAAE,CAAC;gBAC1B,CAAC,CAAC,MAAM,CAAC,YAAY,CAAC,CAAC;gBACvB,OAAO;YACT,CAAC;QACH,CAAC;QAED,cAAc;QACd,EAAE,CAAC,MAAM,CAAC,SAAS,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC,CAAC;QACvD,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,qBAAqB,CAAC,CAAC;QAErC,oBAAoB;QACpB,IAAI,CAAC,OAAO,EAAE,CAAC;YACb,IAAI,CAAC;gBACH,QAAQ,CAAC,uCAAuC,EAAE,EAAE,KAAK,EAAE,QAAQ,EAAE,CAAC,CAAC;gBACvE,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,oBAAoB,CAAC,CAAC;YACtC,CAAC;YAAC,MAAM,CAAC;gBACP,CAAC,CAAC,GAAG,CAAC,IAAI,CAAC,mEAAmE,CAAC,CAAC;YAClF,CAAC;QACH,CAAC;QAED,CAAC,CAAC,KAAK,CAAC,6CAA6C,CAAC,CAAC;IACzD,CAAC;CACF,CAAC,CAAC"}
@@ -1,7 +1,17 @@
1
1
  // CLI command: camel update — update via npm
2
2
  import { register } from "./registry.js";
3
3
  import { VERSION } from "../core/version.js";
4
- import { execSync } from "node:child_process";
4
+ import { exec } from "node:child_process";
5
+ function run(cmd) {
6
+ return new Promise((resolve, reject) => {
7
+ exec(cmd, { encoding: "utf-8" }, (err, stdout) => {
8
+ if (err)
9
+ reject(err);
10
+ else
11
+ resolve(stdout.trim());
12
+ });
13
+ });
14
+ }
5
15
  register({
6
16
  name: "update",
7
17
  description: "Update CamelAGI to the latest version",
@@ -11,10 +21,9 @@ register({
11
21
  p.log.info(`Current version: ${VERSION}`);
12
22
  const s = p.spinner();
13
23
  s.start("Checking for updates...");
14
- // Check latest version on npm
15
24
  let latest;
16
25
  try {
17
- latest = execSync("npm view camelagi version", { encoding: "utf-8" }).trim();
26
+ latest = await run("npm view camelagi version");
18
27
  }
19
28
  catch (err) {
20
29
  s.stop("Failed");
@@ -31,8 +40,8 @@ register({
31
40
  const s2 = p.spinner();
32
41
  s2.start(`Installing v${latest}...`);
33
42
  try {
34
- execSync("npm i -g camelagi@latest", { stdio: "ignore" });
35
- s2.stop("Installed");
43
+ await run("npm i -g camelagi@latest");
44
+ s2.stop(`Installed v${latest}`);
36
45
  }
37
46
  catch (err) {
38
47
  s2.stop("Install failed");
@@ -1 +1 @@
1
- {"version":3,"file":"cmd-update.js","sourceRoot":"","sources":["../../src/cli/cmd-update.ts"],"names":[],"mappings":"AAAA,6CAA6C;AAE7C,OAAO,EAAE,QAAQ,EAAE,MAAM,eAAe,CAAC;AACzC,OAAO,EAAE,OAAO,EAAE,MAAM,oBAAoB,CAAC;AAC7C,OAAO,EAAE,QAAQ,EAAE,MAAM,oBAAoB,CAAC;AAE9C,QAAQ,CAAC;IACP,IAAI,EAAE,QAAQ;IACd,WAAW,EAAE,uCAAuC;IACpD,GAAG,EAAE,KAAK,IAAI,EAAE;QACd,MAAM,CAAC,GAAG,MAAM,MAAM,CAAC,gBAAgB,CAAC,CAAC;QAEzC,CAAC,CAAC,KAAK,CAAC,gCAAgC,CAAC,CAAC;QAC1C,CAAC,CAAC,GAAG,CAAC,IAAI,CAAC,oBAAoB,OAAO,EAAE,CAAC,CAAC;QAE1C,MAAM,CAAC,GAAG,CAAC,CAAC,OAAO,EAAE,CAAC;QACtB,CAAC,CAAC,KAAK,CAAC,yBAAyB,CAAC,CAAC;QAEnC,8BAA8B;QAC9B,IAAI,MAAc,CAAC;QACnB,IAAI,CAAC;YACH,MAAM,GAAG,QAAQ,CAAC,2BAA2B,EAAE,EAAE,QAAQ,EAAE,OAAO,EAAE,CAAC,CAAC,IAAI,EAAE,CAAC;QAC/E,CAAC;QAAC,OAAO,GAAG,EAAE,CAAC;YACb,CAAC,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;YACjB,CAAC,CAAC,GAAG,CAAC,KAAK,CAAC,wBAAwB,GAAG,YAAY,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,GAAG,EAAE,CAAC,CAAC;YAChF,OAAO;QACT,CAAC;QAED,IAAI,MAAM,KAAK,OAAO,EAAE,CAAC;YACvB,CAAC,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC;YACrB,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,8BAA8B,OAAO,GAAG,CAAC,CAAC;YACxD,CAAC,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC;YACZ,OAAO;QACT,CAAC;QAED,CAAC,CAAC,IAAI,CAAC,0BAA0B,OAAO,MAAM,MAAM,EAAE,CAAC,CAAC;QAExD,MAAM,EAAE,GAAG,CAAC,CAAC,OAAO,EAAE,CAAC;QACvB,EAAE,CAAC,KAAK,CAAC,eAAe,MAAM,KAAK,CAAC,CAAC;QAErC,IAAI,CAAC;YACH,QAAQ,CAAC,0BAA0B,EAAE,EAAE,KAAK,EAAE,QAAQ,EAAE,CAAC,CAAC;YAC1D,EAAE,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC;QACvB,CAAC;QAAC,OAAO,GAAG,EAAE,CAAC;YACb,EAAE,CAAC,IAAI,CAAC,gBAAgB,CAAC,CAAC;YAC1B,CAAC,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,GAAG,YAAY,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,GAAG,EAAE,CAAC,CAAC;YAC3D,CAAC,CAAC,GAAG,CAAC,IAAI,CAAC,wCAAwC,CAAC,CAAC;YACrD,OAAO;QACT,CAAC;QAED,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,YAAY,OAAO,MAAM,MAAM,EAAE,CAAC,CAAC;QACjD,CAAC,CAAC,KAAK,CAAC,oDAAoD,CAAC,CAAC;IAChE,CAAC;CACF,CAAC,CAAC"}
1
+ {"version":3,"file":"cmd-update.js","sourceRoot":"","sources":["../../src/cli/cmd-update.ts"],"names":[],"mappings":"AAAA,6CAA6C;AAE7C,OAAO,EAAE,QAAQ,EAAE,MAAM,eAAe,CAAC;AACzC,OAAO,EAAE,OAAO,EAAE,MAAM,oBAAoB,CAAC;AAC7C,OAAO,EAAE,IAAI,EAAE,MAAM,oBAAoB,CAAC;AAE1C,SAAS,GAAG,CAAC,GAAW;IACtB,OAAO,IAAI,OAAO,CAAC,CAAC,OAAO,EAAE,MAAM,EAAE,EAAE;QACrC,IAAI,CAAC,GAAG,EAAE,EAAE,QAAQ,EAAE,OAAO,EAAE,EAAE,CAAC,GAAG,EAAE,MAAM,EAAE,EAAE;YAC/C,IAAI,GAAG;gBAAE,MAAM,CAAC,GAAG,CAAC,CAAC;;gBAChB,OAAO,CAAC,MAAM,CAAC,IAAI,EAAE,CAAC,CAAC;QAC9B,CAAC,CAAC,CAAC;IACL,CAAC,CAAC,CAAC;AACL,CAAC;AAED,QAAQ,CAAC;IACP,IAAI,EAAE,QAAQ;IACd,WAAW,EAAE,uCAAuC;IACpD,GAAG,EAAE,KAAK,IAAI,EAAE;QACd,MAAM,CAAC,GAAG,MAAM,MAAM,CAAC,gBAAgB,CAAC,CAAC;QAEzC,CAAC,CAAC,KAAK,CAAC,gCAAgC,CAAC,CAAC;QAC1C,CAAC,CAAC,GAAG,CAAC,IAAI,CAAC,oBAAoB,OAAO,EAAE,CAAC,CAAC;QAE1C,MAAM,CAAC,GAAG,CAAC,CAAC,OAAO,EAAE,CAAC;QACtB,CAAC,CAAC,KAAK,CAAC,yBAAyB,CAAC,CAAC;QAEnC,IAAI,MAAc,CAAC;QACnB,IAAI,CAAC;YACH,MAAM,GAAG,MAAM,GAAG,CAAC,2BAA2B,CAAC,CAAC;QAClD,CAAC;QAAC,OAAO,GAAG,EAAE,CAAC;YACb,CAAC,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;YACjB,CAAC,CAAC,GAAG,CAAC,KAAK,CAAC,wBAAwB,GAAG,YAAY,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,GAAG,EAAE,CAAC,CAAC;YAChF,OAAO;QACT,CAAC;QAED,IAAI,MAAM,KAAK,OAAO,EAAE,CAAC;YACvB,CAAC,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC;YACrB,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,8BAA8B,OAAO,GAAG,CAAC,CAAC;YACxD,CAAC,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC;YACZ,OAAO;QACT,CAAC;QAED,CAAC,CAAC,IAAI,CAAC,0BAA0B,OAAO,MAAM,MAAM,EAAE,CAAC,CAAC;QAExD,MAAM,EAAE,GAAG,CAAC,CAAC,OAAO,EAAE,CAAC;QACvB,EAAE,CAAC,KAAK,CAAC,eAAe,MAAM,KAAK,CAAC,CAAC;QAErC,IAAI,CAAC;YACH,MAAM,GAAG,CAAC,0BAA0B,CAAC,CAAC;YACtC,EAAE,CAAC,IAAI,CAAC,cAAc,MAAM,EAAE,CAAC,CAAC;QAClC,CAAC;QAAC,OAAO,GAAG,EAAE,CAAC;YACb,EAAE,CAAC,IAAI,CAAC,gBAAgB,CAAC,CAAC;YAC1B,CAAC,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,GAAG,YAAY,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,GAAG,EAAE,CAAC,CAAC;YAC3D,CAAC,CAAC,GAAG,CAAC,IAAI,CAAC,wCAAwC,CAAC,CAAC;YACrD,OAAO;QACT,CAAC;QAED,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,YAAY,OAAO,MAAM,MAAM,EAAE,CAAC,CAAC;QACjD,CAAC,CAAC,KAAK,CAAC,oDAAoD,CAAC,CAAC;IAChE,CAAC;CACF,CAAC,CAAC"}