@telora/mcp-products 0.21.28 → 0.22.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 (44) hide show
  1. package/dist/handlers/componentHandlers.d.ts +3 -0
  2. package/dist/handlers/componentHandlers.js +128 -0
  3. package/dist/handlers/componentHandlers.js.map +1 -0
  4. package/dist/handlers/contextHandlers.d.ts +1 -6
  5. package/dist/handlers/contextHandlers.js +13 -145
  6. package/dist/handlers/contextHandlers.js.map +1 -1
  7. package/dist/handlers/contractHandlers.d.ts +3 -0
  8. package/dist/handlers/contractHandlers.js +150 -0
  9. package/dist/handlers/contractHandlers.js.map +1 -0
  10. package/dist/handlers/factoryHandlers.js +3 -182
  11. package/dist/handlers/factoryHandlers.js.map +1 -1
  12. package/dist/handlers/index.d.ts +5 -1
  13. package/dist/handlers/index.js +5 -1
  14. package/dist/handlers/index.js.map +1 -1
  15. package/dist/handlers/prerequisiteTreeHandlers.d.ts +3 -0
  16. package/dist/handlers/prerequisiteTreeHandlers.js +416 -0
  17. package/dist/handlers/prerequisiteTreeHandlers.js.map +1 -0
  18. package/dist/handlers/productHandlers.js +6 -9
  19. package/dist/handlers/productHandlers.js.map +1 -1
  20. package/dist/handlers/realityTreeHandlers.js +6 -4
  21. package/dist/handlers/realityTreeHandlers.js.map +1 -1
  22. package/dist/handlers/wikiHandlers.d.ts +15 -0
  23. package/dist/handlers/wikiHandlers.js +294 -0
  24. package/dist/handlers/wikiHandlers.js.map +1 -0
  25. package/dist/index.js +96 -14
  26. package/dist/index.js.map +1 -1
  27. package/dist/scanner/ast-extraction.d.ts +10 -0
  28. package/dist/scanner/ast-extraction.js +156 -0
  29. package/dist/scanner/ast-extraction.js.map +1 -0
  30. package/dist/scanner/file-discovery.d.ts +9 -0
  31. package/dist/scanner/file-discovery.js +134 -0
  32. package/dist/scanner/file-discovery.js.map +1 -0
  33. package/dist/scanner/index.d.ts +19 -0
  34. package/dist/scanner/index.js +193 -0
  35. package/dist/scanner/index.js.map +1 -0
  36. package/dist/scanner/relationship-extraction.d.ts +11 -0
  37. package/dist/scanner/relationship-extraction.js +187 -0
  38. package/dist/scanner/relationship-extraction.js.map +1 -0
  39. package/dist/scanner/types.d.ts +45 -0
  40. package/dist/scanner/types.js +3 -0
  41. package/dist/scanner/types.js.map +1 -0
  42. package/dist/shared.js +34 -7
  43. package/dist/shared.js.map +1 -1
  44. package/package.json +2 -1
@@ -0,0 +1,11 @@
1
+ import type { SourceFile } from 'ts-morph';
2
+ import type { ExtractedRelationship } from './types.js';
3
+ /**
4
+ * Extract import relationships from a source file.
5
+ * Only tracks imports that resolve to discovered components (internal).
6
+ */
7
+ export declare function extractRelationships(sourceFile: SourceFile, sourcePath: string, knownPaths: Set<string>, repoRoot: string, pathAliases: Record<string, string>): ExtractedRelationship[];
8
+ /**
9
+ * Parse tsconfig.json paths to extract alias mappings.
10
+ */
11
+ export declare function parseTsconfigPaths(repoRoot: string): Record<string, string>;
@@ -0,0 +1,187 @@
1
+ // Extract import relationships between discovered components.
2
+ import * as path from 'node:path';
3
+ import * as fs from 'node:fs';
4
+ /**
5
+ * Extract import relationships from a source file.
6
+ * Only tracks imports that resolve to discovered components (internal).
7
+ */
8
+ export function extractRelationships(sourceFile, sourcePath, knownPaths, repoRoot, pathAliases) {
9
+ const relationships = [];
10
+ // Process import declarations
11
+ for (const importDecl of sourceFile.getImportDeclarations()) {
12
+ const moduleSpecifier = importDecl.getModuleSpecifierValue();
13
+ const resolvedPath = resolveImportPath(sourcePath, moduleSpecifier, knownPaths, repoRoot, pathAliases);
14
+ if (!resolvedPath)
15
+ continue;
16
+ const namedImports = importDecl.getNamedImports().map(ni => ni.getName());
17
+ const defaultImport = importDecl.getDefaultImport()?.getText();
18
+ const namespaceImport = importDecl.getNamespaceImport()?.getText();
19
+ const allImports = [
20
+ ...namedImports,
21
+ ...(defaultImport ? [defaultImport] : []),
22
+ ...(namespaceImport ? [namespaceImport] : []),
23
+ ];
24
+ relationships.push({
25
+ sourcePath,
26
+ targetPath: resolvedPath,
27
+ relationshipType: 'imports',
28
+ metadata: { namedImports: allImports },
29
+ });
30
+ }
31
+ // Process re-exports (export { X } from './Y')
32
+ for (const exportDecl of sourceFile.getExportDeclarations()) {
33
+ const moduleSpecifier = exportDecl.getModuleSpecifierValue();
34
+ if (!moduleSpecifier)
35
+ continue;
36
+ const resolvedPath = resolveImportPath(sourcePath, moduleSpecifier, knownPaths, repoRoot, pathAliases);
37
+ if (!resolvedPath)
38
+ continue;
39
+ const namedExports = exportDecl.getNamedExports().map(ne => ne.getName());
40
+ const isStarExport = exportDecl.isNamespaceExport() || namedExports.length === 0;
41
+ relationships.push({
42
+ sourcePath,
43
+ targetPath: resolvedPath,
44
+ relationshipType: 're_exports',
45
+ metadata: {
46
+ namedExports: isStarExport ? ['*'] : namedExports,
47
+ },
48
+ });
49
+ }
50
+ // Detect JSX renders (component A renders component B)
51
+ detectRenders(sourceFile, sourcePath, knownPaths, repoRoot, pathAliases, relationships);
52
+ return relationships;
53
+ }
54
+ /**
55
+ * Resolve an import specifier to a known component path.
56
+ */
57
+ function resolveImportPath(sourcePath, specifier, knownPaths, repoRoot, pathAliases) {
58
+ // Skip external packages
59
+ if (!specifier.startsWith('.') && !specifier.startsWith('@/') && !specifier.startsWith('~/')) {
60
+ // Check path aliases
61
+ let resolved = null;
62
+ for (const [alias, target] of Object.entries(pathAliases)) {
63
+ const aliasPrefix = alias.replace('/*', '/');
64
+ const targetPrefix = target.replace('/*', '/');
65
+ if (specifier.startsWith(aliasPrefix)) {
66
+ const rest = specifier.slice(aliasPrefix.length);
67
+ resolved = targetPrefix + rest;
68
+ break;
69
+ }
70
+ // Exact match (no wildcard)
71
+ if (alias === specifier) {
72
+ resolved = target;
73
+ break;
74
+ }
75
+ }
76
+ if (!resolved)
77
+ return null;
78
+ return tryResolveToKnown(resolved, knownPaths);
79
+ }
80
+ // Handle @/ alias (common in Vite/Next projects)
81
+ if (specifier.startsWith('@/') || specifier.startsWith('~/')) {
82
+ const aliasValue = pathAliases['@/*'] || pathAliases['~/*'] || 'src/*';
83
+ const targetPrefix = aliasValue.replace('/*', '/');
84
+ const rest = specifier.slice(2); // remove @/ or ~/
85
+ return tryResolveToKnown(targetPrefix + rest, knownPaths);
86
+ }
87
+ // Relative import
88
+ const sourceDir = path.dirname(sourcePath);
89
+ const resolved = path.normalize(path.join(sourceDir, specifier));
90
+ return tryResolveToKnown(resolved, knownPaths);
91
+ }
92
+ /**
93
+ * Try to resolve a partial path to a known component path.
94
+ * Handles: exact match, .ts/.tsx extension, /index.ts barrel.
95
+ */
96
+ function tryResolveToKnown(partial, knownPaths) {
97
+ // Normalize separators
98
+ const normalized = partial.replace(/\\/g, '/');
99
+ // Exact match
100
+ if (knownPaths.has(normalized))
101
+ return normalized;
102
+ // Try extensions
103
+ const extensions = ['.ts', '.tsx', '.js', '.jsx'];
104
+ for (const ext of extensions) {
105
+ const withExt = normalized + ext;
106
+ if (knownPaths.has(withExt))
107
+ return withExt;
108
+ }
109
+ // Try index file
110
+ for (const ext of extensions) {
111
+ const indexPath = normalized + '/index' + ext;
112
+ if (knownPaths.has(indexPath))
113
+ return indexPath;
114
+ }
115
+ return null;
116
+ }
117
+ /**
118
+ * Detect JSX render relationships by scanning import declarations
119
+ * and checking if imported identifiers appear in JSX-like patterns.
120
+ */
121
+ function detectRenders(sourceFile, sourcePath, knownPaths, repoRoot, pathAliases, relationships) {
122
+ const text = sourceFile.getFullText();
123
+ // Collect imported component names (PascalCase = likely React component)
124
+ const importedComponents = new Map(); // name -> resolved path
125
+ for (const importDecl of sourceFile.getImportDeclarations()) {
126
+ const moduleSpecifier = importDecl.getModuleSpecifierValue();
127
+ const resolvedPath = resolveImportPath(sourcePath, moduleSpecifier, knownPaths, repoRoot, pathAliases);
128
+ if (!resolvedPath)
129
+ continue;
130
+ const defaultImport = importDecl.getDefaultImport()?.getText();
131
+ if (defaultImport && isPascalCase(defaultImport)) {
132
+ importedComponents.set(defaultImport, resolvedPath);
133
+ }
134
+ for (const named of importDecl.getNamedImports()) {
135
+ const name = named.getAliasNode()?.getText() || named.getName();
136
+ if (isPascalCase(name)) {
137
+ importedComponents.set(name, resolvedPath);
138
+ }
139
+ }
140
+ }
141
+ // Check if any imported PascalCase identifiers appear as JSX tags
142
+ for (const [name, targetPath] of importedComponents) {
143
+ // Look for <ComponentName or <ComponentName> patterns
144
+ const jsxPattern = new RegExp(`<${name}[\\s/>]`);
145
+ if (jsxPattern.test(text)) {
146
+ // Don't duplicate if we already have an imports relationship for this target
147
+ const existingImport = relationships.find(r => r.sourcePath === sourcePath && r.targetPath === targetPath && r.relationshipType === 'imports');
148
+ if (existingImport) {
149
+ // Upgrade: also add a renders relationship
150
+ relationships.push({
151
+ sourcePath,
152
+ targetPath,
153
+ relationshipType: 'renders',
154
+ metadata: { renderedComponent: name },
155
+ });
156
+ }
157
+ }
158
+ }
159
+ }
160
+ function isPascalCase(name) {
161
+ return /^[A-Z][a-zA-Z0-9]*$/.test(name);
162
+ }
163
+ /**
164
+ * Parse tsconfig.json paths to extract alias mappings.
165
+ */
166
+ export function parseTsconfigPaths(repoRoot) {
167
+ const aliases = {};
168
+ try {
169
+ const tsconfigPath = path.join(repoRoot, 'tsconfig.json');
170
+ const content = JSON.parse(fs.readFileSync(tsconfigPath, 'utf-8'));
171
+ const paths = content?.compilerOptions?.paths;
172
+ if (paths) {
173
+ for (const [alias, targets] of Object.entries(paths)) {
174
+ const targetArray = targets;
175
+ if (targetArray.length > 0) {
176
+ aliases[alias] = targetArray[0];
177
+ }
178
+ }
179
+ }
180
+ }
181
+ catch {
182
+ // Default alias if tsconfig not found
183
+ aliases['@/*'] = 'src/*';
184
+ }
185
+ return aliases;
186
+ }
187
+ //# sourceMappingURL=relationship-extraction.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"relationship-extraction.js","sourceRoot":"","sources":["../../src/scanner/relationship-extraction.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,45 @@
1
+ export type ComponentType = 'page' | 'component' | 'hook' | 'context' | 'library' | 'utility' | 'type_definition' | 'barrel';
2
+ export type MemberType = 'prop' | 'method' | 'hook_return' | 'export_function' | 'export_const' | 'export_type' | 'state' | 'context_value';
3
+ export type RelationshipType = 'imports' | 're_exports' | 'renders';
4
+ export interface DiscoveredFile {
5
+ path: string;
6
+ name: string;
7
+ componentType: ComponentType;
8
+ lineCount: number;
9
+ parentDir: string;
10
+ }
11
+ export interface ExtractedMember {
12
+ memberType: MemberType;
13
+ name: string;
14
+ signature?: string;
15
+ required?: boolean;
16
+ defaultValue?: string;
17
+ }
18
+ export interface ExtractedRelationship {
19
+ sourcePath: string;
20
+ targetPath: string;
21
+ relationshipType: RelationshipType;
22
+ metadata?: Record<string, unknown>;
23
+ }
24
+ export interface ComponentInput {
25
+ tempId: string;
26
+ parentTempId?: string;
27
+ name: string;
28
+ path: string;
29
+ componentType: ComponentType;
30
+ lineCount?: number;
31
+ }
32
+ export interface MemberInput {
33
+ componentTempId: string;
34
+ memberType: MemberType;
35
+ name: string;
36
+ signature?: string;
37
+ required?: boolean;
38
+ defaultValue?: string;
39
+ }
40
+ export interface RelationshipInput {
41
+ sourceTempId: string;
42
+ targetTempId: string;
43
+ relationshipType: RelationshipType;
44
+ metadata?: Record<string, unknown>;
45
+ }
@@ -0,0 +1,3 @@
1
+ // Scanner types shared across modules
2
+ export {};
3
+ //# sourceMappingURL=types.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.js","sourceRoot":"","sources":["../../src/scanner/types.ts"],"names":[],"mappings":"AAAA,sCAAsC"}
package/dist/shared.js CHANGED
@@ -1,20 +1,47 @@
1
1
  // ---------------------------------------------------------------------------
2
2
  // Shared types, credential loading, and API client used by all handler modules
3
3
  // ---------------------------------------------------------------------------
4
- // ---------------------------------------------------------------------------
5
- // Credential loading -- env vars only
6
- // ---------------------------------------------------------------------------
4
+ import { existsSync, readFileSync } from "node:fs";
5
+ import { join } from "node:path";
6
+ import { homedir } from "node:os";
7
+ function resolveDaemonStateDir() {
8
+ const env = process.env.TELORA_STATE_DIR;
9
+ if (env)
10
+ return env;
11
+ return join(homedir(), ".telora");
12
+ }
13
+ function loadFromDaemonJson() {
14
+ const path = join(resolveDaemonStateDir(), "daemon.json");
15
+ try {
16
+ if (!existsSync(path))
17
+ return null;
18
+ const parsed = JSON.parse(readFileSync(path, "utf-8"));
19
+ return parsed;
20
+ }
21
+ catch {
22
+ return null;
23
+ }
24
+ }
7
25
  export function loadCredentials() {
8
- // Support both new TELORA_TRACKER_ID (profile-based UUID) and legacy TELORA_ACCESS_TOKEN
9
- const accessToken = process.env.TELORA_TRACKER_ID || process.env.TELORA_ACCESS_TOKEN;
26
+ let accessToken = process.env.TELORA_TRACKER_ID || process.env.TELORA_ACCESS_TOKEN;
10
27
  if (!process.env.TELORA_TRACKER_ID && process.env.TELORA_ACCESS_TOKEN) {
11
28
  console.error("[telora-products] Warning: TELORA_ACCESS_TOKEN is deprecated. Use TELORA_TRACKER_ID instead.");
12
29
  }
13
- const teloraUrl = process.env.TELORA_URL;
30
+ let teloraUrl = process.env.TELORA_URL;
31
+ if (!accessToken || !teloraUrl) {
32
+ const daemonConfig = loadFromDaemonJson();
33
+ if (daemonConfig) {
34
+ if (!accessToken && daemonConfig.trackerId)
35
+ accessToken = daemonConfig.trackerId;
36
+ if (!teloraUrl && daemonConfig.teloraUrl)
37
+ teloraUrl = daemonConfig.teloraUrl;
38
+ }
39
+ }
14
40
  if (accessToken && teloraUrl) {
15
41
  return { accessToken, teloraUrl };
16
42
  }
17
- throw new Error("MCP server not configured. Run: npx @telora/mcp-products init");
43
+ throw new Error("MCP server not configured. Run `telora-daemon connect <token>` to wire the workstation, " +
44
+ "or set TELORA_TRACKER_ID and TELORA_URL env vars.");
18
45
  }
19
46
  // ---------------------------------------------------------------------------
20
47
  // API client
@@ -1 +1 @@
1
- {"version":3,"file":"shared.js","sourceRoot":"","sources":["../src/shared.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"shared.js","sourceRoot":"","sources":["../src/shared.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@telora/mcp-products",
3
- "version": "0.21.28",
3
+ "version": "0.22.0",
4
4
  "description": "MCP server exposing Telora product operations to Claude Code",
5
5
  "type": "module",
6
6
  "main": "dist/index.js",
@@ -38,6 +38,7 @@
38
38
  },
39
39
  "dependencies": {
40
40
  "@modelcontextprotocol/sdk": "^1.12.1",
41
+ "ts-morph": "^28.0.0",
41
42
  "zod": "^4.3.6"
42
43
  },
43
44
  "devDependencies": {