@phuetz/code-buddy 0.1.18 → 0.1.19

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (273) hide show
  1. package/dist/agent/background-tasks.d.ts +49 -0
  2. package/dist/agent/background-tasks.js +153 -0
  3. package/dist/agent/background-tasks.js.map +1 -0
  4. package/dist/agent/definitions/agent-definition-loader.d.ts +21 -0
  5. package/dist/agent/definitions/agent-definition-loader.js +161 -0
  6. package/dist/agent/definitions/agent-definition-loader.js.map +1 -0
  7. package/dist/agent/definitions/index.d.ts +1 -0
  8. package/dist/agent/definitions/index.js +2 -0
  9. package/dist/agent/definitions/index.js.map +1 -0
  10. package/dist/agent/extended-thinking.d.ts +64 -0
  11. package/dist/agent/extended-thinking.js +103 -0
  12. package/dist/agent/extended-thinking.js.map +1 -0
  13. package/dist/agent/prompt-suggestions.d.ts +55 -0
  14. package/dist/agent/prompt-suggestions.js +125 -0
  15. package/dist/agent/prompt-suggestions.js.map +1 -0
  16. package/dist/agent/rewind-manager.d.ts +59 -0
  17. package/dist/agent/rewind-manager.js +124 -0
  18. package/dist/agent/rewind-manager.js.map +1 -0
  19. package/dist/agent/teams/agent-team.d.ts +54 -0
  20. package/dist/agent/teams/agent-team.js +114 -0
  21. package/dist/agent/teams/agent-team.js.map +1 -0
  22. package/dist/agent/teams/index.d.ts +1 -0
  23. package/dist/agent/teams/index.js +2 -0
  24. package/dist/agent/teams/index.js.map +1 -0
  25. package/dist/agent/teams/team-v2.d.ts +166 -0
  26. package/dist/agent/teams/team-v2.js +376 -0
  27. package/dist/agent/teams/team-v2.js.map +1 -0
  28. package/dist/channels/imessage/index.d.ts +40 -0
  29. package/dist/channels/imessage/index.js +69 -0
  30. package/dist/channels/imessage/index.js.map +1 -0
  31. package/dist/channels/line/index.d.ts +36 -0
  32. package/dist/channels/line/index.js +71 -0
  33. package/dist/channels/line/index.js.map +1 -0
  34. package/dist/channels/mattermost/index.d.ts +34 -0
  35. package/dist/channels/mattermost/index.js +56 -0
  36. package/dist/channels/mattermost/index.js.map +1 -0
  37. package/dist/channels/nextcloud-talk/index.d.ts +37 -0
  38. package/dist/channels/nextcloud-talk/index.js +67 -0
  39. package/dist/channels/nextcloud-talk/index.js.map +1 -0
  40. package/dist/channels/niche-channels.d.ts +61 -0
  41. package/dist/channels/niche-channels.js +131 -0
  42. package/dist/channels/niche-channels.js.map +1 -0
  43. package/dist/channels/nostr/index.d.ts +30 -0
  44. package/dist/channels/nostr/index.js +68 -0
  45. package/dist/channels/nostr/index.js.map +1 -0
  46. package/dist/channels/twilio-voice/index.d.ts +37 -0
  47. package/dist/channels/twilio-voice/index.js +76 -0
  48. package/dist/channels/twilio-voice/index.js.map +1 -0
  49. package/dist/channels/whatsapp/index.js +0 -1
  50. package/dist/channels/whatsapp/index.js.map +1 -1
  51. package/dist/channels/zalo/index.d.ts +28 -0
  52. package/dist/channels/zalo/index.js +53 -0
  53. package/dist/channels/zalo/index.js.map +1 -0
  54. package/dist/cloud/cloud-sessions.d.ts +56 -0
  55. package/dist/cloud/cloud-sessions.js +187 -0
  56. package/dist/cloud/cloud-sessions.js.map +1 -0
  57. package/dist/codebuddy/tool-definitions/advanced-tools.d.ts +1 -0
  58. package/dist/codebuddy/tool-definitions/advanced-tools.js +24 -0
  59. package/dist/codebuddy/tool-definitions/advanced-tools.js.map +1 -1
  60. package/dist/codebuddy/tool-definitions/index.d.ts +1 -1
  61. package/dist/codebuddy/tool-definitions/index.js +1 -1
  62. package/dist/codebuddy/tool-definitions/index.js.map +1 -1
  63. package/dist/commands/handlers/auth-handler.d.ts +32 -0
  64. package/dist/commands/handlers/auth-handler.js +137 -0
  65. package/dist/commands/handlers/auth-handler.js.map +1 -0
  66. package/dist/commands/handlers/context-handler.d.ts +46 -0
  67. package/dist/commands/handlers/context-handler.js +102 -0
  68. package/dist/commands/handlers/context-handler.js.map +1 -0
  69. package/dist/commands/handlers/keybindings-handler.d.ts +30 -0
  70. package/dist/commands/handlers/keybindings-handler.js +124 -0
  71. package/dist/commands/handlers/keybindings-handler.js.map +1 -0
  72. package/dist/commands/handlers/session-commands.d.ts +17 -0
  73. package/dist/commands/handlers/session-commands.js +119 -0
  74. package/dist/commands/handlers/session-commands.js.map +1 -0
  75. package/dist/commands/slash/builtin-commands.js +1 -1
  76. package/dist/commands/slash/builtin-commands.js.map +1 -1
  77. package/dist/config/admin-config.d.ts +54 -0
  78. package/dist/config/admin-config.js +144 -0
  79. package/dist/config/admin-config.js.map +1 -0
  80. package/dist/config/advanced-config.d.ts +118 -0
  81. package/dist/config/advanced-config.js +364 -0
  82. package/dist/config/advanced-config.js.map +1 -0
  83. package/dist/config/managed-policies.d.ts +50 -0
  84. package/dist/config/managed-policies.js +120 -0
  85. package/dist/config/managed-policies.js.map +1 -0
  86. package/dist/config/settings-hierarchy.d.ts +59 -0
  87. package/dist/config/settings-hierarchy.js +188 -0
  88. package/dist/config/settings-hierarchy.js.map +1 -0
  89. package/dist/config/tool-profiles.d.ts +37 -0
  90. package/dist/config/tool-profiles.js +150 -0
  91. package/dist/config/tool-profiles.js.map +1 -0
  92. package/dist/config/user-settings.d.ts +31 -0
  93. package/dist/config/user-settings.js +66 -0
  94. package/dist/config/user-settings.js.map +1 -0
  95. package/dist/context/context-files.d.ts +1 -1
  96. package/dist/context/context-files.js +2 -2
  97. package/dist/context/context-files.js.map +1 -1
  98. package/dist/context/partial-summarizer.d.ts +32 -0
  99. package/dist/context/partial-summarizer.js +144 -0
  100. package/dist/context/partial-summarizer.js.map +1 -0
  101. package/dist/desktop/desktop-app.d.ts +44 -0
  102. package/dist/desktop/desktop-app.js +136 -0
  103. package/dist/desktop/desktop-app.js.map +1 -0
  104. package/dist/git/worktree-sessions.d.ts +24 -0
  105. package/dist/git/worktree-sessions.js +93 -0
  106. package/dist/git/worktree-sessions.js.map +1 -0
  107. package/dist/hooks/advanced-hooks.d.ts +110 -0
  108. package/dist/hooks/advanced-hooks.js +256 -0
  109. package/dist/hooks/advanced-hooks.js.map +1 -0
  110. package/dist/hooks/async-hooks.d.ts +73 -0
  111. package/dist/hooks/async-hooks.js +213 -0
  112. package/dist/hooks/async-hooks.js.map +1 -0
  113. package/dist/hooks/env-persistence.d.ts +58 -0
  114. package/dist/hooks/env-persistence.js +195 -0
  115. package/dist/hooks/env-persistence.js.map +1 -0
  116. package/dist/hooks/hook-events.d.ts +36 -0
  117. package/dist/hooks/hook-events.js +55 -0
  118. package/dist/hooks/hook-events.js.map +1 -0
  119. package/dist/hooks/smart-hooks.d.ts +85 -0
  120. package/dist/hooks/smart-hooks.js +199 -0
  121. package/dist/hooks/smart-hooks.js.map +1 -0
  122. package/dist/ide/jetbrains-plugin.d.ts +55 -0
  123. package/dist/ide/jetbrains-plugin.js +156 -0
  124. package/dist/ide/jetbrains-plugin.js.map +1 -0
  125. package/dist/ide/vscode-extension.d.ts +94 -0
  126. package/dist/ide/vscode-extension.js +229 -0
  127. package/dist/ide/vscode-extension.js.map +1 -0
  128. package/dist/index.js +77 -3
  129. package/dist/index.js.map +1 -1
  130. package/dist/input/file-autocomplete.d.ts +42 -0
  131. package/dist/input/file-autocomplete.js +154 -0
  132. package/dist/input/file-autocomplete.js.map +1 -0
  133. package/dist/integrations/chrome-bridge.d.ts +90 -0
  134. package/dist/integrations/chrome-bridge.js +151 -0
  135. package/dist/integrations/chrome-bridge.js.map +1 -0
  136. package/dist/integrations/github-action-runner.d.ts +40 -0
  137. package/dist/integrations/github-action-runner.js +163 -0
  138. package/dist/integrations/github-action-runner.js.map +1 -0
  139. package/dist/integrations/gitlab-ci-runner.d.ts +34 -0
  140. package/dist/integrations/gitlab-ci-runner.js +104 -0
  141. package/dist/integrations/gitlab-ci-runner.js.map +1 -0
  142. package/dist/integrations/pr-session-linker.d.ts +44 -0
  143. package/dist/integrations/pr-session-linker.js +103 -0
  144. package/dist/integrations/pr-session-linker.js.map +1 -0
  145. package/dist/integrations/tailscale.d.ts +36 -0
  146. package/dist/integrations/tailscale.js +101 -0
  147. package/dist/integrations/tailscale.js.map +1 -0
  148. package/dist/lsp/lsp-client.d.ts +68 -0
  149. package/dist/lsp/lsp-client.js +182 -0
  150. package/dist/lsp/lsp-client.js.map +1 -0
  151. package/dist/mcp/connectors.d.ts +28 -0
  152. package/dist/mcp/connectors.js +148 -0
  153. package/dist/mcp/connectors.js.map +1 -0
  154. package/dist/mcp/index.d.ts +7 -4
  155. package/dist/mcp/index.js +7 -4
  156. package/dist/mcp/index.js.map +1 -1
  157. package/dist/mcp/mcp-auto-discovery.d.ts +49 -0
  158. package/dist/mcp/mcp-auto-discovery.js +104 -0
  159. package/dist/mcp/mcp-auto-discovery.js.map +1 -0
  160. package/dist/mcp/mcp-server.d.ts +70 -0
  161. package/dist/mcp/mcp-server.js +374 -0
  162. package/dist/mcp/mcp-server.js.map +1 -0
  163. package/dist/memory/auto-memory.d.ts +53 -0
  164. package/dist/memory/auto-memory.js +250 -0
  165. package/dist/memory/auto-memory.js.map +1 -0
  166. package/dist/memory/hybrid-search.d.ts +51 -0
  167. package/dist/memory/hybrid-search.js +199 -0
  168. package/dist/memory/hybrid-search.js.map +1 -0
  169. package/dist/memory/memory-flush.d.ts +51 -0
  170. package/dist/memory/memory-flush.js +102 -0
  171. package/dist/memory/memory-flush.js.map +1 -0
  172. package/dist/memory/subagent-memory.d.ts +73 -0
  173. package/dist/memory/subagent-memory.js +172 -0
  174. package/dist/memory/subagent-memory.js.map +1 -0
  175. package/dist/nodes/device-node.d.ts +40 -0
  176. package/dist/nodes/device-node.js +117 -0
  177. package/dist/nodes/device-node.js.map +1 -0
  178. package/dist/output/json-schema-output.d.ts +67 -0
  179. package/dist/output/json-schema-output.js +273 -0
  180. package/dist/output/json-schema-output.js.map +1 -0
  181. package/dist/persistence/session-picker.d.ts +22 -0
  182. package/dist/persistence/session-picker.js +47 -0
  183. package/dist/persistence/session-picker.js.map +1 -0
  184. package/dist/persistence/session-store.d.ts +11 -0
  185. package/dist/persistence/session-store.js +17 -0
  186. package/dist/persistence/session-store.js.map +1 -1
  187. package/dist/plugins/git-pinned-marketplace.d.ts +39 -0
  188. package/dist/plugins/git-pinned-marketplace.js +152 -0
  189. package/dist/plugins/git-pinned-marketplace.js.map +1 -0
  190. package/dist/plugins/plugin-manifest.d.ts +116 -0
  191. package/dist/plugins/plugin-manifest.js +283 -0
  192. package/dist/plugins/plugin-manifest.js.map +1 -0
  193. package/dist/sandbox/os-sandbox.d.ts +49 -1
  194. package/dist/sandbox/os-sandbox.js +347 -6
  195. package/dist/sandbox/os-sandbox.js.map +1 -1
  196. package/dist/sdk/agent-sdk.d.ts +61 -0
  197. package/dist/sdk/agent-sdk.js +90 -0
  198. package/dist/sdk/agent-sdk.js.map +1 -0
  199. package/dist/security/permission-modes.d.ts +76 -0
  200. package/dist/security/permission-modes.js +195 -0
  201. package/dist/security/permission-modes.js.map +1 -0
  202. package/dist/security/permission-patterns.d.ts +61 -0
  203. package/dist/security/permission-patterns.js +171 -0
  204. package/dist/security/permission-patterns.js.map +1 -0
  205. package/dist/security/safe-binaries.d.ts +23 -0
  206. package/dist/security/safe-binaries.js +96 -0
  207. package/dist/security/safe-binaries.js.map +1 -0
  208. package/dist/security/sender-policies.d.ts +46 -0
  209. package/dist/security/sender-policies.js +90 -0
  210. package/dist/security/sender-policies.js.map +1 -0
  211. package/dist/server/dashboard.d.ts +53 -0
  212. package/dist/server/dashboard.js +93 -0
  213. package/dist/server/dashboard.js.map +1 -0
  214. package/dist/services/system-prompt-override.d.ts +34 -0
  215. package/dist/services/system-prompt-override.js +64 -0
  216. package/dist/services/system-prompt-override.js.map +1 -0
  217. package/dist/skills/skill-enhancements.d.ts +37 -0
  218. package/dist/skills/skill-enhancements.js +69 -0
  219. package/dist/skills/skill-enhancements.js.map +1 -0
  220. package/dist/telemetry/otel-tracer.d.ts +98 -0
  221. package/dist/telemetry/otel-tracer.js +245 -0
  222. package/dist/telemetry/otel-tracer.js.map +1 -0
  223. package/dist/tools/browser-stub.d.ts +61 -0
  224. package/dist/tools/browser-stub.js +184 -0
  225. package/dist/tools/browser-stub.js.map +1 -0
  226. package/dist/tools/gateway-tool.d.ts +43 -0
  227. package/dist/tools/gateway-tool.js +92 -0
  228. package/dist/tools/gateway-tool.js.map +1 -0
  229. package/dist/tools/image-stub.d.ts +32 -0
  230. package/dist/tools/image-stub.js +97 -0
  231. package/dist/tools/image-stub.js.map +1 -0
  232. package/dist/tools/js-repl.d.ts +78 -0
  233. package/dist/tools/js-repl.js +280 -0
  234. package/dist/tools/js-repl.js.map +1 -0
  235. package/dist/tools/message-tool.d.ts +42 -0
  236. package/dist/tools/message-tool.js +113 -0
  237. package/dist/tools/message-tool.js.map +1 -0
  238. package/dist/ui/cli-enhancements.d.ts +178 -0
  239. package/dist/ui/cli-enhancements.js +430 -0
  240. package/dist/ui/cli-enhancements.js.map +1 -0
  241. package/dist/ui/status-line.d.ts +90 -0
  242. package/dist/ui/status-line.js +160 -0
  243. package/dist/ui/status-line.js.map +1 -0
  244. package/dist/ui/terminal-enhancements.d.ts +34 -0
  245. package/dist/ui/terminal-enhancements.js +97 -0
  246. package/dist/ui/terminal-enhancements.js.map +1 -0
  247. package/dist/ui/ui-enhancements.d.ts +38 -0
  248. package/dist/ui/ui-enhancements.js +116 -0
  249. package/dist/ui/ui-enhancements.js.map +1 -0
  250. package/dist/utils/custom-instructions.js +4 -1
  251. package/dist/utils/custom-instructions.js.map +1 -1
  252. package/dist/utils/init-project.d.ts +1 -1
  253. package/dist/utils/init-project.js +20 -20
  254. package/dist/utils/init-project.js.map +1 -1
  255. package/dist/utils/output-schema-validator.d.ts +40 -0
  256. package/dist/utils/output-schema-validator.js +137 -0
  257. package/dist/utils/output-schema-validator.js.map +1 -0
  258. package/dist/utils/safety-misc.d.ts +24 -0
  259. package/dist/utils/safety-misc.js +91 -0
  260. package/dist/utils/safety-misc.js.map +1 -0
  261. package/dist/utils/session-enhancements.d.ts +40 -0
  262. package/dist/utils/session-enhancements.js +118 -0
  263. package/dist/utils/session-enhancements.js.map +1 -0
  264. package/dist/utils/shell-snapshot.d.ts +38 -0
  265. package/dist/utils/shell-snapshot.js +323 -0
  266. package/dist/utils/shell-snapshot.js.map +1 -0
  267. package/dist/utils/stream-json-formatter.d.ts +77 -0
  268. package/dist/utils/stream-json-formatter.js +61 -0
  269. package/dist/utils/stream-json-formatter.js.map +1 -0
  270. package/dist/workflows/lobster-engine.d.ts +43 -0
  271. package/dist/workflows/lobster-engine.js +167 -0
  272. package/dist/workflows/lobster-engine.js.map +1 -0
  273. package/package.json +3 -6
@@ -0,0 +1,90 @@
1
+ /**
2
+ * Custom Status Line
3
+ *
4
+ * Configurable status bar with template rendering, script execution,
5
+ * auto-refresh, and model/git/token display.
6
+ */
7
+ export interface StatusLineConfig {
8
+ enabled: boolean;
9
+ script?: string;
10
+ template?: string;
11
+ refreshInterval: number;
12
+ position: 'top' | 'bottom';
13
+ }
14
+ export interface StatusLineData {
15
+ model?: string;
16
+ gitBranch?: string;
17
+ tokenUsage?: {
18
+ used: number;
19
+ max: number;
20
+ };
21
+ uncommittedChanges?: number;
22
+ sessionId?: string;
23
+ customContent?: string;
24
+ }
25
+ export declare class StatusLineManager {
26
+ private config;
27
+ private currentData;
28
+ private refreshTimer;
29
+ constructor(config?: Partial<StatusLineConfig>);
30
+ /**
31
+ * Update status data
32
+ */
33
+ updateData(data: Partial<StatusLineData>): void;
34
+ /**
35
+ * Render the status line
36
+ */
37
+ render(): string;
38
+ /**
39
+ * Render template with placeholders
40
+ */
41
+ private renderTemplate;
42
+ /**
43
+ * Execute script for dynamic content
44
+ */
45
+ executeScript(): Promise<string>;
46
+ /**
47
+ * Start auto-refresh
48
+ */
49
+ startRefresh(): void;
50
+ /**
51
+ * Stop auto-refresh
52
+ */
53
+ stopRefresh(): void;
54
+ /**
55
+ * Check if auto-refreshing
56
+ */
57
+ isRefreshing(): boolean;
58
+ /**
59
+ * Format token usage
60
+ */
61
+ private formatTokenUsage;
62
+ /**
63
+ * Format git branch
64
+ */
65
+ private formatGitBranch;
66
+ /**
67
+ * Enable status line
68
+ */
69
+ enable(): void;
70
+ /**
71
+ * Disable status line
72
+ */
73
+ disable(): void;
74
+ /**
75
+ * Check if enabled
76
+ */
77
+ isEnabled(): boolean;
78
+ /**
79
+ * Get current data
80
+ */
81
+ getData(): StatusLineData;
82
+ /**
83
+ * Get config
84
+ */
85
+ getConfig(): StatusLineConfig;
86
+ /**
87
+ * Dispose resources
88
+ */
89
+ dispose(): void;
90
+ }
@@ -0,0 +1,160 @@
1
+ /**
2
+ * Custom Status Line
3
+ *
4
+ * Configurable status bar with template rendering, script execution,
5
+ * auto-refresh, and model/git/token display.
6
+ */
7
+ import { logger } from '../utils/logger.js';
8
+ import { execSync } from 'child_process';
9
+ // ============================================================================
10
+ // Defaults
11
+ // ============================================================================
12
+ const DEFAULT_CONFIG = {
13
+ enabled: false,
14
+ refreshInterval: 5000,
15
+ position: 'bottom',
16
+ };
17
+ const DEFAULT_TEMPLATE = '{{model}} | {{gitBranch}} | Tokens: {{tokenUsage}} | Changes: {{uncommittedChanges}}';
18
+ // ============================================================================
19
+ // Status Line Manager
20
+ // ============================================================================
21
+ export class StatusLineManager {
22
+ config;
23
+ currentData = {};
24
+ refreshTimer = null;
25
+ constructor(config) {
26
+ this.config = { ...DEFAULT_CONFIG, ...config };
27
+ }
28
+ /**
29
+ * Update status data
30
+ */
31
+ updateData(data) {
32
+ this.currentData = { ...this.currentData, ...data };
33
+ }
34
+ /**
35
+ * Render the status line
36
+ */
37
+ render() {
38
+ if (!this.config.enabled) {
39
+ return '';
40
+ }
41
+ // If there's custom content from a script, use it
42
+ if (this.currentData.customContent) {
43
+ return this.currentData.customContent;
44
+ }
45
+ const template = this.config.template || DEFAULT_TEMPLATE;
46
+ return this.renderTemplate(template, this.currentData);
47
+ }
48
+ /**
49
+ * Render template with placeholders
50
+ */
51
+ renderTemplate(template, data) {
52
+ let result = template;
53
+ result = result.replace(/\{\{model\}\}/g, data.model || 'unknown');
54
+ result = result.replace(/\{\{gitBranch\}\}/g, this.formatGitBranch(data.gitBranch || ''));
55
+ result = result.replace(/\{\{tokenUsage\}\}/g, data.tokenUsage ? this.formatTokenUsage(data.tokenUsage) : '0/0');
56
+ result = result.replace(/\{\{uncommittedChanges\}\}/g, String(data.uncommittedChanges ?? 0));
57
+ result = result.replace(/\{\{sessionId\}\}/g, data.sessionId || '');
58
+ return result;
59
+ }
60
+ /**
61
+ * Execute script for dynamic content
62
+ */
63
+ async executeScript() {
64
+ if (!this.config.script) {
65
+ return '';
66
+ }
67
+ try {
68
+ const output = execSync(this.config.script, {
69
+ timeout: 5000,
70
+ encoding: 'utf-8',
71
+ stdio: ['pipe', 'pipe', 'pipe'],
72
+ });
73
+ return output.trim();
74
+ }
75
+ catch (e) {
76
+ logger.warn(`Status line script error: ${e.message}`);
77
+ return '';
78
+ }
79
+ }
80
+ /**
81
+ * Start auto-refresh
82
+ */
83
+ startRefresh() {
84
+ if (this.refreshTimer)
85
+ return;
86
+ this.refreshTimer = setInterval(() => {
87
+ // In a real implementation, this would trigger a re-render
88
+ logger.debug('Status line refresh tick');
89
+ }, this.config.refreshInterval);
90
+ }
91
+ /**
92
+ * Stop auto-refresh
93
+ */
94
+ stopRefresh() {
95
+ if (this.refreshTimer) {
96
+ clearInterval(this.refreshTimer);
97
+ this.refreshTimer = null;
98
+ }
99
+ }
100
+ /**
101
+ * Check if auto-refreshing
102
+ */
103
+ isRefreshing() {
104
+ return this.refreshTimer !== null;
105
+ }
106
+ /**
107
+ * Format token usage
108
+ */
109
+ formatTokenUsage(usage) {
110
+ const pct = usage.max > 0 ? Math.round((usage.used / usage.max) * 100) : 0;
111
+ return `${usage.used}/${usage.max} (${pct}%)`;
112
+ }
113
+ /**
114
+ * Format git branch
115
+ */
116
+ formatGitBranch(branch) {
117
+ if (!branch)
118
+ return 'no branch';
119
+ return branch;
120
+ }
121
+ /**
122
+ * Enable status line
123
+ */
124
+ enable() {
125
+ this.config.enabled = true;
126
+ }
127
+ /**
128
+ * Disable status line
129
+ */
130
+ disable() {
131
+ this.config.enabled = false;
132
+ this.stopRefresh();
133
+ }
134
+ /**
135
+ * Check if enabled
136
+ */
137
+ isEnabled() {
138
+ return this.config.enabled;
139
+ }
140
+ /**
141
+ * Get current data
142
+ */
143
+ getData() {
144
+ return { ...this.currentData };
145
+ }
146
+ /**
147
+ * Get config
148
+ */
149
+ getConfig() {
150
+ return { ...this.config };
151
+ }
152
+ /**
153
+ * Dispose resources
154
+ */
155
+ dispose() {
156
+ this.stopRefresh();
157
+ this.currentData = {};
158
+ }
159
+ }
160
+ //# sourceMappingURL=status-line.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"status-line.js","sourceRoot":"","sources":["../../src/ui/status-line.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,34 @@
1
+ /**
2
+ * Terminal Enhancements
3
+ * OSC-8 hyperlinks, theming palette, and verbose mode.
4
+ */
5
+ export declare class OSC8Hyperlink {
6
+ static create(url: string, text: string): string;
7
+ static isSupported(): boolean;
8
+ static stripLinks(text: string): string;
9
+ }
10
+ export declare class LobsterPalette {
11
+ private static instance;
12
+ readonly accent = "#FF5A2D";
13
+ readonly success = "#2FBF71";
14
+ readonly warning = "#FFB020";
15
+ readonly error = "#E23D2D";
16
+ readonly info = "#3B82F6";
17
+ readonly dim = "#6B7280";
18
+ static getInstance(): LobsterPalette;
19
+ static resetInstance(): void;
20
+ getColor(name: string): string | undefined;
21
+ applyAnsi(text: string, colorName: string): string;
22
+ getAllColors(): Record<string, string>;
23
+ }
24
+ export declare class VerboseMode {
25
+ private static instance;
26
+ private enabled;
27
+ static getInstance(): VerboseMode;
28
+ static resetInstance(): void;
29
+ isEnabled(): boolean;
30
+ enable(): void;
31
+ disable(): void;
32
+ toggle(): boolean;
33
+ log(message: string): void;
34
+ }
@@ -0,0 +1,97 @@
1
+ /**
2
+ * Terminal Enhancements
3
+ * OSC-8 hyperlinks, theming palette, and verbose mode.
4
+ */
5
+ import { logger } from '../utils/logger.js';
6
+ export class OSC8Hyperlink {
7
+ static create(url, text) {
8
+ return `\x1b]8;;${url}\x1b\\${text}\x1b]8;;\x1b\\`;
9
+ }
10
+ static isSupported() {
11
+ const term = process.env.TERM_PROGRAM || '';
12
+ const supported = ['kitty', 'iTerm.app', 'iTerm2', 'WezTerm', 'vscode', 'Hyper'];
13
+ return supported.some(t => term.toLowerCase().includes(t.toLowerCase()));
14
+ }
15
+ static stripLinks(text) {
16
+ // Remove OSC-8 escape sequences
17
+ return text.replace(/\x1b\]8;;[^\x1b]*\x1b\\/g, '');
18
+ }
19
+ }
20
+ export class LobsterPalette {
21
+ static instance = null;
22
+ accent = '#FF5A2D';
23
+ success = '#2FBF71';
24
+ warning = '#FFB020';
25
+ error = '#E23D2D';
26
+ info = '#3B82F6';
27
+ dim = '#6B7280';
28
+ static getInstance() {
29
+ if (!LobsterPalette.instance) {
30
+ LobsterPalette.instance = new LobsterPalette();
31
+ }
32
+ return LobsterPalette.instance;
33
+ }
34
+ static resetInstance() {
35
+ LobsterPalette.instance = null;
36
+ }
37
+ getColor(name) {
38
+ const colors = this.getAllColors();
39
+ return colors[name];
40
+ }
41
+ applyAnsi(text, colorName) {
42
+ const ansiMap = {
43
+ accent: '\x1b[38;2;255;90;45m',
44
+ success: '\x1b[38;2;47;191;113m',
45
+ warning: '\x1b[38;2;255;176;32m',
46
+ error: '\x1b[38;2;226;61;45m',
47
+ info: '\x1b[38;2;59;130;246m',
48
+ dim: '\x1b[38;2;107;114;128m',
49
+ };
50
+ const code = ansiMap[colorName];
51
+ if (!code)
52
+ return text;
53
+ return `${code}${text}\x1b[0m`;
54
+ }
55
+ getAllColors() {
56
+ return {
57
+ accent: this.accent,
58
+ success: this.success,
59
+ warning: this.warning,
60
+ error: this.error,
61
+ info: this.info,
62
+ dim: this.dim,
63
+ };
64
+ }
65
+ }
66
+ export class VerboseMode {
67
+ static instance = null;
68
+ enabled = false;
69
+ static getInstance() {
70
+ if (!VerboseMode.instance) {
71
+ VerboseMode.instance = new VerboseMode();
72
+ }
73
+ return VerboseMode.instance;
74
+ }
75
+ static resetInstance() {
76
+ VerboseMode.instance = null;
77
+ }
78
+ isEnabled() {
79
+ return this.enabled;
80
+ }
81
+ enable() {
82
+ this.enabled = true;
83
+ }
84
+ disable() {
85
+ this.enabled = false;
86
+ }
87
+ toggle() {
88
+ this.enabled = !this.enabled;
89
+ return this.enabled;
90
+ }
91
+ log(message) {
92
+ if (this.enabled) {
93
+ logger.debug(`[VERBOSE] ${message}`);
94
+ }
95
+ }
96
+ }
97
+ //# sourceMappingURL=terminal-enhancements.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"terminal-enhancements.js","sourceRoot":"","sources":["../../src/ui/terminal-enhancements.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,EAAE,MAAM,EAAE,MAAM,oBAAoB,CAAC;AAE5C,MAAM,OAAO,aAAa;IACxB,MAAM,CAAC,MAAM,CAAC,GAAW,EAAE,IAAY;QACrC,OAAO,WAAW,GAAG,SAAS,IAAI,gBAAgB,CAAC;IACrD,CAAC;IAED,MAAM,CAAC,WAAW;QAChB,MAAM,IAAI,GAAG,OAAO,CAAC,GAAG,CAAC,YAAY,IAAI,EAAE,CAAC;QAC5C,MAAM,SAAS,GAAG,CAAC,OAAO,EAAE,WAAW,EAAE,QAAQ,EAAE,SAAS,EAAE,QAAQ,EAAE,OAAO,CAAC,CAAC;QACjF,OAAO,SAAS,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,IAAI,CAAC,WAAW,EAAE,CAAC,QAAQ,CAAC,CAAC,CAAC,WAAW,EAAE,CAAC,CAAC,CAAC;IAC3E,CAAC;IAED,MAAM,CAAC,UAAU,CAAC,IAAY;QAC5B,gCAAgC;QAChC,OAAO,IAAI,CAAC,OAAO,CAAC,0BAA0B,EAAE,EAAE,CAAC,CAAC;IACtD,CAAC;CACF;AAED,MAAM,OAAO,cAAc;IACjB,MAAM,CAAC,QAAQ,GAA0B,IAAI,CAAC;IAE7C,MAAM,GAAG,SAAS,CAAC;IACnB,OAAO,GAAG,SAAS,CAAC;IACpB,OAAO,GAAG,SAAS,CAAC;IACpB,KAAK,GAAG,SAAS,CAAC;IAClB,IAAI,GAAG,SAAS,CAAC;IACjB,GAAG,GAAG,SAAS,CAAC;IAEzB,MAAM,CAAC,WAAW;QAChB,IAAI,CAAC,cAAc,CAAC,QAAQ,EAAE,CAAC;YAC7B,cAAc,CAAC,QAAQ,GAAG,IAAI,cAAc,EAAE,CAAC;QACjD,CAAC;QACD,OAAO,cAAc,CAAC,QAAQ,CAAC;IACjC,CAAC;IAED,MAAM,CAAC,aAAa;QAClB,cAAc,CAAC,QAAQ,GAAG,IAAI,CAAC;IACjC,CAAC;IAED,QAAQ,CAAC,IAAY;QACnB,MAAM,MAAM,GAAG,IAAI,CAAC,YAAY,EAAE,CAAC;QACnC,OAAO,MAAM,CAAC,IAAI,CAAC,CAAC;IACtB,CAAC;IAED,SAAS,CAAC,IAAY,EAAE,SAAiB;QACvC,MAAM,OAAO,GAA2B;YACtC,MAAM,EAAE,sBAAsB;YAC9B,OAAO,EAAE,uBAAuB;YAChC,OAAO,EAAE,uBAAuB;YAChC,KAAK,EAAE,sBAAsB;YAC7B,IAAI,EAAE,uBAAuB;YAC7B,GAAG,EAAE,wBAAwB;SAC9B,CAAC;QACF,MAAM,IAAI,GAAG,OAAO,CAAC,SAAS,CAAC,CAAC;QAChC,IAAI,CAAC,IAAI;YAAE,OAAO,IAAI,CAAC;QACvB,OAAO,GAAG,IAAI,GAAG,IAAI,SAAS,CAAC;IACjC,CAAC;IAED,YAAY;QACV,OAAO;YACL,MAAM,EAAE,IAAI,CAAC,MAAM;YACnB,OAAO,EAAE,IAAI,CAAC,OAAO;YACrB,OAAO,EAAE,IAAI,CAAC,OAAO;YACrB,KAAK,EAAE,IAAI,CAAC,KAAK;YACjB,IAAI,EAAE,IAAI,CAAC,IAAI;YACf,GAAG,EAAE,IAAI,CAAC,GAAG;SACd,CAAC;IACJ,CAAC;;AAGH,MAAM,OAAO,WAAW;IACd,MAAM,CAAC,QAAQ,GAAuB,IAAI,CAAC;IAC3C,OAAO,GAAY,KAAK,CAAC;IAEjC,MAAM,CAAC,WAAW;QAChB,IAAI,CAAC,WAAW,CAAC,QAAQ,EAAE,CAAC;YAC1B,WAAW,CAAC,QAAQ,GAAG,IAAI,WAAW,EAAE,CAAC;QAC3C,CAAC;QACD,OAAO,WAAW,CAAC,QAAQ,CAAC;IAC9B,CAAC;IAED,MAAM,CAAC,aAAa;QAClB,WAAW,CAAC,QAAQ,GAAG,IAAI,CAAC;IAC9B,CAAC;IAED,SAAS;QACP,OAAO,IAAI,CAAC,OAAO,CAAC;IACtB,CAAC;IAED,MAAM;QACJ,IAAI,CAAC,OAAO,GAAG,IAAI,CAAC;IACtB,CAAC;IAED,OAAO;QACL,IAAI,CAAC,OAAO,GAAG,KAAK,CAAC;IACvB,CAAC;IAED,MAAM;QACJ,IAAI,CAAC,OAAO,GAAG,CAAC,IAAI,CAAC,OAAO,CAAC;QAC7B,OAAO,IAAI,CAAC,OAAO,CAAC;IACtB,CAAC;IAED,GAAG,CAAC,OAAe;QACjB,IAAI,IAAI,CAAC,OAAO,EAAE,CAAC;YACjB,MAAM,CAAC,KAAK,CAAC,aAAa,OAAO,EAAE,CAAC,CAAC;QACvC,CAAC;IACH,CAAC"}
@@ -0,0 +1,38 @@
1
+ /**
2
+ * UI Enhancements
3
+ *
4
+ * BrailleSpinner: animated braille spinner with shimmer effect
5
+ * CJKInputHandler: full-width character normalization and display width
6
+ * ITermProgressBar: iTerm2 native progress bar via escape codes
7
+ */
8
+ export declare const BRAILLE_CHARS: string[];
9
+ export declare class BrailleSpinner {
10
+ private tick;
11
+ private timer;
12
+ private label;
13
+ private stream;
14
+ getFrame(tick: number): string;
15
+ getShimmer(text: string, tick: number): string;
16
+ start(label: string, stream: NodeJS.WriteStream): void;
17
+ stop(): void;
18
+ update(label: string): void;
19
+ }
20
+ export declare class CJKInputHandler {
21
+ /**
22
+ * Check if a character is full-width (zenkaku)
23
+ */
24
+ isFullWidth(char: string): boolean;
25
+ /**
26
+ * Convert full-width ASCII variants (FF01-FF5E) to half-width
27
+ */
28
+ normalizeFullWidth(input: string): string;
29
+ /**
30
+ * Get display width accounting for CJK double-width characters
31
+ */
32
+ getDisplayWidth(text: string): number;
33
+ }
34
+ export declare class ITermProgressBar {
35
+ isITerm2(): boolean;
36
+ setProgress(percent: number): void;
37
+ clear(): void;
38
+ }
@@ -0,0 +1,116 @@
1
+ /**
2
+ * UI Enhancements
3
+ *
4
+ * BrailleSpinner: animated braille spinner with shimmer effect
5
+ * CJKInputHandler: full-width character normalization and display width
6
+ * ITermProgressBar: iTerm2 native progress bar via escape codes
7
+ */
8
+ import { logger } from '../utils/logger.js';
9
+ // ============================================================================
10
+ // BrailleSpinner
11
+ // ============================================================================
12
+ export const BRAILLE_CHARS = ['⠋', '⠙', '⠹', '⠸', '⠼', '⠴', '⠦', '⠧', '⠇', '⠏'];
13
+ export class BrailleSpinner {
14
+ tick = 0;
15
+ timer = null;
16
+ label = '';
17
+ stream = null;
18
+ getFrame(tick) {
19
+ return BRAILLE_CHARS[tick % BRAILLE_CHARS.length];
20
+ }
21
+ getShimmer(text, tick) {
22
+ const brightness = 0.7 + 0.3 * Math.sin(tick * 0.3);
23
+ const level = Math.round(brightness * 255);
24
+ const hex = level.toString(16).padStart(2, '0');
25
+ return `\x1b[38;2;${level};${level};${level}m${text}\x1b[0m`;
26
+ }
27
+ start(label, stream) {
28
+ this.label = label;
29
+ this.stream = stream;
30
+ this.tick = 0;
31
+ this.timer = setInterval(() => {
32
+ const frame = this.getFrame(this.tick);
33
+ stream.write(`\r${frame} ${this.label}`);
34
+ this.tick++;
35
+ }, 80);
36
+ logger.debug(`Spinner started: ${label}`);
37
+ }
38
+ stop() {
39
+ if (this.timer) {
40
+ clearInterval(this.timer);
41
+ this.timer = null;
42
+ }
43
+ if (this.stream) {
44
+ this.stream.write('\r\x1b[K');
45
+ }
46
+ logger.debug('Spinner stopped');
47
+ }
48
+ update(label) {
49
+ this.label = label;
50
+ }
51
+ }
52
+ // ============================================================================
53
+ // CJKInputHandler
54
+ // ============================================================================
55
+ export class CJKInputHandler {
56
+ /**
57
+ * Check if a character is full-width (zenkaku)
58
+ */
59
+ isFullWidth(char) {
60
+ const code = char.charCodeAt(0);
61
+ return ((code >= 0xFF01 && code <= 0xFF5E) || // Fullwidth ASCII variants
62
+ (code >= 0x3000 && code <= 0x303F) || // CJK Symbols and Punctuation
63
+ (code >= 0x4E00 && code <= 0x9FFF) || // CJK Unified Ideographs
64
+ (code >= 0xAC00 && code <= 0xD7AF) || // Hangul Syllables
65
+ (code >= 0x3040 && code <= 0x309F) || // Hiragana
66
+ (code >= 0x30A0 && code <= 0x30FF) || // Katakana
67
+ code === 0x3000 // Ideographic space
68
+ );
69
+ }
70
+ /**
71
+ * Convert full-width ASCII variants (FF01-FF5E) to half-width
72
+ */
73
+ normalizeFullWidth(input) {
74
+ let result = '';
75
+ for (const char of input) {
76
+ const code = char.charCodeAt(0);
77
+ if (code >= 0xFF01 && code <= 0xFF5E) {
78
+ result += String.fromCharCode(code - 0xFEE0);
79
+ }
80
+ else if (code === 0x3000) {
81
+ result += ' ';
82
+ }
83
+ else {
84
+ result += char;
85
+ }
86
+ }
87
+ return result;
88
+ }
89
+ /**
90
+ * Get display width accounting for CJK double-width characters
91
+ */
92
+ getDisplayWidth(text) {
93
+ let width = 0;
94
+ for (const char of text) {
95
+ width += this.isFullWidth(char) ? 2 : 1;
96
+ }
97
+ return width;
98
+ }
99
+ }
100
+ // ============================================================================
101
+ // ITermProgressBar
102
+ // ============================================================================
103
+ export class ITermProgressBar {
104
+ isITerm2() {
105
+ return (process.env.TERM_PROGRAM === 'iTerm.app' ||
106
+ process.env.LC_TERMINAL === 'iTerm2');
107
+ }
108
+ setProgress(percent) {
109
+ const clamped = Math.max(0, Math.min(100, Math.round(percent)));
110
+ process.stdout.write(`\x1b]9;4;1;${clamped}\x07`);
111
+ }
112
+ clear() {
113
+ process.stdout.write('\x1b]9;4;0;0\x07');
114
+ }
115
+ }
116
+ //# sourceMappingURL=ui-enhancements.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ui-enhancements.js","sourceRoot":"","sources":["../../src/ui/ui-enhancements.ts"],"names":[],"mappings":"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"}
@@ -3,7 +3,10 @@ import * as path from 'path';
3
3
  import { logger } from './logger.js';
4
4
  export function loadCustomInstructions(workingDirectory = process.cwd()) {
5
5
  try {
6
- const instructionsPath = path.join(workingDirectory, '.codebuddy', 'GROK.md');
6
+ // Try CODEBUDDY.md first, fall back to GROK.md for backwards compatibility
7
+ const codebuddyPath = path.join(workingDirectory, '.codebuddy', 'CODEBUDDY.md');
8
+ const legacyPath = path.join(workingDirectory, '.codebuddy', 'GROK.md');
9
+ const instructionsPath = fs.existsSync(codebuddyPath) ? codebuddyPath : legacyPath;
7
10
  if (!fs.existsSync(instructionsPath)) {
8
11
  return null;
9
12
  }
@@ -1 +1 @@
1
- {"version":3,"file":"custom-instructions.js","sourceRoot":"","sources":["../../src/utils/custom-instructions.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,MAAM,IAAI,CAAC;AACzB,OAAO,KAAK,IAAI,MAAM,MAAM,CAAC;AAC7B,OAAO,EAAE,MAAM,EAAE,MAAM,aAAa,CAAC;AAErC,MAAM,UAAU,sBAAsB,CAAC,mBAA2B,OAAO,CAAC,GAAG,EAAE;IAC7E,IAAI,CAAC;QACH,MAAM,gBAAgB,GAAG,IAAI,CAAC,IAAI,CAAC,gBAAgB,EAAE,YAAY,EAAE,SAAS,CAAC,CAAC;QAE9E,IAAI,CAAC,EAAE,CAAC,UAAU,CAAC,gBAAgB,CAAC,EAAE,CAAC;YACrC,OAAO,IAAI,CAAC;QACd,CAAC;QAED,MAAM,kBAAkB,GAAG,EAAE,CAAC,YAAY,CAAC,gBAAgB,EAAE,OAAO,CAAC,CAAC;QACtE,OAAO,kBAAkB,CAAC,IAAI,EAAE,CAAC;IACnC,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,MAAM,CAAC,IAAI,CAAC,oCAAoC,EAAE,EAAE,KAAK,EAAE,MAAM,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC;QAC5E,OAAO,IAAI,CAAC;IACd,CAAC;AACH,CAAC"}
1
+ {"version":3,"file":"custom-instructions.js","sourceRoot":"","sources":["../../src/utils/custom-instructions.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,MAAM,IAAI,CAAC;AACzB,OAAO,KAAK,IAAI,MAAM,MAAM,CAAC;AAC7B,OAAO,EAAE,MAAM,EAAE,MAAM,aAAa,CAAC;AAErC,MAAM,UAAU,sBAAsB,CAAC,mBAA2B,OAAO,CAAC,GAAG,EAAE;IAC7E,IAAI,CAAC;QACH,2EAA2E;QAC3E,MAAM,aAAa,GAAG,IAAI,CAAC,IAAI,CAAC,gBAAgB,EAAE,YAAY,EAAE,cAAc,CAAC,CAAC;QAChF,MAAM,UAAU,GAAG,IAAI,CAAC,IAAI,CAAC,gBAAgB,EAAE,YAAY,EAAE,SAAS,CAAC,CAAC;QAExE,MAAM,gBAAgB,GAAG,EAAE,CAAC,UAAU,CAAC,aAAa,CAAC,CAAC,CAAC,CAAC,aAAa,CAAC,CAAC,CAAC,UAAU,CAAC;QAEnF,IAAI,CAAC,EAAE,CAAC,UAAU,CAAC,gBAAgB,CAAC,EAAE,CAAC;YACrC,OAAO,IAAI,CAAC;QACd,CAAC;QAED,MAAM,kBAAkB,GAAG,EAAE,CAAC,YAAY,CAAC,gBAAgB,EAAE,OAAO,CAAC,CAAC;QACtE,OAAO,kBAAkB,CAAC,IAAI,EAAE,CAAC;IACnC,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,MAAM,CAAC,IAAI,CAAC,oCAAoC,EAAE,EAAE,KAAK,EAAE,MAAM,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC;QAC5E,OAAO,IAAI,CAAC;IACd,CAAC;AACH,CAAC"}
@@ -13,7 +13,7 @@ export interface InitResult {
13
13
  errors: string[];
14
14
  }
15
15
  /**
16
- * Initialize .grok directory with templates and configurations
16
+ * Initialize .codebuddy directory with templates and configurations
17
17
  * Similar to Claude Code's project initialization
18
18
  */
19
19
  export declare function initCodeBuddyProject(workingDirectory?: string, options?: InitOptions): InitResult;