argustack 0.1.26 → 0.1.28

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.
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=graph.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"graph.js","sourceRoot":"","sources":["../../../src/core/types/graph.ts"],"names":[],"mappings":""}
@@ -6,4 +6,5 @@ export type { SourceType, SourceConfig, WorkspaceConfig, } from './config.js';
6
6
  export { SOURCE_META, ALL_SOURCES } from './config.js';
7
7
  export type { DbEngine, DbTable, DbColumn, DbForeignKey, DbIndex, DbSchemaBatch, } from './database.js';
8
8
  export type { ProxyConfig, ProxyAuth, ProxyEndpoint, ProxyEndpoints, ProxyFieldMapping, } from './proxy-config.js';
9
+ export type { GraphEntity, GraphRelationship, GraphObservation, GraphQueryResult, GraphStats, } from './graph.js';
9
10
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/core/types/index.ts"],"names":[],"mappings":"AAAA,YAAY,EACV,KAAK,EACL,YAAY,EACZ,cAAc,EACd,YAAY,EACZ,SAAS,EACT,UAAU,EACV,kBAAkB,GACnB,MAAM,YAAY,CAAC;AAEpB,YAAY,EAAE,OAAO,EAAE,MAAM,cAAc,CAAC;AAE5C,YAAY,EACV,MAAM,EACN,UAAU,EACV,cAAc,EACd,WAAW,EACX,MAAM,GACP,MAAM,UAAU,CAAC;AAElB,YAAY,EACV,WAAW,EACX,iBAAiB,EACjB,kBAAkB,EAClB,eAAe,EACf,mBAAmB,EACnB,OAAO,EACP,WAAW,GACZ,MAAM,aAAa,CAAC;AAErB,YAAY,EACV,UAAU,EACV,YAAY,EACZ,eAAe,GAChB,MAAM,aAAa,CAAC;AAErB,OAAO,EAAE,WAAW,EAAE,WAAW,EAAE,MAAM,aAAa,CAAC;AAEvD,YAAY,EACV,QAAQ,EACR,OAAO,EACP,QAAQ,EACR,YAAY,EACZ,OAAO,EACP,aAAa,GACd,MAAM,eAAe,CAAC;AAEvB,YAAY,EACV,WAAW,EACX,SAAS,EACT,aAAa,EACb,cAAc,EACd,iBAAiB,GAClB,MAAM,mBAAmB,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/core/types/index.ts"],"names":[],"mappings":"AAAA,YAAY,EACV,KAAK,EACL,YAAY,EACZ,cAAc,EACd,YAAY,EACZ,SAAS,EACT,UAAU,EACV,kBAAkB,GACnB,MAAM,YAAY,CAAC;AAEpB,YAAY,EAAE,OAAO,EAAE,MAAM,cAAc,CAAC;AAE5C,YAAY,EACV,MAAM,EACN,UAAU,EACV,cAAc,EACd,WAAW,EACX,MAAM,GACP,MAAM,UAAU,CAAC;AAElB,YAAY,EACV,WAAW,EACX,iBAAiB,EACjB,kBAAkB,EAClB,eAAe,EACf,mBAAmB,EACnB,OAAO,EACP,WAAW,GACZ,MAAM,aAAa,CAAC;AAErB,YAAY,EACV,UAAU,EACV,YAAY,EACZ,eAAe,GAChB,MAAM,aAAa,CAAC;AAErB,OAAO,EAAE,WAAW,EAAE,WAAW,EAAE,MAAM,aAAa,CAAC;AAEvD,YAAY,EACV,QAAQ,EACR,OAAO,EACP,QAAQ,EACR,YAAY,EACZ,OAAO,EACP,aAAa,GACd,MAAM,eAAe,CAAC;AAEvB,YAAY,EACV,WAAW,EACX,SAAS,EACT,aAAa,EACb,cAAc,EACd,iBAAiB,GAClB,MAAM,mBAAmB,CAAC;AAE3B,YAAY,EACV,WAAW,EACX,iBAAiB,EACjB,gBAAgB,EAChB,gBAAgB,EAChB,UAAU,GACX,MAAM,YAAY,CAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"server.d.ts","sourceRoot":"","sources":["../../src/mcp/server.ts"],"names":[],"mappings":";AAEA;;;;;;;;;GASG;AAEH,OAAO,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AA2BpE,eAAO,MAAM,MAAM,WAWjB,CAAC;AAUH,wBAAsB,cAAc,IAAI,OAAO,CAAC,IAAI,CAAC,CAIpD"}
1
+ {"version":3,"file":"server.d.ts","sourceRoot":"","sources":["../../src/mcp/server.ts"],"names":[],"mappings":";AAEA;;;;;;;;;GASG;AAEH,OAAO,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AA4BpE,eAAO,MAAM,MAAM,WAWjB,CAAC;AAWH,wBAAsB,cAAc,IAAI,OAAO,CAAC,IAAI,CAAC,CAIpD"}
@@ -21,6 +21,7 @@ import { registerSearchTools } from './tools/search.js';
21
21
  import { registerEstimateTools } from './tools/estimate.js';
22
22
  import { registerDatabaseTools } from './tools/database.js';
23
23
  import { registerPushTools } from './tools/push.js';
24
+ import { registerGraphTools } from './tools/graph.js';
24
25
  const mcpFilename = fileURLToPath(import.meta.url);
25
26
  const mcpPackageRoot = resolve(dirname(mcpFilename), '..', '..');
26
27
  function loadIconDataUri() {
@@ -51,6 +52,7 @@ registerSearchTools(server);
51
52
  registerEstimateTools(server);
52
53
  registerDatabaseTools(server);
53
54
  registerPushTools(server);
55
+ registerGraphTools(server);
54
56
  export async function startMcpServer() {
55
57
  const transport = new StdioServerTransport();
56
58
  await server.connect(transport);
@@ -1 +1 @@
1
- {"version":3,"file":"server.js","sourceRoot":"","sources":["../../src/mcp/server.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"server.js","sourceRoot":"","sources":["../../src/mcp/server.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,3 @@
1
+ import type { McpServer } from '@modelcontextprotocol/sdk/server/mcp.js';
2
+ export declare function registerGraphTools(server: McpServer): void;
3
+ //# sourceMappingURL=graph.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"graph.d.ts","sourceRoot":"","sources":["../../../src/mcp/tools/graph.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AAUzE,wBAAgB,kBAAkB,CAAC,MAAM,EAAE,SAAS,GAAG,IAAI,CAkd1D"}
@@ -0,0 +1,398 @@
1
+ import { z } from 'zod/v4';
2
+ import { loadWorkspace, createAdapters, textResponse, errorResponse, getErrorMessage, } from '../helpers.js';
3
+ export function registerGraphTools(server) {
4
+ server.registerTool('impact_analysis', {
5
+ description: 'Analyze impact of changing a file or module. Returns connected issues, developers, PRs via knowledge graph traversal. Run `argustack graph build` first. Use to assess risk before making changes.',
6
+ inputSchema: {
7
+ file_or_module: z.string().describe('File path or module name (e.g. "src/adapters/payment", "payment")'),
8
+ depth: z.number().optional().describe('Graph traversal depth (default: 2)'),
9
+ },
10
+ }, async ({ file_or_module: target, depth }) => {
11
+ const ws = loadWorkspace();
12
+ if (!ws.ok) {
13
+ return errorResponse(`Workspace not found: ${ws.reason}`);
14
+ }
15
+ const { storage } = await createAdapters(ws.root);
16
+ try {
17
+ await storage.initialize();
18
+ const result = await storage.queryGraph(target, depth ?? 2);
19
+ if (result.entities.length === 0) {
20
+ return textResponse(`No graph data for "${target}". Run "argustack graph build" first.`);
21
+ }
22
+ const issues = result.entities.filter((e) => e.type === 'issue');
23
+ const developers = result.entities.filter((e) => e.type === 'developer');
24
+ const prs = result.entities.filter((e) => e.type === 'pr');
25
+ const modules = result.entities.filter((e) => e.type === 'module');
26
+ const lines = [
27
+ `# Impact Analysis: ${target}`,
28
+ '',
29
+ `**${String(issues.length)} issues**, **${String(developers.length)} developers**, **${String(prs.length)} PRs**, **${String(modules.length)} modules** connected`,
30
+ '',
31
+ ];
32
+ if (issues.length > 0) {
33
+ lines.push('## Connected Issues');
34
+ for (const issue of issues.slice(0, 20)) {
35
+ const props = issue.properties;
36
+ lines.push(`- **${issue.name}** — ${typeof props['status'] === 'string' ? props['status'] : '?'} | ${typeof props['summary'] === 'string' ? props['summary'] : ''}`);
37
+ }
38
+ lines.push('');
39
+ }
40
+ if (developers.length > 0) {
41
+ lines.push('## Developers');
42
+ const devWeights = developers.map((dev) => {
43
+ const rels = result.relationships.filter((r) => r.sourceId === dev.id || r.targetId === dev.id);
44
+ return { name: dev.name, connections: rels.length };
45
+ }).sort((a, b) => b.connections - a.connections);
46
+ for (const dev of devWeights.slice(0, 10)) {
47
+ lines.push(`- ${dev.name} — ${String(dev.connections)} connections`);
48
+ }
49
+ lines.push('');
50
+ }
51
+ if (result.observations.length > 0) {
52
+ lines.push('## Observations');
53
+ for (const obs of result.observations) {
54
+ const entity = result.entities.find((e) => e.id === obs.entityId);
55
+ lines.push(`- [${entity?.name ?? '?'}] ${obs.content}`);
56
+ }
57
+ lines.push('');
58
+ }
59
+ await storage.close();
60
+ return textResponse(lines.join('\n'));
61
+ }
62
+ catch (err) {
63
+ await storage.close();
64
+ return errorResponse(`Impact analysis failed: ${getErrorMessage(err)}`);
65
+ }
66
+ });
67
+ server.registerTool('developer_expertise', {
68
+ description: 'Find developers who know a specific area. Ranks by commits, reviews, issue assignments via knowledge graph. Run `argustack graph build` first.',
69
+ inputSchema: {
70
+ area: z.string().describe('Topic, module, or component name (e.g. "payment", "authentication")'),
71
+ limit: z.number().optional().describe('Max developers to return (default: 10)'),
72
+ },
73
+ }, async ({ area, limit }) => {
74
+ const ws = loadWorkspace();
75
+ if (!ws.ok) {
76
+ return errorResponse(`Workspace not found: ${ws.reason}`);
77
+ }
78
+ const { storage } = await createAdapters(ws.root);
79
+ try {
80
+ await storage.initialize();
81
+ const result = await storage.queryGraph(area, 2);
82
+ if (result.entities.length === 0) {
83
+ return textResponse(`No graph data for "${area}". Run "argustack graph build" first.`);
84
+ }
85
+ const developers = result.entities.filter((e) => e.type === 'developer');
86
+ const ranked = developers.map((dev) => {
87
+ const rels = result.relationships.filter((r) => r.sourceId === dev.id || r.targetId === dev.id);
88
+ const commits = rels.filter((r) => r.type === 'authored_commit_for' || r.type === 'changed').length;
89
+ const reviews = rels.filter((r) => r.type === 'reviewed').length;
90
+ const assigned = rels.filter((r) => r.type === 'assigned_to').length;
91
+ return { name: dev.name, total: rels.length, commits, reviews, assigned };
92
+ }).sort((a, b) => b.total - a.total).slice(0, limit ?? 10);
93
+ const lines = [
94
+ `# Developer Expertise: ${area}`,
95
+ '',
96
+ ];
97
+ for (let i = 0; i < ranked.length; i++) {
98
+ const dev = ranked[i];
99
+ if (!dev) {
100
+ continue;
101
+ }
102
+ lines.push(`${String(i + 1)}. **${dev.name}** — ${String(dev.commits)} commits, ${String(dev.reviews)} reviews, ${String(dev.assigned)} assignments`);
103
+ }
104
+ await storage.close();
105
+ return textResponse(lines.join('\n'));
106
+ }
107
+ catch (err) {
108
+ await storage.close();
109
+ return errorResponse(`Developer expertise failed: ${getErrorMessage(err)}`);
110
+ }
111
+ });
112
+ server.registerTool('related_issues', {
113
+ description: 'Find issues related to a given issue via knowledge graph traversal — through commits, files, PRs, developers. Discovers connections beyond explicit Jira links.',
114
+ inputSchema: {
115
+ issue_key: z.string().describe('Issue key (e.g. "ORG-16999")'),
116
+ depth: z.number().optional().describe('Traversal depth (default: 3)'),
117
+ },
118
+ }, async ({ issue_key: issueKey, depth }) => {
119
+ const ws = loadWorkspace();
120
+ if (!ws.ok) {
121
+ return errorResponse(`Workspace not found: ${ws.reason}`);
122
+ }
123
+ const { storage } = await createAdapters(ws.root);
124
+ try {
125
+ await storage.initialize();
126
+ const result = await storage.queryGraph(issueKey, depth ?? 3);
127
+ const related = result.entities.filter((e) => e.type === 'issue' && e.name !== issueKey);
128
+ if (related.length === 0) {
129
+ return textResponse(`No related issues found for ${issueKey}. Run "argustack graph build" first.`);
130
+ }
131
+ const lines = [
132
+ `# Related Issues: ${issueKey}`,
133
+ `Found ${String(related.length)} related issue(s)`,
134
+ '',
135
+ ];
136
+ for (const issue of related.slice(0, 30)) {
137
+ const props = issue.properties;
138
+ const source = result.relationships.some((r) => (r.sourceId === issue.id || r.targetId === issue.id) && r.source === 'claude') ? ' (semantic)' : '';
139
+ lines.push(`- **${issue.name}**${source} — ${typeof props['status'] === 'string' ? props['status'] : '?'} | ${typeof props['summary'] === 'string' ? props['summary'] : ''}`);
140
+ }
141
+ await storage.close();
142
+ return textResponse(lines.join('\n'));
143
+ }
144
+ catch (err) {
145
+ await storage.close();
146
+ return errorResponse(`Related issues failed: ${getErrorMessage(err)}`);
147
+ }
148
+ });
149
+ server.registerTool('code_dependencies', {
150
+ description: 'Show code dependencies for a file or module — co-changed files (coupling), imports, package dependencies. Based on knowledge graph data.',
151
+ inputSchema: {
152
+ file_or_module: z.string().describe('File path or module name'),
153
+ depth: z.number().optional().describe('Traversal depth (default: 2)'),
154
+ },
155
+ }, async ({ file_or_module: target, depth }) => {
156
+ const ws = loadWorkspace();
157
+ if (!ws.ok) {
158
+ return errorResponse(`Workspace not found: ${ws.reason}`);
159
+ }
160
+ const { storage } = await createAdapters(ws.root);
161
+ try {
162
+ await storage.initialize();
163
+ const result = await storage.queryGraph(target, depth ?? 2);
164
+ const coChanges = result.relationships
165
+ .filter((r) => r.type === 'co_changes')
166
+ .sort((a, b) => b.weight - a.weight);
167
+ const imports = result.relationships.filter((r) => r.type === 'imports');
168
+ const pkgDeps = result.relationships.filter((r) => r.type === 'depends_on_pkg');
169
+ const lines = [`# Code Dependencies: ${target}`, ''];
170
+ if (coChanges.length > 0) {
171
+ lines.push('## Co-changed Modules (coupling)');
172
+ for (const rel of coChanges.slice(0, 15)) {
173
+ const other = result.entities.find((e) => e.id === rel.sourceId || e.id === rel.targetId);
174
+ if (other) {
175
+ lines.push(`- ${other.name} (${String(rel.weight)}x together)`);
176
+ }
177
+ }
178
+ lines.push('');
179
+ }
180
+ if (imports.length > 0) {
181
+ lines.push('## Imports');
182
+ for (const rel of imports.slice(0, 20)) {
183
+ const importedModule = result.entities.find((e) => e.id === rel.targetId);
184
+ if (importedModule) {
185
+ lines.push(`- ${importedModule.name}`);
186
+ }
187
+ }
188
+ lines.push('');
189
+ }
190
+ if (pkgDeps.length > 0) {
191
+ lines.push('## Package Dependencies');
192
+ for (const rel of pkgDeps.slice(0, 20)) {
193
+ const pkg = result.entities.find((e) => e.id === rel.targetId);
194
+ if (pkg) {
195
+ lines.push(`- ${pkg.name}`);
196
+ }
197
+ }
198
+ lines.push('');
199
+ }
200
+ if (coChanges.length === 0 && imports.length === 0 && pkgDeps.length === 0) {
201
+ await storage.close();
202
+ return textResponse(`No code dependency data for "${target}". Run "argustack graph build" first.`);
203
+ }
204
+ await storage.close();
205
+ return textResponse(lines.join('\n'));
206
+ }
207
+ catch (err) {
208
+ await storage.close();
209
+ return errorResponse(`Code dependencies failed: ${getErrorMessage(err)}`);
210
+ }
211
+ });
212
+ server.registerTool('business_context', {
213
+ description: 'Show business context for a topic — business processes, features, related issues. Based on semantic graph built by Claude. Run `build_business_graph` first for best results.',
214
+ inputSchema: {
215
+ topic: z.string().describe('Business topic (e.g. "refund", "payment", "onboarding")'),
216
+ depth: z.number().optional().describe('Traversal depth (default: 2)'),
217
+ },
218
+ }, async ({ topic, depth }) => {
219
+ const ws = loadWorkspace();
220
+ if (!ws.ok) {
221
+ return errorResponse(`Workspace not found: ${ws.reason}`);
222
+ }
223
+ const { storage } = await createAdapters(ws.root);
224
+ try {
225
+ await storage.initialize();
226
+ const result = await storage.queryGraph(topic, depth ?? 2);
227
+ const processes = result.entities.filter((e) => e.type === 'business_process');
228
+ const features = result.entities.filter((e) => e.type === 'feature');
229
+ const issues = result.entities.filter((e) => e.type === 'issue');
230
+ const lines = [`# Business Context: ${topic}`, ''];
231
+ if (processes.length > 0) {
232
+ lines.push('## Business Processes');
233
+ for (const p of processes) {
234
+ lines.push(`- **${p.name}**`);
235
+ }
236
+ lines.push('');
237
+ }
238
+ if (features.length > 0) {
239
+ lines.push('## Features');
240
+ for (const f of features) {
241
+ lines.push(`- ${f.name}`);
242
+ }
243
+ lines.push('');
244
+ }
245
+ if (issues.length > 0) {
246
+ lines.push(`## Related Issues (${String(issues.length)})`);
247
+ for (const issue of issues.slice(0, 15)) {
248
+ lines.push(`- **${issue.name}** — ${typeof issue.properties['status'] === 'string' ? issue.properties['status'] : '?'} | ${typeof issue.properties['summary'] === 'string' ? issue.properties['summary'] : ''}`);
249
+ }
250
+ lines.push('');
251
+ }
252
+ if (result.observations.length > 0) {
253
+ lines.push('## Knowledge & Notes');
254
+ for (const obs of result.observations) {
255
+ lines.push(`- ${obs.content}`);
256
+ }
257
+ lines.push('');
258
+ }
259
+ if (processes.length === 0 && features.length === 0 && issues.length === 0) {
260
+ await storage.close();
261
+ return textResponse('No business context for "' + topic + '". Run `build_business_graph` to have Claude analyze issue descriptions.');
262
+ }
263
+ await storage.close();
264
+ return textResponse(lines.join('\n'));
265
+ }
266
+ catch (err) {
267
+ await storage.close();
268
+ return errorResponse(`Business context failed: ${getErrorMessage(err)}`);
269
+ }
270
+ });
271
+ server.registerTool('build_business_graph', {
272
+ description: 'Claude analyzes issue descriptions to discover business processes and features, then saves them to the knowledge graph. Returns entities found for Claude to confirm and save. No external API cost — uses Claude Max subscription.',
273
+ inputSchema: {
274
+ project: z.string().optional().describe('Project key to analyze (default: all)'),
275
+ batch_size: z.number().optional().describe('Issues per batch (default: 50)'),
276
+ },
277
+ }, async ({ project, batch_size: batchSize }) => {
278
+ const ws = loadWorkspace();
279
+ if (!ws.ok) {
280
+ return errorResponse(`Workspace not found: ${ws.reason}`);
281
+ }
282
+ const { storage } = await createAdapters(ws.root);
283
+ try {
284
+ await storage.initialize();
285
+ const projectFilter = project ? `WHERE project_key = $1` : '';
286
+ const params = project ? [project] : [];
287
+ const result = await storage.query(`SELECT issue_key, summary, description, issue_type, status FROM issues ${projectFilter} ORDER BY issue_key LIMIT ${String(batchSize ?? 50)}`, params);
288
+ if (result.rows.length === 0) {
289
+ await storage.close();
290
+ return textResponse('No issues found. Run `argustack sync jira` first.');
291
+ }
292
+ const issueList = result.rows.map((r) => {
293
+ const desc = r['description'] ?? '';
294
+ const preview = desc.length > 200 ? desc.slice(0, 200) + '...' : desc;
295
+ return `**${r['issue_key']}** [${r['issue_type']}] ${r['summary']}\n${preview}`;
296
+ }).join('\n\n');
297
+ await storage.close();
298
+ return textResponse([
299
+ `# Business Graph Analysis`,
300
+ `Analyzed ${String(result.rows.length)} issues. Review and use add_relationship to save connections.`,
301
+ '',
302
+ '## Instructions',
303
+ 'Read the issues below. Identify:',
304
+ '1. **Business Processes** (e.g. "Refund Flow", "ACH Processing", "User Onboarding")',
305
+ '2. **Features** (e.g. "Payment Redistribution", "LOC Account Management")',
306
+ '3. Which issues belong to which process/feature',
307
+ '4. Which processes affect each other',
308
+ '',
309
+ 'Then call `add_relationship` for each connection found.',
310
+ 'Call `add_observation` to record important business knowledge.',
311
+ '',
312
+ '---',
313
+ '',
314
+ issueList,
315
+ ].join('\n'));
316
+ }
317
+ catch (err) {
318
+ await storage.close();
319
+ return errorResponse(`Build business graph failed: ${getErrorMessage(err)}`);
320
+ }
321
+ });
322
+ server.registerTool('add_relationship', {
323
+ description: 'Add a relationship between two entities in the knowledge graph. Claude discovers connections and records them. Marked as source=claude — survives graph rebuild.',
324
+ inputSchema: {
325
+ source_name: z.string().describe('Source entity name (e.g. "Refund Flow")'),
326
+ source_type: z.string().describe('Source entity type (e.g. "business_process", "feature", "issue", "developer", "module")'),
327
+ target_name: z.string().describe('Target entity name'),
328
+ target_type: z.string().describe('Target entity type'),
329
+ relationship_type: z.string().describe('Relationship type (e.g. "affects", "part_of_process", "implements_feature", "depends_on", "related_to")'),
330
+ description: z.string().optional().describe('Description of the relationship'),
331
+ },
332
+ }, async ({ source_name: srcName, source_type: srcType, target_name: tgtName, target_type: tgtType, relationship_type: relType, description: desc }) => {
333
+ const ws = loadWorkspace();
334
+ if (!ws.ok) {
335
+ return errorResponse(`Workspace not found: ${ws.reason}`);
336
+ }
337
+ const { storage } = await createAdapters(ws.root);
338
+ try {
339
+ await storage.initialize();
340
+ await storage.saveGraphEntities([
341
+ { name: srcName, type: srcType, properties: {} },
342
+ { name: tgtName, type: tgtType, properties: {} },
343
+ ]);
344
+ const entityResult = await storage.query('SELECT id, name, type FROM graph_entities WHERE (name = $1 AND type = $2) OR (name = $3 AND type = $4)', [srcName, srcType, tgtName, tgtType]);
345
+ const srcEntity = entityResult.rows.find((r) => r['name'] === srcName && r['type'] === srcType);
346
+ const tgtEntity = entityResult.rows.find((r) => r['name'] === tgtName && r['type'] === tgtType);
347
+ if (!srcEntity || !tgtEntity) {
348
+ await storage.close();
349
+ return errorResponse('Failed to create entities');
350
+ }
351
+ await storage.saveGraphRelationships([{
352
+ sourceId: srcEntity['id'],
353
+ targetId: tgtEntity['id'],
354
+ type: relType,
355
+ weight: 1,
356
+ source: 'claude',
357
+ properties: desc ? { description: desc } : {},
358
+ }]);
359
+ await storage.close();
360
+ return textResponse(`Added: ${srcName} —[${relType}]→ ${tgtName}${desc ? ` (${desc})` : ''}`);
361
+ }
362
+ catch (err) {
363
+ await storage.close();
364
+ return errorResponse(`Add relationship failed: ${getErrorMessage(err)}`);
365
+ }
366
+ });
367
+ server.registerTool('add_observation', {
368
+ description: 'Add a text note/observation to any entity in the knowledge graph. Multiple observations per entity — append only, never overwrites. Use to record business knowledge, warnings, tips.',
369
+ inputSchema: {
370
+ entity_name: z.string().describe('Entity name (e.g. "ORG-16999", "Refund Flow", "Dmitry Kislitsyn")'),
371
+ content: z.string().describe('Observation text (e.g. "After refund, must sync to OrgMeter within same business day")'),
372
+ },
373
+ }, async ({ entity_name: entityName, content }) => {
374
+ const ws = loadWorkspace();
375
+ if (!ws.ok) {
376
+ return errorResponse('Workspace not found: ' + ws.reason);
377
+ }
378
+ const { storage } = await createAdapters(ws.root);
379
+ try {
380
+ await storage.initialize();
381
+ const entityResult = await storage.query('SELECT id FROM graph_entities WHERE name = $1 LIMIT 1', [entityName]);
382
+ if (entityResult.rows.length === 0) {
383
+ await storage.close();
384
+ return errorResponse('Entity "' + entityName + '" not found. Run "argustack graph build" first, or create it via add_relationship.');
385
+ }
386
+ const entityId = entityResult.rows[0]?.['id'];
387
+ await storage.saveGraphObservation(entityId, content, 'claude');
388
+ const allObs = await storage.getObservations(entityId);
389
+ await storage.close();
390
+ return textResponse(`Added observation to "${entityName}". Total observations: ${String(allObs.length)}`);
391
+ }
392
+ catch (err) {
393
+ await storage.close();
394
+ return errorResponse(`Add observation failed: ${getErrorMessage(err)}`);
395
+ }
396
+ });
397
+ }
398
+ //# sourceMappingURL=graph.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"graph.js","sourceRoot":"","sources":["../../../src/mcp/tools/graph.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,13 @@
1
+ import type { IStorage } from '../core/ports/storage.js';
2
+ import type { GraphStats } from '../core/types/index.js';
3
+ export interface BuildGraphOptions {
4
+ since?: string;
5
+ repoPaths?: string[];
6
+ onProgress?: (message: string) => void;
7
+ }
8
+ export declare class BuildGraphUseCase {
9
+ private readonly storage;
10
+ constructor(storage: IStorage);
11
+ execute(options?: BuildGraphOptions): Promise<GraphStats>;
12
+ }
13
+ //# sourceMappingURL=build-graph.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"build-graph.d.ts","sourceRoot":"","sources":["../../src/use-cases/build-graph.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,0BAA0B,CAAC;AACzD,OAAO,KAAK,EAAkC,UAAU,EAAE,MAAM,wBAAwB,CAAC;AAMzF,MAAM,WAAW,iBAAiB;IAChC,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,SAAS,CAAC,EAAE,MAAM,EAAE,CAAC;IACrB,UAAU,CAAC,EAAE,CAAC,OAAO,EAAE,MAAM,KAAK,IAAI,CAAC;CACxC;AAED,qBAAa,iBAAiB;IAChB,OAAO,CAAC,QAAQ,CAAC,OAAO;gBAAP,OAAO,EAAE,QAAQ;IAExC,OAAO,CAAC,OAAO,GAAE,iBAAsB,GAAG,OAAO,CAAC,UAAU,CAAC;CAgOpE"}