@phuetz/code-buddy 0.1.18 → 0.1.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 (273) hide show
  1. package/dist/agent/background-tasks.d.ts +49 -0
  2. package/dist/agent/background-tasks.js +153 -0
  3. package/dist/agent/background-tasks.js.map +1 -0
  4. package/dist/agent/definitions/agent-definition-loader.d.ts +21 -0
  5. package/dist/agent/definitions/agent-definition-loader.js +161 -0
  6. package/dist/agent/definitions/agent-definition-loader.js.map +1 -0
  7. package/dist/agent/definitions/index.d.ts +1 -0
  8. package/dist/agent/definitions/index.js +2 -0
  9. package/dist/agent/definitions/index.js.map +1 -0
  10. package/dist/agent/extended-thinking.d.ts +64 -0
  11. package/dist/agent/extended-thinking.js +103 -0
  12. package/dist/agent/extended-thinking.js.map +1 -0
  13. package/dist/agent/prompt-suggestions.d.ts +55 -0
  14. package/dist/agent/prompt-suggestions.js +125 -0
  15. package/dist/agent/prompt-suggestions.js.map +1 -0
  16. package/dist/agent/rewind-manager.d.ts +59 -0
  17. package/dist/agent/rewind-manager.js +124 -0
  18. package/dist/agent/rewind-manager.js.map +1 -0
  19. package/dist/agent/teams/agent-team.d.ts +54 -0
  20. package/dist/agent/teams/agent-team.js +114 -0
  21. package/dist/agent/teams/agent-team.js.map +1 -0
  22. package/dist/agent/teams/index.d.ts +1 -0
  23. package/dist/agent/teams/index.js +2 -0
  24. package/dist/agent/teams/index.js.map +1 -0
  25. package/dist/agent/teams/team-v2.d.ts +166 -0
  26. package/dist/agent/teams/team-v2.js +376 -0
  27. package/dist/agent/teams/team-v2.js.map +1 -0
  28. package/dist/channels/imessage/index.d.ts +40 -0
  29. package/dist/channels/imessage/index.js +69 -0
  30. package/dist/channels/imessage/index.js.map +1 -0
  31. package/dist/channels/line/index.d.ts +36 -0
  32. package/dist/channels/line/index.js +71 -0
  33. package/dist/channels/line/index.js.map +1 -0
  34. package/dist/channels/mattermost/index.d.ts +34 -0
  35. package/dist/channels/mattermost/index.js +56 -0
  36. package/dist/channels/mattermost/index.js.map +1 -0
  37. package/dist/channels/nextcloud-talk/index.d.ts +37 -0
  38. package/dist/channels/nextcloud-talk/index.js +67 -0
  39. package/dist/channels/nextcloud-talk/index.js.map +1 -0
  40. package/dist/channels/niche-channels.d.ts +61 -0
  41. package/dist/channels/niche-channels.js +131 -0
  42. package/dist/channels/niche-channels.js.map +1 -0
  43. package/dist/channels/nostr/index.d.ts +30 -0
  44. package/dist/channels/nostr/index.js +68 -0
  45. package/dist/channels/nostr/index.js.map +1 -0
  46. package/dist/channels/twilio-voice/index.d.ts +37 -0
  47. package/dist/channels/twilio-voice/index.js +76 -0
  48. package/dist/channels/twilio-voice/index.js.map +1 -0
  49. package/dist/channels/whatsapp/index.js +0 -1
  50. package/dist/channels/whatsapp/index.js.map +1 -1
  51. package/dist/channels/zalo/index.d.ts +28 -0
  52. package/dist/channels/zalo/index.js +53 -0
  53. package/dist/channels/zalo/index.js.map +1 -0
  54. package/dist/cloud/cloud-sessions.d.ts +56 -0
  55. package/dist/cloud/cloud-sessions.js +187 -0
  56. package/dist/cloud/cloud-sessions.js.map +1 -0
  57. package/dist/codebuddy/tool-definitions/advanced-tools.d.ts +1 -0
  58. package/dist/codebuddy/tool-definitions/advanced-tools.js +24 -0
  59. package/dist/codebuddy/tool-definitions/advanced-tools.js.map +1 -1
  60. package/dist/codebuddy/tool-definitions/index.d.ts +1 -1
  61. package/dist/codebuddy/tool-definitions/index.js +1 -1
  62. package/dist/codebuddy/tool-definitions/index.js.map +1 -1
  63. package/dist/commands/handlers/auth-handler.d.ts +32 -0
  64. package/dist/commands/handlers/auth-handler.js +137 -0
  65. package/dist/commands/handlers/auth-handler.js.map +1 -0
  66. package/dist/commands/handlers/context-handler.d.ts +46 -0
  67. package/dist/commands/handlers/context-handler.js +102 -0
  68. package/dist/commands/handlers/context-handler.js.map +1 -0
  69. package/dist/commands/handlers/keybindings-handler.d.ts +30 -0
  70. package/dist/commands/handlers/keybindings-handler.js +124 -0
  71. package/dist/commands/handlers/keybindings-handler.js.map +1 -0
  72. package/dist/commands/handlers/session-commands.d.ts +17 -0
  73. package/dist/commands/handlers/session-commands.js +119 -0
  74. package/dist/commands/handlers/session-commands.js.map +1 -0
  75. package/dist/commands/slash/builtin-commands.js +1 -1
  76. package/dist/commands/slash/builtin-commands.js.map +1 -1
  77. package/dist/config/admin-config.d.ts +54 -0
  78. package/dist/config/admin-config.js +144 -0
  79. package/dist/config/admin-config.js.map +1 -0
  80. package/dist/config/advanced-config.d.ts +118 -0
  81. package/dist/config/advanced-config.js +364 -0
  82. package/dist/config/advanced-config.js.map +1 -0
  83. package/dist/config/managed-policies.d.ts +50 -0
  84. package/dist/config/managed-policies.js +120 -0
  85. package/dist/config/managed-policies.js.map +1 -0
  86. package/dist/config/settings-hierarchy.d.ts +59 -0
  87. package/dist/config/settings-hierarchy.js +188 -0
  88. package/dist/config/settings-hierarchy.js.map +1 -0
  89. package/dist/config/tool-profiles.d.ts +37 -0
  90. package/dist/config/tool-profiles.js +150 -0
  91. package/dist/config/tool-profiles.js.map +1 -0
  92. package/dist/config/user-settings.d.ts +31 -0
  93. package/dist/config/user-settings.js +66 -0
  94. package/dist/config/user-settings.js.map +1 -0
  95. package/dist/context/context-files.d.ts +1 -1
  96. package/dist/context/context-files.js +2 -2
  97. package/dist/context/context-files.js.map +1 -1
  98. package/dist/context/partial-summarizer.d.ts +32 -0
  99. package/dist/context/partial-summarizer.js +144 -0
  100. package/dist/context/partial-summarizer.js.map +1 -0
  101. package/dist/desktop/desktop-app.d.ts +44 -0
  102. package/dist/desktop/desktop-app.js +136 -0
  103. package/dist/desktop/desktop-app.js.map +1 -0
  104. package/dist/git/worktree-sessions.d.ts +24 -0
  105. package/dist/git/worktree-sessions.js +93 -0
  106. package/dist/git/worktree-sessions.js.map +1 -0
  107. package/dist/hooks/advanced-hooks.d.ts +110 -0
  108. package/dist/hooks/advanced-hooks.js +256 -0
  109. package/dist/hooks/advanced-hooks.js.map +1 -0
  110. package/dist/hooks/async-hooks.d.ts +73 -0
  111. package/dist/hooks/async-hooks.js +213 -0
  112. package/dist/hooks/async-hooks.js.map +1 -0
  113. package/dist/hooks/env-persistence.d.ts +58 -0
  114. package/dist/hooks/env-persistence.js +195 -0
  115. package/dist/hooks/env-persistence.js.map +1 -0
  116. package/dist/hooks/hook-events.d.ts +36 -0
  117. package/dist/hooks/hook-events.js +55 -0
  118. package/dist/hooks/hook-events.js.map +1 -0
  119. package/dist/hooks/smart-hooks.d.ts +85 -0
  120. package/dist/hooks/smart-hooks.js +199 -0
  121. package/dist/hooks/smart-hooks.js.map +1 -0
  122. package/dist/ide/jetbrains-plugin.d.ts +55 -0
  123. package/dist/ide/jetbrains-plugin.js +156 -0
  124. package/dist/ide/jetbrains-plugin.js.map +1 -0
  125. package/dist/ide/vscode-extension.d.ts +94 -0
  126. package/dist/ide/vscode-extension.js +229 -0
  127. package/dist/ide/vscode-extension.js.map +1 -0
  128. package/dist/index.js +77 -3
  129. package/dist/index.js.map +1 -1
  130. package/dist/input/file-autocomplete.d.ts +42 -0
  131. package/dist/input/file-autocomplete.js +154 -0
  132. package/dist/input/file-autocomplete.js.map +1 -0
  133. package/dist/integrations/chrome-bridge.d.ts +90 -0
  134. package/dist/integrations/chrome-bridge.js +151 -0
  135. package/dist/integrations/chrome-bridge.js.map +1 -0
  136. package/dist/integrations/github-action-runner.d.ts +40 -0
  137. package/dist/integrations/github-action-runner.js +163 -0
  138. package/dist/integrations/github-action-runner.js.map +1 -0
  139. package/dist/integrations/gitlab-ci-runner.d.ts +34 -0
  140. package/dist/integrations/gitlab-ci-runner.js +104 -0
  141. package/dist/integrations/gitlab-ci-runner.js.map +1 -0
  142. package/dist/integrations/pr-session-linker.d.ts +44 -0
  143. package/dist/integrations/pr-session-linker.js +103 -0
  144. package/dist/integrations/pr-session-linker.js.map +1 -0
  145. package/dist/integrations/tailscale.d.ts +36 -0
  146. package/dist/integrations/tailscale.js +101 -0
  147. package/dist/integrations/tailscale.js.map +1 -0
  148. package/dist/lsp/lsp-client.d.ts +68 -0
  149. package/dist/lsp/lsp-client.js +182 -0
  150. package/dist/lsp/lsp-client.js.map +1 -0
  151. package/dist/mcp/connectors.d.ts +28 -0
  152. package/dist/mcp/connectors.js +148 -0
  153. package/dist/mcp/connectors.js.map +1 -0
  154. package/dist/mcp/index.d.ts +7 -4
  155. package/dist/mcp/index.js +7 -4
  156. package/dist/mcp/index.js.map +1 -1
  157. package/dist/mcp/mcp-auto-discovery.d.ts +49 -0
  158. package/dist/mcp/mcp-auto-discovery.js +104 -0
  159. package/dist/mcp/mcp-auto-discovery.js.map +1 -0
  160. package/dist/mcp/mcp-server.d.ts +70 -0
  161. package/dist/mcp/mcp-server.js +374 -0
  162. package/dist/mcp/mcp-server.js.map +1 -0
  163. package/dist/memory/auto-memory.d.ts +53 -0
  164. package/dist/memory/auto-memory.js +250 -0
  165. package/dist/memory/auto-memory.js.map +1 -0
  166. package/dist/memory/hybrid-search.d.ts +51 -0
  167. package/dist/memory/hybrid-search.js +199 -0
  168. package/dist/memory/hybrid-search.js.map +1 -0
  169. package/dist/memory/memory-flush.d.ts +51 -0
  170. package/dist/memory/memory-flush.js +102 -0
  171. package/dist/memory/memory-flush.js.map +1 -0
  172. package/dist/memory/subagent-memory.d.ts +73 -0
  173. package/dist/memory/subagent-memory.js +172 -0
  174. package/dist/memory/subagent-memory.js.map +1 -0
  175. package/dist/nodes/device-node.d.ts +40 -0
  176. package/dist/nodes/device-node.js +117 -0
  177. package/dist/nodes/device-node.js.map +1 -0
  178. package/dist/output/json-schema-output.d.ts +67 -0
  179. package/dist/output/json-schema-output.js +273 -0
  180. package/dist/output/json-schema-output.js.map +1 -0
  181. package/dist/persistence/session-picker.d.ts +22 -0
  182. package/dist/persistence/session-picker.js +47 -0
  183. package/dist/persistence/session-picker.js.map +1 -0
  184. package/dist/persistence/session-store.d.ts +11 -0
  185. package/dist/persistence/session-store.js +17 -0
  186. package/dist/persistence/session-store.js.map +1 -1
  187. package/dist/plugins/git-pinned-marketplace.d.ts +39 -0
  188. package/dist/plugins/git-pinned-marketplace.js +152 -0
  189. package/dist/plugins/git-pinned-marketplace.js.map +1 -0
  190. package/dist/plugins/plugin-manifest.d.ts +116 -0
  191. package/dist/plugins/plugin-manifest.js +283 -0
  192. package/dist/plugins/plugin-manifest.js.map +1 -0
  193. package/dist/sandbox/os-sandbox.d.ts +49 -1
  194. package/dist/sandbox/os-sandbox.js +347 -6
  195. package/dist/sandbox/os-sandbox.js.map +1 -1
  196. package/dist/sdk/agent-sdk.d.ts +61 -0
  197. package/dist/sdk/agent-sdk.js +90 -0
  198. package/dist/sdk/agent-sdk.js.map +1 -0
  199. package/dist/security/permission-modes.d.ts +76 -0
  200. package/dist/security/permission-modes.js +195 -0
  201. package/dist/security/permission-modes.js.map +1 -0
  202. package/dist/security/permission-patterns.d.ts +61 -0
  203. package/dist/security/permission-patterns.js +171 -0
  204. package/dist/security/permission-patterns.js.map +1 -0
  205. package/dist/security/safe-binaries.d.ts +23 -0
  206. package/dist/security/safe-binaries.js +96 -0
  207. package/dist/security/safe-binaries.js.map +1 -0
  208. package/dist/security/sender-policies.d.ts +46 -0
  209. package/dist/security/sender-policies.js +90 -0
  210. package/dist/security/sender-policies.js.map +1 -0
  211. package/dist/server/dashboard.d.ts +53 -0
  212. package/dist/server/dashboard.js +93 -0
  213. package/dist/server/dashboard.js.map +1 -0
  214. package/dist/services/system-prompt-override.d.ts +34 -0
  215. package/dist/services/system-prompt-override.js +64 -0
  216. package/dist/services/system-prompt-override.js.map +1 -0
  217. package/dist/skills/skill-enhancements.d.ts +37 -0
  218. package/dist/skills/skill-enhancements.js +69 -0
  219. package/dist/skills/skill-enhancements.js.map +1 -0
  220. package/dist/telemetry/otel-tracer.d.ts +98 -0
  221. package/dist/telemetry/otel-tracer.js +245 -0
  222. package/dist/telemetry/otel-tracer.js.map +1 -0
  223. package/dist/tools/browser-stub.d.ts +61 -0
  224. package/dist/tools/browser-stub.js +184 -0
  225. package/dist/tools/browser-stub.js.map +1 -0
  226. package/dist/tools/gateway-tool.d.ts +43 -0
  227. package/dist/tools/gateway-tool.js +92 -0
  228. package/dist/tools/gateway-tool.js.map +1 -0
  229. package/dist/tools/image-stub.d.ts +32 -0
  230. package/dist/tools/image-stub.js +97 -0
  231. package/dist/tools/image-stub.js.map +1 -0
  232. package/dist/tools/js-repl.d.ts +78 -0
  233. package/dist/tools/js-repl.js +280 -0
  234. package/dist/tools/js-repl.js.map +1 -0
  235. package/dist/tools/message-tool.d.ts +42 -0
  236. package/dist/tools/message-tool.js +113 -0
  237. package/dist/tools/message-tool.js.map +1 -0
  238. package/dist/ui/cli-enhancements.d.ts +178 -0
  239. package/dist/ui/cli-enhancements.js +430 -0
  240. package/dist/ui/cli-enhancements.js.map +1 -0
  241. package/dist/ui/status-line.d.ts +90 -0
  242. package/dist/ui/status-line.js +160 -0
  243. package/dist/ui/status-line.js.map +1 -0
  244. package/dist/ui/terminal-enhancements.d.ts +34 -0
  245. package/dist/ui/terminal-enhancements.js +97 -0
  246. package/dist/ui/terminal-enhancements.js.map +1 -0
  247. package/dist/ui/ui-enhancements.d.ts +38 -0
  248. package/dist/ui/ui-enhancements.js +116 -0
  249. package/dist/ui/ui-enhancements.js.map +1 -0
  250. package/dist/utils/custom-instructions.js +4 -1
  251. package/dist/utils/custom-instructions.js.map +1 -1
  252. package/dist/utils/init-project.d.ts +1 -1
  253. package/dist/utils/init-project.js +20 -20
  254. package/dist/utils/init-project.js.map +1 -1
  255. package/dist/utils/output-schema-validator.d.ts +40 -0
  256. package/dist/utils/output-schema-validator.js +137 -0
  257. package/dist/utils/output-schema-validator.js.map +1 -0
  258. package/dist/utils/safety-misc.d.ts +24 -0
  259. package/dist/utils/safety-misc.js +91 -0
  260. package/dist/utils/safety-misc.js.map +1 -0
  261. package/dist/utils/session-enhancements.d.ts +40 -0
  262. package/dist/utils/session-enhancements.js +118 -0
  263. package/dist/utils/session-enhancements.js.map +1 -0
  264. package/dist/utils/shell-snapshot.d.ts +38 -0
  265. package/dist/utils/shell-snapshot.js +323 -0
  266. package/dist/utils/shell-snapshot.js.map +1 -0
  267. package/dist/utils/stream-json-formatter.d.ts +77 -0
  268. package/dist/utils/stream-json-formatter.js +61 -0
  269. package/dist/utils/stream-json-formatter.js.map +1 -0
  270. package/dist/workflows/lobster-engine.d.ts +43 -0
  271. package/dist/workflows/lobster-engine.js +167 -0
  272. package/dist/workflows/lobster-engine.js.map +1 -0
  273. package/package.json +3 -6
@@ -0,0 +1,376 @@
1
+ /**
2
+ * Agent Teams v2
3
+ *
4
+ * Enhanced agent teams with shared task list, mailbox, tmux support,
5
+ * delegate mode, and plan approval.
6
+ */
7
+ import { logger } from '../../utils/logger.js';
8
+ import { randomUUID } from 'crypto';
9
+ // ============================================================================
10
+ // Team Task List
11
+ // ============================================================================
12
+ export class TeamTaskList {
13
+ tasks = new Map();
14
+ constructor() { }
15
+ /**
16
+ * Add a new task
17
+ */
18
+ addTask(title, description, dependencies = []) {
19
+ const task = {
20
+ id: randomUUID(),
21
+ title,
22
+ description,
23
+ status: 'pending',
24
+ dependencies,
25
+ lockedFiles: [],
26
+ createdAt: Date.now(),
27
+ };
28
+ this.tasks.set(task.id, task);
29
+ logger.debug(`Task added: ${task.id} - ${title}`);
30
+ return task;
31
+ }
32
+ /**
33
+ * Claim a task for an agent
34
+ */
35
+ claimTask(taskId, agentName) {
36
+ const task = this.tasks.get(taskId);
37
+ if (!task)
38
+ return false;
39
+ if (task.status !== 'pending')
40
+ return false;
41
+ // Check dependencies are completed
42
+ for (const depId of task.dependencies) {
43
+ const dep = this.tasks.get(depId);
44
+ if (!dep || dep.status !== 'completed') {
45
+ return false;
46
+ }
47
+ }
48
+ task.status = 'claimed';
49
+ task.assignee = agentName;
50
+ logger.debug(`Task ${taskId} claimed by ${agentName}`);
51
+ return true;
52
+ }
53
+ /**
54
+ * Complete a task
55
+ */
56
+ completeTask(taskId) {
57
+ const task = this.tasks.get(taskId);
58
+ if (!task)
59
+ return false;
60
+ if (task.status !== 'claimed' && task.status !== 'in_progress')
61
+ return false;
62
+ task.status = 'completed';
63
+ task.completedAt = Date.now();
64
+ // Unlock all files
65
+ task.lockedFiles = [];
66
+ logger.debug(`Task ${taskId} completed`);
67
+ return true;
68
+ }
69
+ /**
70
+ * Fail a task
71
+ */
72
+ failTask(taskId, reason) {
73
+ const task = this.tasks.get(taskId);
74
+ if (!task)
75
+ return false;
76
+ if (task.status !== 'claimed' && task.status !== 'in_progress')
77
+ return false;
78
+ task.status = 'failed';
79
+ task.failReason = reason;
80
+ task.completedAt = Date.now();
81
+ task.lockedFiles = [];
82
+ logger.debug(`Task ${taskId} failed: ${reason}`);
83
+ return true;
84
+ }
85
+ /**
86
+ * Get tasks available for an agent (pending with satisfied deps)
87
+ */
88
+ getAvailableTasks(_agentName) {
89
+ const available = [];
90
+ const tasks = Array.from(this.tasks.values());
91
+ for (const task of tasks) {
92
+ if (task.status !== 'pending')
93
+ continue;
94
+ const depsOk = task.dependencies.every(depId => {
95
+ const dep = this.tasks.get(depId);
96
+ return dep && dep.status === 'completed';
97
+ });
98
+ if (depsOk) {
99
+ available.push(task);
100
+ }
101
+ }
102
+ return available;
103
+ }
104
+ /**
105
+ * Get tasks assigned to an agent
106
+ */
107
+ getTasksByAgent(agentName) {
108
+ const result = [];
109
+ const tasks = Array.from(this.tasks.values());
110
+ for (const task of tasks) {
111
+ if (task.assignee === agentName) {
112
+ result.push(task);
113
+ }
114
+ }
115
+ return result;
116
+ }
117
+ /**
118
+ * Lock a file for a task
119
+ */
120
+ lockFile(taskId, file) {
121
+ const task = this.tasks.get(taskId);
122
+ if (!task)
123
+ return false;
124
+ // Check if file is already locked by another task
125
+ const allTasks = Array.from(this.tasks.values());
126
+ for (const other of allTasks) {
127
+ if (other.id === taskId)
128
+ continue;
129
+ if (other.lockedFiles.includes(file)) {
130
+ return false;
131
+ }
132
+ }
133
+ if (!task.lockedFiles.includes(file)) {
134
+ task.lockedFiles.push(file);
135
+ }
136
+ return true;
137
+ }
138
+ /**
139
+ * Check if a file is locked
140
+ */
141
+ isFileLocked(file) {
142
+ const tasks = Array.from(this.tasks.values());
143
+ for (const task of tasks) {
144
+ if (task.lockedFiles.includes(file)) {
145
+ return { locked: true, byTask: task.id };
146
+ }
147
+ }
148
+ return { locked: false };
149
+ }
150
+ /**
151
+ * Unlock a file for a task
152
+ */
153
+ unlockFile(taskId, file) {
154
+ const task = this.tasks.get(taskId);
155
+ if (!task)
156
+ return false;
157
+ const idx = task.lockedFiles.indexOf(file);
158
+ if (idx === -1)
159
+ return false;
160
+ task.lockedFiles.splice(idx, 1);
161
+ return true;
162
+ }
163
+ /**
164
+ * Get all tasks
165
+ */
166
+ getAllTasks() {
167
+ return Array.from(this.tasks.values());
168
+ }
169
+ /**
170
+ * Get pending task count
171
+ */
172
+ getPendingCount() {
173
+ let count = 0;
174
+ const tasks = Array.from(this.tasks.values());
175
+ for (const task of tasks) {
176
+ if (task.status === 'pending')
177
+ count++;
178
+ }
179
+ return count;
180
+ }
181
+ /**
182
+ * Get completed task count
183
+ */
184
+ getCompletedCount() {
185
+ let count = 0;
186
+ const tasks = Array.from(this.tasks.values());
187
+ for (const task of tasks) {
188
+ if (task.status === 'completed')
189
+ count++;
190
+ }
191
+ return count;
192
+ }
193
+ }
194
+ // ============================================================================
195
+ // Team Mailbox
196
+ // ============================================================================
197
+ export class TeamMailbox {
198
+ messages = [];
199
+ constructor() { }
200
+ /**
201
+ * Send a message to a specific agent
202
+ */
203
+ send(from, to, content) {
204
+ const msg = {
205
+ id: randomUUID(),
206
+ from,
207
+ to,
208
+ content,
209
+ timestamp: Date.now(),
210
+ read: false,
211
+ };
212
+ this.messages.push(msg);
213
+ logger.debug(`Message from ${from} to ${to}`);
214
+ return msg;
215
+ }
216
+ /**
217
+ * Broadcast a message to all agents
218
+ */
219
+ broadcast(from, content) {
220
+ const msg = {
221
+ id: randomUUID(),
222
+ from,
223
+ to: 'broadcast',
224
+ content,
225
+ timestamp: Date.now(),
226
+ read: false,
227
+ };
228
+ this.messages.push(msg);
229
+ logger.debug(`Broadcast from ${from}`);
230
+ return msg;
231
+ }
232
+ /**
233
+ * Get messages for an agent (direct + broadcasts, excluding own)
234
+ */
235
+ getMessages(agentName) {
236
+ return this.messages.filter(m => (m.to === agentName || m.to === 'broadcast') && m.from !== agentName);
237
+ }
238
+ /**
239
+ * Get unread messages for an agent
240
+ */
241
+ getUnread(agentName) {
242
+ return this.getMessages(agentName).filter(m => !m.read);
243
+ }
244
+ /**
245
+ * Mark a message as read
246
+ */
247
+ markRead(messageId) {
248
+ const msg = this.messages.find(m => m.id === messageId);
249
+ if (!msg)
250
+ return false;
251
+ msg.read = true;
252
+ return true;
253
+ }
254
+ /**
255
+ * Mark all messages for an agent as read
256
+ */
257
+ markAllRead(agentName) {
258
+ let count = 0;
259
+ for (const msg of this.getMessages(agentName)) {
260
+ if (!msg.read) {
261
+ msg.read = true;
262
+ count++;
263
+ }
264
+ }
265
+ return count;
266
+ }
267
+ /**
268
+ * Get total message count
269
+ */
270
+ getMessageCount() {
271
+ return this.messages.length;
272
+ }
273
+ }
274
+ // ============================================================================
275
+ // Team Manager v2
276
+ // ============================================================================
277
+ export class TeamManagerV2 {
278
+ config;
279
+ taskList;
280
+ mailbox;
281
+ constructor(config) {
282
+ this.config = { ...config };
283
+ this.taskList = new TeamTaskList();
284
+ this.mailbox = new TeamMailbox();
285
+ logger.info(`TeamManagerV2 created: ${config.name}`);
286
+ }
287
+ getTaskList() {
288
+ return this.taskList;
289
+ }
290
+ getMailbox() {
291
+ return this.mailbox;
292
+ }
293
+ getConfig() {
294
+ return { ...this.config };
295
+ }
296
+ /**
297
+ * Set teammate mode
298
+ */
299
+ setMode(mode) {
300
+ this.config.mode = mode;
301
+ logger.info(`Team mode set to: ${mode}`);
302
+ }
303
+ getMode() {
304
+ return this.config.mode;
305
+ }
306
+ /**
307
+ * Set delegate mode (lead restricted to coordination only)
308
+ */
309
+ setDelegateMode(enabled) {
310
+ this.config.delegateMode = enabled;
311
+ logger.info(`Delegate mode: ${enabled}`);
312
+ }
313
+ isDelegateMode() {
314
+ return this.config.delegateMode;
315
+ }
316
+ /**
317
+ * Add a teammate
318
+ */
319
+ addTeammate(name) {
320
+ if (this.config.teammates.includes(name))
321
+ return false;
322
+ this.config.teammates.push(name);
323
+ logger.info(`Added teammate: ${name}`);
324
+ return true;
325
+ }
326
+ /**
327
+ * Remove a teammate
328
+ */
329
+ removeTeammate(name) {
330
+ const idx = this.config.teammates.indexOf(name);
331
+ if (idx === -1)
332
+ return false;
333
+ this.config.teammates.splice(idx, 1);
334
+ logger.info(`Removed teammate: ${name}`);
335
+ return true;
336
+ }
337
+ /**
338
+ * Get all teammates
339
+ */
340
+ getTeammates() {
341
+ return [...this.config.teammates];
342
+ }
343
+ /**
344
+ * Generate a tmux layout string (stub)
345
+ */
346
+ generateTmuxLayout() {
347
+ const panes = [this.config.leadAgent, ...this.config.teammates];
348
+ const lines = panes.map((name, i) => `pane-${i}: ${name}`);
349
+ return `tmux layout for "${this.config.name}":\n${lines.join('\n')}`;
350
+ }
351
+ /**
352
+ * Serialize config to JSON
353
+ */
354
+ serializeConfig() {
355
+ return JSON.stringify(this.config, null, 2);
356
+ }
357
+ /**
358
+ * Deserialize config from JSON
359
+ */
360
+ static deserializeConfig(json) {
361
+ const parsed = JSON.parse(json);
362
+ if (!parsed.name || !parsed.leadAgent) {
363
+ throw new Error('Invalid team config: missing name or leadAgent');
364
+ }
365
+ return {
366
+ name: parsed.name,
367
+ leadAgent: parsed.leadAgent,
368
+ teammates: parsed.teammates || [],
369
+ mode: parsed.mode || 'auto',
370
+ delegateMode: parsed.delegateMode ?? false,
371
+ planApproval: parsed.planApproval ?? false,
372
+ configPath: parsed.configPath || '',
373
+ };
374
+ }
375
+ }
376
+ //# sourceMappingURL=team-v2.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"team-v2.js","sourceRoot":"","sources":["../../../src/agent/teams/team-v2.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,40 @@
1
+ /**
2
+ * iMessage/BlueBubbles Channel Adapter
3
+ *
4
+ * Connects to a BlueBubbles server to send/receive iMessages.
5
+ * This is a stub implementation that manages internal state
6
+ * without making real connections.
7
+ */
8
+ export interface IMessageConfig {
9
+ serverUrl: string;
10
+ password: string;
11
+ port?: number;
12
+ }
13
+ export declare class IMessageAdapter {
14
+ private config;
15
+ private running;
16
+ constructor(config: IMessageConfig);
17
+ start(): Promise<void>;
18
+ stop(): Promise<void>;
19
+ isRunning(): boolean;
20
+ sendMessage(chatId: string, text: string): Promise<{
21
+ success: boolean;
22
+ messageId: string;
23
+ }>;
24
+ sendReaction(chatId: string, messageId: string, reaction: string): Promise<{
25
+ success: boolean;
26
+ }>;
27
+ getChats(): Promise<Array<{
28
+ id: string;
29
+ name: string;
30
+ participants: string[];
31
+ }>>;
32
+ getMessages(chatId: string, limit?: number): Promise<Array<{
33
+ id: string;
34
+ text: string;
35
+ sender: string;
36
+ timestamp: Date;
37
+ }>>;
38
+ getConfig(): IMessageConfig;
39
+ }
40
+ export default IMessageAdapter;
@@ -0,0 +1,69 @@
1
+ /**
2
+ * iMessage/BlueBubbles Channel Adapter
3
+ *
4
+ * Connects to a BlueBubbles server to send/receive iMessages.
5
+ * This is a stub implementation that manages internal state
6
+ * without making real connections.
7
+ */
8
+ import { logger } from '../../utils/logger.js';
9
+ export class IMessageAdapter {
10
+ config;
11
+ running = false;
12
+ constructor(config) {
13
+ this.config = { ...config };
14
+ if (this.config.port === undefined) {
15
+ this.config.port = 1234;
16
+ }
17
+ }
18
+ async start() {
19
+ if (this.running) {
20
+ throw new Error('IMessageAdapter is already running');
21
+ }
22
+ logger.debug('IMessageAdapter: connecting to BlueBubbles server', {
23
+ serverUrl: this.config.serverUrl,
24
+ port: this.config.port,
25
+ });
26
+ this.running = true;
27
+ }
28
+ async stop() {
29
+ if (!this.running) {
30
+ throw new Error('IMessageAdapter is not running');
31
+ }
32
+ logger.debug('IMessageAdapter: disconnecting');
33
+ this.running = false;
34
+ }
35
+ isRunning() {
36
+ return this.running;
37
+ }
38
+ async sendMessage(chatId, text) {
39
+ if (!this.running) {
40
+ throw new Error('IMessageAdapter is not running');
41
+ }
42
+ logger.debug('IMessageAdapter: sending message', { chatId, textLength: text.length });
43
+ return { success: true, messageId: `imsg_${Date.now()}` };
44
+ }
45
+ async sendReaction(chatId, messageId, reaction) {
46
+ if (!this.running) {
47
+ throw new Error('IMessageAdapter is not running');
48
+ }
49
+ logger.debug('IMessageAdapter: sending reaction', { chatId, messageId, reaction });
50
+ return { success: true };
51
+ }
52
+ async getChats() {
53
+ if (!this.running) {
54
+ throw new Error('IMessageAdapter is not running');
55
+ }
56
+ return [];
57
+ }
58
+ async getMessages(chatId, limit) {
59
+ if (!this.running) {
60
+ throw new Error('IMessageAdapter is not running');
61
+ }
62
+ return [];
63
+ }
64
+ getConfig() {
65
+ return { ...this.config };
66
+ }
67
+ }
68
+ export default IMessageAdapter;
69
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/channels/imessage/index.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,OAAO,EAAE,MAAM,EAAE,MAAM,uBAAuB,CAAC;AAQ/C,MAAM,OAAO,eAAe;IAClB,MAAM,CAAiB;IACvB,OAAO,GAAG,KAAK,CAAC;IAExB,YAAY,MAAsB;QAChC,IAAI,CAAC,MAAM,GAAG,EAAE,GAAG,MAAM,EAAE,CAAC;QAC5B,IAAI,IAAI,CAAC,MAAM,CAAC,IAAI,KAAK,SAAS,EAAE,CAAC;YACnC,IAAI,CAAC,MAAM,CAAC,IAAI,GAAG,IAAI,CAAC;QAC1B,CAAC;IACH,CAAC;IAED,KAAK,CAAC,KAAK;QACT,IAAI,IAAI,CAAC,OAAO,EAAE,CAAC;YACjB,MAAM,IAAI,KAAK,CAAC,oCAAoC,CAAC,CAAC;QACxD,CAAC;QACD,MAAM,CAAC,KAAK,CAAC,mDAAmD,EAAE;YAChE,SAAS,EAAE,IAAI,CAAC,MAAM,CAAC,SAAS;YAChC,IAAI,EAAE,IAAI,CAAC,MAAM,CAAC,IAAI;SACvB,CAAC,CAAC;QACH,IAAI,CAAC,OAAO,GAAG,IAAI,CAAC;IACtB,CAAC;IAED,KAAK,CAAC,IAAI;QACR,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,CAAC;YAClB,MAAM,IAAI,KAAK,CAAC,gCAAgC,CAAC,CAAC;QACpD,CAAC;QACD,MAAM,CAAC,KAAK,CAAC,gCAAgC,CAAC,CAAC;QAC/C,IAAI,CAAC,OAAO,GAAG,KAAK,CAAC;IACvB,CAAC;IAED,SAAS;QACP,OAAO,IAAI,CAAC,OAAO,CAAC;IACtB,CAAC;IAED,KAAK,CAAC,WAAW,CAAC,MAAc,EAAE,IAAY;QAC5C,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,CAAC;YAClB,MAAM,IAAI,KAAK,CAAC,gCAAgC,CAAC,CAAC;QACpD,CAAC;QACD,MAAM,CAAC,KAAK,CAAC,kCAAkC,EAAE,EAAE,MAAM,EAAE,UAAU,EAAE,IAAI,CAAC,MAAM,EAAE,CAAC,CAAC;QACtF,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,SAAS,EAAE,QAAQ,IAAI,CAAC,GAAG,EAAE,EAAE,EAAE,CAAC;IAC5D,CAAC;IAED,KAAK,CAAC,YAAY,CAAC,MAAc,EAAE,SAAiB,EAAE,QAAgB;QACpE,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,CAAC;YAClB,MAAM,IAAI,KAAK,CAAC,gCAAgC,CAAC,CAAC;QACpD,CAAC;QACD,MAAM,CAAC,KAAK,CAAC,mCAAmC,EAAE,EAAE,MAAM,EAAE,SAAS,EAAE,QAAQ,EAAE,CAAC,CAAC;QACnF,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,CAAC;IAC3B,CAAC;IAED,KAAK,CAAC,QAAQ;QACZ,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,CAAC;YAClB,MAAM,IAAI,KAAK,CAAC,gCAAgC,CAAC,CAAC;QACpD,CAAC;QACD,OAAO,EAAE,CAAC;IACZ,CAAC;IAED,KAAK,CAAC,WAAW,CAAC,MAAc,EAAE,KAAc;QAC9C,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,CAAC;YAClB,MAAM,IAAI,KAAK,CAAC,gCAAgC,CAAC,CAAC;QACpD,CAAC;QACD,OAAO,EAAE,CAAC;IACZ,CAAC;IAED,SAAS;QACP,OAAO,EAAE,GAAG,IAAI,CAAC,MAAM,EAAE,CAAC;IAC5B,CAAC;CACF;AAED,eAAe,eAAe,CAAC"}
@@ -0,0 +1,36 @@
1
+ /**
2
+ * LINE Channel Adapter
3
+ *
4
+ * Connects to LINE Messaging API for sending/receiving messages.
5
+ * This is a stub implementation.
6
+ */
7
+ export interface LINEConfig {
8
+ channelAccessToken: string;
9
+ channelSecret: string;
10
+ port?: number;
11
+ }
12
+ export declare class LINEAdapter {
13
+ private config;
14
+ private running;
15
+ constructor(config: LINEConfig);
16
+ start(): Promise<void>;
17
+ stop(): Promise<void>;
18
+ isRunning(): boolean;
19
+ sendMessage(userId: string, text: string): Promise<{
20
+ success: boolean;
21
+ }>;
22
+ sendImage(userId: string, imageUrl: string): Promise<{
23
+ success: boolean;
24
+ }>;
25
+ sendSticker(userId: string, packageId: string, stickerId: string): Promise<{
26
+ success: boolean;
27
+ }>;
28
+ getProfile(userId: string): Promise<{
29
+ userId: string;
30
+ displayName: string;
31
+ pictureUrl: string;
32
+ statusMessage: string;
33
+ }>;
34
+ getConfig(): LINEConfig;
35
+ }
36
+ export default LINEAdapter;
@@ -0,0 +1,71 @@
1
+ /**
2
+ * LINE Channel Adapter
3
+ *
4
+ * Connects to LINE Messaging API for sending/receiving messages.
5
+ * This is a stub implementation.
6
+ */
7
+ import { logger } from '../../utils/logger.js';
8
+ export class LINEAdapter {
9
+ config;
10
+ running = false;
11
+ constructor(config) {
12
+ this.config = { ...config };
13
+ if (this.config.port === undefined) {
14
+ this.config.port = 8080;
15
+ }
16
+ }
17
+ async start() {
18
+ if (this.running) {
19
+ throw new Error('LINEAdapter is already running');
20
+ }
21
+ logger.debug('LINEAdapter: starting webhook server', { port: this.config.port });
22
+ this.running = true;
23
+ }
24
+ async stop() {
25
+ if (!this.running) {
26
+ throw new Error('LINEAdapter is not running');
27
+ }
28
+ logger.debug('LINEAdapter: stopping webhook server');
29
+ this.running = false;
30
+ }
31
+ isRunning() {
32
+ return this.running;
33
+ }
34
+ async sendMessage(userId, text) {
35
+ if (!this.running) {
36
+ throw new Error('LINEAdapter is not running');
37
+ }
38
+ logger.debug('LINEAdapter: sending message', { userId, textLength: text.length });
39
+ return { success: true };
40
+ }
41
+ async sendImage(userId, imageUrl) {
42
+ if (!this.running) {
43
+ throw new Error('LINEAdapter is not running');
44
+ }
45
+ logger.debug('LINEAdapter: sending image', { userId, imageUrl });
46
+ return { success: true };
47
+ }
48
+ async sendSticker(userId, packageId, stickerId) {
49
+ if (!this.running) {
50
+ throw new Error('LINEAdapter is not running');
51
+ }
52
+ logger.debug('LINEAdapter: sending sticker', { userId, packageId, stickerId });
53
+ return { success: true };
54
+ }
55
+ async getProfile(userId) {
56
+ if (!this.running) {
57
+ throw new Error('LINEAdapter is not running');
58
+ }
59
+ return {
60
+ userId,
61
+ displayName: `User ${userId}`,
62
+ pictureUrl: '',
63
+ statusMessage: '',
64
+ };
65
+ }
66
+ getConfig() {
67
+ return { ...this.config };
68
+ }
69
+ }
70
+ export default LINEAdapter;
71
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/channels/line/index.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,EAAE,MAAM,EAAE,MAAM,uBAAuB,CAAC;AAQ/C,MAAM,OAAO,WAAW;IACd,MAAM,CAAa;IACnB,OAAO,GAAG,KAAK,CAAC;IAExB,YAAY,MAAkB;QAC5B,IAAI,CAAC,MAAM,GAAG,EAAE,GAAG,MAAM,EAAE,CAAC;QAC5B,IAAI,IAAI,CAAC,MAAM,CAAC,IAAI,KAAK,SAAS,EAAE,CAAC;YACnC,IAAI,CAAC,MAAM,CAAC,IAAI,GAAG,IAAI,CAAC;QAC1B,CAAC;IACH,CAAC;IAED,KAAK,CAAC,KAAK;QACT,IAAI,IAAI,CAAC,OAAO,EAAE,CAAC;YACjB,MAAM,IAAI,KAAK,CAAC,gCAAgC,CAAC,CAAC;QACpD,CAAC;QACD,MAAM,CAAC,KAAK,CAAC,sCAAsC,EAAE,EAAE,IAAI,EAAE,IAAI,CAAC,MAAM,CAAC,IAAI,EAAE,CAAC,CAAC;QACjF,IAAI,CAAC,OAAO,GAAG,IAAI,CAAC;IACtB,CAAC;IAED,KAAK,CAAC,IAAI;QACR,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,CAAC;YAClB,MAAM,IAAI,KAAK,CAAC,4BAA4B,CAAC,CAAC;QAChD,CAAC;QACD,MAAM,CAAC,KAAK,CAAC,sCAAsC,CAAC,CAAC;QACrD,IAAI,CAAC,OAAO,GAAG,KAAK,CAAC;IACvB,CAAC;IAED,SAAS;QACP,OAAO,IAAI,CAAC,OAAO,CAAC;IACtB,CAAC;IAED,KAAK,CAAC,WAAW,CAAC,MAAc,EAAE,IAAY;QAC5C,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,CAAC;YAClB,MAAM,IAAI,KAAK,CAAC,4BAA4B,CAAC,CAAC;QAChD,CAAC;QACD,MAAM,CAAC,KAAK,CAAC,8BAA8B,EAAE,EAAE,MAAM,EAAE,UAAU,EAAE,IAAI,CAAC,MAAM,EAAE,CAAC,CAAC;QAClF,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,CAAC;IAC3B,CAAC;IAED,KAAK,CAAC,SAAS,CAAC,MAAc,EAAE,QAAgB;QAC9C,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,CAAC;YAClB,MAAM,IAAI,KAAK,CAAC,4BAA4B,CAAC,CAAC;QAChD,CAAC;QACD,MAAM,CAAC,KAAK,CAAC,4BAA4B,EAAE,EAAE,MAAM,EAAE,QAAQ,EAAE,CAAC,CAAC;QACjE,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,CAAC;IAC3B,CAAC;IAED,KAAK,CAAC,WAAW,CAAC,MAAc,EAAE,SAAiB,EAAE,SAAiB;QACpE,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,CAAC;YAClB,MAAM,IAAI,KAAK,CAAC,4BAA4B,CAAC,CAAC;QAChD,CAAC;QACD,MAAM,CAAC,KAAK,CAAC,8BAA8B,EAAE,EAAE,MAAM,EAAE,SAAS,EAAE,SAAS,EAAE,CAAC,CAAC;QAC/E,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,CAAC;IAC3B,CAAC;IAED,KAAK,CAAC,UAAU,CAAC,MAAc;QAC7B,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,CAAC;YAClB,MAAM,IAAI,KAAK,CAAC,4BAA4B,CAAC,CAAC;QAChD,CAAC;QACD,OAAO;YACL,MAAM;YACN,WAAW,EAAE,QAAQ,MAAM,EAAE;YAC7B,UAAU,EAAE,EAAE;YACd,aAAa,EAAE,EAAE;SAClB,CAAC;IACJ,CAAC;IAED,SAAS;QACP,OAAO,EAAE,GAAG,IAAI,CAAC,MAAM,EAAE,CAAC;IAC5B,CAAC;CACF;AAED,eAAe,WAAW,CAAC"}
@@ -0,0 +1,34 @@
1
+ /**
2
+ * Mattermost Channel Adapter
3
+ *
4
+ * Connects to Mattermost via WebSocket for real-time messaging.
5
+ * This is a stub implementation.
6
+ */
7
+ export interface MattermostConfig {
8
+ url: string;
9
+ token: string;
10
+ teamId?: string;
11
+ }
12
+ export declare class MattermostAdapter {
13
+ private config;
14
+ private running;
15
+ constructor(config: MattermostConfig);
16
+ start(): Promise<void>;
17
+ stop(): Promise<void>;
18
+ isRunning(): boolean;
19
+ sendMessage(channelId: string, text: string): Promise<{
20
+ success: boolean;
21
+ postId: string;
22
+ }>;
23
+ sendReply(channelId: string, rootId: string, text: string): Promise<{
24
+ success: boolean;
25
+ postId: string;
26
+ }>;
27
+ getChannels(): Promise<Array<{
28
+ id: string;
29
+ name: string;
30
+ type: string;
31
+ }>>;
32
+ getConfig(): MattermostConfig;
33
+ }
34
+ export default MattermostAdapter;