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,587 @@
1
+ import { register } from "./registry.js";
2
+ import { loadConfig, saveConfig, ensureDirs } from "../core/config.js";
3
+ import { seedAgentWorkspace } from "../workspace.js";
4
+ import { ensureTeamDir, teamPaths, readDiscussion, listInboxesWithUnread } from "../team.js";
5
+ import { hasFlag, getFlag } from "./parse.js";
6
+ import fs from "node:fs";
7
+ import path from "node:path";
8
+ import { paths } from "../core/config.js";
9
+ // ─── Shared collaboration preamble (every role gets this) ────────────
10
+ const COLLAB_PREAMBLE = `# Collaboration protocol — READ FIRST
11
+
12
+ You are part of a team. Your peers run in parallel agent sessions and you
13
+ share a workspace at \`~/.camelagi/team/<team-id>/\`. There are exactly THREE
14
+ ways to talk to your peers — pick by latency:
15
+
16
+ | Tool | When to use |
17
+ |------|-------------|
18
+ | \`Agent({ subagent_type: "<peer>", prompt: "..." })\` | "I need their answer NOW to continue this turn." Spawns the peer synchronously inside your reply. They run, return text, you keep going. |
19
+ | \`team_send({ to: "<peer>", content: "..." })\` | "FYI / take it from here / picked up next time you wake." Drops a message in their inbox. Coordinator wakes idle agents within ~60s. |
20
+ | \`cron({ action: "add", agentId: "<peer>", schedule: "+1h", prompt: "..." })\` | "Do this LATER" (e.g. nightly run, retry in an hour, scheduled report). Don't use cron for handoffs that should happen now. |
21
+
22
+ ## At the start of EVERY turn
23
+
24
+ 1. \`team_recv()\` — read your inbox. Peers may have written to you while you slept. **If your inbox has work for you, prioritize it.**
25
+ 2. \`team_log({ tailBytes: 4096 })\` — read the last few exchanges so you have context.
26
+ 3. \`team_state({ action: "get" })\` — see the current task / branch / blockers.
27
+
28
+ ## Sharing context
29
+
30
+ - \`team_broadcast(content)\` — post to the group log (no specific recipient).
31
+ - \`team_decision({ action: "add", content })\` — lock in a call. Append-only, becomes team contract.
32
+ - \`team_topic({ action: "write", topic, content })\` — long-form note (research, spec, plan).
33
+ - \`team_state({ action: "patch", content })\` — update the shared task board.
34
+
35
+ **Single source of truth:** the team workspace files. Don't claim "I told you" — write it down.
36
+
37
+ `;
38
+ const TEAM_ROLES = [
39
+ {
40
+ id: "manager",
41
+ name: "Manager",
42
+ description: "Coordinates the team — NEVER writes code",
43
+ thinking: "high",
44
+ effort: "high",
45
+ maxTurns: 15,
46
+ soul: COLLAB_PREAMBLE + `# Role: Manager
47
+
48
+ You coordinate the team. You **own \`team_state\`** — keep the task board accurate. You **don't write code, fix bugs, or run tests yourself.**
49
+
50
+ ## What a coordinated turn looks like for you
51
+
52
+ 1. \`team_recv\` (always) → \`team_log\` → \`team_state({action:"get"})\`.
53
+ 2. Decide the next ONE concrete step. Update \`team_state({action:"set"})\`.
54
+ 3. Delegate by latency:
55
+ - **Need an answer this turn?** \`Agent({ subagent_type: "researcher", prompt: "..." })\` or \`Agent({ subagent_type: "developer", prompt: "..." })\`.
56
+ - **Picked up after this turn?** \`team_send({ to: "developer", content: "implement X. branch already created." })\`.
57
+ - **Time-based?** \`cron(...)\`.
58
+ 4. Lock big calls: \`team_decision({ action: "add", content: "..." })\`.
59
+
60
+ ## What you do
61
+
62
+ - Read project state (git log, npm test, recent reports).
63
+ - Pick exactly one task at a time.
64
+ - Drive the workflow. Spawn researcher synchronously when you need information; team_send to developer when work is ready to start; coordinate reviewer/tester when developer finishes.
65
+ - Update state.md after every meaningful event.
66
+
67
+ ## What you NEVER do
68
+
69
+ - Write or edit project code.
70
+ - Run \`npm test\` yourself — that's the tester.
71
+ - Approve / reject merges — that's the reviewer.
72
+
73
+ ## When unsure
74
+
75
+ Spawn researcher synchronously, get their answer, decide, write a decision. Don't loop in cron for things that can be answered in this turn.
76
+ `,
77
+ tools: `# Manager tools
78
+ - Bash: git log, git branch, ls, cat (read-only analysis)
79
+ - Read: read project files
80
+ - cron: schedule other agents (THIS IS YOUR MAIN TOOL)
81
+ - Write: only for ~/.camelagi/pipeline/ files
82
+ `,
83
+ },
84
+ {
85
+ id: "researcher",
86
+ name: "Researcher",
87
+ description: "Researches ideas — NEVER writes code",
88
+ thinking: "high",
89
+ effort: "high",
90
+ maxTurns: 15,
91
+ soul: COLLAB_PREAMBLE + `# Role: Researcher
92
+
93
+ You investigate questions. You **don't write project code**, you don't run tests, you don't merge.
94
+
95
+ ## What a turn looks like
96
+
97
+ 1. \`team_recv\` → check what was asked.
98
+ 2. WebSearch + WebFetch + Read project files for context.
99
+ 3. Write findings to \`team_topic({ action: "write", topic: "<slug>", content: "..." })\` — long-form, structured.
100
+ 4. Summarize back to whoever asked: if you were spawned via \`Agent\`, just return text. If you got the request via inbox, \`team_send({ to: "<requester>", content: "see topic <slug>; tl;dr: ..." })\`.
101
+
102
+ ## Output shape
103
+
104
+ Topic note structure:
105
+ - **Question:** the original ask
106
+ - **Findings:** what you learned
107
+ - **Recommendation:** your call
108
+ - **Tradeoffs:** what to watch
109
+ - **Sources:** links
110
+
111
+ ## What you NEVER do
112
+
113
+ - Write project code or edit project files.
114
+ - Make architectural decisions yourself (give recommendations, let manager call \`team_decision\`).
115
+ `,
116
+ tools: `# Researcher tools
117
+ - WebSearch: find information
118
+ - WebFetch: read web pages
119
+ - Read: read project files for context
120
+ - Write: ONLY to ~/.camelagi/pipeline/research/
121
+ `,
122
+ },
123
+ {
124
+ id: "developer",
125
+ name: "Developer",
126
+ description: "Writes code — NEVER reviews or tests",
127
+ thinking: "high",
128
+ effort: "max",
129
+ maxTurns: 40,
130
+ soul: COLLAB_PREAMBLE + `# Role: Developer
131
+
132
+ You implement code changes. You don't pick tasks, don't merge, don't review.
133
+
134
+ ## What a turn looks like
135
+
136
+ 1. \`team_recv\` (the plan probably arrived via inbox) → \`team_state({action:"get"})\` for current branch.
137
+ 2. Read the plan / topic. \`git status\` to confirm clean working tree on the right branch.
138
+ 3. Implement.
139
+ 4. Need a clarification right now? \`Agent({ subagent_type: "researcher", prompt: "..." })\` for facts, \`Agent({ subagent_type: "manager", prompt: "..." })\` for scope decisions. Use these when waiting wastes time.
140
+ 5. \`git commit\`. Then either:
141
+ - **Done & confident:** \`team_send({ to: "tester", content: "branch <x> ready for tests." })\`.
142
+ - **Done but uncertain:** \`team_send({ to: "reviewer", content: "branch <x>, please eyeball before tests." })\`.
143
+ - **Stuck after multiple attempts:** \`team_send({ to: "fixer", content: "blocked on <x>; tried <y, z>." })\` and stop.
144
+ 6. Update \`team_state({action:"patch"})\` with what you did.
145
+
146
+ ## Boundaries
147
+
148
+ - Don't run npm test as a verification gate — tester does that authoritatively in a worktree. You can run it locally to sanity-check, but don't claim "it passes" without the tester.
149
+ - Don't refactor things outside the plan. If the plan is wrong, ping manager.
150
+ `,
151
+ tools: `# Developer tools
152
+ - Read/Write/Edit: implement code
153
+ - Bash: git commit, npm test, npm run lint
154
+ - cron: schedule tester or fixer when done
155
+ `,
156
+ },
157
+ {
158
+ id: "reviewer",
159
+ name: "Reviewer",
160
+ description: "Reviews code — NEVER writes or fixes",
161
+ thinking: "high",
162
+ effort: "high",
163
+ maxTurns: 15,
164
+ soul: COLLAB_PREAMBLE + `# Role: Reviewer
165
+
166
+ You read diffs and decide whether they're safe to merge. You don't write code, you don't fix.
167
+
168
+ ## What a turn looks like
169
+
170
+ 1. \`team_recv\` → \`team_state({action:"get"})\` for the branch under review.
171
+ 2. \`git diff main...HEAD\` and read the plan / decisions.
172
+ 3. Look for: security issues, logic errors, missing edge cases, scope drift, regressions.
173
+ 4. **Need fresh test results?** Spawn synchronously: \`Agent({ subagent_type: "tester", prompt: "run full suite on branch <x>" })\` and read its return.
174
+ 5. Decide & route:
175
+ - **APPROVE:** \`gh pr create\`, then \`team_decision({ action: "add", content: "Approved branch X — merged via #<pr>" })\` and \`team_send({ to: "manager", content: "merged" })\`.
176
+ - **REQUEST CHANGES:** \`team_topic({ action: "write", topic: "review-<branch>", content: "..." })\` with line-level feedback, then \`team_send({ to: "fixer", content: "changes needed; see topic review-<branch>" })\`.
177
+ - **REJECT:** \`team_decision({ action: "add", content: "Rejected branch X — reason: ..." })\` and \`team_send({ to: "manager", content: "rejected; see decisions" })\`.
178
+
179
+ ## What you NEVER do
180
+
181
+ - Write or edit code.
182
+ - Skip testing on a non-trivial diff.
183
+ - Approve without reading the diff in full.
184
+ `,
185
+ tools: `# Reviewer tools
186
+ - Bash: git diff, git log, npm test, gh pr create
187
+ - Read: read files for context
188
+ - Write: ONLY to ~/.camelagi/pipeline/ files
189
+ - cron: schedule fixer if changes needed
190
+ `,
191
+ },
192
+ {
193
+ id: "tester",
194
+ name: "Tester",
195
+ description: "Tests code — NEVER writes or fixes",
196
+ thinking: "medium",
197
+ effort: "high",
198
+ maxTurns: 20,
199
+ soul: COLLAB_PREAMBLE + `# Role: Tester
200
+
201
+ You run the verification suite. You don't fix, you don't write features.
202
+
203
+ ## What a turn looks like
204
+
205
+ 1. \`team_recv\` → identify the branch to test.
206
+ 2. Test in an isolated worktree:
207
+ \`\`\`bash
208
+ git worktree add /tmp/camelagi-test HEAD
209
+ cd /tmp/camelagi-test && npm ci
210
+ npm test && npm run lint && npm run build
211
+ \`\`\`
212
+ 3. Write the full output to \`team_topic({ action: "write", topic: "test-<branch>", content: "..." })\`.
213
+ 4. Route the result:
214
+ - **PASS:** \`team_send({ to: "reviewer", content: "tests green on branch <x>; see topic test-<x>" })\`.
215
+ - **FAIL:** \`team_send({ to: "fixer", content: "tests failed on branch <x>; see topic test-<x>" })\` and \`team_send({ to: "manager", content: "blocked on test failures" })\`.
216
+ 5. \`git worktree remove /tmp/camelagi-test\`.
217
+
218
+ ## Synchronous use case
219
+
220
+ If a reviewer or developer spawns you via \`Agent({ subagent_type: "tester" })\`, return the result text directly — they're waiting on you in their turn.
221
+
222
+ ## What you NEVER do
223
+
224
+ - Edit project code (even to fix flaky tests — that's the fixer).
225
+ - Skip the worktree (running tests against the dev's working tree corrupts state).
226
+ `,
227
+ tools: `# Tester tools
228
+ - Bash: git worktree, npm test, npm run build
229
+ - Write: ONLY to ~/.camelagi/pipeline/test-results/
230
+ - cron: schedule reviewer or fixer
231
+ `,
232
+ },
233
+ {
234
+ id: "fixer",
235
+ name: "Fixer",
236
+ description: "Fixes failures — NEVER adds features",
237
+ thinking: "high",
238
+ effort: "max",
239
+ maxTurns: 30,
240
+ soul: COLLAB_PREAMBLE + `# Role: Fixer
241
+
242
+ You make broken things pass. You don't add features, don't refactor for taste, don't review.
243
+
244
+ ## What a turn looks like
245
+
246
+ 1. \`team_recv\` → identify what's broken.
247
+ 2. Read the relevant topic (test-<branch> or review-<branch>) for the failure / feedback.
248
+ 3. Find the root cause (don't paper over symptoms).
249
+ 4. Make the **minimal** fix.
250
+ 5. \`git commit -m "fix: <what>"\`.
251
+ 6. \`team_send({ to: "tester", content: "fixed; please re-run on branch <x>" })\` — let tester verify, don't mark it green yourself.
252
+
253
+ ## When stuck
254
+
255
+ - Try at most 3 attempts. If still failing, \`team_send({ to: "manager", content: "blocked on <x>; tried <y, z>; need decision" })\` and stop.
256
+ - Need fresh eyes mid-fix? \`Agent({ subagent_type: "researcher", prompt: "why does X behave like Y?" })\` synchronously.
257
+
258
+ ## Boundaries
259
+
260
+ - Don't expand the diff beyond what's needed to fix.
261
+ - Don't claim the fix works without the tester re-running.
262
+ `,
263
+ tools: `# Fixer tools
264
+ - Read/Write/Edit: fix code
265
+ - Bash: npm test, npm run lint, git commit
266
+ - cron: schedule tester after fixing
267
+ `,
268
+ },
269
+ ];
270
+ // ─── Pipeline cron ────────────────────────────────────────────────────
271
+ function buildPipelineCron(projectDir, schedule) {
272
+ return [{
273
+ id: "team-pipeline",
274
+ name: "Autonomous Pipeline",
275
+ schedule,
276
+ agentId: "manager",
277
+ enabled: false,
278
+ prompt: `Run your daily workflow for the project at: ${projectDir}
279
+ 1. cd ${projectDir}
280
+ 2. Read project state: git log --oneline -20, npm run lint, npm test
281
+ 3. Check past reports in ~/.camelagi/pipeline/reports/
282
+ 4. Pick ONE low-risk improvement task
283
+ 5. Write a plan to ~/.camelagi/pipeline/active-plan.md
284
+ 6. Create a branch: git checkout -b auto/$(date +%Y-%m-%d)-<short-description>
285
+ 7. Schedule the developer using the cron tool with agentId: "developer"
286
+ 8. Write today's report to ~/.camelagi/pipeline/reports/`,
287
+ }];
288
+ }
289
+ // ─── Command ──────────────────────────────────────────────────────────
290
+ register({
291
+ name: "team",
292
+ description: "Create an autonomous agent team in one command",
293
+ usage: `Usage: camelagi team [subcommand]
294
+
295
+ Subcommands:
296
+ (none) Interactive wizard
297
+ create Create team (non-interactive)
298
+ status Show team status
299
+ remove Remove team agents
300
+
301
+ Options:
302
+ --preset <id> full, core, dev (default: full)
303
+ --schedule <s> Pipeline schedule (default: 1d)
304
+ --model <m> Model for all agents
305
+ --dir <path> Project directory
306
+ --yes, -y Skip confirmations`,
307
+ run: async (args) => {
308
+ const p = await import("@clack/prompts");
309
+ ensureDirs();
310
+ if (args[0] === "status") {
311
+ await showStatus(p);
312
+ return;
313
+ }
314
+ if (args[0] === "remove") {
315
+ await removeTeam(p, args);
316
+ return;
317
+ }
318
+ if (args[0] === "create") {
319
+ await createNonInteractive(p, args);
320
+ return;
321
+ }
322
+ await createInteractive(p);
323
+ },
324
+ });
325
+ // ─── Interactive ──────────────────────────────────────────────────────
326
+ async function createInteractive(p) {
327
+ p.intro("Autonomous Team Setup");
328
+ const config = loadConfig();
329
+ const existing = TEAM_ROLES.filter((r) => config.agents[r.id]);
330
+ if (existing.length > 0) {
331
+ const ok = await p.confirm({ message: `Overwrite ${existing.length} existing team agents?` });
332
+ if (p.isCancel(ok) || !ok) {
333
+ p.cancel("Cancelled.");
334
+ return;
335
+ }
336
+ }
337
+ // Agents
338
+ const preset = await p.select({
339
+ message: "Team:",
340
+ options: [
341
+ { value: "full", label: "Full Team (6 agents)", hint: "manager, researcher, developer, reviewer, tester, fixer" },
342
+ { value: "core", label: "Core Team (3 agents)", hint: "manager, developer, reviewer" },
343
+ { value: "custom", label: "Custom", hint: "pick individually" },
344
+ ],
345
+ });
346
+ if (p.isCancel(preset))
347
+ return;
348
+ let roleIds;
349
+ if (preset === "custom") {
350
+ const sel = await p.multiselect({
351
+ message: "Select agents:",
352
+ options: TEAM_ROLES.map((r) => ({ value: r.id, label: r.name, hint: r.description })),
353
+ required: true,
354
+ });
355
+ if (p.isCancel(sel))
356
+ return;
357
+ roleIds = sel;
358
+ }
359
+ else if (preset === "core") {
360
+ roleIds = ["manager", "developer", "reviewer"];
361
+ }
362
+ else {
363
+ roleIds = TEAM_ROLES.map((r) => r.id);
364
+ }
365
+ const roles = TEAM_ROLES.filter((r) => roleIds.includes(r.id));
366
+ // Directory
367
+ const dir = await p.text({ message: "Project directory:", initialValue: process.cwd() });
368
+ if (p.isCancel(dir))
369
+ return;
370
+ // Schedule
371
+ let schedule = "manual";
372
+ if (roleIds.includes("manager")) {
373
+ schedule = await p.select({
374
+ message: "Pipeline schedule:",
375
+ options: [
376
+ { value: "1d", label: "Daily" },
377
+ { value: "12h", label: "Twice daily" },
378
+ { value: "manual", label: "Manual only" },
379
+ ],
380
+ });
381
+ if (p.isCancel(schedule))
382
+ return;
383
+ }
384
+ // Model
385
+ const { resolvePreset, fetchOpenRouterModels } = await import("../core/models.js");
386
+ const modelPreset = resolvePreset(config.provider, config.baseUrl);
387
+ let models = [...modelPreset.models];
388
+ if (config.baseUrl?.includes("openrouter") && config.apiKey) {
389
+ const sv = p.spinner();
390
+ sv.start("Fetching models...");
391
+ const live = await fetchOpenRouterModels(config.apiKey);
392
+ if (live.length > 0) {
393
+ const set = new Set(modelPreset.models);
394
+ models = [...modelPreset.models, ...live.map((m) => m.id).filter((id) => !set.has(id))];
395
+ }
396
+ sv.stop(`${models.length} models available`);
397
+ }
398
+ const modelOpts = models.map((m) => ({ value: m, label: m }));
399
+ if (!models.includes(config.model))
400
+ modelOpts.unshift({ value: config.model, label: config.model });
401
+ const modelMode = await p.select({
402
+ message: "Model:",
403
+ options: [
404
+ { value: "same", label: "Same for all agents" },
405
+ { value: "per", label: "Choose per agent" },
406
+ ],
407
+ });
408
+ if (p.isCancel(modelMode))
409
+ return;
410
+ const modelMap = {};
411
+ if (modelMode === "same") {
412
+ const m = await p.select({ message: "Model:", options: modelOpts, initialValue: config.model });
413
+ if (p.isCancel(m))
414
+ return;
415
+ for (const r of roles)
416
+ modelMap[r.id] = m;
417
+ }
418
+ else {
419
+ for (const r of roles) {
420
+ const m = await p.select({ message: `${r.name}:`, options: modelOpts, initialValue: config.model });
421
+ if (p.isCancel(m))
422
+ return;
423
+ modelMap[r.id] = m;
424
+ }
425
+ }
426
+ // Confirm
427
+ p.log.step("Team:");
428
+ for (const r of roles)
429
+ p.log.message(` ${r.id.padEnd(12)} ${modelMap[r.id]}`);
430
+ const ok = await p.confirm({ message: "Create?" });
431
+ if (p.isCancel(ok) || !ok) {
432
+ p.cancel("Cancelled.");
433
+ return;
434
+ }
435
+ const sv = p.spinner();
436
+ sv.start("Creating team...");
437
+ createTeam({ dir: dir, schedule: schedule === "manual" ? undefined : schedule, modelMap, roles });
438
+ sv.stop("Done!");
439
+ p.log.success(`${roles.length} agents created`);
440
+ p.outro("Run: npx tsx src/cli.ts serve");
441
+ }
442
+ // ─── Non-interactive ──────────────────────────────────────────────────
443
+ async function createNonInteractive(p, args) {
444
+ const config = loadConfig();
445
+ const dir = getFlag(args, "--dir") ?? process.cwd();
446
+ const schedule = getFlag(args, "--schedule") ?? "1d";
447
+ const model = getFlag(args, "--model") ?? config.model;
448
+ const skip = hasFlag(args, "--yes") || hasFlag(args, "-y");
449
+ const existing = TEAM_ROLES.filter((r) => config.agents[r.id]);
450
+ if (existing.length > 0 && !skip) {
451
+ const ok = await p.confirm({ message: `Overwrite ${existing.length} agents?` });
452
+ if (p.isCancel(ok) || !ok)
453
+ return;
454
+ }
455
+ const modelMap = {};
456
+ for (const r of TEAM_ROLES)
457
+ modelMap[r.id] = model;
458
+ createTeam({ dir, schedule, modelMap, roles: TEAM_ROLES });
459
+ p.log.success(`${TEAM_ROLES.length} agents created`);
460
+ }
461
+ function createTeam(opts) {
462
+ const config = loadConfig();
463
+ const agents = { ...config.agents };
464
+ const pipelineDir = path.join(paths.configDir, "pipeline");
465
+ for (const sub of ["reports", "research", "test-results", "logs"]) {
466
+ fs.mkdirSync(path.join(pipelineDir, sub), { recursive: true });
467
+ }
468
+ for (const role of opts.roles) {
469
+ seedAgentWorkspace(role.id, role.name, role.description);
470
+ const agentDir = path.join(paths.configDir, "agents", role.id);
471
+ fs.writeFileSync(path.join(agentDir, "SOUL.md"), role.soul);
472
+ fs.writeFileSync(path.join(agentDir, "TOOLS.md"), role.tools);
473
+ const bp = path.join(agentDir, "BOOTSTRAP.md");
474
+ if (fs.existsSync(bp))
475
+ fs.unlinkSync(bp);
476
+ agents[role.id] = {
477
+ name: role.name,
478
+ admin: false,
479
+ model: opts.modelMap[role.id],
480
+ thinking: role.thinking,
481
+ effort: role.effort,
482
+ maxTurns: role.maxTurns,
483
+ workDir: opts.dir,
484
+ };
485
+ }
486
+ // Build / update the teams[] entry. Default team id = "default" — there's
487
+ // exactly one team per CamelAGI instance for now (multi-team is a follow-up).
488
+ const teamId = opts.teamId ?? "default";
489
+ const memberIds = opts.roles.map((r) => r.id);
490
+ const coordinator = memberIds.includes("manager") ? "manager" : memberIds[0];
491
+ const otherTeams = (config.teams ?? []).filter((t) => t.id !== teamId);
492
+ const teamEntry = {
493
+ id: teamId,
494
+ name: opts.teamName ?? "Default Team",
495
+ members: memberIds,
496
+ coordinator,
497
+ createdAt: Date.now(),
498
+ };
499
+ // Seed the shared workspace dir (state.md, decisions.md, inboxes, etc.).
500
+ ensureTeamDir(teamId, memberIds);
501
+ const update = {
502
+ agents,
503
+ teams: [...otherTeams, teamEntry],
504
+ };
505
+ // Cron: always include the team-coordinator (60s inbox watcher), and
506
+ // optionally the daily pipeline kickoff.
507
+ const existingCron = config.cron.filter((j) => j.id !== "team-pipeline" && j.id !== "team-coordinator");
508
+ const newCron = [];
509
+ newCron.push(buildCoordinatorCron(teamId));
510
+ if (opts.schedule)
511
+ newCron.push(...buildPipelineCron(opts.dir, opts.schedule));
512
+ update.cron = [...existingCron, ...newCron];
513
+ saveConfig(update);
514
+ }
515
+ /** Coordinator cron — pings idle agents that have unread inbox messages.
516
+ * Runs every 60s. The agent it wakes is whichever member has unread messages
517
+ * (one wake per cron tick is enough; the agent will read its own inbox). */
518
+ function buildCoordinatorCron(teamId) {
519
+ return {
520
+ id: "team-coordinator",
521
+ name: `Team coordinator (${teamId})`,
522
+ schedule: "60s",
523
+ enabled: true,
524
+ // No agentId — this cron runs on the gateway's main runtime and uses the
525
+ // built-in inbox check. The handler is special-cased in extensions/cron.ts.
526
+ prompt: `__TEAM_COORDINATOR__:${teamId}`,
527
+ };
528
+ }
529
+ // ─── Status ───────────────────────────────────────────────────────────
530
+ async function showStatus(p) {
531
+ const config = loadConfig();
532
+ const team = TEAM_ROLES.filter((r) => config.agents[r.id]);
533
+ if (team.length === 0) {
534
+ p.log.warn("No team. Run: camel team");
535
+ return;
536
+ }
537
+ const teamEntry = (config.teams ?? [])[0];
538
+ const teamId = teamEntry?.id ?? "default";
539
+ p.log.step(`Team "${teamEntry?.name ?? teamId}" (${team.length} agents):`);
540
+ for (const r of team) {
541
+ const a = config.agents[r.id];
542
+ p.log.message(` ${r.id.padEnd(12)} ${a.model ?? config.model}`);
543
+ }
544
+ // Workspace + cron status
545
+ const tp = teamPaths(teamId);
546
+ p.log.step(`Workspace: ${tp.root}`);
547
+ const unread = listInboxesWithUnread(teamId);
548
+ if (unread.length === 0) {
549
+ p.log.message(` inbox: all clear`);
550
+ }
551
+ else {
552
+ p.log.message(` inbox: ${unread.join(", ")} have unread`);
553
+ }
554
+ // Recent discussion tail
555
+ if (fs.existsSync(tp.discussion)) {
556
+ p.log.step(`Recent discussion (last ~2 KB):`);
557
+ const tail = readDiscussion(teamId, 2048).trim().split("\n").slice(-12).join("\n");
558
+ p.log.message(tail || "(empty)");
559
+ }
560
+ const coord = config.cron.find((j) => j.id === "team-coordinator");
561
+ const pipeline = config.cron.find((j) => j.id === "team-pipeline");
562
+ if (coord)
563
+ p.log.step(`Coordinator: ${coord.schedule} (${coord.enabled ? "enabled" : "disabled"})`);
564
+ if (pipeline)
565
+ p.log.step(`Pipeline kickoff: ${pipeline.schedule} (${pipeline.enabled ? "enabled" : "manual"})`);
566
+ }
567
+ // ─── Remove ───────────────────────────────────────────────────────────
568
+ async function removeTeam(p, args) {
569
+ const config = loadConfig();
570
+ const skip = hasFlag(args, "--yes") || hasFlag(args, "-y");
571
+ const team = TEAM_ROLES.filter((r) => config.agents[r.id]);
572
+ if (team.length === 0) {
573
+ p.log.info("No team agents.");
574
+ return;
575
+ }
576
+ if (!skip) {
577
+ const ok = await p.confirm({ message: `Remove ${team.length} agents?` });
578
+ if (p.isCancel(ok) || !ok)
579
+ return;
580
+ }
581
+ const agents = { ...config.agents };
582
+ for (const r of TEAM_ROLES)
583
+ delete agents[r.id];
584
+ saveConfig({ agents, cron: config.cron.filter((j) => j.id !== "team-pipeline") });
585
+ p.log.success(`Removed ${team.length} agents`);
586
+ }
587
+ //# sourceMappingURL=cmd-team.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"cmd-team.js","sourceRoot":"","sources":["../../src/cli/cmd-team.ts"],"names":[],"mappings":"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"}
package/dist/cli.js CHANGED
@@ -25,6 +25,7 @@ import "./cli/cmd-status.js";
25
25
  import "./cli/cmd-connect.js";
26
26
  import "./cli/cmd-tailscale.js";
27
27
  import "./cli/cmd-watch.js";
28
+ import "./cli/cmd-dashboard.js";
28
29
  const args = process.argv.slice(2);
29
30
  // Non-blocking update check on every invocation (skip if already running update)
30
31
  if (args[0] !== "update") {
@@ -49,7 +50,7 @@ if (args[0] === "--help" || args[0] === "-h" || args.length === 0) {
49
50
  };
50
51
  const categorize = {
51
52
  bootstrap: "Getting Started", setup: "Getting Started", chat: "Getting Started",
52
- serve: "Server", daemon: "Server", logs: "Server", status: "Server", connect: "Server", tailscale: "Server", watch: "Server",
53
+ serve: "Server", dashboard: "Server", daemon: "Server", logs: "Server", status: "Server", connect: "Server", tailscale: "Server", watch: "Server",
53
54
  agents: "Agents & Sessions", soul: "Agents & Sessions", sessions: "Agents & Sessions", pairing: "Agents & Sessions",
54
55
  config: "Configuration", cron: "Configuration",
55
56
  doctor: "Maintenance", reset: "Maintenance", install: "Maintenance", uninstall: "Maintenance",
package/dist/cli.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"cli.js","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"cli.js","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":"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"}