@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,93 @@
1
+ /**
2
+ * Worktree Multi-Session Manager
3
+ *
4
+ * Links git worktrees to Code Buddy sessions for parallel branch work.
5
+ * Singleton pattern for global coordination.
6
+ */
7
+ import { execSync } from 'child_process';
8
+ import * as path from 'path';
9
+ import * as fs from 'fs';
10
+ import { logger } from '../utils/logger.js';
11
+ // ============================================================================
12
+ // WorktreeSessionManager
13
+ // ============================================================================
14
+ export class WorktreeSessionManager {
15
+ static instance = null;
16
+ sessions = new Map();
17
+ constructor() {
18
+ logger.debug('WorktreeSessionManager initialized');
19
+ }
20
+ static getInstance() {
21
+ if (!WorktreeSessionManager.instance) {
22
+ WorktreeSessionManager.instance = new WorktreeSessionManager();
23
+ }
24
+ return WorktreeSessionManager.instance;
25
+ }
26
+ static resetInstance() {
27
+ WorktreeSessionManager.instance = null;
28
+ }
29
+ createWorktreeSession(branch, basePath) {
30
+ const worktreePath = path.join(basePath, '.worktrees', branch);
31
+ // Create the worktree directory
32
+ fs.mkdirSync(path.dirname(worktreePath), { recursive: true });
33
+ try {
34
+ execSync(`git worktree add "${worktreePath}" "${branch}"`, {
35
+ cwd: basePath,
36
+ stdio: 'pipe',
37
+ });
38
+ }
39
+ catch (err) {
40
+ // If worktree already exists or branch doesn't exist, create with -b
41
+ try {
42
+ execSync(`git worktree add -b "${branch}" "${worktreePath}"`, {
43
+ cwd: basePath,
44
+ stdio: 'pipe',
45
+ });
46
+ }
47
+ catch (innerErr) {
48
+ logger.warn(`Failed to create worktree for ${branch}`);
49
+ throw innerErr;
50
+ }
51
+ }
52
+ const session = {
53
+ branch,
54
+ worktreePath,
55
+ sessionId: `wt-${branch}-${Date.now()}`,
56
+ createdAt: Date.now(),
57
+ };
58
+ this.sessions.set(branch, session);
59
+ logger.info(`Worktree session created: ${branch} at ${worktreePath}`);
60
+ return session;
61
+ }
62
+ listWorktreeSessions() {
63
+ return Array.from(this.sessions.values());
64
+ }
65
+ getSessionForWorktree(worktreePath) {
66
+ for (const session of this.sessions.values()) {
67
+ if (session.worktreePath === worktreePath) {
68
+ return session;
69
+ }
70
+ }
71
+ return undefined;
72
+ }
73
+ cleanupWorktree(branch) {
74
+ const session = this.sessions.get(branch);
75
+ if (!session)
76
+ return false;
77
+ try {
78
+ execSync(`git worktree remove "${session.worktreePath}" --force`, {
79
+ stdio: 'pipe',
80
+ });
81
+ }
82
+ catch {
83
+ logger.warn(`Failed to remove worktree for ${branch}`);
84
+ }
85
+ this.sessions.delete(branch);
86
+ logger.info(`Worktree session cleaned up: ${branch}`);
87
+ return true;
88
+ }
89
+ isWorktreeActive(branch) {
90
+ return this.sessions.has(branch);
91
+ }
92
+ }
93
+ //# sourceMappingURL=worktree-sessions.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"worktree-sessions.js","sourceRoot":"","sources":["../../src/git/worktree-sessions.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,110 @@
1
+ /**
2
+ * Advanced Hook System
3
+ *
4
+ * Extends the basic hook system with Claude Code-like capabilities:
5
+ * - Command hooks: run shell commands, parse JSON stdout for decisions
6
+ * - Prompt hooks: LLM-evaluated hooks (stub - returns allow with stored prompt)
7
+ * - Agent hooks: spawns subagent evaluation (stub - returns allow)
8
+ *
9
+ * Supports event matching with regex matchers, async fire-and-forget,
10
+ * one-shot hooks, and a registry for CRUD operations.
11
+ */
12
+ export type AdvancedHookType = 'command' | 'prompt' | 'agent';
13
+ export declare enum HookEvent {
14
+ PreToolUse = "PreToolUse",
15
+ PostToolUse = "PostToolUse",
16
+ PreBash = "PreBash",
17
+ PostBash = "PostBash",
18
+ PreEdit = "PreEdit",
19
+ PostEdit = "PostEdit",
20
+ SessionStart = "SessionStart",
21
+ SessionEnd = "SessionEnd",
22
+ PreCompact = "PreCompact",
23
+ Notification = "Notification",
24
+ SubagentStart = "SubagentStart",
25
+ SubagentStop = "SubagentStop",
26
+ PermissionRequest = "PermissionRequest",
27
+ TaskCompleted = "TaskCompleted"
28
+ }
29
+ export interface AdvancedHook {
30
+ name: string;
31
+ event: HookEvent;
32
+ type: AdvancedHookType;
33
+ matcher?: RegExp;
34
+ command?: string;
35
+ prompt?: string;
36
+ async?: boolean;
37
+ once?: boolean;
38
+ }
39
+ export interface HookDecision {
40
+ action: 'allow' | 'deny' | 'ask';
41
+ updatedInput?: Record<string, unknown>;
42
+ additionalContext?: string;
43
+ continue?: boolean;
44
+ }
45
+ export interface HookContext {
46
+ event: HookEvent;
47
+ toolName?: string;
48
+ input?: Record<string, unknown>;
49
+ output?: unknown;
50
+ [key: string]: unknown;
51
+ }
52
+ export declare class AdvancedHookRunner {
53
+ private workingDirectory;
54
+ private timeout;
55
+ constructor(workingDirectory?: string, timeout?: number);
56
+ /**
57
+ * Run a hook and return a decision
58
+ */
59
+ runHook(hook: AdvancedHook, context: HookContext): Promise<HookDecision>;
60
+ /**
61
+ * Fire-and-forget async hook execution
62
+ */
63
+ runHookAsync(hook: AdvancedHook, context: HookContext): Promise<void>;
64
+ /**
65
+ * Check if a hook matches a given event and optional tool name
66
+ */
67
+ matchesEvent(hook: AdvancedHook, event: HookEvent, toolName?: string): boolean;
68
+ private runCommandHook;
69
+ private runPromptHook;
70
+ private runAgentHook;
71
+ }
72
+ export declare class HookRegistry {
73
+ private hooks;
74
+ private firedOnceHooks;
75
+ /**
76
+ * Add a hook to the registry
77
+ */
78
+ addHook(hook: AdvancedHook): void;
79
+ /**
80
+ * Remove a hook by name
81
+ */
82
+ removeHook(name: string): boolean;
83
+ /**
84
+ * Get all hooks that match a given event, filtering out already-fired once hooks
85
+ */
86
+ getHooksForEvent(event: HookEvent, toolName?: string): AdvancedHook[];
87
+ /**
88
+ * Mark a once hook as fired
89
+ */
90
+ markFired(hookName: string): void;
91
+ /**
92
+ * List all registered hooks
93
+ */
94
+ listHooks(): AdvancedHook[];
95
+ /**
96
+ * Get a hook by name
97
+ */
98
+ getHook(name: string): AdvancedHook | undefined;
99
+ /**
100
+ * Clear all hooks
101
+ */
102
+ clear(): void;
103
+ /**
104
+ * Get the number of registered hooks
105
+ */
106
+ get size(): number;
107
+ }
108
+ export declare function getHookRegistry(): HookRegistry;
109
+ export declare function getAdvancedHookRunner(workingDirectory?: string): AdvancedHookRunner;
110
+ export declare function resetAdvancedHooks(): void;
@@ -0,0 +1,256 @@
1
+ /**
2
+ * Advanced Hook System
3
+ *
4
+ * Extends the basic hook system with Claude Code-like capabilities:
5
+ * - Command hooks: run shell commands, parse JSON stdout for decisions
6
+ * - Prompt hooks: LLM-evaluated hooks (stub - returns allow with stored prompt)
7
+ * - Agent hooks: spawns subagent evaluation (stub - returns allow)
8
+ *
9
+ * Supports event matching with regex matchers, async fire-and-forget,
10
+ * one-shot hooks, and a registry for CRUD operations.
11
+ */
12
+ import { spawn } from 'child_process';
13
+ import { logger } from '../utils/logger.js';
14
+ export var HookEvent;
15
+ (function (HookEvent) {
16
+ HookEvent["PreToolUse"] = "PreToolUse";
17
+ HookEvent["PostToolUse"] = "PostToolUse";
18
+ HookEvent["PreBash"] = "PreBash";
19
+ HookEvent["PostBash"] = "PostBash";
20
+ HookEvent["PreEdit"] = "PreEdit";
21
+ HookEvent["PostEdit"] = "PostEdit";
22
+ HookEvent["SessionStart"] = "SessionStart";
23
+ HookEvent["SessionEnd"] = "SessionEnd";
24
+ HookEvent["PreCompact"] = "PreCompact";
25
+ HookEvent["Notification"] = "Notification";
26
+ HookEvent["SubagentStart"] = "SubagentStart";
27
+ HookEvent["SubagentStop"] = "SubagentStop";
28
+ HookEvent["PermissionRequest"] = "PermissionRequest";
29
+ HookEvent["TaskCompleted"] = "TaskCompleted";
30
+ })(HookEvent || (HookEvent = {}));
31
+ // ============================================================================
32
+ // AdvancedHookRunner
33
+ // ============================================================================
34
+ export class AdvancedHookRunner {
35
+ workingDirectory;
36
+ timeout;
37
+ constructor(workingDirectory = process.cwd(), timeout = 30000) {
38
+ this.workingDirectory = workingDirectory;
39
+ this.timeout = timeout;
40
+ }
41
+ /**
42
+ * Run a hook and return a decision
43
+ */
44
+ async runHook(hook, context) {
45
+ switch (hook.type) {
46
+ case 'command':
47
+ return this.runCommandHook(hook, context);
48
+ case 'prompt':
49
+ return this.runPromptHook(hook, context);
50
+ case 'agent':
51
+ return this.runAgentHook(hook, context);
52
+ default:
53
+ logger.warn(`Unknown hook type: ${hook.type}`, { source: 'AdvancedHookRunner' });
54
+ return { action: 'allow' };
55
+ }
56
+ }
57
+ /**
58
+ * Fire-and-forget async hook execution
59
+ */
60
+ async runHookAsync(hook, context) {
61
+ this.runHook(hook, context).catch((error) => {
62
+ logger.warn(`Async hook "${hook.name}" failed: ${error}`, { source: 'AdvancedHookRunner' });
63
+ });
64
+ }
65
+ /**
66
+ * Check if a hook matches a given event and optional tool name
67
+ */
68
+ matchesEvent(hook, event, toolName) {
69
+ if (hook.event !== event) {
70
+ return false;
71
+ }
72
+ if (hook.matcher && toolName) {
73
+ return hook.matcher.test(toolName);
74
+ }
75
+ // If no matcher, match all tools for that event
76
+ if (!hook.matcher) {
77
+ return true;
78
+ }
79
+ // Has matcher but no toolName provided - no match
80
+ return false;
81
+ }
82
+ async runCommandHook(hook, context) {
83
+ if (!hook.command) {
84
+ logger.warn(`Command hook "${hook.name}" has no command`, { source: 'AdvancedHookRunner' });
85
+ return { action: 'allow' };
86
+ }
87
+ return new Promise((resolve) => {
88
+ let timedOut = false;
89
+ const child = spawn(hook.command, [], {
90
+ cwd: this.workingDirectory,
91
+ shell: true,
92
+ env: {
93
+ ...process.env,
94
+ HOOK_EVENT: context.event,
95
+ HOOK_TOOL: context.toolName || '',
96
+ HOOK_INPUT: JSON.stringify(context.input || {}),
97
+ },
98
+ });
99
+ let stdout = '';
100
+ let stderr = '';
101
+ const timeoutId = setTimeout(() => {
102
+ timedOut = true;
103
+ child.kill('SIGTERM');
104
+ }, this.timeout);
105
+ child.stdout?.on('data', (data) => {
106
+ stdout += data.toString();
107
+ });
108
+ child.stderr?.on('data', (data) => {
109
+ stderr += data.toString();
110
+ });
111
+ child.on('close', (code) => {
112
+ clearTimeout(timeoutId);
113
+ if (timedOut) {
114
+ logger.warn(`Command hook "${hook.name}" timed out`, { source: 'AdvancedHookRunner' });
115
+ resolve({ action: 'allow' });
116
+ return;
117
+ }
118
+ if (code !== 0) {
119
+ logger.warn(`Command hook "${hook.name}" exited with code ${code}: ${stderr}`, { source: 'AdvancedHookRunner' });
120
+ resolve({ action: 'allow' });
121
+ return;
122
+ }
123
+ try {
124
+ const decision = JSON.parse(stdout.trim());
125
+ if (decision.action && ['allow', 'deny', 'ask'].includes(decision.action)) {
126
+ resolve(decision);
127
+ }
128
+ else {
129
+ logger.warn(`Command hook "${hook.name}" returned invalid action`, { source: 'AdvancedHookRunner' });
130
+ resolve({ action: 'allow' });
131
+ }
132
+ }
133
+ catch {
134
+ // Non-JSON output: if exit code 0, allow; non-zero handled above
135
+ resolve({ action: 'allow' });
136
+ }
137
+ });
138
+ child.on('error', (error) => {
139
+ clearTimeout(timeoutId);
140
+ logger.warn(`Command hook "${hook.name}" failed: ${error.message}`, { source: 'AdvancedHookRunner' });
141
+ resolve({ action: 'allow' });
142
+ });
143
+ });
144
+ }
145
+ async runPromptHook(hook, _context) {
146
+ // Stub: returns allow with the prompt text stored as additional context
147
+ logger.debug(`Prompt hook "${hook.name}" evaluated (stub)`, { source: 'AdvancedHookRunner' });
148
+ return {
149
+ action: 'allow',
150
+ additionalContext: hook.prompt || undefined,
151
+ };
152
+ }
153
+ async runAgentHook(hook, _context) {
154
+ // Stub: returns allow
155
+ logger.debug(`Agent hook "${hook.name}" evaluated (stub)`, { source: 'AdvancedHookRunner' });
156
+ return { action: 'allow' };
157
+ }
158
+ }
159
+ // ============================================================================
160
+ // HookRegistry
161
+ // ============================================================================
162
+ export class HookRegistry {
163
+ hooks = new Map();
164
+ firedOnceHooks = new Set();
165
+ /**
166
+ * Add a hook to the registry
167
+ */
168
+ addHook(hook) {
169
+ this.hooks.set(hook.name, hook);
170
+ logger.debug(`Hook "${hook.name}" registered for event ${hook.event}`, { source: 'HookRegistry' });
171
+ }
172
+ /**
173
+ * Remove a hook by name
174
+ */
175
+ removeHook(name) {
176
+ const deleted = this.hooks.delete(name);
177
+ this.firedOnceHooks.delete(name);
178
+ if (deleted) {
179
+ logger.debug(`Hook "${name}" removed`, { source: 'HookRegistry' });
180
+ }
181
+ return deleted;
182
+ }
183
+ /**
184
+ * Get all hooks that match a given event, filtering out already-fired once hooks
185
+ */
186
+ getHooksForEvent(event, toolName) {
187
+ const runner = new AdvancedHookRunner();
188
+ const matching = [];
189
+ for (const hook of this.hooks.values()) {
190
+ // Skip once hooks that already fired
191
+ if (hook.once && this.firedOnceHooks.has(hook.name)) {
192
+ continue;
193
+ }
194
+ if (runner.matchesEvent(hook, event, toolName)) {
195
+ matching.push(hook);
196
+ }
197
+ }
198
+ return matching;
199
+ }
200
+ /**
201
+ * Mark a once hook as fired
202
+ */
203
+ markFired(hookName) {
204
+ const hook = this.hooks.get(hookName);
205
+ if (hook?.once) {
206
+ this.firedOnceHooks.add(hookName);
207
+ }
208
+ }
209
+ /**
210
+ * List all registered hooks
211
+ */
212
+ listHooks() {
213
+ return Array.from(this.hooks.values());
214
+ }
215
+ /**
216
+ * Get a hook by name
217
+ */
218
+ getHook(name) {
219
+ return this.hooks.get(name);
220
+ }
221
+ /**
222
+ * Clear all hooks
223
+ */
224
+ clear() {
225
+ this.hooks.clear();
226
+ this.firedOnceHooks.clear();
227
+ }
228
+ /**
229
+ * Get the number of registered hooks
230
+ */
231
+ get size() {
232
+ return this.hooks.size;
233
+ }
234
+ }
235
+ // ============================================================================
236
+ // Singleton
237
+ // ============================================================================
238
+ let registryInstance = null;
239
+ let runnerInstance = null;
240
+ export function getHookRegistry() {
241
+ if (!registryInstance) {
242
+ registryInstance = new HookRegistry();
243
+ }
244
+ return registryInstance;
245
+ }
246
+ export function getAdvancedHookRunner(workingDirectory) {
247
+ if (!runnerInstance || workingDirectory) {
248
+ runnerInstance = new AdvancedHookRunner(workingDirectory);
249
+ }
250
+ return runnerInstance;
251
+ }
252
+ export function resetAdvancedHooks() {
253
+ registryInstance = null;
254
+ runnerInstance = null;
255
+ }
256
+ //# sourceMappingURL=advanced-hooks.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"advanced-hooks.js","sourceRoot":"","sources":["../../src/hooks/advanced-hooks.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,73 @@
1
+ /**
2
+ * Async Hook Manager
3
+ *
4
+ * Manages asynchronous hook execution with concurrency control,
5
+ * job tracking, and result collection. Completed hook results
6
+ * can be injected as system messages into the next conversation turn.
7
+ */
8
+ import type { SmartHookConfig, SmartHookResult } from './smart-hooks.js';
9
+ export type AsyncHookStatus = 'running' | 'completed' | 'failed' | 'timeout' | 'cancelled';
10
+ export interface AsyncHookJob {
11
+ /** Unique job ID */
12
+ id: string;
13
+ /** Hook configuration */
14
+ hookConfig: SmartHookConfig;
15
+ /** Input data */
16
+ input: Record<string, any>;
17
+ /** Start timestamp */
18
+ startTime: number;
19
+ /** Current status */
20
+ status: AsyncHookStatus;
21
+ /** Result (when completed) */
22
+ result?: SmartHookResult;
23
+ /** Error message (when failed) */
24
+ error?: string;
25
+ }
26
+ export declare class AsyncHookManager {
27
+ private jobs;
28
+ private maxConcurrent;
29
+ private runner;
30
+ private completedSinceLastCheck;
31
+ private cancelTokens;
32
+ constructor(maxConcurrent?: number);
33
+ /**
34
+ * Submit an async hook for execution
35
+ */
36
+ submit(hook: SmartHookConfig, input: Record<string, any>): string;
37
+ /**
38
+ * Execute a job asynchronously
39
+ */
40
+ private executeJob;
41
+ /**
42
+ * Get a job by ID
43
+ */
44
+ getJob(jobId: string): AsyncHookJob | null;
45
+ /**
46
+ * Get all jobs completed since the last call to this method
47
+ */
48
+ getCompletedJobs(): AsyncHookJob[];
49
+ /**
50
+ * Get results formatted as system messages for the next conversation turn
51
+ */
52
+ getSystemMessages(): string[];
53
+ /**
54
+ * Clear all completed/failed jobs
55
+ */
56
+ clearCompleted(): void;
57
+ /**
58
+ * Cancel a running job
59
+ */
60
+ cancel(jobId: string): boolean;
61
+ /**
62
+ * Get the number of currently running jobs
63
+ */
64
+ getRunningCount(): number;
65
+ /**
66
+ * Get the total number of tracked jobs
67
+ */
68
+ getTotalCount(): number;
69
+ /**
70
+ * Dispose of all jobs and clean up
71
+ */
72
+ dispose(): void;
73
+ }