@mindrian_os/install 1.13.0-beta.11

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 (597) hide show
  1. package/.claude-plugin/plugin.json +21 -0
  2. package/.mcp.json +9 -0
  3. package/CHANGELOG.md +3333 -0
  4. package/LICENSE +123 -0
  5. package/README.md +673 -0
  6. package/agents/brain-query.md +80 -0
  7. package/agents/framework-runner.md +237 -0
  8. package/agents/grading.md +188 -0
  9. package/agents/investor.md +128 -0
  10. package/agents/larry-extended.md +135 -0
  11. package/agents/opportunity-scanner.md +91 -0
  12. package/agents/persona-analyst.md +132 -0
  13. package/agents/research.md +89 -0
  14. package/agents/reverse-salient-agent.md +27 -0
  15. package/bin/cli.js +142 -0
  16. package/bin/mindrian-mcp-server.cjs +182 -0
  17. package/bin/mindrian-tools.cjs +765 -0
  18. package/commands/act.md +439 -0
  19. package/commands/admin.md +404 -0
  20. package/commands/analyze-needs.md +42 -0
  21. package/commands/analyze-systems.md +39 -0
  22. package/commands/analyze-timing.md +42 -0
  23. package/commands/auto-explore.md +64 -0
  24. package/commands/beautiful-question.md +40 -0
  25. package/commands/brain-derive.md +78 -0
  26. package/commands/build-knowledge.md +42 -0
  27. package/commands/build-thesis.md +46 -0
  28. package/commands/causal.md +234 -0
  29. package/commands/challenge-assumptions.md +33 -0
  30. package/commands/compare-ventures.md +83 -0
  31. package/commands/dashboard.md +110 -0
  32. package/commands/deep-grade.md +82 -0
  33. package/commands/diagnose.md +58 -0
  34. package/commands/diagnostics.md +151 -0
  35. package/commands/doctor.md +151 -0
  36. package/commands/dominant-designs.md +40 -0
  37. package/commands/explain-decision.md +87 -0
  38. package/commands/explore-domains.md +42 -0
  39. package/commands/explore-futures.md +40 -0
  40. package/commands/explore-trends.md +42 -0
  41. package/commands/export.md +103 -0
  42. package/commands/file-meeting.md +724 -0
  43. package/commands/find-analogies.md +188 -0
  44. package/commands/find-bottlenecks.md +62 -0
  45. package/commands/find-connections.md +76 -0
  46. package/commands/funding.md +81 -0
  47. package/commands/grade.md +203 -0
  48. package/commands/graph.md +128 -0
  49. package/commands/hat-briefing.md +125 -0
  50. package/commands/heal.md +196 -0
  51. package/commands/help.md +399 -0
  52. package/commands/hmi-status.md +172 -0
  53. package/commands/jtbd.md +241 -0
  54. package/commands/leadership.md +73 -0
  55. package/commands/lean-canvas.md +40 -0
  56. package/commands/macro-trends.md +40 -0
  57. package/commands/map-unknowns.md +40 -0
  58. package/commands/memory.md +173 -0
  59. package/commands/models.md +175 -0
  60. package/commands/mos-reason.md +285 -0
  61. package/commands/mullins.md +120 -0
  62. package/commands/new-project.md +481 -0
  63. package/commands/onboard.md +434 -0
  64. package/commands/operator.md +149 -0
  65. package/commands/opportunities.md +144 -0
  66. package/commands/organize.md +497 -0
  67. package/commands/persona.md +198 -0
  68. package/commands/pipeline.md +112 -0
  69. package/commands/present.md +91 -0
  70. package/commands/publish.md +201 -0
  71. package/commands/query.md +124 -0
  72. package/commands/radar.md +72 -0
  73. package/commands/reanalyze.md +91 -0
  74. package/commands/research.md +196 -0
  75. package/commands/room.md +352 -0
  76. package/commands/rooms.md +598 -0
  77. package/commands/root-cause.md +40 -0
  78. package/commands/rs-experts.md +85 -0
  79. package/commands/rs-explain.md +100 -0
  80. package/commands/rs-fetch.md +94 -0
  81. package/commands/rs-thesis.md +85 -0
  82. package/commands/scenario-plan.md +40 -0
  83. package/commands/scheduled-tasks.md +285 -0
  84. package/commands/score-innovation.md +43 -0
  85. package/commands/scout.md +239 -0
  86. package/commands/setup.md +618 -0
  87. package/commands/snapshot.md +147 -0
  88. package/commands/speakers.md +84 -0
  89. package/commands/splash.md +28 -0
  90. package/commands/status.md +75 -0
  91. package/commands/structure-argument.md +42 -0
  92. package/commands/suggest-next.md +80 -0
  93. package/commands/systems-thinking.md +40 -0
  94. package/commands/think-hats.md +42 -0
  95. package/commands/update.md +181 -0
  96. package/commands/user-needs.md +40 -0
  97. package/commands/validate.md +40 -0
  98. package/commands/value-proposition.md +61 -0
  99. package/commands/vault.md +180 -0
  100. package/commands/visualize.md +52 -0
  101. package/commands/whitespace.md +507 -0
  102. package/commands/wiki.md +69 -0
  103. package/hooks/hooks.json +381 -0
  104. package/hooks/run-hook.cmd +64 -0
  105. package/lib/__init__.py +0 -0
  106. package/lib/__pycache__/__init__.cpython-312.pyc +0 -0
  107. package/lib/agents/auto-explore-agent.cjs +1043 -0
  108. package/lib/agents/reverse-salient-agent.cjs +679 -0
  109. package/lib/agents/tension-hook-agent.cjs +544 -0
  110. package/lib/brain/ROOM.md +44 -0
  111. package/lib/brain/chain-recommender.cjs +301 -0
  112. package/lib/chat/chat-context.js +185 -0
  113. package/lib/chat/chat-panel.js +721 -0
  114. package/lib/chat/fabric-chat.cjs +288 -0
  115. package/lib/chat/generative-tools.js +219 -0
  116. package/lib/conversation/ROOM.md +39 -0
  117. package/lib/conversation/classifier-rules.json +38 -0
  118. package/lib/conversation/classifier.cjs +264 -0
  119. package/lib/conversation/operator.cjs +287 -0
  120. package/lib/copy/115-spec-strings.cjs +55 -0
  121. package/lib/core/__init__.py +0 -0
  122. package/lib/core/__nav-stub.cjs +14 -0
  123. package/lib/core/__pycache__/__init__.cpython-312.pyc +0 -0
  124. package/lib/core/__pycache__/rs-math.cpython-312.pyc +0 -0
  125. package/lib/core/__pycache__/rs_cache.cpython-312.pyc +0 -0
  126. package/lib/core/__pycache__/rs_corpus.cpython-312.pyc +0 -0
  127. package/lib/core/__pycache__/rs_hybrid.cpython-312.pyc +0 -0
  128. package/lib/core/__pycache__/rs_math.cpython-312.pyc +0 -0
  129. package/lib/core/__pycache__/rs_rooms.cpython-312.pyc +0 -0
  130. package/lib/core/artifact-id.cjs +148 -0
  131. package/lib/core/asset-ops.cjs +151 -0
  132. package/lib/core/auto-commit-throttle.cjs +129 -0
  133. package/lib/core/bearer-token.cjs +199 -0
  134. package/lib/core/brain-client.cjs +865 -0
  135. package/lib/core/brain-derivation-prompts.cjs +326 -0
  136. package/lib/core/brain-derivation-queue.cjs +431 -0
  137. package/lib/core/brain-derivation.cjs +580 -0
  138. package/lib/core/brain-md-schema.cjs +528 -0
  139. package/lib/core/brain-md-staleness.cjs +357 -0
  140. package/lib/core/brain-response-sanitize.cjs +188 -0
  141. package/lib/core/bridge-writer.cjs +477 -0
  142. package/lib/core/chat-context-builder.cjs +253 -0
  143. package/lib/core/cross-room-aggregator.cjs +762 -0
  144. package/lib/core/daily-briefing.cjs +438 -0
  145. package/lib/core/decision-capture.cjs +618 -0
  146. package/lib/core/deep-links.cjs +82 -0
  147. package/lib/core/dispatch-optimizer.cjs +354 -0
  148. package/lib/core/dual-path-detector.cjs +84 -0
  149. package/lib/core/dual-path-detector.test.cjs +334 -0
  150. package/lib/core/exports-log.cjs +79 -0
  151. package/lib/core/feynman-minto-invariants.cjs +605 -0
  152. package/lib/core/folder-memory-async.cjs +338 -0
  153. package/lib/core/folder-memory-shared.cjs +890 -0
  154. package/lib/core/folder-memory.cjs +416 -0
  155. package/lib/core/framework-chain-composer.cjs +411 -0
  156. package/lib/core/frontmatter-schemas.cjs +330 -0
  157. package/lib/core/git-ops.cjs +141 -0
  158. package/lib/core/graph-ops.cjs +258 -0
  159. package/lib/core/hat-persistence.cjs +362 -0
  160. package/lib/core/index.cjs +60 -0
  161. package/lib/core/integration-registry.cjs +232 -0
  162. package/lib/core/intelligence-cascade.cjs +661 -0
  163. package/lib/core/lazygraph-ops.cjs +1057 -0
  164. package/lib/core/lru-cache.cjs +139 -0
  165. package/lib/core/mcp-profiles.cjs +182 -0
  166. package/lib/core/meeting-ops.cjs +54 -0
  167. package/lib/core/memory-ops.cjs +600 -0
  168. package/lib/core/migrations/ROOM.md +33 -0
  169. package/lib/core/migrations/phase-109-nodes-provenance.cjs +339 -0
  170. package/lib/core/migrations/phase-109-session-focus.cjs +99 -0
  171. package/lib/core/model-profiles.cjs +246 -0
  172. package/lib/core/mullins-scaffold.cjs +160 -0
  173. package/lib/core/nav-dial.cjs +316 -0
  174. package/lib/core/navigation/ROOM.md +15 -0
  175. package/lib/core/navigation/explanation.cjs +43 -0
  176. package/lib/core/navigation/focus.cjs +135 -0
  177. package/lib/core/navigation/ingestion.cjs +82 -0
  178. package/lib/core/navigation/insights.cjs +350 -0
  179. package/lib/core/navigation/memory-events.cjs +118 -0
  180. package/lib/core/navigation/neighborhood.cjs +78 -0
  181. package/lib/core/navigation/packet.cjs +182 -0
  182. package/lib/core/navigation/room-home.cjs +127 -0
  183. package/lib/core/navigation/transitions.cjs +82 -0
  184. package/lib/core/navigation-engine-shared.cjs +242 -0
  185. package/lib/core/navigation-engine.cjs +664 -0
  186. package/lib/core/navigation.cjs +60 -0
  187. package/lib/core/nl-graph-queries.cjs +164 -0
  188. package/lib/core/offer-presenter.cjs +406 -0
  189. package/lib/core/opportunity-extractor.cjs +183 -0
  190. package/lib/core/opportunity-ops.cjs +1371 -0
  191. package/lib/core/persona-ops.cjs +537 -0
  192. package/lib/core/persona-taxonomy.cjs +190 -0
  193. package/lib/core/platform-gates.cjs +120 -0
  194. package/lib/core/platform.cjs +257 -0
  195. package/lib/core/proactive-intelligence.cjs +528 -0
  196. package/lib/core/problem-type-router.cjs +315 -0
  197. package/lib/core/reasoning-ops.cjs +639 -0
  198. package/lib/core/reverse-salient-persona-suffix.cjs +115 -0
  199. package/lib/core/room-classifier-strict-mode.cjs +229 -0
  200. package/lib/core/room-db.cjs +127 -0
  201. package/lib/core/room-ops-async.cjs +92 -0
  202. package/lib/core/room-ops-shared.cjs +64 -0
  203. package/lib/core/room-ops-sync.cjs +70 -0
  204. package/lib/core/room-ops.cjs +32 -0
  205. package/lib/core/room-type-detector.cjs +386 -0
  206. package/lib/core/rs-brain-substrate-prompts.cjs +129 -0
  207. package/lib/core/rs-brain-substrate.cjs +570 -0
  208. package/lib/core/rs-breakthrough-scorer.cjs +255 -0
  209. package/lib/core/rs-canon-violations.cjs +82 -0
  210. package/lib/core/rs-chain-feeder.cjs +343 -0
  211. package/lib/core/rs-commercial-assessor.cjs +280 -0
  212. package/lib/core/rs-differential-scorer.cjs +376 -0
  213. package/lib/core/rs-domain-analyzer.cjs +385 -0
  214. package/lib/core/rs-egress-prompts.cjs +113 -0
  215. package/lib/core/rs-egress-telemetry.cjs +225 -0
  216. package/lib/core/rs-egress-violations.cjs +53 -0
  217. package/lib/core/rs-expert-mapper.cjs +467 -0
  218. package/lib/core/rs-fetcher-academic.cjs +697 -0
  219. package/lib/core/rs-fetcher-experts.cjs +314 -0
  220. package/lib/core/rs-fetcher-industry.cjs +731 -0
  221. package/lib/core/rs-fetcher-patents.cjs +564 -0
  222. package/lib/core/rs-innovation-classifier.cjs +194 -0
  223. package/lib/core/rs-mind-map.cjs +656 -0
  224. package/lib/core/rs-neo4j-writer.cjs +388 -0
  225. package/lib/core/rs-nl-to-query.cjs +425 -0
  226. package/lib/core/rs-pinecone-bridge.cjs +303 -0
  227. package/lib/core/rs-preprocessor.cjs +350 -0
  228. package/lib/core/rs-query-matrix.cjs +316 -0
  229. package/lib/core/rs-query-to-text.cjs +438 -0
  230. package/lib/core/rs-sqlite-mirror.cjs +443 -0
  231. package/lib/core/rs-thesis-generator.cjs +188 -0
  232. package/lib/core/rs_cache.py +479 -0
  233. package/lib/core/rs_corpus.py +468 -0
  234. package/lib/core/rs_hybrid.py +586 -0
  235. package/lib/core/rs_math.py +287 -0
  236. package/lib/core/rs_rooms.py +193 -0
  237. package/lib/core/scheduled-scanner.cjs +463 -0
  238. package/lib/core/scratchpad-ops.cjs +201 -0
  239. package/lib/core/section-8-trace-schema.cjs +138 -0
  240. package/lib/core/section-registry.cjs +111 -0
  241. package/lib/core/session-state.cjs +144 -0
  242. package/lib/core/shallow-doc-parser.cjs +174 -0
  243. package/lib/core/shallow-doc-parser.test.cjs +226 -0
  244. package/lib/core/skill-activation-router.cjs +284 -0
  245. package/lib/core/state-ops.cjs +46 -0
  246. package/lib/core/statusline-cache.cjs +266 -0
  247. package/lib/core/token-estimator.cjs +348 -0
  248. package/lib/core/user-archetype.cjs +239 -0
  249. package/lib/core/user-md-ops.cjs +524 -0
  250. package/lib/core/visual-ops.cjs +624 -0
  251. package/lib/core/write-lock.cjs +149 -0
  252. package/lib/graph/canvas-graph.js +467 -0
  253. package/lib/graph/constellation-config.cjs +299 -0
  254. package/lib/graph/graph-detail-panel.js +165 -0
  255. package/lib/hmi/ROOM.md +47 -0
  256. package/lib/hmi/across-session-memory.cjs +604 -0
  257. package/lib/hmi/cross-room-memory.cjs +575 -0
  258. package/lib/hmi/decoy-tier.cjs +395 -0
  259. package/lib/hmi/jtbd-classifier.cjs +219 -0
  260. package/lib/hmi/jtbd-state.cjs +199 -0
  261. package/lib/hmi/jtbd-taxonomy.json +392 -0
  262. package/lib/hmi/selector-dispatcher.cjs +546 -0
  263. package/lib/hmi/selector-telemetry.cjs +263 -0
  264. package/lib/hmi/shape-f0-renderer.cjs +139 -0
  265. package/lib/hmi/shape-f1-fallback.cjs +80 -0
  266. package/lib/hmi/shape-f1-renderer.cjs +138 -0
  267. package/lib/hmi/shape-f2-renderer.cjs +132 -0
  268. package/lib/hmi/shape-f3-renderer.cjs +66 -0
  269. package/lib/hmi/shape-f4-renderer.cjs +72 -0
  270. package/lib/hmi/shape-f5-renderer.cjs +155 -0
  271. package/lib/hmi/shape-f6-plan-review-renderer.cjs +312 -0
  272. package/lib/hmi/shape-f6-renderer.cjs +144 -0
  273. package/lib/hmi/shape-g-renderer.cjs +219 -0
  274. package/lib/hmi/shape-h-renderer.cjs +222 -0
  275. package/lib/hmi/tier-check.cjs +63 -0
  276. package/lib/import/PRECONDITIONS.md +41 -0
  277. package/lib/import/branding.cjs +210 -0
  278. package/lib/import/branding.test.cjs +235 -0
  279. package/lib/import/classifications-sync.cjs +104 -0
  280. package/lib/import/classifications-sync.test.cjs +129 -0
  281. package/lib/import/enricher.cjs +296 -0
  282. package/lib/import/enricher.test.cjs +273 -0
  283. package/lib/import/integration.test.cjs +376 -0
  284. package/lib/import/manifest.cjs +129 -0
  285. package/lib/import/manifest.schema.json +185 -0
  286. package/lib/import/manifest.test.cjs +123 -0
  287. package/lib/import/meeting-detector.cjs +92 -0
  288. package/lib/import/meeting-detector.test.cjs +100 -0
  289. package/lib/import/person-detector.cjs +229 -0
  290. package/lib/import/person-detector.test.cjs +149 -0
  291. package/lib/import/report.cjs +186 -0
  292. package/lib/import/report.test.cjs +186 -0
  293. package/lib/import/room-md-scaffolder.cjs +49 -0
  294. package/lib/import/router.cjs +224 -0
  295. package/lib/import/router.test.cjs +356 -0
  296. package/lib/import/run-all-tests.cjs +36 -0
  297. package/lib/import/smoke-test.cjs +213 -0
  298. package/lib/import/smoke-test.test.cjs +148 -0
  299. package/lib/import/test-fixtures/collision-vault/preexisting-room/STATE.md +8 -0
  300. package/lib/import/test-fixtures/collision-vault/preexisting-room/problem-definition/onboarding/onboarding.md +7 -0
  301. package/lib/import/test-fixtures/collision-vault/source/onboarding.md +5 -0
  302. package/lib/import/test-fixtures/obsidian-vault/.obsidian/workspace.json +1 -0
  303. package/lib/import/test-fixtures/obsidian-vault/notes/with-wikilinks.md +4 -0
  304. package/lib/import/test-fixtures/tiny-vault/notes/2026-01-15-team-sync.md +9 -0
  305. package/lib/import/test-fixtures/tiny-vault/notes/empty.md +3 -0
  306. package/lib/import/test-fixtures/tiny-vault/notes/onboarding.md +5 -0
  307. package/lib/import/test-fixtures/tiny-vault/notes/pricing.md +5 -0
  308. package/lib/import/test-fixtures/tiny-vault/notes/random.md +4 -0
  309. package/lib/import/undo.test.cjs +199 -0
  310. package/lib/import/vault-scanner.cjs +105 -0
  311. package/lib/import/vault-scanner.test.cjs +67 -0
  312. package/lib/mcp/app-html/dashboard.html +316 -0
  313. package/lib/mcp/app-html/graph.html +428 -0
  314. package/lib/mcp/app-html/mindrian-platform.html +1841 -0
  315. package/lib/mcp/app-html/wiki.html +383 -0
  316. package/lib/mcp/app-views.cjs +322 -0
  317. package/lib/mcp/brain-router.cjs +418 -0
  318. package/lib/mcp/capability-registry.cjs +62 -0
  319. package/lib/mcp/larry-context.cjs +46 -0
  320. package/lib/mcp/larry-server-instructions.md +114 -0
  321. package/lib/mcp/pipeline-state.cjs +275 -0
  322. package/lib/mcp/prompts.cjs +302 -0
  323. package/lib/mcp/resources.cjs +227 -0
  324. package/lib/mcp/session-catchup.cjs +327 -0
  325. package/lib/mcp/surface-detect.cjs +75 -0
  326. package/lib/mcp/tool-router.cjs +1034 -0
  327. package/lib/memory/aaak-compress.cjs +403 -0
  328. package/lib/memory/aaak-compress.test.cjs +288 -0
  329. package/lib/memory/async-artifact-auto-commit.test.cjs +223 -0
  330. package/lib/memory/bearer-token.test.cjs +315 -0
  331. package/lib/memory/brain-cache-lru.test.cjs +259 -0
  332. package/lib/memory/brain-client-query-shape.test.cjs +160 -0
  333. package/lib/memory/brain-derivation-graceful-degradation.test.cjs +1019 -0
  334. package/lib/memory/brain-derivation-queue.test.cjs +539 -0
  335. package/lib/memory/brain-derivation.test.cjs +634 -0
  336. package/lib/memory/brain-derive-command.test.cjs +534 -0
  337. package/lib/memory/brain-md-invariants-validator.test.cjs +704 -0
  338. package/lib/memory/brain-md-schema.test.cjs +467 -0
  339. package/lib/memory/brain-md-staleness.test.cjs +525 -0
  340. package/lib/memory/brain-server-resolution.test.cjs +314 -0
  341. package/lib/memory/chain-recommender.test.cjs +233 -0
  342. package/lib/memory/chat-context.test.cjs +128 -0
  343. package/lib/memory/command-registry.test.cjs +220 -0
  344. package/lib/memory/cross-room-aggregator.test.cjs +909 -0
  345. package/lib/memory/dashboard-server.test.cjs +256 -0
  346. package/lib/memory/debouncer-drain-at-prompt.test.cjs +389 -0
  347. package/lib/memory/decision-capture.test.cjs +632 -0
  348. package/lib/memory/decision-capture.worker.cjs +70 -0
  349. package/lib/memory/explain-decision-command.test.cjs +521 -0
  350. package/lib/memory/explain-decision-footer.test.cjs +316 -0
  351. package/lib/memory/explored-materials-store.cjs +392 -0
  352. package/lib/memory/feynman-minto-guardian.test.cjs +736 -0
  353. package/lib/memory/feynman-minto-invariants.test.cjs +511 -0
  354. package/lib/memory/feynman-prompts-drift.test.cjs +144 -0
  355. package/lib/memory/feynman-prompts.cjs +151 -0
  356. package/lib/memory/feynman-prompts.test.cjs +96 -0
  357. package/lib/memory/folder-memory-quadruple.test.cjs +548 -0
  358. package/lib/memory/folder-memory.test.cjs +503 -0
  359. package/lib/memory/framework-chain-composer.test.cjs +515 -0
  360. package/lib/memory/frontmatter-schema-validator.test.cjs +290 -0
  361. package/lib/memory/heal-command.test.cjs +604 -0
  362. package/lib/memory/index-artifact-transaction.test.cjs +333 -0
  363. package/lib/memory/lazygraph-rs-discoveries-view.test.cjs +122 -0
  364. package/lib/memory/mcp-input-validation.test.cjs +240 -0
  365. package/lib/memory/mcp-server-brain-deps.test.cjs +270 -0
  366. package/lib/memory/mcp-stack-fallback.test.cjs +433 -0
  367. package/lib/memory/minto-debouncer.test.cjs +407 -0
  368. package/lib/memory/minto-debouncer.worker.cjs +46 -0
  369. package/lib/memory/minto-migration-v88.test.cjs +265 -0
  370. package/lib/memory/minto-schema-v88.test.cjs +390 -0
  371. package/lib/memory/mos-status-renderer.test.cjs +631 -0
  372. package/lib/memory/narrative-schema.cjs +376 -0
  373. package/lib/memory/narrative-schema.test.cjs +209 -0
  374. package/lib/memory/nav-dial.test.cjs +414 -0
  375. package/lib/memory/navigation-engine-core.test.cjs +722 -0
  376. package/lib/memory/navigation-invariants.test.cjs +483 -0
  377. package/lib/memory/offer-presenter.test.cjs +554 -0
  378. package/lib/memory/on-stop-snapshot.test.cjs +404 -0
  379. package/lib/memory/pending-tension-store.cjs +373 -0
  380. package/lib/memory/post-compact-reinjection.test.cjs +854 -0
  381. package/lib/memory/post-write-triple.test.cjs +317 -0
  382. package/lib/memory/pre-compact-snapshot.test.cjs +495 -0
  383. package/lib/memory/problem-type-router.test.cjs +656 -0
  384. package/lib/memory/query-efficiency-telemetry.test.cjs +370 -0
  385. package/lib/memory/recompile-room-references.test.cjs +392 -0
  386. package/lib/memory/recompile-room-references.worker.cjs +42 -0
  387. package/lib/memory/record-decision-dual-write.test.cjs +454 -0
  388. package/lib/memory/room-classifier-strict-mode.test.cjs +417 -0
  389. package/lib/memory/room-minto-hook.test.cjs +398 -0
  390. package/lib/memory/rs-discovery-engine.test.cjs +323 -0
  391. package/lib/memory/run-feynman-tests.cjs +1247 -0
  392. package/lib/memory/security-trifecta.test.cjs +312 -0
  393. package/lib/memory/session-start-brain-staleness.test.cjs +363 -0
  394. package/lib/memory/session-start-triple-injection.test.cjs +514 -0
  395. package/lib/memory/sessionstart-banner-formatter.cjs +318 -0
  396. package/lib/memory/sessionstart-minto-banner.test.cjs +373 -0
  397. package/lib/memory/skill-activation-router.test.cjs +419 -0
  398. package/lib/memory/stamp-artifact-write.test.cjs +304 -0
  399. package/lib/memory/statusline-active-room.test.cjs +315 -0
  400. package/lib/memory/statusline-minto-segment.test.cjs +292 -0
  401. package/lib/memory/sync-async-entry-points.test.cjs +204 -0
  402. package/lib/memory/test-bridge-writer-enhanced.cjs +452 -0
  403. package/lib/memory/test-rs-brain-substrate-shape.cjs +529 -0
  404. package/lib/memory/test-rs-brain-substrate.cjs +636 -0
  405. package/lib/memory/test-rs-breakthrough-scorer.cjs +375 -0
  406. package/lib/memory/test-rs-canon-violations.cjs +218 -0
  407. package/lib/memory/test-rs-chain-feeder-core.cjs +344 -0
  408. package/lib/memory/test-rs-chain-feeder-skill-spawn.cjs +297 -0
  409. package/lib/memory/test-rs-commercial-assessor.cjs +385 -0
  410. package/lib/memory/test-rs-differential-scorer.cjs +480 -0
  411. package/lib/memory/test-rs-discovery-engine.cjs +603 -0
  412. package/lib/memory/test-rs-domain-analyzer.cjs +492 -0
  413. package/lib/memory/test-rs-egress-primitives.cjs +420 -0
  414. package/lib/memory/test-rs-expert-mapper.cjs +547 -0
  415. package/lib/memory/test-rs-explain-command.cjs +443 -0
  416. package/lib/memory/test-rs-fetcher-academic.cjs +848 -0
  417. package/lib/memory/test-rs-fetcher-experts.cjs +496 -0
  418. package/lib/memory/test-rs-fetcher-industry.cjs +702 -0
  419. package/lib/memory/test-rs-fetcher-patents.cjs +674 -0
  420. package/lib/memory/test-rs-innovation-classifier.cjs +301 -0
  421. package/lib/memory/test-rs-mind-map.cjs +646 -0
  422. package/lib/memory/test-rs-neo4j-writer.cjs +518 -0
  423. package/lib/memory/test-rs-nl-to-query.cjs +449 -0
  424. package/lib/memory/test-rs-pinecone-bridge.cjs +277 -0
  425. package/lib/memory/test-rs-preprocessor.cjs +433 -0
  426. package/lib/memory/test-rs-query-matrix.cjs +391 -0
  427. package/lib/memory/test-rs-query-to-text.cjs +551 -0
  428. package/lib/memory/test-rs-sqlite-mirror.cjs +649 -0
  429. package/lib/memory/test-rs-thesis-generator.cjs +360 -0
  430. package/lib/memory/triple-context-formatter.cjs +473 -0
  431. package/lib/memory/triple-context-formatter.test.cjs +442 -0
  432. package/lib/memory/user-md-persona.test.cjs +565 -0
  433. package/lib/memory/userpromptsubmit-integration.test.cjs +690 -0
  434. package/lib/memory/validators/README.md +157 -0
  435. package/lib/memory/validators/brain-md-invariants.cjs +475 -0
  436. package/lib/memory/validators/brain-substrate-invariants.cjs +285 -0
  437. package/lib/memory/validators/external-academic-invariants.cjs +249 -0
  438. package/lib/memory/validators/external-industry-invariants.cjs +271 -0
  439. package/lib/memory/validators/external-patents-invariants.cjs +266 -0
  440. package/lib/memory/validators/minto-invariants.cjs +62 -0
  441. package/lib/memory/validators/navigation-invariants.cjs +340 -0
  442. package/lib/memory/validators/queue-health.cjs +95 -0
  443. package/lib/memory/validators/snapshot-integrity.cjs +129 -0
  444. package/lib/memory/validators/stale-lifecycle.cjs +116 -0
  445. package/lib/memory/vault-section-minto-generator-atomic.test.cjs +556 -0
  446. package/lib/memory/vault-section-minto-generator-atomic.worker.cjs +73 -0
  447. package/lib/memory/write-lock-atomic.test.cjs +137 -0
  448. package/lib/memory/write-lock-atomic.worker.cjs +55 -0
  449. package/lib/parity/check-parity.cjs +83 -0
  450. package/lib/presentation/presentation-server.cjs +101 -0
  451. package/lib/presentation/presentation-watcher.cjs +123 -0
  452. package/lib/quickview/hub-server.cjs +719 -0
  453. package/lib/quickview/server.cjs +533 -0
  454. package/lib/render/JTBD-PALETTES.md +145 -0
  455. package/lib/render/ROOM.md +59 -0
  456. package/lib/render/render-v2.cjs +486 -0
  457. package/lib/render/render-v2.test.cjs +267 -0
  458. package/lib/render/render.cjs +65 -0
  459. package/lib/state/ROOM.md +46 -0
  460. package/lib/state/state-md-parser.cjs +215 -0
  461. package/lib/statusline/ROOM.md +38 -0
  462. package/lib/statusline/banner-suppression.cjs +50 -0
  463. package/lib/statusline/surface-detect.cjs +85 -0
  464. package/lib/update-bootstrap.sh.template +145 -0
  465. package/lib/vault/frontmatter-schema.cjs +297 -0
  466. package/lib/vault/room-scanner.cjs +352 -0
  467. package/lib/vault/wikilink-builder.cjs +231 -0
  468. package/lib/vault/wikilink-builder.test.cjs +182 -0
  469. package/lib/wiki/graph-links.cjs +281 -0
  470. package/lib/wiki/page-renderer.cjs +229 -0
  471. package/lib/wiki/wiki-chat.cjs +81 -0
  472. package/lib/wiki/wiki-layout.cjs +1459 -0
  473. package/lib/wiki/wiki-search.cjs +142 -0
  474. package/lib/wiki/wiki-server.cjs +678 -0
  475. package/lib/wiki/wiki-watcher.cjs +105 -0
  476. package/lib/workflow/ROOM.md +47 -0
  477. package/lib/workflow/command-resolver.cjs +155 -0
  478. package/lib/workflow/command-resolver.test.cjs +235 -0
  479. package/package.json +44 -0
  480. package/pipelines/analogy/01-decompose.md +80 -0
  481. package/pipelines/analogy/02-abstract.md +87 -0
  482. package/pipelines/analogy/03-search.md +135 -0
  483. package/pipelines/analogy/04-transfer.md +101 -0
  484. package/pipelines/analogy/05-validate.md +106 -0
  485. package/pipelines/analogy/CHAIN.md +56 -0
  486. package/pipelines/discovery/01-explore-domains.md +44 -0
  487. package/pipelines/discovery/02-think-hats.md +50 -0
  488. package/pipelines/discovery/03-analyze-needs.md +54 -0
  489. package/pipelines/discovery/CHAIN.md +37 -0
  490. package/pipelines/thesis/01-structure-argument.md +45 -0
  491. package/pipelines/thesis/02-challenge-assumptions.md +48 -0
  492. package/pipelines/thesis/03-build-thesis.md +54 -0
  493. package/pipelines/thesis/CHAIN.md +37 -0
  494. package/references/brain/causal-directives.md +91 -0
  495. package/references/brain/causal-enrichment.cypher +165 -0
  496. package/references/brain/command-triggers-schema.md +226 -0
  497. package/references/brain/graph-architecture.md +317 -0
  498. package/references/brain/query-patterns.md +460 -0
  499. package/references/brain/room-hierarchy-schema.md +218 -0
  500. package/references/brain/schema.md +76 -0
  501. package/references/capability-radar/capabilities-index.md +241 -0
  502. package/references/capability-radar/changelog-cache.md +81 -0
  503. package/references/causal/causal-schema.md +103 -0
  504. package/references/design/email-template-standard.md +155 -0
  505. package/references/design/graph-visualization-standard.md +178 -0
  506. package/references/document-generation.md +179 -0
  507. package/references/hsi/HSI-TOOLS-REFERENCE.md +222 -0
  508. package/references/import-config.md +141 -0
  509. package/references/integrations/detection-patterns.md +101 -0
  510. package/references/meeting/artifact-template.md +377 -0
  511. package/references/meeting/cross-meeting-intelligence.md +216 -0
  512. package/references/meeting/cross-relationship-patterns.md +202 -0
  513. package/references/meeting/live-join-interface.md +244 -0
  514. package/references/meeting/section-mapping.md +192 -0
  515. package/references/meeting/segment-classification.md +258 -0
  516. package/references/meeting/speaker-profile-template.md +219 -0
  517. package/references/meeting/summary-template.md +348 -0
  518. package/references/meeting/transcript-patterns.md +226 -0
  519. package/references/methodology/analyze-needs.md +135 -0
  520. package/references/methodology/analyze-systems.md +121 -0
  521. package/references/methodology/analyze-timing.md +149 -0
  522. package/references/methodology/beautiful-question.md +109 -0
  523. package/references/methodology/build-knowledge.md +161 -0
  524. package/references/methodology/build-thesis.md +237 -0
  525. package/references/methodology/challenge-assumptions.md +127 -0
  526. package/references/methodology/diagnose.md +169 -0
  527. package/references/methodology/dominant-designs.md +212 -0
  528. package/references/methodology/explore-domains.md +147 -0
  529. package/references/methodology/explore-futures.md +163 -0
  530. package/references/methodology/explore-trends.md +129 -0
  531. package/references/methodology/find-bottlenecks.md +131 -0
  532. package/references/methodology/grade.md +211 -0
  533. package/references/methodology/index.md +97 -0
  534. package/references/methodology/leadership.md +200 -0
  535. package/references/methodology/lean-canvas.md +116 -0
  536. package/references/methodology/macro-trends.md +192 -0
  537. package/references/methodology/map-unknowns.md +137 -0
  538. package/references/methodology/mullins-7-domains.md +104 -0
  539. package/references/methodology/problem-types.md +65 -0
  540. package/references/methodology/root-cause.md +178 -0
  541. package/references/methodology/sapphire-encoding.md +355 -0
  542. package/references/methodology/scenario-plan.md +178 -0
  543. package/references/methodology/score-innovation.md +154 -0
  544. package/references/methodology/structure-argument.md +158 -0
  545. package/references/methodology/systems-thinking.md +159 -0
  546. package/references/methodology/think-hats.md +147 -0
  547. package/references/methodology/triz-matrix.json +751 -0
  548. package/references/methodology/triz-principles.md +501 -0
  549. package/references/methodology/user-needs.md +199 -0
  550. package/references/methodology/validate.md +163 -0
  551. package/references/methodology/value-proposition.md +244 -0
  552. package/references/opportunities/funding-lifecycle.md +103 -0
  553. package/references/opportunities/grant-api-patterns.md +99 -0
  554. package/references/opportunities/opportunity-template.md +84 -0
  555. package/references/personality/assessment-philosophy.md +72 -0
  556. package/references/personality/lexicon.md +100 -0
  557. package/references/personality/persona-chains.md +56 -0
  558. package/references/personality/pws-lexicon-full.md +499 -0
  559. package/references/personality/voice-dna.md +156 -0
  560. package/references/personas/hat-perspectives.md +76 -0
  561. package/references/personas/persona-template.md +63 -0
  562. package/references/pipeline/act-output-contract.md +88 -0
  563. package/references/pipeline/chains-index.md +39 -0
  564. package/references/pws-profile-generation.md +79 -0
  565. package/references/reasoning/reasoning-schema.md +143 -0
  566. package/references/reasoning/reasoning-template.md +68 -0
  567. package/references/reasoning/run-template.md +38 -0
  568. package/references/research/RESEARCH_14_CLAUDE_CODE_SOURCE_ARCHITECTURE.md +209 -0
  569. package/references/research/RESEARCH_15_V1.8_OPTIMIZATION_JTBD.md +375 -0
  570. package/references/research/RESEARCH_16_NATIVE_FIRST_PLUGIN_ARCHITECTURE.md +575 -0
  571. package/references/research/RESEARCH_17_MCP_UI_FRAMEWORKS.md +272 -0
  572. package/references/taxonomy/TAXONOMY.md +192 -0
  573. package/references/templates/MINTO.md +36 -0
  574. package/references/user-research/2026-04-05-leah-lawrence-session.md +202 -0
  575. package/references/vault-kit/README.md +35 -0
  576. package/references/vault-kit/app.json +12 -0
  577. package/references/vault-kit/appearance.json +12 -0
  578. package/references/vault-kit/graph.json +35 -0
  579. package/references/vault-kit/snippets/mindrian-destijl.css +297 -0
  580. package/references/vault-kit/templates/new-artifact.md +37 -0
  581. package/references/vault-kit/templates/new-meeting-note.md +35 -0
  582. package/references/vault-kit/templates/new-team-profile.md +29 -0
  583. package/references/vault-kit/templates/new-xref.md +35 -0
  584. package/references/visual/symbol-system.md +151 -0
  585. package/skills/MOSDeckEngine/SKILL.md +325 -0
  586. package/skills/brain-connector/SKILL.md +114 -0
  587. package/skills/context-engine/SKILL.md +147 -0
  588. package/skills/conversation-mode/SKILL.md +102 -0
  589. package/skills/larry-personality/SKILL.md +219 -0
  590. package/skills/larry-personality/framework-chains.md +92 -0
  591. package/skills/larry-personality/mode-engine.md +185 -0
  592. package/skills/mullins-scaffold/SKILL.md +61 -0
  593. package/skills/mullins-scaffold/scaffold.json +146 -0
  594. package/skills/pws-methodology/SKILL.md +49 -0
  595. package/skills/room-passive/SKILL.md +165 -0
  596. package/skills/room-proactive/SKILL.md +250 -0
  597. package/skills/ui-system/SKILL.md +277 -0
@@ -0,0 +1,275 @@
1
+ 'use strict';
2
+
3
+ /**
4
+ * MindrianOS Pipeline State Manager
5
+ *
6
+ * Manages pipeline state via room artifacts. When a methodology tool writes
7
+ * output, metadata is stored in room/.mindrian/pipeline-state.json so the
8
+ * next tool in the chain knows what came before.
9
+ *
10
+ * State file: room/.mindrian/pipeline-state.json
11
+ * Schema:
12
+ * {
13
+ * last_tool: string, // e.g. "scenario-plan"
14
+ * output_path: string, // relative path to filed artifact
15
+ * chain_position: number, // 0-based index in current chain
16
+ * suggested_next: string, // next tool name
17
+ * chain: string[], // full ordered chain (from Brain or heuristic)
18
+ * chain_source: string, // "brain" | "local" | "manual"
19
+ * started_at: string, // ISO timestamp of chain start
20
+ * updated_at: string, // ISO timestamp of last update
21
+ * history: Array<{tool: string, output_path: string, completed_at: string}>
22
+ * }
23
+ *
24
+ * Follows ICM principle: state lives inside room/ (folder IS orchestration).
25
+ * Pipeline state is a room artifact, not external infrastructure.
26
+ *
27
+ * @module pipeline-state
28
+ */
29
+
30
+ const fs = require('fs');
31
+ const path = require('path');
32
+
33
+ const PIPELINE_DIR = '.mindrian';
34
+ const PIPELINE_FILE = 'pipeline-state.json';
35
+
36
+ /**
37
+ * Resolve the pipeline state file path for a room.
38
+ * @param {string} roomDir - Absolute path to the room directory
39
+ * @returns {string} Absolute path to pipeline-state.json
40
+ */
41
+ function statePath(roomDir) {
42
+ return path.join(roomDir, PIPELINE_DIR, PIPELINE_FILE);
43
+ }
44
+
45
+ /**
46
+ * Ensure the .mindrian directory exists in the room.
47
+ * @param {string} roomDir
48
+ */
49
+ function ensureDir(roomDir) {
50
+ const dir = path.join(roomDir, PIPELINE_DIR);
51
+ if (!fs.existsSync(dir)) {
52
+ fs.mkdirSync(dir, { recursive: true });
53
+ }
54
+ }
55
+
56
+ /**
57
+ * Read the current pipeline state from a room.
58
+ * Returns null if no pipeline is active (no state file or empty).
59
+ *
60
+ * @param {string} roomDir - Absolute path to the room directory
61
+ * @returns {object|null} Pipeline state or null
62
+ */
63
+ function read(roomDir) {
64
+ const fp = statePath(roomDir);
65
+ try {
66
+ const raw = fs.readFileSync(fp, 'utf8');
67
+ return JSON.parse(raw);
68
+ } catch (_e) {
69
+ return null;
70
+ }
71
+ }
72
+
73
+ /**
74
+ * Write pipeline state to a room.
75
+ *
76
+ * @param {string} roomDir - Absolute path to the room directory
77
+ * @param {object} state - Pipeline state object
78
+ */
79
+ function write(roomDir, state) {
80
+ ensureDir(roomDir);
81
+ const fp = statePath(roomDir);
82
+ fs.writeFileSync(fp, JSON.stringify(state, null, 2) + '\n', 'utf8');
83
+ }
84
+
85
+ /**
86
+ * Initialize a new pipeline chain in a room.
87
+ * Called when Brain or local heuristic provides a chain recommendation.
88
+ *
89
+ * @param {string} roomDir - Absolute path to the room directory
90
+ * @param {string[]} chain - Ordered array of methodology/analysis tool names
91
+ * @param {string} source - Where the chain came from: "brain" | "local" | "manual"
92
+ * @returns {object} The initialized pipeline state
93
+ */
94
+ function initChain(roomDir, chain, source) {
95
+ const state = {
96
+ last_tool: null,
97
+ output_path: null,
98
+ chain_position: -1,
99
+ suggested_next: chain.length > 0 ? chain[0] : null,
100
+ chain,
101
+ chain_source: source,
102
+ started_at: new Date().toISOString(),
103
+ updated_at: new Date().toISOString(),
104
+ history: []
105
+ };
106
+ write(roomDir, state);
107
+ return state;
108
+ }
109
+
110
+ /**
111
+ * Record that a tool completed and advance the pipeline position.
112
+ *
113
+ * If the tool matches the next expected tool in the chain, advance
114
+ * chain_position. If it doesn't match (user ran a different tool),
115
+ * still record it but don't advance -- the chain ordering is advisory.
116
+ *
117
+ * @param {string} roomDir - Absolute path to the room directory
118
+ * @param {string} toolName - The methodology/analysis tool that just completed
119
+ * @param {string} outputPath - Relative path (from room root) to the filed artifact
120
+ * @returns {object} Updated pipeline state
121
+ */
122
+ function recordStep(roomDir, toolName, outputPath) {
123
+ let state = read(roomDir);
124
+
125
+ if (!state) {
126
+ // No active pipeline -- create a minimal one
127
+ state = {
128
+ last_tool: null,
129
+ output_path: null,
130
+ chain_position: -1,
131
+ suggested_next: null,
132
+ chain: [],
133
+ chain_source: 'manual',
134
+ started_at: new Date().toISOString(),
135
+ updated_at: new Date().toISOString(),
136
+ history: []
137
+ };
138
+ }
139
+
140
+ // Record the step in history
141
+ state.history.push({
142
+ tool: toolName,
143
+ output_path: outputPath,
144
+ completed_at: new Date().toISOString()
145
+ });
146
+
147
+ state.last_tool = toolName;
148
+ state.output_path = outputPath;
149
+ state.updated_at = new Date().toISOString();
150
+
151
+ // Check if this tool matches the next expected in the chain
152
+ const nextExpected = state.chain[state.chain_position + 1];
153
+ if (nextExpected && nextExpected === toolName) {
154
+ // Advance position in the chain
155
+ state.chain_position += 1;
156
+ }
157
+
158
+ // Set suggested_next to the next tool in the chain (if any remain)
159
+ const nextInChain = state.chain[state.chain_position + 1];
160
+ state.suggested_next = nextInChain || null;
161
+
162
+ write(roomDir, state);
163
+ return state;
164
+ }
165
+
166
+ /**
167
+ * Check if a given tool is the next expected step in the active pipeline.
168
+ *
169
+ * @param {string} roomDir - Absolute path to the room directory
170
+ * @param {string} toolName - Tool about to be executed
171
+ * @returns {{ inPipeline: boolean, isNext: boolean, position: number, chain: string[], previousOutput: string|null }}
172
+ */
173
+ function checkPosition(roomDir, toolName) {
174
+ const state = read(roomDir);
175
+
176
+ if (!state || !state.chain || state.chain.length === 0) {
177
+ return {
178
+ inPipeline: false,
179
+ isNext: false,
180
+ position: -1,
181
+ chain: [],
182
+ previousOutput: null
183
+ };
184
+ }
185
+
186
+ const nextExpected = state.chain[state.chain_position + 1];
187
+ const isInChain = state.chain.includes(toolName);
188
+
189
+ return {
190
+ inPipeline: true,
191
+ isNext: nextExpected === toolName,
192
+ position: state.chain.indexOf(toolName),
193
+ chain: state.chain,
194
+ previousOutput: state.output_path
195
+ };
196
+ }
197
+
198
+ /**
199
+ * Get the output path from the previous step in the pipeline.
200
+ * Returns null if no previous step or no active pipeline.
201
+ *
202
+ * @param {string} roomDir - Absolute path to the room directory
203
+ * @returns {string|null} Relative path to previous step's artifact, or null
204
+ */
205
+ function getPreviousOutput(roomDir) {
206
+ const state = read(roomDir);
207
+ if (!state || !state.output_path) return null;
208
+ return state.output_path;
209
+ }
210
+
211
+ /**
212
+ * Clear the pipeline state (pipeline completed or abandoned).
213
+ *
214
+ * @param {string} roomDir - Absolute path to the room directory
215
+ */
216
+ function clear(roomDir) {
217
+ const fp = statePath(roomDir);
218
+ try {
219
+ fs.unlinkSync(fp);
220
+ } catch (_e) {
221
+ // Already gone
222
+ }
223
+ }
224
+
225
+ /**
226
+ * Format a Pipeline Context section for tool output.
227
+ * Included in every methodology/analysis tool response so the LLM
228
+ * knows where the output was filed and what comes next.
229
+ *
230
+ * @param {string} roomDir - Absolute path to the room directory
231
+ * @param {string} toolName - Current tool name
232
+ * @param {string} outputPath - Relative path to filed artifact
233
+ * @returns {string} Formatted markdown section
234
+ */
235
+ function formatPipelineContext(roomDir, toolName, outputPath) {
236
+ const state = read(roomDir);
237
+ const lines = [
238
+ '\n\n## Pipeline Context',
239
+ '',
240
+ `**Tool:** \`${toolName}\``,
241
+ `**Output filed:** \`${outputPath}\``
242
+ ];
243
+
244
+ if (state && state.chain && state.chain.length > 0) {
245
+ const pos = state.chain_position >= 0 ? state.chain_position + 1 : 0;
246
+ lines.push(`**Chain:** ${state.chain.map((t, i) => i === pos ? `**${t}**` : t).join(' -> ')}`);
247
+ lines.push(`**Position:** ${pos + 1} of ${state.chain.length}`);
248
+
249
+ if (state.suggested_next) {
250
+ lines.push(`**Next:** \`${state.suggested_next}\``);
251
+ } else {
252
+ lines.push('**Status:** Pipeline complete');
253
+ }
254
+ }
255
+
256
+ if (state && state.history && state.history.length > 0) {
257
+ lines.push('', '**Previous steps:**');
258
+ for (const step of state.history.slice(-3)) {
259
+ lines.push(`- \`${step.tool}\` -> \`${step.output_path}\``);
260
+ }
261
+ }
262
+
263
+ return lines.join('\n');
264
+ }
265
+
266
+ module.exports = {
267
+ read,
268
+ write,
269
+ initChain,
270
+ recordStep,
271
+ checkPosition,
272
+ getPreviousOutput,
273
+ clear,
274
+ formatPipelineContext
275
+ };
@@ -0,0 +1,302 @@
1
+ /**
2
+ * MindrianOS MCP Prompts — Methodology workflows with Larry personality injection
3
+ *
4
+ * Prompts deliver methodology workflows pre-loaded with room context
5
+ * so Desktop Larry matches CLI Larry.
6
+ *
7
+ * Registered prompts:
8
+ * 1. file-meeting — File a meeting transcript to Data Room
9
+ * 2. analyze-room — Analyze current Data Room state
10
+ * 3. grade-venture — Grade the venture using PWS rubrics
11
+ * 4. run-methodology — Run any of the 25 methodology frameworks
12
+ * 5. suggest-next — What should I work on next?
13
+ * 6. reason-section — Analyze a room section using Minto/MECE structured reasoning
14
+ */
15
+
16
+ 'use strict';
17
+
18
+ const fs = require('fs');
19
+ const path = require('path');
20
+ const { loadLarryContext } = require('./larry-context.cjs');
21
+ const { getState, computeState } = require('../core/state-ops.cjs');
22
+ const { safeReadFile } = require('../core/index.cjs');
23
+ const reasoningOps = require('../core/reasoning-ops.cjs');
24
+
25
+ // All 25 methodology framework names (matching CLI commands)
26
+ const METHODOLOGY_NAMES = [
27
+ // methodology group (13)
28
+ 'lean-canvas', 'think-hats', 'structure-argument', 'beautiful-question',
29
+ 'build-knowledge', 'challenge-assumptions', 'validate', 'map-unknowns',
30
+ 'diagnose', 'score-innovation', 'explore-domains', 'analyze-needs',
31
+ 'user-needs',
32
+ // analysis group (10)
33
+ 'analyze-systems', 'analyze-timing', 'find-bottlenecks', 'root-cause',
34
+ 'systems-thinking', 'macro-trends', 'explore-trends', 'explore-futures',
35
+ 'dominant-designs', 'scenario-plan',
36
+ // intelligence/strategy (2 from intelligence group that are methodology-like)
37
+ 'find-connections', 'build-thesis',
38
+ ];
39
+
40
+ /**
41
+ * Safely load a reference file from the plugin references directory.
42
+ * Returns the file content or an empty string if not found.
43
+ *
44
+ * @param {string} pluginRoot
45
+ * @param {...string} segments - Path segments relative to references/
46
+ * @returns {string}
47
+ */
48
+ function loadReference(pluginRoot, ...segments) {
49
+ const refPath = path.join(pluginRoot, 'references', ...segments);
50
+ return safeReadFile(refPath) || '';
51
+ }
52
+
53
+ /**
54
+ * Build a prompt message with Larry personality, room state, and optional reference.
55
+ *
56
+ * @param {string} larryFull - Full Larry personality text
57
+ * @param {string} roomState - Current room state text
58
+ * @param {string} reference - Reference material (may be empty)
59
+ * @param {string} userContent - User-specific content or instructions
60
+ * @returns {{ messages: Array<{role: string, content: {type: string, text: string}}> }}
61
+ */
62
+ function buildPromptResponse(larryFull, roomState, reference, userContent) {
63
+ const parts = [
64
+ '# Larry Personality Context\n\n' + larryFull,
65
+ '\n\n---\n\n# Current Data Room State\n\n' + (roomState || 'No room initialized yet.'),
66
+ ];
67
+
68
+ if (reference) {
69
+ parts.push('\n\n---\n\n# Reference Material\n\n' + reference);
70
+ }
71
+
72
+ parts.push('\n\n---\n\n# User Request\n\n' + userContent);
73
+
74
+ return {
75
+ messages: [{
76
+ role: 'user',
77
+ content: { type: 'text', text: parts.join('') },
78
+ }],
79
+ };
80
+ }
81
+
82
+ /**
83
+ * Register all MCP Prompts on the server.
84
+ *
85
+ * @param {import('@modelcontextprotocol/sdk/server/mcp.js').McpServer} server
86
+ * @param {string} roomDir - Absolute path to the Data Room directory
87
+ * @param {string} pluginRoot - Root of the plugin repository
88
+ */
89
+ function registerPrompts(server, roomDir, pluginRoot) {
90
+ const larryFull = loadLarryContext(pluginRoot).full;
91
+
92
+ // -------------------------------------------------------------------------
93
+ // 1. file-meeting — File a meeting transcript to Data Room
94
+ // -------------------------------------------------------------------------
95
+ server.prompt(
96
+ 'file-meeting',
97
+ {
98
+ description: 'File a meeting transcript into the Data Room. Larry extracts insights, maps to sections, and files artifacts.',
99
+ arguments: [
100
+ { name: 'transcript', description: 'The full meeting transcript text', required: true },
101
+ { name: 'meetingDate', description: 'Meeting date (YYYY-MM-DD format)', required: false },
102
+ ],
103
+ },
104
+ async (args) => {
105
+ const roomState = getState(roomDir) || '';
106
+ const filingRef = loadReference(pluginRoot, 'meeting', 'section-mapping.md');
107
+ const segmentRef = loadReference(pluginRoot, 'meeting', 'segment-classification.md');
108
+ const reference = [filingRef, segmentRef].filter(Boolean).join('\n\n---\n\n');
109
+
110
+ const dateNote = args.meetingDate ? `Meeting date: ${args.meetingDate}\n\n` : '';
111
+ const userContent = `${dateNote}Please file this meeting transcript into the Data Room. Extract key insights, classify segments, map findings to the appropriate sections, and identify cross-section relationships.\n\n## Transcript\n\n${args.transcript}`;
112
+
113
+ return buildPromptResponse(larryFull, roomState, reference, userContent);
114
+ }
115
+ );
116
+
117
+ // -------------------------------------------------------------------------
118
+ // 2. analyze-room — Analyze current Data Room state
119
+ // -------------------------------------------------------------------------
120
+ server.prompt(
121
+ 'analyze-room',
122
+ {
123
+ description: 'Analyze the current Data Room state. Larry identifies gaps, strengths, and what needs attention.',
124
+ arguments: [
125
+ { name: 'focus', description: 'Specific section or concern to focus on', required: false },
126
+ ],
127
+ },
128
+ async (args) => {
129
+ // Use computeState for richer analysis (runs the full state computation)
130
+ let roomState;
131
+ try {
132
+ roomState = computeState(roomDir);
133
+ } catch (e) {
134
+ roomState = getState(roomDir) || '';
135
+ }
136
+
137
+ const focusNote = args.focus ? `Focus area: ${args.focus}\n\n` : '';
138
+ const userContent = `${focusNote}Analyze the current state of my Data Room. Identify gaps, strengths, cross-section relationships, and what I should work on. Be specific about which sections need attention and why.`;
139
+
140
+ return buildPromptResponse(larryFull, roomState, '', userContent);
141
+ }
142
+ );
143
+
144
+ // -------------------------------------------------------------------------
145
+ // 3. grade-venture — Grade the venture using PWS rubrics
146
+ // -------------------------------------------------------------------------
147
+ server.prompt(
148
+ 'grade-venture',
149
+ {
150
+ description: 'Grade the venture using PWS assessment rubrics. Quick mode gives overview, deep mode provides detailed component analysis.',
151
+ arguments: [
152
+ { name: 'depth', description: 'Assessment depth: "quick" (overview) or "deep" (detailed component analysis)', required: false },
153
+ ],
154
+ },
155
+ async (args) => {
156
+ const depth = args.depth || 'quick';
157
+ const roomState = getState(roomDir) || '';
158
+
159
+ const assessmentPhilosophy = loadReference(pluginRoot, 'personality', 'assessment-philosophy.md');
160
+
161
+ let gradingRef;
162
+ if (depth === 'deep') {
163
+ gradingRef = loadReference(pluginRoot, 'methodology', 'deep-grade.md')
164
+ || loadReference(pluginRoot, 'methodology', 'grade.md');
165
+ } else {
166
+ gradingRef = loadReference(pluginRoot, 'methodology', 'grade.md');
167
+ }
168
+
169
+ const reference = [assessmentPhilosophy, gradingRef].filter(Boolean).join('\n\n---\n\n');
170
+
171
+ const userContent = `Grade my venture using a ${depth} assessment. Evaluate each Data Room section against PWS rubrics, identify the strongest and weakest areas, and provide an overall grade with specific improvement recommendations.`;
172
+
173
+ return buildPromptResponse(larryFull, roomState, reference, userContent);
174
+ }
175
+ );
176
+
177
+ // -------------------------------------------------------------------------
178
+ // 4. run-methodology — Run any of the 25 methodology frameworks
179
+ // -------------------------------------------------------------------------
180
+ server.prompt(
181
+ 'run-methodology',
182
+ {
183
+ description: 'Run a PWS innovation methodology framework. Larry guides you through the chosen framework applied to your venture.',
184
+ arguments: [
185
+ {
186
+ name: 'methodology',
187
+ description: `Methodology to run. One of: ${METHODOLOGY_NAMES.join(', ')}`,
188
+ required: true,
189
+ },
190
+ { name: 'focus', description: 'Specific venture aspect or question to focus the methodology on', required: false },
191
+ ],
192
+ },
193
+ async (args) => {
194
+ const methodology = args.methodology;
195
+ const roomState = getState(roomDir) || '';
196
+
197
+ // Try methodology-specific reference file
198
+ const methodRef = loadReference(pluginRoot, 'methodology', `${methodology}.md`);
199
+
200
+ const focusNote = args.focus ? `Focus: ${args.focus}\n\n` : '';
201
+ const userContent = `${focusNote}Run the "${methodology}" methodology framework on my venture. Guide me through the framework step by step, applying it specifically to what you see in my Data Room.`;
202
+
203
+ return buildPromptResponse(larryFull, roomState, methodRef, userContent);
204
+ }
205
+ );
206
+
207
+ // -------------------------------------------------------------------------
208
+ // 5. suggest-next — What should I work on next?
209
+ // -------------------------------------------------------------------------
210
+ server.prompt(
211
+ 'suggest-next',
212
+ {
213
+ description: 'Larry analyzes room gaps and suggests what to work on next.',
214
+ arguments: [],
215
+ },
216
+ async () => {
217
+ let roomState;
218
+ try {
219
+ roomState = computeState(roomDir);
220
+ } catch (e) {
221
+ roomState = getState(roomDir) || '';
222
+ }
223
+
224
+ const suggestRef = loadReference(pluginRoot, 'methodology', 'index.md');
225
+
226
+ const userContent = 'Based on the current state of my Data Room, what should I work on next? Consider which sections are weakest, what methodologies would help most, and what the highest-impact next step would be.';
227
+
228
+ return buildPromptResponse(larryFull, roomState, suggestRef, userContent);
229
+ }
230
+ );
231
+
232
+ // -------------------------------------------------------------------------
233
+ // 6. reason-section — Analyze a room section using Minto/MECE structured reasoning
234
+ // -------------------------------------------------------------------------
235
+ server.prompt(
236
+ 'reason-section',
237
+ {
238
+ description: 'Analyze a room section using Minto/MECE structured reasoning. Larry captures WHY a section matters, rates confidence, and identifies cross-section dependencies.',
239
+ arguments: [
240
+ { name: 'section', description: 'Room section to reason about', required: true },
241
+ ],
242
+ },
243
+ async (args) => {
244
+ const section = args.section;
245
+
246
+ // a. Read room STATE.md for venture context
247
+ const roomState = getState(roomDir) || 'No room initialized yet.';
248
+
249
+ // b. Read section artifacts (list .md files in room/{section}/)
250
+ const sectionDir = path.join(roomDir, section);
251
+ let artifactSummary = '';
252
+ try {
253
+ const files = fs.readdirSync(sectionDir).filter(f => f.endsWith('.md')).sort();
254
+ if (files.length > 0) {
255
+ const artifacts = files.map(f => {
256
+ const content = safeReadFile(path.join(sectionDir, f)) || '';
257
+ // Truncate long artifacts to keep prompt manageable
258
+ const truncated = content.length > 2000
259
+ ? content.slice(0, 2000) + '\n\n[... truncated, ' + content.length + ' chars total]'
260
+ : content;
261
+ return `### ${f}\n\n${truncated}`;
262
+ });
263
+ artifactSummary = artifacts.join('\n\n---\n\n');
264
+ } else {
265
+ artifactSummary = 'No artifacts in this section yet.';
266
+ }
267
+ } catch (e) {
268
+ artifactSummary = `Section "${section}" directory not found or empty.`;
269
+ }
270
+
271
+ // c. Read existing reasoning if any
272
+ const existingReasoning = reasoningOps.getReasoning(roomDir, section);
273
+ const existingContent = existingReasoning.error
274
+ ? 'No existing reasoning for this section.'
275
+ : existingReasoning.content;
276
+
277
+ // d. Read the reasoning template
278
+ const reasoningTemplate = loadReference(pluginRoot, 'reasoning', 'reasoning-template.md');
279
+
280
+ // e. Compose prompt message array
281
+ const systemMessage = 'You are Larry, MindrianOS reasoning engine. Analyze this section using Minto Pyramid (Situation-Complication-Question-Answer) and MECE structure. Fill in the REASONING.md template below with specific claims from the section artifacts. Rate confidence levels. Identify cross-section dependencies. Be specific about what must be TRUE for this section to be complete.';
282
+
283
+ const userMessage = [
284
+ '# Venture Context\n\n' + roomState,
285
+ '\n\n---\n\n# Section Artifacts: ' + section + '\n\n' + artifactSummary,
286
+ '\n\n---\n\n# Existing Reasoning\n\n' + existingContent,
287
+ '\n\n---\n\n# REASONING.md Template (fill this in)\n\n' + (reasoningTemplate || 'Template not found — generate Minto/MECE structured reasoning.'),
288
+ ].join('');
289
+
290
+ return {
291
+ messages: [
292
+ {
293
+ role: 'user',
294
+ content: { type: 'text', text: systemMessage + '\n\n---\n\n' + userMessage },
295
+ },
296
+ ],
297
+ };
298
+ }
299
+ );
300
+ }
301
+
302
+ module.exports = { registerPrompts, METHODOLOGY_NAMES };