@phuetz/code-buddy 0.1.18 → 0.1.20

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 (355) 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/analytics/dashboard.js +1 -1
  29. package/dist/analytics/dashboard.js.map +1 -1
  30. package/dist/channels/imessage/index.d.ts +40 -0
  31. package/dist/channels/imessage/index.js +69 -0
  32. package/dist/channels/imessage/index.js.map +1 -0
  33. package/dist/channels/line/index.d.ts +36 -0
  34. package/dist/channels/line/index.js +71 -0
  35. package/dist/channels/line/index.js.map +1 -0
  36. package/dist/channels/mattermost/index.d.ts +34 -0
  37. package/dist/channels/mattermost/index.js +56 -0
  38. package/dist/channels/mattermost/index.js.map +1 -0
  39. package/dist/channels/nextcloud-talk/index.d.ts +37 -0
  40. package/dist/channels/nextcloud-talk/index.js +67 -0
  41. package/dist/channels/nextcloud-talk/index.js.map +1 -0
  42. package/dist/channels/niche-channels.d.ts +61 -0
  43. package/dist/channels/niche-channels.js +131 -0
  44. package/dist/channels/niche-channels.js.map +1 -0
  45. package/dist/channels/nostr/index.d.ts +30 -0
  46. package/dist/channels/nostr/index.js +68 -0
  47. package/dist/channels/nostr/index.js.map +1 -0
  48. package/dist/channels/twilio-voice/index.d.ts +37 -0
  49. package/dist/channels/twilio-voice/index.js +76 -0
  50. package/dist/channels/twilio-voice/index.js.map +1 -0
  51. package/dist/channels/whatsapp/index.js +0 -1
  52. package/dist/channels/whatsapp/index.js.map +1 -1
  53. package/dist/channels/zalo/index.d.ts +28 -0
  54. package/dist/channels/zalo/index.js +53 -0
  55. package/dist/channels/zalo/index.js.map +1 -0
  56. package/dist/cloud/cloud-sessions.d.ts +56 -0
  57. package/dist/cloud/cloud-sessions.js +187 -0
  58. package/dist/cloud/cloud-sessions.js.map +1 -0
  59. package/dist/codebuddy/tool-definitions/advanced-tools.d.ts +1 -0
  60. package/dist/codebuddy/tool-definitions/advanced-tools.js +24 -0
  61. package/dist/codebuddy/tool-definitions/advanced-tools.js.map +1 -1
  62. package/dist/codebuddy/tool-definitions/index.d.ts +1 -1
  63. package/dist/codebuddy/tool-definitions/index.js +1 -1
  64. package/dist/codebuddy/tool-definitions/index.js.map +1 -1
  65. package/dist/commands/delegate.js +2 -2
  66. package/dist/commands/delegate.js.map +1 -1
  67. package/dist/commands/features.d.ts +1 -1
  68. package/dist/commands/features.js +1 -1
  69. package/dist/commands/handlers/auth-handler.d.ts +32 -0
  70. package/dist/commands/handlers/auth-handler.js +137 -0
  71. package/dist/commands/handlers/auth-handler.js.map +1 -0
  72. package/dist/commands/handlers/context-handler.d.ts +46 -0
  73. package/dist/commands/handlers/context-handler.js +102 -0
  74. package/dist/commands/handlers/context-handler.js.map +1 -0
  75. package/dist/commands/handlers/core-handlers.js +1 -1
  76. package/dist/commands/handlers/core-handlers.js.map +1 -1
  77. package/dist/commands/handlers/keybindings-handler.d.ts +30 -0
  78. package/dist/commands/handlers/keybindings-handler.js +124 -0
  79. package/dist/commands/handlers/keybindings-handler.js.map +1 -0
  80. package/dist/commands/handlers/missing-handlers.js +15 -14
  81. package/dist/commands/handlers/missing-handlers.js.map +1 -1
  82. package/dist/commands/handlers/session-commands.d.ts +17 -0
  83. package/dist/commands/handlers/session-commands.js +119 -0
  84. package/dist/commands/handlers/session-commands.js.map +1 -0
  85. package/dist/commands/handlers/worktree-handlers.d.ts +1 -1
  86. package/dist/commands/handlers/worktree-handlers.js +2 -2
  87. package/dist/commands/slash/builtin-commands.js +2 -2
  88. package/dist/commands/slash/builtin-commands.js.map +1 -1
  89. package/dist/config/admin-config.d.ts +54 -0
  90. package/dist/config/admin-config.js +144 -0
  91. package/dist/config/admin-config.js.map +1 -0
  92. package/dist/config/advanced-config.d.ts +118 -0
  93. package/dist/config/advanced-config.js +364 -0
  94. package/dist/config/advanced-config.js.map +1 -0
  95. package/dist/config/constants.d.ts +2 -2
  96. package/dist/config/constants.js +2 -2
  97. package/dist/config/constants.js.map +1 -1
  98. package/dist/config/managed-policies.d.ts +50 -0
  99. package/dist/config/managed-policies.js +120 -0
  100. package/dist/config/managed-policies.js.map +1 -0
  101. package/dist/config/settings-hierarchy.d.ts +59 -0
  102. package/dist/config/settings-hierarchy.js +188 -0
  103. package/dist/config/settings-hierarchy.js.map +1 -0
  104. package/dist/config/toml-config.js +1 -1
  105. package/dist/config/toml-config.js.map +1 -1
  106. package/dist/config/tool-profiles.d.ts +37 -0
  107. package/dist/config/tool-profiles.js +150 -0
  108. package/dist/config/tool-profiles.js.map +1 -0
  109. package/dist/config/user-settings.d.ts +31 -0
  110. package/dist/config/user-settings.js +66 -0
  111. package/dist/config/user-settings.js.map +1 -0
  112. package/dist/context/context-files.d.ts +1 -1
  113. package/dist/context/context-files.js +3 -3
  114. package/dist/context/context-files.js.map +1 -1
  115. package/dist/context/partial-summarizer.d.ts +32 -0
  116. package/dist/context/partial-summarizer.js +144 -0
  117. package/dist/context/partial-summarizer.js.map +1 -0
  118. package/dist/desktop/desktop-app.d.ts +44 -0
  119. package/dist/desktop/desktop-app.js +136 -0
  120. package/dist/desktop/desktop-app.js.map +1 -0
  121. package/dist/features/index.d.ts +1 -1
  122. package/dist/features/index.js +2 -2
  123. package/dist/features/index.js.map +1 -1
  124. package/dist/git/worktree-sessions.d.ts +24 -0
  125. package/dist/git/worktree-sessions.js +93 -0
  126. package/dist/git/worktree-sessions.js.map +1 -0
  127. package/dist/hooks/advanced-hooks.d.ts +110 -0
  128. package/dist/hooks/advanced-hooks.js +256 -0
  129. package/dist/hooks/advanced-hooks.js.map +1 -0
  130. package/dist/hooks/async-hooks.d.ts +73 -0
  131. package/dist/hooks/async-hooks.js +213 -0
  132. package/dist/hooks/async-hooks.js.map +1 -0
  133. package/dist/hooks/env-persistence.d.ts +58 -0
  134. package/dist/hooks/env-persistence.js +195 -0
  135. package/dist/hooks/env-persistence.js.map +1 -0
  136. package/dist/hooks/hook-events.d.ts +36 -0
  137. package/dist/hooks/hook-events.js +55 -0
  138. package/dist/hooks/hook-events.js.map +1 -0
  139. package/dist/hooks/hook-system.js +1 -1
  140. package/dist/hooks/hook-system.js.map +1 -1
  141. package/dist/hooks/smart-hooks.d.ts +85 -0
  142. package/dist/hooks/smart-hooks.js +199 -0
  143. package/dist/hooks/smart-hooks.js.map +1 -0
  144. package/dist/ide/jetbrains-plugin.d.ts +55 -0
  145. package/dist/ide/jetbrains-plugin.js +156 -0
  146. package/dist/ide/jetbrains-plugin.js.map +1 -0
  147. package/dist/ide/vscode-extension.d.ts +94 -0
  148. package/dist/ide/vscode-extension.js +229 -0
  149. package/dist/ide/vscode-extension.js.map +1 -0
  150. package/dist/index.js +77 -3
  151. package/dist/index.js.map +1 -1
  152. package/dist/input/file-autocomplete.d.ts +42 -0
  153. package/dist/input/file-autocomplete.js +154 -0
  154. package/dist/input/file-autocomplete.js.map +1 -0
  155. package/dist/integrations/chrome-bridge.d.ts +90 -0
  156. package/dist/integrations/chrome-bridge.js +151 -0
  157. package/dist/integrations/chrome-bridge.js.map +1 -0
  158. package/dist/integrations/github-action-runner.d.ts +40 -0
  159. package/dist/integrations/github-action-runner.js +163 -0
  160. package/dist/integrations/github-action-runner.js.map +1 -0
  161. package/dist/integrations/github-actions.js +1 -1
  162. package/dist/integrations/github-actions.js.map +1 -1
  163. package/dist/integrations/gitlab-ci-runner.d.ts +34 -0
  164. package/dist/integrations/gitlab-ci-runner.js +104 -0
  165. package/dist/integrations/gitlab-ci-runner.js.map +1 -0
  166. package/dist/integrations/pr-session-linker.d.ts +44 -0
  167. package/dist/integrations/pr-session-linker.js +103 -0
  168. package/dist/integrations/pr-session-linker.js.map +1 -0
  169. package/dist/integrations/tailscale.d.ts +36 -0
  170. package/dist/integrations/tailscale.js +101 -0
  171. package/dist/integrations/tailscale.js.map +1 -0
  172. package/dist/lsp/lsp-client.d.ts +68 -0
  173. package/dist/lsp/lsp-client.js +182 -0
  174. package/dist/lsp/lsp-client.js.map +1 -0
  175. package/dist/lsp/server.js +3 -3
  176. package/dist/lsp/server.js.map +1 -1
  177. package/dist/mcp/connectors.d.ts +28 -0
  178. package/dist/mcp/connectors.js +148 -0
  179. package/dist/mcp/connectors.js.map +1 -0
  180. package/dist/mcp/index.d.ts +7 -4
  181. package/dist/mcp/index.js +7 -4
  182. package/dist/mcp/index.js.map +1 -1
  183. package/dist/mcp/mcp-auto-discovery.d.ts +49 -0
  184. package/dist/mcp/mcp-auto-discovery.js +104 -0
  185. package/dist/mcp/mcp-auto-discovery.js.map +1 -0
  186. package/dist/mcp/mcp-server.d.ts +70 -0
  187. package/dist/mcp/mcp-server.js +374 -0
  188. package/dist/mcp/mcp-server.js.map +1 -0
  189. package/dist/memory/auto-memory.d.ts +53 -0
  190. package/dist/memory/auto-memory.js +250 -0
  191. package/dist/memory/auto-memory.js.map +1 -0
  192. package/dist/memory/hybrid-search.d.ts +51 -0
  193. package/dist/memory/hybrid-search.js +199 -0
  194. package/dist/memory/hybrid-search.js.map +1 -0
  195. package/dist/memory/memory-flush.d.ts +51 -0
  196. package/dist/memory/memory-flush.js +102 -0
  197. package/dist/memory/memory-flush.js.map +1 -0
  198. package/dist/memory/subagent-memory.d.ts +73 -0
  199. package/dist/memory/subagent-memory.js +172 -0
  200. package/dist/memory/subagent-memory.js.map +1 -0
  201. package/dist/nodes/device-node.d.ts +40 -0
  202. package/dist/nodes/device-node.js +117 -0
  203. package/dist/nodes/device-node.js.map +1 -0
  204. package/dist/observability/dashboard.d.ts +1 -1
  205. package/dist/observability/dashboard.js +2 -2
  206. package/dist/observability/dashboard.js.map +1 -1
  207. package/dist/offline/offline-mode.d.ts +1 -1
  208. package/dist/offline/offline-mode.js +1 -1
  209. package/dist/output/json-schema-output.d.ts +67 -0
  210. package/dist/output/json-schema-output.js +273 -0
  211. package/dist/output/json-schema-output.js.map +1 -0
  212. package/dist/persistence/session-picker.d.ts +22 -0
  213. package/dist/persistence/session-picker.js +47 -0
  214. package/dist/persistence/session-picker.js.map +1 -0
  215. package/dist/persistence/session-store.d.ts +11 -0
  216. package/dist/persistence/session-store.js +17 -0
  217. package/dist/persistence/session-store.js.map +1 -1
  218. package/dist/plugins/git-pinned-marketplace.d.ts +39 -0
  219. package/dist/plugins/git-pinned-marketplace.js +152 -0
  220. package/dist/plugins/git-pinned-marketplace.js.map +1 -0
  221. package/dist/plugins/marketplace.d.ts +1 -1
  222. package/dist/plugins/marketplace.js +1 -1
  223. package/dist/plugins/plugin-manifest.d.ts +116 -0
  224. package/dist/plugins/plugin-manifest.js +283 -0
  225. package/dist/plugins/plugin-manifest.js.map +1 -0
  226. package/dist/prompts/index.d.ts +1 -1
  227. package/dist/prompts/index.js +1 -1
  228. package/dist/providers/local-llm-provider.d.ts +1 -1
  229. package/dist/providers/local-llm-provider.js +1 -1
  230. package/dist/sandbox/os-sandbox.d.ts +49 -1
  231. package/dist/sandbox/os-sandbox.js +347 -6
  232. package/dist/sandbox/os-sandbox.js.map +1 -1
  233. package/dist/scripting/codebuddy-bindings.js +1 -1
  234. package/dist/scripting/codebuddy-bindings.js.map +1 -1
  235. package/dist/sdk/agent-sdk.d.ts +61 -0
  236. package/dist/sdk/agent-sdk.js +90 -0
  237. package/dist/sdk/agent-sdk.js.map +1 -0
  238. package/dist/security/index.d.ts +1 -1
  239. package/dist/security/index.js +1 -1
  240. package/dist/security/permission-modes.d.ts +76 -0
  241. package/dist/security/permission-modes.js +195 -0
  242. package/dist/security/permission-modes.js.map +1 -0
  243. package/dist/security/permission-patterns.d.ts +61 -0
  244. package/dist/security/permission-patterns.js +171 -0
  245. package/dist/security/permission-patterns.js.map +1 -0
  246. package/dist/security/safe-binaries.d.ts +23 -0
  247. package/dist/security/safe-binaries.js +96 -0
  248. package/dist/security/safe-binaries.js.map +1 -0
  249. package/dist/security/sender-policies.d.ts +46 -0
  250. package/dist/security/sender-policies.js +90 -0
  251. package/dist/security/sender-policies.js.map +1 -0
  252. package/dist/server/dashboard.d.ts +53 -0
  253. package/dist/server/dashboard.js +93 -0
  254. package/dist/server/dashboard.js.map +1 -0
  255. package/dist/services/system-prompt-override.d.ts +34 -0
  256. package/dist/services/system-prompt-override.js +64 -0
  257. package/dist/services/system-prompt-override.js.map +1 -0
  258. package/dist/skills/skill-enhancements.d.ts +37 -0
  259. package/dist/skills/skill-enhancements.js +69 -0
  260. package/dist/skills/skill-enhancements.js.map +1 -0
  261. package/dist/telemetry/otel-tracer.d.ts +98 -0
  262. package/dist/telemetry/otel-tracer.js +245 -0
  263. package/dist/telemetry/otel-tracer.js.map +1 -0
  264. package/dist/templates/export/html.template.js +2 -2
  265. package/dist/templates/export/markdown.template.js +1 -1
  266. package/dist/templates/export/markdown.template.js.map +1 -1
  267. package/dist/themes/default-themes.d.ts +1 -1
  268. package/dist/themes/default-themes.js +1 -1
  269. package/dist/themes/index.d.ts +1 -1
  270. package/dist/themes/index.js +1 -1
  271. package/dist/themes/theme-manager.d.ts +1 -1
  272. package/dist/themes/theme-manager.js +1 -1
  273. package/dist/themes/theme.d.ts +1 -1
  274. package/dist/themes/theme.js +1 -1
  275. package/dist/tools/browser-stub.d.ts +61 -0
  276. package/dist/tools/browser-stub.js +184 -0
  277. package/dist/tools/browser-stub.js.map +1 -0
  278. package/dist/tools/gateway-tool.d.ts +43 -0
  279. package/dist/tools/gateway-tool.js +92 -0
  280. package/dist/tools/gateway-tool.js.map +1 -0
  281. package/dist/tools/image-stub.d.ts +32 -0
  282. package/dist/tools/image-stub.js +97 -0
  283. package/dist/tools/image-stub.js.map +1 -0
  284. package/dist/tools/js-repl.d.ts +78 -0
  285. package/dist/tools/js-repl.js +280 -0
  286. package/dist/tools/js-repl.js.map +1 -0
  287. package/dist/tools/message-tool.d.ts +42 -0
  288. package/dist/tools/message-tool.js +113 -0
  289. package/dist/tools/message-tool.js.map +1 -0
  290. package/dist/types/errors.d.ts +1 -1
  291. package/dist/types/errors.js +1 -1
  292. package/dist/ui/app.js +1 -1
  293. package/dist/ui/app.js.map +1 -1
  294. package/dist/ui/cli-enhancements.d.ts +178 -0
  295. package/dist/ui/cli-enhancements.js +430 -0
  296. package/dist/ui/cli-enhancements.js.map +1 -0
  297. package/dist/ui/components/HelpSystem.d.ts +1 -1
  298. package/dist/ui/components/HelpSystem.js +1 -1
  299. package/dist/ui/context/theme-context.d.ts +1 -1
  300. package/dist/ui/context/theme-context.js +1 -1
  301. package/dist/ui/dashboard/dashboard.js +1 -1
  302. package/dist/ui/dashboard/dashboard.js.map +1 -1
  303. package/dist/ui/status-line.d.ts +90 -0
  304. package/dist/ui/status-line.js +160 -0
  305. package/dist/ui/status-line.js.map +1 -0
  306. package/dist/ui/terminal-enhancements.d.ts +34 -0
  307. package/dist/ui/terminal-enhancements.js +97 -0
  308. package/dist/ui/terminal-enhancements.js.map +1 -0
  309. package/dist/ui/ui-enhancements.d.ts +38 -0
  310. package/dist/ui/ui-enhancements.js +116 -0
  311. package/dist/ui/ui-enhancements.js.map +1 -0
  312. package/dist/undo/checkpoint-manager.d.ts +1 -1
  313. package/dist/undo/checkpoint-manager.js +1 -1
  314. package/dist/utils/codebuddy-home.d.ts +1 -1
  315. package/dist/utils/codebuddy-home.js +1 -1
  316. package/dist/utils/conversation-export.js +3 -3
  317. package/dist/utils/conversation-export.js.map +1 -1
  318. package/dist/utils/custom-commands.js +1 -1
  319. package/dist/utils/custom-instructions.js +4 -1
  320. package/dist/utils/custom-instructions.js.map +1 -1
  321. package/dist/utils/debug-logger.d.ts +1 -1
  322. package/dist/utils/debug-logger.js +1 -1
  323. package/dist/utils/errors.d.ts +2 -2
  324. package/dist/utils/errors.js +2 -2
  325. package/dist/utils/export-manager.js +3 -3
  326. package/dist/utils/export-manager.js.map +1 -1
  327. package/dist/utils/headless-output.js +1 -1
  328. package/dist/utils/headless-output.js.map +1 -1
  329. package/dist/utils/init-project.d.ts +1 -1
  330. package/dist/utils/init-project.js +20 -20
  331. package/dist/utils/init-project.js.map +1 -1
  332. package/dist/utils/logger.d.ts +1 -1
  333. package/dist/utils/logger.js +1 -1
  334. package/dist/utils/output-schema-validator.d.ts +40 -0
  335. package/dist/utils/output-schema-validator.js +137 -0
  336. package/dist/utils/output-schema-validator.js.map +1 -0
  337. package/dist/utils/safety-misc.d.ts +24 -0
  338. package/dist/utils/safety-misc.js +91 -0
  339. package/dist/utils/safety-misc.js.map +1 -0
  340. package/dist/utils/session-enhancements.d.ts +40 -0
  341. package/dist/utils/session-enhancements.js +118 -0
  342. package/dist/utils/session-enhancements.js.map +1 -0
  343. package/dist/utils/shell-completions.js +6 -6
  344. package/dist/utils/shell-snapshot.d.ts +38 -0
  345. package/dist/utils/shell-snapshot.js +323 -0
  346. package/dist/utils/shell-snapshot.js.map +1 -0
  347. package/dist/utils/stream-json-formatter.d.ts +77 -0
  348. package/dist/utils/stream-json-formatter.js +61 -0
  349. package/dist/utils/stream-json-formatter.js.map +1 -0
  350. package/dist/utils/terminal-notifications.js +1 -1
  351. package/dist/utils/terminal-notifications.js.map +1 -1
  352. package/dist/workflows/lobster-engine.d.ts +43 -0
  353. package/dist/workflows/lobster-engine.js +167 -0
  354. package/dist/workflows/lobster-engine.js.map +1 -0
  355. package/package.json +3 -6
@@ -0,0 +1,152 @@
1
+ /**
2
+ * Git-Pinned Plugin Marketplace
3
+ *
4
+ * Manages plugins pinned to specific Git commit SHAs for reproducible
5
+ * and auditable plugin installations.
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
+ // GitPinnedMarketplace
13
+ // ============================================================================
14
+ let instance = null;
15
+ export class GitPinnedMarketplace {
16
+ plugins = new Map();
17
+ configPath;
18
+ constructor(configDir) {
19
+ const dir = configDir || path.join(os.homedir(), '.codebuddy', 'plugins', 'git-pinned');
20
+ this.configPath = path.join(dir, 'plugins.json');
21
+ this.loadFromDisk();
22
+ }
23
+ static getInstance(configDir) {
24
+ if (!instance) {
25
+ instance = new GitPinnedMarketplace(configDir);
26
+ }
27
+ return instance;
28
+ }
29
+ static resetInstance() {
30
+ instance = null;
31
+ }
32
+ loadFromDisk() {
33
+ try {
34
+ if (fs.existsSync(this.configPath)) {
35
+ const data = JSON.parse(fs.readFileSync(this.configPath, 'utf-8'));
36
+ if (Array.isArray(data)) {
37
+ for (const plugin of data) {
38
+ this.plugins.set(plugin.name, plugin);
39
+ }
40
+ }
41
+ }
42
+ }
43
+ catch (err) {
44
+ logger.warn('Failed to load git-pinned plugins', { error: err });
45
+ }
46
+ }
47
+ saveToDisk() {
48
+ try {
49
+ const dir = path.dirname(this.configPath);
50
+ if (!fs.existsSync(dir)) {
51
+ fs.mkdirSync(dir, { recursive: true });
52
+ }
53
+ fs.writeFileSync(this.configPath, JSON.stringify(Array.from(this.plugins.values()), null, 2));
54
+ }
55
+ catch (err) {
56
+ logger.warn('Failed to save git-pinned plugins', { error: err });
57
+ }
58
+ }
59
+ /**
60
+ * Parse repo spec like "org/repo" or "org/repo@sha"
61
+ */
62
+ parseRepoSpec(repoSpec) {
63
+ const atIndex = repoSpec.indexOf('@');
64
+ let repoPath;
65
+ let sha;
66
+ if (atIndex !== -1) {
67
+ repoPath = repoSpec.substring(0, atIndex);
68
+ sha = repoSpec.substring(atIndex + 1);
69
+ }
70
+ else {
71
+ repoPath = repoSpec;
72
+ }
73
+ const parts = repoPath.split('/');
74
+ if (parts.length !== 2 || !parts[0] || !parts[1]) {
75
+ throw new Error(`Invalid repo spec: ${repoSpec}. Expected format: org/repo or org/repo@sha`);
76
+ }
77
+ return { org: parts[0], repo: parts[1], sha };
78
+ }
79
+ install(repoSpec) {
80
+ const { org, repo, sha } = this.parseRepoSpec(repoSpec);
81
+ const name = `${org}/${repo}`;
82
+ const commitSha = sha || 'HEAD';
83
+ const plugin = {
84
+ name,
85
+ repo: `https://github.com/${name}`,
86
+ commitSha,
87
+ installedAt: Date.now(),
88
+ verified: false,
89
+ commands: [],
90
+ hooks: [],
91
+ mcpServers: [],
92
+ };
93
+ this.plugins.set(name, plugin);
94
+ this.saveToDisk();
95
+ logger.info(`Installed git-pinned plugin: ${name}@${commitSha}`);
96
+ return plugin;
97
+ }
98
+ uninstall(name) {
99
+ const existed = this.plugins.delete(name);
100
+ if (existed) {
101
+ this.saveToDisk();
102
+ logger.info(`Uninstalled git-pinned plugin: ${name}`);
103
+ }
104
+ return existed;
105
+ }
106
+ list() {
107
+ return Array.from(this.plugins.values());
108
+ }
109
+ verify(name) {
110
+ const plugin = this.plugins.get(name);
111
+ if (!plugin) {
112
+ return false;
113
+ }
114
+ // In a real implementation, we would check the remote SHA
115
+ // For now, mark as verified if SHA is not HEAD
116
+ const isVerified = plugin.commitSha !== 'HEAD';
117
+ plugin.verified = isVerified;
118
+ this.saveToDisk();
119
+ return isVerified;
120
+ }
121
+ update(name) {
122
+ const plugin = this.plugins.get(name);
123
+ if (!plugin) {
124
+ return null;
125
+ }
126
+ // Simulate updating to a new SHA
127
+ plugin.commitSha = `updated-${Date.now().toString(16)}`;
128
+ plugin.verified = false;
129
+ plugin.installedAt = Date.now();
130
+ this.saveToDisk();
131
+ logger.info(`Updated git-pinned plugin: ${name}`);
132
+ return plugin;
133
+ }
134
+ getPlugin(name) {
135
+ return this.plugins.get(name);
136
+ }
137
+ getTrustWarning(repo) {
138
+ return `WARNING: Plugin from '${repo}' is not verified. ` +
139
+ 'Unverified plugins may contain malicious code. ' +
140
+ 'Review the source code and pin to a specific commit SHA before using.';
141
+ }
142
+ isInstalled(name) {
143
+ return this.plugins.has(name);
144
+ }
145
+ }
146
+ export function getGitPinnedMarketplace(configDir) {
147
+ return GitPinnedMarketplace.getInstance(configDir);
148
+ }
149
+ export function resetGitPinnedMarketplace() {
150
+ GitPinnedMarketplace.resetInstance();
151
+ }
152
+ //# sourceMappingURL=git-pinned-marketplace.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"git-pinned-marketplace.js","sourceRoot":"","sources":["../../src/plugins/git-pinned-marketplace.ts"],"names":[],"mappings":"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"}
@@ -9,7 +9,7 @@
9
9
  * - Version compatibility checking
10
10
  * - Plugin ratings and reviews
11
11
  *
12
- * Allows extending Grok CLI with community plugins.
12
+ * Allows extending Code Buddy with community plugins.
13
13
  */
14
14
  import { EventEmitter } from 'events';
15
15
  import { PluginSandbox } from './sandbox-worker.js';
@@ -9,7 +9,7 @@
9
9
  * - Version compatibility checking
10
10
  * - Plugin ratings and reviews
11
11
  *
12
- * Allows extending Grok CLI with community plugins.
12
+ * Allows extending Code Buddy with community plugins.
13
13
  */
14
14
  import { EventEmitter } from 'events';
15
15
  import fs from 'fs-extra';
@@ -0,0 +1,116 @@
1
+ /**
2
+ * Plugin Manifest System
3
+ *
4
+ * Extended manifest format with components, marketplace sources,
5
+ * namespaced skill resolution, and marketplace restrictions.
6
+ */
7
+ export type PluginSourceType = 'github' | 'git' | 'url' | 'npm' | 'file' | 'directory' | 'host-pattern';
8
+ export interface PluginManifest {
9
+ name: string;
10
+ version: string;
11
+ author?: string;
12
+ license?: string;
13
+ description?: string;
14
+ schema?: number;
15
+ components: {
16
+ skills?: string[];
17
+ agents?: string[];
18
+ hooks?: string;
19
+ mcpServers?: string[];
20
+ lspServers?: string[];
21
+ };
22
+ dependencies?: Record<string, string>;
23
+ marketplace?: {
24
+ source: PluginSourceType;
25
+ url?: string;
26
+ registry?: string;
27
+ };
28
+ }
29
+ export interface InstalledPlugin {
30
+ manifest: PluginManifest;
31
+ path: string;
32
+ enabled: boolean;
33
+ installedAt: number;
34
+ namespace: string;
35
+ }
36
+ export declare class PluginManifestManager {
37
+ private plugins;
38
+ private pluginDirs;
39
+ private strictKnownMarketplaces;
40
+ private extraKnownMarketplaces;
41
+ constructor(pluginDirs?: string[]);
42
+ /**
43
+ * Load plugin from manifest at a given path
44
+ */
45
+ loadPlugin(pluginPath: string): InstalledPlugin;
46
+ /**
47
+ * Read manifest from plugin path (stub - returns parsed JSON-like object)
48
+ */
49
+ private readManifest;
50
+ /**
51
+ * Load a plugin directly from a manifest object (for programmatic use)
52
+ */
53
+ loadPluginDirect(manifest: PluginManifest, pluginPath: string): InstalledPlugin;
54
+ /**
55
+ * Validate a plugin manifest
56
+ */
57
+ validateManifest(manifest: PluginManifest): {
58
+ valid: boolean;
59
+ errors: string[];
60
+ };
61
+ /**
62
+ * Install from various sources (stub implementation)
63
+ */
64
+ installFromSource(source: PluginSourceType, location: string): Promise<InstalledPlugin>;
65
+ /**
66
+ * Extract a plugin name from source type and location
67
+ */
68
+ private extractPluginName;
69
+ /**
70
+ * Resolve namespaced skill: "plugin-name:skill-name"
71
+ */
72
+ resolveSkill(namespacedName: string): {
73
+ pluginName: string;
74
+ skillName: string;
75
+ } | null;
76
+ /**
77
+ * List all plugins
78
+ */
79
+ listPlugins(): InstalledPlugin[];
80
+ /**
81
+ * Get a specific plugin by name
82
+ */
83
+ getPlugin(name: string): InstalledPlugin | null;
84
+ /**
85
+ * Enable a plugin
86
+ */
87
+ enablePlugin(name: string): boolean;
88
+ /**
89
+ * Disable a plugin
90
+ */
91
+ disablePlugin(name: string): boolean;
92
+ /**
93
+ * Uninstall a plugin
94
+ */
95
+ uninstallPlugin(name: string): boolean;
96
+ /**
97
+ * Check if a marketplace URL is allowed
98
+ */
99
+ isMarketplaceAllowed(url: string): boolean;
100
+ /**
101
+ * Set strict marketplace mode
102
+ */
103
+ setStrictMarketplaces(strict: boolean): void;
104
+ /**
105
+ * Add a known marketplace URL
106
+ */
107
+ addKnownMarketplace(url: string): void;
108
+ /**
109
+ * Get total plugin count
110
+ */
111
+ getPluginCount(): number;
112
+ /**
113
+ * Get enabled plugin count
114
+ */
115
+ getEnabledCount(): number;
116
+ }
@@ -0,0 +1,283 @@
1
+ /**
2
+ * Plugin Manifest System
3
+ *
4
+ * Extended manifest format with components, marketplace sources,
5
+ * namespaced skill resolution, and marketplace restrictions.
6
+ */
7
+ import { logger } from '../utils/logger.js';
8
+ // ============================================================================
9
+ // Known Marketplaces
10
+ // ============================================================================
11
+ const DEFAULT_KNOWN_MARKETPLACES = [
12
+ 'https://marketplace.codebuddy.dev',
13
+ 'https://registry.npmjs.org',
14
+ 'https://github.com',
15
+ ];
16
+ // ============================================================================
17
+ // Plugin Manifest Manager
18
+ // ============================================================================
19
+ export class PluginManifestManager {
20
+ plugins = new Map();
21
+ pluginDirs;
22
+ strictKnownMarketplaces = false;
23
+ extraKnownMarketplaces = [];
24
+ constructor(pluginDirs) {
25
+ this.pluginDirs = pluginDirs || [];
26
+ }
27
+ /**
28
+ * Load plugin from manifest at a given path
29
+ */
30
+ loadPlugin(pluginPath) {
31
+ const manifest = this.readManifest(pluginPath);
32
+ const validation = this.validateManifest(manifest);
33
+ if (!validation.valid) {
34
+ throw new Error(`Invalid manifest at ${pluginPath}: ${validation.errors.join(', ')}`);
35
+ }
36
+ const installed = {
37
+ manifest,
38
+ path: pluginPath,
39
+ enabled: true,
40
+ installedAt: Date.now(),
41
+ namespace: manifest.name,
42
+ };
43
+ this.plugins.set(manifest.name, installed);
44
+ logger.info(`Loaded plugin: ${manifest.name}@${manifest.version}`);
45
+ return installed;
46
+ }
47
+ /**
48
+ * Read manifest from plugin path (stub - returns parsed JSON-like object)
49
+ */
50
+ readManifest(pluginPath) {
51
+ // In real implementation this would read from disk
52
+ // For now we expect the pluginPath to be a manifest object serialized
53
+ throw new Error(`Cannot read manifest from ${pluginPath} - use installFromSource or loadPluginDirect`);
54
+ }
55
+ /**
56
+ * Load a plugin directly from a manifest object (for programmatic use)
57
+ */
58
+ loadPluginDirect(manifest, pluginPath) {
59
+ const validation = this.validateManifest(manifest);
60
+ if (!validation.valid) {
61
+ throw new Error(`Invalid manifest: ${validation.errors.join(', ')}`);
62
+ }
63
+ const installed = {
64
+ manifest,
65
+ path: pluginPath,
66
+ enabled: true,
67
+ installedAt: Date.now(),
68
+ namespace: manifest.name,
69
+ };
70
+ this.plugins.set(manifest.name, installed);
71
+ logger.info(`Loaded plugin: ${manifest.name}@${manifest.version}`);
72
+ return installed;
73
+ }
74
+ /**
75
+ * Validate a plugin manifest
76
+ */
77
+ validateManifest(manifest) {
78
+ const errors = [];
79
+ if (!manifest || typeof manifest !== 'object') {
80
+ return { valid: false, errors: ['Manifest must be a valid object'] };
81
+ }
82
+ // Required fields
83
+ if (!manifest.name || typeof manifest.name !== 'string') {
84
+ errors.push('Missing or invalid required field: name');
85
+ }
86
+ if (!manifest.version || typeof manifest.version !== 'string') {
87
+ errors.push('Missing or invalid required field: version');
88
+ }
89
+ // Version format
90
+ if (manifest.version && typeof manifest.version === 'string') {
91
+ if (!/^\d+\.\d+\.\d+(-[\w.]+)?$/.test(manifest.version)) {
92
+ errors.push('Version must be in semver format (e.g., 1.0.0)');
93
+ }
94
+ }
95
+ // Components must be an object
96
+ if (!manifest.components || typeof manifest.components !== 'object') {
97
+ errors.push('Missing or invalid required field: components');
98
+ }
99
+ else {
100
+ // Validate component arrays
101
+ const arrayFields = ['skills', 'agents', 'mcpServers', 'lspServers'];
102
+ for (const field of arrayFields) {
103
+ const val = manifest.components[field];
104
+ if (val !== undefined && !Array.isArray(val)) {
105
+ errors.push(`components.${field} must be an array`);
106
+ }
107
+ }
108
+ if (manifest.components.hooks !== undefined && typeof manifest.components.hooks !== 'string') {
109
+ errors.push('components.hooks must be a string path');
110
+ }
111
+ }
112
+ // Schema version
113
+ if (manifest.schema !== undefined && typeof manifest.schema !== 'number') {
114
+ errors.push('schema must be a number');
115
+ }
116
+ // Dependencies
117
+ if (manifest.dependencies !== undefined) {
118
+ if (typeof manifest.dependencies !== 'object' || Array.isArray(manifest.dependencies)) {
119
+ errors.push('dependencies must be an object');
120
+ }
121
+ }
122
+ // Marketplace
123
+ if (manifest.marketplace !== undefined) {
124
+ if (typeof manifest.marketplace !== 'object') {
125
+ errors.push('marketplace must be an object');
126
+ }
127
+ else {
128
+ const validSources = ['github', 'git', 'url', 'npm', 'file', 'directory', 'host-pattern'];
129
+ if (!validSources.includes(manifest.marketplace.source)) {
130
+ errors.push(`marketplace.source must be one of: ${validSources.join(', ')}`);
131
+ }
132
+ }
133
+ }
134
+ return { valid: errors.length === 0, errors };
135
+ }
136
+ /**
137
+ * Install from various sources (stub implementation)
138
+ */
139
+ async installFromSource(source, location) {
140
+ // Check marketplace restrictions
141
+ if (this.strictKnownMarketplaces && (source === 'url' || source === 'github' || source === 'git')) {
142
+ if (!this.isMarketplaceAllowed(location)) {
143
+ throw new Error(`Marketplace URL not allowed: ${location}`);
144
+ }
145
+ }
146
+ const pluginName = this.extractPluginName(source, location);
147
+ const manifest = {
148
+ name: pluginName,
149
+ version: '0.0.0',
150
+ components: {},
151
+ marketplace: { source, url: location },
152
+ };
153
+ const installed = {
154
+ manifest,
155
+ path: location,
156
+ enabled: true,
157
+ installedAt: Date.now(),
158
+ namespace: pluginName,
159
+ };
160
+ this.plugins.set(pluginName, installed);
161
+ logger.info(`Installed plugin from ${source}: ${pluginName}`);
162
+ return installed;
163
+ }
164
+ /**
165
+ * Extract a plugin name from source type and location
166
+ */
167
+ extractPluginName(source, location) {
168
+ switch (source) {
169
+ case 'github':
170
+ return location.replace(/^https?:\/\/github\.com\//, '').replace(/\.git$/, '');
171
+ case 'npm':
172
+ return location.replace(/^@/, '').replace(/\//, '-');
173
+ default:
174
+ // Use last path segment
175
+ const segments = location.split('/').filter(Boolean);
176
+ return segments[segments.length - 1] || location;
177
+ }
178
+ }
179
+ /**
180
+ * Resolve namespaced skill: "plugin-name:skill-name"
181
+ */
182
+ resolveSkill(namespacedName) {
183
+ const parts = namespacedName.split(':');
184
+ if (parts.length !== 2) {
185
+ return null;
186
+ }
187
+ const [pluginName, skillName] = parts;
188
+ if (!pluginName || !skillName) {
189
+ return null;
190
+ }
191
+ const plugin = this.plugins.get(pluginName);
192
+ if (!plugin || !plugin.enabled) {
193
+ return null;
194
+ }
195
+ return { pluginName, skillName };
196
+ }
197
+ /**
198
+ * List all plugins
199
+ */
200
+ listPlugins() {
201
+ return Array.from(this.plugins.values());
202
+ }
203
+ /**
204
+ * Get a specific plugin by name
205
+ */
206
+ getPlugin(name) {
207
+ return this.plugins.get(name) || null;
208
+ }
209
+ /**
210
+ * Enable a plugin
211
+ */
212
+ enablePlugin(name) {
213
+ const plugin = this.plugins.get(name);
214
+ if (!plugin)
215
+ return false;
216
+ plugin.enabled = true;
217
+ logger.info(`Enabled plugin: ${name}`);
218
+ return true;
219
+ }
220
+ /**
221
+ * Disable a plugin
222
+ */
223
+ disablePlugin(name) {
224
+ const plugin = this.plugins.get(name);
225
+ if (!plugin)
226
+ return false;
227
+ plugin.enabled = false;
228
+ logger.info(`Disabled plugin: ${name}`);
229
+ return true;
230
+ }
231
+ /**
232
+ * Uninstall a plugin
233
+ */
234
+ uninstallPlugin(name) {
235
+ const existed = this.plugins.delete(name);
236
+ if (existed) {
237
+ logger.info(`Uninstalled plugin: ${name}`);
238
+ }
239
+ return existed;
240
+ }
241
+ /**
242
+ * Check if a marketplace URL is allowed
243
+ */
244
+ isMarketplaceAllowed(url) {
245
+ const allKnown = [...DEFAULT_KNOWN_MARKETPLACES, ...this.extraKnownMarketplaces];
246
+ return allKnown.some(known => url.startsWith(known));
247
+ }
248
+ /**
249
+ * Set strict marketplace mode
250
+ */
251
+ setStrictMarketplaces(strict) {
252
+ this.strictKnownMarketplaces = strict;
253
+ logger.info(`Strict marketplaces: ${strict}`);
254
+ }
255
+ /**
256
+ * Add a known marketplace URL
257
+ */
258
+ addKnownMarketplace(url) {
259
+ if (!this.extraKnownMarketplaces.includes(url)) {
260
+ this.extraKnownMarketplaces.push(url);
261
+ logger.info(`Added known marketplace: ${url}`);
262
+ }
263
+ }
264
+ /**
265
+ * Get total plugin count
266
+ */
267
+ getPluginCount() {
268
+ return this.plugins.size;
269
+ }
270
+ /**
271
+ * Get enabled plugin count
272
+ */
273
+ getEnabledCount() {
274
+ let count = 0;
275
+ const plugins = Array.from(this.plugins.values());
276
+ for (const plugin of plugins) {
277
+ if (plugin.enabled)
278
+ count++;
279
+ }
280
+ return count;
281
+ }
282
+ }
283
+ //# sourceMappingURL=plugin-manifest.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"plugin-manifest.js","sourceRoot":"","sources":["../../src/plugins/plugin-manifest.ts"],"names":[],"mappings":"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"}
@@ -1,5 +1,5 @@
1
1
  /**
2
- * Prompts module - exports all system prompts for Grok CLI
2
+ * Prompts module - exports all system prompts for Code Buddy
3
3
  */
4
4
  export { getBaseSystemPrompt, getSystemPromptForMode, getChatOnlySystemPrompt, getChatOnlySystemPromptEN, YOLO_MODE_ADDITIONS, SAFE_MODE_ADDITIONS, CODE_MODE_ADDITIONS, RESEARCH_MODE_ADDITIONS, } from "./system-base.js";
5
5
  export { PromptManager, getPromptManager, resetPromptManager, isWellAlignedModel, needsExtraSecurity, autoSelectPromptId, type PromptConfig, type PromptSection, } from "./prompt-manager.js";
@@ -1,5 +1,5 @@
1
1
  /**
2
- * Prompts module - exports all system prompts for Grok CLI
2
+ * Prompts module - exports all system prompts for Code Buddy
3
3
  */
4
4
  export { getBaseSystemPrompt, getSystemPromptForMode, getChatOnlySystemPrompt, getChatOnlySystemPromptEN, YOLO_MODE_ADDITIONS, SAFE_MODE_ADDITIONS, CODE_MODE_ADDITIONS, RESEARCH_MODE_ADDITIONS, } from "./system-base.js";
5
5
  // New: External Markdown prompts system (inspired by mistral-vibe)
@@ -6,7 +6,7 @@
6
6
  * - WebLLM: Browser-based LLM with WebGPU
7
7
  * - Ollama: HTTP API to local Ollama server
8
8
  *
9
- * These providers allow Grok CLI to function without cloud API dependencies.
9
+ * These providers allow Code Buddy to function without cloud API dependencies.
10
10
  */
11
11
  import { EventEmitter } from 'events';
12
12
  export type LocalProviderType = 'ollama' | 'local-llama' | 'webllm';
@@ -6,7 +6,7 @@
6
6
  * - WebLLM: Browser-based LLM with WebGPU
7
7
  * - Ollama: HTTP API to local Ollama server
8
8
  *
9
- * These providers allow Grok CLI to function without cloud API dependencies.
9
+ * These providers allow Code Buddy to function without cloud API dependencies.
10
10
  */
11
11
  import { EventEmitter } from 'events';
12
12
  import fs from 'fs-extra';