cursor-recursive-rag 0.2.0-alpha.1

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 (144) hide show
  1. package/README.md +354 -0
  2. package/bin/cursor-rag.js +18 -0
  3. package/dist/adapters/embeddings/index.d.ts +5 -0
  4. package/dist/adapters/embeddings/index.d.ts.map +1 -0
  5. package/dist/adapters/embeddings/index.js +16 -0
  6. package/dist/adapters/embeddings/index.js.map +1 -0
  7. package/dist/adapters/embeddings/ollama.d.ts +11 -0
  8. package/dist/adapters/embeddings/ollama.d.ts.map +1 -0
  9. package/dist/adapters/embeddings/ollama.js +30 -0
  10. package/dist/adapters/embeddings/ollama.js.map +1 -0
  11. package/dist/adapters/embeddings/openai.d.ts +11 -0
  12. package/dist/adapters/embeddings/openai.d.ts.map +1 -0
  13. package/dist/adapters/embeddings/openai.js +28 -0
  14. package/dist/adapters/embeddings/openai.js.map +1 -0
  15. package/dist/adapters/embeddings/types.d.ts +6 -0
  16. package/dist/adapters/embeddings/types.d.ts.map +1 -0
  17. package/dist/adapters/embeddings/types.js +2 -0
  18. package/dist/adapters/embeddings/types.js.map +1 -0
  19. package/dist/adapters/embeddings/xenova.d.ts +11 -0
  20. package/dist/adapters/embeddings/xenova.d.ts.map +1 -0
  21. package/dist/adapters/embeddings/xenova.js +26 -0
  22. package/dist/adapters/embeddings/xenova.js.map +1 -0
  23. package/dist/adapters/vector/chroma.d.ts +23 -0
  24. package/dist/adapters/vector/chroma.d.ts.map +1 -0
  25. package/dist/adapters/vector/chroma.js +91 -0
  26. package/dist/adapters/vector/chroma.js.map +1 -0
  27. package/dist/adapters/vector/index.d.ts +5 -0
  28. package/dist/adapters/vector/index.d.ts.map +1 -0
  29. package/dist/adapters/vector/index.js +22 -0
  30. package/dist/adapters/vector/index.js.map +1 -0
  31. package/dist/adapters/vector/memory.d.ts +22 -0
  32. package/dist/adapters/vector/memory.d.ts.map +1 -0
  33. package/dist/adapters/vector/memory.js +105 -0
  34. package/dist/adapters/vector/memory.js.map +1 -0
  35. package/dist/adapters/vector/qdrant.d.ts +14 -0
  36. package/dist/adapters/vector/qdrant.d.ts.map +1 -0
  37. package/dist/adapters/vector/qdrant.js +120 -0
  38. package/dist/adapters/vector/qdrant.js.map +1 -0
  39. package/dist/adapters/vector/redis.d.ts +31 -0
  40. package/dist/adapters/vector/redis.d.ts.map +1 -0
  41. package/dist/adapters/vector/redis.js +164 -0
  42. package/dist/adapters/vector/redis.js.map +1 -0
  43. package/dist/adapters/vector/vectorize.d.ts +10 -0
  44. package/dist/adapters/vector/vectorize.d.ts.map +1 -0
  45. package/dist/adapters/vector/vectorize.js +22 -0
  46. package/dist/adapters/vector/vectorize.js.map +1 -0
  47. package/dist/cli/commands/dashboard.d.ts +3 -0
  48. package/dist/cli/commands/dashboard.d.ts.map +1 -0
  49. package/dist/cli/commands/dashboard.js +23 -0
  50. package/dist/cli/commands/dashboard.js.map +1 -0
  51. package/dist/cli/commands/ingest.d.ts +3 -0
  52. package/dist/cli/commands/ingest.d.ts.map +1 -0
  53. package/dist/cli/commands/ingest.js +133 -0
  54. package/dist/cli/commands/ingest.js.map +1 -0
  55. package/dist/cli/commands/search.d.ts +3 -0
  56. package/dist/cli/commands/search.d.ts.map +1 -0
  57. package/dist/cli/commands/search.js +39 -0
  58. package/dist/cli/commands/search.js.map +1 -0
  59. package/dist/cli/commands/setup.d.ts +3 -0
  60. package/dist/cli/commands/setup.d.ts.map +1 -0
  61. package/dist/cli/commands/setup.js +311 -0
  62. package/dist/cli/commands/setup.js.map +1 -0
  63. package/dist/cli/commands/status.d.ts +3 -0
  64. package/dist/cli/commands/status.d.ts.map +1 -0
  65. package/dist/cli/commands/status.js +39 -0
  66. package/dist/cli/commands/status.js.map +1 -0
  67. package/dist/cli/index.d.ts +3 -0
  68. package/dist/cli/index.d.ts.map +1 -0
  69. package/dist/cli/index.js +34 -0
  70. package/dist/cli/index.js.map +1 -0
  71. package/dist/dashboard/public/index.html +819 -0
  72. package/dist/dashboard/server.d.ts +10 -0
  73. package/dist/dashboard/server.d.ts.map +1 -0
  74. package/dist/dashboard/server.js +397 -0
  75. package/dist/dashboard/server.js.map +1 -0
  76. package/dist/integrations/index.d.ts +3 -0
  77. package/dist/integrations/index.d.ts.map +1 -0
  78. package/dist/integrations/index.js +3 -0
  79. package/dist/integrations/index.js.map +1 -0
  80. package/dist/integrations/mcp-gateway.d.ts +91 -0
  81. package/dist/integrations/mcp-gateway.d.ts.map +1 -0
  82. package/dist/integrations/mcp-gateway.js +128 -0
  83. package/dist/integrations/mcp-gateway.js.map +1 -0
  84. package/dist/integrations/openskills.d.ts +67 -0
  85. package/dist/integrations/openskills.d.ts.map +1 -0
  86. package/dist/integrations/openskills.js +223 -0
  87. package/dist/integrations/openskills.js.map +1 -0
  88. package/dist/proxy/index.d.ts +29 -0
  89. package/dist/proxy/index.d.ts.map +1 -0
  90. package/dist/proxy/index.js +124 -0
  91. package/dist/proxy/index.js.map +1 -0
  92. package/dist/server/index.d.ts +2 -0
  93. package/dist/server/index.d.ts.map +1 -0
  94. package/dist/server/index.js +43 -0
  95. package/dist/server/index.js.map +1 -0
  96. package/dist/server/tools/crawl.d.ts +15 -0
  97. package/dist/server/tools/crawl.d.ts.map +1 -0
  98. package/dist/server/tools/crawl.js +97 -0
  99. package/dist/server/tools/crawl.js.map +1 -0
  100. package/dist/server/tools/gateway.d.ts +27 -0
  101. package/dist/server/tools/gateway.d.ts.map +1 -0
  102. package/dist/server/tools/gateway.js +58 -0
  103. package/dist/server/tools/gateway.js.map +1 -0
  104. package/dist/server/tools/index.d.ts +10 -0
  105. package/dist/server/tools/index.d.ts.map +1 -0
  106. package/dist/server/tools/index.js +302 -0
  107. package/dist/server/tools/index.js.map +1 -0
  108. package/dist/server/tools/ingest.d.ts +15 -0
  109. package/dist/server/tools/ingest.d.ts.map +1 -0
  110. package/dist/server/tools/ingest.js +84 -0
  111. package/dist/server/tools/ingest.js.map +1 -0
  112. package/dist/server/tools/list-sources.d.ts +9 -0
  113. package/dist/server/tools/list-sources.d.ts.map +1 -0
  114. package/dist/server/tools/list-sources.js +63 -0
  115. package/dist/server/tools/list-sources.js.map +1 -0
  116. package/dist/server/tools/recursive-query.d.ts +16 -0
  117. package/dist/server/tools/recursive-query.d.ts.map +1 -0
  118. package/dist/server/tools/recursive-query.js +65 -0
  119. package/dist/server/tools/recursive-query.js.map +1 -0
  120. package/dist/server/tools/search.d.ts +15 -0
  121. package/dist/server/tools/search.d.ts.map +1 -0
  122. package/dist/server/tools/search.js +20 -0
  123. package/dist/server/tools/search.js.map +1 -0
  124. package/dist/server/tools/skills.d.ts +30 -0
  125. package/dist/server/tools/skills.d.ts.map +1 -0
  126. package/dist/server/tools/skills.js +85 -0
  127. package/dist/server/tools/skills.js.map +1 -0
  128. package/dist/services/chunker.d.ts +3 -0
  129. package/dist/services/chunker.d.ts.map +1 -0
  130. package/dist/services/chunker.js +75 -0
  131. package/dist/services/chunker.js.map +1 -0
  132. package/dist/services/config.d.ts +8 -0
  133. package/dist/services/config.d.ts.map +1 -0
  134. package/dist/services/config.js +66 -0
  135. package/dist/services/config.js.map +1 -0
  136. package/dist/services/query-decomposer.d.ts +44 -0
  137. package/dist/services/query-decomposer.d.ts.map +1 -0
  138. package/dist/services/query-decomposer.js +79 -0
  139. package/dist/services/query-decomposer.js.map +1 -0
  140. package/dist/types/index.d.ts +93 -0
  141. package/dist/types/index.d.ts.map +1 -0
  142. package/dist/types/index.js +2 -0
  143. package/dist/types/index.js.map +1 -0
  144. package/package.json +56 -0
@@ -0,0 +1,128 @@
1
+ export class MCPGatewayClient {
2
+ config;
3
+ constructor(ragConfig) {
4
+ this.config = ragConfig.mcpGateway || {
5
+ enabled: false,
6
+ url: 'http://localhost:3010'
7
+ };
8
+ }
9
+ isEnabled() {
10
+ return this.config.enabled;
11
+ }
12
+ async request(path, options = {}) {
13
+ const headers = {
14
+ 'Content-Type': 'application/json',
15
+ ...options.headers
16
+ };
17
+ if (this.config.apiKey) {
18
+ headers['Authorization'] = `Bearer ${this.config.apiKey}`;
19
+ }
20
+ const response = await fetch(`${this.config.url}${path}`, {
21
+ ...options,
22
+ headers
23
+ });
24
+ if (!response.ok) {
25
+ throw new Error(`MCP Gateway error: ${response.status} ${response.statusText}`);
26
+ }
27
+ return response.json();
28
+ }
29
+ /**
30
+ * Search available tools in the gateway
31
+ */
32
+ async searchTools(query, options) {
33
+ const params = new URLSearchParams({ query });
34
+ if (options?.backend)
35
+ params.set('backend', options.backend);
36
+ if (options?.detailLevel)
37
+ params.set('detailLevel', options.detailLevel);
38
+ return this.request(`/api/code/tools/search?${params}`);
39
+ }
40
+ /**
41
+ * Get tool schema (lazy loading)
42
+ */
43
+ async getToolSchema(toolName, compact = true) {
44
+ const params = new URLSearchParams();
45
+ if (compact)
46
+ params.set('compact', 'true');
47
+ return this.request(`/api/code/tools/${toolName}/schema?${params}`);
48
+ }
49
+ /**
50
+ * Call a tool with optional result filtering
51
+ */
52
+ async callTool(call) {
53
+ return this.request(`/api/code/tools/${call.toolName}/call`, {
54
+ method: 'POST',
55
+ body: JSON.stringify({
56
+ args: call.args,
57
+ options: call.filter
58
+ })
59
+ });
60
+ }
61
+ /**
62
+ * Call tool with aggregation (for analytics)
63
+ */
64
+ async callToolAggregate(toolName, args, aggregation) {
65
+ return this.request(`/api/code/tools/${toolName}/call/aggregate`, {
66
+ method: 'POST',
67
+ body: JSON.stringify({ args, aggregation })
68
+ });
69
+ }
70
+ /**
71
+ * Execute code in the gateway sandbox
72
+ */
73
+ async executeCode(code, timeout = 30000) {
74
+ return this.request('/api/code/execute', {
75
+ method: 'POST',
76
+ body: JSON.stringify({ code, timeout })
77
+ });
78
+ }
79
+ /**
80
+ * List available skills from the gateway
81
+ */
82
+ async listSkills() {
83
+ return this.request('/api/code/skills');
84
+ }
85
+ /**
86
+ * Execute a gateway skill
87
+ */
88
+ async executeSkill(name, inputs = {}) {
89
+ return this.request(`/api/code/skills/${name}/execute`, {
90
+ method: 'POST',
91
+ body: JSON.stringify(inputs)
92
+ });
93
+ }
94
+ /**
95
+ * Get gateway health status
96
+ */
97
+ async getHealth() {
98
+ return this.request('/health');
99
+ }
100
+ /**
101
+ * Search the RAG knowledge base through gateway (if configured)
102
+ * This allows using the gateway's token optimization on RAG results
103
+ */
104
+ async searchWithOptimization(query, options) {
105
+ // Call through gateway's summarization endpoint if available
106
+ if (options?.summarize) {
107
+ return this.request('/api/code/tools/recursive_query/call', {
108
+ method: 'POST',
109
+ body: JSON.stringify({
110
+ args: { query },
111
+ options: {
112
+ maxTokens: options.maxTokens || 500,
113
+ format: 'summary'
114
+ }
115
+ })
116
+ });
117
+ }
118
+ return this.callTool({
119
+ toolName: 'recursive_query',
120
+ args: { query },
121
+ filter: { format: 'summary' }
122
+ });
123
+ }
124
+ }
125
+ export function createMCPGatewayClient(config) {
126
+ return new MCPGatewayClient(config);
127
+ }
128
+ //# sourceMappingURL=mcp-gateway.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"mcp-gateway.js","sourceRoot":"","sources":["../../src/integrations/mcp-gateway.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,67 @@
1
+ import type { RAGConfig } from '../types/index.js';
2
+ export interface OpenSkillsConfig {
3
+ enabled: boolean;
4
+ autoIngestSkills: boolean;
5
+ skillPaths?: string[];
6
+ }
7
+ export interface Skill {
8
+ name: string;
9
+ description: string;
10
+ location: 'project' | 'global' | 'universal';
11
+ path: string;
12
+ content?: string;
13
+ }
14
+ export interface SkillMetadata {
15
+ name: string;
16
+ description: string;
17
+ tags?: string[];
18
+ }
19
+ export declare class OpenSkillsClient {
20
+ private config;
21
+ private skillCache;
22
+ constructor(ragConfig: RAGConfig);
23
+ isEnabled(): boolean;
24
+ /**
25
+ * Check if openskills CLI is available
26
+ */
27
+ isCliAvailable(): boolean;
28
+ /**
29
+ * Discover all installed skills from configured paths
30
+ */
31
+ discoverSkills(): Skill[];
32
+ private getSkillLocation;
33
+ private parseSkillMetadata;
34
+ /**
35
+ * Read a specific skill (using openskills CLI or direct file read)
36
+ */
37
+ readSkill(name: string): Promise<Skill | null>;
38
+ /**
39
+ * List all available skills (using CLI or discovery)
40
+ */
41
+ listSkills(): Promise<Skill[]>;
42
+ /**
43
+ * Install skills from a source (GitHub repo, local path)
44
+ */
45
+ installSkills(source: string, options?: {
46
+ global?: boolean;
47
+ universal?: boolean;
48
+ }): Promise<boolean>;
49
+ /**
50
+ * Get skill content for RAG ingestion
51
+ * Returns the full SKILL.md content plus any referenced resources
52
+ */
53
+ getSkillContent(skill: Skill): string;
54
+ /**
55
+ * Convert skills to documents for RAG ingestion
56
+ */
57
+ skillsToDocuments(): Array<{
58
+ content: string;
59
+ metadata: {
60
+ source: string;
61
+ type: string;
62
+ name: string;
63
+ };
64
+ }>;
65
+ }
66
+ export declare function createOpenSkillsClient(config: RAGConfig): OpenSkillsClient;
67
+ //# sourceMappingURL=openskills.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"openskills.d.ts","sourceRoot":"","sources":["../../src/integrations/openskills.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,mBAAmB,CAAC;AAEnD,MAAM,WAAW,gBAAgB;IAC/B,OAAO,EAAE,OAAO,CAAC;IACjB,gBAAgB,EAAE,OAAO,CAAC;IAC1B,UAAU,CAAC,EAAE,MAAM,EAAE,CAAC;CACvB;AAED,MAAM,WAAW,KAAK;IACpB,IAAI,EAAE,MAAM,CAAC;IACb,WAAW,EAAE,MAAM,CAAC;IACpB,QAAQ,EAAE,SAAS,GAAG,QAAQ,GAAG,WAAW,CAAC;IAC7C,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,CAAC,EAAE,MAAM,CAAC;CAClB;AAED,MAAM,WAAW,aAAa;IAC5B,IAAI,EAAE,MAAM,CAAC;IACb,WAAW,EAAE,MAAM,CAAC;IACpB,IAAI,CAAC,EAAE,MAAM,EAAE,CAAC;CACjB;AAaD,qBAAa,gBAAgB;IAC3B,OAAO,CAAC,MAAM,CAAmB;IACjC,OAAO,CAAC,UAAU,CAAiC;gBAEvC,SAAS,EAAE,SAAS;IAQhC,SAAS,IAAI,OAAO;IAIpB;;OAEG;IACH,cAAc,IAAI,OAAO;IASzB;;OAEG;IACH,cAAc,IAAI,KAAK,EAAE;IA4CzB,OAAO,CAAC,gBAAgB;IAMxB,OAAO,CAAC,kBAAkB;IAuB1B;;OAEG;IACG,SAAS,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,KAAK,GAAG,IAAI,CAAC;IAmCpD;;OAEG;IACG,UAAU,IAAI,OAAO,CAAC,KAAK,EAAE,CAAC;IAkBpC;;OAEG;IACG,aAAa,CAAC,MAAM,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE;QAC5C,MAAM,CAAC,EAAE,OAAO,CAAC;QACjB,SAAS,CAAC,EAAE,OAAO,CAAA;KACpB,GAAG,OAAO,CAAC,OAAO,CAAC;IAkBpB;;;OAGG;IACH,eAAe,CAAC,KAAK,EAAE,KAAK,GAAG,MAAM;IAuBrC;;OAEG;IACH,iBAAiB,IAAI,KAAK,CAAC;QACzB,OAAO,EAAE,MAAM,CAAC;QAChB,QAAQ,EAAE;YAAE,MAAM,EAAE,MAAM,CAAC;YAAC,IAAI,EAAE,MAAM,CAAC;YAAC,IAAI,EAAE,MAAM,CAAA;SAAE,CAAC;KAC1D,CAAC;CAYH;AAED,wBAAgB,sBAAsB,CAAC,MAAM,EAAE,SAAS,GAAG,gBAAgB,CAE1E"}
@@ -0,0 +1,223 @@
1
+ import { execSync } from 'child_process';
2
+ import { existsSync, readFileSync, readdirSync } from 'fs';
3
+ import { join } from 'path';
4
+ import { homedir } from 'os';
5
+ const DEFAULT_SKILL_PATHS = [
6
+ './.agent/skills',
7
+ join(homedir(), '.agent/skills'),
8
+ './.claude/skills',
9
+ join(homedir(), '.claude/skills'),
10
+ './.cursor/skills',
11
+ join(homedir(), '.cursor/skills'),
12
+ join(homedir(), '.cursor/skills-cursor'),
13
+ join(homedir(), '.codex/skills')
14
+ ];
15
+ export class OpenSkillsClient {
16
+ config;
17
+ skillCache = new Map();
18
+ constructor(ragConfig) {
19
+ this.config = ragConfig.openSkills || {
20
+ enabled: false,
21
+ autoIngestSkills: false,
22
+ skillPaths: DEFAULT_SKILL_PATHS
23
+ };
24
+ }
25
+ isEnabled() {
26
+ return this.config.enabled;
27
+ }
28
+ /**
29
+ * Check if openskills CLI is available
30
+ */
31
+ isCliAvailable() {
32
+ try {
33
+ execSync('npx openskills --version', { stdio: 'ignore' });
34
+ return true;
35
+ }
36
+ catch {
37
+ return false;
38
+ }
39
+ }
40
+ /**
41
+ * Discover all installed skills from configured paths
42
+ */
43
+ discoverSkills() {
44
+ const skills = [];
45
+ const paths = this.config.skillPaths || DEFAULT_SKILL_PATHS;
46
+ for (const basePath of paths) {
47
+ const resolvedPath = basePath.startsWith('~')
48
+ ? join(homedir(), basePath.slice(1))
49
+ : basePath;
50
+ if (!existsSync(resolvedPath))
51
+ continue;
52
+ try {
53
+ const entries = readdirSync(resolvedPath, { withFileTypes: true });
54
+ for (const entry of entries) {
55
+ if (!entry.isDirectory())
56
+ continue;
57
+ const skillDir = join(resolvedPath, entry.name);
58
+ const skillFile = join(skillDir, 'SKILL.md');
59
+ if (existsSync(skillFile)) {
60
+ const content = readFileSync(skillFile, 'utf-8');
61
+ const metadata = this.parseSkillMetadata(content);
62
+ const skill = {
63
+ name: metadata.name || entry.name,
64
+ description: metadata.description || '',
65
+ location: this.getSkillLocation(resolvedPath),
66
+ path: skillDir,
67
+ content
68
+ };
69
+ skills.push(skill);
70
+ this.skillCache.set(skill.name, skill);
71
+ }
72
+ }
73
+ }
74
+ catch (error) {
75
+ console.warn(`Failed to read skills from ${resolvedPath}:`, error);
76
+ }
77
+ }
78
+ return skills;
79
+ }
80
+ getSkillLocation(path) {
81
+ if (path.includes('.agent'))
82
+ return 'universal';
83
+ if (path.startsWith(homedir()))
84
+ return 'global';
85
+ return 'project';
86
+ }
87
+ parseSkillMetadata(content) {
88
+ const metadata = { name: '', description: '' };
89
+ // Parse YAML frontmatter
90
+ const frontmatterMatch = content.match(/^---\n([\s\S]*?)\n---/);
91
+ if (frontmatterMatch) {
92
+ const frontmatter = frontmatterMatch[1];
93
+ const nameMatch = frontmatter.match(/^name:\s*(.+)$/m);
94
+ if (nameMatch)
95
+ metadata.name = nameMatch[1].trim();
96
+ const descMatch = frontmatter.match(/^description:\s*(.+)$/m);
97
+ if (descMatch)
98
+ metadata.description = descMatch[1].trim();
99
+ const tagsMatch = frontmatter.match(/^tags:\s*\[(.+)\]$/m);
100
+ if (tagsMatch) {
101
+ metadata.tags = tagsMatch[1].split(',').map(t => t.trim());
102
+ }
103
+ }
104
+ return metadata;
105
+ }
106
+ /**
107
+ * Read a specific skill (using openskills CLI or direct file read)
108
+ */
109
+ async readSkill(name) {
110
+ // Check cache first
111
+ if (this.skillCache.has(name)) {
112
+ return this.skillCache.get(name);
113
+ }
114
+ // Try CLI if available
115
+ if (this.isCliAvailable()) {
116
+ try {
117
+ const output = execSync(`npx openskills read ${name}`, {
118
+ encoding: 'utf-8',
119
+ stdio: ['pipe', 'pipe', 'ignore']
120
+ });
121
+ // Parse the skill from CLI output
122
+ const skill = {
123
+ name,
124
+ description: '',
125
+ location: 'project',
126
+ path: '',
127
+ content: output
128
+ };
129
+ this.skillCache.set(name, skill);
130
+ return skill;
131
+ }
132
+ catch {
133
+ // Fall through to manual discovery
134
+ }
135
+ }
136
+ // Manual discovery
137
+ this.discoverSkills();
138
+ return this.skillCache.get(name) || null;
139
+ }
140
+ /**
141
+ * List all available skills (using CLI or discovery)
142
+ */
143
+ async listSkills() {
144
+ if (this.isCliAvailable()) {
145
+ try {
146
+ const output = execSync('npx openskills list --json', {
147
+ encoding: 'utf-8',
148
+ stdio: ['pipe', 'pipe', 'ignore']
149
+ });
150
+ const skills = JSON.parse(output);
151
+ return skills;
152
+ }
153
+ catch {
154
+ // Fall through to manual discovery
155
+ }
156
+ }
157
+ return this.discoverSkills();
158
+ }
159
+ /**
160
+ * Install skills from a source (GitHub repo, local path)
161
+ */
162
+ async installSkills(source, options) {
163
+ if (!this.isCliAvailable()) {
164
+ console.warn('OpenSkills CLI not available. Install with: npm i -g openskills');
165
+ return false;
166
+ }
167
+ const args = ['openskills', 'install', source];
168
+ if (options?.global)
169
+ args.push('--global');
170
+ if (options?.universal)
171
+ args.push('--universal');
172
+ try {
173
+ execSync(`npx ${args.join(' ')}`, { stdio: 'inherit' });
174
+ return true;
175
+ }
176
+ catch {
177
+ return false;
178
+ }
179
+ }
180
+ /**
181
+ * Get skill content for RAG ingestion
182
+ * Returns the full SKILL.md content plus any referenced resources
183
+ */
184
+ getSkillContent(skill) {
185
+ let content = skill.content || '';
186
+ // Check for referenced resources
187
+ const resourcesDir = join(skill.path, 'references');
188
+ if (existsSync(resourcesDir)) {
189
+ try {
190
+ const resources = readdirSync(resourcesDir);
191
+ for (const resource of resources) {
192
+ if (resource.endsWith('.md') || resource.endsWith('.txt')) {
193
+ const resourcePath = join(resourcesDir, resource);
194
+ const resourceContent = readFileSync(resourcePath, 'utf-8');
195
+ content += `\n\n--- Resource: ${resource} ---\n${resourceContent}`;
196
+ }
197
+ }
198
+ }
199
+ catch {
200
+ // Ignore resource read errors
201
+ }
202
+ }
203
+ return content;
204
+ }
205
+ /**
206
+ * Convert skills to documents for RAG ingestion
207
+ */
208
+ skillsToDocuments() {
209
+ const skills = this.discoverSkills();
210
+ return skills.map(skill => ({
211
+ content: this.getSkillContent(skill),
212
+ metadata: {
213
+ source: `skill:${skill.name}`,
214
+ type: 'skill',
215
+ name: skill.name
216
+ }
217
+ }));
218
+ }
219
+ }
220
+ export function createOpenSkillsClient(config) {
221
+ return new OpenSkillsClient(config);
222
+ }
223
+ //# sourceMappingURL=openskills.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"openskills.js","sourceRoot":"","sources":["../../src/integrations/openskills.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,29 @@
1
+ import type { RAGConfig } from '../types/index.js';
2
+ export interface ProxyConfig {
3
+ enabled: boolean;
4
+ driver: 'packetstream' | 'smartproxy' | 'none';
5
+ host?: string;
6
+ port?: number;
7
+ username?: string;
8
+ password?: string;
9
+ }
10
+ export interface ProxyResult {
11
+ proxyUrl: string | null;
12
+ headers: Record<string, string>;
13
+ userAgent: string;
14
+ }
15
+ export declare class ProxyManager {
16
+ private config;
17
+ constructor(ragConfig: RAGConfig);
18
+ isEnabled(): boolean;
19
+ getProxyConfig(country?: string, sessionId?: string): ProxyResult;
20
+ private buildProxyUrl;
21
+ private getDefaultHost;
22
+ private getDefaultPort;
23
+ /**
24
+ * Create a fetch function that uses the proxy
25
+ */
26
+ fetchWithProxy(url: string, options?: RequestInit): Promise<Response>;
27
+ }
28
+ export declare function createProxyManager(config: RAGConfig): ProxyManager;
29
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/proxy/index.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,mBAAmB,CAAC;AAEnD,MAAM,WAAW,WAAW;IAC1B,OAAO,EAAE,OAAO,CAAC;IACjB,MAAM,EAAE,cAAc,GAAG,YAAY,GAAG,MAAM,CAAC;IAC/C,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,QAAQ,CAAC,EAAE,MAAM,CAAC;CACnB;AAED,MAAM,WAAW,WAAW;IAC1B,QAAQ,EAAE,MAAM,GAAG,IAAI,CAAC;IACxB,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAChC,SAAS,EAAE,MAAM,CAAC;CACnB;AAcD,qBAAa,YAAY;IACvB,OAAO,CAAC,MAAM,CAAc;gBAEhB,SAAS,EAAE,SAAS;IAOhC,SAAS,IAAI,OAAO;IAIpB,cAAc,CAAC,OAAO,CAAC,EAAE,MAAM,EAAE,SAAS,CAAC,EAAE,MAAM,GAAG,WAAW;IA6BjE,OAAO,CAAC,aAAa;IAsCrB,OAAO,CAAC,cAAc;IAWtB,OAAO,CAAC,cAAc;IAWtB;;OAEG;IACG,cAAc,CAAC,GAAG,EAAE,MAAM,EAAE,OAAO,GAAE,WAAgB,GAAG,OAAO,CAAC,QAAQ,CAAC;CAuBhF;AAED,wBAAgB,kBAAkB,CAAC,MAAM,EAAE,SAAS,GAAG,YAAY,CAElE"}
@@ -0,0 +1,124 @@
1
+ const USER_AGENTS = [
2
+ 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/120.0.0.0 Safari/537.36',
3
+ 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/120.0.0.0 Safari/537.36',
4
+ 'Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:121.0) Gecko/20100101 Firefox/121.0',
5
+ 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/17.2 Safari/605.1.15',
6
+ 'Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/120.0.0.0 Safari/537.36',
7
+ ];
8
+ function getRandomUserAgent() {
9
+ return USER_AGENTS[Math.floor(Math.random() * USER_AGENTS.length)];
10
+ }
11
+ export class ProxyManager {
12
+ config;
13
+ constructor(ragConfig) {
14
+ this.config = ragConfig.proxy || {
15
+ enabled: false,
16
+ driver: 'none'
17
+ };
18
+ }
19
+ isEnabled() {
20
+ return this.config.enabled && this.config.driver !== 'none';
21
+ }
22
+ getProxyConfig(country, sessionId) {
23
+ const userAgent = getRandomUserAgent();
24
+ if (!this.isEnabled()) {
25
+ return {
26
+ proxyUrl: null,
27
+ headers: {
28
+ 'User-Agent': userAgent,
29
+ },
30
+ userAgent,
31
+ };
32
+ }
33
+ const proxyUrl = this.buildProxyUrl(country, sessionId);
34
+ return {
35
+ proxyUrl,
36
+ headers: {
37
+ 'User-Agent': userAgent,
38
+ 'Accept': 'text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8',
39
+ 'Accept-Language': 'en-US,en;q=0.5',
40
+ 'Accept-Encoding': 'gzip, deflate, br',
41
+ 'Connection': 'keep-alive',
42
+ 'Upgrade-Insecure-Requests': '1',
43
+ },
44
+ userAgent,
45
+ };
46
+ }
47
+ buildProxyUrl(country, sessionId) {
48
+ const { driver, host, port, username, password } = this.config;
49
+ if (!username || !password) {
50
+ throw new Error('Proxy username and password are required');
51
+ }
52
+ let finalUsername = username;
53
+ // PacketStream-specific formatting
54
+ if (driver === 'packetstream') {
55
+ // Country suffix: username_country-US
56
+ if (country) {
57
+ finalUsername += `_country-${country}`;
58
+ }
59
+ // Session ID for sticky sessions: username_session-abc123
60
+ if (sessionId) {
61
+ finalUsername += `_session-${sessionId}`;
62
+ }
63
+ }
64
+ // SmartProxy-specific formatting
65
+ if (driver === 'smartproxy') {
66
+ // SmartProxy uses different format: user-country-us:password
67
+ if (country) {
68
+ finalUsername = `${username}-country-${country.toLowerCase()}`;
69
+ }
70
+ if (sessionId) {
71
+ finalUsername += `-session-${sessionId}`;
72
+ }
73
+ }
74
+ const proxyHost = host || this.getDefaultHost();
75
+ const proxyPort = port || this.getDefaultPort();
76
+ return `http://${finalUsername}:${password}@${proxyHost}:${proxyPort}`;
77
+ }
78
+ getDefaultHost() {
79
+ switch (this.config.driver) {
80
+ case 'packetstream':
81
+ return 'proxy.packetstream.io';
82
+ case 'smartproxy':
83
+ return 'gate.smartproxy.com';
84
+ default:
85
+ return 'localhost';
86
+ }
87
+ }
88
+ getDefaultPort() {
89
+ switch (this.config.driver) {
90
+ case 'packetstream':
91
+ return 31112;
92
+ case 'smartproxy':
93
+ return 7000;
94
+ default:
95
+ return 8080;
96
+ }
97
+ }
98
+ /**
99
+ * Create a fetch function that uses the proxy
100
+ */
101
+ async fetchWithProxy(url, options = {}) {
102
+ const proxyConfig = this.getProxyConfig();
103
+ const fetchOptions = {
104
+ ...options,
105
+ headers: {
106
+ ...proxyConfig.headers,
107
+ ...options.headers,
108
+ },
109
+ };
110
+ // Note: Node.js fetch doesn't natively support proxies
111
+ // For proxy support, we'd need to use a library like node-fetch-native with proxy-agent
112
+ // or undici with ProxyAgent. For now, we'll set headers and let users
113
+ // configure system-level proxy if needed.
114
+ if (proxyConfig.proxyUrl) {
115
+ // In a full implementation, use undici ProxyAgent or similar
116
+ console.warn('Proxy URL configured but Node.js fetch requires additional setup. Using direct connection with proxy headers.');
117
+ }
118
+ return fetch(url, fetchOptions);
119
+ }
120
+ }
121
+ export function createProxyManager(config) {
122
+ return new ProxyManager(config);
123
+ }
124
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/proxy/index.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/server/index.ts"],"names":[],"mappings":""}
@@ -0,0 +1,43 @@
1
+ import { Server } from '@modelcontextprotocol/sdk/server/index.js';
2
+ import { StdioServerTransport } from '@modelcontextprotocol/sdk/server/stdio.js';
3
+ import { loadConfig } from '../services/config.js';
4
+ import { createVectorStore } from '../adapters/vector/index.js';
5
+ import { createEmbedder } from '../adapters/embeddings/index.js';
6
+ import { registerTools } from './tools/index.js';
7
+ async function main() {
8
+ // Load configuration from environment or default path
9
+ const configPath = process.env.CURSOR_RAG_CONFIG;
10
+ let config;
11
+ try {
12
+ if (configPath) {
13
+ // Temporarily override CONFIG_FILE if provided via env
14
+ const { CONFIG_FILE } = await import('../services/config.js');
15
+ const { readFileSync } = await import('fs');
16
+ const content = readFileSync(configPath, 'utf-8');
17
+ config = JSON.parse(content);
18
+ }
19
+ else {
20
+ config = loadConfig();
21
+ }
22
+ }
23
+ catch (error) {
24
+ console.error(`Failed to load config: ${error instanceof Error ? error.message : 'Unknown error'}`);
25
+ process.exit(1);
26
+ }
27
+ const vectorStore = createVectorStore(config.vectorStore, config);
28
+ const embedder = await createEmbedder(config.embeddings, config);
29
+ const server = new Server({
30
+ name: 'recursive-rag',
31
+ version: '0.1.0'
32
+ }, {
33
+ capabilities: { tools: {} }
34
+ });
35
+ registerTools(server, { vectorStore, embedder, config });
36
+ const transport = new StdioServerTransport();
37
+ await server.connect(transport);
38
+ }
39
+ main().catch((error) => {
40
+ console.error('Fatal error in MCP server:', error);
41
+ process.exit(1);
42
+ });
43
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/server/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,MAAM,2CAA2C,CAAC;AACnE,OAAO,EAAE,oBAAoB,EAAE,MAAM,2CAA2C,CAAC;AAKjF,OAAO,EAAE,UAAU,EAAE,MAAM,uBAAuB,CAAC;AACnD,OAAO,EAAE,iBAAiB,EAAE,MAAM,6BAA6B,CAAC;AAChE,OAAO,EAAE,cAAc,EAAE,MAAM,iCAAiC,CAAC;AACjE,OAAO,EAAE,aAAa,EAAE,MAAM,kBAAkB,CAAC;AAEjD,KAAK,UAAU,IAAI;IACjB,sDAAsD;IACtD,MAAM,UAAU,GAAG,OAAO,CAAC,GAAG,CAAC,iBAAiB,CAAC;IACjD,IAAI,MAAM,CAAC;IAEX,IAAI,CAAC;QACH,IAAI,UAAU,EAAE,CAAC;YACf,uDAAuD;YACvD,MAAM,EAAE,WAAW,EAAE,GAAG,MAAM,MAAM,CAAC,uBAAuB,CAAC,CAAC;YAC9D,MAAM,EAAE,YAAY,EAAE,GAAG,MAAM,MAAM,CAAC,IAAI,CAAC,CAAC;YAC5C,MAAM,OAAO,GAAG,YAAY,CAAC,UAAU,EAAE,OAAO,CAAC,CAAC;YAClD,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC;QAC/B,CAAC;aAAM,CAAC;YACN,MAAM,GAAG,UAAU,EAAE,CAAC;QACxB,CAAC;IACH,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,OAAO,CAAC,KAAK,CAAC,0BAA0B,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,eAAe,EAAE,CAAC,CAAC;QACpG,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC;IAED,MAAM,WAAW,GAAG,iBAAiB,CAAC,MAAM,CAAC,WAAW,EAAE,MAAM,CAAC,CAAC;IAClE,MAAM,QAAQ,GAAG,MAAM,cAAc,CAAC,MAAM,CAAC,UAAU,EAAE,MAAM,CAAC,CAAC;IAEjE,MAAM,MAAM,GAAG,IAAI,MAAM,CACvB;QACE,IAAI,EAAE,eAAe;QACrB,OAAO,EAAE,OAAO;KACjB,EACD;QACE,YAAY,EAAE,EAAE,KAAK,EAAE,EAAE,EAAE;KAC5B,CACF,CAAC;IAEF,aAAa,CAAC,MAAM,EAAE,EAAE,WAAW,EAAE,QAAQ,EAAE,MAAM,EAAE,CAAC,CAAC;IAEzD,MAAM,SAAS,GAAG,IAAI,oBAAoB,EAAE,CAAC;IAC7C,MAAM,MAAM,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC;AAClC,CAAC;AAED,IAAI,EAAE,CAAC,KAAK,CAAC,CAAC,KAAK,EAAE,EAAE;IACrB,OAAO,CAAC,KAAK,CAAC,4BAA4B,EAAE,KAAK,CAAC,CAAC;IACnD,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;AAClB,CAAC,CAAC,CAAC"}