@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
@@ -1,7 +1,7 @@
1
1
  import fs from 'fs';
2
2
  import path from 'path';
3
3
  /**
4
- * Initialize .grok directory with templates and configurations
4
+ * Initialize .codebuddy directory with templates and configurations
5
5
  * Similar to Claude Code's project initialization
6
6
  */
7
7
  export function initCodeBuddyProject(workingDirectory = process.cwd(), options = {}) {
@@ -12,15 +12,15 @@ export function initCodeBuddyProject(workingDirectory = process.cwd(), options =
12
12
  errors: []
13
13
  };
14
14
  const codebuddyDir = path.join(workingDirectory, '.codebuddy');
15
- // Create .grok directory
15
+ // Create .codebuddy directory
16
16
  if (!fs.existsSync(codebuddyDir)) {
17
17
  fs.mkdirSync(codebuddyDir, { recursive: true });
18
18
  result.created.push('.codebuddy/');
19
19
  }
20
- // Create GROK.md (custom instructions)
21
- const codebuddyMdPath = path.join(codebuddyDir, 'GROK.md');
20
+ // Create CODEBUDDY.md (custom instructions)
21
+ const codebuddyMdPath = path.join(codebuddyDir, 'CODEBUDDY.md');
22
22
  if (!fs.existsSync(codebuddyMdPath) || options.force) {
23
- const codebuddyMdContent = `# Custom Instructions for Grok CLI
23
+ const codebuddyMdContent = `# Custom Instructions for Code Buddy
24
24
 
25
25
  ## About This Project
26
26
  <!-- Describe your project here -->
@@ -52,16 +52,16 @@ This project is...
52
52
  - ...
53
53
 
54
54
  ## Forbidden Actions
55
- <!-- List things Grok should never do -->
55
+ <!-- List things Code Buddy should never do -->
56
56
  - Never commit .env files
57
57
  - Never expose API keys
58
58
  - Never delete production data
59
59
  `;
60
60
  fs.writeFileSync(codebuddyMdPath, codebuddyMdContent);
61
- result.created.push('.codebuddy/GROK.md');
61
+ result.created.push('.codebuddy/CODEBUDDY.md');
62
62
  }
63
63
  else {
64
- result.skipped.push('.codebuddy/GROK.md (already exists)');
64
+ result.skipped.push('.codebuddy/CODEBUDDY.md (already exists)');
65
65
  }
66
66
  // Create hooks.json
67
67
  if (options.includeHooks !== false) {
@@ -233,19 +233,19 @@ Safety checks:
233
233
  if (options.includeGitignore !== false) {
234
234
  const gitignorePath = path.join(workingDirectory, '.gitignore');
235
235
  const codebuddyIgnoreEntries = `
236
- # Grok CLI
236
+ # Code Buddy
237
237
  .codebuddy/sessions/
238
238
  .codebuddy/history/
239
239
  .codebuddy/user-settings.json
240
240
  `;
241
241
  if (fs.existsSync(gitignorePath)) {
242
242
  const currentContent = fs.readFileSync(gitignorePath, 'utf-8');
243
- if (!currentContent.includes('# Grok CLI')) {
243
+ if (!currentContent.includes('# Code Buddy') && !currentContent.includes('# Grok CLI')) {
244
244
  fs.appendFileSync(gitignorePath, codebuddyIgnoreEntries);
245
- result.created.push('.gitignore (updated with Grok entries)');
245
+ result.created.push('.gitignore (updated with Code Buddy entries)');
246
246
  }
247
247
  else {
248
- result.skipped.push('.gitignore (already has Grok entries)');
248
+ result.skipped.push('.gitignore (already has Code Buddy entries)');
249
249
  }
250
250
  }
251
251
  else {
@@ -253,16 +253,16 @@ Safety checks:
253
253
  result.created.push('.gitignore');
254
254
  }
255
255
  }
256
- // Create README for .grok directory
256
+ // Create README for .codebuddy directory
257
257
  const readmePath = path.join(codebuddyDir, 'README.md');
258
258
  if (!fs.existsSync(readmePath) || options.force) {
259
- const readmeContent = `# .grok Directory
259
+ const readmeContent = `# .codebuddy Directory
260
260
 
261
- This directory contains configuration and customization files for [Grok CLI](https://github.com/phuetz/code-buddy).
261
+ This directory contains configuration and customization files for [Code Buddy](https://github.com/phuetz/code-buddy).
262
262
 
263
263
  ## Files
264
264
 
265
- - **GROK.md** - Custom instructions that Grok follows when working in this project
265
+ - **CODEBUDDY.md** - Custom instructions that Code Buddy follows when working in this project
266
266
  - **settings.json** - Project-specific settings
267
267
  - **hooks.json** - Automated hooks (pre-commit, post-edit, etc.)
268
268
  - **mcp.json** - MCP server configurations (committable, shared with team)
@@ -295,7 +295,7 @@ Configure automated actions in \`hooks.json\`:
295
295
 
296
296
  ## MCP Servers
297
297
 
298
- Configure MCP servers in \`mcp.json\` to extend Grok's capabilities.
298
+ Configure MCP servers in \`mcp.json\` to extend Code Buddy's capabilities.
299
299
  This file can be committed to share servers with your team.
300
300
 
301
301
  ## Security
@@ -307,7 +307,7 @@ Configure security modes in \`security.json\`:
307
307
 
308
308
  ## More Information
309
309
 
310
- See the [Grok CLI documentation](https://github.com/phuetz/code-buddy) for more details.
310
+ See the [Code Buddy documentation](https://github.com/phuetz/code-buddy) for more details.
311
311
  `;
312
312
  fs.writeFileSync(readmePath, readmeContent);
313
313
  result.created.push('.codebuddy/README.md');
@@ -318,7 +318,7 @@ See the [Grok CLI documentation](https://github.com/phuetz/code-buddy) for more
318
318
  * Format init result for display
319
319
  */
320
320
  export function formatInitResult(result) {
321
- let output = '🚀 Grok Project Initialization\n' + '═'.repeat(50) + '\n\n';
321
+ let output = '🚀 Code Buddy Project Initialization\n' + '═'.repeat(50) + '\n\n';
322
322
  if (result.created.length > 0) {
323
323
  output += '✅ Created:\n';
324
324
  for (const item of result.created) {
@@ -341,7 +341,7 @@ export function formatInitResult(result) {
341
341
  output += '\n';
342
342
  }
343
343
  output += '─'.repeat(50) + '\n';
344
- output += '💡 Edit .codebuddy/GROK.md to customize Grok for this project\n';
344
+ output += '💡 Edit .codebuddy/CODEBUDDY.md to customize Code Buddy for this project\n';
345
345
  output += '📚 See .codebuddy/README.md for documentation';
346
346
  return output;
347
347
  }
@@ -1 +1 @@
1
- {"version":3,"file":"init-project.js","sourceRoot":"","sources":["../../src/utils/init-project.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"init-project.js","sourceRoot":"","sources":["../../src/utils/init-project.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,40 @@
1
+ /**
2
+ * Output Schema Validator
3
+ *
4
+ * Validates headless mode JSON output against a JSON Schema file (draft-07 subset).
5
+ * Supports: type, properties, required, enum, pattern, minLength, maxLength,
6
+ * minimum, maximum, items, additionalProperties.
7
+ *
8
+ * No external dependencies - uses basic manual JSON Schema validation.
9
+ */
10
+ export interface ValidationResult {
11
+ valid: boolean;
12
+ errors: string[];
13
+ }
14
+ interface JSONSchema {
15
+ type?: string | string[];
16
+ properties?: Record<string, JSONSchema>;
17
+ required?: string[];
18
+ enum?: unknown[];
19
+ pattern?: string;
20
+ minLength?: number;
21
+ maxLength?: number;
22
+ minimum?: number;
23
+ maximum?: number;
24
+ items?: JSONSchema;
25
+ additionalProperties?: boolean;
26
+ description?: string;
27
+ }
28
+ /**
29
+ * Load and parse a JSON Schema file from disk.
30
+ */
31
+ export declare function loadSchema(schemaPath: string): JSONSchema;
32
+ /**
33
+ * Validate output against a JSON Schema file.
34
+ *
35
+ * @param output - The parsed output value to validate
36
+ * @param schemaPath - Path to the JSON Schema file
37
+ * @returns Validation result with errors array
38
+ */
39
+ export declare function validateOutputSchema(output: unknown, schemaPath: string): ValidationResult;
40
+ export {};
@@ -0,0 +1,137 @@
1
+ /**
2
+ * Output Schema Validator
3
+ *
4
+ * Validates headless mode JSON output against a JSON Schema file (draft-07 subset).
5
+ * Supports: type, properties, required, enum, pattern, minLength, maxLength,
6
+ * minimum, maximum, items, additionalProperties.
7
+ *
8
+ * No external dependencies - uses basic manual JSON Schema validation.
9
+ */
10
+ import fs from 'fs';
11
+ import path from 'path';
12
+ /**
13
+ * Load and parse a JSON Schema file from disk.
14
+ */
15
+ export function loadSchema(schemaPath) {
16
+ const resolved = path.resolve(schemaPath);
17
+ const content = fs.readFileSync(resolved, 'utf-8');
18
+ return JSON.parse(content);
19
+ }
20
+ /**
21
+ * Validate a value against a JSON Schema (draft-07 subset).
22
+ */
23
+ function validateValue(value, schema, path) {
24
+ const errors = [];
25
+ // Type check
26
+ if (schema.type !== undefined) {
27
+ const types = Array.isArray(schema.type) ? schema.type : [schema.type];
28
+ const actualType = getJSONType(value);
29
+ if (!types.includes(actualType)) {
30
+ errors.push(`${path}: expected type ${types.join(' | ')}, got ${actualType}`);
31
+ return errors; // No point checking further if type is wrong
32
+ }
33
+ }
34
+ // Enum check
35
+ if (schema.enum !== undefined) {
36
+ if (!schema.enum.some(e => JSON.stringify(e) === JSON.stringify(value))) {
37
+ errors.push(`${path}: value ${JSON.stringify(value)} not in enum [${schema.enum.map(e => JSON.stringify(e)).join(', ')}]`);
38
+ }
39
+ }
40
+ // String-specific checks
41
+ if (typeof value === 'string') {
42
+ if (schema.pattern !== undefined) {
43
+ const regex = new RegExp(schema.pattern);
44
+ if (!regex.test(value)) {
45
+ errors.push(`${path}: string "${value}" does not match pattern "${schema.pattern}"`);
46
+ }
47
+ }
48
+ if (schema.minLength !== undefined && value.length < schema.minLength) {
49
+ errors.push(`${path}: string length ${value.length} is less than minLength ${schema.minLength}`);
50
+ }
51
+ if (schema.maxLength !== undefined && value.length > schema.maxLength) {
52
+ errors.push(`${path}: string length ${value.length} exceeds maxLength ${schema.maxLength}`);
53
+ }
54
+ }
55
+ // Number-specific checks
56
+ if (typeof value === 'number') {
57
+ if (schema.minimum !== undefined && value < schema.minimum) {
58
+ errors.push(`${path}: value ${value} is less than minimum ${schema.minimum}`);
59
+ }
60
+ if (schema.maximum !== undefined && value > schema.maximum) {
61
+ errors.push(`${path}: value ${value} exceeds maximum ${schema.maximum}`);
62
+ }
63
+ }
64
+ // Object-specific checks
65
+ if (typeof value === 'object' && value !== null && !Array.isArray(value)) {
66
+ const obj = value;
67
+ // Required properties
68
+ if (schema.required) {
69
+ for (const req of schema.required) {
70
+ if (!(req in obj)) {
71
+ errors.push(`${path}: missing required property "${req}"`);
72
+ }
73
+ }
74
+ }
75
+ // Validate properties
76
+ if (schema.properties) {
77
+ for (const [key, propSchema] of Object.entries(schema.properties)) {
78
+ if (key in obj) {
79
+ errors.push(...validateValue(obj[key], propSchema, `${path}.${key}`));
80
+ }
81
+ }
82
+ }
83
+ // Additional properties check
84
+ if (schema.additionalProperties === false && schema.properties) {
85
+ const allowed = new Set(Object.keys(schema.properties));
86
+ for (const key of Object.keys(obj)) {
87
+ if (!allowed.has(key)) {
88
+ errors.push(`${path}: unexpected additional property "${key}"`);
89
+ }
90
+ }
91
+ }
92
+ }
93
+ // Array-specific checks
94
+ if (Array.isArray(value)) {
95
+ if (schema.items) {
96
+ for (let i = 0; i < value.length; i++) {
97
+ errors.push(...validateValue(value[i], schema.items, `${path}[${i}]`));
98
+ }
99
+ }
100
+ }
101
+ return errors;
102
+ }
103
+ /**
104
+ * Get the JSON Schema type string for a value.
105
+ */
106
+ function getJSONType(value) {
107
+ if (value === null)
108
+ return 'null';
109
+ if (Array.isArray(value))
110
+ return 'array';
111
+ return typeof value; // 'string' | 'number' | 'boolean' | 'object' | 'undefined'
112
+ }
113
+ /**
114
+ * Validate output against a JSON Schema file.
115
+ *
116
+ * @param output - The parsed output value to validate
117
+ * @param schemaPath - Path to the JSON Schema file
118
+ * @returns Validation result with errors array
119
+ */
120
+ export function validateOutputSchema(output, schemaPath) {
121
+ try {
122
+ const schema = loadSchema(schemaPath);
123
+ const errors = validateValue(output, schema, '$');
124
+ return {
125
+ valid: errors.length === 0,
126
+ errors,
127
+ };
128
+ }
129
+ catch (err) {
130
+ const message = err instanceof Error ? err.message : String(err);
131
+ return {
132
+ valid: false,
133
+ errors: [`Failed to load or parse schema: ${message}`],
134
+ };
135
+ }
136
+ }
137
+ //# sourceMappingURL=output-schema-validator.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"output-schema-validator.js","sourceRoot":"","sources":["../../src/utils/output-schema-validator.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,24 @@
1
+ /**
2
+ * Safety & Misc Utilities
3
+ *
4
+ * NestedLaunchGuard: prevents recursive CLI launches
5
+ * ConfigBackupManager: timestamped config file backups with pruning
6
+ * FeedbackCommand: pre-filled GitHub issue URL generation
7
+ */
8
+ export declare class NestedLaunchGuard {
9
+ private envKey;
10
+ isNestedLaunch(): boolean;
11
+ setSessionMarker(sessionId: string): void;
12
+ getWarning(): string;
13
+ }
14
+ export declare class ConfigBackupManager {
15
+ createBackup(filePath: string): string;
16
+ listBackups(filePath: string): string[];
17
+ pruneBackups(filePath: string, keep?: number): string[];
18
+ restoreBackup(backupPath: string, targetPath: string): void;
19
+ }
20
+ export declare class FeedbackCommand {
21
+ getRepoUrl(): string;
22
+ generateIssueUrl(title?: string, body?: string): string;
23
+ formatFeedbackMessage(): string;
24
+ }
@@ -0,0 +1,91 @@
1
+ /**
2
+ * Safety & Misc Utilities
3
+ *
4
+ * NestedLaunchGuard: prevents recursive CLI launches
5
+ * ConfigBackupManager: timestamped config file backups with pruning
6
+ * FeedbackCommand: pre-filled GitHub issue URL generation
7
+ */
8
+ import * as fs from 'fs';
9
+ import * as path from 'path';
10
+ import { logger } from '../utils/logger.js';
11
+ // ============================================================================
12
+ // NestedLaunchGuard
13
+ // ============================================================================
14
+ export class NestedLaunchGuard {
15
+ envKey = 'CODEBUDDY_SESSION_ID';
16
+ isNestedLaunch() {
17
+ return !!process.env[this.envKey];
18
+ }
19
+ setSessionMarker(sessionId) {
20
+ process.env[this.envKey] = sessionId;
21
+ logger.debug(`Session marker set: ${sessionId}`);
22
+ }
23
+ getWarning() {
24
+ return 'Warning: You are launching Code Buddy inside an existing session. This may cause unexpected behavior. Use a separate terminal instead.';
25
+ }
26
+ }
27
+ // ============================================================================
28
+ // ConfigBackupManager
29
+ // ============================================================================
30
+ export class ConfigBackupManager {
31
+ createBackup(filePath) {
32
+ const timestamp = new Date().toISOString().replace(/[:.]/g, '-');
33
+ const backupPath = `${filePath}.${timestamp}.bak`;
34
+ fs.copyFileSync(filePath, backupPath);
35
+ logger.info(`Backup created: ${backupPath}`);
36
+ return backupPath;
37
+ }
38
+ listBackups(filePath) {
39
+ const dir = path.dirname(filePath);
40
+ const base = path.basename(filePath);
41
+ if (!fs.existsSync(dir))
42
+ return [];
43
+ const files = fs.readdirSync(dir);
44
+ return files
45
+ .filter(f => f.startsWith(base + '.') && f.endsWith('.bak'))
46
+ .map(f => path.join(dir, f))
47
+ .sort();
48
+ }
49
+ pruneBackups(filePath, keep = 5) {
50
+ const backups = this.listBackups(filePath);
51
+ const toRemove = backups.slice(0, Math.max(0, backups.length - keep));
52
+ for (const bp of toRemove) {
53
+ fs.unlinkSync(bp);
54
+ logger.debug(`Pruned backup: ${bp}`);
55
+ }
56
+ return toRemove;
57
+ }
58
+ restoreBackup(backupPath, targetPath) {
59
+ fs.copyFileSync(backupPath, targetPath);
60
+ logger.info(`Restored ${backupPath} -> ${targetPath}`);
61
+ }
62
+ }
63
+ // ============================================================================
64
+ // FeedbackCommand
65
+ // ============================================================================
66
+ export class FeedbackCommand {
67
+ getRepoUrl() {
68
+ return 'https://github.com/phuetz/code-buddy/issues/new';
69
+ }
70
+ generateIssueUrl(title, body) {
71
+ const base = this.getRepoUrl();
72
+ const params = new URLSearchParams();
73
+ if (title)
74
+ params.set('title', title);
75
+ if (body)
76
+ params.set('body', body);
77
+ const qs = params.toString();
78
+ return qs ? `${base}?${qs}` : base;
79
+ }
80
+ formatFeedbackMessage() {
81
+ return [
82
+ 'We appreciate your feedback!',
83
+ '',
84
+ 'To report a bug or request a feature, open a GitHub issue:',
85
+ ` ${this.getRepoUrl()}`,
86
+ '',
87
+ 'Please include steps to reproduce and your environment details.',
88
+ ].join('\n');
89
+ }
90
+ }
91
+ //# sourceMappingURL=safety-misc.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"safety-misc.js","sourceRoot":"","sources":["../../src/utils/safety-misc.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,40 @@
1
+ /**
2
+ * Session & Misc Enhancements
3
+ * Per-session settings, update channels, and elevated mode management.
4
+ */
5
+ export declare class SessionPersistentSettings {
6
+ private static instance;
7
+ private sessions;
8
+ static getInstance(): SessionPersistentSettings;
9
+ static resetInstance(): void;
10
+ set(sessionId: string, key: string, value: unknown): void;
11
+ get(sessionId: string, key: string): unknown;
12
+ getAll(sessionId: string): Record<string, unknown>;
13
+ clear(sessionId: string): void;
14
+ }
15
+ export declare class UpdateChannelManager {
16
+ private static instance;
17
+ readonly channels: readonly ["stable", "beta", "dev"];
18
+ private currentChannel;
19
+ static getInstance(): UpdateChannelManager;
20
+ static resetInstance(): void;
21
+ getCurrentChannel(): string;
22
+ setChannel(channel: string): void;
23
+ getLatestVersion(channel: string): {
24
+ version: string;
25
+ channel: string;
26
+ date: string;
27
+ };
28
+ isValidChannel(channel: string): boolean;
29
+ }
30
+ export declare class ElevatedModeManager {
31
+ private static instance;
32
+ private elevated;
33
+ static getInstance(): ElevatedModeManager;
34
+ static resetInstance(): void;
35
+ isElevated(): boolean;
36
+ enable(): void;
37
+ disable(): void;
38
+ toggle(): boolean;
39
+ getWarning(): string;
40
+ }
@@ -0,0 +1,118 @@
1
+ /**
2
+ * Session & Misc Enhancements
3
+ * Per-session settings, update channels, and elevated mode management.
4
+ */
5
+ import { logger } from './logger.js';
6
+ export class SessionPersistentSettings {
7
+ static instance = null;
8
+ sessions = new Map();
9
+ static getInstance() {
10
+ if (!SessionPersistentSettings.instance) {
11
+ SessionPersistentSettings.instance = new SessionPersistentSettings();
12
+ }
13
+ return SessionPersistentSettings.instance;
14
+ }
15
+ static resetInstance() {
16
+ SessionPersistentSettings.instance = null;
17
+ }
18
+ set(sessionId, key, value) {
19
+ if (!this.sessions.has(sessionId)) {
20
+ this.sessions.set(sessionId, new Map());
21
+ }
22
+ this.sessions.get(sessionId).set(key, value);
23
+ logger.debug(`Session ${sessionId}: set ${key}`);
24
+ }
25
+ get(sessionId, key) {
26
+ return this.sessions.get(sessionId)?.get(key);
27
+ }
28
+ getAll(sessionId) {
29
+ const map = this.sessions.get(sessionId);
30
+ if (!map)
31
+ return {};
32
+ const result = {};
33
+ for (const [k, v] of map) {
34
+ result[k] = v;
35
+ }
36
+ return result;
37
+ }
38
+ clear(sessionId) {
39
+ this.sessions.delete(sessionId);
40
+ logger.debug(`Session ${sessionId}: cleared`);
41
+ }
42
+ }
43
+ export class UpdateChannelManager {
44
+ static instance = null;
45
+ channels = ['stable', 'beta', 'dev'];
46
+ currentChannel = 'stable';
47
+ static getInstance() {
48
+ if (!UpdateChannelManager.instance) {
49
+ UpdateChannelManager.instance = new UpdateChannelManager();
50
+ }
51
+ return UpdateChannelManager.instance;
52
+ }
53
+ static resetInstance() {
54
+ UpdateChannelManager.instance = null;
55
+ }
56
+ getCurrentChannel() {
57
+ return this.currentChannel;
58
+ }
59
+ setChannel(channel) {
60
+ if (!this.isValidChannel(channel)) {
61
+ throw new Error(`Invalid channel: ${channel}. Must be one of: ${this.channels.join(', ')}`);
62
+ }
63
+ this.currentChannel = channel;
64
+ logger.debug(`Update channel set to: ${channel}`);
65
+ }
66
+ getLatestVersion(channel) {
67
+ if (!this.isValidChannel(channel)) {
68
+ throw new Error(`Invalid channel: ${channel}`);
69
+ }
70
+ // Stub implementation
71
+ const versions = {
72
+ stable: '1.0.0',
73
+ beta: '1.1.0-beta.1',
74
+ dev: '1.2.0-dev.1',
75
+ };
76
+ return {
77
+ version: versions[channel] || '0.0.0',
78
+ channel,
79
+ date: new Date().toISOString(),
80
+ };
81
+ }
82
+ isValidChannel(channel) {
83
+ return this.channels.includes(channel);
84
+ }
85
+ }
86
+ export class ElevatedModeManager {
87
+ static instance = null;
88
+ elevated = false;
89
+ static getInstance() {
90
+ if (!ElevatedModeManager.instance) {
91
+ ElevatedModeManager.instance = new ElevatedModeManager();
92
+ }
93
+ return ElevatedModeManager.instance;
94
+ }
95
+ static resetInstance() {
96
+ ElevatedModeManager.instance = null;
97
+ }
98
+ isElevated() {
99
+ return this.elevated;
100
+ }
101
+ enable() {
102
+ this.elevated = true;
103
+ logger.debug('Elevated mode enabled');
104
+ }
105
+ disable() {
106
+ this.elevated = false;
107
+ logger.debug('Elevated mode disabled');
108
+ }
109
+ toggle() {
110
+ this.elevated = !this.elevated;
111
+ logger.debug(`Elevated mode toggled to: ${this.elevated}`);
112
+ return this.elevated;
113
+ }
114
+ getWarning() {
115
+ return 'WARNING: Elevated mode bypasses safety confirmations. Use with caution.';
116
+ }
117
+ }
118
+ //# sourceMappingURL=session-enhancements.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"session-enhancements.js","sourceRoot":"","sources":["../../src/utils/session-enhancements.ts"],"names":[],"mappings":"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"}