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,210 @@
|
|
|
1
|
+
import { DriveNotFoundError } from "../drive/errors.js";
|
|
2
|
+
import { parsePage } from "../wiki/frontmatter.js";
|
|
3
|
+
import { listPages } from "./listPages.js";
|
|
4
|
+
export const DOMAIN_CONTEXT_START = "<!-- brains:domain-context start -->";
|
|
5
|
+
export const DOMAIN_CONTEXT_END = "<!-- brains:domain-context end -->";
|
|
6
|
+
/**
|
|
7
|
+
* Markers are matched by pattern, not by exact string.
|
|
8
|
+
*
|
|
9
|
+
* The first live refresh missed a real marked region because the marker had been
|
|
10
|
+
* annotated in place:
|
|
11
|
+
*
|
|
12
|
+
* <!-- brains:domain-context start — hand-written. Preserve verbatim. -->
|
|
13
|
+
*
|
|
14
|
+
* An exact `indexOf` does not see that, so the file fell through to the
|
|
15
|
+
* unmarked-rescue path, which recovered the content but wrapped it in a second
|
|
16
|
+
* set of markers — nesting one layer deeper on every refresh. Annotating a
|
|
17
|
+
* marker is the obvious thing to do to one, so matching has to allow it.
|
|
18
|
+
*/
|
|
19
|
+
const DOMAIN_CONTEXT_START_RE = /<!--\s*brains:domain-context\s+start\b[^>]*-->/;
|
|
20
|
+
const DOMAIN_CONTEXT_END_RE = /<!--\s*brains:domain-context\s+end\b[^>]*-->/;
|
|
21
|
+
/**
|
|
22
|
+
* Section headings the generators themselves emit, in either platform's block.
|
|
23
|
+
*
|
|
24
|
+
* Exported and covered by a test that renders every variant of both generators
|
|
25
|
+
* and asserts nothing it emits is missing here. That test is the point: a
|
|
26
|
+
* heading absent from this set is treated as hand-written and preserved, so a
|
|
27
|
+
* renamed or added generated section would silently start duplicating itself on
|
|
28
|
+
* every refresh. Three GPT headings were already missing when this was written.
|
|
29
|
+
*/
|
|
30
|
+
export const GENERATED_HEADINGS = new Set([
|
|
31
|
+
"activation gate",
|
|
32
|
+
"boot sequence",
|
|
33
|
+
"chat-init boot sequence",
|
|
34
|
+
"session mode",
|
|
35
|
+
"working set contract",
|
|
36
|
+
"working set contract (bundle mode)",
|
|
37
|
+
"project scope",
|
|
38
|
+
"write-back",
|
|
39
|
+
"write-back (mandatory after material work)",
|
|
40
|
+
"required write-back",
|
|
41
|
+
"close-out ritual",
|
|
42
|
+
"close-out",
|
|
43
|
+
"completion gate",
|
|
44
|
+
"end-of-task check",
|
|
45
|
+
"scope creep",
|
|
46
|
+
"api notes",
|
|
47
|
+
"write-back snippets",
|
|
48
|
+
"retrieval contract",
|
|
49
|
+
"source of truth",
|
|
50
|
+
"session start",
|
|
51
|
+
"guardrails",
|
|
52
|
+
]);
|
|
53
|
+
function emptyContext() {
|
|
54
|
+
return { exists: false, pageCount: 0, subdirs: [], subProjects: [], existingPaths: new Set() };
|
|
55
|
+
}
|
|
56
|
+
/**
|
|
57
|
+
* Pull the hand-written part of an existing instruction file forward.
|
|
58
|
+
*
|
|
59
|
+
* Explicit markers are the supported path. Without them the whole file is still
|
|
60
|
+
* inspected rather than discarded, because the alternative — silently dropping
|
|
61
|
+
* a project's channel voice, contacts and conventions on every refresh — is why
|
|
62
|
+
* nobody refreshes an instruction file and why they rot.
|
|
63
|
+
*/
|
|
64
|
+
export function extractPreservedRegion(content) {
|
|
65
|
+
const startMatch = DOMAIN_CONTEXT_START_RE.exec(content);
|
|
66
|
+
const endMatch = DOMAIN_CONTEXT_END_RE.exec(content);
|
|
67
|
+
if (startMatch && endMatch && endMatch.index > startMatch.index) {
|
|
68
|
+
const region = content.slice(startMatch.index, endMatch.index + endMatch[0].length).trim();
|
|
69
|
+
// Markers do not mean everything hand-written is inside them. A real file
|
|
70
|
+
// had `## Role` above the start marker and `## Related` below the end one,
|
|
71
|
+
// and preserving only the region silently deleted both — the same content
|
|
72
|
+
// loss this whole path exists to prevent, just narrower.
|
|
73
|
+
const outside = content.slice(0, startMatch.index) +
|
|
74
|
+
"\n" +
|
|
75
|
+
content.slice(endMatch.index + endMatch[0].length);
|
|
76
|
+
const stranded = rescueUnrecognizedSections(outside);
|
|
77
|
+
if (stranded === undefined)
|
|
78
|
+
return region;
|
|
79
|
+
// Folded inside the region rather than appended after it, so the next
|
|
80
|
+
// refresh finds everything in one place and takes the exact path.
|
|
81
|
+
const body = region.slice(0, region.lastIndexOf(endMatch[0])).trimEnd();
|
|
82
|
+
return [
|
|
83
|
+
body,
|
|
84
|
+
"",
|
|
85
|
+
"> Folded in on refresh: the section(s) below were hand-written but sat outside",
|
|
86
|
+
"> the markers, where a refresh would have dropped them. Left inside from now on.",
|
|
87
|
+
"",
|
|
88
|
+
stranded,
|
|
89
|
+
"",
|
|
90
|
+
DOMAIN_CONTEXT_END,
|
|
91
|
+
].join("\n");
|
|
92
|
+
}
|
|
93
|
+
const stranded = rescueUnrecognizedSections(content);
|
|
94
|
+
if (stranded === undefined)
|
|
95
|
+
return undefined;
|
|
96
|
+
return [
|
|
97
|
+
DOMAIN_CONTEXT_START,
|
|
98
|
+
"",
|
|
99
|
+
"> Carried forward from the previous instruction file, which had no preservation",
|
|
100
|
+
"> markers. Everything below was hand-written and is not reproducible by the",
|
|
101
|
+
"> generator. Check it still belongs, then leave the markers in place so the next",
|
|
102
|
+
"> refresh preserves it exactly.",
|
|
103
|
+
"",
|
|
104
|
+
stranded,
|
|
105
|
+
"",
|
|
106
|
+
DOMAIN_CONTEXT_END,
|
|
107
|
+
].join("\n");
|
|
108
|
+
}
|
|
109
|
+
/** Every `## ` section the generators do not themselves emit, verbatim. */
|
|
110
|
+
function rescueUnrecognizedSections(content) {
|
|
111
|
+
const lines = content.split("\n");
|
|
112
|
+
const kept = [];
|
|
113
|
+
let keeping = false;
|
|
114
|
+
for (const line of lines) {
|
|
115
|
+
const heading = /^##\s+(.+?)\s*$/.exec(line);
|
|
116
|
+
if (heading) {
|
|
117
|
+
const title = heading[1].replace(/[*`]/g, "").trim().toLowerCase();
|
|
118
|
+
keeping = !GENERATED_HEADINGS.has(title);
|
|
119
|
+
}
|
|
120
|
+
if (keeping)
|
|
121
|
+
kept.push(line);
|
|
122
|
+
}
|
|
123
|
+
const body = kept
|
|
124
|
+
.filter((line) => !DOMAIN_CONTEXT_START_RE.test(line) && !DOMAIN_CONTEXT_END_RE.test(line))
|
|
125
|
+
.join("\n")
|
|
126
|
+
.trim();
|
|
127
|
+
return body === "" ? undefined : body;
|
|
128
|
+
}
|
|
129
|
+
/**
|
|
130
|
+
* Read what the wiki actually contains for a project. Never throws: every lookup
|
|
131
|
+
* degrades to "unknown", and an unknown is rendered as "created on first use",
|
|
132
|
+
* which is the pre-existing behaviour.
|
|
133
|
+
*/
|
|
134
|
+
export async function gatherProjectContext(drive, slug, platform, candidatePaths, userId = "") {
|
|
135
|
+
const folder = `projects/${slug}`;
|
|
136
|
+
const ctx = emptyContext();
|
|
137
|
+
// Read directly from storage rather than gating on the indexed listing
|
|
138
|
+
// below. createPage's Postgres index write is fire-and-forget, so a
|
|
139
|
+
// generate call fired moments after a create_page for this exact path can
|
|
140
|
+
// land inside the index-lag window — including the brand-new-project case,
|
|
141
|
+
// where the indexed list is still empty and would otherwise short-circuit
|
|
142
|
+
// this function before the instruction file is ever looked at. Skipping
|
|
143
|
+
// this read silently drops hand-written content behind the preserve
|
|
144
|
+
// markers (GH #475).
|
|
145
|
+
const instructionPath = `${folder}/instructions/${platform}.md`;
|
|
146
|
+
try {
|
|
147
|
+
const file = await drive.readFile(instructionPath);
|
|
148
|
+
ctx.existingPaths.add(instructionPath);
|
|
149
|
+
ctx.preservedRegion = extractPreservedRegion(file.content);
|
|
150
|
+
}
|
|
151
|
+
catch (err) {
|
|
152
|
+
// Absence is fine — nothing to preserve. Anything else means the file
|
|
153
|
+
// may exist with hand-written content we failed to read; regenerating
|
|
154
|
+
// in that case would silently overwrite it (GH #480). Let it propagate.
|
|
155
|
+
if (!(err instanceof DriveNotFoundError))
|
|
156
|
+
throw err;
|
|
157
|
+
}
|
|
158
|
+
let names = [];
|
|
159
|
+
try {
|
|
160
|
+
const result = (await listPages(drive, { folder, compact: true, limit: 500, offset: 0 }, userId));
|
|
161
|
+
names = (result.pages ?? []).map((p) => p.name);
|
|
162
|
+
}
|
|
163
|
+
catch {
|
|
164
|
+
return ctx;
|
|
165
|
+
}
|
|
166
|
+
if (names.length === 0)
|
|
167
|
+
return ctx;
|
|
168
|
+
ctx.exists = true;
|
|
169
|
+
ctx.pageCount = names.length;
|
|
170
|
+
const prefix = `${folder}/`;
|
|
171
|
+
const subdirs = new Set();
|
|
172
|
+
const subProjects = new Set();
|
|
173
|
+
for (const name of names) {
|
|
174
|
+
if (!name.startsWith(prefix))
|
|
175
|
+
continue;
|
|
176
|
+
const rest = name.slice(prefix.length);
|
|
177
|
+
const parts = rest.split("/");
|
|
178
|
+
if (parts.length < 2)
|
|
179
|
+
continue;
|
|
180
|
+
if (parts[0] === "projects" && parts.length >= 3) {
|
|
181
|
+
subProjects.add(`${slug}/${parts[1]}`);
|
|
182
|
+
continue;
|
|
183
|
+
}
|
|
184
|
+
subdirs.add(parts[0]);
|
|
185
|
+
}
|
|
186
|
+
ctx.subdirs = [...subdirs].sort();
|
|
187
|
+
ctx.subProjects = [...subProjects].sort();
|
|
188
|
+
const present = new Set(names);
|
|
189
|
+
for (const candidate of candidatePaths) {
|
|
190
|
+
if (present.has(candidate))
|
|
191
|
+
ctx.existingPaths.add(candidate);
|
|
192
|
+
}
|
|
193
|
+
// A declared filing system changes which layout the project is audited
|
|
194
|
+
// against, so an Operator write-back table would be actively wrong for it.
|
|
195
|
+
const readmePath = `${folder}/readme.md`;
|
|
196
|
+
if (present.has(readmePath)) {
|
|
197
|
+
try {
|
|
198
|
+
const file = await drive.readFile(readmePath);
|
|
199
|
+
const filing = parsePage(file.content).frontmatter.filing;
|
|
200
|
+
if (typeof filing === "string" && filing.trim() !== "" && filing.trim() !== "operator") {
|
|
201
|
+
ctx.filing = filing.trim();
|
|
202
|
+
}
|
|
203
|
+
}
|
|
204
|
+
catch {
|
|
205
|
+
/* frontmatter is advisory here — a failed read just means no override */
|
|
206
|
+
}
|
|
207
|
+
}
|
|
208
|
+
return ctx;
|
|
209
|
+
}
|
|
210
|
+
//# sourceMappingURL=instructionContext.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"instructionContext.js","sourceRoot":"","sources":["../../src/tools/instructionContext.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
import { z } from "zod";
|
|
2
|
+
export declare const listArchivedPagesInputSchema: z.ZodObject<{
|
|
3
|
+
limit: z.ZodDefault<z.ZodNumber>;
|
|
4
|
+
includeRestored: z.ZodDefault<z.ZodBoolean>;
|
|
5
|
+
originalPath: z.ZodOptional<z.ZodString>;
|
|
6
|
+
}, "strip", z.ZodTypeAny, {
|
|
7
|
+
limit: number;
|
|
8
|
+
includeRestored: boolean;
|
|
9
|
+
originalPath?: string | undefined;
|
|
10
|
+
}, {
|
|
11
|
+
limit?: number | undefined;
|
|
12
|
+
originalPath?: string | undefined;
|
|
13
|
+
includeRestored?: boolean | undefined;
|
|
14
|
+
}>;
|
|
15
|
+
export type ListArchivedPagesInput = z.infer<typeof listArchivedPagesInputSchema>;
|
|
16
|
+
export declare function listArchivedPages(input: ListArchivedPagesInput, userId?: string): Promise<object>;
|
|
17
|
+
//# sourceMappingURL=listArchivedPages.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"listArchivedPages.d.ts","sourceRoot":"","sources":["../../src/tools/listArchivedPages.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAGxB,eAAO,MAAM,4BAA4B;;;;;;;;;;;;EAgBvC,CAAC;AAEH,MAAM,MAAM,sBAAsB,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,4BAA4B,CAAC,CAAC;AAElF,wBAAsB,iBAAiB,CACrC,KAAK,EAAE,sBAAsB,EAC7B,MAAM,SAAK,GACV,OAAO,CAAC,MAAM,CAAC,CAgCjB"}
|
|
@@ -0,0 +1,51 @@
|
|
|
1
|
+
import { z } from "zod";
|
|
2
|
+
import { getPostgresSearchIndex } from "../search/postgresIndex.js";
|
|
3
|
+
export const listArchivedPagesInputSchema = z.object({
|
|
4
|
+
limit: z
|
|
5
|
+
.number()
|
|
6
|
+
.int()
|
|
7
|
+
.min(1)
|
|
8
|
+
.max(200)
|
|
9
|
+
.default(50)
|
|
10
|
+
.describe("Maximum number of archived pages to return (1-200, default 50)."),
|
|
11
|
+
includeRestored: z
|
|
12
|
+
.boolean()
|
|
13
|
+
.default(false)
|
|
14
|
+
.describe("When true, include entries that were already restored."),
|
|
15
|
+
originalPath: z
|
|
16
|
+
.string()
|
|
17
|
+
.optional()
|
|
18
|
+
.describe("Optional exact original path filter (e.g. 'projects/topic.md')."),
|
|
19
|
+
});
|
|
20
|
+
export async function listArchivedPages(input, userId = "") {
|
|
21
|
+
const pgIndex = getPostgresSearchIndex();
|
|
22
|
+
if (!pgIndex.isConfigured()) {
|
|
23
|
+
return {
|
|
24
|
+
ok: false,
|
|
25
|
+
error: "Postgres archive store not configured. Set SUPABASE_URL and SUPABASE_SERVICE_ROLE_KEY.",
|
|
26
|
+
};
|
|
27
|
+
}
|
|
28
|
+
if (!userId) {
|
|
29
|
+
return { ok: false, error: "userId is required to list archived pages." };
|
|
30
|
+
}
|
|
31
|
+
const rows = await pgIndex.listArchivedPages({
|
|
32
|
+
userId,
|
|
33
|
+
limit: input.limit,
|
|
34
|
+
includeRestored: input.includeRestored,
|
|
35
|
+
...(input.originalPath ? { originalPath: input.originalPath } : {}),
|
|
36
|
+
});
|
|
37
|
+
return {
|
|
38
|
+
ok: true,
|
|
39
|
+
archivedCount: rows.length,
|
|
40
|
+
archived: rows.map((row) => ({
|
|
41
|
+
id: row.id,
|
|
42
|
+
originalPath: row.originalPath,
|
|
43
|
+
originalFolder: row.originalFolder,
|
|
44
|
+
deletedAt: row.deletedAt,
|
|
45
|
+
deletedBy: row.deletedBy,
|
|
46
|
+
reason: row.reason,
|
|
47
|
+
...(row.restoredAt ? { restoredAt: row.restoredAt, restoredBy: row.restoredBy } : {}),
|
|
48
|
+
})),
|
|
49
|
+
};
|
|
50
|
+
}
|
|
51
|
+
//# sourceMappingURL=listArchivedPages.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"listArchivedPages.js","sourceRoot":"","sources":["../../src/tools/listArchivedPages.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AACxB,OAAO,EAAE,sBAAsB,EAAE,MAAM,4BAA4B,CAAC;AAEpE,MAAM,CAAC,MAAM,4BAA4B,GAAG,CAAC,CAAC,MAAM,CAAC;IACnD,KAAK,EAAE,CAAC;SACL,MAAM,EAAE;SACR,GAAG,EAAE;SACL,GAAG,CAAC,CAAC,CAAC;SACN,GAAG,CAAC,GAAG,CAAC;SACR,OAAO,CAAC,EAAE,CAAC;SACX,QAAQ,CAAC,iEAAiE,CAAC;IAC9E,eAAe,EAAE,CAAC;SACf,OAAO,EAAE;SACT,OAAO,CAAC,KAAK,CAAC;SACd,QAAQ,CAAC,wDAAwD,CAAC;IACrE,YAAY,EAAE,CAAC;SACZ,MAAM,EAAE;SACR,QAAQ,EAAE;SACV,QAAQ,CAAC,iEAAiE,CAAC;CAC/E,CAAC,CAAC;AAIH,MAAM,CAAC,KAAK,UAAU,iBAAiB,CACrC,KAA6B,EAC7B,MAAM,GAAG,EAAE;IAEX,MAAM,OAAO,GAAG,sBAAsB,EAAE,CAAC;IACzC,IAAI,CAAC,OAAO,CAAC,YAAY,EAAE,EAAE,CAAC;QAC5B,OAAO;YACL,EAAE,EAAE,KAAK;YACT,KAAK,EAAE,wFAAwF;SAChG,CAAC;IACJ,CAAC;IACD,IAAI,CAAC,MAAM,EAAE,CAAC;QACZ,OAAO,EAAE,EAAE,EAAE,KAAK,EAAE,KAAK,EAAE,4CAA4C,EAAE,CAAC;IAC5E,CAAC;IAED,MAAM,IAAI,GAAG,MAAM,OAAO,CAAC,iBAAiB,CAAC;QAC3C,MAAM;QACN,KAAK,EAAE,KAAK,CAAC,KAAK;QAClB,eAAe,EAAE,KAAK,CAAC,eAAe;QACtC,GAAG,CAAC,KAAK,CAAC,YAAY,CAAC,CAAC,CAAC,EAAE,YAAY,EAAE,KAAK,CAAC,YAAY,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;KACpE,CAAC,CAAC;IAEH,OAAO;QACL,EAAE,EAAE,IAAI;QACR,aAAa,EAAE,IAAI,CAAC,MAAM;QAC1B,QAAQ,EAAE,IAAI,CAAC,GAAG,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,CAAC;YAC3B,EAAE,EAAE,GAAG,CAAC,EAAE;YACV,YAAY,EAAE,GAAG,CAAC,YAAY;YAC9B,cAAc,EAAE,GAAG,CAAC,cAAc;YAClC,SAAS,EAAE,GAAG,CAAC,SAAS;YACxB,SAAS,EAAE,GAAG,CAAC,SAAS;YACxB,MAAM,EAAE,GAAG,CAAC,MAAM;YAClB,GAAG,CAAC,GAAG,CAAC,UAAU,CAAC,CAAC,CAAC,EAAE,UAAU,EAAE,GAAG,CAAC,UAAU,EAAE,UAAU,EAAE,GAAG,CAAC,UAAU,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;SACtF,CAAC,CAAC;KACJ,CAAC;AACJ,CAAC"}
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
import { z } from "zod";
|
|
2
|
+
import type { StorageClient } from "../storage/client.js";
|
|
3
|
+
import { type AccessContext } from "../governance/accessControl.js";
|
|
4
|
+
export declare const listPagesInputSchema: z.ZodObject<{
|
|
5
|
+
tag: z.ZodOptional<z.ZodString>;
|
|
6
|
+
status: z.ZodOptional<z.ZodEnum<["active", "archived", "draft"]>>;
|
|
7
|
+
folder: z.ZodOptional<z.ZodString>;
|
|
8
|
+
compact: z.ZodOptional<z.ZodBoolean>;
|
|
9
|
+
limit: z.ZodDefault<z.ZodNumber>;
|
|
10
|
+
offset: z.ZodDefault<z.ZodNumber>;
|
|
11
|
+
}, "strip", z.ZodTypeAny, {
|
|
12
|
+
limit: number;
|
|
13
|
+
offset: number;
|
|
14
|
+
status?: "active" | "archived" | "draft" | undefined;
|
|
15
|
+
tag?: string | undefined;
|
|
16
|
+
folder?: string | undefined;
|
|
17
|
+
compact?: boolean | undefined;
|
|
18
|
+
}, {
|
|
19
|
+
status?: "active" | "archived" | "draft" | undefined;
|
|
20
|
+
limit?: number | undefined;
|
|
21
|
+
offset?: number | undefined;
|
|
22
|
+
tag?: string | undefined;
|
|
23
|
+
folder?: string | undefined;
|
|
24
|
+
compact?: boolean | undefined;
|
|
25
|
+
}>;
|
|
26
|
+
export type ListPagesInput = z.infer<typeof listPagesInputSchema>;
|
|
27
|
+
export declare function listPages(drive: StorageClient, input: ListPagesInput, userId?: string, accessCtx?: AccessContext): Promise<object>;
|
|
28
|
+
//# sourceMappingURL=listPages.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"listPages.d.ts","sourceRoot":"","sources":["../../src/tools/listPages.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AACxB,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,sBAAsB,CAAC;AAI1D,OAAO,EACL,KAAK,aAAa,EAOnB,MAAM,gCAAgC,CAAC;AAExC,eAAO,MAAM,oBAAoB;;;;;;;;;;;;;;;;;;;;;EAgC/B,CAAC;AAEH,MAAM,MAAM,cAAc,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,oBAAoB,CAAC,CAAC;AAIlE,wBAAsB,SAAS,CAC7B,KAAK,EAAE,aAAa,EACpB,KAAK,EAAE,cAAc,EACrB,MAAM,SAAK,EACX,SAAS,GAAE,aAAsC,GAChD,OAAO,CAAC,MAAM,CAAC,CA6BjB"}
|
|
@@ -0,0 +1,166 @@
|
|
|
1
|
+
import { z } from "zod";
|
|
2
|
+
import { parsePage } from "../wiki/frontmatter.js";
|
|
3
|
+
import { getPostgresSearchIndex } from "../search/postgresIndex.js";
|
|
4
|
+
import { listActiveGrantsForGrantee } from "../access/projectShares.js";
|
|
5
|
+
import { DEFAULT_ACCESS_CONTEXT, isHiveModeEnabled, parseAccessLevel, parseAudience, pagePassesFilter, writeGovernanceAuditEntry, } from "../governance/accessControl.js";
|
|
6
|
+
export const listPagesInputSchema = z.object({
|
|
7
|
+
tag: z.string().optional().describe("Filter by tag (optional)"),
|
|
8
|
+
status: z
|
|
9
|
+
.enum(["active", "archived", "draft"])
|
|
10
|
+
.optional()
|
|
11
|
+
.describe("Filter by page status (optional)"),
|
|
12
|
+
folder: z
|
|
13
|
+
.string()
|
|
14
|
+
.optional()
|
|
15
|
+
.describe("Restrict results to pages under this folder prefix (without trailing slash), e.g. 'projects/brainsapp'. " +
|
|
16
|
+
"For keyword-based subsets (find pages about X), use search_pages instead — list_pages only filters by tag/status/folder."),
|
|
17
|
+
compact: z
|
|
18
|
+
.boolean()
|
|
19
|
+
.optional()
|
|
20
|
+
.describe("When true, returns only name and modified — skips full frontmatter parsing. Use for fast inventory or when the full list would exceed token limits."),
|
|
21
|
+
limit: z
|
|
22
|
+
.coerce
|
|
23
|
+
.number()
|
|
24
|
+
.int()
|
|
25
|
+
.min(1)
|
|
26
|
+
.max(500)
|
|
27
|
+
.default(100)
|
|
28
|
+
.describe("Max pages to return. Defaults to 100 — raise for bulk export/audit use cases, up to 500."),
|
|
29
|
+
offset: z
|
|
30
|
+
.coerce
|
|
31
|
+
.number()
|
|
32
|
+
.int()
|
|
33
|
+
.min(0)
|
|
34
|
+
.default(0)
|
|
35
|
+
.describe("Pages to skip, for paging through results beyond `limit`."),
|
|
36
|
+
});
|
|
37
|
+
export async function listPages(drive, input, userId = "", accessCtx = DEFAULT_ACCESS_CONTEXT) {
|
|
38
|
+
// Callers that go through executeToolCall get limit/offset defaults from
|
|
39
|
+
// listPagesInputSchema.parse(). Direct callers (tests, other internal code)
|
|
40
|
+
// may pass a bare object that skips Zod's default() — normalize here so the
|
|
41
|
+
// rest of this module never has to special-case undefined.
|
|
42
|
+
const normalizedInput = {
|
|
43
|
+
...input,
|
|
44
|
+
limit: input.limit ?? 100,
|
|
45
|
+
offset: input.offset ?? 0,
|
|
46
|
+
};
|
|
47
|
+
// Use Postgres index for fast SQL listing when available.
|
|
48
|
+
// Auto-selected when STORAGE_BACKEND=supabase; override with SEARCH_BACKEND=sqlite or scan.
|
|
49
|
+
const searchBackend = (process.env.SEARCH_BACKEND ?? "").toLowerCase();
|
|
50
|
+
const storageBackend = (process.env.STORAGE_BACKEND ?? "local").toLowerCase();
|
|
51
|
+
const usePostgres = storageBackend === "supabase" &&
|
|
52
|
+
searchBackend !== "sqlite" &&
|
|
53
|
+
searchBackend !== "scan";
|
|
54
|
+
if (usePostgres) {
|
|
55
|
+
return listPagesFromPostgres(normalizedInput, userId, accessCtx);
|
|
56
|
+
}
|
|
57
|
+
if (normalizedInput.compact) {
|
|
58
|
+
return listPagesCompactFromStorage(drive, normalizedInput);
|
|
59
|
+
}
|
|
60
|
+
return listPagesFromStorage(drive, normalizedInput, userId, accessCtx);
|
|
61
|
+
}
|
|
62
|
+
async function listPagesFromPostgres(input, userId = "", accessCtx = DEFAULT_ACCESS_CONTEXT) {
|
|
63
|
+
const index = getPostgresSearchIndex();
|
|
64
|
+
const accessLevel = isHiveModeEnabled() ? accessCtx.userAccessLevel : undefined;
|
|
65
|
+
const grants = userId ? await listActiveGrantsForGrantee(userId).catch(() => []) : [];
|
|
66
|
+
const grantScopes = grants.map((g) => ({ userId: g.owner_subject, folder: g.project_path }));
|
|
67
|
+
// Over-fetch by one so we can report hasMore without a separate count query.
|
|
68
|
+
const rows = await index.listPages({
|
|
69
|
+
tag: input.tag,
|
|
70
|
+
status: input.status,
|
|
71
|
+
folder: input.folder,
|
|
72
|
+
userId,
|
|
73
|
+
accessLevel,
|
|
74
|
+
compact: input.compact,
|
|
75
|
+
grantScopes,
|
|
76
|
+
limit: input.limit + 1,
|
|
77
|
+
offset: input.offset,
|
|
78
|
+
});
|
|
79
|
+
// Exclude system files
|
|
80
|
+
const allPages = rows.filter((r) => r.name !== "index.md" && r.name !== "log.md");
|
|
81
|
+
const hasMore = allPages.length > input.limit;
|
|
82
|
+
const pages = hasMore ? allPages.slice(0, input.limit) : allPages;
|
|
83
|
+
const paging = { limit: input.limit, offset: input.offset, hasMore };
|
|
84
|
+
if (input.compact) {
|
|
85
|
+
const compact = pages.map((r) => ({ name: r.name, modified: r.modified, ...(r.revision ? { revision: r.revision } : {}) }));
|
|
86
|
+
return { pages: compact, count: compact.length, backend: "postgres", ...paging };
|
|
87
|
+
}
|
|
88
|
+
return { pages, count: pages.length, backend: "postgres", ...paging };
|
|
89
|
+
}
|
|
90
|
+
async function listPagesFromStorage(drive, input, userId = "", accessCtx = DEFAULT_ACCESS_CONTEXT) {
|
|
91
|
+
const files = await drive.listFiles();
|
|
92
|
+
const pages = [];
|
|
93
|
+
const hiveActive = isHiveModeEnabled();
|
|
94
|
+
for (const file of files) {
|
|
95
|
+
// Skip system files and version-history snapshots
|
|
96
|
+
if (file.name === "index.md" || file.name === "log.md")
|
|
97
|
+
continue;
|
|
98
|
+
if (file.name.startsWith("page-versions/"))
|
|
99
|
+
continue;
|
|
100
|
+
if (!file.name.endsWith(".md"))
|
|
101
|
+
continue;
|
|
102
|
+
if (input.folder && !file.name.startsWith(`${input.folder}/`))
|
|
103
|
+
continue;
|
|
104
|
+
try {
|
|
105
|
+
const driveFile = await drive.readFile(file.name);
|
|
106
|
+
const { frontmatter, warnings } = parsePage(driveFile.content);
|
|
107
|
+
if (input.status && frontmatter.status !== input.status)
|
|
108
|
+
continue;
|
|
109
|
+
if (input.tag &&
|
|
110
|
+
!frontmatter.tags?.includes(input.tag))
|
|
111
|
+
continue;
|
|
112
|
+
if (hiveActive) {
|
|
113
|
+
const pageLevel = parseAccessLevel(frontmatter.access_level);
|
|
114
|
+
const pageAudience = parseAudience(frontmatter.audience);
|
|
115
|
+
if (!pagePassesFilter(pageLevel, pageAudience, accessCtx.userAccessLevel, accessCtx.sessionAudience)) {
|
|
116
|
+
writeGovernanceAuditEntry(userId, file.name, pageLevel, accessCtx.userAccessLevel, accessCtx.sessionAudience, pageLevel > accessCtx.userAccessLevel ? "access_level_exceeded" : "audience_mismatch");
|
|
117
|
+
continue;
|
|
118
|
+
}
|
|
119
|
+
}
|
|
120
|
+
pages.push({
|
|
121
|
+
name: file.name,
|
|
122
|
+
title: frontmatter.title ?? file.name,
|
|
123
|
+
summary: String(frontmatter.summary ?? ""),
|
|
124
|
+
updated: String(frontmatter.updated ?? ""),
|
|
125
|
+
status: String(frontmatter.status ?? "active"),
|
|
126
|
+
tags: frontmatter.tags ?? [],
|
|
127
|
+
created: String(frontmatter.created ?? driveFile.modifiedTime),
|
|
128
|
+
modified: driveFile.modifiedTime,
|
|
129
|
+
});
|
|
130
|
+
if (warnings.length > 0) {
|
|
131
|
+
// Soft warnings are embedded in the response, not thrown
|
|
132
|
+
pages[pages.length - 1] = {
|
|
133
|
+
...pages[pages.length - 1],
|
|
134
|
+
...{ _warnings: warnings.map((w) => `${w.field}: ${w.message}`) },
|
|
135
|
+
};
|
|
136
|
+
}
|
|
137
|
+
}
|
|
138
|
+
catch {
|
|
139
|
+
// If a file can't be parsed, include it with minimal metadata
|
|
140
|
+
pages.push({
|
|
141
|
+
name: file.name,
|
|
142
|
+
title: file.name,
|
|
143
|
+
summary: "(unreadable)",
|
|
144
|
+
updated: file.modifiedTime,
|
|
145
|
+
status: "unknown",
|
|
146
|
+
tags: [],
|
|
147
|
+
created: "",
|
|
148
|
+
modified: file.modifiedTime,
|
|
149
|
+
});
|
|
150
|
+
}
|
|
151
|
+
}
|
|
152
|
+
const hasMore = pages.length > input.offset + input.limit;
|
|
153
|
+
const paged = pages.slice(input.offset, input.offset + input.limit);
|
|
154
|
+
return { pages: paged, count: paged.length, limit: input.limit, offset: input.offset, hasMore };
|
|
155
|
+
}
|
|
156
|
+
async function listPagesCompactFromStorage(drive, input) {
|
|
157
|
+
const files = await drive.listFiles();
|
|
158
|
+
const pages = files
|
|
159
|
+
.filter((f) => f.name !== "index.md" && f.name !== "log.md" && !f.name.startsWith("page-versions/") && f.name.endsWith(".md"))
|
|
160
|
+
.filter((f) => !input.folder || f.name.startsWith(`${input.folder}/`))
|
|
161
|
+
.map((f) => ({ name: f.name, modified: f.modifiedTime }));
|
|
162
|
+
const hasMore = pages.length > input.offset + input.limit;
|
|
163
|
+
const paged = pages.slice(input.offset, input.offset + input.limit);
|
|
164
|
+
return { pages: paged, count: paged.length, limit: input.limit, offset: input.offset, hasMore };
|
|
165
|
+
}
|
|
166
|
+
//# sourceMappingURL=listPages.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"listPages.js","sourceRoot":"","sources":["../../src/tools/listPages.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
import { z } from "zod";
|
|
2
|
+
import { type WebhookRule } from "../webhooks/webhookRules.js";
|
|
3
|
+
export declare const listWebhooksInputSchema: z.ZodObject<{}, "strip", z.ZodTypeAny, {}, {}>;
|
|
4
|
+
export declare function listWebhooks(userId: string): Promise<{
|
|
5
|
+
rules: WebhookRule[];
|
|
6
|
+
}>;
|
|
7
|
+
//# sourceMappingURL=listWebhooks.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"listWebhooks.d.ts","sourceRoot":"","sources":["../../src/tools/listWebhooks.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AACxB,OAAO,EAAoB,KAAK,WAAW,EAAE,MAAM,6BAA6B,CAAC;AAEjF,eAAO,MAAM,uBAAuB,gDAAe,CAAC;AAEpD,wBAAsB,YAAY,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC;IAAE,KAAK,EAAE,WAAW,EAAE,CAAA;CAAE,CAAC,CAIpF"}
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
import { z } from "zod";
|
|
2
|
+
import { listWebhookRules } from "../webhooks/webhookRules.js";
|
|
3
|
+
export const listWebhooksInputSchema = z.object({});
|
|
4
|
+
export async function listWebhooks(userId) {
|
|
5
|
+
if (!userId)
|
|
6
|
+
return { rules: [] };
|
|
7
|
+
const rules = await listWebhookRules(userId);
|
|
8
|
+
return { rules };
|
|
9
|
+
}
|
|
10
|
+
//# sourceMappingURL=listWebhooks.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"listWebhooks.js","sourceRoot":"","sources":["../../src/tools/listWebhooks.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AACxB,OAAO,EAAE,gBAAgB,EAAoB,MAAM,6BAA6B,CAAC;AAEjF,MAAM,CAAC,MAAM,uBAAuB,GAAG,CAAC,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC;AAEpD,MAAM,CAAC,KAAK,UAAU,YAAY,CAAC,MAAc;IAC/C,IAAI,CAAC,MAAM;QAAE,OAAO,EAAE,KAAK,EAAE,EAAE,EAAE,CAAC;IAClC,MAAM,KAAK,GAAG,MAAM,gBAAgB,CAAC,MAAM,CAAC,CAAC;IAC7C,OAAO,EAAE,KAAK,EAAE,CAAC;AACnB,CAAC"}
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
import { z } from "zod";
|
|
2
|
+
import { type StorageClient } from "../storage/client.js";
|
|
3
|
+
export declare const movePageInputSchema: z.ZodObject<{
|
|
4
|
+
name: z.ZodString;
|
|
5
|
+
action: z.ZodEnum<["archive", "rename"]>;
|
|
6
|
+
newName: z.ZodOptional<z.ZodString>;
|
|
7
|
+
}, "strip", z.ZodTypeAny, {
|
|
8
|
+
name: string;
|
|
9
|
+
action: "archive" | "rename";
|
|
10
|
+
newName?: string | undefined;
|
|
11
|
+
}, {
|
|
12
|
+
name: string;
|
|
13
|
+
action: "archive" | "rename";
|
|
14
|
+
newName?: string | undefined;
|
|
15
|
+
}>;
|
|
16
|
+
export type MovePageInput = z.infer<typeof movePageInputSchema>;
|
|
17
|
+
export declare function movePage(drive: StorageClient, input: MovePageInput, userId?: string): Promise<object>;
|
|
18
|
+
//# sourceMappingURL=movePage.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"movePage.d.ts","sourceRoot":"","sources":["../../src/tools/movePage.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AACxB,OAAO,EAAE,KAAK,aAAa,EAA4B,MAAM,sBAAsB,CAAC;AAQpF,eAAO,MAAM,mBAAmB;;;;;;;;;;;;EAU9B,CAAC;AAEH,MAAM,MAAM,aAAa,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,mBAAmB,CAAC,CAAC;AAEhE,wBAAsB,QAAQ,CAC5B,KAAK,EAAE,aAAa,EACpB,KAAK,EAAE,aAAa,EACpB,MAAM,SAAK,GACV,OAAO,CAAC,MAAM,CAAC,CAoLjB"}
|