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,208 @@
1
+ import { z } from "zod";
2
+ import { gatherProjectContext } from "./instructionContext.js";
3
+ function slugifyProjectName(value) {
4
+ const slug = value
5
+ .trim()
6
+ .toLowerCase()
7
+ .replace(/[^a-z0-9-]+/g, "-")
8
+ .replace(/-+/g, "-")
9
+ .replace(/^-|-$/g, "");
10
+ return slug || "project";
11
+ }
12
+ /**
13
+ * The project's real slug.
14
+ *
15
+ * Prefer deriving it from projectPage, which callers set to the actual project
16
+ * location, over slugifying the display name. init_project accepts an explicit
17
+ * projectSlug that need not match slugify(projectName) — and when it did not,
18
+ * every write-back target in the emitted block pointed at a folder that does
19
+ * not exist. That is the "slug drift from generation" seen on cressida, whose
20
+ * block referenced projects/cressida-wagon/. Reproduced deterministically:
21
+ * projectSlug "index-probe-tmp" with projectName "Index Probe" emitted targets
22
+ * under projects/index-probe/ (GH #436).
23
+ *
24
+ * Handles both shapes callers pass: "projects/<slug>/readme.md" and the
25
+ * defaultProjectPage form "projects/<slug>/readme.md".
26
+ */
27
+ function resolveSlug(projectName, projectPage) {
28
+ const match = projectPage?.trim().match(/^projects\/([^/]+?)(?:\.md)?(?:\/|$)/);
29
+ return match ? match[1] : slugifyProjectName(projectName);
30
+ }
31
+ function defaultProjectPage(projectName) {
32
+ return `projects/${slugifyProjectName(projectName)}/readme.md`;
33
+ }
34
+ export const generateGptInstructionsInputSchema = z.object({
35
+ projectName: z
36
+ .string()
37
+ .min(1)
38
+ .describe("Project name to include in generated instructions."),
39
+ variant: z
40
+ .enum(["minimal", "extended", "pointer"])
41
+ .default("extended")
42
+ .describe("Instruction verbosity level. 'extended' is recommended for the wiki instruction file. 'pointer' emits a short system-prompt block (identity, activation gate, one boot sequence, and a pointer to the wiki instruction file) for pasting into a ChatGPT system prompt."),
43
+ projectPage: z
44
+ .string()
45
+ .optional()
46
+ .describe("Project page path for project-specific write-back (for example: projects/my-project.md)."),
47
+ inScopePaths: z
48
+ .array(z.string())
49
+ .optional()
50
+ .describe("Folders/pages the generated instruction file should treat as in-scope for retrieval and write-back."),
51
+ materialOutcomeDefinition: z
52
+ .string()
53
+ .optional()
54
+ .describe("Definition of what counts as a material outcome."),
55
+ includeExamples: z
56
+ .boolean()
57
+ .default(true)
58
+ .describe("If true, include concrete write-back snippets in extended output."),
59
+ });
60
+ function renderPointer(input) {
61
+ const slug = resolveSlug(input.projectName, input.projectPage);
62
+ const instructionFile = `projects/${slug}/instructions/gpt.md`;
63
+ return [
64
+ `# ${input.projectName} Assistant Instructions`,
65
+ "",
66
+ "Brains is your primary context source. Read before acting.",
67
+ "",
68
+ "**Only run this sequence if these instructions are present in your project system prompt.** When Brains MCP is connected but these instructions are not in the system prompt, tools are available passively — do not run any startup reads automatically.",
69
+ "",
70
+ "## Boot Sequence",
71
+ "At the start of every chat:",
72
+ "1. Determine task type: targeted (1–2 known pages) or broad/exploratory.",
73
+ "2. Targeted: `read_page` on the specific page(s).",
74
+ `3. Broad: \`pull_session_bundle(folder: "projects/${slug}", maxBytes: 150000, maxPages: 30)\` — bundle text is your working set.`,
75
+ `4. Read \`${instructionFile}\` and follow it.`,
76
+ "Do not begin work until these reads complete.",
77
+ ].join("\n");
78
+ }
79
+ function renderMinimal(projectName) {
80
+ return [
81
+ `# ${projectName} Assistant Instructions`,
82
+ "",
83
+ "Brains-first always. Determine mode at session open: targeted (1–2 known pages → `read_page`/`patch_page`) or bundle (exploratory → `pull_session_bundle`, work in memory, push at close-out). Bundle text is your wiki for the session — do not call `read_page` on bundled pages mid-session. No guessing: if missing, log as open loop. After material work, write back decisions + open loops. Push bundle at close-out or work is lost.",
84
+ ].join("\n");
85
+ }
86
+ function renderExtended(input, ctx) {
87
+ const mark = (path) => ctx.existingPaths.has(path) ? `\`${path}\` *(exists)*` : `\`${path}\` *(created on first use)*`;
88
+ const slug = resolveSlug(input.projectName, input.projectPage);
89
+ const openLoopRollup = `projects/${slug}/open-loops.md`;
90
+ const decisionsLog = `projects/${slug}/decisions/decisions-log.md`;
91
+ const nextActions = `projects/${slug}/state/next-actions.md`;
92
+ const lines = [
93
+ `# ${input.projectName} Assistant Instructions`,
94
+ "",
95
+ "## Source of Truth",
96
+ "Brains is the primary context source. Read relevant pages before reasoning or execution.",
97
+ "",
98
+ "## Session Start",
99
+ // health_check omitted on purpose — see the note in generateClaudeInstructions.
100
+ "1. Determine whether this is a targeted task (1–2 known pages) or a broad/exploratory task.",
101
+ "2. Targeted: `read_page` on the specific page(s).",
102
+ `3. Broad: \`pull_session_bundle(folder: "projects/${slug}", maxBytes: 150000, maxPages: 30)\`.`,
103
+ " - Once pulled, the bundle text is your working set. Do not call `read_page` on bundled pages.",
104
+ "",
105
+ "| Signal | Mode | Tools |",
106
+ "|---|---|---|",
107
+ "| Task names 1–2 specific pages | Targeted | `read_page` → edit → `update_page` |",
108
+ `| Task is exploratory or uses "look through / find / review" | Bundle | \`pull_session_bundle\` → work in memory → \`push_session_bundle\` |`,
109
+ "| Quick question, no writes | Remote-only | reads only |",
110
+ "",
111
+ "## Project Scope",
112
+ `Active project slug: \`${slug}\``,
113
+ ctx.subdirs.length > 0
114
+ ? `All new pages live under \`projects/${slug}/\`. Subdirs in use: ${ctx.subdirs.map((d) => `\`${d}/\``).join(", ")}. Full spec: \`instructions/brain-structure.md\`.`
115
+ : `All new pages live under \`projects/${slug}/\`. Subdirs: \`canonical/\`, \`decisions/\`, \`data/\`, \`history/\`, \`state/\`, plus project-specific (e.g. \`events/\`, \`scripts/\`). Full spec: \`instructions/brain-structure.md\`.`,
116
+ ...(ctx.subProjects.length > 0
117
+ ? [`Sub-projects: ${ctx.subProjects.map((sp) => `\`projects/${sp}/\``).join(", ")}.`]
118
+ : []),
119
+ "",
120
+ "In-scope folders/pages:",
121
+ ...(input.inScopePaths && input.inScopePaths.length > 0
122
+ ? input.inScopePaths.map((p) => `- ${p}`)
123
+ : [`- \`projects/${slug}/\` — everything this project owns`]),
124
+ "",
125
+ `Material outcome: ${input.materialOutcomeDefinition ?? "Any result that changes this project's state, plans, or committed decisions — not a question answered or a page merely read."}`,
126
+ "",
127
+ "## Required Write-Back",
128
+ // Same lazy-creation note as the Claude generator — see the comment there
129
+ // for why these are stated rather than scaffolded (D1).
130
+ ctx.exists
131
+ ? "Each target below is marked with whether it exists right now. Use `create_page` for one that does not — `patch_page` fails on a missing page."
132
+ : "**These pages are created on first use.** Only `readme.md` and this instruction file exist after `init_project`. Use `create_page` for a target that does not exist yet, and `patch_page` only once it does — `patch_page` fails on a missing page.",
133
+ "",
134
+ "After any substantial work, write back:",
135
+ `- Decisions → ${mark(decisionsLog)} (+ a dedicated \`decisions/<topic>.md\` if rationale-heavy)`,
136
+ `- Open loops → \`projects/${slug}/open-loops/<loop-slug>.md\` (one page per loop) + a one-line entry in ${mark(openLoopRollup)}`,
137
+ `- Next actions → ${mark(nextActions)}`,
138
+ "- Push the modified bundle at session end via `push_session_bundle` in pages mode, carrying each page's `revision` from the pull: `push_session_bundle(pages: [{name: \"...\", content: \"...\", revision: \"<revision-from-pull>\"}])`.",
139
+ "",
140
+ "Hub-and-spoke for loops: detail page + rollup entry. No standalone aggregate files at brain root.",
141
+ "",
142
+ "## Guardrails",
143
+ "- Do not invent missing facts — ask or log an open loop.",
144
+ "- Scope creep: log new ideas as open loops, do not implement them in the current session.",
145
+ "",
146
+ "## End-of-Task Check",
147
+ "- [ ] Relevant brain pages were read first.",
148
+ "- [ ] No unsupported assumptions.",
149
+ "- [ ] Decisions and open loops written back.",
150
+ "- [ ] Bundle pushed via `push_session_bundle` if writes were made.",
151
+ "",
152
+ "Failure condition: missing write-back or unpushed bundle — task is not done.",
153
+ "",
154
+ "## API Notes",
155
+ "- **`patch_page` ops** — field sets vary by type:",
156
+ " - `replace`: `find`, `replace` (optionally `occurrence`, `all`)",
157
+ " - `insert_after` / `insert_before`: `anchor`, `text` (optionally `occurrence`)",
158
+ " - `append`: `text`",
159
+ " - `replace_lines`: `startLine`, `endLine`, `text`",
160
+ ];
161
+ if (input.includeExamples) {
162
+ lines.push("", "## Write-Back Snippets", "### Decision", "**Decision:** [what was decided]", "**Why:** [reason]", "**Implications:** [what changes now]", "", "### Open Loop", `- [ ] [what is unresolved] → detail at \`projects/${slug}/open-loops/<loop-slug>.md\``, "", "### Next Action", `- [ ] [single concrete action, owner if known] → \`${nextActions}\``);
163
+ }
164
+ if (ctx.filing) {
165
+ lines.push("", "## Filing Override", `This project declares \`filing: ${ctx.filing}\` in its readme and is audited by that skill, not the Operator layout. Treat the paths above as defaults that may not apply.`);
166
+ }
167
+ if (ctx.preservedRegion) {
168
+ lines.push("", ctx.preservedRegion);
169
+ }
170
+ return lines.join("\n");
171
+ }
172
+ export async function generateGptInstructions(input, drive, userId = "") {
173
+ const projectPage = input.projectPage?.trim() || defaultProjectPage(input.projectName);
174
+ const slug = resolveSlug(input.projectName, input.projectPage);
175
+ const openLoopRollup = `projects/${slug}/open-loops.md`;
176
+ const decisionsLog = `projects/${slug}/decisions/decisions-log.md`;
177
+ const nextActions = `projects/${slug}/state/next-actions.md`;
178
+ const statusPage = `projects/${slug}/status.md`;
179
+ const candidatePaths = [decisionsLog, openLoopRollup, nextActions, statusPage, projectPage];
180
+ const ctx = drive && input.variant === "extended"
181
+ ? await gatherProjectContext(drive, slug, "gpt", candidatePaths, userId)
182
+ : { exists: false, pageCount: 0, subdirs: [], subProjects: [], existingPaths: new Set() };
183
+ const markdown = input.variant === "minimal"
184
+ ? renderMinimal(input.projectName)
185
+ : input.variant === "pointer"
186
+ ? renderPointer(input)
187
+ : renderExtended(input, ctx);
188
+ return {
189
+ success: true,
190
+ platform: "gpt",
191
+ variant: input.variant,
192
+ projectName: input.projectName,
193
+ projectPage,
194
+ writeBackTargets: [decisionsLog, openLoopRollup, projectPage],
195
+ projectContext: {
196
+ exists: ctx.exists,
197
+ pageCount: ctx.pageCount,
198
+ subdirs: ctx.subdirs,
199
+ subProjects: ctx.subProjects,
200
+ ...(ctx.filing ? { filing: ctx.filing } : {}),
201
+ existingTargets: candidatePaths.filter((cp) => ctx.existingPaths.has(cp)),
202
+ missingTargets: candidatePaths.filter((cp) => !ctx.existingPaths.has(cp)),
203
+ preservedDomainContext: ctx.preservedRegion !== undefined,
204
+ },
205
+ markdown,
206
+ };
207
+ }
208
+ //# sourceMappingURL=generateGptInstructions.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"generateGptInstructions.js","sourceRoot":"","sources":["../../src/tools/generateGptInstructions.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,12 @@
1
+ import { z } from "zod";
2
+ import { type AccessContext } from "../governance/accessControl.js";
3
+ export declare const getBacklinksInputSchema: z.ZodObject<{
4
+ name: z.ZodString;
5
+ }, "strip", z.ZodTypeAny, {
6
+ name: string;
7
+ }, {
8
+ name: string;
9
+ }>;
10
+ export type GetBacklinksInput = z.infer<typeof getBacklinksInputSchema>;
11
+ export declare function getBacklinks(input: GetBacklinksInput, userId?: string, accessCtx?: AccessContext): Promise<object>;
12
+ //# sourceMappingURL=getBacklinks.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"getBacklinks.d.ts","sourceRoot":"","sources":["../../src/tools/getBacklinks.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAExB,OAAO,EACL,KAAK,aAAa,EAGnB,MAAM,gCAAgC,CAAC;AAExC,eAAO,MAAM,uBAAuB;;;;;;EAElC,CAAC;AAEH,MAAM,MAAM,iBAAiB,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,uBAAuB,CAAC,CAAC;AAExE,wBAAsB,YAAY,CAChC,KAAK,EAAE,iBAAiB,EACxB,MAAM,SAAK,EACX,SAAS,GAAE,aAAsC,GAChD,OAAO,CAAC,MAAM,CAAC,CAKjB"}
@@ -0,0 +1,13 @@
1
+ import { z } from "zod";
2
+ import { getPostgresSearchIndex } from "../search/postgresIndex.js";
3
+ import { DEFAULT_ACCESS_CONTEXT, isHiveModeEnabled, } from "../governance/accessControl.js";
4
+ export const getBacklinksInputSchema = z.object({
5
+ name: z.string().describe("Page name (with or without .md extension)"),
6
+ });
7
+ export async function getBacklinks(input, userId = "", accessCtx = DEFAULT_ACCESS_CONTEXT) {
8
+ const name = input.name.endsWith(".md") ? input.name : `${input.name}.md`;
9
+ const accessLevel = isHiveModeEnabled() ? accessCtx.userAccessLevel : undefined;
10
+ const backlinks = await getPostgresSearchIndex().getBacklinks(name, userId, accessLevel);
11
+ return { name, backlinks };
12
+ }
13
+ //# sourceMappingURL=getBacklinks.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"getBacklinks.js","sourceRoot":"","sources":["../../src/tools/getBacklinks.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AACxB,OAAO,EAAE,sBAAsB,EAAE,MAAM,4BAA4B,CAAC;AACpE,OAAO,EAEL,sBAAsB,EACtB,iBAAiB,GAClB,MAAM,gCAAgC,CAAC;AAExC,MAAM,CAAC,MAAM,uBAAuB,GAAG,CAAC,CAAC,MAAM,CAAC;IAC9C,IAAI,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,2CAA2C,CAAC;CACvE,CAAC,CAAC;AAIH,MAAM,CAAC,KAAK,UAAU,YAAY,CAChC,KAAwB,EACxB,MAAM,GAAG,EAAE,EACX,YAA2B,sBAAsB;IAEjD,MAAM,IAAI,GAAG,KAAK,CAAC,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,GAAG,KAAK,CAAC,IAAI,KAAK,CAAC;IAC1E,MAAM,WAAW,GAAG,iBAAiB,EAAE,CAAC,CAAC,CAAC,SAAS,CAAC,eAAe,CAAC,CAAC,CAAC,SAAS,CAAC;IAChF,MAAM,SAAS,GAAG,MAAM,sBAAsB,EAAE,CAAC,YAAY,CAAC,IAAI,EAAE,MAAM,EAAE,WAAW,CAAC,CAAC;IACzF,OAAO,EAAE,IAAI,EAAE,SAAS,EAAE,CAAC;AAC7B,CAAC"}
@@ -0,0 +1,12 @@
1
+ import { z } from "zod";
2
+ import { type AccessContext } from "../governance/accessControl.js";
3
+ export declare const getRelatedInputSchema: z.ZodObject<{
4
+ name: z.ZodString;
5
+ }, "strip", z.ZodTypeAny, {
6
+ name: string;
7
+ }, {
8
+ name: string;
9
+ }>;
10
+ export type GetRelatedInput = z.infer<typeof getRelatedInputSchema>;
11
+ export declare function getRelated(input: GetRelatedInput, userId?: string, accessCtx?: AccessContext): Promise<object>;
12
+ //# sourceMappingURL=getRelated.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"getRelated.d.ts","sourceRoot":"","sources":["../../src/tools/getRelated.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAExB,OAAO,EACL,KAAK,aAAa,EAGnB,MAAM,gCAAgC,CAAC;AAExC,eAAO,MAAM,qBAAqB;;;;;;EAEhC,CAAC;AAEH,MAAM,MAAM,eAAe,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,qBAAqB,CAAC,CAAC;AAEpE,wBAAsB,UAAU,CAC9B,KAAK,EAAE,eAAe,EACtB,MAAM,SAAK,EACX,SAAS,GAAE,aAAsC,GAChD,OAAO,CAAC,MAAM,CAAC,CAKjB"}
@@ -0,0 +1,13 @@
1
+ import { z } from "zod";
2
+ import { getPostgresSearchIndex } from "../search/postgresIndex.js";
3
+ import { DEFAULT_ACCESS_CONTEXT, isHiveModeEnabled, } from "../governance/accessControl.js";
4
+ export const getRelatedInputSchema = z.object({
5
+ name: z.string().describe("Page name (with or without .md extension)"),
6
+ });
7
+ export async function getRelated(input, userId = "", accessCtx = DEFAULT_ACCESS_CONTEXT) {
8
+ const name = input.name.endsWith(".md") ? input.name : `${input.name}.md`;
9
+ const accessLevel = isHiveModeEnabled() ? accessCtx.userAccessLevel : undefined;
10
+ const related = await getPostgresSearchIndex().getRelatedPages(name, userId, accessLevel);
11
+ return { name, related };
12
+ }
13
+ //# sourceMappingURL=getRelated.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"getRelated.js","sourceRoot":"","sources":["../../src/tools/getRelated.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AACxB,OAAO,EAAE,sBAAsB,EAAE,MAAM,4BAA4B,CAAC;AACpE,OAAO,EAEL,sBAAsB,EACtB,iBAAiB,GAClB,MAAM,gCAAgC,CAAC;AAExC,MAAM,CAAC,MAAM,qBAAqB,GAAG,CAAC,CAAC,MAAM,CAAC;IAC5C,IAAI,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,2CAA2C,CAAC;CACvE,CAAC,CAAC;AAIH,MAAM,CAAC,KAAK,UAAU,UAAU,CAC9B,KAAsB,EACtB,MAAM,GAAG,EAAE,EACX,YAA2B,sBAAsB;IAEjD,MAAM,IAAI,GAAG,KAAK,CAAC,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,GAAG,KAAK,CAAC,IAAI,KAAK,CAAC;IAC1E,MAAM,WAAW,GAAG,iBAAiB,EAAE,CAAC,CAAC,CAAC,SAAS,CAAC,eAAe,CAAC,CAAC,CAAC,SAAS,CAAC;IAChF,MAAM,OAAO,GAAG,MAAM,sBAAsB,EAAE,CAAC,eAAe,CAAC,IAAI,EAAE,MAAM,EAAE,WAAW,CAAC,CAAC;IAC1F,OAAO,EAAE,IAAI,EAAE,OAAO,EAAE,CAAC;AAC3B,CAAC"}
@@ -0,0 +1,5 @@
1
+ import { z } from "zod";
2
+ import type { StorageClient } from "../storage/client.js";
3
+ export declare const healthCheckInputSchema: z.ZodObject<{}, "strip", z.ZodTypeAny, {}, {}>;
4
+ export declare function healthCheck(client: StorageClient, userId?: string): Promise<object>;
5
+ //# sourceMappingURL=healthCheck.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"healthCheck.d.ts","sourceRoot":"","sources":["../../src/tools/healthCheck.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AACxB,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,sBAAsB,CAAC;AAG1D,eAAO,MAAM,sBAAsB,gDAAe,CAAC;AA2CnD,wBAAsB,WAAW,CAAC,MAAM,EAAE,aAAa,EAAE,MAAM,SAAK,GAAG,OAAO,CAAC,MAAM,CAAC,CA0IrF"}
@@ -0,0 +1,167 @@
1
+ import { z } from "zod";
2
+ import { getPostgresSearchIndex } from "../search/postgresIndex.js";
3
+ export const healthCheckInputSchema = z.object({});
4
+ function isUncommitted(committedAt) {
5
+ return committedAt === "—" || committedAt === "-" || !committedAt;
6
+ }
7
+ function parseSessionLog(content) {
8
+ const entries = [];
9
+ const lines = content.split("\n");
10
+ // Find the header separator line (starts with |---) to locate table rows
11
+ let dataStart = -1;
12
+ for (let i = 0; i < lines.length; i++) {
13
+ if (lines[i].trimStart().startsWith("|---") || lines[i].trimStart().startsWith("| ---")) {
14
+ dataStart = i + 1;
15
+ break;
16
+ }
17
+ }
18
+ if (dataStart === -1)
19
+ return entries;
20
+ for (let i = dataStart; i < lines.length; i++) {
21
+ const line = lines[i].trim();
22
+ if (!line.startsWith("|"))
23
+ continue;
24
+ const cells = line.split("|").map((c) => c.trim()).filter((_, idx, arr) => idx > 0 && idx < arr.length - 1);
25
+ if (cells.length < 5)
26
+ continue;
27
+ entries.push({
28
+ session_id: cells[0],
29
+ started_at: cells[1],
30
+ committed_at: cells[2],
31
+ agent: cells[3],
32
+ tags_pulled: cells[4],
33
+ });
34
+ }
35
+ return entries;
36
+ }
37
+ export async function healthCheck(client, userId = "") {
38
+ const startMs = Date.now();
39
+ const requiredFolders = [
40
+ "instructions",
41
+ "canonical",
42
+ "data",
43
+ "decisions",
44
+ "history",
45
+ "projects",
46
+ ];
47
+ const requiredSeedPages = [
48
+ "instructions/brain-routing.md",
49
+ "decisions/readme.md",
50
+ "history/readme.md",
51
+ ];
52
+ // Run storage check and Postgres checks in parallel to reduce latency
53
+ const pgIndex = getPostgresSearchIndex();
54
+ // Round-trip instrumentation (GH #412). Server-side latency to Supabase is
55
+ // the dominant cost of every authenticated request — the SQL itself runs in
56
+ // ~1ms per pg_stat_statements, so anything above that is network, TLS and
57
+ // PostgREST overhead. Measuring it here makes that visible directly instead
58
+ // of having to infer it by differencing endpoint timings from outside.
59
+ const timed = async (fn) => {
60
+ const t0 = Date.now();
61
+ const value = await fn();
62
+ return [value, Date.now() - t0];
63
+ };
64
+ const [[storageResult, storageMs], [pgPing, indexMs], taxonomyResult] = await Promise.all([
65
+ timed(() => client.verifyAccess().then(() => ({ ok: true })).catch((err) => ({
66
+ ok: false,
67
+ error: err instanceof Error ? err.message : String(err),
68
+ }))),
69
+ timed(() => pgIndex.ping(userId)),
70
+ userId ? pgIndex.checkTaxonomy(userId, requiredSeedPages, requiredFolders).catch(() => null) : Promise.resolve(null),
71
+ ]);
72
+ const storageStatus = storageResult.ok ? "ok" : "error";
73
+ const storageError = storageResult.ok ? undefined : storageResult.error;
74
+ let missingSeedPages = [];
75
+ let missingFolders = [];
76
+ if (!userId) {
77
+ // No user context (api-key / connector-key mode): taxonomy is user-scoped and
78
+ // cannot be verified against the global drive. Skip the check — not degraded.
79
+ }
80
+ else if (pgPing.ok && taxonomyResult) {
81
+ // Targeted point lookups (exact name / folder prefix) instead of diffing against
82
+ // a bulk listPages() fetch — correct regardless of wiki size (GH #358: a bulk
83
+ // fetch ordered by modified.desc silently drops old seed pages past PostgREST's
84
+ // default row cap on large wikis, causing false "missing" reports).
85
+ missingSeedPages = taxonomyResult.missingSeedPages;
86
+ missingFolders = taxonomyResult.missingFolders;
87
+ }
88
+ else {
89
+ // Postgres not configured or unavailable — fall back to a storage listing.
90
+ try {
91
+ const fileEntries = await client.listFiles();
92
+ const pageNames = new Set(fileEntries.map((e) => e.name));
93
+ missingSeedPages = requiredSeedPages.filter((name) => !pageNames.has(name));
94
+ const presentFolders = new Set([...pageNames]
95
+ .filter((n) => n.includes("/"))
96
+ .map((n) => n.split("/")[0]));
97
+ missingFolders = requiredFolders.filter((folder) => !presentFolders.has(folder));
98
+ }
99
+ catch {
100
+ // If listing also fails, leave both arrays empty (storage error is already surfaced above).
101
+ }
102
+ }
103
+ // Session log dirty detection
104
+ let sessionsStatus = "no_log";
105
+ let unpushedCount = 0;
106
+ let sessionsWarning;
107
+ try {
108
+ const sessionLogFile = await client.readFile("sync/session-log.md");
109
+ const entries = parseSessionLog(sessionLogFile.content);
110
+ unpushedCount = entries.filter((e) => isUncommitted(e.committed_at)).length;
111
+ if (unpushedCount > 0) {
112
+ sessionsStatus = "dirty";
113
+ sessionsWarning = `${unpushedCount} session${unpushedCount === 1 ? " was" : "s were"} started but never pushed. Check previous chat before continuing.`;
114
+ }
115
+ else {
116
+ sessionsStatus = "ok";
117
+ }
118
+ }
119
+ catch {
120
+ // No session log yet — not an error condition
121
+ sessionsStatus = "no_log";
122
+ }
123
+ return {
124
+ status: storageStatus === "ok" ? "healthy" : "degraded",
125
+ subject: userId || undefined,
126
+ storage: {
127
+ type: "local",
128
+ status: storageStatus,
129
+ location: client.getStorageLocation(),
130
+ // One Storage round trip, server-side — compare against index.pingMs.
131
+ verifyMs: storageMs,
132
+ ...(storageError ? { error: storageError } : {}),
133
+ },
134
+ backup: {
135
+ enabled: process.env.DRIVE_BACKUP_ENABLED === "true",
136
+ },
137
+ taxonomy: {
138
+ requiredFolders,
139
+ missingFolders,
140
+ requiredSeedPages,
141
+ missingSeedPages,
142
+ status: missingFolders.length === 0 && missingSeedPages.length === 0
143
+ ? "ok"
144
+ : "degraded",
145
+ },
146
+ index: {
147
+ backend: "postgres",
148
+ configured: pgIndex.isConfigured(),
149
+ status: pgPing.ok ? "ok" : "degraded",
150
+ // One PostgREST round trip (HEAD + count=exact), server-side. The query
151
+ // itself executes in ~1ms, so this figure is almost entirely network,
152
+ // TLS and PostgREST overhead — the dominant cost of every authenticated
153
+ // request (GH #412).
154
+ pingMs: indexMs,
155
+ ...(pgPing.rowCount !== undefined ? { rowCount: pgPing.rowCount } : {}),
156
+ ...(pgPing.error ? { error: pgPing.error } : {}),
157
+ },
158
+ sessions: {
159
+ status: sessionsStatus,
160
+ ...(sessionsStatus === "dirty" ? { unpushedCount, warning: sessionsWarning } : {}),
161
+ },
162
+ uptimeMs: process.uptime() * 1000,
163
+ responseTimeMs: Date.now() - startMs,
164
+ timestamp: new Date().toISOString(),
165
+ };
166
+ }
167
+ //# sourceMappingURL=healthCheck.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"healthCheck.js","sourceRoot":"","sources":["../../src/tools/healthCheck.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,36 @@
1
+ import { z } from "zod";
2
+ import type { StorageClient } from "../storage/client.js";
3
+ export declare const importBrainSourceInputSchema: z.ZodObject<{
4
+ sourceRoot: z.ZodString;
5
+ execute: z.ZodDefault<z.ZodBoolean>;
6
+ maxFiles: z.ZodDefault<z.ZodNumber>;
7
+ skipRawCatalogs: z.ZodDefault<z.ZodBoolean>;
8
+ excludeDirs: z.ZodDefault<z.ZodArray<z.ZodString, "many">>;
9
+ chunkSize: z.ZodDefault<z.ZodNumber>;
10
+ runLabel: z.ZodOptional<z.ZodString>;
11
+ logTiming: z.ZodDefault<z.ZodBoolean>;
12
+ previewLimit: z.ZodDefault<z.ZodNumber>;
13
+ }, "strip", z.ZodTypeAny, {
14
+ logTiming: boolean;
15
+ sourceRoot: string;
16
+ execute: boolean;
17
+ maxFiles: number;
18
+ skipRawCatalogs: boolean;
19
+ excludeDirs: string[];
20
+ chunkSize: number;
21
+ previewLimit: number;
22
+ runLabel?: string | undefined;
23
+ }, {
24
+ sourceRoot: string;
25
+ runLabel?: string | undefined;
26
+ logTiming?: boolean | undefined;
27
+ execute?: boolean | undefined;
28
+ maxFiles?: number | undefined;
29
+ skipRawCatalogs?: boolean | undefined;
30
+ excludeDirs?: string[] | undefined;
31
+ chunkSize?: number | undefined;
32
+ previewLimit?: number | undefined;
33
+ }>;
34
+ export type ImportBrainSourceInput = z.infer<typeof importBrainSourceInputSchema>;
35
+ export declare function importBrainSource(drive: StorageClient, input: ImportBrainSourceInput, userId?: string): Promise<object>;
36
+ //# sourceMappingURL=importBrainSource.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"importBrainSource.d.ts","sourceRoot":"","sources":["../../src/tools/importBrainSource.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AACxB,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,sBAAsB,CAAC;AAkB1D,eAAO,MAAM,4BAA4B;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EA8CvC,CAAC;AAEH,MAAM,MAAM,sBAAsB,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,4BAA4B,CAAC,CAAC;AAclF,wBAAsB,iBAAiB,CACtC,KAAK,EAAE,aAAa,EACpB,KAAK,EAAE,sBAAsB,EAC7B,MAAM,SAAK,GACT,OAAO,CAAC,MAAM,CAAC,CAyKjB"}