@copilotkit/pathfinder 1.4.0 → 1.6.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 (112) hide show
  1. package/CHANGELOG.md +35 -0
  2. package/LICENSE +106 -21
  3. package/README.md +14 -3
  4. package/dist/cli.js +11 -1
  5. package/dist/cli.js.map +1 -1
  6. package/dist/config.d.ts +9 -0
  7. package/dist/config.d.ts.map +1 -1
  8. package/dist/config.js +64 -5
  9. package/dist/config.js.map +1 -1
  10. package/dist/db/queries.d.ts +12 -1
  11. package/dist/db/queries.d.ts.map +1 -1
  12. package/dist/db/queries.js +64 -0
  13. package/dist/db/queries.js.map +1 -1
  14. package/dist/faq-txt.d.ts +12 -0
  15. package/dist/faq-txt.d.ts.map +1 -0
  16. package/dist/faq-txt.js +37 -0
  17. package/dist/faq-txt.js.map +1 -0
  18. package/dist/indexing/chunking/index.js +4 -0
  19. package/dist/indexing/chunking/index.js.map +1 -1
  20. package/dist/indexing/chunking/qa.d.ts +8 -0
  21. package/dist/indexing/chunking/qa.d.ts.map +1 -0
  22. package/dist/indexing/chunking/qa.js +22 -0
  23. package/dist/indexing/chunking/qa.js.map +1 -0
  24. package/dist/indexing/distiller.d.ts +29 -0
  25. package/dist/indexing/distiller.d.ts.map +1 -0
  26. package/dist/indexing/distiller.js +104 -0
  27. package/dist/indexing/distiller.js.map +1 -0
  28. package/dist/indexing/orchestrator.d.ts +8 -3
  29. package/dist/indexing/orchestrator.d.ts.map +1 -1
  30. package/dist/indexing/orchestrator.js +99 -93
  31. package/dist/indexing/orchestrator.js.map +1 -1
  32. package/dist/indexing/pipeline.d.ts +18 -0
  33. package/dist/indexing/pipeline.d.ts.map +1 -0
  34. package/dist/indexing/pipeline.js +68 -0
  35. package/dist/indexing/pipeline.js.map +1 -0
  36. package/dist/indexing/providers/discord-api.d.ts +79 -0
  37. package/dist/indexing/providers/discord-api.d.ts.map +1 -0
  38. package/dist/indexing/providers/discord-api.js +167 -0
  39. package/dist/indexing/providers/discord-api.js.map +1 -0
  40. package/dist/indexing/providers/discord.d.ts +25 -0
  41. package/dist/indexing/providers/discord.d.ts.map +1 -0
  42. package/dist/indexing/providers/discord.js +282 -0
  43. package/dist/indexing/providers/discord.js.map +1 -0
  44. package/dist/indexing/providers/file.d.ts +18 -0
  45. package/dist/indexing/providers/file.d.ts.map +1 -0
  46. package/dist/indexing/providers/file.js +262 -0
  47. package/dist/indexing/providers/file.js.map +1 -0
  48. package/dist/indexing/providers/index.d.ts +5 -0
  49. package/dist/indexing/providers/index.d.ts.map +1 -0
  50. package/dist/indexing/providers/index.js +24 -0
  51. package/dist/indexing/providers/index.js.map +1 -0
  52. package/dist/indexing/providers/notion-api.d.ts +101 -0
  53. package/dist/indexing/providers/notion-api.d.ts.map +1 -0
  54. package/dist/indexing/providers/notion-api.js +419 -0
  55. package/dist/indexing/providers/notion-api.js.map +1 -0
  56. package/dist/indexing/providers/notion.d.ts +29 -0
  57. package/dist/indexing/providers/notion.d.ts.map +1 -0
  58. package/dist/indexing/providers/notion.js +236 -0
  59. package/dist/indexing/providers/notion.js.map +1 -0
  60. package/dist/indexing/providers/slack-api.d.ts +62 -0
  61. package/dist/indexing/providers/slack-api.d.ts.map +1 -0
  62. package/dist/indexing/providers/slack-api.js +167 -0
  63. package/dist/indexing/providers/slack-api.js.map +1 -0
  64. package/dist/indexing/providers/slack.d.ts +21 -0
  65. package/dist/indexing/providers/slack.d.ts.map +1 -0
  66. package/dist/indexing/providers/slack.js +192 -0
  67. package/dist/indexing/providers/slack.js.map +1 -0
  68. package/dist/indexing/providers/types.d.ts +57 -0
  69. package/dist/indexing/providers/types.d.ts.map +1 -0
  70. package/dist/indexing/providers/types.js +3 -0
  71. package/dist/indexing/providers/types.js.map +1 -0
  72. package/dist/indexing/url-derivation.d.ts +2 -2
  73. package/dist/indexing/url-derivation.d.ts.map +1 -1
  74. package/dist/indexing/url-derivation.js.map +1 -1
  75. package/dist/indexing/utils.d.ts +19 -0
  76. package/dist/indexing/utils.d.ts.map +1 -0
  77. package/dist/indexing/utils.js +63 -0
  78. package/dist/indexing/utils.js.map +1 -0
  79. package/dist/mcp/server.d.ts.map +1 -1
  80. package/dist/mcp/server.js +4 -0
  81. package/dist/mcp/server.js.map +1 -1
  82. package/dist/mcp/tools/bash-fs.d.ts.map +1 -1
  83. package/dist/mcp/tools/bash-fs.js +4 -1
  84. package/dist/mcp/tools/bash-fs.js.map +1 -1
  85. package/dist/mcp/tools/knowledge.d.ts +13 -0
  86. package/dist/mcp/tools/knowledge.d.ts.map +1 -0
  87. package/dist/mcp/tools/knowledge.js +92 -0
  88. package/dist/mcp/tools/knowledge.js.map +1 -0
  89. package/dist/server.d.ts.map +1 -1
  90. package/dist/server.js +111 -8
  91. package/dist/server.js.map +1 -1
  92. package/dist/types.d.ts +1075 -79
  93. package/dist/types.d.ts.map +1 -1
  94. package/dist/types.js +94 -4
  95. package/dist/types.js.map +1 -1
  96. package/dist/validate.d.ts +29 -0
  97. package/dist/validate.d.ts.map +1 -0
  98. package/dist/validate.js +197 -0
  99. package/dist/validate.js.map +1 -0
  100. package/dist/webhooks/discord.d.ts +13 -0
  101. package/dist/webhooks/discord.d.ts.map +1 -0
  102. package/dist/webhooks/discord.js +57 -0
  103. package/dist/webhooks/discord.js.map +1 -0
  104. package/dist/webhooks/slack.d.ts +13 -0
  105. package/dist/webhooks/slack.d.ts.map +1 -0
  106. package/dist/webhooks/slack.js +106 -0
  107. package/dist/webhooks/slack.js.map +1 -0
  108. package/package.json +17 -3
  109. package/dist/indexing/source-indexer.d.ts +0 -68
  110. package/dist/indexing/source-indexer.d.ts.map +0 -1
  111. package/dist/indexing/source-indexer.js +0 -380
  112. package/dist/indexing/source-indexer.js.map +0 -1
@@ -0,0 +1,192 @@
1
+ // SlackDataProvider — Slack thread acquisition via Web API + LLM distillation.
2
+ // Implements DataProvider: fetches threads from configured channels, distills
3
+ // them into Q&A pairs, and returns ContentItems for the indexing pipeline.
4
+ import OpenAI from 'openai';
5
+ import { SlackApiClient } from './slack-api.js';
6
+ import { distillThread } from '../distiller.js';
7
+ import { getConfig } from '../../config.js';
8
+ export class SlackDataProvider {
9
+ config;
10
+ apiClient;
11
+ openaiClient;
12
+ logPrefix;
13
+ constructor(config, options) {
14
+ if (config.type !== 'slack') {
15
+ throw new Error('SlackDataProvider requires a slack source config');
16
+ }
17
+ this.config = config;
18
+ const token = options.slackBotToken;
19
+ if (!token) {
20
+ throw new Error('SlackDataProvider requires a slackBotToken in provider options');
21
+ }
22
+ this.apiClient = new SlackApiClient({ token });
23
+ this.openaiClient = new OpenAI({ apiKey: getConfig().openaiApiKey });
24
+ this.logPrefix = `[slack-provider:${config.name}]`;
25
+ }
26
+ async fullAcquire() {
27
+ console.log(`${this.logPrefix} Starting full acquire for ${this.config.channels.length} channel(s)`);
28
+ const allItems = [];
29
+ let maxTimestamp = '0';
30
+ let failedChannels = 0;
31
+ for (const channelId of this.config.channels) {
32
+ try {
33
+ const { items, latestTs } = await this.processChannel(channelId);
34
+ allItems.push(...items);
35
+ if (latestTs > maxTimestamp)
36
+ maxTimestamp = latestTs;
37
+ }
38
+ catch (err) {
39
+ failedChannels++;
40
+ const msg = err instanceof Error ? err.message : String(err);
41
+ console.error(`${this.logPrefix} Failed to process channel ${channelId}: ${msg}`);
42
+ }
43
+ }
44
+ if (failedChannels === this.config.channels.length) {
45
+ throw new Error(`All ${failedChannels} channel(s) failed during acquire`);
46
+ }
47
+ console.log(`${this.logPrefix} Full acquire complete: ${allItems.length} Q&A pairs from ${this.config.channels.length} channel(s)`);
48
+ return {
49
+ items: allItems,
50
+ removedIds: [],
51
+ stateToken: maxTimestamp,
52
+ };
53
+ }
54
+ async incrementalAcquire(lastStateToken) {
55
+ console.log(`${this.logPrefix} Starting incremental acquire since ${lastStateToken}`);
56
+ const allItems = [];
57
+ let maxTimestamp = lastStateToken;
58
+ let failedChannels = 0;
59
+ for (const channelId of this.config.channels) {
60
+ try {
61
+ const { items, latestTs } = await this.processChannel(channelId, lastStateToken);
62
+ allItems.push(...items);
63
+ if (latestTs > maxTimestamp)
64
+ maxTimestamp = latestTs;
65
+ }
66
+ catch (err) {
67
+ failedChannels++;
68
+ const msg = err instanceof Error ? err.message : String(err);
69
+ console.error(`${this.logPrefix} Failed to process channel ${channelId}: ${msg}`);
70
+ }
71
+ }
72
+ if (failedChannels === this.config.channels.length) {
73
+ throw new Error(`All ${failedChannels} channel(s) failed during acquire`);
74
+ }
75
+ console.log(`${this.logPrefix} Incremental acquire complete: ${allItems.length} Q&A pairs`);
76
+ return {
77
+ items: allItems,
78
+ removedIds: [], // Slack API doesn't surface deletions; caught on next full acquire
79
+ stateToken: maxTimestamp,
80
+ };
81
+ }
82
+ async getCurrentStateToken() {
83
+ let maxTimestamp = '0';
84
+ for (const channelId of this.config.channels) {
85
+ try {
86
+ const messages = await this.apiClient.fetchChannelHistory(channelId, undefined, 1);
87
+ if (messages.length > 0) {
88
+ // Messages are returned newest-first by Slack
89
+ const latest = messages[0].ts;
90
+ if (latest > maxTimestamp)
91
+ maxTimestamp = latest;
92
+ }
93
+ }
94
+ catch (err) {
95
+ const msg = err instanceof Error ? err.message : String(err);
96
+ console.warn(`${this.logPrefix} Failed to check channel ${channelId}: ${msg}`);
97
+ }
98
+ }
99
+ return maxTimestamp === '0' ? null : maxTimestamp;
100
+ }
101
+ // -----------------------------------------------------------------------
102
+ // Private helpers
103
+ // -----------------------------------------------------------------------
104
+ /**
105
+ * Process a single channel: fetch threads, distill, return items.
106
+ */
107
+ async processChannel(channelId, oldest) {
108
+ const messages = await this.apiClient.fetchChannelHistory(channelId, oldest);
109
+ const items = [];
110
+ let latestTs = oldest ?? '0';
111
+ // Filter to threaded messages with sufficient replies
112
+ const threads = messages.filter(m => m.thread_ts === m.ts && (m.reply_count ?? 0) >= this.config.min_thread_replies);
113
+ console.log(`${this.logPrefix} Channel ${channelId}: ${messages.length} messages, ${threads.length} qualifying threads`);
114
+ // Process threads sequentially to avoid OpenAI rate limits
115
+ for (const thread of threads) {
116
+ try {
117
+ const threadItems = await this.processThread(channelId, thread);
118
+ items.push(...threadItems);
119
+ if (thread.ts > latestTs)
120
+ latestTs = thread.ts;
121
+ }
122
+ catch (err) {
123
+ const msg = err instanceof Error ? err.message : String(err);
124
+ console.error(`${this.logPrefix} Failed to distill thread ${thread.ts}: ${msg}`);
125
+ }
126
+ }
127
+ return { items, latestTs };
128
+ }
129
+ /**
130
+ * Process a single thread: fetch replies, resolve users, distill, create items.
131
+ */
132
+ async processThread(channelId, parentMessage) {
133
+ const replies = await this.apiClient.fetchThreadReplies(channelId, parentMessage.ts);
134
+ // Resolve user display names
135
+ const threadMessages = [];
136
+ for (const reply of replies) {
137
+ let author = reply.user ?? 'unknown';
138
+ try {
139
+ if (reply.user) {
140
+ const user = await this.apiClient.fetchUserInfo(reply.user);
141
+ author = user.displayName;
142
+ }
143
+ }
144
+ catch (err) {
145
+ const msg = err instanceof Error ? err.message : String(err);
146
+ console.warn(`${this.logPrefix} Failed to resolve user ${reply.user}: ${msg}`);
147
+ }
148
+ threadMessages.push({
149
+ author,
150
+ content: reply.text ?? '',
151
+ timestamp: reply.ts,
152
+ reactions: reply.reactions,
153
+ });
154
+ }
155
+ // Distill the thread
156
+ const distillerResult = await distillThread(threadMessages, {
157
+ model: this.config.distiller_model,
158
+ client: this.openaiClient,
159
+ });
160
+ // Create ContentItems for ALL pairs — confidence filtering happens at query time
161
+ const items = [];
162
+ let permalink;
163
+ if (distillerResult.pairs.length > 0) {
164
+ try {
165
+ permalink = await this.apiClient.getChannelPermalink(channelId, parentMessage.ts);
166
+ }
167
+ catch (err) {
168
+ const msg = err instanceof Error ? err.message : String(err);
169
+ console.warn(`${this.logPrefix} Failed to get permalink for ${channelId}/${parentMessage.ts}: ${msg}`);
170
+ permalink = undefined;
171
+ }
172
+ }
173
+ const participants = [...new Set(threadMessages.map(m => m.author))];
174
+ for (let i = 0; i < distillerResult.pairs.length; i++) {
175
+ const pair = distillerResult.pairs[i];
176
+ items.push({
177
+ id: `${channelId}:${parentMessage.ts}:${i}`,
178
+ content: `Q: ${pair.question}\n\nA: ${pair.answer}`,
179
+ title: pair.question,
180
+ sourceUrl: permalink,
181
+ metadata: {
182
+ channel: channelId,
183
+ participants,
184
+ confidence: pair.confidence,
185
+ emojiTriggered: false,
186
+ },
187
+ });
188
+ }
189
+ return items;
190
+ }
191
+ }
192
+ //# sourceMappingURL=slack.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"slack.js","sourceRoot":"","sources":["../../../src/indexing/providers/slack.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,57 @@
1
+ import type { SourceConfig } from '../../types.js';
2
+ /** A single content item to be indexed. */
3
+ export interface ContentItem {
4
+ /** Unique identifier within the source (file path, thread ID, page ID, etc.) */
5
+ id: string;
6
+ /** Raw content to be chunked */
7
+ content: string;
8
+ /** Human-readable title (optional — chunker may derive one) */
9
+ title?: string;
10
+ /** URL to the original content (optional) */
11
+ sourceUrl?: string;
12
+ /** Additional metadata passed through to chunk records */
13
+ metadata?: Record<string, unknown>;
14
+ }
15
+ /** Result of a data acquisition run. */
16
+ export interface AcquisitionResult {
17
+ /** Items to index (full list for full acquire, changed items for incremental) */
18
+ items: ContentItem[];
19
+ /**
20
+ * Item IDs to remove from the index.
21
+ * Full acquire: always empty — deleted-file detection is not performed during
22
+ * full acquire, so chunks from files no longer in the source persist until the
23
+ * next incremental acquire or manual cleanup.
24
+ * Incremental acquire: IDs of items deleted since lastStateToken.
25
+ */
26
+ removedIds: string[];
27
+ /** Opaque state token to persist (commit SHA, API cursor, timestamp) */
28
+ stateToken: string;
29
+ }
30
+ /** Interface that all data providers implement. */
31
+ export interface DataProvider {
32
+ /**
33
+ * Full acquisition — return all indexable items.
34
+ * Providers must apply their own content filtering before returning items.
35
+ */
36
+ fullAcquire(): Promise<AcquisitionResult>;
37
+ /**
38
+ * Incremental acquisition — only items changed since lastStateToken.
39
+ */
40
+ incrementalAcquire(lastStateToken: string): Promise<AcquisitionResult>;
41
+ /**
42
+ * Get the current state token without acquiring items (for staleness checks).
43
+ * Returns null if the source is unavailable (e.g., clone dir missing).
44
+ */
45
+ getCurrentStateToken(): Promise<string | null>;
46
+ }
47
+ /** Options passed to provider factories. */
48
+ export interface ProviderOptions {
49
+ cloneDir: string;
50
+ githubToken?: string;
51
+ slackBotToken?: string;
52
+ discordBotToken?: string;
53
+ notionToken?: string;
54
+ }
55
+ /** Factory function that creates a DataProvider for a given source config. */
56
+ export type DataProviderFactory = (config: SourceConfig, options: ProviderOptions) => DataProvider;
57
+ //# sourceMappingURL=types.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../src/indexing/providers/types.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,gBAAgB,CAAC;AAEnD,2CAA2C;AAC3C,MAAM,WAAW,WAAW;IACxB,gFAAgF;IAChF,EAAE,EAAE,MAAM,CAAC;IACX,gCAAgC;IAChC,OAAO,EAAE,MAAM,CAAC;IAChB,+DAA+D;IAC/D,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,6CAA6C;IAC7C,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,0DAA0D;IAC1D,QAAQ,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;CACtC;AAED,wCAAwC;AACxC,MAAM,WAAW,iBAAiB;IAC9B,iFAAiF;IACjF,KAAK,EAAE,WAAW,EAAE,CAAC;IACrB;;;;;;OAMG;IACH,UAAU,EAAE,MAAM,EAAE,CAAC;IACrB,wEAAwE;IACxE,UAAU,EAAE,MAAM,CAAC;CACtB;AAED,mDAAmD;AACnD,MAAM,WAAW,YAAY;IACzB;;;OAGG;IACH,WAAW,IAAI,OAAO,CAAC,iBAAiB,CAAC,CAAC;IAE1C;;OAEG;IACH,kBAAkB,CAAC,cAAc,EAAE,MAAM,GAAG,OAAO,CAAC,iBAAiB,CAAC,CAAC;IAEvE;;;OAGG;IACH,oBAAoB,IAAI,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC,CAAC;CAClD;AAED,4CAA4C;AAC5C,MAAM,WAAW,eAAe;IAC5B,QAAQ,EAAE,MAAM,CAAC;IACjB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB,WAAW,CAAC,EAAE,MAAM,CAAC;CACxB;AAED,8EAA8E;AAC9E,MAAM,MAAM,mBAAmB,GAAG,CAAC,MAAM,EAAE,YAAY,EAAE,OAAO,EAAE,eAAe,KAAK,YAAY,CAAC"}
@@ -0,0 +1,3 @@
1
+ // Data provider interfaces — the contract between data acquisition and indexing.
2
+ export {};
3
+ //# sourceMappingURL=types.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.js","sourceRoot":"","sources":["../../../src/indexing/providers/types.ts"],"names":[],"mappings":"AAAA,iFAAiF"}
@@ -1,7 +1,7 @@
1
- import type { SourceConfig } from '../types.js';
1
+ import type { FileSourceConfig } from '../types.js';
2
2
  /**
3
3
  * Derive a public URL from a relative file path using the source's URL derivation rules.
4
4
  * Returns null if the source has no base_url or url_derivation configured.
5
5
  */
6
- export declare function deriveUrl(filePath: string, sourceConfig: SourceConfig): string | null;
6
+ export declare function deriveUrl(filePath: string, sourceConfig: FileSourceConfig): string | null;
7
7
  //# sourceMappingURL=url-derivation.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"url-derivation.d.ts","sourceRoot":"","sources":["../../src/indexing/url-derivation.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AAEhD;;;GAGG;AACH,wBAAgB,SAAS,CAAC,QAAQ,EAAE,MAAM,EAAE,YAAY,EAAE,YAAY,GAAG,MAAM,GAAG,IAAI,CAsBrF"}
1
+ {"version":3,"file":"url-derivation.d.ts","sourceRoot":"","sources":["../../src/indexing/url-derivation.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,aAAa,CAAC;AAEpD;;;GAGG;AACH,wBAAgB,SAAS,CAAC,QAAQ,EAAE,MAAM,EAAE,YAAY,EAAE,gBAAgB,GAAG,MAAM,GAAG,IAAI,CAsBzF"}
@@ -1 +1 @@
1
- {"version":3,"file":"url-derivation.js","sourceRoot":"","sources":["../../src/indexing/url-derivation.ts"],"names":[],"mappings":"AAAA,sEAAsE;AAItE;;;GAGG;AACH,MAAM,UAAU,SAAS,CAAC,QAAgB,EAAE,YAA0B;IAClE,IAAI,CAAC,YAAY,CAAC,QAAQ,IAAI,CAAC,YAAY,CAAC,cAAc;QAAE,OAAO,IAAI,CAAC;IAExE,MAAM,CAAC,GAAG,YAAY,CAAC,cAAc,CAAC;IACtC,IAAI,IAAI,GAAG,QAAQ,CAAC;IAEpB,IAAI,CAAC,CAAC,YAAY,IAAI,IAAI,CAAC,UAAU,CAAC,CAAC,CAAC,YAAY,CAAC,EAAE,CAAC;QACpD,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,YAAY,CAAC,MAAM,CAAC,CAAC;IAC7C,CAAC;IACD,IAAI,CAAC,CAAC,YAAY,EAAE,CAAC;QACjB,MAAM,EAAE,GAAG,IAAI,MAAM,CAAC,WAAW,CAAC,CAAC,CAAC,YAAY,CAAC,GAAG,GAAG,CAAC,CAAC;QACzD,IAAI,GAAG,IAAI,CAAC,OAAO,CAAC,EAAE,EAAE,EAAE,CAAC,CAAC;IAChC,CAAC;IACD,IAAI,CAAC,CAAC,kBAAkB,EAAE,CAAC;QACvB,IAAI,GAAG,IAAI,CAAC,OAAO,CAAC,cAAc,EAAE,EAAE,CAAC,CAAC;IAC5C,CAAC;IACD,IAAI,CAAC,CAAC,WAAW,EAAE,CAAC;QAChB,IAAI,GAAG,IAAI,CAAC,OAAO,CAAC,UAAU,EAAE,EAAE,CAAC,CAAC;QACpC,IAAI,IAAI,KAAK,OAAO;YAAE,IAAI,GAAG,EAAE,CAAC;IACpC,CAAC;IAED,OAAO,YAAY,CAAC,QAAQ,GAAG,IAAI,CAAC;AACxC,CAAC;AAED,SAAS,WAAW,CAAC,CAAS;IAC1B,OAAO,CAAC,CAAC,OAAO,CAAC,qBAAqB,EAAE,MAAM,CAAC,CAAC;AACpD,CAAC"}
1
+ {"version":3,"file":"url-derivation.js","sourceRoot":"","sources":["../../src/indexing/url-derivation.ts"],"names":[],"mappings":"AAAA,sEAAsE;AAItE;;;GAGG;AACH,MAAM,UAAU,SAAS,CAAC,QAAgB,EAAE,YAA8B;IACtE,IAAI,CAAC,YAAY,CAAC,QAAQ,IAAI,CAAC,YAAY,CAAC,cAAc;QAAE,OAAO,IAAI,CAAC;IAExE,MAAM,CAAC,GAAG,YAAY,CAAC,cAAc,CAAC;IACtC,IAAI,IAAI,GAAG,QAAQ,CAAC;IAEpB,IAAI,CAAC,CAAC,YAAY,IAAI,IAAI,CAAC,UAAU,CAAC,CAAC,CAAC,YAAY,CAAC,EAAE,CAAC;QACpD,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,YAAY,CAAC,MAAM,CAAC,CAAC;IAC7C,CAAC;IACD,IAAI,CAAC,CAAC,YAAY,EAAE,CAAC;QACjB,MAAM,EAAE,GAAG,IAAI,MAAM,CAAC,WAAW,CAAC,CAAC,CAAC,YAAY,CAAC,GAAG,GAAG,CAAC,CAAC;QACzD,IAAI,GAAG,IAAI,CAAC,OAAO,CAAC,EAAE,EAAE,EAAE,CAAC,CAAC;IAChC,CAAC;IACD,IAAI,CAAC,CAAC,kBAAkB,EAAE,CAAC;QACvB,IAAI,GAAG,IAAI,CAAC,OAAO,CAAC,cAAc,EAAE,EAAE,CAAC,CAAC;IAC5C,CAAC;IACD,IAAI,CAAC,CAAC,WAAW,EAAE,CAAC;QAChB,IAAI,GAAG,IAAI,CAAC,OAAO,CAAC,UAAU,EAAE,EAAE,CAAC,CAAC;QACpC,IAAI,IAAI,KAAK,OAAO;YAAE,IAAI,GAAG,EAAE,CAAC;IACpC,CAAC;IAED,OAAO,YAAY,CAAC,QAAQ,GAAG,IAAI,CAAC;AACxC,CAAC;AAED,SAAS,WAAW,CAAC,CAAS;IAC1B,OAAO,CAAC,CAAC,OAAO,CAAC,qBAAqB,EAAE,MAAM,CAAC,CAAC;AACpD,CAAC"}
@@ -0,0 +1,19 @@
1
+ import type { FileSourceConfig } from '../types.js';
2
+ /**
3
+ * Check if file content has low semantic value (SVG paths, base64, minified code).
4
+ * Samples the first 8KB and checks the ratio of digits, dots, commas, semicolons,
5
+ * and equals signs. If >30% of characters are these low-value tokens, the file
6
+ * is likely SVG path data, base64, or minified code with no search value.
7
+ */
8
+ export declare function hasLowSemanticValue(content: string): boolean;
9
+ /**
10
+ * Convert a glob pattern to a RegExp.
11
+ * Supports: ** (any path), * (any segment), ? (any char)
12
+ */
13
+ export declare function globToRegex(pattern: string): RegExp;
14
+ /**
15
+ * Check if a relative file path matches the source's file_patterns (include)
16
+ * and does not match exclude_patterns.
17
+ */
18
+ export declare function matchesPatterns(relPath: string, sourceConfig: FileSourceConfig): boolean;
19
+ //# sourceMappingURL=utils.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"utils.d.ts","sourceRoot":"","sources":["../../src/indexing/utils.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,aAAa,CAAC;AAEpD;;;;;GAKG;AACH,wBAAgB,mBAAmB,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAqB5D;AAED;;;GAGG;AACH,wBAAgB,WAAW,CAAC,OAAO,EAAE,MAAM,GAAG,MAAM,CAWnD;AAED;;;GAGG;AACH,wBAAgB,eAAe,CAAC,OAAO,EAAE,MAAM,EAAE,YAAY,EAAE,gBAAgB,GAAG,OAAO,CAmBxF"}
@@ -0,0 +1,63 @@
1
+ // Shared indexing utilities — used by providers, bash-fs, and test scripts.
2
+ /**
3
+ * Check if file content has low semantic value (SVG paths, base64, minified code).
4
+ * Samples the first 8KB and checks the ratio of digits, dots, commas, semicolons,
5
+ * and equals signs. If >30% of characters are these low-value tokens, the file
6
+ * is likely SVG path data, base64, or minified code with no search value.
7
+ */
8
+ export function hasLowSemanticValue(content) {
9
+ if (content.length < 500)
10
+ return false;
11
+ const sample = content.slice(0, 8192);
12
+ let lowValueChars = 0;
13
+ for (let i = 0; i < sample.length; i++) {
14
+ const c = sample.charCodeAt(i);
15
+ if ((c >= 48 && c <= 57) || // 0-9
16
+ c === 46 || // .
17
+ c === 44 || // ,
18
+ c === 59 || // ;
19
+ c === 61 // =
20
+ ) {
21
+ lowValueChars++;
22
+ }
23
+ }
24
+ const ratio = lowValueChars / sample.length;
25
+ return ratio > 0.3;
26
+ }
27
+ /**
28
+ * Convert a glob pattern to a RegExp.
29
+ * Supports: ** (any path), * (any segment), ? (any char)
30
+ */
31
+ export function globToRegex(pattern) {
32
+ let re = pattern
33
+ .replace(/[.+^${}()|[\]\\]/g, '\\$&') // escape regex chars (except * and ?)
34
+ .replace(/\*\*\//g, '{{GLOBSTAR_SLASH}}') // **/ = any path prefix (including empty)
35
+ .replace(/\*\*/g, '{{GLOBSTAR}}') // ** alone = anything
36
+ .replace(/\*/g, '[^/]*') // * = anything except /
37
+ .replace(/\?/g, '[^/]') // ? = single char except /
38
+ .replace(/\{\{GLOBSTAR_SLASH\}\}/g, '(?:.*/)?') // **/ = optional path prefix
39
+ .replace(/\{\{GLOBSTAR\}\}/g, '.*'); // ** = anything including /
40
+ return new RegExp(`^${re}$`);
41
+ }
42
+ /**
43
+ * Check if a relative file path matches the source's file_patterns (include)
44
+ * and does not match exclude_patterns.
45
+ */
46
+ export function matchesPatterns(relPath, sourceConfig) {
47
+ const normalized = relPath.replace(/\\/g, '/');
48
+ // Check excludes first (takes precedence)
49
+ const excludes = sourceConfig.exclude_patterns ?? [];
50
+ for (const pattern of excludes) {
51
+ if (globToRegex(pattern).test(normalized)) {
52
+ return false;
53
+ }
54
+ }
55
+ // Must match at least one include pattern
56
+ for (const pattern of sourceConfig.file_patterns) {
57
+ if (globToRegex(pattern).test(normalized)) {
58
+ return true;
59
+ }
60
+ }
61
+ return false;
62
+ }
63
+ //# sourceMappingURL=utils.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"utils.js","sourceRoot":"","sources":["../../src/indexing/utils.ts"],"names":[],"mappings":"AAAA,4EAA4E;AAI5E;;;;;GAKG;AACH,MAAM,UAAU,mBAAmB,CAAC,OAAe;IAC/C,IAAI,OAAO,CAAC,MAAM,GAAG,GAAG;QAAE,OAAO,KAAK,CAAC;IAEvC,MAAM,MAAM,GAAG,OAAO,CAAC,KAAK,CAAC,CAAC,EAAE,IAAI,CAAC,CAAC;IACtC,IAAI,aAAa,GAAG,CAAC,CAAC;IAEtB,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,MAAM,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;QACrC,MAAM,CAAC,GAAG,MAAM,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC;QAC/B,IACI,CAAC,CAAC,IAAI,EAAE,IAAI,CAAC,IAAI,EAAE,CAAC,IAAK,MAAM;YAC/B,CAAC,KAAK,EAAE,IAAkB,IAAI;YAC9B,CAAC,KAAK,EAAE,IAAkB,IAAI;YAC9B,CAAC,KAAK,EAAE,IAAkB,IAAI;YAC9B,CAAC,KAAK,EAAE,CAAkB,IAAI;UAChC,CAAC;YACC,aAAa,EAAE,CAAC;QACpB,CAAC;IACL,CAAC;IAED,MAAM,KAAK,GAAG,aAAa,GAAG,MAAM,CAAC,MAAM,CAAC;IAC5C,OAAO,KAAK,GAAG,GAAG,CAAC;AACvB,CAAC;AAED;;;GAGG;AACH,MAAM,UAAU,WAAW,CAAC,OAAe;IACvC,IAAI,EAAE,GAAG,OAAO;SACX,OAAO,CAAC,mBAAmB,EAAE,MAAM,CAAC,CAAC,sCAAsC;SAC3E,OAAO,CAAC,SAAS,EAAE,oBAAoB,CAAC,CAAC,0CAA0C;SACnF,OAAO,CAAC,OAAO,EAAE,cAAc,CAAC,CAAU,sBAAsB;SAChE,OAAO,CAAC,KAAK,EAAE,OAAO,CAAC,CAAoB,wBAAwB;SACnE,OAAO,CAAC,KAAK,EAAE,MAAM,CAAC,CAAqB,2BAA2B;SACtE,OAAO,CAAC,yBAAyB,EAAE,UAAU,CAAC,CAAC,6BAA6B;SAC5E,OAAO,CAAC,mBAAmB,EAAE,IAAI,CAAC,CAAC,CAAa,4BAA4B;IAEjF,OAAO,IAAI,MAAM,CAAC,IAAI,EAAE,GAAG,CAAC,CAAC;AACjC,CAAC;AAED;;;GAGG;AACH,MAAM,UAAU,eAAe,CAAC,OAAe,EAAE,YAA8B;IAC3E,MAAM,UAAU,GAAG,OAAO,CAAC,OAAO,CAAC,KAAK,EAAE,GAAG,CAAC,CAAC;IAE/C,0CAA0C;IAC1C,MAAM,QAAQ,GAAG,YAAY,CAAC,gBAAgB,IAAI,EAAE,CAAC;IACrD,KAAK,MAAM,OAAO,IAAI,QAAQ,EAAE,CAAC;QAC7B,IAAI,WAAW,CAAC,OAAO,CAAC,CAAC,IAAI,CAAC,UAAU,CAAC,EAAE,CAAC;YACxC,OAAO,KAAK,CAAC;QACjB,CAAC;IACL,CAAC;IAED,0CAA0C;IAC1C,KAAK,MAAM,OAAO,IAAI,YAAY,CAAC,aAAa,EAAE,CAAC;QAC/C,IAAI,WAAW,CAAC,OAAO,CAAC,CAAC,IAAI,CAAC,UAAU,CAAC,EAAE,CAAC;YACxC,OAAO,IAAI,CAAC;QAChB,CAAC;IACL,CAAC;IAED,OAAO,KAAK,CAAC;AACjB,CAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"server.d.ts","sourceRoot":"","sources":["../../src/mcp/server.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AACtC,OAAO,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AAMpE,OAAO,EAAE,mBAAmB,EAAE,MAAM,yBAAyB,CAAC;AAC9D,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,2BAA2B,CAAC;AAC/D,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,iBAAiB,CAAC;AAExD;;;;GAIG;AACH,wBAAgB,eAAe,CAC3B,aAAa,CAAC,EAAE,GAAG,CAAC,MAAM,EAAE,IAAI,CAAC,EACjC,mBAAmB,CAAC,EAAE,mBAAmB,EACzC,YAAY,CAAC,EAAE,MAAM,MAAM,GAAG,SAAS,EACvC,SAAS,CAAC,EAAE,aAAa,EACzB,SAAS,CAAC,EAAE,gBAAgB,GAC7B,SAAS,CAkEX"}
1
+ {"version":3,"file":"server.d.ts","sourceRoot":"","sources":["../../src/mcp/server.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AACtC,OAAO,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AAOpE,OAAO,EAAE,mBAAmB,EAAE,MAAM,yBAAyB,CAAC;AAC9D,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,2BAA2B,CAAC;AAC/D,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,iBAAiB,CAAC;AAExD;;;;GAIG;AACH,wBAAgB,eAAe,CAC3B,aAAa,CAAC,EAAE,GAAG,CAAC,MAAM,EAAE,IAAI,CAAC,EACjC,mBAAmB,CAAC,EAAE,mBAAmB,EACzC,YAAY,CAAC,EAAE,MAAM,MAAM,GAAG,SAAS,EACvC,SAAS,CAAC,EAAE,aAAa,EACzB,SAAS,CAAC,EAAE,gBAAgB,GAC7B,SAAS,CAqEX"}
@@ -3,6 +3,7 @@ import { EmbeddingClient } from '../indexing/embeddings.js';
3
3
  import { getConfig, getServerConfig } from '../config.js';
4
4
  import { registerSearchTool } from './tools/search.js';
5
5
  import { registerCollectTool } from './tools/collect.js';
6
+ import { registerKnowledgeTool } from './tools/knowledge.js';
6
7
  import { registerBashTool } from './tools/bash.js';
7
8
  /**
8
9
  * Creates a new McpServer instance with all tools registered.
@@ -60,6 +61,9 @@ export function createMcpServer(bashInstances, sessionStateManager, getSessionId
60
61
  });
61
62
  break;
62
63
  }
64
+ case 'knowledge':
65
+ registerKnowledgeTool(server, getEmbeddingClient(), tool);
66
+ break;
63
67
  default: {
64
68
  const _exhaustive = tool;
65
69
  throw new Error(`Unknown tool type: ${_exhaustive.type}`);
@@ -1 +1 @@
1
- {"version":3,"file":"server.js","sourceRoot":"","sources":["../../src/mcp/server.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"server.js","sourceRoot":"","sources":["../../src/mcp/server.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"bash-fs.d.ts","sourceRoot":"","sources":["../../../src/mcp/tools/bash-fs.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AAEjC,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,gBAAgB,CAAC;AAqCnD,MAAM,WAAW,mBAAmB;IAChC,YAAY,CAAC,EAAE,OAAO,CAAC;IACvB,eAAe,CAAC,EAAE,MAAM,EAAE,CAAC;IAC3B,QAAQ,CAAC,EAAE,MAAM,CAAC;CACrB;AAED,wBAAsB,iBAAiB,CACnC,OAAO,EAAE,YAAY,EAAE,EACvB,OAAO,CAAC,EAAE,mBAAmB,GAC9B,OAAO,CAAC,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC,CA8CjC;AAED,MAAM,WAAW,YAAY;IACzB,IAAI,EAAE,MAAM,CAAC;IACb,KAAK,EAAE,MAAM,CAAC;CACjB;AAED,wBAAgB,iBAAiB,CAAC,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,GAAG,MAAM,CAAC,MAAM,EAAE,YAAY,CAAC,CAU7F;AAED,wBAAgB,YAAY,CACxB,GAAG,EAAE,MAAM,EACX,QAAQ,EAAE,MAAM,EAAE,EAClB,QAAQ,EAAE,MAAM,CAAC,MAAM,EAAE,YAAY,CAAC,GACvC,MAAM,CA+BR;AAED,wBAAsB,mBAAmB,CACrC,OAAO,EAAE,YAAY,EAAE,EACvB,OAAO,CAAC,EAAE,mBAAmB,GAC9B,OAAO,CAAC;IAAE,IAAI,EAAE,IAAI,CAAC;IAAC,SAAS,EAAE,MAAM,CAAA;CAAE,CAAC,CAM5C"}
1
+ {"version":3,"file":"bash-fs.d.ts","sourceRoot":"","sources":["../../../src/mcp/tools/bash-fs.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AAGjC,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,gBAAgB,CAAC;AAqCnD,MAAM,WAAW,mBAAmB;IAChC,YAAY,CAAC,EAAE,OAAO,CAAC;IACvB,eAAe,CAAC,EAAE,MAAM,EAAE,CAAC;IAC3B,QAAQ,CAAC,EAAE,MAAM,CAAC;CACrB;AAED,wBAAsB,iBAAiB,CACnC,OAAO,EAAE,YAAY,EAAE,EACvB,OAAO,CAAC,EAAE,mBAAmB,GAC9B,OAAO,CAAC,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC,CA+CjC;AAED,MAAM,WAAW,YAAY;IACzB,IAAI,EAAE,MAAM,CAAC;IACb,KAAK,EAAE,MAAM,CAAC;CACjB;AAED,wBAAgB,iBAAiB,CAAC,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,GAAG,MAAM,CAAC,MAAM,EAAE,YAAY,CAAC,CAU7F;AAED,wBAAgB,YAAY,CACxB,GAAG,EAAE,MAAM,EACX,QAAQ,EAAE,MAAM,EAAE,EAClB,QAAQ,EAAE,MAAM,CAAC,MAAM,EAAE,YAAY,CAAC,GACvC,MAAM,CA+BR;AAED,wBAAsB,mBAAmB,CACrC,OAAO,EAAE,YAAY,EAAE,EACvB,OAAO,CAAC,EAAE,mBAAmB,GAC9B,OAAO,CAAC;IAAE,IAAI,EAAE,IAAI,CAAC;IAAC,SAAS,EAAE,MAAM,CAAA;CAAE,CAAC,CAM5C"}
@@ -1,7 +1,8 @@
1
1
  import fs from 'node:fs';
2
2
  import path from 'node:path';
3
3
  import { Bash } from 'just-bash';
4
- import { matchesPatterns } from '../../indexing/source-indexer.js';
4
+ import { matchesPatterns } from '../../indexing/utils.js';
5
+ import { isFileSourceConfig } from '../../types.js';
5
6
  import { generateIndexMd, generateSearchTipsMd } from './bash-virtual-files.js';
6
7
  const DEFAULT_SKIP_DIRS = new Set(['node_modules', 'dist', 'build', '.git']);
7
8
  const DEFAULT_MAX_FILE_SIZE = 102400; // 100KB
@@ -40,6 +41,8 @@ export async function buildBashFilesMap(sources, options) {
40
41
  const files = {};
41
42
  const multiSource = sources.length > 1;
42
43
  for (const source of sources) {
44
+ if (!isFileSourceConfig(source))
45
+ continue; // Slack sources don't have filesystem paths
43
46
  let rootDir;
44
47
  if (source.repo && options?.cloneDir) {
45
48
  // Git-based source: the orchestrator clones into cloneDir/<repoName>/
@@ -1 +1 @@
1
- {"version":3,"file":"bash-fs.js","sourceRoot":"","sources":["../../../src/mcp/tools/bash-fs.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"bash-fs.js","sourceRoot":"","sources":["../../../src/mcp/tools/bash-fs.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,13 @@
1
+ import type { McpServer } from '@modelcontextprotocol/sdk/server/mcp.js';
2
+ import type { EmbeddingClient } from '../../indexing/embeddings.js';
3
+ import type { KnowledgeToolConfig, FaqChunkResult } from '../../types.js';
4
+ /**
5
+ * Format FAQ results in the standard QUESTION/ANSWER/SOURCE/CONFIDENCE format.
6
+ */
7
+ export declare function formatFaqResults(results: FaqChunkResult[]): string;
8
+ /**
9
+ * Register a knowledge tool on the MCP server.
10
+ * Supports two modes: browse (no query) and search (with query).
11
+ */
12
+ export declare function registerKnowledgeTool(server: McpServer, embeddingClient: EmbeddingClient, toolConfig: KnowledgeToolConfig): void;
13
+ //# sourceMappingURL=knowledge.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"knowledge.d.ts","sourceRoot":"","sources":["../../../src/mcp/tools/knowledge.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AACzE,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,8BAA8B,CAAC;AACpE,OAAO,KAAK,EAAE,mBAAmB,EAAE,cAAc,EAAe,MAAM,gBAAgB,CAAC;AAGvF;;GAEG;AACH,wBAAgB,gBAAgB,CAAC,OAAO,EAAE,cAAc,EAAE,GAAG,MAAM,CAUlE;AAYD;;;GAGG;AACH,wBAAgB,qBAAqB,CACjC,MAAM,EAAE,SAAS,EACjB,eAAe,EAAE,eAAe,EAChC,UAAU,EAAE,mBAAmB,GAChC,IAAI,CA0EN"}
@@ -0,0 +1,92 @@
1
+ import { z } from 'zod';
2
+ import { getFaqChunks, searchChunks } from '../../db/queries.js';
3
+ /**
4
+ * Format FAQ results in the standard QUESTION/ANSWER/SOURCE/CONFIDENCE format.
5
+ */
6
+ export function formatFaqResults(results) {
7
+ if (results.length === 0)
8
+ return "No FAQ results found.";
9
+ return results.map((r, i) => [
10
+ `Q&A ${i + 1}`,
11
+ `QUESTION: ${r.title || '(untitled)'}`,
12
+ `ANSWER: ${extractAnswer(r.content)}`,
13
+ `SOURCE: ${r.source_url || r.file_path}`,
14
+ `CONFIDENCE: ${r.confidence.toFixed(2)}`,
15
+ ].join('\n')).join('\n\n');
16
+ }
17
+ /**
18
+ * Extract the answer portion from Q&A content format "Q: ...\n\nA: ..."
19
+ */
20
+ function extractAnswer(content) {
21
+ const match = content.match(/\nA:\s*([\s\S]*)/);
22
+ if (match)
23
+ return match[1].trim();
24
+ // Fallback: return full content
25
+ return content;
26
+ }
27
+ /**
28
+ * Register a knowledge tool on the MCP server.
29
+ * Supports two modes: browse (no query) and search (with query).
30
+ */
31
+ export function registerKnowledgeTool(server, embeddingClient, toolConfig) {
32
+ const inputSchema = {
33
+ query: z.string().optional().describe("Search query. Omit for full FAQ listing."),
34
+ limit: z.number().min(1).max(toolConfig.max_limit).optional()
35
+ .describe(`Maximum results to return (default: ${toolConfig.default_limit})`),
36
+ min_confidence: z.number().min(0).max(1).optional()
37
+ .describe(`Override minimum confidence threshold (default: ${toolConfig.min_confidence})`),
38
+ };
39
+ server.tool(toolConfig.name, toolConfig.description, inputSchema, async ({ query, limit, min_confidence }) => {
40
+ const effectiveLimit = limit ?? toolConfig.default_limit;
41
+ const effectiveConfidence = min_confidence ?? toolConfig.min_confidence;
42
+ try {
43
+ if (!query || query.trim() === '') {
44
+ // Browse mode: return all FAQ entries above confidence
45
+ const chunks = await getFaqChunks(toolConfig.sources, effectiveConfidence, effectiveLimit);
46
+ return {
47
+ content: [{ type: "text", text: formatFaqResults(chunks) }],
48
+ };
49
+ }
50
+ else {
51
+ // Search mode: embed query, search each source, merge, filter by confidence
52
+ const embedding = await embeddingClient.embed(query);
53
+ // Search each source independently and merge
54
+ const allResults = [];
55
+ for (const sourceName of toolConfig.sources) {
56
+ const results = await searchChunks(embedding, effectiveLimit, sourceName);
57
+ allResults.push(...results);
58
+ }
59
+ // Sort by similarity descending, take top N
60
+ allResults.sort((a, b) => b.similarity - a.similarity);
61
+ const topResults = allResults.slice(0, effectiveLimit);
62
+ // Now get FAQ chunks (with confidence) for the same sources to cross-reference
63
+ // Use a very low confidence threshold (0) to get all, then filter
64
+ const faqChunks = await getFaqChunks(toolConfig.sources, 0, effectiveLimit * 5);
65
+ const faqById = new Map(faqChunks.map(c => [c.id, c]));
66
+ // Merge: keep search results that have FAQ metadata and meet confidence threshold
67
+ const mergedResults = [];
68
+ for (const result of topResults) {
69
+ const faqChunk = faqById.get(result.id);
70
+ if (faqChunk && faqChunk.confidence >= effectiveConfidence) {
71
+ mergedResults.push({
72
+ ...faqChunk,
73
+ similarity: result.similarity,
74
+ });
75
+ }
76
+ }
77
+ return {
78
+ content: [{ type: "text", text: formatFaqResults(mergedResults) }],
79
+ };
80
+ }
81
+ }
82
+ catch (error) {
83
+ console.error(`[${toolConfig.name}] Knowledge query failed:`, error);
84
+ const detail = error instanceof Error ? error.message : String(error);
85
+ return {
86
+ content: [{ type: "text", text: `Error querying FAQ: ${detail}` }],
87
+ isError: true,
88
+ };
89
+ }
90
+ });
91
+ }
92
+ //# sourceMappingURL=knowledge.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"knowledge.js","sourceRoot":"","sources":["../../../src/mcp/tools/knowledge.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"server.d.ts","sourceRoot":"","sources":["../src/server.ts"],"names":[],"mappings":"AAsBA,MAAM,WAAW,aAAa;IAC1B,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,UAAU,CAAC,EAAE,MAAM,CAAC;CACvB;AAiXD,wBAAsB,WAAW,CAAC,OAAO,CAAC,EAAE,aAAa,GAAG,OAAO,CAAC,IAAI,CAAC,CAkHxE"}
1
+ {"version":3,"file":"server.d.ts","sourceRoot":"","sources":["../src/server.ts"],"names":[],"mappings":"AA0BA,MAAM,WAAW,aAAa;IAC1B,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,UAAU,CAAC,EAAE,MAAM,CAAC;CACvB;AA4bD,wBAAsB,WAAW,CAAC,OAAO,CAAC,EAAE,aAAa,GAAG,OAAO,CAAC,IAAI,CAAC,CA2IxE"}