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
@@ -0,0 +1,128 @@
1
+ import path from "node:path";
2
+ import fs from "node:fs";
3
+ import { register } from "./registry.js";
4
+ import { loadConfig, saveConfig, ensureDirs } from "../core/config.js";
5
+ import { hasFlag, getFlag } from "./parse.js";
6
+ function slugify(name) {
7
+ return name.toLowerCase().replace(/[^a-z0-9]+/g, "-").replace(/^-|-$/g, "") || `project-${Date.now()}`;
8
+ }
9
+ register({
10
+ name: "projects",
11
+ description: "Manage project workspaces (the cwd agents run in)",
12
+ usage: `Usage: camelagi projects [subcommand]
13
+
14
+ A "project" is a registered workspace directory. When chat is sent with a
15
+ projectId, that project's path becomes the run's working directory.
16
+
17
+ Subcommands:
18
+ (none) List projects
19
+ list List projects
20
+ add [path] Register the directory at <path> (default: cwd)
21
+ remove <id> Unregister a project
22
+
23
+ Options for add:
24
+ --name <n> Display name (default: directory basename)
25
+ --kind <k> e.g. nextjs, ios, rust, python (free-form)
26
+ --agent <id> Default agent for chats sent to this project
27
+ --yes, -y Skip confirmation
28
+
29
+ Examples:
30
+ camelagi projects
31
+ camelagi projects add # registers cwd
32
+ camelagi projects add ~/code/api --kind rust --agent developer
33
+ camelagi projects remove api`,
34
+ run: async (args) => {
35
+ const p = await import("@clack/prompts");
36
+ ensureDirs();
37
+ const sub = args[0];
38
+ if (!sub || sub === "list") {
39
+ listProjects(p);
40
+ return;
41
+ }
42
+ if (sub === "add") {
43
+ await addProject(p, args.slice(1));
44
+ return;
45
+ }
46
+ if (sub === "remove" || sub === "rm") {
47
+ await removeProject(p, args.slice(1));
48
+ return;
49
+ }
50
+ p.log.error(`Unknown subcommand: ${sub}`);
51
+ p.log.info("Run: camelagi projects --help");
52
+ },
53
+ });
54
+ function listProjects(p) {
55
+ const config = loadConfig();
56
+ const list = config.projects ?? [];
57
+ if (list.length === 0) {
58
+ p.log.info("No projects registered.");
59
+ p.log.message("Run: camelagi projects add");
60
+ return;
61
+ }
62
+ p.log.step(`Projects (${list.length}):`);
63
+ for (const pr of list) {
64
+ const agent = pr.defaultAgentId ? ` agent=${pr.defaultAgentId}` : "";
65
+ const kind = pr.kind ? ` kind=${pr.kind}` : "";
66
+ p.log.message(` ${pr.id.padEnd(20)} ${pr.path}${kind}${agent}`);
67
+ }
68
+ }
69
+ async function addProject(p, args) {
70
+ const config = loadConfig();
71
+ const skip = hasFlag(args, "--yes") || hasFlag(args, "-y");
72
+ const positional = args.find((a) => !a.startsWith("--") && !a.startsWith("-"));
73
+ const dir = path.resolve(positional ?? process.cwd());
74
+ if (!fs.existsSync(dir) || !fs.statSync(dir).isDirectory()) {
75
+ p.log.error(`Not a directory: ${dir}`);
76
+ return;
77
+ }
78
+ const name = getFlag(args, "--name") ?? path.basename(dir);
79
+ const kind = getFlag(args, "--kind");
80
+ const agent = getFlag(args, "--agent");
81
+ const id = slugify(name);
82
+ if (agent && !config.agents[agent]) {
83
+ p.log.error(`Agent not found in config: ${agent}`);
84
+ p.log.info(`Known agents: ${Object.keys(config.agents).join(", ") || "(none)"}`);
85
+ return;
86
+ }
87
+ const existing = (config.projects ?? []).find((pr) => pr.id === id);
88
+ if (existing && !skip) {
89
+ const ok = await p.confirm({ message: `Project "${id}" exists. Overwrite path?` });
90
+ if (p.isCancel(ok) || !ok) {
91
+ p.cancel("Cancelled.");
92
+ return;
93
+ }
94
+ }
95
+ const project = { id, name, path: dir, kind, defaultAgentId: agent, registeredAt: Date.now() };
96
+ const others = (config.projects ?? []).filter((pr) => pr.id !== id);
97
+ saveConfig({ projects: [...others, project] });
98
+ p.log.success(`Registered: ${id}`);
99
+ p.log.message(` path: ${dir}`);
100
+ if (kind)
101
+ p.log.message(` kind: ${kind}`);
102
+ if (agent)
103
+ p.log.message(` agent: ${agent}`);
104
+ }
105
+ async function removeProject(p, args) {
106
+ const id = args.find((a) => !a.startsWith("-"));
107
+ if (!id) {
108
+ p.log.error("Usage: camelagi projects remove <id>");
109
+ return;
110
+ }
111
+ const config = loadConfig();
112
+ const list = config.projects ?? [];
113
+ if (!list.some((pr) => pr.id === id)) {
114
+ p.log.warn(`Not found: ${id}`);
115
+ return;
116
+ }
117
+ const skip = hasFlag(args, "--yes") || hasFlag(args, "-y");
118
+ if (!skip) {
119
+ const ok = await p.confirm({ message: `Remove project "${id}"?` });
120
+ if (p.isCancel(ok) || !ok) {
121
+ p.cancel("Cancelled.");
122
+ return;
123
+ }
124
+ }
125
+ saveConfig({ projects: list.filter((pr) => pr.id !== id) });
126
+ p.log.success(`Removed: ${id}`);
127
+ }
128
+ //# sourceMappingURL=cmd-projects.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"cmd-projects.js","sourceRoot":"","sources":["../../src/cli/cmd-projects.ts"],"names":[],"mappings":"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"}