@phuetz/code-buddy 0.1.24 → 0.1.25

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.
@@ -8,7 +8,7 @@
8
8
  import { getToolHooksManager, } from './tool-hooks.js';
9
9
  import { sanitizeResult, } from './result-sanitizer.js';
10
10
  import { logger } from '../../utils/logger.js';
11
- import { compressWithRTK, isRTKAvailable, getCompressionStats } from '../../utils/rtk-compressor.js';
11
+ import { wrapWithRTK, isRTKAvailable } from '../../utils/rtk-compressor.js';
12
12
  import { getConfigManager } from '../../config/toml-config.js';
13
13
  // Track current provider for sanitization
14
14
  let currentProvider = 'grok';
@@ -36,31 +36,32 @@ export function registerDefaultHooks() {
36
36
  logger.debug('Default hooks already registered');
37
37
  return;
38
38
  }
39
- // RTK output compression hook (after tool execution, before sanitization)
40
- hooksManager.registerAfterHook('rtk-output-compressor', async (_context, result) => {
41
- if (_context.toolName !== 'bash' || !result.output)
42
- return result;
39
+ // RTK command proxy hook (before tool execution wraps bash commands with `rtk`)
40
+ hooksManager.registerBeforeHook('rtk-command-proxy', async (context) => {
41
+ if (context.toolName !== 'bash')
42
+ return;
43
43
  const config = getConfigManager().getConfig();
44
44
  if (!config.integrations?.rtk_enabled)
45
- return result;
46
- const minLength = config.integrations.rtk_min_output_length ?? 500;
47
- if (result.output.length < minLength)
48
- return result;
45
+ return;
49
46
  if (!isRTKAvailable())
50
- return result;
51
- const compressed = compressWithRTK(result.output);
52
- if (compressed === result.output)
53
- return result;
54
- const stats = getCompressionStats(result.output, compressed);
55
- logger.debug('RTK compressed bash output', {
56
- originalTokens: stats.originalTokens,
57
- compressedTokens: stats.compressedTokens,
58
- ratio: `${(stats.ratio * 100).toFixed(1)}%`,
59
- });
60
- return { ...result, output: compressed };
47
+ return;
48
+ const command = context.args.command;
49
+ if (!command)
50
+ return;
51
+ const wrapped = wrapWithRTK(command);
52
+ if (wrapped !== command) {
53
+ logger.debug('RTK wrapping bash command', {
54
+ original: command.substring(0, 100),
55
+ wrapped: wrapped.substring(0, 100),
56
+ });
57
+ return {
58
+ ...context,
59
+ args: { ...context.args, command: wrapped },
60
+ };
61
+ }
61
62
  }, {
62
- name: 'RTK Output Compressor',
63
- priority: 90, // Runs before result-sanitizer (50)
63
+ name: 'RTK Command Proxy',
64
+ priority: 90, // Runs before other hooks
64
65
  });
65
66
  // Result sanitization hook (after tool execution)
66
67
  hooksManager.registerAfterHook('result-sanitizer', async (context, result) => {
@@ -153,7 +154,7 @@ export function registerDefaultHooks() {
153
154
  */
154
155
  export function unregisterDefaultHooks() {
155
156
  const hooksManager = getToolHooksManager();
156
- hooksManager.unregisterHook('after_tool_call', 'rtk-output-compressor');
157
+ hooksManager.unregisterHook('before_tool_call', 'rtk-command-proxy');
157
158
  hooksManager.unregisterHook('after_tool_call', 'result-sanitizer');
158
159
  hooksManager.unregisterHook('after_tool_call', 'execution-logger');
159
160
  hooksManager.unregisterHook('tool_error', 'error-tracker');
@@ -1 +1 @@
1
- {"version":3,"file":"default-hooks.js","sourceRoot":"","sources":["../../../src/tools/hooks/default-hooks.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"default-hooks.js","sourceRoot":"","sources":["../../../src/tools/hooks/default-hooks.ts"],"names":[],"mappings":"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"}
@@ -1,8 +1,11 @@
1
1
  /**
2
- * RTK (Rust Token Killer) Output Compressor
2
+ * RTK (Rust Token Killer) Command Proxy
3
+ *
4
+ * Integrates with the RTK CLI proxy to reduce LLM token consumption by 60-90%
5
+ * on common dev commands (git, npm, ls, grep, test, etc.).
6
+ * RTK wraps commands as `rtk <subcommand>` to filter and compress output
7
+ * before it reaches the LLM context window.
3
8
  *
4
- * Integrates with the RTK CLI binary to compress shell output 60-90%
5
- * via format-aware parsing (strips ANSI, deduplicates whitespace, removes noise).
6
9
  * Falls back gracefully when RTK is not installed.
7
10
  *
8
11
  * @see https://github.com/rtk-ai/rtk
@@ -15,15 +18,15 @@ export declare function isRTKAvailable(): boolean;
15
18
  * Reset the cached availability check (useful for testing)
16
19
  */
17
20
  export declare function resetRTKCache(): void;
18
- export interface RTKCompressOptions {
19
- /** Output format hint for RTK (e.g., 'json', 'log', 'csv') */
20
- format?: string;
21
- }
22
21
  /**
23
- * Compress output using RTK binary via stdin pipe.
24
- * Returns original output unchanged if RTK is unavailable or fails.
22
+ * Try to wrap a bash command with RTK for token-optimized output.
23
+ * Returns the modified command if RTK can handle it, or the original command otherwise.
24
+ */
25
+ export declare function wrapWithRTK(command: string): string;
26
+ /**
27
+ * Check if a command can benefit from RTK wrapping
25
28
  */
26
- export declare function compressWithRTK(output: string, options?: RTKCompressOptions): string;
29
+ export declare function isRTKCompatible(command: string): boolean;
27
30
  export interface CompressionStats {
28
31
  originalTokens: number;
29
32
  compressedTokens: number;
@@ -1,14 +1,16 @@
1
1
  /**
2
- * RTK (Rust Token Killer) Output Compressor
2
+ * RTK (Rust Token Killer) Command Proxy
3
+ *
4
+ * Integrates with the RTK CLI proxy to reduce LLM token consumption by 60-90%
5
+ * on common dev commands (git, npm, ls, grep, test, etc.).
6
+ * RTK wraps commands as `rtk <subcommand>` to filter and compress output
7
+ * before it reaches the LLM context window.
3
8
  *
4
- * Integrates with the RTK CLI binary to compress shell output 60-90%
5
- * via format-aware parsing (strips ANSI, deduplicates whitespace, removes noise).
6
9
  * Falls back gracefully when RTK is not installed.
7
10
  *
8
11
  * @see https://github.com/rtk-ai/rtk
9
12
  */
10
- import { execSync, spawnSync } from 'child_process';
11
- import { logger } from './logger.js';
13
+ import { execSync } from 'child_process';
12
14
  // Cache RTK availability check
13
15
  let rtkAvailable = null;
14
16
  /**
@@ -33,39 +35,86 @@ export function resetRTKCache() {
33
35
  rtkAvailable = null;
34
36
  }
35
37
  /**
36
- * Compress output using RTK binary via stdin pipe.
37
- * Returns original output unchanged if RTK is unavailable or fails.
38
+ * Commands that RTK supports as direct subcommands.
39
+ * Maps the first token of a bash command to an RTK subcommand.
40
+ * Note: `npm` is excluded — `rtk npm` only handles `npm run`, not `npm list/install/etc.`
41
+ */
42
+ const RTK_SUPPORTED_COMMANDS = new Set([
43
+ 'ls', 'tree', 'git', 'gh', 'npx', 'pnpm',
44
+ 'grep', 'find', 'curl', 'wget', 'docker', 'kubectl',
45
+ 'cargo', 'pip', 'pytest', 'ruff', 'go', 'golangci-lint',
46
+ 'tsc', 'prettier', 'vitest', 'prisma',
47
+ 'playwright',
48
+ ]);
49
+ /**
50
+ * Commands that require special handling (only certain subcommands are supported)
51
+ */
52
+ const RTK_CONDITIONAL_COMMANDS = {
53
+ // `rtk npm` only handles `npm run <script>`, not `npm list`, `npm install`, etc.
54
+ 'npm': (args) => /^run\b/.test(args),
55
+ // `rtk next` only handles `next build`
56
+ 'next': (args) => /^build\b/.test(args),
57
+ };
58
+ /**
59
+ * Commands where RTK wrapping should be skipped (interactive, editors, etc.)
60
+ */
61
+ const RTK_SKIP_PATTERNS = [
62
+ /^(nano|vim|vi|emacs|code|less|more|man)\b/,
63
+ /^(ssh|scp|rsync)\b/,
64
+ /^(sudo|su)\b/,
65
+ /\|\s*head\b/, // already piped/truncated
66
+ /\|\s*tail\b/,
67
+ /\|\s*less\b/,
68
+ /\|\s*wc\b/,
69
+ /\|\s*rtk\b/, // already using rtk
70
+ /^rtk\b/, // already prefixed
71
+ ];
72
+ /**
73
+ * Try to wrap a bash command with RTK for token-optimized output.
74
+ * Returns the modified command if RTK can handle it, or the original command otherwise.
38
75
  */
39
- export function compressWithRTK(output, options) {
40
- if (!isRTKAvailable()) {
41
- return output;
76
+ export function wrapWithRTK(command) {
77
+ if (!isRTKAvailable())
78
+ return command;
79
+ const trimmed = command.trim();
80
+ // Skip patterns that shouldn't be wrapped
81
+ for (const pattern of RTK_SKIP_PATTERNS) {
82
+ if (pattern.test(trimmed))
83
+ return command;
42
84
  }
43
- try {
44
- const args = ['compress', '--stdin'];
45
- if (options?.format) {
46
- args.push('--format', options.format);
47
- }
48
- const result = spawnSync('rtk', args, {
49
- input: output,
50
- encoding: 'utf-8',
51
- timeout: 10000, // 10s timeout
52
- maxBuffer: 10 * 1024 * 1024, // 10MB
53
- });
54
- if (result.status === 0 && result.stdout) {
55
- return result.stdout;
56
- }
57
- // Non-zero exit or no output — fall back to original
58
- if (result.stderr) {
59
- logger.debug('RTK compression warning', { stderr: result.stderr.substring(0, 200) });
60
- }
61
- return output;
85
+ // Extract the base command and remaining args
86
+ const parts = trimmed.split(/\s+/);
87
+ const firstToken = parts[0];
88
+ const restArgs = parts.slice(1).join(' ');
89
+ // Check direct support
90
+ if (RTK_SUPPORTED_COMMANDS.has(firstToken)) {
91
+ return `rtk ${trimmed}`;
92
+ }
93
+ // Check conditional support (command-specific subcommand filtering)
94
+ const conditionalCheck = RTK_CONDITIONAL_COMMANDS[firstToken];
95
+ if (conditionalCheck && conditionalCheck(restArgs)) {
96
+ return `rtk ${trimmed}`;
97
+ }
98
+ return command;
99
+ }
100
+ /**
101
+ * Check if a command can benefit from RTK wrapping
102
+ */
103
+ export function isRTKCompatible(command) {
104
+ const trimmed = command.trim();
105
+ for (const pattern of RTK_SKIP_PATTERNS) {
106
+ if (pattern.test(trimmed))
107
+ return false;
62
108
  }
63
- catch (error) {
64
- logger.debug('RTK compression failed, using original output', {
65
- error: error instanceof Error ? error.message : String(error),
66
- });
67
- return output;
109
+ const parts = trimmed.split(/\s+/);
110
+ const firstToken = parts[0];
111
+ if (RTK_SUPPORTED_COMMANDS.has(firstToken))
112
+ return true;
113
+ const conditionalCheck = RTK_CONDITIONAL_COMMANDS[firstToken];
114
+ if (conditionalCheck) {
115
+ return conditionalCheck(parts.slice(1).join(' '));
68
116
  }
117
+ return false;
69
118
  }
70
119
  /**
71
120
  * Estimate compression stats between original and compressed output.
@@ -1 +1 @@
1
- {"version":3,"file":"rtk-compressor.js","sourceRoot":"","sources":["../../src/utils/rtk-compressor.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAEH,OAAO,EAAE,QAAQ,EAAE,SAAS,EAAE,MAAM,eAAe,CAAC;AACpD,OAAO,EAAE,MAAM,EAAE,MAAM,aAAa,CAAC;AAErC,+BAA+B;AAC/B,IAAI,YAAY,GAAmB,IAAI,CAAC;AAExC;;GAEG;AACH,MAAM,UAAU,cAAc;IAC5B,IAAI,YAAY,KAAK,IAAI;QAAE,OAAO,YAAY,CAAC;IAE/C,IAAI,CAAC;QACH,QAAQ,CAAC,WAAW,EAAE,EAAE,KAAK,EAAE,QAAQ,EAAE,CAAC,CAAC;QAC3C,YAAY,GAAG,IAAI,CAAC;IACtB,CAAC;IAAC,MAAM,CAAC;QACP,YAAY,GAAG,KAAK,CAAC;IACvB,CAAC;IAED,OAAO,YAAY,CAAC;AACtB,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,aAAa;IAC3B,YAAY,GAAG,IAAI,CAAC;AACtB,CAAC;AAOD;;;GAGG;AACH,MAAM,UAAU,eAAe,CAAC,MAAc,EAAE,OAA4B;IAC1E,IAAI,CAAC,cAAc,EAAE,EAAE,CAAC;QACtB,OAAO,MAAM,CAAC;IAChB,CAAC;IAED,IAAI,CAAC;QACH,MAAM,IAAI,GAAG,CAAC,UAAU,EAAE,SAAS,CAAC,CAAC;QACrC,IAAI,OAAO,EAAE,MAAM,EAAE,CAAC;YACpB,IAAI,CAAC,IAAI,CAAC,UAAU,EAAE,OAAO,CAAC,MAAM,CAAC,CAAC;QACxC,CAAC;QAED,MAAM,MAAM,GAAG,SAAS,CAAC,KAAK,EAAE,IAAI,EAAE;YACpC,KAAK,EAAE,MAAM;YACb,QAAQ,EAAE,OAAO;YACjB,OAAO,EAAE,KAAK,EAAE,cAAc;YAC9B,SAAS,EAAE,EAAE,GAAG,IAAI,GAAG,IAAI,EAAE,OAAO;SACrC,CAAC,CAAC;QAEH,IAAI,MAAM,CAAC,MAAM,KAAK,CAAC,IAAI,MAAM,CAAC,MAAM,EAAE,CAAC;YACzC,OAAO,MAAM,CAAC,MAAM,CAAC;QACvB,CAAC;QAED,qDAAqD;QACrD,IAAI,MAAM,CAAC,MAAM,EAAE,CAAC;YAClB,MAAM,CAAC,KAAK,CAAC,yBAAyB,EAAE,EAAE,MAAM,EAAE,MAAM,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC,EAAE,GAAG,CAAC,EAAE,CAAC,CAAC;QACvF,CAAC;QACD,OAAO,MAAM,CAAC;IAChB,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,MAAM,CAAC,KAAK,CAAC,+CAA+C,EAAE;YAC5D,KAAK,EAAE,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC;SAC9D,CAAC,CAAC;QACH,OAAO,MAAM,CAAC;IAChB,CAAC;AACH,CAAC;AAQD;;;GAGG;AACH,MAAM,UAAU,mBAAmB,CAAC,QAAgB,EAAE,UAAkB;IACtE,MAAM,cAAc,GAAG,cAAc,CAAC,QAAQ,CAAC,CAAC;IAChD,MAAM,gBAAgB,GAAG,cAAc,CAAC,UAAU,CAAC,CAAC;IACpD,MAAM,KAAK,GAAG,cAAc,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,gBAAgB,GAAG,cAAc,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;IAE/E,OAAO,EAAE,cAAc,EAAE,gBAAgB,EAAE,KAAK,EAAE,CAAC;AACrD,CAAC;AAED;;GAEG;AACH,SAAS,cAAc,CAAC,IAAY;IAClC,OAAO,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC;AACpC,CAAC"}
1
+ {"version":3,"file":"rtk-compressor.js","sourceRoot":"","sources":["../../src/utils/rtk-compressor.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@phuetz/code-buddy",
3
- "version": "0.1.24",
3
+ "version": "0.1.25",
4
4
  "description": "Open-source multi-provider AI coding agent for the terminal. Supports Grok, Claude, ChatGPT, Gemini, Ollama and LM Studio with 52+ tools, multi-channel messaging, skills system, and OpenClaw-inspired architecture.",
5
5
  "author": "Patrice Huetz <patrice.huetz@gmail.com>",
6
6
  "repository": {