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,99 @@
|
|
|
1
|
+
import { z } from "zod";
|
|
2
|
+
import { resolveIndexOwnerSubject } from "../storage/client.js";
|
|
3
|
+
import { buildNewPage, parsePage } from "../wiki/frontmatter.js";
|
|
4
|
+
import { getIngestRoutingWarnings } from "../wiki/ingestPolicy.js";
|
|
5
|
+
import { normalizeWikiPath } from "../wiki/path.js";
|
|
6
|
+
import { lintLayout } from "../wiki/layoutLint.js";
|
|
7
|
+
import { upsertIndexEntry } from "../wiki/index.js";
|
|
8
|
+
import { appendLogEntry } from "../wiki/log.js";
|
|
9
|
+
import { getPostgresSearchIndex } from "../search/postgresIndex.js";
|
|
10
|
+
import { assertWithinLimits, assertPageLimit, assertPageSize } from "../wiki/storageLimits.js";
|
|
11
|
+
import { dispatchPageWebhook } from "../webhooks/dispatch.js";
|
|
12
|
+
export const createPageInputSchema = z.object({
|
|
13
|
+
name: z
|
|
14
|
+
.string()
|
|
15
|
+
.min(1)
|
|
16
|
+
.describe("Relative path for the new page (e.g. 'projects/my-topic.md'). .md and slug format are auto-normalized."),
|
|
17
|
+
title: z.string().min(1).describe("Human-readable page title"),
|
|
18
|
+
body: z.string().describe("Main markdown content of the page"),
|
|
19
|
+
tags: z.array(z.string()).optional().describe("Optional list of tags"),
|
|
20
|
+
summary: z.string().optional().describe("One-line summary for the index"),
|
|
21
|
+
});
|
|
22
|
+
export async function createPage(drive, input, userId = "") {
|
|
23
|
+
await assertWithinLimits(drive);
|
|
24
|
+
await assertPageLimit(userId, 1);
|
|
25
|
+
const startMs = Date.now();
|
|
26
|
+
const normalizedName = normalizeWikiPath(input.name);
|
|
27
|
+
const layoutWarnings = lintLayout(normalizedName);
|
|
28
|
+
const content = buildNewPage(input.title, input.body, input.tags);
|
|
29
|
+
assertPageSize(userId, normalizedName, content);
|
|
30
|
+
const { frontmatter: parsedFrontmatter, content: parsedBody, warnings } = parsePage(content);
|
|
31
|
+
const routingWarnings = getIngestRoutingWarnings({
|
|
32
|
+
name: normalizedName,
|
|
33
|
+
title: input.title,
|
|
34
|
+
tags: input.tags,
|
|
35
|
+
body: input.body,
|
|
36
|
+
});
|
|
37
|
+
const writeResult = await drive.createFile(normalizedName, content);
|
|
38
|
+
const pgIndex = getPostgresSearchIndex();
|
|
39
|
+
// Cross-account sharing (BRA-381): attribute index/webhook writes to the
|
|
40
|
+
// true storage owner, not the raw authenticated actor — otherwise a grant
|
|
41
|
+
// owner never sees a grantee's contributions via list_pages/search_pages.
|
|
42
|
+
const indexOwner = resolveIndexOwnerSubject(drive, normalizedName, userId);
|
|
43
|
+
// Update Postgres index — best-effort. Stores the FULL serialized content
|
|
44
|
+
// (frontmatter included), matching patchPage.ts's DB-primary convention —
|
|
45
|
+
// read_page/patch_page read this column back as the complete file.
|
|
46
|
+
pgIndex.upsertPage(normalizedName, parsedFrontmatter, content, writeResult.revision, writeResult.modifiedTime, indexOwner).catch(() => { });
|
|
47
|
+
// Fire-and-forget: the link graph is a derived index, and nothing in this
|
|
48
|
+
// response depends on it. Awaiting it put three sequential Supabase round
|
|
49
|
+
// trips (~350-525ms) on the caller's critical path purely to decide whether
|
|
50
|
+
// to attach a cosmetic warning (GH #424). Staleness is self-healing —
|
|
51
|
+
// links_extracted_at drives extract_links' catch-up pass.
|
|
52
|
+
pgIndex
|
|
53
|
+
.syncPageLinks(normalizedName, parsedBody, indexOwner)
|
|
54
|
+
.catch((err) => {
|
|
55
|
+
console.warn(`[links] sync failed for '${normalizedName}'`, err instanceof Error ? err.message : err);
|
|
56
|
+
});
|
|
57
|
+
// Update index and log — best-effort, fire-and-forget
|
|
58
|
+
upsertIndexEntry(drive, {
|
|
59
|
+
name: normalizedName,
|
|
60
|
+
title: input.title,
|
|
61
|
+
summary: input.summary ?? "",
|
|
62
|
+
updated: new Date().toISOString().slice(0, 10),
|
|
63
|
+
}).catch(() => { });
|
|
64
|
+
appendLogEntry(drive, {
|
|
65
|
+
type: "create",
|
|
66
|
+
title: input.title,
|
|
67
|
+
detail: `Created ${normalizedName}`,
|
|
68
|
+
}, indexOwner).catch((err) => {
|
|
69
|
+
// Surfaced rather than swallowed: a silent stop here is how an
|
|
70
|
+
// oversized log.md would go unnoticed (GH #417).
|
|
71
|
+
console.warn("[log] append failed:", err instanceof Error ? err.message : err);
|
|
72
|
+
});
|
|
73
|
+
// Dispatch outbound webhooks — fire-and-forget, never blocks the write
|
|
74
|
+
dispatchPageWebhook(indexOwner, "create", {
|
|
75
|
+
name: normalizedName,
|
|
76
|
+
title: input.title,
|
|
77
|
+
tags: parsedFrontmatter.tags ?? [],
|
|
78
|
+
summary: input.summary ?? "",
|
|
79
|
+
at: writeResult.modifiedTime ?? new Date().toISOString(),
|
|
80
|
+
});
|
|
81
|
+
return {
|
|
82
|
+
success: true,
|
|
83
|
+
name: normalizedName,
|
|
84
|
+
fileId: writeResult.fileId,
|
|
85
|
+
revision: writeResult.revision,
|
|
86
|
+
modifiedTime: writeResult.modifiedTime,
|
|
87
|
+
bytesWritten: Buffer.byteLength(content, "utf8"),
|
|
88
|
+
durationMs: Date.now() - startMs,
|
|
89
|
+
warnings: [
|
|
90
|
+
...warnings.map((w) => ({ field: w.field, message: w.message })),
|
|
91
|
+
...routingWarnings,
|
|
92
|
+
],
|
|
93
|
+
// Kept separate from `warnings`, which is about a page's frontmatter. This
|
|
94
|
+
// is about where the page landed, and a caller may reasonably act on one
|
|
95
|
+
// and not the other.
|
|
96
|
+
...(layoutWarnings.length > 0 ? { layoutWarnings } : {}),
|
|
97
|
+
};
|
|
98
|
+
}
|
|
99
|
+
//# sourceMappingURL=createPage.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"createPage.js","sourceRoot":"","sources":["../../src/tools/createPage.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,51 @@
|
|
|
1
|
+
import { z } from "zod";
|
|
2
|
+
import type { StorageClient } from "../storage/client.js";
|
|
3
|
+
export declare const createPagesInputSchema: z.ZodObject<{
|
|
4
|
+
pages: z.ZodEffects<z.ZodArray<z.ZodObject<{
|
|
5
|
+
name: z.ZodString;
|
|
6
|
+
title: z.ZodString;
|
|
7
|
+
body: z.ZodString;
|
|
8
|
+
tags: z.ZodOptional<z.ZodArray<z.ZodString, "many">>;
|
|
9
|
+
summary: z.ZodOptional<z.ZodString>;
|
|
10
|
+
}, "strip", z.ZodTypeAny, {
|
|
11
|
+
body: string;
|
|
12
|
+
name: string;
|
|
13
|
+
title: string;
|
|
14
|
+
tags?: string[] | undefined;
|
|
15
|
+
summary?: string | undefined;
|
|
16
|
+
}, {
|
|
17
|
+
body: string;
|
|
18
|
+
name: string;
|
|
19
|
+
title: string;
|
|
20
|
+
tags?: string[] | undefined;
|
|
21
|
+
summary?: string | undefined;
|
|
22
|
+
}>, "many">, {
|
|
23
|
+
body: string;
|
|
24
|
+
name: string;
|
|
25
|
+
title: string;
|
|
26
|
+
tags?: string[] | undefined;
|
|
27
|
+
summary?: string | undefined;
|
|
28
|
+
}[], unknown>;
|
|
29
|
+
verbose: z.ZodDefault<z.ZodEffects<z.ZodBoolean, boolean, unknown>>;
|
|
30
|
+
runLabel: z.ZodOptional<z.ZodString>;
|
|
31
|
+
logTiming: z.ZodDefault<z.ZodEffects<z.ZodBoolean, boolean, unknown>>;
|
|
32
|
+
}, "strip", z.ZodTypeAny, {
|
|
33
|
+
pages: {
|
|
34
|
+
body: string;
|
|
35
|
+
name: string;
|
|
36
|
+
title: string;
|
|
37
|
+
tags?: string[] | undefined;
|
|
38
|
+
summary?: string | undefined;
|
|
39
|
+
}[];
|
|
40
|
+
verbose: boolean;
|
|
41
|
+
logTiming: boolean;
|
|
42
|
+
runLabel?: string | undefined;
|
|
43
|
+
}, {
|
|
44
|
+
pages?: unknown;
|
|
45
|
+
verbose?: unknown;
|
|
46
|
+
runLabel?: string | undefined;
|
|
47
|
+
logTiming?: unknown;
|
|
48
|
+
}>;
|
|
49
|
+
export type CreatePagesInput = z.infer<typeof createPagesInputSchema>;
|
|
50
|
+
export declare function createPages(drive: StorageClient, input: CreatePagesInput, userId?: string): Promise<object>;
|
|
51
|
+
//# sourceMappingURL=createPages.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"createPages.d.ts","sourceRoot":"","sources":["../../src/tools/createPages.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AACxB,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,sBAAsB,CAAC;AAgB1D,eAAO,MAAM,sBAAsB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EAgBjC,CAAC;AAEH,MAAM,MAAM,gBAAgB,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,sBAAsB,CAAC,CAAC;AAEtE,wBAAsB,WAAW,CAC/B,KAAK,EAAE,aAAa,EACpB,KAAK,EAAE,gBAAgB,EACvB,MAAM,SAAK,GACV,OAAO,CAAC,MAAM,CAAC,CAmEjB"}
|
|
@@ -0,0 +1,91 @@
|
|
|
1
|
+
import { z } from "zod";
|
|
2
|
+
import { createPage, createPageInputSchema } from "./createPage.js";
|
|
3
|
+
import { appendLogEntry } from "../wiki/log.js";
|
|
4
|
+
import { tryParseJson } from "./coerce.js";
|
|
5
|
+
import { assertWithinLimits, assertPageLimit } from "../wiki/storageLimits.js";
|
|
6
|
+
import { lintLayoutMany } from "../wiki/layoutLint.js";
|
|
7
|
+
function parseBooleanLike(value) {
|
|
8
|
+
if (typeof value === "string") {
|
|
9
|
+
const normalized = value.trim().toLowerCase();
|
|
10
|
+
if (normalized === "true")
|
|
11
|
+
return true;
|
|
12
|
+
if (normalized === "false")
|
|
13
|
+
return false;
|
|
14
|
+
}
|
|
15
|
+
return value;
|
|
16
|
+
}
|
|
17
|
+
export const createPagesInputSchema = z.object({
|
|
18
|
+
pages: z
|
|
19
|
+
.preprocess(tryParseJson, z.array(createPageInputSchema).min(1).max(20))
|
|
20
|
+
.describe("List of pages to create in one request"),
|
|
21
|
+
verbose: z
|
|
22
|
+
.preprocess(parseBooleanLike, z.boolean())
|
|
23
|
+
.default(false)
|
|
24
|
+
.describe("If true, include per-page result payloads. Defaults to compact summary output."),
|
|
25
|
+
runLabel: z
|
|
26
|
+
.string()
|
|
27
|
+
.optional()
|
|
28
|
+
.describe("Optional label for ingest timing logs (e.g. 'fitty-cent-ingest')"),
|
|
29
|
+
logTiming: z
|
|
30
|
+
.preprocess(parseBooleanLike, z.boolean())
|
|
31
|
+
.default(true)
|
|
32
|
+
.describe("If true, append an ingest timing entry to log.md"),
|
|
33
|
+
});
|
|
34
|
+
export async function createPages(drive, input, userId = "") {
|
|
35
|
+
await assertWithinLimits(drive);
|
|
36
|
+
await assertPageLimit(userId, input.pages.length);
|
|
37
|
+
const startedAt = new Date().toISOString();
|
|
38
|
+
const startMs = Date.now();
|
|
39
|
+
const results = [];
|
|
40
|
+
const failures = [];
|
|
41
|
+
// Sequential writes reduce index-revision conflicts while still using one tool call.
|
|
42
|
+
for (let i = 0; i < input.pages.length; i += 1) {
|
|
43
|
+
const page = input.pages[i];
|
|
44
|
+
try {
|
|
45
|
+
const result = await createPage(drive, page, userId);
|
|
46
|
+
results.push(result);
|
|
47
|
+
}
|
|
48
|
+
catch (err) {
|
|
49
|
+
failures.push({
|
|
50
|
+
index: i,
|
|
51
|
+
name: page.name,
|
|
52
|
+
error: err instanceof Error ? err.message : String(err),
|
|
53
|
+
});
|
|
54
|
+
}
|
|
55
|
+
}
|
|
56
|
+
const durationMs = Date.now() - startMs;
|
|
57
|
+
const completedAt = new Date().toISOString();
|
|
58
|
+
if (input.logTiming) {
|
|
59
|
+
const label = input.runLabel ?? "create_pages";
|
|
60
|
+
await appendLogEntry(drive, {
|
|
61
|
+
type: "ingest",
|
|
62
|
+
title: `Ingest timing: ${label}`,
|
|
63
|
+
detail: `durationMs=${durationMs}, total=${input.pages.length}, ` +
|
|
64
|
+
`succeeded=${results.length}, failed=${failures.length}`,
|
|
65
|
+
}, userId).catch(() => {
|
|
66
|
+
/* non-fatal */
|
|
67
|
+
});
|
|
68
|
+
}
|
|
69
|
+
const totalBytesWritten = results.reduce((sum, r) => sum + (r.bytesWritten ?? 0), 0);
|
|
70
|
+
const layoutWarnings = lintLayoutMany(input.pages.map((p) => p.name));
|
|
71
|
+
const baseResult = {
|
|
72
|
+
success: failures.length === 0,
|
|
73
|
+
count: results.length,
|
|
74
|
+
failedCount: failures.length,
|
|
75
|
+
totalCount: input.pages.length,
|
|
76
|
+
totalBytesWritten,
|
|
77
|
+
startedAt,
|
|
78
|
+
completedAt,
|
|
79
|
+
durationMs,
|
|
80
|
+
failures,
|
|
81
|
+
...(layoutWarnings.length > 0 ? { layoutWarnings } : {}),
|
|
82
|
+
};
|
|
83
|
+
if (input.verbose) {
|
|
84
|
+
return {
|
|
85
|
+
...baseResult,
|
|
86
|
+
results,
|
|
87
|
+
};
|
|
88
|
+
}
|
|
89
|
+
return baseResult;
|
|
90
|
+
}
|
|
91
|
+
//# sourceMappingURL=createPages.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"createPages.js","sourceRoot":"","sources":["../../src/tools/createPages.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
import { z } from "zod";
|
|
2
|
+
import { type StorageClient } from "../storage/client.js";
|
|
3
|
+
export declare const PROTECTED_PAGES: Set<string>;
|
|
4
|
+
export declare const deletePageInputSchema: z.ZodObject<{
|
|
5
|
+
name: z.ZodString;
|
|
6
|
+
confirm: z.ZodDefault<z.ZodBoolean>;
|
|
7
|
+
reason: z.ZodOptional<z.ZodString>;
|
|
8
|
+
}, "strip", z.ZodTypeAny, {
|
|
9
|
+
name: string;
|
|
10
|
+
confirm: boolean;
|
|
11
|
+
reason?: string | undefined;
|
|
12
|
+
}, {
|
|
13
|
+
name: string;
|
|
14
|
+
reason?: string | undefined;
|
|
15
|
+
confirm?: boolean | undefined;
|
|
16
|
+
}>;
|
|
17
|
+
export type DeletePageInput = z.infer<typeof deletePageInputSchema>;
|
|
18
|
+
export declare function deletePage(drive: StorageClient, input: DeletePageInput, userId?: string): Promise<object>;
|
|
19
|
+
//# sourceMappingURL=deletePage.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"deletePage.d.ts","sourceRoot":"","sources":["../../src/tools/deletePage.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAExB,OAAO,EAAE,KAAK,aAAa,EAA4B,MAAM,sBAAsB,CAAC;AAOpF,eAAO,MAAM,eAAe,aAM1B,CAAC;AAEH,eAAO,MAAM,qBAAqB;;;;;;;;;;;;EAgBhC,CAAC;AAEH,MAAM,MAAM,eAAe,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,qBAAqB,CAAC,CAAC;AAEpE,wBAAsB,UAAU,CAC9B,KAAK,EAAE,aAAa,EACpB,KAAK,EAAE,eAAe,EACtB,MAAM,SAAK,GACV,OAAO,CAAC,MAAM,CAAC,CAyGjB"}
|
|
@@ -0,0 +1,127 @@
|
|
|
1
|
+
import { z } from "zod";
|
|
2
|
+
import path from "path";
|
|
3
|
+
import { resolveIndexOwnerSubject } from "../storage/client.js";
|
|
4
|
+
import { parsePage } from "../wiki/frontmatter.js";
|
|
5
|
+
import { removeIndexEntry } from "../wiki/index.js";
|
|
6
|
+
import { appendLogEntry } from "../wiki/log.js";
|
|
7
|
+
import { getPostgresSearchIndex } from "../search/postgresIndex.js";
|
|
8
|
+
import { DriveNotFoundError } from "../drive/errors.js";
|
|
9
|
+
export const PROTECTED_PAGES = new Set([
|
|
10
|
+
"instructions/brain-routing.md",
|
|
11
|
+
"decisions/readme.md",
|
|
12
|
+
"history/readme.md",
|
|
13
|
+
"log.md",
|
|
14
|
+
"index.md",
|
|
15
|
+
]);
|
|
16
|
+
export const deletePageInputSchema = z.object({
|
|
17
|
+
name: z
|
|
18
|
+
.string()
|
|
19
|
+
.min(1)
|
|
20
|
+
.describe("Page path to delete (e.g. 'data/cooking.md')"),
|
|
21
|
+
confirm: z
|
|
22
|
+
.boolean()
|
|
23
|
+
.default(false)
|
|
24
|
+
.describe("If false, returns a dry-run preview (title, path, last updated, size). " +
|
|
25
|
+
"If true, permanently deletes the page."),
|
|
26
|
+
reason: z
|
|
27
|
+
.string()
|
|
28
|
+
.optional()
|
|
29
|
+
.describe("Optional reason for deletion. Stored in archived_pages for audit and restore context."),
|
|
30
|
+
});
|
|
31
|
+
export async function deletePage(drive, input, userId = "") {
|
|
32
|
+
const name = input.name.endsWith(".md") ? input.name : `${input.name}.md`;
|
|
33
|
+
if (PROTECTED_PAGES.has(name)) {
|
|
34
|
+
return {
|
|
35
|
+
ok: false,
|
|
36
|
+
error: `'${name}' is a protected system page and cannot be deleted.`,
|
|
37
|
+
};
|
|
38
|
+
}
|
|
39
|
+
const pgIndex = getPostgresSearchIndex();
|
|
40
|
+
// Cross-account sharing (BRA-381): attribute index/archive ownership to the
|
|
41
|
+
// true storage owner, not the raw authenticated actor — `deletedBy` below
|
|
42
|
+
// still tracks who actually performed the deletion.
|
|
43
|
+
const indexOwner = resolveIndexOwnerSubject(drive, name, userId);
|
|
44
|
+
// Hot path: read from DB row — matches read_page/patch_page, avoids archiving
|
|
45
|
+
// stale Storage content when a recent patch_page write-behind hasn't flushed yet.
|
|
46
|
+
let file = await pgIndex.fetchPageRow(name, indexOwner).catch(() => null);
|
|
47
|
+
if (!file) {
|
|
48
|
+
try {
|
|
49
|
+
file = await drive.readFile(name);
|
|
50
|
+
}
|
|
51
|
+
catch (err) {
|
|
52
|
+
if (err instanceof DriveNotFoundError) {
|
|
53
|
+
return { ok: false, error: `Page not found: '${name}'` };
|
|
54
|
+
}
|
|
55
|
+
throw err;
|
|
56
|
+
}
|
|
57
|
+
}
|
|
58
|
+
const { frontmatter } = parsePage(file.content);
|
|
59
|
+
const title = String(frontmatter.title ?? name);
|
|
60
|
+
const tags = Array.isArray(frontmatter.tags) ? frontmatter.tags.map((tag) => String(tag)) : [];
|
|
61
|
+
const sizeBytes = Buffer.byteLength(file.content, "utf8");
|
|
62
|
+
const updatedRaw = frontmatter.updated;
|
|
63
|
+
const lastUpdated = updatedRaw instanceof Date
|
|
64
|
+
? updatedRaw.toISOString().slice(0, 10)
|
|
65
|
+
: String(updatedRaw ?? file.modifiedTime);
|
|
66
|
+
if (!input.confirm) {
|
|
67
|
+
return {
|
|
68
|
+
ok: true,
|
|
69
|
+
dryRun: true,
|
|
70
|
+
name,
|
|
71
|
+
title,
|
|
72
|
+
lastUpdated,
|
|
73
|
+
sizeBytes,
|
|
74
|
+
message: "Set confirm=true to permanently delete this page.",
|
|
75
|
+
};
|
|
76
|
+
}
|
|
77
|
+
const originalFolderRaw = path.posix.dirname(name);
|
|
78
|
+
const originalFolder = originalFolderRaw === "." ? "" : originalFolderRaw;
|
|
79
|
+
try {
|
|
80
|
+
await pgIndex.archivePage({
|
|
81
|
+
userId: indexOwner,
|
|
82
|
+
originalPath: name,
|
|
83
|
+
originalFolder,
|
|
84
|
+
title,
|
|
85
|
+
tags,
|
|
86
|
+
content: file.content,
|
|
87
|
+
revision: file.revision,
|
|
88
|
+
sizeBytes,
|
|
89
|
+
reason: input.reason,
|
|
90
|
+
deletedBy: userId,
|
|
91
|
+
});
|
|
92
|
+
}
|
|
93
|
+
catch (err) {
|
|
94
|
+
const message = err instanceof Error ? err.message : String(err);
|
|
95
|
+
return {
|
|
96
|
+
ok: false,
|
|
97
|
+
error: `Archive write failed for '${name}': ${message}`,
|
|
98
|
+
};
|
|
99
|
+
}
|
|
100
|
+
await drive.deleteFile(name);
|
|
101
|
+
// Remove from Postgres index — synchronous so audit_index isn't needed
|
|
102
|
+
const pgIndexError = await pgIndex
|
|
103
|
+
.deletePage(name, indexOwner)
|
|
104
|
+
.then(() => null)
|
|
105
|
+
.catch((err) => (err instanceof Error ? err.message : String(err)));
|
|
106
|
+
// Remove from legacy index.md — fire-and-forget
|
|
107
|
+
removeIndexEntry(drive, name).catch(() => { });
|
|
108
|
+
// Audit log — fire-and-forget, matching every other write path. The failure
|
|
109
|
+
// is swallowed either way, so awaiting changed nothing observable about the
|
|
110
|
+
// response; it just put the ~2.3s log.md read-modify-write on the caller's
|
|
111
|
+
// critical path and made delete_page the slowest tool by 2x (GH #419).
|
|
112
|
+
appendLogEntry(drive, {
|
|
113
|
+
type: "delete",
|
|
114
|
+
title,
|
|
115
|
+
detail: `Deleted '${name}' (${sizeBytes} bytes)`,
|
|
116
|
+
}, indexOwner).catch((err) => {
|
|
117
|
+
console.warn("[log] append failed:", err instanceof Error ? err.message : err);
|
|
118
|
+
});
|
|
119
|
+
return {
|
|
120
|
+
ok: true,
|
|
121
|
+
deleted: true,
|
|
122
|
+
name,
|
|
123
|
+
title,
|
|
124
|
+
...(pgIndexError !== null ? { indexWarning: `Index delete failed: ${pgIndexError}. Run audit_index to clean up.` } : {}),
|
|
125
|
+
};
|
|
126
|
+
}
|
|
127
|
+
//# sourceMappingURL=deletePage.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"deletePage.js","sourceRoot":"","sources":["../../src/tools/deletePage.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,48 @@
|
|
|
1
|
+
import { z } from "zod";
|
|
2
|
+
import type { StorageClient } from "../storage/client.js";
|
|
3
|
+
export declare const READ_CONCURRENCY: number;
|
|
4
|
+
export declare const INLINE_ZIP_SIZE_LIMIT_BYTES: number;
|
|
5
|
+
export declare const exportWikiInputSchema: z.ZodObject<{
|
|
6
|
+
outputPath: z.ZodOptional<z.ZodString>;
|
|
7
|
+
includeSystem: z.ZodDefault<z.ZodBoolean>;
|
|
8
|
+
folder: z.ZodOptional<z.ZodString>;
|
|
9
|
+
tags: z.ZodOptional<z.ZodArray<z.ZodString, "many">>;
|
|
10
|
+
}, "strip", z.ZodTypeAny, {
|
|
11
|
+
includeSystem: boolean;
|
|
12
|
+
tags?: string[] | undefined;
|
|
13
|
+
folder?: string | undefined;
|
|
14
|
+
outputPath?: string | undefined;
|
|
15
|
+
}, {
|
|
16
|
+
tags?: string[] | undefined;
|
|
17
|
+
folder?: string | undefined;
|
|
18
|
+
outputPath?: string | undefined;
|
|
19
|
+
includeSystem?: boolean | undefined;
|
|
20
|
+
}>;
|
|
21
|
+
export type ExportWikiInput = z.infer<typeof exportWikiInputSchema>;
|
|
22
|
+
export declare function mapConcurrent<T, R>(items: T[], concurrency: number, fn: (item: T) => Promise<R>): Promise<R[]>;
|
|
23
|
+
export declare function buildExportZip(drive: StorageClient, options: {
|
|
24
|
+
includeSystem?: boolean;
|
|
25
|
+
folder?: string;
|
|
26
|
+
tags?: string[];
|
|
27
|
+
/** ISO datetime — only include pages with content modified > changedAfter. */
|
|
28
|
+
changedAfter?: string;
|
|
29
|
+
/** User ID for Postgres index lookups. */
|
|
30
|
+
userId?: string;
|
|
31
|
+
}): Promise<{
|
|
32
|
+
buffer: Buffer;
|
|
33
|
+
pageCount: number;
|
|
34
|
+
skippedCount: number;
|
|
35
|
+
generatedAt: string;
|
|
36
|
+
since?: string;
|
|
37
|
+
files: Array<{
|
|
38
|
+
name: string;
|
|
39
|
+
size: number;
|
|
40
|
+
modifiedTime: string;
|
|
41
|
+
}>;
|
|
42
|
+
errors: Array<{
|
|
43
|
+
name: string;
|
|
44
|
+
reason: string;
|
|
45
|
+
}>;
|
|
46
|
+
}>;
|
|
47
|
+
export declare function exportWiki(drive: StorageClient, input: ExportWikiInput): Promise<object>;
|
|
48
|
+
//# sourceMappingURL=exportWiki.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"exportWiki.d.ts","sourceRoot":"","sources":["../../src/tools/exportWiki.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAExB,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,sBAAsB,CAAC;AAM1D,eAAO,MAAM,gBAAgB,QAA4E,CAAC;AAK1G,eAAO,MAAM,2BAA2B,QAAkB,CAAC;AAE3D,eAAO,MAAM,qBAAqB;;;;;;;;;;;;;;;EAkBhC,CAAC;AAEH,MAAM,MAAM,eAAe,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,qBAAqB,CAAC,CAAC;AA6CpE,wBAAsB,aAAa,CAAC,CAAC,EAAE,CAAC,EACtC,KAAK,EAAE,CAAC,EAAE,EACV,WAAW,EAAE,MAAM,EACnB,EAAE,EAAE,CAAC,IAAI,EAAE,CAAC,KAAK,OAAO,CAAC,CAAC,CAAC,GAC1B,OAAO,CAAC,CAAC,EAAE,CAAC,CAed;AAwBD,wBAAsB,cAAc,CACpC,KAAK,EAAE,aAAa,EACpB,OAAO,EAAE;IACP,aAAa,CAAC,EAAE,OAAO,CAAC;IACxB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,IAAI,CAAC,EAAE,MAAM,EAAE,CAAC;IAChB,8EAA8E;IAC9E,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,0CAA0C;IAC1C,MAAM,CAAC,EAAE,MAAM,CAAC;CACjB,GACE,OAAO,CAAC;IACX,MAAM,EAAE,MAAM,CAAC;IACf,SAAS,EAAE,MAAM,CAAC;IAClB,YAAY,EAAE,MAAM,CAAC;IACrB,WAAW,EAAE,MAAM,CAAC;IACpB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,KAAK,EAAE,KAAK,CAAC;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,MAAM,CAAC;QAAC,YAAY,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;IACnE,MAAM,EAAE,KAAK,CAAC;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,MAAM,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;CAC/C,CAAC,CAuGD;AAED,wBAAsB,UAAU,CAChC,KAAK,EAAE,aAAa,EACpB,KAAK,EAAE,eAAe,GACnB,OAAO,CAAC,MAAM,CAAC,CAoDjB"}
|