@sdsrs/codeagent 0.1.0 → 0.2.1
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/README.md +211 -67
- package/dist/adapters/code-graph.d.ts +1 -0
- package/dist/adapters/code-graph.d.ts.map +1 -1
- package/dist/adapters/code-graph.js +54 -71
- 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 +21 -50
- package/dist/adapters/memory.js.map +1 -1
- package/dist/adapters/orchestration/gsd.d.ts +6 -1
- package/dist/adapters/orchestration/gsd.d.ts.map +1 -1
- package/dist/adapters/orchestration/gsd.js +23 -20
- package/dist/adapters/orchestration/gsd.js.map +1 -1
- package/dist/adapters/orchestration/superpowers.js +1 -1
- package/dist/adapters/orchestration/superpowers.js.map +1 -1
- package/dist/broker/broker.d.ts +4 -2
- package/dist/broker/broker.d.ts.map +1 -1
- package/dist/broker/broker.js +96 -32
- package/dist/broker/broker.js.map +1 -1
- package/dist/broker/compressor.d.ts +4 -1
- package/dist/broker/compressor.d.ts.map +1 -1
- package/dist/broker/compressor.js +52 -11
- package/dist/broker/compressor.js.map +1 -1
- package/dist/broker/query-parser.js +1 -1
- package/dist/broker/query-parser.js.map +1 -1
- package/dist/cli/commands/chat.d.ts.map +1 -1
- package/dist/cli/commands/chat.js +18 -37
- package/dist/cli/commands/chat.js.map +1 -1
- package/dist/cli/commands/config.d.ts.map +1 -1
- package/dist/cli/commands/config.js +10 -2
- package/dist/cli/commands/config.js.map +1 -1
- package/dist/cli/commands/memory.d.ts.map +1 -1
- package/dist/cli/commands/memory.js +11 -16
- package/dist/cli/commands/memory.js.map +1 -1
- package/dist/cli/commands/search.d.ts.map +1 -1
- package/dist/cli/commands/search.js +9 -11
- package/dist/cli/commands/search.js.map +1 -1
- package/dist/cli/index.js +4 -1
- package/dist/cli/index.js.map +1 -1
- package/dist/cli/tui/renderer.d.ts.map +1 -1
- package/dist/cli/tui/renderer.js +4 -1
- package/dist/cli/tui/renderer.js.map +1 -1
- package/dist/hooks/post-compact.d.ts +15 -0
- package/dist/hooks/post-compact.d.ts.map +1 -0
- package/dist/hooks/post-compact.js +57 -0
- package/dist/hooks/post-compact.js.map +1 -0
- package/dist/hooks/session-start.js +1 -1
- package/dist/hooks/session-start.js.map +1 -1
- package/dist/hooks/stop.js +10 -13
- package/dist/hooks/stop.js.map +1 -1
- package/dist/hooks/user-prompt.js +2 -2
- package/dist/hooks/user-prompt.js.map +1 -1
- package/dist/providers/anthropic-api.d.ts +2 -1
- package/dist/providers/anthropic-api.d.ts.map +1 -1
- package/dist/providers/anthropic-api.js +21 -9
- package/dist/providers/anthropic-api.js.map +1 -1
- package/dist/providers/claude-cli.d.ts.map +1 -1
- package/dist/providers/claude-cli.js +19 -15
- package/dist/providers/claude-cli.js.map +1 -1
- package/dist/providers/claude-sdk.d.ts.map +1 -1
- package/dist/providers/claude-sdk.js +11 -4
- package/dist/providers/claude-sdk.js.map +1 -1
- package/dist/scripts/install-hooks.js +9 -3
- package/dist/scripts/install-hooks.js.map +1 -1
- package/dist/session/manager.d.ts.map +1 -1
- package/dist/session/manager.js +3 -2
- package/dist/session/manager.js.map +1 -1
- package/dist/session/schema.d.ts.map +1 -1
- package/dist/session/schema.js +12 -5
- package/dist/session/schema.js.map +1 -1
- package/dist/utils/exec.d.ts +3 -2
- package/dist/utils/exec.d.ts.map +1 -1
- package/dist/utils/exec.js +7 -6
- package/dist/utils/exec.js.map +1 -1
- package/dist/utils/tokens.d.ts.map +1 -1
- package/dist/utils/tokens.js +2 -0
- package/dist/utils/tokens.js.map +1 -1
- package/package.json +6 -5
- package/src/skills/remember.md +40 -0
- package/src/skills/spec.md +37 -0
package/dist/adapters/memory.js
CHANGED
|
@@ -1,84 +1,57 @@
|
|
|
1
1
|
import { execSafe } from '../utils/exec.js';
|
|
2
2
|
import { truncateToTokenBudget } from '../utils/tokens.js';
|
|
3
|
-
|
|
4
|
-
* Determine which memory types to search based on the current stage.
|
|
5
|
-
*/
|
|
3
|
+
const MEM = 'claude-mem-lite';
|
|
6
4
|
function getSearchTypes(stage) {
|
|
7
5
|
switch (stage) {
|
|
8
|
-
case 'brainstorm':
|
|
9
|
-
|
|
10
|
-
case '
|
|
11
|
-
|
|
12
|
-
case '
|
|
13
|
-
|
|
14
|
-
case 'review':
|
|
15
|
-
return ['bugfix'];
|
|
16
|
-
case 'debug':
|
|
17
|
-
return ['bugfix', 'discovery'];
|
|
18
|
-
default:
|
|
19
|
-
return []; // empty = search all types
|
|
6
|
+
case 'brainstorm': return ['decision', 'discovery'];
|
|
7
|
+
case 'plan': return ['decision', 'discovery', 'task'];
|
|
8
|
+
case 'implement': return ['bugfix', 'decision'];
|
|
9
|
+
case 'review': return ['bugfix'];
|
|
10
|
+
case 'debug': return ['bugfix', 'discovery'];
|
|
11
|
+
default: return [];
|
|
20
12
|
}
|
|
21
13
|
}
|
|
22
14
|
/**
|
|
23
15
|
* Query memory engine via claude-mem-lite CLI.
|
|
24
|
-
*
|
|
16
|
+
* Async signature retained for call-site .catch() compatibility and future async conversion.
|
|
25
17
|
*/
|
|
26
18
|
export async function queryMemory(parsed, tokenBudget, stage) {
|
|
27
|
-
const result = {
|
|
28
|
-
memories: [],
|
|
29
|
-
bugWarnings: [],
|
|
30
|
-
raw: '',
|
|
31
|
-
};
|
|
19
|
+
const result = { memories: [], bugWarnings: [], raw: '' };
|
|
32
20
|
const searchQuery = [...parsed.symbols, ...parsed.keywords.slice(0, 3)].join(' ');
|
|
33
21
|
if (!searchQuery)
|
|
34
22
|
return result;
|
|
35
23
|
const types = getSearchTypes(stage);
|
|
36
24
|
const allRaw = [];
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
// Search each type separately (in parallel we'd Promise.all, but using CLI so sequential)
|
|
46
|
-
for (const type of types.slice(0, 2)) {
|
|
47
|
-
const { stdout, ok } = execSafe(`claude-mem-lite search "${searchQuery}" --type ${type} --limit 5`, { timeout: 2000 });
|
|
48
|
-
if (ok && stdout)
|
|
49
|
-
allRaw.push(stdout);
|
|
50
|
-
}
|
|
51
|
-
}
|
|
52
|
-
// Also always search for bug warnings (high priority)
|
|
53
|
-
if (!types.includes('bugfix')) {
|
|
54
|
-
const { stdout, ok } = execSafe(`claude-mem-lite search "${searchQuery}" --type bugfix --limit 3`, { timeout: 2000 });
|
|
25
|
+
if (types.length === 0) {
|
|
26
|
+
const { stdout, ok } = execSafe(MEM, ['search', searchQuery, '--limit', '8'], { timeout: 1500 });
|
|
27
|
+
if (ok && stdout)
|
|
28
|
+
allRaw.push(stdout);
|
|
29
|
+
}
|
|
30
|
+
else {
|
|
31
|
+
for (const type of types.slice(0, 2)) {
|
|
32
|
+
const { stdout, ok } = execSafe(MEM, ['search', searchQuery, '--type', type, '--limit', '5'], { timeout: 1500 });
|
|
55
33
|
if (ok && stdout)
|
|
56
34
|
allRaw.push(stdout);
|
|
57
35
|
}
|
|
58
36
|
}
|
|
59
|
-
|
|
60
|
-
|
|
37
|
+
if (!types.includes('bugfix')) {
|
|
38
|
+
const { stdout, ok } = execSafe(MEM, ['search', searchQuery, '--type', 'bugfix', '--limit', '3'], { timeout: 1500 });
|
|
39
|
+
if (ok && stdout)
|
|
40
|
+
allRaw.push(stdout);
|
|
61
41
|
}
|
|
62
42
|
result.raw = allRaw.join('\n---\n');
|
|
63
|
-
// Truncate to budget
|
|
64
43
|
if (result.raw) {
|
|
65
44
|
result.raw = truncateToTokenBudget(result.raw, tokenBudget);
|
|
66
45
|
}
|
|
67
|
-
// Parse raw into structured entries
|
|
68
46
|
const entries = parseMemoryEntries(result.raw);
|
|
69
47
|
result.memories = entries.filter((e) => e.type !== 'bugfix');
|
|
70
48
|
result.bugWarnings = entries.filter((e) => e.type === 'bugfix');
|
|
71
49
|
return result;
|
|
72
50
|
}
|
|
73
|
-
// --- Parse memory search output ---
|
|
74
51
|
function parseMemoryEntries(raw) {
|
|
75
52
|
if (!raw)
|
|
76
53
|
return [];
|
|
77
54
|
const entries = [];
|
|
78
|
-
// claude-mem-lite search output format varies, but typically:
|
|
79
|
-
// [ID] [type] title
|
|
80
|
-
// body text...
|
|
81
|
-
// ---
|
|
82
55
|
const blocks = raw.split(/(?:^|\n)---\n/);
|
|
83
56
|
for (const block of blocks) {
|
|
84
57
|
const trimmed = block.trim();
|
|
@@ -86,7 +59,6 @@ function parseMemoryEntries(raw) {
|
|
|
86
59
|
continue;
|
|
87
60
|
const lines = trimmed.split('\n');
|
|
88
61
|
const firstLine = lines[0] || '';
|
|
89
|
-
// Try to parse structured format: "#123 [bugfix] Title here"
|
|
90
62
|
const match = firstLine.match(/^#?(\d+)\s*\[(\w+)]\s*(.+)/);
|
|
91
63
|
if (match) {
|
|
92
64
|
entries.push({
|
|
@@ -97,7 +69,6 @@ function parseMemoryEntries(raw) {
|
|
|
97
69
|
});
|
|
98
70
|
}
|
|
99
71
|
else {
|
|
100
|
-
// Fallback: treat as unstructured
|
|
101
72
|
entries.push({
|
|
102
73
|
type: 'semantic',
|
|
103
74
|
title: firstLine.slice(0, 100),
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"memory.js","sourceRoot":"","sources":["../../src/adapters/memory.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,kBAAkB,CAAC;AAC5C,OAAO,EAAE,qBAAqB,EAAE,MAAM,oBAAoB,CAAC;AAU3D
|
|
1
|
+
{"version":3,"file":"memory.js","sourceRoot":"","sources":["../../src/adapters/memory.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,kBAAkB,CAAC;AAC5C,OAAO,EAAE,qBAAqB,EAAE,MAAM,oBAAoB,CAAC;AAU3D,MAAM,GAAG,GAAG,iBAAiB,CAAC;AAE9B,SAAS,cAAc,CAAC,KAAa;IACnC,QAAQ,KAAK,EAAE,CAAC;QACd,KAAK,YAAY,CAAC,CAAC,OAAO,CAAC,UAAU,EAAE,WAAW,CAAC,CAAC;QACpD,KAAK,MAAM,CAAC,CAAO,OAAO,CAAC,UAAU,EAAE,WAAW,EAAE,MAAM,CAAC,CAAC;QAC5D,KAAK,WAAW,CAAC,CAAE,OAAO,CAAC,QAAQ,EAAE,UAAU,CAAC,CAAC;QACjD,KAAK,QAAQ,CAAC,CAAK,OAAO,CAAC,QAAQ,CAAC,CAAC;QACrC,KAAK,OAAO,CAAC,CAAM,OAAO,CAAC,QAAQ,EAAE,WAAW,CAAC,CAAC;QAClD,OAAO,CAAC,CAAW,OAAO,EAAE,CAAC;IAC/B,CAAC;AACH,CAAC;AAED;;;GAGG;AACH,MAAM,CAAC,KAAK,UAAU,WAAW,CAC/B,MAAmB,EACnB,WAAmB,EACnB,KAAa;IAEb,MAAM,MAAM,GAAiB,EAAE,QAAQ,EAAE,EAAE,EAAE,WAAW,EAAE,EAAE,EAAE,GAAG,EAAE,EAAE,EAAE,CAAC;IACxE,MAAM,WAAW,GAAG,CAAC,GAAG,MAAM,CAAC,OAAO,EAAE,GAAG,MAAM,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;IAClF,IAAI,CAAC,WAAW;QAAE,OAAO,MAAM,CAAC;IAEhC,MAAM,KAAK,GAAG,cAAc,CAAC,KAAK,CAAC,CAAC;IACpC,MAAM,MAAM,GAAa,EAAE,CAAC;IAE5B,IAAI,KAAK,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QACvB,MAAM,EAAE,MAAM,EAAE,EAAE,EAAE,GAAG,QAAQ,CAAC,GAAG,EAAE,CAAC,QAAQ,EAAE,WAAW,EAAE,SAAS,EAAE,GAAG,CAAC,EAAE,EAAE,OAAO,EAAE,IAAI,EAAE,CAAC,CAAC;QACjG,IAAI,EAAE,IAAI,MAAM;YAAE,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;IACxC,CAAC;SAAM,CAAC;QACN,KAAK,MAAM,IAAI,IAAI,KAAK,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC;YACrC,MAAM,EAAE,MAAM,EAAE,EAAE,EAAE,GAAG,QAAQ,CAAC,GAAG,EAAE,CAAC,QAAQ,EAAE,WAAW,EAAE,QAAQ,EAAE,IAAI,EAAE,SAAS,EAAE,GAAG,CAAC,EAAE,EAAE,OAAO,EAAE,IAAI,EAAE,CAAC,CAAC;YACjH,IAAI,EAAE,IAAI,MAAM;gBAAE,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;QACxC,CAAC;IACH,CAAC;IAED,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,QAAQ,CAAC,EAAE,CAAC;QAC9B,MAAM,EAAE,MAAM,EAAE,EAAE,EAAE,GAAG,QAAQ,CAAC,GAAG,EAAE,CAAC,QAAQ,EAAE,WAAW,EAAE,QAAQ,EAAE,QAAQ,EAAE,SAAS,EAAE,GAAG,CAAC,EAAE,EAAE,OAAO,EAAE,IAAI,EAAE,CAAC,CAAC;QACrH,IAAI,EAAE,IAAI,MAAM;YAAE,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;IACxC,CAAC;IAED,MAAM,CAAC,GAAG,GAAG,MAAM,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;IACpC,IAAI,MAAM,CAAC,GAAG,EAAE,CAAC;QACf,MAAM,CAAC,GAAG,GAAG,qBAAqB,CAAC,MAAM,CAAC,GAAG,EAAE,WAAW,CAAC,CAAC;IAC9D,CAAC;IAED,MAAM,OAAO,GAAG,kBAAkB,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;IAC/C,MAAM,CAAC,QAAQ,GAAG,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,KAAK,QAAQ,CAAC,CAAC;IAC7D,MAAM,CAAC,WAAW,GAAG,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,KAAK,QAAQ,CAAC,CAAC;IAEhE,OAAO,MAAM,CAAC;AAChB,CAAC;AAED,SAAS,kBAAkB,CAAC,GAAW;IACrC,IAAI,CAAC,GAAG;QAAE,OAAO,EAAE,CAAC;IACpB,MAAM,OAAO,GAAkB,EAAE,CAAC;IAClC,MAAM,MAAM,GAAG,GAAG,CAAC,KAAK,CAAC,eAAe,CAAC,CAAC;IAC1C,KAAK,MAAM,KAAK,IAAI,MAAM,EAAE,CAAC;QAC3B,MAAM,OAAO,GAAG,KAAK,CAAC,IAAI,EAAE,CAAC;QAC7B,IAAI,CAAC,OAAO;YAAE,SAAS;QACvB,MAAM,KAAK,GAAG,OAAO,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;QAClC,MAAM,SAAS,GAAG,KAAK,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC;QACjC,MAAM,KAAK,GAAG,SAAS,CAAC,KAAK,CAAC,4BAA4B,CAAC,CAAC;QAC5D,IAAI,KAAK,EAAE,CAAC;YACV,OAAO,CAAC,IAAI,CAAC;gBACX,EAAE,EAAE,QAAQ,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC;gBAC1B,IAAI,EAAE,KAAK,CAAC,CAAC,CAAC;gBACd,KAAK,EAAE,KAAK,CAAC,CAAC,CAAC,CAAC,IAAI,EAAE;gBACtB,IAAI,EAAE,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,IAAI,EAAE;aACvC,CAAC,CAAC;QACL,CAAC;aAAM,CAAC;YACN,OAAO,CAAC,IAAI,CAAC;gBACX,IAAI,EAAE,UAAU;gBAChB,KAAK,EAAE,SAAS,CAAC,KAAK,CAAC,CAAC,EAAE,GAAG,CAAC;gBAC9B,IAAI,EAAE,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,IAAI,EAAE;aACvC,CAAC,CAAC;QACL,CAAC;IACH,CAAC;IACD,OAAO,OAAO,CAAC;AACjB,CAAC"}
|
|
@@ -2,10 +2,15 @@ import type { SpecSummary, Stage, TaskSummary } from '../../broker/context-pack.
|
|
|
2
2
|
import type { Evidence, OrchestrationAdapter, StageTransition } from './interface.js';
|
|
3
3
|
/**
|
|
4
4
|
* GSD-Lite orchestration adapter.
|
|
5
|
-
* Reads state
|
|
5
|
+
* Reads state from .gsd/state.json with short-lived cache (500ms TTL).
|
|
6
|
+
* The cache prevents redundant reads when getCurrentStage, getActiveSpec,
|
|
7
|
+
* and getActiveTasks are called in parallel within a single queryOrch().
|
|
6
8
|
*/
|
|
7
9
|
export declare class GsdAdapter implements OrchestrationAdapter {
|
|
8
10
|
private repoRoot;
|
|
11
|
+
private cachedState;
|
|
12
|
+
private cacheTime;
|
|
13
|
+
private static readonly CACHE_TTL_MS;
|
|
9
14
|
constructor(repoRoot: string);
|
|
10
15
|
private getStatePath;
|
|
11
16
|
private readState;
|
|
@@ -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;
|
|
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;IAiBjB,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"}
|
|
@@ -1,6 +1,5 @@
|
|
|
1
|
-
import fs from 'node:fs';
|
|
1
|
+
import fs from 'node:fs/promises';
|
|
2
2
|
import path from 'node:path';
|
|
3
|
-
// Map GSD phases to our Stage type
|
|
4
3
|
const PHASE_TO_STAGE = {
|
|
5
4
|
research: 'brainstorm',
|
|
6
5
|
planning: 'plan',
|
|
@@ -10,36 +9,46 @@ const PHASE_TO_STAGE = {
|
|
|
10
9
|
};
|
|
11
10
|
/**
|
|
12
11
|
* GSD-Lite orchestration adapter.
|
|
13
|
-
* Reads state
|
|
12
|
+
* Reads state from .gsd/state.json with short-lived cache (500ms TTL).
|
|
13
|
+
* The cache prevents redundant reads when getCurrentStage, getActiveSpec,
|
|
14
|
+
* and getActiveTasks are called in parallel within a single queryOrch().
|
|
14
15
|
*/
|
|
15
16
|
export class GsdAdapter {
|
|
16
17
|
repoRoot;
|
|
18
|
+
cachedState = null;
|
|
19
|
+
cacheTime = 0;
|
|
20
|
+
static CACHE_TTL_MS = 500;
|
|
17
21
|
constructor(repoRoot) {
|
|
18
22
|
this.repoRoot = repoRoot;
|
|
19
23
|
}
|
|
20
24
|
getStatePath() {
|
|
21
25
|
return path.join(this.repoRoot, '.gsd', 'state.json');
|
|
22
26
|
}
|
|
23
|
-
readState() {
|
|
24
|
-
|
|
27
|
+
async readState() {
|
|
28
|
+
// Return cached state if still fresh
|
|
29
|
+
if (this.cachedState !== null && Date.now() - this.cacheTime < GsdAdapter.CACHE_TTL_MS) {
|
|
30
|
+
return this.cachedState;
|
|
31
|
+
}
|
|
25
32
|
try {
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
return
|
|
33
|
+
const raw = await fs.readFile(this.getStatePath(), 'utf8');
|
|
34
|
+
this.cachedState = JSON.parse(raw);
|
|
35
|
+
this.cacheTime = Date.now();
|
|
36
|
+
return this.cachedState;
|
|
30
37
|
}
|
|
31
38
|
catch {
|
|
39
|
+
this.cachedState = null;
|
|
40
|
+
this.cacheTime = Date.now();
|
|
32
41
|
return null;
|
|
33
42
|
}
|
|
34
43
|
}
|
|
35
44
|
async getCurrentStage() {
|
|
36
|
-
const state = this.readState();
|
|
45
|
+
const state = await this.readState();
|
|
37
46
|
if (!state?.phase)
|
|
38
47
|
return null;
|
|
39
48
|
return PHASE_TO_STAGE[state.phase] || 'general';
|
|
40
49
|
}
|
|
41
50
|
async getActiveSpec() {
|
|
42
|
-
const state = this.readState();
|
|
51
|
+
const state = await this.readState();
|
|
43
52
|
if (!state?.spec?.title)
|
|
44
53
|
return null;
|
|
45
54
|
return {
|
|
@@ -49,24 +58,18 @@ export class GsdAdapter {
|
|
|
49
58
|
};
|
|
50
59
|
}
|
|
51
60
|
async getActiveTasks() {
|
|
52
|
-
const state = this.readState();
|
|
61
|
+
const state = await this.readState();
|
|
53
62
|
if (!state?.tasks)
|
|
54
63
|
return [];
|
|
55
64
|
return state.tasks
|
|
56
65
|
.filter((t) => t.status !== 'completed' && t.status !== 'deleted')
|
|
57
|
-
.map((t) => ({
|
|
58
|
-
id: t.id,
|
|
59
|
-
title: t.title,
|
|
60
|
-
status: t.status,
|
|
61
|
-
}));
|
|
66
|
+
.map((t) => ({ id: t.id, title: t.title, status: t.status }));
|
|
62
67
|
}
|
|
63
68
|
async advanceStage(_evidence) {
|
|
64
|
-
// For now, stage advancement is done through GSD MCP tools
|
|
65
|
-
// This adapter is read-only
|
|
66
69
|
return null;
|
|
67
70
|
}
|
|
68
71
|
async recordEvidence(_evidence) {
|
|
69
|
-
// Read-only adapter
|
|
72
|
+
// Read-only adapter
|
|
70
73
|
}
|
|
71
74
|
getEngineName() {
|
|
72
75
|
return 'gsd';
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"gsd.js","sourceRoot":"","sources":["../../../src/adapters/orchestration/gsd.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,
|
|
1
|
+
{"version":3,"file":"gsd.js","sourceRoot":"","sources":["../../../src/adapters/orchestration/gsd.ts"],"names":[],"mappings":"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"}
|
|
@@ -46,7 +46,7 @@ export class SuperpowersAdapter {
|
|
|
46
46
|
return fs.statSync(path.join(dir, d)).isDirectory() && /^\d/.test(d);
|
|
47
47
|
});
|
|
48
48
|
if (versions.length > 0) {
|
|
49
|
-
versions.sort()
|
|
49
|
+
versions.sort((a, b) => a.localeCompare(b, undefined, { numeric: true }));
|
|
50
50
|
return path.join(dir, versions[versions.length - 1]);
|
|
51
51
|
}
|
|
52
52
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"superpowers.js","sourceRoot":"","sources":["../../../src/adapters/orchestration/superpowers.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,SAAS,CAAC;AACzB,OAAO,IAAI,MAAM,WAAW,CAAC;AAC7B,OAAO,EAAE,MAAM,SAAS,CAAC;AAIzB,gDAAgD;AAChD,MAAM,cAAc,GAA0B;IAC5C,eAAe,EAAE,YAAY;IAC7B,eAAe,EAAE,MAAM;IACvB,iBAAiB,EAAE,MAAM;IACzB,yBAAyB,EAAE,WAAW;IACtC,6BAA6B,EAAE,WAAW;IAC1C,sBAAsB,EAAE,OAAO;IAC/B,wBAAwB,EAAE,QAAQ;IAClC,uBAAuB,EAAE,QAAQ;IACjC,gCAAgC,EAAE,QAAQ;IAC1C,gCAAgC,EAAE,QAAQ;CAC3C,CAAC;AAEF;;;;;;;;;;;GAWG;AACH,MAAM,OAAO,kBAAkB;IACrB,iBAAiB,GAAiB,IAAI,CAAC;IACvC,eAAe,GAAa,EAAE,CAAC;IAEvC,YAAY,SAAiB;QAC3B,IAAI,CAAC,eAAe,GAAG,IAAI,CAAC,cAAc,EAAE,CAAC;IAC/C,CAAC;IAEO,YAAY;QAClB,uCAAuC;QACvC,MAAM,UAAU,GAAG;YACjB,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,OAAO,EAAE,EAAE,SAAS,EAAE,SAAS,EAAE,OAAO,EAAE,yBAAyB,EAAE,aAAa,CAAC;YAChG,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,OAAO,EAAE,EAAE,SAAS,EAAE,SAAS,EAAE,aAAa,CAAC;SAC7D,CAAC;QAEF,KAAK,MAAM,GAAG,IAAI,UAAU,EAAE,CAAC;YAC7B,IAAI,EAAE,CAAC,UAAU,CAAC,GAAG,CAAC,EAAE,CAAC;gBACvB,oCAAoC;gBACpC,IAAI,CAAC;oBACH,MAAM,QAAQ,GAAG,EAAE,CAAC,WAAW,CAAC,GAAG,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE;wBAChD,OAAO,EAAE,CAAC,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC,CAAC,WAAW,EAAE,IAAI,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;oBACvE,CAAC,CAAC,CAAC;oBACH,IAAI,QAAQ,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;wBACxB,QAAQ,CAAC,IAAI,EAAE,CAAC,CAAC,
|
|
1
|
+
{"version":3,"file":"superpowers.js","sourceRoot":"","sources":["../../../src/adapters/orchestration/superpowers.ts"],"names":[],"mappings":"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"}
|
package/dist/broker/broker.d.ts
CHANGED
|
@@ -2,7 +2,6 @@ import type { BrokerInput, ContextPack, TokenBudget } from './context-pack.js';
|
|
|
2
2
|
export interface BrokerOptions {
|
|
3
3
|
budget?: Partial<TokenBudget>;
|
|
4
4
|
orchestrationEngine?: 'gsd' | 'superpowers';
|
|
5
|
-
totalTimeout?: number;
|
|
6
5
|
}
|
|
7
6
|
/**
|
|
8
7
|
* Context Broker — the core of CodeAgent.
|
|
@@ -30,8 +29,11 @@ export declare class ContextBroker {
|
|
|
30
29
|
*/
|
|
31
30
|
buildSessionContext(): Promise<ContextPack>;
|
|
32
31
|
private queryCode;
|
|
33
|
-
private queryMem;
|
|
34
32
|
private queryOrch;
|
|
33
|
+
/** Run impact analysis on changed files */
|
|
34
|
+
private queryChangedFiles;
|
|
35
|
+
/** Fill suggestedApproach and risks based on heuristics (no LLM needed) */
|
|
36
|
+
private fillHeuristics;
|
|
35
37
|
}
|
|
36
38
|
/**
|
|
37
39
|
* Format a ContextPack as plain text for injection into Claude Code prompt.
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"broker.d.ts","sourceRoot":"","sources":["../../src/broker/broker.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,WAAW,EACX,WAAW,EAEX,WAAW,EACZ,MAAM,mBAAmB,CAAC;
|
|
1
|
+
{"version":3,"file":"broker.d.ts","sourceRoot":"","sources":["../../src/broker/broker.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,WAAW,EACX,WAAW,EAEX,WAAW,EACZ,MAAM,mBAAmB,CAAC;AAW3B,MAAM,WAAW,aAAa;IAC5B,MAAM,CAAC,EAAE,OAAO,CAAC,WAAW,CAAC,CAAC;IAC9B,mBAAmB,CAAC,EAAE,KAAK,GAAG,aAAa,CAAC;CAC7C;AAED;;;;;;;;;GASG;AACH,qBAAa,aAAa;IACxB,OAAO,CAAC,QAAQ,CAAS;IACzB,OAAO,CAAC,WAAW,CAAuB;IAC1C,OAAO,CAAC,MAAM,CAAc;gBAEhB,QAAQ,EAAE,MAAM,EAAE,OAAO,GAAE,aAAkB;IAYzD;;;OAGG;IACG,gBAAgB,CAAC,KAAK,EAAE,WAAW,GAAG,OAAO,CAAC,WAAW,CAAC;IA2DhE;;;OAGG;IACG,mBAAmB,IAAI,OAAO,CAAC,WAAW,CAAC;YAqBnC,SAAS;YAKT,SAAS;IASvB,2CAA2C;YAC7B,iBAAiB;IAuB/B,2EAA2E;IAC3E,OAAO,CAAC,cAAc;CA+BvB;AAID;;GAEG;AACH,wBAAgB,iBAAiB,CAAC,IAAI,EAAE,WAAW,GAAG,MAAM,CAoE3D"}
|
package/dist/broker/broker.js
CHANGED
|
@@ -2,6 +2,7 @@ import { DEFAULT_BUDGET, emptyContextPack, hasContent } from './context-pack.js'
|
|
|
2
2
|
import { parseQuery } from './query-parser.js';
|
|
3
3
|
import { queryCodeGraph, getRepoMap } from '../adapters/code-graph.js';
|
|
4
4
|
import { queryMemory } from '../adapters/memory.js';
|
|
5
|
+
import { execSafe } from '../utils/exec.js';
|
|
5
6
|
import { GsdAdapter } from '../adapters/orchestration/gsd.js';
|
|
6
7
|
import { SuperpowersAdapter } from '../adapters/orchestration/superpowers.js';
|
|
7
8
|
import { compressContextPack } from './compressor.js';
|
|
@@ -40,17 +41,24 @@ export class ContextBroker {
|
|
|
40
41
|
const parsed = parseQuery(input.userQuery);
|
|
41
42
|
if (parsed.isActionOnly)
|
|
42
43
|
return pack;
|
|
43
|
-
//
|
|
44
|
-
const
|
|
45
|
-
const stage = input.stage || parsed.impliedStage || orchStage || undefined;
|
|
46
|
-
if (stage)
|
|
47
|
-
pack.currentStage = stage;
|
|
48
|
-
// Step 2-4: Parallel queries with timeout
|
|
49
|
-
const [codeResult, memResult, orchResult] = await Promise.allSettled([
|
|
44
|
+
// Step 2-4: Parallel queries (code + orch), plus changedFiles impact if provided
|
|
45
|
+
const [codeResult, orchResult] = await Promise.allSettled([
|
|
50
46
|
this.queryCode(parsed),
|
|
51
|
-
this.queryMem(parsed, stage),
|
|
52
47
|
this.queryOrch(),
|
|
53
48
|
]);
|
|
49
|
+
// changedFiles impact — runs separately to avoid positional coupling
|
|
50
|
+
let changedImpact = null;
|
|
51
|
+
if (input.changedFiles?.length) {
|
|
52
|
+
changedImpact = await this.queryChangedFiles(input.changedFiles).catch(() => null);
|
|
53
|
+
}
|
|
54
|
+
// Extract stage: explicit > inferred > orchestration
|
|
55
|
+
const orchStage = orchResult.status === 'fulfilled' ? orchResult.value.stage : null;
|
|
56
|
+
const stage = input.stage || parsed.impliedStage || orchStage || undefined;
|
|
57
|
+
if (stage)
|
|
58
|
+
pack.currentStage = stage;
|
|
59
|
+
// Memory query uses resolved stage for type filtering
|
|
60
|
+
const memResult = await queryMemory(parsed, this.budget.memory, stage)
|
|
61
|
+
.catch(() => ({ memories: [], bugWarnings: [], raw: '' }));
|
|
54
62
|
// Merge Code Graph results
|
|
55
63
|
if (codeResult.status === 'fulfilled') {
|
|
56
64
|
const code = codeResult.value;
|
|
@@ -59,11 +67,8 @@ export class ContextBroker {
|
|
|
59
67
|
pack.repoSummary = code.repoSummary;
|
|
60
68
|
}
|
|
61
69
|
// Merge Memory results
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
pack.priorMemories = mem.memories;
|
|
65
|
-
pack.bugWarnings = mem.bugWarnings;
|
|
66
|
-
}
|
|
70
|
+
pack.priorMemories = memResult.memories;
|
|
71
|
+
pack.bugWarnings = memResult.bugWarnings;
|
|
67
72
|
// Merge Orchestration results
|
|
68
73
|
if (orchResult.status === 'fulfilled') {
|
|
69
74
|
const orch = orchResult.value;
|
|
@@ -71,7 +76,13 @@ export class ContextBroker {
|
|
|
71
76
|
pack.activeSpec = orch.spec;
|
|
72
77
|
pack.pendingTasks = orch.tasks;
|
|
73
78
|
}
|
|
74
|
-
//
|
|
79
|
+
// Merge changedFiles impact
|
|
80
|
+
if (changedImpact) {
|
|
81
|
+
pack.relevantFiles = [...changedImpact.files, ...pack.relevantFiles];
|
|
82
|
+
pack.risks = [...changedImpact.risks, ...pack.risks];
|
|
83
|
+
}
|
|
84
|
+
// Step 5: Generate heuristics + Compress to budget
|
|
85
|
+
this.fillHeuristics(pack, parsed, stage);
|
|
75
86
|
return compressContextPack(pack, this.budget);
|
|
76
87
|
}
|
|
77
88
|
/**
|
|
@@ -80,21 +91,20 @@ export class ContextBroker {
|
|
|
80
91
|
*/
|
|
81
92
|
async buildSessionContext() {
|
|
82
93
|
const pack = emptyContextPack();
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
}
|
|
90
|
-
if (
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
}
|
|
94
|
+
// getRepoMap is synchronous (execFileSync) — run it directly, then orch in parallel
|
|
95
|
+
const repoMap = getRepoMap(this.repoRoot, 3000);
|
|
96
|
+
const orchResult = await this.queryOrch().catch(() => ({
|
|
97
|
+
stage: null,
|
|
98
|
+
spec: null,
|
|
99
|
+
tasks: [],
|
|
100
|
+
}));
|
|
101
|
+
if (repoMap)
|
|
102
|
+
pack.repoSummary = repoMap;
|
|
103
|
+
if (orchResult.stage)
|
|
104
|
+
pack.currentStage = orchResult.stage;
|
|
105
|
+
if (orchResult.spec)
|
|
106
|
+
pack.activeSpec = orchResult.spec;
|
|
107
|
+
pack.pendingTasks = orchResult.tasks;
|
|
98
108
|
return compressContextPack(pack, this.budget);
|
|
99
109
|
}
|
|
100
110
|
// --- Private query methods ---
|
|
@@ -102,9 +112,6 @@ export class ContextBroker {
|
|
|
102
112
|
const code = await queryCodeGraph(parsed, this.budget.code, this.repoRoot);
|
|
103
113
|
return code;
|
|
104
114
|
}
|
|
105
|
-
async queryMem(parsed, stage) {
|
|
106
|
-
return queryMemory(parsed, this.budget.memory, stage);
|
|
107
|
-
}
|
|
108
115
|
async queryOrch() {
|
|
109
116
|
const [stage, spec, tasks] = await Promise.all([
|
|
110
117
|
this.orchAdapter.getCurrentStage().catch(() => null),
|
|
@@ -113,6 +120,59 @@ export class ContextBroker {
|
|
|
113
120
|
]);
|
|
114
121
|
return { stage, spec, tasks };
|
|
115
122
|
}
|
|
123
|
+
/** Run impact analysis on changed files */
|
|
124
|
+
async queryChangedFiles(files) {
|
|
125
|
+
const impactFiles = [];
|
|
126
|
+
const risks = [];
|
|
127
|
+
for (const file of files.slice(0, 3)) {
|
|
128
|
+
const { stdout, ok } = execSafe('code-graph-mcp', ['impact', file], {
|
|
129
|
+
cwd: this.repoRoot,
|
|
130
|
+
timeout: 2000,
|
|
131
|
+
});
|
|
132
|
+
if (ok && stdout) {
|
|
133
|
+
impactFiles.push({ path: file, reason: 'changed file — impact analysis', snippet: stdout.slice(0, 200) });
|
|
134
|
+
// Extract risk indicators from impact output
|
|
135
|
+
if (/high|critical|many callers/i.test(stdout)) {
|
|
136
|
+
risks.push(`High-impact change: ${file}`);
|
|
137
|
+
}
|
|
138
|
+
}
|
|
139
|
+
else {
|
|
140
|
+
impactFiles.push({ path: file, reason: 'changed file' });
|
|
141
|
+
}
|
|
142
|
+
}
|
|
143
|
+
return { files: impactFiles, risks };
|
|
144
|
+
}
|
|
145
|
+
/** Fill suggestedApproach and risks based on heuristics (no LLM needed) */
|
|
146
|
+
fillHeuristics(pack, parsed, stage) {
|
|
147
|
+
// suggestedApproach: based on intent + stage + available context
|
|
148
|
+
if (!pack.suggestedApproach) {
|
|
149
|
+
const parts = [];
|
|
150
|
+
if (stage === 'brainstorm') {
|
|
151
|
+
parts.push('Explore alternatives before implementing.');
|
|
152
|
+
}
|
|
153
|
+
if (parsed.intent === 'impact' && pack.relevantFiles.length > 0) {
|
|
154
|
+
parts.push(`Review ${pack.relevantFiles.length} affected files before making changes.`);
|
|
155
|
+
}
|
|
156
|
+
if (parsed.intent === 'debug' && pack.bugWarnings.length > 0) {
|
|
157
|
+
parts.push('Check prior bug fixes for related patterns.');
|
|
158
|
+
}
|
|
159
|
+
if (pack.activeSpec && (stage === 'implement' || stage === 'plan')) {
|
|
160
|
+
parts.push(`Align with active spec: ${pack.activeSpec.title}`);
|
|
161
|
+
}
|
|
162
|
+
if (parts.length > 0) {
|
|
163
|
+
pack.suggestedApproach = parts.join(' ');
|
|
164
|
+
}
|
|
165
|
+
}
|
|
166
|
+
// risks: derive from bug warnings + impact analysis
|
|
167
|
+
if (pack.bugWarnings.length > 0) {
|
|
168
|
+
for (const bug of pack.bugWarnings.slice(0, 2)) {
|
|
169
|
+
const risk = `Prior bug in this area: ${bug.title}`;
|
|
170
|
+
if (!pack.risks.includes(risk)) {
|
|
171
|
+
pack.risks.push(risk);
|
|
172
|
+
}
|
|
173
|
+
}
|
|
174
|
+
}
|
|
175
|
+
}
|
|
116
176
|
}
|
|
117
177
|
// --- Formatting ---
|
|
118
178
|
/**
|
|
@@ -170,6 +230,10 @@ export function formatContextPack(pack) {
|
|
|
170
230
|
if (orchLines.length > 0) {
|
|
171
231
|
sections.push(['## Current State', ...orchLines].join('\n'));
|
|
172
232
|
}
|
|
233
|
+
// Suggested approach
|
|
234
|
+
if (pack.suggestedApproach) {
|
|
235
|
+
sections.push(`## Suggested Approach\n${pack.suggestedApproach}`);
|
|
236
|
+
}
|
|
173
237
|
// Risks
|
|
174
238
|
if (pack.risks.length > 0) {
|
|
175
239
|
sections.push(['## Risks', ...pack.risks.map((r) => `- ${r}`)].join('\n'));
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"broker.js","sourceRoot":"","sources":["../../src/broker/broker.ts"],"names":[],"mappings":"AAMA,OAAO,EAAE,cAAc,EAAE,gBAAgB,EAAE,UAAU,EAAE,MAAM,mBAAmB,CAAC;AACjF,OAAO,EAAE,UAAU,EAAoB,MAAM,mBAAmB,CAAC;AACjE,OAAO,EAAE,cAAc,EAAE,UAAU,EAAE,MAAM,2BAA2B,CAAC;AACvE,OAAO,EAAE,WAAW,EAAE,MAAM,uBAAuB,CAAC;
|
|
1
|
+
{"version":3,"file":"broker.js","sourceRoot":"","sources":["../../src/broker/broker.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,7 +1,10 @@
|
|
|
1
1
|
import type { ContextPack, TokenBudget } from './context-pack.js';
|
|
2
2
|
/**
|
|
3
3
|
* Compress a ContextPack to fit within the total token budget.
|
|
4
|
-
*
|
|
4
|
+
* Features dynamic budget reallocation: when a source returns empty,
|
|
5
|
+
* its budget is redistributed to other sources proportionally.
|
|
6
|
+
*
|
|
7
|
+
* Priority: bugWarnings > code context > memories > orchestration > meta
|
|
5
8
|
*/
|
|
6
9
|
export declare function compressContextPack(pack: ContextPack, budget: TokenBudget): ContextPack;
|
|
7
10
|
//# sourceMappingURL=compressor.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"compressor.d.ts","sourceRoot":"","sources":["../../src/broker/compressor.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,WAAW,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAC;AAGlE
|
|
1
|
+
{"version":3,"file":"compressor.d.ts","sourceRoot":"","sources":["../../src/broker/compressor.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,WAAW,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAC;AAGlE;;;;;;GAMG;AACH,wBAAgB,mBAAmB,CACjC,IAAI,EAAE,WAAW,EACjB,MAAM,EAAE,WAAW,GAClB,WAAW,CA4Eb"}
|