brains-mcp 1.61.2
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/README.md +95 -0
- package/dist/access/projectShares.d.ts +48 -0
- package/dist/access/projectShares.d.ts.map +1 -0
- package/dist/access/projectShares.js +203 -0
- package/dist/access/projectShares.js.map +1 -0
- package/dist/access/sharedInstructionsNote.d.ts +37 -0
- package/dist/access/sharedInstructionsNote.d.ts.map +1 -0
- package/dist/access/sharedInstructionsNote.js +76 -0
- package/dist/access/sharedInstructionsNote.js.map +1 -0
- package/dist/admin/seedUsers.d.ts +23 -0
- package/dist/admin/seedUsers.d.ts.map +1 -0
- package/dist/admin/seedUsers.js +168 -0
- package/dist/admin/seedUsers.js.map +1 -0
- package/dist/api/openapi.d.ts +2 -0
- package/dist/api/openapi.d.ts.map +1 -0
- package/dist/api/openapi.js +942 -0
- package/dist/api/openapi.js.map +1 -0
- package/dist/auth/clientStore.d.ts +43 -0
- package/dist/auth/clientStore.d.ts.map +1 -0
- package/dist/auth/clientStore.js +168 -0
- package/dist/auth/clientStore.js.map +1 -0
- package/dist/auth/deleteAccount.d.ts +34 -0
- package/dist/auth/deleteAccount.d.ts.map +1 -0
- package/dist/auth/deleteAccount.js +203 -0
- package/dist/auth/deleteAccount.js.map +1 -0
- package/dist/auth/oauth.d.ts +118 -0
- package/dist/auth/oauth.d.ts.map +1 -0
- package/dist/auth/oauth.js +491 -0
- package/dist/auth/oauth.js.map +1 -0
- package/dist/auth/patStore.d.ts +87 -0
- package/dist/auth/patStore.d.ts.map +1 -0
- package/dist/auth/patStore.js +308 -0
- package/dist/auth/patStore.js.map +1 -0
- package/dist/auth/supabase.d.ts +15 -0
- package/dist/auth/supabase.d.ts.map +1 -0
- package/dist/auth/supabase.js +66 -0
- package/dist/auth/supabase.js.map +1 -0
- package/dist/auth/tokenStore.d.ts +73 -0
- package/dist/auth/tokenStore.d.ts.map +1 -0
- package/dist/auth/tokenStore.js +261 -0
- package/dist/auth/tokenStore.js.map +1 -0
- package/dist/backup/drive.d.ts +24 -0
- package/dist/backup/drive.d.ts.map +1 -0
- package/dist/backup/drive.js +70 -0
- package/dist/backup/drive.js.map +1 -0
- package/dist/billing/tierStore.d.ts +59 -0
- package/dist/billing/tierStore.d.ts.map +1 -0
- package/dist/billing/tierStore.js +152 -0
- package/dist/billing/tierStore.js.map +1 -0
- package/dist/digest/activityDigest.d.ts +32 -0
- package/dist/digest/activityDigest.d.ts.map +1 -0
- package/dist/digest/activityDigest.js +299 -0
- package/dist/digest/activityDigest.js.map +1 -0
- package/dist/digest/digestCron.d.ts +40 -0
- package/dist/digest/digestCron.d.ts.map +1 -0
- package/dist/digest/digestCron.js +146 -0
- package/dist/digest/digestCron.js.map +1 -0
- package/dist/digest/digestPreferences.d.ts +25 -0
- package/dist/digest/digestPreferences.d.ts.map +1 -0
- package/dist/digest/digestPreferences.js +79 -0
- package/dist/digest/digestPreferences.js.map +1 -0
- package/dist/digest/emailSender.d.ts +20 -0
- package/dist/digest/emailSender.d.ts.map +1 -0
- package/dist/digest/emailSender.js +35 -0
- package/dist/digest/emailSender.js.map +1 -0
- package/dist/drive/client.d.ts +43 -0
- package/dist/drive/client.d.ts.map +1 -0
- package/dist/drive/client.js +282 -0
- package/dist/drive/client.js.map +1 -0
- package/dist/drive/errors.d.ts +27 -0
- package/dist/drive/errors.d.ts.map +1 -0
- package/dist/drive/errors.js +51 -0
- package/dist/drive/errors.js.map +1 -0
- package/dist/drive/fileCache.d.ts +22 -0
- package/dist/drive/fileCache.d.ts.map +1 -0
- package/dist/drive/fileCache.js +57 -0
- package/dist/drive/fileCache.js.map +1 -0
- package/dist/governance/accessControl.d.ts +87 -0
- package/dist/governance/accessControl.d.ts.map +1 -0
- package/dist/governance/accessControl.js +179 -0
- package/dist/governance/accessControl.js.map +1 -0
- package/dist/html/components.d.ts +8 -0
- package/dist/html/components.d.ts.map +1 -0
- package/dist/html/components.js +19 -0
- package/dist/html/components.js.map +1 -0
- package/dist/html/layout.d.ts +7 -0
- package/dist/html/layout.d.ts.map +1 -0
- package/dist/html/layout.js +24 -0
- package/dist/html/layout.js.map +1 -0
- package/dist/html/metricsUi.d.ts +8 -0
- package/dist/html/metricsUi.d.ts.map +1 -0
- package/dist/html/metricsUi.js +271 -0
- package/dist/html/metricsUi.js.map +1 -0
- package/dist/httpServer.d.ts +19 -0
- package/dist/httpServer.d.ts.map +1 -0
- package/dist/httpServer.js +3913 -0
- package/dist/httpServer.js.map +1 -0
- package/dist/index.d.ts +3 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +40 -0
- package/dist/index.js.map +1 -0
- package/dist/jobs/asyncJobRegistry.d.ts +30 -0
- package/dist/jobs/asyncJobRegistry.d.ts.map +1 -0
- package/dist/jobs/asyncJobRegistry.js +70 -0
- package/dist/jobs/asyncJobRegistry.js.map +1 -0
- package/dist/observability/metricsQuery.d.ts +41 -0
- package/dist/observability/metricsQuery.d.ts.map +1 -0
- package/dist/observability/metricsQuery.js +106 -0
- package/dist/observability/metricsQuery.js.map +1 -0
- package/dist/observability/relevanceSignal.d.ts +26 -0
- package/dist/observability/relevanceSignal.d.ts.map +1 -0
- package/dist/observability/relevanceSignal.js +95 -0
- package/dist/observability/relevanceSignal.js.map +1 -0
- package/dist/observability/requestEvents.d.ts +31 -0
- package/dist/observability/requestEvents.d.ts.map +1 -0
- package/dist/observability/requestEvents.js +54 -0
- package/dist/observability/requestEvents.js.map +1 -0
- package/dist/observability/slowQueryAlert.d.ts +25 -0
- package/dist/observability/slowQueryAlert.d.ts.map +1 -0
- package/dist/observability/slowQueryAlert.js +67 -0
- package/dist/observability/slowQueryAlert.js.map +1 -0
- package/dist/observability/zeroResultTriage.d.ts +22 -0
- package/dist/observability/zeroResultTriage.d.ts.map +1 -0
- package/dist/observability/zeroResultTriage.js +116 -0
- package/dist/observability/zeroResultTriage.js.map +1 -0
- package/dist/search/embeddings.d.ts +31 -0
- package/dist/search/embeddings.d.ts.map +1 -0
- package/dist/search/embeddings.js +91 -0
- package/dist/search/embeddings.js.map +1 -0
- package/dist/search/fileWatcher.d.ts +28 -0
- package/dist/search/fileWatcher.d.ts.map +1 -0
- package/dist/search/fileWatcher.js +103 -0
- package/dist/search/fileWatcher.js.map +1 -0
- package/dist/search/hotQueryCache.d.ts +31 -0
- package/dist/search/hotQueryCache.d.ts.map +1 -0
- package/dist/search/hotQueryCache.js +103 -0
- package/dist/search/hotQueryCache.js.map +1 -0
- package/dist/search/postgresIndex.d.ts +439 -0
- package/dist/search/postgresIndex.d.ts.map +1 -0
- package/dist/search/postgresIndex.js +1610 -0
- package/dist/search/postgresIndex.js.map +1 -0
- package/dist/search/sqliteIndex.d.ts +66 -0
- package/dist/search/sqliteIndex.d.ts.map +1 -0
- package/dist/search/sqliteIndex.js +342 -0
- package/dist/search/sqliteIndex.js.map +1 -0
- package/dist/server.d.ts +43 -0
- package/dist/server.d.ts.map +1 -0
- package/dist/server.js +532 -0
- package/dist/server.js.map +1 -0
- package/dist/session/bundle.d.ts +53 -0
- package/dist/session/bundle.d.ts.map +1 -0
- package/dist/session/bundle.js +97 -0
- package/dist/session/bundle.js.map +1 -0
- package/dist/storage/client.d.ts +157 -0
- package/dist/storage/client.d.ts.map +1 -0
- package/dist/storage/client.js +825 -0
- package/dist/storage/client.js.map +1 -0
- package/dist/tools/addWebhookPattern.d.ts +15 -0
- package/dist/tools/addWebhookPattern.d.ts.map +1 -0
- package/dist/tools/addWebhookPattern.js +15 -0
- package/dist/tools/addWebhookPattern.js.map +1 -0
- package/dist/tools/appendLog.d.ts +18 -0
- package/dist/tools/appendLog.d.ts.map +1 -0
- package/dist/tools/appendLog.js +18 -0
- package/dist/tools/appendLog.js.map +1 -0
- package/dist/tools/auditIndex.d.ts +15 -0
- package/dist/tools/auditIndex.d.ts.map +1 -0
- package/dist/tools/auditIndex.js +165 -0
- package/dist/tools/auditIndex.js.map +1 -0
- package/dist/tools/batchDeletePages.d.ts +18 -0
- package/dist/tools/batchDeletePages.d.ts.map +1 -0
- package/dist/tools/batchDeletePages.js +143 -0
- package/dist/tools/batchDeletePages.js.map +1 -0
- package/dist/tools/coerce.d.ts +3 -0
- package/dist/tools/coerce.d.ts.map +1 -0
- package/dist/tools/coerce.js +12 -0
- package/dist/tools/coerce.js.map +1 -0
- package/dist/tools/createPage.d.ts +24 -0
- package/dist/tools/createPage.d.ts.map +1 -0
- package/dist/tools/createPage.js +99 -0
- package/dist/tools/createPage.js.map +1 -0
- package/dist/tools/createPages.d.ts +51 -0
- package/dist/tools/createPages.d.ts.map +1 -0
- package/dist/tools/createPages.js +91 -0
- package/dist/tools/createPages.js.map +1 -0
- package/dist/tools/deletePage.d.ts +19 -0
- package/dist/tools/deletePage.d.ts.map +1 -0
- package/dist/tools/deletePage.js +127 -0
- package/dist/tools/deletePage.js.map +1 -0
- package/dist/tools/exportWiki.d.ts +48 -0
- package/dist/tools/exportWiki.d.ts.map +1 -0
- package/dist/tools/exportWiki.js +233 -0
- package/dist/tools/exportWiki.js.map +1 -0
- package/dist/tools/extractLinks.d.ts +14 -0
- package/dist/tools/extractLinks.d.ts.map +1 -0
- package/dist/tools/extractLinks.js +25 -0
- package/dist/tools/extractLinks.js.map +1 -0
- package/dist/tools/generateClaudeInstructions.d.ts +27 -0
- package/dist/tools/generateClaudeInstructions.d.ts.map +1 -0
- package/dist/tools/generateClaudeInstructions.js +263 -0
- package/dist/tools/generateClaudeInstructions.js.map +1 -0
- package/dist/tools/generateGptInstructions.d.ts +27 -0
- package/dist/tools/generateGptInstructions.d.ts.map +1 -0
- package/dist/tools/generateGptInstructions.js +208 -0
- package/dist/tools/generateGptInstructions.js.map +1 -0
- package/dist/tools/getBacklinks.d.ts +12 -0
- package/dist/tools/getBacklinks.d.ts.map +1 -0
- package/dist/tools/getBacklinks.js +13 -0
- package/dist/tools/getBacklinks.js.map +1 -0
- package/dist/tools/getRelated.d.ts +12 -0
- package/dist/tools/getRelated.d.ts.map +1 -0
- package/dist/tools/getRelated.js +13 -0
- package/dist/tools/getRelated.js.map +1 -0
- package/dist/tools/healthCheck.d.ts +5 -0
- package/dist/tools/healthCheck.d.ts.map +1 -0
- package/dist/tools/healthCheck.js +167 -0
- package/dist/tools/healthCheck.js.map +1 -0
- package/dist/tools/importBrainSource.d.ts +36 -0
- package/dist/tools/importBrainSource.d.ts.map +1 -0
- package/dist/tools/importBrainSource.js +314 -0
- package/dist/tools/importBrainSource.js.map +1 -0
- package/dist/tools/importWikiZip.d.ts +60 -0
- package/dist/tools/importWikiZip.d.ts.map +1 -0
- package/dist/tools/importWikiZip.js +379 -0
- package/dist/tools/importWikiZip.js.map +1 -0
- package/dist/tools/initProject.d.ts +34 -0
- package/dist/tools/initProject.d.ts.map +1 -0
- package/dist/tools/initProject.js +443 -0
- package/dist/tools/initProject.js.map +1 -0
- package/dist/tools/instructionContext.d.ts +60 -0
- package/dist/tools/instructionContext.d.ts.map +1 -0
- package/dist/tools/instructionContext.js +210 -0
- package/dist/tools/instructionContext.js.map +1 -0
- package/dist/tools/listArchivedPages.d.ts +17 -0
- package/dist/tools/listArchivedPages.d.ts.map +1 -0
- package/dist/tools/listArchivedPages.js +51 -0
- package/dist/tools/listArchivedPages.js.map +1 -0
- package/dist/tools/listPages.d.ts +28 -0
- package/dist/tools/listPages.d.ts.map +1 -0
- package/dist/tools/listPages.js +166 -0
- package/dist/tools/listPages.js.map +1 -0
- package/dist/tools/listWebhooks.d.ts +7 -0
- package/dist/tools/listWebhooks.d.ts.map +1 -0
- package/dist/tools/listWebhooks.js +10 -0
- package/dist/tools/listWebhooks.js.map +1 -0
- package/dist/tools/movePage.d.ts +18 -0
- package/dist/tools/movePage.d.ts.map +1 -0
- package/dist/tools/movePage.js +182 -0
- package/dist/tools/movePage.js.map +1 -0
- package/dist/tools/pageHistory.d.ts +36 -0
- package/dist/tools/pageHistory.d.ts.map +1 -0
- package/dist/tools/pageHistory.js +60 -0
- package/dist/tools/pageHistory.js.map +1 -0
- package/dist/tools/patchPage.d.ts +141 -0
- package/dist/tools/patchPage.d.ts.map +1 -0
- package/dist/tools/patchPage.js +287 -0
- package/dist/tools/patchPage.js.map +1 -0
- package/dist/tools/pullSessionBundle.d.ts +34 -0
- package/dist/tools/pullSessionBundle.d.ts.map +1 -0
- package/dist/tools/pullSessionBundle.js +432 -0
- package/dist/tools/pullSessionBundle.js.map +1 -0
- package/dist/tools/purgeWiki.d.ts +23 -0
- package/dist/tools/purgeWiki.d.ts.map +1 -0
- package/dist/tools/purgeWiki.js +113 -0
- package/dist/tools/purgeWiki.js.map +1 -0
- package/dist/tools/pushSessionBundle.d.ts +139 -0
- package/dist/tools/pushSessionBundle.d.ts.map +1 -0
- package/dist/tools/pushSessionBundle.js +282 -0
- package/dist/tools/pushSessionBundle.js.map +1 -0
- package/dist/tools/readGovernanceAudit.d.ts +17 -0
- package/dist/tools/readGovernanceAudit.d.ts.map +1 -0
- package/dist/tools/readGovernanceAudit.js +21 -0
- package/dist/tools/readGovernanceAudit.js.map +1 -0
- package/dist/tools/readPage.d.ts +13 -0
- package/dist/tools/readPage.d.ts.map +1 -0
- package/dist/tools/readPage.js +46 -0
- package/dist/tools/readPage.js.map +1 -0
- package/dist/tools/removeWebhook.d.ts +14 -0
- package/dist/tools/removeWebhook.d.ts.map +1 -0
- package/dist/tools/removeWebhook.js +12 -0
- package/dist/tools/removeWebhook.js.map +1 -0
- package/dist/tools/resolveProject.d.ts +58 -0
- package/dist/tools/resolveProject.d.ts.map +1 -0
- package/dist/tools/resolveProject.js +175 -0
- package/dist/tools/resolveProject.js.map +1 -0
- package/dist/tools/restorePage.d.ts +47 -0
- package/dist/tools/restorePage.d.ts.map +1 -0
- package/dist/tools/restorePage.js +111 -0
- package/dist/tools/restorePage.js.map +1 -0
- package/dist/tools/searchPages.d.ts +28 -0
- package/dist/tools/searchPages.d.ts.map +1 -0
- package/dist/tools/searchPages.js +372 -0
- package/dist/tools/searchPages.js.map +1 -0
- package/dist/tools/setWebhook.d.ts +30 -0
- package/dist/tools/setWebhook.d.ts.map +1 -0
- package/dist/tools/setWebhook.js +30 -0
- package/dist/tools/setWebhook.js.map +1 -0
- package/dist/tools/shareProject.d.ts +25 -0
- package/dist/tools/shareProject.d.ts.map +1 -0
- package/dist/tools/shareProject.js +56 -0
- package/dist/tools/shareProject.js.map +1 -0
- package/dist/tools/suggestLinks.d.ts +29 -0
- package/dist/tools/suggestLinks.d.ts.map +1 -0
- package/dist/tools/suggestLinks.js +214 -0
- package/dist/tools/suggestLinks.js.map +1 -0
- package/dist/tools/updatePage.d.ts +27 -0
- package/dist/tools/updatePage.d.ts.map +1 -0
- package/dist/tools/updatePage.js +118 -0
- package/dist/tools/updatePage.js.map +1 -0
- package/dist/webhooks/dispatch.d.ts +49 -0
- package/dist/webhooks/dispatch.d.ts.map +1 -0
- package/dist/webhooks/dispatch.js +159 -0
- package/dist/webhooks/dispatch.js.map +1 -0
- package/dist/webhooks/webhookRules.d.ts +34 -0
- package/dist/webhooks/webhookRules.d.ts.map +1 -0
- package/dist/webhooks/webhookRules.js +129 -0
- package/dist/webhooks/webhookRules.js.map +1 -0
- package/dist/wiki/frontmatter.d.ts +45 -0
- package/dist/wiki/frontmatter.d.ts.map +1 -0
- package/dist/wiki/frontmatter.js +68 -0
- package/dist/wiki/frontmatter.js.map +1 -0
- package/dist/wiki/index.d.ts +22 -0
- package/dist/wiki/index.d.ts.map +1 -0
- package/dist/wiki/index.js +203 -0
- package/dist/wiki/index.js.map +1 -0
- package/dist/wiki/ingestPolicy.d.ts +18 -0
- package/dist/wiki/ingestPolicy.d.ts.map +1 -0
- package/dist/wiki/ingestPolicy.js +64 -0
- package/dist/wiki/ingestPolicy.js.map +1 -0
- package/dist/wiki/layoutLint.d.ts +51 -0
- package/dist/wiki/layoutLint.d.ts.map +1 -0
- package/dist/wiki/layoutLint.js +146 -0
- package/dist/wiki/layoutLint.js.map +1 -0
- package/dist/wiki/links.d.ts +6 -0
- package/dist/wiki/links.d.ts.map +1 -0
- package/dist/wiki/links.js +45 -0
- package/dist/wiki/links.js.map +1 -0
- package/dist/wiki/log.d.ts +58 -0
- package/dist/wiki/log.d.ts.map +1 -0
- package/dist/wiki/log.js +126 -0
- package/dist/wiki/log.js.map +1 -0
- package/dist/wiki/path.d.ts +8 -0
- package/dist/wiki/path.d.ts.map +1 -0
- package/dist/wiki/path.js +25 -0
- package/dist/wiki/path.js.map +1 -0
- package/dist/wiki/storageLimits.d.ts +163 -0
- package/dist/wiki/storageLimits.d.ts.map +1 -0
- package/dist/wiki/storageLimits.js +281 -0
- package/dist/wiki/storageLimits.js.map +1 -0
- package/package.json +81 -0
package/dist/server.js
ADDED
|
@@ -0,0 +1,532 @@
|
|
|
1
|
+
import { Server } from "@modelcontextprotocol/sdk/server/index.js";
|
|
2
|
+
import { CallToolRequestSchema, ListToolsRequestSchema } from "@modelcontextprotocol/sdk/types.js";
|
|
3
|
+
import { z } from "zod";
|
|
4
|
+
import { getStorageClient } from "./storage/client.js";
|
|
5
|
+
import { DriveAuthError, DriveConflictError, DriveNotFoundError, DrivePermissionError, DriveQuotaError } from "./drive/errors.js";
|
|
6
|
+
import { listPages, listPagesInputSchema } from "./tools/listPages.js";
|
|
7
|
+
import { readPage, readPageInputSchema } from "./tools/readPage.js";
|
|
8
|
+
import { searchPages, searchPagesInputSchema } from "./tools/searchPages.js";
|
|
9
|
+
import { createPage, createPageInputSchema } from "./tools/createPage.js";
|
|
10
|
+
import { createPages, createPagesInputSchema } from "./tools/createPages.js";
|
|
11
|
+
import { patchPage, patchPageInputSchema } from "./tools/patchPage.js";
|
|
12
|
+
import { updatePage, updatePageInputSchema } from "./tools/updatePage.js";
|
|
13
|
+
import { movePage, movePageInputSchema } from "./tools/movePage.js";
|
|
14
|
+
import { appendLog, appendLogInputSchema } from "./tools/appendLog.js";
|
|
15
|
+
import { healthCheck, healthCheckInputSchema } from "./tools/healthCheck.js";
|
|
16
|
+
import { importBrainSource, importBrainSourceInputSchema } from "./tools/importBrainSource.js";
|
|
17
|
+
import { exportWiki, exportWikiInputSchema } from "./tools/exportWiki.js";
|
|
18
|
+
import { importWikiZip, importWikiZipInputSchema } from "./tools/importWikiZip.js";
|
|
19
|
+
import { purgeWiki, purgeWikiInputSchema } from "./tools/purgeWiki.js";
|
|
20
|
+
import { generateClaudeInstructions, generateClaudeInstructionsInputSchema, } from "./tools/generateClaudeInstructions.js";
|
|
21
|
+
import { generateGptInstructions, generateGptInstructionsInputSchema, } from "./tools/generateGptInstructions.js";
|
|
22
|
+
import { resolveProject, resolveProjectInputSchema } from "./tools/resolveProject.js";
|
|
23
|
+
import { initProject, initProjectInputSchema } from "./tools/initProject.js";
|
|
24
|
+
import { pullSessionBundle, pullSessionBundleInputSchema } from "./tools/pullSessionBundle.js";
|
|
25
|
+
import { pushSessionBundle, pushSessionBundleInputSchema, pushSessionBundleJsonSchema } from "./tools/pushSessionBundle.js";
|
|
26
|
+
import { auditIndex, auditIndexInputSchema } from "./tools/auditIndex.js";
|
|
27
|
+
import { readGovernanceAudit, readGovernanceAuditInputSchema } from "./tools/readGovernanceAudit.js";
|
|
28
|
+
import { extractLinks, extractLinksInputSchema } from "./tools/extractLinks.js";
|
|
29
|
+
import { getBacklinks, getBacklinksInputSchema } from "./tools/getBacklinks.js";
|
|
30
|
+
import { getRelated, getRelatedInputSchema } from "./tools/getRelated.js";
|
|
31
|
+
import { suggestLinks, suggestLinksInputSchema } from "./tools/suggestLinks.js";
|
|
32
|
+
import { deletePage, deletePageInputSchema } from "./tools/deletePage.js";
|
|
33
|
+
import { batchDeletePages, batchDeletePagesInputSchema } from "./tools/batchDeletePages.js";
|
|
34
|
+
import { restorePage, restorePageInputSchema, restorePageBaseSchema } from "./tools/restorePage.js";
|
|
35
|
+
import { listArchivedPages, listArchivedPagesInputSchema } from "./tools/listArchivedPages.js";
|
|
36
|
+
import { setWebhook, setWebhookInputSchema } from "./tools/setWebhook.js";
|
|
37
|
+
import { listWebhooks, listWebhooksInputSchema } from "./tools/listWebhooks.js";
|
|
38
|
+
import { removeWebhook, removeWebhookInputSchema } from "./tools/removeWebhook.js";
|
|
39
|
+
import { addWebhookPattern, addWebhookPatternInputSchema } from "./tools/addWebhookPattern.js";
|
|
40
|
+
import { listPageHistory, listPageHistoryInputSchema, readPageVersion, readPageVersionInputSchema, } from "./tools/pageHistory.js";
|
|
41
|
+
import { DEFAULT_ACCESS_CONTEXT, isHiveModeEnabled, } from "./governance/accessControl.js";
|
|
42
|
+
import { shareProject, shareProjectInputSchema } from "./tools/shareProject.js";
|
|
43
|
+
function zodToJsonSchema(schema) {
|
|
44
|
+
// Minimal inline converter — enough for flat objects with string/boolean/array fields
|
|
45
|
+
if (schema instanceof z.ZodObject) {
|
|
46
|
+
const shape = schema._def.shape();
|
|
47
|
+
const properties = {};
|
|
48
|
+
const required = [];
|
|
49
|
+
for (const [key, val] of Object.entries(shape)) {
|
|
50
|
+
const fieldSchema = val;
|
|
51
|
+
const isOptional = fieldSchema instanceof z.ZodOptional ||
|
|
52
|
+
fieldSchema instanceof z.ZodDefault;
|
|
53
|
+
const inner = unwrapZodSchema(fieldSchema);
|
|
54
|
+
properties[key] = inferJsonSchemaType(inner);
|
|
55
|
+
if (!isOptional)
|
|
56
|
+
required.push(key);
|
|
57
|
+
}
|
|
58
|
+
return required.length > 0 ? { type: "object", properties, required } : { type: "object", properties };
|
|
59
|
+
}
|
|
60
|
+
return {};
|
|
61
|
+
}
|
|
62
|
+
function unwrapZodSchema(schema) {
|
|
63
|
+
let current = schema;
|
|
64
|
+
while (current instanceof z.ZodOptional ||
|
|
65
|
+
current instanceof z.ZodDefault ||
|
|
66
|
+
current instanceof z.ZodEffects) {
|
|
67
|
+
if (current instanceof z.ZodOptional) {
|
|
68
|
+
current = current._def.innerType;
|
|
69
|
+
continue;
|
|
70
|
+
}
|
|
71
|
+
if (current instanceof z.ZodDefault) {
|
|
72
|
+
current = current._def.innerType;
|
|
73
|
+
continue;
|
|
74
|
+
}
|
|
75
|
+
current = current._def.schema;
|
|
76
|
+
}
|
|
77
|
+
return current;
|
|
78
|
+
}
|
|
79
|
+
function inferJsonSchemaType(schema) {
|
|
80
|
+
const unwrapped = unwrapZodSchema(schema);
|
|
81
|
+
if (unwrapped !== schema)
|
|
82
|
+
return inferJsonSchemaType(unwrapped);
|
|
83
|
+
if (schema instanceof z.ZodString)
|
|
84
|
+
return { type: "string" };
|
|
85
|
+
if (schema instanceof z.ZodBoolean)
|
|
86
|
+
return { type: "boolean" };
|
|
87
|
+
if (schema instanceof z.ZodNumber)
|
|
88
|
+
return { type: "number" };
|
|
89
|
+
if (schema instanceof z.ZodArray)
|
|
90
|
+
return { type: "array", items: inferJsonSchemaType(schema._def.type) };
|
|
91
|
+
if (schema instanceof z.ZodEnum)
|
|
92
|
+
return { type: "string", enum: schema._def.values };
|
|
93
|
+
if (schema instanceof z.ZodObject)
|
|
94
|
+
return zodToJsonSchema(schema);
|
|
95
|
+
return {};
|
|
96
|
+
}
|
|
97
|
+
function wrapDriveError(err) {
|
|
98
|
+
let message;
|
|
99
|
+
if (err instanceof DriveConflictError) {
|
|
100
|
+
message = `CONFLICT: The page was modified since you last read it. Re-read the page to get the latest revision, then retry your write. (seenRevision=${err.seenRevision}, currentRevision=${err.currentRevision})`;
|
|
101
|
+
}
|
|
102
|
+
else if (err instanceof DriveAuthError) {
|
|
103
|
+
message = `AUTH_ERROR: Google Drive authentication failed. Check that GOOGLE_CLIENT_ID, GOOGLE_CLIENT_SECRET, and GOOGLE_REFRESH_TOKEN are set and valid. Detail: ${err.message}`;
|
|
104
|
+
}
|
|
105
|
+
else if (err instanceof DriveQuotaError) {
|
|
106
|
+
message = `QUOTA_ERROR: Google Drive rate limit hit. Retry after ${Math.ceil(err.retryAfterMs / 1000)}s.`;
|
|
107
|
+
}
|
|
108
|
+
else if (err instanceof DriveNotFoundError) {
|
|
109
|
+
message = `NOT_FOUND: ${err.message}`;
|
|
110
|
+
}
|
|
111
|
+
else if (err instanceof DrivePermissionError) {
|
|
112
|
+
message = `PERMISSION_ERROR: ${err.message}`;
|
|
113
|
+
}
|
|
114
|
+
else {
|
|
115
|
+
message = err instanceof Error ? err.message : String(err);
|
|
116
|
+
}
|
|
117
|
+
return { content: [{ type: "text", text: message }], isError: true };
|
|
118
|
+
}
|
|
119
|
+
export const TOOL_DEFINITIONS = [
|
|
120
|
+
{
|
|
121
|
+
name: "list_pages",
|
|
122
|
+
description: "List wiki pages with optional filtering by tag or status. PRIMARY routing tool: call list_pages first to get a full inventory. When running with Supabase/Postgres index enabled, this is fast with no file reads; otherwise it falls back to a storage scan. Use the returned names to select candidates, then read_page only those candidates.",
|
|
123
|
+
inputSchema: zodToJsonSchema(listPagesInputSchema),
|
|
124
|
+
annotations: { title: "List Pages", readOnlyHint: true },
|
|
125
|
+
},
|
|
126
|
+
{
|
|
127
|
+
name: "read_page",
|
|
128
|
+
description: "Read a wiki page by filename, returning content, frontmatter, fileId, revision, and outbound_link_count. If you already pulled a session bundle, do NOT call this for any page listed in that bundle — its full content is already in your context; read it from there. Otherwise the REQUIRED retrieval workflow is: (1) list_pages first to get inventory, (2) LLM selects candidate files from results, (3) read_page only those candidates, (4) LLM performs synthesis. Do NOT read index.md for routing — when Supabase/Postgres index is enabled the DB index is authoritative; otherwise use list_pages. For small edits, prefer patch_page (especially replace_lines). Use update_page only for intentional full-body rewrites.",
|
|
129
|
+
inputSchema: zodToJsonSchema(readPageInputSchema),
|
|
130
|
+
annotations: { title: "Read Page", readOnlyHint: true },
|
|
131
|
+
},
|
|
132
|
+
{
|
|
133
|
+
name: "search_pages",
|
|
134
|
+
description: "Full-text search across wiki pages. Uses Postgres FTS when Supabase/Postgres index is enabled (fast); falls back to a local scan otherwise. Use for keyword lookups; use list_pages for full inventory and routing.",
|
|
135
|
+
inputSchema: zodToJsonSchema(searchPagesInputSchema),
|
|
136
|
+
annotations: { title: "Search Pages", readOnlyHint: true },
|
|
137
|
+
},
|
|
138
|
+
{
|
|
139
|
+
name: "create_page",
|
|
140
|
+
description: "Create a new wiki page with frontmatter and body content. Name is auto-normalized to a wiki-safe .md path. Returns bytesWritten (UTF-8 byte count of the written file). Ingest responsibility rule: if source material contains stable facts, active tasks, and decisions, you MUST split it across taxonomy folders (canonical/, projects/, decisions/) and keep data/ as raw synthesis only.",
|
|
141
|
+
inputSchema: zodToJsonSchema(createPageInputSchema),
|
|
142
|
+
annotations: { title: "Create Page", readOnlyHint: false },
|
|
143
|
+
},
|
|
144
|
+
{
|
|
145
|
+
name: "create_pages",
|
|
146
|
+
description: "Create multiple pages in one call (fast path for ingest decomposition into canonical/projects/decisions/data). Returns compact timing/count summary by default; set verbose=true for per-page results. Response includes totalBytesWritten (sum of UTF-8 bytes across all created pages) and per-page bytesWritten when verbose=true.",
|
|
147
|
+
inputSchema: zodToJsonSchema(createPagesInputSchema),
|
|
148
|
+
annotations: { title: "Create Pages (Batch)", readOnlyHint: false },
|
|
149
|
+
},
|
|
150
|
+
{
|
|
151
|
+
name: "import_brain_source",
|
|
152
|
+
description: "Deterministic importer for source brain folders. Supports preview mode (execute=false) and execute mode (execute=true) with folder-based routing and car-profile consolidation.",
|
|
153
|
+
inputSchema: zodToJsonSchema(importBrainSourceInputSchema),
|
|
154
|
+
annotations: { title: "Import Brain Source", readOnlyHint: false },
|
|
155
|
+
},
|
|
156
|
+
{
|
|
157
|
+
name: "export_wiki",
|
|
158
|
+
description: "Export wiki pages to a ZIP archive. When outputPath is omitted, returns the ZIP as a base64-encoded string (zipData) — no server filesystem access required, fully agent-reachable. Pass zipData to import_wiki to round-trip without curl. When outputPath is provided, also writes to that server path. Optional: filter by folder prefix (e.g. 'projects/brainsapp') or tags (any matching tag includes the page).",
|
|
159
|
+
inputSchema: zodToJsonSchema(exportWikiInputSchema),
|
|
160
|
+
annotations: { title: "Export Wiki", readOnlyHint: true },
|
|
161
|
+
},
|
|
162
|
+
{
|
|
163
|
+
name: "import_wiki",
|
|
164
|
+
description: "Import a wiki from a ZIP archive. Agent-friendly: pass zipData (base64 from export_wiki) instead of zipPath for fully agent-reachable round-trips. Supports preview (execute=false) and execute (execute=true). Modes: mode='additive' updates/creates ZIP pages without deleting others; mode='replace' mirrors the ZIP exactly (imports all ZIP pages and deletes pages absent from the ZIP, always overwrite). When execute applies changes, response includes instructionRefreshRequired/discoveredFolders/nextAction hints for instruction refresh.",
|
|
165
|
+
inputSchema: zodToJsonSchema(importWikiZipInputSchema),
|
|
166
|
+
annotations: { title: "Import Wiki from ZIP", readOnlyHint: false },
|
|
167
|
+
},
|
|
168
|
+
{
|
|
169
|
+
name: "pull_session_bundle",
|
|
170
|
+
description: "Downloads all relevant wiki pages for your project as a single plain-text bundle (no ZIP decode needed). The returned bundle IS your working set: every listed page is included in full, so do NOT call read_page on any of them afterwards. Work locally in this conversation, then push back with push_session_bundle when done. Measured 10.04s of individual read_page calls versus 3.47s for the same ten pages bundled. For a project, prefer folder=projects/<slug> over tags — folder membership is structural and cannot drift, whereas tags are hand-maintained and frequently incomplete (measured on a real wiki: tags returned 0 of 39 pages for one project and 2 of 49 for another, while the folder selector returned all of them). Use tags only for cross-cutting themes that span folders. If you do not know the project slug, do NOT guess one: list_pages with folder='projects' shows the available projects — resolve the slug first, then pull. Always set maxBytes=150000 to stay within context limits. Paginates via nextCursor. Each entry in the returned 'pages' array includes a 'revision' — pass it back on the matching page in push_session_bundle's pages mode to get conflict protection against other concurrent writers (e.g. a shared project).",
|
|
171
|
+
inputSchema: zodToJsonSchema(pullSessionBundleInputSchema),
|
|
172
|
+
annotations: { title: "Pull Session Bundle", readOnlyHint: true },
|
|
173
|
+
},
|
|
174
|
+
{
|
|
175
|
+
name: "push_session_bundle",
|
|
176
|
+
description: "PREFERRED write-back tool when paired with pull_session_bundle. Two modes: (1) pages mode (recommended) — pass pages=[{name,content,revision?}] for each page you modified; avoids token-limit issues with large bundles. (2) bundle mode (small bundles <20 KB only) — pass bundle string + manifest array. Both modes use the same conflict-strategy semantics. In pages mode, include the 'revision' you got from pull_session_bundle/read_page for each page — if someone else changed that page in the meantime, the write is rejected as a conflict (returned in 'conflicts') instead of overwriting their change; re-read the page, reconcile, and push again with the fresh revision. Omitting revision falls back to conflictStrategy-only behavior (no conflict protection). Returns ok, created, updated, skipped, conflicts, and any per-page errors.",
|
|
177
|
+
inputSchema: zodToJsonSchema(pushSessionBundleJsonSchema),
|
|
178
|
+
annotations: { title: "Push Session Bundle", readOnlyHint: false },
|
|
179
|
+
},
|
|
180
|
+
{
|
|
181
|
+
name: "purge_wiki",
|
|
182
|
+
description: "Permanently delete all wiki pages. Returns a warning and file list when confirm=false. Set confirm=true to proceed. Set exportBeforeDelete=true with exportOutputPath to create a ZIP backup first.",
|
|
183
|
+
inputSchema: zodToJsonSchema(purgeWikiInputSchema),
|
|
184
|
+
annotations: { title: "Purge Wiki", readOnlyHint: false, destructiveHint: true },
|
|
185
|
+
},
|
|
186
|
+
{
|
|
187
|
+
name: "update_page",
|
|
188
|
+
description: "FULL REWRITE tool: replaces the page body. Requires fileId and revision from read_page to prevent conflicts. Returns bytesWritten (UTF-8 byte count of the written file). Prefer patch_page for targeted edits (use replace_lines when possible); use update_page when intentionally rewriting most/all content. Ingest responsibility rule: when refining ingest docs, distribute content into canonical/, projects/, and decisions/ pages where appropriate instead of leaving everything in data/.",
|
|
189
|
+
inputSchema: zodToJsonSchema(updatePageInputSchema),
|
|
190
|
+
annotations: { title: "Update Page (Full Rewrite)", readOnlyHint: false },
|
|
191
|
+
},
|
|
192
|
+
{
|
|
193
|
+
name: "patch_page",
|
|
194
|
+
description: "PREFERRED EDIT tool for small/medium changes. Patch a page with surgical edits in one call. Returns bytesWritten (UTF-8 byte count of the file after patching). Supports text anchors and line-range replacement (replace_lines with 1-based full-file line numbers), and accepts multiple operations in an array. Each operation MUST include a 'type' field (one of: replace, insert_after, insert_before, append, replace_lines). Example replace op: {\"type\": \"replace\", \"find\": \"## Status\\nOld text\", \"replace\": \"## Status\\nNew text\"}.",
|
|
195
|
+
inputSchema: zodToJsonSchema(patchPageInputSchema),
|
|
196
|
+
annotations: { title: "Patch Page (Surgical Edit)", readOnlyHint: false },
|
|
197
|
+
},
|
|
198
|
+
{
|
|
199
|
+
name: "move_page",
|
|
200
|
+
description: "Archive (prefix with 'archive-') or rename a wiki page. No hard deletion in v1.",
|
|
201
|
+
inputSchema: zodToJsonSchema(movePageInputSchema),
|
|
202
|
+
annotations: { title: "Move / Rename Page", readOnlyHint: false },
|
|
203
|
+
},
|
|
204
|
+
{
|
|
205
|
+
name: "append_log",
|
|
206
|
+
description: "Append an entry to the wiki log. Use for ingest, query, lint, and error events.",
|
|
207
|
+
inputSchema: zodToJsonSchema(appendLogInputSchema),
|
|
208
|
+
annotations: { title: "Append Log Entry", readOnlyHint: false },
|
|
209
|
+
},
|
|
210
|
+
{
|
|
211
|
+
name: "health_check",
|
|
212
|
+
description: "Check server health: storage backend connectivity (Supabase Storage), search index status (Postgres FTS), uptime, and session log status. Call once at session start to confirm the server is reachable before doing work.",
|
|
213
|
+
inputSchema: zodToJsonSchema(healthCheckInputSchema),
|
|
214
|
+
annotations: { title: "Health Check", readOnlyHint: true },
|
|
215
|
+
},
|
|
216
|
+
{
|
|
217
|
+
name: "generate_claude_instructions",
|
|
218
|
+
description: "Refresh the Claude instruction block for an EXISTING Brains-connected project. Returns a markdown block the user can paste into their Claude Project system prompt. For NEW projects, call init_project first — it scaffolds the brain pages and emits the same instruction block.",
|
|
219
|
+
inputSchema: zodToJsonSchema(generateClaudeInstructionsInputSchema),
|
|
220
|
+
annotations: { title: "Generate Claude Instructions", readOnlyHint: true },
|
|
221
|
+
},
|
|
222
|
+
{
|
|
223
|
+
name: "generate_gpt_instructions",
|
|
224
|
+
description: "Refresh the ChatGPT instruction block for an EXISTING Brains-connected project. Returns a markdown block the user can paste into their ChatGPT system prompt. For NEW projects, call init_project first — it scaffolds the brain pages and emits the same instruction block.",
|
|
225
|
+
inputSchema: zodToJsonSchema(generateGptInstructionsInputSchema),
|
|
226
|
+
annotations: { title: "Generate GPT Instructions", readOnlyHint: true },
|
|
227
|
+
},
|
|
228
|
+
{
|
|
229
|
+
name: "resolve_project",
|
|
230
|
+
description: "Call this FIRST when the user refers to a project, vehicle, property, client or topic by name and you do not already know its brains project slug. Turns freeform context into the project slug plus the path to its instruction file, so you can pull the right project instead of guessing a tag. Returns ranked matches with a confidence and an `ambiguous` flag — when ambiguous is true or confidence is low, ask the user rather than loading a project. Does not load anything itself: follow up with pull_session_bundle(folder: \"projects/<slug>\").",
|
|
231
|
+
inputSchema: zodToJsonSchema(resolveProjectInputSchema),
|
|
232
|
+
annotations: { title: "Resolve Project", readOnlyHint: true },
|
|
233
|
+
},
|
|
234
|
+
{
|
|
235
|
+
name: "init_project",
|
|
236
|
+
description: "FIRST CALL for any new Brains setup. Creates the project brain pages (projects/instructions/decisions scaffolding) and returns a ready-to-paste instruction block for Claude or ChatGPT. Idempotent — safe to re-run. To refresh instructions on an already-initialized project, use generate_claude_instructions or generate_gpt_instructions instead.",
|
|
237
|
+
inputSchema: zodToJsonSchema(initProjectInputSchema),
|
|
238
|
+
annotations: { title: "Initialize Project", readOnlyHint: false },
|
|
239
|
+
},
|
|
240
|
+
{
|
|
241
|
+
name: "audit_index",
|
|
242
|
+
description: "Diagnose and repair index/storage drift. Reads the Postgres index, checks each entry against the storage backend, and reports ghost rows (in index but not in storage) and unindexed pages (in storage but not in index). Safe read-only by default. Set cleanup=true to delete ghost rows and re-index missing pages. Writes a log entry when cleanup runs. Requires Postgres index to be configured.",
|
|
243
|
+
inputSchema: zodToJsonSchema(auditIndexInputSchema),
|
|
244
|
+
annotations: { title: "Audit Index", readOnlyHint: false },
|
|
245
|
+
},
|
|
246
|
+
{
|
|
247
|
+
name: "read_governance_audit",
|
|
248
|
+
description: "Read governance audit log entries (Hive mode only). Returns server-side access filter events for classification review. Only accessible to exec+ users (access_level ≥ 4) when BRAINS_HIVE_MODE=true.",
|
|
249
|
+
inputSchema: zodToJsonSchema(readGovernanceAuditInputSchema),
|
|
250
|
+
annotations: { title: "Read Governance Audit", readOnlyHint: true },
|
|
251
|
+
},
|
|
252
|
+
{
|
|
253
|
+
name: "extract_links",
|
|
254
|
+
description: "Run link extraction over a filtered set of wiki pages. Inserts/updates rows in the server-side wiki_links graph for pages where the on-write hook missed (e.g. legacy pages, ingest backfill). Requires at least one of tags or folder. Returns { pagesProcessed, linksExtracted }. NOTE: pagesProcessed=0 means no stale pages remain — that is success, not failure.",
|
|
255
|
+
inputSchema: zodToJsonSchema(extractLinksInputSchema),
|
|
256
|
+
annotations: { title: "Extract Links", readOnlyHint: false },
|
|
257
|
+
},
|
|
258
|
+
{
|
|
259
|
+
name: "get_backlinks",
|
|
260
|
+
description: "Return the list of pages that link TO the given page (incoming references). Uses the server-side wiki_links graph; pages not yet indexed produce empty results — call extract_links first if needed.",
|
|
261
|
+
inputSchema: zodToJsonSchema(getBacklinksInputSchema),
|
|
262
|
+
annotations: { title: "Get Backlinks", readOnlyHint: true },
|
|
263
|
+
},
|
|
264
|
+
{
|
|
265
|
+
name: "get_related",
|
|
266
|
+
description: "Return pages that share outbound link targets with the given page (second-degree neighbors). Uses the server-side wiki_links graph; pages not yet indexed produce empty results — call extract_links first if needed.",
|
|
267
|
+
inputSchema: zodToJsonSchema(getRelatedInputSchema),
|
|
268
|
+
annotations: { title: "Get Related Pages", readOnlyHint: true },
|
|
269
|
+
},
|
|
270
|
+
{
|
|
271
|
+
name: "suggest_links",
|
|
272
|
+
description: "Retroactive linking audit: find wiki pages that lack a '## Related pages' section and return ready-to-apply markdown patches suggesting cross-references. Filters by tags or folder. Uses the server-side link graph (shared outbound targets, backlinks) when available; falls back to tag-overlap heuristics. Never writes — patches require explicit review and confirmation before applying with patch_page.",
|
|
273
|
+
inputSchema: zodToJsonSchema(suggestLinksInputSchema),
|
|
274
|
+
annotations: { title: "Suggest Links", readOnlyHint: true },
|
|
275
|
+
},
|
|
276
|
+
{
|
|
277
|
+
name: "delete_page",
|
|
278
|
+
description: "Archive-then-delete a single wiki page. On confirm=true, writes a recoverable archived_pages row (origin path/folder, content, metadata, deleted_by, optional reason) before deleting from live storage/index. Set confirm=false (default) for a dry-run preview. Protected system pages (instructions/brain-routing.md, decisions/readme.md, history/readme.md, log.md, index.md) cannot be deleted.",
|
|
279
|
+
inputSchema: zodToJsonSchema(deletePageInputSchema),
|
|
280
|
+
annotations: { title: "Delete Page", readOnlyHint: false, destructiveHint: true },
|
|
281
|
+
},
|
|
282
|
+
{
|
|
283
|
+
name: "batch_delete_pages",
|
|
284
|
+
description: "Archive-then-delete up to 50 wiki pages in one call. For each page, writes a recoverable archived_pages row before deleting from live storage/index. Set confirm=false (default) for a dry-run manifest. Set confirm=true to execute. Protected system pages are silently skipped.",
|
|
285
|
+
inputSchema: zodToJsonSchema(batchDeletePagesInputSchema),
|
|
286
|
+
annotations: { title: "Batch Delete Pages", readOnlyHint: false, destructiveHint: true },
|
|
287
|
+
},
|
|
288
|
+
{
|
|
289
|
+
name: "list_archived_pages",
|
|
290
|
+
description: "List archived_pages rows for the current user (id, original path/folder, deleted_at, deleted_by, reason, restore status). Use this to discover restore candidates.",
|
|
291
|
+
inputSchema: zodToJsonSchema(listArchivedPagesInputSchema),
|
|
292
|
+
annotations: { title: "List Archived Pages", readOnlyHint: true },
|
|
293
|
+
},
|
|
294
|
+
{
|
|
295
|
+
name: "restore_page",
|
|
296
|
+
description: "Restore a previously archived page by archiveId or originalPath (+ optional deletedAt). Recreates the page at original path or targetPath, re-indexes it, and stamps restored_at/restored_by on the archive row. Enforces page-limit checks.",
|
|
297
|
+
// Generate from the plain object, NOT the .refine()'d schema — a ZodEffects can
|
|
298
|
+
// serialize to an empty `{}` and break MCP tool-list validation. Runtime parse
|
|
299
|
+
// still uses restorePageInputSchema (with the OR constraint) below.
|
|
300
|
+
inputSchema: zodToJsonSchema(restorePageBaseSchema),
|
|
301
|
+
annotations: { title: "Restore Archived Page", readOnlyHint: false },
|
|
302
|
+
},
|
|
303
|
+
{
|
|
304
|
+
name: "set_webhook",
|
|
305
|
+
description: "Create or update an outbound webhook rule. The rule fires a signed POST to the target URL whenever a page matching one of its glob/regex patterns is created or updated. Omit 'id' to create a new rule; pass an existing 'id' to update it. Patterns use glob syntax (e.g. 'projects/brainsapp/open-loop-*.md') or /regex/ syntax.",
|
|
306
|
+
inputSchema: zodToJsonSchema(setWebhookInputSchema),
|
|
307
|
+
annotations: { title: "Set Webhook", readOnlyHint: false },
|
|
308
|
+
},
|
|
309
|
+
{
|
|
310
|
+
name: "list_webhooks",
|
|
311
|
+
description: "List all outbound webhook rules configured for the current user.",
|
|
312
|
+
inputSchema: zodToJsonSchema(listWebhooksInputSchema),
|
|
313
|
+
annotations: { title: "List Webhooks", readOnlyHint: true },
|
|
314
|
+
},
|
|
315
|
+
{
|
|
316
|
+
name: "remove_webhook",
|
|
317
|
+
description: "Permanently delete an outbound webhook rule by ID.",
|
|
318
|
+
inputSchema: zodToJsonSchema(removeWebhookInputSchema),
|
|
319
|
+
annotations: { title: "Remove Webhook", readOnlyHint: false, destructiveHint: true },
|
|
320
|
+
},
|
|
321
|
+
{
|
|
322
|
+
name: "add_webhook_pattern",
|
|
323
|
+
description: "Append a glob or regex pattern to an existing webhook rule's pattern list. Idempotent — adding a pattern that already exists is a no-op.",
|
|
324
|
+
inputSchema: zodToJsonSchema(addWebhookPatternInputSchema),
|
|
325
|
+
annotations: { title: "Add Webhook Pattern", readOnlyHint: false },
|
|
326
|
+
},
|
|
327
|
+
{
|
|
328
|
+
name: "list_page_history",
|
|
329
|
+
description: "List the version history for a wiki page. Returns snapshots captured before each update_page or patch_page call, newest-first. Use read_page_version to retrieve the content of a specific snapshot.",
|
|
330
|
+
inputSchema: zodToJsonSchema(listPageHistoryInputSchema),
|
|
331
|
+
annotations: { title: "List Page History", readOnlyHint: true },
|
|
332
|
+
},
|
|
333
|
+
{
|
|
334
|
+
name: "read_page_version",
|
|
335
|
+
description: "Read a specific historical snapshot of a wiki page. Use list_page_history to get the timestamp key, then call this tool to retrieve the full content of that version.",
|
|
336
|
+
inputSchema: zodToJsonSchema(readPageVersionInputSchema),
|
|
337
|
+
annotations: { title: "Read Page Version", readOnlyHint: true },
|
|
338
|
+
},
|
|
339
|
+
];
|
|
340
|
+
// Beta surface — the 15 tools exposed by default. Other tools are hidden unless
|
|
341
|
+
// BRAINS_EXPANDED_TOOLS=true is set (e.g. local dev, internal staging). Prod ships
|
|
342
|
+
// with no env override → only the beta surface is visible to agents.
|
|
343
|
+
const BETA_VISIBLE_TOOLS = new Set([
|
|
344
|
+
"list_pages",
|
|
345
|
+
"read_page",
|
|
346
|
+
"search_pages",
|
|
347
|
+
"create_page",
|
|
348
|
+
"create_pages",
|
|
349
|
+
"update_page",
|
|
350
|
+
"patch_page",
|
|
351
|
+
"move_page",
|
|
352
|
+
"append_log",
|
|
353
|
+
"health_check",
|
|
354
|
+
"pull_session_bundle",
|
|
355
|
+
"push_session_bundle",
|
|
356
|
+
"resolve_project",
|
|
357
|
+
"init_project",
|
|
358
|
+
"generate_claude_instructions",
|
|
359
|
+
"generate_gpt_instructions",
|
|
360
|
+
"set_webhook",
|
|
361
|
+
"list_webhooks",
|
|
362
|
+
"remove_webhook",
|
|
363
|
+
"add_webhook_pattern",
|
|
364
|
+
"export_wiki",
|
|
365
|
+
"import_wiki",
|
|
366
|
+
"purge_wiki",
|
|
367
|
+
"audit_index",
|
|
368
|
+
"delete_page",
|
|
369
|
+
"batch_delete_pages",
|
|
370
|
+
"list_archived_pages",
|
|
371
|
+
"restore_page",
|
|
372
|
+
"list_page_history",
|
|
373
|
+
"read_page_version",
|
|
374
|
+
]);
|
|
375
|
+
export class ToolNotAvailableError extends Error {
|
|
376
|
+
constructor(name) {
|
|
377
|
+
super(`Tool '${name}' is not available in this deployment. Set BRAINS_EXPANDED_TOOLS=true to enable the full tool surface.`);
|
|
378
|
+
this.name = "ToolNotAvailableError";
|
|
379
|
+
}
|
|
380
|
+
}
|
|
381
|
+
export function isExpandedToolsEnabled() {
|
|
382
|
+
return (process.env.BRAINS_EXPANDED_TOOLS ?? "").trim().toLowerCase() === "true";
|
|
383
|
+
}
|
|
384
|
+
export function isToolVisible(name) {
|
|
385
|
+
if (name === "read_governance_audit")
|
|
386
|
+
return isHiveModeEnabled();
|
|
387
|
+
if (isExpandedToolsEnabled())
|
|
388
|
+
return true;
|
|
389
|
+
return BETA_VISIBLE_TOOLS.has(name);
|
|
390
|
+
}
|
|
391
|
+
export function getVisibleTools() {
|
|
392
|
+
return TOOL_DEFINITIONS.filter((t) => isToolVisible(t.name));
|
|
393
|
+
}
|
|
394
|
+
export async function executeToolCall(drive, name, args, userId = "", accessCtx = DEFAULT_ACCESS_CONTEXT) {
|
|
395
|
+
// Internal-only tool: deliberately bypasses isToolVisible/TOOL_DEFINITIONS
|
|
396
|
+
// so it never appears in ListTools (public tool list / docs), but stays
|
|
397
|
+
// callable by name for agent-driven administration. See BRA-368.
|
|
398
|
+
if (name === "share_project") {
|
|
399
|
+
return await shareProject(shareProjectInputSchema.parse(args), userId, drive);
|
|
400
|
+
}
|
|
401
|
+
if (!isToolVisible(name)) {
|
|
402
|
+
throw new ToolNotAvailableError(name);
|
|
403
|
+
}
|
|
404
|
+
switch (name) {
|
|
405
|
+
case "list_pages":
|
|
406
|
+
return await listPages(drive, listPagesInputSchema.parse(args), userId, accessCtx);
|
|
407
|
+
case "read_page":
|
|
408
|
+
return await readPage(drive, readPageInputSchema.parse(args), userId, accessCtx);
|
|
409
|
+
case "search_pages":
|
|
410
|
+
return await searchPages(drive, searchPagesInputSchema.parse(args), userId, accessCtx);
|
|
411
|
+
case "create_page":
|
|
412
|
+
return await createPage(drive, createPageInputSchema.parse(args), userId);
|
|
413
|
+
case "create_pages":
|
|
414
|
+
return await createPages(drive, createPagesInputSchema.parse(args), userId);
|
|
415
|
+
case "import_brain_source":
|
|
416
|
+
return await importBrainSource(drive, importBrainSourceInputSchema.parse(args), userId);
|
|
417
|
+
case "export_wiki":
|
|
418
|
+
return await exportWiki(drive, exportWikiInputSchema.parse(args));
|
|
419
|
+
case "import_wiki":
|
|
420
|
+
return await importWikiZip(drive, importWikiZipInputSchema.parse(args), userId);
|
|
421
|
+
case "pull_session_bundle":
|
|
422
|
+
return await pullSessionBundle(drive, pullSessionBundleInputSchema.parse(args), userId, accessCtx);
|
|
423
|
+
case "push_session_bundle":
|
|
424
|
+
return await pushSessionBundle(drive, pushSessionBundleInputSchema.parse(args), userId);
|
|
425
|
+
case "purge_wiki":
|
|
426
|
+
return await purgeWiki(drive, purgeWikiInputSchema.parse(args), userId);
|
|
427
|
+
case "update_page":
|
|
428
|
+
return await updatePage(drive, updatePageInputSchema.parse(args), userId);
|
|
429
|
+
case "patch_page":
|
|
430
|
+
return await patchPage(drive, patchPageInputSchema.parse(args), userId);
|
|
431
|
+
case "move_page":
|
|
432
|
+
return await movePage(drive, movePageInputSchema.parse(args), userId);
|
|
433
|
+
case "append_log":
|
|
434
|
+
return await appendLog(drive, appendLogInputSchema.parse(args), userId);
|
|
435
|
+
case "health_check":
|
|
436
|
+
return await healthCheck(drive, userId);
|
|
437
|
+
case "generate_claude_instructions":
|
|
438
|
+
return await generateClaudeInstructions(generateClaudeInstructionsInputSchema.parse(args), drive, userId);
|
|
439
|
+
case "generate_gpt_instructions":
|
|
440
|
+
return await generateGptInstructions(generateGptInstructionsInputSchema.parse(args), drive, userId);
|
|
441
|
+
case "resolve_project":
|
|
442
|
+
return await resolveProject(drive, resolveProjectInputSchema.parse(args), userId);
|
|
443
|
+
case "init_project":
|
|
444
|
+
return await initProject(drive, initProjectInputSchema.parse(args), userId);
|
|
445
|
+
case "audit_index":
|
|
446
|
+
return await auditIndex(drive, auditIndexInputSchema.parse(args), userId);
|
|
447
|
+
case "read_governance_audit":
|
|
448
|
+
return await readGovernanceAudit(readGovernanceAuditInputSchema.parse(args), userId);
|
|
449
|
+
case "extract_links":
|
|
450
|
+
return await extractLinks(extractLinksInputSchema.parse(args), userId);
|
|
451
|
+
case "get_backlinks":
|
|
452
|
+
return await getBacklinks(getBacklinksInputSchema.parse(args), userId, accessCtx);
|
|
453
|
+
case "get_related":
|
|
454
|
+
return await getRelated(getRelatedInputSchema.parse(args), userId, accessCtx);
|
|
455
|
+
case "suggest_links":
|
|
456
|
+
return await suggestLinks(drive, suggestLinksInputSchema.parse(args), userId);
|
|
457
|
+
case "delete_page":
|
|
458
|
+
return await deletePage(drive, deletePageInputSchema.parse(args), userId);
|
|
459
|
+
case "batch_delete_pages":
|
|
460
|
+
return await batchDeletePages(drive, batchDeletePagesInputSchema.parse(args), userId);
|
|
461
|
+
case "list_archived_pages":
|
|
462
|
+
return await listArchivedPages(listArchivedPagesInputSchema.parse(args), userId);
|
|
463
|
+
case "restore_page":
|
|
464
|
+
return await restorePage(drive, restorePageInputSchema.parse(args), userId);
|
|
465
|
+
case "set_webhook":
|
|
466
|
+
return await setWebhook(setWebhookInputSchema.parse(args), userId);
|
|
467
|
+
case "list_webhooks":
|
|
468
|
+
return await listWebhooks(userId);
|
|
469
|
+
case "remove_webhook":
|
|
470
|
+
return await removeWebhook(removeWebhookInputSchema.parse(args), userId);
|
|
471
|
+
case "add_webhook_pattern":
|
|
472
|
+
return await addWebhookPattern(addWebhookPatternInputSchema.parse(args), userId);
|
|
473
|
+
case "list_page_history":
|
|
474
|
+
return await listPageHistory(drive, listPageHistoryInputSchema.parse(args));
|
|
475
|
+
case "read_page_version":
|
|
476
|
+
return await readPageVersion(drive, readPageVersionInputSchema.parse(args));
|
|
477
|
+
default:
|
|
478
|
+
throw new Error(`Unknown tool: ${name}`);
|
|
479
|
+
}
|
|
480
|
+
}
|
|
481
|
+
/**
|
|
482
|
+
* `driveOverride` may be a fixed StorageClient (legacy behavior — resolved
|
|
483
|
+
* once, reused for the server's lifetime) or a resolver function that is
|
|
484
|
+
* invoked fresh on every single tool call.
|
|
485
|
+
*
|
|
486
|
+
* Long-lived callers (e.g. an MCP session kept open over many requests) MUST
|
|
487
|
+
* pass a resolver, not a fixed client: baking in a snapshot means any access
|
|
488
|
+
* change that happens mid-session — most importantly a project-share grant
|
|
489
|
+
* revocation (BRA-368/BRA-377) — never takes effect until the session ends.
|
|
490
|
+
* Passing a plain StorageClient is only safe for genuinely single-request or
|
|
491
|
+
* single-process-lifetime contexts (e.g. the stdio CLI entrypoint).
|
|
492
|
+
*/
|
|
493
|
+
export function createBrainsServer(driveOverride, userId = "", userAccessLevel = 5) {
|
|
494
|
+
const server = new Server({ name: "brains", version: "0.1.0" }, { capabilities: { tools: {} } });
|
|
495
|
+
server.setRequestHandler(ListToolsRequestSchema, async () => ({
|
|
496
|
+
tools: getVisibleTools(),
|
|
497
|
+
}));
|
|
498
|
+
const accessCtx = { userAccessLevel };
|
|
499
|
+
server.setRequestHandler(CallToolRequestSchema, async (request) => {
|
|
500
|
+
const { name, arguments: args } = request.params;
|
|
501
|
+
try {
|
|
502
|
+
// Resolved inside the try: a resolver failure (e.g. the grant-lookup
|
|
503
|
+
// fetch erroring) must go through the same wrapDriveError handling as
|
|
504
|
+
// any other tool-execution failure, not bypass it as an unhandled
|
|
505
|
+
// rejection from the MCP transport's perspective.
|
|
506
|
+
const drive = typeof driveOverride === "function"
|
|
507
|
+
? await driveOverride()
|
|
508
|
+
: driveOverride ?? await getStorageClient();
|
|
509
|
+
const result = await executeToolCall(drive, name, args, userId, accessCtx);
|
|
510
|
+
return {
|
|
511
|
+
content: [{ type: "text", text: JSON.stringify(result, null, 2) }],
|
|
512
|
+
};
|
|
513
|
+
}
|
|
514
|
+
catch (err) {
|
|
515
|
+
if (err instanceof Error && err.message.startsWith("Unknown tool:")) {
|
|
516
|
+
return {
|
|
517
|
+
content: [{ type: "text", text: err.message }],
|
|
518
|
+
isError: true,
|
|
519
|
+
};
|
|
520
|
+
}
|
|
521
|
+
if (err instanceof z.ZodError) {
|
|
522
|
+
return {
|
|
523
|
+
content: [{ type: "text", text: `Invalid arguments: ${err.message}` }],
|
|
524
|
+
isError: true,
|
|
525
|
+
};
|
|
526
|
+
}
|
|
527
|
+
return wrapDriveError(err);
|
|
528
|
+
}
|
|
529
|
+
});
|
|
530
|
+
return server;
|
|
531
|
+
}
|
|
532
|
+
//# sourceMappingURL=server.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"server.js","sourceRoot":"","sources":["../src/server.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,53 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Combine an array of pages into a single bundle string.
|
|
3
|
+
* Each page is preceded by a delimiter line containing its name.
|
|
4
|
+
*/
|
|
5
|
+
export declare function serializeBundle(pages: Array<{
|
|
6
|
+
name: string;
|
|
7
|
+
content: string;
|
|
8
|
+
}>): string;
|
|
9
|
+
/**
|
|
10
|
+
* Build the self-describing header prepended to a pulled bundle.
|
|
11
|
+
*
|
|
12
|
+
* The working-set contract already exists in seed/instructions and in the
|
|
13
|
+
* generated per-project instructions ("Do NOT call read_page on pages already
|
|
14
|
+
* in the bundle"). It was not reaching agents: tool descriptions are in context
|
|
15
|
+
* on every turn, wiki instruction pages only if the client loaded them, and an
|
|
16
|
+
* MCP client such as Claude Code never does. Meanwhile read_page's own
|
|
17
|
+
* description prescribes a "REQUIRED" list_pages -> read_page workflow with no
|
|
18
|
+
* bundle carve-out, so the contradiction resolved in favour of re-reading —
|
|
19
|
+
* measured at 10.04s of individual reads versus 3.47s for the same ten pages
|
|
20
|
+
* bundled (GH #426).
|
|
21
|
+
*
|
|
22
|
+
* Stating the contract inside the payload makes it independent of client,
|
|
23
|
+
* loaded instructions and context trimming: it arrives with the data.
|
|
24
|
+
*
|
|
25
|
+
* The header deliberately lists page names in a plain indented list rather than
|
|
26
|
+
* as `===PAGE: name===` lines. push_session_bundle's manifest parser locates
|
|
27
|
+
* pages with indexOf on that exact delimiter, so repeating it here would let a
|
|
28
|
+
* header line shadow the real one. parseBundle ignores everything before the
|
|
29
|
+
* first delimiter, so both round-trip paths are unaffected.
|
|
30
|
+
*/
|
|
31
|
+
export declare function buildBundleHeader(pages: Array<{
|
|
32
|
+
name: string;
|
|
33
|
+
}>, options?: {
|
|
34
|
+
truncated?: boolean;
|
|
35
|
+
filter?: string;
|
|
36
|
+
totalMatching?: number;
|
|
37
|
+
/**
|
|
38
|
+
* Conventional project entry points (`readme.md`, `status.md`,
|
|
39
|
+
* `open-loops.md`, `index.md`) that matched the filter but did not fit.
|
|
40
|
+
* Named rather than counted: an agent cannot act on "20 of 132", but it can
|
|
41
|
+
* act on "status.md is missing" (GH #462).
|
|
42
|
+
*/
|
|
43
|
+
omittedConventional?: string[];
|
|
44
|
+
}): string;
|
|
45
|
+
/**
|
|
46
|
+
* Parse a bundle string back into named pages.
|
|
47
|
+
* Throws if the bundle contains no valid page delimiters.
|
|
48
|
+
*/
|
|
49
|
+
export declare function parseBundle(bundle: string): Array<{
|
|
50
|
+
name: string;
|
|
51
|
+
content: string;
|
|
52
|
+
}>;
|
|
53
|
+
//# sourceMappingURL=bundle.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"bundle.d.ts","sourceRoot":"","sources":["../../src/session/bundle.ts"],"names":[],"mappings":"AAEA;;;GAGG;AACH,wBAAgB,eAAe,CAAC,KAAK,EAAE,KAAK,CAAC;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,OAAO,EAAE,MAAM,CAAA;CAAE,CAAC,GAAG,MAAM,CAKvF;AAED;;;;;;;;;;;;;;;;;;;;;GAqBG;AACH,wBAAgB,iBAAiB,CAC/B,KAAK,EAAE,KAAK,CAAC;IAAE,IAAI,EAAE,MAAM,CAAA;CAAE,CAAC,EAC9B,OAAO,GAAE;IACP,SAAS,CAAC,EAAE,OAAO,CAAC;IACpB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB;;;;;OAKG;IACH,mBAAmB,CAAC,EAAE,MAAM,EAAE,CAAC;CAC3B,GACL,MAAM,CAgDR;AAED;;;GAGG;AACH,wBAAgB,WAAW,CAAC,MAAM,EAAE,MAAM,GAAG,KAAK,CAAC;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,OAAO,EAAE,MAAM,CAAA;CAAE,CAAC,CA4BpF"}
|