@sdsrs/codeagent 0.1.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 (117) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +116 -0
  3. package/dist/adapters/code-graph.d.ts +18 -0
  4. package/dist/adapters/code-graph.d.ts.map +1 -0
  5. package/dist/adapters/code-graph.js +151 -0
  6. package/dist/adapters/code-graph.js.map +1 -0
  7. package/dist/adapters/memory.d.ts +13 -0
  8. package/dist/adapters/memory.d.ts.map +1 -0
  9. package/dist/adapters/memory.js +110 -0
  10. package/dist/adapters/memory.js.map +1 -0
  11. package/dist/adapters/orchestration/gsd.d.ts +20 -0
  12. package/dist/adapters/orchestration/gsd.d.ts.map +1 -0
  13. package/dist/adapters/orchestration/gsd.js +78 -0
  14. package/dist/adapters/orchestration/gsd.js.map +1 -0
  15. package/dist/adapters/orchestration/interface.d.ts +32 -0
  16. package/dist/adapters/orchestration/interface.d.ts.map +1 -0
  17. package/dist/adapters/orchestration/interface.js +2 -0
  18. package/dist/adapters/orchestration/interface.js.map +1 -0
  19. package/dist/adapters/orchestration/superpowers.d.ts +33 -0
  20. package/dist/adapters/orchestration/superpowers.d.ts.map +1 -0
  21. package/dist/adapters/orchestration/superpowers.js +117 -0
  22. package/dist/adapters/orchestration/superpowers.js.map +1 -0
  23. package/dist/broker/broker.d.ts +40 -0
  24. package/dist/broker/broker.d.ts.map +1 -0
  25. package/dist/broker/broker.js +181 -0
  26. package/dist/broker/broker.js.map +1 -0
  27. package/dist/broker/compressor.d.ts +7 -0
  28. package/dist/broker/compressor.d.ts.map +1 -0
  29. package/dist/broker/compressor.js +61 -0
  30. package/dist/broker/compressor.js.map +1 -0
  31. package/dist/broker/context-pack.d.ts +126 -0
  32. package/dist/broker/context-pack.d.ts.map +1 -0
  33. package/dist/broker/context-pack.js +103 -0
  34. package/dist/broker/context-pack.js.map +1 -0
  35. package/dist/broker/query-parser.d.ts +17 -0
  36. package/dist/broker/query-parser.d.ts.map +1 -0
  37. package/dist/broker/query-parser.js +127 -0
  38. package/dist/broker/query-parser.js.map +1 -0
  39. package/dist/cli/commands/chat.d.ts +13 -0
  40. package/dist/cli/commands/chat.d.ts.map +1 -0
  41. package/dist/cli/commands/chat.js +264 -0
  42. package/dist/cli/commands/chat.js.map +1 -0
  43. package/dist/cli/commands/config.d.ts +14 -0
  44. package/dist/cli/commands/config.d.ts.map +1 -0
  45. package/dist/cli/commands/config.js +94 -0
  46. package/dist/cli/commands/config.js.map +1 -0
  47. package/dist/cli/commands/memory.d.ts +10 -0
  48. package/dist/cli/commands/memory.d.ts.map +1 -0
  49. package/dist/cli/commands/memory.js +52 -0
  50. package/dist/cli/commands/memory.js.map +1 -0
  51. package/dist/cli/commands/search.d.ts +9 -0
  52. package/dist/cli/commands/search.d.ts.map +1 -0
  53. package/dist/cli/commands/search.js +45 -0
  54. package/dist/cli/commands/search.js.map +1 -0
  55. package/dist/cli/commands/session.d.ts +9 -0
  56. package/dist/cli/commands/session.d.ts.map +1 -0
  57. package/dist/cli/commands/session.js +86 -0
  58. package/dist/cli/commands/session.js.map +1 -0
  59. package/dist/cli/index.d.ts +3 -0
  60. package/dist/cli/index.d.ts.map +1 -0
  61. package/dist/cli/index.js +77 -0
  62. package/dist/cli/index.js.map +1 -0
  63. package/dist/cli/tui/renderer.d.ts +47 -0
  64. package/dist/cli/tui/renderer.d.ts.map +1 -0
  65. package/dist/cli/tui/renderer.js +237 -0
  66. package/dist/cli/tui/renderer.js.map +1 -0
  67. package/dist/hooks/session-start.d.ts +11 -0
  68. package/dist/hooks/session-start.d.ts.map +1 -0
  69. package/dist/hooks/session-start.js +51 -0
  70. package/dist/hooks/session-start.js.map +1 -0
  71. package/dist/hooks/stop.d.ts +11 -0
  72. package/dist/hooks/stop.d.ts.map +1 -0
  73. package/dist/hooks/stop.js +93 -0
  74. package/dist/hooks/stop.js.map +1 -0
  75. package/dist/hooks/user-prompt.d.ts +12 -0
  76. package/dist/hooks/user-prompt.d.ts.map +1 -0
  77. package/dist/hooks/user-prompt.js +46 -0
  78. package/dist/hooks/user-prompt.js.map +1 -0
  79. package/dist/providers/anthropic-api.d.ts +25 -0
  80. package/dist/providers/anthropic-api.d.ts.map +1 -0
  81. package/dist/providers/anthropic-api.js +93 -0
  82. package/dist/providers/anthropic-api.js.map +1 -0
  83. package/dist/providers/claude-cli.d.ts +16 -0
  84. package/dist/providers/claude-cli.d.ts.map +1 -0
  85. package/dist/providers/claude-cli.js +72 -0
  86. package/dist/providers/claude-cli.js.map +1 -0
  87. package/dist/providers/claude-sdk.d.ts +18 -0
  88. package/dist/providers/claude-sdk.d.ts.map +1 -0
  89. package/dist/providers/claude-sdk.js +141 -0
  90. package/dist/providers/claude-sdk.js.map +1 -0
  91. package/dist/providers/interface.d.ts +36 -0
  92. package/dist/providers/interface.d.ts.map +1 -0
  93. package/dist/providers/interface.js +2 -0
  94. package/dist/providers/interface.js.map +1 -0
  95. package/dist/scripts/install-hooks.d.ts +11 -0
  96. package/dist/scripts/install-hooks.d.ts.map +1 -0
  97. package/dist/scripts/install-hooks.js +86 -0
  98. package/dist/scripts/install-hooks.js.map +1 -0
  99. package/dist/session/manager.d.ts +65 -0
  100. package/dist/session/manager.d.ts.map +1 -0
  101. package/dist/session/manager.js +143 -0
  102. package/dist/session/manager.js.map +1 -0
  103. package/dist/session/schema.d.ts +7 -0
  104. package/dist/session/schema.d.ts.map +1 -0
  105. package/dist/session/schema.js +82 -0
  106. package/dist/session/schema.js.map +1 -0
  107. package/dist/utils/exec.d.ts +20 -0
  108. package/dist/utils/exec.d.ts.map +1 -0
  109. package/dist/utils/exec.js +28 -0
  110. package/dist/utils/exec.js.map +1 -0
  111. package/dist/utils/tokens.d.ts +12 -0
  112. package/dist/utils/tokens.d.ts.map +1 -0
  113. package/dist/utils/tokens.js +38 -0
  114. package/dist/utils/tokens.js.map +1 -0
  115. package/package.json +90 -0
  116. package/src/skills/brainstorm.md +33 -0
  117. package/src/skills/review.md +41 -0
package/LICENSE ADDED
@@ -0,0 +1,21 @@
1
+ MIT License
2
+
3
+ Copyright (c) 2026 sdsrs
4
+
5
+ Permission is hereby granted, free of charge, to any person obtaining a copy
6
+ of this software and associated documentation files (the "Software"), to deal
7
+ in the Software without restriction, including without limitation the rights
8
+ to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9
+ copies of the Software, and to permit persons to whom the Software is
10
+ furnished to do so, subject to the following conditions:
11
+
12
+ The above copyright notice and this permission notice shall be included in all
13
+ copies or substantial portions of the Software.
14
+
15
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16
+ IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17
+ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18
+ AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19
+ LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20
+ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
21
+ SOFTWARE.
package/README.md ADDED
@@ -0,0 +1,116 @@
1
+ # CodeAgent
2
+
3
+ Context-aware coding assistant that integrates code search, memory, and orchestration into a unified Context Broker.
4
+
5
+ ## Install
6
+
7
+ ```bash
8
+ # Global install
9
+ npm install -g codeagent
10
+
11
+ # Or run directly
12
+ npx codeagent chat
13
+ ```
14
+
15
+ ## Usage
16
+
17
+ ### Interactive Chat
18
+
19
+ ```bash
20
+ # Start a new coding session
21
+ codeagent chat
22
+
23
+ # Resume an existing session
24
+ codeagent chat --resume <sessionId>
25
+
26
+ # Use a specific provider
27
+ codeagent chat --provider api # Direct Anthropic API
28
+ codeagent chat --provider cli # claude -p backend
29
+ codeagent chat --provider sdk # Agent SDK (default)
30
+ ```
31
+
32
+ ### Code Search
33
+
34
+ ```bash
35
+ codeagent search "payment processing"
36
+ codeagent search "RefundService" --type impact
37
+ codeagent search "processPayment" --type callgraph
38
+ codeagent search "src/payment/" --type overview
39
+ ```
40
+
41
+ ### Memory
42
+
43
+ ```bash
44
+ codeagent memory "authentication" # Search memories
45
+ codeagent memory --save "Use cents" --type decision --body "Avoid float issues"
46
+ ```
47
+
48
+ ### Sessions
49
+
50
+ ```bash
51
+ codeagent session list
52
+ codeagent session show <id>
53
+ codeagent session delete <id>
54
+ ```
55
+
56
+ ### Configuration
57
+
58
+ ```bash
59
+ codeagent config set orchestration superpowers # or gsd
60
+ codeagent config set model claude-opus-4-6
61
+ codeagent config set maxBudgetUsd 5.0
62
+ ```
63
+
64
+ ## Claude Code Integration
65
+
66
+ CodeAgent enhances Claude Code through hooks:
67
+
68
+ ```bash
69
+ # Install hooks to current project
70
+ codeagent install-hooks
71
+
72
+ # Install hooks globally
73
+ codeagent install-hooks:global
74
+ ```
75
+
76
+ Hooks automatically inject context on every prompt:
77
+ - **UserPromptSubmit** — Code search + memory + orchestration context
78
+ - **SessionStart** — Project overview on session start
79
+ - **Stop** — Extract discoveries to memory
80
+
81
+ ## Architecture
82
+
83
+ ```
84
+ ┌──────────────┐ ┌──────────────┐
85
+ │ devx chat │ │ Claude Code │
86
+ │ (CLI/TUI) │ │ (hooks) │
87
+ └──────┬───────┘ └──────┬───────┘
88
+ │ │
89
+ └─────────┬─────────┘
90
+
91
+ ┌─────────────────┐
92
+ │ Context Broker │ ← 5-step pipeline
93
+ │ parse → search │
94
+ │ → memory → orch │
95
+ │ → compress │
96
+ └──┬────┬────┬─────┘
97
+ │ │ │
98
+ ┌─────┘ │ └─────┐
99
+ ▼ ▼ ▼
100
+ ┌────────┐ ┌───────┐ ┌───────┐
101
+ │ Code │ │Memory │ │ Orch │
102
+ │ Graph │ │Engine │ │Adapter│
103
+ │ (Rust) │ │(Node) │ │(swap) │
104
+ └────────┘ └───────┘ └───────┘
105
+ ```
106
+
107
+ ## Requirements
108
+
109
+ - Node.js >= 20
110
+ - [code-graph-mcp](https://github.com/sdsrs/code-graph-mcp) (optional, for code search)
111
+ - [claude-mem-lite](https://github.com/sdsrs/claude-mem-lite) (optional, for memory)
112
+ - `ANTHROPIC_API_KEY` environment variable (for API provider)
113
+
114
+ ## License
115
+
116
+ MIT
@@ -0,0 +1,18 @@
1
+ import type { ParsedQuery } from '../broker/query-parser.js';
2
+ import type { RelevantFile, SymbolInfo } from '../broker/context-pack.js';
3
+ export interface CodeGraphResult {
4
+ repoSummary?: string;
5
+ relevantFiles: RelevantFile[];
6
+ relatedSymbols: SymbolInfo[];
7
+ raw: string;
8
+ }
9
+ /**
10
+ * Query Code Graph MCP via CLI.
11
+ * Selects the right command based on intent.
12
+ */
13
+ export declare function queryCodeGraph(parsed: ParsedQuery, tokenBudget: number, repoRoot: string): Promise<CodeGraphResult>;
14
+ /**
15
+ * Get repo map summary via code-graph-mcp map.
16
+ */
17
+ export declare function getRepoMap(repoRoot: string, timeout?: number): string;
18
+ //# sourceMappingURL=code-graph.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"code-graph.d.ts","sourceRoot":"","sources":["../../src/adapters/code-graph.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,2BAA2B,CAAC;AAC7D,OAAO,KAAK,EAAE,YAAY,EAAE,UAAU,EAAE,MAAM,2BAA2B,CAAC;AAI1E,MAAM,WAAW,eAAe;IAC9B,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,aAAa,EAAE,YAAY,EAAE,CAAC;IAC9B,cAAc,EAAE,UAAU,EAAE,CAAC;IAC7B,GAAG,EAAE,MAAM,CAAC;CACb;AAED;;;GAGG;AACH,wBAAsB,cAAc,CAClC,MAAM,EAAE,WAAW,EACnB,WAAW,EAAE,MAAM,EACnB,QAAQ,EAAE,MAAM,GACf,OAAO,CAAC,eAAe,CAAC,CAuH1B;AAED;;GAEG;AACH,wBAAgB,UAAU,CAAC,QAAQ,EAAE,MAAM,EAAE,OAAO,SAAO,GAAG,MAAM,CAKnE"}
@@ -0,0 +1,151 @@
1
+ import { execSafe } from '../utils/exec.js';
2
+ import { truncateToTokenBudget } from '../utils/tokens.js';
3
+ import fs from 'node:fs';
4
+ import path from 'node:path';
5
+ /**
6
+ * Query Code Graph MCP via CLI.
7
+ * Selects the right command based on intent.
8
+ */
9
+ export async function queryCodeGraph(parsed, tokenBudget, repoRoot) {
10
+ // Check if index exists
11
+ const dbPath = path.join(repoRoot, '.code-graph', 'index.db');
12
+ if (!fs.existsSync(dbPath)) {
13
+ return { relevantFiles: [], relatedSymbols: [], raw: '' };
14
+ }
15
+ const result = {
16
+ relevantFiles: [],
17
+ relatedSymbols: [],
18
+ raw: '',
19
+ };
20
+ const { intent, symbols, filePaths, keywords } = parsed;
21
+ const searchQuery = [...symbols, ...keywords.slice(0, 3)].join(' ');
22
+ if (!searchQuery && filePaths.length === 0) {
23
+ return result;
24
+ }
25
+ try {
26
+ switch (intent) {
27
+ case 'impact': {
28
+ if (symbols.length > 0) {
29
+ const { stdout, ok } = execSafe(`code-graph-mcp impact "${symbols[0]}"`, { cwd: repoRoot, timeout: 2000 });
30
+ if (ok)
31
+ result.raw = stdout;
32
+ }
33
+ break;
34
+ }
35
+ case 'understand': {
36
+ if (filePaths.length > 0) {
37
+ const dir = filePaths[0].replace(/\/[^/]+$/, '/');
38
+ const { stdout, ok } = execSafe(`code-graph-mcp overview "${dir}"`, { cwd: repoRoot, timeout: 2000 });
39
+ if (ok)
40
+ result.raw = stdout;
41
+ }
42
+ else if (searchQuery) {
43
+ const { stdout, ok } = execSafe(`code-graph-mcp search "${searchQuery}" --limit 8`, { cwd: repoRoot, timeout: 2000 });
44
+ if (ok)
45
+ result.raw = stdout;
46
+ }
47
+ break;
48
+ }
49
+ case 'callgraph': {
50
+ if (symbols.length > 0) {
51
+ const { stdout, ok } = execSafe(`code-graph-mcp callgraph "${symbols[0]}" --depth 2`, { cwd: repoRoot, timeout: 2000 });
52
+ if (ok)
53
+ result.raw = stdout;
54
+ }
55
+ break;
56
+ }
57
+ case 'implement': {
58
+ // Search + overview for implementation context
59
+ const results = [];
60
+ if (searchQuery) {
61
+ const { stdout, ok } = execSafe(`code-graph-mcp search "${searchQuery}" --limit 5`, { cwd: repoRoot, timeout: 2000 });
62
+ if (ok)
63
+ results.push(stdout);
64
+ }
65
+ if (filePaths.length > 0) {
66
+ const dir = filePaths[0].replace(/\/[^/]+$/, '/');
67
+ const { stdout, ok } = execSafe(`code-graph-mcp overview "${dir}"`, { cwd: repoRoot, timeout: 2000 });
68
+ if (ok)
69
+ results.push(stdout);
70
+ }
71
+ result.raw = results.join('\n\n');
72
+ break;
73
+ }
74
+ case 'debug':
75
+ case 'search':
76
+ case 'general':
77
+ default: {
78
+ if (searchQuery) {
79
+ const { stdout, ok } = execSafe(`code-graph-mcp search "${searchQuery}" --limit 8`, { cwd: repoRoot, timeout: 2000 });
80
+ if (ok)
81
+ result.raw = stdout;
82
+ }
83
+ else if (filePaths.length > 0) {
84
+ const dir = filePaths[0].replace(/\/[^/]+$/, '/');
85
+ const { stdout, ok } = execSafe(`code-graph-mcp overview "${dir}"`, { cwd: repoRoot, timeout: 2000 });
86
+ if (ok)
87
+ result.raw = stdout;
88
+ }
89
+ break;
90
+ }
91
+ }
92
+ }
93
+ catch {
94
+ // Graceful degradation — return empty
95
+ }
96
+ // Truncate to budget
97
+ if (result.raw) {
98
+ result.raw = truncateToTokenBudget(result.raw, tokenBudget);
99
+ }
100
+ // Parse raw into structured data (best-effort)
101
+ result.relevantFiles = parseRelevantFiles(result.raw);
102
+ result.relatedSymbols = parseSymbols(result.raw);
103
+ return result;
104
+ }
105
+ /**
106
+ * Get repo map summary via code-graph-mcp map.
107
+ */
108
+ export function getRepoMap(repoRoot, timeout = 3000) {
109
+ const dbPath = path.join(repoRoot, '.code-graph', 'index.db');
110
+ if (!fs.existsSync(dbPath))
111
+ return '';
112
+ const { stdout } = execSafe('code-graph-mcp map', { cwd: repoRoot, timeout });
113
+ return stdout;
114
+ }
115
+ // --- Parsers for code-graph CLI output ---
116
+ function parseRelevantFiles(raw) {
117
+ if (!raw)
118
+ return [];
119
+ const files = [];
120
+ // Match file paths in output (e.g. "src/foo/bar.ts" or "./src/foo/bar.ts")
121
+ const fileMatches = raw.match(/(?:^|\s)(\.?\/?\w[\w/.-]*\.\w+)/gm) || [];
122
+ const seen = new Set();
123
+ for (const match of fileMatches) {
124
+ const p = match.trim().replace(/^\.\//, '');
125
+ if (seen.has(p) || !p.includes('/'))
126
+ continue;
127
+ seen.add(p);
128
+ files.push({ path: p, reason: 'code-graph search hit' });
129
+ }
130
+ return files.slice(0, 10);
131
+ }
132
+ function parseSymbols(raw) {
133
+ if (!raw)
134
+ return [];
135
+ const symbols = [];
136
+ // Match symbol definitions in overview/callgraph output
137
+ // Typical format: "fn symbol_name" or "struct SymbolName" or " function symbolName"
138
+ const symMatches = raw.match(/(?:fn|function|struct|class|impl|trait|interface|type|const|enum)\s+(\w+)/g) || [];
139
+ const seen = new Set();
140
+ for (const match of symMatches) {
141
+ const parts = match.split(/\s+/);
142
+ const kind = parts[0];
143
+ const name = parts[1];
144
+ if (!name || seen.has(name))
145
+ continue;
146
+ seen.add(name);
147
+ symbols.push({ name, kind, file: '' });
148
+ }
149
+ return symbols.slice(0, 15);
150
+ }
151
+ //# sourceMappingURL=code-graph.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"code-graph.js","sourceRoot":"","sources":["../../src/adapters/code-graph.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,13 @@
1
+ import type { ParsedQuery } from '../broker/query-parser.js';
2
+ import type { MemoryEntry, Stage } from '../broker/context-pack.js';
3
+ export interface MemoryResult {
4
+ memories: MemoryEntry[];
5
+ bugWarnings: MemoryEntry[];
6
+ raw: string;
7
+ }
8
+ /**
9
+ * Query memory engine via claude-mem-lite CLI.
10
+ * Searches for relevant memories based on query and stage.
11
+ */
12
+ export declare function queryMemory(parsed: ParsedQuery, tokenBudget: number, stage?: Stage): Promise<MemoryResult>;
13
+ //# sourceMappingURL=memory.d.ts.map
@@ -0,0 +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;AAsBD;;;GAGG;AACH,wBAAsB,WAAW,CAC/B,MAAM,EAAE,WAAW,EACnB,WAAW,EAAE,MAAM,EACnB,KAAK,CAAC,EAAE,KAAK,GACZ,OAAO,CAAC,YAAY,CAAC,CAyDvB"}
@@ -0,0 +1,110 @@
1
+ import { execSafe } from '../utils/exec.js';
2
+ import { truncateToTokenBudget } from '../utils/tokens.js';
3
+ /**
4
+ * Determine which memory types to search based on the current stage.
5
+ */
6
+ function getSearchTypes(stage) {
7
+ switch (stage) {
8
+ case 'brainstorm':
9
+ return ['decision', 'discovery'];
10
+ case 'plan':
11
+ return ['decision', 'discovery', 'task'];
12
+ case 'implement':
13
+ return ['bugfix', 'decision'];
14
+ case 'review':
15
+ return ['bugfix'];
16
+ case 'debug':
17
+ return ['bugfix', 'discovery'];
18
+ default:
19
+ return []; // empty = search all types
20
+ }
21
+ }
22
+ /**
23
+ * Query memory engine via claude-mem-lite CLI.
24
+ * Searches for relevant memories based on query and stage.
25
+ */
26
+ export async function queryMemory(parsed, tokenBudget, stage) {
27
+ const result = {
28
+ memories: [],
29
+ bugWarnings: [],
30
+ raw: '',
31
+ };
32
+ const searchQuery = [...parsed.symbols, ...parsed.keywords.slice(0, 3)].join(' ');
33
+ if (!searchQuery)
34
+ return result;
35
+ const types = getSearchTypes(stage);
36
+ const allRaw = [];
37
+ try {
38
+ if (types.length === 0) {
39
+ // Search all types
40
+ const { stdout, ok } = execSafe(`claude-mem-lite search "${searchQuery}" --limit 8`, { timeout: 2000 });
41
+ if (ok && stdout)
42
+ allRaw.push(stdout);
43
+ }
44
+ else {
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 });
55
+ if (ok && stdout)
56
+ allRaw.push(stdout);
57
+ }
58
+ }
59
+ catch {
60
+ // Graceful degradation
61
+ }
62
+ result.raw = allRaw.join('\n---\n');
63
+ // Truncate to budget
64
+ if (result.raw) {
65
+ result.raw = truncateToTokenBudget(result.raw, tokenBudget);
66
+ }
67
+ // Parse raw into structured entries
68
+ const entries = parseMemoryEntries(result.raw);
69
+ result.memories = entries.filter((e) => e.type !== 'bugfix');
70
+ result.bugWarnings = entries.filter((e) => e.type === 'bugfix');
71
+ return result;
72
+ }
73
+ // --- Parse memory search output ---
74
+ function parseMemoryEntries(raw) {
75
+ if (!raw)
76
+ return [];
77
+ const entries = [];
78
+ // claude-mem-lite search output format varies, but typically:
79
+ // [ID] [type] title
80
+ // body text...
81
+ // ---
82
+ const blocks = raw.split(/(?:^|\n)---\n/);
83
+ for (const block of blocks) {
84
+ const trimmed = block.trim();
85
+ if (!trimmed)
86
+ continue;
87
+ const lines = trimmed.split('\n');
88
+ const firstLine = lines[0] || '';
89
+ // Try to parse structured format: "#123 [bugfix] Title here"
90
+ const match = firstLine.match(/^#?(\d+)\s*\[(\w+)]\s*(.+)/);
91
+ if (match) {
92
+ entries.push({
93
+ id: parseInt(match[1], 10),
94
+ type: match[2],
95
+ title: match[3].trim(),
96
+ body: lines.slice(1).join('\n').trim(),
97
+ });
98
+ }
99
+ else {
100
+ // Fallback: treat as unstructured
101
+ entries.push({
102
+ type: 'semantic',
103
+ title: firstLine.slice(0, 100),
104
+ body: lines.slice(1).join('\n').trim(),
105
+ });
106
+ }
107
+ }
108
+ return entries;
109
+ }
110
+ //# sourceMappingURL=memory.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"memory.js","sourceRoot":"","sources":["../../src/adapters/memory.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,20 @@
1
+ import type { SpecSummary, Stage, TaskSummary } from '../../broker/context-pack.js';
2
+ import type { Evidence, OrchestrationAdapter, StageTransition } from './interface.js';
3
+ /**
4
+ * GSD-Lite orchestration adapter.
5
+ * Reads state directly from .gsd/state.json for speed.
6
+ */
7
+ export declare class GsdAdapter implements OrchestrationAdapter {
8
+ private repoRoot;
9
+ constructor(repoRoot: string);
10
+ private getStatePath;
11
+ private readState;
12
+ getCurrentStage(): Promise<Stage | null>;
13
+ getActiveSpec(): Promise<SpecSummary | null>;
14
+ getActiveTasks(): Promise<TaskSummary[]>;
15
+ advanceStage(_evidence: Evidence): Promise<StageTransition | null>;
16
+ recordEvidence(_evidence: Evidence): Promise<void>;
17
+ getEngineName(): string;
18
+ getAvailableStages(): Stage[];
19
+ }
20
+ //# sourceMappingURL=gsd.d.ts.map
@@ -0,0 +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;AA6BtF;;;GAGG;AACH,qBAAa,UAAW,YAAW,oBAAoB;IACrD,OAAO,CAAC,QAAQ,CAAS;gBAEb,QAAQ,EAAE,MAAM;IAI5B,OAAO,CAAC,YAAY;IAIpB,OAAO,CAAC,SAAS;IAWX,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;IAYxC,YAAY,CAAC,SAAS,EAAE,QAAQ,GAAG,OAAO,CAAC,eAAe,GAAG,IAAI,CAAC;IAMlE,cAAc,CAAC,SAAS,EAAE,QAAQ,GAAG,OAAO,CAAC,IAAI,CAAC;IAIxD,aAAa,IAAI,MAAM;IAIvB,kBAAkB,IAAI,KAAK,EAAE;CAG9B"}
@@ -0,0 +1,78 @@
1
+ import fs from 'node:fs';
2
+ import path from 'node:path';
3
+ // Map GSD phases to our Stage type
4
+ const PHASE_TO_STAGE = {
5
+ research: 'brainstorm',
6
+ planning: 'plan',
7
+ execution: 'implement',
8
+ review: 'review',
9
+ debugging: 'debug',
10
+ };
11
+ /**
12
+ * GSD-Lite orchestration adapter.
13
+ * Reads state directly from .gsd/state.json for speed.
14
+ */
15
+ export class GsdAdapter {
16
+ repoRoot;
17
+ constructor(repoRoot) {
18
+ this.repoRoot = repoRoot;
19
+ }
20
+ getStatePath() {
21
+ return path.join(this.repoRoot, '.gsd', 'state.json');
22
+ }
23
+ readState() {
24
+ const statePath = this.getStatePath();
25
+ try {
26
+ if (!fs.existsSync(statePath))
27
+ return null;
28
+ const raw = fs.readFileSync(statePath, 'utf8');
29
+ return JSON.parse(raw);
30
+ }
31
+ catch {
32
+ return null;
33
+ }
34
+ }
35
+ async getCurrentStage() {
36
+ const state = this.readState();
37
+ if (!state?.phase)
38
+ return null;
39
+ return PHASE_TO_STAGE[state.phase] || 'general';
40
+ }
41
+ async getActiveSpec() {
42
+ const state = this.readState();
43
+ if (!state?.spec?.title)
44
+ return null;
45
+ return {
46
+ id: state.spec.id,
47
+ title: state.spec.title,
48
+ summary: state.spec.summary,
49
+ };
50
+ }
51
+ async getActiveTasks() {
52
+ const state = this.readState();
53
+ if (!state?.tasks)
54
+ return [];
55
+ return state.tasks
56
+ .filter((t) => t.status !== 'completed' && t.status !== 'deleted')
57
+ .map((t) => ({
58
+ id: t.id,
59
+ title: t.title,
60
+ status: t.status,
61
+ }));
62
+ }
63
+ async advanceStage(_evidence) {
64
+ // For now, stage advancement is done through GSD MCP tools
65
+ // This adapter is read-only
66
+ return null;
67
+ }
68
+ async recordEvidence(_evidence) {
69
+ // Read-only adapter — evidence recording done through GSD MCP
70
+ }
71
+ getEngineName() {
72
+ return 'gsd';
73
+ }
74
+ getAvailableStages() {
75
+ return ['brainstorm', 'plan', 'implement', 'review', 'debug'];
76
+ }
77
+ }
78
+ //# sourceMappingURL=gsd.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"gsd.js","sourceRoot":"","sources":["../../../src/adapters/orchestration/gsd.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,SAAS,CAAC;AACzB,OAAO,IAAI,MAAM,WAAW,CAAC;AAsB7B,mCAAmC;AACnC,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;;;GAGG;AACH,MAAM,OAAO,UAAU;IACb,QAAQ,CAAS;IAEzB,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,SAAS;QACf,MAAM,SAAS,GAAG,IAAI,CAAC,YAAY,EAAE,CAAC;QACtC,IAAI,CAAC;YACH,IAAI,CAAC,EAAE,CAAC,UAAU,CAAC,SAAS,CAAC;gBAAE,OAAO,IAAI,CAAC;YAC3C,MAAM,GAAG,GAAG,EAAE,CAAC,YAAY,CAAC,SAAS,EAAE,MAAM,CAAC,CAAC;YAC/C,OAAO,IAAI,CAAC,KAAK,CAAC,GAAG,CAAa,CAAC;QACrC,CAAC;QAAC,MAAM,CAAC;YACP,OAAO,IAAI,CAAC;QACd,CAAC;IACH,CAAC;IAED,KAAK,CAAC,eAAe;QACnB,MAAM,KAAK,GAAG,IAAI,CAAC,SAAS,EAAE,CAAC;QAC/B,IAAI,CAAC,KAAK,EAAE,KAAK;YAAE,OAAO,IAAI,CAAC;QAC/B,OAAO,cAAc,CAAC,KAAK,CAAC,KAAK,CAAC,IAAI,SAAS,CAAC;IAClD,CAAC;IAED,KAAK,CAAC,aAAa;QACjB,MAAM,KAAK,GAAG,IAAI,CAAC,SAAS,EAAE,CAAC;QAC/B,IAAI,CAAC,KAAK,EAAE,IAAI,EAAE,KAAK;YAAE,OAAO,IAAI,CAAC;QACrC,OAAO;YACL,EAAE,EAAE,KAAK,CAAC,IAAI,CAAC,EAAE;YACjB,KAAK,EAAE,KAAK,CAAC,IAAI,CAAC,KAAK;YACvB,OAAO,EAAE,KAAK,CAAC,IAAI,CAAC,OAAO;SAC5B,CAAC;IACJ,CAAC;IAED,KAAK,CAAC,cAAc;QAClB,MAAM,KAAK,GAAG,IAAI,CAAC,SAAS,EAAE,CAAC;QAC/B,IAAI,CAAC,KAAK,EAAE,KAAK;YAAE,OAAO,EAAE,CAAC;QAC7B,OAAO,KAAK,CAAC,KAAK;aACf,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,MAAM,KAAK,WAAW,IAAI,CAAC,CAAC,MAAM,KAAK,SAAS,CAAC;aACjE,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;YACX,EAAE,EAAE,CAAC,CAAC,EAAE;YACR,KAAK,EAAE,CAAC,CAAC,KAAK;YACd,MAAM,EAAE,CAAC,CAAC,MAAM;SACjB,CAAC,CAAC,CAAC;IACR,CAAC;IAED,KAAK,CAAC,YAAY,CAAC,SAAmB;QACpC,2DAA2D;QAC3D,4BAA4B;QAC5B,OAAO,IAAI,CAAC;IACd,CAAC;IAED,KAAK,CAAC,cAAc,CAAC,SAAmB;QACtC,8DAA8D;IAChE,CAAC;IAED,aAAa;QACX,OAAO,KAAK,CAAC;IACf,CAAC;IAED,kBAAkB;QAChB,OAAO,CAAC,YAAY,EAAE,MAAM,EAAE,WAAW,EAAE,QAAQ,EAAE,OAAO,CAAC,CAAC;IAChE,CAAC;CACF"}
@@ -0,0 +1,32 @@
1
+ import type { SpecSummary, Stage, TaskSummary } from '../../broker/context-pack.js';
2
+ /**
3
+ * Evidence recorded during a stage.
4
+ */
5
+ export interface Evidence {
6
+ type: string;
7
+ description: string;
8
+ source: string;
9
+ data?: unknown;
10
+ }
11
+ /**
12
+ * Result of advancing to a new stage.
13
+ */
14
+ export interface StageTransition {
15
+ from: Stage;
16
+ to: Stage;
17
+ reason: string;
18
+ }
19
+ /**
20
+ * Abstract interface for orchestration engines.
21
+ * Allows swapping between GSD-Lite and Superpowers.
22
+ */
23
+ export interface OrchestrationAdapter {
24
+ getCurrentStage(): Promise<Stage | null>;
25
+ getActiveSpec(): Promise<SpecSummary | null>;
26
+ getActiveTasks(): Promise<TaskSummary[]>;
27
+ advanceStage(evidence: Evidence): Promise<StageTransition | null>;
28
+ recordEvidence(evidence: Evidence): Promise<void>;
29
+ getEngineName(): string;
30
+ getAvailableStages(): Stage[];
31
+ }
32
+ //# sourceMappingURL=interface.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"interface.d.ts","sourceRoot":"","sources":["../../../src/adapters/orchestration/interface.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,WAAW,EAAE,KAAK,EAAE,WAAW,EAAE,MAAM,8BAA8B,CAAC;AAEpF;;GAEG;AACH,MAAM,WAAW,QAAQ;IACvB,IAAI,EAAE,MAAM,CAAC;IACb,WAAW,EAAE,MAAM,CAAC;IACpB,MAAM,EAAE,MAAM,CAAC;IACf,IAAI,CAAC,EAAE,OAAO,CAAC;CAChB;AAED;;GAEG;AACH,MAAM,WAAW,eAAe;IAC9B,IAAI,EAAE,KAAK,CAAC;IACZ,EAAE,EAAE,KAAK,CAAC;IACV,MAAM,EAAE,MAAM,CAAC;CAChB;AAED;;;GAGG;AACH,MAAM,WAAW,oBAAoB;IAEnC,eAAe,IAAI,OAAO,CAAC,KAAK,GAAG,IAAI,CAAC,CAAC;IACzC,aAAa,IAAI,OAAO,CAAC,WAAW,GAAG,IAAI,CAAC,CAAC;IAC7C,cAAc,IAAI,OAAO,CAAC,WAAW,EAAE,CAAC,CAAC;IAGzC,YAAY,CAAC,QAAQ,EAAE,QAAQ,GAAG,OAAO,CAAC,eAAe,GAAG,IAAI,CAAC,CAAC;IAClE,cAAc,CAAC,QAAQ,EAAE,QAAQ,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IAGlD,aAAa,IAAI,MAAM,CAAC;IACxB,kBAAkB,IAAI,KAAK,EAAE,CAAC;CAC/B"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=interface.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"interface.js","sourceRoot":"","sources":["../../../src/adapters/orchestration/interface.ts"],"names":[],"mappings":""}
@@ -0,0 +1,33 @@
1
+ import type { SpecSummary, Stage, TaskSummary } from '../../broker/context-pack.js';
2
+ import type { Evidence, OrchestrationAdapter, StageTransition } from './interface.js';
3
+ /**
4
+ * Superpowers orchestration adapter.
5
+ *
6
+ * Key insight: Superpowers is stateless — it doesn't track "current skill".
7
+ * All skills are always available, selection happens at request time.
8
+ *
9
+ * This adapter:
10
+ * - Discovers available skills from the plugin directory
11
+ * - Maps skill names to Stage types
12
+ * - Maintains a lightweight local stage state (in-memory)
13
+ * since Superpowers itself doesn't persist this
14
+ */
15
+ export declare class SuperpowersAdapter implements OrchestrationAdapter {
16
+ private currentStageValue;
17
+ private availableSkills;
18
+ constructor(_repoRoot: string);
19
+ private getPluginDir;
20
+ private discoverSkills;
21
+ getCurrentStage(): Promise<Stage | null>;
22
+ getActiveSpec(): Promise<SpecSummary | null>;
23
+ getActiveTasks(): Promise<TaskSummary[]>;
24
+ advanceStage(evidence: Evidence): Promise<StageTransition | null>;
25
+ recordEvidence(_evidence: Evidence): Promise<void>;
26
+ getEngineName(): string;
27
+ getAvailableStages(): Stage[];
28
+ /** Get list of discovered skills */
29
+ getSkills(): string[];
30
+ /** Manually set the current stage */
31
+ setStage(stage: Stage): void;
32
+ }
33
+ //# sourceMappingURL=superpowers.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"superpowers.d.ts","sourceRoot":"","sources":["../../../src/adapters/orchestration/superpowers.ts"],"names":[],"mappings":"AAGA,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;AAgBtF;;;;;;;;;;;GAWG;AACH,qBAAa,kBAAmB,YAAW,oBAAoB;IAC7D,OAAO,CAAC,iBAAiB,CAAsB;IAC/C,OAAO,CAAC,eAAe,CAAgB;gBAE3B,SAAS,EAAE,MAAM;IAI7B,OAAO,CAAC,YAAY;IAwBpB,OAAO,CAAC,cAAc;IAiBhB,eAAe,IAAI,OAAO,CAAC,KAAK,GAAG,IAAI,CAAC;IAMxC,aAAa,IAAI,OAAO,CAAC,WAAW,GAAG,IAAI,CAAC;IAK5C,cAAc,IAAI,OAAO,CAAC,WAAW,EAAE,CAAC;IAKxC,YAAY,CAAC,QAAQ,EAAE,QAAQ,GAAG,OAAO,CAAC,eAAe,GAAG,IAAI,CAAC;IAajE,cAAc,CAAC,SAAS,EAAE,QAAQ,GAAG,OAAO,CAAC,IAAI,CAAC;IAIxD,aAAa,IAAI,MAAM;IAIvB,kBAAkB,IAAI,KAAK,EAAE;IAI7B,oCAAoC;IACpC,SAAS,IAAI,MAAM,EAAE;IAIrB,qCAAqC;IACrC,QAAQ,CAAC,KAAK,EAAE,KAAK,GAAG,IAAI;CAG7B"}