asciikit-mcp 2.0.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 (35) hide show
  1. package/README.md +174 -0
  2. package/dist/index.d.ts +9 -0
  3. package/dist/index.d.ts.map +1 -0
  4. package/dist/index.js +170 -0
  5. package/dist/index.js.map +1 -0
  6. package/dist/lib/license-validator.d.ts +30 -0
  7. package/dist/lib/license-validator.d.ts.map +1 -0
  8. package/dist/lib/license-validator.js +78 -0
  9. package/dist/lib/license-validator.js.map +1 -0
  10. package/dist/lib/pattern-loader-v2.d.ts +45 -0
  11. package/dist/lib/pattern-loader-v2.d.ts.map +1 -0
  12. package/dist/lib/pattern-loader-v2.js +101 -0
  13. package/dist/lib/pattern-loader-v2.js.map +1 -0
  14. package/dist/lib/pattern-loader.d.ts +46 -0
  15. package/dist/lib/pattern-loader.d.ts.map +1 -0
  16. package/dist/lib/pattern-loader.js +116 -0
  17. package/dist/lib/pattern-loader.js.map +1 -0
  18. package/dist/patterns/bundle.json +104 -0
  19. package/dist/src/index.d.ts +9 -0
  20. package/dist/src/index.d.ts.map +1 -0
  21. package/dist/src/index.js +171 -0
  22. package/dist/src/index.js.map +1 -0
  23. package/dist/src/lib/license-validator.d.ts +30 -0
  24. package/dist/src/lib/license-validator.d.ts.map +1 -0
  25. package/dist/src/lib/license-validator.js +78 -0
  26. package/dist/src/lib/license-validator.js.map +1 -0
  27. package/dist/src/lib/pattern-loader-v2.d.ts +45 -0
  28. package/dist/src/lib/pattern-loader-v2.d.ts.map +1 -0
  29. package/dist/src/lib/pattern-loader-v2.js +109 -0
  30. package/dist/src/lib/pattern-loader-v2.js.map +1 -0
  31. package/dist/src/types/index.d.ts +19 -0
  32. package/dist/src/types/index.d.ts.map +1 -0
  33. package/dist/src/types/index.js +5 -0
  34. package/dist/src/types/index.js.map +1 -0
  35. package/package.json +48 -0
package/README.md ADDED
@@ -0,0 +1,174 @@
1
+ # AsciiKit MCP Server
2
+
3
+ Professional ASCII wireframe patterns for AI-assisted design with Claude Code.
4
+
5
+ ## Installation
6
+
7
+ ```bash
8
+ npm install -g asciikit-mcp
9
+ ```
10
+
11
+ ## Setup
12
+
13
+ ### 1. Get Your License Key
14
+
15
+ - **Trial (7 days, free):** Visit [asciikit.com/trial](https://asciikit.com/trial)
16
+ - **Subscribe ($19/mo or $190/yr):** Visit [asciikit.com/subscribe](https://asciikit.com/subscribe)
17
+
18
+ ### 2. Configure Claude Code
19
+
20
+ Add to your Claude Code MCP settings file:
21
+
22
+ **Location:**
23
+ - macOS: `~/Library/Application Support/Claude/claude_desktop_config.json`
24
+ - Windows: `%APPDATA%/Claude/claude_desktop_config.json`
25
+ - Linux: `~/.config/Claude/claude_desktop_config.json`
26
+
27
+ **Configuration:**
28
+ ```json
29
+ {
30
+ "mcpServers": {
31
+ "asciikit": {
32
+ "command": "asciikit-mcp",
33
+ "env": {
34
+ "ASCIIKIT_LICENSE_KEY": "your-license-key-here"
35
+ }
36
+ }
37
+ }
38
+ }
39
+ ```
40
+
41
+ ### 3. Restart Claude Code
42
+
43
+ Restart Claude Code to load the MCP server.
44
+
45
+ ### 4. Verify Installation
46
+
47
+ In Claude Code, ask:
48
+
49
+ > "List available AsciiKit patterns"
50
+
51
+ You should see 82 patterns organized by category.
52
+
53
+ ## Usage
54
+
55
+ ### Basic Usage
56
+
57
+ Simply describe what you want to build:
58
+
59
+ > "I'm building a fitness app. I need a dashboard showing workout stats and progress charts."
60
+
61
+ Claude will autonomously select appropriate patterns and generate wireframes.
62
+
63
+ ### Advanced Usage
64
+
65
+ **Search for patterns:**
66
+ > "Search AsciiKit for authentication patterns"
67
+
68
+ **List categories:**
69
+ > "What categories are available in AsciiKit?"
70
+
71
+ **Browse patterns:**
72
+ > "Show me all patterns in the dashboards category"
73
+
74
+ **Combine patterns:**
75
+ > "Create a shopping cart screen using product list and checkout patterns"
76
+
77
+ ## What's Included
78
+
79
+ - **82 Professional Patterns:**
80
+ - Authentication (7 patterns)
81
+ - Navigation (8 patterns)
82
+ - Forms & Input (10 patterns)
83
+ - Dashboards & Analytics (10 patterns)
84
+ - Social Features (8 patterns)
85
+ - Shopping & Commerce (4 patterns)
86
+ - Media & Content (7 patterns)
87
+ - Settings (5 patterns)
88
+ - And more...
89
+
90
+ - **5 Advanced Workflows:**
91
+ - Goal-based design
92
+ - Full app specs
93
+ - Multi-screen flows
94
+ - Comparison & A/B testing
95
+ - Iterative refinement
96
+
97
+ ## Troubleshooting
98
+
99
+ ### "License validation failed"
100
+
101
+ **Check:**
102
+ 1. License key is correct (copy/paste from email)
103
+ 2. Subscription is active at [asciikit.com](https://asciikit.com)
104
+ 3. No typos in MCP config file
105
+
106
+ **Still not working?**
107
+ Email: hello@asciikit.com
108
+
109
+ ### "Patterns not loaded"
110
+
111
+ **Check:**
112
+ 1. npm package installed: `npm list -g asciikit-mcp`
113
+ 2. License key is valid
114
+ 3. Restart Claude Code
115
+
116
+ ### "Module not found"
117
+
118
+ **Fix:**
119
+ ```bash
120
+ npm uninstall -g asciikit-mcp
121
+ npm install -g asciikit-mcp
122
+ ```
123
+
124
+ Restart Claude Code.
125
+
126
+ ## License Management
127
+
128
+ ### Check License Status
129
+
130
+ Your license auto-validates every 24 hours. If your subscription expires or is cancelled, the MCP server will stop working at the next validation.
131
+
132
+ ### Trial Expiring
133
+
134
+ You'll see warnings when your trial has 2 days or less remaining:
135
+
136
+ ```
137
+ ⏰ Your trial expires in 2 days!
138
+ Subscribe at: https://asciikit.com/subscribe
139
+ ```
140
+
141
+ ### Manage Subscription
142
+
143
+ - View/update payment: [Stripe Customer Portal](https://billing.stripe.com/p/login/...)
144
+ - Cancel anytime (no questions asked)
145
+ - Reactivate anytime (same license key)
146
+
147
+ ## Updates
148
+
149
+ To get the latest patterns and features:
150
+
151
+ ```bash
152
+ npm update -g asciikit-mcp
153
+ ```
154
+
155
+ Restart Claude Code to load the new version.
156
+
157
+ ## Support
158
+
159
+ - **Email:** hello@asciikit.com
160
+ - **Documentation:** [docs.asciikit.com](https://docs.asciikit.com)
161
+ - **Examples:** [asciikit.com/examples](https://asciikit.com/examples)
162
+
163
+ ## Privacy
164
+
165
+ - License validated on startup and every 24 hours
166
+ - No usage data collected
167
+ - Patterns decrypted in-memory only (never written to disk)
168
+ - IP address logged for abuse prevention
169
+
170
+ ---
171
+
172
+ **Version:** 2.0.0
173
+ **License:** Proprietary
174
+ **Copyright:** © 2026 AsciiKit
@@ -0,0 +1,9 @@
1
+ #!/usr/bin/env node
2
+ /**
3
+ * AsciiKit MCP Server
4
+ *
5
+ * Provides ASCII wireframe patterns to Claude Code via MCP protocol
6
+ * Requires valid license key for decryption and access
7
+ */
8
+ export {};
9
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";AACA;;;;;GAKG"}
package/dist/index.js ADDED
@@ -0,0 +1,170 @@
1
+ #!/usr/bin/env node
2
+ /**
3
+ * AsciiKit MCP Server
4
+ *
5
+ * Provides ASCII wireframe patterns to Claude Code via MCP protocol
6
+ * Requires valid license key for decryption and access
7
+ */
8
+ import { Server } from '@modelcontextprotocol/sdk/server/index.js';
9
+ import { StdioServerTransport } from '@modelcontextprotocol/sdk/server/stdio.js';
10
+ import { CallToolRequestSchema, ListResourcesRequestSchema, ListToolsRequestSchema, ReadResourceRequestSchema, } from '@modelcontextprotocol/sdk/types.js';
11
+ import { LicenseValidator } from './lib/license-validator.js';
12
+ import { PatternLoader } from './lib/pattern-loader-v2.js';
13
+ const LICENSE_KEY = process.env.ASCIIKIT_LICENSE_KEY;
14
+ const LICENSE_API_URL = process.env.ASCIIKIT_LICENSE_API_URL || 'https://asciikit-license-api.currently-studio.workers.dev';
15
+ if (!LICENSE_KEY) {
16
+ console.error('❌ Error: ASCIIKIT_LICENSE_KEY environment variable not set');
17
+ console.error('');
18
+ console.error('Please configure your license key in Claude Code MCP settings:');
19
+ console.error('{');
20
+ console.error(' "mcpServers": {');
21
+ console.error(' "asciikit": {');
22
+ console.error(' "command": "asciikit-mcp",');
23
+ console.error(' "env": {');
24
+ console.error(' "ASCIIKIT_LICENSE_KEY": "your-license-key-here"');
25
+ console.error(' }');
26
+ console.error(' }');
27
+ console.error(' }');
28
+ console.error('}');
29
+ console.error('');
30
+ console.error('Get your license at: https://asciikit.com');
31
+ process.exit(1);
32
+ }
33
+ async function main() {
34
+ console.error('🚀 Starting AsciiKit MCP Server...');
35
+ // Validate license
36
+ const validator = new LicenseValidator(LICENSE_API_URL, LICENSE_KEY);
37
+ const isValid = await validator.validate();
38
+ if (!isValid) {
39
+ console.error('❌ License validation failed');
40
+ console.error('');
41
+ console.error('Your license key is invalid, expired, or has been revoked.');
42
+ console.error('');
43
+ console.error('To continue using AsciiKit:');
44
+ console.error('1. Check your license key is correct');
45
+ console.error('2. Verify your subscription is active at https://asciikit.com');
46
+ console.error('3. Contact support: hello@asciikit.com');
47
+ process.exit(1);
48
+ }
49
+ console.error('✅ License validated successfully');
50
+ // Load patterns (no encryption - license validation is the protection)
51
+ const patternLoader = new PatternLoader();
52
+ await patternLoader.load();
53
+ console.error(`✅ Loaded ${patternLoader.getPatternCount()} patterns`);
54
+ // Create MCP server
55
+ const server = new Server({
56
+ name: 'asciikit',
57
+ version: '2.0.0',
58
+ }, {
59
+ capabilities: {
60
+ resources: {},
61
+ tools: {},
62
+ },
63
+ });
64
+ // List available patterns as resources
65
+ server.setRequestHandler(ListResourcesRequestSchema, async () => {
66
+ const patterns = patternLoader.listPatterns();
67
+ return {
68
+ resources: patterns.map((patternId) => ({
69
+ uri: `asciikit://patterns/${patternId}`,
70
+ name: patternId.replace(/\//g, ' / '),
71
+ mimeType: 'text/markdown',
72
+ description: `ASCII wireframe pattern: ${patternId}`,
73
+ })),
74
+ };
75
+ });
76
+ // Read pattern content
77
+ server.setRequestHandler(ReadResourceRequestSchema, async (request) => {
78
+ const url = new URL(request.params.uri);
79
+ const patternId = url.pathname.replace('/patterns/', '');
80
+ const content = patternLoader.getPattern(patternId);
81
+ if (!content) {
82
+ throw new Error(`Pattern not found: ${patternId}`);
83
+ }
84
+ return {
85
+ contents: [
86
+ {
87
+ uri: request.params.uri,
88
+ mimeType: 'text/markdown',
89
+ text: content,
90
+ },
91
+ ],
92
+ };
93
+ });
94
+ // List available tools
95
+ server.setRequestHandler(ListToolsRequestSchema, async () => {
96
+ return {
97
+ tools: [
98
+ {
99
+ name: 'search_patterns',
100
+ description: 'Search for patterns by keyword or category',
101
+ inputSchema: {
102
+ type: 'object',
103
+ properties: {
104
+ query: {
105
+ type: 'string',
106
+ description: 'Search query (pattern name, category, or keyword)',
107
+ },
108
+ },
109
+ required: ['query'],
110
+ },
111
+ },
112
+ {
113
+ name: 'list_categories',
114
+ description: 'List all available pattern categories',
115
+ inputSchema: {
116
+ type: 'object',
117
+ properties: {},
118
+ },
119
+ },
120
+ ],
121
+ };
122
+ });
123
+ // Handle tool calls
124
+ server.setRequestHandler(CallToolRequestSchema, async (request) => {
125
+ const { name, arguments: args } = request.params;
126
+ if (name === 'search_patterns') {
127
+ const query = args.query.toLowerCase();
128
+ const results = patternLoader.searchPatterns(query);
129
+ return {
130
+ content: [
131
+ {
132
+ type: 'text',
133
+ text: `Found ${results.length} patterns matching "${query}":\n\n${results.map((id) => `- ${id}`).join('\n')}`,
134
+ },
135
+ ],
136
+ };
137
+ }
138
+ if (name === 'list_categories') {
139
+ const categories = patternLoader.getCategories();
140
+ return {
141
+ content: [
142
+ {
143
+ type: 'text',
144
+ text: `Available categories (${categories.length}):\n\n${categories.map((cat) => `- ${cat}`).join('\n')}`,
145
+ },
146
+ ],
147
+ };
148
+ }
149
+ throw new Error(`Unknown tool: ${name}`);
150
+ });
151
+ // Start revalidation timer (every 24 hours)
152
+ setInterval(async () => {
153
+ console.error('🔄 Revalidating license...');
154
+ const stillValid = await validator.validate();
155
+ if (!stillValid) {
156
+ console.error('❌ License no longer valid. Shutting down.');
157
+ process.exit(1);
158
+ }
159
+ console.error('✅ License still valid');
160
+ }, 24 * 60 * 60 * 1000);
161
+ // Start server
162
+ const transport = new StdioServerTransport();
163
+ await server.connect(transport);
164
+ console.error('✨ AsciiKit MCP Server running');
165
+ }
166
+ main().catch((error) => {
167
+ console.error('Fatal error:', error);
168
+ process.exit(1);
169
+ });
170
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,30 @@
1
+ /**
2
+ * License Validator
3
+ *
4
+ * Validates license keys against the AsciiKit License API
5
+ */
6
+ import type { LicenseValidationResponse } from '../../../shared/types.js';
7
+ export declare class LicenseValidator {
8
+ private apiUrl;
9
+ private licenseKey;
10
+ private lastValidation;
11
+ constructor(apiUrl: string, licenseKey: string);
12
+ /**
13
+ * Validates license key with API
14
+ * @returns true if valid, false otherwise
15
+ */
16
+ validate(): Promise<boolean>;
17
+ /**
18
+ * Gets last validation result
19
+ */
20
+ getLastValidation(): LicenseValidationResponse | null;
21
+ /**
22
+ * Checks if license is trial
23
+ */
24
+ isTrial(): boolean;
25
+ /**
26
+ * Gets days remaining for trial licenses
27
+ */
28
+ getDaysRemaining(): number | null;
29
+ }
30
+ //# sourceMappingURL=license-validator.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"license-validator.d.ts","sourceRoot":"","sources":["../../src/lib/license-validator.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,KAAK,EAAE,yBAAyB,EAAE,MAAM,0BAA0B,CAAC;AAE1E,qBAAa,gBAAgB;IAC3B,OAAO,CAAC,MAAM,CAAS;IACvB,OAAO,CAAC,UAAU,CAAS;IAC3B,OAAO,CAAC,cAAc,CAA0C;gBAEpD,MAAM,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM;IAK9C;;;OAGG;IACG,QAAQ,IAAI,OAAO,CAAC,OAAO,CAAC;IA4ClC;;OAEG;IACH,iBAAiB,IAAI,yBAAyB,GAAG,IAAI;IAIrD;;OAEG;IACH,OAAO,IAAI,OAAO;IAIlB;;OAEG;IACH,gBAAgB,IAAI,MAAM,GAAG,IAAI;CAOlC"}
@@ -0,0 +1,78 @@
1
+ /**
2
+ * License Validator
3
+ *
4
+ * Validates license keys against the AsciiKit License API
5
+ */
6
+ export class LicenseValidator {
7
+ apiUrl;
8
+ licenseKey;
9
+ lastValidation = null;
10
+ constructor(apiUrl, licenseKey) {
11
+ this.apiUrl = apiUrl;
12
+ this.licenseKey = licenseKey;
13
+ }
14
+ /**
15
+ * Validates license key with API
16
+ * @returns true if valid, false otherwise
17
+ */
18
+ async validate() {
19
+ try {
20
+ const response = await fetch(`${this.apiUrl}/api/validate`, {
21
+ method: 'POST',
22
+ headers: {
23
+ 'Content-Type': 'application/json',
24
+ },
25
+ body: JSON.stringify({
26
+ license_key: this.licenseKey,
27
+ }),
28
+ });
29
+ if (!response.ok) {
30
+ console.error(`License API returned status ${response.status}`);
31
+ return false;
32
+ }
33
+ const data = await response.json();
34
+ this.lastValidation = data;
35
+ if (!data.valid) {
36
+ console.error(`License validation failed: ${data.reason}`);
37
+ return false;
38
+ }
39
+ // Check if trial is expiring soon
40
+ if (data.tier === 'trial' && data.expires_at) {
41
+ const daysRemaining = Math.ceil((data.expires_at - Date.now()) / (24 * 60 * 60 * 1000));
42
+ if (daysRemaining <= 2) {
43
+ console.error('');
44
+ console.error(`⏰ Your trial expires in ${daysRemaining} day${daysRemaining === 1 ? '' : 's'}!`);
45
+ console.error(' Subscribe at: https://asciikit.com/subscribe');
46
+ console.error('');
47
+ }
48
+ }
49
+ return true;
50
+ }
51
+ catch (error) {
52
+ console.error('License validation error:', error);
53
+ return false;
54
+ }
55
+ }
56
+ /**
57
+ * Gets last validation result
58
+ */
59
+ getLastValidation() {
60
+ return this.lastValidation;
61
+ }
62
+ /**
63
+ * Checks if license is trial
64
+ */
65
+ isTrial() {
66
+ return this.lastValidation?.tier === 'trial';
67
+ }
68
+ /**
69
+ * Gets days remaining for trial licenses
70
+ */
71
+ getDaysRemaining() {
72
+ if (!this.lastValidation || this.lastValidation.tier !== 'trial' || !this.lastValidation.expires_at) {
73
+ return null;
74
+ }
75
+ return Math.ceil((this.lastValidation.expires_at - Date.now()) / (24 * 60 * 60 * 1000));
76
+ }
77
+ }
78
+ //# sourceMappingURL=license-validator.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"license-validator.js","sourceRoot":"","sources":["../../src/lib/license-validator.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAIH,MAAM,OAAO,gBAAgB;IACnB,MAAM,CAAS;IACf,UAAU,CAAS;IACnB,cAAc,GAAqC,IAAI,CAAC;IAEhE,YAAY,MAAc,EAAE,UAAkB;QAC5C,IAAI,CAAC,MAAM,GAAG,MAAM,CAAC;QACrB,IAAI,CAAC,UAAU,GAAG,UAAU,CAAC;IAC/B,CAAC;IAED;;;OAGG;IACH,KAAK,CAAC,QAAQ;QACZ,IAAI,CAAC;YACH,MAAM,QAAQ,GAAG,MAAM,KAAK,CAAC,GAAG,IAAI,CAAC,MAAM,eAAe,EAAE;gBAC1D,MAAM,EAAE,MAAM;gBACd,OAAO,EAAE;oBACP,cAAc,EAAE,kBAAkB;iBACnC;gBACD,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC;oBACnB,WAAW,EAAE,IAAI,CAAC,UAAU;iBAC7B,CAAC;aACH,CAAC,CAAC;YAEH,IAAI,CAAC,QAAQ,CAAC,EAAE,EAAE,CAAC;gBACjB,OAAO,CAAC,KAAK,CAAC,+BAA+B,QAAQ,CAAC,MAAM,EAAE,CAAC,CAAC;gBAChE,OAAO,KAAK,CAAC;YACf,CAAC;YAED,MAAM,IAAI,GAA8B,MAAM,QAAQ,CAAC,IAAI,EAAE,CAAC;YAC9D,IAAI,CAAC,cAAc,GAAG,IAAI,CAAC;YAE3B,IAAI,CAAC,IAAI,CAAC,KAAK,EAAE,CAAC;gBAChB,OAAO,CAAC,KAAK,CAAC,8BAA8B,IAAI,CAAC,MAAM,EAAE,CAAC,CAAC;gBAC3D,OAAO,KAAK,CAAC;YACf,CAAC;YAED,kCAAkC;YAClC,IAAI,IAAI,CAAC,IAAI,KAAK,OAAO,IAAI,IAAI,CAAC,UAAU,EAAE,CAAC;gBAC7C,MAAM,aAAa,GAAG,IAAI,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,UAAU,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC,GAAG,CAAC,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,IAAI,CAAC,CAAC,CAAC;gBAExF,IAAI,aAAa,IAAI,CAAC,EAAE,CAAC;oBACvB,OAAO,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC;oBAClB,OAAO,CAAC,KAAK,CAAC,2BAA2B,aAAa,OAAO,aAAa,KAAK,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,GAAG,GAAG,CAAC,CAAC;oBAChG,OAAO,CAAC,KAAK,CAAC,iDAAiD,CAAC,CAAC;oBACjE,OAAO,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC;gBACpB,CAAC;YACH,CAAC;YAED,OAAO,IAAI,CAAC;QACd,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,OAAO,CAAC,KAAK,CAAC,2BAA2B,EAAE,KAAK,CAAC,CAAC;YAClD,OAAO,KAAK,CAAC;QACf,CAAC;IACH,CAAC;IAED;;OAEG;IACH,iBAAiB;QACf,OAAO,IAAI,CAAC,cAAc,CAAC;IAC7B,CAAC;IAED;;OAEG;IACH,OAAO;QACL,OAAO,IAAI,CAAC,cAAc,EAAE,IAAI,KAAK,OAAO,CAAC;IAC/C,CAAC;IAED;;OAEG;IACH,gBAAgB;QACd,IAAI,CAAC,IAAI,CAAC,cAAc,IAAI,IAAI,CAAC,cAAc,CAAC,IAAI,KAAK,OAAO,IAAI,CAAC,IAAI,CAAC,cAAc,CAAC,UAAU,EAAE,CAAC;YACpG,OAAO,IAAI,CAAC;QACd,CAAC;QAED,OAAO,IAAI,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,cAAc,CAAC,UAAU,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC,GAAG,CAAC,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,IAAI,CAAC,CAAC,CAAC;IAC1F,CAAC;CACF"}
@@ -0,0 +1,45 @@
1
+ /**
2
+ * Pattern Loader (No Encryption)
3
+ *
4
+ * Loads patterns from unencrypted bundle
5
+ * License validation is done separately - this just loads the patterns
6
+ */
7
+ export declare class PatternLoader {
8
+ private patterns;
9
+ private version;
10
+ private categories;
11
+ private loaded;
12
+ /**
13
+ * Loads patterns from bundle file
14
+ */
15
+ load(): Promise<void>;
16
+ /**
17
+ * Gets a specific pattern by ID
18
+ */
19
+ getPattern(patternId: string): string | null;
20
+ /**
21
+ * Lists all available pattern IDs
22
+ */
23
+ listPatterns(): string[];
24
+ /**
25
+ * Searches patterns by query
26
+ */
27
+ searchPatterns(query: string): string[];
28
+ /**
29
+ * Gets all categories
30
+ */
31
+ getCategories(): string[];
32
+ /**
33
+ * Gets pattern count
34
+ */
35
+ getPatternCount(): number;
36
+ /**
37
+ * Gets pattern version
38
+ */
39
+ getVersion(): string;
40
+ /**
41
+ * Checks if patterns are loaded
42
+ */
43
+ isLoaded(): boolean;
44
+ }
45
+ //# sourceMappingURL=pattern-loader-v2.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"pattern-loader-v2.d.ts","sourceRoot":"","sources":["../../src/lib/pattern-loader-v2.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAiBH,qBAAa,aAAa;IACxB,OAAO,CAAC,QAAQ,CAA8B;IAC9C,OAAO,CAAC,OAAO,CAAqB;IACpC,OAAO,CAAC,UAAU,CAAgB;IAClC,OAAO,CAAC,MAAM,CAAkB;IAEhC;;OAEG;IACG,IAAI,IAAI,OAAO,CAAC,IAAI,CAAC;IAsB3B;;OAEG;IACH,UAAU,CAAC,SAAS,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI;IAQ5C;;OAEG;IACH,YAAY,IAAI,MAAM,EAAE;IAQxB;;OAEG;IACH,cAAc,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,EAAE;IAgBvC;;OAEG;IACH,aAAa,IAAI,MAAM,EAAE;IAQzB;;OAEG;IACH,eAAe,IAAI,MAAM;IAIzB;;OAEG;IACH,UAAU,IAAI,MAAM;IAIpB;;OAEG;IACH,QAAQ,IAAI,OAAO;CAGpB"}
@@ -0,0 +1,101 @@
1
+ /**
2
+ * Pattern Loader (No Encryption)
3
+ *
4
+ * Loads patterns from unencrypted bundle
5
+ * License validation is done separately - this just loads the patterns
6
+ */
7
+ import * as fs from 'fs/promises';
8
+ import * as path from 'path';
9
+ import { fileURLToPath } from 'url';
10
+ const __filename = fileURLToPath(import.meta.url);
11
+ const __dirname = path.dirname(__filename);
12
+ export class PatternLoader {
13
+ patterns = {};
14
+ version = 'unknown';
15
+ categories = [];
16
+ loaded = false;
17
+ /**
18
+ * Loads patterns from bundle file
19
+ */
20
+ async load() {
21
+ try {
22
+ // Read pattern bundle
23
+ const bundlePath = path.join(__dirname, '../../patterns/bundle.json');
24
+ const bundleContent = await fs.readFile(bundlePath, 'utf-8');
25
+ const bundle = JSON.parse(bundleContent);
26
+ // Store patterns in memory
27
+ this.patterns = bundle.patterns;
28
+ this.version = bundle.version;
29
+ this.categories = bundle.categories;
30
+ this.loaded = true;
31
+ }
32
+ catch (error) {
33
+ if (error instanceof Error && error.message.includes('ENOENT')) {
34
+ throw new Error('Pattern bundle not found. Run "npm run build:patterns" to generate it.');
35
+ }
36
+ throw error;
37
+ }
38
+ }
39
+ /**
40
+ * Gets a specific pattern by ID
41
+ */
42
+ getPattern(patternId) {
43
+ if (!this.loaded) {
44
+ throw new Error('Patterns not loaded. Call load() first.');
45
+ }
46
+ return this.patterns[patternId] || null;
47
+ }
48
+ /**
49
+ * Lists all available pattern IDs
50
+ */
51
+ listPatterns() {
52
+ if (!this.loaded) {
53
+ throw new Error('Patterns not loaded. Call load() first.');
54
+ }
55
+ return Object.keys(this.patterns).sort();
56
+ }
57
+ /**
58
+ * Searches patterns by query
59
+ */
60
+ searchPatterns(query) {
61
+ if (!this.loaded) {
62
+ throw new Error('Patterns not loaded. Call load() first.');
63
+ }
64
+ const lowerQuery = query.toLowerCase();
65
+ return Object.keys(this.patterns)
66
+ .filter((id) => {
67
+ const lowerID = id.toLowerCase();
68
+ const content = this.patterns[id].toLowerCase();
69
+ return lowerID.includes(lowerQuery) || content.includes(lowerQuery);
70
+ })
71
+ .sort();
72
+ }
73
+ /**
74
+ * Gets all categories
75
+ */
76
+ getCategories() {
77
+ if (!this.loaded) {
78
+ throw new Error('Patterns not loaded. Call load() first.');
79
+ }
80
+ return this.categories;
81
+ }
82
+ /**
83
+ * Gets pattern count
84
+ */
85
+ getPatternCount() {
86
+ return Object.keys(this.patterns).length;
87
+ }
88
+ /**
89
+ * Gets pattern version
90
+ */
91
+ getVersion() {
92
+ return this.version;
93
+ }
94
+ /**
95
+ * Checks if patterns are loaded
96
+ */
97
+ isLoaded() {
98
+ return this.loaded;
99
+ }
100
+ }
101
+ //# sourceMappingURL=pattern-loader-v2.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"pattern-loader-v2.js","sourceRoot":"","sources":["../../src/lib/pattern-loader-v2.ts"],"names":[],"mappings":"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"}