@copilotkit/pathfinder 1.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.
- package/.env.example +20 -0
- package/.superpowers/brainstorm/47098-1775507869/content/homepage-mockup.html +324 -0
- package/.superpowers/brainstorm/47098-1775507869/state/server-stopped +1 -0
- package/.superpowers/brainstorm/47098-1775507869/state/server.log +13 -0
- package/.superpowers/brainstorm/47098-1775507869/state/server.pid +1 -0
- package/.superpowers/brainstorm/82141-1775511032/content/migration-v2.html +340 -0
- package/.superpowers/brainstorm/82141-1775511032/content/migration.html +340 -0
- package/.superpowers/brainstorm/82141-1775511032/state/server-stopped +1 -0
- package/.superpowers/brainstorm/82141-1775511032/state/server.log +4 -0
- package/.superpowers/brainstorm/82141-1775511032/state/server.pid +1 -0
- package/CHANGELOG.md +26 -0
- package/LICENSE +21 -0
- package/README.md +284 -0
- package/dist/config.d.ts +32 -0
- package/dist/config.d.ts.map +1 -0
- package/dist/config.js +180 -0
- package/dist/config.js.map +1 -0
- package/dist/db/client.d.ts +22 -0
- package/dist/db/client.d.ts.map +1 -0
- package/dist/db/client.js +134 -0
- package/dist/db/client.js.map +1 -0
- package/dist/db/queries.d.ts +51 -0
- package/dist/db/queries.d.ts.map +1 -0
- package/dist/db/queries.js +271 -0
- package/dist/db/queries.js.map +1 -0
- package/dist/db/schema.d.ts +11 -0
- package/dist/db/schema.d.ts.map +1 -0
- package/dist/db/schema.js +63 -0
- package/dist/db/schema.js.map +1 -0
- package/dist/index.d.ts +2 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +366 -0
- package/dist/index.js.map +1 -0
- package/dist/indexing/chunking/code.d.ts +17 -0
- package/dist/indexing/chunking/code.d.ts.map +1 -0
- package/dist/indexing/chunking/code.js +277 -0
- package/dist/indexing/chunking/code.js.map +1 -0
- package/dist/indexing/chunking/index.d.ts +6 -0
- package/dist/indexing/chunking/index.d.ts.map +1 -0
- package/dist/indexing/chunking/index.js +19 -0
- package/dist/indexing/chunking/index.js.map +1 -0
- package/dist/indexing/chunking/markdown.d.ts +16 -0
- package/dist/indexing/chunking/markdown.d.ts.map +1 -0
- package/dist/indexing/chunking/markdown.js +283 -0
- package/dist/indexing/chunking/markdown.js.map +1 -0
- package/dist/indexing/chunking/raw-text.d.ts +11 -0
- package/dist/indexing/chunking/raw-text.d.ts.map +1 -0
- package/dist/indexing/chunking/raw-text.js +59 -0
- package/dist/indexing/chunking/raw-text.js.map +1 -0
- package/dist/indexing/embeddings.d.ts +10 -0
- package/dist/indexing/embeddings.d.ts.map +1 -0
- package/dist/indexing/embeddings.js +78 -0
- package/dist/indexing/embeddings.js.map +1 -0
- package/dist/indexing/orchestrator.d.ts +69 -0
- package/dist/indexing/orchestrator.d.ts.map +1 -0
- package/dist/indexing/orchestrator.js +387 -0
- package/dist/indexing/orchestrator.js.map +1 -0
- package/dist/indexing/source-indexer.d.ts +68 -0
- package/dist/indexing/source-indexer.d.ts.map +1 -0
- package/dist/indexing/source-indexer.js +379 -0
- package/dist/indexing/source-indexer.js.map +1 -0
- package/dist/indexing/url-derivation.d.ts +7 -0
- package/dist/indexing/url-derivation.d.ts.map +1 -0
- package/dist/indexing/url-derivation.js +31 -0
- package/dist/indexing/url-derivation.js.map +1 -0
- package/dist/mcp/server.d.ts +10 -0
- package/dist/mcp/server.d.ts.map +1 -0
- package/dist/mcp/server.js +67 -0
- package/dist/mcp/server.js.map +1 -0
- package/dist/mcp/tools/bash-fs.d.ts +19 -0
- package/dist/mcp/tools/bash-fs.d.ts.map +1 -0
- package/dist/mcp/tools/bash-fs.js +134 -0
- package/dist/mcp/tools/bash-fs.js.map +1 -0
- package/dist/mcp/tools/bash-grep.d.ts +29 -0
- package/dist/mcp/tools/bash-grep.d.ts.map +1 -0
- package/dist/mcp/tools/bash-grep.js +153 -0
- package/dist/mcp/tools/bash-grep.js.map +1 -0
- package/dist/mcp/tools/bash-related.d.ts +14 -0
- package/dist/mcp/tools/bash-related.d.ts.map +1 -0
- package/dist/mcp/tools/bash-related.js +54 -0
- package/dist/mcp/tools/bash-related.js.map +1 -0
- package/dist/mcp/tools/bash-session.d.ts +23 -0
- package/dist/mcp/tools/bash-session.d.ts.map +1 -0
- package/dist/mcp/tools/bash-session.js +60 -0
- package/dist/mcp/tools/bash-session.js.map +1 -0
- package/dist/mcp/tools/bash-telemetry.d.ts +26 -0
- package/dist/mcp/tools/bash-telemetry.d.ts.map +1 -0
- package/dist/mcp/tools/bash-telemetry.js +53 -0
- package/dist/mcp/tools/bash-telemetry.js.map +1 -0
- package/dist/mcp/tools/bash-virtual-files.d.ts +3 -0
- package/dist/mcp/tools/bash-virtual-files.d.ts.map +1 -0
- package/dist/mcp/tools/bash-virtual-files.js +65 -0
- package/dist/mcp/tools/bash-virtual-files.js.map +1 -0
- package/dist/mcp/tools/bash.d.ts +25 -0
- package/dist/mcp/tools/bash.d.ts.map +1 -0
- package/dist/mcp/tools/bash.js +140 -0
- package/dist/mcp/tools/bash.js.map +1 -0
- package/dist/mcp/tools/collect.d.ts +13 -0
- package/dist/mcp/tools/collect.d.ts.map +1 -0
- package/dist/mcp/tools/collect.js +56 -0
- package/dist/mcp/tools/collect.js.map +1 -0
- package/dist/mcp/tools/search.d.ts +5 -0
- package/dist/mcp/tools/search.d.ts.map +1 -0
- package/dist/mcp/tools/search.js +68 -0
- package/dist/mcp/tools/search.js.map +1 -0
- package/dist/types.d.ts +1237 -0
- package/dist/types.d.ts.map +1 -0
- package/dist/types.js +163 -0
- package/dist/types.js.map +1 -0
- package/dist/webhooks/github.d.ts +12 -0
- package/dist/webhooks/github.d.ts.map +1 -0
- package/dist/webhooks/github.js +117 -0
- package/dist/webhooks/github.js.map +1 -0
- package/package.json +48 -0
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"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"}
|
package/dist/types.js
ADDED
|
@@ -0,0 +1,163 @@
|
|
|
1
|
+
// Unified type definitions for mcp-docs server configuration and data models.
|
|
2
|
+
// Zod schemas provide runtime validation; TypeScript types are inferred from them.
|
|
3
|
+
import { z } from 'zod';
|
|
4
|
+
// ── Source configuration schemas ──────────────────────────────────────────────
|
|
5
|
+
export const UrlDerivationConfigSchema = z.object({
|
|
6
|
+
strip_prefix: z.string().optional(),
|
|
7
|
+
strip_suffix: z.string().optional(),
|
|
8
|
+
strip_route_groups: z.boolean().optional(),
|
|
9
|
+
strip_index: z.boolean().optional(),
|
|
10
|
+
});
|
|
11
|
+
// ChunkConfig field applicability by source type:
|
|
12
|
+
// markdown/raw-text: target_tokens, overlap_tokens
|
|
13
|
+
// code: target_lines, overlap_lines
|
|
14
|
+
export const ChunkConfigSchema = z.object({
|
|
15
|
+
target_tokens: z.number().int().positive().optional(),
|
|
16
|
+
overlap_tokens: z.number().int().nonnegative().optional(),
|
|
17
|
+
target_lines: z.number().int().positive().optional(),
|
|
18
|
+
overlap_lines: z.number().int().nonnegative().optional(),
|
|
19
|
+
});
|
|
20
|
+
export const SourceConfigSchema = z.object({
|
|
21
|
+
name: z.string().min(1),
|
|
22
|
+
type: z.enum(['markdown', 'code', 'raw-text']),
|
|
23
|
+
repo: z.string().url().optional(),
|
|
24
|
+
branch: z.string().optional(),
|
|
25
|
+
path: z.string().min(1),
|
|
26
|
+
base_url: z.string().url().optional(),
|
|
27
|
+
url_derivation: UrlDerivationConfigSchema.optional(),
|
|
28
|
+
file_patterns: z.array(z.string()).min(1),
|
|
29
|
+
exclude_patterns: z.array(z.string()).optional(),
|
|
30
|
+
skip_dirs: z.array(z.string()).optional(),
|
|
31
|
+
max_file_size: z.number().int().positive().optional(),
|
|
32
|
+
chunk: ChunkConfigSchema,
|
|
33
|
+
});
|
|
34
|
+
// ── Tool configuration schemas ────────────────────────────────────────────────
|
|
35
|
+
const SearchToolConfigObjectSchema = z.object({
|
|
36
|
+
name: z.string().min(1),
|
|
37
|
+
type: z.literal('search'),
|
|
38
|
+
description: z.string().min(1),
|
|
39
|
+
source: z.string().min(1),
|
|
40
|
+
default_limit: z.number().int().positive(),
|
|
41
|
+
max_limit: z.number().int().positive(),
|
|
42
|
+
result_format: z.enum(['docs', 'code', 'raw']),
|
|
43
|
+
});
|
|
44
|
+
// SearchToolConfig type is inferred from the object schema directly.
|
|
45
|
+
// Cross-field validation (default_limit <= max_limit) lives in ServerConfigSchema.superRefine.
|
|
46
|
+
export const SearchToolConfigSchema = SearchToolConfigObjectSchema;
|
|
47
|
+
export const BashCacheConfigSchema = z.object({
|
|
48
|
+
max_entries: z.number().int().positive(),
|
|
49
|
+
ttl_seconds: z.number().int().positive(),
|
|
50
|
+
});
|
|
51
|
+
export const BashOptionsSchema = z.object({
|
|
52
|
+
session_state: z.boolean(),
|
|
53
|
+
grep_strategy: z.enum(['memory', 'vector', 'hybrid']),
|
|
54
|
+
workspace: z.boolean(),
|
|
55
|
+
virtual_files: z.boolean(),
|
|
56
|
+
max_file_size: z.number().int().positive(),
|
|
57
|
+
cache: BashCacheConfigSchema,
|
|
58
|
+
}).partial();
|
|
59
|
+
export const BashToolConfigSchema = z.object({
|
|
60
|
+
name: z.string().min(1),
|
|
61
|
+
type: z.literal('bash'),
|
|
62
|
+
description: z.string().min(1),
|
|
63
|
+
sources: z.array(z.string().min(1)).min(1),
|
|
64
|
+
bash: BashOptionsSchema.optional(),
|
|
65
|
+
});
|
|
66
|
+
export const CollectToolConfigSchema = z.object({
|
|
67
|
+
name: z.string().min(1),
|
|
68
|
+
type: z.literal('collect'),
|
|
69
|
+
description: z.string().min(1),
|
|
70
|
+
response: z.string().min(1),
|
|
71
|
+
schema: z.record(z.string(), z.object({
|
|
72
|
+
type: z.enum(['string', 'number', 'enum']),
|
|
73
|
+
description: z.string().optional(),
|
|
74
|
+
required: z.boolean().optional(),
|
|
75
|
+
values: z.array(z.string()).optional(),
|
|
76
|
+
}).refine(f => f.type !== 'enum' || (f.values && f.values.length > 0), {
|
|
77
|
+
message: 'enum fields must have a non-empty values array',
|
|
78
|
+
}).refine(f => f.type === 'enum' || !f.values, {
|
|
79
|
+
message: 'values is only valid for enum fields',
|
|
80
|
+
})).refine(s => Object.keys(s).length > 0, { message: 'collect tool schema must define at least one field' }),
|
|
81
|
+
});
|
|
82
|
+
// Cross-field constraints (e.g. default_limit <= max_limit for search tools)
|
|
83
|
+
// are enforced in ServerConfigSchema.superRefine, not here.
|
|
84
|
+
export const AnyToolConfigSchema = z.discriminatedUnion('type', [
|
|
85
|
+
SearchToolConfigObjectSchema,
|
|
86
|
+
CollectToolConfigSchema,
|
|
87
|
+
BashToolConfigSchema,
|
|
88
|
+
]);
|
|
89
|
+
// ── Embedding configuration schemas ───────────────────────────────────────────
|
|
90
|
+
export const EmbeddingConfigSchema = z.object({
|
|
91
|
+
provider: z.enum(['openai']),
|
|
92
|
+
model: z.string().min(1),
|
|
93
|
+
dimensions: z.number().int().positive(),
|
|
94
|
+
});
|
|
95
|
+
// ── Indexing configuration schemas ────────────────────────────────────────────
|
|
96
|
+
export const IndexingConfigSchema = z.object({
|
|
97
|
+
auto_reindex: z.boolean(),
|
|
98
|
+
reindex_hour_utc: z.number().int().min(0).max(23),
|
|
99
|
+
stale_threshold_hours: z.number().int().positive(),
|
|
100
|
+
});
|
|
101
|
+
// ── Webhook configuration schemas ─────────────────────────────────────────────
|
|
102
|
+
export const WebhookConfigSchema = z.object({
|
|
103
|
+
repo_sources: z.record(z.string(), z.array(z.string())),
|
|
104
|
+
path_triggers: z.record(z.string(), z.array(z.string())),
|
|
105
|
+
});
|
|
106
|
+
// ── Top-level server configuration schema ─────────────────────────────────────
|
|
107
|
+
export const ServerConfigSchema = z.object({
|
|
108
|
+
server: z.object({
|
|
109
|
+
name: z.string().min(1),
|
|
110
|
+
version: z.string().min(1),
|
|
111
|
+
}),
|
|
112
|
+
sources: z.array(SourceConfigSchema).min(1),
|
|
113
|
+
tools: z.array(AnyToolConfigSchema).min(1),
|
|
114
|
+
embedding: EmbeddingConfigSchema.optional(),
|
|
115
|
+
indexing: IndexingConfigSchema.optional(),
|
|
116
|
+
webhook: WebhookConfigSchema.optional(),
|
|
117
|
+
}).superRefine((cfg, ctx) => {
|
|
118
|
+
const hasRag = cfg.tools.some(t => t.type === 'search');
|
|
119
|
+
if (hasRag && !cfg.embedding) {
|
|
120
|
+
ctx.addIssue({
|
|
121
|
+
code: z.ZodIssueCode.custom,
|
|
122
|
+
message: 'embedding config is required when search tools are configured.',
|
|
123
|
+
path: ['embedding'],
|
|
124
|
+
});
|
|
125
|
+
}
|
|
126
|
+
if (hasRag && !cfg.indexing) {
|
|
127
|
+
ctx.addIssue({
|
|
128
|
+
code: z.ZodIssueCode.custom,
|
|
129
|
+
message: 'indexing config is required when search tools are configured.',
|
|
130
|
+
path: ['indexing'],
|
|
131
|
+
});
|
|
132
|
+
}
|
|
133
|
+
const sourceNames = new Set(cfg.sources.map(s => s.name));
|
|
134
|
+
for (const tool of cfg.tools) {
|
|
135
|
+
if (tool.type === 'search' && tool.default_limit > tool.max_limit) {
|
|
136
|
+
ctx.addIssue({
|
|
137
|
+
code: z.ZodIssueCode.custom,
|
|
138
|
+
message: `Tool "${tool.name}": default_limit must not exceed max_limit`,
|
|
139
|
+
path: ['tools'],
|
|
140
|
+
});
|
|
141
|
+
}
|
|
142
|
+
if (tool.type === 'bash') {
|
|
143
|
+
for (const src of tool.sources) {
|
|
144
|
+
if (!sourceNames.has(src)) {
|
|
145
|
+
ctx.addIssue({
|
|
146
|
+
code: z.ZodIssueCode.custom,
|
|
147
|
+
message: `Bash tool "${tool.name}" references source "${src}" which is not defined in sources.`,
|
|
148
|
+
path: ['tools'],
|
|
149
|
+
});
|
|
150
|
+
}
|
|
151
|
+
}
|
|
152
|
+
const grepStrategy = tool.bash?.grep_strategy;
|
|
153
|
+
if ((grepStrategy === 'vector' || grepStrategy === 'hybrid') && !cfg.embedding) {
|
|
154
|
+
ctx.addIssue({
|
|
155
|
+
code: z.ZodIssueCode.custom,
|
|
156
|
+
message: `Bash tool "${tool.name}" uses grep_strategy "${grepStrategy}" which requires embedding config.`,
|
|
157
|
+
path: ['embedding'],
|
|
158
|
+
});
|
|
159
|
+
}
|
|
160
|
+
}
|
|
161
|
+
}
|
|
162
|
+
});
|
|
163
|
+
//# sourceMappingURL=types.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.js","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
import type { Request, Response } from "express";
|
|
2
|
+
/**
|
|
3
|
+
* Minimal interface for the orchestrator dependency. The full
|
|
4
|
+
* IndexingOrchestrator lives in ../indexing/orchestrator.ts — we only
|
|
5
|
+
* depend on the subset we actually call so the webhook handler can function
|
|
6
|
+
* independently.
|
|
7
|
+
*/
|
|
8
|
+
export interface ReindexOrchestrator {
|
|
9
|
+
queueIncrementalReindex(repoUrl: string): void;
|
|
10
|
+
}
|
|
11
|
+
export declare function createWebhookHandler(orchestrator: ReindexOrchestrator): (req: Request, res: Response) => Promise<void>;
|
|
12
|
+
//# sourceMappingURL=github.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"github.d.ts","sourceRoot":"","sources":["../../src/webhooks/github.ts"],"names":[],"mappings":"AAKA,OAAO,KAAK,EAAE,OAAO,EAAE,QAAQ,EAAE,MAAM,SAAS,CAAC;AAyBjD;;;;;GAKG;AACH,MAAM,WAAW,mBAAmB;IAChC,uBAAuB,CAAC,OAAO,EAAE,MAAM,GAAG,IAAI,CAAC;CAClD;AAiDD,wBAAgB,oBAAoB,CAAC,YAAY,EAAE,mBAAmB,IACxB,KAAK,OAAO,EAAE,KAAK,QAAQ,KAAG,OAAO,CAAC,IAAI,CAAC,CAwFxF"}
|
|
@@ -0,0 +1,117 @@
|
|
|
1
|
+
// GitHub webhook handler for push-event-driven incremental re-indexing.
|
|
2
|
+
// Fully config-driven: uses webhook.repo_sources and webhook.path_triggers
|
|
3
|
+
// from mcp-docs.yaml to determine which pushes trigger reindexing.
|
|
4
|
+
import crypto from "node:crypto";
|
|
5
|
+
import { getConfig, getServerConfig } from "../config.js";
|
|
6
|
+
// ---------------------------------------------------------------------------
|
|
7
|
+
// Signature verification
|
|
8
|
+
// ---------------------------------------------------------------------------
|
|
9
|
+
function verifySignature(rawBody, signatureHeader, secret) {
|
|
10
|
+
if (!signatureHeader)
|
|
11
|
+
return false;
|
|
12
|
+
const expected = "sha256=" + crypto.createHmac("sha256", secret).update(rawBody).digest("hex");
|
|
13
|
+
// Both strings must be the same length for timingSafeEqual
|
|
14
|
+
if (signatureHeader.length !== expected.length)
|
|
15
|
+
return false;
|
|
16
|
+
return crypto.timingSafeEqual(Buffer.from(signatureHeader, "utf-8"), Buffer.from(expected, "utf-8"));
|
|
17
|
+
}
|
|
18
|
+
// ---------------------------------------------------------------------------
|
|
19
|
+
// Push-event helpers
|
|
20
|
+
// ---------------------------------------------------------------------------
|
|
21
|
+
function isDefaultBranchPush(payload) {
|
|
22
|
+
const branch = payload.ref.replace("refs/heads/", "");
|
|
23
|
+
return branch === payload.repository.default_branch;
|
|
24
|
+
}
|
|
25
|
+
/**
|
|
26
|
+
* Check if any committed files match any of the given path prefixes.
|
|
27
|
+
* An empty prefixes array means "match everything" (no path filtering).
|
|
28
|
+
*/
|
|
29
|
+
function touchesPaths(payload, prefixes) {
|
|
30
|
+
if (prefixes.length === 0)
|
|
31
|
+
return true;
|
|
32
|
+
for (const commit of payload.commits) {
|
|
33
|
+
const allPaths = [...commit.added, ...commit.modified, ...commit.removed];
|
|
34
|
+
if (allPaths.some((p) => prefixes.some((prefix) => p.startsWith(prefix)))) {
|
|
35
|
+
return true;
|
|
36
|
+
}
|
|
37
|
+
}
|
|
38
|
+
return false;
|
|
39
|
+
}
|
|
40
|
+
// ---------------------------------------------------------------------------
|
|
41
|
+
// Factory: create a handler wired to a specific orchestrator instance
|
|
42
|
+
// ---------------------------------------------------------------------------
|
|
43
|
+
export function createWebhookHandler(orchestrator) {
|
|
44
|
+
return async function handleGithubWebhook(req, res) {
|
|
45
|
+
const cfg = getConfig();
|
|
46
|
+
// -- Signature verification ----------------------------------------
|
|
47
|
+
// The route MUST be configured with express.raw() so req.body is a
|
|
48
|
+
// Buffer. If it isn't, bail out — we cannot safely verify the HMAC.
|
|
49
|
+
const rawBody = Buffer.isBuffer(req.body) ? req.body : null;
|
|
50
|
+
if (!rawBody) {
|
|
51
|
+
console.error("[webhook] req.body is not a Buffer — ensure the route uses express.raw()");
|
|
52
|
+
res.status(500).json({ error: "Server misconfiguration: raw body not available" });
|
|
53
|
+
return;
|
|
54
|
+
}
|
|
55
|
+
if (!cfg.githubWebhookSecret?.trim()) {
|
|
56
|
+
console.log("[webhook] Rejecting request — webhook secret not configured");
|
|
57
|
+
res.status(403).json({ error: "Forbidden" });
|
|
58
|
+
return;
|
|
59
|
+
}
|
|
60
|
+
const signature = req.headers["x-hub-signature-256"];
|
|
61
|
+
if (!verifySignature(rawBody, signature, cfg.githubWebhookSecret)) {
|
|
62
|
+
res.status(401).json({ error: "Invalid or missing webhook signature" });
|
|
63
|
+
return;
|
|
64
|
+
}
|
|
65
|
+
// -- Event routing -------------------------------------------------
|
|
66
|
+
const event = req.headers["x-github-event"];
|
|
67
|
+
if (event !== "push") {
|
|
68
|
+
res.status(200).json({ ignored: true, reason: "not a push event" });
|
|
69
|
+
return;
|
|
70
|
+
}
|
|
71
|
+
// -- Parse payload -------------------------------------------------
|
|
72
|
+
let payload;
|
|
73
|
+
try {
|
|
74
|
+
payload = JSON.parse(rawBody.toString("utf-8"));
|
|
75
|
+
}
|
|
76
|
+
catch {
|
|
77
|
+
res.status(400).json({ error: "Malformed JSON payload" });
|
|
78
|
+
return;
|
|
79
|
+
}
|
|
80
|
+
if (!isDefaultBranchPush(payload)) {
|
|
81
|
+
res.status(200).json({ ignored: true, reason: "not the default branch" });
|
|
82
|
+
return;
|
|
83
|
+
}
|
|
84
|
+
const repoFullName = payload.repository.full_name;
|
|
85
|
+
const repoUrl = payload.repository.clone_url;
|
|
86
|
+
const sha = payload.after;
|
|
87
|
+
// -- Config-driven dispatch ----------------------------------------
|
|
88
|
+
const webhookCfg = getServerConfig().webhook;
|
|
89
|
+
const sourceNames = webhookCfg?.repo_sources?.[repoFullName] ?? [];
|
|
90
|
+
if (sourceNames.length === 0) {
|
|
91
|
+
console.log(`[webhook] Push to ${repoFullName} at ${sha.slice(0, 8)} — repo not in webhook config, ignoring`);
|
|
92
|
+
res.status(200).json({ ignored: true, reason: "repo not in webhook config" });
|
|
93
|
+
return;
|
|
94
|
+
}
|
|
95
|
+
// Check path triggers for each source. If any source's triggers match
|
|
96
|
+
// (or it has no triggers, meaning "match all"), queue a reindex.
|
|
97
|
+
let shouldReindex = false;
|
|
98
|
+
for (const sourceName of sourceNames) {
|
|
99
|
+
const triggers = webhookCfg?.path_triggers?.[sourceName] ?? [];
|
|
100
|
+
if (touchesPaths(payload, triggers)) {
|
|
101
|
+
shouldReindex = true;
|
|
102
|
+
break; // one reindex covers all sources from the same repo
|
|
103
|
+
}
|
|
104
|
+
}
|
|
105
|
+
if (!shouldReindex) {
|
|
106
|
+
console.log(`[webhook] Push to ${repoFullName} at ${sha.slice(0, 8)} — ` +
|
|
107
|
+
`no path triggers matched, ignoring`);
|
|
108
|
+
res.status(200).json({ ignored: true, reason: "no path triggers matched" });
|
|
109
|
+
return;
|
|
110
|
+
}
|
|
111
|
+
console.log(`[webhook] Push to ${repoFullName} ` +
|
|
112
|
+
`(${payload.repository.default_branch}) at ${sha.slice(0, 8)} — queuing reindex`);
|
|
113
|
+
orchestrator.queueIncrementalReindex(repoUrl);
|
|
114
|
+
res.status(200).json({ queued: true });
|
|
115
|
+
};
|
|
116
|
+
}
|
|
117
|
+
//# sourceMappingURL=github.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"github.js","sourceRoot":"","sources":["../../src/webhooks/github.ts"],"names":[],"mappings":"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"}
|
package/package.json
ADDED
|
@@ -0,0 +1,48 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "@copilotkit/pathfinder",
|
|
3
|
+
"version": "1.1.0",
|
|
4
|
+
"description": "Pathfinder — agentic docs retrieval for AI agents",
|
|
5
|
+
"type": "module",
|
|
6
|
+
"main": "dist/index.js",
|
|
7
|
+
"publishConfig": {
|
|
8
|
+
"access": "public"
|
|
9
|
+
},
|
|
10
|
+
"scripts": {
|
|
11
|
+
"build": "tsc",
|
|
12
|
+
"start": "node dist/index.js",
|
|
13
|
+
"dev": "tsx watch src/index.ts",
|
|
14
|
+
"seed-index": "tsx scripts/seed-index.ts",
|
|
15
|
+
"test-search": "tsx scripts/test-search.ts",
|
|
16
|
+
"integration-test": "tsx scripts/integration-test.ts",
|
|
17
|
+
"fixture:breeze-api": "node fixtures/breeze-api/server.js",
|
|
18
|
+
"fixture:breeze-docs": "DATABASE_URL=pglite:///tmp/breeze-docs PATHFINDER_CONFIG=fixtures/breeze-api/mcp-docs.yaml tsx src/index.ts",
|
|
19
|
+
"fixture:breeze-docs:bash": "DATABASE_URL=pglite:///tmp/breeze-docs-bash PATHFINDER_CONFIG=fixtures/breeze-api/mcp-docs-bash.yaml tsx src/index.ts",
|
|
20
|
+
"fixture:breeze-broken-docs": "DATABASE_URL=pglite:///tmp/breeze-broken-docs PATHFINDER_CONFIG=fixtures/breeze-api/mcp-docs-broken.yaml tsx src/index.ts",
|
|
21
|
+
"fixture:breeze-broken-docs:bash": "DATABASE_URL=pglite:///tmp/breeze-broken-docs-bash PATHFINDER_CONFIG=fixtures/breeze-api/mcp-docs-broken-bash.yaml tsx src/index.ts",
|
|
22
|
+
"claude": "_MCP_PORT=${PORT:-3001} && _MCP_TMPDIR=$(mktemp -d) && echo \"{\\\"mcpServers\\\":{\\\"mcp-docs\\\":{\\\"type\\\":\\\"http\\\",\\\"url\\\":\\\"http://localhost:${_MCP_PORT}/mcp\\\",\\\"headers\\\":{}}}}\" > \"$_MCP_TMPDIR/mcp.json\" && (cd \"$_MCP_TMPDIR\" && claude --strict-mcp-config --mcp-config \"$_MCP_TMPDIR/mcp.json\"); rm -rf \"$_MCP_TMPDIR\"",
|
|
23
|
+
"test": "vitest run"
|
|
24
|
+
},
|
|
25
|
+
"dependencies": {
|
|
26
|
+
"@modelcontextprotocol/sdk": "^1.25.2",
|
|
27
|
+
"cors": "^2.8.5",
|
|
28
|
+
"dotenv": "^17.3.1",
|
|
29
|
+
"express": "^5.2.1",
|
|
30
|
+
"just-bash": "^2.14.0",
|
|
31
|
+
"openai": "^4.80.0",
|
|
32
|
+
"pg": "^8.13.0",
|
|
33
|
+
"pgvector": "^0.2.0",
|
|
34
|
+
"simple-git": "^3.27.0",
|
|
35
|
+
"yaml": "^2.8.3",
|
|
36
|
+
"zod": "^3.23.8"
|
|
37
|
+
},
|
|
38
|
+
"devDependencies": {
|
|
39
|
+
"@electric-sql/pglite": "^0.4.2",
|
|
40
|
+
"@types/cors": "^2.8.19",
|
|
41
|
+
"@types/express": "^5.0.6",
|
|
42
|
+
"@types/node": "^25.0.6",
|
|
43
|
+
"@types/pg": "^8.11.10",
|
|
44
|
+
"tsx": "^4.21.0",
|
|
45
|
+
"typescript": "^5.9.3",
|
|
46
|
+
"vitest": "^4.1.2"
|
|
47
|
+
}
|
|
48
|
+
}
|