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.
Files changed (350) hide show
  1. package/README.md +95 -0
  2. package/dist/access/projectShares.d.ts +48 -0
  3. package/dist/access/projectShares.d.ts.map +1 -0
  4. package/dist/access/projectShares.js +203 -0
  5. package/dist/access/projectShares.js.map +1 -0
  6. package/dist/access/sharedInstructionsNote.d.ts +37 -0
  7. package/dist/access/sharedInstructionsNote.d.ts.map +1 -0
  8. package/dist/access/sharedInstructionsNote.js +76 -0
  9. package/dist/access/sharedInstructionsNote.js.map +1 -0
  10. package/dist/admin/seedUsers.d.ts +23 -0
  11. package/dist/admin/seedUsers.d.ts.map +1 -0
  12. package/dist/admin/seedUsers.js +168 -0
  13. package/dist/admin/seedUsers.js.map +1 -0
  14. package/dist/api/openapi.d.ts +2 -0
  15. package/dist/api/openapi.d.ts.map +1 -0
  16. package/dist/api/openapi.js +942 -0
  17. package/dist/api/openapi.js.map +1 -0
  18. package/dist/auth/clientStore.d.ts +43 -0
  19. package/dist/auth/clientStore.d.ts.map +1 -0
  20. package/dist/auth/clientStore.js +168 -0
  21. package/dist/auth/clientStore.js.map +1 -0
  22. package/dist/auth/deleteAccount.d.ts +34 -0
  23. package/dist/auth/deleteAccount.d.ts.map +1 -0
  24. package/dist/auth/deleteAccount.js +203 -0
  25. package/dist/auth/deleteAccount.js.map +1 -0
  26. package/dist/auth/oauth.d.ts +118 -0
  27. package/dist/auth/oauth.d.ts.map +1 -0
  28. package/dist/auth/oauth.js +491 -0
  29. package/dist/auth/oauth.js.map +1 -0
  30. package/dist/auth/patStore.d.ts +87 -0
  31. package/dist/auth/patStore.d.ts.map +1 -0
  32. package/dist/auth/patStore.js +308 -0
  33. package/dist/auth/patStore.js.map +1 -0
  34. package/dist/auth/supabase.d.ts +15 -0
  35. package/dist/auth/supabase.d.ts.map +1 -0
  36. package/dist/auth/supabase.js +66 -0
  37. package/dist/auth/supabase.js.map +1 -0
  38. package/dist/auth/tokenStore.d.ts +73 -0
  39. package/dist/auth/tokenStore.d.ts.map +1 -0
  40. package/dist/auth/tokenStore.js +261 -0
  41. package/dist/auth/tokenStore.js.map +1 -0
  42. package/dist/backup/drive.d.ts +24 -0
  43. package/dist/backup/drive.d.ts.map +1 -0
  44. package/dist/backup/drive.js +70 -0
  45. package/dist/backup/drive.js.map +1 -0
  46. package/dist/billing/tierStore.d.ts +59 -0
  47. package/dist/billing/tierStore.d.ts.map +1 -0
  48. package/dist/billing/tierStore.js +152 -0
  49. package/dist/billing/tierStore.js.map +1 -0
  50. package/dist/digest/activityDigest.d.ts +32 -0
  51. package/dist/digest/activityDigest.d.ts.map +1 -0
  52. package/dist/digest/activityDigest.js +299 -0
  53. package/dist/digest/activityDigest.js.map +1 -0
  54. package/dist/digest/digestCron.d.ts +40 -0
  55. package/dist/digest/digestCron.d.ts.map +1 -0
  56. package/dist/digest/digestCron.js +146 -0
  57. package/dist/digest/digestCron.js.map +1 -0
  58. package/dist/digest/digestPreferences.d.ts +25 -0
  59. package/dist/digest/digestPreferences.d.ts.map +1 -0
  60. package/dist/digest/digestPreferences.js +79 -0
  61. package/dist/digest/digestPreferences.js.map +1 -0
  62. package/dist/digest/emailSender.d.ts +20 -0
  63. package/dist/digest/emailSender.d.ts.map +1 -0
  64. package/dist/digest/emailSender.js +35 -0
  65. package/dist/digest/emailSender.js.map +1 -0
  66. package/dist/drive/client.d.ts +43 -0
  67. package/dist/drive/client.d.ts.map +1 -0
  68. package/dist/drive/client.js +282 -0
  69. package/dist/drive/client.js.map +1 -0
  70. package/dist/drive/errors.d.ts +27 -0
  71. package/dist/drive/errors.d.ts.map +1 -0
  72. package/dist/drive/errors.js +51 -0
  73. package/dist/drive/errors.js.map +1 -0
  74. package/dist/drive/fileCache.d.ts +22 -0
  75. package/dist/drive/fileCache.d.ts.map +1 -0
  76. package/dist/drive/fileCache.js +57 -0
  77. package/dist/drive/fileCache.js.map +1 -0
  78. package/dist/governance/accessControl.d.ts +87 -0
  79. package/dist/governance/accessControl.d.ts.map +1 -0
  80. package/dist/governance/accessControl.js +179 -0
  81. package/dist/governance/accessControl.js.map +1 -0
  82. package/dist/html/components.d.ts +8 -0
  83. package/dist/html/components.d.ts.map +1 -0
  84. package/dist/html/components.js +19 -0
  85. package/dist/html/components.js.map +1 -0
  86. package/dist/html/layout.d.ts +7 -0
  87. package/dist/html/layout.d.ts.map +1 -0
  88. package/dist/html/layout.js +24 -0
  89. package/dist/html/layout.js.map +1 -0
  90. package/dist/html/metricsUi.d.ts +8 -0
  91. package/dist/html/metricsUi.d.ts.map +1 -0
  92. package/dist/html/metricsUi.js +271 -0
  93. package/dist/html/metricsUi.js.map +1 -0
  94. package/dist/httpServer.d.ts +19 -0
  95. package/dist/httpServer.d.ts.map +1 -0
  96. package/dist/httpServer.js +3913 -0
  97. package/dist/httpServer.js.map +1 -0
  98. package/dist/index.d.ts +3 -0
  99. package/dist/index.d.ts.map +1 -0
  100. package/dist/index.js +40 -0
  101. package/dist/index.js.map +1 -0
  102. package/dist/jobs/asyncJobRegistry.d.ts +30 -0
  103. package/dist/jobs/asyncJobRegistry.d.ts.map +1 -0
  104. package/dist/jobs/asyncJobRegistry.js +70 -0
  105. package/dist/jobs/asyncJobRegistry.js.map +1 -0
  106. package/dist/observability/metricsQuery.d.ts +41 -0
  107. package/dist/observability/metricsQuery.d.ts.map +1 -0
  108. package/dist/observability/metricsQuery.js +106 -0
  109. package/dist/observability/metricsQuery.js.map +1 -0
  110. package/dist/observability/relevanceSignal.d.ts +26 -0
  111. package/dist/observability/relevanceSignal.d.ts.map +1 -0
  112. package/dist/observability/relevanceSignal.js +95 -0
  113. package/dist/observability/relevanceSignal.js.map +1 -0
  114. package/dist/observability/requestEvents.d.ts +31 -0
  115. package/dist/observability/requestEvents.d.ts.map +1 -0
  116. package/dist/observability/requestEvents.js +54 -0
  117. package/dist/observability/requestEvents.js.map +1 -0
  118. package/dist/observability/slowQueryAlert.d.ts +25 -0
  119. package/dist/observability/slowQueryAlert.d.ts.map +1 -0
  120. package/dist/observability/slowQueryAlert.js +67 -0
  121. package/dist/observability/slowQueryAlert.js.map +1 -0
  122. package/dist/observability/zeroResultTriage.d.ts +22 -0
  123. package/dist/observability/zeroResultTriage.d.ts.map +1 -0
  124. package/dist/observability/zeroResultTriage.js +116 -0
  125. package/dist/observability/zeroResultTriage.js.map +1 -0
  126. package/dist/search/embeddings.d.ts +31 -0
  127. package/dist/search/embeddings.d.ts.map +1 -0
  128. package/dist/search/embeddings.js +91 -0
  129. package/dist/search/embeddings.js.map +1 -0
  130. package/dist/search/fileWatcher.d.ts +28 -0
  131. package/dist/search/fileWatcher.d.ts.map +1 -0
  132. package/dist/search/fileWatcher.js +103 -0
  133. package/dist/search/fileWatcher.js.map +1 -0
  134. package/dist/search/hotQueryCache.d.ts +31 -0
  135. package/dist/search/hotQueryCache.d.ts.map +1 -0
  136. package/dist/search/hotQueryCache.js +103 -0
  137. package/dist/search/hotQueryCache.js.map +1 -0
  138. package/dist/search/postgresIndex.d.ts +439 -0
  139. package/dist/search/postgresIndex.d.ts.map +1 -0
  140. package/dist/search/postgresIndex.js +1610 -0
  141. package/dist/search/postgresIndex.js.map +1 -0
  142. package/dist/search/sqliteIndex.d.ts +66 -0
  143. package/dist/search/sqliteIndex.d.ts.map +1 -0
  144. package/dist/search/sqliteIndex.js +342 -0
  145. package/dist/search/sqliteIndex.js.map +1 -0
  146. package/dist/server.d.ts +43 -0
  147. package/dist/server.d.ts.map +1 -0
  148. package/dist/server.js +532 -0
  149. package/dist/server.js.map +1 -0
  150. package/dist/session/bundle.d.ts +53 -0
  151. package/dist/session/bundle.d.ts.map +1 -0
  152. package/dist/session/bundle.js +97 -0
  153. package/dist/session/bundle.js.map +1 -0
  154. package/dist/storage/client.d.ts +157 -0
  155. package/dist/storage/client.d.ts.map +1 -0
  156. package/dist/storage/client.js +825 -0
  157. package/dist/storage/client.js.map +1 -0
  158. package/dist/tools/addWebhookPattern.d.ts +15 -0
  159. package/dist/tools/addWebhookPattern.d.ts.map +1 -0
  160. package/dist/tools/addWebhookPattern.js +15 -0
  161. package/dist/tools/addWebhookPattern.js.map +1 -0
  162. package/dist/tools/appendLog.d.ts +18 -0
  163. package/dist/tools/appendLog.d.ts.map +1 -0
  164. package/dist/tools/appendLog.js +18 -0
  165. package/dist/tools/appendLog.js.map +1 -0
  166. package/dist/tools/auditIndex.d.ts +15 -0
  167. package/dist/tools/auditIndex.d.ts.map +1 -0
  168. package/dist/tools/auditIndex.js +165 -0
  169. package/dist/tools/auditIndex.js.map +1 -0
  170. package/dist/tools/batchDeletePages.d.ts +18 -0
  171. package/dist/tools/batchDeletePages.d.ts.map +1 -0
  172. package/dist/tools/batchDeletePages.js +143 -0
  173. package/dist/tools/batchDeletePages.js.map +1 -0
  174. package/dist/tools/coerce.d.ts +3 -0
  175. package/dist/tools/coerce.d.ts.map +1 -0
  176. package/dist/tools/coerce.js +12 -0
  177. package/dist/tools/coerce.js.map +1 -0
  178. package/dist/tools/createPage.d.ts +24 -0
  179. package/dist/tools/createPage.d.ts.map +1 -0
  180. package/dist/tools/createPage.js +99 -0
  181. package/dist/tools/createPage.js.map +1 -0
  182. package/dist/tools/createPages.d.ts +51 -0
  183. package/dist/tools/createPages.d.ts.map +1 -0
  184. package/dist/tools/createPages.js +91 -0
  185. package/dist/tools/createPages.js.map +1 -0
  186. package/dist/tools/deletePage.d.ts +19 -0
  187. package/dist/tools/deletePage.d.ts.map +1 -0
  188. package/dist/tools/deletePage.js +127 -0
  189. package/dist/tools/deletePage.js.map +1 -0
  190. package/dist/tools/exportWiki.d.ts +48 -0
  191. package/dist/tools/exportWiki.d.ts.map +1 -0
  192. package/dist/tools/exportWiki.js +233 -0
  193. package/dist/tools/exportWiki.js.map +1 -0
  194. package/dist/tools/extractLinks.d.ts +14 -0
  195. package/dist/tools/extractLinks.d.ts.map +1 -0
  196. package/dist/tools/extractLinks.js +25 -0
  197. package/dist/tools/extractLinks.js.map +1 -0
  198. package/dist/tools/generateClaudeInstructions.d.ts +27 -0
  199. package/dist/tools/generateClaudeInstructions.d.ts.map +1 -0
  200. package/dist/tools/generateClaudeInstructions.js +263 -0
  201. package/dist/tools/generateClaudeInstructions.js.map +1 -0
  202. package/dist/tools/generateGptInstructions.d.ts +27 -0
  203. package/dist/tools/generateGptInstructions.d.ts.map +1 -0
  204. package/dist/tools/generateGptInstructions.js +208 -0
  205. package/dist/tools/generateGptInstructions.js.map +1 -0
  206. package/dist/tools/getBacklinks.d.ts +12 -0
  207. package/dist/tools/getBacklinks.d.ts.map +1 -0
  208. package/dist/tools/getBacklinks.js +13 -0
  209. package/dist/tools/getBacklinks.js.map +1 -0
  210. package/dist/tools/getRelated.d.ts +12 -0
  211. package/dist/tools/getRelated.d.ts.map +1 -0
  212. package/dist/tools/getRelated.js +13 -0
  213. package/dist/tools/getRelated.js.map +1 -0
  214. package/dist/tools/healthCheck.d.ts +5 -0
  215. package/dist/tools/healthCheck.d.ts.map +1 -0
  216. package/dist/tools/healthCheck.js +167 -0
  217. package/dist/tools/healthCheck.js.map +1 -0
  218. package/dist/tools/importBrainSource.d.ts +36 -0
  219. package/dist/tools/importBrainSource.d.ts.map +1 -0
  220. package/dist/tools/importBrainSource.js +314 -0
  221. package/dist/tools/importBrainSource.js.map +1 -0
  222. package/dist/tools/importWikiZip.d.ts +60 -0
  223. package/dist/tools/importWikiZip.d.ts.map +1 -0
  224. package/dist/tools/importWikiZip.js +379 -0
  225. package/dist/tools/importWikiZip.js.map +1 -0
  226. package/dist/tools/initProject.d.ts +34 -0
  227. package/dist/tools/initProject.d.ts.map +1 -0
  228. package/dist/tools/initProject.js +443 -0
  229. package/dist/tools/initProject.js.map +1 -0
  230. package/dist/tools/instructionContext.d.ts +60 -0
  231. package/dist/tools/instructionContext.d.ts.map +1 -0
  232. package/dist/tools/instructionContext.js +210 -0
  233. package/dist/tools/instructionContext.js.map +1 -0
  234. package/dist/tools/listArchivedPages.d.ts +17 -0
  235. package/dist/tools/listArchivedPages.d.ts.map +1 -0
  236. package/dist/tools/listArchivedPages.js +51 -0
  237. package/dist/tools/listArchivedPages.js.map +1 -0
  238. package/dist/tools/listPages.d.ts +28 -0
  239. package/dist/tools/listPages.d.ts.map +1 -0
  240. package/dist/tools/listPages.js +166 -0
  241. package/dist/tools/listPages.js.map +1 -0
  242. package/dist/tools/listWebhooks.d.ts +7 -0
  243. package/dist/tools/listWebhooks.d.ts.map +1 -0
  244. package/dist/tools/listWebhooks.js +10 -0
  245. package/dist/tools/listWebhooks.js.map +1 -0
  246. package/dist/tools/movePage.d.ts +18 -0
  247. package/dist/tools/movePage.d.ts.map +1 -0
  248. package/dist/tools/movePage.js +182 -0
  249. package/dist/tools/movePage.js.map +1 -0
  250. package/dist/tools/pageHistory.d.ts +36 -0
  251. package/dist/tools/pageHistory.d.ts.map +1 -0
  252. package/dist/tools/pageHistory.js +60 -0
  253. package/dist/tools/pageHistory.js.map +1 -0
  254. package/dist/tools/patchPage.d.ts +141 -0
  255. package/dist/tools/patchPage.d.ts.map +1 -0
  256. package/dist/tools/patchPage.js +287 -0
  257. package/dist/tools/patchPage.js.map +1 -0
  258. package/dist/tools/pullSessionBundle.d.ts +34 -0
  259. package/dist/tools/pullSessionBundle.d.ts.map +1 -0
  260. package/dist/tools/pullSessionBundle.js +432 -0
  261. package/dist/tools/pullSessionBundle.js.map +1 -0
  262. package/dist/tools/purgeWiki.d.ts +23 -0
  263. package/dist/tools/purgeWiki.d.ts.map +1 -0
  264. package/dist/tools/purgeWiki.js +113 -0
  265. package/dist/tools/purgeWiki.js.map +1 -0
  266. package/dist/tools/pushSessionBundle.d.ts +139 -0
  267. package/dist/tools/pushSessionBundle.d.ts.map +1 -0
  268. package/dist/tools/pushSessionBundle.js +282 -0
  269. package/dist/tools/pushSessionBundle.js.map +1 -0
  270. package/dist/tools/readGovernanceAudit.d.ts +17 -0
  271. package/dist/tools/readGovernanceAudit.d.ts.map +1 -0
  272. package/dist/tools/readGovernanceAudit.js +21 -0
  273. package/dist/tools/readGovernanceAudit.js.map +1 -0
  274. package/dist/tools/readPage.d.ts +13 -0
  275. package/dist/tools/readPage.d.ts.map +1 -0
  276. package/dist/tools/readPage.js +46 -0
  277. package/dist/tools/readPage.js.map +1 -0
  278. package/dist/tools/removeWebhook.d.ts +14 -0
  279. package/dist/tools/removeWebhook.d.ts.map +1 -0
  280. package/dist/tools/removeWebhook.js +12 -0
  281. package/dist/tools/removeWebhook.js.map +1 -0
  282. package/dist/tools/resolveProject.d.ts +58 -0
  283. package/dist/tools/resolveProject.d.ts.map +1 -0
  284. package/dist/tools/resolveProject.js +175 -0
  285. package/dist/tools/resolveProject.js.map +1 -0
  286. package/dist/tools/restorePage.d.ts +47 -0
  287. package/dist/tools/restorePage.d.ts.map +1 -0
  288. package/dist/tools/restorePage.js +111 -0
  289. package/dist/tools/restorePage.js.map +1 -0
  290. package/dist/tools/searchPages.d.ts +28 -0
  291. package/dist/tools/searchPages.d.ts.map +1 -0
  292. package/dist/tools/searchPages.js +372 -0
  293. package/dist/tools/searchPages.js.map +1 -0
  294. package/dist/tools/setWebhook.d.ts +30 -0
  295. package/dist/tools/setWebhook.d.ts.map +1 -0
  296. package/dist/tools/setWebhook.js +30 -0
  297. package/dist/tools/setWebhook.js.map +1 -0
  298. package/dist/tools/shareProject.d.ts +25 -0
  299. package/dist/tools/shareProject.d.ts.map +1 -0
  300. package/dist/tools/shareProject.js +56 -0
  301. package/dist/tools/shareProject.js.map +1 -0
  302. package/dist/tools/suggestLinks.d.ts +29 -0
  303. package/dist/tools/suggestLinks.d.ts.map +1 -0
  304. package/dist/tools/suggestLinks.js +214 -0
  305. package/dist/tools/suggestLinks.js.map +1 -0
  306. package/dist/tools/updatePage.d.ts +27 -0
  307. package/dist/tools/updatePage.d.ts.map +1 -0
  308. package/dist/tools/updatePage.js +118 -0
  309. package/dist/tools/updatePage.js.map +1 -0
  310. package/dist/webhooks/dispatch.d.ts +49 -0
  311. package/dist/webhooks/dispatch.d.ts.map +1 -0
  312. package/dist/webhooks/dispatch.js +159 -0
  313. package/dist/webhooks/dispatch.js.map +1 -0
  314. package/dist/webhooks/webhookRules.d.ts +34 -0
  315. package/dist/webhooks/webhookRules.d.ts.map +1 -0
  316. package/dist/webhooks/webhookRules.js +129 -0
  317. package/dist/webhooks/webhookRules.js.map +1 -0
  318. package/dist/wiki/frontmatter.d.ts +45 -0
  319. package/dist/wiki/frontmatter.d.ts.map +1 -0
  320. package/dist/wiki/frontmatter.js +68 -0
  321. package/dist/wiki/frontmatter.js.map +1 -0
  322. package/dist/wiki/index.d.ts +22 -0
  323. package/dist/wiki/index.d.ts.map +1 -0
  324. package/dist/wiki/index.js +203 -0
  325. package/dist/wiki/index.js.map +1 -0
  326. package/dist/wiki/ingestPolicy.d.ts +18 -0
  327. package/dist/wiki/ingestPolicy.d.ts.map +1 -0
  328. package/dist/wiki/ingestPolicy.js +64 -0
  329. package/dist/wiki/ingestPolicy.js.map +1 -0
  330. package/dist/wiki/layoutLint.d.ts +51 -0
  331. package/dist/wiki/layoutLint.d.ts.map +1 -0
  332. package/dist/wiki/layoutLint.js +146 -0
  333. package/dist/wiki/layoutLint.js.map +1 -0
  334. package/dist/wiki/links.d.ts +6 -0
  335. package/dist/wiki/links.d.ts.map +1 -0
  336. package/dist/wiki/links.js +45 -0
  337. package/dist/wiki/links.js.map +1 -0
  338. package/dist/wiki/log.d.ts +58 -0
  339. package/dist/wiki/log.d.ts.map +1 -0
  340. package/dist/wiki/log.js +126 -0
  341. package/dist/wiki/log.js.map +1 -0
  342. package/dist/wiki/path.d.ts +8 -0
  343. package/dist/wiki/path.d.ts.map +1 -0
  344. package/dist/wiki/path.js +25 -0
  345. package/dist/wiki/path.js.map +1 -0
  346. package/dist/wiki/storageLimits.d.ts +163 -0
  347. package/dist/wiki/storageLimits.d.ts.map +1 -0
  348. package/dist/wiki/storageLimits.js +281 -0
  349. package/dist/wiki/storageLimits.js.map +1 -0
  350. 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"}