@felan-ai/ext-rtk-optimizer 0.0.0

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 (92) hide show
  1. package/LICENSE +23 -0
  2. package/NOTICE +14 -0
  3. package/README.md +115 -0
  4. package/dist/command-rewriter.d.ts +27 -0
  5. package/dist/command-rewriter.d.ts.map +1 -0
  6. package/dist/command-rewriter.js +126 -0
  7. package/dist/command-rewriter.js.map +1 -0
  8. package/dist/command.d.ts +12 -0
  9. package/dist/command.d.ts.map +1 -0
  10. package/dist/command.js +240 -0
  11. package/dist/command.js.map +1 -0
  12. package/dist/config.d.ts +13 -0
  13. package/dist/config.d.ts.map +1 -0
  14. package/dist/config.js +173 -0
  15. package/dist/config.js.map +1 -0
  16. package/dist/index.d.ts +18 -0
  17. package/dist/index.d.ts.map +1 -0
  18. package/dist/index.js +306 -0
  19. package/dist/index.js.map +1 -0
  20. package/dist/output-compactor.d.ts +31 -0
  21. package/dist/output-compactor.d.ts.map +1 -0
  22. package/dist/output-compactor.js +455 -0
  23. package/dist/output-compactor.js.map +1 -0
  24. package/dist/output-metrics.d.ts +15 -0
  25. package/dist/output-metrics.d.ts.map +1 -0
  26. package/dist/output-metrics.js +50 -0
  27. package/dist/output-metrics.js.map +1 -0
  28. package/dist/record-utils.d.ts +12 -0
  29. package/dist/record-utils.d.ts.map +1 -0
  30. package/dist/record-utils.js +23 -0
  31. package/dist/record-utils.js.map +1 -0
  32. package/dist/runtime-path.d.ts +4 -0
  33. package/dist/runtime-path.d.ts.map +1 -0
  34. package/dist/runtime-path.js +73 -0
  35. package/dist/runtime-path.js.map +1 -0
  36. package/dist/techniques/ansi.d.ts +3 -0
  37. package/dist/techniques/ansi.d.ts.map +1 -0
  38. package/dist/techniques/ansi.js +13 -0
  39. package/dist/techniques/ansi.js.map +1 -0
  40. package/dist/techniques/build.d.ts +3 -0
  41. package/dist/techniques/build.d.ts.map +1 -0
  42. package/dist/techniques/build.js +127 -0
  43. package/dist/techniques/build.js.map +1 -0
  44. package/dist/techniques/command-detection.d.ts +3 -0
  45. package/dist/techniques/command-detection.d.ts.map +1 -0
  46. package/dist/techniques/command-detection.js +44 -0
  47. package/dist/techniques/command-detection.js.map +1 -0
  48. package/dist/techniques/git.d.ts +6 -0
  49. package/dist/techniques/git.d.ts.map +1 -0
  50. package/dist/techniques/git.js +188 -0
  51. package/dist/techniques/git.js.map +1 -0
  52. package/dist/techniques/index.d.ts +9 -0
  53. package/dist/techniques/index.d.ts.map +1 -0
  54. package/dist/techniques/index.js +9 -0
  55. package/dist/techniques/index.js.map +1 -0
  56. package/dist/techniques/linter.d.ts +3 -0
  57. package/dist/techniques/linter.d.ts.map +1 -0
  58. package/dist/techniques/linter.js +133 -0
  59. package/dist/techniques/linter.js.map +1 -0
  60. package/dist/techniques/path-utils.d.ts +2 -0
  61. package/dist/techniques/path-utils.d.ts.map +1 -0
  62. package/dist/techniques/path-utils.js +55 -0
  63. package/dist/techniques/path-utils.js.map +1 -0
  64. package/dist/techniques/search.d.ts +2 -0
  65. package/dist/techniques/search.d.ts.map +1 -0
  66. package/dist/techniques/search.js +53 -0
  67. package/dist/techniques/search.js.map +1 -0
  68. package/dist/techniques/source.d.ts +7 -0
  69. package/dist/techniques/source.d.ts.map +1 -0
  70. package/dist/techniques/source.js +250 -0
  71. package/dist/techniques/source.js.map +1 -0
  72. package/dist/techniques/test-output.d.ts +3 -0
  73. package/dist/techniques/test-output.d.ts.map +1 -0
  74. package/dist/techniques/test-output.js +157 -0
  75. package/dist/techniques/test-output.js.map +1 -0
  76. package/dist/techniques/truncate.d.ts +2 -0
  77. package/dist/techniques/truncate.d.ts.map +1 -0
  78. package/dist/techniques/truncate.js +10 -0
  79. package/dist/techniques/truncate.js.map +1 -0
  80. package/dist/tool-execution-sanitizer.d.ts +6 -0
  81. package/dist/tool-execution-sanitizer.d.ts.map +1 -0
  82. package/dist/tool-execution-sanitizer.js +20 -0
  83. package/dist/tool-execution-sanitizer.js.map +1 -0
  84. package/dist/tool-shapes.d.ts +11 -0
  85. package/dist/tool-shapes.d.ts.map +1 -0
  86. package/dist/tool-shapes.js +41 -0
  87. package/dist/tool-shapes.js.map +1 -0
  88. package/dist/types.d.ts +43 -0
  89. package/dist/types.d.ts.map +1 -0
  90. package/dist/types.js +33 -0
  91. package/dist/types.js.map +1 -0
  92. package/package.json +42 -0
@@ -0,0 +1,157 @@
1
+ import { matchesCommandPatterns } from './command-detection.js';
2
+ const TEST_COMMAND_PATTERNS = [
3
+ /^npm\s+test\b/,
4
+ /^pnpm\s+test\b/,
5
+ /^yarn\s+test\b/,
6
+ /^bun\s+test\b/,
7
+ /^cargo\s+test\b/,
8
+ /^go\s+test\b/,
9
+ /^pytest\b/,
10
+ /^python\s+-m\s+pytest\b/,
11
+ /^(?:pnpm\s+)?(?:npx\s+)?vitest\b/,
12
+ /^(?:npx\s+)?jest\b/,
13
+ /^mocha\b/,
14
+ /^ava\b/,
15
+ /^tap\b/,
16
+ ];
17
+ const RUST_TEST_RESULT_PATTERN = /test result:\s*\w+\.\s*(\d+)\s*passed;\s*(\d+)\s*failed;(?:\s*(\d+)\s*ignored;)?/;
18
+ const TEST_RESULT_PATTERNS = [
19
+ /(\d+)\s*passed(?:,\s*(\d+)\s*failed)?(?:,\s*(\d+)\s*skipped)?/i,
20
+ /(\d+)\s*pass(?:,\s*(\d+)\s*fail)?(?:,\s*(\d+)\s*skip)?/i,
21
+ /tests?:\s*(\d+)\s*passed(?:,\s*(\d+)\s*failed)?(?:,\s*(\d+)\s*skipped)?/i,
22
+ ];
23
+ const FAILURE_START_PATTERNS = [
24
+ /^FAIL\s+/,
25
+ /^FAILED\s+/,
26
+ /^\s*●\s+/,
27
+ /^\s*✕\s+/,
28
+ /test\s+\w+\s+\.\.\.\s*FAILED/,
29
+ /thread\s+'\w+'\s+panicked/,
30
+ ];
31
+ const FALLBACK_PASS_PATTERN = /(?:\b(?:ok|PASS)\b|[✓✔])/;
32
+ const FALLBACK_FAIL_PATTERN = /(?:\b(?:FAIL|fail)\b|[✗✕])/;
33
+ function isFailureStart(line) {
34
+ return FAILURE_START_PATTERNS.some((pattern) => pattern.test(line));
35
+ }
36
+ function extractTestStats(output) {
37
+ const rustMatch = output.match(RUST_TEST_RESULT_PATTERN);
38
+ if (rustMatch) {
39
+ return {
40
+ passed: Number.parseInt(rustMatch[1] ?? '0', 10) || 0,
41
+ failed: Number.parseInt(rustMatch[2] ?? '0', 10) || 0,
42
+ skipped: Number.parseInt(rustMatch[3] ?? '0', 10) || 0,
43
+ };
44
+ }
45
+ for (const pattern of TEST_RESULT_PATTERNS) {
46
+ const match = output.match(pattern);
47
+ if (!match) {
48
+ continue;
49
+ }
50
+ return {
51
+ passed: Number.parseInt(match[1] ?? '0', 10) || 0,
52
+ failed: Number.parseInt(match[2] ?? '0', 10) || 0,
53
+ skipped: Number.parseInt(match[3] ?? '0', 10) || 0,
54
+ };
55
+ }
56
+ return {};
57
+ }
58
+ export function isTestCommand(command) {
59
+ return matchesCommandPatterns(command, TEST_COMMAND_PATTERNS);
60
+ }
61
+ export function aggregateTestOutput(output, command) {
62
+ if (!isTestCommand(command)) {
63
+ return null;
64
+ }
65
+ const lines = output.split('\n');
66
+ const summary = {
67
+ passed: 0,
68
+ failed: 0,
69
+ skipped: 0,
70
+ failures: [],
71
+ };
72
+ const stats = extractTestStats(output);
73
+ summary.passed = stats.passed ?? 0;
74
+ summary.failed = stats.failed ?? 0;
75
+ summary.skipped = stats.skipped ?? 0;
76
+ if (summary.passed === 0 && summary.failed === 0) {
77
+ for (const line of lines) {
78
+ if (FALLBACK_PASS_PATTERN.test(line)) {
79
+ summary.passed++;
80
+ }
81
+ if (FALLBACK_FAIL_PATTERN.test(line)) {
82
+ summary.failed++;
83
+ }
84
+ }
85
+ }
86
+ if (summary.failed > 0) {
87
+ let inFailure = false;
88
+ let currentFailure = [];
89
+ let blankCount = 0;
90
+ for (const line of lines) {
91
+ if (isFailureStart(line)) {
92
+ if (inFailure && currentFailure.length > 0) {
93
+ summary.failures.push(currentFailure.join('\n'));
94
+ }
95
+ inFailure = true;
96
+ currentFailure = [line];
97
+ blankCount = 0;
98
+ continue;
99
+ }
100
+ if (!inFailure) {
101
+ continue;
102
+ }
103
+ if (line.trim() === '') {
104
+ blankCount++;
105
+ if (blankCount >= 2 && currentFailure.length > 3) {
106
+ summary.failures.push(currentFailure.join('\n'));
107
+ inFailure = false;
108
+ currentFailure = [];
109
+ }
110
+ else {
111
+ currentFailure.push(line);
112
+ }
113
+ continue;
114
+ }
115
+ if (line.match(/^\s/) || line.match(/^-/)) {
116
+ currentFailure.push(line);
117
+ blankCount = 0;
118
+ continue;
119
+ }
120
+ summary.failures.push(currentFailure.join('\n'));
121
+ inFailure = false;
122
+ currentFailure = [];
123
+ }
124
+ if (inFailure && currentFailure.length > 0) {
125
+ summary.failures.push(currentFailure.join('\n'));
126
+ }
127
+ }
128
+ const result = ['Test Results:'];
129
+ result.push(` PASS: ${summary.passed} passed`);
130
+ if (summary.failed > 0) {
131
+ result.push(` FAIL: ${summary.failed} failed`);
132
+ }
133
+ if (summary.skipped > 0) {
134
+ result.push(` SKIP: ${summary.skipped} skipped`);
135
+ }
136
+ if (summary.failed > 0 && summary.failures.length > 0) {
137
+ result.push('\n Failures:');
138
+ for (const failure of summary.failures.slice(0, 5)) {
139
+ const failureLines = failure.split('\n');
140
+ const firstLine = failureLines[0] ?? '';
141
+ result.push(` - ${firstLine.slice(0, 70)}${firstLine.length > 70 ? '...' : ''}`);
142
+ for (const detailLine of failureLines.slice(1, 4)) {
143
+ if (detailLine.trim()) {
144
+ result.push(` ${detailLine.slice(0, 65)}${detailLine.length > 65 ? '...' : ''}`);
145
+ }
146
+ }
147
+ if (failureLines.length > 4) {
148
+ result.push(` ... (${failureLines.length - 4} more lines)`);
149
+ }
150
+ }
151
+ if (summary.failures.length > 5) {
152
+ result.push(` ... and ${summary.failures.length - 5} more failures`);
153
+ }
154
+ }
155
+ return result.join('\n');
156
+ }
157
+ //# sourceMappingURL=test-output.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"test-output.js","sourceRoot":"","sources":["../../src/techniques/test-output.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ export declare function truncate(text: string, maxLength: number): string;
2
+ //# sourceMappingURL=truncate.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"truncate.d.ts","sourceRoot":"","sources":["../../src/techniques/truncate.ts"],"names":[],"mappings":"AAAA,wBAAgB,QAAQ,CAAC,IAAI,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,GAAG,MAAM,CAUhE"}
@@ -0,0 +1,10 @@
1
+ export function truncate(text, maxLength) {
2
+ if (text.length <= maxLength) {
3
+ return text;
4
+ }
5
+ if (maxLength < 3) {
6
+ return '...';
7
+ }
8
+ return `${text.slice(0, maxLength - 3)}...`;
9
+ }
10
+ //# sourceMappingURL=truncate.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"truncate.js","sourceRoot":"","sources":["../../src/techniques/truncate.ts"],"names":[],"mappings":"AAAA,MAAM,UAAU,QAAQ,CAAC,IAAY,EAAE,SAAiB;IACtD,IAAI,IAAI,CAAC,MAAM,IAAI,SAAS,EAAE,CAAC;QAC7B,OAAO,IAAI,CAAC;IACd,CAAC;IAED,IAAI,SAAS,GAAG,CAAC,EAAE,CAAC;QAClB,OAAO,KAAK,CAAC;IACf,CAAC;IAED,OAAO,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,EAAE,SAAS,GAAG,CAAC,CAAC,KAAK,CAAC;AAC9C,CAAC"}
@@ -0,0 +1,6 @@
1
+ export interface StreamingSanitizationResult {
2
+ readonly changed: boolean;
3
+ readonly result: unknown;
4
+ }
5
+ export declare function sanitizeStreamingCommandResult(result: unknown): StreamingSanitizationResult;
6
+ //# sourceMappingURL=tool-execution-sanitizer.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"tool-execution-sanitizer.d.ts","sourceRoot":"","sources":["../src/tool-execution-sanitizer.ts"],"names":[],"mappings":"AAGA,MAAM,WAAW,2BAA2B;IAC1C,QAAQ,CAAC,OAAO,EAAE,OAAO,CAAC;IAC1B,QAAQ,CAAC,MAAM,EAAE,OAAO,CAAC;CAC1B;AAED,wBAAgB,8BAA8B,CAAC,MAAM,EAAE,OAAO,GAAG,2BAA2B,CAiB3F"}
@@ -0,0 +1,20 @@
1
+ import { mapTextContentBlocks, toRecord } from './record-utils.js';
2
+ import { stripAnsiFast } from './techniques/ansi.js';
3
+ export function sanitizeStreamingCommandResult(result) {
4
+ const record = toRecord(result);
5
+ if (!Array.isArray(record.content) || record.content.length === 0) {
6
+ return { changed: false, result };
7
+ }
8
+ const mapped = mapTextContentBlocks(record.content, (block) => {
9
+ const text = stripAnsiFast(block.text);
10
+ return text === block.text ? undefined : text;
11
+ });
12
+ if (!mapped.changed)
13
+ return { changed: false, result };
14
+ // Pi's observer-style tool execution events retain the result object but do
15
+ // not propagate replacement event fields. Mutate the shared result object so
16
+ // the interactive renderer sees the sanitized blocks.
17
+ record.content = mapped.content;
18
+ return { changed: true, result };
19
+ }
20
+ //# sourceMappingURL=tool-execution-sanitizer.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"tool-execution-sanitizer.js","sourceRoot":"","sources":["../src/tool-execution-sanitizer.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,oBAAoB,EAAE,QAAQ,EAAE,MAAM,mBAAmB,CAAC;AACnE,OAAO,EAAE,aAAa,EAAE,MAAM,sBAAsB,CAAC;AAOrD,MAAM,UAAU,8BAA8B,CAAC,MAAe;IAC5D,MAAM,MAAM,GAAG,QAAQ,CAAC,MAAM,CAAC,CAAC;IAChC,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC,OAAO,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QAClE,OAAO,EAAE,OAAO,EAAE,KAAK,EAAE,MAAM,EAAE,CAAC;IACpC,CAAC;IAED,MAAM,MAAM,GAAG,oBAAoB,CAAC,MAAM,CAAC,OAAO,EAAE,CAAC,KAAK,EAAE,EAAE;QAC5D,MAAM,IAAI,GAAG,aAAa,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;QACvC,OAAO,IAAI,KAAK,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,IAAI,CAAC;IAChD,CAAC,CAAC,CAAC;IACH,IAAI,CAAC,MAAM,CAAC,OAAO;QAAE,OAAO,EAAE,OAAO,EAAE,KAAK,EAAE,MAAM,EAAE,CAAC;IAEvD,4EAA4E;IAC5E,6EAA6E;IAC7E,sDAAsD;IACtD,MAAM,CAAC,OAAO,GAAG,MAAM,CAAC,OAAO,CAAC;IAChC,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,MAAM,EAAE,CAAC;AACnC,CAAC"}
@@ -0,0 +1,11 @@
1
+ export declare const COMMAND_TOOL_NAMES: readonly ["bash", "exec_command"];
2
+ export declare const STREAMING_COMMAND_TOOL_NAMES: readonly ["bash", "exec_command", "write_stdin"];
3
+ export type CommandToolName = (typeof COMMAND_TOOL_NAMES)[number];
4
+ export declare function isCommandToolName(toolName: unknown): toolName is CommandToolName;
5
+ export declare function isStreamingCommandToolName(toolName: unknown): boolean;
6
+ export declare function readToolCommand(toolName: unknown, input: unknown): string | undefined;
7
+ export declare function writeToolCommand(toolName: unknown, input: unknown, command: string): boolean;
8
+ export declare function readCodexSessionId(input: unknown): number | undefined;
9
+ export declare function readRunningCodexSessionId(details: unknown): number | undefined;
10
+ export declare function codexResultHasExited(details: unknown): boolean;
11
+ //# sourceMappingURL=tool-shapes.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"tool-shapes.d.ts","sourceRoot":"","sources":["../src/tool-shapes.ts"],"names":[],"mappings":"AAEA,eAAO,MAAM,kBAAkB,mCAAoC,CAAC;AACpE,eAAO,MAAM,4BAA4B,kDAAmD,CAAC;AAE7F,MAAM,MAAM,eAAe,GAAG,CAAC,OAAO,kBAAkB,CAAC,CAAC,MAAM,CAAC,CAAC;AAElE,wBAAgB,iBAAiB,CAAC,QAAQ,EAAE,OAAO,GAAG,QAAQ,IAAI,eAAe,CAEhF;AAED,wBAAgB,0BAA0B,CAAC,QAAQ,EAAE,OAAO,GAAG,OAAO,CAKrE;AAED,wBAAgB,eAAe,CAAC,QAAQ,EAAE,OAAO,EAAE,KAAK,EAAE,OAAO,GAAG,MAAM,GAAG,SAAS,CAKrF;AAED,wBAAgB,gBAAgB,CAAC,QAAQ,EAAE,OAAO,EAAE,KAAK,EAAE,OAAO,EAAE,OAAO,EAAE,MAAM,GAAG,OAAO,CAO5F;AAED,wBAAgB,kBAAkB,CAAC,KAAK,EAAE,OAAO,GAAG,MAAM,GAAG,SAAS,CAGrE;AAED,wBAAgB,yBAAyB,CAAC,OAAO,EAAE,OAAO,GAAG,MAAM,GAAG,SAAS,CAG9E;AAED,wBAAgB,oBAAoB,CAAC,OAAO,EAAE,OAAO,GAAG,OAAO,CAE9D"}
@@ -0,0 +1,41 @@
1
+ import { toRecord } from './record-utils.js';
2
+ export const COMMAND_TOOL_NAMES = ['bash', 'exec_command'];
3
+ export const STREAMING_COMMAND_TOOL_NAMES = ['bash', 'exec_command', 'write_stdin'];
4
+ export function isCommandToolName(toolName) {
5
+ return typeof toolName === 'string' && COMMAND_TOOL_NAMES.includes(toolName);
6
+ }
7
+ export function isStreamingCommandToolName(toolName) {
8
+ return (typeof toolName === 'string' &&
9
+ STREAMING_COMMAND_TOOL_NAMES.includes(toolName));
10
+ }
11
+ export function readToolCommand(toolName, input) {
12
+ if (!isCommandToolName(toolName))
13
+ return undefined;
14
+ const record = toRecord(input);
15
+ const value = toolName === 'exec_command' ? record.cmd : record.command;
16
+ return typeof value === 'string' && value.trim() ? value : undefined;
17
+ }
18
+ export function writeToolCommand(toolName, input, command) {
19
+ if (!isCommandToolName(toolName))
20
+ return false;
21
+ const record = toRecord(input);
22
+ if (Object.keys(record).length === 0)
23
+ return false;
24
+ if (toolName === 'exec_command')
25
+ record.cmd = command;
26
+ else
27
+ record.command = command;
28
+ return true;
29
+ }
30
+ export function readCodexSessionId(input) {
31
+ const sessionId = toRecord(input).session_id;
32
+ return Number.isSafeInteger(sessionId) ? sessionId : undefined;
33
+ }
34
+ export function readRunningCodexSessionId(details) {
35
+ const sessionId = toRecord(details).session_id;
36
+ return Number.isSafeInteger(sessionId) ? sessionId : undefined;
37
+ }
38
+ export function codexResultHasExited(details) {
39
+ return Number.isSafeInteger(toRecord(details).exit_code);
40
+ }
41
+ //# sourceMappingURL=tool-shapes.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"tool-shapes.js","sourceRoot":"","sources":["../src/tool-shapes.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,mBAAmB,CAAC;AAE7C,MAAM,CAAC,MAAM,kBAAkB,GAAG,CAAC,MAAM,EAAE,cAAc,CAAU,CAAC;AACpE,MAAM,CAAC,MAAM,4BAA4B,GAAG,CAAC,MAAM,EAAE,cAAc,EAAE,aAAa,CAAU,CAAC;AAI7F,MAAM,UAAU,iBAAiB,CAAC,QAAiB;IACjD,OAAO,OAAO,QAAQ,KAAK,QAAQ,IAAI,kBAAkB,CAAC,QAAQ,CAAC,QAA2B,CAAC,CAAC;AAClG,CAAC;AAED,MAAM,UAAU,0BAA0B,CAAC,QAAiB;IAC1D,OAAO,CACL,OAAO,QAAQ,KAAK,QAAQ;QAC5B,4BAA4B,CAAC,QAAQ,CAAC,QAAyD,CAAC,CACjG,CAAC;AACJ,CAAC;AAED,MAAM,UAAU,eAAe,CAAC,QAAiB,EAAE,KAAc;IAC/D,IAAI,CAAC,iBAAiB,CAAC,QAAQ,CAAC;QAAE,OAAO,SAAS,CAAC;IACnD,MAAM,MAAM,GAAG,QAAQ,CAAC,KAAK,CAAC,CAAC;IAC/B,MAAM,KAAK,GAAG,QAAQ,KAAK,cAAc,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC;IACxE,OAAO,OAAO,KAAK,KAAK,QAAQ,IAAI,KAAK,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,SAAS,CAAC;AACvE,CAAC;AAED,MAAM,UAAU,gBAAgB,CAAC,QAAiB,EAAE,KAAc,EAAE,OAAe;IACjF,IAAI,CAAC,iBAAiB,CAAC,QAAQ,CAAC;QAAE,OAAO,KAAK,CAAC;IAC/C,MAAM,MAAM,GAAG,QAAQ,CAAC,KAAK,CAAC,CAAC;IAC/B,IAAI,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,MAAM,KAAK,CAAC;QAAE,OAAO,KAAK,CAAC;IACnD,IAAI,QAAQ,KAAK,cAAc;QAAE,MAAM,CAAC,GAAG,GAAG,OAAO,CAAC;;QACjD,MAAM,CAAC,OAAO,GAAG,OAAO,CAAC;IAC9B,OAAO,IAAI,CAAC;AACd,CAAC;AAED,MAAM,UAAU,kBAAkB,CAAC,KAAc;IAC/C,MAAM,SAAS,GAAG,QAAQ,CAAC,KAAK,CAAC,CAAC,UAAU,CAAC;IAC7C,OAAO,MAAM,CAAC,aAAa,CAAC,SAAS,CAAC,CAAC,CAAC,CAAE,SAAoB,CAAC,CAAC,CAAC,SAAS,CAAC;AAC7E,CAAC;AAED,MAAM,UAAU,yBAAyB,CAAC,OAAgB;IACxD,MAAM,SAAS,GAAG,QAAQ,CAAC,OAAO,CAAC,CAAC,UAAU,CAAC;IAC/C,OAAO,MAAM,CAAC,aAAa,CAAC,SAAS,CAAC,CAAC,CAAC,CAAE,SAAoB,CAAC,CAAC,CAAC,SAAS,CAAC;AAC7E,CAAC;AAED,MAAM,UAAU,oBAAoB,CAAC,OAAgB;IACnD,OAAO,MAAM,CAAC,aAAa,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC,SAAS,CAAC,CAAC;AAC3D,CAAC"}
@@ -0,0 +1,43 @@
1
+ export declare const RTK_MODES: readonly ["rewrite", "suggest"];
2
+ export declare const RTK_SOURCE_FILTER_LEVELS: readonly ["none", "minimal", "aggressive"];
3
+ export type RtkMode = (typeof RTK_MODES)[number];
4
+ export type RtkSourceFilterLevel = (typeof RTK_SOURCE_FILTER_LEVELS)[number];
5
+ export interface RtkOutputCompactionConfig {
6
+ enabled: boolean;
7
+ stripAnsi: boolean;
8
+ readCompaction: {
9
+ enabled: boolean;
10
+ };
11
+ truncate: {
12
+ enabled: boolean;
13
+ maxChars: number;
14
+ };
15
+ sourceCodeFilteringEnabled: boolean;
16
+ preserveExactSkillReads: boolean;
17
+ sourceCodeFiltering: RtkSourceFilterLevel;
18
+ smartTruncate: {
19
+ enabled: boolean;
20
+ maxLines: number;
21
+ };
22
+ aggregateTestOutput: boolean;
23
+ filterBuildOutput: boolean;
24
+ compactGitOutput: boolean;
25
+ aggregateLinterOutput: boolean;
26
+ groupSearchOutput: boolean;
27
+ trackSavings: boolean;
28
+ }
29
+ export interface RtkOptimizerConfig {
30
+ enabled: boolean;
31
+ mode: RtkMode;
32
+ guardWhenRtkMissing: boolean;
33
+ showRewriteNotifications: boolean;
34
+ outputCompaction: RtkOutputCompactionConfig;
35
+ }
36
+ export declare const DEFAULT_RTK_OPTIMIZER_CONFIG: RtkOptimizerConfig;
37
+ export interface RuntimeStatus {
38
+ readonly rtkAvailable: boolean;
39
+ readonly lastCheckedAt?: number;
40
+ readonly version?: string;
41
+ readonly lastError?: string;
42
+ }
43
+ //# sourceMappingURL=types.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"AAAA,eAAO,MAAM,SAAS,iCAAkC,CAAC;AACzD,eAAO,MAAM,wBAAwB,4CAA6C,CAAC;AAEnF,MAAM,MAAM,OAAO,GAAG,CAAC,OAAO,SAAS,CAAC,CAAC,MAAM,CAAC,CAAC;AACjD,MAAM,MAAM,oBAAoB,GAAG,CAAC,OAAO,wBAAwB,CAAC,CAAC,MAAM,CAAC,CAAC;AAE7E,MAAM,WAAW,yBAAyB;IACxC,OAAO,EAAE,OAAO,CAAC;IACjB,SAAS,EAAE,OAAO,CAAC;IACnB,cAAc,EAAE;QACd,OAAO,EAAE,OAAO,CAAC;KAClB,CAAC;IACF,QAAQ,EAAE;QACR,OAAO,EAAE,OAAO,CAAC;QACjB,QAAQ,EAAE,MAAM,CAAC;KAClB,CAAC;IACF,0BAA0B,EAAE,OAAO,CAAC;IACpC,uBAAuB,EAAE,OAAO,CAAC;IACjC,mBAAmB,EAAE,oBAAoB,CAAC;IAC1C,aAAa,EAAE;QACb,OAAO,EAAE,OAAO,CAAC;QACjB,QAAQ,EAAE,MAAM,CAAC;KAClB,CAAC;IACF,mBAAmB,EAAE,OAAO,CAAC;IAC7B,iBAAiB,EAAE,OAAO,CAAC;IAC3B,gBAAgB,EAAE,OAAO,CAAC;IAC1B,qBAAqB,EAAE,OAAO,CAAC;IAC/B,iBAAiB,EAAE,OAAO,CAAC;IAC3B,YAAY,EAAE,OAAO,CAAC;CACvB;AAED,MAAM,WAAW,kBAAkB;IACjC,OAAO,EAAE,OAAO,CAAC;IACjB,IAAI,EAAE,OAAO,CAAC;IACd,mBAAmB,EAAE,OAAO,CAAC;IAC7B,wBAAwB,EAAE,OAAO,CAAC;IAClC,gBAAgB,EAAE,yBAAyB,CAAC;CAC7C;AAED,eAAO,MAAM,4BAA4B,EAAE,kBA6B1C,CAAC;AAEF,MAAM,WAAW,aAAa;IAC5B,QAAQ,CAAC,YAAY,EAAE,OAAO,CAAC;IAC/B,QAAQ,CAAC,aAAa,CAAC,EAAE,MAAM,CAAC;IAChC,QAAQ,CAAC,OAAO,CAAC,EAAE,MAAM,CAAC;IAC1B,QAAQ,CAAC,SAAS,CAAC,EAAE,MAAM,CAAC;CAC7B"}
package/dist/types.js ADDED
@@ -0,0 +1,33 @@
1
+ export const RTK_MODES = ['rewrite', 'suggest'];
2
+ export const RTK_SOURCE_FILTER_LEVELS = ['none', 'minimal', 'aggressive'];
3
+ export const DEFAULT_RTK_OPTIMIZER_CONFIG = {
4
+ enabled: true,
5
+ mode: 'rewrite',
6
+ guardWhenRtkMissing: true,
7
+ showRewriteNotifications: true,
8
+ outputCompaction: {
9
+ enabled: true,
10
+ stripAnsi: true,
11
+ readCompaction: {
12
+ enabled: false,
13
+ },
14
+ truncate: {
15
+ enabled: true,
16
+ maxChars: 12_000,
17
+ },
18
+ sourceCodeFilteringEnabled: false,
19
+ preserveExactSkillReads: false,
20
+ sourceCodeFiltering: 'none',
21
+ smartTruncate: {
22
+ enabled: false,
23
+ maxLines: 220,
24
+ },
25
+ aggregateTestOutput: true,
26
+ filterBuildOutput: true,
27
+ compactGitOutput: true,
28
+ aggregateLinterOutput: true,
29
+ groupSearchOutput: true,
30
+ trackSavings: true,
31
+ },
32
+ };
33
+ //# sourceMappingURL=types.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.js","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"AAAA,MAAM,CAAC,MAAM,SAAS,GAAG,CAAC,SAAS,EAAE,SAAS,CAAU,CAAC;AACzD,MAAM,CAAC,MAAM,wBAAwB,GAAG,CAAC,MAAM,EAAE,SAAS,EAAE,YAAY,CAAU,CAAC;AAsCnF,MAAM,CAAC,MAAM,4BAA4B,GAAuB;IAC9D,OAAO,EAAE,IAAI;IACb,IAAI,EAAE,SAAS;IACf,mBAAmB,EAAE,IAAI;IACzB,wBAAwB,EAAE,IAAI;IAC9B,gBAAgB,EAAE;QAChB,OAAO,EAAE,IAAI;QACb,SAAS,EAAE,IAAI;QACf,cAAc,EAAE;YACd,OAAO,EAAE,KAAK;SACf;QACD,QAAQ,EAAE;YACR,OAAO,EAAE,IAAI;YACb,QAAQ,EAAE,MAAM;SACjB;QACD,0BAA0B,EAAE,KAAK;QACjC,uBAAuB,EAAE,KAAK;QAC9B,mBAAmB,EAAE,MAAM;QAC3B,aAAa,EAAE;YACb,OAAO,EAAE,KAAK;YACd,QAAQ,EAAE,GAAG;SACd;QACD,mBAAmB,EAAE,IAAI;QACzB,iBAAiB,EAAE,IAAI;QACvB,gBAAgB,EAAE,IAAI;QACtB,qBAAqB,EAAE,IAAI;QAC3B,iBAAiB,EAAE,IAAI;QACvB,YAAY,EAAE,IAAI;KACnB;CACF,CAAC"}
package/package.json ADDED
@@ -0,0 +1,42 @@
1
+ {
2
+ "name": "@felan-ai/ext-rtk-optimizer",
3
+ "version": "0.0.0",
4
+ "description": "RTK command rewriting and tool-output compaction for Felan",
5
+ "license": "MIT",
6
+ "type": "module",
7
+ "repository": {
8
+ "type": "git",
9
+ "url": "git+https://github.com/felan-ai/felan.git",
10
+ "directory": "packages/ext-rtk-optimizer"
11
+ },
12
+ "engines": {
13
+ "node": ">=22.19.0"
14
+ },
15
+ "files": [
16
+ "dist",
17
+ "LICENSE",
18
+ "NOTICE",
19
+ "README.md"
20
+ ],
21
+ "exports": {
22
+ ".": {
23
+ "types": "./dist/index.d.ts",
24
+ "import": "./dist/index.js"
25
+ }
26
+ },
27
+ "peerDependencies": {
28
+ "@felan-ai/agent-core": "^0.4.3"
29
+ },
30
+ "devDependencies": {
31
+ "@felan-ai/agent-core": "0.4.3"
32
+ },
33
+ "publishConfig": {
34
+ "access": "public",
35
+ "provenance": true
36
+ },
37
+ "scripts": {
38
+ "build": "rm -rf dist && tsc -p tsconfig.build.json",
39
+ "type-check": "tsc -p tsconfig.json --noEmit",
40
+ "test": "vitest run"
41
+ }
42
+ }