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,443 @@
1
+ import fs from "fs/promises";
2
+ import path from "path";
3
+ import { fileURLToPath } from "url";
4
+ import { z } from "zod";
5
+ import { resolveIndexOwnerSubject } from "../storage/client.js";
6
+ import { parsePage } from "../wiki/frontmatter.js";
7
+ import { getPostgresSearchIndex } from "../search/postgresIndex.js";
8
+ import { DriveNotFoundError } from "../drive/errors.js";
9
+ import { appendLogEntry } from "../wiki/log.js";
10
+ import { generateClaudeInstructions, generateClaudeInstructionsInputSchema, } from "./generateClaudeInstructions.js";
11
+ import { generateGptInstructions, generateGptInstructionsInputSchema, } from "./generateGptInstructions.js";
12
+ const __filename = fileURLToPath(import.meta.url);
13
+ const __dirname = path.dirname(__filename);
14
+ const SEED_DIR = path.resolve(__dirname, "../../seed/instructions");
15
+ const FOUNDATION_SEEDS = [
16
+ "agent-instruction-schema-v1.md",
17
+ "agent-instruction-template-v1.md",
18
+ "brain-routing.md",
19
+ "brain-structure.md",
20
+ "brains-protocol.md",
21
+ "structure-audit.md",
22
+ "session-sync-ritual.md",
23
+ ];
24
+ /**
25
+ * Cross-project trackers. These live at the **brain root**, not under
26
+ * `projects/`.
27
+ *
28
+ * They used to be created at `projects/active-*.md`, which breaks
29
+ * brain-structure.md invariant 1 — `projects/` holds only `<slug>/` folders
30
+ * plus a single `readme.md`, and cross-project trackers belong at the root.
31
+ * structure-audit.md's sanctioned root set already lists `active-*.md`, so
32
+ * every wiki `init_project` touched was seeded into a state its own linter
33
+ * flags.
34
+ */
35
+ const ACTIVE_TRACKING_PAGES = [
36
+ "active-open-loops.md",
37
+ "active-unanswered-questions.md",
38
+ "active-next-actions.md",
39
+ "decisions/core-decisions-log.md",
40
+ ];
41
+ /**
42
+ * Where each tracker was created before the paths were corrected.
43
+ *
44
+ * Existing wikis carry the legacy copies and there is no migration here — if
45
+ * one is present we keep using it rather than creating a root twin, because
46
+ * two pages holding the same tracker is invariant 5 (diverged duplicates),
47
+ * which is worse than one page at a non-compliant path. Move the legacy page
48
+ * with `move_page` to adopt the compliant path.
49
+ */
50
+ const LEGACY_ACTIVE_TRACKING_PATHS = {
51
+ "active-open-loops.md": "projects/active-open-loops.md",
52
+ "active-unanswered-questions.md": "projects/active-unanswered-questions.md",
53
+ "active-next-actions.md": "projects/active-next-actions.md",
54
+ };
55
+ export function slugify(name) {
56
+ return name
57
+ .toLowerCase()
58
+ .replace(/[^a-z0-9\s-]/g, "")
59
+ .trim()
60
+ .replace(/[\s_]+/g, "-")
61
+ .replace(/-+/g, "-")
62
+ .replace(/^-+|-+$/g, "");
63
+ }
64
+ export const initProjectInputSchema = z.object({
65
+ projectSlug: z
66
+ .string()
67
+ .optional()
68
+ .describe("Kebab-case project identifier (e.g. my-project). Auto-derived from projectName if omitted — omit when the user provides a single word or a name without spaces."),
69
+ projectName: z
70
+ .string()
71
+ .min(1)
72
+ .describe("Human-readable project name used in instruction headers and the project readme."),
73
+ platform: z
74
+ .enum(["claude", "gpt"])
75
+ .default("claude")
76
+ .describe("Target platform for generated instructions."),
77
+ variant: z
78
+ .enum(["minimal", "extended"])
79
+ .default("extended")
80
+ .describe("Instruction verbosity level. 'extended' is recommended."),
81
+ writeInstructionFile: z
82
+ .boolean()
83
+ .default(true)
84
+ .describe("If true, save rendered instructions to projects/<slug>/instructions/<platform>.md."),
85
+ seedFoundation: z
86
+ .boolean()
87
+ .default(true)
88
+ .describe("If true, copy missing foundation seed pages from seed/instructions/ into the brain."),
89
+ ensureActiveTrackingPages: z
90
+ .boolean()
91
+ .default(true)
92
+ .describe("If true, create stub active tracking pages if they do not exist."),
93
+ execute: z
94
+ .boolean()
95
+ .default(false)
96
+ .describe("If false, returns a preview of planned operations. If true, applies the changes."),
97
+ });
98
+ function todayIso() {
99
+ return new Date().toISOString().slice(0, 10);
100
+ }
101
+ function projectReadmeContent(projectSlug, projectName, platform, instructionFilePath) {
102
+ return [
103
+ "---",
104
+ `title: ${projectName}`,
105
+ `updated: ${todayIso()}`,
106
+ `tags: [${projectSlug}]`,
107
+ "status: active",
108
+ `summary: Project readme for ${projectName}.`,
109
+ "---",
110
+ "",
111
+ `# ${projectName}`,
112
+ "",
113
+ `Project page for ${projectName}.`,
114
+ "",
115
+ "## Setup",
116
+ "",
117
+ `- Initialized: ${todayIso()}`,
118
+ `- Platform: ${platform}`,
119
+ `- Instructions: \`${instructionFilePath}\``,
120
+ "",
121
+ "## Open Loops",
122
+ "",
123
+ "- [ ] Boot sequence not yet verified in a new chat",
124
+ "",
125
+ ].join("\n");
126
+ }
127
+ function initDecisionEntry(projectSlug, projectName, platform, variant, instructionFilePath) {
128
+ return [
129
+ `### ${todayIso()} Init: ${projectName}`,
130
+ "",
131
+ `- Created project \`${projectSlug}\` via \`init_project\``,
132
+ `- Platform: ${platform}, variant: ${variant}`,
133
+ `- Instruction file: \`${instructionFilePath}\``,
134
+ `- Tracking pages: seeded`,
135
+ "",
136
+ ].join("\n");
137
+ }
138
+ function initOpenLoopEntry(projectSlug) {
139
+ return `- [ ] ${projectSlug}: Boot sequence not yet verified in a new chat\n`;
140
+ }
141
+ async function appendToWikiPage(drive, pagePath, content) {
142
+ const existing = await drive
143
+ .readFile(pagePath)
144
+ .catch((err) => err instanceof DriveNotFoundError ? null : Promise.reject(err));
145
+ if (!existing)
146
+ return false;
147
+ const base = existing.content.endsWith("\n")
148
+ ? existing.content
149
+ : existing.content + "\n";
150
+ await drive.updateFile(existing.fileId, base + content, existing.revision);
151
+ return true;
152
+ }
153
+ /**
154
+ * Resolve a tracker to the path this wiki actually uses: the legacy
155
+ * `projects/active-*.md` if it is already there, otherwise the compliant
156
+ * root path.
157
+ */
158
+ async function resolveTrackingPath(drive, canonicalPath) {
159
+ const legacyPath = LEGACY_ACTIVE_TRACKING_PATHS[canonicalPath];
160
+ if (!legacyPath)
161
+ return canonicalPath;
162
+ const legacy = await drive
163
+ .readFile(legacyPath)
164
+ .catch((err) => err instanceof DriveNotFoundError ? null : Promise.reject(err));
165
+ return legacy ? legacyPath : canonicalPath;
166
+ }
167
+ function activeTrackingPageContent(pagePath) {
168
+ // Keyed on the compliant root path; a legacy projects/ copy gets the same
169
+ // body.
170
+ const key = pagePath.startsWith("projects/active-")
171
+ ? pagePath.slice("projects/".length)
172
+ : pagePath;
173
+ const configs = {
174
+ "active-open-loops.md": {
175
+ title: "Active Open Loops",
176
+ tags: "active, tracking",
177
+ summary: "Cross-project active open loops tracker.",
178
+ heading: "## Open Loops",
179
+ },
180
+ "active-unanswered-questions.md": {
181
+ title: "Active Unanswered Questions",
182
+ tags: "active, tracking",
183
+ summary: "Cross-project active unanswered questions tracker.",
184
+ heading: "## Unanswered Questions",
185
+ },
186
+ "active-next-actions.md": {
187
+ title: "Active Next Actions",
188
+ tags: "active, tracking",
189
+ summary: "Cross-project active next actions tracker.",
190
+ heading: "## Next Actions",
191
+ },
192
+ "decisions/core-decisions-log.md": {
193
+ title: "Core Decisions Log",
194
+ tags: "decisions, tracking",
195
+ summary: "Cross-project core decisions log.",
196
+ heading: "## Decisions",
197
+ },
198
+ };
199
+ const cfg = configs[key] ?? {
200
+ title: pagePath,
201
+ tags: "tracking",
202
+ summary: pagePath,
203
+ heading: "## Content",
204
+ };
205
+ return [
206
+ "---",
207
+ `title: ${cfg.title}`,
208
+ `updated: ${todayIso()}`,
209
+ `tags: [${cfg.tags}]`,
210
+ "status: active",
211
+ `summary: ${cfg.summary}`,
212
+ "---",
213
+ "",
214
+ cfg.heading,
215
+ "",
216
+ ].join("\n");
217
+ }
218
+ async function buildInstructionMarkdown(projectSlug, projectName, platform, variant, drive, userId = "") {
219
+ const projectPage = `projects/${projectSlug}/readme.md`;
220
+ if (platform === "claude") {
221
+ const result = (await generateClaudeInstructions(generateClaudeInstructionsInputSchema.parse({
222
+ projectName,
223
+ variant,
224
+ projectPage,
225
+ }), drive, userId));
226
+ return result.markdown;
227
+ }
228
+ else {
229
+ const result = (await generateGptInstructions(generateGptInstructionsInputSchema.parse({
230
+ projectName,
231
+ variant,
232
+ projectPage,
233
+ }), drive, userId));
234
+ return result.markdown;
235
+ }
236
+ }
237
+ async function buildPointerMarkdown(projectSlug, projectName, platform) {
238
+ const projectPage = `projects/${projectSlug}/readme.md`;
239
+ if (platform === "claude") {
240
+ const result = (await generateClaudeInstructions(generateClaudeInstructionsInputSchema.parse({
241
+ projectName,
242
+ variant: "pointer",
243
+ projectPage,
244
+ })));
245
+ return result.markdown;
246
+ }
247
+ else {
248
+ const result = (await generateGptInstructions(generateGptInstructionsInputSchema.parse({
249
+ projectName,
250
+ variant: "pointer",
251
+ projectPage,
252
+ })));
253
+ return result.markdown;
254
+ }
255
+ }
256
+ export async function initProject(drive, input, userId = "") {
257
+ const { projectSlug: rawSlug, projectName, platform, variant, writeInstructionFile, seedFoundation, ensureActiveTrackingPages, execute, } = input;
258
+ const projectSlug = rawSlug ?? slugify(projectName);
259
+ const slugPattern = /^[a-z0-9]+(-[a-z0-9]+)*$/;
260
+ if (!slugPattern.test(projectSlug)) {
261
+ throw new Error(`Invalid projectSlug "${projectSlug}": must be kebab-case (lowercase letters, digits, hyphens only; no leading or trailing hyphens).`);
262
+ }
263
+ const instructionFilePath = `projects/${projectSlug}/instructions/${platform}.md`;
264
+ const instructionMarkdown = await buildInstructionMarkdown(projectSlug, projectName, platform, variant, drive, userId);
265
+ const systemPromptMarkdown = await buildPointerMarkdown(projectSlug, projectName, platform);
266
+ const operations = [];
267
+ // 1. Project readme
268
+ const projectReadmePath = `projects/${projectSlug}/readme.md`;
269
+ {
270
+ const existing = await drive
271
+ .readFile(projectReadmePath)
272
+ .catch((err) => err instanceof DriveNotFoundError ? null : Promise.reject(err));
273
+ operations.push({
274
+ path: projectReadmePath,
275
+ action: existing ? "unchanged" : "create",
276
+ });
277
+ }
278
+ // 2. Instruction file
279
+ if (writeInstructionFile) {
280
+ const existing = await drive
281
+ .readFile(instructionFilePath)
282
+ .catch((err) => err instanceof DriveNotFoundError ? null : Promise.reject(err));
283
+ if (!existing) {
284
+ operations.push({ path: instructionFilePath, action: "create" });
285
+ }
286
+ else if (existing.content === instructionMarkdown) {
287
+ operations.push({ path: instructionFilePath, action: "unchanged" });
288
+ }
289
+ else {
290
+ operations.push({
291
+ path: instructionFilePath,
292
+ action: "exists",
293
+ reason: "File exists with different content. Re-run with explicit overwrite if needed.",
294
+ });
295
+ }
296
+ }
297
+ // 3. Foundation seed pages
298
+ if (seedFoundation) {
299
+ for (const basename of FOUNDATION_SEEDS) {
300
+ const seedPath = `instructions/${basename}`;
301
+ const existing = await drive
302
+ .readFile(seedPath)
303
+ .catch((err) => err instanceof DriveNotFoundError ? null : Promise.reject(err));
304
+ operations.push({
305
+ path: seedPath,
306
+ action: existing ? "unchanged" : "create",
307
+ });
308
+ }
309
+ }
310
+ // 4. Active tracking pages
311
+ if (ensureActiveTrackingPages) {
312
+ for (const canonicalPath of ACTIVE_TRACKING_PAGES) {
313
+ const trackingPath = await resolveTrackingPath(drive, canonicalPath);
314
+ const existing = await drive
315
+ .readFile(trackingPath)
316
+ .catch((err) => err instanceof DriveNotFoundError ? null : Promise.reject(err));
317
+ operations.push({
318
+ path: trackingPath,
319
+ action: existing ? "unchanged" : "create",
320
+ });
321
+ }
322
+ }
323
+ if (!execute) {
324
+ const skippedCount = operations.filter((op) => op.action !== "create").length;
325
+ return {
326
+ success: true,
327
+ mode: "preview",
328
+ projectSlug,
329
+ projectName,
330
+ platform,
331
+ instructionFilePath,
332
+ instructionMarkdown,
333
+ systemPromptMarkdown,
334
+ operations,
335
+ appliedCount: 0,
336
+ skippedCount,
337
+ errors: [],
338
+ };
339
+ }
340
+ // Execute mode: apply create operations
341
+ const errors = [];
342
+ let appliedCount = 0;
343
+ let skippedCount = 0;
344
+ for (const op of operations) {
345
+ if (op.action !== "create") {
346
+ skippedCount++;
347
+ continue;
348
+ }
349
+ try {
350
+ let content;
351
+ if (op.path === projectReadmePath) {
352
+ content = projectReadmeContent(projectSlug, projectName, platform, instructionFilePath);
353
+ }
354
+ else if (op.path === instructionFilePath) {
355
+ // Frontmatter, same as every other page this tool writes. Without it
356
+ // read_page returned `frontmatter: {}` plus missing-title/updated
357
+ // warnings, and the indexed row had no title to match on — the
358
+ // instruction file was the one page in a project that did not satisfy
359
+ // the schema the rest of the wiki is held to (D5, GH #443).
360
+ content = [
361
+ "---",
362
+ `title: ${projectName} Agent Instructions`,
363
+ `updated: ${todayIso()}`,
364
+ `tags: [${projectSlug}, instructions]`,
365
+ "status: active",
366
+ `summary: Agent instructions for ${projectName} (${platform}).`,
367
+ "---",
368
+ "",
369
+ instructionMarkdown,
370
+ ].join("\n");
371
+ }
372
+ else if (op.path.startsWith("instructions/") &&
373
+ FOUNDATION_SEEDS.some((s) => op.path.endsWith(s))) {
374
+ const basename = path.basename(op.path);
375
+ content = await fs.readFile(path.join(SEED_DIR, basename), "utf8");
376
+ }
377
+ else {
378
+ content = activeTrackingPageContent(op.path);
379
+ }
380
+ const written = await drive.createFile(op.path, content);
381
+ // Index it. drive.createFile only writes Storage, and every discovery
382
+ // path — list_pages, search_pages, pull_session_bundle — reads Postgres.
383
+ // Without this a freshly created project is invisible: measured 0 rows
384
+ // indexed against 2 objects in Storage, so the first bundle pull after
385
+ // init_project returned nothing at all (GH #433).
386
+ const parsedNew = parsePage(content);
387
+ await getPostgresSearchIndex()
388
+ .upsertPage(op.path, parsedNew.frontmatter, content, written.revision, written.modifiedTime, resolveIndexOwnerSubject(drive, op.path, userId))
389
+ .catch((err) => {
390
+ console.warn(`[init_project] index upsert failed for '${op.path}':`, err instanceof Error ? err.message : err);
391
+ });
392
+ appliedCount++;
393
+ }
394
+ catch (err) {
395
+ op.action = "error";
396
+ op.reason = err instanceof Error ? err.message : String(err);
397
+ errors.push({ path: op.path, reason: op.reason });
398
+ }
399
+ }
400
+ // Write-back: only when the project readme was freshly created (first init).
401
+ // Appends an init decision entry and an open-loop reminder to cross-project trackers.
402
+ const readmeWasCreated = operations.some((op) => op.path === projectReadmePath && op.action === "create");
403
+ const writeBack = {
404
+ decisions: false,
405
+ openLoops: false,
406
+ };
407
+ if (readmeWasCreated && errors.length === 0) {
408
+ const decisionEntry = initDecisionEntry(projectSlug, projectName, platform, variant, instructionFilePath);
409
+ const openLoopEntry = initOpenLoopEntry(projectSlug);
410
+ const openLoopsPath = await resolveTrackingPath(drive, "active-open-loops.md");
411
+ await Promise.all([
412
+ appendToWikiPage(drive, "decisions/core-decisions-log.md", decisionEntry)
413
+ .then((ok) => { writeBack.decisions = ok; })
414
+ .catch(() => { }),
415
+ appendToWikiPage(drive, openLoopsPath, openLoopEntry)
416
+ .then((ok) => { writeBack.openLoops = ok; })
417
+ .catch(() => { }),
418
+ ]);
419
+ }
420
+ await appendLogEntry(drive, {
421
+ type: "ingest",
422
+ title: `init_project: ${projectSlug}`,
423
+ detail: `projectName=${projectName}, platform=${platform}, applied=${appliedCount}, errors=${errors.length}`,
424
+ }).catch(() => {
425
+ /* non-fatal */
426
+ });
427
+ return {
428
+ success: errors.length === 0,
429
+ mode: "execute",
430
+ projectSlug,
431
+ projectName,
432
+ platform,
433
+ instructionFilePath,
434
+ instructionMarkdown,
435
+ systemPromptMarkdown,
436
+ operations,
437
+ appliedCount,
438
+ skippedCount,
439
+ errors,
440
+ writeBack,
441
+ };
442
+ }
443
+ //# sourceMappingURL=initProject.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"initProject.js","sourceRoot":"","sources":["../../src/tools/initProject.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,60 @@
1
+ import { type StorageClient } from "../storage/client.js";
2
+ /**
3
+ * What a generated instruction block can only know by looking at the wiki.
4
+ *
5
+ * The generator used to render a template from a slug and two defaults, which
6
+ * made its output wrong in a specific and expensive way: it asserted write-back
7
+ * paths without knowing whether any of them existed. On a real project that
8
+ * ambiguity led a maintainer to conclude twice in one session that the paths
9
+ * were invented, and to hand-edit the correct ones out (GH #457, D13).
10
+ *
11
+ * Everything here is best-effort. A brand-new project has no pages yet — that is
12
+ * the `init_project` case, and an empty context degrades to exactly the old
13
+ * behaviour, which is correct for a project where nothing exists yet.
14
+ */
15
+ export interface ProjectContext {
16
+ /** Whether the project folder has any pages at all. */
17
+ exists: boolean;
18
+ pageCount: number;
19
+ /** Category subdirectories the project actually uses, e.g. `canonical`, `data`. */
20
+ subdirs: string[];
21
+ /** Nested sub-projects, as `projects/<parent>/projects/<child>` slugs. */
22
+ subProjects: string[];
23
+ /** A declared filing system from the project readme's `filing:` frontmatter. */
24
+ filing?: string;
25
+ /** Which of the candidate write-back targets already exist. */
26
+ existingPaths: Set<string>;
27
+ /**
28
+ * Hand-written content carried forward from an existing instruction file,
29
+ * already wrapped in its markers. Undefined when there is nothing to preserve.
30
+ */
31
+ preservedRegion?: string;
32
+ }
33
+ export declare const DOMAIN_CONTEXT_START = "<!-- brains:domain-context start -->";
34
+ export declare const DOMAIN_CONTEXT_END = "<!-- brains:domain-context end -->";
35
+ /**
36
+ * Section headings the generators themselves emit, in either platform's block.
37
+ *
38
+ * Exported and covered by a test that renders every variant of both generators
39
+ * and asserts nothing it emits is missing here. That test is the point: a
40
+ * heading absent from this set is treated as hand-written and preserved, so a
41
+ * renamed or added generated section would silently start duplicating itself on
42
+ * every refresh. Three GPT headings were already missing when this was written.
43
+ */
44
+ export declare const GENERATED_HEADINGS: Set<string>;
45
+ /**
46
+ * Pull the hand-written part of an existing instruction file forward.
47
+ *
48
+ * Explicit markers are the supported path. Without them the whole file is still
49
+ * inspected rather than discarded, because the alternative — silently dropping
50
+ * a project's channel voice, contacts and conventions on every refresh — is why
51
+ * nobody refreshes an instruction file and why they rot.
52
+ */
53
+ export declare function extractPreservedRegion(content: string): string | undefined;
54
+ /**
55
+ * Read what the wiki actually contains for a project. Never throws: every lookup
56
+ * degrades to "unknown", and an unknown is rendered as "created on first use",
57
+ * which is the pre-existing behaviour.
58
+ */
59
+ export declare function gatherProjectContext(drive: StorageClient, slug: string, platform: "claude" | "gpt", candidatePaths: string[], userId?: string): Promise<ProjectContext>;
60
+ //# sourceMappingURL=instructionContext.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"instructionContext.d.ts","sourceRoot":"","sources":["../../src/tools/instructionContext.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,aAAa,EAAE,MAAM,sBAAsB,CAAC;AAK1D;;;;;;;;;;;;GAYG;AACH,MAAM,WAAW,cAAc;IAC7B,uDAAuD;IACvD,MAAM,EAAE,OAAO,CAAC;IAChB,SAAS,EAAE,MAAM,CAAC;IAClB,mFAAmF;IACnF,OAAO,EAAE,MAAM,EAAE,CAAC;IAClB,0EAA0E;IAC1E,WAAW,EAAE,MAAM,EAAE,CAAC;IACtB,gFAAgF;IAChF,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,+DAA+D;IAC/D,aAAa,EAAE,GAAG,CAAC,MAAM,CAAC,CAAC;IAC3B;;;OAGG;IACH,eAAe,CAAC,EAAE,MAAM,CAAC;CAC1B;AAED,eAAO,MAAM,oBAAoB,yCAAyC,CAAC;AAC3E,eAAO,MAAM,kBAAkB,uCAAuC,CAAC;AAkBvE;;;;;;;;GAQG;AACH,eAAO,MAAM,kBAAkB,aAsB7B,CAAC;AAMH;;;;;;;GAOG;AACH,wBAAgB,sBAAsB,CAAC,OAAO,EAAE,MAAM,GAAG,MAAM,GAAG,SAAS,CA+C1E;AAuBD;;;;GAIG;AACH,wBAAsB,oBAAoB,CACxC,KAAK,EAAE,aAAa,EACpB,IAAI,EAAE,MAAM,EACZ,QAAQ,EAAE,QAAQ,GAAG,KAAK,EAC1B,cAAc,EAAE,MAAM,EAAE,EACxB,MAAM,SAAK,GACV,OAAO,CAAC,cAAc,CAAC,CA6EzB"}