@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,125 @@
1
+ /**
2
+ * Prompt Suggestion Engine
3
+ *
4
+ * Generates follow-up prompt suggestions based on conversation context.
5
+ * Suggestions help users continue productive conversations by offering
6
+ * relevant next steps.
7
+ *
8
+ * @module agent/prompt-suggestions
9
+ */
10
+ import { logger } from '../utils/logger.js';
11
+ /**
12
+ * Engine for generating follow-up prompt suggestions based on
13
+ * conversation context and the last assistant response.
14
+ */
15
+ export class PromptSuggestionEngine {
16
+ enabled;
17
+ cachedSuggestions;
18
+ constructor(enabled = true) {
19
+ this.enabled = enabled;
20
+ this.cachedSuggestions = [];
21
+ }
22
+ /**
23
+ * Check if suggestions are enabled
24
+ */
25
+ isEnabled() {
26
+ return this.enabled;
27
+ }
28
+ /**
29
+ * Enable or disable suggestion generation
30
+ */
31
+ setEnabled(value) {
32
+ this.enabled = value;
33
+ if (!value) {
34
+ this.cachedSuggestions = [];
35
+ }
36
+ logger.info(`Prompt suggestions ${value ? 'enabled' : 'disabled'}`);
37
+ }
38
+ /**
39
+ * Generate 2-3 follow-up suggestions based on context and last response.
40
+ *
41
+ * Currently returns the formatted prompt string that would be sent to an LLM.
42
+ * The actual LLM call is stubbed for now - integrate with CodeBuddyClient
43
+ * when ready.
44
+ *
45
+ * @param context - The conversation context or user's last message
46
+ * @param lastResponse - The assistant's last response
47
+ * @returns Array of suggestion strings
48
+ */
49
+ async generateSuggestions(context, lastResponse) {
50
+ if (!this.enabled) {
51
+ this.cachedSuggestions = [];
52
+ return [];
53
+ }
54
+ if (!context && !lastResponse) {
55
+ this.cachedSuggestions = [];
56
+ return [];
57
+ }
58
+ // Build the prompt that would be sent to the LLM
59
+ const prompt = this.buildSuggestionPrompt(context, lastResponse);
60
+ // Stub: parse suggestions from the prompt structure
61
+ // In production, this would call the LLM and parse the response
62
+ const suggestions = this.parseStubSuggestions(context, lastResponse);
63
+ this.cachedSuggestions = suggestions;
64
+ logger.debug(`Generated ${suggestions.length} prompt suggestions`);
65
+ return suggestions;
66
+ }
67
+ /**
68
+ * Get the cached suggestions from the last generateSuggestions call
69
+ */
70
+ getSuggestions() {
71
+ return [...this.cachedSuggestions];
72
+ }
73
+ /**
74
+ * Clear cached suggestions
75
+ */
76
+ clearSuggestions() {
77
+ this.cachedSuggestions = [];
78
+ }
79
+ /**
80
+ * Build the prompt for suggestion generation
81
+ */
82
+ buildSuggestionPrompt(context, lastResponse) {
83
+ return [
84
+ 'Based on the following conversation, suggest 2-3 short follow-up questions or actions the user might want to take next.',
85
+ '',
86
+ 'User context:',
87
+ context,
88
+ '',
89
+ 'Assistant response:',
90
+ lastResponse,
91
+ '',
92
+ 'Provide 2-3 brief, actionable follow-up suggestions (one per line, no numbering):',
93
+ ].join('\n');
94
+ }
95
+ /**
96
+ * Stub implementation that generates suggestions based on keywords.
97
+ * Replace with actual LLM call in production.
98
+ */
99
+ parseStubSuggestions(context, lastResponse) {
100
+ const combined = `${context} ${lastResponse}`.toLowerCase();
101
+ const suggestions = [];
102
+ if (combined.includes('test')) {
103
+ suggestions.push('Run the test suite to verify changes');
104
+ }
105
+ if (combined.includes('error') || combined.includes('bug') || combined.includes('fix')) {
106
+ suggestions.push('Show me the full error stack trace');
107
+ }
108
+ if (combined.includes('file') || combined.includes('code')) {
109
+ suggestions.push('Review the related files for potential issues');
110
+ }
111
+ if (combined.includes('refactor')) {
112
+ suggestions.push('Extract this into a separate function');
113
+ }
114
+ if (combined.includes('deploy') || combined.includes('build')) {
115
+ suggestions.push('Check the build output for warnings');
116
+ }
117
+ // Always return at least 2 suggestions
118
+ if (suggestions.length < 2) {
119
+ suggestions.push('Tell me more about this');
120
+ suggestions.push('What are the next steps?');
121
+ }
122
+ return suggestions.slice(0, 3);
123
+ }
124
+ }
125
+ //# sourceMappingURL=prompt-suggestions.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"prompt-suggestions.js","sourceRoot":"","sources":["../../src/agent/prompt-suggestions.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,59 @@
1
+ /**
2
+ * Multi-mode Rewind Manager
3
+ *
4
+ * Provides rewind points that capture both conversation and file state,
5
+ * with multiple rewind modes: conversation-only, code-only, full, and fork.
6
+ */
7
+ export type RewindMode = 'conversation' | 'code' | 'full' | 'fork';
8
+ export interface ConversationSnapshot {
9
+ messages: unknown[];
10
+ turnIndex: number;
11
+ }
12
+ export interface FileSnapshot {
13
+ checkpointId: string;
14
+ files: Map<string, string>;
15
+ }
16
+ export interface RewindPoint {
17
+ id: string;
18
+ timestamp: number;
19
+ description: string;
20
+ conversation: ConversationSnapshot;
21
+ files: FileSnapshot;
22
+ }
23
+ export interface RewindResult {
24
+ success: boolean;
25
+ mode: RewindMode;
26
+ restoredTurn?: number;
27
+ restoredFiles?: string[];
28
+ branchId?: string;
29
+ }
30
+ /**
31
+ * RewindManager manages rewind points and supports multiple rewind modes.
32
+ */
33
+ export declare class RewindManager {
34
+ private points;
35
+ private counter;
36
+ private branches;
37
+ /**
38
+ * Create a rewind point capturing conversation and file state.
39
+ */
40
+ createRewindPoint(conversationState: ConversationSnapshot, fileState: FileSnapshot, description?: string): string;
41
+ /**
42
+ * Rewind to a specific point using the given mode.
43
+ */
44
+ rewind(pointId: string, mode: RewindMode): RewindResult;
45
+ /**
46
+ * Get all rewind points.
47
+ */
48
+ getRewindPoints(): RewindPoint[];
49
+ /**
50
+ * Get the latest rewind point.
51
+ */
52
+ getLatestPoint(): RewindPoint | undefined;
53
+ /**
54
+ * Clear all rewind history.
55
+ */
56
+ clearHistory(): void;
57
+ }
58
+ export declare function getRewindManager(): RewindManager;
59
+ export declare function resetRewindManager(): void;
@@ -0,0 +1,124 @@
1
+ /**
2
+ * Multi-mode Rewind Manager
3
+ *
4
+ * Provides rewind points that capture both conversation and file state,
5
+ * with multiple rewind modes: conversation-only, code-only, full, and fork.
6
+ */
7
+ import { logger } from '../utils/logger.js';
8
+ /**
9
+ * RewindManager manages rewind points and supports multiple rewind modes.
10
+ */
11
+ export class RewindManager {
12
+ points = [];
13
+ counter = 0;
14
+ branches = new Map();
15
+ /**
16
+ * Create a rewind point capturing conversation and file state.
17
+ */
18
+ createRewindPoint(conversationState, fileState, description) {
19
+ this.counter++;
20
+ const id = `rw-${this.counter}`;
21
+ const point = {
22
+ id,
23
+ timestamp: Date.now(),
24
+ description: description ?? `Rewind point ${this.counter}`,
25
+ conversation: {
26
+ messages: JSON.parse(JSON.stringify(conversationState.messages)),
27
+ turnIndex: conversationState.turnIndex,
28
+ },
29
+ files: {
30
+ checkpointId: fileState.checkpointId,
31
+ files: new Map(fileState.files),
32
+ },
33
+ };
34
+ this.points.push(point);
35
+ logger.debug(`[RewindManager] Created rewind point ${id}`);
36
+ return id;
37
+ }
38
+ /**
39
+ * Rewind to a specific point using the given mode.
40
+ */
41
+ rewind(pointId, mode) {
42
+ const point = this.points.find((p) => p.id === pointId);
43
+ if (!point) {
44
+ logger.warn(`[RewindManager] Rewind point ${pointId} not found`);
45
+ return { success: false, mode };
46
+ }
47
+ switch (mode) {
48
+ case 'conversation':
49
+ return {
50
+ success: true,
51
+ mode,
52
+ restoredTurn: point.conversation.turnIndex,
53
+ };
54
+ case 'code':
55
+ return {
56
+ success: true,
57
+ mode,
58
+ restoredFiles: Array.from(point.files.files.keys()),
59
+ };
60
+ case 'full':
61
+ return {
62
+ success: true,
63
+ mode,
64
+ restoredTurn: point.conversation.turnIndex,
65
+ restoredFiles: Array.from(point.files.files.keys()),
66
+ };
67
+ case 'fork': {
68
+ const branchId = `fork-${pointId}-${Date.now()}`;
69
+ this.branches.set(branchId, {
70
+ ...point,
71
+ conversation: {
72
+ messages: JSON.parse(JSON.stringify(point.conversation.messages)),
73
+ turnIndex: point.conversation.turnIndex,
74
+ },
75
+ files: {
76
+ checkpointId: point.files.checkpointId,
77
+ files: new Map(point.files.files),
78
+ },
79
+ });
80
+ logger.debug(`[RewindManager] Forked from ${pointId} as ${branchId}`);
81
+ return {
82
+ success: true,
83
+ mode,
84
+ restoredTurn: point.conversation.turnIndex,
85
+ branchId,
86
+ };
87
+ }
88
+ default:
89
+ return { success: false, mode };
90
+ }
91
+ }
92
+ /**
93
+ * Get all rewind points.
94
+ */
95
+ getRewindPoints() {
96
+ return [...this.points];
97
+ }
98
+ /**
99
+ * Get the latest rewind point.
100
+ */
101
+ getLatestPoint() {
102
+ return this.points.length > 0 ? this.points[this.points.length - 1] : undefined;
103
+ }
104
+ /**
105
+ * Clear all rewind history.
106
+ */
107
+ clearHistory() {
108
+ this.points = [];
109
+ this.branches.clear();
110
+ logger.debug('[RewindManager] History cleared');
111
+ }
112
+ }
113
+ // Singleton
114
+ let instance = null;
115
+ export function getRewindManager() {
116
+ if (!instance) {
117
+ instance = new RewindManager();
118
+ }
119
+ return instance;
120
+ }
121
+ export function resetRewindManager() {
122
+ instance = null;
123
+ }
124
+ //# sourceMappingURL=rewind-manager.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"rewind-manager.js","sourceRoot":"","sources":["../../src/agent/rewind-manager.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,54 @@
1
+ /**
2
+ * Agent Teams
3
+ *
4
+ * Coordinates multiple agent instances working together on tasks.
5
+ * Supports auto, in-process, and tmux teammate modes.
6
+ */
7
+ export type TeammateMode = 'auto' | 'in-process' | 'tmux';
8
+ export interface TeamConfig {
9
+ mode: TeammateMode;
10
+ maxTeammates: number;
11
+ sharedTaskList: boolean;
12
+ }
13
+ export type TeammateStatus = 'idle' | 'busy' | 'offline';
14
+ export interface TeammateConfig {
15
+ mode?: TeammateMode;
16
+ capabilities?: string[];
17
+ }
18
+ export interface TeammateInfo {
19
+ name: string;
20
+ config: TeammateConfig;
21
+ status: TeammateStatus;
22
+ assignedTasks: string[];
23
+ }
24
+ export interface TeamMessage {
25
+ from: string;
26
+ to: string | 'all';
27
+ content: string;
28
+ timestamp: number;
29
+ }
30
+ export interface SharedContext {
31
+ tasks: Map<string, {
32
+ assignedTo: string;
33
+ status: string;
34
+ }>;
35
+ teammates: string[];
36
+ messages: TeamMessage[];
37
+ }
38
+ export declare class AgentTeam {
39
+ private teammates;
40
+ private messageQueue;
41
+ private config;
42
+ constructor(config?: Partial<TeamConfig>);
43
+ addTeammate(name: string, config?: TeammateConfig): boolean;
44
+ removeTeammate(name: string): boolean;
45
+ getTeammates(): TeammateInfo[];
46
+ delegateTask(taskId: string, teammateName: string): boolean;
47
+ broadcastMessage(message: string, from?: string): void;
48
+ sendMessage(from: string, to: string, content: string): void;
49
+ getMessages(forTeammate: string): TeamMessage[];
50
+ getSharedContext(): SharedContext;
51
+ getConfig(): TeamConfig;
52
+ }
53
+ export declare function getAgentTeam(config?: Partial<TeamConfig>): AgentTeam;
54
+ export declare function resetAgentTeam(): void;
@@ -0,0 +1,114 @@
1
+ /**
2
+ * Agent Teams
3
+ *
4
+ * Coordinates multiple agent instances working together on tasks.
5
+ * Supports auto, in-process, and tmux teammate modes.
6
+ */
7
+ import { logger } from '../../utils/logger.js';
8
+ const DEFAULT_TEAM_CONFIG = {
9
+ mode: 'auto',
10
+ maxTeammates: 5,
11
+ sharedTaskList: true,
12
+ };
13
+ export class AgentTeam {
14
+ teammates = new Map();
15
+ messageQueue = [];
16
+ config;
17
+ constructor(config) {
18
+ this.config = { ...DEFAULT_TEAM_CONFIG, ...config };
19
+ }
20
+ addTeammate(name, config = {}) {
21
+ if (this.teammates.has(name)) {
22
+ logger.warn(`Teammate "${name}" already exists`);
23
+ return false;
24
+ }
25
+ if (this.teammates.size >= this.config.maxTeammates) {
26
+ logger.warn(`Max teammates (${this.config.maxTeammates}) reached`);
27
+ return false;
28
+ }
29
+ this.teammates.set(name, {
30
+ name,
31
+ config,
32
+ status: 'idle',
33
+ assignedTasks: [],
34
+ });
35
+ logger.info(`Teammate "${name}" added to team`);
36
+ return true;
37
+ }
38
+ removeTeammate(name) {
39
+ if (!this.teammates.has(name)) {
40
+ logger.warn(`Teammate "${name}" not found`);
41
+ return false;
42
+ }
43
+ this.teammates.delete(name);
44
+ logger.info(`Teammate "${name}" removed from team`);
45
+ return true;
46
+ }
47
+ getTeammates() {
48
+ return Array.from(this.teammates.values());
49
+ }
50
+ delegateTask(taskId, teammateName) {
51
+ const teammate = this.teammates.get(teammateName);
52
+ if (!teammate) {
53
+ logger.warn(`Teammate "${teammateName}" not found for task delegation`);
54
+ return false;
55
+ }
56
+ teammate.assignedTasks.push(taskId);
57
+ teammate.status = 'busy';
58
+ logger.info(`Task "${taskId}" delegated to "${teammateName}"`);
59
+ return true;
60
+ }
61
+ broadcastMessage(message, from = 'system') {
62
+ const teamMessage = {
63
+ from,
64
+ to: 'all',
65
+ content: message,
66
+ timestamp: Date.now(),
67
+ };
68
+ this.messageQueue.push(teamMessage);
69
+ logger.info(`Broadcast message from "${from}" to all teammates`);
70
+ }
71
+ sendMessage(from, to, content) {
72
+ const teamMessage = {
73
+ from,
74
+ to,
75
+ content,
76
+ timestamp: Date.now(),
77
+ };
78
+ this.messageQueue.push(teamMessage);
79
+ logger.debug(`Message from "${from}" to "${to}"`);
80
+ }
81
+ getMessages(forTeammate) {
82
+ return this.messageQueue.filter((msg) => msg.to === forTeammate || msg.to === 'all');
83
+ }
84
+ getSharedContext() {
85
+ const tasks = new Map();
86
+ for (const teammate of this.teammates.values()) {
87
+ for (const taskId of teammate.assignedTasks) {
88
+ tasks.set(taskId, {
89
+ assignedTo: teammate.name,
90
+ status: teammate.status,
91
+ });
92
+ }
93
+ }
94
+ return {
95
+ tasks,
96
+ teammates: Array.from(this.teammates.keys()),
97
+ messages: [...this.messageQueue],
98
+ };
99
+ }
100
+ getConfig() {
101
+ return { ...this.config };
102
+ }
103
+ }
104
+ let agentTeamInstance = null;
105
+ export function getAgentTeam(config) {
106
+ if (!agentTeamInstance) {
107
+ agentTeamInstance = new AgentTeam(config);
108
+ }
109
+ return agentTeamInstance;
110
+ }
111
+ export function resetAgentTeam() {
112
+ agentTeamInstance = null;
113
+ }
114
+ //# sourceMappingURL=agent-team.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"agent-team.js","sourceRoot":"","sources":["../../../src/agent/teams/agent-team.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1 @@
1
+ export { AgentTeam, getAgentTeam, resetAgentTeam, type TeammateMode, type TeamConfig, type TeammateStatus, type TeammateConfig, type TeammateInfo, type TeamMessage, type SharedContext, } from './agent-team.js';
@@ -0,0 +1,2 @@
1
+ export { AgentTeam, getAgentTeam, resetAgentTeam, } from './agent-team.js';
2
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/agent/teams/index.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,SAAS,EACT,YAAY,EACZ,cAAc,GAQf,MAAM,iBAAiB,CAAC"}
@@ -0,0 +1,166 @@
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
+ export interface TeamTask {
8
+ id: string;
9
+ title: string;
10
+ description: string;
11
+ status: 'pending' | 'claimed' | 'in_progress' | 'completed' | 'failed';
12
+ assignee?: string;
13
+ dependencies: string[];
14
+ lockedFiles: string[];
15
+ createdAt: number;
16
+ completedAt?: number;
17
+ failReason?: string;
18
+ }
19
+ export interface MailboxMessage {
20
+ id: string;
21
+ from: string;
22
+ to: string | 'broadcast';
23
+ content: string;
24
+ timestamp: number;
25
+ read: boolean;
26
+ }
27
+ export type TeammateMode = 'auto' | 'in-process' | 'tmux';
28
+ export interface TeamConfig {
29
+ name: string;
30
+ leadAgent: string;
31
+ teammates: string[];
32
+ mode: TeammateMode;
33
+ delegateMode: boolean;
34
+ planApproval: boolean;
35
+ configPath: string;
36
+ }
37
+ export declare class TeamTaskList {
38
+ private tasks;
39
+ constructor();
40
+ /**
41
+ * Add a new task
42
+ */
43
+ addTask(title: string, description: string, dependencies?: string[]): TeamTask;
44
+ /**
45
+ * Claim a task for an agent
46
+ */
47
+ claimTask(taskId: string, agentName: string): boolean;
48
+ /**
49
+ * Complete a task
50
+ */
51
+ completeTask(taskId: string): boolean;
52
+ /**
53
+ * Fail a task
54
+ */
55
+ failTask(taskId: string, reason: string): boolean;
56
+ /**
57
+ * Get tasks available for an agent (pending with satisfied deps)
58
+ */
59
+ getAvailableTasks(_agentName: string): TeamTask[];
60
+ /**
61
+ * Get tasks assigned to an agent
62
+ */
63
+ getTasksByAgent(agentName: string): TeamTask[];
64
+ /**
65
+ * Lock a file for a task
66
+ */
67
+ lockFile(taskId: string, file: string): boolean;
68
+ /**
69
+ * Check if a file is locked
70
+ */
71
+ isFileLocked(file: string): {
72
+ locked: boolean;
73
+ byTask?: string;
74
+ };
75
+ /**
76
+ * Unlock a file for a task
77
+ */
78
+ unlockFile(taskId: string, file: string): boolean;
79
+ /**
80
+ * Get all tasks
81
+ */
82
+ getAllTasks(): TeamTask[];
83
+ /**
84
+ * Get pending task count
85
+ */
86
+ getPendingCount(): number;
87
+ /**
88
+ * Get completed task count
89
+ */
90
+ getCompletedCount(): number;
91
+ }
92
+ export declare class TeamMailbox {
93
+ private messages;
94
+ constructor();
95
+ /**
96
+ * Send a message to a specific agent
97
+ */
98
+ send(from: string, to: string, content: string): MailboxMessage;
99
+ /**
100
+ * Broadcast a message to all agents
101
+ */
102
+ broadcast(from: string, content: string): MailboxMessage;
103
+ /**
104
+ * Get messages for an agent (direct + broadcasts, excluding own)
105
+ */
106
+ getMessages(agentName: string): MailboxMessage[];
107
+ /**
108
+ * Get unread messages for an agent
109
+ */
110
+ getUnread(agentName: string): MailboxMessage[];
111
+ /**
112
+ * Mark a message as read
113
+ */
114
+ markRead(messageId: string): boolean;
115
+ /**
116
+ * Mark all messages for an agent as read
117
+ */
118
+ markAllRead(agentName: string): number;
119
+ /**
120
+ * Get total message count
121
+ */
122
+ getMessageCount(): number;
123
+ }
124
+ export declare class TeamManagerV2 {
125
+ private config;
126
+ private taskList;
127
+ private mailbox;
128
+ constructor(config: TeamConfig);
129
+ getTaskList(): TeamTaskList;
130
+ getMailbox(): TeamMailbox;
131
+ getConfig(): TeamConfig;
132
+ /**
133
+ * Set teammate mode
134
+ */
135
+ setMode(mode: TeammateMode): void;
136
+ getMode(): TeammateMode;
137
+ /**
138
+ * Set delegate mode (lead restricted to coordination only)
139
+ */
140
+ setDelegateMode(enabled: boolean): void;
141
+ isDelegateMode(): boolean;
142
+ /**
143
+ * Add a teammate
144
+ */
145
+ addTeammate(name: string): boolean;
146
+ /**
147
+ * Remove a teammate
148
+ */
149
+ removeTeammate(name: string): boolean;
150
+ /**
151
+ * Get all teammates
152
+ */
153
+ getTeammates(): string[];
154
+ /**
155
+ * Generate a tmux layout string (stub)
156
+ */
157
+ generateTmuxLayout(): string;
158
+ /**
159
+ * Serialize config to JSON
160
+ */
161
+ serializeConfig(): string;
162
+ /**
163
+ * Deserialize config from JSON
164
+ */
165
+ static deserializeConfig(json: string): TeamConfig;
166
+ }