@tyroneross/navgator 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 (84) hide show
  1. package/.claude-plugin/plugin.json +10 -0
  2. package/LICENSE +21 -0
  3. package/README.md +486 -0
  4. package/agents/architecture-advisor.md +109 -0
  5. package/commands/nav-check.md +64 -0
  6. package/commands/nav-connections.md +58 -0
  7. package/commands/nav-diagram.md +106 -0
  8. package/commands/nav-export.md +71 -0
  9. package/commands/nav-impact.md +58 -0
  10. package/commands/nav-scan.md +46 -0
  11. package/commands/nav-status.md +44 -0
  12. package/dist/cli/index.d.ts +7 -0
  13. package/dist/cli/index.d.ts.map +1 -0
  14. package/dist/cli/index.js +627 -0
  15. package/dist/cli/index.js.map +1 -0
  16. package/dist/config.d.ts +95 -0
  17. package/dist/config.d.ts.map +1 -0
  18. package/dist/config.js +262 -0
  19. package/dist/config.js.map +1 -0
  20. package/dist/diagram.d.ts +36 -0
  21. package/dist/diagram.d.ts.map +1 -0
  22. package/dist/diagram.js +333 -0
  23. package/dist/diagram.js.map +1 -0
  24. package/dist/index.d.ts +16 -0
  25. package/dist/index.d.ts.map +1 -0
  26. package/dist/index.js +18 -0
  27. package/dist/index.js.map +1 -0
  28. package/dist/scanner.d.ts +57 -0
  29. package/dist/scanner.d.ts.map +1 -0
  30. package/dist/scanner.js +282 -0
  31. package/dist/scanner.js.map +1 -0
  32. package/dist/scanners/connections/ast-scanner.d.ts +26 -0
  33. package/dist/scanners/connections/ast-scanner.d.ts.map +1 -0
  34. package/dist/scanners/connections/ast-scanner.js +430 -0
  35. package/dist/scanners/connections/ast-scanner.js.map +1 -0
  36. package/dist/scanners/connections/service-calls.d.ts +14 -0
  37. package/dist/scanners/connections/service-calls.d.ts.map +1 -0
  38. package/dist/scanners/connections/service-calls.js +719 -0
  39. package/dist/scanners/connections/service-calls.js.map +1 -0
  40. package/dist/scanners/infrastructure/index.d.ts +27 -0
  41. package/dist/scanners/infrastructure/index.d.ts.map +1 -0
  42. package/dist/scanners/infrastructure/index.js +233 -0
  43. package/dist/scanners/infrastructure/index.js.map +1 -0
  44. package/dist/scanners/packages/npm.d.ts +18 -0
  45. package/dist/scanners/packages/npm.d.ts.map +1 -0
  46. package/dist/scanners/packages/npm.js +256 -0
  47. package/dist/scanners/packages/npm.js.map +1 -0
  48. package/dist/scanners/packages/pip.d.ts +14 -0
  49. package/dist/scanners/packages/pip.d.ts.map +1 -0
  50. package/dist/scanners/packages/pip.js +228 -0
  51. package/dist/scanners/packages/pip.js.map +1 -0
  52. package/dist/scanners/prompts/detector.d.ts +119 -0
  53. package/dist/scanners/prompts/detector.d.ts.map +1 -0
  54. package/dist/scanners/prompts/detector.js +617 -0
  55. package/dist/scanners/prompts/detector.js.map +1 -0
  56. package/dist/scanners/prompts/index.d.ts +51 -0
  57. package/dist/scanners/prompts/index.d.ts.map +1 -0
  58. package/dist/scanners/prompts/index.js +340 -0
  59. package/dist/scanners/prompts/index.js.map +1 -0
  60. package/dist/scanners/prompts/types.d.ts +127 -0
  61. package/dist/scanners/prompts/types.d.ts.map +1 -0
  62. package/dist/scanners/prompts/types.js +37 -0
  63. package/dist/scanners/prompts/types.js.map +1 -0
  64. package/dist/setup.d.ts +65 -0
  65. package/dist/setup.d.ts.map +1 -0
  66. package/dist/setup.js +261 -0
  67. package/dist/setup.js.map +1 -0
  68. package/dist/storage.d.ts +147 -0
  69. package/dist/storage.d.ts.map +1 -0
  70. package/dist/storage.js +931 -0
  71. package/dist/storage.js.map +1 -0
  72. package/dist/types.d.ts +296 -0
  73. package/dist/types.d.ts.map +1 -0
  74. package/dist/types.js +55 -0
  75. package/dist/types.js.map +1 -0
  76. package/dist/ui-server.d.ts +17 -0
  77. package/dist/ui-server.d.ts.map +1 -0
  78. package/dist/ui-server.js +815 -0
  79. package/dist/ui-server.js.map +1 -0
  80. package/hooks/hooks.json +57 -0
  81. package/package.json +80 -0
  82. package/scripts/ibr-ui-test.mjs +359 -0
  83. package/scripts/postinstall.cjs +35 -0
  84. package/skills/architecture-awareness/SKILL.md +141 -0
@@ -0,0 +1,228 @@
1
+ /**
2
+ * Python Package Scanner
3
+ * Detects packages from requirements.txt, pyproject.toml, setup.py
4
+ */
5
+ import * as fs from 'fs';
6
+ import * as path from 'path';
7
+ import { generateComponentId, } from '../../types.js';
8
+ const PYTHON_SIGNATURES = [
9
+ // Web frameworks
10
+ { packageName: 'django', type: 'framework', layer: 'backend', purpose: 'Django web framework', critical: true },
11
+ { packageName: 'flask', type: 'framework', layer: 'backend', purpose: 'Flask web framework', critical: true },
12
+ { packageName: 'fastapi', type: 'framework', layer: 'backend', purpose: 'FastAPI framework', critical: true },
13
+ { packageName: 'starlette', type: 'framework', layer: 'backend', purpose: 'Starlette ASGI framework', critical: true },
14
+ { packageName: 'tornado', type: 'framework', layer: 'backend', purpose: 'Tornado async framework', critical: true },
15
+ // Database
16
+ { packageName: 'sqlalchemy', type: 'database', layer: 'database', purpose: 'SQLAlchemy ORM', critical: true },
17
+ { packageName: 'psycopg2', type: 'database', layer: 'database', purpose: 'PostgreSQL adapter', critical: true },
18
+ { packageName: 'psycopg2-binary', type: 'database', layer: 'database', purpose: 'PostgreSQL adapter', critical: true },
19
+ { packageName: 'pymongo', type: 'database', layer: 'database', purpose: 'MongoDB driver', critical: true },
20
+ { packageName: 'redis', type: 'database', layer: 'database', purpose: 'Redis client', critical: false },
21
+ { packageName: 'prisma', type: 'database', layer: 'database', purpose: 'Prisma Python client', critical: true },
22
+ { packageName: 'supabase', type: 'service', layer: 'database', purpose: 'Supabase client', critical: true },
23
+ // Queue systems
24
+ { packageName: 'celery', type: 'queue', layer: 'queue', purpose: 'Celery task queue', critical: true },
25
+ { packageName: 'rq', type: 'queue', layer: 'queue', purpose: 'Redis Queue', critical: true },
26
+ { packageName: 'dramatiq', type: 'queue', layer: 'queue', purpose: 'Dramatiq task queue', critical: true },
27
+ // AI/ML
28
+ { packageName: 'anthropic', type: 'service', layer: 'external', purpose: 'Claude AI SDK', critical: true },
29
+ { packageName: 'openai', type: 'service', layer: 'external', purpose: 'OpenAI SDK', critical: true },
30
+ { packageName: 'langchain', type: 'service', layer: 'external', purpose: 'LangChain framework', critical: true },
31
+ { packageName: 'transformers', type: 'npm', layer: 'backend', purpose: 'Hugging Face Transformers', critical: false },
32
+ // External services
33
+ { packageName: 'stripe', type: 'service', layer: 'external', purpose: 'Stripe payments', critical: true },
34
+ { packageName: 'twilio', type: 'service', layer: 'external', purpose: 'Twilio SMS/Voice', critical: false },
35
+ { packageName: 'boto3', type: 'infra', layer: 'infra', purpose: 'AWS SDK', critical: false },
36
+ { packageName: 'google-cloud-storage', type: 'infra', layer: 'infra', purpose: 'Google Cloud Storage', critical: false },
37
+ ];
38
+ // =============================================================================
39
+ // REQUIREMENTS.TXT PARSING
40
+ // =============================================================================
41
+ /**
42
+ * Scan for Python packages in a project
43
+ */
44
+ export async function scanPipPackages(projectRoot) {
45
+ const components = [];
46
+ const warnings = [];
47
+ const timestamp = Date.now();
48
+ // Scan requirements.txt
49
+ const requirementsPath = path.join(projectRoot, 'requirements.txt');
50
+ if (fs.existsSync(requirementsPath)) {
51
+ const result = await parseRequirementsTxt(requirementsPath, timestamp);
52
+ components.push(...result.components);
53
+ warnings.push(...result.warnings);
54
+ }
55
+ // Scan pyproject.toml
56
+ const pyprojectPath = path.join(projectRoot, 'pyproject.toml');
57
+ if (fs.existsSync(pyprojectPath)) {
58
+ const result = await parsePyprojectToml(pyprojectPath, timestamp);
59
+ components.push(...result.components);
60
+ warnings.push(...result.warnings);
61
+ }
62
+ // Deduplicate by name (prefer pyproject.toml version if both exist)
63
+ const seen = new Map();
64
+ for (const component of components) {
65
+ if (!seen.has(component.name)) {
66
+ seen.set(component.name, component);
67
+ }
68
+ }
69
+ return {
70
+ components: Array.from(seen.values()),
71
+ connections: [],
72
+ warnings,
73
+ };
74
+ }
75
+ /**
76
+ * Parse requirements.txt file
77
+ */
78
+ async function parseRequirementsTxt(filePath, timestamp) {
79
+ const components = [];
80
+ const warnings = [];
81
+ try {
82
+ const content = await fs.promises.readFile(filePath, 'utf-8');
83
+ const lines = content.split('\n');
84
+ for (const line of lines) {
85
+ const trimmed = line.trim();
86
+ // Skip comments and empty lines
87
+ if (!trimmed || trimmed.startsWith('#'))
88
+ continue;
89
+ // Skip -r includes and other flags
90
+ if (trimmed.startsWith('-'))
91
+ continue;
92
+ // Parse package name and version
93
+ const parsed = parseRequirementLine(trimmed);
94
+ if (parsed) {
95
+ const component = createComponentFromPackage(parsed.name, parsed.version, filePath, timestamp);
96
+ components.push(component);
97
+ }
98
+ }
99
+ }
100
+ catch (error) {
101
+ warnings.push({
102
+ type: 'parse_error',
103
+ message: `Failed to parse requirements.txt: ${error}`,
104
+ file: filePath,
105
+ });
106
+ }
107
+ return { components, warnings };
108
+ }
109
+ /**
110
+ * Parse a single requirement line
111
+ */
112
+ function parseRequirementLine(line) {
113
+ // Handle various formats:
114
+ // package==1.0.0
115
+ // package>=1.0.0
116
+ // package~=1.0.0
117
+ // package[extra]==1.0.0
118
+ // package @ https://...
119
+ // Remove extras like [extra1,extra2]
120
+ const withoutExtras = line.replace(/\[.*?\]/, '');
121
+ // Split by version specifier
122
+ const match = withoutExtras.match(/^([a-zA-Z0-9_-]+)\s*([@<>=!~]+.*)?$/);
123
+ if (!match)
124
+ return null;
125
+ const name = match[1].toLowerCase();
126
+ let version;
127
+ if (match[2]) {
128
+ // Extract version number from specifier
129
+ const versionMatch = match[2].match(/[<>=!~]+\s*(\d+[\d.]*\d*)/);
130
+ if (versionMatch) {
131
+ version = versionMatch[1];
132
+ }
133
+ }
134
+ return { name, version };
135
+ }
136
+ /**
137
+ * Parse pyproject.toml file (basic parsing)
138
+ */
139
+ async function parsePyprojectToml(filePath, timestamp) {
140
+ const components = [];
141
+ const warnings = [];
142
+ try {
143
+ const content = await fs.promises.readFile(filePath, 'utf-8');
144
+ // Basic TOML parsing for dependencies
145
+ // Look for [project.dependencies] or [tool.poetry.dependencies]
146
+ const dependencyMatches = content.match(/\[(?:project\.dependencies|tool\.poetry\.dependencies)\]([\s\S]*?)(?=\[|$)/);
147
+ if (dependencyMatches) {
148
+ const section = dependencyMatches[1];
149
+ const lines = section.split('\n');
150
+ for (const line of lines) {
151
+ const trimmed = line.trim();
152
+ if (!trimmed || trimmed.startsWith('#'))
153
+ continue;
154
+ // Parse "package = version" or "package = {version = ...}"
155
+ const match = trimmed.match(/^([a-zA-Z0-9_-]+)\s*=\s*["']?([^"'\s}]+)/);
156
+ if (match) {
157
+ const name = match[1].toLowerCase();
158
+ const version = match[2].replace(/[^0-9.]/g, '');
159
+ const component = createComponentFromPackage(name, version || undefined, filePath, timestamp);
160
+ components.push(component);
161
+ }
162
+ }
163
+ }
164
+ // Also check for dependencies array format
165
+ const arrayMatch = content.match(/dependencies\s*=\s*\[([\s\S]*?)\]/);
166
+ if (arrayMatch) {
167
+ const deps = arrayMatch[1].match(/"([^"]+)"/g) || [];
168
+ for (const dep of deps) {
169
+ const parsed = parseRequirementLine(dep.replace(/"/g, ''));
170
+ if (parsed) {
171
+ const component = createComponentFromPackage(parsed.name, parsed.version, filePath, timestamp);
172
+ components.push(component);
173
+ }
174
+ }
175
+ }
176
+ }
177
+ catch (error) {
178
+ warnings.push({
179
+ type: 'parse_error',
180
+ message: `Failed to parse pyproject.toml: ${error}`,
181
+ file: filePath,
182
+ });
183
+ }
184
+ return { components, warnings };
185
+ }
186
+ /**
187
+ * Create a component from a Python package
188
+ */
189
+ function createComponentFromPackage(name, version, configFile, timestamp) {
190
+ // Check if this matches a known framework/service
191
+ const signature = PYTHON_SIGNATURES.find((s) => s.packageName.toLowerCase() === name.toLowerCase());
192
+ const type = signature?.type || 'pip';
193
+ const layer = signature?.layer || 'backend';
194
+ const purpose = signature?.purpose || `Python package`;
195
+ const critical = signature?.critical ?? true;
196
+ return {
197
+ component_id: generateComponentId('pip', name),
198
+ name,
199
+ version,
200
+ type,
201
+ role: {
202
+ purpose,
203
+ layer,
204
+ critical,
205
+ },
206
+ source: {
207
+ detection_method: 'auto',
208
+ config_files: [configFile],
209
+ confidence: 1.0,
210
+ },
211
+ connects_to: [],
212
+ connected_from: [],
213
+ status: 'active',
214
+ tags: ['pip', type, layer],
215
+ timestamp,
216
+ last_updated: timestamp,
217
+ };
218
+ }
219
+ /**
220
+ * Check if pip/Python is used in this project
221
+ */
222
+ export function detectPip(projectRoot) {
223
+ return (fs.existsSync(path.join(projectRoot, 'requirements.txt')) ||
224
+ fs.existsSync(path.join(projectRoot, 'pyproject.toml')) ||
225
+ fs.existsSync(path.join(projectRoot, 'setup.py')) ||
226
+ fs.existsSync(path.join(projectRoot, 'Pipfile')));
227
+ }
228
+ //# sourceMappingURL=pip.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"pip.js","sourceRoot":"","sources":["../../../src/scanners/packages/pip.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,119 @@
1
+ /**
2
+ * Prompt Detector
3
+ *
4
+ * Detects AI prompt patterns in source code using regex patterns.
5
+ * For more accurate detection, use the AST-based extractor.
6
+ */
7
+ import { DetectedPrompt, PromptPattern, PromptWarning } from './types.js';
8
+ /**
9
+ * Patterns for detecting AI API calls
10
+ */
11
+ export declare const AI_CALL_PATTERNS: PromptPattern[];
12
+ /**
13
+ * Patterns for detecting prompt definitions
14
+ */
15
+ export declare const PROMPT_DEFINITION_PATTERNS: RegExp[];
16
+ /**
17
+ * Patterns for detecting template variables
18
+ */
19
+ export declare const TEMPLATE_VARIABLE_PATTERNS: RegExp[];
20
+ export interface DetectorOptions {
21
+ maxPromptLength?: number;
22
+ includeRawContent?: boolean;
23
+ detectVariables?: boolean;
24
+ }
25
+ /**
26
+ * Detects prompts in source files using regex patterns
27
+ */
28
+ export declare class PromptDetector {
29
+ private options;
30
+ constructor(options?: DetectorOptions);
31
+ /**
32
+ * Scan a project for prompts
33
+ */
34
+ scanProject(projectRoot: string): Promise<{
35
+ prompts: DetectedPrompt[];
36
+ warnings: PromptWarning[];
37
+ }>;
38
+ /**
39
+ * Detect prompts in a single file
40
+ */
41
+ detectInFile(filePath: string, content: string): DetectedPrompt[];
42
+ /**
43
+ * Find AI API calls in the file
44
+ */
45
+ private findAPICalls;
46
+ /**
47
+ * Find prompt definitions in content
48
+ */
49
+ private findPromptDefinitions;
50
+ /**
51
+ * Find the end of an array definition
52
+ */
53
+ private findArrayEnd;
54
+ /**
55
+ * Find the end of a string definition
56
+ */
57
+ private findStringEnd;
58
+ /**
59
+ * Find the end of a Python multi-line string
60
+ */
61
+ private findPythonStringEnd;
62
+ /**
63
+ * Build a DetectedPrompt from a match
64
+ */
65
+ private buildPromptFromMatch;
66
+ /**
67
+ * Extract messages from a messages array
68
+ */
69
+ private extractMessages;
70
+ /**
71
+ * Extract a single message from string content
72
+ */
73
+ private extractSingleMessage;
74
+ /**
75
+ * Detect template variables in content
76
+ */
77
+ private detectVariables;
78
+ /**
79
+ * Find the containing function for a line
80
+ */
81
+ private findContainingFunction;
82
+ /**
83
+ * Find nearest API call to a line
84
+ */
85
+ private findNearestAPICall;
86
+ /**
87
+ * Extract purpose from comments near the prompt
88
+ */
89
+ private extractPurpose;
90
+ /**
91
+ * Detect template syntax used
92
+ */
93
+ private detectTemplateSyntax;
94
+ /**
95
+ * Generate tags from content
96
+ */
97
+ private generateTags;
98
+ /**
99
+ * Detect prompt category
100
+ */
101
+ private detectCategory;
102
+ /**
103
+ * Calculate detection confidence
104
+ */
105
+ private calculateConfidence;
106
+ /**
107
+ * Generate a unique prompt ID
108
+ */
109
+ private generatePromptId;
110
+ /**
111
+ * Generate a prompt name from context
112
+ */
113
+ private generatePromptName;
114
+ }
115
+ /**
116
+ * Create a default detector instance
117
+ */
118
+ export declare function createDetector(options?: DetectorOptions): PromptDetector;
119
+ //# sourceMappingURL=detector.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"detector.d.ts","sourceRoot":"","sources":["../../../src/scanners/prompts/detector.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAKH,OAAO,EACL,cAAc,EAEd,aAAa,EAEb,aAAa,EAEd,MAAM,YAAY,CAAC;AAMpB;;GAEG;AACH,eAAO,MAAM,gBAAgB,EAAE,aAAa,EA4D3C,CAAC;AAEF;;GAEG;AACH,eAAO,MAAM,0BAA0B,UAgBtC,CAAC;AAEF;;GAEG;AACH,eAAO,MAAM,0BAA0B,UAYtC,CAAC;AAMF,MAAM,WAAW,eAAe;IAC9B,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB,iBAAiB,CAAC,EAAE,OAAO,CAAC;IAC5B,eAAe,CAAC,EAAE,OAAO,CAAC;CAC3B;AAED;;GAEG;AACH,qBAAa,cAAc;IACzB,OAAO,CAAC,OAAO,CAA4B;gBAE/B,OAAO,GAAE,eAAoB;IAQzC;;OAEG;IACG,WAAW,CAAC,WAAW,EAAE,MAAM,GAAG,OAAO,CAAC;QAC9C,OAAO,EAAE,cAAc,EAAE,CAAC;QAC1B,QAAQ,EAAE,aAAa,EAAE,CAAC;KAC3B,CAAC;IAuCF;;OAEG;IACH,YAAY,CAAC,QAAQ,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,GAAG,cAAc,EAAE;IAoBjE;;OAEG;IACH,OAAO,CAAC,YAAY;IAuBpB;;OAEG;IACH,OAAO,CAAC,qBAAqB;IAiE7B;;OAEG;IACH,OAAO,CAAC,YAAY;IAqCpB;;OAEG;IACH,OAAO,CAAC,aAAa;IAqBrB;;OAEG;IACH,OAAO,CAAC,mBAAmB;IAqB3B;;OAEG;IACH,OAAO,CAAC,oBAAoB;IA0E5B;;OAEG;IACH,OAAO,CAAC,eAAe;IA4BvB;;OAEG;IACH,OAAO,CAAC,oBAAoB;IAsB5B;;OAEG;IACH,OAAO,CAAC,eAAe;IAwBvB;;OAEG;IACH,OAAO,CAAC,sBAAsB;IAwB9B;;OAEG;IACH,OAAO,CAAC,kBAAkB;IAsB1B;;OAEG;IACH,OAAO,CAAC,cAAc;IA+BtB;;OAEG;IACH,OAAO,CAAC,oBAAoB;IAS5B;;OAEG;IACH,OAAO,CAAC,YAAY;IAcpB;;OAEG;IACH,OAAO,CAAC,cAAc;IAgBtB;;OAEG;IACH,OAAO,CAAC,mBAAmB;IAa3B;;OAEG;IACH,OAAO,CAAC,gBAAgB;IAKxB;;OAEG;IACH,OAAO,CAAC,kBAAkB;CAS3B;AAED;;GAEG;AACH,wBAAgB,cAAc,CAAC,OAAO,CAAC,EAAE,eAAe,GAAG,cAAc,CAExE"}