camelagi 0.5.49 → 0.5.50

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.
@@ -1,5 +1,40 @@
1
1
  import { register } from "./registry.js";
2
2
  import { getFlag } from "./parse.js";
3
+ import { spawn } from "node:child_process";
4
+ import { existsSync } from "node:fs";
5
+ import { join, dirname } from "node:path";
6
+ import { fileURLToPath } from "node:url";
7
+ function findBun() {
8
+ const candidates = [
9
+ join(process.env.HOME ?? "", ".bun/bin/bun"),
10
+ "/usr/local/bin/bun",
11
+ "/opt/homebrew/bin/bun",
12
+ ];
13
+ for (const c of candidates)
14
+ if (existsSync(c))
15
+ return c;
16
+ const path = process.env.PATH ?? "";
17
+ for (const dir of path.split(":")) {
18
+ const cand = join(dir, "bun");
19
+ if (existsSync(cand))
20
+ return cand;
21
+ }
22
+ return undefined;
23
+ }
24
+ function findTuiEntry() {
25
+ const here = dirname(fileURLToPath(import.meta.url));
26
+ let cur = here;
27
+ for (let i = 0; i < 6; i++) {
28
+ const candidate = join(cur, "tui", "src", "main.tsx");
29
+ if (existsSync(candidate))
30
+ return candidate;
31
+ const parent = dirname(cur);
32
+ if (parent === cur)
33
+ break;
34
+ cur = parent;
35
+ }
36
+ return undefined;
37
+ }
3
38
  register({
4
39
  name: "chat",
5
40
  description: "Interactive REPL",
@@ -9,12 +44,14 @@ Start the interactive TUI chat client.
9
44
 
10
45
  Options:
11
46
  --session <id> Resume a specific session
47
+ --classic Use the legacy pi-tui client
12
48
 
13
49
  Examples:
14
50
  camelagi chat
15
51
  camelagi chat --session my-session`,
16
52
  run: async (args) => {
17
53
  const sessionId = getFlag(args, "--session");
54
+ const classic = args.includes("--classic");
18
55
  const { startServer } = await import("../serve.js");
19
56
  const handle = await startServer({
20
57
  port: 0,
@@ -24,8 +61,38 @@ Examples:
24
61
  cron: false,
25
62
  });
26
63
  const wsUrl = `ws://127.0.0.1:${handle.port}`;
27
- const { runTui } = await import("../tui/tui.js");
28
- await runTui({ session: sessionId, wsUrl });
64
+ const token = handle.config.serve.token;
65
+ // Try Bun TUI first (unless --classic)
66
+ const bunPath = !classic ? findBun() : undefined;
67
+ const tuiEntry = !classic ? findTuiEntry() : undefined;
68
+ if (bunPath && tuiEntry) {
69
+ const env = {
70
+ ...process.env,
71
+ CAMELAGI_WS_URL: wsUrl,
72
+ CAMELAGI_MODEL: process.env.CAMELAGI_MODEL ?? "",
73
+ CAMELAGI_CWD: process.cwd(),
74
+ };
75
+ if (token)
76
+ env.CAMELAGI_TOKEN = token;
77
+ if (sessionId)
78
+ env.CAMELAGI_SESSION = sessionId;
79
+ const child = spawn(bunPath, [tuiEntry], {
80
+ stdio: "inherit",
81
+ env,
82
+ cwd: process.cwd(),
83
+ });
84
+ await new Promise((resolve) => {
85
+ child.on("exit", () => resolve());
86
+ });
87
+ }
88
+ else {
89
+ // Fallback: legacy pi-tui
90
+ if (!classic && !bunPath) {
91
+ console.log(" Bun not found — using legacy TUI. Install Bun for the new UI: https://bun.sh");
92
+ }
93
+ const { runTui } = await import("../tui/tui.js");
94
+ await runTui({ session: sessionId, wsUrl });
95
+ }
29
96
  await handle.close();
30
97
  },
31
98
  });
@@ -1 +1 @@
1
- {"version":3,"file":"cmd-chat.js","sourceRoot":"","sources":["../../src/cli/cmd-chat.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,eAAe,CAAC;AACzC,OAAO,EAAE,OAAO,EAAE,MAAM,YAAY,CAAC;AAErC,QAAQ,CAAC;IACP,IAAI,EAAE,MAAM;IACZ,WAAW,EAAE,kBAAkB;IAC/B,KAAK,EAAE;;;;;;;;;qCAS4B;IACnC,GAAG,EAAE,KAAK,EAAE,IAAI,EAAE,EAAE;QAClB,MAAM,SAAS,GAAG,OAAO,CAAC,IAAI,EAAE,WAAW,CAAC,CAAC;QAE7C,MAAM,EAAE,WAAW,EAAE,GAAG,MAAM,MAAM,CAAC,aAAa,CAAC,CAAC;QACpD,MAAM,MAAM,GAAG,MAAM,WAAW,CAAC;YAC/B,IAAI,EAAE,CAAC;YACP,MAAM,EAAE,IAAI;YACZ,QAAQ,EAAE,KAAK;YACf,IAAI,EAAE,KAAK;YACX,IAAI,EAAE,KAAK;SACZ,CAAC,CAAC;QAEH,MAAM,KAAK,GAAG,kBAAkB,MAAM,CAAC,IAAI,EAAE,CAAC;QAE9C,MAAM,EAAE,MAAM,EAAE,GAAG,MAAM,MAAM,CAAC,eAAe,CAAC,CAAC;QACjD,MAAM,MAAM,CAAC,EAAE,OAAO,EAAE,SAAS,EAAE,KAAK,EAAE,CAAC,CAAC;QAE5C,MAAM,MAAM,CAAC,KAAK,EAAE,CAAC;IACvB,CAAC;CACF,CAAC,CAAC"}
1
+ {"version":3,"file":"cmd-chat.js","sourceRoot":"","sources":["../../src/cli/cmd-chat.ts"],"names":[],"mappings":"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"}
@@ -1,4 +1,4 @@
1
1
  // Auto-synced with package.json version
2
- export const VERSION = "0.5.49";
2
+ export const VERSION = "0.5.50";
3
3
  export const NAME = "camelagi";
4
4
  //# sourceMappingURL=version.js.map
@@ -88,7 +88,7 @@ export async function orchestrate(opts) {
88
88
  ...(agentId ? { agentId } : {}),
89
89
  sdk,
90
90
  ...(config.cursorApiKey ? { cursorApiKey: config.cursorApiKey } : {}),
91
- ...(agentId && (config.agents[agentId]?.adminTools ?? config.agents[agentId]?.admin) ? {
91
+ ...(agentId && (config.agents[agentId]?.adminTools || config.agents[agentId]?.admin) ? {
92
92
  adminDeps: { getSystemPrompt: () => agentSystemPrompt },
93
93
  } : {}),
94
94
  };
@@ -98,7 +98,7 @@ export async function setupAdminBot(agentId, botToken, getConfig, getSystemPromp
98
98
  registerAdminAgents(b, agentId, getConfig, getSystemPrompt, activeBots);
99
99
  // ─── Message handler: wizard text intercept + AI fallback ───────────
100
100
  const agentCfg = getConfig().agents[agentId];
101
- const adminToolsEnabled = agentCfg?.adminTools ?? agentCfg?.admin ?? false;
101
+ const adminToolsEnabled = agentCfg?.adminTools || agentCfg?.admin || false;
102
102
  b.catch((err) => {
103
103
  console.error(`[admin-bot] Error:`, err.message ?? err);
104
104
  });
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "camelagi",
3
- "version": "0.5.49",
3
+ "version": "0.5.50",
4
4
  "description": "Personal AI agent powered by Claude Agent SDK — manage everything from Telegram",
5
5
  "type": "module",
6
6
  "bin": {