@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.
- package/.claude-plugin/plugin.json +21 -0
- package/.mcp.json +9 -0
- package/CHANGELOG.md +3333 -0
- package/LICENSE +123 -0
- package/README.md +673 -0
- package/agents/brain-query.md +80 -0
- package/agents/framework-runner.md +237 -0
- package/agents/grading.md +188 -0
- package/agents/investor.md +128 -0
- package/agents/larry-extended.md +135 -0
- package/agents/opportunity-scanner.md +91 -0
- package/agents/persona-analyst.md +132 -0
- package/agents/research.md +89 -0
- package/agents/reverse-salient-agent.md +27 -0
- package/bin/cli.js +142 -0
- package/bin/mindrian-mcp-server.cjs +182 -0
- package/bin/mindrian-tools.cjs +765 -0
- package/commands/act.md +439 -0
- package/commands/admin.md +404 -0
- package/commands/analyze-needs.md +42 -0
- package/commands/analyze-systems.md +39 -0
- package/commands/analyze-timing.md +42 -0
- package/commands/auto-explore.md +64 -0
- package/commands/beautiful-question.md +40 -0
- package/commands/brain-derive.md +78 -0
- package/commands/build-knowledge.md +42 -0
- package/commands/build-thesis.md +46 -0
- package/commands/causal.md +234 -0
- package/commands/challenge-assumptions.md +33 -0
- package/commands/compare-ventures.md +83 -0
- package/commands/dashboard.md +110 -0
- package/commands/deep-grade.md +82 -0
- package/commands/diagnose.md +58 -0
- package/commands/diagnostics.md +151 -0
- package/commands/doctor.md +151 -0
- package/commands/dominant-designs.md +40 -0
- package/commands/explain-decision.md +87 -0
- package/commands/explore-domains.md +42 -0
- package/commands/explore-futures.md +40 -0
- package/commands/explore-trends.md +42 -0
- package/commands/export.md +103 -0
- package/commands/file-meeting.md +724 -0
- package/commands/find-analogies.md +188 -0
- package/commands/find-bottlenecks.md +62 -0
- package/commands/find-connections.md +76 -0
- package/commands/funding.md +81 -0
- package/commands/grade.md +203 -0
- package/commands/graph.md +128 -0
- package/commands/hat-briefing.md +125 -0
- package/commands/heal.md +196 -0
- package/commands/help.md +399 -0
- package/commands/hmi-status.md +172 -0
- package/commands/jtbd.md +241 -0
- package/commands/leadership.md +73 -0
- package/commands/lean-canvas.md +40 -0
- package/commands/macro-trends.md +40 -0
- package/commands/map-unknowns.md +40 -0
- package/commands/memory.md +173 -0
- package/commands/models.md +175 -0
- package/commands/mos-reason.md +285 -0
- package/commands/mullins.md +120 -0
- package/commands/new-project.md +481 -0
- package/commands/onboard.md +434 -0
- package/commands/operator.md +149 -0
- package/commands/opportunities.md +144 -0
- package/commands/organize.md +497 -0
- package/commands/persona.md +198 -0
- package/commands/pipeline.md +112 -0
- package/commands/present.md +91 -0
- package/commands/publish.md +201 -0
- package/commands/query.md +124 -0
- package/commands/radar.md +72 -0
- package/commands/reanalyze.md +91 -0
- package/commands/research.md +196 -0
- package/commands/room.md +352 -0
- package/commands/rooms.md +598 -0
- package/commands/root-cause.md +40 -0
- package/commands/rs-experts.md +85 -0
- package/commands/rs-explain.md +100 -0
- package/commands/rs-fetch.md +94 -0
- package/commands/rs-thesis.md +85 -0
- package/commands/scenario-plan.md +40 -0
- package/commands/scheduled-tasks.md +285 -0
- package/commands/score-innovation.md +43 -0
- package/commands/scout.md +239 -0
- package/commands/setup.md +618 -0
- package/commands/snapshot.md +147 -0
- package/commands/speakers.md +84 -0
- package/commands/splash.md +28 -0
- package/commands/status.md +75 -0
- package/commands/structure-argument.md +42 -0
- package/commands/suggest-next.md +80 -0
- package/commands/systems-thinking.md +40 -0
- package/commands/think-hats.md +42 -0
- package/commands/update.md +181 -0
- package/commands/user-needs.md +40 -0
- package/commands/validate.md +40 -0
- package/commands/value-proposition.md +61 -0
- package/commands/vault.md +180 -0
- package/commands/visualize.md +52 -0
- package/commands/whitespace.md +507 -0
- package/commands/wiki.md +69 -0
- package/hooks/hooks.json +381 -0
- package/hooks/run-hook.cmd +64 -0
- package/lib/__init__.py +0 -0
- package/lib/__pycache__/__init__.cpython-312.pyc +0 -0
- package/lib/agents/auto-explore-agent.cjs +1043 -0
- package/lib/agents/reverse-salient-agent.cjs +679 -0
- package/lib/agents/tension-hook-agent.cjs +544 -0
- package/lib/brain/ROOM.md +44 -0
- package/lib/brain/chain-recommender.cjs +301 -0
- package/lib/chat/chat-context.js +185 -0
- package/lib/chat/chat-panel.js +721 -0
- package/lib/chat/fabric-chat.cjs +288 -0
- package/lib/chat/generative-tools.js +219 -0
- package/lib/conversation/ROOM.md +39 -0
- package/lib/conversation/classifier-rules.json +38 -0
- package/lib/conversation/classifier.cjs +264 -0
- package/lib/conversation/operator.cjs +287 -0
- package/lib/copy/115-spec-strings.cjs +55 -0
- package/lib/core/__init__.py +0 -0
- package/lib/core/__nav-stub.cjs +14 -0
- package/lib/core/__pycache__/__init__.cpython-312.pyc +0 -0
- package/lib/core/__pycache__/rs-math.cpython-312.pyc +0 -0
- package/lib/core/__pycache__/rs_cache.cpython-312.pyc +0 -0
- package/lib/core/__pycache__/rs_corpus.cpython-312.pyc +0 -0
- package/lib/core/__pycache__/rs_hybrid.cpython-312.pyc +0 -0
- package/lib/core/__pycache__/rs_math.cpython-312.pyc +0 -0
- package/lib/core/__pycache__/rs_rooms.cpython-312.pyc +0 -0
- package/lib/core/artifact-id.cjs +148 -0
- package/lib/core/asset-ops.cjs +151 -0
- package/lib/core/auto-commit-throttle.cjs +129 -0
- package/lib/core/bearer-token.cjs +199 -0
- package/lib/core/brain-client.cjs +865 -0
- package/lib/core/brain-derivation-prompts.cjs +326 -0
- package/lib/core/brain-derivation-queue.cjs +431 -0
- package/lib/core/brain-derivation.cjs +580 -0
- package/lib/core/brain-md-schema.cjs +528 -0
- package/lib/core/brain-md-staleness.cjs +357 -0
- package/lib/core/brain-response-sanitize.cjs +188 -0
- package/lib/core/bridge-writer.cjs +477 -0
- package/lib/core/chat-context-builder.cjs +253 -0
- package/lib/core/cross-room-aggregator.cjs +762 -0
- package/lib/core/daily-briefing.cjs +438 -0
- package/lib/core/decision-capture.cjs +618 -0
- package/lib/core/deep-links.cjs +82 -0
- package/lib/core/dispatch-optimizer.cjs +354 -0
- package/lib/core/dual-path-detector.cjs +84 -0
- package/lib/core/dual-path-detector.test.cjs +334 -0
- package/lib/core/exports-log.cjs +79 -0
- package/lib/core/feynman-minto-invariants.cjs +605 -0
- package/lib/core/folder-memory-async.cjs +338 -0
- package/lib/core/folder-memory-shared.cjs +890 -0
- package/lib/core/folder-memory.cjs +416 -0
- package/lib/core/framework-chain-composer.cjs +411 -0
- package/lib/core/frontmatter-schemas.cjs +330 -0
- package/lib/core/git-ops.cjs +141 -0
- package/lib/core/graph-ops.cjs +258 -0
- package/lib/core/hat-persistence.cjs +362 -0
- package/lib/core/index.cjs +60 -0
- package/lib/core/integration-registry.cjs +232 -0
- package/lib/core/intelligence-cascade.cjs +661 -0
- package/lib/core/lazygraph-ops.cjs +1057 -0
- package/lib/core/lru-cache.cjs +139 -0
- package/lib/core/mcp-profiles.cjs +182 -0
- package/lib/core/meeting-ops.cjs +54 -0
- package/lib/core/memory-ops.cjs +600 -0
- package/lib/core/migrations/ROOM.md +33 -0
- package/lib/core/migrations/phase-109-nodes-provenance.cjs +339 -0
- package/lib/core/migrations/phase-109-session-focus.cjs +99 -0
- package/lib/core/model-profiles.cjs +246 -0
- package/lib/core/mullins-scaffold.cjs +160 -0
- package/lib/core/nav-dial.cjs +316 -0
- package/lib/core/navigation/ROOM.md +15 -0
- package/lib/core/navigation/explanation.cjs +43 -0
- package/lib/core/navigation/focus.cjs +135 -0
- package/lib/core/navigation/ingestion.cjs +82 -0
- package/lib/core/navigation/insights.cjs +350 -0
- package/lib/core/navigation/memory-events.cjs +118 -0
- package/lib/core/navigation/neighborhood.cjs +78 -0
- package/lib/core/navigation/packet.cjs +182 -0
- package/lib/core/navigation/room-home.cjs +127 -0
- package/lib/core/navigation/transitions.cjs +82 -0
- package/lib/core/navigation-engine-shared.cjs +242 -0
- package/lib/core/navigation-engine.cjs +664 -0
- package/lib/core/navigation.cjs +60 -0
- package/lib/core/nl-graph-queries.cjs +164 -0
- package/lib/core/offer-presenter.cjs +406 -0
- package/lib/core/opportunity-extractor.cjs +183 -0
- package/lib/core/opportunity-ops.cjs +1371 -0
- package/lib/core/persona-ops.cjs +537 -0
- package/lib/core/persona-taxonomy.cjs +190 -0
- package/lib/core/platform-gates.cjs +120 -0
- package/lib/core/platform.cjs +257 -0
- package/lib/core/proactive-intelligence.cjs +528 -0
- package/lib/core/problem-type-router.cjs +315 -0
- package/lib/core/reasoning-ops.cjs +639 -0
- package/lib/core/reverse-salient-persona-suffix.cjs +115 -0
- package/lib/core/room-classifier-strict-mode.cjs +229 -0
- package/lib/core/room-db.cjs +127 -0
- package/lib/core/room-ops-async.cjs +92 -0
- package/lib/core/room-ops-shared.cjs +64 -0
- package/lib/core/room-ops-sync.cjs +70 -0
- package/lib/core/room-ops.cjs +32 -0
- package/lib/core/room-type-detector.cjs +386 -0
- package/lib/core/rs-brain-substrate-prompts.cjs +129 -0
- package/lib/core/rs-brain-substrate.cjs +570 -0
- package/lib/core/rs-breakthrough-scorer.cjs +255 -0
- package/lib/core/rs-canon-violations.cjs +82 -0
- package/lib/core/rs-chain-feeder.cjs +343 -0
- package/lib/core/rs-commercial-assessor.cjs +280 -0
- package/lib/core/rs-differential-scorer.cjs +376 -0
- package/lib/core/rs-domain-analyzer.cjs +385 -0
- package/lib/core/rs-egress-prompts.cjs +113 -0
- package/lib/core/rs-egress-telemetry.cjs +225 -0
- package/lib/core/rs-egress-violations.cjs +53 -0
- package/lib/core/rs-expert-mapper.cjs +467 -0
- package/lib/core/rs-fetcher-academic.cjs +697 -0
- package/lib/core/rs-fetcher-experts.cjs +314 -0
- package/lib/core/rs-fetcher-industry.cjs +731 -0
- package/lib/core/rs-fetcher-patents.cjs +564 -0
- package/lib/core/rs-innovation-classifier.cjs +194 -0
- package/lib/core/rs-mind-map.cjs +656 -0
- package/lib/core/rs-neo4j-writer.cjs +388 -0
- package/lib/core/rs-nl-to-query.cjs +425 -0
- package/lib/core/rs-pinecone-bridge.cjs +303 -0
- package/lib/core/rs-preprocessor.cjs +350 -0
- package/lib/core/rs-query-matrix.cjs +316 -0
- package/lib/core/rs-query-to-text.cjs +438 -0
- package/lib/core/rs-sqlite-mirror.cjs +443 -0
- package/lib/core/rs-thesis-generator.cjs +188 -0
- package/lib/core/rs_cache.py +479 -0
- package/lib/core/rs_corpus.py +468 -0
- package/lib/core/rs_hybrid.py +586 -0
- package/lib/core/rs_math.py +287 -0
- package/lib/core/rs_rooms.py +193 -0
- package/lib/core/scheduled-scanner.cjs +463 -0
- package/lib/core/scratchpad-ops.cjs +201 -0
- package/lib/core/section-8-trace-schema.cjs +138 -0
- package/lib/core/section-registry.cjs +111 -0
- package/lib/core/session-state.cjs +144 -0
- package/lib/core/shallow-doc-parser.cjs +174 -0
- package/lib/core/shallow-doc-parser.test.cjs +226 -0
- package/lib/core/skill-activation-router.cjs +284 -0
- package/lib/core/state-ops.cjs +46 -0
- package/lib/core/statusline-cache.cjs +266 -0
- package/lib/core/token-estimator.cjs +348 -0
- package/lib/core/user-archetype.cjs +239 -0
- package/lib/core/user-md-ops.cjs +524 -0
- package/lib/core/visual-ops.cjs +624 -0
- package/lib/core/write-lock.cjs +149 -0
- package/lib/graph/canvas-graph.js +467 -0
- package/lib/graph/constellation-config.cjs +299 -0
- package/lib/graph/graph-detail-panel.js +165 -0
- package/lib/hmi/ROOM.md +47 -0
- package/lib/hmi/across-session-memory.cjs +604 -0
- package/lib/hmi/cross-room-memory.cjs +575 -0
- package/lib/hmi/decoy-tier.cjs +395 -0
- package/lib/hmi/jtbd-classifier.cjs +219 -0
- package/lib/hmi/jtbd-state.cjs +199 -0
- package/lib/hmi/jtbd-taxonomy.json +392 -0
- package/lib/hmi/selector-dispatcher.cjs +546 -0
- package/lib/hmi/selector-telemetry.cjs +263 -0
- package/lib/hmi/shape-f0-renderer.cjs +139 -0
- package/lib/hmi/shape-f1-fallback.cjs +80 -0
- package/lib/hmi/shape-f1-renderer.cjs +138 -0
- package/lib/hmi/shape-f2-renderer.cjs +132 -0
- package/lib/hmi/shape-f3-renderer.cjs +66 -0
- package/lib/hmi/shape-f4-renderer.cjs +72 -0
- package/lib/hmi/shape-f5-renderer.cjs +155 -0
- package/lib/hmi/shape-f6-plan-review-renderer.cjs +312 -0
- package/lib/hmi/shape-f6-renderer.cjs +144 -0
- package/lib/hmi/shape-g-renderer.cjs +219 -0
- package/lib/hmi/shape-h-renderer.cjs +222 -0
- package/lib/hmi/tier-check.cjs +63 -0
- package/lib/import/PRECONDITIONS.md +41 -0
- package/lib/import/branding.cjs +210 -0
- package/lib/import/branding.test.cjs +235 -0
- package/lib/import/classifications-sync.cjs +104 -0
- package/lib/import/classifications-sync.test.cjs +129 -0
- package/lib/import/enricher.cjs +296 -0
- package/lib/import/enricher.test.cjs +273 -0
- package/lib/import/integration.test.cjs +376 -0
- package/lib/import/manifest.cjs +129 -0
- package/lib/import/manifest.schema.json +185 -0
- package/lib/import/manifest.test.cjs +123 -0
- package/lib/import/meeting-detector.cjs +92 -0
- package/lib/import/meeting-detector.test.cjs +100 -0
- package/lib/import/person-detector.cjs +229 -0
- package/lib/import/person-detector.test.cjs +149 -0
- package/lib/import/report.cjs +186 -0
- package/lib/import/report.test.cjs +186 -0
- package/lib/import/room-md-scaffolder.cjs +49 -0
- package/lib/import/router.cjs +224 -0
- package/lib/import/router.test.cjs +356 -0
- package/lib/import/run-all-tests.cjs +36 -0
- package/lib/import/smoke-test.cjs +213 -0
- package/lib/import/smoke-test.test.cjs +148 -0
- package/lib/import/test-fixtures/collision-vault/preexisting-room/STATE.md +8 -0
- package/lib/import/test-fixtures/collision-vault/preexisting-room/problem-definition/onboarding/onboarding.md +7 -0
- package/lib/import/test-fixtures/collision-vault/source/onboarding.md +5 -0
- package/lib/import/test-fixtures/obsidian-vault/.obsidian/workspace.json +1 -0
- package/lib/import/test-fixtures/obsidian-vault/notes/with-wikilinks.md +4 -0
- package/lib/import/test-fixtures/tiny-vault/notes/2026-01-15-team-sync.md +9 -0
- package/lib/import/test-fixtures/tiny-vault/notes/empty.md +3 -0
- package/lib/import/test-fixtures/tiny-vault/notes/onboarding.md +5 -0
- package/lib/import/test-fixtures/tiny-vault/notes/pricing.md +5 -0
- package/lib/import/test-fixtures/tiny-vault/notes/random.md +4 -0
- package/lib/import/undo.test.cjs +199 -0
- package/lib/import/vault-scanner.cjs +105 -0
- package/lib/import/vault-scanner.test.cjs +67 -0
- package/lib/mcp/app-html/dashboard.html +316 -0
- package/lib/mcp/app-html/graph.html +428 -0
- package/lib/mcp/app-html/mindrian-platform.html +1841 -0
- package/lib/mcp/app-html/wiki.html +383 -0
- package/lib/mcp/app-views.cjs +322 -0
- package/lib/mcp/brain-router.cjs +418 -0
- package/lib/mcp/capability-registry.cjs +62 -0
- package/lib/mcp/larry-context.cjs +46 -0
- package/lib/mcp/larry-server-instructions.md +114 -0
- package/lib/mcp/pipeline-state.cjs +275 -0
- package/lib/mcp/prompts.cjs +302 -0
- package/lib/mcp/resources.cjs +227 -0
- package/lib/mcp/session-catchup.cjs +327 -0
- package/lib/mcp/surface-detect.cjs +75 -0
- package/lib/mcp/tool-router.cjs +1034 -0
- package/lib/memory/aaak-compress.cjs +403 -0
- package/lib/memory/aaak-compress.test.cjs +288 -0
- package/lib/memory/async-artifact-auto-commit.test.cjs +223 -0
- package/lib/memory/bearer-token.test.cjs +315 -0
- package/lib/memory/brain-cache-lru.test.cjs +259 -0
- package/lib/memory/brain-client-query-shape.test.cjs +160 -0
- package/lib/memory/brain-derivation-graceful-degradation.test.cjs +1019 -0
- package/lib/memory/brain-derivation-queue.test.cjs +539 -0
- package/lib/memory/brain-derivation.test.cjs +634 -0
- package/lib/memory/brain-derive-command.test.cjs +534 -0
- package/lib/memory/brain-md-invariants-validator.test.cjs +704 -0
- package/lib/memory/brain-md-schema.test.cjs +467 -0
- package/lib/memory/brain-md-staleness.test.cjs +525 -0
- package/lib/memory/brain-server-resolution.test.cjs +314 -0
- package/lib/memory/chain-recommender.test.cjs +233 -0
- package/lib/memory/chat-context.test.cjs +128 -0
- package/lib/memory/command-registry.test.cjs +220 -0
- package/lib/memory/cross-room-aggregator.test.cjs +909 -0
- package/lib/memory/dashboard-server.test.cjs +256 -0
- package/lib/memory/debouncer-drain-at-prompt.test.cjs +389 -0
- package/lib/memory/decision-capture.test.cjs +632 -0
- package/lib/memory/decision-capture.worker.cjs +70 -0
- package/lib/memory/explain-decision-command.test.cjs +521 -0
- package/lib/memory/explain-decision-footer.test.cjs +316 -0
- package/lib/memory/explored-materials-store.cjs +392 -0
- package/lib/memory/feynman-minto-guardian.test.cjs +736 -0
- package/lib/memory/feynman-minto-invariants.test.cjs +511 -0
- package/lib/memory/feynman-prompts-drift.test.cjs +144 -0
- package/lib/memory/feynman-prompts.cjs +151 -0
- package/lib/memory/feynman-prompts.test.cjs +96 -0
- package/lib/memory/folder-memory-quadruple.test.cjs +548 -0
- package/lib/memory/folder-memory.test.cjs +503 -0
- package/lib/memory/framework-chain-composer.test.cjs +515 -0
- package/lib/memory/frontmatter-schema-validator.test.cjs +290 -0
- package/lib/memory/heal-command.test.cjs +604 -0
- package/lib/memory/index-artifact-transaction.test.cjs +333 -0
- package/lib/memory/lazygraph-rs-discoveries-view.test.cjs +122 -0
- package/lib/memory/mcp-input-validation.test.cjs +240 -0
- package/lib/memory/mcp-server-brain-deps.test.cjs +270 -0
- package/lib/memory/mcp-stack-fallback.test.cjs +433 -0
- package/lib/memory/minto-debouncer.test.cjs +407 -0
- package/lib/memory/minto-debouncer.worker.cjs +46 -0
- package/lib/memory/minto-migration-v88.test.cjs +265 -0
- package/lib/memory/minto-schema-v88.test.cjs +390 -0
- package/lib/memory/mos-status-renderer.test.cjs +631 -0
- package/lib/memory/narrative-schema.cjs +376 -0
- package/lib/memory/narrative-schema.test.cjs +209 -0
- package/lib/memory/nav-dial.test.cjs +414 -0
- package/lib/memory/navigation-engine-core.test.cjs +722 -0
- package/lib/memory/navigation-invariants.test.cjs +483 -0
- package/lib/memory/offer-presenter.test.cjs +554 -0
- package/lib/memory/on-stop-snapshot.test.cjs +404 -0
- package/lib/memory/pending-tension-store.cjs +373 -0
- package/lib/memory/post-compact-reinjection.test.cjs +854 -0
- package/lib/memory/post-write-triple.test.cjs +317 -0
- package/lib/memory/pre-compact-snapshot.test.cjs +495 -0
- package/lib/memory/problem-type-router.test.cjs +656 -0
- package/lib/memory/query-efficiency-telemetry.test.cjs +370 -0
- package/lib/memory/recompile-room-references.test.cjs +392 -0
- package/lib/memory/recompile-room-references.worker.cjs +42 -0
- package/lib/memory/record-decision-dual-write.test.cjs +454 -0
- package/lib/memory/room-classifier-strict-mode.test.cjs +417 -0
- package/lib/memory/room-minto-hook.test.cjs +398 -0
- package/lib/memory/rs-discovery-engine.test.cjs +323 -0
- package/lib/memory/run-feynman-tests.cjs +1247 -0
- package/lib/memory/security-trifecta.test.cjs +312 -0
- package/lib/memory/session-start-brain-staleness.test.cjs +363 -0
- package/lib/memory/session-start-triple-injection.test.cjs +514 -0
- package/lib/memory/sessionstart-banner-formatter.cjs +318 -0
- package/lib/memory/sessionstart-minto-banner.test.cjs +373 -0
- package/lib/memory/skill-activation-router.test.cjs +419 -0
- package/lib/memory/stamp-artifact-write.test.cjs +304 -0
- package/lib/memory/statusline-active-room.test.cjs +315 -0
- package/lib/memory/statusline-minto-segment.test.cjs +292 -0
- package/lib/memory/sync-async-entry-points.test.cjs +204 -0
- package/lib/memory/test-bridge-writer-enhanced.cjs +452 -0
- package/lib/memory/test-rs-brain-substrate-shape.cjs +529 -0
- package/lib/memory/test-rs-brain-substrate.cjs +636 -0
- package/lib/memory/test-rs-breakthrough-scorer.cjs +375 -0
- package/lib/memory/test-rs-canon-violations.cjs +218 -0
- package/lib/memory/test-rs-chain-feeder-core.cjs +344 -0
- package/lib/memory/test-rs-chain-feeder-skill-spawn.cjs +297 -0
- package/lib/memory/test-rs-commercial-assessor.cjs +385 -0
- package/lib/memory/test-rs-differential-scorer.cjs +480 -0
- package/lib/memory/test-rs-discovery-engine.cjs +603 -0
- package/lib/memory/test-rs-domain-analyzer.cjs +492 -0
- package/lib/memory/test-rs-egress-primitives.cjs +420 -0
- package/lib/memory/test-rs-expert-mapper.cjs +547 -0
- package/lib/memory/test-rs-explain-command.cjs +443 -0
- package/lib/memory/test-rs-fetcher-academic.cjs +848 -0
- package/lib/memory/test-rs-fetcher-experts.cjs +496 -0
- package/lib/memory/test-rs-fetcher-industry.cjs +702 -0
- package/lib/memory/test-rs-fetcher-patents.cjs +674 -0
- package/lib/memory/test-rs-innovation-classifier.cjs +301 -0
- package/lib/memory/test-rs-mind-map.cjs +646 -0
- package/lib/memory/test-rs-neo4j-writer.cjs +518 -0
- package/lib/memory/test-rs-nl-to-query.cjs +449 -0
- package/lib/memory/test-rs-pinecone-bridge.cjs +277 -0
- package/lib/memory/test-rs-preprocessor.cjs +433 -0
- package/lib/memory/test-rs-query-matrix.cjs +391 -0
- package/lib/memory/test-rs-query-to-text.cjs +551 -0
- package/lib/memory/test-rs-sqlite-mirror.cjs +649 -0
- package/lib/memory/test-rs-thesis-generator.cjs +360 -0
- package/lib/memory/triple-context-formatter.cjs +473 -0
- package/lib/memory/triple-context-formatter.test.cjs +442 -0
- package/lib/memory/user-md-persona.test.cjs +565 -0
- package/lib/memory/userpromptsubmit-integration.test.cjs +690 -0
- package/lib/memory/validators/README.md +157 -0
- package/lib/memory/validators/brain-md-invariants.cjs +475 -0
- package/lib/memory/validators/brain-substrate-invariants.cjs +285 -0
- package/lib/memory/validators/external-academic-invariants.cjs +249 -0
- package/lib/memory/validators/external-industry-invariants.cjs +271 -0
- package/lib/memory/validators/external-patents-invariants.cjs +266 -0
- package/lib/memory/validators/minto-invariants.cjs +62 -0
- package/lib/memory/validators/navigation-invariants.cjs +340 -0
- package/lib/memory/validators/queue-health.cjs +95 -0
- package/lib/memory/validators/snapshot-integrity.cjs +129 -0
- package/lib/memory/validators/stale-lifecycle.cjs +116 -0
- package/lib/memory/vault-section-minto-generator-atomic.test.cjs +556 -0
- package/lib/memory/vault-section-minto-generator-atomic.worker.cjs +73 -0
- package/lib/memory/write-lock-atomic.test.cjs +137 -0
- package/lib/memory/write-lock-atomic.worker.cjs +55 -0
- package/lib/parity/check-parity.cjs +83 -0
- package/lib/presentation/presentation-server.cjs +101 -0
- package/lib/presentation/presentation-watcher.cjs +123 -0
- package/lib/quickview/hub-server.cjs +719 -0
- package/lib/quickview/server.cjs +533 -0
- package/lib/render/JTBD-PALETTES.md +145 -0
- package/lib/render/ROOM.md +59 -0
- package/lib/render/render-v2.cjs +486 -0
- package/lib/render/render-v2.test.cjs +267 -0
- package/lib/render/render.cjs +65 -0
- package/lib/state/ROOM.md +46 -0
- package/lib/state/state-md-parser.cjs +215 -0
- package/lib/statusline/ROOM.md +38 -0
- package/lib/statusline/banner-suppression.cjs +50 -0
- package/lib/statusline/surface-detect.cjs +85 -0
- package/lib/update-bootstrap.sh.template +145 -0
- package/lib/vault/frontmatter-schema.cjs +297 -0
- package/lib/vault/room-scanner.cjs +352 -0
- package/lib/vault/wikilink-builder.cjs +231 -0
- package/lib/vault/wikilink-builder.test.cjs +182 -0
- package/lib/wiki/graph-links.cjs +281 -0
- package/lib/wiki/page-renderer.cjs +229 -0
- package/lib/wiki/wiki-chat.cjs +81 -0
- package/lib/wiki/wiki-layout.cjs +1459 -0
- package/lib/wiki/wiki-search.cjs +142 -0
- package/lib/wiki/wiki-server.cjs +678 -0
- package/lib/wiki/wiki-watcher.cjs +105 -0
- package/lib/workflow/ROOM.md +47 -0
- package/lib/workflow/command-resolver.cjs +155 -0
- package/lib/workflow/command-resolver.test.cjs +235 -0
- package/package.json +44 -0
- package/pipelines/analogy/01-decompose.md +80 -0
- package/pipelines/analogy/02-abstract.md +87 -0
- package/pipelines/analogy/03-search.md +135 -0
- package/pipelines/analogy/04-transfer.md +101 -0
- package/pipelines/analogy/05-validate.md +106 -0
- package/pipelines/analogy/CHAIN.md +56 -0
- package/pipelines/discovery/01-explore-domains.md +44 -0
- package/pipelines/discovery/02-think-hats.md +50 -0
- package/pipelines/discovery/03-analyze-needs.md +54 -0
- package/pipelines/discovery/CHAIN.md +37 -0
- package/pipelines/thesis/01-structure-argument.md +45 -0
- package/pipelines/thesis/02-challenge-assumptions.md +48 -0
- package/pipelines/thesis/03-build-thesis.md +54 -0
- package/pipelines/thesis/CHAIN.md +37 -0
- package/references/brain/causal-directives.md +91 -0
- package/references/brain/causal-enrichment.cypher +165 -0
- package/references/brain/command-triggers-schema.md +226 -0
- package/references/brain/graph-architecture.md +317 -0
- package/references/brain/query-patterns.md +460 -0
- package/references/brain/room-hierarchy-schema.md +218 -0
- package/references/brain/schema.md +76 -0
- package/references/capability-radar/capabilities-index.md +241 -0
- package/references/capability-radar/changelog-cache.md +81 -0
- package/references/causal/causal-schema.md +103 -0
- package/references/design/email-template-standard.md +155 -0
- package/references/design/graph-visualization-standard.md +178 -0
- package/references/document-generation.md +179 -0
- package/references/hsi/HSI-TOOLS-REFERENCE.md +222 -0
- package/references/import-config.md +141 -0
- package/references/integrations/detection-patterns.md +101 -0
- package/references/meeting/artifact-template.md +377 -0
- package/references/meeting/cross-meeting-intelligence.md +216 -0
- package/references/meeting/cross-relationship-patterns.md +202 -0
- package/references/meeting/live-join-interface.md +244 -0
- package/references/meeting/section-mapping.md +192 -0
- package/references/meeting/segment-classification.md +258 -0
- package/references/meeting/speaker-profile-template.md +219 -0
- package/references/meeting/summary-template.md +348 -0
- package/references/meeting/transcript-patterns.md +226 -0
- package/references/methodology/analyze-needs.md +135 -0
- package/references/methodology/analyze-systems.md +121 -0
- package/references/methodology/analyze-timing.md +149 -0
- package/references/methodology/beautiful-question.md +109 -0
- package/references/methodology/build-knowledge.md +161 -0
- package/references/methodology/build-thesis.md +237 -0
- package/references/methodology/challenge-assumptions.md +127 -0
- package/references/methodology/diagnose.md +169 -0
- package/references/methodology/dominant-designs.md +212 -0
- package/references/methodology/explore-domains.md +147 -0
- package/references/methodology/explore-futures.md +163 -0
- package/references/methodology/explore-trends.md +129 -0
- package/references/methodology/find-bottlenecks.md +131 -0
- package/references/methodology/grade.md +211 -0
- package/references/methodology/index.md +97 -0
- package/references/methodology/leadership.md +200 -0
- package/references/methodology/lean-canvas.md +116 -0
- package/references/methodology/macro-trends.md +192 -0
- package/references/methodology/map-unknowns.md +137 -0
- package/references/methodology/mullins-7-domains.md +104 -0
- package/references/methodology/problem-types.md +65 -0
- package/references/methodology/root-cause.md +178 -0
- package/references/methodology/sapphire-encoding.md +355 -0
- package/references/methodology/scenario-plan.md +178 -0
- package/references/methodology/score-innovation.md +154 -0
- package/references/methodology/structure-argument.md +158 -0
- package/references/methodology/systems-thinking.md +159 -0
- package/references/methodology/think-hats.md +147 -0
- package/references/methodology/triz-matrix.json +751 -0
- package/references/methodology/triz-principles.md +501 -0
- package/references/methodology/user-needs.md +199 -0
- package/references/methodology/validate.md +163 -0
- package/references/methodology/value-proposition.md +244 -0
- package/references/opportunities/funding-lifecycle.md +103 -0
- package/references/opportunities/grant-api-patterns.md +99 -0
- package/references/opportunities/opportunity-template.md +84 -0
- package/references/personality/assessment-philosophy.md +72 -0
- package/references/personality/lexicon.md +100 -0
- package/references/personality/persona-chains.md +56 -0
- package/references/personality/pws-lexicon-full.md +499 -0
- package/references/personality/voice-dna.md +156 -0
- package/references/personas/hat-perspectives.md +76 -0
- package/references/personas/persona-template.md +63 -0
- package/references/pipeline/act-output-contract.md +88 -0
- package/references/pipeline/chains-index.md +39 -0
- package/references/pws-profile-generation.md +79 -0
- package/references/reasoning/reasoning-schema.md +143 -0
- package/references/reasoning/reasoning-template.md +68 -0
- package/references/reasoning/run-template.md +38 -0
- package/references/research/RESEARCH_14_CLAUDE_CODE_SOURCE_ARCHITECTURE.md +209 -0
- package/references/research/RESEARCH_15_V1.8_OPTIMIZATION_JTBD.md +375 -0
- package/references/research/RESEARCH_16_NATIVE_FIRST_PLUGIN_ARCHITECTURE.md +575 -0
- package/references/research/RESEARCH_17_MCP_UI_FRAMEWORKS.md +272 -0
- package/references/taxonomy/TAXONOMY.md +192 -0
- package/references/templates/MINTO.md +36 -0
- package/references/user-research/2026-04-05-leah-lawrence-session.md +202 -0
- package/references/vault-kit/README.md +35 -0
- package/references/vault-kit/app.json +12 -0
- package/references/vault-kit/appearance.json +12 -0
- package/references/vault-kit/graph.json +35 -0
- package/references/vault-kit/snippets/mindrian-destijl.css +297 -0
- package/references/vault-kit/templates/new-artifact.md +37 -0
- package/references/vault-kit/templates/new-meeting-note.md +35 -0
- package/references/vault-kit/templates/new-team-profile.md +29 -0
- package/references/vault-kit/templates/new-xref.md +35 -0
- package/references/visual/symbol-system.md +151 -0
- package/skills/MOSDeckEngine/SKILL.md +325 -0
- package/skills/brain-connector/SKILL.md +114 -0
- package/skills/context-engine/SKILL.md +147 -0
- package/skills/conversation-mode/SKILL.md +102 -0
- package/skills/larry-personality/SKILL.md +219 -0
- package/skills/larry-personality/framework-chains.md +92 -0
- package/skills/larry-personality/mode-engine.md +185 -0
- package/skills/mullins-scaffold/SKILL.md +61 -0
- package/skills/mullins-scaffold/scaffold.json +146 -0
- package/skills/pws-methodology/SKILL.md +49 -0
- package/skills/room-passive/SKILL.md +165 -0
- package/skills/room-proactive/SKILL.md +250 -0
- 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 };
|