@sdsrs/codeagent 0.2.1 → 0.4.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 +118 -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 +168 -0
- package/dist/adapters/__tests__/memory.test.js.map +1 -0
- package/dist/adapters/code-graph.d.ts +7 -1
- package/dist/adapters/code-graph.d.ts.map +1 -1
- package/dist/adapters/code-graph.js +69 -33
- 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 +23 -14
- 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 +207 -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 +278 -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 +1 -1
- package/dist/broker/broker.d.ts.map +1 -1
- package/dist/broker/broker.js +45 -29
- 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 +82 -2
- package/dist/broker/compressor.js.map +1 -1
- package/dist/broker/context-pack.d.ts +3 -0
- package/dist/broker/context-pack.d.ts.map +1 -1
- package/dist/broker/context-pack.js +18 -0
- package/dist/broker/context-pack.js.map +1 -1
- 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/__tests__/stop.test.d.ts +2 -0
- package/dist/hooks/__tests__/stop.test.d.ts.map +1 -0
- package/dist/hooks/__tests__/stop.test.js +88 -0
- package/dist/hooks/__tests__/stop.test.js.map +1 -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 +8 -7
- 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 +6 -5
- package/dist/hooks/session-start.js.map +1 -1
- package/dist/hooks/stop.d.ts +6 -0
- package/dist/hooks/stop.d.ts.map +1 -1
- package/dist/hooks/stop.js +59 -42
- package/dist/hooks/stop.js.map +1 -1
- 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 +18 -12
- 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 +1 -1
- package/dist/providers/claude-cli.js +4 -16
- package/dist/providers/claude-cli.js.map +1 -1
- package/dist/providers/claude-sdk.d.ts +3 -2
- package/dist/providers/claude-sdk.d.ts.map +1 -1
- package/dist/providers/claude-sdk.js +12 -11
- package/dist/providers/claude-sdk.js.map +1 -1
- 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
|
@@ -7,7 +7,7 @@ export interface MemoryResult {
|
|
|
7
7
|
}
|
|
8
8
|
/**
|
|
9
9
|
* Query memory engine via claude-mem-lite CLI.
|
|
10
|
-
*
|
|
10
|
+
* Uses async exec for truly non-blocking subprocess calls.
|
|
11
11
|
*/
|
|
12
12
|
export declare function queryMemory(parsed: ParsedQuery, tokenBudget: number, stage?: Stage): Promise<MemoryResult>;
|
|
13
13
|
//# sourceMappingURL=memory.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"memory.d.ts","sourceRoot":"","sources":["../../src/adapters/memory.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,2BAA2B,CAAC;AAC7D,OAAO,KAAK,EAAE,WAAW,EAAE,KAAK,EAAE,MAAM,2BAA2B,CAAC;AAEpE,MAAM,WAAW,YAAY;IAC3B,QAAQ,EAAE,WAAW,EAAE,CAAC;IACxB,WAAW,EAAE,WAAW,EAAE,CAAC;IAC3B,GAAG,EAAE,MAAM,CAAC;CACb;AAeD;;;GAGG;AACH,wBAAsB,WAAW,CAC/B,MAAM,EAAE,WAAW,EACnB,WAAW,EAAE,MAAM,EACnB,KAAK,CAAC,EAAE,KAAK,GACZ,OAAO,CAAC,YAAY,CAAC,
|
|
1
|
+
{"version":3,"file":"memory.d.ts","sourceRoot":"","sources":["../../src/adapters/memory.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,2BAA2B,CAAC;AAC7D,OAAO,KAAK,EAAE,WAAW,EAAE,KAAK,EAAE,MAAM,2BAA2B,CAAC;AAEpE,MAAM,WAAW,YAAY;IAC3B,QAAQ,EAAE,WAAW,EAAE,CAAC;IACxB,WAAW,EAAE,WAAW,EAAE,CAAC;IAC3B,GAAG,EAAE,MAAM,CAAC;CACb;AAeD;;;GAGG;AACH,wBAAsB,WAAW,CAC/B,MAAM,EAAE,WAAW,EACnB,WAAW,EAAE,MAAM,EACnB,KAAK,CAAC,EAAE,KAAK,GACZ,OAAO,CAAC,YAAY,CAAC,CAiDvB"}
|
package/dist/adapters/memory.js
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import { execSafeAsync } from '../utils/exec.js';
|
|
2
2
|
import { truncateToTokenBudget } from '../utils/tokens.js';
|
|
3
3
|
const MEM = 'claude-mem-lite';
|
|
4
4
|
function getSearchTypes(stage) {
|
|
@@ -13,7 +13,7 @@ function getSearchTypes(stage) {
|
|
|
13
13
|
}
|
|
14
14
|
/**
|
|
15
15
|
* Query memory engine via claude-mem-lite CLI.
|
|
16
|
-
*
|
|
16
|
+
* Uses async exec for truly non-blocking subprocess calls.
|
|
17
17
|
*/
|
|
18
18
|
export async function queryMemory(parsed, tokenBudget, stage) {
|
|
19
19
|
const result = { memories: [], bugWarnings: [], raw: '' };
|
|
@@ -22,22 +22,27 @@ export async function queryMemory(parsed, tokenBudget, stage) {
|
|
|
22
22
|
return result;
|
|
23
23
|
const types = getSearchTypes(stage);
|
|
24
24
|
const allRaw = [];
|
|
25
|
+
// Build all search calls upfront, run in single Promise.allSettled
|
|
26
|
+
// Timeouts kept tight (800ms each, max 3 calls) to stay within 3s hook budget
|
|
27
|
+
const calls = [];
|
|
25
28
|
if (types.length === 0) {
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
allRaw.push(stdout);
|
|
29
|
+
// Unfiltered search + bugfix search in parallel
|
|
30
|
+
calls.push(execSafeAsync(MEM, ['search', searchQuery, '--limit', '8'], { timeout: 800 }), execSafeAsync(MEM, ['search', searchQuery, '--type', 'bugfix', '--limit', '3'], { timeout: 800 }));
|
|
29
31
|
}
|
|
30
32
|
else {
|
|
33
|
+
// Typed searches (cap at 2) + bugfix if not already included — all in parallel
|
|
31
34
|
for (const type of types.slice(0, 2)) {
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
+
calls.push(execSafeAsync(MEM, ['search', searchQuery, '--type', type, '--limit', '5'], { timeout: 800 }));
|
|
36
|
+
}
|
|
37
|
+
if (!types.includes('bugfix')) {
|
|
38
|
+
calls.push(execSafeAsync(MEM, ['search', searchQuery, '--type', 'bugfix', '--limit', '3'], { timeout: 800 }));
|
|
35
39
|
}
|
|
36
40
|
}
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
if (ok && stdout)
|
|
40
|
-
allRaw.push(stdout);
|
|
41
|
+
const results = await Promise.allSettled(calls);
|
|
42
|
+
for (const r of results) {
|
|
43
|
+
if (r.status === 'fulfilled' && r.value.ok && r.value.stdout) {
|
|
44
|
+
allRaw.push(r.value.stdout);
|
|
45
|
+
}
|
|
41
46
|
}
|
|
42
47
|
result.raw = allRaw.join('\n---\n');
|
|
43
48
|
if (result.raw) {
|
|
@@ -53,19 +58,22 @@ function parseMemoryEntries(raw) {
|
|
|
53
58
|
return [];
|
|
54
59
|
const entries = [];
|
|
55
60
|
const blocks = raw.split(/(?:^|\n)---\n/);
|
|
56
|
-
for (
|
|
57
|
-
const trimmed =
|
|
61
|
+
for (let i = 0; i < blocks.length; i++) {
|
|
62
|
+
const trimmed = blocks[i].trim();
|
|
58
63
|
if (!trimmed)
|
|
59
64
|
continue;
|
|
60
65
|
const lines = trimmed.split('\n');
|
|
61
66
|
const firstLine = lines[0] || '';
|
|
62
67
|
const match = firstLine.match(/^#?(\d+)\s*\[(\w+)]\s*(.+)/);
|
|
68
|
+
// Position-based confidence: earlier results are more relevant
|
|
69
|
+
const confidence = Math.max(0.1, 1.0 - i * 0.1);
|
|
63
70
|
if (match) {
|
|
64
71
|
entries.push({
|
|
65
72
|
id: parseInt(match[1], 10),
|
|
66
73
|
type: match[2],
|
|
67
74
|
title: match[3].trim(),
|
|
68
75
|
body: lines.slice(1).join('\n').trim(),
|
|
76
|
+
confidence,
|
|
69
77
|
});
|
|
70
78
|
}
|
|
71
79
|
else {
|
|
@@ -73,6 +81,7 @@ function parseMemoryEntries(raw) {
|
|
|
73
81
|
type: 'semantic',
|
|
74
82
|
title: firstLine.slice(0, 100),
|
|
75
83
|
body: lines.slice(1).join('\n').trim(),
|
|
84
|
+
confidence: confidence * 0.8,
|
|
76
85
|
});
|
|
77
86
|
}
|
|
78
87
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"memory.js","sourceRoot":"","sources":["../../src/adapters/memory.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,
|
|
1
|
+
{"version":3,"file":"memory.js","sourceRoot":"","sources":["../../src/adapters/memory.ts"],"names":[],"mappings":"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"}
|
|
File without changes
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"gsd.d.ts","sourceRoot":"","sources":["../../../src/adapters/orchestration/gsd.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,WAAW,EAAE,KAAK,EAAE,WAAW,EAAE,MAAM,8BAA8B,CAAC;AACpF,OAAO,KAAK,EAAE,QAAQ,EAAE,oBAAoB,EAAE,eAAe,EAAE,MAAM,gBAAgB,CAAC;AA2BtF;;;;;GAKG;AACH,qBAAa,UAAW,YAAW,oBAAoB;IACrD,OAAO,CAAC,QAAQ,CAAS;IACzB,OAAO,CAAC,WAAW,CAAyB;IAC5C,OAAO,CAAC,SAAS,CAAK;IACtB,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAC,YAAY,CAAO;gBAE/B,QAAQ,EAAE,MAAM;IAI5B,OAAO,CAAC,YAAY;YAIN,SAAS;
|
|
1
|
+
{"version":3,"file":"gsd.d.ts","sourceRoot":"","sources":["../../../src/adapters/orchestration/gsd.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,WAAW,EAAE,KAAK,EAAE,WAAW,EAAE,MAAM,8BAA8B,CAAC;AACpF,OAAO,KAAK,EAAE,QAAQ,EAAE,oBAAoB,EAAE,eAAe,EAAE,MAAM,gBAAgB,CAAC;AA2BtF;;;;;GAKG;AACH,qBAAa,UAAW,YAAW,oBAAoB;IACrD,OAAO,CAAC,QAAQ,CAAS;IACzB,OAAO,CAAC,WAAW,CAAyB;IAC5C,OAAO,CAAC,SAAS,CAAK;IACtB,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAC,YAAY,CAAO;gBAE/B,QAAQ,EAAE,MAAM;IAI5B,OAAO,CAAC,YAAY;YAIN,SAAS;IAuBjB,eAAe,IAAI,OAAO,CAAC,KAAK,GAAG,IAAI,CAAC;IAMxC,aAAa,IAAI,OAAO,CAAC,WAAW,GAAG,IAAI,CAAC;IAU5C,cAAc,IAAI,OAAO,CAAC,WAAW,EAAE,CAAC;IAQxC,YAAY,CAAC,SAAS,EAAE,QAAQ,GAAG,OAAO,CAAC,eAAe,GAAG,IAAI,CAAC;IAIlE,cAAc,CAAC,SAAS,EAAE,QAAQ,GAAG,OAAO,CAAC,IAAI,CAAC;IAIxD,aAAa,IAAI,MAAM;IAIvB,kBAAkB,IAAI,KAAK,EAAE;CAG9B"}
|
|
@@ -31,7 +31,13 @@ export class GsdAdapter {
|
|
|
31
31
|
}
|
|
32
32
|
try {
|
|
33
33
|
const raw = await fs.readFile(this.getStatePath(), 'utf8');
|
|
34
|
-
|
|
34
|
+
const parsed = JSON.parse(raw);
|
|
35
|
+
if (!isValidGsdState(parsed)) {
|
|
36
|
+
this.cachedState = null;
|
|
37
|
+
this.cacheTime = Date.now();
|
|
38
|
+
return null;
|
|
39
|
+
}
|
|
40
|
+
this.cachedState = parsed;
|
|
35
41
|
this.cacheTime = Date.now();
|
|
36
42
|
return this.cachedState;
|
|
37
43
|
}
|
|
@@ -78,4 +84,15 @@ export class GsdAdapter {
|
|
|
78
84
|
return ['brainstorm', 'plan', 'implement', 'review', 'debug'];
|
|
79
85
|
}
|
|
80
86
|
}
|
|
87
|
+
/** Basic shape guard — rejects obviously malformed state.json */
|
|
88
|
+
function isValidGsdState(val) {
|
|
89
|
+
if (typeof val !== 'object' || val === null || Array.isArray(val))
|
|
90
|
+
return false;
|
|
91
|
+
const obj = val;
|
|
92
|
+
if (obj.phase !== undefined && typeof obj.phase !== 'string')
|
|
93
|
+
return false;
|
|
94
|
+
if (obj.tasks !== undefined && !Array.isArray(obj.tasks))
|
|
95
|
+
return false;
|
|
96
|
+
return true;
|
|
97
|
+
}
|
|
81
98
|
//# sourceMappingURL=gsd.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"gsd.js","sourceRoot":"","sources":["../../../src/adapters/orchestration/gsd.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,kBAAkB,CAAC;AAClC,OAAO,IAAI,MAAM,WAAW,CAAC;AAqB7B,MAAM,cAAc,GAA0B;IAC5C,QAAQ,EAAE,YAAY;IACtB,QAAQ,EAAE,MAAM;IAChB,SAAS,EAAE,WAAW;IACtB,MAAM,EAAE,QAAQ;IAChB,SAAS,EAAE,OAAO;CACnB,CAAC;AAEF;;;;;GAKG;AACH,MAAM,OAAO,UAAU;IACb,QAAQ,CAAS;IACjB,WAAW,GAAoB,IAAI,CAAC;IACpC,SAAS,GAAG,CAAC,CAAC;IACd,MAAM,CAAU,YAAY,GAAG,GAAG,CAAC;IAE3C,YAAY,QAAgB;QAC1B,IAAI,CAAC,QAAQ,GAAG,QAAQ,CAAC;IAC3B,CAAC;IAEO,YAAY;QAClB,OAAO,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,QAAQ,EAAE,MAAM,EAAE,YAAY,CAAC,CAAC;IACxD,CAAC;IAEO,KAAK,CAAC,SAAS;QACrB,qCAAqC;QACrC,IAAI,IAAI,CAAC,WAAW,KAAK,IAAI,IAAI,IAAI,CAAC,GAAG,EAAE,GAAG,IAAI,CAAC,SAAS,GAAG,UAAU,CAAC,YAAY,EAAE,CAAC;YACvF,OAAO,IAAI,CAAC,WAAW,CAAC;QAC1B,CAAC;QACD,IAAI,CAAC;YACH,MAAM,GAAG,GAAG,MAAM,EAAE,CAAC,QAAQ,CAAC,IAAI,CAAC,YAAY,EAAE,EAAE,MAAM,CAAC,CAAC;YAC3D,IAAI,CAAC,WAAW,GAAG,IAAI,CAAC,
|
|
1
|
+
{"version":3,"file":"gsd.js","sourceRoot":"","sources":["../../../src/adapters/orchestration/gsd.ts"],"names":[],"mappings":"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"}
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"broker.test.d.ts","sourceRoot":"","sources":["../../../src/broker/__tests__/broker.test.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1,207 @@
|
|
|
1
|
+
import { describe, it, expect } from 'vitest';
|
|
2
|
+
import { ContextBroker, formatContextPack } from '../broker.js';
|
|
3
|
+
import { emptyContextPack, hasContent, adaptBudget } from '../context-pack.js';
|
|
4
|
+
describe('ContextBroker', () => {
|
|
5
|
+
it('creates a broker instance without throwing', () => {
|
|
6
|
+
const broker = new ContextBroker('/tmp/nonexistent');
|
|
7
|
+
expect(broker).toBeDefined();
|
|
8
|
+
});
|
|
9
|
+
it('returns empty pack for action-only queries', async () => {
|
|
10
|
+
const broker = new ContextBroker('/tmp/nonexistent');
|
|
11
|
+
const pack = await broker.buildContextPack({
|
|
12
|
+
repoRoot: '/tmp/nonexistent',
|
|
13
|
+
userQuery: 'yes',
|
|
14
|
+
});
|
|
15
|
+
expect(hasContent(pack)).toBe(false);
|
|
16
|
+
});
|
|
17
|
+
it('returns pack without crashing when no systems are available', async () => {
|
|
18
|
+
const broker = new ContextBroker('/tmp/nonexistent');
|
|
19
|
+
const pack = await broker.buildContextPack({
|
|
20
|
+
repoRoot: '/tmp/nonexistent',
|
|
21
|
+
userQuery: 'how does processPayment work in the payment module?',
|
|
22
|
+
});
|
|
23
|
+
// Should not throw — graceful degradation
|
|
24
|
+
expect(pack).toBeDefined();
|
|
25
|
+
expect(pack.relevantFiles).toBeDefined();
|
|
26
|
+
expect(pack.priorMemories).toBeDefined();
|
|
27
|
+
});
|
|
28
|
+
});
|
|
29
|
+
describe('formatContextPack', () => {
|
|
30
|
+
it('returns empty string for empty pack', () => {
|
|
31
|
+
expect(formatContextPack(emptyContextPack())).toBe('');
|
|
32
|
+
});
|
|
33
|
+
it('formats code context', () => {
|
|
34
|
+
const pack = {
|
|
35
|
+
...emptyContextPack(),
|
|
36
|
+
relevantFiles: [
|
|
37
|
+
{ path: 'src/payment/refund.ts', reason: 'semantic search hit' },
|
|
38
|
+
],
|
|
39
|
+
};
|
|
40
|
+
const output = formatContextPack(pack);
|
|
41
|
+
expect(output).toContain('<codeagent-context>');
|
|
42
|
+
expect(output).toContain('src/payment/refund.ts');
|
|
43
|
+
expect(output).toContain('</codeagent-context>');
|
|
44
|
+
});
|
|
45
|
+
it('formats bug warnings', () => {
|
|
46
|
+
const pack = {
|
|
47
|
+
...emptyContextPack(),
|
|
48
|
+
bugWarnings: [
|
|
49
|
+
{ type: 'bugfix', title: 'Duplicate refund', body: 'Missing idempotency key' },
|
|
50
|
+
],
|
|
51
|
+
};
|
|
52
|
+
const output = formatContextPack(pack);
|
|
53
|
+
expect(output).toContain('Bug Warnings');
|
|
54
|
+
expect(output).toContain('Duplicate refund');
|
|
55
|
+
});
|
|
56
|
+
it('formats orchestration state', () => {
|
|
57
|
+
const pack = {
|
|
58
|
+
...emptyContextPack(),
|
|
59
|
+
currentStage: 'implement',
|
|
60
|
+
pendingTasks: [
|
|
61
|
+
{ id: '1', title: 'Add refund endpoint', status: 'pending' },
|
|
62
|
+
],
|
|
63
|
+
};
|
|
64
|
+
const output = formatContextPack(pack);
|
|
65
|
+
expect(output).toContain('implement');
|
|
66
|
+
expect(output).toContain('Add refund endpoint');
|
|
67
|
+
});
|
|
68
|
+
it('formats memories', () => {
|
|
69
|
+
const pack = {
|
|
70
|
+
...emptyContextPack(),
|
|
71
|
+
priorMemories: [
|
|
72
|
+
{ type: 'decision', title: 'Use cents for amounts', body: 'Avoid float issues' },
|
|
73
|
+
],
|
|
74
|
+
};
|
|
75
|
+
const output = formatContextPack(pack);
|
|
76
|
+
expect(output).toContain('Use cents for amounts');
|
|
77
|
+
});
|
|
78
|
+
it('formats suggestedApproach', () => {
|
|
79
|
+
const pack = {
|
|
80
|
+
...emptyContextPack(),
|
|
81
|
+
relevantFiles: [{ path: 'f.ts', reason: 'hit' }],
|
|
82
|
+
suggestedApproach: 'Review affected files before changes.',
|
|
83
|
+
};
|
|
84
|
+
const output = formatContextPack(pack);
|
|
85
|
+
expect(output).toContain('f.ts');
|
|
86
|
+
});
|
|
87
|
+
it('formats risks', () => {
|
|
88
|
+
const pack = {
|
|
89
|
+
...emptyContextPack(),
|
|
90
|
+
relevantFiles: [{ path: 'f.ts', reason: 'hit' }],
|
|
91
|
+
risks: ['High-impact change: src/core.ts', 'Prior bug: payment double-charge'],
|
|
92
|
+
};
|
|
93
|
+
const output = formatContextPack(pack);
|
|
94
|
+
expect(output).toContain('Risks');
|
|
95
|
+
expect(output).toContain('High-impact change');
|
|
96
|
+
expect(output).toContain('Prior bug');
|
|
97
|
+
});
|
|
98
|
+
it('shows multi-line memory body up to 500 chars', () => {
|
|
99
|
+
const pack = {
|
|
100
|
+
...emptyContextPack(),
|
|
101
|
+
priorMemories: [{
|
|
102
|
+
type: 'decision',
|
|
103
|
+
title: 'Use PostgreSQL',
|
|
104
|
+
body: 'First line of reasoning.\nSecond line with details.\nThird line conclusion.',
|
|
105
|
+
}],
|
|
106
|
+
};
|
|
107
|
+
const output = formatContextPack(pack);
|
|
108
|
+
expect(output).toContain('Second line with details');
|
|
109
|
+
});
|
|
110
|
+
it('renders repoSummary as Project Overview section', () => {
|
|
111
|
+
const pack = {
|
|
112
|
+
...emptyContextPack(),
|
|
113
|
+
repoSummary: 'A TypeScript project with modular architecture',
|
|
114
|
+
};
|
|
115
|
+
const output = formatContextPack(pack);
|
|
116
|
+
expect(output).toContain('## Project Overview');
|
|
117
|
+
expect(output).toContain('modular architecture');
|
|
118
|
+
});
|
|
119
|
+
});
|
|
120
|
+
describe('ContextBroker changedFiles', () => {
|
|
121
|
+
it('processes changedFiles via parallel impact analysis', async () => {
|
|
122
|
+
const broker = new ContextBroker('/tmp/nonexistent');
|
|
123
|
+
const pack = await broker.buildContextPack({
|
|
124
|
+
repoRoot: '/tmp/nonexistent',
|
|
125
|
+
userQuery: 'review the changes in the payment module',
|
|
126
|
+
changedFiles: ['src/payment/refund.ts', 'src/payment/charge.ts'],
|
|
127
|
+
});
|
|
128
|
+
// Should not crash even when code-graph-mcp is unavailable
|
|
129
|
+
expect(pack).toBeDefined();
|
|
130
|
+
expect(pack.relevantFiles).toBeDefined();
|
|
131
|
+
});
|
|
132
|
+
});
|
|
133
|
+
describe('adaptBudget', () => {
|
|
134
|
+
const base = { code: 800, memory: 600, orch: 300, meta: 300 };
|
|
135
|
+
it('allocates more code budget for impact intent', () => {
|
|
136
|
+
const adapted = adaptBudget(base, 'impact');
|
|
137
|
+
expect(adapted.code).toBeGreaterThan(base.code);
|
|
138
|
+
expect(adapted.memory).toBeLessThan(base.memory);
|
|
139
|
+
});
|
|
140
|
+
it('allocates more memory budget for debug intent', () => {
|
|
141
|
+
const adapted = adaptBudget(base, 'debug');
|
|
142
|
+
expect(adapted.memory).toBeGreaterThan(base.memory);
|
|
143
|
+
expect(adapted.code).toBeLessThan(base.code);
|
|
144
|
+
});
|
|
145
|
+
it('returns base budget for general intent', () => {
|
|
146
|
+
const adapted = adaptBudget(base, 'general');
|
|
147
|
+
expect(adapted).toEqual(base);
|
|
148
|
+
});
|
|
149
|
+
it('clamps to zero with tiny budgets', () => {
|
|
150
|
+
const tiny = { code: 50, memory: 50, orch: 50, meta: 50 };
|
|
151
|
+
const adapted = adaptBudget(tiny, 'debug');
|
|
152
|
+
expect(adapted.code).toBe(0); // 50 - 100 clamped to 0
|
|
153
|
+
expect(adapted.memory).toBe(250); // 50 + 200
|
|
154
|
+
expect(adapted.meta).toBe(0); // 50 - 100 clamped to 0
|
|
155
|
+
});
|
|
156
|
+
});
|
|
157
|
+
describe('ContextBroker heuristics', () => {
|
|
158
|
+
it('generates suggestedApproach for brainstorm stage', async () => {
|
|
159
|
+
const broker = new ContextBroker('/tmp/nonexistent');
|
|
160
|
+
const pack = await broker.buildContextPack({
|
|
161
|
+
repoRoot: '/tmp/nonexistent',
|
|
162
|
+
userQuery: 'analyze the payment architecture',
|
|
163
|
+
stage: 'brainstorm',
|
|
164
|
+
});
|
|
165
|
+
// Brainstorm stage should trigger approach suggestion
|
|
166
|
+
if (pack.suggestedApproach) {
|
|
167
|
+
expect(pack.suggestedApproach).toContain('Explore alternatives');
|
|
168
|
+
}
|
|
169
|
+
});
|
|
170
|
+
it('generates bug-derived risks when bug warnings exist', async () => {
|
|
171
|
+
// This tests the heuristic indirectly - even without external systems,
|
|
172
|
+
// the fillHeuristics method should process whatever is in the pack
|
|
173
|
+
const broker = new ContextBroker('/tmp/nonexistent');
|
|
174
|
+
const pack = await broker.buildContextPack({
|
|
175
|
+
repoRoot: '/tmp/nonexistent',
|
|
176
|
+
userQuery: 'debug the processPayment error in payment module',
|
|
177
|
+
});
|
|
178
|
+
// Even if no bugs found (no external systems), should not crash
|
|
179
|
+
expect(pack.risks).toBeDefined();
|
|
180
|
+
expect(Array.isArray(pack.risks)).toBe(true);
|
|
181
|
+
});
|
|
182
|
+
});
|
|
183
|
+
describe('adaptBudget', () => {
|
|
184
|
+
const base = { code: 800, memory: 600, orch: 300, meta: 300 };
|
|
185
|
+
it('allocates more code budget for impact intent', () => {
|
|
186
|
+
const adapted = adaptBudget(base, 'impact');
|
|
187
|
+
expect(adapted.code).toBeGreaterThan(base.code);
|
|
188
|
+
expect(adapted.memory).toBeLessThan(base.memory);
|
|
189
|
+
});
|
|
190
|
+
it('allocates more memory budget for debug intent', () => {
|
|
191
|
+
const adapted = adaptBudget(base, 'debug');
|
|
192
|
+
expect(adapted.memory).toBeGreaterThan(base.memory);
|
|
193
|
+
expect(adapted.code).toBeLessThan(base.code);
|
|
194
|
+
});
|
|
195
|
+
it('returns base budget for general intent', () => {
|
|
196
|
+
const adapted = adaptBudget(base, 'general');
|
|
197
|
+
expect(adapted).toEqual(base);
|
|
198
|
+
});
|
|
199
|
+
it('clamps to zero with tiny budgets', () => {
|
|
200
|
+
const tiny = { code: 50, memory: 50, orch: 50, meta: 50 };
|
|
201
|
+
const adapted = adaptBudget(tiny, 'debug');
|
|
202
|
+
expect(adapted.code).toBe(0);
|
|
203
|
+
expect(adapted.memory).toBe(250);
|
|
204
|
+
expect(adapted.meta).toBe(0);
|
|
205
|
+
});
|
|
206
|
+
});
|
|
207
|
+
//# sourceMappingURL=broker.test.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"broker.test.js","sourceRoot":"","sources":["../../../src/broker/__tests__/broker.test.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"compressor.test.d.ts","sourceRoot":"","sources":["../../../src/broker/__tests__/compressor.test.ts"],"names":[],"mappings":""}
|