@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 @@
1
+ {"version":3,"file":"memory-flush.js","sourceRoot":"","sources":["../../src/memory/memory-flush.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,73 @@
1
+ /**
2
+ * Subagent Persistent Memory
3
+ *
4
+ * Scoped memory system for subagents with user/project/local scopes,
5
+ * topic files, and context injection support.
6
+ */
7
+ export type MemoryScope = 'user' | 'project' | 'local';
8
+ export interface SubagentMemoryConfig {
9
+ agentName: string;
10
+ scope: MemoryScope;
11
+ maxLines: number;
12
+ memoryDir?: string;
13
+ }
14
+ export declare class SubagentMemory {
15
+ private config;
16
+ private memoryPath;
17
+ constructor(config: SubagentMemoryConfig);
18
+ /**
19
+ * Get memory directory path based on scope
20
+ */
21
+ static getMemoryDir(agentName: string, scope: MemoryScope): string;
22
+ /**
23
+ * Ensure the memory directory exists
24
+ */
25
+ private ensureDir;
26
+ /**
27
+ * Get the MEMORY.md file path
28
+ */
29
+ private getMemoryFilePath;
30
+ /**
31
+ * Read MEMORY.md (first maxLines lines)
32
+ */
33
+ readMemory(): string;
34
+ /**
35
+ * Write to MEMORY.md (replace all content)
36
+ */
37
+ writeMemory(content: string): void;
38
+ /**
39
+ * Append to MEMORY.md
40
+ */
41
+ appendMemory(entry: string): void;
42
+ /**
43
+ * Read a specific topic file
44
+ */
45
+ readTopic(topicName: string): string | null;
46
+ /**
47
+ * Write a topic file
48
+ */
49
+ writeTopic(topicName: string, content: string): void;
50
+ /**
51
+ * List all memory files
52
+ */
53
+ listMemoryFiles(): string[];
54
+ /**
55
+ * Check if memory exists (MEMORY.md file)
56
+ */
57
+ hasMemory(): boolean;
58
+ /**
59
+ * Get memory size in bytes
60
+ */
61
+ getMemorySize(): number;
62
+ /**
63
+ * Clear all memory
64
+ */
65
+ clearMemory(): void;
66
+ /**
67
+ * Generate context injection (first maxLines lines of MEMORY.md)
68
+ */
69
+ getContextInjection(): string;
70
+ getAgentName(): string;
71
+ getScope(): MemoryScope;
72
+ getMemoryPath(): string;
73
+ }
@@ -0,0 +1,172 @@
1
+ /**
2
+ * Subagent Persistent Memory
3
+ *
4
+ * Scoped memory system for subagents with user/project/local scopes,
5
+ * topic files, and context injection support.
6
+ */
7
+ import * as fs from 'fs';
8
+ import * as path from 'path';
9
+ import * as os from 'os';
10
+ import { logger } from '../utils/logger.js';
11
+ // ============================================================================
12
+ // Defaults
13
+ // ============================================================================
14
+ const DEFAULT_MAX_LINES = 200;
15
+ // ============================================================================
16
+ // Subagent Memory
17
+ // ============================================================================
18
+ export class SubagentMemory {
19
+ config;
20
+ memoryPath;
21
+ constructor(config) {
22
+ this.config = {
23
+ ...config,
24
+ maxLines: config.maxLines || DEFAULT_MAX_LINES,
25
+ };
26
+ if (config.memoryDir) {
27
+ this.memoryPath = config.memoryDir;
28
+ }
29
+ else {
30
+ this.memoryPath = SubagentMemory.getMemoryDir(config.agentName, config.scope);
31
+ }
32
+ }
33
+ /**
34
+ * Get memory directory path based on scope
35
+ */
36
+ static getMemoryDir(agentName, scope) {
37
+ const safeName = agentName.replace(/[^a-zA-Z0-9_-]/g, '_');
38
+ switch (scope) {
39
+ case 'user':
40
+ return path.join(os.homedir(), '.codebuddy', 'agents', safeName, 'memory');
41
+ case 'project':
42
+ return path.join(process.cwd(), '.codebuddy', 'agents', safeName, 'memory');
43
+ case 'local':
44
+ return path.join(os.tmpdir(), 'codebuddy-agents', safeName, 'memory');
45
+ }
46
+ }
47
+ /**
48
+ * Ensure the memory directory exists
49
+ */
50
+ ensureDir() {
51
+ if (!fs.existsSync(this.memoryPath)) {
52
+ fs.mkdirSync(this.memoryPath, { recursive: true });
53
+ }
54
+ }
55
+ /**
56
+ * Get the MEMORY.md file path
57
+ */
58
+ getMemoryFilePath() {
59
+ return path.join(this.memoryPath, 'MEMORY.md');
60
+ }
61
+ /**
62
+ * Read MEMORY.md (first maxLines lines)
63
+ */
64
+ readMemory() {
65
+ const filePath = this.getMemoryFilePath();
66
+ if (!fs.existsSync(filePath)) {
67
+ return '';
68
+ }
69
+ const content = fs.readFileSync(filePath, 'utf-8');
70
+ const lines = content.split('\n');
71
+ const limited = lines.slice(0, this.config.maxLines);
72
+ return limited.join('\n');
73
+ }
74
+ /**
75
+ * Write to MEMORY.md (replace all content)
76
+ */
77
+ writeMemory(content) {
78
+ this.ensureDir();
79
+ const filePath = this.getMemoryFilePath();
80
+ fs.writeFileSync(filePath, content, 'utf-8');
81
+ logger.debug(`Memory written for agent: ${this.config.agentName}`);
82
+ }
83
+ /**
84
+ * Append to MEMORY.md
85
+ */
86
+ appendMemory(entry) {
87
+ this.ensureDir();
88
+ const filePath = this.getMemoryFilePath();
89
+ const existing = fs.existsSync(filePath) ? fs.readFileSync(filePath, 'utf-8') : '';
90
+ const separator = existing.endsWith('\n') || existing === '' ? '' : '\n';
91
+ fs.writeFileSync(filePath, existing + separator + entry + '\n', 'utf-8');
92
+ logger.debug(`Memory appended for agent: ${this.config.agentName}`);
93
+ }
94
+ /**
95
+ * Read a specific topic file
96
+ */
97
+ readTopic(topicName) {
98
+ const safeTopic = topicName.replace(/[^a-zA-Z0-9_-]/g, '_');
99
+ const filePath = path.join(this.memoryPath, `${safeTopic}.md`);
100
+ if (!fs.existsSync(filePath)) {
101
+ return null;
102
+ }
103
+ return fs.readFileSync(filePath, 'utf-8');
104
+ }
105
+ /**
106
+ * Write a topic file
107
+ */
108
+ writeTopic(topicName, content) {
109
+ this.ensureDir();
110
+ const safeTopic = topicName.replace(/[^a-zA-Z0-9_-]/g, '_');
111
+ const filePath = path.join(this.memoryPath, `${safeTopic}.md`);
112
+ fs.writeFileSync(filePath, content, 'utf-8');
113
+ logger.debug(`Topic written: ${topicName} for agent: ${this.config.agentName}`);
114
+ }
115
+ /**
116
+ * List all memory files
117
+ */
118
+ listMemoryFiles() {
119
+ if (!fs.existsSync(this.memoryPath)) {
120
+ return [];
121
+ }
122
+ return fs.readdirSync(this.memoryPath).filter(f => f.endsWith('.md'));
123
+ }
124
+ /**
125
+ * Check if memory exists (MEMORY.md file)
126
+ */
127
+ hasMemory() {
128
+ return fs.existsSync(this.getMemoryFilePath());
129
+ }
130
+ /**
131
+ * Get memory size in bytes
132
+ */
133
+ getMemorySize() {
134
+ const filePath = this.getMemoryFilePath();
135
+ if (!fs.existsSync(filePath)) {
136
+ return 0;
137
+ }
138
+ return fs.statSync(filePath).size;
139
+ }
140
+ /**
141
+ * Clear all memory
142
+ */
143
+ clearMemory() {
144
+ if (!fs.existsSync(this.memoryPath))
145
+ return;
146
+ const files = fs.readdirSync(this.memoryPath);
147
+ for (const file of files) {
148
+ fs.unlinkSync(path.join(this.memoryPath, file));
149
+ }
150
+ logger.info(`Memory cleared for agent: ${this.config.agentName}`);
151
+ }
152
+ /**
153
+ * Generate context injection (first maxLines lines of MEMORY.md)
154
+ */
155
+ getContextInjection() {
156
+ const content = this.readMemory();
157
+ if (!content) {
158
+ return '';
159
+ }
160
+ return `\n--- SUBAGENT MEMORY (${this.config.agentName}) ---\n${content}\n--- END SUBAGENT MEMORY ---\n`;
161
+ }
162
+ getAgentName() {
163
+ return this.config.agentName;
164
+ }
165
+ getScope() {
166
+ return this.config.scope;
167
+ }
168
+ getMemoryPath() {
169
+ return this.memoryPath;
170
+ }
171
+ }
172
+ //# sourceMappingURL=subagent-memory.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"subagent-memory.js","sourceRoot":"","sources":["../../src/memory/subagent-memory.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,40 @@
1
+ /**
2
+ * Device Node System
3
+ *
4
+ * Manages paired device nodes (macOS, iOS, Android) with capabilities
5
+ * like camera, screen recording, location, notifications, and system commands.
6
+ */
7
+ export type DeviceType = 'macos' | 'ios' | 'android';
8
+ export type DeviceCapability = 'camera' | 'screen_record' | 'location' | 'notifications' | 'system_run';
9
+ export interface DeviceNode {
10
+ id: string;
11
+ name: string;
12
+ type: DeviceType;
13
+ capabilities: DeviceCapability[];
14
+ paired: boolean;
15
+ lastSeen: number;
16
+ address?: string;
17
+ }
18
+ export interface LocationCoords {
19
+ lat: number;
20
+ lon: number;
21
+ }
22
+ export declare class DeviceNodeManager {
23
+ private static instance;
24
+ private devices;
25
+ static getInstance(): DeviceNodeManager;
26
+ static resetInstance(): void;
27
+ pairDevice(id: string, name: string, type: DeviceType, capabilities: DeviceCapability[]): DeviceNode;
28
+ unpairDevice(id: string): boolean;
29
+ getDevice(id: string): DeviceNode | undefined;
30
+ listDevices(): DeviceNode[];
31
+ listPairedDevices(): DeviceNode[];
32
+ isDevicePaired(id: string): boolean;
33
+ cameraSnap(deviceId: string): string | null;
34
+ screenRecord(deviceId: string, duration?: number): string | null;
35
+ getLocation(deviceId: string): LocationCoords | null;
36
+ sendNotification(deviceId: string, title: string, body: string): boolean;
37
+ systemRun(deviceId: string, command: string): string | null;
38
+ generatePairingCode(): string;
39
+ updateLastSeen(deviceId: string): boolean;
40
+ }
@@ -0,0 +1,117 @@
1
+ /**
2
+ * Device Node System
3
+ *
4
+ * Manages paired device nodes (macOS, iOS, Android) with capabilities
5
+ * like camera, screen recording, location, notifications, and system commands.
6
+ */
7
+ import { logger } from '../utils/logger.js';
8
+ // ============================================================================
9
+ // DeviceNodeManager
10
+ // ============================================================================
11
+ export class DeviceNodeManager {
12
+ static instance = null;
13
+ devices = new Map();
14
+ static getInstance() {
15
+ if (!DeviceNodeManager.instance) {
16
+ DeviceNodeManager.instance = new DeviceNodeManager();
17
+ }
18
+ return DeviceNodeManager.instance;
19
+ }
20
+ static resetInstance() {
21
+ DeviceNodeManager.instance = null;
22
+ }
23
+ pairDevice(id, name, type, capabilities) {
24
+ logger.info(`Pairing device: ${name} (${id})`);
25
+ const device = {
26
+ id,
27
+ name,
28
+ type,
29
+ capabilities,
30
+ paired: true,
31
+ lastSeen: Date.now(),
32
+ };
33
+ this.devices.set(id, device);
34
+ return device;
35
+ }
36
+ unpairDevice(id) {
37
+ logger.info(`Unpairing device: ${id}`);
38
+ return this.devices.delete(id);
39
+ }
40
+ getDevice(id) {
41
+ return this.devices.get(id);
42
+ }
43
+ listDevices() {
44
+ return Array.from(this.devices.values());
45
+ }
46
+ listPairedDevices() {
47
+ return Array.from(this.devices.values()).filter(d => d.paired);
48
+ }
49
+ isDevicePaired(id) {
50
+ const device = this.devices.get(id);
51
+ return device?.paired === true;
52
+ }
53
+ cameraSnap(deviceId) {
54
+ const device = this.devices.get(deviceId);
55
+ if (!device || !device.capabilities.includes('camera')) {
56
+ logger.warn(`Device ${deviceId} does not support camera`);
57
+ return null;
58
+ }
59
+ logger.info(`Camera snap on device ${deviceId}`);
60
+ return `/tmp/snap-${deviceId}-${Date.now()}.jpg`;
61
+ }
62
+ screenRecord(deviceId, duration) {
63
+ const device = this.devices.get(deviceId);
64
+ if (!device || !device.capabilities.includes('screen_record')) {
65
+ logger.warn(`Device ${deviceId} does not support screen recording`);
66
+ return null;
67
+ }
68
+ const dur = duration || 10;
69
+ logger.info(`Screen record on device ${deviceId} for ${dur}s`);
70
+ return `/tmp/screen-${deviceId}-${Date.now()}.mp4`;
71
+ }
72
+ getLocation(deviceId) {
73
+ const device = this.devices.get(deviceId);
74
+ if (!device || !device.capabilities.includes('location')) {
75
+ logger.warn(`Device ${deviceId} does not support location`);
76
+ return null;
77
+ }
78
+ logger.info(`Getting location for device ${deviceId}`);
79
+ return { lat: 0, lon: 0 };
80
+ }
81
+ sendNotification(deviceId, title, body) {
82
+ const device = this.devices.get(deviceId);
83
+ if (!device || !device.capabilities.includes('notifications')) {
84
+ logger.warn(`Device ${deviceId} does not support notifications`);
85
+ return false;
86
+ }
87
+ logger.info(`Sending notification to ${deviceId}: ${title}`);
88
+ return true;
89
+ }
90
+ systemRun(deviceId, command) {
91
+ const device = this.devices.get(deviceId);
92
+ if (!device || !device.capabilities.includes('system_run')) {
93
+ logger.warn(`Device ${deviceId} does not support system_run`);
94
+ return null;
95
+ }
96
+ if (device.type !== 'macos') {
97
+ logger.warn(`system_run only supported on macOS, device ${deviceId} is ${device.type}`);
98
+ return null;
99
+ }
100
+ logger.info(`Running command on device ${deviceId}: ${command}`);
101
+ return `stub: executed "${command}" on ${deviceId}`;
102
+ }
103
+ generatePairingCode() {
104
+ const code = Math.floor(100000 + Math.random() * 900000).toString();
105
+ logger.info(`Generated pairing code: ${code}`);
106
+ return code;
107
+ }
108
+ updateLastSeen(deviceId) {
109
+ const device = this.devices.get(deviceId);
110
+ if (!device) {
111
+ return false;
112
+ }
113
+ device.lastSeen = Date.now();
114
+ return true;
115
+ }
116
+ }
117
+ //# sourceMappingURL=device-node.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"device-node.js","sourceRoot":"","sources":["../../src/nodes/device-node.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,67 @@
1
+ /**
2
+ * JSON Schema Output Validation
3
+ *
4
+ * Validates LLM output against a JSON Schema definition.
5
+ * Includes JSON extraction from markdown code blocks and
6
+ * a built-in schema validator (no external deps).
7
+ */
8
+ export interface JsonSchemaConfig {
9
+ schema: Record<string, any>;
10
+ strict: boolean;
11
+ extractFromMarkdown: boolean;
12
+ }
13
+ export interface ValidationError {
14
+ path: string;
15
+ message: string;
16
+ expected?: string;
17
+ actual?: string;
18
+ }
19
+ export interface ValidationResult {
20
+ valid: boolean;
21
+ errors: ValidationError[];
22
+ data?: any;
23
+ }
24
+ export declare class JsonSchemaOutput {
25
+ private config;
26
+ constructor(config: JsonSchemaConfig);
27
+ /**
28
+ * Validate output against schema
29
+ */
30
+ validate(output: string): ValidationResult;
31
+ /**
32
+ * Extract JSON from various formats
33
+ */
34
+ extractJson(text: string): string | null;
35
+ /**
36
+ * Extract from markdown code blocks
37
+ */
38
+ private extractFromCodeBlock;
39
+ /**
40
+ * Simple JSON Schema validator
41
+ */
42
+ private validateSchema;
43
+ /**
44
+ * Check if value matches expected type
45
+ */
46
+ private checkType;
47
+ /**
48
+ * Check enum values
49
+ */
50
+ private checkEnum;
51
+ /**
52
+ * Check required fields
53
+ */
54
+ private checkRequired;
55
+ /**
56
+ * Check pattern match
57
+ */
58
+ private checkPattern;
59
+ /**
60
+ * Format valid output as pretty JSON
61
+ */
62
+ formatValidOutput(data: any): string;
63
+ /**
64
+ * Get the schema
65
+ */
66
+ getSchema(): Record<string, any>;
67
+ }