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
|
@@ -0,0 +1,97 @@
|
|
|
1
|
+
const DELIMITER_RE = /^===PAGE: (.+)===$/;
|
|
2
|
+
/**
|
|
3
|
+
* Combine an array of pages into a single bundle string.
|
|
4
|
+
* Each page is preceded by a delimiter line containing its name.
|
|
5
|
+
*/
|
|
6
|
+
export function serializeBundle(pages) {
|
|
7
|
+
if (pages.length === 0)
|
|
8
|
+
return "";
|
|
9
|
+
return pages
|
|
10
|
+
.map(({ name, content }) => `===PAGE: ${name}===\n${content}`)
|
|
11
|
+
.join("\n");
|
|
12
|
+
}
|
|
13
|
+
/**
|
|
14
|
+
* Build the self-describing header prepended to a pulled bundle.
|
|
15
|
+
*
|
|
16
|
+
* The working-set contract already exists in seed/instructions and in the
|
|
17
|
+
* generated per-project instructions ("Do NOT call read_page on pages already
|
|
18
|
+
* in the bundle"). It was not reaching agents: tool descriptions are in context
|
|
19
|
+
* on every turn, wiki instruction pages only if the client loaded them, and an
|
|
20
|
+
* MCP client such as Claude Code never does. Meanwhile read_page's own
|
|
21
|
+
* description prescribes a "REQUIRED" list_pages -> read_page workflow with no
|
|
22
|
+
* bundle carve-out, so the contradiction resolved in favour of re-reading —
|
|
23
|
+
* measured at 10.04s of individual reads versus 3.47s for the same ten pages
|
|
24
|
+
* bundled (GH #426).
|
|
25
|
+
*
|
|
26
|
+
* Stating the contract inside the payload makes it independent of client,
|
|
27
|
+
* loaded instructions and context trimming: it arrives with the data.
|
|
28
|
+
*
|
|
29
|
+
* The header deliberately lists page names in a plain indented list rather than
|
|
30
|
+
* as `===PAGE: name===` lines. push_session_bundle's manifest parser locates
|
|
31
|
+
* pages with indexOf on that exact delimiter, so repeating it here would let a
|
|
32
|
+
* header line shadow the real one. parseBundle ignores everything before the
|
|
33
|
+
* first delimiter, so both round-trip paths are unaffected.
|
|
34
|
+
*/
|
|
35
|
+
export function buildBundleHeader(pages, options = {}) {
|
|
36
|
+
if (pages.length === 0)
|
|
37
|
+
return "";
|
|
38
|
+
const lines = [
|
|
39
|
+
`===SESSION BUNDLE: ${pages.length} page${pages.length === 1 ? "" : "s"}===`,
|
|
40
|
+
"WORKING SET CONTRACT — the pages listed below are already included in full.",
|
|
41
|
+
"Do NOT call read_page on any of them; read their content from this bundle.",
|
|
42
|
+
"Edit in memory and write back with push_session_bundle at close-out.",
|
|
43
|
+
];
|
|
44
|
+
if (options.filter) {
|
|
45
|
+
const of = options.totalMatching !== undefined ? ` of ${options.totalMatching} matching` : "";
|
|
46
|
+
lines.push(`Selected by: ${options.filter} — ${pages.length}${of}.`);
|
|
47
|
+
}
|
|
48
|
+
lines.push("Pages included:", ...pages.map((p) => ` ${p.name}`));
|
|
49
|
+
if (options.truncated) {
|
|
50
|
+
lines.push("NOTE: more pages matched this filter than fit. Anything not listed above is", "NOT in this bundle — fetch the next slice via nextCursor, or read_page it.");
|
|
51
|
+
}
|
|
52
|
+
// The prohibition above is scoped to pages that ARE listed. Saying only that
|
|
53
|
+
// invites the opposite failure: a filter can under-match, and then a bundle
|
|
54
|
+
// that looks authoritative silently omits most of the project. That is not
|
|
55
|
+
// hypothetical — pull_session_bundle(tags:["cressida"]) once returned 1 of 6
|
|
56
|
+
// pages because the other five were untagged, and because everything matching
|
|
57
|
+
// did fit, nothing was marked truncated. An agent told "do not read_page"
|
|
58
|
+
// would have been steered away from the very calls that recovered the
|
|
59
|
+
// session. Absence from this list is never evidence a page does not exist.
|
|
60
|
+
if (options.omittedConventional && options.omittedConventional.length > 0) {
|
|
61
|
+
lines.push(`MISSING ENTRY POINT${options.omittedConventional.length === 1 ? "" : "S"}: ${options.omittedConventional.join(", ")}`, "matched this filter but did not fit. These are the pages a project's", "instructions treat as read-first. read_page them directly before treating", "this bundle as the project's current state.");
|
|
62
|
+
}
|
|
63
|
+
lines.push("If a page you expect is not listed, it did not match this filter — it may", "still exist. read_page it directly, or re-pull with a wider filter.");
|
|
64
|
+
lines.push("===END HEADER===", "");
|
|
65
|
+
return lines.join("\n");
|
|
66
|
+
}
|
|
67
|
+
/**
|
|
68
|
+
* Parse a bundle string back into named pages.
|
|
69
|
+
* Throws if the bundle contains no valid page delimiters.
|
|
70
|
+
*/
|
|
71
|
+
export function parseBundle(bundle) {
|
|
72
|
+
const lines = bundle.split("\n");
|
|
73
|
+
const pages = [];
|
|
74
|
+
let currentName = null;
|
|
75
|
+
const contentLines = [];
|
|
76
|
+
for (const line of lines) {
|
|
77
|
+
const match = DELIMITER_RE.exec(line);
|
|
78
|
+
if (match) {
|
|
79
|
+
if (currentName !== null) {
|
|
80
|
+
pages.push({ name: currentName, content: contentLines.join("\n").trim() });
|
|
81
|
+
contentLines.length = 0;
|
|
82
|
+
}
|
|
83
|
+
currentName = match[1].trim();
|
|
84
|
+
}
|
|
85
|
+
else if (currentName !== null) {
|
|
86
|
+
contentLines.push(line);
|
|
87
|
+
}
|
|
88
|
+
}
|
|
89
|
+
if (currentName !== null) {
|
|
90
|
+
pages.push({ name: currentName, content: contentLines.join("\n").trim() });
|
|
91
|
+
}
|
|
92
|
+
if (pages.length === 0) {
|
|
93
|
+
throw new Error("No valid page delimiters found in bundle");
|
|
94
|
+
}
|
|
95
|
+
return pages;
|
|
96
|
+
}
|
|
97
|
+
//# sourceMappingURL=bundle.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"bundle.js","sourceRoot":"","sources":["../../src/session/bundle.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,157 @@
|
|
|
1
|
+
import { DriveBackup } from "../backup/drive.js";
|
|
2
|
+
export interface WikiFile {
|
|
3
|
+
fileId: string;
|
|
4
|
+
name: string;
|
|
5
|
+
content: string;
|
|
6
|
+
revision: string;
|
|
7
|
+
modifiedTime: string;
|
|
8
|
+
}
|
|
9
|
+
export interface WriteResult {
|
|
10
|
+
fileId: string;
|
|
11
|
+
revision: string;
|
|
12
|
+
modifiedTime: string;
|
|
13
|
+
}
|
|
14
|
+
export interface FileEntry {
|
|
15
|
+
fileId: string;
|
|
16
|
+
name: string;
|
|
17
|
+
modifiedTime: string;
|
|
18
|
+
size: number;
|
|
19
|
+
}
|
|
20
|
+
export interface StorageClient {
|
|
21
|
+
listFiles(): Promise<FileEntry[]>;
|
|
22
|
+
readFile(name: string): Promise<WikiFile>;
|
|
23
|
+
createFile(name: string, content: string): Promise<WriteResult>;
|
|
24
|
+
updateFile(fileId: string, content: string, seenRevision: string): Promise<WriteResult>;
|
|
25
|
+
renameFile(fileId: string, newName: string): Promise<WriteResult>;
|
|
26
|
+
deleteFile(name: string): Promise<void>;
|
|
27
|
+
bootstrapWikiFiles(): Promise<void>;
|
|
28
|
+
verifyAccess(): Promise<void>;
|
|
29
|
+
getStorageLocation(): string;
|
|
30
|
+
/**
|
|
31
|
+
* Cheap existence probe. Exists so callers that only need "is this object
|
|
32
|
+
* there" do not download it — the scoped-client wipe check was pulling the
|
|
33
|
+
* whole of index.md (~200 KB on a large wiki) every 5 minutes per user just
|
|
34
|
+
* to answer this question (GH #412).
|
|
35
|
+
*/
|
|
36
|
+
fileExists(name: string): Promise<boolean>;
|
|
37
|
+
}
|
|
38
|
+
export declare class LocalClient implements StorageClient {
|
|
39
|
+
private readonly wikiDir;
|
|
40
|
+
private readonly backup;
|
|
41
|
+
constructor(wikiDir: string, backup?: DriveBackup | null);
|
|
42
|
+
getStorageLocation(): string;
|
|
43
|
+
verifyAccess(): Promise<void>;
|
|
44
|
+
fileExists(name: string): Promise<boolean>;
|
|
45
|
+
listFiles(): Promise<FileEntry[]>;
|
|
46
|
+
readFile(name: string): Promise<WikiFile>;
|
|
47
|
+
createFile(name: string, content: string): Promise<WriteResult>;
|
|
48
|
+
updateFile(fileId: string, content: string, seenRevision: string): Promise<WriteResult>;
|
|
49
|
+
renameFile(fileId: string, newName: string): Promise<WriteResult>;
|
|
50
|
+
deleteFile(name: string): Promise<void>;
|
|
51
|
+
bootstrapWikiFiles(): Promise<void>;
|
|
52
|
+
private assertSafePath;
|
|
53
|
+
private scheduleBackup;
|
|
54
|
+
private pruneEmptyParentDirs;
|
|
55
|
+
}
|
|
56
|
+
export declare class SupabaseStorageClient implements StorageClient {
|
|
57
|
+
private readonly supabaseUrl;
|
|
58
|
+
private readonly serviceRoleKey;
|
|
59
|
+
private readonly bucket;
|
|
60
|
+
private readonly prefix;
|
|
61
|
+
private readonly cacheLocation;
|
|
62
|
+
private readonly backup;
|
|
63
|
+
constructor(options: {
|
|
64
|
+
supabaseUrl: string;
|
|
65
|
+
serviceRoleKey: string;
|
|
66
|
+
bucket: string;
|
|
67
|
+
prefix?: string;
|
|
68
|
+
cacheLocation?: string;
|
|
69
|
+
backup?: DriveBackup | null;
|
|
70
|
+
});
|
|
71
|
+
withPrefix(additionalPrefix: string): SupabaseStorageClient;
|
|
72
|
+
getStorageLocation(): string;
|
|
73
|
+
verifyAccess(): Promise<void>;
|
|
74
|
+
listFiles(): Promise<FileEntry[]>;
|
|
75
|
+
/**
|
|
76
|
+
* HEAD the object rather than downloading it.
|
|
77
|
+
*
|
|
78
|
+
* Deliberately conservative: only a 404 is treated as "absent". Any other
|
|
79
|
+
* non-OK status falls back to a full read, because the sole caller uses this
|
|
80
|
+
* to detect an externally wiped wiki, and a false negative would trigger an
|
|
81
|
+
* unnecessary re-bootstrap and index backfill.
|
|
82
|
+
*/
|
|
83
|
+
fileExists(name: string): Promise<boolean>;
|
|
84
|
+
readFile(name: string): Promise<WikiFile>;
|
|
85
|
+
createFile(name: string, content: string): Promise<WriteResult>;
|
|
86
|
+
updateFile(fileId: string, content: string, seenRevision: string): Promise<WriteResult>;
|
|
87
|
+
renameFile(fileId: string, newName: string): Promise<WriteResult>;
|
|
88
|
+
deleteFile(name: string): Promise<void>;
|
|
89
|
+
bootstrapWikiFiles(): Promise<void>;
|
|
90
|
+
private authHeaders;
|
|
91
|
+
private objectPath;
|
|
92
|
+
private walkList;
|
|
93
|
+
private listObjects;
|
|
94
|
+
private uploadObject;
|
|
95
|
+
private deleteObject;
|
|
96
|
+
private pruneEmptyParentDirs;
|
|
97
|
+
private isDirectoryItem;
|
|
98
|
+
private parseModifiedTime;
|
|
99
|
+
private cacheKeySegment;
|
|
100
|
+
private sanitizeForCache;
|
|
101
|
+
private scheduleBackup;
|
|
102
|
+
}
|
|
103
|
+
export declare function getLocalClient(): Promise<LocalClient>;
|
|
104
|
+
export declare function getStorageClient(): Promise<StorageClient>;
|
|
105
|
+
export declare function createScopedStorageClient(baseClient: StorageClient, scopePrefix: string): StorageClient;
|
|
106
|
+
export interface ProjectGrantRoute {
|
|
107
|
+
/** Folder-prefix the grant covers, e.g. 'projects/5280' (no trailing slash). */
|
|
108
|
+
prefix: string;
|
|
109
|
+
/** Storage client scoped to the grant owner's own namespace root. */
|
|
110
|
+
client: StorageClient;
|
|
111
|
+
/** Supabase subject of the grant owner — the true owner for index-attribution purposes (BRA-381). */
|
|
112
|
+
ownerSubject: string;
|
|
113
|
+
}
|
|
114
|
+
export declare class GrantAwareStorageClient implements StorageClient {
|
|
115
|
+
private readonly ownClient;
|
|
116
|
+
private readonly grants;
|
|
117
|
+
private readonly ownSubject;
|
|
118
|
+
constructor(ownClient: StorageClient, grants: ProjectGrantRoute[], ownSubject: string);
|
|
119
|
+
private resolve;
|
|
120
|
+
/**
|
|
121
|
+
* The true storage-owner subject for `name` — the grant owner's subject if
|
|
122
|
+
* the path falls under an active grant, otherwise the requester's own
|
|
123
|
+
* subject. Search-index writes must attribute to this, not the raw
|
|
124
|
+
* authenticated actor, or an owner never sees a grantee's contributions
|
|
125
|
+
* via list_pages/search_pages (BRA-381).
|
|
126
|
+
*/
|
|
127
|
+
resolveOwnerSubject(name: string): string;
|
|
128
|
+
getStorageLocation(): string;
|
|
129
|
+
verifyAccess(): Promise<void>;
|
|
130
|
+
bootstrapWikiFiles(): Promise<void>;
|
|
131
|
+
fileExists(name: string): Promise<boolean>;
|
|
132
|
+
listFiles(): Promise<FileEntry[]>;
|
|
133
|
+
/**
|
|
134
|
+
* Own-namespace files only, excluding anything merged in from grants.
|
|
135
|
+
* audit_index compares this listing against `listAllPageNames(userId)`,
|
|
136
|
+
* which likewise only returns the actor's own index rows — the merged
|
|
137
|
+
* `listFiles()` would put grant-owner files on the Drive side with no
|
|
138
|
+
* counterpart on the index side, fabricating "unindexed" drift for shared
|
|
139
|
+
* pages the actor never actually owns (BRA-1857 / GH #453).
|
|
140
|
+
*/
|
|
141
|
+
listOwnFiles(): Promise<FileEntry[]>;
|
|
142
|
+
readFile(name: string): Promise<WikiFile>;
|
|
143
|
+
createFile(name: string, content: string): Promise<WriteResult>;
|
|
144
|
+
updateFile(fileId: string, content: string, seenRevision: string): Promise<WriteResult>;
|
|
145
|
+
renameFile(fileId: string, newName: string): Promise<WriteResult>;
|
|
146
|
+
deleteFile(name: string): Promise<void>;
|
|
147
|
+
}
|
|
148
|
+
/**
|
|
149
|
+
* Resolves the correct subject to attribute a Postgres search-index write to
|
|
150
|
+
* for `name`: the grant owner's subject when `drive` is grant-aware and
|
|
151
|
+
* `name` falls under an active grant, otherwise `actorUserId` unchanged.
|
|
152
|
+
* Use this — not the raw authenticated actor — for every index call
|
|
153
|
+
* (upsertPage, deletePage, fetchPageRow, syncPageLinks, etc.) so an owner can
|
|
154
|
+
* see a grantee's contributions via list_pages/search_pages (BRA-381).
|
|
155
|
+
*/
|
|
156
|
+
export declare function resolveIndexOwnerSubject(drive: StorageClient, name: string, actorUserId: string): string;
|
|
157
|
+
//# sourceMappingURL=client.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"client.d.ts","sourceRoot":"","sources":["../../src/storage/client.ts"],"names":[],"mappings":"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"}
|