@sdsrs/codeagent 0.2.1 → 0.3.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.
- package/LICENSE +0 -0
- package/README.md +18 -6
- package/dist/adapters/__tests__/code-graph.test.d.ts +2 -0
- package/dist/adapters/__tests__/code-graph.test.d.ts.map +1 -0
- package/dist/adapters/__tests__/code-graph.test.js +83 -0
- package/dist/adapters/__tests__/code-graph.test.js.map +1 -0
- package/dist/adapters/__tests__/memory.test.d.ts +2 -0
- package/dist/adapters/__tests__/memory.test.d.ts.map +1 -0
- package/dist/adapters/__tests__/memory.test.js +150 -0
- package/dist/adapters/__tests__/memory.test.js.map +1 -0
- package/dist/adapters/code-graph.d.ts +3 -1
- package/dist/adapters/code-graph.d.ts.map +1 -1
- package/dist/adapters/code-graph.js +23 -20
- package/dist/adapters/code-graph.js.map +1 -1
- package/dist/adapters/memory.d.ts +1 -1
- package/dist/adapters/memory.d.ts.map +1 -1
- package/dist/adapters/memory.js +12 -8
- package/dist/adapters/memory.js.map +1 -1
- package/dist/adapters/orchestration/gsd.d.ts +0 -0
- package/dist/adapters/orchestration/gsd.d.ts.map +1 -1
- package/dist/adapters/orchestration/gsd.js +18 -1
- package/dist/adapters/orchestration/gsd.js.map +1 -1
- package/dist/adapters/orchestration/interface.d.ts +0 -0
- package/dist/adapters/orchestration/interface.d.ts.map +0 -0
- package/dist/adapters/orchestration/interface.js +0 -0
- package/dist/adapters/orchestration/interface.js.map +0 -0
- package/dist/adapters/orchestration/superpowers.d.ts +0 -0
- package/dist/adapters/orchestration/superpowers.d.ts.map +0 -0
- package/dist/adapters/orchestration/superpowers.js +0 -0
- package/dist/adapters/orchestration/superpowers.js.map +0 -0
- package/dist/broker/__tests__/broker.test.d.ts +2 -0
- package/dist/broker/__tests__/broker.test.d.ts.map +1 -0
- package/dist/broker/__tests__/broker.test.js +125 -0
- package/dist/broker/__tests__/broker.test.js.map +1 -0
- package/dist/broker/__tests__/compressor.test.d.ts +2 -0
- package/dist/broker/__tests__/compressor.test.d.ts.map +1 -0
- package/dist/broker/__tests__/compressor.test.js +145 -0
- package/dist/broker/__tests__/compressor.test.js.map +1 -0
- package/dist/broker/__tests__/query-parser.test.d.ts +2 -0
- package/dist/broker/__tests__/query-parser.test.d.ts.map +1 -0
- package/dist/broker/__tests__/query-parser.test.js +101 -0
- package/dist/broker/__tests__/query-parser.test.js.map +1 -0
- package/dist/broker/broker.d.ts +0 -0
- package/dist/broker/broker.d.ts.map +1 -1
- package/dist/broker/broker.js +17 -14
- package/dist/broker/broker.js.map +1 -1
- package/dist/broker/compressor.d.ts +0 -0
- package/dist/broker/compressor.d.ts.map +1 -1
- package/dist/broker/compressor.js +35 -1
- package/dist/broker/compressor.js.map +1 -1
- package/dist/broker/context-pack.d.ts +0 -0
- package/dist/broker/context-pack.d.ts.map +0 -0
- package/dist/broker/context-pack.js +0 -0
- package/dist/broker/context-pack.js.map +0 -0
- package/dist/broker/query-parser.d.ts +0 -0
- package/dist/broker/query-parser.d.ts.map +0 -0
- package/dist/broker/query-parser.js +0 -0
- package/dist/broker/query-parser.js.map +0 -0
- package/dist/cli/commands/chat.d.ts +0 -0
- package/dist/cli/commands/chat.d.ts.map +1 -1
- package/dist/cli/commands/chat.js +14 -1
- package/dist/cli/commands/chat.js.map +1 -1
- package/dist/cli/commands/config.d.ts +1 -2
- package/dist/cli/commands/config.d.ts.map +1 -1
- package/dist/cli/commands/config.js +0 -0
- package/dist/cli/commands/config.js.map +0 -0
- package/dist/cli/commands/memory.d.ts +0 -0
- package/dist/cli/commands/memory.d.ts.map +0 -0
- package/dist/cli/commands/memory.js +0 -0
- package/dist/cli/commands/memory.js.map +0 -0
- package/dist/cli/commands/search.d.ts +0 -0
- package/dist/cli/commands/search.d.ts.map +1 -1
- package/dist/cli/commands/search.js +6 -2
- package/dist/cli/commands/search.js.map +1 -1
- package/dist/cli/commands/session.d.ts +0 -0
- package/dist/cli/commands/session.d.ts.map +0 -0
- package/dist/cli/commands/session.js +0 -0
- package/dist/cli/commands/session.js.map +0 -0
- package/dist/cli/index.d.ts +0 -0
- package/dist/cli/index.d.ts.map +0 -0
- package/dist/cli/index.js +6 -4
- package/dist/cli/index.js.map +1 -1
- package/dist/cli/tui/renderer.d.ts +0 -0
- package/dist/cli/tui/renderer.d.ts.map +0 -0
- package/dist/cli/tui/renderer.js +0 -0
- package/dist/cli/tui/renderer.js.map +0 -0
- package/dist/hooks/post-compact.d.ts +0 -0
- package/dist/hooks/post-compact.d.ts.map +0 -0
- package/dist/hooks/post-compact.js +1 -1
- package/dist/hooks/post-compact.js.map +1 -1
- package/dist/hooks/session-start.d.ts +0 -0
- package/dist/hooks/session-start.d.ts.map +0 -0
- package/dist/hooks/session-start.js +2 -1
- package/dist/hooks/session-start.js.map +1 -1
- package/dist/hooks/stop.d.ts +0 -0
- package/dist/hooks/stop.d.ts.map +0 -0
- package/dist/hooks/stop.js +0 -0
- package/dist/hooks/stop.js.map +0 -0
- package/dist/hooks/user-prompt.d.ts +0 -0
- package/dist/hooks/user-prompt.d.ts.map +0 -0
- package/dist/hooks/user-prompt.js +0 -0
- package/dist/hooks/user-prompt.js.map +0 -0
- package/dist/providers/__tests__/anthropic-api.test.d.ts +2 -0
- package/dist/providers/__tests__/anthropic-api.test.d.ts.map +1 -0
- package/dist/providers/__tests__/anthropic-api.test.js +113 -0
- package/dist/providers/__tests__/anthropic-api.test.js.map +1 -0
- package/dist/providers/__tests__/claude-sdk.test.d.ts +2 -0
- package/dist/providers/__tests__/claude-sdk.test.d.ts.map +1 -0
- package/dist/providers/__tests__/claude-sdk.test.js +121 -0
- package/dist/providers/__tests__/claude-sdk.test.js.map +1 -0
- package/dist/providers/anthropic-api.d.ts +1 -0
- package/dist/providers/anthropic-api.d.ts.map +1 -1
- package/dist/providers/anthropic-api.js +12 -6
- package/dist/providers/anthropic-api.js.map +1 -1
- package/dist/providers/claude-cli.d.ts +0 -0
- package/dist/providers/claude-cli.d.ts.map +0 -0
- package/dist/providers/claude-cli.js +0 -0
- package/dist/providers/claude-cli.js.map +0 -0
- package/dist/providers/claude-sdk.d.ts +0 -0
- package/dist/providers/claude-sdk.d.ts.map +0 -0
- package/dist/providers/claude-sdk.js +0 -0
- package/dist/providers/claude-sdk.js.map +0 -0
- package/dist/providers/interface.d.ts +1 -0
- package/dist/providers/interface.d.ts.map +1 -1
- package/dist/providers/interface.js +0 -0
- package/dist/providers/interface.js.map +0 -0
- package/dist/scripts/install-hooks.d.ts +2 -2
- package/dist/scripts/install-hooks.d.ts.map +0 -0
- package/dist/scripts/install-hooks.js +6 -9
- package/dist/scripts/install-hooks.js.map +1 -1
- package/dist/session/__tests__/manager.test.d.ts +2 -0
- package/dist/session/__tests__/manager.test.d.ts.map +1 -0
- package/dist/session/__tests__/manager.test.js +108 -0
- package/dist/session/__tests__/manager.test.js.map +1 -0
- package/dist/session/manager.d.ts +0 -0
- package/dist/session/manager.d.ts.map +1 -1
- package/dist/session/manager.js +2 -1
- package/dist/session/manager.js.map +1 -1
- package/dist/session/schema.d.ts +0 -0
- package/dist/session/schema.d.ts.map +1 -1
- package/dist/session/schema.js +2 -1
- package/dist/session/schema.js.map +1 -1
- package/dist/utils/__tests__/exec.test.d.ts +2 -0
- package/dist/utils/__tests__/exec.test.d.ts.map +1 -0
- package/dist/utils/__tests__/exec.test.js +104 -0
- package/dist/utils/__tests__/exec.test.js.map +1 -0
- package/dist/utils/__tests__/tokens.test.d.ts +2 -0
- package/dist/utils/__tests__/tokens.test.d.ts.map +1 -0
- package/dist/utils/__tests__/tokens.test.js +64 -0
- package/dist/utils/__tests__/tokens.test.js.map +1 -0
- package/dist/utils/exec.d.ts +16 -0
- package/dist/utils/exec.d.ts.map +1 -1
- package/dist/utils/exec.js +33 -3
- package/dist/utils/exec.js.map +1 -1
- package/dist/utils/tokens.d.ts +0 -0
- package/dist/utils/tokens.d.ts.map +0 -0
- package/dist/utils/tokens.js +0 -0
- package/dist/utils/tokens.js.map +0 -0
- package/package.json +1 -1
- package/src/skills/brainstorm.md +0 -0
- package/src/skills/remember.md +0 -0
- package/src/skills/review.md +0 -0
- package/src/skills/spec.md +0 -0
|
@@ -0,0 +1,104 @@
|
|
|
1
|
+
import { describe, it, expect } from 'vitest';
|
|
2
|
+
import { execSafe, execQuiet, execSafeAsync, execQuietAsync } from '../exec.js';
|
|
3
|
+
describe('execSafe', () => {
|
|
4
|
+
it('runs a command and returns stdout', () => {
|
|
5
|
+
const result = execSafe('echo', ['hello world']);
|
|
6
|
+
expect(result.ok).toBe(true);
|
|
7
|
+
expect(result.stdout).toBe('hello world');
|
|
8
|
+
});
|
|
9
|
+
it('returns ok:false for nonexistent command', () => {
|
|
10
|
+
const result = execSafe('nonexistent-command-xyz', ['arg']);
|
|
11
|
+
expect(result.ok).toBe(false);
|
|
12
|
+
expect(result.stdout).toBe('');
|
|
13
|
+
});
|
|
14
|
+
it('returns ok:false for command that exits non-zero', () => {
|
|
15
|
+
const result = execSafe('node', ['-e', 'process.exit(1)']);
|
|
16
|
+
expect(result.ok).toBe(false);
|
|
17
|
+
});
|
|
18
|
+
it('returns ok:false on timeout', () => {
|
|
19
|
+
const result = execSafe('node', ['-e', 'setTimeout(()=>{},5000)'], { timeout: 200 });
|
|
20
|
+
expect(result.ok).toBe(false);
|
|
21
|
+
});
|
|
22
|
+
it('trims stdout whitespace', () => {
|
|
23
|
+
const result = execSafe('echo', [' trimmed ']);
|
|
24
|
+
expect(result.ok).toBe(true);
|
|
25
|
+
expect(result.stdout).toBe('trimmed');
|
|
26
|
+
});
|
|
27
|
+
it('does not interpret shell metacharacters', () => {
|
|
28
|
+
// With execFileSync, shell metacharacters are passed as literal args
|
|
29
|
+
const result = execSafe('echo', ['$(whoami)', '&&', 'echo', 'injected']);
|
|
30
|
+
expect(result.ok).toBe(true);
|
|
31
|
+
// Should output the literal string, not execute the command
|
|
32
|
+
expect(result.stdout).toContain('$(whoami)');
|
|
33
|
+
expect(result.stdout).toContain('&&');
|
|
34
|
+
});
|
|
35
|
+
it('handles args with spaces correctly', () => {
|
|
36
|
+
const result = execSafe('echo', ['hello world', 'foo bar']);
|
|
37
|
+
expect(result.ok).toBe(true);
|
|
38
|
+
expect(result.stdout).toBe('hello world foo bar');
|
|
39
|
+
});
|
|
40
|
+
it('respects cwd option', () => {
|
|
41
|
+
const result = execSafe('pwd', [], { cwd: '/tmp' });
|
|
42
|
+
expect(result.ok).toBe(true);
|
|
43
|
+
// On some systems /tmp is a symlink, so just check it resolves
|
|
44
|
+
expect(result.stdout).toContain('tmp');
|
|
45
|
+
});
|
|
46
|
+
});
|
|
47
|
+
describe('execQuiet', () => {
|
|
48
|
+
it('returns stdout on success', () => {
|
|
49
|
+
expect(execQuiet('echo', ['hi'])).toBe('hi');
|
|
50
|
+
});
|
|
51
|
+
it('returns empty string on failure', () => {
|
|
52
|
+
expect(execQuiet('nonexistent-xyz', [])).toBe('');
|
|
53
|
+
});
|
|
54
|
+
});
|
|
55
|
+
describe('execSafeAsync', () => {
|
|
56
|
+
it('runs a command and returns stdout', async () => {
|
|
57
|
+
const result = await execSafeAsync('echo', ['hello world']);
|
|
58
|
+
expect(result.ok).toBe(true);
|
|
59
|
+
expect(result.stdout).toBe('hello world');
|
|
60
|
+
});
|
|
61
|
+
it('returns ok:false for nonexistent command', async () => {
|
|
62
|
+
const result = await execSafeAsync('nonexistent-command-xyz', ['arg']);
|
|
63
|
+
expect(result.ok).toBe(false);
|
|
64
|
+
expect(result.stdout).toBe('');
|
|
65
|
+
});
|
|
66
|
+
it('returns ok:false for command that exits non-zero', async () => {
|
|
67
|
+
const result = await execSafeAsync('node', ['-e', 'process.exit(1)']);
|
|
68
|
+
expect(result.ok).toBe(false);
|
|
69
|
+
});
|
|
70
|
+
it('returns ok:false on timeout', async () => {
|
|
71
|
+
const result = await execSafeAsync('node', ['-e', 'setTimeout(()=>{},5000)'], { timeout: 200 });
|
|
72
|
+
expect(result.ok).toBe(false);
|
|
73
|
+
});
|
|
74
|
+
it('trims stdout whitespace', async () => {
|
|
75
|
+
const result = await execSafeAsync('echo', [' trimmed ']);
|
|
76
|
+
expect(result.ok).toBe(true);
|
|
77
|
+
expect(result.stdout).toBe('trimmed');
|
|
78
|
+
});
|
|
79
|
+
it('does not interpret shell metacharacters', async () => {
|
|
80
|
+
const result = await execSafeAsync('echo', ['$(whoami)', '&&', 'echo', 'injected']);
|
|
81
|
+
expect(result.ok).toBe(true);
|
|
82
|
+
expect(result.stdout).toContain('$(whoami)');
|
|
83
|
+
expect(result.stdout).toContain('&&');
|
|
84
|
+
});
|
|
85
|
+
it('handles args with spaces correctly', async () => {
|
|
86
|
+
const result = await execSafeAsync('echo', ['hello world', 'foo bar']);
|
|
87
|
+
expect(result.ok).toBe(true);
|
|
88
|
+
expect(result.stdout).toBe('hello world foo bar');
|
|
89
|
+
});
|
|
90
|
+
it('respects cwd option', async () => {
|
|
91
|
+
const result = await execSafeAsync('pwd', [], { cwd: '/tmp' });
|
|
92
|
+
expect(result.ok).toBe(true);
|
|
93
|
+
expect(result.stdout).toContain('tmp');
|
|
94
|
+
});
|
|
95
|
+
});
|
|
96
|
+
describe('execQuietAsync', () => {
|
|
97
|
+
it('returns stdout on success', async () => {
|
|
98
|
+
expect(await execQuietAsync('echo', ['hi'])).toBe('hi');
|
|
99
|
+
});
|
|
100
|
+
it('returns empty string on failure', async () => {
|
|
101
|
+
expect(await execQuietAsync('nonexistent-xyz', [])).toBe('');
|
|
102
|
+
});
|
|
103
|
+
});
|
|
104
|
+
//# sourceMappingURL=exec.test.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"exec.test.js","sourceRoot":"","sources":["../../../src/utils/__tests__/exec.test.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"tokens.test.d.ts","sourceRoot":"","sources":["../../../src/utils/__tests__/tokens.test.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1,64 @@
|
|
|
1
|
+
import { describe, it, expect } from 'vitest';
|
|
2
|
+
import { estimateTokens, truncateToTokenBudget } from '../tokens.js';
|
|
3
|
+
describe('estimateTokens', () => {
|
|
4
|
+
it('returns 0 for empty string', () => {
|
|
5
|
+
expect(estimateTokens('')).toBe(0);
|
|
6
|
+
});
|
|
7
|
+
it('estimates ASCII text at ~4 chars per token', () => {
|
|
8
|
+
const text = 'hello world'; // 11 chars → ~3 tokens
|
|
9
|
+
const tokens = estimateTokens(text);
|
|
10
|
+
expect(tokens).toBeGreaterThan(0);
|
|
11
|
+
expect(tokens).toBeLessThan(10);
|
|
12
|
+
});
|
|
13
|
+
it('estimates CJK text at ~2 chars per token', () => {
|
|
14
|
+
const cjk = '你好世界测试'; // 6 CJK chars → ~3 tokens
|
|
15
|
+
const ascii = 'abcdef'; // 6 ASCII chars → ~2 tokens
|
|
16
|
+
expect(estimateTokens(cjk)).toBeGreaterThan(estimateTokens(ascii));
|
|
17
|
+
});
|
|
18
|
+
it('handles mixed CJK and ASCII', () => {
|
|
19
|
+
const mixed = 'hello 你好 world';
|
|
20
|
+
const tokens = estimateTokens(mixed);
|
|
21
|
+
expect(tokens).toBeGreaterThan(0);
|
|
22
|
+
});
|
|
23
|
+
it('handles code with special characters', () => {
|
|
24
|
+
const code = 'function foo(x: string): boolean { return x.length > 0; }';
|
|
25
|
+
const tokens = estimateTokens(code);
|
|
26
|
+
expect(tokens).toBeGreaterThan(5);
|
|
27
|
+
expect(tokens).toBeLessThan(50);
|
|
28
|
+
});
|
|
29
|
+
});
|
|
30
|
+
describe('truncateToTokenBudget', () => {
|
|
31
|
+
it('returns text unchanged if within budget', () => {
|
|
32
|
+
const text = 'short text';
|
|
33
|
+
expect(truncateToTokenBudget(text, 100)).toBe(text);
|
|
34
|
+
});
|
|
35
|
+
it('truncates text exceeding budget', () => {
|
|
36
|
+
const lines = Array.from({ length: 100 }, (_, i) => `This is line number ${i} with some content`);
|
|
37
|
+
const text = lines.join('\n');
|
|
38
|
+
const truncated = truncateToTokenBudget(text, 20);
|
|
39
|
+
expect(truncated.length).toBeLessThan(text.length);
|
|
40
|
+
});
|
|
41
|
+
it('truncates at line boundaries', () => {
|
|
42
|
+
const text = 'line one\nline two\nline three\nline four\nline five';
|
|
43
|
+
const truncated = truncateToTokenBudget(text, 5);
|
|
44
|
+
// Should be shorter than original
|
|
45
|
+
expect(truncated.length).toBeLessThan(text.length);
|
|
46
|
+
// Each line should be a complete "line X" — no mid-word cuts
|
|
47
|
+
const lines = truncated.split('\n');
|
|
48
|
+
for (const line of lines) {
|
|
49
|
+
expect(line).toMatch(/^line \w+$/);
|
|
50
|
+
}
|
|
51
|
+
});
|
|
52
|
+
it('handles single very long line', () => {
|
|
53
|
+
const text = 'a'.repeat(10000);
|
|
54
|
+
const truncated = truncateToTokenBudget(text, 10);
|
|
55
|
+
expect(truncated.length).toBeLessThan(text.length);
|
|
56
|
+
expect(truncated).toContain('...');
|
|
57
|
+
});
|
|
58
|
+
it('returns empty string for zero budget', () => {
|
|
59
|
+
const result = truncateToTokenBudget('some text', 0);
|
|
60
|
+
// Zero budget → truncated to nothing or first line truncated
|
|
61
|
+
expect(result.length).toBeLessThanOrEqual('some text'.length);
|
|
62
|
+
});
|
|
63
|
+
});
|
|
64
|
+
//# sourceMappingURL=tokens.test.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"tokens.test.js","sourceRoot":"","sources":["../../../src/utils/__tests__/tokens.test.ts"],"names":[],"mappings":"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"}
|
package/dist/utils/exec.d.ts
CHANGED
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
export interface ExecResult {
|
|
2
2
|
stdout: string;
|
|
3
3
|
ok: boolean;
|
|
4
|
+
stderr?: string;
|
|
4
5
|
}
|
|
5
6
|
/**
|
|
6
7
|
* Execute a command with timeout and error handling.
|
|
@@ -18,4 +19,19 @@ export declare function execQuiet(cmd: string, args: string[], opts?: {
|
|
|
18
19
|
cwd?: string;
|
|
19
20
|
timeout?: number;
|
|
20
21
|
}): string;
|
|
22
|
+
/**
|
|
23
|
+
* Async version of execSafe — truly non-blocking.
|
|
24
|
+
* Uses child_process.execFile (no shell) to prevent injection.
|
|
25
|
+
*/
|
|
26
|
+
export declare function execSafeAsync(cmd: string, args: string[], opts?: {
|
|
27
|
+
cwd?: string;
|
|
28
|
+
timeout?: number;
|
|
29
|
+
}): Promise<ExecResult>;
|
|
30
|
+
/**
|
|
31
|
+
* Async version of execQuiet.
|
|
32
|
+
*/
|
|
33
|
+
export declare function execQuietAsync(cmd: string, args: string[], opts?: {
|
|
34
|
+
cwd?: string;
|
|
35
|
+
timeout?: number;
|
|
36
|
+
}): Promise<string>;
|
|
21
37
|
//# sourceMappingURL=exec.d.ts.map
|
package/dist/utils/exec.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"exec.d.ts","sourceRoot":"","sources":["../../src/utils/exec.ts"],"names":[],"mappings":"AAEA,MAAM,WAAW,UAAU;IACzB,MAAM,EAAE,MAAM,CAAC;IACf,EAAE,EAAE,OAAO,CAAC;
|
|
1
|
+
{"version":3,"file":"exec.d.ts","sourceRoot":"","sources":["../../src/utils/exec.ts"],"names":[],"mappings":"AAEA,MAAM,WAAW,UAAU;IACzB,MAAM,EAAE,MAAM,CAAC;IACf,EAAE,EAAE,OAAO,CAAC;IACZ,MAAM,CAAC,EAAE,MAAM,CAAC;CACjB;AAED;;;;GAIG;AACH,wBAAgB,QAAQ,CACtB,GAAG,EAAE,MAAM,EACX,IAAI,EAAE,MAAM,EAAE,EACd,IAAI,GAAE;IAAE,GAAG,CAAC,EAAE,MAAM,CAAC;IAAC,OAAO,CAAC,EAAE,MAAM,CAAA;CAAO,GAC5C,UAAU,CAeZ;AAED;;GAEG;AACH,wBAAgB,SAAS,CACvB,GAAG,EAAE,MAAM,EACX,IAAI,EAAE,MAAM,EAAE,EACd,IAAI,GAAE;IAAE,GAAG,CAAC,EAAE,MAAM,CAAC;IAAC,OAAO,CAAC,EAAE,MAAM,CAAA;CAAO,GAC5C,MAAM,CAER;AAED;;;GAGG;AACH,wBAAgB,aAAa,CAC3B,GAAG,EAAE,MAAM,EACX,IAAI,EAAE,MAAM,EAAE,EACd,IAAI,GAAE;IAAE,GAAG,CAAC,EAAE,MAAM,CAAC;IAAC,OAAO,CAAC,EAAE,MAAM,CAAA;CAAO,GAC5C,OAAO,CAAC,UAAU,CAAC,CAqBrB;AAED;;GAEG;AACH,wBAAsB,cAAc,CAClC,GAAG,EAAE,MAAM,EACX,IAAI,EAAE,MAAM,EAAE,EACd,IAAI,GAAE;IAAE,GAAG,CAAC,EAAE,MAAM,CAAC;IAAC,OAAO,CAAC,EAAE,MAAM,CAAA;CAAO,GAC5C,OAAO,CAAC,MAAM,CAAC,CAGjB"}
|
package/dist/utils/exec.js
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { execFileSync } from 'node:child_process';
|
|
1
|
+
import { execFile, execFileSync } from 'node:child_process';
|
|
2
2
|
/**
|
|
3
3
|
* Execute a command with timeout and error handling.
|
|
4
4
|
* Uses execFileSync (no shell) to prevent command injection.
|
|
@@ -16,8 +16,9 @@ export function execSafe(cmd, args, opts = {}) {
|
|
|
16
16
|
});
|
|
17
17
|
return { stdout: stdout.trim(), ok: true };
|
|
18
18
|
}
|
|
19
|
-
catch {
|
|
20
|
-
|
|
19
|
+
catch (err) {
|
|
20
|
+
const stderr = err?.stderr;
|
|
21
|
+
return { stdout: '', ok: false, stderr: stderr ? String(stderr).trim() : undefined };
|
|
21
22
|
}
|
|
22
23
|
}
|
|
23
24
|
/**
|
|
@@ -26,4 +27,33 @@ export function execSafe(cmd, args, opts = {}) {
|
|
|
26
27
|
export function execQuiet(cmd, args, opts = {}) {
|
|
27
28
|
return execSafe(cmd, args, opts).stdout;
|
|
28
29
|
}
|
|
30
|
+
/**
|
|
31
|
+
* Async version of execSafe — truly non-blocking.
|
|
32
|
+
* Uses child_process.execFile (no shell) to prevent injection.
|
|
33
|
+
*/
|
|
34
|
+
export function execSafeAsync(cmd, args, opts = {}) {
|
|
35
|
+
const { cwd = process.cwd(), timeout = 3000 } = opts;
|
|
36
|
+
return new Promise((resolve) => {
|
|
37
|
+
execFile(cmd, args, {
|
|
38
|
+
cwd,
|
|
39
|
+
timeout,
|
|
40
|
+
encoding: 'utf8',
|
|
41
|
+
maxBuffer: 1024 * 1024,
|
|
42
|
+
}, (err, stdout, stderr) => {
|
|
43
|
+
if (err) {
|
|
44
|
+
resolve({ stdout: '', ok: false, stderr: stderr ? String(stderr).trim() : undefined });
|
|
45
|
+
}
|
|
46
|
+
else {
|
|
47
|
+
resolve({ stdout: String(stdout).trim(), ok: true });
|
|
48
|
+
}
|
|
49
|
+
});
|
|
50
|
+
});
|
|
51
|
+
}
|
|
52
|
+
/**
|
|
53
|
+
* Async version of execQuiet.
|
|
54
|
+
*/
|
|
55
|
+
export async function execQuietAsync(cmd, args, opts = {}) {
|
|
56
|
+
const result = await execSafeAsync(cmd, args, opts);
|
|
57
|
+
return result.stdout;
|
|
58
|
+
}
|
|
29
59
|
//# sourceMappingURL=exec.js.map
|
package/dist/utils/exec.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"exec.js","sourceRoot":"","sources":["../../src/utils/exec.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAC;
|
|
1
|
+
{"version":3,"file":"exec.js","sourceRoot":"","sources":["../../src/utils/exec.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAC;AAQ5D;;;;GAIG;AACH,MAAM,UAAU,QAAQ,CACtB,GAAW,EACX,IAAc,EACd,OAA2C,EAAE;IAE7C,MAAM,EAAE,GAAG,GAAG,OAAO,CAAC,GAAG,EAAE,EAAE,OAAO,GAAG,IAAI,EAAE,GAAG,IAAI,CAAC;IACrD,IAAI,CAAC;QACH,MAAM,MAAM,GAAG,YAAY,CAAC,GAAG,EAAE,IAAI,EAAE;YACrC,GAAG;YACH,OAAO;YACP,QAAQ,EAAE,MAAM;YAChB,KAAK,EAAE,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC;YAC/B,SAAS,EAAE,IAAI,GAAG,IAAI;SACvB,CAAC,CAAC;QACH,OAAO,EAAE,MAAM,EAAE,MAAM,CAAC,IAAI,EAAE,EAAE,EAAE,EAAE,IAAI,EAAE,CAAC;IAC7C,CAAC;IAAC,OAAO,GAAY,EAAE,CAAC;QACtB,MAAM,MAAM,GAAI,GAAoC,EAAE,MAAM,CAAC;QAC7D,OAAO,EAAE,MAAM,EAAE,EAAE,EAAE,EAAE,EAAE,KAAK,EAAE,MAAM,EAAE,MAAM,CAAC,CAAC,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC,SAAS,EAAE,CAAC;IACvF,CAAC;AACH,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,SAAS,CACvB,GAAW,EACX,IAAc,EACd,OAA2C,EAAE;IAE7C,OAAO,QAAQ,CAAC,GAAG,EAAE,IAAI,EAAE,IAAI,CAAC,CAAC,MAAM,CAAC;AAC1C,CAAC;AAED;;;GAGG;AACH,MAAM,UAAU,aAAa,CAC3B,GAAW,EACX,IAAc,EACd,OAA2C,EAAE;IAE7C,MAAM,EAAE,GAAG,GAAG,OAAO,CAAC,GAAG,EAAE,EAAE,OAAO,GAAG,IAAI,EAAE,GAAG,IAAI,CAAC;IACrD,OAAO,IAAI,OAAO,CAAC,CAAC,OAAO,EAAE,EAAE;QAC7B,QAAQ,CACN,GAAG,EACH,IAAI,EACJ;YACE,GAAG;YACH,OAAO;YACP,QAAQ,EAAE,MAAM;YAChB,SAAS,EAAE,IAAI,GAAG,IAAI;SACvB,EACD,CAAC,GAAG,EAAE,MAAM,EAAE,MAAM,EAAE,EAAE;YACtB,IAAI,GAAG,EAAE,CAAC;gBACR,OAAO,CAAC,EAAE,MAAM,EAAE,EAAE,EAAE,EAAE,EAAE,KAAK,EAAE,MAAM,EAAE,MAAM,CAAC,CAAC,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC,SAAS,EAAE,CAAC,CAAC;YACzF,CAAC;iBAAM,CAAC;gBACN,OAAO,CAAC,EAAE,MAAM,EAAE,MAAM,CAAC,MAAM,CAAC,CAAC,IAAI,EAAE,EAAE,EAAE,EAAE,IAAI,EAAE,CAAC,CAAC;YACvD,CAAC;QACH,CAAC,CACF,CAAC;IACJ,CAAC,CAAC,CAAC;AACL,CAAC;AAED;;GAEG;AACH,MAAM,CAAC,KAAK,UAAU,cAAc,CAClC,GAAW,EACX,IAAc,EACd,OAA2C,EAAE;IAE7C,MAAM,MAAM,GAAG,MAAM,aAAa,CAAC,GAAG,EAAE,IAAI,EAAE,IAAI,CAAC,CAAC;IACpD,OAAO,MAAM,CAAC,MAAM,CAAC;AACvB,CAAC"}
|
package/dist/utils/tokens.d.ts
CHANGED
|
File without changes
|
|
File without changes
|
package/dist/utils/tokens.js
CHANGED
|
File without changes
|
package/dist/utils/tokens.js.map
CHANGED
|
File without changes
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@sdsrs/codeagent",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.3.0",
|
|
4
4
|
"description": "CodeAgent — Context Broker + CLI for intelligent coding assistance. Integrates code search, memory, and orchestration.",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"main": "dist/broker/broker.js",
|
package/src/skills/brainstorm.md
CHANGED
|
File without changes
|
package/src/skills/remember.md
CHANGED
|
File without changes
|
package/src/skills/review.md
CHANGED
|
File without changes
|
package/src/skills/spec.md
CHANGED
|
File without changes
|