@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,138 @@
|
|
|
1
|
+
/*
|
|
2
|
+
* Copyright (c) 2026 Mindrian. BSL 1.1.
|
|
3
|
+
* (Business Source License 1.1; SPDX BUSL-1.1; see LICENSE.)
|
|
4
|
+
*
|
|
5
|
+
* Phase 94 Plan 05 -- Section-8 trace schema authority.
|
|
6
|
+
*
|
|
7
|
+
* The Section-8 decision-trace schema is forward-additive per the
|
|
8
|
+
* Phase 91 navigation-engine invariant: writers may emit fields not
|
|
9
|
+
* present in older readers; readers must tolerate unknown fields.
|
|
10
|
+
* This module is the canonical schema authority that:
|
|
11
|
+
*
|
|
12
|
+
* 1. Documents the shape every writer must produce (intent_persona
|
|
13
|
+
* block, plus the new web_research_tier field added in Plan 94-05).
|
|
14
|
+
* 2. Provides a machine-readable constant (SECTION_8_TRACE_SCHEMA)
|
|
15
|
+
* for downstream validators and the Plan 94-05 fixture suite
|
|
16
|
+
* (lib/memory/mcp-stack-fallback.test.cjs T6).
|
|
17
|
+
* 3. Stays a tiny re-export shim. The active writer authority is
|
|
18
|
+
* lib/core/navigation-engine.cjs (buildIntentPersona at line ~337
|
|
19
|
+
* and ~429) plus scripts/rs-discovery-engine.cjs (decision-trace
|
|
20
|
+
* writer for the rs-fetch pipeline). This file does NOT hijack
|
|
21
|
+
* writer responsibility; it documents the contract those writers
|
|
22
|
+
* MUST honor.
|
|
23
|
+
*
|
|
24
|
+
* web_research_tier (Plan 94-05 amendment):
|
|
25
|
+
* - Type: string enum, one of 'paid' | 'native' | 'cache' | null
|
|
26
|
+
* - Where: intent_persona.web_research_tier
|
|
27
|
+
* - Producer: rs-fetcher-* envelope tier annotation (Plan 94-05),
|
|
28
|
+
* copied into the Section-8 trace by the decision-trace writer
|
|
29
|
+
* reading the envelope.tier field.
|
|
30
|
+
* - Why: Canon Part 4 (every choice is graph data). Tier transitions
|
|
31
|
+
* (paid -> native, native -> cache) become graph data in the
|
|
32
|
+
* Section-8 trace, so the navigator can review which research-tier
|
|
33
|
+
* produced their evidence.
|
|
34
|
+
*
|
|
35
|
+
* Forward-additive contract (Phase 91 invariant): adding new fields
|
|
36
|
+
* to this schema does NOT break existing readers. Readers MUST treat
|
|
37
|
+
* the schema as a superset, ignoring fields they don't recognize.
|
|
38
|
+
*
|
|
39
|
+
* Pure CJS, zero npm deps, zero filesystem surface.
|
|
40
|
+
*/
|
|
41
|
+
'use strict';
|
|
42
|
+
|
|
43
|
+
// ---------- Tier vocabulary ----------
|
|
44
|
+
|
|
45
|
+
// Canonical tier values for web research per Plan 94-05 amendment.
|
|
46
|
+
// 'paid' : Tavily / Firecrawl / Exa / keyed academic API returned data.
|
|
47
|
+
// 'native' : Anthropic native WebSearch (free fallback) returned data.
|
|
48
|
+
// 'cache' : Read most-recent fetched_results.json from <room>/.mindrian/.
|
|
49
|
+
// 'derived' : Post-processor over an upstream fetcher (e.g. experts over
|
|
50
|
+
// academic.papers). Not a direct network tier.
|
|
51
|
+
const WEB_RESEARCH_TIERS = Object.freeze(['paid', 'native', 'cache', 'derived']);
|
|
52
|
+
|
|
53
|
+
// Canonical source tags. These mirror the rs-fetcher-* envelope.source
|
|
54
|
+
// field. Any new source must be added here AND in the fetcher's SOURCES
|
|
55
|
+
// frozen array.
|
|
56
|
+
const WEB_RESEARCH_SOURCES = Object.freeze([
|
|
57
|
+
'tavily', 'firecrawl', 'exa',
|
|
58
|
+
'websearch', 'cache', 'derived',
|
|
59
|
+
'openalex', 'arxiv', 'pubmed', 'scopus', 'ieee', 'nature',
|
|
60
|
+
'google_patents', 'uspto',
|
|
61
|
+
]);
|
|
62
|
+
|
|
63
|
+
// ---------- SECTION_8_TRACE_SCHEMA ----------
|
|
64
|
+
//
|
|
65
|
+
// JSON-Schema-flavored literal documenting the Section-8 decision-trace
|
|
66
|
+
// shape. Forward-additive: writers may emit additional keys; readers
|
|
67
|
+
// MUST ignore unknown keys.
|
|
68
|
+
//
|
|
69
|
+
// The schema is intentionally narrow: only the intent_persona block is
|
|
70
|
+
// fully documented because that's where Plan 94-05 adds the new
|
|
71
|
+
// web_research_tier field. Other Section-8 trace blocks (decision_log,
|
|
72
|
+
// routing_source, brain_md_tier_mode, etc.) are out of scope for this
|
|
73
|
+
// plan and live in their owning phase's writer authority.
|
|
74
|
+
|
|
75
|
+
const SECTION_8_TRACE_SCHEMA = Object.freeze({
|
|
76
|
+
$id: 'mindrian.section-8-trace.v1',
|
|
77
|
+
type: 'object',
|
|
78
|
+
description: 'Section-8 decision-trace per Canon Part 4. Forward-additive '
|
|
79
|
+
+ 'per Phase 91 invariant: readers tolerate unknown keys.',
|
|
80
|
+
properties: {
|
|
81
|
+
intent_persona: {
|
|
82
|
+
type: 'object',
|
|
83
|
+
description: 'Persona + intent classification block. Phase 91 navigation-'
|
|
84
|
+
+ 'engine writer authority (buildIntentPersona). Plan 94-05 adds the '
|
|
85
|
+
+ 'web_research_tier field.',
|
|
86
|
+
properties: {
|
|
87
|
+
// ---- Plan 94-05 amendment: new field ----
|
|
88
|
+
web_research_tier: {
|
|
89
|
+
type: ['string', 'null'],
|
|
90
|
+
enum: ['paid', 'native', 'cache', 'derived', null],
|
|
91
|
+
description: 'Web research tier that produced the evidence backing '
|
|
92
|
+
+ 'this decision. paid = Tavily / Firecrawl / Exa / keyed '
|
|
93
|
+
+ 'academic API; native = Anthropic native WebSearch; cache = '
|
|
94
|
+
+ 'read from fetched_results.json; derived = post-processor '
|
|
95
|
+
+ 'over an upstream fetcher; null = no web research run for '
|
|
96
|
+
+ 'this decision (e.g. methodology-only path). Producer: '
|
|
97
|
+
+ 'rs-fetcher-* envelope.tier annotation, copied by the '
|
|
98
|
+
+ 'decision-trace writer.',
|
|
99
|
+
added_in_plan: '94-05',
|
|
100
|
+
},
|
|
101
|
+
// Other intent_persona fields (not exhaustive; documented elsewhere).
|
|
102
|
+
},
|
|
103
|
+
additionalProperties: true,
|
|
104
|
+
},
|
|
105
|
+
},
|
|
106
|
+
additionalProperties: true,
|
|
107
|
+
});
|
|
108
|
+
|
|
109
|
+
// ---------- Helpers ----------
|
|
110
|
+
|
|
111
|
+
// Validate a candidate web_research_tier scalar. Returns true on null
|
|
112
|
+
// or one of the canonical tier values.
|
|
113
|
+
function isValidWebResearchTier(value) {
|
|
114
|
+
if (value === null || value === undefined) return true;
|
|
115
|
+
if (typeof value !== 'string') return false;
|
|
116
|
+
return WEB_RESEARCH_TIERS.indexOf(value) >= 0;
|
|
117
|
+
}
|
|
118
|
+
|
|
119
|
+
// Validate a candidate web research source tag. Returns true on null
|
|
120
|
+
// or one of the canonical source values.
|
|
121
|
+
function isValidWebResearchSource(value) {
|
|
122
|
+
if (value === null || value === undefined) return true;
|
|
123
|
+
if (typeof value !== 'string') return false;
|
|
124
|
+
return WEB_RESEARCH_SOURCES.indexOf(value) >= 0;
|
|
125
|
+
}
|
|
126
|
+
|
|
127
|
+
// ---------- Exports ----------
|
|
128
|
+
|
|
129
|
+
module.exports = {
|
|
130
|
+
SECTION_8_TRACE_SCHEMA: SECTION_8_TRACE_SCHEMA,
|
|
131
|
+
WEB_RESEARCH_TIERS: WEB_RESEARCH_TIERS,
|
|
132
|
+
WEB_RESEARCH_SOURCES: WEB_RESEARCH_SOURCES,
|
|
133
|
+
isValidWebResearchTier: isValidWebResearchTier,
|
|
134
|
+
isValidWebResearchSource: isValidWebResearchSource,
|
|
135
|
+
// Convenience field-name constant for downstream writers / readers
|
|
136
|
+
// that want to refer to the new field without a string literal.
|
|
137
|
+
WEB_RESEARCH_TIER_FIELD: 'web_research_tier',
|
|
138
|
+
};
|
|
@@ -0,0 +1,111 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* MindrianOS Plugin — Section Registry
|
|
3
|
+
* Metadata for DD-aligned sections + dynamic discovery.
|
|
4
|
+
* Pure Node.js built-ins only.
|
|
5
|
+
*/
|
|
6
|
+
|
|
7
|
+
'use strict';
|
|
8
|
+
|
|
9
|
+
const fs = require('fs');
|
|
10
|
+
const path = require('path');
|
|
11
|
+
|
|
12
|
+
/**
|
|
13
|
+
* 8 DD-aligned core sections with label and De Stijl color.
|
|
14
|
+
* Sourced from build-graph SECTION_COLORS/SECTION_LABELS.
|
|
15
|
+
*/
|
|
16
|
+
const CORE_SECTIONS = {
|
|
17
|
+
'problem-definition': { label: 'PROBLEM DEFINITION', color: '#A63D2F' },
|
|
18
|
+
'market-analysis': { label: 'MARKET ANALYSIS', color: '#C8A43C' },
|
|
19
|
+
'solution-design': { label: 'SOLUTION DESIGN', color: '#5C5A56' },
|
|
20
|
+
'business-model': { label: 'BUSINESS MODEL', color: '#2D6B4A' },
|
|
21
|
+
'competitive-analysis': { label: 'COMPETITIVE ANALYSIS', color: '#B5602A' },
|
|
22
|
+
'team-execution': { label: 'TEAM & EXECUTION', color: '#1E3A6E' },
|
|
23
|
+
'legal-ip': { label: 'LEGAL & IP', color: '#6B4E8B' },
|
|
24
|
+
'financial-model': { label: 'FINANCIAL MODEL', color: '#2A6B5E' },
|
|
25
|
+
};
|
|
26
|
+
|
|
27
|
+
/**
|
|
28
|
+
* Pre-assigned metadata for known extension sections.
|
|
29
|
+
*/
|
|
30
|
+
const EXTENDED_SECTION_META = {
|
|
31
|
+
'opportunity-bank': { label: 'OPPORTUNITY BANK', color: '#8B6914' },
|
|
32
|
+
'funding': { label: 'FUNDING', color: '#1A5276' },
|
|
33
|
+
'personas': { label: 'PERSONAS', color: '#6C3483' },
|
|
34
|
+
};
|
|
35
|
+
|
|
36
|
+
/**
|
|
37
|
+
* Directories that are structural (not sections).
|
|
38
|
+
*/
|
|
39
|
+
const STRUCTURAL_DIRS = ['meetings', 'team'];
|
|
40
|
+
|
|
41
|
+
/**
|
|
42
|
+
* Discover sections in a room directory.
|
|
43
|
+
* A directory qualifies as a section if it contains at least one .md file
|
|
44
|
+
* or has a STATE.md. Excludes hidden dirs and structural dirs.
|
|
45
|
+
*
|
|
46
|
+
* @param {string} roomDir - Absolute or relative path to room directory
|
|
47
|
+
* @returns {{ core: string[], extended: string[], all: string[], getMeta: function }}
|
|
48
|
+
*/
|
|
49
|
+
function discoverSections(roomDir) {
|
|
50
|
+
const resolved = path.resolve(roomDir);
|
|
51
|
+
const core = [];
|
|
52
|
+
const extended = [];
|
|
53
|
+
|
|
54
|
+
let entries;
|
|
55
|
+
try {
|
|
56
|
+
entries = fs.readdirSync(resolved, { withFileTypes: true });
|
|
57
|
+
} catch (e) {
|
|
58
|
+
return { core, extended, all: [], getMeta: () => null };
|
|
59
|
+
}
|
|
60
|
+
|
|
61
|
+
for (const entry of entries) {
|
|
62
|
+
if (!entry.isDirectory()) continue;
|
|
63
|
+
const name = entry.name;
|
|
64
|
+
|
|
65
|
+
// Skip hidden directories
|
|
66
|
+
if (name.startsWith('.')) continue;
|
|
67
|
+
|
|
68
|
+
// Skip structural directories
|
|
69
|
+
if (STRUCTURAL_DIRS.includes(name)) continue;
|
|
70
|
+
|
|
71
|
+
const dirPath = path.join(resolved, name);
|
|
72
|
+
|
|
73
|
+
// Check if directory qualifies as a section
|
|
74
|
+
const hasStateMd = fs.existsSync(path.join(dirPath, 'STATE.md'));
|
|
75
|
+
let hasMdFiles = false;
|
|
76
|
+
if (!hasStateMd) {
|
|
77
|
+
try {
|
|
78
|
+
const files = fs.readdirSync(dirPath);
|
|
79
|
+
hasMdFiles = files.some(f => f.endsWith('.md'));
|
|
80
|
+
} catch (e) {
|
|
81
|
+
// skip unreadable dirs
|
|
82
|
+
continue;
|
|
83
|
+
}
|
|
84
|
+
}
|
|
85
|
+
|
|
86
|
+
if (!hasStateMd && !hasMdFiles) continue;
|
|
87
|
+
|
|
88
|
+
if (CORE_SECTIONS[name]) {
|
|
89
|
+
core.push(name);
|
|
90
|
+
} else {
|
|
91
|
+
extended.push(name);
|
|
92
|
+
}
|
|
93
|
+
}
|
|
94
|
+
|
|
95
|
+
const all = [...core, ...extended];
|
|
96
|
+
|
|
97
|
+
function getMeta(name) {
|
|
98
|
+
if (CORE_SECTIONS[name]) return { ...CORE_SECTIONS[name], type: 'core' };
|
|
99
|
+
if (EXTENDED_SECTION_META[name]) return { ...EXTENDED_SECTION_META[name], type: 'extended' };
|
|
100
|
+
// Unknown extension — generate label from name
|
|
101
|
+
return {
|
|
102
|
+
label: name.replace(/-/g, ' ').toUpperCase(),
|
|
103
|
+
color: '#555555',
|
|
104
|
+
type: 'extended',
|
|
105
|
+
};
|
|
106
|
+
}
|
|
107
|
+
|
|
108
|
+
return { core, extended, all, getMeta };
|
|
109
|
+
}
|
|
110
|
+
|
|
111
|
+
module.exports = { CORE_SECTIONS, EXTENDED_SECTION_META, STRUCTURAL_DIRS, discoverSections };
|
|
@@ -0,0 +1,144 @@
|
|
|
1
|
+
'use strict';
|
|
2
|
+
|
|
3
|
+
/**
|
|
4
|
+
* session-state.cjs -- Structured last-session.md writer
|
|
5
|
+
*
|
|
6
|
+
* Writes a structured last-session.md to room/.mindrian/ with fields
|
|
7
|
+
* consumable by future KAIROS daily logs. Called from on-stop hook.
|
|
8
|
+
*
|
|
9
|
+
* Requirement: READY-01
|
|
10
|
+
*/
|
|
11
|
+
|
|
12
|
+
const fs = require('fs');
|
|
13
|
+
const path = require('path');
|
|
14
|
+
|
|
15
|
+
/**
|
|
16
|
+
* Write structured session state to last-session.md
|
|
17
|
+
*
|
|
18
|
+
* @param {string} roomPath - Absolute path to room/ directory
|
|
19
|
+
* @param {object} state - Session state fields
|
|
20
|
+
* @param {string} [state.active_methodology] - Currently active methodology (e.g., "bono-six-hats", "minto-pyramid")
|
|
21
|
+
* @param {string[]} [state.open_questions] - Unresolved questions from this session
|
|
22
|
+
* @param {string} [state.next_suggested_action] - What Larry recommends doing next
|
|
23
|
+
* @param {number} [state.confidence_level] - 0-100 confidence in current room completeness
|
|
24
|
+
* @param {string[]} [state.artifacts_created] - List of artifacts filed this session
|
|
25
|
+
* @param {number} [state.session_duration] - Session duration in seconds
|
|
26
|
+
*/
|
|
27
|
+
function writeSessionState(roomPath, state = {}) {
|
|
28
|
+
if (!roomPath || !fs.existsSync(roomPath)) {
|
|
29
|
+
return { success: false, error: 'Room path does not exist' };
|
|
30
|
+
}
|
|
31
|
+
|
|
32
|
+
const mindrianDir = path.join(roomPath, '.mindrian');
|
|
33
|
+
if (!fs.existsSync(mindrianDir)) {
|
|
34
|
+
fs.mkdirSync(mindrianDir, { recursive: true });
|
|
35
|
+
}
|
|
36
|
+
|
|
37
|
+
const now = new Date().toISOString();
|
|
38
|
+
const {
|
|
39
|
+
active_methodology = 'none',
|
|
40
|
+
open_questions = [],
|
|
41
|
+
next_suggested_action = 'Review room state and continue where you left off',
|
|
42
|
+
confidence_level = 50,
|
|
43
|
+
artifacts_created = [],
|
|
44
|
+
session_duration = 0,
|
|
45
|
+
} = state;
|
|
46
|
+
|
|
47
|
+
// Format duration as human-readable
|
|
48
|
+
const mins = Math.floor(session_duration / 60);
|
|
49
|
+
const secs = session_duration % 60;
|
|
50
|
+
const durationStr = mins > 0 ? `${mins}m ${secs}s` : `${secs}s`;
|
|
51
|
+
|
|
52
|
+
const content = `---
|
|
53
|
+
last_updated: "${now}"
|
|
54
|
+
active_methodology: "${active_methodology}"
|
|
55
|
+
confidence_level: ${confidence_level}
|
|
56
|
+
session_duration_seconds: ${session_duration}
|
|
57
|
+
artifacts_count: ${artifacts_created.length}
|
|
58
|
+
---
|
|
59
|
+
|
|
60
|
+
# Last Session State
|
|
61
|
+
|
|
62
|
+
**Ended:** ${now}
|
|
63
|
+
**Duration:** ${durationStr}
|
|
64
|
+
**Active Methodology:** ${active_methodology}
|
|
65
|
+
**Confidence Level:** ${confidence_level}/100
|
|
66
|
+
|
|
67
|
+
## Open Questions
|
|
68
|
+
|
|
69
|
+
${open_questions.length > 0
|
|
70
|
+
? open_questions.map(q => `- ${q}`).join('\n')
|
|
71
|
+
: '- No open questions from this session'}
|
|
72
|
+
|
|
73
|
+
## Next Suggested Action
|
|
74
|
+
|
|
75
|
+
${next_suggested_action}
|
|
76
|
+
|
|
77
|
+
## Artifacts Created
|
|
78
|
+
|
|
79
|
+
${artifacts_created.length > 0
|
|
80
|
+
? artifacts_created.map(a => `- ${a}`).join('\n')
|
|
81
|
+
: '- No artifacts created this session'}
|
|
82
|
+
`;
|
|
83
|
+
|
|
84
|
+
const filePath = path.join(mindrianDir, 'last-session.md');
|
|
85
|
+
fs.writeFileSync(filePath, content, 'utf8');
|
|
86
|
+
|
|
87
|
+
return { success: true, path: filePath, timestamp: now };
|
|
88
|
+
}
|
|
89
|
+
|
|
90
|
+
/**
|
|
91
|
+
* Read last session state from last-session.md
|
|
92
|
+
*
|
|
93
|
+
* @param {string} roomPath - Absolute path to room/ directory
|
|
94
|
+
* @returns {object|null} Parsed session state or null if not found
|
|
95
|
+
*/
|
|
96
|
+
function readSessionState(roomPath) {
|
|
97
|
+
if (!roomPath) return null;
|
|
98
|
+
|
|
99
|
+
const filePath = path.join(roomPath, '.mindrian', 'last-session.md');
|
|
100
|
+
if (!fs.existsSync(filePath)) return null;
|
|
101
|
+
|
|
102
|
+
try {
|
|
103
|
+
const raw = fs.readFileSync(filePath, 'utf8');
|
|
104
|
+
const frontmatterMatch = raw.match(/^---\n([\s\S]*?)\n---/);
|
|
105
|
+
if (!frontmatterMatch) return null;
|
|
106
|
+
|
|
107
|
+
const fm = frontmatterMatch[1];
|
|
108
|
+
const state = {};
|
|
109
|
+
|
|
110
|
+
const extract = (key) => {
|
|
111
|
+
const m = fm.match(new RegExp(`${key}:\\s*"?([^"\\n]*)"?`));
|
|
112
|
+
return m ? m[1].trim() : null;
|
|
113
|
+
};
|
|
114
|
+
|
|
115
|
+
state.last_updated = extract('last_updated');
|
|
116
|
+
state.active_methodology = extract('active_methodology');
|
|
117
|
+
state.confidence_level = parseInt(extract('confidence_level') || '50', 10);
|
|
118
|
+
state.session_duration_seconds = parseInt(extract('session_duration_seconds') || '0', 10);
|
|
119
|
+
state.artifacts_count = parseInt(extract('artifacts_count') || '0', 10);
|
|
120
|
+
|
|
121
|
+
// Extract open questions from body
|
|
122
|
+
const questionsMatch = raw.match(/## Open Questions\n\n([\s\S]*?)(?=\n## )/);
|
|
123
|
+
if (questionsMatch) {
|
|
124
|
+
state.open_questions = questionsMatch[1]
|
|
125
|
+
.split('\n')
|
|
126
|
+
.filter(l => l.startsWith('- ') && !l.includes('No open questions'))
|
|
127
|
+
.map(l => l.replace(/^- /, ''));
|
|
128
|
+
} else {
|
|
129
|
+
state.open_questions = [];
|
|
130
|
+
}
|
|
131
|
+
|
|
132
|
+
// Extract next suggested action
|
|
133
|
+
const actionMatch = raw.match(/## Next Suggested Action\n\n([\s\S]*?)(?=\n## )/);
|
|
134
|
+
if (actionMatch) {
|
|
135
|
+
state.next_suggested_action = actionMatch[1].trim();
|
|
136
|
+
}
|
|
137
|
+
|
|
138
|
+
return state;
|
|
139
|
+
} catch (e) {
|
|
140
|
+
return null;
|
|
141
|
+
}
|
|
142
|
+
}
|
|
143
|
+
|
|
144
|
+
module.exports = { writeSessionState, readSessionState };
|
|
@@ -0,0 +1,174 @@
|
|
|
1
|
+
'use strict';
|
|
2
|
+
|
|
3
|
+
/*
|
|
4
|
+
* Phase 115-02 -- shallow-doc-parser (DISCRETION-01 strategy b)
|
|
5
|
+
*
|
|
6
|
+
* Extracts 1 user + 1 venture + 1-3 claim nodes from CV / memo / pitch paste.
|
|
7
|
+
* Routes ALL graph writes through lib/core/navigation.cjs (Phase 109 chokepoint).
|
|
8
|
+
* Graceful degradation: returns { user: null, venture: null, claims: [] } on
|
|
9
|
+
* parse failure; NEVER throws.
|
|
10
|
+
*
|
|
11
|
+
* Canon Part 7 (reuse before build): consumes the existing Phase 109 navigation
|
|
12
|
+
* surface. setFocus + recordMemoryEvent. No direct require of room-db.cjs.
|
|
13
|
+
*
|
|
14
|
+
* Canon Part 8 (graph boundary): no Brain queries, no user-content egress.
|
|
15
|
+
* The function operates entirely on the input string and writes only to
|
|
16
|
+
* LOCAL room.db via navigation.cjs.
|
|
17
|
+
*
|
|
18
|
+
* Pitfall 7 alignment: parseRoleHints maps to the 7-key role_blend axes
|
|
19
|
+
* (Founder / Researcher / Investor / Operator). Researcher.IND and
|
|
20
|
+
* Founder.grant are NOT inferable from a CV paste alone today; they alias
|
|
21
|
+
* to default until a future phase extends role_blend.
|
|
22
|
+
*
|
|
23
|
+
* Cold-start contract: shallow file is best-effort. If the document does
|
|
24
|
+
* not contain detectable role / venture / claims, the parser returns the
|
|
25
|
+
* empty result and emits zero memory events. This is the explicit
|
|
26
|
+
* graceful-degradation path (DISCRETION-01 strategy (b) "falls back to
|
|
27
|
+
* 0 nodes on failure").
|
|
28
|
+
*/
|
|
29
|
+
|
|
30
|
+
const navigation = require('./navigation.cjs');
|
|
31
|
+
const crypto = require('node:crypto');
|
|
32
|
+
|
|
33
|
+
// ----- Role detection (7-key role_blend space, Pitfall 7) -----
|
|
34
|
+
|
|
35
|
+
const ROLE_PATTERNS = [
|
|
36
|
+
{ canonical: 'Founder', regex: /\b(founder|co-?founder|ceo|cto)\b/i },
|
|
37
|
+
{ canonical: 'Investor', regex: /\b(gp|lp|managing director|managing partner|venture partner|principal at)\b/i },
|
|
38
|
+
{ canonical: 'Researcher', regex: /\b(phd|researcher|professor|scientist|investigator|principal investigator|\bpi\b)\b/i },
|
|
39
|
+
{ canonical: 'Operator', regex: /\b(coo|head of operations|director of operations|vp operations|chief operating)\b/i },
|
|
40
|
+
];
|
|
41
|
+
|
|
42
|
+
function parseRoleHints(text) {
|
|
43
|
+
if (!text || typeof text !== 'string') return null;
|
|
44
|
+
for (const { canonical, regex } of ROLE_PATTERNS) {
|
|
45
|
+
if (regex.test(text)) {
|
|
46
|
+
return { canonical_role: canonical, confidence: 0.85 };
|
|
47
|
+
}
|
|
48
|
+
}
|
|
49
|
+
return null;
|
|
50
|
+
}
|
|
51
|
+
|
|
52
|
+
// ----- Venture detection -----
|
|
53
|
+
|
|
54
|
+
function parseVentureHint(text) {
|
|
55
|
+
if (!text || typeof text !== 'string') return { name: null, stage: 'unknown' };
|
|
56
|
+
|
|
57
|
+
// Clinical trial NCT ID anywhere in the text -> dedicated stage
|
|
58
|
+
const nct = text.match(/\b(NCT\d{8})\b/);
|
|
59
|
+
if (nct) {
|
|
60
|
+
return { name: nct[1], stage: 'clinical-trial' };
|
|
61
|
+
}
|
|
62
|
+
|
|
63
|
+
// "Founder of X", "CEO of X", "founded X", "PI on X"
|
|
64
|
+
// Capture 1-3 capitalized words as a name. Use [ \t]+ for separators
|
|
65
|
+
// so the match does NOT span across newlines (which can pull in the next
|
|
66
|
+
// CV section like "Founder of Acme Robotics\nPhD" -> "Acme Robotics PhD").
|
|
67
|
+
const namePattern = /(?:founder of|co-?founder of|ceo of|cto of|founded|pi on|principal investigator on)[ \t]+([A-Z][\w-]*(?:[ \t]+[A-Z][\w-]*){0,2})/i;
|
|
68
|
+
const m = text.match(namePattern);
|
|
69
|
+
if (m && m[1]) {
|
|
70
|
+
return { name: m[1].trim(), stage: 'unknown' };
|
|
71
|
+
}
|
|
72
|
+
return { name: null, stage: 'unknown' };
|
|
73
|
+
}
|
|
74
|
+
|
|
75
|
+
// ----- Claim detection (top-level bullet statements) -----
|
|
76
|
+
|
|
77
|
+
function parseClaims(text, max) {
|
|
78
|
+
const limit = Number.isInteger(max) && max > 0 ? max : 3;
|
|
79
|
+
if (!text || typeof text !== 'string') return [];
|
|
80
|
+
const lines = text.split(/\r?\n/);
|
|
81
|
+
const claims = [];
|
|
82
|
+
for (const line of lines) {
|
|
83
|
+
// Match leading bullet markers (-, *, bullet char, or "1.", "2.", etc.) followed by 10-200 chars
|
|
84
|
+
const m = line.match(/^[\s]*(?:[-*•]|\d+\.)\s+(.{10,200}?)\s*$/);
|
|
85
|
+
if (m && m[1]) {
|
|
86
|
+
claims.push({ text: m[1].trim() });
|
|
87
|
+
if (claims.length >= limit) break;
|
|
88
|
+
}
|
|
89
|
+
}
|
|
90
|
+
return claims;
|
|
91
|
+
}
|
|
92
|
+
|
|
93
|
+
// ----- Node ID helper (deterministic) -----
|
|
94
|
+
|
|
95
|
+
function nodeIdFor(prefix, content) {
|
|
96
|
+
const hash = crypto.createHash('sha256').update(String(content)).digest('hex').slice(0, 8);
|
|
97
|
+
return prefix + '-' + hash;
|
|
98
|
+
}
|
|
99
|
+
|
|
100
|
+
// ----- Internal: safe call to navigation.recordMemoryEvent if present -----
|
|
101
|
+
// The Phase 109 public surface today exposes setFocus + 12 other functions.
|
|
102
|
+
// recordMemoryEvent is the proposed 14th re-export (per RESEARCH cross-phase
|
|
103
|
+
// wiring). When absent at runtime, we no-op the memory_event call so the
|
|
104
|
+
// shallow-file flow still completes (graceful degradation per DISCRETION-01).
|
|
105
|
+
|
|
106
|
+
function safeRecord(sessionId, eventType, payload) {
|
|
107
|
+
if (typeof navigation.recordMemoryEvent === 'function') {
|
|
108
|
+
try {
|
|
109
|
+
navigation.recordMemoryEvent(sessionId, eventType, payload);
|
|
110
|
+
} catch (_) {
|
|
111
|
+
// graceful degradation
|
|
112
|
+
}
|
|
113
|
+
}
|
|
114
|
+
}
|
|
115
|
+
|
|
116
|
+
// ----- extractShallow (DISCRETION-01 strategy (b) entry point) -----
|
|
117
|
+
|
|
118
|
+
function extractShallow(text, sessionId) {
|
|
119
|
+
const result = { user: null, venture: null, claims: [] };
|
|
120
|
+
if (!text || typeof text !== 'string') return result;
|
|
121
|
+
if (!sessionId || typeof sessionId !== 'string') return result;
|
|
122
|
+
|
|
123
|
+
try {
|
|
124
|
+
const role = parseRoleHints(text);
|
|
125
|
+
const venture = parseVentureHint(text);
|
|
126
|
+
const claims = parseClaims(text);
|
|
127
|
+
|
|
128
|
+
// 1 user node (if a role inferred)
|
|
129
|
+
if (role) {
|
|
130
|
+
const userNodeId = nodeIdFor('user', role.canonical_role + ':' + sessionId);
|
|
131
|
+
result.user = {
|
|
132
|
+
node_id: userNodeId,
|
|
133
|
+
canonical_role: role.canonical_role,
|
|
134
|
+
confidence: role.confidence,
|
|
135
|
+
};
|
|
136
|
+
safeRecord(sessionId, 'node_created', { node_id: userNodeId, kind: 'user', canonical_role: role.canonical_role });
|
|
137
|
+
}
|
|
138
|
+
|
|
139
|
+
// 1 venture node (if named entity found) -- also sets focus
|
|
140
|
+
if (venture && venture.name) {
|
|
141
|
+
const ventureNodeId = nodeIdFor('venture', venture.name);
|
|
142
|
+
result.venture = {
|
|
143
|
+
node_id: ventureNodeId,
|
|
144
|
+
name: venture.name,
|
|
145
|
+
stage: venture.stage,
|
|
146
|
+
};
|
|
147
|
+
// setFocus signature aligned with Phase 109 closed surface (sessionId, nodeId, setBy)
|
|
148
|
+
try {
|
|
149
|
+
navigation.setFocus(sessionId, ventureNodeId, 'auto-from-upload');
|
|
150
|
+
} catch (_) {
|
|
151
|
+
// graceful degradation; focus is best-effort
|
|
152
|
+
}
|
|
153
|
+
safeRecord(sessionId, 'node_created', { node_id: ventureNodeId, kind: 'venture', name: venture.name });
|
|
154
|
+
}
|
|
155
|
+
|
|
156
|
+
// 1-3 claim nodes
|
|
157
|
+
for (const c of claims) {
|
|
158
|
+
const claimNodeId = nodeIdFor('claim', c.text);
|
|
159
|
+
result.claims.push({ node_id: claimNodeId, text: c.text });
|
|
160
|
+
safeRecord(sessionId, 'node_created', { node_id: claimNodeId, kind: 'claim' });
|
|
161
|
+
}
|
|
162
|
+
} catch (_) {
|
|
163
|
+
// Catch-all graceful degradation: never throw upstream.
|
|
164
|
+
}
|
|
165
|
+
|
|
166
|
+
return result;
|
|
167
|
+
}
|
|
168
|
+
|
|
169
|
+
module.exports = {
|
|
170
|
+
extractShallow,
|
|
171
|
+
parseRoleHints,
|
|
172
|
+
parseVentureHint,
|
|
173
|
+
parseClaims,
|
|
174
|
+
};
|