@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
@@ -0,0 +1,117 @@
1
+ import fs from 'node:fs';
2
+ import path from 'node:path';
3
+ import os from 'node:os';
4
+ // Map Superpowers skill names to our Stage type
5
+ const SKILL_TO_STAGE = {
6
+ 'brainstorming': 'brainstorm',
7
+ 'writing-plans': 'plan',
8
+ 'executing-plans': 'plan',
9
+ 'test-driven-development': 'implement',
10
+ 'subagent-driven-development': 'implement',
11
+ 'systematic-debugging': 'debug',
12
+ 'requesting-code-review': 'review',
13
+ 'receiving-code-review': 'review',
14
+ 'verification-before-completion': 'review',
15
+ 'finishing-a-development-branch': 'review',
16
+ };
17
+ /**
18
+ * Superpowers orchestration adapter.
19
+ *
20
+ * Key insight: Superpowers is stateless — it doesn't track "current skill".
21
+ * All skills are always available, selection happens at request time.
22
+ *
23
+ * This adapter:
24
+ * - Discovers available skills from the plugin directory
25
+ * - Maps skill names to Stage types
26
+ * - Maintains a lightweight local stage state (in-memory)
27
+ * since Superpowers itself doesn't persist this
28
+ */
29
+ export class SuperpowersAdapter {
30
+ currentStageValue = null;
31
+ availableSkills = [];
32
+ constructor(_repoRoot) {
33
+ this.availableSkills = this.discoverSkills();
34
+ }
35
+ getPluginDir() {
36
+ // Search common plugin cache locations
37
+ const candidates = [
38
+ path.join(os.homedir(), '.claude', 'plugins', 'cache', 'claude-plugins-official', 'superpowers'),
39
+ path.join(os.homedir(), '.claude', 'plugins', 'superpowers'),
40
+ ];
41
+ for (const dir of candidates) {
42
+ if (fs.existsSync(dir)) {
43
+ // Find the latest version directory
44
+ try {
45
+ const versions = fs.readdirSync(dir).filter((d) => {
46
+ return fs.statSync(path.join(dir, d)).isDirectory() && /^\d/.test(d);
47
+ });
48
+ if (versions.length > 0) {
49
+ versions.sort(); // Semver sort (lexical works for typical versions)
50
+ return path.join(dir, versions[versions.length - 1]);
51
+ }
52
+ }
53
+ catch { /* ignore */ }
54
+ }
55
+ }
56
+ return null;
57
+ }
58
+ discoverSkills() {
59
+ const pluginDir = this.getPluginDir();
60
+ if (!pluginDir)
61
+ return [];
62
+ const skillsDir = path.join(pluginDir, 'skills');
63
+ if (!fs.existsSync(skillsDir))
64
+ return [];
65
+ try {
66
+ return fs.readdirSync(skillsDir).filter((d) => {
67
+ const skillPath = path.join(skillsDir, d, 'SKILL.md');
68
+ return fs.existsSync(skillPath);
69
+ });
70
+ }
71
+ catch {
72
+ return [];
73
+ }
74
+ }
75
+ async getCurrentStage() {
76
+ // Superpowers doesn't track stage persistently.
77
+ // We use our in-memory stage tracking.
78
+ return this.currentStageValue;
79
+ }
80
+ async getActiveSpec() {
81
+ // Superpowers doesn't have a spec concept
82
+ return null;
83
+ }
84
+ async getActiveTasks() {
85
+ // Superpowers doesn't track tasks
86
+ return [];
87
+ }
88
+ async advanceStage(evidence) {
89
+ // Infer stage from the evidence/skill being invoked
90
+ const skillName = evidence.data || '';
91
+ const newStage = SKILL_TO_STAGE[skillName];
92
+ if (newStage && newStage !== this.currentStageValue) {
93
+ const from = this.currentStageValue || 'general';
94
+ this.currentStageValue = newStage;
95
+ return { from, to: newStage, reason: `Skill activated: ${skillName}` };
96
+ }
97
+ return null;
98
+ }
99
+ async recordEvidence(_evidence) {
100
+ // No persistent state in Superpowers
101
+ }
102
+ getEngineName() {
103
+ return 'superpowers';
104
+ }
105
+ getAvailableStages() {
106
+ return ['brainstorm', 'plan', 'implement', 'review', 'debug'];
107
+ }
108
+ /** Get list of discovered skills */
109
+ getSkills() {
110
+ return this.availableSkills;
111
+ }
112
+ /** Manually set the current stage */
113
+ setStage(stage) {
114
+ this.currentStageValue = stage;
115
+ }
116
+ }
117
+ //# sourceMappingURL=superpowers.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"superpowers.js","sourceRoot":"","sources":["../../../src/adapters/orchestration/superpowers.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,40 @@
1
+ import type { BrokerInput, ContextPack, TokenBudget } from './context-pack.js';
2
+ export interface BrokerOptions {
3
+ budget?: Partial<TokenBudget>;
4
+ orchestrationEngine?: 'gsd' | 'superpowers';
5
+ totalTimeout?: number;
6
+ }
7
+ /**
8
+ * Context Broker — the core of CodeAgent.
9
+ *
10
+ * 5-step pipeline:
11
+ * 1. QueryParse — extract intent, entities, implied stage
12
+ * 2. CodeSearch — query Code Graph MCP via CLI
13
+ * 3. MemoryRecall — query claude-mem-lite via CLI
14
+ * 4. OrchState — read orchestration state
15
+ * 5. Compress — fit into token budget
16
+ */
17
+ export declare class ContextBroker {
18
+ private repoRoot;
19
+ private orchAdapter;
20
+ private budget;
21
+ constructor(repoRoot: string, options?: BrokerOptions);
22
+ /**
23
+ * Build a ContextPack from user query.
24
+ * This is the main entry point — called by hooks and CLI.
25
+ */
26
+ buildContextPack(input: BrokerInput): Promise<ContextPack>;
27
+ /**
28
+ * Build a session-start context (repo overview + active state).
29
+ * Called once at session start — can be slower (5s).
30
+ */
31
+ buildSessionContext(): Promise<ContextPack>;
32
+ private queryCode;
33
+ private queryMem;
34
+ private queryOrch;
35
+ }
36
+ /**
37
+ * Format a ContextPack as plain text for injection into Claude Code prompt.
38
+ */
39
+ export declare function formatContextPack(pack: ContextPack): string;
40
+ //# sourceMappingURL=broker.d.ts.map
@@ -0,0 +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;AAU3B,MAAM,WAAW,aAAa;IAC5B,MAAM,CAAC,EAAE,OAAO,CAAC,WAAW,CAAC,CAAC;IAC9B,mBAAmB,CAAC,EAAE,KAAK,GAAG,aAAa,CAAC;IAC5C,YAAY,CAAC,EAAE,MAAM,CAAC;CACvB;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;IA8ChE;;;OAGG;IACG,mBAAmB,IAAI,OAAO,CAAC,WAAW,CAAC;YAwBnC,SAAS;YAKT,QAAQ;YAIR,SAAS;CAQxB;AAID;;GAEG;AACH,wBAAgB,iBAAiB,CAAC,IAAI,EAAE,WAAW,GAAG,MAAM,CA+D3D"}
@@ -0,0 +1,181 @@
1
+ import { DEFAULT_BUDGET, emptyContextPack, hasContent } from './context-pack.js';
2
+ import { parseQuery } from './query-parser.js';
3
+ import { queryCodeGraph, getRepoMap } from '../adapters/code-graph.js';
4
+ import { queryMemory } from '../adapters/memory.js';
5
+ import { GsdAdapter } from '../adapters/orchestration/gsd.js';
6
+ import { SuperpowersAdapter } from '../adapters/orchestration/superpowers.js';
7
+ import { compressContextPack } from './compressor.js';
8
+ /**
9
+ * Context Broker — the core of CodeAgent.
10
+ *
11
+ * 5-step pipeline:
12
+ * 1. QueryParse — extract intent, entities, implied stage
13
+ * 2. CodeSearch — query Code Graph MCP via CLI
14
+ * 3. MemoryRecall — query claude-mem-lite via CLI
15
+ * 4. OrchState — read orchestration state
16
+ * 5. Compress — fit into token budget
17
+ */
18
+ export class ContextBroker {
19
+ repoRoot;
20
+ orchAdapter;
21
+ budget;
22
+ constructor(repoRoot, options = {}) {
23
+ this.repoRoot = repoRoot;
24
+ this.budget = { ...DEFAULT_BUDGET, ...options.budget };
25
+ // Select orchestration adapter
26
+ if (options.orchestrationEngine === 'superpowers') {
27
+ this.orchAdapter = new SuperpowersAdapter(repoRoot);
28
+ }
29
+ else {
30
+ this.orchAdapter = new GsdAdapter(repoRoot);
31
+ }
32
+ }
33
+ /**
34
+ * Build a ContextPack from user query.
35
+ * This is the main entry point — called by hooks and CLI.
36
+ */
37
+ async buildContextPack(input) {
38
+ const pack = emptyContextPack();
39
+ // Step 1: Parse query
40
+ const parsed = parseQuery(input.userQuery);
41
+ if (parsed.isActionOnly)
42
+ return pack;
43
+ // Determine stage (explicit > inferred > orchestration)
44
+ const orchStage = await this.orchAdapter.getCurrentStage().catch(() => null);
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([
50
+ this.queryCode(parsed),
51
+ this.queryMem(parsed, stage),
52
+ this.queryOrch(),
53
+ ]);
54
+ // Merge Code Graph results
55
+ if (codeResult.status === 'fulfilled') {
56
+ const code = codeResult.value;
57
+ pack.relevantFiles = code.relevantFiles;
58
+ pack.relatedSymbols = code.relatedSymbols;
59
+ pack.repoSummary = code.repoSummary;
60
+ }
61
+ // Merge Memory results
62
+ if (memResult.status === 'fulfilled') {
63
+ const mem = memResult.value;
64
+ pack.priorMemories = mem.memories;
65
+ pack.bugWarnings = mem.bugWarnings;
66
+ }
67
+ // Merge Orchestration results
68
+ if (orchResult.status === 'fulfilled') {
69
+ const orch = orchResult.value;
70
+ if (orch.spec)
71
+ pack.activeSpec = orch.spec;
72
+ pack.pendingTasks = orch.tasks;
73
+ }
74
+ // Step 5: Compress to budget
75
+ return compressContextPack(pack, this.budget);
76
+ }
77
+ /**
78
+ * Build a session-start context (repo overview + active state).
79
+ * Called once at session start — can be slower (5s).
80
+ */
81
+ async buildSessionContext() {
82
+ const pack = emptyContextPack();
83
+ const [mapResult, orchResult] = await Promise.allSettled([
84
+ Promise.resolve(getRepoMap(this.repoRoot, 3000)),
85
+ this.queryOrch(),
86
+ ]);
87
+ if (mapResult.status === 'fulfilled') {
88
+ pack.repoSummary = mapResult.value;
89
+ }
90
+ if (orchResult.status === 'fulfilled') {
91
+ const orch = orchResult.value;
92
+ if (orch.stage)
93
+ pack.currentStage = orch.stage;
94
+ if (orch.spec)
95
+ pack.activeSpec = orch.spec;
96
+ pack.pendingTasks = orch.tasks;
97
+ }
98
+ return compressContextPack(pack, this.budget);
99
+ }
100
+ // --- Private query methods ---
101
+ async queryCode(parsed) {
102
+ const code = await queryCodeGraph(parsed, this.budget.code, this.repoRoot);
103
+ return code;
104
+ }
105
+ async queryMem(parsed, stage) {
106
+ return queryMemory(parsed, this.budget.memory, stage);
107
+ }
108
+ async queryOrch() {
109
+ const [stage, spec, tasks] = await Promise.all([
110
+ this.orchAdapter.getCurrentStage().catch(() => null),
111
+ this.orchAdapter.getActiveSpec().catch(() => null),
112
+ this.orchAdapter.getActiveTasks().catch(() => []),
113
+ ]);
114
+ return { stage, spec, tasks };
115
+ }
116
+ }
117
+ // --- Formatting ---
118
+ /**
119
+ * Format a ContextPack as plain text for injection into Claude Code prompt.
120
+ */
121
+ export function formatContextPack(pack) {
122
+ if (!hasContent(pack))
123
+ return '';
124
+ const sections = [];
125
+ // Code context
126
+ if (pack.relevantFiles.length > 0 || pack.relatedSymbols.length > 0) {
127
+ const lines = ['## Code Context'];
128
+ for (const f of pack.relevantFiles) {
129
+ const symbols = f.symbols?.length ? ` (${f.symbols.join(', ')})` : '';
130
+ lines.push(`- ${f.path}: ${f.reason}${symbols}`);
131
+ }
132
+ for (const s of pack.relatedSymbols) {
133
+ const callers = s.callers?.length ? ` ← called by: ${s.callers.join(', ')}` : '';
134
+ lines.push(`- [${s.kind}] ${s.name} (${s.file})${callers}`);
135
+ }
136
+ sections.push(lines.join('\n'));
137
+ }
138
+ // Bug warnings (high priority — shown first)
139
+ if (pack.bugWarnings.length > 0) {
140
+ const lines = ['## ⚠ Bug Warnings'];
141
+ for (const b of pack.bugWarnings) {
142
+ lines.push(`- [bug] ${b.title}`);
143
+ if (b.body)
144
+ lines.push(` ${b.body.split('\n')[0]}`);
145
+ }
146
+ sections.push(lines.join('\n'));
147
+ }
148
+ // Prior memories
149
+ if (pack.priorMemories.length > 0) {
150
+ const lines = ['## Related Memories'];
151
+ for (const m of pack.priorMemories) {
152
+ lines.push(`- [${m.type}] ${m.title}`);
153
+ if (m.body)
154
+ lines.push(` ${m.body.split('\n')[0]}`);
155
+ }
156
+ sections.push(lines.join('\n'));
157
+ }
158
+ // Orchestration state
159
+ const orchLines = [];
160
+ if (pack.currentStage)
161
+ orchLines.push(`- Stage: ${pack.currentStage}`);
162
+ if (pack.activeSpec)
163
+ orchLines.push(`- Active Spec: ${pack.activeSpec.title}`);
164
+ if (pack.pendingTasks.length > 0) {
165
+ orchLines.push(`- Pending Tasks: ${pack.pendingTasks.length}`);
166
+ for (const t of pack.pendingTasks.slice(0, 5)) {
167
+ orchLines.push(` - [${t.status}] ${t.title}`);
168
+ }
169
+ }
170
+ if (orchLines.length > 0) {
171
+ sections.push(['## Current State', ...orchLines].join('\n'));
172
+ }
173
+ // Risks
174
+ if (pack.risks.length > 0) {
175
+ sections.push(['## Risks', ...pack.risks.map((r) => `- ${r}`)].join('\n'));
176
+ }
177
+ if (sections.length === 0)
178
+ return '';
179
+ return `<codeagent-context>\n${sections.join('\n\n')}\n</codeagent-context>`;
180
+ }
181
+ //# sourceMappingURL=broker.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"broker.js","sourceRoot":"","sources":["../../src/broker/broker.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,7 @@
1
+ import type { ContextPack, TokenBudget } from './context-pack.js';
2
+ /**
3
+ * Compress a ContextPack to fit within the total token budget.
4
+ * Priority: bugWarnings > exact symbol hits > semantic search > memories > repoSummary
5
+ */
6
+ export declare function compressContextPack(pack: ContextPack, budget: TokenBudget): ContextPack;
7
+ //# sourceMappingURL=compressor.d.ts.map
@@ -0,0 +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;;;GAGG;AACH,wBAAgB,mBAAmB,CACjC,IAAI,EAAE,WAAW,EACjB,MAAM,EAAE,WAAW,GAClB,WAAW,CAsEb"}
@@ -0,0 +1,61 @@
1
+ import { estimateTokens, truncateToTokenBudget } from '../utils/tokens.js';
2
+ /**
3
+ * Compress a ContextPack to fit within the total token budget.
4
+ * Priority: bugWarnings > exact symbol hits > semantic search > memories > repoSummary
5
+ */
6
+ export function compressContextPack(pack, budget) {
7
+ const compressed = { ...pack };
8
+ // 1. Bug warnings — highest priority, always include (from memory budget)
9
+ const bugTokens = compressed.bugWarnings.reduce((sum, b) => sum + estimateTokens(b.title + b.body), 0);
10
+ // 2. Code context — truncate to code budget
11
+ const codeBudget = budget.code;
12
+ let codeUsed = 0;
13
+ compressed.relevantFiles = compressed.relevantFiles.filter((f) => {
14
+ const tokens = estimateTokens(f.path + (f.reason || '') + (f.snippet || ''));
15
+ if (codeUsed + tokens <= codeBudget) {
16
+ codeUsed += tokens;
17
+ return true;
18
+ }
19
+ return false;
20
+ });
21
+ compressed.relatedSymbols = compressed.relatedSymbols.filter((s) => {
22
+ const tokens = estimateTokens(s.name + s.kind + s.file + (s.callers?.join(',') || ''));
23
+ if (codeUsed + tokens <= codeBudget) {
24
+ codeUsed += tokens;
25
+ return true;
26
+ }
27
+ return false;
28
+ });
29
+ // 3. Memories — truncate to memory budget (minus bug tokens already counted)
30
+ const memBudget = Math.max(0, budget.memory - bugTokens);
31
+ let memUsed = 0;
32
+ compressed.priorMemories = compressed.priorMemories.filter((m) => {
33
+ const tokens = estimateTokens(m.title + m.body);
34
+ if (memUsed + tokens <= memBudget) {
35
+ memUsed += tokens;
36
+ return true;
37
+ }
38
+ return false;
39
+ });
40
+ // 4. Orchestration — truncate to orch budget
41
+ const orchBudget = budget.orch;
42
+ let orchUsed = 0;
43
+ if (compressed.activeSpec) {
44
+ orchUsed += estimateTokens((compressed.activeSpec.title || '') + (compressed.activeSpec.summary || ''));
45
+ }
46
+ compressed.pendingTasks = compressed.pendingTasks.filter((t) => {
47
+ const tokens = estimateTokens(t.title + t.status);
48
+ if (orchUsed + tokens <= orchBudget) {
49
+ orchUsed += tokens;
50
+ return true;
51
+ }
52
+ return false;
53
+ });
54
+ // 5. Meta — repoSummary, suggestedApproach, risks
55
+ const metaBudget = budget.meta;
56
+ if (compressed.repoSummary) {
57
+ compressed.repoSummary = truncateToTokenBudget(compressed.repoSummary, metaBudget);
58
+ }
59
+ return compressed;
60
+ }
61
+ //# sourceMappingURL=compressor.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"compressor.js","sourceRoot":"","sources":["../../src/broker/compressor.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,126 @@
1
+ import { z } from 'zod';
2
+ export declare const StageValues: readonly ["brainstorm", "plan", "implement", "review", "debug", "general"];
3
+ export type Stage = (typeof StageValues)[number];
4
+ export declare const StageSchema: z.ZodEnum<{
5
+ brainstorm: "brainstorm";
6
+ plan: "plan";
7
+ implement: "implement";
8
+ review: "review";
9
+ debug: "debug";
10
+ general: "general";
11
+ }>;
12
+ export declare const RelevantFileSchema: z.ZodObject<{
13
+ path: z.ZodString;
14
+ reason: z.ZodString;
15
+ symbols: z.ZodOptional<z.ZodArray<z.ZodString>>;
16
+ snippet: z.ZodOptional<z.ZodString>;
17
+ }, z.core.$strip>;
18
+ export type RelevantFile = z.infer<typeof RelevantFileSchema>;
19
+ export declare const SymbolInfoSchema: z.ZodObject<{
20
+ name: z.ZodString;
21
+ kind: z.ZodString;
22
+ file: z.ZodString;
23
+ callers: z.ZodOptional<z.ZodArray<z.ZodString>>;
24
+ callees: z.ZodOptional<z.ZodArray<z.ZodString>>;
25
+ }, z.core.$strip>;
26
+ export type SymbolInfo = z.infer<typeof SymbolInfoSchema>;
27
+ export declare const MemoryEntrySchema: z.ZodObject<{
28
+ id: z.ZodOptional<z.ZodNumber>;
29
+ type: z.ZodString;
30
+ title: z.ZodString;
31
+ body: z.ZodString;
32
+ confidence: z.ZodOptional<z.ZodNumber>;
33
+ }, z.core.$strip>;
34
+ export type MemoryEntry = z.infer<typeof MemoryEntrySchema>;
35
+ export declare const TaskSummarySchema: z.ZodObject<{
36
+ id: z.ZodString;
37
+ title: z.ZodString;
38
+ status: z.ZodString;
39
+ }, z.core.$strip>;
40
+ export type TaskSummary = z.infer<typeof TaskSummarySchema>;
41
+ export declare const SpecSummarySchema: z.ZodObject<{
42
+ id: z.ZodOptional<z.ZodString>;
43
+ title: z.ZodString;
44
+ stage: z.ZodOptional<z.ZodString>;
45
+ summary: z.ZodOptional<z.ZodString>;
46
+ }, z.core.$strip>;
47
+ export type SpecSummary = z.infer<typeof SpecSummarySchema>;
48
+ export declare const ContextPackSchema: z.ZodObject<{
49
+ repoSummary: z.ZodOptional<z.ZodString>;
50
+ relevantFiles: z.ZodArray<z.ZodObject<{
51
+ path: z.ZodString;
52
+ reason: z.ZodString;
53
+ symbols: z.ZodOptional<z.ZodArray<z.ZodString>>;
54
+ snippet: z.ZodOptional<z.ZodString>;
55
+ }, z.core.$strip>>;
56
+ relatedSymbols: z.ZodArray<z.ZodObject<{
57
+ name: z.ZodString;
58
+ kind: z.ZodString;
59
+ file: z.ZodString;
60
+ callers: z.ZodOptional<z.ZodArray<z.ZodString>>;
61
+ callees: z.ZodOptional<z.ZodArray<z.ZodString>>;
62
+ }, z.core.$strip>>;
63
+ priorMemories: z.ZodArray<z.ZodObject<{
64
+ id: z.ZodOptional<z.ZodNumber>;
65
+ type: z.ZodString;
66
+ title: z.ZodString;
67
+ body: z.ZodString;
68
+ confidence: z.ZodOptional<z.ZodNumber>;
69
+ }, z.core.$strip>>;
70
+ bugWarnings: z.ZodArray<z.ZodObject<{
71
+ id: z.ZodOptional<z.ZodNumber>;
72
+ type: z.ZodString;
73
+ title: z.ZodString;
74
+ body: z.ZodString;
75
+ confidence: z.ZodOptional<z.ZodNumber>;
76
+ }, z.core.$strip>>;
77
+ currentStage: z.ZodOptional<z.ZodEnum<{
78
+ brainstorm: "brainstorm";
79
+ plan: "plan";
80
+ implement: "implement";
81
+ review: "review";
82
+ debug: "debug";
83
+ general: "general";
84
+ }>>;
85
+ activeSpec: z.ZodOptional<z.ZodObject<{
86
+ id: z.ZodOptional<z.ZodString>;
87
+ title: z.ZodString;
88
+ stage: z.ZodOptional<z.ZodString>;
89
+ summary: z.ZodOptional<z.ZodString>;
90
+ }, z.core.$strip>>;
91
+ pendingTasks: z.ZodArray<z.ZodObject<{
92
+ id: z.ZodString;
93
+ title: z.ZodString;
94
+ status: z.ZodString;
95
+ }, z.core.$strip>>;
96
+ suggestedApproach: z.ZodOptional<z.ZodString>;
97
+ risks: z.ZodArray<z.ZodString>;
98
+ }, z.core.$strip>;
99
+ export type ContextPack = z.infer<typeof ContextPackSchema>;
100
+ export declare const BrokerInputSchema: z.ZodObject<{
101
+ repoRoot: z.ZodString;
102
+ sessionId: z.ZodOptional<z.ZodString>;
103
+ userQuery: z.ZodString;
104
+ stage: z.ZodOptional<z.ZodEnum<{
105
+ brainstorm: "brainstorm";
106
+ plan: "plan";
107
+ implement: "implement";
108
+ review: "review";
109
+ debug: "debug";
110
+ general: "general";
111
+ }>>;
112
+ changedFiles: z.ZodOptional<z.ZodArray<z.ZodString>>;
113
+ currentBranch: z.ZodOptional<z.ZodString>;
114
+ }, z.core.$strip>;
115
+ export type BrokerInput = z.infer<typeof BrokerInputSchema>;
116
+ export declare const TokenBudgetSchema: z.ZodObject<{
117
+ code: z.ZodDefault<z.ZodNumber>;
118
+ memory: z.ZodDefault<z.ZodNumber>;
119
+ orch: z.ZodDefault<z.ZodNumber>;
120
+ meta: z.ZodDefault<z.ZodNumber>;
121
+ }, z.core.$strip>;
122
+ export type TokenBudget = z.infer<typeof TokenBudgetSchema>;
123
+ export declare const DEFAULT_BUDGET: TokenBudget;
124
+ export declare function emptyContextPack(): ContextPack;
125
+ export declare function hasContent(pack: ContextPack): boolean;
126
+ //# sourceMappingURL=context-pack.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"context-pack.d.ts","sourceRoot":"","sources":["../../src/broker/context-pack.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAIxB,eAAO,MAAM,WAAW,4EAOd,CAAC;AAEX,MAAM,MAAM,KAAK,GAAG,CAAC,OAAO,WAAW,CAAC,CAAC,MAAM,CAAC,CAAC;AAEjD,eAAO,MAAM,WAAW;;;;;;;EAAsB,CAAC;AAI/C,eAAO,MAAM,kBAAkB;;;;;iBAK7B,CAAC;AAEH,MAAM,MAAM,YAAY,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,kBAAkB,CAAC,CAAC;AAE9D,eAAO,MAAM,gBAAgB;;;;;;iBAM3B,CAAC;AAEH,MAAM,MAAM,UAAU,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,gBAAgB,CAAC,CAAC;AAE1D,eAAO,MAAM,iBAAiB;;;;;;iBAM5B,CAAC;AAEH,MAAM,MAAM,WAAW,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,iBAAiB,CAAC,CAAC;AAE5D,eAAO,MAAM,iBAAiB;;;;iBAI5B,CAAC;AAEH,MAAM,MAAM,WAAW,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,iBAAiB,CAAC,CAAC;AAE5D,eAAO,MAAM,iBAAiB;;;;;iBAK5B,CAAC;AAEH,MAAM,MAAM,WAAW,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,iBAAiB,CAAC,CAAC;AAE5D,eAAO,MAAM,iBAAiB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;iBAkB5B,CAAC;AAEH,MAAM,MAAM,WAAW,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,iBAAiB,CAAC,CAAC;AAI5D,eAAO,MAAM,iBAAiB;;;;;;;;;;;;;;iBAO5B,CAAC;AAEH,MAAM,MAAM,WAAW,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,iBAAiB,CAAC,CAAC;AAI5D,eAAO,MAAM,iBAAiB;;;;;iBAK5B,CAAC;AAEH,MAAM,MAAM,WAAW,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,iBAAiB,CAAC,CAAC;AAE5D,eAAO,MAAM,cAAc,EAAE,WAK5B,CAAC;AAIF,wBAAgB,gBAAgB,IAAI,WAAW,CAS9C;AAID,wBAAgB,UAAU,CAAC,IAAI,EAAE,WAAW,GAAG,OAAO,CAUrD"}