@copilotkit/pathfinder 1.1.0 → 1.5.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.
- package/CHANGELOG.md +39 -1
- package/README.md +65 -248
- package/dist/cli.d.ts +3 -0
- package/dist/cli.d.ts.map +1 -0
- package/dist/cli.js +70 -0
- package/dist/cli.js.map +1 -0
- package/dist/config.d.ts +8 -0
- package/dist/config.d.ts.map +1 -1
- package/dist/config.js +58 -5
- package/dist/config.js.map +1 -1
- package/dist/db/client.d.ts.map +1 -1
- package/dist/db/client.js +3 -1
- package/dist/db/client.js.map +1 -1
- package/dist/db/queries.d.ts +21 -4
- package/dist/db/queries.d.ts.map +1 -1
- package/dist/db/queries.js +101 -45
- package/dist/db/queries.js.map +1 -1
- package/dist/db/schema.d.ts +5 -0
- package/dist/db/schema.d.ts.map +1 -1
- package/dist/db/schema.js +11 -0
- package/dist/db/schema.js.map +1 -1
- package/dist/faq-txt.d.ts +12 -0
- package/dist/faq-txt.d.ts.map +1 -0
- package/dist/faq-txt.js +37 -0
- package/dist/faq-txt.js.map +1 -0
- package/dist/index.js +2 -362
- package/dist/index.js.map +1 -1
- package/dist/indexing/chunking/html.d.ts +7 -0
- package/dist/indexing/chunking/html.d.ts.map +1 -0
- package/dist/indexing/chunking/html.js +356 -0
- package/dist/indexing/chunking/html.js.map +1 -0
- package/dist/indexing/chunking/index.js +5 -0
- package/dist/indexing/chunking/index.js.map +1 -1
- package/dist/indexing/chunking/qa.d.ts +8 -0
- package/dist/indexing/chunking/qa.d.ts.map +1 -0
- package/dist/indexing/chunking/qa.js +22 -0
- package/dist/indexing/chunking/qa.js.map +1 -0
- package/dist/indexing/distiller.d.ts +29 -0
- package/dist/indexing/distiller.d.ts.map +1 -0
- package/dist/indexing/distiller.js +104 -0
- package/dist/indexing/distiller.js.map +1 -0
- package/dist/indexing/orchestrator.d.ts +9 -3
- package/dist/indexing/orchestrator.d.ts.map +1 -1
- package/dist/indexing/orchestrator.js +113 -83
- package/dist/indexing/orchestrator.js.map +1 -1
- package/dist/indexing/pipeline.d.ts +18 -0
- package/dist/indexing/pipeline.d.ts.map +1 -0
- package/dist/indexing/pipeline.js +68 -0
- package/dist/indexing/pipeline.js.map +1 -0
- package/dist/indexing/providers/discord-api.d.ts +79 -0
- package/dist/indexing/providers/discord-api.d.ts.map +1 -0
- package/dist/indexing/providers/discord-api.js +167 -0
- package/dist/indexing/providers/discord-api.js.map +1 -0
- package/dist/indexing/providers/discord.d.ts +25 -0
- package/dist/indexing/providers/discord.d.ts.map +1 -0
- package/dist/indexing/providers/discord.js +282 -0
- package/dist/indexing/providers/discord.js.map +1 -0
- package/dist/indexing/providers/file.d.ts +18 -0
- package/dist/indexing/providers/file.d.ts.map +1 -0
- package/dist/indexing/providers/file.js +262 -0
- package/dist/indexing/providers/file.js.map +1 -0
- package/dist/indexing/providers/index.d.ts +5 -0
- package/dist/indexing/providers/index.d.ts.map +1 -0
- package/dist/indexing/providers/index.js +22 -0
- package/dist/indexing/providers/index.js.map +1 -0
- package/dist/indexing/providers/slack-api.d.ts +62 -0
- package/dist/indexing/providers/slack-api.d.ts.map +1 -0
- package/dist/indexing/providers/slack-api.js +167 -0
- package/dist/indexing/providers/slack-api.js.map +1 -0
- package/dist/indexing/providers/slack.d.ts +21 -0
- package/dist/indexing/providers/slack.d.ts.map +1 -0
- package/dist/indexing/providers/slack.js +192 -0
- package/dist/indexing/providers/slack.js.map +1 -0
- package/dist/indexing/providers/types.d.ts +56 -0
- package/dist/indexing/providers/types.d.ts.map +1 -0
- package/dist/indexing/providers/types.js +3 -0
- package/dist/indexing/providers/types.js.map +1 -0
- package/dist/indexing/url-derivation.d.ts +2 -2
- package/dist/indexing/url-derivation.d.ts.map +1 -1
- package/dist/indexing/url-derivation.js.map +1 -1
- package/dist/indexing/utils.d.ts +19 -0
- package/dist/indexing/utils.d.ts.map +1 -0
- package/dist/indexing/utils.js +63 -0
- package/dist/indexing/utils.js.map +1 -0
- package/dist/ip-limiter.d.ts +11 -0
- package/dist/ip-limiter.d.ts.map +1 -0
- package/dist/ip-limiter.js +40 -0
- package/dist/ip-limiter.js.map +1 -0
- package/dist/llms-txt.d.ts +11 -0
- package/dist/llms-txt.d.ts.map +1 -0
- package/dist/llms-txt.js +43 -0
- package/dist/llms-txt.js.map +1 -0
- package/dist/mcp/server.d.ts +3 -1
- package/dist/mcp/server.d.ts.map +1 -1
- package/dist/mcp/server.js +9 -1
- package/dist/mcp/server.js.map +1 -1
- package/dist/mcp/tools/bash-fs.d.ts.map +1 -1
- package/dist/mcp/tools/bash-fs.js +4 -1
- package/dist/mcp/tools/bash-fs.js.map +1 -1
- package/dist/mcp/tools/bash.d.ts +8 -0
- package/dist/mcp/tools/bash.d.ts.map +1 -1
- package/dist/mcp/tools/bash.js +59 -0
- package/dist/mcp/tools/bash.js.map +1 -1
- package/dist/mcp/tools/knowledge.d.ts +13 -0
- package/dist/mcp/tools/knowledge.d.ts.map +1 -0
- package/dist/mcp/tools/knowledge.js +92 -0
- package/dist/mcp/tools/knowledge.js.map +1 -0
- package/dist/mcp/tools/search.d.ts.map +1 -1
- package/dist/mcp/tools/search.js +11 -3
- package/dist/mcp/tools/search.js.map +1 -1
- package/dist/server.d.ts +6 -0
- package/dist/server.d.ts.map +1 -0
- package/dist/server.js +595 -0
- package/dist/server.js.map +1 -0
- package/dist/skill-md.d.ts +3 -0
- package/dist/skill-md.d.ts.map +1 -0
- package/dist/skill-md.js +75 -0
- package/dist/skill-md.js.map +1 -0
- package/dist/types.d.ts +844 -38
- package/dist/types.d.ts.map +1 -1
- package/dist/types.js +88 -6
- package/dist/types.js.map +1 -1
- package/dist/validate.d.ts +29 -0
- package/dist/validate.d.ts.map +1 -0
- package/dist/validate.js +192 -0
- package/dist/validate.js.map +1 -0
- package/dist/webhooks/discord.d.ts +13 -0
- package/dist/webhooks/discord.d.ts.map +1 -0
- package/dist/webhooks/discord.js +57 -0
- package/dist/webhooks/discord.js.map +1 -0
- package/dist/webhooks/slack.d.ts +13 -0
- package/dist/webhooks/slack.d.ts.map +1 -0
- package/dist/webhooks/slack.js +106 -0
- package/dist/webhooks/slack.js.map +1 -0
- package/dist/workspace.d.ts +13 -0
- package/dist/workspace.d.ts.map +1 -0
- package/dist/workspace.js +118 -0
- package/dist/workspace.js.map +1 -0
- package/package.json +27 -2
- package/pathfinder-docs.yaml +54 -0
- package/pathfinder.example.yaml +48 -0
- package/.superpowers/brainstorm/47098-1775507869/content/homepage-mockup.html +0 -324
- package/.superpowers/brainstorm/47098-1775507869/state/server-stopped +0 -1
- package/.superpowers/brainstorm/47098-1775507869/state/server.log +0 -13
- package/.superpowers/brainstorm/47098-1775507869/state/server.pid +0 -1
- package/.superpowers/brainstorm/82141-1775511032/content/migration-v2.html +0 -340
- package/.superpowers/brainstorm/82141-1775511032/content/migration.html +0 -340
- package/.superpowers/brainstorm/82141-1775511032/state/server-stopped +0 -1
- package/.superpowers/brainstorm/82141-1775511032/state/server.log +0 -4
- package/.superpowers/brainstorm/82141-1775511032/state/server.pid +0 -1
- package/dist/indexing/source-indexer.d.ts +0 -68
- package/dist/indexing/source-indexer.d.ts.map +0 -1
- package/dist/indexing/source-indexer.js +0 -379
- package/dist/indexing/source-indexer.js.map +0 -1
|
@@ -0,0 +1,262 @@
|
|
|
1
|
+
// FileDataProvider — git-backed and local file data acquisition.
|
|
2
|
+
// Handles clone/pull, file walking, pattern matching, content reading.
|
|
3
|
+
import fs from 'node:fs';
|
|
4
|
+
import path from 'node:path';
|
|
5
|
+
import { createHash } from 'node:crypto';
|
|
6
|
+
import { simpleGit } from 'simple-git';
|
|
7
|
+
import { matchesPatterns, hasLowSemanticValue } from '../utils.js';
|
|
8
|
+
import { isFileSourceConfig } from '../../types.js';
|
|
9
|
+
const DEFAULT_SKIP_DIRS = new Set(['node_modules', 'dist', 'build', '.git']);
|
|
10
|
+
const DEFAULT_MAX_FILE_SIZE = 102400; // 100KB
|
|
11
|
+
function repoNameFromUrl(repoUrl) {
|
|
12
|
+
const last = repoUrl.split('/').pop() ?? '';
|
|
13
|
+
return last.replace(/\.git$/, '');
|
|
14
|
+
}
|
|
15
|
+
function authenticatedUrl(repoUrl, githubToken) {
|
|
16
|
+
if (githubToken) {
|
|
17
|
+
return repoUrl.replace('https://github.com/', `https://x-access-token:${githubToken}@github.com/`);
|
|
18
|
+
}
|
|
19
|
+
return repoUrl;
|
|
20
|
+
}
|
|
21
|
+
export class FileDataProvider {
|
|
22
|
+
config;
|
|
23
|
+
options;
|
|
24
|
+
logPrefix;
|
|
25
|
+
skipDirs;
|
|
26
|
+
maxFileSize;
|
|
27
|
+
constructor(config, options) {
|
|
28
|
+
if (!isFileSourceConfig(config)) {
|
|
29
|
+
throw new Error('FileDataProvider cannot handle slack source type');
|
|
30
|
+
}
|
|
31
|
+
this.config = config;
|
|
32
|
+
this.options = options;
|
|
33
|
+
this.logPrefix = `[file-provider:${config.name}]`;
|
|
34
|
+
this.skipDirs = new Set([...DEFAULT_SKIP_DIRS, ...(config.skip_dirs ?? [])]);
|
|
35
|
+
this.maxFileSize = config.max_file_size ?? DEFAULT_MAX_FILE_SIZE;
|
|
36
|
+
}
|
|
37
|
+
isLocal() {
|
|
38
|
+
return !this.config.repo;
|
|
39
|
+
}
|
|
40
|
+
async fullAcquire() {
|
|
41
|
+
let repoDir;
|
|
42
|
+
let stateToken;
|
|
43
|
+
if (this.isLocal()) {
|
|
44
|
+
repoDir = path.resolve(this.config.path);
|
|
45
|
+
if (!fs.existsSync(repoDir)) {
|
|
46
|
+
throw new Error(`Local source path does not exist: ${repoDir}`);
|
|
47
|
+
}
|
|
48
|
+
stateToken = await this.computeLocalSha(repoDir);
|
|
49
|
+
}
|
|
50
|
+
else {
|
|
51
|
+
const repoName = repoNameFromUrl(this.config.repo);
|
|
52
|
+
repoDir = path.join(this.options.cloneDir, repoName);
|
|
53
|
+
const git = await this.ensureRepo(repoDir, repoName);
|
|
54
|
+
stateToken = await git.revparse(['HEAD']);
|
|
55
|
+
}
|
|
56
|
+
const walkRoot = this.isLocal()
|
|
57
|
+
? repoDir
|
|
58
|
+
: path.join(repoDir, this.config.path);
|
|
59
|
+
if (!fs.existsSync(walkRoot)) {
|
|
60
|
+
console.warn(`${this.logPrefix} Walk root not found at ${walkRoot}, skipping`);
|
|
61
|
+
return { items: [], removedIds: [], stateToken };
|
|
62
|
+
}
|
|
63
|
+
const allFiles = await this.walkFiles(walkRoot);
|
|
64
|
+
const matchingFiles = allFiles.filter(absPath => {
|
|
65
|
+
const relPath = path.relative(repoDir, absPath);
|
|
66
|
+
return matchesPatterns(relPath, this.config);
|
|
67
|
+
});
|
|
68
|
+
const skipped = allFiles.length - matchingFiles.length;
|
|
69
|
+
console.log(`${this.logPrefix} Found ${matchingFiles.length} files for full acquire` +
|
|
70
|
+
(skipped > 0 ? ` (${skipped} excluded by patterns)` : ''));
|
|
71
|
+
const items = [];
|
|
72
|
+
for (const absPath of matchingFiles) {
|
|
73
|
+
const relPath = path.relative(repoDir, absPath);
|
|
74
|
+
try {
|
|
75
|
+
const content = await fs.promises.readFile(absPath, 'utf-8');
|
|
76
|
+
if (hasLowSemanticValue(content))
|
|
77
|
+
continue;
|
|
78
|
+
items.push({ id: relPath, content });
|
|
79
|
+
}
|
|
80
|
+
catch (err) {
|
|
81
|
+
const msg = err instanceof Error ? err.message : String(err);
|
|
82
|
+
console.error(`${this.logPrefix} Failed to read ${relPath}: ${msg}`);
|
|
83
|
+
}
|
|
84
|
+
}
|
|
85
|
+
return { items, removedIds: [], stateToken };
|
|
86
|
+
}
|
|
87
|
+
async incrementalAcquire(lastStateToken) {
|
|
88
|
+
if (this.isLocal()) {
|
|
89
|
+
console.log(`${this.logPrefix} Local source — falling back to full acquire`);
|
|
90
|
+
return this.fullAcquire();
|
|
91
|
+
}
|
|
92
|
+
const repoName = repoNameFromUrl(this.config.repo);
|
|
93
|
+
const repoDir = path.join(this.options.cloneDir, repoName);
|
|
94
|
+
const git = await this.ensureRepo(repoDir, repoName);
|
|
95
|
+
const headSha = await git.revparse(['HEAD']);
|
|
96
|
+
if (headSha === lastStateToken) {
|
|
97
|
+
console.log(`${this.logPrefix} No new commits, skipping`);
|
|
98
|
+
return { items: [], removedIds: [], stateToken: headSha };
|
|
99
|
+
}
|
|
100
|
+
// Unshallow for diff
|
|
101
|
+
try {
|
|
102
|
+
await git.fetch(['--unshallow']);
|
|
103
|
+
}
|
|
104
|
+
catch (err) {
|
|
105
|
+
const msg = err instanceof Error ? err.message : String(err);
|
|
106
|
+
if (!msg.includes('unshallow') && !msg.includes('does not make sense')) {
|
|
107
|
+
console.warn(`${this.logPrefix} git fetch --unshallow failed:`, msg);
|
|
108
|
+
}
|
|
109
|
+
}
|
|
110
|
+
let diffOutput;
|
|
111
|
+
try {
|
|
112
|
+
diffOutput = await git.diff(['--name-only', `${lastStateToken}..HEAD`]);
|
|
113
|
+
}
|
|
114
|
+
catch (err) {
|
|
115
|
+
console.warn(`${this.logPrefix} git diff failed, falling back to full acquire:`, err);
|
|
116
|
+
return this.fullAcquire();
|
|
117
|
+
}
|
|
118
|
+
const changedFiles = diffOutput.split('\n').map(f => f.trim()).filter(f => f.length > 0);
|
|
119
|
+
const matchingChanged = changedFiles.filter(f => matchesPatterns(f, this.config));
|
|
120
|
+
if (matchingChanged.length === 0) {
|
|
121
|
+
console.log(`${this.logPrefix} No matching changes detected`);
|
|
122
|
+
return { items: [], removedIds: [], stateToken: headSha };
|
|
123
|
+
}
|
|
124
|
+
console.log(`${this.logPrefix} Incremental acquire: ${matchingChanged.length} changed files`);
|
|
125
|
+
// Find deleted files
|
|
126
|
+
const diffStatusOutput = await git.diff(['--name-status', `${lastStateToken}..HEAD`]);
|
|
127
|
+
const deletedFiles = diffStatusOutput.split('\n')
|
|
128
|
+
.filter(line => line.startsWith('D\t'))
|
|
129
|
+
.map(line => line.slice(2).trim())
|
|
130
|
+
.filter(f => matchesPatterns(f, this.config));
|
|
131
|
+
// Read changed (non-deleted) files
|
|
132
|
+
const filesToRead = matchingChanged.filter(f => !deletedFiles.includes(f));
|
|
133
|
+
const items = [];
|
|
134
|
+
for (const relPath of filesToRead) {
|
|
135
|
+
const absPath = path.join(repoDir, relPath);
|
|
136
|
+
if (!fs.existsSync(absPath))
|
|
137
|
+
continue;
|
|
138
|
+
try {
|
|
139
|
+
const stat = await fs.promises.stat(absPath);
|
|
140
|
+
if (stat.size > this.maxFileSize)
|
|
141
|
+
continue;
|
|
142
|
+
const content = await fs.promises.readFile(absPath, 'utf-8');
|
|
143
|
+
if (hasLowSemanticValue(content))
|
|
144
|
+
continue;
|
|
145
|
+
items.push({ id: relPath, content });
|
|
146
|
+
}
|
|
147
|
+
catch (err) {
|
|
148
|
+
const msg = err instanceof Error ? err.message : String(err);
|
|
149
|
+
console.error(`${this.logPrefix} Failed to read ${relPath}: ${msg}`);
|
|
150
|
+
}
|
|
151
|
+
}
|
|
152
|
+
return { items, removedIds: deletedFiles, stateToken: headSha };
|
|
153
|
+
}
|
|
154
|
+
async getCurrentStateToken() {
|
|
155
|
+
if (this.isLocal()) {
|
|
156
|
+
const walkRoot = path.resolve(this.config.path);
|
|
157
|
+
if (!fs.existsSync(walkRoot))
|
|
158
|
+
return null;
|
|
159
|
+
return this.computeLocalSha(walkRoot);
|
|
160
|
+
}
|
|
161
|
+
// For git sources: try ls-remote first (no clone needed)
|
|
162
|
+
try {
|
|
163
|
+
let url = this.config.repo;
|
|
164
|
+
if (this.options.githubToken) {
|
|
165
|
+
url = authenticatedUrl(url, this.options.githubToken);
|
|
166
|
+
}
|
|
167
|
+
const git = simpleGit();
|
|
168
|
+
const result = await git.listRemote([url, 'HEAD']);
|
|
169
|
+
const sha = result.split('\t')[0]?.trim();
|
|
170
|
+
return sha || null;
|
|
171
|
+
}
|
|
172
|
+
catch (err) {
|
|
173
|
+
const msg = err instanceof Error ? err.message : String(err);
|
|
174
|
+
console.warn(`${this.logPrefix} ls-remote failed for ${this.config.repo}: ${msg}`);
|
|
175
|
+
// Fall back to local HEAD if clone dir exists
|
|
176
|
+
const repoName = repoNameFromUrl(this.config.repo);
|
|
177
|
+
const repoDir = path.join(this.options.cloneDir, repoName);
|
|
178
|
+
if (!fs.existsSync(repoDir))
|
|
179
|
+
return null;
|
|
180
|
+
try {
|
|
181
|
+
const git = simpleGit(repoDir);
|
|
182
|
+
return await git.revparse(['HEAD']);
|
|
183
|
+
}
|
|
184
|
+
catch (innerErr) {
|
|
185
|
+
const innerMsg = innerErr instanceof Error ? innerErr.message : String(innerErr);
|
|
186
|
+
console.warn(`${this.logPrefix} local HEAD lookup also failed for ${repoDir}: ${innerMsg}`);
|
|
187
|
+
return null;
|
|
188
|
+
}
|
|
189
|
+
}
|
|
190
|
+
}
|
|
191
|
+
// -----------------------------------------------------------------------
|
|
192
|
+
// Private helpers
|
|
193
|
+
// -----------------------------------------------------------------------
|
|
194
|
+
async ensureRepo(repoDir, repoName) {
|
|
195
|
+
await fs.promises.mkdir(this.options.cloneDir, { recursive: true });
|
|
196
|
+
const gitDir = path.join(repoDir, '.git');
|
|
197
|
+
if (fs.existsSync(gitDir)) {
|
|
198
|
+
console.log(`${this.logPrefix} Pulling latest changes for ${repoName}`);
|
|
199
|
+
const git = simpleGit(repoDir);
|
|
200
|
+
try {
|
|
201
|
+
await git.pull();
|
|
202
|
+
return git;
|
|
203
|
+
}
|
|
204
|
+
catch (err) {
|
|
205
|
+
console.warn(`${this.logPrefix} Corrupted repo at ${repoDir}, re-cloning:`, err);
|
|
206
|
+
await fs.promises.rm(repoDir, { recursive: true, force: true });
|
|
207
|
+
}
|
|
208
|
+
}
|
|
209
|
+
const authUrl = authenticatedUrl(this.config.repo, this.options.githubToken);
|
|
210
|
+
console.log(`${this.logPrefix} Cloning ${this.config.repo} into ${repoDir}`);
|
|
211
|
+
const git = simpleGit(this.options.cloneDir);
|
|
212
|
+
const cloneOpts = ['--depth=1'];
|
|
213
|
+
if (this.config.branch) {
|
|
214
|
+
cloneOpts.push('--branch', this.config.branch);
|
|
215
|
+
}
|
|
216
|
+
await git.clone(authUrl, repoName, cloneOpts);
|
|
217
|
+
return simpleGit(repoDir);
|
|
218
|
+
}
|
|
219
|
+
async walkFiles(dir) {
|
|
220
|
+
const results = [];
|
|
221
|
+
let entries;
|
|
222
|
+
try {
|
|
223
|
+
entries = await fs.promises.readdir(dir, { withFileTypes: true });
|
|
224
|
+
}
|
|
225
|
+
catch (err) {
|
|
226
|
+
console.warn(`${this.logPrefix} Unable to read directory ${dir}:`, err);
|
|
227
|
+
return results;
|
|
228
|
+
}
|
|
229
|
+
for (const entry of entries) {
|
|
230
|
+
if (this.skipDirs.has(entry.name))
|
|
231
|
+
continue;
|
|
232
|
+
const fullPath = path.join(dir, entry.name);
|
|
233
|
+
if (entry.isDirectory()) {
|
|
234
|
+
const nested = await this.walkFiles(fullPath);
|
|
235
|
+
results.push(...nested);
|
|
236
|
+
}
|
|
237
|
+
else if (entry.isFile()) {
|
|
238
|
+
try {
|
|
239
|
+
const stat = await fs.promises.stat(fullPath);
|
|
240
|
+
if (stat.size > this.maxFileSize)
|
|
241
|
+
continue;
|
|
242
|
+
}
|
|
243
|
+
catch (err) {
|
|
244
|
+
console.warn(`${this.logPrefix} Unable to stat ${fullPath}:`, err);
|
|
245
|
+
continue;
|
|
246
|
+
}
|
|
247
|
+
results.push(fullPath);
|
|
248
|
+
}
|
|
249
|
+
}
|
|
250
|
+
return results;
|
|
251
|
+
}
|
|
252
|
+
async computeLocalSha(walkRoot) {
|
|
253
|
+
const files = await this.walkFiles(walkRoot);
|
|
254
|
+
const hash = createHash('sha256');
|
|
255
|
+
for (const f of files.sort()) {
|
|
256
|
+
const stat = await fs.promises.stat(f);
|
|
257
|
+
hash.update(`${f}:${stat.mtimeMs}\n`);
|
|
258
|
+
}
|
|
259
|
+
return `local-${hash.digest('hex').slice(0, 12)}`;
|
|
260
|
+
}
|
|
261
|
+
}
|
|
262
|
+
//# sourceMappingURL=file.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"file.js","sourceRoot":"","sources":["../../../src/indexing/providers/file.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,5 @@
|
|
|
1
|
+
import type { DataProviderFactory } from './types.js';
|
|
2
|
+
export declare function registerProvider(type: string, factory: DataProviderFactory): void;
|
|
3
|
+
export declare function getProvider(type: string): DataProviderFactory;
|
|
4
|
+
export type { DataProvider, DataProviderFactory, ProviderOptions, ContentItem, AcquisitionResult } from './types.js';
|
|
5
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/indexing/providers/index.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,YAAY,CAAC;AAItD,wBAAgB,gBAAgB,CAAC,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,mBAAmB,GAAG,IAAI,CAEjF;AAED,wBAAgB,WAAW,CAAC,IAAI,EAAE,MAAM,GAAG,mBAAmB,CAM7D;AAED,YAAY,EAAE,YAAY,EAAE,mBAAmB,EAAE,eAAe,EAAE,WAAW,EAAE,iBAAiB,EAAE,MAAM,YAAY,CAAC"}
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
// Provider registry — maps source type to a DataProvider factory.
|
|
2
|
+
const registry = new Map();
|
|
3
|
+
export function registerProvider(type, factory) {
|
|
4
|
+
registry.set(type, factory);
|
|
5
|
+
}
|
|
6
|
+
export function getProvider(type) {
|
|
7
|
+
const factory = registry.get(type);
|
|
8
|
+
if (!factory) {
|
|
9
|
+
throw new Error(`Unknown provider type: "${type}". Available: ${[...registry.keys()].join(', ')}`);
|
|
10
|
+
}
|
|
11
|
+
return factory;
|
|
12
|
+
}
|
|
13
|
+
// Register built-in providers
|
|
14
|
+
import { FileDataProvider } from './file.js';
|
|
15
|
+
for (const type of ['markdown', 'code', 'raw-text', 'html']) {
|
|
16
|
+
registerProvider(type, (config, options) => new FileDataProvider(config, options));
|
|
17
|
+
}
|
|
18
|
+
import { SlackDataProvider } from './slack.js';
|
|
19
|
+
registerProvider('slack', (config, options) => new SlackDataProvider(config, options));
|
|
20
|
+
import { DiscordDataProvider } from './discord.js';
|
|
21
|
+
registerProvider('discord', (config, options) => new DiscordDataProvider(config, options));
|
|
22
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/indexing/providers/index.ts"],"names":[],"mappings":"AAAA,kEAAkE;AAIlE,MAAM,QAAQ,GAAG,IAAI,GAAG,EAA+B,CAAC;AAExD,MAAM,UAAU,gBAAgB,CAAC,IAAY,EAAE,OAA4B;IACvE,QAAQ,CAAC,GAAG,CAAC,IAAI,EAAE,OAAO,CAAC,CAAC;AAChC,CAAC;AAED,MAAM,UAAU,WAAW,CAAC,IAAY;IACpC,MAAM,OAAO,GAAG,QAAQ,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;IACnC,IAAI,CAAC,OAAO,EAAE,CAAC;QACX,MAAM,IAAI,KAAK,CAAC,2BAA2B,IAAI,iBAAiB,CAAC,GAAG,QAAQ,CAAC,IAAI,EAAE,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;IACvG,CAAC;IACD,OAAO,OAAO,CAAC;AACnB,CAAC;AAID,8BAA8B;AAC9B,OAAO,EAAE,gBAAgB,EAAE,MAAM,WAAW,CAAC;AAE7C,KAAK,MAAM,IAAI,IAAI,CAAC,UAAU,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,CAAC,EAAE,CAAC;IAC1D,gBAAgB,CAAC,IAAI,EAAE,CAAC,MAAM,EAAE,OAAO,EAAE,EAAE,CAAC,IAAI,gBAAgB,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC,CAAC;AACvF,CAAC;AAED,OAAO,EAAE,iBAAiB,EAAE,MAAM,YAAY,CAAC;AAE/C,gBAAgB,CAAC,OAAO,EAAE,CAAC,MAAM,EAAE,OAAO,EAAE,EAAE,CAAC,IAAI,iBAAiB,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC,CAAC;AAEvF,OAAO,EAAE,mBAAmB,EAAE,MAAM,cAAc,CAAC;AAEnD,gBAAgB,CAAC,SAAS,EAAE,CAAC,MAAM,EAAE,OAAO,EAAE,EAAE,CAAC,IAAI,mBAAmB,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC,CAAC"}
|
|
@@ -0,0 +1,62 @@
|
|
|
1
|
+
import { WebClient } from '@slack/web-api';
|
|
2
|
+
export interface SlackMessage {
|
|
3
|
+
ts: string;
|
|
4
|
+
user?: string;
|
|
5
|
+
text?: string;
|
|
6
|
+
thread_ts?: string;
|
|
7
|
+
reply_count?: number;
|
|
8
|
+
reactions?: Array<{
|
|
9
|
+
name: string;
|
|
10
|
+
count: number;
|
|
11
|
+
}>;
|
|
12
|
+
team?: string;
|
|
13
|
+
}
|
|
14
|
+
export interface SlackUser {
|
|
15
|
+
id: string;
|
|
16
|
+
displayName: string;
|
|
17
|
+
teamId?: string;
|
|
18
|
+
}
|
|
19
|
+
export interface SlackApiClientOptions {
|
|
20
|
+
token: string;
|
|
21
|
+
/** Max retries on rate-limited requests (default: 5) */
|
|
22
|
+
maxRetries?: number;
|
|
23
|
+
}
|
|
24
|
+
export declare class SlackApiClient {
|
|
25
|
+
private client;
|
|
26
|
+
private maxRetries;
|
|
27
|
+
private userCache;
|
|
28
|
+
private teamNameCache;
|
|
29
|
+
private logPrefix;
|
|
30
|
+
constructor(options: SlackApiClientOptions);
|
|
31
|
+
/**
|
|
32
|
+
* Fetch channel message history, paginated. Returns all top-level messages.
|
|
33
|
+
* If `oldest` is provided, only messages after that timestamp are returned.
|
|
34
|
+
*/
|
|
35
|
+
fetchChannelHistory(channelId: string, oldest?: string, limit?: number): Promise<SlackMessage[]>;
|
|
36
|
+
/**
|
|
37
|
+
* Fetch all replies in a thread, paginated.
|
|
38
|
+
*/
|
|
39
|
+
fetchThreadReplies(channelId: string, threadTs: string): Promise<SlackMessage[]>;
|
|
40
|
+
/**
|
|
41
|
+
* Fetch user info with caching. Returns display name with workspace suffix
|
|
42
|
+
* for external users in Slack Connect channels.
|
|
43
|
+
*/
|
|
44
|
+
fetchUserInfo(userId: string): Promise<SlackUser>;
|
|
45
|
+
/**
|
|
46
|
+
* Get a permalink URL for a specific message.
|
|
47
|
+
*/
|
|
48
|
+
getChannelPermalink(channelId: string, messageTs: string): Promise<string>;
|
|
49
|
+
/**
|
|
50
|
+
* Resolve a team ID to a team name (for Slack Connect workspace suffix).
|
|
51
|
+
* Caches results. Returns null if lookup fails (e.g., no permission).
|
|
52
|
+
*/
|
|
53
|
+
private resolveTeamName;
|
|
54
|
+
/**
|
|
55
|
+
* Call a Slack API method with retry on rate limit (429) responses.
|
|
56
|
+
* Respects Retry-After header with exponential backoff fallback.
|
|
57
|
+
*/
|
|
58
|
+
private callWithRetry;
|
|
59
|
+
/** Expose the underlying WebClient for testing/advanced usage. */
|
|
60
|
+
get webClient(): WebClient;
|
|
61
|
+
}
|
|
62
|
+
//# sourceMappingURL=slack-api.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"slack-api.d.ts","sourceRoot":"","sources":["../../../src/indexing/providers/slack-api.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,SAAS,EAAyB,MAAM,gBAAgB,CAAC;AAIlE,MAAM,WAAW,YAAY;IACzB,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,SAAS,CAAC,EAAE,KAAK,CAAC;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,KAAK,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;IACnD,IAAI,CAAC,EAAE,MAAM,CAAC;CACjB;AAED,MAAM,WAAW,SAAS;IACtB,EAAE,EAAE,MAAM,CAAC;IACX,WAAW,EAAE,MAAM,CAAC;IACpB,MAAM,CAAC,EAAE,MAAM,CAAC;CACnB;AAED,MAAM,WAAW,qBAAqB;IAClC,KAAK,EAAE,MAAM,CAAC;IACd,wDAAwD;IACxD,UAAU,CAAC,EAAE,MAAM,CAAC;CACvB;AAYD,qBAAa,cAAc;IACvB,OAAO,CAAC,MAAM,CAAY;IAC1B,OAAO,CAAC,UAAU,CAAS;IAC3B,OAAO,CAAC,SAAS,CAAgC;IACjD,OAAO,CAAC,aAAa,CAA6B;IAClD,OAAO,CAAC,SAAS,CAAiB;gBAEtB,OAAO,EAAE,qBAAqB;IAQ1C;;;OAGG;IACG,mBAAmB,CAAC,SAAS,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,MAAM,EAAE,KAAK,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,YAAY,EAAE,CAAC;IAoCtG;;OAEG;IACG,kBAAkB,CAAC,SAAS,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,YAAY,EAAE,CAAC;IAgCtF;;;OAGG;IACG,aAAa,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,SAAS,CAAC;IA+BvD;;OAEG;IACG,mBAAmB,CAAC,SAAS,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC;IAWhF;;;OAGG;YACW,eAAe;IAiB7B;;;OAGG;YACW,aAAa;IA6B3B,kEAAkE;IAClE,IAAI,SAAS,IAAI,SAAS,CAEzB;CACJ"}
|
|
@@ -0,0 +1,167 @@
|
|
|
1
|
+
// Slack Web API client wrapper — handles pagination, rate limiting, user caching.
|
|
2
|
+
import { WebClient } from '@slack/web-api';
|
|
3
|
+
// ── Rate limit helpers ───────────────────────────────────────────────────────
|
|
4
|
+
function sleep(ms) {
|
|
5
|
+
return new Promise(resolve => setTimeout(resolve, ms));
|
|
6
|
+
}
|
|
7
|
+
// ── Client ───────────────────────────────────────────────────────────────────
|
|
8
|
+
const MAX_PAGES = 100;
|
|
9
|
+
export class SlackApiClient {
|
|
10
|
+
client;
|
|
11
|
+
maxRetries;
|
|
12
|
+
userCache = new Map();
|
|
13
|
+
teamNameCache = new Map();
|
|
14
|
+
logPrefix = '[slack-api]';
|
|
15
|
+
constructor(options) {
|
|
16
|
+
this.client = new WebClient(options.token, {
|
|
17
|
+
// Disable built-in retry so we handle it ourselves
|
|
18
|
+
retryConfig: { retries: 0 },
|
|
19
|
+
});
|
|
20
|
+
this.maxRetries = options.maxRetries ?? 5;
|
|
21
|
+
}
|
|
22
|
+
/**
|
|
23
|
+
* Fetch channel message history, paginated. Returns all top-level messages.
|
|
24
|
+
* If `oldest` is provided, only messages after that timestamp are returned.
|
|
25
|
+
*/
|
|
26
|
+
async fetchChannelHistory(channelId, oldest, limit) {
|
|
27
|
+
const messages = [];
|
|
28
|
+
let cursor;
|
|
29
|
+
const pageLimit = limit ?? 200;
|
|
30
|
+
let pages = 0;
|
|
31
|
+
do {
|
|
32
|
+
pages++;
|
|
33
|
+
const result = await this.callWithRetry(() => this.client.conversations.history({
|
|
34
|
+
channel: channelId,
|
|
35
|
+
oldest,
|
|
36
|
+
cursor,
|
|
37
|
+
limit: pageLimit,
|
|
38
|
+
}));
|
|
39
|
+
const rawMessages = result.messages;
|
|
40
|
+
if (rawMessages) {
|
|
41
|
+
messages.push(...rawMessages);
|
|
42
|
+
}
|
|
43
|
+
// When an explicit limit is provided, don't paginate — return just the first page
|
|
44
|
+
if (limit !== undefined)
|
|
45
|
+
break;
|
|
46
|
+
cursor = result.response_metadata?.next_cursor;
|
|
47
|
+
if (pages >= MAX_PAGES) {
|
|
48
|
+
console.warn(`${this.logPrefix} fetchChannelHistory hit max pages (${MAX_PAGES}) for channel ${channelId}`);
|
|
49
|
+
break;
|
|
50
|
+
}
|
|
51
|
+
} while (cursor);
|
|
52
|
+
return messages;
|
|
53
|
+
}
|
|
54
|
+
/**
|
|
55
|
+
* Fetch all replies in a thread, paginated.
|
|
56
|
+
*/
|
|
57
|
+
async fetchThreadReplies(channelId, threadTs) {
|
|
58
|
+
const messages = [];
|
|
59
|
+
let cursor;
|
|
60
|
+
let pages = 0;
|
|
61
|
+
do {
|
|
62
|
+
pages++;
|
|
63
|
+
const result = await this.callWithRetry(() => this.client.conversations.replies({
|
|
64
|
+
channel: channelId,
|
|
65
|
+
ts: threadTs,
|
|
66
|
+
cursor,
|
|
67
|
+
limit: 200,
|
|
68
|
+
}));
|
|
69
|
+
const rawMessages = result.messages;
|
|
70
|
+
if (rawMessages) {
|
|
71
|
+
messages.push(...rawMessages);
|
|
72
|
+
}
|
|
73
|
+
cursor = result.response_metadata?.next_cursor;
|
|
74
|
+
if (pages >= MAX_PAGES) {
|
|
75
|
+
console.warn(`${this.logPrefix} fetchThreadReplies hit max pages (${MAX_PAGES}) for thread ${threadTs}`);
|
|
76
|
+
break;
|
|
77
|
+
}
|
|
78
|
+
} while (cursor);
|
|
79
|
+
return messages;
|
|
80
|
+
}
|
|
81
|
+
/**
|
|
82
|
+
* Fetch user info with caching. Returns display name with workspace suffix
|
|
83
|
+
* for external users in Slack Connect channels.
|
|
84
|
+
*/
|
|
85
|
+
async fetchUserInfo(userId) {
|
|
86
|
+
const cached = this.userCache.get(userId);
|
|
87
|
+
if (cached)
|
|
88
|
+
return cached;
|
|
89
|
+
const result = await this.callWithRetry(() => this.client.users.info({ user: userId }));
|
|
90
|
+
const user = result.user;
|
|
91
|
+
const profile = user?.profile;
|
|
92
|
+
const displayName = profile?.display_name || profile?.real_name || userId;
|
|
93
|
+
const teamId = user?.team_id;
|
|
94
|
+
let fullName = displayName;
|
|
95
|
+
if (teamId) {
|
|
96
|
+
const teamName = await this.resolveTeamName(teamId);
|
|
97
|
+
if (teamName) {
|
|
98
|
+
fullName = `${displayName} (${teamName})`;
|
|
99
|
+
}
|
|
100
|
+
}
|
|
101
|
+
const slackUser = {
|
|
102
|
+
id: userId,
|
|
103
|
+
displayName: fullName,
|
|
104
|
+
teamId,
|
|
105
|
+
};
|
|
106
|
+
this.userCache.set(userId, slackUser);
|
|
107
|
+
return slackUser;
|
|
108
|
+
}
|
|
109
|
+
/**
|
|
110
|
+
* Get a permalink URL for a specific message.
|
|
111
|
+
*/
|
|
112
|
+
async getChannelPermalink(channelId, messageTs) {
|
|
113
|
+
const result = await this.callWithRetry(() => this.client.chat.getPermalink({
|
|
114
|
+
channel: channelId,
|
|
115
|
+
message_ts: messageTs,
|
|
116
|
+
}));
|
|
117
|
+
return result.permalink;
|
|
118
|
+
}
|
|
119
|
+
/**
|
|
120
|
+
* Resolve a team ID to a team name (for Slack Connect workspace suffix).
|
|
121
|
+
* Caches results. Returns null if lookup fails (e.g., no permission).
|
|
122
|
+
*/
|
|
123
|
+
async resolveTeamName(teamId) {
|
|
124
|
+
const cached = this.teamNameCache.get(teamId);
|
|
125
|
+
if (cached !== undefined)
|
|
126
|
+
return cached || null;
|
|
127
|
+
try {
|
|
128
|
+
const result = await this.callWithRetry(() => this.client.team.info({ team: teamId }));
|
|
129
|
+
const name = result.team?.name ?? null;
|
|
130
|
+
this.teamNameCache.set(teamId, name ?? '');
|
|
131
|
+
return name;
|
|
132
|
+
}
|
|
133
|
+
catch {
|
|
134
|
+
this.teamNameCache.set(teamId, '');
|
|
135
|
+
return null;
|
|
136
|
+
}
|
|
137
|
+
}
|
|
138
|
+
/**
|
|
139
|
+
* Call a Slack API method with retry on rate limit (429) responses.
|
|
140
|
+
* Respects Retry-After header with exponential backoff fallback.
|
|
141
|
+
*/
|
|
142
|
+
async callWithRetry(fn, attempt = 1) {
|
|
143
|
+
try {
|
|
144
|
+
return await fn();
|
|
145
|
+
}
|
|
146
|
+
catch (error) {
|
|
147
|
+
const isRateLimited = error?.code === 'slack_webapi_rate_limited_error'
|
|
148
|
+
|| error?.data?.error === 'ratelimited';
|
|
149
|
+
if (!isRateLimited || attempt > this.maxRetries) {
|
|
150
|
+
throw error;
|
|
151
|
+
}
|
|
152
|
+
const retryAfter = error?.data?.retryAfter
|
|
153
|
+
|| error?.retryAfter
|
|
154
|
+
|| Math.pow(2, attempt);
|
|
155
|
+
const delayMs = Math.max(retryAfter * 1000, 1000);
|
|
156
|
+
console.warn(`${this.logPrefix} Rate limited (attempt ${attempt}/${this.maxRetries}), ` +
|
|
157
|
+
`retrying in ${retryAfter}s`);
|
|
158
|
+
await sleep(delayMs);
|
|
159
|
+
return this.callWithRetry(fn, attempt + 1);
|
|
160
|
+
}
|
|
161
|
+
}
|
|
162
|
+
/** Expose the underlying WebClient for testing/advanced usage. */
|
|
163
|
+
get webClient() {
|
|
164
|
+
return this.client;
|
|
165
|
+
}
|
|
166
|
+
}
|
|
167
|
+
//# sourceMappingURL=slack-api.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"slack-api.js","sourceRoot":"","sources":["../../../src/indexing/providers/slack-api.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
import type { SourceConfig } from '../../types.js';
|
|
2
|
+
import type { DataProvider, AcquisitionResult, ProviderOptions } from './types.js';
|
|
3
|
+
export declare class SlackDataProvider implements DataProvider {
|
|
4
|
+
private config;
|
|
5
|
+
private apiClient;
|
|
6
|
+
private openaiClient;
|
|
7
|
+
private logPrefix;
|
|
8
|
+
constructor(config: SourceConfig, options: ProviderOptions);
|
|
9
|
+
fullAcquire(): Promise<AcquisitionResult>;
|
|
10
|
+
incrementalAcquire(lastStateToken: string): Promise<AcquisitionResult>;
|
|
11
|
+
getCurrentStateToken(): Promise<string | null>;
|
|
12
|
+
/**
|
|
13
|
+
* Process a single channel: fetch threads, distill, return items.
|
|
14
|
+
*/
|
|
15
|
+
private processChannel;
|
|
16
|
+
/**
|
|
17
|
+
* Process a single thread: fetch replies, resolve users, distill, create items.
|
|
18
|
+
*/
|
|
19
|
+
private processThread;
|
|
20
|
+
}
|
|
21
|
+
//# sourceMappingURL=slack.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"slack.d.ts","sourceRoot":"","sources":["../../../src/indexing/providers/slack.ts"],"names":[],"mappings":"AAQA,OAAO,KAAK,EAAE,YAAY,EAAqB,MAAM,gBAAgB,CAAC;AACtE,OAAO,KAAK,EAAE,YAAY,EAAE,iBAAiB,EAAe,eAAe,EAAE,MAAM,YAAY,CAAC;AAEhG,qBAAa,iBAAkB,YAAW,YAAY;IAClD,OAAO,CAAC,MAAM,CAAoB;IAClC,OAAO,CAAC,SAAS,CAAiB;IAClC,OAAO,CAAC,YAAY,CAAS;IAC7B,OAAO,CAAC,SAAS,CAAS;gBAEd,MAAM,EAAE,YAAY,EAAE,OAAO,EAAE,eAAe;IAcpD,WAAW,IAAI,OAAO,CAAC,iBAAiB,CAAC;IA+BzC,kBAAkB,CAAC,cAAc,EAAE,MAAM,GAAG,OAAO,CAAC,iBAAiB,CAAC;IA+BtE,oBAAoB,IAAI,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC;IAwBpD;;OAEG;YACW,cAAc;IA+B5B;;OAEG;YACW,aAAa;CAqE9B"}
|