cmdr-agent 2.2.0 → 2.4.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (82) hide show
  1. package/dist/package.json +1 -1
  2. package/dist/src/cli/commands.js +1 -1
  3. package/dist/src/cli/commands.js.map +1 -1
  4. package/dist/src/cli/ink/App.d.ts +2 -0
  5. package/dist/src/cli/ink/App.d.ts.map +1 -1
  6. package/dist/src/cli/ink/App.js +56 -7
  7. package/dist/src/cli/ink/App.js.map +1 -1
  8. package/dist/src/cli/repl.d.ts.map +1 -1
  9. package/dist/src/cli/repl.js +91 -1
  10. package/dist/src/cli/repl.js.map +1 -1
  11. package/dist/src/config/mcp-config.d.ts +41 -0
  12. package/dist/src/config/mcp-config.d.ts.map +1 -0
  13. package/dist/src/config/mcp-config.js +55 -0
  14. package/dist/src/config/mcp-config.js.map +1 -0
  15. package/dist/src/config/mcp-registry.d.ts +45 -0
  16. package/dist/src/config/mcp-registry.d.ts.map +1 -0
  17. package/dist/src/config/mcp-registry.js +156 -0
  18. package/dist/src/config/mcp-registry.js.map +1 -0
  19. package/dist/src/config/schema.d.ts +8 -8
  20. package/dist/src/core/agent-runner.d.ts +4 -0
  21. package/dist/src/core/agent-runner.d.ts.map +1 -1
  22. package/dist/src/core/agent-runner.js +60 -1
  23. package/dist/src/core/agent-runner.js.map +1 -1
  24. package/dist/src/core/agent.d.ts +4 -0
  25. package/dist/src/core/agent.d.ts.map +1 -1
  26. package/dist/src/core/agent.js +6 -0
  27. package/dist/src/core/agent.js.map +1 -1
  28. package/dist/src/core/graph-context.d.ts +83 -0
  29. package/dist/src/core/graph-context.d.ts.map +1 -0
  30. package/dist/src/core/graph-context.js +370 -0
  31. package/dist/src/core/graph-context.js.map +1 -0
  32. package/dist/src/core/hooks.d.ts +61 -0
  33. package/dist/src/core/hooks.d.ts.map +1 -0
  34. package/dist/src/core/hooks.js +140 -0
  35. package/dist/src/core/hooks.js.map +1 -0
  36. package/dist/src/core/intent.d.ts.map +1 -1
  37. package/dist/src/core/intent.js +3 -0
  38. package/dist/src/core/intent.js.map +1 -1
  39. package/dist/src/core/permissions.d.ts +43 -0
  40. package/dist/src/core/permissions.d.ts.map +1 -1
  41. package/dist/src/core/permissions.js +108 -0
  42. package/dist/src/core/permissions.js.map +1 -1
  43. package/dist/src/core/presets.d.ts.map +1 -1
  44. package/dist/src/core/presets.js +6 -2
  45. package/dist/src/core/presets.js.map +1 -1
  46. package/dist/src/core/types.d.ts +7 -0
  47. package/dist/src/core/types.d.ts.map +1 -1
  48. package/dist/src/tools/built-in/bash.d.ts +1 -1
  49. package/dist/src/tools/built-in/cron-tools.d.ts +19 -0
  50. package/dist/src/tools/built-in/cron-tools.d.ts.map +1 -0
  51. package/dist/src/tools/built-in/cron-tools.js +86 -0
  52. package/dist/src/tools/built-in/cron-tools.js.map +1 -0
  53. package/dist/src/tools/built-in/graph-tools.d.ts +31 -0
  54. package/dist/src/tools/built-in/graph-tools.d.ts.map +1 -0
  55. package/dist/src/tools/built-in/graph-tools.js +103 -0
  56. package/dist/src/tools/built-in/graph-tools.js.map +1 -0
  57. package/dist/src/tools/built-in/index.d.ts +8 -1
  58. package/dist/src/tools/built-in/index.d.ts.map +1 -1
  59. package/dist/src/tools/built-in/index.js +15 -2
  60. package/dist/src/tools/built-in/index.js.map +1 -1
  61. package/dist/src/tools/built-in/mcp-resource-tools.d.ts +16 -0
  62. package/dist/src/tools/built-in/mcp-resource-tools.d.ts.map +1 -0
  63. package/dist/src/tools/built-in/mcp-resource-tools.js +73 -0
  64. package/dist/src/tools/built-in/mcp-resource-tools.js.map +1 -0
  65. package/dist/src/tools/built-in/plan-tools.d.ts +13 -0
  66. package/dist/src/tools/built-in/plan-tools.d.ts.map +1 -0
  67. package/dist/src/tools/built-in/plan-tools.js +42 -0
  68. package/dist/src/tools/built-in/plan-tools.js.map +1 -0
  69. package/dist/src/tools/built-in/task-tools.d.ts +22 -0
  70. package/dist/src/tools/built-in/task-tools.d.ts.map +1 -0
  71. package/dist/src/tools/built-in/task-tools.js +113 -0
  72. package/dist/src/tools/built-in/task-tools.js.map +1 -0
  73. package/dist/src/tools/built-in/todo-tool.d.ts +21 -0
  74. package/dist/src/tools/built-in/todo-tool.d.ts.map +1 -0
  75. package/dist/src/tools/built-in/todo-tool.js +52 -0
  76. package/dist/src/tools/built-in/todo-tool.js.map +1 -0
  77. package/dist/src/tools/built-in/web-fetch.d.ts +1 -1
  78. package/dist/src/tools/built-in/web-search.d.ts +9 -0
  79. package/dist/src/tools/built-in/web-search.d.ts.map +1 -0
  80. package/dist/src/tools/built-in/web-search.js +89 -0
  81. package/dist/src/tools/built-in/web-search.js.map +1 -0
  82. package/package.json +1 -1
@@ -0,0 +1,370 @@
1
+ /**
2
+ * GraphContextProvider — token-budgeted, heuristic-gated context injection
3
+ * powered by code-review-graph's MCP tools.
4
+ *
5
+ * This is NOT injected into the system prompt. It prepends a structured
6
+ * context message to the conversation when heuristics indicate the graph
7
+ * can provide useful grounding for the current turn.
8
+ *
9
+ * Design rules:
10
+ * - Context injection = initial grounding (bounded, passive)
11
+ * - Tool calls = deep analysis mid-reasoning (on-demand)
12
+ * - Never duplicates: if context was injected, tools drill deeper
13
+ */
14
+ import { DEFAULT_GRAPH_CONFIG } from '../config/mcp-config.js';
15
+ import { execSync } from 'node:child_process';
16
+ // ---------------------------------------------------------------------------
17
+ // Graph usage keywords — triggers graph context when found in user message
18
+ // ---------------------------------------------------------------------------
19
+ const CHANGE_KEYWORDS = /\b(review|refactor|impact|blast.?radius|affected|depends|dependency|dependencies|callers?|callees?|imports?|test.?coverage|dead.?code|what.?calls|who.?uses|trace)\b/gi;
20
+ const FILE_PATH_PATTERN = /(?:^|\s)([\w./-]+\.(?:ts|tsx|js|jsx|py|rs|go|java|c|cpp|h|rb|kt|swift|php|vue|svelte|scala|cs|dart|lua|pl|r|sol))\b/gi;
21
+ // Symbol-like identifiers: camelCase, PascalCase, or snake_case (min 4 chars, must have case change or underscore)
22
+ const SYMBOL_PATTERN = /\b([a-z][a-zA-Z0-9]{3,}(?:[A-Z][a-zA-Z0-9]*)+|[A-Z][a-zA-Z0-9]{3,}(?:[A-Z][a-z][a-zA-Z0-9]*)+|[a-z][a-z0-9]*(?:_[a-z0-9]+)+)\b/g;
23
+ // ---------------------------------------------------------------------------
24
+ // GraphContextProvider
25
+ // ---------------------------------------------------------------------------
26
+ export class GraphContextProvider {
27
+ mcpClient = null;
28
+ projectRoot;
29
+ config;
30
+ graphAvailable = false;
31
+ buildReady = false;
32
+ lastKnownSha = null;
33
+ turnLogs = [];
34
+ loggedUnavailable = false;
35
+ constructor(projectRoot, config) {
36
+ this.projectRoot = projectRoot;
37
+ this.config = { ...DEFAULT_GRAPH_CONFIG, ...config };
38
+ }
39
+ /**
40
+ * Initialize with an MCP client that has a connected 'crg' server.
41
+ */
42
+ setMcpClient(client) {
43
+ this.mcpClient = client;
44
+ this.graphAvailable = true;
45
+ }
46
+ setGraphAvailable(available) {
47
+ this.graphAvailable = available;
48
+ }
49
+ /** Mark the graph as ready (build complete). */
50
+ setBuildReady(ready) {
51
+ this.buildReady = ready;
52
+ }
53
+ isAvailable() {
54
+ return this.graphAvailable && this.buildReady;
55
+ }
56
+ // ─── Heuristic trigger ──────────────────────────────────────
57
+ /**
58
+ * Determine if graph context should be injected for this turn.
59
+ * Returns false for conversational intents or messages without
60
+ * concrete code references.
61
+ */
62
+ shouldUseGraph(intent, userMessage) {
63
+ if (!this.graphAvailable || !this.buildReady)
64
+ return false;
65
+ if (intent === 'conversational')
66
+ return false;
67
+ // Weighted scoring — avoids naive boolean OR
68
+ // fileRef=2, symbol=2, keyword=1. Threshold: score >= 2
69
+ let score = 0;
70
+ // Reset regex lastIndex (global flag)
71
+ FILE_PATH_PATTERN.lastIndex = 0;
72
+ CHANGE_KEYWORDS.lastIndex = 0;
73
+ SYMBOL_PATTERN.lastIndex = 0;
74
+ const fileMatches = userMessage.match(FILE_PATH_PATTERN);
75
+ if (fileMatches)
76
+ score += fileMatches.length * 2;
77
+ const symbolMatches = userMessage.match(SYMBOL_PATTERN);
78
+ if (symbolMatches)
79
+ score += Math.min(symbolMatches.length, 3) * 2;
80
+ const keywordMatches = userMessage.match(CHANGE_KEYWORDS);
81
+ if (keywordMatches)
82
+ score += keywordMatches.length;
83
+ return score >= 2;
84
+ }
85
+ // ─── Freshness check ───────────────────────────────────────
86
+ /**
87
+ * Check if the graph is stale (files changed outside cmdr).
88
+ * Returns true if an incremental update was triggered.
89
+ */
90
+ async checkFreshness() {
91
+ try {
92
+ const currentSha = execSync('git rev-parse HEAD', {
93
+ cwd: this.projectRoot,
94
+ stdio: ['pipe', 'pipe', 'pipe'],
95
+ timeout: 5000,
96
+ }).toString().trim();
97
+ if (this.lastKnownSha && this.lastKnownSha !== currentSha) {
98
+ // Graph is stale — trigger incremental update
99
+ await this.callMcp('build_or_update_graph_tool', {
100
+ full_rebuild: false,
101
+ repo_root: this.projectRoot,
102
+ });
103
+ this.lastKnownSha = currentSha;
104
+ return 'stale';
105
+ }
106
+ this.lastKnownSha = currentSha;
107
+ return 'fresh';
108
+ }
109
+ catch {
110
+ return 'fresh'; // Can't check — assume fresh
111
+ }
112
+ }
113
+ // ─── Context generation ─────────────────────────────────────
114
+ /**
115
+ * Generate a graph context message for the current turn.
116
+ * Returns null if graph is unavailable, nothing relevant found,
117
+ * or an error occurs (graceful internal fallback).
118
+ */
119
+ async getContext(intent, userMessage) {
120
+ const start = Date.now();
121
+ if (!this.shouldUseGraph(intent, userMessage)) {
122
+ this.logTurn({ used: false, reason: 'heuristic_skip', files: 0, estimatedTokens: 0, freshness: 'skipped', latencyMs: 0 });
123
+ return null;
124
+ }
125
+ try {
126
+ // Freshness check
127
+ const freshness = await this.checkFreshness();
128
+ // Determine query strategy based on intent
129
+ let contextText = null;
130
+ if (intent === 'actionable') {
131
+ contextText = await this.getImpactContext(userMessage);
132
+ }
133
+ else if (intent === 'exploratory') {
134
+ contextText = await this.getExploratoryContext(userMessage);
135
+ }
136
+ if (!contextText) {
137
+ this.logTurn({ used: false, reason: 'no_results', files: 0, estimatedTokens: 0, freshness, latencyMs: Date.now() - start });
138
+ return null;
139
+ }
140
+ // Token budget enforcement — rough estimate: 4 chars per token
141
+ const estimatedTokens = Math.ceil(contextText.length / 4);
142
+ if (estimatedTokens > this.config.maxTokens) {
143
+ // Truncate to budget
144
+ const maxChars = this.config.maxTokens * 4;
145
+ contextText = contextText.slice(0, maxChars) + '\n\n[Graph context truncated to token budget]';
146
+ }
147
+ const fileCount = (contextText.match(/📄|file_path/g) || []).length || 1;
148
+ this.logTurn({
149
+ used: true,
150
+ reason: intent,
151
+ files: fileCount,
152
+ estimatedTokens: Math.ceil(contextText.length / 4),
153
+ freshness,
154
+ latencyMs: Date.now() - start,
155
+ });
156
+ return {
157
+ role: 'user',
158
+ content: [{ type: 'text', text: `[Graph Context]\n${contextText}` }],
159
+ isMeta: true,
160
+ };
161
+ }
162
+ catch (err) {
163
+ // Internal fallback — never crash the turn
164
+ const reason = err instanceof Error ? err.message : String(err);
165
+ if (!this.loggedUnavailable) {
166
+ console.error(`[graph] query failed: ${reason}, falling back`);
167
+ this.loggedUnavailable = true;
168
+ }
169
+ this.logTurn({ used: false, reason: `error: ${reason}`, files: 0, estimatedTokens: 0, freshness: 'skipped', latencyMs: Date.now() - start });
170
+ return null;
171
+ }
172
+ }
173
+ // ─── Impact context (actionable intent) ─────────────────────
174
+ async getImpactContext(userMessage) {
175
+ // Extract file paths from message
176
+ const fileRefs = this.extractFileRefs(userMessage);
177
+ // Get blast radius — either from mentioned files or auto-detected changed files
178
+ const params = {
179
+ max_depth: this.config.maxDepth,
180
+ repo_root: this.projectRoot,
181
+ base: this.config.base,
182
+ };
183
+ if (fileRefs.length > 0) {
184
+ params.changed_files = fileRefs;
185
+ }
186
+ const result = await this.callMcp('get_impact_radius_tool', params);
187
+ if (!result)
188
+ return null;
189
+ return this.formatImpactResult(result);
190
+ }
191
+ // ─── Exploratory context ────────────────────────────────────
192
+ async getExploratoryContext(userMessage) {
193
+ // Try to extract a query target from the message
194
+ const fileRefs = this.extractFileRefs(userMessage);
195
+ const callMatch = userMessage.match(/(?:what\s+calls|who\s+uses|callers?\s+of|trace)\s+[`"]?(\w+)[`"]?/i);
196
+ if (callMatch) {
197
+ // Caller query
198
+ const result = await this.callMcp('query_graph_tool', {
199
+ pattern: 'callers_of',
200
+ target: callMatch[1],
201
+ repo_root: this.projectRoot,
202
+ });
203
+ if (result)
204
+ return this.formatQueryResult(result, 'callers_of', callMatch[1]);
205
+ }
206
+ if (fileRefs.length > 0) {
207
+ // File summary
208
+ const result = await this.callMcp('query_graph_tool', {
209
+ pattern: 'file_summary',
210
+ target: fileRefs[0],
211
+ repo_root: this.projectRoot,
212
+ });
213
+ if (result)
214
+ return this.formatQueryResult(result, 'file_summary', fileRefs[0]);
215
+ }
216
+ // Fall back to impact radius with auto-detection
217
+ const result = await this.callMcp('get_impact_radius_tool', {
218
+ max_depth: this.config.maxDepth,
219
+ repo_root: this.projectRoot,
220
+ base: this.config.base,
221
+ });
222
+ if (result)
223
+ return this.formatImpactResult(result);
224
+ return null;
225
+ }
226
+ // ─── MCP call wrapper ──────────────────────────────────────
227
+ async callMcp(toolName, input) {
228
+ if (!this.mcpClient)
229
+ return null;
230
+ const timeoutMs = 5000;
231
+ const result = await Promise.race([
232
+ this.mcpClient.callTool('crg', toolName, input),
233
+ new Promise(resolve => setTimeout(() => resolve(null), timeoutMs)),
234
+ ]);
235
+ if (!result || ('isError' in result && result.isError))
236
+ return null;
237
+ try {
238
+ const data = typeof result.data === 'string' ? JSON.parse(result.data) : result.data;
239
+ return data;
240
+ }
241
+ catch {
242
+ return null;
243
+ }
244
+ }
245
+ // ─── Formatting helpers ─────────────────────────────────────
246
+ formatImpactResult(data) {
247
+ const lines = ['## Blast Radius Analysis'];
248
+ const impactedFiles = data.impacted_files || [];
249
+ const changedNodes = data.changed_nodes || [];
250
+ const impactedNodes = data.impacted_nodes || [];
251
+ if (impactedFiles.length === 0 && changedNodes.length === 0) {
252
+ return ''; // Nothing to report
253
+ }
254
+ // Changed nodes summary
255
+ if (changedNodes.length > 0) {
256
+ lines.push(`\n### Changed (${changedNodes.length} nodes)`);
257
+ for (const node of changedNodes.slice(0, this.config.maxNodes)) {
258
+ const name = node.name || node.qualified_name || 'unknown';
259
+ const kind = node.kind || '';
260
+ const file = node.file_path || '';
261
+ lines.push(`- ${kind} \`${name}\` in ${file}`);
262
+ }
263
+ }
264
+ // Impacted files
265
+ if (impactedFiles.length > 0) {
266
+ lines.push(`\n### Impacted Files (${impactedFiles.length})`);
267
+ for (const file of impactedFiles.slice(0, this.config.maxFiles)) {
268
+ lines.push(`- 📄 ${file}`);
269
+ }
270
+ if (impactedFiles.length > this.config.maxFiles) {
271
+ lines.push(`- ... and ${impactedFiles.length - this.config.maxFiles} more`);
272
+ }
273
+ }
274
+ // Impacted nodes (brief)
275
+ if (impactedNodes.length > 0) {
276
+ lines.push(`\n### Impacted Nodes (${impactedNodes.length})`);
277
+ for (const node of impactedNodes.slice(0, this.config.maxNodes)) {
278
+ const name = node.name || node.qualified_name || 'unknown';
279
+ const kind = node.kind || '';
280
+ lines.push(`- ${kind} \`${name}\``);
281
+ }
282
+ if (impactedNodes.length > this.config.maxNodes) {
283
+ lines.push(`- ... and ${impactedNodes.length - this.config.maxNodes} more`);
284
+ }
285
+ }
286
+ if (data.truncated) {
287
+ lines.push(`\n> ⚠️ Results truncated. Use graph_impact tool for full analysis.`);
288
+ }
289
+ return lines.join('\n');
290
+ }
291
+ formatQueryResult(data, pattern, target) {
292
+ const lines = [`## Graph Query: ${pattern}(${target})`];
293
+ const nodes = data.nodes || [];
294
+ const results = data.results || nodes;
295
+ if (results.length === 0) {
296
+ return ''; // Nothing to report
297
+ }
298
+ for (const node of results.slice(0, this.config.maxNodes)) {
299
+ const name = node.name || node.qualified_name || 'unknown';
300
+ const kind = node.kind || '';
301
+ const file = node.file_path || '';
302
+ const line = node.line_start ? `:${node.line_start}` : '';
303
+ lines.push(`- ${kind} \`${name}\` in ${file}${line}`);
304
+ }
305
+ if (results.length > this.config.maxNodes) {
306
+ lines.push(`- ... and ${results.length - this.config.maxNodes} more. Use graph_query tool to explore.`);
307
+ }
308
+ return lines.join('\n');
309
+ }
310
+ // ─── Utility ────────────────────────────────────────────────
311
+ extractFileRefs(message) {
312
+ const matches = message.match(new RegExp(FILE_PATH_PATTERN.source, 'gi'));
313
+ return matches ? [...new Set(matches.map(m => m.trim()))] : [];
314
+ }
315
+ logTurn(entry) {
316
+ this.turnLogs.push(entry);
317
+ // Keep last 100 entries
318
+ if (this.turnLogs.length > 100) {
319
+ this.turnLogs = this.turnLogs.slice(-100);
320
+ }
321
+ }
322
+ // ─── Public accessors ───────────────────────────────────────
323
+ getLastLog() {
324
+ return this.turnLogs[this.turnLogs.length - 1];
325
+ }
326
+ getStats() {
327
+ const graphHits = this.turnLogs.filter(l => l.used).length;
328
+ const totalFiles = this.turnLogs.reduce((sum, l) => sum + l.files, 0);
329
+ return { totalQueries: this.turnLogs.length, graphHits, totalFiles };
330
+ }
331
+ /**
332
+ * Trigger an incremental graph update (call after file writes).
333
+ * Debounce externally — this is the raw update call.
334
+ */
335
+ async triggerIncrementalUpdate() {
336
+ if (!this.graphAvailable || !this.mcpClient)
337
+ return;
338
+ try {
339
+ await this.callMcp('build_or_update_graph_tool', {
340
+ full_rebuild: false,
341
+ repo_root: this.projectRoot,
342
+ });
343
+ }
344
+ catch {
345
+ // Non-critical — log and continue
346
+ }
347
+ }
348
+ /**
349
+ * Build the graph for the first time (or full rebuild).
350
+ */
351
+ async buildGraph() {
352
+ if (!this.mcpClient)
353
+ return false;
354
+ try {
355
+ const result = await this.callMcp('build_or_update_graph_tool', {
356
+ full_rebuild: false,
357
+ repo_root: this.projectRoot,
358
+ });
359
+ if (result !== null) {
360
+ this.buildReady = true;
361
+ return true;
362
+ }
363
+ return false;
364
+ }
365
+ catch {
366
+ return false;
367
+ }
368
+ }
369
+ }
370
+ //# sourceMappingURL=graph-context.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"graph-context.js","sourceRoot":"","sources":["../../../src/core/graph-context.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,61 @@
1
+ /**
2
+ * Hooks — shell-based pre/post hooks for tool and command lifecycle.
3
+ *
4
+ * Hooks are defined in .cmdr.toml under [hooks]:
5
+ * [hooks]
6
+ * "pre:tool:bash" = "echo 'About to run bash tool'"
7
+ * "post:tool:file_write" = "./scripts/lint-changed.sh"
8
+ * "pre:command:commit" = "npm test"
9
+ * "session:end" = "./scripts/cleanup.sh"
10
+ *
11
+ * Hook types:
12
+ * pre:tool:<name> — runs before a tool executes (can block on non-zero exit)
13
+ * post:tool:<name> — runs after a tool completes
14
+ * pre:command:<name> — runs before a slash command
15
+ * post:command:<name> — runs after a slash command
16
+ * session:start — runs when session begins
17
+ * session:end — runs when session ends
18
+ *
19
+ * Hooks receive context via environment variables:
20
+ * CMDR_HOOK_TYPE, CMDR_TOOL_NAME, CMDR_TOOL_INPUT (JSON), CMDR_CWD
21
+ */
22
+ export interface HookConfig {
23
+ [pattern: string]: string;
24
+ }
25
+ export interface HookResult {
26
+ success: boolean;
27
+ output?: string;
28
+ error?: string;
29
+ }
30
+ export declare class HookManager {
31
+ private hooks;
32
+ private cwd;
33
+ constructor(hookConfig?: HookConfig, cwd?: string);
34
+ /** Register hooks from config. */
35
+ loadConfig(config: HookConfig): void;
36
+ /** Find matching hooks for a given event pattern. */
37
+ private findHooks;
38
+ /** Execute a hook command. Returns result with success/failure info. */
39
+ private executeHook;
40
+ /**
41
+ * Run pre-tool hooks. Returns false if a hook blocks execution (non-zero exit).
42
+ */
43
+ runPreTool(toolName: string, input: Record<string, unknown>): Promise<{
44
+ allowed: boolean;
45
+ output?: string;
46
+ }>;
47
+ /** Run post-tool hooks (informational — cannot block). */
48
+ runPostTool(toolName: string, input: Record<string, unknown>, success: boolean): Promise<void>;
49
+ /** Run session lifecycle hooks. */
50
+ runSessionHook(type: 'session:start' | 'session:end'): Promise<void>;
51
+ /** Wire hooks into the EventBus for automatic firing. */
52
+ wireEventBus(): void;
53
+ /** Get the number of registered hooks. */
54
+ get count(): number;
55
+ /** List all registered hook patterns. */
56
+ list(): Array<{
57
+ pattern: string;
58
+ command: string;
59
+ }>;
60
+ }
61
+ //# sourceMappingURL=hooks.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"hooks.d.ts","sourceRoot":"","sources":["../../../src/core/hooks.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;GAoBG;AAKH,MAAM,WAAW,UAAU;IACzB,CAAC,OAAO,EAAE,MAAM,GAAG,MAAM,CAAA;CAC1B;AAED,MAAM,WAAW,UAAU;IACzB,OAAO,EAAE,OAAO,CAAA;IAChB,MAAM,CAAC,EAAE,MAAM,CAAA;IACf,KAAK,CAAC,EAAE,MAAM,CAAA;CACf;AAID,qBAAa,WAAW;IACtB,OAAO,CAAC,KAAK,CAA4B;IACzC,OAAO,CAAC,GAAG,CAAQ;gBAEP,UAAU,GAAE,UAAe,EAAE,GAAG,GAAE,MAAsB;IAOpE,kCAAkC;IAClC,UAAU,CAAC,MAAM,EAAE,UAAU,GAAG,IAAI;IAMpC,qDAAqD;IACrD,OAAO,CAAC,SAAS;IAUjB,wEAAwE;IACxE,OAAO,CAAC,WAAW;IAmBnB;;OAEG;IACG,UAAU,CACd,QAAQ,EAAE,MAAM,EAChB,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAC7B,OAAO,CAAC;QAAE,OAAO,EAAE,OAAO,CAAC;QAAC,MAAM,CAAC,EAAE,MAAM,CAAA;KAAE,CAAC;IAqBjD,0DAA0D;IACpD,WAAW,CACf,QAAQ,EAAE,MAAM,EAChB,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAC9B,OAAO,EAAE,OAAO,GACf,OAAO,CAAC,IAAI,CAAC;IAiBhB,mCAAmC;IAC7B,cAAc,CAAC,IAAI,EAAE,eAAe,GAAG,aAAa,GAAG,OAAO,CAAC,IAAI,CAAC;IAc1E,yDAAyD;IACzD,YAAY,IAAI,IAAI;IAepB,0CAA0C;IAC1C,IAAI,KAAK,IAAI,MAAM,CAElB;IAED,yCAAyC;IACzC,IAAI,IAAI,KAAK,CAAC;QAAE,OAAO,EAAE,MAAM,CAAC;QAAC,OAAO,EAAE,MAAM,CAAA;KAAE,CAAC;CAGpD"}
@@ -0,0 +1,140 @@
1
+ /**
2
+ * Hooks — shell-based pre/post hooks for tool and command lifecycle.
3
+ *
4
+ * Hooks are defined in .cmdr.toml under [hooks]:
5
+ * [hooks]
6
+ * "pre:tool:bash" = "echo 'About to run bash tool'"
7
+ * "post:tool:file_write" = "./scripts/lint-changed.sh"
8
+ * "pre:command:commit" = "npm test"
9
+ * "session:end" = "./scripts/cleanup.sh"
10
+ *
11
+ * Hook types:
12
+ * pre:tool:<name> — runs before a tool executes (can block on non-zero exit)
13
+ * post:tool:<name> — runs after a tool completes
14
+ * pre:command:<name> — runs before a slash command
15
+ * post:command:<name> — runs after a slash command
16
+ * session:start — runs when session begins
17
+ * session:end — runs when session ends
18
+ *
19
+ * Hooks receive context via environment variables:
20
+ * CMDR_HOOK_TYPE, CMDR_TOOL_NAME, CMDR_TOOL_INPUT (JSON), CMDR_CWD
21
+ */
22
+ import { execSync } from 'node:child_process';
23
+ import { globalEventBus } from './event-bus.js';
24
+ const HOOK_TIMEOUT_MS = 30_000;
25
+ export class HookManager {
26
+ hooks = new Map();
27
+ cwd;
28
+ constructor(hookConfig = {}, cwd = process.cwd()) {
29
+ this.cwd = cwd;
30
+ for (const [pattern, command] of Object.entries(hookConfig)) {
31
+ this.hooks.set(pattern, command);
32
+ }
33
+ }
34
+ /** Register hooks from config. */
35
+ loadConfig(config) {
36
+ for (const [pattern, command] of Object.entries(config)) {
37
+ this.hooks.set(pattern, command);
38
+ }
39
+ }
40
+ /** Find matching hooks for a given event pattern. */
41
+ findHooks(pattern) {
42
+ const matches = [];
43
+ for (const [hookPattern, command] of this.hooks) {
44
+ if (hookPattern === pattern) {
45
+ matches.push({ pattern: hookPattern, command });
46
+ }
47
+ }
48
+ return matches;
49
+ }
50
+ /** Execute a hook command. Returns result with success/failure info. */
51
+ executeHook(command, env) {
52
+ try {
53
+ const output = execSync(command, {
54
+ cwd: this.cwd,
55
+ timeout: HOOK_TIMEOUT_MS,
56
+ stdio: ['pipe', 'pipe', 'pipe'],
57
+ env: { ...process.env, ...env },
58
+ }).toString().trim();
59
+ return { success: true, output };
60
+ }
61
+ catch (err) {
62
+ const message = err instanceof Error ? err.message : String(err);
63
+ return { success: false, error: message };
64
+ }
65
+ }
66
+ /**
67
+ * Run pre-tool hooks. Returns false if a hook blocks execution (non-zero exit).
68
+ */
69
+ async runPreTool(toolName, input) {
70
+ const hooks = this.findHooks(`pre:tool:${toolName}`);
71
+ if (hooks.length === 0)
72
+ return { allowed: true };
73
+ const env = {
74
+ CMDR_HOOK_TYPE: 'pre:tool',
75
+ CMDR_TOOL_NAME: toolName,
76
+ CMDR_TOOL_INPUT: JSON.stringify(input),
77
+ CMDR_CWD: this.cwd,
78
+ };
79
+ for (const hook of hooks) {
80
+ const result = this.executeHook(hook.command, env);
81
+ if (!result.success) {
82
+ return { allowed: false, output: result.error };
83
+ }
84
+ }
85
+ return { allowed: true };
86
+ }
87
+ /** Run post-tool hooks (informational — cannot block). */
88
+ async runPostTool(toolName, input, success) {
89
+ const hooks = this.findHooks(`post:tool:${toolName}`);
90
+ if (hooks.length === 0)
91
+ return;
92
+ const env = {
93
+ CMDR_HOOK_TYPE: 'post:tool',
94
+ CMDR_TOOL_NAME: toolName,
95
+ CMDR_TOOL_INPUT: JSON.stringify(input),
96
+ CMDR_TOOL_SUCCESS: String(success),
97
+ CMDR_CWD: this.cwd,
98
+ };
99
+ for (const hook of hooks) {
100
+ this.executeHook(hook.command, env);
101
+ }
102
+ }
103
+ /** Run session lifecycle hooks. */
104
+ async runSessionHook(type) {
105
+ const hooks = this.findHooks(type);
106
+ if (hooks.length === 0)
107
+ return;
108
+ const env = {
109
+ CMDR_HOOK_TYPE: type,
110
+ CMDR_CWD: this.cwd,
111
+ };
112
+ for (const hook of hooks) {
113
+ this.executeHook(hook.command, env);
114
+ }
115
+ }
116
+ /** Wire hooks into the EventBus for automatic firing. */
117
+ wireEventBus() {
118
+ globalEventBus.on('tool:before', async (data) => {
119
+ await this.runPreTool(data.name, data.input);
120
+ });
121
+ globalEventBus.on('tool:after', async (data) => {
122
+ await this.runPostTool(data.name, {}, !data.result.isError);
123
+ });
124
+ globalEventBus.on('session:start', async () => {
125
+ await this.runSessionHook('session:start');
126
+ });
127
+ globalEventBus.on('session:end', async () => {
128
+ await this.runSessionHook('session:end');
129
+ });
130
+ }
131
+ /** Get the number of registered hooks. */
132
+ get count() {
133
+ return this.hooks.size;
134
+ }
135
+ /** List all registered hook patterns. */
136
+ list() {
137
+ return Array.from(this.hooks.entries()).map(([pattern, command]) => ({ pattern, command }));
138
+ }
139
+ }
140
+ //# sourceMappingURL=hooks.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"hooks.js","sourceRoot":"","sources":["../../../src/core/hooks.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"intent.d.ts","sourceRoot":"","sources":["../../../src/core/intent.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;GAYG;AAEH,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,YAAY,CAAA;AAE5C,MAAM,MAAM,UAAU,GAAG,gBAAgB,GAAG,aAAa,GAAG,YAAY,CAAA;AA+BxE;;;;;;;GAOG;AACH,wBAAgB,cAAc,CAAC,OAAO,EAAE,MAAM,GAAG,UAAU,CA8B1D;AAQD,wBAAgB,iBAAiB,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAE1D;AAED,eAAO,MAAM,iBAAiB,+RAI+B,CAAA;AAE7D;;;;;;GAMG;AACH,wBAAgB,mBAAmB,CACjC,MAAM,EAAE,UAAU,EAClB,QAAQ,EAAE,SAAS,UAAU,EAAE,GAC9B,UAAU,EAAE,CASd"}
1
+ {"version":3,"file":"intent.d.ts","sourceRoot":"","sources":["../../../src/core/intent.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;GAYG;AAEH,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,YAAY,CAAA;AAE5C,MAAM,MAAM,UAAU,GAAG,gBAAgB,GAAG,aAAa,GAAG,YAAY,CAAA;AAkCxE;;;;;;;GAOG;AACH,wBAAgB,cAAc,CAAC,OAAO,EAAE,MAAM,GAAG,UAAU,CA8B1D;AAQD,wBAAgB,iBAAiB,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAE1D;AAED,eAAO,MAAM,iBAAiB,+RAI+B,CAAA;AAE7D;;;;;;GAMG;AACH,wBAAgB,mBAAmB,CACjC,MAAM,EAAE,UAAU,EAClB,QAAQ,EAAE,SAAS,UAAU,EAAE,GAC9B,UAAU,EAAE,CASd"}
@@ -21,6 +21,9 @@ const EXPLORATORY_TOOLS = new Set([
21
21
  'git_diff',
22
22
  'git_log',
23
23
  'think',
24
+ 'graph_impact',
25
+ 'graph_query',
26
+ 'graph_review',
24
27
  ]);
25
28
  // ---------------------------------------------------------------------------
26
29
  // Intent detection heuristics
@@ -1 +1 @@
1
- {"version":3,"file":"intent.js","sourceRoot":"","sources":["../../../src/core/intent.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;GAYG;AAMH,8EAA8E;AAC9E,wCAAwC;AACxC,8EAA8E;AAE9E,MAAM,iBAAiB,GAAG,IAAI,GAAG,CAAC;IAChC,WAAW;IACX,MAAM;IACN,MAAM;IACN,UAAU;IACV,SAAS;IACT,OAAO;CACR,CAAC,CAAA;AAEF,8EAA8E;AAC9E,8BAA8B;AAC9B,8EAA8E;AAE9E,4EAA4E;AAC5E,MAAM,cAAc,GAAG,6MAA6M,CAAA;AAEpO,wEAAwE;AACxE,MAAM,eAAe,GAAG,sLAAsL,CAAA;AAE9M,oEAAoE;AACpE,MAAM,iBAAiB,GAAG,gKAAgK,CAAA;AAE1L,6EAA6E;AAC7E,MAAM,aAAa,GAAG,iHAAiH,CAAA;AAEvI;;;;;;;GAOG;AACH,MAAM,UAAU,cAAc,CAAC,OAAe;IAC5C,MAAM,OAAO,GAAG,OAAO,CAAC,IAAI,EAAE,CAAA;IAE9B,iDAAiD;IACjD,IAAI,OAAO,CAAC,MAAM,KAAK,CAAC;QAAE,OAAO,gBAAgB,CAAA;IACjD,IAAI,iBAAiB,CAAC,IAAI,CAAC,OAAO,CAAC;QAAE,OAAO,gBAAgB,CAAA;IAC5D,IAAI,aAAa,CAAC,IAAI,CAAC,OAAO,CAAC;QAAE,OAAO,gBAAgB,CAAA;IAExD,8EAA8E;IAC9E,IAAI,OAAO,CAAC,MAAM,GAAG,EAAE,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,eAAe,CAAC,IAAI,CAAC,OAAO,CAAC,EAAE,CAAC;QAC3F,OAAO,gBAAgB,CAAA;IACzB,CAAC;IAED,uCAAuC;IACvC,IAAI,cAAc,CAAC,IAAI,CAAC,OAAO,CAAC;QAAE,OAAO,YAAY,CAAA;IAErD,yCAAyC;IACzC,IAAI,eAAe,CAAC,IAAI,CAAC,OAAO,CAAC;QAAE,OAAO,aAAa,CAAA;IAEvD,iEAAiE;IACjE,IAAI,sEAAsE,CAAC,IAAI,CAAC,OAAO,CAAC,EAAE,CAAC;QACzF,OAAO,YAAY,CAAA;IACrB,CAAC;IAED,gEAAgE;IAChE,6DAA6D;IAC7D,IAAI,OAAO,CAAC,MAAM,IAAI,EAAE;QAAE,OAAO,YAAY,CAAA;IAE7C,iEAAiE;IACjE,OAAO,aAAa,CAAA;AACtB,CAAC;AAED,8EAA8E;AAC9E,wBAAwB;AACxB,8EAA8E;AAE9E,MAAM,iBAAiB,GAAG,6PAA6P,CAAA;AAEvR,MAAM,UAAU,iBAAiB,CAAC,OAAe;IAC/C,OAAO,iBAAiB,CAAC,IAAI,CAAC,OAAO,CAAC,CAAA;AACxC,CAAC;AAED,MAAM,CAAC,MAAM,iBAAiB,GAAG;;;;6DAI4B,CAAA;AAE7D;;;;;;GAMG;AACH,MAAM,UAAU,mBAAmB,CACjC,MAAkB,EAClB,QAA+B;IAE/B,QAAQ,MAAM,EAAE,CAAC;QACf,KAAK,gBAAgB;YACnB,OAAO,EAAE,CAAA;QACX,KAAK,aAAa;YAChB,OAAO,QAAQ,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,iBAAiB,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAA;QAC5D,KAAK,YAAY;YACf,OAAO,CAAC,GAAG,QAAQ,CAAC,CAAA;IACxB,CAAC;AACH,CAAC"}
1
+ {"version":3,"file":"intent.js","sourceRoot":"","sources":["../../../src/core/intent.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;GAYG;AAMH,8EAA8E;AAC9E,wCAAwC;AACxC,8EAA8E;AAE9E,MAAM,iBAAiB,GAAG,IAAI,GAAG,CAAC;IAChC,WAAW;IACX,MAAM;IACN,MAAM;IACN,UAAU;IACV,SAAS;IACT,OAAO;IACP,cAAc;IACd,aAAa;IACb,cAAc;CACf,CAAC,CAAA;AAEF,8EAA8E;AAC9E,8BAA8B;AAC9B,8EAA8E;AAE9E,4EAA4E;AAC5E,MAAM,cAAc,GAAG,6MAA6M,CAAA;AAEpO,wEAAwE;AACxE,MAAM,eAAe,GAAG,sLAAsL,CAAA;AAE9M,oEAAoE;AACpE,MAAM,iBAAiB,GAAG,gKAAgK,CAAA;AAE1L,6EAA6E;AAC7E,MAAM,aAAa,GAAG,iHAAiH,CAAA;AAEvI;;;;;;;GAOG;AACH,MAAM,UAAU,cAAc,CAAC,OAAe;IAC5C,MAAM,OAAO,GAAG,OAAO,CAAC,IAAI,EAAE,CAAA;IAE9B,iDAAiD;IACjD,IAAI,OAAO,CAAC,MAAM,KAAK,CAAC;QAAE,OAAO,gBAAgB,CAAA;IACjD,IAAI,iBAAiB,CAAC,IAAI,CAAC,OAAO,CAAC;QAAE,OAAO,gBAAgB,CAAA;IAC5D,IAAI,aAAa,CAAC,IAAI,CAAC,OAAO,CAAC;QAAE,OAAO,gBAAgB,CAAA;IAExD,8EAA8E;IAC9E,IAAI,OAAO,CAAC,MAAM,GAAG,EAAE,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,eAAe,CAAC,IAAI,CAAC,OAAO,CAAC,EAAE,CAAC;QAC3F,OAAO,gBAAgB,CAAA;IACzB,CAAC;IAED,uCAAuC;IACvC,IAAI,cAAc,CAAC,IAAI,CAAC,OAAO,CAAC;QAAE,OAAO,YAAY,CAAA;IAErD,yCAAyC;IACzC,IAAI,eAAe,CAAC,IAAI,CAAC,OAAO,CAAC;QAAE,OAAO,aAAa,CAAA;IAEvD,iEAAiE;IACjE,IAAI,sEAAsE,CAAC,IAAI,CAAC,OAAO,CAAC,EAAE,CAAC;QACzF,OAAO,YAAY,CAAA;IACrB,CAAC;IAED,gEAAgE;IAChE,6DAA6D;IAC7D,IAAI,OAAO,CAAC,MAAM,IAAI,EAAE;QAAE,OAAO,YAAY,CAAA;IAE7C,iEAAiE;IACjE,OAAO,aAAa,CAAA;AACtB,CAAC;AAED,8EAA8E;AAC9E,wBAAwB;AACxB,8EAA8E;AAE9E,MAAM,iBAAiB,GAAG,6PAA6P,CAAA;AAEvR,MAAM,UAAU,iBAAiB,CAAC,OAAe;IAC/C,OAAO,iBAAiB,CAAC,IAAI,CAAC,OAAO,CAAC,CAAA;AACxC,CAAC;AAED,MAAM,CAAC,MAAM,iBAAiB,GAAG;;;;6DAI4B,CAAA;AAE7D;;;;;;GAMG;AACH,MAAM,UAAU,mBAAmB,CACjC,MAAkB,EAClB,QAA+B;IAE/B,QAAQ,MAAM,EAAE,CAAC;QACf,KAAK,gBAAgB;YACnB,OAAO,EAAE,CAAA;QACX,KAAK,aAAa;YAChB,OAAO,QAAQ,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,iBAAiB,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAA;QAC5D,KAAK,YAAY;YACf,OAAO,CAAC,GAAG,QAAQ,CAAC,CAAA;IACxB,CAAC;AACH,CAAC"}